1с найти в регистре накопления. Вопросы по оборотным и остаточным регистрам накопления

В этой статье я хочу рассмотреть такой механизм 1С:Предприятия 8, как регистры накопления. Этот механизм позволяет нам накапливать числовые показатели о деятельности фирмы, причем эти показатели он обрабатывает, рассчитывает итоги и позволяет нам получать остатки и обороты по этим показателям. В качестве примера приведу регистр накопления ТоварыНаСкладах из конфигурации “Управление торговлей”

Этот регистр используется для хранения остатков товаров на складах компании в разрезе номенклатуры, характеристики номенклатуры, серии и качества товара. Т.е. в любой момент мы можем посмотреть, сколько на конкретном складе, например “Центральный склад” у нас хранится номенклатуры “Ботинки мужские”, с характеристикой “43 размер”, серией от “20.08.2011” и качеством “новый”.


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

Давайте рассмотрим процесс создания регистра с самого начала. Как вы помните, мы создавали конфигурацию, в которой у нас уже есть справочники и документы. Сейчас мы добавим к ней регистр накопления. Добавляем регистр накопления, название “ТоварыНаСкладах”, вид регистра “Остатки”. Вид регистра “Обороты” мы рассмотрим позже. На закладке данные добавляем измерение “Номенклатура” типа “Справочник.Номенклатура” и добавляем ресурс “Количество” типа число(15,3).


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


Чтобы наш документ делал движения по регистру накопления “ТоварыНаСкладах” на закладке Движения отметим его (регистр) галочкой и нажмем кнопку “Конструктор движений”. Этот конструктор помогает нам написать алгоритм формирования записей регистров, который находится в уже упомянутой процедуре “ОбработкаПроведения”.

В конструкторе вид движения регистра оставляем “Приход”, в поле Табличная часть выбираем “Товары”,нажимаем кнопку “Заполнить выражения” и затем кнопку ОК.


Откроется модуль документа, в котором уже создана процедура ОбработкаПроведения.
Процедура ОбработкаПроведения(Отказ, Режим)
//{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
// Данный фрагмент построен конструктором.
// При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!

// регистр ТоварыНаСкладах Приход
Движения.ТоварыНаСкладах.Записывать = Истина;
Движения.ТоварыНаСкладах.Очистить();
Для Каждого ТекСтрокаТовары Из Товары Цикл
Движение = Движения.ТоварыНаСкладах.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
Движение.Период = Дата;


КонецЦикла;

//}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
КонецПроцедуры

Теперь давайте запустим режим Предприятие и создадим несколько документов. У документов в верхней панели появилось подменю “Перейти”, по которому можно посмотреть созданные документов движения в регистрах.


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


Затем переходим в обработчик кнопки “Сформировать”, удаляем находящийся там комментарий, устанавливаем курсор в тексте процедуры обработчика события, щелкаем правой кнопкой мыши и выбираем “Конструктор запроса с обработкой результата”. Это позволит нам создать запрос и сразу вывести его результат в отчет.
На закладке Обработка результата выбираем “Вывод в табличный документ”, переходим на закладку “Таблицы и поля”. Видим, что таблица ТоварыНаСкладах представление в виде четырех таблиц.

Первая таблица - это список записей, которые мы формировали в обработке проведения документов, остальные это виртуальные таблицы, которые платформа создает сама. Эти таблицы позволяют нам получить обработанные данные по регистру - обороты за период, остатки на дату, или остатки и обороты в одной таблице. Мы хотим вывести остатки, поэтому выбираем таблицу Остатки. Из этой таблицы выбираем все поля Номенклатура и КоличествоОстаток. Нажимаем кнопку ОК.
Конструктор сформировал алгоритм, который выведет нам отчет по остаткам, нам лишь нужно указать куда вывести отчет.
Добавим строку:
“ТабДок = ЭлементыФормы.ТабДок;” перед текстом, сформированным конструктором.
ТабДок = ЭлементыФормы.ТабДок;
//{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
// Данный фрагмент построен конструктором.
// При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!

Макет = Отчеты.ОстаткиТоваров.ПолучитьМакет("Макет");
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ТоварыНаСкладахОстатки.Номенклатура,
| ПРЕДСТАВЛЕНИЕ(ТоварыНаСкладахОстатки.Номенклатура),
| ТоварыНаСкладахОстатки.КоличествоОстаток
|ИЗ
| РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки";

Результат = Запрос.Выполнить();

ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
ОбластьПодвал = Макет.ПолучитьОбласть("Подвал");
ОбластьШапкаТаблицы = Макет.ПолучитьОбласть("ШапкаТаблицы");
ОбластьПодвалТаблицы = Макет.ПолучитьОбласть("ПодвалТаблицы");
ОбластьДетальныхЗаписей = Макет.ПолучитьОбласть("Детали");

ТабДок.Очистить();
ТабДок.Вывести(ОбластьЗаголовок);
ТабДок.Вывести(ОбластьШапкаТаблицы);
ТабДок.НачатьАвтогруппировкуСтрок();

ВыборкаДетальныеЗаписи = Результат.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
ОбластьДетальныхЗаписей.Параметры.Заполнить(ВыборкаДетальныеЗаписи);
ТабДок.Вывести(ОбластьДетальныхЗаписей, ВыборкаДетальныеЗаписи.Уровень());
КонецЦикла;
ТабДок.ЗакончитьАвтогруппировкуСтрок();
ТабДок.Вывести(ОбластьПодвалТаблицы);
ТабДок.Вывести(ОбластьПодвал);

//}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
Запустим режим 1С:Предприятие и посмотрим работу отчета.


Как видим, что-то более-менее приемлемое конструктор нам создал.
Еще у нас есть “Реализация товаров”, которая должна уменьшать наши остатки. Давайте сделаем так, чтобы она тоже формировала движения по регистру.
Открываем документ, на закладке Движения устанавливаем “галочку” напротив нашего регистра, и нажимаем кнопку “Конструктор движений”.

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


Как видите, остатки уменьшились, даже по некоторым позициям ушли в минус. Это происходит потому, что мы не контролируем наличие остатков при реализации товаров.
Наш регистр “ТоварыНаСкладах” типичный пример регистра остатков, у него есть движения как приходные, так и расходные. Но в системе 1С еще есть регистры оборотов.
В качестве примера, приведу регистр “Продажи”. Каждый раз при продаже товара клиенту, мы записываем кто, чего и сколько у нас купил. А затем в отчете мы можем посмотреть, а сколько товара у нас купил тот-то. В этот регистр не будут записываться движения отдельно приход или расход. Движения будут равнозначные. В этих случаях и используется регистр оборотов.

Давайте и в нашей конфигурации создадим такой регистр. Добавим новый регистр накопление, название “Продажи”, тип регистра “Обороты”, на закладке данные добавим измерение “Клиент” и “Номенклатура”, ресурсы “Количество” и “Сумма”.


Вернемся к документу “РеализацияТоваров”, на закладе движения установим “галочку” напротив регистра “Продажи”, и нажмем кнопку “Конструктор движений”. Нажмем кнопку (+) (добавить) и выберем регистр “Продажи”, дальше как обычно выбираем табличную часть и нажимаем “Заполнить выражения”. “ОК”.
// регистр Продажи
Движения.Продажи.Записывать = Истина;
Движения.Продажи.Очистить();
Для Каждого ТекСтрокаТовары Из Товары Цикл
Движение = Движения.Продажи.Добавить();
Движение.Период = Дата;
Движение.Клиент = Клиент;
Движение.Номенклатура = ТекСтрокаТовары.Номенклатура;
Движение.Количество = ТекСтрокаТовары.Количество;
Движение.Сумма = ТекСтрокаТовары.Сумма;
КонецЦикла;

Запускаем 1С в режим Предприятие, перепроводим документы “РеализацияТоваров”, проверяем сформированы ли движения. Отчет вы можете сформировать сами, делается это все по такому же принципу как и прошлый отчет, таблицу нужно выбирать “Продажи.Обороты”.

А теперь давайте в нашу конфигурацию добавим интерфейс, чтобы не приходлось документы открывать через меню “Операции”. Открываем в конфигураторе ветку “Общие”, ищем в ней Интерфейсы и добавляем новый. Откроется конструктор интерфейсов, в нем нажимаем кнопку “Построить”. Все. Упрощенный интерфейс готов. Чтобы он открывался по умолчанию нужно в свойствах конфигурации (правой кнопкой по самому верхнему элементу дерева конфигурации - Свойства) установить в качестве основного интерфейса, созданный нами интерфейс.
Получиться такой вид:

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

Written by: Роман Заболотин
Email: eval(unescape("%64%6f%63%75%6d%65%6e%74%2e%77%72%69%74%65%28%27%3c%61%20%68%72%65%66%3d%22%6d%61%69%6c%74%6f%3a%72%7a%61%62%6f%6c%6f%74%69%6e%40%67%6d%61%69%6c%2e%63%6f%6d%22%3e%72%7a%61%62%6f%6c%6f%74%69%6e%40%67%6d%61%69%6c%2e%63%6f%6d%3c%2f%61%3e%27%29%3b"))

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

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

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

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

Итак, нам нужно хранить следующие данные:

  • Номенклатурная позиция
  • Ответственный сотрудник, на котором числится данная позиция
  • Количество номенклатуры
  • Стоимость номенклатуры
  • Данные о мастере, которому переданы материалы для использования.

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

Ресурсы регистра – это всегда числовые значения, характеризующие хранимые данные. Числовые значения – это количество и сумма, и именно они будут ресурсами нашего регистра.

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

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

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

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


Рис. 6.12.

Включим регистр накопления в состав подсистемы ОперативныйУчетМатериалов .

На вкладке Данные создадим следующие измерения, ресурсы и реквизиты:

Измерения :

Имя : Номенклатура, Тип: СправочникСсылка.Номенклатура, Запрет незаполненных значений – установлено.

Имя : ОтветственныйСотрудник, Тип: СправочникСсылка.Сотрудники, Запрет незаполненных значений – установлено.

Ресурсы

Имя : Количество, Тип: число, длина 10, точность 3

Имя : Сумма, Тип: число, длина 10, точность 2

Реквизиты :

Имя : ПолучательМатериалов, Тип: СправочникСсылка.Сотрудники

Обратите внимание на имена этих реквизитов, на их типы, а так же – на стандартные реквизиты регистра ( рис. 6.13 .) – эти данные пригодятся нам при работе над процедурой проведения документа .

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

Перейдем на вкладку Регистраторы окна редактирования объекта и выберем в качестве документов-регистраторов документы – ПоступлениеМатериалов и ОтпускМатериаловМастеру .

На данном этапе настройка регистра накопления окончена, перейдем к настройкам документов. Начнем с документа ПоступлениеМатериалов .

Откроем окно редактирования объекта для этого документа, перейдем на вкладку Движения ( рис. 6.14 .) и нажмем на кнопку


Рис. 6.14.

В конструкторе, выберем тип движения регистра – Приход , в поле Табличная часть укажем табличную часть документа Материалы , нажмем на кнопку Заполнить выражения . Автоматический механизм установления соответствия между данными документа и регистра не всегда работает правильно (в том случае, если не может однозначно определить соответствия, или тогда, когда соответствие, определенное им по его логике, отличается от желаемого), поэтому проверим правильность установленных соответствий. В итоге окно Конструктора движения регистра должно выглядеть так, как показано на рис. 6.15 .


Рис. 6.15.

После нажатия на кнопку ОК, в модуле объекта документа будет сформирована такая процедура обработки проведения (так она выглядит после удаления комментариев о том, что код построен конструктором движений):

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

Эта процедура объявлена в модуле объекта, она исполняется на

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

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

· какие именно услуги были оказаны (чтобы составить рейтинг
услуг);

· какому именно клиенту оказывались услуги (чтобы
предоставить ему скидку от объема оплаченных ранее услуг,
например);

· какой мастер предоставлял услуги (чтобы начислить ему
заработную плату).

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

Когда мы создавали регистр «ОстаткиНоменклатуры», мы специально не останавливались на двух видах регистров накопления, которые существуют в системе 1С:Предприятие. Сейчас пришло время поговорить об этом.

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

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

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

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

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

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


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

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

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

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

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

Нарушение этого принципа построения регистров накопления будет вести к непроизводительному использованию ресурсов системы и, как следствие, замедлению работы и падению производительности.

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

Рис. 147. Создание оборотного регистра.

На закладке «Данные» создадим измерения регистра:

У регистра будет три ресурса:

· «Количество», тип Число(15,3), неотрицательное;

· «Выручка», тип Число(15,2), неотрицательное;

· «Стоимость», тип Число(15,2), неотрицательное.

Этот регистр будет обрабатываться документами «РасходнаяНакладная», «ОказаниеУслуги».

Откроем окно редактирования объекта конфигурации Документ «ОказаниеУслуги» и на закладке «Движения» укажем, что этот документ будет создавать движения по регистру «Продажи».

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

Рис. 148 Вызов конструктора движений

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

Рис. 149 Работа с конструктором движений

Для учета выручки по услугам мы не будем использовать конструктор движений документа, а внесем необходимые дополнения прямо в обработчик события «ОбработкаПроведения» документа «ОказаниеУслуги».

Откроем в конфигураторе модуль объекта конфигурации документ «ОказаниеУслуги» и найдем в нем процедуру обработчика события «ОбработкаПроведения» (закладка «Прочее», кнопка «МодульДокумента»).

Создадим еще один цикл обхода табличной части:

Для Каждого ТекСтрокаУслуги Из Услуги Цикл

// регистр Продажи

Движение = Движения.Продажи.Добавить();

Движение.Период = Дата;

Движение.Номенклатура = ТекСтрокаУслуги.Услуга;

Движение.Клиент = Клиент;

Движение.Мастер = Мастер;

Движение.Количество = 1;

Движение.Выручка = ТекСтрокаПереченьНоменклатуры.Стоимость;

Движение.Себестоимость = 0;

КонецЦикла;

После этого необходимо внести необходимые изменения для запрета проведения документа при нехватке материалов на складе (аналогично документу «РасходнаяНакладная»).

Затем необходимо внести изменения в документ «РасходнаяНакладная». Требуется разрешить документу «двигать» данный регистр, определив с помощью конструктора процедуру проведения документа (!!! Не забыть про внесенные ручные изменения).

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

Формирование записей в регистрах

Одним из первых вопросов, связанных с регистрами, является вопрос: для чего?

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

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

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

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

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

Общее для всех регистров

Внутренняя структура любого регистра может быть продемонстрирована Рис.2

Рис.2

Рассмотрим её подробнее:

  • Измерения – свойства записи, определяющие, в каких разрезах хранится важная информация;
  • Ресурсы – они содержат информацию, которую необходимо систематизировать;
  • Реквизиты – поля записи, которые содержат дополнительную информацию;
  • Формы – свойство, которое содержит графическую информацию о внешнем виде списка, элемента и т.д. и их внутренних модулях;
  • Макеты – печатные формы регистров.

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

Раз уж выше речь зашла о регистрах сведений, давайте о них и поговорим.

Это, наверное, самый простой и понятный тип регистров. Обычная таблица, содержащая колонки и столбцы, в которой хранится информация.

Список важных свойств регистра сведений небольшой (Рис.3), поговорим об основных:

Рис.3

  1. Периодичность, она указывает на то, в каких пределах контролируется уникальность записи (в пределах минуты, часа, дня, года в соответствии с выбранным значением не могут существовать две записи с одинаковыми измерениями), также может принимать значение «По регистратору», но для этого необходимо выбрать соответствующий режим записи;
  2. Режим записи – фактически это выбор из двух значений: «Независимый» и «Подчинение регистратору».
    1. Важно понимать, что выбор независимого режима не означает, что запись не может быть сформирована документом, будет невозможен только отбор по регистратору и контроль уникальности записи по нему ;
  3. Разрешить итоги срез первых и Разрешить итоги срез последних: (объединим два пункта в один) – при выставлении соответствующих галочек, запрос к регистру сведений можно производить по дополнительным таблицам (Срез первых и Срез последних), которые содержат соответствующие наборы данных, в качестве одного из параметров этих таблиц выступает дата, на которую необходимо делать выбор данных.

Регистры накопления

Структуру одного из них мы видели на Рис.2. Основным свойством, сильно влияющим на внешний вид регистра, а так же на его внутреннюю структуру является «Вид регистра» (Рис.4)

В зависимости от требований к хранимой информации может принимать значения:

  • Остатки;
  • Обороты.

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

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

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

  • Использовать таблицу ОстаткиИОбороты;
  • Сделать выборку на дату на 1 секунду большую заданной (т.е. не на 31.12.16 23:59:59, а на 01.01.17 00:00:00);
  • Воспользоваться методом Граница, который помогает настроить вариант включения момента времени в рассматриваемый период (вариант использования: Граница(ДатаКонца,Включая).

Регистры бухгалтерии

Достаточно специализированные регистры, по своей конструкции напоминают регистры накопления. Основным отличием от других типов регистров платформы 1С является присутствие в структуре свойств параметра «План счетов» (Рис.5).

Рис.5

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

  1. Бюджетирование;
  2. Международный;
  3. Налоговый;
  4. Хозрасчетный.

Второй параметр, характерный для бухгалтерских регистров – «Корреспонденция».

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

Регистры расчета

Это, наверное, самые сложные для понимания регистры. Между тем, по своей сути они очень сильно напоминают регистры накопления вида «Обороты».

Определяющим отличием регистра расчета от других регистров является наличие в его свойствах параметра «План вида расчета». К тому же, регистр расчета, также как и регистр сведений – периодический.

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

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

Основное использование их в типовых конфигурациях 1С – регистрация и облегчение работы с начислениями работникам организации.

Регистр накопления 1С это структурированный набор данных, в котором находится информация о всех движения (приход / расход или обороты) выбранных документов.

Виды регистра накопления

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

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

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

Измерения, Ресурсы, Реквизиты и Стандартные реквизиты

В любом регистре накопления присутствуют измерения, ресурсы, реквизиты и стандартные реквизиты.

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

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

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

Стандартные реквизиты бывают следующими:

  • период - дата, когда выполнилось движение по регистру
  • регистратор - документ, при помощи которого была выполнена запись в регистре
  • вид движения - приход или расход (приход увеличивает количество ресурсов, а расход уменьшает)

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

Регистраторы это документы, которые могут делать движения в регистре накопления. Движения в регистр накопления 1С можно делать только по средство документов (регистраторов). Большинство алгоритмов, создания движения в регистре накопления, формируются при проведении документа в модуле объекта, процедура «ОбработкаПроведения».


Индексация измерений

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

Для примера: регистр накопления «ПартииТоваровНаСкладах». Есть измерение «Номенклатура» и «СтутусПартии». Целесообразней установить признак индексации у измерения «Номенклатура», чем у «СтутусПартии», так как количество вариантов номенклатуры гораздо выше, чем у статуса партии.

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

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

Возможности регистра накопления

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

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

Пример получения остатков на текущую дату

Процедура ПолучитьОстатокНаДату()
НовЗапрос = Новый Запрос;
НовЗапрос.Текст =
"ВЫБРАТЬ
| ТовОстатки.Номенклатура,
| ТовОстатки.КоличествоОстаток
|ИЗ
| РегистрНакопления.ТоварыНаСкладах.Остатки(&ТекДата,) КАК ТовОстатки";
НовЗапрос.УстановитьПараметр("ТекДата", ТекущаяДата());

КонецЦикла;
КонецПроцедуры

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

НовЗапрос = Новый Запрос;
НовЗапрос.Текст =
"ВЫБРАТЬ
| ТовОбороты.Номенклатура,
| ТовОбороты.КоличествоОборот
|ИЗ
| РегистрНакопления.ТоварыНаСкладах.Обороты(&НачПериода, &КонПериода,) КАК ТовОбороты";

НовЗапрос.УстановитьПараметр(«НачПериода», НачалоГода(ТекущаяДата()));
НовЗапрос.УстановитьПараметр(«КонПериода», ТекущаяДата());

ВыборкаЗапроса = НовЗапрос.Выполнить().Выбрать();

Пока ВыборкаЗапроса.Следующий() Цикл
КонецЦикла;

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

НовЗапрос = Новый Запрос;
НовЗапрос.Текст =
"ВЫБРАТЬ
| ТоварыНаСкладах.Период,
| ТоварыНаСкладах.Регистратор,
| ТоварыНаСкладах.ВидДвижения,
| ТоварыНаСкладах.Номенклатура,
| ТоварыНаСкладах.Количество
|ИЗ
| РегистрНакопления.ТоварыНаСкладах КАК ТоварыНаСкладах";

ВыборкаЗапроса = НовЗапрос.Выполнить().Выбрать();

Пока ВыборкаЗапроса.Следующий() Цикл
КонецЦикла;

Формы списка регистра накопления

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