1С Предприятие. Практика программирования на платформе v7


Временный расчет регистров


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

132      ___________________ 1С:Предприятие. Практика программирования на платформе V7

По структуре регистры остатков отличаются тем, что помимо таблицы остатков RG*.dbf (оборотов для оборотных регистров) формируют таблицу движений RA*.dbf , в которую записываются положительные или отрицательные значения приращений ресурсов и значения реквизитов регистра, причем, как мы уже отмечали, имеются два типа движений: "приход" и "расход". Записи движений регистров актуальны в течение определённого промежутка времени, называемого периодом актуальности итогов; возможные значения - месяц, пятнадцать дней, декада, пять дней. По умолчанию остатки, накопленные в ресурсах регистров, выдаются на точку актуальности - ТА. Если нужно получить остатки или итоги по регистру до ТА, то выполняется временный расчет регистров. Период актуальности итогов необходим для того, чтобы при каждом обращении к регистрам на момент до точки актуальности не вычислять значения остатков или итогов от начала работы предприятия по движениям. Для расчета остатков или итогов на любой момент времени берется остаток на начало периода и по движениям вычисляется остаток на данный момент времени.

РегП=Создать0бъект("Регистр.Амортизация");

Если НашаДата<ПолучитьДатуТА() Тогда

РегП.ВременныйРасчет();

РассчитатьРегистрыНа(НашаДата);

КонецЕсли;

Метод ВременныйРасчет (<Флаг>) позволяет установить флаг участия регистра во временном расчете Возвращает текущее значение флага участия регистра во временном расчете. Значения параметра <флаг>: 1 - установить флаг участия регистра во временном расчете; 0 - сбросить флаг участия регистра во временном расчете (необязателен, по умолчанию - 1). Замечание: В один момент времени только по одному объекту регистров каждого вида могут участвовать во временном расчете.

Метод РассчитатьРегистрыНа (<ГраницаРасчета>,<ГрафаОтбора>) позволяет рассчитать все регистры с установленным флагом временного расчета на начало события, заданное границей расчета.








IX Основы построения «Оперативного учёта» в системе 1С:Предприятие__________ 133

9.3. Методы регистров



Обратим внимание на методы регистров, позволяющие организовывать циклы выборки.

¨        Выборка движений регистров;

¨        Установка порядка выборки и фильтров:

Регистр.Амортизация.ОбратныйПорядок();

Регистр.Амортизация.УстановитьФильтр(ЗначениеОборудования);

Метод ОбратныйПорядок(<Режим>)позволяет установить порядок выборки движений документов. Возвращает:

1 - обратный порядок выборки документов,

О - выборка документов в порядке возрастания даты и времени.

<Режим> - число: 1 - выбирать движения документов в порядке убывания даты и времени;  0 -выбирать движения документов в порядке возрастания даты и времени, (по умолчанию - 1). Данный метод нельзя применять с методом ВыбратьДвиженияСОстатками. Метод можно использовать как процедуру и как функцию. Как функция метод возвращает значение, соответствующее порядку выборки до вызова.

Метод УстановитьЗначениеФильтра(<«Идентиф»>,<Значен>,<Вариант>) позволяет установить Фильтр по значению одного атрибута регистра, установить вариант отбора и принадлежность некоторому множеству значений <Идентиф> - идентификатор измерения или реквизита в кавычках. <3начен> - значение или список значений. <Вариант> - необязательный параметр. Число:

0 - не фильтровать;

1 - фильтровать по значению; . Значение по умолчанию

2 - искать вхождение. Для варианта "2":

- если параметр <3начен> - это группа справочника, то осуществляется проверка вхождения в

группу;

-  если параметр <3начен> - это простой элемент справочника или другой тип значения, то

осуществляется просто фильтрация по значению;

-  для списка значений осуществляется проверка вхождения в список; - если пустое значение

или пустой список значений, то условие не проверяется.

Метод УстановитьФильтр(<Измерение1>,<Измерение2>...,<Рекв1>,<Рекв2>) позволяет установить Фильтры по всем измерениям и реквизитам регистра. <Измерен1>,<Измерен2>... - значения измерений



134______________________ 1С:Предприятие. Практика программирования на платформе V7

регистра. Измерения могут задаваться с пропусками (неуказанное значение - просто запятая), фиксируются только указанные измерения. <Рекв1>,<Рекв2>... - необязательные параметры. Выражения со значениями реквизитов регистра. Заданные значения реквизитов будут влиять только на отбор движений регистра.

Обратите внимание на вариант 2 метода УстановитьЗначениеФильтра, благодаря которому этим методом можно установить фильтр на множество значений измерения или реквизита в отличие от метода УстановитьФильтр.

Возможность установки фильтра по значению реквизита регистра существенно упрощает редактирование отлаженных «чужих» конфигураций, так как создание нового измерения регистра — это, по сути дела, создание нового разреза учета, и может повлечь изменение всей структуры учета на предприятии. Для решения частных задач иногда можно обойтись созданием дополнительного реквизита регистра и установкой фильтра по нему при выборке движений или итогов по регистру. При этом следует учитывать, что в записях регистра остатки и итоги ресурсов по реквизиту не накапливаются, и такой фильтр будет работать гораздо дольше.

¨        Цикл выборки движений

Регистр. Амортизация . ВыбратьДвижения (ДатаНач, ДатаКон);

Пока Регистр.Амортизация.ПолучитьДвижение() =1 Цикл

ЗначениеПартии= Регистр.Амортизация.Партия;

// и прочие атрибуты регистра

КонецЦикла;

Метод ВыбратьДвижения(<ДатаНачала>,<ДатаКонца>,<ГрафаОтбора>) позволяет выбрать все движения регистра по датам в заданном интервале дат. <ДатаНачала> - дата, документ или позиция начала временного интервала выбора движений регистра; <ДатаКонца> - дата, документ или позиция конца временного интервала выбора движений регистра (если не указана или 0, то конец - ТА). <ГрафаОтбора> - необязательный параметр. Строковое выражение. Идентификатор графы отбора -установка использования определенной графы отбора. "*" - автоматический выбор графы отбора. Пустая строка - не использовать графу отбора. Если не указан - автоматический выбор графы отбора.



Движения можно выбрать также методами ВыбратьДвиженияДокумента(<Документ>) и ВыбратьДвиженияСОстатками(<ДатаКонца>, <ГрафаОтбора>).

Метод ПолучитьДвижение() позволяет выбрать очередное движение регистра. Возвращает: 1 - если следующее движение регистра выбрано, 0 - иначе. Метод можно использовать только для объектов, созданных функцией СоздатьОбъект.

¨        Выборка итогов — ненулевых остатков ресурсов регистров.

Рег=СоздатьОбъект("Регистр.Амортизация");

Per.ВыбратьИтоги();

Пока Рег.ПолучитьИтог()=1 Цикл

ЗначениеПартии= Peг.Партия;

ЗначениеСтоимости= Peг.Стоимость;

IX. Основы построения «Оперативного учёта» в системе 1С:Предприятие_________ 135

//.........

КонецЦикла;

Перед вызовом метода ВыбратьИтоги() можно также установить фильтры и порядок выборки. Метод ВыбратьИтоги() можно использовать только для переменной определенной с помощью метода СоздатьОбъект.

На платформе V77 можно выгрузить итоги в таблицу значений.

ТабЗн=Создать0бъект("ТаблицаЗначений");

Регистр.Амортизация.ВыгрузитьИтоги(ТабЗн) ;

Метод ВыгрузитьИтоги(<ТаблЗнач>,<ВклФильтр>,<Очищать>) позволяет выгрузить все итоги регистра с текущим фильтром в таблицу значений. <ТаблЗнач> - объект типа "ТаблицаЗначений", куда система выгрузит все итоги регистра, колонки таблицы создаются в соответствии с типами и идентификаторами атрибутов регистра. <ВклФильтр> - необязательный параметр. Число: 1 - в получаемую таблицу включаются измерения, закрепленные фильтром ; 0 - не включаются. Значение по умолчанию - 0. <Очищать> - необязательный параметр.Число:1 - перед выгрузкой таблица значений очищается;0 - не очищается.Значение по умолчанию -1.

Метод ВыгрузитьИтоги() можно использовать непосредственно для регистра в отличие от методов ВыбратьИтоги() и ПолучитьИтог(). Таблицу значений можно дописывать (см. параметр Очищать) - это позволяет выгрузить, например, в таблицу итоги из нескольких регистров, а отсортировать её или «свернуть».



Метод Свернуть(<ГруппКолонки>,<СуммКолонки>) позволяет свернуть таблицу значений по соответствующим значениям колонок, т.е. заменяет на одну строку все дублирующие (по значениям группировочных колонок) строки, суммируя значения по суммируемым колонкам. <ГруппКолонки> -группировочные колонки (номера или идентификаторы колонок через запятую), по которым группировать данные. <СуммКолонки> - суммируемые колонки (номера или идентификаторы колонок через запятую), по которым суммировать данные.



136______________________ 1С:Предприятие. Практика программирования на платформе V7

9.3.1. Методы регистров остатков

Метод ОстаткиПолучить() позволяет получить все ресурсы по регистру. Измерения записываются в атрибуты, полученные ресурсы считываются из атрибутов регистра. Метод используется только для регистров остатков.

Регистр.Амортизация.Оборудование= Оборудование; Регистр.Амортизация.ОстаткиПолучить(); ЗначениеСтоимости= Регистр.Амортизация.Стоимость;

Методы Остатки(<?>) и СводныеОстатки(<?>) также позволяют получить остатки по всем ресурсам регистра. Параметры: [<Значение измерения1>, <Значение измерения2>,...] . При вызове метода Остатки (<?>) необходимо указать значения всех измерений регистра. Для метода СводныеОстатки(<?>) можно указать значения только необходимых измерений, а остальные опустить, поставив соответствующие запятые.

Регистр. Амортизация.СводныеОстатки(ЗначениеОборудования,); ЗначениеСтоимости= Регистр.Амортизация.Стоимость; ЗначениеКолл_во= Регистр.Амортизация.Количество;

Методы Остаток(<?>, «») и СводныйОстаток(<?>, «») возвращают значение остатка заданного ресурса регистра. Параметры:[<3начение измерения1>, <Значение измерения2>,... , <Имя ресурса в кавычках>]. При вызове метода Остаток(<?>,«») необходимо указать значения всех измерений регистра. Метод СводныйОстаток(<?>, «») возвращает значение сводного остатка заданного ресурса регистра по неполному списку значений измерений, как и метод СводныеОстатки(<?>).

IX. Основы построения «Оперативного учёта» в системе 1С:Предприятие_________ 137

ЗначениеСтоимости=

Регистр.Амортизация.СводныйОстаток(ЗначениеОборудования   ,   ,"Стоимость  ");

ЗначениеКолл_во=

Регистр. Амортизация.СводныйОстаток(ЗначениеОборудования , , "Количество");


Содержание раздела