Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
25 ноя 2024, 10:08

Перезаполнение цен в форме документа в соответствии с данными регистра

Автор maks gosplan, 05 мар 2019, 09:06

0 Пользователей и 1 гость просматривают эту тему.

antoneus

ок)

&НаСервере
Функция ПересчитатьЦеныПродажиСервер()

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

Запрос.УстановитьПараметр("ПроданныеТовары", Объект.ПроданныйТовар.Выгрузить(, "ПроданныйТовар, КоличествоПроданногоТовара"));
Запрос.УстановитьПараметр("Покупатель", Объект.Покупатель);
Объект.ПроданныйТовар.Загрузить(Запрос.Выполнить().Выгрузить())

КонецФункции

LexaK

уже гораздо лучше! усложняем задачку
а теперь представьте, менеджер продает какие-то товары, забивает свои цены, рассчитывается сумма,
а в РС.ЦенаПродажи не на все продаваемые товары есть цена,
и затем менеджер нажимает кнопку пересчитать цены,
Что произойдет с суммой товара по которой нет цены в РС.ЦенаПродажи ?
как допилить запрос что бы осталась цена/сумма которую ввел менеджер ?
если помогло нажмите: Спасибо!

antoneus

В постановке задачи такого нет, но как скажете, сэнсэй)

&НаСервере
Функция ПересчитатьЦеныПродажиСервер()

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

Запрос.УстановитьПараметр("ПроданныеТовары", Объект.ПроданныйТовар.Выгрузить());
Запрос.УстановитьПараметр("Покупатель", Объект.Покупатель);
Объект.ПроданныйТовар.Загрузить(Запрос.Выполнить().Выгрузить())

КонецФункции

LexaK

ЦитироватьВ постановке задачи такого нет,
в постановке конечно всего этого и много другого не будет, но в том то и ценность настоящего/хорошего разработчика что они должен сразу предусмотреть кучу пограничных условий.
а по поводу запроса можно сделать немного проще

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


Добавлено: 05 мар 2019, 14:15


да, вот еще одно условие которого нет в постановке
Допустим менеджер наводит порядок в документах недельной давности? (за неделю цены изменились)
поэтому в срез последних нужно передать дату документа
если помогло нажмите: Спасибо!

alex0402

Цитата: maks gosplan от 05 мар 2019, 13:20Одной строкой - это получить из запроса таблицу значений и вставить из неё данные в табличную часть формы?

нет. тут можно обойтись одним циклом. Зачем процессор мучить?
Добавлено: 05 мар 2019, 15:08


если вы не подрабатываете на Intel/AMD.
Спасибо за Сказать спасибо

Теги: регистры 

Похожие темы (5)

Рейтинг@Mail.ru

Поиск