Форум на Kuban.ru (http://forums.kuban.ru/)
-   Территория 1С (http://forums.kuban.ru/f1040/)
-   -   Как программно проверить - открыт ли документ ? (http://forums.kuban.ru/f1040/kak_programmno_proverit-_-_otkryt_li_dokument-2788464.html)

med 03.07.2012 14:07

Как программно проверить - открыт ли документ ?
 
УПП
Обработка проверяет документы "Событие" иу которых стоит пометка "На отправку" рассылает электронную почту.
Но документ может быть в данный момент открыт пользователем для редактирования и получается , что электронное письмо уйдет по реквизитам и с текстом которые он псоледний раз сохранил, пометку соответственно, что письмо отправлено поставить не удастся, и в следующий обход обработкой это сообщение будет отправлено повторно.
Пытался проверить
через
СобытиеОбъект.ПолучитьФорму().Открыта()
не реагирует - всегда свободно (ЛОЖЬ)
Как еще можно проверить программно открыт ли документ ?

Uho 03.07.2012 14:22

[quote=med;25793528]открыт пользователем для редактирования[/quote]как узнаешь, что документ открыт именно [em]для редактирования[/em]?

ЗЫ. почитай про блокировки

Lexusss 03.07.2012 15:00

Форма осуществляет запись только поверх той версии объекта, из которой она открывалась. В твоем примере, насколько я понял:
1. Открывается форма версии 1.
2. Обработка читает из БД документ версии 1
3. Обработка изменяет и записывает документов. Ставится версия 2 у этого документа.
4. При попытке записать форму, система проверяет текущую версию в БД (она там будет уже за номером 2). Найдя расхождение, система ругается.
5....
6. ПРОФИТ!

roma n 03.07.2012 17:05

(0) [em]пометку соответственно, что письмо отправлено поставить не удастся[/em] Пробовал? Должно быть как в (2): т.е. с точностью до наоборот - пометку поставить удастся (и письмо отправиться "по реквизитам и с текстом которые он псоледний раз сохранил"), а вот наработанное в открытой форме пользователь сохранить не сумеет

med 04.07.2012 12:15

2-Lexusss >3-roma n >
Попробовал
Действительно так
Но это тоже нехорошо, пользователь открыл - редактирует
а в это время неотредактированный экземпляр уходит...
Как бы все таки программно отслеживать, что документ в данный момент открыт ?

Uho 04.07.2012 12:17

4-med > [quote=Uho;25793780] почитай про блокировки [/quote]

med 04.07.2012 12:29

5-Uho >[quote=Uho;25808529]Цитата: Сообщение от Uho почитай про блокировки[/quote]
А чуть развернетее можете ?
Потому как гугль на "блокировки в 1с 8.2" выдает совсем не те блокировки , которые мне нужны, скажите еще какое нибудь ключевое слово.

Uho 04.07.2012 12:35

например, ЗаблокироватьДанныеДляРедактирования()

med 04.07.2012 14:13

7-Uho > что то никак с ней не разбирусь...
"ЗаблокироватьДанныеФормы:Для установки пессимистической блокировки"
Написал в Основную Форму
в процедуру Перед ОТкрытием
КлючУникальности = Новый УникальныйИдентификатор;
ЗаблокироватьДанныеДляРедактирования(ссылка,,КлючУникальности);

Создаю новый документ, записываю его (не провожу) произвожу в нем после этого изменения

Запускается обработка документов она спокойно в этот документ заходит правит его, проводит....
Где ж тут блокировка ?

Lexusss 04.07.2012 14:20

(4) Что за чушь? В данном применении, совершенно бредово сохранить отредактированное письмо, хотя отправлен был совершенно другой экземпляр. Опиши конкретную ситуацию, тогда и можно говорить.

med 04.07.2012 14:44

9-Lexusss > Хорошо ситуация
был создан документ "Событие Отправка СМС" в него занесены , текст, контактное лицо, номер. Установилось состояние "на отправку", пользователь его записал , закрыл.
И вдруг... вспомнил, что или в тексте ошибка или контактное лицо не то или еще что - ему надо поменять этот документ - открыл его меняет, ну мало ли отвлекли его на пару минут или еще что, а в это время по расписанию прошла отправка всех подготовленных СМС и СМС от этого документа тоже ушла , причем та - которая была сохранена изначально, а не эта, которую пользователь исправил, но не успел сохранить.
Вот как отследить, что документ "Событие Отправка СМС" в данный момент открыт пользователем, и его пока не надо отправлять.?

Uho 04.07.2012 14:53

10-med > в обработке используй

Попытка
ЗаблокироватьДанныеДляРедактирования()
Исключение

КонецПопытки

Гинзбург 04.07.2012 23:36

Метод Рупора Абсурда

matveev_av 05.07.2012 06:36

Лучше зайти с другой стороны, в документе "Событие Отправка СМС" сделать статус (Готов к отправке/Не готов) и возложить ответственность на пользователя по выбору статуса. Далее если произошла отправка смс, отслеживать при открытие документа и блокировать на редактирование в этом случае, если нужно корректировать после отправки - лучше обсудить с руководством как в этой ситуации быть: заново отправлять смс или.

med 05.07.2012 07:09

11-Uho >а в ЗаблокироватьДанныеДляРедактирования()
вставить ссылку на проверяемый документ ?
13-Апосум > т .е. сделать еще один статус ? (сейчас уже при созаднии автоматически проставляется "На отправку"
[quote=Апосум;25819828]отслеживать при открытие документа и блокировать на редактирование[/quote]
Так в том то и дело, после отправки документ блокируется тут проблем нет.
Проблема когда документ открыт в момент отправки.

matveev_av 05.07.2012 07:33

Вот такой код попробуй, при отправке проверка:
Форма = ТвойДокумент.ПолучитьФорму();
Если Форма.Открыта() Тогда

КонецЕсли;

roma n 05.07.2012 07:39

15-Апосум > в чьём сеансе это должно сработать?

med 05.07.2012 08:05

15-Апосум >
а это не одно и тоже с
[quote=med;25793528]Пытался проверить через СобытиеОбъект.ПолучитьФорму().Открыта() не реагирует - всегда свободно (ЛОЖЬ)[/quote]

matveev_av 05.07.2012 08:48

Метод Открыта() покажет только в пределах сеанса этого пользователя, а по всем пользователям не проверяет.
Только что попробовал следующий способ:
а)при открытие формы документа с которым работаем нужно написать Заблокировать()
б)при отправки смс,
Док = ДокСсылка.ПолучитьОбъект();
ФлагМожноОтправлять = Истина;
Попытка
Док.Заблокировать();
Исключение
ФлагМожноОтправлять = Ложь;
КонецПопытки;

Метод Заблокирован() не отрабатывает и приходится через попытку снова вызывать метод Заблокировать().

Uho 05.07.2012 10:07

18-Апосум > ваще то это все написано в СП

Lexusss 05.07.2012 10:11

(10) Проведение документа - великая вещь. Равно как и запрет на не оперативное проведение. Задумайся об этом в терминах своей задачи.


Текущее время: 09:14. Часовой пояс GMT +3.