Имя: Пароль:
1C
 
присоединение области макета
0 userqwerty
 
12.11.19
10:37
моиогите разобраться юной программистке 1с,

у меня при присоединении области макета ПоДате она дублируется несколько раз,


Функция СформироватьПечатнуюФормуЗаказПоставщику(МассивОбъектов, ТабличныйДокумент)
    
    // ===============================================================================================
    // Области макета
    
    Макет = ПолучитьМакет("ПФ_MXL_ЗаказПоставщику");
    Заголовок = Макет.ПолучитьОбласть("Заголовок");
    ШапкаТаблицы = Макет.ПолучитьОбласть("ШапкаТаблицы|Основное");
    СтрокаТаблицы = Макет.ПолучитьОбласть("СтрокаТаблицы|Основное");
    Подвал = Макет.ПолучитьОбласть("ПодвалТаблицы|Основное");
    Подписи = Макет.ПолучитьОбласть("Подписи");
    ШапкаТаблицыПоДате = Макет.ПолучитьОбласть("ШапкаТаблицы|ПоДате");
    СтрокаТаблицыПоДате = Макет.ПолучитьОбласть("СтрокаТаблицы|ПоДате");
    ПодвалПоДате = Макет.ПолучитьОбласть("ПодвалТаблицы|ПоДате");
    // ===============================================================================================
    // Заполнение макета
    Запрос = Новый Запрос("ВЫБРАТЬ
                          |    ЗаказПоставщикуТовары.Номенклатура КАК Номенклатура,
                          |    ЗаказПоставщикуТовары.ХХ_КоличествоКонтейнеров КАК КоличествоКонтейнеров,
                          |    ЗаказПоставщикуТовары.КоличествоУпаковок КАК КоличествоУпаковок,
                          |    ЗаказПоставщикуТовары.Цена КАК Цена,
                          |    ЗаказПоставщикуТовары.Сумма КАК Сумма,
                          |    ЗаказПоставщикуТовары.Склад КАК Склад,
                          |    ЗаказПоставщикуТовары.ДатаПоступления КАК ДатаПоступления,
                          |    ХХ_КодыДляИнвойсов.ID КАК ID,
                          |    ЗаказПоставщикуТовары.Ссылка.ХХ_Порт КАК Порт,
                          |    ЗаказПоставщикуТовары.Номенклатура.ХХ_НаименованиеАнгл КАК НоменклатураНаАнглийском,
                          |    ДополнительныеСведения.Значение КАК СкладНаАнглийском,
                          |    ЗаказПоставщикуТовары.Ссылка.Валюта КАК Валюта
                          |ИЗ
                          |    Документ.ЗаказПоставщику.Товары КАК ЗаказПоставщикуТовары
                          |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ХХ_ВЭД_КодыДляИнвойсов КАК ХХ_КодыДляИнвойсов
                          |        ПО ЗаказПоставщикуТовары.Номенклатура = ХХ_КодыДляИнвойсов.Номенклатура
                          |            И ЗаказПоставщикуТовары.Характеристика = ХХ_КодыДляИнвойсов.Характеристика
                          |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДополнительныеСведения КАК ДополнительныеСведения
                          |        ПО ЗаказПоставщикуТовары.Склад = ДополнительныеСведения.Объект
                          |ГДЕ
                          |    ЗаказПоставщикуТовары.Ссылка = &Ссылка
                          |    И ДополнительныеСведения.Свойство = &Свойство
                          |
                          |СГРУППИРОВАТЬ ПО
                          |    ЗаказПоставщикуТовары.Номенклатура,
                          |    ЗаказПоставщикуТовары.ХХ_КоличествоКонтейнеров,
                          |    ЗаказПоставщикуТовары.КоличествоУпаковок,
                          |    ЗаказПоставщикуТовары.Цена,
                          |    ЗаказПоставщикуТовары.Сумма,
                          |    ЗаказПоставщикуТовары.Склад,
                          |    ЗаказПоставщикуТовары.ДатаПоступления,
                          |    ХХ_КодыДляИнвойсов.ID,
                          |    ЗаказПоставщикуТовары.Ссылка.ХХ_Порт,
                          |    ЗаказПоставщикуТовары.Номенклатура.ХХ_НаименованиеАнгл,
                          |    ДополнительныеСведения.Значение,
                          |    ЗаказПоставщикуТовары.Ссылка.Валюта");
    Шаблон = ".*(\d\d)_(\d\d)"; // регулярное выражение соответствует номеру заказа
    
    RegExp = Новый COMОбъект("VBScript.RegExp");
    RegExp.MultiLine = Ложь;    
    RegExp.Global = Истина;    
    RegExp.IgnoreCase = Истина;
    RegExp.Pattern = Шаблон;    

    Для каждого ДокументСсылка Из МассивОбъектов Цикл
        Запрос.УстановитьПараметр("Ссылка", ДокументСсылка);
        Запрос.УстановитьПараметр("Свойство",ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.ПолучитьСсылку(Новый УникальныйИдентификатор("aa7f776e-0217-11ea-910c-6805ca468e7c")));
        //Запрос.УстановитьПараметр("Свойство2",ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.ПолучитьСсылку(Новый УникальныйИдентификатор("1d9ff284-044d-11ea-910c-6805ca468e7c")));
        Рез = Запрос.Выполнить();
        СоответствиеКолонокДатПоступления = Новый Соответствие;
        ТЗ = Рез.Выгрузить();
        ТЗ.Свернуть("ДатаПоступления, Склад, Порт, СкладНаАнглийском", "КоличествоУпаковок, КоличествоКонтейнеров");
        Пока ТЗ.Найти(null,"ДатаПоступления") <> Неопределено Цикл
            ТЗ.Удалить(ТЗ.Найти(null,"ДатаПоступления"));
        КонецЦикла;
        ТЗ.Сортировать("ДатаПоступления, Склад, Порт, СкладНаАнглийском");
        
        Заголовок.Параметры.НомерПриложения = RegExp.Replace(ДокументСсылка.ХХ_НомерЗаказаВЭД, "$1.$2") + "." + ДокументСсылка.ХХ_НомерПоставки;
        Заголовок.Параметры.ДатаПриложения = Формат(ДокументСсылка.Дата, "ДФ=dd.MM.yyyy") + "г.";
        Заголовок.Параметры.НомерКонтракта = ДокументСсылка.Договор.Номер;
        Заголовок.Параметры.ДатаКонтракта = Формат(ДокументСсылка.Договор.Дата, "ДФ=dd.MM.yyyy") + "г.";
        
        ТабличныйДокумент.Вывести(Заголовок);
        ТабличныйДокумент.Вывести(ШапкаТаблицы);
        Для Каждого СтрокаТЗ Из ТЗ Цикл
            ШапкаТаблицыПоДате.Параметры.СкладНазначения = СтрокаТЗ.Склад;
            ШапкаТаблицыПоДате.Параметры.СкладНаАнглийском = СтрокаТЗ.СкладНаАнглийском;
            ШапкаТаблицыПоДате.Параметры.Порт = СтрокаТЗ.Порт;
            ТабличныйДокумент.Присоединить(ШапкаТаблицыПоДате);
        КонецЦикла;
        Выборка = Рез.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
        
        НомерПП = 1;
        
        ИтогоКоличествоУпаковок = 0;
        ИтогоКоличествоКонтейнеров = 0;
        ИтогоСумма = 0;
        
        Пока Выборка.Следующий() Цикл
            СтрокаТаблицы.Параметры.Заполнить(Выборка);
            СтрокаТаблицы.Параметры.Цена = Строка(Выборка.Валюта) + " " + Формат(СтрокаТаблицы.Параметры.Цена, "ЧДЦ=1");
            СтрокаТаблицы.Параметры.Сумма = Строка(Выборка.Валюта) + " " + Строка(Формат(СтрокаТаблицы.Параметры.Сумма, "ЧДЦ=1"));
            СтрокаТаблицы.Параметры.НомерПП = НомерПП;
            СтрокаТаблицы.Параметры.НоменклатураНаАнглийском = Выборка.НоменклатураНаАнглийском;
            СтрокиСДатами = Выборка.Выбрать();
            
            НомерПП = НомерПП + 1;
            
            ТабличныйДокумент.Вывести(СтрокаТаблицы);
            СоответствиеДанныхПоДате = Новый Соответствие;
            Пока СтрокиСДатами.Следующий() Цикл
                СтруктураРесурсов = Новый структура("КоличествоУпаковок", СтрокиСДатами.КоличествоУпаковок);
                СоответствиеДанныхПоДате.Вставить("" + СтрокиСДатами.ДатаПоступления + СтрокиСДатами.Склад, СтруктураРесурсов);
            КонецЦикла;
            Для Каждого СтрокаТЗ Из ТЗ Цикл
                НайденнаяСтруктураРесурсов = СоответствиеДанныхПоДате["" + СтрокаТЗ.ДатаПоступления + СтрокаТЗ.Склад];
                СтрокаТаблицыПоДате.Параметры.КоличествоУпаковок = Выборка.КоличествоУпаковок;
                Если ЗначениеЗаполнено(НайденнаяСтруктураРесурсов) Тогда
                    СтрокаТаблицыПоДате.Параметры.Заполнить(НайденнаяСтруктураРесурсов);
                КонецЕсли;
                ТабличныйДокумент.Присоединить(СтрокаТаблицыПоДате);
            КонецЦикла;
            ИтогоКоличествоУпаковок = ИтогоКоличествоУпаковок + Выборка.КоличествоУпаковок;
            ИтогоКоличествоКонтейнеров = ИтогоКоличествоКонтейнеров + Выборка.КоличествоКонтейнеров;
            ИтогоСумма = ИтогоСумма + Выборка.Сумма;
            
        КонецЦикла;        
        
        Подвал.Параметры.ИтогоКоличествоУпаковок = ИтогоКоличествоУпаковок;
        СтрокаТаблицыПоДате.Параметры.КоличествоУпаковок = Выборка.КоличествоУпаковок;
        Подвал.Параметры.ИтогоСумма = Строка(Выборка.Валюта) + " " + (Формат(ИтогоСумма,"ЧДЦ=1"));
        ТабличныйДокумент.Вывести(Подвал);
        Для Каждого СтрТЗ Из ТЗ Цикл
            ПодвалПоДате.Параметры.ИтогоКоличествоУпаковок = СтрТЗ.КоличествоУпаковок;
            СтрокаТаблицыПоДате.Параметры.КоличествоУпаковок = СтрТЗ.КоличествоУпаковок;
            ТабличныйДокумент.Присоединить(ПодвалПоДате);
        КонецЦикла;
        ТабличныйДокумент.Вывести(Подписи);
        
        ТабличныйДокумент.Область(1,1,1, ТабличныйДокумент.ШиринаТаблицы).Объединить();
        ТабличныйДокумент.Область(2,1,2, ТабличныйДокумент.ШиринаТаблицы).Объединить();
        
    КонецЦикла;
    
    // ===============================================================================================
    
    Возврат ТабличныйДокумент;
    
КонецФункции
1 Радим1987
 
12.11.19
11:00
Скорее всего из за цикл в цикле
2 Радим1987
 
12.11.19
11:01
Пока Выборка.Следующий() Цикл
            СтрокаТаблицы.Параметры.Заполнить(Выборка);
            СтрокаТаблицы.Параметры.Цена = Строка(Выборка.Валюта) + " " + Формат(СтрокаТаблицы.Параметры.Цена, "ЧДЦ=1");
            СтрокаТаблицы.Параметры.Сумма = Строка(Выборка.Валюта) + " " + Строка(Формат(СтрокаТаблицы.Параметры.Сумма, "ЧДЦ=1"));
            СтрокаТаблицы.Параметры.НомерПП = НомерПП;
            СтрокаТаблицы.Параметры.НоменклатураНаАнглийском = Выборка.НоменклатураНаАнглийском;
            СтрокиСДатами = Выборка.Выбрать();
            
            НомерПП = НомерПП + 1;
            
            ТабличныйДокумент.Вывести(СтрокаТаблицы);
            СоответствиеДанныхПоДате = Новый Соответствие;
            Пока СтрокиСДатами.Следующий() Цикл
                СтруктураРесурсов = Новый структура("КоличествоУпаковок", СтрокиСДатами.КоличествоУпаковок);
                СоответствиеДанныхПоДате.Вставить("" + СтрокиСДатами.ДатаПоступления + СтрокиСДатами.Склад, СтруктураРесурсов);
            КонецЦикла;
            Для Каждого СтрокаТЗ Из ТЗ Цикл
                НайденнаяСтруктураРесурсов = СоответствиеДанныхПоДате["" + СтрокаТЗ.ДатаПоступления + СтрокаТЗ.Склад];
                СтрокаТаблицыПоДате.Параметры.КоличествоУпаковок = Выборка.КоличествоУпаковок;
                Если ЗначениеЗаполнено(НайденнаяСтруктураРесурсов) Тогда
                    СтрокаТаблицыПоДате.Параметры.Заполнить(НайденнаяСтруктураРесурсов);
                КонецЕсли;
                ТабличныйДокумент.Присоединить(СтрокаТаблицыПоДате);
            КонецЦикла;
            ИтогоКоличествоУпаковок = ИтогоКоличествоУпаковок + Выборка.КоличествоУпаковок;
            ИтогоКоличествоКонтейнеров = ИтогоКоличествоКонтейнеров + Выборка.КоличествоКонтейнеров;
            ИтогоСумма = ИтогоСумма + Выборка.Сумма;
            
        КонецЦикла;
3 dka80
 
12.11.19
11:16
У тебя в один день может быть несколько поступлений

ТЗ.Свернуть("ДатаПоступления, Склад, Порт, СкладНаАнглийском");
ТЗ.Сортировать("ДатаПоступления, Склад, Порт, СкладНаАнглийском");
4 userqwerty
 
12.11.19
11:18
Разобралась. у меня в ТЗ попадало три ДатыПоступления поэтому дублировалась область.
5 userqwerty
 
12.11.19
11:19
всем большое спасибо))!!!!!!!!!!!!!!!!!!!!!!