Имя: Пароль:
1C
1С v8
Вопрос по работе с табличным полем в обработке формирование цен .
0 VismuT
 
12.06.23
15:59
Всем доброго дня.
УТ Казахстан 2.2. Обычные формы.
Нужно рассчитать процент прошлой наценки в обработке формирование цен . Я "написал" вот такой быдло код .
Процедура ПроцентПрошлойНаценки(Кнопка)
    
    Типцен1 = Справочники.ТипыЦенНоменклатуры.НайтиПоНаименованию("Розничная",ложь);
    Типцен2 = Справочники.ТипыЦенНоменклатуры.НайтиПоНаименованию("Закупочная",ложь);
            
    Для Каждого СтрокаТовара Из Товары Цикл    
    Запрос = Новый Запрос;
    Запрос.Текст ="ВЫБРАТЬ
                  |    ЦеныНоменклатурыСрезПоследних.Номенклатура,
                  |    ЦеныНоменклатурыСрезПоследних.ТипЦен,
                  |    ЦеныНоменклатурыСрезПоследних.Цена КАК Цена1
                  |ПОМЕСТИТЬ ТЦРозн
                  |ИЗ
                  |    РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК ЦеныНоменклатурыСрезПоследних
                  |ГДЕ
                  |    ЦеныНоменклатурыСрезПоследних.Номенклатура = &Номенклатура
                  |    И ЦеныНоменклатурыСрезПоследних.ТипЦен = &ТипЦен1
                  |;
                  |
                  |////////////////////////////////////////////////////////////////////////////////
                  |ВЫБРАТЬ
                  |    ЦеныНоменклатурыСрезПоследних.Номенклатура,
                  |    ЦеныНоменклатурыСрезПоследних.ТипЦен КАК ТипЦен2,
                  |    ЦеныНоменклатурыСрезПоследних.Цена КАК Цена2,
                  |    ТЦРозн.Номенклатура КАК Номенклатура1,
                  |    ТЦРозн.ТипЦен,
                  |    ТЦРозн.Цена1
                  |ИЗ
                  |    РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК ЦеныНоменклатурыСрезПоследних
                  |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТЦРозн КАК ТЦРозн
                  |        ПО ЦеныНоменклатурыСрезПоследних.Номенклатура = ТЦРозн.Номенклатура
                  |ГДЕ
                  |    ЦеныНоменклатурыСрезПоследних.Номенклатура = &Номенклатура
                  |    И ЦеныНоменклатурыСрезПоследних.ТипЦен = &ТипЦен2";
    
    Запрос.УстановитьПараметр("Номенклатура",СтрокаТовара.Номенклатура);
    Запрос.УстановитьПараметр("Типцен1",Типцен1);
    Запрос.УстановитьПараметр("Типцен2",Типцен2);
    
    РезультатЗапроса = Запрос.Выполнить();
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        
        СтрокаТовара.Цена1 = ВыборкаДетальныеЗаписи.Цена1;
        СтрокаТовара.Цена2 = ВыборкаДетальныеЗаписи.Цена2;
        
    КонецЦикла;
    
    
    СтрокаТовара.ПрошлыйПроцентНаценки = ?(СтрокаТовара.Цена2=0,0,СтрокаТовара.Цена1/СтрокаТовара.Цена2 * 100-100);
    КонецЦикла;    
    КонецПроцедуры
Процедура отрабатывает нормально. Но мне кажется ,что чего-то не хватает.
Можете подсказать , как еще можно переписать этот код? Либо чего нужно добавить?
1 Волшебник
 
12.06.23
16:04
>> Но мне кажется ,что чего-то не хватает.

Вам кажется или чего-то не хватает? Мы должны догадаться, что Вам там кажется?
2 Волшебник
 
12.06.23
16:07
Может Вас гложет совесть, что Вы берёте СрезПоследних по всему регистру? Для больших регистров может долго отрабатывать, например, несколько часов.
3 Волшебник
 
12.06.23
16:14
Вот вам идеи:

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

---

МассивТиповЦен = ...
Запрос.УстановитьПараметр("Номенклатура",СтрокаТовара.Номенклатура);
Запрос.УстановитьПараметр("ТипыЦен",МассивТиповЦен);

---

Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
   Если ВыборкаДетальныеЗаписи.ТипЦен = Розничная Тогда
    ...
   Иначе
    ...
4 VismuT
 
16.06.23
13:07
Офф (3) Спасибо! Вы так хорошо объясняете. Прочел в вашем профиле ,что Вы автор книги. Где ее можно официально приобрести?
5 Волшебник
 
16.06.23
13:08
(4) Тираж уже давно распродан. Ищите в интернетах
AdBlock убивает бесплатный контент. 1Сергей