• Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

  • CTF с учебными материалами Codeby Games

    Обучение кибербезопасности в игровой форме. Более 200 заданий по Active Directory, OSINT, PWN, Веб, Стеганографии, Реверс-инжинирингу, Форензике и Криптографии. Школа CTF с бесплатными курсами по всем категориям.

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

  • Автор темы Natalya
  • Дата начала
N

Natalya

Здравствуйте!

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

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

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

Gluk8888

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

KSergei

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

SaschaL

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

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

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

Natalya

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

Полный код:

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

SaschaL

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

vitfil

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

Natalya

Спасибо всем.
Сделаю без закрытия формы.
 
V

vitfil

Запись без закрытия формы документа, открытого другим пользователем? Готично! 1С не даст этого сделать!
 
D

Darlock

Снятие блокировки и закрытие формы документа у другого пользователя возможно сделать. Дописать конфигурацию самую малость и можно будет закрывать форму документа у соседа. Ничего сверхестественного в этом нет.
 
V

vitfil

Darlock, а я где-то хоть словом обмолвился, что этого нельзя сделать? Вот только возникает вопрос, надо ли это делать?
 
N

Natalya

Суть такая: нужно реквизиту документа присвоить значение.

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

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

simply1

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

jmunya

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

puh14

Я вот задумался - а как бы это сделать. Получилось примерно так - делается константа СписокНаЗакрытие, тип - строка, длина неограничена.

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

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

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

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

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

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

Обучение наступательной кибербезопасности в игровой форме. Начать игру!