|
Печатная форма счет на оплату | ☑ | ||
---|---|---|---|---|
0
davinchi Resolve
09.12.19
✎
14:58
|
Добрый день, подскажите, что делаю не так, пытаюсь в печатной форме свернуть номенклатуру по модели и по размеру, но что то делаю не так, подскажите или направьте
КОД: Функция СформироватьПечатнуюФорму(СтруктураТипов, ОбъектыПечати, ПараметрыПечати) Экспорт ТабличныйДокумент = Новый ТабличныйДокумент; ТабличныйДокумент.АвтоМасштаб = Истина; ТабличныйДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_СЧЕТНАОПЛАТУ"; НомерТипаДокумента = 0; УстановитьПривилегированныйРежим(Истина); Для Каждого СтруктураОбъектов Из СтруктураТипов Цикл НомерТипаДокумента = НомерТипаДокумента + 1; Если НомерТипаДокумента > 1 Тогда ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц(); КонецЕсли; МенеджерОбъекта = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(СтруктураОбъектов.Ключ); ДанныеДляПечати = МенеджерОбъекта.ПолучитьДанныеДляПечатнойФормыСчетаНаОплату(ПараметрыПечати, СтруктураОбъектов.Значение); ЗаполнитьТабличныйДокументСчетаНаОплату(ТабличныйДокумент, ДанныеДляПечати, ОбъектыПечати, ПараметрыПечати); КонецЦикла; УстановитьПривилегированныйРежим(Ложь); Возврат ТабличныйДокумент; КонецФункции Функция СведенияОВнешнейОбработке() Экспорт ПараметрыРегистрации = новый Структура; ПараметрыРегистрации.Вставить("Вид", "ПечатнаяФорма"); ПараметрыРегистрации.Вставить("Назначение", ПолучитьНазначениеОбработки()); ПараметрыРегистрации.Вставить("Наименование", "Печать счета Кириллу"); ПараметрыРегистрации.Вставить("Версия", "1.2"); ПараметрыРегистрации.Вставить("Информация", "Печать счета для Кирилла"); ПараметрыРегистрации.Вставить("БезопасныйРежим", ложь); Команды = ПолучитьТаблицуКоманд(); ДобавитьКоманду(Команды, "Печать счета для Кирилла", "ПечатьСчетаВнешний", "ВызовСерверногоМетода", Ложь, "ПечатьMXL"); ПараметрыРегистрации.Вставить("Команды", Команды); Возврат ПараметрыРегистрации; КонецФункции Процедура ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование, ПоказыватьОповещение = Ложь, Модификатор = "") НоваяКоманда = ТаблицаКоманд.Добавить(); НоваяКоманда.Представление = Представление; НоваяКоманда.Идентификатор = Идентификатор; НоваяКоманда.Использование = Использование; НоваяКоманда.ПоказыватьОповещение = ПоказыватьОповещение; НоваяКоманда.Модификатор = Модификатор; КонецПроцедуры Функция ПолучитьТаблицуКоманд() Команды = новый ТаблицаЗначений; Команды.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка")); Команды.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка")); Команды.Колонки.Добавить("Использование", Новый ОписаниеТипов("Строка")); Команды.Колонки.Добавить("ПоказыватьОповещение", Новый ОписаниеТипов("Булево")); Команды.Колонки.Добавить("Модификатор", Новый ОписаниеТипов("Булево")); Возврат Команды КонецФункции Функция ПолучитьНазначениеОбработки() Массив = новый Массив; Массив.Добавить("Документ.ЗаказКлиента"); Возврат Массив; КонецФункции Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт СтруктураТипов = ОбщегоНазначенияУТ.СоответствиеМассивовПоТипамОбъектов(МассивОбъектов); УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм, "ПечатьСчетаВнешний", "Счет на оплату", СформироватьПечатнуюФорму(СтруктураТипов, ОбъектыПечати, ПараметрыВывода)); КонецПроцедуры Процедура ЗаполнитьТабличныйДокументСчетаНаОплату(ТабличныйДокумент, ДанныеДляПечати, ОбъектыПечати, ПараметрыПечати) Перем КомплектПечатиПоСсылке; ШаблоныОшибок = Новый Структура; ШаблоныОшибок.Вставить("Товары", НСтр("ru = 'В документе %1 отсутствуют товары. Печать счета на оплату не требуется'")); ШаблоныОшибок.Вставить("ЗаменяющиеТовары", НСтр("ru = 'В документе %1 отсутствуют заменяющие товары. Печать счета на оплату не требуется'")); ШаблоныОшибок.Вставить("Этапы", НСтр("ru = 'В документе %1 отсутствуют этапы оплаты. Печать счета на оплату не требуется'")); ИспользоватьРучныеСкидки = ПолучитьФункциональнуюОпцию("ИспользоватьРучныеСкидкиВПродажах"); ИспользоватьАвтоматическиеСкидки = ПолучитьФункциональнуюОпцию("ИспользоватьАвтоматическиеСкидкиВПродажах"); СтруктураИмяДопКолонки = Новый Структура("ИмяКолонкиКодов", ФормированиеПечатныхФорм.ИмяДополнительнойКолонки()); ДанныеПечати = ДанныеДляПечати.РезультатПоШапке.Выбрать(); ВыборкаПоДокументам = ДанныеДляПечати.РезультатПоТабличнойЧасти.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); ЭтапыОплаты = ДанныеДляПечати.РезультатПоЭтапамОплаты.Выгрузить(); Товары = ДанныеДляПечати.РезультатПоТабличнойЧасти.Выгрузить(); ЭтапыЗалоговойТары = ЭтапыОплаты.НайтиСтроки(Новый Структура("ЭтоЗалогЗаТару", Истина)); ТолькоЗалогЗаТару = ЭтапыЗалоговойТары.Количество() = ЭтапыОплаты.Количество() И ЭтапыЗалоговойТары.Количество() > 0; Если Товары.Колонки.Найти("Содержание")=Неопределено Тогда ЕстьСодержание = Ложь; Иначе ЕстьСодержание = Истина; КонецЕсли; ПоказыватьНДС = Константы.ВыводитьДопКолонкиНДС.Получить(); ПервыйДокумент = Истина; Пока ДанныеПечати.Следующий() Цикл Отказ = Ложь; СтруктураПоиска = Новый Структура("Ссылка", ДанныеПечати.Ссылка); ТаблицаТовары = Товары.НайтиСтроки(СтруктураПоиска); ТаблицаЭтапыОплаты = ЭтапыОплаты.НайтиСтроки(СтруктураПоиска); ПроверкаЗаполненияДокумента(ДанныеПечати, ТаблицаТовары, ТаблицаЭтапыОплаты, ШаблоныОшибок, Отказ); Если Отказ Тогда Продолжить; КонецЕсли; Если ПервыйДокумент Тогда ПервыйДокумент = Ложь; Иначе ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц(); КонецЕсли; НомерСтрокиНачало = ТабличныйДокумент.ВысотаТаблицы + 1; ЗаголовокСкидки = ФормированиеПечатныхФорм.НужноВыводитьСкидки(ТаблицаТовары, ИспользоватьРучныеСкидки Или ИспользоватьАвтоматическиеСкидки); ЕстьСкидки = ЗаголовокСкидки.ЕстьСкидки; СуффиксОбласти = ?(ДанныеПечати.УчитыватьНДС И НЕ ТолькоЗалогЗаТару И ПоказыватьНДС, "СНДС", "") + ?(ЕстьСкидки, "СоСкидкой", ""); Макет = Новый ТабличныйДокумент; ЗаполнитьРеквизитыШапкиСчетаНаОплату(ДанныеПечати, Макет, ТабличныйДокумент, ТаблицаЭтапыОплаты, ТаблицаТовары); Если ДанныеПечати.ЧастичнаяОплата ИЛИ ТипЗнч(ДанныеПечати.ДокументОснование) = Тип("ДокументСсылка.ОтчетКомитенту") Тогда ОбластьШапкаТаблицы = Макет.ПолучитьОбласть("ШапкаТаблицыЧастичнаяОплата"); ОбластьШапкаТаблицы.Параметры.Заполнить(СтруктураИмяДопКолонки); ТабличныйДокумент.Вывести(ОбластьШапкаТаблицы); ОбластьСтрокаТаблицы = Макет.ПолучитьОбласть("СтрокаТаблицыЧастичнаяОплата"); ОбластьСтрокаТаблицы.Параметры.Заполнить(ДанныеПечати); ОбластьСтрокаТаблицы.Параметры.НомерСтроки = 1; ТабличныйДокумент.Вывести(ОбластьСтрокаТаблицы); ОбластьИтого = Макет.ПолучитьОбласть("ПодвалТаблицыЧастичнаяОплата"); СтруктураДанныхИтого = Новый Структура; СтруктураДанныхИтого.Вставить("Всего", ДанныеПечати.СуммаДокумента); ОбластьИтого.Параметры.Заполнить(СтруктураДанныхИтого); ОбластьИтого.Параметры.Заполнить(ДанныеПечати); ТабличныйДокумент.Присоединить(ОбластьИтого); // Вывести ИтогоНДС СоответствиеСтавокНДС = Новый Соответствие; Если ДанныеПечати.УчитыватьНДС И НЕ ТолькоЗалогЗаТару Тогда ОбластьИтогоНДС = Макет.ПолучитьОбласть("ПодвалТаблицыНДС"); Для Каждого СтрокаТовара Из ТаблицаТовары Цикл СуммаНДС = СоответствиеСтавокНДС[СтрокаТовара.СтавкаНДС]; Если СуммаНДС = Неопределено Тогда СуммаНДС = СтрокаТовара.СуммаНДС; Иначе СуммаНДС = СуммаНДС + СтрокаТовара.СуммаНДС; КонецЕсли; СоответствиеСтавокНДС.Вставить(СтрокаТовара.СтавкаНДС, СуммаНДС); КонецЦикла; Для Каждого ТекСтавкаНДС Из СоответствиеСтавокНДС Цикл СтруктураДанныхИтогоНДС = Новый Структура; СтруктураДанныхИтогоНДС.Вставить("НДС", ФормированиеПечатныхФорм.ТекстНДСПоСтавке(ТекСтавкаНДС.Ключ, ДанныеПечати.ЦенаВключаетНДС)); Если ЗначениеЗаполнено(ТекСтавкаНДС.Значение) Тогда СтруктураДанныхИтогоНДС.Вставить("ВсегоНДС", ФормированиеПечатныхФорм.ФорматСумм(ТекСтавкаНДС.Значение /100 * ДанныеПечати.ПроцентОплаты)); Иначе СтруктураДанныхИтогоНДС.Вставить("ВсегоНДС","-"); КонецЕсли; ОбластьИтогоНДС.Параметры.Заполнить(СтруктураДанныхИтогоНДС); ТабличныйДокумент.Вывести(ОбластьИтогоНДС); КонецЦикла; ОбластьПодвалСНДС = Макет.ПолучитьОбласть("ПодвалТаблицыВсего"); СтруктураДанныхПодвалСНДС = Новый Структура("ВсегоСНДС", ФормированиеПечатныхФорм.ФорматСумм(ДанныеПечати.СуммаДокумента)); ОбластьПодвалСНДС.Параметры.Заполнить(СтруктураДанныхПодвалСНДС); ТабличныйДокумент.Вывести(ОбластьПодвалСНДС); КонецЕсли; // Вывести Сумму прописью ОбластьМакета = Макет.ПолучитьОбласть("СуммаПрописьюЧастичныйСчет"); СуммаПрописью = НСтр("ru='Всего на сумму %СуммаПрописью%'"); СуммаПрописью = СтрЗаменить(СуммаПрописью, "%СуммаПрописью%", РаботаСКурсамиВалют.СформироватьСуммуПрописью(ДанныеПечати.СуммаДокумента, ДанныеПечати.Валюта)); СтруктураДанныхСуммаПрописью = Новый Структура("СуммаПрописью", СуммаПрописью); ОбластьМакета.Параметры.Заполнить(СтруктураДанныхСуммаПрописью); ТабличныйДокумент.Вывести(ОбластьМакета); Иначе // Таблица "Товары" ОбластьШапкаТаблицы = Макет.ПолучитьОбласть("ШапкаТаблицы" + СуффиксОбласти); ОбластьСтрокаТаблицыСтандарт = Макет.ПолучитьОбласть("СтрокаТаблицы" + СуффиксОбласти); ОбластьПодвалТаблицы = Макет.ПолучитьОбласть("ПодвалТаблицы" + СуффиксОбласти); ОбластьПодвалНДС = Макет.ПолучитьОбласть("ПодвалТаблицыНДС"); ИспользоватьНаборы = Ложь; Если ОбщегоНазначенияУТКлиентСервер.ЕстьРеквизитОбъекта(ВыборкаПоДокументам, "ЭтоНабор") Тогда ИспользоватьНаборы = Истина; ОбластьСтрокаТаблицыНабор = Макет.ПолучитьОбласть("СтрокаТаблицы" + СуффиксОбласти + "Набор"); ОбластьСтрокаТаблицыКомплектующие = Макет.ПолучитьОбласть("СтрокаТаблицы" + СуффиксОбласти + "Комплектующие"); КонецЕсли; ПустыеДанные = НаборыСервер.ПустыеДанные(); ВыводШапки = 0; Если ДанныеПечати.УчитыватьНДС И НЕ ТолькоЗалогЗаТару Тогда СуффиксОбластиПодвал = "СНДС" + ?(ЕстьСкидки, "СоСкидкой", ""); ОбластьПодвалСНДС = Макет.ПолучитьОбласть("ПодвалТаблицыВсего" + СуффиксОбластиПодвал); КонецЕсли; Если ЕстьСкидки Тогда СтруктураЗаголовокСкидки = Новый Структура("Скидка, СуммаБезСкидки", ЗаголовокСкидки.Скидка, ЗаголовокСкидки.СуммаСкидки); ОбластьШапкаТаблицы.Параметры.Заполнить(СтруктураЗаголовокСкидки); КонецЕсли; ОбластьШапкаТаблицы.Параметры.Заполнить(СтруктураИмяДопКолонки); ОбластьСуммаПрописью = Макет.ПолучитьОбласть(?(ДанныеПечати.СчетКВозврату, "СуммаПрописьюКВозврату", "СуммаПрописью")); МассивПроверкиВывода = Новый Массив; Сумма = 0; СуммаНДС = 0; ВсегоСкидок = 0; ВсегоБезСкидок = 0; СтрокаТовары = ВыборкаПоДокументам.Выбрать(); КоличествоСтрок = СтрокаТовары.Количество(); НомерСтроки = 0; СоответствиеСтавокНДС = Новый Соответствие; Товары.Свернуть("Артикул, ЕдиницаИзмерения, НаименованиеПолное, Характеристика" , "ЭтоНабор, ЭтоКомплектующие, Упаковка, ЭтоВозвратнаяТара, Содержание, Количество, СуммаСкидки, СуммаБезСкидки, Цена, Сумма, СуммаНДС, СтавкаНДС"); Для Каждого СтрокаТовары Из Товары Цикл НайтиЗапятую = Найти(СтрокаТовары.Характеристика, ","); ХарактеристикаСокр = Лев(СтрокаТовары.Характеристика, НайтиЗапятую - 1); ПрефиксИПостфикс = НаборыСервер.ПолучитьПрефиксИПостфикс(СтрокаТовары, ИспользоватьНаборы); НаименованиеПолное = СтрокаТовары.НаименованиеПолное + " / " + ХарактеристикаСокр; СтруктураДанныхСтроки = Новый Структура; Если НаборыСервер.ИспользоватьОбластьНабор(СтрокаТовары, ИспользоватьНаборы) Тогда ОбластьСтрокаТаблицы = ОбластьСтрокаТаблицыНабор; ИначеЕсли НаборыСервер.ИспользоватьОбластьКомплектующие(СтрокаТовары, ИспользоватьНаборы) Тогда ОбластьСтрокаТаблицы = ОбластьСтрокаТаблицыКомплектующие; Иначе ОбластьСтрокаТаблицы = ОбластьСтрокаТаблицыСтандарт; КонецЕсли; Если НаборыСервер.ВыводитьТолькоЗаголовок(СтрокаТовары, ИспользоватьНаборы) Тогда НомерСтрокиПечать = ""; Иначе НомерСтроки = НомерСтроки + 1; НомерСтрокиПечать = НомерСтроки; КонецЕсли; Если НомерСтроки = 0 И ВыводШапки <> 2 Тогда ВыводШапки = 1; КонецЕсли; ПрефиксИПостфикс = НаборыСервер.ПолучитьПрефиксИПостфикс(СтрокаТовары, ИспользоватьНаборы); ДополнительныеПараметрыПолученияНаименованияДляПечати = НоменклатураКлиентСервер.ДополнительныеПараметрыПредставлениеНоменклатурыДляПечати(); ДополнительныеПараметрыПолученияНаименованияДляПечати.ВозвратнаяТара = СтрокаТовары.ЭтоВозвратнаяТара; Если ЕстьСодержание Тогда ДополнительныеПараметрыПолученияНаименованияДляПечати.Содержание = СтрокаТовары.Содержание; КонецЕсли; СтруктураДанныхСтроки.Вставить("Товар", НаименованиеПолное); СтруктураДанныхСтроки.Вставить("НомерСтроки", НомерСтрокиПечать); ОбластьСтрокаТаблицы.Параметры.Заполнить(СтрокаТовары); Процент = Цел (-СтрокаТовары.СуммаСкидки / СтрокаТовары.Сумма * 100) + 1; ЗнакПроцента = "%"; Если ЗаголовокСкидки.ЕстьСкидки Тогда СтруктураДанныхСтроки.Вставить("СуммаСкидки", Строка(Процент) + Строка(ЗнакПроцента) ); КонецЕсли; Если ЗначениеЗаполнено(СтруктураИмяДопКолонки.ИмяКолонкиКодов) Тогда СтруктураДанныхСтроки.Вставить("Артикул", СтрокаТовары[СтруктураИмяДопКолонки.ИмяКолонкиКодов]); КонецЕсли; ОбластьСтрокаТаблицы.Параметры.Заполнить(СтруктураДанныхСтроки); Если НаборыСервер.ВыводитьТолькоЗаголовок(СтрокаТовары, ИспользоватьНаборы) Тогда ОбластьСтрокаТаблицы.Параметры.Заполнить(ПустыеДанные); КонецЕсли; МассивПроверкиВывода.Очистить(); МассивПроверкиВывода.Добавить(ОбластьСтрокаТаблицы); Если НомерСтроки = ТаблицаТовары.Количество() Тогда МассивПроверкиВывода.Добавить(ОбластьПодвалТаблицы); МассивПроверкиВывода.Добавить(ОбластьПодвалНДС); МассивПроверкиВывода.Добавить(ОбластьСуммаПрописью); КонецЕсли; Если ТабличныйДокумент.ПроверитьВывод(МассивПроверкиВывода) Тогда Если (НомерСтроки = 1 И ВыводШапки = 0) ИЛИ (НомерСтроки = 0 И ВыводШапки = 1) Тогда ВыводШапки = 2; ТабличныйДокумент.Вывести(ОбластьШапкаТаблицы); КонецЕсли; Иначе ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц(); ТабличныйДокумент.Вывести(ОбластьШапкаТаблицы); КонецЕсли; ТабличныйДокумент.Вывести(ОбластьСтрокаТаблицы); Если Не НаборыСервер.ИспользоватьОбластьКомплектующие(СтрокаТовары, ИспользоватьНаборы) Тогда Сумма = Сумма + СтрокаТовары.Сумма; СуммаНДС = СуммаНДС + СтрокаТовары.СуммаНДС; Если ЕстьСкидки Тогда ВсегоСкидок = ВсегоСкидок + СтрокаТовары.СуммаСкидки; ВсегоБезСкидок = ВсегоБезСкидок + СтрокаТовары.СуммаБезСкидки; КонецЕсли; Если ДанныеПечати.УчитыватьНДС И НЕ ТолькоЗалогЗаТару Тогда СуммаНДСПоСтавке = СоответствиеСтавокНДС[СтрокаТовары.СтавкаНДС]; Если СуммаНДСПоСтавке = Неопределено Тогда СуммаНДСПоСтавке = 0; КонецЕсли; СоответствиеСтавокНДС.Вставить(СтрокаТовары.СтавкаНДС, СуммаНДСПоСтавке + СтрокаТовары.СуммаНДС); КонецЕсли; КонецЕсли; КонецЦикла; СтруктураДанныхВсегоСкидки = Новый Структура; ОднаЦелаяПятьСотых = "x 1.05"; // Подвал таблицы "Товары" Если ЕстьСкидки Тогда СтруктураДанныхВсегоСкидки.Вставить("ВсегоСкидок", ОднаЦелаяПятьСотых); СтруктураДанныхВсегоСкидки.Вставить("ВсегоБезСкидок", ВсегоБезСкидок); КонецЕсли; СтруктураДанныхВсегоСкидки.Вставить("Всего", ФормированиеПечатныхФорм.ФорматСумм(Сумма)); ОбластьПодвалТаблицы.Параметры.Заполнить(СтруктураДанныхВсегоСкидки); ТабличныйДокумент.Вывести(ОбластьПодвалТаблицы); // Вывести Сумму прописью СуммаКПрописи = Сумма + ?(ДанныеПечати.ЦенаВключаетНДС, 0, СуммаНДС); ИтоговаяСтрока = НСтр("ru='Всего наименований %Количество%, на сумму %Сумма%'"); ИтоговаяСтрока = СтрЗаменить(ИтоговаяСтрока, "%Количество%", НомерСтроки); ИтоговаяСтрока = СтрЗаменить(ИтоговаяСтрока, "%Сумма%", ФормированиеПечатныхФорм.ФорматСумм(СуммаКПрописи, ДанныеПечати.Валюта)); СтруктураДанныхСуммаПрописью = Новый Структура; Если ДанныеПечати.СчетКВозврату Тогда СуммаКВозврату = ДанныеПечати.СуммаКВозврату; СуммаИтого = СуммаКПрописи-СуммаКВозврату; Если СуммаИтого < 0 Тогда СуммаИтого = 0; КонецЕсли; СтруктураДанныхСуммаПрописью.Вставить("СуммаВозврата", ФормированиеПечатныхФорм.ФорматСумм(СуммаКВозврату, ДанныеПечати.Валюта)); СтруктураДанныхСуммаПрописью.Вставить("СуммаИтогоКОплате", ФормированиеПечатныхФорм.ФорматСумм(СуммаИтого, ДанныеПечати.Валюта, "0")); СтруктураДанныхСуммаПрописью.Вставить("СуммаПрописью", РаботаСКурсамиВалют.СформироватьСуммуПрописью(СуммаИтого, ДанныеПечати.Валюта)); Иначе СтруктураДанныхСуммаПрописью.Вставить("СуммаПрописью", РаботаСКурсамиВалют.СформироватьСуммуПрописью(СуммаКПрописи, ДанныеПечати.Валюта)); КонецЕсли; СтруктураДанныхСуммаПрописью.Вставить("ИтоговаяСтрока", ИтоговаяСтрока); ОбластьСуммаПрописью.Параметры.Заполнить(СтруктураДанныхСуммаПрописью); ТабличныйДокумент.Вывести(ОбластьСуммаПрописью); КонецЕсли; ЗаполнитьРеквизитыПодвалаСчетаНаОплату(ДанныеПечати, Макет, ТабличныйДокумент, ТаблицаЭтапыОплаты, СоответствиеСтавокНДС, ПараметрыПечати); УправлениеПечатью.ЗадатьОбластьПечатиДокумента(ТабличныйДокумент, НомерСтрокиНачало, ОбъектыПечати, ДанныеПечати.Ссылка); КонецЦикла; КонецПроцедуры Процедура ПроверкаЗаполненияДокумента(ДанныеПечати, ТаблицаТовары, ТаблицаЭтапыОплаты, ШаблоныОшибок, Отказ); Если НЕ (ТипЗнч(ДанныеПечати.Ссылка) = Тип("ДокументСсылка.СчетНаОплатуКлиенту") И ТипЗнч(ДанныеПечати.ДокументОснование) = Тип("СправочникСсылка.ДоговорыКонтрагентов")) И ТаблицаТовары <> Неопределено И ТаблицаТовары.Количество() = 0 Тогда Если ТипЗнч(ДанныеПечати.Ссылка) = Тип("ДокументСсылка.ЗаявкаНаВозвратТоваровОтКлиента") Тогда ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблоныОшибок.ЗаменяющиеТовары, ДанныеПечати.Ссылка), ДанныеПечати.Ссылка); Иначе ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблоныОшибок.Товары, ДанныеПечати.Ссылка), ДанныеПечати.Ссылка); КонецЕсли; Отказ = Истина; Возврат; КонецЕсли; Если ТаблицаЭтапыОплаты <> Неопределено И ТаблицаЭтапыОплаты.Количество() = 0 Тогда ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблоныОшибок.Этапы, ДанныеПечати.Ссылка), ДанныеПечати.Ссылка); Отказ = Истина; КонецЕсли; КонецПроцедуры Процедура ЗаполнитьРеквизитыПодвалаСчетаНаОплату(ДанныеПечати, Макет, ТабличныйДокумент, ТаблицаЭтапыОплаты, СоответствиеСтавокНДС, ПараметрыПечати) МассивПроверкиВывода = Новый Массив; // Вывести этапы графика оплаты Если ТаблицаЭтапыОплаты.Количество() > 1 Тогда ИмяКолонкиДатыОплаты = ?(ДанныеПечати.СчетКВозврату, НСтр("ru='Дата оплаты или возврата'"), НСтр("ru='Дата оплаты'")); ОбластьШапкаТаблицы = Макет.ПолучитьОбласть("ШапкаТаблицыЭтапыОплаты"); ОбластьПодвалТаблицы = Макет.ПолучитьОбласть("ИтогоЭтапыОплаты"); СтруктураДанныхШапки = Новый Структура("ИмяКолонкиДатыОплаты",ИмяКолонкиДатыОплаты); ОбластьШапкаТаблицы.Параметры.Заполнить(СтруктураДанныхШапки); МассивПроверкиВывода.Добавить(ОбластьШапкаТаблицы); МассивПроверкиВывода.Добавить(ОбластьПодвалТаблицы); ОбластьСтрокаТаблицы = Макет.ПолучитьОбласть("СтрокаТаблицыЭтапыОплаты"); НомерЭтапа = 1; Для Каждого ТекЭтап Из ТаблицаЭтапыОплаты Цикл ПараметрыСтроки = НовыеПараметрыСтрокиЭтапа(); ЗаполнитьЗначенияСвойств(ПараметрыСтроки, ТекЭтап); ПараметрыСтроки.НомерСтроки = НомерЭтапа; Если Не ПараметрыСтроки.ЭтоЗалогЗаТару Тогда ПараметрыСтроки.ТекстНДС = ФормированиеПечатныхФорм.СформироватьТекстНДСЭтапаОплаты( СоответствиеСтавокНДС, ТекЭтап.ПроцентПлатежа); Иначе ПараметрыСтроки.ПроцентПлатежа = "-"; ПараметрыСтроки.ТекстНДС = НСтр("ru='Залог за тару. Без налога (НДС).'"); КонецЕсли; ОбластьСтрокаТаблицы.Параметры.Заполнить(ПараметрыСтроки); МассивПроверкиВывода.Добавить(ОбластьСтрокаТаблицы); Если ТабличныйДокумент.ПроверитьВывод(МассивПроверкиВывода) Тогда Если НомерЭтапа = 1 Тогда ТабличныйДокумент.Вывести(ОбластьШапкаТаблицы); МассивПроверкиВывода.Удалить(0); КонецЕслИ; Иначе ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц(); ТабличныйДокумент.Вывести(ОбластьШапкаТаблицы); КонецЕсли; ТабличныйДокумент.Вывести(ОбластьСтрокаТаблицы); МассивПроверкиВывода.Удалить(МассивПроверкиВывода.ВГраница()); НомерЭтапа = НомерЭтапа + 1; КонецЦикла; ТабличныйДокумент.Вывести(ОбластьПодвалТаблицы); КонецЕсли; // Вывести дополнительную информацию Если ЗначениеЗаполнено(ДанныеПечати.ДополнительнаяИнформация) Тогда Область = Макет.ПолучитьОбласть("ДополнительнаяИнформация"); Область.Параметры.Заполнить(ДанныеПечати); ТабличныйДокумент.Вывести(Область); КонецЕсли; // Вывести подписи Область = Макет.ПолучитьОбласть("ПодвалСчета"); СтруктураДанныхПодвал = Новый Структура; СтруктураДанныхПодвал.Вставить("ФИОРуководителя", ДанныеПечати.Руководитель); СтруктураДанныхПодвал.Вставить("ДолжностьРуководителя", ДанныеПечати.ДолжностьРуководителя); СтруктураДанныхПодвал.Вставить("ФИОБухгалтера", ДанныеПечати.ГлавныйБухгалтер); СтруктураДанныхПодвал.Вставить("ФИОМенеджер", ФизическиеЛицаУТ.ФамилияИнициалыФизЛица(ДанныеПечати.Менеджер, ДанныеПечати.Дата)); Область.Параметры.Заполнить(СтруктураДанныхПодвал); ФормированиеПечатныхФорм.ВывестиФаксимилеВТабличныйДокумент(Макет, Область, ДанныеПечати.Организация, ПараметрыПечати); МассивПроверкиВывода.Очистить(); МассивПроверкиВывода.Добавить(Область); Если НЕ ТабличныйДокумент.ПроверитьВывод(МассивПроверкиВывода) Тогда ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц(); КонецЕсли; ТабличныйДокумент.Вывести(Область); КонецПроцедуры Процедура ЗаполнитьРеквизитыШапкиСчетаНаОплату(ДанныеПечати, Макет, ТабличныйДокумент, ТаблицаЭтапыОплаты, ТаблицаТовары) Макет = УправлениеПечатью.МакетПечатнойФормы("Обработка.ПечатьСчетовНаОплату.ПФ_MXL_СчетНаОплату"); СведенияОПоставщике = ФормированиеПечатныхФорм.СведенияОЮрФизЛице(ДанныеПечати.Организация, ДанныеПечати.Дата); ОбластьМакета = Макет.ПолучитьОбласть("ЗаголовокСчета"); ФормированиеПечатныхФорм.ВывестиЛоготипВТабличныйДокумент(Макет, ОбластьМакета, "ЗаголовокСчета", ДанныеПечати.Организация); ШтрихкодированиеПечатныхФорм.ВывестиШтрихкодВТабличныйДокумент(ТабличныйДокумент, Макет, ОбластьМакета, ДанныеПечати.Ссылка); Если ТаблицаЭтапыОплаты.Количество() = 0 Тогда ДатаПлатежа = '00010101'; ИначеЕсли ТаблицаЭтапыОплаты.Количество() = 1 Тогда ДатаПлатежа = ТаблицаЭтапыОплаты[0].ДатаПлатежа; Иначе ДатаПлатежа = ТаблицаЭтапыОплаты[ТаблицаЭтапыОплаты.Количество()-1].ДатаПлатежа; КонецЕсли; Если ЗначениеЗаполнено(ДатаПлатежа) Тогда СтруктураДанныхЗаголовок = Новый Структура; НадписьСрокДействия = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru='Счет действителен до %1.'"), Формат(ДатаПлатежа, "ДЛФ=D")) + " "; СтруктураДанныхЗаголовок.Вставить("СрокДействия", НадписьСрокДействия); ОбластьМакета.Параметры.Заполнить(СтруктураДанныхЗаголовок); КонецЕсли; ТабличныйДокумент.Вывести(ОбластьМакета); Если ДанныеПечати.ПлатежЗаРубеж Тогда ОбластьМакета = Макет.ПолучитьОбласть("ОбразецЗаполненияРеквизитыБанка"); СтруктураДанныхШапки = Новый Структура; ПредставлениеПоставщикаДляПлатПоручения = ""; Если ЗначениеЗаполнено(ДанныеПечати.БанковскийСчет) Тогда СтруктураДанныхШапки.Вставить("СчетБанкаПолучателяПредставление", ДанныеПечати.НомерБанковскогоСчета); СтруктураДанныхШапки.Вставить("БанкПолучателяПредставление", ДанныеПечати.НаименованиеБанка); СтруктураДанныхШапки.Вставить("АдресБанкаПолучателяПредставление", ДанныеПечати.АдресБанка); СтруктураДанныхШапки.Вставить("СВИФТБанка", ДанныеПечати.СВИФТБанка); ПредставлениеПоставщикаДляПлатПоручения = ДанныеПечати.БанковскийСчетТекстКорреспондента; КонецЕсли; Если ПустаяСтрока(ПредставлениеПоставщикаДляПлатПоручения) Тогда ПредставлениеПоставщикаДляПлатПоручения = ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОПоставщике, "ПолноеНаименование,"); КонецЕсли; СтруктураДанныхШапки.Вставить("ПредставлениеПоставщикаДляПлатПоручения", ПредставлениеПоставщикаДляПлатПоручения); ОбластьМакета.Параметры.Заполнить(СтруктураДанныхШапки); ТабличныйДокумент.Вывести(ОбластьМакета); Если Не ПустаяСтрока(ДанныеПечати.НаименованиеБанкаДляРасчетов) Тогда ОбластьМакета = Макет.ПолучитьОбласть("ОбразецЗаполненияРеквизитыБанкаКорреспондента"); СтруктураДанныхШапки.Очистить(); СтруктураДанныхШапки.Вставить("БанкКорреспондентПолучателяПредставление", ДанныеПечати.НаименованиеБанкаДляРасчетов + " " + ДанныеПечати.АдресБанкаДляРасчетов); СтруктураДанныхШапки.Вставить("СВИФТБанкаДляРасчетов", ДанныеПечати.СВИФТБанкаДляРасчетов); СтруктураДанныхШапки.Вставить("СчетБанкаДляРасчетовПредставление", ДанныеПечати.СчетВБанкеДляРасчетов); ОбластьМакета.Параметры.Заполнить(СтруктураДанныхШапки); ТабличныйДокумент.Вывести(ОбластьМакета); КонецЕсли; ОбластьМакета = Макет.ПолучитьОбласть("ОбразецЗаполненияНазначениеПлатежа"); СтруктураДанныхШапки.Очистить(); Если Не ЗначениеЗаполнено(ДанныеПечати.НазначениеПлатежа) И ТипЗнч(ДанныеПечати.Ссылка) <> Тип("ДокументСсылка.СчетНаОплатуКлиенту") Тогда СтруктураДанныхШапки.Вставить("НазначениеПлатежа", Документы.СчетНаОплатуКлиенту.СформироватьНазначениеПлатежа( ДанныеПечати.Номер, ДанныеПечати.Ссылка)); Иначе СтруктураДанныхШапки.Вставить("НазначениеПлатежа", ДанныеПечати.НазначениеПлатежа); КонецЕсли; ОбластьМакета.Параметры.Заполнить(СтруктураДанныхШапки); ТабличныйДокумент.Вывести(ОбластьМакета); Иначе Если ДанныеПечати.КонтрагентЮрФизЛицо = Перечисления.ЮрФизЛицо.ФизЛицо И ЗначениеЗаполнено(ДанныеПечати.БанковскийСчет) Тогда ОбластьМакета = Макет.ПолучитьОбласть("ОбразецЗаполненияППСКодом"); Иначе ОбластьМакета = Макет.ПолучитьОбласть("ОбразецЗаполненияПП"); КонецЕсли; СтруктураДанныхШапки = Новый Структура; СтруктураДанныхШапки.Вставить("ИНН", СведенияОПоставщике.ИНН); СтруктураДанныхШапки.Вставить("КПП",СведенияОПоставщике.КПП); ПредставлениеПоставщикаДляПлатПоручения = ""; СтруктураДанныхШапки.Вставить("ИдентификаторПлатежа", ДанныеПечати.ИдентификаторПлатежа); Если ЗначениеЗаполнено(ДанныеПечати.БанковскийСчет) Тогда Если ЗначениеЗаполнено(ДанныеПечати.БИКБанкаДляРасчетов) Тогда Банк = ДанныеПечати.НаименованиеБанкаДляРасчетов; БИК = ДанныеПечати.БИКБанкаДляРасчетов; КоррСчет = ДанныеПечати.КоррСчетБанкаДляРасчетов; ГородБанка = ДанныеПечати.ГородБанкаДляРасчетов; НомерСчета = ДанныеПечати.КоррСчетБанка; Иначе Банк = ДанныеПечати.НаименованиеБанка; БИК = ДанныеПечати.БИКБанк; КоррСчет = ДанныеПечати.КоррСчетБанка; ГородБанка = ДанныеПечати.ГородБанка; НомерСчета = ДанныеПечати.НомерБанковскогоСчета; КонецЕсли; СтруктураДанныхШапки.Вставить("БИКБанкаПолучателя", БИК); СтруктураДанныхШапки.Вставить("БанкПолучателя", Банк); СтруктураДанныхШапки.Вставить("БанкПолучателяПредставление", СокрЛП(Банк) + " " + ГородБанка); СтруктураДанныхШапки.Вставить("СчетБанкаПолучателя", КоррСчет); СтруктураДанныхШапки.Вставить("СчетБанкаПолучателяПредставление", КоррСчет); СтруктураДанныхШапки.Вставить("СчетПолучателяПредставление", НомерСчета); СтруктураДанныхШапки.Вставить("СчетПолучателя", НомерСчета); ПредставлениеПоставщикаДляПлатПоручения = ДанныеПечати.БанковскийСчетТекстКорреспондента; КонецЕсли; Если ПустаяСтрока(ПредставлениеПоставщикаДляПлатПоручения) Тогда ПредставлениеПоставщикаДляПлатПоручения = ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОПоставщике, "ПолноеНаименование,"); КонецЕсли; Если Не ЗначениеЗаполнено(ДанныеПечати.НазначениеПлатежа) И ТипЗнч(ДанныеПечати.Ссылка) <> Тип("ДокументСсылка.СчетНаОплатуКлиенту") Тогда СтруктураДанныхШапки.Вставить("НазначениеПлатежа", Документы.СчетНаОплатуКлиенту.СформироватьНазначениеПлатежа( ДанныеПечати.Номер, ДанныеПечати.Ссылка)); Иначе СтруктураДанныхШапки.Вставить("НазначениеПлатежа", ДанныеПечати.НазначениеПлатежа); КонецЕсли; Если СтрНайти(ДанныеПечати.ссылка.комментарий, "[Номер документа на сайте: ") = 1 тогда СтруктураДанныхШапки.Вставить("НазначениеПлатежа", "Оплата по заказу клиента № "+Сред(ДанныеПечати.ссылка.комментарий, 28, СтрДлина(ДанныеПечати.ссылка.комментарий)-29)); //++гг КонецЕсли; СтруктураДанныхШапки.Вставить("ПредставлениеПоставщикаДляПлатПоручения", ПредставлениеПоставщикаДляПлатПоручения); ОбластьМакета.Параметры.Заполнить(СтруктураДанныхШапки); Если ДанныеПечати.КонтрагентЮрФизЛицо = Перечисления.ЮрФизЛицо.ФизЛицо И ЗначениеЗаполнено(ДанныеПечати.БанковскийСчет) Тогда РеквизитыПлатежа = РеквизитыПлатежаQRКод(Структу |
|||
1
SergTheGreat
09.12.19
✎
15:06
|
А можно привести только кусок кода, в котором именно свертка происходит?!
И в чем именно проблема: ошибка при выполнении или печатается нормально, но развернутое? |
|||
2
davinchi Resolve
09.12.19
✎
15:09
|
(1) Печатается нормально, но развернуто
КОД: Товары.Свернуть("Артикул, ЕдиницаИзмерения, НаименованиеПолное, Характеристика" , "ЭтоНабор, ЭтоКомплектующие, Упаковка, ЭтоВозвратнаяТара, Содержание, Количество, СуммаСкидки, СуммаБезСкидки, Цена, Сумма, СуммаНДС, СтавкаНДС"); Для Каждого СтрокаТовары Из Товары Цикл НайтиЗапятую = Найти(СтрокаТовары.Характеристика, ","); ХарактеристикаСокр = Лев(СтрокаТовары.Характеристика, НайтиЗапятую - 1); ПрефиксИПостфикс = НаборыСервер.ПолучитьПрефиксИПостфикс(СтрокаТовары, ИспользоватьНаборы); НаименованиеПолное = СтрокаТовары.НаименованиеПолное + " / " + ХарактеристикаСокр; СтруктураДанныхСтроки = Новый Структура; Если НаборыСервер.ИспользоватьОбластьНабор(СтрокаТовары, ИспользоватьНаборы) Тогда ОбластьСтрокаТаблицы = ОбластьСтрокаТаблицыНабор; ИначеЕсли НаборыСервер.ИспользоватьОбластьКомплектующие(СтрокаТовары, ИспользоватьНаборы) Тогда ОбластьСтрокаТаблицы = ОбластьСтрокаТаблицыКомплектующие; Иначе ОбластьСтрокаТаблицы = ОбластьСтрокаТаблицыСтандарт; КонецЕсли; Если НаборыСервер.ВыводитьТолькоЗаголовок(СтрокаТовары, ИспользоватьНаборы) Тогда НомерСтрокиПечать = ""; Иначе НомерСтроки = НомерСтроки + 1; НомерСтрокиПечать = НомерСтроки; КонецЕсли; Если НомерСтроки = 0 И ВыводШапки <> 2 Тогда ВыводШапки = 1; КонецЕсли; ПрефиксИПостфикс = НаборыСервер.ПолучитьПрефиксИПостфикс(СтрокаТовары, ИспользоватьНаборы); ДополнительныеПараметрыПолученияНаименованияДляПечати = НоменклатураКлиентСервер.ДополнительныеПараметрыПредставлениеНоменклатурыДляПечати(); ДополнительныеПараметрыПолученияНаименованияДляПечати.ВозвратнаяТара = СтрокаТовары.ЭтоВозвратнаяТара; Если ЕстьСодержание Тогда ДополнительныеПараметрыПолученияНаименованияДляПечати.Содержание = СтрокаТовары.Содержание; КонецЕсли; СтруктураДанныхСтроки.Вставить("Товар", НаименованиеПолное); СтруктураДанныхСтроки.Вставить("НомерСтроки", НомерСтрокиПечать); ОбластьСтрокаТаблицы.Параметры.Заполнить(СтрокаТовары); Процент = Цел (-СтрокаТовары.СуммаСкидки / СтрокаТовары.Сумма * 100) + 1; ЗнакПроцента = "%"; Если ЗаголовокСкидки.ЕстьСкидки Тогда СтруктураДанныхСтроки.Вставить("СуммаСкидки", Строка(Процент) + Строка(ЗнакПроцента) ); КонецЕсли; Если ЗначениеЗаполнено(СтруктураИмяДопКолонки.ИмяКолонкиКодов) Тогда СтруктураДанныхСтроки.Вставить("Артикул", СтрокаТовары[СтруктураИмяДопКолонки.ИмяКолонкиКодов]); КонецЕсли; ОбластьСтрокаТаблицы.Параметры.Заполнить(СтруктураДанныхСтроки); Если НаборыСервер.ВыводитьТолькоЗаголовок(СтрокаТовары, ИспользоватьНаборы) Тогда ОбластьСтрокаТаблицы.Параметры.Заполнить(ПустыеДанные); КонецЕсли; МассивПроверкиВывода.Очистить(); МассивПроверкиВывода.Добавить(ОбластьСтрокаТаблицы); Если НомерСтроки = ТаблицаТовары.Количество() Тогда МассивПроверкиВывода.Добавить(ОбластьПодвалТаблицы); МассивПроверкиВывода.Добавить(ОбластьПодвалНДС); МассивПроверкиВывода.Добавить(ОбластьСуммаПрописью); КонецЕсли; Если ТабличныйДокумент.ПроверитьВывод(МассивПроверкиВывода) Тогда Если (НомерСтроки = 1 И ВыводШапки = 0) ИЛИ (НомерСтроки = 0 И ВыводШапки = 1) Тогда ВыводШапки = 2; ТабличныйДокумент.Вывести(ОбластьШапкаТаблицы); КонецЕсли; Иначе ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц(); ТабличныйДокумент.Вывести(ОбластьШапкаТаблицы); КонецЕсли; ТабличныйДокумент.Вывести(ОбластьСтрокаТаблицы); Если Не НаборыСервер.ИспользоватьОбластьКомплектующие(СтрокаТовары, ИспользоватьНаборы) Тогда Сумма = Сумма + СтрокаТовары.Сумма; СуммаНДС = СуммаНДС + СтрокаТовары.СуммаНДС; Если ЕстьСкидки Тогда ВсегоСкидок = ВсегоСкидок + СтрокаТовары.СуммаСкидки; ВсегоБезСкидок = ВсегоБезСкидок + СтрокаТовары.СуммаБезСкидки; КонецЕсли; Если ДанныеПечати.УчитыватьНДС И НЕ ТолькоЗалогЗаТару Тогда СуммаНДСПоСтавке = СоответствиеСтавокНДС[СтрокаТовары.СтавкаНДС]; Если СуммаНДСПоСтавке = Неопределено Тогда СуммаНДСПоСтавке = 0; КонецЕсли; СоответствиеСтавокНДС.Вставить(СтрокаТовары.СтавкаНДС, СуммаНДСПоСтавке + СтрокаТовары.СуммаНДС); КонецЕсли; КонецЕсли; |
|||
3
Мимохожий Однако
09.12.19
✎
15:11
|
(0 (2) в методе Свернуть() есть лишние поля суммирования. Например, "Цена, Содержания, СтавкаНДС"
|
|||
4
SergTheGreat
09.12.19
✎
15:14
|
(3) Это никак не влияет на свертку
|
|||
5
davinchi Resolve
09.12.19
✎
15:16
|
(4) если я уберу характеристику то до наименования модели сворачивает нормально
|
|||
6
SergTheGreat
09.12.19
✎
15:20
|
(2) задача была "свернуть номенклатуру по модели и по размеру", а в коде "Товары.Свернуть("Артикул, ЕдиницаИзмерения, НаименованиеПолное, Характеристика",".
Подозреваю что "размер" - это Характеристика. А в каком поле "модель"? |
|||
7
davinchi Resolve
09.12.19
✎
15:21
|
(6) НаименованиеПолное
|
|||
8
davinchi Resolve
09.12.19
✎
15:23
|
(6) Я записывал в НаименованиеПолное и Модель и Характеристику
Вот так: НаименованиеПолное = СтрокаТовары.НаименованиеПолное + " / " + ХарактеристикаСокр; |
|||
9
SergTheGreat
09.12.19
✎
15:25
|
(7) можно тогда таблички или скрины: что было в документе и что получилось на печати.
|
|||
10
davinchi Resolve
09.12.19
✎
15:30
|
||||
11
SergTheGreat
09.12.19
✎
15:46
|
(10) так все правильно свернулось! Например:
- в 1й строке печати суммировались строки №1 и №2 документа; - в 4й строке вывелась строка №5 документа. Т.е. выполнению первоначальной задачи мешает ЦВЕТ. |
|||
12
davinchi Resolve
09.12.19
✎
16:06
|
(11) а как мне обойти эту проблему ?
|
|||
13
SergTheGreat
12.12.19
✎
14:13
|
(12) Да ты уже это сделал :-) Объединил модель и размер в поле "НаименованиеПолное" и убрал "Характеристика" из списка сворачиваемых полей.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |