Закрыть документ программно в 1С 7.7

Natalya

Active member
02.02.2008
25
0
#1
Здравствуйте!

Вопрос: как программно закрыть открытый документ?

1С 7.7 Комплексная ред. 4.5 (7.70.493)
Пишу док.закрыть(), выскакивает ошибка - Поле агрегатного объекта не обнаружено (закрыть).

Заранее спасибо!
 
G

Gluk8888

#2
а просто Закрыть() пробовали?
упс Форма.Закрыть()
 
K

KSergei

#3
к синтакс-помощнику не пробовали обращаться?
 
S

SaschaL

#4
Добрый день!
Функция Закрыть() работает только для формы документа и применение её актуально в том случае если вы открыли форму документа.
Если же вы создаете документ программно и так программно заполняете документ данными то в таком случае достаточно использовать функцию Записать()
например:

Док.Записать();

Вот примерно так!
 

Natalya

Active member
02.02.2008
25
0
#5
Мне нужно из обработки записать изменения в документ. Всё работает. Я хотела бы, если документ открыт, с помощью программы его закрыть, и записать изменения. Только не знаю с помощью какой функции это сделать.

Полный код:

Код:
процедура грузополучатель(док)
док1=создатьобъект("документ");
док1.выбратьдокументы();
док1.найтидокумент(док); 
док1.грузополучатель = грузополучатель.текущийэлемент();
//док1.закрыть();
док1.записать();
конецпроцедуры
 
S

SaschaL

#6
То есть если вас правильно понял, нужно документ принудительно закрыть, если он открыт у кого нибудь из пользователей?
 

vitfil

IT-интегратор
02.04.2004
2 062
0
#8
Никак. Штатно - никак. Посему и запись документа рекомендуется обрамлять в Попытку. В 7.7 не возможно отловить факт блокировки данных кем-то из пользователей, кроме как через исключения. Потому как живность эта подключается к базе данных одним пользователем. Пользователи 1С:Предприятие - это НЕ пользователи базы данных. О них даже записей в БД ВООБЩЕ НЕТ.
 

vitfil

IT-интегратор
02.04.2004
2 062
0
#11
Запись без закрытия формы документа, открытого другим пользователем? Готично! 1С не даст этого сделать!
 

Darlock

Well-known member
04.01.2008
560
1
#12
Снятие блокировки и закрытие формы документа у другого пользователя возможно сделать. Дописать конфигурацию самую малость и можно будет закрывать форму документа у соседа. Ничего сверхестественного в этом нет.
 

vitfil

IT-интегратор
02.04.2004
2 062
0
#13
Darlock, а я где-то хоть словом обмолвился, что этого нельзя сделать? Вот только возникает вопрос, надо ли это делать?
 

Natalya

Active member
02.02.2008
25
0
#14
Суть такая: нужно реквизиту документа присвоить значение.

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

При записи изменений в конфигуратор нужно будет вносить изменения при обновлении и проверять правильность записи значения. Изменения внесённые в обработку упрощают это.
 
S

simply1

#15
Снятие блокировки и закрытие формы документа у другого пользователя возможно сделать. Дописать конфигурацию самую малость и можно будет закрывать форму документа у соседа. Ничего сверхестественного в этом нет.
Darlock, а как дописать?
Расскажи, пожалуйста! Очень заинтригован, особенно, если это DBF!
 
J

jmunya

#17
Возможно, и есть ли вообще функция в 1C проверка закрытия программы?? ("Закрыть программу?")
 

puh14

Well-known member
11.07.2008
1 412
0
#18
Я вот задумался - а как бы это сделать. Получилось примерно так - делается константа СписокНаЗакрытие, тип - строка, длина неограничена.

для закрытия вешаем на список документов кнопочку с процедуркой

процедура ВнестиВСписокНаЗакрытие()
Если СокрЛП(Константа.СписокНаЗакрытие) = "" тогда
Спс = СоздатьОбъект("списокЗначений");
иначе
Спс = ЗначениеИзСтроки(Константа.СписокНаЗакрытие);
КонецЕсли;
Спс.ДобавитьЗначение(ТекущийДокумент);
Константа.СписокНаЗакрытие = ЗначениеВСтроку(Спс);
КонецПроцелдуры

В форме документа пишем процедурку
Процедура ЗакрытьПоЗапросу()
Если СокрЛП(Константа.СписокНаЗакрытие) = "" тогда
Спс = СоздатьОбъект("списокЗначений");
иначе
Спс = ЗначениеИзСтроки(Константа.СписокНаЗакрытие);
КонецЕсли;
Нашли = Спс.НайтиЗначение(ТекущийДокумент());
Если Нашли >0 Тогда
Спс.УдалитьЗначение(Нашли);
Форма.Закрыть(0);
КонецЕсли;
КонецПроцедуры

и чтобы это работало раз в скажем 5 секунд в приОТкрытии() добавляем строчку

Форма.ОбработкаОжидания("ЗакрытьПоЗапросу",5);

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