- Краткое описание.
Очень не хочется тратить своё драгоценное время программиста на написание программного кода!
Предлагаемая Универсальная функция позволяет без хлопот применять Систему Компоновки Данных (СКД) для расчета таблицы или дерева значений даже по данным из внешней базы через Com соединение.
Возможно, возникает вопрос, а зачем использовать СКД для работы с деревом значений?
Некоторые ответы следуют:
- Желательно использовать наглядность и возможности СКД, например, для обработки проведения;
- Существенно сокращаются трудозатраты на исправление кривых баз данных;
- Легко преобразовать существующий отчетСКД из Табличного документа в ДеревоЗначений или ТаблицуЗначений для целей программирования.
- Сформулируем цель разработки.
Цель – это сокращение трудозатрат программиста на применение СКД для получения ТаблицыЗначений и ДереваЗначений, даже из внешней базы. Кроме того, очень хочется достигать поставленную цель в любой конфигурации и на любой платформе.
(Работа с ТабличнымДокументом также обслуживается предложенной Универсальной функцией, но не рассматривается подробно в примерах данной статьи, так как табличный документ не очень востребован при программировании.)
- Опишем как работает универсальная функция ПолучитьРезультатСКДи(СтруктураСКДи).
Результат СКД получаем за два шага.
На первом шаге программист заполняет СтруктураСКДи параметрами для расчета.
На втором шаге автоматически возвращается РезультатСКДи в форме Таблицы или Дерева значений (или ТабличногоДокумента).
Примеры применения показаны на видео https://rutube.ru/video/515f7c1a558c8a9cc2f3e888969c8a86/
-
- В помощь программисту, внутри описания функции ПолучитьСтруктуруРезультатСКДи() размещён комментарий с примерами заполнения входных параметров.
- Следует иметь в виду, что не любой отчёт СКД возможно преобразовать в таблицу значений. Ограничения можно прочитать по ссылке - http://robolen.narod.ru/publ/statja_po_1s/skd/vyvod_v_derevo_znachenij_tablicu_znachenij_dlja_dalnejshej_programmnoj_obrabotki/5-1-0-147?ysclid=lhhper4nr1799676124
(При выводе результата компоновки в таблицу или дерево значений существуют следующие ограничения:
- в настройках должны присутствовать только группировки и детальные записи. Использование таблиц, диаграмм и вложенных отчетов не допускается;
- все папки, указанные в выбранных полях, игнорируются;
- не используется условное оформление, а также оформление для поля, указанное в схеме компоновки данных;
- из параметров вывода используются только следующие:
- расположение общих итогов по вертикали;
- тип заголовка полей;
- количество записей;
- процент записей;
- предопределенные макеты не используются.)
-
- СтруктураСКДи содержит 2 обязательных свойства и 9 необязательных.
Обязательные входные данные:
-
-
- Макет;
- тип Результата на выходе;
-
Необязательные входные данные программно уточняют результат:
-
-
- ПараметрыДанных;
- КлючВарианта;
- КомпоновщикНастроек;
- Отбор (два варианта назначения отбора для случаев с заранее известным количеством отборов и неизвестным);
- НовыеПоля, отсутствующие в макете;
- ВнешниеНаборыДанных;
- СтрокаСоединенияСВнешнейБазой;
- ВозможностьИспользованияВнешнихФункций;
- УстановитьПривилегированныйРежим.
-
- Прежде чем перейти к примерам, рассмотрим использованные условные обозначения.
- Для удобства работы, элементы, имеющие отношение к универсальной функции, помечены либо префиксом, либо постфиксом «скдИ» или «СКДи». Буква «и» другого размера, предотвращает путаницу со штатной аббревиатурой СКД, а также, напоминает, что это расширение имеет Назначение «Исправление» смотри рис.1 РасширениеСКДи
- Префикс «лок» обозначает, что реквизит имеет действие только внутри процедуры.
- Постфиксом «_01», «_02» и т.д. обозначены аналогичные строки (или элементы, или копии, или и т.д. что-то аналогичное).
- На видео приведены шесть примеров использования Универсальной функции.
Для демонстрации, использована типовая конфигурация УТ. (Демоверсия Управление торговлей, редакция 11 (11.4.14.181) на платформе 8.3.25.1394.)
https://rutube.ru/video/515f7c1a558c8a9cc2f3e888969c8a86/
Первый пример – это простейшее применение обязательных параметров.
Следующие 3 примера – это применение не обязательных параметров.
Два последних примера показывают возможности Универсальной функции при использовании дополнительных методов.
Текст к видеоролику прилагается. Если речевое сопровождение отличается от текста, то правильным следует считать письменный текст. Кроме того, в письменном тексте могут быть размещены примечания, озвучка которых нарушает ритм видеоролика.
База данных, на которой демонстрируются примеры, не прилагается по причине её большого размера. Однако, базу можно восстановить, руководствуясь инструкций из файла ZIP.
- Ранее высказанное предположение, что Универсальную функцию можно использовать в любой реализации и на любой платформе, будет проверяться по ходу жизни.
- Текст озвучки видео с примерами. Продолжительность 12:29.
https://rutube.ru/video/515f7c1a558c8a9cc2f3e888969c8a86/
00:00. Начинается демонстрация Универсальной функции ПолучитьРезультатСКДи().
Показ будет выполнен на демонстрационной базе УТ, в которую добавлены два расширения.
00:12. Первое - это обязательное расширение «СКДи», обслуживающее Универсальную функцию.
Второе расширение «Моё» - произвольное.
00:24. Применение Универсальной функции начинается с подготовки входных параметров.
Эту промежуточную задачу решает функция ПолучитьСтруктуруСКДи(), которая формирует шаблоны входных параметров.
Из них обязательные:
1.СхемаКомпоновкиДанных;
2.РезультатСКДи.
Примеры заполнения параметров предложены в теле Универсальной функции.
Второй параметр РезультатСКДи на входе задаёт тип возвращаемого Значения. (Таблица, Дерево или Табличный документ).
По умолчанию возвращается ТаблицаЗначений.
01:01. Остальные 9 штук входных параметров необязательные, но именно эти параметры предоставляют свободу разработчику.
Перечислю имена необязательных входных параметров:
- ПараметрыДанных;
- КлючВарианта;
- КомпоновщикНастроек;
- Два варианта Отбора ;
- ВнешниеНаборыДанных;
- НовыеПоля (имеются в виду отсутствующие в макете);
- СтрокаСоединенияСВнешнейБазой;
- ВозможностьИспользованияВнешнихФункций (по умолчанию - Истина);
- УстановитьПривилегированныйРежим (по умолчанию - неопределено).
01:43. После подготовки входных параметров, следует вызывать главную функцию ПолучитьРезультатСКДи(), которая вернёт рассчитанное значение СКД.
Выглядит эта функция вот так.
Она возвращает таблицу или дерево значений для макетаСКД или отчёта, использующего СКД.
Кроме того, эта Универсальная функция позволит получить данные из внешней базы.
Далее приступим к демонстрации возможностей Универсальной функции.
02:13. Для демонстрации возможностей функции достаточно 6 примеров.
В Примере_1 предполагается минимальное участие программиста.
02:25. В Документ.ЗаказПоставщику в процедуре ОбработкаПроведения()
заполняем два обязательных входных параметра.
Тип результата на выходе назначен - ДеревоЗначений.
03:05. и получаем ДеревоЗначений.
03:17. Для демонстрации возможностей меняем тип входного параметра РезультатСКДи на ТаблицаЗначений. Далее обновляем конфигурацию и повторяем запуск.
Внимательный разработчик уже понял, что результатСКД в виде таблицы или дерева получаем за два шага.
На первом шаге заполняем структуру со входными параметрами. Подсказки по заполнению параметров помещены в тело процедуры ПолучитьСтруктуруРезультатСКДи().
Причём, следует учитывать, что два параметра – обязательные, а девять – уточняющие результат.
На втором Шаге автоматически возвращается таблица или дерево.
04: 24. В нашем примере сейчас получается ТаблицаЗначений.
Проверяем результат.
04:30. В Пример_2 уточняем не обязательные параметры.
Добавим Новое поле «Назначение.Заказ» и КлючВарианта.
Далее, обновляем конфигурацию и перезапускаем, так же как в первом примере.
Немного об истории этой Универсальной функции.
Функция не разрабатывалась специально. Она наполнялась постепенно по ходу разработок. Поэтому, скорее всего, в будущем появятся полезные доработки.
05:28. В колонках таблицы значений видим новое поле НазначениеЗаказ.
05:51. В Пример_3. Уточняем отбор. Используем второй вариант подготовки входных параметров отбора для случая с заранее неизвестным количеством отборов.
Установим отбор на равенство Характеристики перечислению со значением «С дистанционным управлением».
Шаблоны заполнения входных параметров отбора можно посмотреть в теле процедуры ПолучитьСтруктуруРезультатСКДи().
06:58. Наблюдаем, что отбор сработал.
07:10. В пример_4 получим данные из внешней базы по Com соединению.
Для этого, предварительно, уже была подготовлена внешняя база.
В демонстрируемом видео - это копия текущей базы.
07:53. Во входных параметрах указываем путь до внешней базы.
Наличие адреса внешней базы во входных параметрах активирует Com соединение.
Хочу добавить, что импорт данных достаточно часто востребован при переносе данных.
08:05. Проверяем, что ComСоединение подключено.
Подробно о технологии применения СКД в Com соединении можно прочитать у автора «Е.Ю.Хрусталёва в книге Разработка сложных отчетов в 1С_Предприятии 8.».
Обращаю внимание, что в базе-источнике обязательно должны присутствовать ОбщиеМодули с наименованиями «ФункцииДляОтчетовСКДи» и «ФункцииДляОтчетовСерверСКДи».
08:23. На экране таблица, построенная по данным из внешней базы.
08:54. В Пример_5 и Пример_6 за счёт применения дополнительных функций будут расширены возможности Универсальной функции.
В пример_5 будет продемонстрировано использование ВнешнийНабораДанных.
Для этого в типовой конфигурации используем форму Документ.ДоверенностьВыданная.
09:07. Функция ПодготовитьВнешнийНаборДанных() создаёт таблицу для внешнего набора данных.
09:09. Посмотрим на таблицу, подготовленную в качестве внешнего набора данных.
При необходимости, таблицу можно поместить в хранилище значений.
Универсальная функция, в нужный момент, сама поймёт необходимость и извлечёт её из хранилища.
09:24. В нашем примере, имя набора это МестаИспользования.
09:43. Просматриваем рассчитанную таблицу и видим, что СКД построила запрошенное правильно.
09:58. В примере_6 покажем, как получить ТаблицуЗначений для любого отчета СКД.
10:05. Утверждение «для любого отчёта» продемонстрируем на отчёте АнализСебестоимостиТоваровРасширенный (синоним - СебестоимостьТоваров).
10:49. Видим, что в типовой процедуре «ПриКомпоновкеРезультата()», перед началом формирования этого отчета разработчиком выполнена программная подготовка данных перед запуском СКД.
Далее покажем, как учесть внесенные разработчиком изменения.
Отдельно подчёркиваю, что изменения могут быть любые.
Однако, следует иметь в виду, что существуют технические ограничения на возможность построения таблицы методом СКД. Эти ограничения изложены в комментарии тела Универсальной функции.
//http://robolen.narod.ru/publ/statja_po_1s/skd/vyvod_v_derevo_znachenij_tablicu_znachenij_dlja_dalnejshej_programmnoj_obrabotki/5-1-0-147?ysclid=lhhper4nr1799676124
//При выводе результата компоновки в таблицу или дерево значений существуют следующие ограничения:
//в настройках должны присутствовать только группировки и детальные записи. Использование таблиц, диаграмм и вложенных отчетов не допускается;
//все папки, указанные в выбранных полях, игнорируются;
//не используется условное оформление, а также оформление для поля, указанное в схеме компоновки данных;
// из параметров вывода используются только следующие:
// расположение общих итогов по вертикали;
// тип заголовка полей;
// количество записей;
// процент записей;
// предопределенные макеты не используются.
11:01. Чтобы учесть внесённые разработчиком изменения, Универсальную функцию запустим из процедуры расширения «&После(ПриКомпоновкеРезультата)».
Из которой передаём необходимые параметры, учитывающие все изменения для запуска СКД, подготовленные разработчиком.
11:13.Далее, уже продемонстрированным методом получаем РезультатСКДи.
11:36. На всякий случай, запомним РезультатСКДи в ДополнительныхСвойствах.
11:41. Посмотрим на дерево.
11:55. Сейчас увидим, что штатный табличный документ также будет получен.
Заключение.
Для себя я сделал вывод, что Универсальная функция экономит время разработчика эффективно.
Чтобы подчеркнуть, что над Универсальной функцией надо было немного подумать, я назначил ей цену не один стартмани а два.
Желаю успехов всем и каждому.
12:21 Длительность видеоролика.
Состав файла ZIP:
- Конфигурация расширения СКДи.cfe, содержащая Универсальную функцию.
- Конфигурация расширения МоёРасширение.cfe, использованная для демонстрационного примера.
- Инструкция по подготовке демонстрационной базы, использованной в видеоролике.
- Видео с примерами применения Универсальной функции ПолучитьРезультатСКДи().
Проверено на следующих конфигурациях и релизах:
- Управление торговлей, редакция 11, релизы 11.4.14.181