Переключение на Главную Страницу Страницы: 1 ... 55 56 [57] 58 59 ... 79 ОтправитьПечать
Очень популярная тема (более 25 ответов) 1sqlite (число прочтений - 459381 )
Mink Snopes
Junior Member
**
Отсутствует


bookkeeping considered
harmful

Сообщений: 30
Местоположение: Dombabwe
Зарегистрирован: 05. Ноября 2013
Re: 1sqlite
Ответ #840 - 09. Ноября 2016 :: 06:38
Печать  
Djelf, а есть возможность прикрутить чтение произвольнольного dbf?
  
Наверх
 
IP записан
 
Djelf
God Member
*****
На связи


Ubuntu + wine@etersoft
+ 1C 7.7

Сообщений: 633
Местоположение: Питер
Зарегистрирован: 02. Ноября 2007
Пол: Мужской
Re: 1sqlite
Ответ #841 - 09. Ноября 2016 :: 09:19
Печать  
Mink Snopes писал(а) 09. Ноября 2016 :: 06:38:
Djelf, а есть возможность прикрутить чтение произвольнольного dbf?

Через механизм виртуальных таблиц прикрутить к sqlite можно почти все.
Есть вот такое расширение https://www.gaia-gis.it/fossil/libspatialite/index
Я не пробовал, но есть инструкция для linux (принцип в win тот же) https://gist.github.com/maxp/6f9ff80825666102f446
И библиотека для win https://www.gaia-gis.it/spatialite-2.3.0/binaries.html

Для загрузки расширений нужно сначала их разрешить!

База = СоздатьОбъект("SQLiteBase");
База.Открыть(":memory:");
База.РазрешитьЗагрузкуРасширений(1);
потом
SELECT load_extension('libspatialite-2.dll');
и по инструкции...
  
Наверх
www  
IP записан
 
Mink Snopes
Junior Member
**
Отсутствует


bookkeeping considered
harmful

Сообщений: 30
Местоположение: Dombabwe
Зарегистрирован: 05. Ноября 2013
Re: 1sqlite
Ответ #842 - 10. Ноября 2016 :: 07:21
Печать  
No luck.
У них даже бинари отюда не работают:
http://www.gaia-gis.it/gaia-sins/windows-bin-x86/


> spatialite
SpatiaLite version ..: 4.3.0a   Supported Extensions:
        - 'VirtualShape'        [direct Shapefile access]
        - 'VirtualDbf'          [direct DBF access]
        - 'VirtualXL'           [direct XLS access]
...
spatialite> create virtual table lood using virtualdbf('c:\tmp\bdp.dbf', 'cp866');
spatialite> select * from lood;
spatialite>

То есть таблица создается, но ни данных, ни структуры там нет.

Собственно вопрос был, можно ли по-быстрому натравить движок 1с на сторонний ДБФ, ну нет, так нет.

UPD На dbf из исходников libspatialite все взлетает, вообще весело.
  
Наверх
 
IP записан
 
Djelf
God Member
*****
На связи


Ubuntu + wine@etersoft
+ 1C 7.7

Сообщений: 633
Местоположение: Питер
Зарегистрирован: 02. Ноября 2007
Пол: Мужской
Re: 1sqlite
Ответ #843 - 10. Ноября 2016 :: 11:55
Печать  
Mink Snopes писал(а) 10. Ноября 2016 :: 07:21:
No luck.
UPD На dbf из исходников libspatialite все взлетает, вообще весело.

Глянул исходники. Не поддерживается формат dBASE 7 и еще пара форматов. Печально...

сигнатуры поддерживаемые libspatialite
Код (C++)
Выбрать все
    switch (*bf)
      {
	  /* checks the DBF magic number */
      case 0x03:
      case 0x83:
	  break;
      case 0x02:
      case 0xF8:
	  sprintf (errMsg, "'%s'\ninvalid magic number %02x [FoxBASE format]",
		   path, *bf);
	  goto dbf_bad_magic;
      case 0xF5:
	  sprintf (errMsg,
		   "'%s'\ninvalid magic number %02x [FoxPro 2.x (or earlier) format]",
		   path, *bf);
	  goto dbf_bad_magic;
      case 0x30:
      case 0x31:
      case 0x32:
	  sprintf (errMsg,
		   "'%s'\ninvalid magic number %02x [Visual FoxPro format]",
		   path, *bf);
	  goto dbf_bad_magic;
      case 0x43:
      case 0x63:
      case 0xBB:
      case 0xCB:
	  sprintf (errMsg, "'%s'\ninvalid magic number %02x [dBASE IV format]",
		   path, *bf);
	  goto dbf_bad_magic;
      default:
	  sprintf (errMsg, "'%s'\ninvalid magic number %02x [unknown format]",
		   path, *bf);
	  goto dbf_bad_magic;
      };
 


сигнатуры dbf http://www.autopark.ru/ASBProgrammerGuide/DBFSTRUC.HTM
  
Наверх
www  
IP записан
 
Mink Snopes
Junior Member
**
Отсутствует


bookkeeping considered
harmful

Сообщений: 30
Местоположение: Dombabwe
Зарегистрирован: 05. Ноября 2013
Re: 1sqlite
Ответ #844 - 10. Ноября 2016 :: 12:28
Печать  
Ага, но дело в том, что и с сигнатурой 0x03 не все читает. Разбираться в таком коде мне как-то стремно.
Код (C++)
Выбрать все
	  /* something is going the wrong way; creating a stupid default table */
	  xname = gaiaDoubleQuotedSql ((const char *) argv[2]);
	  sql = sqlite3_mprintf ("CREATE TABLE \"%s\" (PKUID INTEGER)", xname); 


  
Наверх
 
IP записан
 
Djelf
God Member
*****
На связи


Ubuntu + wine@etersoft
+ 1C 7.7

Сообщений: 633
Местоположение: Питер
Зарегистрирован: 02. Ноября 2007
Пол: Мужской
Re: 1sqlite
Ответ #845 - 10. Ноября 2016 :: 12:43
Печать  
Да, забавный комментарий  Улыбка
О... да там все совсем плохо...
Код (C++)
Выбрать все
 \note supported DBF data types are:
 \li 'C' text string [default]
 \li 'N' numeric
 \li 'D' date
 \li 'L' boolean
 



К сожалению, другого расширения к sqlite для чтения dbf я не нашел.
  
Наверх
www  
IP записан
 
Grey77
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 23
Зарегистрирован: 22. Мая 2012
Re: 1sqlite
Ответ #846 - 19. Ноября 2016 :: 13:07
Печать  
Добрый день. Подскажите как сделать запрос в 1sqlite на ТИС. Нужно сделать отбор товаров номенклатуры с ценами сразу.
текст="SELECT
     |Товары.code КодТовара,
     |Товары.id     [Номенклатура :Справочник.Номенклатура]
а что далее написать не знаю.
Например нужно сделать отбор всех товаров с закупочной и оптовой ценой
  
Наверх
 
IP записан
 
Djelf
God Member
*****
На связи


Ubuntu + wine@etersoft
+ 1C 7.7

Сообщений: 633
Местоположение: Питер
Зарегистрирован: 02. Ноября 2007
Пол: Мужской
Re: 1sqlite
Ответ #847 - 19. Ноября 2016 :: 16:28
Печать  
Наоборот надо. Сначала выбираем цены по типу, потом к ним клеим константы. Благодаря тому что sqlite умеет GROUP BY sort цена будет выбрана из нужной строки. Ну а потом если нужна номенклатура без цен клеим ее union`ом. Если нужны 2 колонки с ценами то либо case, либо 2 запроса с union. tmpНоменклатура - список значений выгруженный во временную таблицу.

Пример:
Код
Выбрать все
SELECT
max(Константы.DATE||Константы.TIME)
,Цены.PARENTEXT [Номенклатура $Справочник.Номенклатура]
,Цены.ТипЦен [ТипЦен $Справочник.ТипыЦен]
,Константы.VALUE [Цена $Число]

FROM  Справочник_Цены AS Цены
LEFT JOIN [_1S.Const] AS Константы
	ON Цены.ID=Константы.OBJID
	AND Константы.ID=:ИсторияРеквизита.Цены.Цена
	AND Константы.DATE<=:НачДата
WHERE Цены.ТипЦен = :Цена1 OR Цены.ТипЦен = :Цена2
 AND Цены.PARENTEXT IN (SELECT val FROM tmpНоменклатура)
GROUP by Цены.ТипЦен,Цены.PARENTEXT
HAVING Константы.VALUE NOTNULL
 


  
Наверх
www  
IP записан
 
Grey77
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 23
Зарегистрирован: 22. Мая 2012
Re: 1sqlite
Ответ #848 - 20. Ноября 2016 :: 15:23
Печать  
Если не сложно, приведите рабочий пример. Вообще не понял про константы.
  
Наверх
 
IP записан
 
Djelf
God Member
*****
На связи


Ubuntu + wine@etersoft
+ 1C 7.7

Сообщений: 633
Местоположение: Питер
Зарегистрирован: 02. Ноября 2007
Пол: Мужской
Re: 1sqlite
Ответ #849 - 20. Ноября 2016 :: 16:54
Печать  
Это рабочий пример для тис.

Чтобы понять про константы нужно прочитать описание таблицы констант, понять ее структуру и только потом делать запросы http://www.script-coding.com/v77tables.html
« Последняя редакция: 20. Ноября 2016 :: 18:50 - Djelf »  
Наверх
www  
IP записан
 
Grey77
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 23
Зарегистрирован: 22. Мая 2012
Re: 1sqlite
Ответ #850 - 26. Ноября 2016 :: 19:43
Печать  
Добрый день. Подскажите как в запросе сделать проверку что значение реквизита не пустая строка.
Есть у справочника номенклатура реквизит КодыПоставщика - тип строка (80) символов
  
Наверх
 
IP записан
 
Djelf
God Member
*****
На связи


Ubuntu + wine@etersoft
+ 1C 7.7

Сообщений: 633
Местоположение: Питер
Зарегистрирован: 02. Ноября 2007
Пол: Мужской
Re: 1sqlite
Ответ #851 - 26. Ноября 2016 :: 20:17
Печать  
Grey77 писал(а) 26. Ноября 2016 :: 19:43:
Добрый день. Подскажите как в запросе сделать проверку что значение реквизита не пустая строка.
Есть у справочника номенклатура реквизит КодыПоставщика - тип строка (80) символов

WHERE trim(КодыПоставщика)  != ''
Или
WHERE КодыПоставщика  > ''
Второй вариант интереснее, collate в стиле 1с пробелы не учитывает, следовательно все что не пробел - больше! И сможет использовать индекс по полю КодыПоставщика если у поля установлен признак (сортировка/отбор).

  
Наверх
www  
IP записан
 
Grey77
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 23
Зарегистрирован: 22. Мая 2012
Re: 1sqlite
Ответ #852 - 28. Ноября 2016 :: 14:39
Печать  
Djelf писал(а) 26. Ноября 2016 :: 20:17:
Grey77 писал(а) 26. Ноября 2016 :: 19:43:
Добрый день. Подскажите как в запросе сделать проверку что значение реквизита не пустая строка.
Есть у справочника номенклатура реквизит КодыПоставщика - тип строка (80) символов

WHERE trim(КодыПоставщика)  != ''
Или
WHERE КодыПоставщика  > ''
Второй вариант интереснее, collate в стиле 1с пробелы не учитывает, следовательно все что не пробел - больше! И сможет использовать индекс по полю КодыПоставщика если у поля установлен признак (сортировка/отбор).


Спасибо большое за быструю помощь
  
Наверх
 
IP записан
 
Grey77
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 23
Зарегистрирован: 22. Мая 2012
Re: 1sqlite
Ответ #853 - 29. Ноября 2016 :: 14:38
Печать  
Добрый день. Снова нужна помощь.
Подскажите как в запросе сделать проверку, что значение реквизита "Число"?
Есть у справочника номенклатура реквизит КодыПоставщика - тип строка (80) символов. Нужно отобрать все товары, в которых строка "КодыПоставщика" состоит только из цифр.
  
Наверх
 
IP записан
 
Djelf
God Member
*****
На связи


Ubuntu + wine@etersoft
+ 1C 7.7

Сообщений: 633
Местоположение: Питер
Зарегистрирован: 02. Ноября 2007
Пол: Мужской
Re: 1sqlite
Ответ #854 - 29. Ноября 2016 :: 19:02
Печать  
Grey77 писал(а) 29. Ноября 2016 :: 14:38:
Добрый день. Снова нужна помощь.
Подскажите как в запросе сделать проверку, что значение реквизита "Число"?
Есть у справочника номенклатура реквизит КодыПоставщика - тип строка (80) символов. Нужно отобрать все товары, в которых строка "КодыПоставщика" состоит только из цифр.

Штатно можно, но перебирать все лишние символы в case слишком громоздко. Остальные варианты при возможной длине числа в 80 символов не надежны (будет переполнение).
Можно еще попробовать upper(Перем)=lower(Перем) + фильр на спец символы...

Проще нарисовать функцию-расширение на си...
  
Наверх
www  
IP записан
 
Переключение на Главную Страницу Страницы: 1 ... 55 56 [57] 58 59 ... 79
ОтправитьПечать