Что такое регистр в 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. Метод РассчитатьРегистрыПо
Рассчитать все регистры с установленным флагом временного расчета на конец события.
(на конец даты или на момент после проведения документа)
Запрос к регистру
В запросах к регистрам применяются функции НачОст, КонОст, Приход, Расход. В запросах к оборотным регистрам обязательно указывается Период.
Что такое регистр в 1с
Документы – суть ведения учета в 1С. Каждый документ имеет результат, например пришло товаров +10 шт.
Отчеты – позволяют смотреть результаты. Суммируют эти результаты и показывают пользователю.
Однако документов много и если бы приходилось суммировать их результаты, то это было бы слишком сложно. Поэтому придуман лучший способ!
Документы записывают свои результаты (называют «движения») в специальные таблицы – регистры 1с, которые сами суммируют результаты, чтобы отчет просто отобразил заранее посчитанные итоги.
Сегодня мы поговорим про регистры 1С и их использование.
Регистр 1с – это таблица, такая же как и в Excel, каждый документ пишет в регистр 1с одну или несколько строк своих движений (результатов) с каким-либо знаком – плюс или минус. Это значит, что итого регистра 1С изменилось на соответствующую цифру.
Документ, который записал движения в регистр 1С, называют Регистратор. Дата и время движения равны (в 99% случаев) дате документа. Дату движения называют Период.
Каждый регистр 1С учитывает обычно движения какого нибудь одного справочника. Например, регистр 1С Товары на складах – движения товаров (в терминах 1С «номенклатуры») – сколько поступило товаров на склад, сколько убыло. Регистр 1С Взаиморасчеты с контрагентами (покупателями и поставщиками) – движения договоров с контрагентами – сколько нам стал должен контрагент после покупки или сколько мы ему должны после оплаты. Справочник, в разрезе которого ведется регистр называют основным измерением (аналитикой) регистра 1С.
Конечно же никто не делает одно основное измерение к у регистра 1С. Ведь если мы учитываем движения товаров, то нам интересно не только какой товар уменьшился или прибавился, но и например, по какому складу. Поэтому всегда есть три-пять дополнительных измерений «на всякий случай», которые можно назвать дополнительной аналитикой регистра 1С.
Как документ проводится по регистрам?
Движения документа по регистрам 1С
Посмотрим как работают регистры 1С. Вот у нас есть документ поступления товаров, в котором мы видим, что поступил товар Масло на склад Главный.
С точки зрения логики и математики этот документ имеет результат:
Масло кремлевское, Главный склад +10 (шт)
Проверим – так ли это?
Этот пункт меню покажет нам все движения документа, которые он сделал по регистрам. Как мы видим, документ сделал движения по целой куче регистров 1С, в каждый из которых он записал разную информацию (в соответствии с назначением регистра 1С). По регистру 1С Товары на складах он сделал ту проводку, которую мы с Вами рассчитали.
Как же это выглядит в регистре 1С? Откроем регистр 1С через меню Операции.
Открылся регистр 1С. Данных в нем много. Сделаем отбор только по нашему документу.
В результате мы видим движение нашего документа по регистру 1С. Оно ровно совпадает с тем, что мы рассчитали вручную:
- Плюс – вид движения (приход/расход)
- Регистратор – наш документ
- Активность – эта строка движения действительна (то есть не отключена)
- Номенклатура, основное измерение
- Склад, дополнительное измерение
- Количество, ресурс (то есть цифра, которую мы считаем).
Если мы поставим отбор не по документу, а по номенклатуре (точно таким же образом), то мы увидим движения всех документов, которые трогали эту номенклатуру. Один документ – мы купили товар. Другой – продали. Итого естественно сам регистр 1С не показывает – для этого нужно использовать отчет или запрос.
Регистры 1С бывают разные (ниже мы обсудим это). Проводки по разным регистрам 1С выглядят тоже по разному. Мы сейчас смотрели проводки по регистру накопления 1С. Вот так выглядят проводки нашего этого же документа по бухгалтерскому регистру 1С, который работает на основании бухгалтерского (налогового) плана счетов 1С.
Зачем нужны регистры 1С
Регистры 1С бывают разных видов. Цель использования регистра 1С зависит от его вида.
- Регистры сведений 1С
Это обычная таблица, как в Excel. Она не имеет никаких движений (приходов/расходов). Регистр сведений 1С обычно используется для хранения дополнительных данных справочников. С помощью регистра сведений 1С можно организовать периодический реквизит справочника, как это делать мы обсуждали здесь. - Регистры бухгалтерии 1С
С точки зрения пользователя учет ведется на бухгалтерском плане счетов. На самом деле учет ведется в таблице регистров бухгалтерии 1С, которые сделаны в разрезе плана счетов 1С. - Регистры накопления 1С (регистр остатков 1С)
Таблица движения документов + и –, которая автоматически вычисляет итого на начало периода и итого на конец периода. Например движения товара Лопата было +10, а потом -8. Значит остаток на начало был 0, а остаток на конец стал 2.
Регистр накопления 1С с видом «Остатки» обозначает, что будут хранится движения (приходы и расходы, которые также называют «Обороты») и дополнительно будут автоматически рассчитываться итоги (которые называют «Остатки»).
Регистр оборотов 1С ничем не отличается от регистра остатков, за исключением того, что у него не рассчитываются автоматически остатки.
Регистр оборотов 1С используют в том случае, когда у справочника логически не может быть остатка. Если нам надо учитывать продажи товаров, то мы будем использовать регистр оборотов.
Где находятся регистры 1С
Когда мы с Вами обсуждали документы, то мы говорили, что они обычно расположены в тех или иных меню.
Регистры 1С – это внутренний, программистский объект 1С. Пользователи с ним не работают. Пользователи смотрят результаты в отчетах. Поэтому никакие регистры 1С в интерфейс пользователя обычно не выведены и их через меню открыть нельзя.
Конечно же это не касается двух программистских меню. В толстом клиенте меню Операции (в интерфейсе пользователя с административными правами):
В тонком клиенте меню Все функции, которое аналогично меню Операции, но по умолчанию спрятано (см. пункт меню Сервис, чтобы его включить):
В конфигураторе регистры расположены в соответствующих ветках.
Как происходит работа с регистрами 1С
Как мы уже обсудили только что – документ «проводится» по регистрам 1С. Понятие процесса «проведение» — имеется ввиду запись документом в регистры 1С своих результатов. Как не сложно догадаться – если документ не проведен, то он ничего не записал в регистр 1С. Это используется для создания черновиков документов.
В списке документов в первой колонке отображается статус документа. Зеленая галочка – документ проведен. В следующих колонках отмечено по каким типам регистров 1С проведен документ (наличие этих колонок зависит от конфигурации). «У» управленческий учет – регистры накопления 1С. «Б» и «Н» бухгалтерский и налоговый учет – бухгалтерские регистры 1С.
Чтобы провести документ, нажмите на него в списке правой кнопкой и нажмите Провести.
Или в самом документе кнопки проведения. Также кнопка ОК записывает и проводит документ.
Проведение документа бывает оперативное (когда дата проводимого документа больше чем дата существующих документов) и неоперативное (дата меньше, например, вчера), последнее еще называют «работа задним числом». Подробнее об этом мы обсуждали в уроке про даты в 1С.
Проведение документа в коде (в программе) прописывается программистом. Для этого откройте модуль объекта любого документа (как это сделать мы обсуждали в уроке про модули 1С). Найдите строку вида «Процедура ОбработкаПроведения(». Раскройте крестик и Вы видите программу проведения этого документа.
-
Настройка проведения документа происходит следующим образом:
После этого нажмите кнопку Конструктор движений. Эта кнопка генерирует код (программу) для указанной выше процедуры ОбработкаПроведения(). Поэтому Вы должны использовать или эту кнопку или писать код вручную, так как эта кнопка затирает написанный вручную код.
Задача проста – Вы видите справа вверху реквизиты документа, слева внизу реквизиты регистра 1С. Нужно заполнить какой реквизит документа попадет в какой реквизит регистра 1С. Помочь в этом может кнопка «Заполнить выражения».
Настройка и разработка Регистров 1С
Основные особенности Регистров 1С, по закладкам:
-
Основные – название регистра 1С в конфигураторе (Имя) и в режиме Предприятие (Синоним). Здесь же Вы выбираете основные свойства регистра 1С, для регистра накопления 1С – остатки или обороты, для регистра сведений 1С – периодичность.
Регистры
Регистры в системе 1С служат для хранения информации о состоянии каких либо показателей. Например остатки товаров на складах, состояние заказа(оплачен, доставлен, заказан) и тд. В общих случаях регистры являются предпочтительным средством получения данных для отчетов. В 1с показателями являются измерения, а состояние показателя называется ресурсом. Для тех случаев когда нужно сохранять какую то дополнительную информацию по движению, но никаких данных по этой информации получать не требуется, у регистра существует реквизит. В реквизит записываются данные по которым не надо получать остатки или состояние какого либо показателя. Например комментарий «Эти движения были внесены корректировкой регистров» Регистры делятся на две группы:
Набор записей в регистре
Любая работа с регистрами, происходит с помощью наборов записей. Сначала устанавливается отбор, в набор считываются (или не считываются при необходимости) записи, и с этими записями уже происходит работа. В наборе может быть любое количество записей, или не быть вообще. Если не установить отбор, и записать набор, есть возможность получить только этот набор в регистре(произойдет очистка регистра), надо учесть, что нельзя записать набор регистра накоплений, без установленного отбора по регистратору. Если создать набор, установить отборы и записать его не читая, будет записан пустой отбор(произойдет очистка записей по указанному отбору).
Регистры сведений 1С. Универсальная «палочка-выручалочка» разработчика
Основная трудность, с которой сталкиваются начинающие изучать 1С, заключается в том, что быстро разобраться что здесь к чему очень сложно. В платформе 1С:Предприятие вводится целый ряд оригинальных понятий. Объяснений этих понятий во встроенной справке, на сайте 1С и на прочих ресурсах много, но они мало что проясняют даже искушенному в ИТ. Здесь я расскажу об одном важном понятии в 1С. Простыми словами и со смыслом.
Определение
Приведу для начала две цитаты.
Основная задача регистра сведений — хранить существенную для прикладной задачи информацию, состав которой развернут по определенной комбинации значений и, при необходимости, развернут во времени.
Это из встроенной справки. Ее еще называют синтакс-помощник. Слова тут простые, но если смотреть свежим взглядом, лишены какого-либо смысла. Есть регистр, который хранит существенную информацию? А что, есть регистр, который хранит чепуху? Что означает «развернутость» информации? Она была «свернута», а потом «развернулась»? Хотелось бы понять детали этого процесса!
Регистры сведений — это прикладные объекты конфигурации. Они позволяют хранить в прикладном решении произвольные данные в разрезе нескольких измерений.
А это с сайта 1С https://v8.1c.ru/platforma/registr-svedeniy/ Как можно что-то «хранить в разрезе»? Что тут «режется» и зачем?
Мое определение понятия «регистр сведений» звучит так.
Регистр сведений — это полный аналог таблицы базы данных.
Для тех, кто хоть немного знаком с базами данных, будет достаточно следующего дополнения.
В отличие от прочих объектов 1С:Предприятие, в регистре сведений есть возможность управлять первичным ключом.
Для тех, кто не знаком с теорией баз данных поясню, по возможности коротко и просто.
Большинство современных баз данных называются реляционными, потому что они состоят из таблиц. Так или иначе, все имели дело с таблицами. Таблица — это множество однотипных строк, и множество колонок. Как добраться до колонки понятно. Надо назвать ее по имени. А как добраться до конкретной строки в таблице? Для этого нам потребуется т.н. ключ. В самом простом случае ключом для конкретной строки является значение в одной из колонок.
В этой таблице ключи находятся в колонке «Идентификатор». Для того, чтобы однозначно определять строку по ключу, каждое значения ключа должно быть уникальным в пределах таблицы. Какой-бы большой не была таблица, поиск по ключу происходит очень быстро, потому что ключи особым образом компонуются в структуру под названием индекс.
При проектировании почти в любой базы данных так или иначе возникает ситуация, когда требуется создать таблицу, в которой значения ключей будут храниться не в одной колонке, а в нескольких. Например, у нас есть таблица товаров и таблица складов. Мы хотим создать таблицу, в которой будут отображаться цены товаров на складах.
Регистр сведений в платформе 1С:Предприятие позволяет явным образом указать ключ (его еще называют первичный ключ). Этим он и отличается от всех прочих объектов. Для них первичные ключи создаются автоматически и не подлежат изменению.
Можно сказать, что регистр сведений самый универсальный инструмент среди всех прочих в 1С. Посмотрим, что можно делать с ним.
Регистр сведений со множеством измерений
Измерение — это еще один термин родившийся в недрах 1С. Для регистра сведений измерение ни что иное, как часть ключа. Соответственно, множество измерений регистра сведений задает первичный ключ. Измерения есть и в других объектах платформы 1С:Предприятие (регистры накопления, регистры бухгалтерии, регистры расчетов), но там они обозначают нечто принципиально иное, на чем мы сейчас останавливаться не будем.
Такие объекты платформы, как справочник или документ создаются с предопределенным первичным ключом. Этот первичный ключ состоит из одного поля. В 1С его называют ссылкой. Если же нам требуется составной первичный ключ, тогда мы используем регистр сведений.
Один пример я уже дал выше. Еще несколько примеров:
цены товаров у поставщиков;
подразделение и занимаемая должность работника;
место хранения товара на складе;
настройки заполнения банковских выписок;
график работы сотрудника.
Регистр сведений с одним измерением
Такое встречается довольно часто, в том числе и в типовых конфигурациях. Тут надо понимать, что регистр сведений в этом случае не заменяет справочник, у которого тоже всего одно «измерение». Отличие тут принципиальное. «Измерение» справочника, которое в 1С называют ссылкой, заполняется автоматически при создании новых записей. В то время как в регистре сведений измерения заполняются либо пользователем, либо программно, но во втором случае нужны усилия разработчика. Обычно в качестве единственного измерения регистра сведений указывают ссылку на запись в справочнике или ссылку на документ. Далее в разделе ресурсы или реквизиты (разница между ресурсами и реквизитами в регистре сведений исчезающе мала и мы не будем ее здесь обсуждать) вводят некоторое количество полей. Таким образом получается, что у справочника или документа появились новые поля. Мы как будто расширили справочник или документ.
Конечно, такая практика приводит к некоторой путанице. Открываешь справочник(документ) в режиме пользователя, вот он реквизит. Можно редактировать. Открываешь справочник(документ) в Конфигураторе, нет реквизита! Ищи в другом месте. Но есть и плюс, который заключается в том, что исходный справочник(документ) остается в неизменном виде. И если возникает именно такая задача (внести изменения, но не «трогать» исходный справочник или документ), тогда используют регистр сведений с одним измерением.
Регистр сведений без «измерений»
Можно создать регистр сведений вообще без измерений. Это не будет означать, что у регистра сведений нет ключа вообще и можно вводить сколько угодно записей. Это будет означать, что ключ есть, он представляет собой пустое значение и запись в таблице может быть только одна. В 1С:предприятие есть такой объект, который называется константа. Он не имеет ничего общего с тем, что под этим обычно подразумевается. Концептуально, константа в 1С — это таблица с одной колонкой и одной строкой. Чисто умозрительно, полезная штука, но на практике — не очень. Эти самые константы надо как-то группировать. Приходится задавать префиксы имен. Имена становятся уродливыми. Регистр сведений без измерений, по сути, представляет собой поименованное множество пар ключ-значение. И это отличная альтернатива константам.
Подчинение регистратору
Регистры сведений входят в семейство регистров 1С. По правде сказать, они не совсем полноправные члены этой семьи. Регистры сведений — это универсальный инструмент, в то время как регистры накопления гораздо более специализированы, а уж регистры бухгалтерии и регистры расчетов специализированы очень сильно. Единственное, что обнаруживает родственную связь регистров сведений с прочими регистрами, это то, что записи в регистрах сведений могут создаваться на основании документов. Здесь же, кстати, можно увидеть и отличие регистров сведений от остальных регистров. Во всех прочих регистрах записи создаются ТОЛЬКО на основании документов, а для регистров сведений этот вопрос оставлен на усмотрение разработчика. В принципе, этим пользуются и в типовых и в нетиповых конфигурациях, но лично я не вижу в этом большого смысла. Здесь имеет место скорее некоторая инерция. Разработчики привыкают использовать связку документ-регистр для регистров накопления, а потом переносят эту практику на регистры сведений.
Регистр сведений с измерением типа дата
Есть такая довольно часто встречающаяся задача, которая называется «Получить последние значения чего-либо». У нее есть известное решение, укладывающееся в три строки SQL запроса. В 1С-овском диалекте это выглядит так:
Чтобы избавить разработчиков от необходимости вспоминать это решение, в 1С решили сделать так. Регистры сведений, у которых в составе первичного ключа есть дата, были объявлены особенным подвидом и названы периодическими регистрами сведений. У этих периодических регистров сведений появились виртуальные таблицы под названием срез последних. При обращении к этим таблицам происходит выполнение запроса, являющегося аналогом того, что я указал выше. Там, правда, действует странное ограничение. Получить последние значения вы можете только по полному списку измерений. Это противоречит опыту, который разработчики получают при взаимодействии с регистрами накопления. Обращение к виртуальной таблице оборотов регистра накопления возможно по любому подмножеству измерений. Но в целом, периодические регистры сведений — это полезный инструмент. Хотя, в последнее время, с появлением версионирования и истории версий, он несколько утратил свое значение.
Заключение
Сильная сторона 1С в том, что можно не знать многие вещи, например, о базах данных. И при этом создавать работоспособные приложения. В большинстве случаев, вам не требуется знать или помнить в деталях для чего нужны первичные ключи и как они работают. Система все сделает за вас. Но когда вам потребуется сделать что-то из области универсального, тогда начальные знания о том, как это работает, все-таки будут нелишними.
В заключение хочу порекомендовать бесплатный вебинар от OTUS, где преподаватели покажут как решаются задачи проектирования объектов метаданных различных конфигураций, для решения практических задач бизнеса.