AXForum  
Вернуться   AXForum > Microsoft Dynamics NAV > NAV: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 11.07.2006, 18:35   #1  
dmites is offline
dmites
Участник
Аватар для dmites
 
221 / 14 (1) ++
Регистрация: 10.08.2005
1 Создаем таблицу table1 с одним полем field1.
2 Пишем dll входной параметр - SQL-запрос,
возвращает массив имен столбцов
dll выполняет запрос, результат запроса сохраняет в таблицу table1 + добавляет поле field1

3 в navision цепляем dll, передаем ей запрос, получаем список полей
далее фишка - системная таблица Field содержит описание всех полей созданных таблиц
и .... легко редактируется . При добавлении/измении записей в ней появляется знакомое всем сообщение редизайна таблицы т.е. изменять таблицы можно налету .
Таким образом
4 добавляем строки с описанием полей, согласно полученному массиву для нашей таблицы
Table1 и работаем с результатами SQL запроса, как с обычной Navision таблицей.
Старый 12.07.2006, 11:56   #2  
Greggy_imported is offline
Greggy_imported
Участник
Аватар для Greggy_imported
 
291 / 10 (1) +
Регистрация: 24.09.2004
чет не совсем понял как это работает
Старый 12.07.2006, 12:08   #3  
dmites is offline
dmites
Участник
Аватар для dmites
 
221 / 14 (1) ++
Регистрация: 10.08.2005
основная проблема в том что поля таблиц в Navision заранее определены, а запрос может возращать различное число полей
dll - выполняет запрос и сохраняет её как таблицу.
В navision получив список полей добавляем их в нашу таблицу с 1 полем налету и можем с ней работать как с обычной таблицей
Старый 12.07.2006, 14:45   #4  
unalexia is offline
unalexia
Участник
 
79 / 10 (1) +
Регистрация: 28.12.2005
Цитата:
Сообщение от dmites Посмотреть сообщение
основная проблема в том что поля таблиц в Navision заранее определены, а запрос может возращать различное число полей
dll - выполняет запрос и сохраняет её как таблицу.
В navision получив список полей добавляем их в нашу таблицу с 1 полем налету и можем с ней работать как с обычной таблицей
может пример выложешь?
Старый 12.07.2006, 15:37   #5  
InTacto is offline
InTacto
Участник
Аватар для InTacto
 
323 / 11 (1) +
Регистрация: 09.08.2005
А как это вяжется с клиент-серверной архитектурой?
Ведь для каждого запроса походу дела придется генерить свою таблицу (самый дорогой объект!!!). Это нужно так как даже, если одновременно 2 юзера допустим используют этот метод и у них разные запросы, то генерить нужно 2 разные структуры таблицы, в рамках одного запроса.
Хотя я может чего не понимаю!
Старый 12.07.2006, 17:00   #6  
dmites is offline
dmites
Участник
Аватар для dmites
 
221 / 14 (1) ++
Регистрация: 10.08.2005
к сожалению 2 запроса от разных пользователей в эту таблицу не уложишь...
Старый 13.07.2006, 07:09   #7  
Greggy_imported is offline
Greggy_imported
Участник
Аватар для Greggy_imported
 
291 / 10 (1) +
Регистрация: 24.09.2004
может правда примерчик выложишь?
Старый 13.07.2006, 10:37   #8  
Kirvisniemi is offline
Kirvisniemi
Moderator
 
342 / 13 (1) ++
Регистрация: 21.12.2004
SQL-запросы вещь полезная, но dll для этих целей создавать необязательно, достаточно обойтись ADO.

Кстати часто возникающая ситуация для использования таких запросов:
есть таблица, для примера возьмем, скажем, протокол взаимодействий.
есть задача: вывести на экран список взаимодействий выбранного департамента.

Понятно, что есть три типичных варианта действий:
1. Перебираем все записи таблицы "Протокол взаимодействий" и смотрим, попадает ли указанный там сотрудник в нужный нам департамент
2. Перебираем всех сотрудников департамента и по каждому их них фильтруем таблицу "Протокол взаимодействий"
3. Завести в протокол взаимодействий вычисляемое поле "Департамент", по которому собственно и фильтровать.

Недостаток у все этих вариантов один - большое количество генерируемых навижн sql-запросов, а следовательно большое время выполнения (особено при существенном количестве записей).

Третий вариант, например, отпадает сразу - сами знаете как работает фильтрация по вычисляемому полю. Какой вариант выбрать из двух оставшихся - сильно зависит от количества записей в протоколе, а также от количества сотрудников.


Но есть и еще один вариант, самый скоростной, подходящий правда только SQL-версии (которой думаю пользуется большинство): прямой SQL-запрос через ADO.

Для демонстрации такого варианта я написал кодюнит, на вход которому подается текст -SQL запроса. На выходе кодюнит возвращает таблицу отфильтрованную согласно тексту запроса.

Демка содержит два объекта - форму 90000 и кодюнит 90000.
Форма предназначена исключительно для визуализации - пишем там запрос, нажимаем кнопочку, получаем результат. В качестве примера используется "План Счетов" (G/L Account)

[attachment=481:attachment]
Вложения
Тип файла: rar SQLRequest.rar (11.0 Кб, 177 просмотров)
Старый 14.07.2006, 12:11   #9  
Greggy_imported is offline
Greggy_imported
Участник
Аватар для Greggy_imported
 
291 / 10 (1) +
Регистрация: 24.09.2004
РЕСПЕКТИЩЕ!!!! - только вот хочу уточнить - если в названии фирмы присутствуют двойные кавычки их надо будет преобразовать в знаки подчеркивания при формировании имени таблицы
Старый 14.07.2006, 13:14   #10  
konrad_imported is offline
konrad_imported
Участник
 
183 / 10 (1) +
Регистрация: 25.11.2004
А никто не пробовал достучаться средствами SQL до временной таблицы Навижн? Ведь по идее, она создается в tempdb. А то было бы красиво. Объявил и инициализировал временную таблицу в Навижн и запустил хранимую процедуру через АДО, которая ее чем-то наполнила.
И проблемы с совместным доступом юзеров нету. С классической таблицей этот финт нормально получается, но проблему совместного доступа решить проблематично.
Старый 14.07.2006, 15:13   #11  
e-statik is offline
e-statik
Участник
 
102 / 11 (1) +
Регистрация: 06.07.2005
Забавная штука. Заход в дизайнер код'юнита моментально вызывает крэш навижна. Та же песня, когда в дизайнере формы пытаюсь глянуть глобалки... (3.7)
Старый 14.07.2006, 15:42   #12  
e-statik is offline
e-statik
Участник
 
102 / 11 (1) +
Регистрация: 06.07.2005
Можно в текстовиках?
Выполнение запроса и получение набора записей - понятно. А куда это потом? Я, например, обычно далее просто в цикле заполняю нужную мне временную таблицу и пользуюсь ей.
Тут как-то иначе?
Старый 14.07.2006, 16:44   #13  
Kirvisniemi is offline
Kirvisniemi
Moderator
 
342 / 13 (1) ++
Регистрация: 21.12.2004
Цитата:
Сообщение от e-statik Посмотреть сообщение
Забавная штука. Заход в дизайнер код'юнита моментально вызывает крэш навижна. Та же песня, когда в дизайнере формы пытаюсь глянуть глобалки... (3.7)
Неча в дизайнер лазить :-)

[attachment=482:attachment]

Цитата:
Выполнение запроса и получение набора записей - понятно. А куда это потом? Я, например, обычно далее просто в цикле заполняю нужную мне временную таблицу и пользуюсь ей.
Тут как-то иначе?
Тут результат сразу возвращается во временной таблице
Вложения
Тип файла: rar SQLRequest_TXT.rar (4.8 Кб, 147 просмотров)
Старый 21.07.2006, 13:41   #14  
kont is offline
kont
Участник
 
2 / 10 (1) +
Регистрация: 21.07.2006
вопрос. что будет если значение поля = NULL?
к сожалению нет sql попробовать, но когда через ado читаешь dbf ничего хорошего нет.
Старый 01.08.2006, 15:10   #15  
Vavilon is offline
Vavilon
Участник
 
17 / 10 (1) +
Регистрация: 03.03.2006
Чуточку в сторону от темы, но тоже по сиквелу...

Скажите пожалуйста, как формируются поля типа [No_], [Record No_] в таблицах типа [Ledger Entry] (второе поле после timestamp)... Интересует механизм работы серий, и как можно получить к нему доступ извне (при помощи SQL, к примеру), если это, конечно, возможно.
Заранее спасибо!
Старый 01.08.2006, 16:38   #16  
Sitizen is offline
Sitizen
Участник
Аватар для Sitizen
 
305 / 10 (1) +
Регистрация: 10.01.2006
Цитата:
Сообщение от Destroyer Посмотреть сообщение
Чуточку в сторону от темы, но тоже по сиквелу...

Скажите пожалуйста, как формируются поля типа [No_], [Record No_] в таблицах типа [Ledger Entry] (второе поле после timestamp)... Интересует механизм работы серий, и как можно получить к нему доступ извне (при помощи SQL, к примеру), если это, конечно, возможно.
Заранее спасибо!
Дк, берется номер последней записи и прибавляется 1. Вот и весь механизм.
Старый 02.08.2006, 08:28   #17  
Vavilon is offline
Vavilon
Участник
 
17 / 10 (1) +
Регистрация: 03.03.2006
Цитата:
Сообщение от Sitizen Посмотреть сообщение
Дк, берется номер последней записи и прибавляется 1. Вот и весь механизм.
Такой ответ лежит на поверхности. И все же, будет ли программа корректно работать, если я вручную извне вставлю запись в таблицу книг операций (Ledger Entry), а потом продолжу делать это средствами Navision, иными словами, не испортится ли эта таблица и вообще механизм серий?..
Старый 02.08.2006, 09:51   #18  
kekki is offline
kekki
Участник
 
58 / 10 (1) +
Регистрация: 27.06.2005
Цитата:
Сообщение от Destroyer Посмотреть сообщение
И все же, будет ли программа корректно работать, если я вручную извне вставлю запись в таблицу книг операций (Ledger Entry), а потом продолжу делать это средствами Navision, иными словами, не испортится ли эта таблица и вообще механизм серий?..
В Книгах Операций номер операции - поле типа Integer. и заполняется оно так, как сказал Sitizen: номер последней операции + 1, т.е. серии номеров не должны использоваться.
Может быть Вы говорите про какие-то другие таблицы?
Старый 02.08.2006, 10:50   #19  
Milk is offline
Milk
Участник
 
242 / 12 (1) ++
Регистрация: 08.06.2006
Люди! Вы о чем вообще говорите?!!
Книги операций клиентов, поставщиков, банков нумеруются не подряд - номер операции в них всегда соответствует номеру "основной" финансовой операции. Про другие книги навскидку не помню. Вот Фин. Книга Операций - та да, подряд.
 


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 17:03.