Имя: Пароль:
1C
1С v8
Вывод табличнойчасти документа в печатную форму Word
,
0 v1t0s
 
27.08.14
09:45
Доброго времени суток, Уважаемые! Столкнулся со следующей задачей: в печатную форму Word (Active Document) необходимо вывести список номенклатуры из табличной части документа РеализацияТоваровИУслуг (УТ 10.3). Если в табличной части присутствует несколько позиций номенклатуры, то выводится лишь последняя. Как организовать цикл, в котором будут выводится все позиции номенклатуры из ТЧ документа в Word?

Привожу кусок кода:

Запрос = новый запрос;
     Запрос.УстановитьПараметр("Ссылка",СсылкаНаОбъект);
     Запрос.Текст =                  
     "ВЫБРАТЬ
     |    РеализацияТоваровУслугТовары.Номенклатура КАК Номенклатура
     |ИЗ
     |    Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
     |ГДЕ
     |    РеализацияТоваровУслугТовары.Ссылка = &Ссылка
     |
     |СГРУППИРОВАТЬ ПО
     |    РеализацияТоваровУслугТовары.Номенклатура
     |{УПОРЯДОЧИТЬ ПО
     |    РеализацияТоваровУслугТовары.НомерСтроки}
     |ИТОГИ ПО
     |    Номенклатура";
     Выборка = Запрос.Выполнить().Выбрать();
Замена = Документ.Content.Find;
Замена.Execute("[Nomenklatura]", Ложь, Истина, Ложь,,,Истина,,Ложь,Строка(Выборка.Номенклатура),2);
1 mehfk
 
27.08.14
09:47
Использовать цикл пока Выборка.Следующий() цикл
2 v1t0s
 
27.08.14
09:49
Т.е. :

Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Замена.Execute("[Nomenklatura]", Ложь, Истина, Ложь,,,Истина,,Ложь,Строка(Выборка.Номенклатура),2);
КонецЦикла;
3 v1t0s
 
27.08.14
09:49
Так?
4 mehfk
 
27.08.14
09:49
Чуть не забыл, могу подсказать кто занедорого продаст СП.
5 v1t0s
 
27.08.14
09:53
Предложенный метод с Пока Выборка.Следующий() Цикл не работает. Все равно выводится последняя позиция из ТЧ документа. Я так понимаю, что нужно как-то обращаться к ТЧ документа и в цикле добавлять строку, если там не одна позиция, контролируя количество позиций. Но как это сделать,пока не знаю?))
6 Jokero
 
27.08.14
09:55
Тебе табличку нужно создавать в самом ворде и добавлять строчки в нее при каждом витке цикла
7 v1t0s
 
27.08.14
09:56
Не подскажете как именно? я совсем недавно только с Active Document начал работать, для меня это темный лес. Буду очень признателен.
8 Jokero
 
27.08.14
10:01
//Выбираем первую таблицу в макете
ВордТаблица1 = Word.ActiveDocument.Tables(1);
i = 1;

Пока ВыборкаТоваров.Следующий() Цикл
//Заполняем первую строку
  Колонка = ВордТаблица1.Cell(i,1).Range;
  Колонка.Text = ВыборкаТоваров.НомерСтроки;
                
  Колонка = ВордТаблица1.Cell(i,2).Range;
  Колонка.Text = ВыборкаТоваров.Номенклатура;
                
  i=i+1;
  //добавляем строку
  ВордТаблица1.Rows.Add();
КонецЦикла;

как-то так
9 v1t0s
 
27.08.14
10:02
Благодарю, сейчас поколдую ;)
10 v1t0s
 
27.08.14
16:25
Все, роды приняты успешно))) Конечный и работающий вариант в моем случае выглядит так:
  Запрос = новый запрос;
     Запрос.УстановитьПараметр("Ссылка",СсылкаНаОбъект);
     Запрос.Текст =                  
     "ВЫБРАТЬ
     |    РеализацияТоваровУслугТовары.Номенклатура КАК Номенклатура,
     |    РеализацияТоваровУслугТовары.НомерСтроки КАК НомерСтроки
     |ИЗ
     |    Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
     |ГДЕ
     |    РеализацияТоваровУслугТовары.Ссылка = &Ссылка
     |
     |СГРУППИРОВАТЬ ПО
     |    РеализацияТоваровУслугТовары.Номенклатура,
     |    РеализацияТоваровУслугТовары.НомерСтроки
     |
     |УПОРЯДОЧИТЬ ПО
     |    НомерСтроки";
     Выборка = Запрос.Выполнить().Выгрузить();
      //Выбираем первую таблицу в макете

        ВордТаблица1 = Документ.Tables(1);
        i = 1;

        //Пока Выборка Цикл
        //Заполняем первую строку
                
        Для каждого НомерСтроки из Выборка Цикл
        
        КолонкаН = ВордТаблица1.Cell(i,1).Range;
        КолонкаН.Text = Строка(НомерСтроки.НомерСтроки);
                
        Колонка = ВордТаблица1.Cell(i,2).Range;
        Колонка.Text = Строка(НомерСтроки.Номенклатура);
                
          i=i+1;
          //добавляем строку

          ВордТаблица1.Rows.Add();
        КонецЦикла;

Всем спасибо за помощь!
11 Jokero
 
28.08.14
09:04
Поздравляю))
з.ы.
На экзамене за

Выборка = Запрос.Выполнить().Выгрузить();
Для каждого НомерСтроки из Выборка Цикл
КонецЦикла;

Вам бы снизили оценку
Выгрузка результата запроса в промежуточную таблицу (например, в таблицу значений) без необходимости". Минус 1 балл.

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