Имя: Пароль:
1C
1С v8
Управляемые формы, присвоение реквизиту документа ссылки на сам документ.
,
0 uncknow
 
19.06.12
16:34
Задача:
Создан документ, еще не записан. Необходимо заполнить реквизит документа  ссылкой на сам документ.

Какие есть простые способы решить эту задачу?:
1. Не записывая документ.
2. Записывая документ.
=)
1 zak555
 
19.06.12
16:36
какой глубокий смысл в этом ?
2 mikecool
 
19.06.12
16:36
хреновая задача, имхо
3 Stim
 
19.06.12
16:36
"Необходимо заполнить реквизит документа  ссылкой на сам документ"


пятнично!
4 mikecool
 
19.06.12
16:37
+2 ибо у него и так есть Ссылка
5 Dionis Sergeevich
 
19.06.12
16:39
по ссылке получить объект и присвоить реквизиты самого документа и документа полученного по ссылке
6 uncknow
 
19.06.12
16:43
Неужто такая простая задача всех в ступор завела? :))
Для обычного режима задача не стоит и выведенного яйца :)
7 Fragster
 
гуру
19.06.12
16:44
(6) для необычного - всё так же
8 DSSS
 
19.06.12
16:44
Присоединяюсь к (1)
9 uncknow
 
19.06.12
16:45
(7) Документ.Реквизит = Объект.Ссылка   ?
10 zak555
 
19.06.12
16:45
(9) нахрена ?
11 uncknow
 
19.06.12
16:47
(1) Документ расчетов.
12 Stim
 
19.06.12
16:48
(11) расскажи задачу полностью, мб отговорим тебя от такого поступка
13 zak555
 
19.06.12
16:48
(11) ???
14 Fragster
 
гуру
19.06.12
16:50
нормальная задача... если идет цепочка документов, которая начинается со счета, при этом всю цепочку можно выбрать по одному реквизиту
15 uncknow
 
19.06.12
16:50
(12)(13) Да уже просто из принципа интересно.
(All) Сам Документ является документом расчетов.
16 Smallrat
 
19.06.12
16:51
В модуле объекта

Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
   Если ЭтотОбъект.ЭтоНовый() Тогда
       мСсылкаНового = ЭтотОбъект.ПолучитьСсылкуНового();
       Если НЕ ЗначениеЗаполнено(мСсылкаНового) Тогда
           мСсылкаНового = Документы[ЭтотОбъект.Метаданные().Имя].ПолучитьСсылку();
       КонецЕсли;
       Если НЕ ЗначениеЗаполнено(ЭтотОбъект.ПолучитьСсылкуНового()) Тогда
           ЭтотОбъект.УстановитьСсылкуНового(мСсылкаНового);
       КонецЕсли;    
   КонецЕсли;
   
   Если НЕ ЗначениеЗаполнено(Договор) Тогда
       Если ЭтоНовый() Тогда
           СсылкаНаДокумент = мСсылкаНового;
       Иначе
           СсылкаНаДокумент = Ссылка;
       КонецЕсли;
   КонецЕсли;
КонецПроцедуры

зачем такое нужно - ну вот в (14) написано
17 zak555
 
19.06.12
16:51
(14) так у вновь создаваемого док есть реквизит на докОсновании, где ссылка заранее определена
18 fisher
 
19.06.12
16:51
(9) Ну и плюс УстановитьСсылкуНового().
Хитрость только в доступе к объекту из модуля формы на сервере.
Сначала нужно распаковать объект из основного реквизита формы через РеквизитФормыВЗначение, сделать с объектом чего надо, а потом запаковать его обратно в реквизит (через ЗначениеВРеквизитФормы).
19 Smallrat
 
19.06.12
16:52
упс
Если НЕ ЗначениеЗаполнено(Договор) Тогда
заменить на
Если НЕ ЗначениеЗаполнено(СсылкаНаДокумент ) Тогда
20 Fragster
 
гуру
19.06.12
16:52
(17) а у самого первого? так можно сделать сквозной реквизит, по которой и первый документ будет выбираться
21 uncknow
 
19.06.12
16:52
(16) Это Управляемое приложение
22 Fragster
 
гуру
19.06.12
16:53
(20)+ если вводить 3-й документ на основании второго - то реквизит с первым документом будет свой, а одкОснование - свой
23 uncknow
 
19.06.12
16:53
(18) Это решение я знаю :)
24 fisher
 
19.06.12
16:54
(18) + Или делать назначение ссылки и присвоение её реквизиту в ПриЧтенииНаСервере(), когда объект еще напрямую доступен.
(23) А в чем проблема тогда?
25 uncknow
 
19.06.12
16:56
(24) Да как-то не кошерно, хочется попроще :))
26 fisher
 
19.06.12
16:58
(25) А в чем ты видишь принципиальную разницу с обычными формами? Там кашерно было, а тут некашерно?
27 uncknow
 
19.06.12
17:00
В обычных формах можно сразу получить ссылку на вновь созданный объект, это если мне память не изменяет =)
28 fisher
 
19.06.12
17:01
(27) Без записи и УстановитьСсылкуНового()? Изменяет.
29 uncknow
 
19.06.12
17:04
(28)  Возможно старый совсем стал :)
30 zak555
 
19.06.12
17:04
(20) зачем первому реквизит ?
31 mistеr
 
19.06.12
17:04
(0)

1. Пока документ не записан, ссылки на него нет (в курсе?)
2. Если документ записан, ссылка в реквизите Ссылка (в курсе?).
32 mistеr
 
19.06.12
17:05
(25) Не кошерно у вас спроектировано.
33 fisher
 
19.06.12
17:06
(31) Пока документ не записан, ему можно явно назначить ссылку с которой он будет записан (в курсе?)
34 uncknow
 
19.06.12
17:06
(31) Если бы не знал, тему бы не открывал :))
35 uncknow
 
19.06.12
17:08
(33) Интересно, в процедуре ПередЗаписьюНаСервере получится сделать?
36 mistеr
 
19.06.12
17:10
(34) Тогда задачу поставьте внятно.

(33) В курсе, что это меняет? Если бы это устраивало ТС, "тему бы не открывал".
37 mistеr
 
19.06.12
17:13
(34) Вопрос в лоб: зачем документу копия уже имеющегося реквизита?
38 uncknow
 
19.06.12
17:13
(36) Да куда уж внятнее :)
39 uncknow
 
19.06.12
17:14
(37) В реквизите документа должна быть ссылка на сам документ
40 fisher
 
19.06.12
17:14
(35) Вообще-то, в любой момент получится.
41 uncknow
 
19.06.12
17:14
(17) А можно поподробнее?
42 uncknow
 
19.06.12
17:15
(40) В любой момент придется гонять форму в объект и обратно. А ПриЗаписиНаСервере уже есть объект.
43 mistеr
 
19.06.12
17:16
(39) "Так начальник сказал"?
44 fisher
 
19.06.12
17:18
(42) ПриЗаписиНаСервере отлично подходит под "любой момент". И это не единственное событие, где есть объект.
Но все-таки ты расскажи, зачем тебе дублировать функционал системного поля "Ссылка"? Или в чем отличие?
45 uncknow
 
19.06.12
17:22
(44)  Да чтож вы все к постановке задачи цепляетесь :))
Торговля, регистр сведений взаиморасчеты, документ расчетов.  Убыл, позже буду. Может кто что подробнее расскажет, так как за Управляемый Интерфейс взялся недавно. С Уважением... :)
46 fisher
 
19.06.12
17:35
(45) Я цепляюсь, потому что хочу вернуть взорванные мозги на место (вот не могу сообразить нафига это надо, хоть ты тресни). Что рассказывать подробнее - непонятно. Уже вроде все вдоль и поперек проехали несколько раз.
47 Smallrat
 
19.06.12
18:37
(46) вот например договора, которые вводятся на основании друг-друга (доп. соглашения). У договоров есть реквизит ОсновнойДоговор - который обозначает начало цепочки. При запросах часть данных берется из основного договора - соответственно, чтобы не мучаться, у основного договора реквизит ОсновнойДоговор заполнен им самим. Также очень просто выбирать всю цепочку разом - все документы, у которых ОсновнойДоговор = основному договору документа.
48 Infsams654
 
19.06.12
19:12
(47) - с этим-то все понятно (При запросах ... данных берется из уже записанных объектов), непонятно для чего нужен реквизит - ссылка незаписанного документа.
49 Smallrat
 
19.06.12
19:19
(48) сложно сказать ) я знаю что бывает затык как поставить при записи ссылку на сам, еще не записанный, документ - подумал что у ТС проблемы с этим и притащил решение в (16).
50 mistеr
 
19.06.12
19:52
(47) Чтобы не мучаться?

ГДЕ ОсновнойДоговор = &ОсновнойДоговор ИЛИ Ссылка = &ОсновнойДоговор

Это мучение?
51 Smallrat
 
19.06.12
20:31
(50) есть еще интерактивные отборы в формах списка и т.д.
да и вообще, это логично же, что если есть реквизит, который означает принадлежность к цепочке, то у первого документа в цепочке признак принадлежности тоже должен быть заполнен, по краййней мере мне так думается.
52 yukon
 
19.06.12
20:44
Управляемое/неуправляемое - да какая разница?

Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)
   СсылкаНового = Документы.Документ.ПолучитьСсылку(Новый УникальныйИдентификатор());
   УстановитьСсылкуНового(СсылкаНового);
   ДокументОснование = СсылкаНового;
КонецПроцедуры
53 mistеr
 
19.06.12
21:26
(51) Логично, если *так* решил разработчик. От смысла "цепочки" зависит. В примере с договорами, *для меня* не логично, что основной договор является доп. соглашением к самому себе. :)
54 chaplin-che
 
19.06.12
21:44
Да бред какой-то, если просто подумать логически "зачем нужна ссылка, которой в базе еще нет" она ни на что не влияет, нигде не учавствует. Если надо что-то доделать - доделываем в момент записи, когда ссылка уже есть.
55 Defender aka LINN
 
19.06.12
21:59
(18) Для этого вообще-то ПередЗаписьюНаСервере есть
56 experimentator76
 
19.06.12
22:29
(54) бывает что ссылка нужна УЖЕ, а сам объект в базу будет записан позже
вообще все записи надо делать один раз и в конце обработки
так надо...
57 chaplin-che
 
21.06.12
20:01
(56) Не бывает такого, что объекту самому нужна ссылка о самом себе перед записью. Есть пример?
58 EvgeniuXP
 
21.06.12
20:18
(0) копай ПолучитьУникальный UID, его же и записывай.
59 EvgeniuXP
 
21.06.12
20:20
(57) но бывают случаи, когда нужно создать другой объект и ссылаясь на этот, который еще не записан.

UID вам в помощь.
60 chaplin-che
 
21.06.12
20:33
(59) А если этот, основной будет не записан в итоге? Т.е. получается запись будет единовременной, согласны? А раз так, опять говорю, что ссылка не нужна логически, с этим не поспорить.
61 Defender aka LINN
 
21.06.12
22:50
(57) Справочники "номенклатура" и "Контрагенты" в УТ
62 IamAlexy
 
21.06.12
23:01
(57) контрагенты в любой типовой..
реквизит "головной контрагент"
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой