Тема: Набор данных

Пытаюсь создать набор данных, где отображаются, например, не используемые оборудования в ТП (галочка "Не используемые" не стоит)
Сначала создала набор данных, используемые оборудования.
Затем попыталась в новом наборе данных исключить используемые оборудования.
Но запрос получается не таким, каким я хотела видеть.
Потучается:

SELECT    NmkClasses.NOTE AS NmkClasses_NOTE,
    Nomenclatures.ID AS Nomenclatures_ID,
    Nomenclatures.NOTE AS Nomenclatures_NOTE,
    Nomenclatures.NAME AS Nomenclatures_NAME
FROM     Nomenclatures Nomenclatures
    JOIN NmkClasses NmkClasses ON  ( (Nomenclatures.NMK_CLASS_REF=NmkClasses.ID) )
WHERE  ( (NmkClasses.NOTE='ОБР') AND (not exists (
        SELECT  Nomenclatures_1.ID AS Nomenclatures_1_ID 
        FROM   Nomenclatures Nomenclatures   JOIN NmkClasses NmkClasses ON  (
        (Nomenclatures.NMK_CLASS_REF=NmkClasses.ID) )   LEFT JOIN NmkTpVers NmkTpVers ON  (
        (Nomenclatures.ID=NmkTpVers.NMK_ID) )   
        LEFT JOIN NmkTp NmkTp ON  ( (NmkTpVers.ID=NmkTp.VER_ID) )   
        JOIN Nomenclatures Nomenclatures_1 ON  ( (NmkTp.NMK_ID=Nomenclatures_1.ID) )   
        JOIN NmkClasses NmkClasses_1 ON  ( (Nomenclatures_1.NMK_CLASS_REF=NmkClasses_1.ID) )   
        WHERE   ( (NmkClasses_1.NOTE='ОБР') )  GROUP BY   Nomenclatures_1_ID  )) )

А хотелось бы:

SELECT    NmkClasses.NOTE AS NmkClasses_NOTE,
    Nomenclatures.ID AS Nomenclatures_ID,
    Nomenclatures.NOTE AS Nomenclatures_NOTE,
    Nomenclatures.NAME AS Nomenclatures_NAME
FROM     Nomenclatures Nomenclatures
    JOIN NmkClasses NmkClasses ON  ( (Nomenclatures.NMK_CLASS_REF=NmkClasses.ID) )
WHERE ( (NmkClasses.NOTE='ОБР') AND (Nomenclatures.ID not in (
        SELECT  Nomenclatures_1.ID AS Nomenclatures_1_ID 
        FROM   Nomenclatures Nomenclatures   JOIN NmkClasses NmkClasses ON  (
        (Nomenclatures.NMK_CLASS_REF=NmkClasses.ID) )   
        LEFT JOIN NmkTpVers NmkTpVers ON  (
        (Nomenclatures.ID=NmkTpVers.NMK_ID) )   
        LEFT JOIN NmkTp NmkTp ON  ( (NmkTpVers.ID=NmkTp.VER_ID) )   
        JOIN Nomenclatures Nomenclatures_1 ON  ( (NmkTp.NMK_ID=Nomenclatures_1.ID) )   
        JOIN NmkClasses NmkClasses_1 ON  ( (Nomenclatures_1.NMK_CLASS_REF=NmkClasses_1.ID) )   
        WHERE   ( (NmkClasses_1.NOTE='ОБР') )  GROUP BY   Nomenclatures_1_ID  )) )

Можно как-нибудь это сделать?

Re: Набор данных

Насколько я понял, надо показать номенклатуру с флагом Не используется, которая используется в ТП?

Видимо так можно (как пример)

SELECT
    NmkClasses.NOTE AS NmkClasses_NOTE,
    Nomenclatures.ID AS Nomenclatures_ID,
    Nomenclatures.NOTE AS Nomenclatures_NOTE,
    Nomenclatures.NAME AS Nomenclatures_NAME,
    Count(cast( ( NmkTp.VER_ID ) AS Int ) ) AS C_A_TPCNT
 FROM 
    NmkClasses NmkClasses
     JOIN Nomenclatures Nomenclatures ON  ( (NmkClasses.REF_ID=Nomenclatures.NMK_CLASS_REF) ) 
     JOIN NmkTp NmkTp ON  ( (Nomenclatures.ID=NmkTp.NMK_ID) ) 
 WHERE 
 ( (NmkClasses.NOTE='ОБР')AND(Nomenclatures.ISNOT_USED='T') ) 
GROUP BY 
    NmkClasses_NOTE,
    Nomenclatures_NOTE,
    Nomenclatures_NAME,
    Nomenclatures_ID
ORDER BY 
    NmkClasses_NOTE ASC,    Nomenclatures_NOTE ASC,    Nomenclatures_NAME ASC
Спасибо сказали: Евсеева Людмила1
Post's attachments

NotUserOborInTP.ieQueries 1.24 Кб, 2 скачиваний с 2018-08-30 

You don't have the permssions to download the attachments of this post.

Re: Набор данных

Другой вопрос. Сделала некий набор данных, вывела в пользовательское окно,
там прописала вызов макроса, в TCS6.3 все работает
А переставила все в TCS7 - вызов макроса не работает, говорит, что макрос не найден.
В чем может быть причина? Может какие-то настройки нужны?

Re: Набор данных

Для этого надо точнее знать что вы делали.

Re: Набор данных

Что делала где? в наборе данных или в макросе?

Re: Набор данных

все вместе. Как они связаны, там же способов много разных.

Re: Набор данных

Сделала набор данных в "Наборе данных" = A1
В скриптовых модулях создала форму ввода А2 и
оформила вызов UserRecordSet(...) с выводом на AxDbForm
На этой форме есть возможность прописать вызов макроса
Привязала к пользов окну "Используемый модуль" = А3 и
в скриптовых модулях открыла этот модуль и положила макрос А4,
где читается набор данных и производятся некие действия над номенклатурой TCS
В TCS6.3 я такое делала и все работает (не первый раз)
В TCS7 при вызове макроса из пользов окна выходт сообщение "А3 не найден"

Post's attachments

???????????????? ???? ??? ?????? ????????? ? ??.jpg 178.18 Кб, файл не был скачан. 

You don't have the permssions to download the attachments of this post.

Re: Набор данных

надо на AxDbForm поместить конопку, по ней уже делать что нужно.

Ваш вариант работать тоже может конечно, но весьма условно. Так как UserRecordSet много может быть, а форма только одна у них.

Ну а так проверьте связь с макросом для начала

Re: Набор данных

Если я вызывала макрос А4 через Используемый модуль А3,
то к данным набора обращалась TCSActiveModule.Properties("....").DisplayText

Если создать кнопку на форме, подскажите, как обратиться к данным?

Re: Набор данных

Запомнить в глобальную переменную либо использовать https://help.technologics.ru/7.1/TCSAPI … ata_13.htm

Начиная с 7.1 лучше конечно пользоваться методами https://help.technologics.ru/7.1/TCSAPI … dule_9.htm, https://help.technologics.ru/7.1/TCSAPI … ame_13.htm

Ну и это уже будем не макрос (в смысле макрос ТКС) а обработчик на кнопке.

Re: Набор данных

Я попробовала и получилось:

Public Query
'
Sub FormEvent_Button_0_OnObjectClick( Form, ObjName )
'Form As ITCSForm, ObjName As String

   Set TCSActiveModule = Query
   Call FormMacro_Change_Eskiz_To_DokT_IN_Techno(TCSActiveModule)  'Заменить Реквизит операции

End Sub
'
'  01.09.2018 - Евсеева макрос по замене Реквизита 
Sub FormMacro_Change_Eskiz_To_DokT_IN_Techno(TCSActiveModule)  'Заменить Реквизит операции
   
   If TCSActiveModule.Properties(4).NAME <> "NmkTpVers_NAME" Then Exit Sub
   If TCSActiveModule.Properties("Nomenclatures_2_ID").AsSafeInteger = 0 Then Exit Sub

   Doc_ID = TCSActiveModule.Properties("Nomenclatures_2_ID").AsInteger
   Doc_Note = TCSActiveModule.Properties("Nomenclatures_2_NOTE").DisplayText
   Doc_Name = TCSActiveModule.Properties("Nomenclatures_2_NAME").DisplayText
и т.д.