- Сделано принудительное округление чисел при типизации :Число, тк получатели
результата (кроме ТаблицыЗначений) сами этого не делают.
- Исправлена работа типизации при обработке NULL значений, тк получатели
результата (кроме ТаблицыЗначений) сами этого не делают.
- Изменена логика работы с Begin/EndReadSequnce. В немонопольном режиме падение
производительности, зато не падает.
- Добавлен метод SQLiteQuery::ОбработатьТекстЗапроса
- Добавлено свойство SQLiteQuery::ВыполнятьВТранзакции
- Исправлена ошибка программы при подключении таблиц шапки документа, не имеющего
реквизитов шапки.
- Исправлена ошибка при выборке из таблиц 1С, иногда могущая привести к зависанию
программы.
- Добавлено подключение таблиц ЖурналовРасчетов ДБФ версии 1С.
- Исправлена укладка списка объектов при наличии иерархии - неверно укладывались
объекты, содержащие в идентификаторе русские буквы (распределенка с русским
префиксом ИБ).
- Добавлен объект SQLiteDataProvider - поставщик данных табличного поля 1С++ для
таблиц sqlite и таблиц 1С DBF-версии.
Подскажите плиз, как выбрать все документы определенного вида, например, РасходнаяНакладная, у которых Контрагент тому, который выбираем на форме отчета (ВыбКонтрагент) ? Пишу
select d.iddoc [Документ :Документ]
from Документ_РасходнаяНакладная as d
where d.Контрагент = :ВыбКонтрагент"
Подскажите, как написать запрос по продажам в 1с 7.7 ТиС:
|Период С Дата1 По Дата2;
|Фирма=Регистр.ОстаткиТоваров.Фирма;
|Товар=Регистр.ОстаткиТоваров.Товар;
|Склад=Регистр.ОстаткиТоваров.Склад;
|ДокументДвижения=Регистр.ОстаткиТоваров.ТекущийДокумент;
|Кол=Регистр.ОстаткиТоваров.ОстатокТовара;
| РасхКол=Расход(Кол);
|Функция КонКол=КонОст(Кол);
|Группировка Товар без групп все;
Не понятно как вязать Регистр_ОстаткиТоваров и РегистрИтоги_ОстаткиТоваров... Или это нереальано с помощью Sqlite ?
- SQLite обновлен до релиза 3.6.11
- Добавлена способность ПоставщикаДанных динамически менять текст запроса, если
некоторые поля не нужны табличному полю для отображения
- Добавлена возможность быстрого поиска для поставщика данных
- Исправлена ошибка выборки данных при некоторых условиях
(where date <= '09или19или29.месяц.год' order by date desc)
- Убрана странная ошибка при попытке подготовить запросы с текстом запроса длиннее 972 символов.
- Порядок сортировки в 'collate _1C' сделан точно соответствующим порядку сортировки в дбф-файлах 1С.
- Изменены методы:
Из каких соображений нельзя уложить в Лайт ТЗ с количеством строк =0 ??
приходится писать что-то подобное...
Процедура УложитьТЗвЛайт(База,_ТЗ,ИмяТаблицы,Врем=0)
Если _ТЗ.КоличествоСтрок()=0 Тогда
_ТЗ.НоваяСтрока();
База.УложитьТЗ(_ТЗ,ИмяТаблицы,Врем);
Запрос=База.НовыйЗапрос();
Запрос.ВыполнитьЗапрос("delete from "+ИмяТаблицы);
Иначе
База.УложитьТЗ(_ТЗ,ИмяТаблицы,Врем);
КонецЕсли;
КонецПроцедуры
в примере с поиском по подстрокам
.
РазбиваемаяСтрока=СтрЗаменить(РазбиваемаяСтрока,"'","''");
РазбиваемаяСтрока=СтрЗаменить(СокрЛП(стрПоиска)," ",РазделительСтрок);
- вот тут вот как-то неаккуратненько???
знаю, что дело в типизации..
Но вот так тоже не выходит:
SELECT
ФИО, ПолеСПеречислением [ПолеСПеречислением :Перечисление.Булево]
FROM НужныйСправочник
WHERE ismark <> '*'
AND (ФИО LIKE '%А%') AND (ПолеСПеречислением ='+')
Current Status
* Version 3.6.21 of SQLite is recommended for all new development. Upgrading from version 3.6.12, 3.6.13, 3.6.14.2, or 3.6.16 through 3.6.20 is optional. Upgrading from all other SQLite versions is recommended. (с) http://www.sqlite.org/
(217) если в базе присутствуют и виртуальные таблице, то посмотреть их можно только с использованием текущей компоненты. Иначе есть несколько хороших программ, например вот эта http://www.sqliteexpert.com/
Добрый день! Маленько не по теме, но всеже.
Пытаюсь создать Базу в консоли : на винде получается через три на четвертый(закономерности не заметил) на линухе с первого раза. Из 1С (7,7 ) база создается , но загрузить в нее данные не получается, в какую сторону копать?
Как загрузить данные из виртуальной таблицы в файл базыSQL?
И еще вопрос про относительные пути в 1С 7и 8 ? если обработка запуска лежит в каталоге, отличном от каталога базы , прогФайлов(допустим на флешке) как определить програмно путь до нее? (база естественно будет лежать неподалеку, да и DLL-ка тоже)
orefkov, можно ли с помощью вашей разработки записать файл в произвольную базу данных sqlite?
Если да, то подскажите, пожалуйста, каким объектом? Вот если бы из 1с++ binarydata туда ложить данные можно было...
Замечательная штука. Совместно с прямыми запросами кратно увеличивала скорость работы сложных отчетов при работе по сети с dbf (в смысле позволяла не гонять данные по сети, а скопировать на комп и с ними работать).
Вот наконец-то пытаюсь уйти от старой шестой студии 98 года, и пересобрать библиотеку современными средствами, в Visual Studio 2008. Размером получается чуть меньше, работает чуть пошустрее.
Кому охота, может затестить.
http://snegopat.ru/downloads/1sqlite/1sqlite_1026_2008.zip
База.УложитьТЗ(ТЗ,"ТЗ");
запросSQLLite.ВыполнитьЗапрос("INSERT INTO base Select * From ТЗ");
Уложенная ТЗ - это виртуальная таблица в памяти, чтобы заполнить базу значениями из неё (запросом INSERT)? Т.е. она сама (ТЗ) не сохраняется в базе при укладке?
А как можно объединить 2 таблицы с одинаковой структурой? Есть база SQLite и есть ТЗ с аналогичной структурой. ТЗ укладываю. И дальше хотел бы объединить эту ТЗ с базой запросом типа MERGE. Чтобы потом сделать общий запрос.
(239) За "UNION ALL" - большое спасибо - самое то!
(240) А как определить/назначить ключевое поле (PRIMARY KEY) для уложенной ТЗ? И в базе данных - создание индекса - не равносильно ли PRIMARY KEY? Я при создании базы не прописывал ключевое поле, но создал индекс.
(243)
Если ты применительно к задаче "insert or replace", то ключ надо задавать в таблице-приемнике, а не в источнике.
Либо сразу при создании таблицы указываешь, либо потом индекс по полю создаешь.
(244) Не работает у меня "insert or replace". Это я делаю переброску МЛГ в SQLite. Создал базу с тремя индексами: Дата, Пользователь, ИД. Заполняю ТЗ (из МЛГ), укладываю её и делаю запрос как в (238). Сделал себе обработку с кнопкой. Так вот сколько раз нажму кнопку - столько раз и запишется в базу одна и та же инфа.
(242) Что-то мне кажется, что Ключевое поле и Индекс - не равнозначны. Индекс, если я правильно понимаю, нужен для быстрой выборки, сортировки. Но в индексном поле могут быть одинаковые значения в разных строках. А для Ключевого поля такого не может быть по определению. Т.к. в ключевом поле (опять же, если я правильно понимаю) должны быть исключительно уникальные значения во всей таблице.
Хотелось бы высказать некоторые хотелки,мне как человеку не писавшему прямые запросы ранее хотелось бы видеть удобо-читаемую инструкцию как это начать делать,мне нужно для базы dbf.А так в одном месте какая то инфа,в другом часть,что бы собрать все вместе нужно лазить пол дня,есть база дбф,я закинул в bin свеже скачанную dll 1cpp,скачал консоль с инфостарта одну,она не заработала,значит чего то не хватило,наткнулся на классы прямого запроса,там вразумительного ничего не сказано,здесь говорится про скл лайт как работа с этим объектом ,откуда он должен взяться,как он подключается в скачке одна dll только,это и есть этот объект и он формирует внутри виртуальные таблицы?(((
(250)
1C++ и 1sqlite - это разные компоненты, работающие независимо друг от друга.
Просто с помощью 1C++ сделан класс, автоматически преобразующий текст запроса в версии для sql и dbf. К самой компоненте есть документация, описывающая, как выполнять запросы. Просто надо ещё знать структуру хранения данных в 1С. На форумах по 1С++ есть много информации на эти темы. Можно ещё и на мисте поспрашивать.
Спасибо за ответ,но я немножко другое спросил,как начать работать с вашей dll,небольшой readme так сказать,что куда закинуть и что подключить,так как неявно предполагается наверняка наличие еще и других dll и чего то еще,чего только вы знаете,я зашел на форум а там тоже ссылки,а где гарантия что в той ссылке тоже не будет ссылки.Поэтому вот вы выложили а как все подключить,все требования по установленному п.о. не написали.
Я скачал вашу консоль написал почти как у вас в примере,отметил там подключение таблицы галочкой по плану счетов и он мне выдал данные,причем dll liteSql я не прописывал и не закидывал.Если вы не можете внятно это объяснить,кто стоял у истоков, то я сомневаюсь что вообще кто-то может)
в общем закинул dll в бин и консоль вроде работает,но вот другая консоль у которой есть параметры не работает,хоть я и выбирал там все методы и прямой запрос и odbc и ole db,а автор тот вообще не отвечает,и инструкции тоже нет,пишет "Неудачная попытка создания объекта (ПрямойЗапрос)"..вопрос в том что нужно писать ридми что нужно для работы.Как то нужно свести инфу вместе,а то есть какие то классы ,то ли не есть,есть прямой запрос, есть кривой,неужели так трудно было к синтаксису восьмерки привести.все в разных местах,находится,и ниче не понятно.Мне вот нужно написать запрос подключаемый к разным базам,а здесь синтаксиса метода открыть объекта база нет.
(255)
1. Всё писалось разными людьми, для разных целей и задач. Не для начинающих.
2. Есть целый форум, посвященный прямым запросам.
3. Классы, в том числе класс ПрямойЗапрос созданы как раз для облегчения написания чего-либо
4. 1sqlite не позволяет строить запросы к сторонней базе, только в родной.
5. Для написания запроса к сторонней базе, для дбф варианта, достаточно иметь компоненту 1cpp.dll, установленный vfpoledb провайдер.
Обо всём, более подробно можно прочитать тут
http://www.1cpp.ru/forum/YaBB.pl?board=query welcome!
Я уже придумал просто скинуть в текущую базу dbf из других баз,и обращаться к таблицам по названиям,возможно прийдется расширять md файл еще не знаю.Ну вот это все и не удобно,писали для себя если то и писали бы тогда а не выкладывали,если не могут объяснить нормально как с этим работать,уж как плох синтаксис 1с но их документация в сравнении с 1с это вообще нечто,примеры где.Вот и непонятно,мог бы кто то кто знает обобщить все эти множества сказать какая dll повторяет методы другой,как я понимаю в этой dll уже не нужен класс она и так работает без закорючек.Почему типизацию нельзя было сделать встроенную,и привести синтаксис к 1с 8,но это ладно понятно,наверно долго,или лень
(259) Документации, примеров, обсуждений - вагон и маленькая тележка.
Вам просто лень ЭТО осилить.
Про убогий синтаксис языка запросов снеговика, лучше вообще не стоит упоминать.
А типизация там есть, более того, можно лепить запросы к нескольким базам одновременно.
не понял команду синтаксис, название таблицы Rф2207,from $Rф2207,не работает,from $Регистр.Покупатели=$Rф2207,from ${Регистр}.Покупатели=$Ra2207, непонятно
Я тут все воюю с запросом,не могу во понять почему не работает конструкция Where Жур.IDDocDef = $ВидДокумента.Реализация,и в связи с эти хотелось бы понять как она вообще работает.Вот к этому запросу хотел прилепить,что бы потом еще добавить отбор по реквизиту который есть только у реализации.
select distinct
СпрКонтр.Descr as Контрагент,
СпрДог.Descr as Договор,
Sum(iif(покуп.debkred=1, Покуп.Sp2201, -Покуп.Sp2201) )as СуммаПродОстаток,
Sum(Покуп.Sp2201) as СуммаПрод,
Sum(Sp2203) as СуммаСебест,
Max(покуп.SP2198) as [док $Документ ]
from
ra2207 as покуп
LEFT JOIN SC92 as СпрДог
LEFT JOIN SC134 as СпрКонтр
ON СпрКонтр.id= СпрДог.parentext
ON Покуп.SP2195 = СпрДог.ID
left JOIN 1Sjourn as Жур
ON Жур.IDDoc = покуп.SP2198
Group by Контрагент,Договор
Не подскажешь в чем ошибка,1sqllite лежит в базе.Ошибка такая,в обработке прямой запрос создается Объект
{C:\Base77\База\ПрямойЗапрос.ert(1
ПрямойЗапрос::СоздатьОбъектыЗапроса(Строка ПутьКБазеSQL=:memory:) : Неудачная попытка создания объекта
БазаSQLite = СоздатьОбъект("SQLiteBase");
{C:\Base77\База\ПрямойЗапрос.ert(1057) }
Доброго дня!
Возник вопрос: обновил компоненту с 1.0.2.3 до 1.0.2.6 (запросы работали корректно).
Спустя неделю вылезла проблема с запросом:
|SELECT
| doc as [Реализация $Документ.Реализация],
| doc as РеалId
|FROM
| Sklad
|WHERE
| (date between :НачДатаПров and :КонДатаПров) and (doc=:ПроверДок)
Показать
Он просто начал игнорировать часть условия с "(doc=:ПроверДок)" отлавливать такие моменты по всем обработкам возможности нет. Да и на боевой базе нужно чтобы все работало здесь и сейчас.
Решил вернуться на 1.0.2.3 но базы стали "file is encrypted or is not a database".
Нашел 1.0.2.4, но часть запросов, н-р:
|CREATE TABLE IF NOT EXISTS ContrSendConfS (id INTEGER PRIMARY KEY NOT NULL, IdContr INTEGER, IdType INTEGER, IdFormat INTEGER, IdMethod INTEGER, Adress STRING);
, стали дико тормозными...
Вопрос: как можно вернуться к версии 1.0.2.3?
Заранее очень благодарен!
(282) понятно. Спасибо!
Последняя выложенная ведет себя, так же, не корректно.
1.0.2.4 - возвращает корректное значение.
Я так понял, что при открытии базы новым sqlite он эту базу конвертировал, но при открытии менее молодой версией обратно он её не преобразовывает. База используется достаточно активно, поэтому бэкапы уже не спасут.
Сейчас пытаюсь набросать обработку, которая пересоздаст базы и перезаполнит (1.0.2.4).
Разработчику постараюсь сообщить.
Но сообщение, о том что грабли с возвратом с нестабильной (по крайней мере пока) библиотеки стоят за углом и ждут, хорошо бы где-нибудь в шапке опубликовать.
Стоп. Вы делаете запрос именно из базы данных sqlite? И говорите, что такой простой запрос в родной базе sqlite выполняется неправильно? Можете выслать на orefkov @ gmail.com тестовую базу и текст запроса? Я бы проверил.
(285) Jill, у вас в таблице Sklad поле doc объявлено как integer, а сравниваете с текстом.
При изменении условия на
and (cast(Sklad.doc as text) =' 1E600 ')
отрабатывает нормально.
Лучше измените тип столбца на text
(284) что характерно, новая версия компоненты вот так работает:
|SELECT
| Sklad.doc as [Реализация $Документ.Реализация]
|FROM
| Sklad
|WHERE
| (Sklad.date between :НачДатаПров and :КонДатаПров)
//| and (Sklad.doc=:ПроверДок)
| and (Sklad.doc LIKE '%'||:ПроверДок||'%')
Показать
Т.е. проблема явно связана с непечатными символами в базе (очень похоже на то, что начиная с какой-то версии при выполнении запроса к базе они режутся с ними что-то происходит и условие игнорируется). Но база заполненная ранними версиями, через
ЗапросSQLite.Подставлять("ТекВремя",ТекущееВремя());
ЗапросSQLite.Подставлять("ТекДата",ТекущаяДата());
ЗапросSQLite.Подставлять("ТекДок",Док);
ТекстЗапроса="
|INS ERT IN TO Sklad (time, date, given, doc) VALUES (:ТекВремя,:ТекДата,0,:ТекДок);
|";
1. В движке sqlite, используемом в версии 1sqlite 1.0.2.6, была расширена поддержка чисел с экспонентой http://www.sqlite.org/src/info/ca154f97a5907455 В результате 1E4RS из-за динамической типизации sqlite остается строкой и запрос выводит правильное значение, а 1E702 из-за указанной типизации integer становится числом, но sqlite не поддерживает 10 в 702 степени и запрос работает не так как хочется.
2. Понизить версию базы после запуска на 1.0.2.4-1.0.2.6, чтобы запустить на 1.0.2.3, возможно. Нужно изменить хекс редактором байты по адресу 0х12 и 0х13 с 0х02 на 0х01
Обязательно сделайте копию! Гарантии работоспособности такого варианта нет.
(289) Djelf, огромное спасибо за развитие проекта вообще, и за помощь в решении этой конкретной проблемы в частности!
Нет желания создать на ИСе свою публикацию со своими доработками 1sqlite? Я бы против нисколько не был.
1sqlite reborn? ;) Ок, сделаю страничку.
Нумерацию только придется изменить, иначе получается путаница.
Поскольку sqlite стал с 3х значной нумерацией, а серьезных изменений в 1sqlite я пока не планирую, то версии будет выходить как [версия sqlite].[патчсет]