|
Как избавиться от запроса в цикле? | ☑ | ||
---|---|---|---|---|
0
Slavik_hak
06.10.17
✎
09:16
|
Подскажите как избавиться от запроса в цикле, в 1с еще новичок, сильно не пинайте)
&НаСервере Процедура ЗаполнитьНаСервере(НовыйОбъект) Товары = НовыйОбъект.Товары; Массив = Новый массив(); Для Каждого Строка из Товары Цикл ПлановаяЦена = ПолучитьЗначениеЦеныПродажи(Строка.Номенклатура, НовыйОбъект.Ссылка.Дата, НовыйОбъект.Ссылка.Организация); Строка.Себестоимость = Строка.Количество * ПлановаяЦена; КонецЦикла; КонецПроцедуры &НаСервере Функция ПолучитьЗначениеЦеныПродажи(Номенклатура, Дата, Организация) Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ОтчетПроизводстваЗаСменуПродукция.ПлановаяСтоимость КАК Цена |ИЗ | Документ.ОтчетПроизводстваЗаСмену.Продукция КАК ОтчетПроизводстваЗаСменуПродукция |ГДЕ | ОтчетПроизводстваЗаСменуПродукция.Ссылка.Организация = &Организация | И ОтчетПроизводстваЗаСменуПродукция.Номенклатура = &Номенклатура | И ОтчетПроизводстваЗаСменуПродукция.Ссылка.Дата МЕЖДУ &ДатаНач И &ДатаКон"; Запрос.УстановитьПараметр("Организация", Организация); Запрос.УстановитьПараметр("Номенклатура", Номенклатура); Запрос.УстановитьПараметр("ДатаНач", НачалоМесяца(Дата)); Запрос.УстановитьПараметр("ДатаКон", КонецМесяца(Дата)); ВыборкаДанных = Запрос.Выполнить().Выбрать(); Если ВыборкаДанных.Следующий() Тогда ЦенаПродажи = ВыборкаДанных.Цена; Иначе ЦенаПродажи = 0; КонецЕсли; ЦенаПродажиМодифицирована = Ложь; Возврат ЦенаПродажи; КонецФункции |
|||
1
FIXXXL
06.10.17
✎
09:18
|
ты близок к истине, ты уже написал Массив = Новый массив();
осталось в массив сунуть всю номенклатуру и передать параметром в запрос, получить таблицу цен и в цикле искать уже в таблице |
|||
2
FIXXXL
06.10.17
✎
09:19
|
вот только запрос еще бы переписать на регистры
|
|||
3
Antony8x
06.10.17
✎
09:24
|
+1 Запрос за цикл ко всей коллекции "Товары", выгрузить в ТЗ, далее в цикле искать цену методом НайтиСтроки
|
|||
4
igorPetrov
06.10.17
✎
09:38
|
(0) Бред какой-то, почти всё, что написано.
|
|||
5
dezss
06.10.17
✎
09:41
|
МассивТоваров = НовыйОбъект.Товары.ВыгрузитьКолонку("Номенклатура");
И его пихаешь в запрос, только в запросе условие ОтчетПроизводстваЗаСменуПродукция.Номенклатура В (&Номенклатура) И в ВЫБРАТЬ номенклатуру добавь. |
|||
6
Рэйв
06.10.17
✎
10:01
|
можно сразу отправить таб часть в запрос и потом загрузить чтобы не мучиться потом с .Найти и т.д.
Как пример подстановка цен в расходную накладную: //------ Колонки=""; Для Каждого Кол Из Ссылка.Метаданные().ТабличныеЧасти.Товары.Реквизиты Цикл Если Кол.Имя="Цена" Тогда//цена придет из регистра Продолжить; КонецЕсли; Колонки=Колонки+" |вт."+Кол.Имя+","; КонецЦикла; тТовары=Товары.Выгрузить(); З=Новый Запрос; З.Текст="Выбрать * Поместить вт Из &т КАК т; ВЫБРАТЬ вт.Номенклатура,"+Колонки+" | ЦеныНоменклатурыСрезПоследних.Цена |ИЗ | вт КАК вт | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Д, ТипЦен = ЗНАЧЕНИЕ(Справочник.ТипыЦенНоменклатуры.Прайс11)) КАК ЦеныНоменклатурыСрезПоследних | ПО вт.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура"; З.УстановитьПараметр("т",тТовары); З.УстановитьПараметр("Д",Дата); тРез=Рез.Выгрузить().Выгрузить(); Товары.Загрузить(тРез); |
|||
7
Vaflya
06.10.17
✎
10:02
|
Соединением таблицы объекта и и таблицы ссылок(регистра)
|
|||
8
Фортовый
06.10.17
✎
10:06
|
можно вопрос .а где у вас запрос в цикле?
|
|||
9
Vaflya
06.10.17
✎
10:07
|
"Выбрать ТЧ.Номенклатура Поместить ВТ Из &ТЧ Как ТЧ; Выбрать ВТ.Номенклатура, Регистр.Цена ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних Как Регистр
По ВТ.Номенклатура = Регистр.Номенклатура" |
|||
10
Фортовый
06.10.17
✎
10:07
|
все увидел . делайте без функции напрямую
|
|||
11
Vaflya
06.10.17
✎
10:08
|
Ну и параметры задать - &ТЧ - товары, организация и все что еще нужно
|
|||
12
Фортовый
06.10.17
✎
10:08
|
умудренный код
|
|||
13
Vaflya
06.10.17
✎
10:09
|
(12)да обычный код начинающего, главное что работает)
|
|||
14
Dzenn
гуру
06.10.17
✎
10:10
|
(0) Берёшь и избавляешься.
А по факту — номенклатуру в массив надо. А по ещё большему факту — хранить себестоимость в документе это зашквар. |
|||
15
Slavik_hak
07.10.17
✎
02:13
|
Всем спасибо, все получилось))
Первый раз создавал тему, и удивился, что так много откликов)) |
|||
16
mistеr
07.10.17
✎
08:51
|
(0) А тебе точно нужна первая попавшаяся цена за месяц?
|
|||
17
Otark
07.10.17
✎
08:56
|
(15)Вопрос простой, повод пофлудить.
|
|||
18
trooba
07.10.17
✎
09:25
|
(0) Не использовать запрос в цикле
|
|||
19
Slavik_hak
07.10.17
✎
09:45
|
(16) да, предполагается, что документ за месяц один
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |