Re: Вывести код УКТВЭД на печатную форму счета
Функция ПечатьСчетаЗаказа(Тип)


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

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

Шапка = Запрос.Выполнить().Выбрать();
Шапка.Следующий();

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

ЗапросТовары = Запрос.Выполнить().Выгрузить();

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

| Сумма
|ИЗ
| Документ.СчетНаОплатуПокупателю.ВозвратнаяТара КАК СчетНаОплатуПокупателю
|
|ГДЕ
| СчетНаОплатуПокупателю.Ссылка = &ТекущийДокумент
|
|УПОРЯДОЧИТЬ ПО
| НомерСтрокиТЧ
|";

ЗапросТара = Запрос.Выполнить().Выгрузить();

ТабДокумент = Новый ТабличныйДокумент;
ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_СчетНаОплатуПокупателю_СчетЗаказ";

Макет = ПолучитьМакет("СчетЗаказ");

// печать производится на языке, указанном в настройках пользователя
КодЯзыкаПечать = Локализация.ПолучитьЯзыкФормированияПечатныхФорм(УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(глЗначениеПеременной("глТекущийПользователь"), "РежимФормированияПечатныхФорм"));
Макет.КодЯзыкаМакета = КодЯзыкаПечать;

// Выводим шапку накладной
СведенияОПоставщике = УправлениеКонтактнойИнформацией.СведенияОЮрФизЛице(Шапка.Поставщик, Шапка.Дата,,,КодЯзыкаПечать);
СведенияОПокупателе = УправлениеКонтактнойИнформацией.СведенияОЮрФизЛице(Шапка.Покупатель, Шапка.Дата,,,КодЯзыкаПечать);

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

ОбластьМакета = Макет.ПолучитьОбласть("Заголовок");
Если Тип = "Счет" Тогда
Если Шапка.ВидДоговораКонтрагента = Перечисления.ВидыДоговоровКонтрагентов.СКомиссионером  Тогда
ОбластьМакета.Параметры.ТекстЗаголовка = ОбщегоНазначения.СформироватьЗаголовокДокумента(Шапка, НСтр("ru='Список товаров на комиссию';uk='Список товарів на комісію'",КодЯзыкаПечать),КодЯзыкаПечать);
Иначе
ОбластьМакета.Параметры.ТекстЗаголовка = ОбщегоНазначения.СформироватьЗаголовокДокумента(Шапка, НСтр("ru='Счет на оплату';uk='Рахунок на оплату'",КодЯзыкаПечать),КодЯзыкаПечать);
КонецЕсли;
Иначе
ОбластьМакета.Параметры.ТекстЗаголовка = ОбщегоНазначения.СформироватьЗаголовокДокумента(Шапка, НСтр("ru='Заказ покупателя';uk='Замовлення покупця'",КодЯзыкаПечать),КодЯзыкаПечать);
КонецЕсли;
ТабДокумент.Вывести(ОбластьМакета);

ОбластьМакета = Макет.ПолучитьОбласть("Поставщик");
ОбластьМакета.Параметры.Заполнить(Шапка);
ОбластьМакета.Параметры.ПредставлениеПоставщика = ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОПоставщике, "ПолноеНаименование,",,КодЯзыкаПечать);

Если Тип = "Счет" Тогда
ОбластьМакета.Параметры.РеквизитыПоставщика =  НСтр("ru='Т/с ';uk='П/р '",КодЯзыкаПечать) + НомерСчета + ", Банк " + Банк + ", МФО " + МФО + Символы.ПС
+ ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОПоставщике, "ЮридическийАдрес,Телефоны,/,КодПоЕДРПОУ,ИНН,НомерСвидетельства,/,ИнформацияОСтатусеПлательщикаНалогов,",,КодЯзыкаПечать);
Иначе
ОбластьМакета.Параметры.РеквизитыПоставщика = ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОПоставщике, "НомерСчета,Банк,МФО,/,ЮридическийАдрес,Телефоны,/,КодПоЕДРПОУ,ИНН,НомерСвидетельства,/,ПлательщикНалогаНаПрибыль,",,КодЯзыкаПечать);
КонецЕсли;
ТабДокумент.Вывести(ОбластьМакета);

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

Если Тип = "Счет" Тогда
// Выводим дополнительно информацию о договоре
СписокДополнительныхПараметров = "ДоговорНаименованиеДляПечати,";
МассивСтруктурСтрок = ФормированиеПечатныхФорм.ДополнительнаяИнформация(Шапка,СписокДополнительныхПараметров,КодЯзыкаПечать);

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

ЕстьСкидки = ЗапросТовары.Итог("Скидка") + ЗапросТовары.Итог("АвтоматическаяСкидка") <> 0;

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

Если Товары.Итог("КоличествоМест") > 0 Тогда
ОбластьШапки  = ОбластьШапки  + "Мест";
ОбластьСтроки = ОбластьСтроки + "Мест";
Конецесли;

Если ЕстьСкидки Тогда
ОбластьШапки  = ОбластьШапки  + "Скидка";
ОбластьСтроки = ОбластьСтроки + "Скидка";
КонецЕсли;

// Вывести табличную часть (товары и услуги)
ОбластьМакета = Макет.ПолучитьОбласть(ОбластьШапки);
Если ВыводитьКоды Тогда
ОбластьМакета.Параметры.Колонка = Колонка;
КонецЕсли;

Суффикс = "";
Если Шапка.УчитыватьНДС Тогда
Если Шапка.СуммаВключаетНДС Тогда
Суффикс  = Суффикс  + НСтр("ru=' с ';uk=' з '",КодЯзыкаПечать);
Иначе
Суффикс  = Суффикс  + НСтр("ru=' без ';uk=' без '",КодЯзыкаПечать);
КонецЕсли;
Суффикс = Суффикс  + НСтр("ru='НДС';uk='ПДВ'",КодЯзыкаПечать);
КонецЕсли;
ОбластьМакета.Параметры.Цена  = НСтр("ru='Цена';uk='Ціна'",КодЯзыкаПечать) + Суффикс;
ОбластьМакета.Параметры.Сумма = НСтр("ru='Сумма';uk='Сума'",КодЯзыкаПечать)+ Суффикс;

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

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

Сумма    = 0;
СуммаНДС = 0;
ВсегоСкидок    = 0;
ВсегоБезСкидок = 0;

Для каждого ВыборкаСтрокТовары из ЗапросТовары Цикл

Если НЕ ЗначениеЗаполнено(ВыборкаСтрокТовары.Номенклатура) Тогда
Сообщить("В одной из строк не заполнено значение номенклатуры - строка при печати пропущена.", СтатусСообщения.Важное);
Продолжить;
КонецЕсли;

ОбластьМакета.Параметры.Заполнить(ВыборкаСтрокТовары);
ОбластьМакета.Параметры.НомерСтроки = ЗапросТовары.Индекс(ВыборкаСтрокТовары) + 1;
ОбластьМакета.Параметры.Товар       = СокрЛП(ВыборкаСтрокТовары.Товар) + ФормированиеПечатныхФорм.ПредставлениеСерий(ВыборкаСтрокТовары);

Если ВыводитьКоды Тогда
ОбластьМакета.Параметры.КодАртикул = ВыборкаСтрокТовары.КодАртикул;
КонецЕсли;

// Скидка может быть NULL
ПроцентСкидки = ?(НЕ ЗначениеЗаполнено(ВыборкаСтрокТовары.Скидка),0,ВыборкаСтрокТовары.Скидка)
              + ?(НЕ ЗначениеЗаполнено(ВыборкаСтрокТовары.АвтоматическаяСкидка),0,ВыборкаСтрокТовары.АвтоматическаяСкидка);

Скидка = ?(ПроцентСкидки < 100, ВыборкаСтрокТовары.Сумма  / (100 - ПроцентСкидки)* ПроцентСкидки, ВыборкаСтрокТовары.Цена * ВыборкаСтрокТовары.Количество);

Если ЕстьСкидки Тогда
ОбластьМакета.Параметры.Скидка         = Скидка;
ОбластьМакета.Параметры.СуммаБезСкидки = ВыборкаСтрокТовары.Сумма + Скидка;
КонецЕсли;

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

Сумма    = Сумма    + ВыборкаСтрокТовары.Сумма;
СуммаНДС = СуммаНДС + ВыборкаСтрокТовары.СуммаНДС;
ВсегоСкидок    = ВсегоСкидок + Скидка;
ВсегоБезСкидок = Сумма + ВсегоСкидок;

КонецЦикла;

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

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

// Вывести ИтогоНДС
Если Шапка.УчитыватьНДС Тогда
// НДС
ОбластьМакета = Макет.ПолучитьОбласть("ИтогоНДС");
ОбластьМакета.Параметры.ВсегоНДС = ОбщегоНазначения.ФорматСумм(СуммаНДС,,"''");
ОбластьМакета.Параметры.НДС      = ?(Шапка.СуммаВключаетНДС, НСтр("ru='В том числе НДС:';uk='У тому числі ПДВ:'",КодЯзыкаПечать), НСтр("ru='Сумма НДС:';uk='Сума ПДВ:'",КодЯзыкаПечать));
ТабДокумент.Вывести(ОбластьМакета);

// всего с НДС (если сумма не включает НДС)
Если НЕ Шапка.СуммаВключаетНДС Тогда
ОбластьМакета = Макет.ПолучитьОбласть("ИтогоНДС");
ОбластьМакета.Параметры.ВсегоНДС = ОбщегоНазначения.ФорматСумм(Сумма + СуммаНДС);
ОбластьМакета.Параметры.НДС      = НСтр("ru='Всего с НДС:';uk='Усього з ПДВ:'",КодЯзыкаПечать);
ТабДокумент.Вывести(ОбластьМакета);
КонецЕсли;
КонецЕсли;

// Вывести таблицу с возвратной тарой
ОбластьШапки  = СтрЗаменить(ОбластьШапки,"Мест","");
ОбластьСтроки = СтрЗаменить(ОбластьСтроки,"Мест","");
ОбластьШапки  = СтрЗаменить(ОбластьШапки,"Скидка","")+"Тара";
ОбластьСтроки = СтрЗаменить(ОбластьСтроки,"Скидка","")+"Тара";

Если ЗапросТара.Количество() > 0 Тогда

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

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

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

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

СуммаТара    = 0;

Для каждого ВыборкаСтрокТара Из ЗапросТара Цикл

ОбластьМакета.Параметры.Заполнить(ВыборкаСтрокТара);
ОбластьМакета.Параметры.НомерСтроки = ЗапросТара.Индекс(ВыборкаСтрокТара) + 1;
ОбластьМакета.Параметры.Товар       = СокрЛП(ВыборкаСтрокТара.Номенклатура);

Если ВыводитьКоды Тогда
ОбластьМакета.Параметры.КодАртикул = ВыборкаСтрокТара.КодАртикул;
КонецЕсли;

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

СуммаТара = СуммаТара + ВыборкаСтрокТара.Сумма;

КонецЦикла;

ОбластьИтого = "ИтогоТара";

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

// сделаем отступ
ТабДокумент.Вывести(ОбластьПробел);

КонецЕсли;

// Вывести Сумму прописью
ОбластьМакета = Макет.ПолучитьОбласть("СуммаПрописью");
СуммаКПрописи = Сумма + ?(Шапка.СуммаВключаетНДС, 0, СуммаНДС);
ОбластьМакета.Параметры.ИтоговаяСтрока = НСтр("ru='Всего наименований ';uk='Всього найменувань '",КодЯзыкаПечать) + ЗапросТовары.Количество() + "," +
НСтр("ru=' на сумму ';uk=' на суму '",КодЯзыкаПечать)  + ОбщегоНазначения.ФорматСумм(СуммаКПрописи, Шапка.ВалютаДокумента)
+ ?(ЗапросТара.Количество() = 0, "",  НСтр("ru='; возвратная тара ';uk='; зворотна тара '",КодЯзыкаПечать) + ЗапросТара.Количество() + НСтр("ru=', на сумму ';uk=', на суму '",КодЯзыкаПечать) + ОбщегоНазначения.ФорматСумм(СуммаТара, Шапка.ВалютаДокумента)) + ".";

ОбластьМакета.Параметры.СуммаПрописью  = ОбщегоНазначения.СформироватьСуммуПрописью(СуммаКПрописи, Шапка.ВалютаДокумента,КодЯзыкаПечать)
+ ?(НЕ Шапка.УчитыватьНДС, "", Символы.ПС + НСтр("ru='В т.ч. НДС: ';uk='У т.ч. ПДВ: '",КодЯзыкаПечать) + ОбщегоНазначения.СформироватьСуммуПрописью(СуммаНДС, Шапка.ВалютаДокумента, КодЯзыкаПечать));
ТабДокумент.Вывести(ОбластьМакета);

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


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

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

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

Read Full Article