После обновления конфигурации 1С:Комплексная автоматизация до версии 2.5, многие пользователи сталкиваются с проблемой расхождения данных в отчетах по остаткам товаров. В частности, отчет «Остатки и доступность товаров» может показывать наличие позиций, тогда как «Ведомость товаров на складах» свидетельствует об их полном отсутствии. Эта ситуация приводит к некорректному планированию закупок и продаж, а также создает путаницу в управленческом учете. Давайте вместе разберемся в причинах этой проблемы и найдем эффективные способы ее устранения.
В версиях 1С:УТ 11.5 и 1С:КА 2.5 был введен новый механизм распределения запасов, призванный ускорить расчет доступных остатков товаров и повысить оперативность информации. Этот механизм работает на основе двух ключевых регистров:
Если учет ведется корректно, оба отчета должны показывать согласованные данные, учитывая, что «Остатки и доступность товаров» детализирует, как именно распределены эти остатки (зарезервировано, отгружается, свободно). Однако, когда движения в регистре «Распределение запасов движения» формируются не полностью или некорректно, возникает перекос, и отчеты начинают расходиться. Например, документ реализации списывает товар по «Ведомости товаров на складах», но не делает соответствующего движения по регистру «Распределение запасов движения», оставляя товар «висящим» в наличии по отчету «Остатки и доступность товаров».
Мы выясним, почему возникают эти расхождения, проанализировав наиболее частые сценарии и используя отчет для сравнения регистров «Товары на складах» и «Товары организаций» для выявления первоисточников проблем:
Одна из наиболее распространенных причин заключается в том, что при обновлении конфигурации с предыдущих версий (например, с КА 2.4 на 2.5) система не всегда корректно перепроводит и обрабатывает исторические данные (особенно актуально решение для выравнивания остатков после обновления). Документы прошлых периодов (например, реализации 2019 года), созданные по старой методике учета, могут не сформировать необходимые движения в новых регистрах «Распределение запасов движения», что приводит к первоначальному расхождению. Попытка перепроведения таких документов вручную может не привести к желаемому результату, поскольку логика формирования движений могла быть изменена или не сработать для документов, созданных по иным правилам. В таких случаях может потребоваться принудительное заполнение регистра распределения запасов.
Если вы используете рабочее место кассира (РМК), то стоит обратить внимание на чеки ККМ. Проблемы могут возникнуть из-за:
Механизм резервирования товаров по заказам клиентов может стать источником расхождений. Если товар был зарезервирован по заказу, то в регистре «Распределение запасов» он попадает в категорию «В резерве». Однако, при последующей реализации этого товара на основании того же заказа, механизм может работать некорректно:
Документ «Заказ клиента» создает движения по расходу в регистре «Распределение запасов движение», указывая количество к отгрузке и занимая товар. Затем, документ «Реализация товаров и услуг», созданный на основании этого заказа, может не сторнировать или корректно не обрабатывать уже зарезервированное количество, а просто списывать его повторно. Это приводит к двойному списанию или некорректному обновлению состояния резерва, что в итоге отражается в неверных данных регистра «Распределение запасов». Для предотвращения таких ситуаций удобно видеть остатки товаров непосредственно в документах заказа и реализации.
Для диагностики этой проблемы мы можем использовать следующий запрос:
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| РаспределениеЗапасовДвижения.Регистратор КАК Регистратор,
| РаспределениеЗапасовДвижения.Номенклатура КАК Номенклатура,
| РаспределениеЗапасовДвижения.Характеристика КАК Характеристика,
| РаспределениеЗапасовДвижения.Склад КАК Склад,
| СУММА(РаспределениеЗапасовДвижения.Отгрузить) КАК Отгрузить,
| РаспределениеЗапасовДвижения.ЗаказНаОтгрузку КАК ЗаказНаОтгрузку
|ИЗ
| РегистрНакопления.РаспределениеЗапасовДвижения КАК РаспределениеЗапасовДвижения
|ГДЕ
| РаспределениеЗапасовДвижения.Регистратор ССЫЛКА Документ.ЗаказКлиента
|СГРУППИРОВАТЬ ПО
| РаспределениеЗапасовДвижения.Регистратор,
| РаспределениеЗапасовДвижения.Номенклатура,
| РаспределениеЗапасовДвижения.Характеристика,
| РаспределениеЗапасовДвижения.Склад,
| РаспределениеЗапасовДвижения.ЗаказНаОтгрузку
|УПОРЯДОЧИТЬ ПО
| РаспределениеЗапасовДвижения.Регистратор.Дата";
Этот запрос поможет нам выявить движения, сформированные документами «Заказ клиента» по регистру «Распределение запасов движения» и проанализировать, как они впоследствии обрабатывались документами реализации.
Проблема часто усугубляется при использовании ордерной схемы документооборота на складе. Если документ «Расходный ордер на товары» не делает движений по регистру «Распределение запасов движения», то фактическая отгрузка со склада не отражается в механизме распределения запасов. Задуманная логика предполагает, что движения по распределению запасов должен делать документ-распоряжение (например, «Реализация товаров и услуг»), а расходный ордер лишь фиксирует факт отгрузки. Мы можем проверить модуль менеджера документа РасходныйОрдерНаТовары на наличие процедуры ОтразитьРаспределениеЗапасовДвижения. Если ее нет, это может быть причиной расхождений при использовании ордерной схемы.
Мы должны учитывать, что старые, незакрытые остатки по регистрам накопления, которые ранее использовались для учета товаров к отгрузке, могут вызывать появление отрицательных значений в отчете «Остатки и доступность товаров». Например, если в регистре накопления «Товары к отгрузке» остались «подвисшие» данные, они могут влиять на расчет доступности, даже если эти регистры уже не являются основными для нового механизма. Рекомендуется провести анализ и очистку таких «подвисших» остатков.
Ручное или программное создание документов «Корректировка регистров» для исправления остатков (упростить процедуру поможет обработка автоматического заполнения корректировки регистров) часто является источником проблем. Такие документы могут не учитываться механизмом распределения запасов, что приводит к нарушению целостности данных между оперативным учетом и новым механизмом доступности. Это означает, что хотя в одном регистре данные могут быть исправлены, в регистре «Распределение запасов» они останутся некорректными, поскольку механизм его заполнения не был запущен для такой корректировки.
Регистр «Распределение запасов», на котором строится отчет «Остатки и доступность», обновляется регламентным заданием «Расчет и установка распределения запасов». Если это задание выполняется с ошибками, с большой задержкой или не выполняется вовсе, данные в отчете будут неактуальными. Мы должны регулярно проверять статус и результаты выполнения этого фонового задания, чтобы убедиться в его корректной работе.
Рассмотрим, какие шаги мы можем предпринять для устранения расхождений — решить эту задачу поможет обработка автоматического исправления ошибок учета в КА и УТ.
В конфигурации 1С:КА 2.5 предусмотрена стандартная обработка для исправления ошибок в регистре сведений «Распределение запасов». Мы можем найти ее через меню «Все функции» или через поиск. Эта обработка предназначена для повторного анализа первичных документов и формирования корректных движений по регистру «Распределение запасов». Однако, у этой обработки есть свои ограничения:
Мы должны выяснить, какие конкретно документы не сформировали движения по регистру «Распределение запасов движения». Для этого мы можем использовать универсальный отчет по этому регистру или написать свой запрос. Особое внимание следует уделить документам прошлых периодов или тем, которые были созданы программно. После выявления таких документов, мы можем попытаться их перепровести. В некоторых случаях может потребоваться небольшая корректировка документа (например, перевыбор склада или контрагента) перед перепроведением, чтобы вызвать срабатывание нужной логики формирования движений.
В случаях, когда типовые методы не помогают, или если нужно оперативно привести данные в порядок, мы можем прибегнуть к прямому заполнению регистра сведений «Распределение запасов» на основе данных «Ведомости товаров на складах». Это не является системным решением корневой проблемы, но может дать быстрый результат для соответствия отчетов. Мы можем использовать следующую обработку или фрагмент кода:
// Очищаем текущие записи по состоянию "ОстатокНаСкладе", чтобы не дублировать
нз = РегистрыСведений.РаспределениеЗапасов.СоздатьНаборЗаписей();
нз.Отбор.Состояние.Установить(Перечисления.РаспределениеЗапасовСостояния.ОстатокНаСкладе);
нз.Записать(); // Удаляем все записи с состоянием "ОстатокНаСкладе"
// Формируем запрос для получения текущих остатков по Ведомости товаров на складах
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура,
| ТоварыНаСкладахОстатки.Характеристика КАК Характеристика,
| ТоварыНаСкладахОстатки.Назначение КАК Назначение,
| ТоварыНаСкладахОстатки.Склад КАК Склад,
| СУММА(ТоварыНаСкладахОстатки.ВНаличииОстаток) КАК ВНаличии,
| СУММА(ТоварыНаСкладахОстатки.КОтгрузкеОстаток) КАК КОтгрузке
|ИЗ
| РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки
|
|СГРУППИРОВАТЬ ПО
| ТоварыНаСкладахОстатки.Номенклатура,
| ТоварыНаСкладахОстатки.Характеристика,
| ТоварыНаСкладахОстатки.Назначение,
| ТоварыНаСкладахОстатки.Склад";
Выборка = Запрос.Выполнить().Выбрать();
// Заполняем регистр сведений "Распределение запасов"
Пока Выборка.Следующий() Цикл
МЗ = РегистрыСведений.РаспределениеЗапасов.СоздатьМенеджерЗаписи();
МЗ.Состояние = Перечисления.РаспределениеЗапасовСостояния.ОстатокНаСкладе;
МЗ.Номенклатура = Выборка.Номенклатура;
МЗ.Характеристика = Выборка.Характеристика;
МЗ.Назначение = Выборка.Назначение;
МЗ.Склад = Выборка.Склад;
МЗ.Запас = Выборка.ВНаличии; // Общий запас
МЗ.Свободно = Выборка.ВНаличии; // Изначально считаем весь запас свободным
МЗ.ВНаличии = Выборка.ВНаличии; // Количество в наличии
МЗ.ТипЗаписиРаспределенияЗапасов = 1; // Тип записи для остатка на складе
МЗ.Записать();
КонецЦикла;
Важное примечание: Этот код устанавливает значения «Свободно» и «ВНаличии» равными общему количеству по «Ведомости». Если у вас есть резервы или товары к отгрузке, которые должны быть учтены, логику заполнения полей Свободно, ВРезерве, КОтгрузке необходимо будет скорректировать соответствующим образом. Мы рекомендуем использовать этот метод с осторожностью и только после анализа корневых причин расхождений, так как это может скрыть проблему, а не решить ее.
Проблема расхождений в остатках была известна разработчикам 1С, и в последующих релизах конфигураций вносились исправления, улучшающие стабильность работы механизма распределения запасов. Поэтому одним из важных шагов является установка последнего актуального обновления программы. Возможно, в вашей версии проблема уже частично решена.
Мы должны убедиться, что даты запрета редактирования не мешают системе корректно пересчитать и исправить данные прошлых периодов. Если такие даты установлены, они могут препятствовать перепроведению старых документов или работе типовых обработок по исправлению данных.
Чтобы избежать путаницы между ожидаемым поведением отчета и фактическими ошибками, мы должны четко понимать, что означают различные показатели в отчете «Остатки и доступность товаров»:
Таким образом, мы должны четко различать ситуации, когда расхождения в цифрах являются следствием некорректной работы механизма (ошибки) и когда они обусловлены логикой распределения запасов (ожидаемое поведение).
Проблема расхождения отчетов по остаткам в 1С:КА 2.5 требует комплексного подхода. Мы с вами рассмотрели основные причины возникновения таких расхождений, связанные как с процессом обновления, так и с особенностями работы нового механизма распределения запасов. Мы выяснили, что для эффективного решения необходимо не только использовать типовые средства исправления, но и глубоко анализировать движения документов, проверять настройки ордерных схем и регламентных заданий, а также понимать логику работы показателей отчета «Остатки и доступность товаров». Применение предложенных методов поможет вам наладить корректный учет и обеспечить точность данных в системе.