Имя: Пароль:
1C
1С v8
Как выловить запись нового элемента в подчиненном спр. из спр.владельца?
0 crisalis
 
05.09.16
14:16
Добрый день, что то я запутался, распутайте пожалуйста , как выловить создание нового элемента справочника КонтактныеЛицаКонтрагентов из спр.Контрагенты ? (ОФ)

Пробывал событие списка ОбработкаЗаписиНовогоОбъекта(Элемент,Объект, СтандартнаяОбработка ) , но не попадаю отладчиком туда , запись контактного лица происходит и в списке на форме он отражается.

Мне надо выловить это, чтобы проверить на установку основного контактного лица в спр.Контрагенты.

Заранее благодарен.
1 Vaflya
 
05.09.16
14:19
ПередЗаписью?
2 crisalis
 
05.09.16
14:24
(1) Перед записью чего ? Если спр.Контрагенты то не подходит так как пользователь может работать уже с другими данными отличающихся от Контактной информации. Или ПередЗаписью контакной ? а как мне потом от туда по вопросу установить основное контактное лицо ?
3 lxs
 
05.09.16
14:29
(0) Поставь задачу нормально, у тебя херня какая-то изображена тут. Тебе в финале что нужно сделать?
4 lxs
 
05.09.16
14:30
(3)+ или опиши весь процесс от и до, как он должен быть в твоем понимании со всем уксловиями
5 lxs
 
05.09.16
14:30
*всеми условиями
6 crisalis
 
05.09.16
14:34
(3) (4) так он и есть в понятии, вроде =). Хочу после ввода нового контактного лица контрагента спросить у пользователя установить ли его основным или нет , если да тогда рекв.ОсновноеКонтактноеЛицо заполняется, нет тогда ничего.
7 lxs
 
05.09.16
14:38
(6) ПриЗаписи элемента справочника КонтактныеЛица спрашивай (именно при записи, а не перед, потому что Перед у тебя ссылки нет, устанавливать нечего).
8 Vaflya
 
05.09.16
14:38
ну, а что мешает то "по вопросу установить основное контактное лицо ?"
9 lxs
 
05.09.16
14:42
(8) логика, человек картины в целом не видит
10 crisalis
 
05.09.16
14:45
(8) нет подходящего события (или я его не заметил) в табличном поле "КонтактныеЛицаКонтрагента" , вопрос пользователю надо задавать после записи в спр. КонтакнойИнформацииКонтрагентов а не перед записью спр.Контрагенты.
(9) ну, с кем не бывает , вот и прошу людей чтобы помогли.
11 Vaflya
 
05.09.16
14:46
а, это реквизит Контрагентов.. тогда можно и послезаписи()
12 crisalis
 
05.09.16
14:47
(11) не понял что вы имеете ввиду
13 Vaflya
 
05.09.16
14:48
ну задавать вопрос перед записью контрагента совсем неинтересно - придется предлагать сначала создать контактное лицо, только потом можно ссылку поставить
14 crisalis
 
05.09.16
15:00
(13) а мне так не надо , я хочу (такая задача) сразу же как пользователь создал КЛ спрашивать установить его или нет как основное.
15 RomanYS
 
05.09.16
15:02
смоделировал (0) на пустой конфигурации, ОбработкаЗаписиНовогоОбъекта работает
16 crisalis
 
05.09.16
15:03
у меня не работает ((((
17 crisalis
 
05.09.16
15:03
(15) именно для КонтактнойИнформации ???
18 crisalis
 
05.09.16
15:06
(17) спрашиваю потому как для таб.поля БанковскиеСчета это событие у меня отрабатывает а вот для таб.поля КонтактныеЛицаКонтрагента не хочет, зараза работать, хоть тресни ((((
19 RomanYS
 
05.09.16
15:12
конфигурация то какая?
20 lxs
 
05.09.16
15:13
(18) (18) ты зачем устраиваешь геморрой? Либо в подписке, либо на форме делаешь процедуру ПриЗаписи, ну, или ПослеЗаписи. и всё. Там всё делаешь.

Тебе надо учесть лишь то, что это должно выполняться ТОЛЬКО на клиенте, иначе получишь эксепшн и проблемы с обменами.
21 crisalis
 
05.09.16
15:15
(19) УТ для Молдовы, как российская 10,3 (примерно)
22 Vaflya
 
05.09.16
15:20
подходящее событие - любое, где уже есть ссылка на новый элемент При, После записи, ОбработкаЗаписиНовогоОбъекта наверно тоже подойдет, в чем проблема то
(15) конечно, если сам моделируешь, то работает, если в типовой пробовать, то хрен ггг
23 RomanYS
 
05.09.16
15:22
(21) посмотрел в БП2, там проблема воспроизводится. Причина в том, что открываемые формы - создаются кодом и владельцем для этих форм почему-то передают ЭтаФорма, а не таб. поле.

Процедура КонтактныеЛицаПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, ЭтоГруппа)
....
Форма = НовыйОбъект.ПолучитьФорму(, ЭтаФорма);//причина здесь
....
КонецПроцедуры
24 crisalis
 
05.09.16
15:26
(20) Ещё раз подчеркиваю, мне призаписи() или послезаписи() формы элемента Контрагенты не подходит, мне нужно отловить именно тогда когда человек (пользователь) работает с таб.полем КонтактнаяИнформацияКонтрагента.
25 lxs
 
05.09.16
15:29
(24) Еще раз под черкиваю, читай внимательно то, что я пишу..
26 lxs
 
05.09.16
15:30
(25)+ "ПриЗаписи элемента справочника КонтактныеЛица спрашивай"
27 RomanYS
 
05.09.16
15:31
(22) в типовой тоже работает, если подправить одно слово(см (23))
28 lxs
 
05.09.16
15:33
Причем тут работа в карточке контрагента или нет, это не имеет никакого значения в контексте твоей задачи, ты усложняешь ситуацию. У тебя задача стоит: спросить пользователя, когда он добавляет контакт, сделать его основным для владельца и всё!

Ты когда добавляешь контакт, что делаешь? Нажимаешь кнопку Добавить, дальше открывается форма элемента справочника Контактные лица.. Всё. Вот твой ответ. Делаешь всё там. В событии При или ПослеЗаписи.
29 RomanYS
 
05.09.16
15:36
(28) покажи как ты будешь делать "сделать его основным для владельца и всё"?
30 eskor
 
05.09.16
15:37
(24) а не проще ли от обратного плясать? При записи новой контактной информации проверять/искать по ссылке Контрагента?
А если в одном сеансе - то есть чудная функция Оповестить(<ИмяСобытия>, <Параметр>, <Источник>)
и соответственно свойство формы ОбработкаОповещения(<ИмяСобытия>, <Параметр>, <Источник>)
31 lxs
 
05.09.16
15:38
(29) Как тебе это показать?
32 RomanYS
 
05.09.16
15:39
(31) Код, пару строчек.
33 crisalis
 
05.09.16
15:40
(23) поиск этой процедуры в конфигураторе не дал ничего , где ее можно посмотреть ?

(28) а как потом определить установлено ли основное контактное из формы ввода (ФормаВводаНового) спр КЛКонтрагентов? и 2 а если пользователь не записал элемент а модифицировал его как я получу достоверные данные далее?
34 crisalis
 
05.09.16
15:41
(33) мне же еще надо проверять установлено ли основное КЛ...
35 RomanYS
 
05.09.16
15:41
(33) посмотри какие события уже заданы у этого таб. поля и проверь их обработчики
36 crisalis
 
05.09.16
15:45
(30) знаю за эту функцию но так и не разобрался как с ней работать , очень мало инфы, примеров в инете (
37 lxs
 
05.09.16
15:53
(32) ФормаВводаНового в спр. КонтактныеЛицаКонтрагентов:

Процедура ПослеЗаписи()
    //lxs
    Оповестить("ЗаписаноКЛ", Новый Структура("Ссылка", Ссылка));
КонецПроцедуры

В форме элемента контрагента
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
....
    //lxs    
    ИначеЕсли ИмяСобытия = "ЗаписаноКЛ" И ТипЗнч(Параметр) = Тип("Структура") Тогда
        
        Если ОсновноеКонтактноеЛицо <> Параметр.Ссылка Тогда
            Если Вопрос("Сделать основным?", РежимДиалогаВопрос.ДаНет) = КодВозвратаДиалога.Да Тогда
                ОсновноеКонтактноеЛицо = Параметр.Ссылка;
            КонецЕсли;
        КонецЕсли;
        
    КонецЕсли;
КонецПроцедуры
38 lxs
 
05.09.16
15:53
(37) всё.. епт.. 4 минуты
39 crisalis
 
05.09.16
15:54
(38) ща посмотрим )))
40 Vaflya
 
05.09.16
15:56
ды как

После, При Записи()

Если Не ЗначениеЗаполнено(Владелец.ОсновноеКЛ) И Вопрос("Намутить отсюда основное КЛ?", РежимДиалога.ДаНет) = КодВозвратаДиалога.Да Тогда
Владелец.ОсновноеКЛ = Ссылка;
Владелец.Записать();
КонецЕсли;

ну соответственно можно всегда спрашивать, даже если основноеКЛ уже есть
41 Vaflya
 
05.09.16
15:56
а, ну еще объекта владельца получить
42 Vaflya
 
05.09.16
15:58
я про обычные формы, там
"или послезаписи() формы элемента Контрагенты не подходит" у формы нет ПослеЗаписи(), у объекта - да
43 lxs
 
05.09.16
15:58
(41) гемор.. не прокатит, получишь всегда "невозможно записать из-за не соответствия бла-бла-бла..."
44 DomovoiNaStraze Pravo
 
05.09.16
15:58
(40)Объект надо получить.
45 Vaflya
 
05.09.16
15:58
чего там бла бла
46 lxs
 
05.09.16
15:59
(45) У тебя владелец = ссылка.. как ты его менять будешь? Тем более если он уже редактируется..
47 RomanYS
 
05.09.16
15:59
(40) круто
Владелец.Записать();

тебе пользователи потом мозг взорвут, см. (43)
48 DomovoiNaStraze Pravo
 
05.09.16
16:00
Он дописал в (41) что надо владельца получить)
49 Vaflya
 
05.09.16
16:00
в чем проблема с изменением ссылки?
50 lxs
 
05.09.16
16:01
(49) ты тупой или прикидываешься, чувак?
51 Vaflya
 
05.09.16
16:01
(48) нет, это очень важный момент, я не спорю, но вроде по-умолчанию должен пониматься "спецами" вроде (50)
52 lxs
 
05.09.16
16:03
(50)+ смотри, ты открываешь КОНТРАГЕНТА... там жмешь кнопку Добавить на закладке Контакты.. Открываешь форму элемента Контактов.. Тебе говорят "Запиши элемент, чувак".. записываешь, ок.. Затем создаешь новое КЛ.. у тебя в форме понятие Владелец имеет тип Ссылка. Дальше ты там говоришь Владелец.ОсновноеКЛ.. бац.. первая ошибка.. Ссылка.Реквизит - объект не получен.. Дальше продолжать?
53 DomovoiNaStraze Pravo
 
05.09.16
16:04
(52)Читай (41) :)
54 lxs
 
05.09.16
16:05
(53) )) еще один
55 RomanYS
 
05.09.16
16:06
(49) проблема в том, что эта "ссылка" редактируется пользователем в форме и твоя запись не позволит записать изменения юзеру.
56 lxs
 
05.09.16
16:07
Дальше как-то получаем владельца в форме элемента контактного лица.. ну пусть Владелец = Владелец.ПолучитьОбъект();
Тогда имеем:
Владелец.ОсновноеКЛ = БЛА;
ВладелецЗаписать();

И всё вроде бы круто.. Закрывается форма элемента КЛ. Остается открытой форма Контрагента с новой строкой нового КЛ.

А дальше нажимаем кнопку ОК и...
57 Vaflya
 
05.09.16
16:13
(52) та не, все там получишь
то, что "версия данных" потом в контрагенте вылезет - да, кустарный способ - "перечитать" после манипуляций, можно и красивей придумать. да и вобще это все мелочи, ты так вобще при записи КЛ хотел его основным поставить, а вдруг отказ получишь, ужас , что делать О_0
58 Vaflya
 
05.09.16
16:16
(56) ветке уже 2 часа, а я так и не смог твой ник без запинки прочитать ;)
59 lxs
 
05.09.16
16:17
(57) ""перечитать" после манипуляций" - это г0внокод чистой воды и не прокатит, потому что , пяты сотрешь все то, что было не сохранено в БД. Что я хотел сделать, я написал в коде. Спрашивать можно где угодно. А вот менять - нет. Тут я часть своих слов возьму назад.
60 lxs
 
05.09.16
16:18
(58) Ты вслух его толи проговариваешь? делать нехер?
61 crisalis
 
05.09.16
16:18
с (40) по (57) это только в том случае если контрагент новый  так получается надо его в базу сначала записать а потом уже КЛ выставлять...

(37) работает прекрасно ))), ща еще на новом элементе попробую
62 crisalis
 
05.09.16
16:22
(61) для нового элемента лажа Поле "Владелец" не заполнено
))) , как я говорил...
63 lxs
 
05.09.16
16:22
(61) В УТ 10.3 (в моем лохматом релизе) косяк. Там разработчики не предусмотрели почему-то ситуацию, когда контрагент новый или модифицированный. Поэтому там карточка нового КЛ открывается. но на выходе ты получаешь ошибку
64 lxs
 
05.09.16
16:22
(62) Ну так ее легко исправить)
65 RomanYS
 
05.09.16
16:23
(63) в БП2 всё хорошо

Процедура КонтактныеЛицаПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, ЭтоГруппа)

    Отказ = НЕ РаботаСДиалогами.ЗаписатьНовыйОбъектВФорме(ЭтаФорма);

    Если НЕ Отказ Тогда

        Отказ = Истина;

        Если Копирование Тогда
            НовыйОбъект = Элемент.ТекущиеДанные.Ссылка.Скопировать();

        Иначе
            НовыйОбъект = Справочники.КонтактныеЛица.СоздатьЭлемент();

            НовыйОбъект.ВидКонтактногоЛица = Перечисления.ВидыКонтактныхЛиц.КонтактноеЛицоКонтрагента;
            НовыйОбъект.ОбъектВладелец     = Ссылка;

        КонецЕсли;

        //Форма = НовыйОбъект.ПолучитьФорму(, ЭтаФорма);
        Форма = НовыйОбъект.ПолучитьФорму(, Элемент);
        Форма.ЭлементыФормы.ВидКонтактногоЛица.ТолькоПросмотр = Истина;
        Форма.Открыть();

    КонецЕсли;

КонецПроцедуры
66 Vaflya
 
05.09.16
16:24
(59) так контрагента же записать надо, прежде чем окно создания КЛ вызывать (и все "сохранится в БД")?
(60) а ты всегда читаешь вслух?
(64) ну ка, давай подробней
67 lxs
 
05.09.16
16:25
(66) см. (65)
68 Vaflya
 
05.09.16
16:25
(66) + чтобы "по-типовому"
69 lxs
 
05.09.16
16:26
(68) а давай сам дальше, слабо?
70 lxs
 
05.09.16
16:27
(69)+ пару строчек
71 DomovoiNaStraze Pravo
 
05.09.16
16:27
Контактные лица вообще подчиненный справочник?
72 lxs
 
05.09.16
16:27
(71) да.
73 DomovoiNaStraze Pravo
 
05.09.16
16:27
(72)Что-то думается нет.
74 DomovoiNaStraze Pravo
 
05.09.16
16:28
+(73)И отсюда весь сыр бор.
75 lxs
 
05.09.16
16:28
(73) УТ 10.3 - определенно да.
76 DomovoiNaStraze Pravo
 
05.09.16
16:28
Сори да
77 lxs
 
05.09.16
16:29
(76) см. (62) - это стандартная проверка
78 crisalis
 
05.09.16
16:30
Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)
    
    Если НЕ ЗначениеЗаполнено(Владелец) Тогда
        Сообщить("Чтобы добавить контактное лицо следует записать элемент!");
        Отказ = Истина;
    КонецЕсли;    
    
КонецПроцедуры


Хоть что то добавил от себя ))) - это в форме ФормаВводаНового в КонтактныеЛицаКонтрагентов. Спасибо всем
79 Vaflya
 
05.09.16
16:31
а, ну кстати, вот и нормальный вариант - ЗаписатьВФорме() и не будет лажи с "версией данных"
(69) не, строчками не хочу, в моем мохнатом релизе это мышкой делается
+ че то не нравятся ваши типовые коды

Отказ = НЕ РаботаСДиалогами.ЗаписатьНовыйОбъектВФорме(ЭтаФорма);

    Если НЕ Отказ Тогда

        Отказ = Истина;

че это за "нег0внокод"
80 lxs
 
05.09.16
16:31
(78) Молодец) На здоровье.
81 lxs
 
05.09.16
16:32
(79)  Это где надо вставить?
82 crisalis
 
05.09.16
16:36
(79) да согласен , есть такое дело , ща поправлю ! Спасибо
83 lxs
 
05.09.16
16:40
(82)

Процедура КонтактныеЛицаКонтрагентаПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, ЭтоГруппа)
    
    Отказ = НЕ РаботаСДиалогами.ЗаписатьНовыйОбъектВФорме(ЭтаФорма);
    
КонецПроцедуры
84 crisalis
 
05.09.16
16:46
(83) Еще раз всем спасибо ! Но знаете что самое обидное то что ОбработкаЗаписиНовогоОбъекта не сработала , по совету Roman я пересмотрел весь код событий для таб.поля но так и ничего не нашёл. ((( . а ведь для БанковскиеСчета работает!?
85 RomanYS
 
05.09.16
16:57
(84) поищи ещё
".ПолучитьФорму(, ЭтаФорма)"
в форме справочника контрагенты.
Мне замена из (65) помогла (типовой код закомментарен).
86 crisalis
 
05.09.16
17:15
(85) вот только что есть:

Процедура ВидыДеятельностиОтветственныйНачалоВыбора(Элемент, СтандартнаяОбработка)
    
    СтандартнаяОбработка = Ложь;
    
    Форма = Справочники.КонтактныеЛицаКонтрагентов.ПолучитьФормуВыбора(,Элемент);
    Форма.СправочникСписок.Отбор.Владелец.Использование = Истина;
    Форма.СправочникСписок.Отбор.Владелец.Значение = Ссылка;
    Форма.ОткрытьМодально();
    
КонецПроцедуры
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.