При проведении документов по какому либо регистру в свойствах конфигурации управляемый
Механизм транзакционных блокировок используется для конкурентного доступа пользователей к СУБД.
Транзакция – эта некая неразрывная операция, в ходе которой меняется состояние базы. Это минимальный квант изменений: нельзя сделать пол-транзакции; если транзакция не завершилась, то база откатится в начальное состояние.
Поскольку транзакция захватывает массив данных, возникает нюанс по доступу к этому массиву: например, одна транзакция меняет данные, а другая пробует их прочитать. Результат чтения может быть некорректным, т.к. не включит последних изменений. Поэтому, на уровне СУБД работает изоляция транзакций. Возможны следующие уровни изоляции:
- Read uncommited – пока одна транзакция меняет массив, другая не может его менять, но может читать. Низший уровень изоляции.
- Read commited – пока одна транзакция меняет массив, другая не может его ни менять, ни читать
- Repeatable read – пока одна транзакция читает массив, другая не может его менять, но может прочесть
- Serialaizable – пока одна транзакция читает массив, другая не может его ни менять, ни читать. Все операции последовательны. Максимальный уровень изоляции.
Если для конфигурации 1С:Предприятия установлен режим автоматических блокировок, то уровень изоляции транзакции выбирается СУБД. В случае с MS SQL, это будет Repeatable read или Serializable уровни, то есть изоляция данных близка к максимальной. Это решает проблемы с корректностью данных, но может приводить к появлению блокировок на уровне СУБД при интенсивной работе пользователей. Поэтому, в 1С:Предприятии есть свой функционал работы с блокировками, который активизируется включением режима управляемых блокировок. В этом случае уровень изоляции транзакций для MS SQL будет Read commited. Платформа сама будет изолировать данные, не полагаясь на СУБД.
Включение режима управляемых блокировок происходит в свойствах конфигурации:
Также, режим блокировок может быть установлен для конкретных объектов конфигурации:
В случае, если для конфигурации в целом установлен Автоматический режим блокировок, то все транзакции по всем регистрам будут работать именно в автоматическом режиме, безотносительно того режима, что выставлен для объекта конфигурации. Если Управляемый – то аналогично, все транзакции будут в управляемом. Если же для конфигурации выставлен режим Автоматический и управляемый, то режим для каждого объекта будет определяться его настройками.
Для режима Автоматический и управляемый есть один момент. Транзакция, единая для пользователя может представлять собой несколько транзакций с точки зрения платформы. Например, интерактивное проведение документа по регистру делает две транзакции – запись самого документа, и внутри этой транзакции запись набора строк по регистру. В зависимости от режима управления блокировками для самого документа и двигаемого им регистра, возможны четыре ситуации:
- Режим документа Автоматический, режим регистра Автоматический -> запись по регистру в автоматическом режиме
- Режим документа Управляемый, режим регистра Управляемый-> запись по регистру в управляемом режиме
- Режим документа Автоматический, режим регистра Управляемый -> запись по регистру в автоматическом режиме
- Режим документа Управляемый, режим регистра Автоматический -> исключительная ситуация (ошибка)
Вопрос 06.59 экзамена 1С:Профессионал по платформе. При проведении документа по какому-либо регистру в случае если у
документа установлен автоматический режим управления транзакционными блокировками, а у регистра управляемый (в свойствах конфигурации используется вариант “Автоматический и управляемый”), то такое
проведение приведет:
- к возникновению ошибочной ситуации
- вся транзакция будет выполнена в автоматическом режиме
- вся транзакция будет выполнена в управляемом режиме
Правильный ответ второй, определяем по первой транзакции, если автоматическая, то все автоматически.
***
Вопрос 06.60 экзамена 1С:Профессионал по платформе. При проведении документа по какому-либо регистру в случае если у
документа установлен управляемый режим управления транзакционными блокировками, а у регистра автоматический (в свойствах конфигурации используется вариант “Автоматический и управляемый”), то такое
проведение приведет:
- к возникновению ошибочной ситуации
- вся транзакция будет выполнена в автоматическом режиме
- вся транзакция будет выполнена в управляемом режиме
Правильный ответ первый, определяем по первой транзакции, если управляемая, то ошибка.
***
Вопрос 06.61 экзамена 1С:Профессионал по платформе. При проведении документа по какому-либо регистру в случае если у
документа установлен автоматический режим управления транзакционными блокировками, а у регистра управляемый (в свойствах конфигурации используется вариант “Управляемый”), то такое проведение приведет:
- к возникновению ошибочной ситуации
- вся транзакция будет выполнена в автоматическом режиме
- вся транзакция будет выполнена в управляемом режиме
Источник
Когда-то была программа 1С седьмой версии, и все программисты знали: если нужно проанализировать и/или исправить движения документа – смотри модуль документа, процедура ОбработкаПроведения(). В 1С 8 все гораздо сложнее. Кроме модуля проведения есть еще подписки на события, а также движения документа может “создавать” не сам документ. Эта статья о том, как происходит проведение и в какой момент записываются движения документа по регистрам.
Алгоритм проведения документа с учетом подписок на события
Настройки документа:
Если посмотреть свойства документа через палитру свойств, то можно увидеть два важных свойства: “Удаление движений” и “Запись движений при проведении”, причем второе НЕ вынесено на закладку “Движения” окна редактирования документа.
1. Удаление движений.
Если свойство “Удаление движений” уставновлено в “Удалять автоматически”, то ПЕРЕД началом проведения программа очищает все движения по регистрам. Фактически это означает запись пустого набора записей регистра с видом записи – замещение. А значит, программа выполняет код из процедур “ПередЗаписью” и “ПриЗаписи” модуля набора записей регистров.
Если для какого-либо регистра определена подписка на событие “При записи”, то выполняется код из связанной процедуры.
2. Процедура “ОбработкаПроведения” модуля документа.
Обратим внимание: в начале обработки проведения у всех движений флаг модифицированности Ложь (значение возвращает метод Движения.Регистр.Модифицированность()).
При работе с набором записей регистра (например, Движения.Регистр.Очистить(), Движения.Регистр.Добавить() и т.д.) флаг модифицированности становится Истина.
После записи движения в базу Движения.Регистр.Записать() модифицированность снова ложь.
Если в модуле процедуры подписки происходит запись набора регистра в явном виде (.Записать()), то программа выполняет код из процедур “ПередЗаписью” и “ПриЗаписи” модуля набора записей регистров и процедуры из подписки на событие “При записи” регистра.
3. Подписки на событие “При проведении” документа
Важно понимать: если в обработке проведения документа или в подписках на событие, вызванных ранее, не происходила запись движений регистров в явном виде (Движения.Регистр.Записать()), то движения документа еще НЕ записаны в базу. Поэтому их нельзя получить с помощью запроса, но можно получить из коллекции движений источника.
Процедура ПриПроведенииДокумента(Источник, Отказ, РежимПроведения) Экспорт
Регистр = Источник.Движения.Бухучет;
…..
КонецПроцедуры
Очередность подписок на одно и то же событие явным образом не определяется 1С, но на практике подписки вызываются в порядке следования в ветке “Подписки на события” окна редактирования конфигурации.
Если регистры записываются с помощь метода Записать(), то выполняются все связанные процедуры.
4. Запись движений.
Вспомним про свойство “Запись движений при проведении” из настроек документа.
Если оно равно “Записывать модифицированные”, то в базу будут записаны все движения документа, у которых флаг “Модифицированность” Истина.
Если оно равно “Записывать выбранные”, то в базу будут записаны движения регистров, для которых мы явным образом указали необходимость записи.
Движения.Регистр.Записывать = Истина;
Запись движений в базу происходит с режимом замещения Истина. Это означает, что будут записаны записи из текущего набора записей регистра коллекции Движения и очищены предыдущие записи.
И в конце рассмотрим несколько примеров:
Пусть свойство документа “Запись движений при проведении” равно “Записывать модифицированные”, а “Удаление движений” – “Не удалять автоматически”.
Пример 1.
Процедура ОбработкаПроведения(Отказ, РежимПроведения)
НовЗапись = Движения.Регистр.Добавить();
….
Движения.Регистр.Записать(Ложь); //***
КонецПроцедуры
При такой процедуре проведения документ при каждом перепроведении будет добавлять запись в регистр, записи будут множиться. Т.к. строка //*** добавляет записи в регистр, признак Модифицированности снимается.
Правильнее будет написать строку //*** как
Движения.Регистр.Записать()
или вообще ее опустить, и тогда программа сама запишет модифицированные движения.
Пример 2.
В 1С 8 движения документа могут формироваться не только в обработке проведения, но и извне, например, из некоторой служебной обработки (так реализовано допроведение документов, восстановление авансов и т.д.).
Приход = Документы.ПриходнаяНакладная.Выбрать();
Проводки = РегистрыБухгалтерии.Регистр.СоздатьНаборЗаписей();
Пока Приход.Следующий() Цикл
ДокСсылка = Приход.Ссылка;
Проводки.Отбор.Регистратор.Установить(ДокСсылка);
НоваяПроводка = Проводки.Добавить();
НоваяПроводка.Период = ДокСсылка.Дата;
НоваяПроводка.Организация = ДокСсылка.Организация;
НоваяПроводка.СчетДт = ПланыСчетов.ПланСчетов.Товары;
НоваяПроводка.СчетКт = ПланыСчетов.ПланСчетов.Поставщики;
НоваяПроводка.Сумма = ДокСсылка.Всего;
Проводки.Записать(Ложь);
КонецЦикла;
В этом случае при перепроведении документа, если происходит изменение движений регистра бухгалтерии (флаг Модифицированности Истина), записи будут замещены записями, сформированными документом.
Пример 3.
Перед началом проведения документа все реквизиты документа записываются в базу данных (т.е. программист может их получить с помощью запроса). Во внутренней памяти создается Объект документа, и у этого объекта есть коллекция движений, которая будет записана после окончания процедуры проведения (см. этап 4).
Если в процессе проведения документа движения по регистрам формируются не с помощью коллекции Движения, принадлежащей внутреннему объекту, а другими способами (вручную в форме набора записей или как в примере 2 и т.д.), то на этапе 4 эти записи будут замещены!!! Чтобы избежать замещения в типовых базах, для документа “ОперацияБух” свойство документа “Проведение” устанавливается в “Запретить”.
Если документ должен проводиться по другим регистрам и нельзя запретить проведение, тогда нужно внимательно настраивать свойства документа:
– выбрать вариант записи движений “Записывать выбранные” и убедиться, что Движения.Регистр.Записывать = Ложь
– выбрать вариант записи движений “Записывать модифицированные” и контролировать признак Модифицированности для набора записей этого регистра.
Пример 4.
Нужно понимать, что объект, полученный по ссылке (назовем его “ОбъектДок”), и внутренний объект (“ЭтотОбъект”), созданный в памяти в момент проведения, это два разных экземляра объектов.
ОбъектДок = ДокСсылка.ПолучитьОбъект();
ДвиженияДок = ОбъектДок.Движения;
НовДвижение = ДвиженияДок.Регистр.Добавить();
….
ДвиженияДок.Регистр.Записать();
Соответственно и коллекции движений у них будут разные. У “ОбъектаДок” коллекция движений будет включать только записанный в базу набор записей регистра, а у “ЭтогоОбъекта” – как записанные, так и добавленные и незаписанные записи. По окончании проведения (этап 4) в базу будут записаны наборы записей “ЭтогоОбъекта”, причем с признаком Замещать = Истина.
Если записи в набор записей добавляются по способу, описанному выше, то они могут быть замещены на этапе 4.
Источник
2.
DJDUH
17
10.03.16 13:27
Сейчас в теме
(1) mdmdvd, не могу сказать 100%, но по идее и ручные и системные (автоматические)
3.
mdmdvd
51
10.03.16 13:40
Сейчас в теме
(2) DJDUH, То есть если я явно не пропишу управляемые блокировки на это регистр то будут действовать автоматические блокировки так?
4.
kddvad1m
2
10.03.16 13:43
Сейчас в теме
(3) mdmdvd, Скорее всего вы правы. Тоже как то стояла такая проблема, пришли к выводу что просто галочками проблему не решить, нужно описывать упр блокировки самостоятельно.
5.
alljoke
10.03.16 13:49
Сейчас в теме
Из экзамена:
ПРИ ПРОВЕДЕНИИ ДОКУМЕНТА ПО КАКОМУ-ЛИБО РЕГИСТРУ В СЛУЧАЕ, ЕСЛИ У ДОКУМЕНТА УСТАНОВЛЕН АВТОМАТИЧЕСКИЙ РЕЖИМ УПРАВЛЕНИЯ ТРАНЗАКЦИОННЫМИ БЛОКИРОВКАМИ, А У РЕГИСТРА УПРАВЛЯЕМЫЙ (В СВОЙСТВАХ КОНФИГУРАЦИИ ИСПОЛЬЗУЕТСЯ ВАРИАНТ “УПРАВЛЯЕМЫЙ”), ТО ТАКОЕ ПРОВЕДЕНИЕ ПРИВЕДЕТ:
1. к возникновению ошибочной ситуации
2. вся транзакция будет выполнена в автоматическом режиме
3. вся транзакция будет выполнена в управляемом режиме
6.
ipoloskov
125
10.03.16 14:01
Сейчас в теме
(5) alljoke, правильный ответ 1. Но это не вопрос автора
7.
Boneman
268
10.03.16 14:01
Сейчас в теме
да там много особенностей работы,
в книжке желтой “руководство разработчика” подробно описано.
Там и по чтению, и по записи есть особенности работы.
Режим определяется по режиму верхнего уровня,
ну и да, управляемым надо управлять, чтобы не возникало коллизий.
Короче, общая рекомендация везде ставить автомат, чтобы платформа сама разбиралась что ей надо.
А управляемым, можно пользоваться для особых случаев.
8.
mdmdvd
51
10.03.16 15:15
Сейчас в теме
Источник
В этой статье мы разберем схему проведения документа по регистрам в типовых конфигурациях УТ 11, КА 2 и ERP 2.
Для чего это нужно?
- Доработка проведения документов по существующим и новым регистрам встречается на любом серьезном проекте.
- Другой тип задач – разобраться, почему документ формирует те или иные движения.
Нередко в документации написано одно, а по факту всё работает иначе. И приходится уходить в отладку, разбираться с общими модулями и стеком из десятка вложенных вызовов.
Что конкретно будем рассматривать
Мы разберем алгоритмы типовых конфигураций – и научимся быстро отлаживать и дорабатывать универсальные механизмы проведения документов тиражных решений фирмы 1С.
В результате Вы будете знать ответы на вопросы:
- Где находятся алгоритмы формирования движений?
- Как изменить типовое проведение документа?
- Как адаптировать документ для движений по собственному регистру?
Для ответа на поставленные вопросы, без «длительного копания в тоннах типового кода» и быстрого получения результата, необходимо знать схему проведения документа.
А что самое приятное – почти все типовые документы проводятся по одинаковой схеме, неважно, реализация это, приходный кассовый ордер или план закупок.
Поэтому, изучив общую схему, Вы сможете доработать любой документ. 🙂
Схема проведения документа
Укрупненно проведение документа происходит в два этапа, первый этап – подготовка и запись данных, второй этап – контроль отрицательных остатков.
Можно сделать вывод, что в схеме проведения документа используется новая методика контроля остатков, когда сначала формируются движения, а затем проверяется допустимость сформированных движений.
Дополнительно о методиках контроля остатков можно прочитать в другой нашей статье: https://курсы-по-1с.рф/articles/2017-02-12-two-methods-for-inventory-check/
Театр начинается с вешалки, а проведение документа – с процедуры ОбработкаПроведения() модуля объекта. Порядок действий в обработке проведения документа можно представить в виде следующей схемы:
Рисунок 1. Схема действий обработки проведения документа
Рассмотрим детально каждую точку алгоритма проведения на примере документа «Реализация товаров и услуг».
1. Инициализация дополнительных свойств для проведения
Вызывается процедура ИнициализироватьДополнительныеСвойстваДляПроведения() общего модуля ПроведениеСервер, в процедуру кроме ссылки и режима проведения передаются ДополнительныеСвойства.
ДополнительныеСвойства – свойство объекта документ, структура, которая может хранить некоторые значения, связанные с объектом, без изменения объекта.
Свойство доступно для изменения не только в обработке проведения, но и прочих обработчиках модуля объекта, и это свойство доступно, пока существует объект. Например, можно в обработчике перед записью поместить в это свойство некоторые данные и затем воспользоваться ими в обработке проведения.
В вызываемой процедуре инициализируются общие для всех документов структуры (ДляПроведения и ТаблицыДляДвижений), используемые при проведении документов.
Рисунок 2. Дополнительные свойства после инициализации
Один из ключей ТаблицыДляДвижений – структура, которая будет содержать таблицы значений с данными для выполнения движений, или, проще говоря, готовые наборы движений документа.
2. Заполнение дополнительных свойств для проведения
Заполнение дополнительных свойств, сформированных на предыдущем шаге, – ключевая точка схемы проведения документа, именно на этом этапе формируются будущие наборы записей регистров и помещаются в ключ структуры ТаблицыДляДвижений.
Вызывается процедура ИнициализироватьДанныеДокумента() модуля менеджера объекта, в процедуру передается ссылка на объект и ДополнительныеСвойства.
После завершения работы процедуры каждый ключ структуры ТаблицыДляДвижений содержит таблицу значений с будущими движениями регистра.
Рисунок 3. Таблицы движений регистров в структуре дополнительных свойств
Обратите внимание, что ключи структуры названы по шаблону Таблица[Вт][ИмяРегистраДляДвижения], где Вт – признак временной таблицы, а ИмяРегистраДляДвижения – наименование регистра, куда будут записаны движения из таблицы значений.
Процедура инициализации – это несколько шагов, каждый из которых требует рассмотрения.
// Создадим запрос инициализации движений
Запрос = Новый Запрос;
ЗаполнитьПараметрыИнициализации(Запрос, ДокументСсылка);
////////////////////////////////////////////////////////////////////////////
// Сформируем текст запроса
ТекстыЗапроса = Новый СписокЗначений;
ТекстЗапросаТаблицаЗаказыКлиентов(Запрос, ТекстыЗапроса, Регистры);
ТекстЗапросаТаблицаСвободныеОстатки(Запрос, ТекстыЗапроса, Регистры);
ТекстЗапросаТаблицаОбеспечениеЗаказов(Запрос, ТекстыЗапроса, Регистры);
ТекстЗапросаТаблицаТоварыКОтгрузке(Запрос, ТекстыЗапроса, Регистры);
…
////////////////////////////////////////////////////////////////////////////
// Скомпонуем текст запроса и выполним его
ПроведениеСервер.ИнициализироватьТаблицыДляДвижений(Запрос, ТекстыЗапроса,
ДополнительныеСвойства.ТаблицыДляДвижений, Истина);
Рассмотрим детально, что происходит в модуле менеджера объекта при вызове процедуры инициализации.
2.1. Заполнение параметров запроса
ЗаполнитьПараметрыИнициализации(Запрос, ДокументСсылка);
Создается объект запрос и формируются параметры будущего запроса по полученной ссылке на документ. Все параметры запроса, которые пригодятся для исполнения текста запроса, устанавливаются методом УстановитьПараметр().
2.2. Формирование текстов запросов
ТекстЗапросаТаблицаЗаказыКлиентов(Запрос, ТекстыЗапроса, Регистры);
ТекстЗапросаТаблицаСвободныеОстатки(Запрос, ТекстыЗапроса, Регистры);
ТекстЗапросаТаблицаОбеспечениеЗаказов(Запрос, ТекстыЗапроса, Регистры);
ТекстЗапросаТаблицаТоварыКОтгрузке(Запрос, ТекстыЗапроса, Регистры);
…
Создается список значений ТекстыЗапроса, который будет содержать тексты запроса. Для каждого регистра, по которому требуется сформировать движения, вызывается процедура ТекстЗапросаТаблица[ИмяРегистраДляДвижения], где ИмяРегистраДляДвижения – наименование регистра, для которого формируется таблица движений. Текст запроса добавляется в список значений ТекстыЗапроса.
Вот и ответ на вопрос: «Где находятся алгоритмы формирования движений?».
Именно в процедуре ТекстЗапросаТаблица[ИмяРегистраДляДвижения] содержится текст запроса, на основании которого будут сформированы движения документа в конкретный регистр учетной системы.
2.3. Получение результата запроса
Список значений ТекстыЗапроса передается в процедуру ИнициализироватьТаблицыДляДвижений() общего модуля ПроведениеСервер, в процедуре производится компоновка общего текста пакетного запроса по данным списка значений и его выполнение. Затем процедура выгружает результаты запроса в таблицы значений, в свойство ТаблицыДляДвижений, рассмотренное на первом шаге.
3. Подготовка наборов записей документа к записи движений
Будущие движения сформированы и уже хранятся в структуре ДополнительныеСвойства, теперь требуется подготовить регистры к записи. Процедура взводит флаг записи у наборов записей, по которым документ имеет движения, при этом контролируются ИсключаемыеРегистры – регистры, движения по которым формируются не из модуля менеджера документа.
Например, документ реализации формирует движения по регистру «РасчетыСКлиентамиПоДокументам», но не в момент проведения, а в дальнейшем, при помощи регламентного задания, следовательно, регистр «РасчетыСКлиентамиПоДокументам» будет помещен в исключаемые и флагу записи останется присвоенное значение «Ложь».
4. Заполнение движений наборами записей
ЗапасыСервер.ОтразитьСвободныеОстатки(ДополнительныеСвойства, Движения, Отказ);
ЗапасыСервер.ОтразитьОбеспечениеЗаказов(ДополнительныеСвойства, Движения, Отказ);
ЗаказыСервер.ОтразитьТоварыКОтгрузке(ДополнительныеСвойства, Движения, Отказ);
…
На этом этапе для каждого регистра таблицы значений с движениями выгружаются из дополнительных свойств в наборы записей регистров. Загрузка движений по каждому из регистров производится по одинаковому алгоритму, таблица движений из дополнительных свойств загружается в движения регистра.
…
ДвиженияЗаказыКлиентов.Загрузить(ТаблицаЗаказыКлиентов);
Результаты ранее выполненных запросов перенесены из таблиц значений в движения. Осталось только записать движения документа – рассмотрим это на следующем шаге.
5. Запись движений документа
Процедура формирует дополнительные параметры, которые будут доступны в модуле набора записей регистра (подготовка к процедуре контроля), а также выполняет запись движений. Движения записываются в единой последовательности, обеспечивается это тем, что производится запись сразу всей коллекции движений в рамках одной транзакции.
Такой подход к записи движений устраняет возможные взаимоблокировки в информационной базе, так как ресурсы в транзакции имеют одинаковый порядок захвата.
6. Контроль отрицательных остатков
Движения записаны, настало время проверки результатов проведения.
Вызывается процедура СформироватьСписокРегистровДляКонтроля(), свойства объекта дополняются массивом РегистрыДляКонтроля. По каждому из регистров, находящихся в массиве, будет проведен контроль, за контроль отвечает процедура общего модуля:
В случае выявления несоответствий флаг Отказ будет возведен в «Истину» и проведение документа будет завершено с соответствующим диагностическим сообщением.
7. Очистка дополнительных свойств для проведения
Если на предыдущем шаге система не отказала в проведении, тогда выполняется закрытие менеджера временных таблиц в структуре дополнительных свойств документа, используемых при проведении. Сформированные и использованные ранее временные таблицы удаляются, т.к. документ уже практически проведен и нет смысла хранить избыточные данные.
8. Дополнительные действия проведения
Завершающий этап обработки проведения документа. Выполняются дополнительные действия, связанные с объектом, и эти действия должны быть неразрывно связаны с моментом проведения документа, т.е. выполнены в транзакции проведения. Например, для документа реализации это актуализация счета-фактуры (приведение состояния счета-фактуры в соответствие с документом-основанием) и регистрация документа продажи, если по нему необходим счет-фактура.
РегистрыСведений.ТребуетсяОформлениеСчетаФактуры.ОтразитьНеобходимостьОформленияСчетаФактуры(ДополнительныеСвойства, Отказ);
Документ реализации является сложным случаем и имеет дополнительные действия. В простом случае проведения дополнительных действий может и не быть.
Заключение
В статье рассмотрена схема проведения документа по регистрам учета в типовых конфигурациях УТ 11, КА 2 и ERP 2. Подведем краткие итоги:
Как понять алгоритм формирования движений в определенный регистр?
Алгоритм формирования движений содержится в тексте запроса, который расположен в функции ТекстЗапросаТаблица[ИмяРегистраДляДвижения] модуля менеджера объекта.
Как изменить алгоритм формирования движений в определенный регистр?
Требуется разработать свой текст запроса и поместить его вместо существующего в функцию ТекстЗапросаТаблица[ИмяРегистраДляДвижения] модуля менеджера объекта.
Такое решение подходит, если есть возможность изменять конфигурацию или использовать расширение конфигурации. В случае невозможности изменения конфигурации или использования расширений возможно реализовать функционал проведения через подписку на событие.
Как добавить формирование движений в свой новый регистр?
Требуется разработать текст запроса, формирующий движения, и поместить его в новую, нами созданную, функцию ТекстЗапросаТаблица[ИмяСвоегоНовогоРегистра] модуля менеджера объекта.
В модуле объекта добавить вызов процедуры Отразить[ИмяСвоегоНовогоРегистра] в обработке проведения документа. Текст процедуры формируется по аналогии с типовыми процедурами.
Как провести документ только по одному регистру?
Рассмотрим эмпирическую задачу: нам требуется провести документ реализации только по одному регистру накопления, например, «Свободные остатки». Достаточно создать внешнюю обработку и разместить в ней следующий программный код:
Процедура ПерепровестиДокументРеализацииПоРегиструСвободныеОстатки(РеализацияСсылка, Отказ)
РеализацияОбъект = РеализацияСсылка.ПолучитьОбъект();
ПроведениеСервер.ИнициализироватьДополнительныеСвойстваДляПроведения(РеализацияСсылка, РеализацияОбъект.ДополнительныеСвойства, РежимПроведенияДокумента.Неоперативный);
Документы.РеализацияТоваровУслуг.ИнициализироватьДанныеДокумента(РеализацияСсылка, РеализацияОбъект.ДополнительныеСвойства);
ЗапасыСервер.ОтразитьСвободныеОстатки(РеализацияОбъект.ДополнительныеСвойства, РеализацияОбъект.Движения, Отказ);
РеализацияОбъект.Движения.Записать();
КонецПроцедуры // ПерепровестиДокументРеализацииПоРегиструСвободныеОстатки()
Об авторе
PDF-версия статьи для участников группы ВКонтакте
Мы ведем группу ВКонтакте – https://vk.com/kursypo1c.
Если Вы еще не вступили в нее – сделайте это сейчас, и в блоке ниже (на этой странице) появятся ссылки на скачивание материалов.
Если Вы уже участник группы – нужно просто повторно авторизоваться в ВКонтакте, чтобы скрипт Вас узнал. В случае проблем решение стандартное: очистить кэш браузера или подписаться через другой браузер.
Источник