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

Содержание

Схема проведения документов в типовых конфигурациях УТ 11, ERP 2 и КА 2

V8: Добавление и правка движений в конце проведения документов. Документы, регистры накопления Дополнительные свойства запись движений при проведении
Skip to content

В этой статье мы разберем схему проведения документа по регистрам в типовых конфигурациях УТ 11, КА 2 и ERP 2.

Для чего это нужно?

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

Что конкретно будем рассматривать

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

В результате Вы будете знать ответы на вопросы:

  • Где находятся алгоритмы формирования движений?
  • Как изменить типовое проведение документа?
  • Как адаптировать документ для движений по собственному регистру?

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

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

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

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

Дополнительно о методиках контроля остатков можно прочитать в другой нашей статье: https://курсы-по-1с.рф/articles/2017-02-12-two-methods-for-inventory-check/

Театр начинается с вешалки, а проведение документа – с процедуры ОбработкаПроведения() модуля объекта. Порядок действий в обработке проведения документа можно представить в виде следующей схемы:

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

Рассмотрим детально каждую точку алгоритма проведения на примере документа «Реализация товаров и услуг».

ПроведениеСервер.ИнициализироватьДополнительныеСвойстваДляПроведения(Ссылка, ДополнительныеСвойства, РежимПроведения);

Вызывается процедура ИнициализироватьДополнительныеСвойстваДляПроведения() общего модуля ПроведениеСервер, в процедуру кроме ссылки и режима проведения передаются ДополнительныеСвойства.

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

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

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

Рисунок 2. Дополнительные свойства после инициализации

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

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

Вызывается процедура ИнициализироватьДанныеДокумента() модуля менеджера объекта, в процедуру передается ссылка на объект и ДополнительныеСвойства.

Документы.РеализацияТоваровУслуг.ИнициализироватьДанныеДокумента(Ссылка, ДополнительныеСвойства);

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

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

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

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

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

Запрос = Новый Запрос;ЗаполнитьПараметрыИнициализации(Запрос, ДокументСсылка);

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

ТекстыЗапроса = Новый СписокЗначений;ТекстЗапросаТаблицаЗаказыКлиентов(Запрос, ТекстыЗапроса, Регистры);ТекстЗапросаТаблицаСвободныеОстатки(Запрос, ТекстыЗапроса, Регистры);ТекстЗапросаТаблицаОбеспечениеЗаказов(Запрос, ТекстыЗапроса, Регистры);ТекстЗапросаТаблицаТоварыКОтгрузке(Запрос, ТекстыЗапроса, Регистры);…

Создается список значений ТекстыЗапроса, который будет содержать тексты запроса. Для каждого регистра, по которому требуется сформировать движения, вызывается процедура ТекстЗапросаТаблица[ИмяРегистраДляДвижения], где ИмяРегистраДляДвижения – наименование регистра, для которого формируется таблица движений. Текст запроса добавляется в список значений ТекстыЗапроса.

Вот и ответ на вопрос: «Где находятся алгоритмы формирования движений?».

Именно в процедуре ТекстЗапросаТаблица[ИмяРегистраДляДвижения] содержится текст запроса, на основании которого будут сформированы движения документа в конкретный регистр учетной системы.

ПроведениеСервер.ИнициализироватьТаблицыДляДвижений(Запрос, ТекстыЗапроса, ДополнительныеСвойства.

ТаблицыДляДвижений, Истина);

Список значений ТекстыЗапроса передается в процедуру ИнициализироватьТаблицыДляДвижений() общего модуля ПроведениеСервер, в процедуре производится компоновка общего текста пакетного запроса по данным списка значений и его выполнение. Затем процедура выгружает результаты запроса в таблицы значений, в свойство ТаблицыДляДвижений, рассмотренное на первом шаге.

ПроведениеСервер.ПодготовитьНаборыЗаписейКРегистрацииДвижений(ЭтотОбъект);

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

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

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

ЗаказыСервер.ОтразитьЗаказыКлиентов(ДополнительныеСвойства, Движения, Отказ);ЗапасыСервер.ОтразитьСвободныеОстатки(ДополнительныеСвойства, Движения, Отказ);ЗапасыСервер.ОтразитьОбеспечениеЗаказов(ДополнительныеСвойства, Движения, Отказ);ЗаказыСервер.

ОтразитьТоварыКОтгрузке(ДополнительныеСвойства, Движения, Отказ);…

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

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

ТаблицаЗаказыКлиентов = ДополнительныеСвойства.ТаблицыДляДвижений.ТаблицаЗаказыКлиентов;…ДвиженияЗаказыКлиентов.Загрузить(ТаблицаЗаказыКлиентов);

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

ПроведениеСервер.ЗаписатьНаборыЗаписей(ЭтотОбъект);

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

Объект.Движения.Записать();

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

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

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

ПроведениеСервер.ВыполнитьКонтрольРезультатовПроведения(ЭтотОбъект, Отказ);

В случае выявления несоответствий флаг Отказ будет возведен в «Истину» и проведение документа будет завершено с соответствующим диагностическим сообщением.

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

ПроведениеСервер.ОчиститьДополнительныеСвойстваДляПроведения(ДополнительныеСвойства);

Завершающий этап обработки проведения документа.

Выполняются дополнительные действия, связанные с объектом, и эти действия должны быть неразрывно связаны с моментом проведения документа, т.е. выполнены в транзакции проведения.

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

Документы.СчетФактураВыданный.АктуализироватьСчетФактуру(ЭтотОбъект, Истина, ТребуетсяСчетФактура());РегистрыСведений.ТребуетсяОформлениеСчетаФактуры.ОтразитьНеобходимостьОформленияСчетаФактуры(ДополнительныеСвойства, Отказ);

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

В статье рассмотрена схема проведения документа по регистрам учета в типовых конфигурациях УТ 11, КА 2 и ERP 2. Подведем краткие итоги:
Как понять алгоритм формирования движений в определенный регистр?

Алгоритм формирования движений содержится в тексте запроса, который расположен в функции ТекстЗапросаТаблица[ИмяРегистраДляДвижения] модуля менеджера объекта.

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

Требуется разработать свой текст запроса и поместить его вместо существующего в функцию ТекстЗапросаТаблица[ИмяРегистраДляДвижения] модуля менеджера объекта.

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

Как добавить формирование движений в свой новый регистр?

Требуется разработать текст запроса, формирующий движения, и поместить его в новую, нами созданную, функцию ТекстЗапросаТаблица[ИмяСвоегоНовогоРегистра] модуля менеджера объекта.

В модуле объекта добавить вызов процедуры Отразить[ИмяСвоегоНовогоРегистра] в обработке проведения документа. Текст процедуры формируется по аналогии с типовыми процедурами.

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

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

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

PDF-версия статьи для участников группы ВКонтакте

Мы ведем группу ВКонтакте – http://.com/kursypo1c.

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

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

Источник: https://xn----1-bedvffifm4g.xn--p1ai/ut11-articles/2017-09-07-documents-posting-scheme/

1С:

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

До этого момента мы учитывали только количественное движение товара с помощью регистра накопления Остатки товаров. Однако одного количественного учета недостаточно.

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

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

Подобная информация имеет совершенно другую структуру, отличную от количественного учета.

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

Создание регистра накопления Стоимость товаров

Создайте регистр накопления Стоимость товаров. Он создается по изложенной ранее технологии. Регистр должен иметь измерение – Товар с типом СправочникСылка.Номенклатура и один ресурс Стоимость длиной 15 и точностью 2. В дереве конфигурации созданный регистр должен выглядеть, как показано на рис. 1.

Рис. 1.

После создания нового регистра накопления можно приступать к изменению процедур проведения документов Приходная накладная и Оказание услуги.

Изменение процедуры проведения документа Приходная накладная

Для внесения изменений выполните операции:
· откройте в конфигураторе окно редактирования объекта конфигурации Документ ПриходнаяНакладная;
· в списке регистров отметьте, что документ будет создавать движения и по регистру СтоимостьТовара;
· включите конструктор движений – откроется диалоговое окно с сообщением “При запуске конструктора движений регистра, процедура ОбработкаПроведения будет замещена, ответьте Да;
· в открывшемся конструкторе движений добавьте в список регистров, по которым формируются движения, еще один – СтоимостьТовара;
выберите для него ту же табличную часть, и заполните выражения: для ресурса Товар выберите ТекСтрокаизделия.Изделие, а для ресурса Стоимость ТекСтрокаизделия.Сумма (рис.2);

Рис. 2.

· нажмите на ОК – откроется окно модуля объекта с процедурой ОбработкаПроведения документа ПриходнаяНакладная (Листинг 1).

Листинг 1.

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

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

В нашем случае табличная часть всего одна, поэтому можно объединить два цикла в один, закомментировав выделенные в листинге 12 строки (листинг 2).

Листинг 2.
Запустите 1С:Предприятие в режиме отладки и перепроведите документ Приходная накладная №1 и №2.

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

Рис. 3.Рис. 4.

Изменение процедуры проведения документа Оказание услуги

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

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

· откройте в конфигураторе окно редактирования объекта конфигурации документ

ОказаниеУслуги;
· перейдите на закладку Данные и создайте новый реквизит табличной части с именем Стоимость – тип Число, длина 14, точность 2 (рис. 5);

Рис. 5.

– откройте форму ФормаДокумента документа ОказаниеУслуги и добавьте в табличное поле колонку, отображающую новый реквизит Стоимость, расположив ее после колонки Номенклатура (рис. 6).

Для этого выделите табличное поле и выполните команду контекстного меню Размещение данных.

В окне Размещение данных отметьте реквизит Стоимость и щелкните ОК, после этого переместите мышью колонку Стоимость и поместите ее после колонки Номенклатура.

Рис. 6.

· откройте в конфигураторе окно редактирования объекта конфигурации ДокументОказаниеУслуги и укажите, что документ будет создавать движения по регистру СтоимостьТовара;
· запустите конструктор движений документа и добавьте в список регистров регистр СтоимостьТовара;
– опишите движения документа учитывая, что стоимость вычисляется как произведение стоимости и количества, указанных в табличной части (рис. 7);

Рис. 7.

· нажмите ОК и в тексте программы, сформированной конструктором восстановите изменения, связанные с тем, чтобы учитывалось только движение товара (Листинг 3 выделенный текст).

Листинг 3.

Проверьте как работает проведение документа ОказаниеУслуги. Запустите 1С:Предприятие в режиме отладки и укажите стоимость выбранных товаров в документе Оказание услуги №1 (рис. 8).

Рис. 8.

В регистре накопления Стоимость товара проведение отобразится как показано на рис. 9.

Рис. 9.

Создайте и проведите еще один документ с другой датой (рис. 10).

Рис. 10.

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

Рис. 11.

В следующей статье будет рассмотрен объект конфигурации Оборотный регистр накопления.

Источник: https://zen.yandex.ru/media/id/5d4d8e658da1ce00ad5ece61/1spredpriiatie-provedenie-dokumenta-po-neskolkim-registram-5e95c4332c5f1a7bf47503d2

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

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

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

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

Структура

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Агрегаты

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

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

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

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

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

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

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

Источник: https://v8.1c.ru/platforma/registr-nakopleniya/

1C:

V8: Добавление и правка движений в конце проведения документов. Документы, регистры накопления Дополнительные свойства запись движений при проведении
sh: 1: –format=html: not found

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

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

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

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

Роль объекта конфигурации Регистр накопления схематически представлена на рис. 1.

Рис. 1.

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

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

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

При этом в регистр добавляется некоторое количество записей. Каждая из этих записей содержит значения измерений, значения приращения ресурсов, ссылку на документ, который вызвал эти изменения и “направление” приращения (приход или расход).

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

Редактирование регистра накопления выполняется в окне редактирования (рис. 2).

Рис. 2.

Если регистр предназначен для хранения остатков, то нужно выбрать из списка значение “Остатки”, если для хранения оборотов —значение “Обороты”.
На закладке “Прочее” задается: · режим блокировки объекта (автоматический или управляемый); · устанавливается признак полнотекстового поиска по объектам данного типа;

· режим разделения итогов.

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

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

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

Записи будут “размножаться” только при параллельно выполняемых транзакциях. Их количество по каждой комбинации измерений будет зависеть от максимального количества одновременно выполняемых транзакций.

При пересчете итогов накопленные отдельные записи сворачиваются.

Создание регистра накопления Остатки товаров

Нас интересует информация о том, каких и сколько товаров и комплектующих осталось на складах. Такая информация может накапливаться в регистре накопления.

Создадим для этой цели регистр с именем ОстаткиТоваров, для этого выполним операции:
1. Создадим новый объект конфигурации Регистр накопления.
2.

Присвоим регистру имя – ОстаткиТовара, в поле Вид регистра выберем из списка Остатки. Кликнем на кнопке Далее.
3. Определим измерения регистра:

4. Создадим ресурс Количество- тип Числовой, длина 15, точность 3.

В результате выполненных операций структура регистра накопления ОстаткиТоваров будет иметь вид как на рис. 3.

Рис. 3.

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

В следующей статье познакомимся с приемами создания движений документов.

Источник: https://zen.yandex.ua/media/id/5d4d8e658da1ce00ad5ece61/1c-predpriiatie-registr-nakopleniia-ego-sozdanie-5e7f6ce999b22b07918912c0?feed_exp=ordinary_feed&from=channel&rid=2456585227.517.1587243237960.66656&integration=publishers_platform_yandex&secdata=CKve4rKSLiABMAJQDw%3D%3D

Проведение документов

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

Когда происходит интерактивное или программное проведение документа, срабатывает выполнение процедуры ОбработкаПроведения(), которая находится в модуле объекта документа.

Процедура ОбработкаПроведения(Отказ, РежимПроведения) // Вставить содержимое обработчикаКонецПроцедуры

Данная процедура имеет два параметра: Отказ и РежимПроведения. Если выставить параметру Отказ значение Истина, то проведение не будет выполнено. Параметр РежимПроведения устанавливает режим проведения документа — «оперативное» или «неоперативное». Сами движения в регистры разработчик должен прописать в этой процедуре самостоятельно.

Рассмотрим подробно свойства документа на вкладке «Движения»

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

Процедура ОбработкаПроведения

Формирование новых наборов записей регистров включает в себя операции, состоящие:

  • из добавления новых записей к набору записей;
  • заполнения полей записей;
  • записи набора записей.

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

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

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

Период = Дата; Движение.Номенклатура = ТекСтрокаСостав.Номенклатура; Движение.Склад = Склад; Движение.Количество = ТекСтрокаСостав.Количество; Движение.ВидОперации = ВидОперации; КонецЦикла;КонецПроцедуры

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

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

// По умолчанию параметр Замещать имеет значение ИстинаДвижения.ТоварыНаСкладах.Записать();

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

// Добавлять новые движения к старымДвижения.ТоварыНаСкладах.Записать(Ложь);

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

Подробнее о формировании движений

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

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

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

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

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

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

Записать(РежимЗаписиДокумента.Проведение, РежимПроведенияДокумента.Оперативный);

Пример перепроведения документов РеализацияТоваров в интервале с ДатаНачала по ДатаОкончания:

// Получить ссылки на проведенные документы в требуемом интервалеЗапрос = Новый Запрос();Запрос.Текст = “ВЫБРАТЬ | РеализацияТоваров.Ссылка |ИЗ | Документ.РеализацияТоваров КАК РеализацияТоваров |ГДЕ | РеализацияТоваров.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания | И РеализацияТоваров.Проведен”;Запрос.УстановитьПараметр(“ДатаНачала”, ДатаНачала);Запрос.УстановитьПараметр(“ДатаОкончания”, ДатаОкончания);Результат = Запрос.Выполнить();// Перебрать ссылки полученных документовВыборка = Результат.Выбрать();Пока Выборка.Следующий() Цикл // Перепровести каждый документ неоперативно Документ = Выборка.Ссылка.ПолучитьОбъект(); Документ.Записать(РежимЗаписиДокумента.Проведение);КонецЦикла;

Здесь инициировалось проведение в неоперативном режиме. Значение по умолчанию параметра РежимПроведения метода объекта документа Записать() — именно РежимПроведенияДокумента.Неоперативный.

Оперативное и неоперативное проведение

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

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

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

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

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

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

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

Неоперативное проведение документов подразумевает отражение в базе данных фактов, которые свершились в прошлом или которые точно будут совершены в будущем.

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

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

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

С оперативным проведением документов связано понятие оперативной отметки времени и понятие момента времени.

Понятие момента времени

Для определения положения документа на оси времени используется реквизит документа «Дата». Дата содержит время с точностью до секунды. Это позволяет контролировать последовательность записи документов.

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

Как в этом случае определить последовательность созданных документов?

Для обработки подобных ситуаций было введено понятие момент времени. Момент времени представляет собой совокупность даты, времени и ссылки на объект базы данных.

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

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

Понятие момента времени реализовано во встроенном языке при помощи универсального объекта МоментВремени. Этот объект имеет свойства Дата и Ссылка, которые позволяют получить «составляющие» момента времени, и один метод — Сравнить(), при помощи которого возможно сравнение двух моментов времени между собой.

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

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

Оперативная отметка времени создается системой каждый раз при оперативном проведении документа. Ее значение формируется исходя из текущей даты сеанса и последней созданной оперативной отметки.

Если последняя оперативная отметка меньше текущей даты сеанса, в качестве новой оперативной отметки принимается текущая дата сеанса.

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

Таким образом, если у объекта конфигурации Документ установлено свойство оперативного проведения, последовательность действий системы будет следующей:

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

Поиск: 1С:Предприятие • Движения • Документ • Момент времени • Обработка проведения

27.06.2019

Bootstrap 4. Компонент «Формы»

Компонент «Формы» — это набор CSS-классов, которые предназначены для оформления HTML форм: form-group, form-control, input-group, input-group-prepend, input-group-text, form-row, form-inline, invalid-feedback, valid-feedback, is-invalid, is-valid.

Page 3

Источник: https://tokmakov.msk.ru/blog/item/74

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

    Добавить комментарий

    Ваш e-mail не будет опубликован. Все поля обязательны для заполнения.