|   |   | 
| 
 | Проверка актуальности объекта перед записью в базу | ☑ | ||
|---|---|---|---|---|
| 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) Вроде в БСП идет просто перебор реквизитов по методанным и сравниваются с БД. 
 В типовом механизме регистрации в плане обмена. | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |