Имя: Пароль:
1C
1С v8
Нумерация реквизита дока
,
0 Boudybuilder
 
23.12.12
18:59
В документе приема на ремонт есть реквизит ID (Строка,12). Это должен быть уникальный номер как и номер дока. Если его значение не заполнено то тогда он стает равен номеру дока. Раньше стояла автонумерация на форме и было все гуд! Но потом я заметил , что при каждом открытии формы , номер стает на один больше , даже если док предыдущий закрыт и не создан. Хотел это обойти. Но стоит подписка на событие при установке нового номера.

Сделал так и заметил что получаются дубли именно ID а номер устанавливает ОК. . Почему, не пойму!

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

   
   Если ЭтоНовый() И
       Не ЗначениеЗаполнено(ID) Тогда
       ID = Врег(Номер);
   КонецЕсли;
   
КонецПроцедуры


Щас и это написал , но явно не катит через подписку :

Процедура ПриУстановкеНовогоНомера(СтандартнаяОбработка, Префикс)
   
   Если ЗначениеЗаполнено(ID) Тогда
       ID = Врег(Номер);
   КонецЕсли;

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



Как быть , чтобы эти ID были уникальными учитывая РИБ. ???
1 Boudybuilder
 
23.12.12
19:02
С автонумерацией формы при открытии ставил это :

   Если ЭтоНовый()  Тогда
       ID = Врег(Номер);
   КонецЕсли;

Но хотелось бы избежать увеличения номера без создания дока.
2 DrShad
 
23.12.12
19:47
а зачем весь этот бред с типа "ID"?
3 Boudybuilder
 
23.12.12
19:57
ID - уникальный идентификатор ремонта.
То есть , если мне его принесли по гарантии , то я его ввожу и мне возвращает все данные по нему.
4 DrShad
 
23.12.12
20:34
Новый УникальныйИдентификатор() чем не нравится?
5 Boudybuilder
 
23.12.12
20:35
Сделал так

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

Процедура УстановитьНовыйНомер() Если вызвана кодом , то вызывается ли она еще раз? И если ее описывать как я щас сделал , то по умолчанию она когда вызывается? При записи или перед?
6 Boudybuilder
 
23.12.12
20:35
(4)
Щас посмотрю. Об этом не знал.
7 Boudybuilder
 
23.12.12
22:07
Вобщем сделал так:

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


Все вроде ок.

Но теперь после обмена РИБ в каждой базе один и тот же док имеет номерацию по своему префиксу. Что за фигня????
8 DrShad
 
23.12.12
22:22
1С это не твое, смирись уже
9 ERWINS
 
23.12.12
22:28
(7) Если не ЭтотОбъект.ОбменДанными.Загрузка тогда
10 DrShad
 
23.12.12
22:29
Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
Если обменДанными.Загрузка Тогда
Возврат;
КонецЕсли;    

   Если ЭтоНовый() Тогда
       ЭтотОбъект.УстановитьНовыйНомер();
   КонецЕсли;
   
   Если НЕ ЗначениеЗаполнено(ID) Тогда
       ID = Врег(Номер);
   КонецЕсли;
   
КонецПроцедуры
11 DrShad
 
23.12.12
22:30
+(10) потому что при обмене тоже происходит ЗАПИСЬ!!!
12 DrShad
 
23.12.12
22:30
+(11) и в приемнике это НОВЫЙ объект
13 Boudybuilder
 
24.12.12
01:43
(9) (10) Спасибо , друзья!
Так оно и есть... Просто я такой человек , который курсы не дослушает , а экзамены уже сдает. Надо книги до конца читать а не на 30% ))))
14 Boudybuilder
 
25.12.12
15:51
(10)
Если перед записью использовать этот код , то номер еще раз ни в каких случаях устанавливаться не будет? И еще , если не описывать установку номера, то в каком событии он стандартно устанавливается?  При записи?

 Если ЭтоНовый() Тогда
       ЭтотОбъект.УстановитьНовыйНомер();
   КонецЕсли;
15 Serg_1960
 
25.12.12
16:14
(14) Ты прав. Лучше проверятьне на новый, а на пустой номер. Юзвер может стереть номер при редактировании. Не спрашивай зачем.
16 del123
 
25.12.12
16:20
а в новом году нумерация документов начнется заново и ID станет неуникальным?:)
17 Boudybuilder
 
26.12.12
13:43
(15)
Хорошо , пускай я не буду это писать , и не буду шаманить с номером.

Как мне номеровать реквизит дока ID и проверять его на уникальность?   (+префикс Риб+организации)
18 Boudybuilder
 
27.12.12
00:06
(17) Ребяты , вы где? Есть ответ?
Как мне номеровать реквизиты дока подобно номерации номера дока ?
Независимо от того, куда вы едете — это в гору и против ветра!