Имя: Пароль:
1C
1С v8
и снова про периодический регистр сведений в запросе
,
0 Cthulhu
 
25.08.20
19:13
есть монструозный запрос.
в нем в том числе есть "ВЫБРАТЬ ... ИсточникДанных.Номенклатура КАК Номенклатура, ИсточникДанных.ДокументОприходования КАК ДокументОприходования, ..."
для этой сладкой парочки надо вытаскивать из РС ЦеныНоменклатуры значение ресурса Цена на дату ДокументОприходования.ДатаДок.
повторюсь - запрос монструозный, для универсального отчета - поэтому просто тупо перелопачивать его, тасуя порядок выборки - не получаеется.
вопрос. собственно, простой как торшер: на что нужно заменить "ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&ДатаКурса, ) КАК ЦеныПрайса" чтобы вместо параметра запроса использовать ДокументОприходования.Дата ?.. вот моно ли тупо вот этот кусок заменить на что-то другое, не трогая в тексте запроса больше ничего (работает - не трогай)?.. и на что именно (если "да")?..
заранееблагодаренивсетакое...
прим.:  - да, в базу знаний ходил. гугль пытал с пристрастем, но все неудачно.
1 RomanYS
 
25.08.20
19:23
Левое соединение мояТаблицаСрезовСПериодами
По ... ДатаОприходования между мояТаблицаСрезовСПериодами.ДатаС и мояТаблицаСрезовСПериодами.ДатаПо
2 Cthulhu
 
25.08.20
19:32
(1): спасибо, добрый человек.
во-первых, не понял. уж извини, а как бы прямо на вопрос кодом, который надо вставить вместо нерабочего - как в вопросе сформулировано - можно пожалуйста?..

прим.: не оговорил сразу, все осложняется тем, что период неизвестен!.. документы прихода - не из периода выбираются, а из измерения регистра остатков типа "документ".......
3 H A D G E H O G s
 
25.08.20
19:46
ВЫБРАТЬ
    ПартииТоваровНаСкладахОстатки.Номенклатура,
    ПартииТоваровНаСкладахОстатки.КоличествоОстаток,
    ПартииТоваровНаСкладахОстатки.СтоимостьОстаток,
    ПартииТоваровНаСкладахОстатки.ДокументОприходования
ПОМЕСТИТЬ МаксимальноОтфильтрованнаяОсновнаяТаблица
ИЗ
    РегистрНакопления.ПартииТоваровНаСкладах.Остатки(, Склад = &Склад) КАК ПартииТоваровНаСкладахОстатки
;

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

СГРУППИРОВАТЬ ПО
    ЦеныНоменклатуры.Номенклатура
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ЦеныНоменклатуры.Номенклатура,
    ЦеныНоменклатуры.Цена
ПОМЕСТИТЬ Цены
ИЗ
    РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ МаксимумыПериодов КАК МаксимумыПериодов
        ПО ЦеныНоменклатуры.Номенклатура = МаксимумыПериодов.Номенклатура
            И ЦеныНоменклатуры.Период = МаксимумыПериодов.Период
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    МаксимальноОтфильтрованнаяОсновнаяТаблица.Номенклатура,
    МаксимальноОтфильтрованнаяОсновнаяТаблица.КоличествоОстаток,
    МаксимальноОтфильтрованнаяОсновнаяТаблица.СтоимостьОстаток,
    МаксимальноОтфильтрованнаяОсновнаяТаблица.ДокументОприходования,
    ЕСТЬNULL(Цены.Цена, 0) КАК Цена
ИЗ
    МаксимальноОтфильтрованнаяОсновнаяТаблица КАК МаксимальноОтфильтрованнаяОсновнаяТаблица
        ЛЕВОЕ СОЕДИНЕНИЕ Цены КАК Цены
        ПО МаксимальноОтфильтрованнаяОсновнаяТаблица.Номенклатура = Цены.Номенклатура
4 H A D G E H O G s
 
25.08.20
19:47
Обэрэжно с
ДокументОприходования.Дата

Если есть возможность, используйте Выразить()
5 Вафель
 
25.08.20
21:00
в скд можно
6 Ёпрст
 
25.08.20
21:38
(3) че то вот это
И МаксимальноОтфильтрованнаяОсновнаяТаблица.ДокументОприходования.Дата >= ЦеныНоменклатуры.Период

не комильфо..тогда уж дату раньше положить во времянку хотя бы
7 Джинн
 
25.08.20
22:02
8 H A D G E H O G s
 
25.08.20
22:29
(6) Очень даже комильфо
9 Cthulhu
 
26.08.20
00:05
(8): спасибо, добрый человек, обязательно поковыряючь. хотя ответа на вопрос "на что нужно заменить "ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&ДатаКурса, ) КАК ЦеныПрайса" чтобы вместо параметра запроса использовать ДокументОприходования.Дата ?.." -- не нашел, аломать оттюненный лютый запрос - все-таки не могу, но обязательно поковыряюсь..
(7): спасибо, читано-перечитано (я вроде упоминл об этом).
10 Ёпрст
 
26.08.20
00:53
(8) не.. кучка левых соединений для ссылки чтоб потом фильтр по дате, ну так себе..там еще и case влепят в on
11 H A D G E H O G s
 
26.08.20
01:09
(10) Ну так она везде куча будет
12 H A D G E H O G s
 
26.08.20
01:10
(10) Чтобы кучи не было - надо постобработкой кодом, если ты более-менее уверен, что табличного разнообразия в выборке будет немного.
13 Cthulhu
 
26.08.20
01:16
(12): в том-то и дело, что это монструозный запрос, подготовленный для универсального отчета, и можно только им родным. есть связка - надо другую. казалось бы. но вот - как???
14 H A D G E H O G s
 
26.08.20
01:27
(13) Я показал как в (3)
15 Конструктор1С
 
26.08.20
07:23
(0) "есть монструозный запрос"

Скорее всего банальный рукожоп-стайл. Я бы на твоём месте переписал этот запрос по-человечачи
16 Cthulhu
 
26.08.20
10:51
(14): во-первых, там в теле запроса источникданных составлен не по остаткам, а по остатками и оборотам, и к этому регистру напристегнуто дофига чего, а ты предлагаешь перепиливать его, всовывая свой алгоритм расчета показателей. насколько я понял. я же прошу о том, чтобы только(!) указанны кусок привязки значений к срезу последних р.с. - заменить на привязку к показателям этого р.с. на дату документа, получаемого в запросе.
ну или я не понял просто - какой же кусок из (3) нужно встатвить вместо "ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&ДатаКурса, ) КАК ЦеныПрайса" не меняя всей остальной логики запроса.
(15): 1) нет. 2) нет смысла, он для универсального отчета и оттюнен, и в коде куча привязанных к нему доп.настроек этого универсального отчета. и оно работает норм, надо только добавить колонку цены из р.с. на дату док.поступления партии. только. а по твоей логике - там и вся конфига рукожоп-стайл и можно преждожить в ответ на любой вопрос по ней - переписать всю конфигу по-человечачи. я конечно перфекционист - но не до такой степени, чтобы от этого подохнуть...
17 Ёпрст
 
26.08.20
10:55
(16) дык в (3) показано как сделать срезпоследних на дату документа, грубо, это 2 запроса в серединке, для формирования таблички цен.
Далее в свой изначальный запрос подставляй как в запросе в конце и всё. Ну и первый запрос замени на свой.
18 Cthulhu
 
26.08.20
11:32
(17): т.е. какую-то врем.таблицу надо сначала подготовить, а потом в том месте привязку к срезу последних заменить на привязку к этой врем.таблице - я правильно понял?.. если "да" - тогда осталось в (3) ковыряться искать - где и как формировать врем таблицу, а также придумать код привязки к ней для замены кода привязки к срезу последних... я правильно понимаю?
19 Cthulhu
 
26.08.20
11:35
(17): блин. все равно не вижу в (3) - КАК подготовить врем.таблицу. там делается попытка выдрать рабочие данные (не так, как в основном моем запросе!) - и использовать их для построения врем таблицы... это не не то.
20 Salimbek
 
26.08.20
13:33
(19) Делайте все по порядку.

Для начала, вам надо выбрать максимальную Дату из ЦеныНоменклатуры, которая будет меньше ДатыОприходования. Т.е. соединяем с Регистром (не со срезом) по условию Период<=ДатаОприходования и Номенклатура=Номенклатура. В этой выборке берем Максимум(Период) КАК МаксДата.

Далее, так как мы теперь знаем Период установки цены для данной строки, то вытаскиваем уже саму цену, для этого еще раз соединяем с ЦеныНоменклатуры, но уже по условию Период=МаксДата и Номенклатура=Номенклатура, и вот из этой выборки берем Цену.
21 Ёпрст
 
26.08.20
13:48
(18) да
22 Ёпрст
 
26.08.20
13:49
в том запросе где у тебя левое соединение срезпоследних, выкидываешь срез последних и помещаешь во времянку - это запрос 1 из (3)..далее как в (3) все остальные и всё.
23 Дык ё
 
26.08.20
13:51
(0) если вдруг это в СКД - можно вынести срез в отдельный запрос и на вкладке соединений передать дату из первого запроса во второй параметром
24 Сергиус
 
26.08.20
16:04
(0)В обычном запрос тупо заменить на что-то аналогичное с передачей даты документа, не получится. Надо все делать по методике из (7), но там явно больше телодвижений.
25 Cthulhu
 
27.08.20
13:40
спасибо, люди.
1) слепил врем.таблицы по максимальной повторной выборке, с результирующей вт "... КАК втЦеныПрайса"
2) заменил строку "ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&ДатаКурса, ) КАК ЦеныПрайса" на "ЛЕВОЕ СОЕДИНЕНИЕ втЦеныПрайса КАК ЦеныПрайса"
все получилось - хотя далеко не так просто, как ожидалось...
прим.: всунуть без вт вложенные запросы - не получилось. но да и ладно, так работает
Независимо от того, куда вы едете — это в гору и против ветра!