Обработчики событий при записи объектов. Зачем и что за чем?

Публикация № 1098803 25.07.19

Разработка - Математика и алгоритмы

запись документа справочника призаписи передзаписью послезаписи

Программисту, имеющему немного опыта на платформе 1С 8.3, бывает сложно разобраться: ПередЗаписью, ПриЗаписи, ПослеЗаписи, на сервере, на клиенте, в модуле формы, в модуле объекта.... Эта шпаргалка была создана в процессе обучения и реального опыта с целью разложить всё по полочкам, чтобы было четкое понимание в каком случае какой обработчик нужно использовать и в какой последовательности они запускаются при записи и проведении документов. Данная статья будет полезна в большей степени начинающим разработчикам. Но и опытным позволит освежить информацию, упорядочить её.

Казалось бы, всё это есть в литературе. Зачем словами переписывать?  В этой статье собрана и структурирована информация из разных источников. Однако не всегда и не у всех есть эта литература под рукой. А тут информация в открытом источнике  и достаточно структурированная, изложенная простым языком. Тем самым делаем эти знания более понятными и доступными.

Будем рассматривать запись документа, чтобы не загромождать статью и не описывать все типы объектов (у них всё также, за небольшим исключением).

Итак, для чего нам вообще нужны эти обработчики?

Очень часто программисту требуется переопределить стандартное поведение системы во время записи документа, а именно: отменить запись, в случае каких-то условий; запросить дополнительную информацию у пользователя; дозаполнить реквизиты; что-то ещё записать в базу данных на основании этой записи; что-то изменить на форме после записи и т.д. и т.п.  Каждый программист рано или поздно сталкивается с подобными задачами, потому знать назначение и последовательность запуска этих событий необходимо.

Последовательность запуска событий (в том порядке, в каком они перечислены) и небольшие подробности: 

Во многих обработчиках есть параметр «Отказ». Там, где этот параметр присутствует означает, что в этом обработчике ещё можно отказаться от записи,  присвоив параметру «Отказ»  значение Истина, и тогда запись произведена не будет. И ещё, отдельно отмечу, что при программной записи события модуля формы не запускаются!

1)    Модуль формы  ПередЗаписью(Отказ, ПараметрыЗаписи)  

Выполняется на клиенте!

Этот обработчик следует использовать, если необходимо организовать диалог с пользователем перед тем, как записать объект. Запросить дополнительную информацию,  предупредить о чём-либо, дать возможность отказаться и т.п.

Второй параметр  этого обработчика  «ПараметрыЗаписи»  имеет тип «Структура». У документов эти параметры заполняются системой предопределенными параметрами РежимЗаписи, РежимПроведения. Можно добавить свои!

 Эти параметры передаются между событиями формы ПередЗаписьюНаСервере, ПриЗаписиНаСервере, ПослеЗаписиНаСервере, где их можно благополучно  использовать. Например, можно спросить что-то у пользователя и ответ записать в этот параметр. И уже, например, в ПриЗаписиНаСервере использовать этот параметр для анализа и дальнейших действий.

2)  Модуль формы  ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты)  

3)  Модуль объекта  ОбработкаПроверкиЗаполнения (Отказ, ПроверяемыеРеквизиты)

Сначала вызывается событие формы ОбработкаПроверкиЗаполненияНаСервере На данном этапе есть доступ к данным формы.

После этого в памяти сервера создается прикладной объект, соответствующий типу основного реквизита формы, и его данные заполняются из данных формы.

Затем вызывается событие прикладного объекта ОбработкаПроверкиЗаполнения.

Эти два обработчика проверки заполнения реализуются через параметр «ПроверяемыеРеквизиты» типа Массив, содержащий реквизиты, которые надо проверять (т.е. которым установлено свойство проверки заполнения  «Выдавать ошибку»).  И если из этого массива убрать реквизит, то проверяться он не будет, если добавить, то будет выполняться проверка заполнения.    

Эти два обработчика событий предназначены :

  1. Для включения в  проверку заполнения тех реквизитов, у которых в свойствах  «ПроверкаЗаполнения» указано «Не проверять».  Для этого надо добавить  этот реквизит в массив параметр «ПроверяемыеРеквизиты»
  2. Для того, чтобы исключить из автоматической проверки реквизиты, у которых установлено свойство проверки заполнения  «Выдавать ошибку» в зависимости от каких-то условий. Для этого надо удалить  этот реквизит из массива параметра «ПроверяемыеРеквизиты»

Имеется несколько особенностей, которые необходимо учитывать:

  1. Если у формы из которой записывается объект в свойствах не установлено «ПроверятьЗаполнениеАвтоматически», то тогда эти обработчики проверки заполнения не вызываются и проверки не происходят!
  2. Вызываются только при интерактивной записи! При программной записи  не вызываются.  Для проверки нужно использовать метод объекта ПроверитьЗаполнение(), который инициирует запуск этих событий.
  3. Для документов, имеющих возможность проведения, эти события проверки заполнения вызываются только при проведении!

Если данные формы не нужны, то используйте обработчик модуля объекта ОбработкаПроверкиЗаполнения

 4)  Модуль формы ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)

В этом обработчике можно дозаполнять реквизиты объекта (через параметр ТекущийОбъект)  или провести дополнительные проверки. Есть доступ к данным формы. 

Важно понимать, что в предыдущем обработчике (в процессе проверки заполнения) произошло «разделение» формы на форму и прикладной объект (пока только в памяти сервера), данные которого будут записаны в базу данных.

В обработчике модуля формы ПередЗаписьюНаСервере появляется возможность доступа как к данным основного реквизита формы Объект, а также и к самому объекту, который будет записан через параметр обработчика ТекущийОбъект.

Параметр ТекущийОбъект  имеет тип класса «объект» в зависимости от типа записываемого объекта (в случае записи документа ДокументОбъект). Т.е. экземпляр класса объект создан, и можно обратиться к его свойствам и методам, но в базу данных ещё не записан.

И тут внимание!!! ТекущийОбъект - объект, который реально будет записан в информационную базу и дозаполнять реквизиты нужно именно через параметр ТекущийОбъект.

Внесение изменений через реквизит формы объекта  Объект не даст никакого результата, его можно только анализировать. В информационную базу эти данные записаны не будут. После завершения транзакции записи, данные из ТекущегоОбъекта запишутся в Объект.  Таким образом, все изменения, внесенные в Объект, пропадут.

Также нужно понимать, что при программной записи объекта это событие вызываться не будет.

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

Начало транзакции 

5)   Модуль объекта ПередЗаписью(Отказ)

В этом обработчике можно провести дополнительные проверки и отказаться от записи.

Для документов  в параметры данного обработчика добавляются ещё два параметра: РежимЗаписи, РежимПроведения.

Запись

6)  Модуль объекта ПриУстановкеНовогоНомера(СтандартнаяОбработка, Префикс)

Возникает в момент, когда выполняется установка  номера нового документа, задачи или бизнес-процесса. 

Или ПриУстановкеНовогоКода(СтандартнаяОбработка,Префикс)

Возникает в момент, когда выполняется установка нового кода элемента справочника, узла плана обмена или кода плана видов характеристик. 

Эти событии вызываются для объектов у которых указано свойство «Автонумерация»  и только для тех объектов, у которых пустой код на момент записи.

Если установить параметру СтандартнаяОбработка значение Ложь, то новый номер генерироваться не будет и можно программно задать код объекта в данном обработчике.

7)  Модуль объекта ОбработкаУдаленияПроведения (Отказ)

Этот обработчик запускается только при отмене проведения документов с целью удаления движений из регистров. При этом неважно как отменяется проведение документа - программно или интерактивно.

8)  Модуль объекта ПриЗаписи(Отказ)

Вызывается после записи объекта в базу данных, но до окончания транзакции записи.

Назначение этого обработчика - записать в базу данных дополнительную информацию, связанную с данными записываемого объекта.

Ссылка уже есть и можно записать в базу данных дополнительные данные на основании текущего объекта, используя эту ссылку.

Например, при записи создавать другой документ, содержащий реквизит ссылку на записываемый.

Поскольку это событие обрабатывается в транзакции записи основных данных,  гарантируется синхронность изменения основных и дополнительных данных. Либо и те и другие будут записаны, либо и те и другие изменения будут отменены при отмене транзакции.

Можно ещё отказаться от записи.

9)  Модуль объекта ОбработкаПроведения (Отказ, РежимПроведения)

Этот обработчик запускается только при проведении документов. При этом неважно как проводится документ - программно или интерактивно.

Основное назначение процедуры-обработчика данного события - генерация движений по документу. Именно в  данном обработчике прописываются алгоритмы записей в регистры, т.е. программно формируются движения документа.

Параметр РежимПроведения определяет как будет проводиться документ: оперативно или неоперативно.

Если для данного вида документа в конфигурации установлено автоматическое удаление движений, то перед возникновением события все движения по документу будут удалены.

10)      Модуль формы  ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)

Вызывается после записи объекта в базу данных, но до окончания транзакции записи.. Есть последний шанс отказаться от записи.

Назначение этого обработчика – записать в базу данных дополнительную информацию, связанную с данными записываемого объекта.

Если данные для записи дополнительной информации находятся в самом объекте, то мы использовали обработчик модуля объекта ПриЗаписи(). А вот если данные находятся в форме, то как раз для таких случаев и предназначено это событие, потому как есть доступ к данным формы.

Этот обработчик ещё используется, если нужны данные параметра обработчика ПараметрыЗаписи, которые «приехали» в этом параметре из других обработчиков.

Через параметр ТекущийОбъект доступны данные, которые уже были записаны в информационную базу и имеет тип класса Объект (ДокументОбъект). Можно обратиться к его свойствам и методам, а также использовать для вызова экспортных методов объекта.

Работать следует именно через этот параметр, то есть не путать с основным  реквизитом формы Объект, так как там данные, которые были до записи и его изменения бесполезны потому, что после этого обработчика данные из ТекущегоОбъекта запишутся в Объект.

Если это запись нового объекта, то ТекущийОбъект.Ссылка будет содержать уже конкретное значение ссылки на этот элемент в информационной базе. А вот Объект.Ссылка имеет пустое значение на этом этапе.

Итак, по поводу этого обработчика можно сделать следующие выводы:

  • Если нужно выполнять какие-то действия, связанные с записанным объектом, и при этом, например, нужна ссылка на этот объект, необходимо использовать ТекущийОбъект.Ссылка.
  • Основной реквизит формы Объект можно использовать только для сравнения того, что «было», с тем, что «записалось». 
  • Если нужно изменить записанные дополнительные данные на основании данных формы и данных объекта, то необходимо использовать в данном обработчике при обращении к данным объекта ТекущийОбъект

Завершение  транзакции

11) Модуль формы ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи)

После завершения транзакции записи выполняется преобразование данных записанного объекта в данные формы. После этого вызывается данный обработчик. Это последний обработчик, в котором по отдельности доступны данные формы и объект, который был записан.

Этот обработчик используют, когда предполагаются действия над формой. Это те действия, которые должны быть выполнены только в том случае, когда объект 100 % записан (т.е. после транзакции). Например, вывод в форме некоторой дополнительной информации, связанной с данными объекта. Или выполнение каких-либо действий, которые должны быть выполнены только в том случае, когда объект гарантированно записан.

Однако здесь назначение ТекущийОбъект – прямо противоположное тому, что было до этого. В этом обработчике данные записанного объекта уже помещены в форму, т.е. уже загружены в основной реквизит формы  Объект и потому ТекущийОбъект изменять бессмысленно: он будет уничтожен при выходе из обработчика.

Но ТекущийОбъект  можно использовать, чтобы выполнить какие-то вспомогательные действия, обратившись к его свойствам и методам, а также через вызов экспортных методов объекта. Например, если на данном этапе нужны какие-то данные или методы объекта, нужно использовать ТекущийОбъект, а не пытаться получать их через основной реквизит формы Объект.

Доступны ПараметрыЗаписи, данные которых «приехали» в этом параметре из других обработчиков.

12)  Модуль формы ПослеЗаписи(ПараметрыЗаписи) 

Выполняется на клиенте!

Можно использовать для того, чтобы визуально что-то отобразить на форме или  организовать диалог с пользователем, например выдать предупреждение. 

Доступны ПараметрыЗаписи, данные которых «приехали» в этом параметре из других обработчиков.

_____________________________________________________________________________________________________________________________

Дополнение о подписках на события и их месте в этой последовательности вызова обработчиков. 

Часто бывает так, что использовать подписку на событие эффективнее, потому что не затрагивает модули, находящиеся на поддержке и очередное обновление конфигурации проходит с куда меньшими затратами труда и времени. 

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

Обработчики событий объекта на которые можно сделать подписку на события: 
- ПриУстановкеНовогоНомера / ПриУстановкеНовогоКода 
- ПриКопировании 
- ОбработкаЗаполнения 
- ПередЗаписью 
- ПриЗаписи 
- ПередУдалением 
- ОбработкаПроведения 
- ОбработкаУдаленияПроведения
- ОбработкаПроверкиЗаполнения

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

Т.е., если для какого-то документа в конфигурации есть две подписки на событие ПриЗаписи, то в начале выполнится та, которая расположена выше.

Помнится, где-то в обсуждениях на ИС на эту тему предупреждали, что если в типовой конфигурации есть добавленные подписки на события, то после обновления обязательно нужно проверять порядок следования подписок и возвращать добавленные подписки на своё место. Так как, если в конфигурации есть типовая подписка на это же событие с этим же источником добавленные подписки могут встать выше типовых при обновлении и нарушится логика работы.

Дополнение 3: подписки с источником общего типа (ДокументОбъект, СправочникОбъект) выполняются позже, чем с источником конкретного типа, даже если он составной.

А что делать, если в типовой конфигурации есть подписка на Источник ДокументОбъект и нужно сделать подписку для документа определенного типа позже типовой подписки?

Как вариант указывать в своей подписке источник ДокументОбъект и ставить ее ниже по списку, а в самом обработчике проверять тип документа: 
Если ТипЗнч(Источник) <> Тип("ДокументОбъект.МойДокумент") Тогда 
Возврат; 
КонецЕсли;

 

Если статья оказалась вам интересной и полезной, то сохраняйте, чтоб не потерять и иметь под рукой- просто нажимайте +  и получите от меня + в свою карму :))

 

 

 

Специальные предложения

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. s22 19 25.07.19 19:26 Сейчас в теме
+
DrAku1a; avmironov; user692332_tomskih_nl; ivangrant; any__uta; Marina_Sh; AlbinaAAA; +7 Ответить
2. Xershi 991 25.07.19 20:40 Сейчас в теме
На ИС уже есть такая статья.
Так мало того про подписки на события ни слова!
3. AlbinaAAA 1257 25.07.19 20:50 Сейчас в теме
(2) То была моя статья, написанная в 2012-м году. Меня радует, что вы её помните (если речь о ней). Но по новым правилам на старые публикации не начисляются стартмани. Мне порекомендовали в техподдержке ту удалить и создать новую. Чтобы не быть голословной прикрепляю скрин с личного кабинета, где видно ту статью неактивной, и скрин с ответом с техподдержки. Я статью значительно доработала, а про подписки допишу. Спасибо за отклик!
Прикрепленные файлы:
userMKA; Jimbo; avmironov; METAL; Maxanamoon; RuSeek; user847462; arakelyan; ivangrant; Alia777; user1126770; Suslik_Johns; mamonth; Светлый ум; marcal116; Award; dsdred; user650871_vaskozmin; A_Max; user811769; catv; Evg-Lylyk; +22 Ответить
4. Xershi 991 25.07.19 21:21 Сейчас в теме
(3) прикол! Да, будет кстати!
5. rusmil 255 26.07.19 05:21 Сейчас в теме
(3) А сколько должно пройти времени для статьи, по прошествии которого перестают начисляться стартмани?
7. AlbinaAAA 1257 26.07.19 06:30 Сейчас в теме
(5) зависит от даты публикации. Если статья опубликована раньше 2013 года, то не начисляются. Почему, не знаю.
8. rusmil 255 26.07.19 06:40 Сейчас в теме
(3) Я правильно понимаю, что удалив старую статью, у вас уменьшился общий рейтинг как автора?
Может стоило просто в старой статье задать ссылку на новую статью?
user1044557; avmironov; user1126770; RustIG; AlbinaAAA; +5 Ответить
9. AlbinaAAA 1257 26.07.19 08:19 Сейчас в теме
(8) Спасибо большое за подсказку, сама не догадалась так сделать :)) Отправила на модерацию, посмотрим пропустят ли..
12. AlbinaAAA 1257 26.07.19 12:13 Сейчас в теме
(8) модератор не пропускает такую публикацию :(
13. rusmil 255 26.07.19 12:55 Сейчас в теме
(12) Интересно, как это модератор мотивирует.? В Вашем случае получается пишем новую статью и теряем рейтинг? Мне кажется это как-то несправедливо.
Мах; avmironov; user847462; RustIG; +4 Ответить
14. AlbinaAAA 1257 26.07.19 13:03 Сейчас в теме
(13) дословно "вас обсмеют в комментариях и меня тоже", два раза отправляла и два раза отказ с непонятным ответом..
15. rusmil 255 26.07.19 13:21 Сейчас в теме
(14) Ну тогда может они смогут рейтинг накопленный на старой статье перекинуть в новую статью, ведь он накоплен заслуженно, а новая статья это замена старой, чем такой вариант им не подходит?
Мах; avmironov; user847462; RustIG; +4 Ответить
16. AlbinaAAA 1257 26.07.19 13:27 Сейчас в теме
(15) Напишу в техподдержку с такой просьбой. Спасибо вам за участие!
18. AlbinaAAA 1257 29.07.19 20:18 Сейчас в теме
(8) получилось :)) ещё раз благодарю!
avmironov; +1 Ответить
24. alexey-simf 25.11.19 13:50 Сейчас в теме
(3) Для более полного комплекта можно и расширения упомянуть.
26. user970589 8 13.06.20 10:24 Сейчас в теме
(3)подскажите, есть ли возможность сделать подписку на обращение к реквизиту справочника? на чтение. Просто РЛС ковырять долго по правам. Если бы можно было выдернуть при обращении.. понимаю, что скорее всего нет, если вы полно изложили информацию в статье.
А, вижу, что нет, извините.
10. w.r. 636 26.07.19 08:28 Сейчас в теме
(2)

Так мало того про подписки на события ни слова!


Вот это самая интересная тема. Так как большинство типовых конфигураций на поддержке удобно менять именно через подписки
6. sam441 193 26.07.19 06:07 Сейчас в теме
11. Hatson 511 26.07.19 09:34 Сейчас в теме
Дополнение к материалу из книги
"Разработка управляемого интерфейса"
Глава 3.9. Последовательность событий при записи объекта из формы.
avmironov; METAL; AlbinaAAA; +3 Ответить
17. vikhrov53 41 29.07.19 13:30 Сейчас в теме
Спасибо за хорошо структурированный материал. Коротко и ясно и с пояснениями где и как применять. Возможно стоит стилистически доработать раздел "В модуле формы или в модуле объекта ?", а то при первом прочтении я не все понял.
avmironov; +1 Ответить
19. FreeArcher 149 06.08.19 10:07 Сейчас в теме
Отличная статья.
Но хорошо бы рассмотреть обратный процесс т.е. отмену проведения. Там последовательность событий иногда сбивает столку, когда забываешь порядок.
avmironov; +1 Ответить
20. kuzyara 1525 15.08.19 10:30 Сейчас в теме
Прикрепленные файлы:
Divedition; avmironov; METAL; user847462; pal; Дмитрий74Чел; Kamik; MarinaLed; Dnki; FreeArcher; +10 Ответить
21. u_n_k_n_o_w_n 33 19.08.19 09:31 Сейчас в теме
Отличная статья!!!

Спасибо за ваш труд.
user1098876; avmironov; user1485340; +3 Ответить
22. Dnki 4 29.09.19 11:13 Сейчас в теме
Спасибо! Хочу посмотреть на Ваш косметичку и удивиться.
user1485340; +1 Ответить
23. ymarch 21.10.19 23:09 Сейчас в теме
Спасибо, очень полезно.
avmironov; user1485340; +2 Ответить
25. topchydv 27.02.20 08:40 Сейчас в теме
Спасибо, очень лаконично и насыщенно. Все по делу. Статья помогла разложить все по полочкам у меня в голове!
user1098876; avmironov; +2 Ответить
27. Rabot 86 09.07.20 18:59 Сейчас в теме
Я бы добавил такой нюанс про подписки на события. Допустим у нас есть несколько подписок на событие документа "ПриЗаписи".
Если Отказ установить в обработчике объекта "ПриЗаписи", то ни одна подписка вызываться уже не будет.
А вот, если Отказ установить в одной из подписок "ПриЗаписи", то последующие подписки всё равно будут вызваны, хоть и с флагом Отказ = Истина.
Не знаю уж баг это или фишка, но на сколько я знаю это до сих пор так.
avmironov; AlbinaAAA; +2 Ответить
28. maxdmt 27 06.08.20 14:05 Сейчас в теме
Интересное дело.
Если в форме вызвать запись/провдение/отмену проведения - обработчики в форме вызываются.
Если в форме вызвать пометку на удаление - обработчики в форме не вызываются.
29. YuruSar 08.12.20 12:02 Сейчас в теме
Недоумкам, типа я,
Очень нужная статья...
По Вашему гвайду я
Пройду путём создателя.
avmironov; AlbinaAAA; +2 Ответить
30. AlbinaAAA 1257 09.12.20 11:52 Сейчас в теме
31. YuruSar 09.12.20 16:30 Сейчас в теме
(30) Создатель сволочь. ЗиКГУ, документ Увольнение. Многофункциональный, ЭТК, в ПФР. Пытаюсь в интерфейсе поменять комментарий - безуспешно. Ловлю по подписке, меняю, сохраняю. Ловлю повторно в подписке. Источник.Комментарий до исправления. Источник.Ссылка.Комментарий - измененный. Очень тонкий клиент. Просветите!
32. dhurricane 09.03.21 15:50 Сейчас в теме
По поводу события формы "ПриЗаписиНаСервере":
Если нужно изменить записанные данные перед отправкой их на клиент, необходимо использовать ТекущийОбъект

Есть ли у Вас примеры, для чего это может понадобиться?
33. user1562048 14.03.21 09:31 Сейчас в теме
При записи на сервере))))
(32)
34. nickoleyes@gmail.com 24.08.21 10:21 Сейчас в теме
(32) Заполнить Ответственного
35. dhurricane 24.08.21 11:08 Сейчас в теме
(34) Зачем заполнять Ответственного в данных формы, но без записи этого ответственного в базу данных?
36. nickoleyes@gmail.com 24.08.21 13:21 Сейчас в теме
(35) ТекущийОбъект, это данные записываемого в базу данных объекта.
37. dhurricane 24.08.21 13:31 Сейчас в теме
(36) ...в обработчике "ПередЗаписьюНаСервере". В обсуждаемом же обработчике "ПриЗаписиНаСервере" это уже записанный объект.
38. nickoleyes@gmail.com 24.08.21 13:44 Сейчас в теме
(37) ВЫ правы. Прошу прощения. Замылился.
39. AlbinaAAA 1257 24.08.21 17:11 Сейчас в теме
(32) Наверно правильнее было бы написать так: "Если нужно изменить записанные дополнительные данные на основании данных формы и данных объекта, то необходимо использовать в данном обработчике при обращении к данным объекта ТекущийОбъект, а при обращении к реквизитам формы Объект"
Назначение этого обработчика – записать в базу данных дополнительную информацию, связанную с данными записываемого объекта. Оно аналогично предыдущему обработчику "При записи", там то же самое назначение, но в модуле объекта. Ведь совсем не обязательно, что все исходные данные для записи дополнительной информации находятся в самом объекте. Они могут находиться и в форме. Как раз для таких случаев и предназначено это событие.

Пример: До записи объекта был какой-то РеквизитОбъекта = 3 и во время записи РеквизитОбъекта по каким-то условиям программно в обработчиках выше поменяли, например, на 5. Т.е. записали в базу РеквизитОбъекта =5 и получилось, что в данном обработчике "ПриЗаписиНаСервере" Объект.РеквизитОбъекта = 3, а ТекущийОбъект.РеквизитОбъекта=5.
А ранее, в обработчике ПриЗаписи в модуле объекта, создали какой-то документ, который должен быть создан и записан только, если создан и записан этот объект (поэтому делаем то в транзакции). Далее, пришли в обработчик модуля формы "ПриЗаписиНаСервере" и видим, что там реквизит формы , в зависимости от которого и значения РеквизитОбъекта нужно что-то дописать в тот ранее созданный и записанный документ. И вот тут используем в условии Объект.РеквизитФормы и ТекущийОбъект.РеквизитОбъекта (а не Объект.РеквизитОбъекта). Надеюсь, понятно написала)
avmironov; +1 Ответить
40. dhurricane 24.08.21 17:35 Сейчас в теме
(39) Какие тогда данные в Вашем примере уходят на клиент? Вновь созданный объект?

Процитированную в моем сообщении фразу я понял, как "Если хотите увидеть в форме объекта РеквизитОбъекта равным 4, необходимо писать ТекущийОбъект.РеквизитОбъекта = 4". Вероятно, неправильно понял, но не представляю, как еще можно интепретировать фразу "перед отправкой их [прим.: данные] на клиент".
41. AlbinaAAA 1257 24.08.21 17:47 Сейчас в теме
(40) Согласна. Вы поняли правильно, как написано. Мне правильнее было бы написать так "Если нужно изменить записанные дополнительные данные на основании данных формы и данных объекта, то необходимо использовать в данном обработчике при обращении к данным объекта ТекущийОбъект, а при обращении к реквизитам формы Объект".

Ну, а если, помедитировать над фразой "перед отправкой на клиент", то можно представить такой пример: далее после передачи данных объекта на клиент мы должны отразить эти, созданные дополнительные данные, на форме . Например на форме есть надпись реквизит формы "Создан документ такой-то с такими-то данными".
После обсуждаемого выше обработчика вызывается событие формы После записи на сервере, смысл которого, вывод в форме некоторой дополнительной информации, связанной с данными объекта. И там мы отразим данные созданного документа.
avmironov; +1 Ответить
42. dhurricane 24.08.21 17:58 Сейчас в теме
(41)
Например на форме есть надпись реквизит формы "Создан документ такой-то с такими-то данными".
Пример плохой практики. :-) При возникновении ошибки транзакция будет отменена, а вот изменения в данных формы - нет.

Вспомнил другой пример из практики для передачи данных на клиент:
* в модуле объекта при записи в дополнительные свойства помещаются некоторые данные (например, результат проверки, или созданные связанные объекты);
* в модуле формы ПриЗаписиНаСервере (или ПослеЗаписиНаСервере) из дополнительных свойств данные извлекаются и помещаются в параметры записи для передачи их на клиент;
* в модуле формы ПослеЗаписи из параметров извлекаются данные и каким-либо образом отображаются пользователю (например, в отдельной форме списка созданных объектов).
43. AlbinaAAA 1257 24.08.21 18:01 Сейчас в теме
(42) не соглашусь.
Пример плохой практики. :-) При возникновении ошибки транзакция будет отменена, а вот изменения в данных формы - нет.
Транзакция завершена и, если мы попали в обработчик После записи на сервере, значит всё записано.
44. dhurricane 24.08.21 18:02 Сейчас в теме
(43) Так транзакция может быть отменена здесь же, в обработчике "ПриЗаписиНаСервере".
45. dhurricane 24.08.21 18:09 Сейчас в теме
(43) Ой, неверно прочитал Ваш ответ, соответственно неверно его прокомментировал. Мы же говорим про событие "ПриЗаписиНаСервере", а не "ПослеЗаписиНаСервере".
46. AlbinaAAA 1257 25.08.21 09:12 Сейчас в теме
(45) и я вчера ступила)) Написала , что при обращении к реквизитам формы мы обращаемся через Объект. Нет, обращаемся напрямую к реквизиту формы, без Объект- мы же говорим про модуль формы и про реквизит формы! Внесла в статью изменение, спасибо за замечание!
avmironov; +1 Ответить
47. Funtik90 26.09.21 13:15 Сейчас в теме
Здравствуйте. объясните пожалуйста: "И ещё, отдельно отмечу, что при программной записи события модуля формы не запускаются!"
48. dklp 41 03.11.21 07:01 Сейчас в теме
Провожу отладку расширения для типовой конфигурации "Управление торговлей, 11.4" и заметил, что при записи документа "ЗаказКлиента" обработчик события модуля формы "ПередЗаписью" срабатывает дважды: один раз - по команде "ЗаписатьДокумент" непосредственно из самой формы при нажатии кнопки "Записать", а второй вызов происходит отсюда:

&НаКлиенте
Процедура Подключаемый_ОбработатьЗаписьОбъекта()
	
	ОбщегоНазначенияУТКлиент.ОбработатьЗаписьОбъектаВФорме(ЭтотОбъект, ПараметрыДляЗаписи);
	
КонецПроцедуры

Это стандартный механизм, предусмотренный типовой конфигурацией?

У меня просто в расширении после обработчика события "ПередЗаписью" происходит проверка правильности заполнения реквизитов, и пользователю выдается сообщение, если что-то не так. Заметил, что сообщение выскакивает дважды - прогнал по отладчику и увидел, что зачем-то производится двойная запись документа.
49. CratosX 111 18.11.21 15:37 Сейчас в теме
можно ещё добавить, что перед ОбработкаУдаленияПроведения() отрабатывает процедура ПередЗаписью()
avmironov; METAL; +2 Ответить
50. Sergey_is 02.02.22 17:46 Сейчас в теме
За "Для документов, имеющих возможность проведения, эти события проверки заполнения вызываются только при проведении!" отдельное спасибо.
avmironov; METAL; +2 Ответить
Оставьте свое сообщение

См. также

Тестирование средств 1С для решения СЛАУ

Механизмы платформы 1С Математика и алгоритмы Платформа 1С v8.3 Россия Бесплатно (free)

В статье анализируются средства платформы для решения системы линейных уравнений в 1С. Приводятся доводы в пользу некорректной работы встроенных алгоритмов, а значит потенциально некорректного расчета себестоимости в типовых конфигурациях.

23.11.2022    1168    gzharkoj    11    

15

Изменения формата файлов конфигурации (CF) в 8.3.16

Математика и алгоритмы Платформа 1С v8.3 Бесплатно (free)

Дополнение по формату файлов конфигурации (*.cf) в версии 8.3.16.

16.12.2021    2932    fishca    12    

32

Установка отбора по списку значений при открытии формы выбора справочника из реквизита обработки

Математика и алгоритмы Платформа 1С v8.3 Конфигурации 1cv8 Россия Бесплатно (free)

Описан алгоритм установки отбора по списку значений при открытии формы выбора справочника. Параметром отбора является список значений передаваемый из одной формы обработки в другую форму этой же обработки. Тестировано под платформу 8.3.18

11.12.2021    5825    prog1c_vl    4    

3

Механизм анализа данных. Кластеризация.

Математика и алгоритмы Анализ учета Платформа 1С v8.3 Анализ и прогнозирование Бесплатно (free)

Подробный разбор, с примером использования, встроенного механизма кластеризации 1С.

31.08.2021    4922    dusha0020    8    

62

Готовые переносы данных из различных конфигураций 1C Промо

Рекомендуем готовые решения для переноса данных из различных конфигураций 1C. C техподдержкой от разработчиков и гарантией от Инфостарт.

Распределенные алгоритмы РИБ 1С

Математика и алгоритмы Обмен между базами 1C Платформа 1С v8.3 Бесплатно (free)

Небольшое исследование на тему применимости классических распределённых алгоритмов репликации и синхронизации данных между узлами обмена РИБ 1С.

02.07.2021    2019    zhichkin    1    

8

Параллельная обработка очереди сообщений

Математика и алгоритмы Платформа 1С v8.3 Бесплатно (free)

Описание алгоритма обработки очереди последовательных сообщений регистрации изменений записей регистра сведений. Алгоритм может быть применим к любым объектам метаданных. Алгоритм основан на обработке объектов по их ключам.

15.06.2021    4029    zhichkin    11    

22

Чем воспользоваться для распознавания котиков в 1С?

Математика и алгоритмы Языки и среды Платформа 1С v8.3 Бесплатно (free)

На митапе по инструментам для расширения возможностей 1С выступил Олег Филиппов. Он сравнил подходы Native API, COM, Docker и Serverless, и рассказал, как упростить использование в 1С алгоритмов, реализованных на других языках, с помощью облачной технологии «Функция как сервис».

12.04.2021    4649    comol    10    

29

Эффективные приемы разработки

Математика и алгоритмы Рефакторинг и качество кода СКД Платформа 1С v8.3 Бесплатно (free)

На Infostart Meetup Ekaterinburg.Online выступил Сергей Наумов – руководитель центра аналитики и консалтинга WiseAdvice. Сергей поделился с коллегами приемами разработки, которые помогут избежать потенциальных проблем при реализации сложных проектов.

07.04.2021    5085    SergeyN    13    

39

Распознавание и загрузка документов в 1С Промо

Универсальная программа-обработка для распознавания любых сканов или фото первичных документов в 1С (счета-фактуры, УПД, ТТН, акты и тд). Точность распознания до 98%.

от 11 рублей

Рекурсия для начинающих

Математика и алгоритмы Платформа 1С v8.3 Бесплатно (free)

Рассмотрен подход к пониманию рекурсий. Приведены примеры из реальной практики.

10.02.2021    10104    szv    5    

13

Самый быстрый FizzBuzz на 1С

Математика и алгоритмы Платформа 1С v8.3 Бесплатно (free)

Давайте попробуем найти самое быстрое решение задачи "BuzzFizz" на 1С.

03.02.2021    1873    Donrad    23    

11

Программное создание корректировочного счета-фактуры выданного в УПП 1.3

Математика и алгоритмы Механизмы типовых конфигураций Запросы Платформа 1С v8.3 1С:Управление производственным предприятием Россия Бухгалтерский учет НДС Бесплатно (free)

Данный функционал можно использовать, например, в процессе оформления возвратов от поставщика (корректировка реализации по согласованию сторон) при автоматическом создании корректировок реализации по документам поставщика, он позволяет массово создать корректировочные счета-фактуры в УПП 1.3. При создании документа из первичного счета-фактуры выданного в новый корректировочный счет-фактуру выданный копируются значения свойств.

17.12.2020    1158    ksnik    0    

2

Параллельные вычисления расчета факториала числа N

Математика и алгоритмы Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Распараллеливание алгоритма с помощью фоновых заданий (асинхронные вычисления)

29.06.2020    5384    RustIG    18    

25

Видеокурс-практикум: как подготовить и написать ТЗ, ЗНР, ЧТЗ. Промо

В курсе обобщен опыт работы аналитика на проектах в течение пяти лет, в нескольких фирмах. Подходы к написанию документов унифицированы и по возможности не привязаны к конфигурациям 1С.

3 500 рублей

Treemapping — способ визуализации данных древовидной структуры. Карта-схема дерева

Математика и алгоритмы Работа с интерфейсом Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Предлагается ознакомиться с редким способом графического представления иерархических данных. Приводится алгоритм формирования и пример реализации.

18.02.2020    8286    randomus    20    

75

Сравнение адресов: случай из практики

Математика и алгоритмы Универсальные функции Платформа 1С v8.3 Россия Бесплатно (free)

Как с учетом обстоятельств сравнить два небрежно записанных адреса и решить, означают ли они одно и то же. Программный код написан для режима совместимости с 8.2.

04.01.2020    5205    AnatolPopov    7    

22

[После]Новогодние задачи

Математика и алгоритмы Платформа 1С v8.3 Бесплатно (free)

Совсем немного времени осталось до того момента, когда отзвучат куранты, шампанское будет выпито, мандарины съедены, и даже оливье закончится. Возникнет вопрос: чем бы занять неожиданно появившееся свободное время?

30.12.2019    3988    Alxby    23    

9

Программы для исполнения 54-ФЗ Промо

С 01.02.2017 контрольно-кассовая техника должна отправлять электронные версии чеков оператору фискальных данных - правила установлены в 54-ФЗ ст.2 п.2. Инфостарт предлагает подборку программ, связанных с применением 54-ФЗ, ККТ и электронных чеков.

30 задач. Странных и не очень

Математика и алгоритмы Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

30 задач на знание языка программирования 1С и некоторого поведения платформы. Маленьких. Странных и не очень.

02.12.2019    38511    Infostart    63    

160

Иерархия без "В ИЕРАРХИИ"

Математика и алгоритмы Платформа 1С v8.3 Бесплатно (free)

Говорится о том, как эффективно представлять иерархию в СУБД, как получать и использовать эти представления при решении задач в запросной технике. Уточняются и дополняются запросы из статьи "Уровни, глубина, прародители, циклы и аналоги запросом" [https://infostart.ru/public/160707/].

22.08.2019    19005    ildarovich    24    

181

Побитовые операции "на пальцах"

Математика и алгоритмы Платформа 1С v8.3 Бесплатно (free)

Простой пример для понимания того, как это работает.

02.08.2019    5145    nbeliaev    16    

8

FizzBuzz на 1С. Чем короче, тем веселее. Варианты принимаются...

Математика и алгоритмы Платформа 1С v8.3 Бесплатно (free)

Мне было скучно, я не мог себя заставить написать ничего полезного. И читал статью на Хабре. Потом я читал комментарии, а потом... нет я не ушел смотреть котиков на ютюбе. Я решил сделать несколько решений задачки FizzBuzz на 1С, с целью "чем короче, тем лучше". Прошу сильно не пинать, это просто развлечение для вечера.

24.07.2019    6632    vandalsvq    19    

11

Что делает "В ИЕРАРХИИ" в запросе?

Математика и алгоритмы Платформа 1С v8.3 Бесплатно (free)

Описание действий платформы 1С при использовании конструкции "В ИЕРАРХИИ" в запросах.

16.07.2019    71254    Infostart    34    

128

Программы для исполнения 488-ФЗ: Маркировка товаров Промо

1 января 2019 года вступил в силу ФЗ от 25.12.2018 № 488-ФЗ о единой информационной системе маркировки товаров с использованием контрольных (идентификационных) знаков, который позволяет проследить движение товара от производителя до конечного потребителя. Инфостарт предлагает подборку программ, связанных с применением 488-ФЗ и маркировкой товаров.

Создание отчетов с помощью СКД - основные понятия и элементы

Математика и алгоритмы Платформа 1С v8.3 Система компоновки данных Бесплатно (free)

Основные принципы работы СКД. Понятия схемы компоновки и макета компоновки. Описание основных элементов схемы компоновки: наборы данных, поля, вычисляемые поля, ресурсы, параметры.

25.06.2019    99473    ids79    32    

331

Реализуем Стек, Очередь и Приоритетную очередь в 1С

Математика и алгоритмы Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 Россия Бесплатно (free)

В статье рассматриваются способы реализации таких абстрактных структур данных, как стек, очередь и приоритетная очередь, используя готовые типы данных 1С. Выявляются "узкие" места, сложные моменты в реализации и сравнивается скорость работы.

24.06.2019    19229    RonX01    69    

88

Организация хранения промежуточных данных

Математика и алгоритмы Платформа 1С v8.3 Бесплатно (free)

Организация хранения промежуточных данных в процедуре сверки.

29.05.2019    5041    scientes    1    

3

Вычисление 200 тысяч знаков числа pi

Математика и алгоритмы Платформа 1С v8.3 Россия Бесплатно (free)

В статье рассматриваются возможности платформы выполнять сверхточные вычисления без использования сложных алгоритмов и внешних компонент на примере вычисления числа pi.

28.05.2019    10990    Oleg_nsk    97    

79

Парсер таблиц по шаблону. Автоматическая корректировка парсера. Представление таблиц в виде графа.

Математика и алгоритмы Работа с интерфейсом Универсальные функции Корректировка данных Платформа 1С v8.3 Конфигурации 1cv8 Россия Бесплатно (free)

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

25.04.2019    4657    trim89    5    

24

Работа с 1С:Аналитика Промо

Онлайн-курс предусматривает изучение возможностей системы “1С:Аналитика”, которая работает как составная часть платформы “1С:Предприятие” и обеспечивает оперативный просмотр и анализ необходимых данных.

4500 рублей

Нечёткий поиск. Bitap алгоритм, модификация от Wu-Manber

Математика и алгоритмы Платформа 1С v8.3 Россия Бесплатно (free)

Временами нужен нечёткий поиск в тексте, но не всегда можно использовать внешние компоненты. Данный алгоритм прост, достаточно быстр.

01.04.2019    5789    trim89    10    

48

Решение системы линейных уравнений

Математика и алгоритмы Платформа 1С v8.3 Бесплатно (free)

Пример использования объекта Расчет систем линейных уравнений.

25.03.2019    10973    scientes    12    

49

Обсуждение двух задач на пересечение отрезков

Математика и алгоритмы Платформа 1С v8.3 Бесплатно (free)

Ищем общее в частностях, или задача о пересечении отрезков.

15.03.2019    7571    scientes    16    

24

Многопоточное восстановление последовательностей

HighLoad оптимизация Математика и алгоритмы Универсальные функции Платформа 1С v8.3 Бесплатно (free)

Универсальный алгоритм многопоточного фонового восстановления любой последовательности.

05.12.2018    17065    _ASZ_    33    

52

Возврат (loop) в Алгоритмах визирования. Бит Финанс

Бюджетирование и планирование Математика и алгоритмы Платформа 1С v8.3 Конфигурации 1cv8 Финансовые услуги, инвестиции Россия Бюджетный учет Бесплатно (free)

В статье рассматривается минимальная доработка конфигурации БИТ Финанс, с сохранением поддержки, для расширения функционала Визирования: Возрат к предидущим точкам алгоритмов. Полезно будет для программистов и специалистов, занимающихся внедрением БИТ Финанс.

07.08.2018    8597    gladky    2    

11

1СПАРК РИСКИ. Сервис оценки благонадежности контрагентов. Промо

СПАРК помогает предотвратить мошенничество со стороны компаний и предпринимателей, благодаря актуальным сведениям о компаниях и системе выявления факторов риска.Сервис позволяет управлять налоговыми рисками и комплексно оценивать благонадежность контрагентов.

Извлечение текстов модулей из внешней обработки 1С

Математика и алгоритмы Платформа 1С v8.3 Россия Бесплатно (free)

Лень в очередной раз сподвигла меня на доработку существующего инструментария. В публикации опишу свой опыт парсинга бинарного файла с данными обычной формы (выгруженного с помощью функционала платформы 1С "Выгрузить в файлы").

28.04.2018    17238    zenechka    6    

28

Преобразование запросов

Математика и алгоритмы Платформа 1С v8.3 Бесплатно (free)

Использование математических методов для языка запросов.

15.03.2018    12963    vasilev2015    24    

17

"Взлом" теста "1С:Профессионал" методом машинного обучения

Математика и алгоритмы Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Нейронные сети – не единственная модель, реализующая принципы машинного обучения. Есть еще байесовская модель, которая математически строже и определеннее, поскольку построена на надежном фундаменте теории вероятностей. Применению байесовского вывода к решению интересной теоретической задачи и посвящена данная статья. Слово "взлом" в заголовке использовано для привлечения внимания. Речь идет исключительно о математическом методе, показанном на примере знакомой всем задачи. 

12.03.2018    23082    ildarovich    44    

95

Минимализмы 3

Математика и алгоритмы Платформа 1С v8.3 Бесплатно (free)

Очередная серия "минимализмов" [http://infostart.ru/public/306536/, https://infostart.ru/public/460935/]. Также, как и в предыдущих статьях, здесь приведена подборка коротких оригинальных авторских решений некоторых задач. Ранее эти решения были разбросаны по моим комментариям к чужим публикациям.

19.02.2018    53722    ildarovich    47    

422

Очистка текста - в помощь копирайтеру

Математика и алгоритмы Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

В этой статье я приведу пример написания небольшой обработки, для облегчения вычищения мусора из текста. Статья подойдет начинающим копирайтерам, рерайтерам и просто людям, регулярно работающим с большими текстами.

13.02.2018    8591    user748289    0    

5