Айрат, разработчик Dynamics AX из Казани, в Neti с 2012 года. Он начинал с Navision, потом перешел в Axapta и стал работать на зарубежных проектах. Айрат рассказывает:
- почему перешел из Navision в Axapta;
- как «накосячил» на первом проекте;
- как начал работать с иностранными заказчиками;
- чем австрийские коллеги отличаются от голландских;
- стоит ли идти в «аксаптеры».
Айрат, разработчик Dynamics AX из Казани, в офисе Neti
Как стал разработчиком Navision
— Айрат, ты работаешь в Neti уже давно — с 2012 года. Какой у тебя бэкграунд?
— Я учился на факультете «Вычислительная математика и кибернетика» К(П)ФУ. Мы не фокусировались на конкретном языке программирования, хотя нас знакомили с Pascal, Java, PHP. Мы изучали алгоритмы — базу, которая применима в любом языке. Считаю, что это то, что нужно: в некоторых университетах, наоборот, больший упор делают на практику, а на теорию отводят мало времени. Из-за этого студентам бывает тяжелее перейти на новый язык.
Автоматический перевод для MS Dynamics NAV (Microsoft Navision)
До Neti я работал в двух местах. Сначала писал игры в Delphi на языке, основанном на Pascal, потом в консалтинговой компании занимался проектами внедрения Microsoft Dynamics NAV. Перейти с Pascal на Navision было легко — в NAV разрабатывают на языке C/AL, который тоже основан на Pascal. Во втором месте я работал около года.
Задачи нравились, но руководство совсем не ценило сотрудников: нам говорили, что нас легко заменить, зарплату не повышали. Сначала один коллега ушел оттуда в Neti, потом другой, третий — все потянули друг друга. Я консервативный, не люблю перемены, поэтому перешел в Neti одним из самых последних.
Из Navision в Axapta
— Когда ты пришёл, тоже занимался Navision?
— Да. Но хотелось поменять специализацию — из-за устаревших технологий Navision мне не нравился. Например, там не было проектов и, чтобы перенести множество таблиц или форм с разработческой базы на тестовую или наоборот, приходилось вручную выделять каждый объект. Еще в системе не было ООП, что сильно ограничивало в написании функционала.
Примерно через год в компании объявили набор стажеров в отдел Dynamics AX. Я и еще несколько желающих записались на вводный курс по AX 2009, который проводил коллега. Два месяца мы занимались по вечерам, в свободное от основной работы время.
На занятиях я увидел, что в Axapta по сравнению с Navision гораздо больше простора для творчества, и когда курс закончился попросил перевести меня в направление Dynamics AX. Там мне начали давать реальные задачи. Сначала совсем простые, потом все сложнее и сложнее.
— Почему именно Axapta, а не 1С?
— Я смотрел на работу еще и с экономической точки зрения. AX — непростая система с более высоким, по сравнению с 1С, порогом вхождения, поэтому я подумал, что программисты Axapta зарабатывают больше 1С-ников. То же самое с Java и .NET-разработчиками. В идеале после университета я хотел работать Java или C#, но в вакансиях с этими языками требовали минимум 3 лет опыта, а стажеров не брали.
80327 Введение в Microsoft Dynamics NAV 2009. Глава 1.
— И получилось, что ты стал «аксаптером»…
— Да, но у X++ (язык программирования в AX) синтаксис похож и на Java, и на C #, так что нельзя сказать, что мечты не сбылись.
— Помнишь первый проект в направлении AX?
— Меня посадили на техподдержку проекта от московского интегратора. Правда, не помню какого конкретно. Тогда я «накосячил» по неопытности. От консультанта со стороны заказчика прилетела задача обновить данные в системе. Я сделал, а потом оказалось, что их нельзя трогать и бывалым «аксаптерам» об этом известно.
А я не знал: раз программа позволяет обновить данные — значит, можно. Заказчик тогда сильно ругался, хотел даже заменить меня на другого разработчика, но мой руководитель из Neti уладил конфликт и меня перевели на новый проект. Дальше уже легко пошло.
— Ты рассказал о промахе по неопытности. А опытные программисты ошибаются?
— Бывает. Иногда приходит баг, который взялся непонятно откуда. Начинаю смотреть, а это из-за того, что я год назад плохо написал код и не учел ситуацию, которая возникла сейчас и повлекла за собой ошибку. К этому надо проще относиться — все ошибаются. Но нужно стараться в будущем на те же самые грабли не наступать.
Но все равно, бывает, наступаешь. С опытом допускаешь все меньше глупых ошибок, но при этом появляются более изощренные.
Источник: dzen.ru
Navision
We would like to introduce our self as a Premier Sales Implementation of Microsoft Dynamics NAV.
3. Onsite/Offsite Consulting
4. Post-Implementation Support – on Syntax, functionality Optimization
7. Up-Gradation https://apkpure.com/ru/navision/vamps.com.newrelativelayout» target=»_blank»]apkpure.com[/mask_link]
.Net и Navision 5.0 — Дружба Навек
И так, здравствуйте.
Работая в конторе, которая занимается внедрением такой штуки, как Ms Dynamics Nav пришлось, столкнуться с одной проблемой, решение которой средствами самого Навика (позволю себе столь фамильярное обращение), было невозможным.
Суть проблемы такова:
внедряя систему в предприятие, которое занимается переводом, встала жесткая проблема с названиями файлов, так как требования гласили, что название, которым был наречен исходный файл, должно полностью соответствовать названию, которое получит уже переведенный файл. При всем при этом, заказчик требовал записи файлов в базу данных MS SQL. Так как навик ооочень далек от юникода, то все встроенные функции работы с файлами коверкали название, убирая умляуты, аксанты и прочие элементы европейского алфавита.
Для решения сией проблемы была поставлена задача написать dll-ку, которая будет записывать в базу данных файлы с корректными названиями. А затем, по требованию возвращать эти файлы из базы данных в файловую систему. При всем при этом возникла проблема с загрузкой больших файлов, поэтому, опять-таки, было принято волевое решение об использовании в MS SQL такой вещи, как FILESTREAM.
Решение
Глава I
Искренне надеюсь, что суть проблемы стала ясна. Теперь же приступим к разрешению.
Так как лучше всего ваш покорный слуга обращается с С#, то решил писать именно на нем. Подобным никогда не занимался, поэтому пришлось перерыть кучу материалов.
Первым делом был написан ряд функция, которые осуществляют выше описанную деятельность, без подключения к навижну.
Следующим шагом нужно сделать нашу библиотеку Com доступной. То бишь прописать [assembly: ComVisible(true)] в файле AssemblyInfo.cs
Далее соответственно зарегистрировать ее в системе regasm — ом.
Regasm d:/Classlibraryfornav.dll /codebase /tlb
Глава II
Теперь нам необходимо подготовить таблицу куда все это будет записываться.
Сначала мы создаем таблицу в Навижне, а потом редактируем ее в MS SQL, для подключения FILESTREAM.
Поначалу таблица выглядит так:
Но потом, включаем на Эскуэль сервере FILESTREAM:
Для включения FILESTREAM необходимо:
1. Запустить SQL Server Configuration Manager и в свойствах SQL Server’а на вкладке FILESTREAM проставить все три галочки; затем выполнить следующий запрос:
EXEC sp_configure filestream_access_level, 2
RECONFIGURE
2. Далее необходимо добавить файловую группу и обозначить хранилище файлов.
ALTER database currentDb
ADD FILEGROUP Uploads
CONTAINS FILESTREAM
GO
ALTER database currentDb
ADD FILE
(
NAME= ‘Upload’,
FILENAME = ‘C:UsersAdministratorUpload’
)
TO FILEGROUP Uploads
GO
Ну и немного подправим саму табличку:
выполняем следующие три команды:
a. ALTER TABLE ***.dbo.*** ADD [Id] [uniqueidentifier] ROWGUIDCOL NOT NULL UNIQUE — необходимо для FILESTREAM
b. ALTER TABLE ***.dbo.*** ADD UploadFiles VARBINARY(MAX) FILESTREAM — он сам, собственно
c. ALTER TABLE ***.dbo.*** ADD FileFullName NVARCHAR(MAX) — поле, плохо воспринимаемое Навиком, но необходимое, для мультиязыкового отображения.
То есть получается, что у нас дублируются два поля:
Id = NavId — одно для навижена, другое для FILESTREAM
FileName != FullFileName — в первом содержится название файла с путем, преобразованное в ASCII, для того, чтобы его возможно было просматривать в навике. И поле FullFileName, недоступное Навижну, но необходимое для сохранения полноценного имени файла.
Глава III
Следующим этапом, подключаем нашу длл-ку к Навику. То есть в Codeunit создаем переменную типа Automation и в подтипе находим нашу зарегистрированную библиотеку, с определенным, созданным нами, классом. У меня это вышло так:
Далее уже в коде:
CREATE(«Var»);
«Var».PutToDataBase(‘Order’,’Material’,’Project’, TRUE);
P.s.
При использовании арабского, к примеру, языка, в навике по-любому показываются вопросики. Бороться с этим можно только ставя арабский язык, и переключаем программу на этот язык целиком.
Источник: habr.com