Как организовать партионный учет в 1С:УНФ для комиссионного товара и ответственного хранения?

Программист 1С v8.3 (Управляемые формы) 1С:Управление нашей фирмой Управленческий учет Торговля и дистрибуция
← На главную

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

Понимание партионного учета в 1С:УНФ

Прежде чем погружаться в детали реализации, важно понять архитектуру партионного учета в 1С:УНФ. Нам следует различать две основные концепции (разобраться в них поможет сравнение регистров "Запасы на складах" и "Запасы и затраты"):

  1. Партии для расчета себестоимости: Это внутренний механизм программы, который используется для автоматического расчета себестоимости по методам "по средней" или "FIFO". Пользователь не может напрямую влиять на эти партии или управлять ими через документы.
  2. Пользовательские партии: Это то, что можно задать в табличной части документов (например, в приходной накладной). Данные партии предназначены для более детального учета движения запасов, поступающих из разных источников, для контроля качества, сроков годности и, главное, для определения владельца товара в случаях комиссионной торговли или ответственного хранения. Партии являются внутренним реквизитом программы и не отображаются в печатных формах для внешних контрагентов.

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

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

Настройка партионного учета в 1С:УНФ

Для активации партионного учета в 1С:УНФ нам потребуется выполнить несколько шагов:

  1. Включение общего флага: Перейдите в раздел «Настройки» -> «Больше возможностей» -> вкладка «Закупки» (или «Общее» в некоторых версиях конфигурации). Здесь установите флажок «Партии номенклатуры». Это активирует возможность ведения партионного учета в системе.
  2. Настройка для конкретной номенклатуры: Для каждой позиции номенклатуры, по которой необходимо вести партионный учет, откройте ее карточку. Здесь вы найдете и установите флажок «Использовать партии».
  3. Обязательное заполнение (опционально): Если вы хотите, чтобы система всегда требовала указания партии при работе с данной номенклатурой в документах, установите флажок «Обязательное заполнение партий» в карточке номенклатуры. Имейте в виду, что это может привести к требованию указывать партию даже в заказах покупателя или на производство, когда партия еще не сформирована, что может быть не всегда удобно.
  4. Настройка функционала комиссионной торговли и ответственного хранения:
    • Для приема товаров на комиссию: в разделе «Настройки» -> «Продажи» установите флаг «Использовать прием товаров на комиссию». Партионный учет должен быть включен автоматически.
    • Для учета товаров, переданных на ответственное хранение: в разделе «Настройки» -> «Закупки» установите флаг «Передача запасов на ответственное хранение».

Механизмы создания партий

Основной вопрос автора темы касался того, как и когда должны создаваться партии: вручную или автоматически. В 1С:УНФ существуют оба подхода, и мы рассмотрим их подробно.

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

Для операций «Прием на комиссию», «Прием в переработку» и «Прием на ответственное хранение» система 1С:УНФ по умолчанию предлагает определенный механизм автоматического создания партий. Давайте разберем его работу:

  1. Автоматическая генерация: При оформлении документа Приходная накладная с видом операции «Прием на комиссию» или «Прием на ответственное хранение», если для данной номенклатуры партия еще не выбрана, система может автоматически создать новую партию.
  2. Группировка по владельцу: Ключевой особенностью является то, что эти автоматически созданные партии группируются по владельцу (комитенту/поклажедателю). Это означает, что при первом приходе от конкретного поставщика на комиссию будет создана новая партия. Все последующие приходы на комиссию от того же поставщика по умолчанию будут использовать уже существующую партию этого владельца. Это зачастую является достаточным решением для базового учета "чей" товар находится на складе.
  3. Ручное создание в документе: Несмотря на автоматизацию, система также предоставляет возможность создать партию вручную непосредственно из документа прихода. В Приходной накладной на панели действий табличной части «Товары» вы можете нажать кнопку «Изменить» и выбрать пункт «Создать партии номенклатуры». Это позволяет задать осмысленное наименование партии, например, номер и дату документа поступления, что может упростить последующую идентификацию.

Нюансы стандартного подхода:

2. Программное создание партий при поступлении товара

Если стандартного функционала недостаточно, и вам требуется более тонкая настройка или полная автоматизация создания партий в УНФ с определенными правилами (например, привязка партии к конкретному документу поступления для всех видов товаров), мы можем реализовать это программно. Этот подход был предложен на форуме и является эффективным решением.

Концепция

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

Реализация по шагам

Для реализации программного создания партий мы будем использовать подписку на событие, например, событие ОбработкаПроверкиЗаполнения или другое событие, происходящее при записи документа Приходная накладная. Это позволит нам вмешаться в процесс до сохранения документа и создать необходимые партии.

  1. Создание подписки на событие: Создайте новую подписку на событие для объекта Документ.ПриходнаяНакладная, выбрав событие, подходящее для вашей логики (например, ПередЗаписью или ОбработкаПроверкиЗаполнения). В качестве обработчика укажите новую экспортную процедуру в общем модуле.
  2. Перебор строк документа: Внутри процедуры обработчика необходимо перебрать все строки табличной части документа поступления, где указана номенклатура и количество.
  3. Проверка на существование партии: Перед созданием новой партии мы должны проверить, не была ли такая партия уже создана ранее. Это актуально, если документ могли перезаполнять или редактировать. Мы можем искать партию по ее наименованию (например, наименованию документа поступления) и владельцу (контрагенту из документа).
  4. Создание новой партии или использование существующей: Если соответствующая партия не найдена, создаем новую. Если найдена — используем ее.
  5. Заполнение партии в документе: После создания или определения партии, мы программно заполняем ею соответствующее поле «Партия» в строке табличной части документа.
Пример кода для программного создания партии

Давайте рассмотрим пример кода, который можно использовать в процедуре-обработчике подписки на событие. Предположим, что подписка настроена на событие ОбработкаПроверкиЗаполнения документа ПриходнаяНакладная, и обработчик находится в общем модуле МойОбщийМодуль.


// В общем модуле "МойОбщийМодуль"

Процедура ОбработкаПроверкиЗаполненияПриходнойНакладной(Источник, Отказ, ПроверяемыеРеквизиты) Экспорт

    // Проверяем, что это Приходная накладная и нам нужен партионный учет
    Если Источник.Метаданные().Имя <> "ПриходнаяНакладная" Тогда
        Возврат;
    КонецЕсли;

    Для Каждого СтрокаТовары Из Источник.Товары Цикл

        Если СтрокаТовары.Номенклатура.ИспользоватьПартии Тогда // Проверяем, что для данной номенклатуры включен партионный учет

            Если СтрокаТовары.Партия.Пустая() Тогда // Если партия не заполнена, пытаемся создать/найти

                // Формируем наименование партии на основе документа
                // Например, "Приходная накладная N123 от 01.01.2024"
                Перем НаименованиеПартии;
                Если ТипЗнч(Источник.Номер) = Тип("Строка") И ТипЗнч(Источник.Дата) = Тип("Дата") Тогда
                    НаименованиеПартии = СокрЛП("Прих. накладная №" + Источник.Номер + " от " + Формат(Источник.Дата, "ДФ=dd.MM.yyyy"));
                Иначе
                    НаименованиеПартии = СокрЛП(Источник); // Используем стандартное представление, если номер/дата не строкового типа
                КонецЕсли;

                // Определяем владельца партии (контрагент из документа поступления)
                Перем ВладелецПартии;
                Если Источник.Контрагент.Пустая() Тогда
                    Отказ = Истина;
                    Сообщение = Новый СообщениеПользователю();
                    Сообщение.Текст = "Не указан контрагент в документе. Невозможно создать партию.";
                    Сообщение.Поле = "Контрагент";
                    Сообщение.Сообщить();
                    Возврат;
                Иначе
                    ВладелецПартии = Источник.Контрагент;
                КонецЕсли;

                // Ищем существующую партию для данной номенклатуры, владельца и наименования
                Перем НайденнаяПартия;
                Запрос = Новый Запрос;
                Запрос.Текст = 
                "ВЫБРАТЬ ПЕРВЫЕ 1
                 |    ПартииНоменклатуры.Ссылка
                 |ИЗ
                 |    Справочник.ПартииНоменклатуры КАК ПартииНоменклатуры
                 |ГДЕ
                 |    ПартииНоменклатуры.Владелец = &Номенклатура
                 |    И ПартииНоменклатуры.ВладелецПартии = &ВладелецПартии
                 |    И ПартииНоменклатуры.Наименование = &НаименованиеПартии";
                
                Запрос.УстановитьПараметр("Номенклатура", СтрокаТовары.Номенклатура);
                Запрос.УстановитьПараметр("ВладелецПартии", ВладелецПартии);
                Запрос.УстановитьПараметр("НаименованиеПартии", НаименованиеПартии);

                РезультатЗапроса = Запрос.Выполнить();
                Выборка = РезультатЗапроса.Выбрать();

                Если Выборка.Следующий() Тогда
                    НайденнаяПартия = Выборка.Ссылка;
                Иначе
                    // Партия не найдена, создаем новую
                    НоваяПартия = Справочники.ПартииНоменклатуры.СоздатьЭлемент();
                    НоваяПартия.Владелец = СтрокаТовары.Номенклатура; // Подчинение номенклатуре
                    НоваяПартия.ВладелецПартии = ВладелецПартии; // Контрагент-владелец товара
                    НоваяПартия.Наименование = НаименованиеПартии;
                    Попытка
                        НоваяПартия.Записать();
                        НайденнаяПартия = НоваяПартия.Ссылка;
                    Исключение
                        Отказ = Истина;
                        Сообщение = Новый СообщениеПользователю();
                        Сообщение.Текст = "Ошибка при создании новой партии: " + ОписаниеОшибки();
                        Сообщение.Сообщить();
                        Возврат;
                    КонецПопытки;
                КонецЕсли;

                // Заполняем поле "Партия" в строке документа
                СтрокаТовары.Партия = НайденнаяПартия;

            КонецЕсли; // Если СтрокаТовары.Партия.Пустая()

        КонецЕсли; // Если СтрокаТовары.Номенклатура.ИспользоватьПартии

    КонецЦикла;

КонецПроцедуры

Пояснения к коду:

  1. Процедура обрабатывает документ Приходная накладная.
  2. Мы перебираем каждую строку табличной части Товары.
  3. Проверяется флаг ИспользоватьПартии для номенклатуры, чтобы избежать создания партий для товаров, где они не требуются.
  4. Если поле Партия в строке документа пустое, мы формируем наименование для новой партии, используя номер и дату документа поступления. Это делает наименование партии уникальным и информативным.
  5. Определяем ВладелецПартии как контрагента из документа Приходная накладная.
  6. Выполняется запрос к справочнику ПартииНоменклатуры, чтобы найти уже существующую партию с таким же владельцем, наименованием и подчинением номенклатуре.
  7. Если партия найдена, ее ссылка используется. В противном случае создается новый элемент справочника ПартииНоменклатуры, заполняются его свойства (Владелец - ссылка на номенклатуру, ВладелецПартии - контрагент, Наименование - сформированное нами) и он записывается.
  8. В конце цикла в строку документа СтрокаТовары.Партия записывается ссылка на найденную или созданную партию.

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

Особенности учета комиссионных товаров и ответственного хранения

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

  1. Прием на комиссию: Оформляется документом Приходная накладная с видом операции «Прием на комиссию». В табличной части обязательно указывается созданная или выбранная партия.
  2. Реализация комиссионных товаров: Осуществляется обычными документами продажи (например, Расходная накладная). При выборе комиссионного товара система предложит выбрать партию, с которой будет списан товар.
  3. Отчет комитенту: После реализации формируется документ Отчет комитенту, который отражает проданные комиссионные товары и рассчитывает вознаграждение.
  4. Прием на ответственное хранение: Оформляется документом Приходная накладная с видом операции «Прием на ответственное хранение». Аналогично, партия является обязательным реквизитом.
  5. Передача на ответственное хранение (со своей стороны): Если вы сами передаете свои товары на ответственное хранение, используйте Расходную накладную с видом операции «Передача на ответственное хранение».
  6. Особенности продажи товаров с ответственного хранения: В типовой конфигурации 1С:УНФ отсутствует стандартный функционал по продаже товаров, полученных на ответственное хранение. Это означает, что для таких операций потребуется либо доработка, либо особый порядок учета (например, возврат поклажедателю и последующая его продажа).

Остатки по принятым запасам (комиссия, ответственное хранение) можно посмотреть в отчетах Остатки запасов принятых или Запасы принятые.

Управление и аналитика партий

Эффективное использование партионного учета невозможно без инструментов для управления партиями и их анализа:

  1. Удаление партий: Кнопки для непосредственного удаления партий в справочнике Партии номенклатуры могут быть неактивны. Обычно партии удаляются через удаление связанных документов (которые используют эти партии) или с помощью специализированных обработок, предназначенных для работы с неиспользуемыми объектами. Если полное удаление не требуется, можно пометить партию как «Недействительна», что уберет ее из списков выбора без полного удаления из программы.
  2. Поиск и аналитика:
    • Справочник Номенклатура: В карточке номенклатуры можно увидеть, какие партии используются для данного товара.
    • Окно подбора запасов: При подборе товара в документы часто можно увидеть доступные партии и их остатки.
    • Отчеты по запасам: Для получения детальной аналитики по партиям рекомендуется использовать отчеты, такие как Остатки запасов или Запасы. Для этого перейдите в раздел «Склад» -> «Аналитика» -> «Запасы», выберите расширенный вид настройки отчета и добавьте поле «Партия» в структуру отчета. Это позволит нам группировать и детализировать данные по каждой партии.

Важные нюансы и ограничения

При внедрении и использовании партионного учета в 1С:УНФ следует помнить о некоторых важных моментах:

  1. Ориентация УНФ: Изначально 1С:УНФ позиционировалась как система для управленческого учета, а не полноценного бухгалтерского учета в понимании государственных стандартов. Хотя она и использует принципы двойной записи (дебет-кредит), ее фокус — на оперативной информации для принятия управленческих решений. Это означает, что для строгого соответствия всем требованиям бухгалтерского учета могут потребоваться дополнительные доработки или интеграция с другой системой (например, 1С:Бухгалтерия).
  2. Сложный производственный учет: Для компаний со сложным производственным циклом, где требуется детализация партий готовой продукции до партий полуфабрикатов и сырья, стандартный функционал УНФ может оказаться недостаточным. Такие сценарии часто требуют глубоких доработок системы.
  3. Необходимость доработок: Как видно из обсуждения на форуме, многие пользователи приходят к выводу, что для организации "нормального" партионного учета, полностью отвечающего их уникальным бизнес-процессам, часто приходится "допиливать" функционал УНФ.
  4. Влияние на себестоимость и списание: В 1С:УНФ расчет себестоимости по методу FIFO реализован по взвешенной оценке. Это означает, что себестоимость не рассчитывается для каждой отдельной реализации напрямую из конкретной партии, а усредняется за период. Однако использование партионного учета в сочетании с FIFO позволяет более детально контролировать остатки по партиям. При продаже остатков из разных партий потребуется указывать две отдельные строки в документе, что требует внимательности со стороны пользователя. Забытая или некорректно указанная партия может нарушить логику расчета.

В целом, 1С:УНФ предоставляет базовые инструменты для партионного учета, особенно для обязательных сценариев (комиссия, ответственное хранение). Однако для глубокой автоматизации и полного соответствия специфическим требованиям бизнеса часто требуется программная доработка, которая позволяет адаптировать систему под уникальные нужды предприятия.

← На главную