(изменено: Burbon, 7 июня 2007г. 16:39:44)

Тема: Выдача для внесения изменений

TDMS v.2.xxx
Текущее положение:
Выдача комплекта для внесения изменений происходит по следующей схеме:
1. Пр.Кн --> Выдать для внесения изменений
2. Вызывается "Диалог ввода (редактирования) текстовой строки или пароля." "Укажите причину..."
3. Создается версия рабочего комплекта. ВАЖНО: в качестве комментария используется указанная выше причина.
4. Меняется статус на "В разработке"


Требование руководства:
Форма должна состоять из:
а.  "Укажите причину внесения изменений..."
б. "Поле ввода номера Разрешения на внесение изменений"
в. Кнопка для "Присоединения к карточке сканированного файла разрешения"


Проблема:
Форма "абв" вызывается уже после того, как версия комплекта создана и соответственно непонятно как передать текст из пункта "а" в свойство "коментарий" для созданной Активной версии комплекта?

Re: Выдача для внесения изменений

Решение: В скрипте команды "Выдать для внесения изменений" вызывать форму "абв" до создания версии комплекта.

(изменено: Anatoly, 8 июня 2007г. 08:42:28)

Re: Выдача для внесения изменений

Burbon, требуется уточнение:

1. Что Вы имеете в виду под коментарием - коментарий объекта, или коментарий(описание) версии?
2. Что конкретно Вы хотите записать в "коментарий" - просто причину, или же номер , или и то и то?
3. Куда Вы хотите присоеденить сканированный файл разрешения?

На самом деле вариантов решения достаточно много: - можно вообще добавить к типу объекта дополнительную форму ввода "Внесенные изменения" - и там хранить все причины, номера, список подписей по согласованию и т.д. В 3-й версии - красотища получается - таблица, - да еще с просмотром файлов прям на форме... с историей изменений...

Возможно, Вы имели в виду вопрос обращения к атрибутивной информации версий объекта.
Для доступа к свойствам версий:

  TDMSObject.Versions as TDMSObjects
  Versions.Item as TDMSObject

Re: Выдача для внесения изменений

Burbon пишет:

2. Вызывается "Диалог ввода (редактирования) текстовой строки или пароля." "Укажите причину..."
3. Создается версия рабочего комплекта. ВАЖНО: в качестве комментария используется указанная выше причина.
.....
Проблема:
... как передать текст из пункта "а" в свойство "коментарий" ..?

Если я все правильно понимаю, проблема в передаче информации из формы в атрибуты новой версии... если так, то она решается заменой диалога ввода текстовой строки на кастом-форму.
Создайте форму с нужными полями ("Укажите причину" и пр)->
поднимите ее по нажатии кнопки (команде "Выдать...") методом ThisApplication.InputForms("MYFORM").Show->
получите из нее значения атрибутов по ОК ->
создавайте версию с полученными значениями...

(изменено: Burbon, 8 июня 2007г. 10:39:25)

Re: Выдача для внесения изменений

1. Что Вы имеете в виду под коментарием - коментарий объекта, или коментарий(описание) версии?

Комментарий версии.

2. Что конкретно Вы хотите записать в "коментарий" - просто причину, или же номер , или и то и то?

То, что записывается при вводе причины внесения изменений.

3. Куда Вы хотите присоеденить сканированный файл разрешения?

К карточке внесения изменений, которая будет создаваться с помощью формы "абв". (При чем, если карточка уже существует, то будет создаваться ее версия с номером, соответствующем последнему изменению)

To Mishaf
Вариант с созданием формы до создания версии ведет к тому, что результат работы этой формы будет сохранен на текущем (неизмененном) комплекте, либо версия комплекта будет уже создана без указания причины...

Re: Выдача для внесения изменений

Burbon пишет:

То, что записывается при вводе причины внесения изменений.

К карточке внесения изменений, которая будет создаваться с помощью формы "абв". (При чем, если карточка уже существует, то будет создаваться ее версия с номером, соответствующем последнему изменению)

Давайте внесём ясность: под "Карточкой" Вы понимаете объект TDMS - правильно? Какая связь между ним и комплектом? ссылается или входит в состав?

Совсем не понятно, как у Вас реализована настройка. Поймите, в TDMS можно одну и ту же задачу запрограммировать можно совершенно по-разному.


To Mishaf
Вариант с созданием формы до создания версии ведет к тому, что результат работы этой формы будет сохранен на текущем (неизмененном) комплекте, либо версия комплекта будет уже создана без указания причины...

Опять непонятно.
1.Форма и Объект - разные вещи.
2.Что мешает сохранить какое-либо значение в предыдущую версию? TDMSObject.Vesions.Item - это тот же самый TDMSOBJECT.

Re: Выдача для внесения изменений

Burbon пишет:

To Mishaf
Вариант с созданием формы до создания версии ведет к тому, что результат работы этой формы будет сохранен на текущем (неизмененном) комплекте, либо версия комплекта будет уже создана без указания причины...

Если вы вызываете кастомную форму или обычный SimpleEditDlg, то результат заполнения можно сохранить в переменные в скрипте.
Далее использовать сохраненные значения можно в любом месте, до создания версии или после.

Re: Выдача для внесения изменений

Burbon пишет:

To Mishaf
Вариант с созданием формы до создания версии ведет к тому, что результат работы этой формы будет сохранен на текущем (неизмененном) комплекте, либо версия комплекта будет уже создана без указания причины...

Как вариант: используйте событие Form_BeforeClose: создавайте версию в обработчике события. Потом можно проверить (в команде), что вернул метод InputForm.Show, и если пользователь нажал cancel - удалить ету новую версию. Не ахти, но все же...

Re: Выдача для внесения изменений

stargazer пишет:

Как вариант: используйте событие Form_BeforeClose: создавайте версию в обработчике события. Потом можно проверить (в команде), что вернул метод InputForm.Show, и если пользователь нажал cancel - удалить ету новую версию. Не ахти, но все же...

  :blink: неправда.
При создании версии, состав очищается. При удалении новой(созданой) версии, предыдущая версия не становится активной и состав обратно не добавляется!
При Вашем решении надо тогда плодить при Cancel-е еще одну версию из предыдущей!

Вообщем решение неправильное.

Re: Выдача для внесения изменений

Подкорректирую предлагаемое решение и допущенные неточности (вроде все работает):

- создаем нужную форму
- на Form_BeforeClose создаем новую версию. Она становится активной, имеет состав, файлы и пр. - все что было, как и полагается. Новая версия имеет требуемое описание и имя:

MyDescription = ThisForm.Attributes("ATTR_REASON").Value
ThisObject.Versions.Create MyName, MyDescription

- код команды должен выглядеть примерно так:

====================

'Нулевая версия всегда последняя (активная)
OldName = ThisObject.Versions(0).VersionName
OldDescription = ThisObject.Versions(0).VersionDescription 'сохранили описание и имя версии

RetVal = ThisApplication.InputForms("CUSTOM_FORM").Show ' в скрипте формы создаем новую версию.

If RetVal <> FALSE Then Exit Sub ' Если вернулось TRUE, значит юзер нажал ОК, версия создана и все в порядке. Можно закончить работу

'Иначе: копируем в новую версию старые имя и описание, и удаляем ту версию - уже не нужна
'Теперь Versions(0) - то, что создано в форме, Versions(1) - то, что было до вызова формы

ThisObject.Versions(0).VersionName = OldName 
ThisObject.Versions(0).VersionDescription = OldDescription ' нулевая версия - активная, та, которую мы создали в скрипте формы
ThisObject.Versions.Remove ThisObject.Versions(1) ' старую версию удаляем. 
'Теперь новая активная версия - точная копия предыдущей с составом и всеми прибамбасами.

(изменено: Anatoly, 8 июня 2007г. 14:51:30)

Re: Выдача для внесения изменений

stargazer пишет:

ThisObject.Versions(0).VersionName = OldName
ThisObject.Versions(0).VersionDescription = OldDescription ' нулевая версия - активная, та, которую мы создали в скрипте формы
ThisObject.Versions.Remove ThisObject.Versions(1) ' старую версию удаляем. 'Теперь новая активная версия - точная копия предыдущей с составом и всеми прибамбасами.[/code]

Уверены, что сработает?  :) А протестировать слабо?
P.S. а метод то неопределён  :))).. есть одна дырочка... но какая - не скажу  :)

и еще...:

- на Form_BeforeClose создаем новую версию. Она становится активной, имеет состав, файлы и пр. - все что было, как и полагается. Новая версия имеет требуемое описание и имя:

Код
MyDescription = ThisForm.Attributes("ATTR_REASON").Value
ThisObject.Versions.Create MyName, MyDescription

Очень интересно, где Вы ThisObject возьмёте в кастомной форме ввода...

Re: Выдача для внесения изменений

Хорошо. Учтем замечания. Тогда сделаем без удаления, по схеме:
1) Есть объект "OBJ_WORK", добавим ему скрытый атрибут "Счетчик версий"
2) Есть форма "FRM_MAIN" объекта "OBJ_WORK". Кнопка "Выдать..." имеет свой скрипт. Нажатие кнопки - и...
3) Проверяем счетчик версий, чтобы узер не нажимал кнопку без конца; если ОК, открывается форма "FRM_CUSTOM" с нужными атрибутами.
4) после закрытия формы "FRM_CUSTOM" - если ОК, то создаем версию.

'==================
Sub OBJ_WORK_ObjectPropertiesDlgShow()
'........
'сколько было версий при открытии Окна свойств?
ThisObject.Attributes"VERSIONS_COUNTER" = ThisObject.Versions.Count 
End Sub

'==================
Sub FRM_MAIN_OnButton_Click()

'Проверить не создана ли уже версия ...
AllowedNum = ThisObject.Attributes"VERSIONS_COUNTER".Value + 1
If (ThisObject.Versions.Count = AllowedNum) Then
         MsgBox "Новая версия уже создана. До свидания."
         Exit Sub
End If

'Открыть "FRM_CUSTOM" и получить данные
Set InForm = ThisApplication.InputForms("FRM_CUSTOM").
RetVal = InForm.Show
If RetVal <> TRUE Then Exit Sub ' Если пользователь отменил диалог, ничего дальше не делаем

'Спросить подтверждение создания версии
RetVal = Msgbox("Создать новую версию?", vbYesNo)
If RetVal <> vbYes Then Exit Sub
MyDescription = InForm.Attributes("ATTR_REASON").Value
ThisObject.Versions.Create MyName, MyDescription

End Sub

Критикуйте...

Re: Выдача для внесения изменений

stargazer пишет:

Хорошо. Учтем замечания. Тогда сделаем без удаления, по схеме:
1) Есть объект "OBJ_WORK", добавим ему скрытый атрибут "Счетчик версий"
2) Есть форма "FRM_MAIN" объекта "OBJ_WORK". Кнопка "Выдать..." имеет свой скрипт. Нажатие кнопки - и...
3) Проверяем счетчик версий, чтобы узер не нажимал кнопку без конца; если ОК, открывается форма "FRM_CUSTOM" с нужными атрибутами.
4) после закрытия формы "FRM_CUSTOM" - если ОК, то создаем версию.
..................
Критикуйте...

На раз Вы настаиваете  :))))))
Нет смысла что-либо проверять  :)
ИМХО лучше просто вызывать правой кнопкой команду, которая, в свою очень, вызовет эту inputform c причиной.
И тогда не будет никаких лишних проверок пункотов 1 и 3.
Весь скрипт уменьшается до 5 строк  :))