Имя: Пароль:
1C
1C 7.7
v7: Подскажите как выгрузить в Excel
0 oslokot
 
29.11.12
15:49
Есть некая печатная форма заявки, если ее сохранить как .xls, на выходе получается естественно коряво: выход за поля, разъезжаются ячейки и т.п.
Вот форма http://www.ekomash.ru/paulencio/primer.jpg

Слышал, что можно работать с екселем через оле,адо.
Подскажите примерчик если кто реализовывал?
1 Heckfy
 
29.11.12
15:50
2 oslokot
 
29.11.12
16:01
Работать через Excel.Application?
3 andrewalexk
 
29.11.12
16:05
:) поищи в инете....куча была обработок
4 oslokot
 
29.11.12
16:07
да ищу, попадается одна вода
5 oslokot
 
29.11.12
16:08
Может мне шаблон создать, с ровными полями и т.д. А из 1С через Excel.Application данные заливать?
6 Vovik
 
29.11.12
16:09
(0)Я делаю так. Ложу шаблон xls в папку прн формс. Потом открываю и заполняю. ТЧ - копирование первой строки.

Для тиса у меня есть готовая отправка Счетов фактур и ГТД в ексель.
7 Vovik
 
29.11.12
16:10
Вот образец - как это работает
http://infostart.ru/public/155192/
принцип тот же
8 monsterZE
 
29.11.12
16:16
(0) можно часть в "надпись" загнать
она правильно переносится
9 DES
 
29.11.12
16:16
(7) там логиниться требуется
10 Vovik
 
29.11.12
16:20
Щас дам нужные куски кода
11 Vovik
 
29.11.12
16:21
//приложение
   П=СоздатьОбъект("Excel.Application");
       
   Файл="sf2012.xls";
   КаталогПечФорм=КаталогИБ()+"ExtForms\PrnForms\";
   ИмяФайлаПечатнойФормы = КаталогПечФорм+Файл;
   Если ФС.СуществуетФайл(ИмяФайлаПечатнойФормы) = 0 Тогда
        Сообщить("Не найден шаблон: "+ИмяФайлаПечатнойФормы);
        Возврат;
   КонецЕсли;
12 oslokot
 
29.11.12
16:23
(10) ага, спасибо, как открыть (11) понятно, как данные туда писать
13 Vovik
 
29.11.12
16:24
П=СоздатьОбъект("Excel.Application");
       Если ФайлОткрытЕксель(П,Шабл)=1 Тогда
           Возврат;
       КонецЕсли;  
       
       Книга = П.WorkBooks.Open(ТекущийКаталог+Шабл,,1);
       П.Visible=1;  
       П.displayalerts = 0;
       Лист  = Книга.Worksheets(1);
       //Текст_Заменить_эксель(Лист,"#_гражданин1",СокрЛП(ВыбСотр));
       Текст_Заменить_эксель(Лист,"#_гражданин",СокрЛП(ВыбСотр));
                                                         
       ДатаРожд = СокрЛП(Формат(ВыбСотр.ДатаРождения,"ДДДММГГГГ"));
       ДатаРожд = СтрЗаменить(ДатаРожд,".","");
       
       Для п2=1 по 8 Цикл                                
           Текст_Заменить_эксель(Лист,"#_д"+п2,Сред(ДатаРожд,п2,1));                        
       КонецЦикла;
         
       Представление = "";
       СЗ = глРазложить(ВыбСотр.МестоРождения);
       Для Номер = 2 по СЗ.РазмерСписка() Цикл
           Если ПустоеЗначение(СЗ.ПолучитьЗначение(Номер))=0 Тогда
               Представление = Представление+?(ПустоеЗначение(Представление)=1,"",", ")+СокрЛП(СЗ.ПолучитьЗначение(Номер))
           КонецЕсли;
       КонецЦикла;
   
       Текст_Заменить_эксель(Лист,"#_МестоРождения",СокрЛП(Представление));        
       
       Серия        = "";
       Номер        = "";
       ДатаВыдачи    = "";
       КемВыдан    = "";
       Попытка
           Документ = глРазложитьДокУдостоверяющийЛичность(ВыбСотр.ДокументУдЛичность);
           СпрДокумент = СоздатьОбъект("Справочник.ДокументыУдостоверяющиеЛичность");
           Если СпрДокумент.НайтиПоНаименованию(Документ.ПолучитьЗначение(1))=1 Тогда
               Вид = СпрДокумент.ТекущийЭлемент()
           КонецЕсли;
           Серия        = Документ.ПолучитьЗначение(2);
           Номер        = Документ.ПолучитьЗначение(3);
           ДатаВыдачи    = Документ.ПолучитьЗначение(4);
           КемВыдан    = Документ.ПолучитьЗначение(5);
       Исключение
       КонецПопытки;
       Текст_Заменить_эксель(Лист,"#_серия",СокрЛП(Серия));
       Текст_Заменить_эксель(Лист,"#_номер",СокрЛП(Номер));
       Текст_Заменить_эксель(Лист,"#_выдан",СокрЛП(КемВыдан));
                 
       ДатаВыдачи = СтрЗаменить(ДатаВыдачи,".","");
       Для п2=1 по 8 Цикл                                
           Текст_Заменить_эксель(Лист,"#_дв"+п2,Сред(ДатаВыдачи,п2,1));                        
       КонецЦикла;  
       
       ИНН=СокрЛП(ВыбСотр.ИНН);        
       п3=12;//п3=СтрДлина(ИНН);
       Пока п3>0 Цикл
           Текст_Заменить_эксель(Лист,"#_инн"+п3,Сред(ИНН,п3,1));
           п3=п3-1;
       КонецЦикла;
       
       Телефон=НомТел(СокрЛП(ВыбСотр.Телефон));        
       п4=11;//п4=СтрДлина(Телефон);
       Пока п4>0 Цикл
           Текст_Заменить_эксель(Лист,"#_моб"+п4,Сред(Телефон,п4,1));
           п4=п4-1;
       КонецЦикла;
       
       АдресПрописка = СокрЛП(глПредставлениеАдреса(ВыбСотр.АдресПрописка));
       Текст_Заменить_эксель(Лист,"#_АдресПрописка",АдресПрописка);
       Текст_Заменить_эксель(Лист,"#_должность",СокрЛП(ВыбСотр.Должность.Получить(ДатаД)));
       
       _Ф="";_И="";_О="";
       глФамилияИмяОтчество(ВыбСотр,_Ф,_И,_О);  
       Подпись = _Ф+" "+Лев(_И,1)+". "+Лев(_О,1)+".";
       Текст_Заменить_эксель(Лист,"#_подпись",Подпись);  
       Лист2  = Книга.Worksheets(2); Текст_Заменить_эксель(Лист2,"#_подпись",Подпись);
       Лист3  = Книга.Worksheets(3); Текст_Заменить_эксель(Лист3,"#_подпись",Подпись);
       
       //Транслит
       ИмяЛат = Рус_Лат(_И);
       ИмяЛат = Нрег(ИмяЛат);
       ИмяЛат = Врег(Лев(ИмяЛат,1))+Сред(ИмяЛат,2);
       
       ФамЛат = Рус_Лат(_Ф);
       ФамЛат = Нрег(ФамЛат);
       ФамЛат = Врег(Лев(ФамЛат,1))+Сред(ФамЛат,2);
       
       Текст_Заменить_эксель(Лист,"#_транслит",СокрЛП(ИмяЛат)+" "+СокрЛП(ФамЛат));
14 Vovik
 
29.11.12
16:24
СФ.Cells(5,2).Value=РеквШапки.Получить("Номер");  
       СФ.Cells(6,2).Value=НомерИсправления;
       СФ.Cells(7,2).Value=РеквШапки.Получить("Поставщик");
       СФ.Cells(8,2).Value=РеквШапки.Получить("АдресПоставщика");
       СФ.Cells(9,2).Value=РеквШапки.Получить("ИНН_КПППоставщика");
       СФ.Cells(10,2).Value=РеквШапки.Получить("Грузоотправитель");
       СФ.Cells(11,2).Value=РеквШапки.Получить("Грузополучатель");
       СФ.Cells(12,2).Value=РеквШапки.Получить("ПоДокументу");
       СФ.Cells(13,2).Value=РеквШапки.Получить("Покупатель");
       СФ.Cells(14,2).Value=РеквШапки.Получить("АдресПокупателя");
       СФ.Cells(15,2).Value=РеквШапки.Получить("ИННКПП_Покупателя");
       СФ.Cells(16,2).Value=Шаблон("Валюта: [ПечВалюта]");
15 Vovik
 
29.11.12
16:25
МнЧ.ВыбратьСтроки();
       Пока МнЧ.ПолучитьСтроку() = 1 Цикл
           НомСтр=НомСтр+1;  
           _стр=21+НомСтр-1;
           Если НомСтр>1 Тогда
               СФ.Rows("21:21").Copy();
               СФ.Rows(""+_стр+":"+_стр+"").Insert();                
           КонецЕсли;    
           
           //СФ.Cells(_стр,2).Value    =    НомСтр;  
           СФ.Cells(_стр,2).Value    =    СокрЛП(МнЧ.Номенклатура);
           СФ.Cells(_стр,3).Value    =    СокрЛП(МнЧ.ЕдиницаКод);
           СФ.Cells(_стр,4).Value    =    СокрЛП(МнЧ.Единица);
           СФ.Cells(_стр,5).Value    =    Формат(МнЧ.Количество, ФорматКоличества);
           СФ.Cells(_стр,6).Value    =    ?(МнЧ.Цена=0,"-", Формат(МнЧ.Цена,"Ч15.2"));
           СФ.Cells(_стр,7).Value    =    ?(МнЧ.Сумма=0,"-", Формат(МнЧ.Сумма,"Ч15.2"));
           СФ.Cells(_стр,8).Value    =    СокрЛП(МнЧ.АкцизЦена);
           СФ.Cells(_стр,9).Value    =    ?(ПустоеЗначение(МнЧ.СуммаНДС) = 1, "Без НДС", СокрЛП(МнЧ.СтавкаНДС));
           СФ.Cells(_стр,10).Value    =    ?(ПустоеЗначение(МнЧ.СуммаНДС) = 1, " -- ", СокрЛП(МнЧ.СуммаНДС));
           СФ.Cells(_стр,11).Value    =    ?(МнЧ.ВсегоСНДС=0,"-", Формат(МнЧ.ВсегоСНДС,"Ч15.2"));
           СФ.Cells(_стр,12).Value    =    СокрЛП(МнЧ.СтранаК);
           СФ.Cells(_стр,13).Value    =    СокрЛП(МнЧ.СтранаН);    
           СФ.Cells(_стр,14).Value    =    СокрЛП(МнЧ.НомерГТД);
       КонецЦикла;
16 Надсмотрщик
 
29.11.12
16:25
Функция СформироватьВExcel(ХЛС, НовыйСчет, Лист, НомДок, СтрПоставщик, СтрПокупатель)
   
   ХЛС=СоздатьОбъект("Excel.Application");
   Попытка
       НовыйСчет = ХЛС.Workbooks.Add(КаталогИБ() + "\Счет.xlt");
       Лист = НовыйСчет.Sheets(1);
   Исключение
       Возврат 0;
   КонецПопытки;
   
   Лист.Cells(5, 2).Value = СокрЛП(Константа.Банк);
   Лист.Cells(5, 8).Value = СокрЛП(Константа.БанкКорсчет);
   Лист.Cells(6, 2).Value = "ИНН " + СокрЛП(Константа.ИНН);
   Лист.Cells(6, 5).Value = "КПП " + СокрЛП(Константа.КПП);
   Лист.Cells(8, 2).Value = СокрЛП(Константа.Организация);
   Лист.Cells(8, 8).Value = СокрЛП(Константа.РасчетныйСчет);
   Лист.Cells(10, 2).Value = "СЧЕТ № " + НомДок + " от " + Формат(ДатаДок ,"Д (0)ДДММММГГГГ");
   Лист.Cells(13, 4).Value = СтрПоставщик;
   Лист.Cells(14, 4).Value = СтрПокупатель;
   Лист.Cells(18, 9).Value = Формат(Итог("Сумма"), "Ч15.2-");
   Лист.Cells(19, 8).Value = ?(Итог("НДС")=0,"Без налога (НДС).","Итого НДС:");
   Лист.Cells(19, 9).Value = Формат(Итог("НДС"), "Ч15.2-");
   Лист.Cells(20, 9).Value = Формат(Итог("Всего") - Итог("НП"), "Ч15.2-");
   Лист.Cells(21, 9).Value = Формат(Итог("НП"), "Ч15.2-");
   Лист.Cells(22, 9).Value = Формат(Итог("Всего"), "Ч15.2-");
   Лист.Cells(24, 2).Value = "Всего наименований " + КоличествоСтрок() + ", на сумму " + ФРМ(Итог("Всего"));
   Лист.Cells(25, 2).Value = СуммаПрописью(Итог("Всего"));
   Лист.Cells(27, 2).Value = "Руководитель предприятия_____________________ (" + СокрЛП(Константа.Руководитель) + ")";
   Лист.Cells(29, 2).Value = "Главный бухгалтер____________________________ (" + СокрЛП(Константа.ГлБухгалтер) + ")";
   
   Если Итог("НП") = 0 Тогда
       Лист.Rows("20:21").Delete(-4162);
   КонецЕсли;
   СчЦ = 0;
   Если КоличествоСтрок() > 1 Тогда
       Для СчЦ = 2 По КоличествоСтрок() Цикл
           Лист.Rows("17:17").Copy();
           Лист.Rows("17:17").Insert(-4121);
       КонецЦикла;
       ХЛС.CutCopyMode = 0;
   КонецЕсли;
   Возврат 1;
   
КонецФункции // СформироватьВExcel()
17 oslokot
 
29.11.12
16:36
Спасибо за наводку! получается, данные вроде потекли.
Принцип понял, остальное найду
18 Ёпрст
 
29.11.12
16:37
ужас какой..

Йоксель и пару строк кода.. и гораздо быстрее, чем Excel.Application и сам офис не нужен при этом
19 Надсмотрщик
 
29.11.12
16:38
Лови еще дальше

Функция ПослатьПисьмо(ИмяФайлаXLS)
   
   Если ПустоеЗначение(Контрагент.ЭлектронныйАдрес) = 1 Тогда
       Предупреждение("У заказчика " + Контрагент +" не заполнен электронный адрес!");
       Возврат 0;
   Иначе
       Адрес = СокрЛП(Контрагент.ЭлектронныйАдрес);
   КонецЕсли;
   Попытка
       Почта = СоздатьОбъект("AddIn.V7Mail");
   Исключение
       Предупреждение("Не удалось создать объект Addin.V7Mail!");
       Возврат 0;
   КонецПопытки;
   
   Попытка  
       Почта.Подключиться();
       Почта.НовоеСообщение();
       Почта.ДобавитьАдрес(Адрес);
       Почта.Заголовок        = "Счет на Услуги от " + Константа.КратНаимОрганизации;
       Почта.Текст            = "Счет на Услуги от " + Константа.КратНаимОрганизации;
       Почта.ДобавитьФайл(ИмяФайлаXLS);
       Почта.Послать();
       Почта.Отключиться();
       Сообщить("Ответ успешно отправлен!");
       ФС.УдалитьФайл(ИмяФайлаXLS);
   Исключение
       Сообщить("Неудачная попытка! Отправка счета по почте не произведена!");
       Возврат 0;
   КонецПопытки;
   
   Возврат 1;
   
КонецФункции // ПослатьПисьмо()


//******************************************************************************
Процедура Печать()
   
   Если Контрагент.Выбран() = 0 Тогда
       Сообщить("На выбран контрагент.");
       Активизировать("Контрагент",);
       Возврат;
   КонецЕсли;
   
   Если ВариантОтправкиСчета.Выбран() = 0 Тогда
       Сообщить("На выбран Вариант отправки счета.");
       Активизировать("ВариантОтправкиСчета",);
       Возврат;
   КонецЕсли;
   
   НомДок = СокрЛП(НомерДок);

   АдресТелефон = "Адрес: " + СокрЛП(Константа.АдресОрганизации);
   АдресТелефон = АдресТелефон + ", тел.: " + СокрЛП(Константа.ТелефоныОрганизации);

   ПоставщикРасчСчет = "";
   ПоставщикИНН = "";
   ПоставщикКПП = "";

   ПоставщикБанк = "";
   Кредит = "";
   ПоставщикБанкБИК = "";
   ПоставщикБанкКорсчет = "";
   
   СтрПоставщик = "ИНН " + СокрЛП(Константа.ИНН) + ", КПП " + СокрЛП(Константа.КПП);
   СтрПоставщик = СтрПоставщик + ", " + СокрЛП(Константа.ПолнНаимОрганизации) + "(" + СокрЛП(Константа.КратНаимОрганизации) + "), ";
   СтрПоставщик = СтрПоставщик + СокрЛП(Константа.АдресОрганизации) + ", тел. " + СокрЛП(Константа.ТелефоныОрганизации);
   
   СтрПокупатель = "ИНН " + СокрЛП(Контрагент.ИНН) + ", КПП " + СокрЛП(Контрагент.КПП);
   СтрПокупатель = СтрПокупатель + ", " + СокрЛП(Контрагент.ПолнНаименование) + "(" + СокрЛП(Контрагент.Наименование) + "), ";
   СтрПокупатель = СтрПокупатель + СокрЛП(Контрагент.ЮридическийАдрес) + ", тел. " + СокрЛП(Контрагент.Телефоны);
   
   Таб = СоздатьОбъект("Таблица");
   ИмяФайлаПечатнойФормы = КаталогИБ()+"ExtForms\PrnForms\1cbs.mxl";
   Если ФС.СуществуетФайл(ИмяФайлаПечатнойФормы) = 1 Тогда
       Таб.ИсходнаяТаблица(ИмяФайлаПечатнойФормы);
   Иначе
       Таб.ИсходнаяТаблица("Таблица");
   КонецЕсли;
   Таб.ВывестиСекцию("Шапка");
   
   Вар = 0;
   ХЛС="";
   НовыйСчет = "";
   Лист = "";
   ИмяФайлаXLS = СокрЛП(Константа.КаталогВременныхФайлов) + "\Счет_" + НомерДок + ".xls";
   Если ВариантОтправкиСчета = Перечисление.ВариантыОтправкиСчета.ЭлектронноXLS Тогда
       Вар = СформироватьВExcel(ХЛС, НовыйСчет, Лист, НомДок, СтрПоставщик, СтрПокупатель);
       
   КонецЕсли;
   

   ВыбратьСтроки();
   Ном = 0;
   Пока ПолучитьСтроку()=1 Цикл
       Ном = Ном + 1;
       Наименование = ?(ПустаяСтрока(Товар.ПолнНаименование)=1, Товар.Наименование, Товар.ПолнНаименование);
       Таб.ВывестиСекцию("Строка");
       Если Вар = 1 Тогда
           Лист.Cells(16 + Ном, 2).Value = Ном;
           Лист.Cells(16 + Ном, 3).Value = СокрЛП(Наименование);
           Лист.Cells(16 + Ном, 6).Value = СокрЛП(Товар.ЕдиницаИзмерения);
           Лист.Cells(16 + Ном, 7).Value = Количество;
           Лист.Cells(16 + Ном, 8).Value = Формат(Цена, "Ч15.2-");;
           Лист.Cells(16 + Ном, 9).Value = Формат(Сумма, "Ч15.2-");;
       КонецЕсли;
   КонецЦикла;

   Таб.ВывестиСекцию("Итого");
   Таб.ВывестиСекцию("НДС");
   Если Константа.НП = Перечисление.Булево.Да Тогда
       Таб.ВывестиСекцию("НП");
   КонецЕсли;
   Таб.ВывестиСекцию("Подвал");

   Таб.Опции(0,0,0,0,"ОпцииПечатиСчета","ОкноСчета");
   Таб.ПараметрыСтраницы(1,,,,,,,,,1,1,);
   Таб.ТолькоПросмотр(1);
   Таб.Показать("Печать счета",);   //
   
   Если Вар = 1 Тогда
       Лист.Range("A1").Select();
       //Лист.PrintOut();
       
       НовыйСчет.SaveAs(ИмяФайлаXLS,-4143);
       
       Если ЗагрузитьВнешнююКомпоненту(КаталогИБ() + "v7plus.dll") = 1 Тогда
       ИначеЕсли ЗагрузитьВнешнююКомпоненту(КаталогИБ() + "ExtForms\" + "v7plus.dll") = 1 Тогда        
       ИначеЕсли ЗагрузитьВнешнююКомпоненту(КаталогПрограммы() + "v7plus.dll") <> 1 Тогда
           Предупреждение("Компонента v7plus.dll не найдена!");
           Вар = 0;
       КонецЕсли;
       НовыйСчет.Close();
       Если Вар = 1 Тогда
           Вар = ПослатьПисьмо(ИмяФайлаXLS);
       КонецЕсли;
       
       ХЛС.Visible=1;
       НовыйСчет = "";
   КонецЕсли;
КонецПроцедуры
20 1С 8 3
 
29.11.12
16:41
http://www.gotdotnet.ru/LearnDotNet/NETFramework/22054.aspx

По этой ссылке хорошо описанна объектная модель со свойствами и параметрами
21 Ёпрст
 
29.11.12
16:42
22 Ёпрст
 
29.11.12
16:42
повесить открытие поделки в панель струментов и наслаждаться
23 Vovik
 
29.11.12
16:42
(18)Ексель юзают все. А Йоксель редко кто знает.
24 НЕА123
 
29.11.12
16:44
(0)
макет сделать нормальный, туда выводить и сохранять в xls
?
25 Надсмотрщик
 
29.11.12
16:45
В (19) Вместе с отправкой по почте.
Писалось для КоллЦентра
26 Масянька
 
29.11.12
16:51
Автор! Слушай  Ёпрст4! Умный пацан!

PS Йоксель - вещь!
27 Vovik
 
29.11.12
16:55
(25)У меня тож самое. Лень людям каждую накладную и сф печатать. Сохранят в ексель. Отправлять по почте. Берут скопом накладные за период и все автоматом на мыло.
28 Vovik
 
29.11.12
16:57
(26)Слюшай умный вещь, выложи сюда что кроме слова йоксель, пожалуйста. Код например. Я уже забыл что такое йоксель, наверное он не очень то мне и нужен оказался в итоге. Даж не помню толком что это.
29 oslokot
 
29.11.12
17:02
(21) о, нормально. Только с полями косяк, вылезают за пределы печати, приходится настраивать. А Ёксель сможет сам поля подогнать?
(26) знаю
30 oslokot
 
29.11.12
17:03
(24) да-да, с помощью Vovik получается лить в шаблон.
Ексель тоже заинтересовал. Сделаю и так и эдак..
31 oslokot
 
29.11.12
17:04
(30) *Ёксель
32 kalleka
 
29.11.12
17:06
(22) Не в тему, но подскажи пожалуйста. Ты мне скидывал ссылку на обработку по поиску ошибок в базе

В базе одной нашел документ у которого привязка к операции за другую дату, а у него вообще не должно быть операций.

и есть движение по одному регистру, а движений так же не должно быть даже теоретически. Кроме того движение есть, а галки что движение есть - нету...

Как вообще с этим бороться? Тупо документ перепровести? (не хочется, он за февраль)
33 Mikeware
 
29.11.12
17:07
(32) вручную поправь, и переиндексируйся...
34 Касандер72
 
29.11.12
17:14
(0) Ексель стремный - были баги когда разные версии на концах юзаются - когда открывается не сам док, а мод-копия - запаришься закрывать - програмно не срабатывало ... хотя - на любителя - если все синхро - работает бусечки ... разве что с форматами иногда баги прилетают ...
35 kalleka
 
29.11.12
17:20
(32) А из какой таблицы удалять конкретно?
36 Масянька
 
29.11.12
17:20
(28)

Процедура ПодготовитьФайл(ПолноеИмяФайла, ТаблицаЗагрузки)

   Попытка
       ЗагрузитьВнешнююКомпоненту("SpreadSheet.dll");
   Исключение
       Предупреждение("Не удалось загрузить компоненту SpreadSheet.dll.");
       Возврат;
   КонецПопытки;
   
   Йоксель        = СоздатьОбъект("ТабличныйДокумент");
   Конвертер    = СоздатьОбъект("КонвертерExcel");
   
   ВремТабл    = Конвертер.Создать();
   
   Йоксель.ЗагрузитьИзТаблицы(ТаблицаЗагрузки);
   
   ВремТабл.Листы.Добавить("Лист", Йоксель);
   
   Параметры    =    Йоксель.ПараметрыПечати;
   Параметры.ПолеСверху    = 50;
   Параметры.ПолеСнизу        = 50;    
   Параметры.ПолеСлева        = 50;
   Параметры.ПолеСправа    = 50;
   Параметры.Ориентация    = 1;
   
   ВремТабл.ПараметрыКонвертера.РаспознаватьЧисловыеЗначения = 1;
   
   // сохраняем файл в выбранном каталоге
   ВремТабл.Записать(ПолноеИмяФайла);
   Йоксель.Очистить();
37 Масянька
 
29.11.12
17:25
(34) Мне понравилось. Когда из таб. формы сохраняешь (Сохранить как - Excel) - то строчки сжимаются, то с цифрами фигня. А с Йокселем, у меня по крайней мере, проблем нет.
38 oslokot
 
29.11.12
17:38
(36) не работают ПараметрыПечати. Вы не ошиблись в коде?
39 Масянька
 
29.11.12
17:41
(38) Что значит "Не работает"?
40 oslokot
 
29.11.12
17:43
(39) чтобы я не менял в параметрах (поля, ориентацию) после записи открываю файл екселем, поля не меняются, ориентация тоже
41 oslokot
 
29.11.12
17:45
я про это:
Параметры    =    Йоксель.ПараметрыПечати;
   Параметры.ПолеСверху    = 50;
   Параметры.ПолеСнизу        = 50;    
   Параметры.ПолеСлева        = 50;
   Параметры.ПолеСправа    = 50;
   Параметры.Ориентация    = 1;
Ексель открывает файл без учета этих параметров
42 oslokot
 
29.11.12
17:45
или Екселю пофиг?
43 Масянька
 
29.11.12
17:46
(40) У меня нормально все отслеживает и сохраняет - и формат, и поля. Excel какой?
44 oslokot
 
29.11.12
17:52
(43) 2003
45 Масянька
 
29.11.12
17:53
(44) И у меня такой же. А SpreadSheet какой?
46 oslokot
 
29.11.12
17:55
(45) незнаю 3 метра весит, дата файла 24.10.08
47 Масянька
 
29.11.12
17:57
Пошукай в инете: версия 1.1.27.0, дата 17 августа 2012 г.
Там были косяки.
48 Масянька
 
29.11.12
17:59
Хочешь - давай мыло, завтра тебе скину.
49 oslokot
 
29.11.12
18:28
(48) ага, спасибо oslokot mail.ru
50 Mikeware
 
29.11.12
18:31
51 Serginio1
 
29.11.12
18:42
Процедура СоздатьПараметрыИТекст(СтрКолонки,Стр,Cmd)
   Имя=СтрКолонки.Имя;
   ТипЗначения=СтрКолонки.ТипЗначения;
   Если ТипЗначения.СодержитТип(Тип("Строка")) Тогда
       Стр=Стр+Имя+" NTEXT,";
       Cmd.Parameters.Append(Cmd.CreateParameter(Имя,203,1,255,"1"));
   ИначеЕсли ТипЗначения.СодержитТип(Тип("Число")) Тогда
       КвалификаторыЧисла=Типзначения.КвалификаторыЧисла;
       Разрядность=КвалификаторыЧисла.Разрядность;
       РазрядностьДробнойЧасти=КвалификаторыЧисла.РазрядностьДробнойЧасти;
       Стр=Стр+Имя+" Numeric("+Разрядность+","+РазрядностьДробнойЧасти+"),";
       Парам=Cmd.CreateParameter(Имя,6,1,Разрядность,);
       Парам.NumericScale = РазрядностьДробнойЧасти;
       Парам.Precision = Разрядность-РазрядностьДробнойЧасти-?(РазрядностьДробнойЧасти=0,0,1);
       
       Cmd.Parameters.Append(Парам);
   ИначеЕсли ТипЗначения.СодержитТип(Тип("Дата")) Тогда    
       Стр=Стр+Имя+" DateTime,";
       Cmd.Parameters.Append(Cmd.CreateParameter(Имя,135,1));
   ИначеЕсли ТипЗначения.СодержитТип(Тип("Булево")) Тогда    
       Стр=Стр+Имя+" BOOLEAN,";
       Cmd.Parameters.Append(Cmd.CreateParameter(Имя,11,1));
       
       
   КонецЕсли;    
   
   
КонецПроцедуры

Процедура СоздатьТаблицуИКоманд(Тз,Соединение,Команд)
   Стр="Create TABLE  Лист1 (";

   
   Колонки=Тз.Колонки;
   Для каждого СтрКолонки из колонки Цикл
       СоздатьПараметрыИТекст(СтрКолонки,Стр,Команд)
   КонецЦикла;    
   
   Стр=Лев(Стр,СтрДлина(Стр)-1)+")";
   Сообщить(Стр);
   Соединение.Execute(Стр);    
КонецПроцедуры
Процедура ЗаписатьТзВЭксель(тз)
   
   // Допустимые типы
   // adDouble = 5 Значение с плавающей точкой двойной точности
   // adDAte = 7 Дата
   // adCurrency = 6 Денежная сумма
   // adBoolean = 11 Булево
   // adVarWChar = 202 Символьная строка Unicode, заканчивающаяся NULL
   // adLongVarWChar = 203 Длинное строковое значение
   
   
   
   ИмяФайлаЭксель = "D:\Export.xlsx"; // Имя создаваемого файла
   
   Файл=Новый Файл(ИмяФайлаЭксель);
   Если файл.Существует() Тогда
       УдалитьФайлы(ИмяФайлаЭксель);
   КонецЕсли;    
   
   СтрокаПодключения = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source = "+ИмяФайлаЭксель;
   СтрокаПодключения = СтрокаПодключения + ";Mode=Share Deny Write; Extended Properties = "+"""Excel 12.0"+";HDR=Yes;IMEX=1"";";
   ActiveConnection = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source="+ИмяФайлаЭксель+";Extended Properties=Excel 12.0 Xml;";
   Connection = Новый COMОбъект("ADODB.Connection");
   
   
   
   // Создаем соединение
   Connection = Новый COMОбъект("ADODB.Connection");
   Connection.Open(ActiveConnection);
   Command = Новый COMОбъект("ADODB.Command");
   Command.ActiveConnection = Connection;
   Command.CommandType = 1;
   
   СоздатьТаблицуИКоманд(Тз,Connection,Command);
   
   Connection = Новый COMОбъект("ADODB.Connection");
   Connection.Open(СтрокаПодключения);
   Command.ActiveConnection = Connection;
   Command.CommandType = 1;
   
   Параметры= Command.Parameters;    
   ТекстВопросов=" VALUES(";
   ТекстКоманды= "INSERT INTO [Лист1](";
   Для каждого парам из Параметры Цикл
       ТекстКоманды=ТекстКоманды+парам.Name+",";
       ТекстВопросов=ТекстВопросов+"?,"
   КонецЦикла;    
   ТекстКоманды=Лев(ТекстКоманды,стрДлина(ТекстКоманды)-1)+") "+Лев(ТекстВопросов,стрДлина(ТекстВопросов)-1)+")";
   Сообщить(ТекстКоманды);
   Command.CommandText=ТекстКоманды;
   
   //    Command.CommandText="INSERT INTO [Лист1$](Марка,Номер,Количество,Цена,Название)  VALUES('Марка','Номер',1,2.2,'Название')";
   //    Command.Execute();
   //возврат;
   
   Command.prepared=истина;
   
   
   //Command.CommandText=ТекстКоманды;
   Для каждого Выборка из Тз Цикл
       Для каждого парам из Параметры Цикл
           Значение=Выборка[Парам.Name];
           Если Парам.Type=203 Тогда
               Парам.Size=СтрДлина(Значение)+1;
           КонецЕсли;    
           Парам.Value=Значение;
           
       КонецЦикла;    
       
       
       Command.Execute();
   КонецЦикла;
   //
   // Закрываем соединение
   Command = Неопределено;
   Connection.Close();
   Connection = Неопределено;
   
КонецПроцедуры
52 oslokot
 
29.11.12
18:51
(50) чета я запутался по ссылке Yoksel.dll
А SpreadSheet.dll тогда что?
53 FN
 
29.11.12
18:52
еще один вариант (без Йокселя):

ТАб.Записать(ИмяФайла,1);
       Состояние("Установка параметров страницы...");
       Попытка
           Excel = СоздатьОбъект("Excel.Application");
           Excel.DisplayAlerts=0;
       Исключение
           Сообщить("Похоже, Excel на компьютере не установлен. Необходимо выполнить установку/переустановку Excel.","!");
           Возврат;
       КонецПопытки;    
       Excel.Workbooks.Open(ИмяФайла);
       Состояние("Установка параметров страницы...");
       Лист=Excel.ActiveWorkBook.ActiveSheet;
       Лист.Columns(7).Hidden = 1;    Лист.Columns(8).Hidden = 1;
       Лист.Columns(9).Hidden = 1;    Лист.Columns(10).Hidden = 1;
       Лист.Range(Лист.Cells(7,5),Лист.Cells(ном+7,5)).NumberFormat="0,000";
       Лист.Range(Лист.Cells(7,6),Лист.Cells(ном+7,6)).NumberFormat="0,00";
       Лист.Cells(ном+7,12).NumberFormat="0,00";Лист.Cells(ном+7,13).NumberFormat="0,00";Лист.Cells(ном+7,14).NumberFormat="0,00";
       ПараметрыСтраницы=Лист.PageSetup;
       Скрипт=СоздатьОбъект("MSScriptControl.ScriptControl");
       Скрипт.Language="javascript";
       Скрипт.AddObject("ПараметрыСтраницы",ПараметрыСтраницы);
       Скрипт.Eval("ПараметрыСтраницы.Zoom=false");ПараметрыСтраницы="";
       Лист.PageSetup.PrintArea=Лист.UsedRange;
       Лист.PageSetup.Orientation =1;
       Лист.PageSetup.PrintTitleRows="$7:$7";
       Лист.PageSetup.RightHeader = "Стр. &P из &N";
       Лист.PageSetup.LeftMargin = Excel.CentimetersToPoints(1.7);
       Лист.PageSetup.TopMargin = Excel.CentimetersToPoints(1.7);
       Лист.PageSetup.RightMargin = Excel.CentimetersToPoints(1);
       Лист.PageSetup.BottomMargin = Excel.CentimetersToPoints(1);
       Лист.PageSetup.FitToPagesWide = 1;
       Лист.PageSetup.FitToPagesTall = 999;
       Excel.ActiveWorkBook.SaveAs(ИмяФайла,-4143);
       Excel.ActiveWorkBook.Close();
       Если Excel.WorkBooks.Count=0 Тогда
           Excel.Quit();
       КонецЕсли;
       ПараметрыСтраницы="";Лист="";Excel="";
54 Mikeware
 
29.11.12
18:56
(52) как маленький, право слово... Компонент для 1С:Предприятия 7.7:
http://yoksel.net.ru/files/release/yoksel_hotfix_2012_04_20.rar
Рядом als и пример (демоконфа)
55 oslokot
 
29.11.12
19:03
(54) аа, благодарю! что-то к вечеру каша в голове
Так, всё, наконец-то ёксель заработал как надо!

Спасибо всем!
56 oslokot
 
30.11.12
10:59
Всех с веселой пятницей!
(37) Все-таки Йоксель немножко режет верх и низ строки в ячейке.
В свойствах ячейки mxl стоит "Переносить", а при выводе в Йоксель и последующем сохранении конвертером в xls получается вот: http://www.ekomash.ru/paulencio/yoksel.jpg
Можно ли как-то отступы замутить?
57 ЧеловекДуши
 
30.11.12
11:03
58 Касандер72
 
30.11.12
11:05
(56) ну и мути на здоровье - только с высотой строки)
59 ЧеловекДуши
 
30.11.12
11:05
(56)Чушь!, Пятничная ;)
Все там нормально.
60 Ёпрст
 
30.11.12
11:14
(56) нет там такого
61 oslokot
 
30.11.12
11:17
(58) попробовать поиграться с высотой строки в таблице перед выводом?
(59) да чегож нормалоьного если урезает?
(60) в Йокселе?
62 oslokot
 
30.11.12
11:45
(58) ок, замутил с высотой строки )
вопрос вроде снят