Запрет открытия нескольких сессий в Navision при помощи SQL Server

Прямо скажем, этот вопрос возникает очень часто – «Как запретить одному и тому же пользователю открывать несколько окон Navision одновременно?” Обычно вопрос связан с ограничением по количеству сессий, ну или еще с чем-нибудь. Пройдясь по основным форумам, вам подскажут несколько подходов для реализации этой задачи – от использования сторонних приложений (для завершения процессов), до отправки …

Как создавать/читать xml-файлы из NAV…

В своей предыдущей заметке я описал возможности по чтению xml-файлов из NAV. При этом сам файл – просто прикрепил, и не рассказал, как их создавать. Исправляюсь. —— <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:mbs="http://www.microsoft.com/mbs/xml"> <soapenv:Header xmlns:soapenv="soapenv"> <soapenv:Body> <mbs:enumeration xmlns:mbs="mbs"> <mbs:table>Customers</mbs:table> <mbs:Customer>   <mbs:CustomerAuthentication>     <mbs:No>10000</mbs:No>     <mbs:Name>The Cannon Group PLC</mbs:Name>   </mbs:CustomerAuthentication>   …

Как прочесть xml-документ из Navision при помощи Microsoft XMLDOM automation

Мне часто задают вопросы типа «Как в Navision читать xml-документы без использования xml-портов?» В основном они связаны с тем, что xml-порты имеют ограничения и не всегда их можно использовать. Вот пример кодеюнита, который считывает xml-узлы из файлы. Просто пример, ничего более… :-) OBJECT Codeunit 50050 xml read {   OBJECT-PROPERTIES   {     Date=05.08.12; …

Подключение к веб-сервисам NAV из C# с помощью Web Reference

Предыстория Пожалуйста, ознакомьтесь с этой заметкой, чтобы получить представление о сценарии, который я собираюсь реализовать на C# с помощью Web Reference’ов. Что касается аутентификации, то для C# можем запускать сервер приложений с Negotiate, или с NTLM (как в PHP и Java). В своем примере я предполагаю, что сервер приложений будет использовать SPNEGO (т.е. по умолчанию). …

Подключение к веб-сервисам NAV из …

Когда-то я обещал написать несколько статей по тому, каким образом подключаться к веб-сервисам NAV из разных языков программирования/различных платформ, и, чует мое сердце, настало время сдержать данное обещание. Я напишу несколько заметок по подключение к веб-сервисам NAV из: PHP; Java; C#, используя Web References; C#, используя Service Reference; Javascript; Visual Basic, используя Web Reference; Visual …

Обновление до NAV 2009 SP1

При проведении обновления – даже не трогая базы и объекты – на NAV 2009 SP1, помните – надо заново скомпилировать все объекты для новой версии экзешников. Компиляцию надо делать во времмя апдейта с NAV 2009 RTM (без SP) на SP1. Для SP1 способ компиляции объектов для RTC (Role Tailored Client) изменился, и, возможно, может снова …

Ошибка «Could not open key» во время установки NAV 2009

Во время установки Dynamics NAV 2009 один мой друг столкнулся вот с такой проблемой: ————————— Microsoft Dynamics NAV 2009 Build 27808 Error Report RoleTailored client Microsoft Dynamics NAV 2009 RoleTailored client Fatal error during installation. Could not open key: UNKNOWN\MSComDlg.CommonDialog.1\CLSID. Verify that you have sufficient access to that key, or contact your support personnel. ————————— …

Как установить на NAV 2009 несколько демо-баз

Во время работы инсталлятора по умолчанию вы можете установить только одну демо-базу. А что если вам нужно несколько демо-баз, для разных вещей? Как это сделать? Предполагается, что вы умеете создавать новую фирму в классическом клиенте, но вот с демо-данными беда. Решение – использовать SQL Server Management Studio, чтобы поднять на сервере несколько версий демо-базы. Остановите …

Установка хранимых процедур для NAV 2009 вручную

Вообще-то для установки хранимых процедур рекомендуется использовать инсталлятор с продуктового DVD. Но если на одной машине у вас работают несколько инстансов SQL Server’а, такой подход не сработает. Надо сделать это вручную. Скопируйте файл xp_ndo.dll туда, где будете его хранить. Файл находится на DVD в папке “D:\SQLDatabase\PFiles\Microsoft Dynamics NAV\60\Database” on the product DVD. Для добавления ХП …

Как увеличить производительность Microsoft Dynamics NAV за счет уменьшения чтений из базы

Самый простой (для программиста), но самый медленный (с точки зрения производительности) способ Так пишет большинство. При прогоне цикла по таблице и использовании GET (а также FINDFIRST/FINDLAST) по другой таблице, в которой вам надо получить данные, большиство выполняют эти GET-операторы в каждой итерации цикла, даже если на предыдущей итерации уже получено правильное значение: recItemLedgerEntry.RESET; recItemLedgerEntry.SETCURRENTKEY("…"); recItemLedgerEntry.SETRANGE("…"); …

Ошибка CREATE DATABASE при установке демо-базы

14.12.2010 | Автор: | Рубрика: Microsoft Dynamics NAV 2009

Сегодня пришлось столкнуться с проблемой во время установки демо-базы. В отчете об ошибках было приведено следующее сообщение об ошибке: SQL Server option Cronus Sample Database for Microsoft Dynamics NAV 2009 Fatal error during installation. CREATE DATABASE failed. Some file names listed could not be created. Check related errors. After click on the open config link …

Как поставить несколько cерверов БД Navision на одну рабочую станцию

На одной рабочей станции можно держать несколько разных Navision Servers. Лично у меня есть несколько демонстрационных баз CRONUS (3.01B IT, 3.10A IT, 3.10A W1, 360 IT, 360 W1, 370 IT, 370 W1, 370A IT, 370A W1, 370B IT, 370B W1, 4.00 IT, 4.00 W1) и несколько БД по клиентским проектам. Естественно, они не запускаются автоматически, …

Как создать MatrixBox в Navision

Пример 1. Клиенты и товары Первая форма (Form 50000) покажет нам, как создать MatrixBox с нуля (матрица покажет объемы проданных товаров (и каких именно) по клиентам за определенный период. Шаги по созданию матрицы описаны и в этой заметке, и в самой форме в секции Documentation. Просмотр/редактирование 2-мерного массива Вторая форма (50001) – пример использования матрицы …

Microsoft Dynamics NAV 5.0 SP1 и SQL Server 2000

Пятая версия Navision SP1 предлагает новый способ управления SIFT’ами. Вместо хранения total’ов (агрегатных показателей по разным группировкам), система использует фичу SQL Server — индексированные представления (indexed views). При работе с MS SQL 2000 обновление индексированного представления может занимать достаточно продолжительное время, т.к. SQL Server может включить в план выполнения запроса на UPDATE способ перемещения по …

Изменение названий фирм для работы веб-сервисов NAV

12.12.2010 | Автор: | Рубрика: Microsoft Dynamics NAV 2009

Некоторое время назад я заметил всплеск ошибок, связанных с доступом к веб-сервисам. Часть этих проблем была связана с тем, что компания «CRONUS USA, Inc.» превращается в непонятное «CRONUS_USA_x002C__Inc». Это будет исправлено в NAV 2009 SP1, но до тех пор полезно бы точно знать, как названия фирм преобразуются для работы с веб-сервисами. Правила следующие: Символ % …

Ошибка 1935 при установке Microsoft Dynamics NAV 5.0 SP1

12.12.2010 | Автор: | Рубрика: Microsoft Dynamics NAV 5.0

При установке клиента NAV 5.00 SP1 у меня постоянно выпадала ошибка 1935. Это может случиться с Вистой и Windows 2008. Error 1935; an error occurred during the installation OF assembly component {98CB24AD-52FB-DB5F-A01F-C8B3B9A1E18E}. HRESULT:0×800736CC. Решение оказалось проще, чем я думал. Вам всего лишь надо установить Microsoft Visual C++ 2005 SP1 Redistributable Pack. Помните также, что при …

Обращайте внимание на права в базе при переходе с SQL 2000 на 2005

Предыстория Сегодня я разгадал одну «тайну», которая ведет к потере данных. Но давайте начнем с самого начала… Недавно мы обновляли железо и SQL Server до 2005-й x64 версии. Все прошло без проблем, т.к. мы используем SAN, а перенос базы сделали с помощью Detach/attach, ну и одно задание SSIS для переноса учетных записей. Все ОК. После …

Как управлять блокировками и быстродействием в SQL?

В SQL мы можем использовать трассировку, чтобы определить, какие запросы являются тяжелыми (несбалансированными) по времени исполнения/чтения/записи, а также вызывают блокировки записей. Но мы не можем знать какие процедуры порождают их. Чтобы узнать это, мы должны использовать монитор клиента, который дает нам представления о «тяжелых» запросах и точное расположение процедур , которые их используют. В этом …

Свойство SQLIndex и производительность NAV

В некоторых случаях использование свойства SQLIndex в ключе таблицы Microsoft Dynamics NAV может негативно сказаться на быстродействии системы. В этой заметке я опишу, с чем надо быть осторожным, и почему использование этого свойства прекращено в NAV 5 SP1. Данное свойство все еще доступно, и является ценным инструментом настройки производительности. Однако, начиная с SP1, в стандартном …

Связь между оператором FOR-TO и максимальным количеством параметров функции

Сегодня мне пришлось столкнуться с одним, так и хочется сказать, побочным эффектом работы C/SIDE. После некоторого времени, затраченного на поиски проблемы, пришло понимание, которым я и хочу с вами поделиться. Как это началось Представьте, что у вас есть два куска кода: Пример 1: MyFunction(Param1,Param2,Param3,Param4,Param5,Param6,Param7,Param8,Param9, Param10,Param11,Param12,Param13,Param14,Param14,Param15,Param16,Param17); Пример 2: for j :=1 to 1 do begin MyFunction(Param1,Param2,Param3,Param4,Param5,Param6,Param7,Param8,Param9, …

Использование временной таблицы как источника данных сабформы NAV

Немного теории У переменной типа Record есть логическое свойство Temporary (Временный). При установке этого свойства в TRUE, вашему приложению будет доступна структура, триггеры и функции исходной таблицы, а вот реальные данные из БД – нет. То есть, таблица изначально пустая, а все операции над экземпляром этой таблицы будут утеряны, как только работа приложения завершится. Никакого …

Создание отчетов в Navision на базе временной таблицы

Обычно, когда вы создаете отчет, он работает на базе одной или нескольких таблиц. А иногда у вас есть временная табличка (например, какая-нибудь сортировка или группировка) – и надо вывести эти данные в отчет. Проблема состоит в том, что временную табличку нельзя прямо указать как источник данных в DataItem’е отчета. Ему нужны только т.н. «реальные» таблицы …

Как ввести путь к файлу на Request форме для датапорта Navision

При создании датапорта с помощью мастера, на request-форме располагаются два контрола – FileName (строка) и Direction (option). В режиме дизайна эта форма – пустая, т.е. эти два контрола добавляются Navision’ом уже во время выполнения. Если на форму добавить контролов, вы потеряете возможность указать путь к файлу для датапорта. Шаги по добавления контрола, содержащего путь к …

BEEP — мощная команда в арсенале Microsoft Dynamics NAV

Последние недели я работал над проектом, в котором требовалось использовать команду SendKeys для работы с NAV-клиентом. Во время разработки передо мной встала проблема синхронизации. С одной стороны —  вызовы SendKeys, с другой — поведение непосредственно клиентского приложения. Примерно в таком духе — вы отсылаете NAV’у нажатия клавиш, клиент открывает форму, все это занимает время, а …

Как передавать параметры между объектами (формами, отчетами и проч.)

В одной из статей мы изучили способ передачи параметров между объектами Navision с помощью спец.функций, которые принимают значения. В данной статье используется другой подход. Начиная с MBS-Navision 3.01, у кодеюнита появилось новое свойство SingleInstance = Yes. Вот что пишет про это свойство встроенная справка: «Установка этого свойства в кодеюните X влечет за собой то, что …

Как узнать – какие объекты можно прочесть с текущей лицензией Navision

NAV хранит эти данные в виртуальной таблице 2000000044 Permission Range.  Информация берется из текущего файла с лицензией. Виртуальные таблицы не видны в списке объектов (Object Designer’е), но вы можете увидеть ее в списке при создании новой формы, либо создав переменную типа Record. Шаги по созданию формы. Создайте табличную форму с помощью Мастера (таблица 2000000044). Выберите …

Большая Картина Navision

Живет на свете такой человек – чех Камил Сачек. Энтузиаст Navision и по совместительству MVP – Most Valuable Professional – так сказать, один из наиболее ценных членов экипажа компании Microsoft Dynamics. Да, тот самый, про которого упомянул другой MVP – уже нашего русского розлива – Андрей Панько. И не просто живет Камил, а радеет за …

Работа с Record. Часть четвертая, практическая

Предыдущие части можно найти здесь: «1. Основные команды. Чтение данных без блокировок», «2. Modify», «3. FILTERGROUP. Другие фирмы». Примеры из практики Navision Вам необходимо получить остатки определенного товара на определенном складе. Есть два способа сделать это. У обоих способов есть свои за и против. ПРАВИЛЬНО — (ЗА  — вам не нужно заботиться об индексах. ПРОТИВ …

Работа с переменными Record — 3. FILTERGROUP. Чтение в другой фирме.

Предыдущие части можно найти здесь: «Основные команды. Чтение без блокировок», «Работа с Modify». Использование групп фильтров – FILTERGROUP Группы фильтров полезны для накладывания нескольких фильтров на одно и то же поле, а также для скрытия фильтров от пользователей. Пара советов: используйте группы от 10 и выше. Группы фильтров от 0 до 6 зарезервированы (подробности — см. справку …

Работа с переменными Record – 2. Modify.

С первой частью статьи можно ознакомиться  здесь – «Основные команды. Чтение без блокировок». Примеры изменения записей Общие советы по записи в БД Начинайте транзакцию как можно позже (т.е. сначала считайте нужные данные без блокировок таблиц, и только после этого начинайте запись). Блокируйте как можно меньше (при внесении изменений в одну запись таблицы размером в 10 млн.записей, зачем …

Работа с переменными типа Record в Navision

Надпись на аквариуме в зоомагазине: «Не стучите – они не откроют». Много раз я видел, как множество людей для получения данных из БД пользуются не похожими друг на друга, но совершенно неэффективными способами. Либо они пишут ненужные команды, и таким образом устраивают в коде бардак. Это сподвигло меня на написание статьи, где бы на пальцах …

Опыт настройки Navision + SQL Server для консолидации финансовой отчетности по стандартам МСФО

01.12.2010 | Автор: | Рубрика: Экспертам

Хочу поделиться опытом настройки репликации на основе MS SQL Server , который я в свое время нигде не нашел и вымучивал по шагам, спотыкаясь буквально на каждом =) Описывать буду основные моменты, чтобы быть хоть как-то лаконичным… Сразу опишу ту задачу, которую необходимо было решить. Постановка задачи Задача: Существует много филиалов компании в разных странах, с индивидуальными планами счетов в каждой. Также существует единый международный …

Как вычислить размер места, используемого БД Navision

01.12.2010 | Автор: | Рубрика: Новичкам

Как мы все знаем, у базы Navision есть два главных параметра — это 1) размер и 2) используемая площадь, т.е. место. Встречаются такие жизненные ситуации, в которых необходимо иметь предупреждение о том, что используемое место вплотную приближается к размеру самой базы. Например, становится практически невозможно выполнить какие-нибудь пакетные операции, связанные с движением больших объемов данных, …

Как определить тип и имя текущего сервера Navision

Данная статья — вольный перевод «How To» Люка Ван Дика. Еще один способ определения имени сервера описан в моей статье «Работа с MS SQL Server из Navision» Начиная с Navision Attain 3.01, в C/AL доступна функция CONTEXTURL. Она возвращает строку, т.н. context string, определяющую текущее нахождение пользователя в системе — ну то есть какой объект …

Работа с диалогами

Одно из железных правил проектирования интерфейсов – пользователь не должен чувствовать себя покинутым. Он может нажать кнопку, подождать 5 секунд (максимум!), но если не видит реакцию системы – начинается паника. Для этих случаев в Navision есть диалоги, спец.окошки для вывода текущего состояния системы. В них можно выводить счетчики, проценты, прогресс-бары – все, что угодно. Есть одно НО. Dialog.UPDATE работает очень медленно …

Навешиваем ярлыки – грамотно!

Многие пользователи для создания ярлыка на рабочий стол производят такую операцию в Navision: Файл – Отправить – Создать ярлык (на рабочий стол). Но не все знают, что клиент Navision можно запускать через командную строку, передавая необходимые параметры через запятую. Хотя в доках Navision этот способ хорошо описан, да кто их читает :-) Я делаю просто. После установки клиента на рабочую станцию создаю ярлык (иногда просто …

Обжигающие кнопки Navision :-)

Здесь собраны все известные горячие клавиши Microsoft Dynamics NAV (Navision Attain). Для пользователя Кнопка Назначение F1 Контекстная справка. Топик в справке зависит от того, где находится курсор :-) Если курсор стоит в поле формы, то справка по полю, если на пункте главного меню – про содержание пункта. Alt + F1 Вызов формы «Обзор F-клавиш». Крайне полезная вещь! Ctrl + F1 Вызов …

Олимпиадная задачка – пересечение в NAV

«Мне нужно вывести на экран не все записи. Причем просто фильтрами не обойдешься. Менеджер видит свои сделки + все сделки, подчиненных где он босс. Грубо говоря, юзер должен видеть все сделки, в которых он фигурирует как менеджер + если ты начальник, то должен видеть все сделки подчиненных менеджеров и менеджеров нижестоящих депратаментов. Департаменты могут быть …

Глоссарий Navision (основные термины и т.п.)

В этом разделе собраны основные понятия, термины, слова из области Microsoft Dynamics NAV (Navision Attain). Пока раздел крошечный, но будет постоянно пополняться :-) FIN.ZUP Спец.файл, где хранятся пользовательские настройки: визуальные – количество, порядок, ширина столбцов в формах; программные (значения переменных формы, если свойство SaveValues = Да); параметры доступа к базе (кроме пароля :-) Recent Companies (список в меню «Файл») и прочая… Файл хранится в папке …

Как обмануть NAV (подменяем источник данных в форме)

Пускай у нас есть некая функция, которая возвращает временную таблицу (например, таблица Customer) с результатом. Мы хотим отразить ее в форме. Самый простой способ это сделать знают все: FORM.RUN(FORM::"Customer List", recTmpCustomer); Но есть и другой способ сделать это — подменить в форме триггеры OnNextRecord, OnFindRecord следующим образом: OnFindRecord= VAR blnFound : Boolean; BEGIN recTmpCustomer:=Rec; recTmpCustomer.COPY(Rec); …

Оформление кода в Navision: венгерская нотация и проч.

Hастоящий программист никогда не ставит комментариев. То, что писалось с трудом, должно пониматься с трудом. У Navision есть свои, официально принятые стандарты написания и оформления кода, однако я хочу поделиться небольшими дополнениями на сей счет. Связаны они с улучшением читаемости кода и помогают отделить стандартный функционал от доработок. Использование венгерской нотации Все, кто хотя был несколько месяцев занимался разработкой (не обязательно Navision) приходят …

Управление сессиями Microsoft Dynamics NAV

Статья — вольный перевод заметки Алена Крикилайона, оригинал статьи находится по адресу: http://mibuso.com/howtoinfo.asp?FileID=18 Представьте себе, что у вас есть 10 пользователей. Вы купили 12 сессий (две лишних на всякий пожарный случай). Но ваши пользователи всегда открывают несколько сессий. Или например, так: у вас 100 пользователей, но одновременно в системе работают только 40. Вы покупаете 45 …

Как поймать умников, распускающих руки на боевой базе Navision

Программист, ты стал совсем взрослый. У тебя уже растут руки. Сегодня мы займемся тем, что отловим и накажем умников, которые ведут разработку в боевой базе, либо правят ее наживую, либо делают еще что-нибудь нехорошее. До недавнего времени контроль за ними был затруднен. Однако, решение есть всегда. Всего-то надо: добавить в таблицу dbo.Object одно поле – Last Changed …

К вопросу о репликации Navision средствами MS SQL Server

Решение задачи репликации и обмена данными средствами SQL сервера Будем использовать сиквельную репликацию merge по топологогии звезда. Структуру таблиц расписывать не буду – описываю идею. Итак репликация: Необходимые условия – все серии номеров разделены по всем базам, все книги операций разделены по базам. В Навижне заводим табличку со списком таблиц, которые будем реплицировать, и список баз холдинга. Создаем скрипт …

Что могут сделать СИФТы, если за ними не следить

Сифты (SIFT — Sum Index Field Technology) — это столь любимые всеми и рекламируемые заказчикам флоуфилды. На сервере они хранятся в виде отдельных таблиц с названиями вида Фирма$10019100. В них рассчитаны все результаты группировок суммируемых полей таблицы по полям связанного с ними ключа. Заполнение и пересчет данных в этих таблицах висят на SQL-триггерах. Это важно …

Построение репликации в Navision

Репликацию в Navision стоит строить отдельно (ИМХО) от бизнес-логики объектов, как механизм переноса данных из таблиц одной базы в другую, независимо от их содержания, назначения и т.п. При таком подходе не должны отрабатывать никакие триггеры при занесении данных в таблицу механизмом репликации. Сам механизм репликации сильно зависит от: характера взаимосвязи баз данных, между которыми настроена …

Как учитывать в Navision закупку ресурсов

Статья — вольный перевод заметки Карен Хиггинс, оригинал статьи находится по адресу: http://mibuso.com/howtoinfo.asp?FileID=20 Запрос на возможность проводить закупки ресурсов — один из частых запросов на доработки Navision. В этой заметке полностью пошагово описана данная доработка. В результате работы, записи с типом Ресурс будут записаны в таблицах G/L Entry, Resource Ledger Entry и, если потребуется, в …

Excel в стиле Ultra (часть 2)

Эта статья — продолжение темы, начатой в «Excel в стиле Ultra» Как-то я задавал вопрос о том, что делать с невидимыми экселями, которые остаются висеть в памяти из-за ошибок. Тимур Дадаханов (timur-dadakhanov@rambler.ru) прислал свое решение этого и сразу целого вороха других проблемсов. Ему слово :-) К сожалению, с самого начала я не заметил в вашей статье ключевую фразу …

Excel в стиле Ultra

Эксель — самое популярное средство подготовки отчетов, печатных форм, сверок с клиентами и поставщиками. За все время работы с ним накопилось достаточно тонкостей, которые в разы (иногда в десятки раз) увеличивают скорость работы. Итак: 1) самый медленный способ выкинуть что-то в эксель — это использовать стандартный функционал Excel Buffer :-) Самый быстрый — получить (или …