|
Журнал регистрации на sqlite | ☑ | ||
---|---|---|---|---|
0
cw014
12.10.15
✎
10:27
|
День добрый, коллеги! Есть вопрос по сабжу. Данный журнал вытащить получилось, впринципе все устраивает, но есть одно !НО!. В нем есть поле "data", в нем хранится информация, но эта информация в "кракозябрах" (псевдуникод от 1С). Так вот вопрос. Можно ли в запросе к sqlite указать какую-нибудь конструкцию, что бы преобразовать это поле в читаемое? (Именно в запросе, кодом 1С не предлогать) И если такого нельзя сделать - есть ли возможность внедрить пользовательскую функцию в sqlite? (через php это сделать можно, но PHP обработчика на сервере нет и не будет)
Заранее спасибо! |
|||
1
cw014
12.10.15
✎
10:38
|
АП
|
|||
2
SiAl-chel
12.10.15
✎
10:42
|
(0)
1. "не предлАгать" 2. Что за журнал регистрации? От базы 1С? Как он попал в sqlite? Может стоит в механизм импорта журнала регистрации что-то подправить? |
|||
3
Живой Ископаемый
12.10.15
✎
10:43
|
2(2) Последние релизы 1С ведут ЖР в СКЛлайт, уважаемый Рип ван Винкль
|
|||
4
cw014
12.10.15
✎
10:45
|
(2) 1) Простите за мой французский, исправлюсь
2) +(3) |
|||
5
cw014
12.10.15
✎
10:45
|
Всё обсудили? Вопросов посторонних если больше нету, хотелось бы услышать ваши предложения
|
|||
6
Aleksey
12.10.15
✎
10:48
|
залить в скуль и оттуда читать
|
|||
7
Гёдза
12.10.15
✎
10:49
|
Обязательно преобразовывать прям в скл? в постобработке никак нельзя?
|
|||
8
Aleksey
12.10.15
✎
10:49
|
||||
9
Гёдза
12.10.15
✎
10:50
|
Но 1с не рекомендует на высоконагруженных системах такой формат
|
|||
10
Aleksey
12.10.15
✎
10:50
|
(7) можно
Обращаю внимание на параметр в строке подключения "BigInt=1", только так, поле хранящее дату будет возвращать корректный результат. Кстати, дата хранится как целое число. Например, если дата равна 635453673444260, то чтобы перевести в привычный тип Дата, нужно сделать так: ОбычнаяДата = '00010101000000' + 635453673444260/10000; //03.09.2014 18:55:44 (с) http://catalog.mista.ru/public/302977/ |
|||
11
cw014
12.10.15
✎
10:53
|
(8) Читал, ответа на вопрос не получил
(6) Как вариант, но неохота временную таблицу создавать и туда пост-обработкой пихать Суть такова - 1 раз в день журнал регистрации выкидывается в MSSQL уже преобразованный (корректные строки, даты вместо чисел). После этого журнал регистрации очищается. Задача такая: совместить данные MSSQL и SQLITE (через внешние источники данных), то есть поля должны быть идентичными. P.S. Не по теме немного. Можно прямо в запросе сделать: SELECT CASE WHEN date = 0 THEN '0001-01-01 00:00:00' ELSE datetime(date/10000-62135578800,'unixepoch') END as date FROM EventLog |
|||
12
cw014
12.10.15
✎
10:54
|
+(10) Таким образом получается дата UTC, ее еще нужно в МестноеВремя(???) конвертировать
|
|||
13
cw014
12.10.15
✎
11:20
|
UP
|
|||
14
Aleksey
12.10.15
✎
11:25
|
(13) что UP?
Строка соединения какая? ПараметрыСоединения.СтрокаСоединения = "DRIVER=SQLite3 ODBC Driver;Database=" + ФайлЖурналаРегистрации + ";BigInt=1;"; BigInt = 1 прописывал? Что он возвращает в этом случае? |
|||
15
cw014
12.10.15
✎
11:26
|
(14) Друг сердешный... При чем тут BigInt и СТРОКИ???
|
|||
16
cw014
12.10.15
✎
11:27
|
BigInt влияет на даты. С датами я решил вопрос. Надо решить вопрос со СТРОКАМИ UNICODE в UNICODE (как 1С любит делать)
|
|||
17
cw014
12.10.15
✎
11:27
|
То есть сконверировать в удобочитаемый вид "Авто"
|
|||
18
cw014
12.10.15
✎
11:33
|
От отчаяния уже такую конструкцию пробовал:
select replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(data,'С‘', 'ё'),'РЃ', 'Ё'),'Рґ', 'д'),'РҐ', 'Х'),'С€', 'ш'),'Рџ', 'П'),'Рў', 'Т'),'Рќ', 'Н'),'Рћ', 'О'),'Рњ', 'М'),'Рљ', 'К'),'Рј', 'м'),'Сї', 'п'),'Рі', 'г'),'Рѕ', 'о'),'Рє', 'к'),'Сѓ', 'у'),'Рђ', 'А'),'Рё', 'и'),'Р»', 'л'),'Р·', 'з'),'Р¶', 'ж'),'Рµ', 'е'),'Р±', 'б'),'Р°', 'а'),'Р®', 'Ю'),'Р', 'Э'),'Р¬', 'Ь'),'Р«', 'Ы'),'Р©', 'Щ'),'Р§', 'Ч'),'Р¦', 'Ц'),'Р¤', 'Ф'),'Р ', 'Р'),'Р?', 'И'),'СЏ', 'я'),'РЎ', 'C'),'СЌ', 'э'),'СЋ', 'ю'),'СЊ', 'ь'),'СЉ', 'ъ'),'РЈ', 'У'),'РЇ', 'Я'),'РІ', 'в'),'РЅ', 'н'),'РЄ', 'Ъ'),'СЃ', 'с'),'СЂ', 'р'),'РЁ', 'Ш'),'Р?', 'Й'),'Р№', 'й'),'Р›', 'Л'),'С‹', 'ы'),'С‰', 'щ'),'С…', 'х'),'Р•', 'Е'),'С‡', 'ч'),'С†', 'ц'),'С„', 'ф'),'Р”', 'Д'),'Р“', 'Г'),'С‚', 'т'),'Р’', 'В'),'Р‘', 'Б'),'Р—', 'З'),'Р–', 'Ж') as data from eventlog |
|||
19
cw014
12.10.15
✎
11:34
|
Произошла исключительная ситуация (Microsoft OLE DB Provider for ODBC Drivers): parser stack overflow (1)
|
|||
20
Живой Ископаемый
12.10.15
✎
11:35
|
Ты применил шаблон проектирования "декоратор"! :)
|
|||
21
cw014
12.10.15
✎
11:35
|
(20) Ыыыыыы
|
|||
22
cw014
12.10.15
✎
11:51
|
Вверх!
|
|||
23
Гёдза
12.10.15
✎
11:55
|
ну явно твой драйвер не умеет утф
|
|||
24
cw014
12.10.15
✎
11:57
|
(23) Спасибо, кэп. Не в драйвере дело а в кривом хранении 1Ской своих данных
|
|||
25
oleg_km
12.10.15
✎
12:02
|
(24) Странно, у меня sqlitebrowser все открылось
|
|||
26
Гёдза
12.10.15
✎
12:04
|
(24) Ты уверен?
|
|||
27
cw014
12.10.15
✎
13:55
|
(25) Отлично, что в поле data у тебя
(26) Не совсем, однако механизмов у ODBC я не нашел. Если подскажешь - респект тебе |
|||
28
Живой Ископаемый
12.10.15
✎
14:12
|
(27) А как ты вообще читаешь ЖР? У меня через ОДБС при помощи Внешних Источников Данных так и не вышло.... было сказано что файл или не база данных вовсе или заэкнрипчен
|
|||
29
oleg_km
12.10.15
✎
14:13
|
(27)
Ну вот: 1179:b872ca30957d86c64807bf83bf442104 - это похоже ссылка Или вот: "ServerSysLog" - то я сам писал А, вот что-то записалось непонятное: "СерверныеСервисы._ЗапуститьМонитор" При этом в комментарии все нормально: {Обработка.окПроцессУдаленный.МодульОбъекта(152)}: Вызов службы SrvAGP. System.ArgumentException: Process with an Id of 7660 is not running. at System.Diagnostics.Process.GetProcessById(Int32 processId) at SrvAGP.RequestCmdGetExec.ExecCmd(ResponseCmd oResp) at SrvAGP.ExecQuery.HandleQuery() Ну т.е. в comment все пишется нормально, а в data что-то с уникодом. Может два раза нужно преобразовать? |
|||
30
cw014
12.10.15
✎
14:27
|
(27) Я про это и говорил. Во все поля пишется нормально, кроме поля data
|
|||
31
cw014
12.10.15
✎
14:29
|
(28) Копируй из папки куда нибудь файлы lgd, lgd-shm и lgd-wal. 1С открывает их на RW - ODBC уже не может открыть их, так как они заняты 1Синой
|
|||
32
Живой Ископаемый
12.10.15
✎
14:31
|
хм... Ну я так и сделал, что ж я по-твоему совсем того...
драйвер брал отсюда: http://www.ch-werner.de/sqliteodbc/ |
|||
33
oleg_km
12.10.15
✎
14:48
|
(32) sqlitebrowser открыл файл прямо на ходу, без копирования. Может там нужно флажок монопольный доступ где-нибудь снять
|
|||
34
cw014
12.10.15
✎
15:08
|
(32) Какой драйвер брал?
|
|||
35
cw014
12.10.15
✎
15:09
|
(33) Может быть, я не могу открыть через "ReadOnly". Возможно сам драйвер не поддерживает
|
|||
36
Живой Ископаемый
12.10.15
✎
15:23
|
2(34) Все-таки в итоге получилось, коггда завел через Источники ОДБЦ файловый ДСН, указал Драфвер для 3 СКЛЛайт, потом из полученного файла ДСН скопировал текст, и вставил его как строку подключения для Внешнего Источника Данных, разделив строки ";".
В конфигураторе увидел все таблицы, кинул таблицу EventLog в качестве источника ДинамическогоСписка на УФ, и в режиме предприятия не увидел ни строчки. :( Потерял пока интерес, и закрыл все... Может позже. |
|||
37
cw014
12.10.15
✎
15:41
|
(36) Радует, что у тебя что-то получилось. А теперь может кто-нибудь подсказать по моему вопросу?
|
|||
38
Живой Ископаемый
12.10.15
✎
16:18
|
||||
39
Живой Ископаемый
12.10.15
✎
16:23
|
Могу сказать строку подключения, если интересно
|
|||
40
Провинциальный 1сник
12.10.15
✎
16:57
|
А почему бы не хранить журнал регистрации в самой базе, используя СУБД базы? Что мешает, непонятно..
Возможно некоторые события должны логироваться и без связи с базой - пусть, но их на несколько порядков меньше, чем событий, связанных базой. |
|||
41
Aleksey
12.10.15
✎
18:37
|
(40) из-за блокировки ИМХО
|
|||
42
Провинциальный 1сник
12.10.15
✎
19:09
|
(41) Ну так база не целиком блокируется. А при добавлении строки события блокировка таблицы журнала регистрации не обязательна. Думаю, это (хранение ЖР вне базы) - тяжкое наследство файлового формата базы, которое по какой-то непонятной причины тянут и в клиент-сервер.
|
|||
43
cw014
13.10.15
✎
07:31
|
(38) Молодец. Наверное невнимательно читаешь форум. В основном поля нормальные, кроме поля "data"
|
|||
44
cw014
13.10.15
✎
07:40
|
Сабж все еще актуален
|
|||
45
cw014
13.10.15
✎
07:59
|
:(
|
|||
46
cw014
13.10.15
✎
09:48
|
Апачки
|
|||
47
Strogg
13.10.15
✎
09:52
|
(9) где почитать, чтоб начальству переслать? А то неделю долбился - восстанавливал ЖР после краша...
|
|||
48
Живой Ископаемый
13.10.15
✎
10:26
|
(43)да, действительно...
Ну тогда вот корявый способ: http://screencast.com/t/BhgkHg5hed Вот способ, про который чувак думает что он не корявый: http://habrahabr.ru/post/107945/ :) Успехов |
|||
49
Живой Ископаемый
13.10.15
✎
10:26
|
ЗТ = Новый Записьтекста("d:\EPF_ERF\123.txt","windows-1251");
ЗТ.ЗаписатьСтроку(СтраннаяСтрока); ЗТ.Закрыть(); ЧТ = Новый Чтениетекста("d:\EPF_ERF\123.txt",КодировкаТекста.UTF8); Строка = ЧТ.Прочитать(); ЧТ.Закрыть(); ==== Как сделать не терзая винт - не знаю. |
|||
50
Живой Ископаемый
13.10.15
✎
10:28
|
А как прямо в запросе. чтобы например к этому полю мы могли например применить оператор "ПОДОБНО" - так и ваще
|
|||
51
cw014
13.10.15
✎
11:07
|
Ладно, спасибо всем за помощь и понимание. Иными способами попробую
|
|||
52
cw014
13.10.15
✎
11:08
|
(49) Мой коллега сказал, что это похоже на "вырывание гланд через ж**у бор-машиной с приминением автогена"
|
|||
53
Провинциальный 1сник
14.10.15
✎
07:29
|
(52) С такой же проблемой можно столкнуться, когда надо текстовый файл, хранящийся в двоичных данных, интерпретировать как текст в 1с. Ну не умеет объект типа Текст загружаться из двоичных данных, только из файла. Вот и приходится выгружать ДД в файл, а потом загружать в Текст. Другого варианта нет(
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |