Имя: Пароль:
1C
1С v8
Помогите найти ошибку
,
0 prilforreal
 
10.07.17
15:07
Добрый день, помогите обнаружить и  поправить ошибку...

В форме документа в табличной части добавил колонку "срок" заполняется ячейка в колонке автоматически, в нее записывается дата и время, в зависимости от текущей. Вызываю процедуру автоподбора значения для текущей записи в кнопке, заполняющей остальные поля из файла, приложение начинает ругаться на мою процедуру, оставляя поле пустым. Ошибка :{Документ.ДилЗаказ.Форма.Форма1.Форма(1687)}: Значение не является значением объектного типа (Срок)            ЭлементыФормы.ТабличноеПоле1.ТекущиеДанные.Срок = КонецДня(ТекущаяДата())

Листинг процедуры и той в которой она вызывается:


Процедура ПривязатьНовыйНажатие(Элемент)
    ПривязНов();
    ТабличноеПоле1ПриНачалеРедактирования("",ИСТИНА,ЛОЖЬ);
        КонецПроцедуры


Процедура ТабличноеПоле1ПриНачалеРедактирования(Элемент, НоваяСтрока,Копирование)
    Если НоваяСтрока И НЕ Копирование Тогда
        Если ТекущаяДата() + 60*60*6 < КонецДня(ТекущаяДата()) Тогда
            ЭлементыФормы.ТабличноеПоле1.ТекущиеДанные.Срок = КонецДня(ТекущаяДата());
        КонецЕсли;
        Если ТекущаяДата() + 60*60*6 > КонецДня(ТекущаяДата()) Тогда
            ЭлементыФормы.ТабличноеПоле1.ТекущиеДанные.Срок = КонецДня(ТекущаяДата())+60*60*10;
            КонецЕсли;
    КонецЕсли;
КонецПроцедуры
1 Ёпрст
 
10.07.17
15:12
Может того, срок сделаешь реквизитом табличной части ?
2 Beduin
 
10.07.17
15:12
(0) У тебя минимум три возможных варианта не исполнения условий в процедуре ТабличноеПоле1ПриНачалеРедактирования.
3 Ёпрст
 
10.07.17
15:13
с типом дата.
4 sapphire
 
10.07.17
15:55
(1) +100500.
Или сделать копию табличной части реквизитом формы.
5 prilforreal
 
10.07.17
16:12
Ёпрст Конечно же срок- реквизит табличной части) Проблема в том, что просто при добавлении строки ячейка заполняется необходимым значением, при добавлении строки из процедуры ПривязатьНовыйНажатие всплывает ошибка.
6 prilforreal
 
10.07.17
16:15
sapphire Условия исполняются, но при вызове процедуры ТабличноеПоле1ПриНачалеРедактирования из процедуры ПривязатьНовыйНажатие(Элемент) выводит ошибку и ячейка остается пустой.
7 Alexandr_U1982
 
10.07.17
16:16
Проверь отладчиком: Есть ли в свойстве "ЭлементыФормы.ТабличноеПоле1.ТекущиеДанные" поле "Срок".
8 Alexandr_U1982
 
10.07.17
16:19
Вместо:

    Если ТекущаяДата() + 60*60*6 < КонецДня(ТекущаяДата()) Тогда
        ЭлементыФормы.ТабличноеПоле1.ТекущиеДанные.Срок = КонецДня(ТекущаяДата());
    КонецЕсли;
    Если ТекущаяДата() + 60*60*6 > КонецДня(ТекущаяДата()) Тогда
        ЭлементыФормы.ТабличноеПоле1.ТекущиеДанные.Срок = КонецДня(ТекущаяДата())+60*60*10;
    КонецЕсли;
    
Лучше написать:

    Если ТекущаяДата() + 60*60*6 < КонецДня(ТекущаяДата()) Тогда
        ЭлементыФормы.ТабличноеПоле1.ТекущиеДанные.Срок = КонецДня(ТекущаяДата());
    ИначеЕсли ТекущаяДата() + 60*60*6 > КонецДня(ТекущаяДата()) Тогда
        ЭлементыФормы.ТабличноеПоле1.ТекущиеДанные.Срок = КонецДня(ТекущаяДата())+60*60*10;
    КонецЕсли;

Вопрос на засыпку:
А что будет при условии, "ТекущаяДата() + 60*60*6 = КонецДня(ТекущаяДата())"?
9 sapphire
 
10.07.17
16:23
(6) А если ЭлементыФормы.ТабличноеПоле1.ТекущиеДанные=неопределено?

Например, нет текущей строки.
10 prilforreal
 
10.07.17
16:47
Alexandr_U1982 откроются врата в ад, сатана поглотит все базы 1С  наступит вечная ночь?

sapphire Тогда ни какое поле не будет заполняться.
11 prilforreal
 
10.07.17
17:00
Замечено, в отладчике  при двойном клике по пустой ячейке срок значение заполняется.
12 prilforreal
 
10.07.17
17:01
Alexandr_U1982 Спасибо, с иначе конечно намного удобнее, сам думал об этом но не был уверен в синтаксисе)))
13 craxx
 
10.07.17
17:01
(0) Срок не является реквизитом табличной части. Это просто колонка, не более
14 craxx
 
10.07.17
17:03
(13) Проверь внимательно что в этой колонке в Данные записано
15 prilforreal
 
10.07.17
17:10
craxx В Данных выбран реквизит табличной части срок)
16 sapphire
 
10.07.17
17:34
(15) Посмотри, стоит ли галка "Использовать всегда" у реквизита табличной части "Срок".
17 Alexandr_U1982
 
11.07.17
07:45
(10) Какой нафиг сатана? У тебя условия не отрабатывают ситуацию со знаком "="
18 1dvd
 
11.07.17
07:50
(15) тип какой у реквизита?
19 prilforreal
 
11.07.17
08:02
Alexandr_U1982 а как это исправить?
1dvd Дата конечно же)
20 prilforreal
 
11.07.17
08:05
sapphire не смог найти такого свойства.
21 DrZombi
 
гуру
11.07.17
08:22
(17) Да и условия бредовые :)
22 DrZombi
 
гуру
11.07.17
08:22
(19) Пиши лучше с номерами, а то не поймешь, на что ты там отвечаешь :)
23 youalex
 
11.07.17
08:23
Включи Отладка/Остановка по ошибке..
Когда вывалится ошибка, смотри в отладчике что у тебя в  ЭлементыФормы.ТабличноеПоле1.ТекущиеДанные
24 DrZombi
 
гуру
11.07.17
08:25
(23) = Неопределено, не всегда текущие данные текущие :)
25 youalex
 
11.07.17
08:28
(24) ну, если не врет про свойство "данные" - только оно)
26 prilforreal
 
11.07.17
09:35
(23) Табличное поле пустое, вываливается ошибка "Ошибка времени выполнения: {Документ.ДилЗаказ.Форма.Форма1.Форма(1685)} Значение не является значением объектного типа (Срок) в модуле Документ.ДилЗаказ.Форма.Форма1.Форма, строка 1685.
27 prilforreal
 
11.07.17
09:41
(24) Подскажите, каким образом мне приравнять Неопределено?

Добавил Условие:

ИначеЕсли ЭлементыФормы.ТабличноеПоле1.ТекущиеДанные.Срок = Неопределено Тогда
    КонецЕсли;

Но без изменений, та же ошибка всплывает.
28 Ёпрст
 
11.07.17
09:41
(26) да ё..
Вставь ты ужо в свой код условие:

    СтрокаТабличнойЧасти = ЭлементыФормы.ТабличноеПоле1.ТекущиеДанные;
    Если СтрокаТабличнойЧасти = Неопределено Тогда
        Возврат;
    КонецЕсли;
29 aleks_default
 
11.07.17
09:50
отладкофобия в запущенной стадии
30 prilforreal
 
11.07.17
10:00
(28) Спасибо, ошибка пропала, но поле почему то при вызове процедуры не заполняется, данные в нем заполняются только после двойного клика по ячейке.
31 Ёпрст
 
11.07.17
10:04
(30) как написал, так и работает.
Нам отсюда не видно, в какой момент и что ты делаешь
32 prilforreal
 
11.07.17
15:49
Спасибо всем, кто помог, все работает как и написано, Процедура ПриНачалеРедактирования, вот и значение заполняется только при начале редактирования а не при добавлении строки)