Есть документ - Накладная , ей в зависимости от ситуации присваеваются префиксы от Н1 до Н9, то есть номер документа - Н1_1... или Н9_1... , когда создаю новый документ, автоматически присваивается номер - Н9_1 и пишет что он не уникальный(так и есть) но почему система автоматически присваивает старый номер , а не дает новый?
(1) alw-1,
при автоматической автонумерации текстового номера документа
отыскивается самый короткий номер и его числовой суффикс увеличивается на единицу
с указанным строковым префиксом.
Допустим полная длина номера 10 символов.
в начале пусть нумерация шла так:
(4)
единственное решение - восстановить нумерацию
с полным заполненией строки номера
***
это извесная проблема как в 7.7 так и 8.х
штатный механиз автонумерации весьма капризная штука.
его можно легко поламать,
поэтому в типовых конфигурациях в 8.х
изменение номера по умолчанию заблокировано.
чтобы его изменить -
надо разблокировать поле ввода для изменения.
(5) Rothschild, только один вопрос - как зависит нумерация от префикса у меня например берет все время префикс Н9 , а не Н1,Н2,Н3..... , берет больший?
(6) alw-1,
префикс - это первые нечисловые символы в номере.
поэтому префикса "Н9" быть не может.
в строке "Н9"
префикс это "Н",
а "9" - это короткий числовой суффикс, из одного символа,
который при автонумерации "скинется" к "1".
***
если хочешь что-то подобное использовать
делай префикс "Н9-"
и числовой суффикс вида "000000NNN" - причем на полную длину строки номера!
(8) Rothschild, Примерно так я и сделал:
- Те номера, что имели префикс Н9 я дополнил нулями - было Н9_1 стало Н9_00001
- Номера с другими префиксами Н1, Н2, Н3.... не трогал.
- При вводе нового документа автонумерация дает - Н9_+ Следующий номер(например 00002)
смущет только то что Н9_ а не например Н1_ или Н2_.
а "9" - это короткий числовой суффикс, из одного символа,
который при автонумерации "скинется" к "1".
аналогично, все неправильно.
никакого "скидывания" не происходит.
если последний номер типа Н9, то следующий система присвоит Н10, и ОБРЕЖЕТ до двух символов слева, что приведет к поялению "дубля" Н1. Это красиво видно на примере Н99, следующим номером будет Н10
Кто-то выше написал:
> отыскивается самый короткий номер и его числовой суффикс увеличивается на единицу
.
немножко все не так...
на единицу увеличивается числовая часть последнего по алфавитной сортировке префикса.
так что тут зависит не от длины номера, а от упорядочивания по алфавиту...
.
если на один и тот же документ есть номера АА003 и ФФФ00009
.
то следующим номером будет ФФФ00010, а не "самый короткий номер"
.
написал и застремался.. неужели я туплю, спецом пришлось "оттренировать", дабы еще раз удостоверится, что некоторые больше трындят, чем полезное/правильное рассказывают...
.
пример: http://screencast.com/t/ExC2DlQNxG3J
По сути вопрос звучит также - как осуществляется присвоение номера новому документу?
Имеем переписанную Бухгалтерию, где номера документов присваиваются по правилу ММ/ДД/НННН
где:
ММ - номер месяца в году
/ слеш
ДД номер дня в месяце
/ слеш
НННН номер документа в течение дня.
Номер присваивает функция описанная в главном модуле, причем похожке что номер присваивается уже до события ВводНового() и ПриОткрытии().
В форме документа описана функция, которая сравнивает текущую дату с датой документа, и если у документа поменялась дата, она меняет номер в соответствии с датой по указанному выше правилу.
При создании нового документа отладчик не ловит вызов функции установки номера, но она откуда-то вызывается. Если изменить вызов функции, то при создании нового документа ругается что не может найти функцию присвоения нового номера.
Внимание вопрос - откуда может быть осуществлен вызов функции нумерации документа при создании нового документа кроме предопределенных процедур ВводНового() и ПриОткрытии() ?
Процедура ВводНового(Копирование)
Новый = 1;
Если Копирование = 1 Тогда //копирование документа
Возврат;
КонецЕсли;
// глУстановитьНомерДокументаПоМаске(Контекст, ""); Номер все равно присваивается, несмотря на то что строка закомментирована
КонецПроцедуры // ВводНового()
.
.
.
Процедура УстановитьНомер()
Если ДатаДок <> СтараяДата Тогда
глУстановитьНомерДокументаПоМаске(Контекст, "");
КонецЕсли;
КонецПроцедуры
Процедура ПриИзмененииДаты()
УстановитьНомер();// если закомментировать здесь вызов "Установить номер()", все равно присваивается номер по маске. Если поставить бряку, то при создании документа отладчик на этом месте не останавливается. Если поменять вызов на УстановитьНомерБум(), при создании документа пишет, что процедура УстановитьНомерБум() не обнаружена.
СтараяДата = ДатаДок;
КонецПроцедуры
Показать
На вкладке "дополнительно" в свойствах поля "ДатаДок" формула ПриИзмененииДаты()
Причем, если ее оттуда выпилить, документы перестабт перенумеровываться при изменении даты, но при создании нового документа номер все равно присваивается по маске.
Штатная автонумерация я думаю не в состоянии присваивать номера по указанному выше правилу, значит процедура ПриИзмененииДаты() вызывается еще откуда-то при создании нового документа.
FormEx.dll нет ни в каталоге BIN, ни в каталоге с базой.
Глобальный поиск находит вхождение в собственно тексте формы и в формуле диалога.
в процедуре ВводНового(), отладчик может остановиться и показывает (вычисляет) НомерДок уже установленным по маске.
Присвоение номера происходит перед ВводНового(). ГДЕ??? 8-)
Штатная автонумерация я думаю не в состоянии присваивать номера по указанному выше правилу
А почему собственно нет ?
Вернее, конечно, она не в состоянии это делать. Но собственный алгоритм автонумерации будет во многих случаях выдавать "похожие" или идентичные номера.
Если у Вас уже есть документ № 08/18/0052, то штатная автонумерация следующий номер даст 08/18/0053 и так далее. Вот другое дело, первый документ 19го числа при закомментированной глУстановитьНомерДокументаПоМаске конечно № 08/19/0001 не даст, а продолжит увеличивать число последнего блока