Перестала строиться иерархия. УТ 10.3

Строил таблицу иерархии в УТ 10.3, внезапно перестал работать отчет из-за запроса, имеющего вид:

Проблема была в иерархии, отчет тестировался на 6 уровнях, а возникло уже 9.

1с отводит на каждый уровень по 150 символов, в итоге 150*9 = 1350 это больше чем максимум 1024. Явно указал ограничивать до 1024 длину, заработало:

Функция ПолучитьНоменклатуруДляОтчета() Экспорт
	З = Новый Запрос(
	"ВЫБРАТЬ
	|	Т.Ссылка,
	|	Т.Наименование,
	|	Т.Наименование КАК Порядок,
	|	0 КАК Уровень,
	|	Т.ЭтоГруппа
	|ПОМЕСТИТЬ Т0
	|ИЗ
	|	Справочник.Номенклатура КАК Т
	|ГДЕ
	|	Т.Родитель = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)
	|	И &УсловиеЭлементов
	|");
	
	//Осипов - для 12 уровней отчета  
	ВсегоУровней = 10; //от 0 до 11 - 12 уровней
	
	Для Инд = 1 По ВсегоУровней  Цикл
		
		//2023-12-27 - важно тут ограничиваю строку до 1024, тогда нормально считает
		ТекТекст = 
		"ВЫБРАТЬ
		|	Т.Ссылка,
		|	Т.Наименование,
		|	ВЫРАЗИТЬ(ЕСТЬNULL(Т0.Порядок, """") + ""."" + Т.Наименование КАК Строка(1024)) КАК Порядок,
		|	&Уровень1 КАК Уровень,
		|	Т.ЭтоГруппа
		|ПОМЕСТИТЬ Т1
		|ИЗ
		|	Справочник.Номенклатура КАК Т
		|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Т0 КАК Т0
		|		ПО (Т0.Ссылка = Т.Родитель)
		|ГДЕ
		|	&УсловиеЭлементов";                         
		
		ИндСтрокой = XMLСтрока(Инд);
		ПредИндСтрокой = XMLСтрока(Инд-1);              
		
		ТекТекст = СтрЗаменить(ТекТекст, "&Уровень1", ИндСтрокой);
		ТекТекст = СтрЗаменить(ТекТекст, "Т1", "Т" + ИндСтрокой);
		ТекТекст = СтрЗаменить(ТекТекст, "Т0", "Т" + ПредИндСтрокой);

		З.Текст = З.Текст + ";" + Символы.ПС + ТекТекст;
		
	КонецЦикла;

	//Осипов - для 12 уровней отчета 
	
	Для Инд = 0 По  ВсегоУровней Цикл
		
		ТекТекст =  
		"ВЫБРАТЬ
		|	Т.Ссылка КАК Номенклатура,
		|	Т.Наименование,
		|	ЕСТЬNULL(Т.Порядок, """") КАК Порядок,
		|	Т.Уровень,
		|	Т.ЭтоГруппа,
		|	ЛОЖЬ КАК ЭтоИтого
		|ИЗ
		|	Т0 КАК Т
		|ГДЕ
		|	&УсловиеГруппы1";
		
		
		ИндСтрокой = XMLСтрока(Инд);
		ПредИндСтрокой = XMLСтрока(Инд-1);              
		
		ТекТекст = СтрЗаменить(ТекТекст, "&УсловиеГруппы1", "ИСТИНА");
		ТекТекст = СтрЗаменить(ТекТекст, "Т0", "Т" + ИндСтрокой);

		З.Текст = З.Текст + ?(Инд = 0, ";", " ОБЪЕДИНИТЬ ВСЕ ") + Символы.ПС + ТекТекст;
		
	КонецЦикла;
	

	З.Текст = З.Текст + " ОБЪЕДИНИТЬ ВСЕ " +
	"
	|ВЫБРАТЬ
	|	""ИТОГО"",
	|	""ИТОГО"",
	|	"""",
	|	1,
	|	ИСТИНА,
	|	ИСТИНА
	|";
	З.Текст = СтрЗаменить(З.Текст, "&УсловиеЭлементов", "НЕ Т.Ссылка В ИЕРАРХИИ(&ИсключаемаяГруппа) И НЕ ЕСТЬNULL(Т.Услуга, ложь)"); //Исключаем старую иерархию
	
	ИсключаемаяГруппа = Новый Массив();
	//ИсключаемаяГруппа.Добавить(Справочники.Номенклатура.НайтиПоКоду("ДДД98524")); //Удаленные
	//ИсключаемаяГруппа.Добавить(Справочники.Номенклатура.НайтиПоКоду("98536909")); //Услуги
	З.УстановитьПараметр("ИсключаемаяГруппа", ИсключаемаяГруппа);
	
	
	ТЗ = З.Выполнить().Выгрузить();      
	ТЗ.Колонки.Добавить("ПорядокНовый", Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(1024)));
	М = ТЗ.ВыгрузитьКолонку("Порядок");
	ТЗ.ЗагрузитьКолонку(М, "ПорядокНовый");
	ТЗ.Колонки.Удалить("Порядок");
	ТЗ.Колонки.ПорядокНовый.Имя = "Порядок";
	ТЗ.Сортировать("ЭтоГруппа, Порядок");
	Возврат ТЗ;
	
КонецФункции

Среда: 10.3.66.3 Объем: 0.5 час.

fixin

Программирую на 1С с 1999 года. В 1С просто Гений. В 2020 году ушел из офиса на вольные хлеба фриланса. Принимаю заказы.

Читайте также:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *