1. 1C / Говнокод #9670

    −126

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    Процедура ОбработкаПроведения(Отказ, РежимПроведения)
    	Для Каждого Строка Из тчПутевыеЛисты Цикл
    		Если Строка.ПринятКУчету = Истина Тогда
    			ПутЛист = Строка.ПутевойЛист.ПолучитьОбъект();
    			ПутЛист.ПринятКУчету = Истина;
    			ПутЛист.ДатаПринятияКУчету = Дата;
    			ПутЛист.Записать(РежимЗаписиДокумента.Проведение, РежимПроведенияДокумента.Неоперативный);
    		КонецЕсли;
    	КонецЦикла;
    	Форма = ЭтотОбъект.ПолучитьФорму("ФормаДокумента");
    	Форма.ЭлементыФормы.тчПутевыеЛисты.Доступность = Ложь;
    	Форма.ЭлементыФормы.тчРаспределениеЗатрат.Доступность = Ложь;
    	Форма.ЭлементыФормы.КоманднаяПанель2.Кнопки.СформироватьДокумент.Доступность = Ложь;
    	Форма.ЭлементыФормы.КоманднаяПанель2.Кнопки.Заполнить.Доступность = Ложь;
    	Форма.ЭлементыФормы.КоманднаяПанель1.Кнопки.ЗаполнитьПоДаннымПоставщика.Доступность = Ложь;
    	Форма.ЭлементыФормы.КоманднаяПанель1.Кнопки.Заполнить.Доступность = Ложь;
    КонецПроцедуры

    ШЕДЕВР!
    Конечно, база данных ведь запоминает, что мы элементы формы сделали недоступными...

    Запостил: mrbus, 14 Марта 2012

    Комментарии (6) RSS

    • просто база после проведения изменяет интерфейс (если проведение выполнялось в диалоге а не программно).
      иногда это все-таки имеет смысл.
      Ответить
      • Это не делается в обработке проведения. Для этого есть событие формы "ПослеЗаписи"
        Ответить
        • показать все, что скрытокому надо после записи изменить интерфейс - тот меняет после записи.
          кому надо в рамках одного сеанса после проведения в диалоге изменить интерфейс - тот меняет при проведении.
          я так понимаю ты претендуешь на то, что тебе виднее - кому что надо?..
          Ответить
          • Кому что надо - не претендую, а как что делается - претендую. Проведение тоже вызывает событие ПослеЗаписи на форме, т. к. проведение документа выполняется в одной транзакции с записью. К тому же хотелось бы обратить внимание на код
            Форма = ЭтотОбъект.ПолучитьФорму("ФормаДокумента ");
            который СОЗДАЕТ НОВУЮ ФОРМУ. А на экране форма так и не показывается (нет вызова Форма.Открыть()). То бишь мы создаем новую форму (хм... с чего бы - не факт, что юзер хотел её увидеть... а вдруг мы проводим документы через ежемесячное групповое проведение документов), делаем в ней какие-то настройки, но форма на экране так и не покажется и она теряется.
            И третий момент. Проведение документа вполне могло выполняться на сервере (например, через регламентированное задание). А сервер с формами не работает и попросту выдаст ошибку.
            Я вам говорю, всякие изменения на форме надо делать, если форма вообще существует, то бишь в КОДЕ ФОРМЫ.
            Ответить
    • Перепроведение документа при проведении другого документа да еще и в цикле, + работа с формой из потенциально серверного модуля. Реальный говнокод.
      Ответить
    • показать все, что скрытоvanished
      Ответить

    Добавить комментарий