В розничной торговле часто возникает ситуация, когда торговая точка имеет доступ к остаткам нескольких физических складов (например, торговый зал и близлежащий склад-ангар). Если используется кассовое ПО, работающее в режиме оффлайн (например, Frontol 5), стандартная схема обмена с 1С:Торговля и Склад 7.7 может стать ограничением, так как она обычно рассчитана на связку «одна касса — один склад». Рассмотрим подробные варианты решения этой задачи, которые позволят корректно учитывать остатки и не замедлять работу кассира.
Проанализируем самый технически правильный способ со стороны кассового программного обеспечения. Во Frontol 5 существует функционал «Разрезов». Обычно их используют для характеристик (цвет, размер), но ничто не мешает нам использовать их для идентификации склада. Это позволит кассиру при выборе товара сразу указывать, с какого склада он его выдает.
Рассмотрим шаги по реализации этого метода:
atol.ert). Вместо того чтобы выгружать одну строку с общим остатком, мы будем выгружать товар в разрезе складов. В файле обмена goods.txt это будет выглядеть как дополнительные строки или параметры разреза.report.txt в 1С 7.7 программа должна считывать код разреза и подставлять соответствующий склад в документ «Отчет о розничных продажах».Этот метод хорош тем, что обеспечивает максимальную точность учета, но он требует от кассира внимательности и лишнего действия при каждом пробитии позиции.
Если мы не хотим обременять кассира выбором склада, разберем более гибкий вариант на стороне 1С. Мы можем создать в справочнике Склады виртуальную единицу, например, «Склад Касса». На этот склад в кассу будут выгружаться суммарные остатки со всех реальных складов.
Проанализируем алгоритм работы:
Во время выгрузки данных на кассу нам нужно пересчитать остатки. Вместо стандартного получения остатка по одному складу, используем запрос по списку складов. Пример кода на языке 1С 7.7 для сбора остатков:
СписокСкладов = СоздатьОбъект("СписокЗначений");
СписокСкладов.ДобавитьЗначение(СкладОсновной);
СписокСкладов.ДобавитьЗначение(СкладДополнительный);
Рег = СоздатьОбъект("Регистр.ОстаткиТМЦ");
Рег.УстановитьФильтр(Номенклатура, ); // фильтр по товару
СуммарныйОстаток = 0;
СписокСкладов.ВыбратьЗначения();
Пока СписокСкладов.ВыбратьЗначение(ТекСклад) = 1 Цикл
СуммарныйОстаток = СуммарныйОстаток + Рег.СводныйОстаток(ТекСклад, Номенклатура, , , "Количество");
КонецЦикла;
После того как продажи совершены, в 1С загружается отчет. Главная проблема здесь — с какого склада списать проданный товар? Мы можем применить алгоритм FIFO для складов или задать приоритетность складов. Рассмотрим логику обработки продаж:
ПеремещениеТМЦ со «Склада 1» на «Виртуальный склад» текущей датой.ОтчетОРозничныхПродажах.Преимущество: Кассир работает быстро, не отвлекаясь на логистические нюансы. Недостаток: Если на одном из складов возникнет пересортица, «подгонка» перемещений может запутать реальную картину остатков до проведения инвентаризации.
Выясним причину, по которой иногда удобно использовать механизм отделов. Если товары на двух складах практически не пересекаются (например, на Складе 1 — инструменты, на Складе 2 — расходные материалы), можно закрепить каждый склад за конкретным «Отделом» во Frontol.
В настройках оборудования 1С можно прописать соответствие: Секция 1 = Склад 1, Секция 2 = Склад 2. При загрузке товаров в кассу в поле «Номер отдела» передается соответствующий индекс. Когда касса возвращает отчет, 1С анализирует номер секции в каждой строке и автоматически распределяет продажи по разным документам или разным складам внутри одного документа (если конфигурация позволяет мультискладские документы).
Рассмотрим ситуацию, когда покупатель сначала обходит склады, менеджеры выписывают ему «мягкие чеки» или накладные, а оплата происходит в одной центральной кассе. В этом случае Frontol может работать в режиме оплаты счетов.
В 1С 7.7 менеджер создает документ ЗаявкаПокупателя, где указывает конкретный склад отгрузки для каждой позиции. Эта заявка выгружается в кассу. Кассиру достаточно найти заявку по номеру или штрихкоду, принять деньги и пробить фискальный чек. При загрузке данных в 1С на основании оплаченной заявки создается РеализацияТМЦ, которая списывает товар именно с тех складов, которые указал менеджер.
Поскольку мы работаем с 1С 7.7, важно помнить о производительности. При формировании файла goods.txt для Frontol избегайте циклов внутри циклов. Лучше один раз выгрузить все остатки во временную таблицу (индексированную таблицу) и уже из нее формировать данные для кассы.
Также обратите внимание на настройку обмена в обработке atol.ert. Найдите функцию, отвечающую за загрузку отчета (обычно это ЗагрузитьОтчет()), и убедитесь, что она корректно обрабатывает ситуацию, когда товара на складе меньше, чем в отчете. Для этого стоит использовать конструкцию:
Если КонтрольОстатков = 1 Тогда
// Временно отключаем контроль для проведения отчета
// Или автоматически вызываем процедуру перемещения со второго склада
КонецЕсли;
Подведем итог: выбор метода зависит от того, насколько часто ассортимент складов пересекается и готовы ли вы к доработке логики проведения документов в 1С. Если пересечений мало — используйте отделы. Если пересечений много и важна скорость — используйте автоматические перемещения на виртуальный склад. Если важна идеальная точность «здесь и сейчас» — используйте разрезы Frontol.