Назначение подсистемы
Подсистема предназначена для сохранения табличных частей форм прикладного решения 1С в Excel.
Как известно, имеется возможность сохранения данных табличных частей форм в Excel штатными средствами 1С. Для этого необходимо вывести данные сохраняемой табличной части в табличный документ после чего сохранить его на диск в формате Excel. Однако, у данного метода существует ряд недостатков:
- пользователю необходимо совершать дополнительные действия для сохранения табличной части (промежуточный вывод данных в табличный документ)
- отсутствуют возможности по настройке формата сохранения данных, например, невозможно задать формат даты (данные сохраняются в том виде, в котором они выведены в табличный документ)
- отсутствуют возможности по гибкой настройке сохраняемых полей табличной части и порядка их следования
Разработанная подсистема решает перечисленные выше проблемы при работе со штатным механизмом сохранения данных табличных частей форм в Excel.
Настройка подсистемы
Настроить табличные части форм, данные которых необходимо сохранять в Excel
По кнопке Заполнить есть возможность автоматического заполнения сохраняемых колонок табличной части формы
В настройках сохранения указываются следующие параметры:
- Имя формы с ТЧ - имя формы, табличную часть которой необходимо сохранять в Excel
- Имя табличной части - путь к реквизиту формы, содержащий данные табличной части формы (свойство "путь к данным" таблицы формы)
- Имя колонки - имя колонки табличной части формы
- Заголовок колонки - название колонки в Excel
- Формат колонки - форматная строка, которая будет использована при сохранении значения в Excel (например, для дат можно указать формат ДФ=dd.MM.yyyy для сохранения даты без времени)
- Порядок колонки - порядок колонки в Excel
- Использование - если Истина, то колонка будет сохранена в Excel
Состав подсистемы
Подсистема включает в себя следующие объекты метаданных:
- Подсистема.СохранениеТЧВExcel
- ОбщийМодуль.СохранениеТЧВExcel
- ОбщаяФорма.ФормаСохраненияТЧВExcelУниверсальная
- РегистрСведений.НастройкиПользователейСохраненияТЧВExcel
- РегистрСведений.НастройкиСохраненияТЧВExcel
- РегистрСведений.СохраняемыеВExcelТЧФорм
- Роль.ЧтениеНастроекСохраненияТЧВExcel
Внедрение подсистемы в прикладное решение
- Определить состав форм прикладного решения, данные табличных частей которых необходимо сохранять в Excel
- Включить формы в расширение конфигурации
- Для каждой формы в расширении на командную панель табличной части добавить команду "Сохранить в Excel" с обработчиком вида:
&НаКлиенте
Процедура СохрXls_СохранитьТЧТоварыВExcelПосле(Команда)
ПараметрыСохранения = Новый Структура;
ПараметрыСохранения.Вставить("Заголовок", "Сохранение ТЧ Товары в Excel");
ПараметрыСохранения.Вставить("ИмяФормы", ИмяФормы);
ПараметрыСохранения.Вставить("ИмяТабличнойЧасти", "Объект.Товары");
ДополнительныеПараметры = Новый Структура;
ДополнительныеПараметры.Вставить("ТаблицаФормы", Элементы.Товары);
ДополнительныеПараметры.Вставить("ДанныеФормы", Объект.Товары);
ОписаниеОповещенияОЗакрытии = Новый ОписаниеОповещения("ПослеЗакрытияФормыСохраненияТЧВExcel", СохранениеТЧВExcel, ДополнительныеПараметры);
ОткрытьФорму("ОбщаяФорма.ФормаСохраненияТЧВExcelУниверсальная", ПараметрыСохранения, , , , , ОписаниеОповещенияОЗакрытии, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецПроцедуры
- Настроить права доступа пользователей к объектам подсистемы. Дать доступ на просмотр общей формы ФормаСохраненияТЧВExcelУниверсальная, Чтение/Изменение регистра сведений НастройкиПользователейСохраненияТЧВExcel, Чтение регистра сведений НастройкиСохраненияТЧВExcel. Это можно сделать, включив роль ЧтениеНастроекСохраненияТЧВExcel в профиль с базовыми правами (если используется БСП).
Вариант подключения подсистемы для конфигураций на основе БСП
- Определить состав форм прикладного решения, данные табличных частей которых необходимо сохранять в Excel. Заполнить регистр сведений СохраняемыеВExcelТЧФорм
- Включить в расширение конфигурации общий модуль БСП ПодключаемыеКоманды
- Добавить в расширение процедуру общего модуля БСП ПодключаемыеКоманды ПриСозданииНаСервере со следующим кодом
&После("ПриСозданииНаСервере")
Процедура СохрXls_ПриСозданииНаСервере(Форма, ПараметрыРазмещения)
Запрос = Новый Запрос("ВЫБРАТЬ
| СохраняемыеВExcelТЧФорм.ИмяФормы КАК ИмяФормы,
| СохраняемыеВExcelТЧФорм.ИмяТабличнойЧасти КАК ИмяТабличнойЧасти,
| СохраняемыеВExcelТЧФорм.ЗаголовокФормыСохранения КАК ЗаголовокФормыСохранения
|ИЗ
| РегистрСведений.СохраняемыеВExcelТЧФорм КАК СохраняемыеВExcelТЧФорм
|ГДЕ
| СохраняемыеВExcelТЧФорм.ИмяФормы = &ИмяФормы
| И СохраняемыеВExcelТЧФорм.Использование");
Запрос.УстановитьПараметр("ИмяФормы", Форма.ИмяФормы);
ПодключенныеКоманды = Форма.ПараметрыПодключаемыхКоманд;
АдресНастроек = ПодключенныеКоманды.АдресТаблицыКоманд;
Команды = ПолучитьИзВременногоХранилища(АдресНастроек);
Элементы = Форма.Элементы;
Выборка = Запрос.Выполнить().Выбрать();
ЕстьДобавленныеКоманды = Ложь;
Пока Выборка.Следующий() Цикл
ИмяТабличнойЧасти = Выборка.ИмяТабличнойЧасти;
ЗаголовокФормыСохранения = Выборка.ЗаголовокФормыСохранения;
//найдем табличную часть по пути к реквизиту формы
ТаблицаФормы = НайтиТаблицуФормыПоПутиКДанным(ИмяТабличнойЧасти, Элементы);
Если ТаблицаФормы = Неопределено Тогда
продолжить;
КонецЕсли;
ИмяКоманды = "СохранитьВExcel_"+ СтрЗаменить(ИмяТабличнойЧасти, ".", "_");
КомандаФормы = Форма.Команды.Добавить(ИмяКоманды);
КомандаФормы.Действие = "Подключаемый_ВыполнитьКоманду";
КомандаФормы.Заголовок = "Сохранить в Excel";
КомандаФормы.Подсказка = КомандаФормы.Заголовок;
СведенияОКоманде = Команды.Добавить();
СведенияОКоманде.ИмяВФорме = ИмяКоманды;
СведенияОКоманде.ИмяФормы = Форма.ИмяФормы;
СведенияОКоманде.МножественныйВыбор = Ложь;
СведенияОКоманде.Обработчик = "СохранениеТЧВExcel.ОткрытьФормуСохраненияТЧВExcel";
ДополнительныеПараметры = Новый Структура;
ДополнительныеПараметры.Вставить("ИмяТабличнойЧасти", ИмяТабличнойЧасти);
ДополнительныеПараметры.Вставить("ЗаголовокФормыСохранения", ЗаголовокФормыСохранения);
ДополнительныеПараметры.Вставить("ИмяФормы", Форма.ИмяФормы);
ДополнительныеПараметры.Вставить("ИмяТаблицыФормы", ТаблицаФормы.Имя);
СведенияОКоманде.ДополнительныеПараметры = ДополнительныеПараметры;
ЕстьДобавленныеКоманды = истина;
КоманднаяПанельТабличнойЧасти = ТаблицаФормы.КоманднаяПанель;
КнопкаФормы = Элементы.Добавить(ИмяКоманды, Тип("КнопкаФормы"), КоманднаяПанельТабличнойЧасти);
КнопкаФормы.Вид = ВидКнопкиФормы.КнопкаКоманднойПанели;
КнопкаФормы.ИмяКоманды = ИмяКоманды;
КонецЦикла;
Если ЕстьДобавленныеКоманды Тогда
ПоместитьВоВременноеХранилище(Команды, Форма.УникальныйИдентификатор);
КонецЕсли;
КонецПроцедуры
Функция НайтиТаблицуФормыПоПутиКДанным(ПутьКДанным, ЭлементыФормы)
ЭлементФормы = Неопределено;
Для каждого ТекЭлемент из ЭлементыФормы цикл
Если ТипЗнч(ТекЭлемент) <> Тип("ТаблицаФормы") Тогда
продолжить;
КонецЕсли;
Если ТекЭлемент.ПутьКДанным = ПутьКДанным тогда
ЭлементФормы = ТекЭлемент;
прервать;
КонецЕсли;
КонецЦикла;
Возврат ЭлементФормы;
КонецФункции
Использование подсистемы
При нажатии на кнопку "Сохранить в Excel" открывается форма настроек сохранения данных табличной части в Excel
Пользователь имеет следующие возможности настройки сохранения данных:
- изменить порядок сохраняемых колонок
- добавить новые колонки
- удалить не нужные колонки
- задать заголовки колонок
- задать формат вывода данных
- сохранить в Excel только выделенные строки таблицы формы
- установить стандартные настройки
Измененные настройки автоматически сохраняются в настройках текущего пользователя в регистре сведений НастройкиПользователейСохраненияТЧВExcel
Ограничения текущей реализации
В текущей версии отсутствует возможность сохранения данных полей таблицы формы, которые отсутствуют в полях реквизита формы, содержащей данные табличной части.
Отсутствует возможность сохранения данных таблиц форм, содержащих дерево значений.
Прочее
Требования
Платформа 1С версии не меньше 8.3.15 (интерфейс Такси. Разрешить Версия 8.2).
Программный код
Программный код полностью открыт.