Показать сообщение отдельно
  #7  
Старый 25.03.2013, 20:18
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,105
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Да легко все решается правкой запроса.
Когда ты открываешь форму, тебе надо знать номер (ID) заказа. Тогда тебе надо:
1. Выбрать все активные товары из каталога.
2. Выбрать архивные товары, которые используются в данном конкретном заказе (что бы можно было их показать).
3. Объединиить результаты этих запросов.
4. Сделать невозможным выбор архивного товара для новых записей. Тут код на Delphi и этот пункт надо рассматривать отдельно, по приведенной информации невозможно что-то посоветовать.

Первые три пункта делаются так:
Код:
SELECT id, name, is_archive from kat_tovara WHERE Arhiv = 0
UNION ALL
SELECT id, name, is_archive from kat_tovara WHERE Arhiv = 1 and id in 
  (
    SELECT kod_tovara_id from OrderItem where Order_id = :itemID
  )

С первой частью запроса все понятно - выбираем все активные товары.
Далее идет UNION ALL, который просто объединяет 2 выборки в одну (список полей должен быть одинаковый по кол-ву и типу).
Третья часть, второй запрос, отбирает архивные товары, которые уже испольщуются в заказе (сорри, названия таблиц написал нормальные, т.к. с твоим транслитом это нечитабельно).

Короче, идея вот такая.
Ответить с цитированием