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

В данном разделе описываем скрипты для работы с базой firebird через тирику
Аватара пользователя

Vitaly
Супермодератор
Сообщения: 100
Зарегистрирован: 05 янв 2017, 17:12
Репутация: 1
Пол: Мужчина
Контактная информация:

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

Сообщение Vitaly » 08 авг 2017, 21:14

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
Подобный разбор запросов, по чему что не работает, уже подходит под платную техподдержку.
Если запрос из шаблона самой Тирики, значит он работает, тогда в чем проблема?
Не понятно.

P.S. мельком пробежаться по запросу осилил все таки.
Замечаний куча.
Самое огромное: это некорректное написание запроса. Вам бы фарберд 3.0, он бы сразу выплюнул этот запрос... фарберд 2.5 скушает, но не весь, а с частичным исправлением все же.

Приводите запрос в порядок, как положено, в соответствии с правилами sql.
/root
Разработка дополнений - https://www.torgkontrol.ru
---
я не разработчик Тирика-Магазин

Аватара пользователя

mihalich81
Форумчанен
Сообщения: 4
Зарегистрирован: 10 фев 2017, 20:49
Репутация: 0
Пол: Мужчина
Контактная информация:

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

Сообщение mihalich81 » 09 авг 2017, 09:29

Спасибо за ответ!
На SQLite мой запрос работает, хотя не должен. Видимо, имеют место невысокие требования к синтаксису.
Для FireBird 2.5 нашёл пару ошибок.
1. Список GROUP BY обязательно должен содержать все поля, кроме агрегатных функций.
2. Применение GROUP BY исключает возможность применения вложенных SELECT для родительского.
Для FireBird 3.0 не тестировал.

Аватара пользователя

Vitaly
Супермодератор
Сообщения: 100
Зарегистрирован: 05 янв 2017, 17:12
Репутация: 1
Пол: Мужчина
Контактная информация:

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

Сообщение Vitaly » 09 авг 2017, 23:26

mihalich81 писал(а):Спасибо за ответ!
На SQLite мой запрос работает, хотя не должен. Видимо, имеют место невысокие требования к синтаксису.
Для FireBird 2.5 нашёл пару ошибок.
1. Список GROUP BY обязательно должен содержать все поля, кроме агрегатных функций.
2. Применение GROUP BY исключает возможность применения вложенных SELECT для родительского.
Для FireBird 3.0 не тестировал.
С пунктом 2 не согласен :-) при определенных условиях можно.
/root
Разработка дополнений - https://www.torgkontrol.ru
---
я не разработчик Тирика-Магазин

Ответить

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 0 гостей