Имя: Пароль:
1C
 
Вопрос по записи документа
0 anders297
 
21.04.23
11:27
Нужно в документ добавить реквизит ПредставлениеНомера, в нем будет номер, без префиксов и нулей, для представления в разных списках и интеграциях.

Столкнулся со сложностью, что непонятно когда этот реквизит формировать. Пока не произошло ПриЗаписи(), номера у документа еще нет. А когда он появился, то уже произошла транзакция в БД, и нужно вызывать дополнительную запись.

Можно ли как-то красиво решить эту задачу, не вызывая дополнительную запись?
1 Волшебник
 
21.04.23
11:30
МодульОбъекта     ПриУстановкеНовогоНомера()
2 НафНаф
 
21.04.23
11:32
(0) В типовой УТ 11.5 например есть РС "Реестр документов", там даже есть НомерПервичногоДокумента
3 anders297
 
21.04.23
11:45
(1) Там еще пустой номер.
4 Волшебник
 
21.04.23
11:45
(3) Ну так заполните
5 anders297
 
21.04.23
11:49
(4) Уточню вопрос.
Можно ли выполнить такой код
ПредставлениеНомера = СделатьКрасиво(Номер)
Когда 1с уже сформировала новый номер документа, но не вызывая дополнительной записи объекта?
6 Волшебник
 
21.04.23
11:52
(5) Конечно, можно. Например, внутри процедуры ПередЗаписью или ПриЗаписи.
7 anders297
 
21.04.23
11:54
ПередЗаписью у нового документа номер еще не сформирован системой.
В ПриЗаписи , Номер уже есть. Но уже произошла запись в БД, изменение значения реквизита ПредставлениеНомера  ни к чему не приведет.
8 Волшебник
 
21.04.23
11:55
(7) ПриЗаписи - это внутри транзакции, которая ещё не зафиксирована
9 Волшебник
 
21.04.23
11:56
(7) А вообще "Номер" формируется в ПриУстановкеНовогоНомера, которая выполняется раньше ПриЗаписи. Там производится даже бронирование номера. Но это необязательно, конечно. Можете присваивать номер и при записи, это даже более надёжно.
10 anders297
 
21.04.23
12:00
ПриЗаписи()
нужно сделать что-то такое:

ПредставлениеНомера = СделатьКрасиво(Номер);
Записать(); // иначе ПредставлениеНомера останется пустым

Что выглядит очень коряво.. но другого варианта не вижу.
11 Волшебник
 
21.04.23
12:02
(10) Вам не надо вызывать Записать() внутри ПриЗаписи()

А присваивать надо так:

ЭтотОбъект.ПредставлениеНомера =  СделатьКрасиво(Номер);
12 Прапорщик
 
21.04.23
12:02
(0) Хернёй вы страдаете.
Следующая Ваша ветка будет посвящена вопросу "У нас разъехались данные между номерами на бумажных документах с данными в реквизите ПредставлениеНомера".
Для интеграций получайте представление номера теми же типовыми методами, которые используются при печати документов. Обычно это функция в общем модуле что-то типа ПолучитьНомерНаПечать.
Со списками чуть сложнее. Но точно ли вы уверены, что в списках оно надо?...

Работал с заказчиком, у которого решалась похожая задача. Только реквизит они назвали по другому - "НомерВходящегоДокумента". Для унификации с входящими документами (ПТиУ, входящий СЧФ  и т.п.), где печатный первичный номер как раз в реквизите НомерВходящегоДокумента лежит.
В итоге, для того чтобы это нормально единообразно и без косяков работало со всеми видами документов, пришлось налепить кучу костылей по всей конфигурации.
А начиналось тоже всё просто - нам только реквизитик добавить и на форму его вывести.
13 Aleksey
 
21.04.23
12:03
(10) сделай как  в типовых. Отдельный регистр сведений
14 anders297
 
21.04.23
12:05
(11) Спасибо. Да работает
15 Волшебник
 
21.04.23
12:15
(14) Вы же в модуле объекта, а не в форме, да?
16 anders297
 
21.04.23
12:26
Да )