Измерения ресурсы реквизиты в регистре это

Время на прочтение
6 мин

Количество просмотров 3.1K

Основная трудность, с которой сталкиваются начинающие изучать 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, где преподаватели покажут как решаются задачи проектирования объектов метаданных различных конфигураций, для решения практических задач бизнеса.

  • Подробнее о бесплатном вебинаре

Регистры

В этой статье под словом «регистры» стоит понимать «регистры накопления». Прочие регистры, в частности регистры сведений имеют другой функционал.


Назначение регистров

Регистры — это таблицы для накопления оперативных данных и получения сводной информации.

Данные в регистры добавляются только при проведении документов. Сведения из регистров используются для формирования отчетов. Классическая схема использования регистров в 1С:Предприятие выглядит следующим образом:

Документы => Регистры => Отчеты

Измерения и ресурсы

Основная проблема при проектировании регистров — это определение его структуры. Структура регистра должна быть такова, чтобы извлекать из него нужную информацию без утомительной обработки.

Измерения регистра — это то, в каких разрезах требуется хранение информации.

Ресурсы регистра — это количественные или суммовые данные, которые хранятся в регистре.

Предположим, что регистр «Остатки товаров» должен содержать сведения о количестве и стоимости каждого товара на каждом складе. В идеологии системы 1С:Предприятие регистр такого вида представляет собой прямоугольную систему координат на одной оси которой находятся склады, на другой — товары, а на пересечении конкретного склада и конкретного товара находятся цифры количества товара и стоимости товара.

Регистр: Остатки товаров

Измерения: Товар, Склад

Ресурсы: Кол-во, Стоимость

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

   * остаток конкретного товара на конкретном складе

   * остаток конкретного товара на всех складах

   * стоимость всех товаров на конкретном складе

Движения в регистрах

В табличном виде регистр ОстаткиТоваров представляется следующим образом:

Вид движения Товар Склад Кол-во Стоимость
приход Товар4 Склад1 15 200
расход Товар4 Склад1 10 100
приход Товар4 Склад1 5 50

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

Виды регистров

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

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

Регистры остатков

Рассмотрим в качестве примера отслеживание взаиморасчетов с покупателями товаров, которые производит или продает предприятие.

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

Регистры оборотов

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

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

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

Основы программирования

Регистры, используемые в примерах:

Оборотный регистр Доходы

Измерения: Клиент, Товар

Ресурсы: Доход

Реквизиты: нет

Периодичность: День    

Хранит доходы от продаж за день в разрезе клиентов и товаров.

Регистр остатков Товары

Измерения: Товар, Склад

Ресурсы: Количество, Стоимость

Реквизиты: нет

Хранит остатки товаров на каждом складе в количественном и суммовом выражении.

Запись движений в регистр остатков

//только при проведении документа
Регситр.Доходы.ДвижениеПриход(Покупатель,КупленныйТовар,СуммаПокупки)

Методы ДвижениеПриходВыполнить и ДвижениеРасходВыполнить

Пример:

Регистр.Доходы.Клиент = Покупатель;
Регистр.Доходы.Товар = КупленныйТовар;
Регистр.Доходы.Доход = СуммаПокупки;
Регистр.Доходы.ДвижениеПриходВыполнить();

Запись движений в оборотный регистр

(только при проведении документа)

1. Метод Движение

Пример:

Регистр.Товары.Движение (ПоступившийТовар, ТекСклад, КолвоПоНакладной, СуммаПоНакладной)

2. Метод ДвижениеВыполнить

Пример:

Регистр.Товары.Товар = ПоступившийТовар;
Регистр.Товары.Склад = ТекСклад;
Регистр.Товары.Количество = КолвоПоНакладной;
Регистр.Товары.Стоимость = СуммаПоНакладной;
Регистр.Товары.ДвижениеВыполнить();

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

Обращение к итогам регистра

1-й способ.

РегТовары = СоздатьОбъект("Регистр.Товары");
РегТовары.ВыбратьИтоги();
Пока РегТовары.ПолучитьИтог()=1 Цикл
     Сообщить("Товар " + Строка(РегТовары.Товар) +
                 " на складе " + Строка(РегТовары.Склад) +
                 " кол-во: " + Строка(РегТовары.Количество) +
                 " стоимость: " + Строка(РегТовары.Стоимость) +
КонецЦикла;

2-й способ. Выгрузка итогов в таблицу значений

РегДоходы = СоздатьОбъект("Регистр.Доходы");
ТабЗнач = СоздатьОбъект("ТаблицаЗначений");

РегДоходы.ВыгрузитьИтоги(ТабЗнач);

ТабЗнач.ВыбратьСтроки();
Пока ТабЗнач.ПолучитьСтроку()=1 Цикл
     Сообщить("Товар " + Строка(ТабЗнач.Товар) +
              " на складе " + Строка(ТабЗнач.Склад) +
              " кол-во: " + Строка(ТабЗнач.Количество) +
              " стоимость: " + Строка(ТабЗнач.Стоимость) +
КонецЦикла;

Обращение к итогам оборотного регистра

РегДоходы = СоздатьОбъект("Регистр.Доходы");
//установить период выборки "30 ноября 2001 года"
РегДоходы.ИспользоватьПериод(2001,11,30);

1. Метод Итог

Пример:

//получить доход за день по данному клиенту и данному товару
Доход = РегДоходы.Итог(ТекКлиент, ТекТовар, "Доход");

2. Метод Итоги

Пример:

//получить доход за день по данному клиенту и данному товару
РегДоходы.Итоги(ТекКлиент, ТекТовар);
Доход = РегДоходы.Доход;

3. Метод СводныйИтог

Могут быть указаны не все измерения. Фиксируются только указанные измерения.

Пример:

//получить сводные итоги за день
ДоходПоКлиенту = РегДоходы.СводныйИтог(ТекКлиент,,"Доход");
ДоходПоТовару = РегДоходы.СводныйИтог(,ТекТовар,"Доход");

4. Метод СводныеИтоги

Могут быть указаны не все измерения. Фиксируются только указанные измерения.

Пример:

//получить сводные итоги за день по клиенту
РегДоходы.СводныеИтоги(ТекКлиент,); //указано только одно измерение
ДоходПоКлиенту = РегДоходы.Доход;

//получить сводные итоги за день по товару
РегДоходы.СводныеИтоги(,ТекТовар); //указано только одно измерение
ДоходПоТовару = РегДоходы.Доход;
[1C]


Обращение к итогам регистра остатков

[1C] РегТовары = СоздатьОбъект("Регистр.Товары");

1. Метод Остаток

Пример:

//получить остаток данного товара на данном складе
Колво = РегТовары.Остаток (ТекТовар, ТекСклад, "Количество");

//получить стоимость данного товара на данном складе
Стоимость = РегТовары.Остаток (ТекТовар, ТекСклад, "Стоимость");

2. Метод Остатки

Пример:

//получить остаток данного товара на данном складе по кол-ву и по сумме
РегТовары.Остатки (ТекТовар, ТекСклад);
Колво = РегТовары.Количество;
Стоимость = РегТовары.Стоимость;

3. Метод СводныйОстаток

Могут быть указаны не все измерения. Фиксируются только указанные измерения.

Пример:

//получить остаток данного товара на всех складах
КолвоТовара = РегТовары.СводныйОстаток (ТекТовар,,"Количество");
СтоимостьТовара = РегТовары.СводныйОстаток (ТекТовар,,"Стоимость");

//получить стоимость всех товаров на данном складе
СтоимостьПоСкладу = РегТовары.СводныйОстаток (,ТекСклад,"Стоимость");

4. Метод СводныеОстатки

Пример:

//получить сводные остатки по товару
РегТовары.СводныеОстатки(ТекТовар,); //указано только одно измерение
КолвоТовара = РегТовары.Количество;
СтоимостьТовара = РегТовары.Стоимость;

//получить стоимость всех товаров на данном складе
РегТовары.СводныеИтоги(,ТекСклад); //указано только одно измерение
СтоимостьПоСкладу = РегТовары.Стоимость;

Обращение к движениям регистра

РегТовары = СоздатьОбъект("Регистр.Товары");

РегТовары.ВыбратьДвижения(ДатаНач, ДатаКон);
Пока РегТовары.ПолучитьДвижение()=1 Цикл
        Сообщить("Дата движения " + Строка(РегТовары.ТекущийДокумент.ДатаДок));
        Сообщить("Клиент: " + РегТовары.Клиент);
        Сообщить("Товар: " + РегТовары.Товар);
        Сообщить("Сумма: " + РегТовары.Доход);
КонецЦикла;

Фильтрация движений и итогов

РегТовары = СоздатьОбъект("Регистр.Товары");

1. Метод УстановитьФильтр

Пример:

//выбрать все движения по данному складу за период
РегТовары.УстановитьФильтр(,ТекСклад);
РегТовары.ВыбратьДвижения(ДатаНач, ДатаКон);
Пока РегТовары.ПолучитьДвижение()=1 Цикл
...
КонецЦикла;

//выбрать все товары на данном складе
РегТовары.УстановитьФильтр(,ТекСклад);
РегТовары.ВыбратьИтоги();
Пока РегТовары.ПолучитьИтог()=1 Цикл
...
КонецЦикла;

2. Метод УстановитьЗначениеФильтра

Пример:

//выбрать все движения по данному складу за период
РегТовары.УстановитьЗначениеФильтра("Склад", ТекСклад);

//далее идет выборка движений или итогов

3. Метод ВыбратьДвиженияДокумента

4. Метод ВыбратьДвиженияСОстатками

Применяется только для регистра остатков.

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

Временный расчет регистров требуется, если нужно выбрать итоги или движения на определенную дату. По умолчанию итоги регистров выдаются на Точку актуальности.

РегТовары = СоздатьОбъект("Регистр.Товары");
РегДоходы = СоздатьОбъект("Регистр.Доходы");

//установка флага временного расчета для регистров
РегТовары.ВременныйРасчет(1);
РегДоходы.ВременныйРасчет(1);

1. Метод РассчитатьРегистрыНа

Рассчитать все регистры с установленным флагом временного расчета на начало события.

(на начало даты или на момент до проведения документа)

2. Метод РассчитатьРегистрыПо

Рассчитать все регистры с установленным флагом временного расчета на конец события.

(на конец даты или на момент после проведения документа)

Запрос к регистру

В запросах к регистрам применяются функции НачОст, КонОст, Приход, Расход. В запросах к оборотным регистрам обязательно указывается Период.

ТекстЗапроса = "
|Период С ДатаНач По ДатаКон;
|Товар = Регистр.Доходы.Товар;
|Клиент = Регистр.Доходы.Клиент;
|Доход = Регистр.Доходы.Доход;
|Условие (Товар = ТекТовар);
|Группировка Клиент;
|Функция ПриходПоКлиенту = Приход(Доход);
|"; 

Регистр сведений

Регистры сведений — это прикладные объекты конфигурации. Они позволяют хранить в прикладном решении произвольные данные в разрезе нескольких измерений. Например, в регистре сведений можно хранить курсы валют в разрезе валют, или цены предприятия в разрезе номенклатуры и типа цен.

Структура

Информация в регистре сведений хранится в виде записей, каждая из которых содержит значения измерений и соответствующие им значения ресурсов.

Измерения регистра описывают разрезы, в которых хранится информация, а ресурсы регистра непосредственно содержат хранимую информацию. Например, для регистра сведений Цены товаров, который имеет следующую структуру:


Регистр сведений

записи, хранимые в базе данных, будут выглядеть следующим образом:


Регистр сведений

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

Периодичность

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


Регистр сведений

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

Например, периодический регистр сведений Цены товаров может не только хранить информацию о том, какова цена на определенную номенклатуру сейчас, но и о том, как она изменялась в прошлом (или будет изменяться в будущем):

Подчинение регистратору

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


Регистр сведений

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

Например, изменение цен компании может производиться только определенным кругом лиц, и каждое такое изменение должно сопровождаться «бумажным» документом. В этом случае можно использовать режим подчинения регистратору, при котором изменение цен может быть выполнено только специальным документом — Изменение цен товаров.

Уникальность записей

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

В общем случае в формировании ключа записи будут участвовать значения регистратора, периода и значения измерений. Таким образом, например, в непериодическом регистре сведений Цены товаров с независимым режимом записи не может существовать двух записей о розничной цене конфет ассорти. Точно так же, как в периодическом регистре сведений Цены товаров, подчиненном регистратору, не может существовать двух записей о розничной цене конфет ассорти, внесенных одной и той же датой, одним и тем же документом Изменение цен товаров.

Формы

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

Форма списка

Для просмотра данных, содержащихся в регистре сведений, используется форма списка. Она позволяет выполнять навигацию по регистру, добавлять, помечать на удаление и удалять записи регистра. Форма списка позволяет выполнять сортировку и отбор отображаемой информации по нескольким критериям:


Регистр сведений

Форма записи

Для просмотра и изменения отдельных записей регистра сведений используется форма записи. Как правило, она представляет данные в удобном для восприятия и редактирования виде:


Регистр сведений

Функциональные возможности регистра сведений

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

  • создание, изменение и удаление записей;
  • выбор записей в заданном интервале по заданным критериям;
  • выбор записей по регистратору;
  • получение значений ресурсов записей, соответствующих указанному периоду и значениям измерений;
  • получение значений ресурсов наиболее ранних и наиболее поздних записей регистра, соответствующих указанному периоду и значениям измерений.

В статье рассмотрено описание и предназначение регистров сведений, а также примеры работы с регистрами сведений средствами встроенного языка 1С – создание и редактирование наборов записей, отдельных записей, работа с ключом записи.

Содержание

Регистры сведений в 1С 8

Что такое регистр сведений

Регистр сведений – это объект конфигурации, который предназначен для хранения произвольной информации в разрезе нескольких измерений. Например, можно хранить соответствие материально-ответственных лиц и складов, курсы валют или цену на товары. Можно представить регистр сведений как многомерную таблицу, где на каждом пересечении измерений хранятся значения, которые называются Ресурсы.

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

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

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

Строки в многомерной таблице регистра сведений называются записями. Уникальность записей регистра сведений определяется как комбинация измерений и периода. В случае, если регистр сведений не периодический, то период будет не заполнен, и уникальные записи будут отличаться по комбинации измерений. Платформа не допускает создания двух записей с одинаковым набором измерений и периодом. Измерения и период образуют т.н. составной ключ, и называются ключевыми полями.

Записи в регистр сведений могут вноситься как вручную, независимо одна от другой, так и при помощи документов, единым набором. Документ, которым вносится запись в регистр сведений, называется регистратором.

Свойства регистра сведений. Основные настройки

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

Периодичность регистра сведений

Данное свойство отвечает за доступность стандартного реквизита Период. Периодичность может быть

  • В пределах секунды
  • В пределах дня
  • В пределах месяца
  • В пределах квартала
  • В пределах года

В случае, если регистр сведений подчинен регистратору (см. ниже), становится доступным еще один вариант периода – по позиции регистратора.

Поле Период входит в составной ключ записи; можно добавлять записи с одинаковым составом измерений, но с разным периодом. Если периодичность – по позиции регистратора, то дата документа может совпадать с точностью до секунды – все равно это будут разные записи, т.к. в этом случае позиция регистратора будет определяться как момент времени (Дата + ссылка на документ). В зависимости от выбранной периодичности, период записи будет автоматически приводиться к началу периода в свойстве Периодичность. Например, если указана периодичность “В пределах дня”, то к началу суток, если “В пределах месяца” – то соответственно к первому числу месяца, и т.д.

Режим записи регистра сведений 1С

Режим записи определяет, можно ли редактировать записи регистра сведений вручную, или они будут вноситься движениями документа-регистратора. Для регистров сведений с режимом записи “Независимый” можно указывать основной отбор для измерений. В случае, если при этом регистр сведений периодический, становится возможным указание флажка Основной отбор по периоду.

Что такое ведущее измерение и основной отбор?

Флаг Ведущее у измерения регистра сведений означает, то данная запись имеет смысл пока существует объект, ссылка на который хранится в данном измерении. Например, если удалить из базы данных сотрудника “Иванов Иван”, то автоматически из регистра сведений будут удалены все записи по тарифам, где в измерении “Сотрудник” был указан Иванов Иван. Если данный флаг не установлен, то при удалении объекта, записи остались бы в регистре с битой ссылкой на него.

Также свойство “Ведущее” у измерения отвечает за построение пользовательского интерфейса. В карточке объекта, который является ведущим измерением, появляется гиперссылка для быстрого перехода к регистру сведений с отбором по текущему объекту.

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

Проектирование структуры регистра сведений

Следует стараться избегать архитектурных решений, когда значение одного ресурса регистра сведений меняется значительно чаще чем значение другого. В этом случае целесообразно выделить такие ресурсы в отдельный регистр сведений. Это связано с тем, что в момент записи записываются все ресурсы, а не только измененный, что приводит к неоправданной нагрузке на СУБД.

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

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

Например, мы хотим знать, какие материально ответственные лица закреплены за тем или иным складским помещением. Если таких МОЛ более одного человека, то правильная архитектура регистра будет такая:

Измерения: МОЛ
Ресурсы: Склад

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

Измерения: Склад
Ресурсы: МОЛ

Примеры работы с регистрами сведений в 1С

Программная запись в регистр сведений 1С

Программно добавить записи в независимый регистр сведений можно двумя способами: при помощи менеджера записи, и при помощи набора записей.

//Использование менеджера записи регистра сведений
НоваяЗапись = РегистрыСведений.ТарифыРаботников.СоздатьМенеджерЗаписи();
//Сотрудник - это переменная, реквизит формы, параметр и т.п. с типом СправочникСсылка.Сотрудники
НоваяЗапись.Сотрудник = Сотрудник;
НоваяЗапись.ВидТарифа = Перечисления.ВидыТарифов.Почасовой;
НоваяЗапись.Тариф = 1500;
НоваяЗапись.Записать();

//Использование набора записей
НаборЗаписей = РегистрыСведений.ТарифыРаботников.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Сотрудник.Установить(Сотрудник);

ЗаписьНабора = НаборЗаписей.Добавить();
ЗаписьНабора.Сотрудник = Сотрудник;
ЗаписьНабора.ВидТарифа = Перечисления.ВидыТарифов.Почасовой;
ЗаписьНабора.Тариф = 1500;

ЗаписьНабора = НаборЗаписей.Добавить();
ЗаписьНабора.Сотрудник = Сотрудник;
ЗаписьНабора.ВидТарифа = Перечисления.ВидыТарифов.ПоДням;
ЗаписьНабора.Тариф = 6000;

НаборЗаписей.Записать();

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

Набор записей регистра сведений

Общий порядок добавления новых записей в регистр сведений:

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

Рассмотрим на примерах работу с набором записей средствами языка 1С

// работа с набором записей
	
//создание набора записей
НаборТарифы = РегистрыСведений.ТарифыРаботников.СоздатьНаборЗаписей();
 
//количество записей набора
Колво = НаборТарифы.Количество(); //0
 
//чтение набора записей из базы
//если не вызвать метод Прочитать и не добавить записи, то запишется пустой набор записей!
НаборТарифы.Прочитать();
Колво = НаборТарифы.Количество(); //вернет количество записей в наборе
 
//добавление записей
ЗаписьНабора = НаборЗаписей.Добавить();
ЗаписьНабора.Сотрудник = Сотрудник;
ЗаписьНабора.ВидТарифа = Перечисления.ВидыТарифов.ПоДням;
ЗаписьНабора.Период = ТекущаяДата();
ЗаписьНабора.Тариф = 6000;
 
//выгрузка в таблицу значений
ТаблицаТарифов = НаборТарифы.Выгрузить();
 
//удаление всех записей набора
НаборТарифы.Очистить();
 
//загрузка из таблицы значений
НаборТарифы.Загрузить(ТаблицаТарифов);
 
//удаление первой записи набора
НаборТарифы.Удалить(0);
 
//выгрузка одной колонки в массив
МассивТоваров = НаборТарифы.ВыгрузитьКолонку("Сотрудник");

//загружаем обратно
НаборТарифы.ЗагрузитьКолонку(МассивТоваров, "Сотрудник");
 
//сумма всех значений ресурса, если его тип содержит тип Число
Итог = НаборТарифы.Итог("СуммаТарифа");
 
//запись набора
НаборТарифы.Записать();

Изменение записей регистра сведений

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

Изменим, например, все часовые оклады, добавив 10%.

//Изменение записей регистра сведений
НаборЗаписей = РегистрыСведений.ТарифыРаботников.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.ВидТарифа.Установить(Перечисления.ВидыТарифов.Почасовой);
НаборЗаписей.Прочитать();
//Переберем в цикле все записи набора
Для Каждого ЗаписьНабора из НаборЗаписей Цикл
	//Добавим 10%
	ЗаписьНабора.Тариф = ЗаписьНабора.Тариф*1.1;
КонецЦикла;
НаборЗаписей.Записать();

Удаление записей регистра сведений

//Удаление записей из регистра сведений

//1. Удалить записи с определенным отбором
НаборЗаписей = РегистрыСведений.ТарифыРаботников.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.ВидТарифа.Установить(Перечисления.ВидыТарифов.ПоДням);
НаборЗаписей.Отбор.Период.Установить(ДатаФильтра);
//Запишем пустой набор записей
НаборЗаписей.Записать();

//2. Очистить регистр сведений программно
НаборЗаписей = РегистрыСведений.ТарифыРаботников.СоздатьНаборЗаписей();
НаборЗаписей.Записать();
//Все записи регистра сведений будут удалены

//3. Выборочное удаление записей по какому-нибудь условию
//Здесь рассмотрим пример обработки записей с учетом значения реквизитов
//Наложить отбор непосредственно на реквизиты нельзя, поэтому следует использовать другой способ
НаборЗаписей = РегистрыСведений.ТарифыРаботников.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.ВидТарифа.Установить(Перечисления.ВидыТарифов.Почасовой);
НаборЗаписей.Прочитать();
//Переберем в цикле все записи набора
МассивЗаписейКУдалению = Новый Массив;
Для Каждого ЗаписьНабора из НаборЗаписей Цикл
	Если ЗаписьНабора.Примечание = "Служебная запись" Тогда
		МассивЗаписейКУдалению.Добавить(ЗаписьНабора);
	КонецЕсли;
КонецЦикла;
//Вторым циклом удалим ненужные записи из набора регистра сведений
Для Каждого ЗаписьКУдалению Из МассивЗаписейКУдалению Цикл
	НаборЗаписей.Удалить(ЗаписьКУдалению);
КонецЦикла;
НаборЗаписей.Записать();

Менеджер записи регистра сведений

//Создание при помощи менеджера записи регистра сведений
ЗаписьМенеджер = РегистрыСведений.ТарифыРаботников.СоздатьМенеджерЗаписи();
ЗаписьМенеджер.Сотрудник = Сотрудник;
ЗаписьМенеджер.ВидТарифа = Перечисления.ВидыТарифов.Почасовой;
ЗаписьМенеджер.Период = ПериодЗаписиУдаления;
ЗаписьМенеджер.Записать();

//Изменение записи через менеджер записи
ЗаписьМенеджер = РегистрыСведений.ТарифыРаботников.СоздатьМенеджерЗаписи();
ЗаписьМенеджер.Сотрудник = Сотрудник;
ЗаписьМенеджер.ВидТарифа = Перечисления.ВидыТарифов.ПоДням;
ЗаписьМенеджер.Период = ПериодЗаписиУдаления;
ЗаписьМенеджер.Прочитать();

Если ЗаписьМенеджер.Выбран() Тогда
	ЗаписьМенеджер.Тариф = 7000;
	ЗаписьМенеджер.Записать();
КонецЕсли;

//Удаление при помощи менеджера записи
ЗаписьМенеджер = РегистрыСведений.ТарифыРаботников.СоздатьМенеджерЗаписи();
ЗаписьМенеджер.Сотрудник = Сотрудник;
ЗаписьМенеджер.ВидТарифа = Перечисления.ВидыТарифов.Почасовой;
ЗаписьМенеджер.Период = ПериодЗаписиУдаления;
ЗаписьМенеджер.Удалить();

Ключ записи регистра сведений

// создать ключ записи
//пустой ключ	
ПустойКлюч = Новый("РегистрСведенийКлючЗаписи.ТарифыРаботников");
//используя менеджер
ПустойКлюч = РегистрыСведений.ТарифыРаботников.ПустойКлюч();
 
//ключ на определенную запись регистра
ЗначенияКлюча = Новый Структура;
ЗначенияКлюча.Вставить("Период", Дата(2021,01,31));
ЗначенияКлюча.Вставить("Сотрудник", СсылкаНаСотрудника);
ЗначенияКлюча.Вставить("ВидТарифа", Перечисления.ВидыТарифов.ПоДням);
КлючЗаписи = РегистрыСведений.ТарифыРаботников.СоздатьКлючЗаписи(ЗначенияКлюча);

Изменение записей в регистр сведений с подчинением регистратору

Рассмотрим пример. Допустим, у нас есть документ “Назначение материально ответственных лиц”, в котором мы в табличной части указываем склад и соответствующее ему МОЛ. Этот документ записывает движения в регистр сведений МОЛПоСкладам, со следующими настройками:

  • Измерения: Склад, тип СправочникСсылка.Склады
  • Ресурсы: МОЛ, тип СправочникСсылка.Сотрудники
  • Реквизиты: Примечание, тип Строка(100)
  • Периодичность: в пределах месяца
  • Режим записи: Подчинение регистратору

Для изменения записей регистра сведений, подчиненного регистратору, нужно иметь ссылку на документ-регистратор. После этого необходимо получить движения объекта по этой ссылке, по нужному регистру. Далее мы получаем набор записей, и работа с ним аналогична работе при использовании метода СоздатьНаборЗаписей. Для того чтобы изменить движения документа, также следует вызвать метод Прочитать. Второй вариант – заново добавить нужные записи в движения, в этом случае новый набор полностью заменит старый.

ОбъектРегистратор = СсылкаНаДокумент.ПолучитьОбъект();
ДвиженияПоРегистру =ОбъектРегистратор.Движения.МОЛПоСкладам;
ДвиженияПоРегистру.Прочитать();
Для Каждого ЗаписьДокумента Из ДвиженияПоРегистру Цикл
	ЗаписьДокумента.Примечание = "Запись обработана программно";
КонецЦикла;
ДвиженияПоРегистру.Записать();

Примеры работы с периодическим регистром сведений

Периодический регистр сведений позволяет получать данные о самых первых и самых последних записях. Для этого платформа предусматривает две виртуальные таблицы – СрезПервых и СрезПоследних. В определенных случаях можно включить итоги для среза первых и/или последних. Это может многократно ускорить получение данных, так как при этом будут созданы физические таблицы, откуда данные будут извлекаться гораздо быстрее, чем из виртуальных.

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

Получить самые ранние записи (Срез первых)

Получим самые ранние записи тарифов с видом тарифа “ПоДням”

//Как получить самые первые записи
Отбор = Новый Структура("ВидТарифа", Перечисления.ВидыТарифов.ПоДням);
СрезПервых = РегистрыСведений.ТарифыРаботников.СрезПервых(ДатаСреза, Отбор);
//Получим таблицу значений со структурой колонок, аналогичной структуре регистра сведений
//В результат попадут наиболее ранние записи регистра, соответствующие установленным значениям ключевых полей.
//Записи подбираются для каждой комбинации из всех имеющихся значений измерений регистра.
//При этом, если есть записи с датой реньше, чем начало периода, они учитываться не будут.
Для Каждого СтрСреза Из СрезПервых Цикл
	Сообщить(СтрШаблон("Самый ранний тариф по дням для сотрудника %1: %2", СтрСреза.Сотрудник, СтрСреза.Тариф)); 
КонецЦикла;

Получить самые поздние записи (Срез последних)

//Как получить последние записи регистра сведений на дату
//В случае работы с запросом, можно накладывать более сложные фильтры, и извлекать только необходимые данные,
// например, только сотрудника и тариф, без лишних полей
ЗапросПоследних = Новый Запрос("ВЫБРАТЬ
|	ПРЕДСТАВЛЕНИЕ(ТекущиеТарифы.Сотрудник) КАК Сотрудник,
|	ТекущиеТарифы.Тариф КАК Тариф
|ИЗ
|	РегистрСведений.ТарифыРаботников.СрезПоследних(&ДатаСреза, ВидТарифа = ЗНАЧЕНИЕ(Перечисление.ВидыТарифов.Почасовой)) КАК ТекущиеТарифы");
ЗапросПоследних.УстановитьПараметр(ДатаСреза, ДатаСреза);
Выборка = ЗапросПоследних.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
	Сообщить(СтрШаблон("Текущий почасовой тариф для сотрудника %1: %2", Выборка.Сотрудник, Выборка.Тариф)); 
КонецЦикла;

Вопрос Чем реквизит отличается от измерения — это понятно всем. А вот чем реквизит отличается от ресурса?

Регистр сведений – это вырожденный случай регистров. Поэтому у него «не все так», как у «настоящих» регистров (накопления, бухгалтерии, расчета). И чтобы не путаться дальше будем рассматривать все в несколько в упрощенном виде.

Сначала посмотрим, как работает «настоящий» регистр, регистр накопления.
Регистр простой, два измерения, один ресурс и один реквизит (рис. 1).

Допустим, в регистре есть четыре записи (рис. 2).

Это – основная таблица регистра, т.е. таблица, содержащая записи, которые были добавлены в регистр.
Вы можете получить записи этой таблицы и, естественно, отобрать их по любому из существующих полей (рис. 3).

«Функция» регистра накопления, грубо говоря, заключается в том, чтобы суммировать значения ресурсов. Причем это суммирование выполняется для всех различных значений измерений. То есть, если вы попросите «функцию» этого регистра, то получите следующий результат (рис. 4).

То есть значения ресурсов для записей, содержащих одинаковые значения измерений (в данном случае Значение1 и Значение2) будут просуммированы (9 + 1 = 10).
Понятно, что когда вы получаете функцию, невозможно получить какие-либо реквизиты, потому что, например, непонятно, как можно «сложить» Заметка99 и Заметка1?. Можно только «развернуть функцию», и посмотреть, из каких записей она сложилась, какие у этих записей реквизиты. Но сам результат «функции» не содержит информации о каждой из записей (рис. 5).

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

Теперь посмотрим на регистр сведений. Возьмем периодический регистр сведений с такой же структурой и такими же записями. Его основная таблица будет выглядеть следующим образом (рис. 6).

«Функцией» периодического регистра сведений является получение наиболее ранних или наиболее поздних записей, на некоторую дату по различным сочетаниям значений измерений. Например «функция» этого регистра на 29 число будет выглядеть следующим образом (рис. 7).

То есть для уникального сочетания значений измерений будет выбрана одна из существующих записей основной таблицы, в отличие от регистра накопления, в котором результатом функции являлась запись, не существующая в основной таблице (рис. 8).

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

Если же рассматривать непериодический регистр сведений, то у него вообще нет «функции». Можно только записать данные в его основную таблицу, и прочитать их. Несмотря на это он так же имеет измерения, ресурсы и реквизиты. Потому что данные в этот регистр заносятся по тем же правилам, как и во все другие регистры: не может быть двух записей, с одинаковыми значениями ключевых полей (измерений, в данном случае).
Первоисточник

Любой регистр можно представить в виде функции, возвращающей некоторое значение (значения) в зависимости от переданных параметров (параметра).

Измерения регистра описывают параметры этой функции.

Возвращаемое значение (значения) функции описываются ресурсами регистра.

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

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

Или вы можете выбирать некоторые записи, содержащиеся в регистре, соответствующие значениям измерений или реквизитов. То есть анализировать исходные данные, «от которых» раcсчитывает свою функцию регистр.

Для «настоящих регистров» (накопления, бухгалтерии, расчета) получать значения ресурсов, указывая реквизиты, нельзя. И получив значения ресурсов (то есть «вычислив функцию регистра»), вы не сможете увидеть реквизиты.

Next Post

  • v8

  • Программисту 1C

Вт Май 18 , 2010

Как в языке запросов 1С используются временные таблицы. Что такое временные таблицы. Что такое виртуальные таблицы. В одном из последних релизов платформы 8.1 появилась возможность использовать в запросах временные таблицы. Что это такое и как их можно использовать? Рассмотрим пример, с которым наверное многие из Вас сталкивались — а именно […]

В этой статье мы познакомимся с очень интересным объектом метаданных конфигурации 1С – регистром сведений.  Регистры сведений применяются для хранения различной информации, которая может использоваться в прикладной задаче. Информация в регистре сведений хранится в определенных разрезах, которые называются измерениями, а еще она может изменяться во времени.

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

Основное предназначение регистров сведений в том, что в них должны храниться показатели аналитики. Например, у нас есть задача хранить виды топлива (АИ-92, АИ-95 и т.д.), но также и цену на этот вид топлива. Как это удобное всего организовать. Однозначно сами виды топлива необходимо хранить в каком-то справочнике. Так его и назовем – вид топлива. Но где же хранить цену на этот вид топлива? Самое первое решение в реквизите справочника.

Реквизит справочника

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

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

Сейчас мы и решим эту маленькую прикладную задачу: в нашей конфигурации есть два  справочника «Виды топлива» и «Поставщики топлива»

Справочники конфигурации

Необходимо организовать возможность хранения цены для каждого вида топлива с учетом поставщиков. Для этого в конфигураторе 1С создадим новый регистр сведений ЦеныНаТопливо.

Создание нового регистра сведений в конфигураторе 1С

На закладке Основные установим имя и синоним. Все остальное оставим как есть.

Регистр сведений 1С цены на топливо

Теперь на закладке данные создадим два измерения – ВидТоплива и ПоставщикТоплива, типы которых ссылки на соответствующие справочники.

Измерение регистра сведений 1С ВидТоплива

Измерение регистра сведений 1С ПоставщикТоплива

У обоих измерений поставим флаг – Ведущее. Это значит, что если мы удалим элемент справочника, который указан в какой-то записи регистра сведений, то эта запись удалиться автоматически.  Так же есть одно интерфейсное следствие этого флага: если флаг установлен, то в форме элемента справочника мы сможем посмотреть на записи этого регистра для этого элемента.

Установим для каждого измерения этот флаг.

Флаг ведущее для измерения регистра сведений ВидТоплива

Флаг ведущее для измерения регистра сведений ПоставщикТоплива

У нас непериодический регистр, и в нем два измерения ВидТоплива и ПоставщикТоплива это значит, что мы не сможем создать две записи с одинаковыми значениями полей ВидТоплива и ПоставщикТоплива. Программа выдаст ошибку. Что и разумно – не может быть две разных цены на один и тот же вид топлива у одного и того же поставщика. А если может, то это значит, что необходимо добавить еще один разрез (например, база поставщика).

Кроме измерений у регистра сведений существуют Ресурсы и Реквизиты. Ресурс должен хранить основную информацию регистра сведений, т.е. те данные, ради которых он создан, а Реквизит содержит дополнительную второстепенную информацию о записи.

Мы создадим ресурс – Цена (тип число 10,2).

Ресурс Цена регистра сведений

И всё. Сохраним конфигурацию и откроем этот регистр сведений и заведем какую-нибудь запись.

Записи регистра сведений

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

Создание дублирующей записи регистра сведений

Ошибка при создании дублирующей записи регистра сведений

И последний момент: поскольку мы у измерения ВидТоплива установили флаг «Ведущее», то у элемента справочника ВидыТоплива появилась команда на открытие регистра сведений «Цена на топливо»

Команда на открытие регистра сведений

Если мы в управляемом приложении 1С перейдем по этой команде, то увидим все цены для нашего вида топлива.

Регистр сведений с отбором

Продолжение темы регистров сведений читайте в следующих статьях:

Периодический регистр сведений 1С

Подчиненный регистр сведений 1С

Изучайте основы конфигурирования в 1С и учитесь программировать в «1С: Предприятии» с помощью моих книг: «Программировать в 1С за 11 шагов» и «Основы разработки в 1С: Такси»

Книга «Программировать в 1С за 11 шагов»

Изучайте программирование в 1С в месте с моей книги «Программировать в 1С за 11 шагов»

  1. Книга написана понятным и простым языком — для новичка.
  2. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
  3. Научитесь понимать архитектуру 1С;
  4. Станете писать код на языке 1С;
  5. Освоите основные приемы программирования;
  6. Закрепите полученные знания при помощи задачника;

Книга «Основы разработки в 1С: Такси»

Отличное пособие по разработке в управляемом приложении 1С, как для начинающих разработчиков, так и для опытных программистов.

  1. Очень доступный и понятный язык изложения
  2. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
  3. Поймете идеологию управляемого приложения 1С
  4. Узнаете, как разрабатывать управляемое приложение;
  5. Научитесь разрабатывать управляемые формы 1С;
  6. Сможете работать с основными и нужными элементами управляемых форм
  7. Программирование под управляемым приложением станет понятным

Промо-код на скидку в 15% — 48PVXHeYu


Если Вам помог этот урок решить какую-нибудь проблему, понравился или оказался полезен, то Вы можете поддержать мой проект, перечислив любую сумму:

можно оплатить вручную:

Яндекс.Деньги — 410012882996301
Web Money — R955262494655

Вступайте в мои группы:

Вконтакте: https://vk.com/1c_prosto
Фейсбуке: https://www.facebook.com/groups/922972144448119/
ОК: http://ok.ru/group/52970839015518
Твиттер: https://twitter.com/signum2009

Регистры
— это таблицы для накопления оперативных
данных и получения сводной информации.

Данные
в регистры добавляются только при
проведении документов. Сведения из
регистров используются для формирования
отчетов. Классическая схема использования
регистров в 1С:Предприятие выглядит
следующим образом:

Документы
=> Регистры => Отчеты

Измерения и
ресурсы

Основная проблема
при проектировании регистров — это
определение его структуры. Структура
регистра должна быть такова, чтобы
извлекать из него нужную информацию
без утомительной обработки.

Измерения регистра
— это то, в каких разрезах требуется
хранение информации.

Ресурсы регистра
— это количественные или суммовые данные,
которые хранятся в регистре.

Предположим, что
регистр «Остатки товаров» должен
содержать сведения о количестве и
стоимости каждого товара на каждом
складе. В идеологии системы 1С:Предприятие
регистр такого вида представляет собой
прямоугольную систему координат на
одной оси которой находятся склады, на
другой — товары, а на пересечении
конкретного склада и конкретного товара
находятся цифры количества товара и
стоимости товара.

  1. Регистры в системе 1с: реквизиты

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

  1. Регистры в системе 1с: Виды регистров

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

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

  1. Регистры остатков

Рассмотрим
в качестве примера отслеживание
взаиморасчетов с покупателями товаров,
которые производит или продает
предприятие.

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

  1. Оборотные регистры

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

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

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]

  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #

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