Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save JohnyDeath/9d8d178a39ba24363cce455ea400463c to your computer and use it in GitHub Desktop.
Save JohnyDeath/9d8d178a39ba24363cce455ea400463c to your computer and use it in GitHub Desktop.
Общий модуль Континент
////В модуле обработки, где планируется использовать методы данной обработки вставить следующий код:
// //*********************
//Перем _ОбщийМодульКонтинент;
//СсылкаНаДопОбработку = Справочники.ДополнительныеОтчетыИОбработки.НайтиПоНаименованию("_ОбщийМодульКонтинент");
//_ОбщийМодульКонтинент = ДополнительныеОтчетыИОбработки.ОбъектВнешнейОбработки(СсылкаНаДопОбработку);
// //***********************
// Далее обращаться к методам, как к ОбщемуМодулю. Например:
// _ОбщийМодульКонтинент._Сообщить("Привет, Карл!");
Перем СинонимыОрганизаций;
Перем _Услуги Экспорт; //Фиксированная структура
Перем _ТипыУслуг Экспорт;//ФиксированнаяСтруктурв
#Область Интерфейс
Функция _Сообщить(ТекстСообщения) Экспорт
Сообщить(ТекстСообщения);
КонецФункции
Функция ВызватьИзДопОбработки() Экспорт
СсылкаНаОбработку = Справочники.ДополнительныеОтчетыИОбработки.НайтиПоНаименованию("_ОбщийМодульКонтинент");
обОбработки = ДополнительныеОтчетыИОбработки.ОбъектВнешнейОбработки(СсылкаНаОбработку);
обОбработки.ТестовыйМетод();
КонецФункции
//Возвращает ИСТИНА, если сотрудник - штатный
// ЛОЖЬ - если ГПХ или "Не сотрудник" или неопределен
// В параметр "Сотрудник" возвращается найденный сотрудник, в ФизЛицо - физлицо по этому таб номеру
Функция ЭтоШтатныйСотрудник(Знач Организация, Знач ТабельныйНомер, Знач ДатаСреза = Неопределено, Сотрудник = Неопределено, ФизЛицо = Неопределено) Экспорт
Результат = Ложь;
Если ЭтоНесотрудник(ТабельныйНомер) Тогда
Возврат Результат;
КонецЕсли;
Если ДатаСреза = Неопределено Тогда
ДатаСреза = ТекущаяДатаСеанса();
КонецЕсли;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| КадроваяИсторияСотрудниковСрезПоследних.ФизическоеЛицо КАК ФизЛицо,
| КадроваяИсторияСотрудниковСрезПоследних.Сотрудник,
| ПериодыДействияДоговоровГражданскоПравовогоХарактера.Сотрудник КАК СотрудникГПХ
|ИЗ
| РегистрСведений.КадроваяИсторияСотрудников.СрезПоследних(
| ,
| Организация = &Организация
| И (Сотрудник.Код = &ТабельныйНомер
| ИЛИ Сотрудник.Код = &ТабельныйНомерПрефикс)) КАК КадроваяИсторияСотрудниковСрезПоследних
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПериодыДействияДоговоровГражданскоПравовогоХарактера КАК ПериодыДействияДоговоровГражданскоПравовогоХарактера
| ПО КадроваяИсторияСотрудниковСрезПоследних.Сотрудник = ПериодыДействияДоговоровГражданскоПравовогоХарактера.Сотрудник
| И КадроваяИсторияСотрудниковСрезПоследних.Организация = ПериодыДействияДоговоровГражданскоПравовогоХарактера.Организация
| И КадроваяИсторияСотрудниковСрезПоследних.ФизическоеЛицо = ПериодыДействияДоговоровГражданскоПравовогоХарактера.ФизическоеЛицо
| И ПериодыДействияДоговоровГражданскоПравовогоХарактера.ДатаНачала <= &ДатаСреза
| И ПериодыДействияДоговоровГражданскоПравовогоХарактера.ДатаОкончания > &ДатаСреза";
Запрос.УстановитьПараметр("ТабельныйНомер", СокрЛП(ТабельныйНомер));
Запрос.УстановитьПараметр("ТабельныйНомерПрефикс","БК00-0" + СокрЛП(ТабельныйНомер));
Запрос.УстановитьПараметр("Организация", Организация);
Запрос.УстановитьПараметр("ДатаСреза", ДатаСреза);
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
Сотрудник = Выборка.Сотрудник;
ФизЛицо = Выборка.ФизЛицо;
Если ЗначениеЗаполнено(Выборка.СотрудникГПХ) Тогда
Результат = Ложь;
Иначе
Результат = Истина;
КонецЕсли;
КонецЕсли;
Возврат Результат;
КонецФункции
//Возвращает ИСТИНА, если в строке ТабНомера континента стоят предопределенные строки-константы
Функция ЭтоНесотрудник(Знач ТабельныйНомер) Экспорт
ПредопределенныеИмена = Новый Массив;
ПредопределенныеИмена.Добавить(".Не сотрудник");
ПредопределенныеИмена.Добавить("NA");
ПредопределенныеИмена.Добавить("na");
Возврат (ПредопределенныеИмена.Найти(ТабельныйНомер) <> Неопределено);
КонецФункции
//Возвращает Организацию ЕРП по наименованию Континента
// Если не найдено - Неопределено
Функция ОрганизацияПоНаименованиюКонтинента(Знач ИмяОрганизацииВКонтиненте) Экспорт
Если СинонимыОрганизаций = Неопределено Тогда
ЗаполнитьСинонимыОрганизаций();
КонецЕсли;
Возврат СинонимыОрганизаций.Получить(ИмяОрганизацииВКонтиненте);
КонецФункции
// Возвращает режим загрузки:
//0 - ГПХ
//1 - Не сотрудники
//2 - Сотрудники
//3 - Сотрудники. Билеты и гостиницы
Функция РассчитатьРежимЗагрузки(Знач Организация, Знач ТабельныйНомер, Знач ДатаСреза = Неопределено, Сотрудник = Неопределено,
Знач УслугаТип, Знач УслугаНазвание, Знач УслугаОписание) Экспорт
Если ЭтоНесотрудник(ТабельныйНомер) Тогда
Возврат 1
КонецЕсли;
Если ДатаСреза = Неопределено Тогда
ДатаСреза = ТекущаяДатаСеанса();
КонецЕсли;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| КадроваяИсторияСотрудниковСрезПоследних.ФизическоеЛицо КАК ФизЛицо,
| КадроваяИсторияСотрудниковСрезПоследних.Сотрудник,
| ПериодыДействияДоговоровГражданскоПравовогоХарактера.Сотрудник КАК СотрудникГПХ
|ИЗ
| РегистрСведений.КадроваяИсторияСотрудников.СрезПоследних(
| ,
| Организация = &Организация
| И (Сотрудник.Код = &ТабельныйНомер
| ИЛИ Сотрудник.Код = &ТабельныйНомерПрефикс)) КАК КадроваяИсторияСотрудниковСрезПоследних
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПериодыДействияДоговоровГражданскоПравовогоХарактера КАК ПериодыДействияДоговоровГражданскоПравовогоХарактера
| ПО КадроваяИсторияСотрудниковСрезПоследних.Сотрудник = ПериодыДействияДоговоровГражданскоПравовогоХарактера.Сотрудник
| И КадроваяИсторияСотрудниковСрезПоследних.Организация = ПериодыДействияДоговоровГражданскоПравовогоХарактера.Организация
| И КадроваяИсторияСотрудниковСрезПоследних.ФизическоеЛицо = ПериодыДействияДоговоровГражданскоПравовогоХарактера.ФизическоеЛицо
| И ПериодыДействияДоговоровГражданскоПравовогоХарактера.ДатаНачала <= &ДатаСреза
| И ПериодыДействияДоговоровГражданскоПравовогоХарактера.ДатаОкончания > &ДатаСреза";
Запрос.УстановитьПараметр("ТабельныйНомер", СокрЛП(ТабельныйНомер));
Запрос.УстановитьПараметр("ТабельныйНомерПрефикс","БК00-0" + СокрЛП(ТабельныйНомер));
Запрос.УстановитьПараметр("Организация", Организация);
Запрос.УстановитьПараметр("ДатаСреза", ДатаСреза);
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
Сотрудник = Выборка.Сотрудник;
ФизЛицо = Выборка.ФизЛицо;
Если ЗначениеЗаполнено(Выборка.СотрудникГПХ) Тогда
Возврат 0
КонецЕсли;
КонецЕсли;
// Как понять что Режим загрузки = 3 (Сотрудники. Билеты и гостиницы):
//1. ТипУслуги в (Авиабилеты, Гостиницы, Ж/д билеты)
//2. Услуга не Сбор и не Штраф
//3. это не Аннулирование гостиницы
Если УслугаТип = _ТипыУслуг.Авиабилеты Или
УслугаТип = _ТипыУслуг.Гостиницы Или
УслугаТип = _ТипыУслуг.Ждбилеты Тогда
УслугаНазвание = НРег(УслугаНазвание);
Если Не СтрНайти(УслугаНазвание, "сбор") И Не СтрНайти(УслугаНазвание, "штраф") Тогда
УслугаОписание = НРег(УслугаОписание);
Если Не (УслугаТип = "Гостиницы" И СтрНайти(УслугаНазвание, "аннулирование")) Тогда
Возврат 3
КонецЕсли;
КонецЕсли;
КонецЕсли;
Возврат 2
КонецФункции
Функция ЗаполнитьРегистрИзВебСервиса(ДатаНачала, ДатаОкончания) Экспорт
Если ЗаполнитьШаблонСДаннымиИзВебСервиса(ДатаНачала, ДатаОкончания) Тогда
Возврат ПрочитатьШаблонСДанными()
КонецЕсли;
Возврат Ложь
КонецФункции
#КонецОбласти
#Область Служебные
Процедура Инит()
ЗаполнитьСинонимыОрганизаций();
_Услуги = ЗаполнитьУслуги();
_ТипыУслуг = ЗаполнитьТипыУслуг();
КонецПроцедуры
Функция ЗаполнитьТипыУслуг()
ВсеТипыУслуг = Новый Массив;
ВсеТипыУслуг.Добавить("Авиабилеты");
ВсеТипыУслуг.Добавить("Гостиницы");
ВсеТипыУслуг.Добавить("Ж/д билеты");
ВсеТипыУслуг.Добавить("Трансферы");
ВсеТипыУслуг.Добавить("Доп. услуги");
ВсеТипыУслуг.Добавить("Виза");
ВсеТипыУслуг.Добавить("Дополнительный сервис");
Возврат МассивВФиксСтруктуру(ВсеТипыУслуг);
КонецФункции
Функция ЗаполнитьУслуги()
ВсеУслуги = Новый Массив;
ВсеУслуги.Добавить("Гостиницы за рубежом");
ВсеУслуги.Добавить("Гостиницы РФ");
ВсеУслуги.Добавить("Жд билет внутренний");
ВсеУслуги.Добавить("Жд билет международный");
ВсеУслуги.Добавить("Авиабилет международный");
ВсеУслуги.Добавить("Авиабилет внутренний");
ВсеУслуги.Добавить("Сервисные услуги перевозчика");
ВсеУслуги.Добавить("Банковский сбор при платеже зарубеж");
ВсеУслуги.Добавить("Сбор за конвертацию");
ВсеУслуги.Добавить("Сбор поставщика");
ВсеУслуги.Добавить("Паспорт гражданина Российской Федерации");
ВсеУслуги.Добавить("Трансферы РФ");
ВсеУслуги.Добавить("Возврат сервисных услуг перевозчика");
ВсеУслуги.Добавить("Трансферы за рубежом");
ВсеУслуги.Добавить("Сервисный сбор");
ВсеУслуги.Добавить("Виза выездная");
ВсеУслуги.Добавить("Услуга");
ВсеУслуги.Добавить("Сбор за ранний заезд");
ВсеУслуги.Добавить("Штраф за обмен");
ВсеУслуги.Добавить("Возврат жд билет внутренний");
ВсеУслуги.Добавить("Деловой проездной");
ВсеУслуги.Добавить("Медицинская страховка");
ВсеУслуги.Добавить("Штраф за возврат/обмен билета");
ВсеУслуги.Добавить("Транферы за рубежом");
ВсеУслуги.Добавить("Заполнение анкеты (другие страны)");
ВсеУслуги.Добавить("Возврат Авиабилет международный");
ВсеУслуги.Добавить("Штраф");
ВсеУслуги.Добавить("Сбор для корректировки");
ВсеУслуги.Добавить("Возврат Авиабилет внутренний");
Возврат МассивВФиксСтруктуру(ВсеУслуги);
КонецФункции
Функция МассивВФиксСтруктуру(Знач вхМассив)
СтруктураПервич = Новый Структура;
Для Каждого ЗначениеСтруктуры Из вхМассив Цикл
КлючСтруктуры = СтрокуВКлючСтруктуры(ЗначениеСтруктуры);
СтруктураПервич.Вставить(КлючСтруктуры, ЗначениеСтруктуры);
КонецЦикла;
ФиксСтруктура = Новый ФиксированнаяСтруктура(СтруктураПервич);
Возврат ФиксСтруктура;
КонецФункции
//Убирает все символы, которые не пройдут в качестве ключа структура
Функция СтрокуВКлючСтруктуры(Знач вхСтрока)
Ключ = вхСтрока;
Ключ = СтрЗаменить(Ключ, " ", "");
Ключ = СтрЗаменить(Ключ, "/", "");
Ключ = СтрЗаменить(Ключ, "\", "");
Ключ = СтрЗаменить(Ключ, ".", "");
Ключ = СтрЗаменить(Ключ, ",", "");
Ключ = СтрЗаменить(Ключ, ")", "");
Ключ = СтрЗаменить(Ключ, "(", "");
Возврат Ключ;
КонецФункции
Процедура ЗаполнитьСинонимыОрганизаций()
СинонимыОрганизаций = Новый Соответствие;
СинонимыОрганизаций.Вставить("ЗАО «БИОКАД»",
Справочники.Организации.ПолучитьСсылку(Новый УникальныйИдентификатор("e77c72ef-920f-11de-a428-005056c00008")));
СинонимыОрганизаций.Вставить("Общество с ограниченной ответственностью «Биокад-Фарм»",
Справочники.Организации.ПолучитьСсылку(Новый УникальныйИдентификатор("e77c72f3-920f-11de-a428-005056c00008")));
КонецПроцедуры
#Область ЗаполнениеРегистраСведений_ДанныеКЭ
Функция ПрочитатьШаблонСДанными()
Результат = Ложь;
// заполним таблицу настроек
ТаблицаНастроек.Очистить();
Для Каждого ТекЭл Из МаппингПолейЗаписиВебСервисаИРесурсовРегистра() Цикл
Если ЗначениеЗаполнено(ТекЭл.Значение) Тогда
НоваяСтрока = ТаблицаНастроек.Добавить();
НоваяСтрока.НомерКолонкиФайла =
ШаблонСДанными.НайтиТекст(ТекЭл.Ключ, ,
ШаблонСДанными.Область(1, 1, 1, ШаблонСДанными.ШиринаТаблицы), Истина).Лево;
НоваяСтрока.Имя = ТекЭл.Значение;
НоваяСтрока.Представление = ТекЭл.Ключ;
КонецЕсли;
КонецЦикла;
МЗ_ДляПроверки = РегистрыСведений.ДанныеКЭ.СоздатьМенеджерЗаписи();
Для Сч = 2 По ШаблонСДанными.ВысотаТаблицы Цикл
Если Не ЗначениеЗаполнено(ШаблонСДанными.Область(Сч, 1).Текст) Тогда
Продолжить;
КонецЕсли;
НоваяЗапись = РегистрыСведений.ДанныеКЭ.СоздатьМенеджерЗаписи();
Для Каждого ТекСтрокаНастройки Из ТаблицаНастроек Цикл
лЗнач = СокрЛП(ШаблонСДанными.Область(Сч, ТекСтрокаНастройки.НомерКолонкиФайла).Текст);
Если ЗначениеЗаполнено(лЗнач) Тогда
УстановитьЗначениеСвойстваЗаписи(НоваяЗапись, ТекСтрокаНастройки.Имя, лЗнач)
КонецЕсли;
КонецЦикла;
Если НоваяЗапись.НомерСтрокиФайла = 0 Тогда
Продолжить;
КонецЕсли;
//Если РежимЗагрузки = 4 Тогда
// НоваяЗапись.НомерСтрокиФайла = НоваяЗапись.НомерСтрокиФайла + 1000000;
// НоваяЗапись.РежимЗагрузки = 4;
//КонецЕсли;
// обновляем
//ЗаполнитьЗначенияСвойств(МЗ_ДляПроверки, НоваяЗапись);
//НоваяЗапись.Прочитать();
//ЗаполнитьЗначенияСвойств(НоваяЗапись, МЗ_ДляПроверки, "НаименованиеПоставщикаСФ,КПППоставщикаСФ");
//НоваяЗапись.Записать();
//Продолжить;
// проверка что такая запись есть
ЗаполнитьЗначенияСвойств(МЗ_ДляПроверки, НоваяЗапись);
МЗ_ДляПроверки.Прочитать();
Если МЗ_ДляПроверки.Выбран() Тогда
ОбщегоНазначенияКлиентСервер.СообщитьПользователю("" + МЗ_ДляПроверки.НомерСтрокиФайла + " от " + МЗ_ДляПроверки.ДатаСоздания);
Возврат Ложь
КонецЕсли;
НоваяЗапись.РежимЗагрузки = РассчитатьРежимЗагрузки(
ОрганизацияПоНаименованиюКонтинента("ЗАО «БИОКАД»"), НоваяЗапись.ТабельныйНомер, НоваяЗапись.ДатаСоздания, ,
НоваяЗапись.ТипУслуги, НоваяЗапись.Услуга, НоваяЗапись.НаименованиеУслуги);
НоваяЗапись.Пометка = Истина;
НоваяЗапись.Записать();
Результат = Истина;
КонецЦикла;
Возврат Результат
КонецФункции
Процедура УстановитьЗначениеСвойстваЗаписи(ЗаписьРС, ИмяСвойства, Значение)
Если ТипЗнч(ЗаписьРС[ИмяСвойства]) = Тип("Дата") Тогда
ДатаМассив = СтрРазделить(Значение, ".");
Если ДатаМассив.Количество() = 3 Тогда
Значение = Дата(ДатаМассив[2], ДатаМассив[1], ДатаМассив[0])
КонецЕсли;
ИначеЕсли ТипЗнч(ЗаписьРС[ИмяСвойства]) = Тип("Число") Тогда
Значение = СтрЗаменить(Значение, Символы.НПП, "");
Значение = СтрЗаменить(Значение, " ", "");
ИначеЕсли ТипЗнч(ЗаписьРС[ИмяСвойства]) = Тип("ПеречислениеСсылка.СтавкиНДС") Тогда
Значение = ОбменСКонтрагентамиПовтИсп.СтавкаНДСИзПредставления(Значение)
КонецЕсли;
ЗаписьРС[ИмяСвойства] = Значение
КонецПроцедуры
Функция МаппингПолейЗаписиВебСервисаИРесурсовРегистра()
Результат = Новый Структура;
Результат.Вставить("ТабельныйНомер" , "ТабельныйНомер");
//Результат.Вставить("ЗаказИнициатор" , "");
Результат.Вставить("ДокументНомер" , "НомерДокумента");
Результат.Вставить("ДокументДатаСоздания" , "ДатаСоздания");
//Результат.Вставить("Подразделение" , "");
//Результат.Вставить("АвторизованноеЛицо" , "");
//Результат.Вставить("НомерКомандировочногоУдостоверения" , "");
Результат.Вставить("УслугаТип" , "ТипУслуги");
Результат.Вставить("УслугаНазвание" , "Услуга");
Результат.Вставить("АвиакомпанияКод" , "КодАвиакомпании");
Результат.Вставить("НомерБилетаУслуги" , "НомерБилетаУслуги");
Результат.Вставить("ЗаменаБилета" , "ЗаменаБилета");
Результат.Вставить("УслугаОписание" , "НаименованиеУслуги");
Результат.Вставить("Пассажир" , "ФИОПассажира");
//Результат.Вставить("Маршрут" , "");
//Результат.Вставить("Направление" , "");
//Результат.Вставить("ВылетЗаездДата" , "");
Результат.Вставить("ПрилетВыездДата" , "ДатаПрилета");
Результат.Вставить("УслугаСтоимостьБезНдс" , "СтоимостьУслугиБезНДС");
Результат.Вставить("НдсСумма" , "СуммаНДС");
//Результат.Вставить("НдсПроцент" , "");
Результат.Вставить("СтавкаНДС" , "СтавкаНДС");
Результат.Вставить("УслугаСтоимостьВклНдс" , "СтоимостьУслугиСНДС");
//Результат.Вставить("ФормаОплаты" , "");
//Результат.Вставить("Плательщик" , "");
//Результат.Вставить("ПоставщикИмя" , "");
//Результат.Вставить("ПоставщикаСчетФактураНомер" , ""); // ?
//Результат.Вставить("ПроцентНдс" , "");
//Результат.Вставить("ПоставщикИмяПолное" , "");
Результат.Вставить("ПоставщикИНН" , "ИННПоставщика");
//Результат.Вставить("ПоставщикКПП" , "");
Результат.Вставить("СчетФактураНомер" , "НомерСчетаФактуры"); // ?
Результат.Вставить("СчетФактураДатаПроведения" , "ДатаСчетаФактуры");
Результат.Вставить("ПоставщикСФИмяПолноеРус" , "НаименованиеПоставщикаСФ");
Результат.Вставить("ПоставщикСФИНН" , "ИННПоставщикаСФ");
Результат.Вставить("ПоставщикСФКПП" , "КПППоставщикаСФ");
Результат.Вставить("СводнаяНакладнаяНомер" , "НомерСводногоДокумента");
Результат.Вставить("СводнаяДата" , "ДатаСводногоДокумента");
Результат.Вставить("НомерСтрокиФайла", "НомерСтрокиФайла"); // добавил порядковый номер для регистра
Возврат Результат
КонецФункции
#КонецОбласти
#КонецОбласти
#Область ВебСервисКЭ
Функция ПолучитьПараметрыВебСервиса()
ПараметрыВебСервиса = Новый Структура;
ПараметрыВебСервиса.Вставить("ПутьПубликацииСервера", "https://biocadservice.continent.ru:7000/ReportService.svc?singleWsdl");
ПараметрыВебСервиса.Вставить("Пользователь", "");
ПараметрыВебСервиса.Вставить("Пароль", "");
ПараметрыВебСервиса.Вставить("Таймаут", 120);
ПараметрыВебСервиса.Вставить("URIПространстваИменСервиса", "http://tempuri.org/");
ПараметрыВебСервиса.Вставить("ИмяСервиса", "ReportService");
ПараметрыВебСервиса.Вставить("ИмяТочкиПодключения", "BasicHttpsBinding_IReportService");
//{http://tempuri.org/}BasicHttpsBinding_IReportService
Возврат ПараметрыВебСервиса;
КонецФункции
Функция ДатаИзСтрокиХМЛ(Знач вхДата)
Если не ЗначениеЗаполнено(вхДата) Тогда
Возврат Неопределено;
КонецЕсли;
Возврат СериализаторXDTO.XMLЗначение(Тип("Дата"), вхДата);
КонецФункции
Функция ДатаВСтрокуХМЛ(Знач вхДата)
Возврат СериализаторXDTO.XMLСтрока(вхДата);
КонецФункции
Функция ПолучитьОбъектХДТОизВебСервиса(ДатаНачала, ДатаОкончания)
ПараметрыВебСервиса = ПолучитьПараметрыВебСервиса();
//Инициализация WS-объектов
ВСОпределение = Новый WSОпределения(ПараметрыВебСервиса.ПутьПубликацииСервера, ПараметрыВебСервиса.Пользователь, ПараметрыВебСервиса.Пароль,,ПараметрыВебСервиса.Таймаут);
ВСПрокси = Новый WSПрокси(ВСОпределение, ПараметрыВебСервиса.URIПространстваИменСервиса, ПараметрыВебСервиса.ИмяСервиса, ПараметрыВебСервиса.ИмяТочкиПодключения,,ПараметрыВебСервиса.Таймаут);
Если ЗначениеЗаполнено(ПараметрыВебСервиса.Пользователь) Тогда
ВСПрокси.Пользователь = ПараметрыВебСервиса.Пользователь;
КонецЕсли;
Если ЗначениеЗаполнено(ПараметрыВебСервиса.Пароль) Тогда
ВСПрокси.Пароль = ПараметрыВебСервиса.Пароль;
КонецЕсли;
//ДатаНачала = "2017-03-01T00:00:00.000+04:00";
//ДатаОкончания = "2017-03-01T00:00:00.000+04:00";
//Создание объекта ХДТО-списка и наполнение в цикле
ФабрикаКонт = ВСПрокси.ФабрикаXDTO;
ТипПараметры = ФабрикаКонт.Тип(ПараметрыВебСервиса.URIПространстваИменСервиса, "AccountingDataGet");
ПараметрыЗапроса = ФабрикаКонт.Создать(ТипПараметры);
ПараметрыЗапроса.dateFrom = ДатаВСтрокуХМЛ(ДатаНачала);
ПараметрыЗапроса.dateTo = ДатаВСтрокуХМЛ(ДатаОкончания);
Ответ = ВСПрокси.AccountingDataGet(ПараметрыЗапроса);
Возврат Ответ;
КонецФункции
Функция СтруктураЗаписиХДТО()
Запись = Новый Структура;
Запись.Вставить("ТабельныйНомер");
Запись.Вставить("ЗаказИнициатор");
Запись.Вставить("ДокументНомер");
Запись.Вставить("ДокументДатаСоздания");
Запись.Вставить("Подразделение");
Запись.Вставить("АвторизованноеЛицо");
Запись.Вставить("НомерКомандировочногоУдостоверения");
Запись.Вставить("УслугаТип");
Запись.Вставить("УслугаНазвание");
Запись.Вставить("АвиакомпанияКод");
Запись.Вставить("НомерБилетаУслуги");
Запись.Вставить("ЗаменаБилета");
Запись.Вставить("УслугаОписание");
Запись.Вставить("Пассажир");
Запись.Вставить("Маршрут");
Запись.Вставить("Направление");
Запись.Вставить("ВылетЗаездДата");
Запись.Вставить("ПрилетВыездДата");
Запись.Вставить("УслугаСтоимостьБезНдс");
Запись.Вставить("НдсСумма");
Запись.Вставить("НдсПроцент");
Запись.Вставить("СтавкаНДС");
Запись.Вставить("УслугаСтоимостьВклНдс");
Запись.Вставить("ФормаОплаты");
Запись.Вставить("Плательщик");
Запись.Вставить("ПоставщикИмя");
Запись.Вставить("ПоставщикаСчетФактураНомер");
Запись.Вставить("ПроцентНдс");
Запись.Вставить("ПоставщикИмяПолное");
Запись.Вставить("ПоставщикИНН");
Запись.Вставить("ПоставщикКПП");
Запись.Вставить("СчетФактураНомер");
Запись.Вставить("СчетФактураДатаПроведения");
Запись.Вставить("ПоставщикСФИмяПолноеРус");
Запись.Вставить("ПоставщикСФИНН");
Запись.Вставить("ПоставщикСФКПП");
Запись.Вставить("СводнаяНакладнаяНомер");
Запись.Вставить("СводнаяДата");
Возврат Запись;
КонецФункции
Функция ЗаполнитьШаблонСДаннымиИзВебСервиса(ДатаНачала, ДатаОкончания)
ОбъектХДТО = ПолучитьОбъектХДТОизВебСервиса(ДатаНачала, ДатаОкончания);
ВсеЗаписи = ОбъектХДТО.AccountingDataGetResult.Report.AccountData.Details_Collection.Details;
ШаблонСДанными.Очистить();
СчСтрок = 1;
НумерацияПоля_НомерСтрокиФайла = Новый Соответствие;
Для Каждого СтрокаЗаписиХДТО Из ВсеЗаписи Цикл
Запись = СтруктураЗаписиХДТО();
ЗаполнитьЗначенияСвойств(Запись, СтрокаЗаписиХДТО);
//Дату формата "2017-03-01T00:00:00.000+04:00" преобразовывать так:
// НужнаяДата = ДатаИзСтрокиХМЛ(Запись.РеквизитСДатой)
Запись.ДокументДатаСоздания = Формат(ДатаИзСтрокиХМЛ(Запись.ДокументДатаСоздания), "ДЛФ=D");
Запись.ПрилетВыездДата = Формат(ДатаИзСтрокиХМЛ(Запись.ПрилетВыездДата), "ДЛФ=D");
Запись.СчетФактураДатаПроведения = Формат(ДатаИзСтрокиХМЛ(Запись.СчетФактураДатаПроведения), "ДЛФ=D");
Запись.СводнаяДата = Формат(ДатаИзСтрокиХМЛ(Запись.СводнаяДата), "ДЛФ=D");
ДатаСоздания = Запись.ДокументДатаСоздания;
Если ЗначениеЗаполнено(НумерацияПоля_НомерСтрокиФайла[ДатаСоздания]) Тогда
НумерацияПоля_НомерСтрокиФайла[ДатаСоздания] =
НумерацияПоля_НомерСтрокиФайла[ДатаСоздания] + 1
Иначе
НумерацияПоля_НомерСтрокиФайла[ДатаСоздания] = 1
КонецЕсли;
СчСтрок = СчСтрок + 1;
СчКолонок = 1;
Для Каждого ТекЭл Из Запись Цикл
СчКолонок = СчКолонок + 1;
ШаблонСДанными.Область(СчСтрок, СчКолонок).Текст = ТекЭл.Значение
КонецЦикла;
ШаблонСДанными.Область(СчСтрок, 1).Текст = НумерацияПоля_НомерСтрокиФайла[ДатаСоздания];
КонецЦикла;
Если ШаблонСДанными.ВысотаТаблицы Тогда
СчКолонок = 1;
Для Каждого ТекЭл Из Запись Цикл
СчКолонок = СчКолонок + 1;
ШаблонСДанными.Область(1, СчКолонок).Текст = ТекЭл.Ключ
КонецЦикла;
ШаблонСДанными.Область(1, 1).Текст = "НомерСтрокиФайла";
Результат = Истина;
Иначе
Результат = Ложь;
КонецЕсли;
Возврат Результат
КонецФункции
#КонецОбласти
#Область СведенияОВнешнейОбработке
Функция СведенияОВнешнейОбработке() Экспорт
Версия = "1.5.0";
// Объявим переменную, в которой мы сохраним и вернем "наружу" необходимые данные
ПараметрыРегистрации = Новый Структура;
// Объявим еще одну переменную, которая нам потребуется ниже
МассивНазначений = Новый Массив;
// Первый параметр, который мы должны указать - это какой вид обработки системе должна зарегистрировать.
// Допустимые типы: ДополнительнаяОбработка, ДополнительныйОтчет, ЗаполнениеОбъекта, Отчет, ПечатнаяФорма, СозданиеСвязанныхОбъектов
ПараметрыРегистрации.Вставить("Вид", "ДополнительнаяОбработка");
ПараметрыРегистрации.Вставить("Назначение", Новый Массив);
// Теперь зададим имя, под которым ВПФ будет зарегистрирована в справочнике внешних обработок
ПараметрыРегистрации.Вставить("Наименование", "_ОбщийМодульКонтинент");
// Зададим право обработке на использование безопасного режима. Более подробно можно узнать в справке к платформе (метод УстановитьБезопасныйРежим)
ПараметрыРегистрации.Вставить("БезопасныйРежим", Ложь);
// Следующие два параметра играют больше информационную роль, т.е. это то, что будет видеть пользователь в информации к обработке
ПараметрыРегистрации.Вставить("Версия", Версия);
ПараметрыРегистрации.Вставить("Информация", "_ОбщийМодульКонтинент");
// Создадим таблицу команд (подробнее смотрим ниже)
ТаблицаКоманд = ПолучитьТаблицуКоманд();
ДобавитьКоманду(ТаблицаКоманд,
"Проверка тестовых методов (эмуляция ОМ)",
"Форма_ОбщийМодульКонтинент",
"ОткрытиеФормы"
);
ДобавитьКоманду(ТаблицаКоманд, "тестовый", "ТестовыйМетод();", "ВызовСерверногоМетода");
// Сохраним таблицу команд в параметры регистрации обработки
ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);
// Теперь вернем системе наши параметры
Возврат ПараметрыРегистрации;
КонецФункции
Функция ПолучитьТаблицуКоманд()
// Создадим пустую таблицу команд и колонки в ней
Команды = Новый ТаблицаЗначений;
// Как будет выглядеть описание печатной формы для пользователя
Команды.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка"));
// Имя нашего макета, что бы могли отличить вызванную команду в обработке печати
Команды.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка"));
// Тут задается, как должна вызваться команда обработки
// Возможные варианты:
// - ОткрытиеФормы - в этом случае в колонке идентификатор должно быть указано имя формы, которое должна будет открыть система
// - ВызовКлиентскогоМетода - вызвать клиентскую экспортную процедуру из модуля формы обработки
// - ВызовСерверногоМетода - вызвать серверную экспортную процедуру из модуля объекта обработки
Команды.Колонки.Добавить("Использование", Новый ОписаниеТипов("Строка"));
// Следующий параметр указывает, необходимо ли показывать оповещение при начале и завершению работы обработки. Не имеет смысла при открытии формы
Команды.Колонки.Добавить("ПоказыватьОповещение", Новый ОписаниеТипов("Булево"));
// Для печатной формы должен содержать строку ПечатьMXL
Команды.Колонки.Добавить("Модификатор", Новый ОписаниеТипов("Строка"));
Возврат Команды;
КонецФункции
Процедура ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование, ПоказыватьОповещение = Ложь, Модификатор = "")
// Добавляем команду в таблицу команд по переданному описанию.
// Параметры и их значения можно посмотреть в функции ПолучитьТаблицуКоманд
НоваяКоманда = ТаблицаКоманд.Добавить();
НоваяКоманда.Представление = Представление;
НоваяКоманда.Идентификатор = Идентификатор;
НоваяКоманда.Использование = Использование;
НоваяКоманда.ПоказыватьОповещение = ПоказыватьОповещение;
НоваяКоманда.Модификатор = Модификатор;
КонецПроцедуры
Процедура ВыполнитьКоманду(Индентификатор) Экспорт
Выполнить(Индентификатор);
КонецПроцедуры
#КонецОбласти //СведенияОВнешнейОбработке
Инит();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment