Имя: Пароль:
1C
1С v8
Преобразование значения к типу Дата не может быть выполнено
0 Grinpic
 
19.08.15
11:57
Доброго времени суток,
При выполнении в 1С 8.3 выдает ошибку:
Преобразование значения к типу Дата не может быть выполнено
   Запрос.УстановитьПараметр("ДатаН", НачалоДня(НВдат));

Имеется файл формата dbf я из него выгружаю данные, дата была в формате строки, я ее переделал в формат дата:
   НВдатДБФ = (Лев(База.ПолучитьЗначениеПоля("NVdat"), 10));
   Год = Прав(НВдатДБФ, 4); // 2005;
        Месяц1 = СтрЗаменить(НВдатДБФ, Лев(НВдатДБФ,3), "");
   Месяц = СтрЗаменить(Месяц1, Прав(Месяц1,5), "");
  
        День = Лев(НВдатДБФ, 2);    
        НВдат = Дата(Год + Месяц + День);
Я знаю что не учитываются пробелы с лева и точное время создания документа, но из строки в формат даты перевести получается и она "по идее" должна идти дальше в запрос:
Запрос = Новый Запрос("ВЫБРАТЬ
                         |   ПоступлениеТоваровУслуг.Ссылка
                         |ИЗ
                         |   Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг
                         |ГДЕ
                         |   ПоступлениеТоваровУслуг.НомерВходящегоДокумента = &НомерКонтрагента
                         |   И ПоступлениеТоваровУслуг.Контрагент = &Контрагент
                         |   И ПоступлениеТоваровУслуг.Дата МЕЖДУ &ДатаН И &ДатаК");
   Запрос.УстановитьПараметр("НомерКонтрагента", НВход);
   Запрос.УстановитьПараметр("Контрагент", ПоискС(ИНН));
   Запрос.УстановитьПараметр("ДатаН", НачалоДня(НВдат));
   Запрос.УстановитьПараметр("ДатаК", КонецДня(НВдат));
   Результат=Запрос.Выполнить();
  
   Если Результат.Пустой() Тогда
      Возврат Неопределено;
   КонецЕсли;

        Выборка = Результат.Выбрать();
   Выборка.Следующий();
  
   Возврат Выборка.Ссылка.номер;
Я начинающий в 1С. Кто знает в чем ошибка? Прошу помощи исправить.
1 Nuobu
 
19.08.15
11:59
(0) Остановись отладчиком, посмотри, что возвращает.
2 Господин ПЖ
 
19.08.15
12:00
очередная жертва неразрывного пробела...
3 Grinpic
 
19.08.15
12:05
(1) НВдат принимает значение 13.08.2015 0:00:00
4 Господин ПЖ
 
19.08.15
12:09
значит "гуляют" либо число либо месяц... больно они вырубаются топорно...
5 Grinpic
 
19.08.15
12:12
(2) Пробела между датой и временем? (4) имеете ввиду что они не на своих местах?
6 hhhh
 
19.08.15
12:13
(3) а если так?

  Запрос.УстановитьПараметр("ДатаН", НачалоДня(База.ПолучитьЗначениеПоля("NVdat")));
  Запрос.УстановитьПараметр("ДатаК", КонецДня(База.ПолучитьЗначениеПоля("NVdat")));
7 Апош
 
19.08.15
12:13
вот бы ХБасе умел даты датами говорить...
8 Господин ПЖ
 
19.08.15
12:14
(5) у тебя отладчик есть... а в нем "останавливаться по ошибке" что гадать сидеть
9 Grinpic
 
19.08.15
12:15
(6) Дело в том что там формат строки, и он в дату переводится только как в (0)
10 Апош
 
19.08.15
12:16
Вариант синтаксиса: По составляющим

Синтаксис:

Дата(<Год>, <Месяц>, <День>, <Час>, <Минута>, <Секунда>)
11 Grinpic
 
19.08.15
12:16
(8) Я писал что я начинающий 2 недели работаю с 1С. Еслиб мог давно бы сам решил проблему)
12 Апош
 
19.08.15
12:17
(11) а образованиев для того, чтобы понять, что в переменной хрень, не хватает?
13 Grinpic
 
19.08.15
12:17
(10) Хм... тоесть мне надо перевернуть дату? у меня 13.08.2015 0:00:00
14 Господин ПЖ
 
19.08.15
12:17
15 Апош
 
19.08.15
12:19
(13) тебе надо понять, как три строки сделать датой
16 GROOVY
 
19.08.15
12:19
"2 недели работаю с 1С", прикольно, когда уволят, контакты работодателя сюда запости, чтоб народ понимал, что разгребать надо.
17 hhhh
 
19.08.15
12:20
(13) вот это что за фигня?

        Месяц1 = СтрЗаменить(НВдатДБФ, Лев(НВдатДБФ,3), "");
   Месяц = СтрЗаменить(Месяц1, Прав(Месяц1,5), "");
  

напишите просто

Месяц = Сред(НВдатДБФ, 4, 2);
18 Господин ПЖ
 
19.08.15
12:21
(15) он уже все сделал:  НВдат = Дата(Год + Месяц + День);

не сношайте мозг ребенку
19 Апош
 
19.08.15
12:22
(18) ну тогда поздравим товарища. я всегда через запятую делал
20 Grinpic
 
19.08.15
12:22
(17) Благодарю за оптимизацию)
21 Господин ПЖ
 
19.08.15
12:24
(19) просто из за костылестроения

Месяц1 = СтрЗаменить(НВдатДБФ, Лев(НВдатДБФ,3), "");
   Месяц = СтрЗаменить(Месяц1, Прав(Месяц1,5), "");
  
        День = Лев(НВдатДБФ, 2);

вместо адекватной строки получается мусор
22 Grinpic
 
19.08.15
12:38
(21) Тут хоть и костыль, но рабочий. А вот подходит ли формат моей даты для функции НачалоДня()
23 Господин ПЖ
 
19.08.15
12:39
если он всегда "ГГГГ" + "ММ" + "ДД" с ведущими нулями (т.е. март = "05", а первое число = "01") - то подходит
24 Grinpic
 
19.08.15
12:43
(23) НачалоДня(13.08.2015 0:00:00)
25 hhhh
 
19.08.15
12:50
(24) лучше как в (10)

Дата(Число(Год), Число(Месяц), Число(День))
26 Господин ПЖ
 
19.08.15
12:51
(24) 13.08.2015 0:00:00 - это строка такая? или дата?
27 Grinpic
 
19.08.15
12:57
(25) Переделал, результат тот же
28 Grinpic
 
19.08.15
12:57
(26) тип дата
29 hhhh
 
19.08.15
13:01
(28) ну, Сообщить("Год=" + Год + " Месяц=" + Месяц + " День=" + День);


что выдает?
30 Господин ПЖ
 
19.08.15
13:01
где-то автор свистит... или смотрит не туда
31 Grinpic
 
19.08.15
13:09
(26) в конце запроса переменная принимает другое значение = 7446029151, а вот почему я еще не понял
32 Grinpic
 
19.08.15
13:12
(29) Год=2015 Месяц=08 День=13
33 Grinpic
 
19.08.15
13:13
(30) То есть не в конце а когда доходит до строки НачалоДня()
34 Апош
 
19.08.15
13:15
(33) на какой строке изменяется?
35 Grinpic
 
19.08.15
13:15
(34) Запрос.УстановитьПараметр("ДатаН", НачалоДня(НВдат));
36 Grinpic
 
19.08.15
13:17
(34) нет вру где то в другом месте пойду искать...
37 Grinpic
 
19.08.15
13:41
(34) (26) Не подскажете как правильно условие составить на останов отладчика, мне надо остановить когда НВдат<> 13.08.2015 0:00:00, множно <> Дата() типу даты или ваши варианты)
38 Апош
 
19.08.15
13:54
(37) ТипЗнч(НВдат)<>Тип("Дата")
39 Grinpic
 
19.08.15
14:04
(38) Не остановился(
40 Господин ПЖ
 
19.08.15
14:06
(37) не надо тебе никаких условий - галку ставь "останавливаться по ошибке" - сам встанет
41 Господин ПЖ
 
19.08.15
14:07
зы... если функция серверная и - не встанет без -debug
42 Grinpic
 
19.08.15
14:15
(41) ну он мне останавливает когда уже НВдата изменил значение, я пытаюсь вычислить где он его меняет
43 Grinpic
 
19.08.15
14:38
(41) (38) я понял в чем проблема, ИНН поменялся значениями с НВдат, только немогу найти где именно поменялся...
44 hhhh
 
19.08.15
14:43
(43) переименуй, назови ГринписДат
45 Grinpic
 
19.08.15
14:48
(44) Переименовал, но значения поменялись все равно...
46 Апош
 
19.08.15
14:54
эх, придумали бы уже какую-нибудь штуку с пошаговым выполнением кода и возможностью просмотра значений переменных...
47 rs_trade
 
19.08.15
14:57
(46) зачем? все равно никто не будет пользоваться. хрень какая то.
48 Grinpic
 
19.08.15
15:02
(47) Ну это ты зря, я бы использовал, если взят ьв пример python в IDE IDEA там вообще дебагер прелесть, все покажет и расскажет, а самое странное что нельзя шаг назад в дебаге сделать
49 Апош
 
19.08.15
15:03
шаг назад - это круто. ждём возможности сохранения
50 hhhh
 
19.08.15
15:07
(47) еще про оптимизацию


вместо Возврат Выборка.Ссылка.номер;

надо писать   Возврат Выборка.СсылкаНомер;

соответственно в запросе

ВЫБРАТЬ
  |   ПоступлениеТоваровУслуг.Ссылка,
|   ПоступлениеТоваровУслуг.Ссылка.Номер КАК СсылкаНомер
51 hhhh
 
19.08.15
15:08
ВЫБРАТЬ
  |   ПоступлениеТоваровУслуг.Ссылка,
|   ПоступлениеТоваровУслуг.Номер КАК СсылкаНомер
52 Grinpic
 
19.08.15
15:13
(51) хм, мне нужно просто проверить существует ли документ в данном запросе, а номер я вытягиваю для сверки в условии, чтоб если не существует создать новый, не уверен что мне нужна ссылка
53 Grinpic
 
19.08.15
15:16
(51) У меня 2 таких запроса на самом деле, один тянет ссылку а другой номер из ссылки, они слущат для разных целей. 1 создает документ поступление товаров, а 2 добавляет в документе номенклатуру если не находит то создает новую
54 Fish
 
гуру
19.08.15
15:16
(46) А чем существующий отладчик не устраивает?
55 hhhh
 
19.08.15
15:18
(52) но запрос ваш медленнее будет раз в 70. Просто вытаскивайте номер в запросе, в этом случае лучше наступить на горло соственной песне, ради скорости программы можно пострадать.
56 Grinpic
 
19.08.15
15:18
(51) в связи с тем что я начинающий код плохо читаем и в нем можно запутаться)
57 Grinpic
 
19.08.15
15:19
(54) не могу найти где значение НВдата меняется с ИНН
58 hhhh
 
19.08.15
15:20
(57) точки останова не судьба поставить? И значение НВДат кинуть вниз, в табло.
59 Grinpic
 
19.08.15
15:21
(55) попробую переделать запрос, только надо ошибку исправить, а после займусь
60 Grinpic
 
19.08.15
15:22
(58) во всем коде поставить?
61 Grinpic
 
19.08.15
15:23
на все строки кода*?
62 Fish
 
гуру
19.08.15
15:23
(57) Так по шагам иди, и смотри, где оно меняется.
63 Grinpic
 
19.08.15
15:24
(62) Так и делал от НВдат ставил точку и F10 но он прыгает в один момент на функцию с запросом и уже поменял...
64 Fish
 
гуру
19.08.15
15:25
(63) Используй силу F11.
65 Grinpic
 
19.08.15
15:29
(64) Блин... спасибо)
66 Grinpic
 
19.08.15
15:46
Нашел проблему, у функциии моей было 3 параметра ИНН, НВдат, НВход
я не знал что их нужно было использовать в том порядке в котором они были заданы и в процедуре я этот порядок не соблюдал из-за этого ИНН присвоелось значение НВдат, заменил все заработало, всем спасибо)
67 ДенисЧ
 
19.08.15
15:47
(66) мда....
Выбирай - метла или утка?
AdBlock убивает бесплатный контент. 1Сергей