Документ «Инвентаризация НЗП»
Документ фиксирует результаты инвентаризации незавершённого производства: вручную записывает фактические суммы остатков НЗП по номенклатурным группам в разрезе бухгалтерского и (опционально) налогового учёта на дату инвентаризации. Это документ-опись: он НЕ проводится и НЕ формирует проводок и движений по регистрам (Posting = Deny, RegisterRecords пуст в релизе 3.0.72.1). Служит источником данных для закрытия месяца и сверки фактических остатков НЗП с учётными.
🎯 Что это и зачем
В производстве часть затрат на конец периода «висит» в незавершённом производстве (НЗП) — это продукция, работа над которой начата, но не закончена. Перед закрытием месяца, перед годовой отчётностью, при смене материально-ответственных лиц или по требованию проверяющих предприятие проводит инвентаризацию НЗП: комиссия определяет фактический объём незавершёнки и оценивает её сумму.
Документ «Инвентаризация НЗП» — это электронная опись результатов такой инвентаризации. В него вручную заносят суммы фактических остатков НЗП по каждой номенклатурной группе (например, «Полуфабрикаты стальные», «Заготовки алюминиевые») отдельно для бухгалтерского учёта и, если ведётся учёт КПН, для налогового учёта.
Posting = Deny — то есть кнопки «Провести» у него нет в принципе, документ только записывается. Он не уменьшает и не корректирует остатки НЗП на счетах автоматически. Его роль — зарегистрировать факт и суммы инвентаризации, чтобы эти данные можно было сверить с учётными остатками и использовать при закрытии месяца / ручных корректировках. Подробности и «куда же тогда деваются суммы» — в [Части 2](#-часть-2-для-программиста).Кто работает: бухгалтер по производству / по затратам, реже — экономист или ответственный за инвентаризацию. Периодичность — по регламенту инвентаризаций (как правило, на конец месяца/года).
🧭 Где найти в программе
Документ относится к подсистеме «Производство» (по разбору метаданных объекта). Открывается через журнал документов инвентаризации НЗП в этом разделе; новый документ создаётся кнопкой «Создать».
navigation-map.json) для Документ.ИнвентаризацияНЗП маршрут не задан — объекта там нет (в карте присутствуют только 26 «ходовых» объектов: реализация, поступление, банк, касса, закрытие месяца и т.д.). Точные названия раздела и пункта меню как они выглядят в левом сайдбаре Fresh нужно подтвердить на живой базе. Раздел «Производство» указан по разбору objects/ и логике конфигурации, но не сверен с картой навигации. До сверки считайте маршрут ориентировочным.👤 Часть 1. Для пользователя
Проходим по шагам: от пустого документа до записанной описи НЗП. Помним: документ записывается, а не проводится — кнопки «Провести» здесь нет.
Урок 1. Регистрация инвентаризации НЗП
Когда: комиссия определила фактические суммы незавершённого производства, и эти данные нужно занести в программу (обычно на конец месяца).
Шаг 1. Создаём документ
В журнале «Инвентаризация НЗП» нажимаем «Создать» — откроется форма документа.
Шаг 2. Заполняем шапку
- Дата — дата инвентаризации (по умолчанию текущая). Влияет на период и на применимость налогового учёта на эту дату.
- Номер — присваивается автоматически по маске (нумерация в пределах года).
- Организация — юрлицо, по которому проводится инвентаризация. Обязательно — без него документ не запишется.
- Подразделение — конкретный цех/филиал, если инвентаризация не по всей организации (необязательно).
- Структурное подразделение — альтернативная структурная единица для детального учёта (необязательно).
Шаг 3. Указываем счёт затрат
- Счёт затрат (БУ) — счёт бухучёта, на котором собрано НЗП. В плане счетов КЗ это счета подраздела 1340 «Незавершённое производство» (и связанные счета учёта затрат основного/вспомогательного производства). Заполняется вручную.
Шаг 4. Включаем налоговый учёт (если нужно)
Если ведёте учёт КПН и хотите зафиксировать суммы НЗП и для налогового учёта: - ставим флаг «Учитывать КПН» — программа сама подставит Вид учёта НУ и откроет поле Счёт затрат (НУ) и колонку Сумма (НУ) в таблице; - Счёт затрат (НУ) заполнится автоматически из счёта БУ (его можно поправить).
Шаг 5. Заполняем состав (таблицу НЗП)
В табличной части «Состав» добавляем строки (кнопка «Добавить») — по одной на каждую номенклатурную группу: - Номенклатурная группа — что инвентаризируем (выбор из справочника номенклатурных групп); - Сумма (БУ) — фактическая сумма НЗП по этой группе в бухучёте, в тенге; - Сумма (НУ) — то же для налогового учёта (видна и заполняется только при включённом «Учитывать КПН»; может отличаться от суммы БУ).
Шаг 6. Записываем
Нажимаем «Записать» или «Записать и закрыть». Кнопки «Провести» у документа нет — он только сохраняется в базе.
Урок 2. Копирование предыдущей инвентаризации
Чтобы не набивать состав заново каждый месяц, удобно копировать прошлый документ: 1. В журнале выделяем документ-источник. 2. Контекстное меню → «Скопировать» (или F9). 3. Программа создаст новый документ: новые Номер и Дата (текущая), а Организация, подразделения, счета затрат и вся таблица «Состав» скопируются из источника. Поле Автор очистится и заполнится текущим пользователем. 4. Меняем Дату на дату новой инвентаризации и актуализируем суммы (БУ/НУ) в таблице по свежим данным. 5. «Записать».
Урок 3. Проверка связки «Организация — Подразделение»
При смене подразделения (через связанное поле «Структурное подразделение / Организация») программа проверяет, принадлежит ли подразделение выбранной организации: 1. Если не принадлежит — откроется вопрос вида «Выбранное подразделение не соответствует организации. Очистить некорректные значения?». 2. «Да» — программа очистит несоответствующее значение; «Нет» — вернёт прежнее.
🛠 Часть 2. Для программиста
Источник: реальный код релиза 3.0.72.1 (Documents/ИнвентаризацияНЗП/Ext/ObjectModule.bsl, 60 строк) и метаданные Documents/ИнвентаризацияНЗП.xml, плюс разбор objects/ и business-logic/.
Главное: документ НЕ проводится и НЕ формирует движений
Это подтверждено метаданными документа (ИнвентаризацияНЗП.xml):
<Posting>Deny</Posting>
<RealTimePosting>Allow</RealTimePosting>
<RegisterRecordsDeletion>AutoDelete</RegisterRecordsDeletion>
<RegisterRecordsWritingOnPost>WriteModified</RegisterRecordsWritingOnPost>
<RegisterRecords/> <!-- ПУСТО: ни одного регистра -->
Posting = Deny→ проведение запрещено на уровне метаданных. У документа нет режима «проведён», нет кнопки «Провести», и вObjectModuleнет процедурыОбработкаПроведения(её там физически нет — весь модуль 60 строк).<RegisterRecords/>пусто → документ не является регистратором ни для одного регистра (ни бухгалтерского, ни накопления, ни сведений). Никаких движений он не пишет.
Вывод: «Инвентаризация НЗП» — информационный документ-опись. Он хранит введённые суммы инвентаризации как реквизиты и табличную часть, и всё. Чтобы эти данные повлияли на учёт, их потребляют внешние механизмы — например, регламентные операции закрытия месяца, отчёты-сверки или ручные корректировки (см. ниже «Куда деваются суммы»).
Структура объекта
Реквизиты шапки (имя → подпись на форме):
| Реквизит | Тип | Обяз. | Подпись на форме |
|---|---|---|---|
Организация |
СправочникСсылка.Организации |
ShowError | Организация |
ПодразделениеОрганизации |
СправочникСсылка.ПодразделенияОрганизаций |
DontCheck | Подразделение |
СтруктурноеПодразделение |
СправочникСсылка.ПодразделенияОрганизаций |
DontCheck | Структурное подразделение |
СчетЗатратБУ |
ПланСчетовСсылка.Типовой |
DontCheck | Счет затрат (БУ) |
СчетЗатратНУ |
ПланСчетовСсылка.Налоговый |
DontCheck | Счет затрат (НУ) |
УчитыватьКПН |
Булево |
DontCheck | Учитывать КПН |
ВидУчетаНУ |
СправочникСсылка.ВидыУчетаНУ |
DontCheck | Вид учета НУ |
Автор |
СправочникСсылка.Пользователи |
DontCheck | Автор |
Ответственный |
СправочникСсылка.Пользователи |
DontCheck | Ответственный |
Комментарий |
Строка |
DontCheck | Комментарий |
Табличная часть Состав (имя → подпись):
| Реквизит ТЧ | Тип | Подпись |
|---|---|---|
НоменклатурнаяГруппа |
СправочникСсылка.НоменклатурныеГруппы |
Номенклатурная группа |
СуммаБУ |
Число |
Сумма (БУ) |
СуммаНУ |
Число |
Сумма (НУ) |
(Все подписи взяты из синонимов ИнвентаризацияНЗП.xml, локаль ru.)
Нумерация: NumberLength = 11, NumberPeriodicity = Year.
Формы: ФормаДокумента (основная), ФормаСписка (журнал), ФормаВыбора (выбор как основания в других объектах).
Жизненный цикл — обработчики ObjectModule (3.0.72.1)
Весь модуль состоит из 4 обработчиков событий и не содержит проведения:
| Обработчик | Что делает (по реальному коду) |
|---|---|
ОбработкаЗаполнения |
Если ДанныеЗаполнения — структура, удаляет ключ Автор, копирует свойства в объект, затем ЗаполнениеДокументов.ЗаполнитьШапкуДокумента(...) с валютой регламентированного учёта |
ОбработкаПроверкиЗаполнения |
Готовит МассивНепроверяемыхРеквизитов; если в Состав уже есть строки — добавляет «Состав» в список НЕпроверяемых (см. разбор ниже). Иных проверок не делает |
ПриКопировании |
Перезаполняет шапку через ЗаполнениеДокументов.ЗаполнитьШапкуДокумента(...) со ссылкой на копируемый объект (валюта, автор и т.п.) |
ПередЗаписью |
Если включён режим «одна номенклатурная группа» — подставляет основную номенклатурную группу в строки Состав, где она пустая |
ОбработкаПроведения |
ОТСУТСТВУЕТ. Проведение запрещено (Posting = Deny) |
Служебная логика форм (видимость полей НУ, диалоги «Организация — Подразделение», пересчёт функциональных опций при смене даты) живёт в
ФормаДокументаи здесь не дублируется.
Реальный код: ОбработкаПроверкиЗаполнения и ПередЗаписью
Это два самых содержательных обработчика. Привожу дословно из релиза 3.0.72.1:
Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
МассивНепроверяемыхРеквизитов = Новый Массив();
ПараметрыПострочнойПроверки = Новый Структура();
Если Состав.Количество() > 0 Тогда
МассивНепроверяемыхРеквизитов.Добавить("Состав");
КонецЕсли;
КонецПроцедуры
Разбор ОбработкаПроверкиЗаполнения:
- Обязательность реквизита Организация обеспечивается свойством метаданных ЗаполнениеПроверки = ВыдаватьОшибку (ShowError), а не этим кодом.
- Логика тут обратная интуиции: если в Состав есть строки, то «Состав» добавляется в массив НЕпроверяемых реквизитов (то есть стандартная проверка заполнения по нему отключается). Когда строк нет — массив пуст, и поведение определяется метаданными реквизита Состав.
- ⚠️ Локальные переменные МассивНепроверяемыхРеквизитов и ПараметрыПострочнойПроверки в этой процедуре создаются, но никуда не передаются (нет вызова типовой ОбщегоНазначения.УдалитьНепроверяемыеРеквизиты(...) или построчной проверки). Фактически процедура не влияет на состав проверяемых реквизитов — выглядит как заготовка/недоработанный шаблон. См. issues.
Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
Если ПроцедурыБухгалтерскогоУчетаВызовСервераПовтИсп.ИспользоватьОднуНоменклатурнуюГруппу() Тогда
ПараметрыОтбора = Новый Структура;
ПараметрыОтбора.Вставить("НоменклатурнаяГруппа", Справочники.НоменклатурныеГруппы.ПустаяСсылка());
НайденныеСтроки = Состав.НайтиСтроки(ПараметрыОтбора);
Если НайденныеСтроки.Количество() > 0 Тогда
НоменклатурнаяГруппа = ПроцедурыБухгалтерскогоУчетаВызовСервераПовтИсп.ОсновнаяНоменклатурнаяГруппа();
Для Каждого СтрокаТаблицы Из НайденныеСтроки Цикл
СтрокаТаблицы.НоменклатурнаяГруппа = НоменклатурнаяГруппа;
КонецЦикла;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Разбор ПередЗаписью:
- Срабатывает только когда в учётной политике включён режим «использовать одну номенклатурную группу» (ИспользоватьОднуНоменклатурнуюГруппу()).
- Находит в Состав строки с пустой НоменклатурнаяГруппа и подставляет в них основную номенклатурную группу (ОсновнаяНоменклатурнаяГруппа()).
- ⚠️ Это заполнение пустых значений, а НЕ удаление/фильтрация строк. Разбор objects/ описывает это как «отфильтрует/удалит несоответствующие строки» — по реальному коду строки не удаляются, у них лишь проставляется группа по умолчанию. См. issues.
Движения по регистрам
Их нет. В таблице ниже — то, что обычно ожидают увидеть, и реальность:
| Ожидание (из общих представлений) | Реальность в 3.0.72.1 |
|---|---|
| Проводки Дт/Кт по счетам НЗП (1340/1350) | Не формируются. Posting = Deny, ОбработкаПроведения отсутствует |
| Движения в регистре сведений «остатки НЗП» | Нет. <RegisterRecords/> пуст — документ не регистратор |
| Списание/корректировка затрат | Нет. Документ только хранит введённые суммы |
objects/ и business-logic/ честно помечает register_records как пустой, но местами допускает формулировки «при проведении данные переносятся в учётные регистры» / «движения реализованы в ObjectModule (не раскрыты)». По факту проведение запрещено метаданными, а ОбработкаПроведения в модуле нет. Никаких Дт/Кт у этого документа нет и быть не может без доработки. Не выдавайте «плоские» проводки по НЗП за поведение документа.Куда тогда деваются суммы инвентаризации
Поскольку документ — опись, фактические остатки НЗП влияют на учёт не через него, а через смежные механизмы (это типовая для КЗ-конфигурации схема; точная привязка требует сверки на базе): - Закрытие месяца (zakrytie-mesyaca) — регламентные операции расчёта себестоимости и закрытия счетов производства могут учитывать оценку НЗП; именно там формируются проводки по счетам подразделов 1340/1350 (НЗП) и счетам затрат. - Ручные операции/корректировки — разницу между фактическим (по инвентаризации) и учётным НЗП при необходимости отражают «Операцией, введённой вручную». - Отчёты-сверки — данные документа сопоставляют с учётными остатками НЗП.
Валидации
| Что | Где реализовано | Поведение |
|---|---|---|
Организация обязательна |
Метаданные реквизита (ShowError) |
Без организации документ не записать |
| «Состав» непустой | НЕ enforced в реальном коде | ОбработкаПроверкиЗаполнения НЕ требует строк; см. [KZ30-NZP-03] |
| Связка «Организация — Подразделение» | ФормаДокумента (диалог) |
Вопрос об очистке некорректных значений при смене подразделения |
| Дата запрета изменения | Платформенный механизм | Нельзя записать в закрытый период |
| Пустая группа в строке | ПередЗаписью |
Подстановка основной номенклатурной группы (только в режиме «одна номенклатурная группа») |
objects/ утверждает: «Табличная часть "Состав" должна содержать хотя бы одну строку — пустая ТЧ блокирует запись (ShowError)». В реальном ObjectModule этой проверки нет: ОбработкаПроверкиЗаполнения не выдаёт ошибку при пустом Состав (и вообще не передаёт массив непроверяемых дальше). Блокировка пустой ТЧ может задаваться свойством метаданных реквизита Состав (ПроверкаЗаполнения = ВыдаватьОшибку) — это нужно подтвердить по ИнвентаризацияНЗП.xml. До подтверждения не утверждайте, что пустой документ точно не запишется.Зависимости (общие модули)
| Модуль | Зачем |
|---|---|
ЗаполнениеДокументов |
ЗаполнитьШапкуДокумента при создании/копировании; валюта регламентированного учёта |
ОбщегоНазначенияБКВызовСервераПовтИсп |
ПолучитьВалютуРегламентированногоУчета() |
ПроцедурыБухгалтерскогоУчетаВызовСервераПовтИсп |
ИспользоватьОднуНоменклатурнуюГруппу(), ОсновнаяНоменклатурнаяГруппа() |
ПроцедурыНалоговогоУчета (через формы) |
Заполнение ВидУчетаНУ, конвертация СчетЗатратБУ → СчетЗатратНУ, функциональные опции по дате |
РаботаСДиалогами / РаботаСДиалогамиКлиент (формы) |
Диалоги «Организация — Подразделение» |
ВерсионированиеОбъектов, ПодключаемыеКоманды (ManagerModule/формы) |
Версионирование, команды печати, ограничения доступа |
Posting = Deny, регистров нет). Влияние на учёт идёт через закрытие месяца и ручные операции. Если по проекту нужны автоматические движения/корректировки от инвентаризации НЗП — это доработка (добавление регистратора и ОбработкаПроведения либо отдельный документ «Корректировка НЗП»), а не настройка. Проверяйте также режим «одна номенклатурная группа» в учётной политике — он молча перезаписывает пустые группы в строках при записи.
- Нет
ОбработкаПроведенияи пустойRegisterRecords— не ищите движения в модуле, их нет; не пишите тесты «на проводки».ОбработкаПроверкиЗаполнения— фактически заготовка: создаётМассивНепроверяемыхРеквизитов/ПараметрыПострочнойПроверки, но никуда их не передаёт. При доработке (например, обязательность сумм) реализуйте передачу через типовой API проверки и/или свойства метаданных.ПередЗаписьюзаполняет, а не фильтрует строкиСостав— при доработке учитывайте, что пустые группы будут заменены основной, если включён соответствующий режим УП.Авторисключается изДанныеЗаполнениявОбработкаЗаполнения— при программном создании не полагайтесь на переданного автора.- Обязательность
Организацияи (возможно) непустогоСоставзадаётся метаданными, а не модулем — правьте свойства реквизитов, а не только код.
🔗 Связанные разделы
- zakrytie-mesyaca — где оценка/данные НЗП реально влияют на учёт (себестоимость, закрытие счетов производства)
- realizaciya-tmz-i-uslug — отгрузка готовой продукции (НЗП → готовая продукция → реализация)
🆕 Что нового
| Версия | Изменение | Тип |
|---|---|---|
| 3.0.72.1 | Первичное описание (на релизе 3.0.72.1). Зафиксировано: документ не проводится (Posting = Deny) и не формирует движений (RegisterRecords пуст) |
🆕 |