Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 ноя 2024, 10:36

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

Автор wolf3d, 02 сен 2014, 14:12

0 Пользователей и 1 гость просматривают эту тему.

wolf3d

Давным-давно (лет 5 назад) понадобилось мне прочесть данные в 1с из Excela.. Порылся я по иннету и на одном форуме (foxclub.ru ) нашел как это сделать. Потом на основе данного примера написал выгрузку в ворд.[/size]Через некоторое время начал читать данный форум и иногда помогать людям советом. И как то раз упомянул в какойто теме что решил проблему с загрузкой/выгрузкой с сабжем. И понеслась - за эти годы я получил море просьб объяснить как я реализовал сабж, не только на этом форуме но и на паре других... Неужели так трудно погуглить и просто почитать инфу... Меня это вконец достало - прошу администрацию не удалять этот пост.В общем выкладываю сюда пример как из 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.добавить();
            вф.файл=сокрлп(имяфайла);
        КонецЕсли;
    КонецЕсли;

TreeDogNight

Аааа мои глаза... Какой некрасивый и нечитабельный код! Большинство слов с маленькой буквы, кривое название переменных... Ужас, а не код!
Один плюс, что комментарии ставишь!

wolf3d

Цитата: TreeDogNight от 02 сен 2014, 18:18
Аааа мои глаза... Какой некрасивый и нечитабельный код! Большинство слов с маленькой буквы, кривое название переменных... Ужас, а не код!
Один плюс, что комментарии ставишь!
Дружище - мне глубоко фиолетово на твои глаза - не нравиться - не читай. Я этот код кинул из РАБОЧЕЙ конфы, а не писал для твоих глазок специально. Комментарии здесь только потому что попали из первоисточника. Я, в отличие от тебя (наверное) трачу 90% своего времени на написание ПРАВИЛЬНОГО кода, а не на всякие рюшечки и красивости - вероятно у тебя полностью наоборот. То что код нечитабельный преследует свою цель - конкуренты даже если им попадет мой код - с трудом в нем разбираются (если разбираются). Наконец - система в коде есть - какая не скажу. Свой код я читаю без проблем - именно потому что ЗНАЮ систему.
И последнее - моими программами пользуется пол города уже по 5-15 лет при том что законодательство менялось А программы все работают - настройку подкорректировал и вперед. Так что дружище не тебе меня учить.

cska-fanat-kz

Для эстетов придумали ALT+SHIFT+F

wolf3d, зря вы так комментарии в коде обижаете, они иногда хорошо помогают разбираться в том, что написано (даже если исключительно тобой ;) )
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

TreeDogNight

Цитата: wolf3d от 03 сен 2014, 14:06Дружище - мне глубоко фиолетово на твои глаза - не нравиться - не читай. Я этот код кинул из РАБОЧЕЙ конфы, а не писал для твоих глазок специально. Комментарии здесь только потому что попали из первоисточника. Я, в отличие от тебя (наверное) трачу 90% своего времени на написание ПРАВИЛЬНОГО кода, а не на всякие рюшечки и красивости - вероятно у тебя полностью наоборот.
Может я потрачу на написание кода на 5 минут больше, но зато в будущем, на исправление/перенастройку процедуры я потрачу на много меньше времени.

ЦитироватьТо что код нечитабельный преследует свою цель - конкуренты даже если им попадет мой код - с трудом в нем разбираются (если разбираются).
Ты добился этой цели. Я думаю мало кто захотел разбираться в этом коде, из-за его нечитабельности.:) И ещё. Если ты не хочешь, чтобы конкуренты украли твой код, то зачем ты его выкладываешь на всеобщее обозрение?

ЦитироватьНаконец - система в коде есть - какая не скажу. Свой код я читаю без проблем - именно потому что ЗНАЮ систему.
То что система в коде есть, это видно.

ЦитироватьИ последнее - моими программами пользуется пол города уже по 5-15 лет при том что законодательство менялось А программы все работают - настройку подкорректировал и вперед. Так что дружище не тебе меня учить.
Я не собираюсь тебя учить, тем более, что судя по твоим словам, опыта работы в 1С у тебя лет на 20 больше)
Я просто выражаю свою критику. Просто на месте людей, не разбирающихся в выгрузке/загрузке данных с офиса, я бы разбирался бы в этом коде долго...







wolf3d

Цитата: cska-fanat-kz от 03 сен 2014, 15:02
Для эстетов придумали ALT+SHIFT+F

wolf3d, зря вы так комментарии в коде обижаете, они иногда хорошо помогают разбираться в том, что написано (даже если исключительно тобой ;) )
Да не обижаю я коменты - самому нравится код с коментам, просто когда пишу - редко их употребляю, потому что итак понимаю о чем речь... Правда когда то лет 10 назад писал на паскале утилиту для фидонет txt3msg - недавно разгребал завалы свои, и наткнулся на исходники данной утилиты - попытался разобраться в них - нифига не понял. :) Как я умудрился впихнуть СТОЛЬКО возможностей в ТАКОЙ МАЛЕНЬКИЙ объем? :) Но паскаль уже порядком подзабыл - таку что главное помнить язык, а комментарии так - для напоминания...

То^ TreeDogNight,
1. Я не трачу "на 5 минут дольше", я стараюсь писать универсально - трачу на это не 5 минут а сутки - зато больше к данному вопросу практически не возвращаюсь (помнишь слова о 5-15 годах использования моих программ - я то за эти года к программам и не прикасался). Приведу пример: лет 15-20 назад работал я программером в белорусском банке Инвестбанк (тогда он обзывался БелБизнесБанк) - так вот каждыые пару часов я выполнял рутинные и повторяющиеся действия - обзванивал оперционыстов - говорил им что пора закрывать "рейс", отсвылал "рейс", Получал результат предыдущего рейса, зхагружал его, опять обзвыанивал операционистов... короче меня это вконец замотало и я написал MAILPROC (коллегам из белбизнеса привет:) она с помощью батника делала 90% работы сама... Каково же было мое удивление через пару лет когда в Фидо я прочел что моя прога добралась аж до столицы и активно используется... Заметь ПАРУ ЛЕТ - т.е. написана была универсально - оттуда наверное я и начал писать так :) Еще пример : с какой весии ты узнал про "винду3"? Лично я услышал аж только про Windows 3.0 А почему? де версии 2.0 и 1.0? А в топке... Дело в том что майкрософт  раньше вкладывалав бабки (до 70% всех потраченных на разработку средств) именно в "рюшечки и красивости. А с версии 3.0 начали активно писать код - результат известен

2. Городок у нас маленький - 70 000 населения - все программеры друг друга знают и конкурренция офигенная.  выложил я код потому что а) коль я его в свое время нашел в инете - то и другие найдут и б) достали письмами - подскажи да подскажи :)

3.
4. А код на то и расчитан чтобы разбирались долго - зато когда все поймут - "вумные" станут шо ппц :)

зы. Ты уж извиняй за предыдущий мой ответ - специально писал аггрессивно - енсли бы ты повел себя неадекватно - все понятно - очередной тупой малолетка :) А ты не сорвался - у тебя большое будущее :)
зыы. Администрации - сорь за оффтоп.

TreeDogNight

wolf3d,Спасибо за продуктивный и интересный ответ! :)
Согласен с тобой, что написание правильно построенного и систематизированного кода, намного важнее, чем внешнее его оформление.
А так, при написании кода, я пытаюсь учесть все возможные ошибки, которые могут произойти, а красивое написание и оформление у меня просто вошло в привычку, ибо в некоторых вещах, я ужасный перфекционист :)

wolf3d

Цитата: TreeDogNight от 04 сен 2014, 16:12
А так, при написании кода, я пытаюсь учесть все возможные ошибки, которые могут произойти, а красивое написание и оформление у меня просто вошло в привычку, ибо в некоторых вещах, я ужасный перфекционист :)
ИМНО удобство работы важнее красивого оформления. Приведу пример (снова :) ) Представь себе службу занятости - при оформлении безработногшо они заносят в РАЗНЫЕ поля Имя, в другое поле - Фамилию, в третье - отчество. Неудобно ужасно. Но зато красиво... А почему бы просто ФИО не вносить в одно поле ввода и потом программно не разбирать на фамилию, имя и отчество - это и экономия времени (быстрее вводят) и крепче нервы (например в поле имени зафигачил отчество - стирай, пиши имя прыгай на поле отчества по новой пиши отчество - короче БЕСИТ). А теперь умножь это на месяц или год. Сколько человеко/часов данный прием сэкономит

зы.За ошибки извиняй - пишу "вслепую", с прошлого года стал инвалидом 1 группы, не могу ходить а комп находится далеко (безпроводные мышка и клава) - иногда не вижу что написано

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск