PDA

Просмотр полной версии : Внешняя обработка



kirill96
16.07.2019, 16:42
Здравствуйте, как в созданной внешней обработки печатной формы акта об оказание услуг добавить, что бы выводился номер акта?
Код обработки

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

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

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

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

ДобавитьКоманду(ТаблицаКо� �анд,
НСтр("ru = 'Акт об оказании услуг 2012'"),
"Акт об оказании услуг 2012",
"ВызовСерверногоМетода",
Истина,
"ПечатьMXL");

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

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

КонецФункции // СведенияОВнешнейОбработке ()

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

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


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

// Устанавливаем признак доступности печати покомплектно.
ПараметрыВывода.ДоступнаП� �чатьПоКомплектно = Истина;

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

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

// Функция формирует табличный документ с печатной формой накладной,
// разработанной методистами
//
// Возвращаемое значение:
// Табличный документ - печатная форма накладной
//
Функция ПечатьАктаОбОказанииУслуг 2012(МассивОбъектов, ОбъектыПечати)

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

ДопКолонка = Константы.ДополнительнаяК� �лонкаПечатныхФормДокумен� �ов.Получить();
Если ДопКолонка = Перечисления.Дополнительн� �яКолонкаПечатныхФормДоку� �ентов.Артикул Тогда
ВыводитьКоды = Истина;
Колонка = "Артикул";
ТекстКодАртикул = "Артикул";
ИначеЕсли ДопКолонка = Перечисления.Дополнительн� �яКолонкаПечатныхФормДоку� �ентов.Код Тогда
ВыводитьКоды = Истина;
Колонка = "Код";
ТекстКодАртикул = "Код";
Иначе
ВыводитьКоды = Ложь;
Колонка = "";
ТекстКодАртикул = "Код";
КонецЕсли;

Если ВыводитьКоды Тогда
ОбластьШапки = "ШапкаСКодом";
ОбластьСтроки = "СтрокаСКодом";
Иначе
ОбластьШапки = "ШапкаТаблицы";
ОбластьСтроки = "Строка";
КонецЕсли;

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

ЗапросУслуги = Новый Запрос;
ЗапросУслуги.УстановитьПа� �аметр("ТекущийДокумент", МассивОбъектов[0]);
ЗапросУслуги.УстановитьПа� �аметр("Курс", ЗаполнениеДокументов.Курс� �окумента(МассивОбъектов[0], ВалютаРегламентированного Учета));
ЗапросУслуги.УстановитьПа� �аметр("Кратность", ЗаполнениеДокументов.Крат� �остьДокумента(МассивОбъек тов[0], ВалютаРегламентированного Учета));

ЧастьЗапросаДляВыбораСоде ржанияУслуг = ОбщегоНазначенияБПВызовСе рвера.ПолучитьЧастьЗапрос� �ДляВыбораСодержанияУслуг("РеализацияТоваровУслуг");

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


Если МассивОбъектов[0].Проведен И (Шапка.РасчетыВУсловныхЕди ницах
ИЛИ (Шапка.ВалютаДокумента <> ВалютаРегламентированного Учета И МассивОбъектов[0].Дата >= '20090101000000')) Тогда

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

РасчетСуммыНДСПоСтавке = УчетНДС.РасчетНДСвРубляхП� �СтавкеДокумента(Шапка.Дат� �);

Если НЕ СуммаВзаиморасчетов = NULL Тогда

ТаблицаУслуги.Колонки.Доба вить("СуммаБезНДС");

МассивРаспределения = Новый Массив;

Для Каждого СтрокаТовар Из ТаблицаУслуги Цикл

СуммаСНДС = СтрокаТовар.Сумма + ?(Шапка.СуммаВключаетНДС, 0, СтрокаТовар.СуммаНДС);
СуммаБезНДС = СуммаСНДС - СтрокаТовар.СуммаНДС;

МассивРаспределения.Добав� �ть(СуммаСНДС);
СтрокаТовар.СуммаБезНДС = СуммаБезНДС;

КонецЦикла;

ТаблицаУслуги.Колонки.Доба вить("СуммаРублевая");
УчетНДС.РаспределитьСумму� �оСтолбцу(МассивРаспределе ния, СуммаВзаиморасчетов, ТаблицаУслуги, "СуммаРублевая");

Для Каждого СтрокаТовар Из ТаблицаУслуги Цикл

Если РасчетСуммыНДСПоСтавке Тогда
//Выделение суммы НДС, Расчет суммы без НДС
ЗначениеСтавкиНДС = УчетНДС.ПолучитьСтавкуНДС( СтрокаТовар.СтавкаНДС);

СтрокаТовар.СуммаНДС = ?(ЗначениеСтавкиНДС = 0, 0, Окр(СтрокаТовар.СуммаРубле вая * ЗначениеСтавкиНДС/(100+ЗначениеСтавкиНДС),2));
СтрокаТовар.Сумма = СтрокаТовар.СуммаРублевая - СтрокаТовар.СуммаНДС;

Иначе
МассивРаспределения.Очист� �ть();
МассивРаспределения.Добав� �ть(СтрокаТовар.СуммаБезНД� �);
МассивРаспределения.Добав� �ть(СтрокаТовар.СуммаНДС);
МассивРаспределенныхСумм = ОбщегоНазначения.Распреде� �итьПропорционально(Строка Товар.СуммаРублевая, МассивРаспределения);
Если МассивРаспределенныхСумм <> Неопределено Тогда
СтрокаТовар.Сумма = МассивРаспределенныхСумм[0];
СтрокаТовар.СуммаНДС = МассивРаспределенныхСумм[1];
КонецЕсли;
КонецЕсли;

Если Шапка.СуммаВключаетНДС Тогда
СтрокаТовар.Сумма = СтрокаТовар.Сумма+СтрокаТо вар.СуммаНДС;
КонецЕсли;

КонецЦикла;

КонецЕсли;

КонецЕсли;

ТабДокумент = Новый ТабличныйДокумент;
ТабДокумент.ИмяПараметров� �ечати = "ПАРАМЕТРЫ_ПЕЧАТИ_Реализаци яТоваровУслуг_Акт";
Макет = ПолучитьМакет("Акт");


//+Договор SnT
ОбластьМакета = Макет.ПолучитьОбласть ("Договор");
//ОбластьМакета.Параметры.За полнить(Шапка);
СведенияОДоговореНазвание Д = МассивОбъектов[0].ДоговорКонтрагента.Наимен ование;

НомерSnT = МассивОбъектов[0].ДоговорКонтрагента.Номер;
Если ЗначениеЗаполнено (НомерSnT) Тогда
НомерSnT = "№ " + Формат(НомерSnT, "ЧДЦ=0");
СведенияОДоговореНомерД = НомерSnT;
ИначеЕсли Не ЗначениеЗаполнено (НомерSnT) Тогда
КонецЕсли;

ДатаSnT = МассивОбъектов[0].ДоговорКонтрагента.Дата ;
Если ЗначениеЗаполнено (ДатаSnT) Тогда
ДатаSnT = "от " + Формат(ДатаSnT, "ДЛФ=DD");
СведенияОДоговореДатаД = ДатаSnT;
ИначеЕсли Не ЗначениеЗаполнено (ДатаSnT) Тогда
КонецЕсли;

ДатаДок = МассивОбъектов[0].Дата;
ДатаДок = Формат(ДатаДок, "ДЛФ=DD");
ОбластьМакета.Параметры.Да таДок = ДатаДок;

//ОбластьМакета.Параметры.На званиеД = СведенияОДоговореНазвание Д ;
ОбластьМакета.Параметры.Но мерД = СведенияОДоговореНомерД ;
ОбластьМакета.Параметры.Да таД = СведенияОДоговореДатаД ;
ТабДокумент.Вывести(Област ьМакета);
//-Договор SnT ////////////////////////////////////





ОбластьМакета = Макет.ПолучитьОбласть("Поставщик");

Дата = МассивОбъектов[0].Дата;
Строка = "";
Строка = Строка + Формат(Дата,"ДФ=""ММММ гггг""");
ОбластьМакета.Параметры.Те кущийМесяц = Строка +" "+ " г.";
ОбластьМакета.Параметры.Но мерД = СведенияОДоговореНомерД ;
ОбластьМакета.Параметры.Да таД = СведенияОДоговореДатаД ;

//Получаем наименование, должность, фио контрагента
СведенияОКонтрагенте = БухгалтерскийУчетПереопре деляемый.СведенияОЮрФизЛи� �е(Шапка.Поставщик, Шапка.Дата);
ОбластьМакета.Параметры.Пр едставлениеПолучателя = МассивОбъектов[0].Контрагент.НаименованиеПо лное;

ПредставительПолучателя = МассивОбъектов[0].Контрагент.ОсновноеКонтак тноеЛицо;

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

Если ПредставительПолучателяФа милияРодительныйПадеж = "" И Не ПредставительПолучателя.П� �стая() Тогда
Сообщить("Функция склонения фамилии будет отключена!");
ПредставительПолучателяФа милияРодительныйПадеж = ПредставительПолучателя.Ф� �милия;
КонецЕсли;
ПредставительПолучателяРо дительныйПадеж = ПредставительПолучателяФа милияРодительныйПадеж + " " + Лев(СокрЛП(ПредставительПо лучателя.Имя),1) +
"." + Лев(СокрЛП(ПредставительПо лучателя.Отчество),1) + ".";

Если ПредставительПолучателя.П� �стая() Тогда

ПредставительПолучателяРо дительныйПадеж = "____________________";

КонецЕсли;

ОбластьМакета.Параметры.Пр едставительПолучателя = ПредставительПолучателяРо дительныйПадеж ;

Должность = МассивОбъектов[0].Контрагент.ОсновноеКонтак тноеЛицо.Должность;
ОбластьМакета.Параметры.До лжность = Должность ;

//////Получаем наименование, должность, фио контрагента


//Выводим сумму цифрой и сумму прописью, и подписи
Сумма = ТаблицаУслуги.Итог("Сумма");
СуммаНДС = ТаблицаУслуги.Итог("СуммаНДС");

ОбластьМакета.Параметры.Вс его = ОбщегоНазначенияБПВызовСе рвера.ФорматСумм(Сумма);

СуммаКПрописи = Сумма + ?(Шапка.СуммаВключаетНДС, 0, СуммаНДС);

ОбластьМакета.Параметры.Су ммаПрописью = ОбщегоНазначенияБПВызовСе рвера.СформироватьСуммуПр� �писью(СуммаКПрописи, ВалютаРегламентированного Учета);

//ОбластьМакета.Параметры.По ставщик = Шапка.Поставщик;

// //////Выводим сумму цифрой и сумму прописью

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


Возврат ТабДокумент;

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

//Преобразовываем Фамилию контактного лица в родительный падеж
//Функция РодительныйПадеж(Фамилия)
// Попытка
// Компонента = "NameDecl.dll";
// ЗагрузитьВнешнююКомпонент у(Компонента);
// КомпонентСклонения = Новый("AddIn.NameDeclension");
// Исключение
// Сообщить("Не удалось загрузить внешнюю компоненту склонения имен по причине: " + ОписаниеОшибки());
// Сообщить("Обратитесь к системному администратору для регистрации компоненты NAMEDECL.DLL!");
// Возврат "";
// КонецПопытки;
//
// НомерСклонения = 2; // Родительный падеж
// ТекстВРодительном = КомпонентСклонения.Проскл� �нять(Фамилия,НомерСклонен� �я);
//
// Возврат ТекстВРодительном;
//
//КонецФункции