Имя: Пароль:
1C
 
Как соединить РС с его двумя виртуальными таблицами
0 Хрустальчик
 
04.06.25
11:04
Здравствуйте, подскажите, пожалуйста, как соединить РС с его двумя виртуальными таблицами.

Задача заключается в получении отчета, где есть ЦенаНоменклатуры (ну соответственно на каждую дату регистратора), ЦенаНоменклатурыСрезПервых ЦенаНоменклатурыСрезПоследних (от заданного периода)

Спасибо заранее.

Вообще возможно такой отчет сделать?
1 Хрустальчик
 
04.06.25
11:06
Хотя ладно, конечно, возможно

Просто не получается запрос сделать
2 Fish
 
гуру
04.06.25
11:07
Показывай запрос, который сделал. Посмотрим, что не получается.
3 Kigo_Kigo
 
04.06.25
11:52
А что мешает?
в первом случае ДатаНач во втором ДатаКон через
ОБЪЕДИНИТЬ ВСЕ
Не?
или я задачу не понял?
4 Маленький Вопросик
 
04.06.25
11:10
Если хочешь сделать "на каждый день", то сначала озадачься сделать что-то базовой таблицы "номенклатура/день/вид цены", а затем - цепляй туда свои виртуалки
5 Маленький Вопросик
 
04.06.25
11:13
одна из моих древних обработок - https://infostart.ru/1c/reports/1074905/

вот здесь именно "на каждый день" ...
6 craxx
 
04.06.25
11:14
(0) классическая задача среза на каждую дату из диапазона. Такая на собеседовании дается.
7 Fish
 
гуру
04.06.25
11:21
(6) Тут ещё надо уточнить, на каждую ли из диапазона. В (0) написано "на каждую дату регистратора".
Т.е. не факт, что нужно выводить на даты, в которые не было регистратора.
8 Fish
 
гуру
04.06.25
11:23
(5) Странный какой-то отчет. Показывает, что по некоторым товарам цена падает до нуля. Так бывает?
9 Волшебник
 
04.06.25
11:48
(0) зачем вам срез первых цен?
10 Eiffil123
 
04.06.25
11:54
(9) а-ля динамика цен за период, состоящая из 3х показателей.
11 Eiffil123
 
04.06.25
11:54
хотя срез первых наверно смысла не имеет в этом случае
12 Fedor-1971
 
04.06.25
11:57
(9) Это чисто академический интерес (безумное тестовое задание): Если мы попадаем в период установки Значений (например, курс валюты установлен в 10:00 и запрос строится именно в 10:00), тогда срез первых - покажет предыдущую цену, а срез последних установленную
Только ТС упускает момент - Срезы строятся сразу на конкретную дату/время, а на "каждую дату" - придётся поизвращаться при построении запроса
13 Хрустальчик
 
04.06.25
12:33
Сделать надо что-то типа этого : https://i.postimg.cc/gkYdQrSy/image.png

На данный момент взял все заказы поставщикам в одном запросе и соединил его с двумя другими наборами данных - запросами в СКД. Получаю сейчас некрасивую таблицу, но все данные как-бы выводятся. Но не так, как надо по шаблону
14 Хрустальчик
 
04.06.25
12:36
На каждую дату мне не надо цену, надо из заказа поставщику и рядом на начало заданного периода и на его конец
15 craxx
 
04.06.25
12:45
(9) кстати, за 20+ лет карьеры в 1С, "СрезПервых" использовал 1 (ОДИН) раз в жизни.
16 Eiffil123
 
04.06.25
13:03
(15) аналогично. и сейчас даже не особо уверен, что он тогда был нужен.
17 Eiffil123
 
04.06.25
13:04
(14) на начало периода - тоже срез последних.
Срез первых будет искать первую запись ПОСЛЕ указанной даты.
18 Маленький Вопросик
 
04.06.25
13:25
(8) да, бывает, когда надо показать дату регистрации цены а не пестрить все цифрами. Что тут непонятного?
19 Fedor-1971
 
04.06.25
13:43
(17) Вопрос мутный, вот что написано тут:
https://its.1c.ru/db/metod8dev/content/2588/hdoc

ПолучитьПоследнее (<Конец периода>, <Отбор>)
Этот метод возвращает актуальное значение ресурсов, действовавшее на заданную дату. Если он не находит запись в регистре по данной комбинации измерений точно на заданный период, то возвращается структура, содержащая значения ресурсов ближайшей более поздней записи.

ПолучитьПервое (<Начало периода>, <Отбор>) Этот метод действует аналогично методу ПолучитьПоследнее, но если записи на данный момент не находится, то возвращается структура, содержащая значения ресурсов ближайшей более ранней записи.

Сие можно понять так: если есть записи, например, на 01/01/2025 за 10:00 = 1, 10:01 = 8 и 10:03 = 2, а мы просим данные за 01/01/2025 в 11:00, то срез первых вернёт 1 (или 8 - если дословно следовать описанию), а срез последних 2
20 Маленький Вопросик
 
04.06.25
13:44
(19) предыдущую цену искать - минус секунда от даты
21 d4rkmesa
 
гуру
04.06.25
13:57
(0) Если безотносительно производительности, то можно в СКД соединить 3 набора данных через параметры:
https://infostart.ru/1c/articles/77568/
22 Kigo_Kigo
 
04.06.25
14:39
ВЫБРАТЬ
    ЦеныНоменклатурыСрезПервых.Номенклатура,
    ЦеныНоменклатурыСрезПервых.ТипЦен,
    ЦеныНоменклатурыСрезПервых.Валюта,
    ЦеныНоменклатурыСрезПервых.Цена Как ЦенаНаНачало,
    ЦеныНоменклатурыСрезПоследних.Цена КАК ЦенаНаКонец
ИЗ
    РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&НачДата, ) КАК ЦеныНоменклатурыСрезПервых
        Внутреннее СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&КонДата, ) КАК ЦеныНоменклатурыСрезПоследних
        ПО ЦеныНоменклатурыСрезПервых.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура
            И ЦеныНоменклатурыСрезПервых.ТипЦен = ЦеныНоменклатурыСрезПоследних.ТипЦен
23 Garykom
 
гуру
04.06.25
14:55
Срезы это виртуальные таблицы для упрощения запросов
Всегда можно обойтись без них, сделав их самостоятельно

В данном случае у ТС классическая задачка где срезы не нужны и даже лишние
Ибо он хочет сделать срезы на несколько разных дат ))

Если же срезы нужны только на одну дату (переданную в запрос) - не вижу никаких проблем совсем
24 Garykom
 
гуру
04.06.25
14:57
Если правильно понял он хочет отчет по списку номенклатуры (строки) со всеми датами (столбцы) изменений цен

Даты когда цены менялись берутся из регистраторов
Проблема что даты изменения цен разной номенклатуры не совпадают