V8_7_1_Регистры накоплений.ppt
- Количество слайдов: 19
4. 7. Регистры накопления (РН) Аналог – см. Регистры в V 7
Назначение Регистры накопления предназначены для хранения информации, развернутой по комбинации измерений и поддающейся суммированию. Это является важным отличием от регистров сведений, рассмотренных в предыдущей главе Другим принципиальным отличием регистров накопления от регистров сведений является то, что две полностью идентичные записи для регистра накопления - вполне нормальное явление. Их ресурсы будут просуммированны, т. е. накоплены, для чего, собственно, и предназначены регистры накопления.
Регистры остатков и регистры оборотов В V 8 возможно использование регистров накопления двух типов: регистры остатков и регистры оборотов. Разница между ними заключается в характере хранимой информации: из регистров остатков можно быстро получить информацию о состоянии средств на момент времени, а из регистров оборотов - данные за период. Пример: для хранения данных о взаиморасчетах с контрагентами – регистр остатков; Для хранения данных об объемах продаж – регистр оборотов.
Структура записи РН Активность (Булево) определяет, будет ли запись влиять на итоги РН. Если значение Ложь, то запись не учитывается в итогах регистра. Позже можно включить активность записей, тогда они сразу повлияют на итоги регистра. При переборе записей регистра неактивные записи регистра также включаются в выборку. Тип записи (приход или расход) определяется свойством Вид. Движения. Но если сделать движение типа «приход» с отрицательными ресурсами, то итоги регистра, конечно, уменьшатся. Это может быть использовано для операций сторнирования. Значения: Вид. Движения. Накопления. Приход Или Вид. Движения. Накопления. Расход Используется только для регистров остатков
Итоги РН Под итогами понимается сводная информация, выдаваемая регистром накопления. Для РН «Остатки товаров» с измерениями (товар, склад) и ресурсами (количество, стоимость) это могут быть ответы на следующие вопросы: • остаток конкретного товара на конкретном складе, • остаток конкретного товара на всех складах, • стоимость всех товаров на конкретном складе. Итоги регистра могут быть получены как на текущий момент времени, так и на любую другую дату или момент времени, а если это регистр оборотов, то за любой период. Это определяется параметрами методов Остатки и Обороты или параметрами виртуальных таблиц при использовании запросов.
Реквизиты РН Реквизиты можно представить как дополнительные колонки в таблице записей регистра. Реквизиты содержат сопроводительную информацию для каждой записи. Например, в регистр накопления Остатки можно добавить реквизит Комментарий, который будет сопровождать каждую запись о движении товара. Разработчик может использовать реквизиты для отбора нужных записей при обходе выборки или при использовании запроса. Следующий пример перебирает все записи регистра, у которых реквизит равен определенному значению: Выборка = Регистры. Накопления. Остатки. Выбрать(); Покa Выборка. Следующий() Цикл Если Сокр. ЛП(Выборка. Комментарий) = Заданная. Строка Тогда … Конец. Если; Конец. Цикла;
Приемы программирования
1. Выборка из РН Синтаксис метода Выбрать следующий: Выбрать(<Начало интервала>, <Конец интервала>, <Отбор>, <Порядок>) Пример 1 Выборка = Регистры. Накопления. Остатки. Выбрать(); Пока Выборка. Следующий() Цикл Сообщить(Сокр. ЛП(Выборка. Товар) + " " + Сокр. ЛП(Выборка. Склад) + " " + Сокр. ЛП(Выборка. Количество)); Конец. Цикла;
Выборка из РН (продолжение) Пример 2. Нач = Дата. Нач; Кон = Новый Граница(Дата. Кон, Вид. Границы. Включая); Отбор = Новый Структура("Товар", Выб. Товар); Выборка = Регистры. Накопления. Остатки. Товаров. Выбрать(Нач, Кон, Отбор); Пока Выборка. Следующий() Цикл Сообщить (Сокр. ЛП(Выборка. Товар) + " " + Сокр. ЛП(Выборка. Склад) + " " + Сокр. ЛП(Выборка. Количество)); Конец. Цикла;
2. обращение к «итогам» РН Под итогами регистра накопления понимаются сумма значений ресурсов по заданным измерениям. Для обращения к итогам обычно применяются методы Обороты и Остатки, а также запросы. При получении итогов можно не указывать одно или несколько измерений, тогда будут получены сводные итоги по ресурсам с учетом только указанных измерений. Остатки(<Момент времени>, <Отбор>, <Измерения>, <Ресурсы>) Замечание. Параметр Момент времени имеет тип Дата, Момент. Времени, Граница – это момент времени, на который необходимо получить остатки. Если параметр не указан, то будут получены текущие остатки (на максимальную дату движений регистра). Если в качестве параметра передана Дата, то остатки будут получены на начало дня, если Момент. Времени - то в остатках не будут учтены движения регистра, произошедшие в тот же момент времени. Метод возвращает таблицу значений с указанными измерениями и
обращение к «итогам» РН (продолжение) // пример обращения к остаткам РН Рег = Регистры. Накопления. Учет. Номенклатуры; Отбор = Новый Структура("Номенклатура", Выб. Товар); тз. Остатки = Рег. Остатки(, Отбор); Если тз. Остатки. Количество() > 0 Тогда Количество. Товара = тз. Остатки[0]. Количество; Стоимость. Товара = тз. Остатки[0]. Сумма; Конец. Если;
обращение к «итогам» РН (продолжение 1) Обороты(<Начало периода>, <Конец периода>, <Отбор>, <Измерения>, <Ресурсы>) Метод Обороты также возвращает таблицу значений, содержащую колонки с измерениями, указанными в параметре Измерения. Если производится обращение к регистру остатков, то названия колонок для ресурсов формируются следующим образом «<Имя ресурса>Приход» и «<Имя ресурса>Расход» . При обращении к регистру оборотов названия колонок совпадают с именами ресурсов. //обращение к регистру оборотов Отбор = Новый Структура("Номенклатура", Выб. Товар); тз. Обороты = Регистры. Накопления. Продажи. Обороты(, , Отбор); Если тз. Обороты. Количество() > 0 Тогда Оборот. Товара = тз. Обороты[0]. Сумма; Конец. Если;
обращение к «итогам» РН (продолжение 2) //обращение к регистру остатков Отбор = Новый Структура("Номенклатура", Выб. Товар); тз. Обороты = Регистры. Накопления. Учет. Номенклатуры. Обороты (, , Отбор); Если тз. Обороты. Количество () > 0 Тогда Приход. Товара = тз. Обороты[0]. Количество. Приход; Расход. Товара = тз. Обороты[0]. Koличecтвo. Pacxoд; Koнeц. Ecли;
Набор записей РН Набор = Регистры. Накопления. Продажи. Создать. Набор. Записей(); Набор. Отбор. Регистратор. Значение = Выб. Док; Движ = Набор. Добавить(); Движ. Регистратор = Выб. Док; Движ. Номенклатура = Выб. Товар; Движ. Контрагент = Выб. Контрагент; Движ. Период = Рабочая. Дата; Движ. Количество = Количество; Движ. Сумма = Сумма; Набор. Записать{Ложь); //добавить к набору записей по документу Замечание. При записи набора методом Записать с параметром Истина сначала удаляются все записи с заданным отбором, а затем на их место записываются новые. Если передать параметр Ложь, то запись будет добавлена к уже существующим.
Набор записей РН (продолжение) Через набор записей можно обращаться к уже существующим записям РН. Для этого нужно установить свойство Отбор и прочитать записи из базы данных. Например: Набор = Регистры. Накопления. Продажи. Создать. Набор. Записей(); Набор. Отбор. Регистратор. Значение = Выб. Док; Набор. Прочитать(); Для Каждого движ Из Набор Цикл Сообщить(движ. Сумма); Конец. Цикла;
Набор записей РН (продолжение) Записи набора можно выгружать в таблицу значений с помощью метода Выгрузить или, загружать записи в набор из таблицы значений с помощью метода Загрузить. При выгрузке структура таблицы значений полностью соответствует структуре набора. При загрузке загружаются только те колонки, имена которых в наборе и таблице значений совпадают: Набор. Прочитать(); тз. Записи = Набор. Выгрузить(); … Набор. 3 агрузить(тз 3 аписи); Набор. 3 аписать() ; Можно выгружать в массив и загружать из массива только одну колонку набора записей, для чего предназначены методы Выгрузить. Колонку и Загрузитъ. Колонку: Массив. Остатков = Набор. Выгрузить. Колонку("Количество"); … Набор. Загрузить. Колонку(Массив. Остатков, "Количество");
Набор записей РН (продолжение) Выгружаются и загружаются записи, имеющие тот же индекс, что и элементы массива (индексация записей набора и элементов массива начинается с 0). Для удаления записей из набора существует два метода Удалить и Очистить. Первый метод удаляет запись с заданным индексом, но в качестве параметра можно передавать и саму запись. Второй метод полностью очищает набор, удаляя все записи.
Формирование движений в РН при проведении документа Для формирования движений по РН на закладке «Движения» необходимо отметить регистры, по которым необходимо формировать движения. Для формирования алгоритма движения по регистрам при проведении документа можно воспользоваться конструктором движений (самостоятельно). Получим:
продолжение Процедура Обработка. Проведения(Отказ, Режим) Для Каждого Тек. Строка. Студенты Из Студенты Цикл Движение = Движения. Взаиморасчеты. Со. Студентами. Добавить(); Движение. Вид. Движения = Вид. Движения. Накопления. Приход; Движение. Период = Дата; Движение. Студент = Тек. Строка. Студенты. Студент; Движение. Сумма = Тек. Строка. Студенты. Сумма; Движение. Договор = Тек. Строка. Студенты. Договор; ……. (по второму регистру «Финансы. ЦОО» ) Конец. Цикла; // записываем движения регистров Движения. Взаиморасчеты. Со. Студентами. Записать(); Движения. Финансы. ЦОО. Записать(); Конец. Процедуры