Related Posts
Получение логина и пароля техподдержки 1С из базы
Класс для вывода отчета в Excel
Счет-фактура для УПП
Библиотека классов для создания внешней компоненты 1С на C#
Акт об оказании услуг (со скидками) — внешняя печатная форма для Управление торговлей 11.1.10.86
Прайс-лист с артикулом в отдельной колонке
Функция преобразование всяких вариантов строк в дату. Искал, но не нашел на сайте.
Преобразовывает СТРОКИ вида «01/10/13″,»01-10-2013″,»10,13″,»10.13″,»01.03.2013 0:00:00» к типу ДАТА
Может, кому пригодится.
В обработке используется стандартная функция разложить строку, указываю ее ниже.
Перейти к публикации
неплохо, только можно было бы разделитель сделать параметром, и код бы упростился
(1) dv2008, Я уже думал, но у меня с разных мест идет дата в разных форматах, поэтому чтоб не гадать, поставил все на проверку…
(1),(2)
по поводу параметра-разделителя
а он нужен?
попробуйте такое:
Показать полностью
попробуйте вместо минуса использовать другой символ, букву
попробуйте разные символы, напр., "01{10}2013"
будете приятно удивлены
(3) tdr1225,
попробовал Ваш код, у меня выдает ошибку. что с фигурными скобками, что с минусом:
{(2)}: Преобразование значения к типу Дата не может быть выполнено
(4) какой релиз 1с?
Побробуйте, передать строку 01.10/2013 или 01-10/2011. Ваша Функция не совершена.
Как правило, необходимость перевода строки в дату возникает при загрузке информации откуда-нибудь (например, из текстового файла, или Экселя). В таком случае, написать парсер для даты совсем несложно — потому что все строки одного вида. Таким образом, универсальность здесь оказывается не то чтобы лишней, но может заметно замедлить загрузку. Тем не менее, безусловно, полезная вещь. Отдельное спасибо за открытость
вот пример с меньшей функциональностью и с меньшим временем выполнения:
Функция ДатаИзСтроки10(стрДата) экспорт // «01.12.2011» преобразует в ‘01.12.2011 0:00:00’
Попытка
возврат Дата(Сред(стрДата,7,4)+Сред(стрДата,4,2)+Лев(стрДата,2))
Исключение
возврат ‘00010101’
КонецПопытки;
КонецФункции // ДатаИзСтроки10()
Тоже не лишнее.. +1
Только что преогромно выручил. Преогромное же спасибо. Нет, вернее, СПАСИБО!
Спасибо, пригодилось. Сэкономил время.
Спасибо. Пригодилось.
Спасибо
Спасибо, интересная реализация, жаль время не учитывает.
Спасибо. Делала импорт отсканированных Товарных чеков из EXCEL в авансовый отчет. Для этого сначала в EXCEL дату входящего документа преобразовывала из формата Текст в формат Дата, а затем в формат число. Далее при импорте в 1с необходимо было преобразовать это число-дату в дату 1с — при этом учесть и то, что в EXCEL исчисление даты начинается с 01.01.1900 и то, что в EXCEL 1900год — высокосный год. Выглядело это так:
ДатаВходящегоДокумента = Дата(‘19000101’)+(86400*(Число(ДатаВходящегоДокумента)-2)
с вашей функцией как-то лаконичней:
ДатаВходящегоДокумента = ПолучитьДатуИзСтроки(ДатаВходящегоДокумента)
К тому же избавилась от ненужных преобразований даты в EXCEL .
Спасибо. Очень пригодилась.
(6) Хочу сказать, что вся 1С далека от совершенства.
Согласна с (7) — Отдельное спасибо за открытость.
Спсибо Долго рассказывать для чего но пригодилась
Большое спасибо! Очень нужная и полезная вещица! Пригодилась вовремя! Спасибо!
Даже не пришлось думать, спасибо. Очень помогает постоянно.
Вот спасибо!
а если в переданной строке заменить разделитель на некий стандартный (напр. «%»), тогда код можно сделать компактнее, т.е. только для стандартного разделителя.
Спасибо! Помогла очень функция!!!!
Спасибо. свою делать лень. пригодилась.
Спасибо, пригодилось.
Спасибо. Оооооочень полезная вещь.
Может кому понадобится без длинных функций… так вот, как ни странно, но работает такая конструкция:
равно как
Спасибо, пригодилась функция.
а нет у кого варианта преобразовать из строки вида 06 ноября 2014 г.
а то ничего путного в голову не приходит: придется все имена месяцев перебирать (
(27) kentavr27, при чём Дата(«03.06.2014»); не сработает, вызовет исключение, а Дата(«03.06.2014 00:00:00»); — сработает. Хотя это и странно, ведь в СП именно год на первом месте…
(29) Vodoley, вот тут в примере под номером 13 есть нужное вам решение. На всякий случай приведу его здесь полностью
Показать
Это универсальная функция — работает с любым форматом даты. В том числе с тем, где месяц написан прописью. Дни недели разве что словами нельзя (в данной реализации) называть.
А мне подошел вот такой вариант:
ну, то есть сначала надо вырезать все разделители и получить непрерывный набор цифр:
Дата(«20150822110645») равносильно 22.08.2015 11:06:45
(31) ildarovich, с любым форматом даты как раз-таки не работает )
Уж не спрашивайте меня о специфике, но в общем, я пытался сопротивляться… 🙂
Доработал предложенный Вами алгоритм для формата данных без даты (только время), пример формата: «ДФ=HH:mm:ss»
Показать
(33) DrBlack, мне самому решение задачи №13 не очень нравится. Я его привел «за компанию» с другими комментариями. Не для того, чтобы использовать в готовом виде, а для того, чтобы можно было извлечь приемы использования соответствия в этой задаче.
Спасибо. Очень помогло. Всё работает, просто замечательно.
Спасибо. Очень помогло. Всё работает.
Делал себе функцию для даты из exel… функция не универсальная, для решения локальной задачи.
Показать
забыл дата формата «27 ноября 2015 г.»
Спасибо. Мне в обработку загрузки из excel вполне пришлось к месту
Показать
Показать
В замечательном примере вот этот кусок не работает: Формат(Дата(1, ё, 1), «ДФ=MMММ»)
Потому, что для пустой даты название месяца не вернет, у меня возвращает «» (пустую строку). В синтакс помощнике сказано, что должен возвращать строку «Пустая дата».
И даже если написать Дата(2,ё,1), тоже не подходит, т.к. название месяца идет в именительном падеже («Январь»), а в формате «ДЛФ = DD» месяцы идут в родительном («Января»).
Но логика понятна, буду с утра разбираться. Сервак отрубился удаленный.
В общем сделал так Сред(Формат(Дата(2019, ё, 10), «ДФ=ddMMMM»), 3)
Для загрузки формата «26.07.2019» сделал просто:
Дата(ДатаСтрокой + » 00:00:00″)
(37)Тема давно уже прошла, но все же. Воспользовался вашей функцией, спасибо, сэкономил несколько минут. В ней опечатка в слове «января» и некорректно распознаются числа, меньшие 10 т..к отсутствуют лидирующие нули.
Показать