Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Как распознать разные форматы даты при загрузке из Xls, Dbf          
logist Подменю пользователя
сообщение 01.03.12, 10:07
Сообщение #1

Про1С-ник
Иконка группы
Квалифицированный бухгалтерГений телепатии и социального моделированияЗа заслуги на форуме в 2010 годуМодератору Про1С (за заслуги в 2011 году)
Группа: Местный
Сообщений: 9564
Из: Kharkiv, UA
Спасибо сказали: 2536 раз
Рейтинг: 0

При загрузке данных xls, dbf-файлов получаем значение ячейки, и его надо сохранить как дату, но в исходных файлах это значение может иметь разный формат дат, а так же быть в виде числа (только Год). Как это дело можно реализовать? Т.е. что бы все возможные варианты преобразовывались в формат даты 1С (только дата).

пл. 8,2,14,540


Signature
Личные бесплатные консультации не даю, для этого есть форум!

MATEVI Подменю пользователя
сообщение 01.03.12, 11:14
Сообщение #2

Отдыхающий
Иконка группы
Ветеран троянской войныМодератору Про1С (за заслуги в 2011 году)
Группа: Местный
Сообщений: 2201
Из: Одесса
Спасибо сказали: 956 раз
Рейтинг: 0

Универсального ничего не находил. Играться со строками с использованием СтрДлина, Сред, Лев и т.д.


Еще можно глянуть в комплект обработок клиент банков абби там что то можно надергать

Спасибо сказали: logist,

logist Подменю пользователя
сообщение 01.03.12, 11:14
Сообщение #3

Про1С-ник
Иконка группы
Квалифицированный бухгалтерГений телепатии и социального моделированияЗа заслуги на форуме в 2010 годуМодератору Про1С (за заслуги в 2011 году)
Группа: Местный
Сообщений: 9564
Из: Kharkiv, UA
Спасибо сказали: 2536 раз
Рейтинг: 0

А можно конкретный пример?
Я просто не могу сообразить как распознать сам полученный формат. Допустим поле имеет формат Дата, но варианты могут быть разные, например подходящий для 1С ГГГГММДД, и ДДММГГ


Signature
Личные бесплатные консультации не даю, для этого есть форум!

MATEVI Подменю пользователя
сообщение 01.03.12, 11:25
Сообщение #4

Отдыхающий
Иконка группы
Ветеран троянской войныМодератору Про1С (за заслуги в 2011 году)
Группа: Местный
Сообщений: 2201
Из: Одесса
Спасибо сказали: 956 раз
Рейтинг: 0

// проверка на дату платежа
Если Формат(ФайлDBF.DATE,"ДФ=dd.MM.yyyy") <>  Формат(Параметры.ДатаДок,"ДФ=dd.MM.yyyy") Тогда
        ФайлDBF.Следующая();
        Продолжить;
КонецЕсли;


Ну или там допустим
Если СтрДлина(ФайлDBF.DATE) = 4 - то тогда год

Сообщение отредактировал MATEVI - 01.03.12, 11:26

Vofka Подменю пользователя
сообщение 01.03.12, 11:26
Сообщение #5

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13948
Из: Киев
Спасибо сказали: 4514 раз
Рейтинг: 3635.6

http://pro1c.org.ua/index.php?showtopic=4188

pablo Подменю пользователя
сообщение 01.03.12, 11:26
Сообщение #6

Старейшина
********
Группа: Команда (модераторы)
Сообщений: 1116
Из: Одесса-Луганск
Спасибо сказали: 192 раз
Рейтинг: 0

В первую очередь пытаться определить, xls или dbf по внешним признакам. С дбфной датой сама 1С нормально разбирается, если работать через Xbase.


Signature
Правильно поставленный вопрос содержит до 90% ответа.

logist Подменю пользователя
сообщение 01.03.12, 11:27
Сообщение #7

Про1С-ник
Иконка группы
Квалифицированный бухгалтерГений телепатии и социального моделированияЗа заслуги на форуме в 2010 годуМодератору Про1С (за заслуги в 2011 году)
Группа: Местный
Сообщений: 9564
Из: Kharkiv, UA
Спасибо сказали: 2536 раз
Рейтинг: 0

MATEVI спасибо за подсказку с обработками КБ! Буду что-то изобретать smile.gif


Signature
Личные бесплатные консультации не даю, для этого есть форум!

MATEVI Подменю пользователя
сообщение 01.03.12, 11:30
Сообщение #8

Отдыхающий
Иконка группы
Ветеран троянской войныМодератору Про1С (за заслуги в 2011 году)
Группа: Местный
Сообщений: 2201
Из: Одесса
Спасибо сказали: 956 раз
Рейтинг: 0

Цитата(logist @ 01.03.12, 11:27) *
MATEVI спасибо за подсказку с обработками КБ! Буду что-то изобретать smile.gif

Ну или вот еще с мисты как варинат похож на тот что Vofka кинул.

Функция ИзСтрокиВДату(СтрДата)
    стрДата_ = СокрЛП(СтрЗаменить(стрДата,".",""));
    датДата = Сред(стрДата_,5)+Сред(стрДата_,3,2)+Лев(стрДата_,2);
    Если СтрДлина(стрДата_)=6 Тогда
        датДата = "20"+датДата;
    КонецЕсли;            
     Возврат Дата(датДата);
КонецФункции

logist Подменю пользователя
сообщение 01.03.12, 12:31
Сообщение #9

Про1С-ник
Иконка группы
Квалифицированный бухгалтерГений телепатии и социального моделированияЗа заслуги на форуме в 2010 годуМодератору Про1С (за заслуги в 2011 году)
Группа: Местный
Сообщений: 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));
            КонецЕсли;    
        КонецЕсли;
    КонецЕсли;    
    Возврат Неопределено;
КонецФункции


Signature
Личные бесплатные консультации не даю, для этого есть форум!

Спасибо сказали: MATEVI,

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 29.03.24, 2:07
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!