X

Создание внешней печатной формы, подключаемой к документу 1с

Задача:Необходимо создать печатную форму “Спецификация” к документу Реализация товаров и услуг.

1.Создаем внешнюю обработку

2.Добавляем  реквизит СсылкаНаОбъект с типом  необходимого документа (в моем случае ДокументСсылка.РеализацияТоваровУслуг)

3.Добавляем в обработку форму для облегчения дальнейшей отладки

4.Размещаем на форме реквизит СсылкаНаОбъект

5.В модуле обработки создаем функцию печать(с пометкой экспорт) и назначаем ее на кнопку ‘Выполнить’ в форме обработке

код модуля:

Функция Печать() Экспорт
 Возврат(ПечатьСпецификации());
КонецФункции

Функция ПечатьСпецификации()
  Сообщить("Здесь будет Печатная форма"); 
КонецФункции

код формы:

Процедура КнопкаВыполнитьНажатие(Кнопка)
 Печать();
КонецПроцедуры

6. Уже можно подключать обработку к документу. Добавляем ее в дополнительные  печатные формы и определяем принадлежность к документу.

7.Теперь из документа “Реализация Товаров и Услуг” по команде печать можно выбрать и запустить эту обработку, результатом будет выполнение команд в  Функции ПечатьСпецификации()

8. Теперь можно приступить непосредственно к созданию макета печатной формы(текст, параметры, оформление, области). Подробнее почитать можно в статье Пример создания внешнего отчета в 1с

9.Для обращения к данным документа как раз и используется реквизит СсылкаНаОбъект, который будет равняться  ссылке на документ из которого вы хотите распечатать.

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

10. Не забудьте обновить печатную форму в справочнике “Дополнительные печатные формы и обработки”.

Поделиться ссылкой:

Создание внешней печатной формы, подключаемой к документу 1с
Категории Обычные формы
nna:

Просмотреть комментарии (2)

  • Функция СведенияОВнешнейОбработке() Экспорт

    ПараметрыРегистрации = Новый Структура;
    МассивНазначений = Новый Массив;

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

    ТаблицаКоманд = ПолучитьТаблицуКоманд();

    ДобавитьКоманду(ТаблицаКоманд, "ВыгрузкаПоименногоСписка", "Форма", "ОткрытиеФормы", , "");
    ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);
    Возврат ПараметрыРегистрации;
    КонецФункции

    Функция ПолучитьТаблицуКоманд()

    // Создадим пустую таблицу команд и колонки в ней
    Команды = Новый ТаблицаЗначений;

    // Как будет выглядеть описание печатной формы для пользователя
    Команды.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка"));

    // Имя нашего макета, что бы могли отличить вызванную команду в обработке печати
    Команды.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка"));

    // Тут задается, как должна вызваться команда обработки
    // Возможные варианты:
    // - ОткрытиеФормы - в этом случае в колонке идентификатор должно быть указано имя формы, которое должна будет открыть система
    // - ВызовКлиентскогоМетода - вызвать клиентскую экспортную процедуру из модуля формы обработки
    // - ВызовСерверногоМетода - вызвать серверную экспортную процедуру из модуля объекта обработки
    Команды.Колонки.Добавить("Использование", Новый ОписаниеТипов("Строка"));

    // Следующий параметр указывает, необходимо ли показывать оповещение при начале и завершению работы обработки. Не имеет смысла при открытии формы
    Команды.Колонки.Добавить("ПоказыватьОповещение", Новый ОписаниеТипов("Булево"));

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

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

  • Функция СведенияОВнешнейОбработке() Экспорт

    ПараметрыРегистрации = Новый Структура;
    МассивНазначений = Новый Массив;

    // МассивНазначений.Добавить("подсистема.CRMИМАРКЕТИНГ"); //Указываем документ к которому делаем внешнюю печ. форму
    ПараметрыРегистрации.Вставить("Вид", "ДополнительныйОтчет"); //может быть - ПечатнаяФорма, ЗаполнениеОбъекта, ДополнительныйОтчет, СозданиеСвязанныхОбъектов...
    // ПараметрыРегистрации.Вставить("Назначение", МассивНазначений);
    ПараметрыРегистрации.Вставить("Наименование", "ОтчетПоПричинамУвольнений"); //имя под которым обработка будет зарегестрирована в справочнике внешних обработок
    ПараметрыРегистрации.Вставить("БезопасныйРежим",ИСТИНА);
    ПараметрыРегистрации.Вставить("Информация", "ОтчетПоПричинамУвольнений");
    ПараметрыРегистрации.Вставить("Версия", "1.0");

    ТаблицаКоманд = ПолучитьТаблицуКоманд();
    ДобавитьКоманду(ТаблицаКоманд, "ОтчетПоПричинамУвольнений", "ОтчетПоПричинамУвольнений", "ОткрытиеФормы");
    ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);

    Возврат ПараметрыРегистрации;

    КонецФункции

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

    Возврат Команды;
    КонецФункции

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

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

    КонецПроцедуры

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