Имя: Пароль:
1C
1С v8
Печатная форма счет на оплату
, ,
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) Да ты уже это сделал :-) Объединил модель и размер в поле "НаименованиеПолное" и убрал "Характеристика" из списка сворачиваемых полей.
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший