Общий внешний нумератор документов, хранящий значения счетчиков в базе SQL сервера для двух баз 1с 8.х

Решение проблемы сквозной нумерации документов (СчетФактураВыданный) в двух базах 1с организации (торговля и бухгалтерия) при помощи третьей базы на MS SQL сервере, обращение к которой из 1с выполнено при помощи хранимых процедур (ADO).

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

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

Решение: создаем БД enumerator на MS SQL сервере, выполняем скрипт для создания таблиц и хранимых процедур. В таблицах хранится информация о виде счетчика, параметрах организации и строка подключения, значения счетчиков по датам.

Вносим изменения в конфигурацию 1с (все необходимое содержится в файле конфигурации, изменения вносились и тестировались на Управление торговлей 10.3 (8.1), Бухгалтерия предприятия 2.0 (8.2)). Пример написан для БД Торговли, для бухгалтерии необходимо переменной db_type присвоить значение 1 в обработке РаботаСНумератором, модуле формы справочника Организации и в процедуре ПриУстановкеНовогоНомераДокумента. Также нужно включить документ СчетФактураВыданный в подписку на событие ПриУстановкеНовогоНомераДокумента.

Установить четыре константы параметров подключения

Установить реквизит Организации Нумератор_СчетФактураВыданный. Заполнение и уникальность ИНН обязательно, по этому полю выполняется идентификация.

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

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

Работает это так: при возникновении у документа-подписчика события ПриУстановкеНовогоНомераДокумента вызывается хранимая процедура, которая проверяет переданную дату и при необходимости открывает новый период нумерации, увеличивая значение счетчика на прошлую дату на дельту. Затем найденное последнее значение увеличивается на 1, записывается в таблицу базы нумератора и возвращается в 1с. Если для периода нет свободных значений счетчика, генерируется исключение.

Надеюсь, кому-нибудь пригодится.

1 Comment

  1. oberon355

    У нас так реализовали сплошную нумерацию по кассовым документам. Более критичная часть. А по счетам фактурам бухов устраивает и с пробелами в нумерации

    Reply ↓

Leave a Comment

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