Имя: Пароль:
1C
1С v8
Как сделать расчет по всей табличной части не записанного документа?
0 Sanjik
 
01.04.15
20:18
Здравствуйте, Подскажите пожалуйста, пишу процедуру, которая в первом запросе заполняет табличную часть "ТаблицаПоДням" столбец "Число", т.е. заполняет числа рабочих дней за месяц. Второй запрос вытаскивает количество рабочих дней и заполняет реквизит документа "РабочиеДни". Есть также реквизит "ПланВТенге" - содержит число. Как правильно расчитать табличную часть в конце, нужно поделить число "ПланВТенге" на "Рабочие дни" и записать значение в табличную часть "ТаблицаПоДням" в графу "Тенге". Это там, где комментарий - "Расчитываем табличные поля". Почемуто цикл обрабатывает по кругу только последнюю строчку.

Процедура ЗаполнитьНажатие(Элемент)
//Заполняем таблицу рабочими днями    
    ТаблицаПоДням.Очистить();
    ДатаНач = НачалоМесяца(ПериодРегистрации);
    ДатаКон = КонецМесяца(ПериодРегистрации);
    ВидДня = Перечисления.ВидыДнейПроизводственногоКалендаря.Рабочий;
    
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    РегламентированныйПроизводственныйКалендарь.ДатаКалендаря
        |ИЗ
        |    РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК РегламентированныйПроизводственныйКалендарь
        |ГДЕ
        |    РегламентированныйПроизводственныйКалендарь.ДатаКалендаря МЕЖДУ &ДатаНач И &ДатаКон
        |    И РегламентированныйПроизводственныйКалендарь.ВидДня = &ВидДня";

    Запрос.УстановитьПараметр("ВидДня", ВидДня);
    Запрос.УстановитьПараметр("ДатаКон", ДатаКон);
    Запрос.УстановитьПараметр("ДатаНач", ДатаНач);

    Результат = Запрос.Выполнить();        
        
    ВыборкаДетальныеЗаписи = Результат.Выбрать();
            Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        ТЧ = ТаблицаПоДням.Добавить();
        ТЧ.Число = ВыборкаДетальныеЗаписи.ДатаКалендаря;
    КонецЦикла;

//Вычисляем количество рабочих дней    
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    КОЛИЧЕСТВО(РегламентированныйПроизводственныйКалендарь.ДатаКалендаря) КАК ДатаКалендаря
        |ИЗ
        |    РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК РегламентированныйПроизводственныйКалендарь
        |ГДЕ
        |    РегламентированныйПроизводственныйКалендарь.ДатаКалендаря МЕЖДУ &ДатаНач И &ДатаКон
        |    И РегламентированныйПроизводственныйКалендарь.ВидДня = &ВидДня";

    Запрос.УстановитьПараметр("ВидДня", ВидДня);
    Запрос.УстановитьПараметр("ДатаКон", ДатаКон);
    Запрос.УстановитьПараметр("ДатаНач", ДатаНач);

    Результат = Запрос.Выполнить();
    
    ВыборкаДетальныеЗаписи = Результат.Выбрать();
            Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        ДокументОбъект.РабочиеДни = ВыборкаДетальныеЗаписи.ДатаКалендаря;
            КонецЦикла;
            
        
    //Расчитываем табличные поля
    ОбщДеньги = ДокументОбъект.ПланВТенге;
    ОбщМетры = ДокументОбъект.ПланВМ2;
    ОбщДни = ДокументОбъект.РабочиеДни;
        Для Каждого Строка ИЗ ТЧ ЦИКЛ  
    ТЧ.Тенге = ОбщДеньги / ОбщДни;
        КонецЦикла;

    

КонецПроцедуры
1 Otkr
 
01.04.15
20:26
Не

Для Каждого Строка ИЗ ТЧ ЦИКЛ  
    ТЧ.Тенге = ОбщДеньги / ОбщДни;
        КонецЦикла;

а

Для Каждого Строка ИЗ ТЧ ЦИКЛ  
    Строка.Тенге = ОбщДеньги / ОбщДни;
        КонецЦикла;
2 Sanjik
 
01.04.15
20:33
(1) Неа, ругается:
{Документ.ПланированиеНаМесяц.Форма.ФормаДокумента.Форма(141)}: Значение не является значением объектного типа (Тенге)
    Строка.Тенге = ОбщДеньги / ОбщДни;
3 Sanjik
 
01.04.15
20:37
Все, разобрался, ТЧ = ТаблицаПоДням.Добавить();
Сделал ТЧ2 = ТаблицаПоДням;  Все заработало!
Спасибо Otkr!!