Загрузка из Excel с выбором листа на управляемых формах

21.09.22

Интеграция - Загрузка и выгрузка в Excel

В помощь тем, кому нужно быстро реализовать кнопку загрузки из Excel на управляемых формах платформы 1С 8.3.

Скачать файлы

Наименование Файл Версия Размер
Загрузка из Excel с выбором листа на управляемых формах:
.epf 10,58Kb
8
.epf 10,58Kb 8 Скачать

Для работы этого способа необходимо чтобы на компьютере пользователя был установлен MS Excel.

1) Создайте пустую форму и отредактируйте её модуль

`

 


///*
//* Copyright (c) 2022, Ilham Djumatov. All rights reserved.
//* Copyrights licensed under the GNU GPLv3.
//* See the accompanying LICENSE file for terms.
//*/

&AtClient
Var ExcelApp;
&AtClient
Var Book;
&AtClient
Var Sheet;

&AtServer
Procedure OnCreateAtServer(Cancel, StandardProcessing)
    
    // Реквизиты формы
    AttributesToAdd = New Array;
    AttributesToAdd.Add(New FormAttribute("FirstRow",     New TypeDescription("Number", New NumberQualifiers(10, 0)), ""));
    AttributesToAdd.Add(New FormAttribute("FirstCol",     New TypeDescription("Number", New NumberQualifiers(10, 0)), ""));
    AttributesToAdd.Add(New FormAttribute("LastRow",      New TypeDescription("Number", New NumberQualifiers(10, 0)), ""));
    AttributesToAdd.Add(New FormAttribute("LastCol",      New TypeDescription("Number", New NumberQualifiers(10, 0)), ""));
    AttributesToAdd.Add(New FormAttribute("List",         New TypeDescription("ValueList"), ""));
    ChangeAttributes(AttributesToAdd);
    
    Parameters.Свойство("FirstRow",     ThisObject["FirstRow"]);
    Parameters.Свойство("FirstCol",     ThisObject["FirstCol"]);
    Parameters.Свойство("LastRow",      ThisObject["LastRow"]);
    Parameters.Свойство("LastCol",      ThisObject["LastCol"]);
    
    If ThisObject["FirstRow"] = 0 Then
        ThisObject["FirstRow"] = 1;
    EndIf;
    
    If ThisObject["FirstCol"] = 0 Then
        ThisObject["FirstCol"] = 1;
    EndIf;
    
    ThisForm.CommandBar.Visible = False;
    ThisForm.Title = "Выберите лист";
    ThisForm.AutoTitle = False;
    ThisForm.WindowOpeningMode = FormWindowOpeningMode.Independent;
    
    Item = Items.Add("List", Type("FormTable"));
    Item.DataPath = "List";
    Item.ReadOnly = True;
    Item.CommandBar.Visible = False;
    Item.SetAction("Selection", "ListSelection");
    
    Item = Items.Add("ListValue", Type("FormField"), Items["List"]);
    Item.DataPath = "List.Value";
    
EndProcedure

&AtClient
Procedure ListSelection(Item, SelectedValue, Field, StandardProcessing)
    
    Status("Выполняется чтение данных");
    
    FirstRow = ThisObject["FirstRow"];
	FirstCol = ThisObject["FirstCol"];
	LastRow = ThisObject["LastRow"];
	LastCol = ThisObject["LastCol"];
    
    WorksheetNumber = Item.CurrentData.Value;
    Try // Открываем лист
        Sheet = Book.WorkSheets(WorksheetNumber);
    Except
        ShowMessageBox(, "Не удалось открыть лист.");
        Return;
    EndTry;
    
    // Определение версии EXCEL.
    Version = Left(ExcelApp.Version,Найти(ExcelApp.Version,".")-1);
    ColCount = 0;
    RowCount = 0;
    If Version = "8" Then
        ColCount = Sheet.Cells.CurrentRegion.Columns.Count;
        RowCount = Sheet.Cells.CurrentRegion.Rows.Count;
    Else 
        // Метод SpecialCells не отображает только количество в области
        // если в области несколько областей, то количество получится неверным
        //ColCount = Sheet.Cells.SpecialCells(11).Column;
        //RowCount = Sheet.Cells.SpecialCells(11).Row;
        
        // Метод UsedRange количество использованных ячеек
        // если первая стрчка или колонка пропущены и то они не будут включаться в количество
        ColCount = Sheet.UsedRange.Columns.Count;
        RowCount = Sheet.UsedRange.Rows.Count;
        
        // Вычисляем правильное количество колонок и строк
        ColCount = Sheet.UsedRange.Column + Sheet.UsedRange.Columns.Count-1;
        RowCount = Sheet.UsedRange.Row + Sheet.UsedRange.Rows.Count-1;
    EndIf;
    
    If LastCol = 0 Then
        LastCol = ColCount;
    ElsIf ColCount < LastCol Then // не хватает колонок //Увеличение проверочного числа (как и захваченной области в самих документах) на дополнительные колонки
        ShowMessageBox(, "В файле не хватает колонок.");
        Return;
    EndIf;
    
    If LastRow = 0 Then
        LastRow = RowCount;
    ElsIf RowCount < LastRow Then // не хватает строк
        ShowMessageBox(, "В файле не хватает строк.");
        Return;
    EndIf;
    
    Range = Sheet.Range(Sheet.Cells(FirstRow,FirstCol), Sheet.Cells(LastRow,LastCol));
    Data = Range.Value.Unload();
    
    NotifyChoice(Data);
    
EndProcedure

&AtClient
Procedure OnOpen(Cancel)
    
    Dialog = New FileDialog(FileDialogMode.Open);
    Dialog.Title = "Выберите файл";
    Dialog.FullFileName = "";
    Dialog.Filter = "Excel документ (*.xls/*.xlsx)|*.xls?";
    Dialog.Multiselect = False;
    Dialog.Directory = "С:\";
    
    Notify = New NotifyDescription("ProcessFileSelection", ThisObject);
    Try
        BeginPuttingFiles(Notify,Dialog, True);
    Except
        ErrorDescription = ErrorDescription();
        ErrorInfo = ErrorInfo();
        If Find(ErrorDescription, "32(0x00000020)") > 0 Then 
            ShowMessageBox(, "Ошибка совместного доступа к файлу. Пожалуйста сперва закройте файл.");
        Else 
            ShowMessageBox(, ErrorDescription);
        EndIf;
        Cancel = True;
    EndTry;
    
    If Dialog.SelectedFiles.Count() = 0 Then 
        Cancel = True;
    EndIf;
    
EndProcedure

&AtClient
Procedure ProcessFileSelection(Files, Params) Export 
    If Files <> Undefined Then 
        For Each TransferedFileDescription In Files Do 
            File = New File(TransferedFileDescription.FullName);
            Notify = New NotifyDescription("ProcessFile", ThisObject, File);
            File.НачатьПроверкуСуществования(Notify);
        EndDo;
    Else 
        Close();
    EndIf;
EndProcedure

&AtClient
Procedure ProcessFile(Exists, File) Export 
    
    If Exists Then
        
        Status("Выполняется чтение листов");
        
        FilePath = File.FullName;
        
        Try
            ExcelApp = New COMОбъект("Excel.Application");
        Except
            Закрыть();
            Return;
        EndTry;
        
        ExcelApp.DisplayAlerts = False;
        ExcelApp.FileValidation = 1;
        
        Try // Открываем файл
            Book = ExcelApp.Workbooks.Open(FilePath);
        Except
            // Debug
            ErrorInfo = ErrorInfo();
            ErrorDescription = ErrorDescription();
            // App
            ExcelApp.Quit();
            ExcelApp = NULL;
            Close();
            Return;
        EndTry;
        
        For SheetNumber = 1 To Book.WorkSheets.Count Do
            ThisObject["List"].Add(SheetNumber, Book.WorkSheets(SheetNumber).Name);
        EndDo;
    Else 
        ShowMessageBox(, "Файл не найден: " + File.FullName);
        Close();
    EndIf;
    
EndProcedure

&AtClient
Procedure BeforeClose(Cancel, Exit, MessageText, StandardProcessing)
    
    If Book <> Undefined Then
        Try
            Book.Close();
        Except
            // Debug
            ErrorInfo = ErrorInfo();
            ErrorDescription = ErrorDescription();
        EndTry;
    EndIf;
    Book = NULL;
    
    // App
    If ExcelApp <> Undefined Then
        Try
            ExcelApp.Quit();
        Except
            // Debug
            ErrorInfo = ErrorInfo();
            ErrorDescription = ErrorDescription();
        EndTry;
    EndIf;
    ExcelApp = NULL;
    
EndProcedure

// Прикрепим обработчики событий
#If Server Then
ThisForm.SetAction("OnCreateAtServer", "OnCreateAtServer");
ThisForm.SetAction("OnOpen", "OnOpen");
ThisForm.SetAction("BeforeClose", "BeforeClose");
#EndIf

 

 

2) Протестируйте загрузку

 

 


&НаСервере
Процедура ЗагрузкаНаСервере(МассивКолонкиСтроки)
    
    // Мы знаем с какой строчки начинаются данные в загружаемом шаблоне
    Для НомерСтроки = 3 По МассивКолонкиСтроки[0].Количество() Цикл 
        
        // Мы знаем в каких колонках содержатся данные в загружаемом шаблоне
        Знч1 = МассивКолонкиСтроки[1-1][НомерСтроки-1]; // Значение R{ИндексСтроки}C1
        Знч2 = МассивКолонкиСтроки[2-1][НомерСтроки-1]; // Значение R{ИндексСтроки}C2
        Знч3 = МассивКолонкиСтроки[3-1][НомерСтроки-1]; // Значение R{ИндексСтроки}C2
        
        // Если в указанной ячейке нету данных то пропускаем эту строчку
        Если ПустаяСтрока(Знч1) Тогда 
            Продолжить;
        КонецЕсли;
        
        Сообщить("" + Знч1 + Символы.Таб + Знч2 + Символы.Таб + Знч3);
        
    КонецЦикла;
    
КонецПроцедуры

&НаКлиенте
Процедура ОбработкаКомандыЗагрузка(Результат, Параметры) Экспорт 
    
    Если Результат = Неопределено Тогда 
    ИначеЕсли ТипЗнч(Результат) = Тип("Массив") Тогда 
        // Проверяем количество колонок в загружаемом шаблоне
        Если Результат.Количество() < 3 Тогда 
            ПоказатьПредупреждение(,"Ошибка! В файле не хватает колонок.");
        Иначе
            // Проверяем определённые ячейки загружаемого шаблона
            ШаблонПодходит = Истина;
            ШаблонПодходит = ШаблонПодходит И Найти(Результат[01-1][2-1], "Сотрудник") > 0;
            ШаблонПодходит = ШаблонПодходит И Найти(Результат[02-1][2-1], "Должность") > 0;
            ШаблонПодходит = ШаблонПодходит И Найти(Результат[03-1][2-1], "Оклад") > 0;
            Если ШаблонПодходит Тогда 
                ЗагрузкаНаСервере(Результат);
                ПоказатьПредупреждение(, "Готово!");
            Иначе 
                ПоказатьПредупреждение(, "Выбран не корректный файл для загрузки.");
            КонецЕсли;
        КонецЕсли;
    Иначе 
        ПоказатьПредупреждение(, "Загрузка не поддерживается.");
    КонецЕсли;
    
КонецПроцедуры

&НаКлиенте
Процедура Загрузка(Команда)
    П = Новый Структура;
    Оповещение = Новый ОписаниеОповещения("ОбработкаКомандыЗагрузка", ЭтотОбъект);
    ОткрытьФорму("ВнешняяОбработка.БыстраяЗагрузкаИзExcel.Форма.ФормаЧтенияExcel", П,,,,, Оповещение, РежимОткрытияОкнаФормы.БлокироватьВесьИнтерфейс);
КонецПроцедуры

 

 

Тестировалось на платформе 1С:Предприятие 8.3 (8.3.16.1224).

excel йоксель уф управляемые формы выбор листа загрузка чтение клиент сервер клиент-сервер

См. также

Загрузка номенклатуры из Excel в УТ11, КА 2, ERP 2, Розница 2. Дополнительные реквизиты и сведения, характеристики, картинки, цены, остатки

Загрузка и выгрузка в Excel Розничная торговля Логистика, склад и ТМЦ Ценообразование, анализ цен Прайсы Платформа 1С v8.3 1С:Комплексная автоматизация 1.х 1С:Розница 2 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Управленческий учет Платные (руб)

Загрузка из файлов xls, xlsx, ods, csv, mxl в УТ11, КА 2, ERP 2, Розница 2. Задействованы все возможности конфигурации - заполнение реквизитов номенклатуры, дополнительных реквизитов и сведений, характеристики, доп.реквизиты и сведения характеристик. Дополнительные обработки для расширения возможностей.

10560 руб.

29.10.2014    206127    589    522    

420

SALE! 30%

Распознавание и загрузка сканов в 1С "одним нажатием": УПД, ТОРГ-12, накладные, счета, номенклатура, заказы и т.д.

Загрузка и выгрузка в Excel Документооборот и делопроизводство (СЭД) Учет документов Распознавание документов и образов Управляемые формы 1С:Комплексная автоматизация 1.х 1С:Бухгалтерия 2.0 1С:Управление торговлей 10 1С:Розница 2 1С:Управление производственным предприятием 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Управление холдингом 1С:Комплексная автоматизация 2.х Бухгалтерский учет Управленческий учет Платные (руб)

Универсальная программа для распознавания ЛЮБЫХ СКАНОВ ИЛИ ФОТО ТОВАРНЫХ ДОКУМЕНТОВ в 1С. Не требует указания параметров и предварительной настройки. Просто выбираете файл (PDF, JPG, DOC, XLS, HTML и т.д.) выбираете документ 1С и нажимаете кнопку "Распознать и загрузить".

5400 4968 руб.

04.06.2019    98223    287    173    

300

Загрузка номенклатуры c картинками (несколько потоков одновременно) и сопутствующими данными в базу и любые документы из yml, xls, xlsx, xlsm, ods, ots, csv для УТ 10.3, УТ 11 (все), БП 3, КА 2, ERP 2, УНФ 1.6/3.0, Розница 2

Загрузка и выгрузка в Excel Логистика, склад и ТМЦ Ценообразование, анализ цен Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 1С:Бухгалтерия 2.0 1С:Управление торговлей 10 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Платные (руб)

Эволюция не стоит на месте - новая удобная версия функциональной обработки для Вашего бизнеса! Что же Вы получаете? Удобный и интуитивно понятный интерфейс с 3-мя этапами работы. 2 режима - автоматический и ручной. Чтение XLSX, XLSM, CSV, XML/YML форматов без офиса, на любом сервере! Визуальное связывание колонок файла и реквизитов простым перетаскиванием колонок. Создание или обновление номенклатуры с иерархией, характеристик, доп. реквизитов, упаковок, загрузка практически неограниченного количества картинок на одну номенклатуру (с возможностью загрузки в несколько потоков одновременно), с хранением в томах или в базе. Загрузка номенклатуры поставщиков или поиск по их данным номенклатуры. Загрузка доп. реквизитов в характеристики. Загрузка штрихкодов с генерацией новых. Создание элементов справочников и ПВХ "на лету" для выбранных реквизитов. (Обновление от 14.05.2023, версия 9.4 - 9.8)

6000 руб.

20.11.2015    147567    349    373    

484

Загрузка данных о продажах WildBerries из API Статистики и Отчетов в формате *.xlsx в документ "Отчет комиссионера"

Загрузка и выгрузка в Excel Маркетплейсы Платформа 1С v8.3 Бухгалтерский учет Оперативный учет 1С:Управление торговлей 10 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Бухгалтерский учет Платные (руб)

Обработки предназначены для следующих конфигураций: Бухгалтерия предприятия, редакция 3.0; Управление нашей фирмой, редакция 1.6 - 3.0; Управление торговлей, редакция 10.3; Управление торговлей, редакция 11; Комплексная автоматизация 2; ERP Управление предприятием 2

3600 руб.

11.12.2019    51816    888    3    

183

Маркетплейсный загрузчик для 10-ти популярных маркетплейсов в "БП 3", "УТ 11", "КА 2", ERP, УНФ

Загрузка и выгрузка в Excel Маркетплейсы Платформа 1С v8.3 Бухгалтерский учет 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Бухгалтерский учет Управленческий учет Платные (руб)

Реальный помощник, с помощью которого Вы сделаете необходимые документы для Wildberries, OZON, ЯндексМаркет, Сбермегамаркет, Aliexpress, "Детский мир", Казань-Экспресс, "Леруа Мерлен", ЭНФАНТА (Акушерство), ЛаМода в документы "Отчет комиссионера (агента) о продажах" и другие, может работать в "Бухгалтерия 3", "Бухгалтерия 3 КОРП", УТ 11, УНФ, КА 2, ERP. Возможность подключить другие маркетплейсы. Анализ продаж ОЗОН. 30 дней БЕСПЛАТНОГО пользования!

1500 руб.

12.08.2021    30325    172    61    

105

Загрузка документов поступления в 1С из XML формата 820 (Контур.Диадок) для УТ10, УТ11, Бух3, КА2, КА2.5, УПП1.3 и обработка выгрузки УПД в Контур Диадок и СБИС для 1С:Бухгалтерии 3

ЭДО и ОФД Загрузка и выгрузка в Excel Бухгалтерский учет 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)

Кто получает документы через Контур.ДиаДок (XML файл формат 820) и набивает их вручную в 1С, тот наверняка хотел бы автоматизировать этот процесс. Поддержка конфигураций: Бухгалтерии 3, УПП 1.3, 1С:КА 2.4 и 1С:КА 2.5, УТ10, УТ11.4 и УТ11.5. Выгрузка XML в формате 820 для диадок из БУХ3

3600 руб.

11.02.2020    86244    273    155    

188

Загрузка данных отчета о реализации товаров из Excel файла СберМегаМаркет

Загрузка и выгрузка в Excel Маркетплейсы Платформа 1С v8.3 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Управление нашей фирмой 3.0 Бухгалтерский учет Управленческий учет Платные (руб)

Загрузка данных отчета о реализации товаров из сервиса СберМегаМаркет для конфигурации: Бухгалтерия предприятия, редакция 3.0; Управление торговлей, редакция 11 и Управление нашей фирмой, редакция 3.0 в документ "Отчет комиссионера (агента) о продажах".

3600 руб.

07.06.2022    13865    53    0    

34
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. ivnik 546 27.09.22 09:52 Сейчас в теме
Где обработка берет файл для загрузки? На скринах не увидел поля выбора загружаемого файла....
2. idjumatov 16 27.09.22 10:52 Сейчас в теме
(1) Выбор файла осуществляется стандартным диалогом выбора файла
3. ivnik 546 27.09.22 19:45 Сейчас в теме
(2)
(2)Это понятно, просто на скринах не увидел поля выбора загружаемого файла. Диалог возникает при открытии обработки?
4. idjumatov 16 28.09.22 07:08 Сейчас в теме
(3) Диалог возникает при открытии формы

&AtClient
Procedure OnOpen(Cancel)
    ...
        BeginPuttingFiles(Notify,Dialog, True);

...
5. ivnik 546 28.09.22 12:30 Сейчас в теме
(4) Спасибо!
Оставьте свое сообщение