Ваши комментарии

Как я понял из логов может быть ещё и такая ситуация когда с разных терминалов проводят разные операции. Например один терминал получает информацию об упаковке, а другой перемещает что-то с одной полки на другую. В обоих случаях используются подключение к БД. Таким образом происходит запрос к БД из разных частей кода одновременно.

Таким же образом возможна путаница данных, когда InvokeMethod вызывается с разными аргументами.

Вижу вариант обернуть всё тело метода InvokeMethod в lock() но как это скажется на скорости работы коннектора. Надо проводить тестирование.

Благодарю! Решение с использованием lock почти полностью решило проблему.

Спасибо! Проблема решена именно таким образом!

Как-то я сам не дошёл до элемента "Редактирование поля"

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;

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


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


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


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


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

Добрый!

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


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

Documents.rar


Спасибо!

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

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

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


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

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

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


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



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


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


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



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