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