Как избежать пустого отчета при расшифровке остатков и доступности товаров в УТ 11.4?

Пользователь 1С v8.3 (Управляемые формы) 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

При работе в программе «1С:Управление торговлей» редакции 11.4 пользователи часто сталкиваются с необходимостью детального анализа движения запасов. Одним из ключевых инструментов для этого является отчет ОстаткиИДоступностьТоваров (Остатки и доступность товаров). Чтобы понять, из чего складываются текущие показатели, используется встроенный механизм расшифровки: при двойном клике на строку с товаром система открывает подчиненный отчет ПоступлениеИОтгрузкаТоваров (Поступление и отгрузка товаров).

Однако в этой связке отчетов существует известная техническая проблема. Если в исходном отчете по остаткам установить глобальный отбор по номенклатуре с видом сравнения «В группе» или «В группе из списка», то при попытке расшифровать строку по конкретному товару открывающийся отчет оказывается абсолютно пустым. При этом пользователь не может вручную скорректировать отбор в открывшемся окне, так как настройки блокируются системой.

В этой статье мы подробно разберем, почему возникает данный конфликт компоновки данных, и рассмотрим эффективные способы его решения — как для обычных пользователей (без изменения конфигурации), так и для разработчиков 1С.


Почему возникает эта проблема: техническая суть конфликта СКД

Для того чтобы понять причину сбоя, проанализируем поведение системы компоновки данных (СКД) в момент выполнения расшифровки. Процесс обмена настройками между основным и подчиненным отчетами выглядит следующим образом:

  1. Перенос настроек пользователя: При активации расшифровки (двойном клике по ячейке с номенклатурой) 1С считывает текущие настройки компоновки родительского отчета и пытается передать их в открываемый отчет-расшифровку. Это необходимо для того, чтобы сохранить контекст анализа (например, отборы по складу, организации или периоду).
  2. Передача значения расшифровки: Одновременно с этим система определяет конкретное значение ячейки, по которой был сделан клик (ссылку на элемент справочника Номенклатура), и пытается принудительно установить отбор по этой позиции в новом отчете.
  3. Конфликт видов сравнения: СКД пытается объединить перенесенный глобальный отбор и новое точечное значение. Если в родительском отчете был установлен отбор Номенклатура В группе "Обувь", то при расшифровке конкретного товара (например, "Кроссовки мужские") система подставляет эту ссылку в существующее правило отбора. В итоге вид сравнения остается прежним, и отчет пытается выполнить запрос с условием: Номенклатура В группе "Кроссовки мужские".

Поскольку конкретный товар является элементом справочника (то есть «листом» иерархии), а не папкой (группой), внутри него не может быть никаких других элементов. Запрос к базе данных возвращает нулевой результат, и отчет-расшифровка открывается пустым.


Способ 1. Обходной путь для пользователей (без доработки программы)

Если вам нужно получить работающую расшифровку прямо сейчас, не прибегая к услугам программистов, мы можем использовать обходной путь через изменение структуры отчета. Выясним, как настроить отбор так, чтобы СКД не передавала его в глобальные настройки расшифровки.

Для этого выполним следующие шаги:

  1. Откройте отчет «Остатки и доступность товаров».
  2. Нажмите кнопку «Настройки...» на панели отчета.
  3. В открывшемся окне переключите вид настроек в режим «Расширенный» (кнопка внизу окна).
  4. Перейдите на вкладку «Структура».
  5. Найдите в дереве группировок строку, отвечающую за вывод номенклатуры (обычно это группировка Номенклатура или Номенклатура.Характеристика).
  6. Выделите эту строку и нажмите кнопку «Настройки группировки» (или дважды кликните по ней), затем перейдите на вкладку «Отбор» внутри этой конкретной группировки.
  7. Добавьте сюда условие: поле Номенклатура с видом сравнения «В группе» и выберите нужную группу товаров.
  8. Закройте настройки и сформируйте отчет.

Почему это помогает? При такой настройке отбор по группе применяется не ко всему отчету в целом, а только к конкретной ветке его структуры. При выполнении расшифровки глобальные пользовательские настройки остаются «чистыми», конфликт видов сравнения не возникает, и отчет ПоступлениеИОтгрузкаТоваров открывается с корректными данными по выбранной позиции.

Обратите внимание: Данный способ требует базовых навыков работы с настройками отчетов СКД. Если отчет будут формировать рядовые менеджеры, этот вариант может показаться им слишком сложным для регулярного использования.


Способ 2. Использование альтернативных видов сравнения

Еще один простой пользовательский способ избежать системной ошибки — отказаться от использования вида сравнения «В группе» в шапке отчета. Вместо этого можно использовать следующие альтернативы:


Способ 3. Решение для разработчиков (исправление через расширение конфигурации)

Если ваша задача — сделать так, чтобы у конечных пользователей все работало «из коробки» по одной кнопке, проблему необходимо решить программно. Лучше всего сделать это с помощью механизма расширений конфигурации, чтобы не снимать типовую конфигурацию с поддержки.

Нам потребуется перехватить процедуру расшифровки и скорректировать передаваемые настройки компоновки данных. Проанализируем, где именно происходит вызов. Как правило, в типовых конфигурациях УТ 11 обработка расшифровки инкапсулирована в общих модулях отчетов или в модуле менеджера конкретного отчета.

Рассмотрим пример программного решения. Нам нужно написать обработчик, который перед формированием расшифровки найдет элемент пользовательских настроек по полю Номенклатура. Если у этого элемента установлен вид сравнения В группе или В группе из списка, мы должны программно отключить этот отбор (установить Использование = Ложь), так как при детальном анализе конкретного товара групповой фильтр родительского отчета больше не имеет практического смысла.

Пример реализации процедуры в расширении для общего модуля (например, в обработчике расшифровки на сервере):


&ВЗаказ
Процедура Расш_ПередЗаполнениемНастроекРасшифровки(ПараметрыРасшифровки, ДанныеРасшифровки, НастройкиПриемника) Экспорт
    
    // Получаем коллекцию элементов отбора из настроек отчета-приемника
    ГруппаОтбора = НастройкиПриемника.Отбор;
    
    Для Каждого ЭлементОтбора Из ГруппаОтбора.Элементы Цикл
        
        // Проверяем, что это отбор по полю Номенклатура
        Если ТипЗв(ЭлементОтбора) = Тип("ЭлементОтбораКомпоновкиДанных") 
            И ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Номенклатура") Тогда
            
            // Если вид сравнения подразумевает иерархию, отключаем его во избежание пустого отчета
            Если ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.ВИерархии 
                Или ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСпискеИерархии Тогда
                
                ЭлементОтбора.Использование = Ложь;
                
            КонецЕсли;
            
        КонецЕсли;
        
    КонецЦикла;

КонецПроцедуры

Этот код безопасно деактивирует конфликтующий иерархический отбор в открываемом отчете. При этом все остальные важные отборы (например, по складу или менеджеру) продолжат действовать в отчете-расшифровке без изменений.


Перспективы обновлений: важный нюанс переходов на УТ 11.5 и ERP 2.5

При планировании доработок отчетов в УТ 11.4 крайне важно учитывать долгосрочные планы развития информационной системы предприятия. Если ваша компания в обозримом будущем планирует переход на новые редакции программных продуктов фирмы «1С» (такие как УТ 11.5 или ERP 2.5), обратите внимание на следующий важный архитектурный факт:

Начиная с версий УТ 11.5.7 / ERP 2.5.7, разработчики фирмы «1С» полностью переработали архитектуру учета запасов и партионного учета. В связи с этим отчет ПоступлениеИОтгрузкаТоваров был полностью удален из состава конфигураций вместе со всеми механизмами его вызова и расшифровки.

В новых версиях программ для анализа резервов, доступности и графиков движения товаров используются совершенно другие, более современные механизмы (например, обновленный отчет «Ведомость по товарам с резервами» и интерактивные рабочие места распределения запасов).

Поэтому, если вы стоите перед выбором — тратить бюджет на разработку сложной системы обхода ошибок для УТ 11.4 или временно воспользоваться простым пользовательским решением (переносом отбора в структуру), мы рекомендуем выбрать второй вариант. Это сэкономит ресурсы при последующем обновлении базы данных на актуальные релизы.

← На главную