Универсальная функция - Сформировать результат СКД

15.06.18

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

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

Скачать исходный код

Наименование Файл Версия Размер
Универсальная функция - СформироватьРезультатСКД:
.zip 489,90Kb
4
.zip 2.8.05 489,90Kb 4 Скачать
Универсальная функция - Сформировать результат СКД:
.zip 530,08Kb
1
.zip 530,08Kb 1 Скачать
Универсальная функция - Сформировать результат СКД:
.zip 510,56Kb
5
.zip 2.8.06 510,56Kb 5 Скачать

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

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

Предлагаемая функция, назовём её СформироватьРезультатСКД, одинаково работает как в обычном, так и в управляемом приложениях.

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

 

Описание универсальной функции.

СформироватьРезультатСКД(), версия 2.8.05

Синтаксис:

СформироватьРезультатСКД(<СтруктураПараметрыЗапускаСКД>)

Параметры:

<СтруктураПараметрыЗапускаСКД> (обязательный)

Тип: Структура.

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

Ключи и значения структуры (СтруктураПараметрыЗапускаСКД).

ключ1 = "АдресРезультатаСКД", тип:строка. (Необязательный).

Значение1, тип:Строка.

Адрес временного хранилища, в которое будет помещен результат работы системы компоновки данных.

Наличие или отсутствие ключа1 определяет тип возвращаемого значения. Если ключ1 отсутствует, то будет возвращён сам РезультатСКД.

 

ключ2 = "АдресМакетаСКД", тип:строка. (обязательный) 

Значение2, тип: Строка.

Адрес временного хранилища, в которое помещен макет схемы компоновки данных (Тип:СхемаКомпоновкиДанных). 

 

ключ3 = "НастройкиСКД", тип:Строка. (необязательный).

Значение3= тип:Строка, НастройкиКомпоновкиДанных.

а) Если значение3 равно Имени вариантаСКД (строка), указанному на странице настроек схемыСКД, тогда РезультатСКД будет получен с настройками по умолчанию указанного вариантаСКД.

б) Если значение3 равно текущим настройкам (КомпоновщикНастроек.Настройки), то с этими настройками будет получен РезультатСКД.   

с) Если значение3 не указано, то РезультатСКД будет получен с настройками по умолчанию основного вариантаСКД.     

 

ключ4 = "ПараметрыСКД", тип:Строка

Значение4, тип:Структура. Структура4 содержит параметры схемы компоновки данных, указанные на странице параметров.

Структура4.Ключ = Имя параметра, как оно задано в схеме компоновки данных.

Структура4.Значение = Значение параметра.

 

ключ5 = "СтрокаСоединения", тип:Строка. (необязательный).

Значение5, тип:Строка. Строка соединения с внешней базой.   Если СтрокаСоединения не указана, то источником данных считается текущая база.

 

Ключ6 = "РезультатСКДТип", тип:Строка. (необязательный).

Значение6 = Тип:Строка,ТабличныйДокумент, ТаблицаЗначений,  ДеревоЗначений, ДанныеФормыКоллекция, ДанныеФормыДерево. 

Задает тип результатаСКД. 

Обрабатываются следующие значения строки: «ТабличныйДокумент», «ТабДок», «ТаблицаЗначений», «ТЗ» и «ДеревоЗначений», «ДЗ». Другие значения строки будут интерпретироваться как «ТабличныйДокумент».

Если ключ6 не указан, то будет возвращён результатСКД типа ТабличныйДокумент.

 

Ключ7 = «ВнешниеНаборыДанныхСКД».  Тип:Строка. (необязательный)

Значение7 = Тип:строка, структура.

а) Строка соединения с Внешней информационной базой 1С:Предприятие обеспечивает Com соединение с внешней базой.

б) Структура обеспечивает Web соединение с внешней базой.

Значение7структура.Ключ1=URLОписанияWebСервиса Значение7структура.Значение1=URLОписанияWebСервиса 

 

Ключ8 = «ПроверитьНаличие».  Тип:Строка (необязательный)

Значени8, тип Булево.

Используется для определения варианта местоположения ОбщегоМодуляСКД.

Допустимы два варианта:

А) Конфигурация.ОбщиеМодули.ОбщегоНазначенияСКД. (рекомендуется)

Б) ВнешнийОтчет.ОбщийМодуль.ОбщегоНазначенияСКД

 

Ключ9 = «ПроверятьДоступностьПолей».  Тип:Строка (необязательный)

Значение9, тип Булево. 

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

 

Ключ10 = «ПараметрыФункциональныхОпций».  Тип:Строка (необязательный)

Значение10, тип Структура.

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

 

Ключ11= «ВозможностьПрерыванияПользователем». Тип:Строка (необязательный).

Значени11, тип Булево.

Указывает, может ли пользователь прервать вывод при помощи комбинации клавиш Ctrl + Break.
Значение по умолчанию:
Истина
.

 

Ключ12= «ОбщиеФормулы». Тип:Строка (необязательный).

Значени12, тип Булево.

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

 

 

Возвращаемое значение:

Тип: Строка, Структура, ТабличныйДокумент, ТаблицаЗначений, ДеревоЗначений.

А) Если тип - строка, то возвращен адрес временного хранилища, в котором размещен результат СКД.

Возвращаемое значение помещается во временное хранилище по адресу "АдресРезультатаСКД".

Б) Если тип – структура, то используются два ключа:

 Ключ1= «РезультатСКД»,

Ключ2= «ДанныеРасшифровки»

Вариант 1 возвращаемого значения типа Структура.

значение1 =  Тип:ТабличныйДокумент

значение2 = Тип:ДанныеРасшифровкиКомпоновкиДанных

 

Вариант 2 для тонкого клиента возвращаемого значения типа Структура,

Значение1 = Тип:ТабличныйДокумент

Значение2 = Неопределено

 

Вариант 3 возвращаемого значения – тип:Структура.

Значение1 = Тип:ТаблицаЗначений

Значение2 = Неопределено

 

Вариант 4 возвращаемого значения – тип:Структура.

Значение1 = Тип:ДеревоЗначений

Значение2 = Неопределено

 

Вариант 5 возвращаемого значения - тип:ТабличныйДокумент

 

Вариант 6 возвращаемого значения -тип:ТаблицаЗначений

 

Вариант 7 возвращаемого значения -тип:ДеревоЗначений

 

 

Описание:

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

Примечание. Возвращаемое значение может быть помещено во временное хранилище по адресу "АдресРезультатаСКД".

Доступность:

Сервер, Толстый клиент, тонкий клиент

Примечание:

  1.        Функция может быть размещена либо в общем модуле конфигурации (рекомендуется), либо в расширении конфигурации, либо в модуле внешнего отчета.
  2.       Для упрощения изучения функции, к данной разработке приложена блок-схема действий программиста, принявшего решение использовать функцию. Блок-схема вызывается кнопкой.
  3.         Функция состоит из трех модулей «ОбщегоНазначенияСКД» ,  «ФункцииДляОтчетовСерверСКД» и «ФункцииДляОтчетовСКД».
  4.        Для обеспечения чтения внешней базы, во внешней базе следует разместить процедуры «ФункцииДляОтчетовСерверСКД» и «ФункцииДляОтчетовСКД».

Использованный здесь алгоритм чтения внешней базы через Com соединение опубликован в книге «Разработка сложных отчетов в 1С:Предприятии 8»  автора Е.Ю.Хрусталева.  

  1.         В управляемом приложение данную функцию следует использовать в паре с другой универсальной функцией «СоздатьКолонкиНаУправляемойФорме» //infostart.ru/public/547849/

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

 

 

Озвучка демонстрационного примера.

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

Начинается демонстрация использования универсальной функции СформироватьРезультатСКД.

Демонстрация функции будет выполнена для:

  1.        обычного приложения,
  2.       тонкого клиента управляемого приложения
  3.        для Com соединения с внешней базой

Чтобы доставить себе удовольствие от работы с этой функцией, рекомендую разместить её в трёх общих модулях конфигурации. Например, «ОбщегоНазначенияСКД» ,  «ФункцииДляОтчетовСерверСКД» и «ФункцииДляОтчетовСКД».

Также, эти модули можно разместить в расширении конфигурации.

Оба варианты представлены в программном коде.

Для обеспечения чтения внешней базы, во внешней базе следует разместить процедуры «ФункцииДляОтчетовСерверСКД» и «ФункцииДляОтчетовСКД».

 

40 сек.

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

 

 Запускаем 1С:Предприятие в двух режимах.

А) Обычное приложение

Б) Тонкий клиент управляемого приложения

 

И демонстрируем использование функции в каждом режиме.

 

А) Демонстрируем Обычный режим.

Один раз проследим работу функции в конфигураторе.

В этой разработке предложены удобные шаблоны вызова функции как в обычном приложении, так и в управляемом.

Видим, что в тексте шаблонов присутствуют все параметры настроек.

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

В этом примере ввод настроек немного автоматизирован на мышку.    

 

1мин.40сек

Подключим внешнюю базу данных и продолжим демонстрацию.

Формирование строки Com соединения выполним на странице «Настройка внешней базы».

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

Использованный здесь алгоритм чтения внешней базы через Com соединение опубликован в книге «Разработка сложных отчетов в 1С:Предприятии 8»  автора Е.Ю.Хрусталевой.  

 

2мин.40сек

Б) В тонком клиенте повторим все варианты вызова универсальной функции.

Примечание. В управляемом приложение данную функцию следует использовать в паре с другой универсальной функцией «СоздатьКолонкиНаУправляемойФорме» //infostart.ru/public/547849/

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

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

3 мин. 30 сек.

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

 

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

Желаю удачи всем и каждому.

Функция СформироватьРезультатСКД( цСтруктураЗапускаСКД)  Экспорт

         Перем цАдресРезультатаСКД,цАдресМакетаСКД, цАдресДанныхРасшифровкиСКД;

         Перем цПараметрыСКД, цВариантСКД, цРезультатСКДТип, цНастройки, цОбщиеФормулы;

         Перем цСтрокаСоединения , цВнешниеНаборыДанныхСКД, цВариантБазыВнешнегоСоединения;//, ФлагЭтоТонкийКлиент;

         Перем цПроверитьНаличиеЭтойФункции, цДанныеРасшифровки;

         Перем цПроверятьДоступностьПолей, цПараметрыФункциональныхОпций, цВозможностьПрерыванияПользователем;

        

        

         ФлагПроверитьНаличиеЭтойФункции = цСтруктураЗапускаСКД.Свойство("ПроверитьНаличие",цПроверитьНаличиеЭтойФункции);

         Если ФлагПроверитьНаличиеЭтойФункции Тогда

                 Возврат  Истина;//Есть эта универсальная функция в глобальном модуле

         КонецЕсли;      

        

         цУпрОбыч =ТекущийРежимЗапуска();

        

         ФлагЕстьАдресРезультатаСКД = цСтруктураЗапускаСКД.Свойство("АдресРезультатаСКД",цАдресРезультатаСКД);

         Если ФлагЕстьАдресРезультатаСКД Тогда

                 Если не ЗначениеЗаполнено(цАдресРезультатаСКД) Тогда

                          ФлагЕстьАдресРезультатаСКД = Ложь;

                 ИначеЕсли ЭтоАдресВременногоХранилища(цАдресРезультатаСКД) Тогда

                          УдалитьИзВременногоХранилища(цАдресРезультатаСКД);

                 Иначе

                          цАдресРезультатаСКД = Новый УникальныйИдентификатор  ;

                 КонецЕсли;

         КонецЕсли;

        

         ФлагЕстьАдресДанныхРасшифровкиСКД = цСтруктураЗапускаСКД.Свойство("АдресДанныхРасшифровкиСКД",цАдресДанныхРасшифровкиСКД);

         Если ФлагЕстьАдресДанныхРасшифровкиСКД Тогда

                 Если ЭтоАдресВременногоХранилища(цАдресДанныхРасшифровкиСКД) Тогда

                          УдалитьИзВременногоХранилища(цАдресДанныхРасшифровкиСКД);  

                 Иначе

                          цАдресДанныхРасшифровкиСКД = Новый УникальныйИдентификатор  ;

                 КонецЕсли;

         КонецЕсли;

        

         ФлагЕстьАдресМакетаСКД = цСтруктураЗапускаСКД.Свойство("АдресМакетаСКД",цАдресМакетаСКД);

         Если ФлагЕстьАдресМакетаСКД

                 И ЭтоАдресВременногоХранилища(цАдресМакетаСКД) Тогда

                 цСхемаКомпоновкиДанных = ПолучитьИзВременногоХранилищаСКД(цАдресМакетаСКД);

         Иначе   

                 Сообщение = Новый СообщениеПользователю;

                 Сообщение.Текст = "не указан макет СКД";

                 //Сообщение.Поле = "";

                 Сообщение.Сообщить();

         КонецЕсли;

        

         ФлагНастройкиСКД = цСтруктураЗапускаСКД.Свойство("НастройкиСКД",цНастройки);

         Если ФлагНастройкиСКД Тогда

                 Если ТипЗнч(цНастройки) = тип("Строка") Тогда //ИмяВариантаНастройки

                          цВариантСКД = цНастройки;

                          цНастройки = цСхемаКомпоновкиДанных.ВариантыНастроек[цВариантСКД].Настройки;

                 ИначеЕсли ТипЗнч(цНастройки) = тип("НастройкиКомпоновкиДанных") Тогда   //ТекущаяНастройка

                          //Ok

                 ИначеЕсли цНастройки = Неопределено Тогда

                          цНастройки = цСхемаКомпоновкиДанных.НастройкиПоУмолчанию;

                 Иначе

                          Сообщение = Новый СообщениеПользователю;

                          Сообщение.Текст = "нет настройки СКД";

                          //Сообщение.Поле = "";

                          Сообщение.Сообщить(); 

                 КонецЕсли;

         Иначе

                 цНастройки = цСхемаКомпоновкиДанных.НастройкиПоУмолчанию;

         КонецЕсли;               

 

         ФлагПроверятьДоступностьПолейСКД = цСтруктураЗапускаСКД.Свойство("ПроверятьДоступностьПолей",цПроверятьДоступностьПолей);     

         Если не ФлагПроверятьДоступностьПолейСКД Тогда

                 цПроверятьДоступностьПолей=Истина;

         КонецЕсли;

        

         ФлагПараметрыФункциональныхОпцийСКД = цСтруктураЗапускаСКД.Свойство("ПараметрыФункциональныхОпций",цПараметрыФункциональныхОпций);              

         Если не ФлагПроверятьДоступностьПолейСКД Тогда

                 цПараметрыФункциональныхОпций=Неопределено;

         КонецЕсли;

        

  ФлагВозможностьПрерыванияПользователемСКД = цСтруктураЗапускаСКД.Свойство("ВозможностьПрерыванияПользователем",цВозможностьПрерыванияПользователем);       

         Если не ФлагВозможностьПрерыванияПользователемСКД Тогда

                 цВозможностьПрерыванияПользователем=Истина;

         КонецЕсли;

        

         ///// определим тип РезультатаСКД

         флагТабДок = Ложь ;

         ФлагТЗ = Ложь;

         ФлагДЗ = Ложь;

        

         ФлагЕстьРезультатСКДТип = цСтруктураЗапускаСКД.Свойство("РезультатСКДТип",цРезультатСКДТип);

         Если ФлагЕстьРезультатСКДТип Тогда  //определимТипВозвращаемыхДанных

                 Если ТипЗнч(цРезультатСКДТип) = тип("Строка") Тогда

                          флагТабДок = (ВРег(цРезультатСКДТип) = ВРег("ТабличныйДокумент")

                          ИЛИ ВРег(цРезультатСКДТип) = ВРег("ТабДок" ));

                          ФлагТЗ     = (ВРег(цРезультатСКДТип) = ВРег("ТаблицаЗначений")

                          ИЛИ ВРег(цРезультатСКДТип) = ВРег("ТЗ")) ;

                          ФлагДЗ     = (ВРег(цРезультатСКДТип) = ВРег("ДеревоЗначений")

                          ИЛИ ВРег(цРезультатСКДТип) = ВРег("ДЗ")) ;

                 Иначе

                          флагТабДок = (ТипЗнч(цРезультатСКДТип) = тип("ТабличныйДокумент"));

                          ФлагТЗ     = (ТипЗнч(цРезультатСКДТип) = тип("ТаблицаЗначений"))

                          ИЛИ (ТипЗнч(цРезультатСКДТип) = тип("ДанныеФормыКоллекция")) ;

                          ФлагДЗ     = (ТипЗнч(цРезультатСКДТип) = тип("ДеревоЗначений"))

                          ИЛИ (ТипЗнч(цРезультатСКДТип) = тип("ДанныеФормыДерево")) ;

                         

                 КонецЕсли;

         КонецЕсли;               

        

         Если (флагТабДок или ФлагТЗ или ФлагДЗ )=Ложь Тогда

                 флагТабДок = Истина;

         КонецЕсли;

        

         ФлагЕстьВнешниеНаборыДанныхСКД = цСтруктураЗапускаСКД.Свойство("ВнешниеНаборыДанныхСКД",цВнешниеНаборыДанныхСКД);   

         Если ФлагЕстьВнешниеНаборыДанныхСКД Тогда

                 Если Не ТипЗнч(цВнешниеНаборыДанныхСКД)=Тип("Структура") Тогда

                          ФлагЕстьВнешниеНаборыДанныхСКД = Ложь;

                          Сообщение = Новый СообщениеПользователю;

                          Сообщение.Текст = "предложены не правильные внешние данные: "+цВнешниеНаборыДанныхСКД;

                          //Сообщение.Поле = "";

                          //Сообщение.УстановитьДанные();

                          Сообщение.Сообщить();

                 КонецЕсли;

         КонецЕсли;

        

         ФлагЕстьобщиеФормулы = цСтруктураЗапускаСКД.Свойство("ОбщиеФормулы",цОбщиеФормулы );

         Если НЕ ФлагЕстьобщиеФормулы Тогда

                 цОбщиеФормулы = Истина;

         КонецЕсли;

        

         ФлагПараметрыСКД = цСтруктураЗапускаСКД.Свойство("ПараметрыСКД",цПараметрыСКД);

         Если ФлагПараметрыСКД Тогда

                 Для каждого цЭлем  Из цПараметрыСКД Цикл

                          Попытка

                                   цНастройки.ПараметрыДанных.УстановитьЗначениеПараметра(цЭлем.Ключ, цЭлем.Значение);  //

                          Исключение                                                

                                   цОш = ОписаниеОшибки();                               

                                   сооб= Новый СообщениеПользователю;

                                   сооб.Текст = цОш+ ": "+цЭлем.Ключ+ " = "+цЭлем.Значение;

                                   сооб.Сообщить();

                          КонецПопытки;

                 КонецЦикла;

         КонецЕсли;

        

         ФлагСтрокаСоединенияСКД = цСтруктураЗапускаСКД.Свойство("СтрокаСоединения",цСтрокаСоединения);

         ФлагСоединенияWEB = Ложь;

         Если ФлагСтрокаСоединенияСКД Тогда

                 Если НЕ ЗначениеЗаполнено(цСтрокаСоединения) Тогда

                          цСтрокаСоединения="";

                          ФлагСтрокаСоединенияСКД =Ложь;

                 ИначеЕсли ТипЗнч(цСтрокаСоединения)=Тип("Строка")  Тогда // COMсоединение

                          ФлагСтрокаСоединенияСКД = Не ПустаяСтрока(цСтрокаСоединения);

                         

                 ИначеЕсли ТипЗнч(цСтрокаСоединения)=Тип("Структура")  Тогда // WEBсоединение

                          ФлагСтрокаСоединенияСКД =Ложь;

                          ФлагСоединенияWEB = Истина;               

                 КонецЕсли;

         иначе   

                 цСтрокаСоединения="";

                 ФлагСтрокаСоединенияСКД =Ложь;

         КонецЕсли;

        

         Если ФлагТабДок   Тогда 

                 РезультатСКД = Новый ТабличныйДокумент;

         ИначеЕсли  ФлагТЗ Тогда

                 #Если не ТонкийКлиент Тогда

                          РезультатСКД = Новый ТаблицаЗначений;

                 #КонецЕсли

         ИначеЕсли ФлагДЗ Тогда

                 #Если не ТонкийКлиент Тогда

                          РезультатСКД = Новый ДеревоЗначений;       

                 #КонецЕсли

         КонецЕсли;

        

#Если Сервер Или ТолстыйКлиент Или ВнешнееСоединение Или ЭтоМобильноеПриложениеСервер Или Клиент Тогда

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

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

                 Если ФлагТабДок  Тогда ////получим РезультатСКД       

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

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

                         

цПроцессорКомпоновкиДанных.Инициализировать(цМакетКомпоновки, цВнешниеНаборыДанныхСКД, цДанныеРасшифровки, цОбщиеФормулы);

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

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

                         

                          Если ФлагСоединенияWEB Тогда

                                   #Если не ТонкийКлиент Тогда

                                            ПроцессорВывода_ВывестиWEB(цПроцессорВывода ,цПроцессорКомпоновкиДанных, цМакетКомпоновки,  цДанныеРасшифровки, цСтрокаСоединения);

                                   #КонецЕсли

                          ИначеЕсли ФлагСтрокаСоединенияСКД Тогда

                                   ПроцессорВывода_ВывестиCOM(цПроцессорВывода ,цПроцессорКомпоновкиДанных, цМакетКомпоновки,  цДанныеРасшифровки, цСтруктураЗапускаСКД);

                                  

                          Иначе

                                   цПроцессорВывода.Вывести(цПроцессорКомпоновкиДанных, цВозможностьПрерыванияПользователем);

                                  

                          КонецЕсли;

                         

                          Если РезультатСКД.ВысотаТаблицы>500 Тогда

                                   РезультатСКД.ПоказатьУровеньГруппировокСтрок(0);//не обязательно

                                  

                          Иначе

                                   РезультатСКД.ПоказатьУровеньГруппировокСтрок(1);//не обязательно

                                  

                          КонецЕсли;

                         

                 ИначеЕсли ФлагТЗ ИЛИ ФлагДЗ Тогда

                         

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

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

                         

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

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

                         

                          Если ФлагСоединенияWEB Тогда

                                   #Если не ТонкийКлиент Тогда

                                            ПроцессорВывода_ВывестиWEB(цПроцессорВывода ,цПроцессорКомпоновкиДанных, цМакетКомпоновки, , цСтрокаСоединения);

                                   #КонецЕсли

                          ИначеЕсли ФлагСтрокаСоединенияСКД Тогда

                                   ПроцессорВывода_ВывестиCOM(цПроцессорВывода ,цПроцессорКомпоновкиДанных, цМакетКомпоновки, , цСтруктураЗапускаСКД );

                                  

                          Иначе

                                   цПроцессорВывода.Вывести(цПроцессорКомпоновкиДанных);

                          КонецЕсли;

                          ////    

                 Иначе

                          Сообщение = Новый СообщениеПользователю;

                          Сообщение.Текст = "ай  СКД";

                          //Сообщение.Поле = "";

                          //Сообщение.УстановитьДанные();

                          Сообщение.Сообщить();

                         

                 КонецЕсли;

                

         #КонецЕсли

        

         Если ФлагЕстьАдресРезультатаСКД=Ложь Тогда

                 ВозвратРезультата = РезультатСКД; 

         Иначе

                 СтрукРезультатСКД=Новый Структура;

                 СтрукРезультатСКД.Вставить("РезультатСКД", РезультатСКД);

                 #Если не ТонкийКлиент Тогда

                          Если ФлагЕстьАдресДанныхРасшифровкиСКД Тогда

                 цАдресДанныхРасшифровкиСКД = ПоместитьВоВременноеХранилище(цДанныеРасшифровки,цАдресДанныхРасшифровкиСКД);

                                   СтрукРезультатСКД.Вставить("ДанныеРасшифровки",  цАдресДанныхРасшифровкиСКД);

                                  

                          Иначе

                                   СтрукРезультатСКД.Вставить("ДанныеРасшифровки",  цДанныеРасшифровки);

                                  

                          КонецЕсли;

                         

                 #КонецЕсли

                 ВозвратРезультата = СтрукРезультатСКД;

                

         КонецЕсли;

        

         Если ФлагЕстьАдресРезультатаСКД Тогда

                  цАдресРезультатаСКД_=ПоместитьВоВременноеХранилище(ВозвратРезультата,цАдресРезультатаСКД);

                 Возврат цАдресРезультатаСКД_;

         Иначе

                 возврат ВозвратРезультата;

         КонецЕсли;

        

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

 

 

Примечание.

Файл УФрезультатСКД_2.zip  содержит 1Cv83.dt, 1Cv83.cf и УниверсальнаяФункцияСКД.epf

Для варианта размещения универсальной функции в глобальном модуле следует использовать 1Cv83.dt демонстрационной базы и 1Cv83.cf.

Если функцию нельзя разместить в глобальном модуле, то предложен внешний отчет  УниверсальнаяФункцияСКД.epf

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

См. также

Вставляем картинку из буфера обмена (платформа 1С 8.3.24)

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

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

1 стартмани

18.03.2024    2925    2    John_d    11    

56

GUID в 1С 8.3 - как с ними быть

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

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

12.02.2024    5193    atdonya    22    

52

Переоткрытие внешних обработок

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

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

30.11.2023    4143    ke.92@mail.ru    16    

62

Валидация JSON через XDTO (включая массивы)

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

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

28.08.2023    9540    YA_418728146    6    

143

Печать непроведенных документов для УТ, КА, ERP. Настройка печати по пользователям, документам и печатным формам

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

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

2 стартмани

22.08.2023    2289    28    progmaster    8    

3

Расширение: Быстрые отборы через буфер [Alt+C] Копировать список, [Alt+V] Вставить список, [Ctrl+C] Копировать из файлов

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

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

1 стартмани

13.10.2022    16411    143    sapervodichka    112    

130

Система контроля ведения учета [БСП]

Универсальные функции Механизмы типовых конфигураций БСП (Библиотека стандартных подсистем) Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

В данном материале рассмотрим типовой алгоритм подсистемы контроля учета БСП в конфигурациях на примерах.

18.07.2022    7377    quazare    8    

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