Имя: Пароль:
1C
1С v8
Печать из внешней обработки
,
0 Масянька
 
22.08.22
14:15
День добрый!
Есть внешняя обработка (заполняется список сотрудников). Нужно прицепить печать (word).
Печать в МО (для ВПФ). Как соединить?
Дайте пример, пожалуйста.
Спасибо.
1 Dmitry77
 
22.08.22
14:18
Прям из внешней обработки? Нестандартные требования. Можно посмотреть как печатается из формы списка сотрудников или из физлиц.
2 Kassern
 
22.08.22
14:21
МО это что? Министерство обороны, модальные окна, Московская область?
Распишите как должно это выглядеть. Кто куда должен жмякнуть и что должно выйти.
3 Масянька
 
22.08.22
14:22
(1) Как вообще прицепить печать?
У меня в ВПФ все реализовано. Но там вся печать прописана в модуле объекта. А тут нужно в форме (по идее).
4 Масянька
 
22.08.22
14:22
(2) Модуль объекта
5 СеменовСемен
 
22.08.22
14:23
На ис посмотри отладчики печати
6 Kassern
 
22.08.22
14:26
(4) Можно попробовать через вид ЗаполнениеОбъекта обыграть, только кнопка будет не в меню печати. Жмякаете и выполняется команда на клиенте, а там можно все что вам нужно.
7 Масянька
 
22.08.22
14:26
(5) Дай ссылку, плиз.
8 Масянька
 
22.08.22
14:26
(6) А пример можно?
9 Kassern
 
22.08.22
14:30
(8) Да там просто, так же по шаблону создается ВПФ и в СведенияОВнешнейОбработке указывается  
ПараметрыРегистрации.Вставить("Вид", "ЗаполнениеОбъекта");
А в таблице команд указать ВызовКлиентскогоМетода.
далее создается форма, где указывается процедура
&НаКлиенте
Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначенияМассив) Экспорт
    
    //Тут уже можете обрабатывать как вам надо
    
КонецПроцедуры
10 Kassern
 
22.08.22
14:30
в параметре ОбъектыНазначенияМассив - будет массив объектов
11 СеменовСемен
 
22.08.22
14:55

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

&НаКлиенте
Процедура Печать(Команда)
    
    //Этим способом все формы в одном табличном документе как в стандартном механизме печати,
    //При необходимости можно сделать чтобы было в разных
    КоллекцияПечатныхФормМассив = ПечатьНаСервере();
    УправлениеПечатьюКлиент.ПечатьДокументов(КоллекцияПечатныхФормМассив);

КонецПроцедуры
12 СеменовСемен
 
22.08.22
14:55
вместо ОбработкаОбъект.Печать пишешь свою печать или из документа берешь
13 6awkup_true
 
22.08.22
15:02
а что если не мучаться и использовать
ДобавитьКоманду(ТаблицаКоманд, Синоним, "СформироватьОтчет" , "ОткрытиеФормы", Истина, );

а в форме формировать как угодно
14 СеменовСемен
 
22.08.22
15:03
или нужно просто внешнюю печ форму?
15 Kassern
 
22.08.22
15:05
(14) я поэтому и просил ТС расписать, как надо в (2), чтобы мы тут не гадали.
16 Масянька
 
22.08.22
15:12
Это не ВПФ, а обработка!
Не привязана к объекту конфы.
17 Kassern
 
22.08.22
15:16
(16) Я правильно понимаете, вы хотите во внешней обработке прикрутить кнопку печать, которая у вас реализована во ВПФ?
18 СеменовСемен
 
22.08.22
15:21

&НаКлиенте
Процедура Расш3_КомандаПробитьЧекПосле(Команда)
    
    ВПФ = НайтиВПФ();
    Если ВПФ.Пустая() Тогда
        Возврат;
    КонецЕсли;
    ОбъектыНазначения = Новый Массив;
    ОбъектыНазначения.Добавить(ЭтотОбъект.Документ);
    ПараметрыОткрытия = Новый Структура("ИсточникДанных, ПараметрыИсточника");
    ПараметрыОткрытия.ИсточникДанных = ВПФ;
    ПараметрыОткрытия.ПараметрыИсточника = Новый Структура("ИдентификаторКоманды, ОбъектыНазначения");
    ПараметрыОткрытия.ПараметрыИсточника.ИдентификаторКоманды = "ДокументНаСклад";
    ПараметрыОткрытия.ПараметрыИсточника.ОбъектыНазначения = ОбъектыНазначения;
    ОткрытьФорму("ОбщаяФорма.ПечатьДокументов", ПараметрыОткрытия);    
    
КонецПроцедуры

        
&НаСервере
Функция НайтиВПФ()

   Возврат Справочники.ДополнительныеОтчетыИОбработки.НайтиПоНаименованию("Документ на склад");
    
КонецФункции
19 Масянька
 
22.08.22
15:21
(17) Нет.
Я хочу во внешней обработке (ни к чему не привязана) сделать печать (макет word).
Просто у меня есть аналогичная печать в ВПФ (похожая).
20 Kassern
 
22.08.22
15:22
(19) Так в чем проблема, перенести логику печати из ВПФ в вашу внешнюю обработку?
21 Масянька
 
22.08.22
15:24
(20) И я так думала.
Кнопка на форме (обработка), а печать в модуле объекта (ВПФ).
Как воткнуть кнопку на форму, а действие прописать в модуле объекта? Не получается...
22 СеменовСемен
 
22.08.22
15:25
(21) в (11) же все написано
23 Kassern
 
22.08.22
15:26
(21) А зачем вам прописывать в модуле объекта?
Вот один из примеров реализации печати из макета ворд

Макет    = ПолучитьИзВременногоХранилища(Адрес); //получить макет из временного хранилища
        Макет.Записать(ИмяВременногоФайла); //создать документ на основе макета в TEMP клиента
        Word = Новый COMОбъект("Word.Application");  ///создаем COMОбъект
        Документ = Word.Documents.Open(ИмяВременногоФайла);  //подключаем макет к созданному COMОбъект
        
        
        ДокументЗаполнения = Документ.Application.Documents(1);
        
        //////////////// Заполняем данными
        
        Word.Application.Visible = Истина;//установить видимость документа
        Word.Activate();//открыть документ пользователю
24 СеменовСемен
 
22.08.22
15:27
(23) можно будет как внешнюю использовать и просто так
25 СеменовСемен
 
22.08.22
15:29
(23) ну и через ворд уже так никто не печатает
26 6awkup_true
 
22.08.22
15:32
(25) заблуждаетесь. вполне часто используемый механизм. когда состав параметров в макете не меняется, а вот макет сам - постоянно, то это очень жизнеспособный вариант чтобы не править печ форму каждый раз. а так лежит себе файлик на сервере, его правит мари ванна и не дергает тебя. красота же?
27 СеменовСемен
 
22.08.22
15:33
(26) а в чем проблема также с бспшным макетом сделать?
28 6awkup_true
 
22.08.22
15:35
(27) сидит себе юрист и согласовывает вид и состав договоров печатных. доступ в 1с для него не нужен. зачем предоставлять такому сотруднику лицензию? только ради правки макета? так даже при наличии доступа крайне вероятно, что дергать для его правки так же будут вас
29 Масянька
 
22.08.22
15:37
Ошибка:
Метод объекта не обнаружен (Найти)
{ОбщийМодуль.УправлениеПечатью.Модуль(89)}:Возврат КоллекцияПечатныхФорм.Найти(ВРег(Идентификатор), "ИмяВРЕГ");

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

&НаКлиенте
Процедура Печать(Команда)
    
       // Ошибки - проверка, норм проходит
    
    Если (Ошибка1 = 1) И (Ошибка2 = 1) И (Ошибка3 = 1) И (Ошибка4 = 1) И (Ошибка5 = 1) И (Ошибка6 = 1) Тогда
        КоллекцияПечатныхФормМассив = ПечатьНаСервере();
        УправлениеПечатьюКлиент.ПечатьДокументов(КоллекцияПечатныхФормМассив);
    КонецЕсли;
    
КонецПроцедуры
В модуле объекта:
Процедура ВывестиДанныеДокументаВТабличныйДокумент(КоллекцияПечатныхФорм, ОбъектыПечати) Экспорт

    МодульСклонениеПредставленийОбъектов = ОбщегоНазначения.ОбщийМодуль("СклонениеПредставленийОбъектов");
    
    ДвоичныеДанныеМакета = ПолучитьМакет("ПФ_DOC_Извещение");
    
    // общие параметры
    
    Если ДвоичныеДанныеМакета <> Неопределено Тогда
        
        ПечатнаяФорма = УправлениеПечатью.СведенияОПечатнойФорме(КоллекцияПечатныхФорм, "Извещение");
        
        ПечатнаяФорма.ТабличныйДокумент = Новый ТабличныйДокумент;
        
        Макет = УправлениеПечатью.ИнициализироватьМакетОфисногоДокумента(ДвоичныеДанныеМакета, Неопределено);
        ПечатнаяФормаДокумента = УправлениеПечатью.ИнициализироватьПечатнуюФорму(Неопределено, Макет.НастройкиСтраницыМакета, Макет);        
        
        ОбластьВерхнийКолонтитул = Новый Структура;
        ОбластьВерхнийКолонтитул.Вставить("ИмяОбласти", "ВерхнийКолонтитул");
        ОбластьВерхнийКолонтитул.Вставить("ТипОбласти", "ВерхнийКолонтитул");
        
        ОбластьЗаголовок = Новый Структура;
        ОбластьЗаголовок.Вставить("ИмяОбласти", "Заголовок");
        ОбластьЗаголовок.Вставить("ТипОбласти", "Общая");
        
        ОбластьТекст = Новый Структура;
        ОбластьТекст.Вставить("ИмяОбласти", "Извещение");
        ОбластьТекст.Вставить("ТипОбласти", "Общая");
        
        ОбластьПодвал = Новый Структура;
        ОбластьПодвал.Вставить("ИмяОбласти", "Подвал");
        ОбластьПодвал.Вставить("ТипОбласти", "Общая");
        
        ОбластьШапкаТаблицы = Новый Структура;
        ОбластьШапкаТаблицы.Вставить("ИмяОбласти", "ПереводСтраницы");
        ОбластьШапкаТаблицы.Вставить("ТипОбласти", "Общая");
        

        АдресХранилищаОфисныйДокумент = УправлениеПечатью.СформироватьДокумент(ПечатнаяФормаДокумента);

        УправлениеПечатью.ОчиститьСсылки(ПечатнаяФормаДокумента, Ложь);
        УправлениеПечатью.ОчиститьСсылки(Макет);
        
        ОфисныеДокументы = Новый Соответствие;
        
        ИмяДокумента = "Извещение";
        ОфисныеДокументы.Вставить(АдресХранилищаОфисныйДокумент, ИмяДокумента);
        
        ПечатнаяФорма.СинонимМакета    = ИмяДокумента;
        ПечатнаяФорма.ОфисныеДокументы = ОфисныеДокументы;
      КонецЕсли;
    
КонецПроцедуры
30 Масянька
 
22.08.22
15:38
(28) Везде же пишут - "знание и использование БСП".
А вообще, я за то, что легче и проще.
Для ВПФ (ЗУП) мне понравилась БСП (в части работы с word).
31 СеменовСемен
 
22.08.22
15:45
что-то в новых версиях БСП захимичили
32 6awkup_true
 
22.08.22
15:46
(30) повторюсь. сотрудник отвечающий за внешний вид НЕ работает в 1С, макет может меняться раз в день. ваше время стоит дорого, за правку макета вы берете 1 час минимум, а клиент нищий как церковная мышь. и тут уже не важно, знаете ли вы БСП или нет. лично мне не по душе путь: мне лень потратить чуть больше времени, поэтому докажу клиенту, что купить лицензию, проапгрейдить с базовой до проф, обучить сотрудника и посадить их на вашу поддержку будет выгоднее. зато пф за час, да
33 СеменовСемен
 
22.08.22
15:48
(32) почему нельзя из каталога то брать? различие только в виде макета
34 АгентБезопасной Нацио
 
22.08.22
16:07
Макеты вообще можно разбирать и заполнять без ворда. dotx - это же зип с xml внутри... Хотя там есть свои тараканы, но разархивировать-заполнять-архивировать - вполне можно НаСервере без установленного там офиса, по регламенту...
35 Масянька
 
22.08.22
16:38
Ошибка тут:     Возврат КоллекцияПечатныхФорм.Найти(ВРег(Идентификатор), "ИмяВРЕГ");
Почему?
36 Масянька
 
22.08.22
16:39
+ (35) Метод объекта не обнаружен (Найти)
37 Масянька
 
22.08.22
16:42
+ (35) Если что - макет называется ПФ_DOC_Извещение
38 MaQo
 
22.08.22
16:44
(37) вычисли выражение КоллекцияПечатныхФорм - что это?
39 Масянька
 
22.08.22
16:46
(38) КоллекцияПечатныхФорм, ДанныеФормыКоллекция (в элементах - список сотрудников с данными).
40 MaQo
 
22.08.22
16:48
(39) используй НайтиСтроки
P.s: узнал из синтаксис-помощника
41 MaQo
 
22.08.22
16:50
(39)Нет, НайтиПоИдентификатору
42 Масянька
 
22.08.22
16:53
(40) (41) Это функция БСП - СведенияОПечатнойФорме(КоллекцияПечатныхФорм, Идентификатор)
43 oslokot
 
22.08.22
17:14
(39) Тип "КоллекцияПечатныхФорм" должен быть "ТаблицаЗначений", Ваш КЭП
44 oslokot
 
22.08.22
17:15
Масянька - генератор квантовой запутанности. хрен разберешься
45 Масянька
 
22.08.22
17:19
(43) Это и так было ясно.
(44) Распутай - как получить КоллекцияПечатныхФорм?
46 Масянька
 
22.08.22
17:21
(44) И это не я генератор... То что в семерке, 8.1, 8.2 делалось, как два пальца об асфальт...
47 СеменовСемен
 
22.08.22
17:21
вложи стектрейс
48 Масянька
 
22.08.22
17:25
(47) Каким образом?
49 СеменовСемен
 
22.08.22
17:27
в отладчике - структура вызовов
50 Масянька
 
22.08.22
17:29
(49) У меня внешние (обработки, отчеты, формы) не отлаживаются.
51 СеменовСемен
 
22.08.22
17:30
(50) делай через открыть - файл
52 СеменовСемен
 
22.08.22
17:31
хотя в жр должно быть
53 Масянька
 
23.08.22
08:09
(52) В ЖР только ошибка.
(51) Как?
54 СеменовСемен
 
23.08.22
09:57
(53) в жр пишется полный текст ошибки со списком всех процедур. если конечно больше 8.3.15
55 Масянька
 
23.08.22
10:00
(54) Значение не является значением объектного типа (Найти)
{ОбщийМодуль.УправлениеПечатью.Модуль(90)}:Возврат КоллекцияПечатныхФорм.Найти(ВРег(Идентификатор), "ИмяВРЕГ");
{ВнешняяОбработка.ПечатьИзвещение.МодульОбъекта(80)}:ПечатнаяФорма = УправлениеПечатью.СведенияОПечатнойФорме(КоллекцияПечатныхФорм, "Извещение");
{ВнешняяОбработка.ПечатьИзвещение.Форма.Форма.Форма(171)}:ОбработкаОбъект.ВывестиДанныеДокументаВТабличныйДокумент(, Сотрудники);
{ВнешняяОбработка.ПечатьИзвещение.Форма.Форма.Форма(198)}:КоллекцияПечатныхФормМассив = ПечатьНаСервере();
56 СеменовСемен
 
23.08.22
10:07
у тебя ошибка в формировании печ формы
ПечатнаяФорма = УправлениеПечатью.СведенияОПечатнойФорме(КоллекцияПечатныхФорм, "Извещение");
ибо ты Коллекцию не передаешь
ОбработкаОбъект.ВывестиДанныеДокументаВТабличныйДокумент(, Сотрудники);
там не т
57 Масянька
 
23.08.22
10:12
(56) В модуле формы:
&НаСервере
Функция ПечатьНаСервере()
    
    ОбработкаОбъект = РеквизитФормыВЗначение("Объект");
    КоллекцияПечатныхФорм = УправлениеПечатью.ПодготовитьКоллекциюПечатныхФорм("ПечатьИзвещение");
сообщить("1 - " + КоллекцияПечатныхФорм);    
    ОбработкаОбъект.ВывестиДанныеДокументаВТабличныйДокумент(КоллекцияПечатныхФорм, Сотрудники);
    КоллекцияПечатныхФормМассив = ОбщегоНазначения.ТаблицаЗначенийВМассив(КоллекцияПечатныхФорм);    
    Возврат КоллекцияПечатныхФормМассив;
    
КонецФункции

В модуле объекта:


&НаКлиенте
//Процедура Печать(Команда)
Процедура Печать(ИдентификаторКоманды, ОбъектыНазначения)
    
........    
    Если (Ошибка1 = 1) И (Ошибка2 = 1) И (Ошибка3 = 1) И (Ошибка4 = 1) И (Ошибка5 = 1) И (Ошибка6 = 1) Тогда
        КоллекцияПечатныхФормМассив = ПечатьНаСервере();
        УправлениеПечатьюКлиент.ПечатьДокументов(КоллекцияПечатныхФормМассив);  
    КонецЕсли;
    
КонецПроцедуры

В модуле объекта:
Процедура ВывестиДанныеДокументаВТабличныйДокумент(КоллекцияПечатныхФорм, ОбъектыПечати) Экспорт

    МодульСклонениеПредставленийОбъектов = ОбщегоНазначения.ОбщийМодуль("СклонениеПредставленийОбъектов");
    
    ДвоичныеДанныеМакета = ПолучитьМакет("ПФ_DOC_Извещение");
    
    
    Если ДвоичныеДанныеМакета <> Неопределено Тогда
        
        ПечатнаяФорма = УправлениеПечатью.СведенияОПечатнойФорме(КоллекцияПечатныхФорм, "Извещение");

Возвращает:
1 - ТаблицаЗначений
! - Извещение
2 -
Ошибка:
Значение не является значением объектного типа (ТабличныйДокумент)
{ВнешняяОбработка.ПечатьИзвещение.МодульОбъекта(85)}:ПечатнаяФорма.ТабличныйДокумент = Новый ТабличныйДокумент;
{ВнешняяОбработка.ПечатьИзвещение.Форма.Форма.Форма(172)}:ОбработкаОбъект.ВывестиДанныеДокументаВТабличныйДокумент(КоллекцияПечатныхФорм, Сотрудники);
{ВнешняяОбработка.ПечатьИзвещение.Форма.Форма.Форма(200)}:КоллекцияПечатныхФормМассив = ПечатьНаСервере();
58 Масянька
 
23.08.22
10:12
+(57) Первые 2 (функция и процедура) в модуле формы.
59 Масянька
 
23.08.22
10:39
(56) Мыслей нет?
60 СеменовСемен
 
23.08.22
10:50
(57) ну вот уже другая ошибка
61 СеменовСемен
 
23.08.22
10:53
У тебя ид печатьизвещение иди извещение?
62 Масянька
 
23.08.22
10:59
(61) Обработка называется "Извещение".
Имя обработки "ПечатьИзвещение".
63 Масянька
 
23.08.22
11:27
Простейшая операция...
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.