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

Подстановка и добавление в отчет на СКД произвольных значений, которые нельзя получить запросом
Часто требуется сделать отчет, в котором какую-то цифру или значение не получается получить в запросе, а требуются вызовы каких-то процедур и функций. При этом отказываться от СКД с её мощной системой отборов и группировок просто глупо. Предлагается два подхода для решения этой проблемы.
Обратите внимание, что в этой схеме набор данных — Объект и все поля создаются вручную. Также обязательно нужно указать типы полей компоновки, иначе отбор по ссылочным типам работать не будет. И еще эта схема является основной схемой отчета, т.е. в ней мы создаем макет, отборы и т.д.
Обратим внимание на один важный момент. Схемы мы используем две, а настройка отчета — одна.
А затем отключаем в отборе те поля, которые будут изменяться. Ведь если мы их не отключим и сделаем отбор по такому полю, то отбор сработает уже в первой схеме, где поле заполнено совсем другим значением или не заполнено вовсе:
Второй подход, назовем «Подстановка», заключается в том, что вывод результата компоновки происходит в цикле построчно и в этот момент заменяются значения элемента результата на произвольные.
Схема используется одна, особенность только в том, что в обработчик модуля объекта отчета ПриКомпоновкеРезультата подставляется следующий код:
Итак, у каждого из подходов есть свои плюсы и минусы.
- Плюсы:
- Более полные возможности интерактивной компоновки: измененные данные можно полноценно фильтровать, группировать и т.д.
- Нет проблем с получением ссылочных типов данных
- Медленно формируется (выгрузка в таблицу значений, перебор, обратная загрузка)
- Возможны трудности с отбором по изменяемым полям, поскольку настройка одна, а схемы две и нужно понимать что и как будет отбираться
- Вторую схему нужно делать вручную — прописывать поля и их типы. Если полей много, то можно выгрузить первую схему в xml, слегка модифицировать и загрузить во вторую
- Плюсы:
- Быстрота формирования отчета (нет никаких промежуточных схем и выгрузов в таблицы значений)
- Не нужно заботиться о пользовательском отборе, поскольку схема одна — настройка одна. Нужно только помнить, что нельзя отбирать по изменяемым полям
- Меньше возможности интерактивной компоновки: измененные данные нельзя отбирать, группировать и т.д., поскольку замена значений происходит уже после всех процедур компоновки в момент вывода данных
- Возможны проблемы с получением ссылок данных из их представления
Я использую в практике отчеты с обоими вариантами замены значений. Подстановка намного быстрее работает, но не всегда ее можно применить.
Промокоды на Займер на скидки
Займы для физических лиц под низкий процентНадеюсь, что пост получилось написать понятным языком и кому-нибудь пригодится.
Дерево значений обход рекурсией | Услуги 1С программиста, обслуживание, автоматизация, разработка ПО.// Инициализация процессора компоновки
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных ;
ПроцессорКомпоновки . Инициализировать ( Макет );Вывод скд в дерево значений
Приложена готовая к использованию библиотека функций для создания и удаления графических объектов, а также для связи элементов схемы соединительными линиями.
Мнение эксперта1С:Эксперт по технологическим вопросамЗадавайте мне вопросы, и я помогу разобраться!В системе компоновки данных существует возможность выводить отчет не только в табличный документ, но и в коллекции значений таблица значений, дерево значений. Заметки по 1С: Предприятие 8.2, 8.3: Выгрузка результата СКД в таблицу значений Обращайтесь в форму связиВывод отчета в Таблицу значений или Дерево значений:
// Отключение вывода общих итогов
Настройки . ПараметрыВывода . УстановитьЗначениеПараметра ( «ГоризонтальноеРасположениеОбщихИтогов» , РасположениеИтоговКомпоновкиДанных . Нет );
Настройки . ПараметрыВывода . УстановитьЗначениеПараметра ( «ВертикальноеРасположениеОбщихИтогов» , РасположениеИтоговКомпоновкиДанных . Нет );// Компоновка макета
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных ;
Макет = КомпоновщикМакета . Выполнить ( СхемаКомпоновкиДанных , Настройки . Тип ( «ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений» ));// Инициализация процессора компоновки
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных ;
ПроцессорКомпоновки . Инициализировать ( Макет );// Дерево значений, в которую будет получен результат
Результат = Новый ДеревоЗначений ;// Получение результата
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений ;
ПроцессорВывода . ОтображатьПроцентВывода = Истина;
ПроцессорВывода . УстановитьОбъект ( Результат );ПроцессорВывода . Вывести ( ПроцессорКомпоновки , Истина);
Вывод отчета в табличный документ:
ЭтотОбъект = РеквизитФормыВЗначение ( «Объект» );
СхемаКомпоновкиПродажи = ЭтотОбъект . ПолучитьСхемуПродажи ();КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных ;
Макет = КомпоновщикМакета . Выполнить ( СхемаКомпоновкиПродажи , КомпоновщикНастроекПродаж . ПолучитьНастройки (),
,, Тип ( «ГенераторМакетаКомпоновкиДанных» ));ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных ;
ПроцессорКомпоновки . Инициализировать ( Макет );ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент ;
ПроцессорВывода . ОтображатьПроцентВывода = Истина;ПроцессорВывода . УстановитьДокумент ( ТабличноеПолеРезультат );
ПроцессорВывода . Вывести ( ПроцессорКомпоновки , Истина);
Пример установки параметров:
ПериодОтчета . ДатаНачала = НачалоДня ( НачалоДня ( ТекущаяДата ()) — ( 44 * 3600 * 24 ));
ПериодОтчета . ДатаОкончания = КонецДня ( ТекущаяДата ());//устанавливаем параметры тербования выгрузки по периоду 45 дней
Отчет . КомпоновщикНастроек . Настройки . ПараметрыДанных . УстановитьЗначениеПараметра (Новый ПараметрКомпоновкиДанных ( «ПериодОтчета» ), ПериодОтчета );Пример установки пользовательской настройки:
Важно, пользовательская настройка доступна только в ПриОткрытии
ПериодОтчета = Новый СтандартныйПериод ;
ПериодОтчета . ДатаНачала = НачалоДня ( НачалоДня ( ТекущаяДата ()) — ( 44 * 3600 * 24 ));
ПериодОтчета . ДатаОкончания = КонецДня ( ТекущаяДата ());ИдентификаторПользНастройки = Отчет . КомпоновщикНастроек . ПользовательскиеНастройки . ПолучитьИдентификаторПоОбъекту ( Отчет . КомпоновщикНастроек . Настройки . ПараметрыДанных . НайтиЗначениеПараметра (Новый ПараметрКомпоновкиДанных ( «ПериодОтчета» )));
ПараметрПользовНастройки = Отчет . КомпоновщикНастроек . ПользовательскиеНастройки . Элементы . Найти ( ИдентификаторПользНастройки );Работа с деревом значений для новичков (Управляемые формы 8.3)
В обычном приложение аналогом является процедура СоздатьКолонки , которая удаляет старые колонки и загружает новые колонки из источника данных в табличное поле.
Мнение эксперта1С:Эксперт по технологическим вопросамЗадавайте мне вопросы, и я помогу разобраться!Б для тонкого клиента обработку коллекции необходимо выполнять на сервере, там же следует обеспечить вывод результата на экран. Построитель Отчета 1C Вывести Дерево Значений Обращайтесь в форму связиВывод построителя отчета
Метод “Выполнить()” выполняет запрос построителя отчета и заполняет свойство “Результат”.
С помощью метода “ПолучитьЗапрос()” можно получить запрос построителя отчета, который выполняется при вызове метода “Выполнить()”.Метод “Вывести()” выводит результат в табличный документ или диаграмму. Если не указать объект, в который требуется выполнить вывод, то будет создан новый табличный документ.
Пример вывода в новый табличный документ:
Построитель.Вывести();Пример вывода в существующий табличный документ:
Построитель.Вывести(ЭлементыФормы.РезультатТаблица);Пример вывода в диаграмму:
Построитель.Вывести(ЭлементыФормы.РезультатДиаграмма, » Количество»);Волшебство программирования на 1С: Предприятие 7.7 и 8.0. Выпуск 68 (1c): Рассылка.
- “РазмещениеИзмеренийВСтроках,
- РазмещениеИзмеренийВКолонках,
- РазмещениеИтоговВСтроках,
- РазмещениеИтоговВКолонках,
- РазмещениеРеквизитовИзмеренийВСтроках,
- РазмещениеРеквизитовИзмеренийВКолонках
Группировки и поля построителя отчета
Измерение построителя отчета – это группировка по строкам или колонкам.
- “Имя” (идентификатор реквизита) (пример: “Номенклатура”, “Контрагент”…),
- “Представление” (представление при выводе) (пример: “Документ продажи”, “Единица измерения”…),
- “ПутьКДанным” (путь к полю выборки запроса) (пример: “Номенклатура”, “ДокументПродажи.Организация”…)
Кроме этого, есть несколько свойств, позволяющих назначить группировке макеты, которые будут использоваться при выводе в табличный документ.
- “Макет” – имя области в макете построителя отчета или отдельный макет, используемый при выводе группировки.
- “МакетИерархии” – имя области в макете построителя отчета или отдельный макет, используемый при выводе иерархии группировки.
- “МакетПодвала” – имя области в макете построителя или отдельный макет, используемый при выводе подвала группировки.
- “МакетПодвалаИерархии” – имя области в макете построителя или отдельный макет, используемый при выводе подвала иерархии группировки.
- “МакетыПодваловУровней” – массив макетов подвалов для различных уровней группировок.
- “МакетыУровней” – массив макетов для различных уровней группировок.
- “Имя” (идентификатор поля) (пример: “Количество”, “КодНоменклатуры”, “Период”…),
- “Представление” (представление при выводе) (пример: “Кол-во”, “Код”, “Период”…) и
- “ПутьКДанным” (путь к полю выборки запроса) (пример: “Количество”, “Номенклатура. Код”, “Период”…).
Со списком группировок или полей можно выполнять ряд действий.
- “Вставить()“ – добавить группировку/поле в указанную позицию.
- “Добавить()“ – добавить группировку/поле в конец списка.
- “Индекс()“ – получить индекс группировки/поля в списке.
- “Количество()“ – получить количество группировок/полей в списке.
- “Найти()“ – найти группировку/поле в списке по имени.
- “Очистить()“ – очистить список группировок/полей.
- “Получить()“ – получить группировку/поле по индексу.
- “Сдвинуть()“ – сдвинуть группировку/поле на указанное количество позиций.
- “Удалить()“ – удалить группировку/поле из списка
Микрофинансирование → Микрокредиты → Специальные предложения → Скачать файлы → Обзор Быстроденег → Предмет договора → Ответственность сторон → Отличные наличные→ Экспресс займы
💥Принимайте участие в опросе и получайте бесплатную консультацию