Прибавить к дате переменную

1. StannisBaratheon 08.06.21 12:37 Сейчас в теме
С помощью запроса получаю из справочника число. Например, 25. После этого требуется к дате ( Формат(ТекущаяДата()+ 60*60*24*Переменная,"ДЛФ=Д") ) Примерно в таком формате прибавить переменную. Такой код выдает ошибку, что нельзя преобразовать тип к числу. Какие есть пути решения?
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
4. sssss_aaaaa_2011 08.06.21 12:47 Сейчас в теме
(1)К дате числа прибавляются вне зависимости от формата отображения. То бишь ДО форматирования даты.
2. starjevschik 08.06.21 12:39 Сейчас в теме
надо взять отладчик, проверить, каких типов участвующие в выражении переменные, и исправить ту, которая не число.
3. FatPanzer 08.06.21 12:40 Сейчас в теме
Ну значит переменная не число.
Пробуйте отдельно рассчитать дату и потом отдельно её форматировать.
5. гаврюша 2 08.06.21 12:49 Сейчас в теме
Запрос не может выдать вместо числа NULL? Может нужно использовать ЕстьNULL(Переменная,0) КАК Переменная?
6. ilnur75 08.06.21 12:59 Сейчас в теме
запрос вообще может быть пустым.
7. StannisBaratheon 08.06.21 13:06 Сейчас в теме
Не совсем. Из запроса я получаю строку, допустим 10 - 10. После этого я записываю в переменную первую часть строки - "10". Далее пытаюсь преобразовать ее в число - Число(Переменная). Но, видимо, на этой стадии у меня возникают проблемы
8. StannisBaratheon 08.06.21 13:06 Сейчас в теме
То, что из запроса я получаю значение и в переменной содержится "10" - 100%
9. FatPanzer 08.06.21 13:10 Сейчас в теме
(8) показывайте весь важный код (без воды) - запрос, преобразование, форматирование...
10. StannisBaratheon 08.06.21 13:26 Сейчас в теме
(9)
Пер = ВыборкаГран.ДатаЗавершения;
			ДоПробела = СтрНайти(Пер, " ", НаправлениеПоиска.СНачала);
			Срез = Лев(Пер, ДоПробела);
			
	
	Сообщить(Формат(Срез*60*60*24 + ТекущаяДата(), "ДЛФ=Д"));
12. user856012 13 08.06.21 13:46 Сейчас в теме
(10)
ДоПробела = СтрНайти(Пер, " ", НаправлениеПоиска.СНачала);
Во-первых, выборка может быть пустой.

Во-вторых, вы ищете пробел в дате. Придумайте пример даты, содержащий пробел?
14. davealone 165 08.06.21 13:49 Сейчас в теме
(10)
Срез*60*60*24 + ТекущаяДата()

Вы к числу дату прибавляете, тип берется по первому слагаемому.
Поменяйте порядок на ТекущаяДата()+Срез*60*60*24
SlavaKron; +1 Ответить
17. StannisBaratheon 08.06.21 14:04 Сейчас в теме
(14) была попытка сделать и так, и так: ТекущаяДата() + Срез*60*60*24
ТекущаяДата() + 60*60*24*Срез
и текущий вариант
26. DWZ2 11.06.21 06:45 Сейчас в теме
27. StannisBaratheon 11.06.21 09:48 Сейчас в теме
(26) в 25-м сообщении ответ )
18. user856012 13 08.06.21 14:04 Сейчас в теме
(14)
Поменяйте порядок на ТекущаяДата()+Срез*60*60*24
Этого недостаточно: Срез - строка, ее нельзя умножать. Хотя в исходно сообщении (1) все было правильно, не считая кривого способа получения переменной.

Автору совет: учиться программировать, а не одинэсить.
24. davealone 165 08.06.21 16:13 Сейчас в теме
(18) Сам факт того, что это строка не проблема, если число определяется из поля запроса корректно - но для этого нужно понимать что там в выборке. ТекущаяДата() + "10" * 60 спокойно себе посчитается
SlavaKron; +1 Ответить
25. StannisBaratheon 09.06.21 11:10 Сейчас в теме
(24) всё было верно изначально, просто забыла пройтись циклом по выборке :/
15. kot26rus 08.06.21 13:52 Сейчас в теме
(10)код неправильный. нет в дате никакого пробела, это по сути число.
если вам надо прибавить дни к текущей дате, то сделайте это так:
Пер = ВыборкаГран.ДатаЗавершения;
НоваяДата = Пер - ТекущаяДата();
Сообщить(Формат(НоваяДата, "ДЛФ=Д"));
16. StannisBaratheon 08.06.21 14:03 Сейчас в теме
(15) Прошу прощения, что не сказала раньше. Не могу показать отладчик, т.к. он не работает, увы. Поле ДатаЗавершения имеет тип "Строка" и имеет, как было указано в одном из первых сообщений, вид: "число + число " (напр. 30 - 36). Следовательно, переменная Срез имеет тип "Строка" со значением "30". Далее я пыталась преобразовать его к числу, но, судя по всему, не вышло
19. user856012 13 08.06.21 14:06 Сейчас в теме
(16)
Следовательно, переменная Срез имеет тип "Строка" со значением "30"
А если ДатаЗавершения пустая?
21. StannisBaratheon 08.06.21 14:09 Сейчас в теме
(19) Не может быть, так как заранее написала запрос с известным значением. Через консоль проверено
22. user856012 13 08.06.21 14:12 Сейчас в теме
(21)
Не может быть, так как заранее написала запрос с известным числом.
Тогда у вас в (10) не хватает преобразования строки в число:
Сообщить(Формат(Число(Срез)*60*60*24 + ТекущаяДата(), "ДЛФ=Д"));
23. kot26rus 08.06.21 14:12 Сейчас в теме
(16)ну тогда
Сообщить(Формат(Число(Срез)*3600*24 + ТекущаяДата(), "ДЛФ=Д")
11. StannisBaratheon 08.06.21 13:37 Сейчас в теме
Запрос не вижу смысла добавлять, так как значения выборки через Сообщить() выводятся. В данном случае был опыт Сообщить(Срез);
13. ilnur75 08.06.21 13:49 Сейчас в теме
показал бы окно отладчика , наводящих вопросов бы не было.
20. ilnur75 08.06.21 14:09 Сейчас в теме
проверку результата запроса автор не предполагает. "Всегда урожай".
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот