AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX Blogs
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 30.09.2008, 22:05   #1  
Blog bot is offline
Blog bot
Участник
 
25,640 / 848 (80) +++++++
Регистрация: 28.10.2006
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, напишите личное сообщение администратору.
Теги
должностные лица

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
OZKA's DAX Journal: Join между временной и постоянной таблицей через QueryRun. Blog bot DAX Blogs 12 14.01.2009 17:34
Почему на форме "Пользовательские настройки", когда я перехожу в нее из формы, отсутствует закладка "Запрос"? Hans DAX: Администрирование 0 05.07.2007 13:52
Подставлять "ранее использованный запрос" при открытии формы Plushy DAX: Функционал 4 16.01.2006 16:23
Русская локализация Axapta 3 ? SlavaK DAX: Администрирование 59 01.07.2003 22:38
Должностные лица Maxim Gorbunov DAX: Функционал 4 03.03.2003 20:27
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 16:39.