#0
by Карась
Здравствуйте! Я хочу перенести табличную часть из 1с в оо, мне сказали что сделать это можно только через цикл Строка=Элементы.Товары.ТекущийЭлемент; Строки=Объект.Товары; Для Каждого Строка Из Строки Цикл КонецЦикла; А как мне сделать, чтобы он потом построчно переносил строки табличной части 1с в OO в виде строки У меня есть Закладка в документе, как мне в нее все это передать?
#1
by Карась
Мне подсказали что можно сделать с помощью метода insertByIndex, но пока адаптировать его под себя я не могу
#6
by MaXpaT
Карась, позвал бы ты лучше программиста .... или есть ещё вариант! Правой кнопкой в табличное поле - вывести список - файл - сохранить копию - и выбери то что нужно тебе
#7
by ICWiner
Нашел в просторах интернетов... Как раз ваш случай: Необходимо заменить в шаблоне ключевые слова в скобках {}, на указанные значения, вот примерный код обработки: Код 1C v 7.x //рдТаблицаЗамен - Таблица значений: // {Организация} ООО "Контора" // {Контрагент} ООО "Должник" // {Директор} Дядя Вася ПечатьИзШаблона(рдТаблицаЗамен, "Primer.doc"); // Функция преобразует Windows имя файла в URL OpenOffice Функция ПреобразоватьВURL(ИмяФайла) Возврат "file:///" + СтрЗаменить(ИмяФайла, "", "/"); КонецФункции Функция ОбработкаФайлаШаблона(ИмяШаблона) Экспорт ИмяФайла = КаталогВременныхФайлов + "doc.tmp"; Путь = ""; Имя = ""; ФайлОбработки = РасположениеФайла(Путь, Имя); КаталогШаблонов = Путь; ПолноеИмяШаблона = КаталогШаблонов + ИмяШаблона; РезультатОбработки = 0; // Проверка на существование ЕстьШаблон = 0; Если ФС.СуществуетФайл(КаталогШаблонов + ИмяШаблона) = 0 Тогда Сообщить("Файл " + ИмяШаблона + " не найден в каталоге шаблонов печатных форм! Обратитесь к системному администратору!", "!!!"); Иначе ЕстьШаблон = 1; КонецЕсли; // Копирование во временный каталог Если ЕстьШаблон = 1 Тогда ФС.КопироватьФайл(ПолноеИмяШаблона, ИмяФайла, 0); КонецЕсли; // Проверка копирования Если ФС.СуществуетФайл(ИмяФайла) = 1 Тогда РезультатОбработки = 1; Иначе Сообщить("Не удалось скопировать шаблон во временный файл."); КонецЕсли; Возврат РезультатОбработки; КонецФункции Процедура ОткрытьТекстовыйПроцессор(ИмяФайла, ТаблицаЗамен) ТекПроцессор = рдТекстовыйПроцессор.ПолучитьЗначение(рдТекстовыйПроцессор.ТекущаяСтрока); Если ТекПроцессор = "OOoWriter" Тогда // Открыть OpenOffice ServiceManager = СоздатьОбъект("com.sun.star.ServiceManager"); Desktop = ServiceManager.createInstance("com.sun.star.frame.Desktop"); Scr = СоздатьОбъект("MSScriptControl.ScriptControl"); Scr.Language="javascript"; Scr.Eval("Args=new Array"); Args = Scr.Eval("Args"); Scr.AddObject("ServiceManager", ServiceManager); // Откроем шаблон ТекстовыйПроцессор = Desktop.LoadComponentFromURL(ПреобразоватьВURL(ИмяФайла), "_blank", 0, Args); // Заменяем ключевые поля на нужные значения Replace = ТекстовыйПроцессор.CreateReplaceDescriptor; Для x=1 По ТаблицаЗамен.КоличествоСтрок Цикл Replace.SearchString = ТаблицаЗамен.ПолучитьЗначение(x, 1); Replace.ReplaceString = ТаблицаЗамен.ПолучитьЗначение(x, 2); ТекстовыйПроцессор.ReplaceAll(Replace); КонецЦикла; Иначе // Открываем MS Office Word Попытка ТекстовыйПроцессор = СоздатьОбъект("Word.Application"); Исключение Сообщить("Не удалось создать объект Microsoft Office Word!", "!!!"); Возврат; КонецПопытки; // Открываем шаблон ТекстовыйПроцессор.Visible = 0; ТекстовыйПроцессор.Documents.Open(ИмяФайла,, -1); Fnd = ТекстовыйПроцессор.ActiveDocument.Range.Find; Fnd.ClearFormatting; Fnd.Forward = -1; // Заменяем ключевые поля на нужные значения ТаблицаЗамен.ВыбратьСтроки; Пока ТаблицаЗамен.ПолучитьСтроку = 1 Цикл Fnd.Execute(ТаблицаЗамен.Найти,,,,,,,,, ТаблицаЗамен.Заменить, 2); КонецЦикла; ТекстовыйПроцессор.Visible = -1; ТекстовыйПроцессор.Activate; КонецЕсли; КонецПроцедуры //***************************************************************************** Процедура ПечатьИзШаблона(ТаблицаЗамен, ИмяФайлаШаблона) Экспорт // Проверим, есть ли нужный шаблон Если ОбработкаФайлаШаблона(ИмяФайлаШаблона) = 0 Тогда Возврат; КонецЕсли; ИмяФайла = КаталогВременныхФайлов + "doc.tmp"; // Открываем в текстовом процессоре файл шаблона ОткрытьТекстовыйПроцессор(ИмяФайла, ТаблицаЗамен); КонецПроцедуры
#11
by ICWiner
Это для 7.7, так что код в восьмерке работать не будет. Но методы работы с опен офисом те же...
#12
by Карась
ааа спасибо, ну мне там по сути только три строки нужны все остальное у меня под 8-ку уже описано
#13
by Карась
Для x=1 По ТаблицаЗамен.КоличествоСтрок Цикл Replace.SearchString = ТаблицаЗамен.ПолучитьЗначение(x, 1); Replace.ReplaceString = ТаблицаЗамен.ПолучитьЗначение(x, 2); ТекстовыйПроцессор.ReplaceAll(Replace); КонецЦикла; Вот этот кусочек, а где здесь указывается закладка куда это все передавать?
#17
by Карась
ну если знаете как то подскажите, я пока не понимаю как мне правильно заполнит метод insertbyindex
#18
by Карась
я знаю, что уже много тем избила на эти темы, но что мне делать, если у меня опыта мало, сложно приходится
#21
by Карась
Опишу ситуацию полностью, я студент, пошла на практику, прошла курс 1с по программированию, пришла на практику, мне поставили задачу, чтобы учиться, но сдать надо сегодня, так как время истекает, а это единственный нюанс, который осталось решить.
#25
by smaharbA
понял, помогу, но не торопите, а займитесь пока другим там делов на 5 строк, но лениво ( суть Вариант 1. Создаете таблицу с числом строк равным числу строк ТЧ и вставляете ее кнтекст в место закладки, заполняете получая номер строки и колонки по индексу. Вариант 2. Создаете таблицу без ничего - в цикле по строкам ТЧ создаете строки таблицы, попутно создавая колонки и заполняя их
#26
by Карась
хорошо, пока попытаюсь сама, торопить не буду,тогда пока больше не буду трогать эту тему
#31
by Карась
И нужен ли мне весь этот код? Мне нужно создать таблицу из трех колонок и заполнить их и табличной части и вставить все это в закладку
#32
by Карась
Я пока тут кое что придумала вот +Code Строка=Элементы.Товары.ТекущийЭлемент; Строки=Объект.Товары; Для Каждого Строка Из Строки Цикл Закладки11=Строка.Количество; Закладки10=Строка.Продукт; Якорь10.SetString(""+Закладки10+""); Якорь11.SetString(""+Закладки11+""); Курсор10.gotoRange(Якорь10, 0); КонецЦикла; Но он у меня каждую новую запись поверх старой пишет, можно ли сделать перевод строки?
#34
by Карась
Я пока сделала так ТЗ=Объект.Товары.Выгрузить; //ТЗ.НоваяКолонка("Номер"); // ТЗ.НоваяКолонка("Продукт"); // ТЗ.НоваяКолонка("Количество"); // ТЗ.Номер=Строки.НомерСтроки; // ТЗ.Продукт=Строки.Продукт; // ТЗ.Количество=Строки.Количество; ТаблицаООО=Document.createInstance("com.sun.star.text.TextTable"); ТаблицаООО.initialize(ТЗ.КоличествоСтрок+1,ТЗ.КоличествоКолонок); Текст.insertTextContent(Курсор10,ТаблицаООО,0); Для Кол=1 По ТЗ.КоличествоКолонок Цикл Ячейка=ТаблицаООО.getCellByPosition(Кол-1,0); Ячейка.getText.setString(""+ТЗ.ПолучитьПараметрыКолонки(Кол)); КонецЦикла; Для Сч=1 По ТЗ.КоличествоСтрок Цикл Для Кол=1 По ТЗ.КоличествоКолонок Цикл Ячейка=ТаблицаООО.getCellByPosition(Кол-1,Сч); Ячейка.getText.setString(""+ТЗ.ПолучитьЗначение(Сч,Кол)); КонецЦикла; КонецЦикла;
#36
by Карась
Или же как к моему варианту просто сделать, чтобы он не добавлял вместо уже существующих, а просто прибавлял новые?
#38
by Карась
ТаблицаООО.initialize(ТЗ.Количество,ТЗ.Колонки.Количество); вот это строка не работает(
#39
by Карась
Все ту сделала, а теперь вот эта не хочет Ячейка=ТаблицаООО.getCellByPosition(Кол-1,Сч);
#45
by Карась
ТаблицаООО=Document.createInstance("com.sun.star.text.TextTable"); ТаблицаООО.initialize(ТЗ.Количество,ТЗ.Колонки.Количество); Текст.insertTextContent(Курсор10,ТаблицаООО,0); Для Сч=1 По ТЗ.Количество Цикл Колонки=ТЗ.Колонки; Для Кол=1 По Колонки.Количество Цикл Ячейка=ТаблицаООО.getCellByPosition((Кол-1),(Сч-1)); Ячейка.getText.setString(""+ТЗ.Получить(Сч-1).Получить(Кол-1)); КонецЦикла; КонецЦикл вот так заработало, осталось это все в нужную закладку передать в нужное место
#51
by Карась
Во так делает как надо, вставляет куда необходимо Закладки10=ТЗ; ТаблицаООО=Document.createInstance("com.sun.star.text.TextTable"); ТаблицаООО.initialize(ТЗ.Количество,ТЗ.Колонки.Количество); Курсор10.gotoRange(Якорь10, 0); Текст.insertTextContent(Курсор10,ТаблицаООО,0); Для Сч=1 По ТЗ.Количество Цикл Колонки=ТЗ.Колонки; Для Кол=1 По Колонки.Количество Цикл Ячейка=ТаблицаООО.getCellByPosition((Кол-1),(Сч-1)); Ячейка.getText.setString(""+ТЗ.Получить(Сч-1).Получить(Кол-1)); КонецЦикла; КонецЦикла;
#52
by smaharbA
идеологически правильнее для восьмерки наверное делать Для Каждого Из... (метаданные восьмерки абсолютно не знаю)
#53
by Vladal
Я вот с ИТС взял конфигурацию демо ОпенОффис // Если у документ OpenOffice до сих пор не создан Если OOДокумент = Неопределено Тогда // Открыть OpenOffice ServiceManager = Новый COMОбъект("com.sun.star.ServiceManager"); Reflection = ServiceManager.createInstance("com.sun.star.reflection.CoreReflection"); Desktop = ServiceManager.createInstance("com.sun.star.frame.Desktop"); Broadcaster = ServiceManager.createInstance("com.sun.star.frame.GlobalEventBroadcaster"); // Удалить временный файл, если есть Если ВременныйФайл <> Неопределено Тогда УдалитьФайлы(ВременныйФайл); КонецЕсли; // Получить имя временного файла для хранения документа ИмяФайла = ПолучитьИмяВременногоФайла(".odt"); // Получим данные файла ДанныеФайла = СправочникОбъект.Файл.Получить; Если ДанныеФайла = Неопределено Тогда // Создать новый документ, если не был создан до этого Args = Новый COMSafeArray("VT_DISPATCH", 1); OOДокумент = Desktop.loadComponentFromURL("private:factory/swriter", "_blank", 0, Args); // И сохранить его во временный файл OOДокумент.storeAsURL(ПреобразоватьВURL(ИмяФайла), Args); Иначе // Записать данные во временный файл ДанныеФайла.Записать(ИмяФайла); // Открыть документ OpenOffice и добавить обработчик закрытия документа Args = Новый COMSafeArray("VT_DISPATCH", 1); OOДокумент = Desktop.loadComponentFromURL(ПреобразоватьВURL(ИмяФайла), "_blank", 0, Args); КонецЕсли; // Добавим обработчик события от документа OpenOffice OOОбработчик = Новый COMОбъект("OOEvents.EventHandler"); ДобавитьОбработчик OOОбработчик.notifyEvent, ОбработкаСобытий; Broadcaster.AddEventListener(OOОбработчик); КонецЕсли; // Если документ открыт, активизировать его OOДокумент.getCurrentController.getFrame.getContainerWindow.setFocus;
#58
by smaharbA
кто не верит, возвращается, а не редко еще и учит тех кто устриц не то что бы кушал, а прямо Жрал.
#62
by smaharbA
нехочу, у меня такая же доча учится асуп по существу веток - убей руководителя практики. Совет искренен, пусть купят нормальный софт и не умничают.
#68
by smaharbA
да ладно, эмоционален может где. Не нравятся "адепты" ооо кои в большинстве представления об оном не имеющие а так - полезно и ооо позырить, начнете понимать что есть не есть.
#74
by Карась
Маленький нюанс, если надо, чтобы выводились все колонки табличной части, то можно использовать этот код, он будет выводить и колонку со значениями ссылок. Но если колонка со ссылками не нужна то в строке ТаблицаООО.initialize(ТЗ.Количество,ТЗ.Колонки.Количество-1); указываем Количество-1 и в строке Для Кол=1 По Колонки.Количество-1 Цикл так же ставим минус1, тогда последняя колонка со ссылками включаться не будет
Тэги: Админ
Ответить:
Комментарии доступны только авторизированным пользователям
Похожие вопросы 1С
- Заполнить таблицу цен в справочнике номенклатура с помощью прогр.
- Как из VBA прочитать текстовый файл построчно?
- Как заполнить список списком всех ДОКУМЕНТОВ в конфигурации?
- Загрузка из XLS файла операций построчно
- Как заполнить програмно заполнить субконто?
- заполнить таблицу значений документа извне
- Заполнить табличную часть из справочника
- v8: Как заполнить значения свойств нового документа на основании существующ
- Word как заполнить таблицу в цикле?
- Как таблицу значений значений превратить во временную таблицу SQL ?
- Можно ли в СКД вывести Показатели построчно а не по столбцам
- v7: Выгрузить таблицу значений в таблицу
В этой группе 1С
- Субконто "Регистрация в ИФНС" в ЗУП
- Прочитать текстовый макет
- СКД Добавление вложенной группировки при расшифровке отчета
- Обновил Win 2008 R2 - пропал терминальный доступ с XP
- Выгонялка для УТ 10.3
- Как открыть несколько экземпляров внешнего отчета?
- ЗУП Способы отражение ЗП в регл.учёте
- Сортировка по нажатию на столбец 1с 8.2
- Группировка строк в Универсальном отчете, где источник = ТЗ
- Отправить сообщение всем активным пользователям на сервере 1С во всех базах
- cубконто "Договоры и иные основания возникновения обязательств"
- Параметр сеанса отсутствует или удален
- УПП Себестоимость, оборот по 20 счету
- функция сокращения имени и отчества
- СКД вывод в таблицу значений, не заполняются параметры
- Заполнить Макет документа данными из Табличной Части документа-основания
- Группировка в динамическом списке
- Пауза в выполнении кода
- v8.2. Аналог функции Шаблон() из 1С 7.7 в 1С 8.2
- протокол AS2 для обмена документами