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

29.09.16

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

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

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
ИнтерфейсЗаполненияЛистовВExcelУправляемыеФормы.epf
.epf 11,04Kb ver:1.0
22
22 Скачать (1 SM) Купить за 1 850 руб.

          Итак, вам дают файл 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 интерфейс листы заполнение управляемые формы

См. также

SALE! 15%

Загрузка и выгрузка в Excel Оптовая торговля Печатные формы Бухгалтер Пользователь Платформа 1С v8.3 Управляемые формы Платформа 1C v8.2 1C:Бухгалтерия 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С:Розница 3.0 Бухгалтерский учет Управленческий учет Платные (руб)

Универсальная обработка для загрузки документов из Excel в 1С. Забудьте о ручном вводе: загружайте документы из Excel в 1С за секунды! Не требует указания параметров (номера колонок, номер первой строки таблицы и т.д.) и предварительной настройки. Просто выбираете файл Excel, документ 1С и нажимаете кнопку "Загрузить". Обработка сама находит таблицу в файле Excel, необходимые для загрузки данные в ней (номенклатура, количество, НДС, цена, сумма) и загружает ее в 1С.

6000 5100 руб.

09.11.2016    243339    1125    912    

1050

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

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

5400 руб.

12.08.2021    38341    414    68    

175

Загрузка и выгрузка в 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 1С:Розница 3.0 Платные (руб)

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

18000 руб.

20.11.2015    159926    393    382    

521

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

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

4800 руб.

11.12.2019    59689    1022    3    

257

SALE! 30%

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

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

3600 руб.

11.02.2020    95198    321    157    

232

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

Загрузка данных отчета о реализации и продаже товаров из сервиса Яндекс.Маркета «Беру» из отчетов Excel для конфигурации: Бухгалтерия предприятия, редакция 3.0; Управление торговлей, редакция 11; Управление торговлей, редакция 10.3; Управление нашей фирмой, редакция 3.0 и Розница, редакция 3.0 в документ «Отчет комиссионера о продажах».

4800 руб.

09.12.2020    26806    265    1    

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

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

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