При работе с аптечными и розничными конфигурациями на базе 1С 7.7 (например, еФарма или решения на базе «Кассир Штрих-М») технические специалисты часто сталкиваются с ситуацией, когда после загрузки продаж из кассы по отдельным партиям номенклатуры образуются отрицательные остатки. При этом суммарное количество товара на складе может оставаться положительным, однако партионный учет оказывается нарушенным.
Рассмотрим подробно причину возникновения такой путаницы в партиях, технические нюансы работы документов обмена и способы устранения этой проблемы в коде и регламентах работы.
Проанализируем типовую ситуацию в розничной точке. В аптечном учете при поступлении каждой новой партии товара или серии лекарственного средства формируется элемент справочника партий и ему присваивается конкретный штрихкод. На одном складе может находиться несколько партий одного и того же наименования товара с разными ценами поступления и сроками годности.
Сбой происходит по следующей схеме:
Загрузка продаж из касс читает файл обмена и формирует документ Чек.При проведении документа Чек происходят движения по регистру Партии. Поскольку штрихкод привязан к конкретной партии, на которой числился остаток всего в 1 штуку, документ «молча» списывает 20 штук с этой партии. В результате на партии образуется остаток -19 штук, хотя остаток по другим партиям этого товара остался нетронутым.
Выясним, как устроена схема взаимодействия между основной базой учетной системы и фронт-офисом на кассовом терминале:
Синхронизация происходит в offline-режиме с помощью текстовых файлов обмена:
Чек, Z-отчет и Закрытие смены.Основное движение по регистру Партии осуществляет документ Чек. Если в алгоритме проведения документа не заложена проверка текущего остатка партии, платформа проводит документ без сбоев, но создает некорректный отрицательный остаток в регистре.
Для полного устранения путаницы в партиях разберем по шагам доступные технические и организационные варианты решения.
Наиболее надежный способ — изменить модуль проведения документа Чек в конфигураторе. Программисту необходимо реализовать алгоритм автоматического перераспределения списываемого количества по методу FIFO, если на затребованной партии не хватает остатка.
Рассмотрим пример логики проверки и списания остатка в модуле проведения документа:
// Пример алгоритма списывания партий с автоподбором
ОстатокПоПартии = Регистр.Партии.СМОТРЕТЬОСТАТОК(Номенклатура, ВыбраннаяПартия);
Если ОстатокПоПартии >= КоличествоКCписанию Тогда
// Остатка хватает на выбранной партии
Регистр.Партии.Номенклатура = Номенклатура;
Регистр.Партии.Партия = ВыбраннаяПартия;
Регистр.Партии.Количество = КоличествоКCписанию;
Регистр.Партии.ДвижениеРасходВыполнить();
Иначе
// Списываем доступный остаток с текущей партии
Недостаток = КоличествоКCписанию - ОстатокПоПартии;
Если ОстатокПоПартии > 0 Тогда
Регистр.Партии.Номенклатура = Номенклатура;
Регистр.Партии.Партия = ВыбраннаяПартия;
Регистр.Партии.Количество = ОстатокПоПартии;
Регистр.Партии.ДвижениеРасходВыполнить();
КонецЕсли;
// Подбираем оставшееся количество с других партий номенклатуры (FIFO)
ЗапросПартии = СоздатьОбъект("Запрос");
// Выполняем подбор остальных партий с положительным остатком
// и списываем Недостаток по найденным партиям
КонецЕсли;
При использовании такой схемы списание партий происходит корректно: сначала списывается партия, переданная с кассы, а недостающее количество равномерно распределяется по другим доступным партиям номенклатуры.
Если вносить изменения в конфигурацию нельзя или ограничены сроки, необходимо изменить регламент работы кассиров:
Проанализируем еще одну причину «плавающих» остатков. В файловом режиме 1С 7.7 (базы формата DBF) при частой загрузке данных могут повреждаться индексные файлы (файлы с расширением .cdx). Это приводит к тому, что отчеты показывают временный минус, который «исчезает» или меняется при перепроведении документов.
Для поддержания порядка в остатках рекомендуем выполнить следующие действия: