В практике работы с конфигурацией 1С:Комплексная автоматизация 2 (КА 2) часто возникают ситуации, когда фактическое движение товара не совпадает с учетным. Типичный пример — розничная торговля скоропортящейся продукцией (хлебобулочные изделия), где заказы из интернет-магазина могут оформляться на один склад, а физическое поступление товара фиксируется на другом. Чтобы избежать отрицательных остатков «день в день» и корректно закрыть месяц, необходимо автоматизировать процесс перемещения запасов. Рассмотрим, как реализовать механизм, который будет анализировать остатки и создавать серию перемещений, не допуская «минусов» на конкретные даты.
Разберем ситуацию: интернет-заказы списываются с «Интернет-склада», но товар фактически находится на «Основном складе» магазина. Если просто переместить весь объем товара в конце месяца одним документом, в середине месяца по «Интернет-складу» возникнут отрицательные остатки. Это критично для партионного учета и расчета себестоимости в 1С:КА 2. Наша задача — создать обработку, которая будет итерационно проходить по каждому дню месяца, проверять наличие товара на источнике и перемещать его на склад-получатель ровно в том объеме, который необходим для обеспечения продаж, но не более текущего остатка.
Для решения этой задачи проанализируем следующий алгоритм, который можно внедрить во внешнюю обработку:
ВыручкаИСебестоимостьПродаж или ТоварыНаСкладах (расход).ПеремещениеТоваров.Рассмотрим подробнее, как программно получить данные об остатках на каждый день. Использование метода ОстаткиИОбороты в цикле — крайне непроизводительная операция. Вместо этого проанализируем возможность получения таблицы остатков на все даты периода одним запросом.
Для этого создадим временную таблицу со всеми датами месяца, а затем соединим ее с остатками по регистру ТоварыНаСкладах. Посмотрим на пример логики построения такого запроса:
// Пример структуры запроса для получения остатков по дням
ВЫБРАТЬ
Календарь.Дата КАК ДатаДень,
Остатки.Номенклатура КАК Номенклатура,
Остатки.ВНаличииОстаток КАК Количество
ИЗ
ВТ_Календарь КАК Календарь
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(&КонецПериода, ) КАК Остатки
ПО Календарь.Дата >= Остатки.Период
Важный нюанс: В 1С:КА 2 контроль остатков может быть отключен в настройках склада, что позволяет проводить документы в «минус». Однако для корректного расчета себестоимости механизмом РАУЗ (Расширенная аналитика учета затрат) необходимо, чтобы на момент окончательного закрытия месяца все перемещения были отражены корректно. Проанализируем ситуацию: если мы создаем перемещение 02.01, время документа должно быть 00:00:00, чтобы он «опережал» продажи этого дня.
Вместо ручного запуска обработки в конце месяца, мы можем рассмотреть вариант использования расширения конфигурации. Это позволит создавать перемещения автоматически при проведении реализации.
Разберем шаги реализации через расширение:
ПередЗаписью или ОбработкаПроведения документа РеализацияТоваровУслуг.ПеремещениеТоваров текущей датой (но временем на несколько секунд раньше реализации).Этот метод избавляет бухгалтера от рутины в конце месяца, однако он требует включенного контроля остатков, чтобы система могла сигнализировать о нехватке товара на основном складе в момент продажи.
Выясним, можно ли решить задачу без программирования. В 1С:КА 2 существует мощный блок Обеспечение потребностей. Рассмотрим, как его настроить для нашей ситуации:
Заказы на перемещение.Перемещение товаров.Преимущество: Это типовой путь, который не требует доработки конфигурации. Недостаток: Типовой механизм ориентирован на планирование будущих поставок, а не на исправление ошибок учета «задним числом» за прошедший месяц.
Проанализируем критически важный аспект: перемещения задним числом неизбежно влияют на партионный учет. В 1С:КА 2 используется механизм фонового расчета остатков и партий. Если вы массово создаете документы в прошлом периоде, необходимо:
Остатки и доступность товаров на наличие отрицательных значений в разрезе дней.Если в системе включена настройка «Исправлять отрицательные остатки при закрытии месяца» (в последних версиях КА 2), программа может сама попытаться распределить запасы, но она делает это в рамках организаций (механизм Интеркампани), а не между складами одной организации в разрезе времени так детально, как это требуется для специфики «бубликов» и «хлеба».
Для эффективного решения проблемы виртуальных остатков в 1С:КА 2 оптимальным является написание внешней обработки, которая автоматизирует создание перемещений по алгоритму FIFO (первым пришел — первым ушел) в разрезе дней. Рассмотрим еще раз ключевые моменты: мы берем остаток на утро, сравниваем с продажами за день и создаем перемещение на дефицит, не превышая физический остаток на основном складе. Это позволяет сохранить «чистоту» учета и успешно пройти процедуру закрытия месяца без ошибок в себестоимости.