[ОТВЕТИТЬ]
29.09.2011 17:51
mat skywalker
 
В документированных возможностях SET-Retail указан способ обмена COM-объекты. Если руководствоваться стандартной инструкцией, что-либо сделать невозможно. Данных из инструкции менее чем достаточно. В "техподдержке" Кристалла ответили "ничо не знаем" и "никто не знает". Поражает этот непрофессионализм. Я знаю, по крайней мере, одно ПО обменивающееся с SET-Retail через СОМ объекты (S-market). Вот КАК им удалось сделать обмен если "никто не знает"?

Напомню, что обмен через COM объекты присутствует в SET-Retail, начиная с самых старых версий и по сей день.
Если кто нибудь хоть что то знает о этой загадочной теме, отпишитесь. Буду благодарен.
29.09.2011 19:00
grannie
 
Цитата:
mat skywalker Если руководствоваться стандартной инструкцией
про какую инструкцию речь? в infosys'е целый раздел по этому есть, с кучей примеров и описаний.
(Ежели чего - лично я в этом не копенгаген)
30.09.2011 03:47
gorbach
 
В общем виде это выглядит так.
Импорт
  • Поднимаем COM-объект "KassServer.LoadData" (для Центрум "CentrumExchange.LoadData").
  • Заполняем свойства объекта DeviceType, DeviceList, DataDelimiter, DataFormat, Data (свойство Data, как я понимаю, уже не используется).
  • Вызываем метод Transfer(DataToImport, Operation)
Подробно свойства и методы описаны в документации

Экспорт
Там несколько объектов/интерфейсов все описано в документации с примерами.
Смысл тот же. Поднимаем нужный COM-объект. Заполняем свойства. Вызываем нужный метод.

Пока все работает. Но у меня сложилось впечатление, что Кристаллу COM не нужен и поддерживать они его не хотят. Основным способом обмена между SET:Retail и внешней системой является XML. Поэтому я бы с COM не заморачивался, а разбирался бы с XML-обменом.
02.10.2011 23:50
mat skywalker
 
Любой файловый обмен хуже чем COM обмен, хотябы из за низкой скорости работы. Вы замеряли сколько времени прогружаются 76 тыс. карточек товаров в кристале версии 5.1.39 и в Кристале версии 5.2.80.009 ? Это просто небо и земля.
Старый Кристал на порядок (!) быстрее.

Те сведения, которые есть в документациях описывают только ЭКСПОРТ. Все что касается ИМПОРТА - тайна. Нет ни примеров ни внятного описания. То, что имеется в инструкции, повторюсь, не применимо потому что недостаточно.
03.10.2011 03:38
gorbach
 
Описания импорта через COM в инструкции нормальное. Там все очень просто. Описание свойств и метода Transfer есть в документации. Что не понятно?
Что касается файлового обмена. Соглашусь, что он медленнее. Но в последних версиях SET:Retail импорт через COM практически равноценен файловому обмену (стал медленным, фактически вызов метода Transfer происходит мгновенно, сразу отдает управление, но пока это все дойдет до оборудования...). Находятся, даже, те кто утверждает будто XML обмен в SET:Retail быстрее (не знаю, не пробовал).
Если Вас интересует именно COM обмен, то напишите, что у Вас не получается. Я попробую помочь.
03.10.2011 20:45
mat skywalker
 
А можно писать данные пряв базу? В виде Джобов? Так та точно быстрее будет, в обход служб транспорта.
04.10.2011 05:20
gorbach
 
Можно и прямо в базу писать. Но тут я помочь не могу - никогда такой потребности не возникало, опыта нет.
04.10.2011 10:21
mat skywalker
 
А по СОМ объектам опыт есть?)
Такой вот код на VBS выдает ошибку "Несоответствие типа":

SQLstr="99991|Test1|99992|Test2"
Set objSES = CreateObject("KassServer.LoadData")
objSES.DeviceList="*"
objSES.DataDelimiter = "|"
objSES.device = 1
objSES.DataFormat = "GoodsItem; GoodsName"
objSES.data=SQLstr
04.10.2011 10:42
Shift
 
Data - это тип (цифровое значение, в твоём случае наверно 1 - товары)
а дальше
Код:
transfer(sqlStr,"true",)
04.10.2011 10:49
Shift
 
Да ещё в
Цитата:
mat skywalker objSES.DataFormat = "GoodsItem; GoodsName"
пробел убери на всякий случай
04.10.2011 11:57
TANGOR
 
Напрямую в БД писать можно используя процедуру ImportDataInsert
она будет записывать в таблицу импорта ImportData
04.10.2011 13:49
mat skywalker
 
SQLstr="99991|Test1|99992|Test2"
Set objSES = CreateObject("KassServer.LoadData")
objSES.DeviceList="*"
objSES.DataDelimiter = "|"
objSES.device = 1
objSES.DataFormat = "GoodsItem;GoodsName"
objSES.data=1
opp=objSES.transfer(SQLstr,"true",0)


ПОБЕДА! Такой код работает. Огромное вам спасибо. Оталось только понять почему именно objSES.transfer(SQLstr,"true",0) - нужен ноль и как получить статус загрузки.
05.10.2011 08:27
Shift
 
Там вроде не 0 надо, а переменную в которую возвратится количество строк заданий.
05.10.2011 10:28
vitamin
 
могу привести кусок кода как в нашей 1с передача по сом
...
ОбъектЗагрузки.DataFormat="GoodsItem;GoodsBarCode;GoodsBarCodePrice;GoodsBarCodeSetActive;GoodsBarCodeQuantity"; //GoodsBarCodeQuantity=1 //GoodsBarCodePrecision=0,001/1
СтрокаДанныхШК = "";
...
Попытка
//ОбъектЗагрузки=Новый COMОбъект("KassService.LoadData"); //ОбъектЗагрузки=Новый COMОбъект("CentrumExchange.LoadData"); - CentrumExchange - имя объекта, если это SET-Centrum
ОбъектЗагрузки=Новый COMОбъект("CentrumExchange.LoadData");
ОбъектЗагрузки.Device=8;
ОбъектЗагрузки.DeviceList=СписокКасс;
ОбъектЗагрузки.DataDelimiter="|";
Исключение
Ошибка=ОписаниеОшибки();
КодОшибки=22515; ТекстОшибки="Ошибка создания COM-объекта KassService.LoadData ("+Ошибка+")"; Возврат;
...
зы здесь в офисе мы грузим центрум. если грузим ретайл то kassservice ставим и device=1
12.10.2011 05:36
mat skywalker
 
С загрузкой чего попало справился. Вопрос: как сказать кристаллу, ЧТО я гружу? В смысле как отдельно загрузить группы, отдельно штрихкоды, отдельно цены, отдельно товары?
12.10.2011 09:09
Shift
 
sesObj.Data=Тип_данных;
Тип данных смотри в приложении 5 документа "Базы данных комплекса Кристалл SET. Руководство системного администратора.PDF"
Документ ищи в папке ..\SET\DOC
21.10.2011 13:42
mat skywalker
 
Это не то. Тип данных 1 это вообже ТОВАРЫ. Для этого типа требуется передавать и название и шк и группу и отдел и цену и вообще все свойства. Если что-либо пропустить, то в карточке будет пусто место.

Меня интересует КАК прогрузать только цены например. Или только группы товаров.
21.10.2011 13:51
mat skywalker
 
Поставлю задачу конкретнее. Пользуюсь SETом версии 5.1.39 (это самая лучшая и стабильная версия из всех вообще). Но он не умеет заприщать продажу алкоголя после 23:00
Выход: написал скрипт, который выгружает товары из касс, а потом загружает обратно. Работате все не очень быстро, т.к. 14 касс.
Если есть возможность обрабатывать через СОМ объекты только штрихкоды, было бы просто иделаьно.
21.10.2011 14:28
Shift
 
Цитата:
Это не то. Тип данных 1 это вообже ТОВАРЫ. Для этого типа требуется передавать и название и шк и группу и отдел и цену и вообще все свойства. Если что-либо пропустить, то в карточке будет пусто место.

Меня интересует КАК прогрузать только цены например. Или только группы товаров.
Всё передавать не обязательно, требуется только обязательные поля.
Конкретно по цене:
Допусти товар "Тестовый" с кодом "12345" уже есть на кассах и надо установить новую цену, тогда
Код:
.....
KC.DataDelimiter="#";
KC.Data=1;
KC.DataFormat="GoodsItem;;GoodsPrice";
....
KC.Transfer("12345#123.45#", "True", );
.....
Data
Цитата:
Поставлю задачу конкретнее. Пользуюсь SETом версии 5.1.39 (это самая лучшая и стабильная версия из всех вообще). Но он не умеет заприщать продажу алкоголя после 23:00
Выход: написал скрипт, который выгружает товары из касс, а потом загружает обратно. Работате все не очень быстро, т.к. 14 касс.
Если есть возможность обрабатывать через СОМ объекты только штрихкоды, было бы просто иделаьно.
В этом случае можно просто поставить опцию продавать только разрешенный товар и в том-же типе данных "Товар" выгружать GoodsEnable=1 либо 0
и просто
21.10.2011 14:58
Yadolov
 
Цитата:
mat skywalker Пользуюсь SETом версии 5.1.39 (это самая лучшая и стабильная версия из всех вообще). Но он не умеет заприщать продажу алкоголя после 23:00
.
Умеет SET 5.1.39 запрещать продажу алкоголя после 23-00. Кудряво конечно , но работает . Делается скидка с отрицательным процентом - 999999,99 на группу алкоголь и ограничением на максимальную сумму чека в группе касс.
21.11.2011 08:11
mat skywalker
 
Цитата:
Shift Всё передавать не обязательно, требуется только обязательные поля.
Конкретно по цене:
Допусти товар "Тестовый" с кодом "12345" уже есть на кассах и надо установить новую цену, тогда
Код:
.....
KC.DataDelimiter="#";
KC.Data=1;
KC.DataFormat="GoodsItem;;GoodsPrice";
....
KC.Transfer("12345#123.45#", "True", );
.....
Data
У меня ваш пример сработал так: появился товар с кодом и ценой, без названия и ШК
И еще без привязки к группе и месту хранения.
21.11.2011 08:32
Shift
 
Я же сказал (если товар уже есть в оборудовании), а в первый раз естественно надо выгрузить всё что нужно.
21.11.2011 13:50
mat skywalker
 
Вы меня не поняли. У меня именно происходит замена. т.е. товар уже есть, гружу только цену на него - получается описанная выше лажа.
22.11.2011 13:16
Shift
 
Весьма странно:
На релизе 5.2.80.005 посылаю
Код:
DRV=Новый COMОбъект("KassServer.LoadData");
DRV.DataDelimiter="#";
DRV.Device=1;
DRV.DeviceList=1;
DRV.Data=1;
DRV.DataFormat="GoodsItem;GoodsPrice;GoodsName";
DRV.Transfer("555#300#Test#","True",);
смотрю в модуле визуализации и на кассе - есть товар test с кодом 555 и ценой 300
дальше
Код:
DRV=Новый COMОбъект("KassServer.LoadData");
DRV.DataDelimiter="#";
DRV.Device=1;
DRV.DeviceList=1;
DRV.Data=1;
DRV.DataFormat="GoodsItem;GoodsPrice";
DRV.Transfer("555#333#","True",);
смотрю в модуле визуализации и на кассе: изменилась только цена, наименование осталось
Опции темы


Часовой пояс GMT +3, время: 02:43.

 

Форум сделан на основе vBulletin®
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd. Перевод: zCarot и OlegON
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.