Имя: Пароль:
1C
1С v8
Получение типа "ТаблицаЗначений"
0 zippygrill
 
15.10.14
10:48
Привет!
На что можно заменить выражение ЗначениеИзСтрокиВнутр(Параметры.Соединение.ЗначениеВСтрокуВнутр(мРезультатЗапроса.Получить(3).Выгрузить())) чтобы возвращаемый тип был ТЗ? А то получаю bad allocation
1 zippygrill
 
15.10.14
11:36
апну
2 Жан Пердежон
 
15.10.14
11:37
какие типы колонок?
3 Chai Nic
 
15.10.14
11:39
Циклических ссылок в таблице нет?
4 zippygrill
 
15.10.14
11:50
Примитивные и ссылочные.
5 Chai Nic
 
15.10.14
11:50
С обеих сторон одна и та же версия 1с?
6 zippygrill
 
15.10.14
11:51
Да
7 zippygrill
 
15.10.14
11:51
Если запускать обработку на другой сервер (виртуальный) то ошибки нет (bad allocation) :)
8 Chai Nic
 
15.10.14
11:51
А если не делать ЗначениеИзСтрокиВнутр, а просто обратиться к этой строке (вывести её в окно сообщений, например) - ошибка выдается?
9 zippygrill
 
15.10.14
11:54
(8) Обращение идет к массиву результатов запросов для того чтобы аналогично "мРезультатЗапроса.Получить(3).Выгрузить()" получить результат запроса выполненный по COM
10 zippygrill
 
15.10.14
11:54
Нагляднее что происходит
    Если Параметры.ИспользоватьCOM Тогда
        тзОстаткиПоКонтрагентамИДоговорам                             = ЗначениеИзСтрокиВнутр(Параметры.Соединение.ЗначениеВСтрокуВнутр(мРезультатЗапроса.Получить(3).Выгрузить()));
        тзВзаиморасчетыПоДокументам                                    = ЗначениеИзСтрокиВнутр(Параметры.Соединение.ЗначениеВСтрокуВнутр(мРезультатЗапроса.Получить(1).Выгрузить()));
        тзВсегоОплатыПоДоговору                                         = ЗначениеИзСтрокиВнутр(Параметры.Соединение.ЗначениеВСтрокуВнутр(мРезультатЗапроса.Получить(8).Выгрузить()));
        тзПритокДС                                                    = ЗначениеИзСтрокиВнутр(Параметры.Соединение.ЗначениеВСтрокуВнутр(мРезультатЗапроса.Получить(5).Выгрузить()));
        тзВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки     = ЗначениеИзСтрокиВнутр(Параметры.Соединение.ЗначениеВСтрокуВнутр(мРезультатЗапроса.Получить(7).Выгрузить()));
        тзЗапретОтгрузки                                            = ЗначениеИзСтрокиВнутр(Параметры.Соединение.ЗначениеВСтрокуВнутр(мРезультатЗапроса.Получить(9).Выгрузить()));
    Иначе
        тзОстаткиПоКонтрагентамИДоговорам                            = мРезультатЗапроса.Получить(3).Выгрузить();
        тзВзаиморасчетыПоДокументам                                    = мРезультатЗапроса.Получить(1).Выгрузить();
        тзВсегоОплатыПоДоговору                                         = мРезультатЗапроса.Получить(8).Выгрузить();
        тзПритокДС                                                    = мРезультатЗапроса.Получить(5).Выгрузить();
        тзВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки     = мРезультатЗапроса.Получить(7).Выгрузить();
        тзЗапретОтгрузки                                             = мРезультатЗапроса.Получить(9).Выгрузить();
    КонецЕсли;
11 Chai Nic
 
15.10.14
11:55
И как вы себе представляете передать массив результатов запроса в другую базу? Передавайте таблицу значений в чистом виде.
12 Chai Nic
 
15.10.14
11:56
Всё-таки, ошибка возникает при сериализации или наоборот?
13 zippygrill
 
15.10.14
12:06
(11) При.
Никто массив никуда не передает :)
14 Serginio1
 
15.10.14
12:09
Выгрузи через СериализаторXDTO
v8: Таблицу-COM объект вставить в запрос
15 hhhh
 
15.10.14
12:16
(13) всё-таки проследите, чтобы в ТЗ были только примитивные типы.
16 zippygrill
 
15.10.14
16:09
ВнешнееСоединение.СериализаторXDTO.ЗаписатьXML(ЗаписьXML, мРезультатЗапроса.Получить(3).Выгрузить()); - так что ли?
17 Serginio1
 
15.10.14
16:15
(16) Наверное.
Ты через сеализатор должен записать Комовскую ТЗ
Если мРезультатЗапроса это Сом запрос то да.
18 zippygrill
 
15.10.14
16:21
(17) Понятно.
мРезультатЗапроса = Запрос.ВыполнитьПакет(); так что ТЗ внутри еще массива.
19 zippygrill
 
15.10.14
17:06
Не сработало. На физическом сервере приложения выдал ошибку. И без причин еще :)

ВнешнееСоединение.СериализаторXDTO.ЗаписатьXML(ЗаписьXML, Результат);
по причине:
Неизвестная ошибка
20 zippygrill
 
15.10.14
17:10
На физ. сервере стоит платформа х64 и 16гб. Изначально она ругалась на "ЗначениеИзСтрокиВнутр(Параметры.Соединение.ЗначениеВСтрокуВнутр(мРезультатЗапроса.Получить(3).Выгрузить()))".
Подумал давай ка поменяю на (14), в надежде что заработает. Но не сработало.
21 Serginio1
 
15.10.14
17:17
(20) А на клиенте срабатывает?
Сделай внешний отчет и создай в модуле функцию которая возвратит строку.
Этот метод можно вызвать из этой же обработки и отладить.
Эту же отчет (обработку) можно вызвать через COM

Как обратиться к справочнику по номеру из VB.NET
v8: 8.2, COM-соединение, C#, dynamic строки
22 zippygrill
 
15.10.14
17:24
(21) Больше чем уверен что на клиенте также будет работать (всю обработку надо перелопатить чтобы сделать на клиенте). Но...однозначный факт ... сформировал с отбором и ошибки не было. Вывод, скорее всего, один, причина в том что действительно не хватает памяти серверу.
23 Serginio1
 
15.10.14
17:34
(22) Можно ТЗ сжать и передавать как ХранилищеЗначения
v8: Помогите с загрузкой изображения в XML
24 Chai Nic
 
15.10.14
18:48
(22) Как вариант - можно попробовать через ЗначениеВФайл.
25 zippygrill
 
15.10.14
20:41
Так перед тем как сжать ТЗ, хорошо было бы ее получить. Вмдите ли получить то пока не получается.
26 Рэйв
 
15.10.14
20:53
(0)Ты странный...
Я тебя удивлю. Но
ИзЗначениеИзСтрокиВнутр(
Можно понимать все что угодно.Почти.
Но только то что ты положил как

ЗначениеВСтрокуВнутр
27 Рэйв
 
15.10.14
20:54
Не положил - не получил...Логично.

Сохранение энергии.

3 закон Ньютона
28 Рэйв
 
15.10.14
20:56
Я  так хотел донести до них свою мысль:-) Кажется перестарался.
:-)
29 zippygrill
 
15.10.14
21:26
Прошу прощения, это я отвлекся. Завтра еще попробую через Хранилище.
30 Chai Nic
 
15.10.14
21:53
А кстати.. Интересно, какой в принципе размер строки, передаваемый через COM? Есть ли ограничение, и если есть - то оно фиксированно или от зависит от чего-то системного?
31 Фокусник
 
15.10.14
23:17
(0) ИМХО, лучше явным образом создать новую ТЗ, создать в ней колонки (обходом Соединение.ТЗ.Колонки) и заполнить значения через перебор строк, добавление строки и ЗаполнитьЗначенияСвойств().
32 Chai Nic
 
16.10.14
08:04
(31) Это с какого боку лучше? Зачем напрягать интерпретатор там, где можно обойтись системными средствами?)
33 Fragster
 
гуру
16.10.14
08:32
Это через COM?
34 Fragster
 
гуру
16.10.14
08:33
XML через файл можно попробовать, если через строку не пролезает :)
35 Chai Nic
 
16.10.14
08:39
(34) Через файл можно и без xml - быстрее будет, см. (24)
36 Фокусник
 
16.10.14
08:40
(32) С такого, что это правильнее. И как минимум работает, в отличии от (0), а также наверняка быстрее чем "через файл" ;)
37 Chai Nic
 
16.10.14
08:54
(36) Через ЗаполнитьЗначенияСвойств скорее всего не взлетит, а заполнять каждый реквизит, дергая при каждом обращении межпроцессное взаимодействие будет явно дороже.
38 Фокусник
 
16.10.14
09:00
(37) "ЗаполнитьЗначенияСвойств скорее всего не взлетит"
Значения простых типов заполнятся, ссылки проигнорируются.
39 Chai Nic
 
16.10.14
09:07
(38) Не уверен. Всё-таки объект COM-интерфейса - это не совсем то же самое, что объект 1с. Хотя свойства и методы совпадают, но работают иначе. Вспомним хотя бы навязшую в зубах передачу чисел с плавающей точкой..
40 МишельЛагранж
 
16.10.14
09:20
А еще никто не догадался посмотреть, что же в случае ошибки в записи возвращает мРезультатЗапроса.Получить(3).Выгрузить()?
41 МишельЛагранж
 
16.10.14
09:22
(37)"дергая при каждом обращении межпроцессное взаимодействие"
слова-то какие умные. Ты не забыл, что рабюотаешь с 1С, и подобные заклинания в ней никакого практического значения никакого не имеют? ))
42 Фокусник
 
16.10.14
09:42
(39) Я так делал :)
43 Chai Nic
 
16.10.14
10:04
(42) А если в таблице есть агрегатные объекты (массивы, списки, таблицы)? Вариант с сериализацией в файл наиболее универсален, всё-таки.
44 Serginio1
 
17.10.14
10:21
(29) Ну огласи результаты своих изысков.
Закон Брукера: Даже маленькая практика стоит большой теории.