Нужно присоединение справа табличного документа

1. fixin 4276 06.11.24 14:53 Сейчас в теме
По сути каждый макет формируется в СКД, получается у каждого свой формат.
1С плохо подклеивает справа такие макеты.
Получается так как показал на картинке.
Нужно подклеить нормально.
Прикрепляю также тестовую обработку.
Прикрепленные файлы:
ТестПрисоединенияМакетов.epf
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
33. Vlan 36 13.11.24 14:03 Сейчас в теме
(1) Остался невыясненным только один вопрос: я получу свои СМ? Они мне нужны. Как говорил Шарапов, "они мне душу согреют, когда под ментовские пули пойду".
user1863362; Sashares; +2 Ответить
34. Sashares 35 13.11.24 14:06 Сейчас в теме
2. user-z99999 71 06.11.24 16:57 Сейчас в теме
А что нужно сделать? нужны исходные данные и как нужно.
3. fixin 4276 06.11.24 19:14 Сейчас в теме
(2) в приложенной обработке демо-пример. Нужно сделать, чтобы корректно присоединялось.
Ну, естестенно, не только на этих демо-примерах, а в целом. Но тестировать можно на них.
4. user-z99999 71 07.11.24 10:26 Сейчас в теме
(3) Мне этот демо пример не понятен.
Где исходные данные?
5. fixin 4276 07.11.24 10:44 Сейчас в теме
(4) в обработке три макета. Код обработки к макету 1 присоединяет макеты 2 и 3 справа. 1С делает это криво.
6. Vlan 36 07.11.24 12:39 Сейчас в теме
Не понимаю эту технологию до конца, но вот в таком виде макеты сливаются в один нормально.
Процедура ВывестиНаСервере()
	Результат.Очистить();
	ОО = РеквизитФормыВЗначение("Объект");
	М1 = ОО.ПолучитьМакет("М1");
	М2 = ОО.ПолучитьМакет("М2");
	М3 = ОО.ПолучитьМакет("М3");
	Результат.Присоединить(Новый ТабличныйДокумент);
	Результат.Присоединить(М1);
	Результат.Присоединить(М2);
	Результат.Присоединить(М3);
КонецПроцедуры
Показать


Без пустышки в начале таблицы все расползается.
Sashares; +1 Ответить
7. Sashares 35 07.11.24 13:07 Сейчас в теме
8. fixin 4276 07.11.24 13:16 Сейчас в теме
(6) интересное кино, попробую, проверю
9. fixin 4276 07.11.24 14:35 Сейчас в теме
(6) Более-менее работает. Но вставляет первую колонку, если она широкая не смотрится.
Как бы ее убрать?
И да, чтобы сохранялась ширина, нужно создавать свой формат строк, причем даже в таблицу М0, если у нее не будет формата строк, то ширина ее колонок изменится. Но это думаю, излечимо.

Вот код:
&НаСервере
Процедура ВывестиНаСервере()
	Результат.Очистить();  

	ОО = РеквизитФормыВЗначение("Объект");
	М = ОО.ПолучитьМакет("М0");
	Результат.Вывести(М); 
	Т = Новый ТабличныйДокумент();
	Результат.Вывести(Т);
	Результат.Присоединить(Т);
	М = ОО.ПолучитьМакет("М1");
	Результат.Присоединить(М);
	М = ОО.ПолучитьМакет("М2");
	Результат.Присоединить(М);
	М = ОО.ПолучитьМакет("М3");
	Результат.Присоединить(М);
КонецПроцедуры
Показать


Добавил макет М0.

Результат на картинке.
Прикрепленные файлы:
ТестПрисоединенияМакетов.epf
10. Vlan 36 07.11.24 14:51 Сейчас в теме
(9) Первую колонку можно убрать элементарно, если знать размеры области. Для вашего примера:

	Область = Результат.Область("R4C1:R8C1");
	Результат.УдалитьОбласть(Область,ТипСмещенияТабличногоДокумента.ПоГоризонтали);
11. fixin 4276 07.11.24 14:54 Сейчас в теме
(10) Да, действительно. Хорошо, сейчас потестирую на продакте, отпишусь.

&НаСервере
Процедура ВывестиНаСервере()
	Результат.Очистить();  

	ОО = РеквизитФормыВЗначение("Объект");
	М = ОО.ПолучитьМакет("М0");
	Результат.Вывести(М); 
	НачалоПодвала = Результат.ВысотаТаблицы + 1;
	Т = Новый ТабличныйДокумент();
	Результат.Вывести(Т);
	Результат.Присоединить(Т);
	М = ОО.ПолучитьМакет("М1");
	Результат.Присоединить(М);
	М = ОО.ПолучитьМакет("М2");
	Результат.Присоединить(М);
	М = ОО.ПолучитьМакет("М3");
	Результат.Присоединить(М);
	КонецПодвала = Результат.ВысотаТаблицы;
	
	Область = Результат.Область(НачалоПодвала,1, КонецПодвала, 1);
	Результат.УдалитьОбласть(Область,ТипСмещенияТабличногоДокумента.ПоГоризонтали); 
КонецПроцедуры

Показать
Прикрепленные файлы:
12. fixin 4276 07.11.24 15:49 Сейчас в теме
Что-то не вытанцовывается на продакте.
Есть два отчета Оплаты и Расходы, выдаются СКД, формат строк у них есть.
Но при выводе почему-то теряется...
Ширина колонок разъезжается.

И между Оплаты и Расходы большой промежуток появляется. Примеры макетов выложил в обработке.

&НаСервере
Процедура ВывестиНаСервере()
	Результат.Очистить();  

	ОО = РеквизитФормыВЗначение("Объект");
	М = ОО.ПолучитьМакет("М0");
	Результат.Вывести(М); 
	НачалоПодвала = Результат.ВысотаТаблицы + 1;
	Т = Новый ТабличныйДокумент();
	Результат.Вывести(Т);
	Результат.Присоединить(Т);
	М = ОО.ПолучитьМакет("М1");
	Результат.Присоединить(М);
	М = ОО.ПолучитьМакет("М2");
	Результат.Присоединить(М);
	М = ОО.ПолучитьМакет("М3");
	Результат.Присоединить(М);
	КонецПодвала = Результат.ВысотаТаблицы;

	Результат.Вывести(Т);
	Результат.Присоединить(Т);
	М = ОО.ПолучитьМакет("СКД1");
	Результат.Присоединить(М);
	М = ОО.ПолучитьМакет("СКД2");
	Результат.Присоединить(М);
	
	Область = Результат.Область(НачалоПодвала,1, КонецПодвала, 1);
	Результат.УдалитьОбласть(Область,ТипСмещенияТабличногоДокумента.ПоГоризонтали); 
КонецПроцедуры

Показать


Я на практике подкорректировал ширину кодом:

	ДокументРезультат.Область(НачалоПодвала + 4, 2).ШиринаКолонки = 20;
	ДокументРезультат.Область(НачалоПодвала + 4, 3).ШиринаКолонки = 15;
	ДокументРезультат.Область(НачалоПодвала + 4, 6).ШиринаКолонки = 20;
	ДокументРезультат.Область(НачалоПодвала + 4, 7).ШиринаКолонки = 15;



Но хотелось бы без этих бубнов.
Прикрепленные файлы:
ТестПрисоединенияМакетов.epf
13. Vlan 36 08.11.24 07:12 Сейчас в теме
(12) Ну, компромиссы будут неизбежно. Если выводить все друг под дружкой, бубны не потребуются
Прикрепленные файлы:
18. fixin 4276 08.11.24 11:36 Сейчас в теме
(13) если бы клиента устроило выводить друг под дружкой, не было бы этой ветки.
Наша задача - не сдаться на милость природы 1С, а взять от нее то, что нам нужно.
Сдаваться на компромисс не годится, ведь вручную кодом я могу скорректировать ширину колонок, значит, это можно сделать и универсально.
14. Anton_new01 08.11.24 09:06 Сейчас в теме
(12)
"Ширина колонок разъезжается..."

блоки формируются естественным образом.
Но ширина колонок она сквозная для всего документа. и если мы вставляем блок в уже существующий, то ширина берется из того который существуюет, а не та которая в прикрепляемом блоке.

ИМХА это очевидно.

И если мы хотим чтобы ширина была нужная - то надо эту ширину задать у исходного блока к которому мы клеим свою часть.
15. user2104808 08.11.24 10:47 Сейчас в теме
(14)
надо эту ширину задать
Этот подход, кстати, прямо демонстируется в СП в описании метода СоздатьФорматСтрок. Но когнитивные способности гениев...
17. fixin 4276 08.11.24 11:34 Сейчас в теме
(15) У вас удобный случай продемонстрировать свои когнитивные способности, написав работающий универсальный код по присоединению. Пока просто болтаете.
19. user2104808 08.11.24 12:01 Сейчас в теме
(17)
универсальный код по присоединению
Нет такого. В силу того, что механика табличного документа позволяет создать формат строк, но не формат столбцов. Присоединение справа макета с другими высотами строки технически невозможно. Поэтому любое решение будет учитывать конкретный случай.

Странно, что гений этого не понимает.
Впрочем нет. Не странно.
20. fixin 4276 08.11.24 12:02 Сейчас в теме
(19) мы про ширину строк, а не ее высоту. Следите за контекстом обсуждения.
22. user2104808 08.11.24 12:06 Сейчас в теме
(20)
Следите за контентом.
Контекстом, геня, контекстом.

Тебе говорят, что общее универсальное решение невозможно.
Это то, к чему ты аппелировал в (17), если ты не понял.
23. fixin 4276 08.11.24 12:14 Сейчас в теме
(22) я за универсальное решение по ширине колонок, а не за мир во всем мире и т.п. абстракным вещам.
32. user2104808 08.11.24 19:14 Сейчас в теме
(23)
я за универсальное решение по ширине колонок
универсальность бывает разной степени визуализации и интерактивности.
16. fixin 4276 08.11.24 11:33 Сейчас в теме
(14) если вы скачаете обработку, то увидите, что у макетов СКД1 и СКД2, созданных через СКД, для строк указан свой формат ширины. Логично ожидать, что свой формат будет поддерживаться и при присоединении.
Но этого не происходит.
Следовательно, для корректного присоединения нужно как-то дорабатывать ширину колонок. Поэтому я и дал поупражняться читателям, которым эта задача интересна.
21. Anton_new01 08.11.24 12:05 Сейчас в теме
(16) не логично.
и совсем не понятно, чего вы ожидаете получить.

код обработки - написан тоже без явной логики. что допустимо для тестовой задачи.

у вас макеты такие... смысл которых ускользает от не посвященного пользователя.

могу предположить, что вы хотите сохранить некую "красивость" исходных форматов и этих форматов вместе.
но исходные форматы у вас максимально кривые... после объединения и/или присоединения эта кривость усогубляется.

общая логика объединения/ присоеденения доступна для любителей игры в тетрис.
ширина колонок и высота строк - сквозная для всего документа.
24. fixin 4276 08.11.24 12:16 Сейчас в теме
(21) на этот вопрос могу дать простой ответ.
Есть макет СКД1 и СКД2.
Я хочу чтобы макет СКД2 присоединился справа с сохранением ширины колонок СКД1 и СКД2.
Сейчас ширина колонок нарушается, хотя у строк СКД1 и СКД2 создан свой формат строк (это создает СКД).
Думаю, предельно ясно изложил свое пожелание?
26. user2104808 08.11.24 12:33 Сейчас в теме
(16)
я и дал поупражняться читателям,
В это тяжелое для страны время?
29. Anton_new01 08.11.24 14:03 Сейчас в теме
(1)
держи макет.

посмотри как работать с макетами, как с областями.
и как это все группировать в нужные конструкции.

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

PS. обычно шаблон формируют целиковый и уже правят только параметры, но можно и так поиграться.
Прикрепленные файлы:
ТестПрисоединенияМакетов_01.epf
30. Sashares 35 08.11.24 18:33 Сейчас в теме
(12)
И между Оплаты и Расходы большой промежуток появляется.

Промежуток появляется из-за того, что в макетах СКД в обработке есть формат строк для 12 колонок.
Можно удалить пустые колонки макета перед выводом.
Прикрепленные файлы:
ТестПрисоединенияМакетов.epf
25. fixin 4276 08.11.24 12:27 Сейчас в теме
Кстати, запишу еще одну мысль для общности.
Отдельные макеты можно сконвертировать в картинку (сохранить в PDF, далее командной строкой в JPEG) и идеально вставить рядом друг с другом.
Это, кстати, универсальное решение. Даже с разной высотой строк. Но не для моей конкретной задачи.
Там достаточно доработать ширину строк.
27. user2104808 08.11.24 12:34 Сейчас в теме
(25)
Это, кстати, универсальное решение
Ага. Причем с рабочей расшифровкой.
28. fixin 4276 08.11.24 12:50 Сейчас в теме
(27) универсальность бывает разной степени визуализации и интерактивности.
Кстати, по поводу высоты строк можно делать для одной широкой строки несколько узкой, как 1С подгоняет при выгрузке в Excel, было бы желание. Но в болшинстве задач такое не нужно.
31. user2104808 08.11.24 19:14 Сейчас в теме
(28)
универсальность бывает разной степени визуализации и интерактивности.
О. Спасибо за формулировку.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот