| Отмена проведения из открытой формы документаКлючевые слова: Отмена, проведения, открытого документа, открытой формы документа
 
 
 Делаем в гл. модуле список значений глСписокДоковДействия - для хранения и обработки событий. Теперь создаем волшебную
 
 
 
Процедура ПроверкаРасписания()
 Если ( глСписокДоковДействия.РазмерСписка() < 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 без изменений.
 |