Группа: Местный
Сообщений: 9564
Из: Kharkiv, UA
Спасибо сказали: 2536 раз
Рейтинг: 0
При загрузке данных xls, dbf-файлов получаем значение ячейки, и его надо сохранить как дату, но в исходных файлах это значение может иметь разный формат дат, а так же быть в виде числа (только Год). Как это дело можно реализовать? Т.е. что бы все возможные варианты преобразовывались в формат даты 1С (только дата).
пл. 8,2,14,540
Личные бесплатные консультации не даю, для этого есть форум!
Группа: Местный
Сообщений: 9564
Из: Kharkiv, UA
Спасибо сказали: 2536 раз
Рейтинг: 0
А можно конкретный пример? Я просто не могу сообразить как распознать сам полученный формат. Допустим поле имеет формат Дата, но варианты могут быть разные, например подходящий для 1С ГГГГММДД, и ДДММГГ
Личные бесплатные консультации не даю, для этого есть форум!
// проверка на дату платежа Если Формат(ФайлDBF.DATE,"ДФ=dd.MM.yyyy") <> Формат(Параметры.ДатаДок,"ДФ=dd.MM.yyyy") Тогда ФайлDBF.Следующая(); Продолжить; КонецЕсли;
Ну или там допустим Если СтрДлина(ФайлDBF.DATE) = 4 - то тогда год
Группа: Местный
Сообщений: 9564
Из: Kharkiv, UA
Спасибо сказали: 2536 раз
Рейтинг: 0
Вобщем вот что у меня получилось, на имеющихся вариантах отрабатывает нормально.
Функция ПолучитьДатуИзЗначения(Значение) Если ТипЗнч(Значение) = Тип("Дата") Тогда Возврат Значение; ИначеЕсли ТипЗнч(Значение) = Тип("Число") Тогда чДата = Строка(Формат(Значение,"ЧГ=0")); Если СтрДлина(чДата) = 4 Тогда Возврат Дата(чДата,1,1); ИначеЕсли СтрДлина(чДата) = 6 Тогда Если Формат(чДата,"ДФ=ddMMyy") = Формат(ТекущаяДата(),"ДФ=ddMMyy") Тогда Возврат Дата("20"+Сред(чДата,5),Сред(чДата,3,2),Лев(чДата,2)); ИначеЕсли Формат(чДата,"ДФ=yyMMdd") = Формат(ТекущаяДата(),"ДФ=yyMMdd") Тогда Возврат Дата("20"+Лев(чДата,2),Сред(чДата,3,2),Сред(чДата,5)); КонецЕсли; ИначеЕсли СтрДлина(чДата) = 8 Тогда Если Формат(чДата,"ДФ=ddMMyyyy") = Формат(ТекущаяДата(),"ДФ=ddMMyyyy") Тогда Возврат Дата(Сред(чДата,5),Сред(чДата,3,2),Лев(чДата,2)); ИначеЕсли Формат(чДата,"ДФ=yyyyMMdd") = Формат(ТекущаяДата(),"ДФ=yyyyMMdd") Тогда Возврат Дата(Лев(чДата,4),Сред(чДата,5,2),Сред(чДата,7)); КонецЕсли; КонецЕсли; ИначеЕсли ТипЗнч(Значение) = Тип("Строка") Тогда сДата = Значение; Если ОбщегоНазначения.ТолькоЦифрыВСтроке(сДата,Ложь,Ложь) Тогда // ИначеЕсли СтрЧислоВхождений(сДата,"/") Тогда сДата = СтрЗаменить(сДата,"/",""); ИначеЕсли СтрЧислоВхождений(сДата,".") Тогда сДата = СтрЗаменить(сДата,".",""); ИначеЕсли СтрЧислоВхождений(сДата,"-") Тогда сДата = СтрЗаменить(сДата,"-",""); Иначе Возврат Неопределено; КонецЕсли;
Если СтрДлина(сДата) = 4 Тогда Возврат Дата(сДата,1,1); ИначеЕсли СтрДлина(сДата) = 6 Тогда Если Формат(сДата,"ДФ=ddMMyy") = Формат(ТекущаяДата(),"ДФ=ddMMyy") Тогда Возврат Дата("20"+Сред(сДата,5),Сред(сДата,3,2),Лев(сДата,2)); ИначеЕсли Формат(сДата,"ДФ=yyMMdd") = Формат(ТекущаяДата(),"ДФ=yyMMdd") Тогда Возврат Дата("20"+Лев(сДата,2),Сред(сДата,3,2),Сред(сДата,5)); КонецЕсли; ИначеЕсли СтрДлина(сДата) = 8 Тогда Если Формат(сДата,"ДФ=ddMMyyyy") = Формат(ТекущаяДата(),"ДФ=ddMMyyyy") Тогда Возврат Дата(Сред(сДата,5),Сред(сДата,3,2),Лев(сДата,2)); ИначеЕсли Формат(сДата,"ДФ=yyyyMMdd") = Формат(ТекущаяДата(),"ДФ=yyyyMMdd") Тогда Возврат Дата(Лев(сДата,4),Сред(сДата,5,2),Сред(сДата,7)); КонецЕсли; КонецЕсли; КонецЕсли; Возврат Неопределено; КонецФункции
Личные бесплатные консультации не даю, для этого есть форум!
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!