Имя: Пароль:
1C
 
ЗУП31. В какой момент у документа появляется номер?
0 1CSharp
 
12.03.19
11:46
Расирением в отпуск добавил дополнительный номер, который должен равняться номеру, выданному при первоначальной выдаче номера. Где его выцепить?
При установке нового номера - его ещё нет. Подписку не нашёл. Как правильно?
1 formista2000
 
12.03.19
11:49
(0) Чё там в ПриЗаписи()?
2 Вафель
 
12.03.19
11:51
до записи нигде номера нет. а при записи редактировать объект после записи не комильфо
3 1CSharp
 
12.03.19
11:59
(2) Вот и я про то же думаю
4 vova1122
 
12.03.19
12:08
а что мешает изменить создание номера не при записи, а при создании документа?
5 Serg_1960
 
12.03.19
13:26
(4) То, что давно уже разработчики конфигураций и платформ отказались от присвоения номера новому документу до его записи в базу и объяснили почему они не рекомендуют это так делать :)
6 Homer
 
12.03.19
14:10
Так получает номер.

    УстановитьПривилегированныйРежим(Истина);
    
    ДокументОбъект = РеквизитФормыВЗначение("Объект");
    РеквизитыВДанные(ДокументОбъект);
    Если Не Объект.Ссылка.Пустая() Тогда
        // служебное копирование.
        ДокументОбъект.ДополнительныеСвойства.Вставить("МодификацияЗапрещена");
        ДокументОбъект = ДокументОбъект.Скопировать();
        ДокументОбъект.Дата = Объект.Дата;
    КонецЕсли;
    
    ВременнаяСсылка = Документы.Отпуск.ПолучитьСсылку();
    ДокументОбъект.УстановитьСсылкуНового(ВременнаяСсылка);
    
    ДокументОбъект.УстановитьНовыйНомер();
7 1CSharp
 
12.03.19
14:57
(6) Ну я уже тип вот так сделал:

&После("ПередЗаписью")
Процедура НумОт_ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
    Если Не Отказ Тогда
        УстановитьНовыйНомер();
        НумОт_НомерТ60 = Номер;
    КонецЕсли;
КонецПроцедуры

Но меня что-то смущает. Наверное, (5)

(5) А можно непросвещенным объяснить, почему так делать не стоит, и как делать правильно?
В ПриЗаписи колотить?
8 1CSharp
 
12.03.19
15:20
Сделал вот так, но не сработало, хз почему. В отладчике в ПриЗаписи всё норм
&После("ПередЗаписью")
Процедура НумОт_ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
    ДополнительныеСвойства.Вставить("ЭтоНовый", ЭтоНовый());
КонецПроцедуры

&Перед("ПриЗаписи")
Процедура НумОт_ПриЗаписи(ПриЗаписи)
    Если ДополнительныеСвойства.Свойство("ЭтоНовый") И ДополнительныеСвойства.ЭтоНовый Тогда
        НумОт_НомерТ60 = Номер;        
    КонецЕсли;  
КонецПроцедуры
9 Вафель
 
12.03.19
15:21
если будет отказ от записи, то номер уйдет и новый номер будет следующий
10 1CSharp
 
12.03.19
15:23
(9) А почему такого не произойдёт, если не будет УстановитьНовыйНомер()? Ведь при записи номер уже тоже будет получен
11 Serg_1960
 
12.03.19
15:57
(7) "А можно непросвещенным объяснить, почему так делать не стоит, и как делать правильно?"
Ничего сакрального не скажу, просто дам ссылку:
"Особенности работы механизма автонумерации"
https://its.1c.ru/db/metod8dev#content:1550:hdoc

"Существуют две возможные стратегии нумерации для разных категорий объектов:
- для объектов, требующих непрерывной нумерации, - нумерация при записи с поддержкой заполнения пропусков в нумерации, образующихся при откатах транзакций;
- для объектов, не требующих непрерывной нумерации, - нумерация при открытии формы, но без какого-либо переиспользования номеров."
12 1CSharp
 
12.03.19
16:41
(11) Спс

Осталось понять, почему (8) не работает
13 Serg_1960
 
12.03.19
22:45
Продаю цитату из СП, недорого :)
"Возникает при записи объекта. Процедура-обработчик [ПриЗаписи] вызывается после записи объекта в базу данных, но до окончания транзакции записи."
14 Cyberhawk
 
13.03.19
09:15
Пиши в РС
AdBlock убивает бесплатный контент. 1Сергей