связь описывающая иерархический спуск должна содержать либо выражение начального значения

Работа с иерархическими детальными записями

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

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

Рассмотрим пример. В примере будем выдавать в отчет иерархический справочник номенклатуры.

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

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

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

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

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

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

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

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

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

link

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

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

settings

Результат такого отчета будет выглядеть следующим образом:

Источник

Связи наборов данных в СКД и принципы их использования

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

Схема компоновки данных, реализованная в 1С, поддерживает три типа источника данных (Рис.1)

Источники данных

Наиболее очевидным и часто используемым разработчиками источником данных является «Запрос».

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

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

Третий источник данных «Объединение». Фактически, этот источник можно рассматривать как один из видов связи. Он объединяет (сводит в одну несколько таблиц), не сопоставляя, однако совпадение тех или иных полей. То есть, если в двух объединяемых таблицах 3 и 4 строки соответственно, то в результирующем источнике данных, будет 7 строк.

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

В качестве полигона для испытаний мы выберем базу УПП, версии 1.3.92.3, работающую в режиме обычного приложения.

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

Таким образом, мы должны:

Процесс выполнения

Пройдем все перечисленные шаги:

Здесь важно обратить внимание на «Имя объекта, содержащего данные», именно это имя нам придется указать в коде модуля отчета.

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

Важно! При создании «Объекта» в коде процедуры при компоновке, значение параметра СтандартнаяОбработка должно быть Ложь.

Переходим на закладку «Связи наборов данных».

Связываем наборы

Заходим на соответствующую закладку схемы (Рис.6).

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

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

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

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

Для двух нижних строк отчета в файле с ценами не нашлось соответствия.

Источник

Новые функции СКД 8.2.14

Что-то вроде FAQ Отзывов (3) bookmarks16loadingВ закладки

В свете ближайшего выхода 8.2.14, попытаюсь описать некоторые новые функции системы компоновки данных.

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

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

1. Настраиваем запрос в СКД.

lmibqfjyhbzmwfdp

2. Настраиваем вычисляемые поля в СКД

2

3. Выполняем настройку компоновки данных на закладке настройки

3

4. Запускаем 1С Предприятие 8.2.14. Открываем отчет. Формируем, получаем.

4

Описание самих новых функций:

1. ТекущаяДата()

Возвращает системную дату. При компоновке макета компоновки во всех выражениях, которые присутствуют в компоновке, функция ТекущаяДата()заменяется значением текущей даты.

2. ВЫЧИСЛИТЬВЫРАЖЕНИЕ()

Синтаксис:

Функция предназначена для вычисления выражения в контексте некоторой группировки.

Функция учитывает отбор группировок, но не учитывает иерархические отборы.

Если конечная запись предшествует начальной, то считается, что записи для расчета детальных данных и расчета агрегатных функций отсутствуют.

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

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

Тип: Строка. Выражение, которое надо вычислить.

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

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

Тип: Строка. Параметр может принимать следующие значения:

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

Компоновщик макета компоновки данных при генерации макета компоновки данных при выводе в макет поля-ресурса, по которому выполняется группировка, помещает в макет выражение, вычисляемое при помощи функции ВычислитьВыражение(), с указанием параметраГруппировкаНеРесурса. Для остальных ресурсов в группировке по ресурсу помещаются обычные выражения ресурсов.

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

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

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

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

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

Если следующая запись выходит за пределы группировки, то считается, что записей нет. Например, если записей 3 и для третьей записи получают Следующая(), то считается, что записей нет.

При получении следующей записи для итога по группировке считается, что записи нет.

При получении для итога по группировке получается первая запись.

В качестве записи будет получаться первая запись, значение поля упорядочивания у которой больше или равно указанному значению. Например, если в качестве поля упорядочивания используется поле Период, и оно имеет значения 01.01.2010, 01.02.2010, 01.03.2010, и требуется получить ОграничивающееЗначение(ДатаВремя(2010, 1, 15)), то будет получена запись с датой 01.02.2010.

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

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

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

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

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

Если следующая запись выходит за пределы группировки, то считается, что записей нет. Например, если записей 3 и для третьей записи получают Следующая(), то считается, что записей нет.

При получении следующей записи для итога по группировке считается, что записи нет.

При получении для итога по группировке получается первая запись.

В качестве записи будет получаться первая запись, значение поля упорядочивания у которой больше или равно указанному значению. Например, если в качестве поля упорядочивания используется поле Период, и оно имеет значения 01.01.2010, 01.02.2010, 01.03.2010, и требуется получить ОграничивающееЗначение(ДатаВремя(2010, 1, 15)), то будет получена запись с датой 01.02.2010.

Тип: Строка. Перечисляются выражения, разделенные запятыми, которые описываютправила упорядочивания. Если не указана, то упорядочивание выполняется также как и у группировки, для которой вычисляется выражение. После каждого выражения можно указать ключевое слово Возр (для упорядочивания по возрастанию), Убыв (для упорядочивания по убывания) и Автоупорядочивание (для упорядочивания ссылочных полей по полям, по которым нужно упорядочивать объект, на который выполняется ссылка). Слово Автоупорядочивание может использоваться как со словом Возр, так и со словом Убыв.

Тип: Строка. Аналогично параметру Сортировка. Применяется для упорядочивания иерархических записей. Если не указано, компоновщик макета генерирует упорядочивание в соответствии с упорядочиванием, указанным в параметре Сортировка.

Тип: Строка. Указывает правило определения предыдущей или следующий записи в случае если есть несколько записей с одинаковым значением упорядочивания:

Например, если полученная последовательность упорядочена по дате:

Дата ФИО Значение
1 01 января 2001 года Иванов М. 10
2 02 января 2001 года Петров С. 20
3 03 января 2001 года Сидоров Р. 30
4 04 января 2001 года Петров С. 40

Если значение параметра равно Отдельно, то:

§ предыдущей записью к записи 3 будет запись 2.

Если значение параметра равно Вместе, то:

§ предыдущей записью к записи 3 будет запись 1.

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

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

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

Список новых функций:

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

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

ЗначениеЗаполнено( ) – Возвращает Истина, если значение отлично от значения данного типа по умолчанию, отлично от значенияNULL, отлично от пустой ссылки, отлично от значения Неопределено. Для логических значений осуществляется проверка на значение NULL. Для строк осуществляется проверка на отсутствие не пробельных символов

5

6

7

8

ДлинаСтроки( ) – Функция предназначена для определения длины строки. Параметр — выражение строкового типа

9

10

Источник

Хрусталева пример 16

Пользователь в инпуте пишет пример на сложение, например, 5+2. Внизу в виде картинок с этими цифрами вывести пример
Пользователь в инпуте пишет пример на сложение, например, 5+2. Внизу в виде картинок этих цифер.

Как записать пример в Maxima? Пример внутри
Здравствуйте. Кто может записать этот пример в программе? Чтобы считал и не выдавал ошибку

Не компилируется пример пример!
Добрый день, я только-только решил начать изучать програмирование на С++! Как учебное пособие.

На закладке «Связи наборов данных» выполняется настройка связей между различными наборами данных по одному или нескольким полям. Каждая связь наборов данных содержит следующие свойства:

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

пример
всем привет. вообщем интересно стало, можете дать само или ссылку на платное приложение(оплату.

Пример
Нужен код программы..

tickПример..
10+20/2!+30/4!+40/6!+50/8. над написать в программном коде.

пример
надо решить пример который на картинке

Пример ((a-c)*c*b)/(b+c)
Учусь не судите строго писал со знакомым по лекции Должно получиться 1 а получаеться 0 помогите.

Источник

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

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

—В этом отчете не будет работать отбор по вхождению в иерархию. Но если это нам очень нужно, это можно легко поправить, воспользовавшись, полем контроль иерархии. Удачи.—

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

Спасибо за решение, на самом деле век живи век учись.

Но по привычке делаю иерархию таблицами значений и циклами))). благо задачки мелкие, пока позволяют)

Все конечно здорово, но не работает так как описано выше.
1. «СтруктураПараметров.Вставить(«Иерархия», ТаблИерархии); а в схеме компоновки данных понятие ТаблИерархии не встречается.
2. На самой первой картинке с указанными полями выдается ошибка
<ВнешнийОтчет.БалансЦПР.МодульОбъекта(201)>: Ошибка при вызове метода контекста (Инициализировать)
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, СтруктураПараметров, ДанныеРасшифровки);
по причине:
Ошибка компоновки данных
по причине:
Ошибка инициализации
по причине:
Не найдено поле замены «СтатьяБалансаРодитель»

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

<ВнешнийОтчет.БалансЦПР.МодульОбъекта(213)>: Ошибка при вызове метода контекста (Следующий)
ЭлементРезультата = ПроцессорКомпоновки.Следующий();
по причине:
Ошибка компоновки данных
по причине:
Ошибка получения данных
по причине:
Связь описывающая иерархический спуск должна содержать либо выражение начального значения, либо имя параметра связи «Иерархия»

Гуру, может поможете разобраться?

Нам потребуется заранее подготовленные две таблицы:

Таблица значений статей доходов и расходов вида:
Период, СтатьяБаланса, Сумма.

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

У нас таблица иерархии
ИдентификаторСтроки,
ИдентификаторИзделия,
Нонменклатура,
Ведомость

Что в условиях связи прописать?

Таблица иерархии. Колонки
1.элемент
2.Родитель

У данного метода есть недостаток. Например имеем
ТабДанные:
Родитель Элемент ДопРеквизит
—————————————————
Родитель1 Элемент1 ДопРеквизит1
Родитель2 Элемент1 ДопРеквизит2

ТабИерархия:
Родитель Элемент
—————————————————
(пусто) Родитель1
Родитель1 Элемент1
(пусто) Родитель2
Родитель2 Элемент1

Отчет будет правильным в плане иерархии, т.е.
Родитель1
Элемент1 ДопРеквизит1
Родитель2
Элемент1 ДопРеквизит1

но колонка ДопРеквизит для Родитель2 будет равна ДопРеквизит1, т.е. из таблицы ТабДанные берется неправильная строка, поскольку связь таблиц с данными и иерархией только по полю Реквизит. Если добавляешь связь ТабДанные.Родитель = ТабИерархия.Родитель тогда иерархии нет в отчете, просто списком

Собираю все нужные данные в следующих таблицах значений «ТаблицаОстатков» и «ТаблицаСостава».

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

В СКД сделаны настройки согласно стандартным рекомендациям по построению иерархии в СКД.

Однако вместо ожидаемой иерархии получаю плоскую таблицу.

Что я делаю не так и как правильно построить произвольную иерархию с условием что в остатках по которым она должна строиться могут быть как элементы(без состава) так и многоуровневые комплекты?

Источник

Понравилась статья? Поделить с друзьями: