Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
14 дек 2024, 01:49

УТ 11, проблема с отображением внешней печатной формы

Автор SergD, 06 авг 2021, 16:42

0 Пользователей и 1 гость просматривают эту тему.

SergD

Приветствую всех форумчан. У меня возникла проблема, хотел бы попросить помощи. Я только начал работать с платформой, буду рад конкретике и подробным ответам, чтобы я смог их понять :D

Постановка вопроса: Мне нужно подключить внешнюю печатную форму к справочнику "ДоговорыКонтрагентов". Сейчас кнопка печати отображается в форме справочника, все нормально, но при нажатии, открывается просто полностью пустая вкладка страницы, макет не подгружается.

База на УТ11.

Ниже я приведу код, который у меня уже есть:

Модуль внешней обработки:

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

Функция ПолучитьНазначениеОбработки()
   
   Массив = Новый Массив;
   Массив.Добавить("Справочники.ДоговорыКонтрагентов");
   
   Возврат Массив;
   
КонецФункции   

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

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



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

Функция ОтветственныеЛицаКонтрагентов(Организация, ДатаСреза, Исполнитель = Неопределено) Экспорт
   
   Результат = Новый Структура("Руководитель, РуководительДолжность, РуководительОснование, ГлавныйБухгалтер, Кассир");
   
   Если Организация <> Неопределено тогда
      
      ЗапросПоЛицам = Новый Запрос();
      ЗапросПоЛицам.УстановитьПараметр("Организация", Организация);
      ЗапросПоЛицам.УстановитьПараметр("ДатаСреза",   ДатаСреза);
      ЗапросПоЛицам.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ
      |   ОтветственныеЛицаОрганизацииСрезПоследних.ОтветственноеЛицо,
      |   ОтветственныеЛицаОрганизацииСрезПоследних.Должность.Наименование КАК Должность,
      //|   ВЫБОР
      // |      КОГДА ФИОФизЛицСрезПоследних.ФизЛицо ЕСТЬ NULL
      |         ОтветственныеЛицаОрганизацииСрезПоследних.ФизическоеЛицо КАК ФИОПолное,
      //|      ИНАЧЕ ФИОФизЛицСрезПоследних.Фамилия + ВЫБОР
      //|            КОГДА ПОДСТРОКА(ФИОФизЛицСрезПоследних.Имя, 1, 1) <> """"
      //|               ТОГДА "" "" + ПОДСТРОКА(ФИОФизЛицСрезПоследних.Имя, 1, 1) + "".""
      //|            ИНАЧЕ """"
      //|         КОНЕЦ + ВЫБОР
      //|            КОГДА ПОДСТРОКА(ФИОФизЛицСрезПоследних.Отчество, 1, 1) <> """"
      //|               ТОГДА "" "" + ПОДСТРОКА(ФИОФизЛицСрезПоследних.Отчество, 1, 1) + "".""
      //|            ИНАЧЕ """"
      //|         КОНЕЦ
      //|   КОНЕЦ КАК ФИОПолное,
      |   ОтветственныеЛицаОрганизацииСрезПоследних.Основание как Основание
      |ИЗ
      |   РегистрСведений.РДА_ОтветственныеЛицаКонтрагентов.СрезПоследних(&ДатаСреза, СтруктурнаяЕдиница = &Организация) КАК ОтветственныеЛицаОрганизацииСрезПоследних
      |      ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ФИОФизЛиц.СрезПоследних(&ДатаСреза, ФизЛицо ССЫЛКА Справочник.ФизическиеЛица) КАК ФИОФизЛицСрезПоследних
      |      ПО ОтветственныеЛицаОрганизацииСрезПоследних.ФизическоеЛицо = ФИОФизЛицСрезПоследних.ФизЛицо";
      
      Выборка = ЗапросПоЛицам.Выполнить().Выбрать();
      
      Пока Выборка.Следующий() Цикл
         
         Если Выборка.ОтветственноеЛицо = Перечисления.ОтветственныеЛицаОрганизации.Руководитель Тогда
            Результат.Руководитель            = Выборка.ФИОПолное;
            Результат.РуководительДолжность   = Выборка.Должность;
            Результат.РуководительОснование   = Выборка.Основание;
            
         ИначеЕсли Выборка.ОтветственноеЛицо = Перечисления.ОтветственныеЛицаОрганизации.ГлавныйБухгалтер Тогда
            Результат.ГлавныйБухгалтер        = Выборка.ФИОПолное;
            
         ИначеЕсли Выборка.ОтветственноеЛицо = Перечисления.ОтветственныеЛицаОрганизации.Кассир Тогда
            Результат.Кассир                  = Выборка.ФИОПолное;
            
         КонецЕсли;
         
      КонецЦикла;
   КонецЕсли;
   
   Возврат Результат;
   
КонецФункции // ОтветственныеЛицаОрганизации()

Функция ОтветственныеЛицаОрганизации(Организация, ДатаСреза, Исполнитель = Неопределено) Экспорт
   
   Результат = Новый Структура("Руководитель, РуководительДолжность, РуководительОснование, ГлавныйБухгалтер, Кассир");
   
   Если Организация <> Неопределено тогда
      
      ЗапросПоЛицам = Новый Запрос();
      ЗапросПоЛицам.УстановитьПараметр("Организация", Организация);
      ЗапросПоЛицам.УстановитьПараметр("ДатаСреза",   ДатаСреза);
      ЗапросПоЛицам.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ
      |   ОтветственныеЛицаОрганизацииСрезПоследних.ОтветственноеЛицо,
      |   ОтветственныеЛицаОрганизацииСрезПоследних.Должность.Наименование КАК Должность,
      //|   ВЫБОР
      // |      КОГДА ФИОФизЛицСрезПоследних.ФизЛицо ЕСТЬ NULL
      |         ОтветственныеЛицаОрганизацииСрезПоследних.ФизическоеЛицо КАК ФИОПолное
      //|      ИНАЧЕ ФИОФизЛицСрезПоследних.Фамилия + ВЫБОР
      //|            КОГДА ПОДСТРОКА(ФИОФизЛицСрезПоследних.Имя, 1, 1) <> """"
      //|               ТОГДА "" "" + ПОДСТРОКА(ФИОФизЛицСрезПоследних.Имя, 1, 1) + "".""
      //|            ИНАЧЕ """"
      //|         КОНЕЦ + ВЫБОР
      //|            КОГДА ПОДСТРОКА(ФИОФизЛицСрезПоследних.Отчество, 1, 1) <> """"
      //|               ТОГДА "" "" + ПОДСТРОКА(ФИОФизЛицСрезПоследних.Отчество, 1, 1) + "".""
      //|            ИНАЧЕ """"
      //|         КОНЕЦ
      //|   КОНЕЦ КАК ФИОПолное,
      |ИЗ
      |   РегистрСведений.ОтветственныеЛицаОрганизации.СрезПоследних(&ДатаСреза, СтруктурнаяЕдиница = &Организация) КАК ОтветственныеЛицаОрганизацииСрезПоследних
      |      ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ФИОФизЛиц.СрезПоследних(&ДатаСреза, ФизЛицо ССЫЛКА Справочник.ФизическиеЛица) КАК ФИОФизЛицСрезПоследних
      |      ПО ОтветственныеЛицаОрганизацииСрезПоследних.ФизическоеЛицо = ФИОФизЛицСрезПоследних.ФизЛицо";
      
      Выборка = ЗапросПоЛицам.Выполнить().Выбрать();
      
      Пока Выборка.Следующий() Цикл
         
         Если Выборка.ОтветственноеЛицо = Перечисления.ОтветственныеЛицаОрганизации.Руководитель Тогда
            Результат.Руководитель            = Выборка.ФИОПолное;
            Результат.РуководительДолжность   = Выборка.Должность;
            
         ИначеЕсли Выборка.ОтветственноеЛицо = Перечисления.ОтветственныеЛицаОрганизации.ГлавныйБухгалтер Тогда
            Результат.ГлавныйБухгалтер        = Выборка.ФИОПолное;
            
         ИначеЕсли Выборка.ОтветственноеЛицо = Перечисления.ОтветственныеЛицаОрганизации.Кассир Тогда
            Результат.Кассир                  = Выборка.ФИОПолное;
            
         КонецЕсли;
         
      КонецЦикла;
   КонецЕсли;
   
   Возврат Результат;
   
КонецФункции // ОтветственныеЛицаОрганизации()


&НаКлиенте
Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
   
   Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "Печать договора") Тогда   
      УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм, "МакетПечатьДоговора", "Печать договора", СформироватьПечатнуюФорму(МассивОбъектов[0], ОбъектыПечати));
   КонецЕсли;
   
КонецПроцедуры


&НаСервере
Функция СформироватьПечатнуюФорму(СсылкаНаОбъект, ОбъектыПечати)   
   
   ТабДок = Новый ТабличныйДокумент;
   Макет = ПолучитьМакет("МакетПечатьДоговора");
   // Заголовок
   СуммаДоговора=0;
   СпрДог=СсылкаНаОбъект.ДоговорКонтрагента;
   
   Область = Макет.ПолучитьОбласть("Заголовок");
   Область.Параметры.Номер = СпрДог.Номер;
   ТабДок.Вывести(Область);
   // Шапка
   Шапка = Макет.ПолучитьОбласть("Шапка");
   
   РуководителиКонтрагента = ОтветственныеЛицаКонтрагентов(СпрДог.Владелец, СпрДог.Дата);
   РуководительКонтрагента = РуководителиКонтрагента.Руководитель;
   
   Руководители = ОтветственныеЛицаОрганизации(СпрДог.Организация, СпрДог.Дата,);
   Руководитель = Руководители.Руководитель;
   
   Шапка.Параметры.Именуемый=?(СпрДог.Организация.ЮрФизЛицо=перечисления.ЮрФизЛицо.ЮрЛицо," именуемое "," именуемый ");
   Шапка.Параметры.Именуемый1=?(СпрДог.Владелец.ЮрФизЛицо=перечисления.ЮрФизЛицо.ЮрЛицо," именуемое "," именуемый ");
   Шапка.Параметры.ДействующийОрганизация=?(СпрДог.Организация.ЮрФизЛицо=перечисления.ЮрФизЛицо.ЮрЛицо," действующего "," действующий ");
   Шапка.Параметры.ДействующийКонтрагент=?(СпрДог.Владелец.ЮрФизЛицо=перечисления.ЮрФизЛицо.ЮрЛицо," действующего "," действующий ");
   
   Шапка.Параметры.ВЛице=?(СпрДог.Владелец.ЮрФизЛицо=перечисления.ЮрФизЛицо.ЮрЛицо,
   " в лице "+?(ЗначениеЗаполнено(РуководителиКонтрагента.РуководительДолжность)
   или ЗначениеЗаполнено(РуководительКонтрагента),франУправленияПерсоналомИРасчетЗП.ПросклонятьДолжность(РуководителиКонтрагента.РуководительДолжность, 2)+" "+СокрЛП(франВспомогательный.ПросклонятьФИО(Строка(РуководительКонтрагента), 2)),"_________________________________________")
   ,"");
   //Шапка.Параметры.франОтветственноеЛицоИсполнителяРП = СокрЛП(франВспомогательный.ПросклонятьФИО(Строка(Руководитель), 2));
   Шапка.Параметры.франДокументОснованиеДействийСотрудника = ?(СпрДог.Организация.ЮрФизЛицо=перечисления.ЮрФизЛицо.ЮрЛицо,
   " Устава ",
   "Свидетельства о государственной регистрации физического лица в качестве индивидуального предпринимателя серия, номер "
   +Строка(СпрДог.Организация.СвидетельствоСерияНомер)
   +" выданного "+Формат(СпрДог.Организация.СвидетельствоДатаВыдачи,"ДЛФ=DD")+
   " Межрайонной инспекцией Федеральной налоговой службы №9 по Волгоградской области, ОГРНИП "+Строка(СпрДог.Организация.ОГРН));
   Шапка.Параметры.франДокументОснованиеДействийЗаказчика =?(ЗначениеЗаполнено(РуководителиКонтрагента.РуководительОснование),РуководителиКонтрагента.РуководительОснование,"_____________________");
   Шапка.Параметры.франДатаНачалаДействияДоговора = СпрДог.Дата;
   Шапка.Параметры.СтоимостьЧаса="Стоимость одного часа рабочего времени специалиста Исполнителя составляет "+Строка(СпрДог.франСтоимостьЧасаРаботИсполнителя)+" ("+ЧислоПрописью(СпрДог.франСтоимостьЧасаРаботИсполнителя, ,",,,,,,,,0")+") рублей";
   Шапка.Параметры.ВЛице1=?(СпрДог.Организация.ЮрФизЛицо=перечисления.ЮрФизЛицо.ЮрЛицо,
   ", в лице "+франУправленияПерсоналомИРасчетЗП.ПросклонятьДолжность(Руководители.РуководительДолжность, 2)+" "+СокрЛП(франВспомогательный.ПросклонятьФИО(Строка(Руководитель), 2))
   ,"");
   //" в лице [ДолжностьОтветственногоЛицаЛицензиатаРП] [франОтветственноеЛицоИсполнителяРП]"
   Шапка.Параметры.СокрФИОЛицензиата = франУправленияПерсоналомИРасчетЗП.ПолучитьСокращенноеФИО(РуководительКонтрагента);
   Шапка.Параметры.СокрФИОЛицензиара = франУправленияПерсоналомИРасчетЗП.ПолучитьСокращенноеФИО(Руководитель);
   //Шапка.Параметры.ДолжностьОтветственногоЛицаЛицензиатаРП = франУправленияПерсоналомИРасчетЗП.ПросклонятьДолжность(Руководители.РуководительДолжность, 2);
   //Шапка.Параметры.ДолжностьОтветственногоЛицаЛицензиараРП = франУправленияПерсоналомИРасчетЗП.ПросклонятьДолжность(РуководителиКонтрагента.РуководительДолжность, 2);
   Шапка.Параметры.СрокДействияДоговора="Настоящий договор заключен на срок с "+Формат(СпрДог.Дата,"ДЛФ=DD")+" по "+Формат(СпрДог.СрокДействия,"ДЛФ=DD")+" и вступает в силу с момента подписания обеими сторонами. В случае, если ни одна из сторон за месяц до истечения срока Договора не заявит о его расторжении, Договор считается продленным на следующий год.";
   
   Шапка.Параметры.Город = ПолучитьГородИзКонтактнойИнформации(СсылкаНаОбъект.Организация);
   
   СведенияОЛицензиате = УправлениеКонтактнойИнформацией.СведенияОЮрФизЛице(СпрДог.Владелец, СсылкаНаОбъект.Дата);
   Шапка.Параметры.ПолноеНаименованиеЛицензиата = ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОЛицензиате, "ПолноеНаименование");
   Шапка.Параметры.ИННЛицензиата = ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОЛицензиате, "ИНН");
   Шапка.Параметры.КППЛицензиата = ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОЛицензиате, "КПП");
   Шапка.Параметры.ЮрАдресЛицензиата = ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОЛицензиате, "ЮридическийАдрес");
   //Шапка.Параметры.ФизАдресЛицензиата = ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОЛицензиате, "ФактическийАдрес");
   Шапка.Параметры.ПлатежныеРеквизитыЛицензиата = ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОЛицензиате, "НомерСчета,Банк,БИК,КоррСчет");
   Шапка.Параметры.ТелефоныЛицензиата = ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОЛицензиате, "Телефоны");
   
   СведенияОЛицензиаре = УправлениеКонтактнойИнформацией.СведенияОЮрФизЛице(СсылкаНаОбъект.Организация, СсылкаНаОбъект.Дата);
   Шапка.Параметры.ПолноеНаименованиеЛицензиара = ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОЛицензиаре, "ПолноеНаименование");
   Шапка.Параметры.ИННЛицензиара = ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОЛицензиаре, "ИНН");
   Шапка.Параметры.КППЛицензиара = ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОЛицензиаре, "КПП");
   Шапка.Параметры.ЮрАдресЛицензиара = ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОЛицензиаре, "ЮридическийАдрес");
   //Шапка.Параметры.ФизАдресЛицензиара = ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОЛицензиаре, "ФактическийАдрес");
   Шапка.Параметры.ПлатежныеРеквизитыЛицензиара = ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОЛицензиаре, "НомерСчета,Банк,БИК,КоррСчет");
   Шапка.Параметры.ТелефоныЛицензиара = ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОЛицензиаре, "Телефоны");
   Шапка.Параметры.ДатаНачалаИОкончания="Дата начала работ "+Формат(СпрДог.РДА_НачалоДействия,"ДЛФ=DD")+", дата окончания работ "+Формат(СпрДог.СрокДействия,"ДЛФ=DD");
   
   Шапка.Параметры.Заполнить(СсылкаНаОбъект);
   ТабДок.Вывести(Шапка);
   
   //////////////////
   
   //ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
   
   //Шапка=Макет.ПолучитьОбласть("Шапка1");
   //Шапка.Параметры.ШапкаСпецификации = "Приложение №1 к договору купли-продажи №" + СпрДог.Номер + " от " + Формат(СпрДог.Дата,"ДЛФ=DD");
   //ТабДок.Вывести(Шапка);
   //
   //Для каждого Стр из СсылкаНаОбъект.Товары Цикл
   //   Стр1=Макет.ПолучитьОбласть("Строка");
   //   Стр1.Параметры.Ном=Стр.НомерСтроки;
   //   Стр1.Параметры.Номенклатура=Стр.Номенклатура.НаименованиеПолное;
   //   Стр1.Параметры.Ед=Стр.ЕдиницаИзмерения;
   //   Стр1.Параметры.Кол=Формат(Стр.Количество,"ЧГ=3,0");
   //   Стр1.Параметры.Цена=Формат(Стр.Цена,"ЧДЦ=2; ЧРД=.; ЧГ=3,0");
   //   Стр1.Параметры.Сумма=Формат(Стр.Сумма,"ЧДЦ=2; ЧРД=.; ЧГ=3,0");
   //   ТабДок.Вывести(Стр1);
   //КонецЦикла;   
   //
   //Шапка=Макет.ПолучитьОбласть("Всего");
   //Шапка.Параметры.Сумма=Формат(СуммаДоговора,"ЧДЦ=2; ЧРД=.; ЧГ=3,0");
   //Шапка.Параметры.ПолноеНаименованиеЛицензиата=СпрДог.Владелец.НаименованиеПолное;
   //Шапка.Параметры.ПолноеНаименованиеЛицензиара=СпрДог.Организация.НаименованиеПолное;
   //Шапка.Параметры.СокрФИОЛицензиата = франУправленияПерсоналомИРасчетЗП.ПолучитьСокращенноеФИО(РуководительКонтрагента);
   //Шапка.Параметры.СокрФИОЛицензиара = "/"+франУправленияПерсоналомИРасчетЗП.ПолучитьСокращенноеФИО(Руководитель)+"/";
   //ТабДок.Вывести(Шапка);
   
   ТабДок.Показать();
   Возврат ТабДок;
КонецФункции   

alexandr_ll


SergD


nvj84

В функции СведенияОВнешнейОбработке() в строке
   ДобавитьКоманду(Команды,
   "Печать договора",
   "МакетПечатьДоговора",
   "ОткрытиеФормы", Ложь, "ПечатьMXL"
   //<Показывать оповещение>,
   //<Модификатор>
   );
Вы использовали другую обработку в качестве шаблона или так задумано изначально.

Похожие темы (5)

Рейтинг@Mail.ru

Поиск