05.10.2009, 10:05 | #1 |
Участник
|
Добрый день, коллеги, вопрос мой достаточно просто, но, тем не менее, вспоминая навижен, не могу припомнить как я реализовывал раньше...
Суть такова: создание Возможности или создание Задачи. Кто помнит: стандартным функционалом это реализовано через функцию CreateTodo или CreateOpportunity в таблице Сделал я, значит, на моей форме кнопочку, вызывающую todo.createtodo (todo - переменная типа record To-Do), создаю задачу, и мне нужно передать номер свежесозданной задачи в главную форму с моей кнопочкой. И вот тут я мучался уже всяко Если бы я вызывал форму создания задачи через FORM.RUNMODAL, то сделал бы функцию GetNo на форме, но, поскольку эта FORM.RUNMODAL вызывается функцией в таблице, я могу вернуть таким образом "No." лишь в саму эту таблицу... Наверно я мудрено объяснил Но всё-таки нужно получить номер созданной таким образом задачи в главную форму... |
|
05.10.2009, 10:39 | #2 |
Участник
|
Цитата:
Сообщение от urnadm
Если бы я вызывал форму создания задачи через FORM.RUNMODAL, то сделал бы функцию GetNo на форме, но, поскольку эта FORM.RUNMODAL вызывается функцией в таблице, я могу вернуть таким образом "No." лишь в саму эту таблицу...
Наверно я мудрено объяснил Но всё-таки нужно получить номер созданной таким образом задачи в главную форму... В таблице создаете функцию по возврату номера. Назовем ее SaveNo. Псевдокод: SaveNo(pNo Code 20) No := pNo Т.е. в этой же функции сохраняете в глобальной No переменной этот номер. Из формы, инициировавшей создание задачи, вызываете свою функцию todo.GetNo, которая передает на вашу форму номер задачи. |
|
05.10.2009, 11:12 | #3 |
Участник
|
Кажется, там форма вызывается не из таблицы, на которой основана "главная" форма, в этом ваша проблема? Значит, вам надо или делать цепочку функций, передающих друг другу номер созданной возможности "по цепочке" - в каждом объекте написать такую функцию; или воспользоваться приемом, неоднократно обсуждавшемся на форуме - создать вспомогательный кодеюнит со свойством SingleInstance = Yes, и передавать в него переменную из формы создания возможности, а потом получать из него эту переменную в главную форму.
|
|
05.10.2009, 11:23 | #4 |
Участник
|
Запутался в этих 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 |
Участник
|
В общем, если по цепочке передавать слишком сложно, создайте кодеюнит со свойством SingleIstance = Yes. В нем две функции:
SetNo(No:code) Value := No; GetNo(var No:code) No := Value; После создания возможности вызываете первую, потом из главной формы - вторую, передавая в нее в качестве параметра переменную, куда хотите получить номер. |
|
05.10.2009, 13:20 | #6 |
Участник
|
Спасибо, получилось через кодеюнит К тому же, эту методику SingleInstance возьму на заметку - ещё где-нибудь пригодится
|
|
05.10.2009, 13:29 | #7 |
Участник
|
|
|
05.10.2009, 14:17 | #8 |
Участник
|
Цитата:
Опять же, если придерживаться культуры разработки, то изначально создание SingleInstance CU в Вашем случае - ошибочный шаг. |
|