Имя: Пароль:
1C
1С v8
Срез последних двух
, ,
0 newbling
 
23.08.18
16:44
Добрый день. Задача получить из периодического регистра сведений из, в  которой будут актуальные на определенную дату значения и значение до них.

Например, в рс:
Филиал1, Физлицо1 на 01.01.2018
Филиал1, Физлицо2 на 02.01.2018
Филиал1, Физлицо3 на 03.01.2018
Филиал2, Физлицо4 на 01.01.2018


При параметре среза на 02.01.2018 нам вернёт:
Филиал1, Физлицо3, Физлицо2
Филиал2, Физлицо4, null
1 newbling
 
23.08.18
16:44
Из=тз.
Автозамена
2 dmt
 
23.08.18
16:46
3 dmt
 
23.08.18
16:47
тоже задание при приеме на работу?
4 newbling
 
23.08.18
16:54
5 Ботаник Гарден Меран
 
23.08.18
16:54
Всегда забываю, но помню где найти.
Понадобилось пару раз за все годы.
6 dmt
 
23.08.18
17:04
Вот значит о чем вчера говорили

     И Цены1.Период В
           (ВЫБРАТЬ ПЕРВЫЕ 1
                ТЗЦены.Период
            ИЗ
                Цены КАК ТЗЦены
            ГДЕ
                ТЗЦены.Номенклатура = Цены.Номенклатура
            УПОРЯДОЧИТЬ ПО
                ТЗЦены.Период УБЫВ)
7 unregistered
 
23.08.18
17:28
(6) Для одной номенклатуры катит. Для всех номенклатур уже не получится.
8 unregistered
 
23.08.18
17:32
Можно что-то типа этого использовать. Это запрос должен получать последнее подразделение, где работал сотрудник с датой назначения и предпоследнее с датой назначения.
Но я не уверен, что правильно понял суть задания в (0).

    ВЫБРАТЬ
        КадроваяИсторияСотрудников.Сотрудник КАК Сотрудник,
        МАКСИМУМ(КадроваяИсторияСотрудников.Период) КАК Период
    ПОМЕСТИТЬ ВТ_СрезПоследних
    ИЗ
        РегистрСведений.КадроваяИсторияСотрудников КАК КадроваяИсторияСотрудников
    ГДЕ
        КадроваяИсторияСотрудников.Период <= &Период

    СГРУППИРОВАТЬ ПО
        КадроваяИсторияСотрудников.Сотрудник
    ;

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

    СГРУППИРОВАТЬ ПО
        КадроваяИсторияСотрудников.Сотрудник
    ;

    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ
        КадроваяИсторияСотрудников.Сотрудник КАК Сотрудник,
        ВЫБОР
            КОГДА НЕ ВТ_СрезПоследних.Сотрудник ЕСТЬ NULL
                ТОГДА КадроваяИсторияСотрудников.Подразделение
            ИНАЧЕ NULL
        КОНЕЦ КАК ПоследнееПодразделение,
        ВЫБОР
            КОГДА НЕ ВТ_СрезПоследних.Сотрудник ЕСТЬ NULL
                ТОГДА КадроваяИсторияСотрудников.Период
            ИНАЧЕ NULL
        КОНЕЦ КАК ПериодПоследнегоПодразделения,
        ВЫБОР
            КОГДА НЕ ВТ_СрезПредпоследних.Сотрудник ЕСТЬ NULL
                ТОГДА КадроваяИсторияСотрудников.Подразделение
            ИНАЧЕ NULL
        КОНЕЦ КАК ПредпослденееПодразделение,
        ВЫБОР
            КОГДА НЕ ВТ_СрезПредпоследних.Сотрудник ЕСТЬ NULL
                ТОГДА КадроваяИсторияСотрудников.Период
            ИНАЧЕ NULL
        КОНЕЦ КАК ПериодПредпоследнегоПодразделения
    ИЗ
        РегистрСведений.КадроваяИсторияСотрудников КАК КадроваяИсторияСотрудников
            ЛЕВОЕ СОЕДИНЕНИЕ ВТ_СрезПоследних КАК ВТ_СрезПоследних
            ПО (КадроваяИсторияСотрудников.Сотрудник = ВТ_СрезПоследних.Сотрудник)
                И (КадроваяИсторияСотрудников.Период = ВТ_СрезПоследних.Период)
            ЛЕВОЕ СОЕДИНЕНИЕ ВТ_СрезПредпоследних КАК ВТ_СрезПредпоследних
            ПО (КадроваяИсторияСотрудников.Сотрудник = ВТ_СрезПредпоследних.Сотрудник)
                И (КадроваяИсторияСотрудников.Период = ВТ_СрезПредпоследних.Период)
    ГДЕ
        НЕ(ВТ_СрезПоследних.Сотрудник ЕСТЬ NULL
                    И ВТ_СрезПредпоследних.Сотрудник ЕСТЬ NULL)
9 dmt
 
23.08.18
17:34
(7) вот полный код из ссылки в (4), плюсы - в простоте и универсальности

ВЫБРАТЬ
    ЦеныНоменклатуры.Период КАК Период,
    ЦеныНоменклатуры.Регистратор,
    ЦеныНоменклатуры.НомерСтроки,
    ЦеныНоменклатуры.Активность,
    ЦеныНоменклатуры.Номенклатура КАК Номенклатура,
    ЦеныНоменклатуры.ТипЦен КАК ТипЦен,
    ЦеныНоменклатуры.Качество КАК Качество,
    ЦеныНоменклатуры.Цена,
    ЦеныНоменклатуры.Валюта,
    ЦеныНоменклатуры.ЕдиницаИзмерения,
    ЦеныНоменклатуры.ЦенаВключаетНДС
ИЗ
    РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
ГДЕ
    ЦеныНоменклатуры.Период В
            (ВЫБРАТЬ ПЕРВЫЕ 2
                РегистрВложенный.Период
            ИЗ
                РегистрСведений.ЦеныНоменклатуры КАК РегистрВложенный
            ГДЕ
                РегистрВложенный.Номенклатура = ЦеныНоменклатуры.Номенклатура
                И РегистрВложенный.ТипЦен = ЦеныНоменклатуры.ТипЦен
                И РегистрВложенный.Качество = ЦеныНоменклатуры.Качество
            УПОРЯДОЧИТЬ ПО
                РегистрВложенный.Период УБЫВ)

УПОРЯДОЧИТЬ ПО
    Номенклатура,
    ТипЦен,
    Качество,
    Период
10 dmt
 
23.08.18
17:35
Такого не знал, так что (0) - спасибо!