Завершен

Выгрузка документов на ТСД

Galion-IT 9 лет назад обновлен Сергей (Специалист) 9 лет назад 6
Написал для выгрузки документа из учетной системы на сервер MobileSMARTS 2008 следующий код:
//-------------------------
vConnector := CreateOLEObject('Cleverence.Warehouse.StorageConnector');
vConnector.InitializeServerConnection( 'http://127.0.0.1:8000/DataStorage.asmx' );

// создадим новый документ:
curDocument := CreateOLEObject('Cleverence.Warehouse.Document');
curDocument.Id := sDocId;
curDocument.Name := sDocName;
curDocument.Appointment := '';
curDocument.CreateDate := Now;
curDocument.DocumentTypeName := sDocTypeName;
curDocument.InProcess := 0;
curDocument.Finished := 0;
curDocument.Modified := 0;
curDocument.WarehouseId := 1;
curDocument.DistributeByBarcode := 0;

// очистим документ:
curDocument.CurrentItems.Clear;
curDocument.DeclaredItems.Clear;

// наполним документ записями о товарах:
SourceDataset.First;
while NOT(SourceDataset.Eof) do
begin
vDocumentItem := CreateOLEObject('Cleverence.Warehouse.DocumentItem');

sBarCode := ...
sProdId := ...
iGoodsCount := ...

vDocumentItem.ProductId := sProdId;
vDocumentItem.PackingId := sProdId;
vDocumentItem.DeclaredQuantity := iGoodsCount;
vDocumentItem.CurrentQuantity := 0;
curDocument.DeclaredItems.Add( vDocumentItem );

vDocumentItem := NULL;

SourceDataset.Next;
end;

vNewDocuments := CreateOLEObject('Cleverence.Warehouse.DocumentCollection');
vNewDocuments.Add( curDocument );
vConnector.SetDocuments( vNewDocuments );

vNewDocuments := NULL;
vConnector := NULL;
//----------------
Код исполняется без сообщений об ошибке, но новый документ на сервере не появляется.
Как Вы проверяете, что документ не появляется на сервере? Посмотрите содержимое папки с документами на сервере (C:\Program Files\Cleverence Soft\Mobile SMARTS 2008\Server\Documents). Возможно, документ есть, но он не виден на терминале из-за неверно указаного ид. склада или типа документа (например). Убедитесь, что строка vConnector.SetDocuments( vNewDocuments ); выполняется. Проверьте, появляются ли в логе сервера сообщения об ошибках после выгрузки документа. Лог содержится в server_errors_*.log в папке C:\Program Files\Cleverence Soft\Mobile SMARTS 2008\Server, пришлите лог нам.
Выслал лог-файлы. В них есть следующие строки:

2; 4; 11.08.2015 18:00:43.471 ERROR
ADDITION TEXT: DefaultDataProvider error
MESSAGE: Вызов невозможен. Ни одного коннектора не зарегистрировано.
TYPE: Cleverence.Connectivity.KnownException
SOURCE: Cleverence.Connectivity.DefaultDataProvider
TARGETSITE: GetConnectorName
[STACK TRACE]
в Cleverence.Connectivity.DefaultDataProvider.GetConnectorName()
в Cleverence.Connectivity.DefaultDataProvider.SetDocuments(DocumentCollection documents)
[STACK TRACE]
DATA: System.Collections.ListDictionaryInternal

За основу брал код со страницы http://cleverence.ru/devlib/comconnector/Cleverence.Warehouse.Document.html,
но нет строк, аналогичных следующим:
document.Description = "приемка товара";
document.Priority = парДокумент.Приоритет;
document.Barcode = глШтрихКод("ЗаявкаНаПоставку", парДокумент.НомерДок);    
Кроме того в параметр Document.Appointment вписана пустая строка. Может быть это критично?
Попробовал протестировать в следующем варианте:
    sDocId := '001-002-003';
    sDocName := 'Новый документ';
    sDocTypeName := 'IncGoods';

    vConnector := CreateOLEObject('Cleverence.Warehouse.StorageConnector');
    vConnector.InitializeServerConnection( 'http://127.0.0.1:8000/DataStorage.asmx' );

    // создадим новый документ:
    curDocument := CreateOLEObject('Cleverence.Warehouse.Document');
    curDocument.Id := sDocId;
    curDocument.Name := sDocName;
    curDocument.Appointment := '';
    curDocument.CreateDate := Now();
    curDocument.DocumentTypeName := sDocTypeName;
    curDocument.InProcess := 0;
    curDocument.Finished  := 0;
    curDocument.Modified  := 0;
    curDocument.WarehouseId := 1;
    curDocument.DistributeByBarcode := 0;         

    vNewDocuments := CreateOLEObject('Cleverence.Warehouse.DocumentCollection');
    vNewDocuments.Add( curDocument );
    vConnector.SetDocuments( vNewDocuments );

    curDocument := NULL;
    vNewDocuments := NULL;
    vConnector := NULL;

Результат тот же. И в лог-файле так же появляются следующие строки:
2; 11; 11.08.2015 18:57:19.707 ERROR
ADDITION TEXT:	DefaultDataProvider error
MESSAGE:	Вызов невозможен. Ни одного коннектора не зарегистрировано.
TYPE:		Cleverence.Connectivity.KnownException
SOURCE:		Cleverence.Connectivity.DefaultDataProvider
TARGETSITE:	GetConnectorName
[STACK TRACE]
		в Cleverence.Connectivity.DefaultDataProvider.GetConnectorName()
		в Cleverence.Connectivity.DefaultDataProvider.SetDocuments(DocumentCollection documents)
[STACK TRACE]
DATA:		System.Collections.ListDictionaryInternal
Вы используете расширенный коннектор для внешней системы (его реализацию, которая содержится в Cleverence.Connectivity.DefaultDataProvider.dll) ? Для обычной выгрузки/загрузки документов, номенклатуры это не требуется, уберите из папки C:\Program Files\Cleverence Soft\Mobile SMARTS 2008\Server\bin файл Cleverence.Connectivity.DefaultDataProvider.dll, сервер перезапустите. Если Вы хотите использовать DefaultDataProvider, для его работы требуется обычный (не расширенный) коннектор, в файле Web.config нужно указать <add key ="connectorName" value="ИмяКоннектора"/> и вызываемые функции для обмена данными. Но скорее всего, Вам это не нужно, просто уберите Cleverence.Connectivity.DefaultDataProvider.dll. Также обратите внимание, что номенклатура, которая содержится в строках выгружаемого документа должна быть в справочнике номенклатуры, выгруженном на сервер. Проверка выполняется по Ид. товара и Ид. упаковки. Можно также использовать специальный "неизвестный товар" ProductId = "*" PackingId = "шт".
Удаление файла Cleverence.Connectivity.DefaultDataProvider.dll решило проблему.
Спасибо за консультацию. Вопрос решен.

Сервис поддержки клиентов работает на платформе UserEcho