Имя: Пароль:
1C
1С v8
Проверка актуальности объекта перед записью в базу
0 zelenprog
 
28.09.23
08:57
Здравствуйте!

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

Но как убедиться, что в течение работы пользователя с этой таблицей, и на момент записи, контрагенты не были изменены в базе?
Есть какие-нибудь встроенные механизмы платформы, чтобы проверить это?

Как правильно надо сделать в данном случае?
1 Мимохожий Однако
 
28.09.23
09:03
Перед записью проверяй значения всех изменяемых реквизитов и отменяй запись, если нет измененных реквизитов
2 НафНаф
 
28.09.23
09:04
Хранить в вашей таблице версию данных
3 zelenprog
 
28.09.23
09:05
Вроде как в 1С есть оптимистическая блокировка объектов.
На как я понимаю, она работает только когда открывается "карточка" объекта (то есть например элемент справочника).

В моем случае объект не открывается. Просто ТЗ заполняется данными объектов.
4 НафНаф
 
28.09.23
09:07
(3)
0. прочтите в вашу таблицу вместе с данными версию объекта
в момент записи
1. заблокируйте объект
2. прочтите текущую версию объекта в бд
3. сравните с имеющейся на равенство - примите решение
5 zelenprog
 
28.09.23
09:07
(1) >> Перед записью проверяй значения всех изменяемых реквизитов и отменяй запись, если нет измененных реквизитов

А что значит "проверяй значения всех изменяемых реквизитов"?
В таблице пользователь ввел новые значения. Значит, где-то надо сохранить еще и старые значения?
6 zelenprog
 
28.09.23
09:08
(4) >> 0. прочтите в вашу таблицу вместе с данными версию объекта

А как это делается?
7 НафНаф
 
28.09.23
09:09
(6) а как вы данные получили в таблицу, также и версию, это системное поле только для чтения
ВерсияДанных
8 zelenprog
 
28.09.23
09:24
(7) Понял, спасибо, буду разбираться.

А если бы не было поля "ВерсияДанных", то пришлось бы тупо сравнивать старые значения реквизитов и текущие значения в БД. Верно?

Кстати, я тут подумал...
"ВерсияДанных" скорее всего обновляется даже просто при записи объекта, даже если данные у него не менялись. Ну например, пользователь просто открыл контрагента, и нажал кнопку "Записать и закрыть", и ВерсияДанных поменяется.
То есть "ВерсияДанных" говорит о том, что объект записан, но при этом не обязательно, что данные объекта изменились.
Правильно я понимаю?
9 d4rkmesa
 
28.09.23
09:30
(0) Заблокироватьданныедляредактирования , не?
10 zelenprog
 
28.09.23
09:34
(9) Ну допустим в ТЗ заполнены ведения 100 контрагентов.
Пользователь может смотреть на эту таблицу пару часов.
Держать два часа заблокированными 100 элементов справочника - нехорошо.
11 zelenprog
 
28.09.23
09:36
Вот нашел похожую тему:
ВерсияДанных
12 shuhard
 
28.09.23
09:37
(0) ну узнаешь ты, что у половины контрагентов реквизиты изменены и что будет дальше ?
13 YFedor
 
28.09.23
09:52
+(12) Поддерживаю.

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

Происходит проверка на то были ли изменены контрагенты в базе и, вуаля, 80 контрагентов были изменены в базе!

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

Вывод - что-то тут не так в подходе к реализации задачи.
14 zelenprog
 
28.09.23
11:40
(12),(13) Интересное замечание.

По крайней мере это предотвратит порчу данных.
А также пользователь поймет, что не надо долго "спать". И будет вносить изменения небольшими порциями. Например, по 5 контрагентов.
15 НафНаф
 
28.09.23
12:02
(14) огласите накуа все это?
16 shuhard
 
28.09.23
12:18
(14) 100% бред
17 Aleksey
 
28.09.23
12:54
(14) с таким же успехом он может и в карточку из отчета провалиться и там поменять нужные данные. зачем ему посредник, который не гарантирует сохранения результата работы?
18 YFedor
 
28.09.23
13:41
Полагаю там сидит "бабушка" и говорит: я вашего 1с не знаю и знать не хочу, всегда вносила данные в экселе - сделайте мне так же в этом вашем 1с
19 rozer76
 
30.09.23
10:41
(9) это пессимистическая блокировка никак не заблокирует от программной модификации объекта. Рабочий метод наверно только с ВерсияДанных ну а если "загоняться" детально по реквивизитам тогда смотреть в сторону Версионирования.
21 OneMan1
 
04.10.23
17:10
(0) Вроде в БСП идет просто перебор реквизитов по методанным и сравниваются с БД.
В типовом механизме регистрации в плане обмена.
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший