8.х Запрос по регистру бухгалтерии

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем Gunner, 22 окт 2014.

  1. TopicStarter Overlay
    Gunner
    Offline

    Gunner Опытный в 1С

    Регистрация:
    10 авг 2011
    Сообщения:
    86
    Симпатии:
    1
    Баллы:
    29
    Помогите плиз, в голову уже ничего не лезет :(
    Необходимо сформировать отчет по остаткам номенклатуры по счету с группировкой по реквизиту из регистратора.
    Т.е. необходимо получить последнее движение номенклатуры с регистратором из регистра бухгалтерии, и из этого регистратора вытащить нужный реквизит. Как это сделать?
  2. Yury
    Offline

    Yury Опытный в 1С

    Регистрация:
    22 дек 2011
    Сообщения:
    355
    Симпатии:
    4
    Баллы:
    29
    Можно сделать следующим образом:
    1. Запрос к виртуальному регистру ОстаткиИОбороты вот такого плана:
    Код:
    ВЫБРАТЬ
        ПартииТоваровНаСкладахОстаткиИОбороты.Номенклатура КАК Номенклатура,
        МАКСИМУМ(ПартииТоваровНаСкладахОстаткиИОбороты.ПериодДень) КАК ПериодДень
    ИЗ
        РегистрНакопления.ПартииТоваровНаСкладах.ОстаткиИОбороты(, {(&НачДата)}, Авто, , ) КАК ПартииТоваровНаСкладахОстаткиИОбороты
    ГДЕ
        ПартииТоваровНаСкладахОстаткиИОбороты.СтоимостьКонечныйОстаток <> 0
        И ПартииТоваровНаСкладахОстаткиИОбороты.ПериодДень < &НачДата
    
    СГРУППИРОВАТЬ ПО
        ПартииТоваровНаСкладахОстаткиИОбороты.Номенклатура
    Этот запрос вернет тебе дату когда последний раз проходила номенклатура по регистру.

    2. Связать это результат этого запроса с виртуально таблицей ОстаткиИОбороты вытащив регистратор. А имея регистратор -- вытащишь нужный реквизит. Запрос такого типа:
    Код:
    ВЫБРАТЬ
        ПартииТоваровНаСкладахОстаткиИОбороты.Номенклатура КАК Номенклатура,
        ВложенныйЗапрос.ПериодДень КАК ПериодДень,
        ВЫБОР
            КОГДА ПартииТоваровНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток <> 0
                ТОГДА ПартииТоваровНаСкладахОстаткиИОбороты.СтоимостьКонечныйОстаток / ПартииТоваровНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток
            ИНАЧЕ 0
        КОНЕЦ КАК ЦенаПоследнегоОстатка
    ИЗ
        (ВЫБРАТЬ
            ПартииТоваровНаСкладахОстаткиИОбороты.Номенклатура КАК Номенклатура,
            МАКСИМУМ(ПартииТоваровНаСкладахОстаткиИОбороты.ПериодДень) КАК ПериодДень
        ИЗ
            РегистрНакопления.ПартииТоваровНаСкладах.ОстаткиИОбороты(, {(&НачДата)}, Авто, , ) КАК ПартииТоваровНаСкладахОстаткиИОбороты
        ГДЕ
            ПартииТоваровНаСкладахОстаткиИОбороты.СтоимостьКонечныйОстаток <> 0
            И ПартииТоваровНаСкладахОстаткиИОбороты.ПериодДень < &НачДата
       
        СГРУППИРОВАТЬ ПО
            ПартииТоваровНаСкладахОстаткиИОбороты.Номенклатура) КАК ВложенныйЗапрос
            ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.ПартииТоваровНаСкладах.ОстаткиИОбороты(, {(&НачДата)}, Авто, , ) КАК ПартииТоваровНаСкладахОстаткиИОбороты
            ПО ВложенныйЗапрос.Номенклатура = ПартииТоваровНаСкладахОстаткиИОбороты.Номенклатура
                И ВложенныйЗапрос.ПериодДень = ПартииТоваровНаСкладахОстаткиИОбороты.ПериодДень
    Только в нем я вытаскиваю последнюю цену, а ты вытащи что нужно.

    Как-то так.
  3. TopicStarter Overlay
    Gunner
    Offline

    Gunner Опытный в 1С

    Регистрация:
    10 авг 2011
    Сообщения:
    86
    Симпатии:
    1
    Баллы:
    29
    А такой запрос будет работать?
    Код:
    ВЫБРАТЬ
        ХозрасчетныйОстатки.Субконто1 КАК Номенклатура,
        ХозрасчетныйОстатки.СуммаОстаток
    ПОМЕСТИТЬ ВТОстатки
    ИЗ
        РегистрБухгалтерии.Хозрасчетный.Остатки(&Период, Счет = &Счет, , Организация = &Организация) КАК ХозрасчетныйОстатки
    ;
    
    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ
        ВТОстатки.Номенклатура,
        ВТОстатки.СуммаОстаток КАК СуммаОстаток,
        ХозрасчетныйОстаткиИОбороты.Регистратор,
        ВЫБОР
            КОГДА ХозрасчетныйОстаткиИОбороты.Регистратор ССЫЛКА Документ.ПоступлениеТоваровУслуг
                ТОГДА ХозрасчетныйОстаткиИОбороты.Регистратор.ОбъектСтроительства
            ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ОбъектыСтроительства.ПустаяСсылка)
        КОНЕЦ КАК ОбъектСтроительства
    ИЗ
        ВТОстатки КАК ВТОстатки
            ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(, &Период, Регистратор, Движения, Счет = &Счет, , Организация = &Организация) КАК ХозрасчетныйОстаткиИОбороты
            ПО ВТОстатки.Номенклатура = ХозрасчетныйОстаткиИОбороты.Субконто1
                И ВТОстатки.СуммаОстаток = ХозрасчетныйОстаткиИОбороты.СуммаКонечныйОстаток
    
    1 часть: получаю остатки на дату по счету
    2 часть: из таблицы "остатки и обороты" выбираю регистратор, при этом связав 2 таблицы по полям "номенклатура" и "сумма остатка"
  4. Yury
    Offline

    Yury Опытный в 1С

    Регистрация:
    22 дек 2011
    Сообщения:
    355
    Симпатии:
    4
    Баллы:
    29
    Я думаю, что в ваших рассуждениях закралась ошибка.
    Первое что вы должны сделать -- найти последнее движение номенклатуры по регистру.
    Второе, зная номенклатуру и дату последнего движения, можно вытащить регистратор.

    Ну и дальше, по вашей задаче, вытаскиваем из регистратора нужный реквизит, на выходе таблица с двумя полями: Номенклатура, нужный реквизит регистратора. И ее уже связать по левому с запросом к виртуальной таблице остатков. Все.

    Согласны?

    Те действия что вы описали, пока мой моск не осилил. Но хрустальный шар подсказывает, что это не то что вы хотите.
  5. TopicStarter Overlay
    Gunner
    Offline

    Gunner Опытный в 1С

    Регистрация:
    10 авг 2011
    Сообщения:
    86
    Симпатии:
    1
    Баллы:
    29
    Верно.
    Но я пошел таким способом: сначала получаю все остатки, потом по остаткам и номенклатуре ищу регистратор из таблицы "остатки и обороты" благодаря параметрам вирт. таблицы "Периодичность" в значение "Регистратор" и "Метод дополнения" в значение "Движения". Результат вроде как правильный дает запрос, но правильный ли текст? Просто впервые использую данные параметры вирт. таблицы "остатки и обороты"

Поделиться этой страницей