Форум OlegON > Программы и оборудование для автоматизации торговли > Системы автоматизации торговли > Супермаг Плюс (Супермаг 2000)

Выгрузка информации по артикулам в текстовый файл без участия пользователя : Супермаг Плюс (Супермаг 2000)

23.11.2024 6:55


16.05.2014 15:08
Встала задача - выгружать информацию по карточкам, типа:
артикул, название, единица измерения, страна, производитель, розничная цена, остаток, .... с фильтром текущий остаток >0 в текстовый файл с разделителями. Нет какой-нибудь утилитки для подобных целей ? выгружать по расписанию, без участия пользователя.

Может кто чем пользуется для подобного ?
16.05.2014 15:23
Как это сделать пошагово - нигде информации нет ? Или RTFM ?
16.05.2014 17:49
Попробуй воспользоваться вот этим:
Сверка между ЦО и магазинами
надо только запросы подправить под твои задачи
19.05.2014 10:47
Воспользовались советом konst, все замечательно работает.
по ссылке - то, что получилось. ВЫГРУЗКА НА FTP текстового файла из СУПЕРМГА

для не разбирающихся в SQL - запрос можно составить с помощью задач бизнес анализа.
т.е. делаем задачу в бизнес анализе, затем чтобы узнать какой результирующий запрос получается - намеренно делаем ошибку (добавляем поле с заведомо неправильной функцией типа ddd()), задача выдаст ошибку, результирующий запрос смотрим в C:\SM2000\Data\SmAnalyticsErrorLog.txt
из этого запроса удаляем упоминания ddd() и используем, добавив в конец запроса ; .
При необходимости корректируем запрос на предмет получения файлов с разделителями.

затем - для выгрузки на фтп используется wput, легко гуглится, работает нормально.
также можно добавить функциональности и отсылать результаты по почте, можно использовать blat или любую консольную программу для отсылки почты.
В итоге получаем нечто типа автоматической рассылки "отчетов" по почте.
19.05.2014 11:51
Добавление по поводу sqlplus для запроса. Вопрос к знатокам.

вот пример файла .sql, подсовываемого в sqlplus для вывода значения в файл:
------
rem готовимся к выводу данных
SET echo off newpage 0 space 0 pagesize 0 feedback off head off trimspool on linesize 1000
rem открываем файл на запись
SPOOL %_filename%.csv
rem 1. дата, продажа-возвраты, число чеков, средний чек
SELECT trunc((Z.CheckDate)) as Field1,round((SUM((decode(Z.IsSale,'1',Z.TotalSum,0))-(decode(Z.IsSale,'1',0,Z.TotalSum)))),4) as Field6,round((SUM(decode(Z.OpCode,1,1,-1))),4) as Field5,round((round((SUM((decode(Z.IsSale,'1',Z.TotalSum,0))-(decode(Z.IsSale,'1',0,Z.TotalSum)))),4)/round((SUM(decode(Z.OpCode,1,1,-1))),4)),4) as Field7
FROM SVAnalyticsCheck Z
WHERE Z.CheckDate between to_date('13.05.2014','DD.MM.YYYY') and to_date('18.05.2014','DD.MM.YYYY')
GROUP BY trunc((Z.CheckDate));
rem закрываем файл
SPOOL off
exit
---------
Сам запрос взяли из бизнес анализа, впрочем, не суть.
получаем в файле информацию типа:
---
16-MAY-14 252584.1 279 905.3194
18-MAY-14 287449 315 912.5365
---
Вопрос - как сделать разделителем символ с каким нибудь кодом (типа CHR(149)) и избавиться от лишних пробелов ?
нагуглив нашел сист. переменную COLSEP
COLSEP <текст> Задает текст, который будет выдаваться между выбранными столбцами. Если текст содержит пробелы или символы пунктуации, его необходимо брать в апострофы. По умолчанию используется один пробел.
используем colsep #
SET echo off newpage 0 space 0 pagesize 0 feedback off head off trimspool on linesize 1000 colsep #
получаем:
---
16-MAY-14# 252584.1# 279# 905.3194
18-MAY-14# 287449# 315# 912.5365
---
а хотелось бы без пробелов:
---
16-MAY-14#252584.1#279#905.3194
18-MAY-14#287449#315#912.5365
---
Можно ли так сделать ?
19.05.2014 12:24
Код:
select docid||'#'||itemprice||'#'||totalprice from supermag.smspec where rownum<10;
19.05.2014 14:09
Сейчас так и делаем, просто - если брать запрос из того, что сгенерировал бизнес-анализ, то его необходимо дорабатывать. А хотелось paste|copy и счастье.
25.06.2014 09:01
Экк, сделал и только потом нашел тему.
Задача была выгрузить под виндой в UTF8
1. Артикул товара
2. Старшую группу товара
3. Наименование товара
4. Ед. изм
5. Цену
Вот мой вариант.
loader.cmd
Код:
rem Script made by OlegON (https://olegon.ru)
@echo off

rem FTP options
set ftp_user=olegon
set ftp_server=192.168.1.1
set ftp_password=password

rem Database name
set DB=TESTDB
set supermag_pwd=qqq

rem Storage number
set MX=2

rem Price type
set price=0

c:
cd c:\loader
set NLS_LANG=RUSSIAN_CIS.UTF8
date /T >>cards.log && time /T >>cards.log && sqlplus -S supermag/%supermag_pwd%@%DB% @loader %MX% %price% >NUL && echo Success >>cards.log && wput -t 3 -R -u -nc cards.csv ftp://%ftp_user%:%ftp_password%@%ftp_server%/>>cards.log
exit
и loader.sql
Код:
SET LINESIZE 1200
SET PAGESIZE 0
SET FEEDBACK OFF
SET ECHO OFF
SET VERIFY OFF
SET PAUSE OFF
SET TRIMSPOOL ON
spool cards.csv
select c.article||';'||t.name||';'||replace(c.name,chr(9),' ')||';'||c.mesabbrev||';'||p.price from supermag.smcard c, supermag.sacardclass k, supermag.sacardclass t ,supermag.smprices p
where c.idclass=k.id and t.tree=substr(k.tree,1,instr(k.tree,'.')) and p.article=c.article and p.storeloc=&1 and p.pricetype=&2;
spool off
exit
30.10.2014 12:41
Пытаюсь разобраться в коде, что значит p.storeloc=&1 and p.pricetype=&2
это идентификаторы магазина и вида цены?
Часовой пояс GMT +3, время: 06:55.

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