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

Корректировка печатной формы

Автор Валерий Жур, 01 июл 2016, 11:59

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

Валерий Жур

Всем привет.

Суть проблемы

При формировании счета в модуле менеджера происходит округление значений (сумма НДС, цена, цена без НДС и пр.) до целого числа.
С 1 июля в Беларуси деноминация, и появляются копейки.
Соответственно все значения в печатных формах надо округлять, до двух знаков после запятой.

Собственно мы внесли изменения в правила округления, и все значения отображаются корректно кроме одного СуммаНДС

Пример документа -
http://joxi.ru/Vm66kvOSxJyaBm
http://joxi.ru/zANdQynflGE35m
Код

ОбластьМакета.Параметры.Номер = Ном;
               
                //ОбластьМакета.Параметры.СтранаПроисхождения = СокрЛП(ВыборкаСтрокТовары.Страна);
               
                СуммаСНДС  = Окр((ВыборкаСтрокТовары.Сумма + ?(Шапка.СуммаВключаетНДС, 0, ВыборкаСтрокТовары.СуммаНДС)),Шапка.ВалютаДокумента.ПорядокОкругленияДЧВ,2);
                Количество = ВыборкаСтрокТовары.Количество;
                СуммаНДС   = Окр(ВыборкаСтрокТовары.СуммаНДС,Шапка.ВалютаДокумента.ПорядокОкругленияДЧВ,2);
                Сумма      = Окр(ВыборкаСтрокТовары.Сумма,Шапка.ВалютаДокумента.ПорядокОкругленияДЧВ,2);
                Цена       = Окр(ВыборкаСтрокТовары.Цена, Шапка.ВалютаДокумента.ПорядокОкругленияДЧВ,2);
               
               
                СтруктураДанных = Новый Структура;
                СтруктураДанных.Вставить("ВидЦен", Шапка.ВидЦен);
                СтруктураДанных.Вставить("ДатаОбработки", Шапка.ДатаДокумента);
                СтруктураДанных.Вставить("Номенклатура", ВыборкаСтрокТовары.Номенклатура);
                СтруктураДанных.Вставить("Характеристика", ВыборкаСтрокТовары.Характеристика);
                СтруктураДанных.Вставить("Коэффициент", 1);
                СтруктураДанных.Вставить("ВалютаДокумента", Шапка.ВалютаДокумента);
                СтруктураДанных.Вставить("СуммаВключаетНДС", Шапка.СуммаВключаетНДС);
               
                ОбластьМакета.Параметры.Скидка = Окр(ВыборкаСтрокТовары.Цена * ВыборкаСтрокТовары.Количество - ВыборкаСтрокТовары.Сумма, Шапка.ВалютаДокумента.ПорядокОкругленияДЧВ, 2);
                ОбластьМакета.Параметры.ЦенаСоСкидкой = Окр(Цена - Цена * ВыборкаСтрокТовары.ПроцентСкидкиНаценки / 100, Шапка.ВалютаДокумента.ПорядокОкругленияДЧВ, 2);
                ОбластьМакета.Параметры.Цена = УправлениеФормамиУНФРБСервер.ФорматСумм(Цена, Шапка.ВалютаДокумента);
                ОбластьМакета.Параметры.Скидка = УправлениеФормамиУНФРБСервер.ФорматСумм(ОбластьМакета.Параметры.Скидка, Шапка.ВалютаДокумента);
                ОбластьМакета.Параметры.ЦенаСоСкидкой = УправлениеФормамиУНФРБСервер.ФорматСумм(ОбластьМакета.Параметры.ЦенаСоСкидкой, Шапка.ВалютаДокумента);
                ТабДокумент.Вывести(ОбластьМакета);
               
            КонецЦикла;
...Показать
Подскажите пожалуйста в чем может быть проблема?

Свойства переменной уже проверил.
Свойство ячейки проверил.
Спасибо.

mixqn

Если отладчиком посмотреть, значение верное подставляется в макет? В макете точно проверили формат?

LexaK

как вариант, посмотрите в конфигураторе, в макете, в самой ячейке, формат ячейки!
там тоже может быть округление
если помогло нажмите: Спасибо!

Валерий Жур

спасибо, уже смотрел
http://joxi.ru/ZrJQENaS1P9LQA
В макете формат проверил
Формат реквизита проверил

Как с помощью отладчика сделать проверку в данном случае не понимаю((( (я еще неопытный )

LexaK

выложите весь текст процедуры печати, по тем кускам что выше выложили не все видно
Добавлено: 01 июл 2016, 13:01


УПС!!! а вы шутник!!! однако!
сначала показываете картинку с ошибкой от одного отчета!
а макет и настройки формата ячейки, показываете от ДРУГОГО отчета!

ну так же нельзя! мы искренне хотели вам помочь! 
если помогло нажмите: Спасибо!

Валерий Жур

Да нет отчет один и тот же.

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

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

// Формирует таблицу данных документа.
//
// Параметры:
//   ДокументСсылка - ДокументСсылка.ПриходДенежныхСредствПлан - Текущий документ
//   СтруктураДополнительныеСвойства - ДополнительныеСвойства - Дополнительные свойства документа
//   
Процедура ИнициализироватьДанныеДокумента(ДокументСсылка, СтруктураДополнительныеСвойства) Экспорт
   
   СформироватьТаблицаПлатежныйКалендарь(ДокументСсылка, СтруктураДополнительныеСвойства);
   СформироватьТаблицаОплатаСчетовИЗаказов(ДокументСсылка, СтруктураДополнительныеСвойства);
   
КонецПроцедуры // ИнициализироватьДанныеДокумента()

// Процедура печати документа
Функция ПечатьСчетНаОплату(МассивОбъектов, ОбъектыПечати, ИмяМакета)
   Перем Ошибки;
   ТабличныйДокумент = Новый ТабличныйДокумент;
   
   Запрос = Новый Запрос();
   Запрос.Текст =
   "ВЫБРАТЬ
   |   СчетНаОплату.Ссылка КАК Ссылка,
   |   СчетНаОплату.СуммаВключаетНДС КАК СуммаВключаетНДС,
   |   СчетНаОплату.ВалютаДокумента КАК ВалютаДокумента,
   |   СчетНаОплату.Дата КАК ДатаДокумента,
   |   СчетНаОплату.Номер КАК Номер,
   |   СчетНаОплату.БанковскийСчет КАК БанковскийСчет,
   |   СчетНаОплату.Контрагент КАК Контрагент,
   |   СчетНаОплату.Организация КАК Организация,
   |   СчетНаОплату.Организация.Префикс КАК Префикс,
   |   СчетНаОплату.Запасы.(
   |      ВЫБОР
   |         КОГДА (ВЫРАЗИТЬ(СчетНаОплату.Запасы.Номенклатура.НаименованиеПолное КАК СТРОКА(1000))) = """"
   |            ТОГДА СчетНаОплату.Запасы.Номенклатура.Наименование
   |         ИНАЧЕ ВЫРАЗИТЬ(СчетНаОплату.Запасы.Номенклатура.НаименованиеПолное КАК СТРОКА(1000))
   |      КОНЕЦ КАК Запас,
   |      Номенклатура.Артикул КАК Артикул,
   |      ЕдиницаИзмерения КАК ЕдиницаИзмерения,
   |      Цена КАК Цена,
   |      Сумма КАК Сумма,
   |      СуммаНДС КАК СуммаНДС,
   |      Всего КАК Всего,
   |      Количество КАК Количество,
   |      Характеристика,
   |      Содержание,
   |      ПроцентСкидкиНаценки,
   |      ВЫБОР
   |         КОГДА СчетНаОплату.Запасы.ПроцентСкидкиНаценки <> 0
   |            ТОГДА 1
   |         ИНАЧЕ 0
   |      КОНЕЦ КАК ЕстьСкидка,
   |      НомерСтроки КАК НомерСтроки
   |   ),
   |   СчетНаОплату.ПлатежныйКалендарь.(
   |      ПроцентОплаты,
   |      СуммаОплаты,
   |      СуммаНДСОплаты
   |   )
   |ИЗ
   |   Документ.СчетНаОплату КАК СчетНаОплату
   |ГДЕ
   |   СчетНаОплату.Ссылка В(&МассивОбъектов)
   |
   |УПОРЯДОЧИТЬ ПО
   |   Ссылка,
   |   НомерСтроки";
   
   Запрос.УстановитьПараметр("МассивОбъектов", МассивОбъектов);
   
   Шапка = Запрос.Выполнить().Выбрать();
   
   ПервыйДокумент = Истина;
   
   Пока Шапка.Следующий() Цикл
      
      Если Не ПервыйДокумент Тогда
         ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
      КонецЕсли;
      ПервыйДокумент = Ложь;
      
      НомерСтрокиНачало = ТабличныйДокумент.ВысотаТаблицы + 1;
      
      ВыборкаСтрокЗапасы = Шапка.Запасы.Выбрать();
      ТаблицаПредоплаты = Шапка.ПлатежныйКалендарь.Выгрузить();
            
      ТабличныйДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_" + ИмяМакета + "_" + ИмяМакета;
      
      Макет = УправлениеПечатью.ПолучитьМакет("Документ.СчетНаОплату.ПФ_MXL_" + ИмяМакета);
      
      СведенияОбОрганизации = УправлениеНебольшойФирмойСервер.СведенияОЮрФизЛице(Шапка.Организация, Шапка.ДатаДокумента, ,Шапка.БанковскийСчет);
      СведенияОбКонтрагенте = УправлениеНебольшойФирмойСервер.СведенияОЮрФизЛице(Шапка.Контрагент, Шапка.ДатаДокумента, ,);
      
      //Если используется пользовательский макет - этих секций не было
      Если Макет.Области.Найти("ЗаглавиеСЛоготипом") <> Неопределено
         И Макет.Области.Найти("ЗаглавиеБезЛоготипа") <> Неопределено Тогда
         ДанныеКартинки = РаботаСФайламиСлужебныйВызовСервера.ПолучитьДанныеФайлаИДвоичныеДанные(Шапка.Организация.ФайлЛоготип);
         Если ЗначениеЗаполнено(ДанныеКартинки.ДвоичныеДанные) Тогда
            ОбластьМакета = Макет.ПолучитьОбласть("ЗаглавиеСЛоготипом");
            ОбластьМакета.Рисунки.Логотип.Картинка = Новый Картинка(ДанныеКартинки.ДвоичныеДанные);
         Иначе // Если картинки не выбраны печатаем обычный заголовок
            ОбластьМакета = Макет.ПолучитьОбласть("ЗаглавиеБезЛоготипа");
         КонецЕсли;
         ТабличныйДокумент.Вывести(ОбластьМакета);
      Иначе
         ТекстСообщения = НСтр("ru ='ВНИМАНИЕ! Возможно используется пользовательский макет. Штатный механизм печати счетов может работать некоректно.'");
         ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(Ошибки, , ТекстСообщения);
      КонецЕсли;
      ОбластьМакета = Макет.ПолучитьОбласть("ЗаголовокСчета");
      Если ЗначениеЗаполнено(СведенияОбОрганизации.Банк) Тогда
         ОбластьМакета.Параметры.БанкПолучателяПредставление = СведенияОбОрганизации.Банк.Наименование + " " + СведенияОбОрганизации.Банк.Город;
      КонецЕсли;
      ОбластьМакета.Параметры.ИНН = СведенияОбОрганизации.ИНН;
      //1С-Минск 
      //ОбластьМакета.Параметры.КПП = СведенияОбОрганизации.КПП;
      //Конец 1С-Минск

      ОбластьМакета.Параметры.ПредставлениеПоставщика = СведенияОбОрганизации.ПолноеНаименование;
      ОбластьМакета.Параметры.БИКБанкаПолучателя = СведенияОбОрганизации.БИК;
      ОбластьМакета.Параметры.СчетБанкаПолучателяПредставление = СведенияОбОрганизации.КоррСчет;
      ОбластьМакета.Параметры.СчетПолучателяПредставление = СведенияОбОрганизации.НомерСчета;
      
      ТабличныйДокумент.Вывести(ОбластьМакета);
      
      Если Шапка.ДатаДокумента < Дата('20110101') Тогда
         НомерДокумента = УправлениеНебольшойФирмойСервер.ПолучитьНомерНаПечать(Шапка.Номер, Шапка.Префикс);
      Иначе
         НомерДокумента = ПрефиксацияОбъектовКлиентСервер.ПолучитьНомерНаПечать(Шапка.Номер, Истина, Истина);
      КонецЕсли;      
      
      ОбластьМакета = Макет.ПолучитьОбласть("Заголовок");
      ОбластьМакета.Параметры.ТекстЗаголовка = "Счет на оплату № "
                                    + НомерДокумента
                                    + " от "
                                    + Формат(Шапка.ДатаДокумента, "ДЛФ=DD");
                                    
      ТабличныйДокумент.Вывести(ОбластьМакета);
      
      ОбластьМакета = Макет.ПолучитьОбласть("Поставщик");
      ОбластьМакета.Параметры.ПредставлениеПоставщика = УправлениеНебольшойФирмойСервер.ОписаниеОрганизации(СведенияОбОрганизации, "ПолноеНаименование,ИНН,КПП,ЮридическийАдрес,Телефоны,");
      ТабличныйДокумент.Вывести(ОбластьМакета);
      
      ОбластьМакета = Макет.ПолучитьОбласть("Покупатель");
      ОбластьМакета.Параметры.ПредставлениеПолучателя = УправлениеНебольшойФирмойСервер.ОписаниеОрганизации(СведенияОбКонтрагенте, "ПолноеНаименование,ИНН,КПП,ЮридическийАдрес,Телефоны,");
      ТабличныйДокумент.Вывести(ОбластьМакета);

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

      Пока ВыборкаСтрокЗапасы.Следующий() Цикл
         
         Количество = Количество + 1;
         ОбластьМакета.Параметры.Заполнить(ВыборкаСтрокЗапасы);
         ОбластьМакета.Параметры.НомерСтроки = Количество;
         //1С-Минск
         ОбластьМакета.Параметры.Цена = УправлениеФормамиУНФРБСервер.ФорматСумм(ВыборкаСтрокЗапасы.Цена, Шапка.ВалютаДокумента);
         ОбластьМакета.Параметры.Сумма = УправлениеФормамиУНФРБСервер.ФорматСумм(ВыборкаСтрокЗапасы.Сумма, Шапка.ВалютаДокумента);
         //Конец 1С-Минск
         Если ЗначениеЗаполнено(ВыборкаСтрокЗапасы.Содержание) Тогда
            ОбластьМакета.Параметры.Запас = ВыборкаСтрокЗапасы.Содержание;
         Иначе
            ОбластьМакета.Параметры.Запас = УправлениеНебольшойФирмойСервер.ПолучитьПредставлениеНоменклатурыДляПечати(ВыборкаСтрокЗапасы.Запас,
                                                   ВыборкаСтрокЗапасы.Характеристика, ВыборкаСтрокЗапасы.Артикул);
         КонецЕсли;
                  
         Если ЕстьСкидки Тогда
            Если ВыборкаСтрокЗапасы.ПроцентСкидкиНаценки = 100 Тогда
               Скидка = ВыборкаСтрокЗапасы.Цена * ВыборкаСтрокЗапасы.Количество;
               //1С-Минск 
               ОбластьМакета.Параметры.Скидка = УправлениеФормамиУНФРБСервер.ФорматСумм(Скидка, Шапка.ВалютаДокумента);
               ОбластьМакета.Параметры.СуммаБезСкидки = УправлениеФормамиУНФРБСервер.ФорматСумм(Скидка, Шапка.ВалютаДокумента);
               //Конец 1С-Минск
            ИначеЕсли ВыборкаСтрокЗапасы.ПроцентСкидкиНаценки = 0 Тогда
               ОбластьМакета.Параметры.Скидка         = 0;
               //1С-Минск 
               ОбластьМакета.Параметры.СуммаБезСкидки = УправлениеФормамиУНФРБСервер.ФорматСумм(ВыборкаСтрокЗапасы.Сумма, Шапка.ВалютаДокумента);
               //Конец 1С-Минск
               
            Иначе
               Скидка = ВыборкаСтрокЗапасы.Сумма * ВыборкаСтрокЗапасы.ПроцентСкидкиНаценки / (100 - ВыборкаСтрокЗапасы.ПроцентСкидкиНаценки);

               //1С-Минск 
               ОбластьМакета.Параметры.Скидка         = УправлениеФормамиУНФРБСервер.ФорматСумм(Скидка, Шапка.ВалютаДокумента);
               ОбластьМакета.Параметры.СуммаБезСкидки = УправлениеФормамиУНФРБСервер.ФорматСумм(ВыборкаСтрокЗапасы.Сумма + Скидка, Шапка.ВалютаДокумента);
               //Конец 1С-Минск
            КонецЕсли;
         КонецЕсли;
         
         ТабличныйДокумент.Вывести(ОбластьМакета);
         
         Сумма      = Сумма      + ВыборкаСтрокЗапасы.Сумма;
         СуммаНДС   = СуммаНДС   + ВыборкаСтрокЗапасы.СуммаНДС;
         Всего      = Всего    + ВыборкаСтрокЗапасы.Всего;

      КонецЦикла;
      
      ОбластьМакета = Макет.ПолучитьОбласть("Итого");

      //1С-Минск 
      ОбластьМакета.Параметры.Всего = УправлениеФормамиУНФРБСервер.ФорматСумм(Сумма, Шапка.ВалютаДокумента);
      //Конец 1С-Минск

      ТабличныйДокумент.Вывести(ОбластьМакета);
      
      ОбластьМакета = Макет.ПолучитьОбласть("ИтогоНДС");
      Если СуммаНДС = 0 Тогда
         ОбластьМакета.Параметры.НДС = "Без налога (НДС)";
         ОбластьМакета.Параметры.ВсегоНДС = "-";
      Иначе
         ОбластьМакета.Параметры.НДС = ?(Шапка.СуммаВключаетНДС, "В том числе НДС:", "Сумма НДС:");

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

      ОбластьМакета = Макет.ПолучитьОбласть("СуммаПрописью");
      
      СуммаКПрописи = Всего;

      ОбластьМакета.Параметры.ИтоговаяСтрока = "Всего наименований "
                                    + Строка(Количество)
                                    + ", на сумму "
                                    + УправлениеНебольшойФирмойСервер.ФорматСумм(СуммаКПрописи, Шапка.ВалютаДокумента);

      ОбластьМакета.Параметры.СуммаПрописью = РаботаСКурсамиВалют.СформироватьСуммуПрописью(СуммаКПрописи, Шапка.ВалютаДокумента);

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

КонецФункции // ПечатнаяФорма()

// Процедура печати документа
//
Функция ПечатьСчетНаОплатуСФаксимильнойПодписью(МассивОбъектов, ОбъектыПечати, ИмяМакета)
   
   Перем Ошибки;
   
   ТабличныйДокумент = Новый ТабличныйДокумент;
   
   Запрос = Новый Запрос();
   Запрос.Текст =
   "ВЫБРАТЬ
   |   СчетНаОплату.Ссылка КАК Ссылка,
   |   СчетНаОплату.СуммаВключаетНДС КАК СуммаВключаетНДС,
   |   СчетНаОплату.ВалютаДокумента КАК ВалютаДокумента,
   |   СчетНаОплату.Дата КАК ДатаДокумента,
   |   СчетНаОплату.Номер КАК Номер,
   |   СчетНаОплату.БанковскийСчет КАК БанковскийСчет,
   |   СчетНаОплату.Контрагент КАК Контрагент,
   |   СчетНаОплату.Организация КАК Организация,
   |   СчетНаОплату.Организация.Префикс КАК Префикс,
   |   СчетНаОплату.Запасы.(
   |      ВЫБОР
   |         КОГДА (ВЫРАЗИТЬ(СчетНаОплату.Запасы.Номенклатура.НаименованиеПолное КАК СТРОКА(1000))) = """"
   |            ТОГДА СчетНаОплату.Запасы.Номенклатура.Наименование
   |         ИНАЧЕ ВЫРАЗИТЬ(СчетНаОплату.Запасы.Номенклатура.НаименованиеПолное КАК СТРОКА(1000))
   |      КОНЕЦ КАК Запас,
   |      Номенклатура.Артикул КАК Артикул,
   |      ЕдиницаИзмерения КАК ЕдиницаИзмерения,
   |      Цена КАК Цена,
   |      Сумма КАК Сумма,
   |      СуммаНДС КАК СуммаНДС,
   |      Всего КАК Всего,
   |      Количество КАК Количество,
   |      Характеристика,
   |      Содержание,
   |      ПроцентСкидкиНаценки,
   |      ВЫБОР
   |         КОГДА СчетНаОплату.Запасы.ПроцентСкидкиНаценки <> 0
   |            ТОГДА 1
   |         ИНАЧЕ 0
   |      КОНЕЦ КАК ЕстьСкидка,
   |      НомерСтроки КАК НомерСтроки
   |   ),
   |   СчетНаОплату.ПлатежныйКалендарь.(
   |      ПроцентОплаты,
   |      СуммаОплаты,
   |      СуммаНДСОплаты
   |   )
   |ИЗ
   |   Документ.СчетНаОплату КАК СчетНаОплату
   |ГДЕ
   |   СчетНаОплату.Ссылка В(&МассивОбъектов)
   |
   |УПОРЯДОЧИТЬ ПО
   |   Ссылка,
   |   НомерСтроки";
   
   Запрос.УстановитьПараметр("МассивОбъектов", МассивОбъектов);
   
   Шапка = Запрос.Выполнить().Выбрать();
   
   ПервыйДокумент = Истина;
   
   Пока Шапка.Следующий() Цикл
      
      Если Не ПервыйДокумент Тогда
         ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
      КонецЕсли;
      ПервыйДокумент = Ложь;
      
      НомерСтрокиНачало = ТабличныйДокумент.ВысотаТаблицы + 1;
      
      ВыборкаСтрокЗапасы = Шапка.Запасы.Выбрать();
      ТаблицаПредоплаты = Шапка.ПлатежныйКалендарь.Выгрузить();
      ТабличныйДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_" + ИмяМакета + "_" + ИмяМакета;
      
      Макет = УправлениеПечатью.ПолучитьМакет("Документ.СчетНаОплату.ПФ_MXL_" + ИмяМакета);
      
      СведенияОбОрганизации = УправлениеНебольшойФирмойСервер.СведенияОЮрФизЛице(Шапка.Организация, Шапка.ДатаДокумента, ,Шапка.БанковскийСчет);
      СведенияОбКонтрагенте = УправлениеНебольшойФирмойСервер.СведенияОЮрФизЛице(Шапка.Контрагент, Шапка.ДатаДокумента, ,);
      
      //Если используется пользовательский макет - этих секций не было
      Если Макет.Области.Найти("ЗаглавиеСЛоготипом") <> Неопределено
         И Макет.Области.Найти("ЗаглавиеБезЛоготипа") <> Неопределено Тогда
      
         ДанныеКартинки = РаботаСФайламиСлужебныйВызовСервера.ПолучитьДанныеФайлаИДвоичныеДанные(Шапка.Организация.ФайлЛоготип);
         Если ЗначениеЗаполнено(ДанныеКартинки.ДвоичныеДанные) Тогда
            
            ОбластьМакета = Макет.ПолучитьОбласть("ЗаглавиеСЛоготипом");
            ОбластьМакета.Рисунки.Логотип.Картинка = Новый Картинка(ДанныеКартинки.ДвоичныеДанные);
            
         Иначе // Если картинки не выбраны печатаем обычный заголовок
            
            ОбластьМакета = Макет.ПолучитьОбласть("ЗаглавиеБезЛоготипа");
            
         КонецЕсли;
         
         ТабличныйДокумент.Вывести(ОбластьМакета);
         
      Иначе
         
         ТекстСообщения = НСтр("ru ='ВНИМАНИЕ! Возможно используется пользовательский макет. Штатный механизм печати счетов может работать некоректно.'");
         ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(Ошибки, , ТекстСообщения);
         
      КонецЕсли;
      
      ОбластьМакета = Макет.ПолучитьОбласть("ЗаголовокСчета");
      Если ЗначениеЗаполнено(СведенияОбОрганизации.Банк) Тогда
         ОбластьМакета.Параметры.БанкПолучателяПредставление = СведенияОбОрганизации.Банк.Наименование + " " + СведенияОбОрганизации.Банк.Город;
      КонецЕсли;
      ОбластьМакета.Параметры.ИНН = СведенияОбОрганизации.ИНН;
      ОбластьМакета.Параметры.КПП = СведенияОбОрганизации.КПП;
      ОбластьМакета.Параметры.ПредставлениеПоставщика = СведенияОбОрганизации.ПолноеНаименование;
      ОбластьМакета.Параметры.БИКБанкаПолучателя = СведенияОбОрганизации.БИК;
      ОбластьМакета.Параметры.СчетБанкаПолучателяПредставление = СведенияОбОрганизации.КоррСчет;
      ОбластьМакета.Параметры.СчетПолучателяПредставление = СведенияОбОрганизации.НомерСчета;
      
      ТабличныйДокумент.Вывести(ОбластьМакета);
      
      Если Шапка.ДатаДокумента < Дата('20110101') Тогда
         НомерДокумента = УправлениеНебольшойФирмойСервер.ПолучитьНомерНаПечать(Шапка.Номер, Шапка.Префикс);
      Иначе
         НомерДокумента = ПрефиксацияОбъектовКлиентСервер.ПолучитьНомерНаПечать(Шапка.Номер, Истина, Истина);
      КонецЕсли;      
      
      ОбластьМакета = Макет.ПолучитьОбласть("Заголовок");
      ОбластьМакета.Параметры.ТекстЗаголовка = "Счет на оплату № "
                                    + НомерДокумента
                                    + " от "
                                    + Формат(Шапка.ДатаДокумента, "ДЛФ=DD");
                                    
      ТабличныйДокумент.Вывести(ОбластьМакета);
      
      ОбластьМакета = Макет.ПолучитьОбласть("Поставщик");
      ОбластьМакета.Параметры.ПредставлениеПоставщика = УправлениеНебольшойФирмойСервер.ОписаниеОрганизации(СведенияОбОрганизации, "ПолноеНаименование,ИНН,КПП,ЮридическийАдрес,Телефоны,");
      ТабличныйДокумент.Вывести(ОбластьМакета);
      
      ОбластьМакета = Макет.ПолучитьОбласть("Покупатель");
      ОбластьМакета.Параметры.ПредставлениеПолучателя = УправлениеНебольшойФирмойСервер.ОписаниеОрганизации(СведенияОбКонтрагенте, "ПолноеНаименование,ИНН,КПП,ЮридическийАдрес,Телефоны,");
      ТабличныйДокумент.Вывести(ОбластьМакета);

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

      Пока ВыборкаСтрокЗапасы.Следующий() Цикл
         
         Количество = Количество + 1;
         ОбластьМакета.Параметры.Заполнить(ВыборкаСтрокЗапасы);
         ОбластьМакета.Параметры.НомерСтроки = Количество;
         //1С-Минск
         ОбластьМакета.Параметры.Цена = УправлениеФормамиУНФРБСервер.ФорматСумм(ВыборкаСтрокЗапасы.Цена, Шапка.ВалютаДокумента);
         ОбластьМакета.Параметры.Сумма = УправлениеФормамиУНФРБСервер.ФорматСумм(ВыборкаСтрокЗапасы.Сумма, Шапка.ВалютаДокумента);
         //Конец 1С-Минск
         Если ЗначениеЗаполнено(ВыборкаСтрокЗапасы.Содержание) Тогда
            ОбластьМакета.Параметры.Запас = ВыборкаСтрокЗапасы.Содержание;
         Иначе
            ОбластьМакета.Параметры.Запас = УправлениеНебольшойФирмойСервер.ПолучитьПредставлениеНоменклатурыДляПечати(ВыборкаСтрокЗапасы.Запас,
                                                   ВыборкаСтрокЗапасы.Характеристика, ВыборкаСтрокЗапасы.Артикул);
         КонецЕсли;
                  
         Если ЕстьСкидки Тогда
            Если ВыборкаСтрокЗапасы.ПроцентСкидкиНаценки = 100 Тогда
               Скидка = ВыборкаСтрокЗапасы.Цена * ВыборкаСтрокЗапасы.Количество;
               //1С-Минск
               ОбластьМакета.Параметры.Скидка = УправлениеФормамиУНФРБСервер.ФорматСумм(Скидка, Шапка.ВалютаДокумента);
               ОбластьМакета.Параметры.СуммаБезСкидки = УправлениеФормамиУНФРБСервер.ФорматСумм(Скидка, Шапка.ВалютаДокумента);
               //Конец 1С-Минск
            ИначеЕсли ВыборкаСтрокЗапасы.ПроцентСкидкиНаценки = 0 Тогда
               ОбластьМакета.Параметры.Скидка = 0;
               //1С-Минск 
               ОбластьМакета.Параметры.СуммаБезСкидки = УправлениеФормамиУНФРБСервер.ФорматСумм(ВыборкаСтрокЗапасы.Сумма, Шапка.ВалютаДокумента);
               //Конец 1С-Минск
               
            Иначе
               Скидка = ВыборкаСтрокЗапасы.Сумма * ВыборкаСтрокЗапасы.ПроцентСкидкиНаценки / (100 - ВыборкаСтрокЗапасы.ПроцентСкидкиНаценки);
               //1С-Минск 
               ОбластьМакета.Параметры.Скидка         = УправлениеФормамиУНФРБСервер.ФорматСумм(Скидка, Шапка.ВалютаДокумента);
               ОбластьМакета.Параметры.СуммаБезСкидки = УправлениеФормамиУНФРБСервер.ФорматСумм(ВыборкаСтрокЗапасы.Сумма + Скидка, Шапка.ВалютаДокумента);
               //Конец 1С-Минск
            КонецЕсли;
         КонецЕсли;
         
         ТабличныйДокумент.Вывести(ОбластьМакета);
         
         Сумма      = Сумма      + ВыборкаСтрокЗапасы.Сумма;
         СуммаНДС   = СуммаНДС   + ВыборкаСтрокЗапасы.СуммаНДС;
         Всего      = Всего      + ВыборкаСтрокЗапасы.Всего;

      КонецЦикла;
      
      ОбластьМакета = Макет.ПолучитьОбласть("Итого");

      ОбластьМакета.Параметры.Всего = УправлениеНебольшойФирмойСервер.ФорматСумм(Сумма, Шапка.ВалютаДокумента);

      ТабличныйДокумент.Вывести(ОбластьМакета);
      
      ОбластьМакета = Макет.ПолучитьОбласть("ИтогоНДС");
      Если СуммаНДС = 0 Тогда
         ОбластьМакета.Параметры.НДС = "Без налога (НДС)";
         ОбластьМакета.Параметры.ВсегоНДС = "-";
      Иначе
         ОбластьМакета.Параметры.НДС = ?(Шапка.СуммаВключаетНДС, "В том числе НДС:", "Сумма НДС:");

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

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

      СуммаКПрописи = Всего;

      ОбластьМакета.Параметры.ИтоговаяСтрока = "Всего наименований "
                                    + Строка(Количество)
                                    + ", на сумму "
                                    + УправлениеНебольшойФирмойСервер.ФорматСумм(СуммаКПрописи, Шапка.ВалютаДокумента);
      ОбластьМакета.Параметры.СуммаПрописью = РаботаСКурсамиВалют.СформироватьСуммуПрописью(СуммаКПрописи,
                                                                        Шапка.ВалютаДокумента);
      
      ТабличныйДокумент.Вывести(ОбластьМакета);

      Если Макет.Области.Найти("ПодвалСчетаСФаксимильнойПечатью") <> Неопределено Тогда

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

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

КонецФункции // ПечатнаяФорма()

// Процедура формирования предварительной печатной формы документа (образец)
//
// Вызывается из карточки "Организации" для просмотра размещения логотипов
//
Функция ПечатьПредварительныйПросмотрСчетаНаОплату(Организация, ОбъектыПечати, ИмяМакета)
   
   Перем Ошибки;
   
   ТабличныйДокумент = Новый ТабличныйДокумент;
   
   ЗначениеДаты = ТекущаяДатаСеанса();
   
   Шапка = Новый Структура;
   Шапка.Вставить("СуммаВключаетНДС",   Истина);
   Шапка.Вставить("ВалютаДокумента",   Константы.НациональнаяВалюта.Получить());
   Шапка.Вставить("ДатаДокумента",      ЗначениеДаты);
   Шапка.Вставить("Номер",          "00000000001");
   Шапка.Вставить("Организация",       Организация);
   Шапка.Вставить("БанковскийСчет",   ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Организация, "БанковскийСчетПоУмолчанию"));
   Шапка.Вставить("Префикс",          ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Организация, "Префикс"));
   Шапка.Вставить("ПредставлениеПолучателя", "Поле содержит информацию покупателя: полное наименование, ИНН, КПП, юридический адрес, телефоны.");
   
   Запасы = Новый Структура;
   Запасы.Вставить("НомерСтроки",         1);
   Запасы.Вставить("Запас",            "Запас для предварительного просмотра");
   Запасы.Вставить("Артикул",            "АРТ-0000001");
   Запасы.Вставить("ЕдиницаИзмерения",      Справочники.КлассификаторЕдиницИзмерения.шт);
   Запасы.Вставить("Количество",         1);
   Запасы.Вставить("Цена",               118);
   Запасы.Вставить("Сумма",            118);
   Запасы.Вставить("СуммаНДС",            18);
   Запасы.Вставить("ВсегоНДС",            18);
   Запасы.Вставить("НДС",                "В том числе НДС:");
   Запасы.Вставить("Характеристика",      Справочники.ХарактеристикиНоменклатуры.ПустаяСсылка());
   Запасы.Вставить("ПроцентСкидкиНаценки",   0);
   
   НомерСтрокиНачало = ТабличныйДокумент.ВысотаТаблицы + 1;
   
   ТабличныйДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_" + ИмяМакета + "_" + ИмяМакета;
   
   Макет = УправлениеПечатью.ПолучитьМакет("Документ.СчетНаОплату.ПФ_MXL_" + ИмяМакета);
   
   СведенияОбОрганизации = УправлениеНебольшойФирмойСервер.СведенияОЮрФизЛице(Шапка.Организация, Шапка.ДатаДокумента, , ?(ЗначениеЗаполнено(Шапка.БанковскийСчет), Шапка.БанковскийСчет, Неопределено));
   
   
   //Если используется пользовательский макет - этих секций не было
   Если Макет.Области.Найти("ЗаглавиеСЛоготипом") <> Неопределено
      И Макет.Области.Найти("ЗаглавиеБезЛоготипа") <> Неопределено Тогда
      
      ДанныеКартинки = РаботаСФайламиСлужебныйВызовСервера.ПолучитьДанныеФайлаИДвоичныеДанные(Организация.ФайлЛоготип);
      Если ЗначениеЗаполнено(ДанныеКартинки.ДвоичныеДанные) Тогда
         
         ОбластьМакета = Макет.ПолучитьОбласть("ЗаглавиеСЛоготипом");
         ОбластьМакета.Рисунки.Логотип.Картинка = Новый Картинка(ДанныеКартинки.ДвоичныеДанные);
         
      Иначе // Если картинки не выбраны печатаем обычный заголовок
         
         ОбластьМакета = Макет.ПолучитьОбласть("ЗаглавиеБезЛоготипа");
         
      КонецЕсли;
      
      ТабличныйДокумент.Вывести(ОбластьМакета);
      
   Иначе
      
      ТекстСообщения = НСтр("ru ='ВНИМАНИЕ! Возможно используется пользовательский макет. Штатный механизм печати счетов может работать некоректно.'");
      ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(Ошибки, , ТекстСообщения);
      
   КонецЕсли;
   
   ОбластьМакета = Макет.ПолучитьОбласть("ЗаголовокСчета");
   Если ЗначениеЗаполнено(СведенияОбОрганизации.Банк) Тогда
      ОбластьМакета.Параметры.БанкПолучателяПредставление = СведенияОбОрганизации.Банк.Наименование + " " + СведенияОбОрганизации.Банк.Город;
   КонецЕсли;
   
   ОбластьМакета.Параметры.ИНН = СведенияОбОрганизации.ИНН;
   ОбластьМакета.Параметры.КПП = СведенияОбОрганизации.КПП;
   ОбластьМакета.Параметры.ПредставлениеПоставщика = СведенияОбОрганизации.ПолноеНаименование;
   ОбластьМакета.Параметры.БИКБанкаПолучателя = СведенияОбОрганизации.БИК;
   ОбластьМакета.Параметры.СчетБанкаПолучателяПредставление = СведенияОбОрганизации.КоррСчет;
   ОбластьМакета.Параметры.СчетПолучателяПредставление = СведенияОбОрганизации.НомерСчета;
   
   ТабличныйДокумент.Вывести(ОбластьМакета);
   
   Если Шапка.ДатаДокумента < Дата('20110101') Тогда
      НомерДокумента = УправлениеНебольшойФирмойСервер.ПолучитьНомерНаПечать(Шапка.Номер, Шапка.Префикс);
   Иначе
      НомерДокумента = ПрефиксацияОбъектовКлиентСервер.ПолучитьНомерНаПечать(Шапка.Номер, Истина, Истина);
   КонецЕсли;      
   
   ОбластьМакета = Макет.ПолучитьОбласть("Заголовок");
   ОбластьМакета.Параметры.ТекстЗаголовка = "Счет на оплату № "
                                 + НомерДокумента
                                 + " от "
                                 + Формат(Шапка.ДатаДокумента, "ДЛФ=DD");
                                 
   ТабличныйДокумент.Вывести(ОбластьМакета);
   
   ОбластьМакета = Макет.ПолучитьОбласть("Поставщик");
   ОбластьМакета.Параметры.ПредставлениеПоставщика = УправлениеНебольшойФирмойСервер.ОписаниеОрганизации(СведенияОбОрганизации, "ПолноеНаименование,ИНН,КПП,ЮридическийАдрес,Телефоны,");
   ТабличныйДокумент.Вывести(ОбластьМакета);
   
   ОбластьМакета = Макет.ПолучитьОбласть("Покупатель");
   ОбластьМакета.Параметры.Заполнить(Шапка);
   ТабличныйДокумент.Вывести(ОбластьМакета);

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

   ОбластьМакета.Параметры.Всего = УправлениеНебольшойФирмойСервер.ФорматСумм(Запасы.Сумма, Шапка.ВалютаДокумента);

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

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

// Сформировать печатные формы объектов
//
// ВХОДЯЩИЕ:
//   ИменаМакетов    - Строка    - Имена макетов, перечисленные через запятую
//   МассивОбъектов  - Массив    - Массив ссылок на объекты которые нужно распечатать
//   ПараметрыПечати - Структура - Структура дополнительных параметров печати
//
// ИСХОДЯЩИЕ:
//   КоллекцияПечатныхФорм - Таблица значений - Сформированные табличные документы
//   ПараметрыВывода       - Структура        - Параметры сформированных табличных документов
//
Процедура Печать(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт

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

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

    //1С-Минск 
   Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "Счет") Тогда

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

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

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

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

//1с-Минск

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

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

            ОбластьМакета.Параметры.СуммаСНДС = УправлениеФормамиУНФРБСервер.ФорматСумм(СуммаСНДС, Шапка.ВалютаДокумента);
            
            //***
            Если ВыборкаСтрокТовары.РегистрироватьКакУслугу Тогда
               ОбластьМакета.Параметры.ТоварНаименование = ВыборкаСтрокТовары.ПредставлениеУслуги;   
               ОбластьМакета.Параметры.Количество = 1;
               ОбластьМакета.Параметры.Цена = ВыборкаСтрокТовары.Сумма;
            КонецЕсли;            
            //**

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

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

            ОбластьМакета.Параметры.Номер = Ном;
            
            //ОбластьМакета.Параметры.СтранаПроисхождения = СокрЛП(ВыборкаСтрокТовары.Страна);
            
            СуммаСНДС  = Окр((ВыборкаСтрокТовары.Сумма + ?(Шапка.СуммаВключаетНДС, 0, ВыборкаСтрокТовары.СуммаНДС)),Шапка.ВалютаДокумента.ПорядокОкругленияДЧВ,2);
            Количество = ВыборкаСтрокТовары.Количество;
            СуммаНДС   = Окр(ВыборкаСтрокТовары.СуммаНДС,Шапка.ВалютаДокумента.ПорядокОкругленияДЧВ,2);
            Сумма      = Окр(ВыборкаСтрокТовары.Сумма,Шапка.ВалютаДокумента.ПорядокОкругленияДЧВ,2);
            Цена       = Окр(ВыборкаСтрокТовары.Цена, Шапка.ВалютаДокумента.ПорядокОкругленияДЧВ,2);
            
            
            СтруктураДанных = Новый Структура;
            СтруктураДанных.Вставить("ВидЦен", Шапка.ВидЦен);
            СтруктураДанных.Вставить("ДатаОбработки", Шапка.ДатаДокумента);
            СтруктураДанных.Вставить("Номенклатура", ВыборкаСтрокТовары.Номенклатура);
            СтруктураДанных.Вставить("Характеристика", ВыборкаСтрокТовары.Характеристика);
            СтруктураДанных.Вставить("Коэффициент", 1);
            СтруктураДанных.Вставить("ВалютаДокумента", Шапка.ВалютаДокумента);
            СтруктураДанных.Вставить("СуммаВключаетНДС", Шапка.СуммаВключаетНДС);
            
            ОбластьМакета.Параметры.Скидка = Окр(ВыборкаСтрокТовары.Цена * ВыборкаСтрокТовары.Количество - ВыборкаСтрокТовары.Сумма, Шапка.ВалютаДокумента.ПорядокОкругленияДЧВ, 2);
            ОбластьМакета.Параметры.ЦенаСоСкидкой = Окр(Цена - Цена * ВыборкаСтрокТовары.ПроцентСкидкиНаценки / 100, Шапка.ВалютаДокумента.ПорядокОкругленияДЧВ, 2);
            ОбластьМакета.Параметры.Цена = УправлениеФормамиУНФРБСервер.ФорматСумм(Цена, Шапка.ВалютаДокумента);
            ОбластьМакета.Параметры.Скидка = УправлениеФормамиУНФРБСервер.ФорматСумм(ОбластьМакета.Параметры.Скидка, Шапка.ВалютаДокумента);
            ОбластьМакета.Параметры.ЦенаСоСкидкой = УправлениеФормамиУНФРБСервер.ФорматСумм(ОбластьМакета.Параметры.ЦенаСоСкидкой, Шапка.ВалютаДокумента);
            ТабДокумент.Вывести(ОбластьМакета);
            
         КонецЦикла;
         
         // Вывести Подвал                  
         ОбластьМакета = Макет.ПолучитьОбласть("ПодвалП");
         ТабДокумент.Вывести(ОбластьМакета);
         
      КонецЕсли;
      УправлениеПечатью.ЗадатьОбластьПечатиДокумента(ТабДокумент, НомерСтрокиНачало, ОбъектыПечати, Шапка.Ссылка);   
   КонецЦикла;

   ТабДокумент.АвтоМасштаб = Истина;
   
   Возврат ТабДокумент;

КонецФункции // ПечатьСчета()

LexaK

вообще такие длинные тексты, наверно лучше прикреплять, как вложенные файлы.

в вашем коде не нашел где в макет выводится СуммаНДС, попробуйте добавить такие строчки в вашу программу

    //это кусок вашего кода по формированию и выводу строки отчета
    ОбластьМакета.Параметры.Скидка = Окр(ВыборкаСтрокТовары.Цена * ВыборкаСтрокТовары.Количество - ВыборкаСтрокТовары.Сумма, Шапка.ВалютаДокумента.ПорядокОкругленияДЧВ, 2);
    ОбластьМакета.Параметры.ЦенаСоСкидкой = Окр(Цена - Цена * ВыборкаСтрокТовары.ПроцентСкидкиНаценки / 100, Шапка.ВалютаДокумента.ПорядокОкругленияДЧВ, 2);
    ОбластьМакета.Параметры.Цена = УправлениеФормамиУНФРБСервер.ФорматСумм(Цена, Шапка.ВалютаДокумента);
    ОбластьМакета.Параметры.Скидка = УправлениеФормамиУНФРБСервер.ФорматСумм(ОбластьМакета.Параметры.Скидка, Шапка.ВалютаДокумента);
    ОбластьМакета.Параметры.ЦенаСоСкидкой = УправлениеФормамиУНФРБСервер.ФорматСумм(ОбластьМакета.Параметры.ЦенаСоСкидкой, Шапка.ВалютаДокумента);
   
    //добавьте эти строчки
    ОбластьМакета.Параметры.СуммаНДС = УправлениеФормамиУНФРБСервер.ФорматСумм(СуммаНДС , Шапка.ВалютаДокумента);
    Сообщить("СуммаНДС: " + СуммаНДС); //тестовая печать, в окне сообщений увидите реальное значение Суммы НДС, после отладки удалите,

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

если помогло нажмите: Спасибо!

mixqn

Шапка.ВалютаДокумента.ПорядокОкругленияДЧВ - тут какое значение?
вообще, код объемный, изучать его довольно трудоемко. еще раз посоветую воспользоваться отладчиком. установите точку останова и проверьте, что вы передаете в макет.
Добавлено: 01 июл 2016, 13:31


ну или да, можно добавить вывод сообщения. по сути рекомендация аналогичная - нужно проверить, какое значение вы пытаетесь вывести в макет.

Валерий Жур

Спасибо, большое!
Провел отладку, значение передается 9,65 (верное)
Однако в макете все ровно 10.
Понимаю что проблема с настройкой ячейки (либо еще что-то)
Какие параметры рекомендуете  проверить ?

Kironten

Цитата: Валерий Жур от 01 июл 2016, 14:26
Спасибо, большое!
Провел отладку, значение передается 9,65 (верное)
Однако в макете все ровно 10.
Понимаю что проблема с настройкой ячейки (либо еще что-то)
Какие параметры рекомендуете  проверить ?

Теги:

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

Рейтинг@Mail.ru

Поиск