Последние сообщения

#41
7.7 / Re: Понять в каком режиме отк...
Последний ответ от Злоп - 07 апреля 2026, 10:00
В ПриОткрытии надо очень осторожно со всякими манипуляциями формы до завешения полной инициализации формы. Я еще когда для ТСД писал пришел к тому что когда в ПриОткрытии надо например запустить другую форму для ввода каких-то промежуточных данных и вернуться обратно, то это в итоге делалось через ОО.
#42
7.7 / Re: Понять в каком режиме отк...
Последний ответ от Злоп - 07 апреля 2026, 09:15
Если в модуле формы документа в самом низу написать

Если Форма.ТолькоПросмотр() = 0 Тогда
    // тут еще можно флаг взвести чтобы в ПриОткрытии() сделать СтатусВозврата(ФлагКоторыйНоль)
    ОткрытьФорму(ТекущийДокумент(),,1);
КонецЕсли;

то у меня спокойно открываются две формы документа - одна на редактирование и одна в режиме просмотра
#43
7.7 / Re: Понять в каком режиме отк...
Последний ответ от Харлампий Дымба - 06 апреля 2026, 23:57
Что-то я разочаровался в своем решении. Идея-то была не вынести контроль ПриОткртыии (типа даты запрета редактирования) в единое место, а сделать переоткрытия для любых форм, которым в локальной ПриОткрытии был установлен Форма.ТолькоПросмотр(1). То есть контроль идет уже ПОСЛЕ локальной ПриОткрытии. А тут есть только формексовская Глобальная_ПослеОткрытия, которая вызывается когда форма уже открыта. И тут затык с закрытием формы: пока форма открыта - её не переоткроешь, как только закрыл - выполнение Глобальная_ПослеОткрытия завершилось, форму неоткуда открывать. И начинатся огород - через Сервис.ВнешнееСобытие делать, через ПослеЗакрытия? ну и как-то пока не понравилось, красоты не получилось.

Бонус: код
Процедура ПриОткрытии()
	ОткрытьФорму(ТекущийДокумент(),,1);
КонецПроцедуры // ПриОткрытии()
валит 1С напрочь при открытии существующего документа.


#44
7.7 / Re: Как открыть из меню отчет ...
Последний ответ от Злоп - 06 апреля 2026, 22:08
С отчетами, открытыми с # есть проблемы если из такого отчета вызывается UCHOICE или ПодборОбъектов
#45
7.7 / Re: Как открыть из меню отчет ...
Последний ответ от Злоп - 06 апреля 2026, 22:06
Что значит "из глобального меню"..?
1. сделать пункт меню с пунктом Задача.Выполнить и вписать нужную формулу (но это очевидно же)
2. в ПриОткрытии() сделать РасположениеФайла() и переоткрыть самого себя с #
3. Через глоб.предопределенную формексовскую ПриЗагрузкеВнешнегоОтчета() - если в процедуре установить статус возврата в ноль, то внешний отчет не будет загружен, далее переоткрыть самого себя с #
#46
7.7 / Как открыть из меню отчет с #
Последний ответ от alyuev - 06 апреля 2026, 19:17
Кто-то знает - можно ли открыть из глобального меню отчет так, чтобы это выглядело как

ОткрытьФорму("Отчет#" ...

Т.е. чтобы открылась новая форма отчета? 

У нас так по комбинации клавиш сделано. Для любой формы можно открыть копию.
А вот при открытии из меню сейчас отчет открывается заново поверх открытой формы.
#47
7.7 / Re: Понять в каком режиме отк...
Последний ответ от alyuev - 06 апреля 2026, 19:13
Мы через класс ФабрикуСобытий так сделали.

Функция СобытиеГМ_ПриОткрытии(Конт, ФлагЧтенияНастройки) Экспорт
......
    Рез=ПроверкаРазрешенияРедактирования(КонтФормы);
    Если Рез=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;
......
#48
7.7 / Re: Понять в каком режиме отк...
Последний ответ от Харлампий Дымба - 06 апреля 2026, 00:51
Цитата: item от 06 апреля 2026, 00:35Не проверял, но ИД базы должен быть зашит в ИД обьекта.
Проверил, не зашит.
ЗначениеВСтрокуВнутр = {"O","0","0","410","0","0","   1745758МК "}
ИдОбъекта = 1745758
ИдВида = 410
Хвостик базы "МК " - не нашел.
#49
7.7 / Re: Понять в каком режиме отк...
Последний ответ от Харлампий Дымба - 06 апреля 2026, 00:45
Цитата: sau от 05 апреля 2026, 21:48Если база распределенная
Да я вот тоже посмотрел повнимательнее:
Возможно Процедура Глобальная_ПриОткрытии(Контекст) появилось в Formexe позже, чем ПриОткрытииФормыДокумента(), но сейчас использование Глобальная_ПриОткрытии выглядит более удобным.
Я набросал решение для своей задачи, неокончательное, надо будет погонять в разных режимах:

Процедура Глобальная_ПриОткрытии(Конт) //Formex
    глИзначальныйРежимОткрытияФормы    = Конт.Форма.ТолькоПросмотр();
    глИзначальныйПараметрФормы    = Конт.Форма.Параметр;
КонецПроцедуры    
//
Процедура ПослеОткрытия(Конт)        
    ТекущийРежимОткрытияФормы = Конт.Форма.ТолькоПросмотр();
    Если (ТекущийРежимОткрытияФормы = 1) и (глИзначальныйРежимОткрытияФормы = 0) Тогда // форму перевели в режим просмотра
        ТекущийПараметрФормы = Конт.Форма.Параметр;
        Если ТекущийПараметрФормы = глИзначальныйПараметрФормы Тогда //убедимся, что ПриОткрытии не поменял Форма.Параметр()
            Если СтатусВозврата() <> 0 Тогда // не бывает, иначе ПослеОткрытия не сработает, но посдтрахуемся
                ТипКонтекста = глВернутьТипКонтекста(Конт);
                Если (ТипКонтекста = "Справочник") или (ТипКонтекста = "Документ") Тогда
                    Если Конт.Выбран() = 1 Тогда
                        ТекОбъект = ?(ТипКонтекста = "Справочник", Конт.ТекущийЭлемент(), Конт.ТекущийДокумент());
                        ОткрытьФорму(ТекОбъект, глИзначальныйПараметрФормы, 1);
                    КонецЕсли;
                КонецЕсли;
            КонецЕсли;
        КонецЕсли;
    КонецЕсли;    
КонецПроцедуры   

Контролировать флаги ВводНаОСновании, СвязанС, Владелец и тд - мне не надо, так как интересуют открытие форм уже существующих элементов/документов. глВернутьТипКонтекста() легко гуглится.
Простого решения определить режим открытия формы не нашел, но обойдусь и без него.
И спасибо АЛьФу за формекс!
#50
7.7 / Re: Понять в каком режиме отк...
Последний ответ от item - 06 апреля 2026, 00:35
Не проверял, но ИД базы должен быть зашит в ИД обьекта.