Как организовать учет собственных и принятых на хранение товаров в 1С при использовании опционных договоров

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

Ситуация, когда компания совмещает роль перекупщика и хранителя чужого товара, — классический вызов для архитектора 1С. Особенно остро вопрос встает, когда товар физически неотделим (например, нефтепродукты в одном резервуаре или одинаковые позиции на одной полке), а юридически его нужно разделять на «свой» и «чужой». В рамках опционных договоров право собственности переходит к вам не в момент поставки, а в момент продажи или по требованию.

Рассмотрим подробно, как спроектировать систему регистров и бизнес-процессов для корректного учета таких операций в самописной или сильно кастомизированной конфигурации 1С.

Анализ задачи и юридических ограничений

Прежде чем приступать к разработке, проанализируем вводные данные. У нас есть товар, который поступает по договору ответственного хранения (ОХ). Мы имеем право его продавать. В момент продажи (или сразу после нее) мы должны «выкупить» этот товар у поклажедателя. Для пользователей (продавцов) остаток должен быть общим, а для бухгалтерии и управленцев — разделенным по правам собственности.

Вариант 1. Использование измерения «Вид запасов» в едином регистре

Это архитектурный подход, который используется в современных типовых решениях (например, в 1С:УТ 11). Вместо создания множества регистров, мы добавляем в существующий регистр ТоварыНаСкладах (или его аналог) новое измерение.

Структура регистра ОстаткиТоваров:

В справочнике или перечислении ВидЗапасов мы фиксируем варианты: Собственный товар и Товар на хранении. При поступлении по договору ОХ мы делаем приход по виду «Товар на хранении». При обычной закупке — по виду «Собственный товар».

Преимущества этого подхода:

  1. Легко получить общий остаток, просто не накладывая фильтр на измерение ВидЗапасов.
  2. Приоритет списания реализуется в коде проведения документа отгрузки: сначала программа ищет остатки с видом «Собственный», а при их нехватке — «На хранении».

Вариант 2. Разделение по разным регистрам (Физика vs Юридика)

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

  1. Регистр ОстаткиТоваров (Физический остаток):
    • Измерения: Товар, Склад.
    • Ресурс: Количество.
    • Здесь хранится всё, что лежит на полке, без деления на владельцев.
  2. Регистр ТоварыНаХранении (Чужой товар):
    • Измерения: Владелец (Договор), Товар, Склад.
    • Ресурс: Количество.
    • Здесь учитывается только то, что нам не принадлежит.
  3. Регистр СтоимостьТоваров (Собственные запасы с ценой):
    • Измерения: Товар.
    • Ресурсы: Количество, Сумма.
    • Сюда попадает товар только после официального выкупа или прямой закупки.

Проанализируем формулу расчета собственного товара: Собственный остаток = Общий остаток (из регистра 1) - Остаток на хранении (из регистра 2).

Реализация механизма «Выкупа» при продаже

Самый важный этап — момент продажи «чужого» товара. Рассмотрим по шагам, как должна работать логика проведения документа РеализацияТоваровУслуг:

Шаг 1. Проверка собственного остатка. Программа определяет, сколько своего товара есть в наличии (используя формулу выше или данные регистра стоимости).

Шаг 2. Списание. Если своего товара недостаточно, программа списывает остаток из регистра ТоварыНаХранении.

Шаг 3. Фиксация потребности в выкупе. Чтобы не забыть оформить юридический переход права собственности, необходимо создать вспомогательный регистр (например, ЗакупкиКОбслуживанию) или документ-черновик. Рассмотрим пример кода, который может быть вызван в модуле проведения:


Процедура ОбработкаПроведения(Отказ, Режим)
    // 1. Получаем остатки по регистру Хранения
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ КоличествоОстаток ИЗ РегистрНакопления.ТоварыНаХранении.Остатки(...)";
    
    // ... логика определения объема списания чужого товара ...
    
    // 2. Движение по регистру хранения (уменьшаем чужое)
    Движение = Движения.ТоварыНаХранении.ДобавитьРасход();
    Движение.Номенклатура = Строка.Номенклатура;
    Движение.Количество = КолЧужогоТовара;
    
    // 3. Фиксируем, что этот товар нужно выкупить у поставщика
    ДвижениеВыкуп = Движения.ТоварыКВыкупу.ДобавитьПриход();
    ДвижениеВыкуп.Поставщик = ДоговорХранения.Владелец;
    ДвижениеВыкуп.Номенклатура = Строка.Номенклатура;
    ДвижениеВыкуп.Количество = КолЧужогоТовара;
КонецПроцедуры

Специфика учета нефтепродуктов (ГСМ)

Если ваша отрасль связана с ГСМ, проанализируем дополнительные сложности. Нефтепродукты имеют свойство менять объем в зависимости от температуры, поэтому учет на хранении обязательно должен вестись в весовых единицах (тоннах).

При продаже через ТРК (топливораздаточные колонки) вы получаете данные в литрах. В этот момент система должна:

  1. Пересчитать литры в килограммы по текущей плотности.
  2. Списать соответствующую массу с регистра хранения.
  3. Оформить выкуп именно в тоннах, так как поставщик (нефтебаза) ведет расчеты с вами по весу.

Важный момент по недостачам: При инвентаризации на нефтебазах или АЗС всегда возникают излишки и недостачи. В договоре ОХ должно быть четко прописано, за чей счет они списываются. Если за ваш — то любая недостача должна инициировать процедуру «выкупа» у поклажедателя, так как вы несете материальную ответственность за сохранность единиц товара.

Организация отчетности

Для контроля ситуации проанализируем, какие отчеты понадобятся руководителю:

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

← На главную