// функция возвращает пустую таблицу значений под // табличную часть документа основания. // функция ИнициализацияТаблицыСтрок() Товары = новый ТаблицаЗначений(); Товары.Колонки.Добавить("Товар"); Товары.Колонки.Добавить("ТоварНаименование"); Товары.Колонки.Добавить("СтранаПроисхождения"); Товары.Колонки.Добавить("ПредставлениеСтраны"); Товары.Колонки.Добавить("НомерГТД"); Товары.Колонки.Добавить("ПредставлениеГТД"); Товары.Колонки.Добавить("Количество"); Товары.Колонки.Добавить("ЕдиницаИзмерения"); Товары.Колонки.Добавить("СуммаВключаетНДС"); Товары.Колонки.Добавить("Цена"); Товары.Колонки.Добавить("СтавкаНДС"); Товары.Колонки.Добавить("СуммаНДС"); Товары.Колонки.Добавить("Сумма"); возврат Товары; конецфункции // Проверяет правильность заполнения шапки документа. // Проставляет прочерки в незаполненных полях печатной формы счета-фактуры. // процедура ПроставитьПрочеркиВПустыеПоля(ОбластьМакета) для т = 0 по ОбластьМакета.Параметры.Количество() - 1 цикл ТекПараметр = ОбластьМакета.Параметры.Получить(т); если (Найти(ТекПараметр, "Продавец:") <> 0) и (СокрЛП(ТекПараметр) = "Продавец:") тогда ОбластьМакета.Параметры.Установить(т, "Продавец: ----"); иначеесли (Найти(ТекПараметр, "Адрес:") <> 0) и (СокрЛП(ТекПараметр) = "Адрес:") тогда ОбластьМакета.Параметры.Установить(т, "Адрес: ----"); иначеесли (Найти(ТекПараметр, "Идентификационный номер продавца (ИНН):") <> 0) и (СокрЛП(ТекПараметр) = "Идентификационный номер продавца (ИНН):") тогда ОбластьМакета.Параметры.Установить(т, "Идентификационный номер продавца (ИНН): ----"); иначеесли (Найти(ТекПараметр, "Грузоотправитель и его адрес:") <> 0) и (СокрЛП(ТекПараметр) = "Грузоотправитель и его адрес:") тогда ОбластьМакета.Параметры.Установить(т, "Грузоотправитель и его адрес: ----"); иначеесли (Найти(ТекПараметр, "Грузополучатель и его адрес:") <> 0) и (СокрЛП(ТекПараметр) = "Грузополучатель и его адрес:") тогда ОбластьМакета.Параметры.Установить(т, "Грузополучатель и его адрес: ----"); иначеесли (Найти(ТекПараметр, "К платежно-расчетному документу №") <> 0) и (СокрЛП(ТекПараметр) = "К платежно-расчетному документу № от") тогда ОбластьМакета.Параметры.Установить(т, "К платежно-расчетному документу № -- от --"); иначеесли (Найти(ТекПараметр, "Покупатель:") <> 0) и (СокрЛП(ТекПараметр) = "Покупатель:") тогда ОбластьМакета.Параметры.Установить(т, "Покупатель: ----"); иначеесли (Найти(ТекПараметр, "Идентификационный номер покупателя (ИНН):") <> 0) и (СокрЛП(ТекПараметр) = "Идентификационный номер покупателя (ИНН):") тогда ОбластьМакета.Параметры.Установить(т, "Идентификационный номер покупателя (ИНН): ----"); иначеесли не ЗначениеЗаполнено(ТекПараметр) тогда ОбластьМакета.Параметры.Установить(т, "--"); конецесли; конеццикла; конецпроцедуры // ПроставитьПрочеркиВПустыеПоля() // Функция собирает данные по документу основанию реализации и возвращает // типизированную структуру с данными. // функция СобратьДанныеПоРеализацияТоваровУслуг(ДокОснование) Запрос = новый Запрос; Запрос.УстановитьПараметр("ДокументОснование", ДокОснование); Запрос.УстановитьПараметр("ПустойКонтрагент", Справочники.Контрагенты.ПустаяСсылка()); Запрос.Текст = " |ВЫБРАТЬ | Организация, | Организация КАК Поставщик, | ВЫБОР | КОГДА ЕСТЬNULL(Грузоотправитель, &ПустойКонтрагент) = &ПустойКонтрагент | ТОГДА ""он же"" | ИНАЧЕ Грузоотправитель | КОНЕЦ КАК Грузоотправитель, | Подразделение КАК Подразделение, | Контрагент КАК Покупатель, | ВЫБОР | КОГДА ЕСТЬNULL(Грузополучатель, &ПустойКонтрагент) = &ПустойКонтрагент | ТОГДА Контрагент | ИНАЧЕ Грузополучатель | КОНЕЦ КАК Грузополучатель, | СуммаДокумента КАК Сумма, | ВалютаДокумента КАК Валюта, | УчитыватьНДС КАК УчитыватьНДС, | СуммаВключаетНДС КАК СуммаВключаетНДС |ИЗ | Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг | |ГДЕ | РеализацияТоваровУслуг.Ссылка = &ДокументОснование"; Шапка = Запрос.Выполнить().Выбрать(); Шапка.Следующий(); Запрос = новый Запрос; Запрос.УстановитьПараметр("ДокументОснование", ДокОснование); Запрос.УстановитьПараметр("ПустаяЕдиница", Справочники.ЕдиницыИзмерения.ПустаяСсылка()); Запрос.Текст = " |ВЫБРАТЬ | Номенклатура КАК Товар, | ВЫРАЗИТЬ (Номенклатура.НаименованиеПолное КАК СТРОКА(200)) КАК ТоварНаименование, | СерияНоменклатуры.СтранаПроисхождения КАК СтранаПроисхождения, | СерияНоменклатуры.СтранаПроисхождения.НаименованиеПолное КАК ПредставлениеСтраны, | СерияНоменклатуры.НомерГТД КАК НомерГТД, | СерияНоменклатуры.НомерГТД.Представление КАК ПредставлениеГТД, | ЕдиницаИзмерения.Представление КАК ЕдиницаИзмерения, | Количество КАК Количество, | Цена КАК Цена, | СтавкаНДС КАК СтавкаНДС, | СуммаНДС КАК СуммаНДС, | Сумма КАК Сумма, | ХарактеристикаНоменклатуры КАК Характеристика, | СерияНоменклатуры КАК Серия, | НомерСтроки КАК НомерСтроки, | 1 КАК НомерТЧ |ИЗ | Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары | |ГДЕ | РеализацияТоваровУслугТовары.Ссылка = &ДокументОснование | |ОБЪЕДИНИТЬ ВСЕ | |ВЫБРАТЬ | Номенклатура КАК Товар, | Содержание КАК ТоварНаименование, | """" КАК СтранаПроисхождения, | NULL КАК ПредставлениеСтраны, | NULL КАК НомерГТД, | """" КАК ПредставлениеГТД, | Номенклатура.ЕдиницаХраненияОстатков.Представление КАК ЕдиницаИзмерения, | ВЫБОР КОГДА Номенклатура.ЕдиницаХраненияОстатков = &ПустаяЕдиница | ТОГДА 0 ИНАЧЕ Количество | КОНЕЦ КАК Количество, | Цена КАК Цена, | СтавкаНДС КАК СтавкаНДС, | СуммаНДС КАК СуммаНДС, | Сумма КАК Сумма, | NULL КАК Характеристика, | NULL КАК Серия, | НомерСтроки КАК НомерСтроки, | 2 КАК НомерТЧ |ИЗ | Документ.РеализацияТоваровУслуг.Услуги КАК РеализацияТоваровУслугУслуги | |ГДЕ | РеализацияТоваровУслугУслуги.Ссылка = &ДокументОснование | |УПОРЯДОЧИТЬ ПО | НомерТЧ, | НомерСтроки |"; ВыборкаСтрокТовары = Запрос.Выполнить().Выбрать(); ДанныеДляПечати = новый Структура(); ДанныеДляПечати.Вставить("Организация", Шапка.Организация); ДанныеДляПечати.Вставить("Номер", СсылкаНаОбъект.Номер); ДанныеДляПечати.Вставить("Дата", СсылкаНаОбъект.Дата); ДанныеДляПечати.Вставить("НомерПРД", СсылкаНаОбъект.НомерПлатежноРасчетногоДокумента); ДанныеДляПечати.Вставить("ДатаПРД", СсылкаНаОбъект.ДатаПлатежноРасчетногоДокумента); ДанныеДляПечати.Вставить("Поставщик", Шапка.Поставщик); ДанныеДляПечати.Вставить("Грузоотправитель", Шапка.Грузоотправитель); ДанныеДляПечати.Вставить("Подразделение", Шапка.Подразделение); ДанныеДляПечати.Вставить("Покупатель", Шапка.Покупатель); ДанныеДляПечати.Вставить("Грузополучатель", Шапка.Грузополучатель); ДанныеДляПечати.Вставить("Сумма", Шапка.Сумма); ДанныеДляПечати.Вставить("Валюта", Шапка.Валюта); ДанныеДляПечати.Вставить("УчитыватьНДС", Шапка.УчитыватьНДС); Руководители = РегламентированнаяОтчетность.ОтветственныеЛицаОрганизаций(Шапка.Организация, СсылкаНаОбъект.Дата,); ДанныеДляПечати.Вставить(?(РегламентированнаяОтчетность.ЭтоПБОЮЛ(Шапка.Поставщик), "ФИОПБОЮЛ", "ФИОРуководителя"), Руководители.Руководитель); ДанныеДляПечати.Вставить("ФИОГлавногоБухгалтера", Руководители.ГлавныйБухгалтер); Товары = ИнициализацияТаблицыСтрок(); пока ВыборкаСтрокТовары.Следующий() = 1 цикл Строчка = Товары.Добавить(); Строчка.Товар = ВыборкаСтрокТовары.Товар; Строчка.ТоварНаименование = СокрЛП(ВыборкаСтрокТовары.ТоварНаименование) + ФормированиеПечатныхФорм.ПредставлениеСерий(ВыборкаСтрокТовары); Строчка.СтранаПроисхождения = ВыборкаСтрокТовары.СтранаПроисхождения; Строчка.ПредставлениеСтраны = ?(не ЗначениеЗаполнено(ВыборкаСтрокТовары.ПредставлениеСтраны), ВыборкаСтрокТовары.СтранаПроисхождения, ВыборкаСтрокТовары.ПредставлениеСтраны); Строчка.НомерГТД = ВыборкаСтрокТовары.НомерГТД; Строчка.ПредставлениеГТД = ВыборкаСтрокТовары.ПредставлениеГТД; Строчка.Количество = ВыборкаСтрокТовары.Количество; Строчка.ЕдиницаИзмерения = ВыборкаСтрокТовары.ЕдиницаИзмерения; Строчка.СуммаВключаетНДС = Шапка.СуммаВключаетНДС; Строчка.Цена = ?(ВыборкаСтрокТовары.Количество = 0, 0, (ВыборкаСтрокТовары.Сумма - ?(Шапка.СуммаВключаетНДС,ВыборкаСтрокТовары.СуммаНДС,0)) / ВыборкаСтрокТовары.Количество); Строчка.СтавкаНДС = ?(Шапка.УчитыватьНДС, ВыборкаСтрокТовары.СтавкаНДС, Перечисления.СтавкиНДС.БезНДС); Строчка.СуммаНДС = ВыборкаСтрокТовары.СуммаНДС; Строчка.Сумма = ВыборкаСтрокТовары.Сумма; конеццикла; ДанныеДляПечати.Вставить("ТабличнаяЧасть", Товары); возврат ДанныеДляПечати; конецфункции // СобратьДанныеПоРеализацияТоваровУслуг() // Функция создает табличный документ формы счета-фактуры. // функция ПечатьСчетаФактуры(ДанныеДляПечати) ТабДокумент = новый ТабличныйДокумент; если СсылкаНаОбъект.Дата < '20040216' тогда ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_СчетФактураВыданный_СчетФактура575"; Макет = ПолучитьОбщийМакет("СчетФактура575"); иначеесли СсылкаНаОбъект.Дата < '20060530' тогда ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_СчетФактураВыданный_СчетФактура84"; Макет = ПолучитьОбщийМакет("СчетФактура84"); иначе ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_СчетФактураВыданный_СчетФактура283"; Макет = ПолучитьОбщийМакет("СчетФактура283"); конецесли; СведенияОбПокупателе = УправлениеКонтактнойИнформацией.СведенияОЮрФизЛице(ДанныеДляПечати.Покупатель, СсылкаНаОбъект.Дата); СведенияОПоставщике = УправлениеКонтактнойИнформацией.СведенияОЮрФизЛице(ДанныеДляПечати.Поставщик, СсылкаНаОбъект.Дата); СведенияОГрузоотправителе = УправлениеКонтактнойИнформацией.СведенияОЮрФизЛице(?(ДанныеДляПечати.Грузоотправитель = "он же", Неопределено, ДанныеДляПечати.Грузоотправитель), СсылкаНаОбъект.Дата); СведенияОГрузополучателе = УправлениеКонтактнойИнформацией.СведенияОЮрФизЛице(ДанныеДляПечати.Грузополучатель, СсылкаНаОбъект.Дата); ВыборкаПоТоварам = ДанныеДляПечати.ТабличнаяЧасть.Скопировать(); ВыборкаПоТоварам.Свернуть("Товар"); если ВыборкаПоТоварам.Количество() > 0 тогда ТолькоУслуги = Истина; для каждого СтрокаТовар из ВыборкаПоТоварам цикл если (ТипЗнч(СтрокаТовар.Товар) = Тип("СправочникСсылка.Номенклатура") и не СтрокаТовар.Товар.Услуга) или ТипЗнч(СтрокаТовар.Товар) = Тип("СправочникСсылка.ОсновныеСредства") тогда ТолькоУслуги = Ложь; прервать; конецесли; конеццикла; иначе ТолькоУслуги = Ложь; конецесли; // Выводим шапку накладной ОбластьМакета = Макет.ПолучитьОбласть("Шапка"); ОбластьМакета.Параметры.Заполнить(ДанныеДляПечати); ОбластьМакета.Параметры.Номер = ОбщегоНазначения.СформироватьЗаголовокДокумента(ДанныеДляПечати, "Счет-фактура") + " г."; ОбластьМакета.Параметры.ПредставлениеПоставщика = "Продавец: " + ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОПоставщике, "ПолноеНаименование,"); ОбластьМакета.Параметры.АдресПоставщика = "Адрес: " + ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОПоставщике, "ЮридическийАдрес,"); ОбластьМакета.Параметры.ПоДокументу = "К платежно-расчетному документу № " + СсылкаНаОбъект.НомерПлатежноРасчетногоДокумента + " от " + Формат(СсылкаНаОбъект.ДатаПлатежноРасчетногоДокумента, "ДФ=dd.MM.yyyy"); ОбластьМакета.Параметры.ПредставлениеПокупателя = "Покупатель: " + ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОбПокупателе, "ПолноеНаименование,"); ОбластьМакета.Параметры.АдресПокупателя = "Адрес: " + ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОбПокупателе, "ЮридическийАдрес,"); если СсылкаНаОбъект.Дата < '20040216' и ТолькоУслуги тогда ОбластьМакета.Параметры.ПредставлениеГрузоотправителя = "Грузоотправитель и его адрес: " + "-"; ОбластьМакета.Параметры.ПредставлениеГрузополучателя = "Грузополучатель и его адрес: " + "-"; иначе ОбластьМакета.Параметры.ПредставлениеГрузоотправителя = "Грузоотправитель и его адрес: " + ?(не ЗначениеЗаполнено(ДанныеДляПечати.Грузоотправитель), "", ?(ДанныеДляПечати.Грузоотправитель = "он же", ДанныеДляПечати.Грузоотправитель, ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОГрузоотправителе, "ПолноеНаименование,ФактическийАдрес,"))); ОбластьМакета.Параметры.ПредставлениеГрузополучателя = "Грузополучатель и его адрес: " + ?(не ЗначениеЗаполнено(ДанныеДляПечати.Грузополучатель), "", ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОГрузополучателе, "ПолноеНаименование,ФактическийАдрес,")); конецесли; если СсылкаНаОбъект.Дата < '20040216' тогда ОбластьМакета.Параметры.ИННпоставщика = "Идентификационный номер продавца (ИНН): " + ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОПоставщике, "ИНН,", Ложь); ОбластьМакета.Параметры.ИННПокупателя = "Идентификационный номер покупателя (ИНН): " + ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОбПокупателе, "ИНН,", Ложь); иначе КПП = ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОПоставщике, "КПП,", Ложь); если ЗначениеЗаполнено(КПП) тогда КПП = "/" + КПП; конецесли; ОбластьМакета.Параметры.ИННпоставщика = "ИНН/КПП продавца: " + ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОПоставщике, "ИНН,", Ложь) + КПП; если не ТолькоУслуги и ЗначениеЗаполнено(ДанныеДляПечати.Грузополучатель) и не ДанныеДляПечати.Грузополучатель = ДанныеДляПечати.Покупатель и ДанныеДляПечати.Грузополучатель.ГоловнойКонтрагент = ДанныеДляПечати.Покупатель тогда КПП = ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОГрузополучателе, "КПП,", Ложь); если не ЗначениеЗаполнено(КПП) тогда КПП = ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОбПокупателе, "КПП,", Ложь); конецесли; иначе КПП = ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОбПокупателе, "КПП,", Ложь); конецесли; если ЗначениеЗаполнено(КПП) тогда КПП = "/" + КПП; конецесли; ОбластьМакета.Параметры.ИННПокупателя = "ИНН/КПП покупателя: " + ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОбПокупателе, "ИНН,", Ложь) + КПП; конецесли; ПроставитьПрочеркиВПустыеПоля(ОбластьМакета); ТабДокумент.Вывести(ОбластьМакета); ОбластьМакета = Макет.ПолучитьОбласть("ЗаголовокТаблицы"); ОбластьМакета.Параметры.Заполнить(ДанныеДляПечати); ТабДокумент.Вывести(ОбластьМакета); ОбластьМакета = Макет.ПолучитьОбласть("Строка"); ИтогоСуммаНДС = 0; ИтогоВсего = 0; ВыборкаСтрокТовары = ДанныеДляПечати.ТабличнаяЧасть; ВыборкаСтрокТовары.Колонки.Добавить("СуммаБезНДС"); ВыборкаСтрокТовары.Колонки.Добавить("СуммаСНДС"); для каждого Строчка из ВыборкаСтрокТовары цикл Строчка.СуммаСНДС = Строчка.Сумма + ?(Строчка.СуммаВключаетНДС, 0, Строчка.СуммаНДС); если (Строчка.СтавкаНДС = Перечисления.СтавкиНДС.НДС20_120) или (Строчка.СтавкаНДС = Перечисления.СтавкиНДС.НДС18_118) или (Строчка.СтавкаНДС = Перечисления.СтавкиНДС.НДС10_110) тогда Строчка.СуммаБезНДС = Строчка.СуммаСНДС; иначе Строчка.СуммаБезНДС = Строчка.СуммаСНДС - Строчка.СуммаНДС; конецесли; конеццикла; ВыборкаСтрокТовары.Свернуть("Товар, ТоварНаименование, СтранаПроисхождения, ПредставлениеСтраны, НомерГТД, ПредставлениеГТД, ЕдиницаИзмерения, Цена, СтавкаНДС", "Количество, Сумма, СуммаНДС, СуммаСНДС, СуммаБезНДС"); для каждого Строчка из ВыборкаСтрокТовары цикл ОбластьМакета.Параметры.Заполнить(Строчка); если Строка(Строчка.ПредставлениеСтраны) = "Россия" тогда ОбластьМакета.Параметры.ПредставлениеСтраны = "----"; конецесли; Количество = Строчка.Количество; ОбластьМакета.Параметры.Количество = Количество; если Строчка.Цена <> 0 тогда ОбластьМакета.Параметры.Цена = ?(Количество = 0, 0, Строчка.СуммаБезНДС / Количество); иначе ОбластьМакета.Параметры.Цена = Строчка.Цена; конецесли; ОбластьМакета.Параметры.Стоимость = Строчка.СуммаБезНДС; ОбластьМакета.Параметры.Всего = Строчка.СуммаСНДС; ОбластьМакета.Параметры.СтавкаНДС = Строчка.СтавкаНДС; ИтогоСуммаНДС = ИтогоСуммаНДС + Строчка.СуммаНДС; ИтогоВсего = ИтогоВсего + Строчка.СуммаСНДС; ПроставитьПрочеркиВПустыеПоля(ОбластьМакета); ТабДокумент.Вывести(ОбластьМакета); конеццикла; ОбластьМакета = Макет.ПолучитьОбласть("Итого"); ОбластьМакета.Параметры.ИтогоСуммаНДС = ИтогоСуммаНДС; ОбластьМакета.Параметры.ИтогоВсего = ИтогоВСего; ПроставитьПрочеркиВПустыеПоля(ОбластьМакета); ТабДокумент.Вывести(ОбластьМакета); ОбластьМакета = Макет.ПолучитьОбласть("Подвал"); ОбластьМакета.Параметры.Заполнить(ДанныеДляПечати); если не СсылкаНаОбъект.Дата < '20040216' тогда ОбластьМакета.Параметры.Свидетельство = ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОПоставщике, "Свидетельство,"); конецесли; ПроставитьПрочеркиВПустыеПоля(ОбластьМакета); ТабДокумент.Вывести(ОбластьМакета); ТабДокумент.ПолеСверху = 0; ТабДокумент.ПолеСлева = 0; ТабДокумент.ПолеСнизу = 0; ТабДокумент.ПолеСправа = 0; ТабДокумент.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт; возврат ТабДокумент; конецфункции // ПечатьСчетаФактуры() // Процедура осуществляет печать документа. // функция Печать() экспорт для каждого док из СсылкаНаОбъект.ДокументыОснования цикл если ТипЗнч (док.ДокументОснование) = Тип ("ДокументСсылка.РеализацияТоваровУслуг") тогда возврат ПечатьСчетаФактуры (СобратьДанныеПоРеализацияТоваровУслуг (док.ДокументОснование)); конецесли; конеццикла; возврат неопределено; конецфункции