Ошибка при работе с БД

Автор st.inna, 31 января 2023, 15:51

0 Пользователи и 1 гость просматривают эту тему.

st.inna

Всем здравствуйте!

На компьютере переустановили Astra Linux (теперь это версия 1.7.3) и Libre Office (теперь это версия 7.4.5.1).
При работе с базой данных всё работает как всегда, кроме того, что при открытии любой формы всплывает окно с ошибкой. Всё бы ничего, но это окно множится каждый раз при открытии форм.

Кто-нибудь сталкивался с таким? Это лечится?

sokol92

Выложите тестовый файл-пример (проблемный), я проверю на наших компьютерах (AstraLinux).
Владимир.

kompilainenn

Астра что, собирает билд ЛибреОфис в хомяке юзера?
Поддержать разработчиков LibreOffice можно тут, а наш форум вот тут

st.inna

По сути даже выкладывать мой файл нет необходимости, потому что эта ошибка возникает даже при создании новой базы. Но на всякий случай выкладываю эту новую БД (она совершенно пустая). Ошибка возникает и при создании новой и при открытии этой новой.

rami

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

sokol92

#5
У нас тоже AstraLinux 1.7.3. С Вашим примером ошибки нет.
Версия 7.4.5 еще не вышла (есть только 7.4.5/RC1). Разработчик AstraLinux сейчас поставляет версию LO 7.3.6.2.
Владимир.

st.inna

С ошибкой справилась!!!!!!!!!

Оказалось, что она возникает при открытии не только приложения BASE, но и всех остальных приложений LibreOffice. Связана она с неправильным именованием листов в CALC. Странно: почему ошибка в CALC влияет на работу других приложений...

Вылечилась она установкой расширения correct_sheetname_in_formulas. Порывшись в недрах компьютера, я его нашла здесь: /usr/share/libreoffice-astra/extensions/correct_sheetnames_in_formulas.oxt

Компьютер на работе, систему и приложения устанавливают "специально обученные люди", поэтому почему это расширение не было поставлено при установке, ответить не могу. И где они берут такие официально еще не вышедшие версии LO я не знаю, но скан с версией приложу.

Файл с расширением тоже прикладываю.

Кстати, это расширение в контейнере "Мои макросы и диалоги" формирует библиотеку "astralinux", модуль "correct_sheetnames_in_formulas" и в нем макрос:


' ИСПРАВЛЕНИЕ ИМЕН ЛИСТОВ В ФОРМУЛАХ
sub correct_sheetnames_in_formulas()
   on error goto errorHandler
   dim doc, url, sheets, sheet, sheet_names(), sheet_name
   dim curs, colMax, rowMax
   dim used_range, formula_ranges, formula_addrs(), formula_addr
   dim cell, cell_formula, bad, good
   dim i, j, k, row, col
   
   doc = ThisComponent
   ' Завершение, если текущий документ не электронная таблица
   if not doc.SupportsService("com.sun.star.sheet.SpreadsheetDocument") then
      exit sub
   end if
   url = LCase(doc.URL)
   ' Завершение, если текущий документ не электронная таблица Excel
   if (Right(url, 3) <> "xls") and (Right(url, 4) <> "xlsx")  then
      exit sub
   end if
   sheets = doc.getSheets()
   ' Формирование строки из имен листов
   sheet_names() = sheets.getElementNames()
   ' Цикл по листам
   for i = 0 to sheets.getCount() - 1
      sheet = sheets.getByIndex(i)
        ' Создание курсора на листе
      curs = sheet.createCursor()
      ' Установка курсора в правую нижнюю ячейку заполненной области
      curs.gotoEndOfUsedArea(True)
      ' Определение самых нижниих колонки и ряда
      colMax = curs.getRangeAddress().EndColumn
      rowMax = curs.getRangeAddress().EndRow
        ' Получение списка формул на листе
        used_range = sheet.getCellRangeByPosition(0, 0, colMax, rowMax)
        formula_ranges = used_range.queryContentCells(com.sun.star.sheet.CellFlags.FORMULA)
        formula_addrs() = formula_ranges.getRangeAddresses()
      ' Цикл по группам формул
      for j = 0 to UBound(formula_addrs())
         formula_addr = formula_addrs(j)
         ' Цикл по рядам в группе формул
         for row = formula_addr.StartRow to formula_addr.EndRow
            ' Цикл по колонкам в группе формул
            for col = formula_addr.StartColumn to formula_addr.EndColumn
               cell = sheet.getCellByPosition(col, row)
               cell_formula = LCase(cell.getFormula())
               if InStr(cell_formula, "!") > 0 then
                  for k = 0 to UBound(sheet_names())
                     bad = LCase(sheet_names(k)) & "!"
                     if InStr(cell_formula, bad) > 0 then
                        good = "$'" & LCase(sheet_names(k)) & "'."
                        cell_formula = Join(Split(cell_formula, bad), good)
                        cell.setFormula(cell_formula)
                     end if
                  next
               end if
            next
         next
      next
   next
exit sub
errorHandler:
   if Err = 423 then exit sub
   msgbox "В процедуре ""correct_sheetnames_in_formulas"" в строке " & Erl _
      & chr(13) & "возникла ошибка с кодом " & Err & ":" & chr(13) & Error, _
      16, "СООБЩЕНИЕ ОБ ОШИБКЕ!" ' Выдача информационного сообщения         
   on error goto 0
end sub

Жалко, что каждая новая версия не обходится без каких-то заплаток.

ВСЕМ  УДАЧИ!