Как перевести дату в число 1с
Надо преобразовать данные табчасти при изменении в число
&НаКлиенте
Процедура ПериодыНачалоПриИзменении(Элемент)
Конец = Элементы.Периоды.ТекущиеДанные.Конец;
Начало = Элементы.Периоды.ТекущиеДанные.Начало;
Длительность = Элементы.Периоды.ТекущиеДанные.Продолжительность;
Длительность = Начало — Конец * 60;
КонецПроцедуры
Процедура ПериодыКонецПриИзменении(Элемент)
Конец = Элементы.Периоды.ТекущиеДанные.Конец;
Начало = Элементы.Периоды.ТекущиеДанные.Начало;
Длительность = Элементы.Периоды.ТекущиеДанные.Продолжительность;
Длительность = Конец — Начало * 60;
А она ругается. не может преобразовать. в чем косячу?
простит вы хотите получить разность дат в секундах?
вызвать одну функцию для двоих действий
(1) мне лично не видно, что ругается
дат в минутах
А Конец и Начало — это даты?
: Преобразование значения к типу Число не может быть выполнено
Длительность = Начало — Конец * 60;Документ.ОтчетОПроделаннойРаботе.Форма.ФормаДокумента.Форма(66)>
ошибка то в чем? в том, что пробуешь элемент управления умножить?
(0)Вот нахрена так делать, дублировать процедуры? Молодой человек неуч?
Может это надо
Длительность = (Начало — Конец) / 60;
Функция ПолучитьРазностьДат(НачДата,КонДата)
Запрос = Новый Запрос( «ВЫБРАТЬ
| РАЗНОСТЬДАТ(&НачДата, &КонДата, ДЕНЬ) КАК ДЕНЬ»);
Запрос.УстановитьПараметр(«НачДата»,НачДата);
Запрос.УстановитьПараметр(«КонДата»,КОнДата);
Возврат ЗАпрос.Выполнить().Выгрузить()[0].ДЕНЬ;
КонецФункции
тока не как ДЕНЬ, КАК МИНУТА.
(13) у тебя отладчик украли?
(6) ТЬФУ. Строка((
(14)Мозг у него украли.
пред тема «Велики ли различия конфигурирования 1с 8.2 и 7.7 (знаю 8.2)» <--- (знаю 8.2)
второй раз за день передоз ванили от его фотки. Блеванул
так. а как строку преобразовать в дату?
(22) Функцией Дата(), к примеру.
Или сразу на форме вводить даты
Дата (Date)
Вариант синтаксиса: По строке
Тип: Строка.
Исходное значение даты.
Строка должна содержать дату в локальном формате даты или в каноническом виде YYYYMMDDHHMMSS.
Описание варианта метода:
При преобразовании, строка должна содержать дату в каноническом формате «ГГГГММДДччммсс» (см. раздел «Примитивные типы данных»).
Вариант синтаксиса: По составляющим
Тип: Число.
Год даты.
(обязательный)
Тип: Число.
Месяц даты.
(обязательный)
Тип: Число.
День даты.
(необязательный)
Тип: Число.
Час даты.
(необязательный)
Тип: Число.
Минута даты.
(необязательный)
Тип: Число.
Секунда даты.
Год = «2012»;
Месяц = «01»;
День = «01»;
ПолучаемДату = Дата(Год, Месяц, День);
(22) тебе тут терь «знаю 8.2» не забыли бы никогда а стакими вопросами еще и поржут 🙂 или «знаю 8.2» не включает в себя «знаю где СП» ?
Как преобразовать дату в число?
Если Вы еще не в курсе, дата на платформе 1С:Предприятие 8 хранится в числовом виде. Она представляет собой количество секунд, прошедших с 1 января 0001 года. Преобразовать дату в число функцией Число() не получится, т.к. вы непременно поймаете ошибку «Преобразование значения к типу Число не может быть выполнено» .
Здесь понадобится более «хитрый» способ. Наверняка вы знаете, что даты можно вычитать. В таком случае мы получаем длину интервала в секундах:
ДатаНачала = Дата(2020,1,1,10,30,0); ДатаОкончания = Дата(2020,1,1,11,30,0); ДлинаИнтервала = ДатаОкончания - ДатаНачала; Сообщить(ДлинаИнтервала); //Результат: // 3 600
А что если дату отсчета 1 января 0001 года тоже представить датой и вычесть из имеющейся у нас даты? Давайте проверим:
ПроизвольнаяДата = Дата(2020,1,1,10,30,0); ДатаЧислом = ПроизвольнаяДата - Дата(1,1,1); Сообщить(ДатаЧислом); //Результат // 63 713 471 400 //обратная проверка ТекущаяДата = Дата(1,1,1) + ДатаЧислом; Сообщить(ТекущаяДата); //Результат: // 01.01.2020 10:30:00
Таким образом, любую дату можно преобразовать в число как в коде, так и в запросе.
Читайте также:
- Программная работа с датой
- Как получить дату из строки?
Преобразовать дату в число.
Понадобилось в коде
написать нечто такое
Частота замены в днях — число.
ТекДата — Дата.
Если ТекДата/(ЧастотаЗаменыВДнях*86400) = 0 Тогда
.
КонецЕсли
Проще говоря, проверить на кратность. Но даты не преобразуются к типу число неявно.
Пробовал явно преобразовать как-то так
не вышло, конечно. «Преобразование к типу число не может быть выполнено».
Если какие-то варианты преобразовать, проверить на кратность?
По теме из базы знаний
- Полезные сведения о языке запросов 1С 8.2
- Загрузка из EXCEL в 1С. Чтение файла XLSX средствами 1С. ЧтениеXML
- Загрузка из EXCEL в 1С. Чтение файла XLSX средствами 1С. ПостроительDOM
- Универсальный конструктор отчетов СКД (управляемые формы, тонкий клиент)
- Особенность встроенной функции Представление() в СКД [поход на грабли]
- Дата
- Дата
- Рейтинг всех уровней
- Рейтинг 1-го уровня
- Древо развёрнутое
- Древо свернутое
Свернуть все
2. holidayinthesun 20.11.11 15:54 Сейчас в теме
И еще не очень понятно тогда, почему ТекДата + 86400 работает нормально.
4. Gulf_Stream 20.11.11 15:57 Сейчас в теме
(2) holidayinthesun,
И еще не очень понятно тогда, почему ТекДата + 86400 работает нормально.
Вы к указанной дате добавили 86400 секунд и получили новую дату.
3. Gulf_Stream 20.11.11 15:55 Сейчас в теме
немного не понял что требуется, но может функция РазностьДат подойдёт?
РАЗНОСТЬДАТ(, , Секунда | Минута | Час | День | Месяц | Квартал | Год)
В качестве первого параметра передается выражение, значение которого необходимо вычесть из значения второго параметра.
В качестве второго параметра функции передается выражение, из которого необходимо вычесть значение первого параметра.
Третий параметр содержит единицу измерения, в которой необходимо получить результат функции. В качестве третьего параметра можно использовать следующие значения: Секунда, Минута, Час, День, Месяц, Квартал, Год. При расчете результата функция игнорирует единицы измерения, которые меньше, чем указанная в данном параметре единица.
5. holidayinthesun 20.11.11 16:10 Сейчас в теме
у меня в котле есть одна деталька, которую надо менять каждые 30 дней, я хочу написать обработку, чтобы заполняла регистр сведений вида
Котел ДатаЗамены
ххх ххх
Т.к. этих котлов много.
В справочнике Котлы есть поле «ЧастотаЗаменыВДнях».
В обработке я задаю период. Иду от начала до конца через
ТекДата = Период.ДатаНачала;
Пока ТекДата .
КонецЦикла
В этом цикле перебираю весь справочник Котлы.
ТекДата = Период.ДатаНачала;
Пока ТекДата
Выборка = Справочники.Котлы.Выбрать();
Пока Выборка.Следующий() Цикл
.
КонецЦикла;
КонецЦикла
Нужно брать ту ТекДата, которая соответствует каждому котлу и, если она соответствует, записать в регистр Котел и ДатуЗамены.
А чтобы узнать, соответствует ли ТекДата, нужно проверить, что она кратна ЧастотеЗамены. То есть, что остаток от деления равен нулю.
Вот с проверкой кратности возникли проблемы, т.к. я думал, что все даты меряются в секундах по умолчанию.
Преобразование типов в 1С
Разберем основные вопросы преобразования типов в 1С 8.3: из строки в число, из числа в строку, из даты в число и прочие варианты. В этой статье мы рассмотрим функции преобразования значений, и я соберу в едино все варианты преобразования примитивных типов.
Строка в число в 1С
Узнаем, как в 1С 8.3 преобразовать строку в число.
Пусть, у нас есть числа в таком виде.
СтрокаЧ1 = "120"; СтрокаЧ2 = "12.24"; СтрокаЧ3 = "12,24"; СтрокаЧ4 = "0,24"; СтрокаЧ5 = "0000001";
Для того, чтобы выполнить преобразование этих строк в число, необходимо воспользоваться методом Число. Этот метод преобразует параметр в число.
Ч1 = Число(СтрокаЧ1); Ч2 = Число(СтрокаЧ2); Ч3 = Число(СтрокаЧ3); Ч4 = Число(СтрокаЧ4); Ч5 = Число(СтрокаЧ5);
Обратите внимание, что разделять дробную часть можно в строке как при помощи символа точка «.», так и при помощи символа запятая «,». Если перед каким-то числом в строке стоят нули, то они отсекаются. У нас будет следующий результат.

Число в строку в 1С
Рассмотрим обратную задачу, когда в 1С 8.3 нужно преобразовать число в строку. Самый простой вариант использовать метод Строка, который преобразует собственный параметр в строку.
Ч1 = 120; Ч2 = 12.24; Ч3 = 10000000000; СтрокаЧ1 = Строка(Ч1); СтрокаЧ2 = Строка(Ч2); СтрокаЧ3 = Строка(Ч3); Сообщить(СтрокаЧ1); Сообщить(СтрокаЧ2); Сообщить(СтрокаЧ3);
И какой результат возвращает этот код:

У этого способа имеется недостаток: он ставит пробелы между разрядами у длинных чисел. Для того, чтобы в 1С преобразовать число в строку без пробелов нужно воспользоваться функцией Формат. Данная функция имеет два параметра: преобразуемое значение и форматную строку. Если нам нужно указать, что число преобразуется в строку без пробелов в разряде, то необходимо указать в форматной строке, что порядок разделения группировки разрядов числа или равен 0, или пустой.
Ч1 = 10000000000; СтрокаЧ1 = Формат(Ч1,"ЧГ color: red;">); Сообщить(СтрокаЧ1);
Результат будет без разрядов:

Строка в дату 1С
Узнаем, как преобразовать в 1С 8.3 строку в дату. Для этого необходимо использовать метод Дата, который преобразует параметр (в том числе строку ) в дату . Причем, замечу, что строка должна быть задана в таком формате «ГГГГММДДЧЧММСС».
Подробнее о форматах дат читайте в этой статье: даты в 1С.
СтрокаД1 = "20120910"; СтрокаД2 = "20120910121559"; СтрокаД3 = "00010101121559"; Дата1 = Дата(СтрокаД1); Дата2 = Дата(СтрокаД2); Дата3 = Дата(СтрокаД3);

Если мы зададим дату в не верном формате, то преобразование не произойдет и возникнет ошибка «Преобразование значения к типу Дата не может быть выполнено».
Например, этот код:
СтрокаД1 = "121559"; Дата1 = Дата(СтрокаД1)
Приведет к ошибке:

Дата в строку в 1С
Преобразовать дату в строку можно несколькими способами. Первый способ: воспользоваться уже знакомым нам методом Строка.
Дата1 = Дата(2012,10,12); СтрокаД = Строка(Дата1); Сообщить(СтрокаД);
В этом случае у нас выйдет строка в обычном «полном» формате даты.

А чтобы получить дату в том формате, в каком нам нужно, необходимо воспользоваться методом Формат.
Форматов дат может быть великое множество ,все я разбирать в этой статье не буду, покажу только как можно быстро воспользоваться этой функцией.
Мы изменим предыдущий код, написав вместо метода Строка метод Формат, а в качестве второго параметра у метода Формат напишем просто две кавычки.
Дата1 = Дата(2012,10,12); СтрокаД = Формат(Дата1,""); Сообщить(СтрокаД);
После нужно между кавычками поставить курсор, вызвать контекстное меню, и применить в нем команду Конструктор форматной строки.

В этом конструкторе на закладке Дата вы можете выбрать удобный вам формат даты.

И после нажатия кнопки ОК этого конструктора, нужный формат появится в виде строки.
Дата1 = Дата(2012,10,12); СтрокаД = Формат(Дата1,"ДФ=dd/MM/yy"); Сообщить(СтрокаД);
В результате метода Формат, дата будет преобразована в строку в том виде, в каком нам необходимо.

Строка в булево в 1С
При помощи метода Булево мы можем некоторые строковые представления (Да, Нет, Истина, Ложь) преобразовывать в значения Истина или Ложь.
Например, следующие переменные:
стр_Да = Булево("Да"); стр_Нет = Булево("Нет"); стр_Истина = Булево("Истина"); стр_Ложь = Булево("Ложь");
Будут иметь такие значения:

Булево в строку в 1С
Разберем, как в 1С можно выразить тип булево строкой. Булево значение можно преобразовать в строку несколькими способами. Во-первых, можно просто воспользоваться методом Строка.
Например, как здесь:
б_Истина = Истина; б_Ложь = Ложь; СтрИстина = Строка(б_Истина); СтрЛожь = Строка(б_Ложь); Сообщить(СтрИстина); Сообщить(СтрЛожь);
У нас будет выходить следующий результат:

В этом случае, булево в строку преобразовалось согласно региональным установкам информационной базы.
Если мы, как-то по-другому хотим преобразовать булево в строку, то можно воспользоваться уже знакомым нам методом Формат.
Переделаем, предыдущий код:
б_Истина = Истина; б_Ложь = Ложь; СтрИстина = Формат(б_Истина,""); СтрЛожь = Формат(б_Ложь,"");
Знакомым способом вызовем конструктор форматной строки, где на закладке Булево введем преставление значений Истина и Ложь.

После нажатия кнопки ОК конструктора, второй параметр метода Формат заполнится:
б_Истина = Истина; б_Ложь = Ложь; СтрИстина = Формат(б_Истина,"БЛ='Ни как нет'; БИ=Конечно"); СтрЛожь = Формат(б_Ложь,"БЛ='Ни как нет'; БИ=Конечно"); Сообщить(СтрИстина); Сообщить(СтрЛожь);
И будет следующий результат:

Число в булево в 1С
В 1С 8.3. мы можем преобразовать любое число в булево по следующему правилу: 0 будет преобразован в Ложь, все остальные значения в Истина.
б_Ложь = Булево(0); б_Истина = Булево(100000);
Будет следующий результат:

Булево в число в 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
Вступайте в мои группы: