11.07.2006, 18:35 | #1 |
Участник
|
1 Создаем таблицу table1 с одним полем field1.
2 Пишем dll входной параметр - SQL-запрос, возвращает массив имен столбцов dll выполняет запрос, результат запроса сохраняет в таблицу table1 + добавляет поле field1 3 в navision цепляем dll, передаем ей запрос, получаем список полей далее фишка - системная таблица Field содержит описание всех полей созданных таблиц и .... легко редактируется . При добавлении/измении записей в ней появляется знакомое всем сообщение редизайна таблицы т.е. изменять таблицы можно налету . Таким образом 4 добавляем строки с описанием полей, согласно полученному массиву для нашей таблицы Table1 и работаем с результатами SQL запроса, как с обычной Navision таблицей. |
|
12.07.2006, 11:56 | #2 |
Участник
|
чет не совсем понял как это работает
|
|
12.07.2006, 12:08 | #3 |
Участник
|
основная проблема в том что поля таблиц в Navision заранее определены, а запрос может возращать различное число полей
dll - выполняет запрос и сохраняет её как таблицу. В navision получив список полей добавляем их в нашу таблицу с 1 полем налету и можем с ней работать как с обычной таблицей |
|
12.07.2006, 14:45 | #4 |
Участник
|
Цитата:
Сообщение от dmites
основная проблема в том что поля таблиц в Navision заранее определены, а запрос может возращать различное число полей
dll - выполняет запрос и сохраняет её как таблицу. В navision получив список полей добавляем их в нашу таблицу с 1 полем налету и можем с ней работать как с обычной таблицей |
|
12.07.2006, 15:37 | #5 |
Участник
|
А как это вяжется с клиент-серверной архитектурой?
Ведь для каждого запроса походу дела придется генерить свою таблицу (самый дорогой объект!!!). Это нужно так как даже, если одновременно 2 юзера допустим используют этот метод и у них разные запросы, то генерить нужно 2 разные структуры таблицы, в рамках одного запроса. Хотя я может чего не понимаю! |
|
12.07.2006, 17:00 | #6 |
Участник
|
к сожалению 2 запроса от разных пользователей в эту таблицу не уложишь...
|
|
13.07.2006, 07:09 | #7 |
Участник
|
может правда примерчик выложишь?
|
|
13.07.2006, 10:37 | #8 |
Moderator
|
SQL-запросы вещь полезная, но dll для этих целей создавать необязательно, достаточно обойтись ADO.
Кстати часто возникающая ситуация для использования таких запросов: есть таблица, для примера возьмем, скажем, протокол взаимодействий. есть задача: вывести на экран список взаимодействий выбранного департамента. Понятно, что есть три типичных варианта действий: 1. Перебираем все записи таблицы "Протокол взаимодействий" и смотрим, попадает ли указанный там сотрудник в нужный нам департамент 2. Перебираем всех сотрудников департамента и по каждому их них фильтруем таблицу "Протокол взаимодействий" 3. Завести в протокол взаимодействий вычисляемое поле "Департамент", по которому собственно и фильтровать. Недостаток у все этих вариантов один - большое количество генерируемых навижн sql-запросов, а следовательно большое время выполнения (особено при существенном количестве записей). Третий вариант, например, отпадает сразу - сами знаете как работает фильтрация по вычисляемому полю. Какой вариант выбрать из двух оставшихся - сильно зависит от количества записей в протоколе, а также от количества сотрудников. Но есть и еще один вариант, самый скоростной, подходящий правда только SQL-версии (которой думаю пользуется большинство): прямой SQL-запрос через ADO. Для демонстрации такого варианта я написал кодюнит, на вход которому подается текст -SQL запроса. На выходе кодюнит возвращает таблицу отфильтрованную согласно тексту запроса. Демка содержит два объекта - форму 90000 и кодюнит 90000. Форма предназначена исключительно для визуализации - пишем там запрос, нажимаем кнопочку, получаем результат. В качестве примера используется "План Счетов" (G/L Account) [attachment=481:attachment] |
|
14.07.2006, 12:11 | #9 |
Участник
|
РЕСПЕКТИЩЕ!!!! - только вот хочу уточнить - если в названии фирмы присутствуют двойные кавычки их надо будет преобразовать в знаки подчеркивания при формировании имени таблицы
|
|
14.07.2006, 13:14 | #10 |
Участник
|
А никто не пробовал достучаться средствами SQL до временной таблицы Навижн? Ведь по идее, она создается в tempdb. А то было бы красиво. Объявил и инициализировал временную таблицу в Навижн и запустил хранимую процедуру через АДО, которая ее чем-то наполнила.
И проблемы с совместным доступом юзеров нету. С классической таблицей этот финт нормально получается, но проблему совместного доступа решить проблематично. |
|
14.07.2006, 15:13 | #11 |
Участник
|
Забавная штука. Заход в дизайнер код'юнита моментально вызывает крэш навижна. Та же песня, когда в дизайнере формы пытаюсь глянуть глобалки... (3.7)
|
|
14.07.2006, 15:42 | #12 |
Участник
|
Можно в текстовиках?
Выполнение запроса и получение набора записей - понятно. А куда это потом? Я, например, обычно далее просто в цикле заполняю нужную мне временную таблицу и пользуюсь ей. Тут как-то иначе? |
|
14.07.2006, 16:44 | #13 |
Moderator
|
Цитата:
[attachment=482:attachment] Цитата:
Выполнение запроса и получение набора записей - понятно. А куда это потом? Я, например, обычно далее просто в цикле заполняю нужную мне временную таблицу и пользуюсь ей.
Тут как-то иначе? |
|
21.07.2006, 13:41 | #14 |
Участник
|
вопрос. что будет если значение поля = NULL?
к сожалению нет sql попробовать, но когда через ado читаешь dbf ничего хорошего нет. |
|
01.08.2006, 15:10 | #15 |
Участник
|
Чуточку в сторону от темы, но тоже по сиквелу...
Скажите пожалуйста, как формируются поля типа [No_], [Record No_] в таблицах типа [Ledger Entry] (второе поле после timestamp)... Интересует механизм работы серий, и как можно получить к нему доступ извне (при помощи SQL, к примеру), если это, конечно, возможно. Заранее спасибо! |
|
01.08.2006, 16:38 | #16 |
Участник
|
Цитата:
Сообщение от Destroyer
Чуточку в сторону от темы, но тоже по сиквелу...
Скажите пожалуйста, как формируются поля типа [No_], [Record No_] в таблицах типа [Ledger Entry] (второе поле после timestamp)... Интересует механизм работы серий, и как можно получить к нему доступ извне (при помощи SQL, к примеру), если это, конечно, возможно. Заранее спасибо! |
|
02.08.2006, 08:28 | #17 |
Участник
|
Такой ответ лежит на поверхности. И все же, будет ли программа корректно работать, если я вручную извне вставлю запись в таблицу книг операций (Ledger Entry), а потом продолжу делать это средствами Navision, иными словами, не испортится ли эта таблица и вообще механизм серий?..
|
|
02.08.2006, 09:51 | #18 |
Участник
|
Цитата:
Может быть Вы говорите про какие-то другие таблицы? |
|
02.08.2006, 10:50 | #19 |
Участник
|
Люди! Вы о чем вообще говорите?!!
Книги операций клиентов, поставщиков, банков нумеруются не подряд - номер операции в них всегда соответствует номеру "основной" финансовой операции. Про другие книги навскидку не помню. Вот Фин. Книга Операций - та да, подряд. |
|