Книга знаний

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

v8: Использование регистратора в запросах

Использование регистратора в запросах.Автор статьи: PR | Редакторы:
Последняя редакция №2 от 05.02.07 | История
URL: http://kb.mista.ru/article.php?id=466

Ключевые слова: Регистратор, запрос, периодичность


Регистратор - это документ, сделавший движение по регистру накопления или регистру сведений с режимом записи "Подчинение регистратору".

Отклонясь от темы, замечу, что есть один нюанс.

Движения могут быть сделаны в любом программном модуле, а не обязательно в обработке проведения документа.
То есть, можно написать, к примеру, обработку, которая будет создавать движения по регистру накопления и в качестве регистратора указывать какой-либо документ, для которого в конфигураторе выбрана возможность быть регистратором движений по этому регистру.
ПриходнаяНакладная = Документы.ПриходнаяНакладная.СоздатьДокумент();
ПриходнаяНакладная.Записать();

Товар = Справочники.Товары.СоздатьЭлемент();
Товар.Записать();

НаборЗаписей = РегистрыНакопления.Товары.СоздатьНаборЗаписей();

НоваяЗапись = НаборЗаписей.ДобавитьПриход();
НоваяЗапись.Период = РабочаяДата;
НоваяЗапись.Регистратор = ПриходнаяНакладная.Ссылка;
НоваяЗапись.Товар = Товар.Ссылка;
НоваяЗапись.Количество = 1;
НаборЗаписей.Записать();


Теперь вернемся к теме статье.

Регистратор не является ни измерением, ни ресурсом, по сути это служебный реквизит, уточняющий, то есть дополняющий другой служебный реквизит, период.
Это накладывает особенности на использование этого поля в запросах.

Первой особенностью является то, что в виртуальных таблицах регистров накопления "Остатки и обороты" это поле недоступно до тех пор, пока в параметре виртуальной таблицы "Периодичность" не будет выбрано одно из значений: "Запись", "Регистратор" или "Авто".
Последнее значение можно выбрать только в 1С версии 8.1.

Второй особенностью является то, что, если вы используете построитель отчета и указали параметр виртуальной таблицы "Периодичность", то в отборе построителя появится новый элемент отбора, по периодичности.
Не пугайтесь и не удивляйтесь, так и должно быть.

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

будет корректно написать
ВЫБРАТЬ
    ТоварыОстаткиИОбороты.КоличествоНачальныйОстаток КАК КоличествоНачальныйОстаток,
    ТоварыОстаткиИОбороты.КоличествоПриход КАК КоличествоПриход,
    ТоварыОстаткиИОбороты.КоличествоРасход КАК КоличествоРасход,
    ТоварыОстаткиИОбороты.КоличествоКонечныйОстаток КАК КоличествоКонечныйОстаток
ИЗ
    РегистрНакопления.Товары.ОстаткиИОбороты(, , Регистратор, , ) КАК ТоварыОстаткиИОбороты
ИТОГИ
    СУММА(КоличествоНачальныйОстаток),
    СУММА(КоличествоПриход),
    СУММА(КоличествоРасход),
    СУММА(КоличествоКонечныйОстаток)
ПО
    ТоварыОстаткиИОбороты.Товар,
    ТоварыОстаткиИОбороты.Период,
    ТоварыОстаткиИОбороты.Регистратор


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

Описание | Рубрикатор | Поиск | ТелепатБот | Захваченные статьи | Установки | Форум
© Станислав Митичкин (Волшебник), 2005-2025 | Mista.ru

Яндекс.Метрика