1sqlite reborn

Публикация № 559826

Разработка - Разработка внешних компонент

вк sqlite sqlite3 1sqlite 7.7 sql cte

Обновленная версия внешней компоненты для работы с базами данных SQLite и прямыми запросы в ДБФ-базах 1С.

Основана на одноименной ВК Александра Орефков (orefkov) версии 1.0.2.6. Публикация создателем одобрена.

Огромная благодарность Александру за открытый и понятный код 1sqlite. Поизведенная им объем работ для создания этой ВК огромен!

Оригинальная статья и ВК //infostart.ru/public/15977/#com287

Текущая версия 1sqlite 3.15.1.13

Отличия движка sqlite 3.15.1 от используемого в 1sqlite 1.0.2.6 3.7.17 можно посмотреть на странице http://www.sqlite.org/changes.html

ДеревоСТЕ - пример использования СТЕ запроса для простого создания, отображения (используется SQLiteDataProvider для табличного поля 1с++) и работы с деревом справочника номенклатура. Логика свертывания/развертывания групп также на CTE.


История обновления.

Основанием для обновления движка послужил довольно неприятный баг в движке 3.7.10 http://www.sqlite.org/src/info/b7c8682cc1
Первая версия была собрана на ближайшем к оригинальной версии движке sqlite 3.7.11, однако хотелось большего, т.к. вкусных изменений в sqlite было очень много!
Но все сборки на движке 3.8.+ вели себя безобразно - порядок объединения таблиц менялся непредсказуемым образом и запросы чуть сложнее простого select адски тормозили.
Попытки изменить подсказки планировщику sqlite ни к чему не привели и через какое то время стало понятно, что в sqlite 3.8.+ новый планировщик запросов NGQP вообще не обращает на эти подсказки никакого внимания.
Пришлось откатится на последний движок 3.7.17 но и с ним появились проблемы. Добавленная где то между 3.7.10 и 3.7.17 оптимизация по IN для виртуальных таблиц вела себя не корректно и ее пришлось вырезать. В таком виде 1sqlite на движке 3.7.17 вел себы очень не плохо.
Через какое то время вышел движок sqlite 3.8.11.1 и в нем наконец была исправлена работа с виртуальными таблицами.

В процессе работы над движками sqlite, как то потихоньку, но стал понятен и движок 1sqlite и стало возможным кое-что исправить.

1sqlite 1.0.2.6/3.7.17 bf0-3
сражения с оптимизацией по IN в 3.7.17 проиграны, пришлось вырезать оптимизацию из sqlite

1sqlite 1.0.2.6/3.8.11.1 bf4
не падает в поставщике данных для ТП, если в УстановитьТекстЗапроса не указать ИдПоле (редко падало)

1sqlite 1.0.2.6/3.8.11.1 bf5
исправлена типизация перечислений неопределенного вида

1sqlite 1.0.2.6/3.8.11.1 bf6
В провайдер таблицного поля добавлено свойство ОбратныйПорядок
http://www.forum.mista.ru/topic.php?id=770036

1sqlite 1.0.2.6/3.8.11.1 bf7
исправлена загрузка целночисленных переменных из sqlite в 1с
http://www.forum.mista.ru/topic.php?id=774403

1sqlite 1.0.2.6/3.8.11.1 bf8
Исправлено поведение УложитьОбъекты в том случае, если справочник является подчиненным
http://www.forum.mista.ru/topic.php?id=550161

1sqlite 1.0.2.6/3.14.1 bf9
перевод движка на 3.14.1
добавлена обработка  новых переменных sqlite

  #define SQLITE_INDEX_CONSTRAINT_LIKE   65     /* 3.10.0 and later only */
  #define SQLITE_INDEX_CONSTRAINT_GLOB   66     /* 3.10.0 and later only */
  #define SQLITE_INDEX_CONSTRAINT_REGEXP 67     /* 3.10.0 and later only */
  #define SQLITE_INDEX_SCAN_UNIQUE        1     /* Scan visits at most 1 row */

1sqlite 1.0.2.6/3.14.1 bf10
изменена схема подключения виртуальных таблиц 1с, теперь они подключаются как таблицы во временной схеме
добавлен флаг выгрузки в УложитьОбъекты как 5й параметр
    0 - выгружать объекты в неопределенном виде tos23, длинные строки как tos23+хвост
    1 - при выгрузке по иерархиии выгружать только элемены
    2 - при выгрузке по иерархиии выгружать только группы
    3 - при выгрузке по иерархиии выгружать группы и элементы
    http://www.forum.mista.ru/topic.php?id=778632
изменена типизация  :Неопределенный для поддержки  tos23+хвост

1sqlite 1.0.2.6/3.14.1 bf11
восстановлены потеренные при портировании движка sqlite функции upper и lower
восстановлена потерянная типизация перечисления из tos23
добавлена типизация перечисления из tos 13

1sqlite 3.15.1.13

изменена нумерация версий на [версия sqlite].[патчсет]

1sqlite 3.24.0.21
Добавлена передача в sqlite3 целых чисел из базы 1С в диапазоне от -9223372036854775808 до  9223372036854775807.
Добавлена поддержка объекта BinaryDatа в 1С++ и типа BLOB sqlite3
    тип поля BLOB из базы sqlite3 автоматически преобразуется в объект 1С++ BinaryDatа
    объект 1С++ BinaryDatа может быть записан в базу sqlite3 методом Запрос.УстановитьПараметр("@blob",bindata);
Улучшено сообщение при ошибке в методе УстановитьПараметр
    вместо  "Ошибка установки sql-параметра @val - Неизвестный тип значения"
    будет выводится  "Ошибка установки sql-параметра @val - Неизвестный тип значения: ИндексированнаяТаблица"
Устранен вылет из 1С в случае выгрузки результата в OLE объекты, вместо этого будет выведена ошибка выполнения
Заблокированы новые типы поиска в sqlite3 по индексу ISNULL,IS NOTNULL и подобные так как движок поиска по таким ключам в 1С не работает
Устранен вылет из 1С при вызове метода ТабличногоПоля Колонки.Очистить();
Устранен вылет на запросе "SELECT 1 FROM __1s_blob GROUP by block COLLATE _1C", возможно это проявлялось и в других случаях;
Добавлены функции compress(x) и uncompress(x), возвращают blob, чтобы получить текст нужно использовать cast(uncompress(data) as text);

1sqlite 3.25.1.23
Движок sqlite обновлен до 3.25.1
В этом движке очередное революционное изменение - поддержка Оконных функций (Windows functions) и долгожданная возможность переименовать столбец таблицы.

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

Пример использования оконной функции. Замер за месяц показывает примерно так: Запрос 1с 6900мс, Запрос sqlite 400мс.
Запрос sqlite значительно сложнее (его можно переписать 100500 раз разными способами, это просто пример) и тут не поспоришь - 1С даже в 7.7 реализовала громадное упрощение кода запросов, но за все приходится платить, в том числе и за упрощение кода.

	Период с ВыбНачПериода по ВыбКонПериода;
	Количество = Регистр.ОстаткиТМЦ.Количество;
	Номенклатура = Регистр.ОстаткиТМЦ.Номенклатура;
	Функция КоличествоНачОст = НачОст(Количество);
	Функция КоличествоПриход = Приход(Количество);
	Функция КоличествоРасход = Расход(Количество);
	Функция КоличествоКонОст = КонОст(Количество);
	Группировка День все;
	Группировка Номенклатура без групп все ВошедшиеВЗапрос;
WITH DateT (date) AS (  SELECT :НачДата UNION ALL SELECT date(date,'+1 day') FROM DateT WHERE date< :КонДата)

SELECT
	Дата
	,Номенклатура [Номенклатура $Справочник.Номенклатура]
	,НачОст+total(Приход-Расход) OVER ( PARTITION BY Номенклатура ORDER BY Дата ROWS BETWEEN  UNBOUNDED PRECEDING AND 1 PRECEDING) НачОст
	,Приход
	,Расход
	,НачОст+total(Приход-Расход) OVER ( PARTITION BY Номенклатура ORDER BY Дата) КонОст
FROM (
	SELECT
		t1.Дата
		,t2.Номенклатура
		,total(t4.НачОст) НачОст
		,total(t3.Приход) Приход
		,total(t3.Расход) Расход
FROM (
	SELECT date AS Дата from DateT) as t1
	,(SELECT DISTINCT Номенклатура  FROM Регистр_ОстаткиТМЦ WHERE DATE BETWEEN :НачДата AND :КонДата ) as t2
	LEFT JOIN ( SELECT
		Date AS Дата
		,Номенклатура
		,sum(case DEBKRED when 1 then 0 else Количество end) Приход
		,sum(case DEBKRED when 1 then Количество else 0 end) Расход
	FROM Регистр_ОстаткиТМЦ
	WHERE Date BETWEEN :НачДата AND :КонДата
	GROUP BY Дата,Номенклатура
	) as t3 ON t3.Дата = t1.Дата AND t3.Номенклатура=t2.Номенклатура
	LEFT JOIN ( SELECT
		date(Period,'+1 months') AS Дата
		,Номенклатура
		,sum(Количество) НачОст
	FROM РегистрИтоги_ОстаткиТМЦ
	WHERE PERIOD = date( :НачДата,'-1 months')
	GROUP BY Номенклатура
) as t4 ON t4.Номенклатура=t2.Номенклатура
GROUP BY t2.Номенклатура,t1.Дата)
GROUP BY Номенклатура,Дата

История изменений движка sqlite3

Зеркало/Архивы версий 1sqlite, для тех кто не хочет поддерживать дальнейшую разработку https://cloud.mail.ru/public/9znr/ZJ6ULE9aR

Скачать файлы

Наименование Файл Версия Размер
Дерево на CTE

.ert 215,50Kb
9
.ert 215,50Kb 9 Скачать
1sqlite 3.24.0.21

.zip 394,12Kb
3
.zip 394,12Kb 3 Скачать
1sqlite 3.25.1.23

.zip 407,58Kb
9
.zip 3.25.1.23 407,58Kb 9 Скачать

Специальные предложения

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. vandalsvq 1198 07.11.16 14:13 Сейчас в теме
(0) большое спасибо, что не бросаете разработку. Интересно конечно как мои классы (ПрямойЗапрос, ПоставщикДанных) поведут себя на новой компоненте. Но у меня уже 7-ки даже не стоит.
Если вдруг ими пользуетесь, скажите, просто интересно.
user646871_alexey-zmey; artbear; +2 Ответить
2. Djelf 244 07.11.16 15:39 Сейчас в теме
(1) Должны работать быстрее, хотя бы из-за того что по условию с IN выборка может использовать индекс
Группировка и сортировка в новом движке тоже быстрее, причем значительно быстрее.
Возможно некоторые процедуры ПрямогоЗапроса можно было бы переписать с учетом новых возможностей и было бы еще быстрее, но увы не использую.
Как то напрямую получается проще ;)
Сломаться ничего не должно, но в некоторых случаях могут быть парадоксы!
Я об этом писал на форуме 1с++ http://www.1cpp.ru/forum/YaBB.pl?num=1214205575/789#789
P.S. Текущая сборка на 3.15.1 отлично справилась со всеми вариантами и вышла 100% победителем.
4. vandalsvq 1198 08.11.16 12:53 Сейчас в теме
(2) ну буду тогда смотреть, может вести с полей будут.
11. Jill 17 09.11.16 15:22 Сейчас в теме
(2) после приключенией с типизацией, таки, перешел на 1.0.2.6, но, все-таки пришлось возвращаться на 1.0.2.3 именно из-за того, что первые прямые писал с классом прямого запроса.

Запросы кривые, но, на том что есть, скорость падала (в сравнении с 1.0.2.3) в разы (было минуты - стало десятки минут, сначала даже подумал что кэш не используется, как локализую на чем затык приключается - покажу примеры)...

Сейчас потихоньку все переписываю на чистый sqlite...
12. Djelf 244 09.11.16 17:22 Сейчас в теме
(11) 1.0.2.6 они уже разные бывают... смотри ссылку в (2) Найдешь тормозящий запрос на "прямом" кидай пример. И explain QUERY PLAN к нему. В принципе там сразу видно что не так...
13. Jill 17 09.11.16 19:25 Сейчас в теме
(12) на 3.15.0.12 тестил.
Считал последней - обознался.

Если с 3.15.1.13 какие-нибудь грабли вылезут - сообщу.

Извиняюсь за дезинформацию.
14. Djelf 244 09.11.16 21:27 Сейчас в теме
(13) 3.15.0, 3.15.1 - особой разницы в движке нет т.е. то что тормозило на 3.15.0, то и на 3.15.1 будет тормозить. Так что жду запрос и explain.
17. Jill 17 11.11.16 15:32 Сейчас в теме
(14) Djelf,
На малых объемах разница не значительна, на больших - критична

1.0.2.3

1.0.2.3

SELECT 
	Рег.Номенклатура as [Номенклатура $Справочник.Номенклатура],
	Рег.НачалоПериода as [День $Дата], 
	SUM(Рег.КоличествоНачальныйОстаток)  as КолвоНачОст,
	SUM(Рег.КоличествоКонечныйОстаток) as КолвоКонОст,
	SUM(Рег.КоличествоПриход) as КолвоПриход,
	SUM(Рег.КоличествоРасход) as КолвоРасход,
	SUM(Рег.КоличествоВозврат) as КолвоВозвр,
	SUM(Рег.КоличествоНачальныйРезерв) as КолвоРезервНачОст,
	SUM(Рег.КоличествоКонечныйРезерв) as КолвоРезервКонОст,
	SUM(Рег.КоличествоСписание) as КолСпис
FROM  
	( 
	SELECT     

		Р.Номенклатура as Номенклатура,    				
		Р.НачалоПериода as НачалоПериода,  	
		Р.КоличествоНачальныйОстаток  as КоличествоНачальныйОстаток,
		Р.КоличествоКонечныйОстаток as КоличествоКонечныйОстаток,
		Р.КоличествоПриход as КоличествоПриход,		
		0 as КоличествоРасход, 
		0 as КоличествоВозврат,
		0 as КоличествоНачальныйРезерв,
		0 as КоличествоКонечныйРезерв,    		
		0 as КоличествоСписание

	FROM
		vt_totalrg_328_769705020 as Р
	UNION ALL 
  
	SELECT		
		РегРез.Номенклатура as Номенклатура,
		РегРез.НачалоПериода as НачалоПериода,
		0 as КоличествоНачальныйОстаток,
		0 as КоличествоКонечныйОстаток,
		0 as КоличествоПриход,
		0 as КоличествоРасход,
		0 as КоличествоВозврат,
		РегРез.КоличествоНачальныйОстаток  as КоличествоНачальныйРезерв,
		РегРез.КоличествоКонечныйОстаток as КоличествоКонечныйРезерв,    		
		0 as КоличествоСписание

	FROM
		vt_totalrg_4480_769705062 as РегРез

	UNION ALL 
     
	SELECT
		РегРасх.Номенклатура as Номенклатура,    				
		РегРасх.Период as НачалоПериода,
		0  as КоличествоНачальныйОстаток,
		0 as КоличествоКонечныйОстаток,
		0 as КоличествоПриход,
		РегРасх.КоличествоОборот as КоличествоРасход,
		РегРасх.КоличествоВОборот as КоличествоВозврат,
		0 as КоличествоНачальныйРезерв,
		0 as КоличествоКонечныйРезерв,    		
		0 as КоличествоСписание

FROM
		(
	SELECT
		Период
		,Номенклатура
		,SUM(КоличествоОборот) AS КоличествоОборот
		,SUM(КоличествоВОборот) AS КоличествоВОборот
		
	FROM
		(SELECT
			docjourn.DATE AS Период
			,ra_2351.Номенклатура AS Номенклатура
			,CASE WHEN ra_2351.debkred = 0 THEN ra_2351.Количество ELSE -ra_2351.Количество END AS КоличествоОборот
			,CASE WHEN ra_2351.debkred = 0 THEN ra_2351.КоличествоВ ELSE -ra_2351.КоличествоВ END AS КоличествоВОборот
			
		FROM
			[Журнал] AS docjourn
		LEFT JOIN [Регистр.Продажи] AS ra_2351
		ON ra_2351.IDDOC = docjourn.IDDOC
		WHERE (docjourn.idx_DATE_TIME_IDDOC >= '20161101     0     0   ')
		AND (docjourn.idx_DATE_TIME_IDDOC < '20161105     0     0   ')
		AND docjourn.ПродажиФр = 1
		AND
			ra_2351.Номенклатура IN (SELECT Val FROM vt_Номен)
		) AS vt_ra_2351
	GROUP BY
		Период
		,Номенклатура
	HAVING (SUM(КоличествоОборот) <> 0)
	OR (SUM(КоличествоВОборот) <> 0)
	
) as РегРасх

	UNION ALL 


	SELECT   
		РегСпис.Номенклатура as Номенклатура,
		Жур.DATE as НачалоПериода,	
		0  as КоличествоНачальныйОстаток,
		0 as КоличествоКонечныйОстаток,
		0 as КоличествоПриход,
		0 as КоличествоРасход,
		0 as КоличествоВозврат,
		0 as КоличествоНачальныйРезерв,
		0 as КоличествоКонечныйРезерв,    		
		РегСпис.КоличествоРасход as КоличествоСписание

	FROM
		vt_totalrg_328_769705064 as РегСпис

	INNER JOIN
		[Документ.СписаниеТМЦ] as ДокСпис ON ДокСпис.IDDoc = РегСпис.ТекущийДокумент
	LEFT JOIN
		[Журнал] as Жур ON Жур.IDDoc = РегСпис.ТекущийДокумент) Рег

GROUP BY 
	Рег.Номенклатура,
	Рег.НачалоПериода
create table x(
 [IDDOC] char(9) collate _1C
,[ДокОснование] char(13) collate _1C
,[Склад] char(9) collate _1C
,[Контрагент] char(9) collate _1C
,[Валюта] char(9) collate _1C
,[Курс] numeric(11, 4)
,[Счет] char(23) collate _1C
,[TSP3859] char(3) collate _1C
,[Субконто1] char(23) collate _1C
,[TSP3860] char(3) collate _1C
,[Субконто2] char(23) collate _1C
,[TSP3861] char(3) collate _1C
,[Субконто3] char(23) collate _1C
,[TSP3862] char(3) collate _1C
,[СчетНУ] char(23) collate _1C
,[TSP6144] char(3) collate _1C
,[СубконтоНУ1] char(23) collate _1C
,[TSP6145] char(3) collate _1C
,[СубконтоНУ2] char(23) collate _1C
,[TSP6146] char(3) collate _1C
,[СубконтоНУ3] char(23) collate _1C
,[TSP6147] char(3) collate _1C
,[Сумма] numeric(16, 2)
,Комментарий text collate _1C
, idx_IDDOC char(9) collate _1C
)
create table x(
 [IDDOC] char(9) collate _1C
,[LINENO] numeric(4, 0)
,[ACTNO] numeric(6, 0)
,[DEBKRED] numeric(1, 0)
,[Номенклатура] char(9) collate _1C
,[Покупатель] char(9) collate _1C
,[Поставщик] char(9) collate _1C
,[Фирма] char(9) collate _1C
,[Себестоимость] numeric(16, 2)
,[ПродСтоимость] numeric(16, 2)
,[Количество] numeric(16, 5)
,[СебестоимостьВ] numeric(16, 2)
,[ПродСтоимостьВ] numeric(16, 2)
,[КоличествоВ] numeric(16, 5)
, idx_IDDOC_LINENO_ACTNO char(19) collate _1C
)
Подбор индекса для таблицы 1SJOURN:
	Ограничения: ACDATETIM[dx_DATE_TIME_IDDOC]>=; ACDATETIM[dx_DATE_TIME_IDDOC]<; RF2351[ПродажиФр]=; IDDOC=; 
	В кэше не найдено
	Выбран индекс IDDOC: IDDOC
	Стоимость: 20
Подбор индекса для таблицы 1SJOURN:
	Ограничения: ACDATETIM[dx_DATE_TIME_IDDOC]>=; ACDATETIM[dx_DATE_TIME_IDDOC]<; RF2351[ПродажиФр]=; 
	В кэше не найдено
	Выбран индекс ACDATETIM: DTOS(DATE)+TIME+IDDOC
	Стоимость: 20
Подбор индекса для таблицы RA2351:
	Ограничения: IDDOC=; 
	В кэше не найдено
	Выбран индекс IDLINE: IDDOC+STR(LINENO,4)+STR(ACTNO,6)
	Стоимость: 66
Подбор индекса для таблицы DH1790:
	Ограничения: IDDOC=; 
	В кэше не найдено
	Выбран индекс ID: IDDOC
	Стоимость: 12
Подбор индекса для таблицы DH1790:
	Ограничения: IDDOC=; 
	Найдено в кэше
	Выбран индекс ID: IDDOC
	Стоимость: 12
Подбор индекса для таблицы 1SJOURN:
	Ограничения: IDDOC=; 
	В кэше не найдено
	Выбран индекс IDDOC: IDDOC
	Стоимость: 20
Время подготовки запроса: 450 мс, время выполнения запроса: 161 мс.


ПЛАН:

0;0;TABLE vt_totalrg_328_770039760 AS Р
0;0;TABLE vt_totalrg_4480_770039800 AS РегРез
0;0;TABLE Журнал AS docjourn VIRTUAL TABLE INDEX 1:ACDATETIM;    19 !" 0?b 0C?|?*a#dR 0&
1;1;TABLE Регистр.Продажи AS ra_2351 VIRTUAL TABLE INDEX 0:IDLINE;    10 !  0p nHyd!@4# !
0;0;TABLE vt_Номен
0;0;TABLE vt_totalrg_328_770039802 AS РегСпис
1;1;TABLE Документ.СписаниеТМЦ AS ДокСпис VIRTUAL TABLE INDEX 0:ID;    10 !  0p nHyd!(?
2;2;TABLE Журнал AS Жур VIRTUAL TABLE INDEX 0:IDDOC;    10 !  0p nHyd!(?
0;0;TABLE  AS Рег
Показать


1.0.2.6 (3.15)
1.0.2.6

SELECT 
	Рег.Номенклатура as [Номенклатура $Справочник.Номенклатура],
	Рег.НачалоПериода as [День $Дата], 
	SUM(Рег.КоличествоНачальныйОстаток)  as КолвоНачОст,
	SUM(Рег.КоличествоКонечныйОстаток) as КолвоКонОст,
	SUM(Рег.КоличествоПриход) as КолвоПриход,
	SUM(Рег.КоличествоРасход) as КолвоРасход,
	SUM(Рег.КоличествоВозврат) as КолвоВозвр,
	SUM(Рег.КоличествоНачальныйРезерв) as КолвоРезервНачОст,
	SUM(Рег.КоличествоКонечныйРезерв) as КолвоРезервКонОст,
	SUM(Рег.КоличествоСписание) as КолСпис
FROM  
	( 
	SELECT     

		Р.Номенклатура as Номенклатура,    				
		Р.НачалоПериода as НачалоПериода,  	
		Р.КоличествоНачальныйОстаток  as КоличествоНачальныйОстаток,
		Р.КоличествоКонечныйОстаток as КоличествоКонечныйОстаток,
		Р.КоличествоПриход as КоличествоПриход,		
		0 as КоличествоРасход, 
		0 as КоличествоВозврат,
		0 as КоличествоНачальныйРезерв,
		0 as КоличествоКонечныйРезерв,    		
		0 as КоличествоСписание

	FROM
		vt_totalrg_328_769799611 as Р
	UNION ALL 
  
	SELECT		
		РегРез.Номенклатура as Номенклатура,
		РегРез.НачалоПериода as НачалоПериода,
		0 as КоличествоНачальныйОстаток,
		0 as КоличествоКонечныйОстаток,
		0 as КоличествоПриход,
		0 as КоличествоРасход,
		0 as КоличествоВозврат,
		РегРез.КоличествоНачальныйОстаток  as КоличествоНачальныйРезерв,
		РегРез.КоличествоКонечныйОстаток as КоличествоКонечныйРезерв,    		
		0 as КоличествоСписание

	FROM
		vt_totalrg_4480_769799692 as РегРез

	UNION ALL 
     
	SELECT
		РегРасх.Номенклатура as Номенклатура,    				
		РегРасх.Период as НачалоПериода,
		0  as КоличествоНачальныйОстаток,
		0 as КоличествоКонечныйОстаток,
		0 as КоличествоПриход,
		РегРасх.КоличествоОборот as КоличествоРасход,
		РегРасх.КоличествоВОборот as КоличествоВозврат,
		0 as КоличествоНачальныйРезерв,
		0 as КоличествоКонечныйРезерв,    		
		0 as КоличествоСписание

FROM
		(
	SELECT
		Период
		,Номенклатура
		,SUM(КоличествоОборот) AS КоличествоОборот
		,SUM(КоличествоВОборот) AS КоличествоВОборот
		
	FROM
		(SELECT
			docjourn.DATE AS Период
			,ra_2351.Номенклатура AS Номенклатура
			,CASE WHEN ra_2351.debkred = 0 THEN ra_2351.Количество ELSE -ra_2351.Количество END AS КоличествоОборот
			,CASE WHEN ra_2351.debkred = 0 THEN ra_2351.КоличествоВ ELSE -ra_2351.КоличествоВ END AS КоличествоВОборот
			
		FROM
			[Журнал] AS docjourn
		LEFT JOIN [Регистр.Продажи] AS ra_2351
		ON ra_2351.IDDOC = docjourn.IDDOC
		WHERE (docjourn.idx_DATE_TIME_IDDOC >= '20161101     0     0   ')
		AND (docjourn.idx_DATE_TIME_IDDOC < '20161105     0     0   ')
		AND docjourn.ПродажиФр = 1
		AND
			ra_2351.Номенклатура IN (SELECT Val FROM vt_Номен)
		) AS vt_ra_2351
	GROUP BY
		Период
		,Номенклатура
	HAVING (SUM(КоличествоОборот) <> 0)
	OR (SUM(КоличествоВОборот) <> 0)
	
) as РегРасх

	UNION ALL 


	SELECT   
		РегСпис.Номенклатура as Номенклатура,
		Жур.DATE as НачалоПериода,	
		0  as КоличествоНачальныйОстаток,
		0 as КоличествоКонечныйОстаток,
		0 as КоличествоПриход,
		0 as КоличествоРасход,
		0 as КоличествоВозврат,
		0 as КоличествоНачальныйРезерв,
		0 as КоличествоКонечныйРезерв,    		
		РегСпис.КоличествоРасход as КоличествоСписание

	FROM
		vt_totalrg_328_769799694 as РегСпис

	INNER JOIN
		[Документ.СписаниеТМЦ] as ДокСпис ON ДокСпис.IDDoc = РегСпис.ТекущийДокумент
	LEFT JOIN
		[Журнал] as Жур ON Жур.IDDoc = РегСпис.ТекущийДокумент) Рег

GROUP BY 
	Рег.Номенклатура,
	Рег.НачалоПериода
create table x(
 [IDDOC] char(9) collate _1C not null
,[ДокОснование] char(13) collate _1C not null
,[Склад] char(9) collate _1C not null
,[Контрагент] char(9) collate _1C not null
,[Валюта] char(9) collate _1C not null
,[Курс] numeric(11, 4) not null
,[Счет] char(23) collate _1C not null
,[TSP3859] char(3) collate _1C not null
,[Субконто1] char(23) collate _1C not null
,[TSP3860] char(3) collate _1C not null
,[Субконто2] char(23) collate _1C not null
,[TSP3861] char(3) collate _1C not null
,[Субконто3] char(23) collate _1C not null
,[TSP3862] char(3) collate _1C not null
,[СчетНУ] char(23) collate _1C not null
,[TSP6144] char(3) collate _1C not null
,[СубконтоНУ1] char(23) collate _1C not null
,[TSP6145] char(3) collate _1C not null
,[СубконтоНУ2] char(23) collate _1C not null
,[TSP6146] char(3) collate _1C not null
,[СубконтоНУ3] char(23) collate _1C not null
,[TSP6147] char(3) collate _1C not null
,[Сумма] numeric(16, 2) not null
,Комментарий text collate _1C default null
, idx_IDDOC char(9) collate _1C default null
)
create table x(
 [IDDOC] char(9) collate _1C not null
,[LINENO] numeric(4, 0) not null
,[ACTNO] numeric(6, 0) not null
,[DEBKRED] numeric(1, 0) not null
,[Номенклатура] char(9) collate _1C not null
,[Покупатель] char(9) collate _1C not null
,[Поставщик] char(9) collate _1C not null
,[Фирма] char(9) collate _1C not null
,[Себестоимость] numeric(16, 2) not null
,[ПродСтоимость] numeric(16, 2) not null
,[Количество] numeric(16, 5) not null
,[СебестоимостьВ] numeric(16, 2) not null
,[ПродСтоимостьВ] numeric(16, 2) not null
,[КоличествоВ] numeric(16, 5) not null
, idx_IDDOC_LINENO_ACTNO char(19) collate _1C default null
)
szName 1SJOURN
Подбор индекса для таблицы 1SJOURN :
	Ограничения: ACDATETIM[dx_DATE_TIME_IDDOC]>=; ACDATETIM[dx_DATE_TIME_IDDOC]<; RF2351[ПродажиФр]=; 
	Выбран  уникальный  индекс ACDATETIM: DTOS(DATE)+TIME+IDDOC
	Стоимость: 18
szName RA2351
Подбор индекса для таблицы RA2351 :
	Ограничения: SP2343[Номенклатура]=; IDDOC=; 
	Выбран  уникальный  индекс IDLINE: IDDOC+STR(LINENO,4)+STR(ACTNO,6)
	Стоимость: 22
szName DH1790
Подбор индекса для таблицы DH1790 :
	Ограничения: IDDOC=; 
	Выбран  уникальный  индекс ID: IDDOC
	Стоимость: 12
szName DH1790
Подбор индекса для таблицы DH1790 :
	Ограничения: 
	Индекс не выбран.
	Стоимость: 1795
szName 1SJOURN
Подбор индекса для таблицы 1SJOURN :
	Ограничения: IDDOC=; 
	Выбран  уникальный  индекс IDDOC: IDDOC
	Стоимость: 20
Время подготовки запроса: 746 мс, время выполнения запроса: 354 мс.


ПЛАН

4;0;0;SCAN TABLE vt_totalrg_328_769282807 AS Р
5;0;0;SCAN TABLE vt_totalrg_4480_769282887 AS РегРез
3;0;0;COMPOUND SUBQUERIES 4 AND 5 (UNION ALL)
6;0;0;SCAN TABLE Журнал AS docjourn VIRTUAL TABLE INDEX 1:ACDATETIM;    19 !" 0?b 0C?|?*a#dR 0&?/=
6;1;1;SCAN TABLE Регистр.Продажи AS ra_2351 VIRTUAL TABLE INDEX 0:IDLINE;    15 !  0p nHy$40d  Q :H RK2B
6;0;0;EXECUTE LIST SUBQUERY 7
7;0;0;SCAN TABLE vt_Номен
6;0;0;EXECUTE LIST SUBQUERY 8
8;0;0;SCAN TABLE vt_Номен
6;0;0;USE TEMP B-TREE FOR GROUP BY
2;0;0;COMPOUND SUBQUERIES 3 AND 6 (UNION ALL)
9;0;0;SCAN TABLE vt_totalrg_328_769282889 AS РегСпис
9;1;1;SCAN TABLE Документ.СписаниеТМЦ AS ДокСпис VIRTUAL TABLE INDEX 0:ID;    10 !  0p nHyd!0d  Q
9;2;2;SCAN TABLE Журнал AS Жур VIRTUAL TABLE INDEX 0:IDDOC;    10 !  0p nHyd!0d  Q
1;0;0;COMPOUND SUBQUERIES 2 AND 9 (UNION ALL)
0;0;0;SCAN SUBQUERY 1 AS Рег
0;0;0;USE TEMP B-TREE FOR GROUP BY
Показать
18. Jill 17 11.11.16 15:40 Сейчас в теме
(14) вставилось потрясающе. И поправить не дает...
19. Djelf 244 11.11.16 17:28 Сейчас в теме
(18) Выглядит ужасно, а выполняется еще хуже ;)
1. Класс в обоих случаях сконструировал один и тот же запрос, что не удивительно.
2. Странно что время подготовки запроса Классом увеличилось почти в 2 раза.
3. План запроса обе версии sqlite сделали примерно одинаковый, 190мс разница небольшая... Повторяемая? За месяц-два тоже ~в 2 раза отличается?
4. У тебя видимо не установлен в регистре флаг "Быстрая обработка движений" из-за этого лишние джойны.
5. Фильтр на Номенклатуру только в одном месте, это так и задумано?
6. Класс не учитывает возможность наложить индекс по Номенклатуре, если на нее установлен отбор. Отбор установлен? Тут можно разогреть запрос очень сильно! При быстрой обработке движений и отбору по номенклатуре сработает составной индекс регистра вида "SP2343,DATE,TIME,IDDOC,LINENO,ACTNO" и это очень сильно ускорит запрос в 3.15. А вот 1.0.2.3 его использовать не сможет вообще!
7. Что внутри vt_totalrg_328_769799611 и т.п. не видать, может там что-то подтормаживает, а не в результирующем запросе.
20. Djelf 244 11.11.16 18:29 Сейчас в теме
(18) Непонятненько где и почему тормозит...
Кусок SELECT docjourn.DATE AS Период ,ra_2351.Номенклатура AS Номенклатура в 3.15 в 2 раза быстрее...
Остальные куски должны вести себя так же...
А попробуй ка обернуть запрос в begin rollback, на взаимодействие с 1с это не повлияет. ВыполнятьВТранзакции это для 1с, а не sqlite...
21. Djelf 244 11.11.16 19:00 Сейчас в теме
(18) Ага... последний кусок вроде вообще не правильный, возможно он и тормозит
РегСпис.Номенклатура as Номенклатура,
        Жур.DATE as НачалоПериода,    
    FROM
        vt_totalrg_328_769799694 as РегСпис

    INNER JOIN
        [Документ.СписаниеТМЦ] as ДокСпис ON ДокСпис.IDDoc = РегСпис.ТекущийДокумент
    LEFT JOIN
        [Журнал] as Жур ON Жур.IDDoc = РегСпис.ТекущийДокумент) Рег
Показать

НачалоПериода есть в $РегистрОбороты, ВидДокумента тоже есть т.е. inner join не нужен, а нужно условие в вт на :ВидДокумента.СписаниеТМЦ

Мне не очень нравится что ПрямойЗапрос делает временные таблицы для sqlite, если были бы как вложенные, то движок мог бы их как то их по хитрому развернуть.
22. Jill 17 14.11.16 14:22 Сейчас в теме
(21) Djelf, извиняюсь за "оперативность". ПК под рукой не было...

Запрос кривой - да. Это привет из далекого прошлого. Там всю обработку желательно выкинуть и написать с нуля. Так, конечно, и поступлю, но все разом - проблемно...

Начало периода - только при переодичности отличной от документ, условие на вид документа не ставится, т.к. прямойзапрос его и итоги впихнуть пытается...


Но основные тормоза не там:
1.0.2.3
SELECT 
	Рег.Номенклатура as [Номенклатура $Справочник.Номенклатура],
	Рег.НачалоПериода as [День $Дата], 
	SUM(Рег.КоличествоНачальныйОстаток)  as КолвоНачОст,
	SUM(Рег.КоличествоКонечныйОстаток) as КолвоКонОст,
	SUM(Рег.КоличествоПриход) as КолвоПриход,
	SUM(Рег.КоличествоРасход) as КолвоРасход,
	SUM(Рег.КоличествоВозврат) as КолвоВозвр,
	SUM(Рег.КоличествоНачальныйРезерв) as КолвоРезервНачОст,
	SUM(Рег.КоличествоКонечныйРезерв) as КолвоРезервКонОст,
	SUM(Рег.КоличествоСписание) as КолСпис
FROM  
	( 
	SELECT
		РегРасх.Номенклатура as Номенклатура,    				
		РегРасх.Период as НачалоПериода,
		0  as КоличествоНачальныйОстаток,
		0 as КоличествоКонечныйОстаток,
		0 as КоличествоПриход,
		РегРасх.КоличествоОборот as КоличествоРасход,
		РегРасх.КоличествоВОборот as КоличествоВозврат,
		0 as КоличествоНачальныйРезерв,
		0 as КоличествоКонечныйРезерв,    		
		0 as КоличествоСписание

FROM
		(
	SELECT
		Период
		,Номенклатура
		,SUM(КоличествоОборот) AS КоличествоОборот
		,SUM(КоличествоВОборот) AS КоличествоВОборот
		
	FROM
		(SELECT
			docjourn.DATE AS Период
			,ra_2351.Номенклатура AS Номенклатура
			,CASE WHEN ra_2351.debkred = 0 THEN ra_2351.Количество ELSE -ra_2351.Количество END AS КоличествоОборот
			,CASE WHEN ra_2351.debkred = 0 THEN ra_2351.КоличествоВ ELSE -ra_2351.КоличествоВ END AS КоличествоВОборот
			
		FROM
			[Журнал] AS docjourn
		LEFT JOIN [Регистр.Продажи] AS ra_2351
		ON ra_2351.IDDOC = docjourn.IDDOC
		WHERE (docjourn.idx_DATE_TIME_IDDOC >= '20161001     0     0   ')
		AND (docjourn.idx_DATE_TIME_IDDOC < '20161101     0     0   ')
		AND docjourn.ПродажиФр = 1
		AND
			ra_2351.Номенклатура IN (SELECT Val FROM vt_Номен)
		) AS vt_ra_2351
	GROUP BY
		Период
		,Номенклатура
	HAVING (SUM(КоличествоОборот) <> 0)
	OR (SUM(КоличествоВОборот) <> 0)
	
) as РегРасх
) Рег

GROUP BY 
	Рег.Номенклатура,
	Рег.НачалоПериода
create table x(
 [IDJOURNAL] char(4) collate _1C
,[IDDOC] char(9) collate _1C
,[IDDOCDEF] char(4) collate _1C
,[APPCODE] numeric(3, 0)
,[DATE] char(8)
,[TIME] char(6) collate _1C
,[DNPREFIX] char(18) collate _1C
,[DOCNO] char(10) collate _1C
,[CLOSED] numeric(1, 0)
,[ISMARK] char(1) collate _1C
,[ACTCNT] char(6) collate _1C
,[VERSTAMP] char(6) collate _1C
,[БанкФр] numeric(1, 0)
,[ЗаказыФр] numeric(1, 0)
,[ЗаказыЗаявкиФр] numeric(1, 0)
,[ЗаявкиФр] numeric(1, 0)
,[КассаФр] numeric(1, 0)
,[КнигаПокупокФр] numeric(1, 0)
,[КнигаПродажФр] numeric(1, 0)
,[ОстаткиТМЦФр] numeric(1, 0)
,[ПартииНаличиеФр] numeric(1, 0)
,[ПартииОтданныеФр] numeric(1, 0)
,[ПодотчетныеЛицаФр] numeric(1, 0)
,[ПокупателиФр] numeric(1, 0)
,[ПоставщикиФр] numeric(1, 0)
,[ПродажиФр] numeric(1, 0)
,[РеализованныйТоварФр] numeric(1, 0)
,[РезервыТМЦФр] numeric(1, 0)
,[Автор] char(9) collate _1C
,[Проект] char(9) collate _1C
,[Фирма] char(9) collate _1C
,[ЮрЛицо] char(9) collate _1C
,[ОсновнаяПоследовательностьПс] numeric(1, 0)
,[КнигаПокупокПс] numeric(1, 0)
,[КнигаПродажПс] numeric(1, 0)
, idx_IDDOC char(9) collate _1C
, idx_DATE_TIME_IDDOC char(23) collate _1C
, idx_DNPREFIX_DOCNO char(28) collate _1C
, idx_IDDOCDEF_DATE_TIME_IDDOC char(27) collate _1C
, idx_IDJOURNAL_DATE_TIME_IDDOC char(27) collate _1C
, idx_Автор_DATE_TIME_IDDOC char(32) collate _1C
, idx_Проект_DATE_TIME_IDDOC char(32) collate _1C
, idx_Фирма_DATE_TIME_IDDOC char(32) collate _1C
, idx_ЮрЛицо_DATE_TIME_IDDOC char(32) collate _1C
, idx_ОсновнаяПоследовательностьПс_DATE_TIME_IDDOC char(24) collate _1C
, idx_КнигаПокупокПс_DATE_TIME_IDDOC char(24) collate _1C
, idx_КнигаПродажПс_DATE_TIME_IDDOC char(24) collate _1C
)
create table x(
 [IDDOC] char(9) collate _1C
,[LINENO] numeric(4, 0)
,[ACTNO] numeric(6, 0)
,[DEBKRED] numeric(1, 0)
,[Номенклатура] char(9) collate _1C
,[Покупатель] char(9) collate _1C
,[Поставщик] char(9) collate _1C
,[Фирма] char(9) collate _1C
,[Себестоимость] numeric(16, 2)
,[ПродСтоимость] numeric(16, 2)
,[Количество] numeric(16, 5)
,[СебестоимостьВ] numeric(16, 2)
,[ПродСтоимостьВ] numeric(16, 2)
,[КоличествоВ] numeric(16, 5)
, idx_IDDOC_LINENO_ACTNO char(19) collate _1C
)
Подбор индекса для таблицы 1SJOURN:
	Ограничения: ACDATETIM[dx_DATE_TIME_IDDOC]>=; ACDATETIM[dx_DATE_TIME_IDDOC]<; RF2351[ПродажиФр]=; IDDOC=; 
	В кэше не найдено
	Выбран индекс IDDOC: IDDOC
	Стоимость: 20
Подбор индекса для таблицы 1SJOURN:
	Ограничения: ACDATETIM[dx_DATE_TIME_IDDOC]>=; ACDATETIM[dx_DATE_TIME_IDDOC]<; RF2351[ПродажиФр]=; 
	В кэше не найдено
	Выбран индекс ACDATETIM: DTOS(DATE)+TIME+IDDOC
	Стоимость: 20
Подбор индекса для таблицы RA2351:
	Ограничения: IDDOC=; 
	В кэше не найдено
	Выбран индекс IDLINE: IDDOC+STR(LINENO,4)+STR(ACTNO,6)
	Стоимость: 66
Показать


Время подготовки запроса: 16 мс, время выполнения запроса: 455 мс.

ПЛАН:
0;0;TABLE Журнал AS docjourn VIRTUAL TABLE INDEX 1:ACDATETIM; 19 !" 0?b 0C?|?*a#dR 0& )
1;1;TABLE Регистр.Продажи AS ra_2351 VIRTUAL TABLE INDEX 0:IDLINE; 10 ! 0p nHyd!
0;0;TABLE vt_Номен
0;0;TABLE AS РегРасх

1.0.2.6
SELECT 
	Рег.Номенклатура as [Номенклатура $Справочник.Номенклатура],
	Рег.НачалоПериода as [День $Дата], 
	SUM(Рег.КоличествоНачальныйОстаток)  as КолвоНачОст,
	SUM(Рег.КоличествоКонечныйОстаток) as КолвоКонОст,
	SUM(Рег.КоличествоПриход) as КолвоПриход,
	SUM(Рег.КоличествоРасход) as КолвоРасход,
	SUM(Рег.КоличествоВозврат) as КолвоВозвр,
	SUM(Рег.КоличествоНачальныйРезерв) as КолвоРезервНачОст,
	SUM(Рег.КоличествоКонечныйРезерв) as КолвоРезервКонОст,
	SUM(Рег.КоличествоСписание) as КолСпис
FROM  
	( 
	SELECT
		РегРасх.Номенклатура as Номенклатура,    				
		РегРасх.Период as НачалоПериода,
		0  as КоличествоНачальныйОстаток,
		0 as КоличествоКонечныйОстаток,
		0 as КоличествоПриход,
		РегРасх.КоличествоОборот as КоличествоРасход,
		РегРасх.КоличествоВОборот as КоличествоВозврат,
		0 as КоличествоНачальныйРезерв,
		0 as КоличествоКонечныйРезерв,    		
		0 as КоличествоСписание

FROM
		(
	SELECT
		Период
		,Номенклатура
		,SUM(КоличествоОборот) AS КоличествоОборот
		,SUM(КоличествоВОборот) AS КоличествоВОборот
		
	FROM
		(SELECT
			docjourn.DATE AS Период
			,ra_2351.Номенклатура AS Номенклатура
			,CASE WHEN ra_2351.debkred = 0 THEN ra_2351.Количество ELSE -ra_2351.Количество END AS КоличествоОборот
			,CASE WHEN ra_2351.debkred = 0 THEN ra_2351.КоличествоВ ELSE -ra_2351.КоличествоВ END AS КоличествоВОборот
			
		FROM
			[Журнал] AS docjourn
		LEFT JOIN [Регистр.Продажи] AS ra_2351
		ON ra_2351.IDDOC = docjourn.IDDOC
		WHERE (docjourn.idx_DATE_TIME_IDDOC >= '20161001     0     0   ')
		AND (docjourn.idx_DATE_TIME_IDDOC < '20161101     0     0   ')
		AND docjourn.ПродажиФр = 1
		AND
			ra_2351.Номенклатура IN (SELECT Val FROM vt_Номен)
		) AS vt_ra_2351
	GROUP BY
		Период
		,Номенклатура
	HAVING (SUM(КоличествоОборот) <> 0)
	OR (SUM(КоличествоВОборот) <> 0)
	
) as РегРасх
) Рег

GROUP BY 
	Рег.Номенклатура,
	Рег.НачалоПериода
create table x(
 [IDJOURNAL] char(4) collate _1C not null
,[IDDOC] char(9) collate _1C not null
,[IDDOCDEF] char(4) collate _1C not null
,[APPCODE] numeric(3, 0) not null
,[DATE] char(8) not null
,[TIME] char(6) collate _1C not null
,[DNPREFIX] char(18) collate _1C not null
,[DOCNO] char(10) collate _1C not null
,[CLOSED] numeric(1, 0) not null
,[ISMARK] char(1) collate _1C not null
,[ACTCNT] char(6) collate _1C not null
,[VERSTAMP] char(6) collate _1C not null
,[БанкФр] numeric(1, 0) not null
,[ЗаказыФр] numeric(1, 0) not null
,[ЗаказыЗаявкиФр] numeric(1, 0) not null
,[ЗаявкиФр] numeric(1, 0) not null
,[КассаФр] numeric(1, 0) not null
,[КнигаПокупокФр] numeric(1, 0) not null
,[КнигаПродажФр] numeric(1, 0) not null
,[ОстаткиТМЦФр] numeric(1, 0) not null
,[ПартииНаличиеФр] numeric(1, 0) not null
,[ПартииОтданныеФр] numeric(1, 0) not null
,[ПодотчетныеЛицаФр] numeric(1, 0) not null
,[ПокупателиФр] numeric(1, 0) not null
,[ПоставщикиФр] numeric(1, 0) not null
,[ПродажиФр] numeric(1, 0) not null
,[РеализованныйТоварФр] numeric(1, 0) not null
,[РезервыТМЦФр] numeric(1, 0) not null
,[Автор] char(9) collate _1C not null
,[Проект] char(9) collate _1C not null
,[Фирма] char(9) collate _1C not null
,[ЮрЛицо] char(9) collate _1C not null
,[ОсновнаяПоследовательностьПс] numeric(1, 0) not null
,[КнигаПокупокПс] numeric(1, 0) not null
,[КнигаПродажПс] numeric(1, 0) not null
, idx_IDDOC char(9) collate _1C default null
, idx_DATE_TIME_IDDOC char(23) collate _1C default null
, idx_DNPREFIX_DOCNO char(28) collate _1C default null
, idx_IDDOCDEF_DATE_TIME_IDDOC char(27) collate _1C default null
, idx_IDJOURNAL_DATE_TIME_IDDOC char(27) collate _1C default null
, idx_Автор_DATE_TIME_IDDOC char(32) collate _1C default null
, idx_Проект_DATE_TIME_IDDOC char(32) collate _1C default null
, idx_Фирма_DATE_TIME_IDDOC char(32) collate _1C default null
, idx_ЮрЛицо_DATE_TIME_IDDOC char(32) collate _1C default null
, idx_ОсновнаяПоследовательностьПс_DATE_TIME_IDDOC char(24) collate _1C default null
, idx_КнигаПокупокПс_DATE_TIME_IDDOC char(24) collate _1C default null
, idx_КнигаПродажПс_DATE_TIME_IDDOC char(24) collate _1C default null
)
create table x(
 [IDDOC] char(9) collate _1C not null
,[LINENO] numeric(4, 0) not null
,[ACTNO] numeric(6, 0) not null
,[DEBKRED] numeric(1, 0) not null
,[Номенклатура] char(9) collate _1C not null
,[Покупатель] char(9) collate _1C not null
,[Поставщик] char(9) collate _1C not null
,[Фирма] char(9) collate _1C not null
,[Себестоимость] numeric(16, 2) not null
,[ПродСтоимость] numeric(16, 2) not null
,[Количество] numeric(16, 5) not null
,[СебестоимостьВ] numeric(16, 2) not null
,[ПродСтоимостьВ] numeric(16, 2) not null
,[КоличествоВ] numeric(16, 5) not null
, idx_IDDOC_LINENO_ACTNO char(19) collate _1C default null
)
szName 1SJOURN
Подбор индекса для таблицы 1SJOURN :
	Ограничения: ACDATETIM[dx_DATE_TIME_IDDOC]>=; ACDATETIM[dx_DATE_TIME_IDDOC]<; RF2351[ПродажиФр]=; 
	Выбран  уникальный  индекс ACDATETIM: DTOS(DATE)+TIME+IDDOC
	Стоимость: 18
szName RA2351
Подбор индекса для таблицы RA2351 :
	Ограничения: SP2343[Номенклатура]=; IDDOC=; 
	Выбран  уникальный  индекс IDLINE: IDDOC+STR(LINENO,4)+STR(ACTNO,6)
	Стоимость: 22
Показать


Время подготовки запроса: 15 мс, время выполнения запроса: 2488 мс.


ПЛАН
1;0;0;SCAN TABLE Журнал AS docjourn VIRTUAL TABLE INDEX 1:ACDATETIM; 19 !" 0?b 0C?|?*a#dR 0&`4G
1;1;1;SCAN TABLE Регистр.Продажи AS ra_2351 VIRTUAL TABLE INDEX 0:IDLINE; 15 ! 0p nHy$40d Q
1;0;0;EXECUTE LIST SUBQUERY 2
2;0;0;SCAN TABLE vt_Номен
1;0;0;EXECUTE LIST SUBQUERY 3
3;0;0;SCAN TABLE vt_Номен
1;0;0;USE TEMP B-TREE FOR GROUP BY
0;0;0;SCAN SUBQUERY 1 AS РегРасх
0;0;0;USE TEMP B-TREE FOR GROUP BY
23. Jill 17 14.11.16 14:28 Сейчас в теме
(21) Djelf, исходный текст с учетом условий:
EXPLAIN QUERY PLAN
SELECT 
	Рег.Номенклатура as [Номенклатура $Справочник.Номенклатура],
	Рег.НачалоПериода as [День $Дата], 
	SUM(Рег.КоличествоНачальныйОстаток)  as КолвоНачОст,
	SUM(Рег.КоличествоКонечныйОстаток) as КолвоКонОст,
	SUM(Рег.КоличествоПриход) as КолвоПриход,
	SUM(Рег.КоличествоРасход) as КолвоРасход,
	SUM(Рег.КоличествоВозврат) as КолвоВозвр,
	SUM(Рег.КоличествоНачальныйРезерв) as КолвоРезервНачОст,
	SUM(Рег.КоличествоКонечныйРезерв) as КолвоРезервКонОст,
	SUM(Рег.КоличествоСписание) as КолСпис
FROM  
	( 
	SELECT
		РегРасх.Номенклатура as Номенклатура,    				
		РегРасх.Период as НачалоПериода,
		0  as КоличествоНачальныйОстаток,
		0 as КоличествоКонечныйОстаток,
		0 as КоличествоПриход,
		РегРасх.КоличествоОборот as КоличествоРасход,
		РегРасх.КоличествоВОборот as КоличествоВозврат,
		0 as КоличествоНачальныйРезерв,
		0 as КоличествоКонечныйРезерв,    		
		0 as КоличествоСписание

FROM
		$РегистрОбороты.Продажи(:ДатаНач,:ДатаКон,День,Номенклатура IN (SELECT Val FROM vt_Номен),(Номенклатура),(Количество,КоличествоВ)) as РегРасх
) Рег

GROUP BY 
	Рег.Номенклатура,
	Рег.НачалоПериода
Показать

24. Djelf 244 14.11.16 15:26 Сейчас в теме
(23) Плюсик перед Номенклатура IN поставь. Т.е.
$РегистрОбороты.Продажи(:НачПериода,:КонПериода,День,+Номенклатура  IN (SELECT


IN очень коварная штука. Есть 2 варианта выполнения запроса:
1. читаем исходную таблицу, а потом накладываем фильтр
2. читаем таблицу с условием в IN
Если в IN значений мало то быстрее 2, если много то быстрее 1
В 1.0.2.3 оптимизации в 2 нет, он просто такое не умеет. А движки повыше могут выбрать вариант 2
А тут еще получается что запрос не только к виртуальным таблицам, но и к таблице sqlite. Тестами в sqlite такой вариант не покрыт.
К сожалению прагмой такое поведение не изменить, только при компиляции или плюсом (отключение использования индекса по полю).
25. Jill 17 14.11.16 16:05 Сейчас в теме
(24) Djelf, понятно. Спасибо!

1.0.2.6
Время подготовки запроса: 14 мс, время выполнения запроса: 390 мс.
26. Djelf 244 16.11.16 20:15 Сейчас в теме
(25) И еще хинт нашелся... Измени в ПрямомЗапросе кусок ниже и еще один такой же аналогично.
Без SELECT RAISE(IGNORE); триггер обновляет поле СтрКолонкаИзменений, присваивая его значение самому себе, а оно участвует в индексе, следовательно должен обновится еще и индекс, а это лишняя работа. Это раза в полтора-два ускорит запросы. Можно еще больше ускорить, подавляя запись нулевых значений, но это несколько сложнее...

		ТекстЗапроса_Триггер = "create trigger tr_oborot before update of " + СтрКолонкаИзменений + " on " + ИмяВременнойТаблицы + "
		|begin
		|	update " + ИмяВременнойТаблицы + " set 
		|		" + СтрТриггерНачОстаток + "
		|	where " + ИмяВременнойТаблицы + ".rowid = old.rowid;
		|	
		|	update t_ob set 
		|		" + СтрТриггерОборот + "
		|	where " + СтрЗаменить(СтрЗаменить(СтрУсловияСравненияТабИтогов,ИмяВременнойТаблицы + ".",""),"t_ob","old") + ";
		|	
		|	update " + ИмяВременнойТаблицы + " set 
		|		" + СтрТриггерКонОстаток + "
		|	where " + ИмяВременнойТаблицы + ".rowid = old.rowid;
		|	SELECT RAISE(IGNORE); -- вот эта строка!!!
		|end";
Показать
27. vandalsvq 1198 17.11.16 09:38 Сейчас в теме
(25) (26) ух ребят, я смотрю вы тут вовсю его (класс) перекапываете, может потом и сборку правильную сделаете для 1С++ форума? Могу заменить и в теме здесь на Инфостарте. Хотя может даже лучше, чтобы автор кто поправит сам и сделал правильную статью, себе sm заработает. Я не против, поскольку сам уже им не занимаюсь.
28. Djelf 244 17.11.16 13:34 Сейчас в теме
(27) Да какое там вовсю переписываем... Сделал трассировку ОстаткоИОборотов, наткнулся на триггер, изумился его тормознутости, долго втыкал почему так.
К счастью, решение оказалось очень простое. А то я уже что-то мутное на сте стал придумывать...
В принципе в классе все хорошо, кое что можно на сте перевести, попробовать отказаться от генерации условий типа '20161001 0 0 ' тогда IN заработает ну и все вроде..
Если бы пользовался переписал бы. А так, времени на тестирование не хватит.
Я лучше luajit в sqlite как расширение встрою, а то обычный lua работать то работает, но слишком медленно.
3. r2d255 08.11.16 11:20 Сейчас в теме
А есть шанс что что-то подобное для восьмерки появится?

Можно-ли в восьмерке работать с какой-то внешней бд, при двух условиях:
1. Не устанавливать никаких драйверов и программ. (с пользовательскими правами на сервере)
2. выполнять в ней SQL запросы.
?
5. Djelf 244 08.11.16 13:39 Сейчас в теме
(3) Если с "с какой-то внешней бд" то уже есть ВК для firebird http://infostart.ru/public/168241/
8. ret-Phoenix 493 08.11.16 20:56 Сейчас в теме
(3) r2d255, Насколько знаю, в 8-ке можно использовать .net сборки, а значит можно использовать готовые либы для разных субд.
Таким образом можно попробовать использовать https://github.com/ret-Phoenix/oscript-sql
Там один API подобный запросам 1С для нескольких СУБД.
9. r2d255 08.11.16 23:46 Сейчас в теме
(8) Спасибо.
Я правда не понял, что нужно сделать чтобы стало доступно создание объекта Соединение() ?
10. ret-Phoenix 493 09.11.16 11:07 Сейчас в теме
(9) r2d255, А что и как пробовали? можно продолжить в ЛС, мне интересно, получится ли прикрутить мою DLL к 1С )
6. Djelf 244 08.11.16 13:44 Сейчас в теме
А... хотя не оно. Оно с сервером работает, а не с файлом. Можно портировать на движок sqlite... Необходимости пока не возникало, а без необходимости стимула нет.
7. JohnyDeath 299 08.11.16 15:10 Сейчас в теме
Помню то счастье, когда обладатели dbf-баз могли строить нормальные запросы на основе 1sqlite, а главное использовать ТабличноеПоле!
Спасибо, что не бросил такую вкуснятину.
И Саше Орефкову тоже отельное огромное спасибо.
корум; Alister; Il19.ru; artbear; +4 Ответить
15. lokis 10.11.16 15:04 Сейчас в теме
Доброго всем времени суток !
Прорабатываю такой вариант использования:
1) формируется Таблица Значений
2) "укладывается" в базу
3) запросом вытягиваю значения - это реально быстрее, нежели штатными средствами
Но "затык" - из запроса возвращается таблица с данными во внутреннем представлении - как перевести в нормальное ?
16. Djelf 244 10.11.16 15:16 Сейчас в теме
(15) Если укладываешь ТЗ не указывая типизацию колонки, то типизация в запросе должна быть :Неопределенный
29. Djelf 244 16.02.17 21:45 Сейчас в теме
Зеркало/Архивы периодически обновляется, а тема нет т.к. скачать "бесплатно" для 1sqlite слетит.
Список изменений внутри последнего архива.
30. CheBurator 3453 17.02.17 00:00 Сейчас в теме
ух, радует что я еще не в одиночестве!
31. Djelf 244 17.02.17 22:34 Сейчас в теме
(30) А куда я с клюшек? И вообще, надоело сопли вытирать тем кто сменив место работы с моей конфы перешел на УТ ;)
Да, многого в клюшках уже не хватает, в том числе и вариантов хранения данных, для этого sqlite и использую.
Не совсем же я из ума выжил чтоб засовывать 800к xml`ек в dbf базу...
32. klif 5 14.02.18 08:44 Сейчас в теме
Подскажите данная компонента подойдет для хранения данных в sqlite? Насколько я вижу все ее используют для запросов к самой 1с базе. Требуется хранить большой объем данных с привязкой к документу в 1с 7.7 .
33. Jill 17 14.02.18 12:14 Сейчас в теме
(32) да. Подойдет.
Разного рода доп данные именно так и храню (н-р. доп информация по номенклатуре со ссылками на картинки), чтобы не править конфигурацию + разного рода конфиги обработок.
34. klif 5 14.02.18 12:29 Сейчас в теме
(33)
А возможно посмотреть пример ?
35. Jill 17 14.02.18 13:57 Сейчас в теме
(34) ну, н-р процедура обновления картинки номенклатуры (база, естественно, должна быть создана).
Процедура ВыборИзображенияПоУмолчанию()
	Перем БазаSQLite, ЗапросSQLite, ТабПрямЗапроса, ТекстПрямЗапр, НачМил;  
	Перем ТекПопыт, НеобходКолПопыт, Успех; 
	Перем ВремПутьКИзображПоУмолч;
	Перем ПолнПутьКИзображПоУмолч;
	
	ВремПутьКИзображПоУмолч=ПутьКИзображПоУмолч;
	Если ВыборФайла(ВремПутьКИзображПоУмолч,0,,1,ПутьККаталИзображ,"Выберите путь к изображению по умолчанию.","jpg",,1,5,1024)=1 Тогда
		Если (ПустоеЗначение(ВремПутьКИзображПоУмолч)=0) и (ВремПутьКИзображПоУмолч<>ПутьКИзображПоУмолч) Тогда
			БазаSQLite = СоздатьОбъект("SQLiteBase");	
			БазаSQLite.Открыть(ПутьКБазеSQLITE);
			ЗапросSQLite = БазаSQLite.НовыйЗапрос();
			ЗапросSQLite.ВыполнятьВТранзакции = 0;
			ЗапросSQLite.ВыполнитьЗапрос("PRAGMA journal_mode = WAL");
			
			ТекстПрямЗапр="
			|UPD ATE preferences SE T DefPictPath=:ВремПутьКИзображПоУмолч
			|";
			
			ЗапросSQLite.Подставлять("ВремПутьКИзображПоУмолч",ВремПутьКИзображПоУмолч);
			ЗапросSQLite.Подготовить(ТекстПрямЗапр);
			
			//ЗапросSQLite.Отладка(1); 
			//ТабПрямЗапроса=СоздатьОбъект("ТаблицаЗначений"); //ДляСкриптов 
			
			НеобходКолПопыт=5;
			ТекПопыт=0;
			Успех=0;        
			
			Пока (ТекПопыт<НеобходКолПопыт) и (Успех=0) Цикл
				ТекПопыт=ТекПопыт+1;
				Успех=1;
				Попытка
					ЗапросSQLite.Выполнить();	
				Исключение
					Успех=0; 
					Сообщить(ОписаниеОшибки());
					Sleep(1);			
				КонецПопытки;
			КонецЦикла;
			
			ЗапросSQLite=ПолучитьПустоеЗначение();
			БазаSQLite.Закрыть();   
			БазаSQLite=ПолучитьПустоеЗначение();
			
			Если Успех=1 Тогда
				ОбновитьРеквизитыФормы();
			КонецЕсли;		
		КонецЕсли;		
	КонецЕсли;
КонецПроцедуры // ВыборИзображенияПоУмолчанию
Показать


Самый обычный sqlite. Создаете таблицу и наполняете.
Читаете справку sqlite.

Если необходимо более подробно - могу чуть позже опубликовать набор обработок доп. описания.
36. klif 5 15.02.18 04:16 Сейчас в теме
Если можно пример записи в базу.
37. Djelf 244 20.02.18 12:25 Сейчас в теме
(36) В публикации есть обработка "Дерево CTE" там есть и чтение, и запись, и изменение данных в базе sqlite. Как пример - сойдет.
38. klif 5 21.02.18 03:54 Сейчас в теме
Спасибо. С записью уже разобрался.
39. Cujoko 7 03.05.19 19:45 Сейчас в теме
Спасибо вам за ваш труд. Я-то думаю, почему у меня соединение трёх таблиц, в каждой по 10000 записей, выполняется минут пятнадцать. Я и так, и эдак пытался, индексы создавал. Думал уже, что возможно придётся осваивать C++, потому что от SQLite отказываться было бы ещё больнее.
Оставьте свое сообщение

См. также

Использование сборок .NET в 1С 7. и 8.x. Создание внешних Компонент. Промо

Разработка внешних компонент v7.7 v8 1cv8.cf 1cv7.md Абонемент ($m)

Данная разработка создана для использования сборок .Net в 1С через преобразование объектов и классов в COM-объекты, которые можно использовать в 1С. Достигается это путем создания класса, реализующего методы интерфейса IReflect public class AutoWrap: IReflect.

1 стартмани

28.11.2013    87502    282    Serginio    74    

Внешняя компонента для преобразования файлов из/в кодировку Base64 в 1С 7.7

Разработка внешних компонент WEB v7.7 1cv7.md Абонемент ($m)

Эта внешняя компонента Base64.dll предназначена для платформы 1С версии 7.7. Используется для преобразования файлов из/в кодировку Base64 из встроенного языка 1С Предприятие. Компонента тестировалась на базе конфигурации Бухгалтерский учет для Казахстана, редакции 7.70.257.

1 стартмани

06.04.2021    542    1    softmaker    2    

Криптография: внешняя компонента для 1С 7.7

Разработка внешних компонент Защита и шифрование v7.7 Абонемент ($m)

Цифровые подписи, шифрование, просмотр сертификатов ключей ЭЦП, работа с различными криптопровайдерами (в т.ч. КриптоПРО ГОСТ 2012) в 1С 7.7.

1 стартмани

08.06.2020    3015    5    mdbruyfn    5    

Протокол UDP: внешняя компонента для 1С 7.7

Разработка внешних компонент v7.7 Абонемент ($m)

Обмен сообщениями и небольшими файлами по протоколу UDP с 1С и внешними приложениями в локальной сети или сети VPN.

1 стартмани

23.05.2020    2502    1    mdbruyfn    0    

Компоненты распознавания и печати штрих-кодов Промо

Разработка внешних компонент Сканер штрих-кода v7.7 v8 1cv8.cf 1cv7.md Абонемент ($m)

Комплект программного обеспечения для реализации функций оптического распознавания штрих-кодов различных систем при помощи обычной web-камеры, а также их отображения в печатных формах. Программы могут работать в составе конфигураций, созданных на базе платформ «1С-Предприятие» версий 7.7, 8.2, 8.3. Компонент чтения кодов реализован в виде внешней компоненты 1С с COM-интерфейсом. Компонент отображения создан по стандартной технологии ActiveX для Windows, и может быть встроен в любое приложение, поддерживающее встраивание ActiveX элементов управления, например в документ Word или Excel, или форму VBA. P.S. Добавлена новая версия программы распознавания. Новые функции: обработка видео в реальном режиме (а не по таймеру, как раньше), добавлена возможность распознавания штрих-кодов из графических файлов JPEG, PNG, GIF, BMP, а также передавать для распознавания картинки из 1С, теперь можно получить в 1С захваченное с камеры или файла изображение, как с выделением мест, содержащих коды, так и без, а также отдельные фрагменты изображений, содержащие код. Добавлены новые свойства и методы для программирования. Обновлена документация.

10 стартмани

10.07.2015    72825    88    igorberezhnov    101    

Клиент HTTP(S): внешняя компонента для 1С 7.7

Разработка внешних компонент WEB v7.7 Абонемент ($m)

Компонента позволит использовать различные веб-сервисы интернет-ресурсов, например работать с онлайн-кассой через API, предоставленное ее разработчиком. Тестировалась только на платформе 1С релиза 7.70.027.

1 стартмани

14.11.2019    7077    23    mdbruyfn    27    

Производственный календарь для 1С 7.7

Универсальные обработки v7.7 1cv7.md Россия Абонемент ($m)

Обработка производственного календаря с возможностью импорта и экспорта xls для 1С 7.7 (7.70.027) без изменения конфигурации.

1 стартмани

18.09.2019    5735    1    Jill    8    

ФФД 1.05 с драйверами Атол v10

Разработка внешних компонент Розничная торговля Розничная торговля v7.7 1cv7.md Абонемент ($m)

Подключение кассы / фискального регистратора к 1С 7.7 через драйвер Атола v10.

1 стартмани

02.08.2019    12027    27    phsin    26    

Обработка для формирования классов для прямого доступа к файлам 1С через курсоры BDE. И многого другого Промо

Разработка внешних компонент v7.7 1cv7.md Абонемент ($m)

Обработка формирует классы для прямого доступа к файлам 1С через курсоры BDE. Исходник ВК, которая загружает Объект Автоматизации, поддерживающий ITypeInfo и выполняет все его свойства и методы через IlanguageExtender. Обработка для формирования диспинтерфейсов к объектам 1С (таблицаЗначений, справочники, документы, перечисления). Обработки для группировки данных Таблицы Значений в виде ТЗ, где колонками являются ключи и ТзПоГруппе вида ТЗ с детальными записями. Вывод иерархии из ТЗ элементов, поиск дублей, сравнение 2 ТЗ

1 стартмани

14.04.2015    20855    2    Serginio    1    

Внешняя компонента Game.dll (таймер, ГСЧ, захват клавиатуры)

Разработка внешних компонент v7.7 Абонемент ($m)

Внешняя компонента для 1С 7.7 для работы с таймером, генератором случайных чисел и для захвата клавиатуры.

1 стартмани

29.04.2019    6165    1    Palmer1976    0    

Поддержка выгрузки в Excel 2007 для 1С 7.7 в одну строку

Разработка внешних компонент Загрузка и выгрузка в Excel v7.7 1cv7.md Абонемент ($m)

Внешняя компонента 1С 7.7. для сохранения таблиц в формате Excel 2007.

1 стартмани

21.03.2019    13193    26    MadDAD    101    

Работа с пробитыми чеками по БД Атол

Разработка внешних компонент Кассовые операции ККМ Кассовые операции v7.7 1cv7.md Абонемент ($m)

Получение данных о пробитых чеках по ККМ Атол драйверов версии 8 на ОФД СБИС.

1 стартмани

13.07.2018    10119    1    pakko    7    

Расширение sqlite3_mod_csv или как быстро загрузить огромный файл csv или часть его в 1С 7.7

Внешние источники данных v7.7 1cv7.md Россия Абонемент ($m)

Расширение к sqlite3 для выполнения sqli запросов к файлам csv и не только.

1 стартмани

24.03.2018    11218    2    Djelf    12    

Картинки и дополнительное описание в номенклатуре

Работа с интерфейсом Обработка справочников Оптовая торговля Оптовая торговля Обработки v7.7 1С7:ТиС Абонемент ($m)

Картинки и дополнительное описание в номенклатуре ТиС (без изменения конфигурации).

1 стартмани

16.02.2018    10302    0    Jill    0    

Разработка игр на языке 1С с использованием Active-X компоненты (собственная разработка)

Разработка внешних компонент v7.7 v8 Россия Абонемент ($m)

Написанная Active-X компонента встраивается на форму обработки 1С (тестировалось на 1С 8.0, 8.1, 8.2, 8.3 не управляемые формы, 1С 7.7.). Компонента предназначена для моделирования игрового поля (вывод, движение спрайтов - фреймов, обработка коллизий, управление спрайтами-фреймами и т.д.) при разработки логики игры на встроенном языке 1С. Приложен пример обработки в которой реализована игра "Бита".

5 стартмани

04.01.2018    16679    2    protexprotex    34    

1sqlite Промо

Внешние источники данных Разработка внешних компонент Файловые протоколы обмена, FTP v77::ОУ v77::БУ v77::Расчет 1cv7.md Бесплатно (free)

Внешняя компонента для работы с базами данных SQLite, плюс прямые запросы в ДБФ-базах 1С.

23.06.2008    60537    5327    orefkov    290    

Оболочка для работы с последними драйверами ККМ АТОЛ для 1С 7.7, 8.1

Разработка внешних компонент ККМ Кассовые операции Кассовые операции v77::ОУ 1С7:ТиС Абонемент ($m)

Внешняя компонента - оболочка для работы в среде 1С 7.7 или 1С 8.1 с последними версиями драйверов ККМ от АТОЛ. Поддерживаются драйвера x32 начиная с версии 9.11. Присутствует внешняя обработка для полноценной работы с данными драйверами (поддержка ревизий 2.0, 2.1, 2.2, поддержка протокола ОФД 1.0, 1.0.5, 1.1).

1 стартмани

09.08.2017    42060    319    asdfghgghjdhg    118    

Подключение Онлайн кассы Штрих М к 1С 7.7

Разработка внешних компонент ККМ Кассовые операции Розничная торговля Кассовые операции Розничная торговля v7.7 1cv7.md Абонемент ($m)

Подключение онлайн кассы Штрих М к любой конфигурации 1С 7.7. Показаны основные приемы работы с драйвером. Обработка представляет из себя набор готовых функций для встраивания в свою конфигурацию: ИнициализироватьФР(); ПодключитьФР(); ОтключитьФР(); ОткрытьСмену(); ЗакрытьСмену(); НапечататьЧек(); АннулироватьЧек(); СнятьХОтчет().

1 стартмани

08.05.2017    26754    79    crimeait    2    

Полноценное использование Drag&Drop в 1С 7.7

Работа с интерфейсом Разработка внешних компонент v7.7 1cv7.md Абонемент ($m)

Несмотря на то, что кое-какие функции Drag&Drop были заложены авторами 1cpp, моё дополнение позволяет сделать этот функционал законченным. Дело в том, что средствами 1cpp можно было таскать файлы ТОЛЬКО в 1С, а из 1С - невозможно. Теперь Вы можете сделать работу с файлами на порядок удобнее и эффективнее.

1 стартмани

19.09.2016    15456    14    DasIsFantastich    4    

Шаблон внешней компоненты для Lazarus (FreePascal)

Инструментарий разработчика Разработка внешних компонент v7.7 v8 Абонемент ($m)

Шаблон внешней компоненты COM для Lazarus (FreePascal)

1 стартмани

16.05.2014    17601    29    v77    5    

Tray Informer

Инструментарий разработчика Разработка внешних компонент Работа с интерфейсом v7.7 v8 Россия Абонемент ($m)

Согласитесь, что окно стандартное сообщений в 1С иногда приносит больше неудобств, чем пользы. И тем более разные "Предупредить"... Что с этим окном только не делают! Его отцепают от формы, делают маленьким, умудряются спрятать за границы экрана. А потом звонят программистам с претензией, что документ почему-то не проводится, отя ничего и не пишет. У вас такого не было? А вот у нас было и не раз )))

1 стартмани

04.09.2013    27261    60    O-Planet    78    

Работа с POS терминалом банка "Аваль" через компоненту POSAPI v 1.8 (7.7)

Разработка внешних компонент Розничная торговля POS терминал Розничная торговля v7.7 Розничная и сетевая торговля (FMCG) Украина Абонемент ($m)

При работе с COM-объектом POS терминала важно получать информацию о его состоянии для отображения пользователю и/или принятия решений. Но 1С 7.7 не воспринимает тип данных "С-строка". Выход был найден через компоненту-посредника (обертку) WSC.

1 стартмани

11.07.2013    19843    27    simply1    24    

Внешняя компонента для работы с ККМ Искра "Прим-07К"

Разработка внешних компонент Кассовые операции ККМ Фискальный регистратор Кассовые операции v7.7 1cv7.md БУ Абонемент ($m)

Бесплатная внешняя компонента для 1С7.7, позволяющая работать с фискальными регистраторами производства Искра, такими как ПРИМ-07К, ПРИМ-08ТК и пр.

1 стартмани

18.06.2013    24060    64    sandyanf    3    

Сканер штрих-кода клавиатурный 7.7 (внешняя компонента)

Разработка внешних компонент Оптовая торговля Розничная торговля Оптовая торговля Розничная торговля v77::ОУ 1С7:Комплекс 1С7:ТиС Россия БУ Абонемент ($m)

Работа с COM портом (ввод/вывод), генерация внешнего события. Перехват мыши и клавиатуры для отслеживания времени простоя 1С. Перехват цифрового ряда, генерируемого сканером ШК или ридером карт, подключенных как клавиатура (генерация внешнего события вместо ввода цифр в окно 1С)

1 стартмани

10.11.2012    9253    48    e-rogov    4    

Пример работы с Web камерой (WIA)

Разработка внешних компонент v7.7 Абонемент ($m)

Делаем фото с веб камеры. Используем стандартную библиотеку Windows Image Acquisition Automation Library. Библиотеку wiaaut.dll качаем (из инета, бесплатно), регистрируем командой regsvr32.

1 стартмани

23.10.2012    32968    151    via    19    

Список баз 1С 7

Разработка внешних компонент v7.7 1cv7.md Россия Абонемент ($m)

Скрипт на VBS Подключает базы клиенту на основании вхождения данного пользователя в нужную группу Active Directory. Может использоваться в групповых политиках, либо в качестве стартера 1С7

1 стартмани

17.08.2012    11410    7    zebr    1    

Beep

Разработка внешних компонент v7.7 openconf 1cv7.md Россия Абонемент ($m)

Программа Бипер. Простенький скрипт с простенькой командой.

1 стартмани

18.04.2012    9541    11    l2d808    1    

Внешняя компонента для подключения к 1С охранного оборудования производства фирмы Bolid

Внешние источники данных Разработка внешних компонент v7.7 v8 1cv8.cf 1cv7.md Абонемент ($m)

Компонента для считывания ID магнитного ключа посредством охранного оборудованием производства фирмы Bolid (http://www.bolid.ru) через 1С

1 стартмани

04.04.2012    14788    26    andy_zhav    1    

Температура в 1С

Разработка внешних компонент v7.7 1cv7.md Россия Абонемент ($m)

Внешняя компонента (для 7.7 и 8.хх) позволяющая работать с сетью microLAN и устройствами с интерфейсом 1-Wire а именно получать значения температуры от датчиков DS18B20 и DS18S20 непосредственно в 1С.

1 стартмани

01.04.2012    12982    26    pophmail    14    

Батник обновления КЛАДР для 1С версии 7.7

Разработка внешних компонент v7.7 1cv7.md Россия Абонемент ($m)

Скрипт обновления файлов КЛАДР. Wget качает, а 7zip извлекает.

1 стартмани

23.03.2012    9158    21    voler    5    

Блокировка клавиши Esc ("Прервать выполнение...?") в "1С:Предприятие 7.7"

Практика программирования Разработка внешних компонент v7.7 1cv7.md Россия Абонемент ($m)

Способ блокировки мне рассказал Аркадий (Abadonna), а я только записал его рассказ на С++.

5 стартмани

07.01.2012    19399    52    hogik    23    

vCalendar в 1С

Разработка внешних компонент v77::ОУ v77::БУ 1cv7.md Россия Абонемент ($m)

Задача: создание в 1С 7.7 уведомления в виде почтового сообщения в таком формате, чтобы его понимали программы, работающие с календарями. Реализовано в виде класса 1С++.

1 стартмани

18.10.2011    9969    15    Amel2010    4    

Класс для работы с XLS, CSV файлами

Разработка внешних компонент Загрузка и выгрузка в Excel v7.7 1cv7.md Россия Абонемент ($m)

Класс для работы с XLS, CSV файлами - для "прозрачной работы" с файлами XLS/CSV - использует MS Excel или Open Office

1 стартмани

18.10.2011    8954    34    stepman3    8    

Класс 1C++ для отправки почты

Инструментарий разработчика Разработка внешних компонент Email v77::ОУ v77::БУ v77::Расчет 1cv7.md Россия Абонемент ($m)

Данный класс позволяет выполнить отправку электронной почты из 1С без дополнительных компонент (кроме 1С++), просто и удобно.

1 стартмани

26.09.2011    12727    45    curdate    5    

Обработка для подключения весов CAS LP15 к ТиС

Весы Разработка внешних компонент v77::ОУ 1С7:ТиС Россия Абонемент ($m)

Позволяет выгружать товары из базы данных 1С в память весов, причем при любых условиях отбора выгружаются только товары, имеющие тип "весовой". Также обработка позволяет отбирать товары для выгрузки по разным условиям и считывать информацию о хранящихся в памяти весов товарах.

1 стартмани

07.09.2011    14689    116    ectoneptune80    12    

Skype+1C (для 7.7)

Внешние источники данных Разработка внешних компонент WEB v7.7 1cv7.md Абонемент ($m)

Внешняя обработка на 7.7 для работы со Skype. Позволяет менять статус, добавлять/удалять контакты, звонить, отправлять сообщения, просматривать истории.

1 стартмани

14.04.2011    22384    424    Lepochkin    22    

Загрузка процессора 100% в 7.7 под Windows Server 2008 при блокировке журнала транзакций.

Разработка внешних компонент v77::ОУ v77::БУ v77::Расчет 1cv7.md Россия Абонемент ($m)

1C 7.7 "Секретный релиз" + Windows Server 2008r2 и 1С запускается и работает, но ввиду того, что обновили BkEnd, потеряли полезнейший функционал, такой как предотвращение "загрузки процессора на 100%" при ожидании блокировки журнала.

2 стартмани

31.03.2011    39137    425    maxpiter    104    

Класс 1С++ для доступа к базе данных FireBird

Внешние источники данных Практика программирования Разработка внешних компонент v7.7 1cv7.md Абонемент ($m)

Класс написан для упрощения работы программиста - уменьшения объема кода.

1 стартмани

04.03.2011    90297    75    wing    3    

ВК для упаковки строк в памяти

Разработка внешних компонент v77::ОУ v77::БУ v77::Расчет 1cv7.md Россия Абонемент ($m)

ВК для упаковки строк в памяти

1 стартмани

07.01.2011    12718    36    nicxxx    18