Имя: Пароль:
1C
1С v8
Внедрение в 1С: Документооборот, ред. 2.1. КОРП печатной формы.
0 doshe_rak
 
15.07.21
14:07
Доброго дня!

Вопрос касательно добавления печатной формы в Документообороте.
Необходимо добавить печатную форму в типовую конфигурацию, и что бы она располагалась в подсистеме "Зарплата" и пункте "Табели".

Создал внешнею печатную форму, назвал её "ПечатнаяФормаУчетВремени1.2", прописал внутри данной печатной формы, в модуле, данный код:

//=========================================================================================================
//Процедуры регистрации внешней печатной формы
Функция СведенияОВнешнейОбработке() Экспорт
    
    Назначения = Новый Массив();
    Назначения.Добавить("Документ.ТабельУчетаРабочегоВремени");
    ПараметрыРегистрации = Новый Структура();
    ПараметрыРегистрации.Вставить("Вид", "ПечатнаяФорма");
    ПараметрыРегистрации.Вставить("Назначение", Назначения);
    ПараметрыРегистрации.Вставить("Наименование", "Установка учета рабочего времени");
    ПараметрыРегистрации.Вставить("Версия", "1.0");
    ПараметрыРегистрации.Вставить("Информация", "Дополнительная печатная форма для документа Табель");
    ПараметрыРегистрации.Вставить("БезопасныйРежим", Истина);    
    Команды = ПолучитьТаблицуКоманд() ;
    ДобавитьКоманду(Команды,"Установка учета рабочего времени",
    "УстановкаУчетаРабочегоВремени",
    "ВызовСерверногоМетода",
    Ложь,
    "ПечатьMXL");
    ПараметрыРегистрации.Вставить("Команды",Команды) ;
    Возврат ПараметрыРегистрации;    
КонецФункции

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

Процедура ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование, ПоказыватьОповещение = Ложь, Модификатор = "")
    НоваяКоманда = ТаблицаКоманд.Добавить();
    НоваяКоманда.Представление = Представление;
    НоваяКоманда.Идентификатор = Идентификатор;
    НоваяКоманда.Использование = Использование;
    НоваяКоманда.ПоказыватьОповещение = ПоказыватьОповещение;
    НоваяКоманда.Модификатор = Модификатор;
КонецПроцедуры
//========================================

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

Функция ТабличныйДокументПоМоемуМакету(Макет, МассивОбъектов, ОбъектыПечати)
    ДокументРезультат = Новый ТабличныйДокумент;
    ДокументРезультат.ОриентацияСтраницы = ОриентацияСтраницы.Портрет;
    ДокументРезультат.АвтоМасштаб = Истина;
    НомерСтрокиНачало = ДокументРезультат.ВысотаТаблицы + 1;
    ДокументРезультат.КлючПараметровПечати = "ПараметрыПечати_Документ_MXI";
    //формирование таблицы
    ДанныеДляПечати = ДанныеДляПечатиПоДокументам(МассивОбъектов);    
    ВывестиДанныеВТабличныйДокумент(Макет, ДокументРезультат, ДанныеДляПечати, ОбъектыПечати);
    Возврат ДокументРезультат;
    
КонецФункции

Функция ДанныеДляПечатиПоДокументам(МассивСсылок)
    Запрос = Новый Запрос;
    Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
    Запрос.УстановитьПараметр("МассивСсылок", МассивСсылок);
    Запрос.Текст = "ВЫБРАТЬ
    |    ТабельУчетаРабочегоВремени.Ссылка КАК Ссылка
    |ИЗ
    |    Документ.ТабельУчетаРабочегоВремени КАК ТабельУчетаРабочегоВремени
    |ГДЕ
    |    ТабельУчетаРабочегоВремени.Ссылка В(&МассивСсылок)";     
    Результат = Запрос.Выполнить();
    ПрочиеДанные = Новый Структура();
    Возврат Новый Структура("ВыборкаДокументы, ПрочиеДанные", Результат.Выбрать(), ПрочиеДанные);
КонецФункции

Функция НадоПечататьДокумент(Ссылка)
    Возврат Истина;
КонецФункции

Процедура ВывестиДанныеВТабличныйДокумент(Макет, ДокументРезультат, ДанныеДляПечати, ОбъектыПечати)
    ВыборкаДокументы = ДанныеДляПечати.ВыборкаДокументы;
    ПервыйДокумент = Истина;
    Пока ВыборкаДокументы.Следующий() Цикл
        Если Не НадоПечататьДокумент(ВыборкаДокументы.Ссылка) Тогда
            ТекстСообщения = НСтр("ru = '%1: документ не требует печати.'");
            ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщения, ВыборкаДокументы.Ссылка));
            Продолжить;
        КонецЕсли;
        Если Не ПервыйДокумент Тогда
            ДокументРезультат.ВывестиГоризонтальныйРазделительСтраниц();
        КонецЕсли;
        
        ПервыйДокумент = Ложь;
        НомерСтрокиНачало = ДокументРезультат.ВысотаТаблицы + 1;
        Секция = Макет.ПолучитьОбласть("ПечатнаяЧасть");
        ЗаполнитьЗначенияСвойств(Секция.Параметры, ВыборкаДокументы);            
        Секция.Параметры.ПечатнаяЧасть = ПрефиксацияОбъектовКлиентСервер.НомерНаПечать(Секция.Параметры.ПечатнаяЧасть, Истина, Истина);
        ДокументРезультат.Вывести(Секция);
        УправлениеПечатью.ЗадатьОбластьПечатиДокумента(ДокументРезультат,
        НомерСтрокиНачало, ОбъектыПечати, ВыборкаДокументы.Ссылка);
    КонецЦикла;        
КонецПроцедуры

Далее создал макет, печатной формы, нарисовал таблицу которая мне нужна.
При запуске режима пользователя, на кнопке печать, появилась новая строка, с названием моей печатной формы.
Нажимаем на неё, и на экране появляется наша печатная форма, НО! она не заполняется, как прописать код так, что бы она подтягивала данные, не могу придумать.

Памагити ...
1 Масянька
 
15.07.21
14:11
(0) У тебя там есть Форма. В модуле этой формы:

&НаСервере
Процедура ПечатьНаСервере()
    
    ТекущийОбъект = РеквизитФормыВЗначение("Объект");
    ТабДокумент = ТекущийОбъект.ИМЯ_ТВОЕЙ_ПЕЧАТИ;
    
КонецПроцедуры

&НаКлиенте
Процедура Печать(Команда)
    
    ПечатьНаСервере();
    
КонецПроцедуры
2 Мультук
 
гуру
15.07.21
14:17
(0) Задача, я так понимаю, вывести в печатный документ только ссылки?
Потому что другие реквизиты ты не выбираешь.

  Запрос.Текст = "ВЫБРАТЬ
    |    ТабельУчетаРабочегоВремени.Ссылка КАК Ссылка
    |ИЗ
    |    Документ.ТабельУчетаРабочегоВремени КАК ТабельУчетаРабочегоВремени
    |ГДЕ
    |    ТабельУчетаРабочегоВремени.Ссылка В(&МассивСсылок)";
3 doshe_rak
 
15.07.21
14:23
Тут в общем и проблема, я не знаю как прописать код, для подключения своих параметров из печатной формы, что бы они "подсасывали" данные из документа, и выводили это на печать.
Сама форма появляется в печатном виде, но пустая...
4 doshe_rak
 
15.07.21
14:24
Мультук, нет, этот код шаблонный, взял из интернета, он просто осуществляет вывод на печать пустой формы, простой таблички которая не будет заполняться.
5 doshe_rak
 
15.07.21
14:25
Масянька, я так понял этот код нужно добавить в форму моей внешней печатной формы, где хранится код который там прописан?
6 Масянька
 
15.07.21
14:26
(3) Т о есть - ты видишь свою таблицу (не пустой лист), только она (таблица) пустая?
7 doshe_rak
 
15.07.21
14:29
Масянька, совершенно верно, я нарисовал таблицу, заголовок, надписи в колонках и ячейках, где необходимо, и все остальное.
То есть табличка готова к бою :) Но информацию, из документа, она должна подтягивать с помощью параметров, а как их указать так, что бы, табличка заполнялась, не могу понять )
8 Масянька
 
15.07.21
14:29
(7) При печати ты видишь свою табличку?
9 doshe_rak
 
15.07.21
14:34
Да, распечатывается табличка нормально
10 Масянька
 
15.07.21
14:35
(9) Скрин макета покажи (из конфы)
11 doshe_rak
 
15.07.21
14:41
А как тут добавить картинку? Кнопок даже нет специальных...
12 Масянька
 
15.07.21
14:58
(11) Картинку выкладываешь на помойку (нормальную) - сюда ссылку.
13 doshe_rak
 
15.07.21
15:13
14 Масянька
 
15.07.21
15:22
(13) А номер выводится в печ. форме?
15 Масянька
 
15.07.21
15:22
+ (14)  Секция.Параметры.ПечатнаяЧасть = ПрефиксацияОбъектовКлиентСервер.НомерНаПечать(Секция.Параметры.ПечатнаяЧасть, Истина, Истина);
16 doshe_rak
 
15.07.21
15:27
Нет, только то что не является параметром, а обычным текстом, и сама таблица, границы я имею ввиду.

Данную строку коду куда нужно записать в тексте кода ?
17 doshe_rak
 
15.07.21
15:30
Извиняюсь, это строка кода из Процедуры ВывестиДанныеВТабличныйДокумент
18 Масянька
 
15.07.21
16:29
(17) В этой процедуре:

       Секция = Макет.ПолучитьОбласть("ПечатнаяЧасть");
        //ЗаполнитьЗначенияСвойств(Секция.Параметры, ВыборкаДокументы);            
        //Секция.Параметры.ПечатнаяЧасть = ПрефиксацияОбъектовКлиентСервер.НомерНаПечать(Секция.Параметры.ПечатнаяЧасть, Истина, Истина);
        ДокументРезультат.Вывести(Секция);

Вместо строчек // нужно написать:
Секция.Параметры.[ИмяПараметра] = [СамПараметр];

ИмяПараметра - имя параметра в печатной форме (ФИО, Должность и пр.)
СамПараметр - то, чем нужно заполнять. Вот тут сложнее: в ДанныеДляПечати только ссылки на документы. Поэтому нужно либо переделать запрос, либо выводить в цикле (для каждого документа, для каждой ТЧ).
19 doshe_rak
 
15.07.21
16:37
Вот, к сожалению данного шаблона, или примера, как заполняется данная часть, где описываются параметры которые потом можно будет использовать ПФ, у меня нет. И в интернете примеров не могу найти :(
20 doshe_rak
 
15.07.21
16:44
Именно как нужно начинать записывать текст кода, где описывается как описывать параметр, и добавление его на печатную форму.
21 Масянька
 
15.07.21
17:05
(20) Это макет - https://ibb.co/cQq4vWx
Комментарий - это ячейка макета. Обрати внимание на свойство "Заполнение" этой ячейки.
22 Масянька
 
15.07.21
17:07
+ (21) А это код заполнения этой ячейки (см. 18):
        Область.Параметры.Комментарий    = СокрЛП(Выборка.РезультатВыполнения);
Выборка - результат запроса.
23 Масянька
 
15.07.21
17:17
+(21) Картинка получше - https://ibb.co/W2DpQ8j
Хотя, как художник, я - Пикассо
24 Масянька
 
15.07.21
17:19
(23) Ячейка не та :(
Короче, вот картинка - https://ibb.co/3dtm7LY
25 doshe_rak
 
16.07.21
08:38
Я обратил внимание, вижу что это параметр, у меня в таблице так же записаны данные ячейки как параметры, не текст и не шаблон )
26 doshe_rak
 
16.07.21
08:38
Область.Параметры.Комментарий    = СокрЛП(Выборка.РезультатВыполнения);

Насчёт этого надо подумать, как правильно записать )