Имя: Пароль:
1C
 
Как запихнуть дату в 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-сервис смотри не спроси...
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.