Отмена проведения из открытой формы документа Ключевые слова: Отмена, проведения, открытого документа, открытой формы документа
Делаем в гл. модуле список значений глСписокДоковДействия - для хранения и обработки событий. Теперь создаем волшебную
Процедура глВсякиДействия()
Если ( глСписокДоковДействия.РазмерСписка() < 1 ) Тогда
Возврат;
КонецЕсли;
Доки= СоздатьОбъект( "Документ" );
ЖР = СоздатьОбъект( "ЖурналРасчетов.Зарплата" );
Для сч = 1 по глСписокДоковДействия.РазмерСписка() Цикл
ПризнакДействия = "";
СамДок = глСписокДоковДействия.ПолучитьЗначение( сч, ПризнакДействия );
Если ПустоеЗначение( СамДок ) = 1 Тогда
Продолжить;
ИначеЕсли ТипЗначенияСтр( СамДок ) = "Документ" Тогда
Если Доки.НайтиДокумент( СамДок ) = 0 Тогда
Продолжить;
КонецЕсли;
Если ( ПризнакДействия <> "Провести" ) и
( ПризнакДействия <> "Сделать непроведенным" ) и
( ПризнакДействия <> "Открыть" ) Тогда
Продолжить;
КонецЕсли;
ИначеЕсли ТипЗначенияСтр( СамДок ) = "ЗаписьЖурналаРасчетов" Тогда
Если ЖР.НайтиЗапись( СамДок ) = 0 Тогда
Продолжить;
КонецЕсли;
Если ( ПризнакДействия <> "ОтменитьРасчет" ) и
( ПризнакДействия <> "Рассчитать" ) Тогда
Продолжить;
КонецЕсли;
Иначе
Продолжить;
КонецЕсли;
удача = 20;
Пока удача > 0 Цикл
Попытка
Если ПризнакДействия = "Провести" Тогда
Если Доки.Проведен() = 0 Тогда
Попытка
Доки.Провести();
Исключение
КонецПопытки;
ЗаписьЖурналаРегистрации( ?( Доки.Проведен() = 1, "", "Неудачное " ) +
"Автопроведение документа",,, СамДок, 3 );
КонецЕсли;
ИначеЕсли ПризнакДействия = "Сделать непроведенным" Тогда
Если Доки.Проведен() = 1 Тогда
Доки.СделатьНеПроведенным();
ЗаписьЖурналаРегистрации( ?( Доки.Проведен() = 0, "", "Неудачная " ) +
"Автоотмена проведения документа",,, СамДок, 3 );
КонецЕсли;
ИначеЕсли ПризнакДействия = "Открыть" Тогда
конт = "";
ОткрытьФорму( СамДок, конт );
ИначеЕсли ПризнакДействия = "ОтменитьРасчет" Тогда
ЗаписьЖурналаРегистрации( "Автоотменена расчета по " +
ПредставлениеВР( ЖР.ВидРасч ) + " с " +
ЖР.ДатаНачала + " по " + ЖР.ДатаОкончания +
", был рез = " + ЖР.Результат,,, ЖР.Объект, 3 );
ЖР.Исправить(0);
ЖР.ОтменитьИсправление();
Сообщить( "Отменен расчет у " + ЖР.Объект + " по " +
ПредставлениеВР( ЖР.ВидРасч ));
ИначеЕсли ПризнакДействия = "Рассчитать" Тогда
ЖР.Рассчитать();
ЗаписьЖурналаРегистрации( "Авторасчет по " + ПредставлениеВР( ЖР.ВидРасч ) +
" с " + ЖР.ДатаНачала + " по " + ЖР.ДатаОкончания + ", рез = " +
ЖР.Результат,,, ЖР.Объект, 3 );
КонецЕсли;
Прервать;
Исключение
удача = удача - 1;
КонецПопытки;
КонецЦикла;
КонецЦикла;
глСписокДоковДействия.УдалитьВсе();
ОбработкаОжидания( "ПроверкаРасписания", 60 );
КонецПроцедуры
//********
//затем по волшебной кнопке в документе достаточно сделать вызов
глСписокДоковДействия.ДобавитьЗначение( ТекущийДокумент(), "Сделать непроведенным" );
глСписокДоковДействия.ДобавитьЗначение( ТекущийДокумент(), "Открыть" );
Форма.Закрыть(0);
ОбработкаОжидания( "ПроверкаРасписания", 1 );
|