Имя: Пароль:
1C
 
Почему не выводятся колонки в отчете СКД?
0 1сПупс
 
25.11.25
08:18
Добрый день!
Заказчик просит добавить пару колонок в существующий отчет СКД.
Источником данных является регистр сведений:



Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	Схема = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
	
	//...и настройки
	Настройки = КомпоновщикНастроек.ПолучитьНастройки();
	ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;
	
	
	мПериод = Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("ПериодСтр")).Значение;
	Если НЕ ЗначениеЗаполнено(мПериод) Тогда
		мПериод = КомпоновщикНастроек.Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("ПериодСтр")).Значение;
	КонецЕсли;
	
	//Заголовок отчета
	НачПериода = мПериод.ДатаНачала;	
	КонПериода = мПериод.ДатаОкончания;	
	
	
	ПодразделениеОтчетаПар = Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("Подразделение")).Значение;
	Если Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("Подразделение")).Использование Тогда
		мМагазин = ПодразделениеОтчетаПар;
	Иначе
		мМагазин = "";
	КонецЕсли; 
	
	СотрудникДляРасчетаПар = Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("Сотрудник")).Значение;
	Если Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("Сотрудник")).Использование Тогда
		СотрудникДляРасчета = СотрудникДляРасчетаПар;
	Иначе
		СотрудникДляРасчета = "";
	КонецЕсли;

	
	//Создаем компоновщик макета и получаем макет компоновки
	КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
	МакетКомпоновки = КомпоновщикМакета.Выполнить(Схема, Настройки, ДанныеРасшифровки);
	
	ТаблицаДанных= Новый ТаблицаЗначений;
	СформироватьТаблицуДанных(ТаблицаДанных);	
	
	ВнешниеНаборыДанных = Новый Структура;
	ВнешниеНаборыДанных.Вставить("ТаблицаДанных",ТаблицаДанных);
	
	//Инициализируем процессор компоновки
	ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
	ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки, ВнешниеНаборыДанных, ДанныеРасшифровки, Истина);
	//<--------------------------------------------------------------------------------------->//
	//Очищаем документ результата
	ДокументРезультат.Очистить();
	
	//Выводим отчет в документ
	ПроцессорВывода = Новый
	ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
	ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
	ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
	
	ДокументРезультат.ФиксацияСлева = 1;
	
КонецПроцедуры

Процедура СформироватьТаблицуДанных(ТаблицаДанных)
	
	Перем КолонкиДляСвертки;
	НачПериода = мПериод.ДатаНачала;	
	КонПериода = КонецДня(мПериод.ДатаОкончания);	
	
	Если Не ЗначениеЗаполнено(НачПериода)  Тогда
		Сообщить("Заполните дату");
		Возврат;
	КонецЕсли;
	
	Если Не ЗначениеЗаполнено(КонПериода)  Тогда
		Сообщить("Заполните дату");
		Возврат;
	КонецЕсли;
	
		
	КЧ = Новый КвалификаторыЧисла(20,2);
	Массив = Новый Массив;
	Массив.Добавить(Тип("Число"));
	ОписаниеТиповЧ = Новый ОписаниеТипов(Массив, , ,КЧ);
	
	
	КЧ = Новый КвалификаторыЧисла(10);
	Массив = Новый Массив;
	Массив.Добавить(Тип("Число"));
	ОписаниеТиповЧ2 = Новый ОписаниеТипов(Массив, , ,КЧ);

	
	//ТаблицаДанных = Новый ТаблицаЗначений;
	ТаблицаДанных.Колонки.Добавить("Магазин");
	ТаблицаДанных.Колонки.Добавить("Сотрудник");
	ТаблицаДанных.Колонки.Добавить("ЧекККМ");
	ТаблицаДанных.Колонки.Добавить("ЦеновойДиапазон");
	ТаблицаДанных.Колонки.Добавить("ОбъемПродажТовары",ОписаниеТиповЧ);
	
	
	ТаблицаДанных.Колонки.Добавить("КоличествоПродажТовары",ОписаниеТиповЧ2);
	ТаблицаДанных.Колонки.Добавить("КоличествоПродажУслугиРабочего",ОписаниеТиповЧ2);
	ТаблицаДанных.Колонки.Добавить("КоличествоПродажУслугиИнженера",ОписаниеТиповЧ2);
	
	ТаблицаДанных.Колонки.Добавить("ОбъемПродажУслугиРабочего",ОписаниеТиповЧ);
	ТаблицаДанных.Колонки.Добавить("ОбъемПродажУслугиИнженера",ОписаниеТиповЧ);
	ТаблицаДанных.Колонки.Добавить("БаллыЗаТовар",ОписаниеТиповЧ);
	ТаблицаДанных.Колонки.Добавить("БаллыЗаУслугиРабочего",ОписаниеТиповЧ);
	ТаблицаДанных.Колонки.Добавить("БаллыЗаУслугиИнженера",ОписаниеТиповЧ);
	ТаблицаДанных.Колонки.Добавить("БаллыЗаТретийТовар",ОписаниеТиповЧ);
	ТаблицаДанных.Колонки.Добавить("ИТОГ",ОписаниеТиповЧ);
	
	
	
	Запрос = Новый Запрос;
	Текст =   "ВЫБРАТЬ
	          |	РасчетБалловСистемыМотивации.Период КАК Период,
	          |	РасчетБалловСистемыМотивации.Сотрудник КАК Сотрудник,
	          |	РасчетБалловСистемыМотивации.Магазин КАК Магазин,
	          |	РасчетБалловСистемыМотивации.ЦеновойДиапазон КАК ЦеновойДиапазон,
	          |	РасчетБалловСистемыМотивации.ЧекККМ КАК ЧекККМ,
	          |	РасчетБалловСистемыМотивации.Номенклатура КАК Номенклатура,
	          |	РасчетБалловСистемыМотивации.НомерСтрокиЧека КАК НомерСтрокиЧека,
	          |	РасчетБалловСистемыМотивации.Дата КАК Дата,
	          |	РасчетБалловСистемыМотивации.БаллыЗаТовар КАК БаллыЗаТовар,
	          |	РасчетБалловСистемыМотивации.БаллыЗаУслугиРабочего КАК БаллыЗаУслугиРабочего,
	          |	РасчетБалловСистемыМотивации.БаллыЗаУслугиИнженера КАК БаллыЗаУслугиИнженера,
	          |	РасчетБалловСистемыМотивации.БаллыЗаТретийТовар КАК БаллыЗаТретийТовар,
	          |	РасчетБалловСистемыМотивации.ПроцентМотивации КАК ПроцентМотивации,
	          |	РасчетБалловСистемыМотивации.КоэффициентТовар КАК КоэффициентТовар,
	          |	РасчетБалловСистемыМотивации.КоэффициентУслуга КАК КоэффициентУслуга,
	          |	РасчетБалловСистемыМотивации.ПовышенныйКоэффициентТовар КАК ПовышенныйКоэффициентТовар,
	          |	РасчетБалловСистемыМотивации.КоэффициентСегмента КАК КоэффициентСегмента,
	          |	РасчетБалловСистемыМотивации.ОбъемПродажТовары КАК ОбъемПродажТовары,
	          |	РасчетБалловСистемыМотивации.ОбъемПродажУслугиРабочего КАК ОбъемПродажУслугиРабочего,
	          |	РасчетБалловСистемыМотивации.ОбъемПродажУслугиИнженера КАК ОбъемПродажУслугиИнженера,
	          |	ВЫБОР
	          |		КОГДА РасчетБалловСистемыМотивации.ОбъемПродажТовары > 0
	          |			ТОГДА РасчетБалловСистемыМотивации.Количество
	          |		ИНАЧЕ 0
	          |	КОНЕЦ КАК КоличествоПродажТовары,
	          |	ВЫБОР
	          |		КОГДА РасчетБалловСистемыМотивации.ОбъемПродажУслугиРабочего > 0
	          |			ТОГДА РасчетБалловСистемыМотивации.Количество
	          |		ИНАЧЕ 0
	          |	КОНЕЦ КАК КоличествоПродажУслугиРабочего,
	          |	ВЫБОР
	          |		КОГДА РасчетБалловСистемыМотивации.ОбъемПродажУслугиИнженера > 0
	          |			ТОГДА РасчетБалловСистемыМотивации.Количество
	          |		ИНАЧЕ 0
	          |	КОНЕЦ КАК КоличествоПродажУслугиИнженера
	          |ИЗ
	          |	РегистрСведений.РасчетБалловСистемыМотивации КАК РасчетБалловСистемыМотивации";
	
	Если ЗначениеЗаполнено(СотрудникДляРасчета) и не ЗначениеЗаполнено(мМагазин)  Тогда
		
		Текст = Текст + "
		|ГДЕ";
		Текст = Текст + "
		|	РасчетБалловСистемыМотивации.Сотрудник  = &СотрудникДляРасчета";
	ИначеЕсли ЗначениеЗаполнено(СотрудникДляРасчета) и ЗначениеЗаполнено(мМагазин) Тогда
		Текст = Текст + "
		|ГДЕ";
		
		Текст = Текст + "                                                    
		|	РасчетБалловСистемыМотивации.Сотрудник  = &СотрудникДляРасчета
		|	И РасчетБалловСистемыМотивации.Магазин  = &Магазин";
	ИначеЕсли не  ЗначениеЗаполнено(СотрудникДляРасчета) и ЗначениеЗаполнено(мМагазин) Тогда	
		Текст = Текст + "
		|ГДЕ";
        Текст = Текст + "
		|	РасчетБалловСистемыМотивации.Магазин  = &Магазин";
	КонецЕсли;
	
	Если СтрНайти(Текст, "ГДЕ")=0 Тогда
		Текст = Текст + "
		|ГДЕ";
		
	Иначе
		Текст = Текст + "
		|И";
	КонецЕсли;
	
	
	Текст = Текст + "                                                    
		|	РасчетБалловСистемыМотивации.Период  >= &ДатаНачала
		|	И РасчетБалловСистемыМотивации.Период  <= &КонПериода";

	
	Запрос.Текст = Текст;
	Запрос.УстановитьПараметр("ДатаНачала",НачПериода);
	Запрос.УстановитьПараметр("КонПериода",КонПериода);
	Запрос.УстановитьПараметр("Магазин",мМагазин);
	Запрос.УстановитьПараметр("СотрудникДляРасчета",СотрудникДляРасчета);
	
	
	Выборка = Запрос.Выполнить().Выбрать();
	СуммаБаллы = 0;
	Пока Выборка.Следующий() Цикл 


		НоваяСтрока = ТаблицаДанных.Добавить();
		ЗаполнитьЗначенияСвойств(НоваяСтрока,выборка);
		//НоваяСтрока.ИТОГ = НоваяСтрока.БаллыЗаТовар + НоваяСтрока.БаллыЗаУслугиРабочего +НоваяСтрока.БаллыЗаУслугиИнженера +НоваяСтрока.БаллыЗаТретийТовар;
		
		
	КонецЦикла;
	

КонецПроцедуры







Скд берет данные из ТЗ(Источник - набор данных), туда добавил новые поля (из запроса где выбор).
добавил эти поля как ресурсы, На вкладке настройки добавил свои ресурсы в выбранные поля.
Почему нет моих колонок в отчете?
1 lEvGl
 
гуру
25.11.25
09:26
Источник - набор данных

интересно

имена полей должны совпадать, и для чего создание тз, можно выгрузить из запроса
а может выбранные поля для группировки работают
2 unenu
 
25.11.25
09:44
(0) Почистить кеши, переименовать отчет если не знаете как новые настройки отчета применить.

Я бы переписал отчет к живому виду с дифференцированием параметров прямо в исходном тексте запроса.

УПП-шная условная технология
Текст = Текст + "                                                    
|
вызывает у меня смешанные чувства грусти и негодования, иногда до крайностей - казнить :-(
3 lEvGl
 
гуру
25.11.25
10:01
да да и период можно между задать!
4 1сПупс
 
25.11.25
14:04
(2) оказалось что в системе был отчет с таким же наименованием, и он тянулся при запуске внешнего отчета. Изменил имя, встроил в конфигурацию - все работает, спасибо!
5 1cVandal
 
25.11.25
14:31
(2) "Почистить кеши, переименовать отчет" как же это задрало в скд...
6 Gucci76
 
25.11.25
14:55
(5) Поддерживаю. Кучу времени бывает потратишь, чтобы убедиться, что все должно работать, но не фурычит.
Чистишь кеш и вуаля - нужный результат.
Сейчас уже первым делом меняю имя отчета, чтобы отмести ошибку кеша (он быстрее, но вернуть старое имя бывает забываю)
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой