Часто задают вопросы "Как узнать для чего нужен этот пункт меню в Аксапте?". Или "Что делает данная кнопка?" В этом совете постараюсь дать методику, как самостоятельно получать ответы на подобные вопросы.
Но, сказать тебе по дружбе, |
Методику покажу на примере вопроса, который прозвучал на axForum. Вопрос звучал так: "Для чего нужна форма "Внутренние заказы" в запросах модуля "Расчеты с клиентами" и как ее использовать".
Что ж, все очень просто. Открываем репозитарий смотрим на это меню и открываем используемый пункт.
Получаем этот пункт. Смотрим на его свойства. Обращаем внимание, что пункт меню передает параметр InterCompany форме SalesTable. Кстати, само название параметра уже о многом говорит.
Также при помощи правой кнопки мыши и Add-Ins открываем форму SalesTable. Параметры обычно разбираются в методе init формы. Да предчувствия нас не обманули.
Устанавливаем курсор в слово construct и выполняем команду "Просмотр определения" (Crtl+Shift+Пробел). Аксапта открывает окошко с этим методом.
Что ж, как и следовало ожидать, этот конструктор в зависимости от получаемого параметра создает экземпляр класса наследника. Устанавливаем курсор на название класса и снова выполняем команду "Просмотр определения".
Снова, согласно всем рекомендациям объектно-ориентированного программирования, класс-наследник небольшой. Он изменяет только некоторые аспекты поведения базового класса. В частности: он запрещает редактирование типа заказа и добавляет критерий в запрос формы по полю InterCompanyOrder.
Вот собственно мы и получили ответ на программистском языке - пункт "Внутренние заказы" показывает только те заказы, у которых установлен признак InterCompanyOrder.
Но этого ответа недостаточно. Для пользователей будет непонятно что это за поле такое, зачем оно нужно. Пользователи не смогут понять из этого ответа, что они должны делать и чего они не должны делать, чтобы в этой форме хоть что-нибудь появилось. Попробуем разобраться дальше.
Снова открываем репозитарий. Теперь смотрим на поле InterCompanyOrder в таблице SalesTable. Открываем перекрестные ссылки и просим Аксапту показать, где используется данное поле.
Аксапта бодро выдает список объектов, где это поле упоминается.
Обратите внимание, что в первой колонке Аксапта сообщает в каком режиме объекты используют данное поле. Некоторые объекты изменяют значение InterCompanyOrder. Отлично, это то, что нужно. Отфильтровываем список по значению Wrire и...
остается только два места во всей Аксапте, где изменяется значение этого "хитрого" поля. Остается только нажать на кнопку "Правка". Аксапта откроет окно с текстом программы прямо в том месте, где устанавливается значение этого поля. Для очистки совести поищем еще в тексте метода и...
...получаем вывод, что пукнт "Внутренние заказы" показывает заказы с включенным полем InterCompanyOrder. Это поле устанавливается системой, если клиент перечислен среди в списке организаций модуля Gateway Commerce или если заказ был автоматически создан при передаче из другой компании при помощи модуля CommerceGateway.
Для полного счастья остается только узнать как пользователь сам без средств разработки сможет узнать значение этого "хитрого" поля. Возвращаемся к списку объектов, которые используют поле InterCompanyOrder. Отфильтровываем по полю "путь к объекту". Задаем критерий "\\Forms*", чтобы увидеть все формы, где показывается данное поле.
Обратите внимание: в критерии, чтобы найти одну черточку "\" надо указать две черточки "\\".
Что ж все ясно. Пользователь может посмотреть значение данного поля в форме заказов на закладке Прочее в верхней части. Поле называется "Внутр. расчеты". Именно здесь пользователь может отследить "хитрое" значение. Если здесь галочка установлена, то такой заказ будет показан в пункте меню "Внутренние заказы".
Что ж, подведем некоторые итоги.
- В большинстве случаев, в Аксапте можно легко найти что и как используется. Для этого надо воспользоваться средствами разработки и перекрестными ссылками.
- В большинстве случаев, очень небольшое число классов изменяет интересующее поле. Так например, в этом случае было только два класса, которые изменяют поле InterCompanyOrder. Готов утверждать, что в подавляющем числе случаев классов будет немного. Поэтому перекрестные ссылки действительно дают быструю возможность понять как и что происходит.
Вот уж служба, так уж служба! |
И наконец, на какие вопросы предложенный способ не дает ответов.
Предложенный в этом совете способ неприменим, если вопрос касается API классов. Таких классов немного, но эти классы составляют основу Аксапты. Эти классы очень сильно зависят друг от друга. Поэтому перекрестные ссылки не уменьшают количество объектов для разбора.
Список API классов можно найти в Best Practices, если сделать поиск по ключевому слову "API".
Кроме того, предложенный в данном совете способ отвечает только на вопросы "Как?" и "Что?". Этот способ не даст ответ на вопрос "Почему?". Чтобы понять "Почему?" надо действительно знать систему и хорошо представлять что в ней происходит.
Буду рад Вашим замечаниям и предложениям.
E-Mail: mazzy@mazzy.ru, Мазуркин Сергей