|
30.09.2008, 22:05 | #1 |
Участник
|
OZKA's DAX Journal: Модификация формы "Должностные лица".
Источник: http://ozka-lemming.blogspot.com/2008/09/blog-post.html
============== Введение. В Российской локализации Dynamics Ax существует специальный модуль хранящий историю ФИО и должностей лиц, которые должны подписывать те или иные документы. Основания форма настроек располагается по пути Основное/Настройка/Контакты/Должностные лица. На вкладках этой формы находятся настройки относящиеся к различным документам системы, сгруппированные по модулям. Выбрав модуль и нужный документ, мы можем указать настройки по умолчанию, которые в последствии попадут в печатную форму соответствующего документа. Одна из особенностей заключается в том, что в момент печати, например счета-фактуры, данные о должностях подписывающих документ берутся не из этих настроек. В печатную форму попадают данные, сохраненные в специальной таблице, что дает возможность печатать любой документ с теми ФИО, которые были в настройках(т.е. работали в компании) на момент создания документа(накладной, фактуры, складских документов итп). Иными словами, во время разноски система смотрит настройку того или иного документа и копирует от туда данные в специальную таблицу. Позже данные этой таблицы используются при выводе печатной формы. Другой особенностью является то, что для конкретного документа можно ввести только определенный набор и кол-во позиций, потому что в конечном счете в печатной форме отведено определенное место для подписей должностей. Таким образом, кроме собственно позиций, ФИО и должностей, настройке больше ничего не подлежит. Любое изменение или дополнение можно сделать только путем изменения самой отчетной формы, а так же алгоритмов разноски, печати и настройки должностных лиц. Общая логика работы формы. Условно говоря, логику работы с формой можно разделить на три типа: 1.В самом простом случае мы заполняем три поля: "Позиция", "Наименование"(Имя сотрудника) и "Обращение"(Должность сотрудника). Такой набор полей используется для закладок: "Разное", "Главная книга" и "Запасы". 2.Для закладок "Заказы на продажу" и "Заказы на покупку" добавляются три поля: "Код связи", "Код связи контрагента" и информативное "Свой?". В случае, если мы устанавливаем в поле "Код связи" значение "Запись", в зависимости от модуля у нас появляется возможность выбрать контрагента в поле "Код связи контрагента", при этом в зависимости от значения поля "Позиция" меняет свое значение флаг "Свой?". В случае, если сотрудник "свой", то поле "Наименование" заполняется из справочника Сотрудников(Основное/сотрудник.), иначе из справочника "Контактные лица"(Основное/Настройка/Контакты/Контактное лицо). Пример: допустим для модуля "Заказы на покупку" документа "Накладная" в настройках есть строка с кодом контрагент "Поставщик1" и позицией "Отпустил".В этом случае выпадающий список покажет все контактные лица, связанные с поставщиком: "Поставщик1". В свою очередь, если это внутренняя позиция компании - "Принял", то выпадающий список будет содержать справочник сотрудников. 3. Для закладки "Учет МЦ", помимо новых полей описанных в пункте 2, добавляются поля "Связь со складом" и "Склад". Эта настройка актуальная для позиций "Принял" и "Отпустил". Мы можем указать эти позиции с введенными в систему складами. Далее, указав в строке закупки определенный склад, в диалоге обработки "Отборочной накладной" по "Заказу на покупку" система в позиции принял и отпустил подтянет соответствующие ФИО. (В дальнейшем эти данные будут использоваться при печати документов Приходный ордер/Акт о приемке). Хотелось бы добавить, что я не до конца понял, как ведет себя данная настройка, в том случае, если в строках закупки есть несколько складов. Сложилось впечатление, что несмотря на то, что в информацию о текущих должностных лицах попадают все настроенные "Принял"/"Отпустил" в соответствии с набором складов в строках, при печати, например "Приходного ордера" система подтягивает первую найденную "Пару". Добавление новой позиции. Для простоты, рассмотрим пример добавления новой позиции на закладку "Разное" формы "Должностные лица". В стандарте эта закладка содержит всего две настройки: "Руководитель" и "Главбух", которые используются в большинстве печатных форм проведенных документов. Добавим, для примера, позицию "Заместитель руководителя". Имя я выбрал специально длинным и исчерпывающим, но на этом примере позже будет раскрыта одна особенность добавления новой позиции, с которой довелось столкнуться. Первым делом нам нужно добавить новый элемент AssistantDirector с меткой "Заместитель руководителя" в перечисление(Enum) OffPosition_RU. Далее, в классе OfficialsPositionLookupEngine_RU, в методе initPositions добавим для закладки разное(OffReportType_RU::General) инициализацию нашей позиции. Код: X++: case OffReportType_RU::General : add(OffPosition_RU::Director); add(OffPosition_RU::Accountant); //OZKA, 30.08.2008 --> add(OffPosition_RU::AssistantDirector); // <-- break; Теперь, если мы откроем форму и создадим новую строку, в выпадающем списке поля позиция появится "Заместитель руководителя", однако после таких элементарных действий выбрать её мы пока не можем. Найдем EDT OffPositionStr_RU и изменим его длину на 30 символов. Затем, снова откроем форму и теперь видим, что у нас появилась возможность выбрать наше "длинное и исчерпывающее" название новой позиции. Впрочем, система и после этого сообщит, что "В отчете "Общие" отсутствует поле "Заместитель руководителя". Найдем в АОТ класс OffCheckPosition_RU и подправим его метод checkGeneral Код: X++: private boolean checkGeneral() { boolean ok; switch (position) { case OffPosition_RU::Director, OffPosition_RU::Accountant, //OZKA, 30.08.2008 --> OffPosition_RU::AssistantDirector : // <-- ok = true; break; default : ok = false; } return ok; } После этого, у нас, наконец, появилась возможность указать на закладке разное новую позицию. Далее, логично для "внутренней" позиции ограничить выбор имен справочником сотрудников. Для этого в таблице OfficialsTable_RU изменим метод isOurGuy. Код: X++: case OffReportType_RU::General : ret = (this.Position == OffPosition_RU::Director) || (this.Position == OffPosition_RU::Accountant) //OZKA, 30.08.2008 --> || (this.Position == OffPosition_RU::AssistantDirector) // <-- ; break; Теперь выпадающий список для нашей новой позиции соответствует спискам полей "Руководитель" и "Главбух", то есть формируется на основе таблицы EmplTable. Остается поддержать нашу новую позицию при разноске, например, накладной по "Заказу на продажу". За создание проводок в таблице OfficialsTrans_RU отвечает класс OfficialsServ_RU. Добавим в его метод initSalesInvoice следующие строки: Код: X++: //OZKA, 30.08.2008 --> this.insertOrUpdate(OffPosition_RU::AssistantDirector, OffReportType_RU::General, "", OffTableAll_RU::All, true, OffReportType_RU::SalesInvoice, true, false); // <-- Теперь, при разноски накладной по заказу, в таблицу OfficialsTrans_RU будет попадать информация, в том числе, и о нашей новой позиции. Если мы вызовем форму обработки накладной, то на соответствующей закладке мы сможем увидеть нашу настройку. Не вдаваясь в подробности, как устроена печать накладной по заказу, в общем случае добраться до какой либо позиции можно с помощью метода find таблицы OfficialsTrans_RU. А сама "сессия" должностных лиц хранится в поле OffSessionId_RU таблицы CustInvoiceJour или других таблицах документов, поддерживающих модуль "Должностные лица". По аналогии можно изменять поведение и набор позиций для других вкладок (модулей) системы и доступных для них настроек должностей печатных форм. Summary. В качестве итога скажу, что не стал писать о добавлении новой закладки на форму "Должностные лица", допустим для реализации поддержки собственного модуля или решения. Так же, кое-что о модуле можно прочитать скачав вложение темы - Российские складские отчеты. Там на примере того, как создавать новый отчет по складским журналам, в том числе, рассказывается как поддержать модуль должностные лица, для своего складского отчета. p.s. Если я что-то упустил или сильно напутал, замечания приветствуются =)) Источник: http://ozka-lemming.blogspot.com/2008/09/blog-post.html
__________________
Расскажите о новых и интересных блогах по Microsoft Dynamics, напишите личное сообщение администратору. |
|
Теги |
должностные лица |
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|