Имя: Пароль:
1C
Админ
Шаблон Ворд и 1С
,
0 Baf
 
30.04.12
01:13
пишу процедуру
Процедура ОсновныеДействияФормыПриказ(Кнопка)
    АктивныйДокумент = ПолучитьМакет("Макет");
    КомОбъект = АктивныйДокумент.Получить();
     КомОбъект.Application.Visible=1;
   Запрос = Новый Запрос;
   Запрос.Текст =
           "ВЫБРАТЬ
           |    ГруппыТабличнаяЧасть.НомерСтроки КАК НомерСтроки,
           |    ГруппыТабличнаяЧасть.Курсант,
           |    ГруппыТабличнаяЧасть.ДатаРождения
           |ИЗ
           |    Документ.Группы.ТабличнаяЧасть КАК ГруппыТабличнаяЧасть
           |
           |УПОРЯДОЧИТЬ ПО
           |    НомерСтроки
           |АВТОУПОРЯДОЧИВАНИЕ";
           Запрос.УстановитьПараметр("Группа", Группа);
   Выборка = Запрос.Выполнить().Выбрать();
    Пока Выборка.Следующий() Цикл
       
   Пока Выборка.Следующий() Цикл
       
       КомОбъект.Bookmarks(СокрЛП("Номер")).Select();
       КомОбъект.Application.Selection.TypeText(СокрЛП(Выборка.НомерСтроки));
        КомОбъект.Bookmarks(СокрЛП("Курсант")).Select();
        КомОбъект.Application.Selection.TypeText(СокрЛП(Выборка.Курсант));
         КомОбъект.Bookmarks(СокрЛП("ДатаРождения")).Select();
        КомОбъект.Application.Selection.TypeText(СокрЛП(Формат(Выборка.ДатаРождения, "ДФ=dd.MM.yyyy")));    
    КонецЦикла;

КонецПроцедуры


и заполняются только первые строки...а надо чтоб заполнялись все...помогите советом как вывести всё
1 Torquader
 
30.04.12
01:18
Ну если для каждой строки выборки вы пишете в одни и те же строки, то ничего удивительного в этом нет.
2 Baf
 
30.04.12
01:24
а как тогда нужно написать? просто задача такая - вывести нескольких сотрудников в один вордовский документ. Мой запрос выводит 28 сотрудников, в в ворд попадает только 1 - первый.Как быть в этом случае?может подскажешь?
3 Baf
 
30.04.12
01:25
я вот что думал, после каждой ФИО выводить какойто разделитель страниц или что то в этом роде, а как вывести голова уже закипает от этого вопроса
4 Torquader
 
30.04.12
01:29
А почему мы это делаем через закладки, а не добавляем строку, скажем в таблицу.
Да и через Selection (то есть выделение) работать как-то некошерно.
Нужно открыть Word включить запись макроса и вручную добавить строку с данными потом выключить запись и посмотреть на полученный макрос - сразу станет ясно, как это нужно делать.
5 Anton_2011
 
30.04.12
02:29
Нужно удалить 1С и Майкрософт Оффице с компьютера. И Виндоус. И поставить Генту. Ну или Убунту, если лень или МНУ не работает как нужно.
6 Stim
 
30.04.12
09:04
я делал, что добавлялись строки и заполнялись. позже найду
7 Baf
 
30.04.12
09:11
Дело еще в том что это не таблица.  Stim найди плиз, ну вобще никак не получается.
8 kod263
 
30.04.12
11:06
в Макет добавить таблицу из одной строки и трех колонок
Табл = КомОбъект.Tables.Item(1);
ин = 0;
Пока Выборка.Следующий() Цикл
 ин = ин + 1;
 Если ин > 1 Тогда
   Табл.Rows.add();
 КонецЕсли;
 Табл.Cell(ин,1).Select();
 КомОбъект.ActiveWindow.ActivePane.Selection.TypeText(Выборка.Номер);
 Табл.Cell(ин,2).Select();
 КомОбъект.ActiveWindow.ActivePane.Selection.TypeText(Выборка.Курсант);
КонецЦикла;
9 Baf
 
30.04.12
23:42
таблицу добавил, все красиво, но мне нужно чтоб каждый курсант был либо в отдельном файле либо в этом же но на новой странице. неужели никто не сумеет  мне помочь?
10 Torquader
 
01.05.12
01:25
Вставь разрыв страницы в макет.
Если же нужно в отдельном файле - то сохраняй его после выбора каждой строки результата запроса.
11 Baf
 
01.05.12
01:40
КомОбъект.Fields.UpDate();
КомОбъект.Application.Visible = Истина;
КомОбъект.Activate();
КомОбъект.SaveAs("C:\"+Курсант+".doc");

КонецЦикла;
КомОбъект.Close()

"Если же нужно в отдельном файле - то сохраняй его после выбора каждой строки результата запроса."
теперь так и делаю, но он мне выводит в каждом файле имя первого.
12 sanja26
 
01.05.12
01:47
Замена.Execute("[ДатаНачала]",  Ложь, Истина, Ложь, , , Истина, , Ложь, Строка(Формат(ДоговорЗаказчика.Дата, "ДЛФ=DD")));
   Word.selection.MoveDown(,12);
   Док.Paragraphs.Add();
   //Word.Selection.MoveRight(,);
   Табл= Word.Selection.Range;
   //Формируем заголовок:
   Табл.InsertAfter("П/П*Наименование статьи расходов Агента*Стоимость (руб.)");
   Табл.InsertParagraphAfter();
   //сама таблица
   й = 1;
   Для Каждого строка из Услуги Цикл
       Табл.InsertAfter(Строка(й) + "*" + строка.Услуга+"*"+Строка.СуммаOUTСНДС);
       Табл.InsertParagraphAfter();
       й = й + 1;
   КонецЦикла;
   
   Табл.InsertAfter("" + "*" + "ИТОГО общая сумма расходов Агента без  НДС:"+"*"+"5");
   Табл.InsertParagraphAfter();
   
   Табл.InsertAfter("" + "*" + "НДС 18%:"+"*"+"5");
   Табл.InsertParagraphAfter();
   
   Табл.InsertAfter("" + "*" + "ИТОГО общая сумма расходов Агента, включая НДС 18%:"+"*"+"5");
   Табл.InsertParagraphAfter();    
   
   Табл.ConvertToTable("*");
   
   //Происходит конвертация строки в таблицу
   
   //не нравятся звездочки - используйте другой символ
   Док.Tables(1).AutoFormat(1);
   Док.Tables(1).Borders(wdBorderBottom).LineStyle = wdLineStyleNone;
   Док.Tables(1).Borders(wdBorderLeft).LineStyle = wdLineStyleNone;
   Док.Tables(1).Borders(wdBorderRight).LineStyle = wdLineStyleNone;
   Док.Tables(1).Borders(wdBorderTop).LineStyle = wdLineStyleNone;
   Док.Tables(1).Borders(wdBorderVertical).LineStyle = wdLineStyleNone;
   Док.Tables(1).Borders(wdBorderHorizontal).LineStyle = wdLineStyleNone;
13 Torquader
 
01.05.12
01:57
(12) Ему шаблон нужен - проще посмотреть, как работает Fields - то есть коллекция полей в документе, в которые нужно записать значение - тогда получится аналог макета в 1С, но уже в Word.
14 Baf
 
01.05.12
01:58
sanja26 у тебя все записывается в таблицу, ну а мне нужно на каждый лист отдельно
15 sanja26
 
01.05.12
02:00
16 sanja26
 
01.05.12
02:02
(14) тогда с макросами разбирайся
17 Torquader
 
01.05.12
02:04
d=Word.ActiveDocument;
For i=1 To 100 Do
p=d.Paragraphs.Add();
p.PageBreakBefore=True;
p.Range.Text="Это наш замечательный абзац";
EndDo;
18 Baf
 
01.05.12
02:06
Процедура ОсновныеДействияФормыПриказ(Кнопка)
    АктивныйДокумент = ПолучитьМакет("Макет");
    КомОбъект = АктивныйДокумент.Получить();
     КомОбъект.Application.Visible=1;
   Запрос = Новый Запрос;
   Запрос.Текст =
           "ВЫБРАТЬ
           |    ГруппыТабличнаяЧасть.НомерСтроки КАК НомерСтроки,
           |    ГруппыТабличнаяЧасть.Курсант,
           |    ГруппыТабличнаяЧасть.ДатаРождения
           |ИЗ
           |    Документ.Группы.ТабличнаяЧасть КАК ГруппыТабличнаяЧасть
           |
           |УПОРЯДОЧИТЬ ПО
           |    НомерСтроки
           |АВТОУПОРЯДОЧИВАНИЕ";
           Запрос.УстановитьПараметр("Группа", Группа);
   Выборка = Запрос.Выполнить().Выбрать();
       
   Пока Выборка.Следующий() Цикл
       Курсант = Выборка.Курсант;

КомОбъект.Variables.Item("Курсант").Value = Курсант;

КомОбъект.Fields.UpDate();
КомОбъект.Application.Visible = Истина;
КомОбъект.Activate();
КомОбъект.SaveAs("C:\"+Курсант+".doc");

КонецЦикла;
MSWord.Close();

Word = Новый COMОбъект("Word.Application");
Word.Visible = 0;
WordDoc = Word.Documents;
Docum = WordDoc.Add();
Пока Выборка.Следующий() Цикл
Курсант = Выборка.Курсант;
Word.Selection.InsertFile("C:\"+Курсант+".doc");
Word.Selection.InsertBreak(2);
КонецЦикла;
Word.Visible = 1;
Word.Activate();
Word = "" ;

Преобразовал код чуток, теперь он сохраняет мне каждого чела в отдельный файл, только имя внутри он выдает первого почему то, от сюда он складывает криво в один файл, понять не могу почему.Может у меня где то ошибка?
19 Torquader
 
01.05.12
02:07
У тебя написано +Курсант+ а должно быть +Выборка.Курсант+
20 sanja26
 
01.05.12
02:11
(19)  Курсант = Выборка.Курсант;
21 Baf
 
01.05.12
10:19
и всеравно выводит неправильно. ничего не изменилось
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший