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

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 7.7"", создана пользователем deepblack, 7 дек 2010.

  1. TopicStarter Overlay
    deepblack
    Offline

    deepblack

    Регистрация:
    1 дек 2010
    Сообщения:
    4
    Симпатии:
    0
    Баллы:
    1
    Доброго дня!

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

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

    1. Сформированная таблица значений выглядит следующим образом Посмотреть вложение 5982
    2. Необходимо получить вывод на печать таблицы следующего вида Посмотреть вложение 5983

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

    Вложения:

    • табл1.JPG
      табл1.JPG
      Размер файла:
      25,2 КБ
      Просмотров:
      61
    • табл2.JPG
      табл2.JPG
      Размер файла:
      35,8 КБ
      Просмотров:
      84
  2. WaRDeR
    Offline

    WaRDeR Модераторы Команда форума Модератор

    Регистрация:
    23 ноя 2006
    Сообщения:
    3.263
    Симпатии:
    14
    Баллы:
    29
    Нужно не слезно просить, а озвучить сумму вознаграждения. Тогда и желающие найдутся
  3. TopicStarter Overlay
    deepblack
    Offline

    deepblack

    Регистрация:
    1 дек 2010
    Сообщения:
    4
    Симпатии:
    0
    Баллы:
    1
    ну я даже и незнаю)) кто сколько?
  4. Хряк
    Offline

    Хряк Профессионал в 1С

    Регистрация:
    26 сен 2007
    Сообщения:
    1.447
    Симпатии:
    37
    Баллы:
    54
    скрин документа
  5. TopicStarter Overlay
    deepblack
    Offline

    deepblack

    Регистрация:
    1 дек 2010
    Сообщения:
    4
    Симпатии:
    0
    Баллы:
    1

    Вложения:

  6. dedalx7
    Offline

    dedalx7 Опытный в 1С

    Регистрация:
    20 май 2009
    Сообщения:
    97
    Симпатии:
    0
    Баллы:
    26
    *влезает без спросу и портит всем малину, заодно выставляя себя истинным быдлокодером*

    Испытывая стремную любовь к многомерным массивам и часто ненужным циклам - вижу код таким:

    Код:
    Перем ТабЗнач, ТабВывода; 
    
    //******************************************* 
    Процедура ВыбратьСтрокуТабВывод(ДатаВыбора) 
    
    Перем ТабСтр;
    
    Если ТабВывода.НайтиЗначение(ДатаВыбора,ТабСтр,"ПечДата") = 1 Тогда
    ТабВывода.ПолучитьСтрокуПоНомеру(ТабСтр);
    Иначе
    ТабВывода.НоваяСтрока();
    ТабВывода.ПечДата = ДатаВыбора;
    ТабВывода.СпВремя = СоздатьОбъект("СписокЗначений");
    КонецЕсли;         
    КонецПроцедуры
    
    //*******************************************
    Процедура Печать()        
    
    Перем ПриходПериод, ОтходПериод, Период, ПечРабота;
    
    ТабЗнач = СоздатьОбъект("ТаблицаЗначений");
    ВыгрузитьТабличнуюЧасть("ТабЗнач");
    ТабЗнач.Сортировать("+ПриходДата,+ПриходЧасов,+ПриходМинут");
    
    ТабВывода = СоздатьОбъект("ТаблицаЗначений");
    ТабВывода.НоваяКолонка("ПечДата","Дата");
    ТабВывода.НоваяКолонка("СпВремя");    
    
    ТабЗнач.ВыбратьСтроки();
    Пока ТабЗнач.ПолучитьСтроку() = 1 Цикл 		
    ВыбратьСтрокуТабВывод(ТабЗнач.ПриходДата);		
    
    ПриходПериод = (ПриходЧасов*2) + (ПриходМинут/30);
    ОтходПериод = (ПриходЧасов*2) + (ПриходМинут/30);
    
    Если ТабЗнач.ПриходДата = ТабЗнач.ОтходДата Тогда 			
    Для Период = ПриходПериод По ОтходПериод Цикл
    ТабВывода.СпВремя.Установить(Период,ТабЗнач.ВидРабот);
    КонецЦикла;   
    
    Иначе    			
    Для Период = ПриходПериод По 48 Цикл
    ТабВывода.СпВремя.Установить(Период,ТабЗнач.ВидРабот);
    КонецЦикла;                    
    
    ВыбратьСтрокуТабВывод(ТабЗнач.ОтходДата);		
    
    Для Период = 1 По ОтходПериод Цикл
    ТабВывода.СпВремя.Установить(Период,ТабЗнач.ВидРабот);
    КонецЦикла; 			
    КонецЕсли;      		
    КонецЦикла;
    
    ТабВывода.Сортировать("+ПечДата");
    
    Таб = СоздатьОбъект("Таблица");
    Таб.ВывестиСекцию("Шапка");
    
    ТабВывода.ВыбратьСтроки();
    Пока ТабВывода.ПолучитьСтроку() = 1 <span style='cursor: pointer; color:red' Onclick="window.open('http://www.1c-pro.ru/wiki/index.php/цикл')">Цикл		</span>                                    
    Таб.ВывестиСекцию("Строка|Дата");
    Для Период = 1 По 48 Цикл                 
    ПечРабота = ТабВывода.СпВремя.Получить(Период);
    Таб.ПрисоединитьСекцию("Строка|Ячейка");			
    КонецЦикла;                                 		
    КонецЦикла;                                     
    
    Таб.Показать("Форма Номер такая-то");
    КонецПроцедуры
    
    
    Код не учитывает работ, длящихся более двух дней. Так что, окромя циклов и малевания таблицы - еще есть где развернутся(т.е. - добавить еще 1 условие и 1 цикл (в принципе, при таком построении картины, можно выделить еще одну отдельную процедуру) )

    Судите строго. Пожелания убиться об стенку и замечания по делу равно приветствуются.
  7. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Что-то мудрено у вас закручено... Зачем так стожно?
    В первом мосте почти все верно.
    1) Создали ТЗ. Колонки: Дата/Всего30Мин/ВР
    2) Выбрали стоки документа с расчетом:
    Код:
    ТЗ.Дата=ПриходДата;
    ТЗ.Всего30Мин=(ОтходДата-ПриходДата)*48+(ОтходЧасов-ПриходЧасов)*2+ОтходМинут-ПриходМинут;
    ТЗ.ВР=ВР;
    
    
    3) Далее сортируем...
    Код:
    ТЗ.Сортировать("Дата,Всего30Мин,ВР");
    
    
    Получили искомое.... Как разделить на часы и мин. думаю понятно
  8. dedalx7
    Offline

    dedalx7 Опытный в 1С

    Регистрация:
    20 май 2009
    Сообщения:
    97
    Симпатии:
    0
    Баллы:
    26
    1) ОтходМинут и ПриходМинут надо делить на 30 по-любому, ибо если один из них 30, а второй 0, то в вашей формуле к количеству 30-ти минутных периодов добавится не 1 а 30.

    2) При ТЗ с тремя предложенными колонками мы получим ту же таблицу что и в скриншоте формы документа: т.е. разделение по видам работ. В этой тз для каждой даты может быть более одной строки, и их все придется привести к какому-то виду перед печатью, снова вызывая строки документа, ища момент начала работ для каждой ВР.

    Именно этого я и пытался избежать в своем коде. В резутьтате его работы мы получим ТЗ в которой для каждой даты есть лишь одна строка, а виды работ уже рассортированы по сорока восьми 30-ти минутным периодам. Все готово к выводу на печать.

    Хотя ТабЗнач дейтвительно можно опустить. С тем же успехом можно перебирать строки самого документа.
  9. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    1) Абсолютно согласен - пропустил.
    2) Да для даты м.б. более одной строки - не вижу в чем проблема. В скриншоте так оно и есть. Зачем строки документа?
    3) Строки документа напрямую не получится, т.к. нужно же сортировать. Так что без ТЗ не получится

Поделиться этой страницей