Переключение на Главную Страницу Страницы: 1 ... 64 65 [66] 67 68 ... 79 ОтправитьПечать
Очень популярная тема (более 25 ответов) 1sqlite (число прочтений - 458825 )
alyuev
God Member
*****
Отсутствует


Гражданин Вселенной

Сообщений: 850
Местоположение: Одесса
Зарегистрирован: 07. Декабря 2007
Пол: Мужской
Re: 1sqlite
Ответ #975 - 12. Июня 2018 :: 08:16
Печать  
Спасибо за ответ. Даже если только delete получится - будет уже что-то...!
  

1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
Наверх
IP записан
 
Djelf
God Member
*****
Отсутствует


Ubuntu + wine@etersoft
+ 1C 7.7

Сообщений: 633
Местоположение: Питер
Зарегистрирован: 02. Ноября 2007
Пол: Мужской
Re: 1sqlite
Ответ #976 - 12. Июня 2018 :: 16:42
Печать  
alyuev писал(а) 12. Июня 2018 :: 08:16:
Спасибо за ответ. Даже если только delete получится - будет уже что-то...!


3.24.0.22 - альфа версия с поддержкой Delete (кто не спрятался, в смысле не забэкапился - я не виноват, и... "не пытайтесь держать его таким образом").
Это именно Удалить(1), а не пометка удаления.

P.S.
Не знаю как пнуть движок 1с, чтобы он перечитывал открытые таблицы...
Т.е. Открыта форма справочника и в нем удалили элемент (навсегда), штатные методы обновления - обновляют, из 1sqlite - не работают.
В 1Cdllrun используется "CUsersSet::IncrNetChangesCnt();"
Но оно не робит...

  
Наверх
www  
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1sqlite
Ответ #977 - 13. Июня 2018 :: 07:23
Печать  
А если увеличить 1SUSERS.NETCHGCN вручную?
  

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


Ubuntu + wine@etersoft
+ 1C 7.7

Сообщений: 633
Местоположение: Питер
Зарегистрирован: 02. Ноября 2007
Пол: Мужской
Re: 1sqlite
Ответ #978 - 13. Июня 2018 :: 08:00
Печать  
berezdetsky писал(а) 13. Июня 2018 :: 07:23:
А если увеличить 1SUSERS.NETCHGCN вручную?

Спасибо за идею. Проверил меняется ли в 1SUSERS NETCHGCN. Меняется.
Попробовал добавить CUsersSet::IncrUsersCnt(), тоже меняется.
Проверил изменяемую таблицу и индекс - и то и другое меняется.
Непонятненько...

Но вроде ничего страшного. Проверил удаление штатными свойствами 1С на двух клиентах - на втором тоже подергать список пришлось.
А вот почему на том клиенте в котором удаляется сразу не меняется.
Счетчик какой то надо поискать...
  
Наверх
www  
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1sqlite
Ответ #979 - 13. Июня 2018 :: 11:09
Печать  
Есть такая настройка в режиме предприятия - "Период опроса изменений Базы Данных". Оно перечитывает NETCHGCN с этой периодичностью, чтобы узнать были ли изменения данных в других сеансах. Свои изменения 1С видело сразу, на сколько я помню. Наверно там есть ещё какой-то флаг в движке.
  

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


Ubuntu + wine@etersoft
+ 1C 7.7

Сообщений: 633
Местоположение: Питер
Зарегистрирован: 02. Ноября 2007
Пол: Мужской
Re: 1sqlite
Ответ #980 - 13. Июня 2018 :: 16:49
Печать  
berezdetsky писал(а) 13. Июня 2018 :: 11:09:
Есть такая настройка в режиме предприятия - "Период опроса изменений Базы Данных". Оно перечитывает NETCHGCN с этой периодичностью, чтобы узнать были ли изменения данных в других сеансах. Свои изменения 1С видело сразу, на сколько я помню. Наверно там есть ещё какой-то флаг в движке.


Да... в 1Cdllrun дергают еще Field6++, но в 1с++ другая структура хидеров (тут я не очень понимаю).


Код (C++)
Выбрать все
class CStore_Spr: public CStoreObj{
public:
	int ColValue;
	CObjID ObjID1;
	CObjID ObjID2;
	CString Cod;
	CString Descr;
	CObjID ObjID3;
	int Field4;
	int Field5;
	int Field6;
	long DataS[4];
	CTypeValue * ArrayValue;
	Replace(int NoField, char * value);
	Replace(int NoField, int value);
	CStore_Spr(class CTable  *,class CIndex  *);
	~CStore_Spr();
};
 



Раз удаляется корректно, уже хорошо!

Ладно, пошли дальше. Тут уже нужна помощь зала. Видимо такое развитие:
1. Все это можно производить только в транзакции (заметка себе: проверить откатывается ли она и выдавать ошибку при сбое).
Ой тут косяков наловить много будет.
2. Заблокировать аналогично РазрешитьЗагрузкуРасширений, по типу действий - РазрешитьDelete и т.п.
3. Update сделать можно Подмигивание  Но это упрется в свободное время.

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


Гражданин Вселенной

Сообщений: 850
Местоположение: Одесса
Зарегистрирован: 07. Декабря 2007
Пол: Мужской
Re: 1sqlite
Ответ #981 - 14. Июня 2018 :: 08:02
Печать  
Я за РазрешитьDelete.
  

1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
Наверх
IP записан
 
Sserj
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 77
Зарегистрирован: 25. Октября 2010
Re: 1sqlite
Ответ #982 - 24. Июня 2018 :: 02:33
Печать  
Год назад Djelf писал что иерархию делал по наименованиям
http://www.1cpp.ru/forum/YaBB.pl?num=1214205575/885#890

На днях почитывал доки по sqlite.org и наткнулся на такой вариант:

     with recursive регионы(parentid,id,descr,isfolder,level) as (
     
     select
       parentid, id, descr, isfolder, 0
     from
       [Справочник.Города]
     where
       parentid = :ПустойИД
     
     union all
     
     select
       t.parentid, t.id, t.descr, t.isfolder,(r.level + 1) as level
     from
       [Справочник.Города] as t join регионы as r
       on t.parentid = r.id
     
     order by
       level desc, isfolder, descr collate _1C
     )
     
     select
       id as [Регион :Справочник.Города]
       , descr as [Наименование :Строка]
       , isfolder as [ЭтоГруппа :Число.1.0]
       , parentid as [Родитель :Справочник.Города]
       , level as [Уровень :Число.1.0]
     from
       регионы

Волшебство тут в "ORDER BY level desc". Если будет без desc то получится как обычно сначала 1 уровень, потом 2 и т.д. А при наличии desc получается иерархия.
Долго пытался виртуально в голове это прокрутить но так до конца и не понял как это работает. Успокоил себя тем что это специальная фича для построения графов  Улыбка

Я предполагаю что ORDER BY тут применяется после каждого UNION к очереди. Т.е. в доке написано что делается первый запрос результат помещается в очередь и тут к очереди применяется ORDER после этого берется первая строка из очереди и выполняется второй запрос. Первая строка из очереди помещается в результат CTE а результат из части UNION в очередь и тут опять к очереди применяется ORDER и поэтому со второго уровня оказываются в начале очереди и так далее.
  
Наверх
 
IP записан
 
Djelf
God Member
*****
Отсутствует


Ubuntu + wine@etersoft
+ 1C 7.7

Сообщений: 633
Местоположение: Питер
Зарегистрирован: 02. Ноября 2007
Пол: Мужской
Re: 1sqlite
Ответ #983 - 24. Июня 2018 :: 08:22
Печать  
Sserj писал(а) 24. Июня 2018 :: 02:33:
Год назад Djelf писал что иерархию делал по наименованиям
http://www.1cpp.ru/forum/YaBB.pl?num=1214205575/885#890

Я предполагаю что ORDER BY тут применяется после каждого UNION к очереди. Т.е. в доке написано что делается первый запрос результат помещается в очередь и тут к очереди применяется ORDER после этого берется первая строка из очереди и выполняется второй запрос. Первая строка из очереди помещается в результат CTE а результат из части UNION в очередь и тут опять к очереди применяется ORDER и поэтому со второго уровня оказываются в начале очереди и так далее.


Писал в другой теме.
http://www.1cpp.ru/forum/YaBB.pl?num=1494875208/10#10

Тоже голову сломал. Мое объяснение такое:
При ORDER BY DESCR мы получаем данные для следующего цикла отсортированные от ветвей к корню.
Т.е. вместо того чтобы прогнать сначала первый уровень, потом второй и т.п., мы идем по веткам, пока они не закончятся.
А поскольку WITCH должен вывести данные предыдущий цикла до данных следующего, то и родители не смешиваются, а выводятся как раз над потомками.

Примерно так оно с ORDER BY DESCR считает:
Код (C++)
Выбрать все
Процедура    Рекурсия(Справочник,тзДерево,Родитель,Знач Уровень=0)

	тз=СоздатьОбъект("ТаблицаЗначений");
	тз.НоваяКолонка("Родитель");
	тз.НоваяКолонка("Элемент");
	тз.НоваяКолонка("Уровень");
	тз.НоваяКолонка("ЭтоГруппа");

	Спр=СоздатьОбъект("Справочник."+Справочник);
	Спр.ИспользоватьРодителя(Родитель);
	Спр.ВыбратьЭлементы(1);

	Пока Спр.ПолучитьЭлемент(0) = 1 Цикл
		тз.НоваяСтрока();
		тз.Родитель  = Родитель;
		тз.Элемент   = Спр.ТекущийЭлемент();
		тз.Уровень   = Уровень+1;
		тз.ЭтоГруппа = Спр.ЭтоГруппа();
	КонецЦикла;
	тз.Сортировать("-Уровень,ЭтоГруппа,Элемент");

	тз.ВыбратьСтроки();
	Пока тз.ПолучитьСтроку() = 1 Цикл
		тзДерево.НоваяСтрока();
		тзДерево.Родитель  = тз.Родитель;
		тзДерево.Элемент   = тз.Элемент;
		тзДерево.Уровень   = тз.Уровень;
		тзДерево.ЭтоГруппа = тз.ЭтоГруппа;

		Если тз.ЭтоГруппа=1 Тогда
			Рекурсия(Справочник,тзДерево,тз.Элемент,Уровень+1);
		КонецЕсли;
	КонецЦикла;
КонецПроцедуры
 



P.S. Если кто-то еще верит что базы SQL работают не перебором - откажитесь от этой мысли Подмигивание
« Последняя редакция: 24. Июня 2018 :: 14:13 - Djelf »  
Наверх
www  
IP записан
 
nicesc
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 53
Зарегистрирован: 13. Июня 2009
Пол: Мужской
Re: 1sqlite
Ответ #984 - 26. Июня 2018 :: 10:20
Печать  
Всем привет, наткнулся на особенность SQLite, делюсь с народом.

Вот запрос, который находит все различия в двух таблицах

Код (C++)
Выбрать все
ТекстЗапроса = "
			|SELECT * FROM
			|( SELECT * FROM table1
			|  EXCEPT
			|	SELECT * FROM table2)
			|
			|UNION
			|
			|SELECT * FROM
			|(	SELECT * FROM table2
			|	EXCEPT
			|	SELECT * FROM table1)
			|";
 



Проблема в EXCEPT и UNION. SQLite считает, что у них одинаковый приоритет, поэтому такой запрос отработает не корректно:

Код (C++)
Выбрать все
ТекстЗапроса = "
			|SELECT * FROM
			|(
			|	SELECT * FROM table1
			|	EXCEPT
			|	SELECT * FROM table2
			|
			|UNION
			|
			|	SELECT * FROM table2
			|	EXCEPT
			|	SELECT * FROM table1
			|)
			|";
 

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


Ubuntu + wine@etersoft
+ 1C 7.7

Сообщений: 633
Местоположение: Питер
Зарегистрирован: 02. Ноября 2007
Пол: Мужской
Re: 1sqlite
Ответ #985 - 26. Июня 2018 :: 10:59
Печать  
nicesc писал(а) 26. Июня 2018 :: 10:20:
Всем привет, наткнулся на особенность SQLite, делюсь с народом.


Насколько я понимаю это не особенность sqlite, а норма.

MSSQL - https://docs.microsoft.com/ru-ru/sql/t-sql/language-elements/set-operators-excep...

> Операторы EXCEPT и UNION обрабатываются слева направо в соответствии с их позицией в выражении.
> EXCEPT Возвращает все различные значения, возвращенные запросом, указанным слева от оператора EXCEPT, но отсутствующие в результатах выполнения правого запроса.

Все верно, union без скобок и не должен клеить.
  
Наверх
www  
IP записан
 
nicesc
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 53
Зарегистрирован: 13. Июня 2009
Пол: Мужской
Re: 1sqlite
Ответ #986 - 26. Июня 2018 :: 11:07
Печать  
Согласен, тоже почитал про MS SQL. Не знаю от куда была уверенность в обратном  Круглые глаза
  
Наверх
 
IP записан
 
Djelf
God Member
*****
Отсутствует


Ubuntu + wine@etersoft
+ 1C 7.7

Сообщений: 633
Местоположение: Питер
Зарегистрирован: 02. Ноября 2007
Пол: Мужской
Re: 1sqlite
Ответ #987 - 26. Июня 2018 :: 12:02
Печать  
nicesc писал(а) 26. Июня 2018 :: 10:20:
Вот запрос, который находит все различия в двух таблицах


А вот еще вариант.
Интересно какой быстрее, с двумя EXCEPT или HAVING`ом (на реальных данных).

Код (C++)
Выбрать все
SELECT a
FROM (
SELECT *,1 s ,'t1' FROM t1
UNION
SELECT *,1 s, 't2' FROM t2
)
GROUP BY a
HAVING sum(s)=1
 


« Последняя редакция: 26. Июня 2018 :: 16:31 - Djelf »  
Наверх
www  
IP записан
 
Djelf
God Member
*****
Отсутствует


Ubuntu + wine@etersoft
+ 1C 7.7

Сообщений: 633
Местоположение: Питер
Зарегистрирован: 02. Ноября 2007
Пол: Мужской
Re: 1sqlite
Ответ #988 - 04. Июля 2018 :: 12:53
Печать  
Не дождался релиза  Очень довольный
1sqlite 3.25.0.22 из транка.
https://cloud.mail.ru/public/9znr/ZJ6ULE9aR

Обновлен движок sqlite до 3.25.0 на 2017.07.04

Добавлена процедура База.EnableDelete, База.РазрешитьDelete
Добавлена поддержка запроса DELETE.
Это именно Справочник.Удалить(1), а не пометка на удаление.
Запрос DELETE может быть выполнен в транзакции с ее последующим откатом.
Открытые формы списков на той же сессии 1С в которой происходит DELETE на удаление не реагируют и сами не обновляются.
Другие сессии 1С реагируют нормально, так же как и при работе по сети.
IMHO не критично, это инструмент хирурга, а не пользователя.

В этом движке sqlite3 произошло очередное революционное изменение - поддержка оконных функций, а с ними такие отчеты как ABC-анализ не представляют вообще никакой сложности.

Поскольку sqlite3 наиболее близка по синтаксису с PosgreSQL, можно использовать его руководство https://postgrespro.ru/docs/postgrespro/9.5/tutorial-window

P.S. С UPDATE и INSERT все пока плохо. Читать то я данные научился по разному, хоть FX_ами, хоть без них, а вот куда и как засовывать данные для записи пока не понятно. Запись берет данные из какого то другого места. Видимо это можно сделать только через СоздатьОбъект, а это уже не так интересно и не так просто.
« Последняя редакция: 04. Июля 2018 :: 17:07 - Djelf »  
Наверх
www  
IP записан
 
alyuev
God Member
*****
Отсутствует


Гражданин Вселенной

Сообщений: 850
Местоположение: Одесса
Зарегистрирован: 07. Декабря 2007
Пол: Мужской
Re: 1sqlite
Ответ #989 - 04. Июля 2018 :: 15:21
Печать  
О! Круто!
  

1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
Наверх
IP записан
 
Переключение на Главную Страницу Страницы: 1 ... 64 65 [66] 67 68 ... 79
ОтправитьПечать