СКД. Объединение ячеек на примере "Справка инвентаризации расчетов с покупателями и поставщиками по форме ИНВ-17"

06.10.20

Разработка - СКД

Шпаргалка. Объединение ячеек в отчете на СКД с произвольным макетом.

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
СКД. Объединение ячеек на примере "Справка инвентаризации расчетов с покупателями поставщиками по форме ИНВ-17":
.erf 15,43Kb
9
9 Скачать (2 SM) Купить за 2 150 руб.

Всем доброго времени суток. 

Данная статья используется больше для себя как шпаргалка. 

Опишу вкратце задачу. Иногда возникает ситуация, когда пользователь хочет видеть отчеты с объединёнными ячейками как в Экселе (визуально представлено на главной картинке темы). Каждый раз приходилось что-то выдумывать. И данная задача решалась разными методами.

Получилось так, что недавно поступило много таких однотипных задач. И пришлось для себя выработать некое универсальное решение.

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

Все действия по созданию внешнего отчета (создать внешний отчет на СКД с использованием своего макета и основной формы) – стандартны. Не буду их описывать. 

В чем заключается мое универсальное решение. В процедуре «ПриКомпоновкеРезультата» после стандартного вывода отчета я начинаю работать с самим табличным документом (куда вывел результат). Определяю высоту таблицы. И в цикле прохожу сам табличный документ по определенным ячейкам. Что имеется в виду:

На примере: Мне надо одинаковых контрагентов объединить в одну ячейку и вывести на против детальных записей. Для этого я запоминаю начало области первого контрагента, и когда при чтении следующей области сменился контрагента, я делаю отсечку области, запоминаю ее и объединяю.

После чего снова запоминаю начало области и дальше в цикле иду до следующего контрагента.

Ниже код. + внешний отчет для примера.

 Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
    
    СтандартнаяОбработка = Ложь;
    
    ДокументРезультат.Очистить();
    ДокументРезультат.АвтоМасштаб = Истина;
    ДокументРезультат.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;
    ДокументРезультат.Защита = Ложь;
    ДокументРезультат.ОтображатьЗаголовки = Истина;
    
    //+Стандартный вывод СКД отчета
    МакетСКД = ЭтотОбъект.ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
	Настройки = ЭтотОбъект.КомпоновщикНастроек.ПолучитьНастройки();
	КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
	
	//+ssn внесем свои коррективы в типовой вывод
	ТекДата = Настройки.ПараметрыДанных.Элементы[1].Значение;
	МакетСКД.Макеты.Макет1.Параметры.МесяцОтчета.Выражение = """" + НРег(СклонениеПредставленийОбъектов.ПросклонятьПредставление(Формат(ТекДата.Дата, "ДФ=ММММ"), 2,)) +"""";
	//-ssn внесем свои коррективы в типовой вывод

	МакетКомпоновки =  КомпоновщикМакета.Выполнить(МакетСКД,Настройки,ДанныеРасшифровки);
	ПроцессорКД = Новый ПроцессорКомпоновкиДанных;
	ПроцессорКД.Инициализировать(МакетКомпоновки,,ДанныеРасшифровки, Истина);
	  
	ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
	ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
	ПроцессорВывода.Вывести(ПроцессорКД);	
    //-Стандартный вывод СКД отчета
    
    //+Объеденим ячейки 
    ОбъединитьЯчейкиВТабличномДокументе(ДокументРезультат);    
    //-Объеденим ячейки
    
КонецПроцедуры
 
Процедура ОбъединитьЯчейкиВТабличномДокументе(ТабличныйДокумент) Экспорт
    
    СтарыйКонтрагент = "";
    НачалоОбласти = "";
    ЭтоПервыйВход = Истина;
    //представим нашу область объединения ввиде квадрата.
    //его параметры:
    //                верхний левый улог - строка R26 столбец С6
    //                правый нижний угол - строка R26 столбец С23
    //в итоге получилась область R26С6:R26С23
    
    //так вот для того, чтобы программно объединить ячейки - в моем случаи нужно узнать строки. А колонки всегда жестко завязаны.
    ОбластьЛевыйВерхнийУгол = 26;
    ОбластьПравыйНижнийУгол = 26;
    

    ВысотаТЧ = ТабличныйДокумент.ВысотаТаблицы;
    
    Для Сч = 26 По ВысотаТЧ Цикл
        ТекОбласть = "R" + Сч + "C6:R" + Сч + "C23";
        НайденнаяОбласть = ТабличныйДокумент.Область(ТекОбласть);
        
        Если ТекОбласть <> НачалоОбласти И НайденнаяОбласть.Текст <> СтарыйКонтрагент Тогда 
            Если НЕ ЭтоПервыйВход  Тогда 
                ГотоваяОбластьДляОбъединения = "R" + Строка(ОбластьЛевыйВерхнийУгол) + "C6:R" +  Строка(Сч-1) + "C23";
                
                ОбластьЛевыйВерхнийУгол = Сч;
                ОбластьПравыйНижнийУгол = Сч;
                
                Область = ТабличныйДокумент.Область(ГотоваяОбластьДляОбъединения);
                Область.Объединить();
            Иначе
                ЭтоПервыйВход = Ложь;
            КонецЕсли;

            НачалоОбласти = ТекОбласть;    
            СтарыйКонтрагент = НайденнаяОбласть.Текст;
        КонецЕсли;
    КонецЦикла; 
    
КонецПроцедуры

 

Данный внешний отчет тестировался на Бухгалтерия предприятия, редакция 3.0 (3.0.75.104).

 

СКД объединение ячеек соединить ячейки сгруппировать на

См. также

SALE! %

Инструментарий разработчика Роли и права Запросы СКД Программист Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Конфигурации 1cv8 Платные (руб)

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

12000 10000 руб.

02.09.2020    163023    900    401    

880

Запросы СКД Программист Стажер Система компоновки данных Россия Бесплатно (free)

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

15.05.2024    9385    implecs_team    6    

47

Инструментарий разработчика СКД Программист Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

По выбранной схеме компоновки данных генерирует программный код, который генерирует СКД, аналогичную исходной схеме. Есть дополнительные инструменты для просмотра дерева схемы, сравнение исходной схемы и полученной по коду, а также сравнение изменений в сгенерированном коде для исходной схемы и для измененной.

3 стартмани

05.02.2024    7369    56    obmailok    21    

79

Запросы СКД Программист Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Абонемент ($m)

Есть список полей в виде текста, или запрос - закидываем в набор СКД.

1 стартмани

31.01.2024    3230    5    Yashazz    1    

34

СКД WEB-интеграция Программист Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Долгое время поддерживаю web-портал, в котором появилась необходимость создавать отчеты. Просмотрев различные фреймворки на js, я решил сделать свое решение, которое позволяло бы быстро разрабатывать и добавлять новые отчеты на web-портал.

2 стартмани

11.12.2023    11093    24    John_d    25    

125

СКД Программист Платформа 1С v8.3 Система компоновки данных Конфигурации 1cv8 Бесплатно (free)

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

05.12.2023    8409    PROSTO-1C    15    

68
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. wowik 891 11.03.20 15:36 Сейчас в теме
+1. Свой макет в СКД, программная работа с табличным документом ("Область.Объединить()" и т.д.). Много времени потрачено. Не проще все руками, без СКД нарисовать?
3. boobzx 46 12.03.20 07:08 Сейчас в теме
(1)
роще все руками, без СКД нарисовать?


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

Лично для меня это пока оптимальное решение.
user953326; +1 Ответить
2. ixijixi 1931 11.03.20 20:04 Сейчас в теме
4. boobzx 46 12.03.20 07:14 Сейчас в теме
(2) Баян баяном. А в явном виде для быстрого поиска решения нет с 2013 года.
Данное решение видел. Оно и легло в основу моего решения. И да, тут тоже Постобработка ТабДока.
user953326; +1 Ответить
5. ixijixi 1931 12.03.20 09:15 Сейчас в теме
(4) Вот если бы это сделать настройкой компоновки, то цены бы не было.
user712426; +1 Ответить
6. boobzx 46 12.03.20 09:29 Сейчас в теме
(5)Да. Согласен. Но не удалось. :(
7. ixijixi 1931 12.03.20 09:48 Сейчас в теме
(6) Пока еще никому не удалось))
8. echo77 1908 17.11.21 10:59 Сейчас в теме
(5) Нет цены этому человеку :-) https://youtu.be/dIv-i9ejn04
Но, конечно же, это костыль :-)
native-api; user712426; SagittariusA; yuraskas; ixijixi; +5 Ответить
9. ixijixi 1931 17.11.21 11:06 Сейчас в теме
10. boobzx 46 17.11.21 15:44 Сейчас в теме
11. UralKIT 1 01.12.21 05:54 Сейчас в теме
(8) только не работает когда группировок более одной, т.к. коряво работает нумерация строк внутри разных группировок
Оставьте свое сообщение