Перейти к содержимому

Наборы

Наборы - это коллекции с данными конкретного объекта (и общих запросов) сформированные в момент подготовки печатной формы по конкретному объекту. Для печатных форм с признаком “Это реестр”, набор данных аналогичен всем данным полученным из запросов. Данные наборов могут быть сформированы из результатов запросов или из результата выполнения алгоритма.

Вид закладки “Наборы”

Форма закладки “Наборы” разделена на две части:

  • в левой части расположен список наборов
  • в правой части расположен список полей текущего активного набора

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

Порядок работы обычно такой:

  1. Проверьте состав наборов — они создаются из запросов сами и синхронизируются при изменении запросов.
  2. Задайте вид набора — от него зависит, как поле пишется в макете и в какие области его можно вывести.
  3. Добавьте недостающие поля — представления, нумераторы, доп. реквизиты, вычисляемые.
  4. Свяжите наборы между собой на закладке Соединения, если данные приходят из разных таблиц.
  5. Переходите к Макету — там поля наборов подставляются в параметры областей.

По умолчанию список наборов создается на основании данных закладки “Запросы”. В дальнейшем при изменении состава запросов данные наборов синхронизируются. То есть добавление или удаление запроса приводит к изменению наборов. Однако, если из запроса удалено поле, которое используется в макете (наборе, соединениях, параметрах) поле в наборе не будет удалено автоматически. Изменится пиктограмма связи поля и цвет текста (на красный).

Рассмотрим подробно колонки таблицы “Наборы”

КолонкаЗначокОписание
ПечатьПризнак доступности набора для использования в параметрах печатной формы
Имя набораПользовательское представление набора
Источник данныхИмя источника данных (имя запроса или алгоритма)
Вид набораСпособ формирования коллекции данных набора для использования в печатной форме
АлгоритмПризнак наличия алгоритма обработки набора данных. Подсказка колонки — «Есть алгоритм обработки набора данных»

Источником данных для набора (как упоминалось выше) может выступать результат запроса или произвольный алгоритм (источник = pw_Алгоритм).

Таблицы сформированные при помощи алгоритма (без запроса в основе) должны быть подготовлены полностью в самом коде. Поля набора при этом необходимо добавить вручную. Если в таком наборе будет присутствовать поле “Ссылка”, конструктор будет рассматривать это поле как ключевое, для отбора при подготовке данных конкретной печатной формы (по каждой ссылке).

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

ДанныеЗапроса = Новый ТаблицаЗначений;
ДанныеЗапроса.Колонки.Добавить("НомерСтроки", Новый ОписаниеТипов("Число"));
Для Индекс = 1 По 100 Цикл
СтрокаТаблицы = ДанныеЗапроса.Добавить();
СтрокаТаблицы.НомерСтроки = Индекс;
КонецЦикла;

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

Алгоритм выполняется сразу после запроса — до расчёта дополнительных полей набора и до разделения данных по объектам печати (полный порядок — в разделе Очередность подготовки полей). В алгоритме доступны переменные:

ПеременнаяТипНазначение
ЭтотМакетОбработкаОбъект.pw_ИсполнительОбъект исполнителя печатной формы
ДанныеЗапросаТаблицаЗначенийРезультат выполнения запроса по всем печатаемым объектам. Таблицу можно изменять и полностью пересобирать: добавлять и удалять колонки, фильтровать и дополнять строки — дополнительные поля набора рассчитаются по итоговой таблице
НаборыДанныхСтруктураТаблицы данных ранее подготовленных наборов, ключ — имя набора
ДополнительныеСвойстваСтруктураКоллекция для данных, передаваемых между алгоритмами и событиями

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

Если в процессе обработки набора были добавлены колонки во входящий параметр ДанныеЗапроса программа может автоматически обновить поля, для этого над полем алгоритма располагается кнопка Обновить поля. Программа разберет текст алгоритма и найдет места, где был выполнен код ДанныеЗапроса.Колонки.Добавить() и автоматически добавит требуемые поля в набор.

Все наборы по умолчанию имеют вид “Многострочная коллекция”, то есть по сути таблица. Вывод в печатную форму многострочных коллекций возможен только в виде таблицы. При этом, если нам необходимо добавить значение отдельного реквизита в шапку или другую область (не являющуюся таблицей) необходимо изменить вид набора.

Набор данных может иметь следующий вид:

  • первая строка
  • последняя строка
  • многострочная коллекция
  • соединение строк (через ”;“)

Рассмотрим пример. Запрос реквизитов шапки документа выглядит следующим образом:

ВЫБРАТЬ
Т.Ссылка КАК Ссылка,
Т.Номер КАК Номер,
Т.Дата КАК Дата
ИЗ
Документ.МойДокумент КАК Т
ГДЕ
Т.Ссылка В (&МассивОбъектов)

Если пользователь выбрал 3 документа для формирования печатных форм, то результат выполнения данного запроса будет иметь следующий вид:

СсылкаНомерДата
Мой документ № 1 от 01.01.2023101.01.2023
Мой документ № 2 от 02.01.2023202.01.2023
Мой документ № 3 от 03.01.2023303.01.2023

Для каждого документа, в приведенной таблице, существует только одна строка с данными. Чтобы использовать реквизиты данной строки необходимо преобразовать данные из “горизонтального” вида в “вертикальный”. Для этого необходимо изменить вид набора.

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

  • Ссылка: Мой документ № 1 от 01.01.2023
  • Номер: 1
  • Дата: 01.01.2023

Такой набор данных будет доступен в областях со способом вывода “Без повторений” или “Перенос строки”. Поля данных при выборе в параметрах макета будут иметь путь НаборыДанных.ИмяНабора.ИмяПоля, например: НаборыДанных.Шапка.Организация. В приведенном примере этот путь означат, что будут считаны (и выведены) данные из поля Организация первой (или последней) строки набора Шапка.

В некоторых случаях необходимо “свернуть” таблицу в одну строку.

Например. У нас есть запрос Товары

СсылкаНоменклатураКоличество
Мой документ № 1 от 01.01.2023Товар 110
Мой документ № 1 от 01.01.2023Товар 210

Допустим нам необходимо вывести в шапке документа в одну строку всю номенклатуру из табличной части. В таком случае мы можем использовать вид набора “Соединение строк”. В этом случае набор будет свёрнут по ссылке и преобразован в вертикальную структуру (для документа № 1):

  • Ссылка: Мой документ № 1 от 01.01.2023
  • Номенклатура: Товар 1; Товар 2
  • Количество: 10; 10

Поле “Количество” мы можем удалить, эти данные нас не интересуют.

Многострочная коллекция нужна для вывода табличных частей или когда набор содержит несколько строк на одну печатную форму. Подробнее о том, как реализовать вывод области для каждой строки многострочной коллекции читайте в разделе Настройка макета. Если для области указан набор (источник данных), тогда путь к значению поля из строки набора будет иметь вид НаборыДанных.[ИмяНабора].Строка.[ИмяПоля]. А для итога по числовой колонке набора — НаборыДанных.[ИмяНабора].Итог.[ИмяПоля].[Агрегат].

При активизации строки набора, в правой части отображается таблица полей набора. Рассмотрим подробнее колонки таблицы:

КолонкаЗначокОписание
СвязьВид связи поля с данными макета — значения разобраны в разделе Связь полей
ПечатьПризнак простого типа поля, рекомендуется к использованию в печатной форме
Имя поляИмя поля для идентификации пользователем
Тип поляТип поля, определяет источник получения данных для поля
Тип данныхПредставление типа данных значения поля
Доп. реквизитыПризнак возможного наличия доп. реквизитов или свойств (подсистема «Свойства» БСП 1С). Подсказка колонки — «Есть дополнительные реквизиты или сведения»
Контактная информацияПризнак возможного наличия контактной информации (подсистема «Контактная информация» БСП 1С). Подсказка колонки — «Есть контактная информация»

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

Кнопки добавления полей подписей не имеют — команда узнаётся по значку и по подсказке, которая всплывает при наведении. В таблице ниже подсказка приведена дословно: по ней команду можно найти поиском и назвать в обращении в поддержку.

ЗначокПодсказка кнопкиЧто делает
Добавить поле набора данных конструкторДобавляет поле представления
Добавить поле набора данных нумератораДобавляет поле нумератора
Добавить поле набора данных вычисляемоеДобавляет вычисляемое поле
Добавить поле набора данных из алгоритмаДобавляет поле алгоритма
Добавить поле доп. реквизита или сведенияДобавляет поле свойства
Добавить поле контактной информацииДобавляет поле конт. информации
Обновить — Из запросаОбновляет поля набора из существующего запроса
Обновить — Из набораОбновляет поля набора из существующего набора
Обновить — Наличие связейПересчитывает значок связи полей набора в макете
Обновить — Наличие свойств и конт. инф.Обновляет признак наличия доп. реквизитов и контактной информации полей набора (или всех наборов)
Вывести информацию о местах использования поля набора данныхВыводит в сообщения подробности о связи поля с другими данными макета

По умолчанию, наборы созданные на основании запроса автоматически обновляются полями из запроса. Для таких полей устанавливается тип “Поле источника”. Изменить что-либо для данного поля невозможно, поскольку оно унаследовано из запроса.

Пользователю доступны следующие пути к полям набора:

Путь к даннымОписание
НаборыДанных.[Набор].[Поле]Поле набора с видом «Первая строка», «Последняя строка» или «Соединение строк»
НаборыДанных.[Набор].Строка.[Поле]Поле строки многострочной коллекции — при условии, что этот набор указан для области в колонке «Набор»
НаборыДанных.[Набор].Итог.[Поле].[Агрегат]Итог по числовой колонке многострочной коллекции
НаборыДанных.[Набор].КоличествоСтрокКоличество строк многострочной коллекции
НаборыДанных.[Набор].[Соединение].[Поле]Поле правого набора, полученное через соединение
НаборыДанных.[Набор].[ПолеДаты].[ФункцияДаты]Значение поля с типом «Дата», преобразованное функцией — например НачалоМесяца. В алгоритмах недоступно
НаборыДанных.СистемныеПоля.[Поле]Системное поле, которое программа заполняет сама: номер страницы, текущая дата, текущий пользователь

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

Если набор создан на основе произвольного алгоритма или имеет алгоритм обработки доступно создание полей с типом “Поле алгоритма”. Для данного поля разработчик должен указать имя и тип данных поля.

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

Конструктор представления

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

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

В некоторых случаях необходимо выполнить собственную нумерацию строк табличной части. Например, допустим у нас есть таблица:

№ВидНоменклатурыНоменклатураКоличество
1ЧайникиTefal1
2ЧайникиBrown1
3ЧайникиSiemens1
4КофеваркиTefal1
5КофеваркиSiemens1

Нам необходимо добавить колонку с номером внутри вида. Добавим поле нумератора “НомерПоВиду” с настройкой

Конструктор нумератора

В результате таблица будет иметь вид

№НомерПоВидуВидНоменклатурыНоменклатураКоличество
11ЧайникиTefal1
22ЧайникиBrown1
33ЧайникиSiemens1
41КофеваркиTefal1
52КофеваркиSiemens1

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

Результат = Окр(СтрокаНабора.Сумма * 20 / 100, 2);

В алгоритме доступны переменные:

ПеременнаяТипНазначение
ЭтотМакетОбработкаОбъект.pw_ИсполнительОбъект исполнителя печатной формы
СтрокаНабораСтрокаТаблицыЗначенийСтрока набора, для которой вычисляется значение. Доступны поля запроса, поля алгоритма набора, доп. реквизиты и контактная информация; значения других вычисляемых полей могут быть ещё не рассчитаны
ДополнительныеСвойстваСтруктураКоллекция для данных, передаваемых между алгоритмами и событиями

При наличии подсистемы “Свойства” (БСП 1С) можно добавить поле из данных реквизитов или свойств по значению определенного поля. Например: у справочника “Контрагенты” есть доп. реквизит “Это подрядчик”. Данное поле мы можем добавить путем доработки запроса. Но для этого надо знать как хранятся данные в подсистеме, а также учитывать некоторые нюансы. При этом конструктор позволяет просто встать на поле набора с типом данных “СправочникСсылка.Контрагенты” и добавить поле из свойств. Выбрать требуемый доп. реквизит (или свойство) и программа автоматически добавит поле “Контрагент_ЭтоПодрядчик”. При формировании печатной формы значение будет считано автоматически.

При наличии подсистемы “Контактная информация” (БСП 1С) можно добавить поле с определенным видом контактной информации по значению определенного поля. Например: у справочника “Организации” есть контактная информация с видом “Юридический адрес”. Данное поле мы можем добавить путем доработки запроса. Но для этого надо знать как хранятся данные в подсистеме, а также учитывать что хранение может быть с историей. При этом конструктор позволяет просто встать на поле набора данных с типом “СправочникСсылка.Организации” и добавить поле с видом конт. информации “Юридический адрес”. Программа автоматически добавит новое поле “Организация_ЮридическийАдрес”. При формировании печатной формы значение будет считано автоматически.

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

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

  1. Запрос — выполняется по всем печатаемым объектам сразу.
  2. Произвольный алгоритм набора — может пересобрать таблицу целиком; дополнительные поля рассчитаются по его результату.
  3. Поля набора — по очередям:
    • поле доп. реквизита (1я очередь)
    • поле конт. информации (2я очередь)
    • вычисляемое поле (3я очередь)
    • поле нумератора (4я очередь)
    • поле представления (5я очередь)
  4. Разделение данных по объектам печати и применение вида набора.

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

  • поле “Контрагент” является владельцем для поля “Контрагент_ЭтоПодрядчик”
  • поле “ВидНоменклатуры” используется в поле нумератора “НомерПоВиду”

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

Программа отличает следующие статусы связи полей

ЗначокСтатусОписание
НеизвестноСтатус связи неизвестен. Устанавливается для добавленных полей до первой записи или изменения данных других закладок макета
Не используетсяПоле связано с источником, НЕ используется в макете
ИспользуетсяПоле связано с источником и используется в макете
Нет источникаПоле НЕ связано с источником, используется в макете
Нет источника, не используетсяПоле НЕ связано с источником, НЕ используется в макете. Как правило такие поля автоматически удаляются из наборов