Документ «Комплектация номенклатуры»
Документ собирает комплект (набор) из компонентов или, наоборот, разбирает комплект на составляющие — без производственного процесса. Списывает одни ТМЗ со склада и приходует другие, перенося их стоимость, ведёт параллельный учёт по складу, ГТД и (при необходимости) постоянным разницам КПН. Раздел «Номенклатура и склад».
🎯 Что это и зачем
Иногда товар нужно превратить в другой товар простой сборкой, без производства: собрать подарочный набор из отдельных позиций, скомплектовать готовый комплект мебели, набор инструментов, ассорти. И обратная задача — разобрать ранее собранный комплект на компоненты, чтобы продать их по отдельности.
Документ «Комплектация номенклатуры» делает это одним проведением:
- Комплектация (сборка): компоненты из табличной части списываются со склада, а на склад приходуется готовый комплект. Стоимость списанных компонентов переносится на комплект.
- Разукомплектация (разборка): комплект списывается со склада, а компоненты приходуются обратно. Стоимость комплекта распределяется на компоненты — по умолчанию пропорционально доле стоимости.
При этом не возникает ни выручки, ни НДС, ни взаиморасчётов с контрагентом — это внутренняя складская операция, перемещение стоимости между позициями номенклатуры. Меняется только то, какие ТМЗ и в каком количестве лежат на складе.
Кто работает: кладовщики и бухгалтеры по факту сборки/разборки. Документ вводится вручную (на основании других документов он не создаётся), а табличную часть удобно заполнять из спецификации (рецепта сборки) номенклатуры.
🧭 Где найти в программе
Раздел «Номенклатура и склад» → пункт «Комплектация номенклатуры». Откроется журнал документов; новый создаём кнопкой «Создать».
navigation-map.json этого объекта нет — точное имя пункта в левом меню Fresh не подтверждено. Раздел определён по метаданным и подсистемам конфигурации (товарные справочники «Номенклатура» и «Склады» живут в «Номенклатура и склад»). В разборе объекта он также описан как доступный «через раздел Склад или Товары». Перед публикацией сверьте подпись пункта в реальной базе. См. [журнал ошибок](../../../../issues/AccountingKZ30/issues.md) — KZ30-KN-0001.👤 Часть 1. Для пользователя
Проходим по шагам: от пустого документа до проведённой сборки и проверки движений. Затем — разборка, заполнение из спецификации и нюанс с импортными ГТД.
Урок 1. Комплектация (сборка комплекта)
Когда: на складе из отдельных компонентов собрали готовый комплект.
Шаг 1. Создаём документ и выбираем вид операции
«Создать» → в шапке выбираем Вид операции = «Комплектация». Это первое и самое важное поле: от него зависит вся логика проведения и состав видимых полей.
Шаг 2. Заполняем шапку
- Организация — подставится основная или выбираем вручную. От неё зависят счета учёта и вид учёта НУ.
- Склад — склад, где выполняется сборка.
- Номенклатура — товар-комплект, который собираем (результат операции).
- Количество и Единица измерения — сколько комплектов собрали (коэффициент подтянется сам).
- Счёт учёта (БУ) — счёт, на котором будет числиться комплект (обычно товары — 1320/1330). Чаще всего заполняется автоматически по номенклатуре и организации.
Шаг 3. Заполняем компоненты
В табличной части «Комплектующие» перечисляем, из чего собран комплект. По каждой строке: - Номенклатура компонента; - Количество компонента (на указанное в шапке число комплектов); - Единица измерения и Коэффициент (обычно = 1) — подставятся сами; - Счёт учёта (БУ) компонента — подтянется автоматически; - Доля стоимости — для комплектации заполнять не обязательно (в проводках комплектации она не используется — см. Часть 2).
Шаг 4. Проводим и проверяем движения
«Провести» или «Записать и закрыть». Чтобы убедиться, что компоненты списались, а комплект оприходовался, откройте отчёт о движениях документа — Дт/Кт и/или движения по регистру товаров.
Урок 2. Разукомплектация (разборка комплекта)
Когда: ранее собранный комплект разбираем обратно на компоненты.
Отличия от Урока 1: 1. Вид операции = «Разукомплектация». 2. В шапке Номенклатура — это комплект, который разбираем (он спишется со склада). 3. В табличной части «Комплектующие» — позиции, которые получаем на склад в результате разборки. 4. Доля стоимости в строках теперь работает: по ней стоимость разобранного комплекта распределяется между компонентами. Сумма долей по строкам должна давать 100 %.
Урок 3. Заполнение компонентов из спецификации
Чтобы не вводить компоненты вручную:
- В шапке заполните Номенклатуру комплекта и Количество.
- В табличной части «Комплектующие» нажмите «Заполнить».
- Выберите спецификацию (рецепт сборки) из доступных для этой номенклатуры.
- Система рассчитает количество каждого компонента: норма из спецификации × количество комплектов × коэффициент.
Урок 4. Импортные товары и номера ГТД
Если организация ведёт учёт товаров по номерам ГТД (грузовых таможенных деклараций), у импортных позиций нужно указать источник происхождения:
- Заполните шапку и компоненты.
- Для строки с импортным товаром откройте номера ГТД (команда «Открыть номера ГТД» на строке) и распределите количество по конкретным номерам ГТД — сумма должна совпадать с количеством в строке.
- Проведите документ.
Урок 5. Печать
У документа есть печатная форма «Комплектация номенклатуры» (кнопка «Печать»). Форма многоязычная; набор дополнительных колонок печати настраивается константой конфигурации.
🛠 Часть 2. Для программиста
Источник истины — реальный код релиза 3.0.72.1 (Documents/КомплектацияНоменклатуры/Ext/ObjectModule.bsl), прочитан целиком. Дополнительно — разбор objects/ и business-logic/ (ObjectModule, ManagerModule, ФормаДокумента). Где разбор objects/ расходится с кодом, верен код — расхождения помечены ниже.
Структура объекта
Реквизиты шапки. Обязательные (ShowError): ВидОперации, Организация, Склад, Номенклатура, Количество, Коэффициент, СчетУчетаБУ. Условно-обязательные (зависят от КПН — см. ниже): ВидУчетаНУ, СчетУчетаНУ. Прочие: ЕдиницаИзмерения, СтруктурноеПодразделение, НомерГТД, УчитыватьКПН (флаг), РучнаяКорректировка (флаг), Автор, Ответственный, Комментарий.
Табличные части:
- Комплектующие — компоненты: Номенклатура, Количество, ЕдиницаИзмерения, Коэффициент, ДоляСтоимости, СчетУчетаБУ, СчетУчетаНУ, НомерГТД, КлючСвязи.
- НомераГТД — служебная таблица детализации по ГТД (КлючСвязи, НомерГТД, Количество; есть устаревшие поля Удалить…). Заполняется автоматически в ПередЗаписью.
objects/ в одном месте упоминает кнопку «Подбор» и табличную часть «Товары». В реальном объекте табличная часть называется «Комплектующие», а заполнение идёт через «Заполнить» (спецификация) и буфер обмена. Ориентируйтесь на «Комплектующие».Жизненный цикл (обработчики ObjectModule)
| Обработчик | Что делает |
|---|---|
ОбработкаЗаполнения |
Если заполняется по документу-основанию — ЗаполнитьПоДокументуОснования; если по структуре — переносит значения свойств (удаляя Автор). Затем ЗаполнениеДокументов.ЗаполнитьШапкуДокумента |
ОбработкаПроверкиЗаполнения |
Формирует список непроверяемых реквизитов в зависимости от вида операции и поддержки КПН; проверяет балансовость счетов построчно; делегирует СчетаУчетаВДокументах.ПроверитьЗаполнение |
ПриКопировании |
Заново заполняет шапку (валюта регл. учёта), очищает НомераГТД при копировании |
ПередЗаписью |
При проведении и учёте товаров по ГТД — заполняет таблицу НомераГТД (отдельная ветка для разукомплектации); СчетаУчетаВДокументах.ЗаполнитьПередЗаписью |
ОбработкаПроведения |
Готовит наборы записей; при РучнаяКорректировка — выходит; иначе формирует движения (ветки комплектация / разукомплектация) |
ЗаполнитьНаборыЗначенийДоступа (экспорт) |
Наборы RLS по организации/подразделению/складу через УчетТоваров |
Как формируется проведение — реальный код (3.0.72.1)
Главное, что нужно понять: бухгалтерские проводки (Дт/Кт) не «зашиты» в этот документ. ОбработкаПроведения собирает таблицы и делегирует формирование движений общим модулям учёта — УчетТоваров, НомераГТДСервер, ПроцедурыНалоговогоУчета. Сам документ — оркестратор; конкретные счета и суммы определяются учётной политикой, настройками счетов и фактической себестоимостью на складе.
Источник: ObjectModule.bsl, процедура ОбработкаПроведения (стр. 140), приведена целиком:
Процедура ОбработкаПроведения(Отказ, РежимПроведения)
// ПОДГОТОВКА ПРОВЕДЕНИЯ ПО ДАННЫМ ДОКУМЕНТА
ПроведениеСервер.ПодготовитьНаборыЗаписейКПроведению(ЭтотОбъект);
Если РучнаяКорректировка Тогда
Возврат; // движения заполняет пользователь вручную
КонецЕсли;
ПараметрыПроведения = Документы.КомплектацияНоменклатуры.ПодготовитьПараметрыПроведения(Ссылка, Отказ);
Если Отказ Тогда
Возврат;
КонецЕсли;
// ПОДГОТОВКА ПРОВЕДЕНИЯ ПО ДАННЫМ ИНФОРМАЦИОННОЙ БАЗЫ
Если ПараметрыПроведения.Реквизиты[0].ВидОперации = Перечисления.ВидыОперацийКомплектацияНоменклатуры.Комплектация Тогда
// Таблица списанных товаров - комплектация
ТаблицаСписанныеТоварыКомплектация = УчетТоваров.ПодготовитьТаблицуСписанныеТовары(
ПараметрыПроведения.СписаниеТоваровКомплектацияТаблица, ПараметрыПроведения.Реквизиты, Отказ);
ТаблицаКомплектующиеКомплектация = УчетТоваров.ПодготовитьТаблицуКомплектующихКомплектация(
ТаблицаСписанныеТоварыКомплектация, ПараметрыПроведения.Реквизиты, Отказ);
// Формирование движений
УчетТоваров.СформироватьДвиженияКомплектация(ТаблицаКомплектующиеКомплектация,
ПараметрыПроведения.Реквизиты, Движения, Отказ);
Иначе // разукомплектация
// Таблица списанных товаров - разукомплектация
СписаниеТоваровРазукомплектацияТаблица =
Документы.КомплектацияНоменклатуры.ПодготовитьТаблицуСписаниеТоваровРазукомплектация(
ПараметрыПроведения.СписаниеТоваровРазукомплектацияТаблица, ПараметрыПроведения.Реквизиты);
// При распределении из-за округления возможно отрицательное количество — проверяем
ПроверитьТаблицуСписанияНаОтрицательныеЗначения(СписаниеТоваровРазукомплектацияТаблица);
ТаблицаСписанныеТоварыРазукомплектация = УчетТоваров.ПодготовитьТаблицуСписанныеТовары(
СписаниеТоваровРазукомплектацияТаблица, ПараметрыПроведения.Реквизиты, Отказ);
ТаблицаКомплектующиеРазукомплектация = УчетТоваров.ПодготовитьТаблицуКомплектующихРазукомплектация(
СписаниеТоваровРазукомплектацияТаблица, ТаблицаСписанныеТоварыРазукомплектация, ПараметрыПроведения.Реквизиты, Отказ);
// Формирование движений
УчетТоваров.СформироватьДвиженияКомплектация(ТаблицаКомплектующиеРазукомплектация,
ПараметрыПроведения.Реквизиты, Движения, Отказ);
КонецЕсли;
// КОНТРОЛЬ ПО РЕГИСТРУ "ТОВАРЫ ОРГАНИЗАЦИЙ"
НомераГТДСервер.ВыполнитьКонтрольТоварыОрганизаций(ПараметрыПроведения.ТаблицаСписанияТоварыОрганизаций,
ПараметрыПроведения.Реквизиты, , Отказ);
// ФОРМИРОВАНИЕ ДВИЖЕНИЙ — Товары организаций
НомераГТДСервер.СформироватьДвиженияТоварыОрганизаций(ПараметрыПроведения.ТаблицаОприходованияТоварыОрганизаций,
ПараметрыПроведения.Реквизиты, Движения, Отказ);
НомераГТДСервер.СформироватьДвиженияТоварыОрганизаций(ПараметрыПроведения.ТаблицаСписанияТоварыОрганизаций,
ПараметрыПроведения.Реквизиты, Движения, Отказ);
// Отражение ПР в НУ
ПроцедурыНалоговогоУчета.ОтразитьПостоянныеРазницыВНУ(ПараметрыПроведения.Реквизиты, Движения, Отказ);
КонецПроцедуры
Разбор по шагам:
| Шаг кода | Что делает |
|---|---|
ПроведениеСервер.ПодготовитьНаборыЗаписейКПроведению |
Готовит наборы записей всех регистров документа |
Если РучнаяКорректировка … Возврат |
Авто-проведение полностью пропускается — движения заполняет пользователь |
Документы.…ПодготовитьПараметрыПроведения |
Из ManagerModule: собирает временные таблицы (списание/оприходование) и реквизиты документа |
ветка Комплектация |
Готовит таблицы списанных товаров и компонентов, вызывает УчетТоваров.СформироватьДвиженияКомплектация |
ветка Разукомплектация |
То же зеркально + ПроверитьТаблицуСписанияНаОтрицательныеЗначения (проверка округления долей) |
НомераГТДСервер.ВыполнитьКонтрольТоварыОрганизаций |
Контроль остатков по регистру товаров (отрицательные остатки) |
НомераГТДСервер.СформироватьДвиженияТоварыОрганизаций (×2) |
Движения по складскому регистру: оприходование и списание (с разбивкой по ГТД) |
ПроцедурыНалоговогоУчета.ОтразитьПостоянныеРазницыВНУ |
Постоянные разницы в НУ (для КПН) |
Где формируются бухгалтерские записи. Дт/Кт по плану счетов формирует УчетТоваров.СформироватьДвиженияКомплектация — единый вызов для обеих веток (передаётся уже подготовленная таблица «комплектующих»). Именно туда, а не в ObjectModule, нужно смотреть, чтобы узнать точные счета и суммы. ManagerModule.ПодготовитьПараметрыПроведения готовит исходные таблицы через запросы (СписаниеТоваровКомплектация, СписаниеТоваровРазукомплектация, оприходование/списание «Товары организаций»).
Движения по регистрам
Из реального кода ObjectModule прямо видны два направления движений; бухгалтерские/налоговые регистры пишет делегированный модуль УчетТоваров.
| Регистр | Кто пишет (из кода) | Что отражает |
|---|---|---|
ТоварыОрганизаций (накопление, остатки) |
НомераГТДСервер.СформироватьДвиженияТоварыОрганизаций ×2 |
Складское движение: расход одних ТМЗ и приход других (в разрезе организации, склада, номенклатуры, ГТД) |
| Бухгалтерский план счетов (БУ) | УчетТоваров.СформироватьДвиженияКомплектация |
Перенос стоимости между счетами учёта компонентов и комплекта |
| Налоговый учёт / постоянные разницы | ПроцедурыНалоговогоУчета.ОтразитьПостоянныеРазницыВНУ |
Постоянные разницы в НУ (КПН), если применимо |
objects/ утверждает, что ОбработкаПроведения напрямую пишет в регистры бухгалтерии Типовой и Налоговый «плоскими» проводками и называет складской регистр ТоварыОрганизацийБУ. В реальном коде ObjectModule этих прямых движений нет: складской регистр называется ТоварыОрганизаций, а бухгалтерские записи формирует общий модуль УчетТоваров.СформироватьДвиженияКомплектация. Конкретные имена регистров бухгалтерии и счета берите из модуля УчетТоваров и из отчёта «Дт/Кт» на проведённом документе, а не из objects/.Иллюстрация Дт/Кт (НЕ из кода документа — для понимания экономики). Счета — казахстанские (товары 1320/1330), точные коды определяет учётная политика и счета учёта номенклатуры:
- Комплектация:
Дт 1320 (комплект) — Кт 1320/1330 (компоненты)— стоимость компонентов переносится на комплект. - Разукомплектация:
Дт 1320/1330 (компоненты) — Кт 1320 (комплект)— стоимость комплекта распределяется на компоненты поДоляСтоимости.
УчетТоваров.СформироватьДвиженияКомплектация + отчёт «Дт/Кт». Российские счета (10/41/43) здесь неприменимы.Валидации (ОбработкаПроверкиЗаполнения и связанные)
- Зависимость от вида операции: при
ВидОперации = Комплектацияиз проверки исключаетсяКомплектующие.ДоляСтоимости(для комплектации доля не обязательна). - Зависимость от КПН: плательщик налога на прибыль определяется
УчетнаяПолитикаСервер.ПлательщикНалогаНаПрибыль. Если КПН не учитывается, либо нет поддержки временных разниц, либоВидУчетаНУ ≠ НУ— из проверки исключаютсяВидУчетаНУ,СчетУчетаНУ,Комплектующие.СчетУчетаНУ(то есть налоговые счета обязательны только когда реально ведётся учёт КПН по виду учёта «НУ»). - Балансовость счетов (построчно):
ПроверитьЗаполнениеТабличнойЧастиПострочносравнивает признакЗабалансовыйсчёта строки и счёта шапки. Если они различаются — ошибка: «При комплектации (разукомплектации) ТМЗ не поддерживается корреспонденция между балансовыми и забалансовыми счетами». То есть нельзя комплектовать так, чтобы комплект был на балансовом счёте, а компонент — на забалансовом (или наоборот). - Субконто «Номенклатура» / общая корректность счетов: делегируется
СчетаУчетаВДокументах.ПроверитьЗаполнение(ЭтотОбъект, …). - Отрицательное количество от округления (разукомплектация):
ПроверитьТаблицуСписанияНаОтрицательныеЗначенияне прерывает проведение, а выдаёт сообщение пользователю и пишет предупреждение в журнал регистрации. - Контроль остатков:
НомераГТДСервер.ВыполнитьКонтрольТоварыОрганизаций— контроль по регистру «Товары организаций» на этапе проведения.
🐞 Баг в коде (нашли при разборе) [KZ30-KN-0004]. В
ПроверитьТаблицуСписанияНаОтрицательныеЗначенияветка определенияИмяКорСубконтосодержит копипаст-ошибку: условие наКорСубконтоБУ3проверяется дважды, а присваивается строка"КорСубконтоБУ2"(см.ObjectModule.bsl, стр. ~229–232). Из-за этого случайКорСубконтоБУ2фактически недостижим, и в тексте предупреждения может оказаться неверное имя субконто. На само проведение не влияет (только на текст диагностического сообщения), но при доработке учитывайте.
Зависимости (общие модули)
УчетТоваров (подготовка таблиц списания/комплектующих, формирование движений комплектации, наборы доступа RLS), НомераГТДСервер (заполнение и контроль ГТД, движения «Товары организаций»), ПроцедурыНалоговогоУчета (постоянные разницы НУ, поддержка временных разниц), УчетнаяПолитикаСервер (плательщик КПН), СчетаУчетаВДокументах (заполнение и проверка счетов, субконто), ЗаполнениеДокументов (шапка, заполнение по основанию), ПроведениеСервер, ОбщегоНазначения. На форме — СчетаУчетаВДокументахКлиентСервер (≈40 вызовов, пересчёт счетов), РаботаСДиалогами, НомераГТДКлиент(Сервер).
- «Проводки не те» / «не та сумма» → причина почти всегда в счетах учёта номенклатуры и учётной политике, а не в документе. Документ — оркестратор; вся логика счетов и себестоимости в
УчетТоваров.СформироватьДвиженияКомплектация. Туда и в счета учёта ТМЗ и смотреть.- Документ не проводится из-за счетов НУ → проверьте, действительно ли организация плательщик КПН и ведётся ли учёт по виду «НУ» (
УчетнаяПолитикаСервер.ПлательщикНалогаНаПрибыль). Налоговые счета обязательны только в этом случае.- Ошибка про «балансовые/забалансовые счета» → у клиента смешаны типы счетов в шапке и в строке. Комплект и компоненты должны быть оба балансовые либо оба забалансовые.
- Отрицательные количества при разукомплектации → разбираются
ДоляСтоимости: суммы долей должны давать 100 %, иначе округление даёт «минус». Это предупреждение, а не отказ — но данные будут кривыми.- Импортные товары → если у клиента включён учёт по ГТД (
НомераГТДСервер.ВедетсяУчетПоТоварамОрганизаций), таблицаНомераГТДзаполняется вПередЗаписью; ручная правка не нужна.
РучнаяКорректировка = Истина→ОбработкаПроведениявыходит сразу послеПодготовитьНаборыЗаписейКПроведению— все движения вводятся вручную.- Ветвление по
ВидОперацииидёт по значениюПеречисления.ВидыОперацийКомплектацияНоменклатуры.Комплектация; всё, что не «Комплектация», обрабатывается как разукомплектация (Иначе).- Бухгалтерские движения формирует один метод
УчетТоваров.СформироватьДвиженияКомплектациядля обеих веток — отличаются лишь входные таблицы.ПередЗаписьюдля разукомплектации строит таблицу документа из шапки (1 строка), для комплектации — из табличной частиКомплектующиес учётом складов; затемНомераГТДСервер.ЗаполнитьТаблицуНомераГТД.- На основании этого документа другие документы не создаются и сам он по
ВводитсяНаОснованииот других штатно не порождается (поле оснований в метаданных пустое) — ноОбработкаЗаполненияветку «заполнить по основанию» содержит на случай программного создания.- Печать — в
ManagerModule(Печать→ПечатьКомлектацияНоменклатуры), макет многоязычный, доп. колонки печати настраиваются константой.ManagerModule.ПолучитьБлокируемыеРеквизитыОбъектаблокирует часть реквизитов после проведения (в «простой» версии — Дату и др.); для правки проведённого документа нужна отмена проведения.
🔗 Связанные разделы
- nomenklatura — справочник номенклатуры (комплект и компоненты заводятся здесь)
- specifikaciya-nomenklatury — спецификация (рецепт сборки) для кнопки «Заполнить»
- skladskie-operacii — прочие складские документы
- inventarizaciya-tmz — выверка остатков ТМЗ после комплектации/разборки
🆕 Что нового
| Версия | Изменение | Тип |
|---|---|---|
| 3.0.72.1 | Первичное описание (на релизе 3.0.72.1) | 🆕 |