8.х Проблема с выводом в макет печатной формы

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем Firik, 18 апр 2013.

  1. TopicStarter Overlay
    Firik
    Offline

    Firik

    Регистрация:
    17 апр 2013
    Сообщения:
    10
    Симпатии:
    0
    Баллы:
    1
    Имеется документ с ТЧ,в которой указывается в какую смену,в какой месяц и где проводилась тренировка. Смен может быть несколько одинаковых,соответственно и записей с ними будет несколько.
    Задача = для каждой НЕПОВТОРЯЮЩЕЙСЯ смены вывести записи месяца и места тренировки НА ОДНОЙ СТРОКЕ.
    Натолкните на мысль пожалуйста господа товарищи граждане.ломаю мозг уже давно,а решения все нет.пробовал реализовать через таблицу значений,пробовал простым методом в лоб. Но что то где то упускаю.
  2. nickpugachev
    Offline

    nickpugachev Профессионал в 1С Команда форума

    Регистрация:
    28 май 2012
    Сообщения:
    3.266
    Симпатии:
    131
    Баллы:
    104
    ну если лобовым способом, то
    1. выгружаем из ТЧ данные в таблицу значений.
    2. сворачиваем полученную ТЗ по сменам, в результате у нас в ТЗ список всех различных смен в ТЧ
    3. проходим циклом по получившейся свернутой ТЗ, выводим в отчет смену. чтобы выбрать месяцы и места тренировок пользуемся методом НайтиСтроки у ТЧ
    примерно так:
    Код:
    ТЗ = ТЧ.Выгрузить();
    ТЗ.Свернуть("Смена");
    Для Каждого СтрокаТЗ Из ТЗ Цикл
    // здесь выводим смену (ТЗ.Смена)
    СтрокиМесяцевМест = ТЧ.НайтиСтроки(Новый Структура("Смена", ТЗ.Смена));
    // теперь выводим месяцы и места
    Для Каждого СтрокаМесяцевМест Из СтрокиМесяцевМест Цикл
    // здесь выводим очерезные месяц/место
    КонецЦикла;
    КонецЦикла
  3. TopicStarter Overlay
    Firik
    Offline

    Firik

    Регистрация:
    17 апр 2013
    Сообщения:
    10
    Симпатии:
    0
    Баллы:
    1
    Код:
    ТЧ = ДанныеПечати.Подразделения;
    ТЗ = ТЧ.Выгрузить();
    ТЗ.Свернуть("Смена");
    
    Для Каждого СтрокаТЗ Из ТЗ Цикл
    Номер = 1;
    ОбластьПерваяСтрока.Параметры.Смена = СтрокаТЗ.Смена;
    СтрокиМесяцевМест = ТЗ.НайтиСтроки(Новый Структура("Смена", СтрокаТЗ.Смена));
    ОбластьПерваяСтрока.Параметры.ВсегоСмена = Номер;	
    Для Каждого СтрокаМесяцевМест Из СтрокиМесяцевМест Цикл
    Номер = Номер + 1;
    ОбластьПерваяСтрока.Параметры.ВсегоСмена = Номер;
    ОбластьПерваяСтрока.Параметры.Цеховые = СтрокаТЗ.Цеховые;
    ОбластьПерваяСтрока.Параметры.Объектовые = СтрокаТЗ.Объектовые;
    ОбластьПерваяСтрока.Параметры.Совместные = СтрокаТЗ.Совместные;
    ТабличныйДокумент.Вывести(ОбластьПерваяСтрока);
    КонецЦикла;
    КонецЦикла;
    
    Выводит только по дной строке для каждой смены.Забыл добавить. В таблице 3 колонки - Цеховые, объектовые и совместные.требуется для каждой смены вывести все записи с ней для каждого вида тренировки на одной строке.то есть смена например Дневная и для нее все записи на одной строке должны быть. Данный код выше выводит каждую смена,но только с одной записью.
  4. TopicStarter Overlay
    Firik
    Offline

    Firik

    Регистрация:
    17 апр 2013
    Сообщения:
    10
    Симпатии:
    0
    Баллы:
    1
    соврал.код выше не работает, должно быть
    Код:
    ОбластьПерваяСтрока.Параметры.Цеховые = ТекстСтрокиЦех;
    ОбластьПерваяСтрока.Параметры.Объектовые = ТекстСтрокиОб;
    ОбластьПерваяСтрока.Параметры.Совместные = ТекстСтрокиСов;
    
  5. nickpugachev
    Offline

    nickpugachev Профессионал в 1С Команда форума

    Регистрация:
    28 май 2012
    Сообщения:
    3.266
    Симпатии:
    131
    Баллы:
    104
    лучше покажите какие реквизиты в ТЧ и как должен выглядеть отчет (картинкой)
  6. TopicStarter Overlay
    Firik
    Offline

    Firik

    Регистрация:
    17 апр 2013
    Сообщения:
    10
    Симпатии:
    0
    Баллы:
    1

    Вложения:

  7. Tiger86
    Offline

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

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    Код:
    ТЧ = ДанныеПечати.Подразделения;
    ТЗ = ТЧ.Выгрузить();
    ТЗ.Свернуть("Смена");
    
    Для Каждого СтрокаТЗ Из ТЗ Цикл
    Номер = 1;
    ОбластьПерваяСтрока.Параметры.Смена = СтрокаТЗ.Смена;
    СтрокиМесяцевМест = ТЗ.НайтиСтроки(Новый Структура("Смена", СтрокаТЗ.Смена));
    Для Каждого СтрокаМесяцевМест Из СтрокиМесяцевМест Цикл
    
    Цеховые = Цеховые + Символы.ПС + СтрокаМесяцевМест.Цеховые;
    Объектовые = Объектовые + Символы.ПС + СтрокаМесяцевМест.Объектовые;
    Совместные = Совместные + Символы.ПС + СтрокаМесяцевМест.Совместные;
    
    Номер = Номер + 1;
    КонецЦикла;
    
    ОбластьПерваяСтрока.Параметры.ВсегоСмена = Номер;
    ОбластьПерваяСтрока.Параметры.Цеховые = Цеховые;
    ОбластьПерваяСтрока.Параметры.Объектовые = Объектовые;
    ОбластьПерваяСтрока.Параметры.Совместные = Совместные;
    
    ТабличныйДокумент.Вывести(ОбластьПерваяСтрока);
    КонецЦикла;
    
    может как-то так?
  8. TopicStarter Overlay
    Firik
    Offline

    Firik

    Регистрация:
    17 апр 2013
    Сообщения:
    10
    Симпатии:
    0
    Баллы:
    1
    {Документ.ГрафикПодготовок.МодульМенеджера(325)}: Поле объекта не обнаружено (Цеховые)
    Цеховые = "" + Цеховые + Символы.ПС + СтрокаМесяцевМест.Цеховые;
  9. nickpugachev
    Offline

    nickpugachev Профессионал в 1С Команда форума

    Регистрация:
    28 май 2012
    Сообщения:
    3.266
    Симпатии:
    131
    Баллы:
    104
    Код:
    ТЧ = ДанныеПечати.Подразделения;
    ТЗ = ТЧ.Выгрузить();
    ТЗ.Свернуть("Смена");
    Для Каждого СтрокаТЗ Из ТЗ Цикл
    Номер = 1;
    ОбластьПерваяСтрока.Параметры.Смена = СтрокаТЗ.Смена;
    СтрокиМесяцевМест = ТЗ.НайтиСтроки(Новый Структура("Смена", СтрокаТЗ.Смена));
    Цеховые = "";
    Объектовые = "";
    Совместные = "";
    Всего = 0;
    Для Каждого СтрокаМесяцевМест Из СтрокиМесяцевМест Цикл
    Если СтрокаМесяцевМест.ВидТренировки="Цеховые" Тогда
    Цеховые = Цеховые + Символы.ПС + СтрокаМесяцевМест.Месяц+" "+СтрокаМесяцевМест.МестоПроведения;
    ИначеЕсли СтрокаМесяцевМест.ВидТренировки="Объектовые" Тогда
    Объектовые = Объектовые + Символы.ПС + СтрокаМесяцевМест.Месяц+" " + СтрокаМесяцевМест.МестоПроведения;
    ИначеЕсли СтрокаМесяцевМест.ВидТренировки="Совместные" Тогда
    Совместные = Совместные + Символы.ПС +  СтрокаМесяцевМест.Месяц+" "+СтрокаМесяцевМест.МестоПроведения;
    КонецЕсли;
    Всего = Всего + 1;
    КонецЦикла;
    ОбластьПерваяСтрока.Параметры.ВсегоСмена = Всего;
    ОбластьПерваяСтрока.Параметры.Цеховые = Цеховые;
    ОбластьПерваяСтрока.Параметры.Объектовые = Объектовые;
    ОбластьПерваяСтрока.Параметры.Совместные = Совместные;
    ТабличныйДокумент.Вывести(ОбластьПерваяСтрока);
    КонецЦикла;
    естественно названия реквизитов ТЧ и значений в них - ваши
  10. Tiger86
    Offline

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

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    я опиралась на ваш код, посмотрите на названия колонок, наверняка они по другому просто называются
  11. TopicStarter Overlay
    Firik
    Offline

    Firik

    Регистрация:
    17 апр 2013
    Сообщения:
    10
    Симпатии:
    0
    Баллы:
    1
    В отладчике глянул - там всего одна колонка "Смена"
  12. Tiger86
    Offline

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

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    вот эту строку
    Код:
    трокиМесяцевМест = ТЗ.НайтиСтроки(Новый Структура("Смена", СтрокаТЗ.Смена));
    на вот эту замените и должно быть нормально
    Код:
    трокиМесяцевМест = ТЧ.НайтиСтроки(Новый Структура("Смена", СтрокаТЗ.Смена));
  13. TopicStarter Overlay
    Firik
    Offline

    Firik

    Регистрация:
    17 апр 2013
    Сообщения:
    10
    Симпатии:
    0
    Баллы:
    1
    Метод объекта не обнаружен (НайтиСтроки)

    Код:
    ТЧ = ДанныеПечати.Подразделения;
    ТЗ = ТЧ.Выгрузить();
    ТЗ.Свернуть("Смена");
    в ТЧ есть все колонки, а вот когда выгружаешь в ТЗ то выгружается только колонка "Смена".почему?
  14. Tiger86
    Offline

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

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    вот вместо этого сделайте так
    Код:
    ТЧ = ДанныеПечати.Подразделения.Выгрузить();
    ТЗ = ТЧ.Скопировать();
    ТЗ.Свернуть("Смена");
    и ту строку оставьте с ТЧ, а не ТЗ
  15. TopicStarter Overlay
    Firik
    Offline

    Firik

    Регистрация:
    17 апр 2013
    Сообщения:
    10
    Симпатии:
    0
    Баллы:
    1
    Так, с колонками разобрался. Нужно было не
    Код:
    ТЗ.Свернуть("Смена")
    , а
    Код:
     ТЗ.Свернуть("Смена", "ВидТренировки, МесяцПроведения, Местопроведения")
    Осталось разобратся почему не выводятся данные в строки.
  16. Tiger86
    Offline

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

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    второй параметр функции Свернуть - это агрегируемые колонки, вам же не надо значения сворачивать... чем вам мой вариант не понравился? или не работает?

    а данные скорее всего ен выводяться, потому как после Свернуть агрегируемые колонки остаются пустыми, хотя не проверяла на примере
  17. TopicStarter Overlay
    Firik
    Offline

    Firik

    Регистрация:
    17 апр 2013
    Сообщения:
    10
    Симпатии:
    0
    Баллы:
    1
    При вашем варианте после сворачивания колонки "Смена" куда о пропадали остальные 3...почему даже представить не могу, но отладчик есть отладчик:)
  18. nickpugachev
    Offline

    nickpugachev Профессионал в 1С Команда форума

    Регистрация:
    28 май 2012
    Сообщения:
    3.266
    Симпатии:
    131
    Баллы:
    104
    если свернуть с русурсными колонками - то в них каша будет, а не данные, если там не числовые данные
    тигра правильно показала, что нужно
    в ТЗ данные сворачиваются просто для того, чтобы получить список различных смен.

    строки с данными для колонок уже формируются перебором найденных по смене строк, просто смотрите на вид тренировки и в зависимости от него к нужной колонке добавляете текст
  19. TopicStarter Overlay
    Firik
    Offline

    Firik

    Регистрация:
    17 апр 2013
    Сообщения:
    10
    Симпатии:
    0
    Баллы:
    1
    Огромное спасибо за помощь!:) Таки заставил заработать:)
    Исходный код
    Код:
    ОбластьПерваяСтрока = Макет.ПолучитьОбласть("Таблица");
    ОбластьСледующиеСтроки = Макет.ПолучитьОбласть("Следующее");
    ДанныеСмены = ДанныеПечати.Подразделения.Выбрать();
    
    ТЧ = ДанныеПечати.Подразделения.Выгрузить();
    ТЗ = ТЧ.Скопировать();
    ТЗ.Свернуть("Смена", "ВидТренировки, МесяцПроведения, Местопроведения");
    
    Для Каждого СтрокаТЗ Из ТЗ Цикл
    ОбластьПерваяСтрока.Параметры.Смена = СтрокаТЗ.Смена;
    СтрокиМесяцевМест = ТЧ.НайтиСтроки(Новый Структура("Смена", СтрокаТЗ.Смена));
    Всего = 0;
    Цеховые = "";
    Объектовые = "";
    Совместные = "";
    Для Каждого СтрокаМесяцевМест Из СтрокиМесяцевМест Цикл
    Если ДанныеПечати.ВидПодготовки = Справочники.ФормыРаботыСПерсоналом.ПротивопожарнаяТренировка Тогда
    Если СтрокаМесяцевМест.ВидТренировки = Справочники.ФормыРаботыСПерсоналом.Цеховые Тогда
    Цеховые = СокрЛП("" + Цеховые+ Символы.ПС + Строка(ФункцииДляСКД.ПолучитьКвартал(СтрокаМесяцевМест.МесяцПроведения)) + "(" + Строка(СтрокаМесяцевМест.МестоПроведения)+")");
    ИначеЕсли СтрокаМесяцевМест.ВидТренировки = Справочники.ФормыРаботыСПерсоналом.Объектовые Тогда
    Объектовые = СокрЛП("" + Объектовые+ Символы.ПС + Строка(ФункцииДляСКД.ПолучитьКвартал(СтрокаМесяцевМест.МесяцПроведения)) + "(" + Строка(СтрокаМесяцевМест.МестоПроведения)+")");
    ИначеЕсли СтрокаМесяцевМест.ВидТренировки = Справочники.ФормыРаботыСПерсоналом.Совместные Тогда
    Совместные = СокрЛП("" + Совместные+ Символы.ПС + Строка(ФункцииДляСКД.ПолучитьКвартал(СтрокаМесяцевМест.МесяцПроведения)) + "(" + Строка(СтрокаМесяцевМест.МестоПроведения)+")");
    КонецЕсли;
    ИначеЕсли  ДанныеПечати.ВидПодготовки = Справочники.ФормыРаботыСПерсоналом.ПротивоаварийнаяТренировка Тогда
    Если СтрокаМесяцевМест.ВидТренировки = Справочники.ФормыРаботыСПерсоналом.ЦеховыеПротивоаварийные Тогда
    Цеховые = СокрЛП("" + Цеховые+ Символы.ПС + Строка(ФункцииДляСКД.ПолучитьКвартал(СтрокаМесяцевМест.МесяцПроведения)) + "(" + Строка(СтрокаМесяцевМест.МестоПроведения)+")");
    ИначеЕсли СтрокаМесяцевМест.ВидТренировки = Справочники.ФормыРаботыСПерсоналом.ОбъектовыеПротивоаварийные Тогда 
    Объектовые = СокрЛП("" + Объектовые+ Символы.ПС + Строка(ФункцииДляСКД.ПолучитьКвартал(СтрокаМесяцевМест.МесяцПроведения)) + "(" + Строка(СтрокаМесяцевМест.МестоПроведения)+")");
    ИначеЕсли СтрокаМесяцевМест.ВидТренировки = Справочники.ФормыРаботыСПерсоналом.СовместныеПротивоаварийные Тогда
    Совместные= СокрЛП("" + Совместные+ Символы.ПС + Строка(ФункцииДляСКД.ПолучитьКвартал(СтрокаМесяцевМест.МесяцПроведения)) + "(" + Строка(СтрокаМесяцевМест.МестоПроведения)+")");
    КонецЕсли;   
    КонецЕсли;
    Всего = Всего + 1;
    КонецЦикла;
    ОбластьПерваяСтрока.Параметры.ВсегоСмена = Всего;
    ОбластьПерваяСтрока.Параметры.Цеховые = Цеховые;
    ОбластьПерваяСтрока.Параметры.Объектовые = Объектовые;
    ОбластьПерваяСтрока.Параметры.Совместные = Совместные;
    ТабличныйДокумент.Вывести(ОбластьПерваяСтрока);
    КонецЦикла;

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