СКД: не очищается результат при формировании отчета

30.01.23

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

При программном создании отчета СКД форма отчета выводится последовательно столько раз, сколько раз нажимается кнопка "Сформировать" в пользовательском режиме.

При программном создании отчета СКД форма отчета выводится последовательно столько раз, сколь раз нажимается кнопка "Сформировать" в пользовательском режиме. 

Хотя метод ТабДок.Очистить() в процедуре указан.

Это выглядит так: 

 

 

При этом в коде настройки компоновки определены следующим образом:

НастройкиКомпоновки = КомпоновщикНастроек.Настройки; 

Код отрабатывает, отчет формируется, отладчик ошибку не ловит. Как добиться однократного вывода отчета при нажатии кнопки "Сформировать"?

Коварность этой задачи кроется в том, что не сразу поймешь, что не так, ошибка не выводится. А повторный вывод данных связать с настройками КомпоновщикНастроек... Это только везение.

Есть хорошая статья о том, как устроен  КомпоновщикНастроек - //infostart.ru/1c/articles/1185890/.

Решение №1 .

Использовать вместо выше указанного кода следующий:

НастройкиКомпоновки = КомпоновщикНастроек.ПолучитьНастройки();

 

 

	НастройкиКомпоновки = КомпоновщикНастроек.ПолучитьНастройки();
		
	//3. Добавляем группировки данных  
	
	// Добавим в отчет таблицу 
	Таблица = Новый Структура;
	Таблица = НастройкиКомпоновки.Структура.Добавить(Тип("ТаблицаКомпоновкиДанных")); 
	Таблица.Использование = Истина;
	
	// Добавим в таблицу строку
	Строка1 = Таблица.Строки.Добавить();  
	
	Строка1.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных")); 
	Строка1.Порядок.Элементы.Добавить(Тип("АвтоЭлементПорядкаКомпоновкиДанных")); 
	Строка1.Использование = Истина;  
	
	ПолеГруппировки2 = Строка1.ПоляГруппировки.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных"));
	ПолеГруппировки2.Использование = Истина;
	ПолеГруппировки2.Поле = Новый ПолеКомпоновкиДанных("Автомобиль");
			
	ВыбранноеПолеКомпоновкиДанных = НастройкиКомпоновки.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
	ВыбранноеПолеКомпоновкиДанных.Использование = Истина;
	ВыбранноеПолеКомпоновкиДанных.Поле = Новый ПолеКомпоновкиДанных("Количество");
	
	ВыбранноеПолеКомпоновкиДанных = НастройкиКомпоновки.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
	ВыбранноеПолеКомпоновкиДанных.Использование = Истина;
	ВыбранноеПолеКомпоновкиДанных.Поле = Новый ПолеКомпоновкиДанных("Сумма"); 
	
	//6. Добавляем Сортировку 
	
	ЭлементПорядкаКомпоновкиДанных = НастройкиКомпоновки.Порядок.Элементы.Добавить(Тип("ЭлементПорядкаКомпоновкиДанных"));
	ЭлементПорядкаКомпоновкиДанных.Использование = Истина;
	ЭлементПорядкаКомпоновкиДанных.Поле = Новый ПолеКомпоновкиДанных("Сумма");
	ЭлементПорядкаКомпоновкиДанных.ТипУпорядочивания = НаправлениеСортировкиКомпоновкиДанных.Убыв;

 


Тут мы обращаемся к конкретному методу, который к возвращаемой копии применяет пользовательские настройки.

Решение №2

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

НастройкиКомпоновки имеют свойство Структура. А в структуре есть элемент Количество.

Можно обойти циклом всю процедуру в отношении всех данных структуры (группировка, таблица).

НастройкиКомпоновки = КомпоновщикНастроек.ПолучитьНастройки();
Если НастройкиКомпоновки.Структура.Количество() = 0 Тогда
....
КонецЕсли;
 

 

	НастройкиКомпоновки = КомпоновщикНастроек.Настройки;
	
	Если НастройкиКомпоновки.Структура.Количество() = 0 Тогда
		
		//3. Добавляем группировки данных  
		
		// Добавим в отчет таблицу 
		Таблица = Новый Структура;
		Таблица = НастройкиКомпоновки.Структура.Добавить(Тип("ТаблицаКомпоновкиДанных")); 
		Таблица.Использование = Истина;
		
		// Добавим в таблицу строку
		Строка1 = Таблица.Строки.Добавить();  
		
		Строка1.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных")); 
		Строка1.Порядок.Элементы.Добавить(Тип("АвтоЭлементПорядкаКомпоновкиДанных")); 
		Строка1.Использование = Истина;  
		
		ПолеГруппировки2 = Строка1.ПоляГруппировки.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных"));
		ПолеГруппировки2.Использование = Истина;
		ПолеГруппировки2.Поле = Новый ПолеКомпоновкиДанных("Автомобиль");
				
		ВыбранноеПолеКомпоновкиДанных = НастройкиКомпоновки.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
		ВыбранноеПолеКомпоновкиДанных.Использование = Истина;
		ВыбранноеПолеКомпоновкиДанных.Поле = Новый ПолеКомпоновкиДанных("Количество");
		
		ВыбранноеПолеКомпоновкиДанных = НастройкиКомпоновки.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
		ВыбранноеПолеКомпоновкиДанных.Использование = Истина;
		ВыбранноеПолеКомпоновкиДанных.Поле = Новый ПолеКомпоновкиДанных("Сумма"); 
		
		//6. Добавляем Сортировку 
		
		ЭлементПорядкаКомпоновкиДанных = НастройкиКомпоновки.Порядок.Элементы.Добавить(Тип("ЭлементПорядкаКомпоновкиДанных"));
		ЭлементПорядкаКомпоновкиДанных.Использование = Истина;
		ЭлементПорядкаКомпоновкиДанных.Поле = Новый ПолеКомпоновкиДанных("Сумма");
		ЭлементПорядкаКомпоновкиДанных.ТипУпорядочивания = НаправлениеСортировкиКомпоновкиДанных.Убыв;
		
		//7. Работа с "Другими настройками"
		МакетОформления = НастройкиКомпоновки.ПараметрыВывода.Элементы.Найти("МакетОформления");
		МакетОформления.Значение = "Зеленый";
		МакетОформления.Использование = Истина;
		
		Заголовок = НастройкиКомпоновки.ПараметрыВывода.Элементы.Найти("Заголовок");
		Заголовок.Значение = "Список автомобилей";
		Заголовок.Использование = Истина;
		
	КонецЕсли;

 

 

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

Вступайте в нашу телеграмм-группу Инфостарт

СКД Ошибка Запрос Очистить() Задвоение Сформировать Программное формирование Настройки Компоновка Процессор Вывод Помощь Программист Конфигуратор

Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».

  • Поиск от одного разработчика до ИТ-команд под проект.
  • Обмен любыми контактами разрешён.
  • 0% комиссии, допускаются расчёты напрямую.

См. также

Инструментарий разработчика Роли и права Запросы СКД Программист Руководитель проекта 1С:Предприятие 8 Платные (руб)

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

16500 руб.

02.09.2020    255063    1407    421    

1153

Инструментарий разработчика СКД Программист 1С 8.3 Бесплатно (free)

В этой статье представлен СКДБилдер — общий модуль-обёртка над объектной моделью СКД, который сокращает код в 3-4 раза и делает его читаемым.

29.01.2026    6315    329    shapa_pro    25    

69

СКД Программист 1С:Предприятие 8 Бесплатно (free)

Статья написана по результатам проведенного внутреннего обучающего вебинара для разработчиков ГК «СофтБаланс». Если осилить 25 000 знаков - задача для вас непосильная, где-то на бескрайних просторах интернета видео есть (или будет). Но здесь информация точнее. Разберем, чем запрос для СКД принципиально отличается от обычного запроса и как модифицируется в зависимости от настроек. Изучим «базовый рецепт» написания запроса для СКД, сформируем чек-лист. Полезно будет всем – от стажеров до тех. лидов. Всем, кто не снимает галку «автозаполнение» и пишет запросы для отчетов в консоли запросов – читать (вдумчиво) обязательно.

29.10.2025    18594    ovetgana    112    

111

СКД Программист 1С:Предприятие 8 Бесплатно (free)

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

01.07.2025    10800    krasnoshchekovpavel    5    

68

СКД Программист Стажер 1С:Предприятие 8 Россия Бесплатно (free)

Несколько способов управления формами выбора параметров и отборов СКД.

10.04.2025    10334    Neti    0    

41

СКД Программист 1С:Предприятие 8 Бесплатно (free)

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

27.02.2025    16428    ovetgana    50    

93

СКД Программист 1С:Предприятие 8 Бесплатно (free)

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

24.12.2024    14082    Akcium    17    

46

СКД Механизмы типовых конфигураций Запросы Программист 1С:Предприятие 8 1С:Зарплата и кадры государственного учреждения 3 1С:Зарплата и Управление Персоналом 3.x Россия Бесплатно (free)

Работая с типовыми отчетами в конфигурациях «Зарплата и управление персоналом, редакция 3», «Зарплата и кадры государственного учреждения, редакция 3» и подобных, в схемах компоновки данных можно встретить конструкции запросов, которые обращаются к некоторым виртуальным таблицам.

20.08.2024    10854    AlexeyPROSTO_1C    1    

32
Для отправки сообщения требуется регистрация/авторизация