Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
15 мар 2025, 17:33

ПреобразованиеКурса

Автор maxxi, 28 фев 2025, 11:37

0 Пользователей и 1 гость просматривают эту тему.

maxxi

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

СГРУППИРОВАТЬ ПО
ВзаиморасчетыОстаткиИОбороты.Клиент,
ВзаиморасчетыОстаткиИОбороты.ПериодМесяц,
ВзаиморасчетыОстаткиИОбороты.Валюта
;

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

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

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗЛИЧНЫЕ
КОНЕЦПЕРИОДА(КурсВалюты.Период, МЕСЯЦ) КАК Период,
КурсВалюты.Филиал КАК Филиал,
КурсВалюты.Валюта КАК Валюта,
МАКСИМУМ(КурсВалюты.Курс) КАК Курс
ПОМЕСТИТЬ вт_КурсВалюты
ИЗ
РегистрСведений.КурсВалюты КАК КурсВалюты
ГДЕ
КурсВалюты.Период МЕЖДУ &Нач И &Кон
И НЕ КурсВалюты.Филиал.Ссылка ЕСТЬ NULL
И КурсВалюты.Валюта.Наименование = "$"
И НЕ КурсВалюты.Филиал.Наименование = "ЦентрСклад"

СГРУППИРОВАТЬ ПО
КурсВалюты.Филиал,
КурсВалюты.Валюта,
КОНЕЦПЕРИОДА(КурсВалюты.Период, МЕСЯЦ)
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
вт_СпрКлиент1.Ссылка КАК Ссылка,
вт_СпрКлиент1.Наименование КАК Наименование,
вт_СпрКлиент1.Филиал КАК Филиал,
вт_СпрКлиент1.Клиент КАК Клиент,
вт_СпрКлиент1.СуммаКонечныйОстаток КАК СуммаКонечныйОстаток,
вт_СпрКлиент1.ПериодМесяц КАК ПериодМесяц,
вт_СпрКлиент1.Валюта КАК ВалютаДляОтладки,
вт_КурсВалюты.Период КАК Период,
вт_КурсВалюты.Филиал КАК Филиал,
вт_КурсВалюты.Курс КАК КурсДляОтладки,
ВЫБОР
КОГДА вт_СпрКлиент1.Валюта.Наименование = "Сум"
ТОГДА вт_СпрКлиент1.СуммаКонечныйОстаток / вт_КурсВалюты.Курс
ИНАЧЕ вт_СпрКлиент1.СуммаКонечныйОстаток
КОНЕЦ КАК СуммаСКурсом

ИЗ
вт_СпрКлиент1 КАК вт_СпрКлиент1
ВНУТРЕННЕЕ СОЕДИНЕНИЕ вт_КурсВалюты КАК вт_КурсВалюты
ПО вт_СпрКлиент1.Филиал = вт_КурсВалюты.Филиал
И вт_СпрКлиент1.ПериодМесяц = вт_КурсВалюты.Период
;
    ///////////////////////////////////////////////////////////////////

Мне надо чтобы в конце каждого месяца если долг в "Сумах", надо эту сумма разделить на "КурсДляОтладки".

За это отвечает этот кусок:

ВЫБОР
КОГДА вт_СпрКлиент1.Валюта.Наименование = "Сум"
ТОГДА вт_СпрКлиент1.СуммаКонечныйОстаток / вт_КурсВалюты.Курс
ИНАЧЕ вт_СпрКлиент1.СуммаКонечныйОстаток
КОНЕЦ КАК СуммаСКурсом

Но именно этот кусок и не работает.

переписал и так
...ВЫБОР
КОГДА вт_СпрКлиент1.Валюта = "Сум"
...
На фото результат запроса, "-60 000 000" не меняется.
все равно не работает.

Помогите пожалуйста , что я делаю не правильно.
Спасибо.


LexaK

maxxi, может так
...ВЫБОР
        КОГДА вт_СпрКлиент1.Валюта.Наименование = "Сум"
...
если помогло нажмите: Спасибо!

maxxi

LexaK, сперва так и сделал, но результата ноль.

Максим75

maxxi, проверьте, в Ваше условие вообще попадает. поставьте там какую-то левую цифру и посмотрите, выводит ее или нет.
а дальше уже плясать от результата.

LexaK

maxxi, очень сомнительное соединение
    вт_СпрКлиент1 КАК вт_СпрКлиент1
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ вт_КурсВалюты КАК вт_КурсВалюты
        ПО вт_СпрКлиент1.Филиал = вт_КурсВалюты.Филиал
            И вт_СпрКлиент1.ПериодМесяц = вт_КурсВалюты.Период
;

еще необходимо соединение по валюте
иначе если у вас ведется учет в нескольких валютах, получите перемножение строк / задвоения
результата! 
если помогло нажмите: Спасибо!

antoneus

Там отбор по курсу доллара и группировка по максимуму курса и филиалу/периоду, норм должно быть)

У меня единственная версия - наименование в запросе не совпадает с наименованием в справочнике. Попробуйте по коду сравнивать.

Максим75

antoneus, да я поэтому и сказал проверить заходит ли вообще в условие.
там может банально курс = 1, поэтому и вот такое поведение, мы же не видим, что там в регистре сведений происходит.

antoneus

Ну курс там вытащен на картинке (КурсДляОтладки), не 1.

Максим75

antoneus, точно, есть.

ну значит в условие не попадает, может там в названии в конце пробел стоит и условие не выполняется.
регулярно здесь пишем, что по наименованию проверять - себе дороже, но нет, народ упорно топчется по граблям.

antoneus

Ставлю на то, что в справочнике не кириллица)

Теги:
Рейтинг@Mail.ru

Поиск