Итак, что нам нужно?
Типовая конфигурация 1c "Управление Торговлей" 10.3. Лучше всего, с демо-данными. Если у вас нет демо-данных, то можно скачать конфигурацию и установить себе чистую базу данных. Завести несколько документов (Поступление, Реализация). Если у вас уже есть рабочая база УТ 10.3, отлично! Итак, что я имею? Для статей по 1с на данном сайте я использую типовую конфигурацию с заведенными документами, фиктивные организации и фиктивные документы. Под этим я понимаю взятые с потолка названия, суммы и цифры. Заведенные в 1с документы, отчеты и печатные формы показывают жизнь придуманной организации.
Что мы хотим получить?
Я работаю программистом в организации, использующей несколько оптовых складов. На складах отгружают товар пачками, упаковками, коробками. НЕ штуками! Поэтому кладовщику, и грузчикам крайне неудобно в стандартных формах Торг-12, счет-фактура, УПД видеть количество в штуках. Именно складские работники попросили внести изменения в УПД, для облегчения и ускорения складской отгрузки товаров:
- Добавить колонку "Количество мест". Место - это коробка, упаковка для оптовой отгрузки товара большой партией. Для каждого товара устанавливается своя единица измерения (коробка, упаковка, и т.п.)
- Добавить колонку "Количество штук в месте". Это означает, сколько единиц товара в 1 коробке.
- Добавить колонку "Цена с НДС". Эта колонка важна для клиентов, которые сверяют документы при погрузке товара на складе со своими документами. Чем быстрее Клиент убедится в правильности цифр, тем быстрее заберет товар.
Итак, начнем!
 |
1. Типовая форма УПД в УТ 10.3 - Демо конфигурация. Мы видим, как выглядит Универсальный Передаточный Документ. |
 |
2. Откроем Общие Макеты в Конфигурации |
 |
3. Скопируем Макет УниверсальныйПередаточныйДокумент |
 |
4. Назовем скопированный макет УниверсальныйПередаточныйДокумент_Доработанный |
 |
5. Откроем на редактирование скопированный Макет. Таким образом мы не затронем типовой макет, свои изменения будем вносить в скопированный. При обновлении типовой конфигурации все наши изменения останутся на месте! |
 |
6. Добавим колонки в макет |
 |
7. Откроем Общий Модуль УчетНДС |
 |
8. Откроем процедуру ВывестиСчетФактуруВТабличныйДокумент |
 |
9.1. Внесем Изменения в коде процедуры |
 |
9.2. Изменения в коде процедуры |
 |
9.3. Изменения в коде процедуры |
Полный текст измененной процедуры:
Процедура ВывестиСчетФактуруВТабличныйДокумент(ТабДокумент, Макет, ДанныеДляПечати) Экспорт
Дата = ДанныеДляПечати.ДатаСчетФактуры;
ЭтоПечатьУПД = ДанныеДляПечати.Свойство("СтатусУПД");
БезПереходаПраваСобственности = Ложь;
Если ЭтоПечатьУПД И (ДанныеДляПечати.СтатусУПД = 2) Тогда
Если ДанныеДляПечати.Свойство("ПередачаНаРеализациюПоКомиссии")
И ДанныеДляПечати.ПередачаНаРеализациюПоКомиссии Тогда
БезПереходаПраваСобственности = Истина;
КонецЕсли;
КонецЕсли;
СведенияОПокупателе = УправлениеКонтактнойИнформацией.СведенияОЮрФизЛице(ДанныеДляПечати.Покупатель, Дата);
СведенияОПоставщике = УправлениеКонтактнойИнформацией.СведенияОЮрФизЛице(ДанныеДляПечати.Поставщик, Дата);
СведенияОПодразделенииПокупателя = Неопределено;
Если ДанныеДляПечати.ВидСчетаФактуры = Перечисления.ВидСчетаФактурыВыставленного.НаРеализацию Тогда
Если ТипЗнч(ДанныеДляПечати.Покупатель) = Тип("СправочникСсылка.Контрагенты") И ЗначениеЗаполнено(ДанныеДляПечати.Покупатель) Тогда
РеквизитыПокупателя = ОбщегоНазначения.ПолучитьЗначенияРеквизитов(ДанныеДляПечати.Покупатель, "ГоловнойКонтрагент, ОбособленноеПодразделение");
Если РеквизитыПокупателя.ОбособленноеПодразделение И ЗначениеЗаполнено(РеквизитыПокупателя.ГоловнойКонтрагент) Тогда
СведенияОПокупателе = УправлениеКонтактнойИнформацией.СведенияОЮрФизЛице(РеквизитыПокупателя.ГоловнойКонтрагент, Дата);
СведенияОПодразделенииПокупателя = УправлениеКонтактнойИнформацией.СведенияОЮрФизЛице(ДанныеДляПечати.Покупатель, Дата);
КонецЕсли;
КонецЕсли;
КонецЕсли;
// Выводим шапку
ОбластьМакета = Макет.ПолучитьОбласть("Шапка");
ОбластьМакета.Параметры.Заполнить(ДанныеДляПечати);
Если ЭтоПечатьУПД Тогда
Если ДанныеДляПечати.Исправление Тогда
ОбластьМакета.Параметры.НомерИсправления = Строка(ДанныеДляПечати.НомерИсправления);
ОбластьМакета.Параметры.ДатаИсправления = Формат(Дата, "ДФ='дд ММММ гггг'") + " г.";
Иначе
ОбластьМакета.Параметры.НомерИсправления = "--";
ОбластьМакета.Параметры.ДатаИсправления = "--";
КонецЕсли;
Иначе
Если ДанныеДляПечати.Исправление Тогда
ОбластьМакета.Параметры.НомерИсправления = "Исправление №" + Строка(ДанныеДляПечати.НомерИсправления)
+ " от " + Формат(Дата, "ДФ='дд ММММ гггг'") + " г.";
Иначе
ОбластьМакета.Параметры.НомерИсправления = "Исправление № -- от --";
КонецЕсли;
КонецЕсли;
Если БезПереходаПраваСобственности Тогда
ОбластьМакета.Параметры.ПредставлениеПоставщика = "--";
ОбластьМакета.Параметры.АдресПоставщика = "--";
ОбластьМакета.Параметры.ИННпоставщика = "--";
Иначе
ОбластьМакета.Параметры.ПредставлениеПоставщика = ?(ЭтоПечатьУПД, "", "Продавец: ")
+ ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОПоставщике, "ПолноеНаименование,");
ОбластьМакета.Параметры.АдресПоставщика = ?(ЭтоПечатьУПД, "", "Адрес: ")
+ ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОПоставщике, "ЮридическийАдрес,");
КПП = ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОПоставщике, "КПП,", Ложь);
Если ЗначениеЗаполнено(КПП) Тогда
КПП = "/" + КПП;
КонецЕсли;
ОбластьМакета.Параметры.ИННпоставщика = ?(ЭтоПечатьУПД, "", "ИНН/КПП продавца: ")
+ ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОПоставщике, "ИНН,", Ложь) + КПП;
КонецЕсли;
Если ЭтоПечатьУПД Тогда
НомерНаПечатьСтрокой = ОбщегоНазначения.ПолучитьНомерНаПечать(ДанныеДляПечати);
ДатаНаПечатьСтрокой = Формат(ДанныеДляПечати.Дата, "ДФ='дд ММММ гггг'") + " г.";
ОбластьМакета.Параметры.Номер = НомерНаПечатьСтрокой;
ОбластьМакета.Параметры.Дата = ДатаНаПечатьСтрокой;
ЗаголовокДляПечати = "Универсальный передаточный документ № " + НомерНаПечатьСтрокой + " от " + ДатаНаПечатьСтрокой;
Иначе
ЗаголовокДляПечати = ОбщегоНазначения.СформироватьЗаголовокДокумента(ДанныеДляПечати, "Счет-фактура") + " г.";
ОбластьМакета.Параметры.Номер = ЗаголовокДляПечати;
КонецЕсли;
ТолькоУслуги = Истина;
Для каждого СтрокаТовар Из ДанныеДляПечати.ТабличнаяЧасть Цикл
Если (ТипЗнч(СтрокаТовар.Товар) = Тип("СправочникСсылка.Номенклатура") И НЕ СтрокаТовар.Товар.Услуга) Тогда
ТолькоУслуги = Ложь;
Прервать;
КонецЕсли;
КонецЦикла;
Если ДанныеДляПечати.ВидСчетаФактуры = Перечисления.ВидСчетаФактурыВыставленного.НаАванс
ИЛИ ДанныеДляПечати.ВидСчетаФактуры = Перечисления.ВидСчетаФактурыВыставленного.НаАвансКомитента Тогда
ОбластьМакета.Параметры.ПредставлениеГрузоотправителя = ?(ЭтоПечатьУПД, "", "Грузоотправитель и его адрес: ") + "--";
ОбластьМакета.Параметры.ПредставлениеГрузополучателя = ?(ЭтоПечатьУПД, "", "Грузополучатель и его адрес: ") + "--";
Иначе
Если ТолькоУслуги Тогда
ОбластьМакета.Параметры.ПредставлениеГрузоотправителя = ?(ЭтоПечатьУПД, "", "Грузоотправитель и его адрес: ") + "--";
ОбластьМакета.Параметры.ПредставлениеГрузополучателя = ?(ЭтоПечатьУПД, "", "Грузополучатель и его адрес: ") + "--";
Иначе
СведенияОГрузоотправителе = УправлениеКонтактнойИнформацией.СведенияОЮрФизЛице(
?(БезПереходаПраваСобственности, ДанныеДляПечати.Поставщик,
?(ДанныеДляПечати.Грузоотправитель = "он же", Неопределено, ДанныеДляПечати.Грузоотправитель)), Дата);
СведенияОГрузополучателе = ?(БезПереходаПраваСобственности, СведенияОПокупателе,
УправлениеКонтактнойИнформацией.СведенияОЮрФизЛице(ДанныеДляПечати.Грузополучатель, Дата));
ОбластьМакета.Параметры.ПредставлениеГрузоотправителя = ?(ЭтоПечатьУПД, "", "Грузоотправитель и его адрес: ")
+ ?(НЕ ЗначениеЗаполнено(ДанныеДляПечати.Грузоотправитель),
"--",
?(ДанныеДляПечати.Грузоотправитель = "он же",
ДанныеДляПечати.Грузоотправитель,
ФормированиеПечатныхФорм.ОписаниеОрганизации(
СведенияОГрузоотправителе, "ПолноеНаименование,ФактическийАдрес,")));
Если ДанныеДляПечати.Свойство("АдресДоставки")
И НЕ ПустаяСтрока(ДанныеДляПечати.АдресДоставки) Тогда
ПредставлениеГрузополучателя = ?(ЭтоПечатьУПД, "", "Грузополучатель и его адрес: ")
+ ?(НЕ ЗначениеЗаполнено(ДанныеДляПечати.Грузополучатель),
ДанныеДляПечати.АдресДоставки,
ФормированиеПечатныхФорм.ОписаниеОрганизации(
СведенияОГрузополучателе, "ПолноеНаименование") + ", " + ДанныеДляПечати.АдресДоставки);
Иначе
ПредставлениеГрузополучателя = ?(ЭтоПечатьУПД, "", "Грузополучатель и его адрес: ")
+ ?(НЕ ЗначениеЗаполнено(ДанныеДляПечати.Грузополучатель),
"--",
ФормированиеПечатныхФорм.ОписаниеОрганизации(
СведенияОГрузополучателе, "ПолноеНаименование, ФактическийАдрес,"));
КонецЕсли;
ОбластьМакета.Параметры.ПредставлениеГрузополучателя = ПредставлениеГрузополучателя;
КонецЕсли;
КонецЕсли;
СтрокаПоДокументу = "";
Если ДанныеДляПечати.Свойство("ТаблицаДатОплат") Тогда
Для каждого ПараметрыДокументаОплаты Из ДанныеДляПечати.ТаблицаДатОплат Цикл
Если НЕ ЗначениеЗаполнено(ПараметрыДокументаОплаты.НомерПлатежноРасчетногоДокумента)
И НЕ ЗначениеЗаполнено(ПараметрыДокументаОплаты.ДатаПлатежноРасчетногоДокумента) Тогда
Продолжить;
КонецЕсли;
СтрокаПоДокументу = СтрокаПоДокументу
+ ?(ПустаяСтрока(СтрокаПоДокументу), ?(ЭтоПечатьУПД, "", "К платежно-расчетному документу № "),", ")
+ ПараметрыДокументаОплаты.НомерПлатежноРасчетногоДокумента
+ " от " + Формат(ПараметрыДокументаОплаты.ДатаПлатежноРасчетногоДокумента, "ДФ=dd.MM.yyyy") + " г.";
КонецЦикла;
КонецЕсли;
Если ПустаяСтрока(СтрокаПоДокументу) Тогда
Если ДанныеДляПечати.ВидСчетаФактуры = Перечисления.ВидСчетаФактурыВыставленного.НаАванс
ИЛИ ДанныеДляПечати.ВидСчетаФактуры = Перечисления.ВидСчетаФактурыВыставленного.НаАвансКомитента Тогда
СтрокаПоДокументу = ?(ЭтоПечатьУПД, "", "К платежно-расчетному документу № ") + "-- от --";
Иначе
СтрокаПоДокументу = ?(ЭтоПечатьУПД, "", "К платежно-расчетному документу № ") + " от";
КонецЕсли;
КонецЕсли;
Если ЭтоПечатьУПД И ДанныеДляПечати.СтатусУПД = 2 Тогда
// В УПД в статусе 2 ставятся прочерки показатели, установленные в качестве обязательных исключительно для счета-фактуры:
// - «К платежно-расчетному документу» (строка 7);
СтрокаПоДокументу = "--";
КонецЕсли;
ОбластьМакета.Параметры.ПоДокументу = СтрокаПоДокументу;
Если БезПереходаПраваСобственности Тогда
ОбластьМакета.Параметры.ПредставлениеПокупателя = "--";
ОбластьМакета.Параметры.АдресПокупателя = "--";
ОбластьМакета.Параметры.ИННПокупателя = "--";
Иначе
ОбластьМакета.Параметры.ПредставлениеПокупателя = ?(ЭтоПечатьУПД, "", "Покупатель: ")
+ ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОПокупателе, "ПолноеНаименование,");
ОбластьМакета.Параметры.АдресПокупателя = ?(ЭтоПечатьУПД, "", "Адрес: ")
+ ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОПокупателе, "ЮридическийАдрес,");
Если ЗначениеЗаполнено(ДанныеДляПечати.КППКонтрагента) Тогда
КПП = ДанныеДляПечати.КППКонтрагента;
ИначеЕсли СведенияОПодразделенииПокупателя <> Неопределено Тогда
КПП = ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОПодразделенииПокупателя, "КПП,", Ложь);
Иначе
КПП = ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОПокупателе, "КПП,", Ложь);
КонецЕсли;
Если ЗначениеЗаполнено(КПП) Тогда
КПП = "/" + КПП;
КонецЕсли;
ОбластьМакета.Параметры.ИННПокупателя = ?(ЭтоПечатьУПД, "", "ИНН/КПП покупателя: ")
+ ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОПокупателе, "ИНН,", Ложь) + КПП;
КонецЕсли;
ОбластьМакета.Параметры.Валюта = ?(ЭтоПечатьУПД, "", "Валюта: наименование, код ")
+ ?(ЗначениеЗаполнено(ДанныеДляПечати.Валюта),
ДанныеДляПечати.Валюта.НаименованиеПолное + ", " + ДанныеДляПечати.Валюта.Код, "");
ТабДокумент.Вывести(ОбластьМакета);
// Выводим заголовок таблицы
ОбластьМакетаЗаголовокТаблицы = Макет.ПолучитьОбласть("ЗаголовокТаблицы");
ОбластьМакетаЗаголовокТаблицы.Параметры.Заполнить(ДанныеДляПечати);
ТабДокумент.Вывести(ОбластьМакетаЗаголовокТаблицы);
// Дополнительная подготовка данных для вывода в табличную часть
ВыборкаСтрокТовары = ДанныеДляПечати.ТабличнаяЧасть;
ВыборкаСтрокТовары.Колонки.Добавить("СуммаБезНДС");
ВыборкаСтрокТовары.Колонки.Добавить("СуммаСНДС");
Если ЭтоПечатьУПД Тогда
ДопКолонка = Константы.ДополнительнаяКолонкаПечатныхФормДокументов.Получить();
Если ДопКолонка = Перечисления.ДополнительнаяКолонкаПечатныхФормДокументов.Артикул Тогда
ВыводитьКоды = Истина;
КолонкаТоварКод = "ТоварАртикул";
ИначеЕсли ДопКолонка = Перечисления.ДополнительнаяКолонкаПечатныхФормДокументов.Код Тогда
ВыводитьКоды = Истина;
КолонкаТоварКод = "ТоварКод";
Иначе
ВыводитьКоды = Ложь;
КолонкаТоварКод = "";
КонецЕсли;
Иначе
ВыводитьКоды = Ложь;
КолонкаТоварКод = "";
КонецЕсли;
Для Каждого Строчка Из ВыборкаСтрокТовары Цикл
Строчка.СуммаСНДС = Строчка.Сумма + ?(Строчка.СуммаВключаетНДС, 0, Строчка.СуммаНДС);
Строчка.СуммаБезНДС = Строчка.СуммаСНДС - Строчка.СуммаНДС;
Если ДанныеДляПечати.ВидСчетаФактуры = Перечисления.ВидСчетаФактурыВыставленного.НаРеализацию И
(Строчка.СтавкаНДС = Перечисления.СтавкиНДС.НДС20_120
ИЛИ Строчка.СтавкаНДС = Перечисления.СтавкиНДС.НДС18_118
ИЛИ Строчка.СтавкаНДС = Перечисления.СтавкиНДС.НДС10_110) Тогда
Если (НЕ Строчка.СуммаВключаетНДС) ИЛИ Строчка.Цена = 0 Тогда
Строчка.Цена = Окр(Строчка.СуммаСНДС / Строчка.Количество, 2);
КонецЕсли;
Иначе
Если Строчка.СуммаВключаетНДС Тогда
Строчка.Цена = 0;
КонецЕсли;
КонецЕсли;
Если НЕ ЗначениеЗаполнено(Строчка.ЕдиницаИзмерения) Тогда
Строчка.Количество = 0;
Строчка.Цена = 0;
ИначеЕсли Строчка.Количество = 0 Тогда
Строчка.Цена = 0;
ИначеЕсли Строчка.Цена = 0 Тогда
Строчка.Цена = Окр(Строчка.СуммаБезНДС / Строчка.Количество, 2);
КонецЕсли;
Строчка.ТоварКод = ?(ВыводитьКоды, Строчка[КолонкаТоварКод], "");
КонецЦикла;
ВыборкаСтрокТовары.Свернуть("Товар, ТоварНаименование, ТоварКод, ЕдиницаИзмерения, ЕдиницаИзмеренияКод, Цена, СтавкаНДС,
|НомерГТД, ПредставлениеГТД, СтранаПроисхождения, СтранаПроисхожденияКод, ПредставлениеСтраны",
"Количество, Сумма, СуммаНДС, СуммаСНДС, СуммаБезНДС, НомерСтроки");
// Выводим строки таблицы
ОбластьМакета = Макет.ПолучитьОбласть("Строка");
ОбластьМакетаПодвал = Макет.ПолучитьОбласть("Подвал");
ОбластьМакетаИтого = Макет.ПолучитьОбласть("Итого");
Если ЭтоПечатьУПД Тогда
ОбластьМакетаПодвалНакладной = Макет.ПолучитьОбласть("ПодвалНакладной");
Иначе
ОбластьМакетаПодвалНакладной = Новый ТабличныйДокумент;
КонецЕсли;
КоличествоСтраниц = 1;
НомерСтроки = 0;
КоличествоСтрок = ВыборкаСтрокТовары.Количество();
Для Каждого Строчка Из ВыборкаСтрокТовары Цикл
НомерСтроки = НомерСтроки + 1;
Строчка.НомерСтроки = НомерСтроки;
ОбластьМакета.Параметры.Заполнить(Строчка);
Если НЕ ЗначениеЗаполнено(Строчка.ТоварНаименование) Тогда
ОбластьМакета.Параметры.ТоварНаименование = Строчка.Товар;
КонецЕсли;
ОбластьМакета.Параметры.ТоварНаименование = СокрЛП(ОбластьМакета.Параметры.ТоварНаименование);
Если ДанныеДляПечати.ВидСчетаФактуры = Перечисления.ВидСчетаФактурыВыставленного.НаРеализацию Тогда
ОбластьМакета.Параметры.Стоимость = Строчка.СуммаБезНДС;
ОбластьМакета.Параметры.Цена = Строчка.Цена;
Иначе
ОбластьМакета.Параметры.Стоимость = 0;
ОбластьМакета.Параметры.Количество = 0;
// Лунегов П.В. +++
ОбластьМакета.Параметры.КоличествоМест = 0;
// Лунегов П.В. +++
ОбластьМакета.Параметры.Цена = 0;
КонецЕсли;
ОбластьМакета.Параметры.Всего = Строчка.СуммаСНДС;
ОбластьМакета.Параметры.СтавкаНДС = Строчка.СтавкаНДС;
Если Строчка.СтавкаНДС = Перечисления.СтавкиНДС.БезНДС Тогда
ОбластьМакета.Параметры.СтавкаНДС = "без НДС";
ОбластьМакета.Параметры.СуммаНДС = "без НДС";
КонецЕсли;
Если ДанныеДляПечати.ВидСчетаФактуры <> Перечисления.ВидСчетаФактурыВыставленного.НаАванс
И ДанныеДляПечати.ВидСчетаФактуры <> Перечисления.ВидСчетаФактурыВыставленного.НаАвансКомитента Тогда
ОбластьМакета.Параметры.Акциз = "без акциза";
КонецЕсли;
Если Строка(Строчка.ПредставлениеСтраны) = "Россия"
ИЛИ Строка(Строчка.ПредставлениеСтраны) = "Российская Федерация"
ИЛИ Строчка.СтранаПроисхождения = Справочники.КлассификаторСтранМира.РОССИЯ Тогда
ОбластьМакета.Параметры.ПредставлениеСтраны = "--";
ОбластьМакета.Параметры.СтранаПроисхожденияКод = "--";
ОбластьМакета.Параметры.ПредставлениеГТД = "--";
Иначе
Если ЗначениеЗаполнено(Строчка.СтранаПроисхождения) Тогда
ОбластьМакета.Параметры.ПредставлениеСтраны = СокрЛП(Строчка.СтранаПроисхождения.Наименование);
Иначе
ОбластьМакета.Параметры.СтранаПроисхожденияКод = "--";
ОбластьМакета.Параметры.ПредставлениеСтраны = "--";
ОбластьМакета.Параметры.ПредставлениеГТД = "--";
КонецЕсли;
КонецЕсли;
// Проставляем прочерки в незаполненные графы в соответствии с Постановлением
Если ДанныеДляПечати.ВидСчетаФактуры = Перечисления.ВидСчетаФактурыВыставленного.НаАванс
ИЛИ ДанныеДляПечати.ВидСчетаФактуры = Перечисления.ВидСчетаФактурыВыставленного.НаАвансКомитента Тогда
ОбластьМакета.Параметры.ЕдиницаИзмерения = "--";
ОбластьМакета.Параметры.ЕдиницаИзмеренияКод = "--";
ОбластьМакета.Параметры.Количество = "--";
// Лунегов П.В. +++
ОбластьМакета.Параметры.КоличествоМест = "--";
// Лунегов П.В. +++
ОбластьМакета.Параметры.Цена = "--";
ОбластьМакета.Параметры.Стоимость = "--";
ОбластьМакета.Параметры.Акциз = "--";
ОбластьМакета.Параметры.СтранаПроисхожденияКод = "--";
ОбластьМакета.Параметры.ПредставлениеСтраны = "--";
ОбластьМакета.Параметры.ПредставлениеГТД = "--";
Иначе
Если НЕ ЗначениеЗаполнено(ОбластьМакета.Параметры.ЕдиницаИзмерения) Тогда
ОбластьМакета.Параметры.ЕдиницаИзмерения = "--";
ОбластьМакета.Параметры.ЕдиницаИзмеренияКод = "--";
КонецЕсли;
Если НЕ ЗначениеЗаполнено(ОбластьМакета.Параметры.ЕдиницаИзмеренияКод) Тогда
ОбластьМакета.Параметры.ЕдиницаИзмеренияКод = "--";
КонецЕсли;
Если НЕ ЗначениеЗаполнено(ОбластьМакета.Параметры.Количество) Тогда
ОбластьМакета.Параметры.Количество = "--";
// Лунегов П.В. +++
ОбластьМакета.Параметры.КоличествоМест = "--";
// Лунегов П.В. +++
КонецЕсли;
Если НЕ ЗначениеЗаполнено(ОбластьМакета.Параметры.Цена) Тогда
ОбластьМакета.Параметры.Цена = "--";
КонецЕсли;
КонецЕсли;
Если ЭтоПечатьУПД И ДанныеДляПечати.СтатусУПД = 2 Тогда
// Ставим прочерки в графах, которые установленные в качестве обязательных исключительно для счета-фактуры
//- «В том числе сумма акциза» (графа 6);
//- «Налоговая ставка» (графа 7);
//- «Цифровой код страны происхождения товара» (графа 10);
//- «Краткое наименование страны происхождения товара» (графа 10а);
//- «Номер таможенной декларации» (графа 11).
ОбластьМакета.Параметры.Акциз = "--";
ОбластьМакета.Параметры.СтавкаНДС = "--";
ОбластьМакета.Параметры.СуммаНДС = ?(Строчка.СуммаНДС <> 0 , Строчка.СуммаНДС, "--");
ОбластьМакета.Параметры.СтранаПроисхожденияКод = "--";
ОбластьМакета.Параметры.ПредставлениеСтраны = "--";
ОбластьМакета.Параметры.ПредставлениеГТД = "--";
КонецЕсли;
// Проверим возможность вывода табличного документа
СтрокаСПодвалом = Новый Массив;
СтрокаСПодвалом.Добавить(ОбластьМакета);
Если НомерСтроки = КоличествоСтрок Тогда
// Если последняя строка, то должен поместится итог и подвал
СтрокаСПодвалом.Добавить(ОбластьМакетаИтого);
СтрокаСПодвалом.Добавить(ОбластьМакетаПодвал);
Если ЭтоПечатьУПД Тогда
СтрокаСПодвалом.Добавить(ОбластьМакетаПодвалНакладной);
КонецЕсли;
КонецЕсли;
Если НЕ ФормированиеПечатныхФорм.ПроверитьВыводТабличногоДокумента(ТабДокумент, СтрокаСПодвалом) Тогда
Если КоличествоСтрок > 0 Тогда
// Вывод разделителя и заголовка таблицы на новой странице
ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();
ТабДокумент.Вывести(ОбластьМакетаЗаголовокТаблицы);
КоличествоСтраниц = КоличествоСтраниц + 1;
КонецЕсли;
КонецЕсли;
// Лунегов П.В. +++
ОбластьМакета.Параметры.КоличествоВОдномМесте = Строка(Строчка.Товар.ЕдиницаИзмеренияМест.Коэффициент);
Если ЗначениеЗаполнено(Строчка.Товар.ЕдиницаИзмеренияМест.Коэффициент) Тогда
целоеЧислоМест = цел(Строчка.Количество / Строчка.Товар.ЕдиницаИзмеренияМест.Коэффициент);
ОстатокЧислоМест = Строчка.Количество % Строчка.Товар.ЕдиницаИзмеренияМест.Коэффициент;
Иначе
целоеЧислоМест = 0;
ОстатокЧислоМест = 0;
КонецЕсли;
ОбластьМакета.Параметры.КоличествоМест = ?(целоеЧислоМест<>0,Строка(целоеЧислоМест),"")+
?(ОстатокЧислоМест<>0, ", "+Строка(ОстатокЧислоМест), "");
ОбластьМакета.Параметры.ЦенаСНДС = ?(Строчка.Количество<>0 и Строчка.СуммаСНДС <> 0,
Строка(Строчка.СуммаСНДС / Строчка.Количество),0);
// Лунегов П.В. ---
ТабДокумент.Вывести(ОбластьМакета);
КонецЦикла;
КоличествоЛистов = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Документ составлен на%1%2 %3'"), Символы.ПС, КоличествоСтраниц,
ОбщегоНазначения.ФормаМножественногоЧисла(
НСтр("ru = 'листе'"), НСтр("ru = 'листах'"), НСтр("ru = 'листах'"), КоличествоСтраниц));
ДанныеДляПечати.Вставить("КоличествоЛистов", КоличествоЛистов);
Если КоличествоСтрок > 0 Тогда
ТабДокумент.Область(ТабДокумент.ВысотаТаблицы,,ТабДокумент.ВысотаТаблицы,).ВместеСоСледующим = Истина;
КонецЕсли;
// Выводим строку "Всего к оплате"
Если ДанныеДляПечати.ВидСчетаФактуры = Перечисления.ВидСчетаФактурыВыставленного.НаАванс
ИЛИ ДанныеДляПечати.ВидСчетаФактуры = Перечисления.ВидСчетаФактурыВыставленного.НаАвансКомитента Тогда
ОбластьМакетаИтого.Параметры.ИтогоСтоимость = "--";
Иначе
ОбластьМакетаИтого.Параметры.ИтогоСтоимость = ВыборкаСтрокТовары.Итог("СуммаБезНДС");
КонецЕсли;
ИтогоСуммаНДС = ВыборкаСтрокТовары.Итог("СуммаНДС");
Если ЭтоПечатьУПД И ДанныеДляПечати.СтатусУПД = 2 Тогда
ОбластьМакетаИтого.Параметры.ИтогоСуммаНДС = ?(ИтогоСуммаНДС <> 0, ИтогоСуммаНДС, "--");
ИначеЕсли ДанныеДляПечати.СчетФактураБезНДС Тогда
ОбластьМакетаИтого.Параметры.ИтогоСуммаНДС = "без НДС";
Иначе
ОбластьМакетаИтого.Параметры.ИтогоСуммаНДС = ИтогоСуммаНДС;
КонецЕсли;
ОбластьМакетаИтого.Параметры.ИтогоВсего = ВыборкаСтрокТовары.Итог("СуммаСНДС");
ТабДокумент.Вывести(ОбластьМакетаИтого);
// Выводим подвал
ОбластьМакетаПодвал.Параметры.Заполнить(ДанныеДляПечати);
ОбластьМакетаПодвал.Параметры.Свидетельство = ФормированиеПечатныхФорм.ОписаниеОрганизации(
СведенияОПоставщике, "Свидетельство,");
ТабДокумент.Вывести(ОбластьМакетаПодвал);
КонецПроцедуры //ВывестиСчетФактуруВТабличныйДокумент
 |
10. Открываем процедуру ПечатьУниверсальногоПередаточногоДокумента |
 |
10.1. Вносим изменения в код в процедуре ПечатьУниверсальногоПередаточногоДокумента |
Полный текст измененной процедуры:
Функция ПечатьУниверсальногоПередаточногоДокумента(ДанныеДокумента, СчетФактураТребуется, СтруктураОтбораСчетаФактуры = Неопределено, ТабДокумент = Неопределено) Экспорт
Если ДанныеДокумента.Дата < ДатаНачалаПримененияУПД() Тогда
ТекстСообщения = НСтр("ru = 'Применение формы универсального передаточного (отгрузочного) документа возможно только с "+ДатаНачалаПримененияУПД(Истина)+"!'");
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения);
Возврат Неопределено;
КонецЕсли;
Если СтруктураОтбораСчетаФактуры = Неопределено Тогда
СчетФактура = НайтиПодчиненныйСчетФактуру(ДанныеДокумента.ДокументСсылка, "СчетФактураВыданный");
Иначе
СчетФактура = НайтиПодчиненныйСчетФактуру(ДанныеДокумента.ДокументСсылка, "СчетФактураВыданный", СтруктураОтбораСчетаФактуры);
КонецЕсли;
Если ТабДокумент = Неопределено Тогда
ТабДокумент = Новый ТабличныйДокумент;
// Устанавливаем параметры печати и колонтитулы
ТабДокумент.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;
ТабДокумент.ПолеСверху = 12;
ТабДокумент.ПолеСлева = 0;
ТабДокумент.ПолеСнизу = 0;
ТабДокумент.ПолеСправа = 0;
ТабДокумент.АвтоМасштаб = Истина;
ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_УниверсальныйПередаточныйДокумент";
КонецЕсли;
Если ЗначениеЗаполнено(СчетФактура) ИЛИ СчетФактураТребуется Тогда
// УПД печатается из документа счет-фактура
Если НЕ ЗначениеЗаполнено(СчетФактура) Тогда
ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'По документу ""%1"" не выписан счет-фактура или он помечен на удаление!'"), ДанныеДокумента.ДокументСсылка);
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения);
Возврат Неопределено;
КонецЕсли;
РеквизитыСФ = ОбщегоНазначения.ПолучитьЗначенияРеквизитов(СчетФактура, "Дата, ВидСчетаФактуры, Исправление,НомерИсправления,
|СчетФактураБезНДС, КППКонтрагента");
ДанныеДокумента.Вставить("Ссылка", СчетФактура);
ДанныеДокумента.Вставить("Дата", РеквизитыСФ.Дата);
ДанныеДокумента.Вставить("ВидСчетаФактуры", РеквизитыСФ.ВидСчетаФактуры);
ДанныеДокумента.Вставить("Исправление", РеквизитыСФ.Исправление);
ДанныеДокумента.Вставить("НомерИсправления", РеквизитыСФ.НомерИсправления);
ДанныеДокумента.Вставить("СчетФактураБезНДС", РеквизитыСФ.СчетФактураБезНДС);
ДанныеДокумента.Вставить("КППКонтрагента", РеквизитыСФ.КППКонтрагента);
СчетФактураОбъект = СчетФактура.ПолучитьОбъект();
ДанныеДляПечати = СчетФактураОбъект.ПодготовитьДанныеДляПечатиУниверсальногоПередаточногоДокумента(ДанныеДокумента);
Если ДанныеДляПечати = Неопределено Тогда
Возврат Неопределено;
КонецЕсли;
Если ДанныеДокумента.Свойство("ДатаОтгрузкиПередачи") Тогда
ДанныеДляПечати.Вставить("ДатаОтгрузкиПередачи", ДанныеДокумента.ДатаОтгрузкиПередачи);
КонецЕсли;
СчетФактураОбъект.ПечатьУниверсальногоПередаточногоДокумента(ДанныеДляПечати, ТабДокумент);
Возврат ТабДокумент;
КонецЕсли;
// УПД печатается по статусу 2
ДанныеДляПечати = ПодготовитьДанныеДляПечатиУниверсальногоПередаточногоДокумента(ДанныеДокумента);
Если ДанныеДляПечати = Неопределено Тогда
Возврат Неопределено;
КонецЕсли;
// Лунегов П.В. +++
// До изменения:
//Макет = ПолучитьОбщийМакет("УниверсальныйПередаточныйДокумент");
// После изменения:
Макет = ПолучитьОбщийМакет("УниверсальныйПередаточныйДокумент_МегаТрейдУрал");
// Лунегов П.В. +++
ВывестиСчетФактуруВТабличныйДокумент(ТабДокумент, Макет, ДанныеДляПечати);
ВывестиПодвалУниверсальногоПередаточногоДокументаВТабличныйДокумент(ТабДокумент, Макет, ДанныеДляПечати);
// Устанавливаем параметры печати и колонтитулы
ТабДокумент.ВерхнийКолонтитул.Выводить = Истина;
ТабДокумент.ВерхнийКолонтитул.НачальнаяСтраница = 2;
ТабДокумент.ВерхнийКолонтитул.ВертикальноеПоложение = ВертикальноеПоложение.Низ;
НомерНаПечатьСтрокой = ОбщегоНазначения.ПолучитьНомерНаПечать(ДанныеДляПечати);
ДатаНаПечатьСтрокой = Формат(ДанныеДляПечати.Дата, "ДФ='дд ММММ гггг'") + " г.";
ЗаголовокДляПечати = "Универсальный передаточный документ № " + НомерНаПечатьСтрокой + " от " + ДатаНаПечатьСтрокой;
ТабДокумент.ВерхнийКолонтитул.ТекстСлева = ЗаголовокДляПечати;
ТабДокумент.ВерхнийКолонтитул.ТекстСправа = "Лист [&НомерСтраницы]";
Возврат ТабДокумент;
КонецФункции // ПечатьУниверсальногоПередаточногоДокумента
 |
11. Вносим изменения в процедуру печати в модуле документа СчетФактураВыданный |
Полный текст измененной процедуры:
// Функция формирует табличный документ с печатной формой универсального передаточного документа
//
// Возвращаемое значение:
// Табличный документ - печатная форма универсального передаточного документа
//
Функция ПечатьУниверсальногоПередаточногоДокумента(ДанныеДляПечати, ТабДокумент = Неопределено) Экспорт
// Лунегов П.В. +++
// До изменения:
//Макет = ПолучитьОбщийМакет("УниверсальныйПередаточныйДокумент");
// После изменения:
Макет = ПолучитьОбщийМакет("УниверсальныйПередаточныйДокумент_МегаТрейдУрал");
// Лунегов П.В. +++
Если ТабДокумент = Неопределено Тогда
ТабДокумент = Новый ТабличныйДокумент;
КонецЕсли;
ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_УниверсальныйПередаточныйДокумент";
УчетНДС.ВывестиСчетФактуруВТабличныйДокумент(ТабДокумент, Макет, ДанныеДляПечати);
УчетНДС.ВывестиПодвалУниверсальногоПередаточногоДокументаВТабличныйДокумент(ТабДокумент, Макет, ДанныеДляПечати);
Возврат ТабДокумент;
КонецФункции // ПечатьУниверсальногоПередаточногоДокумента
 |
12. Результат распечатки УПД из Реализации (Счет-фактуры). На картинке слева пометил не тот столбец! Надо было пометить столбцы "В одном месте, штук", "Мест, штук" |
Печатная форма выходит на экран в измененном виде, все получилось! На этом все, пока!