Имя: Пароль:
1C
1С v8
ДанныеФормыВЗначение
0 antihacker
 
14.11.17
05:45
Всем привет !
Вот код.

    НаборКонстантОбъект = ДанныеФормыВЗначение(Элементы.Резервы,Тип("ТаблицаЗначений"));
    
    Для Каждого ТекСтрока Из НаборКонстантОбъект Цикл
        
        ТекСтрока.СреднедневнаяЗарплата = ?(ТекСтрока.Дней = 0, 0, Окр(ТекСтрока.БазаРасчета / ТекСтрока.Дней, 2));
        
    КонецЦикла;
    
    ЗначениеВДанныеФормы(НаборКонстантОбъект, Элементы.Резервы);

пишет

Ошибка при вызове метода контекста (ДанныеФормыВЗначение)
    НаборКонстантОбъект = ДанныеФормыВЗначение(Резервы,Тип("ТаблицаЗначений"));


ПОчему так надо ? Потому что поле СреднедневнаяЗарплата  добавлен в ТЧ как реквизит формы. Остальные поля ТЧ от табличной части Объекта.

Почему такая ошибка ? И на правильном пути ли я вообще ?
1 antihacker
 
14.11.17
05:58
Вот полная ошибка
{Документ.НачислениеСуммРезерваКОтпуску.Форма.ФормаДокумента1.Форма(171)}: Ошибка при вызове метода контекста (ДанныеФормыВЗначение)
    НаборКонстантОбъект = ДанныеФормыВЗначение(Резервы,Тип("ТаблицаЗначений"));
по причине:
Несоответствие типов (параметр номер '1')
Несоответствие типов (параметр номер '1')
2 ribuh
 
14.11.17
06:20
Для Каждого ТекСтрока Из Резервы Цикл

.......

КонецЦикла;

Вполне достаточно, если Резервы - реквизит с типом таблица значений управляемой формы
3 antihacker
 
14.11.17
07:39
НЕт

Поле объекта не обнаружено (СреднедневнаяЗарплата)

Это потому что я добавил это поле на форме как дополнительное.

В Объект.Резервы его нету.
4 ribuh
 
14.11.17
07:44
(3) Вы путаетесь в показаниях... Определись уже, Объект.Резервыф - это ТЧ объекта, просто Резервы - может быть реквизитом формы, состав реквизитов этой табличной части задается или в реквизитах объекта, или в реквизитах формы...
и да, где вы цикл запускаете, чтобы уж совсем наверняка, это нужно делать &НаСервере
5 ribuh
 
14.11.17
07:48
Аааа, кажется дошло, у вас в ТЧ объекта нет поля СреднедневнаяЗарплата, оно добавлено в форме.
Зачем такое извращение, не моё дело, конечно. Но тут опять жен  на сервере, можно пойти таким путём:
тз = Элементы.Резервы.Выгрузить();
получим таблицу значений, потом с ней делаем, что захочется, и загружаем обратно...
6 Sayan_mi
 
14.11.17
07:59
Да если это таблица то проще Не ДанныеФормыВЗначение а РеквизитФормыВЗначение("Резервы") на выходе получите таблицу значений.
7 antihacker
 
14.11.17
11:34
НаборКонстантОбъект = РеквизитФормыВЗначение("Объект.Резервы");
    
    Для Каждого ТекСтрока Из НаборКонстантОбъект.резервы Цикл
        
        ТекСтрока.СреднедневнаяЗарплата = ?(ТекСтрока.Дней = 0, 0, Окр(ТекСтрока.БазаРасчета / ТекСтрока.Дней, 2));
        
    КонецЦикла;    НаборКонстантОбъект = РеквизитФормыВЗначение("Объект.Резервы");
    
    Для Каждого ТекСтрока Из НаборКонстантОбъект.резервы Цикл
        
        ТекСтрока.СреднедневнаяЗарплата = ?(ТекСтрока.Дней = 0, 0, Окр(ТекСтрока.БазаРасчета / ТекСтрока.Дней, 2));
        
    КонецЦикла;
    
    ЗначениеВРеквизитФормы(НаборКонстантОбъект, "Объект.Резервы");

ПИШЕТ

{Документ.НачислениеСуммРезерваКОтпуску.Форма.ФормаДокумента1.Форма(173)}: Поле объекта не обнаружено (резервы)
    Для Каждого ТекСтрока Из НаборКонстантОбъект.резервы Цикл




    
    ЗначениеВРеквизитФормы(НаборКонстантОбъект, "Объект.Резервы");
8 antihacker
 
14.11.17
11:37
Пробовал так

    НаборКонстантОбъект = РеквизитФормыВЗначение("Объект");
    
    Для Каждого ТекСтрока Из НаборКонстантОбъект.Резервы Цикл
        
        ТекСтрока.СреднедневнаяЗарплата = ?(ТекСтрока.Дней = 0, 0, Окр(ТекСтрока.БазаРасчета / ТекСтрока.Дней, 2));
        
    КонецЦикла;
    
    ЗначениеВРеквизитФормы(НаборКонстантОбъект, "Объект");


ПИШЕТ

{Документ.НачислениеСуммРезерваКОтпуску.Форма.ФормаДокумента1.Форма(175)}: Поле объекта не обнаружено (СреднедневнаяЗарплата)
        ТекСтрока.СреднедневнаяЗарплата = ?(ТекСтрока.Дней = 0, 0, Окр(ТекСтрока.БазаРасчета / ТекСтрока.Дней, 2));
9 Sayan_mi
 
14.11.17
11:45
Попробуй не Объект.Резервы, а просто Резервы и посмотри в отладчике что в текСтроку попадает.