Created
January 19, 2022 06:53
-
-
Save b4tman/d7b1ddb9af7ca18218afc87f04b1e846 to your computer and use it in GitHub Desktop.
Объединение табличных документов с разным количеством колонок
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// srcs: | |
// https://forum.mista.ru/topic.php?id=837711 | |
// https://fastcode.im/Templates/7861 | |
// Добавляет один сформированный табличный документ к другому | |
// | |
// Параметры: | |
// <ТабличныйДокументПриемник> - табличный документ, в который добавляется Табличный документ | |
// <ВставляемыйТабличныйДокумент> - табличный документ, вставляемый в приемник | |
Процедура ДобавитьТабличныйДокумент(ТабличныйДокументПриемник, ВставляемыйТабличныйДокумент) | |
Если ВставляемыйТабличныйДокумент = Неопределено Тогда | |
Возврат; | |
КонецЕсли; | |
НачалоНовогоТД = ТабличныйДокументПриемник.ВысотаТаблицы + 1; | |
//Разобъем вствляемый ТД на куски форматов строк | |
ТаблицаФорматовСтрок = Новый ТаблицаЗначений; | |
ТаблицаФорматовСтрок.Колонки.Добавить("ПерваяСтрока"); | |
ТаблицаФорматовСтрок.Колонки.Добавить("ПоследняяСтрока"); | |
ТаблицаФорматовСтрок.Колонки.Добавить("МассивЗначенийШирины"); | |
//Чтобы узнать ширину колонки для каждой ячейки необходимо разъединить все объединенные ячейки | |
//А, т.к. вставляемый ТД нам не нужно изменять, создадим копию вставляемого ТД | |
ВременныйТабличныйДокумент = ВставляемыйТабличныйДокумент.ПолучитьОбласть(); | |
ВременныйТабличныйДокумент.Область().Разъединить(); | |
//Готовим таблицу, где будет храниться информация обо всех "группах" форматирования строк | |
ПредыдущиеШириныСтрокой = ""; | |
Для НомерСтроки = 1 по ВременныйТабличныйДокумент.ВысотаТаблицы Цикл | |
МассивЗначенийШирины = Новый Массив; | |
Для НомерКолонки = 1 по ВременныйТабличныйДокумент.ШиринаТаблицы Цикл | |
МассивЗначенийШирины.Добавить(ВременныйТабличныйДокумент.Область(НомерСтроки, НомерКолонки).ШиринаКолонки); | |
КонецЦикла; | |
ТекущиеШириныСтрокой = ПолучитьЗначениеШириныСтрокой(МассивЗначенийШирины, ";"); | |
Если ТекущиеШириныСтрокой<>ПредыдущиеШириныСтрокой Тогда | |
Если ТаблицаФорматовСтрок.Количество()>0 Тогда | |
ТаблицаФорматовСтрок[ТаблицаФорматовСтрок.Количество() - 1].ПоследняяСтрока = НомерСтроки - 1; | |
КонецЕсли; | |
СтрокаФорматовСтрок = ТаблицаФорматовСтрок.Добавить(); | |
СтрокаФорматовСтрок.ПерваяСтрока = НомерСтроки; | |
СтрокаФорматовСтрок.МассивЗначенийШирины = МассивЗначенийШирины; | |
КонецЕсли; | |
ПредыдущиеШириныСтрокой = ТекущиеШириныСтрокой; | |
КонецЦикла; | |
ТаблицаФорматовСтрок[ТаблицаФорматовСтрок.Количество() - 1].ПоследняяСтрока = НомерСтроки - 1; | |
//Теперь вставляем в Приемник вставляемую ТД кусками. Сразу же устанавливаем ширину колонок | |
Для Каждого СтрокаТаблицыФорматовСтрок Из ТаблицаФорматовСтрок Цикл | |
ПерваяСтрокаОбласти = НачалоНовогоТД + СтрокаТаблицыФорматовСтрок.ПерваяСтрока - 1; | |
ПоследняяСтрокаОбласти = НачалоНовогоТД + СтрокаТаблицыФорматовСтрок.ПоследняяСтрока - 1; | |
КусокВставляемогоТабличногоДокумента = ВставляемыйТабличныйДокумент.ПолучитьОбласть(СтрокаТаблицыФорматовСтрок.ПерваяСтрока,,СтрокаТаблицыФорматовСтрок.ПоследняяСтрока); | |
ОбластьИсточник = КусокВставляемогоТабличногоДокумента.Область(); | |
ОбластьПриемник = ТабличныйДокументПриемник.Область(ПерваяСтрокаОбласти, , ПоследняяСтрокаОбласти, ); | |
ТабличныйДокументПриемник.ВставитьОбласть(ОбластьИсточник, ОбластьПриемник); | |
ОбластьПриемник.СоздатьФорматСтрок(); | |
Для Счетчик = 1 По КусокВставляемогоТабличногоДокумента.ШиринаТаблицы Цикл | |
ТабличныйДокументПриемник.Область(ПерваяСтрокаОбласти, Счетчик, ПоследняяСтрокаОбласти, Счетчик).ШиринаКолонки = СтрокаТаблицыФорматовСтрок.МассивЗначенийШирины[Счетчик - 1]; | |
КонецЦикла; | |
КонецЦикла; | |
ТабличныйДокументПриемник.ВывестиГоризонтальныйРазделительСтраниц(); | |
КонецПроцедуры// ДобавитьТабличныйДокумент | |
Функция ПолучитьЗначениеШириныСтрокой(пМассив, разделитель = ";") | |
рез = ""; | |
для Каждого стр из пМассив Цикл | |
рез = рез + стр + разделитель; | |
КонецЦикла; | |
Возврат рез; | |
КонецФункции |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment