СКД - Поле не найдено

1. ВеликийДуматель 12 27.09.20 17:53 Сейчас в теме
Программно добавляю наборы данных, связи наборов данных, поля итогов.
При попытке установить выражение итоговых записей в пользовательском поле - выдаёт ошибку: Поле не найдено. Хотя в запросе набора данных это поле есть, в полях набора данных - тоже. Какое ему ещё поле нужно и почему не найдено?
                МассивИменНаборовДанных = Новый Массив;
		МассивИменНаборовДанных.Добавить("ПланЖивотноводства");
		МассивИменНаборовДанных.Добавить("ФактЖивотноводства");
		МассивИменНаборовДанных.Добавить("СреднееПоголовье");
		МассивИменНаборовДанных.Добавить("КормодниПривес");
		
		Для каждого ИмяНабора Из МассивИменНаборовДанных Цикл
			
			НовыйНаборДанных = СКД.НаборыДанных.Добавить(Тип("НаборДанныхЗапросСхемыКомпоновкиДанных"));
			НовыйНаборДанных.Имя = ИмяНабора;
			НовыйНаборДанных.Запрос = ПолучитьТекстЗапросаНовогоНабораДанных(ИмяНабора);
			НовыйНаборДанных.ИсточникДанных = ИмяНабора;
			НовыйНаборДанных.АвтоЗаполнениеДоступныхПолей = Истина;
			НовыйНаборДанных.ИспользоватьГруппировкиЗапросаЕслиВозможно = Истина;
			
			ДобавитьПоляНабораДанных(ИмяНабора, НовыйНаборДанных);
			
			НовыйИсточникДанных = СКД.ИсточникиДанных.Добавить();
			НовыйИсточникДанных.Имя = ИмяНабора; 
			НовыйИсточникДанных.ТипИсточникаДанных = "Local";
			
			Связь1 = СКД.СвязиНаборовДанных.Добавить();
			Связь1.НаборДанныхИсточник = "Обороты";
			Связь1.НаборДанныхПриемник = ИмяНабора;
			Связь1.ВыражениеИсточник = "Период";
			Связь1.ВыражениеПриемник = "Период";
			Связь1.Обязательная = Истина;
			
			Связь2 = СКД.СвязиНаборовДанных.Добавить();
			Связь2.НаборДанныхИсточник = "Обороты";
			Связь2.НаборДанныхПриемник = ИмяНабора;
			Связь2.ВыражениеИсточник = "ЦФО";
			Связь2.ВыражениеПриемник = "ЦФО";
			Связь2.Обязательная = Истина;
			
			Связь3 = СКД.СвязиНаборовДанных.Добавить();
			Связь3.НаборДанныхИсточник = "Обороты";
			Связь3.НаборДанныхПриемник = ИмяНабора;
			Связь3.ВыражениеИсточник = "НоменклатурнаяГруппа";
			Связь3.ВыражениеПриемник = "НоменклатурнаяГруппа";
			Связь3.Обязательная = Истина;
			
			Связь4 = СКД.СвязиНаборовДанных.Добавить();
			Связь4.НаборДанныхИсточник = "Обороты";
			Связь4.НаборДанныхПриемник = ИмяНабора;
			Связь4.ВыражениеИсточник = "СтатьяБюджета";
			Связь4.ВыражениеПриемник = "СтатьяБюджета";
			Связь4.Обязательная = Истина;
			
		КонецЦикла;
		
		ВесГоловыНаКонецПериодаПлан = СКД.ВычисляемыеПоля.Добавить();
		ВесГоловыНаКонецПериодаПлан.ПутьКДанным = "ВесГоловыНаКонецПериодаПлан";
		ВесГоловыНаКонецПериодаПлан.Выражение =
		"Выбор
		|	КОГДА ОстаткиПоПоголовьюПлан = ТОГДА 0
		|	ИНАЧЕ ОстаткиПоЖивомуВесуПлан/ОстаткиПоПоголовьюПлан
		|КОНЕЦ"; 
		
		ВесГоловыНаКонецПериодаФакт = СКД.ВычисляемыеПоля.Добавить();
		ВесГоловыНаКонецПериодаФакт.ПутьКДанным = "ВесГоловыНаКонецПериодаФакт";
		ВесГоловыНаКонецПериодаФакт.Выражение =
		"Выбор
		|	КОГДА ОстаткиПоПоголовьюФакт = ТОГДА 0
		|	ИНАЧЕ ОстаткиПоЖивомуВесуФакт/ОстаткиПоПоголовьюФакт
		|КОНЕЦ";
		
		МассивИменСценариев = Новый Массив;
		МассивИменСценариев.Добавить("План");
		МассивИменСценариев.Добавить("Факт");
		
		МассивИменСумм = Новый Массив;
		МассивИменСумм.Добавить("");
		МассивИменСумм.Добавить("Регл");
		МассивИменСумм.Добавить("Упр");
		МассивИменСумм.Добавить("Сценарий");
		
		МассивИменРесурсов = Новый Массив;
		МассивИменРесурсов.Добавить("СреднееПоголовьеСумма");
		МассивИменРесурсов.Добавить("СреднесуточныйПривесСумма");
		МассивИменРесурсов.Добавить("ВесГоловыНаКонецПериода");
		
		Для каждого Сценарий Из МассивИменСценариев Цикл
			Для каждого ИмяСуммы Из МассивИменСумм Цикл
				Для каждого ИмяРесурса Из МассивИменРесурсов Цикл
					Если ИмяРесурса = "ВесГоловыНаКонецПериода" Тогда
						Если ИмяСуммы = "" Тогда
							ПолеИтога = СКД.ПоляИтога.Добавить();
						Иначе	
							Продолжить;
						КонецЕсли;
					Иначе
						ПолеИтога = СКД.ПоляИтога.Добавить();
					КонецЕсли;	
					ПолеИтога.ПутьКДанным = ИмяРесурса+ИмяСуммы+Сценарий;
					ПолеИтога.Выражение = "Сумма("+ИмяРесурса+ИмяСуммы+Сценарий+")";
				КонецЦикла;
			КонецЦикла;
		КонецЦикла;
		
		//Заменим выражения итога пользовательских полей
		Для каждого ПолеКД Из НастройкиКД.ПользовательскиеПоля.Элементы Цикл
			
			Если НЕ ПолеКД.Использование Тогда
				Продолжить;
			КонецЕсли;
			
			ИдентификаторПоля = Лев(ПолеКД.Заголовок, 4);
			
			Если ИдентификаторПоля = "УУГ2" ИЛИ ИдентификаторПоля = "Сумм" ИЛИ ИдентификаторПоля = "УУГА" Тогда  // корректировки пок не рассчитываем - не было в ЛТ
				Продолжить;
			КонецЕсли;
			
			СтароеВыражение = ПолеКД.ПолучитьВыражениеИтоговыхЗаписей();
			
			Если ИдентификаторПоля = "АбсГ" ИЛИ ИдентификаторПоля = "ОтнГ" Тогда
				НовоеВыражение = 
				"Выбор
				|	Когда СтатьяБюджета.Наименование = ""Среднее поголовье, гол"" Тогда"+"
				|"+СтрЗаменить(СтрЗаменить(СтароеВыражение, "СуммаСценарийОборот_Эталон", "СреднееПоголовьеСуммаСценарийПлан"), "СуммаСценарийОборот_1", "СреднееПоголовьеСуммаСценарийФакт")+"
				|	Когда СтатьяБюджета.Наименование = ""Среднесуточный привес, кг"" Тогда
				|"+СтрЗаменить(СтрЗаменить(СтароеВыражение, "СуммаСценарийОборот_Эталон", "СреднесуточныйПривесСуммаСценарийПлан"), "СуммаСценарийОборот_1", "СреднесуточныйПривесСуммаСценарийФакт")+"
				|	Когда СтатьяБюджета.Наименование = ""Вес 1 головы на конец периода,кг"" Тогда
				|"+СтрЗаменить(СтрЗаменить(СтароеВыражение, "СуммаСценарийОборот_Эталон", "ВесГоловыНаКонецПериодаПлан"), "СуммаСценарийОборот_1", "ВесГоловыНаКонецПериодаФакт")+"
				|	Иначе";
			ИначеЕсли ИдентификаторПоля = "План" Тогда
				НовоеВыражение = 
				"Выбор
				|	Когда СтатьяБюджета.Наименование = ""Среднее поголовье, гол"" Тогда"+"
				|"+СтрЗаменить(СтароеВыражение, "СуммаОборот_Эталон", "СреднееПоголовьеСуммаПлан")+"
				|	Когда СтатьяБюджета.Наименование = ""Среднесуточный привес, кг"" Тогда
				|"+СтрЗаменить(СтароеВыражение, "СуммаОборот_Эталон", "СреднесуточныйПривесСуммаПлан")+"
				|	Когда СтатьяБюджета.Наименование = ""Вес 1 головы на конец периода,кг"" Тогда
				|"+СтрЗаменить(СтароеВыражение, "СуммаОборот_Эталон", "ВесГоловыНаКонецПериодаПлан")+"
				|	Иначе";
			ИначеЕсли ИдентификаторПоля = "Факт" Тогда
				НовоеВыражение = 
				"Выбор
				|	Когда СтатьяБюджета.Наименование = ""Среднее поголовье, гол"" Тогда"+"
				|"+СтрЗаменить(СтароеВыражение, "СуммаОборот_1", "СреднееПоголовьеСуммаФакт")+"
				|	Когда СтатьяБюджета.Наименование = ""Среднесуточный привес, кг"" Тогда
				|"+СтрЗаменить(СтароеВыражение, "СуммаОборот_1", "СреднесуточныйПривесСуммаФакт")+"
				|	Когда СтатьяБюджета.Наименование = ""Вес 1 головы на конец периода,кг"" Тогда
				|"+СтрЗаменить(СтароеВыражение, "СуммаОборот_1", "ВесГоловыНаКонецПериодаФакт")+"
				|	Иначе";
			КонецЕсли;
			
			ТекстЗамены = НовоеВыражение+"
			|	"+СтароеВыражение+"
			|КОНЕЦ";
			
			ПолеКД.УстановитьВыражениеИтоговыхЗаписей(ТекстЗамены);
			
		КонецЦикла;		
Показать
Прикрепленные файлы:
По теме из базы знаний
Найденные решения
7. ВеликийДуматель 12 29.09.20 18:55 Сейчас в теме
В общем дело было в Настройках КД. В схеме компоновки у меня эти поля есть, а в настройках компоновки данных в доступных полях выбора их не было. Пришлось заново инициализировать КомпоновщикНастроек и дозаполнять недостающими настройками из старых настроек КД
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. user958326 27.09.20 19:07 Сейчас в теме
А где у вас "СреднееПоголовьеСуммаСценарийПлан" определен?
3. ВеликийДуматель 12 28.09.20 10:30 Сейчас в теме
4. user958326 28.09.20 11:16 Сейчас в теме
(3)
Видимо все же в какой-то момент нет
5. ВеликийДуматель 12 29.09.20 13:13 Сейчас в теме
В этом и вопрос. Вроде везде это поле есть: в полях набора данных, в полях итога, в группах полей в насройках варианта отчёта и в настройках по умолчанию оно есть точно. Почему тогда поле не найдено, непонятно
6. SlavaKron 29.09.20 13:32 Сейчас в теме
Сделайте этот отчет вручную в качестве эталона для программного заполнения. Сравните объекты программного СКД и эталонного.
7. ВеликийДуматель 12 29.09.20 18:55 Сейчас в теме
В общем дело было в Настройках КД. В схеме компоновки у меня эти поля есть, а в настройках компоновки данных в доступных полях выбора их не было. Пришлось заново инициализировать КомпоновщикНастроек и дозаполнять недостающими настройками из старых настроек КД
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот