|
![]() |
#1 |
Участник
|
Цитата:
Пользователю? Пользователь не наберет SQL запрос. Особенно если в конфигурации есть несколько тысяч объектов (сотни справочников, сотни документов, сотни регистров). Программисту? программисту нужен удобный механизм модификации запроса на основании галочек, которые выставил пользователь. А как раз такого механизма то и нет. Поэтому конечно же это не вопрос вкуса ![]() А вопрос - на кого ориентирована платформа. 1С предоставляет возможность ПРОГРАММИСТУ набрать запрос вручную. Но 1С не предоставляет пользователю никаких инструментов на пользовательском уровне (просто я кучу бла-бла-бла пропустил вокруг query). А программисту не предоставляет возможность удобно взаимодействовать с пользователем и удобно выполнять хотелки пользователей. Цитата:
Сообщение от Сисой
![]() По существу. В 1С есть Система компоновки данных (что-то типа Построитель отчета v.2). В ней можно описать базовый запрос, а затем программно или мануально добавлять/удалять любые уточняющие конструкции (отборы, группировки, сортировки и т.п.). В 8.2 практически все отчеты базируются на СКД.
В модулях проведения, в периодических заданиях и в остальных местах программист доступа к СКД не имеет. ![]() Цитата:
Временные таблицы в Аксапте тоже есть. А вот записи обычных таблиц, которые попали в кэш, возращаются из кэша значительно быстрее, нежели с SQL ![]() Тут я вынужден, либо снова бла-бла-бла теорию... Либо отослать к книжке Inside Dynamics. Цитата:
Речь идет о данных. Как один из глобальных следствий того, что 1С не кэширует данные - это почти полное отсутствие настроечных таблиц, таблиц с правилами разноски на счета и т.п. Просто постоянные запросы к этим таблицам приведут к ступору SQL. Убедится в этом можно отключив кэширование в таблицах Аксапты (у меня были такие клиенты, которые жаловались на то, что "Аксапта неправильно работает с SQL". А потом выяснилось, что какие-то "деятели" переключили во всех таблицах режим кэширования с EntireTable и Found на NotInTTS)... Цитата:
Пример того, как получать данные http://axapta.mazzy.ru/lib/inventsumdate/ Такие же примеры есть и для ввода данных http://axapta.mazzy.ru/lib/journaltrans_insert/ Просто у 1С нет выбора на каком уровне работать ![]() Цитата:
Сообщение от Сисой
![]() Ничего не сказано о том, что Аксапта застряла в своей идеологии на полпути - многие известные мне конструкторы учетных систем с поддержкой ООП умеют наследовать таблицы в составе контейнеров классов, описывающих объект предметной области. Да, признаю - DAX позволяет программисту строить куда более масштабируемые системы, нежели 1С:Предприятие (и все равно не на порядок, отличие по моим оценкам в 3-4 раза).
![]() В Аксапте хотя бы пытались приблизиться при помощи map... |
|
![]() |
#2 |
Участник
|
Цитата:
Вывод из СКД доступен и на сервере. И есть класс ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений. Можно настроить СКД и вывести с ее помощью результат в таблицу или дерево значений. |
|
![]() |
#3 |
Участник
|
Цитата:
И черт с ним, что в последних версиях Аксапты появились композитные Query, dataSet и специализированные Query для веба... Что ж, пусть приближается. Вручную править текст запроса - это редкостный отстой. Ура, товариащи! Можно только уточнить? объект называется "...В коллекцию значений", а ты говоришь в "таблицу". Давай уточним для Аксаптоведов, которые не знают разницы - ты говоришь о таблице значений? которая хранится на клиенте? (по Аксаптовски - recordSortedList, map, но не временной таблице) или ты говоришь о настоящей таблице? Последний раз редактировалось mazzy; 07.12.2009 в 14:02. Причина: Ура, товарищи! |
|
![]() |
#4 |
Участник
|
Цитата:
Сообщение от mazzy
![]() Можно только уточнить? объект называется "...В коллекцию значений", а ты говоришь в "таблицу". Давай уточним для Аксаптоведов, которые не знают разницы - ты говоришь о таблице значений? которая хранится на клиенте? (по Аксаптовски - recordSortedList, map, но не временной таблице) или ты говоришь о настоящей таблице?
Ее можно проиндексировать, выгрузить в temptable, но это не таблица СУБД. В 1С вообще нет аналогов SQL Update и SQL Insert. Это большой минус, но реализовать их в рамках объектной идеологии 1С:Предприятия (когда запись объекта на самом деле формирует транзакционную запись в десятки таблиц) невозможно. Единственное исключение - работа с регистрами 1С. Там поддерживается техника группового манипулирования записями по ключу (НаборЗаписей). |
|
![]() |
#5 |
Участник
|
Ок. Спасибо.
Тогда прямой аналог ListView, TreeView. Но эти объекты в Аксапте связаны с системными контролами и сильно утяжелены функциональностью для визуального отображения. Для понимания, в Аксапте лучше думать о RecordSortedList или о map... ...со свеми вытекающими последствиями для производительности, памяти и использования системного свопа. |
|
![]() |
#6 |
Участник
|
Цитата:
Я сейчас похож на Кота Базилио, а наш разговор на разговор Лисы Алисы с Котом Базилио на поле чудес... ![]() Лиса Алиса: 5 золотых на 2 не делится.Погоди, погоди. СКД - это построитель отчетов. Результат работы СКД - ячейки отчета(!) со свеми заголовками, промежуточными и окончательными итогами. Результат работы СКД практически невозможно использовать для работы с полученными записями... С результатами вообще непонятно что делать программисту. http://v8.1c.ru/overview/datacomposition.htm http://www.kb.mista.ru/article.php?id=668 http://coder1cv8.narod.ru/Publication6.html и т.д. А результат работы Query - записи таблиц. С этими записями программист может работать как угодно именно как с записями таблиц. Типичные примеры работы с Query Проблема с CustTrans Помогите с Query DAX 4.2 Фильтры, возникающие в диалоге автоматически Статистика по каждому коду номенклатуры. Как правильно построить Query? и т.д. поиском по ключевому слову Query или QueryRun на этом форуме. Итого: В 1С нет аналога Query. Запросы задаются текстовой строкой. Модифицировать запрос можно только путем изменения самого текста запроса. Простейший и типичнейший пример из 1С: Код: Процедура ДействияФормыЗагрузитьВнешниеДанные(Кнопка) ВнешниеДанные.Очистить(); Попытка КОМ=Новый COMОбъект("V81.COMConnector"); База=КОМ.Connect("Srvr=server;Ref=Base;Usr=user;Pwd=password"); ТекстЗапроса=" |ВЫБРАТЬ | Склад.Код КАК КодСклада, | СУММА(КоличествоОстаток) КАК ОстатокВнешняяБаза |ИЗ | РегистрНакопления.ТоварыНаСкладах.Остатки |СГРУППИРОВАТЬ ПО | Склад"; Запрос=База.NewObject("Запрос"); Запрос.Текст=ТекстЗапроса; Выборка=Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл НовСтр=ВнешниеДанные.Добавить(); ЗаполнитьЗначенияСвойств(НовСтр,Выборка); КонецЦикла; Исключение Сообщить(ОписаниеОшибки(),СтатусСообщения.Внимание); КонецПопытки; База=Неопределено; КонецПроцедуры |
|
![]() |
#7 |
Участник
|
Цитата:
Сообщение от mazzy
![]() СКД - это построитель отчетов. Результат работы СКД - ячейки отчета(!) со свеми заголовками, промежуточными и окончательными итогами. Результат работы СКД практически невозможно использовать для работы с полученными записями... С результатами вообще непонятно что делать программисту.
СКД - это система, позволяющая на входе описать а) Запросы б) Таблицы значений в) Внешние источники данных , применить к ним настройки компоновки, которые могут заранее формироваться визуально или программно и выгрузить полученный результат в макет отчета или структуру данных. Утверждение Результат работы СКД - ячейки отчета(!) - неверно. Это лишь один из вариантов. Точно так же и стандартный ПостроительОтчета может формировать отчет, а может использоваться как источник данных для последующей обработки. Пример кода: X++: = .(, .., ); (, .); //Создадим и инициализируем процессор компоновки = ; = .(, , , ); .(, , , ); ; = .(, .., , , ("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений")); //Создадим и инициализируем процессор компоновки = ; = .(, , , ); .(, , , ); ; ; // = ; = ; .(); .(); Последний раз редактировалось Сисой; 09.12.2009 в 13:18. |
|
|
За это сообщение автора поблагодарили: mazzy (2). |
![]() |
#8 |
Участник
|
Спасибо. А можно ссылки куда-нибудь, где можно посмотреть описания и/или доку других вариантов?
|
|
![]() |
#9 |
Участник
|
Надо смотреть документацию по 1С.
Приведенный выше пример я взял с партнерского форума. Вообще-то 1Сники редко пользуются подобным приемом (привычка парсить запросы вручную велика). И ПостроительОтчета и СКД в режиме получения таблицы-результата чаще всего юзаются из-за интерфейсных возможностей (mini-OLAP). Тут надо честно признаться, что скорость работы СКД все равно будет ниже, чем Query. Т.к. часть обработки результатов запроса выполняется на сервере приложений 1С. Впрочем, здесь есть и плюс. Например, в СКД можно применить к реквизиту выборки произвольную функцию на языке 1С. |
|
![]() |
#10 |
Участник
|
Спасибо!
Цитата:
А почему она не эквивалентна простой конструкции? Код: ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, ВнешниеНаборыДанных, ДанныеРасшифровки, Истина); А в новых конфах это где-нибудь используется? Может укажешь где, а я посмотрю? Цитата:
![]() Поэтому твой довод услышал. Но пока не сильно доверяю. Хотелось бы проверить и убедиться самостоятельно. И все-таки. Какие значения получаются в результирующей таблице/дереве значений? 1Сники говорят, что ячейки отчета. Можно где-нибудь на код обработки результата глянуть? Цитата:
А как часто в 1С результаты работы СКД обрабатываются на сервере приложений 1С? |
|
Теги |
1c, платформа, сравнение систем |
|
|