Ошибка вложенности элементов результата компоновки данных

Пытаюсь программно вывести отчет

Настройки = КомпоновщикНастроек.Настройки;

КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;

МакетКомпоновки   = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки);    

    
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;

ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки);

    
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;

ПроцессорВывода.УстановитьДокумент(Результат);

    
Счетчик = 0;

Пока Истина Цикл

        
        
    ЭлементРезультата = ПроцессорКомпоновки.Следующий();

        
        // Получим следующий элемент результата компоновки

        Если ЭлементРезультата = Неопределено Тогда

            
            Прервать;

            
        Иначе

            
    ПроцессорВывода.ВывестиЭлемент(ЭлементРезультата);

            
КонецЕсли;

        
    ОбработкаПрерыванияПользователя();

        
КонецЦикла;

    
ПроцессорВывода.ЗакончитьВывод();

Выдает ошибку

«ошибка вложенности элементов результата компоновки данных»

в чем может быть дело???  В СКД простой запрос к справочнику…

Пытаюсь программно вывести отчет

Настройки = КомпоновщикНастроек.Настройки;

КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;

МакетКомпоновки   = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки);    

    

ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;

ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки);

    

ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;

ПроцессорВывода.УстановитьДокумент(Результат);

    

Счетчик = 0;

Пока Истина Цикл

        
    ЭлементРезультата = ПроцессорКомпоновки.Следующий();

        

        // Получим следующий элемент результата компоновки

        Если ЭлементРезультата = Неопределено Тогда

            
            Прервать;

            
        Иначе

            
    ПроцессорВывода.ВывестиЭлемент(ЭлементРезультата);

            
КонецЕсли;

        
    ОбработкаПрерыванияПользователя();

        
КонецЦикла;

    
ПроцессорВывода.ЗакончитьВывод();

Выдает ошибку

«ошибка вложенности элементов результата компоновки данных»

в чем может быть дело???  В СКД простой запрос к справочнику…

Есть СКД



[/URL][/img]

[/URL][/img]


есть запрос большой, который упорядочивается этим СКД.
сам отчет работает (СКД + Запрос).
Но нужно вывести на форму в ТЗ.

Процедура Кнопка4Нажатие(Элемент)
Начисленно_сотрудникам.Загрузить(РезультатКомпоновкиВТЗ(СКД));
КонецПроцедуры

Функция РезультатКомпоновкиВТЗ(СКД) Экспорт
    КомпоновщикНастроек = Новый КомпоновщикНастроекКомпоновкиДанных;
    КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СКД));
    КомпоновщикНастроек.ЗагрузитьНастройки(СКД.НастройкиПоУмолчанию);

    НастройкиКомпоновщика = КомпоновщикНастроек.Настройки;
    ПараметрыНастройки = НастройкиКомпоновщика.ПараметрыДанных;

    // устанавливаем параметры отчета
    ЗначениеПараметра = ПараметрыНастройки.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("ДатаНачала"));
    ЗначениеПараметра.Значение = ДатаНачала;

    ЗначениеПараметра = ПараметрыНастройки.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("ДатаОкончания"));
    ЗначениеПараметра.Значение = КонецДня(ДатаОкончания);
    ЗначениеПараметра = ПараметрыНастройки.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("Место_работы"));
    ЗначениеПараметра.Значение = Место_работы;





    //Получим макет компоновки   
    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
    МакетКомпоновкиДанных = КомпоновщикМакета.Выполнить(СКД, НастройкиКомпоновщика,,,Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));

    //Через процессор компоновки получим результат
    ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновкиДанных);

    ТаблицаРезультат = Новый ТаблицаЗначений;
    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;

    ПроцессорВывода.УстановитьОбъект(ТаблицаРезультат);
    ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);



   Возврат ТаблицаРезультат;

КонецФункции

В результате выходит ошибка:

Цитировать{Обработка.РабочийСтолУниверсал.МодульОбъекта(24)}: Ошибка при вызове метода контекста (Выполнить)
    МакетКомпоновкиДанных = КомпоновщикМакета.Выполнить(СКД, НастройкиКомпоновщика,,,Тип(«ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений»));
по причине:
Ошибка компоновки макета
по причине:
Ошибка генерации макета
по причине:
Не поддерживается вывод таблиц, диаграмм и вложенных отчетов в универсальную коллекцию значений

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

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

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

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

КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновкиДанных = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, , , Тип(«ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений»));
ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновкиДанных);

ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
ПроцессорВывода.УстановитьОбъект(ДеревоРезультата);
ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);

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

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

Если при выполнении ругается «Неизвестный тип макета», значит забыл указать Тип(«ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений») при выполнении компановщика макета.

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

Описание ошибки:
Платформа 1С: Предприятие 8.3.16.1063. Клиент-серверный вариант работы базы. Конфигурация не указана, т.к., забегая вперед, не в ней проблема.

Найденные решения:

Столкнулся с проблемой при реализации отчета на СКД. При этом, как привычно — запрос для сбора данных тестировался с помощью обработки «Консоль запросов» для 1С 8. Удивительно, но получилось так, что выводимые данные результата запроса в консоли и реализованном отчете отличались. В консоли результат был верный, в СКД — не верный.

В частности, на примере, видно, что сумма из колонки «Полная оплата» в результате запроса консоли в результате отчета на СКД содержится в колонке «Без оплаты».

1C 8 в консоли запросов и скд разные данные

Было предположено, что возможно интерпретатор СКД и консоли все-таки по-разному воспринимают текст запроса. Т.е. СКД что-то еще проделывает с запросом, в результате чего получается, что в 1С 8 один и тот же запрос возвращает разные данные в консоли и СКД.

К сожалению предположение подтвердилось. В обсуждении на форуме infostart.ru «Разные данные в консоли запросов и СКД» было явно объяснено, что после обработки запроса СКД своим оптимизатором конечный запрос может получиться немного, но отличным от исходного. Одна из возможных и распространенных проблем — это параметры типа «Дата» вида «дата и время» — банально — не совпадение временных периодов в параметрах запроса в консоли и передаваемых в параметры в СКД, как например обсуждается в теме «Разные результаты выполнения запроса в консоли и в СКД» на сайте avprog.ru. Но это точно был не этот случай.

1c 8 скд и консоль разные данные

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

1с 8 КонсольЗапросов И Отчет СКД выводят разные данные

В моем случае «хитрым полем» оказалось не Минимум(), а Максимум() для поля с типом значений «Дата» (дата со временем):  МАКСИМУМ(РасчетыСКонтрагентамиОбороты.Период) КАК Период

На скрине ниже видно, что СКД его не обрабатывает прямо совсем.

1С 8 в консоли запросов данные правильные, а в СКД нет, не правильные

Вариант решения проблемы предполагался в том, чтобы заменить временную таблицу, т.к. именно временные таблицы СКД и преобразует, на вложенный запрос. И, как видно на скрине примера, как раз выражение Максимум() сдержится в тексте запроса, который помещается во временную таблицу. Как известно, вложенные запросы по методике — это наименее производительный результат для СКД, чем временные таблицы, но других очевидных вариантов не оставалось. Но вариант с вложенным запросом не решил проблему. Хотя некоторым помогает решить.

Проблема оказалась в ином, о чем можно найти в самом низу обсуждения все в той же ветке форума infostart.ru «Разные данные в консоли запросов и СКД», а еще более подробно по ссылке из нижепредложенного скрина  forum.infostart.ru/forum9/topic157926/

1C 8 Различаются результаты запроса и отчета в СКД

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

1С 8 почему разные данные результата запроса в СКД и консоли запросов

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

Оцените, помогло ли Вам предоставленное описание решения ошибки?




© www.azhur-c.ru 2014-2020. Все права защищены. Использование текстов и изображений с данной страницы без письменного разрешения владельца запрещено. При использовании материалов с данной страницы обязательно указание ссылки на данную страницу.

10-09-2020

Журавлев А.С.
(Сайт azhur-c.ru)

Большая обзорная статья для знакомства с СКД “под капотом”. Мы рассмотрим, из чего состоит система компоновки данных, как происходит формирование итогового результата, и затронем многие механизмы и нюансы, связанные с СКД.

Содержание

Основные понятия и термины СКД

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

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

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

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

Схема компоновки – это краеугольный камень всей СКД. Она описывает все правила получения и обработки данных. Ключевые элементы схемы компоновки:

  • Источники данных – запросы, объединения, объекты
  • Поля компоновки
  • Параметры
  • Вычисляемые поля
  • Ресурсы

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

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

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

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

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

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

Важно! Еще раз обращаю внимание, что итоговые запросы, которые формируются в макете компоновки данных, могут сильно отличаться от текстов запросов, указанных в схеме компоновки. Итоговые запросы получаются в результате применения условий по отборам, выбранным полям (те поля, которые не используются, удаляются из текста запроса, кроме полей с ролью “Остатки”), конструкциям расширения языка запросов для СКД и параметрам. Например, отборы могут преобразоваться в параметры вида &П1, &П2 и т.д.

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

Схема компоновки данных как объект языка может сериализовываться в/из XML, а также в/из XDTO. Кроме того, в редакторе схемы компоновки данных доступна возможность выгрузить схему в XML-файл, либо загрузить из файла.

1С схема компоновки данных сохранить в xml

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

В СКД можно использовать два вида сортировки:

  1. Сортировка на уровне запроса – использование секции “Упорядочить”. В этом случае сортировку в настройках поменять нельзя
  2. Сортировка в настройках компоновки. Данная сортировка применяется уже к выбранным данным, и в итоговый макет компоновки не включается. Сортировка, заданная в настройках компоновки является приоритетной, т.е. она замещает собой сортировку, заданную в запросах.

Для фильтрации результатов, в СКД используется три механизма:

  1. Стандартные условия на уровне запроса – они прописываются в тексте запроса, управлять ими из настроек нельзя. Если в тексте запроса используются параметры, до выполнения компоновки они должны быть заполнены, иначе платформа выдаст сообщение об ошибке.
  2. Условия, записанные в расширении языка запросов. В конструкторе их можно задать на закладке Компоновка данных / Условия. Поля, добавленные таким образом, будут иметь ограничения при настройке – их нельзя указать в качестве выбранных полей, полей группировки или сортировки. Но они будут доступны для использования в отборах. В итоговый запрос макета компоновки данных такие условия попадут, только если они заданы. Кроме того, указание параметров не является обязательным.
  3. Отборы, заданные в настройках компоновки данных. Данный вид отборов распространяется на все наборы данных, и на все запросы в пакетных запросах, если возможно. Этими отборами пользователь может управлять на уровне варианта отчета или пользовательских настроек.

Параметры СКД

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



  • Имя — Имя параметра, как оно задано в тексте запроса


  • Заголовок — представление параметра в настройках компоновки (пользователь будет видеть именно заголовок)


  • Тип — тип значений параметра


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


  • Доступен список значений — Установка этого флажка влияет на то, может ли параметр принимать список значений, или только одно значение.


  • Значение — значение параметра по умолчанию


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


  • Параметр функциональной опции — если в СКД используются поля, которые входят в состав параметризируемой функциональной опции, можно управлять их видимостью, указав соответствующий параметр ФО. Параметр СКД и параметр ФО в этом случае должны иметь одинаковый тип. Важно! Значения не параметризируемых ФО также учитываются СКД и влияют на видимость полей в пользовательском режиме.


  • Включать в доступные поля — флажок отвечает за видимость параметра в настройках компоновки, на закладках «Поля», «Отбор» и «Сортировка»


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


  • Запрещать не заполненные значения — флажок, отвечающий за проверку заполнения параметра


  • Использование — данное свойство параметра влияет на использование этого параметра в итоговом запросе макета компоновки. Значение «Всегда» — отключить использование параметра в пользовательском режиме будет нельзя. Параметр всегда будет использоваться в итоговом макете компоновки. Значение «Авто» — в случае, если параметр используется в расширении запроса схемы компоновки (в фигурных скобках), либо не используется в тексте запроса вообще (например, какой-то служебный параметр, добавленный разработчиком), его использование можно отключить в пользовательских настройках. В этом случае он будет отсутствовать в итоговом макете компоновки.


  • Параметры редактирования — открывает окно настроек редактирования, где можно задать формат редактирования, маску, параметры выбора и др.

Поля схемы компоновки данных

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

Основные поля СКД

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

  • Путь – строка, описывающая путь к данным, по которому данное поле будет использоваться в выражениях вычисляемых полей, в ресурсах и в настройках компоновки. Для организации иерархии вложенных полей можно записывать путь через точку, например “Номенклатура.Артикул” или “Контрагент.ОсновнойДоговор.ВложенныйРеквизит2Уровня”. Кроме того, путь может указываться строкой, содержащей пробелы. В этом случае поля с пробелами в именах должны указываться в квадратных скобках.
  • Заголовок – строка с заголовком для пользовательского режима. Отображается в пользовательских настройках, при редактировании варианта отчета в режиме 1С Предприятие, в шапке отчета.
  • Ограничение доступности поля – группа флажков, позволяет отключить доступность поля для указания в выбранных полях, отборах, группировках и сортировке.
  • Ограничение доступности реквизитов поля – группа флажков, отвечает за то, как можно использовать реквизиты поля через точку в пользовательских настройках. Важно! Если не ограничено использование вложенных реквизитов, то даже у самого поля установлен флаг ограничения, оно все равно будет доступно!
    Роль
  • Роль – группа настроек, описывающих использование поля при расчете итогов по группировкам для полей остатков. Эти настройки используются при выводе полей виртуальных таблиц “Остатки и обороты” для регистров накопления и регистров бухгалтерии.
  • Выражение представления – выражение на языке выражений СКД, позволяющее переопределить стандартное представление поля. Можно использовать экспортные функции общих модулей, все доступные поля, а также функции языка выражений СКД.
  • Выражения упорядочивания – позволяет задать параметры сортировки, которые будут использоваться при выборе данного поля в настройках сортировки. Указанные выражения упорядочивания переопределяют параметры сортировки по полю, указанные в настройках. Т.е. сортировка будет выполняться по тем параметрам, которые заданы в выражениях упорядочивания.
  • Проверка иерархии: набор данных и параметр – данные поля предназначены для реализации собственной нестандартной иерархии.
  • Тип значения – влияет на допустимые типы значений при выборе поля в качестве значения отбора.
  • Доступные значения – список доступных значений для указания в отборе. Предварительно необходимо обязательно выбрать тип значения для поля.
  • Оформление – позволяет настроить оформление поля – цвет, шрифт, формат и прочее. Важно! Оформление вида текст не работает корректно – произвольный текст не выводится.
  • Параметры редактирования – влияют на редактирование поля при выборе его в отборе в настройках компоновки. Во многом они повторяют настройки элемента формы “Поле ввода”. Можно задать маску, параметры выбора и связи параметров выбора, формат редактирования и другие параметры.

Что означают роли полей схемы компоновки

Роли полей компоновки данных служат для корректного расчета начального и конечного остатков. Указание роли позволяет СКД верно интерпретировать поле. Роли и связанные с ними настройки задаются в отдельном окне:

Роли полей СКД

  • Период – данная роль сообщает СКД, что поле является полем-периодом. В числовом поле рядом следует указать порядковый номер периода от самого младшего к самому большому, начиная с поля НомерСтроки. Поля периодов нельзя использовать в группировках совместно с другими полями – это связано с механизмом расчета итогов по полям остатков.
    В случае, если используется поле периода – Регистратор, вместе с ним обязательно должно присутствовать дополнительное поле периода. Если в параметрах виртуальной таблицы указана периодичность “Авто”, следует выбрать поле “ПериодСекунда”; если выбрана периодичность “Регистратор”, то следует выбрать поле “Период”.
  • Дополнительный – установка этого флажка означает, что данное поле-период является не обязательным. В этом случае выбор дочерних периодов в отчете не требует выбора самого этого поля. Если флажок отключен, то использование дочернего поля-периода требует использования в группировке и самого данного поля. Например, стандартно при выборе периодов из виртуальной таблицы оборотов или остатков и оборотов, поля Регистратор и ПериодСекунда не являются дополнительными, а все остальные (ПериодМинута, ПериодЧас и др.) имеют признак “Дополнительный”.
    Важно! При одновременном использовании группировок по неделям и по месяцам, может возникнуть дублирование группировки по неделям, в том случае, если часть недели приходится на один месяц, а часть – на другой.
    Также, обратите внимание, что если поле указано в качестве поля-периода, то становится невозможным выбор подчиненных полей (реквизитов) данного поля в качестве группировки.
  • Измерение – данный признак сообщает СКД, что поле является измерением. Это используется для корректного расчета итогов по полям остатка. Эту роль необходимо указывать для полей группировок, по которым будет производиться расчет итогов. В случае, если группировка осуществляется не по самому измерению, а по вложенному реквизиту (например, измерение – Товар, а группировка по реквизиту Товар.Артикул), то для поля Товар.Артикул следует указать родительское поле. Для самого родительского поля также должен быть указан признак “Измерение”.
  • Счет – Указание данного поля имеет смысл при рассчете итогов по полям бухгалтерских остатков. Данный признак означает, что поле является полем счета. Можно указать вид счета, указав строку на языке выражений СКД. Результатом выражения должно быть значение перечисления ВидСчета – Активный, Пассивный, Активно / Пассивный. Также можно задать вид счета числом: 0 – активный, 1 – пассивный, 2 – активно-пассивный. Если вид счета не указан, СКД будет интерпретировать данный счет как активно-пассивный.
  • Остатки – роль следует указывать для полей начального и конечного остатков. Имеет смысл при работе с виртуальными таблицами регистров. Данная роль имеет следующие настройки:
    Имя – произвольное имя группы полей. Должно быть одинаковым для полей начального и конечного остатков.
    Тип – тип остатка: начальный или конечный
    Бух.тип – при работе с регистрами бухгалтерии, следует указать тип итогов – дебит или кредит
    Поле счета – также для регистров бухгалтерии. Имя поля бухгалтерского счета, для которого рассчитываются остатки

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

Помимо перечисленных ролей, имеются два дополнительных признака:
Игнорировать значения NULL – если флаг включен, то в результат не будут включены групповые записи по данному полю, если оно содержит значение NULL

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

Вычисляемые поля СКД

Вычисляемые поля схемы компоновки данных – это дополнительные поля, значения которых вычисляются на основе полей наборов данных.
Таблица вычисляемых полей имеет практически тот же состав колонок, что и у основных полей. У вычисляемых полей компоновки данных отсутствует возможность строить по ним произвольную иерархию и рассчитывать итоги по остаткам. Соответственно, отсутствуют поля “Роль”, “Проверка иерархии: набор данных” и “Проверка иерархии: параметр”.
Вычисляемые поля имеют дополнительную колонку “Выражение”, которое и описывает способ вычисления поля на языке выражений СКД. Как и в любых выражениях на языке выражений СКД, можно использовать все основные поля компоновки, экспортные функции общих модулей и встроенные функции СКД.
Важно! В выражении вычисляемого поля СКД нельзя использовать другие вычисляемые поля!

Ресурсы схемы компоновки

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

СКД настройка ресурсов Рассчитывать по

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

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

СКД настройка ресурсов для группировки иерархии

Процессор Вывода результата Компоновки Данных

Вывод результата компоновки в
в таблицу или дерево значений

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

 Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;  

Свойства:

  • ОтображатьПроцентВывода – Содержит признак отображения индикатора с процентом вывода отчета.

Методы:

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

Важно! В параметрах метода выполнть компоновщика макета при выводе результата в колекцию значений нужно указать тип генератора макета компоновки данных ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений
иначе: используется значение по умолчанию ГенераторМакетаКомпоновкиДанных , предназначенное для вывода резуьтата в табличный документ

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

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

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

Объект имеет аналогичные свойства и методы как у объекта для вывода результата в таблицу значений. Только в этом случае, для установки документа, который нужно выводить называется используется метод УстановитьДокумент

Пример вывода отчета из встроенного языка

Методические рекомендации

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

КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, КомпоновщикНастроек.ПолучитьНастройки(), ДанныеРасшифровки);

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

ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных; ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки, Ложь);

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

ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ЭлементыФормы.Результат);
ПроцессорВывода.НачатьВывод();
ПроцессорВывода.Вывести(ПроцессорКомпоновки);
ПроцессорВывода.ЗакончитьВывод(); 

Аналогичный результат получается с помощью цикла :

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

1.       Что такое вложенные схемы?

2.       Формирование выборки по регистру

3.       Вложенный отчет 

1.      Что такое вложенные схемы?

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

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

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

Рис. 1 Сводная выручка менеджеров  

2.      Формирование выборки по регистру

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

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

Рис. 2 Простой отчет по выручке

В настройках СКД делаем группировку именно по физическому лицу, добавим заголовки в поля группировки, включим параметры в пользовательские настройки; макет оформления – «Античный».

Рис. 3 Настройки СКД

Сохраним, сформируем отчет по выручке, проверим результат.

Отчет выглядит так.

Рис. 4 Отчет по выручке после нужных настроек СКД

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

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

Рис. 5 Закладка Вложенные схемы

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

Рис. 6 Конструктор схемы компоновки данных

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

Рис. 7 Настройки системы компоновки данных с помощью мастера

Теперь мы получили выборку по Зарплате, но выборка сейчас по всему регистру, за весь период ведения учета и по всем сотрудникам, осталось наложить отборы на вложенный запрос. Особенность в том, что отборы на вложенный запрос в 1С накладываются в верхнем запросе в поле «Настройки», проваливаемся туда.

Рис. 8 Отборы на вложенный запрос 1С

Задаем параметры.

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

Рис. 9 Поле компоновки в системе компоновки данных в 1С

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

Рис. 10 Заданный Конец периода в системе компоновки данных

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

Добавляем отбор, в левой части выбираем физическое лицо, в правой части затираем тип, выбираем тип «Поле компоновки» для данных, там находим поля верхней схемы (владельца) – «МенеждерФизическоеЛицо».

Рис. 11 Поле компоновки данных

Готово, настройка должна выглядеть теперь вот так, нажимаем «ОК».

Рис. 12 Результат настройки СКД  

3.      Вложенный отчет

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

Рис. 13 Добавление вложенного отчета



Рис. 14 Результат добавления вложенного отчета

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

Рис. 15 Перенесенные настройки вложенных схем

Как видите, требуемую информацию отчет выводит, проверьте данные документов, параметры и отборы. Осталось привести отчет в более читаемый вид. Например, выровнять ширину полей, уменьшить шрифт, это можно сделать на закладке «Условное оформление». Также можно отключить отображение параметров и отборов, они засоряют отчет и пользователю не нужны, сделать это можно на закладке «Другие настройки».

Требуемая печатная форма сформирована.

Рис. 16 Печатная форма вложенного отчета

Специалист компании «Кодерлайн»

Дмитрий Доронов

На чтение 14 мин Просмотров 20 Опубликовано Обновлено

Содержание

  1. Редактирование настроек для не основной схемы компоновки данных
  2. Не установлена схема компоновки данных
  3. Решение
  4. Ошибка Выполнения отчета :Не установлена схема компоновки данных
  5. 1С 8.3 : Как сформировать отчет СКД без проверки прав (в привилегированном режиме)?
  6. Есть несколько способов как это сделать:
  7. Ваш браузер устарел, пожалуйста обновите ваш браузер пройдя по ссылке www.microsoft.com/download
  8. Формирование СКД отчетов в другой базе с возвратом результата через COM-соединение
  9. Грабли на СКД
  10. Оглавление
  11. Выбранные поля в разных элементах структуры. Автополе и отключенное поле
  12. Расположение итогов = нет
  13. Ресурсы рассчитываются только для группировок
  14. Параметр Период – Стандартный период
  15. Параметры Период, НачалоПериода, КонецПериода
  16. Установка параметров выражением НайтиПоКоду(), НайтиПоНаименованию()
  17. Отборы в наборе данных объект
  18. Некорректный расчет итогов

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

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

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

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

В данном примере предполагается, что в переменной Схема находится схема компоновки данных.

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

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

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

В данном примере во временное хранилище помещается схема компоновки данных, находящаяся в переменной Схема .

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

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

Источник

Не установлена схема компоновки данных

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

Добавлено через 34 секунды
ах да, и доступных полей тоже нету

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

Система компоновки данных
Нужно организовать расшифровку отчета в зависимости от строки и столбца таблицы. Можно ли это.

Конструктор настроек компоновки данных(программно)
Всем привет. У меня отчет с СКД, но мне надо иногда делать изменение групповых полей и порядка.

Система компоновки данных — добавить поле
Как в отчёт добавить новое поле, если он был создан системой компоновки данных?

Решение

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

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

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

Отчеты и Схема компоновки данных
Доброго времени суток! Наиболее подходящий вариант это создание отчета используя схему компоновки.

Источник

Ошибка Выполнения отчета :Не установлена схема компоновки данных

Ошибка выполнения отчета
по причине:
Не установлена схема компоновки данных

Был отчет без СКД, переделанный из стандартного отчета «ТоварныйОтчетТорг29».
Помимо всего прочего — вызывался из справочника «Номенклатура» с автоматическим формированием при открытии.
Процедура «СформироватьОтчетНаСервере» запускалась из события «ПриСозданииНаСервере» если в отчет передавался параметр «СформирвоатьПриОткрытии».

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

при обычном открытии отчета из меню или при ручном нажатии кнопки сформировать — все работает нормально без ошибок.

Кто нибудь сталкивался с сабжем?

(3)
В стандартном отчете 1С БП в форме отчета прописан функционал работы с интерфейсами и форма бух отчетов.

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

Если открыть ТОРГ29 — то можно посмотреть кто работает.

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

В общем оказалось как обычно.

«СформироватьПриОткрытии» — это расширение формы отчета — и в качестве «своего» параметра передаваемого в форму — его использовать нельзя.

Раньше я когда передавал параметр он просто не отрабатывал — т.к. к отчету СКД не привязана.
А после очередного обновления платформы — поведение отчета изменилось и он стал выдавать ошибку связанную с отсутствием СКД.

Свой параметр переименовал. Ошибка исчезла. А формирование отчета при открытии переделал на обработчик ожидания как в «Реестре документов».

Источник

1С 8.3 : Как сформировать отчет СКД без проверки прав (в привилегированном режиме)?

Что при разработке отчетов требуется чтобы у пользователя с ограниченными правами, отчет формировался полностью без проверки прав!

Особенно если настроен RLS

Есть несколько способов как это сделать:

1. Установить привилегированный режим в модуле отчета

Форма отчета должна быть Управляемой, далее в модуле отчета процедура обработчика «При компоновке результата»:

2. Формирование в привилегированном режиме через Общий модуль с галкой Привелигерованный

так же как в пункте 1 в обработчике «При компоновке результата» пишем:

В общем модуле МЕ_ДляОтчетаСКД_ПривелРежим код:

3. Если включен режим Использовать ограничение на уровне прав доступа — RLS

Часто используется в типовых. Тут в модуле для текущего пользователя можно на время формирования отчету установить параметр сеанса ИспользоватьОграниченияПравДоступаНаУровнеЗаписей в Ложь и RLS не сработает.

После завершения формирования, не забудьте включить rls обратно установив = Истина

4. Если в запросе используется конструкция вида регистратор.дата и это поле не отображается в полях отчета СКД

Допустим Вы сделали запрос по регистру накоплений и через регистратор обратились к дате или сумме документа и при формировании отчета СКД, эти поля недоступны !? как же быть?

Проблема в том — что у регистратором может выступать несколько документов и видимо права чтение/просмотр есть не на все — поэтому через скд эта таблица целиком недоступна, решение:

1. открыть доступ на все регистраторы регистра

Источник

Ваш браузер устарел, пожалуйста обновите ваш браузер пройдя по ссылке www.microsoft.com/download

Формирование СКД отчетов в другой базе с возвратом результата через COM-соединение

При наличии нескольких баз РБД существует проблема получения данных в подчиненной базе из отчетов СКД, т.к. далеко не все данные присутствуют в текущей базе. Например: есть центральная база и периферийная, в центральной работает регламент по расчету себестоиомости, вводятся доп. расходы и прочее, а в периферийной делаются только продажи, однако менеджерам нужно видеть актуальную себестоимость, мотивацию, рассчитанную на основании этих данных. Или руководитель хочет видеть продажи других магазинов, а документов в этой базе нет! (причем хотят видеть в динамике!). Какой выход из этой ситуации? Пускать их в основную базу будет неправильно, поэтому решено было сделать универсальный механизм для СКД отчетов.

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

Расшифровка также работает в этом механизме, однако если какого-то ссылочного объекта не будет в нашей базе, при попытке открытия будет выдано сообщение «Объект не найден», но само представление этих объектов в отчете будет видно.

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

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

Источник

Грабли на СКД

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

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

Оглавление

Выбранные поля в разных элементах структуры. Автополе и отключенное поле

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

Рис. 1. Индивидуальная настройка полей выбора в каждой группировке

Рис. 2. В группировке отключено использование выбранного поля

В общем, это не плохо, когда вы контролируете какие поля в каждой группировке. Но для того чтобы понять, в какой группировке какие поля выводятся – придется прощёлкать все группировки. Также бывают ситуации, что на уровне отчета выбраны одни поля, а поскольку в выбранных полях группировки отсутствует Автополе, то они не выводятся, и приходится проверять настройки.

Вывод: Я рекомендую по максимуму располагать выбранные поля на уровне Отчет, а в группировках дополнять/исключать поля совместно с автополем.

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

Рис. 3. Какие поля будут выведены при такой структуре отчета?

Рис. 4. Перечень полей, если развернуть Автополе

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

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

Рис. 5. Результат при такой настройке

Расположение итогов = нет

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

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

Рис. 7. Вид отчета с настройкой Расположение итогов = нет

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

Рис. 8. Настройка Расположение итогов, Расположение общих итогов.

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

Вывод: Не отключайте расположение итогов, вам скорее всего нужна настройка Расположение общих итогов 🙂

Ресурсы рассчитываются только для группировок

Значения ресурсов не вычисляются для детальных записей, но есть нюансы. Например, в схему добавлено вычисляемое поле ТоварыВГруппе


Рис. 9. Вычисляемое поле

Поле сделано ресурсом — для него указано выражение ресурса.

Рис. 10. Выражения ресурсов

Если в детальных записях будет присутствовать хотя бы одно поле, не являющееся ресурсом, например поле Регистратор, то результат будет следующим…

Рис. 11. Настройки компоновки. В детальных записях поле Регистратор

Значение ресурса не будет вычислено (и соответственно выведено) в детальных записях:

Рис. 12. Значение ресурса не определено в детальных записях

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

Рис. 13. Детальные записи в группировке

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

Параметр Период – Стандартный период

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

Рис. 14. Настройки параметров периода

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

Рис. 15. Ошибка: Несоответствие типов

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

Вывод: Чтобы избежать путаницы, я рекомендую параметру с типом СтандарныйПериод присваивать имя, отличное от Период, например «ПериодОтчета»

Рис. 16. Параметры Период, СтандартныйПериод на своем месте

Параметры Период, НачалоПериода, КонецПериода

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

Например, надо получить текущие остатки на складе на одну дату, в ценах на другую дату.

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

Чтобы этого избежать можно указывать параметры в расширении языка запросов. А для диагностики я рекомендую пользоваться инструментом Консоль СКД (любой консолью, которая показывает текст и параметры компоновщика макета)

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

Установка параметров выражением НайтиПоКоду(), НайтиПоНаименованию()

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

Здорово, что в СКД так можно делать – написать выражение на встроенном языке, которое будет вычислено при компоновке результата. Но! А что будет если в результате поиска ничего не будет найдено? Правильно – параметру будет присвоена пустая ссылка и мы об этом не узнаем, т.к. ограничение доступности для этого параметра стоит.

Рис. 17. Выражения в параметрах СКД

Вывод: Я рекомендую устанавливать значения параметров компоновки данных в событии ПриКомпоновкеРезультата, при чем, проверяя все результаты поисков и сообщая о непредвиденных результатах пользователю.

Отборы в наборе данных объект

Если добавить набор данных объект и для полей набора данных не указать свойство Тип значения, то в настройках отбора будет доступно лишь сравнение с полем компоновки данных. На скриншоте ниже для Поле1 – не указан тип и система не будет знать из какого справочника предлагать пользователю значения сравнения, для поля Поле2 – указан тип справочник Контрагенты, соответственно в элементе отбора будут предлагаться элементы этого справочника.

Рис. 18. Набор данных объект. Для Поле1 не указан Тип значения.

Рис. 19. Отбор по полю набора данных объект, для которого не указан тип значения.

Вывод: при использовании набора данных объект, если предполагается отбор по полю – указываем его тип в настройках. Можно указывать тип для всех полей

Некорректный расчет итогов

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

Рис. 20. Пример правильной настройки ролей

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

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

1. В наборе данные присутствуют данные виртуальной таблицы ОстаткиИОбороты, но выбирается только Начальный или только Конечный остаток

2. Объединение виртуальной таблицы ОстаткиИОбороты еще с какими-то данными

Источник

Процессор Вывода результата Компоновки Данных

Вывод результата компоновки в
в таблицу или дерево значений

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

 Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;  

Свойства:

  • ОтображатьПроцентВывода – Содержит признак отображения индикатора с процентом вывода отчета.

Методы:

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

Важно! В параметрах метода выполнть компоновщика макета при выводе результата в колекцию значений нужно указать тип генератора макета компоновки данных ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений
иначе: используется значение по умолчанию ГенераторМакетаКомпоновкиДанных , предназначенное для вывода резуьтата в табличный документ

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

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

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

Объект имеет аналогичные свойства и методы как у объекта для вывода результата в таблицу значений. Только в этом случае, для установки документа, который нужно выводить называется используется метод УстановитьДокумент

Пример вывода отчета из встроенного языка

Методические рекомендации

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

КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, КомпоновщикНастроек.ПолучитьНастройки(), ДанныеРасшифровки);

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

ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных; ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки, Ложь);

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

ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ЭлементыФормы.Результат);
ПроцессорВывода.НачатьВывод();
ПроцессорВывода.Вывести(ПроцессорКомпоновки);
ПроцессорВывода.ЗакончитьВывод(); 

Аналогичный результат получается с помощью цикла :

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

Функции языка выражений системы компоновки данных

Вычислить
ВычислитьВыражение
ВычислитьВыражениеСГруппировкойМассив
ВычислитьВыражениеСГруппировкойТаблицаЗначений
Уровень
НомерПоПорядку
НомерПоПорядкуВГруппировке
Формат
НачалоПериода
КонецПериода
ДобавитьКДате
РазностьДат
Подстрока
ДлинаСтроки
Год
Квартал
Месяц
ДеньГода
День
Неделя
ДеньНедели
Час
Минута
Секунда
Выразить
ЕстьNull
Функции общих модулей
Представление
Строка
ЗначениеЗаполнено
УровеньВГруппировке

Вычислить (Evaluate)

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

Вычислить(Выражение, Группировка, ТипРасчета)

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

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

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

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

ВычислитьВыражение(Выражение, Группировка, ТипРасчета, Начало, Конец, Сортировка, ИерархическаяСортировка, ОбработкаОдинаковыхЗначенийПорядка)

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

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

ТипРасчета. Тип Строка. В случае если данный параметр имеет значение «ОбщийИтог», выражение будет вычисляться для всех записей группировки.
В случае если значение параметра «Группировка», значения будут вычисляться для текущей групповой записи группировки.
Если параметр имеет значение «ГруппировкаНеРесурса», то при вычислении функции для групповой записи по ресурсам, выражение будет вычислено для первой групповой записи исходной группировки.
При вычислении функции ВычислитьВыражение со значением «ГруппировкаНеРесурса» для групповых записей, не являющихся группировками по ресурсам, функция вычисляется так же, как бы она вычислялась со значением параметра «Группировка».
Компоновщик макета компоновки данных при генерации макета компоновки данных при выводе в макет поля – ресурса, по которому выполняется группировка, выдает в макет выражение, вычисляемое при помощи функции ВычислитьВыражение, с указанным параметром «ГруппировкаНеРесурса». Для остальных ресурсов в группировке по ресурсу выдаются обычные выражения ресурсов.
Если параметр имеет значение «Иерархия», то выражение нужно вычислять для родительской иерархической записи, если таковая имеется, и для всей группировки, если родительской иерархической записи не имеется. Компоновщик макета при генерации выражения для поля «% в группе иерархии» генерирует выражение, содержащее отношение выражения ресурса к функции ВычислитьВыражение для выражения ресурса, вычисляемого для текущей группировки с типом вычисления «Иерархия». Начало. Указывает, с какой записи нужно начинать фрагмент, в котором рассчитывать агрегатные функции выражения и из какой записи получать значения полей вне агрегатных функций. Строка, содержащая одно из:

  • «Первая» («First»). Необходимо получать первую запись группировки. После слова в скобках можно указывать выражение, результат которого будет использоваться как смещение от начала группировки. Получаемое значение должно целым быть числом, больше нуля.
    Например, Первая(3) – получение третьей записи от начала группировки.
    Если первая запись выходит за пределы группировки, то считается, что записей нет.
    Например, если записей 3, а требуется получить Первая(4), то считается, что записей нет.
  • «Последняя» («Last»). Необходимо получить последнюю запись группировки. После слова в скобках можно указывать выражение, результат которого будет использоваться как смещение от конца группировки. Получаемое значение должно целым быть числом, больше нуля.
    Например, Последняя(3) – получение третьей записи от конца группировки.
    Если последняя запись выходит за пределы группировки, то считается, что записей нет.
    Например, если записей 3, а требуется получить Последняя(4), то считается, что записей нет.
  • «Предыдущая» («Previous»). Необходимо получить предыдущую запись группировки. После слова в скобках можно указывать выражение, результат которого будет использоваться как смещение назад от текущей записи группировки.
    Например, Предыдущая(2) – получение предыдущей от предыдущей записи.
    Если предыдущая запись выходит за пределы группировки (например, для второй записи группировки требуется получить Предыдущая(3)), то получается первая запись группировки.
    При получении предыдущей записи для итога по группировке считается, получается первая запись.
  • «Следующая» («Next»). Необходимо получить следующую запись группировки. После слова в скобках можно указывать выражение, результат которого будет использоваться как смещение вперед от текущей записи группировки.
    Например, Следующая(2) – получение следующей от следующей записи.
    Если следующая запись выходит за пределы группировки, то считается, что записей нет.
    Например, если записей 3 и для третьей записи получают Следующая, то считается, что записей нет.
    При получении следующей записи для итога по группировке считается, что записи нет.
  • «Текущая» («Current»). Необходимо получить текущую запись.
    При получении для итога по группировке получается первая запись.
  • «ОграничивающееЗначение» («BoundaryValue»). Необходимость получить запись по указанному значению. После слова ОграничивающееЗначение в скобках нужно указать выражение, со значения которого нужно начинать фрагмент, первого поля упорядочивания.
    В качестве записи будет получаться первая запись, значение поля упорядочивания у которой больше или равно указанному значению.
    Например, если в качестве поля упорядочивания используется поле Период, и оно имеет значения 01.01.2010, 01.02.2010, 01.03.2010, и требуется получить ОграничивающееЗначение(ДатаВремя(2010, 1, 15)), то будет получена запись с датой 01.02.2010.

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

  • «Первая» («First»). Необходимо получать первую запись группировки. После слова в скобках можно указывать выражение, результат которого будет использоваться как смещение от начала группировки. Получаемое значение должно целым быть числом, больше нуля. Например, Первая(3) – получение третьей записи от начала группировки.
    Если первая запись выходит за пределы группировки, то считается, что записей нет. Например, если записей 3, а требуется получить Первая(4), то считается, что записей нет.
  • «Последняя» («Last»). Необходимо получить последнюю запись группировки. После слова в скобках можно указывать выражение, результат которого будет использоваться как смещение от конца группировки. Получаемое значение должно целым быть числом, больше нуля. Например, Последняя(3) – получение третьей записи от конца группировки.
    Если последняя запись выходит за пределы группировки, то считается, что записей нет. Например, если записей 3, а требуется получить Последняя(4), то считается, что записей нет.
  • «Предыдущая» («Previous»). Необходимо получить предыдущую запись группировки. После слова в скобках можно указывать выражение, результат которого будет использоваться как смещение назад от текущей записи группировки. Например, Предыдущая(2) – получение предыдущей от предыдущей записи.
    Если предыдущая запись выходит за пределы группировки (например, для второй записи группировки требуется получить Предыдущая(3)), то считается, что записей нет.
    При получении предыдущей записи для итога по группировке считается, получается последняя запись.
  • «Следующая» («Next»). Необходимо получить следующую запись группировки. После слова в скобках можно указывать выражение, результат которого будет использоваться как смещение вперед от текущей записи группировки. Например, Следующая(2) – получение следующей от следующей записи.
    Если следующая запись выходит за пределы группировки, получается последняя запись. Например, если записей 3 и для третьей записи получают Следующая, то получается третья запись.
    При получении следующей записи для итога по группировке считается, что записи нет.
  • «Текущая» («Current»). Необходимо получить текущую запись.
    При получении для итога по группировке получается первая запись.
  • «ОграничивающееЗначение» («BoundaryValue»). Необходимость получить запись по указанному значению. После слова ОграничивающееЗначение в скобках нужно указать выражение, со значения которого нужно начинать фрагмент, первого поля упорядочивания.
    В качестве записи будет получаться последняя запись, значение поля упорядочивания у которой меньше или равно указанному значению. Например, если в качестве поля упорядочивания используется поле Период, и оно имеет значения 01.01.2010, 01.02.2010, 01.03.2010, и требуется получить ОграничивающееЗначение(ДатаВремя(2010, 1, 15)), то будет получена запись с датой 01.01.2010.

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

  • «Вместе» («Together») — обозначает, что для определения предыдущей и следующей записей используется последовательность упорядоченных записей;
  • «Отдельно» («Separately») — обозначает, что предыдущая и следующие записи определяются на основании значений выражений упорядочивания;

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

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

При использовании обработки одинаковых значений порядка «Отдельно», предыдущей к записи 3 будет запись 2, а при использовании «Вместе» — запись 1. А фрагментом для текущей записи к записи 2 для «Отдельно» будет запись 2, а для «Вместе» — записи 2 и 3. Таким образом, сумма по текущей записи для «Отдельно» составит 20, а для «Вместе» — 50.
При указанном «Вместе» в параметрах Начало и Конец нельзя указывать смещение для позиций «Первая», «Последняя», «Предыдущая», «Следующая».
Значение по умолчанию «Отдельно».

Примечания:

Функция учитывает отбор группировок, но не учитывает иерархические отборы.
Функция не может применяться к группировке в групповом отборе этой группировки. Например, в отборе группировки Номенклатура нельзя использовать выражение ВычислитьВыражение(«Сумма(СуммаОборот)», , «ОбщийИтог») > 1000. Но такое выражение можно использовать в иерархическом отборе.
Если конечная запись предшествует начальной, то считается, что записи для расчета детальных данных и расчета агрегатных функций отсутствуют.
При расчете интервальных выражений для общего итога (параметр Группировка имеет значение «ОбщийИтог») считается, что записи для расчета детальных данных и расчета агрегатных функций отсутствуют.
Компоновщик макета при генерации выражения функции ВычислитьВыражение, в случае если выражение упорядочивания содержит поля, которые не могут быть использованы в группировке, заменяет функцию ВычислитьВыражение на NULL.

ВычислитьВыражениеСГруппировкойМассив (EvalExpressionWithGroupArray)

Синтаксис:

ВычислитьВыражениеСГруппировкойМассив (Выражение, ВыраженияПолейГруппировки, ОтборЗаписей, ОтборГруппировок)

Параметры: Выражение — выражение, которое нужно вычислить. Тип Строка. Например, «Сумма(СуммаОборот)»; ВыраженияПолейГруппировки — выражения полей группировки, перечисленные через запятую. Например, «Контрагент, Партия»; ОтборЗаписей — выражение, применяемое к детальным записям. Например, «ПометкаУдаления = Ложь»; ОтборГруппировок — отбор, применяемый к групповым записям. Например: «Сумма(СуммаОборот) > &Параметр1». Функция возвращает массив, каждый элемент которого содержит результат вычисления выражения для группировки по указанному полю.
Пример:

Максимум(ВычислитьВыражениеСГруппировкойМассив («Сумма(СуммаОборот)», «Контрагент»));

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

ВычислитьВыражениеСГруппировкойМассив(«Сумма(СуммаОборот)», «Контрагент»)

компоновщик макета сгенерирует для вывода следующее выражение:

СоединитьСтроки(Массив(Упорядочить(ВычислитьВыражениеСГруппировкойТаблицаЗначений («Представление(Сумма(НаборДанных.СуммаОборот)), Сумма(НаборДанных.СуммаОборот)», «НаборДанных.Контрагент»), «2»)))

ВычислитьВыражениеСГруппировкойТаблицаЗначений (EvalExpressionWithGroupValueTable)

Синтаксис:

ВычислитьВыражениеСГруппировкойТаблицаЗначений (Выражение, ВыраженияПолейГруппировки, ОтборЗаписей, ОтборГруппировок)

Параметры:
Параметры: Выражение — выражение, которое нужно вычислить. Тип Строка. В строке может быть перечислено несколько выражений через запятую. После каждого выражения может быть необязательное ключевое слово КАК и имя колонки таблицы значений. Например: «Контрагент, Сумма(СуммаОборот) Как ОбъемПродаж». ВыраженияПолейГруппировки — выражения полей группировки, перечисленные через запятую. Например, «Контрагент, Партия»; ОтборЗаписей — выражение, применяемое к детальным записям. Например, «ПометкаУдаления = Ложь»; ОтборГруппировок — отбор, применяемый к групповым записям. Например: «Сумма(СуммаОборот) > &Параметр1». Функция возвращает таблицу значений, каждый элемент которого содержит результат вычисления выражения для группировки по указанному полю.
Пример:

ВычислитьВыражениеСГруппировкойТаблицаЗначений («Контрагент КАК Контрагент, Сумма(СуммаОборот) Как ОбъемПродаж», «Контрагент»)

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

ВычислитьВыражениеСГруппировкойТаблицаЗначений («Контрагент, Сумма(СуммаОборот)», «Контрагент»)

Компоновщик макета сгенерирует для вывода следующее выражение:

СоединитьСтроки(ПолучитьЧасть(Упорядочить(ВычислитьВыражениеСГруппировкойТаблицаЗначений («НаборДанных.Контрагент, НаборДанных.КонтрагентПредставление, Сумма(НаборДанных.СуммаОборот), Представление(НаборДанных.СуммаОборот), НаборДанных.ПолеУпорядочивание», «НаборДанных.Контрагент»), «5, 1, 3»), «2, 4»))

Уровень (Level)

Функция предназначена для получения текущего уровня записи.
Пример:

Уровень()

НомерПоПорядку (SequenceNumber)

Получить следующий порядковый номер.
Пример:

НомерПоПорядку()

НомерПоПорядкуВГруппировке (SequenceNumberInGrouping)

Возвращает следующий порядковый номер в текущей группировке.
Пример:

НомерПоПорядкуВГруппировке()

Формат (Format)

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

Формат(Значение, ФорматнаяСтрока)

Параметры: Значение — выражение, которое требуется отформатировать; ФорматнаяСтрока — форматная строка задается в соответствии с форматной строкой 1С:Предприятие. Пример:

Формат(РасходныеНакладные.СуммаДок, «ЧДЦ=2»)

НачалоПериода (BeginOfPeriod)

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

НачалоПериода(Дата, ТипПериода)

Параметры: Дата — тип Дата. Заданная дата; ТипПериода — тип Строка. Содержит одно из значений:

  • Минута;
  • Час;
  • День;
  • Неделя;
  • Месяц;
  • Квартал;
  • Год;
  • Декада;
  • Полугодие.

Пример:

НачалоПериода(ДатаВремя(2002, 10, 12, 10, 15, 34), «Месяц») 

Результат:

01.10.2002 0:00:00

КонецПериода (EndOfPeriod)

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

КонецПериода(Дата, ТипПериода)

Параметры: Дата — тип Дата. Заданная дата; ТипПериода — тип Строка. Содержит одно из значений:

  • Минута;
  • Час;
  • День;
  • Неделя;
  • Месяц;
  • Квартал;
  • Год;
  • Декада;
  • Полугодие.

Пример:

КонецПериода(ДатаВремя(2002, 10, 12, 10, 15, 34), «Неделя»)

Результат:

13.10.2002 23:59:59

ДобавитьКДате (DateAdd)

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

ДобавитьКДате(Выражение, ТипУвеличения, Величина )

Параметры: Выражение — тип Дата. Исходная дата; ТипУвеличения — тип Строка. Содержит одно из значений:

  • Минута;
  • Час;
  • День;
  • Неделя;
  • Месяц;
  • Квартал;
  • Год;
  • Декада;
  • Полугодие.

Величина – на сколько необходимо увеличить дату. Тип Число. Дробная часть игнорируется. Пример:

ДобавитьКДате(ДатаВремя(2002, 10, 12, 10, 15, 34), «Месяц», 1)

Результат:

12.11.2002 10:15:34

РазностьДат (DateDifference)

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

РазностьДат(Выражение1 , Выражение2 , ТипРазности)

Параметры: Выражение1 — тип Дата. Исходная дата; Выражение2 — тип Дата. Вычитаемая дата; ТипРазности — тип Строка. Содержит одно из значений:

  • Секунда;
  • Минута;
  • Час;
  • День;
  • Месяц;
  • Квартал;
  • Год.

Пример:

РАЗНОСТЬДАТ(ДАТАВРЕМЯ(2002, 10, 12, 10, 15, 34),
ДАТАВРЕМЯ(2002, 10, 14, 9, 18, 06), «ДЕНЬ») 

Результат:

2

Подстрока (Substring)

Данная функция предназначена для выделения подстроки из строки.
Синтаксис:

Подстрока(Строка, Позиция, Длина)

Параметры: Строка — тип Строка. Строка, из которой выделяют подстроку; Позиция — тип Число. Позиция символа, с которого начинается выделяемая из строки подстрока; Длина — тип Число. Длина выделяемой подстроки. Пример:

ПОДСТРОКА(Контрагенты.Адрес, 1, 4)

ДлинаСтроки (StringLength)

Функция предназначена для определения длины строки.
Синтаксис:

ДлинаСтроки(Строка)

Параметр: Строка — тип Строка. Строка, длину которой определяют. Пример:

Строка(Контрагенты.Адрес)

Год (Year)

Данная функция предназначена для выделения года из значения типа Дата.
Синтаксис:

Год(Дата)

Параметр: Дата — тип Дата. Дата, по которой определяют год. Пример:

ГОД(РасхНакл.Дата)

Квартал (Quarter)

Данная функция предназначена для выделения номера квартала из значения типа Дата. Номер квартала в норме находится в диапазоне от 1 до 4.
Синтаксис:

Квартал(Дата)

Параметр Дата — тип Дата. Дата, по которой определяют квартал Пример:

КВАРТАЛ(РасхНакл.Дата)

Месяц (Month)

Данная функция предназначена для выделения номера месяца из значения типа Дата. Номер месяца в норме находится в диапа-зоне от 1 до 12.

Синтаксис:

Месяц(Дата)

Параметр: Дата — тип Дата. Дата, по которой определяют месяц. Пример:

МЕСЯЦ(РасхНакл.Дата)

ДеньГода (DayOfYear)

Данная функция предназначена для получения дня года из значения типа Дата. День года в норме находится в диапазоне от 1 до 365(366).

Синтаксис:

ДеньГода(Дата)

Параметр Дата — тип Дата. Дата, по которой определяют день года. Пример:

ДЕНЬГОДА(РасхНакл.Дата)
 

День (Day)

Данная функция предназначена для получения дня месяца из значения типа Дата. День месяца в норме находится в диапазоне от 1 до 31.
Синтаксис:

День(Дата)

Параметр Дата — тип Дата. Дата, по которой определяют дня месяца. Пример:

ДЕНЬ(РасхНакл.Дата)

Неделя (Week)

Данная функция предназначена для получения номера недели года из значения типа Дата. Недели года нумеруются, начиная с 1. 
Синтаксис:

Неделя(Дата)

Параметр Дата — тип Дата. Дата, по которой определяют номера недели. Пример:

НЕДЕЛЯ(РасхНакл.Дата)

ДеньНедели (WeekDay)

Данная функция предназначена для получения дня недели из значения типа Дата. День недели в норме находится в диапазоне от 1 (понедельник) до 7(воскресенье).
Синтаксис:

ДеньНедели(Дата)

Параметр Дата — тип Дата. Дата, по которой определяют день недели . Пример:

ДЕНЬНЕДЕЛИ(РасхНакл.Дата)

Час (Hour)

Данная функция предназначена для получения часа суток из значения типа Дата. Час суток находится в диапазоне от 0 до 23.
Синтаксис:

Час(Дата)

Параметр Дата — тип Дата. Дата, по которой определяют час суток. Пример:

ЧАС(РасхНакл.Дата)

Минута (Minute)

Данная функция предназначена для получения минуты часа из значения типа Дата. Минута часа находится в диапазоне от 0 до 59.
Синтаксис:

Минута(Дата)

Параметр Дата — тип Дата. Дата, по которой определяют минута часа. Пример:

МИНУТА(РасхНакл.Дата)

Секунда (Second)

Данная функция предназначена для получения секунды минуты из значения типа Дата. Секунда минуты находится в диапазоне от 0 до 59.
Синтаксис:

Секунда(Дата)

Параметр Дата — тип Дата. Дата, по которой определяют секунды минуты. Пример:

СЕКУНДА(РасхНакл.Дата)

Выразить (Choice)

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

Выразить(Выражение, УказаниеТипа)

Параметр 
Параметры: Выражение — преобразуемое выражение; УказаниеТипа — тип Строка. Содержит строку типа. Например, «Число», «Строка» и т.п. Кроме примитивных типов данная строка может содержать имя таблицы. В этом случае будет осуществлена попытка выразить к ссылке на указанную таблицу. Пример:

Выразить(Данные.Реквизит1, «Число(10,3)»)

ЕстьNull (IsNull)

Данная функция возвращает значение второго параметра в случае, если значение первого параметра NULL
В противном случае будет возвращено значение первого параметра. 
Пример:

ЕстьNULL(Сумма(Продажи.СуммаОборот), 0)

Функции общих модулей

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

СокращенноеНаименование(Документы.Ссылка, Документы.Дата, Документы.Номер)

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

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

Представление(Контрагент)

Строка (String)

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

Строка(ДатаПродажи)

ЗначениеЗаполнено (ValueIsFilled)

Для значений NULLНеопределено всегда возвращает Ложь.
Для значений Булево всегда возвращат Истину.
Для остальных типов возвращает Истину, если значение отличается от значения по умолчанию для данного типа.
Пример:

ЗначениеЗаполнено(ДатаДоставки)

УровеньВГруппировке (LevelInGroup)

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

УровеньВГруппировке()

Источник: http://erpsolution.ru/forum/showthread.php?t=1217&page=2 Механизм свойств (характеристик) и категорий

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

Если информация о характеристиках указана и в запросе (с помощью конструкции ХАРАКТЕРИСТИКИ) и с помощью диалога метаданных, то приоритетом обладает конструкция ХАРАКТЕРИСТИКИ.
Синтаксис:
ХАРАКТЕРИСТИКИ
ТИП(<Имя типа>)
ВИДЫХАРАКТЕРИСТИК <Имя таблицы | (<Объединение запросов>)
ПОЛЕКЛЮЧА <Поле>
ПОЛЕИМЕНИ <Поле>
[ПОЛЕТИПАЗНАЧЕНИЯ <Поле>]
ЗНАЧЕНИЯХАРАКТЕРИСТИК <Имя таблицы | (<Объединение запросов>)
ПОЛЕОБЪЕКТА <Поле>
ПОЛЕВИДА <Поле>
[ПОЛЕЗНАЧЕНИЯ <Поле>]
После ТИП указывается <Имя типа> — имя типа, для которого определяются характеристики.
После ВИДЫХАРАКТЕРИСТИК указывается <Имя таблицы | (<Объединение запросов>) — имя таблицы или текст запроса для получения видов характеристик.
После ПОЛЕКЛЮЧА указывается <Поле> — имя поля из таблицы или запроса ВИДЫХАРАКТЕРИСТИК, которое содержит ключ вида характеристики.
После ПОЛЕИМЕНИ указывается <Поле> — имя поля из таблицы или запроса ВИДЫХАРАКТЕРИСТИК, которое содержит имя характеристики.
После ПОЛЕТИПАЗНАЧЕНИЯ указывается <Поле> — имя поля из таблицы или запроса ВИДЫХАРАКТЕРИСТИК, которое содержит тип значения характеристики.
После ЗНАЧЕНИЯХАРАКТЕРИСТИК указывается <Имя таблицы | (<Объединение запросов>) — имя таблицы или запрос, откуда получать значения характеристик.
После ПОЛЕОБЪЕКТА указывается <Поле> — имя поля из таблицы или запроса ЗНАЧЕНИЯХАРАКТЕРИСТИК, которое содержит объект, для которого указана характеристика.
После ПОЛЕВИДА указывается <Поле> — имя поля из таблицы или запроса ЗНАЧЕНИЯХАРАКТЕРИСТИК, которое содержит вид характеристики.
После ПОЛЕЗНАЧЕНИЯ указывается <Поле> — имя поля из таблицы или запроса ЗНАЧЕНИЯХАРАКТЕРИСТИК, которое содержит значение характеристики.

Макеты оформления

Конструктор макета оформления компоновки данных открывается из конструктора макета при указании типа макета «Макет оформления компоновки данных».
Окно конструктора состоит из списка областей оформления, таблицы настройки оформления и поля табличного документа «Пример» для показа результата выбранных настроек.
Последовательность действий для настройки оформления следующая: Выбирается область оформления; В таблице настроек указываются (устанавливаются пометки) параметры, оформление которых требуется изменить, и указываются значения оформления; Результат внесенных изменений контролируется в поле «Пример». Если предполагается, что в отчет будет выведено несколько уровней группировки, то нужно в списке областей для каждой области, в которой будут уровни, создать подчиненные области по числу уровней группировки. Для создания уровня области укажите область и нажмите кнопку «Добавить» командной панели. В список областей добавляется строка, имя которой «УровеньN», где N — номер уровня группировки. Выбор оформления уровня группировки выполняется как описано выше.
Замечание: Если было указано несколько уровней, то при удалении уровня группировки, всегда удаляется самый нижний уровень текущей области, не зависимо от того, какой уровень в списке был выбран.

Источник: http://erpsolution.ru/forum/showthread.php?t=1217&page=2 Источник: http://erpsolution.ru/forum/showthread.php?t=1217&page=2 

Понравилась статья? Поделить с друзьями:
  • Ошибка вихревых заслонок bmw
  • Ошибка вольво р0036
  • Ошибка ворд при изменении межстрочного интервала
  • Ошибка в3883 на шевроле круз
  • Ошибка вольво xc90 ограничение мощности двигателя