Вход | Регистрация

1С:Предприятие :: 1С:Предприятие 8 общая

Нумерация реквизита дока

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

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

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

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


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

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

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



Как быть , чтобы эти ID были уникальными учитывая РИБ. ???
 
 
   Boudybuilder
 
1 - 23.12.12 - 19:02
С автонумерацией формы при открытии ставил это :
    Если ЭтоНовый()  Тогда
        ID = Врег(Номер);
    КонецЕсли;

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

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

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

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


Все вроде ок.

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

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

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

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

Список тем форума
Рекламное место пустует  Рекламное место пустует
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует