Имя: Пароль:
1C
1С v8
Как 1С работает с данными.
0 kolts23381
 
27.08.15
18:32
Делаю программку которая работает с базой данных на Qt. Разобрался с MVC (модель-представление-контроллер). Есть стратегия редактирования модели onManualSubmit, то есть добавляемые данные кэшируются до тех пор пока не подтвердишь. Удобно удалять строки. Когда данные берешь с базы удалять строки немного неудобно, они не удалятся полностью пока не сделаешь подтверждение, после которого все данные читаются заново.
А как 1с работает с данными которые получает с базы данных. Прочитанные данные как-то кэшируются, но в таком случае неудобно сохранять данные. Или может при открытии документа запускается транзакция, все данные при любом изменении пишутся в базу, транзакция подтверждается при сохранении и откатывается при отказе.
1 jsmith82
 
27.08.15
18:39
Ну, пусть будет да
2 kolts23381
 
27.08.15
18:44
Я забыл поставить знаки вопроса. Во втором абзаце
3 jsmith82
 
27.08.15
18:49
(2)(1)
4 DTXyupyup
 
27.08.15
18:54
>добавляемые данные кэшируются до тех пор пока не подтвердишь
Как это?
5 0wl
 
27.08.15
18:58
(0) Все описано в "Профессиональная разработка в 1С Предприятие 8", читать про объектные блокировки, а также события "ПередЗаписью" и "ПриЗаписи". Ну и в профайлер можно посмотреть
6 Остап Сулейманович
 
27.08.15
19:25
(0) Не скажу за 1С. Но классика жанра такова:
при чтении создается временный курсор (или вьюха в терминах скуля) и туда складываются выбранные данные. При пессимистической блокировке прочитанные из источника данные сразу блокируются для изменения. (похожим образом себя ведет 77).
В семерке если один пользователь открыл документ, то второй может открыть только в режиме просмотра. В восьмерке ИМХО в режиме автоматических блокировок применяется оптимистическая буферизация. И два пользователя легко и непринужденно могут открыть один объект для редактирования. Вот только при записи получат сообщение о несоответствии объекта записям в базе.
Пользователь изменяет данные во временном курсоре.
После получения команды на запись в БД СУБД либо записывает все изменения и снимает блокировку (при пессимистической буферизации) либо сначала пытается наложить блокировки на изменяемые данные, потом записывает изменения, снимает установленные блокировки и очищает курсоры/вьюхи.
как то так.
7 kolts23381
 
27.08.15
19:49
Насчет вьюхи не подумал. А вообще попробую оттрассировать запросы и посмотреть что происходит
8 Гёдза
 
27.08.15
20:21
Объект на форме - это данные в ПАМЯТИ. в базу попадают только после нажатия кнопки "записать"
9 Гёдза
 
27.08.15
20:22
никаких транзакций при открытии нет, но форма ставит свою 1сную объектную блокировку, защищающую данные от других форм.
Блокировка ставится при начале редактирования данных
10 kolts23381
 
27.08.15
21:07
(8) Когда объект новый согласен. А если не новый?
11 ДенисЧ
 
27.08.15
21:12
(10) ты уже (5) прочитал?
12 Живой Ископаемый
 
27.08.15
22:09
2(10) то что? Объект попадет в память клиента сразу из базы минуя сервер приложений? и о ужас, блокировка не наложится?
13 Dен
 
27.08.15
22:16
> Прочитанные данные как-то кэшируются, но в таком случае неудобно сохранять данные.
> Или может при открытии документа запускается транзакция, все данные при любом изменении пишутся в базу, транзакция подтверждается при сохранении и откатывается при отказе.

Нет ни того, ни другого.
14 kolts23381
 
27.08.15
22:19
(13) А  что есть? Мне не нужно досканально, только общая идея. Какие данные сидят в памяти, в какой момент происходит согласование с базой данных.
15 Dен
 
27.08.15
22:23
(14) При четнии данные помещаются в память, при записи помещатся в базу. Как бы все (чего усложнять?).
16 Живой Ископаемый
 
28.08.15
09:16
(15)Согласование с бд происходит в момент вызова метода Записать() объекта или аналогичного набора записей регистра, после отработки всех событий и подписок данные в БД.
17 Живой Ископаемый
 
28.08.15
09:16
то есть (14)
2 + 2 = 3.9999999999999999999999999999999...