Книга знаний

1С:Предприятие / Приемы программирования / Встроенный язык

Отмена проведения из открытой формы документа

Отмена проведения из открытой формы документа штатно - через ОбработкуОжиданияАвтор статьи:
Последняя редакция №1 от 15.02.06
URL: http://kb.mista.ru/article.php?id=88

Ключевые слова: Отмена, проведения, открытого документа, открытой формы документа


Делаем в гл. модуле список значений глСписокДоковДействия - для хранения и обработки событий. Теперь создаем волшебную

Процедура глВсякиДействия()
Если ( глСписокДоковДействия.РазмерСписка() < 1 ) Тогда
   Возврат;
КонецЕсли;
       
Доки= СоздатьОбъект( "Документ" );
ЖР = СоздатьОбъект( "ЖурналРасчетов.Зарплата" );
   
Для сч = 1 по глСписокДоковДействия.РазмерСписка() Цикл
   ПризнакДействия = "";
   СамДок = глСписокДоковДействия.ПолучитьЗначение( сч, ПризнакДействия );
       
   Если ПустоеЗначение( СамДок ) = 1 Тогда
        Продолжить;
   ИначеЕсли ТипЗначенияСтр( СамДок ) = "Документ" Тогда
     Если Доки.НайтиДокумент( СамДок ) = 0 Тогда
       Продолжить;
     КонецЕсли;
           
     Если  ( ПризнакДействия <> "Провести" ) и
       ( ПризнакДействия <> "Сделать непроведенным" ) и
       ( ПризнакДействия <> "Открыть" ) Тогда
         Продолжить;
     КонецЕсли;
   ИначеЕсли ТипЗначенияСтр( СамДок ) = "ЗаписьЖурналаРасчетов" Тогда
     Если ЖР.НайтиЗапись( СамДок ) = 0 Тогда
       Продолжить;
     КонецЕсли;

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

 глСписокДоковДействия.УдалитьВсе();
 ОбработкаОжидания( "ПроверкаРасписания", 60 );
КонецПроцедуры

//********
//затем по волшебной кнопке в документе достаточно сделать вызов
 глСписокДоковДействия.ДобавитьЗначение( ТекущийДокумент(), "Сделать непроведенным" );
 глСписокДоковДействия.ДобавитьЗначение( ТекущийДокумент(), "Открыть" );

 Форма.Закрыть(0);
 ОбработкаОжидания( "ПроверкаРасписания", 1 );


Описание | Рубрикатор | Поиск | ТелепатБот | Захваченные статьи | Установки | Форум
© Станислав Митичкин (Волшебник), 2005-2025 | Mista.ru

Яндекс.Метрика