При работе в распределенных информационных базах (РИБ) перед разработчиками и бухгалтерами часто возникает вопрос: как обеспечивать корректную нумерацию первичных документов и счетов-фактур, если выписка происходит параллельно в нескольких автономных узлах? В этой статье мы разберем правовые требования к сквозной нумерации, а также проанализируем основные технические способы решения этой задачи в платформе 1С.
Проанализируем ситуацию с точки зрения законодательства. Очень часто требования бухгалтерии о строго сплошной единой нумерации без префиксов и пропусков обусловлены устоявшимися стереотипами. Действующее законодательство не запрещает использование префиксов, буквенных индексов и символов разделения (дробных черт или дефисов).
Для счетов-фактур и первичных учетных документов при наличии обособленных подразделений или удаленных точек выписки разрешено дополнять номер специальным индексом через разделитель. Главные условия налоговых органов:
Таким образом, префикс узла в 1С (например, УТ-000001 или 01-000001) полностью удовлетворяет требованиям законодательства и обеспечивает уникальность данных при синхронизации.
Рассмотрим технические варианты, которые позволяют решить задачу нумерации документов при параллельной работе нескольких узлов.
Разберем базовый механизм платформы 1С. Каждому узлу распределенной базы назначается собственный уникальный префикс (например, МСК, СПБ). При создании документа платформа автоматически добавляет этот префикс к номеру.
Преимущества: Полная автономность узлов, отсутствие конфликтов уникальности при обмене, высокая скорость работы.
Недостатки: Номера документов содержат буквенные префиксы, а сквозной порядковый номер ведется отдельно по каждому узлу.
Посмотрим на гибридный вариант. При оформлении документа в периферийной базе программа обращается через веб-сервис к центральному узлу и запрашивает следующий порядковый номер из единого счетчика.
Рассмотрим укрупненную схему работы такой функции на стороне центральной базы:
Функция ПолучитьСледующийНомер(ИмяДокумента) Экспорт
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ Первые 1
| Док.Номер КАК Номер
|ИЗ
| Документ." + ИмяДокумента + " КАК Док
|УПОРЯДОЧИТЬ ПО
| Док.Дата УБЫВ";
// Вычисление и блокировка очередного номера
// ...
Возврат НовыйНомер;
КонецФункции
Преимущества: Обеспечивается истинно единая сквозная нумерация по всей организации в режиме реального времени.
Недостатки: Теряется главное преимущество РИБ — полная оффлайн-автономность. При отсутствии интернет-связи периферийный узел не сможет выдать номер и провести документ.
Выясним, как работает метод выделения пулов номеров. Центральная база заранее распределяет между периферийными узлами блоки номеров (например, Узлу 1 выделяются номера 1001–2000, Узлу 2 — 2001–3000).
При исчерпании выделенного диапазоне периферийный узел во время очередного сеанса обмена автоматически запрашивает у центра следующую порцию номеров.
Преимущества: Периферийные базы работают оффлайн, сохраняется числовой формат номеров.
Недостатки: Возможны визуальные пропуски («дыры») в общей нумерации центральной базы, если один из узлов расходует свой диапазон дольше остальных.
Проанализируем вариант с перенумерацией при синхронизации. На периферии документ создается с временным технологическим номером. После передачи в центральный узел подписка на событие ПередЗаписью или специальная обработка присваивает документу финальный сквозной номер.
Преимущества: В центральной базе формируется строго хронологический и сплошной массив документов.
Недостатки: Печать первичных документов на периферии возможна только после проведения обмена и получения обратного подтверждения из центра. Иначе возникнет расхождение между распечатанным paper-оригиналом у покупателя и номером в базе.
Подводя итог, выделим оптимальные подходы: