Имя: Пароль:
1C
1С v8
Дублирование строк на поле табличного документа при выводе через СКД
0 Droning1C
 
06.09.21
17:55
ОФ, УПП. По нажатию кнопки на форме обработки средствами СКД формируется набор данных и выводится в ТЗ. Создается объект отчета, открывается его форма и реквизиту формы "ТЗРезультат" этого отчета присваивается значение сформированной ранее ТЗ. Далее опять же средствами СКД уже полученная ТЗ используется для чуть другой схемы компановки и по новой выводится на поле табличного документа, расположенное на форме отчета. И все бы хорошо, но строки на поле табличного документа задублированы, хотя в источнике данных дублей строк нет. В чем может быть проблема? Уже глаза все сломал.

   Причем, если после формирования отчета(из обработки) переформировать его, нажав на кнопку "сформировать", все выводится нормально. Если хоть ка-то тронуть настройки очтета и переформировать, тут же все дублируется. Если после выполнения этих действий закрыть обработку, закрыть отчет и выполнить все действия по новой - дубли присутствуют сразу после программного формирования из обработки...

   Шайтанство, крч.

   Процедура формирования набора данных и формирования отчета из обработки:

Процедура НажатиеАрмПланирование(Кнопка)   //черезТЗ
    
    Отчет = Отчеты.ТаблицаГотовностиЗаказов_v4.Создать();    
    Форма = Отчет.ПолучитьФорму("ФормаОтчета_АРМ_ПДО");
    
    Форма.Открыть();
    
    СхемаКомпоновкиДанных = Форма.ЭтотОбъект.ПолучитьМакет("ТаблицаГотовностиЗаказов_АРМ_ПДО_Источник");

    //Настройки = Форма.ЭтотОбъект.СхемаКомпоновкиДанных.ВариантыНастроек.ПоДатеОтгрузкиКлассификатор.Настройки;
    Настройки = СхемаКомпоновкиДанных.ВариантыНастроек.ПоДатеОтгрузкиКлассификатор.Настройки;
    
    ЗаполнениеПараметров(Настройки);

    
    Форма.ЭтотОбъект.СформироватьТЗ_АктыПоБраку();
    Форма.ЭтотОбъект.СформироватьТЗ_Уведомления();
    
    Форма.ЭлементыФормы.Результат.Очистить();
        
        
    
    //Вывод в тз
    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
    МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки,,,Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
    
    ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
    
    ВнешниеНаборыДанных = Новый Структура;
    ВнешниеНаборыДанных.Вставить("втАктыПоБракуПоЗаказам", Форма.ЭтотОбъект.АктыПоБракуПоЗаказам.Выгрузить());
    ВнешниеНаборыДанных.Вставить("втУведомленияПоЗаказам", Форма.ЭтотОбъект.ТЗУведомленияПоЗаказам);
    
    ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, ВнешниеНаборыДанных,);

    ТЗРезультат = Новый ТаблицаЗначений;
    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
    ПроцессорВывода.УстановитьОбъект(ТЗРезультат);
    ПроцессорВывода.Вывести(ПроцессорКомпоновки, Истина);
    
    Форма.ТЗРезультат = ТЗРезультат;
    Форма.ВызовИзАРМ_ПДО = Истина;
    
    //Вывод в ТабДок
    
    СхемаКомпоновкиДанныхТД = Форма.ЭтотОбъект.ПолучитьМакет("ТаблицаГотовностиЗаказов_АРМ_ПДО");
    //Настройки = СхемаКомпоновкиДанных.ВариантыНастроек.ПоДатеОтгрузкиКлассификатор.Настройки;
    НастройкиТД = Форма.ЭтотОбъект.ПолучитьМакет("ТаблицаГотовностиЗаказов_АРМ_ПДО").ВариантыНастроек.ПоДатеОтгрузкиКлассификатор.Настройки;

    ДанныеРасшифровкиТД = Новый ДанныеРасшифровкиКомпоновкиДанных;
    ДанныеРасшифровкиТД.Настройки = НастройкиТД;
    Форма.ДанныеРасшифровки = ДанныеРасшифровкиТД;
    
    КомпоновщикМакетаТД = Новый КомпоновщикМакетаКомпоновкиДанных;
    МакетКомпоновкиТД = КомпоновщикМакетаТД.Выполнить(СхемаКомпоновкиДанныхТД, НастройкиТД, Форма.ДанныеРасшифровки,,);
    
    ПроцессорКомпоновкиТД = Новый ПроцессорКомпоновкиДанных;
    ИспользоватьВнешниеФункции = Ложь;
    ВнешниеНаборыДанныхТД = Новый Структура;
    ВнешниеНаборыДанныхТД.Вставить("ТЗРезультат", Форма.ТЗРезультат);
        
    ПроцессорКомпоновкиТД.Инициализировать(МакетКомпоновкиТД, ВнешниеНаборыДанныхТД, Форма.ДанныеРасшифровки,);
    
    Форма.ЭлементыФормы.Результат.Очистить();
    
    ПроцессорВыводаТД = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
    ПроцессорВыводаТД.УстановитьДокумент(Форма.ЭлементыФормы.Результат);
    ПроцессорВыводаТД.Вывести(ПроцессорКомпоновкиТД, Истина);
        
КонецПроцедуры
1 Droning1C
 
06.09.21
17:56
Процедура формирования отчета из формы отчета



Процедура ДействияФормыСформировать_(Кнопка)
    
    Если ОчищатьМассивКПередаче Тогда
        МассивЗаказовКПередаче.Очистить();
    КонецЕсли;
    
    Настройки = "";
    
    Если ЗначениеЗаполнено(НастройкаВарината) Тогда
        Настройки = НастройкаВарината.НастройкиКомпоновщика.Получить();
        КомпоновщикНастроек.ЗагрузитьНастройки(Настройки);
    Иначе
        //Настройки = СхемаКомпоновкиДанных.ВариантыНастроек.ПоДатеОтгрузкиКлассификатор.Настройки;
        //Настройки = КомпоновщикНастроек.Настройки;
        Если ТЗРезультат.Количество() = 0 Тогда
            Настройки = ЭтотОбъект.ПолучитьМакет("ТаблицаГотовностиЗаказов_АРМ_ПДО_Источник").ВариантыНастроек.ПоДатеОтгрузкиКлассификатор.Настройки;
            КомпоновщикНастроек.ЗагрузитьНастройки(Настройки);
        Иначе
            Настройки = КомпоновщикНастроек.Настройки;
            //Настройки = ЭтотОбъект.ПолучитьМакет("ТаблицаГотовностиЗаказов_АРМ_ПДО").ВариантыНастроек.ПоДатеОтгрузкиКлассификатор.Настройки;
        КонецЕсли;
        
    КонецЕсли;    
    
    ПередачаПараметров();
    
    ЭлементыФормы.Результат.Очистить();
    
    СхемаКомпоновкиДанных = ЭтотОбъект.ПолучитьМакет("ТаблицаГотовностиЗаказов_АРМ_ПДО");
    
    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;    
    
    //Вывод в ТабДок
    МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки,,);
    ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
    //ИспользоватьВнешниеФункции = Ложь;
    ВнешниеНаборыДанных = Новый Структура;
    ВнешниеНаборыДанных.Вставить("ТЗРезультат", ТЗРезультат);    
    
    ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, ВнешниеНаборыДанных, ДанныеРасшифровки,);
    
    ЭлементыФормы.Результат.Очистить();
    
    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
    ПроцессорВывода.УстановитьДокумент(ЭлементыФормы.Результат);
    //ПроцессорВывода.Вывести(ПроцессорКомпоновки, Истина);
    ПроцессорВывода.НачатьВывод();
    Пока Истина Цикл
        ОбработкаПрерыванияПользователя();
        ЭлементРезультата       = ПроцессорКомпоновки.Следующий();
        Если ЭлементРезультата = Неопределено Тогда
            Прервать;
        КонецЕсли;
        ПроцессорВывода.ВывестиЭлемент(ЭлементРезультата);
    КонецЦикла;
    ПроцессорВывода.ЗакончитьВывод();
    
КонецПроцедуры
2 Droning1C
 
06.09.21
21:48
Видимо хреново описал проблему... Если проще - из-за чего могут дублироваться строки в табличном документе при формировании средствами СКД, если во внешнем источнике данных, на основании которого инициализируется макет, дублей нет?
3 Droning1C
 
07.09.21
09:38
ап