Имя: Пароль:
1C
1C 7.7
v7: "АктивизироватьОбъект" в Списке справочника после программного копирования
0 Dolly_EV
 
15.09.14
08:33
Справочник.Номенклатура
в процедуре "ВводНового()" если Скопирован=1 - идет перенаправление в обработку, которая копирует по желанию подчиненные справочники (Единицы, Цены и т.д.)
В итоге имеет открытую форму нового (скопированного, уже записанного) элемента. Так вот, клиент хочет по закрытию этой формы оказаться в списке справочника на ЭТОМ элементе (а не на том, с которого копировали).
Собственно сабж: как? (с минимальными затратами).
1 kupec
 
15.09.14
09:31
Создать глобальную переменную типа КодНовгоЭлемента, после записи скопированного элемента, записывать в эту переменную новый код, собсно дальше искать по коду товар и активировать его на форме, первое что пришло в голову
2 Dolly_EV
 
15.09.14
10:09
(1) "дальше искать по коду товар и активировать его на форме" и для этого ОбработкуОжидания отдельную организовать в форме списка?)) не, это не "минимальные затраты"
3 kupec
 
15.09.14
10:45
а если на форму списка повесить функцию проверяющую значение КодНовогоЭлемента и при значении отличном от нуля активизировать элемент, после активизации переменную в 0
4 Ёпрст
 
15.09.14
10:48
(0) вообще -то это штатное поведение платформы. Как ты его сломал - хз
5 Ёпрст
 
15.09.14
10:49
при нажатии на F9 будет открыта форма нового "скопрированного" элемента, при его закрытии, в форме списка будет активным именно этот элемент
6 kupec
 
15.09.14
10:50
(4) действительно так и есть
7 FN
 
15.09.14
11:22
(0) Сделай перенаправление в свою обработку из формы нового элемента из процедуры ПриЗаписи при условии Выбран(0) и ПустоеЗначение(ОбъектКопирования)=0
только не забудь принудительно записать элемент перед вызовом обработки.
8 Dolly_EV
 
15.09.14
11:56
(4) - "программное" копирование. В форме элемента справочника:

Процедура ВводНового(Копирование,Элем)
    Если Копирование = 1 Тогда
        СтатусВозврата(0);
        //** Копирование с подчиненными
        СписПарам=СоздатьОбъект("СписокЗначений");
        СписПарам.ДобавитьЗначение(Элем,"ИсхЭлемент");
        лСтрокаПодчСпр="Единицы,СвойстваНоменклатуры,Цены*,ШтрихКодСпр*";
        СписПарам.ДобавитьЗначение(лСтрокаПодчСпр,"ФильтрПодчСпр");
        лСтрокаИсклРекв="Автор,БазоваяЕдиница,ОсновнаяЕдиница,Алкоголь,РеквШтрихкодБазовой,РеквШтрихкодОсновной";
        СписПарам.ДобавитьЗначение(лСтрокаИсклРекв,"ИсключитьРеквивиты");
        ОткрытьФорму("Обработка.ОбработкаКопирования",СписПарам);
        Возврат;
        //** Копирование с подчиненными
    КонецЕсли;
    
КонецПроцедуры // ВводНового()


Т.е. СтатусВозврата(0), т.е. для 1С - "НЕ копируем", а создание и запись скопированного происходит в "Обработка.ОбработкаКопирования"

(7) так оно бы помогло, да (если записывать новый скопированный в родной форме), но там при копировании есть куча условий, когда оно может не состояться. + сделано "универсально" для нескольких справочников. В общем, задачка усложнена тем, что СтатусВозврата(0) при "штатном" срабатывании "ВводНового()"
9 Ёпрст
 
15.09.14
11:58
(8)

в свою поделку передавай контекст формы открытой формы списка, в приЗакрытии в поделке делай Конт.АктивизироватьОбъект.. усё.
10 Dolly_EV
 
15.09.14
11:59
(9) как этот контекст отловить в "ВводНового" элемента??
11 Dolly_EV
 
15.09.14
12:03
(9) + нет "ПриЗакрытии()" в поделке - там СтатусВозврата(0) в "ПриОткрытии"
12 Ёпрст
 
15.09.14
12:03
(10) храни его где -нибудь, например
13 Ёпрст
 
15.09.14
12:04
хоть, в глоб. переменной
14 Dolly_EV
 
15.09.14
13:06
(12)(13) Угу, получилось. Но нехороший эффект присутствует:
Иногда нормально отрабатывает, иногда активизируется группа-родитель вместо элемента. Т.е. курсор "выпрыгивает" на верхний уровень (такое ощущение, что просто не успевает дооткрыться на новом элементе). 50/50
15 Dolly_EV
 
15.09.14
13:08
+(14) Активизировать пытаюсь в ОбработкеКопирования:

СписДляФормыСпр = СоздатьОбъект("СписокЗначений");
СписДляФормыСпр.ДобавитьЗначение(1,"Скопирован");
ОткрытьФорму(Спр.ТекущийЭлемент(),СписДляФормыСпр);
    Если лВидСпр="Номенклатура" Тогда
        Попытка
глСпрНоменклатураФормаСписка.АктивизироватьОбъект(Спр.ТекущийЭлемент());
        Исключение
        КонецПопытки;
    КонецЕсли;
16 lavalit
 
15.09.14
14:49
А если установлен формекс, то можно еще покуролесить в "ПослеЗакрытия(Контекст)" в Глобальном модуле... оно срабатывает при закрытии любой формы... так в ней можнопроверить что закрываетсяф и ежели вдруг это та самая форма - сделать какие то действия... уж точно "нехороший эффект" в (14) будет убит
17 Dolly_EV
 
16.09.14
03:41
(16) в "ПослеЗакрытия" (локально и глобально) сразу и пробовал "куролесить" - валится 1С-ина
18 Злопчинский
 
16.09.14
03:52
(8) это нифига не программное копирование. это обычное интерактивное копирование.
19 Злопчинский
 
16.09.14
03:53
916) блин! ij; вы раншье молчали что в формексе есть такая фигня! мне бы на порядок проще было программить!!!
20 Dolly_EV
 
16.09.14
05:57
(18) вначале оно интерактивное, но потом СтатусВозврата(0) (т.е. отмена действия) и далее - программное
21 Dolly_EV
 
16.09.14
05:57
(19) :-))
22 Dolly_EV
 
16.09.14
06:06
Вобщем, в "ПослеЗакрытия" если делать быстро - падает 1С-исна. Если "вдумчиво" (подвигать форму, закрыть не Esc, а "крестиком") - нормально отрабатывает.
23 Dolly_EV
 
16.09.14
06:14
+(22) Уточнение: падает ,только если закрываем кнопкой "Закрыть" (с единственной формулой "#Закрыть") или по Esc. Если закрываем "крестиком" - все Ок отрабатывает и не падает.

в "ПриЗакрытии()" элемента ничего криминального
24 Ёпрст
 
16.09.14
09:42
можно еще в СписокВсехОткрытыхОкон найти нужный контекст и активизировать там что угодно
25 Dolly_EV
 
16.09.14
11:31
(24) попробовал через "Список.." - эффект тот же - "выпрыгивает" на родительский уровень
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.