Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Проблема с автоподстановкой значений в ТЧ Документа.

Проблема с автоподстановкой значений в ТЧ Документа.
Я
   kep12377
 
12.11.21 - 21:18
Задача такова: При Изменении Реквизита "ВидЦены" в ТЧ Документа должна автоматически подставляться Цена из регистра. Проблема в том, что цена подставляется  только в 1 строке ТЧ, а остальные остаются неизменчивы. Help me, please)

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

&НаКлиенте
Процедура ВидЦеныПриИзменении(Элемент)    
    ВидЦены = Объект.ВидЦены;
    ТД = Элементы.Товары.ТекущиеДанные;
    ТД.Цена = ВидЦеныПриИзмененииНаСервере(ТД.Номенклатура,ВидЦены);    
КонецПроцедуры
   asady
 
1 - 12.11.21 - 21:49
(0) молодец!
Особенно порадовало
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
            Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
                Возврат ВыборкаДетальныеЗаписи.Цена;
            КонецЦикла;     

Как ты думаешь твой цикл обхода выборки сколько раз обернется?
   asady
 
2 - 12.11.21 - 21:52
(0) запросом получи цены по всем товарам по выбранному типу цен
потом циклом беги выборке и ищи в таблице товаров строки с номенклатурой
и устанавливай в этих строках цену.
   vicof
 
3 - 12.11.21 - 23:01
+(2) Только не по всем товарам, а по товарам в ТЧ
   серый КТУЛХУ
 
4 - 13.11.21 - 00:00
по одной номенклатуре попросил - по одной и получил.
   kep12377
 
5 - 13.11.21 - 19:33
Вроде бы получил цены по всем товарам по выбранному типу цен. Дальше не подъёмно. Объясните, пожалуйста


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

&НаКлиенте
Процедура ВидЦеныПриИзменении(Элемент)    
    ВидЦены = Объект.ВидЦены;
    ТД = Элементы.Товары.ТекущиеДанные;
    ТД.Цена = ВидЦеныПриИзмененииНаСервере(ВидЦены,ТД.Номенклатура);    
КонецПроцедуры
   серый КТУЛХУ
 
6 - 13.11.21 - 21:04
1) добавь в запрос реквизит Товар виртуальной таблицы регистра типа "ЦеныНоменклатурыСрезПоследних.Товар КАК Товар,"
2) собери товары в массив - и передай в запрос в параметр Товары для фильтре для виртуальной таблицы регистра, из которой выбраешь типа "ИЗ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, ВидЦены = &ВидЦены И Товар В (&Товары)) КАК ЦеныНоменклатурыСрезПоследних"
3) при выборке результатов по каждому(!) ВыборкаДетальныеЗаписи.Товар находи в ТЧ строку с таким товаром - и в этой строке(!!) устанавливай .Цена = ВыборкаДетальныеЗаписи.Цена
и эцсамое. изучи наконец любой язык программирования и что такое вообще "алгоритмы".
   серый КТУЛХУ
 
7 - 13.11.21 - 23:42
п.2: "собери Товары табличной части в массив"
   Droning1C
 
8 - 14.11.21 - 00:58
Почитай в синтакс-помощнике про Возврат. Твой код отрабатывает ровно так, как ты заказал) Ты должен вернуть не только первую строку из выборки, а всю коллекцию.
   SuperMario
 
9 - 14.11.21 - 09:46
(1) а меня вот это все  совсем не радует.
Автору нужно идти учить мат. чась. А он , вместо этого, в каком-то решение подобный код пошел писать.

Список тем форума
 
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.