Форум программистов, компьютерный форум, киберфорум
HCL Notes: Программирование
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/85: Рейтинг темы: голосов - 85, средняя оценка - 4.91
0 / 0 / 0
Регистрация: 27.02.2012
Сообщений: 34

Ошибка В Условии

28.03.2012, 12:49. Показов 16174. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Ребята, подскажите что я упустила. Сам код работает исправно, но при подстановке еще одного условия - ругается на несоответствие типов и ожидании объявления неизвестного.

Часть кода:

LotusScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
askme = ws.Prompt (PROMPT_YESNO, "УСТАНОВКА",_
"Выбрать другой документ?")
If askme = 0 Then
Set coll = ws.PickListCollection( _
PICKLIST_CUSTOM, _
True, _
Server, TEST, _
"test2", "Список", "Выберите документ")
If coll.Count = 0 Then
Messagebox "Не выбран документ" ,, "ОШИБКА"
Else
tpl = doc.GetItemValue("tpl")              переменная Variant
If tpl= "Значение1" Then
Messagebox "Нельзя выбрать этот документ" ,, "ОШИБКА"
Else
Set doc = coll.GetFirstDocument
Set item = doc.GetFirstItem("arss")
Call item.CopyItemToDocument(doc1, "arss")
Set item = doc.GetFirstItem("nv")
Call item.CopyItemToDocument(doc1, "nv")
If ( uidoc.FieldGetText("dng") = "Да" ) Then
Call uidoc.FieldSetText( "dng", "Нет")
End If
End If
End If
Ругается на этих строках:
tpl = doc.GetItemValue("tpl")
If tpl= "Значение1" Then
Messagebox "Нельзя выбрать этот документ" ,, "ОШИБКА"
Else

без них отрабатывает нормально, но без этого, естественно, условия.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
28.03.2012, 12:49
Ответы с готовыми решениями:

Ошибка в условии
Добрый день, подскажите почему выходит ошибка? --------------------------- Несоответствие типов данных в выражении условия отбора. ...

Ошибка в условии
Решаю задачу на нахождение слова в строке на заданную букву. Ищу следующим циклом: for(i=1;i<s.length();i++){ j = i+1; ...

Ошибка в условии if
Только начал учится на с++.В общем,при вводе числа а>1000 или <0 должен выводит "неверный ввод".С меньше нуля все отлично работает,а...

17
0 / 0 / 0
Регистрация: 04.12.2004
Сообщений: 3,329
28.03.2012, 12:55
tpl = doc.GetItemValue("tpl")(0)
или If tpl(0) = "Значение1" Then
0
0 / 0 / 0
Регистрация: 19.04.2009
Сообщений: 2,219
28.03.2012, 12:57
Altaya
doc.GetItemValue("tpl") возвращает массив, соответственно нужно исправить либо
tpl = doc.GetItemValue("tpl")(0)
либо
If tpl(0) = "Значение1" Then

Добавлено
Настоятельно рекомендую использовать опцию Option Declare и явно объявлять все переменные
0
0 / 0 / 0
Регистрация: 27.02.2012
Сообщений: 34
28.03.2012, 13:43
Если я прописываю
tpl = doc.GetItemValue("tpl")(0)
If tpl(0) = "Значение1" Then
скрипт отрабатывается, но не отрабатывает условие или выдает ошибку "variant does not contain a container"(
0
1 / 1 / 0
Регистрация: 04.08.2006
Сообщений: 2,950
28.03.2012, 13:46
при
tpl = doc.GetItemValue("tpl")(0)

так надо
If tpl= "Значение1" Then
0
0 / 0 / 0
Регистрация: 27.02.2012
Сообщений: 34
28.03.2012, 13:56
а так просто отрабатывает код без условия((
попробую сейчас код с нуля написать, может что не так прописала или упустила
0
0 / 0 / 0
Регистрация: 15.05.2009
Сообщений: 1,454
28.03.2012, 14:36
кстати, а в tpl = doc.GetItemValue("tpl")(0) точно значение из doc надо проверять? ибо doc определяется ниже по коду.
0
0 / 0 / 0
Регистрация: 27.02.2012
Сообщений: 34
28.03.2012, 15:17
Первое определение doc Set doc = ws.CurrentDocument.Document, потом идет передача значений полей из выбранного методом picklist в открытый
0
0 / 0 / 0
Регистрация: 19.04.2009
Сообщений: 2,219
28.03.2012, 15:29
Altaya
В строке

LotusScript
1
                Set doc = coll.GetFirstDocument
Вы замещаете текущий открытый документ на выбранный в picklist. Используйте другое имя переменной, например, selectedDoc

Добавлено
А замечание OKEN относилось к тому, что конструкцию

LotusScript
1
2
3
4
5
6
7
8
9
10
11
        If coll.Count = 0 Then
...
Else
tpl = doc.GetItemValue("tpl")(0)               переменная Variant
If tpl= "Значение1" Then
...
Else
Set doc = coll.GetFirstDocument
...
End If
End If
следует заменить на

LotusScript
1
2
3
4
5
6
7
8
9
10
11
        If coll.Count = 0 Then
...
Else
Set doc = coll.GetFirstDocument
tpl = doc.GetItemValue("tpl")(0)               переменная Variant
If tpl= "Значение1" Then
...
Else
...
End If
End If
0
0 / 0 / 0
Регистрация: 15.05.2009
Сообщений: 1,454
28.03.2012, 15:36
Меня еще пару моментов смутило - там дальше при копировании еще и какой-то doc1 используется - судя по словам, это и есть еще одна копия переменной для текущего документа (или, может, какой-то временный, из которого потом переносят данные в текущий). И в PickListCollection указана возможность мультивыбора, а проверяется только 1й документ. Дальше остальные обрабатываете или там мультивыбор не нужен?
0
0 / 0 / 0
Регистрация: 27.02.2012
Сообщений: 34
28.03.2012, 16:02
В связи с тем что я в вашей сфере новичок, выкладываю весь код с комментариями. К сожалению, я еще не все ваши замечания воспринимаю в нужном контексте, приходится многое "переводить на общепринятый язык". Извините, пока еще не адаптировалась.

LotusScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
Sub Click(Source As Button)
Dim session As New NotesSession
Dim ws As New NotesUIWorkspace
Dim db As NotesDatabase
Dim view As NotesView
Dim coll As NotesDocumentCollection
Dim doc As NotesDocument                         документ, который выбирается из picklist
Dim doc1 As NotesDocument
Dim uidoc As NotesUIDocument                 открытый документ
Dim typeopl As String
Set db = session.CurrentDatabase
Set doc = ws.CurrentDocument.Document
Set uidoc = ws.CurrentDocument
Set doc1 = uidoc.Document                     присваиваю открытому документы значение doc1
askme = ws.Prompt (PROMPT_YESNO, "УСТАНОВКА",_
"Будете выбирать документ из этой же категории?")
If askme = 0 Then
Set coll = ws.PickListCollection( _
PICKLIST_CUSTOM, _
True, _
Server, TEST, _
"test2", "Список категорий с документами", "Выберите документ")
If coll.Count = 0 Then
Messagebox "Не выбран документ" ,, "ОШИБКА"
Else
If doc.GetItemValue("tpl")(0) = "Нл" Then
Messagebox "Нельзя выбрать этот документ" ,, "ОШИБКА"
Else
Set doc = coll.GetFirstDocument              для передачи данных
из выбранного дока, присваиваю ему значение выбранного документа в коллекции
Set item = doc.GetFirstItem("arss")
Call item.CopyItemToDocument(doc1, "arss")
Set item = doc.GetFirstItem("nv")
Call item.CopyItemToDocument(doc1, "nv")
If ( uidoc.FieldGetText("dng") = "Да" ) Then
Call uidoc.FieldSetText( "dng", "Нет")
End If
End If
End If
Else
Set coll = ws.PickListCollection( _
PICKLIST_CUSTOM, _
True, _
Server, TEST, _
"test3", _
"Документы текущей категории", "Выберите документ",_
doc.getItemValue("clNum")(0))
If coll.Count = 0 Then
Messagebox "Не выбран документ" ,, "Ошибка"
Else
If doc.GetItemValue("tpl")(0) = "Нл" Then
Messagebox "Нельзя выбрать этот документ" ,, "ОШИБКА"
Else
Set doc = coll.GetFirstDocument
Set item = doc.GetFirstItem("arss")
Call item.CopyItemToDocument(doc1, "arss")
Set item = doc.GetFirstItem("nv")
Call item.CopyItemToDocument(doc1, "nv")
If ( uidoc.FieldGetText("dng") = "Да" ) Then
Call uidoc.FieldSetText( "dng", "Нет")
End If
End If
End If
End If
Call doc1.Save(True, True)
End Sub
Результат - отработка всего кода, но без условия.
Извините, пока еще не догнала что где исправлять. Читаю ваши советы и постепенно вношу коррективы в код и черепную коробку)
0
0 / 0 / 0
Регистрация: 15.05.2009
Сообщений: 1,454
28.03.2012, 16:23
мне всё равно непонятно месторасположение условия:


If doc.GetItemValue("tpl")(0) = "Нл" Then
Messagebox "Нельзя выбрать этот документ" ,, "ОШИБКА"
Else
если тут doc - это текущий открытый документ, т.е. Set doc = ws.CurrentDocument.Document
так в чем смысл спрашивать, предоставлять выбор, а потом говорить, что нельзя?
если doc - это должен быть выбранный документ, т.е. Set doc = coll.GetFirstDocument , то надо строчки с проверкой опустить ниже Set doc = coll.GetFirstDocument
nvy уже это показал выше, спасибо (не заметила его добавление к сообщению)
Добавлено: судя по коду, надо убрать мультивыбор: Set coll = ws.PickListCollection( _
PICKLIST_CUSTOM, _
False, _


Set notesDocumentCollection = notesUIWorkspace.PickListCollection( type% [, multipleSelection ], server$, databaseFileName$, viewName$, title$, prompt$ [, Singlecategory$ ] )

multipleSelection
Boolean. Optional. Specify True if you want to select multiple documents. Defaults to False.
0
0 / 0 / 0
Регистрация: 19.04.2009
Сообщений: 2,219
28.03.2012, 16:26
Altaya
В чём глубокий смысл этого пассажа?

LotusScript
1
2
3
    Set doc = ws.CurrentDocument.Document
Set uidoc = ws.CurrentDocument
Set doc1 = uidoc.Document
В результате и doc, и doc1 указывают на один и тот же документ.
0
0 / 0 / 0
Регистрация: 15.05.2009
Сообщений: 1,454
28.03.2012, 16:30
имхо, понятнее было бы, если бы doc1 был текущий документ, а doc - выбранный, чтоб не было путаницы с тем, какой doc там имелся в виду
0
0 / 0 / 0
Регистрация: 27.02.2012
Сообщений: 34
28.03.2012, 16:36
УРААААА!!!!
Спасибо, разобралась. Жаль что столько времени ушло.
1. В Picklist изменила True на False, так как выбрать нужно только 1 документ.
2. Условие перенесла после объявления Set doc = coll.GetFirstDocument.

И сразу все заработало. Есть пару моментов для доработки, но на это моих пока имеющихся знаний хватит.

А суть в том, что есть готовый документ с полями, в которые при выборе из пиклист вносится доп.информация. Но если в документе в поле tpl стоит значение "Нл", то документ с таким параметром не подходит, и данные его в текущем документе сохраняться не должны.

Всем ОГРОМНЕЙШЕЕ СПАСИБО, от меня + в репутацию))))
0
0 / 0 / 0
Регистрация: 07.02.2010
Сообщений: 1,063
28.03.2012, 16:41
если тут doc - это текущий открытый документ, т.е. Set doc = ws.CurrentDocument.Document
так в чем смысл спрашивать, предоставлять выбор, а потом говорить, что нельзя?
Согласен. Вы берете значение поля "tpl" из открытого в настоящий момент в клиенте Notes документа (того, который у вас на экране, грубо говоря) - а вовсе НЕ из выбранного из PickList.
Кстати, смотрим дальше:

LotusScript
1
2
3
Set doc = ws.CurrentDocument.Document
Set uidoc = ws.CurrentDocument
Set doc1 = uidoc.Document
В данном случае doc и doc1 - это один и тот же документ! Вопрос - зачем нужен doc1?

PS. Млин, медленно печатаю... :-D
0
0 / 0 / 0
Регистрация: 27.02.2012
Сообщений: 34
28.03.2012, 16:54
Все равно спасибо за помощь. Я еще не совсем все понимаю, учусь пока(((
Почему Set doc = ws.CurrentDocument.Document я и сама еще не догнала, нашла где-то в хелпе, пока работает - пользуюсь.
А присвоение doc1 = uidoc из-за невозможности к uidoc-у использовать нужные методы, подходящие только NotesDocument.
0
0 / 0 / 0
Регистрация: 27.02.2012
Сообщений: 34
28.03.2012, 17:14
Тему закрываю.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
28.03.2012, 17:14
Помогаю со студенческими работами здесь

Ошибка в условии
Здравствуйте , помогите пожалуйста разобраться что не так. if f == 1 & d3 == 'Иван' run grafi2; elseif f == 1 & d3 ==...

Ошибка в условии
Доброго времени суток. Есть вот такой скрипт процедуры: CREATE DEFINER=`root`@`localhost` PROCEDURE `SearchByDate`(IN date_from datetime,...

Ошибка в условии IF
Может кто ни будь подсказать почему, visual studio считает, что в этой конструкции ошибка? Указывает на ошибку в || между двумя основными...

Ошибка в условии if
Добрый вечер. Вот такой код работает: <form action="add.php" method="POST"> Заполните данные для добавления товара: <table...

Ошибка в условии
Вобщем начал я изучать vb.net и вот проблема.Пробую писать под WM6.Проблема с picturebox'ом,подскажите в чем моя ошибка: If...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru