Имя: Пароль:
1C
 
По кнопке "Сформировать отчет" выводится несколько раз результат
0 YamEgor
 
18.07.25
04:38
доброе время суток,Внешний Отчет использует запрос из схемы компоновки данных, остальное выводится программно, на форме сделал свою команду и в процедуре ВыполнитьПрограммноНаСервере() все и происходит:
&НаСервере
Процедура ВыполнитьПрограммноНаСервере(ТабДок)
    Если ТабДок.ВысотаТаблицы <> 0 Тогда
        ТабДок.Очистить();
    КонецЕсли;
    
    СхемаКД = РеквизитФормыВЗначение("Отчет").СхемаКомпоновкиДанных;    
    
    УстановитьНастройки();
    НастройкиКД = Отчет.КомпоновщикНастроек.Настройки;
    
    КомпоновщикМакетаКД = Новый КомпоновщикМакетаКомпоновкиДанных;
    МакетКД = КомпоновщикМакетаКД.Выполнить(СхемаКД, НастройкиКД);
    
    ПроцессорКД = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКД.Инициализировать(МакетКД);
    
    ТабДок.Очистить();
    ПроцессорВыводаКД = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
    ПроцессорВыводаКД.УстановитьДокумент(ТабДок);
    ПроцессорВыводаКД.НачатьВывод();
    ПроцессорВыводаКД.Вывести(ПроцессорКД);
    ПроцессорВыводаКД.ЗакончитьВывод();
    ТабДок.ПоказатьУровеньГруппировокСтрок(3);
    
КонецПроцедуры

отчет формируется по кнопке "Выполнить программно", если не закрывая отчет нажать второй раз то почему то выводится уже два раза результат, если третий раз нажать то выводится уже три раза результат, сам таб док очищается но после строчки выполнения кода ПроцессорВыводаКД.Вывести(ПроцессорКД); в табДоке высота таблицы становится соответственно какой раз нажимаешь если первый раз высота 200 если второй высота 400 и т.д. что может быть? как исправить?
1 palsergeich
 
18.07.25
09:45
Всегда очищайте табдок без проверки на условие высоту.
т.е. вместо
Если ТабДок.ВысотаТаблицы <> 0 Тогда
        ТабДок.Очистить();
    КонецЕсли;

просто ТабДок.Очистить();
2 palsergeich
 
18.07.25
04:42
+ покажите что у Вас в клиентском коде.
Табдок - это реквизит формы?
3 YamEgor
 
18.07.25
05:42
(2)
&НаКлиенте
Процедура ВыполнитьПрограммно(Команда)
    ВыполнитьПрограммноНаСервере(Результат);
КонецПроцедуры
Да Табдок  это реквизит формы
4 YamEgor
 
18.07.25
05:39
(1) понятно
5 palsergeich
 
18.07.25
05:42
(3)
Если именно Табдок (а не результат) - реквизит формы то откажитесь от передачи параметра в контекстную серверную процедуру.
У вас имя реквизита формы совпадает с входным параметром серверной процедуры.
те на клиенте ВыполнитьПрограммноНаСервере()
и процедуру измените на
&НаСервере
Процедура ВыполнитьПрограммноНаСервере()
6 YamEgor
 
18.07.25
05:55
(5) все сделал пока все так же, на первом скрине высота таблицы 0, на втором скрине, после третьего нажатия высота таблицы уже 608
7 palsergeich
 
18.07.25
06:25
(6) Тогда вместо ТабДок.очистить();
Сделай Табдок= Новый ТабличныйДокумент;
Там были какие то ньюансы именно с очисткой. я даже залез в кодобазу - у меня создание нового объекта при программном переформировании.
8 YamEgor
 
18.07.25
06:42
(7) сделал пока все так же
9 Franchiser
 
гуру
18.07.25
10:46
(8) сделай функцию вместо процедуры и напиши на клиенте
ТабДок = Выполнитьпрограммнонасервере() и используй другие имена внутри функции на сервере для ТабДок.
10 Мультук
 
гуру
18.07.25
11:15
(0)

1) Если это отчёт для типовой конфигурации, то непонятно "зачем всё это"

2) Почему "всё это" не в
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
11 YamEgor
 
18.07.25
12:11
(10) этот отчет для Кассиров и хотят чтоб каждый кассир видел только свое подразделение я взял схему компановки из типового отчета и там подразделения вываливались для всех, то сказали что это надо убрать и еще что бы пользователь не мог менять этот отчет и вытаскивать другие поля поэтому решил сделать все на форме и когда я пробовал делать это в процедуре ПриКомпоновкеРезультата то поведение было такое же
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший