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

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

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