Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
09 дек 2024, 17:08

СКД постоботка.

Автор andron81_81, 13 ноя 2024, 22:16

0 Пользователей и 1 гость просматривают эту тему.

andron81_81

пытаюсь после формирования отчета в СКД отредактировать сформированный табличный документ.
пытался что-то вроде этого:

Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)

ДокументРезультат.Область(3,1).Текст ="Тест";

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


но в результате пишется в ячейку, а отчет просто рисуется ниже этой ячейки.
Ощущение , что я сначала пишу в ячейку, а потом отчет отрабатывается . а мне надо после.
Что надо сделать ??? на просторах ответов найти не удалось, они какие-то не те что мне надо
или не хватает знаний использовать их.

fruitella

Тебе надо получить поле и его расшифровку, вот тут пример

https://1c.mista.ru/topic/708206

antoneus

Ну правильно. Событие ПриКомпоновкеРезультата возникает перед формированием отчета, чтобы можно было как-то поменять логику формирования, например. Соответственно, выводится этот "тест", потом выводится отчет. Чтобы была возможность постобработки - надо слепить форму со своей кнопкой, в процедуре по этой кнопке вызвать метод СкомпоноватьРезультат, а потом уже постобрабатывать.

andron81_81

antoneus, попробую. спасибо

Максим75

как-то игрался с объединением ячеек в таблице

Процедура СформироватьОтчет()
ЭлементыФормы.Результат.Очистить();

//Если ТолькоБонусы = Истина тогда
// Вариант = СхемаКомпоновкиДанных.ВариантыНастроек.Найти("Расширенный");
//// КомпоновщикНастроек.ЗагрузитьНастройки(СхемаКомпоновкиданных.ВариантыНастроек.Найти("Развернутый").Настройки);
//иначе
// Вариант = СхемаКомпоновкиДанных.ВариантыНастроек.Найти("Основной");
//// КомпоновщикНастроек.ЗагрузитьНастройки(СхемаКомпоновкиданных.ВариантыНастроек.Найти("Основной").Настройки);
//КонецЕсли;
//КомпоновщикНастроек.ЗагрузитьНастройки(Вариант.Настройки);
//СкомпоноватьРезультат(ЭлементыФормы.Результат);
// Сгенерируем макет компоновки данных при помощи компоновщика макета
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;

// В качестве схемы компоновки будет выступать схема самого отчета
// В качестве настроек отчета - текущие настройки отчета
// Данные расшифровки будем помещать в свойство расширения формы - ДанныеРасшифровки

МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, КомпоновщикНастроек.Настройки, ДанныеРасшифровки);

// Создадим и инициализируем процессор компоновки
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, ,ДанныеРасшифровки);

// Создадим и инициализируем процессор вывода результата
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ЭлементыФормы.Результат);

// Обозначим начало вывода
ПроцессорВывода.НачатьВывод();

// Основной цикл вывода отчета
Пока Истина Цикл

// Получим следующий элемент результата компоновки
ЭлементРезультата = ПроцессорКомпоновки.Следующий();

Если ЭлементРезультата = Неопределено Тогда
// Следующий элемент не получен - заканчиваем цикл вывода
Прервать;

Иначе
            // Элемент получен - выведем его при помощи процессора вывода
ПроцессорВывода.ВывестиЭлемент(ЭлементРезультата);

КонецЕсли;

КонецЦикла;

// Обозначем завершение вывода
ПроцессорВывода.ЗакончитьВывод();
Выборка = Справочники.Филиалы.Выбрать();
Пока Выборка.Следующий() цикл

Если Выборка.ПометкаУдаления=Истина тогда продолжить; КонецЕсли;
Маркер= СокрЛП(Выборка.Наименование);
ОбъединитьЯчейкиВТабличномДокументе(ЭлементыФормы.Результат, Маркер);

КонецЦикла;

Маркер = "_Пустой филиал";
ОбъединитьЯчейкиВТабличномДокументе(ЭлементыФормы.Результат, Маркер);
//Маркер = "Кухня 2 этаж";
//ОбъединитьЯчейкиВТабличномДокументе(ЭлементыФормы.Результат, Маркер);

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

Процедура УстановитьВариантыНастроек()

КП = ЭлементыФормы.ДействияФормы;
НоваяКнопка = КП.Кнопки.Вставить(1,"ВариантыОтчетов",ТипКнопкиКоманднойПанели.Подменю,"Варианты",);

НовоеДействие = Новый Действие("ИзменитьВариант");

Счетчик = 1;

Для каждого Настройка из СхемаКомпоновкиДанных.ВариантыНастроек цикл

НоваяКнопка = КП.Кнопки.ВариантыОтчетов.Кнопки.Добавить("Вариант"+Строка(Счетчик),ТипКнопкиКоманднойПанели.Действие,Настройка.Представление,НовоеДействие);
Счетчик = Счетчик+1;


КонецЦикла;


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


Процедура ИзменитьВариант (Элемент)

//Обходим в цикле все варианты отчета и проверяем, совпадает ли их представление с заголовком кнопки, на которую нажали.
//Если совпало, значит это и есть искомая настройка
Для каждого Вариант Из СхемаКомпоновкиДанных.ВариантыНастроек Цикл

Если Элемент.Текст = Вариант.Представление тогда

//Загружаем вариант
КомпоновщикНастроек.ЗагрузитьНастройки(Вариант.Настройки);

//Меняем заголовок формы, чтобы было понятно, что за вариант работает
//Можно и где-то в другом месте отобразить название варианта
ЭтаФорма.Заголовок=ЭтотОбъект.Метаданные().Представление()+": "+Вариант.Представление;

//У меня на форму были выведены дополнительные поля отборов из компоновщика настроек
//Если есть что-то подобное, то такие процедуры писать сюда
//Если нет, то следующую строчку удалить
//ЗаполнитьОтборНастроек();

//Прерываем цикл, т.к. нашли настройку
Прервать;

КонецЕсли;

КонецЦикла;

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

Процедура ПриОткрытии()
// Вставить содержимое обработчика.
// УстановитьВариантыНастроек();
КонецПроцедуры


Процедура ОбъединитьЯчейкиВТабличномДокументе(ТабличныйДокумент, МаркерОбъединения) Экспорт
 // Находит ячейки, содержащие в тексте МаркерОбъединения
 // Объединяет ячейки, располагающиеся рядом, содержащие одинаковый текст и маркер объединения
 
 ОбъединяемыеЯчейки = НайтиОбластиТабличногоДокументаПоВхождениюПодстроки(ТабличныйДокумент, МаркерОбъединения);
 ОбъединяемыеЯчейки.Колонки.Добавить("Диапазон");
 ОбъединяемыеЯчейки.Сортировать("Верх,Лево");
 
 Для Каждого Строка из ОбъединяемыеЯчейки Цикл
 Отбор = Новый Структура("Текст,Верх,Лево", Строка.Текст, Строка.Верх-1, Строка.Лево);
 НайденныеСтроки = ОбъединяемыеЯчейки.НайтиСтроки(Отбор);
 Если НайденныеСтроки.Количество() Тогда
 Строка.Диапазон = НайденныеСтроки[0].Диапазон;
 Строка.Диапазон.Низ = Макс(Строка.Диапазон.Низ, Строка.Верх);
 Продолжить;
 КонецЕсли;
 
 Отбор = Новый Структура("Текст,Верх,Лево", Строка.Текст, Строка.Верх, Строка.Лево-1);
 НайденныеСтроки = ОбъединяемыеЯчейки.НайтиСтроки(Отбор);
 Если НайденныеСтроки.Количество() Тогда
 Строка.Диапазон = НайденныеСтроки[0].Диапазон;
 Строка.Диапазон.Право = Макс(Строка.Диапазон.Право, Строка.Лево);
 Продолжить;
 КонецЕсли;
 
 Строка.Диапазон = Новый Структура("Текст,Верх,Лево,Низ,Право", Строка.Текст, Строка.Верх, Строка.Лево, Строка.Верх, Строка.Лево);
 КонецЦикла;
 
 ОбъединяемыеЯчейки.Свернуть("Диапазон");
 Для Каждого Строка Из ОбъединяемыеЯчейки Цикл
 Диапазон = Строка.Диапазон;
 Область = ТабличныйДокумент.Область(Диапазон.Верх, Диапазон.Лево, Диапазон.Низ, Диапазон.Право);
 Область.Объединить();
 КонецЦикла;
 
КонецПроцедуры

Процедура ЗаменитьТекстВТабличномДокументе(ТабличныйДокумент, ПодстрокаПоиска, ПодстрокаЗамены) Экспорт
 
 НайденныеОбласти = НайтиОбластиТабличногоДокументаПоВхождениюПодстроки(ТабличныйДокумент, ПодстрокаПоиска);
 Для каждого Строка из НайденныеОбласти Цикл
 Строка.Область.Текст = СтрЗаменить(Строка.Область.Текст, ПодстрокаПоиска, ПодстрокаЗамены);
 КонецЦикла;
 
КонецПроцедуры

Процедура СкрытьСтрокиВТабличномДокументе(ТабличныйДокумент, МаркерУдаления) Экспорт
 
 НайденныеОбласти = НайтиОбластиТабличногоДокументаПоВхождениюПодстроки(ТабличныйДокумент, МаркерУдаления);
 НайденныеОбласти.Свернуть("Верх");
 
 Для каждого Строка из НайденныеОбласти Цикл
 Область = ТабличныйДокумент.Область(Строка.Верх, , Строка.Верх, );
 Область.Видимость = Ложь;
 КонецЦикла;
 
КонецПроцедуры

Функция НайтиОбластиТабличногоДокументаПоВхождениюПодстроки(ТабличныйДокумент, ПодстрокаПоиска) Экспорт
 
 НайденныеОбласти = Новый ТаблицаЗначений;
 НайденныеОбласти.Колонки.Добавить("Область");
 НайденныеОбласти.Колонки.Добавить("Текст");
 НайденныеОбласти.Колонки.Добавить("Верх");
 НайденныеОбласти.Колонки.Добавить("Лево");
 
 НайденнаяОбласть = ТабличныйДокумент.НайтиТекст(ПодстрокаПоиска);
 
 Пока НЕ НайденнаяОбласть = Неопределено Цикл
 
 НоваяСтрока = НайденныеОбласти.Добавить();
 ЗаполнитьЗначенияСвойств(НоваяСтрока, НайденнаяОбласть);
 НоваяСтрока.Область = НайденнаяОбласть;
 
 НайденнаяОбласть = ТабличныйДокумент.НайтиТекст(ПодстрокаПоиска, НайденнаяОбласть);
 
 КонецЦикла;
 
 Возврат НайденныеОбласти;
 
КонецФункции


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

andron81_81

Максим75,
Тогда логично чтобы форма стандартного скд не выводилась. а вывод делать в отдельном ТД .

Теги:

Похожие темы (1)

Рейтинг@Mail.ru

Поиск