Класс "ПрямойЗапрос"
Разработка - Инструментарий разработчика
Файлы
ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.
Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний
Оформите подписку на компанию для решения рабочих задач
Оформить подписку и скачать решение со скидкойВы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».
- 0% комиссии — оплата напрямую исполнителю;
- Исполнители любого масштаба — от отдельных специалистов до команд под проект;
- Прямой обмен контактами между заказчиком и исполнителем;
- Безопасная сделка — при необходимости;
- Рейтинги, кейсы и прозрачная система откликов.
В общем хочу отдать на суд вольным зрителям набор КОП "ПрямойЗапрос" с документацией к нему.
Что он может:
- выполнение запроса на языке подобном 1Cv8
- выполнение запроса на любом формате БД (DBF - SQLite, SQL - ODBCRecordset)
- наличие виртуальных таблиц
- выполнение параметризированных запросов
Что он не умеет:
- не отличает возможные реквизиты объектов метаданных совпадающих с предопределенными реквизитами этих объектов (например: Код, Наименование в справочнике и т.п.)
К классу приложена подробная документация.
Выражаю свою благодарность товарищам:
- тов. berezdetsky за класс AccountsRecordset
- тов. Steban шаблон параметра - это круто
- тов. JohnyDeath за пример ВТ ПодчиненныеДокументы и прочее
- тов. Orefkov за 1sqlite
- тов. Dmitro за практические советы
- всем разработчикам 1С++ за 1С++
- ну и всем остальным кто словом и делом помогал.
Пример использования:
ТекстЗапроса = "ВЫБРАТЬ
| Рег.ТекущийДокумент КАК [Документ $Документ]
| ,Рег.ВидДокумента КАК [Документ_вид $ВидДокумента]
| ,Рег.Склад КАК [Склад $Справочник.Склады]
| ,Рег.Номенклатура КАК [Номенклатура $Справочник.Номенклатура]
| ,Рег.КоличествоНачальныйОстаток КАК ОстатокНач
| ,Рег.КоличествоОборот КАК Оборот
| ,Рег.КоличествоПриход КАК Приход
| ,Рег.КоличествоРасход КАК Расход
| ,Рег.КоличествоКонечныйОстаток КАК ОстатокКон
|ИЗ $РегистрОстаткиОбороты.ОстаткиТМЦ(:НачПериода
| ,:КонПериода
| ,Документ
| ,ДвиженияИГраницыПериода
| ,
| ,(Склад,Номенклатура)
| ,(Количество)) КАК Рег";
Запрос = СоздатьОбъект("ПрямойЗапрос");
Запрос.Текст = ТекстЗапроса;
Запрос.УстановитьТекстовыйПараметр("НачПериода",НачГода(РабочаяДата()));
Запрос.УстановитьТекстовыйПараметр("КонПериода",РабочаяДата());
Запрос.РежимОтладки = 1;
ИТЗРезультат = Запрос.Выполнить();
ИТЗ.ВыбратьСтроку();
Официальная версия: 1.8.3 от 30.12.11 г.
Более полная информация на форуме 1С++.
P.S. данная разработка распространяется бесплатно как для частного, так и для коммерческого использования. Поддержка осуществляется при наличии свободного времени. Возможно сотрудничество на предмет внедрения данной разработки в конкретные конфигурации.
Вступайте в нашу телеграмм-группу Инфостарт
См. также
Инструментарий разработчика Системный администратор Разработчик 1С:Предприятие 7.7 1C77 Абонемент ($m)
Консоль запросов к базе SQL, не требующая внешних компонент
10 стартмани
29.04.2015 25468 60 Gvozdod 8
Инструментарий разработчика Системный администратор Разработчик 1С:Предприятие 7.7 Оперативный учет 7.7 Бухгалтерский учет 7.7 Расчет 7.7 1C77 Россия Бесплатно (free)
Обновленная сборка OpenConf Light Pack.
27.04.2014 63527 501 unichkin 51
Инструментарий разработчика Системный администратор Разработчик 1С:Предприятие 7.7 1С:Предприятие 8 Абонемент ($m)
Очередная редакция альтернативного стартера, являющегося продолжением StartManager 1.3. Спасибо всем, кто присылал свои замечания и пожелания, и тем, кто перечислял финансы на поддержку проекта. С учетом накопленного опыта, стартер был достаточно сильно переработан в плане архитектуры. В основном сделан упор на масштабируемость, для способности программы быстро адаптироваться к расширению предъявляемых требований (т.к. довольно часто просят добавить ту или иную хотелку). Было пересмотрено внешнее оформление, переработан существующий и добавлен новый функционал. В общем можно сказать, что стартер эволюционировал, по сравнению с предыдущей редакцией. Однако пока не всё реализовано, что планировалось, поэтому еще есть куда развиваться в плане функциональности.
1 стартмани
23.04.2014 193749 1923 Alexoniq 1677
Инструментарий разработчика Разработчик 1С:Предприятие 7.7 1С:Предприятие 8 Россия Абонемент ($m)
Согласитесь, что окно стандартное сообщений в 1С иногда приносит больше неудобств, чем пользы. И тем более разные "Предупредить"... Что с этим окном только не делают! Его отцепают от формы, делают маленьким, умудряются спрятать за границы экрана. А потом звонят программистам с претензией, что документ почему-то не проводится, отя ничего и не пишет. У вас такого не было? А вот у нас было и не раз )))
1 стартмани
04.09.2013 36743 61 O-Planet 78
Инструментарий разработчика Разработчик 1С:Предприятие 7.7 1C77 Абонемент ($m)
На днях встретил вопрос на форуме про возможность внесения изменений в конфигурацию без долгого сохранения в рабочей базе большого объема. Вот решил поделиться опытом, как это делал я. База у нас была объемом порядка 120 Гб. К базе обращался сайт в режиме 24/7, поэтому важно было быстро сохранять изменения и желательно без последующего монопольного запуска для восстановления индексов и процедур и без отключения пользователей от базы. Это первая часть статьи и посвящена она справочникам. С одной стороны - это самый простой объект, с другой стороны, именно про справочник спрашивалось на форуме. Если статья будет востребована, то я напишу аналогичные про документы, регистры и может еще что.
1 стартмани
13.08.2013 25129 Reptile 5
Инструментарий разработчика Разработчик 1С:Предприятие 7.7 1C77 Абонемент ($m)
Встала недавно задача для одной организации, которая все еще на 1С 7.7 немного автоматизировать работу отдела продаж. А именно уйти от ручного заполнения договоров, сделанных юристами в MS Word. Договора от разных фирм и разного назначения отличались. Переводить их в таблицы 1С очень не хотелось и нашел способ прямо в файлах Word сделать небольшие дополнения, чтобы можно было печатать, используя именно эти заготовки юристов.
1 стартмани
14.07.2013 30215 57 adamx 11
Инструментарий разработчика Разработчик 1С:Предприятие 7.7 1C77 Абонемент ($m)
Давным давно, когда я еще плотно писал на 7.7 работа с формами была мучительной и неудобной. Приходилось каждый элемент выкладывать, выравнивать на форме ручками, прописывать код в модуле. Иногда при разработке очередной формы приходила в голову мысль: "а где-то я уже похожее делал..." и начинался мучительный поиск подходящего кода в своих запасах........
1 стартмани
21.02.2013 21132 36 MarSeN 14
Инструментарий разработчика Разработчик 1С:Предприятие 7.7 1C77 Абонемент ($m)
Анализируем различные данные в 1С, используя OLAP-технологии со всеми прелестями. Т.е. наглядное отображение данных, быстрые расчеты, горизонтальные и вертикальные группировки любой вложенности, удобная фильтрация, Drag'n'Drop и ещё много приятных вещей от MS. Обработка на входе принимает практически любую таблицу значений (ТЗ в которой колонкам указаны типы значений, строка, число и т.п.), на выходе имеем на форме 1С сводную таблицу и график по этой ТЗ, с которой работаем, как и в Excel со сводной таблицей и диаграммой. Взял за основу разработку «OLAP Анализ счёта» ( http://infostart.ru/public/14964/ ) от JohnyDeath и переделал под любую ТЗ. Опционально используется «Прогресс бар для 1С 77» (http://infostart.ru/public/14061/ ) от Gmix.
1 стартмани
21.12.2012 38948 51 venger 7
{F:\TEST\ПРЯМОЙ_ЗАПРОС.ERT(11)}: Неудачная попытка создания объекта (ПрямойЗапрос)
подскажите необходимые условия для запуска. Пытаюсь демо-пример реализовать.
Компоненту загружаю. а дальше? или ссылочку на обработку с примером. я копировал из Вашей шапки код.
2.0.3.4 1cp++ и пробовал 3.01.22
Хочется с этим всем разобраться..
Готов озвучить часть плана по развитию класса, правда без сроков:
- доработка документации по индексам реализованным в таблицах 1С
- доработка документации по инструкциям языка запросов
- доработка ВТ по бухгалтерским таблицам
- реализация ВТ по регистрам
- реализация ВТ СрезПервых
- реализация различных функций и инструкций
По пути посмотрим что еще будет.
1. Источники данных связанные с таблицами 1С указываются без символа $. Например: Справочник.Контрагенты, Документ.Выписка, ДокументСтроки.ПоступлениеМатериалов
2. Возможность поименования таблиц не имеющих метаимен. Например: в тексте запроса можно писать "ЖурналДокументов" вместо _1sjourn, или "Проводки" вместо _1sentry.
3. Можно не использовать конструкцию $ОбщийРеквизит. А вместо $ФлагРегистра необходимо писать Регистр<ИдентификаторРегистра>. Например: $Жур.Комментарий вместо Жур.$ОбщийРеквизит.Комментарий.
4. Внутренние идентификаторы подставляются самостоятельно классом. Более того их необходимо объявлять не через "$", а через ":". Так же для DBF формата БД всегда подставляется 36-тиричное представление, а для SQL (как правило) 10-чное, + если указать модификатор после идентификатора то 36-тиричное. Т.е. конструкции вроде ВидСправочника36 нет, вместо нее :ВидСправочника.ОсновныеСредства~.
5. Наличие ВТ $ПодчиненныеДокументы, $СрезПоследних
6. Урезанные параметры у вирт. значения $ПоследнееЗначение
7. $ПоследнееЗначение как и $Константа возвращают подготовленные значенияю. Т.е. для числа это Numeric(n,m), для даты это DateTime или формат ГГГГММДД, для прочих - CHAR(n) длинной в зависимости от реквизита. (может 1С++ также делает я не помню)
8. Модификаторы текстовых параметров пользователя слегка отличаются от 1С++
Ну кажется все что вспомнил.
Запрос = СоздатьОбъект("ODBCRecordset");
ТекстЗапроса = "
|SELECT
| CASE WHEN РегистрОстаткиТоваров.ВидДокумента = 4111 THEN
| ' Отчет кассовой смены №'
| ELSE
| CASE WHEN РегистрОстаткиТоваров.ВидДокумента = 239 THEN
| ' Перемещение №'
| ELSE
| CASE WHEN РегистрОстаткиТоваров.ВидДокумента = 434 THEN
| ' Приходная накладная №'
| ELSE
| CASE WHEN РегистрОстаткиТоваров.ВидДокумента = 297 THEN
| ' Списание №'
| ELSE
| CASE WHEN РегистрОстаткиТоваров.ВидДокумента = 4093 THEN
| ' Оприходование излишков №'
| ELSE
| ' ' + CAST(РегистрОстаткиТоваров.ВидДокумента AS varchar(9))
| END
| END
| END
| END
| END + RTRIM(Журнал.DOCNO) + ' от ' + SUBSTRING(РегистрОстаткиТоваров.ПозицияДокумента, 7, 2) + '.' + SUBSTRING(РегистрОстаткиТоваров.ПозицияДокумента, 5, 2) + '.' + SUBSTRING(РегистрОстаткиТоваров.ПозицияДокумента, 3, 2) AS ВидДокумента,
| РегистрОстаткиТоваров.ОстатокТовараНачальныйОстаток,
| РегистрОстаткиТоваров.ОстатокТовараПриход,
| РегистрОстаткиТоваров.ОстатокТовараРасход,
| РегистрОстаткиТоваров.ОстатокТовараКонечныйОстаток,
| '4!' + CAST(РегистрОстаткиТоваров.ВидДокумента AS varchar(9)) + '!' + RIGHT(РегистрОстаткиТоваров.ПозицияДокумента, 9)
|FROM
| $РегистрОстаткиОбороты.ОстаткиТоваров(:НачДата, :КонДата~, Документ, Движения, , Фирма = :Фирма AND Склад = :Склад AND Товар = :Расшифровка, Товар, ОстатокТовара) AS РегистрОстаткиТоваров
|LEFT JOIN
| _1SJOURN AS Журнал
| ON Журнал.IDDOC = RIGHT(РегистрОстаткиТоваров.ПозицияДокумента, 9)
|ORDER BY
| LEFT(РегистрОстаткиТоваров.ПозицияДокумента, 8)
|";
// параметры запроса
НачДата = ДатаНач;
КонДата = ДатаКон;
СкладИД = " J ";
Расшифровка = " 1DTL ";
Запрос.УстановитьТекстовыйПараметр("НачДата", НачДата);
Запрос.УстановитьТекстовыйПараметр("КонДата", КонДата);
Запрос.УстановитьТекстовыйПараметр("Фирма", " 0 "); // пустая фирма
Запрос.УстановитьТекстовыйПараметр("Склад", СкладИД);
Запрос.УстановитьТекстовыйПараметр("Расшифровка", Расшифровка);
Запрос.Отладка(1);
Результат = Запрос.ВыполнитьИнструкцию(ТекстЗапроса);
Сообщить(Результат.КоличествоСтрок());
Если Результат.КоличествоСтрок() > 0 Тогда
Результат.ВыбратьСтроки();
Пока Результат.ПолучитьСтроку() = 1 Цикл
Сообщить("" + Результат.ВидДокумента + " - " + Результат.ОстатокТовараНачальныйОстаток + " " + Результат.ОстатокТовараПриход + " " + Результат.ОстатокТовараРасход + " " + Результат.ОстатокТовараКонечныйОстаток);
КонецЦикла;
КонецЕсли; ПоказатьУдаленное подключение, с драйверами SQL SERVER все настроено, но почему под Win 7 и 2003 работает без проблем, а под XP выдает ошибку: Meta name parser error: это метаимя разрешить невозможно "$РегистрОстаткиОбороты.ОстаткиТоваров"
У меня на доку уходит больше времени чем на разработку и реализацию. Может потому что это слишком муторно и нудно?
Тестеры добровольцы приветствуются.
А вот по регистрам вполне возможно и покажу что нибудь. Может через недельку напишу какой нить простенький отчет, или конфу тестовую выложу когда причешу ее нормально.
Почему бета...
1. Проведены работы по оптимизации времени подготовки запроса. В связи с чем необходимо более тщательное тестирование
2. Вирт. таблица БИОстатки для SQL написана "на коленке" по аналогии с DBF. При этом DBF оттестирована и проведены работы по оптимизации времени выполнения запроса, для SQL подобных работ еще не было (планируется исследовать на неделе).
Собственно вот
Отладил и поработал над оптимизацией выполнения запроса в SQL формате БД (спасибо тов. berezdetsky за его КОП AccountRecordset, без него было бы гораздно сложнее).
Добавлена бета-версия ВТ БИОборотыДтКт. Незначительные изменения по оптимизации подготовки запроса.
Хочу сказать для всех кто сомневается: версия 1.03.002 имеет статус "бета" исключительно из-за добавления в подготовку запроса виртуальных таблиц для работы с бухгалтерской подсистемой. В остальном же версия 1.03.ххх имеет ряд существенных улучшений по сравнению с версией 1.02.ххх и рекомендуется к использованию.
Добавлены новые функции языка запроса: Лево(), Право(), СокрЛ(), СокрП(). Некоторые приватные методы реализованы как публичные с целью возможности разбора виртуальных таблиц вне класса.
Пы.сы. Если на форуме 1С++ активность в теме про класс хоть какая-то. То здесь я не вижу не активности, ни заинтересованности. Что не так? Или разработка показалось "не особо нужной".... странной даже.
Кстати очень интересным получилась возможность использования данного класса в совокупности с решением "ПоставщикДанных".
Информацию о данной "разработке" можно "подсмотреть" на 1С++.
Инсталлятор в данном случае получиться "неуниверсальным". Те кто пользуются классами уже имеют определенную иерархию, те кто не пользуется, велика вероятность что не будут. Я думаю достаточно "демо-конфигурации" и небольшого "фака" в документации как подключить, как использовать и т.д. Это я напишу. Спасибо за идею ;)
(47)
Табличное поле - это интерфейсный объект реализованный в 1С++ который позволяет на форме отображать табличное поле во многом идентичное 8-ке. Вообще примеры использования ТП я встречал и на данном ресурсе. Можно поискать. Если интересно то скорее надо уже на форум 1С++
(48)
Странно слышать про глюки. Насколько я использую 1С++ (а это практически все что в ней есть) большинство, если не почти все уже пофиксены.
Что касается примеров. В ближайшее время для ТиС я наверное перепишу пару отчетов. К сожалению текущая загруженность не позволяет уделять большое внимание "непроизводственным" вопросам :). Время, время, время.
Кстати что касается документации, то я думаю в данной разработке вопросов особых не должно быть, очень подробная дока получилась.
по (46) те кто уже пользуется - они не будут, а те кто заинтересован с нуля - будут. А то получается - 1.почему так мало откликов и 2.кто не использовал - тому и не надол, а кто использовал они и так все знают... ;-)
по (48) речь не про глюки 1С++, а про прикладные выкладываемые решения.
1.07.005 от 28.05.10 г.
- Исправлена ошибка при расчете конечной даты ВТ РегистрОбороты (для регистра с типом Обороты) если дата совпадает с датой начала периода хранения оборотов.
1.07.004 от 24.05.10 г.
- Исправлена ошибка подстановки предопределенных текстовых параметров с количеством слов разделенными запятыми более 2-х.
1.07.003 от 21.05.10 г.
- Исправлена ошибка подстановки текстовых параметров с модификаторами.
- Исправлена «плавающая» ошибка парсинга ВТ без указания параметров.
1.07.002 от 18.05.10 г.
- Исправлена ошибка при формировании ВТ РегистрОстатки (по регистру с типом «Остатки») если дата получения остатков очень близка к ТА.
- Исправлена ошибка при формировании ВТ РегистрОбороты (по регистру с типом Обороты) если граница окончания получения оборотов близка к ТА. Оптимизирован расчет границ для сбора данных.
- Добавлена возможность обратной совместимости с версией 1.06.ххх. Все параметры ВТ не являются обязательными. Подставляются значения по умолчанию.
1.07.001 от 14.05.10 г. (beta)
- Добавлен новый параметр «Соединения» виртуальной таблицы РегистрОстатки.
- Добавлен новый параметр «Соединения» виртуальной таблицы РегистрОбороты.
- Добавлен новый параметр «Соединения» виртуальной таблицы РегистрОстаткиОбороты.
- Добавлен новый параметр «Соединения» виртуальной таблицы БИОстатки.
- Добавлен новый параметр «Соединения» виртуальной таблицы БИОборотыДтКт.
- Добавлен новый параметр «Соединения» виртуальной таблицы БИОбороты.
- Добавлен новый параметр «Соединения» виртуальной таблицы БИОстаткиОбороты.
1.06.007 от 14.05.10 г.
- Исправлена ошибка виртуальной таблицы РегистрОбороты при формировании по регистру с типом «Обороты» и периодичностью Декада.
- Исправлена ошибки формирования виртуальных таблиц по бухгалтерской подсистеме при наличии более 1-го плана счетов.
VFPOLEDB
- Для DBF делал развертку виртуальной таблицы остатков (итоги+движения). Потратил 2 дня на разбор полетов
Класс ПрямойЗапрос
- Для DBF написал запрос. Потратил 1 час, вместе с чтением документации на 1sqlite и класс ПрямойЗапрос. Скорость выполнения увеличилась даже визуально!
Итог: класс использовать нужно! Рекомендую всем, кто не хочет мучений при написании прямых запросов к DBF
На заметку: Конструктор qryConsole по умолчанию ставит между параметром и модификатором пробел ":ДатаПолученияОстатков ~", при использовании класса текст запроса необходимо править - убирать пробел: ":ДатаПолученияОстатков~"
нашел 1sqlite.dll, вопрос снимается )
Выбран индекс ACDATETIM: DTOS(DATE)+TIME+IDDOCА вообще - уже очень-очень нравится, пользоваться классом удобно:)
(67) по поводу модификатора посмотрю чтобы пробелы не учитывались.
(68) я на 1С++ писал что есть некоторые недоработки.
Цитата: "В частности Жур.$ОбщийРеквизит.ИмяРеквизита можно писать как $Жур.ИмяРеквизита, а $nolock вообще отсутствует везде.
Ну и сравнение "WHERE $Жур.ДатаДокумента"... тут такое дело что сравнивать left(date_time_iddoc,8) (для SQL будет так) не самое хорошее решение. Проще после кода поставить проверку, если это ПрямойЗапрос.ЭтоSQL = 1 то данную часть заменить на $Жур.ПозицияДокумента. Т.е. ПрямойЗапрос.Текст = СтрЗаменить(ПрямойЗапрос.Текст,"WHERE $Жур.ДатаДокумента","WHERE $Жур.ПозицияДокумента");". 8-)
ТекстЗапросаДвижений =
"SELECT
| $Жур.ТекущийДокумент КАК [Документ $Документ]
//| Журнал.IDDOC as [Документ $Документ]
| , $Жур.ВидДокумента КАК Документ_вид
//| , Журнал.IDDOCDef as Документ_вид
| , $Жур.ДатаДокумента КАК [ДатаДок $Дата]
//| , "+?(БазаSQL = 0,"Журнал.DATE","$НачалоПериода.День(Журнал.DATE_TIME_IDDOC)")+" as ДатаДок
|
| , $СпрДоговора.ТекущийЭлемент КАК [Договор $Справочник.Договоры]
//| , СпрДоговора.ID КАК [Договор $Справочник.Договоры]
| , $СпрКонтрагенты.ТекущийЭлемент КАК [Покупатель $Справочник.Контрагенты]
//| , СпрКонтрагенты.ID КАК [Покупатель $Справочник.Контрагенты]
|
| , $НаименованиеРегистра.ВидДвижения КАК ПриходРасход
//| , НаименованиеРегистра.DEBKRED КАК ПриходРасход
|
| , НаименованиеРегистра.Фирма КАК [Фирма $Справочник.Фирмы]
| , НаименованиеРегистра.ВидДолга КАК [ВидДолга $Перечисление.ВидыДолга]
| , НаименованиеРегистра.КредДокумент КАК [КредДокумент $Документ]
| , НаименованиеРегистра.ДокументОплаты КАК [ДокументОплаты $Документ]
| , НаименованиеРегистра.КодОперации КАК [КодОперации $Перечисление.КодыОпераций]
|
| , НаименованиеРегистра.СуммаРуб*(1 - $НаименованиеРегистра.ВидДвижения * 2) КАК СуммаВзаиморасчетовВВалютеБухУчета
//| , $НаименованиеРегистра.СуммаРуб*(1 - НаименованиеРегистра.DEBKRED * 2) КАК СуммаВзаиморасчетовВВалютеБухУчета
|
| , Жур.$ОбщийРеквизит.Автор КАК [Автор $Справочник.Пользователи]
| , Жур.$ОбщийРеквизит.Проект КАК [Проект $Справочник.Проекты]
| , Жур.$ОбщийРеквизит.ЮрЛицо КАК [ЮрЛицо $Справочник.СвоиЮрЛица]
|
|FROM Регистр."+НаименованиеРегистра+" КАК НаименованиеРегистра
//|FROM $Регистр."+НаименованиеРегистра+" КАК НаименованиеРегистра
| INNER JOIN ЖурналДокументов КАК Жур ON $НаименованиеРегистра.ТекущийДокумент = $Жур.ТекущийДокумент
//| INNER JOIN "+?(БазаSQL = 0,"1SJOURN","_1SJOURN")+" AS Журнал "+?(БазаSQL = 0,"","With (NOLOCK)")+" ON НаименованиеРегистра.IDDOC = Журнал.IDDOC
| LEFT JOIN Справочник.Договоры КАК СпрДоговора ON $СпрДоговора.ТекущийЭлемент = НаименованиеРегистра.Договор
//| LEFT JOIN $Справочник.Договоры КАК СпрДоговора ON СпрДоговора.ID = $НаименованиеРегистра.Договор
| LEFT JOIN Справочник.Контрагенты КАК СпрКонтрагенты ON $СпрКонтрагенты.ТекущийЭлемент = СпрДоговора.ParentExt
//| LEFT JOIN $Справочник.Контрагенты КАК СпрКонтрагенты ON СпрКонтрагенты.ID = СпрДоговора.ParentExt
|
|WHERE $Жур.ДатаДокумента BETWEEN :ВыбНачПериода AND :ВыбКонПериода~
//|WHERE ("+?(БазаSQL = 0,"Журнал.DATE","Журнал.DATE_TIME_IDDOC")+" BETWEEN :ВыбНачПериода"+?(БазаSQL = 0,"~~","")+" AND :ВыбКонПериода"+?(БазаSQL = 0,"~~","~")+")
|
|"; ПоказатьВ примере показано, что меняется. Старый вариант запроса для DBF (VFPOLEDB ) и SQL закомментирован
обязательно сделаю такую проверку
А по поводу $nolock я прочитал в твоей документации, что происходит подстановка автоматическая для SQL, а для 1sqlite это и не нужно. Или я не так понял?
Ну, раз уж на то пошло - можно вернуть знак $ перед регистрами движений? Не очень удобно править руками запрос qryConsole, первый раз я даже долго искал в своем запросе ошибку (спасибо Орефкову за консоль запросов 1sqlite, помогла разобраться)
Использую КОП ПрямойЗапрос 1.7.21, 1с++ 3.2.3.1
Вот такой запрос:
ТекстЗапроса = "
|ВЫБРАТЬ *
|ИЗ
|$БИОстатки.Основной(:КонДата~,, (Подразделения, Товары), (Количество, Сумма), ((Субконто1 = :ВыбПодразделение) И (Счет = :Счет411)),)
|КАК Би
|";
дает ошибку "В метод необходимо передавать непустые объекты типа метаданных". Если между идентификаторами видов субконто убрать пробел - все нормально. Если вместо (Подразделения, Товары) задать через пробел (Субконто1, Субконто2) - ошибки не возникает. В документации по $БИОстатки, впрочем, так и указано: "Т.е. например (Субконто1, Субконто3) или (Контрагенты,Договоры).", но при возможности влияние пробела хорошо было бы исключить..
В документации по $БИОстатки, Параметр КонецПериода сказано: "Параметр со значением даты или документа, до которого необходимо рассчитать остатки (условие <, т.е. не входит в сумму остатков). " Здесь закрались сомнения, и экспериментально установлено, что "<" справедливо для документа (т.е. остатки на начало документа), а для даты верно "<=", т.е. на конец дня.
Хотелось бы еще при выполнении запросов классом вместо "Выполняется обработка" в строке состояния наблюдать информацию именно о выполнении запроса с указанием даты - что-то вроде "Расчет итогов: 27.11.10" по аналогии с 1с..
И еще вопрос: als и ints файлы для КОП ПрямойЗапрос существуют?
По документации: если посмотришь то увидишь что документация там точно за 50 страниц выпадает, не хватает конкретных примеров - это да, но описание я считаю минимально достаточным.
И еще по поводу синтаксиса, я не вижу слишком больших отличий от 8-ки. Необходимость переименования и определения вида в запросе... ну что ж... А двоеточния или @ - очень сильно нужны. Например: в коде Т.ТекущийЭлемент = :Ссылка точно видно что "Ссылка" это именно текстовый параметр который надо подставить соответствующим образом. А в коде Т.ТекущийЭлемент = @Ссылка понятно что "Ссылка" это подставляемый параметр который необходимо задавать отличным от предыдущего примера видом, и при этом понятно что запрос параметризированный и выполнение его происходит отлично от обычного запроса.
// определяем время подготовки запроса
ВремяПодготовки = _GetPerformanceCounter();
// создаем объект для получения результата запроса
ПолучательЗапроса = СоздатьОбъект(ТипОбъекта);
ПрямойЗапрос::Выполнить(Число ТипОбъекта=0, Строка ТекстВыполнения=, Число БезПодготовки=0) : Неудачная попытка создания объекта
ПолучательЗапроса = СоздатьОбъект(ТипОбъекта);
{C:\Base77\База\ПрямойЗапрос.ert(13386) }
тЗапроса = Запрос.Выполнить(0);
{F:\SQLЗАПРОС2.ERT(183)}: ПрямойЗапрос::Выполнить(Число ТипОбъекта=0, Строка ТекстВыполнения=, Число БезПодготовки=0) : Неудачная попытка создания объекта
ПолучательЗапроса = СоздатьОбъект(ТипОбъекта);
{C:\Base77\База\ПрямойЗапрос.ert(13386) }
БазаSQLite = СоздатьОбъект("SQLiteBase");
{C:\Base77\База\ПрямойЗапрос.ert(1057) }
Запрос = СоздатьОбъект("ПрямойЗапрос");
{F:\SQLЗАПРОС2.ERT(146)}: ПрямойЗапрос::СоздатьОбъектыЗапроса(Строка ПутьКБазеSQL=:memory:) : Неудачная попытка создания объекта
БазаSQLite = СоздатьОбъект("SQLiteBase");
{C:\Base77\База\ПрямойЗапрос.ert(1057) }
Хотя dll лежит sqllite
Что же касается sqlite, может версия компоненты старая? Может не загрузилась ВК? Отдельно попробуй объект создать, проходит/нет.
Текст заменил так
было:
ИначеЕсли ЭтоSQL = 0 Тогда
ЗапросSQLite.Отладка(РежимОтладкиЗапроса);
ЗапросSQLite.ВыполнитьЗапрос(ТекстЗапроса,ПолучательЗапроса=);
КонецЕсли;
стало:
ИначеЕсли ЭтоSQL = 0 Тогда
ЗапросSQLite.Отладка(РежимОтладкиЗапроса);
ПолучательЗапроса=ЗапросSQLite.ВыполнитьЗапрос(ТекстЗапроса);
КонецЕсли;
и перед этим поменял
ПолучательЗапроса = СоздатьОбъект(ТипОбъекта);
заменил на
ПолучательЗапроса=0;
Процедура не обнаружена (вирт)
Процедура не обнаружена (я)
и
Внимание! Инициализация класса: ПрямойЗапрос закончилась неудачно!
В файле ПрямойЗапрос.ert не вижу, где объявляются процедуры вирт() и я()...
P.S. Видимо надо обновить 1cpp до 3ей версии...
В общем, ищите инфу на 1С++, тут я редко пишу ответы.
ВЫБРАТЬ
Рег.ТекущийДокумент КАК [Документ $Документ]
,Рег.ВидДокумента КАК [Документ_вид $ВидДокумента]
,Рег.Фирма КАК [Фирма $Справочник.Фирмы]
,Рег.Договор КАК [Договор $Справочник.Договоры]
,Рег.СуммаРубНачальныйОстаток КАК ОстатокНач
,Рег.СуммаРубОборот КАК Оборот
,Рег.СуммаРубПриход КАК Приход
,Рег.СуммаРубРасход КАК Расход
,Рег.СуммаРубКонечныйОстаток КАК ОстатокКон
,СпрФирмы.ТекущийЭлемент КАК [ФирмаСпр ]
ИЗ $РегистрОстаткиОбороты.Покупатели(:НачПериода
,:КонПериода
,Документ
,ДвиженияИГраницыПериода
, ,(Фирма,Договор)
,(СуммаРуб)) КАК Рег
ЛЕВОЕ СОЕДИНЕНИЕ $Справочник.Фирмы Как Фирмы
ПО Рег.Фирма= Фирмы.id
Показатьдает ошибку
near "AS": syntax error
Собственно, менял условия соединения и на ЛЕВОЕ СОЕДИНЕНИЕ $Справочник.Фирмы Как Фирмы
ПО Рег.Фирма= $Фирмы.ТекущийЭлемент, и т.п. - та же ошибка.
Классы обновил на версию от 22.05.13
в режиме отладки выдает текст, который визуально ошибок не имеет
без левого соединения (сама ВТ) работает....
база- ДБФ.
Вы можете заказать платную консультацию или разработку у автора. Будет создан приватный заказ на «Бирже заказов» для автора.
№ 20823
Создание 01.07.09 12:08
Обновление 18.01.12 02:23
Просмотры 42380
Загрузки 355
Рейтинг
85
Комментарии 102
Код открыт Не указано
Рубрики Инструментарий разработчика
Кому
Системный администратор
,
Разработчик
Тип файла Компонента, плагин (dll, vbs,..)
Платформа 1С:Предприятие 7.7
Конфигурация 1C77
Операционная система Не имеет значения
Страна Россия
Отрасль Не имеет значения
Налоги Не имеет значения
Вид учета Не имеет значения
Доступ к файлу Абонемент ($m)