Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save PlugFox/64cb2c05665e7ec53269e281f8a8b25e to your computer and use it in GitHub Desktop.
Save PlugFox/64cb2c05665e7ec53269e281f8a8b25e to your computer and use it in GitHub Desktop.
Модуль объекта регламентного переноса данных между базами 1с
//////////////////////////////////////////////////////////////
#Область Объявление_констант
Перем ИмяМакетаПравилОбмена
, НепосредственноеЧтениеВИБПриемнике
, ТипИнформационнойБазыДляПодключения
, ПапкаВыгрузки
, ИмяСервераИнформационнойБазыДляПодключения
, ИмяИнформационнойБазыНаСервереДляПодключения
, ПользовательИнформационнойБазыДляПодключения
, ПарольИнформационнойБазыДляПодключения
, АутентификацияWindowsИнформационнойБазыДляПодключения
, ВерсияПлатформыИнформационнойБазыДляПодключения
, КаталогИнформационнойБазыДляПодключения
, ТипУдаленияРегистрацииИзмененийДляУзловОбменаПослеВыгрузки;
#КонецОбласти
//////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////
#Область Основная_информация_об_обработке
// <-- ОСНОВНАЯ ИНФОРМАЦИЯ НАЧАЛО
Функция ПолучитьИнформациюОбОбработке() Экспорт
Мета = Метаданные();
Инф = Новый Структура;
// Наименование обработки (имя для регистрации в справочнике внешних отчетов и обработок)
Инф.Вставить("Наименование", Мета.Синоним);
// Идентификатор без пробелов и знаков препинания
Инф.Вставить("Идентификатор", Мета.Имя);
// Дополнительная информация
Инф.Вставить("Информация", СтрЗаменить(СтрШаблон("%1 %2 (%3 г.)", Мета.Синоним, Мета.Комментарий, Формат(ТекущаяДата(), "ДФ='d MMM yyyy'")), " ", " "));
// Версия для удобства версирования (1.0, 1.1, и т.д.)
Инф.Вставить("Версия", Мета.Комментарий);
// Варианты: "ДополнительнаяОбработка", "ДополнительныйОтчет", "ЗаполнениеОбъекта", "Отчет", "ПечатнаяФорма", "СозданиеСвязанныхОбъектов"
Инф.Вставить("Вид", "ДополнительнаяОбработка"); // ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиДополнительнаяОбработка();
// в безопасном режиме не доступна COM технология, загрузка внешних компонент, доступ к файловой системе, доступ к Интернету.
Инф.Вставить("БезопасныйРежим", Ложь);
// Использование. Варианты: "ОткрытиеФормы", "ВызовКлиентскогоМетода", "ВызовСерверногоМетода"
Инф.Вставить("Использование", "ВызовСерверногоМетода");
// Показывать оповещение. Варианты Истина, Ложь
Инф.Вставить("Оповещение", Истина);
// Модификатор
Инф.Вставить("Модификатор", "");
// Указываем назначение к которому делаем внешнюю печ. форму
МассивНазначений = Новый Массив;
Инф.Вставить("Назначение", МассивНазначений);
Возврат Инф;
КонецФункции // ПолучитьИнформациюОбОбработке()
// ОСНОВНАЯ ИНФОРМАЦИЯ КОНЕЦ -->
#КонецОбласти
//////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////
#Область Подготовка_к_регистрации_и_печати
// <-- ПОДГОТОВКА РЕГИСТРАЦИИ ГЛОБАЛЬНОГО ОТЧЕТА НАЧАЛО
Функция СведенияОВнешнейОбработке() Экспорт
Инф = ПолучитьИнформациюОбОбработке();
ТаблицаКоманд = ПолучитьТаблицуКоманд();
ПараметрыРегистрации = Новый Структура("Вид,Наименование,Версия,БезопасныйРежим,Информация,Назначение");
ЗаполнитьЗначенияСвойств(ПараметрыРегистрации, Инф);
ДобавитьКоманду(ТаблицаКоманд,
Инф.Наименование,
Инф.Идентификатор,
Инф.Использование,
Инф.Оповещение,
Инф.Модификатор);
ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);
Возврат ПараметрыРегистрации;
КонецФункции // СведенияОВнешнейОбработке()
//************************************************************
Функция ПолучитьТаблицуКоманд()
Команды = Новый ТаблицаЗначений;
Команды.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка"));
Команды.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка"));
Команды.Колонки.Добавить("Использование", Новый ОписаниеТипов("Строка"));
Команды.Колонки.Добавить("ПоказыватьОповещение", Новый ОписаниеТипов("Булево"));
Команды.Колонки.Добавить("Модификатор", Новый ОписаниеТипов("Строка"));
Возврат Команды;
КонецФункции // ПолучитьТаблицуКоманд()
//************************************************************
Процедура ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование, ПоказыватьОповещение = Ложь, Модификатор = "")
НоваяКоманда = ТаблицаКоманд.Добавить();
НоваяКоманда.Представление = Представление;
НоваяКоманда.Идентификатор = Идентификатор;
НоваяКоманда.Использование = Использование;
НоваяКоманда.ПоказыватьОповещение = ПоказыватьОповещение;
НоваяКоманда.Модификатор = Модификатор;
КонецПроцедуры // ДобавитьКоманду()
//************************************************************
Процедура ВыполнитьКоманду(ИдентификаторКоманды = "", ПараметрыВыполненияКоманды = Неопределено) Экспорт
НачатьВыполнениеРегламентногоЗадания();
Возврат;
КонецПроцедуры // ВыполнитьКоманду()
// ПОДГОТОВКА РЕГИСТРАЦИИ ГЛОБАЛЬНОГО ОТЧЕТА КОНЕЦ -->
#КонецОбласти
//////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////
#Область Регламентное_задание
Процедура НачатьВыполнениеРегламентногоЗадания() Экспорт
// Дата отбора документов
ЭтотОбъект.ДатаНачала = ?(ЭтотОбъект.ДатаНачала = Дата(1,1,1)
, ДобавитьМесяц(ТекущаяДата(), -1) // Дата(1,1,1)
, ЭтотОбъект.ДатаНачала);
ЭтотОбъект.ДатаОкончания = ?(ЭтотОбъект.ДатаОкончания = Дата(1,1,1)
, ДобавитьМесяц(ТекущаяДата(), +1) // '39991231'
, ЭтотОбъект.ДатаОкончания);
// Универсальный обмен данными XML
Обработка = Обработки.УниверсальныйОбменДаннымиXML.Создать();
// Задаём необходимые для выгрузки параметры (необязательные для редактирования)
Обработка.РежимОбмена = "Выгрузка";
Обработка.ЗагружатьДанныеВРежимеОбмена = Истина;
Обработка.ЗаписыватьРегистрыНаборамиЗаписей = Истина;
Обработка.ЗапоминатьЗагруженныеОбъекты = Истина;
Обработка.ИспользоватьОтборПоДатеДляВсехОбъектов = Истина;
Обработка.ВыгружатьТолькоРазрешенные = Истина;
Обработка.ВыводВОкноСообщенийИнформационныхСообщений = Истина;
Обработка.КоличествоОбработанныхОбъектовДляОбновленияСтатуса = 100;
Обработка.ВыполнитьОбменДаннымиВОптимизированномФормате = Истина;
Обработка.ИмяФайлаПравилОбмена = ПолучитьИмяФайлаПравилОбмена();
//!Задали необходимые параметры для выгрузки
#Область Обязательные_параметры
// Устанавливаем ограничения на выгрузку по датам объектов
Обработка.ДатаНачала = ЭтотОбъект.ДатаНачала;
Обработка.ДатаОкончания = ЭтотОбъект.ДатаОкончания;
// Если хотим выгружать данные в файл - ставим Ложь,
// если Истина - будет произведена выгрузка в базу-приёмник
Обработка.НепосредственноеЧтениеВИБПриемнике = НепосредственноеЧтениеВИБПриемнике;
// Если база-приёмник выгружаемых данных является серверной, то Ложь. Если файловая - Истина
Обработка.ТипИнформационнойБазыДляПодключения = ТипИнформационнойБазыДляПодключения;
#КонецОбласти
Если Не Обработка.НепосредственноеЧтениеВИБПриемнике Тогда
// Если выгружаем данные в файл
Обработка.ИмяФайлаОбмена = ПолучитьПутьФайлаВыгрузки();
Иначе
// Если выгружаем даннные в базу
Обработка.ПользовательИнформационнойБазыДляПодключения = ПользовательИнформационнойБазыДляПодключения;
Обработка.ПарольИнформационнойБазыДляПодключения = ПарольИнформационнойБазыДляПодключения;
Обработка.АутентификацияWindowsИнформационнойБазыДляПодключения = АутентификацияWindowsИнформационнойБазыДляПодключения;
Обработка.ВерсияПлатформыИнформационнойБазыДляПодключения = ВерсияПлатформыИнформационнойБазыДляПодключения;
//Если приёмник данных - серверная база
Если Не Обработка.ТипИнформационнойБазыДляПодключения Тогда
Обработка.ИмяСервераИнформационнойБазыДляПодключения = ИмяСервераИнформационнойБазыДляПодключения;
Обработка.ИмяИнформационнойБазыНаСервереДляПодключения = ИмяИнформационнойБазыНаСервереДляПодключения;
//Если приёмник данных - файловая база
Иначе
Обработка.КаталогИнформационнойБазыДляПодключения = КаталогИнформационнойБазыДляПодключения;
КонецЕсли;
КонецЕсли;
//Действия над регистрацией при выгрузке по планам обмена
Обработка.ТипУдаленияРегистрацииИзмененийДляУзловОбменаПослеВыгрузки = ТипУдаленияРегистрацииИзмененийДляУзловОбменаПослеВыгрузки;
// 0 - не снимать регистрацию,
// 1 - снимать регистрацию
Обработка.ЗагрузитьПравилаОбмена();
//ЕСЛИ НУЖНО ВЫГРУЖАТЬ ПО ПЛАНАМ ОБМЕНА, ТО ВКЛЮЧАЕМ ЭТОТ БЛОК И ПОДСТАВЛЯЕМ СВОЙ УЗЕЛ ПЛАНА ОБМЕНА
//СсылкаНаУзелОбмена = ПланыОбмена.Полный.НайтиПоКоду("БП20")
//Для Каждого Стр Из Обработка.ТаблицаПравилВыгрузки.Строки Цикл
// Стр.Включить = 1;
// Для Каждого Стр1 Из Стр.Строки Цикл
// Стр1.Включить = 1;
// Стр1.СсылкаНаУзелОбмена = СсылкаНаУзелОбмена;
// КонецЦикла;
//КонецЦикла;
ИмяФайлаПротоколаОбмена = ПолучитьИмяФайлаПротоколаОбмена();
Обработка.ИмяФайлаПротоколаОбмена = ИмяФайлаПротоколаОбмена;
Обработка.ВыводВПротоколИнформационныхСообщений = Ложь;
Обработка.ВыводВПротоколСообщенийОбОшибках = Истина;
Обработка.ВыполнитьВыгрузку();
Если Обработка.ФлагОшибки Тогда
Сообщить(СтрШаблон("Возникшие ошибки записаны в %1", ИмяФайлаПротоколаОбмена));
Иначе
Сообщить("Обработка отработала без ошибок.");
КонецЕсли;
КонецПроцедуры // НачатьВыполнениеРегламентногоЗадания()
#КонецОбласти
//////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////
#Область Вспомогательные_функции
Функция ПолучитьИмяФайлаПротоколаОбмена()
СоздатьКаталог(ПапкаВыгрузки);
КаталогНаДиске = Новый Файл(ПапкаВыгрузки);
Выборка = Справочники.Организации.Выбрать();
Префиксы = "";
Пока Выборка.Следующий() Цикл
Префикс = Выборка.Префикс;
Если ПустаяСтрока(Префикс) Тогда Продолжить КонецЕсли;
Префиксы = СтрШаблон("%1-%2", Префиксы, Префикс);
КонецЦикла;
ФайлПротоколаОбмена = Новый Файл(СтрШаблон("%1\%2%3.xml"
, КаталогНаДиске.ПолноеИмя
, Формат(ТекущаяДата(), "ДФ=yyyy-MM-dd-HH-mm")
, Префиксы));
Возврат ФайлПротоколаОбмена.ПолноеИмя;
КонецФункции // ПолучитьИмяФайлаПравилОбмена()
//************************************************************
Функция ПолучитьИмяФайлаПравилОбмена()
СоздатьКаталог(ПапкаВыгрузки);
КаталогНаДиске = Новый Файл(ПапкаВыгрузки);
МакетПравилОбмена = ПолучитьПравилаОбмена();
ИмяФайлаПравилОбмена = Новый Файл(СтрШаблон("%1\%2.xml"
, КаталогНаДиске.ПолноеИмя
, ИмяМакетаПравилОбмена));
МакетПравилОбмена.Записать(ИмяФайлаПравилОбмена, КодировкаТекста.UTF8);
Возврат ИмяФайлаПравилОбмена;
КонецФункции // ПолучитьИмяФайлаПравилОбмена()
//************************************************************
Функция ПолучитьПравилаОбмена()
Возврат ЭтотОбъект.ПолучитьМакет(ИмяМакетаПравилОбмена);
КонецФункции // ПолучитьПравилаВыгрузки()
//************************************************************
Функция ПолучитьПутьФайлаВыгрузки()
СоздатьКаталог(ПапкаВыгрузки);
КаталогНаДиске = Новый Файл(ПапкаВыгрузки);
Выборка = Справочники.Организации.Выбрать();
Префиксы = "";
Пока Выборка.Следующий() Цикл
Префикс = Выборка.Префикс;
Если ПустаяСтрока(Префикс) Тогда Продолжить КонецЕсли;
Префиксы = СтрШаблон("%1-%2", Префиксы, Префикс);
КонецЦикла;
ФайлВыгрузки = Новый Файл(СтрШаблон("%1\%2%3.xml"
, КаталогНаДиске.ПолноеИмя
, Формат(ТекущаяДата(), "ДФ=yyyy-MM-dd-HH-mm")
, Префиксы));
Если ФайлВыгрузки.Существует() Тогда
УдалитьФайлы(ФайлВыгрузки);
КонецЕсли;
Возврат ФайлВыгрузки.ПолноеИмя;
КонецФункции // ПолучитьПутьФайлаВыгрузки()
#КонецОбласти
//////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////
#Область Заполняем_константы
// Название макета с правилами обмена
ИмяМакетаПравилОбмена = "ПравилаОбмена";
// Вид выгрузки
// Ложь - хотим выгружать данные в файл
// Истина - будет произведена выгрузка в базу-приёмник
НепосредственноеЧтениеВИБПриемнике = Истина;
// База-приёмник выгружаемых данных
// Ложь - серверная
// Истина - файловая
ТипИнформационнойБазыДляПодключения = Ложь;
ВерсияПлатформыИнформационнойБазыДляПодключения = "V83";
// . Если выгружаем данные в файл
ПапкаВыгрузки = "C:\exchange\";
// . Если выгружаем данные в базу
ПользовательИнформационнойБазыДляПодключения = "";
ПарольИнформационнойБазыДляПодключения = "";
АутентификацияWindowsИнформационнойБазыДляПодключения = Ложь;
// . . Если приёмник данных - серверная база
ИмяСервераИнформационнойБазыДляПодключения = "";
ИмяИнформационнойБазыНаСервереДляПодключения = "";
// . . Если приёмник данных - файловая база
КаталогИнформационнойБазыДляПодключения = "";
// Действия над регистрацией при выгрузке по планам обмена
// 0 - не снимать регистрацию,
// 1 - снимать регистрацию
ТипУдаленияРегистрацииИзмененийДляУзловОбменаПослеВыгрузки = 0;
#КонецОбласти
//////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////
#Область Комментарии
/// Author: Plague Fox
/// Site: pfx.pw
/// Infostart: https://infostart.ru/profile/PlugFox/
/// Telegram: @PlugFox
/// Email: PlugFox@gmail.com
/// Github: http://github.com/PlugFox
#КонецОбласти
//////////////////////////////////////////////////////////////
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment