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

06.10.20

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

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

Скачать файл

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

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

 

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

См. также

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

Инструменты для разработчиков 1С 8.3: Infostart Toolkit. Автоматизация и ускорение разработки на управляемых формах. Легкость работы с 1С.

12000 руб.

02.09.2020    169295    937    403    

905

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

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

24.12.2024    5416    Akcium    13    

40

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

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

15.05.2024    10220    implecs_team    6    

48

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

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

3 стартмани

05.02.2024    7846    57    obmailok    21    

80

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

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

1 стартмани

31.01.2024    3327    6    Yashazz    1    

34

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

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

2 стартмани

11.12.2023    11461    25    John_d    25    

125

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

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

05.12.2023    8887    PROSTO-1C    15    

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


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

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