|
Как запихнуть дату в 10-разрядное число? | ☑ | ||
---|---|---|---|---|
0
Гений 1С
гуру
01.10.14
✎
13:52
|
Хочу отказаться от использования номеров версий в версионировании.
там регистр с ключом Объект + Номер версии + узел обмена. Вот я и хочу использовать вместо номера дату. Там 10 разрядов. Ну и еще хотелось бы пару разрядов на случайный ключ сделать. Может быть как разность дат с 1980 годом? |
|||
1
Maxus43
01.10.14
✎
14:02
|
почему именно в число, а не использовать тип Дата?
|
|||
2
Maxus43
01.10.14
✎
14:05
|
>>там 10 разрядов
ну и собери число : 20141001, для даты надо 8 разрядов. |
|||
3
1dvd
01.10.14
✎
14:07
|
можно в семь уложиться.
Год*1000 + НомерДнягода |
|||
4
Garikk
01.10.14
✎
14:07
|
unix-time было бы грамотнее и интереснее imho и как плюс версионирование с точностью до секунды можно
|
|||
5
User_Agronom
01.10.14
✎
14:09
|
(3) Даже в пять.
|
|||
6
Maxus43
01.10.14
✎
14:10
|
а, надож до секнды наверно, току от дня то
|
|||
7
1dvd
01.10.14
✎
14:11
|
(5) да. не думаю, что версионирование идет ранее 2000-го года
|
|||
8
1dvd
01.10.14
✎
14:12
|
(6) первые 5 цифр - дата, вторые - секунда (0-86399)
|
|||
9
Kamas
01.10.14
✎
14:17
|
просто считать секунды с 2000 года
|
|||
10
Kamas
01.10.14
✎
14:19
|
10 разрядов хватит примерно на 7000 лет
|
|||
11
Kamas
01.10.14
✎
14:23
|
(10) так что можно от рождества христова тащить
|
|||
12
Kamas
01.10.14
✎
14:27
|
(10) ошибочка на 300 лет
|
|||
13
1dvd
01.10.14
✎
15:00
|
(9) сложновато будет декодить
|
|||
14
User_Agronom
01.10.14
✎
15:07
|
(13) Дата 01.01.2000 + число секунд. Не?
Дата("20000101000000")+ЧислоСекунд; |
|||
15
Kamas
01.10.14
✎
15:08
|
почему
Функция ДатаЗаписиВерсии(СекундыИзРегистра) Возврат Дата("20000101000000")+СекундыИзРегистра; КонецФункции |
|||
16
Гений 1С
гуру
01.10.14
✎
18:29
|
забейте, решил так:
База = Подключение(); З = Новый Запрос( "ВЫБРАТЬ ПЕРВЫЕ 300 | ВерсииОбъектов.Объект, | ВерсииОбъектов.НомерВерсии, | ВерсииОбъектов.УзелПланаОбмена, | ВерсииОбъектов.УзелПланаОбмена.Код, | ВерсииОбъектов.ВерсияОбъекта, | ВерсииОбъектов.АвторВерсии, | ВерсииОбъектов.ДатаВерсии, | ВерсииОбъектов.Сжато |ИЗ | РегистрСведений.ВерсииОбъектов КАК ВерсииОбъектов |"); ИмяФайла = ПолучитьИмяВременногоФайла(); КомСжатие = База.NewObject("СжатиеДанных", 9); //Сильно сжатое Выборка = З.Выполнить().Выбрать(); Всего = Выборка.Количество(); Сч = 0; Пока Выборка.Следующий() Цикл Сч = Сч + 1; Если Сч % 100 = 0 Тогда #Если Клиент Тогда Состояние("Обработано: " + Сч + " из " + Всего); ОбработкаПрерыванияПользователя(); #КонецЕсли КонецЕсли; ЗначениеВерсии = Выборка.ВерсияОбъекта.Получить(); Если ЗначениеВерсии = Неопределено Тогда Продолжить; КонецЕсли; Если НЕ ЗначениеЗаполнено(Выборка.Объект) Тогда Продолжить; КонецЕсли; //Ищем тип МД = Метаданные.НайтиПоТипу(ТипЗнч(Выборка.Объект)); ИмяМД = МД.ПолноеИмя(); КомТип = База.Справочники.Типы.НайтиПоНаименованию(ИмяМД); Если Не База.ЗначениеЗаполнено(КомТип) Тогда КомОбъект = База.Справочники.Типы.СоздатьЭлемент(); КомОбъект.Наименование = ИмяМД; КомОбъект.Записать(); КомТип = КомОбъект.Ссылка; КонецЕсли; //Автор ИмяАвтора = СокрЛП(Выборка.АвторВерсии); КомАвтор = База.Справочники.Авторы.НайтиПоНаименованию(ИмяАвтора); Если Не База.ЗначениеЗаполнено(КомАвтор) Тогда КомОбъект = База.Справочники.Авторы.СоздатьЭлемент(); КомОбъект.Наименование = ИмяАвтора; КомОбъект.Записать(); КомАвтор = КомОбъект.Ссылка; КонецЕсли; //Узел обмена КодУзла = ?(ЗначениеЗаполнено(Выборка.УзелПланаОбмена), СокрЛП(Выборка.УзелПланаОбмена.Код), "-"); КомУзел = База.Справочники.УзлыОбмена.НайтиПоКоду(КодУзла); Если Не База.ЗначениеЗаполнено(КомУзел) Тогда КомОбъект = База.Справочники.УзлыОбмена.СоздатьЭлемент(); КомОбъект.Код = КодУзла; КомОбъект.Записать(); КомУзел = КомОбъект.Ссылка; КонецЕсли; ГУИД = Строка(Выборка.Объект.УникальныйИдентификатор()); КомГУИД = База.NewObject("УникальныйИдентификатор", ГУИД); ЗначениеВерсии.Записать(ИмяФайла); КомДД = База.NewObject("ДвоичныеДанные", ИмяФайла); КомХранилище = База.NewObject("ХранилищеЗначения", КомДД); //Пишем в базу версий МЗ = База.РегистрыСведений.ВерсииОбъектов.СоздатьМенеджерЗаписи(); МЗ.Объект = КомГУИД; МЗ.Тип = КомТип; МЗ.АвторВерсии = КомАвтор; МЗ.УзелПланаОбмена = КомУзел; МЗ.НомерВерсии = Выборка.НомерВерсии; МЗ.ДатаВерсии = Выборка.ДатаВерсии; МЗ.ВерсияОбъекта = КомХранилище; МЗ.Записать(истина); //Очищаем в текущей базе МЗ = РегистрыСведений.ВерсииОбъектов.СоздатьМенеджерЗаписи(); ЗаполнитьЗначенияСвойств(МЗ, Выборка); МЗ.Удалить(); КонецЦикла; |
|||
17
Dzenn
гуру
01.10.14
✎
18:30
|
(16) пирожок на полке ждёт тебя не дождётся ;-
|
|||
18
Bober
01.10.14
✎
19:05
|
(16) самое удобное решение - секционирование данных средствами SQL.
|
|||
19
Гений 1С
гуру
01.10.14
✎
19:08
|
(18) да вы что? Суть в том, что все равно это будет храниться в одной базе 1С и будет пересчитываться при реструктуризациях и т.п.
|
|||
20
laeg
01.10.14
✎
19:24
|
COM соеденение будешь постоянно держать открытым ? Да и внешние источники данных уже некошерно использовать для хранения всякого хлама?
|
|||
21
Гений 1С
гуру
03.10.14
✎
13:53
|
(20) ну что ты, буду перекачивать версии раз в час, например.
|
|||
22
Гений 1С
гуру
03.10.14
✎
13:54
|
вынес на инфостарт эту тему, кому интересно: http://infostart.ru/public/305358/
|
|||
23
smotritel
03.10.14
✎
15:19
|
(20) он не знает что такое "Внешние источники данных", т.к. только слез с 8.1.
ты его ещё про REST-сервис смотри не спроси... |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |