Имя: Пароль:
1C
1С v8
1С и Word. Добавление уравнений.
0 Olmer
 
24.10.13
08:45
Здравствуйте.
   Требуется из 1С вывести в Word (Макет с типом "Active document") расшифровку сумм по месяцам. При этом расшифровку желательно вывести в виде уравнения с простой вертикальной дробью. Так вот проблема в добавлении такого уравнения. Нигде не могу найти как осуществить задуманное.
   В Word записал макрос с добавлением уравнения:


Sub Макрос2()
    Selection.TypeText Text:="Расчёт за январь 2010:"
    Selection.TypeParagraph
    Selection.TypeText Text:="Размер платы = "
    Selection.OMaths.BuildUp
    Selection.MoveRight Unit:=wdCharacter, Count:=1
    Selection.OMaths(1).Functions.Add(Selection.Range, wdOMathFunctionFrac). _
    Frac.Type = wdOMathFracBar
    Selection.MoveLeft Unit:=wdCharacter, Count:=2
    Selection.TypeText Text:="345"
    Selection.MoveRight Unit:=wdCharacter, Count:=1
    Selection.TypeText Text:="234"
    Selection.MoveRight Unit:=wdCharacter, Count:=1
    Selection.TypeText Text:=" - 0 * 4 = 234"
    Selection.TypeParagraph
End Sub


но тут никак не соображу как перенести в 1C часть, отвечающую за добавление уравнения (объект OMaths).
   Если кто решал такую задачу, подскажите, пожалуйста, как правильно это сделать. Или может я вообще не в том направлении двигаюсь при её решении...
1 mzelensky
 
24.10.13
09:00
(0) ну тебе просто макрос нужно выполнить на стороне 1С
2 mzelensky
 
24.10.13
09:01
Это правда в экселе, но думаю там будет аналогично

            MR = Книга.VBProject;
            NM = MR.VBComponents.Add(1);
            ПНСт=0;

ПНСт=ПНСт+1;
                NM.CodeModule.InsertLines(ПНСт,"Sub Макрос_СписокЗначенийПолныхНаименований()");
                ПНСт=ПНСт+1;
                NM.CodeModule.InsertLines(ПНСт,"        Range(Cells(9, "+СчКолонка+"),Cells(600, "+СчКолонка+")).Select");
                ПНСт=ПНСт+1;
                NM.CodeModule.InsertLines(ПНСт,"        With Selection.Validation");
                ПНСт=ПНСт+1;
                NM.CodeModule.InsertLines(ПНСт,"            .Delete");
                ПНСт=ПНСт+1;                                                                                                                                                                                                                                      
                NM.CodeModule.InsertLines(ПНСт,"            .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= xlBetween, Formula1:=""=Лист2!$"+строка(ПолучитьНазваниеКолонки(СчКолонка))+"$1:$"+строка(ПолучитьНазваниеКолонки(СчКолонка))+"$"+строка(?(выборка.Количество()<>0,выборка.Количество(),1))+""" ");
                ПНСт=ПНСт+1;
                NM.CodeModule.InsertLines(ПНСт,"            .IgnoreBlank = True");
                ПНСт=ПНСт+1;
                NM.CodeModule.InsertLines(ПНСт,"            .InCellDropdown = True");
                ПНСт=ПНСт+1;
                NM.CodeModule.InsertLines(ПНСт,"            .InputTitle = """);
                ПНСт=ПНСт+1;
                NM.CodeModule.InsertLines(ПНСт,"            .ErrorTitle = """);
                ПНСт=ПНСт+1;
                NM.CodeModule.InsertLines(ПНСт,"            .InputMessage = """);                
                ПНСт=ПНСт+1;
                NM.CodeModule.InsertLines(ПНСт,"            .ErrorMessage = """);
                ПНСт=ПНСт+1;
                NM.CodeModule.InsertLines(ПНСт,"            .ShowInput = True");
                ПНСт=ПНСт+1;
                NM.CodeModule.InsertLines(ПНСт,"            .ShowError = False");
                ПНСт=ПНСт+1;
                NM.CodeModule.InsertLines(ПНСт,"        End With");
                ПНСт=ПНСт+1;
                NM.CodeModule.InsertLines(ПНСт,"End Sub");
                Эксель.Run(Книга.Name+"!Макрос_СписокЗначенийПолныхНаименований");
3 Olmer
 
24.10.13
09:19
(1)(2) Насчёт выполнения макроса подумаю, спасибо.
4 Olmer
 
24.10.13
10:48
Как это обычно бывает, всё оказалось намного проще.
Всегда использовал параметры в Word для подстановки в виде {Сумма}. Конечно, засунул этот шаблон и в уравнения. Word отказался делать поиск и замену по уравнениям с таким шаблоном, и правильно сделал, т.к. скобки могут быть их частью. Поэтому тогда я и отбросил такой вариант вывода. Шаблон вроде шСумма замечательно обрабатывает. Так что подойдёт и вариант с копированием области, включающей уравнение, и замене значений в цикле.
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой