|
16.06.2008, 12:54 | #1 |
Участник
|
EDT как Array
Здравствуйте уважаемые.
Вопрос уже поднимался на форуме, но я не нашел ни одного понятного ответа, возможно плохо искал, возможно просто не допрыгиваю... Сделал EDT как Array из 16 элементов. Хочу использовать его для настроек, то есть возможно будет использоваться в строке 4 элемента, а может 15. Когда добавляю на форму поле из таблицы на базе этого EDT то вижу только первый заполненный, как отобразить их все? Как определить количество доступных для EDT элементов (попросту ArrayLength)?
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ. |
|
16.06.2008, 13:07 | #2 |
Участник
|
посмотрите как работают с типом Dimension и с полями на его основе
|
|
16.06.2008, 13:31 | #3 |
Участник
|
Смотрел, вот только в основном там идет работа с уже подготовленным и введенным массивом. знаю что через dimof() могу получить размер массива. Это если уже есть массив значений, а массивом я как раз и не владею, есть только расширенный тип. И еще в книге нашел чтобы выводились все поля необходимо указать ArrayIndex = 0. Сменил 1 на 0 а результата нет. Может из за того что изначально поле было не array-типа
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ. |
|
16.06.2008, 13:57 | #4 |
Участник
|
Зря Вы это сделали... С полями типа Array проблем больше, чем достоинств.
Физически, каждый отдельный элемент типа Array - это отдельное поле. Значит, обращаться необходимо к каждому такому полю персонально. Посмотрите, например, форму заказов на закладке "Аналитика". Там идет обращение к каждому элементу по имени. Если Вы только начали разрабатывать структуру, то я бы посоветовал Вам отказаться от Array и использовать обычные типы данных. |
|
16.06.2008, 14:16 | #5 |
Участник
|
Цитата:
Сообщение от Владимир Максимов
Зря Вы это сделали... С полями типа Array проблем больше, чем достоинств.
Физически, каждый отдельный элемент типа Array - это отдельное поле. Значит, обращаться необходимо к каждому такому полю персонально. Посмотрите, например, форму заказов на закладке "Аналитика". Там идет обращение к каждому элементу по имени. Если Вы только начали разрабатывать структуру, то я бы посоветовал Вам отказаться от Array и использовать обычные типы данных.
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ. |
|
16.06.2008, 20:17 | #6 |
Участник
|
Цитата:
Использование определенных типов данных лишь косвенно влияет на размер таблицы. Да и то, в очень специфических ситуациях. Как правило, таблица настроек, "по определению" содержит очень небольшое количество записей (обычно вообще одну). Поэтому количество добавляемых полей практически никак не влияет на ее размер. |
|
17.06.2008, 06:40 | #7 |
Участник
|
Цитата:
У RS есть служба управляемых подписок - на основании запроса формировать отчеты. То что надо для таких случаев. Получается надо таблицу которая будет содержать нужные параметры и использоваться в запросе RS. Но согласитесь если для каждого отчета на RS делать свою таблицу это будет несколько расточительно. Поэтому сделал общую таблицу содержащую значения для формирования подписок.Состав полей очень простой: код класса формирующий подписку, путь к отчету, список параметров(Parameter1, Parameter2 и т.д.) и признак активности подписки чтобы ее можно было выключать временно. Сначало параметры забил отдельными полями, сейчас превратил их в массив так табличка симпотичнее выглядит). Вот собственно и все... Механизм отладил уже работает
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ. |
|
17.06.2008, 06:47 | #8 |
Участник
|
Категорически не соглашусь.
|
|
16.06.2008, 14:53 | #9 |
Участник
|
Посмотрите, как хранится контейнер в шаблонах записей (табл. SysRecordTemplateTable).
|
|
16.06.2008, 15:05 | #10 |
Участник
|
Спасибо за идею, но к сожалению в этом случае она не подходит. Я использовал такой прием для хранения сложных настроек) вот только сейчас задача организовать настройки которые будут доступны вне аксапты по средствам обычного sql запроса к бд. Поэтому и избрал изначально хранение в полях таблицы или как сейчас реализовано в массиве на одном EDT. Заменил поле Memo на строку длиной 1000 символов, правда пришлось увеличить размер буфера для SQL. Но в итоге таки работает и именно так как и хотелось
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ. |
|
17.06.2008, 10:29 | #11 |
Administrator
|
Возвращаясь к изначальной проблеме, так и сделайте так, как это со стандартным Dimension сделано. Добавьте в таблицу поле, основанное на EDT-массиве. Затем сделайте в таблице Field Group, в которую добавьте Ваше новое поле. Идите в форму и создайте там группу (контрол Group), которому укажите DataGroup = <имя Field Group в таблице> и AutoDataGroup = Yes.
__________________
Not registered yet? Register here! Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me |
|
17.06.2008, 10:40 | #12 |
Участник
|
Цитата:
Сообщение от Maxim Gorbunov
Возвращаясь к изначальной проблеме, так и сделайте так, как это со стандартным Dimension сделано. Добавьте в таблицу поле, основанное на EDT-массиве. Затем сделайте в таблице Field Group, в которую добавьте Ваше новое поле. Идите в форму и создайте там группу (контрол Group), которому укажите DataGroup = <имя Field Group в таблице> и AutoDataGroup = Yes.
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ. |
|