Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Объединение печатных форм с разным количеством колонок

Объединение печатных форм с разным количеством колонок
Я
   yakutyan
 
02.05.19 - 10:37
Привет коллеги, не завидую вам как и себе кто работает в праздники:(

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

Печатные формы для примера:
https://a.radikal.ru/a26/1905/1b/0063e647ae33.png
https://b.radikal.ru/b04/1905/c8/96a045f3cd91.png
 
 
   Смотрящий
 
1 - 02.05.19 - 10:40
(0) Зачем ?
   yakutyan
 
2 - 02.05.19 - 10:42
Руководство решило оптимизировать этот момент, т.к. печатая по отдельности каждую печатную форму, сотрудники затрачивают "слишком" много времени.
   yakutyan
 
3 - 02.05.19 - 10:42
(1) Руководство решило оптимизировать этот момент, т.к. печатая по отдельности каждую печатную форму, сотрудники затрачивают "слишком" много времени.
   mistеr
 
4 - 02.05.19 - 10:45
(0) 1. Открыть макет первой формы.
2. Внизу выделить строки количеством, необходимым для второго макета.
3. Изменить ширину какой-нибудь колонки. Появится сообщение "Для выделенных строк будет создан новый формат строк."
4. В выделенные строки вставить строки из второго макета.
5. Настроить ширину колонок.
   mistеr
 
5 - 02.05.19 - 10:45
(1) Чтобы экономить бумагу, очевидно.
   Смотрящий
 
6 - 02.05.19 - 10:46
(4) Потом они сохранят это в excel и скажут "все гумно, переделывай" ... )))
   Смотрящий
 
7 - 02.05.19 - 10:47
(5) Счет и квитанция на лист влезут если одна две строки в них будут - вон шапки только на поллиста. Так что врядли
Скорее всего юзер Халя, ленится прожать 2 или 3 кнопки
   mistеr
 
8 - 02.05.19 - 10:50
(6) А ты им такой: "Покажите, как должно быть в Экселе, сделаю. Оплата по часам."
   Смотрящий
 
9 - 02.05.19 - 10:50
(0) Сделай красиво ))) - слей руками.
Ширину колонки в 2 единицы и поехал копипастить объединяя ячейки )))
   Смотрящий
 
10 - 02.05.19 - 10:51
(8) Там офисное рабство, а не свободный фриланс ;)
 
 Рекламное место пустует
   yakutyan
 
11 - 02.05.19 - 10:55
(8) (10) ахах, я офисный планктон) я как-то раз объединял несколько печатных форм подгоняя количество колонок, понял что это мартышкин труд, а сейчас нужно объединить 6 печатных форм, страшно браться пока не пойму что нет другого способа)
думал мб кто-то придумал хороший способ объединения без "дрочева" на пару часов)
   Смотрящий
 
12 - 02.05.19 - 10:57
(11) "дрочево" в данном случае затраты твоих предводителей на автоматизацию. Раз офисный - тебе то что, сиди копипасти да объединяй ...
   Смотрящий
 
13 - 02.05.19 - 10:59
6 форм - это ж на целый день ))) а если помощник есть, то как бы и не на два )))))))
   yakutyan
 
14 - 02.05.19 - 11:04
(13) эх) расстроили меня, буду знать что нет другого способа) спасибо)
   mistеr
 
15 - 02.05.19 - 11:06
(14) Попробуй через метод Вывести(), в пустой документ, сначала первую готовую форму, потом вторую.
   Смотрящий
 
16 - 02.05.19 - 11:07
Есть. В (4) указан. Только если они будут это пытаться редактировать после сохранения - все одно к тебе придут
   yakutyan
 
17 - 02.05.19 - 11:24
(4) этот способ не совсем подойдёт т.к. я думал сделать универсально, чтобы в случае изменения одной из печатных форм, в объединение использовалась изменённая печатная форма, т.к. сталкивался с такими проблемами, приходилось в нескольких печатных формах переделывать, попробую каждую печатную подогнать под один формат, а после выводить их по очереди
   famnam
 
18 - 02.05.19 - 12:22
Пакетная печать не поможет
   famnam
 
19 - 02.05.19 - 12:23
(18) это был вопрос ))
   yakutyan
 
20 - 02.05.19 - 12:37
(19) нет, т.к. пакетная печать сформирует табличный документ по каждой печатной форме и им придется печатать каждый, а хотят за одну печать печатать 6 печатных форм)
   mistеr
 
21 - 02.05.19 - 14:36
(20) Попробуй (15)
   savaB
 
22 - 02.05.19 - 15:22
(21) - не взлетит.
выводим первый документ, потом воторой - с новым форматов, и т.д.
   yakutyan
 
23 - 02.05.19 - 16:56
(20) попробовал, различие в количестве колонкок, сижу макеты ковыряю, скучно:(
   Garykom
 
24 - 02.05.19 - 17:00
Есть решение но оно или тебе не понравится или юзерям (которым в экселю сохранять вздумается).
   Garykom
 
25 - 02.05.19 - 17:01
В PDF печатай или банально в картинки, соединить картинки вместе это не менее банально.
   Garykom
 
26 - 02.05.19 - 17:04
Есть иное решение но реализовать не смогешь.
Как раз то что хочется с некоторыми минусами.

Короче никогда не видел форм в мелкую ячейку, где нужные поля набраны объединением?
Вот это можно автоматизировать, совмещение нескольких широкоячеистых макетов в один мелкоячеистый с подгонкой по ширине чтобы внутри ячейки встали как надо.
   Garykom
 
27 - 02.05.19 - 17:06
   АнализДанных
 
28 - 03.05.19 - 09:04
(0) В свое время взял где-то с интернета, ссылки не осталось:

// Добавляет один сформированный табличный документ к другому

//
// Параметры:

//  <ТабличныйДокументПриемник> - табличный документ, в который добавляется Табличный документ
//  <ВставляемыйТабличныйДокумент> - табличный документ, вставляемый в приемник

Процедура ДобавитьТабличныйДокумент(ТабличныйДокументПриемник, ВставляемыйТабличныйДокумент)
    
    Если ВставляемыйТабличныйДокумент = Неопределено Тогда
        Возврат;
    КонецЕсли;
    
    НачалоНовогоТД = ТабличныйДокументПриемник.ВысотаТаблицы + 1;
    
    //Разобъем вствляемый ТД на куски форматов строк


    ТаблицаФорматовСтрок = Новый ТаблицаЗначений;
    ТаблицаФорматовСтрок.Колонки.Добавить("ПерваяСтрока");
    ТаблицаФорматовСтрок.Колонки.Добавить("ПоследняяСтрока");
    ТаблицаФорматовСтрок.Колонки.Добавить("МассивЗначенийШирины");
    
    //Чтобы узнать ширину колонки для каждой ячейки необходимо разъединить все объединенные ячейки


    //А, т.к. вставляемый ТД нам не нужно изменять, создадим копию вставляемого ТД


    ВременныйТабличныйДокумент = ВставляемыйТабличныйДокумент.ПолучитьОбласть();
    ВременныйТабличныйДокумент.Область().Разъединить();
    
    //Готовим таблицу, где будет храниться информация обо всех "группах" форматирования строк


    ПредыдущиеШириныСтрокой = "";
    Для НомерСтроки = 1 по ВременныйТабличныйДокумент.ВысотаТаблицы Цикл
        
        МассивЗначенийШирины = Новый Массив;
        Для НомерКолонки = 1 по ВременныйТабличныйДокумент.ШиринаТаблицы Цикл
            МассивЗначенийШирины.Добавить(ВременныйТабличныйДокумент.Область(НомерСтроки, НомерКолонки).ШиринаКолонки);
        КонецЦикла;
        ТекущиеШириныСтрокой = ПолучитьЗначениеШириныСтрокой(МассивЗначенийШирины, ";");
        
        Если ТекущиеШириныСтрокой<>ПредыдущиеШириныСтрокой Тогда
            
            Если ТаблицаФорматовСтрок.Количество()>0 Тогда
                
                ТаблицаФорматовСтрок[ТаблицаФорматовСтрок.Количество() - 1].ПоследняяСтрока = НомерСтроки - 1;
                
            КонецЕсли;
            
            СтрокаФорматовСтрок = ТаблицаФорматовСтрок.Добавить();
            СтрокаФорматовСтрок.ПерваяСтрока = НомерСтроки;
            СтрокаФорматовСтрок.МассивЗначенийШирины = МассивЗначенийШирины;
            
        КонецЕсли;
        
        ПредыдущиеШириныСтрокой = ТекущиеШириныСтрокой;
        
    КонецЦикла;
    ТаблицаФорматовСтрок[ТаблицаФорматовСтрок.Количество() - 1].ПоследняяСтрока = НомерСтроки - 1;
    
    //Теперь вставляем в Приемник вставляемую ТД кусками. Сразу же устанавливаем ширину колонок


    Для Каждого СтрокаТаблицыФорматовСтрок Из ТаблицаФорматовСтрок Цикл
        
        ПерваяСтрокаОбласти = НачалоНовогоТД + СтрокаТаблицыФорматовСтрок.ПерваяСтрока - 1;
        ПоследняяСтрокаОбласти = НачалоНовогоТД + СтрокаТаблицыФорматовСтрок.ПоследняяСтрока - 1;
        
        КусокВставляемогоТабличногоДокумента = ВставляемыйТабличныйДокумент.ПолучитьОбласть(СтрокаТаблицыФорматовСтрок.ПерваяСтрока,,СтрокаТаблицыФорматовСтрок.ПоследняяСтрока);
        ОбластьИсточник = КусокВставляемогоТабличногоДокумента.Область();
        ОбластьПриемник = ТабличныйДокументПриемник.Область(ПерваяСтрокаОбласти, , ПоследняяСтрокаОбласти, );
        
        ТабличныйДокументПриемник.ВставитьОбласть(ОбластьИсточник, ОбластьПриемник);
        ОбластьПриемник.СоздатьФорматСтрок();
        
        Для Счетчик = 1 По КусокВставляемогоТабличногоДокумента.ШиринаТаблицы Цикл
            ТабличныйДокументПриемник.Область(ПерваяСтрокаОбласти, Счетчик, ПоследняяСтрокаОбласти, Счетчик).ШиринаКолонки = СтрокаТаблицыФорматовСтрок.МассивЗначенийШирины[Счетчик - 1];
        КонецЦикла;
        
    КонецЦикла;
    
    ТабличныйДокументПриемник.ВывестиГоризонтальныйРазделительСтраниц();
    
КонецПроцедуры// ДобавитьТабличныйДокумент


Функция ПолучитьЗначениеШириныСтрокой(пМассив, разделитель = ";")
    рез = "";
    для Каждого стр из пМассив  Цикл 
        рез = рез + стр + разделитель;
    КонецЦикла;
    Возврат рез;    
КонецФункции
   yakutyan
 
29 - 03.05.19 - 09:10
(25) встречал такие макеты, но не понял для чего использовали короткие по ширине колонки в большом количестве
   yakutyan
 
30 - 03.05.19 - 09:10
(28) спасибо! сейчас попробую:)
   yakutyan
 
31 - 03.05.19 - 15:19
(28) получилось, спасибо!:)


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует