Каждый специалист по сопровождению систем на платформе 1С рано или поздно сталкивается с ситуацией, когда отчет по партионному учету начинает выводить «странные» числа. Например, по конкретной номенклатуре отображается остаток в несколько тысяч единиц, привязанный к старому документу оприходования, хотя в самом документе указано совершенно другое количество. Ещё более удивительным кажется поведение системы, когда при распроведении этого приходного документа строка в отчете не исчезает, а продолжает отображать те же остатки, но уже без указания документа-источника.
В этой статье мы подробно разберем, почему возникает подобная проблема в конфигурации «Управление торговлей 10.3», проанализируем механизмы работы партионного учета и предоставим пошаговое руководство по диагностике и исправлению таких ошибок.
Рассмотрим структуру запроса, который используется в проблемном отчете СКД. Он обращается к виртуальной таблице остатков регистра накопления ПартииТоваровНаСкладах:
ВЫБРАТЬ
ПартииТоваровНаСкладахОстатки.Номенклатура КАК Film,
ПартииТоваровНаСкладахОстатки.Склад КАК Storage,
ПартииТоваровНаСкладахОстатки.ДокументОприходования.Дата КАК InStockSince,
ПартииТоваровНаСкладахОстатки.ДокументОприходования,
ПартииТоваровНаСкладахОстатки.Заказ.Контрагент.CustomerCode.ПолнНаимен КАК Customer,
РАЗНОСТЬДАТ(ПартииТоваровНаСкладахОстатки.ДокументОприходования.Дата, &Дата, ДЕНЬ) КАК DaysInStock,
ПартииТоваровНаСкладахОстатки.КоличествоОстаток КАК Quantity,
ПартииТоваровНаСкладахОстатки.СтоимостьОстаток КАК Amount_RR,
ПартииТоваровНаСкладахОстатки.Номенклатура.Наименование КАК НоменклатураНаименование,
ПартииТоваровНаСкладахОстатки.ДокументОприходования.Комментарий КАК Comment
ИЗ
РегистрНакопления.ПартииТоваровНаСкладах.Остатки(&Дата, ) КАК ПартииТоваровНаСкладахОстатки
ГДЕ
ПартииТоваровНаСкладахОстатки.КоличествоОстаток > 0
УПОРЯДОЧИТЬ ПО
НоменклатураНаименование
Этот запрос выбирает остатки товаров в разрезе номенклатуры, складов и документов оприходования (партий). Если отчет показывает некорректные данные, которые совпадают с показателями стандартного отчета «Ведомость по партиям товаров на складах», но расходятся с физическим документом поступления, это означает, что проблема кроется не в коде отчета, а в самих данных регистра накопления.
Давайте разберем по шагам, как выявить и устранить первопричину этой аномалии.
Распространенная ошибка начинающих разработчиков и аналитиков — проверять движения только самого документа оприходования. Если открыть движения этого документа по регистру ПартииТоваровНаСкладах, там действительно будут указаны верные цифры. Откуда же берутся лишние тысячи единиц?
В партионном учете 1С измерение ДокументОприходования является обычным разрезом аналитики (измерением регистра). Это означает, что любой другой документ в системе может сделать запись в этот регистр, указав в качестве партии наш документ оприходования. Это могут быть:
Чтобы увидеть реальную картину, нам нужно проанализировать не движения документа-источника, а все записи в физической таблице регистра по данной номенклатуре и данной партии. Для этого воспользуемся консолью запросов и выполним следующий запрос:
ВЫБРАТЬ
ПартииРегистр.Период КАК Период,
ПартииРегистр.Регистратор КАК Регистратор,
ПартииРегистр.ВидДвижения КАК ВидДвижения,
ПартииРегистр.Количество КАК Количество,
ПартииРегистр.Стоимость КАК Стоимость,
ПартииРегистр.Склад КАК Склад
ИЗ
РегистрНакопления.ПартииТоваровНаСкладах КАК ПартииРегистр
ГДЕ
ПартииРегистр.Номенклатура = &ПроблемнаяНоменклатура
И ПартииРегистр.ДокументОприходования = &ДокументОприходования
УПОРЯДОЧИТЬ ПО
Период
Этот запрос выведет полную хронологическую цепочку событий. Почти наверняка в списке регистраторов обнаружится документ (например, возврат или перемещение), который ошибочно зафиксировал приход крупной партии со ссылкой на наш документ поступления.
Почему при распроведении прихода строка с остатком в 6000 единиц не исчезает из отчета, а лишь теряет ссылку на документ оприходования? Этому есть три логических объяснения:
Товары на складах, а партионный — в Партии товаров на складах. Если ведомость по остаткам товаров (первый регистр) показывает правильное количество, а ведомость по партиям (второй регистр) — неверное, значит, нарушена последовательность проведения документов.Поскольку база данных файловая, причиной искажения итогов в виртуальных таблицах часто становится нарушение физической целостности индексов или таблиц базы данных (файл .1CD). Штатное «Тестирование и исправление» (ТиИ) из конфигуратора не всегда справляется с этой проблемой, если повреждена структура файла.
Выполним процедуру физического восстановления по шагам:
C:\Program Files\1cv8\<номер_версии>\bin\).1Cv8.1CD.В «1С:Управление торговлей 10.3» очень часто используется настройка отложенного проведения по партиям. Если флаг «Списывать партии при проведении документов» в настройках параметров учета снят, то при проведении реализации количество списывается только по регистру Товары на складах. Регистр партий при этом не изменяется до запуска регламентной процедуры.
Если документы проводились или корректировались «задним числом», граница последовательности партионного учета сдвигается назад, что приводит к некорректному отображению остатков в отчетах. Для исправления ситуации выполним следующие действия:
После выполнения пересчета итогов, физического исправления базы данных и восстановления партионной последовательности виртуальные таблицы регистра ПартииТоваровНаСкладах обновятся. Проверьте ваш внешний отчет — данные придут в соответствие с фактическими первичными документами.