Имя: Пароль:
1C
1C 7.7
v7: Открыть форму
0 AliAksA
 
10.07.18
08:18
Привет всем !

Необходим справочник, в котором все элементы - группы.
Задача: при вводе нового элемента открыть форму ввода группы.
Не удалась попытка прописать в форме элемента:

//******************************************************************
Процедура ВводНового()
    
    текРодитель = ПолучитьАтрибут("Родитель");
    ОткрытьФорму("Справочник.АдреснаяСистема", , текРодитель, 1);
    СтатусВозврата(0);
    
КонецПроцедуры // ВводНового()
//******************************************************************

Я так понял что из формы элемента форму группы не откроешь.
Как перехватить событие ввода нового элемента из формы списка?
Ну буду также рад любым соображениям по этому поводу.
Заранее благодарю.
1 uno-group
 
10.07.18
08:40
ПриОткрыти()
Если Выбран()=0 Тогда
....
КонецЕсли;
СтатусВозврата(0);
Возврат;
2 AliAksA
 
10.07.18
08:41
(1) пробовал - такая же ... - не взлетело
3 uno-group
 
10.07.18
08:46
ТекРодитель=родитель.
А что говорит?
еще как вариант сделать им одинаковую форму. А в
ПриЗаписи()
Спр=СоздатьОбъект();
Спр.НоваяГРуппа();
Спр.Родитель=Родитель;
Спр.Наименование=Наименование;
Спр.Записать();
СтатусВозврата(0)
ФормаЗакрыть(0);
Возврат;
хотя скорее всего в призаписи не даст из-за транзакции. там нужно будет какой то флаг выставлять и писать в ПриЗакрытии();
4 SleepyHead
 
гуру
10.07.18
08:48
В форме списка перехватывайте событие "ПриВводеСтроки", а не "ВводНового".
5 uno-group
 
10.07.18
08:50
Можно вообще подменять форму на внешний отчет типа такого
И бальше уже из отчета изменять и писать элементы справочника.
Процедура ПриОткрытии()
Элт=ТекущийЭлемент();
СтатусВозврата(0);
спОпц=СоздатьОбъект("СписокЗначений");
спОпц.ДобавитьЗначение("Изменение","Режим");
спОпц.ДобавитьЗначение(Элт,"Элемент");
ФИЛ=СокрЛП(КаталогИБ())+"MyProg\ПросмЭлемСпрКонтр.ert";
ОткрытьФорму("Отчет",спОпц,ФИЛ);
возврат;
6 AliAksA
 
10.07.18
08:53
(4) не катит - много элементов - только диалогом
7 AliAksA
 
10.07.18
08:54
(5) слишком геморойно ...
8 AliAksA
 
10.07.18
08:57
+(0) подключены клюшки v7plus.dll, 1Cpp.dll, FormEx.dll ... но в них пока ничего не нашел (
9 SleepyHead
 
гуру
10.07.18
09:00
(6)

В форме списка перехватываете событие ВводНового()
В нем прописываете СтатусВозврата(0), чтобы не происходило стандартного создания элемента или формы

и вызываете открытие формы элемента справочника, передавая туда вторым параметром данные для создания группы

Примерно так:

Процедура ПриВводеСтроки()
   СтатусВозврата(0);

   ПараметрыОткрытия = СоздатьОбъект("СписокЗначений");
   ПараметрыОткрытия.Установить("ИмяНовойГруппы", "");
   // и так далее
   ОткрытьФорму("Элемент.ХХХ", ПараметрыОткрытия,,1)
КонецПроцедуры

А в форме элемента того справочника перехватывайте процедуру ПриОткрытии и читайте значения из Форма.Параметр, это и будет список ПараметрыОткрытия.
10 SleepyHead
 
гуру
10.07.18
09:01
Возможно, ошибся с СтатусВозврата(), давно не программировал на 1с77

Если там не взлетит, поковыряйте ПриВводеНовойСтроки(), должно там сработать. Код тот же.
11 uno-group
 
10.07.18
09:05
или в
Процедура ВводНового()
Предупреждение("Даун нажми кнопку ввод новой групы");
СтатусВозврата(0);
КонецПроцедуры
12 HawkEye
 
10.07.18
09:05
(0) пффф..
в элементе:
Процедура ВводНового(признакКопирования)
    ТекущийРодитель = Родитель;
    ОткрытьФорму("Обработка.СоздатьГруппу",ТекущийРодитель);
    СтатусВозврата(0);
    Возврат;



в обработке СоздатьГруппу:

Процедура ПриОткрытии()
    вхРодитель = Форма.Параметр;
    ОткрытьФорму("Элемент.Контрагенты",,вхРодитель ,1);  
    СтатусВозврата(0);
    Возврат;
КонецПроцедуры
13 AliAksA
 
10.07.18
09:10
(10) лучше не советуй ... должно и делает - разные весчи
(11) это ты щас извращенцу позу миссионера предложил)
(12) а вот это уже интересно ...
14 SleepyHead
 
гуру
10.07.18
09:12
(13)  Ну как скажешь )) все равно тебе разбираться и проверять.
15 AliAksA
 
10.07.18
09:13
(14) я уже давно твои предложения проверил - если бы взлетели - сюда бы не писал, но все равно спасибо)
16 SleepyHead
 
гуру
10.07.18
09:16
(15) Обращайся, тут всегда рады поддержать беседу, даже если ничего не поняли.

А на 1с77 я где-то с 2016 года не программировал, уже и забыл все. Удачи.
17 Cthulhu
 
10.07.18
09:20
СП отобрали я так понимаю?.. недорого продам есичо.
Открытие формы нового элемента справочника.
ОткрытьФорму(<ОписательОбъекта>, <КонтекстФормы> , <ГруппаРодитель>, <ФлагГруппы>, <ЭлементВладелец>)
<ОписательОбъекта>    Строковое выражение."Элемент. ХХХХХ", где ХХХХХ — вид справочника;
.......
sic! "Элемент." а не "Справочник." - попробуй в своем коде (0)
18 HawkEye
 
10.07.18
09:23
(14) если стоит признак "редактировать в диалоге" ни вводНового ни ПриВводеСтроки - не отрабатывают, кроме этого форм списка может быть несколько
19 Cthulhu
 
10.07.18
09:26
(17)+ только что проверил - в форме элемента:
Процедура ВводНового(ПризнКопирования)
    ОткрытьФорму("Элемент."+Вид(),,Родитель,1);
    СтатусВозврата(0); Возврат;
    .......
- взлетает на раз-два. что я не так делаю?
20 AliAksA
 
10.07.18
09:28
(12) как ни крутил - не взлететает почему-то, а жаль - идея хорошая была
21 AliAksA
 
10.07.18
09:29
(18) пробовал ставить и в списке - все равно не взлетает
22 AliAksA
 
10.07.18
09:32
(19) ВАУ!!!! зачет, респект (надо было Элемент а не справочник юзануть)
Всем участникам огромное спасибо! ТЕМА ЗАКРЫТА
23 Cthulhu
 
10.07.18
10:21
(22): Тут такой ещё момент. Если ты, конечно, как и я - перфекционист. Код (19) - делает пропуск кодов (если у тея автонумерация+автоприсвоение) - потому что в открываемой форме код авто-инкрементируется от текущего элемента. Для того, чтобы эту достадную мелочь исправить - код полностью будет вот такой:
Процедура ВводНового(...) //предопределенная
Перем тКонт;
ОткрытьФорму("Элемент."+Вид(),тКонт,Родитель,1,Владелец); Если Метаданные.Справочник(Вид()).АвтоНумерация
*Метаданные.Справочник(Вид()).ДлинаКода<>1 Тогда Если ТипЗначенияСтр(тКонт)="ГрупповойКонтекст"
Тогда тКонт.Код=Код; тКонт.Форма.Обновить(1); КонецЕсли КонецЕсли; СтатусВозврата(0); Возврат;
// "тКонт.Форма.Обновить" надо для того чтобы код сразу новый показало - иначе старый с пропуском остается висеть...
24 Salimbek
 
10.07.18
10:24
+(23) Ну уж если перефкционизмом страдать, то по полной! Надо добавить проверку - не находишься ли ты на максимальном уровне справочника.
25 Cthulhu
 
10.07.18
10:25
(23)+ вкралась ошибка - не "<>1 Тогда" а ">1 Тогда"
тогда оно универсальное - копипасти в любую форму любого элемента
26 Cthulhu
 
10.07.18
10:25
(24): а вот это как раз - пофик абсолютно. для корня будет создано в корне как и положено (с пустым родителем) ;)
27 Cthulhu
 
10.07.18
10:26
(24): ой на максимальном. ты прав, извини, я в (26) ошибся
28 Cthulhu
 
10.07.18
10:30
(24): да, добавить после Перем
Если Метаданные.Справочник(Вид()).КоличествоУровней=Уровень()
Тогда Предупреждение("А, блин, некуда уже добавлять!",11); СтатусВозврата(0); Возврат; КонецЕсли;
29 HawkEye
 
10.07.18
16:34
(20) если руки выпрямить - отлично взлетит... у меня по крайней мере - летает только так....
30 HawkEye
 
10.07.18
16:42
(23) на кой такие сложности, когда код элемента можно передать параметром вместе с родителем, и присвоить его группе....

надо только в форме группы дописать
Процедура ВводНового()
    Если ПустоеЗначение(Форма.Параметр) = 0 Тогда
        Код = Форма.Параметр;
    КонецЕсли;
КонецПроцедуры
31 AliAksA
 
11.07.18
08:31
(23) и (30) ещё раз спасибо за внимание, на будущее пригодится.
В данном случае Код в справочнике "АдреснаяСистема" по сути - почтовый индекс - не уникален и не автоопределяем - копируется в новый элемент с родителя.