Имя: Пароль:
1C
 
Как лучше (опять УФ) заполнить не указанный реквизит справочника
,
0 e2e4
 
30.06.15
21:02
Опять головой ап стенку...Нелегко сразу перейти к УФ!
Еще одна стандартная задача: если при записи контрагента не заполнен реквизит ОсновнойДоговор - создать новый договор (если у текущего к-та вообще нет договоров) и присвоить его этому реквизиту.

&НаСервере
Процедура ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
    
    Если НЕ ЗначениеЗаполнено(ТекущийОбъект.ОсновнойДоговор) Тогда
        
        ВыборкаДоговоров = Справочники.ДоговорыКонтрагентов.Выбрать(, ТекущийОбъект.Ссылка);

        Если ВыборкаДоговоров.Следующий() Тогда
            
            НайденныйДоговор = ВыборкаДоговоров.Ссылка;

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

        КонецЕсли;
            
        ТекущийОбъект.ОсновнойДоговор = НайденныйДоговор;
            
    КонецЕсли;

КонецПроцедуры

Почти:) работает - в реквизите появляется "Основной договор", но после закрытия и повторного открытия он снова пустой.

В типовых погляжу...но там еще много чего, что перегружает восприятие - а хочется какого-то четкого осознания, почему вышеприведенный вариант не фунциклирует.

И - может, тут будет кошернее замутить ПередЗаписью в модуле МЕНЕДЖЕРА справочника??
1 фобка
 
30.06.15
21:06
ПередЗаписью() в модуле объекта
2 RomanYS
 
30.06.15
21:06
кошернее в обработке проверки заполнения модуля объекта (или подписка) ИМХО
Не работает потому что, отрабатывает после записи
3 e2e4
 
30.06.15
21:23
(1) (2) похоже, но тут грабли с еще не записанным контрагентом (когда-то на просторах инета читал про такое). Вылетает: Значение поля "Владелец" не заполнено или заполнено неверно.

Чем лечить?
4 RomanYS
 
30.06.15
21:27
(3) Что-то ты мутишь: как ты создал договор, если контрагент еще не записан?
Скрины давай и точные тексты ошибок
5 фобка
 
30.06.15
21:29
(3) ага, установитьссылку() или типа того есть метод
6 RomanYS
 
30.06.15
21:33
*(4) я туплю, ты же контрагента записываешь.
Тогда да, УстановитьСсылкуНового
7 e2e4
 
30.06.15
21:53
(6) таак... вот тут по этому поводу вроде внятно:
http://soft.crimea.com/public/306974/
Но я правильно понимаю, что ПередЗаписью тут не подходит?
Никак не укладывается в голове: если мы уже начали записывать нового контрагента интерактивно - мы же не сможем для него УстановитьСсылкуНового? Только для нового договора сможем создать ссылку - а весь затык как раз в том, чтобы задать Владельца договору.
...Спать пора, в общем............
8 Garykom
 
гуру
30.06.15
22:04
ТС совет почитать про HTML, HTTP, CSS, AJAX, JS и прочие PHP...

сразу станет понятнее что такое в 1С клиент-сервер и УФ, понятно будет что можно, а что нельзя и почему
9 Garykom
 
гуру
30.06.15
22:08
(8)+ к примеру можно ли в любом строковом реквизите любого объекта (справочника или документа) использовать к примеру
Наименование = "Иванов"+Символ(0)+"Петров":

1) в обычных формах;
2) в управляемых формах?
10 RomanYS
 
30.06.15
22:15
(7) всё там правильно, ровно твой случай.
Перед записью проверяй, что объект новый, и устанавливай ссылку нового для Контрагента. Договор ты запишешь и ссылка уже будет.

Единственно есть(может быть) риск, что потом (например, при записи) ты откажешься от записи контрагента и договор "зависнет" с битым родителем
11 Stim
 
30.06.15
22:20
а почему нельзя записать
ОсновнойДоговор = НайденныйДоговор;

вместо
ТекущийОбъект.ОсновнойДоговор = НайденныйДоговор;
12 RomanYS
 
30.06.15
22:25
+(10) можно сделать наоборот: перед записью контрагента в договор ставить ссылку на не созданный договор. А при записи проверять существование договора и при отсутствии - создавать (владелец на этот момент уже записан)
13 Garykom
 
гуру
30.06.15
22:25
(0) простейшим образом задачка решается через 2-ю запись контрагента или иначе предварительную запись

и да лучше проверку на записанность (новый) контрагента понятно делать
14 e2e4
 
30.06.15
22:28
(11) дык сервер не знает, кто такой "ОсновнойДоговор"

(13) да, с двумя записями вариант находил - но хочется совершенства))

(12) спасибо, буду рыть. Всем спокойной ночи!)
15 e2e4
 
30.06.15
22:31
и, да - в типовой 3.0 похоже такой плюшки нет:) там надо ручками создать договор - и он привяжется к к-ту.
В общем-то, и нормально)) мне кажется, в моей формулировке задача имеет чисто академический интерес - практически же, такой финт требуется как в ситуациях у товарища по ссылке в (7), а не при интерактивном создании к-та......
16 Stim
 
30.06.15
22:54
(14) а причем здесь сервер? Заполняйте реквизит в модуле объекта
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс