Создание документа кодом, не все поля создаются

wowa

Well-known member
01.02.2007
845
0
#1
Добрый день.

Создаю документ кодом. Вот основной кусок:
Код:
Set docNewProposal = New NotesDocument ( db )
Call docNewProposal.ReplaceItemValue( "Form", "Opportunity" )
Call docNewProposal.ComputeWithForm(False,False)
Call docNewProposal.Save(True,False)
На форме есть субформа. На субформе есть поле "CreationDate" типа Дата (Computed When Compose), формула @Cteated
Дак вот, после сохранения я смотрю что это поле не создано, но при открытии документа, дата с точностью до секунды показывается и якобы уже хранится верная. Но при закрытии дока, в свойстве дока этого поля опять нет.
Если я потом редактирую вручную и сохраняю, то все ок, нужная дата и время.

Как мне сделать чтобы все было нормально, но кодом, чтобы это поле отображалось во вью.
Тупо создать это поле кодом - плохая идея, т.к. документ большой и не известно сколько таких подобных полей наберется.
Может тут проблема в том что поле в субформе, и ComputeWithForm не помогает, но секунды запомнило правильно.
 

nvyush

Lotus team
22.04.2009
2 317
0
#2
Попробуйте установить для поля тип Computed. Формулы полей Computed When Compose вычисляются при создании документа из УИ, а Вы создаёте документ в бэкэнде.
 

Medevic

Что это ? :)
Lotus team
10.12.2004
3 346
1
#3
Возможно при пересчете возникает ошибка и очередь до поля CreationDate не доходит. Установи второй параметр в ComputeWithForm в True и проверь.
 

wowa

Well-known member
01.02.2007
845
0
#4
Попробуйте установить для поля тип Computed. Формулы полей Computed When Compose вычисляются при создании документа из УИ, а Вы создаёте документ в бэкэнде.
Если я установлю тип Computed, то оно будет пересчитывать каждый раз. а мне это не надо. ДА и оно же где-то помнит нужные мне даже секунды
 

Medevic

Что это ? :)
Lotus team
10.12.2004
3 346
1
#6
Получится. Уже давно использую subform с cwc-полями и всё отлично работает при любом способе создания документа. Главное, чтобы ошибок не было

И так ли нужно это поле? Формула @Created в любой момент вернет время создания документа.
 

nvyush

Lotus team
22.04.2009
2 317
0
#7
Получится. Уже давно использую subform с cwc-полями и всё отлично работает при любом способе создания документа. Главное, чтобы ошибок не было
Тогда другая версия. Поле находится в контролируемой секции, на редактирование которой у пользователя нет доступа. У меня в таком случае cwc поля не работали, а c — без проблем.
 

wowa

Well-known member
01.02.2007
845
0
#8
Возможно при пересчете возникает ошибка и очередь до поля CreationDate не доходит. Установи второй параметр в ComputeWithForm в True и проверь.
Действительно ошибка,
Notes error: Cannot convert text to a number:
Сейчас буду искать поле.
 

wowa

Well-known member
01.02.2007
845
0
#9
Действительно ошибка,
Notes error: Cannot convert text to a number:
Сейчас буду искать поле.

Хм, кто-н знает, как лучше всего найти это поле?
Я думал я какое-то поле неправильно заполняю, а как оказалось не в этом, видимо кто-то до меня накасячил

Код:
Set docNewProposal = New NotesDocument ( db )
Call docNewProposal.ReplaceItemValue( "Form", "Opportunity" )
success = docNewProposal.ComputeWithForm( False, True ) '!!!!!!! - > СРАЗУ ЖЕ ИДЕТ В ОБРАБОТЧИК ОШИБОК...
If success Then
Call docNewProposal.Save( True, True )
End If
 

Medevic

Что это ? :)
Lotus team
10.12.2004
3 346
1
#11
Поля на форме пересчитываются по порядку: сверху вниз, слева направо. Поэтому смотришь какие поля не создались. Поле с ошибкой находится раньше.

Добавлено: Может значение CFD-поля используется в расчетах в других полях? Дело в том, что для ComputeWithForm CFD-полей не существует. Отсюда может быть ошибка.
 

Omh

Lotus team
04.07.2007
2 210
1
#14
ComputeWithForm - ужасный метод.
Мне религия не позволяет его использовать, только в исключительных случаях юзаю.
 

ToxaRat

Чёрный маг
Lotus team
06.11.2007
3 231
17
#15
Call docNewProposal.ComputeWithForm(True,False) - иначе не будет сопоставление типов полей

Если я установлю тип Computed, то оно будет пересчитывать каждый раз. а мне это не надо
мозги включаемс а то мне страшно за вас, упереться в то, что компютед ВСЕГДА меняет и устроили такие обсуждения ;)
@If(D1=""; @Cteated; D1)