Меню

номер документа при записи 1с

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

Механизм автонумерации в «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.

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

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

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

Источник

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

reklama http

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

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

nomer

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

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

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

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

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

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

nomer 1

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

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

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

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

Нумератор

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

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

nomer 2

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

nomer 3

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

nomer 4

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

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

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

nomer 5

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

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

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

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

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

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

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

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

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

Источник

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

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

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

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

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

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

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

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

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

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

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

Источник

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

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

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

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

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

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

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

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

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

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

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

Источник

Документы в 1С 8. Примеры работы средствами встроенного языка

В статье приводятся практические примеры работы с документами в языке 1С. Рассматриваются приемы работы с объектной моделью — создание, редактирование, удаление документов, а также типовые запросы для выборки документов по различным условиям. Для удобства пользуйтесь оглавлением.

Содержание

Немного о документах

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

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

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

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

Источник

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

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