И сразу кусочек кода.
ТТТ.Очистить();
ТТТ.НоваяКолонка("Автор","Справочник.Сотрудники");
ТТТ.НоваяКолонка("Д");
ТТТ.НоваяКолонка("Т");
ТТТ.НоваяКолонка("С","Число");
Сз = Создатьобъект("СписокЗначений");
Спр = Создатьобъект("Справочник.ТМЦ");
Спр.Использоватьродителя(папка);
Спр.ВыбратьЭлементы();
Пока Спр.ПолучитьЭлемент() = 1 Цикл
Если Спр.этоГруппа() = 0 Тогда
Сз.ДобавитьЗначение(Спр.ТекущийЭлемент());
КонецЕсли;
КонецЦикла;
Д = "";
СзД = СоздатьОбъект("СписокЗначений");
Би = Создатьобъект("Бухгалтерскиеитоги");
Би.ИспользоватьСубконто(ВидыСубконто.ТМЦ,Сз);
Би.ВыполнитьЗапрос(НачДата,КонДата,"281","902",,2,"Операция");
Би.ВыбратьСубконто(ВидыСубконто.ТМЦ);
Пока Би.ПолучитьСубконто(ВидыСубконто.ТМЦ) = 1 Цикл
Би.ВыбратьПериоды();
Пока Би.ПолучитьПериод() = 1 Цикл
Д = Би.Операция.Документ.ТекущийДокумент();
ТТТ.НоваяСтрока();
ТТТ.Автор = Д.АвторДока;
ТТТ.Д = Д.ТекущийДокумент();
ТТТ.Т = Би.Субконто(ВидыСубконто.ТМЦ);
ТТТ.С = Би.КО(1) - БИ.ДО(1);
КонецЦикла;
КонецЦикла;
ИТОГ = ТТТ.итог(4);
Сообщить(ИТОГ,"!!!");
Сообщить(ИТОГ,"!!!");
я вставил Предупреждение(ИТОГ,"!!!");
и о чудо! Выводится предупреждение и сообщить верно. Убираю предупреждение и снова вижу автора документа из первой строки ТЗ. Добавляю в произвольных местах в коде еще несколько "сообщить" и снова БИНГО. Выводит нужную мне сумму по последней колонке. Убираю сообщить все кроме итога и угадайте что мне выводит? Правильно... автора документа из первой строки ТЗ. Через отладчик смотрю значение ИТОГ = ТТТ.итог(4);
, убеждаюсь в правильности расчета итога по колонке, но после нажатия F5 угадайте что мне выводит 1С-ка? Да! АВТОРА ДОКУМЕНТА ИЗ ПЕРВОЙ СТРОКИ ТЗ. Забиваю на таблицу значений на форме обработки, инициализирую ее в коде - сообщить выводит нужный мне Итог. Убираю создание ТЗ в коде, возвращаю ее на место на форму, запускаю обработку и снова на меня через сообщить смотрит уже ненависная фамилия автора документа из первой строки ТЗ. Наименование объекта ТЗ менял. Наименования колонок тоже. Ситуация повторяется.! | http://pro1c.org.ua/index.php?act=announce&id=2: 4 |
читайте мат.часть..операции конкатенации...
в Сообщить первый параметр - строка, а не число...
а что выведет Сообщить(""+ИТОГ,!!!)?
igmig65 @ Вчера, 17:36
,
Вывело правильный итог. Хорошо. Предположим проблема в преобразовании числа итога в строку. Но почему тогда Сообщить(Итог) выводит ИТОГ правильно после не первого использования сообщить в коде обработки. И почему при первом использовании сообщить() выводится именно первое значение первой строки ТЗ? Все равно логика непонятна...
Ну вот как так?
Talkman @ Вчера, 8:29
,
Коллеги, меня реально интересует эта тема. Если это баг и кто то такое уже ловил, поделитесь опытом.
А как отработает у Вас такой код
...
ИТОГ = ТТТ.итог(4);
Сообщить(ИТОГ,"!!!");
Сообщить(ТТТ.итог(4),"!!!");
Сообщить(ТТТ.итог("С"),"!!!");
Набросал вот такое у себя. Работает адекватно
Процедура Сформировать()
тз.Очистить();
тз.НоваяКолонка("А");
тз.НоваяКолонка("Б");
тз.НоваяКолонка("В");
тз.НоваяКолонка("Г");
Би = Создатьобъект("Бухгалтерскиеитоги");
Би.ИспользоватьСубконто(ВидыСубконто.Счета);
Би.ВыполнитьЗапрос('01.01.2013','01.02.2013',"311",,,2,"Операция");
Би.ВыбратьСубконто(ВидыСубконто.Счета);
Пока Би.ПолучитьСубконто(ВидыСубконто.Счета) = 1 Цикл
Би.ВыбратьПериоды();
Пока Би.ПолучитьПериод() = 1 Цикл
Д = Би.Операция.Документ.ТекущийДокумент();
тз.НоваяСтрока();
//ТТТ.Автор = Д.АвторДока;
//ТТТ.Д = Д.ТекущийДокумент();
//ТТТ.Т = Би.Субконто(ВидыСубконто.ТМЦ);
//ТТТ.С = Би.КО(1) - БИ.ДО(1);
тз.А = "А";
тз.Б = "Б";
тз.В = "В";
тз.Г = Би.КО(1) - БИ.ДО(1);
Прервать;
КонецЦикла;
Прервать;
КонецЦикла;
Сообщить(тз.Итог(4));
КонецПроцедуры
alx389d @ Сегодня, 11:27
,
Есть один нюанс. Если я не создаю колонку Автора и ТЗ состоит только из трех колонок, баг тоже не подтверждается. И я не вижу в этом никакой закономерности
Посмотрите, нет ли в общих реквизитах документов таких-же названий реквизитов как и используемые вами на формах.
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua