Андрей Панько. Заметки про Dynamics NAV (http://apanko.ru/index.php)
-   Dynamics NAV (Navision) (http://apanko.ru/forumdisplay.php?f=2)
-   -   Заметки из серии Navision Programming (http://apanko.ru/showthread.php?t=26)

apanko 15.08.2006 18:46

Заметки из серии Navision Programming
 
07.08.06Изучая существующий функционал Navision, несколько упустил программирование, коим неплохо овладел в период внедрения разрабатывая различные отчеты. Проявилось это в том, что не смог вспомнить как программно пройтись по записям таблицы, пришлось подсмотреть:

glRec.SETRANGE("название поля в glRec","от значения"[,"до значения"]);

IF glRec.FIND('-') THEN BEGIN
REPEAT
//Обработка
UNTIL glRec.NEXT = 0;

apanko 15.08.2006 18:47

Про чекбокс
 
08.08.06 (Programming)
Пару заметочек про чекбокс. Далеко не откровения, а скорее для информации:
* По умолчанию чекбокс вставляется с выключенной опцией ShowCaption (показывать заголовок).
* Если включить опцию ShowCaption, то заголовок по умолчанию выводится справа, а сам чекбокс - слева. Если есть желание поменять их местами нужно использовать опцию BitmapPos.

apanko 23.08.2006 13:14

Да, деталям нужно уделять много внимания.

Сделал открытие, что функция GET игнорирует установленные фильтры, о чем кстати в справке написано.

Добавлю, что Deleteall наоборот, работает только в пределах установленного фильтра.

apanko 09.10.2006 00:24

Про lookup
 
Чтобы к Textbox добавить возможность осуществлять выбор из какой-либо таблицы, осуществив перед этим фильтрацию нужно в триггере элемента управлению добавить следующий код
Код:

C/AL Locals
lrecItemVariant    Record  Item Variant
lformItemVariants  Form    Item Variants
 
C/AL Code
OnLookup(VAR Text : Text[1024];) : Boolean
  lrecItemVariant.SETRANGE("Item No.",ItemNo); // фильтруем.
  lformItemVariants.LOOKUPMODE:=TRUE; //на тот случай если у формы свойство LookupMode = FALSE.
  lformItemVariants.SETTABLEVIEW(lrecItemVariant); // можно использовать SETRECORD
  IF lformItemVariants.RUNMODAL = ACTION::LookupOK THEN BEGIN
    lformItemVariants.GETRECORD(lrecItemVariant);
    // Предустановленные фильтры пользователь может снять (Shift+Ctrl+F7),
    //поэтому здесь не помешает добавить проверку выбранного значения.
    VariantCode:=lrecItemVariant.Code;
  END;


apanko 09.10.2006 19:04

Пара банальностей
 
Опять про GET.
Чтобы получить доступ к таблицам, содержащим настройки нужно использовать конструкцию XxxxSetup.GET(‘’);

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

1. Для одного из полей таблицы типа Integer или BigInteger можно указать свойство AutoIncrement. В этом случае при вставке строк в таблицу, это поле будет заполняться автоматически с шагом 1.

2. Для форм можно включить свойство AutoSplitKey, тогда для последнего поля, входящего в первичный ключ будет осуществляться автоматическая нумерация, при условии, что эти поля типа Integer, BigInteger, Decimal или GUID.


Update: полезная инфа про AutoIncrement на SQL есть в теме http://apanko.ru/showthread.php?p=20391

apanko 12.01.2007 12:17

Фильтрация по пустым значениям
 
Для облегчения своего труда делал одну примочку (выложу позже, после доведения до совершенства). В процессе столкнулся с проблемой, внешним проявлением которой был отказ системы фильтровать данные по вариантам.

Пока разбирался узнал следующее:

Цитата:

SETFILTER("Variant Code",'%1','='''''); - работает
SETFILTER("Variant Code",'%1',''); - работает, но красивее.
SETFILTER("Variant Code",'%1','''''') - не работает, потому что отбирает записи, где код варианта равен '', а не пустым значениям.


Ознакомившись с вышеприведенными данными начал волноваться, однако зря, конструкция приведенная ниже - работает:
Код:


strfilter:='';
SETRANGE("Variant Code",strfilter);


Причина правда оказалась в другом...

apanko 20.03.2007 14:17

Печать из предварительного просмотра
 
Иногда из предварительного просмотра печатать нельзя: "Этот отчет не может быть напечатан из Предварительного Просмотра. Завершите просмотр и запустите отчет". Такое явление часто наблюдается при печати/просмотре счетов-фактур.

Явно свойство, отвечающее за подобное поведение, не предусмотрено.

Добиться указанного эффекта можно если в коде использовать оператор CurrReport.PREVIEW.

Код:


IF CurrReport.PREVIEW THEN;


Знание почерпнуто отсюда, за что ответившему - мое уважение.

apanko 04.04.2007 18:04

Еще вариант lookup
 
Код:

lrecZreportRegister.RESET;
//lrecZreportRegister.SETRANGE(...);
IF FORM.RUNMODAL(0,lrecZreportRegister) = Action::LookUpOk THEN BEGIN
  gZreportNo:=lrecZreportRegister.ZreportNo;
  gZreportDate:=lrecZreportRegister.ReportDate;
END;


Спасибо http://forum.mazzy.ru/index.php?show...ndpost&p=30191

apanko 23.08.2007 17:14

Редактировал элемент управления типа Label.
Предупреждаю сразу - откровений не будет.

Изменял свойства:
LeaderDots. Отвечает за то будут ли появляться точечки в элементе управления, такие которые ведут к прямок данным.

MultiLine. Указывает системе - переносить значение или пихать все в одну строку.

После того как строки стали переноситься, захотелось этим процессом управлять. Для это в свойстве Caption применяется обратный слэш: "Строка 1 \Строка 2".

apanko 13.03.2008 16:28

См. также статью Серия статей: Курс Молодого Самурая. Часть первая: управляем формой.

apanko 23.04.2008 17:37

AutoFormatExpr AutoFormatTranslate DATETIME
 
Коллега обратил внимание (ссылка) на поле в таблице Производственный заказ. Поле типа Decimal, а значения выводит: "11.04.08 12:30:00", и что более странно, понимает введенное "150408 1116".

"Виновные" в таком поведение оказались свойства AutoFormatType и
AutoFormatExpr.
Результат их деятельности аналогичен непосредственному заполнению свойства Format. С той лишь разницей, что на него можно влиять програмно и централизовано.
Отвечает за это функция AutoFormatTranslate кодеюнита 1 Application Managemet.

Теперь про возможные значения этих свойств.
AutoFormatType = 1, возвращает строку <Precision,ХХХ><Standard format,0> , где ХХХ - это значение поля "Amount Decimal Places". Поле это есть и в таблице Финансы Настройка и в таблице Валюты. Чтобы выбрать правильный источник для данных система анализирует свойство AutoFormatExpr, в нем нужно указать код валюты, либо оставить пустым.

AutoFormatType = 2, также возвращает строку <Precision,ХХХ><Standard format,0> , где ХХХ - это уже значение другого поля "Unit-Amount Decimal Places". Свойство AutoFormatExpr используется для тех же целей.

Но есть еще загадочный AutoFormatType = 2 и AutoFormatExpr = DATETIME.

Форматная строка в этом случае <Custom,DATETIME>.

Такой формат в документации не описан. Понаблюдав поведение системы заметил причастность к процессу преобразований функций первого кодеюнита:
Fmt Decimal() для вывода данных
Eval Decimal() для ввода данных
При своей работе эти функции обращаются к кодеюниту 416 Datetime Mgt.

Стоит заметить, что "ручной формат" для иных типов данных кроме Decimal создать вряд ли удастся, но расширить набор форматов для Decimal вполне реально.

См. также тему преобразование типов данных .

apanko 28.04.2008 19:41

Любопытный фокус подсмотрел.
 
Заведем переменную rLocation типа Record.Location.

На форме создадим поле TextBox со свойствами:
  • SourceExpr = rLocation.Code
  • TableRelation = 14 (выбрать нельзя, но вручную указать можно).
Теперь создадим кнопку, в триггере onPush напишем:
Код:


Message(rLocation.Name);

Запустим и посмотрим, что произойдет.
Ничего.

А теперь изменим код так:
Код:


IF rLocation.FIND('=') THEN
  Message(rLocation.Name);

Ну как?

apanko 05.05.2008 18:40

сброс фильтров по полю но
 
Не обращал раньше внимания, но почитав литературу заметил:

Фильтры устанавливаемые на поле "Но." карточки товара сбрасываются автоматически. Виновник - строка SETRANGE("No."); в триггере onAfterGetRecord.

apanko 12.05.2008 18:32

Про кнопки Lookup и Drill-Down
 
Указанные кнопки появляются:
* LookUp - если указано свойство TableRelation
* Drill-Down - если это flow-field.

Кнопки можно отключить, указав свойства:
*LookUp = No
*DrillDown = No

С этим понятно.

А вот чего не знал, так это назначения свойства PermanentAssist.
PermanentAssist=Yes, кнопки LookUp и Drill-Down отображаются всегда.
PermanentAssist=No, кнопки LookUp и Drill-Down отображаются, только когда фокус установлен на поле.

apanko 23.07.2008 11:32

Продолжение серии статей "Курс молодого самурая" на NAV4U
Курс молодого самурая: Управляем сабформойот fordewind.


А также моя статья про создание отчетов средствами Microsoft Dynamics NAV
Методы, применяемые при создании отчетов в Dynamics NAV.

apanko 22.10.2008 10:50

свойство Title
 
Есть такое свойство Title.
Оно применяется для текстовых полей.
Если установить в нем значение Да, то первый символ в слове введенном пользователем будет преобразован в верхний регистр.
Пример.
Пользователь ввел:
иван петров 1988 г. москва

Система преобразует в:
Иван Петров 1988 Г. Москва

Как видим, это поле удобно использовать для полей хранящих ФИО и названия населенных пунктов.

Раз уж пошла тема про ФИО, кто знает как правильно "оглы" или "Оглы"?

apanko 28.10.2008 13:56

Кнопка меню. В ней есть элементы меню.
Оказывается можно рядом с элементом меню отображать флажок (типа как в меню Format \ Snap to Grid)

Для этого в свойстве SourceExpr нужно указать выражение на языке C/AL, которое возвращает значение типа Boolean. Если возвращаемое значение равно TRUE, то возле элемента меню появится флажок.

apanko 14.02.2010 13:58

Markedonly
 
Надо было в программный модуль передать набор записей отмеченных MARK (Ctrl+F1).

Коллега подсказал, что передавать параметр нужно как переменную, а не как значение (т.е. в локальных переменных установить флажок VAR).

Вот так.

Storkich 16.02.2010 11:33

Не путать понятия!
 
Надо было в программный модуль передать набор записей отмеченных MARK (Ctrl+F1).
Коллега подсказал, что передавать параметр нужно НЕ как значение, а как переменную (т.е. в локальных переменных установить флажок VAR).


Можно передавать значение(Value) переменной, а можно передавать саму переменную(Variable) - обыно это называют ссылкой на переменную.

С\AL - язык ориентированный не на программистов, а на консультантов. Видимо, MS решил, что консультантам так будет понятнее.

apanko 16.02.2010 11:44

Спасибо, поправил.

Премодерацию отключил.


Часовой пояс GMT +4, время: 14:02.

vBulletin v3.5.4, Copyright ©2000-2019, Jelsoft Enterprises Ltd.
Русский перевод: zCarot, Vovan & Co
Права на все материалы, опубликованные на блогофоруме принадлежат Андрею Панько, если в самом материале не указано иное.