Возможно, кто-то задался целью загружать документы из 1С7.7 в 1С 8.1 прямыми запросами. Тогда вы наверняка столкнетесь с тем, что в таблице _1SJOURN дата и время документа выглядит несколько странно.
То есть, значение в поле «DATE_TIME_IDDOC» выглядит как, например, «2009011385UHM8 EDMU»
85UHM8 и есть так нужное нам время. Как же его привести к виду 1С8.1?
Лично мне понадобилось некоторое время, чтобы решить проблему.
Для начала, в прямом запросе разделим дату и время:
….
|SELECT
|Convert(Char(8),_1SJOURN.DATE_TIME_IDDOC) as Date,
|Substring(_1SJOURN.DATE_TIME_IDDOC,9,6) as Time,
…
На широких просторах интернета мне удалось найти лишь такое решение:
Функция Конвертировать36_10(Рез36)
Если СокрЛП(Рез36)="" тогда
Возврат "0";
КонецЕсли;
Arr36 = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
Deci=0;
Для j=1 по СтрДлина(СокрЛП(Рез36)) цикл
Deci = Deci*36;
Deci = Deci+Найти(Arr36,Сред(СокрЛП(Рез36),j,1))-1;
КонецЦикла;
Возврат Deci:
КонецФункции
Но этого явно не достаточно для решений нашей проблемы…
Конечный вид функции после доработки:
Функция Конвертировать36_Стр(Рез36)
Если СокрЛП(Рез36)="" тогда
Возврат "0";
КонецЕсли;
Arr36 = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
Deci=0;
Для j=1 по СтрДлина(СокрЛП(Рез36)) цикл
Deci = Deci*36;
Deci = Deci+Найти(Arr36,Сред(СокрЛП(Рез36),j,1))-1;
КонецЦикла;
Deci=Deci/10000;
час = Цел(Deci/3600);
ЧасСек = час*3600;
Остаток = Deci-ЧасСек;
мин = Цел(Остаток/60);
минСек = мин*60;
Остаток = Остаток-минСек;
Сек = Остаток;
Возврат Формат(Час,"ЧЦ=2;ЧВН=;ЧН=") + "" + Формат(Мин,"ЧЦ=2;ЧВН=;ЧН=") + ""+Формат(Сек,"ЧЦ=2;ЧВН=;ЧН=");
КонецФункции
Вот теперь можем смело писать дату и время документа:
…
НовДок.Дата = Дата(""+Набор.Fields("Date").Value + Конвертировать36_Стр(Набор.Fields("Time").Value) );
…
PS: Предназначено для бухгалтерских конфигураций)