gifts2017

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

Опубликовал юрий космовский (Kosmovski) в раздел Программирование - Работа с интерфейсом

Конечно, у вас возникнет вопрос что такое «Регистр накопления» и для чего он нужен?
Дело в том, что мы имеем справочники и документы, в документах есть нужная нам информация для формирования отчетов (например, остатков по определенным складам) однако для получения нужных нам результатов нужно будет проанализировать все документы, по обороту товаров. Хорошо если это всего, лишь один документ прихода и один документ расходов товаров. В случае если их несколько задача усложняется, если же документов несколько десятков запрограммировать отчет будет очень трудно. Не лучше ли хранить данные о движения товаров в одной отдельной структуре данных и при формировании отчета все данные выбирать только оттуда? Для облегчения доступа к информации, которая хранится во многих документах, да и не только в документах были созданы «регистры накопления».

 

Конечно, у вас возникнет вопрос что такое «Регистр накопления» и для чего он нужен?
Дело в том, что мы имеем справочники и документы, в документах есть нужная нам информация для формирования отчетов (например, остатков по определенным складам) однако для получения нужных нам результатов нужно будет проанализировать все документы, по обороту товаров. Хорошо если это всего, лишь один документ прихода и один документ расходов товаров. В случае если их несколько задача усложняется, если же документов несколько десятков запрограммировать отчет будет очень трудно. Не лучше ли хранить данные о движения товаров в одной отдельной структуре данных и при формировании отчета все данные выбирать только оттуда? Для облегчения доступа к информации, которая хранится во многих документах, да и не только в документах были созданы «регистры накопления».
Регистр накопления имеет определенную структуру в которой и накапливаются данные. эти данные будут храниться в регистре в виде отдельных записей.
Важно отметить что регистр накопления не предусматривает того чтобы пользователь мог его изменить. Регистр создан для того чтобы данные в него заносились и модифицировались исключительно объектами конфигурации.
К понятию «регистр накопления» имеют отношение также понятие «измерение» и «ресурс».
Измерениями называют разрезы информации, представленные в регистре (в нашем случае это может быть склад, куда приняли товар и сам товар).
Числовая информация, хранящаяся в регистре, называется ресурсами.
Изменение состояния регистра накопления происходит как правило во время проведения документа и заключается в том, что в регистр добавляются несколько записей с ссылкой на документ который сделал изменения (документ будет регистратором), «направление» прироста (приход или расход) ну и конечно значения измерений и ресурсов. Все это в комплексе называется движением регистра.
Помимо вышеуказанной информации регистр может иметь набор реквизитов, это дополнительная информация относительно движения регистра.
Давайте создадим регистр, в котором будет фиксироваться информация о движении наших дисков.

Регистр накопления соответственно будет называться ЗалишкиДисків и будет иметь лишь одно измерение «Диски», (ссылка на соответствующий справочник, и один ресурс - «Количество», где указывается сколько дисков пришло или ушло.
Сохраняем данный регистр накопления. Поскольку, как указывалось выше, движения по регистру возможны только с помощью документов необходимо настроить документы для работы с регистром данных.

Открываем в конфигураторе документ ПрихиднаНакладна.

 

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

 

Конструктор движений в «1с: Предприятие 8.1»
В табличке «Регистры» указано регистр движения, которого мы будем конструировать.
Движения по регистрах могут быть двух типов: Приход и расход.
В первоначальном варианте в реквизитах документа указаны только реквизиты шапки документа, в случае если нам нужно сделать движения, реквизиты которых есть в табличной части, то указываем ее в соответствующем поле.
После подготовки указываем в нижней табличной части соответствие реквизитов документа - значениям соответствующих измерений и ресурсов регистра. Для этого просто нужно нажать сначала на пустом поле в колонке «Выражение» а затем дважды щелкнуть на соответствующем реквизите документа. Кстати для облегчения выбора реквизитов на соответствующих требованиям регистра полях сбоку появляются маленькие красные галочки. Когда много реквизитов это очень облегчает работу.
После нажатия кнопки «ОК» видим что «Конструктор движений» создал следующий код:
Процедура ОбработкаПроведения(Отказ, Режим)

//{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ

// Даний фрагмент побудований конструктором.

// При повторному використанні конструктора, внесені вручну зміни будуть втрачені!!!

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

// регістр ЗалишкиДисків Приход

Движение = Движения.ЗалишкиДисків.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
Движение.Период = Дата;
Движение.Диски = ТекСтрокаТовар.Товар;
Движение.Кількість = ТекСтрокаТовар.Кть;
КонецЦикла;

//}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ

КонецПроцедуры
Первая строка указывает, что код будет выполняться только при проведении документа, это заранее определенная зарезервированная процедура.
Вторая и предпоследняя строки это служебные комментарии. Назначение которых указаны в 3 и 4 строках.
Следующие строки это, собственно, сам значимый код программы.
Конструкция
Для Каждого ... Из … Цикл
КонецЦикла;

Это стандартная конструкция «1с: Предприятие 8.1» для перебора табличной части обращение, к которой идет по названию «Товар».
Заметьте что для ДокументОбъект доступно свойство Движение, которое возвращает коллекцию наборов движений регистров, к которым можно обратиться, набрав точку и название регистра.
Таким образом, в первой строке цикла мы добавляем к объекту «Движение» новую запись и сохраняем его в переменной Движение. Потом мы присваивает нужные значения полям, и так пока работает цикл. После окончания цикла мы записываем значение в регистр одним махом.
Ну что же проверим, работает ли то, что мы так красиво описали :-)
Запускаем «1с: Предприятие 8.1» и откроем сначала Регистр накопления «Остатки дисков» (Операции-регистры накопления-остатки дисков)
А затем документ «Прихидна накладная». (Операции-документы-прихидна накладная)
Когда вы нажмете на «ОК» в регистре появятся соответствующие записи.

 

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

 

Нажатие «ОК» приведет к формированию следующего кода он очень похож на предыдущий.

Процедура ОбработкаПроведения(Отказ, Режим)

//{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ

// Даний фрагмент побудований конструктором.

// При повторному використанні конструктора, внесені вручну зміни будуть втрачені!!!

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

// регістр ЗалишкиДисків Расход

Движение = Движения.ЗалишкиДисків.Добавить();

Движение.ВидДвижения = ВидДвиженияНакопления.Расход;

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

Движение.Диски = ТекСтрокаДиски.Диск;

Движение.Кількість = ТекСтрокаДиски.кть;

КонецЦикла;

//}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ

КонецПроцедуры

Сохраним документ и запустив «1с: Предприятие 8.1» проверим, как он работает

 

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

 

См. также

Подписаться Добавить вознаграждение
Комментарии
1. Maniac (Eugeneer) 25.07.09 06:11
Честно - не понравилось.
2. Maniac (Eugeneer) 25.07.09 06:13
Тема прожеванная и гораздо лучше описанная во многих источках, в том числе самой 1с. Да еще скриншоты и название в тексте на укр. Думаешь многие тут поймут что такое кiльiсть.
Senator_I; NN2P; Alex_will; +3 Ответить
3. Maniac (Eugeneer) 25.07.09 06:27
Кстати ты абсолютно не в ту сторону в статье уделил внимание. У тебя все завязано на отчеты. Типа регистр нужен только для отчетов.
В статье вообще нигде не упоминается что главная суть регистра это не получение отчетов подокументам! а организация сложной структуры хранения данных. партионного учета ит.д. Ни слова не сказано про накопительные регистры, оборотные и ихзначимость. А самое главное не раскрыта тема накопительных регистров, его свойств и самого главного правила который должен знать любой начинающий программист: регистры должны закрыватся.
Трея словми это е описать.
Статье минус. Ты вводишь людей в заблуждение.
4. Игорь Исхаков (Ish_2) 25.07.09 07:54
Распространенное заблуждение , что писать для начинающих - просто.
Статья на мой взгляд не заслуживает минуса. Также не заслуживает
и плюса.
Всё-таки начинающим предпочтительнее начинать с Радченко.
Автору стоит также внимательно изучить методологию подачи материала в этой книге.

(3) Мне стыдно, но я не знаю того ,
что "должен знать любой начинающий программист : регистры должны закрываться".

5. Maniac (Eugeneer) 25.07.09 08:17
(4) у меня нету качества преподавателя по программированию в 1С. для того чтобы обсуждать эту тему нужно писать приличную статью. я имел ввиду построение накопительных регистров. Автор необычайно просто прошелся по верхушкам, не пояснив самых важных вещей. Закрытие регистров - зависание итогов в таблице итогов накопительного регистра. И типовая ошибка большинства программистов допускаемая при программировании, при которой пухнет таблица итогов в результате неверных движений по измерениям. Эту ошибку кстати новички делают постоянно.
(4) "Распространенное заблуждение , что писать для начинающих - просто." - тут проблема несколько в другом - в данном случае пишет сам начинающий.
Начинающий учит начинающего. На мой взгляд это нелогично.
Минус не только за это, но и в предидущей статье автора уже предупреждали по поводу писания статей с укр. акцентом на метаданные.
Если пишешь на укр то тогда делай всю статью на укр. Если на русском то будь добр на русском. Не все розумиють шо такэ ПозичивПодивись
6. Игорь Исхаков (Ish_2) 25.07.09 08:32
(5) Вообщем-то, согласен.
Но всерьез не понимаю , что такое "зависание итогов в таблице итогов" и что такое "неверные движения по измерениям".
Всё -таки луше употреблять какие-то общеизвестные фразы и термины.
Или приводить ссылки на литературу.
7. Игорь Исхаков (Ish_2) 25.07.09 09:54
Тут оказыается целый цикл..
Изменю мнение. Минус.
Начинающим для изучения 1сПредприяти8 лучше использовать Радченко
"Практическое пособие разработчика".
8. Юрий Тимофеев (Tatitutu) 25.07.09 12:51
(6) простой пример "плохого кода"

Регистр Отстатки товара
измерения Фирма,Склад, Товар, Размер
ресурсы Количество, Цена

Документ Приход делает движение
+Фирма - "Рога и Копыта"
+Склад - "Наш склад"
+Товар - "Галоши"
+Размер - "48"
+Количество -1

Докумен Перемещение
-Склад - "Наш склад"
-Товар - "Галоши"
-Количество -1

Все - регистр не закроется
9. Юрий Тимофеев (Tatitutu) 25.07.09 12:58
(3,4) - ИМХО зря вы минусов наставили - учить всегда трудно.
Он честно писал сам учится и показывает другим. С русским он честно признался у него хромает (ему Альтаир, помогал делать перевод)
а...смотрю вы вкурсе...и там наставили -, но это ваше мнение.

Лучше - помогите, дополните замечаниями и идеями.

Автор - ты делай примечание по замечаниям, а то заклюют.
И сноску ЖИРНЫМИ БУКВАМИ - это не УЧЕБНОЕ ПОСОБИЕ- УЧУСЬ САМ -УЧИМСЯ ВМЕСТЕ.
10. Игорь Исхаков (Ish_2) 25.07.09 13:18
(8) Прости , Господи .
Если в движении регистра указать не все измерения , то получим неверные итоги. Мда..
Хороший пример того , как по-разному можно формулировать.

О чем это говорит ?

К работе с начинающими допускают только профессионалов с хорошей школой и опытом преподавания.
Нет , правда , если сам начинающий - НЕ ЛЕЗЬ с уроками.
Здесь нельзя тренироваться - дескать УЧУСЯ САМ.
11. юрий космовский (Kosmovski) 26.07.09 13:07
люди, ето для начинающих!!! Как обяснить назначение регистра для партионного учета, человеку которій ни в зуб ногой в бухгалтерии? Ато азы для начала работы с регистром. а не детальный разбор назначения негистра накопления.
12. Юрий Тимофеев (Tatitutu) 26.07.09 13:14
см (9)
И сноску ЖИРНЫМИ БУКВАМИ - это не УЧЕБНОЕ ПОСОБИЕ- УЧУСЬ САМ -УЧИМСЯ ВМЕСТЕ.
13. Игорь Исхаков (Ish_2) 26.07.09 13:18
"Как обяснить назначение регистра для партионного учета, человеку которій ни в зуб ногой в бухгалтерии?"

В этом всё и дело. Подать материал с одной стороны просто , с другой корректно - весьма и весьма непросто.
Поэтому очень немногие могут писать "Методические материалы" для начинающих.

Назовите статью "Регистры накопления .. как я их понимаю" уберите из рубрики "Методические материалы" и разговор пойдет другой.
14. gilv (Gilev.Vyacheslav) 28.07.09 10:08
Переводи на русский полностью статью. Если оставишь так, тоже поставлю минус.
17. Андрей (Свой) 30.07.09 00:35
инфостарту думаю не помешает представительство в ua зоне :)
18. gilv (Gilev.Vyacheslav) 30.07.09 12:33
19. Алексей Захаров (almas) 03.08.09 22:46
Извини, но ты непоэт. "Капитал" Карл Маркса? скорее всего нет. Но наверняка плевался на преподносимое в учебниках "выдержки" учения о Марксизме.
Как говаривал некто из мультика "Смешарики". Где буйство красок, чуйственный фонтан огня?. Почитай Что пишет Ольга Громыко по поводу плагиата. У тебя получился пересказ диска ИТС в собственном исполнении.
Полностью согласен с п.5. Maniac
20. ddis (rebuzx) 08.06.10 09:43
Согласен с (5) !
Метаданные на украинском, текст на русском, а код надо было на англицком языке писать!
Статья по принципу - Буду учить других, может и сам научусь!
Однозначно минус - !
21. Виталий Ast (shkev) 06.04.12 20:03