Last active
February 6, 2019 21:29
-
-
Save PlugFox/64cb2c05665e7ec53269e281f8a8b25e to your computer and use it in GitHub Desktop.
Модуль объекта регламентного переноса данных между базами 1с
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
////////////////////////////////////////////////////////////// | |
#Область Объявление_констант | |
Перем ИмяМакетаПравилОбмена | |
, НепосредственноеЧтениеВИБПриемнике | |
, ТипИнформационнойБазыДляПодключения | |
, ПапкаВыгрузки | |
, ИмяСервераИнформационнойБазыДляПодключения | |
, ИмяИнформационнойБазыНаСервереДляПодключения | |
, ПользовательИнформационнойБазыДляПодключения | |
, ПарольИнформационнойБазыДляПодключения | |
, Аутентификация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: [email protected] | |
/// Github: http://github.com/PlugFox | |
#КонецОбласти | |
////////////////////////////////////////////////////////////// |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment