При работе в программе «1С:Управление торговлей» редакции 11.4 пользователи часто сталкиваются с необходимостью детального анализа движения запасов. Одним из ключевых инструментов для этого является отчет ОстаткиИДоступностьТоваров (Остатки и доступность товаров). Чтобы понять, из чего складываются текущие показатели, используется встроенный механизм расшифровки: при двойном клике на строку с товаром система открывает подчиненный отчет ПоступлениеИОтгрузкаТоваров (Поступление и отгрузка товаров).
Однако в этой связке отчетов существует известная техническая проблема. Если в исходном отчете по остаткам установить глобальный отбор по номенклатуре с видом сравнения «В группе» или «В группе из списка», то при попытке расшифровать строку по конкретному товару открывающийся отчет оказывается абсолютно пустым. При этом пользователь не может вручную скорректировать отбор в открывшемся окне, так как настройки блокируются системой.
В этой статье мы подробно разберем, почему возникает данный конфликт компоновки данных, и рассмотрим эффективные способы его решения — как для обычных пользователей (без изменения конфигурации), так и для разработчиков 1С.
Для того чтобы понять причину сбоя, проанализируем поведение системы компоновки данных (СКД) в момент выполнения расшифровки. Процесс обмена настройками между основным и подчиненным отчетами выглядит следующим образом:
Номенклатура), и пытается принудительно установить отбор по этой позиции в новом отчете.Номенклатура В группе "Обувь", то при расшифровке конкретного товара (например, "Кроссовки мужские") система подставляет эту ссылку в существующее правило отбора. В итоге вид сравнения остается прежним, и отчет пытается выполнить запрос с условием: Номенклатура В группе "Кроссовки мужские".Поскольку конкретный товар является элементом справочника (то есть «листом» иерархии), а не папкой (группой), внутри него не может быть никаких других элементов. Запрос к базе данных возвращает нулевой результат, и отчет-расшифровка открывается пустым.
Если вам нужно получить работающую расшифровку прямо сейчас, не прибегая к услугам программистов, мы можем использовать обходной путь через изменение структуры отчета. Выясним, как настроить отбор так, чтобы СКД не передавала его в глобальные настройки расшифровки.
Для этого выполним следующие шаги:
Номенклатура или Номенклатура.Характеристика).Номенклатура с видом сравнения «В группе» и выберите нужную группу товаров.Почему это помогает? При такой настройке отбор по группе применяется не ко всему отчету в целом, а только к конкретной ветке его структуры. При выполнении расшифровки глобальные пользовательские настройки остаются «чистыми», конфликт видов сравнения не возникает, и отчет ПоступлениеИОтгрузкаТоваров открывается с корректными данными по выбранной позиции.
Обратите внимание: Данный способ требует базовых навыков работы с настройками отчетов СКД. Если отчет будут формировать рядовые менеджеры, этот вариант может показаться им слишком сложным для регулярного использования.
Еще один простой пользовательский способ избежать системной ошибки — отказаться от использования вида сравнения «В группе» в шапке отчета. Вместо этого можно использовать следующие альтернативы:
Если ваша задача — сделать так, чтобы у конечных пользователей все работало «из коробки» по одной кнопке, проблему необходимо решить программно. Лучше всего сделать это с помощью механизма расширений конфигурации, чтобы не снимать типовую конфигурацию с поддержки.
Нам потребуется перехватить процедуру расшифровки и скорректировать передаваемые настройки компоновки данных. Проанализируем, где именно происходит вызов. Как правило, в типовых конфигурациях УТ 11 обработка расшифровки инкапсулирована в общих модулях отчетов или в модуле менеджера конкретного отчета.
Рассмотрим пример программного решения. Нам нужно написать обработчик, который перед формированием расшифровки найдет элемент пользовательских настроек по полю Номенклатура. Если у этого элемента установлен вид сравнения В группе или В группе из списка, мы должны программно отключить этот отбор (установить Использование = Ложь), так как при детальном анализе конкретного товара групповой фильтр родительского отчета больше не имеет практического смысла.
Пример реализации процедуры в расширении для общего модуля (например, в обработчике расшифровки на сервере):
&ВЗаказ
Процедура Расш_ПередЗаполнениемНастроекРасшифровки(ПараметрыРасшифровки, ДанныеРасшифровки, НастройкиПриемника) Экспорт
// Получаем коллекцию элементов отбора из настроек отчета-приемника
ГруппаОтбора = НастройкиПриемника.Отбор;
Для Каждого ЭлементОтбора Из ГруппаОтбора.Элементы Цикл
// Проверяем, что это отбор по полю Номенклатура
Если ТипЗв(ЭлементОтбора) = Тип("ЭлементОтбораКомпоновкиДанных")
И ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Номенклатура") Тогда
// Если вид сравнения подразумевает иерархию, отключаем его во избежание пустого отчета
Если ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.ВИерархии
Или ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСпискеИерархии Тогда
ЭлементОтбора.Использование = Ложь;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Этот код безопасно деактивирует конфликтующий иерархический отбор в открываемом отчете. При этом все остальные важные отборы (например, по складу или менеджеру) продолжат действовать в отчете-расшифровке без изменений.
При планировании доработок отчетов в УТ 11.4 крайне важно учитывать долгосрочные планы развития информационной системы предприятия. Если ваша компания в обозримом будущем планирует переход на новые редакции программных продуктов фирмы «1С» (такие как УТ 11.5 или ERP 2.5), обратите внимание на следующий важный архитектурный факт:
Начиная с версий УТ 11.5.7 / ERP 2.5.7, разработчики фирмы «1С» полностью переработали архитектуру учета запасов и партионного учета. В связи с этим отчет ПоступлениеИОтгрузкаТоваров был полностью удален из состава конфигураций вместе со всеми механизмами его вызова и расшифровки.
В новых версиях программ для анализа резервов, доступности и графиков движения товаров используются совершенно другие, более современные механизмы (например, обновленный отчет «Ведомость по товарам с резервами» и интерактивные рабочие места распределения запасов).
Поэтому, если вы стоите перед выбором — тратить бюджет на разработку сложной системы обхода ошибок для УТ 11.4 или временно воспользоваться простым пользовательским решением (переносом отбора в структуру), мы рекомендуем выбрать второй вариант. Это сэкономит ресурсы при последующем обновлении базы данных на актуальные релизы.