Имя: Пароль:
1C
1C 7.7
v7: Форма.ТолькоПросмотр(1) - так ли это только просмотр..
,
0 Злопчинский
 
07.04.20
01:46
Запускаем два сеанса.
про документы.
1. Открываем в одном сеансе форму, в коде которой отрабатывает Форма.ТолькоПросмотр(1);
Если во втором сеансе открыть форму аналогично - то фиг вам, "объект заблокирован"
2. Если во втором сеансе открыть лупой "просмотр документа" с панели инструментов - то норм, откроется.
.
получается что
в 1 - объект жестко связан с формой, объект блокируется, а форма сама по себе имеет флаг 1/0
в 2 - форма документа "оторвана" от объекта, объект не блокируется.
.
вот...
и еще есть режим ОткрытьФорму(Док,параметр,РежимОткрытия=1) - интересно в этом случае форма откроется по 1 или 2?
.
и как  располагая контекстом формы открытой только на просмотр узнать - она открыта с блокировкой объекта или нет?
Стучаться в метод Блокировка()...?
1 Злопчинский
 
07.04.20
01:48
Вопрос порожден написанием ВПФ, которая модифицирует реквизиты документа, в т.ч. лежащие на форме. ВПФ должна корректно работать в разных режимах, и когда в ВПФ передан ГрупповойКонтекст (и форма доступна и только на просмотр) и когда в ВПФ передан документ. В любом случае -на до изменить реквизиты документа. Если форма открыта - то в результате - показать измененную форму.
2 Злопчинский
 
07.04.20
02:39
Открыта форма, только на просмотр. Как узнать в этом же сеансе - форма открыта с блокировкой или без?
.
вроде вот так работает:

Докум = Форма.Параметр.Получить("Контекст");
ТипКонтекста = ТипЗначенияСтр(Докум);
    
Если ТипКонтекста = "ГрупповойКонтекст" Тогда

    Если Докум.Форма.ТолькоПросмотр()=1 Тогда
        Док = СоздатьОбъект("Документ."+Докум.Вид());
        Док.НайтиДокумент(Докум.ТекущийДокумент());

        Если Док.Блокировка(1)=0 Тогда
//Просто прочитать статус блокировки не получится: Док.Блокировка()=0 - истина... непонятно почему...
            Сообщить("заблокирован");
            Предупреждение("заблокирован",-1);
3 Злопчинский
 
07.04.20
03:20
Забодался, не получается...
.
Есть родительская форма документа открытая, только на просмотр
Как сделать так, чтобы открыть из ВПФ другую модальную обработку диалоговую, которая изменяет реквизиты исходного документа и показать форму родительского документа в режиме просмотра с уже измененными реквизитами
Формекс есть, 1С++ есть, можно переоткрывать обработки прочее. Должно по возможности все "прозрачно", без лишних морганий.
.
???
4 Злопчинский
 
07.04.20
03:39
для уточнения варианта DGA - типовой ТиС
5 Злопчинский
 
07.04.20
04:05
Для уточнения варианта ВПФ - типовой ТиС.
6 Злопчинский
 
07.04.20
04:06
И еще вопрос - как программно открыть форму документа (и соотв.справочника тоже, один механизм наверное) - в таком же режиме, как открывается на просмотр с панели инструментов на просмотр "лупой"..?
7 rphosts
 
07.04.20
05:36
а если весь код убрать (временно) - блокировка так и останется?
8 Андрей_Андреич
 
naïve
07.04.20
05:44
(6) Как я понимаю, ты либо открыл на просмотр (лупой), либо на изменение - и тогда нет разницы есть ТолькоПросмотр() или нет.
Наверное, перехватывать при открытии формы, закрывать ее и после закрытия открывать ВПФ
9 Андрей_Андреич
 
naïve
07.04.20
05:52
(0) "и еще есть режим ОткрытьФорму(Док,параметр,РежимОткрытия=1) - интересно в этом случае форма откроется по 1 или 2? "
Синтакс-помощник не читаем?
"<РежимПросмотра> - необязательный параметр. Числовое выражение:
1 - открыть форму в режиме только просмотра;
0 - открыть форму в режиме редактирования;
-1 (минус единица) - в этом случае используется вариант, предусмотренный текущим значением параметра ''Режим открытия объектов'', установленным пользователем интерактивно."
10 Злопчинский
 
07.04.20
06:14
(8) "ты либо открыл на просмотр (лупой), либо на изменение" - нет, есть еще третий вариант ОткрытьФорму(,,1) или в открытой форме Форма.ТолькоПросмотр(1) - и еть большая разница как открыто на просмотр - лупой или программно.
11 Злопчинский
 
07.04.20
06:15
(9) см.(10)
12 Злопчинский
 
07.04.20
06:17
(8) "как программно открыть форму документа (и соотв.справочника тоже, один механизм наверное) - в таком же режиме, как открывается на просмотр с панели инструментов на просмотр "лупой".." - этот вопрос к проблеме с формадокумента+ВПФ не относится, это отдельный вопрос
13 Злопчинский
 
07.04.20
06:18
(7)  "если весь код убрать (временно)" - убрать код где?
14 Калиостро
 
07.04.20
07:32
(0) А если в начале кода
СтатусБлокировки = 0;
НачатьТранзакцию();
Попытка
Док.Записать();
Исключение
СтатусБлокировки = 1;
КонецПопытки;
ОтменитьТранзакцию();
15 Злопчинский
 
07.04.20
08:17
(14) смысл сего кода? Док.Записать() и так в транзакции выполняется
16 trad
 
07.04.20
09:21
(0) "и как  располагая контекстом формы открытой только на просмотр узнать - она открыта с блокировкой объекта или нет?"

Процедура ПриОткрытии()
  Если Форма.ТолькоПросмотр() = 0 Тогда
    //косвенно означает, что открыта с блокировкой
  КонецЕсли;
КонецПроцедуры
17 trad
 
07.04.20
09:23
а если нужно узнать заблокирован ли объект этой формой или какой-то другой, то да: "Стучаться в метод Блокировка()"
18 trad
 
07.04.20
09:27
и еще
Форма.ТолькоПросмотр(1); - не снимает блокировку
Форма.ТолькоПросмотр(0); - не устанавливает блокировку, не разрешает редактирование если "открыть лупой"
19 Ёпрст
 
07.04.20
09:54
(0)
на счет кто заблокировал:
http://catalog.mista.ru/public/74138/

на счет побочного эффекта от Форма.ТолькоПросмотр(0) вот

http://catalog.mista.ru/public/141197/
20 Ёпрст
 
07.04.20
09:55
И Чебур, кому аккаунт продал ?
21 mikecool
 
07.04.20
09:59
(20) +1 уже не первая тема )))
22 trad
 
07.04.20
10:01
(21) и был скайп - злопун, теперь телега - доброп
23 Ёпрст
 
07.04.20
10:02
Мот это последствия короновируса - старческий маразм ? )
24 Харлампий Дымба
 
07.04.20
12:22
(20) Вообще не понимаю зубоскальства к Чу.
За себя скажу: за 25 лет в семерке - дофига осталось черных зон, с которыми не разбирался в виду ненужности. Ещё больше серых зон, которые просто обходил стороной, где можно было обойтись: быстро сделал, все довольны. Плюс приобретённые серые зоны - 15 лет назад разобрался, а потом ни разу не пригодилось, вот и стёрлось.
25 trad
 
07.04.20
13:34
(24) "Вообще не понимаю зубоскальства к Чу."
воспринимай это как еще одну "черную зону"
))
26 trad
 
07.04.20
13:35
при всем уважении к Злопчинский
27 Cthulhu
 
07.04.20
15:49
Если Док.Блокировка(1)=0 Тогда
  //Просто прочитать статус блокировки не получится: Док.Блокировка()=0 - истина... непонятно почему...
    // >>>>>>> ПОНЯТНО! перечитай сп+жкк по блокировке
  Сообщить("заблокирован"); Предупреждение("заблокирован",-1);
  Возврат;
КонецЕсли;
Док.Блокировка(0);
28 Cthulhu
 
07.04.20
15:51
"по лупе" - то же самое что ОткрытьФорму с 1 в параметре ТолькоПросмотр.
"показать измененный" - тупо ОткрытьФорму с 1 в параметре ТолькоПросмотр (если эта форма была открыта ранее - она переоткроется т.е. обновится в соответствии с данными и активизируется)
29 Злопчинский
 
07.04.20
18:48
Соори за суматошное ночное изложение и толику бреда.
Сказывается самоизяоляция и ночные посиделки.
.
30 Злопчинский
 
07.04.20
18:49
В результате с божей помощью. АнедейАндреича итд, по сущетсу разобрался. Все ожидаемо и логично.
Но есть один затык..
31 Злопчинский
 
07.04.20
18:50
исходные условия теста.

- документ записан.
- открытая форма документа.
- ВПФ из открытой формы документа.
- ВПФ "видит" контекст формы документа и, соответственено, при необходимости видит и объект-документ через Контекст.ТекущийДокумент()
- блокировка документа проверяется извне формы через Док.Записать() (при необходимости можно и внутрях)

тест

1. ОткрытьФорму(,,0) + Форма.ТолькоПросмотр(1) - Объект заблокирован, только просмотр, ВПФ из контекста формы, изменяем реквизиты контекста. Контекст.Форма.Обновить()+Контекст.Записать() - все ок, форма только на просмотр и реквизиты изменены. Все как хотелось.
2. ОткрытьФорму(,,0) - Объект заблокирован, форма доступна редактирование, ВПФ из контекста формы, изменяем реквизиты контекста. Контекст.Форма.Обновить()+Контекст.Записать() - все ок, форма только на доступна на изменение, реквизиты изменены. все как хотелось.

2. ОткрытьФорму(,,1)+Форма.ТолькоПросмотр(1) - Объект свободен (логично), только просмотр, ВПФ из контекста формы  изменяем реквизиты контекста. Контекст.Форма.Обновить()+Контекст.Записать() - ничего не ругается, все типа ок, форма только на просмотр и реквизиты НЕ изменены (что как бы тоже логично). Тут как бы понятно, но не то что хотелось...
4. ОткрытьФорму(,,1)  - Объект свободен (логично), только просмотр, ВПФ из контекста формы изменяем реквизиты контекста. Контекст.Форма.Обновить()+Контекст.Записать() - ничего не ругается, все типа ок, форма только на просмотр и реквизиты НЕ изменены (что как бы тоже логично). Тут как бы понятно, но не то что хотелось...
5. Лупа "на просмотр" - Объект свободен (логично), только просмотр, ВПФ из контекста формы изменяем реквизиты контекста. Контекст.Форма.Обновить()+Контекст.Записать() - ничего не ругается, все типа ок, форма только на просмотр и реквизиты НЕ изменены (что как бы тоже логично). Тут как бы понятно, но не то что хотелось...
6. Лупа "на просмотр"+Форма.ТолькоПросмотр(1) - Объект свободен (логично), только просмотр, ВПФ из контекста формы изменяем реквизиты контекста. Контекст.Форма.Обновить()+Контекст.Записать() - ничего не ругается, все типа ок, форма только на просмотр и реквизиты НЕ изменены (что как бы тоже логично). Тут как бы понятно, но не то что хотелось...

итого: при изменении реквизитов контекста формы
- обновление реквизитов на форме (и в объекте) ПРОИСХОДИТ когда объект заблокирован, в пп.1,2 - то что надо
- обновление реквизитов на форме (и в объекте) НЕ происходит когда объект свободен, в пп.2-6 - это не устраивает.

Хочется, значит, в пп.2-6 - в ВПФ проверяем свободен ли объект- документ текущего контекста формы (это сумеем), и если объект-документ свободен -
тогда реквизиты объекта меняем не через контекст формы, а через объект (это тоже сумеем). ОК.
!!! Но после изменения объекта - хочется актуализировать отображение формы, открытой ранее на просмотр, для отображения изменившихся реквизитов.!!!

И тут вот затык -  сделать как из ВПФ переоткрыть форму в режиме просмотра?
И что важно - без правки типовой конфы?!
32 Злопчинский
 
07.04.20
18:54
Всем спасибо, кто участвует.
Ёпрсту - по ссылкам знамо вестимо, но у себя не юзаю. Первое - потрому что блокирвоки на документах я уже не помню когда были, в оперативной работе это вообще несущественно. у мняе девки доки открывают на ввод редко, а если и открывают - то непересекающиеся друг с другом по сферам ответсвенности. И быстрый поиск - хотел впилить, даже пробовал, но тоже парктически неактуально ввиду отствуифя значительной ручной работы с ассортиментом
33 Злопчинский
 
07.04.20
19:00
(22) ну, Добропом я по жизни, это на мисте Злопом. А добропом еще на ИС в районе 2008 г. была публикация учета черных бонусов в ppt,в финише слайдов добропом был.. ;-)
34 Ёпрст
 
08.04.20
00:46
(31) что мешает в ПриОткрытии() влепить

Если Форма.ТолькоПросмотр()=1 тогда
   СтатусВозврата(0);
   ОткрытьФорму(,,0);

?
35 Ёпрст
 
08.04.20
00:47
Только, на сколько я помню, если в пофигураторе режим редактирования установить только на просмотр (всегда , без лупы) то ты её на редактирование ужо никак не откроешь
36 Злопчинский
 
08.04.20
00:50
(35) режим обычный открытия. на редактирвоание
37 Злопчинский
 
08.04.20
00:52
(34) ээээ, не втыкаю.
я хочу из DGA - закрыть форму материнского (для ВПФ) контекста (форма документ ана просмотр) и из ВПФ же открыть эту материнскую форму чтобы увидет сделанные изменения.. - как?
38 Злопчинский
 
08.04.20
00:53
(35) не, он тогда по энтеру будет на просмотр открываться, а через шифт+энтер - на редактирование. я так кстати и делаю у ларечников часто. сразу уходить несколько проблем с задним числом.
39 Ёпрст
 
08.04.20
00:53
(37) # же..открывай хотькучку форм
40 Злопчинский
 
08.04.20
00:53
и у меня в конторе так доки открываются, вроде.. не помню уже...
41 Ёпрст
 
08.04.20
00:59
Да и в 7.7..обычное дело было, для изменения реквизитов дока, открывать тупо форму обработки, которая эммулирует форму самого дока и потом через ссылку дока правит его реквизиты.
Если ты хочешь делать это через контекст открытой формы, то ничто не мешает хранить хоть все значения атрибутов формы где-то еще при открытии впф, потом измененные значения пихай куда угодно, старый контекст закрой, открой новую форму с нужным режимом и перекопируй все атрибуты туда.
42 Ёпрст
 
08.04.20
01:00
Фрагстер, если не ошибаюсь, делал так для ввода на основании, на нимфостарте была поделка
43 Ёпрст
 
08.04.20
01:02
44 Ёпрст
 
08.04.20
01:02
Тип того тебе надо ?
45 Злопчинский
 
08.04.20
01:19
(41) "старый контекст закрой, открой новую форму" - ТУТ МНЕ НУЖЕН ТОТ ЖЕ САМЫЙ ОБЪЕКТ-ДОКУМЕНТ-" с нужным режимом " - ну и как это сделать при вызове DGA из "старого контекста"... где-то туплю, не получается - потому как форма старого контекста закроется (ДокумКонтекст.Форма.Закрыть()) только тогда, когда ВПФ завершит работу процедуры ПриОткрытии(), а переносить код в после открытия чтобф моргало ченить ненужное на экране - не хочется
46 Cthulhu
 
08.04.20
01:46
(31): "!!! Но после изменения объекта - хочется актуализировать отображение формы, открытой ранее на просмотр, для отображения изменившихся реквизитов.!!! " -- так уже ж отвечено! см.(28), 2-й абзац.
в сухом остатке:
- открываешь ОткрытьФорму с 1 в параметре ТолькоПросмотр;
- в ВПФ - печатаешь, находишь объект(!) данных, для которого открыта форма, печатаешь, изменяешь в нем чо надо, записываеь;
- (пере)открываешь ОткрытьФорму с 1 в параметре ТолькоПросмотр - и видишь обновленные данные "в том же месте"
47 Cthulhu
 
08.04.20
01:48
(46)+: именно так - ничего не надо закрывать, тупо такое же ОткрытьФорму - обновление ранее открытой формы без блыманий и с обновлением.
48 victuan1
 
08.04.20
05:13
(0) Бегло прочитал, но так и не понял суть проблемы (может потому что прочитал бегло ;) ).
У меня в ВПФ fr54_ПечатьЧека.ert (у тебя она есть) делается примерно так:
        Попытка
            Если Докум.Записать()=0 Тогда Возврат КонецЕсли;
        Исключение
            Возврат;
        КонецПопытки;

Работает и для Контекст и для ТекущийДокумент().
Если объект заблокирован, то будет сообщение об ошибке и откат действий.
Если передан Контекст, то автоматически обновятся данные на форме документа без всяких "переоткрытий" и "блымканий".

Но в типовой ТИС есть косяк для документа Реализация при передаче данных в ВПФ - вместо Контекст передается ТекущийДокумент() и поэтому возникает блокировка при попытке записать данные через ВПФ в текущий документ.

Решается так (у меня описано в ИзмененияДляКонфигурацииTIS987_54FZ.txt):
12) ВНИМАНИЕ!!! Для корректной работы для документа Реализация типовой ТИС, ред. 9.2 нужно в модуле формы документа в процедуре ПоКнопкеПечать() заменить строчку:
        Параметры.ДобавитьЗначение(?((Модифицированность()=0) и (ПустоеЗначение(ТекущийДокумент())=0), ТекущийДокумент(), глВзятьКонтекст(Контекст)), "Контекст");
на
        Параметры.ДобавитьЗначение(глВзятьКонтекст(Контекст), "Контекст");
49 victuan1
 
08.04.20
05:15
(48) Точнее вот так (забыл вначале сообщить):
        Попытка
            Если Докум.Записать()=0 Тогда Возврат КонецЕсли;
        Исключение
            сообщить("Не удалось записать документ: "+ОписаниеОшибки(),"!!");
            Возврат;
        КонецПопытки;
50 Калиостро
 
08.04.20
07:54
(15) Этот код вставить в ПриОткрытии, чтобы понять, не получишь ли отказ ПриЗаписи.
51 Злопчинский
 
08.04.20
12:15
(46) ну так именно в этом и вопрос - как (пере)открыть форму?
конфигу править/модифицировать не хочется.
Есть ВПФ, вызыванная из формы (форма только на просмотр). как (пере) открыть? - "код, сестра, код!"
52 Cthulhu
 
08.04.20
14:19
(51): блиин... третий раз. (28), 2-й абзац. ОткрытьФррму()
53 Злопчинский
 
08.04.20
14:22
(52) второй раз. Форма - уже открыта. "Открыть форму" не приведет к переоткрытию формы и перечитыванию формой данных объекта.
54 Злопчинский
 
08.04.20
14:24
(52) ладно, может. я тупой, сейчас проверю.
55 Злопчинский
 
08.04.20
14:44
(52) не получается. если форма открыта (для просмотра, например, по лупе) то просто ОткрытьФорму(ДокументКонтекста.ТекущийДокумент(),,1) - ничего не сделает, бо форма уже открыта.
Если форму сначала закрыть (со старыми значениями реквизитов) через ДокументКонтекста.Форма.Закрыть() и потом сделать открытие формы через ОткрытьФорму(ДокументОбъект.ТекущийДокумент(),,1) - то после завершения ВПФ форма старая тупо закрывается и все...
/
вопрос отсался - как переоткрыть форму
56 Злопчинский
 
08.04.20
15:26
Итого: ставлю задачу/проблему
.
Типовая ТиС.
На примере документа, можно взять любой вид документа.
Работа с реквизитом "Комментарий".
Типовой механизм ВПФ. ВПФ имеет доступ к контексту формы документа.
Форма документа м.б. открыта любым способом (интерактивно или программно не суть важно) и видна на экране (программно ОткрытьФорму(,,0), ОткрытьФорму(,,1), интерактивно на редактирование, интерактивно в режиме просмотра, устанавливаемом в коде формы документа через Форма.ТолькоПросмотр(1), интерактивно через лупу на панели инструментов "на просмотр).
ВПФ вызывается из формы документа интерактивно пользователем, по кнопке (штатно в ТиС)
ВПФ должна изменить в документе реквизит "Комментарий" на новое значение.
Новое значение реквизита должно быть записано в документ.
В табло д.б. выведено "старое значение=тутстароезначение" и "новое значение=тутновоезначение".
На экране в результате работы ВПФ должна отображаться форма документа с новым измененным реквизитом.
Форма документа с измененным реквизитом должна отображаться в том же режиме и/или доступе как и форма с первоначальным/старым значением реквизита.
Никаких дополнительных отображений/морганий других форм, кроме формы документа - не должно быть.
Использовать только штатные возможности 1С и типовой конфы ТИС.
_На крайняк_ - можно задействовать формекс/1С++.
.
Это задачка для умных. Хотелось бы ее решить в первую очередь.
.
Для шибко умных - расширенная задача: все это должно работать и в случае нажатия штатной кнопки "Печать" в формах журналов документов (с соотв.уточнениями условий задачи - форма документа при этом открывается программно и вызов ВПФ выполняется в процедуре документа ПриОткрытии() без показа самого документа).
57 Злопчинский
 
08.04.20
15:40
Задачу/проблему в постановке "для умных" пока мне решить не удалось.
Финишный затык - по показу формы с измененными значениями реквизита.
58 Ёпрст
 
08.04.20
15:50
Блин Чебур, заставил достать с полки клюшки.

Да есть там косяк с лупой - при повторном открытии формы данные с объекта не перечитываются совсем, и в коде даже в ПриПовторномОткрытии ты это не поправишь
Но, всё решается формексом из самой впф

вэлком ту код
https://cloud.mail.ru/public/2nd5/5wKADdUMp
59 Ёпрст
 
08.04.20
15:52
Создатели 1с-ины посчитали, что раз она изначально в таком режиме открылась, то и нехрен там менять ничего :))
60 Ёпрст
 
08.04.20
15:52
Но, как известно, в клюшкам нерешаемых проблем нет (почти нет), это же совершенство
61 Злопчинский
 
08.04.20
16:15
(58) Спасибо. Почерпнул полезное.
но,
    Если ФормаСвободна = 0 Тогда
        Сообщить("занято!");
        Конт.Клиентос = Клиентос;
        Конт.ВсякаХрень = ВсякаХрень;
        Конт.Форма.ТолькоПросмотр(ТолькоПросмотр);
        Конт.Форма.Обновить(1);
        //Конт.Записать(); тут вот это хочется, но формула не может выполняться в этом месте
    Иначе
62 Ёпрст
 
08.04.20
16:22
(61) а зачем там запись ?
63 Ёпрст
 
08.04.20
16:27
И это ограничение обходится, если тупо загрузить 1cpp.
64 Ёпрст
 
08.04.20
16:28
там потом за счет встроенной турбобл можно через контекст обращаться к процедурам/функциям
65 Ёпрст
 
08.04.20
16:29
короче ЗагрузитьвнешнююКомпонетну("1cpp.dll") и раскоменти  //Конт.Записать()
66 Злопчинский
 
08.04.20
16:30
для лупы - //ОткрытьФорму(Док.ТекущийДокумент(),Конт); - можно закомментарить, у меня так получилось и все вроде работает тоже как надо.
67 Злопчинский
 
08.04.20
16:32
но если привлекать формекс то тогда уже можно согласиться взамен формекса с некоторыми послаблениями.
переоткрытие формы сделать в DGA через обработку ожидания DGA после завершения ПриОткрытии() в ВПФ... - тогда мургнет на экране и все...
68 Злопчинский
 
08.04.20
16:33
(62) ну. форма на просмотре, но при этом изменена и не записана. через "записать" формы - низя, бо может быть нежелательное перепроведение
69 Злопчинский
 
08.04.20
16:36
(65) просто загрузить 1С++ и раскомментить - недостаточно, ругается
надо наверное явно турбобл вклдчить?
70 Злопчинский
 
08.04.20
16:38
EnableTurboBL: 1 - Конт.Записать() все равно ругается
71 Ёпрст
 
08.04.20
16:50
Ну ё... короче, формекса на всё хватит, занимайся


Процедура Сформировать()
    Если ТипЗначения(Конт) <>100 Тогда
        Предупреждение("Закрыли док ужо",10);
        Возврат;
    КонецЕсли;
    ТолькоПросмотр = Конт.Форма.ТолькоПросмотр(0);
    ФормаСвободна = Конт.Форма.ТолькоПросмотр(0);
    Если ФормаСвободна = 0 Тогда
        Конт.Клиентос = Клиентос;
        Конт.ВсякаХрень = ВсякаХрень;
        Конт.Форма.ТолькоПросмотр(ТолькоПросмотр);
        Сервис = СоздатьОбъект("Сервис");
        Сервис.ВыполнитьПроцедуру(Конт, "Записать");
        Конт.Форма.Обновить(0);
    Иначе
        Док = СоздатьОбъект("Документ.Вася");
        Док.НайтиДокумент(Конт.ТекущийДокумент());
        Док.Клиентос = Клиентос;
        Док.ВсякаХрень = ВсякаХрень;
        Док.Записать();
        //ОткрытьФорму(Док.ТекущийДокумент(),Конт);
        РасшФормы = СоздатьОбъект("РасширениеФормы");
        РасшФормы.УстановитьФорму(Конт.Форма);
        АтрибутФормы = РасшФормы.ПолучитьАтрибут("Клиентос");
        АтрибутФормы.Значение = Клиентос;
        АтрибутФормы = РасшФормы.ПолучитьАтрибут("ВсякаХрень");
        АтрибутФормы.Значение = ВсякаХрень;
        Конт.Форма.Обновить(0);
    КонецЕсли;
КонецПроцедуры
72 Злопчинский
 
08.04.20
17:09
(71) конечно, тут уже извращаться с формексом и прочими доп.примочками можно по всякому.
.
ТолькоПросмотр = Конт.Форма.ТолькоПросмотр(0);
ФормаСвободна = Конт.Форма.ТолькоПросмотр(0);
.
ловкий подход к определению блокировки объекта
73 Ёпрст
 
08.04.20
17:23
(72) во втором случае (с лупой) запись всё равно надо в попытку оборачивать, ибо форму мог открыть кто-то еще на редактирование
74 fisher
 
08.04.20
17:27
Ветка в прошлое. Прям прослезился.
75 Злопчинский
 
08.04.20
18:34
(73) это не та проблема, которая пока вызывает трудность.
готовлю рабочий тестовый примерчик
76 Злопчинский
 
08.04.20
18:34
(74) это тебе не в снеговике тупом тупо галочки расставлять и плеваться на стек вложенности... ;-)
77 Злопчинский
 
08.04.20
18:38
(71) это хорошо.
но нехорошо потому что формекс.
хочется сделать без него.
из любви к искусству. и если не смогу сам то и чтобы всякие ктулхи не выпендривались на словах, а рабочий код дали ;-)
78 Злопчинский
 
08.04.20
18:40
плюс для шибко-шибко умных - форма дока еще вдобавок и МОДАЛЬНО может быть открыта. а это уже значит что закрывать ее нельзя, ибо хз что там после модального вызова стоит...
79 Злопчинский
 
08.04.20
20:11
(73) Ха, Ёпрст, такой финт не сработает:

ТолькоПросмотр = Конт.Форма.ТолькоПросмотр(0);
ФормаСвободна = Конт.Форма.ТолькоПросмотр(0);     

если этот код выполняется в ПриОткрытии() ВПФ и ПриОткрытии() еще не доработала до конца...
обломс самой вкусняшки...
80 Злопчинский
 
08.04.20
20:13
.. соответственно хрен поймешь,ФормаСвободна  - форма документа - заблокировала документ или открыта лупой...
как это еще можно вычислить?
81 Злопчинский
 
08.04.20
20:15
это конечно можно код вынести из ПриОткрытии() в проудуру, которая будет выполняться уже после завершения ПриОткрытии - но это приведет к морганию формы DGA на экране, а это не искусство, а пошлятина...
82 Злопчинский
 
08.04.20
20:33
(73), блин
а откуда Конт в ВПФ возникает?

Перем Конт;
Процедура Сформировать()
    Если ТипЗначения(Конт) <>100 Тогда
        Предупреждение("Закрыли док ужо",10);
        Возврат;
    КонецЕсли;

Опять какой-то шаманский фокус?
83 Злопчинский
 
08.04.20
20:38
Тьфу блин, ПриОткрытии съел.
я уже думаю опять какой-то шаманский фокус
84 Garykom
 
гуру
08.04.20
21:00
(56) Штатно можно запретить отрывать и блокировать документы.

"Открытие" документа по сути создает копию документа и открывает его форму.
Все записи и прочие действия вручную обрабатывать кодом из этой формы нового документа.
85 Ёпрст
 
08.04.20
21:02
(79) тебе в ПриОткрытии впф надо проверить ?
86 Злопчинский
 
08.04.20
21:07
(85) ну, желательно в любом контексте исполнения
87 Ёпрст
 
08.04.20
21:07
И всё же работает и в ПриОткрытии..
ну напиши так, например и проверь:

Процедура ПриОткрытии()
    Конт = Форма.Параметр;    
    
    
    Клиентос = ТекущееВремя();    
    ВсякаХрень = ТекущееВремя();
    Сформировать();    
КонецПроцедуры // ПриОткрытии
88 Ёпрст
 
08.04.20
21:08
это код из впф.
89 Ёпрст
 
08.04.20
21:08
На счет модальности не смотрел, ибо модальность - зло
90 Злопчинский
 
08.04.20
21:10
(84) по существу ниччего не понял из твоего поста.
91 Ёпрст
 
08.04.20
21:14
(90) это обход системных блокировок, описанный на синьоре.
92 Ёпрст
 
08.04.20
21:22
(79) так шта, чего у тя не работает то и где ?
)
93 Злопчинский
 
08.04.20
22:40
ща, сек
94 Злопчинский
 
08.04.20
22:41
(87) проверю уже завтра.
ты вот так вот напиши

    Сформировать();    
    CnfnecDjpdhfnf(0)$ //здесь!!!
КонецПроцедуры// ПриОткрытии
95 Злопчинский
 
08.04.20
22:42
(87)
ты вот так вот напиши

    Сформировать();    
    СтатусВозврата(0); //здесь!!!

КонецПроцедур// ПриОткрытии
96 Злопчинский
 
09.04.20
00:33
Ёпрст, вот ведь, зараза...

Конт.Записать(); - выполняемый до завершения ПриОткрытии() ВПФ - совершенно спокойно записывает Конт.
Конт.Записать(); - выполняемый после завершения ПриОткрытии() ВПФ, в контексте уже открытой формы ВПФ -  хрен там, а не запись Конт - ошибка "Данная команда не может выполняться в формуле элемента диалога!"

неудобно ;-) придется цельную процедуру собственно самой существенной модификации документа делить.. код модификации реквизитов для вызова из разных мест и анализ в каком месте в каких условиях можно выполнить код модификации. а так все красиво почти разложилось...
97 Злопчинский
 
09.04.20
00:33
ну не Епрст - зараза, а ситуация - зараза
98 Злопчинский
 
09.04.20
00:42
и вот еще попутный вопрос.
Допустим есть ВПФ для документа.
Вызывается ВПФ из формы документ штатным образом с передачей параметров.
ВПФ может быть вызвана из формы документа

1. когда форма документа открыта и на экране - ВПФ запускается вне контекста ПриОткрытии() формы документа
и
2. когда форма документа открыта, но еще не экране ВПФ запускается _внутри_ контекста ПриОткрытии() формы документа

Можно ли в самой ВПФ? имея доступ только к контексту формы документа, определить, как вызвана DGA - по 1 или 2..? (желательно без формекса)
99 Cthulhu
 
09.04.20
02:26
(98): в порядке бреда: раскрутить эту (стандартную) ошибку через "ложное закрытие" - никак не получится?
100 Злопчинский
 
09.04.20
02:36
(99) хм, точно - надо попробовать... но это немного другой вопрпос.
вопрос 1,2 - остался
101 Cthulhu
 
09.04.20
02:42
(100): какой именно вопрос?
если ты "раскрутишь" печать из кнопки через ложное закрытие формы - ошибка "Данная команда не может выполняться в формуле элемента диалога" уйдет и печать будет выполняться без ошибок в обоих случаях, описанных в (98)...
или ты о каких вопросах?
102 Злопчинский
 
09.04.20
05:28
(101) ошибку "не может выполняться... " я обошел, тут в чем "тонкость":

если я из КонтекстФормыДокумента (открыто лупой, например) вызываю ВПФ
и в ВПФ ПриОткрытии() сделать КонтекстФормыДокумента.Записать() - то ок!
а вот если форма ВПФ открыта (отработал полностью код ВПФ ПриОткрытии()) и сделать КонтекстФормыДокумента.Записать() уже вне контекста ПриОткрытии() - то получим ошибку.
- и получается что переоткрытие КонтекстФормыДокумента надо разбивать на два этапа
а) КонтекстФормыДокумента.Запись() - в коде ВПФ ПриОткрытии() и
б) КонтекстФормыДокумента.Закрыть() и открыть с уже записанными реквизитами заново в коде ВПФ вне ПриОткрытии()

Причем между а) и б) должна быть пауза, иначе не получится (форма не переоткроется, так как висит еще незакрытая старая)

То есть б) надо выполнять вне ПриОткрытии тоже в два этапа.
б.1 - закрытие старой формы формы, пауза
б.2 - открытие новой формы.

вот такая галиматья у меня получилась если делать без формекса.
С формексом а) и б) можно не делать, вместо этого просто прописать в форму документа (открытого лупой и никак не редактиуемой штатно) новые значения, то вся фигня с а) и б) все проще. но с формексом.

вот так как-то.. уф..
103 DrZombi
 
гуру
09.04.20
05:49
(0) Вы в 7.7 еще попробуйте через обработку выполнить манипуляцию с документом, на который у пользователя нет прав.
Результат вас удивит. Смирись.

А если бы вы еще начали в 7.7 разбирать внутреннюю структуру СУБД, то фразу СУБД вам пришлось бы удалить :)
104 Ёпрст
 
09.04.20
11:09
(94) И ? ВСЁ работает!
105 Ёпрст
 
09.04.20
11:09

Перем Конт;
//*******************************************
Процедура Сформировать()
    Если ТипЗначения(Конт) <>100 Тогда
        Предупреждение("Закрыли док ужо",10);
        Возврат;
    КонецЕсли;
    ТолькоПросмотр = Конт.Форма.ТолькоПросмотр(0);
    ФормаСвободна = Конт.Форма.ТолькоПросмотр(0);
    Если ФормаСвободна = 0 Тогда
        Конт.Клиентос = Клиентос;
        Конт.ВсякаХрень = ВсякаХрень;
        Конт.Форма.ТолькоПросмотр(ТолькоПросмотр);
        Сервис = СоздатьОбъект("Сервис");
        Сервис.ВыполнитьПроцедуру(Конт, "Записать");
        Конт.Форма.Обновить(0);
    Иначе
        Док = СоздатьОбъект("Документ.Вася");
        Док.НайтиДокумент(Конт.ТекущийДокумент());
        Док.Клиентос = Клиентос;
        Док.ВсякаХрень = ВсякаХрень;
        Док.Записать();
        //ОткрытьФорму(Док.ТекущийДокумент(),Конт);
        РасшФормы = СоздатьОбъект("РасширениеФормы");
        РасшФормы.УстановитьФорму(Конт.Форма);
        АтрибутФормы = РасшФормы.ПолучитьАтрибут("Клиентос");
        АтрибутФормы.Значение = Клиентос;
        АтрибутФормы = РасшФормы.ПолучитьАтрибут("ВсякаХрень");
        АтрибутФормы.Значение = ВсякаХрень;
        Конт.Форма.Обновить(0);
    КонецЕсли;
КонецПроцедуры
//======================================================================
Процедура ПриОткрытии()
    Конт = Форма.Параметр;    
    Клиентос = ТекущееВремя();    
    ВсякаХрень = ТекущееВремя();
    Сформировать();    
    СтатусВозврата(0);
КонецПроцедуры // ПриОткрытии
106 Ёпрст
 
09.04.20
11:11
(103) Чем удивит ? Права в обработке не проверяются, мы должны удивится, узнав об этом со времен 7.5 ?
107 Ёпрст
 
09.04.20
11:11
или что ?
108 Ёпрст
 
09.04.20
11:12
(103) Ну, вме известна структура 7.7, как и снеговика, зачем что-то удалять ?
109 Ёпрст
 
09.04.20
11:15
(102) чего у тебя такое отторжение от формекса ? Ну строй ты саму dll в макет впф, При открытии впф проверяй, что ежелм формекса нет, то извлечь dll из макета и установить. Делов-то.
110 Ёпрст
 
09.04.20
11:16
прав на dll никаких не надо в системе, в реестре регистрация не требуется, будет работать у всех всегда.
111 Ёпрст
 
09.04.20
11:19
А без формекса, тебе придётся форму, открытую по лупе, переоткрыть. Что будет заметно - "моргание формы", ибо положение её сдвинется, если не во всё окно было открыто. И сделать ты это можешь в ложном закрытии впф.
112 Cthulhu
 
09.04.20
13:16
(102): "а вот если форма ВПФ открыта (отработал полностью код ВПФ ПриОткрытии())" -- а если попробовать вызвать процедуру печати через ОбработкаОжидания("ПечатьВпфМоя",1);
113 Злопчинский
 
09.04.20
15:19
(109) нормально у меня все с формексом.
Без него плохо. ;-)
114 Злопчинский
 
09.04.20
15:20
(111) переоткрытие я через форма.обработкаожидания сделал
115 Злопчинский
 
09.04.20
15:21
(112) ну, так и сделал, только не весь код, а только переоткрытие формы...
116 Злопчинский
 
09.04.20
15:52
А
РасшФормы = СоздатьОбъект("РасширениеФормы");
- разве доступен в контексте ПриОткрытии()..?
вроде раньше всегда говорили что надо это делать в ПослеОткрытия()..?
117 Ёпрст
 
09.04.20
16:21
(116) всегда был доступен
118 Ёпрст
 
09.04.20
16:21
считай это, недокумментирванной фичей )
119 Ёпрст
 
09.04.20
16:22
тем более, что ты применяешь его не к этой форме, а к форме прилетевшего контекста
120 Злопчинский
 
09.04.20
17:34
(105) так не работает. для формы открытой на редактирование или Форма.ТолькоПросмотр(1) - признак модифицированности формы остается. надо в форму документа добавлять ЗаписатьДокумент() и через Сервис эту процедуру вызывать

//======================================================================
Процедура ЗаписатьДокумент()
    Записать();    
КонецПроцедуры // ЗаписатьДокумент()

    //Конт.Записать();
        Сервис = СоздатьОбъект("Сервис");
        Сервис.ВыполнитьПроцедуру(Конт, "Записать"); //так не работает
        Конт.Форма.Обновить(0);

    //Конт.Записать();
        Сервис = СоздатьОбъект("Сервис");
        Сервис.ВыполнитьПроцедуру(Конт, "ЗаписатьДокумент"); //так работает. но это надо править форму документа, бяка
        Конт.Форма.Обновить(0);

Хотя, просто

    Конт.Записать();
        Конт.Форма.Обновить(0);

работает во всех случаях норм
121 Злопчинский
 
09.04.20
18:10
Тьфу,блин
(120) - считать неверным написанное
Конт.Записать() - неверно написал в предыдущем...
Конт.Записать() - ругается
.
надо отдохнуть.. клинит...
122 Ёпрст
 
09.04.20
22:39
(121) где ты в моём коде увидел Конт.Записать ? Приём.. смотри вниматочно ))
123 Ёпрст
 
09.04.20
22:41
и.. всё работает, смотри в демо-конфе моей.
124 Злопчинский
 
09.04.20
23:14
(123) угу, разобрался уже, норм все.
125 Ёпрст
 
09.04.20
23:19
(124) самоизоляция на тебя дурно влияет
126 Злопчинский
 
09.04.20
23:28
(125) Спасибо, ты добр как никогда ;-)
127 Злопчинский
 
10.04.20
20:31
Усе получилось, тупил малость...
.
но вот есть вопрос.
впф вызвана из контекста формы-родителя документа.
.
как в ВПФ, имею доступ к контексту формы-родителя документа, определить что впф вызвана из контекста уже открытой формы -родителя или что код ВПФ выполняется в контексте процедуры ПриОткрытии формы-родителя? Попробовать что-то исполнить/обратитьсякчему-то что есть доступ только при открытой форме-родителя, вне контекста ПриОткрытии?
128 Cthulhu
 
11.04.20
00:44
// (127):
// Добавь на форму флажок ФлПриОткрытии (можно невидимый)
// Добавь на форму текстовый реквизит с формулой "ШаУжоОткрыли()"
ФлПриОткрытии = 1; // в ПриОткрытии в самом начале процедуры
ФлПриОткрытии = 0; // в функции ШаУжоОткрыли
// и в любом месте через контекст проверяй типа КонтекстВызова.ФлПриОткрытии
129 Злопчинский
 
11.04.20
01:39
(128) это неспортивно.
есть ВПФ. в ней я могу делать все.
есть форма-родитель. я в ней делать ничего не могу.
130 Cthulhu
 
11.04.20
03:30
(ё29): а как ты впф то добавляешь (и/или вызываешь) если "делать ничего не можешь"????
131 Злопчинский
 
11.04.20
15:51
(130) Очень просто. создал ВПФ. положил там где должна лежать DGA/
ВПФ подхватывается и используется типовым механизмомм типовой конфиги.
Никогда с ВПФ не работал?
132 Cthulhu
 
12.04.20
21:43
(131): на УФ через БСП? да, там без правки формы документа - подтягивается в список кнопки печати автоматом.
так?
133 Злопчинский
 
13.04.20
00:01
(132) не, вы отстали от жизни, это для 77
134 Cthulhu
 
13.04.20
01:17
(133): да я упомянул единственный мне известный способ прикручивания печ.формы без изменения кода формы.
так что все еще жду ответа на (130).
135 Злопчинский
 
13.04.20
02:15
(134) а что непонятного в (131) с учетом того что (131) используется в 7.7?
136 Ёпрст
 
13.04.20
10:15
(127) из закрытой формы впф не вызвать же :)
узнать, что форма еще открыта, можно проверив на тип контекста, если =100, то форма-родитель еще открыта.
137 Ёпрст
 
13.04.20
10:16
И да, каким образом, открытие впф у тебя попадёт в ПриОткрытии формы документа, если как ты говоришь, доступа к изменению этого документа у тебя нема ?
138 Злопчинский
 
13.04.20
13:19
(137) потому что надо знать типовые 77! ;-)
штатно все, типовая тиС. В журналах документов есть кнопка "Печать", по которой для текущего документа вызывается документ с параметром ("ПечатьНаЭкран","Команда"), а в документе ПриОткрытии() отрабатывает вызов последней использованной ВПФ
139 Ёпрст
 
13.04.20
13:27
(138) нет там такого:

"а в документе ПриОткрытии() отрабатывает вызов последней использованной ВПФ"
140 Ёпрст
 
13.04.20
13:28
Там всего лишь идёт заполнения списка впф для этой формы (который надо выкинуть оттуда к едрени фени, для открытия формы быстрее раз в 10)
141 Злопчинский
 
13.04.20
13:40
(139) есть там такое. в контексте ПриОткрытии отрабатывает код.
    // Заполним таблицу для выбора печатной формы
    НомерТекущейФормы = глУстановкаКнопкиПечать(Контекст, "Документ." + Вид(),ТаблицаПечФорм); //**************** здесь ВПФ
    
    Парам = Форма.Параметр;
    Если ТипЗначенияСтр(Парам)="СписокЗначений" Тогда
        Если ПустоеЗначение(Парам.Получить("Команда"))=1 Тогда
            Сообщить("В форму документа "+Вид()+" передан неверный параметр!","I");
            СтатусВозврата(0);Возврат;
        КонецЕсли;
        Если Парам.Получить("Команда") = "ПечатьНаПринтер" Тогда
            КолЭкз = Макс(Число(Парам.Получить("КолЭкз")),1);
            ПоКнопкеПечать(1,КолЭкз);
            СтатусВозврата(0);Возврат;
        ИначеЕсли Парам.Получить("Команда") = "ПечатьНаЭкран" Тогда
            ПоКнопкеПечать(0);                //************************** ЗДЕСЬ ВПФ
            СтатусВозврата(0);Возврат;
        Иначе
            Сообщить("В форму документа "+Вид()+" передана неверная команда "+Парам.Получить("Команда")+"!","I");
            СтатусВозврата(0);Возврат;
        КонецЕсли;
    КонецЕсли;



вот здесь
    НомерСтроки = глПолучитьТекущуюПечФорму(ВидОбъекта, ТаблицаПечФорм); // ****** вот здесь......
    Если НомерСтроки = 0 Тогда
        ЗагловокКнПечать = "Печать";
    Иначе
        ЗагловокКнПечать = ТаблицаПечФорм.ПолучитьЗначение(НомерСтроки, "Кнопка");
    КонецЕсли;

    Возврат НомерСтроки;
    
КонецФункции // глУстановкаКнопкиПечать()

Функция глПолучитьТекущуюПечФорму(ВидОбъекта, ТаблицаПечФорм) Экспорт
    
    Перем ИмяПечФормы, НомерСтроки;
    
    НомерСтроки = 0;
    
    Если ТаблицаПечФорм.КоличествоСтрок() > 0 Тогда
        ИмяПечФормы    = ВосстановитьЗначение(ВидОбъекта + "ПечФорма"); //***********вот здесь
142 Ёпрст
 
13.04.20
13:55
(141) гы.. т.е ты отправляя на печать форму, хочешь изменять реквизиты в документе ? Зачем ?!
143 Ёпрст
 
13.04.20
13:55
Тебя куда-то не туда заносит
144 Ёпрст
 
13.04.20
13:56
И тем более, передать параметр в форму дока ты можешь только написав это кодом, из обработки или еще откуда. Тогда нафига это всё ? Если в обработке и так можешь поменять что угодно.
145 Злопчинский
 
13.04.20
14:01
(142) ну ты, епрст!
использую DGA как плугин, хоть для печати этикеток, хоть для изменения реквизитов, хоть для выгрузки в иксемель итд.
146 Злопчинский
 
13.04.20
14:02
(144) я ничего не пишу в типовой. это УЖЕ написано.
я просто подсовываю только ВПФ, которяа делает что надо. И всё. в типовой больше ничего не пишу.
147 Ёпрст
 
13.04.20
14:11
(145) Праильно. Ты решаешь задачу через жпо.
148 Ёпрст
 
13.04.20
14:12
Зачем Использовать механизм впф для изменения реквизитов дока из своей обработки ?!
149 Злопчинский
 
13.04.20
14:22
(148) потому что мне так удобно. и клиенту так удобно. и ничего не надо никуда вносить/исправлять.
скопировал два файла в прнформс и плугин установлен.
.
что не нравится-то?
150 Ёпрст
 
13.04.20
14:25
(149) То, что код В ПриОткрытии у документа для "печати" у дока будет вызван из групповой обработки
151 Ёпрст
 
13.04.20
14:25
В которой все эти телодвижения не нужны и вредны
152 Злопчинский
 
13.04.20
14:37
(150) "То, что код В ПриОткрытии у документа для "печати" у дока будет вызван из групповой обработки"
- пока никакой групповой обработки не используется для этой ВПФ.
И использование этой ВПФ в режиме групповой обработки - не предполагается.
153 Злопчинский
 
13.04.20
14:38
(немного в сторону, для обсуждения - если таковое будет - после: и даже если эта ВПФ будет в режиме групповой обработки - ну и что? будет на каждый документ из групповой обработки вываливать диалог "ввода значений реквизитов")
154 Ёпрст
 
13.04.20
14:39
(152) Как это ?!
А нахрена тогда ты спрашиваешь про открытие впф из кода в ПриОткрытии() у документа ?!
155 Ёпрст
 
13.04.20
14:39
И потом все эти вопросы в ранее про ЭТО ?
156 Злопчинский
 
13.04.20
15:23
(154) потому что:

если форма документа открывается в режиме "только чтение" и контекст формы ПриОткрытии - завершен и форма открыта, То для обновления отображения исправленных реквизитов - надо форму "переоткрыть".

если форма документа открывается в режиме "только чтение" и контекст формы ПриОткрытии - не завершен (и после исполнения ПриОткрытии форма документа не откроется стстаусвовзврат(0) - как при передачи "команды"), то и форму документа в самой ВПФ не надо переоткрывать.
157 Злопчинский
 
13.04.20
15:25
(155) "все эти вопросы в ранее про ЭТО"
- нет, куча вопросов была и они успешно решены.

остался вопрос в (127)
158 Ёпрст
 
13.04.20
15:30
(156)
>>>код ВПФ выполняется в контексте процедуры ПриОткрытии формы-родителя?

Вот это возможно только в какой-либо обработке
159 Ёпрст
 
13.04.20
15:31
А там, всё это (впф) не нужно.
160 Ёпрст
 
13.04.20
15:34
Если уж очень хочется, то в своей обработке подключай класс.Перехватчика и паси любые штатные процедуры и меняй их на что хочешь.
Сам класс, не обязвтельно при этом иметь в конфе.
161 Злопчинский
 
13.04.20
19:18
(160) фу, бяка.
из любви к искусству хочу максимально штатно.
162 Злопчинский
 
13.04.20
19:20
(158) "код ВПФ выполняется в контексте процедуры ПриОткрытии формы-родителя?
Вот это возможно только в какой-либо обработке"
-
в смысле..?
необязательно в какой-то обработке.
Формажурнала, кнопка - запускает процедуру - процедура вызывает ОткрытьФорму(текДок,Параметры,1).
Форма документа - запускается ПриОткрытии - запускается ВПФ по переданному параметру/ пока что никаких обработок кроме самой ВПФ.
163 Cthulhu
 
14.04.20
00:35
а можно еще через попытку-исключение.
если выполнится попытка - значит это в контексте приоткрытии.
если перескочит в исключение - значит это в контексте формы (по кнопке на морде). можно дополнительно убедиться в этом проанализировав описаниеошибки.
вот и проанализировали штатно, Серег, а?..
164 Злопчинский
 
14.04.20
01:18
(163) "через попытку-исключение." - что именно?
165 Cthulhu
 
14.04.20
03:10
(164): в каком месте у тебя ошибка лезет "...невозможно из формулы..."
166 Калиостро
 
14.04.20
07:00
(163) Я это предлагал в (14). Почему-то не устроило.
167 Злопчинский
 
14.04.20
08:56
(166) то что в (14) решено уже.
168 Ёпрст
 
14.04.20
10:54
(157) Если типовая, то так

Если ПустоеЗначение(Конт.Форма.АктивныйЭлемент()) = 1 Тогда
    Сообщить("открыли из приОткрытия()");
Иначе
    Сообщить("открыли по кнопке");
КонецЕсли;
169 Злопчинский
 
14.04.20
11:32
(168) О, спсб! а то я думал ты с 8-кой уже квалификацию потерял...
170 Ёпрст
 
14.04.20
11:40
(169) метод не совсем правильный, если у кнопки не будет идентификатора, то облом.
Но, в типовых, вроде как он везде назначен..
171 Злопчинский
 
14.04.20
11:41
(170) не, не везде.
но это не сильно принципиально.
172 Злопчинский
 
14.04.20
11:52
(168) вкрутил, вроде все ок, спсб.
Закон Брукера: Даже маленькая практика стоит большой теории.