Добрый день и Слава Украине! Задача - получить в запросе сумму документа в выбранной валюте по курсу на дату документа. Регистр сведений КурсыВалют, периодичность в пределах дня, независимый.
Валюта = Справочники.Валюты.НайтиПоНаименованию("usd",Истина); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ЗаказПокупателя.СуммаДокумента, | ЗаказПокупателя.Дата КАК Дата1, | ЗаказПокупателя.Ссылка, | НАЧАЛОПЕРИОДА(ЗаказПокупателя.Дата, ДЕНЬ) КАК ДАТА, | ЗаказПокупателя.СуммаДокумента / (КурсыВалютСрезПервых.Курс / КурсыВалютСрезПервых.Кратность) КАК ВВалюте |ИЗ | РегистрСведений.КурсыВалют.СрезПервых(, Валюта = &Валюта) КАК КурсыВалютСрезПервых | ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаказПокупателя КАК ЗаказПокупателя | ПО (НАЧАЛОПЕРИОДА(ЗаказПокупателя.Дата, ДЕНЬ) = КурсыВалютСрезПервых.Период) |ГДЕ | ЗаказПокупателя.Дата МЕЖДУ &НачПериода И &КонПериода";
Vofka @ Сегодня, 9:01
, Спасибо, инфа интересная и нужная. Но есть одно но. Я с начала решил упростить задачу, чтобы было понятнее, чего я хочу, но видимо не получится. Есть отчет на базе универсального отчета с таким листингом запроса в начальных настройках. Внимание большой запрос...
ТекстЗапроса = "ВЫБРАТЬ РАЗРЕШЕННЫЕ | ПродажиОбороты.ДокументПродажи.Ответственный КАК Ответственный, | ПродажиОбороты.Подразделение КАК Подразделение, | ПродажиОбороты.Контрагент КАК Контрагент, | ПродажиОбороты.ЗаказПокупателя КАК ЗаказПокупателя, | ПродажиОбороты.Номенклатура КАК Номенклатура, | ПРЕДСТАВЛЕНИЕ(ПродажиОбороты.ЗаказПокупателя.Ответственный) КАК ОтветственныйПредставление, | ПРЕДСТАВЛЕНИЕ(ПродажиОбороты.Подразделение), | ПРЕДСТАВЛЕНИЕ(ПродажиОбороты.Контрагент), | ПРЕДСТАВЛЕНИЕ(ПродажиОбороты.ЗаказПокупателя), | ПРЕДСТАВЛЕНИЕ(ПродажиОбороты.Номенклатура), | ПродажиОбороты.КоличествоОборот * ЕСТЬNULL(ПродажиОбороты.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент, 1) / ЕСТЬNULL(ПродажиОбороты.Номенклатура.ЕдиницаДляОтчетов.Коэффициент, 1) КАК КоличествоЕдиницОтчетовОборот, | ПродажиОбороты.СтоимостьОборот / ВЫБОР | КОГДА КурсыВалютСрезПоследних.Кратность = 0 | ТОГДА 1 | ИНАЧЕ КурсыВалютСрезПоследних.Курс / КурсыВалютСрезПоследних.Кратность | КОНЕЦ КАК СтоимостьОборот, | ЕСТЬNULL(ТаблицаРегистраПродажиСебестоимость.СтоимостьОборот / ВЫБОР | КОГДА КурсыВалютСрезПоследних.Кратность = 0 | ТОГДА 1 | ИНАЧЕ КурсыВалютСрезПоследних.Курс / КурсыВалютСрезПоследних.Кратность | КОНЕЦ, 0) КАК Себестоимость0, | ПродажиОбороты.КоличествоОборот * (ЦеныНоменклатуры1.Цена / ЦеныНоменклатуры1.ЕдиницаИзмерения.Коэффициент) * ПродажиОбороты.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент * (КурсыВалют1.Курс / КурсыВалют1.Кратность) / (УпрВалюты.Курс / УпрВалюты.Кратность) * &КоэффициентБазовогоТипаЦен1 / ВЫБОР | КОГДА КурсыВалютСрезПоследних.Кратность = 0 | ТОГДА 1 | ИНАЧЕ КурсыВалютСрезПоследних.Курс / КурсыВалютСрезПоследних.Кратность | КОНЕЦ КАК Себестоимость1, | ПродажиОбороты.КоличествоОборот * (ЦеныНоменклатуры2.Цена / ЦеныНоменклатуры2.ЕдиницаИзмерения.Коэффициент) * ПродажиОбороты.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент * (КурсыВалют2.Курс / КурсыВалют2.Кратность) / (УпрВалюты.Курс / УпрВалюты.Кратность) * &КоэффициентБазовогоТипаЦен2 / ВЫБОР | КОГДА КурсыВалютСрезПоследних.Кратность = 0 | ТОГДА 1 | ИНАЧЕ КурсыВалютСрезПоследних.Курс / КурсыВалютСрезПоследних.Кратность | КОНЕЦ КАК Себестоимость2, | ВЫБОР | КОГДА &ПоТипамЦен | ТОГДА ВЫБОР | КОГДА ЕСТЬNULL(ЦеныНоменклатуры1.Цена, 0) > 0 | ТОГДА ПродажиОбороты.КоличествоОборот * (ЦеныНоменклатуры1.Цена / ЦеныНоменклатуры1.ЕдиницаИзмерения.Коэффициент) * ПродажиОбороты.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент * (КурсыВалют1.Курс / КурсыВалют1.Кратность) / (УпрВалюты.Курс / УпрВалюты.Кратность) * &КоэффициентБазовогоТипаЦен1 / ВЫБОР | КОГДА КурсыВалютСрезПоследних.Кратность = 0 | ТОГДА 1 | ИНАЧЕ КурсыВалютСрезПоследних.Курс / КурсыВалютСрезПоследних.Кратность | КОНЕЦ | ИНАЧЕ ПродажиОбороты.КоличествоОборот * (ЦеныНоменклатуры2.Цена / ЦеныНоменклатуры2.ЕдиницаИзмерения.Коэффициент) * ПродажиОбороты.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент * (КурсыВалют2.Курс / КурсыВалют2.Кратность) / (УпрВалюты.Курс / УпрВалюты.Кратность) * &КоэффициентБазовогоТипаЦен2 / ВЫБОР | КОГДА КурсыВалютСрезПоследних.Кратность = 0 | ТОГДА 1 | ИНАЧЕ КурсыВалютСрезПоследних.Курс / КурсыВалютСрезПоследних.Кратность | КОНЕЦ | КОНЕЦ | ИНАЧЕ ЕСТЬNULL(ТаблицаРегистраПродажиСебестоимость.СтоимостьОборот / ВЫБОР | КОГДА КурсыВалютСрезПоследних.Кратность = 0 | ТОГДА 1 | ИНАЧЕ КурсыВалютСрезПоследних.Курс / КурсыВалютСрезПоследних.Кратность | КОНЕЦ, 0) | КОНЕЦ КАК Себестоимость, | ЕСТЬNULL(ТЗРОбороты.СуммаОборот / ВЫБОР | КОГДА КурсыВалютСрезПоследних.Кратность = 0 | ТОГДА 1 | ИНАЧЕ КурсыВалютСрезПоследних.Курс / КурсыВалютСрезПоследних.Кратность | КОНЕЦ, 0) КАК СуммаТЗР, | ЕСТЬNULL(БонусыОбороты.СуммаОборот / ВЫБОР | КОГДА КурсыВалютСрезПоследних.Кратность = 0 | ТОГДА 1 | ИНАЧЕ КурсыВалютСрезПоследних.Курс / КурсыВалютСрезПоследних.Кратность | КОНЕЦ, 0) КАК СуммаБонусов, | ВЫБОР | КОГДА &ПоТипамЦен | ТОГДА ВЫБОР | КОГДА ЕСТЬNULL(ЦеныНоменклатуры1.Цена, 0) > 0 | ТОГДА (ПродажиОбороты.СтоимостьОборот - ЕСТЬNULL(ТЗРОбороты.СуммаОборот, 0) - ЕСТЬNULL(БонусыОбороты.СуммаОборот, 0) - ПродажиОбороты.КоличествоОборот * (ЦеныНоменклатуры1.Цена / ЦеныНоменклатуры1.ЕдиницаИзмерения.Коэффициент) * ПродажиОбороты.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент * (КурсыВалют1.Курс / КурсыВалют1.Кратность) / (УпрВалюты.Курс / УпрВалюты.Кратность) * &КоэффициентБазовогоТипаЦен1) / ВЫБОР | КОГДА КурсыВалютСрезПоследних.Кратность = 0 | ТОГДА 1 | ИНАЧЕ КурсыВалютСрезПоследних.Курс / КурсыВалютСрезПоследних.Кратность | КОНЕЦ | ИНАЧЕ (ПродажиОбороты.СтоимостьОборот - ЕСТЬNULL(ТЗРОбороты.СуммаОборот, 0) - ЕСТЬNULL(БонусыОбороты.СуммаОборот, 0) - ПродажиОбороты.КоличествоОборот * (ЦеныНоменклатуры2.Цена / ЦеныНоменклатуры2.ЕдиницаИзмерения.Коэффициент) * ПродажиОбороты.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент * (КурсыВалют2.Курс / КурсыВалют2.Кратность) / (УпрВалюты.Курс / УпрВалюты.Кратность) * &КоэффициентБазовогоТипаЦен2) / ВЫБОР | КОГДА КурсыВалютСрезПоследних.Кратность = 0 | ТОГДА 1 | ИНАЧЕ КурсыВалютСрезПоследних.Курс / КурсыВалютСрезПоследних.Кратность | КОНЕЦ | КОНЕЦ | ИНАЧЕ (ПродажиОбороты.СтоимостьОборот - ЕСТЬNULL(ТЗРОбороты.СуммаОборот, 0) - ЕСТЬNULL(БонусыОбороты.СуммаОборот, 0) - ЕСТЬNULL(ТаблицаРегистраПродажиСебестоимость.СтоимостьОборот, 0)) / ВЫБОР | КОГДА КурсыВалютСрезПоследних.Кратность = 0 | ТОГДА 1 | ИНАЧЕ КурсыВалютСрезПоследних.Курс / КурсыВалютСрезПоследних.Кратность | КОНЕЦ | КОНЕЦ КАК ВаловаяПрибыль, | ВЫБОР | КОГДА ПродажиОбороты.СтоимостьОборот = 0 | ТОГДА 0 | ИНАЧЕ 100 * ВЫБОР | КОГДА &ПоТипамЦен | ТОГДА ВЫБОР | КОГДА ЕСТЬNULL(ЦеныНоменклатуры1.Цена, 0) > 0 | ТОГДА ПродажиОбороты.СтоимостьОборот - ЕСТЬNULL(ТЗРОбороты.СуммаОборот, 0) - ЕСТЬNULL(БонусыОбороты.СуммаОборот, 0) - ПродажиОбороты.КоличествоОборот * (ЦеныНоменклатуры1.Цена / ЦеныНоменклатуры1.ЕдиницаИзмерения.Коэффициент) * ПродажиОбороты.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент * (КурсыВалют1.Курс / КурсыВалют1.Кратность) / (УпрВалюты.Курс / УпрВалюты.Кратность) * &КоэффициентБазовогоТипаЦен1 | ИНАЧЕ ПродажиОбороты.СтоимостьОборот - ЕСТЬNULL(ТЗРОбороты.СуммаОборот, 0) - ЕСТЬNULL(БонусыОбороты.СуммаОборот, 0) - ПродажиОбороты.КоличествоОборот * (ЦеныНоменклатуры2.Цена / ЦеныНоменклатуры2.ЕдиницаИзмерения.Коэффициент) * ПродажиОбороты.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент * (КурсыВалют2.Курс / КурсыВалют2.Кратность) / (УпрВалюты.Курс / УпрВалюты.Кратность) * &КоэффициентБазовогоТипаЦен2 | КОНЕЦ | ИНАЧЕ ПродажиОбороты.СтоимостьОборот - ЕСТЬNULL(ТЗРОбороты.СуммаОборот, 0) - ЕСТЬNULL(БонусыОбороты.СуммаОборот, 0) - ЕСТЬNULL(ТаблицаРегистраПродажиСебестоимость.СтоимостьОборот, 0) | КОНЕЦ / ПродажиОбороты.СтоимостьОборот | КОНЕЦ КАК Рентабельность, | ПродажиОбороты.Регистратор, | ПродажиОбороты.Период, | НАЧАЛОПЕРИОДА(ПродажиОбороты.Период, ДЕНЬ) КАК ПериодДень, | НАЧАЛОПЕРИОДА(ПродажиОбороты.Период, НЕДЕЛЯ) КАК ПериодНеделя, | НАЧАЛОПЕРИОДА(ПродажиОбороты.Период, ДЕКАДА) КАК ПериодДекада, | НАЧАЛОПЕРИОДА(ПродажиОбороты.Период, МЕСЯЦ) КАК ПериодМесяц, | НАЧАЛОПЕРИОДА(ПродажиОбороты.Период, КВАРТАЛ) КАК ПериодКвартал, | НАЧАЛОПЕРИОДА(ПродажиОбороты.Период, ПОЛУГОДИЕ) КАК ПериодПолугодие, | НАЧАЛОПЕРИОДА(ПродажиОбороты.Период, ГОД) КАК ПериодГод, | ВЫБОР | КОГДА КурсыВалютСрезПоследних.Кратность = 0 | ТОГДА 1 | ИНАЧЕ КурсыВалютСрезПоследних.Курс / КурсыВалютСрезПоследних.Кратность | КОНЕЦ КАК КурсРегистратора |{ВЫБРАТЬ | Ответственный.*, | Подразделение.*, | Контрагент.*, | ЗаказПокупателя.*, | Номенклатура.*, | КоличествоЕдиницОтчетовОборот, | СтоимостьОборот, | Себестоимость0, | Себестоимость1, | Себестоимость2, | Себестоимость, | СуммаТЗР, | СуммаБонусов, | ВаловаяПрибыль, | Рентабельность, | Регистратор, | Период, | ПериодДень, | ПериодНеделя, | ПериодДекада, | ПериодМесяц, | ПериодКвартал, | ПериодПолугодие, | ПериодГод} |ИЗ | РегистрСведений.КурсыВалют.СрезПоследних(&ДатаКон, Валюта = &ВалютаУпрУчета) КАК УпрВалюты, | РегистрНакопления.Продажи.Обороты(&ДатаНач, &ДатаКон, Регистратор, {(Подразделение).* КАК Подразделение, (Контрагент).* КАК Контрагент, (ЗаказПокупателя).* КАК ЗаказПокупателя, (Номенклатура).* КАК Номенклатура}) КАК ПродажиОбороты | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних( | &ДатаКон, | ТипЦен = &БазовыйТипЦен1 | И ХарактеристикаНоменклатуры = ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка) {(Номенклатура).* КАК Номенклатура}) КАК ЦеныНоменклатуры1 | ПО ПродажиОбороты.Номенклатура = ЦеныНоменклатуры1.Номенклатура | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних( | &ДатаКон, | ТипЦен = &БазовыйТипЦен2 | И ХарактеристикаНоменклатуры = ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка) {(Номенклатура).* КАК Номенклатура}) КАК ЦеныНоменклатуры2 | ПО ПродажиОбороты.Номенклатура = ЦеныНоменклатуры2.Номенклатура | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют.СрезПоследних(&ДатаКон, ) КАК КурсыВалют2 | ПО (ЦеныНоменклатуры2.Валюта = КурсыВалют2.Валюта) | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют.СрезПоследних(&ДатаКон, ) КАК КурсыВалют1 | ПО (ЦеныНоменклатуры1.Валюта = КурсыВалют1.Валюта) | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТЗР.Обороты(&ДатаНач, &ДатаКон, , {(Подразделение).* КАК Подразделение, (ЗаказПокупателя).* КАК ЗаказПокупателя, (Номенклатура).* КАК Номенклатура}) КАК ТЗРОбороты | ПО ПродажиОбороты.ЗаказПокупателя = ТЗРОбороты.ЗаказПокупателя | И ПродажиОбороты.Номенклатура = ТЗРОбороты.Номенклатура | И ПродажиОбороты.Регистратор = ТЗРОбороты.ДокументДвижения | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Бонусы.Обороты(&ДатаНач, &ДатаКон, , {(Подразделение).* КАК Подразделение, (ЗаказПокупателя).* КАК ЗаказПокупателя, (Номенклатура).* КАК Номенклатура}) КАК БонусыОбороты | ПО ПродажиОбороты.ЗаказПокупателя = БонусыОбороты.ЗаказПокупателя | И ПродажиОбороты.Номенклатура = БонусыОбороты.Номенклатура | И ПродажиОбороты.Регистратор = БонусыОбороты.ДокументДвижения | ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ | ПродажиСебестоимость.Номенклатура КАК Номенклатура, | ПродажиСебестоимость.ЗаказПокупателя КАК ЗаказПокупателя, | ВЫБОР | КОГДА ПродажиСебестоимость.ДокументДвижения <> НЕОПРЕДЕЛЕНО | ТОГДА ПродажиСебестоимость.ДокументДвижения | ИНАЧЕ ПродажиСебестоимость.Регистратор | КОНЕЦ КАК Регистратор, | СУММА(ПродажиСебестоимость.Стоимость) КАК СтоимостьОборот | ИЗ | РегистрНакопления.ПродажиСебестоимость КАК ПродажиСебестоимость | ГДЕ | ПродажиСебестоимость.Период МЕЖДУ &ДатаНачала И &ДатаКонца | {ГДЕ | ПродажиСебестоимость.Подразделение.* КАК Подразделение, | ПродажиСебестоимость.Номенклатура.* КАК Номенклатура, | ПродажиСебестоимость.ЗаказПокупателя.* КАК ЗаказПокупателя} | | СГРУППИРОВАТЬ ПО | ПродажиСебестоимость.Номенклатура, | ПродажиСебестоимость.ЗаказПокупателя, | ВЫБОР | КОГДА ПродажиСебестоимость.ДокументДвижения <> НЕОПРЕДЕЛЕНО | ТОГДА ПродажиСебестоимость.ДокументДвижения | ИНАЧЕ ПродажиСебестоимость.Регистратор | КОНЕЦ) КАК ТаблицаРегистраПродажиСебестоимость | ПО (ТаблицаРегистраПродажиСебестоимость.Номенклатура = ПродажиОбороты.Номенклатура) | И (ТаблицаРегистраПродажиСебестоимость.ЗаказПокупателя = ПродажиОбороты.ЗаказПокупателя) | И (ТаблицаРегистраПродажиСебестоимость.Регистратор = ПродажиОбороты.Регистратор) | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют.СрезПоследних(, Валюта = &ВалютаОтображения) КАК КурсыВалютСрезПоследних | ПО (НАЧАЛОПЕРИОДА(ПродажиОбороты.Регистратор.Дата, ДЕНЬ) = НАЧАЛОПЕРИОДА(КурсыВалютСрезПоследних.Период, ДЕНЬ)) |{ГДЕ | ПродажиОбороты.ДокументПродажи.Ответственный.* КАК Ответственный, | ПродажиОбороты.Подразделение.* КАК Подразделение, | ПродажиОбороты.Контрагент.* КАК Контрагент, | ПродажиОбороты.ЗаказПокупателя.* КАК ЗаказПокупателя, | ПродажиОбороты.Номенклатура.* КАК Номенклатура, | ПродажиОбороты.Регистратор КАК Регистратор, | ПродажиОбороты.Период КАК Период, | (НАЧАЛОПЕРИОДА(ПродажиОбороты.Период, ДЕНЬ)) КАК ПериодДень, | (НАЧАЛОПЕРИОДА(ПродажиОбороты.Период, НЕДЕЛЯ)) КАК ПериодНеделя, | (НАЧАЛОПЕРИОДА(ПродажиОбороты.Период, ДЕКАДА)) КАК ПериодДекада, | (НАЧАЛОПЕРИОДА(ПродажиОбороты.Период, МЕСЯЦ)) КАК ПериодМесяц, | (НАЧАЛОПЕРИОДА(ПродажиОбороты.Период, КВАРТАЛ)) КАК ПериодКвартал, | (НАЧАЛОПЕРИОДА(ПродажиОбороты.Период, ПОЛУГОДИЕ)) КАК ПериодПолугодие, | (НАЧАЛОПЕРИОДА(ПродажиОбороты.Период, ГОД)) КАК ПериодГод} |{УПОРЯДОЧИТЬ ПО | Ответственный.*, | Подразделение.*, | Контрагент.*, | ЗаказПокупателя.*, | Номенклатура.*, | СтоимостьОборот, | СуммаТЗР, | СуммаБонусов, | ВаловаяПрибыль, | Рентабельность, | Регистратор, | Период, | ПериодДень, | ПериодНеделя, | ПериодДекада, | ПериодМесяц, | ПериодКвартал, | ПериодПолугодие, | ПериодГод} |ИТОГИ | СУММА(КоличествоЕдиницОтчетовОборот), | СУММА(СтоимостьОборот), | СУММА(Себестоимость0), | СУММА(Себестоимость1), | СУММА(Себестоимость2), | СУММА(Себестоимость), | СУММА(СуммаТЗР), | СУММА(СуммаБонусов), | СУММА(ВаловаяПрибыль), | ВЫБОР | КОГДА СУММА(СтоимостьОборот) = 0 | ТОГДА 0 | ИНАЧЕ 100 * СУММА(ВаловаяПрибыль) / СУММА(СтоимостьОборот) | КОНЕЦ КАК Рентабельность |ПО | ОБЩИЕ |{ИТОГИ ПО | Ответственный.*, | Подразделение.*, | Контрагент.*, | ЗаказПокупателя.*, | Номенклатура.*, | Регистратор, | Период, | ПериодДень, | ПериодНеделя, | ПериодДекада, | ПериодМесяц, | ПериодКвартал, | ПериодПолугодие, | ПериодГод} |АВТОУПОРЯДОЧИВАНИЕ";
Есть вариант обойтись без временных таблиц? Задача, показывать все сумовые значения в выбранной валюте. Сначала в ТЗ было считать сумовые значений по средневзвешенному курсу за период. Тут как бы все понятно. А вот на дату документа регистратора ПродажиОбороты, это уже жестко. Сейчас запрос с левым соединением курса валют не работает...
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!