Имя: Пароль:
1C
1С v8
КАК учесть два условия в коде
0 НАТалья Голубева
 
29.06.16
10:36
Добрый день .. я по все тому же коду.... В части кода
  Если ЦенаЗакупки=Выборка.ТипЦен Тогда
          Стоим = Выборка.Цена;
         Иначе       Стоим=0;
  КонецЕсли;
В этом коде идет сначала сравнение, если ЦенаЗакупки совпадает с Выборка.ТипЦен тогда Стоим=выборкаЦена Иначе Стоим=0..... Но ЭТО Иначе работает не совсем корректно ... Если Есть другой тип цен то и с этим топом цен добавляет  строку в ТЧ.... А этого мне не надо... Надо чтобы добавилась строка с топом цен  ЦенаЗакупки, а если у материала нет этого типа цены то Стоим=0...Если я добавила в параметры и укажу нужный мне тип цен, то выборка осуществится по материалам у которога есть этот тип цены а если нет этого тогда мне не добавит строку материала  Стим=0... Подскажите пож. как выйти из этой ситуации.. Вот полный код...

Процедура ЗаполнитьПоЦенеЗакупкиМатериалы(Кнопка)

    
Запрос = Новый Запрос;
Запрос.Текст =

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

Запрос.УстановитьПараметр("Дата",    Дата);     //Дата
Запрос.УстановитьПараметр("ЭтотДокумент", ЭтотОбъект.Ссылка);


Результат = Запрос.Выполнить();
ТЗ=Результат.Выгрузить();
ВыбрЭлем=ТЗ.ВыбратьСтроку();
Выборка = Запрос.Выполнить().Выбрать();

всематериалы.Очистить();

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


КонецЦикла;

таблвсехматериалов = всематериалы.Выгрузить();
таблвсехматериалов.Свернуть("материал,ЕдиницаИзмерения,ЦенаМатериалов, ГотоваяПродукция, Сумма, КолГП", "Количество");
всематериалы.Загрузить(таблвсехматериалов);

КонецПроцедуры
1 itlikbez
 
29.06.16
10:42
(0) Поставить условие на тип цен не в "ГДЕ" а в "ПО".
2 ovrfox
 
29.06.16
10:50
ВЫБРАТЬ
|    ЦеныНоменклатурыСрезПоследних.ТипЦен,
|    ЕстьNull(ЦеныНоменклатурыСрезПоследних.Цена,0),
|    ЦеныНоменклатурыСрезПоследних.Номенклатура КАК Номенклатура,
|    РасчетСебестоимостивсематериалы.Материал КАК Материал,
|    РасчетСебестоимостивсематериалы.ЕдиницаИзмерения КАК ЕДИЗМ,
|    РасчетСебестоимостивсематериалы.Количество,
|    РасчетСебестоимостивсематериалы.КолГП,
|    РасчетСебестоимостивсематериалы.ГотоваяПродукция КАК ГП
|ИЗ
|    Документ.РасчетСебестоимости.всематериалы КАК РасчетСебестоимостивсематериалы
|        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК ЦеныНоменклатурыСрезПоследних
|        ПО РасчетСебестоимостивсематериалы.Материал = ЦеныНоменклатурыСрезПоследних.Номенклатура
|            И РасчетСебестоимостивсематериалы.ЕдиницаИзмерения = ЦеныНоменклатурыСрезПоследних.ЕдиницаИзмерения
|            И ЦеныНоменклатурыСрезПоследних.ТипЦен = &ВыбТипЦены
|ГДЕ
|    РасчетСебестоимостивсематериалы.Ссылка = &ЭтотДокумент
3 ovrfox
 
29.06.16
10:53
(2) Изменив запрос таким образом, Вам уже не нужно пересчитывать цену в коде, просто используйте ее.
PS: Не забудьте добавить в запрос параметр содержащий тип цены. Или Его можно заменить на "Значение(Справчоник.ТипыЦен.ЦенаЗакупки)"
4 НАТалья Голубева
 
29.06.16
11:28
Все ОК ..получилось...  ovrfox-вам отдельное спасибо супер...