Имя: Пароль:
1C
 
Выбор среза последних валюты на разные даты в списке документов
0 Syroega
 
26.03.26
04:08
Каким образом можно в списке документов добавить динамически колонку во второй валюте. По нажатию по кнопке. Где сумма
в во второй валюте будет пересчитана для каждого документа.
Валюта хранится в регистре сведений с периодичностью день.
Там же хранится курс валюты необходимый для пересчета.
Как такое можно представить в запросе?
1 Syroega
 
26.03.26
04:09
(0+) В списке документов присутствуют суммы по документам
в рублях по различным датам.
2 ЭТРН
 
26.03.26
05:03
(2) Классическое тестовое задание для программиста при приеме на работу. Написать отчет со срезом по разным датам.
3 Syroega
 
26.03.26
05:41
(2) Можно в теории, как продвинуться в его выполнении?
4 ЭТРН
 
26.03.26
06:42
Последовательность

1. Выборка по таблице формирующей информацию о небходимых датах и измерениях
2. Выборка по регистру сведений
3  Левое соединение с ограничением по дате  не большей даты из таблицы 1
4. Группировка  дата макс.
5.
6.
5 Маленький Вопросик
 
26.03.26
07:03
Например, вложенным запросом с корректным соединением по дате
6 Eiffil123
 
26.03.26
08:51
(0) это надо делать в обработчике "ПриПолученииДанныхНаСервере", как описано в этой статье:
https://wonderland.v8.1c.ru/blog/obrabotka-i-oformlenie-dannykh-dinamicheskogo-spiska/
7 RVN
 
26.03.26
10:15
как вариант:
1. Обеспечить в регистр курсов валют запись курса и кратности валюты каждый день (даже если он не изменился)
2. Тогда в списке будет просто левое соединение основной таблицы документа и основной таблицы регистра курсов (не среза последних) по дате и валюте. Ну и расчет суммы в валюте.
8 arsik
 
гуру
26.03.26
10:20
(4) Еще через СКД соединением с таблицей среза курсов можно.
Но
1) Для динамических списков не сработает.
2) Он на каждый документ срез делает - не оптимально, если нужно много выбирать.
9 RVN
 
26.03.26
10:27
Вы звери, господа! (с)
Зачем такие сложности?
10 Fragster
 
гуру
26.03.26
10:29
можно сделать так, чтобы в РС с курсами курс был на каждую дату (даже если его в ЦБ нет - просто дублировать с предыдущей даты). и тогда обычное левое соединение прокатит.
11 Eiffil123
 
26.03.26
13:54
(10) кошмар какой. зачем?
12 arsik
 
гуру
26.03.26
13:56
(11) Что бы в динсписке сразу получать
13 RVN
 
26.03.26
17:27
(11) потому, что это банально быстрее отработает, чем предложенный вами вариант.
14 ДенисСмирнов
 
26.03.26
18:07
(13) удобно преподу валить будет

сделал первый вариант - плохо, медленно
сделал второй вариант - плохо, избыточно
15 spiller26
 
27.03.26
10:31
Вот вам на подумать.
https://infostart.ru/1c/articles/337365/

И очень часто будете с этим сталкиваться.
Если нет производственного календаря, то вот тебе даты через 3 вреемнные таблицы и работает везде.

ВЫБРАТЬ
    0 КАК Цифра
ПОМЕСТИТЬ ВТ_Цифры
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
    1
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
    2
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
    3
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
    4
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
    5
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
    6
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
    7
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
    8
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
    9
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВТ_Цифры1.Цифра + 10 * ВТ_Цифры2.Цифра + 100 * ВТ_Цифры3.Цифра + 1000 * ВТ_Цифры4.Цифра КАК ПолеЧисло
ПОМЕСТИТЬ ВТ_Числа
ИЗ
    ВТ_Цифры КАК ВТ_Цифры1,
    ВТ_Цифры КАК ВТ_Цифры2,
    ВТ_Цифры КАК ВТ_Цифры3,
    ВТ_Цифры КАК ВТ_Цифры4
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ДОБАВИТЬКДАТЕ(&ДатаНачала, ДЕНЬ, ВТ_Числа.ПолеЧисло) КАК ДатаЧисло
ИЗ
    ВТ_Числа КАК ВТ_Числа
ГДЕ
    ДОБАВИТЬКДАТЕ(&ДатаНачала, ДЕНЬ, ВТ_Числа.ПолеЧисло) МЕЖДУ &ДатаНачала И &ДатаОкончания
УПОРЯДОЧИТЬ ПО
    ДатаЧисло
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан