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

06.10.20

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

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

Скачать файл

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

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

15500 руб.

02.09.2020    181743    1009    403    

960

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

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

27.02.2025    9323    ovetgana    50    

83

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

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

24.12.2024    7106    Akcium    13    

43

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

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

15.05.2024    12851    implecs    6    

50

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

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

3 стартмани

05.02.2024    8874    65    obmailok    21    

82

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

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

1 стартмани

31.01.2024    3630    6    Yashazz    1    

34

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

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

2 стартмани

11.12.2023    12542    25    John_d    30    

128

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

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

05.12.2023    10125    PROSTO-1C    15    

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


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

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

Так можно сделать для неограниченного количества столбиков и работает вне зависимости от группировки
Оставьте свое сообщение