получение формы открытого документа (обычные формы)
Три дня бьюсь: не могу получить форму открытого документа
просмотрел все что есть в инете - но так и не заработало.
Объект = Выборка.ссылка.ПолучитьОбъект();
Номер = Объект.Ссылка.Номер;
Док=Документы.ЗаказПокупателя.НайтиПоНомеру(Номер);
П = Новый Структура("Ключ", док);
мФорма = ПолучитьФорму("Документ.ЗаказПокупателя.ФормаОбъекта",П);
Если мФорма.Открыта() Тогда
мФорма.Прочитать();
Иначе
Сообщить("Не открыта");
КонецЕсли;
вообще возможно ли получить форму открытого документа?
просмотрел все что есть в инете - но так и не заработало.
Объект = Выборка.ссылка.ПолучитьОбъект();
Номер = Объект.Ссылка.Номер;
Док=Документы.ЗаказПокупателя.НайтиПоНомеру(Номер);
П = Новый Структура("Ключ", док);
мФорма = ПолучитьФорму("Документ.ЗаказПокупателя.ФормаОбъекта",П);
Если мФорма.Открыта() Тогда
мФорма.Прочитать();
Иначе
Сообщить("Не открыта");
КонецЕсли;
вообще возможно ли получить форму открытого документа?
По теме из базы знаний
- Генератор кода 8.x (Управляемые и обычные формы) Версия от 02.10.2024
- Универсальный передаточный документ для Управление торговлей релиза 10.3.21.1 (бета для УТ 10.3.30.2) - печатная форма 2 в 1 альтернатива счету фактуре и расходной накладной.
- Загрузка документов и номенклатуры из Excel в 1С "одним нажатием": УПД, ТОРГ-12, отчеты маркетплейсов, заказы, счета, прайсы
- Автоматическое заполнение статистической формы учета перемещения товаров при ЭКСПОРТЕ (ФТС) в государства ЕАЭС (Беларусь, Казахстан, Армения и Кыргызская Республика)
- Загрузка чеков в 1С из ФНС в документы БП, УНФ, ERP, КА и УТ
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1) Вы пишите "не могу получить форму открытого документа"
Форма Документа у вас уже открыта.
Надо проверить так ли это и при необходимости активировать.
А если не открыта - открыть.
Удобнее всего использовать подобный код:
Форма Документа у вас уже открыта.
Надо проверить так ли это и при необходимости активировать.
А если не открыта - открыть.
Удобнее всего использовать подобный код:
Ф_ = ДокЪ.ПолучитьФорму( , "ФормаДокумента");
Если Ф_.Открыта() Тогда
Ф_.Активизировать();
Иначе
Ф_.Открыть();
КонецЕсли;
(5) German_Tagil, Тогда используйте
Курите в сторону ЗаблокироватьДанныеДляРедактирования.
Т.к. я очень сильно сомневаюсь, что вы получите формы, открытые в других сеансах
т.е код примерно такой:
Ссылка.ПолучитьФорму().Открыть()
мне надо проверить открыт ли документ чтобы не потерялись данные в форме документа
Курите в сторону ЗаблокироватьДанныеДляРедактирования.
Т.к. я очень сильно сомневаюсь, что вы получите формы, открытые в других сеансах
т.е код примерно такой:
ФормаОткрыта = Истина;
Попытка
ЗаблокироватьДанныеДляРедактирования(Ссылка);
Исключение
Формаоткрыта = Ложь;
КонецПопытки
(5) Вы пишите "мне не надовы получать форму нового экземпляра объекта - мне надо проверить открыт ли документ"
Смотрите код внимательно.
Смотрите код внимательно.
Объект = Выборка.ссылка.ПолучитьОбъект();
Номер = Объект.Ссылка.Номер;
Док=Документы.ЗаказПокупателя.НайтиПоНомеру(Номер);
ФормаДок = Док.ПолучитьФорму( , "ФормаДокумента");
Если не ФормаДок.Открыта() Тогда
ФормаДок.Открыть();
КонецЕсли;
(8) Очень сложно отлаживать программу не видя всего кода.
Ситуация как "у трёх слепых, изучающих одного слона"
Я исхожу из того, что код
Адекватный и там данные верные.
В отладчике посмотрите Объект - это конкретно документ?
По идее, можно сразу получить форму
Отладчиком посмотрите.
Ситуация как "у трёх слепых, изучающих одного слона"
Я исхожу из того, что код
Объект = Выборка.ссылка.ПолучитьОбъект();
Номер = Объект.Ссылка.Номер;
Адекватный и там данные верные.
В отладчике посмотрите Объект - это конкретно документ?
По идее, можно сразу получить форму
ФормаДок = Объект.ПолучитьФорму( , "ФормаДокумента");
Отладчиком посмотрите.
(10) CaptainMorgan, в контексте основной задачи, которая звучит
Более того, даже в контексте темы
как мне надо проверить открыт ли документ чтобы не потерялись данные в форме документа
- данный код неверен, т.к. вы не сможете, к примеру, получить формы, открытые в других сеансах.
Более того, даже в контексте темы
получение формы открытого документа
этот код неверен, т.к. получается форма нового экземпляра объекта, т.е. гарантированно новая форма.
Исправил
Номер = Объект.ссылка.Номер;
ДатаД =Объект.ссылка.Дата;
Сообщить("номер "+ номер+ " " +датаД);
Док=Документы.ЗаказПокупателя.НайтиПоНомеру(Номер,ДатаД);
Сообщить("Док "+ Док.ссылка);
ФормаДок = Док.ссылка.ПолучитьФорму( , "ФормаДокумента",номер);
Если ФормаДок.Открыта() Тогда
Сообщить(" открыта");
иначе
Сообщить("не открыта");
КонецЕсли;
все равно не видит форму - документ открыт
Номер = Объект.ссылка.Номер;
ДатаД =Объект.ссылка.Дата;
Сообщить("номер "+ номер+ " " +датаД);
Док=Документы.ЗаказПокупателя.НайтиПоНомеру(Номер,ДатаД);
Сообщить("Док "+ Док.ссылка);
ФормаДок = Док.ссылка.ПолучитьФорму( , "ФормаДокумента",номер);
Если ФормаДок.Открыта() Тогда
Сообщить(" открыта");
иначе
Сообщить("не открыта");
КонецЕсли;
все равно не видит форму - документ открыт
да я до этого раньше от безисходности додумался
Если Не Объект.Заблокирован() Тогда
Объект.Заблокировать();
Объект.Записать();
Объект.Разблокировать();
иначе
оповестить("Нужно освободить документ " + Объект.ссылка);
КонецЕсли;
вот как-то так
Если Не Объект.Заблокирован() Тогда
Объект.Заблокировать();
Объект.Записать();
Объект.Разблокировать();
иначе
оповестить("Нужно освободить документ " + Объект.ссылка);
КонецЕсли;
вот как-то так
(20) German_Tagil, блокируется объект по ключу Ссылка(отбор регистра) /идентификатор формы.
Данная блокировка - возникает при открытии формы. То есть если пользователь открыл форму существующего документа - он неявно заблокировал этот объект для редактирования. Когда ты в своей обработке - пытаешься заблокировать этот же объект (ту же ссылку по сути) - у тебя вылетает исключение, т.к. объект уже заблокирован открытой формой другого пользователя. Причем про эту форму тебе ничего знать не нужно.
Данная блокировка - возникает при открытии формы. То есть если пользователь открыл форму существующего документа - он неявно заблокировал этот объект для редактирования. Когда ты в своей обработке - пытаешься заблокировать этот же объект (ту же ссылку по сути) - у тебя вылетает исключение, т.к. объект уже заблокирован открытой формой другого пользователя. Причем про эту форму тебе ничего знать не нужно.
вот нашел но тоже не работает
Док1 = ТекДок.ПолучитьОбъект();
ФормаДок1 = Док1.ПолучитьФорму(«ФормаДокумента»);
Если ФормаДок1.Открыта() Тогда
ФормаДок1 = ТекДок.ПолучитьФорму(«ФормаДокумента»);
не надо объект получать
issyk23
7 - 13.03.07 - 17:37
Да, так все получилось. Спасибо.
а у меня неполучилось
Док1 = ТекДок.ПолучитьОбъект();
ФормаДок1 = Док1.ПолучитьФорму(«ФормаДокумента»);
Если ФормаДок1.Открыта() Тогда
ФормаДок1 = ТекДок.ПолучитьФорму(«ФормаДокумента»);
не надо объект получать
issyk23
7 - 13.03.07 - 17:37
Да, так все получилось. Спасибо.
а у меня неполучилось
и у меня вопрос. каким образом я могу узнать Владельцформы
если только форма была открыта мной и я где-то сохранил значение
а если не мной открыта?
Окна перебирать - но в обычных формах 8.2 как то смутно это все прописано
ФормаДокумента2 = Документ1Объект.Документ2.ПолучитьФорму("ФормаДокумента",Владелецформы,Документ1Объект.Номер);
(27) ПолучитьФорму(<ПолноеИмяФайла>, <ИмяФормы>, <Владелец>, <КлючУникальности>)
Параметры:
<ПолноеИмяФайла> (обязательный)
Тип: Строка.
Путь к файлу внешней обработки.
<ИмяФормы> (необязательный)
Тип: Строка; ОбъектМетаданных: Форма .
Имя формы, как оно задано в конфигураторе.
Если параметр не указан, то используется форма, заданная в качестве основной.
<Владелец> (необязательный)
Тип: Форма.
Форма, которая будет являться владельцем открываемой формы. Если параметр не указан, то используется основная форма, заданная в конфигураторе.
<КлючУникальности> (необязательный)
Тип: Произвольный.
В данном параметре может быть задан некоторый ключ, значение которого будет использоваться для поиска уже открытых форм. Если будет найдена форма с таким же ключом уникальности, вместо открытия новой формы будет активизирована найденная форма.
Если параметр не указан, сначала всегда будет искаться уже открытая форма.
Параметры:
<ПолноеИмяФайла> (обязательный)
Тип: Строка.
Путь к файлу внешней обработки.
<ИмяФормы> (необязательный)
Тип: Строка; ОбъектМетаданных: Форма .
Имя формы, как оно задано в конфигураторе.
Если параметр не указан, то используется форма, заданная в качестве основной.
<Владелец> (необязательный)
Тип: Форма.
Форма, которая будет являться владельцем открываемой формы. Если параметр не указан, то используется основная форма, заданная в конфигураторе.
<КлючУникальности> (необязательный)
Тип: Произвольный.
В данном параметре может быть задан некоторый ключ, значение которого будет использоваться для поиска уже открытых форм. Если будет найдена форма с таким же ключом уникальности, вместо открытия новой формы будет активизирована найденная форма.
Если параметр не указан, сначала всегда будет искаться уже открытая форма.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот