Меню

1с счетчик нумерации документов



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

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

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

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

  • для объектов, требующих непрерывной нумерации, — нумерация при записи с поддержкой заполнения пропусков в нумерации, образующихся при откатах транзакций;
  • для объектов, не требующих непрерывной нумерации, — нумерация при открытии формы, но без какого-либо переиспользования номеров.

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

Механизм автонумерации позволяет работать в двух режимах: в режиме с возвратом неиспользованных номеров и в режиме без возврата неиспользованных номеров. Режим устанавливается свойством объекта метаданных «Конфигурация» РежимАвтонумерацииОбъектов .

  • Значение данного свойства ОсвобождатьАвтоматически проставляется для ранее созданных конфигураций и используется для обеспечения режима работы нумерации, аналогичного версии 8.0. Полученные автоматически номера и коды будут в дальнейшем использоваться, если объект, для которого они получены, не записан. Этот вариант предполагается использовать для конфигураций, разработанных для версии 8.0 и использующихся в версии 8.1 без изменений.
  • Значение данного свойства НеОсвобождатьАвтоматически используется для поддержки нового режима работы с нумерацией, реализованного в версии 8.1. Этот вариант предполагается использовать для конфигураций, в которых для объектов, требующих непрерывной нумерации, будет реализована нумерация при записи, а не при открытии формы.

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

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

  • для объектов, требующих непрерывной нумерации, — РежимАвтонумерацииОбъектов = НеОсвобождатьАвтоматически, Автонумерация = НеИспользовать ;
  • для объектов, не требующих непрерывной нумерации, — РежимАвтонумерацииОбъектов = НеОсвобождатьАвтоматически, Автонумерация = Авто;
  • для работы механизма автонумерации аналогично версии 8.0 — РежимАвтонумерацииОбъектов = ОсвобождатьАвтоматически , Автонумерация = Авто .

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

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

Например, в БД хранится максимальный номер 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.

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

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

Механизм автонумерации имеет возможности по восстановлению максимального номера после исправления или удаления неверно введенного максимального номера. Например, имеем текущий максимальный номер АА001, пользователь при вводе документа ошибся и явно ввел номер ААБСД. После этого автонумератор запомнил введенный номер и перестал выдавать корректные номера, все время выдавая номер ААБСД. Пользователь исправил неправильно введенный номер документа на АА002. Поcле этого автонумератор стал выдавать правильные номера — АА003, АА004. Альтернативой исправлению может быть удаление объекта с неверно введенным номером.

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

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

Источник

Сбросить счётчик нумерации документов или справочников в 1С

Сбросить счётчик нумерации документов или справочников в 1С

Иногда вследствие ручной правки номера документа или кода справочника или после обменов с распределенными информационными базами в 1С нарушается автонумерация.

Вы можете написать код перенумерации или воспользоваться какой-либо обработкой, но иногда, даже после этого номер генерируется опять не верный.

Система «кэширует» последний выделенный номер.

Для того, чтобы обнулить этот кэш существует функция ОбновитьНумерациюОбъектов.

  • После вызова объекты с номерами становятся невалидными, т.е. в момент записи, если этот номер уже был выдан, но не записан выйдет ошибка контроля уникальности.
  • Для уже записанных документов, ничем не грозит — их номера останутся прежними, даже если они не уникальные.
  • Название функции дает неверное толкование, никакого обновления не происходит.
  • Вызов допустим либо на сервере, либо в режиме толстого клиента
  • Права требуется Полные» или «Административные»

Использование ОбновитьНумерациюОбъектов

ОбновитьНумерациюОбъектов(Метаданные.Документы.ПоступлениеТоваровУслуг);//Один вид документа

МассивМета = Новый Массив;

ОбновитьНумерациюОбъектов();//Все объекты системы, не рекомендуется такой вызов

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

Как проверить ?

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

Код перенумерации одного вида документа

  • Написано для ситуации, когда нумерация у клиента ежемесячно начинается с 0.
  • Выполняется без контроля уникальности (Объект.ОбменДанными.Загрузка = Истина)
  • Без промежуточных перенумераций (обычно обработки сначала меняют нумерацию на другой префикс, а затем вызывают стандартный УстановитьНовыйНомер(«»), получается аналогично, но дольше.
  • В конце можно вызывать ОбновитьНумерациюОбъектов(Метаданные.Документы.ПоступлениеТоваровУслуг); (в монопольном режиме не обязательно)

НачатьС = 1;
Префикс =»10-«;
ПолнаяДлинаНомера = 8;
НачПериода = Дата(2016,10,1);
КонПериода = Дата(2016,10,31);

ТекНомер = НачатьС;
ДлинаНомера = ПолнаяДлинаНомера -СтрДлина(Префикс);
Док = Документы.ПоступлениеТоваровУслуг.Выбрать(НачПериода,КонецДня(КонПериода));
Счетчик = 0;
Пока Док.Следующий() Цикл
Объект = Док.ПолучитьОбъект();
НомерНовый = префикс+Прав(«000000000000″+формат(ТекНомер,»ЧГ=»),ДлинаНомера);
Если не Лев(Объект.Номер,ПолнаяДлинаНомера) = НомерНовый Тогда
Объект.Номер = НомерНовый;

Объект.ОбменДанными.Загрузка = Истина;
Объект.Записать();
Счетчик = Счетчик+1;
КонецЕсли;
ТекНомер = ТекНомер+1;

КонецЦикла;
Сообщить(«Выполнено замен «+Счетчик);

Хороший дизайнер строит ясную структуру. А плохой напихивает все, что знает, и не может привести к своей мысли зрителя.

Источник

Как настроить нумерацию документов в 1С?

Каждый элемент, будь то справочник или какой-либо документ, заносится в программу 1С со своим номером. Этот номер уникальный и присваивается каждому элементу программой автоматически. Однако очень часто нумерация сбивается без каких-либо видимых причин. Почему это может происходить и как избежать подобных ситуаций, поговорим в нашей статье.

Нумерация документов в 1С:Бухгалтерия предприятия редакции 3.0 частично изменилась по сравнению с редакцией 2.0. Номер каждого документа в системе теперь состоит из четырёх символов префикса и самого номера. Если в программе 1С мы захотим завести несколько организаций, то будут задействованы первые два символа префикса (рис. 1), поскольку именно они определяют организацию и устанавливаются непосредственно в карточке организаций (рис. 2) (для каждой организации заводим уникальный символ префикса). Так документы разных организаций легко различаются и имеют независимую нумерацию.

Если префикс организации не будет установлен, то по умолчанию он примет значение «00». Третий и четвертый символы префикса в большинстве случаев устанавливаются в момент настройки синхронизации между различными конфигурациями 1С, к примеру, между 1С:Бухгалтерия предприятия 8 и 1С:Зарплата и управление персоналом 8 (рис. 3).

1С:Бухгалтерия предприятия 8 обеспечивает автоматическую нумерацию документов в порядке их ввода в информационную базу. Номер присваивается документу только в момент его записи. Такой подход гарантирует строго последовательную нумерацию документов, когда с общими данными работают несколько пользователей. Но мы можем изменить автоматически присвоенный номер вручную, однако стоит иметь в виду, что при этом программа не позволит записать уже использованный номер. А если мы захотели внести нумерацию, содержащую символы «/» или «-» и подобные, то должны иметь в виду, что придётся и дальше вручную редактировать номера, поскольку автоматическая нумерация документов будет нарушена.

Также пользователь вправе изменить количество знаков во второй части номера документа. К примеру, «00БП-000099» изменить на «00БП-99». Было бы логично, что следующим номером по хронологии должен стать «00БП-100». Однако этого не произойдёт, поскольку пользователь изменил количество знаков во второй части номера. Теперь 1С будет создавать новые документы с одинаковой нумерацией «99» на конце, так как это максимальное двузначное число. Чтобы обезопасить себя от сбоя нумерации документов, нужно в порядковом номере файла использовать предельное количество символов.

В начале каждого года нумерация документов начинается заново.
При вводе документа задним числом программой присваивается очередной порядковый номер текущего года. Если при этом информационная база содержит документы с более поздней датой, хронологическая последовательность номеров документов будет нарушена. Чтобы это исправить, вам придётся перенумеровать документы вручную.
В программе 1С:Бухгалтерия предприятия ред. 3.0 в разделе «Отчёты» — «Анализ учёта» есть обработка «Экспресс-проверка» (рис. 4), с помощью которой пользователю представляется возможным проверить и исправить нумерацию счетов-фактур, приходных и расходных кассовых ордеров.

В настройках отчёта мы выбираем раздел учёта, по которому будет проводится проверка. В нашем случае это нумерация кассовых документов и нумерация счетов-фактур (рис. 5).

Раскрывая выведенные проверкой ошибки, мы можем более детально их рассмотреть и при необходимости выполнить перенумерацию документов, нажав на соответствующую ссылку «Автоматическая перенумерация документов» (рис. 6).

В этой статье мы рассмотрели, как настраивается нумерация в программе 1С. Надеемся, что этот материал оказался вам полезен. Если возникнут вопросы по данной теме, звоните к нам на Линию консультаций 1С компании «Что делать Консалт». Мы вам обязательно поможем! Наши консультанты имеют многолетний опыт работы с программами 1С и знают ответ на любой вопрос. Первая консультация совершенно бесплатно!

Источник

Читайте также:  Через сколько лет поверяется электросчетчик
Adblock
detector