|
Использование своих библиотек или как правильно построить масштабируемое приложение
|
|||
---|---|---|---|
#18+
Добрый день/ночь/утро/вечер. Попробую сформулировать вопрос максимально точно. Если будет не понятно, пожалуйста уточняйте. Итак... Есть один mdb файл в котором есть очень много форм, таблиц, модулей и т.п. Хотелось бы разделить этот файл на функциональные mdb файлы. Например: в первый файл вынести работу с накладными, во второй работу с зарплатой, в третий работу с движением денежных средств, в четвертый справочники и т.п. Все эти "модули" взаимосвязаны между собой. Например: справочник товаров будет использоваться и в модуле работы с накладными, и в модуле отчетов, и в модуле планирования. Причем во всех модулях должна использоваться одна форма на добавление/редактирование товара. Поэтому и хочется выделить форму создания/редактирования товара в отдельный файл mdb что бы делать изменения в одном месте, но при этом иметь возможность вызывать эту форму во всех остальных модулях. Хотел решить эту задачу в лоб: просто разнести формы по функциональным модулям, и потом сделать основной модуль, куда подключить остальные модули с помощью References. Ну а потом уже вызывать необходимые мне формы. Но столкнулся со следующей неприятностью - Формы открываются используя таблицы того модуля где они размещены, а вот если в форме нажать кнопку на выполнении которой стоит запрос, то этот запрос использует таблицы того модуля, который активировал вызов формы. Примерно так: Есть файл mdb в котором содержаться формы по работе с накладными - назовем его модуль накладных. Есть файл mdb к которому с помощью References подключен модуль накладных. назовем этот файл основным модулем. Так вот. Когда из из основного модуля вызывается форма, которая находиться в модуле накладных, а потом на форме нажимается кнопка которая запускает запрос DoCmd.RunSQL "Select * INTO Table_tmp From Table ", то таблица Table_tmp создается в основном модуле, при этом таблица Table - также используется из основного модуля. А хотелось бы что бы эти таблицы оставались "жить и функционировать" в модуле накладных. Я конечно могу заставить все запросы работать по принципу "Select * INTO Table_tmp IN "модуль накладных" FROM Table IN "Модуль накладных" - но как-то коряво .... Чувствую что должно быть более элегантное решение :( но где копать не знаю... Лопатой я уже вооружился, подскажите куда на какое "поле дураков" идти, копать... А может я вообще не в ту степь двигаюсь? Подскажите/поделитесь мыслями как правильно организовать структуру таких файлов и связей между ними ? как правильно запускать запросы? ну и т.п. Заранее благодарен. PS: надеюсь смог объяснить свои желания... ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2010, 00:51 |
|
Использование своих библиотек или как правильно построить масштабируемое приложение
|
|||
---|---|---|---|
#18+
В принципе пока сидел ждал ответа, нашел определенное решение, которое в первом приближении меня устраивает. Для этого в процедуре в которой проводиться запуск запроса на выполнение необходимо сделать для себя ссылку на нужный функциональный модуль и запускать запрос уже с использование этой ссылки. Примерно так: Dim db As Database Set db = Application.DBEngine.OpenDatabase("функциональный модуль (например: накладных) mdb") db.Execure "Select * INTO Table_tmp FROM Table" В этом случае в основной модуль линковать таблицы уже не надо и "временные" таблицы, которые создаются SQL-кодом "Select * INTO ... FROM ..." создаются в нужном мне модуле. Есть одно "Но!". Данный SQL-код уже не удаляет таблицу перед ее созданием, но удалить ее ручками не представляет никакой сложности db.TableDefs.Delete "Table_tmp" db.Execure "Select * INTO Table_tmp FROM Table" вполне нормально работает. И все же. Хотелось бы услышать замечания и мысли по поводу функционального разделения приложения на модули от коллег, которые пишут на MS Access. PS: Буду благодарен всем, кто выскажет свои мысли... ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2010, 02:24 |
|
Использование своих библиотек или как правильно построить масштабируемое приложение
|
|||
---|---|---|---|
#18+
AndDestr......................... Формы открываются используя таблицы того модуля где они размещены, а вот если в форме нажать кнопку на выполнении которой стоит запрос, то этот запрос использует таблицы того модуля, который активировал вызов формы. Примерно так: Есть файл mdb в котором содержаться формы по работе с накладными - назовем его модуль накладных. Есть файл mdb к которому с помощью References подключен модуль накладных. назовем этот файл основным модулем. Так вот. Когда из из основного модуля вызывается форма, которая находиться в модуле накладных, а потом на форме нажимается кнопка которая запускает запрос DoCmd.RunSQL "Select * INTO Table_tmp From Table ", то таблица Table_tmp создается в основном модуле, при этом таблица Table - также используется из основного модуля. А хотелось бы что бы эти таблицы оставались "жить и функционировать" в модуле накладных. .. Честно говоря, пока не понятно, насколько обоснованно желание формы по работе с накладными выделять в отдельный файл mdb - но решили, так решили. Выполнить запрос в контексте библиотечного приложения можно с помощью такой конструкции: Код: plaintext
Кстати, лучше всегда выделять переменную для записи кода команды - так будет проще отлаживать код. Т.е. не Код: plaintext
Код: plaintext 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2010, 09:27 |
|
Использование своих библиотек или как правильно построить масштабируемое приложение
|
|||
---|---|---|---|
#18+
Мне тоже интересно:) А что лучше использовать: Подключение через References или Application.Run "C:\Demo\Demo.frmTools1" ??? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2010, 09:27 |
|
Использование своих библиотек или как правильно построить масштабируемое приложение
|
|||
---|---|---|---|
#18+
AndDestrDim db As Database Set db = Application.DBEngine.OpenDatabase("функциональный модуль (например: накладных) mdb") db.Execure "Select * INTO Table_tmp FROM Table" если тут "функциональный модуль (например: накладных) mdb" - это ТЕКУЩАЯ база данных (т.е. mdb-файл, открытый в окне MSAccess), то выполнить запрос для таблиц этой базы данных можно так: CurrentDb .Execure "Select * INTO Table_tmp FROM Table" причем в таком виде запрос можно выполнять (в ваших терминах) как в "модуле накладных" так и в "основном модуле" (который подлючен в References). Т.е. CurrentDb - это программный контекст той БД, которая в данный момент открыта в окне MSAccess. Есть еще CodeDb - это программный контекст той бд, в которой написан (и выполняется) этот самый код. Т.е. запрос, выполненный в процедуре через CodeDb.Execute работает с таблицами той БД, где находится эта самая процедура. Кроме этого вы можете выполнять запросы в отношении таблиц, которые находятся вообще в стороннем mdb-файле. Для этого в запросе надо указывать путь на этот файл. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2010, 09:27 |
|
Использование своих библиотек или как правильно построить масштабируемое приложение
|
|||
---|---|---|---|
#18+
Либо делать так, как делают обычно: разделяют приложение на данные (back end) и все остальное (front end), т.е. формы, запросы, отчеты, код и присоединяют таблицы к файлу с формами. Если прилинковать разные "модули" к одним данным, то не нужно будет "переключать" контексты выполнения команд. ИМХО, конечно. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2010, 09:32 |
|
Использование своих библиотек или как правильно построить масштабируемое приложение
|
|||
---|---|---|---|
#18+
Попытаюсь сразу ответить все. Ну во-первых: данные и так лежат в другом mdb (отдельно от исполняемого кода). Исполняемый код находиться в своих mdb файлах, а данные подключаются к коду с помощью связывания таблиц. Во-вторых. Разделение кода на разные функциональные модули связано с несколькими моментами. 20 пользователей, каждый из которых работает со своими функциональными модулями. Самих модулей тоже навскидку около 10. - На сегодня пока ничего лучше чем поделить на модули не придумал. - Если у кого-то есть идеи, буду рад выслушать. В третьих. Использование Application.Run - возможно и неплохая вещь. Но подключение другой базы как References дает мне возможность использовать все константы, функции и процедуры подключенной mdb, что дает возможность хранить код в одном месте, а не повторять его по разным - легче проводить правку кода :) В четвертых. Если не ошибаюсь, то использование структуры CodeProject.Connection.Execute - это ADO технология, я же пользуюсь пока старым добрым DAO :) (вот такой я пока еще динозавр) Спасибо за подсказку про CodeDB - сейчас протестирую. Хотя если опираться на контекст написавшего сообщение Нутакэто - должно вполне подойти. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2010, 12:50 |
|
Использование своих библиотек или как правильно построить масштабируемое приложение
|
|||
---|---|---|---|
#18+
AndDestr, :) Вообще топик очень полезный. Тоже думаю, что делать, когда проект разрастается. авторВ четвертых. Если не ошибаюсь, то использование структуры CodeProject.Connection.Execute - это ADO технология, я же пользуюсь пока старым добрым DAO :) (вот такой я пока еще динозавр) Я тоже почему-то только DAO пользуюсь:) ADO что-то не прижился:) Ну может только вот это использую для определения пользователей, работающих с базой: Код: plaintext
А так в MDB всё можно сделать через DAO. По моему скромному мнению:) ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2010, 12:59 |
|
Использование своих библиотек или как правильно построить масштабируемое приложение
|
|||
---|---|---|---|
#18+
>Честно говоря, пока не понятно, насколько обоснованно желание формы по работе с накладными выделять в отдельный файл mdb +1 25мб интерфейсный файлик после сжатия у мну, вроде работает. Если вам нужна нормальная объектная модель, то лучче не изобретать велосипед с квадратными колесами, а перейти на платформу где она есть. ИМХО. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2010, 15:44 |
|
Использование своих библиотек или как правильно построить масштабируемое приложение
|
|||
---|---|---|---|
#18+
Shark>Честно говоря, пока не понятно, насколько обоснованно желание формы по работе с накладными выделять в отдельный файл mdb +1 25мб интерфейсный файлик после сжатия у мну, вроде работает. Если вам нужна нормальная объектная модель, то лучче не изобретать велосипед с квадратными колесами, а перейти на платформу где она есть. ИМХО. Интересно... с какого боку тут может рассматриваться "объектная модель" ? Возьмем просто пример: 1-й пользователь (заказчик) заказывает приложение которое должно уметь выписывать накладные по приходу расходу товаров. Проходит, какой-то период и пользователь хочет основываясь на введенных накладных построить систему учета расчетов с поставщиками и покупателями. Что мы делаем по вашей "теории" ? вносим в интерфейсный файл определенный модули, формы, отчеты и т.п. 2-й пользователь работает с учетом расчетов с поставщиками и покупателями. По истечению определенного времени он просит подключить ему модуль расчета заработной платы - ок. подключаем. т.е. опять вносим модули, формы, отчет и т.п. в интерфейсный файл. Получаем два интерфейсных файла в которых есть один и тот же код - модуль расчетов с поставщиками/покупателями.. ну и как прикажете вносить правки в такие файлы если надо исправить именно модуль расчетов с поставщиками/покупателями? исправлять в одном файле? а потом в другом?. а если таких файлов 10?. Гораздо проще (с моей точки зрения) иметь отдельный MDB, который отвечает за расчеты с поставщиками/покупателями и максимально простой механизм его подключения для пользователя. В таком случае достаточно внести исправление в одном файле и выслать его всем пользователям кто его использует. Или я неправ? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2010, 16:29 |
|
Использование своих библиотек или как правильно построить масштабируемое приложение
|
|||
---|---|---|---|
#18+
Лучче иметь один файл и в нем всю функциональность. И отключать ее в зависимости от прав. Если ваше приложение имеет 1000+ модулей и над ним работает 3+ разработчиков, то access на мой взгляд не самый удачный выбор. Хоть бей приложение на части хоть нет. А если нет, то все и в одном файле неплохо поживет. Разумееца, имхо. Вы так и не ответили на вопрос, зачем вам понадобился этот огород с разбиением. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2010, 16:37 |
|
Использование своих библиотек или как правильно построить масштабируемое приложение
|
|||
---|---|---|---|
#18+
AndDestr, авторГораздо проще (с моей точки зрения) иметь отдельный MDB, который отвечает за расчеты с поставщиками/покупателями и максимально простой механизм его подключения для пользователя. В таком случае достаточно внести исправление в одном файле и выслать его всем пользователям кто его использует. Или я неправ? Да правильно Вы всё мыслите. Ну вариантов не так много, покрутите их просто в разных сочетаниях да и всё::) CodeProject CodeDB Refereneces Application.Run Я вижу некоторые трудности в том, что в дополнительных mdb/mde модулях тоже надо подключать присоединённые таблицы. Например, Вы изменили путь к таблицам в основном модуле, тут же нужно автоматически прописать новый путь в других модулях. Вообще вынесение части приложения в отдельные модули - это правильный подход. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2010, 16:45 |
|
Использование своих библиотек или как правильно построить масштабируемое приложение
|
|||
---|---|---|---|
#18+
SharkЛучче иметь один файл и в нем всю функциональность. И отключать ее в зависимости от прав. Если ваше приложение имеет 1000+ модулей и над ним работает 3+ разработчиков, то access на мой взгляд не самый удачный выбор. Хоть бей приложение на части хоть нет. А если нет, то все и в одном файле неплохо поживет. Разумееца, имхо. Вы так и не ответили на вопрос, зачем вам понадобился этот огород с разбиением. Кстати тоже правильная мысль иметь всё в одном файле:) Так легче контролировать весь проект, обеспечивать согласованную работу. А вот когда разбиваем проект на части, то уже приходится думать, например, о правильном присоединении связанных таблиц во всех внешних модулях. Я ещё, кстати, не пробовал, можно ли через Refereneces взять форму и вставить её как субформу. Через Application.Run вроде этот фокус не проходит. Форма открывается только как диалог. Поэтому иногда, из-за определённой компоновки проекта, невозможно использовать внешнюю форму через Application.Run Проект может разрастись и тогда приходится думать о его разбиении на части. Может Аксесс и не самый лучший выбор, но пока не знаешь хорошо другой инструмент, надо как-то выходить из ситуации. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2010, 16:55 |
|
Использование своих библиотек или как правильно построить масштабируемое приложение
|
|||
---|---|---|---|
#18+
>и "временные" таблицы, которые создаются SQL-кодом "Select * INTO ... FROM ..." О временных таблицах. Я держу из в отдельном файлике рядом с интерфейсным, и не создаю их а чищу. Вроде постабильнее так получается, интерфейсный файлик меньше пухнет и ломаеца. Ну это дело вкуса разумеется. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2010, 17:36 |
|
Использование своих библиотек или как правильно построить масштабируемое приложение
|
|||
---|---|---|---|
#18+
Shark>и "временные" таблицы, которые создаются SQL-кодом "Select * INTO ... FROM ..." О временных таблицах. Я держу из в отдельном файлике рядом с интерфейсным, и не создаю их а чищу. Вроде постабильнее так получается, интерфейсный файлик меньше пухнет и ломаеца. Ну это дело вкуса разумеется. -при входе пользователя создаю пустую новую MDB -select ...... into ............. -все отчеты основаны на временных таблицах для уменьшения блокировок -схема отчетов основана на форме ввода (свободные поля для независимого поиска - без списков) клиент-товар-период-группировки-количества-суммы цех-участок-год-месяц-профессия-виды оплат-суммы -настраиваемая сортировка цех-участок-професссия............ цех-професссия............ мес-цех-участок-професссия............ профессия-перекрестный по видам, месяцам -отчеты в НТМ, чтобы не настраивать ширину столбцов ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2010, 18:02 |
|
Использование своих библиотек или как правильно построить масштабируемое приложение
|
|||
---|---|---|---|
#18+
ПЕНСИОНЕРКА, автор# -все отчеты основаны на временных таблицах для уменьшения блокировок Что значит для уменьшения блокировок? автор# -отчеты в НТМ, чтобы не настраивать ширину столбцов Как вы строите отчёты в HTM и как они выглядят? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2010, 18:12 |
|
Использование своих библиотек или как правильно построить масштабируемое приложение
|
|||
---|---|---|---|
#18+
SharkЛучче иметь один файл и в нем всю функциональность. И отключать ее в зависимости от прав. Если ваше приложение имеет 1000+ модулей и над ним работает 3+ разработчиков, то access на мой взгляд не самый удачный выбор. Хоть бей приложение на части хоть нет. А если нет, то все и в одном файле неплохо поживет. Разумееца, имхо. Вы так и не ответили на вопрос, зачем вам понадобился этот огород с разбиением. На вопрос я ответил ровно на один пост выше над Вашим. Хз. Бить приложение на части или не бить - это еще тот вопрос. Мне например надоело копаться в 200+ таблицах и 200+ формах, а еще есть пачка отчетов и запросов и это не предел. Гораздо проще все это разбить на функциональные части. кроме того из таких функциональных частей гораздо проще собирать приложение на продажу. Да и доработки гораздо проще вносить в один функциональный файл mdb и отсылать его N-людям использующим приложения, чем исправлять по куче приложений. Да и размер тоже не мало важен. Я конечно понимаю что в наш век приложение в 100 Мб - этот не предел, но как-то не хочется расти до такой монстрообразности (мой поджатый интерфейсный файлик сейчас уже весит 30+Мб а еще кучу всего туда надо будет запихнуть) В самой теме вообще не обсуждался вопрос "бить или не бить?" - спрашивалось - "как?" В принципе ответ я получил... Ситуация с CodeDB меня вполне устраивает. Так что .... ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2010, 19:11 |
|
Использование своих библиотек или как правильно построить масштабируемое приложение
|
|||
---|---|---|---|
#18+
NeboТак легче контролировать весь проект, обеспечивать согласованную работу. А вот когда разбиваем проект на части, то уже приходится думать, например, о правильном присоединении связанных таблиц во всех внешних модулях. хз. мой опыт работы в больших проектах как раз показывает, что легче контролировать проект если человек получает конкретную задачу и работает над своим функциональным модулем. а вот как собрать это все "малой кровью" в общий проект - зависит от умения того кто этот проект ведет. NeboЯ ещё, кстати, не пробовал, можно ли через Refereneces взять форму и вставить её как субформу. Через Application.Run вроде этот фокус не проходит. Форма открывается только как диалог. Поэтому иногда, из-за определённой компоновки проекта, невозможно использовать внешнюю форму через Application.Run а смысл? используя References гораздо проще вызвать всю форму которая использует субформу. Хотя тут уже наверное от задачи зависит. Надо пробовать. Зато обычная форма нормально открывается в отличии от диалогового открытия в Application.Run SharkЯ держу из в отдельном файлике рядом с интерфейсным, и не создаю их а чищу. Вроде постабильнее так получается, интерфейсный файлик меньше пухнет и ломаеца. Ну это дело вкуса разумеется. Ну а я держу все временные таблицы в интерфейсном файле... И пересоздаю их запросами. Ну и подумаешь что он немного пухнет... :) При следующем входе в программу специальный менеджер его успешно скопирует пользователю с сервера и запустит. - Для пользователя эта задержка в лишние 10 секунд - максимум. Для меня отсутствие проблем с обновлением версий. - бегать по 4-м этажам длиной 100 метров и обновлять клиентские части 20+ клиентам - мне влом. Гораздо проще положить новую версию в папочку на сервер и менеджер на локальной машине сам ее стянет. И эта версия будет уже поджата мной. Кроме того если где-то проморгал ошибку - процесс отката/обновления занимает минимум времени - положил старую версию на сервак - позвонил пользователям, что бы они перезашли в программу - и все. Потом исправил ошибку - положил на сервер - звякнул пользователям - и опять пришло счастье. Но это дело на любителя. Мне удобно, а кто-то такой способ может посчитать извращением. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2010, 19:28 |
|
Использование своих библиотек или как правильно построить масштабируемое приложение
|
|||
---|---|---|---|
#18+
Мне не очень давно пришлось разбить адп проект из-за ограничения акесс на 1000 объектов - форм и модулей. Я разбил монолитное приложение на 5 частей: Библиотека для работы с общими виндоуз-функциями Библиотека для работы с графикой (низкий поклон Бенедикту) Основная библиотека - весь код, который отстоялся и может применятся безотносительно предметной области. В том числе собстыенный фреймворк пользовательских форм Конфигуратор - приложение для настройки пользовательских форм и всего остального что настраивается, в том числе по специфике предметной области Основное приложение - собсно пользовательское приложение Благодаря форуму узнал трюк как делать New объектам, если классы сидят в библиотеке. Решил остаться на штатном способе через функцию из библиотеки, рекомендуемом MSDN. Когда основное приложение опять разрастется до 1000+ форм и модулей, надо будет дробить дальше. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2010, 22:32 |
|
Использование своих библиотек или как правильно построить масштабируемое приложение
|
|||
---|---|---|---|
#18+
П-ЛБлагодаря форуму узнал трюк как делать New объектам, если классы сидят в библиотеке. Решил остаться на штатном способе через функцию из библиотеки, рекомендуемом MSDN. Если не сложно ссылку на "трюк" и на "штатный способ" :) буду очень благодарен ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2010, 23:43 |
|
Использование своих библиотек или как правильно построить масштабируемое приложение
|
|||
---|---|---|---|
#18+
[quot Nebo]ПЕНСИОНЕРКА, автор# - автор# -отчеты в НТМ, чтобы не настраивать ширину столбцов Как вы строите отчёты в HTM и как они выглядят? -использую минимум тегов(table,thead,tr,td,h1,h2 -короче стандарт без всяких нововведений) -объединение ячеек в разумных пределах(торг 12, счета фактуры, накладные) -вложение таблиц не более 2( и то после анализа версии ворда у заказчика) -цель -корректное открытие в броузере -печать вордом с автоподгонкой ширины(прописываю сразу альбомную печать при необходимости) -при необходимости-открытие в екселе -формирую из всех своих систем word-access-excel-dbase-foxpro-1c на одном принципе(одинаковые стили, переменные, имена подпрограмм) .......разный только синтаксис несколько образцов выкладывала -печать запроса на выборку или перекрестного стандартной подпрограммой в подпрограмму передается текст запроса -конечно это гладкий запрос(без объединенных ячеек) ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2010, 00:53 |
|
Использование своих библиотек или как правильно построить масштабируемое приложение
|
|||
---|---|---|---|
#18+
AndDestr, авторСитуация с CodeDB меня вполне устраивает. Так что .... Будет желание напишите сюда побольше про CodeDB. Как Вы с ним работаете. Ну какой-нибудь примерчик:) ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2010, 04:20 |
|
Использование своих библиотек или как правильно построить масштабируемое приложение
|
|||
---|---|---|---|
#18+
ПЕНСИОНЕРКА, автор-использую минимум тегов(table,thead,tr,td,h1,h2 -короче стандарт без всяких нововведений) -объединение ячеек в разумных пределах(торг 12, счета фактуры, накладные) Интересно:) А можно небольшой примерчик того, как формируется HTM файл? С чего начинать? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2010, 04:23 |
|
Использование своих библиотек или как правильно построить масштабируемое приложение
|
|||
---|---|---|---|
#18+
Если в браузере нажмете вид-исходный код страницы, увидите пример htm файла Если запишете его бейсиком на диск, то будет пример формирования )) ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2010, 08:20 |
|
Использование своих библиотек или как правильно построить масштабируемое приложение
|
|||
---|---|---|---|
#18+
NeboПЕНСИОНЕРКА, автор-использую минимум тегов(table,thead,tr,td,h1,h2 -короче стандарт без всяких нововведений) -объединение ячеек в разумных пределах(торг 12, счета фактуры, накладные) Интересно:) А можно небольшой примерчик того, как формируется HTM файл? С чего начинать? хотя бы вот этот ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2010, 09:10 |
|
|
start [/forum/moderation_log.php?user_name=%D0%B0%D1%80%D1%822010]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
29ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
67ms |
get tp. blocked users: |
2ms |
others: | 9758ms |
total: | 9928ms |
0 / 0 |