Имя: Пароль:
1C
1С v8
Запись значения дополнительного реквизита
0 kobzon2
 
19.11.20
16:13
Всем доброго вечера. Нужна помощь коллективного разума)

В ЕРП 2.4 есть справочник ДоговорыКонтрагентов. Когда-то нужно было сделать возможность отслеживать дату его создания.
Сделали через дополнительные реквизиты.


Процедура Расш1_ПередЗаписьюНаСервереПосле(Отказ, ТекущийОбъект, ПараметрыЗаписи)

Если ТекущийОбъект.Ссылка.Пустая() Тогда

НовыйРеквизит = ТекущийОбъект.ДополнительныеРеквизиты.Добавить();  
НовыйРеквизит.Свойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("ДатаСоздания");
НовыйРеквизит.Значение = ТекущаяДата();                                                                    

КонецЕсли;

КонецПроцедуры


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



Процедура Расш1_ПередЗаписьюНаСервереПосле(Отказ, ТекущийОбъект, ПараметрыЗаписи)

Если ТекущийОбъект.Ссылка.Пустая() Тогда
СвойствоДопРеквизита=ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("ДатаСоздания");
ДопРеквизит=ТекущийОбъект.ДополнительныеРеквизиты.Найти(СвойствоДопРеквизита, "Свойство");
Если ДопРеквизит=Неопределено Тогда
                                                                          
НовыйРеквизит = ТекущийОбъект.ДополнительныеРеквизиты.Добавить();
НовыйРеквизит.Свойство = СвойствоДопРеквизита;
НовыйРеквизит.Значение = ТекущаяДата();
Иначе
ДопРеквизит.Значение = ТекущаяДата();
КонецЕсли;
КонецЕсли;

КонецПроцедуры


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

Где я туплю, может кто сказать?))
1 DmitriyDI
 
19.11.20
16:28
(0) я думаю тут бы подошло больше доп. свойство, чем доп. реквизит, а так надо смотреть функции БСП, которые сохраняют доп. реквизиты с формы при сохранении элемента из формы.
А так можно вынести функцию вторую перед записью в модуль объекта, из модуля формы.
2 dka80
 
19.11.20
16:32
УправлениеСвойствами.ЗаписатьСвойствоУОбъекта
3 DmitriyDI
 
19.11.20
16:38
(2) Точно это подойдет? перед записью объекта в 1С данная функция его перезапишет. тут надо добавить свойства, чтобы уже при записи они сами записались.
4 dka80
 
19.11.20
16:41
(3) если вручную изменят на форме, то перезапишет. Лучше видимость на форме отключить
5 kobzon2
 
19.11.20
16:43
(4) Видимость на форме можно сказать отключена. Видимость появляется при выборе определенного значения другого реквизита на форме.
6 dka80
 
19.11.20
16:46
(5) тогда записывайте в элемент формы значение, а при записи оно уже автоматически запишется куда надо.
http://catalog.mista.ru/1c/articles/867282/