Вход | Регистрация

1С:Предприятие :: 1С:Предприятие 8 общая

Как избавиться от запроса в цикле?

Как избавиться от запроса в цикле?
Я
   Slavik_hak
 
06.10.17 - 09:16
Подскажите как избавиться от запроса в цикле, в 1с еще новичок, сильно не пинайте)
&НаСервере
Процедура  ЗаполнитьНаСервере(НовыйОбъект)
    
    Товары = НовыйОбъект.Товары;
    Массив = Новый массив(); 
    Для Каждого Строка из Товары Цикл

        ПлановаяЦена = ПолучитьЗначениеЦеныПродажи(Строка.Номенклатура, НовыйОбъект.Ссылка.Дата, НовыйОбъект.Ссылка.Организация);        
        Строка.Себестоимость = Строка.Количество * ПлановаяЦена;
    КонецЦикла;

КонецПроцедуры

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

    ВыборкаДанных = Запрос.Выполнить().Выбрать();
    
    Если ВыборкаДанных.Следующий() Тогда
        ЦенаПродажи = ВыборкаДанных.Цена;
    Иначе 
        ЦенаПродажи = 0;
    КонецЕсли;
    
    ЦенаПродажиМодифицирована = Ложь;
    
    Возврат ЦенаПродажи;
    
КонецФункции
 
 
   FIXXXL
 
1 - 06.10.17 - 09:18
ты близок к истине, ты уже написал  Массив = Новый массив();
осталось в массив сунуть всю номенклатуру и передать параметром в запрос, получить таблицу цен и в цикле искать уже в таблице
   FIXXXL
 
2 - 06.10.17 - 09:19
вот только запрос еще бы переписать на регистры
   Antony8x
 
3 - 06.10.17 - 09:24
+1 Запрос за цикл ко всей коллекции "Товары", выгрузить в ТЗ, далее в цикле искать цену методом НайтиСтроки
   igorPetrov
 
4 - 06.10.17 - 09:38
(0) Бред какой-то, почти всё, что написано.
   dezss
 
5 - 06.10.17 - 09:41
МассивТоваров = НовыйОбъект.Товары.ВыгрузитьКолонку("Номенклатура");
И его пихаешь в запрос, только в запросе условие 
ОтчетПроизводстваЗаСменуПродукция.Номенклатура В (&Номенклатура)

И в ВЫБРАТЬ номенклатуру добавь.
   Рэйв
 
6 - 06.10.17 - 10:01
можно сразу отправить таб часть в запрос и потом загрузить чтобы не мучиться потом с .Найти и т.д.
Как пример подстановка цен в расходную накладную:
//------


Колонки="";
Для Каждого Кол Из Ссылка.Метаданные().ТабличныеЧасти.Товары.Реквизиты Цикл
    Если Кол.Имя="Цена" Тогд//цена придет из регистра

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

тРез=Рез.Выгрузить().Выгрузить();
Товары.Загрузить(тРез);
   Vaflya
 
7 - 06.10.17 - 10:02
Соединением таблицы объекта и и таблицы ссылок(регистра)
   Фортовый
 
8 - 06.10.17 - 10:06
можно вопрос .а где у вас запрос в цикле?
   Vaflya
 
9 - 06.10.17 - 10:07
"Выбрать ТЧ.Номенклатура Поместить ВТ Из &ТЧ Как ТЧ; Выбрать ВТ.Номенклатура, Регистр.Цена ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних Как Регистр
По ВТ.Номенклатура = Регистр.Номенклатура"
   Фортовый
 
10 - 06.10.17 - 10:07
все увидел . делайте без  функции напрямую
 
 Рекламное место пустует
   Vaflya
 
11 - 06.10.17 - 10:08
Ну и параметры задать - &ТЧ - товары, организация и все что еще нужно
   Фортовый
 
12 - 06.10.17 - 10:08
умудренный код
   Vaflya
 
13 - 06.10.17 - 10:09
(12)да обычный код начинающего, главное что работает)
   Dzenn
 
14 - 06.10.17 - 10:10
(0) Берёшь и избавляешься.

А по факту — номенклатуру в массив надо.
А по ещё большему факту — хранить себестоимость в документе это зашквар.
   Slavik_hak
 
15 - 07.10.17 - 02:13
Всем спасибо, все получилось))
Первый раз создавал тему, и удивился, что так много откликов))
   mistеr
 
16 - 07.10.17 - 08:51
(0) А тебе точно нужна первая попавшаяся цена за месяц?
   Otark
 
17 - 07.10.17 - 08:56
(15)Вопрос простой, повод пофлудить.
   trooba
 
18 - 07.10.17 - 09:25
(0) Не использовать запрос в цикле
   Slavik_hak
 
19 - 07.10.17 - 09:45
(16) да, предполагается, что документ за месяц один

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