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

12.05.21

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

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

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

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

* При написании статьи были использованы наработки Якова Когана (//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С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

13000 руб.

02.09.2020    119924    656    389    

701

Генератор схемы компоновки данных (СКД), написание кода схемы программно

Инструментарий разработчика СКД Платформа 1С v8.3 Конфигурации 1cv8 1С:Зарплата и Управление Персоналом 3.x Абонемент ($m)

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

3 стартмани

05.02.2024    3890    24    obmailok    17    

63

Набор-объект для СКД по тексту или запросу

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

Есть список полей в виде текста, или запрос - закидываем в набор СКД.

1 стартмани

31.01.2024    1964    2    Yashazz    0    

29

СКД на JavaScript в 1С

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

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

2 стартмани

11.12.2023    8029    20    John_d    25    

122

Использование менеджера временных таблиц в СКД

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

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

05.12.2023    4528    PROSTO-1C    13    

61

Модель СКД

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

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

1 стартмани

15.11.2023    5710    15    kalyaka    5    

85

Пользовательские настройки отчетов 1С. Часть 1. Простые и расширенные настройки

СКД Инструкции пользователю Платформа 1С v8.3 Конфигурации 1cv8 1С:Бухгалтерия 3.0 Россия Бесплатно (free)

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

18.09.2023    6335    accounting_cons    5    

29

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

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

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

01.09.2023    4407    KVIKS    15    

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

В остальном бесспорно плюс.
daho; unichkin; Kinestetik; kalyaka; proonec; tux; artbear; Evil Beaver; brr; dbachinsky; +10 Ответить
5. dbachinsky 347 13.01.17 12:19 Сейчас в теме
(3) Конструктивная критика. Спасибо
6. Evil Beaver 8100 13.01.17 14:02 Сейчас в теме
(3) а внутри github эти замечания были бы еще и в виде код-ревью оформлены, и отслежено исправление :)
gortol; artbear; JohnyDeath; pbazeliuk; dbachinsky; +5 Ответить
41. пользователь 29.04.21 07:50
Сообщение было скрыто модератором.
...
46. Evil Beaver 8100 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 3294 15.01.17 14:08 Сейчас в теме
Идея интересная.

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

Если же ошибку нужно скрыть от пользователя, то в попытку нужно оборачивать сам вызов данной функции.
alex-l19041; JohnyDeath; +2 Ответить
9. dbachinsky 347 15.01.17 17:33 Сейчас в теме
(8) Функция не претендует на абсолютную самодостаточность. Логика такая - функция возвращает либо СКД, либо неопределенно. Если вы получаете неопределенно - действуете по усмотрению в месте вызова.
Если хотите оборачивать вызов в попытку - это нужно будет делать при каждом вызове. "Лаконичнее" будет вынести попытку в саму функцию
10. json 3294 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 1447 16.01.17 12:55 Сейчас в теме
(0) (2) Создал спец.гист на гитхабе
https://gist.github.com/artbear/e1cfd0f5dbf39373f4424a4b250fb690
Указал ссылку на данную публикацию
12. dbachinsky 347 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 347 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 347 07.03.17 10:58 Сейчас в теме
40. пользователь 29.04.21 07:47
Сообщение было скрыто модератором.
...
22. ixijixi 1761 15.02.17 17:03 Сейчас в теме
(18) Для нас эта публикация представляет скорее художественный, нежели практический интерес.
23. dbachinsky 347 16.02.17 13:27 Сейчас в теме
(22) Отлично! Главное, что интересно!
27. kabanoff 49 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 1116 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 347 07.03.17 10:57 Сейчас в теме
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 109 20.02.22 13:35 Сейчас в теме
К сожалению, не работает. На строке Группировка = НастройкиПоУмолчанию.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных")); пишет "Несоответствие типов". Причем вычисление выражения в отладчике успешно показывает результат.
Может кто-нибудь знает, почему и как исправить?
Приложенная обработка вроде как должна сработать в чистой конфигурации с одним добавленным справочником Справочник1
Прикрепленные файлы:
ВнешняяОбработка1.epf
63. Hitcher 162 10.10.23 10:40 Сейчас в теме
(61)
// Создание структуры.
// Группировка, детальные записи и автовыбранное поле
Группировка = НастройкиПоУмолчанию.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных"));
Группировка.Использование = Истина;


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