Имя: Пароль:
1C
1C 7.7
v7: Некорректное отображение таблицы из 1С в Exсel
0 never_sleep
 
28.10.15
12:18
Сохраняю печатную форму из программы в формат xls. Если открывать в Excel'е табличка отображается некорректно. Пропадает вертикальное направление текста, и пожимаются некоторые колонки по высоте. Но если открыть в Опен-офисе, то все пучком. Проблема в том, что таблички рассылаем в более чем 140 детских садов. А там, в подавляющем большинстве, именно пакет от майкрософта. Проблема усугубляется тем, что со стороны дет.садов, как правило, нет грамотных пользователей, и правка таблицы для них задача нетривиальная. Как быть?
1 cw014
 
28.10.15
12:19
1) Формировать руками
2) Отправлять PDF
2 Ёпрст
 
28.10.15
12:20
сохраняй йокселем, там не ломается форматирование документа
3 Tatitutu
 
28.10.15
12:21
(0) у Злопочинского есть обалденная обработка - она печатную форму в jpg одной кнопкой преобразует и отправляет по почте. В поиск
4 never_sleep
 
28.10.15
12:37
(1) Попробуем. Правда, придется накатить в подавляющем большинстве садиков просмотрщик ПДФ (разошлю всем по почте суматру с инструкцией). Главное, чтобы на местах не приспичило никому ничего править.
5 cw014
 
28.10.15
12:38
(4) Дык ридер бесплатный
6 never_sleep
 
28.10.15
12:39
(3) А там форму приходится на 2 стороны одного листа печатать. С картинкой, боюсь, будут проблемы. Или заблуждаюсь?
7 Dump
 
28.10.15
12:39
Пиши напрямую в файл Excel - не через файл-сохранить - и жестко задавай нужные параметры. Правда, возни гораздо больше.
8 never_sleep
 
28.10.15
12:41
(5) Ридер уже за 100 метров весит. Тормозит при запуске на нормальных машинах. Ставит вкупе адоб эйр. А в садиках как правило железо лет 10 как устаревшее. Суматра всего несколько мегабайт и без доп мусора.
9 never_sleep
 
28.10.15
12:42
(7) Это крайний вариант, надеюсь не дойдет)
10 Dump
 
28.10.15
12:44
(9) Главное знать о такой возможности и ее учитывать
11 never_sleep
 
28.10.15
12:53
(2) А ей можно воспользоваться не переписывая весь код? Есть заполненный объект "Таблица". Как мне (в двух словах) йокселем сохранить её без потери форматирования в эксель? Или мне изначально нужно использовать вместо "Таблица" объекты Йокселя?
12 cw014
 
28.10.15
12:55
(12) Есть код преобразовывающий макет mxl в xls
13 never_sleep
 
28.10.15
12:55
(10) А это каким макаром происходит? ОЛЕ?
14 trdm
 
28.10.15
12:56
(8) > Ридер уже за 100 метров весит.

Можно выбрать адекватную версию:
http://www.oldapps.com/foxit_reader.php
Я себе 3.3.0.... поставил.
15 trdm
 
28.10.15
12:58
Можно и адоб ридер присмотреть: http://www.oldapps.com/adobe_reader.php
16 never_sleep
 
28.10.15
13:01
(15) Ну у меня везде суматра. Прикипел. Жаль только формы с полями ввода некорректно отображает (на загранпаспорт, например). Плюс в суматре отлично открываются djvu. Для сложных документов у меня адоб ридер свежий стоит, правда. На всякий.
17 Масянька
 
28.10.15
13:06
(13) Я сделала в панели инструментов кнопку, на нее повесила внешнюю обработку:

Перем мСервис;
Перем АктивныйКонтекст;
Перем ИмяФайла;
Перем НачИмяКаталога;
Перем ИмяТаблицы;
Перем Окна;

//********************************************************************************
Процедура ПриОткрытии()
    
    НачИмяКаталога    = "\\MANAGER2\Desktop";
    
    мСервис     = СоздатьОбъект("Сервис");
    РасшФормы     = СоздатьОбъект("РасширениеФормы");
    
    СтатусВозврата(0);

    ИмяФайла = "";
    
    Если (мСервис.АктивныйКонтекст(АктивныйКонтекст) = 1) Тогда
        Если (ТипЗначенияСтр(АктивныйКонтекст) = "Таблица") Тогда
            // получим имя таблицы
            Окна = мСервис.СписокТаблиц();
            Окна.ПолучитьЗначение(1, ИмяТаблицы);

            // товарная накладная, акты
            мРеализация = Найти(ИмяТаблицы, "Реализация");                
            Если мРеализация > 0 Тогда                    
                ИмяФайла = СокрЛП(СтрЗаменить(ИмяТаблицы, "*", ""));    //  из документа "Реализация"
                Если Найти(ИмяТаблицы, "mxl") > 0 Тогда                    //  из документа "Счет"
                    мВременно = Сред(ИмяФайла, мРеализация);
                    мДлинаВременно = СтрДлина(мВременно);
                    ИмяФайла = Лев(мВременно, мДлинаВременно - 4);
                КонецЕсли;
            КонецЕсли;
            
            // счет-фактура
            мСчетФактура = Найти(ИмяТаблицы, "Счет-фактура");            
            Если мСчетФактура > 0 Тогда         
                ИмяФайла = СокрЛП(СтрЗаменить(ИмяТаблицы, "*", ""));    // из документа "Счет-фактура"
                Если Найти(ИмяТаблицы, "mxl") > 0 Тогда                    // из документа "Счет"
                    мВременно = Сред(ИмяФайла, мСчетФактура);
                    мДлинаВременно = СтрДлина(мВременно);
                    ИмяФайла = Лев(мВременно, мДлинаВременно - 4);
                КонецЕсли;
            КонецЕсли;
            
            // другая печатная форма
            Если (СтрДлина(СокрЛП(ИмяФайла)) = 0) Тогда
                ИмяФайла = СокрЛП(СтрЗаменить(ИмяТаблицы, "*", ""));    // из документа "Счет-фактура"
            КонецЕсли;

            Если (ФС.ВыбратьФайл(1, ИмяФайла, НачИмяКаталога, "Выберите файл", "*.xls|*.xls", "xls") = 1) Тогда
                
                СохранитьМакетВфайл = НачИмяКаталога + ИмяФайла;
                
                Если ФС.СуществуетФайл(СохранитьМакетВфайл) = 1 Тогда
                    ФС.УдалитьФайл(СохранитьМакетВфайл);
                КонецЕсли;
                
                ТабДокумент = СоздатьОбъект ("ТабличныйДокумент");
                ТабДокумент.ЗагрузитьИзТаблицы (АктивныйКонтекст);
                ТабДокумент.Записать(СохранитьМакетВфайл, 1);
            КонецЕсли;
        Иначе
            Предупреждение("Нет открытой печатной формы.");
        КонецЕсли;
    Иначе
        Предупреждение("Для начала - откройте печатную форму.");
    КонецЕсли;
    
КонецПроцедуры // ПриОткрытии

+ mxl_doctor.dll
Усё.
18 never_sleep
 
28.10.15
14:48
(17) Круто конечно. А чтобы это заработало, нужен только mxl_doctor.dll?
19 Масянька
 
28.10.15
14:53
(18) Да ничего там крутого нет.
По-моему, да.
20 dmrjan
 
28.10.15
17:54
Можно еще в xlsx выгружать.
21 Злопчинский
 
28.10.15
18:35
(3)
- ну не у Злопчинского, а у "уважаемого Сергея Михайловича"
- и не в jpg, а в PNG - 1эсные моксели прекрасно жмутся в пнг лучше чем в джпег и без потери качества
- эта же обработочка йокселем и в эксели сохраняет (у меня ей манагмент отправляет доки клиентам на распечатку, никто не жаловался)
- в пдф не делал, лень было (так как лично мне не надо, все собираюсь прикрутить, да все влом, более интересных задач есть)

http://catalog.mista.ru/public/14180/
22 Злопчинский
 
28.10.15
18:36
(17) сойдет конечно... но не схватит прикрепленную печформу (регламентную отчетность например), а моя схватывает (спасибо Епрсту)
23 Масянька
 
29.10.15
08:01
(22) Что значит "прикрепленную"? Моя хватает открытую печ. форму.
А Ё не просто "спасибо", а низкий поклон.
24 vladimirmir2012
 
29.10.15
08:49
(0)У меня так /на примере Йокселя/

mxl => xls

обТаблица01 = СоздатьОбъект ( "ТабличныйДокумент" );

обТаблица01.ЗагрузитьИзТаблицы(
  Таблица1C
);

// --- Формат файла:
//      0 или “mxl”  – формат MXL (формат встроенных в 1С табличных документов). Файл записывается в формате версии 7 – версии, когда появился поворот текста в ячейке. Поэтому старыми релизами 1С (меньше 23) файл читаться не будет.
//
//      1 или “xls”  – формат Microsoft Excel. При сохранении создается книга с одним листом под названием «Лист 1". В этот лист записывается табличный документ. Если в книгу нужно записывать несколько листов, то
//                     следует использовать объект "КонвертерExcel".
//
//      4 или “bmp”  – формат BMP. Сохраняет изображение документа в формате BMP.
//      5 или “jpeg” – формат JPEG. Сохраняет изображение документа в формате JPEG.
//      6 или “png”  – формат PNG. Сохраняет изображение документа в формате PNG.
//
обТаблица01.Записать(
  FullPathToReport02,
  1                                                      // 1 или “xls” – формат Microsoft Excel.
);
25 Ёпрст
 
29.10.15
09:12
(11) на вот, в меню, в панели струментов слепишь такую вот кнопку (можешь еще и акселератор назначить, для удобства):

http://pics.rsh.ru/img/123_5kgr1rpb.jpg
там пропишешь вызов этого
https://cloud.mail.ru/public/8amK/1xyHcTWqQ
всё собственна, наслаждайся
26 Масянька
 
29.10.15
09:18
(25) Я уже в (17) положила :)
Кстати, в очередной раз - Спасибо! :)
27 Ёпрст
 
29.10.15
09:25
(26) у тебя немного не то - нет сохранения макета. если это таблица РВД (например, вся рег отчетность в 1с-ине) + нет сохранения в PDF
28 Масянька
 
29.10.15
09:57
(27) Для pdf у меня другая кнопка. А по отчетности - закдача не стояла. :)
29 never_sleep
 
05.11.15
13:08
Ёпрст, Масянька, уважаемый Сергей Михайлович и всем остальным, вам огромное спасибо!
30 botman4
 
07.11.15
11:35
А чтобы это заработало, нужен только mxl_doctor.dll?
чтобы заработало нужно
ЗагрузитьВнешнююКомпоненту ("FormEx.dll");
31 Злопчинский
 
07.11.15
12:17
(30) набери в яндексе "Проект Йоксель" - выйдешь на страничку разработчика
32 Масянька
 
09.11.15
10:11
(29) А кто такой Сергей Михайлович?
33 ДенисЧ
 
09.11.15
10:13
(32) Маленькая ты ещё, чтобы знать это ))))
34 Масянька
 
09.11.15
10:15
(33) И-и-извините...
35 шаэс
 
09.11.15
14:01
(34) ну ты что? Злопчинский же
36 Масянька
 
09.11.15
14:05
(35) Там не написано (отечество).
Тогда вопрос к ТС: ладно я, а Ё не уважаемый?! :)))))))))))
37 шаэс
 
09.11.15
14:09
(36) а ты всю ветку читала? например, (21)?
38 Масянька
 
09.11.15
14:13
(37) Читала... Даже не подумала... :)))))))))
39 Tatitutu
 
09.11.15
14:14
(21) тогда уж : у CheBurator
если быть точным ))))
40 Масянька
 
09.11.15
14:16
(39) Началось...
"Кто ж его посадит? Он же - ПАМЯТНИК!" (С)
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший