Переключение на Главную Страницу Страницы: 1 ... 12 13 [14] 15 16 ... 42 ОтправитьПечать
Очень популярная тема (более 25 ответов) Консоль и расширения запросов 1С++ v2.04 (число прочтений - 348769 )
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Консоль и расширения запросов 1С++
Ответ #195 - 26. Сентября 2008 :: 13:51
Печать  
1. В 8-ку встроен свой движок запросов, на котором сидит конструктор. А здесь разбор запроса означает написание своего лексера метаязыка 1С++.

2. Идентификаторы параметров выделить можно. Типы параметров - см. п. 1.

3. Для конфигуратора есть qryMaker. Там, правда, нет подстановки |, но лишь потому, что уже есть минимум два скрипта OpenConf, которые умеют это делать. Подстановку комментариев, вероятно, сделаю.

4. Подсветка планировалась, но.. мне она не нужна и как задача не интересна.

5, 6. Возможно.

7. В последних релизах 8-ки в конструкторе есть поддержка временных таблиц. Реализовать такую же не сложно и я однажды даже решился. Открыл визуал студию, посидел, подумал и.. не смог вспомнить, когда бы такой функционал был нужен мне. Извини.

8. Да.

9. Константы есть в построителе выражений конструктора. Остальное - не скоро, если вообще..

10. By design. Когда ты изменяешь текст запроса, результат перестаёт ему соответствовать.

11. С запятыми - так удобнее комментировать отдельные строки. Не нужно следить, осталась ли запятая после последнего поля, AND после последнего условия.. (nolock) конструктор умеет вставлять.
  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
Shtyr
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 17
Зарегистрирован: 25. Сентября 2008
Re: Консоль и расширения запросов 1С++
Ответ #196 - 26. Сентября 2008 :: 14:50
Печать  
Жаль, видимо у нас несколько разные области применения данной консоли - мне она больше нужна именно для отладки, чтобы конструктором или копипастом из готового запроса задать основу, а потом основу переделывать под новый запрос, который будет сразу же тестироваться на предмет того, правильно ли он написан. При этом неизбежно возникает необходимость постоянно что-то менять в запросе, доделывать, подправлять, исправлять неточности и т.д.... в общем я чаще ориентируюсь на ручной ввод, чем на констркуторы.. Но здесь все равно это крайне полезная и удобная вещь, по сравнению с двумя альтернативами - писать в модуле запрос, сохранять, перезапускать, выгружать резальтаты в ТЗ для показа временных результатов и анализа их корректности.

По поводу пожеланий =)
1,2 - понятно, я это примерно так и представлял себе, что это сложно... Просто получить список параметров по именам конечно упростит ручной ввод, но не намного, т.к. параметры добавляются редко... да и конструктором можно в принципе пользоваться... мне он может быть нужен, чтобы не лезть в конфигуратор посмотреть как называется тот или иной реквизит, а посмотреть это в конструкторе... Кстати а может можно в конструктор тогда добавить кнопку сгенерировать запрос? Он покажет запрос прямо в конструкторе, я оттуда скопирую интересующий меня кусок (ну например не помню я по памяти, как извлечь значение константы), и вставлю ручками в свой основной запрос..

3. ну это в принципе и не так часто нужно... обычно на начальной стадии отлаживания при копировании текста из модуля и в конце отладки при обратном копировании... =) в общем у меня для этих целей 8-ка запущена...

7. Временные таблицы интересны чтобы задавать фильтр по списку значений... и пример такой ситуации: нужно отобрать список договоров контрагентов например по каким то сложным условиям (а всего их например 20000 в базе)... поместить этот список во временную таблицу, а затем в основном запросе накладывать на него условия... Вложенный запрос тут будет читаемость запроса и увеличивать время каждого тестового прогона. Но тут я согласен это довольно геморрно реализовывать и еще думать как это сделать в плане интерфейса удобнее и прочее...

9. про константы - да увидел, спасибо... и правда в обычной выборке они скорее не очень нужны, только если в выражениях полей или фильтрах. Но вот попутно возник вопрос, а перечисления как то вообще метапарсер 1с++ и конструктор запросов могут обрабатывать? Например добавить возможность выбора перечислений в тот же констурктор выражений... Хотя я понимаю, что если в классе ODBCRecordsSet нету такой возможности, то и тут можно и не ждать....

10. А это если честно совсем не понял. Точнее я понимаю, что это было так изначально задумано, но я могу согласиться с этим, если есть какая то связь между самим текстом запроса и данными в таблице. Но представить себе что это за связь не могу - наверняка ведь данные получены один раз и потом хранятся в памяти или еще где то... Даже если при этом текст запроса как то используется, наверняка ведь его изначальная копия хранится где то - ну по крайней мере если запрос сделан конструктором, то конструктор его помнит и всегда может вернуть назад, какие бы я изменения не делал. Ну просто например сделал я запрос, выполнил его, смотрю он мне выдает дату договора 01.01.1900 в одной из 10 000 строк - это явно значит, что дата договора не заполнена и мне надо не забыть поставить в запрос условие на это (case) и как то обрабатывать. Если я эту строчку сейчас пропущу и не буду сразу же редактировать текст запроса, то потом велик шанс что я забуду об этом ) Особенно если потом увижу еще ошибку какую-нибудь. Ну или например я часто делаю такую вещь: включаю в запрос некоторые поля, чтобы посмотреть что в них лежит. Запрос выполнился, я увидел что там нечто левое и неинтересное мне, и чтобы в будущем при следующем выполнении запроса не загружать таблицу лишними данными (когда и так не хватает места по ширине, чтобы увидеть все данные строки) я сразу же удаляю это поле в тексте запроса или временно комментирую ее. Лично мне кажется что в этом случае каждый раз сбрасывать данные из таблицы не очень удачно, особенно если запрос большой и выполняется долго. Т.е. именно хочется посмотреть результат, то что сразу увижу исправить, продолжить смотреть результат, и когда все меня устраивает запускать запрос дальше.

11. Ну это ладно ) это совсем мелочи... я знаю что так удобнее комментировать, но к сожалению я привык уже писать запросы по другому и запятые мне сразу бросаются в глаза...

12. А по поводу переместить список параметров куда-нибудь? (писал в пред. сообщение в P.S.)

и еще пока тестировал запросики тут, возникло еще кое-чего )
13. а насколько реально управлять этой таблицей, которая как я понял берется из OWC11? интересует например, можно ли помнить ширину каждой колонки (или например, только если они менялись вручную), а то я сокращаю некоторые слишком длинные колонки, чтобы поместилось больше данных, а они потом обратно возвращаются при следующем выполнении запроса. И пусть в следующий раз в этой колонке может быть уже другие данные (в смысле если я поменяю порядок полей) - это бывает редко и проще вручную уж подправить ширину колонок...

14. то же про колонки - может можно хотя бы что-то типа галочек, типа выводить эту колонку или нет. и еще хотелось бы фиксировать первую строку с названиями колонок...

15. а номера строк запроса в строке состояния - сложно? при ошибках выдается номер строки, и ищи ее...
  
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Консоль и расширения запросов 1С++
Ответ #197 - 26. Сентября 2008 :: 15:34
Печать  
9. Перечисления добавлю.

12. Не хочу.  Круглые глаза

13. Сейчас ширина подстраивается под данные. Дело вкуса, по сути..

14. Я не знаю, как зафиксировать строку в run-time. В design-time могу, но эта настройка сбивается при первой же очистке таблицы.

15. ok.
  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Консоль и расширения запросов 1С++
Ответ #198 - 26. Сентября 2008 :: 20:56
Печать  
Shtyr
Потестируй на предмет нормальной работы формы после очистки переменной.

Файл в #0.
« Последняя редакция: 02. Октября 2008 :: 19:47 - berezdetsky »  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
Shtyr
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 17
Зарегистрирован: 25. Сентября 2008
Re: Консоль и расширения запросов 1С++
Ответ #199 - 29. Сентября 2008 :: 07:49
Печать  
Вроде все работает!
Даже если напрямую написать Консоль = 0 после открытия формы консоли, все равно работает и без глюков =)
Спасибо!
  
Наверх
 
IP записан
 
Shtyr
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 17
Зарегистрирован: 25. Сентября 2008
Re: Консоль и расширения запросов 1С++
Ответ #200 - 29. Сентября 2008 :: 10:43
Печать  
оо еще и номер строки появился в строке состояния ) спасибо большое... только вот как оказывается он не очень поможет - если ошибку выдает метапарсер, он не указывает номер строки... если SQL-сервер, он указывает, но номер строки не очень совпадает с реальным видимо из-за того, что реальный SQL-запрос после метапарсера становится больше
  
Наверх
 
IP записан
 
Shtyr
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 17
Зарегистрирован: 25. Сентября 2008
Re: Консоль и расширения запросов 1С++
Ответ #201 - 01. Октября 2008 :: 10:16
Печать  
Сегодня заметил еще несколько вещей:

1. консоль запросов начинает как-то непонятно глючить, при использовании в запросе временных таблиц:

когда я пишу запрос вида
Код
Выбрать все
SELECT <список полей>
INTO #temp_table
FROM <список таблиц> 

то случается следующее: синтаксический контроль проходит успешно. При попытке первого выполнения запроса выдается ошибка:
Код
Выбрать все
qryConsole : Экспорт в Microsoft Office Excel 


При следующих попытках выполнения с любым именем временной таблицы выдается ошибка:
Код
Выбрать все
qryConsole : State 42000, native 156, message [Microsoft][ODBC SQL Server Driver][SQL Server]Incorrect syntax near the keyword 'INTO'. 


Если после этого всего убрать конструкцию INTO и выполнить запрос, то "глюк" сбрасывается в начало, и если потом попробовать использовать запрос с конструкцией INTO, выдается опять та же самая первая ошибка про экспорт в Excel.
По поводу временных таблиц - они точно работают, у меня есть своя небольшая обработка типа консоли запросов, в которой нет ничего кроме большого поля ввода текста и таблицы значений в результатами. В этой обработке запрос с конструкцией INTO выполняется, но в конце выдается ошибка, что поле агрегатного объекта не обнаружено, и это правильно.
Если выполнять такой запрос например вот таким кодом:
Код
Выбрать все
Результат = Запрос.ВыполнитьИнструкцию("SELECT * INTO #temp_table FROM table") 

, то тип результата будет не ТаблицаЗначений.
Но в моей обработке запрос все равно почему-то выполняется, т.к. последующий запрос
Код
Выбрать все
SELECT * FROM #temp_table 


успешно выполняется и в моей обработке, и в консоли запросов. А если первый запрос с выгрузкой во временную таблицу выполнять в консоли, то потом в ней выборка из временной таблицы не работает, т.е. временная таблица не создается, т.к. возможно SQL-запрос вообще не выполнился.

2. Случайно открыл в одной конфигурации две формы консоли запросов. Если закрыть вторую, то первая начинает глючить примерно так же, как и было до этого (то что в этом топике на последних страницах обсуждалось). В принципе это не глюк даже и никогда не будет он встречаться, т.к. это неправильно открывать сразу две формы, у меня это чисто случайно вышло.

3. не глюк, но тоже интересно: когда начинаем редактировать запрос, таблица результатов очищается. Но если редактировать не этот же запрос, а какой нибудь другой, то таблица не очищается =) Значит можно это обойти как-нибудь )
  
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Консоль и расширения запросов 1С++
Ответ #202 - 01. Октября 2008 :: 11:21
Печать  
1. Ввиду особенностей реализации, единственная разрешённая в консоли инструкция - SELECT FROM (без INTO).

2. Исправлю.

3. Так и задумано.
  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
Shtyr
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 17
Зарегистрирован: 25. Сентября 2008
Re: Консоль и расширения запросов 1С++
Ответ #203 - 01. Октября 2008 :: 12:16
Печать  
berezdetsky писал(а) 01. Октября 2008 :: 11:21:
1. Ввиду особенностей реализации, единственная разрешённая в консоли инструкция - SELECT FROM (без INTO).

Печально... если хочу протестировать работу со временными таблицами приходится в своей обработке выгружать данные во временную таблицу, а тут уже смотреть результаты по выборке данных из этой таблицы (в консоли результаты смотреть намного удобнее)

И еще из замеченного:
1. При попытке добавить вот такое поле выборки в запросе выдается сообщение о синтаксической ошибке в строке номер такой-то
Код
Выбрать все
CASE $ПоследнееЗначение.ГрафикиЛизинговыхПлатежей.Баланс(Графики.ID, '20081001') --:ДатаОтчета)
   WHEN 1 THEN 1
   ELSE 0
END НаБалансеЛизингополучателя, 


т.е. суть в том, что :ДатаОтчета) - это временно закомментированный оставшийся кусок от параметра. Если выполнить такой запрос напрямую через ODBCRecordSet, все нормально, комментарий игнорируется.

2. Я не всегда хорошо помню язык SQL и вот экспериментировал, где правильнее ставить условие при соединении таблиц. Разницы где ставить условие я не заметил, но суть не в том. Если условия убрать из обоих мест, то естественно в выборке становится больше строк, но при этом как-то непонятно сбивается сортировка результатов. Т.е. если закомментить оба условия, то сортируется не понятно как... как будто в другом порядке, а не как задано в ORDER BY. Эти два условия выделены -- в начале строки:
Код
Выбрать все
INNER JOIN
    (
     SELECT
        Граф.ID График,
        MIN(Табл.$Справочник.ТаблицыЛизинговыхПлатежей.ДатаПлатежа) МинимальнаяДата,
        MAX(Табл.$Справочник.ТаблицыЛизинговыхПлатежей.ДатаПлатежа) МаксимальнаяДата,
        Табл.$Справочник.ТаблицыЛизинговыхПлатежей.ДатаРедакции ДатаРедакции
     FROM $Справочник.ГрафикиЛизинговыхПлатежей Граф (NOLOCK)
        INNER JOIN $Справочник.ТаблицыЛизинговыхПлатежей Табл (NOLOCK) ON Табл.PARENTEXT = Граф.ID
     --WHERE
     --   Табл.$Справочник.ТаблицыЛизинговыхПлатежей.ДатаРедакции = (SELECT MAX(t.$Справочник.ТаблицыЛизинговыхПлатежей.ДатаРедакции) FROM $Справочник.ТаблицыЛизинговыхПлатежей t (NOLOCK) WHERE t.PARENTEXT = Граф.ID)
     GROUP BY Граф.ID, Табл.$Справочник.ТаблицыЛизинговыхПлатежей.ДатаРедакции
    ) ПараметрыГрафиков ON ПараметрыГрафиков.График = Графики.ID
                       --AND ПараметрыГрафиков.ДатаРедакции = (SELECT MAX(t.$Справочник.ТаблицыЛизинговыхПлатежей.ДатаРедакции) FROM $Справочник.ТаблицыЛизинговыхПлатежей t (NOLOCK) WHERE t.PARENTEXT = Графики.ID)
  
....

ORDER BY Контрагент, Договор, График 


Опять же, если выполнять напрямую, то запрос с таким куском (т.е. оба условия в двух местах убраны), сортировка стоит правильная, т.е. по Контрагенту в первую очередь.
  
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Консоль и расширения запросов 1С++
Ответ #204 - 01. Октября 2008 :: 13:04
Печать  
1. Посмотрю.

2. Начну издалека.  Улыбка
Компоненты OWC работают через ADO. Это означает, что в монопольном режиме у консоли нет непосредственного доступа к базе. Поэтому, для поддержки монопольного режима, инструкция SELECT, выполняемая в консоли, плавно превращается в SELECT INTO ## и вываливает результат в глобальную временную таблицу. Затем, OWC получает данные средствами ADO уже из временной таблицы - без предложения ORDER BY. Иллюстрации к написанному здесь можно увидеть, включив отладку.

О первом этапе в BOL сказано несколько мутно: Цитата:
Использование предложения ORDER BY с инструкцией SELECT...INTO для вставки строк из другого источника, не гарантирует вставку строк в указанном порядке.

Со вторым этапом ещё проще - в отсутствие предложения ORDER BY порядок возвращаемых записей не определён.

Возможно, в твоём случае влияет ещё какой-то нюанс, но это я смогу определить, только получив повторяемый тест.
  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Консоль и расширения запросов 1С++
Ответ #205 - 02. Октября 2008 :: 19:45
Печать  
Добавлено сохранение положения сплиттеров.
Изменено:
Добавлена поддержка перечислений для 1С++ v2.5+

Исправлены какие-то ошибки.
Всё прочее обещанное выйдет в v2.0, когда будет готово.

Shtyr писал(а) 01. Октября 2008 :: 12:16:
1. При попытке добавить вот такое поле выборки в запросе выдается сообщение о синтаксической ошибке в строке номер такой-то
Код
Выбрать все
CASE $ПоследнееЗначение.ГрафикиЛизинговыхПлатежей.Баланс(Графики.ID, '20081001') --:ДатаОтчета)
   WHEN 1 THEN 1
   ELSE 0
END НаБалансеЛизингополучателя, 


Синтаксис-контроль возбуждается не на комментарий, а на незакрытую скобку. Отложу пока.
« Последняя редакция: 03. Октября 2008 :: 07:35 - berezdetsky »  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Консоль и расширения запросов 1С++
Ответ #206 - 04. Октября 2008 :: 19:09
Печать  
1cvirus писал(а) 04. Октября 2008 :: 07:09:
нет ли случайно в комплекте примера какого-нибудь куба к типовой торговле? а то чёто с кубами у меня не очень получается

Пример для типовой ТиС редакции 9.2 для SQL.
Использует 1С++ и FormEx.
« Последняя редакция: 17. Октября 2008 :: 21:20 - berezdetsky »  

Sample_001.zip ( 3 KB | Загрузки )

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
1cvirus
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 89
Зарегистрирован: 24. Мая 2006
Re: Консоль и расширения запросов 1С++
Ответ #207 - 08. Октября 2008 :: 08:36
Печать  
berezdetsky писал(а) 04. Октября 2008 :: 19:09:
1cvirus писал(а) 04. Октября 2008 :: 07:09:
нет ли случайно в комплекте примера какого-нибудь куба к типовой торговле? а то чёто с кубами у меня не очень получается

Пример для типовой ТиС редакции 9.2 для SQL.
Использует 1С++ и FormEx.

спасибо большое - покупаю, буду дальше разбираться
  
Наверх
 
IP записан
 
1cvirus
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 89
Зарегистрирован: 24. Мая 2006
Re: Консоль и расширения запросов 1С++
Ответ #208 - 10. Октября 2008 :: 09:12
Печать  
C:\pict.JPG
появилась ошибка на коммерческой
исправил этого покупателя - вылезло на другом - с одинаковыми наименованиями
на qryConsole_003 работает
  

pict.JPG ( 10 KB | Загрузки )
pict.JPG
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Консоль и расширения запросов 1С++
Ответ #209 - 10. Октября 2008 :: 09:34
Печать  
Как это воспроизвести?
  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
Переключение на Главную Страницу Страницы: 1 ... 12 13 [14] 15 16 ... 42
ОтправитьПечать