8.х Группировка в запросе

Тема в разделе "Отчеты и обработки для "1С:Предприятие 8"", создана пользователем smitog, 5 окт 2011.

  1. TopicStarter Overlay
    smitog
    Offline

    smitog Опытный в 1С

    Регистрация:
    14 авг 2011
    Сообщения:
    52
    Симпатии:
    0
    Баллы:
    26
    Вообщем эта моя первая печатная форма! Задача стоит в том чтоб объединить две печатных формы в одну ("печатная форма для документа Задание" и "печатная форма для справочника Контрагенты") для конфигурации "Управление Торговли + CRM", большую часть задания я как бы сделал. Проблема стоит в том что у меня не получается вывести правильно контактных лиц контрагента(см. картинки), т.е. происходит повтор строк, знаю что надо группировкой и вложенным запросом сделать, но ни как не получается
    Код:
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
    |	КонтактныеЛицаКонтрагентов.КонтактноеЛицо КАК ФИО,
    |	КонтактныеЛицаКонтрагентов.Должность КАК Должность,
    |	КонтактнаяИнформация.Представление КАК КонтактнаяИнформацияК
    |ИЗ
    |	Справочник.КонтактныеЛицаКонтрагентов КАК КонтактныеЛицаКонтрагентов
    |		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КонтактнаяИнформация КАК          КонтактнаяИнформация
    |		ПО КонтактныеЛицаКонтрагентов.Ссылка = КонтактнаяИнформация.Объект
    |ГДЕ
    |	КонтактныеЛицаКонтрагентов.Владелец = &Ссылка";
    
    Запрос.УстановитьПараметр("Ссылка", СсылкаНаОбъект.Контрагент);
    
    Результат = Запрос.Выполнить();
    ВыборкаЧетвертая = Результат.Выбрать();
    
    Пока ВыборкаЧетвертая.Следующий()Цикл
    
    КонтактныеЛица.Параметры.Заполнить(ВыборкаЧетвертая);
    Табдок.Вывести(КонтактныеЛица);
    
    КонецЦикла;
    
    Запрос делаю из справочника "контактные лица и контрагенты" и регистра сведений "Контактная информация". Нужна ваша помощь!!

    Вложения:

  2. anyuta
    Offline

    anyuta Опытный в 1С

    Регистрация:
    22 июн 2011
    Сообщения:
    333
    Симпатии:
    0
    Баллы:
    26
    Ну как-то так:
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
    | КонтактныеЛицаКонтрагентов.КонтактноеЛицо КАК ФИО,
    | КонтактныеЛицаКонтрагентов.Должность КАК Должность,
    | КонтактнаяИнформация.Представление КАК КонтактнаяИнформацияК
    |ИЗ
    | Справочник.КонтактныеЛицаКонтрагентов КАК КонтактныеЛицаКонтрагентов
    | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация
    | ПО КонтактныеЛицаКонтрагентов.Ссылка = КонтактнаяИнформация.Объект
    |ГДЕ
    | КонтактныеЛицаКонтрагентов.Владелец = &Ссылка
    | ИТОГИ ПО КонтактныеЛицаКонтрагентов.КонтактноеЛицо,
    | КонтактныеЛицаКонтрагентов.Должность";


    И далее
    Выборка = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
    Информация = "";
    Пока Выборка.Следующий() Цикл
    КонтактноеЛицо = Выборка.ФИО;
    Должность = Выборка.Должность;
    ДетЗап = Выборка.Выбрать();
    Пока ДетЗап.Следующий() Цикл
    Информация = Информация + " " + ДетЗап.Представление;
    КонецЦикла;
    КонецЦикла;

    Вроде так!
  3. TopicStarter Overlay
    smitog
    Offline

    smitog Опытный в 1С

    Регистрация:
    14 авг 2011
    Сообщения:
    52
    Симпатии:
    0
    Баллы:
    26
    anyuta спасибо за помощь, но ваш вариант тоже не срабатывает! Буду дальше ковырять!
  4. anyuta
    Offline

    anyuta Опытный в 1С

    Регистрация:
    22 июн 2011
    Сообщения:
    333
    Симпатии:
    0
    Баллы:
    26
    А что конкретно не работает? У меня все замечательно отработало!
  5. TopicStarter Overlay
    smitog
    Offline

    smitog Опытный в 1С

    Регистрация:
    14 авг 2011
    Сообщения:
    52
    Симпатии:
    0
    Баллы:
    26
    Пишет:
    Не удалось сформировать внешнюю печатную форму!
    Поле объекта не обнаружено (Представление)
  6. anyuta
    Offline

    anyuta Опытный в 1С

    Регистрация:
    22 июн 2011
    Сообщения:
    333
    Симпатии:
    0
    Баллы:
    26
    А приведите полный код отчета, что конкретно пишете? Может, макет неправильно определили или еще что?
  7. TopicStarter Overlay
    smitog
    Offline

    smitog Опытный в 1С

    Регистрация:
    14 авг 2011
    Сообщения:
    52
    Симпатии:
    0
    Баллы:
    26
    Это полный код всей печатной формы
    Код:
    Функция Печать() Экспорт
    
    ТабДок = Новый ТабличныйДокумент;
    
    Макет = ПолучитьМакет("Задание");
    
    ОбластьВерхняя = Макет.ПолучитьОбласть("ВерхняяОбласть");
    Середина = Макет.ПолучитьОбласть("Середина");
    КонтактнаяИнформация = Макет.ПолучитьОбласть("КонтактнаяИнформация");
    КонтактныеЛица = Макет.ПолучитьОбласть("КонтактныеЛица");
    ВидыДеятельности = Макет.ПолучитьОбласть("ВидыДеятельности");
    
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
    |    франЗадание.Номер,
    |    франЗадание.Дата,
    |    франЗадание.Ответственный,
    |    франЗадание.КемВыдано,
    |    франЗадание.Трудоемкость,
    |    франЗадание.КрайнийСрок,
    |    франЗадание.Организация,
    |    франЗадание.Подразделение,
    |    франЗадание.Сотрудник,
    |    франЗадание.ТипЗадания,
    |    франЗадание.Контрагент,
    |    франЗадание.КонтактноеЛицо,
    |    франЗадание.Основание,
    |    франЗадание.Проект,
    |    франЗадание.Наименование,
    |    франЗадание.Содержание,
    |    франЗадание.КритерийВыполнения,
    |    франЗадание.ДатаКон,
    |    франЗадание.ДатаНач,
    |    франЗадание.Важность
    |ИЗ
    |    Документ.франЗадание КАК франЗадание
    |ГДЕ
    |    франЗадание.Ссылка = &Ссылка";
    
    
    Запрос.УстановитьПараметр("Ссылка", СсылкаНаОбъект);
    
    Результат = Запрос.Выполнить();
    Выборка = Результат.Выбрать();
    Выборка.Следующий();    
    ОбластьВерхняя.Параметры.Заполнить(Выборка);
    ТабДок.Вывести(ОбластьВерхняя);
    
    
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
    |    франЗадание.Контрагент.ИНН КАК ИНН,
    |    франЗадание.Контрагент.КПП КАК КПП,
    |    франЗадание.Контрагент.ОсновнойБанковскийСчет.Банк.Код КАК БИК,
    |    франЗадание.Контрагент.ОсновнойБанковскийСчет.НомерСчета КАК РасчетныйСчет,
    |    франЗадание.Контрагент.ОсновнойБанковскийСчет.Банк КАК Банк,
    |    франЗадание.Контрагент.ОсновнойБанковскийСчет.Наименование,
    |    франЗадание.Контрагент.НаименованиеПолное КАК НаименованиеПолное,
    |    франЗадание.Контрагент.ОсновнойБанковскийСчет.Банк.КоррСчет КАК КоррСчет,
    |    франЗадание.Контрагент.Наименование КАК НаименованиеК
    |ИЗ
    |    Документ.франЗадание КАК франЗадание
    |ГДЕ
    |    франЗадание.Ссылка = &Ссылка";
    Запрос.УстановитьПараметр("Ссылка", СсылкаНаОбъект);
    
    Результат = Запрос.Выполнить();
    ВыборкаВторая = Результат.Выбрать();
    ВыборкаВторая.Следующий();    
    Середина.Параметры.Заполнить(ВыборкаВторая);
    ТабДок.Вывести(Середина);
    
    
    
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
    |    КонтактнаяИнформация.Представление КАК КонтактнаяИнформация,
    |    КонтактнаяИнформация.Вид КАК Вид
    |ИЗ
    |    РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация
    |ГДЕ
    |    КонтактнаяИнформация.Объект = &Ссылка";
    
    
    Запрос.УстановитьПараметр("Ссылка", СсылкаНаОбъект.Контрагент);
    
    
    Результат = Запрос.Выполнить();
    ВыборкаТретья = Результат.Выбрать();
    
    Пока ВыборкаТретья.Следующий() Цикл
    
    КонтактнаяИнформация.Параметры.Заполнить(ВыборкаТретья);
    ТабДок.Вывести(КонтактнаяИнформация);
    
    КонецЦикла;
    
    
    
    //Запрос отвечающий за вывод контактных лиц контрагентов
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
    |    КонтактныеЛицаКонтрагентов.КонтактноеЛицо КАК ФИО,
    |    КонтактныеЛицаКонтрагентов.Должность КАК Должность,
    |    КонтактнаяИнформация.Представление КАК КонтактнаяИнформацияК
    |ИЗ
    |    Справочник.КонтактныеЛицаКонтрагентов КАК КонтактныеЛицаКонтрагентов
    |        ПОЛНОЕ СОЕДИНЕНИЕ РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация
    |        ПО КонтактныеЛицаКонтрагентов.Ссылка = КонтактнаяИнформация.Объект
    |ГДЕ
    |    КонтактныеЛицаКонтрагентов.Владелец = &Ссылка
    | ИТОГИ ПО КонтактныеЛицаКонтрагентов.КонтактноеЛицо, 
    | КонтактныеЛицаКонтрагентов.Должность";
    Запрос.УстановитьПараметр("Ссылка", СсылкаНаОбъект.Контрагент);
    
    Результат = Запрос.Выполнить();
    ВыборкаЧетвертая = Результат.Выбрать();
    
    Выборка = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
    Информация = "";
    Пока Выборка.Следующий() Цикл
    КонтактноеЛицо = Выборка.ФИО;
    Должность = Выборка.Должность;
    ДетЗап = Выборка.Выбрать();
    Пока ДетЗап.Следующий() Цикл
    Информация = Информация + " " + ДетЗап.Представление;
    КонецЦикла;
    КонецЦикла;
    
    
    //Пока ВыборкаЧетвертая.Следующий()Цикл
    //    
    //    КонтактныеЛица.Параметры.Заполнить(ВыборкаЧетвертая);
    //    Табдок.Вывести(КонтактныеЛица);
    //    
    //КонецЦикла;    
    
    //ВыборкаЧетвертая.Следующий();    
    //КонтактныеЛица.Параметры.Заполнить(ВыборкаЧетвертая);
    //ТабДок.Вывести(КонтактныеЛица);
    
    
    
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
    |    франЗадание.Контрагент.РасписаниеРаботыСтрокой КАК РасписаниеРаботы,
    |    франЗадание.Контрагент.ОсновнойВидДеятельности КАК ВидыДеятельности,
    |    франЗадание.Контрагент.Комментарий КАК Комментарий
    |ИЗ
    |    Документ.франЗадание КАК франЗадание
    |ГДЕ
    |    франЗадание.Ссылка = &Ссылка";
    
    Запрос.УстановитьПараметр("Ссылка", СсылкаНаОбъект);
    
    Результат = Запрос.Выполнить();
    ВыборкаПятая = Результат.Выбрать();
    ВыборкаПятая.Следующий();
    ВидыДеятельности.Параметры.Заполнить(ВыборкаПятая);
    ТабДок.Вывести(ВидыДеятельности);
    
    
    
    Возврат ТабДок;    
    
    КонецФункции
    
    
    В результате выводит:
    Не удалось сформировать внешнюю печатную форму!
    Поле объекта не обнаружено (Представление)

    Вложения:

    • Макет.JPG
      Макет.JPG
      Размер файла:
      109 КБ
      Просмотров:
      102
  8. anyuta
    Offline

    anyuta Опытный в 1С

    Регистрация:
    22 июн 2011
    Сообщения:
    333
    Симпатии:
    0
    Баллы:
    26
    Если внешний отчет, то вроде надо писать Макет = ОтчетОбъект.ПолучитьМакет("Задание");
  9. TopicStarter Overlay
    smitog
    Offline

    smitog Опытный в 1С

    Регистрация:
    14 авг 2011
    Сообщения:
    52
    Симпатии:
    0
    Баллы:
    26
    У меня не отчет а внешняя форма, а так как вы сказали то он ругается что:
    ВнешняяОбработка.ЗаданиеИКарточка.МодульОбъекта(5,10)}: Переменная не определена (ОтчетОбъект)
    Макет = <<?>>ОтчетОбъект.ПолучитьМакет("Задание"); (Проверка: Толстый клиент (обычное приложение))
  10. anyuta
    Offline

    anyuta Опытный в 1С

    Регистрация:
    22 июн 2011
    Сообщения:
    333
    Симпатии:
    0
    Баллы:
    26
    Тогда ОбработкаОбъект.ПолучитьМакет("Задание")....а вы пошагово проходились (ставили точку останова), на чем конкретно зависает?
  11. TopicStarter Overlay
    smitog
    Offline

    smitog Опытный в 1С

    Регистрация:
    14 авг 2011
    Сообщения:
    52
    Симпатии:
    0
    Баллы:
    26
    Если я ставлю ваш кусок кода то он выводит что:
    Не удалось сформировать внешнюю печатную форму!
    Поле объекта не обнаружено (Представление)
    И если я ставлю вместо Информация = Информация + " " + ДетЗап.Представление; Информация = Информация + " " + ДетЗап.КонтактнаяИнформацияК; то он не выводит мне вообще ни чего, ни кого.
  12. anyuta
    Offline

    anyuta Опытный в 1С

    Регистрация:
    22 июн 2011
    Сообщения:
    333
    Симпатии:
    0
    Баллы:
    26
    а зачем вы пишете
    первые 2 строки не нужно

    Вы даже не выводите Информацию, КонтактноеЛицо и Должность в макет

    Короче я написала простенький внешний отчет на 8.2., у меня все работает, может это вам поможет! Посмотреть вложение 8729

    Вложения:

  13. TopicStarter Overlay
    smitog
    Offline

    smitog Опытный в 1С

    Регистрация:
    14 авг 2011
    Сообщения:
    52
    Симпатии:
    0
    Баллы:
    26
    Спасибо вам и за отчет и за ответы, ладно буду сидеть ковырять сам, а то чувствую я вам надоел уже) Вообщем спасибо вам ДОБРЫЙ ЧЕЛОВЕК с меня шоколадка!!!!)
  14. anyuta
    Offline

    anyuta Опытный в 1С

    Регистрация:
    22 июн 2011
    Сообщения:
    333
    Симпатии:
    0
    Баллы:
    26
    Да, не за что! Просто у Вас отчет состоит из нескольких частей и сложно разобраться где не работает! Если что обращайтесь!

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