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

25.01.2021 Новости

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

Различают несколько видов наборов данных:

  • Запрос;
  • Объект;
  • Объединение .

Запрос – это обычный 1с-запрос только язык запросов немного расширен. Для удобства можно использовать конструктор запроса.

Объект – внешний набор данных, например таблица значений.

Объединение – объединение нескольких наборов данных типов запрос и объект.

В данной статье мы кратко пробежимся по всем вкладкам конструктора схемы компоновки данных. Наборы данных На данной вкладке можно создать неограниченное количество наборов данных. Набор данных – это источник получения данных. Различают несколько видов наборов данных: Запрос; Объект; Объединение. Запрос – это обычный 1с-запрос только язык запросов немного расширен. Для удобства можно использовать конструктор запроса. Объект – внешний набор данных, например таблица значений. Объединение – объединение нескольких наборов данных типов запрос и объект. Связи наборов данных На данной вкладке описываются связи наборов данных. Тут можно указать какие наборы данных связывать и по каким полям и с какими параметрами. Самое главное, что нужно запомнить: в схеме компоновки данных, при связывании наборов всегда используется Левое соединение! Вычисляемые поля На данной вкладке можно создавать дополнительные поля, не описанные на вкладке Наборы данных. В качестве выражений для расчета можно использовать язык выражений компоновки данных, поля из основных наборов данных, а также функции не глобальных общих модулей. Ресурсы Ресурсы – это итоговые данные по группировкам. На вкладке можно назначить ресурсом поля из наборов данных, а также из вычисляемых полей. Также для ресурсов указывается выражение, по которому они рассчитываются, и возможно указание группировки по которой будет рассчитываться выражение для ресурсов. На основании значений ресурсов также рассчитываются общие итоги отчета. Параметры Параметры данных, как правило, используются в наборе данных запрос. Все параметры, описанные в запросе, появляются на вкладке Параметры. На данной вкладке можно указать заголовок, доступные типы, доступные значение и некоторые другие вещи. Подробнее о параметрах чуть позже. Макеты По умолчанию макет сформированного отчета генерируется автоматически системой компоновки данных. Но в системе также имеется возможность разработчику самому оформлять отдельные области отчета(полей, группировок, ресурсов…). Все макеты отдельных областей, созданные на данной вкладке, привязаны только к текущему отчету. Вложенные схемы Вложенные схемы используются в случаях когда данные одного отчета необходимо использовать в другом. Другими словами мы “встраиваем” одну схему компоновки данных в другую, указывая связь по общему полю. Пример использования вложенных схем можно посмотреть в этой статье. Настройки На данной вкладке разработчик создает стандартные настройки формирования отчета. В верхней части окна задается иерархическая структура. Структура формирования отчета может состоять из следующих элементов: Группировка; Таблица; Диаграмма; Вложенная схема В нижнем части окна задаются настройки для всего отчета и для каждого элемента структуры отчета. Кратко в вкладках настроек: Выбранные поля – список полей выводимых в отчет; Отбор – всевозможные отборы записей отчета; Порядок – сортировка записей в отчете; Параметры данных – значение параметров отчета; Пользовательские поля – дополнительные поля отчета, создаваемые пользователем; Условное оформление – задается условное оформление записей отчета; Другие настройки – всевозможные дополнительные настройки такие как: заголовок отчета, макет оформления, расположение полей и тд....

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

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

К примеру, очень рекомендую «Разработка сложных отчетов в «1С:Предприятии 8.2″. Система компоновки данных», (если конкретнее, то смотрите стр. 224, 267 и 473)

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


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

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

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

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

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

Решение:

  1. Создаем внешний отчет;
  2. Добавляем макет СКД, назовем его «ОсновнаяСхемаКомпановкиДанных»;
  3. Добавляем в него набор данных «Объект», назначаем ему имя «СписокНоменклатуры» (должно быть так же, как и в рис. 3);
  4. В настройках отчета особо не экспериментируем, пусть будет все просто (см. рис. 4)

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

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

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


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

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

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


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

  1. Генерируем входные данные для СКД;
  2. Инициализируем СКД;
  3. Выводим результат НА ФОРМУ (обратите на это так же внимание!).

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

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

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

Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Номенклатура.Наименование как Номенклатура |ИЗ | Справочник.Номенклатура КАК Номенклатура"; НоменклатураСписок = Запрос.Выполнить().Выгрузить(); НаборыДанных = Новый Структура("СписокНоменклатуры", НоменклатураСписок); //СКД = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных"); СКД = СхемаКомпоновкиДанных; КомпМакета = новый КомпоновщикМакетаКомпоновкиДанных; макетКомп = КомпМакета.Выполнить(СКД, СКД.НастройкиПоУмолчанию); ПроцессорКомпДанных = новый ПроцессорКомпоновкиДанных; ПроцессорКомпДанных.Инициализировать(макетКомп, НаборыДанных); вывод = новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент; вывод.УстановитьДокумент(ЭлементыФормы.Результат); вывод.Вывести(ПроцессорКомпДанных, истина);

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

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

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

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

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

Ладно, как говорится, успехов в бою;)

Внимание! Перед вами ознакомительная версия урока, материалы которого могут быть неполными.

Войдите на сайт как ученик

Войдите как ученик, чтобы получить доступ к материалам школы

Система компоновки данных 1С 8.3 для начинающих: представление отчёта в виде диаграммы

Сегодня мы дополним отчёт с прошлого урока (вернее его копию) возможностью отобразить те же данные в виде диаграммы.

Ставим цель

  • Сделать копию отчёта с прошлого урока.
  • Вывести те же самые данные в виде диаграммы.
  • При этом сериями (столбцами, ось Y) должны являться продукты, а точками (ось X) - клиенты. Значения столбцов (по оси Y) и будет количество еды, которое заказал данных клиент.

Меняем копию прошлого отчёта

Делаем копию отчёта из прошлого урока под именем "Урок9" и открываем эту копию в конфигураторе базы "Гастроном".

Меняем имя отчёта на "Урок9" и нажимаем кнопку "Открыть схему компоновки данных":

Мы не будем менять наборы данных - наша задача изменить их представление для пользователя.

Поэтому сразу переходим на закладку "Настройки" и обращаем наше внимание на левую колонку с вариантами отчёта.

Мы раньше не работали с этой колонкой, но сегодня я расскажу вам в чём её смысл.

Все настройки которые мы делаем на этой вкладке (при помощи конструктора волшебной палочки или вручную в нижней части) они относятся к одному из вариантов отчёта, который выделен в левой части окна.

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

И вот у нас сейчас есть основной вариант, в настройках которого указано - выводить данные в виде таблицы:

Давайте так переименуем этот вариант (двойным щелчком) и основного в "Таблица":

Добавляем новый вариант отчёта

Теперь при помощи плюсика добавим ещё один вариант (куда мы запихаем настройка вывода данных в виде диаграммы):

Сразу назовём этот вариант "Диаграмма":

Настраиваем новый вариант отчёта

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

На этот раз выберем тип отчета "Диаграмма...":

В качестве полей для отображения выберем "Количество" (по аналогии с таблицей):

В качестве серий (ось Y) укажем поле "Еда", а в качестве точек (ось X) - поле "Клиенты":

Получилось вот так:

Сохраним наш отчёт в конфигураторе и запустим его в режиме пользователя:

Мы видим таблицу... что такое?! А дело в том, что нужно просто выбрать другой вариант отчёта. Нажимаем на кнопку "Выбрать вариант..." и выбираем вариант "Диаграмма":

Диаграмма готова

Ещё раз формируем отчёт:

Отлично, какая красота

Эталонная обработка, после выполнения всех шагов этого урока

В заключении модуля

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

Если у вас в будущем (я советую делать это уже после окончания всей школы ) возникнет потребность в более глубоком изучении системы компоновки данных - есть замечательная книга Е. Ю. Хрусталёвой "Разработка сложных отчётов в 1С:Предприятие 8".

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

Мы отлично поработали, пора отдохнуть!

Использование системы компоновки данных 1С невозможно без наборов данных . В одной схеме компоновки данных их может быть несколько. И они могут связываться между собой определенным образом. А точнее либо , либо объединяться . В этой статье рассмотрим объединение наборов данных . Объединение наборов данных в СКД подобно .

Чтобы объединить два или более набора данных в СКД, необходимо на закладке Наборы данных предварительно создать специальный набор данных — объединение


Получаем вот такую картину


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


В качестве примера рассмотрим объединение наборов данных с остатками товаров.

В том наборе, где будем использовать , вручную добавляем поля Товар, Количество и прописываем имя объекта, содержащего данные


Для набора данных где используется запрос будем получать данные с использованием остатков вот из такого регистра накопления:


Делаем простейший запрос

ВЫБРАТЬ ОстаткиТоваров.Товар.Представление КАК Товар, ОстаткиТоваров.КоличествоОстаток КАК Остатки {ВЫБРАТЬ Товар, Остатки} ИЗ РегистрНакопления.ТоварыОстатки.Остатки КАК ОстаткиТоваров

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

Теперь обратимся непосредственно к данным
В регистре накопления у меня хранятся следующие остатки товаров

а во внешнем источнике данных вот такая картина

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


В результате выполнения отчета с такими настройками СКД получаем вот такую таблицу

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


И теперь получаем результат без задвоенных строк.

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

Открываем модуль объекта и создаем предопределенную процедуру ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)

Внутри этой процедуры будем собирать данные и формировать отчет.
В процедуре ПриКомпоновкеРезультата отключаем стандартную обработку. СтандартнаяОбработка = Ложь;
Затем формируем таблицу значений произвольным образом. Имена колонок таблицы значений должны совпадать с будущими полями набора данных в СКД.:


Для примера добавим три строки данных. Далее по шагам создаем вывод отчета.

  • Из схемы получаем настройки по умолчанию.

  • В соответствующую переменную отправляем данные о расшифровке.

  • Формируем макет с помощью компоновщика макета.

  • Передаём в макет компоновки схему, настройки и данные расшифровки.

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

  • Очищаем поле табличного документа.

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

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

Добавляем ресурсы, если это необходимо. По ним будут считаться итоги. В нашем случае это поля Количество и Сумма.

В закладке Настройки с помощью конструктора настроек формируем вариант отчета по умолчанию

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


Вот и все. Достаточно просто, не правда ли?

Получившийся отчет для примера можно скачать