в скд можно задать несколько источников данных для каких целей это используется

Отчетность в 1С: Система Компоновки Данных (СКД), идея и архитектура

Одна из самых важных областей бизнес-софта – это отчетность. От того, насколько легко настроить под меняющиеся потребности бизнеса (и законодательства) существующий отчет или сделать новый, может зависеть (причем не в переносном смысле!) судьба бизнеса, будь то отчет для налоговой инспекции или диаграмма зависимости спроса на товары от сезона и других факторов. Мощная и гибкая система отчетности, позволяющая легко извлечь из системы нужные данные, представить их в доступном для понимания виде, позволяющая конечному пользователю перенастроить стандартный отчет так, чтобы увидеть данные в новом свете – это идеал, к которому должна стремиться каждая бизнес-система.

В платформе «1С:Предприятие» за построение отчётов отвечает механизм под названием «Система компоновки данных» (сокращенно СКД). В этой статье мы постараемся дать краткое описание идеи и архитектуры механизма СКД и его возможностей.

в скд можно задать несколько источников данных для каких целей это используется. Смотреть фото в скд можно задать несколько источников данных для каких целей это используется. Смотреть картинку в скд можно задать несколько источников данных для каких целей это используется. Картинка про в скд можно задать несколько источников данных для каких целей это используется. Фото в скд можно задать несколько источников данных для каких целей это используется

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

Немного истории

В самой первой версии платформы «1С:Предприятие 8», версии 8.0, отчеты делались так:

Одной из идей, легших в основу СКД, была гибкость и настраиваемость отчетов, причем доступная как разработчику, так и конечному пользователю. В идеале хотелось бы дать доступ конечному пользователю к тому же набору инструментов для дизайна отчета, что и разработчику. Логично было бы сделать единый набор инструментов, доступный всем. Ну а раз инструменты предполагают участие конечного пользователя – значит, нужно использование программирования в них убрать до минимума (лучше всего – устранить совсем), и по максимуму использовать визуальные настройки.

Постановка задачи

Задача перед командой разработки стояла такая – сделать систему создания отчетов, основанную не на алгоритмическом (т.е. через написание кода), а на декларативном подходе к созданию отчетов. И мы считаем, что задачу успешно решили. По нашему опыту, около 80% требуемой отчетности может быть реализована с помощью СКД без единой строчки кода (за исключением написания формул вычисляемых полей), по большей части — через визуальные настройки.
Разработка первой версии СКД заняла около 5 человеко-лет.

Два языка

В создании отчетов задействованы два языка. Один – язык запросов, используемый для выборки данных. Второй – язык выражений компоновки данных, предназначен для записи выражений, используемых в различных частях системы, например, в настройках компоновки данных, для описания выражений пользовательских полей.

Язык запросов

Язык запросов основан на SQL и легко осваивается знающими SQL. Пример запроса:
в скд можно задать несколько источников данных для каких целей это используется. Смотреть фото в скд можно задать несколько источников данных для каких целей это используется. Смотреть картинку в скд можно задать несколько источников данных для каких целей это используется. Картинка про в скд можно задать несколько источников данных для каких целей это используется. Фото в скд можно задать несколько источников данных для каких целей это используется

Легко видеть аналоги стандартных для SQL-запроса секций — SELECT, FROM, GROUP BY, ORDER BY.

При этом язык запросов содержит значительное количество расширений, ориентированных на отражение специфики финансово-экономических задач и на максимальное сокращение усилий по разработке прикладных решений:

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

Источник

Система компоновки данных

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

в скд можно задать несколько источников данных для каких целей это используется. Смотреть фото в скд можно задать несколько источников данных для каких целей это используется. Смотреть картинку в скд можно задать несколько источников данных для каких целей это используется. Картинка про в скд можно задать несколько источников данных для каких целей это используется. Фото в скд можно задать несколько источников данных для каких целей это используется

Устройство системы компоновки данных

Основные элементы системы компоновки данных представлены на следующей схеме:

в скд можно задать несколько источников данных для каких целей это используется. Смотреть фото в скд можно задать несколько источников данных для каких целей это используется. Смотреть картинку в скд можно задать несколько источников данных для каких целей это используется. Картинка про в скд можно задать несколько источников данных для каких целей это используется. Фото в скд можно задать несколько источников данных для каких целей это используется

Схема компоновки данных

Настройки компоновки данных

Макет компоновки данных

Макет компоновки данных представляет собой уже готовое описание того, как должен быть сформирован отчет. В нем соединяется схема компоновки и настройки компоновки. Фактически макет компоновки данных представляет собой результат применения конкретных настроек к схеме компоновки и является готовым заданием процессору компоновки на формирование отчета нужной структуры с учетом конкретных настроек.

Элемент результата компоновки данных

Результат компоновки данных представляется набором элементов результата компоновки данных. Как самостоятельная логическая сущность результат компоновки данных не существует, существуют только его элементы. Элементы результата компоновки данных можно вывести в табличный документ для представления их пользователю, или в другие виды документов. Также имеется возможность программного вывода элементов результата компоновки в объекты вида Дерево значений или Таблица значений.

Работа с системой компоновки данных в конфигурации

Система компоновки данных интегрирована в объект конфигурации Отчет. Это позволяет создавать отчеты без программирования.

У объекта конфигурации Отчет реализовано свойство «Основная схема компоновки данных»:

в скд можно задать несколько источников данных для каких целей это используется. Смотреть фото в скд можно задать несколько источников данных для каких целей это используется. Смотреть картинку в скд можно задать несколько источников данных для каких целей это используется. Картинка про в скд можно задать несколько источников данных для каких целей это используется. Фото в скд можно задать несколько источников данных для каких целей это используется

При нажатии кнопки открытия для этого свойства, вызывается конструктор макета, который позволяет создать макет отчета, содержащий схему компоновки данных:

в скд можно задать несколько источников данных для каких целей это используется. Смотреть фото в скд можно задать несколько источников данных для каких целей это используется. Смотреть картинку в скд можно задать несколько источников данных для каких целей это используется. Картинка про в скд можно задать несколько источников данных для каких целей это используется. Фото в скд можно задать несколько источников данных для каких целей это используется

После нажатия кнопки «Готово» будет открыт конструктор схемы компоновки данных.

Конструктор схемы компоновки данных позволяет описать исходные данные, которые будет использовать отчет: наборы данных, связи между наборами данных, вычисляемые поля, ресурсы и т. д.

в скд можно задать несколько источников данных для каких целей это используется. Смотреть фото в скд можно задать несколько источников данных для каких целей это используется. Смотреть картинку в скд можно задать несколько источников данных для каких целей это используется. Картинка про в скд можно задать несколько источников данных для каких целей это используется. Фото в скд можно задать несколько источников данных для каких целей это используется

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

в скд можно задать несколько источников данных для каких целей это используется. Смотреть фото в скд можно задать несколько источников данных для каких целей это используется. Смотреть картинку в скд можно задать несколько источников данных для каких целей это используется. Картинка про в скд можно задать несколько источников данных для каких целей это используется. Фото в скд можно задать несколько источников данных для каких целей это используется

После выполнения этих действий отчет готов. В режиме 1С:Предприятие система автоматически, на основании схемы компоновки данных, содержащейся в отчете, может создать форму отчета и форму настроек отчета.

Таким образом пользователь просто запускает отчет и получает результат в соответствии с теми настройками, которые описал разработчик:

в скд можно задать несколько источников данных для каких целей это используется. Смотреть фото в скд можно задать несколько источников данных для каких целей это используется. Смотреть картинку в скд можно задать несколько источников данных для каких целей это используется. Картинка про в скд можно задать несколько источников данных для каких целей это используется. Фото в скд можно задать несколько источников данных для каких целей это используется

При необходимости пользователь может открыть форму настроек отчета и отредактировать их, изменить структуру отчета и т. д. аналогично тому, как это делает разработчик в режиме конфигуратора.

Консоль системы компоновки данных

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

Источник

СКД и внешние источники данных. Набор данных — объект

Привет!
Сегодня хочу описать тему, с которой без «акваланга» не разберешься 🙂 😉

Акваланг к тому, что погружение довольно глубокое. В литературе встречается мало ссылок на эту тему и пока не «приспичит» в ней не разберешься. Не возникнет даже посыла к такому действию 😉 Кстати, в документации об этом сказано очень плохо и непоследовательно, приходится обращаться к сторонней литературе.

В СКД существует 2 вида источников данных: Запрос, объект и объединение (эта штука не в счет, она не источник данных, а обработчик имеющихся). См рис 1:

в скд можно задать несколько источников данных для каких целей это используется. Смотреть фото в скд можно задать несколько источников данных для каких целей это используется. Смотреть картинку в скд можно задать несколько источников данных для каких целей это используется. Картинка про в скд можно задать несколько источников данных для каких целей это используется. Фото в скд можно задать несколько источников данных для каких целей это используется

Итак, если с источником (набором) данных типа «Запрос» нам более или менее понятно, как работать, то по поводу набора данных «Объект» есть трудности.

Для начала опишу, что мы хотим получить на выходе:

Отчет, пользователь нажал кнопку «Сформировать» и отобразился список номенклатуры (см. рис. 2):

в скд можно задать несколько источников данных для каких целей это используется. Смотреть фото в скд можно задать несколько источников данных для каких целей это используется. Смотреть картинку в скд можно задать несколько источников данных для каких целей это используется. Картинка про в скд можно задать несколько источников данных для каких целей это используется. Фото в скд можно задать несколько источников данных для каких целей это используется

Да, я допустил одну неточность, а именно: на снимке нет кнопки «Сформировать«, но есть кнопка «новое действе» (чуть позже объясню, почему так получилось 😉

Да, да! Еще момент: весь этот список выводится из набора данных «Объект»:

в скд можно задать несколько источников данных для каких целей это используется. Смотреть фото в скд можно задать несколько источников данных для каких целей это используется. Смотреть картинку в скд можно задать несколько источников данных для каких целей это используется. Картинка про в скд можно задать несколько источников данных для каких целей это используется. Фото в скд можно задать несколько источников данных для каких целей это используется

Решение:

в скд можно задать несколько источников данных для каких целей это используется. Смотреть фото в скд можно задать несколько источников данных для каких целей это используется. Смотреть картинку в скд можно задать несколько источников данных для каких целей это используется. Картинка про в скд можно задать несколько источников данных для каких целей это используется. Фото в скд можно задать несколько источников данных для каких целей это используется

Ок, половину дела сделали 😉

Теперь сгенерируем основную форму отчета (да, еще момент! Моя конфигурация работает на обычном интерфейсе, но думаю, на управляемых формах вы найдете решение 😉 Итак, форма:

в скд можно задать несколько источников данных для каких целей это используется. Смотреть фото в скд можно задать несколько источников данных для каких целей это используется. Смотреть картинку в скд можно задать несколько источников данных для каких целей это используется. Картинка про в скд можно задать несколько источников данных для каких целей это используется. Фото в скд можно задать несколько источников данных для каких целей это используется

Здесь и возникает проблема! Если нажать на кнопку «сформировать» (рис. 5.), то мы увидим ошибку!

в скд можно задать несколько источников данных для каких целей это используется. Смотреть фото в скд можно задать несколько источников данных для каких целей это используется. Смотреть картинку в скд можно задать несколько источников данных для каких целей это используется. Картинка про в скд можно задать несколько источников данных для каких целей это используется. Фото в скд можно задать несколько источников данных для каких целей это используется

Решению данной проблемы я и посвятил данную статью!

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

в скд можно задать несколько источников данных для каких целей это используется. Смотреть фото в скд можно задать несколько источников данных для каких целей это используется. Смотреть картинку в скд можно задать несколько источников данных для каких целей это используется. Картинка про в скд можно задать несколько источников данных для каких целей это используется. Фото в скд можно задать несколько источников данных для каких целей это используется

Вставлял в форме процедуру «Сформировать», но в нее нет заходов, пришлось переопределить действие кнопки «сформировать» перед открытием формы:

в скд можно задать несколько источников данных для каких целей это используется. Смотреть фото в скд можно задать несколько источников данных для каких целей это используется. Смотреть картинку в скд можно задать несколько источников данных для каких целей это используется. Картинка про в скд можно задать несколько источников данных для каких целей это используется. Фото в скд можно задать несколько источников данных для каких целей это используется

На рис. 8 помимо изменения действия формы приведен пример запроса, его обработки и передачи сгенерированных данных в СКД. Изучим его белее внимательно:

Вспомним схему взаимодействия объектов системы компоновки данных:

в скд можно задать несколько источников данных для каких целей это используется. Смотреть фото в скд можно задать несколько источников данных для каких целей это используется. Смотреть картинку в скд можно задать несколько источников данных для каких целей это используется. Картинка про в скд можно задать несколько источников данных для каких целей это используется. Фото в скд можно задать несколько источников данных для каких целей это используется

Схема компоновки данных во внешнем отчете дотупна как глобальный объект в методе формы СхемаКомпоновкиДанных. К ней так же можно обратиться по имени, передав его в метод ПолучитьМакет (см. Рис. 8)

Далее, самостоятельно изучите используя представленную схему на рис. 9 и справочную систему, как и зачем взаимодействовать с данными объектами 😉

Основной кусок кода приведен ниже:

Да! Вот еще приятный момент.

В данном примере, как видите (см. рис. 2), вывод осуществляется в форму, а не в табл. документ! И это очень хорошо, ведь мы можем работать с формой (программно перехватывать события элемента формы, делать всякие фишки с drag and drop и прочее 😉

В табличном документе мы можем просто вывести обработанные данные на экран и передать управление документом пользователю и мы не можем никак влиять на дальнейший процесс редактирования данного контента!

См. в справочной системе «Поле табличного документа«, а я всего лишь приведу выдержку из встроенной документации системы 1с Предприятие 8.2:

Источник

Доброго времени суток.

Вступление
1. Подготовка и демонстрация

ВЫБРАТЬ
СпецификацииНоменклатурыВыходныеИзделия.Номенклатура КАК Продукция,
СпецификацииНоменклатурыИсходныеКомплектующие.Номенклатура КАК Комплектующая,
СРЕДНЕЕ(СпецификацииНоменклатурыИсходныеКомплектующие.Количество / ВЫБОР
КОГДА СпецификацииНоменклатурыВыходныеИзделия.Количество <> 0
ТОГДА СпецификацииНоменклатурыВыходныеИзделия.Количество
ИНАЧЕ 1
КОНЕЦ) КАК КоличествоНа1
ИЗ
Справочник.СпецификацииНоменклатуры.ВыходныеИзделия КАК СпецификацииНоменклатурыВыходныеИзделия
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.СпецификацииНоменклатуры.ИсходныеКомплектующие КАК СпецификацииНоменклатурыИсходныеКомплектующие
ПО СпецификацииНоменклатурыВыходныеИзделия.Ссылка = СпецификацииНоменклатурыИсходныеКомплектующие.Ссылка
ГДЕ
СпецификацииНоменклатурыВыходныеИзделия.Ссылка.Активная
И СпецификацииНоменклатурыВыходныеИзделия.Номенклатура В ИЕРАРХИИ(&Номенклатура)

СГРУППИРОВАТЬ ПО
СпецификацииНоменклатурыВыходныеИзделия.Номенклатура,
СпецификацииНоменклатурыИсходныеКомплектующие.Номенклатура

ВЫБРАТЬ
ТоварыНаСкладахОстатки.Склад КАК СкладКомплектующей,
ТоварыНаСкладахОстатки.Номенклатура КАК Комплектующая,
ТоварыНаСкладахОстатки.КоличествоОстаток КАК ОстатокКомплектующей
ИЗ
РегистрНакопления.ТоварыНаСкладах.Остатки(<(&КонецПериода)>, <(Склад).* КАК СкладОтбора, (Номенклатура).* КАК Комплектующая>) КАК ТоварыНаСкладахОстатки

в скд можно задать несколько источников данных для каких целей это используется. Смотреть фото в скд можно задать несколько источников данных для каких целей это используется. Смотреть картинку в скд можно задать несколько источников данных для каких целей это используется. Картинка про в скд можно задать несколько источников данных для каких целей это используется. Фото в скд можно задать несколько источников данных для каких целей это используется

Ресурсы пока простые: Сумма(КоличествоНа1) и Сумма(ОстатокКомлектующей).

в скд можно задать несколько источников данных для каких целей это используется. Смотреть фото в скд можно задать несколько источников данных для каких целей это используется. Смотреть картинку в скд можно задать несколько источников данных для каких целей это используется. Картинка про в скд можно задать несколько источников данных для каких целей это используется. Фото в скд можно задать несколько источников данных для каких целей это используется

в скд можно задать несколько источников данных для каких целей это используется. Смотреть фото в скд можно задать несколько источников данных для каких целей это используется. Смотреть картинку в скд можно задать несколько источников данных для каких целей это используется. Картинка про в скд можно задать несколько источников данных для каких целей это используется. Фото в скд можно задать несколько источников данных для каких целей это используется

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

Проблема:

в скд можно задать несколько источников данных для каких целей это используется. Смотреть фото в скд можно задать несколько источников данных для каких целей это используется. Смотреть картинку в скд можно задать несколько источников данных для каких целей это используется. Картинка про в скд можно задать несколько источников данных для каких целей это используется. Фото в скд можно задать несколько источников данных для каких целей это используется

Тогда я еще не знал про «замену Левого на Внутреннее, если есть отбор».

2. Попытка выкрутиться

Но вот беда: в отборе по группировке, среди доступных полей, нет поля «СкладОтбора»:

в скд можно задать несколько источников данных для каких целей это используется. Смотреть фото в скд можно задать несколько источников данных для каких целей это используется. Смотреть картинку в скд можно задать несколько источников данных для каких целей это используется. Картинка про в скд можно задать несколько источников данных для каких целей это используется. Фото в скд можно задать несколько источников данных для каких целей это используется

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

в скд можно задать несколько источников данных для каких целей это используется. Смотреть фото в скд можно задать несколько источников данных для каких целей это используется. Смотреть картинку в скд можно задать несколько источников данных для каких целей это используется. Картинка про в скд можно задать несколько источников данных для каких целей это используется. Фото в скд можно задать несколько источников данных для каких целей это используется

в скд можно задать несколько источников данных для каких целей это используется. Смотреть фото в скд можно задать несколько источников данных для каких целей это используется. Смотреть картинку в скд можно задать несколько источников данных для каких целей это используется. Картинка про в скд можно задать несколько источников данных для каких целей это используется. Фото в скд можно задать несколько источников данных для каких целей это используется

3. Хотелки и их исполнение.

ВЫБРАТЬ
ТоварыНаСкладахОстатки.Склад КАК СкладПродукции,
ТоварыНаСкладахОстатки.Номенклатура КАК Продукция,
ТоварыНаСкладахОстатки.КоличествоОстаток КАК ОстатокПродукции
ИЗ
РегистрНакопления.ТоварыНаСкладах.Остатки(<(&КонецПериода)>, <(Склад).* КАК СкладОтбора, (Номенклатура).* КАК Продукция>) КАК ТоварыНаСкладахОстатки

Ну и добавляем еще одну связь.

в скд можно задать несколько источников данных для каких целей это используется. Смотреть фото в скд можно задать несколько источников данных для каких целей это используется. Смотреть картинку в скд можно задать несколько источников данных для каких целей это используется. Картинка про в скд можно задать несколько источников данных для каких целей это используется. Фото в скд можно задать несколько источников данных для каких целей это используется

Ну и в ресурсах определяем ОстатокПродукции.

Тут на помощь пришла вторая статья Агрегатные функции СКД, о которых мало кто знает. Сначала использовал функцию ТаблицаЗначений. Но при простом повторении формирования отчета строки складов прыгают. Тогда добавил Упорядочить в итоге получилось так:

Для ОстаткаКомплектующих: Упорядочить(ТаблицаЗначений(Различные СкладКомплектующей Как Склад, ОстатокКомплектующей Как Остаток), «Склад Автоупорядочивание»)

Для ОстаткаПродукции: Упорядочить(ТаблицаЗначений(Различные СкладПродукции Как Склад, ОстатокПродукции Как Остаток), «Склад Автоупорядочивание»)

в скд можно задать несколько источников данных для каких целей это используется. Смотреть фото в скд можно задать несколько источников данных для каких целей это используется. Смотреть картинку в скд можно задать несколько источников данных для каких целей это используется. Картинка про в скд можно задать несколько источников данных для каких целей это используется. Фото в скд можно задать несколько источников данных для каких целей это используется

Дальше немного «причесал» структуру: выключил детальные записи, сгруппировал поля, отключил «Общие Итоги по вертикали».

в скд можно задать несколько источников данных для каких целей это используется. Смотреть фото в скд можно задать несколько источников данных для каких целей это используется. Смотреть картинку в скд можно задать несколько источников данных для каких целей это используется. Картинка про в скд можно задать несколько источников данных для каких целей это используется. Фото в скд можно задать несколько источников данных для каких целей это используется

в скд можно задать несколько источников данных для каких целей это используется. Смотреть фото в скд можно задать несколько источников данных для каких целей это используется. Смотреть картинку в скд можно задать несколько источников данных для каких целей это используется. Картинка про в скд можно задать несколько источников данных для каких целей это используется. Фото в скд можно задать несколько источников данных для каких целей это используется

Теперь влючаю отбор по складу и вижу результат, опять исчезли строки (что в прочем уже ожидаемо):

в скд можно задать несколько источников данных для каких целей это используется. Смотреть фото в скд можно задать несколько источников данных для каких целей это используется. Смотреть картинку в скд можно задать несколько источников данных для каких целей это используется. Картинка про в скд можно задать несколько источников данных для каких целей это используется. Фото в скд можно задать несколько источников данных для каких целей это используется

4. Поиск решения

ВЫБРАТЬ
ТоварыНаСкладахОстатки.Склад КАК СкладКомплектующей,
СпрНоменклатура.Ссылка КАК Комплектующая,
ТоварыНаСкладахОстатки.КоличествоОстаток КАК ОстатокКомплектующей
ИЗ
Справочник.Номенклатура КАК СпрНоменклатура
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(<(&КонецПериода)>, ) КАК ТоварыНаСкладахОстатки
ПО СпрНоменклатура.Ссылка = ТоварыНаСкладахОстатки.Номенклатура
<ГДЕ
ТоварыНаСкладахОстатки.Склад.* КАК СкладОтбора>

Дальше экспериментировал с настройками. Работало долго. На каком-то этапе вообще получил от сервера отлуп по памяти. Бросил.

День бодался. На следующий день пошел по второму кугу. Только все создавал с нуля.

5. Решение

И начал снова с Левого соединения в запросе. Получился такой запрос (правильный):

ВЫБРАТЬ
ТоварыНаСкладахОстатки.Склад КАК СкладКомплектующей,
СпрНоменклатура.Ссылка КАК Комплектующая,
ТоварыНаСкладахОстатки.КоличествоОстаток КАК ОстатокКомплектующей
ИЗ
Справочник.Номенклатура КАК СпрНоменклатура
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(<(&КонецПериода)>, <(Склад).* КАК СкладОтбора, (Номенклатура).* КАК Комплектующая>) КАК ТоварыНаСкладахОстатки
ПО СпрНоменклатура.Ссылка = ТоварыНаСкладахОстатки.Номенклатура

Сформировал, посмотрел нормальный результат. Включил отбор и увидел это:

в скд можно задать несколько источников данных для каких целей это используется. Смотреть фото в скд можно задать несколько источников данных для каких целей это используется. Смотреть картинку в скд можно задать несколько источников данных для каких целей это используется. Картинка про в скд можно задать несколько источников данных для каких целей это используется. Фото в скд можно задать несколько источников данных для каких целей это используется

Но самым удивительным для меня оказался такой результат (отбор по другому складу и еще одна продукция):

в скд можно задать несколько источников данных для каких целей это используется. Смотреть фото в скд можно задать несколько источников данных для каких целей это используется. Смотреть картинку в скд можно задать несколько источников данных для каких целей это используется. Картинка про в скд можно задать несколько источников данных для каких целей это используется. Фото в скд можно задать несколько источников данных для каких целей это используется

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

Конец

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

Источник

Набор данных Объект в СКД для решения задач сортировки, нумерации и вывода в отчет произвольных наборов данных

Задача, которую я решил используя набор данных Объект, состояла в следующем:

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

Решение задачи.

в скд можно задать несколько источников данных для каких целей это используется. Смотреть фото в скд можно задать несколько источников данных для каких целей это используется. Смотреть картинку в скд можно задать несколько источников данных для каких целей это используется. Картинка про в скд можно задать несколько источников данных для каких целей это используется. Фото в скд можно задать несколько источников данных для каких целей это используется

Зададим нашему набору данных Имя объекта, содержащего данные тзПорядок.

2. Не забудем задать связь наборов данных:

в скд можно задать несколько источников данных для каких целей это используется. Смотреть фото в скд можно задать несколько источников данных для каких целей это используется. Смотреть картинку в скд можно задать несколько источников данных для каких целей это используется. Картинка про в скд можно задать несколько источников данных для каких целей это используется. Фото в скд можно задать несколько источников данных для каких целей это используется

3. Добавляем условие отбора на основной запрос:

в скд можно задать несколько источников данных для каких целей это используется. Смотреть фото в скд можно задать несколько источников данных для каких целей это используется. Смотреть картинку в скд можно задать несколько источников данных для каких целей это используется. Картинка про в скд можно задать несколько источников данных для каких целей это используется. Фото в скд можно задать несколько источников данных для каких целей это используется

Это условие можно реализовать и другими способами, например, определив отбор компоновки данных, но мне показалось, что получать в дальнейшем значение параметра проще, чем отыскивать необходимый отбор из настроек схемы компоновки данных.

4. Укажем для нашего параметра &НоменклатурныеГруппы доступность ввода списка значений:

в скд можно задать несколько источников данных для каких целей это используется. Смотреть фото в скд можно задать несколько источников данных для каких целей это используется. Смотреть картинку в скд можно задать несколько источников данных для каких целей это используется. Картинка про в скд можно задать несколько источников данных для каких целей это используется. Фото в скд можно задать несколько источников данных для каких целей это используется

5. На данном этапе работа с конструктором схемы компоновки данных заканчивается и мы перемещаемся в модуль объекта, нашего отчета. Для дальнейшей реализации поставленной задачи, придется формировать отчет программно. Для этого реализуем процедуру ПриКомпоновкеРезультата.

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

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

7. Для этого мы вносим изменения в уже внесенный код в процедуре ПриКомпоновкеРезультата:

После получения макета компоновки данных и перед процессом компоновки данных, мы производим определение нашего Набора данных. Для этого, создается структура ВнешниеНаборыДанных и в неё добавляется в качестве таблицы значений элемент, которому присваивается имя тзПорядок, ранее мы указывали это имя при создании набора данных.

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

Инициализацию Процессора компоновки данных необходимо производить с передачей Внешних наборов данных(второй параметр метода Инициализировать).

8. Теперь вернемся в конструктор Схемы компоновки данных и настроим сортировку для нашего отчета. Для начала укажем наше поле Порядок в качестве ресурса отчета:

в скд можно задать несколько источников данных для каких целей это используется. Смотреть фото в скд можно задать несколько источников данных для каких целей это используется. Смотреть картинку в скд можно задать несколько источников данных для каких целей это используется. Картинка про в скд можно задать несколько источников данных для каких целей это используется. Фото в скд можно задать несколько источников данных для каких целей это используется

После перейдем на вкладку Настройки и в настройках отчета(группировки) перейдем на вкладку Сортировка. Выберем в качестве поля сортировки поле Порядок. Не забываем снять галочку с Авто.

в скд можно задать несколько источников данных для каких целей это используется. Смотреть фото в скд можно задать несколько источников данных для каких целей это используется. Смотреть картинку в скд можно задать несколько источников данных для каких целей это используется. Картинка про в скд можно задать несколько источников данных для каких целей это используется. Фото в скд можно задать несколько источников данных для каких целей это используется

9. Проверим результат формирования нашего отчета.

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

в скд можно задать несколько источников данных для каких целей это используется. Смотреть фото в скд можно задать несколько источников данных для каких целей это используется. Смотреть картинку в скд можно задать несколько источников данных для каких целей это используется. Картинка про в скд можно задать несколько источников данных для каких целей это используется. Фото в скд можно задать несколько источников данных для каких целей это используется

И сформируем отчет.

в скд можно задать несколько источников данных для каких целей это используется. Смотреть фото в скд можно задать несколько источников данных для каких целей это используется. Смотреть картинку в скд можно задать несколько источников данных для каких целей это используется. Картинка про в скд можно задать несколько источников данных для каких целей это используется. Фото в скд можно задать несколько источников данных для каких целей это используется

Мы видим, что столбцы Номенклатурных групп выстроились в том порядке, в каком мы их выбрали(в отчет не вывелись номенклатурные группы по которым не было оборотов за период). Не сложно увидеть, что Ячмень без пленок встал на первое место, потому что мы так выбрали его в параметр. Хотя согласно алфавиту наименования на Я должны были бы идти в конце списка, следовательно наша сортировка заработала.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *