Gunslinger
Постоялец
Offline
|
|
« Ответ #2 : 18-05-2010 04:33 » |
|
Да, с макетом действительно оказалось не слишком сложно.. другая проблема - внешняя форма. при попытке сформировать форму (забавная тавтология) вылезает ошибка ////////// Не удалось сформировать внешнюю печатную форму! Недостаточно фактических параметров ///////// Вот модуль: Функция ПечатьСчетаЗаказа(Тип)
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Номер, | Дата, | ДатаПоступления, | ДоговорКонтрагента, | Контрагент КАК Поставщик, | Организация, | СуммаДокумента, | ВалютаДокумента, | УчитыватьНДС, | СуммаВключаетНДС |ИЗ | Документ.ЗаказПоставщику КАК ЗаказПоставщику | |ГДЕ | ЗаказПоставщику.Ссылка = &ТекущийДокумент"; Запрос.УстановитьПараметр("ТекущийДокумент", СсылкаНаОбъект); Шапка = Запрос.Выполнить().Выбрать(); Шапка.Следующий();
Запрос = Новый Запрос;
Макет = ПолучитьМакет("СчетЗаказ");
// Определим параметры запроса и табличного документа // в зависимости от необходимости отображения артикула поставщика Если Тип = "ЗаказПоДаннымПоставщика" Тогда
ВыводитьКоды = Истина; ТекстКодАртикул = "Код"; Колонка = "Артикул" + Символы.ПС + "поставщика"; ОбластьШапки = Макет.ПолучитьОбласть("ШапкаСКодом"); ОбластьСтроки = Макет.ПолучитьОбласть("СтрокаСКодом");
Запрос.УстановитьПараметр("Контрагент", ЭтотОбъект.Контрагент);
ТекстПоляТовараДляТоваров = " | ВЫБОР КОГДА (ВЫРАЗИТЬ (НаименованиеКонтрагента КАК Строка(100)) ЕСТЬ NULL ИЛИ ВЫРАЗИТЬ (НаименованиеКонтрагента КАК Строка(100)) = """") ТОГДА ВЫРАЗИТЬ (ВложенныйЗапрос.Номенклатура.НаименованиеПолное КАК Строка(100)) ИНАЧЕ ВЫРАЗИТЬ (НаименованиеКонтрагента КАК Строка(100)) КОНЕЦ КАК Товар,";
ТекстПоляТовараДляУслуг = " | ВЫБОР КОГДА (ВЫРАЗИТЬ (НаименованиеНоменклатурыКонтрагента КАК Строка(100)) ЕСТЬ NULL ИЛИ ВЫРАЗИТЬ (НаименованиеНоменклатурыКонтрагента КАК Строка(100)) = """") ТОГДА ВЫРАЗИТЬ (ЗаказПоставщику.Номенклатура.НаименованиеПолное КАК Строка(100)) ИНАЧЕ ВЫРАЗИТЬ (НаименованиеНоменклатурыКонтрагента КАК Строка(100)) КОНЕЦ КАК Товар,";
ТекстПоляАртикула = ", | АртикулКонтрагента";
ТекстВыборкиАртикула = ", | АртикулНоменклатурыКонтрагента КАК АртикулКонтрагента";
ТекстВыборкиНоменклатуры = ", | ВЫРАЗИТЬ(НаименованиеНоменклатурыКонтрагента КАК Строка(100)) КАК НаименованиеКонтрагента";
ТекстИсточникАртикула = " | ЛЕВОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ РегистрСведений.НоменклатураКонтрагентов КАК НоменклатураКонтрагентов | ПО НоменклатураКонтрагентов.Номенклатура = ЗаказПоставщику.Номенклатура | И НоменклатураКонтрагентов.ХарактеристикаНоменклатуры = ЗаказПоставщику.ХарактеристикаНоменклатуры | И НоменклатураКонтрагентов.Контрагент = &Контрагент"; ТекстИсточникАртикулаБезХарактеристики = " | ЛЕВОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ РегистрСведений.НоменклатураКонтрагентов КАК НоменклатураКонтрагентов | ПО НоменклатураКонтрагентов.Номенклатура = ЗаказПоставщику.Номенклатура | И НоменклатураКонтрагентов.Контрагент = &Контрагент";
ТекстГруппировкиАртикулаИНоменклатуры = ", | АртикулНоменклатурыКонтрагента, | ВЫРАЗИТЬ(НаименованиеНоменклатурыКонтрагента КАК Строка(100))";
Иначе
ТекстПоляТовараДляТоваров = " | ВЫРАЗИТЬ(ВложенныйЗапрос.Номенклатура.НаименованиеПолное КАК Строка(100)) КАК Товар,"; СтрокаВыборкиПоляСодержания = ОбработкаТабличныхЧастей.ПолучитьЧастьЗапросаДляВыбораСодержания("ЗаказПоставщику"); ТекстПоляТовараДляУслуг = " | " + СтрокаВыборкиПоляСодержания + " КАК Товар,";
ДопКолонка = Константы.ДополнительнаяКолонкаПечатныхФормДокументов.Получить(); Если ДопКолонка = Перечисления.ДополнительнаяКолонкаПечатныхФормДокументов.Артикул Тогда ВыводитьКоды = Истина; Колонка = "Артикул"; ТекстКодАртикул = "Артикул"; ИначеЕсли ДопКолонка = Перечисления.ДополнительнаяКолонкаПечатныхФормДокументов.Код Тогда ВыводитьКоды = Истина; Колонка = "Код"; ТекстКодАртикул = "Код"; Иначе ВыводитьКоды = Ложь; Колонка = ""; ТекстКодАртикул = "Код"; КонецЕсли;
Если ВыводитьКоды Тогда ОбластьШапки = Макет.ПолучитьОбласть("ШапкаСКодом"); ОбластьСтроки = Макет.ПолучитьОбласть("СтрокаСКодом"); Иначе ОбластьШапки = Макет.ПолучитьОбласть("ШапкаТаблицы"); ОбластьСтроки = Макет.ПолучитьОбласть("Строка"); Конецесли;
ТекстПоляАртикула = ""; ТекстВыборкиАртикула = ""; ТекстИсточникАртикула = ""; ТекстГруппировкиАртикулаИНоменклатуры = "";
КонецЕсли;
ОбластьШапки.Параметры.Товар = "Товары (работы, услуги)"; Запрос.УстановитьПараметр("ТекущийДокумент", СсылкаНаОбъект); Запрос.Текст =" |ВЫБРАТЬ | ВложенныйЗапрос.Номенклатура," + ТекстПоляТовараДляТоваров + " | ВложенныйЗапрос.Номенклатура." + ТекстКодАртикул + " КАК КодАртикул, | ВложенныйЗапрос.Количество, | ВложенныйЗапрос.ЕдиницаИзмерения.Представление КАК ЕдиницаИзмерения, | ВложенныйЗапрос.Цена, | ВложенныйЗапрос.Сумма, | ВложенныйЗапрос.СуммаНДС, | ВложенныйЗапрос.Характеристика, | 2 КАК НомерТЧ, | ВложенныйЗапрос.НомерСтроки КАК НомерСтроки, | NULL КАК Серия" + ТекстПоляАртикула + " |ИЗ | ( | ВЫБРАТЬ | ЗаказПоставщику.Номенклатура, | ЗаказПоставщику.ЕдиницаИзмерения, | ЗаказПоставщику.Цена КАК Цена, | МИНИМУМ(ЗаказПоставщику.НомерСтроки) КАК НомерСтроки, | СУММА(ЗаказПоставщику.Количество) КАК Количество, | СУММА(ЗаказПоставщику.Сумма ) КАК Сумма, | СУММА(ЗаказПоставщику.СуммаНДС ) КАК СуммаНДС, | ЗаказПоставщику.ХарактеристикаНоменклатуры КАК Характеристика" + ТекстВыборкиАртикула + ТекстВыборкиНоменклатуры + " | ИЗ | Документ.ЗаказПоставщику.Товары КАК ЗаказПоставщику" + ТекстИсточникАртикула + " | | ГДЕ | ЗаказПоставщику.Ссылка = &ТекущийДокумент | | СГРУППИРОВАТЬ ПО | ЗаказПоставщику.Номенклатура, | ЗаказПоставщику.ЕдиницаИзмерения, | ЗаказПоставщику.Цена, | ЗаказПоставщику.ХарактеристикаНоменклатуры" + ТекстГруппировкиАртикулаИНоменклатуры + " | ) КАК ВложенныйЗапрос | |ОБЪЕДИНИТЬ ВСЕ | |ВЫБРАТЬ | ЗаказПоставщику.Номенклатура," + ТекстПоляТовараДляУслуг + " | ЗаказПоставщику.Номенклатура." + ТекстКодАртикул + " КАК КодАртикул, | ЗаказПоставщику.Количество, | ЗаказПоставщику.Номенклатура.ЕдиницаХраненияОстатков, | ЗаказПоставщику.Цена, | ЗаказПоставщику.Сумма, | ЗаказПоставщику.СуммаНДС, | NULL, | 3 КАК НомерТЧ, | ЗаказПоставщику.НомерСтроки КАК НомерСтроки, | NULL КАК Серия" + ТекстВыборкиАртикула + " | |ИЗ | Документ.ЗаказПоставщику.Услуги КАК ЗаказПоставщику" + ТекстИсточникАртикулаБезХарактеристики + " | |ГДЕ | ЗаказПоставщику.Ссылка = &ТекущийДокумент | |ОБЪЕДИНИТЬ ВСЕ | |ВЫБРАТЬ | ВложенныйЗапрос.Номенклатура," + ТекстПоляТовараДляТоваров + " | ВложенныйЗапрос.Номенклатура." + ТекстКодАртикул + " КАК КодАртикул, | ВложенныйЗапрос.Количество, | ВложенныйЗапрос.Номенклатура.ЕдиницаХраненияОстатков.Представление КАК ЕдиницаИзмерения, | ВложенныйЗапрос.Цена, | ВложенныйЗапрос.Сумма, | ВложенныйЗапрос.СуммаНДС, | NULL, | 4 КАК НомерТЧ, | ВложенныйЗапрос.НомерСтроки КАК НомерСтроки, | NULL КАК Серия" + ТекстПоляАртикула + " |ИЗ | ( | ВЫБРАТЬ | ЗаказПоставщику.Номенклатура, | ЗаказПоставщику.Цена КАК Цена, | МИНИМУМ(ЗаказПоставщику.НомерСтроки) КАК НомерСтроки, | СУММА(ЗаказПоставщику.Количество) КАК Количество, | СУММА(ЗаказПоставщику.Сумма ) КАК Сумма, | 0 КАК СуммаНДС" + ТекстВыборкиАртикула + ТекстВыборкиНоменклатуры + " | ИЗ | Документ.ЗаказПоставщику.ВозвратнаяТара КАК ЗаказПоставщику" + ТекстИсточникАртикулаБезХарактеристики + " | | ГДЕ | ЗаказПоставщику.Ссылка = &ТекущийДокумент | | СГРУППИРОВАТЬ ПО | ЗаказПоставщику.Номенклатура, | ЗаказПоставщику.Цена" + ТекстГруппировкиАртикулаИНоменклатуры + " | ) КАК ВложенныйЗапрос | |УПОРЯДОЧИТЬ ПО НомерТЧ ВОЗР, НомерСтроки ВОЗР |"; ЗапросТовары = Запрос.Выполнить().Выгрузить();
ТабДокумент = Новый ТабличныйДокумент; Если Тип = "ЗаказПоДаннымПоставщика" Тогда ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_ЗаказПоставщику_СчетЗаказПоДаннымПоставщика"; Иначе ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_ЗаказПоставщику_СчетЗаказ"; КонецЕсли;
Руководители = РегламентированнаяОтчетность.ОтветственныеЛицаОрганизации(Шапка.Организация, Шапка.Дата,); Руководитель = Руководители.Руководитель; Бухгалтер = Руководители.ГлавныйБухгалтер;
// Выводим шапку накладной ОбластьМакета = Макет.ПолучитьОбласть("Заголовок"); ОбластьМакета.Параметры.ТекстЗаголовка = ОбщегоНазначения.СформироватьЗаголовокДокумента(Шапка, "Заказ поставщику"); ТабДокумент.Вывести(ОбластьМакета);
ОбластьМакета = Макет.ПолучитьОбласть("Поставщик"); ОбластьМакета.Параметры.Заполнить(Шапка); ОбластьМакета.Параметры.ТекстПоставщик = "Поставщик:"; ОбластьМакета.Параметры.ПредставлениеПоставщика = ФормированиеПечатныхФорм.ОписаниеОрганизации(УправлениеКонтактнойИнформацией.СведенияОЮрФизЛице(Шапка.Поставщик, Шапка.Дата), "ПолноеНаименование,ИНН,КПП,ЮридическийАдрес,Телефоны,"); ТабДокумент.Вывести(ОбластьМакета);
ОбластьМакета = Макет.ПолучитьОбласть("Покупатель"); ОбластьМакета.Параметры.ТекстПокупатель = "Покупатель:"; ОбластьМакета.Параметры.ПредставлениеПолучателя = ФормированиеПечатныхФорм.ОписаниеОрганизации(УправлениеКонтактнойИнформацией.СведенияОЮрФизЛице(Шапка.Организация, Шапка.Дата), "ПолноеНаименование,ИНН,КПП,ЮридическийАдрес,Телефоны,");; ОбластьМакета.Параметры.Получатель = Шапка.Организация; ТабДокумент.Вывести(ОбластьМакета);
// Вывести табличную часть Если ВыводитьКоды Тогда ОбластьШапки.Параметры.Колонка = Колонка; КонецЕсли;
ТабДокумент.Вывести(ОбластьШапки);
Сумма = 0; СуммаНДС = 0;
Для каждого ВыборкаСтрокТовары Из ЗапросТовары Цикл
Если НЕ ЗначениеЗаполнено(ВыборкаСтрокТовары.Номенклатура) Тогда Сообщить("В одной из строк не заполнено значение номенклатуры - строка при печати пропущена.", СтатусСообщения.Важное); Продолжить; КонецЕсли;
ОбластьСтроки.Параметры.Заполнить(ВыборкаСтрокТовары); ОбластьСтроки.Параметры.НомерСтроки = ЗапросТовары.Индекс(ВыборкаСтрокТовары) + 1; ОбластьСтроки.Параметры.Товар = СокрЛП(ВыборкаСтрокТовары.Товар) + ФормированиеПечатныхФорм.ПредставлениеСерий(ВыборкаСтрокТовары) + ?(ВыборкаСтрокТовары.НомерТЧ = 4, " (возвратная тара)", "") +"_"+ВыборкаСтрокТовары.Номенклатура.ЕдиницаХраненияОстатков.Вес;
Если ВыводитьКоды Тогда Если Тип = "ЗаказПоДаннымПоставщика" Тогда ОбластьСтроки.Параметры.КодАртикул = ВыборкаСтрокТовары.АртикулКонтрагента; Иначе ОбластьСтроки.Параметры.КодАртикул = ВыборкаСтрокТовары.КодАртикул; КонецЕсли; КонецЕсли;
ТабДокумент.Вывести(ОбластьСтроки);
Сумма = Сумма + ВыборкаСтрокТовары.Сумма; СуммаНДС = СуммаНДС + ВыборкаСтрокТовары.СуммаНДС;
КонецЦикла;
// Вывести Итого ОбластьМакета = Макет.ПолучитьОбласть("Итого"); ОбластьМакета.Параметры.Всего = ОбщегоНазначения.ФорматСумм(Сумма); ТабДокумент.Вывести(ОбластьМакета);
// Вывести ИтогоНДС Если Шапка.УчитыватьНДС Тогда ОбластьМакета = Макет.ПолучитьОбласть("ИтогоНДС"); ОбластьМакета.Параметры.ВсегоНДС = ОбщегоНазначения.ФорматСумм(ЗапросТовары.Итог("СуммаНДС")); ОбластьМакета.Параметры.НДС = ?(Шапка.СуммаВключаетНДС, "В том числе НДС:", "Сумма НДС:"); ТабДокумент.Вывести(ОбластьМакета); КонецЕсли;
// Вывести Сумму прописью ОбластьМакета = Макет.ПолучитьОбласть("СуммаПрописью"); СуммаКПрописи = Сумма + ?(Шапка.СуммаВключаетНДС, 0, СуммаНДС); ОбластьМакета.Параметры.ИтоговаяСтрока = "Всего наименований " + ЗапросТовары.Количество() + ", на сумму " + ОбщегоНазначения.ФорматСумм(СуммаКПрописи, Шапка.ВалютаДокумента); ОбластьМакета.Параметры.СуммаПрописью = ОбщегоНазначения.СформироватьСуммуПрописью(СуммаКПрописи, Шапка.ВалютаДокумента) + " Вес всего " ; ТабДокумент.Вывести(ОбластьМакета); // Вывести подписи ОбластьМакета = Макет.ПолучитьОбласть("Подписи"); ОбластьМакета.Параметры.Отпустил = "/"+ Руководитель + "/"; ОбластьМакета.Параметры.Получил = "/"+ Бухгалтер + "/"; ТабДокумент.Вывести(ОбластьМакета);
Возврат ТабДокумент;
КонецФункции // ПечатьСчетаЗаказа() Функция Печать(Тип) Экспорт ТабДокумент = ПечатьСчетаЗаказа(Тип); Возврат ТабДокумент; КонецФункции При сохранении никаких ошибок нет...
|