Имя: Пароль:
1C
1С v8
Выбрать из двух записей одного регистра сведений
,
0 ЛучшийПрограммер1С
 
04.05.16
16:24
ВЫБРАТЬ
        УстановленоНаТС.Период КАК ДатаУстановкиШиныНаТС,
        СнятоСТС.Период КАК ДатаСнятияШиныСТС,
    ИЗ
        РегистрСведений.уатАгрегатыТС КАК УстановленоНаТС
            ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.уатАгрегатыТС.СрезПервых(УстановленоНаТС.Период , ) КАК СнятоСТС
            ПО УстановленоНаТС.СерияНоменклатуры = СнятоСТС.СерияНоменклатуры
                И УстановленоНаТС.ТС = СнятоСТС.ТС
                И (СнятоСТС.СостояниеАгрегата = ЗНАЧЕНИЕ(Перечисление.уатСостоянияАгрегатов.Снято))
    ГДЕ
        УстановленоНаТС.СерияНоменклатуры = &Шина
        И УстановленоНаТС.СостояниеАгрегата = ЗНАЧЕНИЕ(Перечисление.уатСостоянияАгрегатов.УстановленоВРаботе)


Вот это РегистрСведений.уатАгрегатыТС.СрезПервых(УстановленоНаТС.Период , ) не работает - Если так РегистрСведений.уатАгрегатыТС.СрезПервых(&УстановленоНаТСПериод , ) то работает, но я не знаю - мне надо для каждой даты одной найти другую близлежащую
1 Timon1405
 
04.05.16
16:26
2 ЛучшийПрограммер1С
 
04.05.16
16:30
(1) Да, но какое отношение к моему запросу это имеет?
3 ЛучшийПрограммер1С
 
04.05.16
16:30
Мне надо на первую дату после даты в том же регистре
4 Nuobu
 
04.05.16
16:47
Когда через 20 лет меня спросят: "Какие ветки создают на мисте, то я отвечу: "Про срез последних на дату из запроса".".
5 ЛучшийПрограммер1С
 
05.05.16
08:38
(4) А по теме?
6 SergTheGreat
 
05.05.16
09:14
Прочитай внимательно книгу знаний, по ссылке из (1).
Общий принцип такой - забываешь про срезы и работаешь с основной таблицей, сначала выбираешь нужные даты, а потом по ним выбираешь записи регистра.
7 ЛучшийПрограммер1С
 
05.05.16
09:29
(6) Да мне не нужны записи регистра - мне нужны только даты
8 ЛучшийПрограммер1С
 
05.05.16
09:30
Ну и записи нужны, но сейчас не пойму как достать даты
9 ЛучшийПрограммер1С
 
05.05.16
09:33
Ну вот допустим

ВЫБРАТЬ
        УстановленоНаТС.Период КАК ДатаУстановкиШиныНаТС,
        СнятоСТС.Период КАК ДатаСнятияШиныСТС
    ИЗ
        РегистрСведений.уатАгрегатыТС КАК УстановленоНаТС
            ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.уатАгрегатыТС КАК СнятоСТС
            ПО УстановленоНаТС.СерияНоменклатуры = СнятоСТС.СерияНоменклатуры
                И УстановленоНаТС.ТС = СнятоСТС.ТС
                И (СнятоСТС.СостояниеАгрегата = ЗНАЧЕНИЕ(Перечисление.уатСостоянияАгрегатов.Снято))
    ГДЕ
        УстановленоНаТС.СерияНоменклатуры = &Шина
        И УстановленоНаТС.СостояниеАгрегата = ЗНАЧЕНИЕ(Перечисление.уатСостоянияАгрегатов.УстановленоВРаботе)

Я получаю:

23.11.2013 22:46:00 21.03.2014 22:46:00
23.11.2013 22:46:00 25.02.2015 22:46:00
05.11.2014 9:00:00 21.03.2014 22:46:00
05.11.2014 9:00:00 25.02.2015 22:46:00

А мне надо:
23.11.2013 22:46:00 21.03.2014 22:46:00
05.11.2014 9:00:00 25.02.2015 22:46:00
10 ЛучшийПрограммер1С
 
05.05.16
09:34
Если бы можно было брать срез - только следующую дату, то получилось бы, но почему-то нельзя
11 ЛучшийПрограммер1С
 
05.05.16
09:35
То есть мы шину поставили, затем сняли, затем поставили, затем сняли - по времени периоды
12 ЛучшийПрограммер1С
 
05.05.16
09:36
(6) Вот - проблема в том, что нужно выбрать нужные даты
13 Aistovich
 
05.05.16
09:42
шину не снимут сначала её не поставив, вот ответ на твой вопрос
уат- сила!
14 SergTheGreat
 
05.05.16
09:42
Чем строчить в форум, потрать еще несколько минут и прочитай книгу знаний внимательно!
В твоем запросе не хватает условия >= по периоду и агрегата МИНИМУМ.
15 ЛучшийПрограммер1С
 
05.05.16
09:43
(13) Ну это понятно что не снимут. Мне отчет надо сделать в котором будут строчки
когда поставили | когда сняли
когда поставили | когда сняли
когда поставили | когда сняли
когда поставили | когда сняли
когда поставили | когда сняли
когда поставили | когда сняли
когда поставили | когда сняли
...
16 Aistovich
 
05.05.16
09:44
(15) ну классический левачок напрашивается
17 ЛучшийПрограммер1С
 
05.05.16
09:45
(14) Где именно читать?
18 ЛучшийПрограммер1С
 
05.05.16
09:45
(16) Да, только в левачок не засовывается дата в правочок
19 ЛучшийПрограммер1С
 
05.05.16
09:46
был бы нормальный скл с виденьем во внутреннем запросе из внешнего даты
20 mistеr
 
05.05.16
09:47
(0) Если у тебя только одна шина, сделай два запроса.
21 Aistovich
 
05.05.16
09:47
(18) та это однозначно Срез последних на каждую дату в запросе + слева пустые даты если шину не поставили
22 Aistovich
 
05.05.16
09:48
(20) а если 6?
23 mistеr
 
05.05.16
09:49
(15) ЛОЛ, это же элементарно. Делай один запрос по таблице регистра, сортируй по дате и рисуй отчет.
24 hhhh
 
05.05.16
09:49
(22) шестиколесный автомобиль?
25 ЛучшийПрограммер1С
 
05.05.16
09:51
(24) В основном да, но там по каждой шине учет отдельно
26 Aistovich
 
05.05.16
09:51
+(21) Срез последних на каждую дату в запросе + слева/ справа пустые даты если шину не поставили/сняли
27 Aistovich
 
05.05.16
09:54
тута проблема в том что завтыкается установка/снятие
28 ЛучшийПрограммер1С
 
05.05.16
09:55
(26) чо?
29 ЛучшийПрограммер1С
 
05.05.16
09:57
(20) Мне нужно результат в одном запросе. Одна шина может ставиться на 1 авто, затем на другой, затем на третий и т. д.
30 Aistovich
 
05.05.16
09:58
поставили | сняли
завтыкали | сняли
поставили | сняли
завтыкали | сняли
поставили | завтыкали
завтыкали | сняли
поставили | сняли
31 SergTheGreat
 
05.05.16
10:16
(17) Ты издеваешься? Тебе в первом же ответе дали ссылку (1). Берешь оттуда код запроса, делаешь левое соединение основной таблицы регистра с ней же, меняешь < на > и МАКСИМУМ на МИНИМУМ.
32 ЛучшийПрограммер1С
 
05.05.16
10:19
(30) Завтыкали?
33 ЛучшийПрограммер1С
 
05.05.16
10:22
(31) Ну вот беру

    ВЫБРАТЬ
     Таблица3.Ресурс,
     Таблица3.Измерение,
     Таблица3.Период
    ИЗ
     (ВЫБРАТЬ
      Таблица1.Измерение КАК Измерение,
      МИНИМУМ(Таблица1.Период) КАК Период
     ИЗ
      РегистрСведений.ПериодическийРегистр КАК Таблица1
    ГДЕ
      Таблица1.Период >= &Дата
     СГРУППИРОВАТЬ ПО
      Таблица1.Измерение) КАК Таблица2
      ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ПериодическийРегистр КАК Таблица3
      ПО Таблица2.Измерение= Таблица3.Измерение
       И Таблица2.Период = Таблица3.Период
34 ЛучшийПрограммер1С
 
05.05.16
10:24
Но что здесь &Дата ?
35 ЛучшийПрограммер1С
 
05.05.16
10:34
То есть решения в 1С данной проблемы нет?
36 hhhh
 
05.05.16
10:44
(35) пригласите нормального специалиста. Кого вы там понабрали?
37 ЛучшийПрограммер1С
 
05.05.16
10:48
(36) Да чо, если на мисте никто не знает ...
38 Wern
 
05.05.16
10:50
(37) в (1) нужно читать текст, а не брать первый попавшийся кусок кода. Неужели прочитать пару абзацев текста это очень сложно?
39 catena
 
05.05.16
10:54
(37)Забесплатно вообще мало кто чего знает...
40 ЛучшийПрограммер1С
 
05.05.16
10:58
(38) Ну так бы сразу и сказали
41 ЛучшийПрограммер1С
 
05.05.16
11:00
ВЫБРАТЬ
        УстановленоНаТС.Период КАК ДатаУстановкиШиныНаТС,
        Минимум(СнятоСТС.Период) КАК ДатаСнятияШиныСТС
    ИЗ
        РегистрСведений.уатАгрегатыТС КАК УстановленоНаТС
            ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.уатАгрегатыТС КАК СнятоСТС
            ПО УстановленоНаТС.СерияНоменклатуры = СнятоСТС.СерияНоменклатуры
                И УстановленоНаТС.ТС = СнятоСТС.ТС
                И (СнятоСТС.СостояниеАгрегата = ЗНАЧЕНИЕ(Перечисление.уатСостоянияАгрегатов.Снято))
                И СнятоСТС.Период>=УстановленоНаТС.Период
    ГДЕ            
        УстановленоНаТС.СерияНоменклатуры = &Шина
        И УстановленоНаТС.СостояниеАгрегата = ЗНАЧЕНИЕ(Перечисление.уатСостоянияАгрегатов.УстановленоВРаботе)
    Сгруппировать по УстановленоНаТС.Период
42 ЛучшийПрограммер1С
 
05.05.16
11:22
ВЫБРАТЬ
        УстановленоНаТС.Период КАК ДатаУстановкиШиныНаТС,
        Минимум(СнятоСТС.Период) КАК ДатаСнятияШиныСТС
    ПОМЕСТИТЬ ДатыСменыШин
    ИЗ
        РегистрСведений.уатАгрегатыТС КАК УстановленоНаТС
            ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.уатАгрегатыТС КАК СнятоСТС
            ПО УстановленоНаТС.СерияНоменклатуры = СнятоСТС.СерияНоменклатуры
                И УстановленоНаТС.ТС = СнятоСТС.ТС
                И (СнятоСТС.СостояниеАгрегата = ЗНАЧЕНИЕ(Перечисление.уатСостоянияАгрегатов.Снято))
                И СнятоСТС.Период>=УстановленоНаТС.Период
    ГДЕ            
        УстановленоНаТС.СерияНоменклатуры = &Шина
        И УстановленоНаТС.СостояниеАгрегата = ЗНАЧЕНИЕ(Перечисление.уатСостоянияАгрегатов.УстановленоВРаботе)
    СГРУППИРОВАТЬ ПО УстановленоНаТС.Период;
        
    ВЫБРАТЬ
        УстановленоНаТС.Период КАК ДатаУстановкиШиныНаТС,
        УстановленоНаТС.СерияНоменклатуры КАК Шины,
        СнятоСТС.Период КАК ДатаСнятияШиныСТС,
        УстановленоНаТС.ТС КАК ТС,
        УстановленоНаТС.ТС.Модель КАК МодельТС,
        УстановленоНаТС.ТС.ГаражныйНомер КАК ИнвНомерТС,
        УстановленоНаТС.ТС.ГосударственныйНомер КАК ГосударственныйНомер,
        СнятоСТС.Регистратор.ПричинаОбращения КАК РегистраторПричинаОбращения,
        УстановленоНаТС.Регистратор УстановленоНаТС_Регистратор,
        СнятоСТС.Регистратор СнятоСТС_Регистратор
    ИЗ
        ДатыСменыШин КАК ДатыСменыШин
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.уатАгрегатыТС КАК УстановленоНаТС
            ПО ДатыСменыШин.ДатаУстановкиШиныНаТС=УстановленоНаТС.Период
                И УстановленоНаТС.СерияНоменклатуры = &Шина
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.уатАгрегатыТС КАК СнятоСТС
            ПО ДатыСменыШин.ДатаСнятияШиныСТС=СнятоСТС.Период
            И СнятоСТС.СерияНоменклатуры = &Шина
43 breezee
 
05.05.16
11:30
(4) Чуть на весь офис не проорал. Еще давно поднимал эту же тему 2 раза и видел как её постоянно поднимают
44 ЛучшийПрограммер1С
 
05.05.16
11:53
Поднимают тему поднимают,
Но никак не могут уж поднять!
Все по офисам орут, стебают
А ведь воз, то он и ныне ...

Регистратор ты мой Регистратор
Сведений ты периодический
Периодически души ты нам дозатор
Выбрать дату все-таки смогли!
45 catena
 
05.05.16
11:57
(44)Ну а теперь можешь загуглить "СКД+срез последних на каждую дату")))
46 ЛучшийПрограммер1С
 
05.05.16
14:41
(45) Период В (ВЫБРАТЬ ПЕРВЫЕ 1 ...

Не, мне теперь надо по каждому периоду дат получить обороты из регистра накопления
47 ЛучшийПрограммер1С
 
05.05.16
14:57
Код:

ВЫБРАТЬ 0 КАК колво ПОМЕСТИТЬ Разряд
        ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 1  ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 2  ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 3
        ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 4  ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 5  ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 6
        ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 7  ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 8  ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 9;
    
ВЫБРАТЬ
        Сотни.колво * 100 + Десятки.колво * 10 + Единицы.колво КАК Номер
    ПОМЕСТИТЬ Числа
        ИЗ Разряд КАК Сотни
        ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ Разряд.колво) КАК Десятки ПО (ИСТИНА)
        ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ Разряд.колво) КАК Единицы ПО (ИСТИНА);

ВЫБРАТЬ
        УстановленоНаТС.Период КАК ДатаУстановкиШиныНаТС,
        Минимум(СнятоСТС.Период) КАК ДатаСнятияШиныСТС
    ПОМЕСТИТЬ ДатыСменыШин
    ИЗ
        РегистрСведений.уатАгрегатыТС КАК УстановленоНаТС
            ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.уатАгрегатыТС КАК СнятоСТС
            ПО УстановленоНаТС.СерияНоменклатуры = СнятоСТС.СерияНоменклатуры
                И УстановленоНаТС.ТС = СнятоСТС.ТС
                И (СнятоСТС.СостояниеАгрегата = ЗНАЧЕНИЕ(Перечисление.уатСостоянияАгрегатов.Снято))
                И СнятоСТС.Период>=УстановленоНаТС.Период
    ГДЕ            
        УстановленоНаТС.СерияНоменклатуры = &Шина
        И УстановленоНаТС.СостояниеАгрегата = ЗНАЧЕНИЕ(Перечисление.уатСостоянияАгрегатов.УстановленоВРаботе)
    СГРУППИРОВАТЬ ПО УстановленоНаТС.Период;
    
ВЫБРАТЬ
        Д.ДатаУстановкиШиныНаТС,
        Д.ДатаСнятияШиныСТС,
        Выбор когда Месяцы.Номер=0 Тогда Д.ДатаУстановкиШиныНаТС иначе НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(Д.ДатаУстановкиШиныНаТС, Месяц, Месяцы.Номер), Месяц) конец ДатаУст,
        Выбор когда Месяцы.Номер=РазностьДат(Д.ДатаУстановкиШиныНаТС, Д.ДатаСнятияШиныСТС, Месяц) тогда Д.ДатаСнятияШиныСТС иначе
         КонецПЕРИОДА(ДОБАВИТЬКДАТЕ(Д.ДатаУстановкиШиныНаТС, Месяц, Месяцы.Номер), Месяц) конец ДатаСн
    ПОМЕСТИТЬ ДатыСменыШинПоМесяцам
    ИЗ ДатыСменыШин КАК Д
    ВНУТРЕННЕЕ СОЕДИНЕНИЕ Числа КАК Месяцы
        ПО (ДОБАВИТЬКДАТЕ(Д.ДатаУстановкиШиныНаТС, Месяц, Месяцы.Номер) МЕЖДУ Д.ДатаУстановкиШиныНаТС И КонецПериода(Д.ДатаСнятияШиныСТС, Месяц));

ВЫБРАТЬ
        ДатыСменыШин.ДатаУст,
        ДатыСменыШин.ДатаСн,
        УстановленоНаТС.Период КАК ДатаУстановкиШиныНаТС,
        УстановленоНаТС.СерияНоменклатуры КАК Шины,
        СнятоСТС.Период КАК ДатаСнятияШиныСТС,
        УстановленоНаТС.ТС КАК ТС,
        УстановленоНаТС.ТС.Модель КАК МодельТС,
        УстановленоНаТС.ТС.ГаражныйНомер КАК ИнвНомерТС,
        УстановленоНаТС.ТС.ГосударственныйНомер КАК ГосударственныйНомер,
        СнятоСТС.Регистратор.ПричинаОбращения КАК РегистраторПричинаОбращения,
        УстановленоНаТС.Регистратор УстановленоНаТС_Регистратор,
        СнятоСТС.Регистратор СнятоСТС_Регистратор
    ПОМЕСТИТЬ ШиныПомесячно
    ИЗ
        ДатыСменыШинПоМесяцам КАК ДатыСменыШин
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.уатАгрегатыТС КАК УстановленоНаТС
            ПО ДатыСменыШин.ДатаУстановкиШиныНаТС=УстановленоНаТС.Период
                И УстановленоНаТС.СерияНоменклатуры = &Шина
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.уатАгрегатыТС КАК СнятоСТС
            ПО ДатыСменыШин.ДатаСнятияШиныСТС=СнятоСТС.Период
            И СнятоСТС.СерияНоменклатуры = &Шина;
            
ВЫБРАТЬ
            уатИзносПробегШинОбороты.ТС КАК ТС,
            уатИзносПробегШинОбороты.СерияНоменклатуры КАК СерияНоменклатуры,
            уатИзносПробегШинОбороты.Организация КАК Организация,
            СУММА(уатИзносПробегШинОбороты.ПробегОборот) КАК ПробегОборот
        ИЗ  ШиныПомесячно как Ш
        Левое соединение
            РегистрНакопления.уатИзносПробегШин.Обороты(Ш.ДатаУст, Ш.ДатаСн, Регистратор, СерияНоменклатуры = &Шина) КАК уатИзносПробегШинОбороты
            ПО Ш.Шины = уатИзносПробегШинОбороты.СерияНоменклатуры
            И Ш.ТС = уатИзносПробегШинОбороты.ТС

        СГРУППИРОВАТЬ ПО
            уатИзносПробегШинОбороты.ТС,
            уатИзносПробегШинОбороты.Организация,
            уатИзносПробегШинОбороты.СерияНоменклатуры
                                
            
            //) КАК ПробегЗаМесяц
    
Не работает - РегистрНакопления.уатИзносПробегШин.Обороты не воспринимает параметр из другой таблицы, та же засада, что и с РС
48 SergTheGreat
 
05.05.16
16:53
Итить-разитить !!!
Вот пример на типовейшем регистре "Курсы валют". Во временную таблицу выбираются все даты регистра и к каждой из них минимальная из следующих. В основной выборке на каждую из следующих дат определяется курс, все из того же регистра.

ВЫБРАТЬ
    КурсыВалют.Период КАК ТекПериод,
    МИНИМУМ(КурсыВалют1.Период) КАК СледПериод,
    КурсыВалют.Валюта,
    КурсыВалют.Курс КАК ТекКурс
ПОМЕСТИТЬ втСледующие
ИЗ
    РегистрСведений.КурсыВалют КАК КурсыВалют
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют КАК КурсыВалют1
        ПО КурсыВалют.Валюта = КурсыВалют1.Валюта
            И КурсыВалют.Период < КурсыВалют1.Период

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