Как автоматизировать перемещение товаров по дням в 1С:КА 2 для выравнивания остатков?

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

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

Постановка задачи и анализ ситуации

Разберем ситуацию: интернет-заказы списываются с «Интернет-склада», но товар фактически находится на «Основном складе» магазина. Если просто переместить весь объем товара в конце месяца одним документом, в середине месяца по «Интернет-складу» возникнут отрицательные остатки. Это критично для партионного учета и расчета себестоимости в 1С:КА 2. Наша задача — создать обработку, которая будет итерационно проходить по каждому дню месяца, проверять наличие товара на источнике и перемещать его на склад-получатель ровно в том объеме, который необходим для обеспечения продаж, но не более текущего остатка.

Алгоритм работы автоматической обработки

Для решения этой задачи проанализируем следующий алгоритм, который можно внедрить во внешнюю обработку:

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

Техническая реализация запроса к остаткам

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

Для этого создадим временную таблицу со всеми датами месяца, а затем соединим ее с остатками по регистру ТоварыНаСкладах. Посмотрим на пример логики построения такого запроса:


// Пример структуры запроса для получения остатков по дням
ВЫБРАТЬ
    Календарь.Дата КАК ДатаДень,
    Остатки.Номенклатура КАК Номенклатура,
    Остатки.ВНаличииОстаток КАК Количество
ИЗ
    ВТ_Календарь КАК Календарь
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(&КонецПериода, ) КАК Остатки
ПО Календарь.Дата >= Остатки.Период

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

Решение через расширение: автоматизация «на лету»

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

Разберем шаги реализации через расширение:

  1. Создаем расширение и заимствуем процедуру ПередЗаписью или ОбработкаПроведения документа РеализацияТоваровУслуг.
  2. В коде проверяем, относится ли склад документа к «Интернет-складу».
  3. Проверяем наличие товара на «Основном складе».
  4. Если товар есть, программно создаем и проводим ПеремещениеТоваров текущей датой (но временем на несколько секунд раньше реализации).

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

Использование типовых механизмов «Обеспечение потребностей»

Выясним, можно ли решить задачу без программирования. В 1С:КА 2 существует мощный блок Обеспечение потребностей. Рассмотрим, как его настроить для нашей ситуации:

Преимущество: Это типовой путь, который не требует доработки конфигурации. Недостаток: Типовой механизм ориентирован на планирование будущих поставок, а не на исправление ошибок учета «задним числом» за прошедший месяц.

Влияние на расчет себестоимости (РАУЗ)

Проанализируем критически важный аспект: перемещения задним числом неизбежно влияют на партионный учет. В 1С:КА 2 используется механизм фонового расчета остатков и партий. Если вы массово создаете документы в прошлом периоде, необходимо:

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

Если в системе включена настройка «Исправлять отрицательные остатки при закрытии месяца» (в последних версиях КА 2), программа может сама попытаться распределить запасы, но она делает это в рамках организаций (механизм Интеркампани), а не между складами одной организации в разрезе времени так детально, как это требуется для специфики «бубликов» и «хлеба».

Резюме

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

← На главную