Ошибка при докомпиляции словаря БД Галактика

Инсталляция, обновления, нюансы БД, администрирование системы

Модератор: mike

Ответить
max_fin
партнер
Сообщения: 28
Зарегистрирован: Пн, 22/10/2007 17:09
Имя Фамилия: Максим Корхонен
Откуда: Тюмбит-АСУ
Контактная информация:

Ошибка при докомпиляции словаря БД Галактика

Сообщение max_fin »

Версия Атлантиса 5.2.15 (Галактика 8.1)

Необходимо добавить в словарь общеупотребительную таблицу.

1) В случае, если указывается конкретно, к какому компоненту принадлежит данная таблица
#ifdef ComponentVersion
component Z_WT
#end
в этом случае компиляция проходит удачно, таблица создается в нужном каталоге, но обратиться к такой таблице невозможно из интерфейсов, которые принадлежат другой компоненте.

2) Если не использовать component, как советуется в документации VIP_5.2.08.chm («Конструкция component позволяет задать компонентную принадлежность таблицы. Каждая таблица может принадлежать только к одному компоненту, кроме тех, у кого компонент не указан. Эти таблицы считаются общеупотребительными.»), то в этом случае
«TableDef.ToDictionary: Не могу вставить Таблицу RVARIANCE в словарь. ErrorCode=5: "
Ошибка: Ошибка при добавлении в словарь таблицы RVARIANCE (стр.42, поз.3 в crtable.lot)»

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

Код: Выделить всё

Create Table D_ZARPL.RVARIANCE "Отклонения от графика"
  Using "RVARNC.DAT"
!  #ifdef ComponentVersion
!  component Z_WT
!  #end
  With Table_CODE = 32766
  With TableOptions Branched
(
  NRec         : tNRec            "Номер записи"
, LastUser     : s20              "LASTUSER"
, LastTime     : Time             "LASTTIME"
, LastDate     : Date             "LASTDATE"
, FilialNo     : Longint          "FILIALNO"
, cLSchet      : ref(LSchet)      "Ссылка на лицевой счет"
, cLSTab       : ref(LSTab)       "Ссылка на табель учета рабочего времени"
, cUO          : ref(UOWrkTabel)  "Ссылка на условное обозначение"
, Kind         : Word             "Вид отклонения"                           // уменьшение/увеличение/замена(безусловное отклонение)
, Priority     : Word             "Приоритет"                                // для определения порядка обработки отклонений, приходящихся на один и тот же период
, Flags        : Word             "Флаги"
, Beginning    : Word             "День начала отклонения"
, Ending       : Word             "День окончания отклонения"
, WorkingHours : Double           "Общее кол-во часов откл-я ежедневно"
, EveningHours : Double           "Кол-во вечерних часов откл-я ежедневно"   // из общего кол-ва часов отклонения ежедневно
, NightHours   : Double           "Кол-во ночных часов откл-я ежедневно"     // из общего кол-ва часов отклонения ежедневно
, HolidayHours : Double           "Кол-во праздничных часов ежедневно"       // Не более общего кол-ва часов отклонения ежедневно
, WeekendHours : Double           "Кол-во выходных часов ежедневно"          // Не более общего кол-ва часов отклонения ежедневно
, oldcLsch     : ref(LSchet)      "Ссылка на старый л/счет"
, bAuto        : Boolean          "0 - автоматическая, 1 - ручная запись"
)
With Index
(
  RVARIANCE01  =  NRec(Unique, Surrogate, Journal)
, RVARIANCE02  =  cLSchet
, RVARIANCE03  =  cLSTab + Priority + Beginning
, RVARIANCE04  =  cUO + cLSTab
, RVARIANCE05  =  cLSTab + bAuto + Priority + Beginning
);
mazneff
Сообщения: 7
Зарегистрирован: Пт, 07/09/2007 15:00
Имя Фамилия: Валерий Мазнев

Сообщение mazneff »

Как известно, код ошибки 5 - это дублирование записи по ключу.
Поскольку мы создаем таблицу, логично предположить, что это будет индекс в x$files. Смотрим, какие уникальные индексы есть в x$files

Код: Выделить всё

  tiFILEBYCODE        = 0;  { XFsCODE(Un M)                           }
  tiFILEBYCOMPONENT   = 5;  { XFsCOMPONENT(Un M Up) + XFsCODE         }
  tiFILEBYCOMPBYNAME  = 6;  { XFsCOMPONENT(Un M Up) + XFsNAME(Up)     }
  tiFILEBYCOMPBYTITLE = 7;  { XFsCOMPONENT(Un M Up) + XFsTITLE(Up)    }
Скорее всего значение поля, по одному из этих индексов оказывается неуникально.
Если еще учесть, что добавление компонента помогает, то индекс с номером 0 (а по индукции и 5) можно отбросить. Остается 6 и 7.
Надо глянуть словарь Галактики и понять, что пересеклось, имя таблицы или заголовок. Сделайте это сами, плз.
vadim
топ-софт
Сообщения: 197
Зарегистрирован: Чт, 06/09/2007 17:38
Имя Фамилия: Вадим Володько
Откуда: ТопСофт
Контактная информация:

Сообщение vadim »

Максим, постараемся в будущем расширить диагностику, чтобы в подобных ситуациях проще было установить причину возникающей проблемы
max_fin
партнер
Сообщения: 28
Зарегистрирован: Пн, 22/10/2007 17:09
Имя Фамилия: Максим Корхонен
Откуда: Тюмбит-АСУ
Контактная информация:

Сообщение max_fin »

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