29.02.2016, 16:26 | #1 |
Участник
|
Очередной построитель запросов - на этот раз будет бомба!
Предлагаю вашему вниманию еще один построитель запросов.
Который должен, по идее, развить мысль Маззи о программистком подходе и довести эту мысль до апофеоза. Время изучения этого инструмента - 2 минуты. Время использования - вся последующая жизнь. Суть этой утилиты: пользователь вводит через запятую названия таблиц Аксапты - и в редакторе кода получает готовый запрос - с учетом связей между таблицами. Можно использовать синонимы и рекурсивные связи, когда одна и та же таблица джойнится сама с собой, например связать между собой корреспондирующие проводки ГК, Данный инструмент позволяет, находясь прямо в редакторе кода, из строки вида "ledgerTrans ledgerTransDebit, LedgerTrans LedgerTransCredit, LedgerTable AccountDebit 1, LedgerTable AccountCredit 2" получить код вида X++: LedgerTrans ledgerTransDebit; LedgerTrans LedgerTransCredit; LedgerTable AccountDebit; LedgerTable AccountCredit; ; while select ledgerTransDebit where ledgerTransDebit.Crediting == 0 join LedgerTransCredit where LedgerTransCredit.Crediting == 1 && LedgerTransCredit.BondBatchTrans_RU == ledgerTransDebit.BondBatchTrans_RU && LedgerTransCredit.BondBatch_RU == ledgerTransDebit.BondBatch_RU join AccountDebit where AccountDebit.AccountNum == ledgerTransDebit.AccountNum join AccountCredit where AccountCredit.AccountNum == LedgerTransCredit.AccountNum { //пишите ваш код... } Теперь хватит рекламы и по сути. Проект тестировался на AX2009 и AX3. 1) Перенесите прилагаемый проект в вашу тестовую Аксапту.ВНИМАНИЕ: класс EditorSripts целиком не переносить - перенесите только метод QuickSelect. 2) Создайте в Аксапте Job или войдите в какой-нибудь метод в каком-нибудь классе. 3) Установите курсор в то место, куда должен быть вставлен сгенерированный запрос. 4) Нажмите правой кнопкой мыши и вызовите в контекстном меню пункт Scripts - QuickSelect. Это новый пункт, который должен был появиться после переноса метода QuickSelect в класс EditorSripts. 5) В открывшемся окне в поле ввода "Названия таблиц через запятую" введите названия таблиц и нажмите кнопку ОК. Вводить текст надо без кавычек - просто названия таблиц через запятые. Количество пробелов в тексте произвольное. 6) Проверьте результат. По кнопке "Шаблоны запросов" можно сохранять ваши перечни таблиц, чтобы каждый раз их потом не набирать. В поле ввода можно выбирать из списка сохраненные перечни. Правила написания запросов. Допустим мы хотим вывести остатки в разрезе складских аналитик и с названием номенклатуры. Для этого нам надо написать запрос такого вида: InventSum, InventDim, InventTable 1 Обратите внимание, что после таблицы InventTable стоит цифра 1. Это означает, что таблица должна быть приджойнена к первой таблице из запроса - к таблице InventSum. Если бы после таблицы InventTable мы не поставили цифру 1, то утилита подумала бы, что эту таблицу надо джойнить к предыдущей таблице в запросе - к таблице InventDim. Общее правило: любая следующая таблица в запросе джойнится к предыдущей. Если надо ее приджойнить к другой таблице, то надо через пробел поставить порядковый номер той таблицы, к которой надо приджойнить текущую таблицу. Синонимы Если у вас в уже имеющемся коде используются табличные переменные, отличные от названия таблиц (например переменная, объявленная как "RContractTable contract"), или если вам надо использовать в запросе одну и ту же таблицу два или более раз - как в примере в самом начале темы - то вы можете присваивать синонимы используемым в запросе таблицам. Рассмотрим пример: ledgerTrans ledgerTransDebit, LedgerTrans LedgerTransCredit, LedgerTable AccountDebit 1, LedgerTable AccountCredit 2 Здесь первой табличной переменной присваивается синоним ledgerTransDebit - так как она отвечает только за проводки ГК по дебиту, а второй табличной переменной присваивается синоним LedgerTransCredit, так как она отвечает за проводки ГК по кредиту. Третья табличная переменная типа LedgerTable имеет синоним AccountDebit, так как она джойнится к первой табличной переменной (дебетовой проводке ГК). Четвертая табличная переменная типа LedgerTable имеет синоним AccountCredit, так как она джойнится ко второй табличной переменной (кредитовой проводке ГК). Галка "Генерировать декларацию переменных" Если вы хотите, чтобы утилита сгенерировала декларацию испольщуемых в запросе табличных переменных, то установите эту галку. При генерации будут учтены синонимы. Итак, попробуйте следующие запросы (напомню - все пишется без кавычек простым текстом): ledgerTrans ledgerTransDebit, LedgerTrans LedgerTransCredit, LedgerTable AccountDebit 1, LedgerTable AccountCredit 2 InventTrans, InventTransPosting inventsum, inventDim, WMSLocation CustInvoiceJour, CustInvoiceTrans, FactureTrans_RU CustTrans, LedgerTrans, CustTransOpen 1 Последний раз редактировалось Ace of Database; 29.02.2016 в 16:39. |
|
|
За это сообщение автора поблагодарили: mazzy (2), rumpleteazer (1), trud (3), Ruff (5), NetBus (1), Kabardian (2), Dreadlock (3), imir (2). |
|
|