Доброго времени суток! Выгружаются данные запросами, которые необходимо выгрузить в Excel файлы(через ComОбъект). Задача вот в чем: хочу передать Массив состоящий из нескольких ТЗ на Клиент. Понимаю, что ТЗ не может быть на Клиенте, но как можно обойти это? При попытке это сделать выдает ошибку Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа.
по причине:
Ошибка преобразования данных XDTO:
НачалоСвойства: ret Форма: Элемент Тип: {http://www.w3.org/2001/XMLSchema}anyType
по причине:
Ошибка преобразования данных XDTO:
НачалоСвойства: Value Форма: Элемент Тип: {http://www.w3.org/2001/XMLSchema}anyType
по причине:
Ошибка отображения типов:
Отсутствует отображение для типа '{http://v8.1c.ru/8.1/data/core}ValueTable'

Впервые сталкиваюсь с данной проблемой.
---
а в чем собственно сложность на сервере создать массив структур и передать на клиента?
На клиенте в цикле обходить массив и выбирать данные структур, для передачи в Excel?
---
ТЗ можно перевести в массив структур.
---
нечего делать ТЗ на клиенте. Даже если ты передашь, свернешь в массив структур..а что дальше то ? Все удобства и методы, которые предоставляет ТЗ - будут отсутствовать.
Клиент разве-что, в качестве транспорта можно использовать - сериализовав все, а обрабатывать все равно на сервере надо.
Да и даже если реквизит формы, у вас таблица значений, все равно ЗначениеВРеквизит формы применять на сервере нужно
---
А как иначе мне результат запроса запихнуть в excel? Все что мне нужно это пробежать по ТЗ и получить все данные.
---
Делай всё на сервере
---
Как я тебе на Сервере создам ComОбъект, заполню и запишу?
---
ну как и подавляющая часть адинесников, кто сталкивался с таким же. чем отличается от варианта формирования на клиенте?
---
отличается требованием количества лицензий на Excel.
---
Согласен. Аргумент.
---
Мне не надо, ты себе создай.
у меня же создаётся...
---
При попытке создать НаСервере
        Эксель = Новый COMОбъект("Excel.Application");
 ФайлExcel = Эксель.WorkBooks.Add();
Выдает ошибку что метод объекта не обнаружен WorkBooks
---
установи эксель
---
Excel файлы(через ComОбъект)
а в таб док, не катит ? Потом его сохряняешь в формате экселя и все.

Или именно, надо эксель, создавая всякие прибамбасы, которые только сам эксель может делать ?
---
Да, именно Excel. Т.к. данные будут грузиться на FTP автоматически и при создании через ТабДок, то при открытии документа Excel выдает запрос на открытие в безопасном режиме, а автоматическая загрузка не обрабатывает этот запрос никак. Да и не может, скорее всего(
---
можно хранить таблицу на сервере, и вызывать функцию, которая возвращает строку таблицы в виде структуры.
По сравнению с теми тормозами, которые устраивает Excel, множественный вызов серверного метода - это пустяк.
---
Речь про "ЗначениеВСтрокуВнутр"?
---
SpreadsheetDocument.Write
SpreadsheetDocument
Write
Syntax variant: To a file

Syntax:

Write(<FileName>, <SpreadsheetFileType>)
Parameters:

<FileName> (required)

Type: String.
Name of the file where spreadsheet document is saved.
<SpreadsheetFileType> (optional)

Type: SpreadsheetDocumentFileType.
Format in which spreadsheet document will be saved.
Default value: MXL.
Description of method variant:

Writing of a spreadsheet document to a file.
Syntax variant: To a stream

Syntax:

Write(<Stream>, <SpreadsheetFileType>)
Parameters:

<Stream> (required)

Type: Stream, MemoryStream, FileStream.
Stream for writing a spreadsheet document.
<SpreadsheetFileType> (optional)

Type: SpreadsheetDocumentFileType.
Format in which spreadsheet document will be saved.
Default value: MXL.
Description of method variant:

Writing of a spreadsheet document to a stream.
Description:

It records a spreadsheet document into the file.

Availability:

Thin client, web-client, server, thick client, external connection, Mobile application (client), Mobile application (server).
Note:

You cannot save files in XLS95 format when working on the server or the web client or using the COM connection.
Saving Metafile pictures to PDF is not supported.
When working on the web client, the method execution calls the server.
When you work on a mobile platform, only XML and PDF formats can be used for saving.
When written to a PDF file, lines in the document cells can be wrapped somewhat differently from the way they displayed on the monitor. This can impact the height of lines for which the automatic height is specified.
When PDF format is output, fonts that cannot be embedded or are not TrueType or OpenType fonts, are replaced with Arial font. If this font is not found, Helvetica font is used.
Example:

Spreadsheet.Write("C:\My Documents\Table2.mxl");

P.S. не было русского СП под рукой
---
кстати, вариант (16) вроде в принципе не требует наличие экселя.
---
наверное можно и так. Но я имел в виду рабоче-крестьянское

```1c
    &НаСервере
    Функция ЗначениеСтроки(Аддр, НомерСтроки)

    ТЗ = ПолучитьИзХранилища(Аддр);
    ВозвращаемоеЗначение = Новый Структура;
    Строчка = ТЗ[НомерСтроки];
    Для Каждого Колонка Из ТЗ.Колонки Цикл
    ВозвращаемоеЗначение.Вставить(Колонка.Имя, Строчка[Колонка.Имя]);
    КонецЦикла;
    возврат ВозвращаемоеЗначение;
    КонецФункции
```
---
Да, именно Excel. Т.к. данные будут грузиться на FTP автоматически и при создании через ТабДок, то при открытии документа Excel выдает запрос на открытие в безопасном режиме, а автоматическая загрузка не обрабатывает этот запрос никак. Да и не может, скорее всего(

я не понял твою задачу.
У тебя, где то на сервере формируются твои таблицы значений с данными...ты их возвращаешь на клиента, где хочешь обойти, и на основе этих данных, сформировать экселевский файл при помощи средневекового подключения ком. Так ?
Так, твое решение такое..что тебе на сервере, нужно сформировать готовый табличный документ, вернуть его на клиента...а на клиенте просто сохранить в формате xls.
Никакой эксель при этом не нужен.

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

кстати не забывайте про более удобный вариант - вывод всех данных в табличный документ и сохранение его в эксель одной строчкой.
---
а в чем собственно сложность на сервере создать массив структур и передать на клиента?
На клиенте в цикле обходить массив и выбирать данные структур, для передачи в Excel?
---
ну вроде это не кошерно. а если на клиенте нет экселя или там браузер?
---
На Клиенте у меня есть Excel, в том то и дело что на клиенте excel создается и все хорошо.
---
ну так если у вас все хорошо и вариант с клиентом устраивает - так передавайте массив структур, как вам еще в (1) сказали.
---
в данном случае он там точно есть. Требуется только передать данные на клиент.
---
(26) все таки если думать о рабочем месте пользователя чуть шире и оглядываться на клиент-серверную архитектуру - то вариант работы, при котором эта логика (формирование файла) перекладывается на клиента (да и еще предъявляя к нему требования о наличии экселя и платформы 1С) - имхо не самый правильный. я бы даже сказал говнокодерский. конечно, в данном конкретном случае все сработает.., но...
---
я сужу со своей колокольни. А у нас на сервере экселя нет, а у клиентов есть. Опять-таки не у всех, а кому нужно работать с эксель. После формирования отчета наверняка захочется его посмотреть и что-то поправить. То есть клиенту лицензия нужна по любому. А зачем покупать дополнительно лицензию на сервер - не понимаю.
---
а еще веселее бывает, когда сеанс подвис, или файл заблокирован другим сеансом. Эксель при этом пытается сказать пользователю (серверу) , что файл открыт другим пользователем, только на чтение..и этого сообщения никто не видит..в итоге все серверные процедуры тупо висят, и неподготовленному человеку, довольно трудно понять что вообще за хня происходит..
---
имхо за уши притянуто. зачем всем сеансам ломиться в один файл?
---
имхо за уши притянуто. зачем всем сеансам ломиться в один файл?
файлы как минимум выгружается кудато, так-же есть всякие антивирусы, могут возникнуть чисто админские проблемы, типа доступ к папке только на чтение,
ну и банальное любопытство пользователя - открыл файл посмотреть, и пошел домой - не закрыв его. Да и в момент создания, проблемы бывают.
А ну еще, правильные админы, всячески избегают установки на сервер каких-либо лишних программ.

Как сказал Полосков - я вижу со своей колокольни. Нахлебался на практике с подобными проблемами.
А как именно решить задачу, мне кажется, выбор за исполнителем.
---
файлы как минимум выгружается кудато, так-же есть всякие антивирусы, могут возникнуть чисто админские проблемы, типа доступ к папке только на чтение,
вы про сервер? если профили безопасности не используются, то доступ к временной папке пользователя ничем не ограничен.

ну и банальное любопытство пользователя - открыл файл посмотреть, и пошел домой - не закрыв его. Да и в момент создания, проблемы бывают.
мы точно про одно и тоже говорим?))) мы говорим про програмную работу с файлом на сервере и потом передачу его на клиент, чтобы пользователь сохранил. причем здесь сценарий, где пользователь открыл что-то и забыл?

А ну еще, правильные админы, всячески избегают установки на сервер каких-либо лишних программ.
гнать таких правильных надо)

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

В общем ладно. Тема уже во флуд превратилась. Способы решения все были изложены.
---
ну не такое уж это и большое разорение. если в конторе 10 человек - то эксель явно у всех есть. а еще одну на сервер зажопить, хз.
---
а если кластер серверов? 10 серверов, 500 РМ, и с экселем работает только главбух, остальным достаточно OpenOffice?
---
имхо контораа, которая заплатила 800.000 руб за 10 серверов и еще овердофига за 500 клиентских лицензий стремается купить 10 лицензий на эксель - это сферический конь в вакууме. И кстати, за 15 лет работы с 1С не встречал ни одного живого пользователя, который бы работал на опенофис.
---
на каждое возможное подключение к серверу по лицензии. Коробочные версии не подходят.
Правда там еще есть варианты. Политика лицензирования в мс довольно запутанная. Без нарушения лицензирования довольно трудно все настроить.
---
не сложнее чем с SQL)
---
с SQL хотя бы понятно, что за подключение (компьютера/сеанса) к sql серверу.
С Office просто за возможность подключения. Т.е. реально использует только один пользователь, а лицензии нужны на все подключения.
---
а сервер 1С уже научился генерить количество подключений к SQL равному количеству активных пользователей? раньше вроде не умел и цеплялся одним сеансом.
---
от количества сеансов не зависит политика лицензирования. Сколько компьютеров (конечных точек) используют опосредственно подключение к SQL, столько лицензий и должно быть. Это не физический запрет. Это политика лицензирования. От чего и сказал, что легко нарушить лицензирование от мс.
---
ладно, думаю к единому решение мы все равно не придем)
---
скорее некошерно требовать установку экселя на сервер
---
блин че за жесть с сортировкой постов. вроде по дате выставлена, а все равно 42 идет перед 40 и 41
---
обновить. При написании ответа все равно сообщение показывает под сообщением на который ответ.
---
точно, спасибо.
---
ну, не уходите, давайте еще посремся
---
А зачем выгружать в Excel чрез COM? 1С и без этого в эксель табличный документ выгружать умеет, а создать его из запроса - не проблема. Можно через старый объект построителя отчета, а можно и через СКД. Фактически топикастер решает задачу замены масла через выхлопную трубу - это так себе решение, конечно )))
---
золотые слова, Юрий Венедиктович