Книга знаний

1С:Предприятие / Объекты конфигурации / Документы

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

Отмена проведения из открытой формы документа штатно - через ОбработкуОжиданияАвтор статьи: Rovan | Редакторы: Волшебник, romix
Последняя редакция №5 от 16.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 );



Использование обработки (romix)



Другой способ сделать то же самое - использование обработки.
Вы открываете из документа обработку (и при этом закрываете форму самого документа).
В обработке есть меню, что сделать с документом: изменить его дату, время, пометить на удаление, снять с проведения и т.д.

После закрытия формы обработки вы автоматически вновь открывается тот же документ.

Пример реализации приведен здесь:
http://x-romix.narod.ru/Fakir3.rar
(217 КБ, скачивать левой кнопкой мыши)

Активизируйте пункт меню Журналы - Тест изменения позиции.
Найдите там документ от 09.06.2005. Откройте этот документ и нажмите кнопку "Изменение параметров документа". Из открывшейся обработки можно делать с документом практически все, что вы можете проделать с ним в журнале документов. Обработку можно использовать в любой конфигурации 1С:Предприятие 7.7 без изменений.

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

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