Функция СобытиеГМ_ПриОткрытии(Конт, ФлагЧтенияНастройки) Экспорт
......
Рез=ПроверкаРазрешенияРедактирования(КонтФормы);
Если Рез=0 Тогда
......
ИначеЕсли Рез=-1 Тогда
ДокИнв=КонтФормы.ТекущийДокумент(); //Переменная для внешнего события
Сервис.ВнешнееСобытие("Фабрика","ПриОткрытии","ОткрытьТолькоНаПросмотр"); //Открываем повторно форму в режиме ТолькоПросмотр только через ВнешнееСобытие, т.к. иначе глюки с открытием
Возврат 0;
ИначеЕсли Рез=-10 Тогда
СообщитьВОтладке(""+ТекущееВремя()+" КОНЕЦ "+л_ИмяСобытия+" НЕ разрешаем открывать форму");
Возврат 0;
КонецЕсли;
Функция Событие_ОбработкаВнешнегоСобытия(Источник,Событие,Данные) Экспорт //+Al 2016-04-13 16:53:09 глобальная (СобытиеГМ_) перехватывается при вызове Сервис.ВнешнееСобытие из глМодуля
//!!! При открытии форм из ПриНачалеРаботыСистемы теряется контекст откуда вызывалось ВнешнееСобытие. КонтФормы будет = последней открытой форме. Это, по всей видимости, глюк перехватчика из ВК 1с++
Перем л_ИмяСобытия,ЕстьМетод,ИмяМетода;
л_ИмяСобытия = ""+ID+" ФабрикаСобытий Событие_ОбработкаВнешнегоСобытия() ";
СообщитьВОтладке(""+ТекущееВремя()+" НАЧАЛО "+л_ИмяСобытия+" Источник="+Источник+" Событие="+Событие+" Данные="+Данные);
СообщитьВФайл("НАЧАЛО "+л_ИмяСобытия+" Источник="+Источник+" Событие="+Событие+" Данные="+Данные,"ФабрикаСобытий"); //+Al 2024-06-13 11:54
Если Данные="ОткрытьТолькоНаПросмотр" Тогда
ОткрытьФорму(ДокИнв,,1);
ДокИнв=0;Рез=0;
ИначеЕсли Данные="ОткрытьНаРедактирование" Тогда
ОткрытьФорму(ДокИнв,,0);
ДокИнв=0;Рез=0;
......
Цитата: item от 06 апреля 2026, 00:35Не проверял, но ИД базы должен быть зашит в ИД обьекта.Проверил, не зашит.
Цитата: sau от 05 апреля 2026, 21:48Если база распределеннаяДа я вот тоже посмотрел повнимательнее:
Процедура Глобальная_ПриОткрытии(Конт) //Formex
глИзначальныйРежимОткрытияФормы = Конт.Форма.ТолькоПросмотр();
глИзначальныйПараметрФормы = Конт.Форма.Параметр;
КонецПроцедуры
//
Процедура ПослеОткрытия(Конт)
ТекущийРежимОткрытияФормы = Конт.Форма.ТолькоПросмотр();
Если (ТекущийРежимОткрытияФормы = 1) и (глИзначальныйРежимОткрытияФормы = 0) Тогда // форму перевели в режим просмотра
ТекущийПараметрФормы = Конт.Форма.Параметр;
Если ТекущийПараметрФормы = глИзначальныйПараметрФормы Тогда //убедимся, что ПриОткрытии не поменял Форма.Параметр()
Если СтатусВозврата() <> 0 Тогда // не бывает, иначе ПослеОткрытия не сработает, но посдтрахуемся
ТипКонтекста = глВернутьТипКонтекста(Конт);
Если (ТипКонтекста = "Справочник") или (ТипКонтекста = "Документ") Тогда
Если Конт.Выбран() = 1 Тогда
ТекОбъект = ?(ТипКонтекста = "Справочник", Конт.ТекущийЭлемент(), Конт.ТекущийДокумент());
ОткрытьФорму(ТекОбъект, глИзначальныйПараметрФормы, 1);
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Цитата: item от 04 апреля 2026, 12:48Надо работать с ПриОткрытииФормыДокументаО, хорошо. Возможно что это самый рабочий вариант. Посмотрю в эту сторону. Справочники и форму операции - надо будет подумать.
Процедура ПриОткрытииФормыДокумента(ФСО, ИдВида, ИдОбъекта, ИдЖурнала, п4, ИдКопии, ИтТекущего, ВводНаОсновании, ИдВидаОснования, ТолькоПросмотр, п10, п11, п12, п13, ПараметрФормы) // предопределенная формекс
Перем Объект, ВидОбъекта, МетаТип, ДатаЗапретаРедактирования, Заголовок;
глОтладка("ПриОткрытииФормыДокумента:" + ИдВида + ":" + ИдОбъекта);
Если ИдВида = 0 Тогда // хз, но вдруг
Возврат;
ИначеЕсли ИдОбъекта = 0 Тогда // новый объект
Возврат;
ИначеЕсли ТолькоПросмотр = 1 Тогда
Возврат;
КонецЕсли;
// определение объекта
СписокВнутр = ЗначениеИзСтроки("{""СписокЗначений"",{}}");
СписокВнутр.ДобавитьЗначение("O"); // O - метка документа
СписокВнутр.ДобавитьЗначение("0");
СписокВнутр.ДобавитьЗначение("0");
СписокВнутр.ДобавитьЗначение("0");
СписокВнутр.ДобавитьЗначение("0");
СписокВнутр.ДобавитьЗначение("0");
СписокВнутр.ДобавитьЗначение(Формат(ИдВида, "Ч10") + Формат(ИдОбъекта, "Ч10") + " ");
ЗначениеВнутр = "{" + СписокВнутр.ВСтрокуСРазделителями() + "}";
Объект = ЗначениеИзСтрокиВнутр(ЗначениеВнутр);
Если ТипЗначенияСтр(Объект) <> "Документ" Тогда
глОтладка("ПриОткрытииФормыДокумента: не определён объект! <" + Объект + ">", "!");
Возврат;
КонецЕсли;
ВидОбъекта = Объект.Вид();
Заголовок = "";
ДатаЗапретаРедактирования = глДатаЗапретаРедактирования(ВидОбъекта, Заголовок);
Если Объект.ДатаДок <= ДатаЗапретаРедактирования Тогда
КонтПросмотра = ПараметрФормы;
ОткрытьФорму(Объект, КонтПросмотра, 1);
//Сообщить("Документ открыт только для просмотра!!!");
Если ТипЗначенияСтр(КонтПросмотра) = "ГрупповойКонтекст" Тогда
КонтПросмотра.Форма.Заголовок("[" + Заголовок + " по " + ДатаЗапретаРедактирования + "]", 1);
КонецЕсли;
ФСО = 0;
КонецЕсли;
// не оставляет записей в журнале регистрации
КонецПроцедуры //ПриОткрытииФормыДокумента
Цитата: trad от 03 апреля 2026, 21:58Блокировка(1)Блокировка(1) - там будут нюансы, связанные с тем, что открытую форму операции она считает блокировкой документа и наоборот. Плюс открытия форм с меткой (несколько к одному объекту). В целом, возможно рабочий вариант.
Цитата: item от 04 апреля 2026, 00:34Форма.ТолькоПросмотр()Форма.ТолькоПросмотр() будет давать 1 в обоих случаях и если форма изначально была открыта в режиме просмотра и если ПриОткрытии для формы был установлен флаг Форма.ТолькПросмотр(1), а это, как я писал выше, может быть 2 большие разницы.