Вернуться
Проблема с выгрузкой остатков в сервер CashTAN
Павленко Сергей
0 - 01.03.2011-15:54
Сервер ECR Server for CashTAN
версия 2.2.2997.2997
Подскажите пожалуйста, делаю выгрузку остатков из учетной системы 1С 8.1, при этом нормально выгружаются остатки по всем позициям, кроме одной. Выгрузка осуществляется так:

Если ЭтоНовыйГудЛист ИЛИ НЕ ГудЛист.SeekLocalCode(КодТовара) Тогда
//
...
//
Иначе
ГудЛист.Edit();
ГудЛист.Fields("Department").Value = Отдел;
ГудЛист.Fields("BarCode").Value = ШтрихКод;
//ГудЛист.Fields("Name").Value = СтрокаТоваров.Наименование;
ГудЛист.Fields("Price").Value = Цена;
Если РежимВыгрузки = Перечисления.РежимыВыгрузкиВCashTAN.Остатки И
СтрокаТоваров.Остаток > 0 Тогда
ГудЛист.Fields("Count").Value = СтрокаТоваров.Остаток;
КонецЕсли;
ГудЛист.Fields("Price1").Value = Цена1;
ГудЛист.Fields("Count1").Value = Кво1;
ГудЛист.Fields("Price2").Value = Цена2;
ГудЛист.Fields("Count2").Value = Кво2;
ГудЛист.Fields("Price3").Value = Цена3;
ГудЛист.Fields("Count3").Value = Кво3;
//ГудЛист.Fields("Price4").Value = Цена4;
//ГудЛист.Fields("Count4").Value = Кво4;
ГудЛист.Update();
КонецЕсли;

после выполнения кода в поле ГудЛист.Fields("Count").Value оказывается требуемое значение остатка, но после дозвона до киоска и сеанса обмена с CashTAN в данной позиции остаток равен 0. Т.е. запись как будто заблокирована, хотя все остальные позиции обновляются нормально. Сделал несколько попыток - результат неизменный
Jekky
1 - 01.03.2011-15:59
Если были продажи, то остаток может быть и 0, и менее. Добавьте проверку.
Павленко Сергей
2 - 01.03.2011-16:05
Никаких сообщений об ошибке не выводится, лог выглядит приблизительно так

РезультатОбменаСТорговымОборудованием:SMC02863: Начало сеанса обмена
РезультатОбменаСТорговымОборудованием:SMC02863: Успешно
НачалоЗакрытияПротоколаКассы:Закрываем протокол № 19 от 1 марта 2011 г.
ЗагруженыПродажиПоТорговойТочке:Киоск37
ПередачаТМЦВДрайверCashTANВыполнена:ТТ Киоск37, обр. 360 из 360
ВыгрузкаВТТВыполнена:ТТ Киоск37, выгружено 360 записей.
ВыполненаВыгрузкаВТорговуюТочку:Выгрузка остатков
РезультатОбменаСТорговымОборудованием:SMC02863: Начало сеанса обмена
РезультатОбменаСТорговымОборудованием:SMC02863: Успешно


Как я понимаю, в определенных ситуациях запись блокируется и не позволяет изменить поля в таблице, точно так же как иногда бывает невозможно изменить наименование позиции (если были продажи по ней до Z-отчета), но в этой ситуации логики поведения системы уловить не могу
Павленко Сергей
3 - 01.03.2011-16:07
У меня в сервере установлена птичка
"Запрещена продажа сверх остатка"
и кассир не может продать ничего, т.к. на остатке - 0. ККМ выдает "Помилка"
Павленко Сергей
4 - 01.03.2011-16:12
Не может продать именно эту позицию, все остальные продаются нормально. Но иногда сталкиваюсь с ситуацией, что в некоторых записях не обновляются остатки, т.е. приход прошел, остатки выгрузили, но таблицах Кэштана все равно 0.
А на приведенной выше позиции это было видно наиболее явно,в отладчике я вижу, что остаток помещается в поле, но по окончании операции обмена, там все равно 0
Jekky
5 - 01.03.2011-17:42
Записи не блокируются - вообще.
"Запрещена продажа сверх остатка" работает ровно до того момента, пока вы не попытаетесь вывести меньшее количество.

Какой метод используете для получения не "ЭтоНовыйГудЛист"?
Павленко Сергей
6 - 02.03.2011-14:13
Я могу конечно глянуть откуда берется ЭтоНовыйГудЛист (это при начальной выгрузке, когда память Кэштана не заполнена), но роли это не играет, т.к. позиция есть в Кэштане и она находится методом SeekLocalCode(КодТовара), в этом случае исполнение передается в ветку которая открывает запись для редактирования
ГудЛист.Edit();
...
ГудЛист.Fields("Count").Value = СтрокаТоваров.Остаток;
...
ГудЛист.Update();

и вот здесь происходит что-то странное, 1С помещает остаток в ГудЛист.Fields("Count").Value, отладчиком я вижу, что остаток там есть, метод Update проходит без ошибок, но после завершения сеанса обмена (Кэштан подключен через модем) я запускаю сервер Кэштана и вижу в этой строке остаток - 0, хотя по другим позициям все обновилось нормально.

P.S. Да, я заметил, что если в поле Count поместить отрицательное значение программа вылетает с ошибкой, для борьбы с этим моментом используется проверка на отриц. значение

Если ... И
СтрокаТоваров.Остаток > 0 Тогда
ГудЛист.Fields("Count").Value = СтрокаТоваров.Остаток;
КонецЕсли;
Павленко Сергей
7 - 02.03.2011-14:16
ЭтоНовыйГудЛист определяется так:
ЭтоНовыйГудЛист = Ложь;
Если РежимВыгрузки = Перечисления.РежимыВыгрузкиВCashTAN.ПолнаяВыгрузка Тогда
//Новый лист для товаров
ГудЛист = Секция.NewGoodsList;
ЭтоНовыйГудЛист = Истина;
Иначе// Выгрузка изменений в существующий справочник
Попытка
ГудЛист = Секция.BaseGoodsList;
Исключение
ГудЛист = Секция.NewGoodsList;
ЭтоНовыйГудЛист = Истина;
КонецПопытки;
КонецЕсли;


Т.е. получается если не удалось открыть BaseGoodsList, но создается новый
Jekky
8 - 02.03.2011-15:29
> запускаю сервер Кэштана и вижу в этой строке остаток - 0

Так это нормально. В окне сервера отображается количество С УЧЁТОМ ПРОДАЖ в открытых протоколах.

Не понял я вас с начала просто.
Павленко Сергей
9 - 02.03.2011-16:26
Она же не может продать, у нее 0 на остатке, пишет Помилка. Она звонит нам - товар есть, а пробить невозможно. Я обмениваюсь, а товара как было 0, так и есть.
Но хотя на мысль Вы натолкнули интересную, что остатки с учетом продаж в открытых протоколах, надо будет проверить, может и правда что-то раньше было продано, спасибо

Добавить сообщение
Ваше имя 
Пароль (для зарегистрированных) 
email 
Сообщение 
Введите код, изображенный на картинке
Для зарегистрированных пользователей можно не вводить 
Внимание - введите код без последнего символа!

© ТФПК Лтд. Все права защищены.
0.028996 seconds