Для чего предназначены реквизиты регистра накопления

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

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

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

Структура

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

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


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

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


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

Поскольку регистр накопления служит для накопления числовых значений, каждая запись выполняет изменение хранимых ресурсов — движение. Движения, в общем случае, могут либо добавлять некоторые приращения к хранимым ресурсам, либо отнимать их. Если должно выполняться увеличение хранимых ресурсов, — такое движение называется движением прихода («+»), если уменьшение хранимых ресурсов — движением расхода («-»).

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


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

Связь с регистратором

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


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

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

Состав документов, которые могут создавать записи в регистре накопления, задается разработчиком в процессе создания прикладного решения:


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

Конструктор движений

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

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

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

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

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

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


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

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

Агрегаты

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

Форма списка и форма набора записей

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

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

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

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

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

Смотрите также:

Продолжение одинэсной темы, ответы на книгу Радченко, занятие 2 и 3.

Какими характерными особенностями обладает документ?

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

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

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

Табличные части — для описания набора информации, которая одинакова по структуре, но различна по количеству;

Какие существуют основные формы документа?

Форма объекта, форма списка, форма для выбора;

Что такое проведение документа?

Проведение — действие, которое выполняет изменение других данных системы на основании информации документа;

Как создать объект конфигурации Документ и описать его структуру?

В конфигураторе, структура — на вкладке «Данные» 

Как создать новый документ и заполнить его данными?

В 1С:Предприятие создать новый документ. Данные заполняются как с помощью поля выбора, так и с клавиатуры;

Как создать собственную форму документа?

Документ — изменить — формы — добавить

Что такое конструктор форм?

Конструктор форм — это инструмент разработчика для создания форм, построенные по принципу «мастеров»: ввод данных в определенной последовательности;

Что такое редактор форм?

Редактор форм используется для создания и редактирования форм объектов прикладного решения. Редактор форм обеспечивает редактирования диалога формы, её реквизитов и редактирование модулей;

Что такое элементы формы?

Основной интерфейсный инструмент, служит для управления и отображения записей Базы Данных; Примеры: кнопка, табличное поле, поле ввода и др;

Что такое события и чем они связаны?

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

Что такое обработчик события и как его создать?

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

Что такое модуль и для чего он нужен?

Модуль — хранилище для текста программы на встроенном языке.

Зачем нужны общие модули?

Общий модуль служит для хранения процедур, которые могут быть доступны для любых объектов конфигурации;

Что такое типообразующие объекты?

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

Какое практическое применение реквизитов регистров накопления?

Я
   Birmingem

05.10.18 — 16:04

Хотелось бы использовать реквизит регистра накопления для получения оборотов в разрезе этого реквизита.

Но платформа не дает такой возможности.

Тогда зачем они вообще нужны?

В каких конкретно целях можно их использовать на практике? Можете привести примеры?

А вот в 7.7 по реквизитам регистра можно было получать обороты…

  

Партнерская программа EFSOL Oblako

   shuhard

1 — 05.10.18 — 16:05

(0) для физических движений

виртуальные таблицы в типовых покрывает не весь функционал

   shuhard

2 — 05.10.18 — 16:06

(0)[А вот в 7.7 по реквизитам регистра можно было получать обороты.]

а вот это форуму глубоко по кую

   Eastert

3 — 05.10.18 — 16:11

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

   Eastert

4 — 05.10.18 — 16:12

(3) это был реальный пример

   Джинн

5 — 05.10.18 — 16:16

(0) Они созданы Нуралиевым для красоты. Абсолютно бесполезная штука :))

   Birmingem

6 — 05.10.18 — 16:18

(5)я тоже об этом подумывал, но все сомневался, может я просто тугодум и чего то не догоняю

   Фрэнки

7 — 05.10.18 — 16:19

// Но платформа не дает такой возможности.

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

   Фрэнки

8 — 05.10.18 — 16:20

вот выдержка из СП

\

Условие (необязательный)

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

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

   Волшебник

9 — 05.10.18 — 16:21

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

   Джинн

10 — 05.10.18 — 16:21

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

   hhhh

11 — 05.10.18 — 16:23

(6) для обменов очень полезно. Например, создать в ут 10.3 обмен по организациям. Не во всех регистрах там есть Измерение Организация. Поэтому создаем в регистре реквизит Организация и обмен готов.

   H A D G E H O G s

12 — 05.10.18 — 16:29

(0) Для денормализации иногда надо.

   Birmingem

13 — 05.10.18 — 16:35

(7)Если запрос к физ.таблице — то да. Но в основном то используются вирт.таблицы, там нельзя.

(12)Что такое денормализация?

   Asmody

14 — 05.10.18 — 16:39

Вы просто не умеете их готовить

   Фрэнки

15 — 05.10.18 — 16:39

(13) что значит «нельзя»? Все можно!

   Волшебник

16 — 05.10.18 — 16:40

(13) Денормализация — процесс, обратный нормализации. Ваш Кэп.

   shuhard

17 — 05.10.18 — 16:40

(13)[ Но в основном то используются вирт.таблицы, ]

открой 1C:ERP — посмотри на расчет себестоимости,

целиком на корреспонденции реквизитов и таких мест в типовых туча

   shuhard

18 — 05.10.18 — 16:40

(16) +1

во всех трех типовых формах

   Birmingem

19 — 05.10.18 — 16:45

(15)Например, есть регистр «ОстаткиТоваров». Хочу добавить реквизит «ВидДвижения» типа справочник  «ВидыДвижений».

В справочнике есть например: приход от поставщика, приход от филиала, перемещение, продажа и т.п.

Хотелось бы получить приход/расход за период в разрезе имерений и еще реквизита «ВидДвижения».

Как это сделать?

   Волшебник

20 — 05.10.18 — 16:45

(19) запрос к основной таблице движений регистра

   Birmingem

21 — 05.10.18 — 16:46

Это понятно, что можно по физ.таблице.

Разговор про виртуальную.

   Cool_Profi

22 — 05.10.18 — 16:47

(21) А виртуальная к реквизитам никаким боком…

   Волшебник

23 — 05.10.18 — 16:48

(21) Разговор про реквизиты

   azernot

24 — 05.10.18 — 16:48

Реквизиты регистра — это поля детализирующие каждую запись, но в разрезе которых не накапливаются и не хранятся данные.

Ваш КЭП.

Вы ещё спросите для чего нужно «Содержание проводки» к примеру…

   Birmingem

25 — 05.10.18 — 16:50

Но бесит главное — в 7.7 то была такая возможность!!!

   Волшебник

26 — 05.10.18 — 16:51

(25) Восьмёрка ещё сырая. Ещё не все фишки 7.7 реализованы. Ждите.

   azernot

27 — 05.10.18 — 16:52

(25) Зачем тебе виртульная таблица там, где запрос к ней ничем не будет отличаться от запроса к реальной?

   Birmingem

28 — 05.10.18 — 16:55

(27)Для увеличения скорости выполнения запроса. Или я не прав?

   Eastert

29 — 05.10.18 — 16:59

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

   azernot

30 — 05.10.18 — 17:13

(28) Для этого есть оборотные регистры и измерения в них.

Если ты хочешь именно из регистров остатков собирать обороты не в разрезе измерений — используй запрос к реальной таблице.

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

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

   HardBall

31 — 05.10.18 — 17:20

(26) Это надо в перлы.

   Сияющий в темноте

32 — 05.10.18 — 18:23

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

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

например,код протокола оплаты вполне себе прекрасной пишется в реквизиты регистра продажи,или номер приказа в изменении цен поставщика.

   xXeNoNx

33 — 05.10.18 — 18:52

(13) не всегда использование вирт. таблиц оправдано, особенно оборотов

   Фрэнки

34 — 05.10.18 — 19:02

(19)

// Хочу добавить реквизит «ВидДвижения»

// Хотелось бы получить приход/расход за период в разрезе имерений и еще реквизита «ВидДвижения».

// Как это сделать?

Ты точно попробовал в Запросе использовать параметр с условием по полю «ВидДвижения» ?

Или тебя только рассуждения на форуме интересуют?

Например, со 100% достоверностью установлено, что похожие обращения к таблице СрезПоследних, для которых в синтакс-помощнике написана аналогичная инфа (см выше) возращает записи с этим наложенным условием. Хотя при использовании методов платформы, _не_ запросов, условия отбора применимы к измерениям, но не к реквизитам.

   xXeNoNx

35 — 05.10.18 — 19:02

(0) если бы можно было использовать реквизиты вместо измерений, то зачем тогда нужны бы были измерения и наоборот?

   Фрэнки

36 — 05.10.18 — 19:04

(35) ну если 8-ка еще сырая?! Когда в сырой 8-ке, то нужно и то, и другое!

   Сияющий в темноте

37 — 06.10.18 — 10:31

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

  

Cyberhawk

38 — 06.10.18 — 11:35

(37) Витиевато )

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

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

Регистры накопления — центральная концепция платформы 1С:Предприятие. Она кажется интуитивно понятной, но это только вводит в заблуждение. Ситуация усугубляется тем, что найти не то, что хорошее, а хотя бы минимально разумное описание не легко. Обратившись к синтакс-помощнику или сайту 1С (https://v8.1c.ru/platforma/registr-nakopleniya), вы узнаете, что регистры накопления используются для… накопления информации. Здорово! Но вообще-то любая таблица в любой базе данных используется не иначе как для накопления информации. Далее будет дано описание концепции регистров с ее плюсами и минусами, как это видит автор.

Составные части концепции

Концепция регистров накопления 1С состоит из двух частей и одного общего принципа. Первая (и на мой взгляд более важная) часть — Декомпозиция. Вторая часть концепции — Производительность. Объединяющий их принцип — Автоматизм. Рассмотрим их подробнее.

Декомпозиция

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

ВЫБРАТЬ
	ПоступлениеТоваровТовары.Товар КАК Товар,
	ПоступлениеТоваровТовары.Количество КАК Количество
ПОМЕСТИТЬ Т1
ИЗ
	Документ.ПоступлениеТоваров.Товары КАК ПоступлениеТоваровТовары

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	ОтгрузкаТоваровТовары.Товар,
	-ОтгрузкаТоваровТовары.Количество
ИЗ
	Документ.ОтгрузкаТоваров.Товары КАК ОтгрузкаТоваровТовары
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
	Т1.Товар КАК Товар,
	СУММА(Т1.Количество) КАК Количество
ИЗ
	Т1 КАК Т1

СГРУППИРОВАТЬ ПО
	Т1.Товар

В реальных условиях этого будет недостаточно. Очень часто встречается ситуация, когда складской и торговый модуль оказываются чересчур тесно связаны. Большинству потребителей так проще. У них нет четко выделенных документов поступления на склад и расхода со склада. Есть, например, документ РеализацияТоваровИУслуг, который обрабатывается в отделе продаж. А есть также документ ВозвратОтПокупателя. И тот и другой непосредственно влияют на состояние склада. Поэтому, чтобы получить работающую функцию, надо надо будет учесть наличие документов-двойников (Приход-Возврат от покупателя и Расход-Возврат поставщику). Время от времени на складе проводится инвентаризация, в результате которой возникают такие особенные документы, как расход в никуда (Списание) и приход из ниоткуда (Оприходование). Наконец, у нас наверняка будет несколько складов, и как следствие, документ перемещения между складами. Этот документ будет отличаться от всех остальных, тем что будет расходом и приходом одновременно. Можете мысленно представить себе, во что превратится исходный запрос, если учесть все только что сказанное. Даже самые простые задачи довольно быстро переходят границу, за которой их невозможно «окинуть одним взглядом». И разработчикам не остается ничего другого, как пытаться «съесть слона по частям». Но для начала надо «слона» на эти самые части разделить. А это тоже требует усилий совершенно особого рода. По своему опыту разработчика и преподавателя могу сказать, что кому-то это дается с большим трудом, а некоторым не дается вовсе.

А в 1С:Предприятие нам говорят следующее. Вот у вас есть документ ПриобретениеТоваровУслуг. Опишите, что он будет делать с регистром остатков. Описали? Отлично! Теперь переходите к документу РеализацияТоваровУслуг и так далее. Изначально относительно сложная задача распадается на несколько небольших и совсем простых. И происходит это само собой, «автоматом». Это сильно упрощает жизнь разработчикам, особенного новичкам.

У такого подхода есть и отрицательная сторона. Вам надо понять как именно в какой-нибудь конкретной конфигурации формируется остаток на складе. Но это не так-то легко сделать! Функция остатка оказывается «размазанной» по множеству независимых друг от друга программных модулей. Их еще надо собрать вместе. И каким-то образом убедиться, что ничего не пропущено. А это нетривиальная задача и в общем случае требует полного анализа всей конфигурации. Легкость начального создания оборачивается трудностями в дальнейшей поддержке. Это надо иметь ввиду.

Производительность

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

Некоторое время назад были нюансы

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

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

Минусы тут тоже есть, хотя и не такие очевидные, как в первом случае. Автоматическое получение минимальной работоспособности лишает разработчиков стимула вникать глубже в работу учетной системы, анализировать где такое кэширование будет полезно, а где не очень. Быстрое получение актуальных остатков не так уж много где требуется. Чаще всего оно может потребоваться в процессе резервирования товара. А в большинстве прочих случаях мы имеем дело скорее с требованием быстрого получения НЕактуальных остатков и оборотов. Например аналитику надо сравнить продажи за прошлый и позапрошлый месяц. Регистры помогают и тут, но идеальным решением является все-таки вынос кэширования на уровень выше. Имеется ввиду предварительная подготовка отчетов. Этот вариант максимально комфортен для пользователей, потому что в этом случае они получают отчеты моментально.

Заключение

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

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

  • Подробнее о бесплатном уроке

Вступайте в мою группу помощник программиста.
В ней мы обсуждаем программирование в 1С.

/// Как прочитать записи регистра накопления в 1с 8.3, 8.2
 
&НаСервере
Процедура КакПрочитатьЗаписиРегистраНакопленияНаСервере()
 
    // Получим все записи регистра накопления ЗаказыКлиентов
    // по организации ООО "Ромашка" за 1 квартал 2014 года,
    // упорядочив их по возрастанию даты.
 
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |   ЗаказыКлиентов.Период,
        |   ЗаказыКлиентов.Регистратор,
        |   ЗаказыКлиентов.НомерСтроки,
        |   ЗаказыКлиентов.Активность,
        |   ЗаказыКлиентов.Контрагент,
        |   ЗаказыКлиентов.Номенклатура,
        |   ЗаказыКлиентов.Количество
        |ИЗ
        |   РегистрНакопления.ЗаказыКлиентов КАК ЗаказыКлиентов
        |ГДЕ
        |   ЗаказыКлиентов.Активность = Истина И
        |   ЗаказыКлиентов.Организация = &ВыбОрганизация И
        |   ЗаказыКлиентов.Период МЕЖДУ &НачДата И &КонДата
        |УПОРЯДОЧИТЬ ПО
        |   ЗаказыКлиентов.Период";
 
    Запрос.УстановитьПараметр("ВыбОрганизация",
        Справочники.Организации.НайтиПоНаименованию("ООО ""Ромашка""")
    );
    // начальная дата - 1 января 2014 года
    Запрос.УстановитьПараметр("НачДата", '20140101000000');
    // конечная дата - 31 марта 2014 года 23 часа 59 минут 59 секунд
    Запрос.УстановитьПараметр("КонДата", '20140331235959');
 
    РезультатЗапроса = Запрос.Выполнить();
 
    Записи = РезультатЗапроса.Выбрать();
 
    Пока Записи.Следующий() Цикл
        Сообщить(
            "[" + Записи.Период + "] " +
            Записи.Номенклатура + " " +
            Записи.Количество + " шт." +
            " (" + Записи.Регистратор + ")"
        );
    КонецЦикла;
 
КонецПроцедуры
 
/// Как получить обороты по регистру накопления в 1с 8.3, 8.2
 
&НаСервере
Процедура КакПолучитьОборотыПоРегиструНапопленияНаСервере()
 
    // За получение оборотов по регистру накопления за произвольный период
    // с заданной периодичностью в различных разрезах аналитики отвечает
    // виртуальная таблица Обороты,
    // у неё есть следующие параметры:
    // 1. Начало периода (включая)
    // 2. Конец периода (включая)
    // 3. Периодичность (например, Период, Запись, Год, Месяц...)
    // 4. Условие (например, Организация = &ВыбОрганизация)
 
    // Пример №1
    Сообщить("Пример №1");
 
    // Посчитаем сколько и каких продуктов было заказано за 1 квартал
    // 2014 года в организации ООО "Ромашка".
 
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |   ЗаказыКлиентовОбороты.Номенклатура,
        |   ЗаказыКлиентовОбороты.Организация,
        |   ЗаказыКлиентовОбороты.КоличествоОборот
        |ИЗ
        |   РегистрНакопления.ЗаказыКлиентов.Обороты(
        |       ДАТАВРЕМЯ(2014, 01, 01, 00, 00, 00),
        |       ДАТАВРЕМЯ(2014, 03, 31, 23, 59, 59),
        |       Период,
        |       Организация = &ВыбОрганизация
        |   ) КАК ЗаказыКлиентовОбороты
        |УПОРЯДОЧИТЬ ПО
        |   ЗаказыКлиентовОбороты.Номенклатура";
 
    Запрос.УстановитьПараметр("ВыбОрганизация",
        Справочники.Организации.НайтиПоНаименованию("ООО ""Ромашка""")
    );
 
    РезультатЗапроса = Запрос.Выполнить();
 
    Записи = РезультатЗапроса.Выбрать();
 
    Пока Записи.Следующий() Цикл
        Сообщить(
            "За 1 кв. 2014 года заказали " + 
            Записи.КоличествоОборот + " шт. " +
            Записи.Номенклатура
        );
    КонецЦикла;
 
    // Пример №2
    Сообщить("Пример №2");
 
    // Посчитаем сколько бананов было заказано за каждый месяц
    // в 1 квартале 2014 года в организации "Ромашка".
 
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |   ЗаказыКлиентовОбороты.Период,
        |   ЗаказыКлиентовОбороты.Номенклатура,
        |   ЗаказыКлиентовОбороты.Организация,
        |   ЗаказыКлиентовОбороты.КоличествоОборот
        |ИЗ
        |   РегистрНакопления.ЗаказыКлиентов.Обороты(
        |       &НачПериод,
        |       &КонПериод,
        |       Месяц,
        |       Организация = &ВыбОрганизация И
        |       Номенклатура = &ВыбНоменклатура
        |   ) КАК ЗаказыКлиентовОбороты
        |УПОРЯДОЧИТЬ ПО
        |   ЗаказыКлиентовОбороты.Период";
 
    Запрос.УстановитьПараметр("НачПериод", '20140101000000');
    Запрос.УстановитьПараметр("КонПериод", '20140331235959');
    Запрос.УстановитьПараметр("ВыбОрганизация",
        Справочники.Организации.НайтиПоНаименованию("ООО ""Ромашка""")
    );
    Запрос.УстановитьПараметр("ВыбНоменклатура",
        Справочники.Номенклатура.НайтиПоНаименованию("Банан")
    );
 
    РезультатЗапроса = Запрос.Выполнить();
 
    Записи = РезультатЗапроса.Выбрать();
 
    Пока Записи.Следующий() Цикл
        Сообщить(
            "За " + Формат(Записи.Период, "ДФ=ММММ") +
            " заказали " + Записи.КоличествоОборот + " шт. " +
            Записи.Номенклатура            
        );
    КонецЦикла;
 
КонецПроцедуры
 
/// Как получить остатки по регистру накопления в 1с 8.3, 8.2
 
&НаСервере
Процедура КакПолучитьОстаткиПоРегиструНакопленияНаСервере()    
 
    // За получение остатков по регистру накопления в разрезе
    // аналитики отвечает виртуальная таблица Остатки,
    // у неё есть следующие параметры:
    // 1. Период, на который считаем остатки, исключая саму дату.
    //    Если нужны остатки на дату включительно - используем
    //    тип Граница (см. пример ниже).
    // 2. Условие (например, Организация = &ВыбОрганизация)
 
    // Получим остатки бананов на основном складе в организации
    // ООО "Ромашка" на 31 марта 2014 года (включительно)
 
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |   ЗапасыЕдыОстатки.Склад,
        |   ЗапасыЕдыОстатки.Номенклатура,
        |   ЗапасыЕдыОстатки.Организация,
        |   ЗапасыЕдыОстатки.КоличествоОстаток
        |ИЗ
        |   РегистрНакопления.ЗапасыЕды.Остатки(
        |       &ВыбДата,
        |       Склад = &ВыбСклад И
        |       Номенклатура = &ВыбНоменклатура
        |   ) КАК ЗапасыЕдыОстатки";
 
    Запрос.УстановитьПараметр("ВыбДата", 
        Новый Граница('20140331235959', ВидГраницы.Включая)
    );
    Запрос.УстановитьПараметр("ВыбСклад",
        Справочники.Склады.НайтиПоНаименованию("Основной")
    );
    Запрос.УстановитьПараметр("ВыбНоменклатура",
        Справочники.Номенклатура.НайтиПоНаименованию("Банан")
    );    
 
    РезультатЗапроса = Запрос.Выполнить();
 
    Записи = РезультатЗапроса.Выбрать();
 
    Пока Записи.Следующий() Цикл
        Сообщить(
            "Остатки " + " " + Записи.Номенклатура +
            " на складе " + Записи.Склад + " на дату " +
            "31.03.2014 (включительно) " +
            " составляют " + Записи.КоличествоОстаток + " шт.");
    КонецЦикла;
 
КонецПроцедуры
 
/// Как получить сразу остатки и обороты по регистру
/// накопления в 1с 8.3, 8.2
 
&НаСервере
Процедура КакПолучитьСразуОстаткиИОборотыПоРегиструНакопленияНаСервере()
 
    // За получение остатков и оборотов за произвольный период
    // с заданной периодичностью в разрезе аналитики отвечает
    // виртуальная таблица ОстаткиИОбороты, у неё есть параметры:
    // 1. Начало периода (включая)
    // 2. Конец периода (включая)
    // 3. Периодичность (например, Период, Год, Месяц...)
    // 4. Метод дополнения периодов (Движение или ДвиженияИГраницыПериода)
    // 5. Условие (например, Организация = &ВыбОрганизация)
 
    // Для примера получим начальный остаток, приход, расход и конечный остаток
    // банана на всех складах за каждый месяц 2014 года для
    // организация ООО "Ромашка".
 
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |   ЗапасыЕдыОстаткиИОбороты.Период,
        |   ЗапасыЕдыОстаткиИОбороты.Номенклатура,
        |   ЗапасыЕдыОстаткиИОбороты.Организация,
        |   ЗапасыЕдыОстаткиИОбороты.КоличествоНачальныйОстаток,
        |   ЗапасыЕдыОстаткиИОбороты.КоличествоОборот,
        |   ЗапасыЕдыОстаткиИОбороты.КоличествоПриход,
        |   ЗапасыЕдыОстаткиИОбороты.КоличествоРасход,
        |   ЗапасыЕдыОстаткиИОбороты.КоличествоКонечныйОстаток
        |ИЗ
        |   РегистрНакопления.ЗапасыЕды.ОстаткиИОбороты(
        |       ДАТАВРЕМЯ(2014, 01, 01, 00, 00, 00),
        |       ДАТАВРЕМЯ(2014, 12, 31, 23, 59, 59),
        |       Месяц, ДвиженияИГраницыПериода,
        |       Организация = &ВыбОрганизация И
        |       Номенклатура = &ВыбНоменклатура
        |   ) КАК ЗапасыЕдыОстаткиИОбороты
        |УПОРЯДОЧИТЬ ПО
        |   ЗапасыЕдыОстаткиИОбороты.Период";
 
    Запрос.УстановитьПараметр("ВыбОрганизация",
        Справочники.Организации.НайтиПоНаименованию("ООО ""Ромашка""")
    );
    Запрос.УстановитьПараметр("ВыбНоменклатура",
        Справочники.Номенклатура.НайтиПоНаименованию("Банан")
    );
 
    РезультатЗапроса = Запрос.Выполнить();
 
    Записи = РезультатЗапроса.Выбрать();
 
    Пока Записи.Следующий() Цикл
      Сообщить(
        Формат(Записи.Период, "ДФ=ММММ") + " [" +
        Записи.Номенклатура + "] " + "нач. остаток " +
        Записи.КоличествоНачальныйОстаток + " приход " +
        Записи.КоличествоПриход + ", расход " +
        Записи.КоличествоРасход + " кон. остаток " +
        Записи.КоличествоКонечныйОстаток
      );
  КонецЦикла;
 
КонецПроцедуры
 
/// Как найти и изменить программно записи в регистр накопления
/// документа (регистратора) в 1с 8.3, 8.2
 
&НаСервере
Процедура КакНайтиИИзменитьЗаписиДокументаНаСервере()
 
    // Предположим у нас есть ссылка на проведенный документ
    // поступления еды № ВМБП-000002
 
    ПоступлениеСсылка =
        Документы.ПоступлениеЕды.НайтиПоНомеру(
            "ВМБП-000002", '20141231'
        );
 
    // Мы значем, что этот документ делает следующие записи
    // в регистр накопления "ЗапасыЕды":
    // Приход [Организация, Склад, Номенклатура]  [Количество]
 
    // Наша задача: найти эти записи и изменить
    // их (например, удвоим количество поступившего товара)
    // и записать вместо старых.
 
    // Используем объектную технику получения записей,
    // ведь мы будем их изменять.
 
    Поступление = ПоступлениеСсылка.ПолучитьОбъект();
 
    // Получим набор записей этого документа в регистр "ЗапасыЕды".
    НаборЗаписей = Поступление.Движения.ЗапасыЕды;
 
    // Прочитаем записи из базы данных.
    НаборЗаписей.Прочитать();
 
    Для Каждого Запись Из НаборЗаписей Цикл
 
        // Выведем старые значения.
        Сообщить(
            "[" + Запись.Организация + ", " +
            Запись.Склад + ", " +
            Запись.Номенклатура + "] " +
            "[" + Запись.Количество + "]"
        );
 
        // Удвоим количество.
        Запись.Количество = 2 * Запись.Количество;
 
    КонецЦикла;
 
    // Добавим новую запись в регистр накопления.
 
    НоваяЗапись = НаборЗаписей.Добавить();
    НоваяЗапись.Организация =
        Справочники.Организации.НайтиПоНаименованию("ООО ""Ромашка""");
    НоваяЗапись.Склад =
        Справочники.Склады.НайтиПоНаименованию("Основной");
    НоваяЗапись.Номенклатура =
        Справочники.Номенклатура.НайтиПоНаименованию("Банан");
    НоваяЗапись.Период = ТекущаяДата();
    НоваяЗапись.Количество = 1000;
 
    // Разом запишем набор записей.
    НаборЗаписей.Записать(
        Истина // удалим старые записи и запишем вместо них новые
    );
 
    // Теперь записи регистра ЗапасыЕды по документу № ВМБП-000002,
    // отличаются от тех, что были записаны документом при проведении.
    // Чтобы вернуть их к начальному виду - нужно
    // перепровести документ.
 
КонецПроцедуры
 
/// Как прочитать записи документа в регистр накопления
/// запросом в 1с 8.3, 8.2
 
&НаСервере
Процедура КакПрочитатьЗаписиДокументаЗапросомНаСервере()
 
    // Этот приём используется, если не требуется изменять
    // найденные записи.
 
    // Предположим у нас есть ссылка на проведенный документ
    // поступления еды № ВМБП-000002
 
    ПоступлениеСсылка =
        Документы.ПоступлениеЕды.НайтиПоНомеру(
            "ВМБП-000002", '20141231'
        );
 
    // Мы значем, что этот документ делает записи
    // в регистр накопления "ЗапасыЕды".    
    // Прочитаем эти записи запросом.
 
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |   ЗапасыЕды.Период,
        |   ЗапасыЕды.Регистратор,
        |   ЗапасыЕды.НомерСтроки,
        |   ЗапасыЕды.Активность,
        |   ЗапасыЕды.ВидДвижения,
        |   ЗапасыЕды.Склад,
        |   ЗапасыЕды.Номенклатура,
        |   ЗапасыЕды.Организация,
        |   ЗапасыЕды.Количество
        |ИЗ
        |   РегистрНакопления.ЗапасыЕды КАК ЗапасыЕды
        |ГДЕ
        |   ЗапасыЕды.Регистратор = &ВыбРегистратор
        |УПОРЯДОЧИТЬ ПО
        |   ЗапасыЕды.НомерСтроки";
 
    Запрос.УстановитьПараметр(
        "ВыбРегистратор",
        ПоступлениеСсылка
    );
 
    РезультатЗапроса = Запрос.Выполнить();
 
    Записи = РезультатЗапроса.Выбрать();
 
    Пока Записи.Следующий() Цикл        
        Сообщить(
            "[" + Записи.Организация + ", " +
            Записи.Склад + ", " +
            Записи.Номенклатура + "] " +
            "[" + Записи.Количество + "]"
        );
    КонецЦикла;
 
КонецПроцедуры
 
/// Как создать записи регистра накопления без привязки
/// к документу в 1с 8.3, 8.2
 
&НаСервере
Процедура КакСоздатьЗаписиБезДокументаНаСервере()
 
    // В нашей тестовой конфигурации нет документа
    // "ОперацияБух", который присутствует в бухгалтерской базе.
 
    Сообщить("Этот пример нельзя выполнить в этой базе.");
    Возврат;
 
    // Записи регистра накопления обязательно
    // должны быть привязаны к документу, в данном случае
    // этим документом будет документ "ОперацияБух",
    // задуманный как раз для ручных операций.
 
    Операция = Документы.ОперацияБух.СоздатьДокумент();
    Операция.Дата = ТекущаяДата();
    Операция.Организация =
        Справочники.Организации.НайтиПоНаименованию("Милькин В. В. ИП");
    Операция.СуммаОперации = 1000;	
    Операция.Содержание = "Ручная операция по регистру накопления ИПДоходы";	
    Операция.Записать(РежимЗаписиДокумента.Запись);
 
    // Затем получаем его набор записей для регистра ИПДоходы
    НаборЗаписей = Операция.Движения.ИПДоходы;
    Запись = НаборЗаписей.Добавить();
    Запись.Период = Операция.Дата;
    Запись.Организация = Операция.Организация;
    // и т.д. заполняем все нужные поля регистра
    Запись.Сумма = 1000;	
 
    НаборЗаписей.Записать(Истина);
 
КонецПроцедуры
 
/// Скачать и выполнить эти примеры на компьютере

Понравилась статья? Поделить с друзьями:
  • Жулебинский бульвар 40 социальная защита часы работы
  • Дмитровская энергетическая компания официальный сайт
  • Журнал бизнес образование право стоимость публикации
  • Дмс для сотрудников компании налогообложение при усн
  • Енисейский районный суд красноярского края реквизиты