Преобразование типов в 1С
Разберем основные вопросы преобразования типов в 1С 8.3: из строки в число, из числа в строку, из даты в число и прочие варианты. В этой статье мы рассмотрим функции преобразования значений, и я соберу в едино все варианты преобразования примитивных типов.
Строка в число в 1С
Узнаем, как в 1С 8.3 преобразовать строку в число.
Пусть, у нас есть числа в таком виде.
Для того, чтобы выполнить преобразование этих строк в число, необходимо воспользоваться методом Число. Этот метод преобразует параметр в число.
Обратите внимание, что разделять дробную часть можно в строке как при помощи символа точка «.», так и при помощи символа запятая «,». Если перед каким-то числом в строке стоят нули, то они отсекаются. У нас будет следующий результат.
Число в строку в 1С
Рассмотрим обратную задачу, когда в 1С 8.3 нужно преобразовать число в строку. Самый простой вариант использовать метод Строка, который преобразует собственный параметр в строку.
И какой результат возвращает этот код:
У этого способа имеется недостаток: он ставит пробелы между разрядами у длинных чисел. Для того, чтобы в 1С преобразовать число в строку без пробелов нужно воспользоваться функцией Формат. Данная функция имеет два параметра: преобразуемое значение и форматную строку. Если нам нужно указать, что число преобразуется в строку без пробелов в разряде, то необходимо указать в форматной строке, что порядок разделения группировки разрядов числа или равен 0, или пустой.
Результат будет без разрядов:
Строка в дату 1С
Узнаем, как преобразовать в 1С 8.3 строку в дату. Для этого необходимо использовать метод Дата, который преобразует параметр (в том числе строку ) в дату . Причем, замечу, что строка должна быть задана в таком формате «ГГГГММДДЧЧММСС».
Подробнее о форматах дат читайте в этой статье: даты в 1С.
Если мы зададим дату в не верном формате, то преобразование не произойдет и возникнет ошибка «Преобразование значения к типу Дата не может быть выполнено».
Например, этот код:
Приведет к ошибке:
Дата в строку в 1С
Преобразовать дату в строку можно несколькими способами. Первый способ: воспользоваться уже знакомым нам методом Строка.
В этом случае у нас выйдет строка в обычном «полном» формате даты.
А чтобы получить дату в том формате, в каком нам нужно, необходимо воспользоваться методом Формат.
Форматов дат может быть великое множество ,все я разбирать в этой статье не буду, покажу только как можно быстро воспользоваться этой функцией.
Мы изменим предыдущий код, написав вместо метода Строка метод Формат, а в качестве второго параметра у метода Формат напишем просто две кавычки.
После нужно между кавычками поставить курсор, вызвать контекстное меню, и применить в нем команду Конструктор форматной строки.
В этом конструкторе на закладке Дата вы можете выбрать удобный вам формат даты.
И после нажатия кнопки ОК этого конструктора, нужный формат появится в виде строки.
В результате метода Формат, дата будет преобразована в строку в том виде, в каком нам необходимо.
Строка в булево в 1С
При помощи метода Булево мы можем некоторые строковые представления (Да, Нет, Истина, Ложь) преобразовывать в значения Истина или Ложь.
Например, следующие переменные:
Будут иметь такие значения:
Булево в строку в 1С
Разберем, как в 1С можно выразить тип булево строкой. Булево значение можно преобразовать в строку несколькими способами. Во-первых, можно просто воспользоваться методом Строка.
Например, как здесь:
У нас будет выходить следующий результат:
В этом случае, булево в строку преобразовалось согласно региональным установкам информационной базы.
Если мы, как-то по-другому хотим преобразовать булево в строку, то можно воспользоваться уже знакомым нам методом Формат.
Переделаем, предыдущий код:
Знакомым способом вызовем конструктор форматной строки, где на закладке Булево введем преставление значений Истина и Ложь.
После нажатия кнопки ОК конструктора, второй параметр метода Формат заполнится:
И будет следующий результат:
Число в булево в 1С
В 1С 8.3. мы можем преобразовать любое число в булево по следующему правилу: 0 будет преобразован в Ложь, все остальные значения в Истина.
Будет следующий результат:
Булево в число в 1С
Можно сделать и обратное преобразование. Булево значение в число.
Для этого нужно воспользоваться методом Число, где в качестве параметра указать булево значение. Тогда Истина будет преобразована в 1С, а Ложь – в 0.
Например, как в этом коде:
С таким результатом:
Статьи о примитивных типах в 1С:
Более подробно и основательно начальные вопросы программирования в 1С есть вы можете изучить в
Книга «Программировать в 1С за 11 шагов»
Изучайте программирование в 1С в месте с моей книгой «Программировать в 1С за 11 шагов»
Книга написана понятным и простым языком — для новичка.
- Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
- Научитесь понимать архитектуру 1С;
- Станете писать код на языке 1С;
- Освоите основные приемы программирования;
- Закрепите полученные знания при помощи задачника.
О том как разрабатывать под управляемым приложением 1С, читайте в книге Книга «Основы разработки в 1С: Такси»
Отличное пособие по разработке в управляемом приложении 1С, как для начинающих разработчиков, так и для опытных программистов.
- Очень доступный и понятный язык изложения
- Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
- Поймете идеологию управляемого приложения 1С
- Узнаете, как разрабатывать управляемое приложение;
- Научитесь разрабатывать управляемые формы 1С;
- Сможете работать с основными и нужными элементами управляемых форм
- Программирование под управляемым приложением станет понятным
Промо-код на скидку в 15% — 48PVXHeYu
Эти книги, плюс книга по программированию оперативного учета имеются в едином комплекте: комплект книг по разработке в 1С.
Только для читателей моего блога,
промо-код на скидку в 300 рублей на весь комплект: blog
Если Вам понравился этот урок, был полезен или помог решить какую-нибудь проблему, то Вы можете поддержать мой проект, перечислив любую сумму.
можно оплатить вручную:
Яндекс.Деньги — 410012882996301
Web Money — R955262494655
Как строку преобразовать в дату 1с
Вступайте в мою группу помощник программиста.
В ней мы обсуждаем программирование в 1С.
Дата
Значения данного типа содержит дату григорианского календаря (с 01 января 0001 года) и время с точностью до 0,1 миллисекунды.
Литералы:
Строка цифр, заключенная в одинарные кавычки вида: ‘ГГГГММДДччммсс’, где:
- ГГГГ — четыре цифры года (включая тысячелетие и век);
- ММ — две цифры месяца;
- ДД — две цифры даты;
- чч — две цифры часа (в 24-х часовом формате);
- мм — две цифры минут;
- сс — две цифры секунд;
Во встроенном языке в литерале типа Дата обязательно должно задаваться значение года, месяца и дня. Для задания даты соответствующей началу отсчета достаточно указать ‘00010101’. Допускается при указании литералов типа Дата опускать последние символы (секунды, минуты, часы и т.д.). Это означает, что данные параметры будут равны нулю (для времени) или единице (для даты). В литерале даты допускается использование различных разделителей.
- Как инициализировать дату константой
- Как преобразовать строку в дату
- Как инициализировать дату отдельными компонентами
- Как указать в дате часы, минуты и секунды
- Как узнать год (месяц, день, час, минута, секунда) у даты
- Как получить текущую дату
- Операции с датой
- Вспомогательные функции для работы с датой
- Скачать и выполнить эти примеры на компьютере
Работа с типом Дата в языке 1С 8.3, 8.2 (в примерах)
С уважением, Владимир Милькин (преподаватель школы 1С программистов и разработчик обновлятора).
Как помочь сайту: расскажите (кнопки поделиться ниже) о нём своим друзьям и коллегам. Сделайте это один раз и вы внесете существенный вклад в развитие сайта. На сайте нет рекламы, но чем больше людей им пользуются, тем больше сил у меня для его поддержки.
Как в 1С преобразовать строку в дату
Этот вопрос на первый взгляд достаточно простой. Но стоит только посмотреть на все возможные строковые представления дат (форматы дат), то задача получения даты из строки уже не кажется такой легкой. Ниже несколько примеров, как записывается дата в разных странах:
- Россия: DD.MM.YYYY Пример: 24.12.2021
- США: MM-DD-YYYY Пример: 12.24.2021
- Венгрия: YYYY-MM-DD Пример 2021-12-24
Чтобы еще больше запутать ситуацию Чтобы внести единообразие в написание даты, был разработан стандарт ISO 8601, который предусматривает запись даты от более значимых чисел к менее значимым – год, месяц, день… и так далее. Пример: 20221224123456. Для удобства можно пользоваться разделителями. Пример
2022-12-24T12:34:56. Это важный момент, и ниже мы к нему вернемся.
Способы преобразования даты из строки
Метод Дата(), вариант по строке
Простейший способ, который подходит, если строка с датой каноническому формату YYYYMMDDhhmmss – это использовать метод Дата(). Пример:
Получим значение с типом дата: 31.12.2021 12:34:56
Также, этот метод подходит, если строка с датой записана в локальном формате (т.е. совпадает с форматом даты операционной системы).
Например, в случае если в ОС выбран русский язык, то можно получить из строки дату вот так:
Результат будет 24.12.2022 12:34:56
А если у вас в настройках выбран формат Английский (США), то строковое представление даты должно быть другим:
Важно! В случае использования строки с датой в локальном формате, она должна точно соответствовать этому формату! Иначе метод выдаст ошибку “Преобразование значения к типу Дата не может быть выполнено”.
Метод Дата(), вариант по составляющим
Если нам известны составные части даты – год, месяц, день и т.д., можно использовать конструктор даты по составляющим. Задавать параметры можно как в виде строки, так и числом. Таким образом можно собрать дату из частей. Сами части можно получить различными способами – например, использовать преобразование строки в массив подстрок с помощью метода СтрРазделить().
Как получить дату из строки с разделителями?
Вот мы и вернулись к вопросу – что делать, когда строка даты содержит разделители – двоеточия, слеши, дефисы или другие. Можно поочередно очищать дату от лишних символов с помощью метода СтрЗаменить, например
Но есть более интересный способ – использование двойного преобразования строки – сперва в массив, а затем обратно:
Что делает этот код:
Мы сперва преобразуем строку в массив подстрок, разделяя по символам-разделителям пр помощи метода СтрРазделить. В нашем примере это пробел, слеш, двоеточие и дефис. Если нам нужно будет добавить какие-то другие символы – можно будет просто дополнить строку символов-разделителей.
А дальше мы обратно собираем из массива строку при помощи метода СтрСоединить;
Надеюсь, статья поможет вам разобраться, как преобразовать строку в дату. Если же хотите получить более цельное представление о разработке в 1С с нуля – рассмотрите мой видеокурс для начинающих.
1 комментарий к “Как в 1С преобразовать строку в дату”
Функция СтрокаДаты_ДД_ММ_ГГГГ_ВДату(Строка)
Д = Число(Сред(Строка, 1, 2));
М = Число(Сред(Строка, 4, 2));
Г = Число(Сред(Строка, 7, 4));
Возврат Дата(Г, М, Д);
Функция СтрокаДаты_ГГГГ_ММ_ДД_ВДату(Строка)
Д = Число(Сред(Строка, 9, 2));
М = Число(Сред(Строка, 6, 2));
Г = Число(Сред(Строка, 1, 4));
Возврат Дата(Г, М, Д);
Функция ДатаИзСтрокиСНазваниемМесяца(ДатаСтрокой) Экспорт
//Из строки вида 2 октября 2022
М = СтрРазделить(СокрЛП(ДатаСтрокой), ” “, ложь);
Если М.Количество() = 3 Тогда
Попытка
День = Число(СокрЛП(М[0]));
Месяцы = Новый Массив();
Месяцы.Добавить(“ЯНВАРЯ”); Месяцы.Добавить(“ФЕВРАЛЯ”); Месяцы.Добавить(“МАРТА”);
Месяцы.Добавить(“АПРЕЛЯ”); Месяцы.Добавить(“МАЯ”); Месяцы.Добавить(“ИЮНЯ”);
Месяцы.Добавить(“ИЮЛЯ”); Месяцы.Добавить(“АВГУСТА”); Месяцы.Добавить(“СЕНТЯБРЯ”);
Месяцы.Добавить(“ОКТЯБРЯ”); Месяцы.Добавить(“НОЯБРЯ”); Месяцы.Добавить(“ДЕКАБРЯ”);
Месяц = Месяцы.Найти(Врег(СокрЛП(М[1]))) + 1;
Год = Число(СокрЛП(М[2]));
Возврат Дата(Год, Месяц, День);
Исключение
КонецПопытки;
КонецЕсли;
Возврат Дата(1, 1, 1);
КонецФункции
1С 8.3 Преобразование строки в дату (типовая функция) — Программист 1С Минск. Автоматизация бизнеса.
1С 8.3 Преобразование строки в дату (типовая функция)
- 1С 8.3 БСП
- 1С 8.3 Дата и время
Функция СтрокаВДату (Знач ДатаСтрока )
ПозицияПробела = СтрНайти ( ДатаСтрока , » » , НаправлениеПоиска . СНачала );
Если ПозицияПробела > 0 Тогда
ДатаСтрока = Лев ( ДатаСтрока , ПозицияПробела — 1 );
КонецЕсли;
ДатаСтрока = СокрЛП ( СтрЗаменить ( ДатаСтрока , «.» , «» ));
ДатаСтрока = Сред ( ДатаСтрока , 5 ) + Сред ( ДатаСтрока , 3 , 2 ) + Лев ( ДатаСтрока , 2 );
Если СтрДлина ( ДатаСтрока ) = 6 Тогда
ДатаСтрока = «20» + ДатаСтрока ;
КонецЕсли;
ОписаниеТипа = Новый ОписаниеТипов ( «Дата» );
Результат = ОписаниеТипа . ПривестиЗначение ( ДатаСтрока );
Если ЗначениеЗаполнено ( ДатаСтрока ) Тогда
Попытка
Годы = СтрНайти ( ФорматДаты , «yyyy» );
Годы = ?( Годы = 0 , 0 , Число ( Сред ( ДатаСтрока , Годы , 4 )));
Если Годы = 0 Тогда
Годы = СтрНайти ( ФорматДаты , «yy» );
Годы = ?( Годы = 0 , 0 , Число ( «20» + Сред ( ДатаСтрока , Годы , 2 )));
КонецЕсли;
Месяцы = СтрНайти ( ФорматДаты , «mm» );
Дни = СтрНайти ( ФорматДаты , «dd» );
Часы = СтрНайти ( ФорматДаты , «hh» );
Минуты = СтрНайти ( ФорматДаты , «nn» );
Секунды = СтрНайти ( ФорматДаты , «ss» );
Возврат Дата (
?( Годы = 0 , 1 , Годы ),
?( Месяцы = 0 , 1 , Число ( Сред ( ДатаСтрока , Месяцы , 2 ))),
?( Дни = 0 , 1 , Число ( Сред ( ДатаСтрока , Дни , 2 ))),
?( Часы = 0 , 0 , Число ( Сред ( ДатаСтрока , Часы , 2 ))),
?( Минуты = 0 , 0 , Число ( Сред ( ДатаСтрока , Минуты , 2 ))),
?( Секунды = 0 , 0 , Число ( Сред ( ДатаСтрока , Секунды , 2 )))
)
Исключение
ВызватьИсключение «Ошибка преобразования строки «»» + ДатаСтрока + «»» в дату по формату «»» + ФорматДаты + «»»»
КонецПопытки;
Иначе
Возврат Неопределено
КонецЕсли;
Функция ПреобразоватьСтрокуКДате (Знач СтрокаДаты ) Экспорт
Если ТипЗнч ( СтрокаДаты ) = Тип ( «Дата» ) Тогда
Возврат СтрокаДаты ;
ИначеЕсли ТипЗнч ( СтрокаДаты ) <> Тип ( «Строка» ) Или ПустаяСтрока ( СтрокаДаты ) Тогда
Возврат Дата ( 1 , 1 , 1 );
КонецЕсли;
СтрокаДаты = ВРег ( СтрокаДаты );
НеобходимоПриводитьКМестномуВремени = Ложь;
СимволРазделенияДаты = СтрНайти ( СтрокаДаты , «T» , НаправлениеПоиска . СКонца );
Если СимволРазделенияДаты = 0 Тогда
СимволРазделенияДаты = СтрНайти ( СтрокаДаты , » » , НаправлениеПоиска . СКонца );
КонецЕсли;
СмещениеЧасы = 0 ;
СмещениеМинуты = 0 ;
ВремяМеньшеUTC = Ложь;
Если СтрНайти ( СтрокаДаты , «Z» ) > 0 Тогда
НеобходимоПриводитьКМестномуВремени = Истина;
СтрокаДаты = СтрЗаменить ( СтрокаДаты , «Z» , «.» );
ИначеЕсли СимволРазделенияДаты > 0 Тогда
СимволЧП = СтрНайти ( СтрокаДаты , «-» ,, СимволРазделенияДаты );
Если СимволЧП = 0 Или СимволЧП <= СимволРазделенияДаты Тогда
СимволЧП = СтрНайти ( СтрокаДаты , «+» ,, СимволРазделенияДаты );
Иначе
ВремяМеньшеUTC = Истина;
КонецЕсли;
Если СимволЧП <> 0 И СимволЧП > СимволРазделенияДаты Тогда
НеобходимоПриводитьКМестномуВремени = Истина;
ЧастьЧП = Сред ( СтрокаДаты , СимволЧП + 1 );
мЧастейДаты = СтрРазделить ( ЧастьЧП , «:» );
Попытка
СмещениеЧасы = ?( мЧастейДаты . Количество () > 0 , Число ( мЧастейДаты [ 0 ]), 0 );
СмещениеМинуты = ?( мЧастейДаты . Количество () > 1 , Число ( мЧастейДаты [ 1 ]), 0 );
Исключение
КонецПопытки;
СтрокаДаты = Лев ( СтрокаДаты , СимволЧП — 1 );
КонецЕсли;
КонецЕсли;
// Приведем к одному разделителю
СтрокаДаты = СтрЗаменить ( СтрокаДаты , «-» , «.» );
СтрокаДаты = СтрЗаменить ( СтрокаДаты , «+» , «.» );
СтрокаДаты = СтрЗаменить ( СтрокаДаты , «/» , «.» );
СтрокаДаты = СтрЗаменить ( СтрокаДаты , «\» , «.» );
СтрокаДаты = СтрЗаменить ( СтрокаДаты , «T» , «.» );
СтрокаДаты = СтрЗаменить ( СтрокаДаты , «Т» , «.» );
СтрокаДаты = СтрЗаменить ( СтрокаДаты , «:» , «.» );
СтрокаДаты = СтрЗаменить ( СтрокаДаты , «;» , «.» );
СтрокаДаты = СтрЗаменить ( СтрокаДаты , «,» , «.» );
СтрокаДаты = СтрЗаменить ( СтрокаДаты , » » , «.» );
ПреобразованнаяДата = Дата ( 1 , 1 , 1 );
Год = 1 ;
Месяц = 1 ;
День = 1 ;
Час = 0 ;
Минута = 0 ;
Секунда = 0 ;
мЧастейДаты = СтрРазделить ( СтрокаДаты , «.» , Ложь);
Если мЧастейДаты . Количество () = 1 Тогда
Попытка
ПреобразованнаяДата = Дата ( мЧастейДаты [ 0 ]);
Исключение
ПреобразованнаяДата = Дата ( 1 , 1 , 1 );
КонецПопытки;
Возврат ПреобразованнаяДата ;
ИначеЕсли мЧастейДаты . Количество () >= 3 Тогда
Попытка
Месяц = Число ( мЧастейДаты [ 1 ]);
Если СтрДлина ( мЧастейДаты [ 0 ]) = 4 Тогда
Год = Число ( мЧастейДаты [ 0 ]);
День = Число ( мЧастейДаты [ 2 ]);
ИначеЕсли СтрДлина ( мЧастейДаты [ 2 ]) = 4 Тогда
Год = Число ( мЧастейДаты [ 2 ]);
День = Число ( мЧастейДаты [ 0 ]);
Иначе
Год = Число (?( мЧастейДаты [ 2 ] >= 50 , Цел ( Год ( ТекущаяДата ()) / 100 ) — 1 ,
Цел ( Год ( ТекущаяДата ()) / 100 )) + мЧастейДаты [ 2 ]);
День = Число ( мЧастейДаты [ 0 ]);
КонецЕсли;
Час = ?( мЧастейДаты . Количество () > 3 , Число ( мЧастейДаты [ 3 ]), 0 );
Минута = ?( мЧастейДаты . Количество () > 4 , Число ( мЧастейДаты [ 4 ]), 0 );
Секунда = ?( мЧастейДаты . Количество () > 5 , Число ( мЧастейДаты [ 5 ]), 0 );
Исключение
Возврат ПреобразованнаяДата ;
КонецПопытки;
Иначе
Возврат ПреобразованнаяДата ;
КонецЕсли;
Попытка
ПреобразованнаяДата = Дата ( Год , Месяц , День , Час , Минута , Секунда );
Исключение
ПреобразованнаяДата = Дата ( 1 , 1 , 1 );
КонецПопытки;
Если Не ПреобразованнаяДата = Дата ( 1 , 1 , 1 ) И НеобходимоПриводитьКМестномуВремени Тогда
ТекущееСмещениеСек = СмещениеСтандартногоВремени ();
ТекСмещениеЧас = Цел ( ТекущееСмещениеСек / 3600 );
ТекСмещениеМин = Цел (( ТекущееСмещениеСек — ТекСмещениеЧас * 3600 ) / 60 );
ТекСмещениеМин = ?( ТекСмещениеМин < 0 , — 1 * ТекСмещениеМин , ТекСмещениеМин );
ТекущийЧП = СтрШаблон ( «GMT%1%2:%3» , ?( ТекСмещениеЧас >= 0 , «+» , «» ),
Формат ( ТекСмещениеЧас , «ЧЦ=2; ЧДЦ=0; ЧН=00; ЧВН=; ЧГ=0» ),
Формат ( ТекСмещениеМин , «ЧЦ=2; ЧДЦ=0; ЧН=00; ЧВН=; ЧГ=0» ));
ПришедшийЧП = СтрШаблон ( «GMT%1%2:%3» , ?( ВремяМеньшеUTC , «-» , «+» ),
Формат ( СмещениеЧасы , «ЧЦ=2; ЧДЦ=0; ЧН=00; ЧВН=; ЧГ=0» ),
Формат ( СмещениеМинуты , «ЧЦ=2; ЧДЦ=0; ЧН=00; ЧВН=; ЧГ=0» ));
Если ТекущийЧП = ПришедшийЧП Тогда
Возврат ПреобразованнаяДата ;
КонецЕсли;
Попытка
Если СмещениеЧасы <> 0 Или СмещениеМинуты <> 0 Тогда
ПреобразованнаяДата = УниверсальноеВремя ( ПреобразованнаяДата , ПришедшийЧП );
КонецЕсли;
ПреобразованнаяДата = МестноеВремя ( ПреобразованнаяДата , ТекущийЧП );
Исключение
КонецПопытки;
КонецЕсли;