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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 05.10.2009, 10:05   #1  
urnadm is offline
urnadm
Участник
 
37 / 10 (1) +
Регистрация: 02.09.2009
Добрый день, коллеги, вопрос мой достаточно просто, но, тем не менее, вспоминая навижен, не могу припомнить как я реализовывал раньше...

Суть такова: создание Возможности или создание Задачи. Кто помнит: стандартным функционалом это реализовано через функцию CreateTodo или CreateOpportunity в таблице
Сделал я, значит, на моей форме кнопочку, вызывающую todo.createtodo (todo - переменная типа record To-Do), создаю задачу, и мне нужно передать номер свежесозданной задачи в главную форму с моей кнопочкой. И вот тут я мучался уже всяко
Если бы я вызывал форму создания задачи через FORM.RUNMODAL, то сделал бы функцию GetNo на форме, но, поскольку эта FORM.RUNMODAL вызывается функцией в таблице, я могу вернуть таким образом "No." лишь в саму эту таблицу...

Наверно я мудрено объяснил Но всё-таки нужно получить номер созданной таким образом задачи в главную форму...
Старый 05.10.2009, 10:39   #2  
Romul is offline
Romul
Участник
 
186 / 11 (1) +
Регистрация: 26.12.2007
Цитата:
Сообщение от urnadm Посмотреть сообщение
Если бы я вызывал форму создания задачи через FORM.RUNMODAL, то сделал бы функцию GetNo на форме, но, поскольку эта FORM.RUNMODAL вызывается функцией в таблице, я могу вернуть таким образом "No." лишь в саму эту таблицу...

Наверно я мудрено объяснил Но всё-таки нужно получить номер созданной таким образом задачи в главную форму...
Если я правильно понял Вас, то Вы уже сами практически ответили на свой вопрос.

В таблице создаете функцию по возврату номера. Назовем ее SaveNo.
Псевдокод:
SaveNo(pNo Code 20)
No := pNo
Т.е. в этой же функции сохраняете в глобальной No переменной этот номер.

Из формы, инициировавшей создание задачи, вызываете свою функцию todo.GetNo, которая передает на вашу форму номер задачи.
Старый 05.10.2009, 11:12   #3  
Milk is offline
Milk
Участник
 
242 / 12 (1) ++
Регистрация: 08.06.2006
Кажется, там форма вызывается не из таблицы, на которой основана "главная" форма, в этом ваша проблема? Значит, вам надо или делать цепочку функций, передающих друг другу номер созданной возможности "по цепочке" - в каждом объекте написать такую функцию; или воспользоваться приемом, неоднократно обсуждавшемся на форуме - создать вспомогательный кодеюнит со свойством SingleInstance = Yes, и передавать в него переменную из формы создания возможности, а потом получать из него эту переменную в главную форму.
Старый 05.10.2009, 11:23   #4  
urnadm is offline
urnadm
Участник
 
37 / 10 (1) +
Регистрация: 02.09.2009
Запутался в этих No

В таблице создал функцию по возврату номера SaveNo с возвращаемым значением pNo (Code 20)
Присваиваю этой переменной значение:
pNo:=todo."No."; (функция CreateTodo внутри таблицы To-Do работает с переменной Todo типа Запись (таблица To-Do), а не сама с собой напрямую)
В общем, в итоге мы действительно имеем pNo:=номер задачи, и это подтверждается Message('%1',pNo) из кода таблицы.
EXIT(pNo); в конце функции SaveNo

НО из главной формы после этого message ('%1',todo.SaveNo) оканчивается пустотой, а не номером задачи...
Код в кнопке вызова:
todo.CreateTodo;
MESSAGE('%1',todo.SaveNo);

Форма модальная, поэтому Message вызывается как положено, после закрытия её.
Старый 05.10.2009, 11:41   #5  
Milk is offline
Milk
Участник
 
242 / 12 (1) ++
Регистрация: 08.06.2006
В общем, если по цепочке передавать слишком сложно, создайте кодеюнит со свойством SingleIstance = Yes. В нем две функции:

SetNo(No:code)
Value := No;

GetNo(var No:code)
No := Value;

После создания возможности вызываете первую, потом из главной формы - вторую, передавая в нее в качестве параметра переменную, куда хотите получить номер.
Старый 05.10.2009, 13:20   #6  
urnadm is offline
urnadm
Участник
 
37 / 10 (1) +
Регистрация: 02.09.2009
Спасибо, получилось через кодеюнит К тому же, эту методику SingleInstance возьму на заметку - ещё где-нибудь пригодится
Старый 05.10.2009, 13:29   #7  
urnadm is offline
urnadm
Участник
 
37 / 10 (1) +
Регистрация: 02.09.2009
Понял также в чем проблема с цепочкой без кодеюнита, нужно было внимательно прочитать:

Цитата:
Сообщение от Orwell Посмотреть сообщение
Т.е. в этой же функции сохраняете в глобальной No переменной этот номер.
Старый 05.10.2009, 14:17   #8  
Romul is offline
Romul
Участник
 
186 / 11 (1) +
Регистрация: 26.12.2007
Цитата:
Сообщение от urnadm Посмотреть сообщение
Понял также в чем проблема с цепочкой без кодеюнита, нужно было внимательно прочитать:
На Вашем месте вообще не тратил бы целый объект, а именно CU, на такую мелочь. Раз уж все-таки решились на подобное, то кидайте в него весь подобный хлам (т.е. процедуры других задач).
Опять же, если придерживаться культуры разработки, то изначально создание SingleInstance CU в Вашем случае - ошибочный шаг.
 

Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

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