Завершен

Ошибка в Cleverence.Hosting

Вячеслав Ляутин 5 лет назад в Проблемы с соединением обновлен Сергей (Специалист) 4 года назад 34
При передачи данных с терминала на сервер (завершение документа) каким-то хаотичным образом возникает такая ошибка (см. скриншот). С чем связано выяснить пока не удалось. Перезагрузка компьютера на котором установлен сервер на какое-то время исправляет эту ошибку. Подскажите что может стать причиной возникновения подобной ошибки?





Дополнительная информация:
  • используется самописный коннектор.
  • раньше была установлена другая версия Cleverence Soft
Установленный продукт:
Mobile Smart WIFI ПРОФ
Версия драйвера:
2.7.1.29
Типовая конфигурация драйвера?:
Операционная система:
Windows CE
Версия и конфигурация 1С, и режим работы (Файловы или Серверный):
0
Типовая конфигурация 1с?:
Модель ТСД:
Motorola MC2180

Ответ

Ответ

Добрый день!


У Вас:

documentItem.ProductId = requestId;

и

product.Id = new Guid(requestId).ToString();


Т.е. в документе и в справочнике номенклатуры будут разные товары, т.к. Id разный. Соответвенно, если стоит настройка Ограничивать товарами документа, товар не находится по ШК. И в строке документа packingId нужно заполнять:

documentItem.PackingId = "requestPack";

Вообще, если нужно ограничить сканирование только строками документа, номенклатуру можно вообще не использовать.

Можно в строках документа выгружать специальный "неизвестный товар", а штрихкод записывать в доп. поле:

documentItem.ProductId = "*"; // ид. неизв. товара

documentItem.PackingId = "шт";

documentItem.SetField("Barcode", BarCode;); // добавьте в строка документа в конфигурации поле Barcode

documentItem.SetField(... // другие поля, если требуется


В конфигурации для сканирования используйте действие Редактирование поля (в нем сканер работает). Для поиска строки документа Выбор строки с поиском по полю Barcode.


Но Ваш вариант тоже должен работать, если documentItem.ProductId и product.Id будут одинаковые.


Пришлите лог сервера после возникновения ошибки (server_errors_*.log из C:\Program Files\Cleverence Soft\Driver1C WiFi Prof\Server).
Что выполняется в Вашем коннекторе? Там происходит захват каких-либо ресурсов, создание COM-объектов, обращение к внешним системам? В коннекторе выполняется обработка исключений? Попробуйте обернуть вызов в try ... catch. Коннектор можкт реализовывать интерфейс Cleverence.Connectivity.ILogClient, тогда можно из коннектора писать в лог Log.Write("...");
Ошибка описанная логе:

1; 11; 15.10.2015 17:49:21.714 ERROR
ADDITION TEXT: Unhandled exception (System.NullReferenceException):
MESSAGE: В экземпляре объекта не задана ссылка на объект.
TYPE:System.NullReferenceException
SOURCE:Cleverence.Hosting
[STACK TRACE]
в Cassini.Connection.get_RemoteIP()
в Cassini.Request.GetRemoteAddress()
в System.Web.HttpRequest.get_UserHostAddress()
в Cleverence.Warehouse.ServerEvents.<>c__DisplayClass1.<InvokeDocumentCall>b__0()
в System.Threading.ThreadHelper.ThreadStart_Context(Object state)
в System.Threading.ExecutionContext.runTryCode(Object userData)
в System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(TryCode code, CleanupCode backoutCode, Object userData)
в System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
в System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
в System.Threading.ThreadHelper.ThreadStart()
[STACK TRACE]
DATA:System.Collections.ListDictionaryInternal

В нашем коннекторе выполняется обмен данными с системой BPMOnline по средствам передачи xml данных и sql запросов. После завершения документа на терминале ни одна из функций коннектора не вызывается, а сразу падает в эту ошибку. В процессе выполнения скрипта коннектора всё отлично, но вот иногда процесс не доходит до коннектора.
Помогает перезагрузка компьютера на котором установлен сервер терминалов, но лишь на какое-то время.

Прошу прощения не правильно выложил логи после ошибки. Файл с таким содержанием создается после подобной ошибки:


2; 11; 17.10.2015 13:18:53.742 ERROR

ADDITION TEXT: Unhandled exception (System.NullReferenceException):
MESSAGE: В экземпляре объекта не задана ссылка на объект.
TYPE:System.NullReferenceException
SOURCE:Cleverence.Hosting
TARGETSITE: get_RemoteIP
[STACK TRACE]
в Cassini.Connection.get_RemoteIP()
в Cassini.Request.GetRemoteAddress()
в System.Web.HttpRequest.get_UserHostAddress()
в Cleverence.Warehouse.ServerEvents.<>c__DisplayClass1.<InvokeDocumentCall>b__0()
в System.Threading.ThreadHelper.ThreadStart_Context(Object state)
в System.Threading.ExecutionContext.runTryCode(Object userData)
в System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(TryCode code, CleanupCode backoutCode, Object userData)
в System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
в System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
в System.Threading.ThreadHelper.ThreadStart()
[STACK TRACE]
DATA:System.Collections.ListDictionaryInternal



1; 11; 17.10.2015 13:18:53.908 ERROR
ADDITION TEXT: Unhandled exception (System.NullReferenceException):
MESSAGE: В экземпляре объекта не задана ссылка на объект.
TYPE:System.NullReferenceException
SOURCE:Cleverence.Hosting
[STACK TRACE]
в Cassini.Connection.get_RemoteIP()
в Cassini.Request.GetRemoteAddress()
в System.Web.HttpRequest.get_UserHostAddress()
в Cleverence.Warehouse.ServerEvents.<>c__DisplayClass1.<InvokeDocumentCall>b__0()
в System.Threading.ThreadHelper.ThreadStart_Context(Object state)
в System.Threading.ExecutionContext.runTryCode(Object userData)
в System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(TryCode code, CleanupCode backoutCode, Object userData)
в System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
в System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
в System.Threading.ThreadHelper.ThreadStart()
[STACK TRACE]
DATA:System.Collections.ListDictionaryInternal

Начат

Добрый день!

Проверили, ошибка есть, вышлем исправления.

Хорошо. Спасибо большое!

Когда ожидать исправления?

Вышлете на почту?

Добрый день!

Постараемся сегодня, возможно завтра.

Добрый день!

Исправления есть в новом MSI на сайте, в самом последнем релизе, но нужно будет произвести переустановку драйвера

http://www.cleverence.ru/files/11181/Driver1CWiFi.msi

Здравствуйте! Тестируем новую версию программы. Но появилась новая ошибка не возникавшая никогда ранее.


Порядок наших действий:

1. Удалили старую версию программы, а также все её папки и файлы.

2. Установили новую версию.

3. К нашему проекту коннектора подключили библиотеки из новой версии.

4. Скомпилированные файлы коннектора добавил в "C:\Program Files (x86)\Cleverence Soft\Driver1C WiFi\Server\bin" и в "C:\Program Files (x86)\Cleverence Soft\Driver1C WiFi\Control Panel\Addins" (папки Addins по умолчанию не было как в прежней версии, создавал вручную)

5. В панели управления добавляю соединение. Выбираю свой BPMConnector.

6. Нажимаю "Сохранить внешние соединения" или "Выгрузить внешние соединения" и получаю ошибку. (см. скриншот)




В предыдущей используемой версии такого не наблюдалось. Коннектор добавлялся без проблем.


Также прилагаю логи сервера после ошибки:


2; 13; 02.11.2015 11:17:11.090 ERROR

MESSAGE: Connector with id: BPMConnector1 was not found
TYPE:System.InvalidOperationException
SOURCE:Cleverence.MobileSMARTS.DataService
TARGETSITE: GetConnectorState
[STACK TRACE]
в Cleverence.Warehouse.DataStorage.GetConnectorState(String connectorId)
[STACK TRACE]
DATA:System.Collections.ListDictionaryInternal



2; 4; 02.11.2015 11:17:18.657 ERROR
MESSAGE: Serialization schema for 'Cleverence.Connectivity.ConnectorCollection' doesn't allow 'BPMConnector' child nodes.
TYPE:System.Runtime.Serialization.SerializationException
SOURCE:Cleverence.DataCollection
TARGETSITE: Deserialize
[STACK TRACE]
в Cleverence.DataCollection.Xml.XmlSerializer.Deserialize(XmlSerializationSchema parentSchema, XmlSerializationBag bag, String[] nodesForPass)
в Cleverence.DataCollection.Xml.XmlSerializer.Deserialize(XmlSerializationSchema parentSchema, XmlSerializationBag bag)
в Cleverence.DataCollection.Xml.XmlSerializer.Deserialize(XmlSerializationSchema parentSchema, XmlSerializationBag bag, String[] nodesForPass)
в Cleverence.DataCollection.Xml.XmlSerializer.Deserialize(XmlSerializationSchema parentSchema, XmlSerializationBag bag)
в Cleverence.DataCollection.Xml.XmlSerializer.Deserialize(XmlSerializationSchema parentSchema, XmlSerializationBag bag, String[] nodesForPass)
в Cleverence.DataCollection.Xml.XmlSerializer.Deserialize(XmlSerializationSchema parentSchema, XmlSerializationBag bag)
в Cleverence.DataCollection.Xml.XmlSerializer.Deserialize(XmlSerializationSchema parentSchema, XmlSerializationBag bag, String[] nodesForPass)
в Cleverence.DataCollection.Xml.XmlSerializer.Deserialize(XmlSerializationSchema parentSchema, XmlSerializationBag bag)
в Cleverence.DataCollection.Xml.XmlSerializer.Deserialize(XmlReader reader, ISerializationHelper helper)
в Cleverence.DataCollection.Xml.XmlSerializer.Deserialize(XmlReader reader)
в Cleverence.DataCollection.Xml.XmlSerializer.Deserialize(String xml, ISerializationHelper helper)
в Cleverence.DataCollection.Xml.XmlSerializer.Deserialize(String xml)
в Cleverence.Warehouse.DataStorage.SetServerEventsBook(String xml)
[STACK TRACE]
DATA:System.Collections.ListDictionaryInternal

Добрый день!

Перезапустите сервер терминалов после добавления.

Перепроверьте название коннектора и запрашиваемой функции, BPMconnector1 и BpmConnector

Сервер терминалов перезагрузил в первую очередь. Название коннектора даже копировал из проекта.

Вот ещё лог панели управления


1; 1; 02.11.2015 12:51:29.604 ERROR

MESSAGE: System.Web.Services.Protocols.SoapException: Серверу не удалось обработать запрос. ---> System.InvalidOperationException: Connector with id: BPMConnector1 was not found
в Cleverence.Warehouse.DataStorage.GetConnectorState(String connectorId)
--- Конец трассировки внутреннего стека исключений ---
TYPE:System.Web.Services.Protocols.SoapException
SOURCE:System.Web.Services
TARGETSITE: ReadResponse
[STACK TRACE]
в System.Web.Services.Protocols.SoapHttpClientProtocol.ReadResponse(SoapClientMessage message, WebResponse response, Stream responseStream, Boolean asyncCall)
в System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodName, Object[] parameters)
в Cleverence.Warehouse.DataStorage.GetConnectorState(String connectorId)
в Cleverence.Warehouse.StorageConnector.GetConnectorState(String connectorId)
[STACK TRACE]
DETAIL:System.Xml.XmlElement
DATA:System.Collections.ListDictionaryInternal



1; 1; 02.11.2015 12:51:29.606 ERROR
MESSAGE: System.Web.Services.Protocols.SoapException: Серверу не удалось обработать запрос. ---> System.InvalidOperationException: Connector with id: BPMConnector1 was not found
в Cleverence.Warehouse.DataStorage.GetConnectorState(String connectorId)
--- Конец трассировки внутреннего стека исключений ---
TYPE:System.Web.Services.Protocols.SoapException
SOURCE:System.Web.Services
TARGETSITE: ReadResponse
[STACK TRACE]
в System.Web.Services.Protocols.SoapHttpClientProtocol.ReadResponse(SoapClientMessage message, WebResponse response, Stream responseStream, Boolean asyncCall)
в System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodName, Object[] parameters)
в Cleverence.Warehouse.DataStorage.GetConnectorState(String connectorId)
в Cleverence.Warehouse.StorageConnector.GetConnectorState(String connectorId)
в Cleverence.Warehouse.Design.ConnectorManager.UpdateConnectorState()
[STACK TRACE]
DETAIL:System.Xml.XmlElement
DATA:System.Collections.ListDictionaryInternal



1; 1; 02.11.2015 12:51:35.397 ERROR
MESSAGE: System.Web.Services.Protocols.SoapException: Серверу не удалось обработать запрос. ---> System.InvalidOperationException: Connector with id: BPMConnector1 was not found
в Cleverence.Warehouse.DataStorage.GetConnectorState(String connectorId)
--- Конец трассировки внутреннего стека исключений ---
TYPE:System.Web.Services.Protocols.SoapException
SOURCE:System.Web.Services
TARGETSITE: ReadResponse
[STACK TRACE]
в System.Web.Services.Protocols.SoapHttpClientProtocol.ReadResponse(SoapClientMessage message, WebResponse response, Stream responseStream, Boolean asyncCall)
в System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodName, Object[] parameters)
в Cleverence.Warehouse.DataStorage.GetConnectorState(String connectorId)
в Cleverence.Warehouse.StorageConnector.GetConnectorState(String connectorId)
[STACK TRACE]
DETAIL:System.Xml.XmlElement
DATA:System.Collections.ListDictionaryInternal



1; 1; 02.11.2015 12:51:35.398 ERROR
MESSAGE: System.Web.Services.Protocols.SoapException: Серверу не удалось обработать запрос. ---> System.InvalidOperationException: Connector with id: BPMConnector1 was not found
в Cleverence.Warehouse.DataStorage.GetConnectorState(String connectorId)
--- Конец трассировки внутреннего стека исключений ---
TYPE:System.Web.Services.Protocols.SoapException
SOURCE:System.Web.Services
TARGETSITE: ReadResponse
[STACK TRACE]
в System.Web.Services.Protocols.SoapHttpClientProtocol.ReadResponse(SoapClientMessage message, WebResponse response, Stream responseStream, Boolean asyncCall)
в System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodName, Object[] parameters)
в Cleverence.Warehouse.DataStorage.GetConnectorState(String connectorId)
в Cleverence.Warehouse.StorageConnector.GetConnectorState(String connectorId)
в Cleverence.Warehouse.Design.ConnectorManager.Validate(String propertyName, Object newValue, Object oldValue)
[STACK TRACE]
DETAIL:System.Xml.XmlElement
DATA:System.Collections.ListDictionaryInternal



1; 1; 02.11.2015 12:51:35.402 ERROR
MESSAGE: В экземпляре объекта не задана ссылка на объект.
TYPE:System.NullReferenceException
SOURCE:Cleverence.MobileSMARTS.Design
TARGETSITE: ConnectorIdChanging
[STACK TRACE]
в Cleverence.Warehouse.Design.EnvironmentHost.ConnectorIdChanging(TreeListNode connectorNode, String newId, String oldId)
[STACK TRACE]
DATA:System.Collections.ListDictionaryInternal



1; 1; 02.11.2015 12:51:39.554 ERROR
MESSAGE: System.Web.Services.Protocols.SoapException: Серверу не удалось обработать запрос. ---> System.Runtime.Serialization.SerializationException: Serialization schema for 'Cleverence.Connectivity.ConnectorCollection' doesn't allow 'BPMConnector' child nodes.
в Cleverence.DataCollection.Xml.XmlSerializer.Deserialize(XmlSerializationSchema parentSchema, XmlSerializationBag bag, String[] nodesForPass)
в Cleverence.DataCollection.Xml.XmlSerializer.Deserialize(XmlSerializationSchema parentSchema, XmlSerializationBag bag)
в Cleverence.DataCollection.Xml.XmlSerializer.Deserialize(XmlSerializationSchema parentSchema, XmlSerializationBag bag, String[] nodesForPass)
в Cleverence.DataCollection.Xml.XmlSerializer.Deserialize(XmlSerializationSchema parentSchema, XmlSerializationBag bag)
в Cleverence.DataCollection.Xml.XmlSerializer.Deserialize(XmlSerializationSchema parentSchema, XmlSerializationBag bag, String[] nodesForPass)
в Cleverence.DataCollection.Xml.XmlSerializer.Deserialize(XmlSerializationSchema parentSchema, XmlSerializationBag bag)
в Cleverence.DataCollection.Xml.XmlSerializer.Deserialize(XmlSerializationSchema parentSchema, XmlSerializationBag bag, String[] nodesForPass)
в Cleverence.DataCollection.Xml.XmlSerializer.Deserialize(XmlSerializationSchema parentSchema, XmlSerializationBag bag)
в Cleverence.DataCollection.Xml.XmlSerializer.Deserialize(XmlReader reader, ISerializationHelper helper)
в Cleverence.DataCollection.Xml.XmlSerializer.Deserialize(XmlReader reader)
в Cleverence.DataCollection.Xml.XmlSerializer.Deserialize(String xml, ISerializationHelper helper)
в Cleverence.DataCollection.Xml.XmlSerializer.Deserialize(String xml)
в Cleverence.Warehouse.DataStorage.SetServerEventsBook(String xml)
--- Конец трассировки внутреннего стека исключений ---
TYPE:System.Web.Services.Protocols.SoapException
SOURCE:System.Web.Services
TARGETSITE: ReadResponse
[STACK TRACE]
в System.Web.Services.Protocols.SoapHttpClientProtocol.ReadResponse(SoapClientMessage message, WebResponse response, Stream responseStream, Boolean asyncCall)
в System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodName, Object[] parameters)
в Cleverence.Warehouse.DataStorage.SetServerEventsBook(String xml)
в Cleverence.Warehouse.StorageConnector.SetServerEvents(ServerEvents book)
[STACK TRACE]
DETAIL:System.Xml.XmlElement
DATA:System.Collections.ListDictionaryInternal




В логах почему-то везде "BPMConnector1 " но на самом деле название я пишу BPMConnector. Ещё раз:



Отключите сервер, откройте папку через панель Server/documents - произведите изменения, сохраните, запустите сервер.

Не понял фразу "откройте папку через панель сервера/документы"


Если в панели управления делать конфигурацию локально, не подключаясь к серверу то подключение создаётся и конфигурация сохраняется. А если пробовать выгрузить конфигурацию на сервер то получаю такую ошибку. И не совсем понятно как я могу с отключенным сервером выгрузить кофигурацию на него.

при запуске сервера он берет конфигурацию из папки Documents, если вы локально её там и настроите и сохраните, то она и запустится, и выгружать на сервер ничего не нужно.

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


Должен сказать очень много ошибок записывает система во все файлы. Даже сложно проследить какая ошибка после чего появляется. В предыдущей версии изредка появлялся только лог сервера с ошибкой в Cleverence.Hosting ...


Пробую сформировать документ с эмулятора терминала. Список документов я получаю через коннектор как и прежде безупречно. Открываю документ - "сканирую" товар - терминал выдаёт ошибку. Во время сканирования никакой интеграции с коннектором происходить не должно и не происходит как я вижу из отладчика.

Логи эмулятора:


1; 7; 02.11.2015 14:02:07.763 ошибка

ADDITION TEXT: InvokeMethodAction.InvokeMethod
MESSAGE: System.Web.Services.Protocols.SoapException: Серверу не удалось обработать запрос. ---> System.Exception: Ваша версия сервера (драйвер 1С Wi-Fi) не поддерживает внешние вызовы к учетной системе.
в Cleverence.Warehouse.DataStorage.InvokeRemoteMethod(String methodPath, String invokeArgs, String deviceInfoXml)
--- Конец трассировки внутреннего стека исключений ---
TYPE:System.Web.Services.Protocols.SoapException
SOURCE:System.Web.Services
TARGETSITE: ReadResponse
[STACK TRACE]
в System.Web.Services.Protocols.SoapHttpClientProtocol.ReadResponse(SoapClientMessage message, WebResponse response, Stream responseStream, Boolean asyncCall)
в System.Web.Services.Protocols.SoapHttpClientProtocol.EndInvoke(IAsyncResult asyncResult)
в Cleverence.Warehouse.Compact.DataStorage.Invoke(String methodName, Object[] parameters)
в Cleverence.Warehouse.Compact.DataStorage.InvokeRemoteMethod(String methodPath, String invokeArgs, String deviceInfoXml)
в Cleverence.Warehouse.Compact.InvokeMethodAction.InvokeMethod()
[STACK TRACE]
DETAIL:System.Xml.XmlElement
SUBCODE: null
DATA:System.Collections.ListDictionaryInternal
HELPLINK: null


1; 13; 02.11.2015 14:02:18.152 ERROR
ADDITION TEXT: DataExchanging.UploadDocuments function
MESSAGE: System.Web.Services.Protocols.SoapException: Серверу не удалось обработать запрос. ---> System.Exception: В строке документа '35d99b1a-9a9d-4b90-93a7-e7e12fe0617d' указан товар с неизвестным Id= 'UnknownRequest0'.
в Cleverence.Warehouse.DataStorage.CheckDocuments(DocumentCollection documents)
в Cleverence.Warehouse.DataStorage.SetDocumentsInternal(String documentCollectionXml, Boolean checkForDemo, String deviceInfoXml)
в Cleverence.Warehouse.DataStorage.SetDocumentsFromTerminal(String documentCollectionXml, String deviceInfoXml)
--- Конец трассировки внутреннего стека исключений ---
TYPE:System.Web.Services.Protocols.SoapException
SOURCE:System.Web.Services
TARGETSITE: ReadResponse
[STACK TRACE]
в System.Web.Services.Protocols.SoapHttpClientProtocol.ReadResponse(SoapClientMessage message, WebResponse response, Stream responseStream, Boolean asyncCall)
в System.Web.Services.Protocols.SoapHttpClientProtocol.EndInvoke(IAsyncResult asyncResult)
в Cleverence.Warehouse.Compact.DataStorage.Invoke(String methodName, Object[] parameters)
в Cleverence.Warehouse.Compact.DataStorage.SetDocumentsFromTerminal(String documentCollectionXml, String deviceInfoXml)
в Cleverence.Warehouse.Compact.DataExchanging.UploadDocuments(DocumentType type, Int32& count)
[STACK TRACE]
DETAIL:System.Xml.XmlElement
SUBCODE: null
DATA:System.Collections.ListDictionaryInternal
HELPLINK: null

Очистите папку документов от номенклатуры и от документов, так же в папке Server/Documents

Cleverence.Warehouse.ProductBook и Product, файлы начинающиеся на doc, перезапустите сервер.

Как я понял ошибки сыпались из-за того, что при перезагрузки сервера он не подтягивает коннектор.

Итак что я делаю.

1. Останавливаю сервер

2. Удаляю все документы с сервера и с эмулятора

3. Удаляю библиотеку коннектора. Добавляю библиотеку коннектора.

4. Запускаю сервер. Запускаю эмулятор

5. Список документов формируется отлично. Пытаюсь сканировать товар:

1; 14; 02.11.2015 15:13:53.392 ERROR

ADDITION TEXT: InvokeMethodAction.InvokeMethod
MESSAGE: System.Web.Services.Protocols.SoapException: Серверу не удалось обработать запрос. ---> System.Exception: Ваша версия сервера (драйвер 1С Wi-Fi) не поддерживает внешние вызовы к учетной системе.
в Cleverence.Warehouse.DataStorage.InvokeRemoteMethod(String methodPath, String invokeArgs, String deviceInfoXml)
--- Конец трассировки внутреннего стека исключений ---
TYPE:System.Web.Services.Protocols.SoapException
SOURCE:System.Web.Services
TARGETSITE: ReadResponse
[STACK TRACE]
в System.Web.Services.Protocols.SoapHttpClientProtocol.ReadResponse(SoapClientMessage message, WebResponse response, Stream responseStream, Boolean asyncCall)
в System.Web.Services.Protocols.SoapHttpClientProtocol.EndInvoke(IAsyncResult asyncResult)
в Cleverence.Warehouse.Compact.DataStorage.Invoke(String methodName, Object[] parameters)
в Cleverence.Warehouse.Compact.DataStorage.InvokeRemoteMethod(String methodPath, String invokeArgs, String deviceInfoXml)
в Cleverence.Warehouse.Compact.InvokeMethodAction.InvokeMethod()
[STACK TRACE]
DETAIL:System.Xml.XmlElement
SUBCODE: null
DATA:System.Collections.ListDictionaryInternal
HELPLINK: null


Прошу прощения, я вам дал не тот архив, дал от обычного Wi-fi, скачайте ПРОФ. чуть выше ссылка.

Да. На этом дистрибутиве определённо лучше. Но возникла ещё одна проблема.


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


Прилагаю скриншот объекта, который возвращает коннектор. Что интересно в списке продуктов на терминале все эти продукты отображаются.



Сканирую штрихкод: "0003101115" - продукт с таким штрихкодом не найден!

Добрый день!

В логе ТСД или вин клиента нет описания ошибки получения товара по ШК, может быть там что то написано?

Нет. В логи вообще ничего не записывается после ошибки.


На всякий случай сделал ещё скриншот конфигурации. Но повторюсь от предыдущего дистрибутива ничего не менялось. Конфигурацию скопировали.


После сканирования система переходит к пункту "Заявка с таким штрихкодом не найдена", хотя коннектор точно отправляет продукт с тем штрихкодом, который вносится в вин клиент.

Возьмите реальный шк из 1с, он обычно привязан к упаковке, а не товару, на 0000 начинается код товара, нужно включить поиск по коду в промежуточной в настройках поиска номенклатуры.

Не могли бы вы подробнее объяснить что нужно сделать. Не понял если честно.


"Возьмите реальный шк из 1с" - у нас нет 1с...

"он обычно привязан к упаковке, а не товару" - пробовал в коннекторе проставлять штрихкод и упаковке - результат тот же.

"нужно включить поиск по коду в промежуточной в настройках поиска номенклатуры." - это где?


Сейчас ещё решил попробовать сделать так. Загрузил на сервер дефолтную конфигурацию из папки Batch . Открыл список номенклатуры, пробую сканировать на вин клиенте штрих-код и он тоже не может быть найден.



Обнаружил ещё одну интересную вещь. После того как я завершаю документ, он приходит на сервер с пустым DeclaredItems , хотя при формировании документа я ведь отдавал на терминал заполненные DeclaredItems.

Это при варианте моей конфигурации с коннектором.

Добрый день!

Пришлите папку документов с сервера, проверим.

Добрый!

Действие "Выгрузка на склад" получает список маршрутов (тут всё отлично). Открываем маршрут - загружаются заявки в этом маршруте (казалось тоже без проблем). Заявки отображаются, но не находятся по штрих-коду. После завершения документа - документ приходит на сервер с пустым DeclaredItems.


Наша конфигурация:

Documents.rar


Спасибо!

Все корректно работает, создал документ на ТСД в Выгрузке на склад, убрал ограничение при поиске номенклатуры из строк документа. Отсканировалось нормально по ШК товара 00000000047

Очистите содержимое папки документов на ТСД, возможно, у вас там хранится старая номенклатура.

Ввести количество неудалось, из за особенностей конфигурации.

"создал документ на ТСД в Выгрузке на склад" - но наша конфигурация не позволяет создавать документы на терминале. Они могут формироваться только на сервере. И как мне кажется это основная проблема в синхронизации документов от коннектора к терминалу. Не могу понять почему заявки видно, но по штих-коду не бьются, и почему документ возвращается без них.


"убрал ограничение при поиске номенклатуры из строк документа" - будьте добры, расскажите подробнее что за ограничение и где оно устанавливается?


"Очистите содержимое папки документов на ТСД" - сделал в первую очередь.

1) В настройках типа документа

2) http://prntscr.com/91hcml

3) А на сервере есть номенклатура? Тот скрин что вы присылали не с сервера, а из папки. Подключитесь к серверу и посмотрите, есть ли она там.

А. Не ограничивать товарами документа нам не подходит.


Сделал так: Загрузил свою конфигурацию. Подключился к серверу. Получил от коннектора документ. Номенклатура есть. Штрихкоды есть. Сканирую - не находит.


Завтра с вами свяжется программист, опишите процедуру работы документа, где какие данные должен получать документ, из каких источников, где лежит номенклатура, и что указано в документе.

1. Пользователь выбирает действие "Выгрузка на склад". Получает список маршрутов из БД.

2. Пользователь выбирает маршрут. Получает список заявок в этом маршруте c штрихкодами и количеством.

3. Пользователь сканирует штрихкод. Указывает кол-во. Всё что он сканировал записывается в CurrentItems.

4. Пользователь завершает документ. Коннектор его получает и вносит необходимые правки в БД.


Вот кусок кода отвечающий за формирование документа на этапе 2:




else if (methodName == "GetRequest")
{

/// Обработка события ПолучитьДокумент.


string userId = args[0] as string;
string documentId = args[1] as string;
string documentTypeName = args[2] as string;
var WarehouseId = Cleverence.Warehouse.ServerSession.Get().DeviceInfo.WarehouseId;

/// Создаем новый пустой документ.
var doc = new Cleverence.Warehouse.Document();

// Формируем документ

var getRouteSqlString = "select r.SxNumber, r.CreatedOn, v.SxNumber " +

"from SxRoute r LEFT JOIN SxVehicle v ON r.SxVehicleId = v.Id " +
"where r.Id='" + documentId + "' ";
using (SqlCommand Routes = new SqlCommand(getRouteSqlString, dbConnection))
{
using (SqlDataReader route = Routes.ExecuteReader())
{
while (route.Read())
{
var routeNumber = route.GetValue(0).ToString();
var routeCreateDate = route.GetValue(1);
var vehicleNumber = route.GetValue(2).ToString();

doc.Id = documentId;
doc.DocumentTypeName = documentTypeName;
doc.Name = routeNumber + " | " + vehicleNumber;
doc.UserId = userId;
doc.WarehouseId = WarehouseId;
doc.CreateDate = Convert.ToDateTime(routeCreateDate);
}
}

}


// Заполняем документ заявками

var getRequestSqlString = "select s.SxNumberRequestId, r.SxNumber, COUNT(s.SxNumberRequestId), r.SxBarCode from SxRequest r " +

" LEFT JOIN SxShippingSheetInRoute s " +
" ON s.SxNumberRequestId = r.Id " +
" WHERE s.SxRouteId='" + doc.Id + "' " +
" AND s.SxUnloaded!=1 " +
" AND s.SxReserved!=1 " +
" AND r.Id=ANY(select SxNumberRequestId from SxShippingSheetInRoute where SxRouteId='" + doc.Id + "') " +
" GROUP BY s.SxNumberRequestId, r.SxNumber, r.SxBarCode;";
using (SqlCommand Requests = new SqlCommand(getRequestSqlString, dbConnection))
{
using (SqlDataReader request = Requests.ExecuteReader())
{
while (request.Read())
{
var requestId = request.GetValue(0).ToString();
var requstName = request.GetValue(1).ToString();
var requestCount = Convert.ToDecimal(request.GetValue(2));
var BarCode = request.GetValue(3).ToString();
//var Marking = request.GetValue(4).ToString();

var documentItem = new Cleverence.Warehouse.DocumentItem();
documentItem.ProductId = requestId;
documentItem.DeclaredQuantity = requestCount;

var product = new Cleverence.Warehouse.Product();
product.Id = new Guid(requestId).ToString();
product.Barcode = BarCode;
product.Name = requstName;
product.Marking = requstName;

var packing = new Cleverence.Warehouse.Packing();
packing.Id = "requestPack";
packing.Name = "Заявка";
packing.UnitsQuantity = 1;
packing.Barcode = BarCode;

product.Packings.Add(packing);
product.BasePackingId = packing.Id;

var productsBook = Cleverence.Warehouse.ProductsBook.Products;
if (productsBook.FindById(product.Id) == null)
{
Cleverence.Warehouse.ProductsBook.Products.Add(product);
}

documentItem.Product = product;
doc.DeclaredItems.Add(documentItem);
}
}
}

return doc;

Ответ

Добрый день!


У Вас:

documentItem.ProductId = requestId;

и

product.Id = new Guid(requestId).ToString();


Т.е. в документе и в справочнике номенклатуры будут разные товары, т.к. Id разный. Соответвенно, если стоит настройка Ограничивать товарами документа, товар не находится по ШК. И в строке документа packingId нужно заполнять:

documentItem.PackingId = "requestPack";

Вообще, если нужно ограничить сканирование только строками документа, номенклатуру можно вообще не использовать.

Можно в строках документа выгружать специальный "неизвестный товар", а штрихкод записывать в доп. поле:

documentItem.ProductId = "*"; // ид. неизв. товара

documentItem.PackingId = "шт";

documentItem.SetField("Barcode", BarCode;); // добавьте в строка документа в конфигурации поле Barcode

documentItem.SetField(... // другие поля, если требуется


В конфигурации для сканирования используйте действие Редактирование поля (в нем сканер работает). Для поиска строки документа Выбор строки с поиском по полю Barcode.


Но Ваш вариант тоже должен работать, если documentItem.ProductId и product.Id будут одинаковые.


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