Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Волшебство программирования на 1С:Предприятие 7.7 и 8.0 . Выпуск 81


Информационный Канал Subscribe.Ru

Волшебство программирования на 1С:Предприятие 7.7 и 8.0
Выпуск 81 / 11.10.2004

«Внутренние» блокировки в 1С 7.7

Автор: Владимир Сердюк

Источник: http://serduk.ru/article.php?id=2

В предыдущей статье по «гибким» блокировкам я пожалуй не сделал акцент на то ,что блокировки в контексте 1С бывают двух видов. Первый вид это блокировки данных на уровне SQL servera. Второй вид это блокировки объектов 1С (клиентских форм). Хочу исправить свою ошибку и остановиться на описании второго вида блокировок подробнее.

Для чего вообще 1С реализовала внутренний механизм блокировок ? Ну во первых для того ,что бы не решать вопрос разрешения конфликтов отображения и записи данных из разных экранных форм одного и того же объекта. То есть предполагается, что если пользователь открыл расходную накладную №5 то никто другой не сможет открыть экранную форму этой накладной пока он ее не закроет. На попытку открыть документ выведется на экран сообщение «Запись заблокирована». Аналогичные по смыслу сообщения будут выводиться в обработках при попытках изменить объект данных который заблокирован. Это, кстати, многие не учитывают в своих обработках.

Давайте теперь попытаемся понять, как устроен механизм «внутренней» блокировки 1С. Ну, во-первых, при каждом открытии формы документа создается, если он еще не существует, временный файл 1sjourn.$lk. Размер этого файла всегда 0 и казалось бы в нем вряд ли может быть заложена информация по блокировкам. На самом деле это заблуждение. 1С используя функцию LockFile блокирует конкретный байт в файле, указывая тем самым, что тот или иной документ заблокирован. Номер байта соответствует Row-Id (первичный ключ) данного документа. Перед открытием формы или исполнением метода объекта 1С пытается заблокировать байт. Если попытка проходит, то он остается заблокированным до завершения операции; если же нет, то выдается соответствующее сообщение.

Вот простейший пример на Delphi отображения заблокированных объектов в 1С.

procedure TForm1.Button1Click(Sender: TObject);
var

i : integer;
begin
   h:=FileOpen('d:ПроверкаКонфликтов1sjourn.$lk',fmOpenRead+fmShareDenyNone);
   showmessage(inttostr(h));
   for i:=0 to 10000 do
      if LockFile(h,i,0,1,0) then
      begin
         UnlockFile(h,i,0,1,0);
      end
      else
      begin
         Memo1.Lines.Add(IntToStr(i)+' - Locked');
      end;
      FileClose(h);
end;

Для того чтобы понять какой у документа номер и вид для этого достаточно выполнить простейший select.
SELECT IDDOCDEF AS ТипДокумента, IDDOC AS ВнутреннийИдентификатор, DOCNO AS НомерДокумента
FROM _1SJOURN
WHERE (ROW_ID = @i)

Где @i это номер байта полученный вышеописанной процедурой.

Для справочников это будет файл не 1sjourn.$lk а scXXX.$lk где ХХХ – внутренний идентификатор объекта метаданных.

Также нужно отметить, что блокировку установить или снять в пределах своей сессии можно с помощью метода Блокировать(). Значение, которое возвращает этот метод, собственно, и указывает на то, заблокирован он или нет. Нужно отметить, что пример приведенный на Delphi гораздо производительней, т.к. в этом случае не нужно открывать выборку данных и проверять каждый элемент на блокировку, а достаточно лишь взять заведомо заблокированные байты и сопоставить их объектам данных в 1С.

Возникает вопрос, а можно ли снимать блокировки не из своей сессии и что произойдет, например, если мы попытаемся удалить файл 1sjourn? Сразу нужно отметить, что просто так удалить нам его не удастся, если он задействован, хотя бы в одном сеансе 1С. Даже если мы возьмем и удалим все хэндлы на него и затем удалим его, то и в этом случае нас постигнет неудача, т.к. в этом случае при обращении ко всем документам будет появляться надпись «запись заблокирована». Косвенные причины этого понятны, неудача в LockFile(h,i,0,1,0) ,а в данном случае хэндл теряется , системой 1С интерпретируется как блокировка объекта. И даже если мы создадим заново этот файл, то блокировок не будет только у тех клиентов, которые загрузили 1С после создания файла. Скорее всего это происходит потому, что 1С хранит в локальной переменной информацию об открытии файла. Если он уже открывался, то 1С не пытается заново его открыть и получить новый хендл. Однако принципиальная возможность создания такого менеджера управления блокировками существует (возможно он уже и написан).

P.s. На данный момент автором реализован механизм отображения заблокированных объектов 1С. Менеджер блокировок, с помощью которого было бы возможно отключение блокировок, не реализован только по той причине, что автор не видит явного коммерческого применения данному продукту.


Интересные ветки форума по версии 7.7 (коэф-т 5%):

Ответов Тема
32V7: Автоматическое тестирование функционала конфигурации. FUNCTEST 0.9.6
87При запуске долго ищется ключ
1171С и другие языки
9Экспорт из ЗиК(246) в Бух(456) заполнение ФСС Таб.№9
3ПУБ. Учет продукции.
36Условие к функции в запросе
8Учет брака ПУБ/ Нужна помощь.
12Всётаки как присвоить всем элементам справочника новый код?
23Налоговый учет в ПУБ
8Про журналы подчиненых документов...
17Если нет LTP , как поставить ключи?
6Автоматизация предприятия на базе... EXCEL
16ОФФ написал программку, преобразующую макросы EXCEL в код 1С
3Можно ли програмно создать элемент диалога? Например переключатель.
25Как быстро и эффективно освоить встроенный язык 1С:Предприятие???
12ошибка таблицы DH1102
16Черные запросы... как-то неуклюже все...
3Это документ
17ЗиК:отпуск будущего месяца
2Как подготовить печать для любой формы???
3Ошибка FRAME.DLL
10Подскажите как присвоить элементу справочника значение
11Список справочника открывается с второго раза?
4Заставка в терминальном режиме
8Как редактировать элементы списка справочника через кнопку
16Складское перемещение
4Где взять ссылки по бухгалтерии?
3Клонирование объекта
3Я живу не в Москве а за 2500км.и не могу записаться не в какую школу.
6Расшифровка не хочет расшифровываться
6Осваиваю азы ЗиК...
4Подпись реквизита в форме
19 проблема с расчетом итогов в 1с
3Копирование сетевой базы
7Работа со строкой
6Перенумерация элементов справочника
19Переключатель
10Как импортировать документы в 1C-Бухгалтерия 6-0 из текстового файла
13MSSQL SERVER 2000, почему тормозит при запущеном агенте?
23Второй релиз Автоматического обновлятеля баз 1С (V2.021B)
9можно ли при выборе реквизита в форме списка справочника вызывать процедуру
17как сделать, чтоб справочник был подчинен сразу 2 справ.
9Классификация видов учета
14Как ввести удержание суммой на сотрудника
2Цвет значков документов в ТиС
10Касса +компьютер
21ЗиК. Вопрос про штатное расписание
14Подскажите как программно установить проверку уникальности кода в справочни
21В отчете вылетает ошибка - значение не представляет агрегатный объект?
7У сотрудника на конец августа имелось отрицательное сальдо по з.п.
14Не начисляется районка и северный на новый вид расчета
9Некорректная работа 19 счета
14При загрузке дает ошибку доступа к таблице DH(номер)
25вылетают клиетны 1С бухгалтерия сетевая
23как изменить тип наименования справочника
10Не получается сделать отбор документов
15Двоится надпись заголовка рамки группы.
9Выгрузка данных из Паруса 4.4
5Как перенести программно элемент справочника в другую группу?
25Сетевая версия для работы 6 юзеров, помогите с настройкой
8Перехват нажатия клавиши DEL и INS (7.7)
10 Как избавиться от мусора в DBF/CDX файлах???
9Назначение прав пользователям в XP для 1с+ВК
14 Горячие клавиши и 1С - не дружат?
9Автонумерация с префиксом для операции
10Интересная проблема с перемещние и расходом в одном документе
7Как открыть файл EXCEL, на который повешен пароль программно из 1С
11Каким образом 1С общается с ВК? (например, драйвер сканера штрих-кода)
5Печать из 1с на прозрачной пленке.
46Какой самый быстрый метод удаление строк в ТЗ
15Учебники по бухучету в инете
7настройка УРБД
29ВидыДляВыбора()
19 Несколько вложенных секций
8 Проблемы с распечаткой ?
151С под Линукс. Не пинайте
10Во сколько оценить такой отчёт?
5не работает стандартная обработка Т9.2 - Т9.2
11нужен типовой договор на разработку конфы
4колонки табличного поля обращение в цикле
9КонтекстПодбора в 7.7
9Сумма прописью
9SQL база не сохраняется
13Зависаетпрограмма при обновлении Бухгалтерии 7.7
10Как узнать пользователя
4Как заполнить таблицу значений на форме.
13Бух, Отчет "Кассовая книга"
14Лицензия
37ПО Хронобус для сферы образования
20ОФФ: Работа: Москва. Программист в IT-отдел >
8ЗиК Как в ВидыРасчета-Вытесняющий.ВытесняетВидыРасчета, справочник СЗВКСтаж
22Компенсация отпуска в ЗиК
4Нумерация для нескольких видов документов
9Заполнение реквизитов в форме списка справочника
6Нулевые значения в таблице (отчет)
7OFF: проблема с округлением
19Обмен справочниками между базами
4запрос по ценам номеклатуры
16не могу перенести текст из одного документа в другой

Смелее задавайте вопросы по 8.0 и 7.7 на форуме www.forum.mista.ru

Используйте поиск и отбор по рубрике - это очень удобно,
а также экономит наше и ваше время.

Объекты конфигурации

справочники, документы, отчеты, регистры, бухгалтерский учет, расчет

Приемы программирования

встроенный язык, дата-время, запросы, таблица значений, список значений, формы, файловая система, внешние обработки, внешние компоненты, интернет-технологии, обмен данными, OLE и COM, торговое оборудование

Типовые конфигурации

бухгалтерия 7.7, Торговля и склад 7.7, Зарплата и кадры 7.7, Управление торговлей 8.0, Управление персоналом 8.0, УПП 8.0

Администрирование

установка, ключи защиты, безопасность, производительность, особенности версии, железо и сети

Общие вопросы

архитектура, политика, обучение и сертификация, законодательство, обновление и ИТС, конкуренты


См. также:
1С:Предприятие 7.7: учебник, курс лекций, статьи, ссылки
Книга "Разработка в системе 1С:Предприятие 8.0" - http://www.v8.1c.ru/book/v8develop.htm

Официальный сайт рассылки - www.mista.ru
Волшебный форум -
www.forum.mista.ru,
Форум по 1С - http://www.forum.mista.ru/index.php?forum=1c
Архив выпусков этой рассылки - http://www.mista.ru/subscribe

Новое!
Раздел форума исключительно по 8.0
http://www.forum.mista.ru/index.php?forum=1c&v8=1

С уважением,
Станислав Митичкин (Волшебник)
stasmit@mail.ru



http://subscribe.ru/
http://subscribe.ru/feedback/
Подписан адрес:
Код этой рассылки: comp.soft.prog.magic1c
Отписаться

В избранное