Всем привет. Периодически дописываю что-нибудь в 1С много лет, но для меня до сих пор там полно непонятной магии. Вот пример, объясните, пожалуйста:
У меня в УТ11 у документа Заказ клиента есть 4 доп.реквизита. Мне нужно 4 обычных строковых реквизита заполнить значениями этих доп.реквизитов. Для того, чтобы пользователь на форме заполнял доп.реквизиты, а при сохранении документа их строковые значения копировались в мои реквизиты, о которых пользователь не знает.
Я сделал расширение, в расширении добавил реквизиты. В модуль объекта в расширении добавил:
Точкой останова смотрю: реквизиты заполняются. Но! Потом их значения пропадают. Если я модифицирую форму (Комментарий банально поменяю) - тогда значения сохраняются. Если я создаю новый документ - не сохраняются, остаются пустыми. Вообще не понимаю, как это работает.
У меня в УТ11 у документа Заказ клиента есть 4 доп.реквизита. Мне нужно 4 обычных строковых реквизита заполнить значениями этих доп.реквизитов. Для того, чтобы пользователь на форме заполнял доп.реквизиты, а при сохранении документа их строковые значения копировались в мои реквизиты, о которых пользователь не знает.
Я сделал расширение, в расширении добавил реквизиты. В модуль объекта в расширении добавил:
&После("ПриЗаписи")
Процедура natrTS_ПриЗаписи(Отказ)
СвойствоНомер = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Номер заказа на сайте");
СвойствоДата = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Дата заказа на сайте");
СвойствоТипОтгрузки = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Тип отгрузки");
СвойствоЭтап = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Этап обработки");
ЭтотОбъект.natrTS_НомерНаСайте = УправлениеСвойствами.ЗначениеСвойства(ЭтотОбъект.Ссылка, СвойствоНомер);
ЭтотОбъект.natrTS_ДатаНаСайте = УправлениеСвойствами.ЗначениеСвойства(ЭтотОбъект.Ссылка, СвойствоДата);
ЭтотОбъект.natrTS_ТипОтгрузки = Строка(УправлениеСвойствами.ЗначениеСвойства(ЭтотОбъект.Ссылка, СвойствоТипОтгрузки));
ЭтотОбъект.natrTS_ЭтапОбработки = Строка(УправлениеСвойствами.ЗначениеСвойства(ЭтотОбъект.Ссылка, СвойствоЭтап));
КонецПроцедуры
ПоказатьТочкой останова смотрю: реквизиты заполняются. Но! Потом их значения пропадают. Если я модифицирую форму (Комментарий банально поменяю) - тогда значения сохраняются. Если я создаю новый документ - не сохраняются, остаются пустыми. Вообще не понимаю, как это работает.
По теме из базы знаний
Найденные решения
(1) обработчик ПриЗаписи вызывается уже после фактической записи данных реквизитов документа в базу.
Соответственно изменение реквизитов в этом обработчике не делают изменения в самой базе в этой же транзакции.
Изменять реквизиты нужно в обработчике ПередЗаписью
Соответственно изменение реквизитов в этом обработчике не делают изменения в самой базе в этой же транзакции.
Изменять реквизиты нужно в обработчике ПередЗаписью
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1) обработчик ПриЗаписи вызывается уже после фактической записи данных реквизитов документа в базу.
Соответственно изменение реквизитов в этом обработчике не делают изменения в самой базе в этой же транзакции.
Изменять реквизиты нужно в обработчике ПередЗаписью
Соответственно изменение реквизитов в этом обработчике не делают изменения в самой базе в этой же транзакции.
Изменять реквизиты нужно в обработчике ПередЗаписью
(3) смотря что подразумевать под изменением реквизитов.
Сами реквизиты объекта (если это модуль объекта) в памяти будут изменены и новые значения будут в последующих обработчиках. В обработчике ОбработкаПроведения уже будут измененные реквизиты, но в базу уже были записаны предыдущие значения реквизитов.
См. СП:
Сами реквизиты объекта (если это модуль объекта) в памяти будут изменены и новые значения будут в последующих обработчиках. В обработчике ОбработкаПроведения уже будут измененные реквизиты, но в базу уже были записаны предыдущие значения реквизитов.
См. СП:
Описание:
Возникает при записи объекта. Процедура-обработчик вызывается после записи объекта в базу данных, но до окончания транзакции записи.
Возникает при записи объекта. Процедура-обработчик вызывается после записи объекта в базу данных, но до окончания транзакции записи.
(4) Вот да. Тут понятно. И следовательно это будет работать только при перезаписи уже существующего документа. А если я создам новый (да даже если изменю доп.реквизит на форме) - это не сработает. В этом случае надо получать значения доп.реквизитов из данных формы, потому что объект ещё не записан. Верно?
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот