Вирус скуки
Для чего нужны измерения регистра, ресурсы и реквизиты?
Измерение — накопление числовой информации в данном разрезе;
Резурсы — виды числовой информации, накапливаемой регистром;
Измерение так же является критерием отбора при получении данных;
Реквизиты — набор попутных данных для записи регистра;
Что такое движение регистра и что такое регистратор?
Движение регистра — в регистр отправляется некоторый набор записей, содержащий значение измерения, значения приращения ресурсов, ссылку на документ, который вызвал эти изменения (регистратор);
Регистратор — объект информационной базы данных (документ), который производит конкретные движения;
Как создать новый регистр накопления и описать его структуру?
В 1С:Конфигуратор правый клик — добавить. Структура определяется на вкладке «Данные»
Как создать движение документа с помощью конструктора движений?
Выбираем нужный документ в конфигураторе, правый клик — изменить, закладка «Движения»
Как с помощью встроенного языка обойти табличную часть документа и обратится к её данным?
Это можно сделать с помощью циклов.
Для Каждого СтрокаТабличнойЧасти ИЗ ТабличнаяЧасть ЦИКЛ
Сообщить(СтрокаТабличнойЧасти.Услуга)
КонецЦикла
Как показать команды открытия списка регистра в интерфейсе конфигурации и в интерфейсе форм?
Подсистемы — правый клик — все подсистемы — выбираем нужную подсистему, ставим галочку напротив регистра
Движения документа
Движения документа — это записи в регистрах, которые создаются в процессе проведения документа и отражают изменения, производимые документом.
Откроем окно редактирования объекта конфигурации Документ ПриходнаяНакладная. Перейдем на закладку Движения, раскроем список Регистры накопления и отметим регистр накопления ОстаткиМатериалов (рис. 6.7).
Рис.6.7. Создание движений документа «Приходная накладная» в регистре «Остатки материалов»
Обратите внимание, что сразу после отметки выбранного регистра становится доступной кнопка Конструктор движений. Нажмем ее и воспользуемся этим конструктором.
Рис.6.8. Конструктор движений
Конструктор устроен просто. В списке Регистры перечислены регистры, в которых документ может создавать движения. В нашем случае там пока один регистр ОстаткиМатериалов
В списке Реквизиты документа должны находиться исходные данные для создания движений — реквизиты документа ПриходнаяНакладная.
А в таблице Поле — Выражение должны быть заданы формулы, по которым будут вычисляться значения измерений и ресурсов регистра при записи движений (рис. 6.8).
Обратите внимание, что по умолчанию конструктор предлагает нам создавать движения прихода (Тип движения регистра — Приход, символ + рядом с названием регистра) по регистру ОстаткиМатериалов. Это нас вполне устраивает, ведь документ ПриходнаяНакладная и должен приходовать материалы.
В поле выбора Табличная часть выберем табличную часть нашего документа — Материалы.
Список реквизитов документа, который уже заполнен реквизитами шапки документа, автоматически дополнится реквизитами нашей табличной части.
Теперь нажмем кнопку Заполнить выражения.
В нижнем окне сформируется соответствие полей (измерений и ресурсов) регистра и выражений для их расчета (рис. 6.9).
Рис. 6.9. Выбор табличной части документа и заполнение выражений для расчета движений регистра
Как видите, конструктор движений установил соответствия подходящим образом: в качестве материала в регистр будет записан материал из табличной части документа, в качестве склада — склад, указанный в шапке документа, а в качестве количества — количество из табличной части документа.
Нажмем кнопку ОК и посмотрим, какой текст сформировал конструктор в модуле документа ПриходнаяНакладная (листинг 6.1).
Конструктор создал обработчик события ОбработкаПроведения объекта конфигурации Документ ПриходнаяНакладная, поместил его в модуль объекта и открыл текст модуля.
Событие ОбработкаПроведения является одним из важнейших событий, связанных с документом. Это событие возникает при проведении документа. Основное назначение обработчика данного события — генерация движений по документу. Выполнение различных операций с данными в процедуре обработчика влияет на состояние учета. Таким образом, именно в эту процедуру разработчик должен поместить собственные алгоритмы преобразования данных, выполняемые в момент проведения документа.
Поясним текст процедуры обработчика.
Объект встроенного языка ДокументОбъект имеет свойство Движения. Оно возвращает объект КоллекцияДвижений, содержащий коллекцию наборов записей регистров, по которым этот документ может формировать движения.
К конкретному набору записей этой коллекции можно обратиться, указав через точку имя регистра, которому принадлежит этот набор записей. Например, Движения.ОстаткиМатериалов.
Затем через точку можно использовать различные методы набора записей регистра, например, Движения.ОстаткиМатериалов.Добавить(). Метод Добавить() добавляет новую запись в набор записей.
В первой строке процедуры мы устанавливаем свойство Записывать набора записей регистра в значение Истина. То есть в явном виде указываем, что после завершения обработки проведения платформа должна будет записать этот набор записей в базу данных.
Внутри обработчика расположен цикл Для Каждого . Из . Цикл. Он предназначен для перебора строк табличной части нашего документа.
В цикле обращение к табличной части документа происходит по имени (Материалы). Переменная ТекСтрокаМатериалы содержит объект с данными текущей строки табличной части документа. Эта переменная создается в начале цикла и меняется по мере его прохождения.
В первой строке тела цикла, используя метод Добавить(), мы добавляем к набору записей, который создает наш документ в регистре, новую запись. Тем самым мы создаем объект РегистрНакопленияЗапись и сохраняем его в переменной Движение.
Используя этот объект, мы можем обратиться к полям этой записи, указав имя поля через точку от этой переменной (например, Движение.Количество).
Причем Движение.Материал, Движение.Склад — это измерения регистра, Движение.Количество — это ресурс регистра, а Движение.ВидДвижения и Движение.Период — стандартные реквизиты регистра, которые создаются автоматически.
Чтобы присвоить полям новой записи регистра соответствующие значения полей документа, мы обращаемся к полям табличной части, указав имя поля через точку от переменной ТекСтрокаМатериалы (например, ТекСтрокаМатериалы.Материал).
Заметим, что Склад — это реквизит шапки документа, а Дата — стандартный реквизит документа, который создается автоматически. Причем в цикле меняются только значения полей табличной части документа — ТекСтрокаМатериалы.Материал и ТекСтрокаМатериалы.Количество. Остальные поля не меняются, так как относятся к документу в целом и не зависят от текущей строки табличной части документа.
ВидДвиженияНакопления.Приход — это значение системного перечисления, которое определяет вид движения регистра накопления как Приход.
Таким образом, мы присваиваем нужные значения всем полям новой записи. После перебора всех строк документа (после завершения цикла) в этом наборе записей (Движения.ОстаткиМатериалов) будет содержаться столько записей, сколько строк в табличной части проводимого документа.
Если мы теперь откроем окно редактирования объекта конфигурации Регистр накопления ОстаткиМатериалов и перейдем на закладку Регистраторы, то в списке документов, созданных в конфигурации, мы увидим отмеченный документ ПриходнаяНакладная, так как мы задали в модуле этого документа формирование движений в регистре ОстаткиМатериалов (рис. 6.10).
Рис.6.10. Регистраторы регистра «ОстаткиМатериалов»
В заключение отредактируем командный интерфейс, чтобы в подсистемах Бухгалтерия, Оказание услуг и Учет материалов была доступна ссылка для просмотра записей нашего регистра накопления.
Дело в том, что команды открытия регистров также добавляются в панель навигации подсистем, но по умолчанию они невидимы, в отличие от команд открытия справочников и документов.
В дереве объектов конфигурации выделим ветвь Подсистемы, вызовем ее контекстное меню и выберем пункт Все подсистемы.
В открывшемся окне слева в списке Подсистемы выделим подсистему УчетМатериалов.
Справа в списке Командный интерфейс отразятся все команды выбранной подсистемы.
В группе Панель навигации. Обычное включим видимость у команды Остатки материалов и мышью перетащим ее в группу Панель навигации. См.также (рис. 6.11).
Рис.6.11. Настройка командного интерфейса подсистем
Действительно, команды открытия регистров накопления не так часто используются, и поэтому лучше их перенести в группу См.также панели навигации разделов интерфейса.
Аналогично, выделив подсистемы ОказаниеУслуг и Бухгалтерия, в панели навигации в группе Обычное включим видимость у команды Остатки материалов и перенесем ее в группу См.также.
Конструктор движений
Конструктор движений — это один из инструментов разработки. Он используется только для документов и помогает создать процедуру обработки проведения документа на встроенном языке. Конструктор может быть вызван из окна редактирования документа:
Конструктор позволяет выбрать регистры, в которые будут вноситься записи и затем вручную или автоматически заполнить выражения, которые будут записаны в поля регистра.
Результатом работы конструктора является готовая процедура на встроенном языке с именем ОбработкаПроведения. Эта процедура располагается в модуле документа и будет вызвана системой в момент проведения документа.
Что такое движения в 1с
Регистры — это таблицы для накопления оперативных данных и получения сводной информации.
Данные в регистры добавляются только при проведении документов. Сведения из регистров используются для формирования отчетов. Классическая схема использования регистров в 1С:Предприятие выглядит следующим образом:
Документы => Регистры => Отчеты
Измерения и ресурсы
Основная проблема при проектировании регистров — это определение его структуры. Структура регистра должна быть такова, чтобы извлекать из него нужную информацию без утомительной обработки.
Измерения регистра — это то, в каких разрезах требуется хранение информации.
Ресурсы регистра — это количественные или суммовые данные, которые хранятся в регистре.
Предположим, что регистр «Остатки товаров» должен содержать сведения о количестве и стоимости каждого товара на каждом складе. В идеологии системы 1С:Предприятие регистр такого вида представляет собой прямоугольную систему координат на одной оси которой находятся склады, на другой — товары, а на пересечении конкретного склада и конкретного товара находятся цифры количества товара и стоимости товара.
Регистр: Остатки товаров
Измерения: Товар, Склад
Ресурсы: Кол-во, Стоимость
С помощью методов встроенного языка мы можем легко получить ответы на вопросы:
* остаток конкретного товара на конкретном складе
* остаток конкретного товара на всех складах
* стоимость всех товаров на конкретном складе
Движения в регистрах
В табличном виде регистр ОстаткиТоваров представляется следующим образом:
Вид движения | Товар | Склад | Кол-во | Стоимость |
приход | Товар4 | Склад1 | 15 | 200 |
расход | Товар4 | Склад1 | 10 | 100 |
приход | Товар4 | Склад1 | 5 | 50 |
Одна строка из этой таблицы называется «движение». Движения в регистрах создаются только при проведении документов. В регистре, кроме измерений и ресурсов, можно задать реквизиты. Реквизиты — это дополнительные сведения, сопровождающие движение. Методами встроенного языка можно отбирать движения с заданным значением реквизита.
Виды регистров
В системе 1С:Предприятие возможно использование регистров двух типов: регистры остатков и регистры оборотов. Разница между ними понятна из их названия и заключается в характере хранимой информации: в регистрах остатков всегда хранится информация о конечном состоянии средств, а в регистрах оборотов, образно выражаясь, — как это состояние было достигнуто.
Если из регистра нужно быстро получать остаток чего-либо на текущий момент, тогда нужно сделать регистр остатков. Если из регистра нужно быстро получать приход или расход чего-либо за период, тогда нужно сделать оборотный регистр.
Регистры остатков
Рассмотрим в качестве примера отслеживание взаиморасчетов с покупателями товаров, которые производит или продает предприятие.
Для того чтобы оперативно получать информацию о взаимной задолженности предприятия и покупателя, потребуется регистр «Взаиморасчеты», в котором для каждого покупателя будет храниться сумма задолженности. При совершении хозяйственной операции состояние регистра будет соответствующим образом изменяться, каждый раз отражая текущее состояние взаиморасчетов. Регистр «Взаиморасчеты» — это регистр остатков.
Регистры оборотов
Однако, легко получить информацию об объеме закупок, совершенных данным покупателем за какой-либо период времени, из регистра «Взаиморасчеты» нельзя. Можно проанализировать все движения, имеющие отношение к данному покупателю, и вычислить общую сумму закупок. Но, когда необходимо получать эти сведения оперативно (например, по условиям договора при достижении определенного объема закупок покупателю должна предоставляться скидка), такой способ, конечно же, не подходит.
В этом случае решением проблемы может быть использование регистра оборотов. В таком регистре — назовем его «Объем закупок» — в разрезе покупателей будет храниться информация об объеме закупок (об обороте покупателя). При создании регистра оборотов можно указывать, с какой периодичностью будет накапливаться информация: день, неделя, месяц и так далее.
Теперь, при совершении хозяйственных операций, необходимо будет изменять не только состояние регистра «Взаиморасчеты», но и регистр «Объем закупок». В этот регистр при совершении клиентом каждой покупки будет заноситься информация о сумме покупки. В результате в регистре «Объем закупок» будет постоянно накапливаться информация об общем объеме закупок клиента.
Основы программирования
Регистры, используемые в примерах:
Оборотный регистр Доходы
Измерения: Клиент, Товар
Ресурсы: Доход
Реквизиты: нет
Периодичность: День
Хранит доходы от продаж за день в разрезе клиентов и товаров.
Регистр остатков Товары
Измерения: Товар, Склад
Ресурсы: Количество, Стоимость
Реквизиты: нет
Хранит остатки товаров на каждом складе в количественном и суммовом выражении.
Запись движений в регистр остатков
Методы ДвижениеПриходВыполнить и ДвижениеРасходВыполнить
Запись движений в оборотный регистр
(только при проведении документа)
1. Метод Движение
2. Метод ДвижениеВыполнить
Примечание: Если сумма или количество в движении будет отрицательным, то это движение будет расходом, иначе приходом.
Обращение к итогам регистра
2-й способ. Выгрузка итогов в таблицу значений
Обращение к итогам оборотного регистра
3. Метод СводныйИтог
Могут быть указаны не все измерения. Фиксируются только указанные измерения.
4. Метод СводныеИтоги
Могут быть указаны не все измерения. Фиксируются только указанные измерения.
1. Метод Остаток
2. Метод Остатки
3. Метод СводныйОстаток
Могут быть указаны не все измерения. Фиксируются только указанные измерения.
4. Метод СводныеОстатки
Пример:
Обращение к движениям регистра
Фильтрация движений и итогов
1. Метод УстановитьФильтр
2. Метод УстановитьЗначениеФильтра
3. Метод ВыбратьДвиженияДокумента
4. Метод ВыбратьДвиженияСОстатками
Применяется только для регистра остатков.
Временный расчет регистров
Временный расчет регистров требуется, если нужно выбрать итоги или движения на определенную дату. По умолчанию итоги регистров выдаются на Точку актуальности.
1. Метод РассчитатьРегистрыНа
Рассчитать все регистры с установленным флагом временного расчета на начало события.
(на начало даты или на момент до проведения документа)
2. Метод РассчитатьРегистрыПо
Рассчитать все регистры с установленным флагом временного расчета на конец события.
(на конец даты или на момент после проведения документа)
Запрос к регистру
В запросах к регистрам применяются функции НачОст, КонОст, Приход, Расход. В запросах к оборотным регистрам обязательно указывается Период.