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

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

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

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

maks gosplan

Помогите решить задачу. Есть регистр сведений «ЦенаПродажи» и документ «ПродажаТовара». У регистра два измерения – «Товар» и «Покупатель». На форме документа «ЦенаПродажи» кнопка команды «Пересчитать цены продажи». Задача в том, чтобы с помощью команды привести цены в форме документа в соответствии с актуальными данными в регистре. База приложена.

bsn-chita


maks gosplan

Пользователь имеет право в документе "Продажа товаров" менять цены, делая их отличными от "утверждённых" (отличными от цен регистра "ЦеныПродажи" - дата/товар/покупатель). Также он может, передумав, решить вернуть все цены в соответствие регистру ( в соответствие  "утверждённым" ценам). Как сделать вот это перезаполнение табличной части документа "Продажа товара" в соответствии с ценами регистра - "дата/товар/покупатель"?

bsn-chita

Использовал вашу функцию УстановкаЦеныПродажи. Но лучше запросом делать.

&НаКлиенте
Процедура ПересчитатьЦеныПродажи(Команда)
ПересчитатьТЧ();
КонецПроцедуры

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

maks gosplan

Спасибо. Но если в табличной части большое количество записей (несколько десятков или сотни), то это же сотни вызовов функции и обращений к базе данных? А как с помощью запроса (то есть сразу целиком заменить табличную часть формы документа?) сделать не подскажите?

alex0402

1) Получить список номенклатуры из ТЧ.
2) Получить запросом таблицу значений Номенклатура - Цена.
3) Обойти ТЧ и проставить цены из ТЗ.
Спасибо за Сказать спасибо

antoneus

&НаКлиенте
Процедура ПересчитатьЦеныПродажи(Команда)

ПересчитатьЦеныПродажиСервер()

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


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

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ЦенаПродажиСрезПоследних.Товар КАК Товар,
| ЦенаПродажиСрезПоследних.ЦенаПродажи КАК ЦенаПродажи
|ИЗ
| РегистрСведений.ЦенаПродажи.СрезПоследних(, Товар В (&Товары)) КАК ЦенаПродажиСрезПоследних";

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

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

maks gosplan


LexaK

даааа, цикл в цикле да еще и с поиском

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

попробуйте это сделать в одну строчку (обработку результата)
если помогло нажмите: Спасибо!

maks gosplan

Одной строкой - это получить из запроса таблицу значений и вставить из неё данные в табличную часть формы?

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

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

Рейтинг@Mail.ru

Поиск