при установке нового номера 1с

Как осуществляется присвоение номера новому документу?

аналогично, все неправильно.
никакого «скидывания» не происходит.

если последний номер типа Н9, то следующий система присвоит Н10, и ОБРЕЖЕТ до двух символов слева, что приведет к поялению «дубля» Н1. Это красиво видно на примере Н99, следующим номером будет Н10

Просто при автонумерации префикс может схватиться произвольно.

Обычно префикс номера назначают (например при установке фирмы документа)

Чтобы темы не плодить, спрошу здесь же.

Номер присваивает функция описанная в главном модуле, причем похожке что номер присваивается уже до события ВводНового() и ПриОткрытии().
В форме документа описана функция, которая сравнивает текущую дату с датой документа, и если у документа поменялась дата, она меняет номер в соответствии с датой по указанному выше правилу.

При создании нового документа отладчик не ловит вызов функции установки номера, но она откуда-то вызывается. Если изменить вызов функции, то при создании нового документа ругается что не может найти функцию присвоения нового номера.

На вкладке «дополнительно» в свойствах поля «ДатаДок» формула ПриИзмененииДаты()

Причем, если ее оттуда выпилить, документы перестабт перенумеровываться при изменении даты, но при создании нового документа номер все равно присваивается по маске.

Штатная автонумерация я думаю не в состоянии присваивать номера по указанному выше правилу, значит процедура ПриИзмененииДаты() вызывается еще откуда-то при создании нового документа.

Источник

Автонумерация

В данном разделе рассматриваются особенности работы механизма автонумерации на примере справочника.

Что такое автонумерация и зачем она нужна?

Автоматическая нумерация элементов справочников позволяет устанавливать во вновь создаваемых элементах уникальные коды. При этом создаваемые коды элементов последовательно увеличиваются.

Формирование нового уникального кода справочника зависит от того, как у справочника настроены серии кодов:

Последовательное увеличение кодов элементов справочника в процессе автонумерации будет происходить таким образом, чтобы создаваемый код справочника соответствовал настройке серии кодов.

Добавим в справочник первый элемент:

при установке нового номера 1с. Смотреть фото при установке нового номера 1с. Смотреть картинку при установке нового номера 1с. Картинка про при установке нового номера 1с. Фото при установке нового номера 1с

На рисунке видно, что автоматическая нумерация элементов справочника началась с 000001.

Добавим в справочник второй элемент:

при установке нового номера 1с. Смотреть фото при установке нового номера 1с. Смотреть картинку при установке нового номера 1с. Картинка про при установке нового номера 1с. Фото при установке нового номера 1с

Добавим в него еще один элемент, который будет дочерним для второго элемента:

при установке нового номера 1с. Смотреть фото при установке нового номера 1с. Смотреть картинку при установке нового номера 1с. Картинка про при установке нового номера 1с. Фото при установке нового номера 1с

На рисунке видно, что в процессе автоматического формирования кода для нового элемента справочника была учтена настройка серии кодов: код для третьего элемента уникален только в пределах элементов, родителем которых является второй элемент.

Одной из особенностей автонумерации является использование лидирующих нулей. Это необходимо для того, чтобы поиск и сортировка по коду (номеру) работали эффективно. Для этого используется индекс базы данных по полю код (или номер). Использование индекса требует упорядоченной последовательности с точки зрения базы данных. Поэтому 1С:Предприятие 8 в процессе автоматического формирования новых кодов (номеров) всегда использует лидирующие нули.

Обеспечить правильную сортировку, например, документов по их номеру без использования лидирующих нулей невозможно. Например, пусть у нас есть документы со строковыми номерами «Док11» и «Док3». В этом случае документ с номером «Док3» будет идти после документа с номером «Док11», что неправильно.

Работа с префиксом кода справочника в процессе автонумерации

Установка префикса при формировании нового номера кода элемента имеет смысл только в том случае, если код элемента является строкой.

Рассмотрим следующий пример. Пусть есть конфигурация для распределенной информационной базы, в которой с помощью префиксов обеспечивается формирование уникальных кодов справочников в каждом из узлов. Формирование такого уникального кода можно сделать так:

// Процедура обработчик события ПриУстановкеНовогоКода
// Подменяет префикс кода на предопределенный для данной ИБ
//
Процедура ПриУстановкеНовогоКода(СтандартнаяОбработка, Префикс)

КонецПроцедуры // ПриУстановкеНовогоКода(СтандартнаяОбработка, Префикс)

// Выдает префикс нового номера
//
// Возвращаемое значение:
// Строка – Префикс нового номера
//
Функция ПолучитьПрефиксНомера() Экспорт

Поддержка автонумерации другими объектами метаданных

Кроме справочника, автонумерацию поддерживают следующие объекты метаданных:

Источник

Особенности работы механизма автонумерации

Механизм автонумерации в «1С:Предприятии 8.1» имеет целью обеспечить более эффективную и предсказуемую работу с номерами, по сравнению с механизмом автонумерации предыдущей версии платформы.

В «1С:Предприятии 8.1» реализован специальный менеджер автонумерации, который отвечает за выдачу номеров. Использование менеджера автонумерации позволяет существенно повысить параллельность работы за счет отсутствия блокировок базы данных.

Существуют две возможные стратегии нумерации для разных категорий объектов:

Режимы автонумерации

Свойство Автонумерация формы объекта (элемента справочника, документа. ) отвечает за автоматическое получение номера при открытии формы. Если в этом свойстве указано значение НеИспользовать, это означает, что при открытии формы номер будет не заполнен и он будет получен автоматически при записи объекта.

Таким образом, для реализации возможных стратегий нумерации рекомендуется использовать следующие значения описанных свойств:

Особенности хранения номеров и использования префиксов

Механизм автонумерации выдает номера в разрезе пространств номеров и префиксов. Пространство номера в зависимости от типа объекта может содержать метаданные, владельца, период и др. В пределах пространства номеров номер выдается в разрезе префиксов. По каждому префиксу хранится максимальный выданный номер, на основании которого выдается следующий номер. Один и тот же максимальный номер может соответствовать нескольким префиксам.

Например, в БД хранится максимальный номер 001. Мы получили очередной номер по префиксу 0, нам вернули 002. Далее мы получили очередной номер по префиксу 00, нам вернули номер 003, т. к. в этом случае максимальный номер соответствует обоим префиксам. Механизм автонумерации учитывает этот факт и изменяет максимальный номер зависимых префиксов соответствующим образом. Следует отметить, что на максимальный номер, соответствующий пустому префиксу, влияет изменение максимального номера по любому префиксу, если он превышает максимальный номер по пустому префиксу. Например, мы по пустому префиксу получили номер 001, далее по префиксу 0 получили номер 002, далее по префиксу А получили номер А01, далее по пустому префиксу получили номер А02, т. к. максимальный номер по пустому префиксу соответствует наибольшему из максимальных выданных номеров.

В режиме автоматического возврата номеров механизм автонумерации по каждому пространству номеров и префиксу хранит список свободных номеров. Номер становится свободным, если он не записан в базу данных, а объект был удален из памяти или после автоматического получения номера номер был установлен явно. Под явной установкой номера подразумеваем любое изменение номера объекта, не связанное с его автоматическим получением. Это может быть программная установка номера через свойство объекта Номер или Код (в зависимости от типа объекта) или заполнение номера в форме объекта вручную. Номер может стать свободным также при откате транзакции.

При получении очередного номера механизм автонумерации сначала ищет свободный номер. Если номер найден, то он удаляется из списка свободных и выдается объекту. Если номер не найден, выполняется увеличение максимального номера и полученный номер выдается объекту. Свободные номера хранятся до перезапуска сервера для серверных информационных баз и до момента закрытия последнего клиентского приложения, работающего с данной информационной базой, для файловых информационных баз. Если необходимо, чтобы номер переиспользовался только в пределах заданного периода (день, месяц), то нужно явно установить номер, больший максимального номера по данному пространству номеров и префиксу. Тогда механизм автонумерации удалит все свободные номера меньше устанавливаемого, и следующий номер будет получен от установленного.

Работа автонумерации в различных режимах

Рассмотрим, как работает механизм автонумерации при первом получении номера, при очередном получении номера, при явной установке номера, при удалении объекта, при изменении реквизитов объекта, касающихся автонумерации, а также при фиксации и откате транзакции.

При первом получении номера по определенному пространству номеров и префиксу выполняется неблокирующее чтение максимального номера из базы данных, т. е. механизм автонумерации использует базу данных для получения максимального номера по определенному пространству номеров и префиксу только один раз.

При последующих попытках получить очередной номер механизм автонумерации использует свободные номера, а также максимальный номер по данному пространству номеров и префиксу, как было описано ранее.

При явной установке номера механизм автонумерации увеличивает максимальный номер, если явно устанавливаемый номер больше максимального, и блокирует все свободные номера меньше явно устанавливаемого номера. Блокированные свободные номера не используются при получении очередного номера. При явной установке номера префикс не указывается, поэтому механизм автонумерации использует уже выданные номера для определения префикса. Для этого по всем префиксам пространства номеров ищется, подходит ли явно устанавливаемый номер под префикс. Если да, то найденный префикс используется при явной установке номера (таких префиксов может быть несколько). Следствием этого алгоритма является то, что явная установка номера может повлиять на выдачу номеров по нескольким префиксам. Например, по префиксу 00 мы получили номер 001, далее по префиксу 0 мы получили номер 002, далее мы установили номер 005, по префиксу 0 будет получен номер 006, а по префиксу 00 будет получен номер 007, т. к. префиксы 0 и 00 являются зависимыми.

При удалении объекта автонумератор уведомляется об этом факте с тем, чтобы если максимальный номер по пространству номеров (или нескольким пространствам номеров), соответствующему удаляемому номеру, еще не был загружен, учесть факт наличия удаляемого номера при загрузке максимального номера.

Некоторые реквизиты объекта могут неявно влиять на номер. Так, например, владелец и родитель справочника, родитель плана вида характеристик, дата документа или бизнес-процесса участвуют в формировании пространства номеров, в рамках которого выдается номер объекта. Их изменение неявно приводит к изменению пространства номеров объекта и эквивалентно тому, как автонумератор реагирует на явную установку номера. Например, имеем справочник с нумерацией в пределах подчинения. Имеем элемент справочника с номером 001, который находится в группе 001. При переносе элемента справочника в группу с номером 002 механизм автонумерации возвращает номер 001 по пространству номеров родителя 001 и выполняет действия по явной установке номера 001 в пространстве номеров родителя 002.

При фиксации транзакции блокированные свободные номера удаляются из списка свободных, а при откате транзакции разблокируются и снова могут использоваться для получения очередного номера.

Восстановление при ошибочно введенном максимальном номере

Алгоритм работы восстановления нумерации следующий:

Источник

Присвоить новый номер при создании документа

В связи с этим прошу посоветовать как можно обходить или решить данную ситуацию. Пока что придумал (но не реализовал) только один механизм: записывать документ с номером (дата-время), в одну секунду документы не записываются как правило в это базе.

Офигеть что я обнаружил:

оказывается в каждой конфигурации есть такое свойство:
Режим автонумерации объектов и 2 значения:
Освобождать автоматически и
Не освобождать автоматически.

Вот интересно, какую опцию лучше ставить и что она реально обозначает.
В типовой Бух стоит по умолчанию «Не освобождать автоматически»,
а в Подрядчике например стоит «Освобождать автоматически».

А то пользователи начали жаловаться что пока до кнопки «Записать» доберутся программа пишет:
Номер неуникальный и приходиться пересоздавать документ.

(21) b-dm, нет, на простом примере:
Создали документ 1, 2, 3.

Документы 2 и 3 пометили на удаление, затем «Удалением помеченных объектов» их удалили из базы полностью. Если стоит признак «Освобождать», то при создании следующего документа он получит номер 2. Если стоит признак «Не освобождать», то номер следующего документа будет 4. В результате у вас в базе не будет документов под номерами 2 и 3 🙂

У меня была подобная ситуация:
Счета на оплату надо было номеровать отдельно по каждой валюте.
Ну и кроме всего тоже была проблемма: менеджер открыл счет, ждет, согласовывает чего-то, записать и тут облом.
Пришлось добавить кнопочку с такой процедурой:

Зпр = Новый Запрос;
Зпр.Текст = «ВЫБРАТЬ *
|ИЗ
| Документ.СчетНаОплатуПокупателю КАК СчетНаоплатуПокупателю
|ГДЕ
| СчетНаоплатуПокупателю.ВалютаДокумента = &Вал
| И Год(СчетНаоплатуПокупателю.Дата) = &Год
|УПОРЯДОЧИТЬ ПО
| Номер УБЫВ»;
Зпр.УстановитьПараметр(«Вал»,ВалютаДокумента);
Зпр.УстановитьПараметр(«Год»,Год(Дата));
Рез = Зпр.Выполнить().Выбрать();
Если Рез.Количество() = 0 Тогда
ЭтотОбъект.Номер = «00001»;
Иначе
Пока Рез.Следующий() Цикл
Попытка
Ном = Число(Рез.Номер) + 1;
ЭтотОбъект.Номер = Формат(Ном,»ЧЦ=6; ЧВН=; ЧГ=0″);
Прервать;
Исключение
КонецПопытки;
КонецЦикла;
КонецЕсли;

интересно в каком случае будет исключение? 🙂
просто присвоение. Записи то Объекта нету. пока пользователь будет тупить этот же номер получит следующий документ

Источник

Нумерация документов в 1С 8.3

при установке нового номера 1с. Смотреть фото при установке нового номера 1с. Смотреть картинку при установке нового номера 1с. Картинка про при установке нового номера 1с. Фото при установке нового номера 1с

Настройка нумерации документов

Настройка нумерации документов выполняется на закладке Нумерация:

при установке нового номера 1с. Смотреть фото при установке нового номера 1с. Смотреть картинку при установке нового номера 1с. Картинка про при установке нового номера 1с. Фото при установке нового номера 1с

Автонумерация — если данный флаг установлен, то при записи номер заполняется автоматически. Новый номер выдается на 1 больше максимального номера. Если данный флаг снять, то номер нужно будет заполнять вручную. Но даже с установленным флагом номер всегда можно заполнить вручную, в том числе изменить у уже записанного документа.

Длина номера — данное свойство определяет длину номера. Если автоматически выданный новый номер меньше длины номера, то в начало номера добавляются лидирующие нули. Это нужно для правильной сортировки по номеру. Если установить длину номера равной нулю, то у документа не будет реквизита номер.

Тип номера — может быть числом или строкой. Как правило используется строковый номер.

Контроль уникальности — при записи документа будет выполняться контроль уникальности номеров. Если уже есть документ с таким номером, то платформа не даст записать его с ошибкой «Значение поля «Номер» не уникально».

Периодичность — период, в пределах которого будет выполняться контроль уникальности. Можно выбрать в пределах:

Например, если установить периодичность = В пределах месяца, то платформа позволит записать несколько документов с одним номером, но в разных месяцах:

при установке нового номера 1с. Смотреть фото при установке нового номера 1с. Смотреть картинку при установке нового номера 1с. Картинка про при установке нового номера 1с. Фото при установке нового номера 1с

Если периодичность = Непериодический, то ни при каких обстоятельствах нельзя сохранить документы с одинаковым номером.

Как правило периодичность указывается в пределах года.

Также данный параметр влияет на выдачу номеров с начала нового периода. Если 31 декабря последний номер был 3782, то 1 января платформа снова начнет выдавать новые номера начиная с 1.

Для получения нового номера используется специальный менеджер автонумерации.

Нумератор

Для каждого вида документа используется своя нумерация. То есть если создать в конфигураторе еще один документ Расход товара, то для него будет использоваться своя нумерация.

Чтобы для разных видов документов можно было использовать сквозную нумерацию можно создать Нумератор.

при установке нового номера 1с. Смотреть фото при установке нового номера 1с. Смотреть картинку при установке нового номера 1с. Картинка про при установке нового номера 1с. Фото при установке нового номера 1с

Его свойства ничем не отличаются от настроек нумерации документа:

при установке нового номера 1с. Смотреть фото при установке нового номера 1с. Смотреть картинку при установке нового номера 1с. Картинка про при установке нового номера 1с. Фото при установке нового номера 1с

Затем данный нумератор нужно указать в свойствах документа:

при установке нового номера 1с. Смотреть фото при установке нового номера 1с. Смотреть картинку при установке нового номера 1с. Картинка про при установке нового номера 1с. Фото при установке нового номера 1с

Теперь для всех документов с данным нумератором будет использовать сквозная нумерация.

Префиксы номеров

Префикс — это строковая часть номера. С разными префиксами можно использовать одинаковые номера, например:

при установке нового номера 1с. Смотреть фото при установке нового номера 1с. Смотреть картинку при установке нового номера 1с. Картинка про при установке нового номера 1с. Фото при установке нового номера 1с

Для установки префикса используется обработчик модуля объекта ПриУстановкеНовогоНомера. Данный обработчик вызывается только для новых документов и если включена автонумерация.

В нем нужно для параметра Префикс указать строковый префикс. Как правило префиксы используются для разных организаций, чтобы для каждой организации была своя сквозная нумерация.

Если при записи документа префикс не указан, то платформа отсортируется по алфавиту все используемые префиксы, возьмет максимальный префикс и выдаст новый номер на единицу больше, чем максимальный номер с таким префиксом.

Префикс платформа определяет с помощью преобразования строкового номера к числу, начиная с последнего разряда. Как только какой-то разряд не получится преобразовать к числу — все что осталось будет считаться префиксом.

Нельзя использовать префикс А, если уже есть префикс АА, так как в этом случае документ с префиксом А получит следующий номер от префикса АА. То есть префикс не может являться частью другого префикса. Например, префикс АИ можно использовать вместе с АА. Префикс Б нельзя использовать вместе с префиксом ББ или БИ или БГ.

Исправление нумерации документов

Автонумератор хранит по каждому префиксу максимальный номер. Если случайно вручную ввести номер «АА9000004», то этот номер будет сохранен как максимальный и следующий номер будет «АА9000005».

Для исправления данной ситуации можно или удалить документ с этим номером или исправить его вручную. В этом случае платформа проверит не был ли номер этого документа максимальным. И если был, то сбросит максимальный номер. После сброса обновит максимальный номер, сохраненный автонумератором. Следующие документы начнут получить правильные номера.

Также для обновления максимального номера автонумератора можно использовать метод ОбновитьНумерациюОбъектов, передав параметром метаданные документа, для которого нужно обновить максимальные номера. Не забыв перед этим удалить все некорректные номера.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *