Имя: Пароль:
1C
1С v8
1С Документооборот КОРП + автозаполняемые шаблоны LibreOffice/OpenOffice
0 dave2000
 
07.10.14
17:26
Как в Документообороте можно использовать автозаполняемые шаблоны LibreOffice/OpenOffice? В Ворде то понятно, как вставить поля для автозаполнения:

http://www.youtube.com/watch?v=DQ32WWtdTGk

а вот для Либры как? Кто-то пробовал?
1 dave2000
 
20.10.14
17:19
Кто-нибудь пробовал создать шаблон в LibreOffice/OpenOffice?
2 Smit1C
 
20.10.14
17:26
(1) да
3 dave2000
 
20.10.14
18:19
(2) Получилось? Если да, расскажите как, что где нажимать? Перепробовал все, не получается((
4 kls2
 
25.10.14
00:01
dave2000, прошу сильно не ругать если не понял тему. Что значит "шаблоны для автозаполнения", я не знаю. для создания прайса, как пример, открываем xls файл с готовой шапкой, заполняем его и сохраняем под другим именем. Если надобно нечто подобное готов делиться опытом.

Перем scr,    Массив,    Desktop,    Document,    ServiceManager,    Листы,    Лист;
Перем НачURL,    СредURL,    КонURL;
Перем Цена, ПапкаКниги, ПапкаПечать,    ОсновнаяФирма,    ВыбСклад;
Перем ТН, Сегодня;


//******************************************
Функция ПолучитьАвторов(ТМЦ)
Результ = "";
АвторПроизведения    =    СоздатьОбъект("Справочник.АвторПроизведения");;
АвторПроизведения.ИспользоватьВладельца(ТМЦ);
АвторПроизведения.ВыбратьЭлементы(1);
Пока АвторПроизведения.ПолучитьЭлемент() = 1 Цикл
    Результ = СокрЛП(Результ +" "+ СокрЛП(АвторПроизведения.ТекущийЭлемент()));
КонецЦикла;    
Возврат Результ;
КонецФункции     /// ПолучитьАвторов()


//******************************************
Функция ПолучитьИздательства(ТМЦ)
Результ = "";
ИздательстваПроизведения    =    СоздатьОбъект("Справочник.ИздательстваПроизведения");;
ИздательстваПроизведения.ИспользоватьВладельца(ТМЦ);
ИздательстваПроизведения.ВыбратьЭлементы(1);
Пока ИздательстваПроизведения.ПолучитьЭлемент() = 1 Цикл
    Результ = СокрЛП(Результ +" "+ СокрЛП(ИздательстваПроизведения.ТекущийЭлемент()));
КонецЦикла;    
Возврат Результ;
КонецФункции     /// ПолучитьИздательства()

//*******************************************
Функция ПолучитьЦену(ТМЦ)
Цена.ИспользоватьВладельца(ТМЦ);
Цена.ВыбратьЭлементы();
Пока Цена.ПолучитьЭлемент()=1 Цикл
    Если СокрЛП(Цена.ТипЦен) = "Оптовые" Тогда
        Возврат Цена.Цена.Получить(Сегодня);
    КонецЕсли;
КонецЦикла;
КонецФункции    ///ПолучитьЦену(ТМЦ)

///*******************************************
// НарисоватьГраницу(Ячейка,Кант)
//
// Параметры:
//  Ячейка,Кант
//
// Возвращаемое значение:
//  ЛинияГраницы   (Объект)
//
// Описание:
//  ТекстОписания
//
Функция НарисоватьГраницу(Ячейка,Кант)
    oBorder = Ячейка.Tableborder;
   oBorderline = oBorder.TopLine;
   oBorderline.outerlinewidth = Кант.ВнешняяТолщинаЛинии;
   oBorderline.innerlinewidth = Кант.ВнутренняяТолщинаЛинии;
   oBorderline.linedistance = Кант.РасстояниеМеждуВнутрИВнешнЛиниямии;
    oBorderline.color = Кант.ЦветЛинии;
Возврат oBorderline;    
КонецФункции /// НарисоватьГраницу(Ячейка,Кант)

///*******************************************
///    L        лист книги         (объект)
///    Str    Строка таблицы    (число)
///    Col    Колонка таблицы(число)
///    линия описывается таблицей значений из одной строки
///    пустое значние игнорирунтся.
///    Расположение (линии вокруг ячейки
///    topBorder -"верхняя граница"
///    bottomBorder -"нижняя граница"
///    leftBorder -"граница слева"
///    rightBorder -"граница спрва"
Процедура ГраницыЯчейки(L,Str,Col,topBorder="",bottomBorder="",leftBorder="",rightBorder="")
    Ячейка    =    L.getCellByPosition(Col,Str);
    Если НЕ(topBorder="") Тогда
        ячейка.topBorder = НарисоватьГраницу(Ячейка,topBorder);
    КонецЕсли;
    Если НЕ(bottomBorder="") Тогда
        ячейка.bottomBorder = НарисоватьГраницу(Ячейка,bottomBorder);
    КонецЕсли;
    Если НЕ(leftBorder="") Тогда
        ячейка.leftBorder = НарисоватьГраницу(Ячейка,leftBorder);
    КонецЕсли;
    Если НЕ(rightBorder="") Тогда
        ячейка.rightBorder = НарисоватьГраницу(Ячейка,rightBorder);
    КонецЕсли;
КонецПроцедуры            ///ГраницыЯчейки(L,Str,Col,topBorder="",bottomBorder="",leftBorder="",rightBorder="")

///*******************************************
///    L        лист книги         (объект)
///    Str    Строка таблицы    (число)
///    Col    Колонка таблицы(число)
///    значение        которое устанавливают в ячейку
///    тип            (значения)    1-Число, 2-Строка, 3-Формула
///    ЦветТекста            (текста в ячейке)    "" - игнорируем
///    ЦветФона                (фона самой ячейки)    "" - игнорируем
Процедура ВывестиВЯчейку(L,Str,Col,значение,тип,ЦветТекста="",ЦветФона="")
    Ячейка    =    L.getCellByPosition(Col,Str);
Если НЕ(ЦветФона="") Тогда
    Ячейка.CellBackColor = ЦветФона;
КонецЕсли;
Если НЕ(ЦветТекста="") Тогда
    Ячейка.charColor = ЦветТекста;
КонецЕсли;
    Если тип = 1 тогда
        Попытка
            Ячейка.Value = значение;
        Исключение
            Сообщить(" ошибка число "+Col+"   "+Str+"   {"+значение+"}+++");
        КонецПопытки;
    Иначеесли тип = 2 тогда
        Попытка
            Ячейка.SetString(значение);
        Исключение
            Сообщить(" ошибка строка "+Col+"   "+Str+"   {"+значение+"}+++");
        КонецПопытки;
      ;
    Иначеесли тип = 3 тогда
        Попытка
            Ячейка.setFormula(значение);
        Исключение
            Сообщить(" ошибка формула "+Col+"   "+Str+"   {"+значение+"}+++");
        КонецПопытки;
    иначе
      сообщить("Неизвестный параметр  = "+тип);
    КонецЕсли;
КонецПроцедуры            ///ВывестиВЯчейку(L,Str,Col,значение,тип )

//*******************************************
Процедура Сформировать()
Лист = Листы.getByIndex(0);
Лист.setName("Прайс без картинок");
Лист.Columns.GetByIndex(1).Width = 12000;    /// 2-ая колонка, первая Лист.Columns.GetByIndex(0)
Лист.Columns.GetByIndex(2).Width = 900;
Лист.Columns.GetByIndex(10).Width = 900;
Лист.Columns.GetByIndex(3).Width = 1200;
Лист.Columns.GetByIndex(4).Width = 1400;
Лист.Columns.GetByIndex(7).Width = 1400;
Лист.Columns.GetByIndex(8).Width = 3000;
Лист.Columns.GetByIndex(11).Width = 1400;
Лист.Columns.GetByIndex(12).Width = 1400;

ТонкЛин =    СоздатьОбъект("ТаблицаЗначений");
ТонкЛин.ВставитьКолонку("ВнешняяТолщинаЛинии",1,,,,"ВнешняяТолщинаЛинии",,,);
ТонкЛин.ВставитьКолонку("ВнутренняяТолщинаЛинии",2,,,,"ВнутренняяТолщинаЛинии",,,);
ТонкЛин.ВставитьКолонку("РасстояниеМеждуВнутрИВнешнЛиниямии",3,,,,"РасстояниеМеждуВнутрИВнешнЛиниямии",,,);
ТонкЛин.ВставитьКолонку("ЦветЛинии",4,,,,"ЦветЛинии",,,);
ТонкЛин.НоваяСтрока();
ТонкЛин.ВнешняяТолщинаЛинии=12;
ТонкЛин.ВнутренняяТолщинаЛинии=12;
ТонкЛин.РасстояниеМеждуВнутрИВнешнЛиниямии=9;
ТонкЛин.ЦветЛинии=120;

Для клнк = 0 По 12 Цикл
    Если (клнк = 0) Тогда
        знч="Артикул";
    ИначеЕсли (клнк = 1) Тогда
        знч="Наименование";
    ИначеЕсли (клнк = 2) Тогда
        знч="Стандарт";
    ИначеЕсли (клнк = 3) Тогда
        знч="Цена";
    ИначеЕсли (клнк = 4) Тогда
        знч="Цена пачк";
    ИначеЕсли (клнк = 5) Тогда
        знч="Издательство";
    ИначеЕсли (клнк = 6) Тогда
        знч="Автор";
    ИначеЕсли (клнк = 7) Тогда
        знч="Тираж";
    ИначеЕсли (клнк = 8) Тогда
        знч="Переплет";
    ИначеЕсли (клнк = 9) Тогда
        знч="Бумага";
    ИначеЕсли (клнк = 10) Тогда
        знч="кол. стр.";
    ИначеЕсли (клнк = 11) Тогда
        знч="Год изд.";
    ИначеЕсли (клнк = 12) Тогда
        знч="Наличие";
    КонецЕсли;
    ВывестиВЯчейку(Лист,12,клнк,знч, 2);            
    ГраницыЯчейки(Лист,12,клнк,ТонкЛин,ТонкЛин,ТонкЛин,ТонкЛин);            
КонецЦикла;
ТН.ВыбратьСтроки();        N = 0;
Пока ТН.ПолучитьСтроку() = 1 Цикл
    ТМЦ = ТН.ТМЦ;        N =     N +1;
    Артикул        = СокрЛП(ТМЦ.Артикул);
    Наименование= ТМЦ.ПолнНаименование;
    Стандарт        = ТМЦ.ОсновнаяЕдиница.Коэффициент;
    Цена_экземп    = ТН.ОптЦена;
    Цена_пачки    = Цена_экземп*Стандарт;
    Издательство= ПолучитьИздательства(ТМЦ);
    Автор            = ПолучитьАвторов(ТМЦ);
    Тираж            = ?((0+ТМЦ.Тираж)=0,"",ТМЦ.Тираж);
    _Формат        = ТМЦ.Формат;
    Переплет        = ТМЦ.Переплет;
    Бумага        = ТМЦ.Бумага;
    Стр            = ТМЦ.КоличествоСтраниц;
    ГодИзд        = ТМЦ.ГодИздания;
    Наличие        = "есть";
    Попытка
        Если (ТМЦ.ПечататьДозволяется = 1)
        Или НЕ(СокрЛП(ТМЦ.НомерИС)="") Тогда
            Если (СокрЛП(ТМЦ.НомерИС)="") Тогда
                ПечДозв = "+";
            иначе
                ПечДозв = СокрЛП(ТМЦ.НомерИС);
            КонецЕсли;
        иначе
            ПечДозв = "";
        КонецЕсли;
    Исключение
        ПечДозв = "";
    КонецПопытки;
    
    ПолнНазвание    =    СокрЛП(СокрЛП(ТМЦ.ПолнНаименование)+"   "+Автор);
    ПолнНазвание    =    СокрЛП(ПолнНазвание +"   "+Издательство);
    ПолнНазвание    =    СокрЛП(ПолнНазвание +"   "+СокрЛП(?(ГодИзд=0,"",(""+ГодИзд+" г.,"))));
    ПолнНазвание    =    СокрЛП(ПолнНазвание +"   "+?((0+Стр)=0,"",(""+Стр+" стр.,")));
    ПолнНазвание    =    СокрЛП(ПолнНазвание +"   "+?(СокрЛП(Переплет)="","",("перепл.: "+Переплет+",")));
    ПолнНазвание    =    СокрЛП(ПолнНазвание +"   "+?(СокрЛП(Бумага)="","",("бум.: "+Бумага)));
    Для клнк = 0 По 12 Цикл
        тип =2;
        Если (клнк = 0) Тогда
            знч=Артикул;
        ИначеЕсли (клнк = 1) Тогда
            знч=Наименование;
            знч=НачURL+Артикул+СредURL+Наименование+КонURL;
            //Лист.setPropertyValue("Width", 100);
            тип = 3;
        ИначеЕсли (клнк = 2) Тогда
            знч=Стандарт;
        ИначеЕсли (клнк = 3) Тогда
            знч=0+Цена_экземп;
        ИначеЕсли (клнк = 4) Тогда
            знч=0+Цена_пачки;
        ИначеЕсли (клнк = 5) Тогда
            знч=Издательство;
        ИначеЕсли (клнк = 6) Тогда
            знч=Автор;
        ИначеЕсли (клнк = 7) Тогда
            знч=Тираж;
        ИначеЕсли (клнк = 8) Тогда
            знч=Переплет;
        ИначеЕсли (клнк = 9) Тогда
            знч=Бумага;
        ИначеЕсли (клнк = 10) Тогда
            знч=Стр;
        ИначеЕсли (клнк = 11) Тогда
            знч=ГодИзд;
        ИначеЕсли (клнк = 12) Тогда
            знч=Наличие;
        КонецЕсли;
        Если (тип=2) Тогда
            знч=СокрЛП(знч);
        КонецЕсли;
        ВывестиВЯчейку(Лист,(ТН.НомерСтроки+12),клнк,знч,тип );            
        ГраницыЯчейки(Лист,(ТН.НомерСтроки+12),клнк,ТонкЛин,ТонкЛин,ТонкЛин,ТонкЛин);            
    КонецЦикла;
КонецЦикла;
SaveParam = scr.Eval("ServiceManager.Bridge_GetStruct('com.sun.star.beans.PropertyValue')");
SaveParam.Name = "FilterName";
SaveParam.Value = "MS Excel 97";
scr.CodeObject.SetItem(0,SaveParam);
Document.storeToURL("file:///I:/Работа 1С/TEMP/Price_"+СтрЗаменить(Сегодня,".","_")+".xls",Массив);
КонецПроцедуры    /// Сформировать()

//*******************************************
Процедура ДобавитьВсеЭлементы(БезВопроса=0)
Если БезВопроса=0 Тогда
    Ответ = Вопрос("Список будет очищен!
    |Заполнить заново? Продолжить?","Да+Нет");
    Если Ответ = "Да" Тогда
    Иначе
        СтатусВозврата(0);
        Возврат
    КонецЕсли;
КонецЕсли;
    ОбщРег     = СоздатьОбъект("Регистры");
    ОстаткиТМЦ = ОбщРег.ОстаткиТМЦ;
    
    ТМЦ = СоздатьОбъект("Справочник.Номенклатура");
    ТМЦ.ВыбратьЭлементы();
    Пока ТМЦ.ПолучитьЭлемент() = 1 Цикл
        Если ТМЦ.ЭтоГруппа() = 1 Тогда
            Продолжить;
        КонецЕсли;
        Если (ТМЦ.ПринадлежитГруппе(ПапкаКниги) = 1) ИлИ
        (ТМЦ.ПринадлежитГруппе(ПапкаПечать) = 1)    Тогда    ///все хорошо
            ИНАЧЕ    Продолжить;
        КонецЕсли;
        Если НЕ(Найти(СокрЛП(ТМЦ.Артикул),"30-0") = 0)    Тогда
            Продолжить;
        КонецЕсли;
        Остаток    = ОстаткиТМЦ.СводныйОстаток(ОсновнаяФирма,ТМЦ.ТекущийЭлемент(),ВыбСклад,,"Количество");
        ОптЦена    = ПолучитьЦену(ТМЦ.ТекущийЭлемент());    
        Если    (Остаток < 12)    Тогда
            Продолжить;
        КонецЕсли;
        ТН.НоваяСтрока();
        ТН.Внести    = 2;
        ТН.ТМЦ        =    ТМЦ.ТекущийЭлемент();
        ТН.ОптЦена    =    ОптЦена;
        ТН.Остаток    =    Остаток;
    КонецЦикла;
    ТН.Выгрузить(ТЗ);
    ТЗ.ВыводитьПиктограммы("Внести");
КонецПроцедуры    ///ДобавитьВсеЭлементы()

//*******************************************
// Предопределенные процедуры
//
Процедура ПриОткрытии()
Сегодня    =    ТекущаяДата();        /// возможно РабочаяДата()
ДобавитьВсеЭлементы(1);
Сформировать()
КонецПроцедуры // ПриОткрытии()

///---///---///---///
/// ОПЕРАТОРЫ ОСНОВНОЙ ПРОГРАММЫ
///---///---///--- общие команды и функции     ///---///---///---
scr = СоздатьОбъект("MSScriptControl.ScriptControl");
scr.language = "javascript";
scr.eval("Массив=new Array()");
Массив = scr.eval("Массив");
scr.AddCode("function SetItem(ind,val){Массив[ind]=val}");
ServiceManager=СоздатьОбъект("com.sun.star.ServiceManager");
scr.AddObject("ServiceManager",ServiceManager);
Desktop = ServiceManager.createInstance("com.sun.star.frame.Desktop");
///Document = Desktop.LoadComponentFromURL("private:factory/scalc", "_blank", 0, Массив);
Url = "file:///"+СтрЗаменить((КаталогИБ()+"01\shablon.xls"),"\","/")+"";
Document = Desktop.LoadComponentFromURL(Url, "_blank", 0, Массив);
Листы = Document.getSheets();
НачURL="=HYPERLINK(""http://www.orthodox-books.ru/~";;
СредURL="/"";""";
КонURL=""")";
МеткаЕсть = 1;  МеткиНет = 0;
Цена    = СоздатьОбъект("Справочник.Цены");
ТН        = СоздатьОбъект("ТаблицаЗначений");
ТН.    ВставитьКолонку("Внести",1,,,,"х",,,);
ТН.    ВставитьКолонку("ТМЦ",2,,,,"ТМЦ",,,);
ТН.    ВставитьКолонку("ОптЦена",3,,,,"ЦЕНА",,,);
ТН.    ВставитьКолонку("Остаток",4,,,,"Остаток",,,);
Фирмы    =    СоздатьОбъект("Справочник.Фирмы");
Если (Фирмы.НайтиПоКоду("00001")=1) Тогда
    ОсновнаяФирма = Фирмы.ТекущийЭлемент();    
КонецЕсли;
Склады    =    СоздатьОбъект("Справочник.Склады");
Если (Склады.НайтиПоКоду("00001")=1) Тогда
    ВыбСклад = Склады.ТекущийЭлемент();    
КонецЕсли;
ТМЦ = СоздатьОбъект("Справочник.Номенклатура");
Если (ТМЦ.НайтиПоКоду("00000001",0)=1) Тогда
    ПапкаКниги = ТМЦ.ТекущийЭлемент();    
КонецЕсли;
Если (ТМЦ.НайтиПоКоду("00008378",0)=1) Тогда
    ПапкаПечать = ТМЦ.ТекущийЭлемент();    
КонецЕсли;