Вход | Регистрация


1С:Предприятие :: 1С:Предприятие 8 общая

Как выловить запись нового элемента в подчиненном спр. из спр.владельца?

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

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

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

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

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

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

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

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

Процедура ПослеЗаписи()
    //lxs

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

В форме элемента контрагента
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
....
     //lxs    

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        КонецЕсли;

        //Форма = НовыйОбъект.ПолучитьФорму(, ЭтаФорма);

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

    КонецЕсли;

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


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

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

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

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

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

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



Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует