Автор Тема: Блокировки и режим разделения итогов регистров  (Прочитано 38174 раз)

0 Пользователей и 1 Гость просматривают эту тему.

nodalt

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Копейкин Дмитрий Николаевич
Возник вопрос по поводу установки блокировок на регистры накопления и бухгалтерии, после того как в лекциях Павла Белоусова увидел такой вот код:

 
Code
Движения.ОстаткиНоменклатуры.БлокироватьДляИзменения = Истина;  
 Движения.ОстаткиНоменклатуры.Записать();        
          
 Блокирока = Новый БлокировкаДанных;
 ЭлементБлокировки = Блокирока.Добавить("РегистрНакопления.ОстаткиНоменклатуры");
 ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;  
 ЭлементБлокировки.ИсточникДанных = СписокНоменклатуры;
 ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Номенклатура","Номенклатура");
 Блокирока.Заблокировать();
 

 Разумеется это применительно к регистру накопления у которого включено свойство «Разрешить разделение итогов».
 Код «вырван» из обработки проведения расходной накладной, в которой сначала блокируются данные, а потом читаются остатки, себестоимость и происходит списание.

 Кто хорошо знаком с блокировками, объясните пожалуйста зачем здесь два приёма блокировки?
 Читал про блокировки статьи на ИТС и с документацией знаком, но то ли давно это было, то ли просто запутался…
 Хочу ещё раз от знающих людей услышать какой метод и когда надо использовать чтобы сравнить со своими представлениями о блокировках.

sv_mikh

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Михайлов Сергей Валерианович
Блокировки и режим разделения итогов регистров
« Ответ #1 : Апрель 18, 2012, 11:47:52 am »
Лично мне не понятно зачем это нужно.
 
Quote (nodalt)
Движения.ОстаткиНоменклатуры.БлокироватьДляИзменения = Истина;  
 Движения.ОстаткиНоменклатуры.Записать();        

 Здесь очищаются движения документа по ОстаткиНоменклатуры и устанавливается блокировка на пустой набор измерений. Т.е. ничего не блокируется. Зачем?
 Ну а дальше обычная управляемая блокировка на указанные поля пространства блокировок.
 Кстати сказать у NikZagVit (могу ошибаться) были такие последовательности.. Я тоже удивлялся к чему бы это.


nodalt

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Копейкин Дмитрий Николаевич
Блокировки и режим разделения итогов регистров
« Ответ #2 : Апрель 18, 2012, 11:53:10 am »
sv_mikh,
 В общем, я сам так понимаю ...
 Метод Записать() очищает старые движения документа и как вы сказали блокирует пустой набор, но одновременно с этим ещё игнорирует режим разделение итогов.
 Затем накладывается, так сказать "ручная", блокировка на нужные данные.
 В этом случае всё логично.
 Но в литературе я читал, что при ручной блокировке режим разделения итогов тоже игнорируется. Выходит врали?

crabzzy

  • Новичок
  • *
  • Сообщений: 6
  • ФИО: Alexander
Блокировки и режим разделения итогов регистров
« Ответ #3 : Апрель 18, 2012, 01:02:03 pm »
я склоняюсь к тому, что строки

 
Code
Движения.ОстаткиНоменклатуры.БлокироватьДляИзменения = Истина;    
 Движения.ОстаткиНоменклатуры.Записать();    
 


 не нужны, если дальше ручная идёт блокировка
« Последнее редактирование: Апрель 18, 2012, 01:03:42 pm от Alexander »

nodalt

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Копейкин Дмитрий Николаевич
Блокировки и режим разделения итогов регистров
« Ответ #4 : Апрель 18, 2012, 01:14:10 pm »
Я тоже всегда к этому склонялся, но боюсь что авторитет и опыт Белоусова рушат эти склонности. Не знаю теперь что думать. Может кто-нибудь прояснит картину окончательно и бесповоротно?

sv_mikh

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Михайлов Сергей Валерианович
Блокировки и режим разделения итогов регистров
« Ответ #5 : Апрель 18, 2012, 01:32:25 pm »
Quote (nodalt)
о в литературе я читал, что при ручной блокировке режим разделения итогов тоже игнорируется

 Приведите ссылку. Самому интересно.

Добавлено (18.04.2012, 13:32)
---------------------------------------------

Quote (nodalt)
в лекциях Павла Белоусова увидел такой вот код:

 Что за лекции, можно ли их увидеть. Может это подстава? Такое реально. Методичка к "Сквозной пример решения задач" содержит не одну подставу и это сделана как говорят специально...

nodalt

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Копейкин Дмитрий Николаевич
Блокировки и режим разделения итогов регистров
« Ответ #6 : Апрель 18, 2012, 03:04:31 pm »
sv_mikh,
Quote (sv_mikh)
в литературе я читал, что при ручной блокировке режим разделения итогов тоже игнорируется

 по этому поводу ссылку дать не могу, т.к. читал всего много и не только в официальной документации - так что здесь возможно у меня просто сложилось общее мнение благодаря как вы говорите какой-нибудь "подставе".
 А лекции - это "Конфигурирование платформы "1С:Предприятие 8.2" (курс подготовки к экзамену "1С:Специалист" по платформе "1С:Предприятие 8.2"). Дело в том, что в конце прошлого года был на курсе Павла Белоусова, посвященному аттестации 1С:Специалист по платформе (очень понравилось). На тот момент задачи ещё не решал и вопросов не возникло по этому поводу и вроде бы всё было понятно. К сожалению после этого пришлось забросить подготовку а прорешивать задачи все подряд и как следует стал только сейчас.
 Вот Gyd на этот счет мудрее поступает - сначала порешал, а теперь может вопросы задать и до конца всё прояснить smile

Gyd

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Олег
Блокировки и режим разделения итогов регистров
« Ответ #7 : Апрель 18, 2012, 04:39:15 pm »
У меня уже был опыт "сначала курсы потом задачи", в этот раз решил наоборот попробовать. Из минусов думаю только один: до всего приходится доходить своим умом, что вызывает задержки по времени.

 Был еще вариант пройти каждую компоненту отдельно на дистанционных курсах УЦ-3. Но что-то не захотелось, хотя там неплохой уровень подготовки дают. Думаю таким образом я бы уже давно сдал smile но решил всё сам пройти.

nodalt

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Копейкин Дмитрий Николаевич
Блокировки и режим разделения итогов регистров
« Ответ #8 : Апрель 19, 2012, 09:07:58 am »
sv_mikh, crabzzy, я разобрался наконец с блокировками.
 Привожу фрагмент моей переписки на другом форуме. Человек очень доходчиво объяснил этот момент =)

 Я:
 Возник вопрос по поводу установки блокировок на регистры накопления и бухгалтерии, после того как в лекциях Павла Белоусова увидел такой вот код:
 
Code
Движения.ОстаткиНоменклатуры.БлокироватьДляИзменения = Истина;    
 Движения.ОстаткиНоменклатуры.Записать();           

 Блокирока = Новый БлокировкаДанных;   
 ЭлементБлокировки = Блокирока.Добавить("РегистрНакопления.ОстаткиНоменклатуры");   
 ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;    
 ЭлементБлокировки.ИсточникДанных = СписокНоменклатуры;   
 ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Номенклатура","Номенклатура");   
 Блокирока.Заблокировать();

 ...

 Ответ:
 При записи "пустого" набора движений нужно блокировать записи по "Удаляемым" данным (если они были в случае перепроведения), чтобы гарантировать при откате транзакции неизменность итогов

 Я:
 Честно говоря, не понял. Не могли бы вы на примере объяснить?
 Я себе так представляю:
 На складе Основной есть Товар1 в количестве 1 шт.
 Расходной накладной мы списываем этот товар в количестве 1 шт. со склада Основной. Всё хорошо проводится.
 При перепроведении у нас сначала записывается пустой набор в регистр, т.е. очищаем старые движения и на складе Основной опять появляется 1 шт.
 Затем устанавливаем ручную блокировку на склад Основной и Товар1.
 Читаем остатки - получаем остаток 1 шт.
 И списываем. Опять всё хорошо проводится.
 Если мы при перепроведении списываем не 1 шт. а больше, то после чтения остатков понимаем что не хватает и отказываемся от проведения документа.
 Т.е. в итоге документ не проведен, в остатке 1 шт. Товара1 на складе Основной. Опять всё правильно.
 Зачем тут
 
Code
БлокироватьДляИзменения

 ?
 Может я неправильно рассуждаю?

 Ответ:
 Ок, а как тебе такая версия:
 Допустим: в уже имеющемся проведённом документе "Реализация" продан товар "стул" в количестве одна штука, при этом на складе их ноль штук.
 Затем пользователь заходит в документ и меняет, "стул" на "кресло". Далее нажимает кнопку провести, и запускается обработка проведения.
 В момент выполнения строки: Записать() движение в регистре с позицией "стул" очищается и запишется в базу данных, в результате на остатке на складе появится одна позиция "стул".
 Далее внутри тойже обработки проведения наложится блокировка на "кресло" и начнётся транзакция.
 При этом, по скольку на складе появился один незаблокированный "стул" на остатке, другой пользователь в это время возьмёт и побыстрому проведёт, этот "стул" в другом документе "реализация" и на складе станет ноль позицый "стул".
 Затем уже в нашем документе, при попытке списать заменённый стул на кресло, произошла какая-то ошибка, и мы решили откатить транзакцию. т.е. "стул" возвращается на место.
 И в результате таких действий, стул будет в количестве "минус один" на складе.
 Вот для того, чтобы такого не произошло, нужно заблокировать, не только новые позиции, но и старые которые были в документе, до момента окончания текущей транзакции записи, до тех пор, пока мы не будем точно уверены, что не планируется её откат.
 PS: надеюсь, так понятно, для чего нужна доп. блокировка старых позиций документа? :)))

sv_mikh

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Михайлов Сергей Валерианович
Блокировки и режим разделения итогов регистров
« Ответ #9 : Апрель 19, 2012, 09:14:54 am »
Quote (nodalt)
Далее внутри тойже обработки проведения наложится блокировка на "кресло" и начнётся транзакция.

 Обработка проведения уже открывается в транзакции...

 И все же... Записать() в начале записывает именно ПУСТОЙ набор данных. А не заполненный старыми движениями... А если он пустой то и блокировка накладывается на ПУСТОЙ набор данных по его пустым измерениям... Как же заблокируется стул, если его там нет???

nodalt

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Копейкин Дмитрий Николаевич
Блокировки и режим разделения итогов регистров
« Ответ #10 : Апрель 19, 2012, 09:44:57 am »
Quote (sv_mikh)
Обработка проведения уже открывается в транзакции...

 это да.

 
Quote (sv_mikh)
Как же заблокируется стул, если его там нет???

 Записывается пустой набор, но с отбором по РЕГИСТРАТОРУ!
 Соответсвенно заблокируются все записи документа.

sv_mikh

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Михайлов Сергей Валерианович
Блокировки и режим разделения итогов регистров
« Ответ #11 : Апрель 19, 2012, 09:47:16 am »
Quote (nodalt)
Записывается пустой набор, но с отбором по РЕГИСТРАТОРУ!
 Соответсвенно заблокируются все записи документа.

 Да заблокируются, но причем тут стулья? В пустом наборе нет записей.
« Последнее редактирование: Апрель 19, 2012, 09:47:46 am от Михайлов Сергей Валерианович »

nodalt

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Копейкин Дмитрий Николаевич
Блокировки и режим разделения итогов регистров
« Ответ #12 : Апрель 19, 2012, 10:17:26 am »
Мы наверное не понимаем друг друга ...
 Объясню как я вижу ситуацию.
 Заблокируется конечно не конкретный стул во всем регистре, так чтобы его нельзя было продавать, а заблокируется запись в регистре с полем Регистратор и продаваемым количеством, чтобы другой пользователь смог продать не больше чем есть остатков в регистре. Т.е. если до перепроведения было 3 стула в остатке, а в документе мы продавали 2, то другой пользователь во время работы нашей транзакции, как бы она не закончилась, сможет продать только 1 стул.

Добавлено (19.04.2012, 10:17)
---------------------------------------------
В общем суть в том, что изначально код правильный и Свойство БлокироватьДляИзменения здесь нужно устанавливать.

« Последнее редактирование: Апрель 19, 2012, 10:14:55 am от Копейкин Дмитрий Николаевич »

sv_mikh

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Михайлов Сергей Валерианович
Блокировки и режим разделения итогов регистров
« Ответ #13 : Апрель 19, 2012, 10:31:32 am »
Quote (nodalt)
В общем суть в том, что изначально код правильный и Свойство БлокироватьДляИзменения здесь нужно устанавливать.

 Пока не убедили. Нужны более весомые объяснения, чем ответ в другом форуме.

 Заглянем в сборник задач. Конкретно в базу с решенным примером. Документ РасходнаяНакладная, модуль проведения, начало:

 
Code
Процедура ОбработкаПроведения(Отказ, Режим)
  //Установим флаг возможности записи
  Движения.ОстаткиНоменклатуры.Записывать = Истина;
  Движения.Продажи.Записывать = Истина;
  Движения.Управленческий.Записывать = Истина;
   
  // Получим данные по учетной политике из периодического регистра сведений
  ТекущаяПолитика = РегистрыСведений.УчетнаяПолитика.ПолучитьПоследнее(Дата).Значение;
  Если ТекущаяПолитика = Перечисления.УчетнаяПолитика.ЛИФО Тогда
   ПорядокПартий = "УБЫВ";
  Иначе
   ПорядокПартий = "ВОЗР";
  КонецЕсли;
   
  //Установим исключительную блокировку на те записи регистров, по которым осуществляется чтение, а потом - запись
  Блокировка = Новый БлокировкаДанных;
  ЭлементБлокировки = Блокировка.Добавить("РегистрНакопления.ОстаткиНоменклатуры");
  ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
  ЭлементБлокировки.ИсточникДанных = СписокНоменклатуры;
  ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Номенклатура", "Номенклатура");
    
  ЭлементБлокировки = Блокировка.Добавить("РегистрБухгалтерии.Управленческий");
  ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
  ЭлементБлокировки.ИсточникДанных = СписокНоменклатуры;
  ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Субконто1", "Номенклатура");
 
      

 Насколько я понимаю, автор написанного Павел Белоусов. Мне кажется комментарии излишне.
« Последнее редактирование: Апрель 19, 2012, 10:36:25 am от Михайлов Сергей Валерианович »

nodalt

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Копейкин Дмитрий Николаевич
Блокировки и режим разделения итогов регистров
« Ответ #14 : Апрель 19, 2012, 10:40:40 am »
Дело конечно ваше. Я не убеждаю - вдруг окажется всё это неправдой, я же не разработчик платформы smile
 Моя цель - узнать истину. Мы приводим аргументы, вы - свои, я - свои. Помоему я привел достаточно примеров и аргументов, кроме того это отрывок кода из лекций преподавателя Учебного центра 1С. Кому как не им верить? smile

sv_mikh

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Михайлов Сергей Валерианович
Блокировки и режим разделения итогов регистров
« Ответ #15 : Апрель 19, 2012, 10:44:43 am »
Quote (nodalt)
Дело конечно ваше. Я не убеждаю - вдруг окажется всё это неправдой, я же не разработчик платформы
 Моя цель - узнать истину. Мы приводим аргументы, вы - свои, я - свои. Помоему я привел достаточно примеров и аргументов, кроме того это отрывок кода из лекций преподавателя Учебного центра 1С. Кому как не им верить?

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

nodalt

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Копейкин Дмитрий Николаевич
Блокировки и режим разделения итогов регистров
« Ответ #16 : Апрель 19, 2012, 10:49:03 am »
Основная проблема в том, что нет единого достоверного информационного ресурса.
 Бывает, что со временем решения пересматриваются и преподносятся по другому даже одним и тем же специалистом.
 
Quote (sv_mikh)
За время подготовки с таким вариантом очистки движений я столкнулся впервые

 Да я сам всегда подругому решал. Так тоже никогда не делал smile Это и обидно, что не знаешь как правильно в конечном счете.

crabzzy

  • Новичок
  • *
  • Сообщений: 6
  • ФИО: Alexander
Блокировки и режим разделения итогов регистров
« Ответ #17 : Апрель 19, 2012, 12:00:54 pm »
nodalt, sv_mikh,
 Ура!!! Я, кажется, нашёл.

 http://partners.v8.1c.ru/forum/thread.jsp?id=724841#739246

 В примере, прилагаемом к новой книге по 8.2, описывается новая конструкция на стр. 320:

 Движения.ТоварныеЗапасы.БлокироватьДляИзменения = Истина;

 Аналогично ли это полной блокировке пространства имен блокировки "РегистрНакопления.ТоварныеЗапасы"? Если нет, то в чем отличие?
 Ответить«« Действия

 Re: Нужно пояснение по свойству набора записей БлокироватьДляИзменения    30.09.2009 22:02 Нуралиев Сергей (1С, Москва)
 725084
 Это свойство обеспечивает блокировку в пространстве регистра по тем комбинациям измерений, которые записываются в наборе записей.

 Смысл в том, что если заблокировать нужно именно те комбинации, по которым записываются записи, то можно не использовать объект БлокировкаДанных, а использовать это свойство. Это существенно сокращает код (вместо формирования состава блокировки устанавливаем одно свойство) и уменьшает количество действий платформы.

 Это применяется в методике, когда проверка остатков выполняется после записи движений. Тогда мы сначала записываем движения с установкой БлокироватьДляИзменения, а потом проверяем остатки запросом.

 Можно посмотреть в демо-конфигурации в документе РасходТовара.

 ========

 Re: Нужно пояснение по свойству набора записей БлокироватьДляИзменения    12.11.2009 21:35 Нуралиев Сергей (1С, Москва)
 2,0 739246
 Логика такая (случая для управляемого режима блокировок и включенного
 в метаданных и в ИБ разделителях итогов):

 Если свойство БлокироватьДляИзменения Ложь, то два набора с одними комбинациями измерениями могут записываться в двух параллельных транзакциях (целостность хранимых итогов обеспечивается за счет использования разделителя). Так же как и в 8.1

 Если свойство БлокироватьДляИзменения Истина, то два таких набора не записываются параллельно и установка блокировки в языке в другой транзакции по этим же комбинациям тоже не сможет быть выполнена.

 То есть:
 - разделитель итогов обеспечивает отсутствие необходимости
 блокировки при записи наборов
 - а свойство БлокироватьДляИзменения заменяет явный вызов блокировки из языка,
 если заблокировать нужно именно все комбинации, которые есть
 в наборе записей

 Добавлено (19.04.2012, 11:57)
 ---------------------------------------------
 то есть имхо не нужно писать
 ...БлокироватьДляИзменения = Истина;
 перед записью пустого набора

 Добавлено (19.04.2012, 12:00)
 ---------------------------------------------
 Несколько ссылок на kb.1c.ru:

 Типичные причины неоптимальной работы запросов и методы оптимизации:
 http://kb.1c.ru/articleView.jsp?id=44#vtable_join

 Типичные причины избыточных блокировок и методы оптимизации:
 http://kb.1c.ru/articleView.jsp?id=45

 Блокировки данных в 1С:Предприятии 8
 Автор: Белоусов Павел (Альтер Лого, Москва)
 http://kb.1c.ru/articleView.jsp?id=30
« Последнее редактирование: Апрель 19, 2012, 12:01:38 pm от Alexander »

sv_mikh

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Михайлов Сергей Валерианович
Блокировки и режим разделения итогов регистров
« Ответ #18 : Апрель 19, 2012, 12:09:40 pm »
Quote (crabzzy)
то есть имхо не нужно писать
 ...БлокироватьДляИзменения = Истина;
 перед записью пустого набора

 Вроде как с этого и начали. Комбинация Движения.ОстаткиНоменклатуры.БлокироватьДляИзменения = Истина; Движения.ОстаткиНоменклатуры.Записть() бессмыслена?

crabzzy

  • Новичок
  • *
  • Сообщений: 6
  • ФИО: Alexander
Блокировки и режим разделения итогов регистров
« Ответ #19 : Апрель 19, 2012, 12:24:02 pm »
sv_mikh
 ну вроде да, установление флажка бессмысленно,

 а пустой набор, да, может быть, надо писать (если в задаче требуется)
 ну это я для тех, кто заглянет, написал
« Последнее редактирование: Апрель 19, 2012, 12:24:18 pm от Alexander »

Gyd

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Олег
Блокировки и режим разделения итогов регистров
« Ответ #20 : Апрель 19, 2012, 01:03:51 pm »
В общем понятно, что ничего не понятно smile ладно, скоро выясним.

nodalt

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Копейкин Дмитрий Николаевич
Блокировки и режим разделения итогов регистров
« Ответ #21 : Апрель 19, 2012, 02:28:25 pm »
crabzzy, спасибо за информацию, и всё что вы написали это верно, и всё это используется (в своих конкретных случаях - своя блокировка).
 Тем не менее, как быть в ситуации описанной мною, точнее моим аппонентом в сообщении №9? Я думаю, что изначальный код правильный. Нам же надо как-то блокировать итоги по "старым" записям документа в момент перепроведения, чтобы регистр не ушёл в минус.
 В общем Gyd, будь добр, проясни эту ситуацию, будем очень признательны smile
« Последнее редактирование: Апрель 19, 2012, 02:30:43 pm от Копейкин Дмитрий Николаевич »

crabzzy

  • Новичок
  • *
  • Сообщений: 6
  • ФИО: Alexander
Блокировки и режим разделения итогов регистров
« Ответ #22 : Апрель 19, 2012, 02:33:38 pm »
nodalt
 я думаю, пока транзакция (проведение) не закончится,
 таблица итогов не будет пересчитана, в смысле любые параллельные транзакции обращаясь к итогам, не увидят тех ресурсов, которые освободились при записи пустого набора данных (того стула свободного не увидят они). Поэтому можно не блокировать на пустой набор записей (ведь измерений там нет и управляемая блокировка наложена не будет), то есть мне кажется, оппонент на другом форуме (не partners.v8.1c.ru, случайно?) не прав.
« Последнее редактирование: Апрель 19, 2012, 02:33:56 pm от Alexander »

nodalt

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Копейкин Дмитрий Николаевич
Блокировки и режим разделения итогов регистров
« Ответ #23 : Апрель 19, 2012, 03:10:30 pm »
Quote (crabzzy)
таблица итогов не будет пересчитана, в смысле любые параллельные транзакции обращаясь к итогам, не увидят тех ресурсов

 Как это не увидят? Какой смысл тогда по вашему, по новой методике проведения сначала писать движения, а потом проверять не ушли ли мы в минус.
 Если мы при перепроведении поменяем номенклатуру на другую, то старая никак не будет заблокирована и её можно будет списать.

crabzzy

  • Новичок
  • *
  • Сообщений: 6
  • ФИО: Alexander
Блокировки и режим разделения итогов регистров
« Ответ #24 : Апрель 19, 2012, 05:14:40 pm »
мне кажется, если данные были в базе до начала транзакции, то их видно всем транзакциям, даже параллельным,

 поэтому если было 10 гвоздей и начали их продавать две транзакции почти одновременно, то мы ставим упр.блокировку (или БлокироватьДляИзменения = Истина, если есть что-то в наборе данных Движения.<>), чтобы одна из них не выполняла свои действия, и "забила" на 10 гвоздей, т.к. первая транзакция ещё не закончила работу с ними

 а если допустим было 0 гвоздей до начала обоих транзакций (проведений), то первая транзакция решила продать вместо гвоздей гайки и поставила блокировку на гайки, и очистила движения по гвоздям и продолжила работу, а вторая транзакция так и видит 0 гвоздей и ничего сделать с ними не может, то есть пока первая транзакция не закончится успешно или не успешно, если успешно, то увидит сколько-то гвоздей, которые ошибочно были проданы вместо гаек
« Последнее редактирование: Апрель 19, 2012, 05:15:35 pm от Alexander »

sv_mikh

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Михайлов Сергей Валерианович
Блокировки и режим разделения итогов регистров
« Ответ #25 : Апрель 19, 2012, 05:17:24 pm »
Quote (crabzzy)
мне кажется, если данные были в базе до начала транзакции, то их видно всем транзакциям, даже параллельным,

 поэтому если было 10 гвоздей и начали их продавать две транзакции почти одновременно, то мы ставим упр.блокировку (или БлокироватьДляИзменения = Истина, если есть что-то в наборе данных Движения.<>), чтобы одна из них не выполняла свои действия, и "забила" на 10 гвоздей, т.к. первая транзакция ещё не закончила работу с ними

 а если допустим было 0 гвоздей до начала обоих транзакций (проведений), то первая транзакция решила продать вместо гвоздей гайки и поставила блокировку на гайки, и очистила движения по гвоздям и продолжила работу, а вторая транзакция так и видит 0 гвоздей и ничего сделать с ними не может, то есть пока первая транзакция не закончится успешно или не успешно, если успешно, то увидит сколько-то гвоздей, которые ошибочно были проданы вместо гаек


 В УЦ3 у Дмитрия Гончарова есть курс по всем этим делам... Тут "мне кажется" не поможет. Нужно из первоисточников узнавать.

crabzzy

  • Новичок
  • *
  • Сообщений: 6
  • ФИО: Alexander
Блокировки и режим разделения итогов регистров
« Ответ #26 : Апрель 20, 2012, 12:31:51 pm »
новая ссылка по обсуждению

 http://devtrainingforum.v8.1c.ru/forum/thread.jsp?id=593686

sv_mikh

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Михайлов Сергей Валерианович
Блокировки и режим разделения итогов регистров
« Ответ #27 : Апрель 20, 2012, 12:54:52 pm »
Quote (crabzzy)
новая ссылка по обсуждению

 http://devtrainingforum.v8.1c.ru/forum/thread.jsp?id=593686

 Нда... Процесс познания неостановим... Все ли мы знаем? Это знает только Сергей Нуралиев.

nodalt

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Копейкин Дмитрий Николаевич
Блокировки и режим разделения итогов регистров
« Ответ #28 : Апрель 20, 2012, 03:51:33 pm »
crabzzy, раскопали мою переписку ))) Это вы продолжили тему в той ветке?
« Последнее редактирование: Апрель 20, 2012, 03:52:04 pm от Копейкин Дмитрий Николаевич »

old_guest

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Гость
Блокировки и режим разделения итогов регистров
« Ответ #29 : Апрель 23, 2012, 05:04:24 pm »
На сдаче экзамена оба экзаменатора за этот флаг драли. Если в регистре стоит разделение итогов - при очистки движений нужно флаг возводить в ИСТИНА. До экзамена такой же ответ получил от Гилёва ( но без объяснений) =(((. Белоусов объяснял так же, как nodalt .

 Как всё это выглядит технически - НЕПОНЯТНО! wacko Надо смоделировать ситуацию.

nodalt

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Копейкин Дмитрий Николаевич
Блокировки и режим разделения итогов регистров
« Ответ #30 : Апрель 23, 2012, 05:30:17 pm »
safer, спасибо за информацию

crabzzy

  • Новичок
  • *
  • Сообщений: 6
  • ФИО: Alexander
Блокировки и режим разделения итогов регистров
« Ответ #31 : Апрель 26, 2012, 04:37:04 pm »
nodalt, не, там не я (не fisher)

 спасибо за инфу! надо всё же так писать!

gosn1ck

  • Новичок
  • *
  • Сообщений: 5
  • ФИО: gosn1ck
Блокировки и режим разделения итогов регистров
« Ответ #32 : Апрель 27, 2012, 02:05:24 pm »
вот что говорит по этому поводу Павел Чистов с тренинга http://mg.spec8.ru
 1) если сначала читаем данные из регистра, то нужно использовать объект "Блокировка Данных"
 2) если сначала пишем записи в регистр, а потом анализируем регистр - можно использовать "Блокировать изменения" - далее система сама поймёт, что и когда ей нужно заблокировать в регистре

sv_mikh

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Михайлов Сергей Валерианович
Блокировки и режим разделения итогов регистров
« Ответ #33 : Апрель 27, 2012, 02:27:45 pm »
Quote (gosn1ck)
вот что говорит по этому поводу Павел Чистов с тренинга http://mg.spec8.ru
 1) если сначала читаем данные из регистра, то нужно использовать объект "Блокировка Данных"
 2) если сначала пишем записи в регистр, а потом анализируем регистр - можно использовать "Блокировать изменения" - далее система сама поймёт, что и когда ей нужно заблокировать в регистре

 С этого то мы и начинали...

ТатьянаЯ

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Зубкова Татьяна Юрьевна
sv_mikh, я посмотрела у тебя в решении вот такие строки:
       БД = Новый БлокировкаДанных;
       
       ЭлементБД = БД.Добавить("РегистрНакопления.ОстаткиНоменклатуры");
       ЭлементБД.ИсточникДанных = СписокНоменклатуры;
       ЭлементБД.ИспользоватьИзИсточникаДанных("Номенклатура", "Номенклатура");
       ЭлементБД.УстановитьЗначение("Подразделние", Справочники.Подразделения.ОтделЗакупок);
       
       ЭлементБД = БД.Добавить("РегистрНакопления.ОстаткиНоменклатуры");
       ЭлементБД.ИсточникДанных = СписокНоменклатуры;
       ЭлементБД.ИспользоватьИзИсточникаДанных("Номенклатура", "Номенклатура");
       ЭлементБД.УстановитьЗначение("Подразделние", Подразделение);
       
       БД.Заблокировать();

 У меня задача была другая, но я тоже написала два раза БлокировкаДанных, мне в результате в списке ошибок написали "При описании блокировок каждое пространство блокируется индивидуально". Что им надо было написать?

sv_mikh

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Михайлов Сергей Валерианович
Quote (ТатьянаЯ)
У меня задача была другая, но я тоже написала два раза БлокировкаДанных, мне в результате в списке ошибок написали "При описании блокировок каждое пространство блокируется индивидуально". Что им надо было написать?

 sad Не могу ничего сказать.. Мне казалось, что это вполне естественно. Возможно нужно было скомпоновать все необходимые данные в результат запроса. Я не сталкивался с такой ошибкой. Скажу больше, что в дистанционном тренинге по опер.учету от УЦ3 Андрей Габец использовал в аналогичной ситуации подобную же конструкцию.

nodalt

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Копейкин Дмитрий Николаевич
ТатьянаЯ,
 пространство блокировок получается при использовании метода
Code
Добавить()

 В вашем коде переменной
Code
ЭлементБД
присваивается одно и тоже пространство два раза и описывается два раза. Таким образом, на самом деле заблокируется только вторая часть. Надо было во второй части использовать другую переменную, например
Code
ЭлементБД_1
.
 Однако, я могу ошибаться ... Движения записываются по такому же принципу и прокатывает ...
« Последнее редактирование: Май 19, 2012, 09:50:14 am от Копейкин Дмитрий Николаевич »

shlaev

  • Новичок
  • *
  • Сообщений: 1
  • ФИО: Kirill
Поставил MSSQL, решил опробовать блокировки, включил везде управляемый режим и поставил использовать разделение итогов у регистра остатков. В расходной накладной написал такой код:

 
Код
Для Каждого Строка Из Товары Цикл

    Движение = Движения.Остатки.ДобавитьРасход();

    Движение.Период = Дата;

    Движение.Номенклатура = Строка.Номенклатура;

    Движение.Количество = Строка.Количество;

   КонецЦикла;

 Движения.Остатки.Записать();


 В конце обработки проведения поставил точку останова и зациклил один сеанс. (Форма документа не открывал, а провел из списка). Запустил другой сеанс и провел документ с таким же товаров (тоже из списка документов). Второй документ провелся. Но, если проводить оба документа из формы документа, то при попытке проведения второго документа, вылазит ошибка блокировки транзакции. Почему она вылазит только при проведении из формы? Какие там блокировки и на что накладываются?

 Добавлено (20.05.2014, 23:34)
 ---------------------------------------------
 Второй вопрос. Тот же самый код. Так же зацикливаю один документ в конце обработки проведения. Отменяю проведение другого документа - вылазит опять конфликт блокировок. Что там при отмене проведения такого конфликтует, если никаких блокировок небыло наложено?

 А в файловом варианте как блокировать? Ставить режим блокировок "автоматический" и использовать запросы с инструкцией "ДЛЯ ИЗМЕНЕНИЯ"?
« Последнее редактирование: Май 21, 2014, 12:37:56 am от Kirill »

unf13

  • Пользователь
  • **
  • Сообщений: 23
  • ФИО: unf13
Блокировки и режим разделения итогов регистров
« Ответ #38 : Сентябрь 10, 2014, 04:02:26 pm »
Цитата
На сдаче экзамена оба экзаменатора за этот флаг драли. Если в регистре стоит разделение итогов - при очистки движений нужно флаг возводить в ИСТИНА. До экзамена такой же ответ получил от Гилёва ( но без объяснений) =(((. Белоусов объяснял так же, как nodalt .
 Ценная инфа, спасибо.  Получается, что несмотря на то,что мы при очистке движений записываем пустой набор и в нем соответственно, не содержатся комбинации измерений для блокировки, мы все равно используем флаг БлокироватьДляИзменения  с целью отключения разделителя итогов по всем записям с отбором по регистратору, как писал nodalt:

 
Цитата
заблокируется запись в регистре с полем Регистратор и продаваемым количеством, чтобы другой пользователь смог продать не больше чем есть остатков в регистре. Т.е. если до перепроведения было 3 стула в остатке, а в документе мы продавали 2, то другой пользователь во время работы нашей транзакции, как бы она не закончилась, сможет продать только 1 стул.Добавлено (19.04.2012, 10:17)
 ---------------------------------------------
 В общем суть в том, что изначально код правильный и Свойство БлокироватьДляИзменения здесь нужно устанавливать. 

Добавлено (09.09.2014, 19:30)
---------------------------------------------
А раньше я все не понимал, ведь набор то пустой, записей для блокировки НЕТ.  Но отбор по регистратору присутствует и плюс отключаем разделитель.

Добавлено (10.09.2014, 16:02)
---------------------------------------------
Коллеги, на тему топика есть "маст-рид" статья Павал Чистова: http://1c.chistov.pro/2013/07/blog-post_25.html

 Интересно,что в качестве момента получения итогов для второго запроса Павел использует МоментВремени():

 

Код
Запрос.УстановитьПараметр("ТочкаИтоговДляСебестоимости", МоментВремени());


 хотя, когда проходил курс у него, он использовал такую конструкцию (которую, кстати, часто вижу в в выкладываемых на форуме решениях задач):

 
Код
Запрос.УстановитьПараметр("ТочкаИтоговДляСебестоимости", ?(Режим = РежимПроведенияДокумента.Оперативный,Неопределено,МоментВремени()));

 т.е. в случае оперативного проведения раньше не использовался момент времени,чтобы взять последние актуальные итоги.

 Как считаете, в чем может быть дело? Я задал вопрос в комментариях к статье,но ответа не получил  sad

 Какую конструкцию использовать на экзамене, как вы считаете?

Ran

  • Новичок
  • *
  • Сообщений: 2
  • ФИО: Ran
Блокировки и режим разделения итогов регистров
« Ответ #39 : Сентябрь 10, 2014, 08:04:13 pm »
unf13, думаю, правильнее так:
 Запрос.УстановитьПараметр("ТочкаИтоговДляСебестоимости", ?(Режим =
 РежимПроведенияДокумента.Оперативный,Неопределено,МоментВремени()));

 Если руководствоваться желтым учебником от 1с по крайней мере... Там сказано, что смысл оперативного проведения (в числе прочего) в том, что вводимый сейчас документ - последний по хронологии (за это отвечает механизм оперативной отметки времени), то есть можно смело брать последние актуальные итоги. Если использовать при этом МоментВремени, то посчитает тоже правильно, но будет менее производительно (системе придется досчитывать итоги до момента времени)

unf13

  • Пользователь
  • **
  • Сообщений: 23
  • ФИО: unf13
Блокировки и режим разделения итогов регистров
« Ответ #40 : Сентябрь 11, 2014, 11:17:18 am »
Ran, я тоже так всегда думал, но почему у Павла в статье по другому? Странно.

nvv

  • Пользователь
  • **
  • Сообщений: 13
Re: Блокировки и режим разделения итогов регистров
« Ответ #41 : Февраль 10, 2015, 08:31:47 am »
<b>unf13</b>, думаю, правильнее так:
 Запрос.УстановитьПараметр("ТочкаИтоговДляСебестоимости", ?(Режим =
 РежимПроведенияДокумента.Оперативный,Неопределено,МоментВремени()));

 Если руководствоваться желтым учебником от 1с по крайней мере... Там сказано, что смысл оперативного проведения (в числе прочего) в том, что вводимый <b>сейчас</b> документ - последний по хронологии (за это отвечает механизм оперативной отметки времени), то есть можно смело брать последние актуальные итоги. Если использовать при этом МоментВремени, то посчитает тоже правильно, но будет менее производительно (системе придется досчитывать итоги до момента времени)

При оперативном ПЕРЕпроведении проверьте какие получаются остатки и все станет ясно.
Например, имеем проведенный документ-расход на 10:00:00. Если просто читать остатки на моментвремени() этого документа, то списание в остатках не учитывается. Если читать остатки в момент оперативного проведения, то моментвремени() перескакивает вперед (напрмер, на 10:37:00), НО остатки на этот момент БУДУТ ВКЛЮЧАТЬ И ЗАПИСИ документа.
Это легко проверить самому и не ждать ответов с форумов. Вот такая особенность.

lagunovartur

  • Новичок
  • *
  • Сообщений: 1
Такс нужно ап! Очень нужно ап! Две недели тупо читаю про долбанные блокировки по началу не понимал ничего, сейчас напишу то что осталось в  голове , пожалуйста прокомментируйте.

Первый случай когда надо использовать Движения.ОстаткиТоваров.БлокироватьДляИзменения=Истина;

Старая методика проведения:
Движения.ОстаткиТоваров.БлокироватьДляИзменения=Истина;  :o :'(
Движения.ОстаткиТоваров.Записать();

Блокировка=Новый БлокировкаДанных;
Блок=Блокировка.Добавить("РегистрНакопления.ОстаткиТоваров");
Блок.Режим=РежимБлокировкиДанных.Исключительный;
Блок.ИсточникДанных=СписокНоменклатуры;
Блок.ИспользоватьИзИсточникаДанных("Номенклатура","Номенклатура");
Блокировка.Заблокировать();

Перепроводим существующий документ.
Такс устанавливаем блокировку... Блокируем Что? Регистр. По какому набору записей??? ФИГ знает толи по пустому толи по старому, а истина где то там--------------->...... НО в народе говорят что лучше написать, баллы на экзамене не лишние)). Например: регистр остатки товаров пустой и есть расходная (номенклатура:стол, количество: 1). Заходит пользователь и меняет стол на стул жмет Окей и ждет пока закончится транзакция , в этот момент второй юзер тем же документом расходная видит ага появился стол, щас спишу  и списывает. Обидно но транзакция не увенчалась успехом и мы ее отменили. В итоге столы полетели в минуса , вместе с баллами на экзамене. Чтоб такого не случилось пишем Движения.ОстаткиТоваров.БлокироватьДляИзменения=Истина;, тем самым блокируем регистр по старому набору записей.(<-------------здесь я вообще не уверен блин!!! ХЭЛП!). В итоге второй юзер вместе со своей расходной попадает в очередь, а потом получает отказ. Счастлив экзаменатор, сдающий, целы баллы).

Второй случай когда надо использовать Движения.ОстаткиТоваров.БлокироватьДляИзменения=Истина;

Новая методика проведения , у регистра накопления стоит свойство (в значение истина), разделять итоги.  В таблицу итогов попадает разделитель который позволяет писать данные нескольким документам у которых одинаковый набор записей (например приходная накладная не должна стоять в очереди), НО гадкий разделитель попадает в блокировку при внесении записей списания. Например проводим одновременно: расходная 1 (блокируем Номенклатура: стол, склад:основной, разделитель1), расходная 2(блокируем Номенклатура: стол, склад:основной, разделитель2). Потом начинаем читать и тут  :o. Расходная 1 заблокировала данные позиции и расходная 2 тоже, только по разным разделителям, а читаем остатки мы по всем позициям в целом, в итоге ловим deallock.
Чтоб такого не получилось пишем злополучное Движения.ОстаткиТоваров.БлокироватьДляИзменения=Истина; отключаем разделитель и вторая расходная попадает  в очередь, таким образом первая спокойно все читает и мы радуемся.
« Последнее редактирование: Апрель 27, 2015, 08:34:51 am от lagunovartur »

ksandr

  • Проверенный
  • ***
  • Сообщений: 138
  • ФИО: ksandr
Ну все правильно Вы понимаете, ну или я тоже так понимаю:)

z4z4z

  • Новичок
  • *
  • Сообщений: 3
  • ФИО: Константин
вроде еще и  так надо!

Если РежимПроведения = РежимПроведенияДокумента.Оперативный Тогда
                       Движения.ОстаткиНоменклатурыПартия.БлокироватьДляИзменения = Истина;
                       Движения.ОстаткиНоменклатурыПартия.Записать();
                       МоментИтогов = Неопределено;
                   Иначе
                       Блокировка = Новый БлокировкаДанных;
                       ЭлементБлокировки = Блокировка.Добавить("РегистрНакопления.ОстаткиНоменклатуры");
                       ЭлементБлокировки.ИсточникДанных = СписокНоменклатуры;
                       ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Номенклатура","Номенклатура");
                       Блокировка.Заблокировать();
                       МоментИтогов = МоментВремени();
 КонецЕсли;"

ksandr

  • Проверенный
  • ***
  • Сообщений: 138
  • ФИО: ksandr
Как то не смог представить куда эту конструкцию можно встроить.
Если по старой методике, то при оперативном проведении блокируются старые движения или пустой набор если движений нет, но нет блокировки по табличной части, а так быть не должно.
А если не оперативный то упускаем старые движения и кто-то может чего-нибудь увести.
Или я чего-то упускаю, разъясните пожалуйста.

HRom

  • Пользователь
  • **
  • Сообщений: 94
  • ФИО: HRom
Блин, вконец запутался когда надо ставить в регистре "Режим разделения итогов".  :o

Прочитал эту статью Насипова Фарита:
http://expert.chistov.pro/public/306681/

Вроде всё понятно, если в обработке проведения документа используется блокировка таблицы (неважно всей, или только по конкретынм значениям измерений), то "Режим разделения итогов" использовать не нужно. Так как никакой параллельной записи не происходит из-за накладывания блокировок.

В статье Чистова же наоборот.
http://1c.chistov.pro/2013/07/blog-post_25.html

Так как блокируем мы не весь регистр, за что нам отдельное спасибо, а только те данные по которым мы сформировали движения, за что спасибо ребятам из 1С, то важно установить свойство регистра "Разрешить разделение итогов".
Если разделение итогов не будет включено и в режиме пользователя, то в большей части случаев блокировка будет наложена на весь регистр с его таблицами.


 "Режим разделения итогов" же никак не влияет на блокировки, он только добавляет дополнительное измерение "splitter"!!! А так как мы накладываем блокировку на все записи по конкретной номенклатуре (складу и т.п.) но БЕЗ учёта значения в splitter, то никакой параллельности записи в регистр не будет и галку ставить "Разрешить разделение итогов" не нужно!!!

alex1248

  • Призрак форума
  • *****
  • Сообщений: 714
Блин, вконец запутался когда надо ставить в регистре "Режим разделения итогов".  :o
Вот еще нарыл, в Проф. разработке: "... свойство набора записей БлокироватьДляИзменения устанавливается в значение Истина. В этом случае в момент записи набора записей платформа отключит разделитель итогов в регистре ..." (у меня стр. 612, почти в самом конце Главы 11).

HRom

  • Пользователь
  • **
  • Сообщений: 94
  • ФИО: HRom
Блин, вконец запутался когда надо ставить в регистре "Режим разделения итогов".  :o
Вот еще нарыл, в Проф. разработке: "... свойство набора записей БлокироватьДляИзменения устанавливается в значение Истина. В этом случае в момент записи набора записей платформа отключит разделитель итогов в регистре ..." (у меня стр. 612, почти в самом конце Главы 11).

Может в этом вся и соль? Типа ставим эту галку всегда, а платформа уже сама решит кога использовать splitter. От нас только требуется блокировки правильно расставить.

alex1248

  • Призрак форума
  • *****
  • Сообщений: 714
Блин, вконец запутался когда надо ставить в регистре "Режим разделения итогов".  :o
Вот еще нарыл, в Проф. разработке: "... свойство набора записей БлокироватьДляИзменения устанавливается в значение Истина. В этом случае в момент записи набора записей платформа отключит разделитель итогов в регистре ..." (у меня стр. 612, почти в самом конце Главы 11).

Может в этом вся и соль? Типа ставим эту галку всегда, а платформа уже сама решит кога использовать splitter. От нас только требуется блокировки правильно расставить.
По поводу самой галки оттуда же: "В клиент-серверном варианте для максимального быстродействия системы при использовании ее большим числом пользователей обеспечивается параллельность ... за счет применения блокировок не на уровне таблиц ..., а на уровне записей ... и диапазонов записей ... При этом для ускорения записи в регистр и увеличения параллельности проведения документов регистры стандартно используют режим разделения итогов".
« Последнее редактирование: Август 16, 2015, 05:55:35 pm от alex1248 »

HRom

  • Пользователь
  • **
  • Сообщений: 94
  • ФИО: HRom
Блин, вконец запутался когда надо ставить в регистре "Режим разделения итогов".  :o
Вот еще нарыл, в Проф. разработке: "... свойство набора записей БлокироватьДляИзменения устанавливается в значение Истина. В этом случае в момент записи набора записей платформа отключит разделитель итогов в регистре ..." (у меня стр. 612, почти в самом конце Главы 11).

Может в этом вся и соль? Типа ставим эту галку всегда, а платформа уже сама решит кога использовать splitter. От нас только требуется блокировки правильно расставить.
По поводу самой галки оттуда же: "В клиент-серверном варианте для максимального быстродействия системы при использовании ее большим числом пользователей обеспечивается параллельность ... за счет применения блокировок не на уровне таблиц ..., а на уровне записей ... и диапазонов записей ... При этом для ускорения записи в регистр и увеличения параллельности проведения документов регистры стандартно используют режим проведения итогов".

Ну т.е. ставим тогда, когда используем управляемые блокировки (а не автоматические, которые блокируют всю таблицу), а т.к. по условию экзамена мы должны использовать только управляемые блокировки, то во всех наших регистрах эта галка должна стоять.
« Последнее редактирование: Август 16, 2015, 05:22:37 pm от HRom »

alex1248

  • Призрак форума
  • *****
  • Сообщений: 714
Ну т.е. ставим тогда, когда используем управляемые блокировки (а не автоматические, которые блокируют всю таблицу), а т.к. по условию экзамена мы должны использовать только управляемые блокировки, то во всех наших регистрах эта галка должна стоять.
А я понял так, что дело только в многопользовательской работе, когда есть необходимость увеличить параллельность. Вроде бы, на экзамене это не должно быть принципиально, но и поставить минусом быть не должно. Где-то читал, что экзаменатор спрашивал, для чего это галка стоит, а мы теперь уже почти эксперты в этом вопросе.  :D

HRom

  • Пользователь
  • **
  • Сообщений: 94
  • ФИО: HRom
Вроде бы, на экзамене это не должно быть принципиально

http://forum.chistov.pro/index.php?topic=1667.msg36894#msg36894
в этой теме я задавал вопрос "зачем мы на экзамене используем управляемые блокировки, если файловая база их всё равно не поддерживает" Павел Чистов ответил что мы должны продемонстрировать умение работать с управляемыми блокировками.
« Последнее редактирование: Август 16, 2015, 06:14:53 pm от HRom »