PDA

Просмотр полной версии : ВПФ УПД с договором



Александр2108
09.02.2016, 14:05
Необходимо добавить во внешнию печатную форму УПД из Реализации товаров и услуг выводился договор. Макет подправил.
Создал в ВПФ реквизит СсылкаНаОбъект с типом ДокументСсылка.Реализация� �оваровУслуг.
Добавил строку:
ПараметрыШапки.Вставить("Договор", "Договор: " + СсылкаНаОбъект.Договор);

Печатная форма формируется, но договор не выводит.
И в Табло ввожу выражение значения нет. Но и тех реквизитов которые выводятся правильно тоже нет значения.


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

Функция СформироватьПечатнуюФорму УПД(ОбъектП,ОбъектыПечати, ПараметрыПечати, КомплектыПечати = Неопределено) Экспорт

УстановитьПривилегированн ыйРежим(Истина);

ТабличныйДокумент = Новый ТабличныйДокумент;
ТабличныйДокумент.АвтоМас� �таб = Истина;
ТабличныйДокумент.Ориента� �ияСтраницы = ОриентацияСтраницы.Ландша� �т;

ТабличныйДокумент.ИмяПара� �етровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_УПД_ДЛЯИП";

НомерТипаДокумента = 0;

НомерТипаДокумента = НомерТипаДокумента + 1;
Если НомерТипаДокумента > 1 Тогда
ТабличныйДокумент.Вывести� �оризонтальныйРазделитель� �траниц();
КонецЕсли;

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

ЗаполнитьТабличныйДокумен тУПД(ТабличныйДокумент, ДанныеДляПечати, ОбъектыПечати, КомплектыПечати);
Возврат ТабличныйДокумент;

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

Процедура ЗаполнитьРеквизитыШапкиУП Д(ДанныеПечати, СведенияОПоставщике, СведенияОПокупателе, Макет, ТабличныйДокумент)

СведенияОГрузоотправителе = СведенияОГрузоотправителе (ДанныеПечати);
СведенияОГрузополучателе = ФормированиеПечатныхФорм.� �веденияОЮрФизЛице(ДанныеП ечати.Грузополучатель,
ДанныеПечати.Дата);

ОбластьМакета = Макет.ПолучитьОбласть("Шапка");
ШтрихкодированиеПечатныхФ орм.ВывестиШтрихкодВТабли� �ныйДокумент(ТабличныйДоку мент, Макет, ОбластьМакета,
ДанныеПечати.Ссылка);
ОбластьМакета.Параметры.За полнить(ДанныеПечати);

ПараметрыШапки = Новый Структура;

ПараметрыШапки.Вставить("Номер",
ПрефиксацияОбъектовКлиент Сервер.ПолучитьНомерНаПеч� �ть(ДанныеПечати.Номер, Ложь, Ложь));
Если Лев(ПараметрыШапки.Номер, 1) = "И" Тогда
ПараметрыШапки.Номер = Прав(ПараметрыШапки.Номер, СтрДлина(ПараметрыШапки.Но мер)-1);
КонецЕсли;
Если ЗначениеЗаполнено(ДанныеП� �чати.ИндексПодразделения) Тогда
ПараметрыШапки.Номер = ПараметрыШапки.Номер + "/" + ДанныеПечати.ИндексПодраз� �еления;
КонецЕсли;
ПараметрыШапки.Вставить("Дата", Формат(ДанныеПечати.Дата, "ДФ='дд ММММ гггг'")+ " г.");
ПараметрыШапки.Вставить("НомерИсправления", ?(ДанныеПечати.Исправление, ДанныеПечати.НомерИсправл� �ния, "--"));
ПараметрыШапки.Вставить("ДатаИсправления",
?(ДанныеПечати.Исправление, Формат(ДанныеПечати.ДатаИс правления, "ДФ='дд ММММ гггг'")+ " г.", "--"));

// Выводим данные о поставщике.
ПараметрыШапки.Вставить("ПредставлениеПоставщика", "Продавец: " + СведенияОПоставщике.Офици� �льноеНаименование);
ПараметрыШапки.Вставить("АдресПоставщика", "Адрес: "
+ ФормированиеПечатныхФорм.� �писаниеОрганизации(Сведен ияОПоставщике, "ЮридическийАдрес"));

Если ДанныеПечати.ВыводитьКППГ� �узоотправителя Тогда
КПП = СведенияОГрузоотправителе .КПП;
Иначе
КПП = ФормированиеПечатныхФорм.� �писаниеОрганизации(Сведен ияОПоставщике, "КПП,", Ложь);
КонецЕсли;
ПараметрыШапки.Вставить("ИННПоставщика", "ИНН/КПП продавца: "
+ ФормированиеПечатныхФорм.� �писаниеОрганизации(Сведен ияОПоставщике, "ИНН", Ложь)
+ ?(Не ПустаяСтрока(КПП), "/" + КПП, ""));

// Выводим данные грузоотправителя.
ПредставлениеГрузоотправи теля = "Грузоотправитель и его адрес: ";
Если ДанныеПечати.ТолькоУслуги ИЛИ ДанныеПечати.Грузоотправи� �ель = Неопределено Тогда
ПредставлениеГрузоотправи теля = ПредставлениеГрузоотправи теля + "--";
ИначеЕсли ДанныеПечати.Организация = ДанныеПечати.Грузоотправи� �ель Тогда
ПредставлениеГрузоотправи теля = ПредставлениеГрузоотправи теля + "он же";
Иначе
ПредставлениеГрузоотправи теля = ПредставлениеГрузоотправи теля
+ ФормированиеПечатныхФорм.� �писаниеОрганизации(Сведен ияОГрузоотправителе, "ПолноеНаименование,Фактич� �скийАдрес");
КонецЕсли;
ПараметрыШапки.Вставить("ПредставлениеГрузоотправи теля", ПредставлениеГрузоотправи теля);

// Выводим данные грузополучателя и покупателя.
ПредставлениеГрузополучат еля = "Грузополучатель и его адрес: ";
Если ДанныеПечати.ТолькоУслуги ИЛИ ДанныеПечати.Грузополучат� �ль = Неопределено Тогда
ПредставлениеГрузополучат еля = ПредставлениеГрузополучат еля + "--";
Иначе
ПредставлениеГрузополучат еля = ПредставлениеГрузополучат еля
+ ФормированиеПечатныхФорм.� �писаниеОрганизации(
СведенияОГрузополучателе,
"ПолноеНаименование,Фактич� �скийАдрес",
Ложь);
КонецЕсли;
ПараметрыШапки.Вставить("ПредставлениеГрузополучат еля", ПредставлениеГрузополучат еля);

Если Не ПустаяСтрока(ДанныеПечати. СтрокаПоДокументу) Тогда
ПараметрыШапки.Вставить("ПоДокументу", "К платежно-расчетному документу № " + ДанныеПечати.СтрокаПоДоку� �енту);
Иначе
ПараметрыШапки.Вставить("ПоДокументу", "К платежно-расчетному документу № -- от --");
КонецЕсли;

ПараметрыШапки.Вставить("ПредставлениеПокупателя", "Покупатель: "
+ ФормированиеПечатныхФорм.� �писаниеОрганизации(Сведен ияОПокупателе, "ПолноеНаименование", Ложь));
ПараметрыШапки.Вставить("АдресПокупателя", "Адрес: "
+ ФормированиеПечатныхФорм.� �писаниеОрганизации(Сведен ияОПокупателе, "ЮридическийАдрес", Ложь));

КПП = ФормированиеПечатныхФорм.� �писаниеОрганизации(Сведен ияОПокупателе, "КПП,", Ложь);
ПараметрыШапки.Вставить("ИННПокупателя", "ИНН/КПП покупателя: "
+ ФормированиеПечатныхФорм.� �писаниеОрганизации(Сведен ияОПокупателе, "ИНН,", Ложь)
+ ?(Не ПустаяСтрока(КПП), "/" + КПП, ""));

ПараметрыШапки.Вставить("Валюта", НСтр("ru='Валюта: наименование, код Российский рубль, 643'"));


ПараметрыШапки.Вставить("Договор", "Договор: " + СсылкаНаОбъект.Договор);




ОбластьМакета.Параметры.За полнить(ПараметрыШапки);

ТабличныйДокумент.Вывести( ОбластьМакета);

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

Процедура ЗаполнитьРеквизитыПодвала УПД(ОбластьПодвала, ДанныеПечати, СведенияОбОрганизации, СведенияОКонтрагенте)

ОбластьПодвала.Параметры.З аполнить(ДанныеПечати);

СтруктураПараметров = Новый Структура;

Если СведенияОбОрганизации.ЮрФ� �зЛицо = Перечисления.ЮрФизЛицо.ЮрЛ ицо Тогда
СтруктураПараметров.Встав� �ть("ФИОРуководителя", ДанныеПечати.Руководитель) ;
СтруктураПараметров.Встав� �ть("ФИОГлавногоБухгалтера", ДанныеПечати.ГлавныйБухга� �тер);
Иначе
СтруктураПараметров.Встав� �ть("ФИОПБОЮЛ", ДанныеПечати.Руководитель) ;
СтруктураПараметров.Встав� �ть("Свидетельство", СведенияОбОрганизации.Сви� �етельство);
КонецЕсли;

СтруктураПараметров.Встав� �ть("ФИОКладовщика", ФизическиеЛицаУТ.ФамилияИ� �ициалыФизЛица(ДанныеПечат и.Кладовщик));
СтруктураПараметров.Встав� �ть("ДолжностьКладовщика", ДанныеПечати.ДолжностьКла� �овщика);

ПолнаяДатаДокумента = Формат(ДанныеПечати.Дата, "ДФ=""дд ММММ гггг """"года""""""");
ДлинаСтроки = СтрДлина(ПолнаяДатаДокуме� �та);
ПервыйРазделитель = Найти(ПолнаяДатаДокумента, " ");
ВторойРазделитель = Найти(Прав(ПолнаяДатаДокум ента, ДлинаСтроки - ПервыйРазделитель), " ") + ПервыйРазделитель;
СтруктураПараметров.Встав� �ть("ДатаДокумента",
"""" + Лев(ПолнаяДатаДокумента, ПервыйРазделитель -1 ) + """ "
+ Сред(ПолнаяДатаДокумента, ПервыйРазделитель + 1, ВторойРазделитель - ПервыйРазделитель - 1) + " "
+ Прав(ПолнаяДатаДокумента, ДлинаСтроки - ВторойРазделитель));

КПППоставщика = ФормированиеПечатныхФорм.� �писаниеОрганизации(Сведен ияОбОрганизации, "КПП,", Ложь);
ИННПоставщика = ФормированиеПечатныхФорм.� �писаниеОрганизации(Сведен ияОбОрганизации, "ИНН,", Ложь);
Если ЗначениеЗаполнено(КПППост� �вщика) Тогда
ПредставлениеОрганизации = СтроковыеФункцииКлиентСер вер.ПодставитьПараметрыВС� �року(НСтр("ru = '%1, ИНН/КПП %2/%3'"),
СведенияОбОрганизации.Офи� �иальноеНаименование,
ИННПоставщика,
КПППоставщика);
ИначеЕсли ЗначениеЗаполнено(ИННПост� �вщика) Тогда
ПредставлениеОрганизации = СтроковыеФункцииКлиентСер вер.ПодставитьПараметрыВС� �року(НСтр("ru = '%1, ИНН %2'"),
СведенияОбОрганизации.Офи� �иальноеНаименование,
ИННПоставщика);
Иначе
ПредставлениеОрганизации = СведенияОбОрганизации.Офи� �иальноеНаименование;
КонецЕсли;
СтруктураПараметров.Встав� �ть("ПредставлениеОрганизации", ПредставлениеОрганизации);

КПППокупателя = ФормированиеПечатныхФорм.� �писаниеОрганизации(Сведен ияОКонтрагенте, "КПП,", Ложь);
ИННПокупателя = ФормированиеПечатныхФорм.� �писаниеОрганизации(Сведен ияОКонтрагенте, "ИНН,", Ложь);
Если ЗначениеЗаполнено(КПППоку� �ателя) Тогда
ПредставлениеКонтрагента = СтроковыеФункцииКлиентСер вер.ПодставитьПараметрыВС� �року(НСтр("ru = '%1, ИНН/КПП %2/%3'"),
ФормированиеПечатныхФорм.� �писаниеОрганизации(Сведен ияОКонтрагенте, "ПолноеНаименование", Ложь),
ИННПокупателя,
КПППокупателя);
ИначеЕсли ЗначениеЗаполнено(ИННПоку� �ателя) Тогда
ПредставлениеКонтрагента = СтроковыеФункцииКлиентСер вер.ПодставитьПараметрыВС� �року(НСтр("ru = '%1, ИНН %2'"),
ФормированиеПечатныхФорм.� �писаниеОрганизации(Сведен ияОКонтрагенте, "ПолноеНаименование", Ложь),
ИННПокупателя);
Иначе
ПредставлениеКонтрагента = ФормированиеПечатныхФорм.� �писаниеОрганизации(Сведен ияОКонтрагенте, "ПолноеНаименование", Ложь);
КонецЕсли;
СтруктураПараметров.Встав� �ть("ПредставлениеКонтрагента", ПредставлениеКонтрагента);

Если ЗначениеЗаполнено(ДанныеП� �чати.ДоверенностьНомер) И ЗначениеЗаполнено(ДанныеП� �чати.ДоверенностьДата)
И (ЗначениеЗаполнено(ДанныеП ечати.ДоверенностьВыдана) Или ЗначениеЗаполнено(ДанныеП� �чати.ДоверенностьЛицо)) Тогда

ТекстОснования = СокрЛП(ДанныеПечати.Основа ние) + "; "
+ СтроковыеФункцииКлиентСер вер.ПодставитьПараметрыВС� �року(НСтр("ru = 'по доверенности №%1 от %2, выданной %3 %4'"),
ДанныеПечати.Доверенность� �омер,
Формат(ДанныеПечати.Довере нностьДата, "ДФ='дд ММММ гггг'"),
ДанныеПечати.Доверенность� �ыдана,
ДанныеПечати.Доверенность� �ицо);
СтруктураПараметров.Встав� �ть("Основание", ТекстОснования);

КонецЕсли;

ОбластьПодвала.Параметры.З аполнить(СтруктураПарамет� �ов);

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

Процедура ЗаполнитьТабличныйДокумен тУПД(ТабличныйДокумент, ДанныеДляПечати, ОбъектыПечати, КомплектыПечати = Неопределено) Экспорт

ВалютаРегламентированного Учета = Константы.ВалютаРегламент� �рованногоУчета.Получить();

Макет = ПолучитьМакет("УПД");

ДанныеПечати = ДанныеДляПечати.Результат� �оШапке.Выбрать();
ВыборкаПоДокументам = ДанныеДляПечати.Результат� �оТабличнойЧасти.Выбрать(О� �ходРезультатаЗапроса.ПоГр уппировкам);

ПервыйДокумент = Истина;
Пока ДанныеПечати.Следующий() Цикл

// Для печати комплектов
Если КомплектыПечати <> Неопределено И КомплектыПечати.Колонки.На йти("Ссылка") <> Неопределено Тогда
КомплектПечатиПоСсылке = КомплектыПечати.Найти(Данн ыеПечати.Ссылка,"Ссылка");
Если КомплектПечатиПоСсылке = Неопределено Тогда
КомплектПечатиПоСсылке = КомплектыПечати[0];
КонецЕсли;
Если КомплектПечатиПоСсылке.Эк� �емпляров = 0 Тогда
Продолжить
КонецЕсли;
КонецЕсли;

Если Не ЗначениеЗаполнено(ДанныеП� �чати.Номер) Тогда

Если ДанныеПечати.Номер = Неопределено Тогда
Текст = СтроковыеФункцииКлиентСер вер.ПодставитьПараметрыВС� �року(
НСтр("ru = 'Для документа %1 не введен %2'"),
ДанныеПечати.Ссылка,
ДанныеПечати.Представлени� �Документа);
ОбщегоНазначенияКлиентСер вер.СообщитьПользователю(
Текст,
ДанныеПечати.Ссылка,
,
"ТекстСчетФактура");
Иначе
Текст = СтроковыеФункцииКлиентСер вер.ПодставитьПараметрыВС� �року(
НСтр("ru = 'Для документа %1 не заполнены данные предъявленной счет-фактуры поставщика'"),
ДанныеПечати.Ссылка);
ОбщегоНазначенияКлиентСер вер.СообщитьПользователю(
Текст,
ДанныеПечати.Ссылка,
"ПредъявленСчетФактура");
КонецЕсли;

Иначе

Если Не ПервыйДокумент Тогда
ТабличныйДокумент.Вывести� �оризонтальныйРазделитель� �траниц();
КонецЕсли;

ПервыйДокумент = Ложь;
НомерСтрокиНачало = ТабличныйДокумент.ВысотаТ� �блицы + 1;

// Выводим общие реквизиты шапки
СведенияОбОрганизации = ФормированиеПечатныхФорм.� �веденияОЮрФизЛице(ДанныеП ечати.Организация, ДанныеПечати.Дата);
СведенияОКонтрагенте = ФормированиеПечатныхФорм.� �веденияОЮрФизЛице(ДанныеП ечати.Контрагент, ДанныеПечати.Дата);
ЗаполнитьРеквизитыШапкиУП Д(ДанныеПечати, СведенияОбОрганизации, СведенияОКонтрагенте, Макет, ТабличныйДокумент);

// Выводим заголовок таблицы
ЗаголовокТаблицы = Макет.ПолучитьОбласть("ЗаголовокТаблицы");
ТабличныйДокумент.Вывести( ЗаголовокТаблицы);

НомерСтраницы = 1;

// Инициализация итогов в документе
ИтоговыеСуммы = СтруктураИтоговыеСуммы();

// Создаем массив для проверки вывода
МассивВыводимыхОбластей = Новый Массив;

// Выводим многострочную часть документа
ОбластьСтрокаСтандарт = Макет.ПолучитьОбласть("Строка");
ОбластьИтого = Макет.ПолучитьОбласть("Итого");
ОбластьПодвал = Макет.ПолучитьОбласть("Подвал");

ЗаполнитьРеквизитыПодвала УПД(ОбластьПодвал, ДанныеПечати, СведенияОбОрганизации, СведенияОКонтрагенте);

Если ДанныеДляПечати.Результат� �оШапке.Колонки.Найти("ВыводитьКодНоменклатуры") <> Неопределено Тогда
ВыводитьКодНоменклатуры = ДанныеПечати.ВыводитьКодН� �менклатуры;
Иначе
ВыводитьКодНоменклатуры = Истина;
КонецЕсли;

СтруктураПоиска = Новый Структура("Ссылка", ДанныеПечати.Ссылка);
ВыборкаПоДокументам.Найти� �ледующий(СтруктураПоиска);

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

СтрокаТовары = ВыборкаПоДокументам.Выбра� �ь();
КоличествоСтрок = СтрокаТовары.Количество();
ТолькоСтавкаБезНДС = Истина;
НомерСтроки = 0;
Пока СтрокаТовары.Следующий() Цикл

Если ТипЗнч(ДанныеПечати.Ссылка ) = Тип("ДокументСсылка.ОтчетКомис� �ионера")
ИЛИ ТипЗнч(ДанныеПечати.Ссылка ) = Тип("ДокументСсылка.ОтчетПоКом� �ссииМеждуОрганизациями") Тогда
Если СтрокаТовары.Покупатель <> ДанныеПечати.Покупатель
ИЛИ (ДанныеПечати.Покупатель <> НЕОПРЕДЕЛЕНО
И НачалоДня(СтрокаТовары.Дат а) <> НачалоДня(ДанныеПечати.Дат а)
И СтрокаТовары.Дата <> '00010101') Тогда
Продолжить;
КонецЕсли;
КонецЕсли;

Если НаборыСервер.Использовать� �бластьНабор(СтрокаТовары, ИспользоватьНаборы) Тогда
ОбластьСтрока = ОбластьСтрокаНабор;
ИначеЕсли НаборыСервер.Использовать� �бластьКомплектующие(Строк аТовары, ИспользоватьНаборы) Тогда
ОбластьСтрока = ОбластьСтрокаКомплектующи е;
Иначе
ОбластьСтрока = ОбластьСтрокаСтандарт;
КонецЕсли;

Если НаборыСервер.ВыводитьТоль� �оЗаголовок(СтрокаТовары, ИспользоватьНаборы) Тогда
ЗаполнитьРеквизитыСтрокиТ овара(СтрокаТовары, ОбластьСтрока, Неопределено);
Иначе
НомерСтроки = НомерСтроки + 1;
ЗаполнитьРеквизитыСтрокиТ овара(СтрокаТовары, ОбластьСтрока, НомерСтроки);
ПроставитьПрочеркиВПустые ПоляСтроки(ОбластьСтрока);
КонецЕсли;

СтруктураПараметров = Новый Структура;
Если СтрокаТовары.СтавкаНДС = Перечисления.СтавкиНДС.Без НДС Тогда
СтруктураПараметров.Встав� �ть("СтавкаНДС", НСтр("ru='без НДС'"));
СтруктураПараметров.Встав� �ть("СуммаНДС", НСтр("ru='без НДС'"));
ИначеЕсли СтрокаТовары.СтавкаНДС = Перечисления.СтавкиНДС.НДС 0 Тогда
СтруктураПараметров.Встав� �ть("СуммаНДС", 0);
ТолькоСтавкаБезНДС = Ложь;
Иначе
ТолькоСтавкаБезНДС = Ложь;
КонецЕсли;
Если Не НаборыСервер.ВыводитьТоль� �оЗаголовок(СтрокаТовары, ИспользоватьНаборы) Тогда
СтруктураПараметров.Встав� �ть("Акциз", "без акциза");
КонецЕсли;
ОбластьСтрока.Параметры.За полнить(СтруктураПараметр� �в);

МассивВыводимыхОбластей.О� �истить();
МассивВыводимыхОбластей.Д� �бавить(ОбластьСтрока);

Если НомерСтроки = КоличествоСтрок Тогда
МассивВыводимыхОбластей.Д� �бавить(ОбластьИтого);
МассивВыводимыхОбластей.Д� �бавить(ОбластьПодвал);
КонецЕсли;

Если НомерСтроки <> 1 И НЕ ТабличныйДокумент.Провери� �ьВывод(МассивВыводимыхОбл астей) Тогда
НомерСтраницы = НомерСтраницы + 1;
ТабличныйДокумент.Вывести� �оризонтальныйРазделитель� �траниц();
ТабличныйДокумент.Вывести( ЗаголовокТаблицы);
КонецЕсли;

ТабличныйДокумент.Вывести( ОбластьСтрока);

Если Не НаборыСервер.Использовать� �бластьКомплектующие(Строк аТовары, ИспользоватьНаборы) Тогда
РассчитатьИтоговыеСуммы(И� �оговыеСуммы, СтрокаТовары);
КонецЕсли;

КонецЦикла;

// Выводим итоги по документу
ДобавитьИтоговыеДанныеПод вала(ИтоговыеСуммы, НомерСтроки, ВалютаРегламентированного Учета);

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

КоличествоСтраниц = СтроковыеФункцииКлиентСер вер.ПодставитьПараметрыВС� �року(
НСтр("ru = 'Документ составлен на %1 %2'"),
НомерСтраницы,
ОбщегоНазначенияУТКлиентС ервер.ФормаМножественного� �исла(
НСтр("ru = 'листе'"), НСтр("ru = 'листах'"), НСтр("ru = 'листах'"), НомерСтраницы));
СтруктураПараметров = Новый Структура("КоличествоСтраниц", КоличествоСтраниц);
ОбластьПодвал.Параметры.За полнить(СтруктураПараметр� �в);
ТабличныйДокумент.Вывести( ОбластьПодвал);

// Выведем нужное количество экземпляров (при печати комплектов)
Если КомплектыПечати <> Неопределено
И КомплектыПечати.Колонки.На йти("Ссылка") <> Неопределено
И КомплектПечатиПоСсылке.Эк� �емпляров > 1 Тогда

ОбластьКопирования = ТабличныйДокумент.Получит� �Область(НомерСтрокиНачало ,,ТабличныйДокумент.Высота� �аблицы);
Для Итератор = 2 По КомплектПечатиПоСсылке.Эк� �емпляров Цикл
ТабличныйДокумент.Вывести� �оризонтальныйРазделитель� �траниц();
ТабличныйДокумент.Вывести( ОбластьКопирования);
КонецЦикла;

КонецЕсли;

УправлениеПечатью.ЗадатьО� �ластьПечатиДокумента(Табл ичныйДокумент, НомерСтрокиНачало, ОбъектыПечати,
ДанныеПечати.Ссылка);

КонецЕсли;

КонецЦикла;

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

Процедура ПроставитьПрочеркиВПустые ПоляСтроки(ОбластьМакета)

Для т = 0 По ОбластьМакета.Параметры.Ко личество() - 1 Цикл

ТекПараметр = ОбластьМакета.Параметры.По лучить(т);

Если НЕ ЗначениеЗаполнено(ТекПара� �етр) Тогда
ОбластьМакета.Параметры.Ус тановить(т, "--");
КонецЕсли;

КонецЦикла;

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

Процедура ЗаполнитьРеквизитыСтрокиТ овара(СтрокаТовары, ОбластьМакета, НомерСтроки, ВыводитьКодНоменклатуры = Истина)

ИспользоватьНаборы = ОбщегоНазначенияУТКлиентС ервер.ЕстьРеквизитОбъекта( СтрокаТовары, "ЭтоНабор");

ПрефиксИПостфикс = НаборыСервер.ПолучитьПреф� �ксИПостфикс(СтрокаТовары, ИспользоватьНаборы);

Если ИспользоватьНаборы
И СтрокаТовары.ЭтоКомплекту� �щие
И СтрокаТовары.ВариантПредс� �авленияНабораВПечатныхФо� �мах = Перечисления.ВариантыПред� �тавленияНаборовВПечатных� �ормах.НаборИКомплектующие
И (СтрокаТовары.ВариантРасче таЦеныНабора = Перечисления.ВариантыРасч� �таЦенНаборов.ЦенаЗадается ЗаНаборРаспределяетсяПоДо лям
ИЛИ СтрокаТовары.ВариантРасче� �аЦеныНабора = Перечисления.ВариантыРасч� �таЦенНаборов.ЦенаЗадается ЗаНаборРаспределяетсяПоЦе нам) Тогда
// Область должна остаться незаполненной
ОбластьМакета.Параметры.За полнить(НаборыСервер.Пусты еДанные());
ИначеЕсли ИспользоватьНаборы
И СтрокаТовары.ЭтоНабор
И СтрокаТовары.ВариантПредс� �авленияНабораВПечатныхФо� �мах = Перечисления.ВариантыПред� �тавленияНаборовВПечатных� �ормах.НаборИКомплектующие
И СтрокаТовары.ВариантРасче� �аЦеныНабора = Перечисления.ВариантыРасч� �таЦенНаборов.Рассчитывает сяИзЦенКомплектующих Тогда
// Область должна остаться незаполненной
ОбластьМакета.Параметры.За полнить(НаборыСервер.Пусты еДанные());
Иначе
ОбластьМакета.Параметры.За полнить(СтрокаТовары);
КонецЕсли;

СтруктураПараметров = Новый Структура("КоличествоМест, КоличествоВОдномМесте, НоменклатураКод", 0, 0, "");
ЗаполнитьЗначенияСвойств(� �труктураПараметров, СтрокаТовары);
ОкруглитьДоЦелого(Структу� �аПараметров.КоличествоМес т);
ОкруглитьДоЦелого(Структу� �аПараметров.КоличествоВОд номМесте);
СтруктураПараметров.Встав� �ть("НомерСтроки", НомерСтроки);
СтруктураПараметров.Встав� �ть("ПредставлениеНоменклатуры", ПрефиксИПостфикс.Префикс + НоменклатураКлиентСервер.� �редставлениеНоменклатуры� �ляПечати(
СтрокаТовары.Номенклатура� �аименование,
СтрокаТовары.Характеристи� �аНаименование,
,
,
,
СтрокаТовары.ЭтоВозвратна� �Тара) + ПрефиксИПостфикс.Постфикс) ;

Если Не ВыводитьКодНоменклатуры Тогда
СтруктураПараметров.Номен� �латураКод = "";
КонецЕсли;
ОбластьМакета.Параметры.За полнить(СтруктураПараметр� �в);

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

Процедура ДобавитьИтоговыеДанныеПод вала(ИтоговыеСуммы, ВсегоНомеров, ВалютаРегламентированного Учета)

ИтоговыеСуммы.Вставить("КоличествоПорядковыхНомер овЗаписейПрописью", ЧислоПрописью(ВсегоНомеро� �, ,",,,,,,,,0"));
ИтоговыеСуммы.Вставить("СуммаПрописью", РаботаСКурсамиВалют.Сформ� �роватьСуммуПрописью(Итого выеСуммы.ИтогоСуммаСНДС, ВалютаРегламентированного Учета));

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

Функция СтруктураИтоговыеСуммы()

Структура = Новый Структура;

СтруктураРесурсовДляИтого в = СтруктураРесурсовДляИтого в();

Для Каждого Элемент Из СтруктураРесурсовДляИтого в Цикл
Структура.Вставить("Итого"+Элемент.Ключ+"НаСтранице", 0);
Структура.Вставить("Итого"+Элемент.Ключ, 0);
КонецЦикла;

Возврат Структура;

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

Процедура РассчитатьИтоговыеСуммы(И� �оговыеСуммы, СтрокаТовары)

СтруктураСуммПоСтроке = СтруктураРесурсовДляИтого в();

ЗаполнитьЗначенияСвойств(� �труктураСуммПоСтроке, СтрокаТовары);
ОкруглитьДоЦелого(Структу� �аСуммПоСтроке.КоличествоМ ест);
Для Каждого Элемент Из СтруктураСуммПоСтроке Цикл
Если ЗначениеЗаполнено(Элемент. Значение) Тогда
ИтоговыеСуммы["Итого"+Элемент.Ключ+"НаСтранице"] = ИтоговыеСуммы["Итого"+Элемент.Ключ+"НаСтранице"] + Элемент.Значение;
ИтоговыеСуммы["Итого"+Элемент.Ключ] = ИтоговыеСуммы["Итого"+Элемент.Ключ] + Элемент.Значение;
КонецЕсли;
КонецЦикла;

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

Процедура ОкруглитьДоЦелого(Округля� �моеЧисло)
Если ЗначениеЗаполнено(Округля� �моеЧисло) Тогда
Если ОкругляемоеЧисло <> Цел(ОкругляемоеЧисло) Тогда
ОкругляемоеЧисло = Цел(ОкругляемоеЧисло) + 1;
КонецЕсли;
КонецЕсли;
КонецПроцедуры

Функция СведенияОГрузоотправителе (ДанныеПечати)

Если ТипЗнч(ДанныеПечати.Грузоо тправитель) = Тип("СправочникСсылка.Регистра� �ииВНалоговомОргане") Тогда
СведенияОГрузоотправителе = Справочники.РегистрацииВН� �логовомОргане.СведенияОПо дразделении(ДанныеПечати.Г рузоотправитель);
Иначе
СведенияОГрузоотправителе = ФормированиеПечатныхФорм.� �веденияОЮрФизЛице(ДанныеП ечати.Грузоотправитель, ДанныеПечати.Дата);
КонецЕсли;

Возврат СведенияОГрузоотправителе ;

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

Функция СтруктураРесурсовДляИтого в()

Структура = Новый Структура;

Структура.Вставить("СуммаБезНДС", 0);
Структура.Вставить("СуммаНДС", 0);
Структура.Вставить("СуммаСНДС", 0);
Структура.Вставить("Количество", 0);
Структура.Вставить("КоличествоМест", 0);
Структура.Вставить("КоличествоПринято", 0);
Структура.Вставить("МассаБрутто", 0);
Структура.Вставить("МассаНетто", 0);
Структура.Вставить("Сумма", 0);

Структура.Вставить("РазницаБезНДСУвеличение", 0);
Структура.Вставить("РазницаБезНДСУменьшение", 0);
Структура.Вставить("РазницаНДСУвеличение", 0);
Структура.Вставить("РазницаНДСУменьшение", 0);
Структура.Вставить("РазницаСНДСУвеличение", 0);
Структура.Вставить("РазницаСНДСУменьшение", 0);

Возврат Структура;

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

Функция СведенияОВнешнейОбработке () Экспорт
ПараметрыРегистрации = Новый Структура;
МассивНазначений = Новый Массив;

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

ДобавитьКоманду(ТаблицаКо� �анд, "УПД с договором", "УПДдляИП", "ВызовСерверногоМетода", Истина, "ПечатьMXL");

ПараметрыРегистрации.Вста� �ить("Команды", ТаблицаКоманд);

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

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

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

Команды = Новый ТаблицаЗначений;

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

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

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

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

Команды.Колонки.Добавить("Модификатор", Новый ОписаниеТипов("Строка"));

Возврат Команды;

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

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

НоваяКоманда.Представлени� � = Представление;

НоваяКоманда.Идентификато� �= Идентификатор;

НоваяКоманда.Использовани� �= Использование;

НоваяКоманда.ПоказыватьОп� �вещение= ПоказыватьОповещение;

НоваяКоманда.Модификатор= Модификатор;

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