Программная работа с регистром накопления в 1С 8.3

Запись в регистр накопления

Программно записать в регистр накопления можно двумя способами:

  • Через свойство Движения документа
  • Через набор записей регистра накопления

Запись в регистр накопления через Движения

Обычно запись выполняется в модуле объекта, в процедуре ОбработкаПроведения:

Свойство Записывать позволяет отметить те регистры накопления, которые будут автоматически записаны после окончания обработчика ОбработкаПроведения.

Так как свойство Движения доступно в любом месте модуля объекта документа, то можно записать в регистр накопления из любого места модуля объекта:

Запись через набор записей регистра накопления

  1. Набор записей создается методом СоздатьНаборЗаписей
  2. Затем устанавливается отбор по регистратору через свойство Отбор набора записей
  3. В набор записей добавляется нужное количество записей через метод Добавить набора записей
  4. Набор записей записывается методом Записать

Помимо метода Добавить у набора записей есть методы ДобавитьПриход и ДобавитьРасход. Если использовать их, то можно не заполнять свойство ВидДвижения, оно будет заполнено автоматически:

Движения.ОстаткиТоваров и набор записей, созданный через СоздатьНаборЗаписей — это одно и то же. Если документ является регистратором регистра накопления, то в свойства Движения этого документа автоматически добавляется набор записей регистра с отбором по регистратору.

Загрузка из таблицы значений

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

Загрузка из массива

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

Запись с добавлением

По умолчанию набор записей записывается с замещением. Если уже были записи с таким регистратором, то сначала все они будут удалены, а потом будет записан новый набор записей. Если в метод Записать параметром передать Ложь, то набор записей будет записан с добавлением новым записей:

Изменение записей регистра накопления

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

Если нужно изменить не все записи набора, а по определенному условию, например, утроить количество только по одному товару, то можно воспользоваться следующим алгоритмом:

  1. Запросом найти те регистраторы, где в наборе записей есть нужный товар
  2. В цикле перебрать регистраторы, создать для каждого набор записей с отбором по регистратору
  3. Так как в наборе записей одного регистратора могут быть разные товары, то нужно перебрать все записи набора и изменить только те, где будет соответствующий товар
  4. Записать измененный набор записей

Методы Выбран и Модифицированность

С помощью метода Выбран можно проверить считан ли набор записей. С помощью метода Модифицированность можно узнать был ли изменен набор записей:

Удаление записей из регистра накопления

Чтобы удалить набор записей регистра накопления для одного документа нужно просто записать пустой набор с отбором по этому документу:

Если набор уже был прочитан из базы данных, то сначала нужно очистить его, а потом записать:

Чтобы очистить весь регистр накопления нужно запросом выбрать все регистраторы, создать набор записей по каждому регистратору и записать его:

Если нужно удалить только строки с определенным значением измерения, ресурса или реквизита регистра накопления, то можно воспользоваться следующим алгоритмом:

  1. Запросом выбираем все регистраторы, у которых в регистре есть соответствующее значение
  2. Создаем набор записей с отбором по регистратору и читаем его из базы данных
  3. Методом Выгрузить выгружаем набор записей в таблицу значений
  4. Удаляем из таблицы значений нужные строки
  5. Загружаем таблицу обратно в набор записей и записываем его

Отбор регистра накопления

Любые изменения набора записей регистра накопления выполняются при установленном отборе. Отбор можно установить только по регистратору и только на равенство. Если не установить отбор по регистратору и попытаться записать набор записей, то будет выброшено исключение «Ошибка записи! Не установлен отбор по регистратору»:

Ошибка записи! Не установлен отбор по регистратору

Если регистр накопления входит в состав движений документа, то отбор по регистратору устанавливается автоматически.

Программная работа с итогами регистра накопления

Программно можно получить признак использования итогов и изменить его. Чтобы получить признак используется метод ПолучитьИспользованиеИтогов. Для изменения — УстановитьИспользованиеИтогов, параметром передается значение типа булево. Истина — включается использование итогов, Ложь — выключается:

То же самое можно сделать только для текущих итогов:

Можно программно пересчитать итоги:

  • все итоги
  • только текущие итоги
  • только за определенный период:

Можно программно получить минимальный и максимальный периоды рассчитанных итогов, а также изменить их:

Программно можно узнать включен ли для регистра режим разделения итогов и при необходимости включить или выключить его:

Перебрать все регистры накопления

В цикле можно перебрать все менеджеры регистров накопления:

Ключ записи регистра накопления

Ключевыми полями регистра накопления являются регистратор и номер строки. Ключ записи позволяет сослаться на определенную запись регистра накопления. Создать ключ можно методом СоздатьКлючЗаписи, передав параметром структуру со значениями регистратора и номера строки:

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


Подписывайтесь на группу ВКонтакте , где я публикую ссылки на новые статьи с данного сайта, а также интересные материалы с других ресурсов по программированию в 1С
Здесь может быть Ваша реклама
Понравилась статья? Поделиться с друзьями:
Используя этот сайт, Вы даете согласие на использование cookies. На данном этапе Вы можете отказаться от использования cookies, настроив необходимые параметры в своем браузере.
ok