По своей сути регистр накопления это не что иное как таблица в которую заносятся данные из разных документов для удобного анализа и обработки. Вместо работы с несколькими документами все данные берутся из одного места, главное их правильно записать. Такой механизм облегчает написание отчетов, действительно нам нужно работать не с множеством документов а только с одной таблицей главное спроектировать таблицу так чтобы с ней было удобно и легко работать используя типовые механизмы и не изобретая велосипедов. Но не всегда это удается.
Давайте рассмотрим на простом примере использование регистров накопления. Пусть у нас есть два документа «Приход» и «Расход» которые пишут соответствующие движения в регистр движения товара. Мне нужно знать что, сколько и за сколько я купил. Куда определить ети данные в Измерения, Ресурсы или Реквизиты?
Товар это однозначно измерение, мне нужно будет знать сколько у меня товара. Если у вас несколько складов информация нужна в разрез мест хранения то это будет еще одно дополнительное измерение. Таких измерений может быть много.
Ресурс это поле в котором храниться числовое значение в разрезе измерений в нашем примере это количество.
Реквизиты это дополнительная информация привязанная к ресурсу, можно решить что цена покупки должна записываться в реквизиты регистра. Но если мы захотим узнать сколько товара у нас осталось и по какой цене то воспользовавшись командой Остатки(<МоментВремени>, <Отбор>, <Измерения>, <Ресурсы>) увидим что информации по реквизитах она не выдаст. Значит цену прихода нужно помещать в ресурсы.
Тут есть один подводный камушек: когда мы будем продавать товар то соответственно в ресурс цена покупки ничего не внесем но тогда при вызове остатков данного регистра увидим что количества у нас по товару нет а вот цена осталась поэтому нам лучше в ресурсах сохранять не цену а суму покупки а уж потом вычислять цену делением, в момент продажи аналогично нужно будет вычислить цену и списать нужную суму себестоимости товара.
То что я написал легче всего проиллюстрировать таблицами:
Талица первая неправильная:
+/- |
ТМЦ |
количество |
Цена |
+ |
Товар 1 |
100 |
2 |
- |
Товар 1 |
50 |
2 |
- |
Товар 1 |
50 |
2 |
|
Остаток |
0 |
-2 |
Таблица вторая правильная
+/- |
ТМЦ |
количество |
Сума покупки (себестоимость) |
+ |
Товар 1 |
100 |
200 |
- |
Товар 1 |
50 |
100 |
- |
Товар 1 |
50 |
100 |
|
Остаток |
0 |
0 |
Как видите мы изначально поставили неправильные условия, при проектировании регистров это нужно учитывать. Ошибка не надуманная, я с ней столкнулся при рефракторинге одной самописной базы, из-за нее пришлось довольно много переписывать в той базе что в итоге и привело к написанию этой статьи, надеюсь что начинающим она будет полезна.