Преобразование структурных типов Назад В начало Вперед

Для переменных структурного типа допустима операция присвоения, эта операция применима только к структурам одного и того же типа. Автоматического преобразования типов никогда не производится.

При необходимости присвоения "похожих" структур необходимо явно указывать оператор преобразования типов (см. раздел "Преобразование типов данных. "). При этом используется следующий алгоритм преобразования:

Здесь под валидностью поля понимается степень актуачельности того знания, которое хранится в поле. Если поле валидно, то значение является актуальным, иначе - значение поля соответствует значению по умолчанию для соответствующего типа. В невалидное поле можно записывать значения, при этом поле становится валидным. При чтении значения из невалидного поля считывается значение по умолчанию и генерируется исключение VIP, которое по умолчанию ничего не делает. В VIP'е можно определить обработчик для таких исключений.

Проверить валидность поля структуры можно функцией Verify.

Для "силового" приведения несовпадающих структурных типов используется оператор cast: Оператор введен начиная с Атлантис 5.1.25.

<оператор-cast> =
  <целевая-структура> = (<целевой-тип>, <исходная-структура>);

Пример

TPrjMaterials = record as table PrjMaterials;
PMRecordType = record  // содержит часть полей PrjMaterials
  QuantP : double;
  QuantF : double;
  SummP  : double;
  SummF  : double;
end;

var
  tblPM : TPrjMaterials;
  recPM : PMRecordType;
......
  tblPM := PrjMaterials.buffer;
//  recPM := PrjMaterials.buffer; // (1)
  recPM := PMRecordType(PrjMaterials.buffer); // (2)
  recPM := cast(PMRecordType, PrjMaterials.buffer); // (3)

Если раскомментировать строку (1), то при компиляции будет выдано сообщение об ошибке "Несовместимость типов".

На строку (2) будут выданы предупреждения "Поле xxx не найдено в целевом типе", по одному на каждое ненайденное поле.

Строка (3) будет откомпилирована без выдачи предупреждений. Результат присвоения будет такой же, как и в строке (2).

Версия

Оператор cast введен начиная с Атлантис 5.1.25.