Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 ноя 2024, 12:03

Автоматическое заполнение оставшегося свободного места отчёта

Автор keramik, 25 сен 2015, 08:53

0 Пользователей и 1 гость просматривают эту тему.

keramik

Доброе утро, 1С 8.2, "Управление торговлей", редакция 10.3 (10.3.7.9).
Вопрос, каким образом можно научить 1С заполнять свободное место в отчёте пустыми строками? В приложении скрин с примером.
Ситуация такая, есть форма отчёта в которую выводится информация из программы о заказанных работах, обычная ситуация - около шести-семи строк. Также есть область, в которую пользователь хочет вписывать информацию о проделанных работах вручную (см. изображение из приложения). Эта область должна сама растягиваться в зависимости от того, сколько свободного места осталось на листе. На ней рисуется таблица с графами "Наименование работы", "Исполнитель", "Нормочасы", "Стоимость".
Пока что я жёстко вбил количество строк во второй области в макете, но это не удобно, т.к. если в первой области мало информации, то внизу листа остаётся пустое место, и наоборот, если много - переносится часть таблицы на второй лист, что тоже не подходит пользователю.
Подскажите пожалуйста, в какую сторону копать?

vitasw

В цикле выводите строки для ручного заполнения. На каждом шаге цикла пользуете ПроверитьВывод()

keramik


vitasw

Данный метод хорош при небольшом документообороте и малом числе пользователей в базе. В противном случае будет ощутимо тормозить. Ну и естественно принтер, на который происходит печать должен быть основным.

дфтын

И не забывайте программно отступы, колонтитулы и прочие задавать

keramik

Цитата: vitasw от 25 сен 2015, 12:26
Данный метод хорош при небольшом документообороте и малом числе пользователей в базе. В противном случае будет ощутимо тормозить. Ну и естественно принтер, на который происходит печать должен быть основным.
Как раз то, что надо. Мало пользователей и записей не так много.

keramik

Пробовал сделать цикл, который выводит одну и ту же олрасть до тех пор, пока не закончится лист, вот часть процедуры:
ОбластьЗаявкаТаблица = Макет.ПолучитьОбласть("ЗаявкаТаблица");
МассивОбластей = Новый Массив();

МассивОбластей.Добавить(ОбластьЗаявкаТаблица);
Для Каждого Строка из ОбластьЗаявкаТаблица Цикл
    ТабДокумент.Вывести(ОбластьЗаявкаТаблица);
    Если НЕ ТабДокумент.ПроверитьВывод(МассивОбластей) Тогда
        ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();
    КонецЕсли;
КонецЦикла;

только вот получаю сообщение:
Итератор для значения не определен
Для каждого Строка из ОбластьЗаявкаТаблица Цикл

Пока не могу врубиться, как это исправить.

Дополнение:
Посмотрел дебаггером, всё зависает в момент, когда доходит до "Строка". Каким образом передать программе, что надо перебирать строки, дабы понять, что лист закончился?
Добавлено: 30 сен 2015, 14:29


Почти обрадовался, изменив код таким вот образом:
Пока НЕ ТабДокумент.ПроверитьВывод(МассивОбластей) Цикл
ТабДокумент.Вывести(ОбластьЗаявкаТаблица);
КонецЦикла;


т.е. пока не конец листа надо выводить ОбластьЗаявкаТаблица.
На что программа мне ответила:
Ошибка при вызова метода контекста (ПроверитьВывод)
Пока НЕ ТабДокумент.ПроверитьВывод(МассивОбластей) Цикл

cska-fanat-kz

ПроверитьВывод() может косячить когда основной принтер не установлен...
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

keramik

Но вариант с циклом "Пока..." должен работать. Так?

Kironten

Ну сделай так например:

Вывод = Истина;
Пока Вывод Цикл
    Если ТабДок.ПроверитьВывод(Массив) Тогда
Табдок.Вывести(Обл);
Иначе
Вывод = Ложь;
КонецЕсли;
КонецЦикла;

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск