Рубрика:
Базы данных /
Изучаем «1С»
|
Facebook
Мой мир
Вконтакте
Одноклассники
Google+
|
Андрей Луконькин
Выгружаем данные из «1С» в Excel
Как быть, когда требуется получить некоторую информацию из базы данных «1С:Предприятие» в виде стандартной книги Excel или документа Word? Поможет в этом использование технологии OLE Automation.
Рассмотрим задачу по выгрузке данных о начислении работников организации в банк в виде файла формата Excel. Задача усложняется тем, что файл должен формироваться строго установленного вида, по образцу, присланному из банка.
Обработка написана для «1С:Предприятие» версии 7.7, конфигурация «Зарплата+Кадры. Редакция 2.3».
Создаём внешнюю обработку, располагаем на форме элементы диалога, как это указано на рис. 1, где:
- ВыбДокумент – реквизит типа Документ.ВыплатаЗаработнойПлаты;
- Каталог – строка длиной 200 (ограничение по длине строки – 218 символов, поэтому оставляем 200 символов на путь к файлу, и 18 символов на имя файла).
Рисунок 1. Форма внешней обработки
Кнопке выбора каталога задаём формулу ВыборПути() (см. рис. 2).
Рисунок 2. Обработка нажатия кнопки выбора каталога
В модуле обработки добавляем процедуру ВыборПути().
Процедура ВыборПути()
Каталог2=Каталог;
Если Фс.ВыбратьКаталог(Каталог2,"Выберите каталог")>0 Тогда
Если СтрДлина(Каталог2)>200 Тогда
Сообщить("Длина каталога превышает 200 символов");
Каталог = "";
Иначе
Каталог=Каталог2;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Теперь самое главное – вводим основной текст нашей обработки, процедуры Сформировать():
Процедура Сформировать()
//Если не выбран документ Ведомость, работа прекращается
Если ПустоеЗначение(ВыбДокумент)=1 Тогда
Предупреждение("Выберите ведомость!");
Возврат;
КонецЕсли;
//Если не выбран каталог для выгрузки, работа прекращается
Если ПустоеЗначение(Каталог)=1 Тогда
Предупреждение("Укажите каталог!");
Возврат;
КонецЕсли;
//Создание объекта MS Excel
Excel = СоздатьОбъект("Excel.Application");
//Создаём новую книгу в Excel
Excel.WorkBooks.Add();
//Задаём ширину колонок
Excel.WorkBooks(1).WorkSheets("Лист1").Columns(1).ColumnWidth = 20;
Excel.WorkBooks(1).WorkSheets("Лист1").Columns(2).ColumnWidth = 10;
Excel.WorkBooks(1).WorkSheets("Лист1").Columns(3).ColumnWidth = 20;
Excel.WorkBooks(1).WorkSheets("Лист1").Columns(4).ColumnWidth = 15;
Excel.WorkBooks(1).WorkSheets("Лист1").Columns(5).ColumnWidth = 20;
Excel.WorkBooks(1).WorkSheets("Лист1").Columns(6).ColumnWidth = 30;
//Выводим текст заголовка документа
Excel.WorkBooks(1).WorkSheets("Лист1").cells(1,1).value = "Ведомость pаспpеделения денежных сpедств на счета физических лиц";
//Устанавливаем размер шрифта
Excel.WorkBooks(1).WorkSheets("Лист1").cells(1,1).font.size = 12;
//Устанавливаем признак шрифта «жирный»
Excel.WorkBooks(1).WorkSheets("Лист1").cells(1,1).font.bold = 1;
Excel.WorkBooks(1).WorkSheets("Лист1").cells(2,1).value = "платежное поpучение №";
Excel.WorkBooks(1).WorkSheets("Лист1").cells(2,1).font.size = 12;
Excel.WorkBooks(1).WorkSheets("Лист1").cells(2,1).font.bold = 1;
Excel.WorkBooks(1).WorkSheets("Лист1").cells(2,4).value = "от";
Excel.WorkBooks(1).WorkSheets("Лист1").cells(2,4).font.size = 12;
Excel.WorkBooks(1).WorkSheets("Лист1").cells(2,4).font.bold = 1;
//Указываем наименование нашей организации, также могут указываться и другие реквизиты предприятия
Орг = "ООО НАША ОРГАНИЗАЦИЯ";
Excel.WorkBooks(1).WorkSheets("Лист1").cells(4,1).value = Орг;
Excel.WorkBooks(1).WorkSheets("Лист1").cells(4,1).font.size = 12;
Excel.WorkBooks(1).WorkSheets("Лист1").cells(4,1).font.bold = 1;
//«Шапка» табличной части, заголовки столбцов
Excel.WorkBooks(1).WorkSheets("Лист1").cells(6,1).value = " Счет";
Excel.WorkBooks(1).WorkSheets("Лист1").cells(6,1).font.size = 12;
Excel.WorkBooks(1).WorkSheets("Лист1").cells(6,1).font.bold = 1;
Excel.WorkBooks(1).WorkSheets("Лист1").cells(6,2).value = "Сумма";
Excel.WorkBooks(1).WorkSheets("Лист1").cells(6,2).font.size = 12;
Excel.WorkBooks(1).WorkSheets("Лист1").cells(6,2).font.bold = 1;
Excel.WorkBooks(1).WorkSheets("Лист1").cells(6,3).value = "Фамилия";
Excel.WorkBooks(1).WorkSheets("Лист1").cells(6,3).font.size = 12;
Excel.WorkBooks(1).WorkSheets("Лист1").cells(6,3).font.bold = 1;
Excel.WorkBooks(1).WorkSheets("Лист1").cells(6,4).value = "Имя";
Excel.WorkBooks(1).WorkSheets("Лист1").cells(6,4).font.size = 12;
Excel.WorkBooks(1).WorkSheets("Лист1").cells(6,4).font.bold = 1;
Excel.WorkBooks(1).WorkSheets("Лист1").cells(6,5).value = "Отчество";
Excel.WorkBooks(1).WorkSheets("Лист1").cells(6,5).font.size = 12;
Excel.WorkBooks(1).WorkSheets("Лист1").cells(6,5).font.bold = 1;
Excel.WorkBooks(1).WorkSheets("Лист1").cells(6,6).value = "Окончательный расчет(+)";
Excel.WorkBooks(1).WorkSheets("Лист1").cells(6,6).font.size = 12;
Excel.WorkBooks(1).WorkSheets("Лист1").cells(6,6).font.bold = 1;
//Выбираем строки ведомости, цикл по всем строкам
ВыбДокумент.ВыбратьСтроки();
Счетчик = 7;
Пока ВыбДокумент.ПолучитьСтроку()=1 Цикл
Счет = ВыбДокумент.Сотрудник.НомерЗарплатногоСчета;
Сумма = ВыбДокумент.Сумма;
//Устанавливаем формат ячейки Excel для номера счета как строковый, чтобы отображались все 20 символов
Excel.WorkBooks(1).WorkSheets("Лист1").cells(Счетчик,1). NumberFormat = "@";
//Устанавливаем значение счета
Excel.WorkBooks(1).WorkSheets("Лист1").cells(Счетчик,1). value = Строка(Счет);
//Рассчитываем значение суммы
Excel.WorkBooks(1).WorkSheets("Лист1").cells(Счетчик,2).value = Сумма;
//Разбираем ФИО на составляющие, отдельно фамилия, имя и отчество
Стр = СокрЛП(ВыбДокумент.Сотрудник. Наименование);
ПозицияПервогоПробела = найти(СокрЛП(Стр),Симв(32));
Фамилия = Лев(СокрЛП(Стр),ПозицияПервогоПробела-1);
ОстСтр = Прав(Стр,СтрДлина(Стр)-СтрДлина(Фамилия)-1);
ПозицияВторогоПробела = найти(СокрЛП(ОстСтр),Симв(32));
Имя = Лев(СокрЛП(остСтр),ПозицияВторогоПробела-1);
ОстСтр = Прав(ОстСтр,СтрДлина(ОстСтр)-СтрДлина(Имя)-1);
Отчество = СокрЛП(ОстСтр);
//Устанавливаем текстовый формат ячеек и выводим ФИО
Excel.WorkBooks(1).WorkSheets("Лист1").cells(Счетчик,3).NumberFormat = "@";
Excel.WorkBooks(1).WorkSheets("Лист1").cells(Счетчик,3).value = ВРЕГ(Фамилия);
Excel.WorkBooks(1).WorkSheets("Лист1").cells(Счетчик,4).NumberFormat = "@";
Excel.WorkBooks(1).WorkSheets("Лист1").cells(Счетчик,4).value = ВРЕГ(Имя);
Excel.WorkBooks(1).WorkSheets("Лист1").cells(Счетчик,5).NumberFormat = "@";
Excel.WorkBooks(1).WorkSheets("Лист1").cells(Счетчик,5).value = ВРЕГ(Отчество);
Счетчик = Счетчик + 1;
КонецЦикла;
//Выводим итоговую строку
Excel.WorkBooks(1).WorkSheets("Лист1").cells(Счетчик+1,1).NumberFormat = "@";
Excel.WorkBooks(1).WorkSheets("Лист1").cells(Счетчик+1,1).value ="Итого:";
//Вводим формулу в ячейку, считаем итоговую сумму
Excel.WorkBooks(1).WorkSheets("Лист1").cells(Счетчик+1,2).FormulaR1C1 ="=SUM(R[-"+Строка(Счетчик-6)+"]C:R[-2]C)";
//Записываем файл Excel. Имя – это номер нашей ведомости
Попытка
Excel.ActiveWorkBook.SaveAs(СокрЛП(Каталог)+"\"+ВыбДокумент.НомерДок+".xls");
Исключение
Сообщить(«Неудачная попытка сохранения файла»);
КонецПопытки;
//Закрываем книгу Excel
Excel.ActiveWorkBook.Close();
КонецПроцедуры
В результате мы получаем готовый файл формата Excel, название которого совпадает с номером платежной ведомости, который уже можно отсылать в банк для зачисления заработной платы на счета зарплатных пластиковых карт сотрудников (см. рис. 3).
Рисунок 3. Результат нашей работы
В различных банках могут быть разные форматы приема данных, оформление и структура файлов могут отличаться, но общий принцип работы, наиболее используемые методы остаются такими же, как и рассмотренные в примере.
Facebook
Мой мир
Вконтакте
Одноклассники
Google+
|