Имя: Пароль:
1C
1С v8
Получить реализации и курс валюты на их даты
0 ogion83
 
23.04.24
11:52
Нашел примерно как делать, но у всех получается, а у меня нет. Выводит курс не на дату отгрузки продукции, а по всем дням, когда был введен курс валюты. Подскажите, где поправить?
ВЫБРАТЬ
	ГотоваяПродукцияОстаткиИОбороты.МПЗ,
	ГотоваяПродукцияОстаткиИОбороты.КоличествоРасход,
	ГотоваяПродукцияОстаткиИОбороты.СуммаРасход,
	ГотоваяПродукцияОстаткиИОбороты.Регистратор.Дата КАК РегистраторДата,
	ГотоваяПродукцияОстаткиИОбороты.СуммаРасход / ВложенныйЗапрос.Курс КАК СуммаПоКурсу
ИЗ
	РегистрНакопления.ГотоваяПродукция.ОстаткиИОбороты(&Дата1, &Дата2, Авто, , ) КАК ГотоваяПродукцияОстаткиИОбороты
		ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
			КурсыВалют.Период КАК Период,
			КурсыВалют.Курс КАК Курс
		ИЗ
			РегистрСведений.КурсыВалют КАК КурсыВалют
		ГДЕ
			КурсыВалют.Валюта = &Валюта) КАК ВложенныйЗапрос
		ПО (ВложенныйЗапрос.Период <= ГотоваяПродукцияОстаткиИОбороты.Регистратор.Дата)
ГДЕ
	ГотоваяПродукцияОстаткиИОбороты.Регистратор ССЫЛКА Документ.ОтгрузкаПродукции
1 Волшебник
 
23.04.24
11:46
Лучше сделайте временную таблицу для выборки курса.
2 ogion83
 
23.04.24
12:39
Можно поподробнее?
3 Волшебник
 
23.04.24
12:47
ВЫБРАТЬ поле1, поле2 
ПОМЕСТИТЬ ИмяТаблицы 
ИЗ ТаблицаИсточник;
4 ogion83
 
23.04.24
13:05
Получается так же как в 1 запросе.

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

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    КурсыВалют.Период,
    КурсыВалют.Валюта,
    КурсыВалют.Курс,
    КурсыВалют.Кратность
ПОМЕСТИТЬ ВТ_Курсы
ИЗ
    РегистрСведений.КурсыВалют КАК КурсыВалют
ГДЕ
    КурсыВалют.Валюта = &Валюта
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВТ_Реализации.МПЗ,
    ВТ_Реализации.КоличествоРасход,
    ВТ_Реализации.СуммаРасход,
    ВТ_Реализации.РегистраторДата,
    ВТ_Реализации.СуммаРасход / ВТ_Курсы.Курс КАК ПоКурсу
ИЗ
    ВТ_Реализации КАК ВТ_Реализации
        ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Курсы КАК ВТ_Курсы
        ПО ВТ_Реализации.РегистраторДата >= ВТ_Курсы.Период
5 Мультук
 
23.04.24
13:07
6 Волшебник
 
23.04.24
13:08
Теперь исправьте в третьем запросе:

ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Курсы КАК ВТ_Курсы
   ПО ВТ_Реализации.РегистраторДата = ВТ_Курсы.Период
7 ogion83
 
23.04.24
13:13
(6) Курс не на каждый день устанавливается.
8 Волшебник
 
23.04.24
13:18
(7) Трудности Вас не остановят. Мы в Вас верим
9 программистище
 
23.04.24
13:24
(6) подскажу, нужно выбирать даты документов с максимальной датой курса
10 Kongo2019
 
23.04.24
13:28
// Получим таблицу ВТ_ПТиУ с полями "Ссылка", "Дата", "ДатаЗаписи" за указанный период
// где:
// "ДатаЗаписи" это дата документа на начало дня
ВЫБРАТЬ РАЗРЕШЕННЫЕ
    ПоступлениеТоваровУслуг.Ссылка КАК Ссылка,
    ПоступлениеТоваровУслуг.Дата,
    НАЧАЛОПЕРИОДА(ПоступлениеТоваровУслуг.Дата, ДЕНЬ) КАК ДатаЗаписи
ПОМЕСТИТЬ ВТ_ПТиУ
ИЗ
    Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг
ГДЕ
    ПоступлениеТоваровУслуг.Дата МЕЖДУ &НачалоПериода И &КонецПериода
    И ПоступлениеТоваровУслуг.Проведен
    И НЕ ПоступлениеТоваровУслуг.ПометкаУдаления
;

////////////////////////////////////////////////////////////////////////////////
// Получим таблицу ВТ_ЗаписиРегистра левым соединением РС.КурсыВалют и ВТ_ПТиУ
// по условию ВТ_ПТиУ.ДатаЗаписи >= КурсыВалют.Период и отбором по указанной валюте
// с полями "ДатаЗаписи", "Период", "Валюта"
// где:
// "Период" это максимум поля "Период" из РС.КурсыВалют
//
// Для получения уникальных записей и получения максимальной даты
// группируем таблицу по полям "ДатаЗаписи" И "Валюта"
ВЫБРАТЬ
    ВТ_ПТиУ.ДатаЗаписи,
    МАКСИМУМ(КурсыВалют.Период) КАК Период,
    КурсыВалют.Валюта
ПОМЕСТИТЬ ВТ_ЗаписиРегистра
ИЗ
    ВТ_ПТиУ КАК ВТ_ПТиУ
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют КАК КурсыВалют
        ПО ВТ_ПТиУ.ДатаЗаписи >= КурсыВалют.Период
            И (КурсыВалют.Валюта = &Валюта)

СГРУППИРОВАТЬ ПО
    ВТ_ПТиУ.ДатаЗаписи,
    КурсыВалют.Валюта
;

////////////////////////////////////////////////////////////////////////////////
// Получим итоговую таблицу соединением РС.КурсыВалют и ВТ_ЗаписиРегистра по периоду и валюте
// с полями "ДатаЗаписи", "Валюта", "Курс"
ВЫБРАТЬ
    ВТ_ЗаписиРегистра.ДатаЗаписи КАК ДатаЗаписи,
    КурсыВалют.Валюта,
    КурсыВалют.Курс
ИЗ
    ВТ_ЗаписиРегистра КАК ВТ_ЗаписиРегистра
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют КАК КурсыВалют
        ПО ВТ_ЗаписиРегистра.Период = КурсыВалют.Период
            И ВТ_ЗаписиРегистра.Валюта = КурсыВалют.Валюта

УПОРЯДОЧИТЬ ПО
    ДатаЗаписи

Как-то так, тестовое недавно похожее делал.
11 ogion83
 
24.04.24
08:14
Почему то когда пытаюсь указать МАКСИМУМ (МАКСИМУМ(КурсыВалют.Период) КАК Период,) выдает ошибку
12 ogion83
 
24.04.24
08:24
А, группировки не было.
13 Волшебник
 
24.04.24
09:13
(11) Мало МАКСИМУМОВ. Добавьте третий
14 ogion83
 
24.04.24
09:20
(10) Сработало. Пришлось убрать все лишнее, получить только Курсы валют на нужные дни, хотел их сразу с выводом данных использовать, придется отдельно.
15 ogion83
 
24.04.24
09:20
(13) В коде "Максимум" 1 раз, это тут неудачно написал.
16 Волшебник
 
24.04.24
09:21
(15) Пишите тут правду, не надо врать