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

12.05.21

Разработка - СКД

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

Скачать файлы

Наименование Файл Версия Размер
Пример использования универсальной функции создания СКД
.epf 12,80Kb
76
.epf 12,80Kb 76 Скачать

* При написании статьи были использованы наработки Якова Когана (//infostart.ru/profile/48297/). Спасибо за идею

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

  •  Структура ресурсов: содержит перечень полей ресурсов, где ключ - ИмяПоля, Значение(Строка) - Агрегатная функция ("Сумма", "Среднее", "Количество",  и т.д.);
  •  Флаг АвтоЗаполнениеДоступныхПолей;
  •  Строковое имя макета оформления.
// НаборДанных (Типы: Строка, запрос, ТаблицаЗначений, ДеревоЗначений)
// Искомый набор данных
//
// СтруктураРесурсов (Тип: Структура) - Структура полей ресурсов, где ключ - ИмяПоля, Значение(Строка) - Агрегатная функция
//
// ВноситьПоляВыбора (Тип: Булево) - Флаг добавление полей набора
//
// ИмяСтандартногоМакетаОформления (Тип: Строка) - Имя макета оформления 
//
Функция СоздатьСхемуКомпоновкиДанных(НаборДанных, СтруктураРесурсов = Неопределено, АвтоЗаполнениеДоступныхПолей = Истина, ИмяСтандартногоМакетаОформления = "")
	
	СКД = Новый СхемаКомпоновкиДанных;
	
	// Заполнение основных данных схемы
	ИсточникДанных = СКД.ИсточникиДанных.Добавить();
	ИсточникДанных.Имя = "ИсточникДанных";
	ИсточникДанных.ТипИсточникаДанных = "Local";
	
	Если ТипЗнч(НаборДанных) = Тип("Строка") или ТипЗнч(НаборДанных) = Тип("Запрос") Тогда
		ТекущийНаборДанных = СКД.НаборыДанных.Добавить(Тип("НаборДанныхЗапросСхемыКомпоновкиДанных"));
		ТекущийНаборДанных.Имя = "ОсновнойНабор";
		ТекущийНаборДанных.Запрос = ?(ТипЗнч(НаборДанных) = Тип("Строка"),НаборДанных,НаборДанных.Текст);
		ТекущийНаборДанных.ИсточникДанных = "ИсточникДанных";			
		ТипНабора = "Запрос";
		ТекущийНаборДанных.АвтоЗаполнениеДоступныхПолей = АвтоЗаполнениеДоступныхПолей;
	ИначеЕсли ТипЗнч(НаборДанных) = Тип("ТаблицаЗначений") или ТипЗнч(НаборДанных) = Тип("ДеревоЗначений") Тогда
		ТекущийНаборДанных = СКД.НаборыДанных.Добавить(Тип("НаборДанныхОбъектСхемыКомпоновкиДанных"));
		ТекущийНаборДанных.Имя = "ОсновнойНабор";
		ТекущийНаборДанных.ИмяОбъекта = "ТаблицаИсточник";	
		ТекущийНаборДанных.ИсточникДанных = "ИсточникДанных";			
		ТипНабора = "Объект";
	Иначе			
		Возврат Неопределено;
	КонецЕсли;	
			
	НастройкиПоУмолчанию = СКД.НастройкиПоУмолчанию;
	
	// Создание структуры.
	// Группировка, детальные записи и автовыбранное поле
	Группировка = НастройкиПоУмолчанию.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных"));
	Группировка.Использование = Истина;			
	АвтоПоле = Группировка.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных"));
	АвтоПоле.Использование = Истина;
	
	КоллекцияКолонок = Новый ТаблицаЗначений;
	КоллекцияКолонок.Колонки.Добавить("Имя");
	КоллекцияКолонок.Колонки.Добавить("ТипЗначения");
	КоллекцияКолонок.Колонки.Добавить("Заголовок");
	
	Если ТипНабора = "Запрос" Тогда
		ПостроительЗапроса = Новый ПостроительЗапроса;
		Если ТипЗнч(НаборДанных) = Тип("Строка") Тогда
			ПостроительЗапроса.Текст = СокрЛП(НаборДанных);
		Иначе 
			ПостроительЗапроса.Текст = СокрЛП(НаборДанных.Текст);
		КонецЕсли;
		ПостроительЗапроса.ЗаполнитьНастройки();
		
		Для каждого ВыбранноеПоле Из ПостроительЗапроса.ВыбранныеПоля Цикл	
			НоваяКолонка = КоллекцияКолонок.Добавить();
			НоваяКолонка.Имя = ВыбранноеПоле.Имя;			
			НоваяКолонка.ТипЗначения = ПостроительЗапроса.ДоступныеПоля[ВыбранноеПоле.ПутьКДанным].ТипЗначения;
			НоваяКолонка.Заголовок = ВыбранноеПоле.Представление
		КонецЦикла;
		
	ИначеЕсли ТипНабора = "Объект" Тогда
		
		Для каждого Колонка Из НаборДанных.Колонки Цикл			
			НоваяКолонка = КоллекцияКолонок.Добавить();
			НоваяКолонка.Имя = Колонка.Имя;
			НоваяКолонка.ТипЗначения = Колонка.ТипЗначения;
			НоваяКолонка.Заголовок = Колонка.Имя;									
		КонецЦикла;
		
	КонецЕсли;
	
	// Добавление ресурсов
	Если ТипЗнч(СтруктураРесурсов) = Тип("Структура") Тогда			
		Для Каждого ЭлСтруктуры Из СтруктураРесурсов Цикл
			// Проверка, а существует ли поле ресурса среди полей набора
			Если КоллекцияКолонок.Найти(ЭлСтруктуры.Ключ) <> Неопределено Тогда
				// Проверка на правильность указания агрегатной функции
				Если    ЭлСтруктуры.Значение = "Сумма" 
					ИЛИ ЭлСтруктуры.Значение = "Среднее"
					ИЛИ ЭлСтруктуры.Значение = "Максимум"
					ИЛИ ЭлСтруктуры.Значение = "Минимум"
					ИЛИ ЭлСтруктуры.Значение = "Количество" Тогда
					
					ПолеРесурса             = СКД.ПоляИтога.Добавить();
					ПолеРесурса.ПутьКДанным = ЭлСтруктуры.Ключ;
					ПолеРесурса.Выражение   = ЭлСтруктуры.Значение + "(" + ЭлСтруктуры.Ключ + ")";					
					
				ИначеЕсли ЭлСтруктуры.Значение = "КоличествоРазличные" Тогда                      
					
					ПолеРесурса             = СКД.ПоляИтога.Добавить();
					ПолеРесурса.ПутьКДанным = ЭлСтруктуры.Ключ;
					ПолеРесурса.Выражение   = "Количество(Различные " + ЭлСтруктуры.Ключ + ")";
					
				КонецЕсли;
			КонецЕсли;	
		КонецЦикла;                             			
	КонецЕсли;
		
	// Добавление полей в набор		
	Для каждого НоваяКолонка Из КоллекцияКолонок Цикл			
		ПолеНабора = ТекущийНаборДанных.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных"));
		ПолеНабора.Заголовок = СокрЛП(НоваяКолонка.Заголовок);
		ПолеНабора.Поле = СокрЛП(НоваяКолонка.Имя);
		ПолеНабора.ПутьКДанным = СокрЛП(НоваяКолонка.Имя);
		
		// Удалим неопределено и NULL
		Массив = Новый Массив;
		Для каждого ТекущийТип Из НоваяКолонка.ТипЗначения.Типы() Цикл
			Если ТекущийТип = Тип("Неопределено") или ТекущийТип = Тип("NULL") или ТекущийТип = Неопределено или ТекущийТип = Null Тогда 
				Продолжить; 
			КонецЕсли;
			Массив.Добавить(ТекущийТип);
		КонецЦикла;
		ПолеНабора.ТипЗначения = Новый ОписаниеТипов(Массив,НоваяКолонка.ТипЗначения.КвалификаторыЧисла,НоваяКолонка.ТипЗначения.КвалификаторыСтроки,НоваяКолонка.ТипЗначения.КвалификаторыДаты);
						
		ВыбранноеПолеКомпоновкиДанных = НастройкиПоУмолчанию.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));			
		ВыбранноеПолеКомпоновкиДанных.Поле = Новый ПолеКомпоновкиДанных(ПолеНабора.ПутьКДанным);
		ВыбранноеПолеКомпоновкиДанных.Использование = Истина;
	КонецЦикла;
		
	// Оформление
	Если не ПустаяСтрока(ИмяСтандартногоМакетаОформления) Тогда
		ЗначениеПараметраВывода = НастройкиПоУмолчанию.ПараметрыВывода.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("МакетОформления"));
		ЗначениеПараметраВывода.Значение = ИмяСтандартногоМакетаОформления;
		ЗначениеПараметраВывода.Использование = Истина;
	КонецЕсли;
		
	Возврат СКД;
	
КонецФункции

В обработке наглядный пример использования функции. Поместите в функцию "ПолучитьТекстЗапроса" текст своего запроса и сформируйте.

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

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

- Формирование отчета СКД по таблице значений с динамическим составом колонок

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

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

Обработка протестирована в УПП 1.3.79.2. Платформа 8.2.19.130

СКД Схема компоновки данных Программное создание схемы программно

См. также

Infostart Toolkit: Инструменты разработчика 1С 8.3 на управляемых формах

Инструментарий разработчика Роли и права Запросы СКД Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Конфигурации 1cv8 Платные (руб)

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

12000 руб.

02.09.2020    101608    563    385    

608

1C:Предприятие для программистов: Запросы и отчеты. Онлайн-интенсив с 27 ноября по 27 декабря 2023г.

1С-программирование Запросы СКД Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Данный онлайн-курс предусматривает углубленное изучение языка запросов и возможностей системы компоновки данных, которые понадобятся при разработке отчетов, работающих на платформе “1С:Предприятие” в рамках различных прикладных решений. Курс предназначен для тех, кто уже имеет определенные навыки конфигурирования и программирования в системе “1С:Предприятие”, а также для опытных пользователей различных прикладных решений, которые используют в своей работе отчеты разного назначения. Курс является вторым курсом траектории развития 1С-Разработчика, с углубленным изучением тем "Язык запросов" и "Отчеты", которые были рассмотрены в рамках “Базового курса для начинающих 1С-программистов”.

7500 руб.

04.10.2023    2572    48    0    

48

Модель СКД

Инструментарий разработчика СКД Платформа 1С v8.3 Система компоновки данных Абонемент ($m)

DSL для работы с СКД.

1 стартмани

15.11.2023    4002    10    kalyaka    4    

81

Разрыв страницы в СКД. Легко!

СКД Платформа 1С v8.3 Система компоновки данных Бесплатно (free)

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

01.09.2023    3196    KVIKS    15    

76

Гибкие отборы через СКД на управляемых формах. Демо-обработка

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

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

2 стартмани

07.06.2023    4599    26    quazare    7    

46

Вывод элементов иерархии верхнего уровня на СКД

СКД Платформа 1С v8.3 Абонемент ($m)

Как получить родителя первого уровня иерархического справочника с помощью СКД.

1 стартмани

06.06.2023    4225    echo77    6    

72

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

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

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

07.02.2023    5517    quazare    7    

38
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. glek 119 13.01.17 09:08 Сейчас в теме
Полезно. Спасибо.
dbachinsky; +1 Ответить
2. Evil Beaver 8020 13.01.17 10:26 Сейчас в теме
А теперь бы все это выложить в gist на гитхабе, чтобы можно было допилить всем желающим
gortol; dj_serega; Berckk; dbachinsky; alprk; +5 Ответить
4. dbachinsky 345 13.01.17 12:18 Сейчас в теме
(2) Спасибо за совет.
29. Darklight 32 18.02.19 11:29 Сейчас в теме
(2) Вот бы ещё конфигуратор (ну или хотя бы EDT) поддерживал работу с Gist - тогда да, это было бы очень полезно! А если бы Gist был бы ещё и в infotsart встроен.... эх мечты мечты!
3. pbazeliuk 1948 13.01.17 10:44 Сейчас в теме
Пройдусь по явным недочетам:
1.Описание процедур и функций;
2. Не хватает обработки Настроек.ПараметровДанных по умолчанию;
3. Недопустимо перехватывать любые исключения, бесследно для системного администратора.

В остальном бесспорно плюс.
daho; unichkin; Kinestetik; kalyaka; proonec; tux; artbear; Evil Beaver; brr; dbachinsky; +10 Ответить
5. dbachinsky 345 13.01.17 12:19 Сейчас в теме
(3) Конструктивная критика. Спасибо
6. Evil Beaver 8020 13.01.17 14:02 Сейчас в теме
(3) а внутри github эти замечания были бы еще и в виде код-ревью оформлены, и отслежено исправление :)
gortol; artbear; JohnyDeath; pbazeliuk; dbachinsky; +5 Ответить
41. пользователь 29.04.21 07:50
Сообщение было скрыто модератором.
...
46. Evil Beaver 8020 29.04.21 21:08 Сейчас в теме
(41) не понял вопрос. Что именно как пометить?
47. пользователь 29.04.21 21:41
Сообщение было скрыто модератором.
...
35. пользователь 29.04.21 07:40
Сообщение было скрыто модератором.
...
7. hromovanton 6 13.01.17 14:42 Сейчас в теме
Очень хорошая функция. Спасибо вам ...
dbachinsky; +1 Ответить
8. json 3264 15.01.17 14:08 Сейчас в теме
Идея интересная.

Но попытка явно лишняя. Ведь ошибка может выскочить только в том случае, если вызывающий код передал неправильные параметры. Почему вы считаете, что в этом случае нужно возвратить пустое значение? Это же не логично. Намного проще и быстрее будет найти ошибку, если выскочит исключение с описанием.

Если же ошибку нужно скрыть от пользователя, то в попытку нужно оборачивать сам вызов данной функции.
alex-l19041; JohnyDeath; +2 Ответить
9. dbachinsky 345 15.01.17 17:33 Сейчас в теме
(8) Функция не претендует на абсолютную самодостаточность. Логика такая - функция возвращает либо СКД, либо неопределенно. Если вы получаете неопределенно - действуете по усмотрению в месте вызова.
Если хотите оборачивать вызов в попытку - это нужно будет делать при каждом вызове. "Лаконичнее" будет вынести попытку в саму функцию
10. json 3264 15.01.17 17:57 Сейчас в теме
(9) дело ваше.
Но на всякий случай порекомендую ознакомиться с системой стандартов и методик на эту тему.

http://its.1c.ru/db/v8std#content:2149184148:hdoc

см пункты 1, 2 и 3.4

А по поводу лаконичности: лучше передавать в функцию правильные параметры, тогда попытка вообще не понадобится
36. пользователь 29.04.21 07:41
Сообщение было скрыто модератором.
...
11. artbear 1443 16.01.17 12:55 Сейчас в теме
(0) (2) Создал спец.гист на гитхабе
https://gist.github.com/artbear/e1cfd0f5dbf39373f4424a4b250fb690
Указал ссылку на данную публикацию
12. dbachinsky 345 16.01.17 13:59 Сейчас в теме
(11) Как раз планировал приобщить сообщество git по рекомендации уважаемого (2) "Evil Beaver". Благодарю за оперативность и приглашаю присоединиться всех желающих
37. пользователь 29.04.21 07:42
Сообщение было скрыто модератором.
...
45. пользователь 29.04.21 09:58
Сообщение было скрыто модератором.
...
13. adsl 16.01.17 15:48 Сейчас в теме
Чтобы порядок колонок был как в тексте запроса, стоит исправить примерно так:
	//Для каждого ПолеОтбора Из ПостроительЗапроса.Отбор.ПолучитьДоступныеПоля() Цикл
		Для каждого ПолеОтбора Из ПостроительЗапроса.ВыбранныеПоля Цикл
			НоваяКолонка = КоллекцияКолонок.Добавить();
			НоваяКолонка.Имя = ПолеОтбора.Имя;
			//НоваяКолонка.ТипЗначения = ПолеОтбора.ТипЗначения;
			НоваяКолонка.ТипЗначения = ПостроительЗапроса.ДоступныеПоля[ПолеОтбора.ПутьКДанным].ТипЗначения;
			НоваяКолонка.Заголовок = ПолеОтбора.Представление
		КонецЦикла;
Показать
daho; Kinestetik; gortol; igormiro; artbear; dbachinsky; +6 Ответить
14. dbachinsky 345 16.01.17 16:25 Сейчас в теме
(13) Отличное замечание. Изменение внес
42. пользователь 29.04.21 07:52
Сообщение было скрыто модератором.
...
15. Nebiros777 5 16.01.17 16:30 Сейчас в теме
Блин, и где я лазил все это время? Утащил в нору!
16. AlmazBur01 18.01.17 13:18 Сейчас в теме
//
// ВноситьПоляВыбора (Тип: Булево) - Флаг добавление полей набора
//

В комментариях перед функцией эта строка сообщает нам: о чём?
17. AlmazBur01 18.01.17 13:20 Сейчас в теме
//
// ВноситьПоляВыбора (Тип: Булево) - Флаг добавление полей набора
//

Перед функцией эта строка в комментариях сообщает нам: о чём?
18. proger1c81 18.01.17 15:40 Сейчас в теме
Может мой вопрос покажется странным, но можно привести практические примеры применения программного получения СКД? Как мы можем дальше использовать этот объект и для чего? Возможно я проникнусь этим тоже буду юзать СКД для каких-то задач.
Мне по роду моих задач приходится только программно обрабатывать всякие события СКД, варианты схем, виды, группировки, оформления и т.д.. При этом саму схему (сам отчет на СКД) разрабатываю вручную в конфигураторе.
20. daho 8 19.01.17 12:31 Сейчас в теме
(18) Я так понимаю создаешь пустую СКД в отчете а в модуле объекта подсовываешь ее процедуре ПриКомпоновкеРезультата().. или как правильно?
26. dbachinsky 345 07.03.17 10:58 Сейчас в теме
(20) Пример во вложении
40. пользователь 29.04.21 07:47
Сообщение было скрыто модератором.
...
22. ixijixi 1688 15.02.17 17:03 Сейчас в теме
(18) Для нас эта публикация представляет скорее художественный, нежели практический интерес.
23. dbachinsky 345 16.02.17 13:27 Сейчас в теме
(22) Отлично! Главное, что интересно!
27. kabanoff 48 05.03.18 18:16 Сейчас в теме
(22) Автору большое спасибо! Как раз искал вариант программного создания СКД по таблице значений.

Вот конкретная производственная необходимость: отчет формируется по большой таблице (порядка 20 ТБ). Сформировать его в одном потоке за короткое время невозможно. Поэтому его приходится формировать по частям.

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

Так вот для того, чтобы не создавать еще одну СКД с внешним набором данных и сложной структурой колонок, надо просто вызвать функцию, которую предложил автор, и присвоить ей настройки компоновщика, который указал пользователь. Бинго!
mk314; Kinestetik; gortol; dbachinsky; +4 Ответить
38. пользователь 29.04.21 07:43
Сообщение было скрыто модератором.
...
43. пользователь 29.04.21 07:55
Сообщение было скрыто модератором.
...
19. logarifm 1114 18.01.17 21:38 Сейчас в теме
Большое тебе спасибо... Реально сэкономил мне время.
44. пользователь 29.04.21 07:57
Сообщение было скрыто модератором.
...
21. sudmorsh 57 25.01.17 17:43 Сейчас в теме
Интересная идея, спасибо
39. пользователь 29.04.21 07:44
Сообщение было скрыто модератором.
...
24. German_Tagil 42 05.03.17 06:00 Сейчас в теме
Можно попросить выложить вариант работающего отчета или обработки
25. dbachinsky 345 07.03.17 10:57 Сейчас в теме
(24) Добавил пример
28. user774630 13.05.18 21:48 Сейчас в теме
А вообщем-то нет пределов вашей фантации

или в общем-то, или вообще
:)
30. ShantinTD 91 25.04.19 14:37 Сейчас в теме
Спасибо!
50. пользователь 07.05.21 07:37
Сообщение было скрыто модератором.
...
31. fish249 21.02.20 12:25 Сейчас в теме
Спасибо за хороший пример
32. webester 26 26.02.20 09:33 Сейчас в теме
Спасибо за то, что сэкономили гору времени, написав этот код за меня.
49. пользователь 07.05.21 07:36
Сообщение было скрыто модератором.
...
51. пользователь 07.05.21 07:39
Сообщение было скрыто модератором.
...
52. пользователь 07.05.21 07:50
Сообщение было скрыто модератором.
...
33. пользователь 29.04.21 07:08
Сообщение было скрыто модератором.
...
34. пользователь 29.04.21 07:08
Сообщение было скрыто модератором.
...
53. пользователь 11.05.21 10:31
Сообщение было скрыто модератором.
...
56. пользователь 11.05.21 14:37
Сообщение было скрыто модератором.
...
48. пользователь 07.05.21 07:36
Сообщение было скрыто модератором.
...
54. пользователь 11.05.21 14:11
Сообщение было скрыто модератором.
...
55. пользователь 11.05.21 14:36
Сообщение было скрыто модератором.
...
57. пользователь 11.05.21 14:44
Сообщение было скрыто модератором.
...
59. пользователь 12.05.21 10:26
Сообщение было скрыто модератором.
...
58. пользователь 11.05.21 14:50
Сообщение было скрыто модератором.
...
60. пользователь 13.05.21 14:40
Сообщение было скрыто модератором.
...
61. axae 108 20.02.22 13:35 Сейчас в теме
К сожалению, не работает. На строке Группировка = НастройкиПоУмолчанию.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных")); пишет "Несоответствие типов". Причем вычисление выражения в отладчике успешно показывает результат.
Может кто-нибудь знает, почему и как исправить?
Приложенная обработка вроде как должна сработать в чистой конфигурации с одним добавленным справочником Справочник1
Прикрепленные файлы:
ВнешняяОбработка1.epf
63. Hitcher 161 10.10.23 10:40 Сейчас в теме
(61)
// Создание структуры.
// Группировка, детальные записи и автовыбранное поле
Группировка = НастройкиПоУмолчанию.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных"));
Группировка.Использование = Истина;


Нужно просто переименовать Группировка = например в НоваяГруппировка =
62. Sam13 327 23.08.23 11:17 Сейчас в теме
Отлично! давно хотел сам сделать, да все руки не доходили.
Здесь основа есть, а допилить немного пот свои нужны и самому можно.
Плюсую!
Оставьте свое сообщение