Универсальная функция ПолучитьРезультатСКД()

24.06.25

Разработка - Универсальные функции

Универсальная функция позволяет применить Систему компоновки Дданных (СКД) для расчета таблицы или дерева значений даже по данным из внешней базы через Com соединение.

Разработка

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Универсальная функция - ПолучитьРезультатСКД(), размещённая в расширении
.zip 118,37Mb ver:1.0.
0
0 Скачать (2 SM) Купить за 2 150 руб.
  1. Краткое описание.

Очень не хочется тратить своё драгоценное время программиста на написание программного кода!

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

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

Некоторые ответы следуют:

  1. Желательно использовать наглядность и возможности СКД, например, для обработки проведения;
  2. Существенно сокращаются трудозатраты на исправление кривых баз данных;
  3. Легко преобразовать существующий отчетСКД из Табличного документа в ДеревоЗначений или ТаблицуЗначений для целей программирования.
  1. Сформулируем цель разработки.

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

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

  1. Опишем как работает универсальная функция ПолучитьРезультатСКДи(СтруктураСКДи).

Результат СКД получаем за два шага.

На первом шаге программист заполняет СтруктураСКДи параметрами для расчета.

На втором шаге автоматически возвращается РезультатСКДи в форме Таблицы или Дерева значений (или ТабличногоДокумента).

Примеры применения показаны на видео   https://rutube.ru/video/515f7c1a558c8a9cc2f3e888969c8a86/

    1. В помощь программисту, внутри описания функции ПолучитьСтруктуруРезультатСКДи() размещён комментарий с примерами заполнения входных параметров.
    2. Следует иметь в виду, что не любой отчёт СКД возможно преобразовать в таблицу значений. Ограничения можно прочитать по ссылке - 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

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

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

 

    1. СтруктураСКДи содержит 2 обязательных свойства и 9 необязательных.

Обязательные входные данные:

      1. Макет;
      2. тип Результата на выходе;

Необязательные входные данные программно уточняют результат:

      1. ПараметрыДанных;
      2. КлючВарианта;
      3. КомпоновщикНастроек;
      4. Отбор (два варианта назначения отбора для случаев с заранее известным количеством отборов и неизвестным);
      5. НовыеПоля, отсутствующие в макете;
      6. ВнешниеНаборыДанных;
      7. СтрокаСоединенияСВнешнейБазой;
      8. ВозможностьИспользованияВнешнихФункций;
      9. УстановитьПривилегированныйРежим.
  1. Прежде чем перейти к примерам, рассмотрим использованные условные обозначения.
    1. Для удобства работы, элементы, имеющие отношение к универсальной функции, помечены либо префиксом, либо постфиксом «скдИ» или «СКДи». Буква «и» другого размера, предотвращает путаницу со штатной аббревиатурой СКД, а также, напоминает, что это расширение имеет Назначение «Исправление» смотри рис.1  РасширениеСКДи
    2. Префикс «лок» обозначает, что реквизит имеет действие только внутри процедуры.
    3. Постфиксом «_01», «_02» и т.д. обозначены аналогичные строки (или элементы, или копии, или и т.д. что-то аналогичное).

 

  1. На видео приведены шесть примеров использования Универсальной функции.

Для демонстрации, использована типовая конфигурация УТ. (Демоверсия Управление торговлей, редакция 11 (11.4.14.181) на платформе 8.3.25.1394.)

https://rutube.ru/video/515f7c1a558c8a9cc2f3e888969c8a86/

Первый пример – это простейшее применение обязательных параметров.

Следующие 3 примера – это применение не обязательных параметров.

Два последних примера показывают возможности Универсальной функции при использовании дополнительных методов.

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

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

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

                                       

 

  1. Текст озвучки видео с примерами. Продолжительность 12:29.

https://rutube.ru/video/515f7c1a558c8a9cc2f3e888969c8a86/

 

00:00. Начинается демонстрация Универсальной функции ПолучитьРезультатСКДи().

Показ будет выполнен на демонстрационной базе УТ, в которую добавлены два расширения.

00:12. Первое - это обязательное расширение «СКДи», обслуживающее Универсальную функцию.

Второе расширение «Моё» - произвольное.

00:24. Применение Универсальной функции начинается с подготовки входных параметров.

 Эту промежуточную задачу решает функция ПолучитьСтруктуруСКДи(), которая формирует шаблоны входных параметров.

Из них обязательные:

1.СхемаКомпоновкиДанных;

2.РезультатСКДи.

Примеры заполнения параметров предложены в теле Универсальной функции.

Второй параметр РезультатСКДи на входе задаёт тип возвращаемого Значения.  (Таблица, Дерево или Табличный документ).

По умолчанию возвращается ТаблицаЗначений.

01:01. Остальные 9 штук входных параметров необязательные, но именно эти параметры предоставляют свободу разработчику.

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

  1. ПараметрыДанных;
  2. КлючВарианта;
  3. КомпоновщикНастроек;
  4. Два варианта Отбора ;
  5. ВнешниеНаборыДанных;
  6. НовыеПоля (имеются в виду отсутствующие в макете);
  7. СтрокаСоединенияСВнешнейБазой;
  8. ВозможностьИспользованияВнешнихФункций (по умолчанию - Истина);
  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:

  1. Конфигурация расширения СКДи.cfe, содержащая Универсальную функцию.
  2. Конфигурация расширения МоёРасширение.cfe, использованная для демонстрационного примера.
  3. Инструкция по подготовке демонстрационной базы, использованной в видеоролике.
  4. Видео с примерами применения Универсальной функции ПолучитьРезультатСКДи().

 

Проверено на следующих конфигурациях и релизах:

  • Управление торговлей, редакция 11, релизы 11.4.14.181

Конструктор СКД Универсальная функция Результат СКД ТаблицаЗначений ДеревоЗначений Разработка.

См. также

Универсальные функции Программист 1С v8.3 1C:Бухгалтерия Бесплатно (free)

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

21.05.2024    35339    dimanich70    83    

155

Универсальные функции Программист 1С v8.3 1C:Бухгалтерия Абонемент ($m)

Задача: вставить картинку из буфера обмена на форму средствами платформы 1С.

1 стартмани

18.03.2024    5443    6    John_d    11    

57

Универсальные функции Программист Стажер 1С v8.3 1C:Бухгалтерия Бесплатно (free)

Пришлось помучиться с GUID-ами немного, решил поделиться опытом, мало ли кому пригодится.

12.02.2024    41456    atdonya    29    

63

Универсальные функции Программист 1С v8.3 Бесплатно (free)

На заключительных этапах, когда идет отладка или доработка интерфейса, необходимо много раз переоткрыть внешний объект. Вот один из способов автоматизации этого.

30.11.2023    7061    ke.92@mail.ru    17    

66

WEB-интеграция Универсальные функции Механизмы платформы 1С Программист 1С v8.3 1C:Бухгалтерия Бесплатно (free)

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

28.08.2023    19296    YA_418728146    8    

173

Пакетная печать Печатные формы Адаптация типовых решений Универсальные функции 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Абонемент ($m)

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

2 стартмани

22.08.2023    5282    85    progmaster    13    

4

Инструментарий разработчика Универсальные функции 1С v8.3 1C:Бухгалтерия 1С:Бухгалтерия 3.0 1С:ERP Управление предприятием 2 1С:Управление холдингом 1С:Зарплата и Управление Персоналом 3.x 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Управление торговлей 11 1С:Розница 2 1С:Документооборот Абонемент ($m)

Копирует в буфер значения из списков, из ячеек отчетов, таблиц, настроек списков, других отборов и вставляет в выбранную настройку отбора. Работает с Объект не найден. Работает как в одной так и между разными базами 1С. Использует комбинации [Alt+C] Копировать список, [Alt+V] Вставить список. Также для копирования данных используется стандартная [Ctrl+C] (например из открытого xls, mxl, doc и т.п. файла скопировать список наименований)

1 стартмани

13.10.2022    20828    204    sapervodichka    113    

138
Оставьте свое сообщение