воскресенье, 23 сентября 2018 г.

AX2012: Работа с файлами csv


Для работы с файлами *.csv воспользуемся классом CommaIo – используется для создания файлов с разделителями (по умолчанию разделителями являются запятые).

Экспорт данных в csv-файл:


Чтение данных из csv-файла:



Happy DAXing!

AX2012: Работа с текстовыми файлами

TextIo

TextIo сохраняет текст в кодировки Unicode.

Экспорт данных в текстовый файл с помощью TextIo:


Чтение данных из текстового файла с помощью TextIo:




TextBuffer

Помимо нативных средств для работы с текстовыми файлами Dynamics AX предоставляет возможность вызывать классы .NET для чтения/записи файлов, TextBuffer – один из таких классов.

Экспорт данных в текстовый файл с помощью TextBuffer:


Чтение данных из текстового файла с помощью TextBuffer:


Happy DAXing!

понедельник, 17 сентября 2018 г.

AX2012: работа со складскими аналитиками

Попробуем разобраться с механизмом работы со складскими аналитиками в Dynamics AX2012.

В Dynamics AX доступны разные складские аналитики: сайт, склад, ячейка, паллет, партия, серийный номер и т.п. Эти характеристики применяются к номенклатурам.


Рассмотрим пример: у нас есть номенклатура с ItemId «ITEM001» для которой активны аналитики сайт, склад, ячейка, паллет, совершим складскую проводку на Сайт «S1», Склад «WHS01», Ячейку «LOC001», Паллет «PLT001». Для хранения проводки потребуется таблица с полями складских аналитик:


Попробуем все это упростить, создав новое поле ID, которое будет ссылаться на комбинацию этих значений. Например, «IDIM001» относится к Сайту «S1», Складу «WHS01», Ячейке «LOC001» и Паллету «PLT001». Кроме того, создадим отдельную таблицу для хранения значений всех этих 10 полей вместе с новым ID полем и добавим наше новое поле в таблицу проводок. Теперь все эти 100 записей мы можем сохранить лишь в одном ID поле.

Теперь больше не требуется хранить данные о 10 складских аналитиках в 100 записях, вместо этого нам нужно сохранить лишь одно поле, указывающее на определенную комбинацию этих складских аналитик. Пример таких таблиц можно увидеть ниже:


Такое поле ID в Dynamics AX называется InventDimId и таблица, в которой хранятся комбинации складских аналитик, а также это поле InventDimId называется InventDim:


Эта таблица играет крайне важную роль в Dynamics AX - каждая таблица, связанная со складскими аналитиками, как SalesLine, PurchLine, InventTrans - все имеют связь с InventDim.


Существуют уже готовые функции для создания и поиска InventDimId для различных комбинаций складских аналитик. Наиболее часто используется findOrCreate() для поиска складской аналитики - если InventDimId уже существует для заданной комбинации, тогда система вернет значение, если нет, то создаст новое значение и вернет его.


Если необходимо создать новые таблицы для хранения складских аналитик, то пользуйтесь уже готовым решением.

Happy DAXing!

Подсчет времени в X++

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

Для этой цели можно использовать функцию WinAPI::getTickCount()


WinAPI::getTickCount() возвращает значение в миллисекундах, данные необходимо приводить к необходимому виду – секунды, минуты.

Happy DAXing!

update_recordSet, insert_recordset и delete_from

update_recordSet, insert_recordset и delete_from


В Dynamics AX2012 уделено много внимания повышению производительности и система предоставляет инструменты для доступа (вставка, удаление, обновление) к базе данных с меньшими затратами (меньшим количеством обращений к БД), используя функционал SQL Server.

В AX 2012 есть несколько способов обновления записей в БД, один из них - последовательный перебор, используя while select. Но есть более эффективный способ - update_recordSet позволяет обновить совокупность записей за одно обращение к серверу.

Например, следующий запрос SQL:


можно в AX выполнить следующим образом:


update_recordSet позволяет использовать join:


Для вставки новых записей и удаления записей из таблиц без использования циклов используются функции delete_from:


и insert_recordset:


Happy DAXing!