Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Запрос выгрузки цен
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.2 > Программирование обычных форм 1С 8.2 и не интерфейсной логики
korish
Добрый день! Прошу помощи так как зашел уже в тупик. Есть такой запрос
Запрос = Новый Запрос;
    Запрос.УстановитьПараметр("Дата", ТекущаяДата());
    МассивВалют=Новый Массив;
    МассивВалют.Добавить(Справочники.Валюты.НайтиПоКоду(980));
    МассивВалют.Добавить(Справочники.Валюты.НайтиПоКоду(840));
    Запрос.УстановитьПараметр("МассивВалют",МассивВалют);
    Запрос.УстановитьПараметр("Категория",Справочники.КатегорииЦен.НайтиПоНаименованию("Районная"));
    Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ
                          |    Номенклатура.Ссылка,
                          |    ОстаткиТоваровСрезПоследних.Остаток,
                          |    ВложенныйЗапрос.Цена
                          |ИЗ
                          |    Справочник.Номенклатура КАК Номенклатура
                          |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ОстаткиТоваров.СрезПоследних КАК ОстаткиТоваровСрезПоследних
                          |        ПО Номенклатура.Ссылка = ОстаткиТоваровСрезПоследних.Товар
                          |        ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
                          |            ЦеныСрезПоследних.Товар КАК Товар,
                          |            МАКСИМУМ(ЦеныСрезПоследних.Цена) КАК Цена
                          |        
                          |        ИЗ              
                          |            РегистрСведений.Цены.СрезПоследних(
                          |                    &Дата, Валюта В(&МассивВалют) И КатегорияЦены = &Категория
                          |                        
                          |                        ) КАК ЦеныСрезПоследних
                          |        
                          |        СГРУППИРОВАТЬ ПО
                          |            ЦеныСрезПоследних.Товар) КАК ВложенныйЗапрос
                          |        ПО Номенклатура.Ссылка = ВложенныйЗапрос.Товар
                          |ГДЕ
                          |    Номенклатура.ЭтоГруппа = ЛОЖЬ";

Получаю цены указанные в массиве (Доллар и Гривна), но никак не могу перевести доллар в гривну, что бы все цены были в одной валюте. Есть регистр сведений "Курс Валют" - Изм: Валюта, Рес: Курс, Кратность. Не знаю как его использовать в данном случаи

Цену получаю в цикле

rsProd.Fields("price").Value =  ?(Выборка.Цена = null,0,Выборка.Цена);
awp
Цитата(korish @ 06.01.12, 11:37) необходимо зарегистрироваться для просмотра ссылки
(ВЫБРАТЬ
                          |            ЦеныСрезПоследних.Товар КАК Товар,
                          |            МАКСИМУМ(ЦеныСрезПоследних.Цена) КАК Цена
                          |        
                          |        ИЗ              
                          |            РегистрСведений.Цены.СрезПоследних(
                          |                    &Дата, Валюта В(&МассивВалют) И КатегорияЦены = &Категория
                          |                        
                          |                        ) КАК ЦеныСрезПоследних


Данный запрос вернет 1 строку для товара с максимальной ценой - тоесть ГРН.

Зачем переводить? - судя по Вашему запросу у Вас в ЦеныСрезПоследних в 2-х валютах. Если нет то запрос нужно строить так
В запросе с МАКСИМУМ - заменить регистр на КУРСЫВАЛЮТ, а регистр РегистрСведений.Цены.СрезПоследних соединить левым соединением
Vofka
Из регистра цен выбрать валюту и по ней левым соединением добавить регистр курсов валют. И по курсу переводите все записи (включая гривну, т.к. у неё курс будет должен быть = 1) и получите гривну

Цитата
Данный запрос вернет 1 строку для товара с максимальной ценой - тоесть ГРН.

А если цена только в доларах? wink.gif
korish
это все я понимаю, но так как только начал разбираться в 1С я не знаю как это реализовать((
awp
Хотя Вам нужны остатки - это вообще делается просто соединением а курс на дату отчета берите
Vofka
Цитата
это все я понимаю, но так как только начал разбираться в 1С я не знаю как это реализовать((

Та ну. Т.е. сообразить как написать приведенный в первом посте запрос вы сделали, а добавить то что мы говорим, то "не знаю как"? Как-то не складно получается...

awp, по-моему вы чересчур усложнили ситуацию smile.gif
ЗЫ. awp, не хорошо удалять посты и менять их в корне! 17000000.gif
korish
Проблема в том что немного запроса написал старый программист, который ушел в не здравом уме и у него ничего не допросишься, тот запрос я дописывал изначально в нем было намного меньше строк. Дописать получилось, а вот курс это одна единственная загвоздка
awp
Цитата(Vofka @ 06.01.12, 11:47) необходимо зарегистрироваться для просмотра ссылки
Из регистра цен выбрать валюту и по ней левым соединением добавить регистр курсов валют. И по курсу переводите все записи (включая гривну, т.к. у неё курс будет должен быть = 1) и получите гривну


А если цена только в доларах? wink.gif


16000000.gif

Цитата(Vofka @ 06.01.12, 11:52) необходимо зарегистрироваться для просмотра ссылки
awp, не хорошо удалять посты и менять их в корне! 17000000.gif


Повелся на вложеный запрос - и не увидел что вверху только остатки. Недавно делал для движений.
типа так:

необходимо зарегистрироваться для просмотра ссылки

 |ВЫБРАТЬ
                          |    ВложенныйЗапрос.Организация,
                          |    ""Прибыль от продажи"",
                          |    ""Валовая прибыль с НДС"",
                          |    """",
                          |    СУММА((ВложенныйЗапрос.СтоимостьСНДС - ВложенныйЗапрос.СебестоимостьСНДС) * КурсыВалют.Курс),
                          |    """",
                          |    СУММА((ВложенныйЗапрос.СтоимостьСНДС - ВложенныйЗапрос.СебестоимостьСНДС) * КурсыВалют.Курс)
                          |ИЗ
                          |    (ВЫБРАТЬ
                          |        ПродажиОбороты.Проект КАК Проект,
                          |        ПродажиОбороты.Подразделение КАК Подразделение,
                          |        ПродажиОбороты.Контрагент КАК Покупатель,
                          |        ПродажиОбороты.ДоговорКонтрагента КАК ДоговорПокупателя,
                          |        ПродажиОбороты.Номенклатура КАК Номенклатура,
                          |        ПродажиОбороты.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
                          |        ПродажиОбороты.ЗаказПокупателя КАК ЗаказПокупателя,
                          |        ПродажиОбороты.Организация КАК Организация,
                          |        ПродажиОбороты.Регистратор КАК Регистратор,
                          |        НАЧАЛОПЕРИОДА(ПродажиОбороты.Период, ДЕНЬ) КАК Период,
                          |        ПродажиОбороты.КоличествоОборот КАК Количество,
                          |        ПродажиОбороты.КоличествоОборот * ЕСТЬNULL(ПродажиОбороты.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент, 1) / ЕСТЬNULL(ПродажиОбороты.Номенклатура.ЕдиницаДляОтчетов.Коэффициент, 1) КАК КоличествоЕдиницОтчетов,
                          |        ПродажиОбороты.КоличествоОборот * ЕСТЬNULL(ПродажиОбороты.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент, 1) КАК КоличествоБазовыхЕдиниц,
                          |        ПродажиОбороты.СтоимостьОборот КАК Стоимость,
                          |        ПродажиОбороты.НДСОборот КАК СтоимостьНДС,
                          |        ПродажиОбороты.СтоимостьОборот + ПродажиОбороты.НДСОборот КАК СтоимостьСНДС,
                          |        ЕСТЬNULL(ТаблицаРегистраПродажиСебестоимость.СтоимостьОборот, 0) КАК Себестоимость,
                          |        ЕСТЬNULL(ТаблицаРегистраПродажиСебестоимость.НДСОборот, 0) КАК СебестоимостьНДС,
                          |        ЕСТЬNULL(ТаблицаРегистраПродажиСебестоимость.СтоимостьОборот + ТаблицаРегистраПродажиСебестоимость.НДСОборот, 0) КАК СебестоимостьСНДС
                          |    ИЗ
                          |        РегистрНакопления.Продажи.Обороты(, , Регистратор, {(Организация).* КАК Организация, (Проект).* КАК Проект, (Подразделение).* КАК Подразделение, (Контрагент).* КАК Покупатель,
                          |                            (ДоговорКонтрагента).* КАК ДоговорПокупателя, (Номенклатура).* КАК Номенклатура, (ХарактеристикаНоменклатуры).* КАК ХарактеристикаНоменклатуры, (ЗаказПокупателя).* КАК ЗаказПокупателя}) КАК ПродажиОбороты
                          |            ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
                          |                ПродажиСебестоимость.Номенклатура КАК Номенклатура,
                          |                ПродажиСебестоимость.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
                          |                ПродажиСебестоимость.ЗаказПокупателя КАК ЗаказПокупателя,
                          |                ВЫБОР
                          |                    КОГДА ПродажиСебестоимость.ДокументДвижения <> НЕОПРЕДЕЛЕНО
                          |                        ТОГДА ПродажиСебестоимость.ДокументДвижения
                          |                    ИНАЧЕ ПродажиСебестоимость.Регистратор
                          |                КОНЕЦ КАК Регистратор,
                          |                СУММА(ПродажиСебестоимость.Стоимость) КАК СтоимостьОборот,
                          |                СУММА(ПродажиСебестоимость.НДС) КАК НДСОборот
                          |            ИЗ
                          |                РегистрНакопления.ПродажиСебестоимость КАК ПродажиСебестоимость
                          |            
                          |            СГРУППИРОВАТЬ ПО
                          |                ПродажиСебестоимость.Номенклатура,
                          |                ПродажиСебестоимость.ХарактеристикаНоменклатуры,
                          |                ПродажиСебестоимость.ЗаказПокупателя,
                          |                ВЫБОР
                          |                    КОГДА ПродажиСебестоимость.ДокументДвижения <> НЕОПРЕДЕЛЕНО
                          |                        ТОГДА ПродажиСебестоимость.ДокументДвижения
                          |                    ИНАЧЕ ПродажиСебестоимость.Регистратор
                          |                КОНЕЦ) КАК ТаблицаРегистраПродажиСебестоимость
                          |            ПО (ТаблицаРегистраПродажиСебестоимость.Номенклатура = ПродажиОбороты.Номенклатура)
                          |                И (ТаблицаРегистраПродажиСебестоимость.ХарактеристикаНоменклатуры = ПродажиОбороты.ХарактеристикаНоменклатуры)
                          |                И (ТаблицаРегистраПродажиСебестоимость.ЗаказПокупателя = ПродажиОбороты.ЗаказПокупателя)
                          |                И (ТаблицаРегистраПродажиСебестоимость.Регистратор = ПродажиОбороты.Регистратор)) КАК ВложенныйЗапрос
                          |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
                          |            ПродажиОбороты.Период КАК Период,
                          |            МАКСИМУМ(КурсыВалют.Период) КАК Период1
                          |        ИЗ
                          |            РегистрСведений.КурсыВалют КАК КурсыВалют
                          |                ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.Продажи.Обороты(&ДатаНач, &ДатаКон, День, ) КАК ПродажиОбороты
                          |                ПО КурсыВалют.Период <= ПродажиОбороты.Период
                          |        ГДЕ
                          |            КурсыВалют.Валюта = &Валюта
                          |        
                          |        СГРУППИРОВАТЬ ПО
                          |            ПродажиОбороты.Период) КАК ВложенныйЗапрос1
                          |            ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют КАК КурсыВалют
                          |            ПО ВложенныйЗапрос1.Период1 = КурсыВалют.Период
                          |        ПО ВложенныйЗапрос.Период = ВложенныйЗапрос1.Период
                          |ГДЕ
                          |    ВложенныйЗапрос.Период МЕЖДУ &ДатаНач И &ДатаКон
                          |    И КурсыВалют.Валюта = &Валюта
                          |
                          |СГРУППИРОВАТЬ ПО
                          |    ВложенныйЗапрос.Организация
Vofka
Цитата
Проблема в том что немного запроса написал старый программист

А мне кажется, что старый программист написал таки "много".

Цитата
это все я понимаю

Так вот, если понимаете о чем речь - так пробуйте и говорите, что у вас получается/не получается, мы подскажем. Или проще напрячь кого-то? Готового кода не дождетесь (от меня, по крайней мере) bk.gif
korish
Цитата
А мне кажется, что старый программист написал таки "много".

Лучше перекреститься
Цитата
Так вот, если понимаете о чем речь - так пробуйте и говорите, что у вас получается/не получается, мы подскажем. Или проще напрячь кого-то? Готового кода не дождетесь (от меня, по крайней мере)

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


в итоге ничего не получилось
Vofka
faceoff.gif

Навскидку как-то так (ВНИМАНИЕ!!! Это псевдокод!)

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


И вставляйте код нормально (в отформатировнном виде), а то хрен разберешь так сходу.
alex040269
Я все таки не пойму. Почему Вы берете МАКСИМУМ цены, а не соединение и пересчет по курсу? На том простом основании, что сегодня курс 8:1, а если завтра станет 1:8?
Vofka
Цитата
Почему Вы берете МАКСИМУМ цены, а не соединение и пересчет по курсу? На том простом основании, что сегодня курс 8:1, а если завтра станет 1:8?

Т.к. берется срез последних, то мне кажется, что не имеет значения что взять (максимум, минимум или среднее). Наверное надо получить стоимостную оценку товаров на какую-то дату. Я честно говоря вооще не понимаю нафига там делается группировка, ведь одинаковых товаров там всеравно не будет.
korish
так рассказываю вкратце, получилось у меня конвертировать, но конвертирует все цены....суть всего вопроса....как выбрать только цены у которых валюта "Доллар" и конвертировать их в "Гривну"?
alex040269
|ГДЕ
|    ЦеныСрезПоследних.Валюта = &Валюта";
Запрос.УстановитьПараметр("Валюта",Справочники.НайтиПоКоду())


НУ и умножить на коэфициент и разделить на делитель

Цитата(Vofka @ 09.01.12, 13:12) необходимо зарегистрироваться для просмотра ссылки
Т.к. берется срез последних, то мне кажется, что не имеет значения что взять (максимум, минимум или среднее). Наверное надо получить стоимостную оценку товаров на какую-то дату. Я честно говоря вооще не понимаю нафига там делается группировка, ведь одинаковых товаров там всеравно не будет.


Группировка, я так понимаю, сгруппирует несколько цен в разных валютах и выберет максимальную.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.