Имя: Пароль:
1C
1С v8
Доступ к незаписанному объекту
0 Stolz
 
27.12.15
17:17
Доброго всем времени суток!

Вероятно, уже все знают, что для того, чтобы получить доступ к данным нового, ещё не записанного объекта, - например, документа, - нужно проделать нечто вроде такого:

СсылкаНового = Документы.НекийВидДокумента.ПолучитьСсылку();
ОбъектНовогоДокумента.УстановитьСсылкуНового(СсылкаНового);
СсылкаНаНовыйДокумент = ОбъектНовогоДокумента.ПолучитьСсылкуНового();

Здесь ОбъектНовогоДокумента - объект нового документа. Всё это, конечно, замечательно работает при одном условии: если в данном контексте заранее известен объект ОбъектНовогоДокумента, например, он был ранее в этом же модуле создан методом СоздатьДокумент().
Но что делать, если объект неизвестен предварительно?

Вот конкретная ситуация. Есть обработка, которая создаёт документ, не записывая его, заносит в него данные и открывает его форму. Можно ли каким-либо образом другою обработкой считать эти данные, не записывая документ?

По причинам политического характера не хотелось бы изменять модули самого документа и создающей его обработки. Какие у кого есть идеи на этот счёт?
1 Fragster
 
гуру
27.12.15
17:20
ДругаяОбработка.ЭуспортнаяФункция(незаписанныйОбъект)
2 1С Коннект
 
27.12.15
19:07
(0) В Другой обработке создать реквизиты и передать в эти реквизиты при создании обработки?
3 Stolz
 
28.12.15
06:51
(1)

Так в том-то и вопрос, как получить этот самый незаписанныйОбъект, чтобы его передать в ЭуспортнаяФункция или ещё куда-либо.

(2)

Та же проблема. Напомню, что:

>> По причинам политического характера не хотелось бы изменять модули самого документа и создающей его обработки.
4 ЧеловекДуши
 
28.12.15
06:59
(3) Зачем? Если документ создается Программно, то его структура всегда должна быть простой: Документ1 -> На Основании Документ 2 и т.д....

А не так, Документ 10 -> Документ 2 и т.д. по желанию непойми кого :)
5 Рэйв
 
28.12.15
06:59
Для того чтобы получить доступ к новому УИД совсем не обязателен и даже где-то условен.

Достаточно
Об=Документы.Какойто.СоздатьДокумент()
6 ЧеловекДуши
 
28.12.15
07:01
+ >>> По причинам политического характера не хотелось бы изменять модули самого документа

Не меняй модуль документа, пиши Общий модуль для своего документа. А в сам документ уже вложи одну строчку перехода в свой модуль :)
Можно баловаться и Подписками на события.
7 1С Коннект
 
28.12.15
07:12
(3) Каким образом создается "другая обработка"? Или есть открытая форма документа и ты парарллельно открываешь другую обработку и хочешь из одной открытой формы другую открытую  форму считать?
8 Jokero
 
28.12.15
07:17
+>>> По причинам политического характера не хотелось бы изменять модули самого документа
А потом другой программист будет ломать голову, кто и в какой обработке и в каком общем модуле меняет этот документ, который даже еще не успел записаться.
За такую политику к стенке надо))
9 Gray776
 
28.12.15
07:24
Где-то в интернетах встречал описание как искали нужную форму. То есть перебирали открытые флормы и находили нужную, не то? Кажись где-то на инфострате
10 Stolz
 
28.12.15
21:23
(4)
Ввод на основании здесь ни при чём:

>> Есть обработка, которая создаёт документ, не записывая его, заносит в него данные и открывает его форму.
11 Stolz
 
28.12.15
21:25
(5)
Увы, уже пробовал до того, как задать вопрос. Если воспользоваться методом СоздатьДокумент(), то создаётся новый документ, не имеющий отношения к тому, что уже открыт.
12 Stolz
 
28.12.15
21:30
(6)
Так вот одну-то строчку всё же придётся вложить, а это нежелательно. Подписки на события тоже рассматривал: для объекта типа Документ есть только одна вроде бы подходящая подписка - ОбработкаЗаполнения, прочие не годятся по определению. Да вот беда: не срабатывает она при программном создании документа.
13 Stolz
 
28.12.15
21:32
(7)
Именно так: есть открытая форма документа, открывается форма второй обработки, и нужно ею считать данные из открытой формы документа.
14 Stolz
 
28.12.15
21:34
(8)
Менять документ в данном случае не требуется, нужно лишь прочитать данные, которые в нём отображаются. Политика же, увы, определяется не мною.
15 Stolz
 
28.12.15
21:36
(9)
Это возможно сделать в управляемом приложении, в обычном же, насколько мне известно, - нет.
16 hhhh
 
28.12.15
22:58
запишите эти данные в xml на диске, а вторая обработка пусть их считает.
17 RomanYS
 
28.12.15
22:59
Проблема не понятна. Что именно не получается?

Вторая обработка запускается независимо и проблема найти в ней открытую форму?
18 Stolz
 
29.12.15
06:59
(16)
Как это сделать, не затрагивая модули документа?
19 Stolz
 
29.12.15
06:59
(17)
Именно так.
20 1С Коннект
 
29.12.15
07:29
(13) Попроубй
Для Каждого Окно Из Приложение.ОткрытыеОкна Цикл
      Объект = Окно.ПолучитьОбъект();

Или через
Окна = ПолучитьОкна();
Для Каждого Окно Из Окна Цикл
    Форма = Окно.ПолучитьСодержимое();
21 ЧеловекДуши
 
29.12.15
08:29
(19) Переделать обработку. Причем тут вообще форма?
Суть в (0) не отражает действительные надобности. Собирать информацию крохами, а оно мне надо? :)

Опиши лучше нормально, что делаешь?
И что нужно, что бы было, и не для тебя, а для заказчика :)
22 Stolz
 
29.12.15
21:27
(19)
>> Переделать обработку. Причем тут вообще форма?

Какую именно обработку переделать? Ту, что создаёт документ? - так если это было допустимо, то и вопрос бы не возник. Ту, что должна прочитать данные из открытой формы незаписанного документа? - так вопрос в том и состоит, как это можно сделать. Форма же здесь при том, что именно из неё нужно вытащить данные, - более их нигде нет.

>> Опиши лучше нормально, что делаешь?

Вроде бы, написано достаточно конкретно. Что именно неясно?

>> И что нужно, что бы было, и не для тебя, а для заказчика

Так в том-то и проблема, что заказчику нужно именно то, что описано: прочитать данные из открытой формы незаписанного документа. Будь оно нужно для меня, проблем бы не было: например, я записал бы этот документ, да и горя не знал.
23 Stolz
 
29.12.15
21:31
(20)
Спасибо за подсказку, попробую, когда буду на рабочем месте. Но что-то мне подсказывает, что в режиме обычного приложения это не будет работать. Впрочем, отпишусь по результату.
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший