8.х Выгрузка данных в word или Excel

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем wolf3d, 2 сен 2014.

  1. TopicStarter Overlay
    wolf3d
    Offline

    wolf3d Опытный в 1С

    Регистрация:
    5 мар 2011
    Сообщения:
    83
    Симпатии:
    0
    Баллы:
    26
    Давным-давно (лет 5 назад) понадобилось мне прочесть данные в 1с из Excela.. Порылся я по иннету и на одном форуме (foxclub.ru ) нашел как это сделать. Потом на основе данного примера написал выгрузку в ворд.
    Через некоторое время начал читать данный форум и иногда помогать людям советом. И как то раз упомянул в какойто теме что решил проблему с загрузкой/выгрузкой с сабжем. И понеслась - за эти годы я получил море просьб объяснить как я реализовал сабж, не только на этом форуме но и на паре других... Неужели так трудно погуглить и просто почитать инфу... Меня это вконец достало - прошу администрацию не удалять этот пост.В общем выкладываю сюда пример как из 1с загрузить информацию из Excela. с Word я думаю сами разберетесь на основе данного примера. Еще раз повторяю - автор не я (я просто переделал пример под свои нужды) - автор на форуме указанном вверху - помоему пример там даже в FAQ вынесен. Итак погнали:

    --------
    ВУ свое время кроме собственно программирования я еще и вел учет поступающего товара. И самые большие поставщики высылали на почту файлик с подтверждекнием. В файлике был описан перечень товара, его цена, количество, точка которая заказала (у нас магазины сами заказы делают) - короче вся необходимая инфа. А накладные от 1 до 300 позиций - чтобы их внести иногда требовался целый днь. И так ежедневно. А я по природе лентяй :) - зачем мне пахать когда стоит комп - пусть он пашет - он жалезный :). И как-то раз меня посетила идея грузить накладные а не вбивать их. Написал я обработку - процесс вбивания накладных сократился минут до 40...
    Поставшик Новый город (в примере - НГ) шлет накладные в формате .xls, а поставщик Шате-М (в примере ШМ) - в формате .csv Это я пишу чтобы было понятней разобраться в примере.

    Код:
    Процедура ИмяФайлаПриИзменении()
        имяфайла="";
        если пустаястрока(флНомерНакл) = истина тогда
            имяфайла=открытиеФайла();
        иначе
            имяфайла=флНомерНакл;
        КонецЕсли;
        состояние("Очистка временного справочника");
    // поиск группы "загрузка накладной"  если нету  создаем
        фл=0;
        кодродителя=неопределено;
        выб=справочники.Временный.ВыбратьИерархически();
        пока выб.следующий() цикл
            ОбработкаПрерыванияПользователя();
            если выб.этогруппа = истина тогда
                если сокрлп(выб.наименование) = "Загрузка накладной" тогда
                    фл=1;
                    кодродителя=выб.код;
                    прервать;
                КонецЕсли;
            КонецЕсли;
        КонецЦикла;
        если фл = 0 тогда
            вв=справочники.Временный.СоздатьГруппу();
            вв.наименование="Загрузка накладной";
            кодродителя=вв.код;
            вв.записать();
            кодродителя=вв.код;
        КонецЕсли;
    //очистка группы
        фл=0;
        выб=справочники.Временный.ВыбратьИерархически();
        пока выб.следующий() цикл
            ОбработкаПрерыванияПользователя();
            если выб.этогруппа = истина тогда
                если сокрлп(выб.наименование) = "Загрузка накладной" тогда
                    фл=1;
                КонецЕсли;
                продолжить;
            КонецЕсли;
            если фл=1 тогда
                если сокрлп(выб.родитель.наименование) = "Загрузка накладной" тогда
                    вв=выб.ссылка.получитьобъект();
                    вв.удалить();
                КонецЕсли;
                если сокрлп(выб.родитель.наименование) <> "Загрузка накладной" тогда
                    прервать;
                КонецЕсли;
            КонецЕсли;
        КонецЦикла;
     
    // обработка НГ в Екселе 
        если элементыформы.ТипФайла.Значение = перечисления.ТипыФайлов.Excel тогда
            орг = справочники.Организации.НайтиПоКоду(офдопнастр("СсылкаНаНГДляОбработкиЭТТН","ЛС").код);
            если Организация.код = орг.код тогда
    //Номер листа в книге Excel для получения данных
                НомерЛиста = 1;
     
        //Пытаемся подключиться к Excel
               Попытка
                   Excel = новый COMОбъект("Excel.Application");
              Исключение
                  Сообщить("Похоже, Excel на компьютере не установлен. Необходимо выполнить установку/переустановку Excel.");
                  Возврат;
               КонецПопытки;  
     
        //Подключились удачно, открываем файл
               Excel.Workbooks.Open(сокрлп(имяфайла));
     
        //Открываем необходимый лист
              Excel.Sheets(1).select();
     
        //Определяем количество строк и колонок в листе
                  ВсегоКолонок = Excel.Cells (1,1).SpecialCells (11).Column;
                ВсегоСтрок = Excel.Cells (1,1).SpecialCells (11).Row;
                фл=0;
                Для яя=1  по ВсегоСтрок Цикл
                    зн= сокрлп(Строка(Excel.Cells(яя,элементыформы.ПолеВвода1.Значение).Value));
                    если зн = сокрлп(элементыформы.ПолеВвода6.Значение) тогда
                        фл=1;
                        продолжить;
                    КонецЕсли;
                    если фл=1 тогда
                        если пустаястрока(сокрлп(Строка(Excel.Cells(яя,2).Value))) = истина тогда
                            прервать;
                        КонецЕсли;
                        вв=табличнаячасть1.добавить();
                        вв.номердлязаказа=сокрлп(Строка(Excel.Cells(яя,2).Value));
                        вв.КодДляНГ=сокрлп(Строка(Excel.Cells(яя,2).Value));
                        вв.количество=число(сокрлп(Строка(Excel.Cells(яя,элементыформы.ПолеВвода2.Значение).Value)));
                        вв.цена=число(сокрлп(Строка(Excel.Cells(яя,элементыформы.ПолеВвода1.Значение).Value)))/вв.количество;;
                        вр=сокрлп(Строка(Excel.Cells(яя,3).Value));
                        вв.номертовара=слово(вр,"_");
                        вв.номердлязаказа=вв.номертовара;
                        если лев(вр,1) = "=" тогда
                            вр1=слово(вр,"=");
                        КонецЕсли;
                        вв.аналоги=слово(вр,"!");
                        вв.группа=слово(вр,"\");
                        вв.примечание=вр;
                    КонецЕсли;
                    состояние("Обработана строка: "+строка(яя));
                КонецЦикла;
                Excel.ActiveWorkbook.Close();
                вф=табличнаячасть2.добавить();
                вф.файл=сокрлп(имяфайла);
            КонецЕсли;
        КонецЕсли;
    
    
    // обработка ШМ в CSV
        если элементыформы.ТипФайла.Значение = перечисления.ТипыФайлов.csv тогда
            орг = справочники.Организации.НайтиПоКоду(офдопнастр("СсылкаНаШМДляОбработкиЭТТН","ЛС").код);
            если Организация.код = орг.код тогда
                ф=новый текстовыйдокумент;
                ф.прочитать(сокрлп(имяфайла));
                колст=ф.количествострок();
                для яя=1 по колст цикл
                    если яя=1 тогда
                        продолжить;
                    КонецЕсли;
                    ст=ф.получитьстроку(яя);
                    если пустаястрока(ст) = истина тогда
                        прервать;
                    КонецЕсли;
                    вв=табличнаячасть1.добавить();
                    вв.номертовара=слово(ст,"_");
                 
                    вв.номердлязаказа=сокрлп(вв.номертовара)+"_"+сокрлп(слово(ст,";"));
                    вв.количество=число(сокрлп(слово(ст,";")));
                    вр=слово(ст,";");
                    вр=слово(ст,";");
                    вв.цена=число(слово(ст,";"));
                   вр=слово(ст,";");
                    вв.группа=слово(ст,";");
                    вр=слово(ст,";");
                    состояние("Обработана строка: "+строка(яя));
                КонецЦикла;
                вф=табличнаячасть2.добавить();
                вф.файл=сокрлп(имяфайла);
            КонецЕсли;
        КонецЕсли;

Поделиться этой страницей