Имя: Пароль:
1C
1C 7.7
v7: Пакетная печать
, ,
0 SergeyGr
 
12.11.14
15:25
Нужно создать внешнюю печатную форму, которая "выполнит" несколько других ВНЕШНИХ печатных форм.

Подскажите, как это можно сделать ?

Спасибо
1 vicof
 
12.11.14
15:25
циклом
2 SergeyGr
 
12.11.14
15:27
Некорректно описал задание - как из внешней печатной формы  вызвать на исполнение другие внешние печатные формы ?
3 vicof
 
12.11.14
15:28
ПечатьПоДополнительнойКнопке в любом типовом документе на ОФ. А потом отладчик и по ф11 проваливайся и смотри.
4 Dmitrith
 
12.11.14
15:28
Через ОткрытьФорму
5 SergeyGr
 
12.11.14
15:30
А нет ли среди типовых внешних печ.форм чего-то подобного ?
6 Dmitrith
 
12.11.14
15:30
Для пакетной печати документов по нормальному надо внести изменения в процедуры каждого вида документа. и тогда в цикле можно печатать хоть внешние хоть внутренние печатные формы. если это интересно могу код показать
7 Duke1C
 
12.11.14
15:30
(0) Все уже украдено до вас... поищи в инете. На ИСе было несколько вариантов обработок групповой печати печатных форм документов.
8 SergeyGr
 
12.11.14
15:32
(6) Очень интересно !

(0) Что такое ИС ?   :-(
9 Chameleon1980
 
12.11.14
15:33
ОткрытьФорму
один из параметров это собсно или док или сз с параметрами в котором в том числе и док.
10 Dmitrith
 
12.11.14
15:36
В приОткрытии() документов глянуть если этот код если нет добавить (не помню он стандартный или нет)

Парам = Форма.Параметр;

        Если Парам.Получить("Команда") = "ПечатьНаПринтер" Тогда
            КолЭкз = Макс(Число(Парам.Получить("КолЭкз")),1);
            НомерФормы = Макс(Число(Парам.Получить("НомерФормы")),1);
            ПоКнопкеПечать(1,КолЭкз,НомерФормы);
            СтатусВозврата(0);Возврат;
        ИначеЕсли Парам.Получить("Команда") = "ПечатьНаЭкран" Тогда
            КолЭкз = Макс(Число(Парам.Получить("КолЭкз")),1);
            НомерФормы = Макс(Число(Парам.Получить("НомерФормы")),1);
            ПоКнопкеПечать(0,1,НомерФормы);
            СтатусВозврата(0);Возврат;
        Иначе
            Сообщить("В форму документа "+Вид()+" передана неверная команда "+Парам.Получить("Команда")+"!","I");
            СтатусВозврата(0);Возврат;
        КонецЕсли;

И собственно сама печать:

Процедура РаспечататьДок(Д, ВидПечати, КолЭкз, НомерФормы)

    Спис = СоздатьОбъект("СписокЗначений");
    Спис.Установить("Команда",ВидПечати);
    Спис.Установить("КолЭкз",КолЭкз);
    Спис.Установить("НомерФормы",НомерФормы);

    ОткрытьФорму(Д,Спис,1);
    lib.wait(6);
КонецПроцедуры


Процедура ПакетнаяПечать()
    Команда = "ПечатьНаПринтер";
    //Команда = "ПечатьНаЭкран";
    ТЗ = СоздатьОбъект("ТаблицаЗначений");
    ВыгрузитьТабличнуюЧасть(ТЗ,"Док");
    ТЗ.ВыбратьСтроки();
    Пока ТЗ.ПолучитьСтроку()=1 Цикл
        Сообщить(""+ТЗ.НомерСтроки+"/"+ТЗ.КоличествоСтрок());
        ВидДок = ТЗ.Док.Вид();
        Если ВидДок = "Реализация" Тогда
        РаспечататьДок(ТЗ.Док,Команда,1,11);        // Накладная с 1 ШК
                Иначе
                    РаспечататьДок(ТЗ.Док,Команда,1,8);        // Накладная с 1 ШК
                КонецЕсли;
                РаспечататьДок(ТЗ.Док,Команда,1,1);     // Торг-12
                РаспечататьДок(ТЗ.Док,Команда,1,6);        // Реестр сертификатов
11 SergeyGr
 
12.11.14
15:37
Спасибо !!


Буду пробовать !
12 Dmitrith
 
12.11.14
15:45
(11) забывать уже начал что к чему. В ПриОткрытии() у тебя уже все это будет, но в каждую печатную форму в процедуру печати я вносил такие изменения (сравни с тем что у тебя. Это ТОРГ-12 из Реализации

    Если СразуНаПринтер = 0 Тогда
        ПечТабл.Опции(0, 0, 0, 0, "ДляРеализации", "ДляРеализации");

        Если глПолучитьПолномочие("РазрешитьРедактированиеТаблиц") = 0 Тогда
            ПечТабл.Защита(1);
        Иначе
            ПечТабл.Защита(0);
        КонецЕсли;
        ПечТабл.ТолькоПросмотр(1);

        ПечТабл.Показать(глНазваниеДокументаВжурнале(Контекст),"");  
    Иначе    
        ПечТабл.ПараметрыСтраницы(2,,1,,,,,,,1,,глНайтиПринтерАвтопечати()+"2");
        //ПечТабл.ПараметрыСтраницы(2,,1,,,,,,,1,,глНайтиПринтерАвтопечати()+"3");
        ПечТабл.КоличествоЭкземпляров(КолЭкз);
        ПечТабл.Напечатать(0);
    КонецЕсли;


глНайтиПринтерАвтопечати() - возвращало название принтера. В параметрах страницы четко прописано "Портрет" или "Ландшафт".
И тут же мы очень изящно вышли из положения варианта печати - односторонняя или двухстронняя. Предположим есть принтер "HP_TZ" функция возвращает его имя он настроен на одностороннюю печать. На компьютере (подразумевается что в терминале) создаем тот же принтер в устройствах, обзываем его "HP_TZ1" - и настраиваем его в лоб на печать с двух строн переплет сверху ну и "HP_TZ2" - переплет сбоку.
13 Ёпрст
 
12.11.14
15:48
14 Злопчинский
 
12.11.14
15:49
(12) все равно (__о__)
где-то в системе надо заводить таблицу соответствия принтеров форматам печати и размеров бумаги.
.
Если этого не делать, а базироваться на "вычиляемых" значения что к чему исходя из наименований принтеров - то это должно быть достаточно жестко задокументировано, ибо придет мальчик-пипидастр тебе на смену (или вызовут срочно поправить когда ты в отпуске) - и будет (_____О_____)
15 Dmitrith
 
12.11.14
15:51
(14) печатные формы на предприятии как правило жестко заданы. Поэтому и написано было все жестко в код - дабы очередной сменившийся оператор по одной кнопке не фиганул на принтер штук 200 листиков с неправильной разметкой
16 Злопчинский
 
12.11.14
15:51
Рекомендую (13).
В отличие от кучи пипидастров - штуки от Епрста отличаются работоспособностью и соответствия ожиданиям (по крайней мере моим)
17 Злопчинский
 
12.11.14
15:53
(15) угу, только если принтер гавкнулся (хорошо если есть такой же в ЗИП - мы у себя стараемся держать по компам 10% зипа, по принтерам - 1 запасной) - купить такой же практически нереально будет, ибо вымирают на рынке быстро.
.
на данный момент считаю самым зашибительским HP LJ1300 до сих пор у меня в техотделе стоит как основной мой рабочий принтер
18 Dmitrith
 
12.11.14
15:55
(17) в торговом зале три принтера стоят. все три настроены на автопечать. 4 оператора. У каждой в параметрах пользователя имя принтера на ктороый они печатают. Т.е. одновременно могут печатать три рейса. Если один из принтеров гавкается то печатают одновременно двое
19 Dmitrith
 
12.11.14
15:55
(17) 2 принтера HP 9040 и один 4350
20 Злопчинский
 
12.11.14
16:52
(18) я у себя вскорости буду делать автоопределение принтеров и (авто)привязку к пользователю при старте системы. Впоследствии с фиксацией также размеров бумаги/режимов печати
21 spectre1978
 
12.11.14
23:01
(17) Хороший принтер и по расходникам недорог, но на данный момент медленноват и дуплекса нет. Более респектую 1320.
22 Зеленый Кот
 
12.11.14
23:23
xerox 3220 рулит!
23 Злопчинский
 
13.11.14
00:02
(21) ну дык он как рабочий - я на него печатаю редко. стараюсь безбумажные технологии внедрять ;-)
24 VladZ
 
13.11.14
06:17
Для тех, кто забыл 7.7. или никогда ее не знал: выполняю работы в 7.7 любой сложности. Контакты в личке.