Вход | Регистрация

1С:Предприятие ::

Метки: 

Срез последних двух

Я
   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
 
 
   newbling
 
1 - 23.08.18 - 16:44
Из=тз.
Автозамена
   dmt
 
2 - 23.08.18 - 16:46

   dmt
 
3 - 23.08.18 - 16:47
тоже задание при приеме на работу?
   newbling
 
4 - 23.08.18 - 16:54
   Ботаник Гарден Меран
 
5 - 23.08.18 - 16:54
Всегда забываю, но помню где найти.
Понадобилось пару раз за все годы.
   dmt
 
6 - 23.08.18 - 17:04
Вот значит о чем вчера говорили

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

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

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

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

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

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

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

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

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

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


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