|
Вопрос по записи документа | ☑ | ||
---|---|---|---|---|
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
|
Да )
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |