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

Как правильно заполнить прогаммно табличную часть

Как правильно заполнить  прогаммно табличную часть
Я
   1сЮлия
 
24.05.19 - 12:52
Добрый день! Имеется таблица ОперацииКВЛАнализы, в которой показатели сгруппированы к примеру Граница тек 340,Граница тек 350,Граница тек 370 далее Временное сопротивление 22,Временное сопротивление 23 мне нужно создать документы в цикле и заполнить их табличную часть таким образом чтобы Граница тек 340,Временное сопротивление 22 оказались в таб части документа, я понимаю что документ должен в цикле создаваться при определенном условии и заполняться таб. часть

ТиповойАнализ = Справочники.ТиповыеАнализыНоменклатуры.НайтиПоНаименованию("Механические свойства");
ОперацииКВЛАнализы = ПолучитьМехИспытания(Строка.Подразделение,Строка.Номенклатура,Строка.День);

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

  КонецЦикла;
 
 
   catena
 
1 - 24.05.19 - 12:58
"тут не могу понять какое условие  поставить чтобы у меня создало второй,третий док "
А по какому условию они должны создаваться?
   sqr4
 
2 - 24.05.19 - 12:59
(1) как я понял, док надо создавать при смене показателя.
   1сЮлия
 
3 - 24.05.19 - 13:01
Следующий документ должен соответствовоать следующей табличной часть новой Граница тек 340,
Временное сопротивление 22 это один документ ,а Граница тек 370,Временное сопротивление 21 это новый  док,как это организовать правильно?
   1сЮлия
 
4 - 24.05.19 - 13:03
но в таблице значений ОперацииКВЛАнализы = ПолучитьМехИспытания(Строка.Подразделение,Строка.Номенклатура,Строка.День); там такая таблица,которая сгруппирована по показателю  Граница тек 340, Граница тек 350,Временное сопротивление 22,Временное сопротивление 25 и тд
   catena
 
5 - 24.05.19 - 13:04
(3)Отвлекитесь от названий и сформулируйте условие абстрактно. Сейчас непонятно, почему "Временное сопротивление 22" должно быть в одном документе, а "Граница тек 370,Временное сопротивление 21" в другом.
   1сЮлия
 
6 - 24.05.19 - 13:12
Там в табличеной часть,каждого дока должно быть 5 показателей 1 документ, к нему табличная часть из 5 строк,я просто привела в пример 2 строка
1 док 
таб часть Анализы равно : Номер строки 1 "Граница тек 370,
                          Номер строки 2  Временное сопротивление 21"
след док
таб часть Анализы равно : Номер строки 1 "Граница тек 350,
                          Номер строки 2  Временное сопротивление 22"
   catena
 
7 - 24.05.19 - 13:21
(6)Отлично, теперь нужно определиться, как выглядит источник. Что значит "показатели сгруппированы"
   dka80
 
8 - 24.05.19 - 13:23
Можно через запрос, но для простоты цикл:
Границы = Новый Массив;
Сопротивление = Новый Массив;
Для Каждого Строка Из ОперацииКВЛАнализы Цикл
Если Найти(Строка.Наименование, "Граница") Тогда
Границы.Добавить(Строка.Наименование)
ИначеЕсли Найти(Строка.Наименование, "Сопротивление") Тогда
Сопротивление .Добавить(Строка.Наименование)
КонецЕсли;
КонецЦикла;

Для Сч =0 По Границы.ВГраница() Цикл
  НовыйДокумент = Документы.БлаБла.Создать();
НоваяСтрока = НовыйДокумент.Анализы.Добавить();
НоваяСтрока.Граница = Границы[Сч];
НоваяСтрока.Сопротивление = Сопротивление[0];
НовыйДокумент.Записать();
КонецЦикла;
   1сЮлия
 
9 - 24.05.19 - 13:23
Функция ПолучитьМехИспытания(Подразделение,Номенклатура,Дата)
        
    МехАнализы = Новый ТаблицаЗначений; 
    МехАнализы.Колонки.Добавить("ПоказательАнализа");
    МехАнализы.Колонки.Добавить("ЗначениеПоказателя");

    Запрос = Новый Запрос;
    Запрос.Текст = 

      "ВЫБРАТЬ
      |    СертификацияНоменклатурыАнализы.ЗначениеПоказателя КАК ЗначениеПоказателя,
      |    СертификацияНоменклатурыАнализы.ПоказательАнализа КАК ПоказательАнализа
      |ИЗ
      |    Документ.СертификацияНоменклатуры.Анализы КАК СертификацияНоменклатурыАнализы
      |ГДЕ
      |    СертификацияНоменклатурыАнализы.Ссылка.Подразделение = &Подразделение
      |    И СертификацияНоменклатурыАнализы.Ссылка.Номенклатура = &Номенклатура
      |    И СертификацияНоменклатурыАнализы.Ссылка.Дата МЕЖДУ &НачДата И &КонДата
      |    И ДЕНЬ(СертификацияНоменклатурыАнализы.Ссылка.Дата) = &Дата
      |
      |СГРУППИРОВАТЬ ПО
      |    СертификацияНоменклатурыАнализы.ЗначениеПоказателя,
      |    СертификацияНоменклатурыАнализы.ПоказательАнализа,
      |    СертификацияНоменклатурыАнализы.Ссылка,
      |    СертификацияНоменклатурыАнализы.НомерСтроки
      |
      |УПОРЯДОЧИТЬ ПО
      |    ПоказательАнализа
      |ИТОГИ ПО
      |    ПоказательАнализа,
      |    ЗначениеПоказателя" ;
    
    Запрос.УстановитьПараметр("Подразделение",Подразделение);
    Запрос.УстановитьПараметр("Номенклатура",Номенклатура);
    Запрос.УстановитьПараметр("Дата",Дата);
    Запрос.УстановитьПараметр("НачДата",НачалоПериода);
    Запрос.УстановитьПараметр("КонДата",КонецПериода);
     
    ВыборкаМехИспытания = Запрос.Выполнить();    
    
    Если  Не (ВыборкаМехИспытания.Пустой()) Тогда
           ВыборкаПоказательАнализа = ВыборкаМехИспытания.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам,"ПоказательАнализа");
    Пока ВыборкаПоказательАнализа.Следующий() Цикл 
        ПоказательАнализа=ВыборкаПоказательАнализа.ПоказательАнализа;
        ВыборкаЗначениеПоказателя = ВыборкаМехИспытания.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам,"ЗначениеПоказателя");
        Пока ВыборкаЗначениеПоказателя.Следующий() Цикл 
            НоваяСтрока = МехАнализы.Добавить();
            НоваяСтрока.ПоказательАнализа = ПоказательАнализа;
            НоваяСтрока.ЗначениеПоказателя = ВыборкаЗначениеПоказателя.ЗначениеПоказателя;
         КонецЦикла;    
     КонецЦикла;        
КонецЕсли;
 
Возврат МехАнализы;
    
КонецФункции
   1сЮлия
 
10 - 24.05.19 - 13:24
Это источник
   dka80
 
11 - 24.05.19 - 13:25
(9) зачем код? Дай таблицу
   trooba
 
12 - 24.05.19 - 13:27
(10) Выгрузить результат запроса и загрузить в табличную часть, не надо циклов
   1сЮлия
 
13 - 24.05.19 - 13:28
как мне её переслать в облако ссылку?
   Simod
 
14 - 24.05.19 - 13:40
(9) В запросе условия
[1с]
      |    И СертификацияНоменклатурыАнализы.Ссылка.Дата МЕЖДУ &НачДата И &КонДата
      |    И ДЕНЬ(СертификацияНоменклатурыАнализы.Ссылка.Дата) = &Дата
[/1с]
не дублируют друг друга?
   Simod
 
15 - 24.05.19 - 13:42
(9) Группировка также не нужна.
   1сЮлия
 
16 - 24.05.19 - 14:22
Как тут тогда
Границы = Новый Массив;
ВрСопротивление = Новый Массив;
Относительноерастяжение = Новый Массив;
Относительноесужение = Новый Массив;
Ударнаявязкость = Новый Массив;
            Для Каждого Строка Из ОперацииКВЛАнализы Цикл
                Если Найти(Строка.ПоказательАнализа, "Граница текучести, МПа") Тогда
                    Границы.Добавить(Строка.ПоказательАнализа)
                ИначеЕсли Найти(Строка.ПоказательАнализа, "Временное сопротивление") Тогда
                    ВрСопротивление.Добавить(Строка.ПоказательАнализа)
                ИначеЕсли Найти(Строка.ПоказательАнализа, "Относительное растяжение") Тогда
                    Относительноерастяжение.Добавить(Строка.ПоказательАнализа)
                ИначеЕсли Найти(Строка.ПоказательАнализа, "Относительное сужение") Тогда
                    Относительноесужение.Добавить(Строка.ПоказательАнализа)
                ИначеЕсли Найти(Строка.ПоказательАнализа, "Ударная вязкость") Тогда
                     Ударнаявязкость.Добавить(Строка.ПоказательАнализа)
                КонецЕсли;
            КонецЦикла;

            Для Сч =0 По Границы.ВГраница() Цикл
                НовыйДокумент = Документы.аэсОперацияКВЛ.СоздатьДокумент();
                НоваяСтрока = НовыйДокумент.Анализы.Добавить();
                НоваяСтрока.ПоказательАнализа =  значение сначала номер строки1 Границы[Сч],НомерСтроки2 по НомерСтоки5; 
                НоваяСтрока.ЗначениеПоказателя =тут значение

                НовыйДокумент.Записать();
            КонецЦикла;
   1сЮлия
 
17 - 24.05.19 - 14:31
Для Сч =0 По Границы.ВГраница() Цикл
                НовыйДокумент = Документы.аэсОперацияКВЛ.СоздатьДокумент();
                //НоваяСтрока = НовыйДокумент.Анализы.Добавить();

                //НоваяСтрока.ПоказательАнализа = Границы[Сч];

                //НоваяСтрока.Сопротивление = ВрСопротивление[0];

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


                    КонецЦикла;
    
            КонецЦикла; тут нужно переделать вот как
   dka80
 
18 - 24.05.19 - 16:04
Можешь выложить пример исходных данных (не тех, которые ты запросом получаешь, а тех которые в документе) и что бы ты хотела видеть?
   1сЮлия
 
19 - 26.05.19 - 12:21
Я создала в цикле докумены столько сколько разлчных значений одного показателя,потом заполнила табличную часть показателями,а терерь мне нужно перебрать в цикле строки табличной части дока и каждому показателю найти значение в таблице ОперацииКВЛАнализы,подскажите как правильно найти и присвоить значение каждой строке показателя
    ОперацииКВЛАнализы = ПолучитьМехИспытания(Строка.Подразделение,Строка.Номенклатура,Строка.День);                
            
            Границы = Новый Массив;
            
            Для Каждого Строка Из ОперацииКВЛАнализы Цикл
                    Если Найти(Строка.ПоказательАнализа, "Граница текучести, МПа") Тогда
                        Границы.Добавить(Строка.ПоказательАнализа);
                    КонецЕсли;
            КонецЦикла;    
                                              
                  Для Сч =0 По Границы.ВГраница() Цикл
                    НовыйДокумент = Документы.аэсОперацияКВЛ.СоздатьДокумент();
                    НовыйДокумент.ВидОперации = Перечисления.аэсВидыОперацийКВЛ.МеханическиеИспытания;
                                                   
                        Для Каждого ТекПоказатель Из ТиповойАнализ.ПоказателиАнализа Цикл
                        
                        НоваяСтрока = НовыйДокумент.Анализы.Добавить();
                        НоваяСтрока.ПоказательАнализа = ТекПоказатель.ПоказательАнализа;
                        УстановитьТипЗначенияПоказателяВСтроке(НоваяСтрока);
                        НоваяСтрока.ЕдиницаИзмерения =
                            ?(  НоваяСтрока.ПоказательАнализа.ВидРезультатаАнализа = ПланыВидовХарактеристик.ВидыРезультатовАнализаНоменклатуры.ЧислоВИнтервале
                            ИЛИ НоваяСтрока.ПоказательАнализа.ВидРезультатаАнализа = ПланыВидовХарактеристик.ВидыРезультатовАнализаНоменклатуры.Погрешность
                            ИЛИ НоваяСтрока.ПоказательАнализа.ВидРезультатаАнализа = ПланыВидовХарактеристик.ВидыРезультатовАнализаНоменклатуры.Поддиапазон,
                                НоваяСтрока.ПоказательАнализа.ЕдиницаИзмерения,
                                Неопределено);
                        КонецЦикла;

                        Для Каждого Строка Из ОперацииКВЛАнализы Цикл
                            Для   Стр = 1 по  НовыйДокумент.Анализы.Количество() цикл
                             реквстроки=НовыйДокумент.Анализы.Получить(Стр); 
                                 Если  Найти(Строка.ПоказательАнализа,реквстроки.ПоказательАнализа) Тогда
                                        реквстроки.ЗначениеПоказателя = Значение;
                                 КонецЕсли;    
                            КонецЦикла;    
                         КонецЦикла;
                      НовыйДокумент.Дата = ДатаДок;
                      НовыйДокумент.Записать();
    
                КонецЦикла;
   1сЮлия
 
20 - 26.05.19 - 12:40
Вот эта часть не работает 

                            Для   Стр = 0 по  НовыйДокумент.Анализы.Количество() цикл
                             реквстроки=НовыйДокумент.Анализы.Получить(Стр); 
                             
                                   Для Каждого Строка Из ОперацииКВЛАнализы Цикл
                                   Если  Найти(Строка.ПоказательАнализа,реквстроки.ПоказательАнализа) Тогда
                                        реквстроки.ЗначениеПоказателя = Строка.ЗначениеПоказателя;
                                    КонецЕсли;    
                                
                                  КонецЦикла;    
                         КонецЦикла;
   1сЮлия
 
21 - 26.05.19 - 12:41
Мне нужно получить в цикле для каждой строки своё значение показателя
   Mikeware
 
22 - 26.05.19 - 13:54
Когда у этой Юли появляются глупые вопросы - это привычно. Но когда в ее коде появляется префикс документы.аэс*** - меня это насторожило и даже, я б сказал "напрягло". Если вспомнить ее напарника Мыколу Бакланова -второй Чернобыль прям таки напрашивается....
   palsergeich
 
23 - 26.05.19 - 15:17
(22) да там по ходу реально на АЭС БД.
Дело даже не в префиксах.
   palsergeich
 
24 - 26.05.19 - 15:18
   hhhh
 
25 - 26.05.19 - 16:32
(24) да, вы поэтому повдумчивее подсказывайте, а то еще мисту обвинят.


Список тем форума
Рекламное место пустует  Рекламное место пустует
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит Тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.