Переключение на Главную Страницу Страницы: 1 ... 69 70 [71] 72 73 ... 79 ОтправитьПечать
Очень популярная тема (более 25 ответов) 1sqlite (число прочтений - 456743 )
OlegY
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 16
Зарегистрирован: 21. Августа 2022
Re: 1sqlite
Ответ #1050 - 04. Сентября 2022 :: 11:50
Печать  
OlegY писал(а) 03. Сентября 2022 :: 08:31:
Здравствуйте, Djelf!

А скажите пожалуйста в 1sqlite работает запрос такого вида:

INSERT INTO T_Flg(kod_new,kod_old,naim_o,naim_n,kol_up)
VALUES('17310','8801046898277','Dental Clinic 2080 з/паста 125г Мягкая защита 1/36','ЗП Дентал клиник 125',1);      ?

У меня такой запрос с помощью ВыполнитьЗапрос() вываливается с ошибкой, но ошибку никакую в ОписаниеОшибки() не выводит и в таблицу ничего не добавляет.


    Разобрался. Необходимо в запросе прописывать все колонки таблицы и соответственно все значения(даже пустые). Странно, в описании SQLITE читал, что в данном запросе можно указывать только необходимые данные.
  
Наверх
 
IP записан
 
OlegY
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 16
Зарегистрирован: 21. Августа 2022
Re: 1sqlite
Ответ #1051 - 08. Сентября 2022 :: 08:01
Печать  
Djelf писал(а) 28. Августа 2022 :: 19:05:
[quote author=776F7C65617838364E636F6762207C7B0E0 link=1214205575/1042#1042 date=1661706767]
Импорт заказов из xls с помощью йоксель аналогичен.
https://gyazo.com/321ed8267bfb37f8d60ff2b6ab0dd187
https://gyazo.com/046e7292ffad3c7e039e3507e20ae602
Может натолкнет на некоторые идеи.


Здравствуйте Djelf! Скажите пожалуйста, а Йоксель xlsx импортирует? А то я скачал демо конфигурацию с оф. сайта Йокселя.  Попробовал открыть несколько прайс-листов. Везде вылет с одной и той же ошибкой:
  Таб.Открыть (ВыбФайл, ТипФайла, ВыбСжиматьКартинки);
{Обработка.Вьюер.Форма.Модуль(44)}: Невозможно открыть файл: Возможно, файл не является составным OLE-файлом
  
Наверх
 
IP записан
 
Djelf
God Member
*****
Отсутствует


Ubuntu + wine@etersoft
+ 1C 7.7

Сообщений: 631
Местоположение: Питер
Зарегистрирован: 02. Ноября 2007
Пол: Мужской
Re: 1sqlite
Ответ #1052 - 08. Сентября 2022 :: 11:37
Печать  
OlegY писал(а) 08. Сентября 2022 :: 08:01:
Djelf писал(а) 28. Августа 2022 :: 19:05:
[quote author=776F7C65617838364E636F6762207C7B0E0 link=1214205575/1042#1042 date=1661706767]
Импорт заказов из xls с помощью йоксель аналогичен.
https://gyazo.com/321ed8267bfb37f8d60ff2b6ab0dd187
https://gyazo.com/046e7292ffad3c7e039e3507e20ae602
Может натолкнет на некоторые идеи.


Здравствуйте Djelf! Скажите пожалуйста, а Йоксель xlsx импортирует? А то я скачал демо конфигурацию с оф. сайта Йокселя.  Попробовал открыть несколько прайс-листов. Везде вылет с одной и той же ошибкой:
  Таб.Открыть (ВыбФайл, ТипФайла, ВыбСжиматьКартинки);
{Обработка.Вьюер.Форма.Модуль(44)}: Невозможно открыть файл: Возможно, файл не является составным OLE-файлом
   


Увы, но нет. УжастБухгалтерии, создатель Йокселя, начал делать палагины импорта для Йокселя, но мне их собрать и подключить так и не удалось.
LibreOffice умеет конвертировать в пакетном режиме, но там придется слегка попарится (передача путей между Wine и Linux) это будет консольное преобразование.
Импорт не делал (пусть мучаются), а экспорт работает сейчас стабильно.
  
Наверх
www  
IP записан
 
OlegY
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 16
Зарегистрирован: 21. Августа 2022
Re: 1sqlite
Ответ #1053 - 08. Сентября 2022 :: 12:22
Печать  
Djelf писал(а) 08. Сентября 2022 :: 11:37:
[quote author=4E56455C5841010F775A565E5B194542370 link=1214205575/1051#1051 date=1662624067][quote author=1C323D343E580 link=1214205575/1043#1043 date=1661713559][quote author=776F7C65617838364E636F6762207C7B0E0 link=1214205575/1042#1042 date=1661706767]
Увы, но нет. УжастБухгалтерии, создатель Йокселя, начал делать палагины импорта для Йокселя, но мне их собрать и подключить так и не удалось.
LibreOffice умеет конвертировать в пакетном режиме, но там придется слегка попарится (передача путей между Wine и Linux) это будет консольное преобразование.
Импорт не делал (пусть мучаются), а экспорт работает сейчас стабильно.

    Понял. Спасибо. Тогда попробую через Либре офис напрямую проимпортировать. Он, если не визуализировать окно Либре офиса импортирует довольно сносно. Я так накладные .odt импортирую. Правда чтение всей таблицы одним заходом у меня в 1с 77 не получилось. 1с писала плохой тип переменной. Пришлось использовать внешнюю dll на c#(она тоже обращается к Либре офису, но там нет проблем с плохим типом переменной).
« Последняя редакция: 08. Сентября 2022 :: 19:48 - OlegY »  
Наверх
 
IP записан
 
OlegY
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 16
Зарегистрирован: 21. Августа 2022
Re: 1sqlite
Ответ #1054 - 30. Сентября 2022 :: 21:04
Печать  
Djelf писал(а) 08. Сентября 2022 :: 11:37:
[quote author=4E56455C5841010F775A565E5B194542370 link=1214205575/1051#1051 date=1662624067][quote author=1C323D343E580 link=1214205575/1043#1043 date=1661713559][quote author=776F7C65617838364E636F6762207C7B0E0 link=1214205575/1042#1042 date=1661706767]
Импорт не делал (пусть мучаются), а экспорт работает сейчас стабильно.


  Хорошо работает импорт xlsx через ado. Но требуется установка нового пакета от MS: https://www.microsoft.com/en-us/download/confirmation.aspx?id=13255
   Также строка подключения выглядит следующим образом:
"Provider=Microsoft.ACE.OLEDB.12.0;Data Source= " + ИмяФайла + ";Extended Properties=""Excel 12.0;HDR=NO;  IMEX=1;""";
Этот провайдер читает также и xls файлы.
  Для внедрения я использовал готовый пример: https://www.skalnyy.com/1s-universalnaya-zagruzka-iz-excel-obrabotkoj/
   Правда в нём автор напутал с фильтрами в ФС.ВыбратьФайл, поэтому для корректного отображения файлов Эксель необходимо только поправить фильтры.
  
Наверх
 
IP записан
 
Zhenya
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 37
Зарегистрирован: 18. Октября 2010
Пол: Женский
Re: 1sqlite
Ответ #1055 - 14. Октября 2022 :: 13:47
Печать  
Доброго дня всем, кто еще остался на 7.7, а так же знатокам 1с++, 1sqlite и прекрасного класса "ПоставщикДанных" Улыбка

Столкнулась со странным поведением класса ПоставщикДанных.Справочник во время поиска при установленных отборах: если на ПоставщикДанных наложить несколько условий отбора (больше 2-х) - то во время поиска, неважно посимвольного по колонке, или по целому слову, происходит сбой в табличном поле и на месте найденного появляется последний элемент в списке справочника. Более того ломается весь список в табличном поле - элементы разбегаются в хаотичном порядке, последний элемент, который "встаёт" на место найденного по поиску дублируется множество раз . Порядок элементов восстанавливается, если сделать End - Home и все элементы возвращаются на свои места и даже тот элемент который надо найти, перелистыванием находится на своём месте. Слом происходит именно во время поиска.
При чём, слом происходит только если искомый элемент не попадает в "окно" табличного поля, отображаемое на форме. Если элемент "виден" в списке - то поиск его проходит нормально.

Отладка показала, что поиск то работает, и элемент справочника находится, но в момент позиционирования на него
Код (C++)
Выбрать все
ТабличноеПоле.ТекущаяСтрока = ЗначенияВыборки.ПолучитьЗначение(1,1) 


в табличном поле позиция найденного элемента заменяется последним элементом справочника!
Такое ощущение что ломаются какие то внутренние индексы класса связанные с источником данных?

1сpp 3.2.4.1
1sqlite 1.0.2.6/3.36.0.26 by Djelf
ПоставщикДанных 5.0.5 23.05.2014
ПрямыеЗапросы 1.8.6 22.05.2013

Может кто-то уже сталкивался и знает как исправить?
  
Наверх
 
IP записан
 
Zhenya
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 37
Зарегистрирован: 18. Октября 2010
Пол: Женский
Re: 1sqlite
Ответ #1056 - 17. Октября 2022 :: 12:01
Печать  
Zhenya писал(а) 14. Октября 2022 :: 13:47:
Доброго дня всем, кто еще остался на 7.7, а так же знатокам 1с++, 1sqlite и прекрасного класса "ПоставщикДанных" Улыбка

Столкнулась со странным поведением класса ПоставщикДанных.Справочник во время поиска при установленных отборах: если на ПоставщикДанных наложить несколько условий отбора (больше 2-х) - то во время поиска, неважно посимвольного по колонке, или по целому слову, происходит сбой в табличном поле и на месте найденного появляется последний элемент в списке справочника. Более того ломается весь список в табличном поле - элементы разбегаются в хаотичном порядке, последний элемент, который "встаёт" на место найденного по поиску дублируется множество раз . Порядок элементов восстанавливается, если сделать End - Home и все элементы возвращаются на свои места и даже тот элемент который надо найти, перелистыванием находится на своём месте. Слом происходит именно во время поиска.
При чём, слом происходит только если искомый элемент не попадает в "окно" табличного поля, отображаемое на форме. Если элемент "виден" в списке - то поиск его проходит нормально.

Отладка показала, что поиск то работает, и элемент справочника находится, но в момент позиционирования на него
Код (C++)
Выбрать все
ТабличноеПоле.ТекущаяСтрока = ЗначенияВыборки.ПолучитьЗначение(1,1) 


в табличном поле позиция найденного элемента заменяется последним элементом справочника!
Такое ощущение что ломаются какие то внутренние индексы класса связанные с источником данных?

1сpp 3.2.4.1
1sqlite 1.0.2.6/3.36.0.26 by Djelf
ПоставщикДанных 5.0.5 23.05.2014
ПрямыеЗапросы 1.8.6 22.05.2013

Может кто-то уже сталкивался и знает как исправить?
trad писал(а) 17. Октября 2022 :: 07:54:
ТП ведет себя подобным образом когда не обеспечена уникальность ключа порядка. Копайте в эту сторону

Хм, начала копать.
Поскольку поиск делаю по наименованию - ключом порядка выступает ТекущийОбъект.idx_DESCR
Включила отладку, увидела что при включённых отборах по полям для которых в бд включён отбор по реквизиту - при поиске выбирается индекс с этим реквизитом... - и поиск ломается
Если в отборе поставщика не используются поля с включёнными отборами - используется индекс по наименованию, как и в ключе порядка - и поиск работает как надо.

Ушла думать

Итак да, отключение признака отбор у реквизитов справочника, которые я использую в отборе поставщика данных, проблему решило.
Интересно, а можно как то влиять на выбор индексов в ПрямомЗапросе, которым пользуется ПоставщикДанных?
  
Наверх
 
IP записан
 
Zhenya
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 37
Зарегистрирован: 18. Октября 2010
Пол: Женский
Re: 1sqlite
Ответ #1057 - 19. Октября 2022 :: 09:32
Печать  
Zhenya писал(а) 17. Октября 2022 :: 12:01:
1sqlite 1.0.2.6/3.36.0.26 by Djelf

В общем плюнула на навороты последнего 1sqlite, восстановила старенькую орефковскую версию (1.0.2.6 от 03.02.2012) и всё заработало так как и задумывал автор класса.
  
Наверх
 
IP записан
 
Arbuz
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 57
Зарегистрирован: 06. Февраля 2019
Re: 1sqlite
Ответ #1058 - 28. Ноября 2022 :: 12:24
Печать  
А в чём разница версий?

3.36.0.26 10.06.22 670720
3.36.0.26 23.11.22 683520
  
Наверх
 
IP записан
 
Djelf
God Member
*****
Отсутствует


Ubuntu + wine@etersoft
+ 1C 7.7

Сообщений: 631
Местоположение: Питер
Зарегистрирован: 02. Ноября 2007
Пол: Мужской
Re: 1sqlite
Ответ #1059 - 29. Ноября 2022 :: 06:40
Печать  
Arbuz писал(а) 28. Ноября 2022 :: 12:24:
А в чём разница версий?

3.36.0.26 10.06.22 670720
3.36.0.26 23.11.22 683520

+json https://www.sqlite.org/json1.html во второй версии, он внезапно понадобился для диадока

upd, примерно вот так работает, быстро и просто, так даже проще, чем xml через XPath прогонять
Код (SQL)
Выбрать все
тзФирмы=База.НовыйЗапрос().ВыполнитьЗапрос("
|SELECT
| json_extract(value,'$.OrgId') OrgId
| ,json_extract(value,'$.Boxes[0].BoxId') BoxId
|FROM json_each('"+СписокФирм+"','$.Organizations')
|");
 

« Последняя редакция: 29. Ноября 2022 :: 12:31 - Djelf »  
Наверх
www  
IP записан
 
Arbuz
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 57
Зарегистрирован: 06. Февраля 2019
Re: 1sqlite
Ответ #1060 - 29. Ноября 2022 :: 10:35
Печать  
О, круть! \ (•◡•) /
  
Наверх
 
IP записан
 
Ветер в поле
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 40
Зарегистрирован: 06. Октября 2010
Пол: Мужской
Re: 1sqlite
Ответ #1061 - 21. Декабря 2022 :: 18:51
Печать  
Djelf!
Гигантское спасибо за работу над компонентой! И особенно за последнюю версию, где была добавлена работы с JSON. Я обычно пользовался известным разбором через JavaScript, но у него есть существенное ограничение на размер данных (пределы в районе 500К).

Чтобы не переписывать старый код, то написал свой разбор с помощью 1SQLite.

Код
Выбрать все
//*****************************************************************************
//	На входе строка в текущей системной кодировке
Функция РазобратьВСписок(Стр) Экспорт

	оБДSQLite = СоздатьОбъект("SQLiteBase");
	оБДSQLite.Открыть(":memory:");
	итJSON = оБДSQLite.НовыйЗапрос().ВыполнитьЗапрос(
		"SELECT
		| key as Ключ, atom as Значение, type as Тип, id as [ИД $Число.10.0], parent as [ИДРодителя $Число.10.0]
		|FROM json_tree('" + Стр + "', '$')", СоздатьОбъект("ИндексированнаяТаблица"));

	итОбъектов = СоздатьОбъект("ИндексированнаяТаблица");
	итОбъектов.НоваяКолонка("ИД");
	итОбъектов.НоваяКолонка("Объект");

	ИндексИДОбъекта = итОбъектов.ДобавитьИндекс("ИД", "ИД", 1);

	ТекИДОбъекта = 0;
	ТекОбъект = СоздатьОбъект("СписокЗначений");

	итОбъектов.НоваяСтрока();
	итОбъектов.ИД = ТекИДОбъекта;
	итОбъектов.Объект = ТекОбъект;

	итJSON.ВыбратьСтроки();
	Пока итJSON.ПолучитьСтроку() = 1 Цикл
		ТекТип = итJSON.Тип;
		Если Найти("text,integer,true,false,null", ТекТип) > 0 Тогда
			ТекЗначение = итJSON.Значение;

		ИначеЕсли Найти("object,array", ТекТип) > 0 Тогда
			Если итJSON.ИД = 0 Тогда
				Продолжить; //это уже обработано еще до цикла
			КонецЕсли;

			ТекЗначение = СоздатьОбъект("СписокЗначений");

			итОбъектов.НоваяСтрока();
			итОбъектов.ИД = итJSON.ИД;
			итОбъектов.Объект = ТекЗначение;

		ИначеЕсли ТекТип = "real" Тогда
			ТекЗначение = Окр(итJSON.Значение, 8); //чтобы не было значений типа 1.19999999999999

		Иначе
			Сообщить("РазобратьВСписок: Неизвестный тип значения - " + ТекТип + ". Значение " + итJSON.Значение);
			Продолжить;
		КонецЕсли;

		Если ТекИДОбъекта <> итJSON.ИДРодителя Тогда
			ТекИДОбъекта = итJSON.ИДРодителя;
			Если итОбъектов.НайтиСтроку(ИндексИДОбъекта, ТекИДОбъекта, 0, 1) = 0 Тогда
				Сообщить("РазобратьВСписок: Какая-то ошибка - не найден объект, который уже должен был быть загружен - " + ТекИДОбъекта);
				ТекИДОбъекта = -1;
				Продолжить;
			КонецЕсли;

			ТекОбъект = итОбъектов.Объект;
		КонецЕсли;

		ТекОбъект.ДобавитьЗначение(ТекЗначение, Строка(итJSON.Ключ));
	КонецЦикла;

	Возврат итОбъектов.ПолучитьЗначение(1, "Объект");

КонецФункции //РазобратьВСписок
 

  
Наверх
 
IP записан
 
Ветер в поле
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 40
Зарегистрирован: 06. Октября 2010
Пол: Мужской
Re: 1sqlite
Ответ #1062 - 21. Декабря 2022 :: 18:54
Печать  
Вдогонку...
Новый алгоритм оказался примерно в 5 раз быстрее, чем через использование JavaScript
  
Наверх
 
IP записан
 
Djelf
God Member
*****
Отсутствует


Ubuntu + wine@etersoft
+ 1C 7.7

Сообщений: 631
Местоположение: Питер
Зарегистрирован: 02. Ноября 2007
Пол: Мужской
Re: 1sqlite
Ответ #1063 - 23. Декабря 2022 :: 13:28
Печать  
Ветер в поле писал(а) 21. Декабря 2022 :: 18:54:
Вдогонку...
Новый алгоритм оказался примерно в 5 раз быстрее, чем через использование JavaScript


5х это превосходно, JavaScript очень эффективен, но sqlite круче!

Ты точно уверен что нельзя распарсить через json_each/json_extract?
Это действительно рекурсивный файл?
У json_tree оверхед достаточно большой, и хотя ты выбираешь данные без оверхеда, это может иметь значение (скинь файлик).
Возможно в where лишний мусор стоит убрать на этапе выборки.

P.S. sqlite невероятно эффективен, а вот почему, читаем неоконченную книгу чуток ниже.

P.P.S. Кому скучно, читаем как создавалось sqlite и к чему это привело:
https://www.compileralchemy.com/books/sqlite-internals/
  
Наверх
www  
IP записан
 
Ветер в поле
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 40
Зарегистрирован: 06. Октября 2010
Пол: Мужской
Re: 1sqlite
Ответ #1064 - 23. Декабря 2022 :: 14:53
Печать  
У меня большинство обменов со сторонним софтом (1с8.3, интеграции с лабораториями, внутренние API) выполнены с использованием JSON. Переписывать их нет ни малейшего желания. Да и увеличение эффективности в сотые доли секунды никогда это не оправдают. Файл JSON в 200К парсится за 0.017 с. JS справляется с этим за 0.079. Смысла в повышении эффективности крайне мало. А вот ограничение в 500К было крайне неприятным - не всякий файл было легко разбить на небольшие фрагменты. Самый большой мой файл JSON размером 3400К распарсился за 1 с. Это в разы быстрее, чем парсинг XML файлов такого объема.
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1 ... 69 70 [71] 72 73 ... 79
ОтправитьПечать