Имя: Пароль:
1C
 
Сохранение макета в word
,
0 falselight
 
25.11.16
12:52
Подскажите пожалуйста, как правильно сохранять в ms word
сформированный табличный документ?
1 azernot
 
25.11.16
12:57
Правильно табличный документ в MS Word не сохранять.
2 AS_DANCE
 
25.11.16
13:00
файл - сохранить как - выбираем тип МС Ворд - сохранить
3 Масянька
 
25.11.16
13:26
(0) Формируй сразу в Word'е.
4 falselight
 
25.11.16
13:42
(3) но а как подскажите?
(2) хотят что бы было программно.
(1) почему это?
5 Масянька
 
25.11.16
13:44
(4) Пожалста:
    // формируем файл
    мWord = СоздатьОбъект("Word.Application");

    мWord.Visible = 0;
    мNewDoc = мWord.Documents;
    мШаблон = СокрЛП(Строка(КаталогШаблонов + мШаблон));
    мДок = мNewDoc.Add(мШаблон, 0, 0, 1);  
    
    // верхний колонтитул
    мКолонтитул = мДок.Sections.Item(1).Headers.Item(1).Range;
    мКолонтитул.Find.Execute("[ПечНомерДоговора]",0,0,,,,,,,мНомерДоговора,2);
    мКолонтитул.Find.Execute("[ПечДатаДоговора]",0,0,,,,,,,Нрег(СокрЛП(мДатаДоговора)),2);
        
    мОбъект = мДок.Content;
    // подставляем значения по тексту договора - признак замены []
    мОбъект.Find.Execute("[ПечНомерДоговора]",0,0,,,,,,,мНомерДоговора,2);
    мОбъект.Find.Execute("[ПечДатаДоговора]",0,0,,,,,,,Нрег(СокрЛП(мДатаДоговора)),2);
    мОбъект.Find.Execute("[ПечПокупатель]",0,0,,,,,,,СокрЛП(мПокупатель),2);
    мОбъект.Find.Execute("[ПечРуководитель]",0,0,,,,,,,мПечОтветственноеЛицо,2);
    мОбъект.Find.Execute("[ПечОснование]",0,0,,,,,,,СокрЛП(мОснование),2);      

    Если мЕстьСрок = 1 Тогда
        мОбъект.Find.Execute("[СрокДействия]",0,0,,,,,,,СокрЛП(мСрокДействия),2);      
    КонецЕсли;        

    Если мЕстьСчет = 1 Тогда
        мОбъект.Find.Execute("[ПечНомерДатаСчета]",0,0,,,,,,,СокрЛП(мЗаголовокСчета),2);      
        мОбъект.Find.Execute("[ПечСуммаСчета]",0,0,,,,,,,СокрЛП(мЗаголовокСуммы),2);      
        мОбъект.Find.Execute("[ПечНДССчета]",0,0,,,,,,,СокрЛП(мНДССчета),2);      
        Если мСписокПО = 1 Тогда  
            мОбъект.Find.Execute("[ПечПО]",0,0,,,,,,,СокрЛП(мСписокНоменклатуры),2);      
            мОбъект.Find.Execute("[ПечКолВо]",0,0,,,,,,,СокрЛП(мКолВоПО),2);      
        КонецЕсли;
    КонецЕсли;

    // подставляем значения в реквизиты покупателя: надпись, признак замены []
    // надпись - РАГРУППИРОВАН
    СчетчикЦикла = 0;
    КолВоНадписей = мДок.Shapes.Count;
    Для СчетчикЦикла = 1 По КолВоНадписей Цикл
        мНашли = мДок.Shapes.Item(СчетчикЦикла).Select();
        Если Число(мДок.Application.Selection.ShapeRange.Type) = 17 Тогда
            мДок.Application.Selection.Range.Find.Execute("[ПечПокупательРеквизиты]",0,0,,,,,,,СокрЛП(мПокупатель),2);
            мДок.Application.Selection.Range.Find.Execute("[ПечЮрАдресПокупателя]",0,0,,,,,,,СокрЛП(мЮрАдресПокупателя),2);
            мДок.Application.Selection.Range.Find.Execute("[ПечПочтАдресПокупателя]",0,0,,,,,,,СокрЛП(мПочтПокупателя),2);
            мДок.Application.Selection.Range.Find.Execute("[ПечТелефонПокупателя]",0,0,,,,,,,СокрЛП(мТелефонПокупателя),2);
            мДок.Application.Selection.Range.Find.Execute("[ПечИННПокупателя]",0,0,,,,,,,СокрЛП(мИННПокупателя),2);
            мДок.Application.Selection.Range.Find.Execute("[ПечКПППокупателя]",0,0,,,,,,,СокрЛП(мКПППокупателя),2);
            мДок.Application.Selection.Range.Find.Execute("[ПечРСПокупателя]",0,0,,,,,,,СокрЛП(мРСчетПокупателя),2);
            мДок.Application.Selection.Range.Find.Execute("[ПечБанкПокупателя]",0,0,,,,,,,СокрЛП(мБанкПокупателя),2);
            мДок.Application.Selection.Range.Find.Execute("[ПечКСПокупателя]",0,0,,,,,,,СокрЛП(мКСчетПокупателя),2);
            мДок.Application.Selection.Range.Find.Execute("[ПечБИКБанкаПокупателя]",0,0,,,,,,,СокрЛП(мБИКПокупателя),2);
            мДок.Application.Selection.Range.Find.Execute("[ПечПокупательПодпись]",0,0,,,,,,,СокрЛП(ПодписьОтветственногоЛица),2);


            мДок.Application.Selection.Range.Find.Execute("[ПечДолжность]",0,0,,,,,,,СокрЛП(мДолжностьОтветственногоЛица),2);

        //мОбъект.Find.Execute("[ПечДолжность]",0,0,,,,,,,СокрЛП(ДолжностьОтветственногоЛица),2);      
        КонецЕсли;
    КонецЦикла;
    
    // спецификация
    Если (ВидДоговора = Перечисление.ВидДоговора.ПоставкаТоваровПоСпецификации) или
         (ВидДоговора = Перечисление.ВидДоговора.ОказаниеУслугПоСпецификации) Тогда

        Счет.ВыбратьСтроки();

        // заполнение таблицы номенклатуры        
        
        Для СчетчикЦикла = 1 По Счет.КоличествоСтрок() Цикл
            
            мОбъект.Tables(1).Rows.Add();        // добавляем строку в конец таблицы
            
            Счет.ПолучитьСтрокуПоНомеру(СчетчикЦикла);
            
            мОбъект.Tables(1).Cell(СчетчикЦикла + 2,1).Range.Text = Счет.НомерСтроки;
            мОбъект.Tables(1).Cell(СчетчикЦикла + 2,2).Range.Text = СокрЛП(Счет.Номенклатура.ПолнНаименование);
            мОбъект.Tables(1).Cell(СчетчикЦикла + 2,3).Range.Text = СокрЛП(Формат(Счет.Количество, "Ч010.2"));
            мОбъект.Tables(1).Cell(СчетчикЦикла + 2,4).Range.Text = Строка(Счет.Единица);
            мОбъект.Tables(1).Cell(СчетчикЦикла + 2,5).Range.Text = глФрм(Счет.Цена);
            мОбъект.Tables(1).Cell(СчетчикЦикла + 2,6).Range.Text = глФрм(Счет.СуммаНДС);
            мОбъект.Tables(1).Cell(СчетчикЦикла + 2,7).Range.Text = глФрм(Счет.Сумма);
        КонецЦикла;
        
        // итоги
        мОбъект.Tables(2).Cell(1,2).Range.Text = СокрЛП(Формат(Счет.Итог("Количество"), "Ч010.2"));
        мОбъект.Tables(2).Cell(1,5).Range.Text = глФрм(Счет.Итог("СуммаНДС"));
        мОбъект.Tables(2).Cell(1,6).Range.Text = глФрм(Счет.Итог("Сумма"));
        
        // итоговая строка
        мСтрокаВсего = глФразаПрописью(Счет.КоличествоСтрок(), "наименован") +
                       ", на сумму " + глСуммаПрописью(Счет.Итог("Сумма"), глРубли) + ".";
        мОбъект.Find.Execute("[СтрокаВсего]",0,0,,,,,,,СокрЛП(мСтрокаВсего),2);      
    КонецЕсли;

    // записываем файл
    мДок.SaveAs(мИмяФайла);
    
    ИмяФайла = СокрЛП(мИмяФайла);
    
    // активируем Word
    мWord.Visible = 1;
    мWord.Application.WindowState = 2;
    мWord.Application.WindowState = 1;
6 falselight
 
25.11.16
13:46
Можно ли по нажатии кнопки
открывать макет табличного документа
в ms word, не сохраняя сам файл ms word?
7 falselight
 
25.11.16
13:49
я как понимаю нужно сохранять в любом случае, что бы открыть потом
8 falselight
 
25.11.16
13:49
(5) Спасибо!
9 Масянька
 
25.11.16
13:49
(8) 50 $ :))))))))))
10 azernot
 
25.11.16
14:22
(4) Потому что как правило никому не нужен табличный документ в MS Word.
Даже если, по каким-то причинам, сформированный документ надо передать кому-то у кого нет 1С, да ещё и сохранив возможность редактирования, то, как правило, больше подходит MS Excel.
Исключения, конечно, есть. Но это как раз из разряда, что изначально формируется не табличный документ, а именно текстовый, и в этом случае, правильное решение в (3).
11 Gantosha
 
25.11.16
14:26
ну не скажи .. например есть доверенность в сбербанк , там табличная форма и она настолько изначально убогая, что копировать ее в 1с жуткий труд .. проще в нее в корячить таблицу новых сотрудников и выплюнуть в ворде, чем этакую гадость себя в базе , да еще в конфигураторе хранить.
12 azernot
 
25.11.16
14:42
(11) О чём и речь. Это правильное решение, описанное в (3)
13 Gantosha
 
25.11.16
14:44
(12) а, не понял смысла, понятно.
14 falselight
 
26.11.16
04:27
(12) ну и как формировать сразу в ворде?
15 falselight
 
26.11.16
06:21
Что то как то сложно все.
Я вот так сделал

ТАБ.Записать("E:\00WORK2016\zhaldak\ИндивидуальнаяУчетнаяКарточкаОС.docx",типфайлатабличногодокумента.DOCX);

А как сейчас его открыть?
16 falselight
 
26.11.16
06:23
ЗапуститьПриложение() наверное.

Как имея формирование табличного документа
переделать на формирование документа ворд?
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан