Имя: Пароль:
1C
1С v8
УстановитьНовыйНомер() рандомно пропускает несколько номеров.
,
0 ugroblin
 
05.08.14
16:01
Есть регламентированный отчет (справка о соц. отчислениях за 12 месяцев), использующий для хранения данных документ РегламентированныйОтчет. При сохранении новой справки (если не вбивать номер вручную), если у последней номер был Х, новый номер почему-то назначается не Х+1, а Х+некое рандомное число. Вот список последних назначенных автоматически номеров:

19, 22, 23, 27, 39.

Код ответственный за установку номера.

    НомерДок     = СокрЛП(ЗначениеОбласти(ЭлементыФормы.ПолеТабличногоДокументаРасчет, "Номер", ""));
    Если ЗначениеЗаполнено(НомерДок) Тогда    
        НомерДок                 = ОбщегоНазначения.ДополнитьСтроку(НомерДок, мСохраненныйДок.Метаданные().ДлинаНомера - СтрДлина(ПрефиксДок), "0", 0);
        мСохраненныйДок.Номер     = ПрефиксДок + НомерДок;
    Иначе
        мСохраненныйДок.УстановитьНовыйНомер(ПрефиксДок);
    КонецЕсли;
1 х86
 
05.08.14
16:04
номера небось не освобождаешь
2 ugroblin
 
05.08.14
16:06
(1) От чего освобождать то? Просто создал справку, заполнил, сохранил - назначился номер 19. Тут же создал новую - 22. Никаких откатов транзакций, сохранений документов и т.д. не было, в тестовой базе один сижу.
3 ugroblin
 
05.08.14
16:12
В подписках нет ссылок на документ РегламентированныйОтчет. В модуле отчета и его формы больше нигде номер не устанавливается. Непосредственно перед выполнением строки мСохраненныйДок.УстановитьНовыйНомер(ПрефиксДок)
проверял, 19-й номер последний. После выполнения назначился 22.
Сбивает толку то, что промежуток между номерами рандомный. То 3, то 4 то 12.
4 acsent
 
05.08.14
16:14
где код вызывается и сколько раз?
5 ugroblin
 
05.08.14
16:16
(4) Процедура Сохранить() модуля формы. Отладчик только 1 раз в нее заходит.
Процедура КоманднаяПанельДействийЗаписать(Кнопка)
    
    Если НЕ ОбщегоНазначения.ПроверкаУстановленнойРолиТолькоПросмотр() Тогда
        
        Сохранить();
        
    КонецЕсли;
    
КонецПроцедуры
6 Maxus43
 
05.08.14
16:18
в свойствах документа есть такая фигня как "Освобождать номер". Т.е. создал кто-то новый документ - номер занялся под него. Передумал, не сохранил. Следующий номер автоматом поставится Номер+2, т.к. тот не освободился
7 ugroblin
 
05.08.14
16:22
(6) - выше писал "Никаких откатов транзакций, сохранений документов и т.д. не было, в тестовой базе один сижу."
8 Крошка Ру
 
05.08.14
16:24
(7)Может кто с событием ПриУстановкеНовогоНомера пошалил?
9 Крошка Ру
 
05.08.14
16:25
Или подписка есть
10 hhhh
 
05.08.14
16:26
(7) походу работает

  НомерДок     = СокрЛП(ЗначениеОбласти(ЭлементыФормы.ПолеТабличногоДокументаРасчет, "Номер", ""));

а

УстановитьНовыйНомер

не запускается
11 ugroblin
 
05.08.14
16:35
(10) Не, отладчик именно на установить новый номер приходит. До выполнения номера нет, после выполнения есть, но непонятно как рассчитанный.

НомерДок     = СокрЛП(ЗначениеОбласти(ЭлементыФормы.ПолеТабличногоДокументаРасчет, "Номер", ""));
срабатывает если до записи поле номер в ТД уже заполнено (пользователь руками вбил, или открыли существующий документ).

Пошел другим путем. Номер заполняю при заполнении отчета, метод УстановитьНовыйНомер() не буду использовать. Можно закрывать тему.
12 Бледно Золотистый
 
05.08.14
16:36
В общем при каждом УстановитьНовыйНомер() платформа запоминает его и в следующий раз при вызове этого метода это значение увеличивает на 1. Даже если документ не записан.
Актуализировать можно с помощью ОбновитьНумерациюОбъектов(<Метаданные>) в монопольном режиме.
13 catena
 
05.08.14
16:56
Автонумерация у документа случайно не стоит?
Основная теорема систематики: Новые системы плодят новые проблемы.