Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Хочу получить сумму по колонке, но получаю значение первого элемента ТЗ первой строки
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 7.7
Talkman
И сразу кусочек кода.
ТТТ.Очистить();
    ТТТ.НоваяКолонка("Автор","Справочник.Сотрудники");
    ТТТ.НоваяКолонка("Д");
    ТТТ.НоваяКолонка("Т");
    ТТТ.НоваяКолонка("С","Число");
    
    Сз = Создатьобъект("СписокЗначений");
    Спр = Создатьобъект("Справочник.ТМЦ");
    Спр.Использоватьродителя(папка);
    Спр.ВыбратьЭлементы();
    Пока Спр.ПолучитьЭлемент() = 1 Цикл
        Если Спр.этоГруппа() = 0 Тогда
            Сз.ДобавитьЗначение(Спр.ТекущийЭлемент());
        КонецЕсли;    
    КонецЦикла;    
    Д = "";                                            
    СзД = СоздатьОбъект("СписокЗначений");
    Би = Создатьобъект("Бухгалтерскиеитоги");
    Би.ИспользоватьСубконто(ВидыСубконто.ТМЦ,Сз);
    Би.ВыполнитьЗапрос(НачДата,КонДата,"281","902",,2,"Операция");
    Би.ВыбратьСубконто(ВидыСубконто.ТМЦ);
    Пока Би.ПолучитьСубконто(ВидыСубконто.ТМЦ) = 1 Цикл  
        Би.ВыбратьПериоды();
        Пока Би.ПолучитьПериод() = 1 Цикл    
            Д = Би.Операция.Документ.ТекущийДокумент();
            ТТТ.НоваяСтрока();
            ТТТ.Автор = Д.АвторДока;
            ТТТ.Д = Д.ТекущийДокумент();
            ТТТ.Т = Би.Субконто(ВидыСубконто.ТМЦ);
            ТТТ.С = Би.КО(1) - БИ.ДО(1);
            
        КонецЦикла;
    КонецЦикла;    
    ИТОГ = ТТТ.итог(4);
    Сообщить(ИТОГ,"!!!");

По логике вещей в конце я должен получить сумму по колонке "С". Но кабака. Выводит значение первого элемента ТЗ первой строки. Я пошел немного дальше. Перед
Сообщить(ИТОГ,"!!!");
я вставил
Предупреждение(ИТОГ,"!!!");
и о чудо! Выводится предупреждение и сообщить верно. Убираю предупреждение и снова вижу автора документа из первой строки ТЗ. Добавляю в произвольных местах в коде еще несколько "сообщить" и снова БИНГО. Выводит нужную мне сумму по последней колонке. Убираю сообщить все кроме итога и угадайте что мне выводит? Правильно... автора документа из первой строки ТЗ. Через отладчик смотрю значение
ИТОГ = ТТТ.итог(4);
, убеждаюсь в правильности расчета итога по колонке, но после нажатия F5 угадайте что мне выводит 1С-ка? Да! АВТОРА ДОКУМЕНТА ИЗ ПЕРВОЙ СТРОКИ ТЗ. Забиваю на таблицу значений на форме обработки, инициализирую ее в коде - сообщить выводит нужный мне Итог. Убираю создание ТЗ в коде, возвращаю ее на место на форму, запускаю обработку и снова на меня через сообщить смотрит уже ненависная фамилия автора документа из первой строки ТЗ. Наименование объекта ТЗ менял. Наименования колонок тоже. Ситуация повторяется.
А теперь вопрос. Со мной совсем все плохо или это все таки баг?...


 ! 

необходимо зарегистрироваться для просмотра ссылки: 4
 
igmig65
читайте мат.часть..операции конкатенации...
в Сообщить первый параметр - строка, а не число...
а что выведет Сообщить(""+ИТОГ,!!!)?
Talkman
igmig65 @ Вчера, 17:36 необходимо зарегистрироваться для просмотра ссылки ,
Вывело правильный итог. Хорошо. Предположим проблема в преобразовании числа итога в строку. Но почему тогда Сообщить(Итог) выводит ИТОГ правильно после не первого использования сообщить в коде обработки. И почему при первом использовании сообщить() выводится именно первое значение первой строки ТЗ? Все равно логика непонятна...



Ну вот как так?
Talkman
Talkman @ Вчера, 8:29 необходимо зарегистрироваться для просмотра ссылки ,
Коллеги, меня реально интересует эта тема. Если это баг и кто то такое уже ловил, поделитесь опытом.
a1exs
А как отработает у Вас такой код

...
ИТОГ = ТТТ.итог(4);
Сообщить(ИТОГ,"!!!");

Сообщить(ТТТ.итог(4),"!!!");
Сообщить(ТТТ.итог("С"),"!!!");
alx389d
Набросал вот такое у себя. Работает адекватно
Процедура Сформировать()

    тз.Очистить();
    
    тз.НоваяКолонка("А");
    тз.НоваяКолонка("Б");
    тз.НоваяКолонка("В");
    тз.НоваяКолонка("Г");
    
    Би = Создатьобъект("Бухгалтерскиеитоги");
    Би.ИспользоватьСубконто(ВидыСубконто.Счета);
    Би.ВыполнитьЗапрос('01.01.2013','01.02.2013',"311",,,2,"Операция");
    Би.ВыбратьСубконто(ВидыСубконто.Счета);
    Пока Би.ПолучитьСубконто(ВидыСубконто.Счета) = 1 Цикл  
        Би.ВыбратьПериоды();
        Пока Би.ПолучитьПериод() = 1 Цикл    
            Д = Би.Операция.Документ.ТекущийДокумент();
            тз.НоваяСтрока();
            //ТТТ.Автор = Д.АвторДока;
            //ТТТ.Д = Д.ТекущийДокумент();
            //ТТТ.Т = Би.Субконто(ВидыСубконто.ТМЦ);
            //ТТТ.С = Би.КО(1) - БИ.ДО(1);
            
            тз.А = "А";
            тз.Б = "Б";
            тз.В = "В";
            тз.Г = Би.КО(1) - БИ.ДО(1);
            
            Прервать;
        КонецЦикла;
        
        Прервать;
    КонецЦикла;    
    
    Сообщить(тз.Итог(4));
КонецПроцедуры

это новая обработка, на нее брошен элемент управления ТаблицаЗначений. И одна процедура. Все. Не видно бага.
Упрощайте ваш код по максимуму, уберите запрос вообще сначала, добавьте просто новую строку. Разнесите очистку/создание колонок на разных кнопки/процедуры. Через загрузку/выгрузку другой таблицы значений. Ну и тд. Ну вообщем, копать. бывает такое что-то где-то напишешь, а потом ищешь баг совсем не в том месте smile.gif А так баг не подтверждается пока что.
Talkman
alx389d @ Сегодня, 11:27 необходимо зарегистрироваться для просмотра ссылки ,
Есть один нюанс. Если я не создаю колонку Автора и ТЗ состоит только из трех колонок, баг тоже не подтверждается. И я не вижу в этом никакой закономерности sad.gif
Naghual
Посмотрите, нет ли в общих реквизитах документов таких-же названий реквизитов как и используемые вами на формах.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.