Добрый день!
Из ЗУП каждый день ночью выгружается информация по сотрудникам.
Выгрузка идёт в csv файл, который каждую ночь создаётся новый.
Задача такова: файлов должно быть 7 (по дням недели) и каждый день должен перезаписываться файл относящийся к текущему дню недели (условно в понедельник "Employees_1", во вторник "Employees_2" и т.д...)
Друзья, подскажите, каким образом это можно реализовать?
Для инфо, текущей код в обработке:
Функция СведенияОВнешнейОбработке() Экспорт
ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.2.2.1");
ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиДополнительнаяОбработка();
ПараметрыРегистрации.Версия = "1.0";
ПараметрыРегистрации.БезопасныйРежим = Ложь;
НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
НоваяКоманда.Представление = НСтр("ru = 'Выгрузка сотрудников в Лотус'");
НоваяКоманда.Идентификатор = "СотрудникиВЛотус";
НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода();
НоваяКоманда.ПоказыватьОповещение = Истина;
НоваяКоманда.Модификатор = "ПечатьMXL";
Возврат ПараметрыРегистрации;
КонецФункции
Процедура ВыполнитьКоманду(иии,ввв) Экспорт
ВыгрузитьДействующихСотрудников_В_CSV();
КонецПроцедуры
// Выполним запрос к регистру
// Результат Таблицазначений
Функция ПолучитьДанные()
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| КадроваяИсторияСотрудниковСрезПоследних.ФизическоеЛицо.Фамилия КАК ФизическоеЛицоФамилия,
| КадроваяИсторияСотрудниковСрезПоследних.ФизическоеЛицо.Имя КАК ФизическоеЛицоИмя,
| КадроваяИсторияСотрудниковСрезПоследних.ФизическоеЛицо.Отчество КАК ФизическоеЛицоОтчество,
| КадроваяИсторияСотрудниковСрезПоследних.Подразделение КАК Подразделение,
| КадроваяИсторияСотрудниковСрезПоследних.Должность КАК Должность,
| КадроваяИсторияСотрудниковСрезПоследних.Регистратор.ДатаУвольнения КАК РегистраторДата,
| КадроваяИсторияСотрудниковСрезПоследних.Сотрудник.Код КАК СотрудникКод,
| КадроваяИсторияСотрудниковСрезПоследних.Подразделение.Код КАК ПодразделениеКод,
| КадроваяИсторияСотрудниковСрезПоследних.ФизическоеЛицо.Код КАК ФизическоеЛицоКод,
| ВидыЗанятостиСотрудниковСрезПоследних.ВидЗанятости КАК ВидЗанятости,
| ГрафикРаботыСотрудниковСрезПоследних.ГрафикРаботы КАК ГрафикРаботы
|ИЗ
| РегистрСведений.КадроваяИсторияСотрудников.СрезПоследних КАК КадроваяИсторияСотрудниковСрезПоследних
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ВидыЗанятостиСотрудников.СрезПоследних КАК ВидыЗанятостиСотрудниковСрезПоследних
| ПО (ВидыЗанятостиСотрудниковСрезПоследних.Сотрудник.Код = КадроваяИсторияСотрудниковСрезПоследних.Сотрудник.Код)
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ГрафикРаботыСотрудников.СрезПоследних КАК ГрафикРаботыСотрудниковСрезПоследних
| ПО (ГрафикРаботыСотрудниковСрезПоследних.Сотрудник.Код = КадроваяИсторияСотрудниковСрезПоследних.Сотрудник.Код)
|
|
|
|ГДЕ
| (КадроваяИсторияСотрудниковСрезПоследних.Регистратор.ДатаУвольнения ЕСТЬ NULL
| ИЛИ КОНЕЦПЕРИОДА(КадроваяИсторияСотрудниковСрезПоследних.Регистратор.ДатаУвольнения, ДЕНЬ) >= &ТекДата)
|
|
| УПОРЯДОЧИТЬ ПО
| ВидыЗанятостиСотрудниковСрезПоследних.ВидЗанятости.Порядок УБЫВ";
// Если до полуночи регламентное задание, то КонецДня, если после полуночи - НачалоДня
Запрос.УстановитьПараметр("ТекДата", КонецДня(ТекущаяДата()));
Результат = Запрос.Выполнить();
ТаблицаЗначений = Результат.Выгрузить();
возврат ТаблицаЗначений;
КонецФункции //
// Создаем строку заголвков для CSV-файла.
// Цикл по колонкам таблицы значений
Функция СоздатьЗаголовкиCSV(ТаблицаЗначений,разделитель)
//разделитель = "|";
колонкиТЗ=ТаблицаЗначений.колонки;
Для каждого колонка Из колонкиТЗ Цикл
стрКолонки = "" + стрКолонки + колонка.Имя + разделитель ;
КонецЦикла;
Возврат стрКолонки;
КонецФункции
// Создаем строку записи ТаблицыЗначений для CSV-файла
Функция СоздатьСтрокуCSV(записьТаблицаЗначений,разделитель)
стрЗапись = "";
Для каждого поле Из записьТаблицаЗначений Цикл
стрЗапись = "" + стрЗапись + Строка(поле) + разделитель ;
КонецЦикла;
Возврат стрЗапись;
КонецФункции
// Создаем текст CSV:
// текст заголовков и
// текст данных
Функция СоздатьДанныеCSV(ТаблицаЗначений,разделитель)
текстЗапись="";
для каждого запись из ТаблицаЗначений Цикл
// начало цикла по строкам таблицы значений
// если не сформирована строка CSV с заголовками полей
// контактной информации - создаем
если текстЗапись="" тогда
текстЗапись=СоздатьЗаголовкиCSV(ТаблицаЗначений,разделитель) + Символы.ПС;
КонецЕсли;
// для каждой записи создаем строку CSV
стрЗапись = СоздатьСтрокуCSV(запись,разделитель);
// выводим сообщение в панель состояний
Сообщить(запись[0]);
//Состояние(стрЗапись);
текстЗапись = текстЗапись + стрЗапись + Символы.ПС;
КонецЦикла;
Возврат текстЗапись;
КонецФункции //
// Запишем данные в файл
Функция ЗаписатьCSV(текст,имяФайла)
//кодировка = КодировкаТекста.ANSI;
кодировка = КодировкаТекста.UTF8;
ТекстовыйФайлЗапись = Новый ЗаписьТекста(имяФайла,Кодировка);
ТекстовыйФайлЗапись.ЗаписатьСтроку(текст);
ТекстовыйФайлЗапись.Закрыть();
Возврат 0;
КонецФункции //
// Основная логика:
Процедура ВыгрузитьДействующихСотрудников_В_CSV() Экспорт
штампДаты = Формат(ТекущаяДата(),"ДФ=ddMMyyyy_hhmm");
имяФайлаCSV = "c:\temp\Employees_" + штампДаты + ".csv";
разделительCSV = ";";
сообщить("Выгрузить действующих сотрудников в формате CSV в " +
имяФайлаCSV + " с разделителем [" + разделительCSV + "]");
ТаблицаЗначений = ПолучитьДанные();
текст = СоздатьДанныеCSV(ТаблицаЗначений,разделительCSV);
ЗаписатьCSV(текст,имяФайлаCSV);
сообщить(имяФайлаCSV + " -[OK!]" );
КонецПроцедуры
Из ЗУП каждый день ночью выгружается информация по сотрудникам.
Выгрузка идёт в csv файл, который каждую ночь создаётся новый.
Задача такова: файлов должно быть 7 (по дням недели) и каждый день должен перезаписываться файл относящийся к текущему дню недели (условно в понедельник "Employees_1", во вторник "Employees_2" и т.д...)
Друзья, подскажите, каким образом это можно реализовать?
Для инфо, текущей код в обработке:
Функция СведенияОВнешнейОбработке() Экспорт
ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.2.2.1");
ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиДополнительнаяОбработка();
ПараметрыРегистрации.Версия = "1.0";
ПараметрыРегистрации.БезопасныйРежим = Ложь;
НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
НоваяКоманда.Представление = НСтр("ru = 'Выгрузка сотрудников в Лотус'");
НоваяКоманда.Идентификатор = "СотрудникиВЛотус";
НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода();
НоваяКоманда.ПоказыватьОповещение = Истина;
НоваяКоманда.Модификатор = "ПечатьMXL";
Возврат ПараметрыРегистрации;
КонецФункции
Процедура ВыполнитьКоманду(иии,ввв) Экспорт
ВыгрузитьДействующихСотрудников_В_CSV();
КонецПроцедуры
// Выполним запрос к регистру
// Результат Таблицазначений
Функция ПолучитьДанные()
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| КадроваяИсторияСотрудниковСрезПоследних.ФизическоеЛицо.Фамилия КАК ФизическоеЛицоФамилия,
| КадроваяИсторияСотрудниковСрезПоследних.ФизическоеЛицо.Имя КАК ФизическоеЛицоИмя,
| КадроваяИсторияСотрудниковСрезПоследних.ФизическоеЛицо.Отчество КАК ФизическоеЛицоОтчество,
| КадроваяИсторияСотрудниковСрезПоследних.Подразделение КАК Подразделение,
| КадроваяИсторияСотрудниковСрезПоследних.Должность КАК Должность,
| КадроваяИсторияСотрудниковСрезПоследних.Регистратор.ДатаУвольнения КАК РегистраторДата,
| КадроваяИсторияСотрудниковСрезПоследних.Сотрудник.Код КАК СотрудникКод,
| КадроваяИсторияСотрудниковСрезПоследних.Подразделение.Код КАК ПодразделениеКод,
| КадроваяИсторияСотрудниковСрезПоследних.ФизическоеЛицо.Код КАК ФизическоеЛицоКод,
| ВидыЗанятостиСотрудниковСрезПоследних.ВидЗанятости КАК ВидЗанятости,
| ГрафикРаботыСотрудниковСрезПоследних.ГрафикРаботы КАК ГрафикРаботы
|ИЗ
| РегистрСведений.КадроваяИсторияСотрудников.СрезПоследних КАК КадроваяИсторияСотрудниковСрезПоследних
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ВидыЗанятостиСотрудников.СрезПоследних КАК ВидыЗанятостиСотрудниковСрезПоследних
| ПО (ВидыЗанятостиСотрудниковСрезПоследних.Сотрудник.Код = КадроваяИсторияСотрудниковСрезПоследних.Сотрудник.Код)
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ГрафикРаботыСотрудников.СрезПоследних КАК ГрафикРаботыСотрудниковСрезПоследних
| ПО (ГрафикРаботыСотрудниковСрезПоследних.Сотрудник.Код = КадроваяИсторияСотрудниковСрезПоследних.Сотрудник.Код)
|
|
|
|ГДЕ
| (КадроваяИсторияСотрудниковСрезПоследних.Регистратор.ДатаУвольнения ЕСТЬ NULL
| ИЛИ КОНЕЦПЕРИОДА(КадроваяИсторияСотрудниковСрезПоследних.Регистратор.ДатаУвольнения, ДЕНЬ) >= &ТекДата)
|
|
| УПОРЯДОЧИТЬ ПО
| ВидыЗанятостиСотрудниковСрезПоследних.ВидЗанятости.Порядок УБЫВ";
// Если до полуночи регламентное задание, то КонецДня, если после полуночи - НачалоДня
Запрос.УстановитьПараметр("ТекДата", КонецДня(ТекущаяДата()));
Результат = Запрос.Выполнить();
ТаблицаЗначений = Результат.Выгрузить();
возврат ТаблицаЗначений;
КонецФункции //
// Создаем строку заголвков для CSV-файла.
// Цикл по колонкам таблицы значений
Функция СоздатьЗаголовкиCSV(ТаблицаЗначений,разделитель)
//разделитель = "|";
колонкиТЗ=ТаблицаЗначений.колонки;
Для каждого колонка Из колонкиТЗ Цикл
стрКолонки = "" + стрКолонки + колонка.Имя + разделитель ;
КонецЦикла;
Возврат стрКолонки;
КонецФункции
// Создаем строку записи ТаблицыЗначений для CSV-файла
Функция СоздатьСтрокуCSV(записьТаблицаЗначений,разделитель)
стрЗапись = "";
Для каждого поле Из записьТаблицаЗначений Цикл
стрЗапись = "" + стрЗапись + Строка(поле) + разделитель ;
КонецЦикла;
Возврат стрЗапись;
КонецФункции
// Создаем текст CSV:
// текст заголовков и
// текст данных
Функция СоздатьДанныеCSV(ТаблицаЗначений,разделитель)
текстЗапись="";
для каждого запись из ТаблицаЗначений Цикл
// начало цикла по строкам таблицы значений
// если не сформирована строка CSV с заголовками полей
// контактной информации - создаем
если текстЗапись="" тогда
текстЗапись=СоздатьЗаголовкиCSV(ТаблицаЗначений,разделитель) + Символы.ПС;
КонецЕсли;
// для каждой записи создаем строку CSV
стрЗапись = СоздатьСтрокуCSV(запись,разделитель);
// выводим сообщение в панель состояний
Сообщить(запись[0]);
//Состояние(стрЗапись);
текстЗапись = текстЗапись + стрЗапись + Символы.ПС;
КонецЦикла;
Возврат текстЗапись;
КонецФункции //
// Запишем данные в файл
Функция ЗаписатьCSV(текст,имяФайла)
//кодировка = КодировкаТекста.ANSI;
кодировка = КодировкаТекста.UTF8;
ТекстовыйФайлЗапись = Новый ЗаписьТекста(имяФайла,Кодировка);
ТекстовыйФайлЗапись.ЗаписатьСтроку(текст);
ТекстовыйФайлЗапись.Закрыть();
Возврат 0;
КонецФункции //
// Основная логика:
Процедура ВыгрузитьДействующихСотрудников_В_CSV() Экспорт
штампДаты = Формат(ТекущаяДата(),"ДФ=ddMMyyyy_hhmm");
имяФайлаCSV = "c:\temp\Employees_" + штампДаты + ".csv";
разделительCSV = ";";
сообщить("Выгрузить действующих сотрудников в формате CSV в " +
имяФайлаCSV + " с разделителем [" + разделительCSV + "]");
ТаблицаЗначений = ПолучитьДанные();
текст = СоздатьДанныеCSV(ТаблицаЗначений,разделительCSV);
ЗаписатьCSV(текст,имяФайлаCSV);
сообщить(имяФайлаCSV + " -[OK!]" );
КонецПроцедуры
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот