Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Структура хранения в SQL ИсторииДанных. Как распарсить поле "DataId" с типом binary(20)

Структура хранения в SQL ИсторииДанных. Как распарсить поле "DataId" с типом binary(20)
Я
   arsik
 
02.09.21 - 15:51
Предыстория:
В системе истории данных сначала все изменения пишутся в таблицу DataHistoryQueue0.
Далее по регзаданию или когда пользователь интерактивно заглянет в историю, данные по объекту "переезжают" в таблицу "DataHistoryVersions" где в последующем и хранятся.
Это штатная работа 1с.
Мы по регзаданию историю данных не обновляем. Соответственно в таблице DataHistoryQueue0 накопилось много всего, в том числе и неактуального (нам последний месяц всего то и нужен).

Вопрос:
В таблице DataHistoryQueue0 - есть поле "DataId" с типом binary(20), как его в дату преобразовать, что бы удалить из нее все старые записи.
https://i.imgur.com/QzLZRfQ.png
   Garykom
 
1 - 02.09.21 - 15:54
(0) там разве не число секунд?
   arsik
 
2 - 02.09.21 - 16:07
Так. Поле DataId вообще к дате не имеет отношения :)) Это ссылка на объект видимо + еще 4 каких то байта.
   Garykom
 
3 - 02.09.21 - 16:08
(2) в _Content все ?
   ДенисЧ
 
4 - 02.09.21 - 16:09
Шо, Лицензию нарушаем?
   Garykom
 
5 - 02.09.21 - 16:10
(4) Любая работа в SQL базе напрямую с данными нарушает лицуху 1С?
   arsik
 
6 - 02.09.21 - 16:17
(4) Ой мамочки. Я после работы свечку в храме поставлю и все будет ок.
(5) В некоторых кругах ходят такие слухи, но это как тот Неуловимый Джо - Нахрен никому ненужен.
   arsik
 
7 - 02.09.21 - 16:19
(3) Видимо. Так что без стандартных средств эту лабуду не сделать.
   ДенисЧ
 
8 - 02.09.21 - 16:20
(5) "что бы удалить из нее все старые записи"
Запись - да, нарушает
   Dmitrii
 
9 - 02.09.21 - 16:22
(5) ОПИСАНИЕ ПРАВ И ОГРАНИЧЕНИЙ
Лицензиат обязуется не допускать нарушений исключительных прав Правообладателя на ПРОГРАММНЫЙ ПРОДУКТ, в частности, не совершать и не допускать совершения третьими лицами следующих действий без специального письменного разрешения Правообладателя:
- вносить какие-либо изменения в ..., содержимое баз данных и других наборов данных, в которых система хранит информацию, за исключением тех изменений, которые вносятся штатными средствами, входящими в состав ПРОГРАММНОГО ПРОДУКТА и описанными в сопроводительной документации;
- осуществлять доступ к информационной базе ПРОГРАММНОГО ПРОДУКТА и построение систем на основе ПРОГРАММНОГО ПРОДУКТА с помощью средств и технологических решений, не предусмотренных в сопроводительной документации.

Ну и где-то когда-то были комментарии от 1С, что смысл этих ограничений в недопустимости работы пользователя с БД напрямую в обход стандартных средств, предусмотренных самой 1С. Читать - пожалуйста. "Вносить какие-либо изменения" - нет.
   arsik
 
10 - 02.09.21 - 16:24
(8) На самом деле эта часть лицензии нужна для того, что бы 1С сняла с себя ответственность когда юзер руками таблички субд изменяет. И пока ты в 1С не обратишься с претензией: "я вот тут одну табличку затер и у меня база развалилась" никто на этот пункт смотреть не будет.
   Dmitrii
 
11 - 02.09.21 - 16:28
(10) А это ты потом прокурору рассказывать будешь (с) Старый советский кинофильм (название забыл)
   Garykom
 
12 - 02.09.21 - 16:30
(7) попробуй на шару де base64
   arsik
 
13 - 02.09.21 - 16:31
(11) Тебя уж точно не спрошу.
   arsik
 
14 - 02.09.21 - 16:32
(12) Так это долго будет выполнятся. Быстрее штатными средствами в несколько потоков.
   Dmitrii
 
15 - 02.09.21 - 17:25
А прям вот срочно надо?
Чего бы не запилить обработку, которая в несколько потоков выполняла бы обновление и чистку истории данных?
   arsik
 
16 - 02.09.21 - 18:03
(15) Это само собой, просто обнаружили, что база распухла, хотелось почистить оперативно, но видимо только через стандартные механизмы и медленно :). Хорошо хоть распараллелить можно.
   Жан Пердежон
 
17 - 02.09.21 - 23:47
(9) ADODBConnection = Новый COMОбъект("ADODB.Connection");
и изменяй/читай что угодно "штатными средствами"
   VS-1976
 
18 - 03.09.21 - 01:04
4 байта это тип, 16 байт guid
   youalex
 
19 - 03.09.21 - 01:39
(18) не факт , там нули на скрине. Скорее разделение данных какое-то. Плюс есть еще столбец _metadataid
(16) сильно костыльно, можно скопировать эту таблицу в другую БД (не 1с) а исходную очистить. И руками создать в DataHistoryQueue0 столбец, который по дефолту будет заполняться getdate(). Такое, и (4) )
   ildary
 
20 - 03.09.21 - 09:21
Почему Вы решили, что в DataId должна быть дата? "Data" - это "Данные", а "Дата" - это "Date".
   arsik
 
21 - 03.09.21 - 10:20
(20) я же в (2) исправился уже. Просто глаз замылился. Вижу Data, а в голове Date. Ну и по контексту подразумевалось, что наверно где то дата должна хранится. Поэтому промохал.


Список тем форума
 
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.