Имя: Пароль:
1C
 
Срез последних (виртуальная таблица)
0 LamerSuper
 
02.12.08
17:03
Возможно напишу глупость но такой вопрос. Платформа 8.1.11.67.
1 Случай: Если есть регистр сведений в котором периодичность в пределах регистратора и режим записи подчинение регистратору но регистраторами может быть несколько документов то срез последних на дату берется в разрезе по типу документа регистратора.
2 Случай: Есть регистр сведених периодичность в пределах секунды и запись независимо от регистратора. Срез последних на дату не работает. Не берется 1 запись.
Не ругайте сильно но я всегда считал что срез последних это виртуальная таблица именно на дату среза независимо от всякой другой бойды. Я не прав?
1 Маркетолог
 
02.12.08
17:05
(0) срез последних это виртуальная таблица именно на дату среза
2 LamerSuper
 
02.12.08
17:06
В жизни оказалось что не так
3 Маркетолог
 
02.12.08
17:10
(2) Покажи запрос
4 LamerSuper
 
02.12.08
17:13
:))))))

ЗапросОбъектовМВТ = Новый Запрос;
       ЗапросОбъектовМВТ.МенеджерВременныхТаблиц = НОВЫЙ МенеджерВременныхТаблиц;
       
       ЗапросОбъектовМВТ.Текст = "ВЫБРАТЬ
       |    НоменклатурныеГруппы.Ссылка КАК Объект,
       |    НоменклатурныеГруппы.ВидНаправленияРСУ КАК ВидНаправления,
       |    НоменклатурныеГруппы.НомерНаправленияРСУ КАК НомерНаправления,
       |    НоменклатурныеГруппы.Проект.ПриобъектныйСклад КАК ПриобъектныйСклад,
       |    НоменклатурныеГруппы.Проект КАК Проект,
       |    ВЫБОР
       |        КОГДА СостояниеОбъектаОНОФСрезПоследних.РазрешенаОтгрузка = ИСТИНА
       |                И СостояниеОбъектаОНОФСрезПоследних.ДатаОкончания >= &ДатаАктуальности И СостояниеОбъектаОНОФСрезПоследних.ДатаНачала <= &ДатаАктуальности
       |            ТОГДА ИСТИНА
       |        ИНАЧЕ ЛОЖЬ
       |    КОНЕЦ КАК ОтгрузкаРазрешена,
       |    СостояниеОбъектаОНОФСрезПоследних.ДатаОкончания,
       |    СостояниеОбъектаОНОФСрезПоследних.ДатаНачала";
       Если Таблица = ОбъектыМБП тогда
           ЗапросОбъектовМВТ.Текст = ЗапросОбъектовМВТ.Текст + ",ЕСТЬNULL(ДопЗатратыПроектаОбороты.ОбъемОборот, 0) КАК Всего,
           |    ЕСТЬNULL(НезавершенноеПроизводствоОстатки.СтоимостьОстаток, 0) КАК Израсходовано";
       КонецЕсли;
       ЗапросОбъектовМВТ.Текст = ЗапросОбъектовМВТ.Текст + " ПОМЕСТИТЬ Объекты ИЗ
       |    РегистрСведений.СостояниеОбъектаОНОФ.СрезПоследних(
       |            &ДатаАктуальности,"+?(ВсеОбъекты,"","РазрешенаОтгрузка = ИСТИНА  И ДатаОкончания >= &ДатаАктуальности И ДатаНачала <= &ДатаАктуальности")+") КАК СостояниеОбъектаОНОФСрезПоследних
       |        "+?(ВсеОбъекты,"ЛЕВОЕ ","ВНУТРЕННЕЕ ")+"СОЕДИНЕНИЕ Справочник.НоменклатурныеГруппы КАК НоменклатурныеГруппы
       |        ПО СостояниеОбъектаОНОФСрезПоследних.Объект = НоменклатурныеГруппы.Ссылка";
       Если Таблица = ОбъектыМБП тогда
           ЗапросОбъектовМВТ.Текст = ЗапросОбъектовМВТ.Текст + " ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ДопЗатратыПроекта.Обороты(, &ДатаАктуальности, , Статья = &СтатьяМБП) КАК ДопЗатратыПроектаОбороты
           |        ПО НоменклатурныеГруппы.Проект = ДопЗатратыПроектаОбороты.Проект
           |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.НезавершенноеПроизводство.Остатки(&ДатаАктуальности, СтатьяЗатрат = &СтатьяМБП) КАК НезавершенноеПроизводствоОстатки
           |        ПО НоменклатурныеГруппы.Ссылка = НезавершенноеПроизводствоОстатки.НоменклатурнаяГруппа.Ссылка";
       КонецЕсли;
       
       ЗапросОбъектовМВТ.УстановитьПараметр("ДатаАктуальности", ДатаАктуальности);
       ЗапросОбъектовМВТ.УстановитьПараметр("СтатьяМБП",константы.СтатьяЗатратМБП.Получить());
       
       Результат = ЗапросОбъектовМВТ.Выполнить();
       
       ЗапросОбъектов=Новый Запрос("ВЫБРАТЬ * ИЗ Объекты");
       ЗапросОбъектов.МенеджерВременныхТаблиц=ЗапросОбъектовМВТ.МенеджерВременныхТаблиц;
       Результат=ЗапросОбъектов.Выполнить().Выгрузить();
5 LamerSuper
 
02.12.08
17:15
бщий смысл есть Регистр сведений состояние объектов в нем ДатаНачала проекта и Дата окончания. В регистре несколько записей.
Кусок кода: вроде правильный:
ЗапросОбъектовМВТ.Текст = ЗапросОбъектовМВТ.Текст + " ПОМЕСТИТЬ Объекты ИЗ
       |    РегистрСведений.СостояниеОбъектаОНОФ.СрезПоследних(
       |            &ДатаАктуальности,"+?(ВсеОбъекты,"","РазрешенаОтгрузка = ИСТИНА  И ДатаОкончания >= &ДатаАктуальности И ДатаНачала <= &ДатаАктуальности")+") КАК СостояниеОбъектаОНОФСрезПоследних

Но он не вернет 1 запись последнюю.
6 v_rtex
 
02.12.08
17:16
а если убрать ПОМЕСТИТЬ, выборка какая-нибудь возвращается?..
7 Маркетолог
 
модератор
02.12.08
17:21
(5) Попробуй убрать условие:
"+?(ВсеОбъекты,"","РазрешенаОтгрузка = ИСТИНА  И ДатаОкончания >= &ДатаАктуальности И ДатаНачала <= &ДатаАктуальности")+"
8 LamerSuper
 
02.12.08
17:23
Выборка и с поместить возвращается и помещается
9 LamerSuper
 
02.12.08
17:27
(7) Этот как раз нужное условие. Все из за него. Понимаю что запрос не для типовой но прошлые разы когда писал вопросы все писали выложи типа запрос. Я отвечал что не типовая. Все равно не понять надо вникать в конфу. Народ обижался. Вот и выкладываю запрос.
10 hhhh
 
02.12.08
17:30
(2) там еще зависит от измерений. Для каждого набора значений измерений свой срез. Например, если у тебя измерение номенклатура и в справочнике номенклатуре 100000 элементов, то существует 100000 различных срезов на требуемую дату.
11 Маркетолог
 
02.12.08
17:34
(9)Тогда утверждение в (0) неверно:))
  Есть лиуверенность что это условие выполняется для строки которая не попадает ?
12 LamerSuper
 
02.12.08
17:41
Грубо говоря:
счас 02/12/08
в Регистре сведений записи

 Дата Записи             ДатаНачала    ДатаКонца
1 02/12/08 16:00            01/10/08     02/10/08
2 02/12/08 16:01            10/12/08     12/12/08
3 02/12/08 16:02            01/12/08     05/12/08
4 02/12/08 16:03            01/10/08     02/10/08

Дык срез последних этого запроса должен вернуть 4 запись
а он еще и на 3 запись смотрит.
13 НЕА123
 
02.12.08
17:42
а зачем, если в условии уже все есть?

       |    ВЫБОР
       |        КОГДА СостояниеОбъектаОНОФСрезПоследних.РазрешенаОтгрузка = ИСТИНА
       |                И СостояниеОбъектаОНОФСрезПоследних.ДатаОкончания >= &ДатаАктуальности И СостояниеОбъектаОНОФСрезПоследних.ДатаНачала <= &ДатаАктуальности
       |            ТОГДА ИСТИНА
       |        ИНАЧЕ ЛОЖЬ
       |    КОНЕЦ КАК ОтгрузкаРазрешена,
14 LamerSuper
 
02.12.08
17:43
(13) Чтоб уменьшить виртуальную таблицу.
15 hhhh
 
02.12.08
17:44
(12) измерения регистра какие? Если в 3 и 4 записях разные значения измерений, то они обе должны вернуться.
16 LamerSuper
 
02.12.08
17:46
Измерение 1 Объект(Номенклатурная группа)
17 НЕА123
 
02.12.08
17:46
(14) я, в смысле почему не просто
      |    Истина КАК ОтгрузкаРазрешена,
18 НЕА123
 
02.12.08
17:48
(12) 02/12/08 между 01/10/08     02/10/08 ?
19 hhhh
 
02.12.08
17:48
(16) Объекты по 3й и 4й записи в студию.
20 LamerSuper
 
02.12.08
17:52
Это один и тот же объект. Смысл в том что если в регисстре вдруг появились записи что сроки объекта в прошлом то сам объект не должен попадать в выборку. Но он попадает.
(17) Дык левое соединение. Записей может и не быть. А значение должно быть. Это разными цветами потом выводится на форме.
21 hhhh
 
02.12.08
17:59
(20) но у тебя 3я запись как раз в настоящем. Вот она и попала
22 НЕА123
 
02.12.08
17:59
(20) хммм... видно, я уже ниего не понимаю. пойду, полечусь пивком.
23 LamerSuper
 
02.12.08
17:59
(21) Дык срез последних на 02/12/08 16:03
24 LamerSuper
 
02.12.08
18:00
а это запись четвертая
25 hhhh
 
02.12.08
18:01
(23) все понял. Сначала идет проверка твоего условия. Запись 4 отсеивается. А потом берется срез последних. Естественно попадает запись 3.
26 LamerSuper
 
02.12.08
18:07
(25) Гениально спасибо
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.