Страница 1 из 2

Выгрузка определенных столбцов номенклатуры товаров.

Добавлено: 13 фев 2017, 17:18
Csq
Здравствуйте. Возможно кому-нибудь будет полезным.
Я выгружаю на свой сайт базу товаров из Тирики, и пользуюсь стандартной функцией выгрузки номенклатуры товаров в csv файл. Если мне не изменяет память, там выгружается 14 столбцов, мне же необходимы из них лишь несколько. А именно id товара, группа, наименование, розничная цена, количество.
Одной кнопкой в Тирике так не сделать. Но в соседней теме писали, можно создать файлик autoexec.sql, кинуть его в папку с Тирикой, и при запуске программы он выполнится, и создаст экспортированный csv файл. А в самом файле уже прописать нужный запрос.
База программы - это SQLite база. Соответственно ее можно открыть любым просмотрщиком, и глянуть какие поля нужны для выгрузки.
Это все справедливо на версию Тирики с файловой БД
В результате я сформировал такой запрос в БД:

Код: Выделить всё

SELECT goods.id, good_groups.full_name, goods.name, goods.price, remainders.remainder FROM good_groups, goods, remainders WHERE goods.id = remainders.good_id AND goods.group_id = good_groups.id AND remainders.shop_id = 0
описание
goods.id - id товара
good_groups.full_name - полное имя группы
goods.name - наименование товара
goods.price - розничная цена
remainders.remainder - количество
goods.id = remainders.good_id - связываем id Товара в двух таблицах
goods.group_id = good_groups.id - то же самое, дабы
remainders.shop_id = 0 - если у вас больше одного склада, то данная выборка берет товар из основного. Если нужны выборки по другим складам, тут нужно изменить значение на нужное
Но, небольшой нюанс, после выполнения этот файлик удалится, а запускать программу с определенным ключом не получится. Конечно можно постоянно копировать этот запрос посредством xcopy в батнике, но это же не красиво ;)

В принципе, если вам хватает этого, можно так и оставить. Мне нужна была максимальная автоматизация. Поэтому я пошел дальше.
На официальном сайте SQLite, которая позволяет работать с базами этого формата, я скачал сам бинарник (DLL файл) и тулзы, где и находится выполняемый exe.
Затем, все это нужно распаковать в одну папку. ну к примеру D:\SQLite. Для полной красоты я еще добавил этот путь в переменные среды, в параметр PATH, чтобы из любого места в командной строке написав sqlite3 можно было вызвать эту программу.
Ну так вот, данная программа естественно умеет также экспортировать данные в csv через консоль.
Нужно просто создать отдельно запускаемый bat-файл с кодом

Код: Выделить всё

sqlite3 -csv "C:/Program Files (x86)/Tirika Shop/shop.db" < aut.sql > D:/data.csv
описание
C:/Program Files (x86)/Tirika Shop/shop.db - путь с базой Тирики, куда она ставится по умолчанию
aut.sql - внутри этого файлика сам sql запрос, аналогичный выше, также располагается в папке D:\SQLite, можно сделать абсолютный путь, по примеру строчки выше
D:/data.csv - путь, куда выгружается csv файл
Как видно по описанию, нам также нужно создать sql файл с запросом. Он аналогичен запросу выше, из autoexec.sql. Однако небольшой нюанс. Если у вас уже настроена закачка куда-то, и вам нужен разделитель именно ";" а не "," который делает по умолчанию sqlite вам нужно добавить параметр separator в sql запрос, в итоге получится вот так:

Код: Выделить всё

.separator ";"
SELECT goods.id, good_groups.full_name, goods.name, goods.price, remainders.remainder FROM good_groups, goods, remainders WHERE goods.id = remainders.good_id AND goods.group_id = good_groups.id AND remainders.shop_id = 0 ORDER BY good_groups.full_name
Внизу я добавил ORDER BY good_groups.full_name для сортировке по имени группы.

Если вам такое интересно, пробуйте. :)

Re: Выгрузка определенных столбцов номенклатуры товаров.

Добавлено: 30 июл 2017, 08:34
mihalich81
Хороший способ, но не выгружает фото товаров.
Я сделал тоже одной кнопкой скриптом Visual Basic эмуляцией нажатий в Тирике.

Отправлено спустя 3 минуты 44 секунды:
Не могу сделать запрос с выводом поставщика товара.
В Тирике это секретное лицо. Писал об этом, но Сергей не поддержал идею вывести поставщика в отчёты товаров.
Может кто знает способ вывести поставщика к каждому товару?

Re: Выгрузка определенных столбцов номенклатуры товаров.

Добавлено: 30 июл 2017, 13:12
Vitaly
mihalich81 писал(а):Хороший способ, но не выгружает фото товаров.
Я сделал тоже одной кнопкой скриптом Visual Basic эмуляцией нажатий в Тирике.

Отправлено спустя 3 минуты 44 секунды:
Не могу сделать запрос с выводом поставщика товара.
В Тирике это секретное лицо. Писал об этом, но Сергей не поддержал идею вывести поставщика в отчёты товаров.
Может кто знает способ вывести поставщика к каждому товару?
На 7.2 и выше, с этим нет проблем. Просмотрите , тут есть отчёт с поставщиками.

Re: Выгрузка определенных столбцов номенклатуры товаров.

Добавлено: 07 авг 2017, 16:44
Csq
mihalich81 писал(а):Хороший способ, но не выгружает фото товаров.
Я сделал тоже одной кнопкой скриптом Visual Basic эмуляцией нажатий в Тирике.

Отправлено спустя 3 минуты 44 секунды:
Не могу сделать запрос с выводом поставщика товара.
В Тирике это секретное лицо. Писал об этом, но Сергей не поддержал идею вывести поставщика в отчёты товаров.
Может кто знает способ вывести поставщика к каждому товару?
Ага, я пытался сделать с выгрузкой фото, но потом забил, не понравилось, что фото в базе хранятся, и размер увеличивается в геометрической прогрессии, а мне базу надо было по интернету гнать. В итоге просто подвязал фото на id товара, и подгружаю их отдельно из папки.

Re: Выгрузка определенных столбцов номенклатуры товаров.

Добавлено: 07 авг 2017, 18:23
Vitaly
И фотки, и поставщики выгружаются без проблем.
Есть готовые отчёты уже.

Re: Выгрузка определенных столбцов номенклатуры товаров.

Добавлено: 07 авг 2017, 19:39
mihalich81
Я сделал отчёт Дозаказ товара в EXCEL. В EXCEL более широкие возможности.
Ничего сложного, но именно в моей боевой сетевой базе выдаёт ошибку. :cry:

Re: Выгрузка определенных столбцов номенклатуры товаров.

Добавлено: 07 авг 2017, 20:16
Vitaly
mihalich81 писал(а):Я сделал отчёт Дозаказ товара в EXCEL. В EXCEL более широкие возможности.
Ничего сложного, но именно в моей боевой сетевой базе выдаёт ошибку. :cry:
Наверно ошибки есть в запросе?
Киньте в личку запрос, посмотрю.

Re: Выгрузка определенных столбцов номенклатуры товаров.

Добавлено: 07 авг 2017, 20:49
Csq
mihalich81 писал(а):Я сделал отчёт Дозаказ товара в EXCEL. В EXCEL более широкие возможности.
Ничего сложного, но именно в моей боевой сетевой базе выдаёт ошибку. :cry:
Если я правильно сообразил, можно посмотреть такой запрос

Код: Выделить всё

select waybill_items.waybill_id, waybill_items.goods_id, goods.name, waybills.contractor_id, suppliers.name
from waybills, waybill_items, goods, suppliers
where waybill_items.waybill_id = waybills.id 
AND waybill_items.goods_id=goods.id
AND suppliers.id= waybills.contractor_id
AND waybills.record_type=1 order by waybills.id desc
Выводит колонки: id продажи, id товара, наименование товара, id поставщика, имя поставщика везде где record_type=1 (это закупка)
А с ним и глянуть, как его запихать в дозаказ.

Re: Выгрузка определенных столбцов номенклатуры товаров.

Добавлено: 07 авг 2017, 21:56
Vitaly
Csq писал(а):
mihalich81 писал(а):Я сделал отчёт Дозаказ товара в EXCEL. В EXCEL более широкие возможности.
Ничего сложного, но именно в моей боевой сетевой базе выдаёт ошибку. :cry:
Если я правильно сообразил, можно посмотреть такой запрос

Код: Выделить всё

select waybill_items.waybill_id, waybill_items.goods_id, goods.name, waybills.contractor_id, suppliers.name
from waybills, waybill_items, goods, suppliers
where waybill_items.waybill_id = waybills.id 
AND waybill_items.goods_id=goods.id
AND suppliers.id= waybills.contractor_id
AND waybills.record_type=1 order by waybills.id desc
Выводит колонки: id продажи, id товара, наименование товара, id поставщика, имя поставщика везде где record_type=1 (это закупка)
А с ним и глянуть, как его запихать в дозаказ.
Запрос полностью не правильно написанный... Уходит в цикл скорей всего.
И или показывает бред, или же не показывает ничего.

Re: Выгрузка определенных столбцов номенклатуры товаров.

Добавлено: 08 авг 2017, 11:38
mihalich81
Вот мой запрос. Здесь немного сложнее, т.к. в основном цикле обрабатываются продажи, для получения поставщика из закупок пришлось использовать вложенный SELECT. В этом, скорее всего и проблема. Не пойму, почему на двух базах работает, а на моей основной выводит ошибку запроса 104. Боевой базе уже четыре года ежедневного использования. Куча удалений и т.п.
Запрос из отчёта OXETTA.

Код: Выделить всё

SELECT
 goods.id,
 goods.product_code,
 goods.name,
 (SELECT good_groups.name FROM good_groups WHERE goods.group_id=good_groups.id) AS goods_group_name,
 SUM(waybill_items.quantity) AS sold,
 (SELECT SUM(remainder) FROM remainders WHERE good_id=goods.id AND shop_id IN ({shop-ids})) AS remains,
 (SELECT suppliers.name FROM waybill_items, waybills, suppliers WHERE goods.id = waybill_items.goods_id AND waybill_items.waybill_id = waybills.id AND waybills.record_type=1 AND waybills.contractor_id = suppliers.id) AS suppliers_name,

 (1.0 + {percent}.0/100) * SUM(waybill_items.quantity) - 
 (
  SELECT SUM(remainders.remainder - remainders.reserved + remainders.expected - remainders.min_amount)
  FROM remainders
  WHERE good_id=goods.id AND shop_id IN ({shop-ids})
 ) AS forecast
 
FROM
 goods,
 waybill_items,
 waybills
WHERE
 goods.is_deleted=0 AND
 goods.good_type<>1 AND
 waybill_items.goods_id=goods.id AND
 waybill_items.is_deleted=0 AND
 waybills.id=waybill_items.waybill_id AND
 waybills.waybill_date>={today}-{days}*86400 AND
 waybills.waybill_date<={today}+86400 AND
 waybills.record_type=-1 AND
 waybills.is_deleted=0 AND
 waybills.shop_id IN ({shop-ids})
GROUP BY
 1
HAVING
 (1.0 + {percent}.0/100) * SUM(waybill_items.quantity) - 
 (
  SELECT SUM(remainders.remainder - remainders.reserved + remainders.expected - remainders.min_amount)
  FROM remainders
  WHERE good_id=goods.id AND shop_id IN ({shop-ids})
 ) > 0.01
ORDER BY
 3