Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

и снова про периодический регистр сведений в запросе

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

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

////////////////////////////////////////////////////////////////////////////////

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

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

////////////////////////////////////////////////////////////////////////////////

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

////////////////////////////////////////////////////////////////////////////////

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

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

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


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.