|
10.12.2009, 17:43 | #1 |
Участник
|
Цитата:
Сообщение от mazzy
ок. я понял, что вопрос задел за живое.
хм... помню, что Vadik давал ссылку на msdn. а вот здесь я говорил о 16 таблицах... еще нарыл SQL в Аксапте ищу дальше. |
|
10.12.2009, 17:27 | #2 |
Участник
|
Цитата:
Сообщение от mazzy
В 1С просто нет такой штуки. Разработчики платформы 1С об этом не думали.
Они вообще не думали, как SQL будет выполнять такие запросы. Они похоже не думали, что MS SQL прекращает всякую оптимизацию запроса, если в нем присутствует больше 8 таблиц. См. также разыменование. можно указать где это написано? а то кросспостинг на свои же сообщения (нет оптимизации запросов, когда таблиц больше 8) это конечно замечательно, но не убедительно. или ктото в аксапте сказал что так, и все как заводные повторяют? Последний раз редактировалось Vezunchik; 10.12.2009 в 17:30. |
|
13.12.2009, 21:25 | #3 |
Участник
|
Сегодня - день подчищенных хвостов.
Цитата:
Цитата:
Сообщение от Vezunchik
не мог не сдержаться, даже зарегистрировался изза этого, но
можно указать где это написано? а то кросспостинг на свои же сообщения (нет оптимизации запросов, когда таблиц больше 8) это конечно замечательно, но не убедительно. или ктото в аксапте сказал что так, и все как заводные повторяют? Потратил 4 часа на поиск. (Спасибо, прочитал и отложил для последующего чтения много чего интересного). Но подтверждения не нашел. Ни на этом форуме, ни в msdn. внес комментарий в исходное сообщение Единственное, что нашел более-менее похожее Цитата:
В каждой базе данных имеется встроенный набор интеллектуальных алгоритмов, которые выбирают наиболее оптимальный способ исполнения запроса. К примеру, для сложного запроса на основе объединения 8 разных таблиц оптимизатор может потратить целых 30 минут на выбор оптимального решения, прежде чем сервер начнет исполнение запроса. Для этих целей сервер применяет один из двух типов оптимизации: на основе стоимости затрат (cost-based) или на основе правил (rule-based). Эта статья целиком посвящена оптимизатору на основании издержек.
Но я согласен с тем, что это не значит, что "оптимизатор прекращает" Про оптимизацию запросов http://ru.wikipedia.org/wiki/%D0%9E%...A3%D0%91%D0%94 http://ru.wikipedia.org/wiki/%D0%A1%...A3%D0%91%D0%94 Но на самом деле, я не думаю, что моя ошибка сильно влияет на результаты в рамках темы данного топика. Если говорить про платформу 1С, то платформа 1С любит генерить сложные запросы типа таких http://www.sql.ru/forum/actualthread...d=90395#659099 Программист 1С сам того не желая, легко получит такие запросы. В то время, как в Аксапте нужно очень сильно постараться и поизвращаться, чтобы сделать такие запросы. В общем, по-моему исходный тезис не меняется. 1Cу еще работать и работать =========================== Заодно нашел дополнительные интересные ссылки для 1Сников от Гилева http://www.gilev.ru/1c/81/index/optimquery.htm а также Старайтесь избегать использования сложных TVF и табличных переменных Цитата:
Содержащие много операторов и возвращающие табличные значения функции (table-valued functions, TVF) не имеют статистики. Поэтому оптимизатор вынужден угадывать размер их результирующего набора. Аналогично, табличные переменные тоже не имеют статистики, и оптимизатор может только догадываться о количестве их элементов. Если в результате использования табличных переменных или табличных функций Вы получаете плохой план исполнения запроса, рассмотрите возможность замены их на обычные таблицы или на временную таблицу, используя их как временное хранилище для результатов, которыми оперируют такие TVF. Это позволит оптимизатору использовать более качественные оценки числа элементов.
|
|
14.12.2009, 12:29 | #4 |
Участник
|
хорошо, единственный нюанс, что там указывается оптимизация запроса СУБД...
а оптимизация запроса - подразумевает, что переписать запрос так, чтобы ускорить выполенине... ну да это лирика Цитата:
Сообщение от mazzy
Но на самом деле, я не думаю, что моя ошибка сильно влияет на результаты в рамках темы данного топика. Если говорить про платформу 1С, то платформа 1С любит генерить сложные запросы типа таких
http://www.sql.ru/forum/actualthread...d=90395#659099 Заодно нашел дополнительные интересные ссылки для 1Сников от Гилева http://www.gilev.ru/1c/81/index/optimquery.htm а также Старайтесь избегать использования сложных TVF и табличных переменных и т.д Последний раз редактировалось Vezunchik; 14.12.2009 в 12:34. |
|
07.04.2010, 11:35 | #5 |
Участник
|
Цитата:
Суть для тех, кто не знаком с 1С: предыстория: = в 1С нет объекта запрос, есть только текстовая строка (типа строки для работы с произвольными запросами Statement.executeQuery в Аксапте) = 1Сники привыкли составлять запрос, складывая строки (как в ax3.0 \Classes\SysDataImport\recIdSimpleSqlSelect) = в результате для генерации более-менее сложных запросов в 1С делаются многостраничные портянки кода, которые очень тяжело поддерживать. что предлагается в типовой конфигурации: = конструктором создавать непрерывный текст-болванку, который содержит "какие-нибудь" документы/объекты = а потом заменять подстроки в получившейся строке, чтобы получить правильное название документа/объекта = ...без статического синтаксического контроля. = ...без учета наличия кавычек-апострофов внутри строки запроса Цитата:
Такую методологию во всю пропагандируют приближённые к 1С. Скоро сама 1С в стандарт это запишет.
Технология! Угу, приблизилась... А как же ============== Привычный 1Сникам стиль создания запросов на примере \Classes\SysDataImport\recIdSimpleSqlSelect (так реально делается почти по всему коду во всех конфигурациях 1С. в ax3.0 всего 115 методов в которых используется класс Statement для работы с произвольным текстом запроса. В основном это системные классы) X++: void recIdSimpleSqlSelect( Connection con, Common common, SysDictTable dictTable, recId recId ) { str sql; int i, conLength; fieldId tmpFieldId; Statement stmt; SqlSystem sqlSystem = new SqlSystem(); ResultSet set; sql = 'SELECT '; conlength = conLen(recordRefs[dictTable.id()]); for (i=1; i<=conlength; i++) { tmpFieldId = conPeek(recordRefs[dictTable.id()], i); if (i>1) sql += ', '; sql += dictTable.fieldName(tmpFieldId,DbBackend::Sql,0,FieldNameGenerationMode::FieldList); } sql+=' FROM ' + dictTable.name(DbBackend::Sql); sql+=' WHERE '; if (dictTable.dataPrCompany()) sql += SysDictTable::dataareaIdNameSQL(FieldNameGenerationMode::WhereClause)+' = '+sqlSystem.sqlLiteral(curExt())+' AND '; sql += SysDictTable::recIdNameSQL()+' = '+int2str(recId); try { stmt = con.createStatement(); set = stmt.executeQuery(sql); ... (даже не могу найти аналогов в Аксапте) X++: sqlString = strfmt(@"SELECT TABLE_NAME FROM SomeRealObjectName WHERE ...."); sqlString = strReplace('SomeRealObjectName','RealObjectName'); X++: sqlString = strfmt(@"SELECT TABLE_NAME FROM %1 WHERE ..."); sqlSystem.sqlLiteral(strfmt('%1',RealObjectName), false, true)); |
|
|
За это сообщение автора поблагодарили: Сисой (4). |
30.11.2009, 14:21 | #6 |
Сам.AX
|
Я, если честно, веб доступ в живую (в AX) видел только в пятерке (может в четверке тоже есть? я не заню) вот на сайте 1с прочитал, что теперь в 8.2 есть полноценный вэб клиент.
http://v8.1c.ru/overview/Term_000000671.htm
__________________
Возьми свет! |
|
30.11.2009, 14:24 | #7 |
Участник
|
Цитата:
Сообщение от Alexx7
Я, если честно, веб доступ в живую (в AX) видел только в пятерке (может в четверке тоже есть? я не заню) вот на сайте 1с прочитал, что теперь в 8.2 есть полноценный вэб клиент.
http://v8.1c.ru/overview/Term_000000671.htm "Полноценный" вэб-клиент - это крутой термин. Этот термин совершенно однозначно показывает, что платформа 1С приблизилась к Аксапте. Ведь ни у одной версии Аксапты не было вэб-клиента, который разработчики называли бы "полноценным" |
|
30.11.2009, 15:37 | #8 |
Участник
|
если вариантов нет, то я приведу.
В новой платформе 8.2 ввели механизм отрисовки форм, похожий на Аксаптовский MorphX. Вот как в Аксапте http://axapta.mazzy.ru/screenshots/common/example.html А вот как в 1С 8.2 http://v8.1c.ru/overview/Term_000000728.htm#1 ниже скриншоты формы с настройками внешнего вида пользовательской формы. Угадайте, где какая система Одно отличие - в Аксапте эта возможность платформы существует еще с первых версий. А разработчики 1С наплевали на свои "привязки", которые были в 8.1, и в 8.2 полностью сменили режим отрисовки форм. В результате конфигурации нужно переписывать А так - согласен. Приблизились. С чем и поздравляю всех 1Сников. |
|
01.12.2009, 12:31 | #9 |
MCT
|
Интересно услышать от 1С о таких вещах, как
1 Сохранение операций/проводок В УПП В УТ, например, при удалении документа, возможно ли собрать данные? 2 Сопоставление отфактурированных документов и не отфактурированных с оплатами. 3 Интернет клиент 1С, какую базу использует (свою или единую с УПП)? 4 Возможность обновления версии УПП, УТ после модификаций "спецов". 5 Возможность разработки и отладки без перехода из режима Предприятия в Конфигуратор 6 Интеграция учеток из active detictory и виндовая аутификация 7 возможность переносить модификации между конфигурациями
__________________
Axapta book for developer |
|
01.12.2009, 12:49 | #10 |
Участник
|
Цитата:
Если же документ (регистратор в терминах 1С) удален из таблицы, то единственное, что остается в таблице операций - его RecId. Цитата:
Если включена детализация по договору в разрезе счетов/заказов, то и по ним. Но в последних версиях типовых стали вводить отдельные табличные части документов для произвольного сопоставления (N<->M). Единую. Всегда возможно, трудоемкость и степень автоматизации зависит от характера модификаций. Цитата:
Допустимы как парольная, так и виндовая аутификация. Пообъектно копированием или объединением с выгрузкой из другой конфигурации. |
|
02.12.2009, 15:35 | #11 |
Участник
|
А какие технологии работы с внешними приложениями доступны в платформе 1С (помимо внешних компонент)?
1. Есть ли возможность работы с COM? 2. Есть ли возможность работы с NET? |
|
02.12.2009, 15:57 | #12 |
Участник
|
Цитата:
2. Нет. + ActiveX. Следует понимать, что 1С целенаправленно внедряет в свою платформу кроссплатформенность. Ее AOS работает в т.ч. и под Linux, поэтому делать упор на Windows-технологии не всегда рационально. Кстати, вот и преимущество 1С над Axapta. Начиная с версии 8.2, все компоненты 1С работают в Linux (СУБД Postgres, DB2, Oracle + сервер приложений + Apache + FireFox). |
|
|
За это сообщение автора поблагодарили: Raven Melancholic (2). |
02.12.2009, 16:11 | #13 |
Участник
|
Цитата:
А клиент 1С? |
|
02.12.2009, 16:17 | #14 |
Участник
|
Я имел в виду работу с управляемым интерфейсом через веб-браузер.
В этом случае действительно получается Linux-трехзвенка. (Точнее, четырехзвенка - добавляется веб-сервер). А толстый и тонкий клиенты по-прежнему фунциклируют только в Win. |
|
02.12.2009, 16:47 | #15 |
Участник
|
И что-то мне подсказывает, что в этом плане ничего не изменится очень долго.
Писать кросс-платформенный клиент - это безумие, вряд ли 1С пойдет на это. А веб еще не дорос для создания интерфейсов сопоставимых по удобству с оффлановыми клиентами. Таким образом, отказываясь от поддержки новых технологий MS, в частности .NET, 1С отрезает кастомизаторам доступ к огромному пласту уже существующих компонент, которые могли бы расширить возможности win-клиента 1С. А поддержку Linux, ИМХО, они сделали в ключе - "а мы вот еще и это умеем!". Очень по 1С-овски. Интересно кстати посмотреть, как на АОС-е под Linux работает COM-коннектор. Если не ошибаюсь, в 1С есть встроенные механизмы обмена между разными конфами, которые используют COMConnector. Под Linux-ом все эти механизмы работают корректно? |
|
02.12.2009, 17:06 | #16 |
Участник
|
в принципе, есть XPCOM на котором мозилла пострена, но, там, например, урлы вместо гуидов
|
|
09.12.2009, 17:12 | #17 |
Участник
|
Думаю, почти всегда.
Кратко работу СКД можно представить так. 1 шаг: Компоновщик макета считывает настройки СКД и готовит необходимые запросы к исполнению. 2 шаг: Процессор компоновки исполняет необходимые запросы и получает результат. Он же заполняет при необходимости массив расшифровок для drill-down. На этом этапе идет тесное взаимодействие с сервером БД. Поскольку в СКД можно определять несколько разных запросов (а их результаты вязать в СКД), а также использовать вложенные СКД (типа левого соединения), ясно, что итоговый результат все равно обрабатывается на сервере приложений. 3 шаг: Процессор вывода формирует согласно макетам и настройкам оформления табличный документ или выгружает значения в коллекцию значений. Любопытно, что 1С реализовала для СКД избыточную функциональность управления. Каждый шаг настраивается или визуально, или программно или при помощи пакета XML (т.е. можно не только управлять объектом при помощи его свойств и методов, но и парсить XML-файлы, а затем заново инициализировать настройки). |
|
10.12.2009, 15:45 | #18 |
Участник
|
Коллеги, разрешите тоже поделюсь впечатлениями. Я уже 3 года программирую в Аксапте до этого 6 лет программировал в 1С из них 3 года работал с 1С 8.0.
Плюсы 1С на мой взгляд. 1) Очень удобный табличный документ для вывода отчетов и печатных форм. Он гораздо удобнее аналогичного ReportDesign в Аксапте. 2) При проектировании прикладных объектов в 1С (справочники, документы и т.д.) все объекты (формы, таблицы, макеты) собраны в одном месте. Т.е. нет необходимости собирать формы,таблицы, классы разным веткам, если понадобилось сделать модификацию. 3) 1С гораздо лучше задокументирована, чем аксапта. Сейчас этот недостаток аксапты уже не чувствуется, т.к. то что используется каждый день уже разобрано, но когда только учился, было очень тяжело из-за недостатка информации. Теперь о плюсах аксапты 1) Нет, проблем с тем, что нужно выгнать пользователей, чтобы внести изменения. Да и вообще удобнее, когда в одном окне можно и кодировать и смотреть результаты кодирования. 2) Удобно, что программа сама размещает элементы на форме. 3) Больше возможностей для оптимизации и улучшения производительности алгоритмов. |
|
|
За это сообщение автора поблагодарили: ibc (1). |
10.12.2009, 17:41 | #19 |
Участник
|
Цитата:
Сообщение от PSerg
Теперь о плюсах аксапты
1) Нет, проблем с тем, что нужно выгнать пользователей, чтобы внести изменения. Да и вообще удобнее, когда в одном окне можно и кодировать и смотреть результаты кодирования. 2) Удобно, что программа сама размещает элементы на форме. 3) Больше возможностей для оптимизации и улучшения производительности алгоритмов. 2. в 8.2 это появилось. 3. и какие же это большие возможности оптимизации и улучшения производительности алгоритмов? не устраивает работа стандартного 1с интерпретатора, используй прямые запросы к скулю.. |
|
11.12.2009, 08:06 | #20 |
Участник
|
Цитата:
Сообщение от Vezunchik
1. палка всегда с двумя концами. видел я обновления в "тестовой базе".. которая потом оказывалась продуктивом.. это естественно не минус, но одних плюсов из этого быть не может.
2. в 8.2 это появилось. 3. и какие же это большие возможности оптимизации и улучшения производительности алгоритмов? не устраивает работа стандартного 1с интерпретатора, используй прямые запросы к скулю.. 3. Был опыт построения отчетов в 1С с прямыми sql запросами. Редкостная садо-маза. На счет возможностей по оптимизиции объясню на примере. Допустим в базе 1С стоит задача обновить в справочнике "Номенклатура" поле "Наименование". Для простоты его нужно изменить на слово "Hello". Нам нужно будет написать примерно такой код: ВыборкаНоменклатура = СправочникиМенеджер.Номенклатура.Выбрать(); Пока ВыборкаНоменклатура.Следующий() Цикл ОбъектНоменклатура = ВыборкаНоменклатура.ПолучитьОбъект(); ОбъектНоменклатура.Наименование = "Hello"; ОбъектНоменклатура.Записать(); КонецЦикла; Причем других вариантов нет. (Ну разве что можно поизощраться и не использовать Выборку) В аксапте эта задача может быть решена следующим образом X++: ttsbegin; while select forupdate InventTable { InventTable.ItemName = "Hello"; InventTable.update(); } ttscommit; Но в аксапте есть возможности по его оптимизации Я могу написать еще так X++: ttsbegin; while select forupdate InventTable { InventTable.ItemName = "Hello"; InventTable.doupdate(); } ttscommit; А еще я могу написать так X++: update_recordset InvetnTable setting ItemName = "Hello"; Последний раз редактировалось PSerg; 11.12.2009 в 08:14. |
|
Теги |
1c, платформа, сравнение систем |
|
|