#0
by Вуглускр1991
Привет! Вот и у меня появилась такая необходимость. Отслеживать когда блокировки закончатся. Пробегать по таблице блокировок роботом "с криком кия и ударом ноги", неудобно, потому как метод Блокировка работает с глюками: Итак: БС - реквизит на форме, форма элемента из БС открыта для редактирования. СпрБС = СоздатьОбъект("Документ.ПриемнаяКарточка"); Если пишем так: Он сообщает 0 - объект не заблокирован. Если так РезБлок = СпрБС.Блокировка; Он сообщает 1 - объект принудительно разблокирован, что не правда. И наконец так Если так РезБлок = СпрБС.Блокировка; Вот тут он сообщает 0. Типа не получилось, и исходя из этого, делаем вывод, что он таки кем-то наверное заблокирован. Что же мы имеем? Робот бегает по таблице и блокирует объекты, кто получился - тот значит незаблокирован и робот должен его разблокировать обратно. бред.
#2
by Ёпрст
именно так и нужно всегда работать с методом Блокировка - самому пытаться её установить.
#4
by Вуглускр1991
Оказывается в 1С-ке есть замечательный объект. CStoreObj, у него есть метод Locking(1 или 0) Вот это в точности и есть внутренняя реализация блокирования объекта. Вчера долго рассматривал работу этого объекта (не буду уточнять при помощи какой программы). И вот чего не понял. Как поймать адрес CObjID? CObjIDSet:public CObjID и его 6 паблик переменная имеет тип CUniSet:public CObjectSet И у него есть метод GetMainRec Случайно не тупое возвращение той переменной ... CDocSet:public CUniSet Когда блокируется документ вызов идет именно из объекта CDocSet, Все это к тому, что пытаюсь подойти к созданию своего обработчика этого события. Но в силу небольшого опыта, не знаю, как перехватывать функции есть какой-нибудь "мануал" на эту тему? Неужели придется находить и переписывать адресок в таблице вызовов (она ведь в сегменте данных?) по идее адресок этот постоянный и я могу его в своей ВК знать просто как константу. Впрос лишь в том, как найти в стеке (или где?) CObjID элемента, для которого вызывается CStoreObj::Locking Я находил, пару раз, но что-то дюже далеко. А ещё было бы не плохо сделать это также элегантно как у АльФа.
#6
by Вуглускр1991
Нет, это не правильно. Почему я должен блокировать объект, если мне надо _только_узнать_ блокирован он или нет? Конечно, если мне надо с объектом работать - то узнавать некогда, сегодня узнал, а завтра его кто-то уже схватил. Но если мне таки надо просто узнать. А я буду его хватать.
#7
by Ёпрст
дык, тут предпологалось, заблокирован ли он тобой, а не вообще, вот отсюда вся путанница.
#9
by mikecool
твоя тирада и "Но в силу небольшого опыта" напоминает - у меня интернет не работает - а лампочка на модеме светится? - это не лампочка, а тиристорный светодиод - да, пожалуй, проблемы на нашей стороне
#10
by Вуглускр1991
:) Я в жизни сделал большую ошибку выбрав паскаль вместо си в далеком 9-ом классе. Несколько раз замахивался на такие вещи как "позднее связывание" линковка и либы. Так чтобы все это руками пощупать. Чтобы мог вручную подправить а в идеале отстроить таблицу функций. Но пока не прорубил.
#11
by Вуглускр1991
Все сделал на формэксе: ... Перем глТаблоБлокОб Экспорт; Перем глFormexСервис Экспорт; ... ПриНачале... ... КонецПроцеду... ...
#12
by Вуглускр1991
Из внешней обработки удалось позакрывать все формы блокирующие объекты сгласно таблице. Причем: Форма списка при редактировании элемента закрывается записывая редактируемый элемент. Форма документа, где "ПриЗаписиПерепроводить" закрывается не записываясь. Конечно, здорово. Что так быстро и нет нудного перебора процедур форм "ПриОткрытии", "ПриНачалеРедактированияСтроки" Да и половины форм списка в справочниках нет.
#13
by Вуглускр1991
Теперь, послав список объектов, которые шлепают в пакете обмена всем пользователям. В обработке внешнего события буду закрывать формы заблоченных объектов. И выполнять обмен.
#14
by orefkov
CStoreObj это только на дбф, походу лочит ту запись таблицы, на которой CStoreObj спозиционирован.
#16
by Вуглускр1991
Это я видел, функционал слегка другой. Не обязательно знать кто да почему. Обмен любой ценой. Поэтому пинка. Получается, что надо в CUniSet или в потомке CDocSet сперва идет позиционирование, а уже если надо то блокировка, поэтому я не смог быстро найти переменную с CObjID. А кроме неё мне ещё надо было найти форму. Видимо создание dll "по радуге" опять откладывается. Спасибо всем, вроде работает. И, конечно, АльФу особенно.
#18
by Вуглускр1991
А в исходники посмотреть Можно? Как ты это сделал, я увидел, что перехвачена именно CDocSet::Lock, и ещё наверное есть функции Lock, интересно как ты достал CObjID.
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям
В этой группе 1С
- Повторное открытие формы.
- Директор по доверенности БП 2.0
- v8: вывести значки в столбец табличного поля
- Автоматическая выгрузка данных 7.7
- Огромный файл LDF. Как уменьшить?
- Управление торговлей 10.3 резервирование товара без указания размещения
- <служебные программы EISA> - что это?
- Проводки по договору ГПХ в комплексной автоматизации
- Куда 1С 8 РБД кладет файлы при обмене по e-mail?
- .УстановитьТекущийКаталог()
- Подскажите как пользоваться обфускацией кода 1С
- ЗУП - отчет "Отражение зарплаты в регламентированном учете"
- БП 2.0 Добавить субконто примитивного типа Дата
- Себестоимость при продаже в минус - помогите советом
- Как создать документа перемещение на основании перемещения?
- Печатные формы через метаданные
- Ошибка при получении значения атрибута контекста (Экземпляр) . Метод не найден.
- Ошибка при получении значения атрибута контекста (Экземпляр) . Метод не найден.
- Отправка EPL-команд на принтер
- 8.2 Гиперссылка в табличной части, как?