Имя: Пароль:
1C
1С v8
Загрузка из экселя на клиенте. УТ11
0 vse_serjezno
 
04.12.13
15:45
Здравствуйте.

Написала загрузку из эксельной таблицы в 1с. Да вот бяда, на сервере не установлен Эксель.
Что-то такое читала, что можно на клиенте открывать файлы... Будьте добры, подскажите, как в данном конкретном случает обойти эту проблему?..

Код внешней обработки:

&НаКлиенте
Процедура ФайлДанныхНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
    
    Режим = РежимДиалогаВыбораФайла.Открытие;
    ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(Режим);
    ДиалогОткрытияФайла.ПолноеИмяФайла = "";
    Текст = "ru = ""Excel""; en = ""Excel""";
    Фильтр = НСтр(Текст)+"(*.xls)|*.xls";
    ДиалогОткрытияФайла.Фильтр = Фильтр;
    ДиалогОткрытияФайла.МножественныйВыбор = Ложь;
    ДиалогОткрытияФайла.Заголовок = "Выберите файл";
    
    Если ДиалогОткрытияФайла.Выбрать() Тогда
        Объект.ФайлДанных = ДиалогОткрытияФайла.ПолноеИмяФайла;
        Сообщить("Выбран файл: " + ДиалогОткрытияФайла.ПолноеИмяФайла);
    Иначе
        Текст = "Файл не выбран";
        Предупреждение(Текст);
    КонецЕсли;
    
КонецПроцедуры

&НаСервере
Процедура ЗагрузитьДанныеИзФайлаСервер()
    
    ОбъектОбработкаНаСервере = РеквизитФормыВЗначение("Объект");
    ФайлДанныхНаСервере = ОбъектОбработкаНаСервере.ФайлДанных;    
    Сообщить("Идет обработка выбранного файла!..");
    Попытка
        // Загружаем Excel
        ExcelПриложение = Новый COMОбъект("Excel.Application");
    Исключение
        Сообщить("Ошибка при загрузке Microsoft Excel." + Символы.ПС + ОписаниеОшибки(), СтатусСообщения.Внимание);    
    КонецПопытки;
    
    Попытка
        // Открываем файл
        ExcelФайл = ExcelПриложение.WorkBooks.Open(ФайлДанныхНаСервере);
    Исключение
        Сообщить("Не удалось открыть файл: " + ФайлДанныхНаСервере);
    КонецПопытки;
    
    Попытка
        // Обрабатываем файл
        // Читаем первую страницу книги
        ExcelЛист = ExcelФайл.Sheets(1);
        //RangeAll = ExcelЛист.UsedRange;
        //xlCellTypeLastCell = 11;
        //ПоследняяСтрока = ExcelЛист.Cells.SpecialCells(xlCellTypeLastCell).Row;
        ПоследняяСтрока = 100;
        
        Для счетчик = 2 по ПоследняяСтрока Цикл
            НовыйПартнер = Справочники.Партнеры.СоздатьЭлемент();
            //Вводим название салона
            НазваниеСалона = СокрЛП(ExcelЛист.Cells(счетчик, 7).Value);
            НовыйПартнер.Наименование = НазваниеСалона;
            НовыйПартнер.НаименованиеПолное = НазваниеСалона;
            НовыйПартнер.Клиент = Истина;
            НовыйПартнер.ДатаРегистрации = ТекущаяДата();
            
            //Вводим телефоны
            СтрокаТелефонов = СокрЛП(ExcelЛист.Cells(счетчик, 12).Value);
            СтрокаТелефонов = СтрЗаменить(СтрокаТелефонов, " ", "");
            СтрокаТелефонов = СтрЗаменить(СтрокаТелефонов, "+", "");
            ВторойТелефонПозиция = Найти(СтрокаТелефонов, ",");
            Если ВторойТелефонПозиция > 0 Тогда
                Телефон1 = Сред(СтрокаТелефонов, 1, ВторойТелефонПозиция -1);    
                Телефон2 = Сред(СтрокаТелефонов, ВторойТелефонПозиция+1);
                НовыйПартнер.ИПМ_Телефон = Телефон1;            
            Иначе
                Телефон1 = СтрокаТелефонов;
                Телефон2 = "";
                НовыйПартнер.ИПМ_Телефон = Телефон1;
            КонецЕсли;
            
            //Вводим адрес
            СтрокаАдреса = СокрЛП(ExcelЛист.Cells(счетчик, 16).Value);
            //Заполняем специально созданный реквизит Адрес для быстрого поиска в списке
            НовыйПартнер.ИПМ_Адрес = СтрокаАдреса;
            
            СтрокаКонтактнойИнформации =  НовыйПартнер.КонтактнаяИнформация.Добавить();
            СтрокаКонтактнойИнформации.Тип = Перечисления.ТипыКонтактнойИнформации.Адрес;
            СтрокаКонтактнойИнформации.Вид = Справочники.ВидыКонтактнойИнформации.АдресПартнера;
            СтрокаКонтактнойИнформации.Представление = СтрокаАдреса;
            СтрокаКонтактнойИнформации.ЗначенияПолей = СтрокаАдреса;
            СтрокаКонтактнойИнформации.Город = СтрокаАдреса;
            
            //Вводим статус партнера
            СтрокаСтатуса = СокрЛП(ExcelЛист.Cells(счетчик, 2).Value);
            Если СтрокаСтатуса = "1" Тогда
                НовыйПартнер.СтатусПартнера = Справочники.СтатусПартнера.НайтиПоКоду(3);
            ИначеЕсли
                СтрокаСтатуса = "2" Тогда
                НовыйПартнер.СтатусПартнера = Справочники.СтатусПартнера.НайтиПоКоду(5);
            ИначеЕсли
                СтрокаСтатуса = "4" Тогда
                НовыйПартнер.СтатусПартнера = Справочники.СтатусПартнера.НайтиПоКоду(4);
            КонецЕсли;
            
            //Вводим Вид партнера, устанавливаем Виво
            НовыйПартнер.ТипПартнера = Перечисления.ТипыПартнеров.Виво;
            
            //Вводим ответственного
            СтрокаОтветственный = СокрЛП(ExcelЛист.Cells(счетчик, 13).Value);
            ПозицияКонцаФамилии = Найти(СтрокаОтветственный, " ");
            ФамилияОтветственного = СокрЛП(Сред(СтрокаОтветственный, 1, ПозицияКонцаФамилии));
            Если ФамилияОтветственного = "Егорова" Тогда
                НовыйПартнер.ОсновнойМенеджер = Справочники.Пользователи.НайтиПоНаименованию("Егорова Анна Сергеевна");
            ИначеЕсли
                ФамилияОтветственного = "Никандрова" Тогда
                НовыйПартнер.ОсновнойМенеджер = Справочники.Пользователи.НайтиПоНаименованию("Никандрова Елена Евгеньевна");
            ИначеЕсли
                ФамилияОтветственного = "Балашова" Тогда
                НовыйПартнер.ОсновнойМенеджер = Справочники.Пользователи.НайтиПоНаименованию("Балашова Любовь Викторовна");
            ИначеЕсли
                ФамилияОтветственного = "Толмачева" Тогда
                НовыйПартнер.ОсновнойМенеджер = Справочники.Пользователи.НайтиПоНаименованию("Толмачева Ирина");
            КонецЕсли;
            
            //Вводим электронную почту
            СтрокаЕмэйл = СокрЛП(ExcelЛист.Cells(счетчик, 15).Value);
                        
            //Вводим дополнительную информацию
            СтрокаЧемПользуются = СокрЛП(ExcelЛист.Cells(счетчик, 1).Value);
            СтрокаДатаЗвонкаВстречи = Сред(СокрЛП(ExcelЛист.Cells(счетчик, 3).Value),1,11);
            СтрокаКонтактноеЛицо = СокрЛП(ExcelЛист.Cells(счетчик, 5).Value);
            СтрокаВидЗакупки = СокрЛП(ExcelЛист.Cells(счетчик, 6).Value);
            СтрокаКомментарий = СокрЛП(ExcelЛист.Cells(счетчик, 8).Value);
            СтрокаКомментарийПослеПрезентации = СокрЛП(ExcelЛист.Cells(счетчик, 9).Value);
            СтрокаПрезентацияСалона = СокрЛП(ExcelЛист.Cells(счетчик, 10).Value);
            СтрокаДатаВремяСледующегоЗвонка = Сред(СокрЛП(ExcelЛист.Cells(счетчик, 11).Value),1, 11);
            СтрокаСайт = СокрЛП(ExcelЛист.Cells(счетчик, 14).Value);
            СтрокаУслуги = СокрЛП(ExcelЛист.Cells(счетчик, 18).Value);
            СтрокаЧасыРаботы = СокрЛП(ExcelЛист.Cells(счетчик, 19).Value);
            
            ТекстДопИнформации = "Контактное Лицо: "+СтрокаКонтактноеЛицо+";       Пользуются: "+СтрокаЧемПользуются+ ";        Вид закупки: "+ СтрокаВидЗакупки+ ";" +Символы.ПС+
                                 "  "+Символы.ПС+
                                 "Список телефонов: "+Телефон1+" , "+Телефон2+Символы.ПС+
                                 "  "+Символы.ПС+
                                 "E-mail: " + СтрокаЕмэйл+ Символы.ПС+
                                 "  "+Символы.ПС+
                                 "Адрес: "+ СтрокаАдреса+ Символы.ПС+
                                 "  "+Символы.ПС+
                                 "Дата звонка/встречи: " + СтрокаДатаЗвонкаВстречи +";      Дата следующего контакта: "+ СтрокаДатаВремяСледующегоЗвонка +Символы.ПС +
                                 "Сайт организации: "+ СтрокаСайт + Символы.ПС+
                                 "  "+Символы.ПС+
                                 "Услуги: "+СтрокаУслуги + Символы.ПС +
                                 "  "+Символы.ПС+
                                 "Часы работы: " + СтрокаЧасыРаботы + Символы.ПС +
                                 "  "+Символы.ПС+
                                 "Комментарий: "+ СтрокаКомментарий+Символы.ПС+
                                 "  "+Символы.ПС+
                                 "ПрезентацияСалона:"+СтрокаПрезентацияСалона+ Символы.ПС+
                                 "  "+Символы.ПС+
                                 "Комментарий после презентации: "+СтрокаКомментарийПослеПрезентации;
            НовыйПартнер.ДополнительнаяИнформация = ТекстДопИнформации;
            
            
            //Вводим комментарий
            НовыйПартнер.Комментарий = "Партнер добавлен из таблицы Excel";
            
            //Записываем партнера
            НовыйПартнер.Записать();
        КонецЦикла;
        ExcelПриложение.Quit();
        
    Исключение
        Сообщить("Ошибка открытия листа №1 Microsoft Excel." + Символы.ПС + ОписаниеОшибки(), СтатусСообщения.Внимание);
        // Закрыть COM соединение для экономии памяти
        ExcelПриложение.Quit();
    КонецПопытки    

КонецПроцедуры
1 vse_serjezno
 
04.12.13
15:48
Если на клиенте открывать приложение, получать файл:
Попытка
        // Загружаем Excel
        ExcelПриложение = Новый COMОбъект("Excel.Application");
    Исключение
        Сообщить("Ошибка при загрузке Microsoft Excel." + Символы.ПС + ОписаниеОшибки(), СтатусСообщения.Внимание);    
    КонецПопытки;
    
    Попытка
        // Открываем файл
        ExcelФайл = ExcelПриложение.WorkBooks.Open(ФайлДанныхНаСервере);
    Исключение
        Сообщить("Не удалось открыть файл: " + ФайлДанныхНаСервере);
    КонецПопытки;


А потом передавать его в процедуру на сервер, он будет там читаться?..
2 banco
 
04.12.13
15:55
(1) можешь прочитать весь файл на клиенте и потом передавать прочитанное на сервер для обработки
3 DexterMorgan
 
04.12.13
15:56
АДО
4 vse_serjezno
 
04.12.13
15:57
(2) Как выглядит "прочитать весь файл"?.. можно поподробнее?..
5 vse_serjezno
 
04.12.13
15:59
Мне потом еще нужно будет выгрузку из 1с в Эксель делать...((
печаль, бяда, что он на сервере не установлен...
6 banco
 
04.12.13
15:59
(4) можешь в том же ут 11 посмотреть в документе "установка цен номенклатуры" загрузка из Excel
7 vse_serjezno
 
04.12.13
16:07
(6) Она там на с клиента читает чтоли?
Независимо от того, куда вы едете — это в гору и против ветра!