Не Работает Getdocumentbykey(

Тема в разделе "Lotus - FAQ", создана пользователем gwarlock, 14 мар 2013.

  1. gwarlock

    gwarlock Member

    Регистрация:
    14 мар 2013
    Сообщения:
    5
    Симпатии:
    0
    Добрый день.

    Вопрос у меня абсолютно идиотский, но все книги по Лотусу ведут на ссылки, устаревшие в 2003 году, а первое место в поиске по слову Домино занимает сайт Кришнаитов.
    Как просмотреть данные в базе Лотус 7? В администраторе я нашел эту базу, но при клике на нее открывается интерфейс, а мне именно содержимое таблиц нужно.

    Объясняю вопрос - у нас уже лет 6 лежит Лотус на одном из серверов. Получает письма от партнеров, раз в месяц мы заходим на него и печатаем реестр по пришедшим письмам и прикреплениям.
    Как он работает - мы вообще без понятия. А в январе один из партнеров прислал нам письмо с прикрепленным файлом с пробелом в имени файла. И печать по нему перестала работать. Скрипт я нашел, который печатает реестр, там все вроде очевидно

    Код (Text):
        Set db = Session.CurrentDatabase

    Set View = db.GetView("(IncomingByFile)")
    If View Is Nothing Then
    Msgbox "Не найден вид (IncomingByFile)"
    End
    End If
    Set Doc = View.GetDocumentByKey(Ucase(FileFromRetailArr(i).FName), True)
    If Doc Is Nothing Then
    Msgbox "Не найден документ с файлом " + FileFromRetailArr(i).FName
    FileFromRetailArr(i).FName - это и есть наше имя файла "xxx001 002.txt"
    Я даже View нашел, оно таблицу открывает, в которой есть это имя, но поправить там я, конечно, ничего не могу.

    Подскажите, что еще можно сделать?
     
  2. hosm

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
    А точно именно GetDocumentByKey не находит документ? Посмотрите, может в сортированной колонке представления (IncomingByFile) стоит Multi-value separator - Space?
     
  3. gwarlock

    gwarlock Member

    Регистрация:
    14 мар 2013
    Сообщения:
    5
    Симпатии:
    0
    Еще бы знать, как это проверить.

    Я зашел во Views, нашел нужный, два раза щелкнул на ViewSelection.
    Там 4 колонки - Файл, От, Дата, Время. Если правой кнопкой на заголовке выбрать ColumnProperties, то у первой и четвертой колонки Multi-value separator = none.
    У второй и третьей колонки = Comma.

    А вообще таблица выглядит нормально и это имя файла там правильно записано.
     
  4. Kee_Keekkenen

    Kee_Keekkenen Well-Known Member

    Регистрация:
    5 сен 2006
    Сообщения:
    616
    Симпатии:
    4
    а у колонки файл (в свойствах) включена сортировка ?
     
  5. gwarlock

    gwarlock Member

    Регистрация:
    14 мар 2013
    Сообщения:
    5
    Симпатии:
    0
    На второй закладке - Sort: Ascending. Все остальное на закладке вроде отключено.
    Кстати, сама колонка, как я понимаю, так образуется - тип Формула @UpperCase(@Trim(FileName))

    Обидно, блин, столько лет все работало, программист лотуса уволился в 2006м и тут такое из-за одного пробела.
     
  6. susinmn

    susinmn Well-Known Member

    Регистрация:
    16 окт 2007
    Сообщения:
    530
    Симпатии:
    8
    1. Попробовать заменить
    Set Doc = View.GetDocumentByKey(Ucase(FileFromRetailArr(i).FName), True)
    на
    Set Doc = View.GetDocumentByKey(Trim(Ucase(FileFromRetailArr(i).FName)), True)
    т.к. @UpperCase(@Trim(FileName)) заменяет 2 и более пробелов внутри названия на 1.

    Если не поможет, то
    Это вся формула в колонке?
    Как образуется FileFromRetailArr(i)? Можно полный код, если это не секретная информация...
     
  7. gwarlock

    gwarlock Member

    Регистрация:
    14 мар 2013
    Сообщения:
    5
    Симпатии:
    0
    1. Пробовали, не помогает, там вообще пробел всего один - посередине.
    2. Да, это вся формула в колонке. Я пробовал вообще формулу убирать - без толку, только имена файлов в таблице не все в верхнем регистре становятся.
    3. FileFromRetailArr(i) читается из текстового файла, пришедшего из другой системы.
    Код (Text):
       
    filenames = ws.OpenFileDialog( False, "Select file ...", "*.txt", LoadDirName)
    If Isempty(filenames) Then
    Msgbox "Вы не выбрали файл !!!"
    End
    End If

    LoadFileName = filenames(0)

    Call GetArrayFromFile (LoadFileName, FileFromRetailArr, NumInFileFromRetailArr)

    i = 0

    While (i < NumInFileFromRetailArr)
    Set Doc = Nothing
    Set Doc = View.GetDocumentByKey(Ucase(Trim(FileFromRetailArr(i).FName)), True)
    If Doc Is Nothing Then
    Msgbox "Не найден документ с файлом " + Ucase(Trim(FileFromRetailArr(i).FName))
    строка там вида XXX^XXX002 001.TXT^31.01.2013^ООО
     
  8. hosm

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
    1) нужен код ф-ции GetArrayFromFile - похоже, в ней заполняется FileFromRetailArr , выше вы написали только диалог выбора файла и ее вызов. И уточните, ошибка именно после GetDocumentByKey, т.е. выводится именно "Не найден документ с файлом "?
    2) надо так, если проблема таки в нескольких пробелах: Set Doc = View.GetDocumentByKey(FullTrim(Ucase(FileFromRetailArr(i).FName)), True)
    т.к. @Trim заменяет 2 и более пробелов внутри названия на 1, а Trim убирает только пробелы в начале и конце
     
  9. gwarlock

    gwarlock Member

    Регистрация:
    14 мар 2013
    Сообщения:
    5
    Симпатии:
    0
    1. Ошибка именно в "Не найден документ". Функция вроде работает
    Код (Text):
    Public Function DostoWin (st As String) As String
    '    Функция возвращае преобразованную строку из формата DOS 866 в формат Windows 1251
    '    строка для преобразования    
    Dim i As Long, dl As Long
    Dim simvol As String, st1 As String

    dl=Len(st)
    For i=1 To dl
    simvol=Asc(Mid$(st,i,1))
    Select Case simvol
    Case 193
    simvol=45
    Case 194
    simvol=45
    Case 196
    simvol=45
    Case 195
    simvol=124
    Case 197
    simvol=124
    Case 179
    simvol=124
    Case 240
    simvol=168
    Case 241
    simvol=184
    Case Else            
    If simvol>=128 And simvol<176 Then
    simvol=simvol+64
    Else
    If simvol>=224 And simvol<240 Then
    simvol=simvol+16
    End If
    End If
    End Select
    st1=st1+Chr(simvol)
    Next
    DostoWin=st1     
    End Function

    Public Function GetArrayFromFile (FName As String, Arr() As FileData, NumInArr As Long)

    Dim filenum As Integer
    Dim ILINE As String, TmpILINE As String
    Dim Count As Integer
    Dim FileName As String, CodCompany As String, DateDoc As String, CompanyName As String

    NumInArr = 0
    Redim Arr(NumInArr)

    fileNum=Freefile()
    Open FName For Input As fileNum
    Do While Not Eof(fileNum)
    Line Input #fileNum, ILINE
    If Trim(ILINE) <> "" Then

    ILINE = DostoWin(ILINE)

    TmpILINE = ILINE

    FileName = ""
    CodCompany = ""
    DateDoc = ""
    CompanyName = ""

    Count = Instr(1, ILINE, "^" , 1)       
    If Count <> 0 Then
    CodCompany = Left (ILINE, Count - 1)
    ILINE = Mid (ILINE, Count + 1)
    End If

    Count = Instr(1, ILINE, "^" , 1)       
    If Count <> 0 Then
    FileName = Left (ILINE, Count - 1)
    ILINE = Mid (ILINE, Count + 1)
    End If

    Count = Instr(1, ILINE, "^" , 1)       
    If Count <> 0 Then
    DateDoc = Left (ILINE, Count - 1)
    ILINE = Mid (ILINE, Count + 1)
    End If

    CompanyName = ILINE

    If FileName <> "" And   CodCompany <> "" And DateDoc <> "" And CompanyName <> "" Then
    Redim Preserve Arr(NumInArr)
    Arr(NumInArr).FName = FileName
    Arr(NumInArr).CodCompany = CodCompany
    Arr(NumInArr).DateDoc = DateDoc
    Arr(NumInArr).CompanyName = CompanyName
    NumInArr = NumInArr + 1
    Else
    Msgbox "Некорректная строка в файле из Retail " + TmpILINE
    End If
    End If
    Loop
    Close fileNum

    End Function
    2. Не помогло, один там пробел посередине имени файла.
     
Загрузка...

Поделиться этой страницей