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