Как изменить автоматическую нумерацию в 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.

Читайте также:  Как писать корень в excel

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

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

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

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

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

Что делать, если в 1С 8.3 или 8.2 сбилась нумерация документов? В «1С Бухгалтерии предприятия 3.0» есть штатное средство для данной операции. Это функция «Экспресс-проверка ведения учета».

Но, к сожалению, она делает проверку на правильность нумерации только по кассовым документам (ПКО и РКО) и по счетам-фактурам.

В этой статье я хочу:

  • рассмотреть встроенные средства;
  • поэтапно создать простенькую обработку для перенумерации других документов.

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

Перенумерация с помощью Экспресс-проверки ведения учета

Данная обработка для перенумерации документов 1С находится в разделе «Отчеты». Далее ищем раздел «Анализ учета» и переходим в «Экспресс – проверка«. Появится следующее окно:

Устанавливаем нужный период и нажимаем кнопку «Выполнить проверку».

В случае, если в каком-то разделе учета будут обнаружены ошибки, это будет подсвечено красным.

В своей тестовой конфигурации я специально создал несколько ошибочных ситуаций для наглядности:

Как видим, у нас нарушена нумерация документов. И как написано, программа 1С 8.3 предлагает автоматически это исправить. Жмем на выделенную ссылку:

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

Обратите внимание, что есть возможность установить начальный номер для заданного периода. Это означает, что если нам нужно начать с номера 123, то именно так и произойдет. Это актуально, когда перенумерация происходит не с начала года.

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

Получите 267 видеоуроков по 1С бесплатно:

Нажмем «Продолжить», и начнется процесс перенумерации.

Для программистов: создание обработки 1С для перенумерации других документов

Для наших опытов выберем мой любимый документ «Реализация (акты, накладные)«.

Создадим новую внешнюю обработку и добавим на форму следующие реквизиты:

  • ДатаНачала.
  • ДатаОкончания.
  • НачальныйНомер.
  • Организация.

Реквизит «Организация» следует добавлять только в случае, если учет ведется по нескольким организациям в одной информационной базе. В ином случае достаточно добавить реквизит «Префикс». Запрос в этом случае будет немного попроще. Вот, что у меня получилось:

Итак, создаем команду на клиенте. Так как запросы выполняются на сервере, в этой команде будет только вызов серверной процедуры, например, «ВыполнитьНаСервере()».

Далее переходим к этой процедуре. Сразу же создадим запрос:

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

Читайте также:  Как подключиться к mysql на хостинге

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

Вот какая ужасная нумерация у меня была до запуска обработки:

После запуска обработки нумерация выровнялась:

Данную обработку для примера вы можете скачать по ссылке.

К сожалению, мы физически не можем проконсультировать бесплатно всех желающих, но наша команда будет рада оказать услуги по внедрению и обслуживанию 1С. Более подробно о наших услугах можно узнать на странице Услуги 1С или просто позвоните по телефону +7 (499) 350 29 00. Мы работаем в Москве и области.

Довольно часто в программе 1С встречаются ситуации, когда происходит нарушение нумерации документов. Изменить положение можно как штатными средствами, так и написав обработку. Стандартный функционал 1С 8.3 производить перенумерацию не всех документов (приходный/расходный кассовый ордер и счет-фактура).

Исправление нумерации в 1С Бухгалтерия 3.0 штатной обработкой

Рассмотрим как исправить нумерацию в типовой конфигурации 1С 8.3 Бухгалтерия 3.0. В меню «Отчеты» выберите пункт «Экспресс–проверка».

В открывшейся форме выберите организацию и период. Далее нажмите «Выполнить проверку».

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

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

Некоторое время 1С 8.3 будет анализировать данные. Обычно это происходит не долго, но все зависит от количества документов.

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

В принципе, нас все устраивает, и мы оставим настройки по умолчанию. Далее нажмем на кнопку «Продолжить».

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

Создание обработки для перенумерации (для программистов)

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

Рассмотрим самый простой пример алгоритма перенумерации документа. В качестве документа будем использовать требование – накладную.

Для начала расположим на форме те же элементы, что были в штатном механизме перенумерации.

Команда «Выполнить» будет вызывать серверную процедуру.

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

Далее в цикле перебирается каждая накладная и у нее меняется номер. Он зависит от установленного префикса в организации и начального номера, указанного на форме обработки. Режим записи (запись или проведение) зависит от того, был ли изначально проведен документ.

Изначально у нас было два документа «Требование – накладная». Как мы видим на рисунке, номера указаны не правильно. Чем раньше создан документ, тем меньше у него должен быть номер.

В результате запуска описанного выше алгоритма номера восстановили правильную последовательность. Первый документ остался проведенным, а второй просто записанным.

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

Adblock
detector