Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Как правильно создать документы в цикле и заполнить табличную часть показателями

Как правильно создать документы в цикле и заполнить табличную часть показателями
Я
   1сЮлия
 
21.05.19 - 12:40
Добрый день! Имеется самописный документ с табличной частью Анализы,эти анализы заполняются из типового анализа 5 показателей, мне нужно отобрать все анализы по подразделению,периоду и создать столько доков,сколько  из этой выборки  значений по пять показателей,у меня сейчас неправильно работает,конфа УПП. Вот фрагмент кода
Функция ПолучитьМехИспытания(Подразделение,Номенклатура,Дата)
        
    МехАнализы = Новый ТаблицаЗначений;
    Запрос = Новый Запрос;
    Запрос.Текст =

      "ВЫБРАТЬ
      |    СертификацияНоменклатурыАнализы.ЗначениеПоказателя КАК ЗначениеПоказателя,
      |    СертификацияНоменклатурыАнализы.ПоказательАнализа
      |ИЗ
      |    Документ.СертификацияНоменклатуры.Анализы КАК СертификацияНоменклатурыАнализы
      |ГДЕ
      |    СертификацияНоменклатурыАнализы.Ссылка.Подразделение = &Подразделение
      |    И СертификацияНоменклатурыАнализы.Ссылка.Номенклатура = &Номенклатура
      |    И СертификацияНоменклатурыАнализы.Ссылка.Дата МЕЖДУ &НачДата И &КонДата
      |    И ДЕНЬ(СертификацияНоменклатурыАнализы.Ссылка.Дата) = &Дата
      |
      |СГРУППИРОВАТЬ ПО
      |    СертификацияНоменклатурыАнализы.ЗначениеПоказателя,
      |    СертификацияНоменклатурыАнализы.ПоказательАнализа" ;
    
    Запрос.УстановитьПараметр("Подразделение",Подразделение);
    Запрос.УстановитьПараметр("Номенклатура",Номенклатура);
    Запрос.УстановитьПараметр("Дата",Дата);
    Запрос.УстановитьПараметр("НачДата",НачалоПериода);
    Запрос.УстановитьПараметр("КонДата",КонецПериода);
    
    ВыборкаМехИспытания = Запрос.Выполнить();    
    
    Если  Не (ВыборкаМехИспытания.Пустой()) Тогда
        МехАнализы = ВыборкаМехИспытания.Выгрузить();
        Возврат МехАнализы;
    КонецЕсли;
    ТиповойАнализ = Справочники.ТиповыеАнализыНоменклатуры.НайтиПоНаименованию("Механические свойства");
            
            ОперацииКВЛАнализы = ПолучитьМехИспытания(Строка.Подразделение,Строка.Номенклатура,Строка.День);                
            ОперацииКВЛ = Документы.аэсОперацияКВЛ.СоздатьДокумент();
            ОперацииКВЛ.ВидОперации = Перечисления.аэсВидыОперацийКВЛ.МеханическиеИспытания;

            Для Каждого КВЛАнализ ИЗ ОперацииКВЛАнализы Цикл
                Для Каждого ТекПоказатель Из ТиповойАнализ.ПоказателиАнализа Цикл
                    Если  ТекПоказатель.ПоказательАнализа = КВЛАнализ.ПоказательАнализа Тогда
                        НоваяСтрока = ОперацииКВЛ.Анализы.Добавить();
                        НоваяСтрока.ПоказательАнализа = ТекПоказатель.ПоказательАнализа;
                        НоваяСтрока.ЗначениеПоказателя = КВЛАнализ.ЗначениеПоказателя;  
                    УстановитьТипЗначенияПоказателяВСтроке(НоваяСтрока);
                    НоваяСтрока.ЕдиницаИзмерения =
                        ?(  НоваяСтрока.ПоказательАнализа.ВидРезультатаАнализа = ПланыВидовХарактеристик.ВидыРезультатовАнализаНоменклатуры.ЧислоВИнтервале
                        ИЛИ НоваяСтрока.ПоказательАнализа.ВидРезультатаАнализа = ПланыВидовХарактеристик.ВидыРезультатовАнализаНоменклатуры.Погрешность
                        ИЛИ НоваяСтрока.ПоказательАнализа.ВидРезультатаАнализа = ПланыВидовХарактеристик.ВидыРезультатовАнализаНоменклатуры.Поддиапазон,
                            НоваяСтрока.ПоказательАнализа.ЕдиницаИзмерения,
                            Неопределено);
                    КонецЕсли;        
                КонецЦикла;
            КонецЦикла;            
            
            ОперацииКВЛАнализы = ОперацииКВЛ.Анализы.Выгрузить();
            
            СерииАнализ = ОтобратьСерииПоАнализам(ОперацииКВЛАнализы);
            
            Для Каждого Стр из СерииАнализ Цикл
                
                ЗаполнитьЗначенияСвойств(ОперацииКВЛ.Серии.Добавить(), Стр);
                
            КонецЦикла;

КонецФункции
 
 
   1сЮлия
 
1 - 21.05.19 - 12:42
Как отобрать и создать один документ,одна табличная часть пять строк из выборки?
   Йохохо
 
2 - 21.05.19 - 12:44
"сколько  из этой выборки значений по пять показателей" вот это ставит в тупик, это буквально понимать?
   sqr4
 
3 - 21.05.19 - 12:54
Использовать итоги, обходить по иерархии
   1сЮлия
 
4 - 21.05.19 - 12:54
54 елемента
   sqr4
 
5 - 21.05.19 - 12:55
другой вариант, хранить старое значение, при изменении делать новый документ
   sqr4
 
6 - 21.05.19 - 12:55
Обязательно сортировка по показателю
   1сЮлия
 
7 - 21.05.19 - 12:58
организовать две переменные показательанализа,значениепоказателя
   1сЮлия
 
8 - 21.05.19 - 13:03
Побробую сейчас
   1сЮлия
 
9 - 21.05.19 - 14:01
Для Каждого КВЛАнализ ИЗ ОперацииКВЛАнализы Цикл
                Для Каждого ТекПоказатель Из ТиповойАнализ.ПоказателиАнализа Цикл
                    Если  (ТекПоказатель.ПоказательАнализа = КВЛАнализ.ПоказательАнализа) и (ПоказательАнализа <> КВЛАнализ.ПоказательАнализа) и (ЗначениеПоказателя <> КВЛАнализ.ПоказательАнализа) Тогда 
                        ОперацииКВЛ = Документы.аэсОперацияКВЛ.СоздатьДокумент();
                        ОперацииКВЛ.ВидОперации = Перечисления.аэсВидыОперацийКВЛ.МеханическиеИспытания;
                        НоваяСтрока = ОперацииКВЛ.Анализы.Добавить();
                        НоваяСтрока.ПоказательАнализа =  КВЛАнализ.ПоказательАнализа;
                        НоваяСтрока.ЗначениеПоказателя = КВЛАнализ.ЗначениеПоказателя;  
                    УстановитьТипЗначенияПоказателяВСтроке(НоваяСтрока);
                    НоваяСтрока.ЕдиницаИзмерения =
                        ?(  НоваяСтрока.ПоказательАнализа.ВидРезультатаАнализа = ПланыВидовХарактеристик.ВидыРезультатовАнализаНоменклатуры.ЧислоВИнтервале
                        ИЛИ НоваяСтрока.ПоказательАнализа.ВидРезультатаАнализа = ПланыВидовХарактеристик.ВидыРезультатовАнализаНоменклатуры.Погрешность
                        ИЛИ НоваяСтрока.ПоказательАнализа.ВидРезультатаАнализа = ПланыВидовХарактеристик.ВидыРезультатовАнализаНоменклатуры.Поддиапазон,
                            НоваяСтрока.ПоказательАнализа.ЕдиницаИзмерения,
                            Неопределено);
                        ПоказательАнализа =    КВЛАнализ.ПоказательАнализа;
                        ЗначениеПоказателя = КВЛАнализ.ЗначениеПоказателя; 
                    КонецЕсли;        
    
                КонецЦикла;
            КонецЦикла;
   1сЮлия
 
10 - 21.05.19 - 14:01
Вот так имелось в виду?
   1сЮлия
 
11 - 23.05.19 - 09:51
Вот фрагмент,но все равно неверно работает,я получаю таблицу значений ОперацииКВЛАнализы, а потом  там где цикл по  ТиповойАнализ.ПоказателиАнализа мне нужно найти показатель,который соответстует показателю типового анализа
    ТиповойАнализ = Справочники.ТиповыеАнализыНоменклатуры.НайтиПоНаименованию("Механические свойства");
            
            ОперацииКВЛАнализы = ПолучитьМехИспытания(Строка.Подразделение,Строка.Номенклатура,Строка.День);                
             Дата1 = '00010101';
            Для Каждого КВЛАнализ ИЗ ОперацииКВЛАнализы Цикл
                
                Если (Дата1 <> КВЛАнализ.Дата) Тогда
                      аэсОперацияКВЛ = Документы.аэсОперацияКВЛ.СоздатьДокумент();
                      аэсОперацияКВЛ.ВидОперации = Перечисления.аэсВидыОперацийКВЛ.МеханическиеИспытания;
                      аэсОперацияКВЛ.Дата = КВЛАнализ.Дата;
                      Дата1 = КВЛАнализ.Дата;
                          //ОперацииКВЛ.Анализы.

                    Для Каждого ТекПоказатель Из ТиповойАнализ.ПоказателиАнализа Цикл
                            НоваяСтрока = аэсОперацияКВЛ.Анализы.Добавить();
                            НоваяСтрока.ПоказательАнализа = ОперацииКВЛАнализы.Найти(ТекПоказатель.ПоказательАнализа,"ПоказательАнализа");
                            НоваяСтрока.ЗначениеПоказателя = КВЛАнализ.ЗначениеПоказателя;  
                        УстановитьТипЗначенияПоказателяВСтроке(НоваяСтрока);
                        НоваяСтрока.ЕдиницаИзмерения =
                            ?(  НоваяСтрока.ПоказательАнализа.ВидРезультатаАнализа = ПланыВидовХарактеристик.ВидыРезультатовАнализаНоменклатуры.ЧислоВИнтервале
                            ИЛИ НоваяСтрока.ПоказательАнализа.ВидРезультатаАнализа = ПланыВидовХарактеристик.ВидыРезультатовАнализаНоменклатуры.Погрешность
                            ИЛИ НоваяСтрока.ПоказательАнализа.ВидРезультатаАнализа = ПланыВидовХарактеристик.ВидыРезультатовАнализаНоменклатуры.Поддиапазон,
                                НоваяСтрока.ПоказательАнализа.ЕдиницаИзмерения,
                                Неопределено);
                        //КонецЕсли;        

                    КонецЦикла;
                   аэсОперацияКВЛ.Записать();

                КонецЕсли;    
                    

            КонецЦикла;
   1сЮлия
 
12 - 23.05.19 - 10:49
Вот так вроди бы пошло,но все равно немного нетак ТиповойАнализ = Справочники.ТиповыеАнализыНоменклатуры.НайтиПоНаименованию("Механические свойства");
            
            ОперацииКВЛАнализы = ПолучитьМехИспытания(Строка.Подразделение,Строка.Номенклатура,Строка.День);                
             Дата1 = '00010101';
            Для Каждого КВЛАнализ ИЗ ОперацииКВЛАнализы Цикл
                
                Если (Дата1 <> КВЛАнализ.Дата) Тогда
                      аэсОперацияКВЛ = Документы.аэсОперацияКВЛ.СоздатьДокумент();
                      аэсОперацияКВЛ.ВидОперации = Перечисления.аэсВидыОперацийКВЛ.МеханическиеИспытания;
                      аэсОперацияКВЛ.Дата = КВЛАнализ.Дата;
                      Дата1 = КВЛАнализ.Дата;
                          //ОперацииКВЛ.Анализы.

                    Для Каждого ТекПоказатель Из ТиповойАнализ.ПоказателиАнализа Цикл
                            НоваяСтрока = аэсОперацияКВЛ.Анализы.Добавить();
                            СтрокаПоказатель = ОперацииКВЛАнализы.Найти(ТекПоказатель.ПоказательАнализа,"ПоказательАнализа");
                            НоваяСтрока.ПоказательАнализа = СтрокаПоказатель.ПоказательАнализа;
                            НоваяСтрока.ЗначениеПоказателя = СтрокаПоказатель.ЗначениеПоказателя;  
                        УстановитьТипЗначенияПоказателяВСтроке(НоваяСтрока);
                        НоваяСтрока.ЕдиницаИзмерения =
                            ?(  НоваяСтрока.ПоказательАнализа.ВидРезультатаАнализа = ПланыВидовХарактеристик.ВидыРезультатовАнализаНоменклатуры.ЧислоВИнтервале
                            ИЛИ НоваяСтрока.ПоказательАнализа.ВидРезультатаАнализа = ПланыВидовХарактеристик.ВидыРезультатовАнализаНоменклатуры.Погрешность
                            ИЛИ НоваяСтрока.ПоказательАнализа.ВидРезультатаАнализа = ПланыВидовХарактеристик.ВидыРезультатовАнализаНоменклатуры.Поддиапазон,
                                НоваяСтрока.ПоказательАнализа.ЕдиницаИзмерения,
                                Неопределено);
                     аэсОперацияКВЛ.Записать();

                    КонецЦикла;
                  
                КонецЕсли;    
                    

            КонецЦикла;

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.