Как создать группу на основе *group?

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4559
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

Как создать группу на основе *group?

Сообщение finsoftrz »

Да, конечно.
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4559
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

Как создать группу на основе *group?

Сообщение finsoftrz »

Я сталкивался с ограничением на количество процедур в отдельном сгенеренном файле. Выдается сообщение типа превышение segdef чего-то там, не помню точно. Решается разделением на несколько файлов. В шаблонах устанавливается счетчик и нарезается необходимое количество файлов с сырцами. Это когда генерится так называемый базовый слой бизнес-функций, через который приложение может работать с базой данных на более высоком уровне по сравнению с примитивными операциями set/next/get и т.п.
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
RaFaeL
✯ Ветеран ✯
Сообщения: 1376
Зарегистрирован: 24 Март 2009, 17:59
Откуда: НН
Благодарил (а): 7 раз
Поблагодарили: 1 раз
Контактная информация:

Как создать группу на основе *group?

Сообщение RaFaeL »

Ну вот сколько размер основная_апп.clw? Максимально компилируемый размер у нас был 668442 байта, дальше выдает too many segdef и не компилит пока что-то не удалишь. Уже в С7 такой проблемы не было, это видимо как-то связано с 16-битностью
Я сталкивался с ограничением на количество процедур в отдельном сгенеренном файле. Выдается сообщение типа превышение segdef чего-то там, не помню точно. Решается разделением на несколько файлов. В шаблонах устанавливается счетчик и нарезается необходимое количество файлов с сырцами.
А как генерируемое описание таблиц то на модули делить?
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4559
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

Как создать группу на основе *group?

Сообщение finsoftrz »

Глянул, файлик с глобальными декларациями весит 770 кб, но это с учетом того, что в нем еще комментарии...
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4559
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

Как создать группу на основе *group?

Сообщение finsoftrz »

too many segdef возникало на файл с процедурами. Обходится без особых проблем. Файл с декларациями не пробовал. Можно поэкспериментировать, он через include подключается, можно попробовать разделить на 2 и компильнуть. Это в классических шаблонах, про ABC не в курсе.
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
RaFaeL
✯ Ветеран ✯
Сообщения: 1376
Зарегистрирован: 24 Март 2009, 17:59
Откуда: НН
Благодарил (а): 7 раз
Поблагодарили: 1 раз
Контактная информация:

Как создать группу на основе *group?

Сообщение RaFaeL »

finsoftrz писал(а): 28 Декабрь 2018, 21:06Глянул, файлик с глобальными декларациями весит 770 кб, но это с учетом того, что в нем еще комментарии...
ОК, основная_апп.obj сколько? У нас сейчас 1161095, но при этом clw сейчас примерно 600 кб, не 650

Да, у нас ABC. Нашел какую-то галочку про разделение по модулям, но что-то не взлетело с ней, не собирается, может это можно починить, позже поэкспериментирую
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4559
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

Как создать группу на основе *group?

Сообщение finsoftrz »

А что в этой основная_апп.clw? У меня в аналоге только map-структура и инклуды. Размер 128кб.
Компилятор в С6.3 32 битный. 16 бит только среда. Возможно, кодогенератор.
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4559
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

Как создать группу на основе *group?

Сообщение finsoftrz »

В data.obj 763 кб. Это только декларации. Все процедуры в отдельных obj. Может, какие-то особенности компоновки ABC?
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4559
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

Как создать группу на основе *group?

Сообщение finsoftrz »

Сама заглавная dll 5614 кб. Вообще, на зарубежном форуме народ писал и про гораздо большее количество таблиц в декларациях. Если не ошибаюсь, порядка 1000. Под какую версию клариона не помню, но было довольно давно.
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
RaFaeL
✯ Ветеран ✯
Сообщения: 1376
Зарегистрирован: 24 Март 2009, 17:59
Откуда: НН
Благодарил (а): 7 раз
Поблагодарили: 1 раз
Контактная информация:

Как создать группу на основе *group?

Сообщение RaFaeL »

finsoftrz писал(а): 28 Декабрь 2018, 21:22А что в этой основная_апп.clw?
85% это описание всех таблиц, еще примерно 10% это декларация ABC-классов для работы с файлами, ну и 5% все остальное по мелочи. Т.е. затык именно в размере суммарного описания таблиц в одном модуле
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7327
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Как создать группу на основе *group?

Сообщение Игорь Столяров »

RaFaeL писал(а): 28 Декабрь 2018, 20:20В принципе, так и сделал, завел просто строку максимально возможной длины записи
Тут, кстати есть ещё один вариант. Сразу не сообразил …
Передавать в Source параметр как: (const *Group) и всё.
В этом случае, все вносимые в Source изменения будут не видны в вызывающей процедуре.
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4559
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

Как создать группу на основе *group?

Сообщение finsoftrz »

RaFaeL писал(а): 28 Декабрь 2018, 21:31
finsoftrz писал(а): 28 Декабрь 2018, 21:22А что в этой основная_апп.clw?
85% это описание всех таблиц, еще примерно 10% это декларация ABC-классов для работы с файлами, ну и 5% все остальное по мелочи. Т.е. затык именно в размере суммарного описания таблиц в одном модуле
А сами ABC классы случаем не в тот же obj попадают? Что-то он большой у вас.
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4559
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

Как создать группу на основе *group?

Сообщение finsoftrz »

Еще, сколько весит итоговая dll?
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
RaFaeL
✯ Ветеран ✯
Сообщения: 1376
Зарегистрирован: 24 Март 2009, 17:59
Откуда: НН
Благодарил (а): 7 раз
Поблагодарили: 1 раз
Контактная информация:

Как создать группу на основе *group?

Сообщение RaFaeL »

И еще про размер: у нас база MS SQL, поэтому для каждой таблицы, ключа, поля заполнено поле NAME, плюс, поскольку имя ключа в MS SQL должно быть уникальным в пределах базы, эти имена весьма длинные. Т.е. в целом описание таблицы получается чуть ли не в два раза больше, чем было бы без полей NAME. Так и набегает
А сами ABC классы случаем не в тот же obj попадают? Что-то он большой у вас.
Нет они отдельно

Основная dll 4500 кб
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4559
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

Как создать группу на основе *group?

Сообщение finsoftrz »

А не может быть, что ошибка возникает не из-за размера деклараций, а из-за большого количества методов в ABC-классах? Если они все в одном obj и на каждую таблицу генерятся по несколько методов, возникает ситуация, похожая на мою с подобной ошибкой.
C6/C11, ШВС, tps/btrieve.
Ответить