Вернуться   Андрей Панько. Заметки про Dynamics NAV > Dynamics NAV (Navision)
Справка Пользователи Календарь Поиск Сообщения за день Все разделы прочитаны

Dynamics NAV (Navision) Заметки про Dynamics NAV (ранее Navision) и аддон LS Retail

Ответ
 
Опции темы Поиск в этой теме
  #1  
Старый 15.08.2006, 18:46
apanko apanko вне форума
Администратор
 
Регистрация: 15.08.2006
Сообщения: 1,629
Заметки из серии Navision Programming

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

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

IF glRec.FIND('-') THEN BEGIN
REPEAT
//Обработка
UNTIL glRec.NEXT = 0;
Ответить с цитированием
  #2  
Старый 15.08.2006, 18:47
apanko apanko вне форума
Администратор
 
Регистрация: 15.08.2006
Сообщения: 1,629
Про чекбокс

08.08.06 (Programming)
Пару заметочек про чекбокс. Далеко не откровения, а скорее для информации:
* По умолчанию чекбокс вставляется с выключенной опцией ShowCaption (показывать заголовок).
* Если включить опцию ShowCaption, то заголовок по умолчанию выводится справа, а сам чекбокс - слева. Если есть желание поменять их местами нужно использовать опцию BitmapPos.
Ответить с цитированием
  #3  
Старый 23.08.2006, 13:14
apanko apanko вне форума
Администратор
 
Регистрация: 15.08.2006
Сообщения: 1,629
Да, деталям нужно уделять много внимания.

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

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

Последний раз редактировалось apanko, 29.11.2006 в 14:07.
Ответить с цитированием
  #4  
Старый 09.10.2006, 00:24
apanko apanko вне форума
Администратор
 
Регистрация: 15.08.2006
Сообщения: 1,629
Про 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;
Ответить с цитированием
  #5  
Старый 09.10.2006, 19:04
apanko apanko вне форума
Администратор
 
Регистрация: 15.08.2006
Сообщения: 1,629
Пара банальностей

Опять про 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, 19.02.2010 в 17:05.
Ответить с цитированием
  #6  
Старый 12.01.2007, 12:17
apanko apanko вне форума
Администратор
 
Регистрация: 15.08.2006
Сообщения: 1,629
Фильтрация по пустым значениям

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

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

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

Ознакомившись с вышеприведенными данными начал волноваться, однако зря, конструкция приведенная ниже - работает:
Код:
strfilter:=''; SETRANGE("Variant Code",strfilter);

Причина правда оказалась в другом...
Ответить с цитированием
  #7  
Старый 20.03.2007, 14:17
apanko apanko вне форума
Администратор
 
Регистрация: 15.08.2006
Сообщения: 1,629
Печать из предварительного просмотра

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

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

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

Код:
IF CurrReport.PREVIEW THEN;

Знание почерпнуто отсюда, за что ответившему - мое уважение.
Ответить с цитированием
  #8  
Старый 04.04.2007, 18:04
apanko apanko вне форума
Администратор
 
Регистрация: 15.08.2006
Сообщения: 1,629
Еще вариант 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
Ответить с цитированием
  #9  
Старый 23.08.2007, 17:14
apanko apanko вне форума
Администратор
 
Регистрация: 15.08.2006
Сообщения: 1,629
Редактировал элемент управления типа Label.
Предупреждаю сразу - откровений не будет.

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

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

После того как строки стали переноситься, захотелось этим процессом управлять. Для это в свойстве Caption применяется обратный слэш: "Строка 1 \Строка 2".
Ответить с цитированием
  #10  
Старый 13.03.2008, 16:28
apanko apanko вне форума
Администратор
 
Регистрация: 15.08.2006
Сообщения: 1,629
См. также статью Серия статей: Курс Молодого Самурая. Часть первая: управляем формой.
Ответить с цитированием
  #11  
Старый 23.04.2008, 17:37
apanko apanko вне форума
Администратор
 
Регистрация: 15.08.2006
Сообщения: 1,629
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 вполне реально.

См. также тему преобразование типов данных .
Ответить с цитированием
  #12  
Старый 28.04.2008, 19:41
apanko apanko вне форума
Администратор
 
Регистрация: 15.08.2006
Сообщения: 1,629
Любопытный фокус подсмотрел.

Заведем переменную rLocation типа Record.Location.

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

А теперь изменим код так:
Код:
IF rLocation.FIND('=') THEN Message(rLocation.Name);
Ну как?
Ответить с цитированием
  #13  
Старый 05.05.2008, 18:40
apanko apanko вне форума
Администратор
 
Регистрация: 15.08.2006
Сообщения: 1,629
сброс фильтров по полю но

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

Фильтры устанавливаемые на поле "Но." карточки товара сбрасываются автоматически. Виновник - строка SETRANGE("No."); в триггере onAfterGetRecord.
Ответить с цитированием
  #14  
Старый 12.05.2008, 18:32
apanko apanko вне форума
Администратор
 
Регистрация: 15.08.2006
Сообщения: 1,629
Про кнопки Lookup и Drill-Down

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

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

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

А вот чего не знал, так это назначения свойства PermanentAssist.
PermanentAssist=Yes, кнопки LookUp и Drill-Down отображаются всегда.
PermanentAssist=No, кнопки LookUp и Drill-Down отображаются, только когда фокус установлен на поле.
Ответить с цитированием
  #15  
Старый 23.07.2008, 11:32
apanko apanko вне форума
Администратор
 
Регистрация: 15.08.2006
Сообщения: 1,629
Продолжение серии статей "Курс молодого самурая" на NAV4U
Курс молодого самурая: Управляем сабформойот fordewind.


А также моя статья про создание отчетов средствами Microsoft Dynamics NAV
Методы, применяемые при создании отчетов в Dynamics NAV.
Ответить с цитированием
  #16  
Старый 22.10.2008, 10:50
apanko apanko вне форума
Администратор
 
Регистрация: 15.08.2006
Сообщения: 1,629
свойство Title

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

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

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

Раз уж пошла тема про ФИО, кто знает как правильно "оглы" или "Оглы"?
Ответить с цитированием
  #17  
Старый 28.10.2008, 13:56
apanko apanko вне форума
Администратор
 
Регистрация: 15.08.2006
Сообщения: 1,629
Кнопка меню. В ней есть элементы меню.
Оказывается можно рядом с элементом меню отображать флажок (типа как в меню Format \ Snap to Grid)

Для этого в свойстве SourceExpr нужно указать выражение на языке C/AL, которое возвращает значение типа Boolean. Если возвращаемое значение равно TRUE, то возле элемента меню появится флажок.
Ответить с цитированием
  #18  
Старый 14.02.2010, 13:58
apanko apanko вне форума
Администратор
 
Регистрация: 15.08.2006
Сообщения: 1,629
Markedonly

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

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

Вот так.

Последний раз редактировалось apanko, 16.02.2010 в 11:41.
Ответить с цитированием
  #19  
Старый 16.02.2010, 11:33
Storkich Storkich вне форума
 
Регистрация: 16.02.2010
Сообщения: 1
Не путать понятия!

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


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

С\AL - язык ориентированный не на программистов, а на консультантов. Видимо, MS решил, что консультантам так будет понятнее.
Ответить с цитированием
  #20  
Старый 16.02.2010, 11:44
apanko apanko вне форума
Администратор
 
Регистрация: 15.08.2006
Сообщения: 1,629
Спасибо, поправил.

Премодерацию отключил.
Ответить с цитированием
Ответ


Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


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

Контакты: e-mail, телефон: +7(926)1805967 - Архив - Вверх

Microsoft Most Valuable Professional
vBulletin v3.5.4, Copyright ©2000-2018, Jelsoft Enterprises Ltd.
Русский перевод: zCarot, Vovan & Co
Права на все материалы, опубликованные на блогофоруме принадлежат Андрею Панько, если в самом материале не указано иное.
Рейтинг@Mail.ru Rambler's Top100