При проведении документов по какому либо регистру в свойствах конфигурации управляемый
Механизм транзакционных блокировок используется для конкурентного доступа пользователей к СУБД.
Транзакция – эта некая неразрывная операция, в ходе которой меняется состояние базы. Это минимальный квант изменений: нельзя сделать пол-транзакции; если транзакция не завершилась, то база откатится в начальное состояние.
Поскольку транзакция захватывает массив данных, возникает нюанс по доступу к этому массиву: например, одна транзакция меняет данные, а другая пробует их прочитать. Результат чтения может быть некорректным, т.к. не включит последних изменений. Поэтому, на уровне СУБД работает изоляция транзакций. Возможны следующие уровни изоляции:
- 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.
user834357
43
17.08.18 10:13
Сейчас в теме
Как вариант – в конфигурации есть отчет “ДвиженияДокумента” с командой “ДвиженияДокумента”, в тип параметра которой надо включить ваш добавленный документ.
Имена отчета и команды в вашей конфигурации могут отличаться
3.
IrinaBasova
17.08.18 10:26
Сейчас в теме
(2)там тип не составной, а ДокументСсылка
4.
azali
17.08.18 10:33
Сейчас в теме
(3)
Если вы добавляете свой документ в конфигурацию, написанной на основе БСП, то для подключения указанного отчета вы должны интегрировать в свой документ подсистему “Подключаемы команды” и все.
А так, почему не показываются движения нужно смотреть в самих регистрах .
5.
accounting_cons
342
17.08.18 10:51
Сейчас в теме
Измерение в регистре должно быть “ведущим”.
6.
IrinaBasova
17.08.18 10:53
Сейчас в теме
8.
accounting_cons
342
17.08.18 10:58
Сейчас в теме
(6)Тогда в этом документе вылезут ссылки на регистр.
9.
IrinaBasova
17.08.18 11:01
Сейчас в теме
(8)а где вылезут, у меня по прежнему не доступна видимость
10.
ducks01
17.08.18 11:07
Сейчас в теме
(9) вы проверяли в режиме приложения основное меню – вид – настройка панели навигации формы
Прикрепленные файлы:
11.
IrinaBasova
17.08.18 11:10
Сейчас в теме
13.
ducks01
17.08.18 11:15
Сейчас в теме
(11) зайдите в форму дока
14.
IrinaBasova
17.08.18 11:17
Сейчас в теме
15.
ducks01
17.08.18 11:18
Сейчас в теме
(14) что за регистр? является ли этот док регистратором ?
16.
IrinaBasova
17.08.18 11:21
Сейчас в теме
17.
ducks01
17.08.18 11:27
Сейчас в теме
(16) надо структуру рс смотреть
18.
IrinaBasova
17.08.18 11:30
Сейчас в теме
(17)не поняла… структуру конфигурации?
19.
ducks01
17.08.18 11:35
Сейчас в теме
(18) ну да регистра сведений, а так гадание на кофейной гуще где вы не указали чего
7.
ben19791010
17.08.18 10:56
Сейчас в теме
список – основной реквизит?
12.
IrinaBasova
17.08.18 11:12
Сейчас в теме
20.
ben19791010
17.08.18 11:56
Сейчас в теме
Прикрепленные файлы:
22.
ben19791010
17.08.18 12:02
Сейчас в теме
(12)
что за список?
у Вас или в голове каша или в заголовке )
показываете скрин динамич.списка а сами пишете проформу документа
21.
DarkUser
17.08.18 11:57
Сейчас в теме
А если просто перезайти в конфигуратор?
23.
KlesAlex
4
22.08.18 11:32
Сейчас в теме
Поясните вы хотите штатное “Показать движения”
Или прямо на форму документа вывести регистр и видеть записи где то в отдельной таблице?
24.
eugenevs59
10.03.20 11:30
Сейчас в теме
В свойствах регистра сведений установите флаг “Использовать стандартные команды”
Источник