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

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

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

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

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

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

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

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

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

Источник: lessons1c
Разместил:   Версии: | 8.x |  Дата:   Прочитано: 58924
 +15 
Распечатать
Возможно, вас также заинтересует
Как заполнить табличную часть формы программно? 8
Нужно по кнопке Заполнить - сформировать данные для заполнения табличных частей и заполнить их. Форма имеет вид: Рядом с кнопкой Записать и закрыть добавлена кнопка Заполнить документ , код ее команды: // Код заполнения ТЧ НаСервере П
17 правил для составления оптимального ЗАПРОСа к данным базы 1С 52
Для формирования и выполнения запросов к таблицам базы данных в платформе 1С используется специальный объект языка программирования Запрос . Создается этот объект вызовом конструкции Новый Запрос . Запрос удобно использовать, когда требуется получ
1C и Google Maps 21
была поставлена задача отображения на географической карте медицинских учреждений. После обзора предлагаемых решений был выбран сервис google. Но так же подобного рода подход будет работать и с картами сервиса yandex. Во время решения задачи было реш
1С 8.x : Как убрать лидирующие нули в номере Документа (вариант2) 0
Скопировать строку с номером, с лидирующими нулями, в числовом поле (с форматом без групп, без группировки), и вернуть(скопировать) обратно в строковом поле с номером. Возвращает без нулей.
Cодержимое указанного ниже веб-сайта в этом приложении блокируется... Aboutsecurity_1cv8c.exe 1
Проблема: После обновления на 1С:Бухгалтерию предприятия 3-й версии, при нажатии на закладку командного интерфейса 1С:предприятие, выскакивает ошибка: Aboutsecurity_1cv8c.exe или Aboutsecurity_1cv8.exe «Содержимое указанного ниже веб-узла в э
Посмотреть все результаты поиска похожих
Комментарии
p0mid0r0v
20.08.2023 14:29Комментарий: 5
p0mid0r0v

только "сообщить" может выводить сообщения (с некоторых пор) не в соответствии с фактической хронологией вызова "Сообщить(...)", поэтому правильнее было бы использовать ЗаписьЖурналаРегистрации - там с соответствием хронологии моментам фактического вызова этой процедуры совершенно точно будет все Ок.

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 УП
 Комментарий = "привет из обработки проведения;
Записать(РежимЗаписиДокумента.Запись);"
и оно сохранится
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.