Конфликты совместимости Oracle решения с Global 1
========================================================
* Формы :term:`AS` через ``super$`` могут получить доступ только к главной выборке приложения.
Формы приложения :term:`Global 1`, могут быть связаны друг с другом ``super$`` параметрами.
Многие карточки обращаются к вызывающим формам через ``super$``.
* В ``AS`` строгая типизация. При несовпадении типов вызывается исключение конвертации типов.
А ``Global 1`` позволяет записывать в параметры значения с не согласованными типами данных.
Например, этот код выполнится в ``Global 1`` и вызовет исключение в ``AS``
.. code-block:: pascal
:force:
AddVar('Param', 'Какая-то строчка', ftFloat);
В ``Global 1``: ``GetVar('MyDate')`` вернёт дату, поскольку значение хранится как ``Variant`` и не конвертируется.
В ``AS``: ``GetVar('MyDate')`` вернёт строковое представления числа, поскольку даты через ``JavaScript`` передаются как
``double`` и на этапе добавления параметра произойдёт конвертирование double в строку.
.. code-block:: pascal
:force:
AddVar('MyDate', GetVar('dDate'), ftString);
* Методы работы с длиной строки
.. code-block:: pascal
:force:
a := 's';
setLength(a, 25); // Метод задания длины строки. Не реализован для AS, применение приведет к ошибке.
length(a); // в Global 1 вернет 25; в AS вернет 1
strlen(a); // вернет 1 для Global 1 и AS
* Результат условия ``null = 0`` для ``Global 1`` будет ``true``, для ``AS`` будет ``false``.
В паскале (в ``Global 1``) происходит преобразование к number, и ``null`` приравнивается к ``0``.
В JavaScrit (в ``AS``) ``null`` - объект, из-за этого идет преобразование к строкам.
* Массивы объектов/массивов.
При присвоении массива в качестве элемента другого массива,
при выполнении в ``Global 1``, передается значение; в ``AS`` – ссылка.
.. code-block:: pascal
:force:
:caption: В данном примере, при выполнении в ``AS``,
все элементы массива ``avResult`` будут содержать ссылку на последний элемент массива ``someData``
avResult := CreateArray();
avTmp := CreateArray(); // создается объект
for i := 1 to 2 do begin
avTmp[1] := someData[i]; //объект получает значение
avResult[i] := avTmp; // в ``AS`` передается ссылка на один и тот же объект
end;
* Загрузка файлов в базу.
В приложении ``Global 1``, обычно сначала открывается диалог выбора файла,
после чего выполняется ``BlobOpen('поле', 'имя файла')``.
Для ``AS`` данный способ не подходит. Процессы выбора файла и загрузки файла на сервер должны выполняться одновременно.
Для этого предлагается сделать метод ``BlobOpen()`` функцией, возвращающей имя загруженного файла.
* Формировать в сеттере BLOB поля вызов API.SetxxxLOB() метода.
* Разделение элементов в фиксированном выпадающем списке.
Если в задающей строке будут подстроки и перед символом ``"`` или ``'`` будут символы, отличные от разделителя,
в ``Global 1`` происходит игнорирование подстроки.
Пример 1:
* Исходная строка ``123"A,B"321``
* В ``Global 1`` элементами будут ``123"A``, ``B"321``
* В ``AS`` элементами будут ``123``, ``A,B``, ``321``
Пример 2:
* Исходная строка ``"A,B"123``
* В ``Global 1`` и в ``AS`` элементами будут ``A,B``, ``123``
* В ``AS`` недоступно обращение к детальным выборкам в момент открытия мастера.
В ``Global 1`` это работает, поскольку, сначала простраивается вся форма, а потом открывается гл. выборка.
В ``AS`` форма простраивается последовательно (что ускоряет ответ системы), из-за чего в операции :btk:event:`beforeFirstOpen`
главной выборки детали ещё не доступны и параметры в детали не добавляются.
* В ``AS`` добавлены свойства атрибута :xsd:attr:`View.Representation.Attributes.Attribute.Style.highlightLang`
и :xsd:attr:`View.Representation.Attributes.Attribute.Style.highlightCol`, хранящие язык, выделяемый в тексте,
и цвет выделения этого языка соответственно.
* :class:`btkFrame.TbtkGridPanelFrame`
* В ``AS`` поддерживает размеры строк и колонок, указанные в процентах и как ``auto``.
Но поддерживает размеры, указанные в пикселах.
* ``Global 1`` не поддерживаются значения размеров ``v`` (они вычисляются относительно полного размера гридпанели).
* ``AS`` учитывает изменения свойствах, влияющих на содержимое и его отображение при рефреше выборки фрейма.
``Global 1`` не поддерживает изменения в метаданных.
* :class:`btkFrame.TbtkLookUpGanttTreeTabFrame`
* :term:`AS` поддерживает свойство
:btk:frameprop:`CaptionWordWrap`.
В :term:`Global 1` это свойство не обрабатывается
* :class:`TbtkScriptSerialPortObject`
* Метод :pas:meth:`TbtkScriptSerialPortObject.RegisterHandler`. В :term:`AS` указанная операция выполнится на чтение из устройства
только в том случае, если выборка, в которой определена эта операция, не закрыта.
* :term:`AS` поддерживает свойство :pas:attr:`TbtkScriptSerialPortObject.Busy`.
В :term:`Global 1` это свойство не обрабатывается
* :class:`btkFrame.TbtkLookUpPDFViewFrame`
* В ``Global 1`` в атрибуте из свойства фрейма **FileNameField** указывается имя файла или блоб для отображения, в :term:`AS` возможно только указание блоба