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