ADODB: загрузка документов из 1С7.7 в 1С8.1. Получаем время документа
Для новичков!!!
_1SJOURN
DATE_TIME_IDDOC
«2009011385UHM8 EDMU»
как получить время?
- Описание
- Подробнее
Описание
Возможно, кто-то задался целью загружать документы из 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: Предназначено для бухгалтерских конфигураций)