1С Комплексная автоматизация 2.0
Поставлена задача в ЗаказПоставщику созданному на основании ЗаказаКлиента загрузить Цены продажи, для того чтобы видеть предварительную маржу. Создал процедуру запускаемую по кнопке, но результат запроса выходит пустой, хотя в конструкторе запросов все сделано правильно.
Как правильно запросить цены продажи из документа основания?
Поставлена задача в ЗаказПоставщику созданному на основании ЗаказаКлиента загрузить Цены продажи, для того чтобы видеть предварительную маржу. Создал процедуру запускаемую по кнопке, но результат запроса выходит пустой, хотя в конструкторе запросов все сделано правильно.
&НаСервере
Процедура МаржаНаСервере()
Для Каждого СтрокиТовары из Объект.Товары Цикл
НаименованиеНоменклатура=СтрокиТовары.Номенклатура;
Сообщить (НаименованиеНоменклатура);
Сообщить (Объект.ДокументОснование.Номер);
ЗапросЦены=Новый Запрос;
ЗапросЦены.УстановитьПараметр("Номер",Объект.ДокументОснование.Номер);
ЗапросЦены.УстановитьПараметр("Наименование",НаименованиеНоменклатура);
ЗапросЦены.Текст= "ВЫБРАТЬ
| ЗаказКлиентаТовары.Цена
|ИЗ
| Документ.ЗаказКлиента.Товары КАК ЗаказКлиентаТовары
|ГДЕ
| ЗаказКлиентаТовары.Ссылка.Номер = &Номер
| И ЗаказКлиентаТовары.Номенклатура.Наименование = &Наименование";
ВыборкаЦен=ЗапросЦены.Выполнить().Выбрать();
СтрокиТовары.ЦенаПродажи=ВыборкаЦен[0].Цена;
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура Маржа(Команда)
МаржаНаСервере();
КонецПроцедуры
ПоказатьКак правильно запросить цены продажи из документа основания?
По теме из базы знаний
- Всякие полезности
- Помощник выгрузки начальных данных из ЗУП 2.5 в ЗУП 3.0
- Немного про СКД. Характеристики и проверка пустого отчета
- Соответствие пользователей Информационной базы и Актив директория
- Обновление нетиповой конфигурации с приведением к типовой и выносом всех доработок в расширение. Часть/Способ №1
Найденные решения
Вот так попробуй, но запрос в цикле не лучшее решение
Для Каждого СтрокиТовары из Объект.Товары Цикл
ЗапросЦены=Новый Запрос;
ЗапросЦены.УстановитьПараметр("Основание",Объект.ДокументОснование);
ЗапросЦены.УстановитьПараметр("Номенклатура",СтрокиТовары.Номенклатура);
ЗапросЦены.Текст= "ВЫБРАТЬ
| ЗаказКлиентаТовары.Цена
|ИЗ
| Документ.ЗаказКлиента.Товары КАК ЗаказКлиентаТовары
|ГДЕ
| ЗаказКлиентаТовары.Ссылка = &Основание
| И ЗаказКлиентаТовары.Номенклатура = &Номенклатура";
ВыборкаЦен=ЗапросЦены.Выполнить().Выбрать();
СтрокиТовары.ЦенаПродажи=ВыборкаЦен[0].Цена;
КонецЦикла;
ПоказатьОстальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
НаименованиеНоменклатура у тебя ссылка и это условие не работает
И ЗаказКлиентаТовары.Номенклатура.Наименование = &Наименование
И ЗаказКлиентаТовары.Номенклатура.Наименование = &Наименование
Вот так попробуй, но запрос в цикле не лучшее решение
Для Каждого СтрокиТовары из Объект.Товары Цикл
ЗапросЦены=Новый Запрос;
ЗапросЦены.УстановитьПараметр("Основание",Объект.ДокументОснование);
ЗапросЦены.УстановитьПараметр("Номенклатура",СтрокиТовары.Номенклатура);
ЗапросЦены.Текст= "ВЫБРАТЬ
| ЗаказКлиентаТовары.Цена
|ИЗ
| Документ.ЗаказКлиента.Товары КАК ЗаказКлиентаТовары
|ГДЕ
| ЗаказКлиентаТовары.Ссылка = &Основание
| И ЗаказКлиентаТовары.Номенклатура = &Номенклатура";
ВыборкаЦен=ЗапросЦены.Выполнить().Выбрать();
СтрокиТовары.ЦенаПродажи=ВыборкаЦен[0].Цена;
КонецЦикла;
Показать
Полагаю, кодом
вы предполагаете обратиться к первой строке таблицы значений? Тогда и нужно использовать соответствующий метод для получения данных из результата запроса.
Но это так, цветочки. Ягодки в том, что вы генерите несколько запросов согласно кол-ву строк в ТЧ. И для сопоставления используете ненадежные данные - например, ищете по номеру документа. А если номер - периодический и будет куча документов с таким номером?...
СтрокиТовары.ЦенаПродажи=ВыборкаЦен[0].Цена;
вы предполагаете обратиться к первой строке таблицы значений? Тогда и нужно использовать соответствующий метод для получения данных из результата запроса.
ВыборкаЦен=ЗапросЦены.Выполнить().Выгрузить(); // вместо Выбрать(...) используйте Выгрузить(...)
Но это так, цветочки. Ягодки в том, что вы генерите несколько запросов согласно кол-ву строк в ТЧ. И для сопоставления используете ненадежные данные - например, ищете по номеру документа. А если номер - периодический и будет куча документов с таким номером?...
Спасибо, помогло.
Я понимаю что запрос в цикле не лучшее решение, но других вариантов я пока не знаю ((.
Как бы Вы реализовали данную задачу?
Я понимаю что запрос в цикле не лучшее решение, но других вариантов я пока не знаю ((.
Как бы Вы реализовали данную задачу?
Конфигурацию такую я незнаю, но
Открой процедуру ОбработкаЗаполнения документа ЗаказПоставщику, там наверняка уже есть цикл подобный
Добавь туда
Открой процедуру ОбработкаЗаполнения документа ЗаказПоставщику, там наверняка уже есть цикл подобный
Для Каждого ТекСтрока Из ДанныеЗаполнения.Товары Цикл
НоваяСтрока = Товары.Добавить();
НоваяСтрока.Количество = ТекСтрока .Количество;
НоваяСтрока.Номенклатура = ТекСтрока .Номенклатура;
.........
КонецЦикла;
Добавь туда
НоваяСтрока.Цена = ТекСтрока .Цена;
Запрос в цикле делать НЕЛЬЗЯ!!! Это нагружает систему! А если 1000 строк в документе?Нужно попробовать альтернативное решение одним запросом. Выбираете из заказа покупателя номенклатуру и цену, помещаете в виртуальную таблицу, далее из текущего документа номенклатуру, устанавливаете связь по ней, необходимые условия. В итоговую таблицу номенклатура из заказа поставщика, цены из заказа покупателя. Далее выборку подгружаете в необходимое место. Думаю как-то так, и все должно получиться
Внимание! Тема сдана в архив
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот