Цитата:
Сообщение от
Ashir
Проблема явно во взаимодействии Аксы с сиквелом. Куда ещё посмотреть...
Предположу что проблема в том, что Аксапта имеет ограничение на размер контейнера при передаче его с клиента (приложения Аксапты ax32.exe) на сервер (службу АОС) так как он передается по значению, а не по ссылке.
А файл, с клиента на сервер (для его последующей записи в БД в вашем случае) передается в виде контейнера.
Можно конечно попытаться изменить стандартные размеры RPC пакета для сервера, изменяя значения реестра... (как советовали выше, ранее обсуждалось на форуме...)
Но есть альтернатива - передавать файл не одним общим контейнером, а делить его на части, передавать последовательно, и на стороне АОС "собирать" его вновь в одно целое.
Для этих целей сделал два класса, которые позволяют передавать файлы любого размера средствами Аксапта (клиента и АОС) с клиента на сервер, и обратно.
Процедура работает уже больше года, проблем в работе не вызывает.
(Даже при передаче файла размером несколько GB ощутимого замедления скорости работы сервера АОС не замечено)
Есть только одна странность - если в течении рабочей сессии на клиенте Аксапта использовалась данная процедура, то при закрытии этого клиента Аксапта, в некоторых случаях выдается сообщение об ошибке windows...
Классы написаны для Ax2009.
Пример использования:
X++:
DEV_FileSender::copyToServer("c:\\file.avi", "c:\\fileServer.avi");
Процедура написана для передачи "больших" файлов, но может быть использована и для передачи "больших" контейнеров что можно применить в вашем случае, наверное.
(Заменить участки кода при сохранении итоговых данных)
X++:
binData.saveFile(_fileName);
на
X++:
serverContainer = binData.getData();
В общем выкладываю классы, возможно кому то пригодится функция передачи крупных файлов средствами Аксапта, или как идея решения проблемы в вашем случае.
P.S Файлы докуметооборота Аксапты мы в БД не храним, а передаем (получаем) их с клиента Аксапта на файловый сервер именно этой процедурой.