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

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

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

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

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

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

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

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

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