Бухгалтерия предприятия КОРП, редакция 2.0 / Модуль менеджера
файл#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
#Область ПрограммныйИнтерфейс
#Область ПроцедурыИФункцииБсп
// Заполняет настройки, влияющие на использование плана обмена.
//
// Параметры:
// Настройки - Структура - настройки плана обмена по умолчанию, см. ОбменДаннымиСервер.НастройкиПланаОбменаПоУмолчанию,
// описание возвращаемого значения функции.
//
Процедура ПриПолученииНастроек(Настройки) Экспорт
//Настройки.ПредупреждатьОНесоответствииВерсийПравилОбмена = Истина;
Настройки.ПланОбменаИспользуетсяВМоделиСервиса = Ложь;
Настройки.Алгоритмы.ПриПолученииОписанияВариантаНастройки = Истина;
Настройки.Алгоритмы.НастроитьИнтерактивнуюВыгрузку = Истина;
Настройки.Алгоритмы.ПредставлениеОтбораИнтерактивнойВыгрузки = Истина;
Настройки.Алгоритмы.ПриПодключенииККорреспонденту = Истина;
КонецПроцедуры
// Заполняет набор параметров, определяющих вариант настройки обмена.
//
// Параметры:
// ОписаниеВарианта - Структура - набор варианта настройки по умолчанию,
// см. ОбменДаннымиСервер.ОписаниеВариантаНастройкиОбменаПоУмолчанию,
// описание возвращаемого значения.
// ИдентификаторНастройки - Строка - идентификатор варианта настройки обмена.
// ПараметрыКонтекста - Структура - см. ОбменДаннымиСервер.ПараметрыКонтекстаПолученияОписанияВариантаНастройки,
// описание возвращаемого значения функции.
//
Процедура ПриПолученииОписанияВариантаНастройки(ОписаниеВарианта, ИдентификаторНастройки, ПараметрыКонтекста) Экспорт
ОписаниеВарианта.ПутьКФайлуКомплектаПравилНаПользовательскомСайте = "https://users.v8.1c.ru/distribution/project/AccountingCorp";
ОписаниеВарианта.ПутьКФайлуКомплектаПравилВКаталогеШаблонов = "\1c\AccountingCorp";
ОписаниеВарианта.ИмяФайлаНастроекДляПриемника = "Настройки обмена для БП КОРП";
ОписаниеВарианта.ИспользоватьПомощникСозданияОбменаДанными = Истина;
ОписаниеВарианта.ИспользуемыеТранспортыСообщенийОбмена = ИспользуемыеТранспортыСообщенийОбмена();
ОписаниеВарианта.КраткаяИнформацияПоОбмену = КраткаяИнформацияПоОбмену();
ОписаниеВарианта.ПодробнаяИнформацияПоОбмену = "ПланОбмена.ОбменУправлениеТорговлейБухгалтерияПредприятияКОРП.Форма.ПодробнаяИнформация";
КонецПроцедуры
// Возвращает краткую информацию по обмену, выводимую при настройке синхронизации данных.
//
Функция КраткаяИнформацияПоОбмену()
ПоясняющийТекст = НСтр("ru = 'Позволяет синхронизировать данные между конфигурациями ""Управление торговлей"", ред. 11, и ""Бухгалтерия предприятия КОРП"", ред. 2.
|Синхронизация данных выполняется в двустороннем режиме на уровне документов и справочной информации.'");
Возврат ПоясняющийТекст;
КонецФункции
// Определяет несколько вариантов настройки расписания выполнения обмена данными;
// Рекомендуется указывать не более 3 вариантов;
// Эти варианты должны быть одинаковым в плане обмена источника и приемника.
//
// Параметры:
// Нет.
//
// Возвращаемое значение:
// ВариантыНастройки - СписокЗначений - список расписаний обмена данными
//
Функция ВариантыНастройкиРасписания() Экспорт
Месяцы = Новый Массив;
Месяцы.Добавить(1);
Месяцы.Добавить(2);
Месяцы.Добавить(3);
Месяцы.Добавить(4);
Месяцы.Добавить(5);
Месяцы.Добавить(6);
Месяцы.Добавить(7);
Месяцы.Добавить(8);
Месяцы.Добавить(9);
Месяцы.Добавить(10);
Месяцы.Добавить(11);
Месяцы.Добавить(12);
// Расписание №1
ДниНедели = Новый Массив;
ДниНедели.Добавить(1);
ДниНедели.Добавить(2);
ДниНедели.Добавить(3);
ДниНедели.Добавить(4);
ДниНедели.Добавить(5);
Расписание1 = Новый РасписаниеРегламентногоЗадания;
Расписание1.ДниНедели = ДниНедели;
Расписание1.ПериодПовтораВТечениеДня = 900; // 15 минут
Расписание1.ПериодПовтораДней = 1; // каждый день
Расписание1.Месяцы = Месяцы;
// Расписание №2
ДниНедели = Новый Массив;
ДниНедели.Добавить(1);
ДниНедели.Добавить(2);
ДниНедели.Добавить(3);
ДниНедели.Добавить(4);
ДниНедели.Добавить(5);
ДниНедели.Добавить(6);
ДниНедели.Добавить(7);
Расписание2 = Новый РасписаниеРегламентногоЗадания;
Расписание2.ВремяНачала = Дата('00010101080000');
Расписание2.ВремяКонца = Дата('00010101200000');
Расписание2.ПериодПовтораВТечениеДня = 3600; // каждый час
Расписание2.ПериодПовтораДней = 1; // каждый день
Расписание2.ДниНедели = ДниНедели;
Расписание2.Месяцы = Месяцы;
// Расписание №3
ДниНедели = Новый Массив;
ДниНедели.Добавить(2);
ДниНедели.Добавить(3);
ДниНедели.Добавить(4);
ДниНедели.Добавить(5);
ДниНедели.Добавить(6);
Расписание3 = Новый РасписаниеРегламентногоЗадания;
Расписание3.ДниНедели = ДниНедели;
Расписание3.ВремяНачала = Дата('00010101020000');
Расписание3.ПериодПовтораДней = 1; // каждый день
Расписание3.Месяцы = Месяцы;
// возвращаемое значение функции
ВариантыНастройки = Новый СписокЗначений;
ВариантыНастройки.Добавить(Расписание1, "Один раз в 15 минут, кроме субботы и воскресенья");
ВариантыНастройки.Добавить(Расписание2, "Каждый час с 8:00 до 20:00, ежедневно");
ВариантыНастройки.Добавить(Расписание3, "Каждую ночь в 2:00, кроме субботы и воскресенья");
Возврат ВариантыНастройки;
КонецФункции
// Возвращает массив используемых транспортов сообщений для этого плана обмена
//
// 1. Например, если план обмена поддерживает только два транспорта сообщений FILE и FTP,
// то тело функции следует определить следующим образом:
//
// Результат = Новый Массив;
// Результат.Добавить(Перечисления.ВидыТранспортаСообщенийОбмена.FILE);
// Результат.Добавить(Перечисления.ВидыТранспортаСообщенийОбмена.FTP);
// Возврат Результат;
//
// 2. Например, если план обмена поддерживает все транспорты сообщений, определенных в конфигурации,
// то тело функции следует определить следующим образом:
//
// Возврат ОбменДаннымиСервер.ВсеТранспортыСообщенийОбменаКонфигурации();
//
// Возвращаемое значение:
// Массив - массив содержит значения перечисления ВидыТранспортаСообщенийОбмена
//
Функция ИспользуемыеТранспортыСообщенийОбмена()
Результат = Новый Массив;
Результат.Добавить(Перечисления.ВидыТранспортаСообщенийОбмена.FILE);
Результат.Добавить(Перечисления.ВидыТранспортаСообщенийОбмена.FTP);
Результат.Добавить(Перечисления.ВидыТранспортаСообщенийОбмена.COM);
Возврат Результат;
КонецФункции
#КонецОбласти
#Область ОбработчикиСобытий
// Обработчик события при подключении к корреспонденту.
// Событие возникает при успешном подключении к корреспонденту и получении версии конфигурации корреспондента
// при настройке обмена с использованием помощника через прямое подключение
// или при подключении к корреспонденту через Интернет.
// В обработчике можно проанализировать версию корреспондента и,
// если настройка обмена не поддерживается с корреспондентом указанной версии, то вызвать исключение.
//
// Параметры:
// ВерсияКорреспондента (только чтение) – Строка – версия конфигурации корреспондента, например, "2.1.5.1".
//
Процедура ПриПодключенииККорреспонденту(ВерсияКорреспондента) Экспорт
Если ВерсияКорреспондента = "0.0.0.0" Тогда
ВерсияКорреспондента = "2.0.59.1";
КонецЕсли;
Если ОбщегоНазначенияКлиентСервер.СравнитьВерсии(ВерсияКорреспондента, "2.0.59.0") < 0 Тогда
ВызватьИсключение НСтр("ru = 'Настройка синхронизации данных поддерживается только с конфигурацией
|""Бухгалтерия предприятия КОРП"" версии 2.0.59 и выше.'"
);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область Переопределяемаянастройкадополнениявыгрузки
// Предназначена для настройки вариантов интерактивной настройки выгрузки по сценарию узла.
// Для настройки необходимо установить значения свойств параметров в необходимые значения.
//
// Параметры:
// Получатель - ПланОбменаСсылка - Узел, для которого производится настройка
// Параметры - Структура - Параметры для изменения. Содержит поля:
//
// ВариантБезДополнения - Структура - настройки типового варианта "Не добавлять".
// Содержит поля:
// Использование - Булево - флаг разрешения использования варианта. По умолчанию Истина.
// Порядок - Число - порядок размещения варианта на форме помощника, сверху вниз. По умолчанию 1.
// Заголовок - Строка - позволяет переопределить название типового варианта.
// Пояснение - Строка - позволяет переопределить текст пояснения варианта для пользователя.
//
// ВариантВсеДокументы - Структура - настройки типового варианта "Добавить все документы за период".
// Содержит поля:
// Использование - Булево - флаг разрешения использования варианта. По умолчанию Истина.
// Порядок - Число - порядок размещения варианта на форме помощника, сверху вниз. По умолчанию 2.
// Заголовок - Строка - позволяет переопределить название типового варианта.
// Пояснение - Строка - позволяет переопределить текст пояснения варианта для пользователя.
//
// ВариантПроизвольныйОтбор - Структура - настройки типового варианта "Добавить данные с произвольным отбором".
// Содержит поля:
// Использование - Булево - флаг разрешения использования варианта. По умолчанию Истина.
// Порядок - Число - порядок размещения варианта на форме помощника, сверху вниз. По умолчанию 3.
// Заголовок - Строка - позволяет переопределить название типового варианта.
// Пояснение - Строка - позволяет переопределить текст пояснения варианта для пользователя.
//
// ВариантДополнительно - Структура - настройки дополнительного варианта по сценарию узла.
// Содержит поля:
// Использование - Булево - флаг разрешения использования варианта. По умолчанию Ложь.
// Порядок - Число - порядок размещения варианта на форме помощника, сверху вниз. По умолчанию 4.
// Заголовок - Строка - название варианта для отображения на форме.
// ИмяФормыОтбора - Cтрока - Имя формы, вызываемой для редактирования настроек.
// ЗаголовокКомандыФормы - Cтрока - Заголовок для отрисовки на форме команды открытия формы настроек.
// ИспользоватьПериодОтбора - Булево - флаг того, что необходим общий отбор по периоду. По умолчанию Ложь.
// ПериодОтбора - СтандартныйПериод - значение периода общего отбора, предлагаемого по умолчанию.
//
// Отбор - ТаблицаЗначений - содержит строки с описанием подробных отборов по сценарию узла.
// Содержит колонки:
// ПолноеИмяМетаданных - Строка - полное имя метаданных регистрируемого объекта, отбор которого описывает строка.
// Например "Документ._ДемоПоступлениеТоваров". Можно использовать специальные
// значения "ВсеДокументы" и "ВсеСправочники" для отбора соответственно всех
// документов и всех справочников, регистрирующихся на узле Получатель.
// ВыборПериода - Булево - флаг того, что данная строка описывает отбор с общим периодом.
// Период - СтандартныйПериод - значение периода общего отбора для метаданных строки, предлагаемого по умолчанию.
// Отбор - ОтборКомпоновкиДанных - отбор по умолчанию. Поля отбора формируются в соответствии с общим правилами
// формирования полей компоновки. Например, для указания отбора по реквизиту
// документа "Организация", необходимо использовать поле "Ссылка.Организация"
Процедура НастроитьИнтерактивнуюВыгрузку(Получатель, Параметры) Экспорт
Если Получатель.РежимВыгрузкиДокументов = Перечисления.РежимыВыгрузкиОбъектовОбмена.НеВыгружать
И Получатель.РежимВыгрузкиСправочников = Перечисления.РежимыВыгрузкиОбъектовОбмена.НеВыгружать Тогда
Параметры.ВариантВсеДокументы.Использование = Ложь;
Параметры.ВариантБезДополнения.Использование = Ложь;
Параметры.ВариантПроизвольныйОтбор.Использование = Ложь;
Параметры.ВариантДополнительно.Использование = Ложь;
Иначе
//Отключаем вариант "ВариантВсеДокументы"
Параметры.ВариантВсеДокументы.Использование = Ложь;
//Настраиваем вариант "Без дополнения"
Параметры.ВариантБезДополнения.Использование = Истина;
Параметры.ВариантБезДополнения.Порядок = 3;
Параметры.ВариантБезДополнения.Заголовок = НСтр("ru = 'Не добавлять документы к отправке'")
+ Символы.ПС
+ "Отправлять только нормативно-справочную информацию, измененную с момента последней отправки.";
//Настраиваем вариант "Произвольный отбор"
Параметры.ВариантПроизвольныйОтбор.Использование = Истина;
Параметры.ВариантПроизвольныйОтбор.Порядок = 2;
Если Получатель.ПравилаОтправкиДокументов = "НеСинхронизировать" Тогда
Параметры.ВариантПроизвольныйОтбор.Заголовок = НСтр("ru = 'Добавить справочники'");
Иначе
Параметры.ВариантПроизвольныйОтбор.Заголовок = НСтр("ru = 'Добавить произвольные справочники и документы'");
КонецЕсли;
Если Не Получатель.ПравилаОтправкиДокументов = "НеСинхронизировать" Тогда
// Вычисляем и устанавливаем параметры сценария
ПараметрыПоУмолчанию = ПараметрыВыгрузкиПоУмолчанию(Получатель);
// Настраиваем вариант "Дополнительно" по сценарию узла
Параметры.ВариантДополнительно.Использование = Истина;
Параметры.ВариантДополнительно.Порядок = 1;
Параметры.ВариантДополнительно.Заголовок = НСтр("ru='Отправить все документы'");
Параметры.ВариантДополнительно.ИмяФормыОтбора = "ОбщаяФорма.НастройкаВыгрузки";
Параметры.ВариантДополнительно.ЗаголовокКомандыФормы = НСтр("ru='Выбрать организации для отбора'");
Параметры.ВариантДополнительно.ИспользоватьПериодОтбора = Истина;
Параметры.ВариантДополнительно.ПериодОтбора = ПараметрыПоУмолчанию.Период;
// Добавляем строка настройки отбора
СтрокаОтбора = Параметры.ВариантДополнительно.Отбор.Добавить();
СтрокаОтбора.ПолноеИмяМетаданных = "ВсеДокументы";
СтрокаОтбора.ВыборПериода = Истина;
СтрокаОтбора.Период = ПараметрыПоУмолчанию.Период;
СтрокаОтбора.Отбор = ПараметрыПоУмолчанию.Отбор;
Иначе
Параметры.ВариантДополнительно.Использование = Ложь;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
// Возвращает представление отбора для варианта дополнения выгрузки по сценарию узла.
// См. описание "ВариантДополнительно" в процедуре "НастроитьИнтерактивнуюВыгрузку"
//
// Параметры:
// Получатель - ПланОбменаСсылка - Узел, для которого определяется представление отбора
// Параметры - Структура - Характеристики отбора. Содержит поля:
// ИспользоватьПериодОтбора - Булево - флаг того, что необходимо использовать общий отбор по периоду.
// ПериодОтбора - СтандартныйПериод - значение периода общего отбора.
// Отбор - ТаблицаЗначений - содержит строки с описанием подробных отборов по сценарию узла.
// Содержит колонки:
// ПолноеИмяМетаданных - Строка - полное имя метаданных регистрируемого объекта, отбор которого описывает строка.
// Например "Документ._ДемоПоступлениеТоваров". Могут быть использованы специальные
// значения "ВсеДокументы" и "ВсеСправочники" для отбора соответственно всех
// документов и всех справочников, регистрирующихся на узле Получатель.
// ВыборПериода - Булево - флаг того, что данная строка описывает отбор с общим периодом.
// Период - СтандартныйПериод - значение периода общего отбора для метаданных строки.
// Отбор - ОтборКомпоновкиДанных - поля отбора. Поля отбора формируются в соответствии с общим правилами
// формирования полей компоновки. Например, для указания отбора по реквизиту
// документа "Организация", будет использовано поле "Ссылка.Организация"
//
// Возвращаемое значение:
// Строка - описание отбора
//
Функция ПредставлениеОтбораИнтерактивнойВыгрузки(Получатель, Параметры) Экспорт
Если Параметры.ИспользоватьПериодОтбора Тогда
Если ЗначениеЗаполнено(Параметры.ПериодОтбора) Тогда
ОписаниеПериода = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru='за период: %1'"), НРег(Параметры.ПериодОтбора));
Иначе
ДатаНачалаВыгрузки = Получатель.ДатаНачалаВыгрузкиДокументов;
Если ЗначениеЗаполнено(ДатаНачалаВыгрузки) Тогда
ОписаниеПериода = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru='начиная с даты начала отправки документов: %1'"), Формат(ДатаНачалаВыгрузки, "ДЛФ=DD"));
Иначе
ОписаниеПериода = НСтр("ru='за весь период учета'");
КонецЕсли;
КонецЕсли;
Иначе
ОписаниеПериода = "";
КонецЕсли;
СписокОрганизаций = ОрганизацииОтбораИнтерактивнойВыгрузки(Параметры.Отбор);
Если СписокОрганизаций.Количество()=0 Тогда
ОписаниеОтбораОрганизации = НСтр("ru='по всем организациям'");
Иначе
ОписаниеОтбораОрганизации = "";
Для Каждого Элемент Из СписокОрганизаций Цикл
ОписаниеОтбораОрганизации = ОписаниеОтбораОрганизации+ ", " + Элемент.Представление;
КонецЦикла;
ОписаниеОтбораОрганизации = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru='с отбором по организациям: %1'"), СокрЛП(Сред(ОписаниеОтбораОрганизации, 2)));
КонецЕсли;
Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru='Будут отправлены все документы %1,
|%2'"),
ОписаниеПериода, ОписаниеОтбораОрганизации
);
КонецФункции
// Расчет параметров выгрузки по умолчанию.
//
// Параметры:
// Получатель - ПланОбменаСсылка - Узел, для которого производитсят настройка
//
// Возвращаемое значение - Структура - содержит поля:
// ПредставлениеОтбора - Строка - текстовое описание отбора по умолчанию
// Период - СтандартныйПериод - значение периода общего отбора по умолчанию
// Отбор - ОтборКомпоновкиДанных - отбор
//
Функция ПараметрыВыгрузкиПоУмолчанию(Получатель)
Результат = Новый Структура;
// Период по умолчанию
Результат.Вставить("Период", Новый СтандартныйПериод);
Результат.Период.Вариант = ВариантСтандартногоПериода.ПрошлыйМесяц;
// Отбор по умолчанию и его представление
КомпоновщикОтбора = Новый КомпоновщикНастроекКомпоновкиДанных;
Результат.Вставить("Отбор", КомпоновщикОтбора.Настройки.Отбор);
// Общее представление, период не включаем, так как в этом сценарии поле периода будет редактироваться отдельно
Результат.Вставить( "ПредставлениеОтбора",
СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru='Будут отправлены все документы за %1'"),
НРег(Строка(Результат.Период.Вариант))));
Возврат Результат;
КонецФункции
// Возвращает список организаций по таблице отбора (см "ПредставлениеОтбораИнтерактивнойВыгрузки")
// Также используется из демонстрационной формы "НастройкаВыгрузки" этого плана обмена.
//
// Параметры:
// ТаблицаОтбора - ТаблицаЗначений - содержит строки с описанием подробных отборов по сценарию узла. Содержит колонки:
// ПолноеИмяМетаданных - Строка
// ВыборПериода - Булево
// Период - СтандартныйПериод
// Отбор - ОтборКомпоновкиДанных
//
// Возвращаемое значение:
// СписокЗначений - значение - ссылка на организацию, представление - наименование
//
Функция ОрганизацииОтбораИнтерактивнойВыгрузки(Знач ТаблицаОтбора) Экспорт
Результат = Новый СписокЗначений;
Если ТаблицаОтбора.Количество()=0 Или ТаблицаОтбора[0].Отбор.Элементы.Количество()=0 Тогда
// Нет данных отбора
Возврат Результат;
КонецЕсли;
// Мы знаем состав отбора, так как помещали туда сами - или из "НастроитьИнтерактивнуюВыгрузку"
// или как результат редактирования в форме
СтрокаДанных = ТаблицаОтбора[0].Отбор.Элементы[0];
Отобранные = СтрокаДанных.ПравоеЗначение;
ТипКоллекции = ТипЗнч(Отобранные);
Если ТипКоллекции=Тип("СписокЗначений") Тогда
Для Каждого Элемент Из Отобранные Цикл
ДобавитьСписокОрганизций(Результат, Элемент.Значение);
КонецЦикла;
ИначеЕсли ТипКоллекции=Тип("Массив") Тогда
ДобавитьСписокОрганизций(Результат, Отобранные);
ИначеЕсли ТипКоллекции=Тип("СправочникСсылка.Организации") Тогда
Если Результат.НайтиПоЗначению(Отобранные)=Неопределено Тогда
Результат.Добавить(Отобранные, Отобранные.Наименование);
КонецЕсли;
КонецЕсли;
Возврат Результат;
КонецФункции
// Добавляет в список органинизаций коллекцию
//
// Параметры:
// Список - СписокЗначений - дополняемый список
// Организации - коллекция организаций
//
Процедура ДобавитьСписокОрганизций(Список, Знач Организации)
Для Каждого Организация Из Организации Цикл
Если ТипЗнч(Организация)=Тип("Массив") Тогда
ДобавитьСписокОрганизций(Список, Организация);
Продолжить;
КонецЕсли;
Если Список.НайтиПоЗначению(Организация)=Неопределено Тогда
Список.Добавить(Организация, Организация.Наименование);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
#КонецОбласти
#КонецОбласти
#КонецЕсли