Страница 3 из 4

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

Добавлено: 28 Декабрь 2018, 20:53
finsoftrz
Да, конечно.

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

Добавлено: 28 Декабрь 2018, 21:00
finsoftrz
Я сталкивался с ограничением на количество процедур в отдельном сгенеренном файле. Выдается сообщение типа превышение segdef чего-то там, не помню точно. Решается разделением на несколько файлов. В шаблонах устанавливается счетчик и нарезается необходимое количество файлов с сырцами. Это когда генерится так называемый базовый слой бизнес-функций, через который приложение может работать с базой данных на более высоком уровне по сравнению с примитивными операциями set/next/get и т.п.

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

Добавлено: 28 Декабрь 2018, 21:04
RaFaeL
Ну вот сколько размер основная_апп.clw? Максимально компилируемый размер у нас был 668442 байта, дальше выдает too many segdef и не компилит пока что-то не удалишь. Уже в С7 такой проблемы не было, это видимо как-то связано с 16-битностью
Я сталкивался с ограничением на количество процедур в отдельном сгенеренном файле. Выдается сообщение типа превышение segdef чего-то там, не помню точно. Решается разделением на несколько файлов. В шаблонах устанавливается счетчик и нарезается необходимое количество файлов с сырцами.
А как генерируемое описание таблиц то на модули делить?

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

Добавлено: 28 Декабрь 2018, 21:06
finsoftrz
Глянул, файлик с глобальными декларациями весит 770 кб, но это с учетом того, что в нем еще комментарии...

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

Добавлено: 28 Декабрь 2018, 21:10
finsoftrz
too many segdef возникало на файл с процедурами. Обходится без особых проблем. Файл с декларациями не пробовал. Можно поэкспериментировать, он через include подключается, можно попробовать разделить на 2 и компильнуть. Это в классических шаблонах, про ABC не в курсе.

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

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

Да, у нас ABC. Нашел какую-то галочку про разделение по модулям, но что-то не взлетело с ней, не собирается, может это можно починить, позже поэкспериментирую

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

Добавлено: 28 Декабрь 2018, 21:22
finsoftrz
А что в этой основная_апп.clw? У меня в аналоге только map-структура и инклуды. Размер 128кб.
Компилятор в С6.3 32 битный. 16 бит только среда. Возможно, кодогенератор.

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

Добавлено: 28 Декабрь 2018, 21:24
finsoftrz
В data.obj 763 кб. Это только декларации. Все процедуры в отдельных obj. Может, какие-то особенности компоновки ABC?

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

Добавлено: 28 Декабрь 2018, 21:29
finsoftrz
Сама заглавная dll 5614 кб. Вообще, на зарубежном форуме народ писал и про гораздо большее количество таблиц в декларациях. Если не ошибаюсь, порядка 1000. Под какую версию клариона не помню, но было довольно давно.

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

Добавлено: 28 Декабрь 2018, 21:31
RaFaeL
finsoftrz писал(а): 28 Декабрь 2018, 21:22А что в этой основная_апп.clw?
85% это описание всех таблиц, еще примерно 10% это декларация ABC-классов для работы с файлами, ну и 5% все остальное по мелочи. Т.е. затык именно в размере суммарного описания таблиц в одном модуле

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

Добавлено: 28 Декабрь 2018, 21:32
Игорь Столяров
RaFaeL писал(а): 28 Декабрь 2018, 20:20В принципе, так и сделал, завел просто строку максимально возможной длины записи
Тут, кстати есть ещё один вариант. Сразу не сообразил …
Передавать в Source параметр как: (const *Group) и всё.
В этом случае, все вносимые в Source изменения будут не видны в вызывающей процедуре.

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

Добавлено: 28 Декабрь 2018, 21:37
finsoftrz
RaFaeL писал(а): 28 Декабрь 2018, 21:31
finsoftrz писал(а): 28 Декабрь 2018, 21:22А что в этой основная_апп.clw?
85% это описание всех таблиц, еще примерно 10% это декларация ABC-классов для работы с файлами, ну и 5% все остальное по мелочи. Т.е. затык именно в размере суммарного описания таблиц в одном модуле
А сами ABC классы случаем не в тот же obj попадают? Что-то он большой у вас.

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

Добавлено: 28 Декабрь 2018, 21:38
finsoftrz
Еще, сколько весит итоговая dll?

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

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

Основная dll 4500 кб

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

Добавлено: 28 Декабрь 2018, 21:54
finsoftrz
А не может быть, что ошибка возникает не из-за размера деклараций, а из-за большого количества методов в ABC-классах? Если они все в одном obj и на каждую таблицу генерятся по несколько методов, возникает ситуация, похожая на мою с подобной ошибкой.