Интерфейс заполнения данными листов Excel в управляемых формах

29.09.16

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

Интерфейс процедур для заполнения данными листами Excel эмулирует методы Excel (по сути небольшая обёртка методов Excel). Позволяет Excele подобно заполнять данными листы на сервере и потом возвращать данные на клиента, где и установлен реально Excel и где происходит окончательное заполнение листов Excel.

Скачать исходный код

Наименование Файл Версия Размер
ИнтерфейсЗаполненияЛистовВExcelУправляемыеФормы.epf
.epf 11,04Kb
22
.epf 1.0 11,04Kb 22 Скачать

          Итак, вам дают файл Excel, в котором есть несколько листов, которые вам надо заполнить. Никаких особо проблем с заполнением у вас не возникает. Вы находите свою навороченную обработку,  которая уже заполняла файл Excel, вычисляя по-модному цены номенклатуры и перспективных клиентов с контактными данными. Но тут БАА-Ц оказывается это обработка работала еще под УТ 10.3 или БП 2.0, в общем написано под наше доброе обычное толстое приложение. А нам же надо всё под тонкого клиента (УТ 11, БП 3.0..) Вроде бы ничего страшно, сейчас быстро переделаем, но заглянув вовнутрь, оказывается, что сделать надо много и переделать, т.к. все данные из базы теперь в управляемых формах получаем на сервере и не все типы данных можно передать обратно на клиент. Имеем ввиду, что Excel стоит только на клиенте. Конечно, Excel может стоять и на сервере, но делать обработку и отсылать клиенту. надеясь, что у него Excel всё-таки стоит как-то не очень. К тому же всё чаще и чаще встречаются сервера 1С, работающие на Linux.

        Немного поразмыслив, накидал обработку-библиотеку, которая позволяет организовать эту работу немного проще. Обработка может сама по себе работать и её брать за основу или же её можно встроить в конфигурации в обработки (в коде надо поменять пару строк).

            Как писали и пишут под обычное приложение процедуру заполнения листов Excel  причём эта процедура могла располагаться как и в модуле форме, так в модуле обработке^

Процедура ЗаполнитьЛистыExcel()

    Excel = Новый COMОбъект("Excel.Application");
	
	КнигаExcel=Excel.WorkBooks.Open(ИмяФайлаExcel);
	
	Excel.Visible = 0;

    ЛистЦены = КнигаExcel.Sheets("Цены");
    //получаем как-то выборку по ценам
    НомерСтроки = 0;
    Пока ВыборкаПоЦенам.Следующий() Цикл
       ЛистЦены.Сells(номерСтроки,1).Value = ВыборкаПоЦенам.Цена;
       //....
	    ЛистЦены.Сells(номерСтроки,10).Value = ВыборкаПоЦенам.ЕдиницаИзмерения;
        НомерСтроки = НомерСтроки + 1;
    КонецЦикла;
	
     ЛистКонтрагенты = КнигаExcel.Sheets("Контрагенты");
    //получаем как-то выборку по ценам
    НомерСтроки = 0;
    Пока ВыборкаПоКонтрагентам.Следующий() Цикл
       ЛистЦены.Сells(номерСтроки,1).Value = ВыборкаПоКонтрагентам.Наименование;
       //....куча разных колонок
	    ЛистЦены.Сells(номерСтроки,5).Value = ВыборкаПоКонтрагентам.ИНН;
        ЛистЦены.Сells(номерСтроки,6).Value = ВыборкаПоКонтрагентам.КПП;
        НомерСтроки = НомерСтроки + 1;
    КонецЦикла;
	
	Excel.DisplayAlerts = Ложь;
	Excel.ActiveWorkbook.SaveAs(ИмяФайлаExcel);
	
	Excel.Workbooks.Close();
	Excel.Application.Quit();
	Excel.Quit();


КонецПроцедуры

Основной здесь момент, что в одной процедура получаем выборку, т.е. данные из базы, и сразу ей начинаем заполнять лист Excel. В управляемых формах так нельзя, поэтому пишем вот так:

&НаКлиенте
Процедура ЗаполнитьЛистыExcel

    Excel = Новый COMОбъект("Excel.Application");
	
	КнигаExcel =Excel.WorkBooks.Open(ИмяФайлаExcel);
	
	Excel.Visible = 0;

    ДанныеЛистовExcel = ЗаполнитьДаннымиЛистыНаСервере();

	ЗаполнитьЛистыExcel(КнигаExcel,ДанныеЛистовExcel);
	
	Excel.DisplayAlerts = Ложь;
	Excel.ActiveWorkbook.SaveAs(ИмяФайлаExcel);
	
	Excel.Workbooks.Close();
	Excel.Application.Quit();
	Excel.Quit();

КонецПроцедуры

&НаСервере
Функция ЗаполнитьДаннымиЛистыНаСервере()

   	ОбработкаОбъект = РеквизитФормыВЗначение("Объект");
	
	КнигаExcel = ВнешниеОбработки.Создать(ОбработкаОбъект.ИспользуемоеИмяФайла,Ложь);
	//КнигаExcel = Обработки.ИнтерфейсExcel.Создать(); Так пишем если обработку встроили в конфигурацию


    ЛистЦены = КнигаExcel .Sheets("Цены");
    //получаем как-то выборку по ценам
    НомерСтроки = 0;
    Пока ВыборкаПоЦенам.Следующий() Цикл
       ЛистЦены.Сells(номерСтроки,1).Value = ВыборкаПоЦенам.Цена;
       //....
	    ЛистЦены.Сells(номерСтроки,10).Value = ВыборкаПоЦенам.ЕдиницаИзмерения;
        НомерСтроки = НомерСтроки + 1;
    КонецЦикла;
	
     ЛистКонтрагенты = КнигаExcel.Sheets("Контрагенты");
    //получаем как-то выборку по ценам
    НомерСтроки = 0;
    Пока ВыборкаПоКонтрагентам.Следующий() Цикл
       ЛистЦены.Сells(номерСтроки,1).Value = ВыборкаПоКонтрагентам.Наименование;
       //....куча разных колонок
	    ЛистЦены.Сells(номерСтроки,5).Value = ВыборкаПоКонтрагентам.ИНН;
        ЛистЦены.Сells(номерСтроки,6).Value = ВыборкаПоКонтрагентам.КПП;
        НомерСтроки = НомерСтроки + 1;
    КонецЦикла;

    Возврат КнигаExcel.ПолучитьДанныеКниги();

КонецФункции

Вот в принципе и всё. Т.е. код из обычного приложения можно просто скопировать и вставить в серверную функцию управляемой формы и всё будет работать также, данные возввращаются методом КнигаExcel.ПолучитьДанныеКниги(). В обработке реализованы методы:

Sheets(ИмяЛиста) - получает лист Excel по имени (если листа с таким именем не будет в книгу Excel будет добавлен такой лист)

Cells(НомерСтроки, НомерКолонки) - получение ячейки по координатом. Для установке значения нужно установить свойство Value

Пока этих методов мне хватило, может что-то ещё из арсенала Excel можно будет реализовать. 

Таким образом , я вижу применения данного подхода в следующих случаях:

  • Рефакторинг кода обычного приложения под управляемые формы при работе с Excel
  • Абстрагирование от задачи компоновки структур данных листов Excel на сервере, чтобы  сосредоточиться на логике получения самих данных.

К статье приложена обработка с методами и тестовый пример заполнения данных двух листов Excel.

Excel интерфейс листы заполнение управляемые формы

См. также

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

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

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

10560 руб.

29.10.2014    211026    630    526    

446

Загрузка номенклатуры 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.х 1С:Управление нашей фирмой 3.0 Платные (руб)

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

14400 руб.

20.11.2015    151340    366    376    

502

Маркетплейсный загрузчик для 12-ти маркетплейсов в 1С:БП 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 дней БЕСПЛАТНОГО пользования!

1800 руб.

12.08.2021    32264    240    63    

122

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С:Управление нашей фирмой 3.0 Бухгалтерский учет Управленческий учет Платные (руб)

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

6000 5520 руб.

04.06.2019    101797    298    173    

314

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

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

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

4800 руб.

07.06.2022    15352    82    0    

63

SALE! 20%

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

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

Универсальная обработка для загрузки документов из Excel в 1С. Не требует указания параметров (номера колонок, номер первой строки таблицы и т.д.) и предварительной настройки. Просто выбираете файл Excel, документ 1С и нажимаете кнопку "Загрузить". Обработка сама находит таблицу в файле Excel, необходимые для загрузки данные в ней (номенклатура, количество, НДС, цена, сумма) и загружает ее в 1С. Вместе с номенклатурой может найти контрагента, номер и дату документа, штрих-коды, серии ГТД, страну и т.д. Распознает документы ЛЮБОЙ ФОРМЫ (УПД, ТОРГ-12, заказ, отчет комиссионера и т.д.). Не требует MS Office. Для поиска таблиц используются методы эвристического поиска. Загружает только то, что нужно, т.е. пропускает повторы шапки таблицы, заголовки, промежуточные итоги, подписи и т.д. Содержит модуль работы с электронной почтой и api-загрузчик отчетов о продажах маркетплейсов.

5000 4000 руб.

09.11.2016    215744    928    886    

942
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. ksnik 579 04.09.19 11:58 Сейчас в теме
Здравствуйте. Скажите пожалуйста, почему функция add данной обработки не возвращает значение, как это работает?
//добавление Листа
Функция Add(ИмяЛиста) Экспорт
	
	Лист = Новый Массив(ИнкрементСтрок,ИнкрементКолонок);
	Для инд = 0 по ИнкрементСтрок-1 Цикл
		Для нн = 0  по ИнкрементКолонок-1 Цикл
			Лист[инд][нн] = Новый Структура("Value",Неопределено);
		КонецЦикла;
	КонецЦикла;
КонецФункции
Показать

экспортную переменную Лист вижу, вопрос обусловлен контекстом следующего кода: ЛИСТ_ОБРАБОТКАОБЪЕКТ.ADD(ИМЯЛИСТА), пытаемся использовать значение которое не может быть возвращено...
Функция Sheets(ИмяЛиста) Экспорт
	
	Если Книга = Неопределено Тогда
	   Книга = Новый Соответствие;
	КонецЕсли;   
	
	Если Книга.Получить(ИмяЛиста) = Неопределено Тогда
		//Лист_ОбработкаОбъект = ВнешниеОбработки.Создать(ЭтотОбъект.ИспользуемоеИмяФайла,Истина);
		Лист_ОбработкаОбъект = Обработки.ИнтерфейсЗаполненияЛистовВExcelУправляемыеФормы.Создать(); //Если используем внутри конфигурации
		Книга.Вставить(ИмяЛиста,ЛИСТ_ОБРАБОТКАОБЪЕКТ.ADD(ИМЯЛИСТА));
	КонецЕсли;	
	
	Возврат Книга.Получить(ИмяЛиста);
	
КонецФункции
Показать
+
3. maxx 991 05.09.19 10:06 Сейчас в теме
(1) метод ADD действительно ничего не возвращает, так как достаточно и инициализации переменной Лист, а каждый Лист это отдельный экземпляр обработки (Обработка объект). По сути это сейчас процедура.
+
4. ksnik 579 05.09.19 10:11 Сейчас в теме
(3)
ельно ничего не возвращает, так как достаточно и инициализации переменной Лист, а каждый Лист это отдельный экземпляр обработки (Обработка объект).

А как тогда добавить лист в книгу? В книгу то новый пустой лист не попал? Может целесообразнее тогда возвращать значение в процедуре add и делать так:
ЛИСТ1 = ЛИСТ_ОБРАБОТКАОБЪЕКТ.ADD(ИМЯЛИСТА);
Книга.Вставить(ИмяЛиста,ЛИСТ1));
+
2. ksnik 579 05.09.19 08:19 Сейчас в теме
Метод ЛИСТ_ОБРАБОТКАОБЪЕКТ.ADD(ИМЯЛИСТА) в цикле создает и заполняет соответствием с именем "value" пустой массив - у автора он 100*50 элементов, но для практического применения нужно гораздо больше строк и эта операция на реальных данных приводит к большим тормозам, не пригодно для практического применения. По этой причине везде где возможно и на клиенте и на сервере приходится пихать контроль окончания страницы:
	СчПустых = 0;
	Для Каждого СтрЛиста из Лист Цикл
		Value = СтрЛиста[Объект.ВыбНомерКолонкиПоиска].Value;
		Если СокрЛП(Value) = "" Тогда
			СчПустых = СчПустых + 1;
			Если СчПустых>10 Тогда
				Прервать;
			КонецЕсли;
			продолжить;
		Иначе 
			СчПустых = 0;
		КонецЕсли;
		Если СчПустых>10 Тогда
			Прервать;
		КонецЕсли;
Показать
+
Оставьте свое сообщение