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

Вывод в табличный документ

Автор Fedor_Safonchik, 22 июл 2016, 14:34

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

Fedor_Safonchik

Цитата: cska-fanat-kz от 23 июл 2016, 07:37
у вас в контактной информации оператора всегда одна строка?
если да, то соединяйте "...ПО ИСТИНА"

Нет, там может быть и одна и две и не одной

Тут просто логика такая,
Есть ДВЕ таблицы с данными, каждая таблица содержит (ФИО, Телефон, Email), таблицы не связаны между собой,

Необходимо в одну область вывести все полученные данные из запроса, (полученные данные запросом смотрите ниже)

Следовательно каждый проход цикла заполнит мне печ. форму, скрин в сообщениях выше,

Вопрос: что можно сделать, чтоб за один проход цикла заполнялись все поля области печ. формы

Спасибо

Добавлено: 25 июл 2016, 14:30


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

На всякий случай, может поможет кому-то, скрины области и описание данных можно найти в теме, а код ниже

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

ilnur75

а что не сделали так как я посоветовал, в том что было удалить 2 строки и добавить 7 строк.
не поленились, переписали!

Fedor_Safonchik

Цитата: ilnur75 от 25 июл 2016, 17:26
а что не сделали так как я посоветовал, в том что было удалить 2 строки и добавить 7 строк.
не поленились, переписали!
Я сделал, но программа все равно за один проход цикла не заполняла все 6 полей, а только 3, и выводила область и получается 4 области, а должно быть 2 по логике,

Цитата: ilnur75 от 25 июл 2016, 17:26не поленились, переписали!
Иначе просто выхода не было, для решения данной задачи))

ilnur75

Цитата: ilnur75 от 23 июл 2016, 22:552. необходимо на макете вручную откорректировать или по-новому создать область расположения полученных запросом данных.
такое ощущение, что это не делали.
данные Вы выводите строкой, если несколько абонентов то будет список,
в общем не так, как в первом посте.

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

Рейтинг@Mail.ru

Поиск