Имя: Пароль:
1C
1С v8
Внешнее соединение и хранилище значения
,
0 tttiger
 
31.10.12
13:33
Проблема заключается в том, что при изменении реквизита в регистре сведений соседней базы через внешнее соединение значение реквизита всегда = Неопределено. Реквизит имеет тип: ХранилищеЗначения.

Вот кусок кода:

БазаТерминалов = Новый COMОбъект("V82.ComConnector");
ХЭ = БазаТерминалов.Connect("srvr='192.168.10.240'; ref='Label" + "'; usr='Auto'; pwd='88888888'; LicDstr = Y");

мзХЭ = ХЭ.РегистрыСведений.ХранилищеЭтикеток.СоздатьМенеджерЗаписи();    
ХрЗн = Новый  ХранилищеЗначения(ТабДок);
мзХЭ.Этикетка = ХрЗн;
мзХЭ.Записать();

Всю голову сломал.
1 Wobland
 
31.10.12
13:34
ага, понял
2 tttiger
 
31.10.12
13:37
Реквизит Этикетка.

Т.Е. в коде я записал туда табдок, смотрю в базе он содержит хранилище значения, но если сделать:

новТабДок = мзХЭ.Этикетка.Получить();

то новТабДок = Неопределено
3 tttiger
 
31.10.12
13:48
Нет идей?
4 Wobland
 
31.10.12
14:00
(3) на таком количестве кода как в (2) нет
5 tttiger
 
31.10.12
14:15
(4) Код для первой базы :

БазаТерминалов = Новый COMОбъект("V82.ComConnector");
ХЭ = БазаТерминалов.Connect("srvr='192.168.10.240'; ref='Label" + "'; usr='Auto'; pwd='88888888'; LicDstr = Y");

мзХЭ = ХЭ.РегистрыСведений.ХранилищеЭтикеток.СоздатьМенеджерЗаписи();
мзХЭ.КодПродукции     = "0000045123";  //
мзХЭ.ДатаИзменения    = Дата(1,1,1); //  Это измерения
мзХЭ.А4               = Истина;            //
ТабДок = Новый ТабличныйДокумент;            
ХрЗн = Новый  ХранилищеЗначения(ТабДок);   //  Это реквизит
мзХЭ.Этикетка = ХрЗн;
мзХЭ.Записать();

Код для второй базы :
Отбор = Новый Структура("КодПродукции, ДатаИзменения, А4", "0000045123", Дата(1,1,1), Истина);
стрРег = РегистрыСведений.ХранилищеЭтикеток.Получить(Отбор);
ТабДок = стрРег.Этикетка.Получить();


В результате ТабДок = Неопределено. Вопрос, возможно ли вообще передать каким то образом табличный документ через внешнее соединение?
6 Wobland
 
31.10.12
14:16
(5) про доступность ТабДока сам читай, тогда я код глядеть не буду
7 tttiger
 
31.10.12
14:19
подобных ошибок для моей платформы не нашел. (8.2.14.540)
8 tttiger
 
31.10.12
14:21
(6) про какую доступность?
9 Wobland
 
31.10.12
14:22
(8) Доступность:

Тонкий клиент, веб-клиент, сервер, толстый клиент, внешнее соединение
10 tttiger
 
31.10.12
14:22
а, ну если про эту
"Доступность:

Тонкий клиент, веб-клиент, сервер, толстый клиент, внешнее соединение"

то да написано, что доступно
11 tttiger
 
31.10.12
14:23
:-)
12 Wobland
 
31.10.12
14:23
(10) то есть, можно. поздравляю
13 tttiger
 
31.10.12
14:28
(12) Спасибо за то что постебался...
14 Wobland
 
31.10.12
14:29
(13) на здоровье. избавишься от регистра, заходи
15 tttiger
 
31.10.12
14:38
(14) С какой целью избавляться от регистра? Проблема в нем?
16 Wobland
 
31.10.12
14:40
(15) ну ты ж для передачи ТабДока его прикрутил?
17 tttiger
 
31.10.12
14:53
(16) Не для передачи, для хранения. В нем куча табдоков хранится, и с соседней базы туда над добавалять их
18 Aprobator
 
31.10.12
14:54
(0) так хранилище то ты создаешь в текущей базе, а не в базе приемнике.
19 Aprobator
 
31.10.12
14:57
да и сам ТабДок как ты туда записываешь, тоже фиг передастся. Это внутри себя база все нормально видит. А чужое - нет.
20 Aprobator
 
31.10.12
14:57
надо и ТабДок тоже в той базе получать.
21 Aprobator
 
31.10.12
15:07
как то так вроде:

ТабДок.Записать(ИмяФайла);
ТабДокТойБазы = ХЭ.NewObject("ТабличныйДокумент");
ТабДокТойБазы.Прочитать(ИмяФайла);
ХранилищеТойБазы = ХЭ.NewObject("ХранилищеЗначения(" + ТабДокТойБазы + "));

могу ошибаться конечно, но направление мысли, думаю понятно.
22 tttiger
 
31.10.12
15:15
(20) Спасибо! Как раз уже в ту сторону начал думать. Только чего то идей нет как хранилище создать во внешнем соединении.

Ту вы файл используете, но все мои муки как раз от того, то поставлена задача избавится от файлового обмена вообще.

Т.е. получается непосредственно можно передавать только чтроки, числа, даты и булево?
23 Aprobator
 
31.10.12
15:17
(22) пробуй (22).
24 Aprobator
 
31.10.12
15:17
вернее пробуй (21).
25 Aprobator
 
31.10.12
15:21
можно конечно попробовать поиграться с ЗначениеВСтрокуВнутр и ЗначениеИзСтрокиВнутр.
Т.е. в текущей базе получаешь получаешь системное представление созданного значения и пытаешься его поднять в базе приемнике. Может для хранилища и прокатит. Хотя, тестить надо.
26 Aprobator
 
31.10.12
15:23
вот тока вопрос, можно ли достучаться до методов глобального контекста в базе приемнике.
27 Aprobator
 
31.10.12
15:27
хотя через ХЭ.Выполнить(СтрокаКода) - должно доставаться все.
28 tttiger
 
31.10.12
15:31
(27) Ясно. Спасибо за участие.
29 Aprobator
 
31.10.12
15:36
(28) удачи.
30 tttiger
 
31.10.12
16:04
Вот так получилось:

СтрокаТабДок = ЗначениеВСтрокуВнутр(ТабДок);
ХЭТабДок = ХЭ.ЗначениеИзСтрокиВнутр(СтрокаТабДок);
ХЭХЗ = ХЭ.NewObject("ХранилищеЗначения", ХЭТабДок);                
мзХЭ.Этикетка         = ХЭХЗ;
31 Aprobator
 
31.10.12
16:06
(30) о кулль. Пасиб, что отчитался. А то самому лениво тестить было. Да и с хранилищем отдать значение для конструктора через запятую, не допер бы.
32 Aprobator
 
31.10.12
16:07
может есть смысл в книгу знаний впихнуть?
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн