• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Вывод на печать таблицы значений "в горизонтальном виде"

  • Автор темы number23
  • Дата начала
N

number23

Доброго дня!

1С 7.7 Конфигурация собственная.

Просьба помочь разобраться в следующем:
В документе, задавая в каждой строке реквизиты определяем периоды выполнения тех или иных работ, в разрезе 30-минутных отрезков.

_________.JPG

Сформированная таблица значений получается примерно такая
____1.JPG

Использованный код (на который хватало мозгов) следующий:
Код:
Процедура Печать()
Таб=СоздатьОбъект("Таблица");
Если Табл1=1 Тогда
Таб.ИсходнаяТаблица("ПутевойЖурнал1");
ИначеЕсли Табл1=0 Тогда
Таб.ИсходнаяТаблица("ПутевойЖурнал2"); 
КонецЕсли;
Таб.ВывестиСекцию("Отчет");
ТЗ=СоздатьОбъект("ТаблицаЗначений");
ТЗ.НоваяКолонка("Дата"); 
ТЗ.НоваяКолонка("Час"); 
ТЗ.НоваяКолонка("Мин"); 
ТЗ.НоваяКолонка("ВР");  
ВыбратьСтроки();
Пока ПолучитьСтроку()=1 Цикл
Начало = (ПриходЧасов*2+ПриходМинут/30);
Для Сч = 0 по ((ОтходДата-ПриходДата)*24+ОтходЧасов-ПриходЧасов+(ОтходМинут-ПриходМинут)/60)*2 Цикл
ТЗ.НоваяСтрока(); 
ТЗ.Дата = ПриходДата+ЦЕЛ((Сч+Начало)/48);
ТЗ.Час = ЦЕЛ((Сч+Начало)/2-24*ЦЕЛ((Сч+Начало)/48));
ТЗ.Мин = ((Сч+Начало)-2*ЦЕЛ((Сч+Начало)/2))*30;
ТЗ.ВР = ВидРабот; 
КонецЦикла;
КонецЦикла;
ТЗ.Свернуть("Дата,ВР,Час,Мин",""); 
ТЗ.ВыбратьСтроки();	
Пока ТЗ.ПолучитьСтроку()=1 Цикл
Таб.ВывестиСекцию("Строка");
КонецЦикла;			
Таб.ТолькоПросмотр(1);
Таб.Показать("ПутевойЖурнал");
КонецПроцедуры

Как сделать чтобы получилось выводить на печать таблицу следующего вида?
____2.JPG

Спасибо заранее всем откликнувшимся!
 
U

unknown181538

Обходим таблицу и выводим, используя методы "ВывестиСекцию", "ПрисоединитьСекцию".
Если день пошел новый, то "Вывести...", если другие полчаса, то "Присоединить..."
 
P

puh14

делаем цикл, в нем не выводим секции, а присоединяем.
 
T

TimeDontWait

Рисуеш секции:
1 - 2 клетки, в первой - "д", во во-второй - "д"\;
2 - 2 клетки, "п", "п";
3 - 2 клетки, "н\д","н\д";
В зависимости от условия присоединяеш нужную секцию.
Делаем переменную для хранения даты, при выборке записываем ее, и проверяем :
сходится, тогда присоединяем секцию(см.выше), в зависимости от условия,
не сходится - новая строка, перезаписываем переменную текущим значением дальше присоединяем строки с каждым шагом сверяя значения переменной и даты
 
N

number23

Рисуеш секции:
1 - 2 клетки, в первой - "д", во во-второй - "д"\;
2 - 2 клетки, "п", "п";
3 - 2 клетки, "н\д","н\д";
В зависимости от условия присоединяеш нужную секцию.
Делаем переменную для хранения даты, при выборке записываем ее, и проверяем :
сходится, тогда присоединяем секцию(см.выше), в зависимости от условия,
не сходится - новая строка, перезаписываем переменную текущим значением дальше присоединяем строки с каждым шагом сверяя значения переменной и даты

Дак "п", "д", "н/д" и т.д. это ведь элементы справочника...
Как заранее знать какие будут создаваться элементы пользователем?
 
T

TimeDontWait

Как заранее знать какие будут создаваться элементы пользователем?
Может что-то не понял, но этих элементов то пару, вот и сделай присоединение секций в зависимости от условия, задано "н" - секция такая-то.
Ну тебе же легче понять, я не до конца разобрался что тут и куда
 
V

vbs

Можно сделать так :
1. Создать таблицу значений из 63 колонок (1 -дата, остальное - получасовые интервалы на месяц, если я правильно понял).
Например, они называются "Дата, Период1...Период62)
2. обходим табличную часть документа
и в цикле заполняем ТЗ данными :
ТЗ.НоваяСтрока();
ТЗ.Дата =
По времени определяем номер колонки N (Например, 23.00 - 47 колонка, N = 47)
Номер колонки = "Период"+СОКРЛ(Строка(N))
ТЗ.УстановитьЗначение(<Номер строки в документе>,Номер колонки,<Данные>);
Сложность с переходом на новую дату придется решить самостоятельно
Получится обычная прямоугольная таблица, в которой заполнены и пустые клетки.
Далее выводим ее на печать линейно
 
U

unknown181538

Дак "п", "д", "н/д" и т.д. это ведь элементы справочника...
Как заранее знать какие будут создаваться элементы пользователем?
Т.е. будут другие виды работ.
Тогда заводите в спр-ке реквизит для хранения сокращения, и выводите его в ячейку.

Добавлено:
Можно сделать так :
1. Создать таблицу значений из 63 колонок (1 -дата, остальное - получасовые интервалы на месяц, если я правильно понял).
Например, они называются "Дата, Период1...Период62)
2. обходим табличную часть документа
и в цикле заполняем ТЗ данными :
ТЗ.НоваяСтрока();
ТЗ.Дата =
По времени определяем номер колонки N (Например, 23.00 - 47 колонка, N = 47)
Номер колонки = "Период"+СОКРЛ(Строка(N))
ТЗ.УстановитьЗначение(<Номер строки в документе>,Номер колонки,<Данные>);
Сложность с переходом на новую дату придется решить самостоятельно
Получится обычная прямоугольная таблица, в которой заполнены и пустые клетки.
Далее выводим ее на печать линейно
И рисуем таблицу с 63-мя колонками... Не нравится мне такое решение.
 
V

vbs

И рисуем таблицу с 63-мя колонками... Не нравится мне такое решение.
А где рисование ?
Внутри формируем цикл и "рисуем"(создаем ТЗ) с помощью метода "УстановитьПараметрыКолонки" - всего-то три строчки.
Зато получим прямоугольную пустографку с отдельными заполненными позициями, при выводе которой на печать
думать вообще не надо
 
U

unknown181538

А где рисование ?
Внутри формируем цикл и "рисуем"(создаем ТЗ) с помощью метода "УстановитьПараметрыКолонки" - всего-то три строчки.
Зато получим прямоугольную пустографку с отдельными заполненными позициями, при выводе которой на печать
думать вообще не надо
По поводу ТЗ я так и понял.
А как будет выглядеть таблица печати? Ну та, которая вызывается методом "ИсходнаяТаблица".
 
V

vbs

А как будет выглядеть таблица печати? Ну та, которая вызывается методом "ИсходнаяТаблица".
Заголовок - как хотел автор. Строки - 63 колонки каждой строки ТЗ.
Ну, разумеется, и заголовок, и строки делаются одинаково, типа
Т.ВывестиСекцию("Дата"), а затем в цикле 62 раза (или меньше, по числу дней месяца)
Т.ПрисоединитьСекцию("Данные").
Впрочем, что я грамотному человеку объясняю, скорее, это для задавшего вопрос :rolleyes:
Я по такому образцу делаю шахматки, анализ динамики продаж (по горизонтали периоды, по вертикали - товары, к примеру) и прочие прямоугольные шалости.
Проще, мне кажется, при заполнении ТЗ проявить некую гибкость ума, нежели при выводе на печать соображать, вывести или присоединить секцию (или присоединять пустую !)
 
U

unknown181538

А, понял, "переворачивание" просто в другой момент. Против этого ничего не имею :rolleyes:
Проще, мне кажется, при заполнении ТЗ проявить некую гибкость ума, нежели при выводе на печать соображать, вывести или присоединить секцию (или присоединять пустую !)
Ну, дело вкуса, я бы не стал лишнюю таблицу создавать.

Добавлено: PS.Опять мы не спим глубокой ночью)
Сижу к специалисту по 8.2 готовлюсь (после завтра идти проваливаться)... суровый спец - надо решение знать заранее, и печатать с нехилой скоростью. :ph34r:
 
K

KiR

Добавлено: PS.Опять мы не спим глубокой ночью)
Сижу к специалисту по 8.2 готовлюсь (после завтра идти проваливаться)... суровый спец - надо решение знать заранее, и печатать с нехилой скоростью. :ph34r:
Желаю удачи!!!

Сори за :rolleyes:
 
U

unknown181538

Так же ж "послезавтра", на данный момент, только завтра. Правда, как я его написал раздельно, так это уже не "послезавтра", а "завтра", а точнее то, что после него... и это может все спутать)
По результатом отпишусь :)
 
V

vbs

Так же ж "послезавтра", на данный момент, только завтра. Правда, как я его написал раздельно, так это уже не "послезавтра", а "завтра",
Ни фига не понял изначально, но каламбуры приветствую по жизни.
Great success to you
 
U

unknown181538

Не вышло)
Запнулся на регистре расчета, который упорно не хотел видеть свою базу. Хотя можно было и пропустить это, т.к. смотрят обычно только код. Еще и с демоническим списком не разобрался.
Впрочем, если бы все получалось, по времени вполне успевал. Так что еще поготовиться, и буду настроен на успех)
Экзамен, пожалуй, самый сложный из всех, которые сдавал. Требует обширных знаний, правда, не нужно знать предметную область. Зато, и самый полезный - много узнал при подготовке, и почти нет задач с непонятными условиями.

;) Где же автор темы со своими ячейками?)
 
V

vbs

Я понимаю, что корочка - это солидно, но что она дает в финансовом плане ?
 
U

unknown181538

Я его регистрирую на один франч - он мне заплатит)
Плюс - когда работал во франче, получал с корочек неплохие бонусы. Добавляет солидности к резюме.
И в процессе подготовки набираешься некоторых знаний.
 
V

vbs

И в процессе подготовки набираешься некоторых знаний.
Вот это кажется наиболее существенным.
Добавляет солидности к резюме.
Ну, для молодых, видимо важно.
Я-то бросил эту затею с получением сертификата со времен разросшегося потока клиентов - 10-й год уже во фрилансерах,
а заказчику результат нужен, а не наличие корочек. К тому же у нас для получения сертификата нужны были солидные вложения - порядка $1.5-2K,
а деньги всегда жалко на ветер бросать, вот бездипломным и хожу с тех пор
Я его регистрирую на один франч - он мне заплатит)
А это просто (видимо, по скудоумию) не понял
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!