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