helpf.pro
Регистрация
 0 
Распечатать

Последовательность выполнения ПередЗаписью(), ПриЗаписи(), ПослеЗаписи() и ОбработкаПроведения() ?

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

Чтобы выяснить этот вопрос, Вы можете разместить вывод сообщений в указанных процедурах и посмотреть, в каком порядке они запускаются.

Итак, начнем с самого распространенного режима - проведение документа пользователем из его формы (проще говоря нажатием на кнопку "Провести" или "Ок" в форме документа).

Последовательность запуска процедур будет выглядеть следующим образом:
Форма. Перед записью.
Модуль. Перед записью.
Модуль. При записи.
Модуль. Обработка проведения.
Форма. При записи.
Форма. После записи.
При простой интерактивной записи документа (без проведения) порядок будет тот-же, за исключением процедуры ОбработкаПроведения(), которая в режиме записи не запускается. А при отмене проведения вместо нее запускается процедура ОбработкаОтменыПроведения();

На этапах 1 и 2 Вы еще можете программно внести изменения в документ, если это требуется - запись документа в базу еще не произошла и транзакция записи еще не начата. Начиная с этапа 3 внести изменения уже не получится, т.к. процесс записи документа уже совершился, но транзакция еще не завершена. Транзакция завершится только после завершения этапа 5, когда все требуемые данные и движения документа будут полностью физически записаны в базу данных.

Теперь давайте рассмотрим проведение документа без открытия формы документа (с помощью обработки или из формы списка). Последовательность запуска процедур будет выглядеть следующим образом:
Модуль. Перед записью.
Модуль. При записи.
Модуль. Обработка проведения.
Как видите, процедуры модуля формы не запустились.

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

Источник: lessons1c
Разместил:   Версии: | 8.x |  Дата:   Прочитано: 13065
 0 
Распечатать
Возможно, вас также заинтересует
Как заполнить табличную часть формы программно? 2
Нужно по кнопке Заполнить - сформировать данные для заполнения табличных частей и заполнить их. Форма имеет вид: Рядом с кнопкой Записать и закрыть добавлена кнопка Заполнить документ , код ее команды: // Код...
1C и Google Maps 12
была поставлена задача отображения на географической карте медицинских учреждений. После обзора предлагаемых решений был выбран сервис google. Но так же подобного рода подход будет работать и с картами сервиса yandex. Во...
Cодержимое указанного ниже веб-сайта в этом приложении блокируется... Aboutsecurity_1cv8c.exe 0
Проблема: После обновления на 1С:Бухгалтерию предприятия 3-й версии, при нажатии на закладку командного интерфейса 1С:предприятие, выскакивает ошибка: Aboutsecurity_1cv8c.exe или Aboutsecurity_1cv8.exe «Содержимое указанного ниже...
Google maps : вывод точек на карту и режим панорамы 2
В отличие от яндекс карт в GMaps можно использовать панорамы - за что им большой плюс! Надеюсь в яндексе прочитают этот пост и тоже когда-нибудь это сделают! Для клиента нужно было сделать вывод объектов на карту С...
Google maps, поиск оптимального маршрута 2
В данном посте хочу коснуться основных аспектов построения оптимального маршрута с использованием API Google maps. Исходные данные для построения маршрута: * Географические координаты объектов, которые хранятся в базе; *...
Посмотреть все результаты поиска похожих
Комментарии
DJ_Serega
13.03.2013 17:32Комментарий: 4
DJ_Serega
mixa4, прикольно. Надо будет запомнить.
mixa4
13.03.2013 04:27Комментарий: 3
mixa4
DJ_Serega, а вы попробуйте сначала.
Я вообще это не сам придумал, а увидел в Общепите, там у документа выпуска продукции есть реквизит СебестоимостьДокумента, меняющийся в том числе при проведении их журнала, ему в обработке проведения присваивается значение, затем в конце процедуры ОбработкаПроведения:
Код 1C v 8.2 УП
    Если НЕ Отказ И Модифицированность() Тогда
Записать(РежимЗаписиДокумента.Запись);
КонецЕсли;
DJ_Serega
12.03.2013 23:54Комментарий: 2
DJ_Serega
mixa4, и что же будет? А будет еще одна инициализинована запись объекта. Ну и рекурсия *09
mixa4
12.03.2013 03:33Комментарий: 1
mixa4
Цитата
Начиная с этапа 3 внести изменения уже не получится
не совсем так, как минимум в обработке проведения можно написать что-то типа
Код 1C v 8.2 УП
 Комментарий = "привет из обработки проведения;
Записать(РежимЗаписиДокумента.Запись);"
и оно сохранится
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.