Строка = 1;
Колонка = 1;
УдалитьСтроку = Истина;
Пока Истина Цикл
СчКол = 1;
Пока СчКол <= 50 Цикл
ТекОбласть = ТабДок.Область(Строка,Колонка,Строка,Колонка);
Если ТекОбласть.ЗначениеЗаполнено Тогда //Зависит от того, где заполняется значение (текст/значение).
УдалитьСтроку = Ложь; //Значит строка уже не пустая и удалять нельзя.
Строка = Строка + 1;
Прервать;
Иначе
Колонка = Колонка + 1;
КонецЕсли;
КонецЦикла;
Если УдалитьСтроку Тогда
УдалитьСтроку = Ложь;
ТабДок.УдалитьОбласть(ТабДок.Область(Строка,1,Строка,50),ТипСмещенияТабличногоДокумента.ПоВертикали);
КонецЕсли;
Колонка = 1;
//Процедуры прерывания по окончанию обработки табличного документ
КонецЦикла;
Варианта 3:
- Или обрабатывать табличный документ
- или выгружать как таблицу значений, обрабатывать, а затем преобразовывать в табличный документ
- или (3)
(7) А где то это проще реализовано?
Если не нравится как работает СКД, то в чем проблема, нарисуйте свой отчет без СКД и не придется ничего переопределять :-)
Строка = 1;
Колонка = 1;
УдалитьСтроку = Истина;
Пока Истина Цикл
СчКол = 1;
Пока СчКол <= 50 Цикл
ТекОбласть = ТабДок.Область(Строка,Колонка,Строка,Колонка);
Если ТекОбласть.ЗначениеЗаполнено Тогда //Зависит от того, где заполняется значение (текст/значение).
УдалитьСтроку = Ложь; //Значит строка уже не пустая и удалять нельзя.
Строка = Строка + 1;
Прервать;
Иначе
Колонка = Колонка + 1;
КонецЕсли;
КонецЦикла;
Если УдалитьСтроку Тогда
УдалитьСтроку = Ложь;
ТабДок.УдалитьОбласть(ТабДок.Область(Строка,1,Строка,50),ТипСмещенияТабличногоДокумента.ПоВертикали);
КонецЕсли;
Колонка = 1;
//Процедуры прерывания по окончанию обработки табличного документ
КонецЦикла;
(20) всё вроде норм, но при удалении строк группировки (у меня группировка по менеджерам заказов) остаются на месте, и первая группировка "заползает" на другие и т.д.
Вообще если тебе надо изменить результат формирования отчета через СКД, но в СКД лезть нельзя то надо программно изменить настройки компоновщика, а уже потом выводить результат. Вот статья в помощь https://infostart.ru/1c/articles/1098946/
Результат в виде таблицы значений можно получить из запроса макета компоновки. Этот результат обработать и подменить в наборе данных макета компоновки:
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Настройки = КомпоновщикНастроек.ПолучитьНастройки();
ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки);
НаборДанных = МакетКомпоновки.НаборыДанных.НаборДанных1;
Запрос = Новый Запрос(НаборДанных.Запрос);
Для Каждого ПараметрЗапроса Из МакетКомпоновки.ЗначенияПараметров Цикл
Запрос.УстановитьПараметр(ПараметрЗапроса.Имя, ПараметрЗапроса.Значение);
КонецЦикла;
ТЗ = Запрос.Выполнить().Выгрузить();
ОбработкаРезультатаСКД(ТЗ);
СвойстваНабора = Новый Структура("Имя,ИсточникДанных,Поля,Отбор");
ЗаполнитьЗначенияСвойств(СвойстваНабора, НаборДанных);
МакетКомпоновки.НаборыДанных.Удалить(НаборДанных);
НаборДанных = МакетКомпоновки.НаборыДанных.Добавить(Тип("НаборДанныхОбъектМакетаКомпоновкиДанных"));
ЗаполнитьЗначенияСвойств(НаборДанных, СвойстваНабора);
НаборДанных.ИмяОбъекта = "ТЗ";
Для Каждого Поле Из СвойстваНабора.Поля Цикл
НовоеПоле = НаборДанных.Поля.Добавить();
ЗаполнитьЗначенияСвойств(НовоеПоле, Поле);
КонецЦикла;
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, Новый Структура("ТЗ", ТЗ), ДанныеРасшифровки, Ложь);
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
ПроцессорВывода.Вывести(ПроцессорКомпоновки);
КонецПроцедуры
Процедура ОбработкаРезультатаСКД(ТЗ)
КонецПроцедуры
(25) По большому счету, такая обработка СКД - бред. Если СКД строится из нескольких наборов, это уже не плоский результат, который можно обработать как таблицу значений. Уверен, всё решается гораздо проще средствами самой СКД.