diff --git a/Конфигурация/BusinessProcesses/Задание.xml b/Конфигурация/BusinessProcesses/Задание.xml index d44060c5f..4e7b17995 100644 --- a/Конфигурация/BusinessProcesses/Задание.xml +++ b/Конфигурация/BusinessProcesses/Задание.xml @@ -1531,8 +1531,8 @@ Use -
ДействиеВыполнить
ДействиеПроверить
+
ДействиеВыполнить
ФормаБизнесПроцесса
ФормаСписка
diff --git a/Конфигурация/Catalogs/БанковскиеСчета/Forms/ФормаВыбора/Ext/Form.xml b/Конфигурация/Catalogs/БанковскиеСчета/Forms/ФормаВыбора/Ext/Form.xml index fe01569f6..c85df6024 100644 --- a/Конфигурация/Catalogs/БанковскиеСчета/Forms/ФормаВыбора/Ext/Form.xml +++ b/Конфигурация/Catalogs/БанковскиеСчета/Forms/ФормаВыбора/Ext/Form.xml @@ -304,34 +304,35 @@ true Список.Ссылка + Список.ЦифровойСчет Список.ЭтоСчетОрганизации true true ВЫБРАТЬ - СправочникБанковскиеСчета.Ссылка, - СправочникБанковскиеСчета.ВерсияДанных, - СправочникБанковскиеСчета.ПометкаУдаления, - СправочникБанковскиеСчета.Предопределенный, - СправочникБанковскиеСчета.Владелец, - СправочникБанковскиеСчета.Код, - СправочникБанковскиеСчета.Наименование, - СправочникБанковскиеСчета.ВалютаДенежныхСредств, - СправочникБанковскиеСчета.НомерСчета, - СправочникБанковскиеСчета.Банк, - СправочникБанковскиеСчета.БанкРасчетов, - СправочникБанковскиеСчета.СчетУчета, - СправочникБанковскиеСчета.ВидСчета, - СправочникБанковскиеСчета.ТекстКорреспондента, - СправочникБанковскиеСчета.ТекстНазначения, - СправочникБанковскиеСчета.ВариантВыводаМесяца, - СправочникБанковскиеСчета.СуммаБезКопеек, - СправочникБанковскиеСчета.НомерИДатаРазрешения, - СправочникБанковскиеСчета.ДатаОткрытия, - СправочникБанковскиеСчета.ДатаЗакрытия, - СправочникБанковскиеСчета.Недействителен, - СправочникБанковскиеСчета.ВариантУказанияКПП, + СправочникБанковскиеСчета.Ссылка КАК Ссылка, + СправочникБанковскиеСчета.ВерсияДанных КАК ВерсияДанных, + СправочникБанковскиеСчета.ПометкаУдаления КАК ПометкаУдаления, + СправочникБанковскиеСчета.Предопределенный КАК Предопределенный, + СправочникБанковскиеСчета.Владелец КАК Владелец, + СправочникБанковскиеСчета.Код КАК Код, + СправочникБанковскиеСчета.Наименование КАК Наименование, + СправочникБанковскиеСчета.ВалютаДенежныхСредств КАК ВалютаДенежныхСредств, + СправочникБанковскиеСчета.НомерСчета КАК НомерСчета, + СправочникБанковскиеСчета.Банк КАК Банк, + СправочникБанковскиеСчета.БанкРасчетов КАК БанкРасчетов, + СправочникБанковскиеСчета.СчетУчета КАК СчетУчета, + СправочникБанковскиеСчета.ВидСчета КАК ВидСчета, + СправочникБанковскиеСчета.ТекстКорреспондента КАК ТекстКорреспондента, + СправочникБанковскиеСчета.ТекстНазначения КАК ТекстНазначения, + СправочникБанковскиеСчета.ВариантВыводаМесяца КАК ВариантВыводаМесяца, + СправочникБанковскиеСчета.СуммаБезКопеек КАК СуммаБезКопеек, + СправочникБанковскиеСчета.НомерИДатаРазрешения КАК НомерИДатаРазрешения, + СправочникБанковскиеСчета.ДатаОткрытия КАК ДатаОткрытия, + СправочникБанковскиеСчета.ДатаЗакрытия КАК ДатаЗакрытия, + СправочникБанковскиеСчета.Недействителен КАК Недействителен, + СправочникБанковскиеСчета.ВариантУказанияКПП КАК ВариантУказанияКПП, ВЫБОР КОГДА ТИПЗНАЧЕНИЯ(СправочникБанковскиеСчета.Владелец) = ТИП(Справочник.Организации) ТОГДА ИСТИНА @@ -341,16 +342,17 @@ КОГДА НастройкиОбменСБанками.Недействительна = ЛОЖЬ ТОГДА "Действует" КОНЕЦ КАК ПрямойОбмен, - ДенежныеСредстваОстатки.СуммаВалОстаток КАК Остаток + ДенежныеСредстваОстатки.СуммаВалОстаток КАК Остаток, + СправочникБанковскиеСчета.ЦифровойСчет КАК ЦифровойСчет ИЗ Справочник.БанковскиеСчета КАК СправочникБанковскиеСчета ЛЕВОЕ СОЕДИНЕНИЕ Справочник.НастройкиОбменСБанками КАК НастройкиОбменСБанками ПО СправочникБанковскиеСчета.Банк = НастройкиОбменСБанками.Банк - И СправочникБанковскиеСчета.Владелец = НастройкиОбменСБанками.Организация - И НЕ НастройкиОбменСБанками.ПометкаУдаления - И НЕ НастройкиОбменСБанками.Недействительна + И СправочникБанковскиеСчета.Владелец = НастройкиОбменСБанками.Организация + И (НЕ НастройкиОбменСБанками.ПометкаУдаления) + И (НЕ НастройкиОбменСБанками.Недействительна) {ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ДенежныеСредства.Остатки КАК ДенежныеСредстваОстатки - ПО ДенежныеСредстваОстатки.БанковскийСчетКасса = СправочникБанковскиеСчета.Ссылка} + ПО (ДенежныеСредстваОстатки.БанковскийСчетКасса = СправочникБанковскиеСчета.Ссылка)} Ссылка Ссылка @@ -493,6 +495,22 @@ ИмяПредопределенныхДанных ИмяПредопределенныхДанных + + ВыпискаЗагружаетсяПоДепозитномуСчету + ВыпискаЗагружаетсяПоДепозитномуСчету + + + ОбезличенныйДепозитныйСчет + ОбезличенныйДепозитныйСчет + + + ЦифровойСчет + ЦифровойСчет + + + ИдентификаторЦифровогоСчета + ИдентификаторЦифровогоСчета + Период diff --git a/Конфигурация/Catalogs/ВерсииФайлов/Forms/ВерсииФайла/Ext/Form.xml b/Конфигурация/Catalogs/ВерсииФайлов/Forms/ВерсииФайла/Ext/Form.xml index 11b4acddd..e9fe8f2f7 100644 --- a/Конфигурация/Catalogs/ВерсииФайлов/Forms/ВерсииФайла/Ext/Form.xml +++ b/Конфигурация/Catalogs/ВерсииФайлов/Forms/ВерсииФайла/Ext/Form.xml @@ -143,17 +143,6 @@ Form.Item.Список.StandardCommand.SetDeletionMark - @@ -234,18 +223,6 @@ Form.Item.Список.StandardCommand.SetDeletionMark - - @@ -121,9 +110,6 @@ - - СписокПриАктивизацииСтроки - @@ -284,27 +270,5 @@ </ToolTip> <Action>ПоказыватьПомеченныеФайлы</Action> </Command> - <Command name="Удалить" id="2"> - <Title> - <v8:item> - <v8:lang>ru</v8:lang> - <v8:content>Удалить</v8:content> - </v8:item> - - - - ru - Удалить данные версии файла - - - - StdPicture.DeleteDirectly - true - - Удалить - Use - Список - DontUse - \ No newline at end of file diff --git a/Конфигурация/Catalogs/ВерсииФайлов/Forms/ФормаВыбора/Ext/Form/Module.bsl b/Конфигурация/Catalogs/ВерсииФайлов/Forms/ФормаВыбора/Ext/Form/Module.bsl index 1149ec298..489917b65 100644 --- a/Конфигурация/Catalogs/ВерсииФайлов/Forms/ФормаВыбора/Ext/Form/Module.bsl +++ b/Конфигурация/Catalogs/ВерсииФайлов/Forms/ФормаВыбора/Ext/Form/Module.bsl @@ -43,37 +43,8 @@ #КонецОбласти -#Область ОбработчикиСобытийЭлементовШапкиФормы - -&НаКлиенте -Процедура СписокПриАктивизацииСтроки(Элемент) - - Если Элементы.Список.ТекущаяСтрока <> Неопределено - И ТипЗнч(Элементы.Список.ТекущиеДанные) = Тип("ДанныеФормыСтруктура") - И Элементы.Список.ТекущиеДанные.Свойство("Автор") Тогда - Элементы.СписокУдалить.Доступность = - Элементы.Список.ТекущиеДанные.Автор = ПользователиКлиент.АвторизованныйПользователь(); - КонецЕсли; - -КонецПроцедуры - -#КонецОбласти - #Область ОбработчикиКомандФормы -&НаКлиенте -Процедура Удалить(Команда) - - Если Элементы.Список.ТекущаяСтрока = Неопределено Тогда - Возврат; - КонецЕсли; - - РаботаСФайламиСлужебныйКлиент.УдалитьДанные( - Новый ОписаниеОповещения("ПослеУдаленияДанных", ЭтотОбъект), - Элементы.Список.ТекущиеДанные.Ссылка, УникальныйИдентификатор); - -КонецПроцедуры - &НаКлиенте Процедура ПоказыватьПомеченныеФайлы(Команда) @@ -81,15 +52,4 @@ КонецПроцедуры -#КонецОбласти - -#Область СлужебныеПроцедурыИФункции - -&НаКлиенте -Процедура ПослеУдаленияДанных(Результат, ДополнительныеПараметры) Экспорт - - Элементы.Список.Обновить(); - -КонецПроцедуры - -#КонецОбласти +#КонецОбласти \ No newline at end of file diff --git a/Конфигурация/Catalogs/ВерсииФайлов/Forms/ФормаСписка/Ext/Form.xml b/Конфигурация/Catalogs/ВерсииФайлов/Forms/ФормаСписка/Ext/Form.xml index f91b7d921..8f8a3fcd9 100644 --- a/Конфигурация/Catalogs/ВерсииФайлов/Forms/ФормаСписка/Ext/Form.xml +++ b/Конфигурация/Catalogs/ВерсииФайлов/Forms/ФормаСписка/Ext/Form.xml @@ -89,17 +89,6 @@ Form.Item.Список.StandardCommand.SetDeletionMark - @@ -130,18 +119,6 @@ Form.Item.Список.StandardCommand.SetDeletionMark - + + + + ПриСозданииНаСервере + + + + false + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Перед добавлением дополнительного банка необходимо зарегистрировать его в личном кабинете %1. +После выбора банка для проверки связи будет выполнен тестовый запрос банковской выписки.</v8:content> + </v8:item> + + + + + + List + true + false + true + SingleRow + Cell +
false
+ false + true + Use + true + true + Банки + + Change + Choose + MoveDown + MoveUp + + Top + + + + false + + + + + Банки + SearchStringRepresentation + + + + + + + Банки + ViewStatusRepresentation + + + + + + + Банки + SearchControl + + + + + + БанкиВыбор + + + + Банки.Банк + None + EnterOnInput + false + true + true + + + + +
+
+ + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Банки</v8:content> + </v8:item> + + + v8:ValueTable + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Банк</v8:content> + </v8:item> + + + cfg:DefinedType.БанкОбменСБанками + + + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Выбрать</v8:content> + </v8:item> + + + + ru + Выбрать банк + + + ВыбратьБанк + Finish + + + + + + v8:ValueListType + + + + \ No newline at end of file diff --git a/Конфигурация/Catalogs/НастройкиОбменСБанками/Forms/ФормаВыбораДополнительногоБанка/Ext/Form/Module.bsl b/Конфигурация/Catalogs/НастройкиОбменСБанками/Forms/ФормаВыбораДополнительногоБанка/Ext/Form/Module.bsl new file mode 100644 index 000000000..e0699b238 --- /dev/null +++ b/Конфигурация/Catalogs/НастройкиОбменСБанками/Forms/ФормаВыбораДополнительногоБанка/Ext/Form/Module.bsl @@ -0,0 +1,57 @@ +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.Свойство("Интегратор") Тогда + ЗаголовокДекорации = Элементы.ДекорацияПоясненияУсловияПодключения.Заголовок; + НаименованиеБанка = ОбменСБанкамиСлужебный.НаименованиеБанка(Параметры.Интегратор); + Элементы.ДекорацияПоясненияУсловияПодключения.Заголовок = СтрШаблон(ЗаголовокДекорации, НаименованиеБанка); + Иначе + Элементы.ДекорацияПоясненияУсловияПодключения.Видимость = Ложь; + КонецЕсли; + + Для Каждого ИнтегрируемыйБанк Из Параметры.ИнтегрируемыеБанки Цикл + НоваяСтрока = Банки.Добавить(); + НоваяСтрока.Банк = ИнтегрируемыйБанк.Значение; + КонецЦикла; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыБанки + +&НаКлиенте +Процедура БанкиВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) + + ОбработатьВыборБанка(); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура ВыбратьБанк(Команда) + + ОбработатьВыборБанка(); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаКлиенте +Процедура ОбработатьВыборБанка() + + ТекущиеДанные = Элементы.Банки.ТекущиеДанные; + Если ТекущиеДанные <> Неопределено Тогда + Закрыть(ТекущиеДанные.Банк); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/Конфигурация/Catalogs/НастройкиОбменСБанками/Forms/ФормаЭлемента/Ext/Form.xml b/Конфигурация/Catalogs/НастройкиОбменСБанками/Forms/ФормаЭлемента/Ext/Form.xml index f71c4cb31..cbd1f2108 100644 --- a/Конфигурация/Catalogs/НастройкиОбменСБанками/Forms/ФормаЭлемента/Ext/Form.xml +++ b/Конфигурация/Catalogs/НастройкиОбменСБанками/Forms/ФормаЭлемента/Ext/Form.xml @@ -187,6 +187,9 @@ Right + + ДействуетПриИзменении + @@ -1488,6 +1491,100 @@ + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Дополнительные банки</v8:content> + </v8:item> + + Vertical + false + + + + false + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Список банков, по которым доступна загрузка банковских выписок через текущую настройку</v8:content> + </v8:item> + + + + + + true + SingleRow + Cell + false + true + DontShow + true + true + Объект.ДополнительныеБанки + + + + false + + + + + + + + + ДополнительныеБанки + SearchStringRepresentation + + + + + + + ДополнительныеБанки + ViewStatusRepresentation + + + + + + + ДополнительныеБанки + SearchControl + + + + + + + Объект.ДополнительныеБанки.LineNumber + EnterOnInput + true + + + + + Объект.ДополнительныеБанки.Банк + EnterOnInput + true + true + + + + +
+
+
@@ -1778,6 +1875,29 @@ xs:boolean + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Доступно получение выписок из других банков</v8:content> + </v8:item> + + + xs:boolean + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Банки для загрузки выписки</v8:content> + </v8:item> + + + v8:ValueListType + + + @@ -1889,5 +2009,29 @@ УдалитьСохраненныйПароль + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Добавить</v8:content> + </v8:item> + + ДобавитьБанк + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Удалить</v8:content> + </v8:item> + + + + ru + Удалить банк + + + УдалитьБанк + \ No newline at end of file diff --git a/Конфигурация/Catalogs/НастройкиОбменСБанками/Forms/ФормаЭлемента/Ext/Form/Module.bsl b/Конфигурация/Catalogs/НастройкиОбменСБанками/Forms/ФормаЭлемента/Ext/Form/Module.bsl index 6c6d7fac4..012202bab 100644 --- a/Конфигурация/Catalogs/НастройкиОбменСБанками/Forms/ФормаЭлемента/Ext/Form/Module.bsl +++ b/Конфигурация/Catalogs/НастройкиОбменСБанками/Forms/ФормаЭлемента/Ext/Form/Module.bsl @@ -80,6 +80,19 @@ ЕстьПодтверждаемыйДокумент = ЕстьПодтверждаемыйДокумент(Объект); + ДоступноПолучениеВыписокИзДругихБанков = Ложь; + Если ЗначениеЗаполнено(ТекущийОбъект.Банк) Тогда + НастройкиИнтегратора = ОбменСБанкамиСлужебный.НастройкиИнтеграторов(ТекущийОбъект.Банк, ТекущийОбъект.Организация); + Если НастройкиИнтегратора.ДоступноПолучениеВыписокИзДругихБанков Тогда + ДоступноПолучениеВыписокИзДругихБанков = Истина; + + БанкиДляЗагрузкиВыписки.Очистить(); + Для Каждого БанкВыписки Из НастройкиИнтегратора.Банки Цикл + БанкиДляЗагрузкиВыписки.Добавить(БанкВыписки.Ссылка, БанкВыписки.Наименование); + КонецЦикла; + КонецЕсли; + КонецЕсли; + НастроитьЭлементы(ЭтотОбъект, Объект.ПрограммаБанка, Объект.ИспользуетсяКриптография, Объект.АутентификацияПоСертификату, Объект.ДоступноАвтоматическоеПолучениеВыписки, Объект.Ссылка); @@ -326,6 +339,20 @@ КонецПроцедуры +&НаКлиенте +Асинх Процедура ДействуетПриИзменении(Элемент) + + Если Объект.Недействительна Тогда + Возврат; + КонецЕсли; + + РезультатУточнения = Ждать УточнениеДобавленияБанка(Объект.Банк, Истина); + Если РезультатУточнения Тогда + Объект.Недействительна = Истина; + КонецЕсли; + +КонецПроцедуры + #КонецОбласти #Область ОбработчикиСобытийЭлементовТаблицыФормыИсходящиеДокументы @@ -498,6 +525,33 @@ КонецПроцедуры +&НаКлиенте +Процедура ДобавитьБанк(Команда) + + ОповещениеОЗакрытии = Новый ОписаниеОповещения("ДобавитьБанкПослеВыбора", ЭтотОбъект); + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("ИнтегрируемыеБанки", БанкиДляЗагрузкиВыписки); + ПараметрыФормы.Вставить("Интегратор", Объект.Банк); + ОткрытьФорму("Справочник.НастройкиОбменСБанками.Форма.ФормаВыбораДополнительногоБанка", ПараметрыФормы, + , , , , ОповещениеОЗакрытии, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); + +КонецПроцедуры + +&НаКлиенте +Процедура УдалитьБанк(Команда) + + ТекущиеДанные = Элементы.ДополнительныеБанки.ТекущиеДанные; + Если ТекущиеДанные = Неопределено Тогда + Возврат; + КонецЕсли; + + НаименованиеБанка = НаименованиеБанка(ТекущиеДанные.Банк); + ТекстВопроса = СтрШаблон(НСтр("ru = 'Удалить %1 из списка дополнительных банков?'"), НаименованиеБанка); + ОписаниеОповещения = Новый ОписаниеОповещения("ОтветНаВопросОбУдаленииБанка", ЭтотОбъект); + ПоказатьВопрос(ОписаниеОповещения, ТекстВопроса, РежимДиалогаВопрос.ДаНет, , КодВозвратаДиалога.Да); + +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -1099,6 +1153,7 @@ Форма.Элементы.СтраницыРазделов.Видимость = Истина; Форма.Элементы.ГруппаАвтоматическоеПолучениеВыписки.Видимость = Ложь; Форма.Элементы.СертификатПодключенияДатаОкончания.Видимость = Ложь; + Форма.Элементы.СтраницаДополнительныеБанки.Видимость = Ложь; ЭтоСбербанк = ПрограммаБанка = ПредопределенноеЗначение("Перечисление.ПрограммыБанка.СбербанкОнлайн"); ЭтоОбменЧерезДопОбработку = ПрограммаБанка = ПредопределенноеЗначение( @@ -1221,6 +1276,8 @@ Ссылка) Форма.Элементы.СтраницыВидыБанковскихСистем.ТекущаяСтраница = Форма.Элементы.СтраницаАсинхронный; + Форма.Элементы.СтраницаДополнительныеБанки.Видимость = Форма.ДоступноПолучениеВыписокИзДругихБанков; + Если ИспользуетсяКриптография Тогда Если АутентификацияПоСертификату Тогда Форма.Элементы.ЛогинАсинхронныйОбмен.Видимость = Ложь; @@ -1299,8 +1356,6 @@ Возврат; КонецЕсли; - ИзменитьОбъектФормы(НастройкаОбмена); - Прочитать(); НастроитьЭлементы(ЭтотОбъект, Объект.ПрограммаБанка, Объект.ИспользуетсяКриптография, @@ -1314,14 +1369,6 @@ КонецПроцедуры -&НаСервере -Процедура ИзменитьОбъектФормы(НастройкаОбмена) - - НастройкаОбменаОбъект = НастройкаОбмена.ПолучитьОбъект(); - ЗначениеВРеквизитФормы(НастройкаОбменаОбъект, "Объект"); - -КонецПроцедуры - &НаСервере Процедура УстановитьУсловноеОформление() @@ -1557,6 +1604,35 @@ КонецПроцедуры +&НаСервереБезКонтекста +Функция НаименованиеБанка(Банк) + Возврат ОбменСБанкамиСлужебный.НаименованиеБанка(Банк); +КонецФункции + +&НаСервереБезКонтекста +Функция НаименованияБанков(Банки) + + Результат = Новый Соответствие; + Для Каждого Банк Из Банки Цикл + Результат.Вставить(Банк, ""); + КонецЦикла; + + ИмяРеквизитаНаименование = ОбменСБанкамиСлужебный.ИмяПрикладногоРеквизита("Банк.Наименование"); + НаименованияПоСсылкам = ОбщегоНазначения.ЗначенияРеквизитовОбъектов(Банки, ИмяРеквизитаНаименование); + + Для Каждого НаименованиеПоБанку Из НаименованияПоСсылкам Цикл + Результат[НаименованиеПоБанку.Ключ] = НаименованиеПоБанку.Значение.Наименование; + КонецЦикла; + + Возврат Результат; + +КонецФункции + +&НаСервереБезКонтекста +Функция БанкНастройки(НастройкаОбмена) + Возврат ОбщегоНазначения.ЗначениеРеквизитаОбъекта(НастройкаОбмена, "Банк"); +КонецФункции + #КонецОбласти #Область АсинхронныйОбмен @@ -1671,6 +1747,158 @@ #КонецОбласти +#Область ДополнительныеБанки + +&НаКлиенте +Асинх Процедура ДобавитьБанкПослеВыбора(ВыбранныйБанк, ДополнительныеПараметры) Экспорт + + Если ВыбранныйБанк = Неопределено Тогда + Возврат; + КонецЕсли; + + ПараметрыОтбора = Новый Структура; + ПараметрыОтбора.Вставить("Банк", ВыбранныйБанк); + НайденныеСтроки = Объект.ДополнительныеБанки.НайтиСтроки(ПараметрыОтбора); + Если НайденныеСтроки.Количество() > 0 Тогда + Ответ = Ждать ВопросАсинх(НСтр("ru = 'Выбранный банк уже добавлен в список, хотите проверить связь с ним?'"), + РежимДиалогаВопрос.ДаНет); + Если Ответ <> КодВозвратаДиалога.Да Тогда + Возврат; + КонецЕсли; + КонецЕсли; + + РезультатУточнения = Ждать УточнениеДобавленияБанка(ВыбранныйБанк); + Если РезультатУточнения Тогда + Возврат; + КонецЕсли; + + ПараметрыЗавершения = Новый Структура; + ПараметрыЗавершения.Вставить("Банк", ВыбранныйБанк); + Оповещение = Новый ОписаниеОповещения("ЗапроситьЭлектроннуюВыпискуБанкаЗавершение", ЭтотОбъект, ПараметрыЗавершения); + + ПараметрыВыписки = ОбменСБанкамиКлиентСервер.ПараметрыПолученияВыпискиБанка(); + ПараметрыВыписки.НастройкаОбмена = Объект.Ссылка; + ПараметрыВыписки.Организация = Объект.Организация; + ПараметрыВыписки.БанкВладелец = ВыбранныйБанк; + + ДатаСеанса = ОбщегоНазначенияКлиент.ДатаСеанса(); + ПараметрыВыписки.ДатаНачала = НачалоДня(ДатаСеанса); + ПараметрыВыписки.ДатаОкончания = КонецДня(ДатаСеанса); + + ОбменСБанкамиКлиент.ПолучитьВыпискуПоПараметрам(Оповещение, ПараметрыВыписки); + +КонецПроцедуры + +&НаКлиенте +Процедура ЗапроситьЭлектроннуюВыпискуБанкаЗавершение(Результат, ДополнительныеПараметры) Экспорт + + Если Не ЗначениеЗаполнено(Результат)Тогда + Возврат; + КонецЕсли; + + Если Не Результат.Успех Тогда + Возврат; + КонецЕсли; + + ДобавитьДополнительныйБанкНаСервере(ДополнительныеПараметры.Банк); + +КонецПроцедуры + +&НаСервере +Процедура ДобавитьДополнительныйБанкНаСервере(ДополнительныйБанк) + + ПараметрыОтбора = Новый Структура; + ПараметрыОтбора.Вставить("Банк", ДополнительныйБанк); + НайденныеСтроки = Объект.ДополнительныеБанки.НайтиСтроки(ПараметрыОтбора); + + Если НайденныеСтроки.Количество() = 0 Тогда + НоваяСтрока = Объект.ДополнительныеБанки.Добавить(); + НоваяСтрока.Банк = ДополнительныйБанк; + Модифицированность = Истина; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ОтветНаВопросОбУдаленииБанка(РезультатВопроса, ДополнительныеПараметры) Экспорт + + Если РезультатВопроса = КодВозвратаДиалога.Да Тогда + ТекущаяСтрока = Элементы.ДополнительныеБанки.ТекущиеДанные; + Если ТекущаяСтрока <> Неопределено Тогда + Объект.ДополнительныеБанки.Удалить(ТекущаяСтрока); + Модифицированность = Истина; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Асинх Функция УточнениеДобавленияБанка(БанкПроверки, ЭтоПолныйОбмен = Ложь) + + Результат = Ложь; + + ПараметрыОтбора = ОбменСБанкамиКлиентСервер.НовыеПараметрыОтбораНастройкиОбмена(); + ПараметрыОтбора.Организация = Объект.Организация; + ПараметрыОтбора.Банк = БанкПроверки; + ПараметрыОтбора.ТолькоДействительнаяДляДополнительныхБанков = Ложь; + ПараметрыОтбора.ОтборПоДополнительнымБанкам = Истина; + Если ЗначениеЗаполнено(Объект.Ссылка) Тогда + ПараметрыОтбора.ИсключаяНастройки.Добавить(Объект.Ссылка); + КонецЕсли; + + НастройкаВыбранногоБанка = ОбменСБанкамиСлужебныйВызовСервера.НастройкаОбменаПоОтбору(ПараметрыОтбора); + Если ЗначениеЗаполнено(НастройкаВыбранногоБанка) Тогда + БанкНастройки = БанкНастройки(НастройкаВыбранногоБанка); + БанкиДляНаименований = Новый Массив; + БанкиДляНаименований.Добавить(БанкПроверки); + Если ЭтоПолныйОбмен Тогда + ШаблонВопроса = НСтр("ru = 'Загрузка выписки из %1 в настоящее время осуществляется через %2. + | + |После включения настройки с %1, будут доступны все возможности обмена. + |%1 будет исключен из настройки с %2. + |Продолжить?'"); + + БанкиДляНаименований.Добавить(БанкНастройки); + НаименованияБанков = НаименованияБанков(БанкиДляНаименований); + + ТекстВопроса = СтрШаблон(ШаблонВопроса, НаименованияБанков[БанкПроверки], НаименованияБанков[БанкНастройки]); + ИначеЕсли БанкНастройки = БанкПроверки Тогда + ШаблонВопроса = НСтр("ru = 'Для %1 с %2 существует действующая настройка со всеми доступными возможностями. + | + |После добавления %2 в настройку с %3, для него будет доступна только загрузка банковской выписки без отправки документов. + |Продолжить?'"); + + БанкиДляНаименований.Добавить(Объект.Банк); + НаименованияБанков = НаименованияБанков(БанкиДляНаименований); + + ТекстВопроса = СтрШаблон(ШаблонВопроса, Объект.Организация, НаименованияБанков[БанкПроверки], + НаименованияБанков[Объект.Банк]); + Иначе + ШаблонВопроса = НСтр("ru = 'Загрузка выписки из %1 в настоящее время осуществляется через %2. + | + |После добавления %1 в настройку с %3, он будет исключен из настройки с %2. + |Продолжить?'"); + + БанкиДляНаименований.Добавить(БанкНастройки); + БанкиДляНаименований.Добавить(Объект.Банк); + НаименованияБанков = НаименованияБанков(БанкиДляНаименований); + + ТекстВопроса = СтрШаблон(ШаблонВопроса, НаименованияБанков[БанкПроверки], НаименованияБанков[БанкНастройки], + НаименованияБанков[Объект.Банк]); + КонецЕсли; + + Ответ = Ждать ВопросАсинх(ТекстВопроса, РежимДиалогаВопрос.ДаНет); + Если Ответ <> КодВозвратаДиалога.Да Тогда + Результат = Истина; + КонецЕсли; + КонецЕсли; + + Возврат Результат; + +КонецФункции + +#КонецОбласти + &НаКлиенте Процедура УдалитьСохраненныйПароль(Команда) diff --git a/Конфигурация/Catalogs/НастройкиОбменСБанками/Templates/СписокБанков/Ext/Template.xml b/Конфигурация/Catalogs/НастройкиОбменСБанками/Templates/СписокБанков/Ext/Template.xml index 5f5382c57..64c7fd8ba 100644 --- a/Конфигурация/Catalogs/НастройкиОбменСБанками/Templates/СписокБанков/Ext/Template.xml +++ b/Конфигурация/Catalogs/НастройкиОбменСБанками/Templates/СписокБанков/Ext/Template.xml @@ -10,7 +10,7 @@ - 14 + 16 0 @@ -125,12 +125,12 @@ 1 -21 0 - 51 + 429 1 21 3 - 1356 - true + 1683 + false Stretch @@ -170,7 +170,7 @@ - 11 + 16 ru @@ -184,28 +184,31 @@ ru - 1 - руб. п/п и выписка + Если банк добавляется в макет только для информации о возможности обмена, то важно заполнить колонки «Банк,БИК,Проект», остальные можно оставить пустыми. +0 - обмен только через банк-интегратор +1 - руб. п/п и выписка 2 - з/ проекты 3 - валютные платежи и выписка -4 - поддержка автовыписки +4 - поддержка автовыписки +5 - депозиты 1 - -21 + 36 0 - 177 + 600 1 21 7 - 534 - true + 1359 + false Stretch - 16 + 17 ru @@ -216,7 +219,7 @@ - 16 + 17 ru @@ -227,7 +230,7 @@ - 17 + 18 ru @@ -263,7 +266,7 @@ - 18 + 19 ru @@ -273,7 +276,7 @@ Comment 0 - 19 + 20 ru @@ -299,7 +302,7 @@ - 18 + 19 ru @@ -309,7 +312,7 @@ Comment 0 - 19 + 20 ru @@ -334,7 +337,7 @@ - 20 + 16 ru @@ -344,7 +347,7 @@ Comment 0 - 19 + 20 ru @@ -354,12 +357,78 @@ 1 -21 0 - 51 + 186 1 -684 13 - 2586 - true + 720 + false + Stretch + + + + + + 21 + + + ru + Интегратор + + + + Comment + 0 + 20 + + + ru + Интегратор - это банк, который позволяет загружать выписки других банков. +Номер интегратора задается произвольно, но должен быть уникальным. + + + 1 + -21 + 0 + 207 + 1 + -177 + 14 + 945 + false + Stretch + + + + + + 22 + + + ru + ДоступныеИнтеграторы + + + + Comment + 0 + 20 + + + ru + Номера банков-интеграторов перечисляются через запятую. Это банки, через которые загружается банковская выписка для текущего БИК. +Номер банка-интегратора указан в колонке "Интегратор" + + + 1 + -21 + 0 + 300 + 1 + 21 + 15 + 741 + false Stretch @@ -405,7 +474,7 @@ - 21 + 23 ru @@ -449,7 +518,7 @@ - 22 + 24 ru @@ -474,6 +543,18 @@ 10 + + 15 + + 25 + + + ru + 1 + + + + @@ -515,7 +596,7 @@ - 21 + 23 ru @@ -526,7 +607,7 @@ - 23 + 26 ru @@ -584,6 +665,18 @@ 10 + + 15 + + 25 + + + ru + 1 + + + + @@ -625,7 +718,7 @@ - 21 + 23 ru @@ -636,7 +729,7 @@ - 23 + 26 ru @@ -694,6 +787,18 @@ 10 + + 15 + + 25 + + + ru + 1 + + + + @@ -735,7 +840,7 @@ - 21 + 23 ru @@ -746,7 +851,7 @@ - 23 + 26 ru @@ -804,6 +909,18 @@ 10 + + 15 + + 25 + + + ru + 1 + + + + @@ -845,7 +962,7 @@ - 21 + 23 ru @@ -856,7 +973,7 @@ - 23 + 26 ru @@ -914,6 +1031,18 @@ 10 + + 15 + + 25 + + + ru + 1 + + + + @@ -955,7 +1084,7 @@ - 21 + 23 ru @@ -966,7 +1095,7 @@ - 23 + 26 ru @@ -1024,6 +1153,18 @@ 10 + + 15 + + 25 + + + ru + 1 + + + + @@ -1065,7 +1206,7 @@ - 21 + 23 ru @@ -1076,7 +1217,7 @@ - 23 + 26 ru @@ -1134,6 +1275,18 @@ 10 + + 15 + + 25 + + + ru + 1 + + + + @@ -1175,7 +1328,7 @@ - 21 + 23 ru @@ -1186,7 +1339,7 @@ - 23 + 26 ru @@ -1244,6 +1397,18 @@ 10 + + 15 + + 25 + + + ru + 1 + + + + @@ -1256,7 +1421,7 @@ ru - СТ-ПЕТЕРБУРГСКИЙ Ф-Л ПАО "ПРОМСВЯЗЬБАНК" + Ст-Петербургский ф-л ПАО "Банк ПСБ" @@ -1289,14 +1454,14 @@ ru - ПоСертификату + ПоЛогинуИлиСертификату - 24 + 27 ru @@ -1366,7 +1531,7 @@ ru - ПРИВОЛЖСКИЙ Ф-Л ПАО "ПРОМСВЯЗЬБАНК" + Приволжский ф-л ПАО "Банк ПСБ" @@ -1399,14 +1564,14 @@ ru - ПоСертификату + ПоЛогинуИлиСертификату - 24 + 27 ru @@ -1476,7 +1641,7 @@ ru - СИБИРСКИЙ Ф-Л ПАО "ПРОМСВЯЗЬБАНК" + Сибирский ф-л ПАО "Банк ПСБ" @@ -1505,18 +1670,18 @@ - 21 + 4 ru - ПоСертификату + ПоЛогинуИлиСертификату - 24 + 27 ru @@ -1586,7 +1751,7 @@ ru - ЯРОСЛАВСКИЙ Ф-Л ПАО "ПРОМСВЯЗЬБАНК" + Ярославский ф-л ПАО "Банк ПСБ" @@ -1615,18 +1780,18 @@ - 21 + 4 ru - ПоСертификату + ПоЛогинуИлиСертификату - 24 + 27 ru @@ -1696,7 +1861,7 @@ ru - ПАО "ПРОМСВЯЗЬБАНК" + ПАО "Банк ПСБ" @@ -1725,18 +1890,18 @@ - 21 + 4 ru - ПоСертификату + ПоЛогинуИлиСертификату - 24 + 27 ru @@ -1806,7 +1971,7 @@ ru - ЮЖНЫЙ Ф-Л ПАО "ПРОМСВЯЗЬБАНК" + Южный ф-л ПАО "Банк ПСБ" @@ -1835,18 +2000,18 @@ - 21 + 4 ru - ПоСертификату + ПоЛогинуИлиСертификату - 24 + 27 ru @@ -1916,7 +2081,7 @@ ru - ДАЛЬНЕВОСТОЧНЫЙ Ф-Л ПАО "ПРОМСВЯЗЬБАНК" + Дальневосточный ф-л ПАО "Банк ПСБ" @@ -1945,18 +2110,18 @@ - 21 + 4 ru - ПоСертификату + ПоЛогинуИлиСертификату - 24 + 27 ru @@ -1978,7 +2143,7 @@ - 25 + 28 ru @@ -2026,7 +2191,7 @@ ru - УРАЛЬСКИЙ Ф-Л ПАО "ПРОМСВЯЗЬБАНК" + УРАЛЬСКИЙ Ф-Л ПАО "БАНК ПСБ" @@ -2055,18 +2220,18 @@ - 21 + 4 ru - ПоСертификату + ПоЛогинуИлиСертификату - 24 + 27 ru @@ -2088,7 +2253,7 @@ - 25 + 28 ru @@ -2136,7 +2301,7 @@ ru - СТАВРОПОЛЬСКИЙ Ф-Л ПАО "ПРОМСВЯЗЬБАНК" + Ставропольский ф-л ПАО "Банк ПСБ" @@ -2165,18 +2330,18 @@ - 21 + 4 ru - ПоСертификату + ПоЛогинуИлиСертификату - 24 + 27 ru @@ -2275,7 +2440,7 @@ - 21 + 23 ru @@ -2313,7 +2478,7 @@ - 22 + 24 ru @@ -2332,6 +2497,18 @@ 10 + + 15 + + 25 + + + ru + 1 + + + + @@ -2373,11 +2550,11 @@ - 21 + 4 ru - ПоСертификату + ПоЛогинуИлиСертификату @@ -2411,7 +2588,7 @@ - 22 + 24 ru @@ -2430,6 +2607,18 @@ 10 + + 15 + + 25 + + + ru + 1 + + + + @@ -2471,11 +2660,11 @@ - 21 + 4 ru - ПоСертификату + ПоЛогинуИлиСертификату @@ -2509,7 +2698,7 @@ - 22 + 24 ru @@ -2528,6 +2717,18 @@ 10 + + 15 + + 25 + + + ru + 1 + + + + @@ -2569,11 +2770,11 @@ - 21 + 4 ru - ПоСертификату + ПоЛогинуИлиСертификату @@ -2607,7 +2808,7 @@ - 22 + 24 ru @@ -2626,6 +2827,18 @@ 10 + + 15 + + 25 + + + ru + 1 + + + + @@ -2667,11 +2880,11 @@ - 21 + 4 ru - ПоСертификату + ПоЛогинуИлиСертификату @@ -2705,7 +2918,7 @@ - 22 + 24 ru @@ -2724,6 +2937,18 @@ 10 + + 15 + + 25 + + + ru + 1 + + + + @@ -2765,11 +2990,11 @@ - 21 + 4 ru - ПоСертификату + ПоЛогинуИлиСертификату @@ -2803,7 +3028,7 @@ - 22 + 24 ru @@ -2822,6 +3047,18 @@ 10 + + 15 + + 25 + + + ru + 1 + + + + @@ -2830,7 +3067,7 @@ 10 - 26 + 29 ru @@ -2841,7 +3078,7 @@ - 27 + 30 ru @@ -2852,7 +3089,7 @@ - 28 + 31 ru @@ -2863,7 +3100,7 @@ - 21 + 23 ru @@ -2874,7 +3111,7 @@ - 29 + 32 ru @@ -2951,7 +3188,7 @@ - 27 + 30 ru @@ -2962,7 +3199,7 @@ - 28 + 31 ru @@ -2973,7 +3210,7 @@ - 21 + 23 ru @@ -2984,7 +3221,7 @@ - 29 + 32 ru @@ -3061,7 +3298,7 @@ - 27 + 30 ru @@ -3072,7 +3309,7 @@ - 28 + 31 ru @@ -3083,7 +3320,7 @@ - 21 + 23 ru @@ -3094,7 +3331,7 @@ - 29 + 32 ru @@ -3171,7 +3408,7 @@ - 27 + 30 ru @@ -3182,7 +3419,7 @@ - 28 + 31 ru @@ -3193,7 +3430,7 @@ - 21 + 23 ru @@ -3204,7 +3441,7 @@ - 29 + 32 ru @@ -3281,7 +3518,7 @@ - 27 + 30 ru @@ -3292,7 +3529,7 @@ - 28 + 31 ru @@ -3303,7 +3540,7 @@ - 21 + 23 ru @@ -3314,7 +3551,7 @@ - 29 + 32 ru @@ -3380,7 +3617,7 @@ 10 - 26 + 29 ru @@ -3391,7 +3628,7 @@ - 27 + 30 ru @@ -3402,7 +3639,7 @@ - 28 + 31 ru @@ -3413,7 +3650,7 @@ - 21 + 23 ru @@ -3424,7 +3661,7 @@ - 29 + 32 ru @@ -3490,7 +3727,7 @@ 10 - 26 + 29 ru @@ -3501,7 +3738,7 @@ - 27 + 30 ru @@ -3512,7 +3749,7 @@ - 28 + 31 ru @@ -3523,7 +3760,7 @@ - 21 + 23 ru @@ -3534,7 +3771,7 @@ - 29 + 32 ru @@ -3600,7 +3837,7 @@ 10 - 26 + 29 ru @@ -3611,7 +3848,7 @@ - 27 + 30 ru @@ -3622,7 +3859,7 @@ - 28 + 31 ru @@ -3633,7 +3870,7 @@ - 21 + 23 ru @@ -3644,7 +3881,7 @@ - 29 + 32 ru @@ -3710,7 +3947,7 @@ 10 - 26 + 29 ru @@ -3721,7 +3958,7 @@ - 27 + 30 ru @@ -3732,7 +3969,7 @@ - 28 + 31 ru @@ -3743,7 +3980,7 @@ - 21 + 23 ru @@ -3754,7 +3991,7 @@ - 29 + 32 ru @@ -3820,7 +4057,7 @@ 10 - 26 + 29 ru @@ -3831,7 +4068,7 @@ - 27 + 30 ru @@ -3842,7 +4079,7 @@ - 28 + 31 ru @@ -3853,7 +4090,7 @@ - 21 + 23 ru @@ -3864,7 +4101,7 @@ - 29 + 32 ru @@ -3930,7 +4167,7 @@ 10 - 26 + 29 ru @@ -3941,7 +4178,7 @@ - 27 + 30 ru @@ -3952,7 +4189,7 @@ - 28 + 31 ru @@ -3963,7 +4200,7 @@ - 21 + 23 ru @@ -3974,7 +4211,7 @@ - 29 + 32 ru @@ -4040,7 +4277,7 @@ 10 - 26 + 29 ru @@ -4051,7 +4288,7 @@ - 27 + 30 ru @@ -4062,7 +4299,7 @@ - 28 + 31 ru @@ -4073,7 +4310,7 @@ - 21 + 23 ru @@ -4084,7 +4321,7 @@ - 29 + 32 ru @@ -4150,7 +4387,7 @@ 10 - 26 + 29 ru @@ -4161,7 +4398,7 @@ - 27 + 30 ru @@ -4172,7 +4409,7 @@ - 28 + 31 ru @@ -4183,7 +4420,7 @@ - 21 + 23 ru @@ -4194,7 +4431,7 @@ - 29 + 32 ru @@ -4260,7 +4497,7 @@ 10 - 26 + 29 ru @@ -4271,7 +4508,7 @@ - 27 + 30 ru @@ -4282,7 +4519,7 @@ - 28 + 31 ru @@ -4293,7 +4530,7 @@ - 21 + 23 ru @@ -4304,7 +4541,7 @@ - 29 + 32 ru @@ -4370,7 +4607,7 @@ 10 - 26 + 29 ru @@ -4381,7 +4618,7 @@ - 27 + 30 ru @@ -4392,7 +4629,7 @@ - 28 + 31 ru @@ -4403,7 +4640,7 @@ - 21 + 23 ru @@ -4414,7 +4651,7 @@ - 29 + 32 ru @@ -4480,7 +4717,7 @@ 10 - 26 + 29 ru @@ -4491,7 +4728,7 @@ - 27 + 30 ru @@ -4502,7 +4739,7 @@ - 28 + 31 ru @@ -4513,7 +4750,7 @@ - 21 + 23 ru @@ -4524,7 +4761,7 @@ - 29 + 32 ru @@ -4590,7 +4827,7 @@ 10 - 26 + 29 ru @@ -4601,7 +4838,7 @@ - 27 + 30 ru @@ -4612,7 +4849,7 @@ - 28 + 31 ru @@ -4623,7 +4860,7 @@ - 21 + 23 ru @@ -4634,7 +4871,7 @@ - 29 + 32 ru @@ -4700,7 +4937,7 @@ 10 - 26 + 29 ru @@ -4711,7 +4948,7 @@ - 27 + 30 ru @@ -4722,7 +4959,7 @@ - 28 + 31 ru @@ -4733,7 +4970,7 @@ - 21 + 23 ru @@ -4744,7 +4981,7 @@ - 29 + 32 ru @@ -4810,7 +5047,7 @@ 10 - 26 + 29 ru @@ -4821,7 +5058,7 @@ - 27 + 30 ru @@ -4832,7 +5069,7 @@ - 28 + 31 ru @@ -4843,7 +5080,7 @@ - 21 + 23 ru @@ -4854,7 +5091,7 @@ - 29 + 32 ru @@ -4920,7 +5157,7 @@ 10 - 26 + 29 ru @@ -4931,7 +5168,7 @@ - 27 + 30 ru @@ -4942,7 +5179,7 @@ - 28 + 31 ru @@ -4953,7 +5190,7 @@ - 21 + 23 ru @@ -4964,7 +5201,7 @@ - 29 + 32 ru @@ -5030,7 +5267,7 @@ 10 - 26 + 29 ru @@ -5041,7 +5278,7 @@ - 27 + 30 ru @@ -5052,7 +5289,7 @@ - 28 + 31 ru @@ -5063,7 +5300,7 @@ - 21 + 23 ru @@ -5074,7 +5311,7 @@ - 29 + 32 ru @@ -5140,7 +5377,7 @@ 10 - 26 + 29 ru @@ -5151,7 +5388,7 @@ - 27 + 30 ru @@ -5162,7 +5399,7 @@ - 28 + 31 ru @@ -5173,7 +5410,7 @@ - 21 + 23 ru @@ -5184,7 +5421,7 @@ - 29 + 32 ru @@ -5261,7 +5498,7 @@ - 27 + 30 ru @@ -5272,7 +5509,7 @@ - 28 + 31 ru @@ -5283,7 +5520,7 @@ - 21 + 23 ru @@ -5294,7 +5531,7 @@ - 29 + 32 ru @@ -5371,7 +5608,7 @@ - 27 + 30 ru @@ -5382,7 +5619,7 @@ - 28 + 31 ru @@ -5393,7 +5630,7 @@ - 21 + 23 ru @@ -5404,7 +5641,7 @@ - 29 + 32 ru @@ -5481,7 +5718,7 @@ - 27 + 30 ru @@ -5492,7 +5729,7 @@ - 28 + 31 ru @@ -5503,7 +5740,7 @@ - 21 + 23 ru @@ -5514,7 +5751,7 @@ - 29 + 32 ru @@ -5591,7 +5828,7 @@ - 27 + 30 ru @@ -5602,7 +5839,7 @@ - 28 + 31 ru @@ -5613,7 +5850,7 @@ - 21 + 23 ru @@ -5624,7 +5861,7 @@ - 29 + 32 ru @@ -5701,7 +5938,7 @@ - 27 + 30 ru @@ -5712,7 +5949,7 @@ - 28 + 31 ru @@ -5723,7 +5960,7 @@ - 21 + 23 ru @@ -5734,7 +5971,7 @@ - 29 + 32 ru @@ -5811,7 +6048,7 @@ - 27 + 30 ru @@ -5822,7 +6059,7 @@ - 28 + 31 ru @@ -5833,7 +6070,7 @@ - 21 + 23 ru @@ -5844,7 +6081,7 @@ - 29 + 32 ru @@ -5921,7 +6158,7 @@ - 27 + 30 ru @@ -5932,7 +6169,7 @@ - 28 + 31 ru @@ -5943,7 +6180,7 @@ - 21 + 23 ru @@ -5954,7 +6191,7 @@ - 29 + 32 ru @@ -6031,7 +6268,7 @@ - 27 + 30 ru @@ -6042,7 +6279,7 @@ - 28 + 31 ru @@ -6053,7 +6290,7 @@ - 21 + 23 ru @@ -6064,7 +6301,7 @@ - 29 + 32 ru @@ -6141,7 +6378,7 @@ - 27 + 30 ru @@ -6152,7 +6389,7 @@ - 28 + 31 ru @@ -6163,7 +6400,7 @@ - 21 + 23 ru @@ -6174,7 +6411,7 @@ - 29 + 32 ru @@ -6251,7 +6488,7 @@ - 27 + 30 ru @@ -6262,7 +6499,7 @@ - 28 + 31 ru @@ -6273,7 +6510,7 @@ - 21 + 23 ru @@ -6284,7 +6521,7 @@ - 29 + 32 ru @@ -6361,7 +6598,7 @@ - 27 + 30 ru @@ -6372,7 +6609,7 @@ - 28 + 31 ru @@ -6383,7 +6620,7 @@ - 21 + 23 ru @@ -6394,7 +6631,7 @@ - 29 + 32 ru @@ -6471,7 +6708,7 @@ - 27 + 30 ru @@ -6482,7 +6719,7 @@ - 28 + 31 ru @@ -6493,7 +6730,7 @@ - 21 + 23 ru @@ -6504,7 +6741,7 @@ - 29 + 32 ru @@ -6581,7 +6818,7 @@ - 27 + 30 ru @@ -6592,7 +6829,7 @@ - 28 + 31 ru @@ -6603,7 +6840,7 @@ - 21 + 23 ru @@ -6614,7 +6851,7 @@ - 29 + 32 ru @@ -6691,7 +6928,7 @@ - 27 + 30 ru @@ -6702,7 +6939,7 @@ - 28 + 31 ru @@ -6713,7 +6950,7 @@ - 21 + 23 ru @@ -6724,7 +6961,7 @@ - 29 + 32 ru @@ -6801,7 +7038,7 @@ - 27 + 30 ru @@ -6812,7 +7049,7 @@ - 28 + 31 ru @@ -6823,7 +7060,7 @@ - 21 + 23 ru @@ -6834,7 +7071,7 @@ - 29 + 32 ru @@ -6911,7 +7148,7 @@ - 27 + 30 ru @@ -6922,7 +7159,7 @@ - 28 + 31 ru @@ -6933,7 +7170,7 @@ - 21 + 23 ru @@ -6944,7 +7181,7 @@ - 29 + 32 ru @@ -7021,7 +7258,7 @@ - 27 + 30 ru @@ -7032,7 +7269,7 @@ - 28 + 31 ru @@ -7043,7 +7280,7 @@ - 21 + 23 ru @@ -7054,7 +7291,7 @@ - 29 + 32 ru @@ -7131,7 +7368,7 @@ - 27 + 30 ru @@ -7142,7 +7379,7 @@ - 28 + 31 ru @@ -7153,7 +7390,7 @@ - 21 + 23 ru @@ -7164,7 +7401,7 @@ - 29 + 32 ru @@ -7241,7 +7478,7 @@ - 27 + 30 ru @@ -7252,7 +7489,7 @@ - 28 + 31 ru @@ -7263,7 +7500,7 @@ - 21 + 23 ru @@ -7274,7 +7511,7 @@ - 29 + 32 ru @@ -7351,7 +7588,7 @@ - 27 + 30 ru @@ -7362,7 +7599,7 @@ - 28 + 31 ru @@ -7373,7 +7610,7 @@ - 21 + 23 ru @@ -7384,7 +7621,7 @@ - 29 + 32 ru @@ -7461,7 +7698,7 @@ - 27 + 30 ru @@ -7472,7 +7709,7 @@ - 28 + 31 ru @@ -7483,7 +7720,7 @@ - 21 + 23 ru @@ -7494,7 +7731,7 @@ - 29 + 32 ru @@ -7571,7 +7808,7 @@ - 27 + 30 ru @@ -7582,7 +7819,7 @@ - 28 + 31 ru @@ -7593,7 +7830,7 @@ - 21 + 23 ru @@ -7604,7 +7841,7 @@ - 29 + 32 ru @@ -7681,7 +7918,7 @@ - 27 + 30 ru @@ -7692,7 +7929,7 @@ - 28 + 31 ru @@ -7703,7 +7940,7 @@ - 21 + 23 ru @@ -7714,7 +7951,7 @@ - 29 + 32 ru @@ -7791,7 +8028,7 @@ - 27 + 30 ru @@ -7802,7 +8039,7 @@ - 28 + 31 ru @@ -7813,7 +8050,7 @@ - 21 + 23 ru @@ -7824,7 +8061,7 @@ - 29 + 32 ru @@ -7901,7 +8138,7 @@ - 27 + 30 ru @@ -7912,7 +8149,7 @@ - 28 + 31 ru @@ -7923,7 +8160,7 @@ - 21 + 23 ru @@ -7934,7 +8171,7 @@ - 29 + 32 ru @@ -8011,7 +8248,7 @@ - 27 + 30 ru @@ -8022,7 +8259,7 @@ - 28 + 31 ru @@ -8033,7 +8270,7 @@ - 21 + 23 ru @@ -8044,7 +8281,7 @@ - 29 + 32 ru @@ -8121,7 +8358,7 @@ - 27 + 30 ru @@ -8132,7 +8369,7 @@ - 28 + 31 ru @@ -8143,7 +8380,7 @@ - 21 + 23 ru @@ -8154,7 +8391,7 @@ - 29 + 32 ru @@ -8231,7 +8468,7 @@ - 27 + 30 ru @@ -8242,7 +8479,7 @@ - 28 + 31 ru @@ -8253,7 +8490,7 @@ - 21 + 23 ru @@ -8264,7 +8501,7 @@ - 29 + 32 ru @@ -8341,7 +8578,7 @@ - 27 + 30 ru @@ -8352,7 +8589,7 @@ - 28 + 31 ru @@ -8363,7 +8600,7 @@ - 21 + 23 ru @@ -8374,7 +8611,7 @@ - 29 + 32 ru @@ -8451,7 +8688,7 @@ - 27 + 30 ru @@ -8462,7 +8699,7 @@ - 28 + 31 ru @@ -8473,7 +8710,7 @@ - 21 + 23 ru @@ -8484,7 +8721,7 @@ - 29 + 32 ru @@ -8561,7 +8798,7 @@ - 27 + 30 ru @@ -8572,7 +8809,7 @@ - 28 + 31 ru @@ -8583,7 +8820,7 @@ - 21 + 23 ru @@ -8594,7 +8831,7 @@ - 29 + 32 ru @@ -8671,7 +8908,7 @@ - 27 + 30 ru @@ -8682,7 +8919,7 @@ - 28 + 31 ru @@ -8693,7 +8930,7 @@ - 21 + 23 ru @@ -8704,7 +8941,7 @@ - 29 + 32 ru @@ -8781,7 +9018,7 @@ - 27 + 30 ru @@ -8792,7 +9029,7 @@ - 28 + 31 ru @@ -8803,7 +9040,7 @@ - 21 + 23 ru @@ -8814,7 +9051,7 @@ - 29 + 32 ru @@ -8891,7 +9128,7 @@ - 27 + 30 ru @@ -8902,7 +9139,7 @@ - 28 + 31 ru @@ -8913,7 +9150,7 @@ - 21 + 23 ru @@ -8924,7 +9161,7 @@ - 29 + 32 ru @@ -9001,7 +9238,7 @@ - 27 + 30 ru @@ -9012,7 +9249,7 @@ - 28 + 31 ru @@ -9023,7 +9260,7 @@ - 21 + 23 ru @@ -9034,7 +9271,7 @@ - 29 + 32 ru @@ -9111,7 +9348,7 @@ - 27 + 30 ru @@ -9122,7 +9359,7 @@ - 28 + 31 ru @@ -9133,7 +9370,7 @@ - 21 + 23 ru @@ -9144,7 +9381,7 @@ - 29 + 32 ru @@ -9221,7 +9458,7 @@ - 27 + 30 ru @@ -9232,7 +9469,7 @@ - 28 + 31 ru @@ -9243,7 +9480,7 @@ - 21 + 23 ru @@ -9254,7 +9491,7 @@ - 29 + 32 ru @@ -9320,7 +9557,7 @@ 2 - 30 + 33 ru @@ -9331,7 +9568,7 @@ - 27 + 30 ru @@ -9342,7 +9579,7 @@ - 28 + 31 ru @@ -9353,7 +9590,7 @@ - 21 + 23 ru @@ -9364,7 +9601,7 @@ - 29 + 32 ru @@ -9386,7 +9623,7 @@ - 25 + 28 @@ -9523,7 +9760,7 @@ - 31 + 34 ru @@ -9573,7 +9810,7 @@ - 21 + 23 ru @@ -9694,7 +9931,7 @@ - 32 + 35 ru @@ -9793,7 +10030,7 @@ - 21 + 23 ru @@ -9804,7 +10041,7 @@ - 32 + 35 ru @@ -9815,7 +10052,7 @@ - 33 + 36 ru @@ -9826,7 +10063,7 @@ - 25 + 28 ru @@ -9837,7 +10074,7 @@ - 34 + 37 ru @@ -9848,7 +10085,7 @@ - 35 + 38 ru @@ -9870,7 +10107,7 @@ 2 - 30 + 33 ru @@ -9903,7 +10140,7 @@ - 21 + 23 ru @@ -9914,7 +10151,7 @@ - 32 + 35 ru @@ -9925,7 +10162,7 @@ - 33 + 36 ru @@ -9936,7 +10173,7 @@ - 25 + 28 ru @@ -9947,7 +10184,7 @@ - 34 + 37 ru @@ -9958,7 +10195,7 @@ - 35 + 38 ru @@ -9980,7 +10217,7 @@ 2 - 30 + 33 ru @@ -10013,7 +10250,7 @@ - 21 + 23 ru @@ -10024,7 +10261,7 @@ - 32 + 35 ru @@ -10035,7 +10272,7 @@ - 33 + 36 ru @@ -10046,7 +10283,7 @@ - 25 + 28 ru @@ -10057,7 +10294,7 @@ - 34 + 37 ru @@ -10068,7 +10305,7 @@ - 35 + 38 ru @@ -10090,7 +10327,7 @@ 2 - 30 + 33 ru @@ -10123,12 +10360,12 @@ - 21 + 23 - 32 + 35 ru @@ -10139,7 +10376,7 @@ - 33 + 36 ru @@ -10150,12 +10387,12 @@ - 25 + 28 - 34 + 37 ru @@ -10166,7 +10403,7 @@ - 35 + 38 ru @@ -10177,7 +10414,7 @@ - 31 + 34 ru @@ -10216,7 +10453,7 @@ - 28 + 31 ru @@ -10227,7 +10464,7 @@ - 21 + 23 ru @@ -10271,11 +10508,11 @@ - 22 + 24 ru - 1,2 + 1,2,4 @@ -10304,7 +10541,7 @@ 2 - 30 + 33 ru @@ -10326,7 +10563,7 @@ - 28 + 31 ru @@ -10337,7 +10574,7 @@ - 21 + 23 ru @@ -10359,7 +10596,7 @@ - 33 + 36 ru @@ -10381,18 +10618,18 @@ - 22 + 24 ru - 1,2 + 1,2,4 - 35 + 38 ru @@ -10414,7 +10651,7 @@ 2 - 30 + 33 ru @@ -10436,7 +10673,7 @@ - 28 + 31 ru @@ -10447,7 +10684,7 @@ - 21 + 23 ru @@ -10469,7 +10706,7 @@ - 33 + 36 ru @@ -10491,18 +10728,18 @@ - 22 + 24 ru - 1,2 + 1,2,4 - 35 + 38 ru @@ -10524,7 +10761,7 @@ 2 - 30 + 33 ru @@ -10546,7 +10783,7 @@ - 28 + 31 ru @@ -10557,7 +10794,7 @@ - 21 + 23 ru @@ -10579,7 +10816,7 @@ - 33 + 36 ru @@ -10601,18 +10838,18 @@ - 22 + 24 ru - 1,2 + 1,2,4 - 35 + 38 ru @@ -10634,7 +10871,7 @@ 2 - 30 + 33 ru @@ -10656,7 +10893,7 @@ - 28 + 31 ru @@ -10667,7 +10904,7 @@ - 21 + 23 ru @@ -10689,7 +10926,7 @@ - 33 + 36 ru @@ -10711,18 +10948,18 @@ - 22 + 24 ru - 1,2 + 1,2,4 - 35 + 38 ru @@ -10744,7 +10981,7 @@ 2 - 30 + 33 ru @@ -10766,7 +11003,7 @@ - 28 + 31 ru @@ -10777,7 +11014,7 @@ - 21 + 23 ru @@ -10799,7 +11036,7 @@ - 33 + 36 ru @@ -10821,18 +11058,18 @@ - 22 + 24 ru - 1,2 + 1,2,4 - 35 + 38 ru @@ -10876,7 +11113,7 @@ - 28 + 31 ru @@ -10887,7 +11124,7 @@ - 21 + 23 ru @@ -10909,7 +11146,7 @@ - 33 + 36 ru @@ -10931,18 +11168,18 @@ - 22 + 24 ru - 1,2 + 1,2,4 - 35 + 38 ru @@ -11002,7 +11239,7 @@ - 32 + 35 ru @@ -11057,7 +11294,7 @@ - 31 + 34 ru @@ -11096,7 +11333,7 @@ - 28 + 31 ru @@ -11107,7 +11344,7 @@ - 21 + 23 ru @@ -11184,7 +11421,7 @@ 2 - 30 + 33 ru @@ -11217,7 +11454,7 @@ - 21 + 23 ru @@ -11228,7 +11465,7 @@ - 32 + 35 ru @@ -11239,7 +11476,7 @@ - 33 + 36 ru @@ -11250,7 +11487,7 @@ - 25 + 28 ru @@ -11261,7 +11498,7 @@ - 34 + 37 ru @@ -11272,7 +11509,7 @@ - 35 + 38 ru @@ -11327,7 +11564,7 @@ - 21 + 23 ru @@ -11338,7 +11575,7 @@ - 32 + 35 ru @@ -11437,7 +11674,7 @@ - 21 + 23 ru @@ -11506,6 +11743,18 @@ 10 + + 15 + + 25 + + + ru + 1 + + + + @@ -11547,12 +11796,12 @@ - 21 + 23 - 32 + 35 ru @@ -11563,7 +11812,7 @@ - 33 + 36 ru @@ -11574,7 +11823,7 @@ - 25 + 28 ru @@ -11585,7 +11834,7 @@ - 22 + 24 ru @@ -11596,7 +11845,7 @@ - 36 + 39 ru @@ -11607,7 +11856,7 @@ - 31 + 34 ru @@ -11624,7 +11873,7 @@ 2 - 37 + 40 ru @@ -11657,12 +11906,12 @@ - 21 + 23 - 32 + 35 ru @@ -11673,7 +11922,7 @@ - 33 + 36 ru @@ -11684,7 +11933,7 @@ - 25 + 28 ru @@ -11695,7 +11944,7 @@ - 22 + 24 ru @@ -11706,7 +11955,7 @@ - 36 + 39 ru @@ -11717,7 +11966,7 @@ - 31 + 34 ru @@ -11767,7 +12016,7 @@ - 21 + 23 ru @@ -11811,7 +12060,7 @@ - 22 + 24 ru @@ -11877,7 +12126,7 @@ - 21 + 23 ru @@ -11888,7 +12137,7 @@ - 38 + 41 ru @@ -11897,36 +12146,36 @@ - - - 33 - - - ru - 1 - - - - - - - 2 - - - - - 2 - - - ru - 1 - - - - 36 + + + ru + 1 + + + + + + + 2 + + + + + 2 + + + ru + 1 + + + + + + + 39 @@ -11975,7 +12224,7 @@ - 21 + 23 ru @@ -11986,7 +12235,7 @@ - 38 + 41 ru @@ -11997,7 +12246,7 @@ - 33 + 36 ru @@ -12019,7 +12268,7 @@ - 22 + 24 ru @@ -12085,7 +12334,7 @@ - 21 + 23 ru @@ -12096,7 +12345,7 @@ - 38 + 41 ru @@ -12107,7 +12356,7 @@ - 33 + 36 ru @@ -12129,7 +12378,7 @@ - 22 + 24 ru @@ -12195,7 +12444,7 @@ - 21 + 23 ru @@ -12206,7 +12455,7 @@ - 38 + 41 ru @@ -12217,7 +12466,7 @@ - 33 + 36 ru @@ -12239,7 +12488,7 @@ - 22 + 24 ru @@ -12305,7 +12554,7 @@ - 21 + 23 ru @@ -12316,7 +12565,7 @@ - 38 + 41 ru @@ -12327,7 +12576,7 @@ - 33 + 36 ru @@ -12349,7 +12598,7 @@ - 22 + 24 ru @@ -12415,7 +12664,7 @@ - 21 + 23 ru @@ -12426,7 +12675,7 @@ - 38 + 41 ru @@ -12437,7 +12686,7 @@ - 33 + 36 ru @@ -12459,7 +12708,7 @@ - 22 + 24 ru @@ -12525,7 +12774,7 @@ - 21 + 23 ru @@ -12536,7 +12785,7 @@ - 38 + 41 ru @@ -12547,7 +12796,7 @@ - 33 + 36 ru @@ -12569,7 +12818,7 @@ - 22 + 24 ru @@ -12635,7 +12884,7 @@ - 21 + 23 ru @@ -12646,7 +12895,7 @@ - 38 + 41 ru @@ -12657,7 +12906,7 @@ - 33 + 36 ru @@ -12745,7 +12994,7 @@ - 21 + 23 ru @@ -12756,7 +13005,7 @@ - 38 + 41 ru @@ -12767,7 +13016,7 @@ - 33 + 36 ru @@ -12855,7 +13104,7 @@ - 21 + 23 ru @@ -12866,7 +13115,7 @@ - 38 + 41 ru @@ -12877,7 +13126,7 @@ - 33 + 36 ru @@ -12965,7 +13214,7 @@ - 21 + 23 ru @@ -12976,7 +13225,7 @@ - 38 + 41 ru @@ -12987,7 +13236,7 @@ - 33 + 36 ru @@ -13075,7 +13324,7 @@ - 21 + 23 ru @@ -13086,7 +13335,7 @@ - 38 + 41 ru @@ -13097,7 +13346,7 @@ - 33 + 36 ru @@ -13185,7 +13434,7 @@ - 21 + 23 ru @@ -13254,6 +13503,18 @@ 10 + + 15 + + 25 + + + ru + 1 + + + + @@ -13295,7 +13556,7 @@ - 21 + 23 ru @@ -13369,7 +13630,7 @@ 120 - 39 + 25 1 @@ -13405,7 +13666,7 @@ - 21 + 23 ru @@ -13449,7 +13710,7 @@ - 40 + 42 ru @@ -13471,7 +13732,7 @@ - 39 + 25 @@ -13479,7 +13740,7 @@ 121 - 39 + 25 1 @@ -13515,7 +13776,7 @@ - 21 + 23 ru @@ -13559,7 +13820,7 @@ - 40 + 42 ru @@ -13581,7 +13842,7 @@ - 39 + 25 @@ -13589,7 +13850,7 @@ 122 - 39 + 25 1 @@ -13625,7 +13886,7 @@ - 21 + 23 ru @@ -13669,7 +13930,7 @@ - 40 + 42 ru @@ -13691,7 +13952,7 @@ - 39 + 25 @@ -13699,7 +13960,7 @@ 123 - 39 + 25 1 @@ -13735,7 +13996,7 @@ - 21 + 23 ru @@ -13779,7 +14040,7 @@ - 40 + 42 ru @@ -13801,7 +14062,7 @@ - 39 + 25 @@ -13809,7 +14070,7 @@ 124 - 39 + 25 1 @@ -13845,7 +14106,7 @@ - 21 + 23 ru @@ -13889,7 +14150,7 @@ - 40 + 42 ru @@ -13911,7 +14172,7 @@ - 39 + 25 @@ -13919,10 +14180,10 @@ 125 - 39 + 25 - 41 + 43 ru @@ -13933,7 +14194,7 @@ - 42 + 44 ru @@ -13944,7 +14205,7 @@ - 43 + 45 ru @@ -13955,7 +14216,7 @@ - 44 + 46 ru @@ -13966,7 +14227,7 @@ - 45 + 47 ru @@ -13999,7 +14260,7 @@ - 40 + 42 ru @@ -14021,12 +14282,12 @@ - 39 + 25 - 39 + 25 ru @@ -14040,10 +14301,10 @@ 126 - 39 + 25 - 41 + 43 ru @@ -14054,7 +14315,7 @@ - 42 + 44 ru @@ -14065,7 +14326,7 @@ - 43 + 45 ru @@ -14076,7 +14337,7 @@ - 44 + 46 ru @@ -14087,7 +14348,7 @@ - 45 + 47 ru @@ -14120,7 +14381,7 @@ - 40 + 42 ru @@ -14142,7 +14403,7 @@ - 39 + 25 @@ -14153,7 +14414,7 @@ 2 - 46 + 48 ru @@ -14186,7 +14447,7 @@ - 21 + 23 ru @@ -14197,7 +14458,7 @@ - 23 + 26 ru @@ -14208,7 +14469,7 @@ - 33 + 36 ru @@ -14219,7 +14480,7 @@ - 25 + 28 ru @@ -14230,7 +14491,7 @@ - 22 + 24 ru @@ -14255,6 +14516,18 @@ 2 + + 14 + + 25 + + + ru + 1 + + + + @@ -14263,7 +14536,7 @@ 2 - 46 + 48 ru @@ -14296,7 +14569,7 @@ - 21 + 23 ru @@ -14307,7 +14580,7 @@ - 23 + 26 ru @@ -14318,7 +14591,7 @@ - 33 + 36 ru @@ -14329,7 +14602,7 @@ - 25 + 28 ru @@ -14340,7 +14613,7 @@ - 22 + 24 ru @@ -14370,10 +14643,10 @@ 129 - 39 + 25 - 39 + 25 ru @@ -14384,7 +14657,7 @@ - 39 + 25 ru @@ -14395,7 +14668,7 @@ - 28 + 31 ru @@ -14406,7 +14679,7 @@ - 21 + 23 ru @@ -14475,10 +14748,10 @@ 130 - 39 + 25 - 39 + 25 ru @@ -14489,7 +14762,7 @@ - 39 + 25 ru @@ -14500,7 +14773,7 @@ - 28 + 31 ru @@ -14511,7 +14784,7 @@ - 21 + 23 ru @@ -14580,10 +14853,10 @@ 131 - 39 + 25 - 39 + 25 ru @@ -14594,7 +14867,7 @@ - 39 + 25 ru @@ -14605,7 +14878,7 @@ - 28 + 31 ru @@ -14616,7 +14889,7 @@ - 21 + 23 ru @@ -14685,10 +14958,10 @@ 132 - 39 + 25 - 39 + 25 ru @@ -14699,7 +14972,7 @@ - 39 + 25 ru @@ -14710,7 +14983,7 @@ - 28 + 31 ru @@ -14721,7 +14994,7 @@ - 21 + 23 ru @@ -14790,10 +15063,10 @@ 133 - 39 + 25 - 39 + 25 ru @@ -14804,7 +15077,7 @@ - 39 + 25 ru @@ -14815,7 +15088,7 @@ - 28 + 31 ru @@ -14826,7 +15099,7 @@ - 21 + 23 ru @@ -14895,10 +15168,10 @@ 134 - 39 + 25 - 39 + 25 ru @@ -14909,7 +15182,7 @@ - 39 + 25 ru @@ -14920,7 +15193,7 @@ - 28 + 31 ru @@ -14931,7 +15204,7 @@ - 21 + 23 ru @@ -15000,10 +15273,10 @@ 135 - 39 + 25 - 39 + 25 ru @@ -15014,7 +15287,7 @@ - 39 + 25 ru @@ -15025,7 +15298,7 @@ - 28 + 31 ru @@ -15036,7 +15309,7 @@ - 21 + 23 ru @@ -15105,10 +15378,10 @@ 136 - 39 + 25 - 39 + 25 ru @@ -15119,7 +15392,7 @@ - 39 + 25 ru @@ -15130,7 +15403,7 @@ - 28 + 31 ru @@ -15141,7 +15414,7 @@ - 21 + 23 ru @@ -15210,10 +15483,10 @@ 137 - 39 + 25 - 39 + 25 ru @@ -15224,7 +15497,7 @@ - 39 + 25 ru @@ -15235,7 +15508,7 @@ - 28 + 31 ru @@ -15246,7 +15519,7 @@ - 21 + 23 ru @@ -15315,10 +15588,10 @@ 138 - 39 + 25 - 39 + 25 ru @@ -15329,7 +15602,7 @@ - 39 + 25 ru @@ -15340,7 +15613,7 @@ - 28 + 31 ru @@ -15351,7 +15624,7 @@ - 21 + 23 ru @@ -15420,10 +15693,10 @@ 139 - 39 + 25 - 39 + 25 ru @@ -15434,7 +15707,7 @@ - 39 + 25 ru @@ -15445,7 +15718,7 @@ - 28 + 31 ru @@ -15456,7 +15729,7 @@ - 21 + 23 ru @@ -15525,10 +15798,10 @@ 140 - 39 + 25 - 39 + 25 ru @@ -15539,7 +15812,7 @@ - 39 + 25 ru @@ -15550,7 +15823,7 @@ - 28 + 31 ru @@ -15561,7 +15834,7 @@ - 21 + 23 ru @@ -15630,10 +15903,10 @@ 141 - 39 + 25 - 39 + 25 ru @@ -15644,7 +15917,7 @@ - 39 + 25 ru @@ -15655,7 +15928,7 @@ - 28 + 31 ru @@ -15666,7 +15939,7 @@ - 21 + 23 ru @@ -15735,10 +16008,10 @@ 142 - 39 + 25 - 39 + 25 ru @@ -15749,7 +16022,7 @@ - 39 + 25 ru @@ -15760,7 +16033,7 @@ - 28 + 31 ru @@ -15771,7 +16044,7 @@ - 21 + 23 ru @@ -15840,10 +16113,10 @@ 143 - 39 + 25 - 39 + 25 ru @@ -15854,7 +16127,7 @@ - 39 + 25 ru @@ -15865,7 +16138,7 @@ - 28 + 31 ru @@ -15876,7 +16149,7 @@ - 21 + 23 ru @@ -15945,10 +16218,10 @@ 144 - 39 + 25 - 39 + 25 ru @@ -15959,7 +16232,7 @@ - 39 + 25 ru @@ -15970,7 +16243,7 @@ - 28 + 31 ru @@ -15981,7 +16254,7 @@ - 21 + 23 ru @@ -16050,10 +16323,10 @@ 145 - 39 + 25 - 39 + 25 ru @@ -16064,7 +16337,7 @@ - 39 + 25 ru @@ -16075,7 +16348,7 @@ - 28 + 31 ru @@ -16086,7 +16359,7 @@ - 21 + 23 ru @@ -16155,10 +16428,10 @@ 146 - 39 + 25 - 39 + 25 ru @@ -16169,7 +16442,7 @@ - 39 + 25 ru @@ -16180,7 +16453,7 @@ - 28 + 31 ru @@ -16191,7 +16464,7 @@ - 21 + 23 ru @@ -16260,10 +16533,10 @@ 147 - 39 + 25 - 39 + 25 ru @@ -16274,7 +16547,7 @@ - 39 + 25 ru @@ -16285,7 +16558,7 @@ - 28 + 31 ru @@ -16296,7 +16569,7 @@ - 21 + 23 ru @@ -16365,10 +16638,10 @@ 148 - 39 + 25 - 39 + 25 ru @@ -16379,7 +16652,7 @@ - 39 + 25 ru @@ -16390,7 +16663,7 @@ - 28 + 31 ru @@ -16401,7 +16674,7 @@ - 21 + 23 ru @@ -16470,10 +16743,10 @@ 149 - 39 + 25 - 39 + 25 ru @@ -16484,7 +16757,7 @@ - 39 + 25 ru @@ -16495,7 +16768,7 @@ - 28 + 31 ru @@ -16506,7 +16779,7 @@ - 21 + 23 ru @@ -16575,10 +16848,10 @@ 150 - 39 + 25 - 39 + 25 ru @@ -16589,7 +16862,7 @@ - 39 + 25 ru @@ -16600,7 +16873,7 @@ - 28 + 31 ru @@ -16611,7 +16884,7 @@ - 21 + 23 ru @@ -16680,10 +16953,10 @@ 151 - 39 + 25 - 39 + 25 ru @@ -16694,7 +16967,7 @@ - 39 + 25 ru @@ -16705,7 +16978,7 @@ - 28 + 31 ru @@ -16716,7 +16989,7 @@ - 21 + 23 ru @@ -16785,10 +17058,10 @@ 152 - 39 + 25 - 39 + 25 ru @@ -16799,7 +17072,7 @@ - 39 + 25 ru @@ -16810,7 +17083,7 @@ - 28 + 31 ru @@ -16821,7 +17094,7 @@ - 21 + 23 ru @@ -16890,10 +17163,10 @@ 153 - 39 + 25 - 39 + 25 ru @@ -16904,7 +17177,7 @@ - 39 + 25 ru @@ -16915,7 +17188,7 @@ - 28 + 31 ru @@ -16926,7 +17199,7 @@ - 21 + 23 ru @@ -16995,10 +17268,10 @@ 154 - 39 + 25 - 39 + 25 ru @@ -17009,7 +17282,7 @@ - 39 + 25 ru @@ -17020,7 +17293,7 @@ - 28 + 31 ru @@ -17031,7 +17304,7 @@ - 21 + 23 ru @@ -17100,10 +17373,10 @@ 155 - 39 + 25 - 39 + 25 ru @@ -17114,7 +17387,7 @@ - 39 + 25 ru @@ -17125,7 +17398,7 @@ - 28 + 31 ru @@ -17136,7 +17409,7 @@ - 21 + 23 ru @@ -17205,10 +17478,10 @@ 156 - 39 + 25 - 39 + 25 ru @@ -17219,7 +17492,7 @@ - 39 + 25 ru @@ -17230,7 +17503,7 @@ - 28 + 31 ru @@ -17241,7 +17514,7 @@ - 21 + 23 ru @@ -17310,10 +17583,10 @@ 157 - 39 + 25 - 39 + 25 ru @@ -17324,7 +17597,7 @@ - 39 + 25 ru @@ -17335,7 +17608,7 @@ - 28 + 31 ru @@ -17346,7 +17619,7 @@ - 21 + 23 ru @@ -17415,10 +17688,10 @@ 158 - 39 + 25 - 39 + 25 ru @@ -17429,7 +17702,7 @@ - 39 + 25 ru @@ -17440,7 +17713,7 @@ - 28 + 31 ru @@ -17451,7 +17724,7 @@ - 21 + 23 ru @@ -17520,10 +17793,10 @@ 159 - 39 + 25 - 39 + 25 ru @@ -17534,7 +17807,7 @@ - 39 + 25 ru @@ -17545,7 +17818,7 @@ - 28 + 31 ru @@ -17556,7 +17829,7 @@ - 21 + 23 ru @@ -17625,10 +17898,10 @@ 160 - 39 + 25 - 39 + 25 ru @@ -17639,7 +17912,7 @@ - 39 + 25 ru @@ -17650,7 +17923,7 @@ - 28 + 31 ru @@ -17661,7 +17934,7 @@ - 21 + 23 ru @@ -17730,10 +18003,10 @@ 161 - 39 + 25 - 39 + 25 ru @@ -17744,7 +18017,7 @@ - 39 + 25 ru @@ -17755,7 +18028,7 @@ - 28 + 31 ru @@ -17766,7 +18039,7 @@ - 21 + 23 ru @@ -17835,10 +18108,10 @@ 162 - 39 + 25 - 39 + 25 ru @@ -17849,7 +18122,7 @@ - 39 + 25 ru @@ -17860,7 +18133,7 @@ - 28 + 31 ru @@ -17871,7 +18144,7 @@ - 21 + 23 ru @@ -17940,10 +18213,10 @@ 163 - 39 + 25 - 39 + 25 ru @@ -17954,7 +18227,7 @@ - 39 + 25 ru @@ -17965,7 +18238,7 @@ - 28 + 31 ru @@ -17976,7 +18249,7 @@ - 21 + 23 ru @@ -18045,10 +18318,10 @@ 164 - 39 + 25 - 39 + 25 ru @@ -18059,7 +18332,7 @@ - 39 + 25 ru @@ -18070,7 +18343,7 @@ - 28 + 31 ru @@ -18081,7 +18354,7 @@ - 21 + 23 ru @@ -18150,10 +18423,10 @@ 165 - 39 + 25 - 39 + 25 ru @@ -18164,7 +18437,7 @@ - 39 + 25 ru @@ -18175,7 +18448,7 @@ - 28 + 31 ru @@ -18186,7 +18459,7 @@ - 21 + 23 ru @@ -18255,10 +18528,10 @@ 166 - 39 + 25 - 39 + 25 ru @@ -18269,7 +18542,7 @@ - 39 + 25 ru @@ -18280,7 +18553,7 @@ - 28 + 31 ru @@ -18291,7 +18564,7 @@ - 21 + 23 ru @@ -18360,10 +18633,10 @@ 167 - 39 + 25 - 39 + 25 ru @@ -18374,7 +18647,7 @@ - 39 + 25 ru @@ -18385,7 +18658,7 @@ - 28 + 31 ru @@ -18396,7 +18669,7 @@ - 21 + 23 ru @@ -18465,10 +18738,10 @@ 168 - 39 + 25 - 39 + 25 ru @@ -18479,7 +18752,7 @@ - 39 + 25 ru @@ -18490,7 +18763,7 @@ - 28 + 31 ru @@ -18501,7 +18774,7 @@ - 21 + 23 ru @@ -18570,10 +18843,10 @@ 169 - 39 + 25 - 39 + 25 ru @@ -18584,7 +18857,7 @@ - 39 + 25 ru @@ -18595,7 +18868,7 @@ - 28 + 31 ru @@ -18606,7 +18879,7 @@ - 21 + 23 ru @@ -18675,10 +18948,10 @@ 170 - 39 + 25 - 39 + 25 ru @@ -18689,7 +18962,7 @@ - 39 + 25 ru @@ -18700,7 +18973,7 @@ - 28 + 31 ru @@ -18711,7 +18984,7 @@ - 21 + 23 ru @@ -18780,10 +19053,10 @@ 171 - 39 + 25 - 39 + 25 ru @@ -18794,7 +19067,7 @@ - 39 + 25 ru @@ -18805,7 +19078,7 @@ - 28 + 31 ru @@ -18816,7 +19089,7 @@ - 21 + 23 ru @@ -18885,10 +19158,10 @@ 172 - 39 + 25 - 39 + 25 ru @@ -18899,7 +19172,7 @@ - 39 + 25 ru @@ -18910,7 +19183,7 @@ - 28 + 31 ru @@ -18921,7 +19194,7 @@ - 21 + 23 ru @@ -18990,10 +19263,10 @@ 173 - 39 + 25 - 39 + 25 ru @@ -19004,7 +19277,7 @@ - 39 + 25 ru @@ -19015,7 +19288,7 @@ - 28 + 31 ru @@ -19026,7 +19299,7 @@ - 21 + 23 ru @@ -19095,10 +19368,10 @@ 174 - 39 + 25 - 39 + 25 ru @@ -19109,7 +19382,7 @@ - 39 + 25 ru @@ -19120,7 +19393,7 @@ - 28 + 31 ru @@ -19131,7 +19404,7 @@ - 21 + 23 ru @@ -19200,10 +19473,10 @@ 175 - 39 + 25 - 39 + 25 ru @@ -19214,7 +19487,7 @@ - 39 + 25 ru @@ -19225,7 +19498,7 @@ - 28 + 31 ru @@ -19236,7 +19509,7 @@ - 21 + 23 ru @@ -19305,10 +19578,10 @@ 176 - 39 + 25 - 39 + 25 ru @@ -19319,7 +19592,7 @@ - 39 + 25 ru @@ -19330,7 +19603,7 @@ - 28 + 31 ru @@ -19341,7 +19614,7 @@ - 21 + 23 ru @@ -19410,10 +19683,10 @@ 177 - 39 + 25 - 39 + 25 ru @@ -19424,7 +19697,7 @@ - 39 + 25 ru @@ -19435,7 +19708,7 @@ - 28 + 31 ru @@ -19446,7 +19719,7 @@ - 21 + 23 ru @@ -19515,10 +19788,10 @@ 178 - 39 + 25 - 39 + 25 ru @@ -19529,7 +19802,7 @@ - 39 + 25 ru @@ -19540,7 +19813,7 @@ - 28 + 31 ru @@ -19551,7 +19824,7 @@ - 21 + 23 ru @@ -19620,10 +19893,10 @@ 179 - 39 + 25 - 39 + 25 ru @@ -19634,7 +19907,7 @@ - 39 + 25 ru @@ -19645,7 +19918,7 @@ - 28 + 31 ru @@ -19656,7 +19929,7 @@ - 21 + 23 ru @@ -19725,10 +19998,10 @@ 180 - 39 + 25 - 39 + 25 ru @@ -19739,7 +20012,7 @@ - 39 + 25 ru @@ -19750,7 +20023,7 @@ - 28 + 31 ru @@ -19761,7 +20034,7 @@ - 21 + 23 ru @@ -19830,10 +20103,10 @@ 181 - 39 + 25 - 39 + 25 ru @@ -19844,7 +20117,7 @@ - 39 + 25 ru @@ -19855,7 +20128,7 @@ - 28 + 31 ru @@ -19866,7 +20139,7 @@ - 21 + 23 ru @@ -19935,10 +20208,10 @@ 182 - 39 + 25 - 39 + 25 ru @@ -19949,7 +20222,7 @@ - 39 + 25 ru @@ -19960,7 +20233,7 @@ - 28 + 31 ru @@ -19971,7 +20244,7 @@ - 21 + 23 ru @@ -20040,10 +20313,10 @@ 183 - 39 + 25 - 39 + 25 ru @@ -20054,7 +20327,7 @@ - 39 + 25 ru @@ -20065,7 +20338,7 @@ - 28 + 31 ru @@ -20076,7 +20349,7 @@ - 21 + 23 ru @@ -20145,10 +20418,10 @@ 184 - 39 + 25 - 39 + 25 ru @@ -20159,7 +20432,7 @@ - 39 + 25 ru @@ -20170,7 +20443,7 @@ - 28 + 31 ru @@ -20181,7 +20454,7 @@ - 21 + 23 ru @@ -20250,10 +20523,10 @@ 185 - 39 + 25 - 39 + 25 ru @@ -20264,7 +20537,7 @@ - 39 + 25 ru @@ -20275,7 +20548,7 @@ - 28 + 31 ru @@ -20286,7 +20559,7 @@ - 21 + 23 ru @@ -20355,10 +20628,10 @@ 186 - 39 + 25 - 39 + 25 ru @@ -20369,7 +20642,7 @@ - 39 + 25 ru @@ -20380,7 +20653,7 @@ - 28 + 31 ru @@ -20391,7 +20664,7 @@ - 21 + 23 ru @@ -20460,10 +20733,10 @@ 187 - 39 + 25 - 39 + 25 ru @@ -20474,7 +20747,7 @@ - 39 + 25 ru @@ -20485,7 +20758,7 @@ - 28 + 31 ru @@ -20496,7 +20769,7 @@ - 21 + 23 ru @@ -20565,10 +20838,10 @@ 188 - 39 + 25 - 39 + 25 ru @@ -20579,7 +20852,7 @@ - 39 + 25 ru @@ -20590,7 +20863,7 @@ - 28 + 31 ru @@ -20601,7 +20874,7 @@ - 21 + 23 ru @@ -20670,10 +20943,10 @@ 189 - 39 + 25 - 39 + 25 ru @@ -20684,7 +20957,7 @@ - 39 + 25 ru @@ -20695,7 +20968,7 @@ - 28 + 31 ru @@ -20706,7 +20979,7 @@ - 21 + 23 ru @@ -20775,10 +21048,10 @@ 190 - 39 + 25 - 39 + 25 ru @@ -20789,7 +21062,7 @@ - 39 + 25 ru @@ -20800,7 +21073,7 @@ - 28 + 31 ru @@ -20811,7 +21084,7 @@ - 21 + 23 ru @@ -20880,10 +21153,10 @@ 191 - 39 + 25 - 39 + 25 ru @@ -20894,7 +21167,7 @@ - 39 + 25 ru @@ -20905,7 +21178,7 @@ - 28 + 31 ru @@ -20916,7 +21189,7 @@ - 21 + 23 ru @@ -20985,10 +21258,10 @@ 192 - 39 + 25 - 39 + 25 ru @@ -20999,7 +21272,7 @@ - 39 + 25 ru @@ -21010,7 +21283,7 @@ - 28 + 31 ru @@ -21021,7 +21294,7 @@ - 21 + 23 ru @@ -21090,10 +21363,10 @@ 193 - 39 + 25 - 39 + 25 ru @@ -21104,7 +21377,7 @@ - 39 + 25 ru @@ -21115,7 +21388,7 @@ - 28 + 31 ru @@ -21126,7 +21399,7 @@ - 21 + 23 ru @@ -21195,10 +21468,10 @@ 194 - 39 + 25 - 39 + 25 ru @@ -21209,7 +21482,7 @@ - 39 + 25 ru @@ -21220,7 +21493,7 @@ - 28 + 31 ru @@ -21231,7 +21504,7 @@ - 21 + 23 ru @@ -21300,10 +21573,10 @@ 195 - 39 + 25 - 39 + 25 ru @@ -21314,7 +21587,7 @@ - 39 + 25 ru @@ -21325,7 +21598,7 @@ - 28 + 31 ru @@ -21336,7 +21609,7 @@ - 21 + 23 ru @@ -21347,7 +21620,7 @@ - 39 + 25 ru @@ -21358,7 +21631,7 @@ - 39 + 25 ru @@ -21369,7 +21642,7 @@ - 39 + 25 ru @@ -21380,7 +21653,7 @@ - 39 + 25 ru @@ -21391,7 +21664,7 @@ - 39 + 25 ru @@ -21405,10 +21678,10 @@ 196 - 39 + 25 - 39 + 25 ru @@ -21419,7 +21692,7 @@ - 39 + 25 ru @@ -21430,7 +21703,7 @@ - 28 + 31 ru @@ -21441,7 +21714,7 @@ - 21 + 23 ru @@ -21463,7 +21736,7 @@ - 39 + 25 ru @@ -21485,7 +21758,7 @@ - 39 + 25 ru @@ -21496,7 +21769,7 @@ - 39 + 25 ru @@ -21507,6 +21780,110 @@ + + 197 + + + + 25 + + + ru + Прио-Внешторгбанк (ПАО) + + + + + + + 25 + + + ru + 044525708 + + + + + + + 31 + + + ru + АсинхронныйОбмен + + + + + + + 25 + + + ru + ПоЛогину + + + + + + + 5 + + + ru + https://adaptive.priovtb.com:1443/direct_bank + + + + + + + 25 + + + ru + 1 + + + + + + + 25 + + + ru + https://priovtb.com/business/online-services-business/1s-direktbank/ + + + + + + + 25 + + + ru + 1 + + + + + + + 25 + + + ru + https://its.1c.ru/db/metod81#content:8705:hdoc + + + + + + 2 @@ -21526,9 +21903,9 @@ 2 true - 39 - 197 - 197 + 25 + 198 + 198 Solid @@ -21597,6 +21974,12 @@ 0 style:FormBackColor + + 0 + 0 + 59 + style:FormBackColor + 0 0 @@ -21619,8 +22002,20 @@ 0 0 - 59 + 89 + Left + Bottom style:FormBackColor + Auto + + + 0 + 0 + 176 + Left + Bottom + style:FormBackColor + Auto 0 @@ -21630,6 +22025,7 @@ 0 24 + 0 234 @@ -21698,7 +22094,6 @@ 0 297 - 24 diff --git a/Конфигурация/Catalogs/НастройкиОбменСБанками/Templates/СписокБанковДополнительный/Ext/Template.xml b/Конфигурация/Catalogs/НастройкиОбменСБанками/Templates/СписокБанковДополнительный/Ext/Template.xml index a726e055c..c7c1f1edb 100644 --- a/Конфигурация/Catalogs/НастройкиОбменСБанками/Templates/СписокБанковДополнительный/Ext/Template.xml +++ b/Конфигурация/Catalogs/НастройкиОбменСБанками/Templates/СписокБанковДополнительный/Ext/Template.xml @@ -10,7 +10,7 @@ - 12 + 16 0 @@ -252,15 +252,148 @@ + + + 18 + + + ru + ВремяЖизниСессии + + + + Comment + 0 + 19 + + + ru + Время жизни авторизованной сессии на стороне банк.сервиса в секундах +Возможные значения: +0 или пусто (пустая ячейка) - нет данных о времени жизни авторизованной сессии. +1 - 300 - время жизни сесссии установленное банком. + + + 1 + -21 + 0 + 177 + 1 + 21 + 12 + 1323 + true + Stretch + + + + + + 20 + + + ru + ПериодЗапросаВыписки + + + + Comment + 0 + 19 + + + ru + Максимальное количество дней, за которые можно загрузить документы при подключении автоматической выписки. Если не указано, будет подставляться 14 дней. + + + 1 + -21 + 0 + 186 + 1 + -684 + 13 + 720 + false + Stretch + + + + + + 21 + + + ru + Интегратор + + + + Comment + 0 + 19 + + + ru + Интегратор - это банк, который позволяет загружать выписки других банков. +Номер интегратора задается произвольно, но должен быть уникальным. + + + 1 + -21 + 0 + 207 + 1 + -177 + 14 + 945 + false + Stretch + + + + + + 22 + + + ru + ДоступныеИнтеграторы + + + + Comment + 0 + 19 + + + ru + Номера банков-интеграторов перечисляются через запятую. Это банки, через которые загружается банковская выписка для текущего БИК. +Номер банка-интегратора указан в колонке "Интегратор" + + + 1 + -21 + 0 + 300 + 1 + 21 + 15 + 741 + false + Stretch + + + 1 - 20 + 23 - 20 + 23 ru @@ -271,7 +404,7 @@ - 20 + 23 ru @@ -282,7 +415,7 @@ - 21 + 24 ru @@ -293,7 +426,7 @@ - 20 + 23 ru @@ -304,24 +437,24 @@ - 20 - - - - - 20 - - - - - - 22 - + 23 23 + + + + + + 25 + + + + + + 26 ru @@ -346,10 +479,10 @@ 2 - 20 + 23 - 20 + 23 ru @@ -360,7 +493,7 @@ - 20 + 23 ru @@ -371,7 +504,7 @@ - 21 + 24 ru @@ -382,7 +515,7 @@ - 20 + 23 ru @@ -393,24 +526,24 @@ - 20 - - - - - 20 - - - - - - 22 - + 23 23 + + + + + + 25 + + + + + + 26 ru @@ -435,10 +568,10 @@ 3 - 20 + 23 - 20 + 23 ru @@ -449,7 +582,7 @@ - 20 + 23 ru @@ -460,7 +593,7 @@ - 21 + 24 ru @@ -471,7 +604,7 @@ - 20 + 23 ru @@ -482,24 +615,24 @@ - 20 - - - - - 20 - - - - - - 22 - + 23 23 + + + + + + 25 + + + + + + 26 ru @@ -524,10 +657,10 @@ 4 - 20 + 23 - 20 + 23 ru @@ -538,7 +671,7 @@ - 20 + 23 ru @@ -549,7 +682,7 @@ - 21 + 24 ru @@ -560,7 +693,7 @@ - 20 + 23 ru @@ -571,24 +704,24 @@ - 20 - - - - - 20 - - - - - - 22 - + 23 23 + + + + + + 25 + + + + + + 26 ru @@ -613,10 +746,10 @@ 5 - 20 + 23 - 20 + 23 ru @@ -627,7 +760,7 @@ - 20 + 23 ru @@ -638,7 +771,7 @@ - 21 + 24 ru @@ -649,7 +782,7 @@ - 20 + 23 ru @@ -660,24 +793,24 @@ - 20 - - - - - 20 - - - - - - 22 - + 23 23 + + + + + + 25 + + + + + + 26 ru @@ -702,10 +835,10 @@ 6 - 20 + 23 - 20 + 23 ru @@ -716,7 +849,7 @@ - 20 + 23 ru @@ -727,7 +860,7 @@ - 21 + 24 ru @@ -738,7 +871,7 @@ - 20 + 23 ru @@ -749,24 +882,24 @@ - 20 - - - - - 20 - - - - - - 22 - + 23 23 + + + + + + 25 + + + + + + 26 ru @@ -791,10 +924,10 @@ 7 - 20 + 23 - 20 + 23 ru @@ -805,7 +938,7 @@ - 20 + 23 ru @@ -816,7 +949,7 @@ - 21 + 24 ru @@ -827,7 +960,7 @@ - 20 + 23 ru @@ -838,24 +971,24 @@ - 20 - - - - - 20 - - - - - - 22 - + 23 23 + + + + + + 25 + + + + + + 26 ru @@ -880,10 +1013,10 @@ 8 - 20 + 23 - 20 + 23 ru @@ -894,7 +1027,7 @@ - 20 + 23 ru @@ -905,7 +1038,7 @@ - 21 + 24 ru @@ -916,7 +1049,7 @@ - 20 + 23 ru @@ -927,24 +1060,24 @@ - 20 - - - - - 20 - - - - - - 22 - + 23 23 + + + + + + 25 + + + + + + 26 ru @@ -969,10 +1102,10 @@ 9 - 20 + 23 - 20 + 23 ru @@ -983,7 +1116,7 @@ - 20 + 23 ru @@ -994,7 +1127,7 @@ - 21 + 24 ru @@ -1005,7 +1138,7 @@ - 20 + 23 ru @@ -1016,24 +1149,24 @@ - 20 - - - - - 20 - - - - - - 22 - + 23 23 + + + + + + 25 + + + + + + 26 ru @@ -1058,10 +1191,10 @@ 10 - 20 + 23 - 20 + 23 ru @@ -1072,7 +1205,7 @@ - 20 + 23 ru @@ -1083,7 +1216,7 @@ - 21 + 24 ru @@ -1094,7 +1227,7 @@ - 20 + 23 ru @@ -1105,24 +1238,24 @@ - 20 - - - - - 20 - - - - - - 22 - + 23 23 + + + + + + 25 + + + + + + 26 ru @@ -1147,10 +1280,10 @@ 11 - 20 + 23 - 20 + 23 ru @@ -1161,7 +1294,7 @@ - 20 + 23 ru @@ -1172,7 +1305,7 @@ - 21 + 24 ru @@ -1183,7 +1316,7 @@ - 20 + 23 ru @@ -1194,24 +1327,24 @@ - 20 - - - - - 20 - - - - - - 22 - + 23 23 + + + + + + 25 + + + + + + 26 ru @@ -1236,10 +1369,10 @@ 12 - 20 + 23 - 20 + 23 ru @@ -1250,7 +1383,7 @@ - 20 + 23 ru @@ -1261,7 +1394,7 @@ - 21 + 24 ru @@ -1272,7 +1405,7 @@ - 20 + 23 ru @@ -1283,24 +1416,24 @@ - 20 - - - - - 20 - - - - - - 22 - + 23 23 + + + + + + 25 + + + + + + 26 ru @@ -1325,10 +1458,10 @@ 13 - 20 + 23 - 20 + 23 ru @@ -1339,7 +1472,7 @@ - 20 + 23 ru @@ -1350,7 +1483,7 @@ - 21 + 24 ru @@ -1361,7 +1494,7 @@ - 20 + 23 ru @@ -1372,24 +1505,24 @@ - 20 - - - - - 20 - - - - - - 22 - + 23 23 + + + + + + 25 + + + + + + 26 ru @@ -1414,10 +1547,10 @@ 14 - 20 + 23 - 20 + 23 ru @@ -1428,7 +1561,7 @@ - 20 + 23 ru @@ -1439,7 +1572,7 @@ - 21 + 24 ru @@ -1450,7 +1583,7 @@ - 20 + 23 ru @@ -1461,24 +1594,24 @@ - 20 - - - - - 20 - - - - - - 22 - + 23 23 + + + + + + 25 + + + + + + 26 ru @@ -1503,10 +1636,10 @@ 15 - 20 + 23 - 20 + 23 ru @@ -1517,7 +1650,7 @@ - 20 + 23 ru @@ -1528,7 +1661,7 @@ - 21 + 24 ru @@ -1539,7 +1672,7 @@ - 20 + 23 ru @@ -1550,24 +1683,24 @@ - 20 - - - - - 20 - - - - - - 22 - + 23 23 + + + + + + 25 + + + + + + 26 ru @@ -1592,10 +1725,10 @@ 16 - 20 + 23 - 20 + 23 ru @@ -1606,7 +1739,7 @@ - 20 + 23 ru @@ -1617,7 +1750,7 @@ - 21 + 24 ru @@ -1628,7 +1761,7 @@ - 20 + 23 ru @@ -1639,24 +1772,24 @@ - 20 - - - - - 20 - - - - - - 22 - + 23 23 + + + + + + 25 + + + + + + 26 ru @@ -1681,10 +1814,10 @@ 17 - 20 + 23 - 20 + 23 ru @@ -1695,7 +1828,7 @@ - 20 + 23 ru @@ -1706,7 +1839,7 @@ - 21 + 24 ru @@ -1717,7 +1850,7 @@ - 20 + 23 ru @@ -1728,24 +1861,24 @@ - 20 - - - - - 20 - - - - - - 22 - + 23 23 + + + + + + 25 + + + + + + 26 ru @@ -1770,10 +1903,10 @@ 18 - 20 + 23 - 20 + 23 ru @@ -1784,7 +1917,7 @@ - 20 + 23 ru @@ -1795,7 +1928,7 @@ - 21 + 24 ru @@ -1806,7 +1939,7 @@ - 20 + 23 ru @@ -1817,24 +1950,24 @@ - 20 - - - - - 20 - - - - - - 22 - + 23 23 + + + + + + 25 + + + + + + 26 ru @@ -1859,10 +1992,10 @@ 19 - 20 + 23 - 20 + 23 ru @@ -1873,7 +2006,7 @@ - 20 + 23 ru @@ -1884,7 +2017,7 @@ - 21 + 24 ru @@ -1895,7 +2028,7 @@ - 20 + 23 ru @@ -1906,19 +2039,19 @@ - 20 + 23 - 20 + 23 - 22 + 25 ru @@ -1929,7 +2062,7 @@ - 23 + 26 ru @@ -1949,10 +2082,10 @@ 20 - 20 + 23 - 20 + 23 ru @@ -1963,7 +2096,7 @@ - 20 + 23 ru @@ -1974,7 +2107,7 @@ - 21 + 24 ru @@ -1985,7 +2118,7 @@ - 20 + 23 ru @@ -1996,19 +2129,19 @@ - 20 + 23 - 20 + 23 - 22 + 25 ru @@ -2019,7 +2152,7 @@ - 23 + 26 ru @@ -2039,10 +2172,10 @@ 21 - 20 + 23 - 20 + 23 ru @@ -2053,7 +2186,7 @@ - 20 + 23 ru @@ -2064,7 +2197,7 @@ - 21 + 24 ru @@ -2075,7 +2208,7 @@ - 20 + 23 ru @@ -2086,19 +2219,19 @@ - 20 + 23 - 20 + 23 - 22 + 25 ru @@ -2109,7 +2242,7 @@ - 23 + 26 ru @@ -2129,10 +2262,10 @@ 22 - 20 + 23 - 20 + 23 ru @@ -2143,7 +2276,7 @@ - 20 + 23 ru @@ -2154,7 +2287,7 @@ - 21 + 24 ru @@ -2165,7 +2298,7 @@ - 20 + 23 ru @@ -2176,19 +2309,19 @@ - 20 + 23 - 20 + 23 - 22 + 25 ru @@ -2199,7 +2332,7 @@ - 23 + 26 ru @@ -2219,10 +2352,10 @@ 23 - 20 + 23 - 20 + 23 ru @@ -2233,7 +2366,7 @@ - 20 + 23 ru @@ -2244,7 +2377,7 @@ - 21 + 24 ru @@ -2255,7 +2388,7 @@ - 20 + 23 ru @@ -2266,19 +2399,19 @@ - 20 + 23 - 20 + 23 - 22 + 25 ru @@ -2289,7 +2422,7 @@ - 23 + 26 ru @@ -2309,10 +2442,10 @@ 24 - 20 + 23 - 20 + 23 ru @@ -2323,7 +2456,7 @@ - 20 + 23 ru @@ -2334,7 +2467,7 @@ - 21 + 24 ru @@ -2345,7 +2478,7 @@ - 20 + 23 ru @@ -2356,19 +2489,19 @@ - 20 + 23 - 20 + 23 - 22 + 25 ru @@ -2379,7 +2512,7 @@ - 23 + 26 ru @@ -2399,10 +2532,10 @@ 25 - 20 + 23 - 20 + 23 ru @@ -2413,7 +2546,7 @@ - 20 + 23 ru @@ -2424,7 +2557,7 @@ - 21 + 24 ru @@ -2435,7 +2568,7 @@ - 20 + 23 ru @@ -2446,19 +2579,19 @@ - 20 + 23 - 20 + 23 - 22 + 25 ru @@ -2469,7 +2602,7 @@ - 23 + 26 ru @@ -2489,10 +2622,10 @@ 26 - 20 + 23 - 20 + 23 ru @@ -2503,7 +2636,7 @@ - 20 + 23 ru @@ -2514,7 +2647,7 @@ - 21 + 24 ru @@ -2525,7 +2658,7 @@ - 20 + 23 ru @@ -2536,19 +2669,19 @@ - 20 + 23 - 20 + 23 - 22 + 25 ru @@ -2559,7 +2692,7 @@ - 23 + 26 ru @@ -2579,10 +2712,10 @@ 27 - 20 + 23 - 20 + 23 ru @@ -2593,7 +2726,7 @@ - 20 + 23 ru @@ -2604,7 +2737,7 @@ - 21 + 24 ru @@ -2615,7 +2748,7 @@ - 20 + 23 ru @@ -2626,19 +2759,19 @@ - 20 + 23 - 20 + 23 - 22 + 25 ru @@ -2649,7 +2782,7 @@ - 23 + 26 ru @@ -2669,10 +2802,10 @@ 28 - 20 + 23 - 20 + 23 ru @@ -2683,7 +2816,7 @@ - 20 + 23 ru @@ -2694,7 +2827,7 @@ - 21 + 24 ru @@ -2705,7 +2838,7 @@ - 20 + 23 ru @@ -2716,19 +2849,19 @@ - 20 + 23 - 20 + 23 - 22 + 25 ru @@ -2739,7 +2872,7 @@ - 23 + 26 ru @@ -2759,7 +2892,7 @@ 29 - 20 + 23 1 @@ -2823,7 +2956,7 @@ 30 - 20 + 23 1 @@ -2887,7 +3020,7 @@ 31 - 20 + 23 1 @@ -2951,7 +3084,7 @@ 32 - 20 + 23 1 @@ -3015,7 +3148,7 @@ 33 - 20 + 23 1 @@ -3079,7 +3212,7 @@ 34 - 20 + 23 1 @@ -3143,7 +3276,7 @@ 35 - 20 + 23 1 @@ -3207,7 +3340,7 @@ 36 - 20 + 23 1 @@ -3271,7 +3404,7 @@ 37 - 20 + 23 1 @@ -3335,7 +3468,7 @@ 38 - 20 + 23 1 @@ -3399,7 +3532,7 @@ 39 - 20 + 23 1 @@ -3463,10 +3596,10 @@ 40 - 20 + 23 - 24 + 27 ru @@ -3527,10 +3660,10 @@ 41 - 20 + 23 - 24 + 27 ru @@ -3591,10 +3724,10 @@ 42 - 20 + 23 - 24 + 27 ru @@ -3655,10 +3788,10 @@ 43 - 20 + 23 - 24 + 27 ru @@ -3719,10 +3852,10 @@ 44 - 20 + 23 - 24 + 27 ru @@ -3783,10 +3916,10 @@ 45 - 20 + 23 - 24 + 27 ru @@ -3847,10 +3980,10 @@ 46 - 20 + 23 - 24 + 27 ru @@ -3911,10 +4044,10 @@ 47 - 20 + 23 - 24 + 27 ru @@ -3978,7 +4111,7 @@ 10 - 24 + 27 ru @@ -3989,7 +4122,7 @@ - 25 + 28 ru @@ -4000,7 +4133,7 @@ - 26 + 29 ru @@ -4011,7 +4144,7 @@ - 27 + 30 ru @@ -4022,7 +4155,7 @@ - 28 + 31 @@ -4053,7 +4186,7 @@ ru - 1,3 + 1,3,4 @@ -4076,7 +4209,7 @@ 10 - 24 + 27 ru @@ -4087,7 +4220,7 @@ - 25 + 28 ru @@ -4098,7 +4231,7 @@ - 26 + 29 ru @@ -4109,7 +4242,7 @@ - 27 + 30 ru @@ -4120,7 +4253,7 @@ - 28 + 31 @@ -4151,7 +4284,7 @@ ru - 1,3 + 1,3,4 @@ -4174,7 +4307,7 @@ 10 - 24 + 27 ru @@ -4185,7 +4318,7 @@ - 25 + 28 ru @@ -4196,7 +4329,7 @@ - 26 + 29 ru @@ -4207,7 +4340,7 @@ - 27 + 30 ru @@ -4218,7 +4351,7 @@ - 28 + 31 @@ -4249,7 +4382,7 @@ ru - 1,3 + 1,3,4 @@ -4272,7 +4405,7 @@ 10 - 24 + 27 ru @@ -4283,7 +4416,7 @@ - 25 + 28 ru @@ -4294,7 +4427,7 @@ - 26 + 29 ru @@ -4305,7 +4438,7 @@ - 27 + 30 ru @@ -4316,7 +4449,7 @@ - 28 + 31 @@ -4347,7 +4480,7 @@ ru - 1,3 + 1,3,4 @@ -4370,7 +4503,7 @@ 10 - 24 + 27 ru @@ -4381,7 +4514,7 @@ - 25 + 28 ru @@ -4392,7 +4525,7 @@ - 26 + 29 ru @@ -4403,7 +4536,7 @@ - 27 + 30 ru @@ -4414,7 +4547,7 @@ - 28 + 31 @@ -4445,7 +4578,7 @@ ru - 1,3 + 1,3,4 @@ -4468,7 +4601,7 @@ 10 - 24 + 27 ru @@ -4479,7 +4612,7 @@ - 25 + 28 ru @@ -4490,7 +4623,7 @@ - 26 + 29 ru @@ -4501,7 +4634,7 @@ - 27 + 30 ru @@ -4512,7 +4645,7 @@ - 28 + 31 @@ -4543,7 +4676,7 @@ ru - 1,3 + 1,3,4 @@ -4566,7 +4699,7 @@ 10 - 24 + 27 ru @@ -4577,7 +4710,7 @@ - 25 + 28 ru @@ -4588,7 +4721,7 @@ - 26 + 29 ru @@ -4599,7 +4732,7 @@ - 27 + 30 ru @@ -4610,7 +4743,7 @@ - 28 + 31 @@ -4641,7 +4774,7 @@ ru - 1,3 + 1,3,4 @@ -4664,7 +4797,7 @@ 10 - 24 + 27 ru @@ -4675,7 +4808,7 @@ - 25 + 28 ru @@ -4686,7 +4819,7 @@ - 26 + 29 ru @@ -4697,7 +4830,7 @@ - 27 + 30 ru @@ -4708,7 +4841,7 @@ - 28 + 31 @@ -4739,7 +4872,7 @@ ru - 1,3 + 1,3,4 @@ -4762,7 +4895,7 @@ 10 - 24 + 27 ru @@ -4773,7 +4906,7 @@ - 25 + 28 ru @@ -4784,7 +4917,7 @@ - 26 + 29 ru @@ -4795,7 +4928,7 @@ - 27 + 30 ru @@ -4806,7 +4939,7 @@ - 28 + 31 @@ -4837,7 +4970,7 @@ ru - 1,3 + 1,3,4 @@ -4873,7 +5006,7 @@ 2 true - 20 + 23 57 57 @@ -4961,6 +5094,30 @@ style:ToolTipTextColor style:ToolTipBackColor + + 0 + 0 + 59 + style:FormBackColor + + + 0 + 0 + 89 + Left + Bottom + style:FormBackColor + Auto + + + 0 + 0 + 176 + Left + Bottom + style:FormBackColor + Auto + 165 diff --git a/Конфигурация/Catalogs/НастройкиОбменСБанками/Templates/СписокБанковРасширенный/Ext/Template.xml b/Конфигурация/Catalogs/НастройкиОбменСБанками/Templates/СписокБанковРасширенный/Ext/Template.xml index 9d31d71ba..bcc6dfdcf 100644 --- a/Конфигурация/Catalogs/НастройкиОбменСБанками/Templates/СписокБанковРасширенный/Ext/Template.xml +++ b/Конфигурация/Catalogs/НастройкиОбменСБанками/Templates/СписокБанковРасширенный/Ext/Template.xml @@ -10,7 +10,7 @@ - 14 + 16 0 @@ -147,12 +147,12 @@ 1 -21 0 - 93 + 750 1 21 3 3438 - true + false Stretch @@ -183,12 +183,12 @@ https://bank1.ru/1c 1 -21 0 - 219 + 918 1 21 4 - 4269 - true + 1641 + false Stretch @@ -217,7 +217,7 @@ https://bank1.ru/1c - 11 + 16 ru @@ -232,28 +232,30 @@ https://bank1.ru/1c ru Если банк добавляется в макет только для информации о возможности обмена, то важно заполнить колонки «Банк,БИК,Проект», остальные можно оставить пустыми. +0 - обмен только через банк-интегратор 1 - руб. п/п и выписка 2 - з/ проекты 3 - валютные платежи и выписка -4 - поддержка автовыписки +4 - поддержка автовыписки +5 - депозиты 1 - -21 + 36 0 - 219 + 600 1 21 7 - 2637 - true + 1359 + false Stretch - 16 + 17 ru @@ -264,7 +266,7 @@ https://bank1.ru/1c - 16 + 17 ru @@ -275,7 +277,7 @@ https://bank1.ru/1c - 17 + 18 ru @@ -311,7 +313,7 @@ https://bank1.ru/1c - 18 + 19 ru @@ -321,7 +323,7 @@ https://bank1.ru/1c Comment 0 - 19 + 20 ru @@ -347,7 +349,7 @@ https://bank1.ru/1c - 18 + 19 ru @@ -357,7 +359,7 @@ https://bank1.ru/1c Comment 0 - 19 + 20 ru @@ -382,7 +384,7 @@ https://bank1.ru/1c - 20 + 16 ru @@ -392,7 +394,7 @@ https://bank1.ru/1c Comment 0 - 19 + 20 ru @@ -402,12 +404,78 @@ https://bank1.ru/1c 1 -21 0 - 51 + 186 1 -684 13 - 2586 - true + 720 + false + Stretch + + + + + + 21 + + + ru + Интегратор + + + + Comment + 0 + 20 + + + ru + Интегратор - это банк, который позволяет загружать выписки других банков. +Номер интегратора задается произвольно, но должен быть уникальным. + + + 1 + -21 + 0 + 207 + 1 + -177 + 14 + 945 + false + Stretch + + + + + + 22 + + + ru + ДоступныеИнтеграторы + + + + Comment + 0 + 20 + + + ru + Номера банков-интеграторов перечисляются через запятую. Это банки, через которые загружается банковская выписка для текущего БИК. +Номер банка-интегратора указан в колонке "Интегратор" + + + 1 + -21 + 0 + 300 + 1 + 21 + 15 + 741 + false Stretch @@ -453,7 +521,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -497,7 +565,7 @@ https://bank1.ru/1c - 22 + 24 ru @@ -522,6 +590,18 @@ https://bank1.ru/1c 10 + + 15 + + 25 + + + ru + 1 + + + + @@ -563,7 +643,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -574,7 +654,7 @@ https://bank1.ru/1c - 23 + 26 ru @@ -632,6 +712,18 @@ https://bank1.ru/1c 10 + + 15 + + 25 + + + ru + 1 + + + + @@ -673,7 +765,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -684,7 +776,7 @@ https://bank1.ru/1c - 23 + 26 ru @@ -742,6 +834,18 @@ https://bank1.ru/1c 10 + + 15 + + 25 + + + ru + 1 + + + + @@ -783,7 +887,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -794,7 +898,7 @@ https://bank1.ru/1c - 23 + 26 ru @@ -852,6 +956,18 @@ https://bank1.ru/1c 10 + + 15 + + 25 + + + ru + 1 + + + + @@ -893,7 +1009,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -904,7 +1020,7 @@ https://bank1.ru/1c - 23 + 26 ru @@ -962,6 +1078,18 @@ https://bank1.ru/1c 10 + + 15 + + 25 + + + ru + 1 + + + + @@ -1003,7 +1131,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -1014,7 +1142,7 @@ https://bank1.ru/1c - 23 + 26 ru @@ -1072,6 +1200,18 @@ https://bank1.ru/1c 10 + + 15 + + 25 + + + ru + 1 + + + + @@ -1113,7 +1253,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -1124,7 +1264,7 @@ https://bank1.ru/1c - 23 + 26 ru @@ -1182,6 +1322,18 @@ https://bank1.ru/1c 10 + + 15 + + 25 + + + ru + 1 + + + + @@ -1223,7 +1375,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -1234,7 +1386,7 @@ https://bank1.ru/1c - 23 + 26 ru @@ -1292,6 +1444,18 @@ https://bank1.ru/1c 10 + + 15 + + 25 + + + ru + 1 + + + + @@ -1304,7 +1468,7 @@ https://bank1.ru/1c ru - СТ-ПЕТЕРБУРГСКИЙ Ф-Л ПАО "ПРОМСВЯЗЬБАНК" + Ст-Петербургский ф-л ПАО "Банк ПСБ" @@ -1337,14 +1501,14 @@ https://bank1.ru/1c ru - ПоСертификату + ПоЛогинуИлиСертификату - 24 + 27 ru @@ -1414,7 +1578,7 @@ https://bank1.ru/1c ru - ПРИВОЛЖСКИЙ Ф-Л ПАО "ПРОМСВЯЗЬБАНК" + Приволжский ф-л ПАО "Банк ПСБ" @@ -1447,14 +1611,14 @@ https://bank1.ru/1c ru - ПоСертификату + ПоЛогинуИлиСертификату - 24 + 27 ru @@ -1524,7 +1688,7 @@ https://bank1.ru/1c ru - СИБИРСКИЙ Ф-Л ПАО "ПРОМСВЯЗЬБАНК" + Сибирский ф-л ПАО "Банк ПСБ" @@ -1553,18 +1717,18 @@ https://bank1.ru/1c - 21 + 4 ru - ПоСертификату + ПоЛогинуИлиСертификату - 24 + 27 ru @@ -1634,7 +1798,7 @@ https://bank1.ru/1c ru - ЯРОСЛАВСКИЙ Ф-Л ПАО "ПРОМСВЯЗЬБАНК" + Ярославский ф-л ПАО "Банк ПСБ" @@ -1663,18 +1827,18 @@ https://bank1.ru/1c - 21 + 4 ru - ПоСертификату + ПоЛогинуИлиСертификату - 24 + 27 ru @@ -1744,7 +1908,7 @@ https://bank1.ru/1c ru - ПАО "ПРОМСВЯЗЬБАНК" + ПАО "Банк ПСБ" @@ -1773,18 +1937,18 @@ https://bank1.ru/1c - 21 + 4 ru - ПоСертификату + ПоЛогинуИлиСертификату - 24 + 27 ru @@ -1854,7 +2018,7 @@ https://bank1.ru/1c ru - ЮЖНЫЙ Ф-Л ПАО "ПРОМСВЯЗЬБАНК" + Южный ф-л ПАО "Банк ПСБ" @@ -1883,18 +2047,18 @@ https://bank1.ru/1c - 21 + 4 ru - ПоСертификату + ПоЛогинуИлиСертификату - 24 + 27 ru @@ -1964,7 +2128,7 @@ https://bank1.ru/1c ru - ДАЛЬНЕВОСТОЧНЫЙ Ф-Л ПАО "ПРОМСВЯЗЬБАНК" + Дальневосточный ф-л ПАО "Банк ПСБ" @@ -1993,18 +2157,18 @@ https://bank1.ru/1c - 21 + 4 ru - ПоСертификату + ПоЛогинуИлиСертификату - 24 + 27 ru @@ -2026,7 +2190,7 @@ https://bank1.ru/1c - 25 + 28 ru @@ -2074,7 +2238,7 @@ https://bank1.ru/1c ru - УРАЛЬСКИЙ Ф-Л ПАО "ПРОМСВЯЗЬБАНК" + УРАЛЬСКИЙ Ф-Л ПАО "БАНК ПСБ" @@ -2103,18 +2267,18 @@ https://bank1.ru/1c - 21 + 4 ru - ПоСертификату + ПоЛогинуИлиСертификату - 24 + 27 ru @@ -2136,7 +2300,7 @@ https://bank1.ru/1c - 25 + 28 ru @@ -2184,7 +2348,7 @@ https://bank1.ru/1c ru - СТАВРОПОЛЬСКИЙ Ф-Л ПАО "ПРОМСВЯЗЬБАНК" + Ставропольский ф-л ПАО "Банк ПСБ" @@ -2213,18 +2377,18 @@ https://bank1.ru/1c - 21 + 4 ru - ПоСертификату + ПоЛогинуИлиСертификату - 24 + 27 ru @@ -2323,7 +2487,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -2361,7 +2525,7 @@ https://bank1.ru/1c - 22 + 24 ru @@ -2380,6 +2544,18 @@ https://bank1.ru/1c 10 + + 15 + + 25 + + + ru + 1 + + + + @@ -2421,11 +2597,11 @@ https://bank1.ru/1c - 21 + 4 ru - ПоСертификату + ПоЛогинуИлиСертификату @@ -2459,7 +2635,7 @@ https://bank1.ru/1c - 22 + 24 ru @@ -2478,6 +2654,18 @@ https://bank1.ru/1c 10 + + 15 + + 25 + + + ru + 1 + + + + @@ -2519,11 +2707,11 @@ https://bank1.ru/1c - 21 + 4 ru - ПоСертификату + ПоЛогинуИлиСертификату @@ -2557,7 +2745,7 @@ https://bank1.ru/1c - 22 + 24 ru @@ -2576,6 +2764,18 @@ https://bank1.ru/1c 10 + + 15 + + 25 + + + ru + 1 + + + + @@ -2617,11 +2817,11 @@ https://bank1.ru/1c - 21 + 4 ru - ПоСертификату + ПоЛогинуИлиСертификату @@ -2655,7 +2855,7 @@ https://bank1.ru/1c - 22 + 24 ru @@ -2674,6 +2874,18 @@ https://bank1.ru/1c 10 + + 15 + + 25 + + + ru + 1 + + + + @@ -2715,11 +2927,11 @@ https://bank1.ru/1c - 21 + 4 ru - ПоСертификату + ПоЛогинуИлиСертификату @@ -2753,7 +2965,7 @@ https://bank1.ru/1c - 22 + 24 ru @@ -2772,6 +2984,18 @@ https://bank1.ru/1c 10 + + 15 + + 25 + + + ru + 1 + + + + @@ -2813,11 +3037,11 @@ https://bank1.ru/1c - 21 + 4 ru - ПоСертификату + ПоЛогинуИлиСертификату @@ -2851,7 +3075,7 @@ https://bank1.ru/1c - 22 + 24 ru @@ -2870,6 +3094,18 @@ https://bank1.ru/1c 10 + + 15 + + 25 + + + ru + 1 + + + + @@ -2878,7 +3114,7 @@ https://bank1.ru/1c 10 - 26 + 29 ru @@ -2889,7 +3125,7 @@ https://bank1.ru/1c - 27 + 30 ru @@ -2900,7 +3136,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -2911,7 +3147,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -2922,7 +3158,7 @@ https://bank1.ru/1c - 29 + 32 ru @@ -2999,7 +3235,7 @@ https://bank1.ru/1c - 27 + 30 ru @@ -3010,7 +3246,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -3021,7 +3257,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -3032,7 +3268,7 @@ https://bank1.ru/1c - 29 + 32 ru @@ -3109,7 +3345,7 @@ https://bank1.ru/1c - 27 + 30 ru @@ -3120,7 +3356,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -3131,7 +3367,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -3142,7 +3378,7 @@ https://bank1.ru/1c - 29 + 32 ru @@ -3219,7 +3455,7 @@ https://bank1.ru/1c - 27 + 30 ru @@ -3230,7 +3466,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -3241,7 +3477,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -3252,7 +3488,7 @@ https://bank1.ru/1c - 29 + 32 ru @@ -3329,7 +3565,7 @@ https://bank1.ru/1c - 27 + 30 ru @@ -3340,7 +3576,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -3351,7 +3587,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -3362,7 +3598,7 @@ https://bank1.ru/1c - 29 + 32 ru @@ -3428,7 +3664,7 @@ https://bank1.ru/1c 10 - 26 + 29 ru @@ -3439,7 +3675,7 @@ https://bank1.ru/1c - 27 + 30 ru @@ -3450,7 +3686,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -3461,7 +3697,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -3472,7 +3708,7 @@ https://bank1.ru/1c - 29 + 32 ru @@ -3538,7 +3774,7 @@ https://bank1.ru/1c 10 - 26 + 29 ru @@ -3549,7 +3785,7 @@ https://bank1.ru/1c - 27 + 30 ru @@ -3560,7 +3796,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -3571,7 +3807,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -3582,7 +3818,7 @@ https://bank1.ru/1c - 29 + 32 ru @@ -3648,7 +3884,7 @@ https://bank1.ru/1c 10 - 26 + 29 ru @@ -3659,7 +3895,7 @@ https://bank1.ru/1c - 27 + 30 ru @@ -3670,7 +3906,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -3681,7 +3917,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -3692,7 +3928,7 @@ https://bank1.ru/1c - 29 + 32 ru @@ -3758,7 +3994,7 @@ https://bank1.ru/1c 10 - 26 + 29 ru @@ -3769,7 +4005,7 @@ https://bank1.ru/1c - 27 + 30 ru @@ -3780,7 +4016,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -3791,7 +4027,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -3802,7 +4038,7 @@ https://bank1.ru/1c - 29 + 32 ru @@ -3868,7 +4104,7 @@ https://bank1.ru/1c 10 - 26 + 29 ru @@ -3879,7 +4115,7 @@ https://bank1.ru/1c - 27 + 30 ru @@ -3890,7 +4126,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -3901,7 +4137,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -3912,7 +4148,7 @@ https://bank1.ru/1c - 29 + 32 ru @@ -3978,7 +4214,7 @@ https://bank1.ru/1c 10 - 26 + 29 ru @@ -3989,7 +4225,7 @@ https://bank1.ru/1c - 27 + 30 ru @@ -4000,7 +4236,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -4011,7 +4247,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -4022,7 +4258,7 @@ https://bank1.ru/1c - 29 + 32 ru @@ -4088,7 +4324,7 @@ https://bank1.ru/1c 10 - 26 + 29 ru @@ -4099,7 +4335,7 @@ https://bank1.ru/1c - 27 + 30 ru @@ -4110,7 +4346,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -4121,7 +4357,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -4132,7 +4368,7 @@ https://bank1.ru/1c - 29 + 32 ru @@ -4198,7 +4434,7 @@ https://bank1.ru/1c 10 - 26 + 29 ru @@ -4209,7 +4445,7 @@ https://bank1.ru/1c - 27 + 30 ru @@ -4220,7 +4456,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -4231,7 +4467,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -4242,7 +4478,7 @@ https://bank1.ru/1c - 29 + 32 ru @@ -4308,7 +4544,7 @@ https://bank1.ru/1c 10 - 26 + 29 ru @@ -4319,7 +4555,7 @@ https://bank1.ru/1c - 27 + 30 ru @@ -4330,7 +4566,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -4341,7 +4577,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -4352,7 +4588,7 @@ https://bank1.ru/1c - 29 + 32 ru @@ -4418,7 +4654,7 @@ https://bank1.ru/1c 10 - 26 + 29 ru @@ -4429,7 +4665,7 @@ https://bank1.ru/1c - 27 + 30 ru @@ -4440,7 +4676,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -4451,7 +4687,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -4462,7 +4698,7 @@ https://bank1.ru/1c - 29 + 32 ru @@ -4528,7 +4764,7 @@ https://bank1.ru/1c 10 - 26 + 29 ru @@ -4539,7 +4775,7 @@ https://bank1.ru/1c - 27 + 30 ru @@ -4550,7 +4786,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -4561,7 +4797,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -4572,7 +4808,7 @@ https://bank1.ru/1c - 29 + 32 ru @@ -4638,7 +4874,7 @@ https://bank1.ru/1c 10 - 26 + 29 ru @@ -4649,7 +4885,7 @@ https://bank1.ru/1c - 27 + 30 ru @@ -4660,7 +4896,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -4671,7 +4907,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -4682,7 +4918,7 @@ https://bank1.ru/1c - 29 + 32 ru @@ -4748,7 +4984,7 @@ https://bank1.ru/1c 10 - 26 + 29 ru @@ -4759,7 +4995,7 @@ https://bank1.ru/1c - 27 + 30 ru @@ -4770,7 +5006,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -4781,7 +5017,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -4792,7 +5028,7 @@ https://bank1.ru/1c - 29 + 32 ru @@ -4858,7 +5094,7 @@ https://bank1.ru/1c 10 - 26 + 29 ru @@ -4869,7 +5105,7 @@ https://bank1.ru/1c - 27 + 30 ru @@ -4880,7 +5116,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -4891,7 +5127,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -4902,7 +5138,7 @@ https://bank1.ru/1c - 29 + 32 ru @@ -4968,7 +5204,7 @@ https://bank1.ru/1c 10 - 26 + 29 ru @@ -4979,7 +5215,7 @@ https://bank1.ru/1c - 27 + 30 ru @@ -4990,7 +5226,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -5001,7 +5237,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -5012,7 +5248,7 @@ https://bank1.ru/1c - 29 + 32 ru @@ -5078,7 +5314,7 @@ https://bank1.ru/1c 10 - 26 + 29 ru @@ -5089,7 +5325,7 @@ https://bank1.ru/1c - 27 + 30 ru @@ -5100,7 +5336,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -5111,7 +5347,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -5122,7 +5358,7 @@ https://bank1.ru/1c - 29 + 32 ru @@ -5188,7 +5424,7 @@ https://bank1.ru/1c 10 - 26 + 29 ru @@ -5199,7 +5435,7 @@ https://bank1.ru/1c - 27 + 30 ru @@ -5210,7 +5446,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -5221,7 +5457,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -5232,7 +5468,7 @@ https://bank1.ru/1c - 29 + 32 ru @@ -5309,7 +5545,7 @@ https://bank1.ru/1c - 27 + 30 ru @@ -5320,7 +5556,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -5331,7 +5567,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -5342,7 +5578,7 @@ https://bank1.ru/1c - 29 + 32 ru @@ -5419,7 +5655,7 @@ https://bank1.ru/1c - 27 + 30 ru @@ -5430,7 +5666,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -5441,7 +5677,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -5452,7 +5688,7 @@ https://bank1.ru/1c - 29 + 32 ru @@ -5529,7 +5765,7 @@ https://bank1.ru/1c - 27 + 30 ru @@ -5540,7 +5776,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -5551,7 +5787,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -5562,7 +5798,7 @@ https://bank1.ru/1c - 29 + 32 ru @@ -5639,7 +5875,7 @@ https://bank1.ru/1c - 27 + 30 ru @@ -5650,7 +5886,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -5661,7 +5897,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -5672,7 +5908,7 @@ https://bank1.ru/1c - 29 + 32 ru @@ -5749,7 +5985,7 @@ https://bank1.ru/1c - 27 + 30 ru @@ -5760,7 +5996,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -5771,7 +6007,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -5782,7 +6018,7 @@ https://bank1.ru/1c - 29 + 32 ru @@ -5859,7 +6095,7 @@ https://bank1.ru/1c - 27 + 30 ru @@ -5870,7 +6106,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -5881,7 +6117,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -5892,7 +6128,7 @@ https://bank1.ru/1c - 29 + 32 ru @@ -5969,7 +6205,7 @@ https://bank1.ru/1c - 27 + 30 ru @@ -5980,7 +6216,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -5991,7 +6227,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -6002,7 +6238,7 @@ https://bank1.ru/1c - 29 + 32 ru @@ -6079,7 +6315,7 @@ https://bank1.ru/1c - 27 + 30 ru @@ -6090,7 +6326,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -6101,7 +6337,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -6112,7 +6348,7 @@ https://bank1.ru/1c - 29 + 32 ru @@ -6189,7 +6425,7 @@ https://bank1.ru/1c - 27 + 30 ru @@ -6200,7 +6436,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -6211,7 +6447,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -6222,7 +6458,7 @@ https://bank1.ru/1c - 29 + 32 ru @@ -6299,7 +6535,7 @@ https://bank1.ru/1c - 27 + 30 ru @@ -6310,7 +6546,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -6321,7 +6557,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -6332,7 +6568,7 @@ https://bank1.ru/1c - 29 + 32 ru @@ -6409,7 +6645,7 @@ https://bank1.ru/1c - 27 + 30 ru @@ -6420,7 +6656,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -6431,7 +6667,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -6442,7 +6678,7 @@ https://bank1.ru/1c - 29 + 32 ru @@ -6519,7 +6755,7 @@ https://bank1.ru/1c - 27 + 30 ru @@ -6530,7 +6766,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -6541,7 +6777,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -6552,7 +6788,7 @@ https://bank1.ru/1c - 29 + 32 ru @@ -6629,7 +6865,7 @@ https://bank1.ru/1c - 27 + 30 ru @@ -6640,7 +6876,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -6651,7 +6887,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -6662,7 +6898,7 @@ https://bank1.ru/1c - 29 + 32 ru @@ -6739,7 +6975,7 @@ https://bank1.ru/1c - 27 + 30 ru @@ -6750,7 +6986,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -6761,7 +6997,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -6772,7 +7008,7 @@ https://bank1.ru/1c - 29 + 32 ru @@ -6849,7 +7085,7 @@ https://bank1.ru/1c - 27 + 30 ru @@ -6860,7 +7096,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -6871,7 +7107,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -6882,7 +7118,7 @@ https://bank1.ru/1c - 29 + 32 ru @@ -6959,7 +7195,7 @@ https://bank1.ru/1c - 27 + 30 ru @@ -6970,7 +7206,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -6981,7 +7217,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -6992,7 +7228,7 @@ https://bank1.ru/1c - 29 + 32 ru @@ -7069,7 +7305,7 @@ https://bank1.ru/1c - 27 + 30 ru @@ -7080,7 +7316,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -7091,7 +7327,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -7102,7 +7338,7 @@ https://bank1.ru/1c - 29 + 32 ru @@ -7179,7 +7415,7 @@ https://bank1.ru/1c - 27 + 30 ru @@ -7190,7 +7426,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -7201,7 +7437,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -7212,7 +7448,7 @@ https://bank1.ru/1c - 29 + 32 ru @@ -7289,7 +7525,7 @@ https://bank1.ru/1c - 27 + 30 ru @@ -7300,7 +7536,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -7311,7 +7547,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -7322,7 +7558,7 @@ https://bank1.ru/1c - 29 + 32 ru @@ -7399,7 +7635,7 @@ https://bank1.ru/1c - 27 + 30 ru @@ -7410,7 +7646,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -7421,7 +7657,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -7432,7 +7668,7 @@ https://bank1.ru/1c - 29 + 32 ru @@ -7509,7 +7745,7 @@ https://bank1.ru/1c - 27 + 30 ru @@ -7520,7 +7756,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -7531,7 +7767,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -7542,7 +7778,7 @@ https://bank1.ru/1c - 29 + 32 ru @@ -7619,7 +7855,7 @@ https://bank1.ru/1c - 27 + 30 ru @@ -7630,7 +7866,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -7641,7 +7877,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -7652,7 +7888,7 @@ https://bank1.ru/1c - 29 + 32 ru @@ -7729,7 +7965,7 @@ https://bank1.ru/1c - 27 + 30 ru @@ -7740,7 +7976,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -7751,7 +7987,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -7762,7 +7998,7 @@ https://bank1.ru/1c - 29 + 32 ru @@ -7839,7 +8075,7 @@ https://bank1.ru/1c - 27 + 30 ru @@ -7850,7 +8086,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -7861,7 +8097,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -7872,7 +8108,7 @@ https://bank1.ru/1c - 29 + 32 ru @@ -7949,7 +8185,7 @@ https://bank1.ru/1c - 27 + 30 ru @@ -7960,7 +8196,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -7971,7 +8207,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -7982,7 +8218,7 @@ https://bank1.ru/1c - 29 + 32 ru @@ -8059,7 +8295,7 @@ https://bank1.ru/1c - 27 + 30 ru @@ -8070,7 +8306,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -8081,7 +8317,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -8092,7 +8328,7 @@ https://bank1.ru/1c - 29 + 32 ru @@ -8169,7 +8405,7 @@ https://bank1.ru/1c - 27 + 30 ru @@ -8180,7 +8416,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -8191,7 +8427,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -8202,7 +8438,7 @@ https://bank1.ru/1c - 29 + 32 ru @@ -8279,7 +8515,7 @@ https://bank1.ru/1c - 27 + 30 ru @@ -8290,7 +8526,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -8301,7 +8537,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -8312,7 +8548,7 @@ https://bank1.ru/1c - 29 + 32 ru @@ -8389,7 +8625,7 @@ https://bank1.ru/1c - 27 + 30 ru @@ -8400,7 +8636,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -8411,7 +8647,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -8422,7 +8658,7 @@ https://bank1.ru/1c - 29 + 32 ru @@ -8499,7 +8735,7 @@ https://bank1.ru/1c - 27 + 30 ru @@ -8510,7 +8746,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -8521,7 +8757,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -8532,7 +8768,7 @@ https://bank1.ru/1c - 29 + 32 ru @@ -8609,7 +8845,7 @@ https://bank1.ru/1c - 27 + 30 ru @@ -8620,7 +8856,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -8631,7 +8867,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -8642,7 +8878,7 @@ https://bank1.ru/1c - 29 + 32 ru @@ -8719,7 +8955,7 @@ https://bank1.ru/1c - 27 + 30 ru @@ -8730,7 +8966,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -8741,7 +8977,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -8752,7 +8988,7 @@ https://bank1.ru/1c - 29 + 32 ru @@ -8829,7 +9065,7 @@ https://bank1.ru/1c - 27 + 30 ru @@ -8840,7 +9076,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -8851,7 +9087,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -8862,7 +9098,7 @@ https://bank1.ru/1c - 29 + 32 ru @@ -8939,7 +9175,7 @@ https://bank1.ru/1c - 27 + 30 ru @@ -8950,7 +9186,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -8961,7 +9197,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -8972,7 +9208,7 @@ https://bank1.ru/1c - 29 + 32 ru @@ -9049,7 +9285,7 @@ https://bank1.ru/1c - 27 + 30 ru @@ -9060,7 +9296,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -9071,7 +9307,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -9082,7 +9318,7 @@ https://bank1.ru/1c - 29 + 32 ru @@ -9159,7 +9395,7 @@ https://bank1.ru/1c - 27 + 30 ru @@ -9170,7 +9406,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -9181,7 +9417,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -9192,7 +9428,7 @@ https://bank1.ru/1c - 29 + 32 ru @@ -9269,7 +9505,7 @@ https://bank1.ru/1c - 27 + 30 ru @@ -9280,7 +9516,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -9291,7 +9527,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -9302,7 +9538,7 @@ https://bank1.ru/1c - 29 + 32 ru @@ -9368,7 +9604,7 @@ https://bank1.ru/1c 2 - 30 + 33 ru @@ -9379,7 +9615,7 @@ https://bank1.ru/1c - 27 + 30 ru @@ -9390,7 +9626,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -9401,7 +9637,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -9412,7 +9648,7 @@ https://bank1.ru/1c - 29 + 32 ru @@ -9434,7 +9670,7 @@ https://bank1.ru/1c - 25 + 28 @@ -9571,7 +9807,7 @@ https://bank1.ru/1c - 31 + 34 ru @@ -9621,7 +9857,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -9742,7 +9978,7 @@ https://bank1.ru/1c - 32 + 35 ru @@ -9841,7 +10077,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -9852,7 +10088,7 @@ https://bank1.ru/1c - 32 + 35 ru @@ -9863,7 +10099,7 @@ https://bank1.ru/1c - 33 + 36 ru @@ -9874,7 +10110,7 @@ https://bank1.ru/1c - 25 + 28 ru @@ -9885,7 +10121,7 @@ https://bank1.ru/1c - 34 + 37 ru @@ -9896,7 +10132,7 @@ https://bank1.ru/1c - 35 + 38 ru @@ -9918,7 +10154,7 @@ https://bank1.ru/1c 2 - 30 + 33 ru @@ -9951,7 +10187,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -9962,7 +10198,7 @@ https://bank1.ru/1c - 32 + 35 ru @@ -9973,7 +10209,7 @@ https://bank1.ru/1c - 33 + 36 ru @@ -9984,7 +10220,7 @@ https://bank1.ru/1c - 25 + 28 ru @@ -9995,7 +10231,7 @@ https://bank1.ru/1c - 34 + 37 ru @@ -10006,7 +10242,7 @@ https://bank1.ru/1c - 35 + 38 ru @@ -10028,7 +10264,7 @@ https://bank1.ru/1c 2 - 30 + 33 ru @@ -10061,7 +10297,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -10072,7 +10308,7 @@ https://bank1.ru/1c - 32 + 35 ru @@ -10083,7 +10319,7 @@ https://bank1.ru/1c - 33 + 36 ru @@ -10094,7 +10330,7 @@ https://bank1.ru/1c - 25 + 28 ru @@ -10105,7 +10341,7 @@ https://bank1.ru/1c - 34 + 37 ru @@ -10116,7 +10352,7 @@ https://bank1.ru/1c - 35 + 38 ru @@ -10138,7 +10374,7 @@ https://bank1.ru/1c 2 - 30 + 33 ru @@ -10171,12 +10407,12 @@ https://bank1.ru/1c - 21 + 23 - 32 + 35 ru @@ -10187,7 +10423,7 @@ https://bank1.ru/1c - 33 + 36 ru @@ -10198,12 +10434,12 @@ https://bank1.ru/1c - 25 + 28 - 34 + 37 ru @@ -10214,7 +10450,7 @@ https://bank1.ru/1c - 35 + 38 ru @@ -10225,7 +10461,7 @@ https://bank1.ru/1c - 31 + 34 ru @@ -10264,7 +10500,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -10275,7 +10511,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -10319,11 +10555,11 @@ https://bank1.ru/1c - 22 + 24 ru - 1,2 + 1,2,4 @@ -10352,7 +10588,7 @@ https://bank1.ru/1c 2 - 30 + 33 ru @@ -10374,7 +10610,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -10385,7 +10621,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -10407,7 +10643,7 @@ https://bank1.ru/1c - 33 + 36 ru @@ -10429,18 +10665,18 @@ https://bank1.ru/1c - 22 + 24 ru - 1,2 + 1,2,4 - 35 + 38 ru @@ -10462,7 +10698,7 @@ https://bank1.ru/1c 2 - 30 + 33 ru @@ -10484,7 +10720,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -10495,7 +10731,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -10517,7 +10753,7 @@ https://bank1.ru/1c - 33 + 36 ru @@ -10539,18 +10775,18 @@ https://bank1.ru/1c - 22 + 24 ru - 1,2 + 1,2,4 - 35 + 38 ru @@ -10572,7 +10808,7 @@ https://bank1.ru/1c 2 - 30 + 33 ru @@ -10594,7 +10830,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -10605,7 +10841,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -10627,7 +10863,7 @@ https://bank1.ru/1c - 33 + 36 ru @@ -10649,18 +10885,18 @@ https://bank1.ru/1c - 22 + 24 ru - 1,2 + 1,2,4 - 35 + 38 ru @@ -10682,7 +10918,7 @@ https://bank1.ru/1c 2 - 30 + 33 ru @@ -10704,7 +10940,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -10715,7 +10951,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -10737,7 +10973,7 @@ https://bank1.ru/1c - 33 + 36 ru @@ -10759,18 +10995,18 @@ https://bank1.ru/1c - 22 + 24 ru - 1,2 + 1,2,4 - 35 + 38 ru @@ -10792,7 +11028,7 @@ https://bank1.ru/1c 2 - 30 + 33 ru @@ -10814,7 +11050,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -10825,7 +11061,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -10847,7 +11083,7 @@ https://bank1.ru/1c - 33 + 36 ru @@ -10869,18 +11105,18 @@ https://bank1.ru/1c - 22 + 24 ru - 1,2 + 1,2,4 - 35 + 38 ru @@ -10924,7 +11160,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -10935,7 +11171,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -10957,7 +11193,7 @@ https://bank1.ru/1c - 33 + 36 ru @@ -10979,18 +11215,18 @@ https://bank1.ru/1c - 22 + 24 ru - 1,2 + 1,2,4 - 35 + 38 ru @@ -11050,7 +11286,7 @@ https://bank1.ru/1c - 32 + 35 ru @@ -11105,7 +11341,7 @@ https://bank1.ru/1c - 31 + 34 ru @@ -11144,7 +11380,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -11155,7 +11391,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -11232,7 +11468,7 @@ https://bank1.ru/1c 2 - 30 + 33 ru @@ -11265,7 +11501,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -11276,7 +11512,7 @@ https://bank1.ru/1c - 32 + 35 ru @@ -11287,7 +11523,7 @@ https://bank1.ru/1c - 33 + 36 ru @@ -11298,7 +11534,7 @@ https://bank1.ru/1c - 25 + 28 ru @@ -11309,7 +11545,7 @@ https://bank1.ru/1c - 34 + 37 ru @@ -11320,7 +11556,7 @@ https://bank1.ru/1c - 35 + 38 ru @@ -11375,7 +11611,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -11386,7 +11622,7 @@ https://bank1.ru/1c - 32 + 35 ru @@ -11485,7 +11721,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -11554,6 +11790,18 @@ https://bank1.ru/1c 10 + + 15 + + 25 + + + ru + 1 + + + + @@ -11595,12 +11843,12 @@ https://bank1.ru/1c - 21 + 23 - 32 + 35 ru @@ -11611,7 +11859,7 @@ https://bank1.ru/1c - 33 + 36 ru @@ -11622,7 +11870,7 @@ https://bank1.ru/1c - 25 + 28 ru @@ -11633,7 +11881,7 @@ https://bank1.ru/1c - 22 + 24 ru @@ -11644,7 +11892,7 @@ https://bank1.ru/1c - 36 + 39 ru @@ -11655,7 +11903,7 @@ https://bank1.ru/1c - 31 + 34 ru @@ -11672,7 +11920,7 @@ https://bank1.ru/1c 2 - 37 + 40 ru @@ -11705,12 +11953,12 @@ https://bank1.ru/1c - 21 + 23 - 32 + 35 ru @@ -11721,7 +11969,7 @@ https://bank1.ru/1c - 33 + 36 ru @@ -11732,7 +11980,7 @@ https://bank1.ru/1c - 25 + 28 ru @@ -11743,7 +11991,7 @@ https://bank1.ru/1c - 22 + 24 ru @@ -11754,7 +12002,7 @@ https://bank1.ru/1c - 36 + 39 ru @@ -11765,7 +12013,7 @@ https://bank1.ru/1c - 31 + 34 ru @@ -11815,7 +12063,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -11859,7 +12107,7 @@ https://bank1.ru/1c - 22 + 24 ru @@ -11925,7 +12173,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -11936,7 +12184,7 @@ https://bank1.ru/1c - 38 + 41 ru @@ -11945,36 +12193,36 @@ https://bank1.ru/1c - - - 33 - - - ru - 1 - - - - - - - 2 - - - - - 2 - - - ru - 1 - - - - 36 + + + ru + 1 + + + + + + + 2 + + + + + 2 + + + ru + 1 + + + + + + + 39 @@ -12023,7 +12271,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -12034,7 +12282,7 @@ https://bank1.ru/1c - 38 + 41 ru @@ -12045,7 +12293,7 @@ https://bank1.ru/1c - 33 + 36 ru @@ -12067,7 +12315,7 @@ https://bank1.ru/1c - 22 + 24 ru @@ -12133,7 +12381,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -12144,7 +12392,7 @@ https://bank1.ru/1c - 38 + 41 ru @@ -12155,7 +12403,7 @@ https://bank1.ru/1c - 33 + 36 ru @@ -12177,7 +12425,7 @@ https://bank1.ru/1c - 22 + 24 ru @@ -12243,7 +12491,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -12254,7 +12502,7 @@ https://bank1.ru/1c - 38 + 41 ru @@ -12265,7 +12513,7 @@ https://bank1.ru/1c - 33 + 36 ru @@ -12287,7 +12535,7 @@ https://bank1.ru/1c - 22 + 24 ru @@ -12353,7 +12601,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -12364,7 +12612,7 @@ https://bank1.ru/1c - 38 + 41 ru @@ -12375,7 +12623,7 @@ https://bank1.ru/1c - 33 + 36 ru @@ -12397,7 +12645,7 @@ https://bank1.ru/1c - 22 + 24 ru @@ -12463,7 +12711,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -12474,7 +12722,7 @@ https://bank1.ru/1c - 38 + 41 ru @@ -12485,7 +12733,7 @@ https://bank1.ru/1c - 33 + 36 ru @@ -12507,7 +12755,7 @@ https://bank1.ru/1c - 22 + 24 ru @@ -12573,7 +12821,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -12584,7 +12832,7 @@ https://bank1.ru/1c - 38 + 41 ru @@ -12595,7 +12843,7 @@ https://bank1.ru/1c - 33 + 36 ru @@ -12617,7 +12865,7 @@ https://bank1.ru/1c - 22 + 24 ru @@ -12683,7 +12931,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -12694,7 +12942,7 @@ https://bank1.ru/1c - 38 + 41 ru @@ -12705,7 +12953,7 @@ https://bank1.ru/1c - 33 + 36 ru @@ -12793,7 +13041,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -12804,7 +13052,7 @@ https://bank1.ru/1c - 38 + 41 ru @@ -12815,7 +13063,7 @@ https://bank1.ru/1c - 33 + 36 ru @@ -12903,7 +13151,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -12914,7 +13162,7 @@ https://bank1.ru/1c - 38 + 41 ru @@ -12925,7 +13173,7 @@ https://bank1.ru/1c - 33 + 36 ru @@ -13013,7 +13261,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -13024,7 +13272,7 @@ https://bank1.ru/1c - 38 + 41 ru @@ -13035,7 +13283,7 @@ https://bank1.ru/1c - 33 + 36 ru @@ -13123,7 +13371,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -13134,7 +13382,7 @@ https://bank1.ru/1c - 38 + 41 ru @@ -13145,7 +13393,7 @@ https://bank1.ru/1c - 33 + 36 ru @@ -13233,7 +13481,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -13302,6 +13550,18 @@ https://bank1.ru/1c 10 + + 15 + + 25 + + + ru + 1 + + + + @@ -13343,7 +13603,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -13417,7 +13677,7 @@ https://bank1.ru/1c 120 - 39 + 25 1 @@ -13453,7 +13713,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -13497,7 +13757,7 @@ https://bank1.ru/1c - 40 + 42 ru @@ -13519,7 +13779,7 @@ https://bank1.ru/1c - 39 + 25 @@ -13527,7 +13787,7 @@ https://bank1.ru/1c 121 - 39 + 25 1 @@ -13563,7 +13823,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -13607,7 +13867,7 @@ https://bank1.ru/1c - 40 + 42 ru @@ -13629,7 +13889,7 @@ https://bank1.ru/1c - 39 + 25 @@ -13637,7 +13897,7 @@ https://bank1.ru/1c 122 - 39 + 25 1 @@ -13673,7 +13933,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -13717,7 +13977,7 @@ https://bank1.ru/1c - 40 + 42 ru @@ -13739,7 +13999,7 @@ https://bank1.ru/1c - 39 + 25 @@ -13747,7 +14007,7 @@ https://bank1.ru/1c 123 - 39 + 25 1 @@ -13783,7 +14043,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -13827,7 +14087,7 @@ https://bank1.ru/1c - 40 + 42 ru @@ -13849,7 +14109,7 @@ https://bank1.ru/1c - 39 + 25 @@ -13857,7 +14117,7 @@ https://bank1.ru/1c 124 - 39 + 25 1 @@ -13893,7 +14153,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -13937,7 +14197,7 @@ https://bank1.ru/1c - 40 + 42 ru @@ -13959,7 +14219,7 @@ https://bank1.ru/1c - 39 + 25 @@ -13967,10 +14227,10 @@ https://bank1.ru/1c 125 - 39 + 25 - 41 + 43 ru @@ -13981,7 +14241,7 @@ https://bank1.ru/1c - 42 + 44 ru @@ -13992,7 +14252,7 @@ https://bank1.ru/1c - 43 + 45 ru @@ -14003,7 +14263,7 @@ https://bank1.ru/1c - 44 + 46 ru @@ -14014,7 +14274,7 @@ https://bank1.ru/1c - 45 + 47 ru @@ -14047,7 +14307,7 @@ https://bank1.ru/1c - 40 + 42 ru @@ -14069,12 +14329,12 @@ https://bank1.ru/1c - 39 + 25 - 39 + 25 ru @@ -14088,10 +14348,10 @@ https://bank1.ru/1c 126 - 39 + 25 - 41 + 43 ru @@ -14102,7 +14362,7 @@ https://bank1.ru/1c - 42 + 44 ru @@ -14113,7 +14373,7 @@ https://bank1.ru/1c - 43 + 45 ru @@ -14124,7 +14384,7 @@ https://bank1.ru/1c - 44 + 46 ru @@ -14135,7 +14395,7 @@ https://bank1.ru/1c - 45 + 47 ru @@ -14168,7 +14428,7 @@ https://bank1.ru/1c - 40 + 42 ru @@ -14190,7 +14450,7 @@ https://bank1.ru/1c - 39 + 25 @@ -14201,7 +14461,7 @@ https://bank1.ru/1c 2 - 46 + 48 ru @@ -14234,7 +14494,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -14245,7 +14505,7 @@ https://bank1.ru/1c - 23 + 26 ru @@ -14256,7 +14516,7 @@ https://bank1.ru/1c - 33 + 36 ru @@ -14267,7 +14527,7 @@ https://bank1.ru/1c - 25 + 28 ru @@ -14278,7 +14538,7 @@ https://bank1.ru/1c - 22 + 24 ru @@ -14303,6 +14563,18 @@ https://bank1.ru/1c 2 + + 14 + + 25 + + + ru + 1 + + + + @@ -14311,7 +14583,7 @@ https://bank1.ru/1c 2 - 46 + 48 ru @@ -14344,7 +14616,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -14355,7 +14627,7 @@ https://bank1.ru/1c - 23 + 26 ru @@ -14366,7 +14638,7 @@ https://bank1.ru/1c - 33 + 36 ru @@ -14377,7 +14649,7 @@ https://bank1.ru/1c - 25 + 28 ru @@ -14388,7 +14660,7 @@ https://bank1.ru/1c - 22 + 24 ru @@ -14418,10 +14690,10 @@ https://bank1.ru/1c 129 - 39 + 25 - 39 + 25 ru @@ -14432,7 +14704,7 @@ https://bank1.ru/1c - 39 + 25 ru @@ -14443,7 +14715,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -14454,7 +14726,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -14523,10 +14795,10 @@ https://bank1.ru/1c 130 - 39 + 25 - 39 + 25 ru @@ -14537,7 +14809,7 @@ https://bank1.ru/1c - 39 + 25 ru @@ -14548,7 +14820,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -14559,7 +14831,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -14628,10 +14900,10 @@ https://bank1.ru/1c 131 - 39 + 25 - 39 + 25 ru @@ -14642,7 +14914,7 @@ https://bank1.ru/1c - 39 + 25 ru @@ -14653,7 +14925,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -14664,7 +14936,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -14733,10 +15005,10 @@ https://bank1.ru/1c 132 - 39 + 25 - 39 + 25 ru @@ -14747,7 +15019,7 @@ https://bank1.ru/1c - 39 + 25 ru @@ -14758,7 +15030,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -14769,7 +15041,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -14838,10 +15110,10 @@ https://bank1.ru/1c 133 - 39 + 25 - 39 + 25 ru @@ -14852,7 +15124,7 @@ https://bank1.ru/1c - 39 + 25 ru @@ -14863,7 +15135,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -14874,7 +15146,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -14943,10 +15215,10 @@ https://bank1.ru/1c 134 - 39 + 25 - 39 + 25 ru @@ -14957,7 +15229,7 @@ https://bank1.ru/1c - 39 + 25 ru @@ -14968,7 +15240,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -14979,7 +15251,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -15048,10 +15320,10 @@ https://bank1.ru/1c 135 - 39 + 25 - 39 + 25 ru @@ -15062,7 +15334,7 @@ https://bank1.ru/1c - 39 + 25 ru @@ -15073,7 +15345,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -15084,7 +15356,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -15153,10 +15425,10 @@ https://bank1.ru/1c 136 - 39 + 25 - 39 + 25 ru @@ -15167,7 +15439,7 @@ https://bank1.ru/1c - 39 + 25 ru @@ -15178,7 +15450,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -15189,7 +15461,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -15258,10 +15530,10 @@ https://bank1.ru/1c 137 - 39 + 25 - 39 + 25 ru @@ -15272,7 +15544,7 @@ https://bank1.ru/1c - 39 + 25 ru @@ -15283,7 +15555,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -15294,7 +15566,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -15363,10 +15635,10 @@ https://bank1.ru/1c 138 - 39 + 25 - 39 + 25 ru @@ -15377,7 +15649,7 @@ https://bank1.ru/1c - 39 + 25 ru @@ -15388,7 +15660,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -15399,7 +15671,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -15468,10 +15740,10 @@ https://bank1.ru/1c 139 - 39 + 25 - 39 + 25 ru @@ -15482,7 +15754,7 @@ https://bank1.ru/1c - 39 + 25 ru @@ -15493,7 +15765,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -15504,7 +15776,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -15573,10 +15845,10 @@ https://bank1.ru/1c 140 - 39 + 25 - 39 + 25 ru @@ -15587,7 +15859,7 @@ https://bank1.ru/1c - 39 + 25 ru @@ -15598,7 +15870,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -15609,7 +15881,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -15678,10 +15950,10 @@ https://bank1.ru/1c 141 - 39 + 25 - 39 + 25 ru @@ -15692,7 +15964,7 @@ https://bank1.ru/1c - 39 + 25 ru @@ -15703,7 +15975,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -15714,7 +15986,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -15783,10 +16055,10 @@ https://bank1.ru/1c 142 - 39 + 25 - 39 + 25 ru @@ -15797,7 +16069,7 @@ https://bank1.ru/1c - 39 + 25 ru @@ -15808,7 +16080,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -15819,7 +16091,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -15888,10 +16160,10 @@ https://bank1.ru/1c 143 - 39 + 25 - 39 + 25 ru @@ -15902,7 +16174,7 @@ https://bank1.ru/1c - 39 + 25 ru @@ -15913,7 +16185,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -15924,7 +16196,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -15993,10 +16265,10 @@ https://bank1.ru/1c 144 - 39 + 25 - 39 + 25 ru @@ -16007,7 +16279,7 @@ https://bank1.ru/1c - 39 + 25 ru @@ -16018,7 +16290,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -16029,7 +16301,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -16098,10 +16370,10 @@ https://bank1.ru/1c 145 - 39 + 25 - 39 + 25 ru @@ -16112,7 +16384,7 @@ https://bank1.ru/1c - 39 + 25 ru @@ -16123,7 +16395,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -16134,7 +16406,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -16203,10 +16475,10 @@ https://bank1.ru/1c 146 - 39 + 25 - 39 + 25 ru @@ -16217,7 +16489,7 @@ https://bank1.ru/1c - 39 + 25 ru @@ -16228,7 +16500,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -16239,7 +16511,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -16308,10 +16580,10 @@ https://bank1.ru/1c 147 - 39 + 25 - 39 + 25 ru @@ -16322,7 +16594,7 @@ https://bank1.ru/1c - 39 + 25 ru @@ -16333,7 +16605,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -16344,7 +16616,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -16413,10 +16685,10 @@ https://bank1.ru/1c 148 - 39 + 25 - 39 + 25 ru @@ -16427,7 +16699,7 @@ https://bank1.ru/1c - 39 + 25 ru @@ -16438,7 +16710,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -16449,7 +16721,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -16518,10 +16790,10 @@ https://bank1.ru/1c 149 - 39 + 25 - 39 + 25 ru @@ -16532,7 +16804,7 @@ https://bank1.ru/1c - 39 + 25 ru @@ -16543,7 +16815,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -16554,7 +16826,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -16623,10 +16895,10 @@ https://bank1.ru/1c 150 - 39 + 25 - 39 + 25 ru @@ -16637,7 +16909,7 @@ https://bank1.ru/1c - 39 + 25 ru @@ -16648,7 +16920,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -16659,7 +16931,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -16728,10 +17000,10 @@ https://bank1.ru/1c 151 - 39 + 25 - 39 + 25 ru @@ -16742,7 +17014,7 @@ https://bank1.ru/1c - 39 + 25 ru @@ -16753,7 +17025,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -16764,7 +17036,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -16833,10 +17105,10 @@ https://bank1.ru/1c 152 - 39 + 25 - 39 + 25 ru @@ -16847,7 +17119,7 @@ https://bank1.ru/1c - 39 + 25 ru @@ -16858,7 +17130,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -16869,7 +17141,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -16938,10 +17210,10 @@ https://bank1.ru/1c 153 - 39 + 25 - 39 + 25 ru @@ -16952,7 +17224,7 @@ https://bank1.ru/1c - 39 + 25 ru @@ -16963,7 +17235,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -16974,7 +17246,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -17043,10 +17315,10 @@ https://bank1.ru/1c 154 - 39 + 25 - 39 + 25 ru @@ -17057,7 +17329,7 @@ https://bank1.ru/1c - 39 + 25 ru @@ -17068,7 +17340,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -17079,7 +17351,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -17148,10 +17420,10 @@ https://bank1.ru/1c 155 - 39 + 25 - 39 + 25 ru @@ -17162,7 +17434,7 @@ https://bank1.ru/1c - 39 + 25 ru @@ -17173,7 +17445,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -17184,7 +17456,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -17253,10 +17525,10 @@ https://bank1.ru/1c 156 - 39 + 25 - 39 + 25 ru @@ -17267,7 +17539,7 @@ https://bank1.ru/1c - 39 + 25 ru @@ -17278,7 +17550,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -17289,7 +17561,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -17358,10 +17630,10 @@ https://bank1.ru/1c 157 - 39 + 25 - 39 + 25 ru @@ -17372,7 +17644,7 @@ https://bank1.ru/1c - 39 + 25 ru @@ -17383,7 +17655,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -17394,7 +17666,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -17463,10 +17735,10 @@ https://bank1.ru/1c 158 - 39 + 25 - 39 + 25 ru @@ -17477,7 +17749,7 @@ https://bank1.ru/1c - 39 + 25 ru @@ -17488,7 +17760,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -17499,7 +17771,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -17568,10 +17840,10 @@ https://bank1.ru/1c 159 - 39 + 25 - 39 + 25 ru @@ -17582,7 +17854,7 @@ https://bank1.ru/1c - 39 + 25 ru @@ -17593,7 +17865,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -17604,7 +17876,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -17673,10 +17945,10 @@ https://bank1.ru/1c 160 - 39 + 25 - 39 + 25 ru @@ -17687,7 +17959,7 @@ https://bank1.ru/1c - 39 + 25 ru @@ -17698,7 +17970,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -17709,7 +17981,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -17778,10 +18050,10 @@ https://bank1.ru/1c 161 - 39 + 25 - 39 + 25 ru @@ -17792,7 +18064,7 @@ https://bank1.ru/1c - 39 + 25 ru @@ -17803,7 +18075,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -17814,7 +18086,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -17883,10 +18155,10 @@ https://bank1.ru/1c 162 - 39 + 25 - 39 + 25 ru @@ -17897,7 +18169,7 @@ https://bank1.ru/1c - 39 + 25 ru @@ -17908,7 +18180,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -17919,7 +18191,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -17988,10 +18260,10 @@ https://bank1.ru/1c 163 - 39 + 25 - 39 + 25 ru @@ -18002,7 +18274,7 @@ https://bank1.ru/1c - 39 + 25 ru @@ -18013,7 +18285,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -18024,7 +18296,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -18093,10 +18365,10 @@ https://bank1.ru/1c 164 - 39 + 25 - 39 + 25 ru @@ -18107,7 +18379,7 @@ https://bank1.ru/1c - 39 + 25 ru @@ -18118,7 +18390,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -18129,7 +18401,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -18198,10 +18470,10 @@ https://bank1.ru/1c 165 - 39 + 25 - 39 + 25 ru @@ -18212,7 +18484,7 @@ https://bank1.ru/1c - 39 + 25 ru @@ -18223,7 +18495,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -18234,7 +18506,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -18303,10 +18575,10 @@ https://bank1.ru/1c 166 - 39 + 25 - 39 + 25 ru @@ -18317,7 +18589,7 @@ https://bank1.ru/1c - 39 + 25 ru @@ -18328,7 +18600,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -18339,7 +18611,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -18408,10 +18680,10 @@ https://bank1.ru/1c 167 - 39 + 25 - 39 + 25 ru @@ -18422,7 +18694,7 @@ https://bank1.ru/1c - 39 + 25 ru @@ -18433,7 +18705,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -18444,7 +18716,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -18513,10 +18785,10 @@ https://bank1.ru/1c 168 - 39 + 25 - 39 + 25 ru @@ -18527,7 +18799,7 @@ https://bank1.ru/1c - 39 + 25 ru @@ -18538,7 +18810,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -18549,7 +18821,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -18618,10 +18890,10 @@ https://bank1.ru/1c 169 - 39 + 25 - 39 + 25 ru @@ -18632,7 +18904,7 @@ https://bank1.ru/1c - 39 + 25 ru @@ -18643,7 +18915,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -18654,7 +18926,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -18723,10 +18995,10 @@ https://bank1.ru/1c 170 - 39 + 25 - 39 + 25 ru @@ -18737,7 +19009,7 @@ https://bank1.ru/1c - 39 + 25 ru @@ -18748,7 +19020,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -18759,7 +19031,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -18828,10 +19100,10 @@ https://bank1.ru/1c 171 - 39 + 25 - 39 + 25 ru @@ -18842,7 +19114,7 @@ https://bank1.ru/1c - 39 + 25 ru @@ -18853,7 +19125,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -18864,7 +19136,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -18933,10 +19205,10 @@ https://bank1.ru/1c 172 - 39 + 25 - 39 + 25 ru @@ -18947,7 +19219,7 @@ https://bank1.ru/1c - 39 + 25 ru @@ -18958,7 +19230,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -18969,7 +19241,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -19038,10 +19310,10 @@ https://bank1.ru/1c 173 - 39 + 25 - 39 + 25 ru @@ -19052,7 +19324,7 @@ https://bank1.ru/1c - 39 + 25 ru @@ -19063,7 +19335,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -19074,7 +19346,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -19143,10 +19415,10 @@ https://bank1.ru/1c 174 - 39 + 25 - 39 + 25 ru @@ -19157,7 +19429,7 @@ https://bank1.ru/1c - 39 + 25 ru @@ -19168,7 +19440,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -19179,7 +19451,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -19248,10 +19520,10 @@ https://bank1.ru/1c 175 - 39 + 25 - 39 + 25 ru @@ -19262,7 +19534,7 @@ https://bank1.ru/1c - 39 + 25 ru @@ -19273,7 +19545,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -19284,7 +19556,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -19353,10 +19625,10 @@ https://bank1.ru/1c 176 - 39 + 25 - 39 + 25 ru @@ -19367,7 +19639,7 @@ https://bank1.ru/1c - 39 + 25 ru @@ -19378,7 +19650,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -19389,7 +19661,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -19458,10 +19730,10 @@ https://bank1.ru/1c 177 - 39 + 25 - 39 + 25 ru @@ -19472,7 +19744,7 @@ https://bank1.ru/1c - 39 + 25 ru @@ -19483,7 +19755,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -19494,7 +19766,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -19563,10 +19835,10 @@ https://bank1.ru/1c 178 - 39 + 25 - 39 + 25 ru @@ -19577,7 +19849,7 @@ https://bank1.ru/1c - 39 + 25 ru @@ -19588,7 +19860,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -19599,7 +19871,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -19668,10 +19940,10 @@ https://bank1.ru/1c 179 - 39 + 25 - 39 + 25 ru @@ -19682,7 +19954,7 @@ https://bank1.ru/1c - 39 + 25 ru @@ -19693,7 +19965,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -19704,7 +19976,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -19773,10 +20045,10 @@ https://bank1.ru/1c 180 - 39 + 25 - 39 + 25 ru @@ -19787,7 +20059,7 @@ https://bank1.ru/1c - 39 + 25 ru @@ -19798,7 +20070,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -19809,7 +20081,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -19878,10 +20150,10 @@ https://bank1.ru/1c 181 - 39 + 25 - 39 + 25 ru @@ -19892,7 +20164,7 @@ https://bank1.ru/1c - 39 + 25 ru @@ -19903,7 +20175,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -19914,7 +20186,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -19983,10 +20255,10 @@ https://bank1.ru/1c 182 - 39 + 25 - 39 + 25 ru @@ -19997,7 +20269,7 @@ https://bank1.ru/1c - 39 + 25 ru @@ -20008,7 +20280,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -20019,7 +20291,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -20088,10 +20360,10 @@ https://bank1.ru/1c 183 - 39 + 25 - 39 + 25 ru @@ -20102,7 +20374,7 @@ https://bank1.ru/1c - 39 + 25 ru @@ -20113,7 +20385,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -20124,7 +20396,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -20193,10 +20465,10 @@ https://bank1.ru/1c 184 - 39 + 25 - 39 + 25 ru @@ -20207,7 +20479,7 @@ https://bank1.ru/1c - 39 + 25 ru @@ -20218,7 +20490,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -20229,7 +20501,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -20298,10 +20570,10 @@ https://bank1.ru/1c 185 - 39 + 25 - 39 + 25 ru @@ -20312,7 +20584,7 @@ https://bank1.ru/1c - 39 + 25 ru @@ -20323,7 +20595,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -20334,7 +20606,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -20403,10 +20675,10 @@ https://bank1.ru/1c 186 - 39 + 25 - 39 + 25 ru @@ -20417,7 +20689,7 @@ https://bank1.ru/1c - 39 + 25 ru @@ -20428,7 +20700,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -20439,7 +20711,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -20508,10 +20780,10 @@ https://bank1.ru/1c 187 - 39 + 25 - 39 + 25 ru @@ -20522,7 +20794,7 @@ https://bank1.ru/1c - 39 + 25 ru @@ -20533,7 +20805,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -20544,7 +20816,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -20613,10 +20885,10 @@ https://bank1.ru/1c 188 - 39 + 25 - 39 + 25 ru @@ -20627,7 +20899,7 @@ https://bank1.ru/1c - 39 + 25 ru @@ -20638,7 +20910,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -20649,7 +20921,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -20718,10 +20990,10 @@ https://bank1.ru/1c 189 - 39 + 25 - 39 + 25 ru @@ -20732,7 +21004,7 @@ https://bank1.ru/1c - 39 + 25 ru @@ -20743,7 +21015,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -20754,7 +21026,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -20823,10 +21095,10 @@ https://bank1.ru/1c 190 - 39 + 25 - 39 + 25 ru @@ -20837,7 +21109,7 @@ https://bank1.ru/1c - 39 + 25 ru @@ -20848,7 +21120,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -20859,7 +21131,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -20928,10 +21200,10 @@ https://bank1.ru/1c 191 - 39 + 25 - 39 + 25 ru @@ -20942,7 +21214,7 @@ https://bank1.ru/1c - 39 + 25 ru @@ -20953,7 +21225,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -20964,7 +21236,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -21033,10 +21305,10 @@ https://bank1.ru/1c 192 - 39 + 25 - 39 + 25 ru @@ -21047,7 +21319,7 @@ https://bank1.ru/1c - 39 + 25 ru @@ -21058,7 +21330,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -21069,7 +21341,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -21138,10 +21410,10 @@ https://bank1.ru/1c 193 - 39 + 25 - 39 + 25 ru @@ -21152,7 +21424,7 @@ https://bank1.ru/1c - 39 + 25 ru @@ -21163,7 +21435,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -21174,7 +21446,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -21243,10 +21515,10 @@ https://bank1.ru/1c 194 - 39 + 25 - 39 + 25 ru @@ -21257,7 +21529,7 @@ https://bank1.ru/1c - 39 + 25 ru @@ -21268,7 +21540,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -21279,7 +21551,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -21348,10 +21620,10 @@ https://bank1.ru/1c 195 - 39 + 25 - 39 + 25 ru @@ -21362,7 +21634,7 @@ https://bank1.ru/1c - 39 + 25 ru @@ -21373,7 +21645,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -21384,7 +21656,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -21395,7 +21667,7 @@ https://bank1.ru/1c - 39 + 25 ru @@ -21406,7 +21678,7 @@ https://bank1.ru/1c - 39 + 25 ru @@ -21417,7 +21689,7 @@ https://bank1.ru/1c - 39 + 25 ru @@ -21428,7 +21700,7 @@ https://bank1.ru/1c - 39 + 25 ru @@ -21439,7 +21711,7 @@ https://bank1.ru/1c - 39 + 25 ru @@ -21453,10 +21725,10 @@ https://bank1.ru/1c 196 - 39 + 25 - 39 + 25 ru @@ -21467,7 +21739,7 @@ https://bank1.ru/1c - 39 + 25 ru @@ -21478,7 +21750,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -21489,7 +21761,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -21511,7 +21783,7 @@ https://bank1.ru/1c - 39 + 25 ru @@ -21533,7 +21805,7 @@ https://bank1.ru/1c - 39 + 25 ru @@ -21544,7 +21816,7 @@ https://bank1.ru/1c - 39 + 25 ru @@ -21558,10 +21830,113 @@ https://bank1.ru/1c 197 - 39 - 39 + 25 + + + ru + Прио-Внешторгбанк (ПАО) + + + + + + + 25 + + + ru + 044525708 + + + + + + + 31 + + + ru + АсинхронныйОбмен + + + + + + + 25 + + + ru + ПоЛогину + + + + + + + 5 + + + ru + https://adaptive.priovtb.com:1443/direct_bank + + + + + + + 25 + + + ru + 1 + + + + + + + 25 + + + ru + https://priovtb.com/business/online-services-business/1s-direktbank/ + + + + + + + 25 + + + ru + 1 + + + + + + + 25 + + + ru + https://its.1c.ru/db/metod81#content:8705:hdoc + + + + + + + + 198 + + + + 25 ru @@ -21572,7 +21947,7 @@ https://bank1.ru/1c - 39 + 25 ru @@ -21583,7 +21958,7 @@ https://bank1.ru/1c - 47 + 49 ru @@ -21594,7 +21969,7 @@ https://bank1.ru/1c - 39 + 25 ru @@ -21605,12 +21980,12 @@ https://bank1.ru/1c - 39 + 25 - 39 + 25 ru @@ -21621,7 +21996,7 @@ https://bank1.ru/1c - 25 + 28 ru @@ -21632,101 +22007,7 @@ https://bank1.ru/1c - 48 - - - ru - 1,3,4 - - - - - - - 2 - - - - - - - 198 - - 39 - - - 39 - - - ru - Росбанк филиал Дальний Восток АО "ТБанк" - - - - - - - 39 - - - ru - 040507868 - - - - - - - 47 - - - ru - АсинхронныйОбмен - - - - - - - 39 - - - ru - ПоСертификату - - - - - - - 39 - - - - - 39 - - - ru - 1 - - - - - - - 25 - - - ru - https://www.rosbank.ru/srednemu-i-krupnomu-biznesu/host2host/ - - - - - - - 48 + 50 ru @@ -21746,63 +22027,13 @@ https://bank1.ru/1c 199 - 39 - 39 + 25 ru - Росбанк филиал Сибирь АО "ТБанк" - - - - - - - 39 - - - ru - 040407577 - - - - - - - 47 - - - ru - АсинхронныйОбмен - - - - - - - 39 - - - ru - ПоСертификату - - - - - - - 39 - - - - - 39 - - - ru - 1 + Росбанк филиал Дальний Восток АО "ТБанк" @@ -21810,6 +22041,55 @@ https://bank1.ru/1c 25 + + + ru + 040507868 + + + + + + + 49 + + + ru + АсинхронныйОбмен + + + + + + + 25 + + + ru + ПоСертификату + + + + + + + 25 + + + + + 25 + + + ru + 1 + + + + + + + 28 ru @@ -21820,7 +22100,7 @@ https://bank1.ru/1c - 48 + 50 ru @@ -21840,63 +22120,13 @@ https://bank1.ru/1c 200 - 39 - 39 + 25 ru - Росбанк филиал Урал АО "ТБанк" - - - - - - - 39 - - - ru - 046577512 - - - - - - - 47 - - - ru - АсинхронныйОбмен - - - - - - - 39 - - - ru - ПоСертификату - - - - - - - 39 - - - - - 39 - - - ru - 1 + Росбанк филиал Сибирь АО "ТБанк" @@ -21904,6 +22134,55 @@ https://bank1.ru/1c 25 + + + ru + 040407577 + + + + + + + 49 + + + ru + АсинхронныйОбмен + + + + + + + 25 + + + ru + ПоСертификату + + + + + + + 25 + + + + + 25 + + + ru + 1 + + + + + + + 28 ru @@ -21914,7 +22193,7 @@ https://bank1.ru/1c - 48 + 50 ru @@ -21934,63 +22213,13 @@ https://bank1.ru/1c 201 - 39 - 39 + 25 ru - Росбанк филиал Приволжье АО "ТБанк" - - - - - - - 39 - - - ru - 042202910 - - - - - - - 47 - - - ru - АсинхронныйОбмен - - - - - - - 39 - - - ru - ПоСертификату - - - - - - - 39 - - - - - 39 - - - ru - 1 + Росбанк филиал Урал АО "ТБанк" @@ -21998,6 +22227,55 @@ https://bank1.ru/1c 25 + + + ru + 046577512 + + + + + + + 49 + + + ru + АсинхронныйОбмен + + + + + + + 25 + + + ru + ПоСертификату + + + + + + + 25 + + + + + 25 + + + ru + 1 + + + + + + + 28 ru @@ -22008,7 +22286,7 @@ https://bank1.ru/1c - 48 + 50 ru @@ -22028,63 +22306,13 @@ https://bank1.ru/1c 202 - 39 - 39 + 25 ru - Росбанк филиал Юг АО "ТБанк" - - - - - - - 39 - - - ru - 046015079 - - - - - - - 47 - - - ru - АсинхронныйОбмен - - - - - - - 39 - - - ru - ПоСертификату - - - - - - - 39 - - - - - 39 - - - ru - 1 + Росбанк филиал Приволжье АО "ТБанк" @@ -22092,6 +22320,55 @@ https://bank1.ru/1c 25 + + + ru + 042202910 + + + + + + + 49 + + + ru + АсинхронныйОбмен + + + + + + + 25 + + + ru + ПоСертификату + + + + + + + 25 + + + + + 25 + + + ru + 1 + + + + + + + 28 ru @@ -22102,7 +22379,7 @@ https://bank1.ru/1c - 48 + 50 ru @@ -22122,63 +22399,13 @@ https://bank1.ru/1c 203 - 39 - 39 + 25 ru - Росбанк филиал Северо-Запад АО "ТБанк" - - - - - - - 39 - - - ru - 044030941 - - - - - - - 47 - - - ru - АсинхронныйОбмен - - - - - - - 39 - - - ru - ПоСертификату - - - - - - - 39 - - - - - 39 - - - ru - 1 + Росбанк филиал Юг АО "ТБанк" @@ -22186,6 +22413,55 @@ https://bank1.ru/1c 25 + + + ru + 046015079 + + + + + + + 49 + + + ru + АсинхронныйОбмен + + + + + + + 25 + + + ru + ПоСертификату + + + + + + + 25 + + + + + 25 + + + ru + 1 + + + + + + + 28 ru @@ -22196,7 +22472,7 @@ https://bank1.ru/1c - 48 + 50 ru @@ -22216,63 +22492,13 @@ https://bank1.ru/1c 204 - 39 - 39 + 25 ru - Росбанк филиал АВТО АО «ТБанк» - - - - - - - 39 - - - ru - 044525991 - - - - - - - 47 - - - ru - АсинхронныйОбмен - - - - - - - 39 - - - ru - ПоСертификату - - - - - - - 39 - - - - - 39 - - - ru - 1 + Росбанк филиал Северо-Запад АО "ТБанк" @@ -22280,6 +22506,55 @@ https://bank1.ru/1c 25 + + + ru + 044030941 + + + + + + + 49 + + + ru + АсинхронныйОбмен + + + + + + + 25 + + + ru + ПоСертификату + + + + + + + 25 + + + + + 25 + + + ru + 1 + + + + + + + 28 ru @@ -22290,7 +22565,7 @@ https://bank1.ru/1c - 48 + 50 ru @@ -22310,63 +22585,13 @@ https://bank1.ru/1c 205 - 39 - 39 + 25 ru - Росбанк филиал ДОМ АО «ТБанк» - - - - - - - 39 - - - ru - 044525110 - - - - - - - 47 - - - ru - АсинхронныйОбмен - - - - - - - 39 - - - ru - ПоСертификату - - - - - - - 39 - - - - - 39 - - - ru - 1 + Росбанк филиал АВТО АО «ТБанк» @@ -22374,6 +22599,55 @@ https://bank1.ru/1c 25 + + + ru + 044525991 + + + + + + + 49 + + + ru + АсинхронныйОбмен + + + + + + + 25 + + + ru + ПоСертификату + + + + + + + 25 + + + + + 25 + + + ru + 1 + + + + + + + 28 ru @@ -22384,7 +22658,7 @@ https://bank1.ru/1c - 48 + 50 ru @@ -22404,7 +22678,99 @@ https://bank1.ru/1c 206 - 39 + + + 25 + + + ru + Росбанк филиал ДОМ АО «ТБанк» + + + + + + + 25 + + + ru + 044525110 + + + + + + + 49 + + + ru + АсинхронныйОбмен + + + + + + + 25 + + + ru + ПоСертификату + + + + + + + 25 + + + + + 25 + + + ru + 1 + + + + + + + 28 + + + ru + https://www.rosbank.ru/srednemu-i-krupnomu-biznesu/host2host/ + + + + + + + 50 + + + ru + 1,3,4 + + + + + + + 2 + + + + + + + 207 + 1 @@ -22429,7 +22795,7 @@ https://bank1.ru/1c - 47 + 49 ru @@ -22440,7 +22806,7 @@ https://bank1.ru/1c - 39 + 25 ru @@ -22451,12 +22817,12 @@ https://bank1.ru/1c - 39 + 25 - 39 + 25 ru @@ -22467,7 +22833,7 @@ https://bank1.ru/1c - 25 + 28 ru @@ -22478,7 +22844,7 @@ https://bank1.ru/1c - 48 + 50 ru @@ -22501,12 +22867,12 @@ https://bank1.ru/1c - 207 + 208 - 39 + 25 - 39 + 25 ru @@ -22517,7 +22883,7 @@ https://bank1.ru/1c - 39 + 25 ru @@ -22528,7 +22894,7 @@ https://bank1.ru/1c - 28 + 31 ru @@ -22539,7 +22905,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -22551,7 +22917,7 @@ https://bank1.ru/1c 5 - 39 + 25 ru @@ -22562,7 +22928,7 @@ https://bank1.ru/1c - 39 + 25 ru @@ -22573,7 +22939,7 @@ https://bank1.ru/1c - 39 + 25 ru @@ -22584,102 +22950,7 @@ https://bank1.ru/1c - 39 - - - ru - https://its.1c.ru/db/metod81#content:8524:hdoc - - - - - - - - 208 - - 39 - - - 39 - - - ru - Филиал "Центральный" ПАО "Совкомбанк" - - - - - - - 39 - - - ru - 045004763 - - - - - - - 28 - - - ru - АсинхронныйОбмен - - - - - - - 21 - - - ru - ПоСертификату - - - - - - 5 - - 39 - - - ru - 1 - - - - - - - 39 - - - ru - https://sovcombank.ru/corp/servisi-korp/1s-direktbank/ - - - - - - - 39 - - - ru - 1 - - - - - - - 39 + 25 ru @@ -22693,32 +22964,32 @@ https://bank1.ru/1c 209 - 39 + 25 - 39 + 25 ru - Филиал "Корпоративный" ПАО "Совкомбанк" + Филиал "Центральный" ПАО "Совкомбанк" - 39 + 25 ru - 044525360 + 045004763 - 28 + 31 ru @@ -22729,7 +23000,7 @@ https://bank1.ru/1c - 21 + 23 ru @@ -22741,7 +23012,7 @@ https://bank1.ru/1c 5 - 39 + 25 ru @@ -22752,7 +23023,7 @@ https://bank1.ru/1c - 39 + 25 ru @@ -22763,7 +23034,7 @@ https://bank1.ru/1c - 39 + 25 ru @@ -22774,7 +23045,7 @@ https://bank1.ru/1c - 39 + 25 ru @@ -22788,7 +23059,101 @@ https://bank1.ru/1c 210 - 39 + 25 + + + 25 + + + ru + Филиал "Корпоративный" ПАО "Совкомбанк" + + + + + + + 25 + + + ru + 044525360 + + + + + + + 31 + + + ru + АсинхронныйОбмен + + + + + + + 23 + + + ru + ПоСертификату + + + + + + 5 + + 25 + + + ru + 1 + + + + + + + 25 + + + ru + https://sovcombank.ru/corp/servisi-korp/1s-direktbank/ + + + + + + + 25 + + + ru + 1 + + + + + + + 25 + + + ru + https://its.1c.ru/db/metod81#content:8524:hdoc + + + + + + + + 211 + 1 @@ -22838,7 +23203,7 @@ https://bank1.ru/1c - 40 + 42 ru @@ -22850,9 +23215,8 @@ https://bank1.ru/1c - 211 + 212 - 39 1 @@ -22902,7 +23266,7 @@ https://bank1.ru/1c - 40 + 42 ru @@ -22914,9 +23278,8 @@ https://bank1.ru/1c - 212 + 213 - 39 1 @@ -22966,7 +23329,7 @@ https://bank1.ru/1c - 40 + 42 ru @@ -22978,9 +23341,8 @@ https://bank1.ru/1c - 213 + 214 - 39 1 @@ -23030,7 +23392,7 @@ https://bank1.ru/1c - 40 + 42 ru @@ -23042,9 +23404,8 @@ https://bank1.ru/1c - 214 + 215 - 39 1 @@ -23094,7 +23455,7 @@ https://bank1.ru/1c - 40 + 42 ru @@ -23106,9 +23467,8 @@ https://bank1.ru/1c - 215 + 216 - 39 1 @@ -23158,7 +23518,7 @@ https://bank1.ru/1c - 40 + 42 ru @@ -23170,9 +23530,8 @@ https://bank1.ru/1c - 216 + 217 - 39 1 @@ -23222,7 +23581,7 @@ https://bank1.ru/1c - 40 + 42 ru @@ -23234,9 +23593,8 @@ https://bank1.ru/1c - 217 + 218 - 39 1 @@ -23286,7 +23644,7 @@ https://bank1.ru/1c - 40 + 42 ru @@ -23298,9 +23656,8 @@ https://bank1.ru/1c - 218 + 219 - 39 1 @@ -23350,7 +23707,7 @@ https://bank1.ru/1c - 40 + 42 ru @@ -23362,9 +23719,8 @@ https://bank1.ru/1c - 219 + 220 - 39 1 @@ -23414,7 +23770,7 @@ https://bank1.ru/1c - 40 + 42 ru @@ -23426,9 +23782,8 @@ https://bank1.ru/1c - 220 + 221 - 39 1 @@ -23478,7 +23833,7 @@ https://bank1.ru/1c - 40 + 42 ru @@ -23490,9 +23845,8 @@ https://bank1.ru/1c - 221 + 222 - 39 1 @@ -23542,7 +23896,7 @@ https://bank1.ru/1c - 40 + 42 ru @@ -23554,9 +23908,8 @@ https://bank1.ru/1c - 222 + 223 - 39 1 @@ -23606,7 +23959,7 @@ https://bank1.ru/1c - 40 + 42 ru @@ -23618,12 +23971,12 @@ https://bank1.ru/1c - 223 + 224 2 - 26 + 29 ru @@ -23645,76 +23998,22 @@ https://bank1.ru/1c - 28 + 31 - 21 + 23 - 32 + 35 - 33 - - - - - 25 - - - - - 40 - - - ru - 1,2 - - - - - - - 2 - - - - - 10 - - - - - - 224 - - 2 - - - 26 - - - ru - Филиал № 6602 Банка ВТБ (публичное акционерное общество) в г. Екатеринбурге - - - - - - - 2 - - - ru - 046577501 - - + 36 @@ -23724,27 +24023,7 @@ https://bank1.ru/1c - 21 - - - - - 32 - - - - - 33 - - - - - 25 - - - - - 40 + 42 ru @@ -23771,11 +24050,11 @@ https://bank1.ru/1c 2 - 26 + 29 ru - Филиал № 7806 Банка ВТБ (публичное акционерное общество) в г. Санкт-Петербурге + Филиал № 6602 Банка ВТБ (публичное акционерное общество) в г. Екатеринбурге @@ -23786,11 +24065,31 @@ https://bank1.ru/1c ru - 044030707 + 046577501 + + + 31 + + + + + 23 + + + + + 35 + + + + + 36 + + 28 @@ -23798,27 +24097,7 @@ https://bank1.ru/1c - 21 - - - - - 32 - - - - - 33 - - - - - 25 - - - - - 40 + 42 ru @@ -23845,11 +24124,11 @@ https://bank1.ru/1c 2 - 26 + 29 ru - Филиал № 6318 Банка ВТБ (публичное акционерное общество) в г.Самаре + Филиал № 7806 Банка ВТБ (публичное акционерное общество) в г. Санкт-Петербурге @@ -23860,11 +24139,31 @@ https://bank1.ru/1c ru - 043601968 + 044030707 + + + 31 + + + + + 23 + + + + + 35 + + + + + 36 + + 28 @@ -23872,27 +24171,7 @@ https://bank1.ru/1c - 21 - - - - - 32 - - - - - 33 - - - - - 25 - - - - - 40 + 42 ru @@ -23919,11 +24198,11 @@ https://bank1.ru/1c 2 - 26 + 29 ru - Филиал № 5440 Банка ВТБ (публичное акционерное общество) в г. Новосибирске + Филиал № 6318 Банка ВТБ (публичное акционерное общество) в г.Самаре @@ -23934,11 +24213,31 @@ https://bank1.ru/1c ru - 045004719 + 043601968 + + + 31 + + + + + 23 + + + + + 35 + + + + + 36 + + 28 @@ -23946,27 +24245,7 @@ https://bank1.ru/1c - 21 - - - - - 32 - - - - - 33 - - - - - 25 - - - - - 40 + 42 ru @@ -23993,11 +24272,11 @@ https://bank1.ru/1c 2 - 26 + 29 ru - Филиал № 3652 Банка ВТБ (публичное акционерное общество) в г. Воронеже + Филиал № 5440 Банка ВТБ (публичное акционерное общество) в г. Новосибирске @@ -24008,11 +24287,31 @@ https://bank1.ru/1c ru - 042007855 + 045004719 + + + 31 + + + + + 23 + + + + + 35 + + + + + 36 + + 28 @@ -24020,27 +24319,7 @@ https://bank1.ru/1c - 21 - - - - - 32 - - - - - 33 - - - - - 25 - - - - - 40 + 42 ru @@ -24067,11 +24346,11 @@ https://bank1.ru/1c 2 - 26 + 29 ru - Филиал № 2351 Банка ВТБ (публичное акционерное общество) в г.Краснодаре + Филиал № 3652 Банка ВТБ (публичное акционерное общество) в г. Воронеже @@ -24082,11 +24361,31 @@ https://bank1.ru/1c ru - 040349758 + 042007855 + + + 31 + + + + + 23 + + + + + 35 + + + + + 36 + + 28 @@ -24094,27 +24393,7 @@ https://bank1.ru/1c - 21 - - - - - 32 - - - - - 33 - - - - - 25 - - - - - 40 + 42 ru @@ -24141,11 +24420,11 @@ https://bank1.ru/1c 2 - 26 + 29 ru - Филиал № 2754 Банка ВТБ (публичное акционерное общество) в г. Хабаровске + Филиал № 2351 Банка ВТБ (публичное акционерное общество) в г.Краснодаре @@ -24156,11 +24435,31 @@ https://bank1.ru/1c ru - 040813713 + 040349758 + + + 31 + + + + + 23 + + + + + 35 + + + + + 36 + + 28 @@ -24168,27 +24467,7 @@ https://bank1.ru/1c - 21 - - - - - 32 - - - - - 33 - - - - - 25 - - - - - 40 + 42 ru @@ -24212,7 +24491,80 @@ https://bank1.ru/1c 231 - 39 + 2 + + + 29 + + + ru + Филиал № 2754 Банка ВТБ (публичное акционерное общество) в г. Хабаровске + + + + + + + 2 + + + ru + 040813713 + + + + + + + 31 + + + + + 23 + + + + + 35 + + + + + 36 + + + + + 28 + + + + + 42 + + + ru + 1,2 + + + + + + + 2 + + + + + 10 + + + + + + 232 + 1 @@ -24262,7 +24614,7 @@ https://bank1.ru/1c - 40 + 42 ru @@ -24274,9 +24626,8 @@ https://bank1.ru/1c - 232 + 233 - 39 1 @@ -24326,7 +24677,7 @@ https://bank1.ru/1c - 40 + 42 ru @@ -24338,9 +24689,8 @@ https://bank1.ru/1c - 233 + 234 - 39 1 @@ -24390,7 +24740,7 @@ https://bank1.ru/1c - 40 + 42 ru @@ -24402,9 +24752,8 @@ https://bank1.ru/1c - 234 + 235 - 39 1 @@ -24454,7 +24803,7 @@ https://bank1.ru/1c - 40 + 42 ru @@ -24466,9 +24815,8 @@ https://bank1.ru/1c - 235 + 236 - 39 1 @@ -24518,7 +24866,7 @@ https://bank1.ru/1c - 40 + 42 ru @@ -24530,9 +24878,8 @@ https://bank1.ru/1c - 236 + 237 - 39 1 @@ -24582,7 +24929,7 @@ https://bank1.ru/1c - 40 + 42 ru @@ -24594,9 +24941,8 @@ https://bank1.ru/1c - 237 + 238 - 39 1 @@ -24646,7 +24992,7 @@ https://bank1.ru/1c - 40 + 42 ru @@ -24658,9 +25004,8 @@ https://bank1.ru/1c - 238 + 239 - 39 1 @@ -24710,7 +25055,7 @@ https://bank1.ru/1c - 40 + 42 ru @@ -24722,9 +25067,8 @@ https://bank1.ru/1c - 239 + 240 - 39 1 @@ -24774,7 +25118,7 @@ https://bank1.ru/1c - 40 + 42 ru @@ -24786,9 +25130,8 @@ https://bank1.ru/1c - 240 + 241 - 39 1 @@ -24838,7 +25181,7 @@ https://bank1.ru/1c - 40 + 42 ru @@ -24850,9 +25193,8 @@ https://bank1.ru/1c - 241 + 242 - 39 1 @@ -24902,7 +25244,7 @@ https://bank1.ru/1c - 40 + 42 ru @@ -24914,9 +25256,8 @@ https://bank1.ru/1c - 242 + 243 - 39 1 @@ -24966,7 +25307,7 @@ https://bank1.ru/1c - 40 + 42 ru @@ -24978,9 +25319,8 @@ https://bank1.ru/1c - 243 + 244 - 39 1 @@ -25030,7 +25370,7 @@ https://bank1.ru/1c - 40 + 42 ru @@ -25042,9 +25382,8 @@ https://bank1.ru/1c - 244 + 245 - 39 1 @@ -25094,7 +25433,7 @@ https://bank1.ru/1c - 40 + 42 ru @@ -25106,9 +25445,8 @@ https://bank1.ru/1c - 245 + 246 - 39 1 @@ -25158,7 +25496,7 @@ https://bank1.ru/1c - 40 + 42 ru @@ -25170,9 +25508,8 @@ https://bank1.ru/1c - 246 + 247 - 39 1 @@ -25222,7 +25559,7 @@ https://bank1.ru/1c - 40 + 42 ru @@ -25234,9 +25571,8 @@ https://bank1.ru/1c - 247 + 248 - 39 1 @@ -25286,7 +25622,7 @@ https://bank1.ru/1c - 40 + 42 ru @@ -25298,9 +25634,8 @@ https://bank1.ru/1c - 248 + 249 - 39 1 @@ -25350,7 +25685,7 @@ https://bank1.ru/1c - 40 + 42 ru @@ -25362,9 +25697,8 @@ https://bank1.ru/1c - 249 + 250 - 39 1 @@ -25414,7 +25748,7 @@ https://bank1.ru/1c - 40 + 42 ru @@ -25426,9 +25760,8 @@ https://bank1.ru/1c - 250 + 251 - 39 1 @@ -25478,7 +25811,7 @@ https://bank1.ru/1c - 40 + 42 ru @@ -25490,9 +25823,8 @@ https://bank1.ru/1c - 251 + 252 - 39 1 @@ -25542,7 +25874,7 @@ https://bank1.ru/1c - 40 + 42 ru @@ -25554,9 +25886,8 @@ https://bank1.ru/1c - 252 + 253 - 39 1 @@ -25606,7 +25937,7 @@ https://bank1.ru/1c - 40 + 42 ru @@ -25618,9 +25949,8 @@ https://bank1.ru/1c - 253 + 254 - 39 1 @@ -25670,7 +26000,7 @@ https://bank1.ru/1c - 40 + 42 ru @@ -25682,9 +26012,8 @@ https://bank1.ru/1c - 254 + 255 - 39 1 @@ -25734,7 +26063,7 @@ https://bank1.ru/1c - 40 + 42 ru @@ -25746,9 +26075,8 @@ https://bank1.ru/1c - 255 + 256 - 39 1 @@ -25798,7 +26126,7 @@ https://bank1.ru/1c - 40 + 42 ru @@ -25810,9 +26138,8 @@ https://bank1.ru/1c - 256 + 257 - 39 1 @@ -25862,7 +26189,7 @@ https://bank1.ru/1c - 40 + 42 ru @@ -25874,9 +26201,8 @@ https://bank1.ru/1c - 257 + 258 - 39 1 @@ -25926,7 +26252,7 @@ https://bank1.ru/1c - 40 + 42 ru @@ -25938,9 +26264,8 @@ https://bank1.ru/1c - 258 + 259 - 39 1 @@ -25990,7 +26315,7 @@ https://bank1.ru/1c - 40 + 42 ru @@ -26002,9 +26327,8 @@ https://bank1.ru/1c - 259 + 260 - 39 1 @@ -26054,7 +26378,7 @@ https://bank1.ru/1c - 40 + 42 ru @@ -26066,9 +26390,8 @@ https://bank1.ru/1c - 260 + 261 - 39 1 @@ -26118,7 +26441,7 @@ https://bank1.ru/1c - 40 + 42 ru @@ -26130,9 +26453,8 @@ https://bank1.ru/1c - 261 + 262 - 39 1 @@ -26182,7 +26504,7 @@ https://bank1.ru/1c - 40 + 42 ru @@ -26194,9 +26516,8 @@ https://bank1.ru/1c - 262 + 263 - 39 1 @@ -26246,7 +26567,7 @@ https://bank1.ru/1c - 40 + 42 ru @@ -26258,9 +26579,8 @@ https://bank1.ru/1c - 263 + 264 - 39 1 @@ -26310,7 +26630,7 @@ https://bank1.ru/1c - 40 + 42 ru @@ -26322,9 +26642,8 @@ https://bank1.ru/1c - 264 + 265 - 39 1 @@ -26374,7 +26693,7 @@ https://bank1.ru/1c - 40 + 42 ru @@ -26386,9 +26705,8 @@ https://bank1.ru/1c - 265 + 266 - 39 1 @@ -26438,7 +26756,7 @@ https://bank1.ru/1c - 40 + 42 ru @@ -26450,9 +26768,8 @@ https://bank1.ru/1c - 266 + 267 - 39 1 @@ -26502,7 +26819,7 @@ https://bank1.ru/1c - 40 + 42 ru @@ -26514,9 +26831,8 @@ https://bank1.ru/1c - 267 + 268 - 39 1 @@ -26566,7 +26882,7 @@ https://bank1.ru/1c - 40 + 42 ru @@ -26578,12 +26894,12 @@ https://bank1.ru/1c - 268 + 269 - 39 + 25 - 1 + 25 ru @@ -26594,7 +26910,7 @@ https://bank1.ru/1c - 2 + 25 ru @@ -26604,37 +26920,13 @@ https://bank1.ru/1c + 7 - 3 - - - - - 4 - - - - - 5 - - - - - 6 - - - - - 7 - - - - - 40 + 25 ru - 1,3 + 1,3,4 @@ -26642,12 +26934,12 @@ https://bank1.ru/1c - 269 + 270 - 39 + 25 - 1 + 25 ru @@ -26658,7 +26950,7 @@ https://bank1.ru/1c - 2 + 25 ru @@ -26668,37 +26960,13 @@ https://bank1.ru/1c + 7 - 3 - - - - - 4 - - - - - 5 - - - - - 6 - - - - - 7 - - - - - 40 + 25 ru - 1,3 + 1,3,4 @@ -26706,12 +26974,12 @@ https://bank1.ru/1c - 270 + 271 - 39 + 25 - 1 + 25 ru @@ -26722,7 +26990,7 @@ https://bank1.ru/1c - 2 + 25 ru @@ -26732,37 +27000,13 @@ https://bank1.ru/1c + 7 - 3 - - - - - 4 - - - - - 5 - - - - - 6 - - - - - 7 - - - - - 40 + 25 ru - 1,3 + 1,3,4 @@ -26770,12 +27014,12 @@ https://bank1.ru/1c - 271 + 272 - 39 + 25 - 1 + 25 ru @@ -26786,7 +27030,7 @@ https://bank1.ru/1c - 2 + 25 ru @@ -26796,37 +27040,13 @@ https://bank1.ru/1c + 7 - 3 - - - - - 4 - - - - - 5 - - - - - 6 - - - - - 7 - - - - - 40 + 25 ru - 1,3 + 1,3,4 @@ -26834,12 +27054,12 @@ https://bank1.ru/1c - 272 + 273 - 39 + 25 - 1 + 25 ru @@ -26850,7 +27070,7 @@ https://bank1.ru/1c - 2 + 25 ru @@ -26860,37 +27080,13 @@ https://bank1.ru/1c + 7 - 3 - - - - - 4 - - - - - 5 - - - - - 6 - - - - - 7 - - - - - 40 + 25 ru - 1,3 + 1,3,4 @@ -26898,12 +27094,12 @@ https://bank1.ru/1c - 273 + 274 - 39 + 25 - 1 + 25 ru @@ -26914,7 +27110,7 @@ https://bank1.ru/1c - 2 + 25 ru @@ -26924,37 +27120,13 @@ https://bank1.ru/1c + 7 - 3 - - - - - 4 - - - - - 5 - - - - - 6 - - - - - 7 - - - - - 40 + 25 ru - 1,3 + 1,3,4 @@ -26962,12 +27134,12 @@ https://bank1.ru/1c - 274 + 275 - 39 + 25 - 1 + 25 ru @@ -26978,7 +27150,7 @@ https://bank1.ru/1c - 2 + 25 ru @@ -26988,37 +27160,64 @@ https://bank1.ru/1c + 7 - 3 - - - - - 4 - - - - - 5 - - - - - 6 - - - - - 7 - - - - - 40 + 25 ru - 1,3 + 1,3,4 + + + + + + + + 276 + + + + 25 + + + ru + АО КБ "Модульбанк" + + + + + + + 25 + + + ru + 044525979 + + + + + + 7 + + 25 + + + ru + 0 + + + + + + 15 + + 25 + + + ru + 1 @@ -27044,9 +27243,9 @@ https://bank1.ru/1c 2 true - 39 - 275 - 275 + 25 + 277 + 277 Solid @@ -27115,6 +27314,12 @@ https://bank1.ru/1c 0 style:FormBackColor + + 0 + 0 + 59 + style:FormBackColor + 0 0 @@ -27137,8 +27342,20 @@ https://bank1.ru/1c 0 0 - 59 + 89 + Left + Bottom style:FormBackColor + Auto + + + 0 + 0 + 176 + Left + Bottom + style:FormBackColor + Auto 0 @@ -27148,6 +27365,7 @@ https://bank1.ru/1c 0 24 + 0 234 @@ -27216,7 +27434,6 @@ https://bank1.ru/1c 0 297 - 24 diff --git a/Конфигурация/Catalogs/НастройкиОнлайнОплат/Forms/ФормаЭлемента/Ext/Form/Module.bsl b/Конфигурация/Catalogs/НастройкиОнлайнОплат/Forms/ФормаЭлемента/Ext/Form/Module.bsl index 44a10f909..247787c01 100644 --- a/Конфигурация/Catalogs/НастройкиОнлайнОплат/Forms/ФормаЭлемента/Ext/Form/Module.bsl +++ b/Конфигурация/Catalogs/НастройкиОнлайнОплат/Forms/ФормаЭлемента/Ext/Form/Module.bsl @@ -640,7 +640,7 @@ КонецПроцедуры &НаКлиентеНаСервереБезКонтекста -Функция КонтекстФормы(ЭтотОбъект) +Функция КонтекстФормы(ЭтотОбъект) Контекст = Новый Структура; Контекст.Вставить("Форма", ЭтотОбъект); @@ -1445,11 +1445,7 @@ // Шаблоны сообщений. Если СоздатьШаблоныПисемАвтоматически Или СоздатьШаблоныSMSАвтоматически Тогда - ИнтернетПоддержкаПользователей.УстановитьИспользованиеШаблоновСообщений(); - ИнтернетПоддержкаПользователей.УстановитьИспользованиеЭлектроннойПочты(); - ИнтернетПоддержкаПользователей.УстановитьИспользованиеSMS(); - ИнтернетПоддержкаПользователей.УстановитьОтправкуПисемВФорматеHTML(); - + ОнлайнОплатыСлужебный.УстановитьИспользованиеШаблоновСообщений(); ПредопределенныеШаблоныСообщений = ОнлайнОплатыСлужебный.СоздатьПредопределенныеШаблоныСообщений( СоздатьШаблоныПисемАвтоматически, diff --git a/Конфигурация/Catalogs/НастройкиПодключенияКОблачнымКассам/Forms/ФормаЭлемента/Ext/Form.xml b/Конфигурация/Catalogs/НастройкиПодключенияКОблачнымКассам/Forms/ФормаЭлемента/Ext/Form.xml index 09101e17f..636d090c2 100644 --- a/Конфигурация/Catalogs/НастройкиПодключенияКОблачнымКассам/Forms/ФормаЭлемента/Ext/Form.xml +++ b/Конфигурация/Catalogs/НастройкиПодключенияКОблачнымКассам/Forms/ФормаЭлемента/Ext/Form.xml @@ -295,11 +295,19 @@ Логин + + ЛогинПриИзменении + Пароль + true + + ПарольПриИзменении + ПарольНачалоВыбора + - - @@ -2246,11 +2223,7 @@ - xs:string - - 0 - Variable - + xs:boolean @@ -2865,27 +2838,6 @@ ПоказыватьПомеченныеФайлы - - - <v8:item> - <v8:lang>ru</v8:lang> - <v8:content>Удалить</v8:content> - </v8:item> - - - - ru - Удалить данные файла - - - - StdPicture.DeleteDirectly - true - - Удалить - Use - Список - <v8:item> diff --git a/Конфигурация/Catalogs/Файлы/Forms/Файлы/Ext/Form/Module.bsl b/Конфигурация/Catalogs/Файлы/Forms/Файлы/Ext/Form/Module.bsl index e4d9e2e12..3c45a9448 100644 --- a/Конфигурация/Catalogs/Файлы/Forms/Файлы/Ext/Form/Module.bsl +++ b/Конфигурация/Catalogs/Файлы/Forms/Файлы/Ext/Form/Module.bsl @@ -121,7 +121,9 @@ Элементы.Папки.ПоложениеСтрокиПоиска = ПоложениеСтрокиПоиска.Верх; Элементы.Папки.КоманднаяПанель.Видимость = Ложь; - Элементы.ПапкиСоздать.Отображение = ОтображениеКнопки.Картинка; + Если ЭлементФормыСуществует(ЭтотОбъект, "ПапкиСоздать") Тогда + Элементы.ПапкиСоздать.Отображение = ОтображениеКнопки.Картинка; + КонецЕсли; КонецЕсли; КонецПроцедуры @@ -235,6 +237,12 @@ Возврат; КонецЕсли; + ДоступностьКомандыРедактировать = Элементы.ФормаРедактировать.Видимость И Элементы.ФормаРедактировать.Доступность; + Если НЕ ДоступностьКомандыРедактировать Тогда + ОткрытьФайлВыполнить(); + Возврат; + КонецЕсли; + СтандартнаяОбработка = Ложь; КакОткрывать = РаботаСФайламиСлужебныйКлиент.ПерсональныеНастройкиРаботыСФайлами().ДействиеПоДвойномуЩелчкуМыши; @@ -247,16 +255,16 @@ ТекущиеДанные = Элемент.ТекущиеДанные; ПараметрыПолученияФайла = РаботаСФайламиКлиент.ПараметрыАсинхронногоПолученияФайла("ВыбратьРежимИРедактироватьФайл"); - ПараметрыПолученияФайла.ПрисоединенныйФайл = ВыбраннаяСтрока; - ПараметрыПолученияФайла.ФормаВладелец = ЭтотОбъект; + ПараметрыПолученияФайла.ПрисоединенныйФайл = ВыбраннаяСтрока; + ПараметрыПолученияФайла.ФормаВладелец = ЭтотОбъект; ПараметрыПолученияФайла.ПроверятьНаличиеФайлаВАрхиве = Ложь; - ПараметрыПолученияФайла.ФайлВАрхиве = ТекущиеДанные.НомерКартинкиЭтоАрхив = 0; + ПараметрыПолученияФайла.ФайлВАрхиве = ТекущиеДанные.НомерКартинкиЭтоАрхив = 0; ПараметрыПолученияФайла.ПараметрыМетода.ПредыдущийАдресФайла = ПредыдущийАдресФайла; ПараметрыДействия = ПараметрыПолученияФайла.ПараметрыДействия; - ПараметрыДействия.ФормаВладелец = ЭтотОбъект; - ПараметрыДействия.ДоступностьКомандыРедактировать = Элементы.ФормаРедактировать.Доступность; + ПараметрыДействия.ФормаВладелец = ЭтотОбъект; + ПараметрыДействия.ДоступностьКомандыРедактировать = ДоступностьКомандыРедактировать; РаботаСФайламиКлиент.ОткрытьФайл(ПараметрыПолученияФайла); @@ -890,8 +898,8 @@ Возврат; КонецЕсли; - ВыделенныеСтроки = Элементы.Список.ПолучитьСтрокиДляОбработки(); - Если ВыделенныеСтроки.Количество() > 0 Тогда + ВыделенныеСтроки = ВыделенныеСтроки(); + Если ЗначениеЗаполнено(ВыделенныеСтроки) Тогда РаботаСФайламиКлиент.НапечататьФайлы(ВыделенныеСтроки, УникальныйИдентификатор); КонецЕсли; @@ -968,16 +976,6 @@ КонецПроцедуры -&НаКлиенте -Процедура Удалить(Команда) - - ВыделенныеСтроки = ВыделенныеСтроки(); - - ОписаниеОповещения = Новый ОписаниеОповещения("ПослеУдаленияДанных", ЭтотОбъект); - РаботаСФайламиСлужебныйКлиент.УдалитьДанныеФайлов(ОписаниеОповещения, ВыделенныеСтроки, УникальныйИдентификатор); - -КонецПроцедуры - &НаКлиенте Процедура ПоказыватьПомеченныеФайлы(Команда) @@ -1224,13 +1222,6 @@ КонецПроцедуры -&НаКлиенте -Процедура ПослеУдаленияДанных(Результат, ДополнительныеПараметры) Экспорт - - Элементы.Список.Обновить(); - -КонецПроцедуры - &НаСервере Процедура ЗашифроватьСервер(Знач МассивДанныхДляЗанесенияВБазу, Знач МассивОтпечатков, Знач МассивФайловВРабочемКаталогеДляУдаления, Знач ИмяРабочегоКаталога, Знач ОбъектСсылка) @@ -1292,86 +1283,94 @@ &НаКлиенте Процедура УстановитьДоступностьКомандПриИзмененииПапки() - Если Элементы.Папки.ТекущаяСтрока = Неопределено Или Элементы.Папки.ТекущаяСтрока.Пустая() Тогда - - Элементы.ФормаПодменюСоздать.Доступность = Ложь; - Элементы.ФормаСоздатьИзФайла.Доступность = Ложь; - Элементы.ФормаСоздатьИзШаблона.Доступность = Ложь; - Элементы.ФормаСоздатьСоСканера.Доступность = Ложь; - - Элементы.ФормаСкопировать.Доступность = Ложь; - Элементы.СписокКонтекстноеМенюСкопировать.Доступность = Ложь; - - Элементы.ФормаУстановитьПометкуУдаления.Доступность = Ложь; - Элементы.СписокКонтекстноеМенюУстановитьПометкуУдаления.Доступность = Ложь; - - Элементы.СписокКонтекстноеМенюСоздать.Доступность = Ложь; - - Элементы.ФормаИмпортФайлов.Доступность = Ложь; - Элементы.СписокКонтекстноеМенюИмпортФайлов.Доступность = Ложь; - - Элементы.ПапкиКонтекстноеМенюИмпортПапки.Доступность = Ложь; - - Элементы.ПапкиКонтекстноеМенюСкопировать.Доступность = Ложь; - Элементы.ПапкиКонтекстноеМенюУровеньВверх.Доступность = Ложь; - Элементы.ПапкиКонтекстноеМенюПеренестиЭлемент.Доступность = Ложь; - Элементы.ПапкиКонтекстноеМенюЭкспортПапки.Доступность = Ложь; - Элементы.ПапкиКонтекстноеМенюНастроитьСинхронизацию.Доступность = Ложь; - Если ДоступнаКомандаНастройкиПрав Тогда - Элементы.ПапкиКонтекстноеМенюНастроитьПрава.Доступность = Ложь; - КонецЕсли; - Иначе + ЕстьТекущаяСтрока = ЗначениеЗаполнено(Элементы.Папки.ТекущаяСтрока); + Если ЕстьТекущаяСтрока Тогда Если Элементы.Папки.ТекущаяСтрока <> ТекущаяПапка Тогда ТекущаяПапка = Элементы.Папки.ТекущаяСтрока; - ЗаполнитьЗначенияСвойств(ЭтотОбъект, НастройкиПравПапки(Элементы.Папки.ТекущаяСтрока)); - Элементы.ПапкиСоздать.Доступность = ИзменениеПапок; - Элементы.ПапкиКонтекстноеМенюСоздать.Доступность = ИзменениеПапок; - Элементы.ПапкиКонтекстноеМенюСкопировать.Доступность = ИзменениеПапок; - Элементы.ПапкиКонтекстноеМенюУстановитьПометкуУдаления.Доступность = ИзменениеПапок; - Элементы.ПапкиКонтекстноеМенюПеренестиЭлемент.Доступность = ИзменениеПапок; - Если ДоступнаКомандаНастройкиПрав Тогда - Элементы.ПапкиКонтекстноеМенюНастроитьПрава.Доступность = УправлениеПравами; - КонецЕсли; + + НастройкиПравПапки = НастройкиПравПапки(Элементы.Папки.ТекущаяСтрока); + ЗаполнитьЗначенияСвойств(ЭтотОбъект, НастройкиПравПапки); КонецЕсли; - - Элементы.ФормаПодменюСоздать.Доступность = ДобавлениеФайлов И Не ФайлыРедактируютсяВОблачномСервисе; - Элементы.ФормаСоздатьИзФайла.Доступность = ДобавлениеФайлов И Не ФайлыРедактируютсяВОблачномСервисе; - Элементы.ФормаСоздатьИзШаблона.Доступность = ДобавлениеФайлов И Не ФайлыРедактируютсяВОблачномСервисе; - Элементы.ФормаСоздатьСоСканера.Доступность = ДобавлениеФайлов И Не ФайлыРедактируютсяВОблачномСервисе; - Элементы.СписокКонтекстноеМенюСоздать.Доступность = ДобавлениеФайлов И Не ФайлыРедактируютсяВОблачномСервисе; - - Элементы.ПапкиСоздать.Доступность = Не ФайлыРедактируютсяВОблачномСервисе; - Элементы.ФормаИмпортПапки.Доступность = Не ФайлыРедактируютсяВОблачномСервисе; - Элементы.ФормаПеренестиВПапку.Доступность = Не ФайлыРедактируютсяВОблачномСервисе; - Элементы.ФормаОсвободить.Доступность = Не ФайлыРедактируютсяВОблачномСервисе; - Элементы.СписокКонтекстноеМенюПеренестиВПапку.Доступность = Не ФайлыРедактируютсяВОблачномСервисе; - Элементы.СписокКонтекстноеМенюОсвободить.Доступность = Не ФайлыРедактируютсяВОблачномСервисе; - - Элементы.ФормаСкопировать.Доступность = ДобавлениеФайлов И Не ФайлыРедактируютсяВОблачномСервисе; - Элементы.ПапкиКонтекстноеМенюСкопировать.Доступность = Элементы.ФормаСкопировать.Доступность; - - Элементы.СписокКонтекстноеМенюУстановитьПометкуУдаления.Доступность = ДобавлениеФайлов И Не ФайлыРедактируютсяВОблачномСервисе; - Элементы.ФормаУстановитьПометкуУдаления.Доступность = ДобавлениеФайлов И Не ФайлыРедактируютсяВОблачномСервисе; - - Элементы.ФормаСкопировать.Доступность = ДобавлениеФайлов И Не ФайлыРедактируютсяВОблачномСервисе; - Элементы.СписокКонтекстноеМенюСкопировать.Доступность = ДобавлениеФайлов И Не ФайлыРедактируютсяВОблачномСервисе; - - Элементы.ФормаУстановитьПометкуУдаления.Доступность = ПометкаУдаленияФайлов И Не ФайлыРедактируютсяВОблачномСервисе; - Элементы.СписокКонтекстноеМенюУстановитьПометкуУдаления.Доступность = ПометкаУдаленияФайлов И Не ФайлыРедактируютсяВОблачномСервисе; - - Элементы.ФормаИмпортФайлов.Доступность = ДобавлениеФайлов И Не ФайлыРедактируютсяВОблачномСервисе; - Элементы.СписокКонтекстноеМенюИмпортФайлов.Доступность = ДобавлениеФайлов И Не ФайлыРедактируютсяВОблачномСервисе; - - Элементы.ПапкиКонтекстноеМенюИмпортПапки.Доступность = ДобавлениеФайлов И Не ФайлыРедактируютсяВОблачномСервисе; - Элементы.ПапкиКонтекстноеМенюУровеньВверх.Доступность = Истина; - Элементы.ПапкиКонтекстноеМенюЭкспортПапки.Доступность = Истина; - Элементы.ПапкиКонтекстноеМенюНастроитьСинхронизацию.Доступность = Истина; - КонецЕсли; + УстановитьДоступностьКомандПапокПриИзмененииПапки(); + УстановитьДоступностьКомандСпискаПриИзмененииПапки(); + Если Элементы.Папки.ТекущаяСтрока <> Неопределено Тогда ПодключитьОбработчикОжидания("ОбработкаОжиданияПапкиПриАктивизацииСтроки", 0.2, Истина); КонецЕсли; +КонецПроцедуры + +&НаКлиентеНаСервереБезКонтекста +Функция ЭлементФормыСуществует(Форма, ИмяЭлемента) + Результат = Форма.Элементы.Найти(ИмяЭлемента) <> Неопределено; + Возврат Результат; +КонецФункции + +&НаКлиенте +Процедура УстановитьДоступностьКомандПапокПриИзмененииПапки() + ЕстьТекущаяСтрока = ЗначениеЗаполнено(Элементы.Папки.ТекущаяСтрока); + РазрешеноРедактирование = ЕстьТекущаяСтрока И Не ФайлыРедактируютсяВОблачномСервисе; + РазрешеноДобавление = РазрешеноРедактирование И ДобавлениеФайлов; + + Элементы.ФормаИмпортПапки.Доступность = РазрешеноДобавление; + Элементы.ПапкиКонтекстноеМенюИмпортПапки.Доступность = Элементы.ФормаИмпортПапки.Доступность; + + Элементы.ПапкиКонтекстноеМенюУровеньВверх.Доступность = ЕстьТекущаяСтрока; + Элементы.ПапкиКонтекстноеМенюЭкспортПапки.Доступность = ЕстьТекущаяСтрока; + Элементы.ПапкиКонтекстноеМенюНастроитьСинхронизацию.Доступность = ЕстьТекущаяСтрока; + + Если ЭлементФормыСуществует(ЭтотОбъект, "ПапкиСоздать") Тогда + Элементы.ПапкиСоздать.Доступность = ИзменениеПапок И РазрешеноРедактирование; + Элементы.ПапкиКонтекстноеМенюСоздать.Доступность = Элементы.ПапкиСоздать.Доступность; + КонецЕсли; + Если ЭлементФормыСуществует(ЭтотОбъект, "ПапкиКонтекстноеМенюУстановитьПометкуУдаления") Тогда + Элементы.ПапкиКонтекстноеМенюУстановитьПометкуУдаления.Доступность = ИзменениеПапок; + КонецЕсли; + Если ЭлементФормыСуществует(ЭтотОбъект, "ПапкиКонтекстноеМенюПеренестиЭлемент") Тогда + Элементы.ПапкиКонтекстноеМенюПеренестиЭлемент.Доступность = ИзменениеПапок; + КонецЕсли; + Если ЭлементФормыСуществует(ЭтотОбъект, "ПапкиКонтекстноеМенюСкопировать") Тогда + Элементы.ПапкиКонтекстноеМенюСкопировать.Доступность = РазрешеноДобавление; + КонецЕсли; + + Если ДоступнаКомандаНастройкиПрав Тогда + Элементы.ПапкиКонтекстноеМенюНастроитьПрава.Доступность = УправлениеПравами; + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьДоступностьКомандСпискаПриИзмененииПапки() + ЕстьТекущаяСтрока = ЗначениеЗаполнено(Элементы.Папки.ТекущаяСтрока); + РазрешеноРедактирование = ЕстьТекущаяСтрока И Не ФайлыРедактируютсяВОблачномСервисе; + РазрешеноДобавление = РазрешеноРедактирование И ДобавлениеФайлов; + + Элементы.ФормаПодменюСоздать.Доступность = РазрешеноДобавление; + Элементы.ФормаСоздатьИзФайла.Доступность = РазрешеноДобавление; + Элементы.ФормаСоздатьИзШаблона.Доступность = РазрешеноДобавление; + Элементы.ФормаСоздатьСоСканера.Доступность = РазрешеноДобавление; + Элементы.ФормаПеренестиВПапку.Доступность = РазрешеноРедактирование; + Элементы.ФормаОсвободить.Доступность = РазрешеноРедактирование; + Элементы.ФормаИмпортФайлов.Доступность = РазрешеноДобавление; + + Элементы.СписокКонтекстноеМенюПеренестиВПапку.Доступность = Элементы.ФормаПеренестиВПапку.Доступность; + Элементы.СписокКонтекстноеМенюОсвободить.Доступность = Элементы.ФормаОсвободить.Доступность; + Элементы.СписокКонтекстноеМенюИмпортФайлов.Доступность = Элементы.ФормаИмпортФайлов.Доступность; + + Если ЭлементФормыСуществует(ЭтотОбъект, "ФормаСкопировать") Тогда + Элементы.ФормаСкопировать.Доступность = РазрешеноДобавление; + Элементы.СписокКонтекстноеМенюСкопировать.Доступность = Элементы.ФормаСкопировать.Доступность; + КонецЕсли; + + Если ЭлементФормыСуществует(ЭтотОбъект, "СписокСоздать") Тогда + Элементы.СписокСоздать.Доступность = РазрешеноДобавление; + Элементы.СписокКонтекстноеМенюСоздать.Доступность = Элементы.СписокСоздать.Доступность; + КонецЕсли; + + Если ЭлементФормыСуществует(ЭтотОбъект, "ФормаУстановитьПометкуУдаления") Тогда + Элементы.ФормаУстановитьПометкуУдаления.Доступность = РазрешеноРедактирование И ПометкаУдаленияФайлов; + Элементы.СписокКонтекстноеМенюУстановитьПометкуУдаления.Доступность = Элементы.ФормаУстановитьПометкуУдаления.Доступность; + КонецЕсли; КонецПроцедуры @@ -1608,9 +1607,6 @@ Элементы.ФормаУстановитьПометкуУдаления.Доступность = Ложь; Элементы.СписокКонтекстноеМенюУстановитьПометкуУдаления.Доступность = Ложь; - Элементы.ФормаУдалить.Доступность = Ложь; - Элементы.СписокКонтекстноеМенюУдалить.Доступность = Ложь; - Элементы.СписокКонтекстноеМенюСравнить.Видимость = Ложь; КонецПроцедуры @@ -1691,18 +1687,10 @@ Элементы.Отправить.Доступность = Не ФайлПеремещенВАрхив; Элементы.СписокКонтекстноеМенюОтправить.Доступность = Не ФайлПеремещенВАрхив; - Элементы.ФормаУстановитьПометкуУдаления.Доступность = ИзменениеФайлов; - Элементы.СписокКонтекстноеМенюУстановитьПометкуУдаления.Доступность = ИзменениеФайлов; - - Элементы.ФормаУдалить.Доступность = ИзменениеФайлов - И АвторТекущийПользователь - И Не ЗначениеЗаполнено(Редактирует) - И Не ФайлыРедактируютсяВОблачномСервисе; - - Элементы.СписокКонтекстноеМенюУдалить.Доступность = ИзменениеФайлов - И АвторТекущийПользователь - И Не ЗначениеЗаполнено(Редактирует) - И Не ФайлыРедактируютсяВОблачномСервисе; + Если ЭлементФормыСуществует(ЭтотОбъект, "ФормаУстановитьПометкуУдаления") Тогда + Элементы.ФормаУстановитьПометкуУдаления.Доступность = ИзменениеФайлов; + Элементы.СписокКонтекстноеМенюУстановитьПометкуУдаления.Доступность = ИзменениеФайлов; + КонецЕсли; Элементы.СписокКонтекстноеМенюСравнить.Видимость = ВыделеноНесколькоСтрок; @@ -1908,15 +1896,15 @@ &НаКлиенте Функция ВыделенныеСтроки() - ВыделенныеСтроки = Новый Массив; + Результат = Новый Массив; Для Каждого ВыделеннаяСтрока Из Элементы.Список.ПолучитьСтрокиДляОбработки() Цикл Если ТипЗнч(ВыделеннаяСтрока) <> Тип("СтрокаГруппировкиДинамическогоСписка") Тогда - ВыделенныеСтроки.Добавить(ВыделеннаяСтрока); + Результат.Добавить(ВыделеннаяСтрока); КонецЕсли; КонецЦикла; - Возврат ВыделенныеСтроки + Возврат Результат КонецФункции diff --git a/Конфигурация/Catalogs/Файлы/Forms/ФормаВыбора/Ext/Form.xml b/Конфигурация/Catalogs/Файлы/Forms/ФормаВыбора/Ext/Form.xml index b270792c5..ce35cbf0d 100644 --- a/Конфигурация/Catalogs/Файлы/Forms/ФормаВыбора/Ext/Form.xml +++ b/Конфигурация/Catalogs/Файлы/Forms/ФормаВыбора/Ext/Form.xml @@ -108,6 +108,7 @@ <HorizontalLinesBWA>false</HorizontalLinesBWA> <VerticalLinesBWA>false</VerticalLinesBWA> <UseAlternationRowColorBWA>false</UseAlternationRowColorBWA> + <InitialRowActivation>Activate</InitialRowActivation> <EnableStartDrag>true</EnableStartDrag> <EnableDrag>true</EnableDrag> <FileDragMode>AsFile</FileDragMode> diff --git a/Конфигурация/Catalogs/Файлы/Forms/ФормаЭлемента/Ext/Form.xml b/Конфигурация/Catalogs/Файлы/Forms/ФормаЭлемента/Ext/Form.xml index ea7137927..a897a399c 100644 --- a/Конфигурация/Catalogs/Файлы/Forms/ФормаЭлемента/Ext/Form.xml +++ b/Конфигурация/Catalogs/Файлы/Forms/ФормаЭлемента/Ext/Form.xml @@ -261,18 +261,6 @@ <LocationInCommandBar>InAdditionalSubmenu</LocationInCommandBar> <ExtendedTooltip name="ФормаСтандартныеУстановитьПометкуУдаленияРасширеннаяПодсказка" id="61"/> </Button> - <Button name="ФормаУдалить" id="287"> - <Type>CommandBarButton</Type> - <CommandName>Form.Command.Удалить</CommandName> - <Title> - <v8:item> - <v8:lang>ru</v8:lang> - <v8:content>Удалить</v8:content> - </v8:item> - - InAdditionalSubmenu - - @@ -2469,25 +2457,6 @@ true DontUse - - - <v8:item> - <v8:lang>ru</v8:lang> - <v8:content>Удалить</v8:content> - </v8:item> - - - - ru - Удалить данные файла - - - - StdPicture.DeleteDirectly - true - - Удалить - <v8:item> diff --git a/Конфигурация/Catalogs/Файлы/Forms/ФормаЭлемента/Ext/Form/Module.bsl b/Конфигурация/Catalogs/Файлы/Forms/ФормаЭлемента/Ext/Form/Module.bsl index 3ffb967e7..74307cf2d 100644 --- a/Конфигурация/Catalogs/Файлы/Forms/ФормаЭлемента/Ext/Form/Module.bsl +++ b/Конфигурация/Catalogs/Файлы/Forms/ФормаЭлемента/Ext/Form/Module.bsl @@ -42,8 +42,6 @@ Элементы.Печать.Заголовок = НСтр("ru = 'Печать'"); КонецЕсли; - Элементы.ФормаУдалить.Видимость = (Объект.Автор = Пользователи.АвторизованныйПользователь()); - ОбновитьЗаголовок(); ОбновитьПолныйПуть(); ОбновитьПояснениеОблачногоСервиса(Объект.Ссылка); @@ -1065,15 +1063,6 @@ КонецПроцедуры -&НаКлиенте -Процедура Удалить(Команда) - - РаботаСФайламиСлужебныйКлиент.УдалитьДанные( - Новый ОписаниеОповещения("ПослеУдаленияДанных", ЭтотОбъект), - Объект.Ссылка, УникальныйИдентификатор); - -КонецПроцедуры - #КонецОбласти #КонецОбласти @@ -1190,13 +1179,6 @@ КонецПроцедуры -&НаКлиенте -Процедура ПослеУдаленияДанных(Результат, ДополнительныеПараметры) Экспорт - - Закрыть(); - -КонецПроцедуры - &НаСервере Процедура УдалитьИзСпискаПодписейИЗаписатьФайл(СтрокиДляОбработки) diff --git a/Конфигурация/Catalogs/ХранимыеДанныеЭПД/Forms/ФормаВыбора/Ext/Form.xml b/Конфигурация/Catalogs/ХранимыеДанныеЭПД/Forms/ФормаВыбора/Ext/Form.xml index b85190ee9..f9fbb9d2e 100644 --- a/Конфигурация/Catalogs/ХранимыеДанныеЭПД/Forms/ФормаВыбора/Ext/Form.xml +++ b/Конфигурация/Catalogs/ХранимыеДанныеЭПД/Forms/ФормаВыбора/Ext/Form.xml @@ -5,7 +5,6 @@ <AutoTitle>false</AutoTitle> <Group>Vertical</Group> <AutoCommandBar name="ФормаКоманднаяПанель" id="-1"> - <Autofill>false</Autofill> <ChildItems> <Button name="ФормаВыбрать" id="23"> <Type>CommandBarButton</Type> diff --git a/Конфигурация/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыБизнесПриложение/Ext/ManagerModule.bsl b/Конфигурация/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыБизнесПриложение/Ext/ManagerModule.bsl index 3e7a6971b..95e18c214 100644 --- a/Конфигурация/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыБизнесПриложение/Ext/ManagerModule.bsl +++ b/Конфигурация/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыБизнесПриложение/Ext/ManagerModule.bsl @@ -4,107 +4,11 @@ #Область ОбновлениеВерсииИБ -// Определяет настройки начального заполнения элементов. -// -// Параметры: -// Настройки - Структура - настройки заполнения -// * ПриНачальномЗаполненииЭлемента - Булево - Если Истина, то для каждого элемента будет -// вызвана процедура индивидуального заполнения ПриНачальномЗаполненииЭлемента. -Процедура ПриНастройкеНачальногоЗаполненияЭлементов(Настройки) Экспорт - - Настройки.ПриНачальномЗаполненииЭлемента = Истина; - -КонецПроцедуры - -// Смотри также ОбновлениеИнформационнойБазыПереопределяемый.ПриНастройкеНачальногоЗаполненияЭлемента -// -// Параметры: -// Объект - СправочникОбъект.ВидыКонтактнойИнформации - заполняемый объект. -// Данные - СтрокаТаблицыЗначений - данные заполнения объекта. -// ДополнительныеПараметры - Структура: -// * ПредопределенныеДанные - ТаблицаЗначений - данные заполненные в процедуре ПриНачальномЗаполненииЭлементов. -// -Процедура ПриНачальномЗаполненииЭлемента(Объект, Данные, ДополнительныеПараметры) Экспорт - - Объект.УстановитьНовыйКод(); - -КонецПроцедуры - -// Смотри также ОбновлениеИнформационнойБазыПереопределяемый.ПриНачальномЗаполненииЭлементов -// -// Параметры: -// КодыЯзыков - см. ОбновлениеИнформационнойБазыПереопределяемый.ПриНачальномЗаполненииЭлементов.КодыЯзыков -// Элементы - см. ОбновлениеИнформационнойБазыПереопределяемый.ПриНачальномЗаполненииЭлементов.Элементы -// ТабличныеЧасти - см. ОбновлениеИнформационнойБазыПереопределяемый.ПриНачальномЗаполненииЭлементов.ТабличныеЧасти -// -Процедура ПриНачальномЗаполненииЭлементов(КодыЯзыков, Элементы, ТабличныеЧасти) Экспорт - - Если Не ВозможностиПриложения.ЭтоБизнесПриложение() Тогда - Возврат; - КонецЕсли; - - Если НачальноеЗаполнениеВыполнено() Тогда - Возврат; - КонецЕсли; - - ПолноеИмяЗаказаПокупателя = Метаданные.Документы.ЗаказПокупателя.ПолноеИмя(); - ТипСтрока = Новый ОписаниеТипов("Строка"); - ТипДата = Новый ОписаниеТипов("Дата", , , Новый КвалификаторыДаты(ЧастиДаты.Дата)); - - Элемент = Элементы.Добавить(); - Элемент.Имя = "НомерДоговора"; - Элемент.Наименование = НСтр("ru = '№ договора'"); - Элемент.ТипЗначения = ТипСтрока; - Элемент.ИмяВладельца = ПолноеИмяЗаказаПокупателя; - - Элемент = Элементы.Добавить(); - Элемент.Имя = "ДатаДоговора"; - Элемент.Наименование = НСтр("ru = 'Дата договора'"); - Элемент.ТипЗначения = ТипДата; - Элемент.ИмяВладельца = ПолноеИмяЗаказаПокупателя; - - Элемент = Элементы.Добавить(); - Элемент.Имя = "РеквизитБизнесПриложение1"; - Элемент.Наименование = НСтр("ru = 'Стройка'"); - Элемент.ТипЗначения = ТипСтрока; - Элемент.ИмяВладельца = ПолноеИмяЗаказаПокупателя; - - Элемент = Элементы.Добавить(); - Элемент.Имя = "РеквизитБизнесПриложение2"; - Элемент.Наименование = НСтр("ru = 'Объект строительства'"); - Элемент.ТипЗначения = ТипСтрока; - Элемент.ИмяВладельца = ПолноеИмяЗаказаПокупателя; - - Элемент = Элементы.Добавить(); - Элемент.Имя = "НомерПлатежноРасчетногоДокумента"; - Элемент.Наименование = НСтр("ru = '№ платежно-расчетного документа'"); - Элемент.ТипЗначения = ТипСтрока; - Элемент.ИмяВладельца = ПолноеИмяЗаказаПокупателя; - - Элемент = Элементы.Добавить(); - Элемент.Имя = "ДатаПлатежноРасчетногоДокумента"; - Элемент.Наименование = НСтр("ru = 'Дата платежно-расчетного документа'"); - Элемент.ТипЗначения = ТипДата; - Элемент.ИмяВладельца = ПолноеИмяЗаказаПокупателя; - - Элемент = Элементы.Добавить(); - Элемент.Имя = "НомерСчетаФактурыНаАванс"; - Элемент.Наименование = НСтр("ru = '№ авансовой счет-фактуры'"); - Элемент.ТипЗначения = ТипСтрока; - Элемент.ИмяВладельца = ПолноеИмяЗаказаПокупателя; - - Элемент = Элементы.Добавить(); - Элемент.Имя = "ДатаСчетаФактурыНаАванс"; - Элемент.Наименование = НСтр("ru = 'Дата авансовой счет-фактуры'"); - Элемент.ТипЗначения = ТипДата; - Элемент.ИмяВладельца = ПолноеИмяЗаказаПокупателя; - -КонецПроцедуры - // См. СтандартныеПодсистемыСервер.ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод Процедура ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод(Методы) Экспорт Методы.Вставить("НачальноеЗаполнениеСвойств1"); + Методы.Вставить("НачальноеЗаполнениеСвойств2"); КонецПроцедуры @@ -221,8 +125,250 @@ КонецПроцедуры +// Начальное заполнение свойств 2 +// Исправление ошибки в версии 3.0.14 +// +// Параметры: +// Параметры - См. ОбновлениеИнформационнойБазыУНФ.ПриДобавленииОбработчиковОбновления +// +Процедура НачальноеЗаполнениеСвойств2(Параметры) Экспорт + + Если Не ВозможностиПриложения.ЭтоБизнесПриложение() Тогда + + ТекстСообщения = НСтр( + "ru='Процедура НачальноеЗаполнениеСвойств2 успешно отработала - это не бизнес-приложение'", + ОбщегоНазначения.КодОсновногоЯзыка()); + ЗаписьЖурналаРегистрации( + ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(), + УровеньЖурналаРегистрации.Информация, + Метаданные.ПланыВидовХарактеристик.ДополнительныеРеквизитыБизнесПриложение, , + ТекстСообщения); + + Параметры.ОбработкаЗавершена = Истина; + Возврат; + + КонецЕсли; + + Если НачальноеЗаполнениеВыполнено() Тогда + + ТекстСообщения = НСтр( + "ru='Процедура НачальноеЗаполнениеСвойств2 успешно отработала - данные заполнены'", + ОбщегоНазначения.КодОсновногоЯзыка()); + ЗаписьЖурналаРегистрации( + ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(), + УровеньЖурналаРегистрации.Информация, + Метаданные.ПланыВидовХарактеристик.ДополнительныеРеквизитыБизнесПриложение, , + ТекстСообщения); + + Параметры.ОбработкаЗавершена = Истина; + Возврат; + + КонецЕсли; + + ПолноеИмяЗаказаПокупателя = Метаданные.Документы.ЗаказПокупателя.ПолноеИмя(); + ТипСтрока = Новый ОписаниеТипов("Строка"); + ТипДата = Новый ОписаниеТипов("Дата", , , Новый КвалификаторыДаты(ЧастиДаты.Дата)); + + НачатьТранзакцию(); + + Попытка + + НовоеСвойство = СоздатьЭлемент(); + НовоеСвойство.Имя = "НомерДоговора"; + НовоеСвойство.Наименование = НСтр("ru = '№ договора'"); + НовоеСвойство.ТипЗначения = ТипСтрока; + НовоеСвойство.ИмяВладельца = ПолноеИмяЗаказаПокупателя; + ОбновлениеИнформационнойБазы.ЗаписатьДанные(НовоеСвойство); + + НовоеСвойство = СоздатьЭлемент(); + НовоеСвойство.Имя = "ДатаДоговора"; + НовоеСвойство.Наименование = НСтр("ru = 'Дата договора'"); + НовоеСвойство.ТипЗначения = ТипДата; + НовоеСвойство.ИмяВладельца = ПолноеИмяЗаказаПокупателя; + ОбновлениеИнформационнойБазы.ЗаписатьДанные(НовоеСвойство); + + НовоеСвойство = СоздатьЭлемент(); + НовоеСвойство.Имя = "РеквизитБизнесПриложение1"; + НовоеСвойство.Наименование = НСтр("ru = 'Стройка'"); + НовоеСвойство.ТипЗначения = ТипСтрока; + НовоеСвойство.ИмяВладельца = ПолноеИмяЗаказаПокупателя; + ОбновлениеИнформационнойБазы.ЗаписатьДанные(НовоеСвойство); + + НовоеСвойство = СоздатьЭлемент(); + НовоеСвойство.Имя = "РеквизитБизнесПриложение2"; + НовоеСвойство.Наименование = НСтр("ru = 'Объект строительства'"); + НовоеСвойство.ТипЗначения = ТипСтрока; + НовоеСвойство.ИмяВладельца = ПолноеИмяЗаказаПокупателя; + ОбновлениеИнформационнойБазы.ЗаписатьДанные(НовоеСвойство); + + НовоеСвойство = СоздатьЭлемент(); + НовоеСвойство.Имя = "НомерПлатежноРасчетногоДокумента"; + НовоеСвойство.Наименование = НСтр("ru = '№ платежно-расчетного документа'"); + НовоеСвойство.ТипЗначения = ТипСтрока; + НовоеСвойство.ИмяВладельца = ПолноеИмяЗаказаПокупателя; + ОбновлениеИнформационнойБазы.ЗаписатьДанные(НовоеСвойство); + + НовоеСвойство = СоздатьЭлемент(); + НовоеСвойство.Имя = "ДатаПлатежноРасчетногоДокумента"; + НовоеСвойство.Наименование = НСтр("ru = 'Дата платежно-расчетного документа'"); + НовоеСвойство.ТипЗначения = ТипДата; + НовоеСвойство.ИмяВладельца = ПолноеИмяЗаказаПокупателя; + ОбновлениеИнформационнойБазы.ЗаписатьДанные(НовоеСвойство); + + НовоеСвойство = СоздатьЭлемент(); + НовоеСвойство.Имя = "НомерСчетаФактурыНаАванс"; + НовоеСвойство.Наименование = НСтр("ru = '№ авансовой счет-фактуры'"); + НовоеСвойство.ТипЗначения = ТипСтрока; + НовоеСвойство.ИмяВладельца = ПолноеИмяЗаказаПокупателя; + ОбновлениеИнформационнойБазы.ЗаписатьДанные(НовоеСвойство); + + НовоеСвойство = СоздатьЭлемент(); + НовоеСвойство.Имя = "ДатаСчетаФактурыНаАванс"; + НовоеСвойство.Наименование = НСтр("ru = 'Дата авансовой счет-фактуры'"); + НовоеСвойство.ТипЗначения = ТипДата; + НовоеСвойство.ИмяВладельца = ПолноеИмяЗаказаПокупателя; + ОбновлениеИнформационнойБазы.ЗаписатьДанные(НовоеСвойство); + + ЗафиксироватьТранзакцию(); + + Исключение + + ОтменитьТранзакцию(); + + ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ТекстСообщения = НСтр("ru='Процедура НачальноеЗаполнениеСвойств2 неуспешно отработала по причине: + |%1'", ОбщегоНазначения.КодОсновногоЯзыка()); + ТекстСообщения = СтрШаблон(ТекстСообщения, ТекстОшибки); + ЗаписьЖурналаРегистрации( + ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(), + УровеньЖурналаРегистрации.Ошибка, + Метаданные.ПланыВидовХарактеристик.ДополнительныеРеквизитыБизнесПриложение, , + ТекстСообщения); + + Параметры.ОбработкаЗавершена = Ложь; + + КонецПопытки; + + ТекстСообщения = НСтр( + "ru='Процедура НачальноеЗаполнениеСвойств2 успешно отработала'", + ОбщегоНазначения.КодОсновногоЯзыка()); + ЗаписьЖурналаРегистрации( + ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(), + УровеньЖурналаРегистрации.Информация, + Метаданные.ПланыВидовХарактеристик.ДополнительныеРеквизитыБизнесПриложение, , + ТекстСообщения); + + Параметры.ОбработкаЗавершена = Истина; + +КонецПроцедуры + #КонецОбласти +// Обработчик, выполняющий заполнение свойств при переходе на вид приложения "Бизнес-приложение". +// +Процедура ПослеУстановкиВидаПриложения() Экспорт + + Если Не ВозможностиПриложения.ЭтоБизнесПриложение() Тогда + Возврат; + КонецЕсли; + + Если НачальноеЗаполнениеВыполнено() Тогда + Возврат; + КонецЕсли; + + ПолноеИмяЗаказаПокупателя = Метаданные.Документы.ЗаказПокупателя.ПолноеИмя(); + ТипСтрока = Новый ОписаниеТипов("Строка"); + ТипДата = Новый ОписаниеТипов("Дата", , , Новый КвалификаторыДаты(ЧастиДаты.Дата)); + + НачатьТранзакцию(); + + Попытка + + НовоеСвойство = СоздатьЭлемент(); + НовоеСвойство.Имя = "НомерДоговора"; + НовоеСвойство.Наименование = НСтр("ru = '№ договора'"); + НовоеСвойство.ТипЗначения = ТипСтрока; + НовоеСвойство.ИмяВладельца = ПолноеИмяЗаказаПокупателя; + НовоеСвойство.Записать(); + + НовоеСвойство = СоздатьЭлемент(); + НовоеСвойство.Имя = "ДатаДоговора"; + НовоеСвойство.Наименование = НСтр("ru = 'Дата договора'"); + НовоеСвойство.ТипЗначения = ТипДата; + НовоеСвойство.ИмяВладельца = ПолноеИмяЗаказаПокупателя; + НовоеСвойство.Записать(); + + НовоеСвойство = СоздатьЭлемент(); + НовоеСвойство.Имя = "РеквизитБизнесПриложение1"; + НовоеСвойство.Наименование = НСтр("ru = 'Стройка'"); + НовоеСвойство.ТипЗначения = ТипСтрока; + НовоеСвойство.ИмяВладельца = ПолноеИмяЗаказаПокупателя; + НовоеСвойство.Записать(); + + НовоеСвойство = СоздатьЭлемент(); + НовоеСвойство.Имя = "РеквизитБизнесПриложение2"; + НовоеСвойство.Наименование = НСтр("ru = 'Объект строительства'"); + НовоеСвойство.ТипЗначения = ТипСтрока; + НовоеСвойство.ИмяВладельца = ПолноеИмяЗаказаПокупателя; + НовоеСвойство.Записать(); + + НовоеСвойство = СоздатьЭлемент(); + НовоеСвойство.Имя = "НомерПлатежноРасчетногоДокумента"; + НовоеСвойство.Наименование = НСтр("ru = '№ платежно-расчетного документа'"); + НовоеСвойство.ТипЗначения = ТипСтрока; + НовоеСвойство.ИмяВладельца = ПолноеИмяЗаказаПокупателя; + НовоеСвойство.Записать(); + + НовоеСвойство = СоздатьЭлемент(); + НовоеСвойство.Имя = "ДатаПлатежноРасчетногоДокумента"; + НовоеСвойство.Наименование = НСтр("ru = 'Дата платежно-расчетного документа'"); + НовоеСвойство.ТипЗначения = ТипДата; + НовоеСвойство.ИмяВладельца = ПолноеИмяЗаказаПокупателя; + НовоеСвойство.Записать(); + + НовоеСвойство = СоздатьЭлемент(); + НовоеСвойство.Имя = "НомерСчетаФактурыНаАванс"; + НовоеСвойство.Наименование = НСтр("ru = '№ авансовой счет-фактуры'"); + НовоеСвойство.ТипЗначения = ТипСтрока; + НовоеСвойство.ИмяВладельца = ПолноеИмяЗаказаПокупателя; + НовоеСвойство.Записать(); + + НовоеСвойство = СоздатьЭлемент(); + НовоеСвойство.Имя = "ДатаСчетаФактурыНаАванс"; + НовоеСвойство.Наименование = НСтр("ru = 'Дата авансовой счет-фактуры'"); + НовоеСвойство.ТипЗначения = ТипДата; + НовоеСвойство.ИмяВладельца = ПолноеИмяЗаказаПокупателя; + НовоеСвойство.Записать(); + + ЗафиксироватьТранзакцию(); + + Исключение + + ОтменитьТранзакцию(); + + ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ТекстСообщения = НСтр("ru='Процедура ПослеУстановкиВидаПриложения неуспешно отработала по причине: + |%1'", ОбщегоНазначения.КодОсновногоЯзыка()); + ТекстСообщения = СтрШаблон(ТекстСообщения, ТекстОшибки); + ЗаписьЖурналаРегистрации( + ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(), + УровеньЖурналаРегистрации.Ошибка, + Метаданные.ПланыВидовХарактеристик.ДополнительныеРеквизитыБизнесПриложение, , + ТекстСообщения); + + КонецПопытки; + + ТекстСообщения = НСтр( + "ru='Процедура ПослеУстановкиВидаПриложения успешно отработала'", + ОбщегоНазначения.КодОсновногоЯзыка()); + ЗаписьЖурналаРегистрации( + ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(), + УровеньЖурналаРегистрации.Информация, + Метаданные.ПланыВидовХарактеристик.ДополнительныеРеквизитыБизнесПриложение, , + ТекстСообщения); + +КонецПроцедуры + // Функция - Список всех доступных реквизитов // // Возвращаемое значение: diff --git a/Конфигурация/ChartsOfCharacteristicTypes/НастройкиПользователей.xml b/Конфигурация/ChartsOfCharacteristicTypes/НастройкиПользователей.xml index 15af4f73a..d7c66d051 100644 --- a/Конфигурация/ChartsOfCharacteristicTypes/НастройкиПользователей.xml +++ b/Конфигурация/ChartsOfCharacteristicTypes/НастройкиПользователей.xml @@ -60,6 +60,7 @@ <v8:Type>cfg:CatalogRef.Подписи</v8:Type> <v8:Type>cfg:EnumRef.РежимыРаботыСОплатой</v8:Type> <v8:Type>cfg:CatalogRef.СостоянияЗаказовПоставщикам</v8:Type> + <v8:Type>cfg:EnumRef.ПоложениеТаблицыДетали</v8:Type> <v8:Type>cfg:CatalogRef.ФизическиеЛица</v8:Type> <v8:Type>cfg:CatalogRef.КатегорииНоменклатуры</v8:Type> <v8:Type>cfg:CatalogRef.ТранспортныеСредства</v8:Type> diff --git a/Конфигурация/ChartsOfCharacteristicTypes/НастройкиПользователей/Ext/ManagerModule.bsl b/Конфигурация/ChartsOfCharacteristicTypes/НастройкиПользователей/Ext/ManagerModule.bsl index cc080a97a..69a73b302 100644 --- a/Конфигурация/ChartsOfCharacteristicTypes/НастройкиПользователей/Ext/ManagerModule.bsl +++ b/Конфигурация/ChartsOfCharacteristicTypes/НастройкиПользователей/Ext/ManagerModule.bsl @@ -318,17 +318,76 @@ Процедура ЗаполнитьЭлементыГруппыВидимостьПредпросмотраВДокументах(Элементы, КодыЯзыков) - ДобавитьГруппу(Элементы, КодыЯзыков, "ВидимостьПредпросмотраВДокументах", - "ru = 'Видимость предпросмотра в документах'"); // @НСтр-1 + ДобавитьГруппу(Элементы, КодыЯзыков, "ПоложениеТаблицыДокументаВСписках", + "ru = 'Положение таблицы документа в списках'"); // @НСтр-1 ТипБулево = Новый ОписаниеТипов("Булево"); + ТипПеречислениеСсылка = Новый ОписаниеТипов("ПеречислениеСсылка.ПоложениеТаблицыДетали"); - ДобавитьЭлемент(Элементы, КодыЯзыков, "ПоказыватьПредпросмотрЗаказовПокупателей", - ВидимостьПредпросмотраВДокументах, ТипБулево, "ru = 'Показывать предпросмотр заказов покупателей'"); // @НСтр-1 - - ДобавитьЭлемент(Элементы, КодыЯзыков, "ПоказыватьПредпросмотрЗаказНарядов", ВидимостьПредпросмотраВДокументах, - ТипБулево, "ru = 'Показывать предпросмотр заказ-нарядов'"); // @НСтр-1 + ДобавитьЭлемент(Элементы, КодыЯзыков, "УдалитьПоказыватьПредпросмотрЗаказовПокупателей", + ПоложениеТаблицыДокументаВСписках, ТипБулево, + "ru = '(Не используется) Показывать предпросмотр заказов покупателей'"); // @НСтр-1 + ДобавитьЭлемент(Элементы, КодыЯзыков, "УдалитьПоказыватьПредпросмотрЗаказНарядов", + ПоложениеТаблицыДокументаВСписках, ТипБулево, + "ru = '(Не используется) Показывать предпросмотр заказ-нарядов'"); // @НСтр-1 + + ДобавитьЭлемент(Элементы, КодыЯзыков, "ПоложениеТаблицыДеталиВЗаказахПокупателей", + ПоложениеТаблицыДокументаВСписках, ТипПеречислениеСсылка, + "ru = 'Положение таблицы ""Товары, услуги"" в заказах покупателей'"); // @НСтр-1 + + ДобавитьЭлемент(Элементы, КодыЯзыков, "ПоложениеТаблицыДеталиВЗаказНарядах", + ПоложениеТаблицыДокументаВСписках, ТипПеречислениеСсылка, + "ru = 'Положение таблицы ""Работы, услуги"" в заказ-нарядах'"); // @НСтр-1 + + ДобавитьЭлемент(Элементы, КодыЯзыков, "ПоложениеТаблицыДеталиВСчетахНаОплату", + ПоложениеТаблицыДокументаВСписках, ТипПеречислениеСсылка, + "ru = 'Положение таблицы ""Товары, услуги"" в счетах на оплату'"); // @НСтр-1 + + ДобавитьЭлемент(Элементы, КодыЯзыков, "ПоложениеТаблицыДеталиВРасходныхНакладных", + ПоложениеТаблицыДокументаВСписках, ТипПеречислениеСсылка, + "ru = 'Положение таблицы ""Товары, услуги"" в расходных накладных'"); // @НСтр-1 + + ДобавитьЭлемент(Элементы, КодыЯзыков, "ПоложениеТаблицыДеталиВПриходныхНакладных", + ПоложениеТаблицыДокументаВСписках, ТипПеречислениеСсылка, + "ru = 'Положение таблицы ""Товары"" в приходных накладных'"); // @НСтр-1 + + ДобавитьЭлемент(Элементы, КодыЯзыков, "ПоложениеТаблицыДеталиВЗаказахПоставщикам", + ПоложениеТаблицыДокументаВСписках, ТипПеречислениеСсылка, + "ru = 'Положение таблицы ""Товары, услуги"" в заказах поставщикам'"); // @НСтр-1 + + ДобавитьЭлемент(Элементы, КодыЯзыков, "ПоложениеТаблицыДеталиВДополнительныхРасходах", + ПоложениеТаблицыДокументаВСписках, ТипПеречислениеСсылка, + "ru = 'Положение таблицы ""Услуги"" в дополнительных расходах'"); // @НСтр-1 + + ДобавитьЭлемент(Элементы, КодыЯзыков, "ПоложениеТаблицыДеталиВИнвентаризацияхЗапасов", + ПоложениеТаблицыДокументаВСписках, ТипПеречислениеСсылка, + "ru = 'Положение таблицы ""Запасы"" в инвентаризациях запасов'"); // @НСтр-1 + + ДобавитьЭлемент(Элементы, КодыЯзыков, "ПоложениеТаблицыДеталиВСчетахНаОплатуПолученных", + ПоложениеТаблицыДокументаВСписках, ТипПеречислениеСсылка, + "ru = 'Положение таблицы ""Товары, услуги"" в счетах на оплату полученных'"); // @НСтр-1 + + ДобавитьЭлемент(Элементы, КодыЯзыков, "ПоложениеТаблицыДеталиВУстановкахЦенНоменклатуры", + ПоложениеТаблицыДокументаВСписках, ТипПеречислениеСсылка, + "ru = 'Положение таблицы ""Товары, услуги"" в установках цен номенклатуры'"); // @НСтр-1 + + ДобавитьЭлемент(Элементы, КодыЯзыков, "ПоложениеТаблицыДеталиВАктахОРасхождениях", + ПоложениеТаблицыДокументаВСписках, ТипПеречислениеСсылка, + "ru = 'Положение таблицы ""Товары"" в актах о расхождениях'"); // @НСтр-1 + + ДобавитьЭлемент(Элементы, КодыЯзыков, "ПоложениеТаблицыДеталиВРасходахПриИмпорте", + ПоложениеТаблицыДокументаВСписках, ТипПеречислениеСсылка, + "ru = 'Положение таблицы ""Запасы"" в расходах при импорте'"); // @НСтр-1 + + ДобавитьЭлемент(Элементы, КодыЯзыков, "ПоложениеТаблицыДеталиВКорректировкахПоступлений", + ПоложениеТаблицыДокументаВСписках, ТипПеречислениеСсылка, + "ru = 'Положение таблицы ""Товары"" в корректировках поступлений'"); // @НСтр-1 + + ДобавитьЭлемент(Элементы, КодыЯзыков, "ПоложениеТаблицыДеталиВКорректировкахРеализаций", + ПоложениеТаблицыДокументаВСписках, ТипПеречислениеСсылка, + "ru = 'Положение таблицы ""Товары, услуги"" в корректировках реализаций'"); // @НСтр-1 + КонецПроцедуры Процедура ЗаполнитьЭлементыГруппыДеньгиИВзаиморасчеты(Элементы, КодыЯзыков) diff --git a/Конфигурация/ChartsOfCharacteristicTypes/НастройкиПользователей/Ext/Predefined.xml b/Конфигурация/ChartsOfCharacteristicTypes/НастройкиПользователей/Ext/Predefined.xml index abbfca346..67757650d 100644 --- a/Конфигурация/ChartsOfCharacteristicTypes/НастройкиПользователей/Ext/Predefined.xml +++ b/Конфигурация/ChartsOfCharacteristicTypes/НастройкиПользователей/Ext/Predefined.xml @@ -514,30 +514,156 @@ </ChildItems> </Item> <Item id="5ba2f96c-02ef-49a0-9008-e4f1b3b31d74"> - <Name>ВидимостьПредпросмотраВДокументах</Name> + <Name>ПоложениеТаблицыДокументаВСписках</Name> <Code/> - <Description>Видимость предпросмотра в документах</Description> + <Description>Положение таблицы документа в списках</Description> <Type/> <IsFolder>true</IsFolder> <ChildItems> <Item id="7f3cba15-bb1f-4f2e-aa90-9fb70488da06"> - <Name>ПоказыватьПредпросмотрЗаказНарядов</Name> + <Name>УдалитьПоказыватьПредпросмотрЗаказНарядов</Name> <Code/> - <Description>Показывать предпросмотр заказ-нарядов</Description> + <Description>(Не используется) Показывать предпросмотр заказ-нарядов</Description> <Type> <v8:Type>xs:boolean</v8:Type> </Type> <IsFolder>false</IsFolder> </Item> <Item id="9d7141c8-4d94-4cac-b1f8-81593fa1e3bd"> - <Name>ПоказыватьПредпросмотрЗаказовПокупателей</Name> + <Name>УдалитьПоказыватьПредпросмотрЗаказовПокупателей</Name> <Code/> - <Description>Показывать предпросмотр заказов покупателей</Description> + <Description>(Не используется) Удалить показывать предпросмотр заказов покупателей</Description> <Type> <v8:Type>xs:boolean</v8:Type> </Type> <IsFolder>false</IsFolder> </Item> + <Item id="75fbd796-ece7-408a-8116-42c06b6fe5f1"> + <Name>ПоложениеТаблицыДеталиВЗаказахПокупателей</Name> + <Code/> + <Description>Положение таблицы "Товары, услуги" в заказах покупателей</Description> + <Type> + <v8:Type xmlns:d6p1="http://v8.1c.ru/8.1/data/enterprise/current-config">d6p1:EnumRef.ПоложениеТаблицыДетали</v8:Type> + </Type> + <IsFolder>false</IsFolder> + </Item> + <Item id="b9b377db-3c13-4f34-becc-b045bd69bcbb"> + <Name>ПоложениеТаблицыДеталиВЗаказНарядах</Name> + <Code/> + <Description>Положение таблицы "Работы, услуги" в заказ-нарядах</Description> + <Type> + <v8:Type xmlns:d6p1="http://v8.1c.ru/8.1/data/enterprise/current-config">d6p1:EnumRef.ПоложениеТаблицыДетали</v8:Type> + </Type> + <IsFolder>false</IsFolder> + </Item> + <Item id="b8a816ef-b3c8-4abe-847c-ba327b1b53d3"> + <Name>ПоложениеТаблицыДеталиВСчетахНаОплату</Name> + <Code/> + <Description>Положение таблицы "Товары, услуги" в счетах на оплату</Description> + <Type> + <v8:Type xmlns:d6p1="http://v8.1c.ru/8.1/data/enterprise/current-config">d6p1:EnumRef.ПоложениеТаблицыДетали</v8:Type> + </Type> + <IsFolder>false</IsFolder> + </Item> + <Item id="fd11e9f3-1c30-4ea8-ac3c-3a70440de49b"> + <Name>ПоложениеТаблицыДеталиВРасходныхНакладных</Name> + <Code/> + <Description>Положение таблицы "Товары, услуги" в расходных накладных</Description> + <Type> + <v8:Type xmlns:d6p1="http://v8.1c.ru/8.1/data/enterprise/current-config">d6p1:EnumRef.ПоложениеТаблицыДетали</v8:Type> + </Type> + <IsFolder>false</IsFolder> + </Item> + <Item id="266af894-9a25-44aa-bf33-d58fa34928e0"> + <Name>ПоложениеТаблицыДеталиВПриходныхНакладных</Name> + <Code/> + <Description>Положение таблицы "Товары" в приходных накладных</Description> + <Type> + <v8:Type xmlns:d6p1="http://v8.1c.ru/8.1/data/enterprise/current-config">d6p1:EnumRef.ПоложениеТаблицыДетали</v8:Type> + </Type> + <IsFolder>false</IsFolder> + </Item> + <Item id="f8e156b4-748e-4e51-8ea6-db86169048c7"> + <Name>ПоложениеТаблицыДеталиВЗаказахПоставщикам</Name> + <Code/> + <Description>Положение таблицы "Товары, услуги" в заказах поставщикам</Description> + <Type> + <v8:Type xmlns:d6p1="http://v8.1c.ru/8.1/data/enterprise/current-config">d6p1:EnumRef.ПоложениеТаблицыДетали</v8:Type> + </Type> + <IsFolder>false</IsFolder> + </Item> + <Item id="d7d2fbda-4204-49c5-a32a-ffbcba5adba9"> + <Name>ПоложениеТаблицыДеталиВДополнительныхРасходах</Name> + <Code/> + <Description>Положение таблицы "Услуги" в дополнительных расходах</Description> + <Type> + <v8:Type xmlns:d6p1="http://v8.1c.ru/8.1/data/enterprise/current-config">d6p1:EnumRef.ПоложениеТаблицыДетали</v8:Type> + </Type> + <IsFolder>false</IsFolder> + </Item> + <Item id="8bc5fe00-7ebf-4405-b2ab-9de64f6d6bb8"> + <Name>ПоложениеТаблицыДеталиВИнвентаризацияхЗапасов</Name> + <Code/> + <Description>Положение таблицы "Запасы" в инвентаризациях запасов</Description> + <Type> + <v8:Type xmlns:d6p1="http://v8.1c.ru/8.1/data/enterprise/current-config">d6p1:EnumRef.ПоложениеТаблицыДетали</v8:Type> + </Type> + <IsFolder>false</IsFolder> + </Item> + <Item id="1d00439e-2cc6-4591-98d4-a5ce91692df0"> + <Name>ПоложениеТаблицыДеталиВСчетахНаОплатуПолученных</Name> + <Code/> + <Description>Положение таблицы "Товары, услуги" в счетах на оплату полученных</Description> + <Type> + <v8:Type xmlns:d6p1="http://v8.1c.ru/8.1/data/enterprise/current-config">d6p1:EnumRef.ПоложениеТаблицыДетали</v8:Type> + </Type> + <IsFolder>false</IsFolder> + </Item> + <Item id="d0e41d74-e51d-4ff6-b7e4-f3c33a1c6f37"> + <Name>ПоложениеТаблицыДеталиВУстановкахЦенНоменклатуры</Name> + <Code/> + <Description>Положение таблицы "Товары, услуги" в установках цен номенклатуры</Description> + <Type> + <v8:Type xmlns:d6p1="http://v8.1c.ru/8.1/data/enterprise/current-config">d6p1:EnumRef.ПоложениеТаблицыДетали</v8:Type> + </Type> + <IsFolder>false</IsFolder> + </Item> + <Item id="27349da8-fed5-4ceb-af58-bbd91bdf4027"> + <Name>ПоложениеТаблицыДеталиВАктахОРасхождениях</Name> + <Code/> + <Description>Положение таблицы "Товары" в актах о расхождениях</Description> + <Type> + <v8:Type xmlns:d6p1="http://v8.1c.ru/8.1/data/enterprise/current-config">d6p1:EnumRef.ПоложениеТаблицыДетали</v8:Type> + </Type> + <IsFolder>false</IsFolder> + </Item> + <Item id="a69e606e-a664-4e46-9b0d-54f498b6d76a"> + <Name>ПоложениеТаблицыДеталиВРасходахПриИмпорте</Name> + <Code/> + <Description>Положение таблицы "Запасы" в расходах при импорте</Description> + <Type> + <v8:Type xmlns:d6p1="http://v8.1c.ru/8.1/data/enterprise/current-config">d6p1:EnumRef.ПоложениеТаблицыДетали</v8:Type> + </Type> + <IsFolder>false</IsFolder> + </Item> + <Item id="64075f06-26f9-4dd0-9022-064dbeaa002e"> + <Name>ПоложениеТаблицыДеталиВКорректировкахПоступлений</Name> + <Code/> + <Description>Положение таблицы "Товары" в корректировках поступлений</Description> + <Type> + <v8:Type xmlns:d6p1="http://v8.1c.ru/8.1/data/enterprise/current-config">d6p1:EnumRef.ПоложениеТаблицыДетали</v8:Type> + </Type> + <IsFolder>false</IsFolder> + </Item> + <Item id="d2723f3f-419a-452a-a43a-467b1cb218e5"> + <Name>ПоложениеТаблицыДеталиВКорректировкахРеализаций</Name> + <Code/> + <Description>Положение таблицы "Товары, услуги" в корректировках реализаций</Description> + <Type> + <v8:Type xmlns:d6p1="http://v8.1c.ru/8.1/data/enterprise/current-config">d6p1:EnumRef.ПоложениеТаблицыДетали</v8:Type> + </Type> + <IsFolder>false</IsFolder> + </Item> </ChildItems> </Item> <Item id="86f9eef6-5565-4b37-a37b-e3c4aaad8cc6"> diff --git a/Конфигурация/CommonAttributes/ОбластьДанныхОсновныеДанные.xml b/Конфигурация/CommonAttributes/ОбластьДанныхОсновныеДанные.xml index 88b6ce67f..c0c35e452 100644 --- a/Конфигурация/CommonAttributes/ОбластьДанныхОсновныеДанные.xml +++ b/Конфигурация/CommonAttributes/ОбластьДанныхОсновныеДанные.xml @@ -2321,7 +2321,7 @@ <xr:ConditionalSeparation/> </xr:Item> <xr:Item> - <xr:Metadata>ScheduledJob.ОбновлениеИдентификаторовКонтрагентовБизнесСети</xr:Metadata> + <xr:Metadata>ScheduledJob.ОбновлениеИдентификаторовБизнесСети</xr:Metadata> <xr:Use>DontUse</xr:Use> <xr:ConditionalSeparation/> </xr:Item> diff --git a/Конфигурация/CommonCommands/ПолучитьНастройкиСинхронизацииДляДругойПрограммы/Ext/CommandModule.bsl b/Конфигурация/CommonCommands/ПолучитьНастройкиСинхронизацииДляДругойПрограммы/Ext/CommandModule.bsl index 1a4d48785..6a383eb98 100644 --- a/Конфигурация/CommonCommands/ПолучитьНастройкиСинхронизацииДляДругойПрограммы/Ext/CommandModule.bsl +++ b/Конфигурация/CommonCommands/ПолучитьНастройкиСинхронизацииДляДругойПрограммы/Ext/CommandModule.bsl @@ -101,17 +101,7 @@ Если ЗначениеЗаполнено(СтрокаНастроекПодключенияXML) Тогда - ИмяВременногоФайла = ПолучитьИмяВременногоФайла(); - - Запись = Новый ЗаписьТекста; - Запись.Открыть(ИмяВременногоФайла, "UTF-8"); - Запись.Записать(СтрокаНастроекПодключенияXML); - Запись.Закрыть(); - - АдресНастроекПодключенияXML = ПоместитьВоВременноеХранилище( - Новый ДвоичныеДанные(ИмяВременногоФайла)); - - УдалитьФайлы(ИмяВременногоФайла); + АдресНастроекПодключенияXML = АдресНастройкиПодключения(СтрокаНастроекПодключенияXML); КонецЕсли; @@ -119,17 +109,7 @@ Если ЗначениеЗаполнено(СтрокаНастроекПодключенияJSON) Тогда - ИмяВременногоФайла = ПолучитьИмяВременногоФайла(); - - Запись = Новый ЗаписьТекста; - Запись.Открыть(ИмяВременногоФайла, "UTF-8"); - Запись.Записать(СтрокаНастроекПодключенияJSON); - Запись.Закрыть(); - - АдресНастроекПодключенияJSON = ПоместитьВоВременноеХранилище( - Новый ДвоичныеДанные(ИмяВременногоФайла)); - - УдалитьФайлы(ИмяВременногоФайла); + АдресНастроекПодключенияJSON = АдресНастройкиПодключения(СтрокаНастроекПодключенияJSON); КонецЕсли; @@ -169,4 +149,16 @@ КонецФункции +&НаСервере +Функция АдресНастройкиПодключения(СтрокаНастроекПодключения) + + Поток = Новый ПотокВПамяти; + ЗаписьДанных = Новый ЗаписьДанных(Поток, "UTF-8",,,, Истина); + ЗаписьДанных.ЗаписатьСимволы(СтрокаНастроекПодключения); + АдресНастроекПодключения = ПоместитьВоВременноеХранилище(Поток.ЗакрытьИПолучитьДвоичныеДанные()); + + Возврат АдресНастроекПодключения; + +КонецФункции + #КонецОбласти diff --git a/Конфигурация/CommonForms/ВводНастроекОтправкиЧерезСервис1СEDI.xml b/Конфигурация/CommonForms/ВводНастроекОтправкиЧерезСервис1СEDI.xml new file mode 100644 index 000000000..656f27b4f --- /dev/null +++ b/Конфигурация/CommonForms/ВводНастроекОтправкиЧерезСервис1СEDI.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8"?> +<MetaDataObject xmlns="http://v8.1c.ru/8.3/MDClasses" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:cmi="http://v8.1c.ru/8.2/managed-application/cmi" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:pal="http://v8.1c.ru/8.1/data/ui/colors/palette" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xen="http://v8.1c.ru/8.3/xcf/enums" xmlns:xpr="http://v8.1c.ru/8.3/xcf/predef" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.21"> + <CommonForm uuid="b13b89c6-d54f-4e20-9d74-591e5d63b5c4"> + <Properties> + <Name>ВводНастроекОтправкиЧерезСервис1СEDI</Name> + <Synonym> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Ввод настроек отправки через сервис 1С:EDI</v8:content> + </v8:item> + </Synonym> + <Comment/> + <FormType>Managed</FormType> + <IncludeHelpInContents>false</IncludeHelpInContents> + <UsePurposes> + <v8:Value xsi:type="app:ApplicationUsePurpose">PlatformApplication</v8:Value> + <v8:Value xsi:type="app:ApplicationUsePurpose">MobilePlatformApplication</v8:Value> + </UsePurposes> + <UseInInterfaceCompatibilityMode>Any</UseInInterfaceCompatibilityMode> + <UseStandardCommands>false</UseStandardCommands> + <ExtendedPresentation/> + <Explanation/> + </Properties> + </CommonForm> +</MetaDataObject> \ No newline at end of file diff --git a/Конфигурация/CommonForms/ВводНастроекОтправкиЧерезСервис1СEDI/Ext/Form.xml b/Конфигурация/CommonForms/ВводНастроекОтправкиЧерезСервис1СEDI/Ext/Form.xml new file mode 100644 index 000000000..6147c05fc --- /dev/null +++ b/Конфигурация/CommonForms/ВводНастроекОтправкиЧерезСервис1СEDI/Ext/Form.xml @@ -0,0 +1,772 @@ +<?xml version="1.0" encoding="UTF-8"?> +<Form xmlns="http://v8.1c.ru/8.3/xcf/logform" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:dcscor="http://v8.1c.ru/8.1/data-composition-system/core" xmlns:dcssch="http://v8.1c.ru/8.1/data-composition-system/schema" xmlns:dcsset="http://v8.1c.ru/8.1/data-composition-system/settings" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:pal="http://v8.1c.ru/8.1/data/ui/colors/palette" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.21"> + <Title> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Формирование настроек обмена</v8:content> + </v8:item> + + DontBlock + false + Vertical + Double + + false + + + + + + ПриОткрытии + ПриСозданииНаСервере + ОбработкаПроверкиЗаполненияНаСервере + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Страницы формы</v8:content> + </v8:item> + + true + true + None + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Основная</v8:content> + </v8:item> + + true + true + Vertical + Double + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Важные сообщения</v8:content> + </v8:item> + + None + false + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Организация (%Представление%)</v8:content> + </v8:item> + + HorizontalIfPossible + WeakSeparation + true + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Организация (страницы)</v8:content> + </v8:item> + + None + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Организация (ввод идентификатора)</v8:content> + </v8:item> + + Vertical + false + + + + ИдентификаторОрганизации + + + ru + Данные можно уточнить у оператора + + + Button + + + ru + Введите идентификатор организации + + + + + + ИдентификаторОрганизацииАвтоПодбор + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Организация (длительная операция)</v8:content> + </v8:item> + + AlwaysHorizontal + Center + false + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Длительная операция (картинка)</v8:content> + </v8:item> + + + CommonPicture.ДлительнаяОперация16 + false + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Выполняется поиск идентификатора ЭПД.</v8:content> + </v8:item> + + + + + + + + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Контрагент (%Представление%)</v8:content> + </v8:item> + + HorizontalIfPossible + WeakSeparation + true + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Контрагент (страницы)</v8:content> + </v8:item> + + None + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Контрагент (ввод идентификатора)</v8:content> + </v8:item> + + Vertical + false + + + + ИдентификаторКонтрагента + + + ru + Данные можно уточнить у оператора + + + Button + + + ru + Введите идентификатор контрагента + + + + + + ИдентификаторКонтрагентаАвтоПодбор + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Контрагент (длительная операция)</v8:content> + </v8:item> + + AlwaysHorizontal + Center + false + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Длительная операция (картинка)</v8:content> + </v8:item> + + + CommonPicture.ДлительнаяОперация16 + false + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Выполняется поиск идентификатора ЭПД.</v8:content> + </v8:item> + + + + + + + + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Перевозчик (%Представление%)</v8:content> + </v8:item> + + HorizontalIfPossible + WeakSeparation + true + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Перевозчик (страницы)</v8:content> + </v8:item> + + None + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Перевозчик (ввод идентификатора)</v8:content> + </v8:item> + + Vertical + false + + + + ИдентификаторПеревозчика + + + ru + Данные можно уточнить у оператора + + + Button + + + ru + Введите идентификатор перевозчика + + + + + + ИдентификаторПеревозчикаАвтоПодбор + + + + + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Подписание документов ЭПД</v8:content> + </v8:item> + + Vertical + WeakSeparation + true + + + + Сертификат + + + ru + Для подписания документов ЭПД + + + + + + + Доверенность + + + ru + Для подписания документов ЭПД + + + + + + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Страница информация</v8:content> + </v8:item> + + + + ru + Страница информация + + + true + true + Vertical + Double + + + + false + false + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Не удалось получить идентификатор грузоотправителя для обмена ЭПД через Сислинк. + + +Для подключения обмена ЭПД с торговыми сетями обратитесь, пожалуйста, в отдел продаж - edipart@doclink.ru</v8:content> + </v8:item> + + + + + + false + false + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Ввести идентификатор вручную</v8:content> + </v8:item> + + true + + + + НадписьВернутьсяНаОсновнуюНажатие + + + + + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Сертификат</v8:content> + </v8:item> + + + cfg:CatalogRef.СертификатыКлючейЭлектроннойПодписиИШифрования + + ShowError + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Доверенность</v8:content> + </v8:item> + + + cfg:DefinedType.МашиночитаемаяДоверенность + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Организация</v8:content> + </v8:item> + + + cfg:DefinedType.Организация + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Контрагент</v8:content> + </v8:item> + + + cfg:DefinedType.УчастникЭДО + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Перевозчик</v8:content> + </v8:item> + + + cfg:DefinedType.УчастникЭДО + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Идентификатор организации</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + ShowError + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Идентификатор контрагента</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + ShowError + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Идентификатор перевозчика</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + ShowError + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Вид документа</v8:content> + </v8:item> + + + cfg:CatalogRef.ВидыДокументовЭДО + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Установлен идентификатор организации</v8:content> + </v8:item> + + + xs:boolean + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Установлен идентификатор перевозчика</v8:content> + </v8:item> + + + xs:boolean + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Установлен идентификатор контрагента</v8:content> + </v8:item> + + + xs:boolean + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Ожидается получение идентификатора перевозчика</v8:content> + </v8:item> + + + xs:boolean + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Ожидается получение идентификатора организации</v8:content> + </v8:item> + + + xs:boolean + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Ожидается получение идентификатора контрагента</v8:content> + </v8:item> + + + xs:boolean + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Организация представление</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Контрагент представление</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Перевозчик представление</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Длительная операция</v8:content> + </v8:item> + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Фоновое задание запущено</v8:content> + </v8:item> + + + xs:boolean + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Идентификатор контрагента список выбора</v8:content> + </v8:item> + + + v8:ValueListType + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Идентификатор организации список выбора</v8:content> + </v8:item> + + + v8:ValueListType + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Идентификатор перевозчика список выбора</v8:content> + </v8:item> + + + v8:ValueListType + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Отобразить страницу информации</v8:content> + </v8:item> + + + xs:boolean + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Указать вручную</v8:content> + </v8:item> + + ОрганизацияУказатьВручную + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Указать вручную</v8:content> + </v8:item> + + КонтрагентУказатьВручную + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Продолжить</v8:content> + </v8:item> + + ПродолжитьОтправку + + + + + + cfg:AnyIBRef + + + + + cfg:AnyIBRef + + + + + cfg:AnyIBRef + + + + + cfg:CatalogRef.ВидыДокументовЭДО + + + + \ No newline at end of file diff --git a/Конфигурация/CommonForms/ВводНастроекОтправкиЧерезСервис1СEDI/Ext/Form/Module.bsl b/Конфигурация/CommonForms/ВводНастроекОтправкиЧерезСервис1СEDI/Ext/Form/Module.bsl new file mode 100644 index 000000000..acc78ff07 --- /dev/null +++ b/Конфигурация/CommonForms/ВводНастроекОтправкиЧерезСервис1СEDI/Ext/Form/Module.bsl @@ -0,0 +1,753 @@ +// @strict-types + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + ПрочитатьПараметрыФормы(); + ЗапуститьДлительнуюОперациюПолученияИдентификаторов(); + ОбновитьОтображениеФормыПриСозданииНаСервере(); + ОбновитьОтображениеФормы(ЭтотОбъект); +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + НачатьОжиданиеПолученияИдентификаторовЭПД(); +КонецПроцедуры + +&НаСервере +Процедура ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты) + + Если Не ИдентификаторыУникальны() Тогда + ТекстСообщения = + НСтр( + "ru = 'Идентификаторы участников не должны совпадать'", + ОбщегоНазначения.КодОсновногоЯзыка()); + ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, , , , Отказ); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы + +&НаКлиенте +Процедура ИдентификаторОрганизацииАвтоПодбор( + Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка) + ИдентификаторАвтоПодбор(Текст, ДанныеВыбора, ИдентификаторОрганизацииСписокВыбора, СтандартнаяОбработка); +КонецПроцедуры + +&НаКлиенте +Процедура ИдентификаторКонтрагентаАвтоПодбор( + Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка) + ИдентификаторАвтоПодбор(Текст, ДанныеВыбора, ИдентификаторКонтрагентаСписокВыбора, СтандартнаяОбработка); +КонецПроцедуры + +&НаКлиенте +Процедура ИдентификаторПеревозчикаАвтоПодбор( + Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка) + ИдентификаторАвтоПодбор(Текст, ДанныеВыбора, ИдентификаторПеревозчикаСписокВыбора, СтандартнаяОбработка); +КонецПроцедуры + +&НаКлиенте +Процедура ИдентификаторОрганизацииПриИзменении(Элемент) + СервисEDIСлужебныйКлиентСервер.НормализоватьИдентификатор(ИдентификаторОрганизации); +КонецПроцедуры + +&НаКлиенте +Процедура ИдентификаторКонтрагентаПриИзменении(Элемент) + СервисEDIСлужебныйКлиентСервер.НормализоватьИдентификатор(ИдентификаторКонтрагента); +КонецПроцедуры + +&НаКлиенте +Процедура ИдентификаторПеревозчикаПриИзменении(Элемент) + СервисEDIСлужебныйКлиентСервер.НормализоватьИдентификатор(ИдентификаторПеревозчика); +КонецПроцедуры + +&НаКлиенте +Процедура НадписьВернутьсяНаОсновнуюНажатие(Элемент) + ОтобразитьСтраницуИнформации = Ложь; + ОбновитьОтображениеФормы(ЭтотОбъект); +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура ОрганизацияУказатьВручную(Команда) + ОжидаетсяПолучениеИдентификатораОрганизации = Ложь; + ВыполнитьКонтрольДлительнойОперации(); + ОбновитьОтображениеФормы(ЭтотОбъект); +КонецПроцедуры + +&НаКлиенте +Процедура КонтрагентУказатьВручную(Команда) + ОжидаетсяПолучениеИдентификатораКонтрагента = Ложь; + ВыполнитьКонтрольДлительнойОперации(); + ОбновитьОтображениеФормы(ЭтотОбъект); +КонецПроцедуры + +&НаКлиенте +Процедура ПродолжитьОтправку(Команда) + + Если Не ПроверитьЗаполнение() Тогда + Возврат; + КонецЕсли; + + ЗаписатьДанныеНаСервере(); + Закрыть(); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +#Область НастройкиОбмена + +// Параметры: +// НастройкиОбмена - См. НастройкиОтправкиЭДО.НастройкиОтправки +// +// Возвращаемое значение: +// Булево +&НаСервереБезКонтекста +Функция УстановленыИдентификаторыНастроекОбмена(Знач НастройкиОбмена) + + Если НастройкиОбмена = Неопределено Тогда + Возврат Ложь; + КонецЕсли; + + Возврат Не ПустаяСтрока(НастройкиОбмена.ИдентификаторОтправителя) + И Не ПустаяСтрока(НастройкиОбмена.ИдентификаторПолучателя); + +КонецФункции + +&НаСервере +Процедура ПрочитатьНастройкиОбмена() + + ИдентификаторыОрганизации = Новый Массив; // Массив Из Строка + + НастройкиОбменаКонтрагент = СервисEDIСлужебный.НастройкиОбмена(Организация, Контрагент, ВидДокумента); + НастройкиОбменаПеревозчик = СервисEDIСлужебный.НастройкиОбмена(Организация, Перевозчик, ВидДокумента); + + Если УстановленыИдентификаторыНастроекОбмена(НастройкиОбменаКонтрагент) Тогда + + ИдентификаторыОрганизации.Добавить(НастройкиОбменаКонтрагент.ИдентификаторОтправителя); + ИдентификаторКонтрагента = НастройкиОбменаКонтрагент.ИдентификаторПолучателя; + УстановленИдентификаторКонтрагента = Истина; + + КонецЕсли; + + Если УстановленыИдентификаторыНастроекОбмена(НастройкиОбменаПеревозчик) Тогда + + ИдентификаторыОрганизации.Добавить(НастройкиОбменаПеревозчик.ИдентификаторОтправителя); + ИдентификаторПеревозчика = НастройкиОбменаПеревозчик.ИдентификаторПолучателя; + УстановленИдентификаторПеревозчика = Истина; + + КонецЕсли; + + ИдентификаторыОрганизации = ОбщегоНазначенияКлиентСервер.СвернутьМассив(ИдентификаторыОрганизации); + + Если ИдентификаторыОрганизации.Количество() = 1 Тогда + ИдентификаторОрганизации = ИдентификаторыОрганизации[0]; + УстановленИдентификаторОрганизации = Истина; + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область ПараметрыФормы + +// Параметры: +// Контекст - Строка +// ИмяПараметра - Строка +// ЗначениеПараметра - ЛюбаяСсылка +&НаСервере +Процедура ПроверитьЗаполненность(Знач Контекст, Знач ИмяПараметра, Знач ЗначениеПараметра) + + ОбщегоНазначенияКлиентСервер.Проверить( + ЗначениеЗаполнено(ЗначениеПараметра), + СтрШаблон( + НСтр( + "ru = 'Значение обязательного параметра формы %1 не заполнено'", + ОбщегоНазначения.КодОсновногоЯзыка()), + ИмяПараметра), + Контекст); + +КонецПроцедуры + +&НаСервере +Процедура ПроверитьПараметрыФормы() + + ПроверитьЗаполненность("ПроверитьПараметрыФормы", "Организация" , Организация); + ПроверитьЗаполненность("ПроверитьПараметрыФормы", "Контрагент" , Контрагент); + ПроверитьЗаполненность("ПроверитьПараметрыФормы", "Перевозчик" , Перевозчик); + +КонецПроцедуры + +// Параметры: +// ДанныеУчастников - См. СервисEDIСлужебный.НовыеДанныеУчастников +// Участник - ЛюбаяСсылка +// Представление - Строка +&НаСервере +Процедура ПрочитатьДанныеУчастника( + Знач ДанныеУчастников, + Знач Участник, + Представление) + + ДанныеУчастника = СервисEDIСлужебный.ДанныеУчастника(ДанныеУчастников, Участник); + + Представление = ДанныеУчастника.Представление; + +КонецПроцедуры + +&НаСервере +Процедура ПрочитатьДанныеУчастников() + + ТаблицаУчастников = СервисEDIСлужебный.НоваяТаблицаУчастников(); + + СервисEDIСлужебный.ДобавитьОрганизацию(ТаблицаУчастников, Организация); + СервисEDIСлужебный.ДобавитьКонтрагента(ТаблицаУчастников, Контрагент); + СервисEDIСлужебный.ДобавитьКонтрагента(ТаблицаУчастников, Перевозчик); + + ДанныеУчастников = СервисEDIСлужебный.ДанныеУчастников(ТаблицаУчастников); + + ПрочитатьДанныеУчастника( + ДанныеУчастников, + Организация, + ОрганизацияПредставление); + ПрочитатьДанныеУчастника( + ДанныеУчастников, + Контрагент, + КонтрагентПредставление); + ПрочитатьДанныеУчастника( + ДанныеУчастников, + Перевозчик, + ПеревозчикПредставление); + +КонецПроцедуры + +&НаСервере +Процедура ПрочитатьПараметрыФормы() + + //@skip-check statement-type-change - Параметры формы не поддерживают определяемые типы + Организация = Параметры.Организация; + //@skip-check statement-type-change - Параметры формы не поддерживают определяемые типы + Контрагент = Параметры.Контрагент; + //@skip-check statement-type-change - Параметры формы не поддерживают определяемые типы + Перевозчик = Параметры.Перевозчик; + ВидДокумента = Параметры.ВидДокумента; + + ПроверитьПараметрыФормы(); + ПрочитатьНастройкиОбмена(); + ПрочитатьДанныеУчастников(); + +КонецПроцедуры + +#КонецОбласти + +#Область Отображение + +// Параметры: +// Форма - ФормаКлиентскогоПриложения +// Элемент - ГруппаФормы +// Видимость - Булево +&НаКлиентеНаСервереБезКонтекста +Процедура УстановитьВидимость(Форма, Знач Элемент, Знач Видимость) + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы( + Форма.Элементы, + Элемент.Имя, + "Видимость", + Видимость); +КонецПроцедуры + +// Параметры: +// Форма - ФормаКлиентскогоПриложения +// ЭтоДлительнаяОперация - Булево +// ЭлементФормыСтраницы - ГруппаФормы +// ЭлементФормыСтраницаИспользоватьДлительнуюОперацию - ГруппаФормы +// ЭлементФормыСтраницаНеИспользоватьДлительнуюОперацию - ГруппаФормы +&НаКлиентеНаСервереБезКонтекста +Процедура УстановитьСтраницуДлительнойОперации( + Форма, + Знач ЭтоДлительнаяОперация, + Знач ЭлементФормыСтраницы, + Знач ЭлементФормыСтраницаИспользоватьДлительнуюОперацию, + Знач ЭлементФормыСтраницаНеИспользоватьДлительнуюОперацию) + + ТекущаяСтраница = + ?(ЭтоДлительнаяОперация, + ЭлементФормыСтраницаИспользоватьДлительнуюОперацию, + ЭлементФормыСтраницаНеИспользоватьДлительнуюОперацию); + + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы( + Форма.Элементы, + ЭлементФормыСтраницы.Имя, + "ТекущаяСтраница", + ТекущаяСтраница); + +КонецПроцедуры + +// Параметры: +// Форма - ФормаКлиентскогоПриложения +// ЭлементФормы - ПолеФормы +// СписокВыбора - СписокЗначений Из Строка +&НаКлиентеНаСервереБезКонтекста +Процедура ПоказатьКнопкуВыбора(Форма, ЭлементФормы, СписокВыбора) + + //@skip-check property-return-type - Особенность строгой типизации + //@skip-check dynamic-access-method-not-found - Особенность строгой типизации + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы( + Форма.Элементы, + ЭлементФормы.Имя, + "КнопкаВыпадающегоСписка", + СписокВыбора.Количество() > 0); + +КонецПроцедуры + +// Параметры: +// Форма - ФормаКлиентскогоПриложения +&НаКлиентеНаСервереБезКонтекста +Процедура ОбновитьОтображениеФормы(Форма) + + // Скрываем данные по известным идентификаторам + УстановитьВидимость(Форма, Форма.Элементы.Организация , Не Форма.УстановленИдентификаторОрганизации); + УстановитьВидимость(Форма, Форма.Элементы.Контрагент , Не Форма.УстановленИдентификаторКонтрагента); + УстановитьВидимость(Форма, Форма.Элементы.Перевозчик , Не Форма.УстановленИдентификаторПеревозчика); + + // Устанавливаем страницу ввода идентификатора / длительной операции + УстановитьСтраницуДлительнойОперации( + Форма, + Форма.ФоновоеЗаданиеЗапущено И Форма.ОжидаетсяПолучениеИдентификатораОрганизации, + Форма.Элементы.ОрганизацияСтраницы, + Форма.Элементы.ОрганизацияСтраницаДлительнаяОперация, + Форма.Элементы.ОрганизацияСтраницаВводаИдентификатора); + УстановитьСтраницуДлительнойОперации( + Форма, + Форма.ФоновоеЗаданиеЗапущено И Форма.ОжидаетсяПолучениеИдентификатораКонтрагента, + Форма.Элементы.КонтрагентСтраницы, + Форма.Элементы.КонтрагентСтраницаДлительнаяОперация, + Форма.Элементы.КонтрагентСтраницаВводаИдентификатора); + + ПоказатьКнопкуВыбора(Форма, Форма.Элементы.ИдентификаторОрганизации, Форма.ИдентификаторОрганизацииСписокВыбора); + ПоказатьКнопкуВыбора(Форма, Форма.Элементы.ИдентификаторКонтрагента, Форма.ИдентификаторКонтрагентаСписокВыбора); + ПоказатьКнопкуВыбора(Форма, Форма.Элементы.ИдентификаторПеревозчика, Форма.ИдентификаторПеревозчикаСписокВыбора); + + ОтобразитьСтраницуИнформации = Форма.ОтобразитьСтраницуИнформации; + ТекущаяСтраница = ?(ОтобразитьСтраницуИнформации, + Форма.Элементы.СтраницаИнформация, + Форма.Элементы.СтраницаОсновная); + УстановитьСтраницуФормы(Форма, Форма.Элементы.СтраницыФормы, ТекущаяСтраница); + УстановитьВидимость(Форма, Форма.КоманднаяПанель, Не ОтобразитьСтраницуИнформации); + +КонецПроцедуры + +// Параметры: +// Элемент - ГруппаФормы +// Роль - Строка +// Представление - Строка +&НаСервере +Процедура УстановитьЗаголовокУчастника(Элемент, Знач Роль, Знач Представление) + + ТекстЗаголовка = + СтрШаблон( + НСтр( + "ru = '%1 (%2)'", + ОбщегоНазначения.КодОсновногоЯзыка()), + Роль, + Представление); + + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы( + Элементы, + Элемент.Имя, + "Заголовок", + ТекстЗаголовка); + +КонецПроцедуры + +&НаСервере +Процедура ОбновитьОтображениеФормыПриСозданииНаСервере() + + УстановитьЗаголовокУчастника( + Элементы.Организация, + НСтр("ru = 'Грузоотправитель'", ОбщегоНазначения.КодОсновногоЯзыка()), + ОрганизацияПредставление); + УстановитьЗаголовокУчастника( + Элементы.Контрагент, + НСтр("ru = 'Грузополучатель'", ОбщегоНазначения.КодОсновногоЯзыка()), + КонтрагентПредставление); + УстановитьЗаголовокУчастника( + Элементы.Перевозчик, + НСтр("ru = 'Перевозчик'", ОбщегоНазначения.КодОсновногоЯзыка()), + ПеревозчикПредставление); + +КонецПроцедуры + +// Параметры: +// Форма - ФормаКлиентскогоПриложения +// ЭлементФормыСтраницы - ГруппаФормы +// ЭлементФормыТекущаяСтраница - ГруппаФормы +&НаКлиентеНаСервереБезКонтекста +Процедура УстановитьСтраницуФормы(Форма, ЭлементФормыСтраницы, ЭлементФормыТекущаяСтраница) + + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы( + Форма.Элементы, + ЭлементФормыСтраницы.Имя, + "ТекущаяСтраница", + ЭлементФормыТекущаяСтраница); + +КонецПроцедуры + +#КонецОбласти + +#Область ДлительнаяОперация + +&НаСервере +Процедура ЗапуститьДлительнуюОперациюПолученияИдентификаторов() + + НаборУчастников = СервисEDIСлужебный.НовыеУчастникиЭТрН(); + НаборУчастников.Организация = Организация; + НаборУчастников.Контрагент = Контрагент; + НаборУчастников.Перевозчик = Перевозчик; + + Если Не УстановленИдентификаторОрганизации Тогда + ОжидаетсяПолучениеИдентификатораОрганизации = Истина; + КонецЕсли; + + Если Не УстановленИдентификаторКонтрагента Тогда + ОжидаетсяПолучениеИдентификатораКонтрагента = Истина; + КонецЕсли; + + Если Не ОжидаетсяПолучениеИдентификатораКонтрагента + И Не ОжидаетсяПолучениеИдентификатораОрганизации Тогда + Возврат; + КонецЕсли; + + ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияФункции(УникальныйИдентификатор); + ПараметрыВыполнения.НаименованиеФоновогоЗадания = + НСтр( + "ru = 'Получение идентификаторов ЭПД из сервиса 1С:EDI'", + ОбщегоНазначения.КодОсновногоЯзыка()); + ПараметрыВыполнения.УточнениеОшибки = + НСтр( + "ru = 'Не удалось получить идентификаторы ЭПД из сервиса 1С:EDI по причине:'", + ОбщегоНазначения.КодОсновногоЯзыка()); + + ДлительнаяОперация = ДлительныеОперации.ВыполнитьФункцию( + ПараметрыВыполнения, + "СервисEDIСлужебный.СвязьИдентификаторыУчастниковЭТрН", + НаборУчастников); + + ФоновоеЗаданиеЗапущено = Истина; + + ПараметрыБаннера = ОбщегоНазначения.ПараметрыВажногоСообщения(); + ПараметрыБаннера.Сообщение = + НСтр( + "ru = 'Длительность получения идентификаторов из сервиса может занимать до 2 минут.'", + ОбщегоНазначения.КодОсновногоЯзыка()); + + ОбщегоНазначения.ВставитьВажноеСообщение(ЭтотОбъект, ПараметрыБаннера, Элементы.ВажныеСообщения); + ОбщегоНазначения.ВывестиСтатусыИВажныеСообщенияНаФорму(ЭтотОбъект); + +КонецПроцедуры + +&НаКлиенте +Процедура НачатьОжиданиеПолученияИдентификаторовЭПД() + + Если Не ФоновоеЗаданиеЗапущено Тогда + Возврат; + КонецЕсли; + + Оповещение = Новый ОписаниеОповещения("ПриПолученииИдентификаторовЭПД", ЭтотОбъект); + + ПараметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект); + ПараметрыОжидания.ВыводитьОкноОжидания = Ложь; + + СервисEDIСлужебныйКлиент.ОжидатьЗавершение( + ДлительнаяОперация, + Оповещение, + ПараметрыОжидания); + + ВыполнитьКонтрольДлительнойОперации(); + +КонецПроцедуры + +// Параметры: +// СведенияОбУчастникеСвязи - См. СервисEDIСлужебный.НовыеСведенияОбУчастникеСвязи +// ОжидаетсяПолучениеИдентификатора - Булево +// Участник - ЛюбаяСсылка +// ИдентификаторУчастника - Строка +// СписокВыбора - СписокЗначений Из Строка +&НаСервере +Процедура ЗаполнитьИдентификаторУчастникаПоДаннымСервиса( + Знач СведенияОбУчастникеСвязи, + Знач ОжидаетсяПолучениеИдентификатора, + Знач Участник, + ИдентификаторУчастника, + СписокВыбора) + + Если Не ОжидаетсяПолучениеИдентификатора Тогда + Возврат; + КонецЕсли; + + ОжидаетсяПолучениеИдентификатора = Ложь; + + ИдентификаторУчастника = СведенияОбУчастникеСвязи.Идентификатор; + + СписокВыбора.Очистить(); + + Если СведенияОбУчастникеСвязи.Идентификаторы.Количество() > 0 Тогда + //@skip-check property-return-type - Свойства расширения элемента формы + СписокВыбора.Очистить(); // СписокЗначений Из Строка + + Для Каждого Идентификатор Из СведенияОбУчастникеСвязи.Идентификаторы Цикл + ИдентификаторЭПД = Идентификатор.Идентификатор; + Наименование = Идентификатор.Наименование; + Комментарий = Идентификатор.Комментарий; + + ЧастиПредставления = Новый Массив; // Массив Из Строка + + Если Не ПустаяСтрока(ИдентификаторЭПД) Тогда + ЧастиПредставления.Добавить(ИдентификаторЭПД); + КонецЕсли; + Если Не ПустаяСтрока(Наименование) Тогда + ЧастиПредставления.Добавить(Наименование); + КонецЕсли; + Если Не ПустаяСтрока(Комментарий) Тогда + ЧастиПредставления.Добавить(Комментарий); + КонецЕсли; + + Представление = СтрСоединить(ЧастиПредставления, " - "); + + СписокВыбора.Добавить(ИдентификаторЭПД, Представление); + КонецЦикла; + + КонецЕсли; + +КонецПроцедуры + +// Параметры: +// АдресРезультата - Строка +&НаСервере +Процедура ПриПолученииИдентификаторовЭПДНаСервере(АдресРезультата) + + Связь = ПолучитьИзВременногоХранилища( + АдресРезультата); // См. СервисEDIСлужебный.НоваяСвязьИдентификаторовУчастниковЭТрН + + ЗаполнитьИдентификаторУчастникаПоДаннымСервиса( + Связь.Организация, + ОжидаетсяПолучениеИдентификатораОрганизации, + Организация, + ИдентификаторОрганизации, + ИдентификаторОрганизацииСписокВыбора); + ЗаполнитьИдентификаторУчастникаПоДаннымСервиса( + Связь.Контрагент, + ОжидаетсяПолучениеИдентификатораКонтрагента, + Контрагент, + ИдентификаторКонтрагента, + ИдентификаторКонтрагентаСписокВыбора); + + ОбновитьОтображениеФормы(ЭтотОбъект); + +КонецПроцедуры + +// Параметры: +// АдресРезультата - Строка +// - Неопределено +// ДополнительныеПараметры - Произвольный +&НаКлиенте +Процедура ПриПолученииИдентификаторовЭПД(Знач АдресРезультата, Знач ДополнительныеПараметры) Экспорт + + ДлительнаяОперация = Неопределено; + ФоновоеЗаданиеЗапущено = Ложь; + + Если АдресРезультата = Неопределено Тогда + ОбновитьОтображениеФормы(ЭтотОбъект); + Возврат; + КонецЕсли; + + ПриПолученииИдентификаторовЭПДНаСервере(АдресРезультата); + + ОтобразитьСтраницуИнформации = ОжидаетсяПолучениеИдентификатораОрганизации + И Не ЗначениеЗаполнено(ИдентификаторОрганизации); + ОбновитьОтображениеФормы(ЭтотОбъект); + +КонецПроцедуры + +// Параметры: +// ИдентификаторЗадания - УникальныйИдентификатор +&НаСервереБезКонтекста +Процедура ПрерватьДлительнуюОперациюНаСервере(Знач ИдентификаторЗадания) + ДлительныеОперации.ОтменитьВыполнениеЗадания(ИдентификаторЗадания); +КонецПроцедуры + +&НаКлиенте +Процедура ПрерватьДлительнуюОперацию() + + ФоновоеЗаданиеЗапущено = Ложь; + + Если ДлительнаяОперация <> Неопределено Тогда + //@skip-check property-return-type + //@skip-check invocation-parameter-type-intersect + ПрерватьДлительнуюОперациюНаСервере(ДлительнаяОперация.ИдентификаторЗадания); + ДлительнаяОперация = Неопределено; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ВыполнитьКонтрольДлительнойОперации() + + Если Не ФоновоеЗаданиеЗапущено Тогда + Возврат; + КонецЕсли; + + ТребуетсяФоновоеЗадание = + ОжидаетсяПолучениеИдентификатораОрганизации + Или ОжидаетсяПолучениеИдентификатораКонтрагента; + + Если ТребуетсяФоновоеЗадание Тогда + Возврат; + КонецЕсли; + + ПрерватьДлительнуюОперацию(); + +КонецПроцедуры + +#КонецОбласти + +#Область ЗаписьДанных + +&НаСервере +Процедура ЗаписатьДанныеНаСервере() + + Настройки = СервисEDIСлужебный.НовыеНастройкиЭТрН(); + + Настройки.Организация = Организация; + Настройки.Контрагент = Контрагент; + Настройки.Перевозчик = Перевозчик; + Настройки.ИдентификаторОрганизации = ИдентификаторОрганизации; + Настройки.ИдентификаторКонтрагента = ИдентификаторКонтрагента; + Настройки.ИдентификаторПеревозчика = ИдентификаторПеревозчика; + Настройки.Сертификат = Сертификат; + Настройки.Доверенность = Доверенность; + + СервисEDIСлужебный.ЗаписатьНастройкиЭТрН(Настройки); + +КонецПроцедуры + +#КонецОбласти + +#Область АвтоПодбор + +// Параметры: +// СписокПриемник - СписокЗначений Из Строка +// СписокИсточник - СписокЗначений Из Строка +&НаКлиентеНаСервереБезКонтекста +Процедура СкопироватьСписок(СписокПриемник, Знач СписокИсточник) + + СписокПриемник.Очистить(); + + Для каждого ЭлементСписка Из СписокИсточник Цикл + СписокПриемник.Добавить( + ЭлементСписка.Значение, + ЭлементСписка.Представление, + ЭлементСписка.Пометка, + ЭлементСписка.Картинка); + КонецЦикла; + +КонецПроцедуры + +// Параметры: +// Текст - Строка +// ДанныеВыбора - СписокЗначений Из Строка +// СписокВыбора - СписокЗначений Из Строка +// СтандартнаяОбработка - Булево +&НаКлиенте +Процедура ИдентификаторАвтоПодбор(Знач Текст, ДанныеВыбора, Знач СписокВыбора, СтандартнаяОбработка) + + Если СписокВыбора.Количество() = 0 Тогда + Возврат; + ИначеЕсли ПустаяСтрока(Текст) Тогда + ДанныеВыбора = Новый СписокЗначений; // СписокЗначений Из Строка + СтандартнаяОбработка = Ложь; + СкопироватьСписок(ДанныеВыбора, СписокВыбора); + Возврат; + КонецЕсли; + + СтандартнаяОбработка = Ложь; + ДанныеВыбора = Новый СписокЗначений; // СписокЗначений Из Строка + ПодстрокаПоиска = ВРег(Текст); + + ЦветВыделения = WebЦвета.ТемноЗеленый; + //@skip-check new-font - Шрифт Авто + ШрифтВыделения = Новый Шрифт(, , Истина); + + Для Каждого ЭлементСписка Из СписокВыбора Цикл + + Позиция = СтрНайти(ВРег(ЭлементСписка.Представление), ПодстрокаПоиска); + + Если Позиция = 0 Тогда + Продолжить; + КонецЕсли; + + ТекстВхождения = Сред(ЭлементСписка.Представление, Позиция, СтрДлина(Текст)); + + Начало = Лев(ЭлементСписка.Представление, Позиция - 1); + Вхождение = Новый ФорматированнаяСтрока(ТекстВхождения, ШрифтВыделения, ЦветВыделения); + Конец = Сред(ЭлементСписка.Представление, Позиция + СтрДлина(Текст)); + + Представление = Новый ФорматированнаяСтрока(Начало, Вхождение, Конец); + + ДанныеВыбора.Добавить( + ЭлементСписка.Значение, + Представление, + ЭлементСписка.Пометка, + ЭлементСписка.Картинка); + + КонецЦикла; + +КонецПроцедуры + +#КонецОбласти + +#Область ПроверкаЗаполнения + +// Параметры: +// НаборИдентификаторов - Массив из Строка +// Идентификатор - Строка +&НаСервере +Процедура ДобавитьИдентификатор(НаборИдентификаторов, Знач Идентификатор) + + Если ПустаяСтрока(Идентификатор) Тогда + Возврат; + КонецЕсли; + + СервисEDIСлужебныйКлиентСервер.НормализоватьИдентификатор(Идентификатор); + НаборИдентификаторов.Добавить(Идентификатор); + +КонецПроцедуры + +// Возвращаемое значение: +// Булево +&НаСервере +Функция ИдентификаторыУникальны() + + Идентификаторы = Новый Массив; // Массив Из Строка + + ДобавитьИдентификатор(Идентификаторы, ИдентификаторОрганизации); + ДобавитьИдентификатор(Идентификаторы, ИдентификаторКонтрагента); + ДобавитьИдентификатор(Идентификаторы, ИдентификаторПеревозчика); + + УникальныеЗначения = ОбщегоНазначенияКлиентСервер.СвернутьМассив(Идентификаторы); + + Возврат Идентификаторы.Количество() = УникальныеЗначения.Количество(); + +КонецФункции + +#КонецОбласти + +#КонецОбласти diff --git a/Конфигурация/CommonForms/ВводШтрихкодаИС/Ext/Form/Module.bsl b/Конфигурация/CommonForms/ВводШтрихкодаИС/Ext/Form/Module.bsl index 037cd7164..f4c323c37 100644 --- a/Конфигурация/CommonForms/ВводШтрихкодаИС/Ext/Form/Module.bsl +++ b/Конфигурация/CommonForms/ВводШтрихкодаИС/Ext/Form/Module.bsl @@ -64,7 +64,7 @@ Результат = Новый Структура; Результат.Вставить("ФорматBase64", ФорматBase64); - Результат.Вставить("Штрихкод", Штрихкод); + Результат.Вставить("Штрихкод", СокрЛП(Штрихкод)); Закрыть(Результат); diff --git a/Конфигурация/CommonForms/ДокументыОснованияЭПД/Ext/Form/Module.bsl b/Конфигурация/CommonForms/ДокументыОснованияЭПД/Ext/Form/Module.bsl index 4173d3d7d..13bfc4142 100644 --- a/Конфигурация/CommonForms/ДокументыОснованияЭПД/Ext/Form/Module.bsl +++ b/Конфигурация/CommonForms/ДокументыОснованияЭПД/Ext/Form/Module.bsl @@ -15,7 +15,13 @@ ИначеЕсли ТипДокумента = Тип("ДокументСсылка.ЭлектронныйЗаказНаряд") Тогда ОписаниеТипа = Метаданные.ОпределяемыеТипы.ДокументыОснованияЭЗН_ЭПД.Тип; ИначеЕсли ТипДокумента = Тип("ДокументСсылка.ЭлектронныйПутевойЛист") Тогда - ОписаниеТипа = Метаданные.ОпределяемыеТипы.ДокументыОснованияЭПЛ_ЭПД.Тип; + ОписаниеТипа = Метаданные.ОпределяемыеТипы.ДокументыОснованияЭПЛ_ЭПД.Тип; + ИначеЕсли ТипДокумента = Тип("ДокументСсылка.ЭлектронноеПоручениеЭкспедитору") Тогда + ОписаниеТипа = Метаданные.ОпределяемыеТипы.ДокументыОснованияЭПЭ_ЭПД.Тип; + ИначеЕсли ТипДокумента = Тип("ДокументСсылка.ЭлектроннаяЭкспедиторскаяРасписка") Тогда + ОписаниеТипа = Метаданные.ОпределяемыеТипы.ДокументыОснованияЭЭР_ЭПД.Тип; + ИначеЕсли ТипДокумента = Тип("ДокументСсылка.ЭлектроннаяCкладскаяРасписка") Тогда + ОписаниеТипа = Метаданные.ОпределяемыеТипы.ДокументыОснованияЭСР_ЭПД.Тип; КонецЕсли; ДобавляемыеРеквизиты = Новый Массив; ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("Документ", ОписаниеТипа, "Документы")); diff --git a/Конфигурация/CommonForms/ЗагрузкаТНВЭДиОКПД2ИС/Ext/Form/Module.bsl b/Конфигурация/CommonForms/ЗагрузкаТНВЭДиОКПД2ИС/Ext/Form/Module.bsl index 9a4e23ad4..cc263495e 100644 --- a/Конфигурация/CommonForms/ЗагрузкаТНВЭДиОКПД2ИС/Ext/Form/Module.bsl +++ b/Конфигурация/CommonForms/ЗагрузкаТНВЭДиОКПД2ИС/Ext/Form/Module.bsl @@ -195,6 +195,8 @@ ДобавленоТоварныхГрупп = 0; + Отбор = Новый Структура; + Для НомерСтроки = 1 по ТабличныйДокумент.ВысотаТаблицы Цикл Значение = СокрЛП(ТабличныйДокумент.Область(НомерСтроки, КолонкаКодТНВЭД).Текст); @@ -203,12 +205,22 @@ Продолжить; КонецЕсли; - Строка = ТаблицаДанных.Добавить(); - Строка.ТНВЭД = Значение; + Отбор.Вставить("ТНВЭД", Значение); + НайденныеСтроки = ТаблицаДанных.НайтиСтроки(Отбор); + Если НайденныеСтроки.Количество() = 0 Тогда + Строка = ТаблицаДанных.Добавить(); + Строка.ТНВЭД = Значение; + Иначе + Строка = НайденныеСтроки[0]; + КонецЕсли; Если КолонкаКодыОКПД2 > 0 Тогда - Строка.ОКПД2 = - СокрЛП(ТабличныйДокумент.Область(НомерСтроки, КолонкаКодыОКПД2).Текст); + ОКПД2 = СокрЛП(ТабличныйДокумент.Область(НомерСтроки, КолонкаКодыОКПД2).Текст); + Если Строка.ОКПД2 = "" Тогда + Строка.ОКПД2 = ОКПД2; + Иначе + Строка.ОКПД2 = Строка.ОКПД2 + РазделительОКПД2(ОКПД2) + ОКПД2; + КонецЕсли; КонецЕсли; НайденнаяСтрока = Неопределено; @@ -631,20 +643,9 @@ Возврат; КонецЕсли; - Разделители = Новый Массив; - Разделители.Добавить(","); - Разделители.Добавить(";"); - КодыОКПД2 = Новый Массив; Если СтрДлина(Строка.ОКПД2) >= 12 Тогда - ТекущийРазделитель = ","; - Для Каждого Разделитель Из Разделители Цикл - Если СтрНайти(Строка.ОКПД2, Разделитель) > 0 Тогда - ТекущийРазделитель = Разделитель; - Прервать; - КонецЕсли; - КонецЦикла; - Массив = СтрРазделить(Строка.ОКПД2, ТекущийРазделитель); + Массив = СтрРазделить(Строка.ОКПД2, РазделительОКПД2(Строка.ОКПД2)); Для Каждого Код Из Массив Цикл Код = СокрЛП(Код); Если СтрДлина(Код) = 12 @@ -680,6 +681,25 @@ КонецПроцедуры +&НаСервереБезКонтекста +Функция РазделительОКПД2(ОКПД2) + + Разделители = Новый Массив; + Разделители.Добавить(","); + Разделители.Добавить(";"); + + ТекущийРазделитель = ","; + Для Каждого Разделитель Из Разделители Цикл + Если СтрНайти(ОКПД2, Разделитель) > 0 Тогда + ТекущийРазделитель = Разделитель; + Прервать; + КонецЕсли; + КонецЦикла; + + Возврат ТекущийРазделитель; + +КонецФункции + &НаСервереБезКонтекста Функция ТекстЗапросаКодовТНВЭДиОКПД2() diff --git a/Конфигурация/CommonForms/НастройкиСинхронизацииДанных/Ext/Form/Module.bsl b/Конфигурация/CommonForms/НастройкиСинхронизацииДанных/Ext/Form/Module.bsl index 5dcc60fd1..f23883bd3 100644 --- a/Конфигурация/CommonForms/НастройкиСинхронизацииДанных/Ext/Form/Module.bsl +++ b/Конфигурация/CommonForms/НастройкиСинхронизацииДанных/Ext/Form/Module.bsl @@ -139,7 +139,7 @@ Если НавигационнаяСсылкаФорматированнойСтроки = "1" Тогда ОткрытьФорму("РегистрСведений.КонтурСинхронизации.Форма.ЗацикливаниеСинхронизации",,,,,, Новый ОписаниеОповещения("ПослеЗакрытияФормыЗацикливаниеСинхронизации", ЭтотОбъект), - РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); + РежимБлокировкиПриОткрытииОкнаФормы.БлокироватьВладельца); ИначеЕсли НавигационнаяСсылкаФорматированнойСтроки = "2" Тогда @@ -181,7 +181,7 @@ ПараметрыФормы = Новый Структура("УзелОбмена", ТекущиеДанные.УзелИнформационнойБазы); ОткрытьФорму("Обработка.ПомощникСозданияОбменаДанными.Форма.ПереходНаИнтернетСоединение", - ПараметрыФормы, ЭтотОбъект,,,,, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); + ПараметрыФормы, ЭтотОбъект,,,,, РежимБлокировкиПриОткрытииОкнаФормы.БлокироватьВладельца); КонецЕсли; @@ -205,7 +205,7 @@ Оповещение = Новый ОписаниеОповещения("СохранитьНастройкиТранспорта", ЭтотОбъект, ДополнительныеПараметры); - ОткрытьФорму(ПолноеИмяФормыНастройки, ПараметрыФормы,,,,, Оповещение, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); + ОткрытьФорму(ПолноеИмяФормыНастройки, ПараметрыФормы,,,,, Оповещение, РежимБлокировкиПриОткрытииОкнаФормы.БлокироватьВладельца); КонецЕсли; @@ -299,7 +299,7 @@ ПараметрыФормы.Вставить("ИмяПланаОбмена", Список[0].Значение); ОткрытьФорму("Обработка.ПомощникСозданияОбменаДанными.Форма.НовыйКодПредопределенногоУзла", - ПараметрыФормы, ЭтотОбъект, , , , , РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); + ПараметрыФормы, ЭтотОбъект, , , , , РежимБлокировкиПриОткрытииОкнаФормы.БлокироватьВладельца); Иначе @@ -453,7 +453,7 @@ ОповещениеОЗакрытии = Новый ОписаниеОповещения("ПослеЗавершенияНастройкиПараметровСинхронизации", ЭтотОбъект); ИмяОткрываемойФормы = СтрШаблон("ПланОбмена.%1.ФормаОбъекта", ОписаниеСтрокиПриложения.ИмяПланаОбмена); - ОткрытьФорму(ИмяОткрываемойФормы, ПараметрыПомощника, ЭтотОбъект, , , , ОповещениеОЗакрытии, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); + ОткрытьФорму(ИмяОткрываемойФормы, ПараметрыПомощника, ЭтотОбъект, , , , ОповещениеОЗакрытии, РежимБлокировкиПриОткрытииОкнаФормы.БлокироватьВладельца); КонецЕсли; @@ -534,7 +534,7 @@ ПараметрыОткрытия.Вставить("УзелИнформационнойБазы", ТекущиеДанные.УзелИнформационнойБазы); ОткрытьФорму("Обработка.РаботаСРезультатамиОбмена.Форма.РазборРезультатовПообъектногоОбмена", ПараметрыОткрытия - , ЭтотОбъект, ТекущиеДанные.УзелИнформационнойБазы,,,, РежимОткрытияОкнаФормы.Независимый); + , ЭтотОбъект, ТекущиеДанные.УзелИнформационнойБазы,,,, РежимБлокировкиПриОткрытииОкнаФормы.НеБлокировать); КонецПроцедуры @@ -630,7 +630,7 @@ ОповещениеОЗакрытии = Новый ОписаниеОповещения("НачальнаяВыгрузкаДанныхЗавершение", ЭтотОбъект); ИмяОткрываемойФормы = "Обработка.ПомощникИнтерактивногоОбменаДанными.Форма.ВыгрузкаДанныхДляСопоставления"; - ОткрытьФорму(ИмяОткрываемойФормы, ПараметрыПомощника, ЭтотОбъект, , , , ОповещениеОЗакрытии, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); + ОткрытьФорму(ИмяОткрываемойФормы, ПараметрыПомощника, ЭтотОбъект, , , , ОповещениеОЗакрытии, РежимБлокировкиПриОткрытииОкнаФормы.БлокироватьВладельца); КонецЕсли; @@ -1273,7 +1273,7 @@ КлючУникальностиПомощника = СтрШаблон("%1_%2_%3", ПараметрыПомощника.ИмяПланаОбмена, ПараметрыПомощника.ИдентификаторНастройки, ПараметрыПомощника.УзелОбмена.УникальныйИдентификатор()); ОткрытьФорму("Обработка.ПомощникСозданияОбменаДанными.Форма.НастройкаСинхронизации", - ПараметрыПомощника, ЭтотОбъект, КлючУникальностиПомощника, , , ОповещениеОЗакрытии, РежимОткрытияОкнаФормы.Независимый); + ПараметрыПомощника, ЭтотОбъект, КлючУникальностиПомощника, , , ОповещениеОЗакрытии, РежимБлокировкиПриОткрытииОкнаФормы.НеБлокировать); КонецЕсли; @@ -1301,7 +1301,7 @@ Иначе ИмяОткрываемойФормы = "Обработка.ПомощникСозданияОбменаДанными.Форма.НастройкаСинхронизации"; - ОткрытьФорму(ИмяОткрываемойФормы, ДополнительныеПараметры.ПараметрыПомощника, ЭтотОбъект, , , , ДополнительныеПараметры.ОповещениеОЗакрытии, РежимОткрытияОкнаФормы.Независимый); + ОткрытьФорму(ИмяОткрываемойФормы, ДополнительныеПараметры.ПараметрыПомощника, ЭтотОбъект, , , , ДополнительныеПараметры.ОповещениеОЗакрытии, РежимБлокировкиПриОткрытииОкнаФормы.НеБлокировать); КонецЕсли; @@ -2263,7 +2263,7 @@ ПараметрыФормы.Вставить("ИмяПланаОбмена", Результат.Значение); ОткрытьФорму("Обработка.ПомощникСозданияОбменаДанными.Форма.НовыйКодПредопределенногоУзла", - ПараметрыФормы, ЭтотОбъект, , , , , РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); + ПараметрыФормы, ЭтотОбъект, , , , , РежимБлокировкиПриОткрытииОкнаФормы.БлокироватьВладельца); КонецПроцедуры diff --git a/Конфигурация/CommonForms/ОтображениеQRКодаСБП/Ext/Form.xml b/Конфигурация/CommonForms/ОтображениеQRКодаСБП/Ext/Form.xml index b6c287a46..ef2a8801c 100644 --- a/Конфигурация/CommonForms/ОтображениеQRКодаСБП/Ext/Form.xml +++ b/Конфигурация/CommonForms/ОтображениеQRКодаСБП/Ext/Form.xml @@ -94,6 +94,26 @@ + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Идентификатор задания определения наличия статуса</v8:content> + </v8:item> + + + v8:UUID + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Данные ссылки</v8:content> + </v8:item> + + + @@ -108,5 +128,10 @@ + + + cfg:EnumRef.ВариантыНастройкиСБП + + \ No newline at end of file diff --git a/Конфигурация/CommonForms/ОтображениеQRКодаСБП/Ext/Form/Module.bsl b/Конфигурация/CommonForms/ОтображениеQRКодаСБП/Ext/Form/Module.bsl index 5917b2f32..e673eaacb 100644 --- a/Конфигурация/CommonForms/ОтображениеQRКодаСБП/Ext/Form/Module.bsl +++ b/Конфигурация/CommonForms/ОтображениеQRКодаСБП/Ext/Form/Module.bsl @@ -26,7 +26,8 @@ Отказ = Истина; КонецЕсли; - Если Не ЗначениеЗаполнено(Параметры.ОснованиеПлатежа) Тогда + Если Не ЗначениеЗаполнено(Параметры.ОснованиеПлатежа) + Или Не ЗначениеЗаполнено(Параметры.ВариантНастройки) Тогда Отказ = Истина; КонецЕсли; @@ -34,6 +35,26 @@ ВызватьИсключение НСтр("ru = 'Не корректные параметры формы.'"); КонецЕсли; + СистемаБыстрыхПлатежейСобытия.ПриОпределенииДанныхПлатежнойСсылки( + Параметры.ВариантНастройки, + Параметры.ОснованиеПлатежа, + ДанныеСсылки); + + Если Не ЗначениеЗаполнено(ДанныеСсылки)Тогда + ВызватьИсключение НСтр("ru = 'Не корректные параметры формы.'"); + КонецЕсли; + + ДанныеНастройкиПодключения = Справочники.НастройкиПодключенияКСистемеБыстрыхПлатежей.ДанныеНастройкиПодключения( + ДанныеСсылки.НастройкаПодключения); + + Если Не ЗначениеЗаполнено(ДанныеНастройкиПодключения.ИдентификаторУчастника)Тогда + ВызватьИсключение НСтр("ru = 'Не корректные параметры формы.'"); + КонецЕсли; + + ДанныеСсылки.Вставить( + "ИдентификаторУчастника", + ДанныеНастройкиПодключения.ИдентификаторУчастника); + ДанныеПлатежнойСсылки = Новый Структура; ДанныеПлатежнойСсылки.Вставить("ПлатежнаяСсылка", ПлатежнаяСсылка); ДанныеПлатежнойСсылки.Вставить("QRКод", QRКод); @@ -80,6 +101,8 @@ СистемаБыстрыхПлатежейКлиентПереопределяемый.ПриЗакрытииФормыQRКода( ЭтотОбъект); + ОтменитьЗаданиеОпределенияНаличияСтатусаОплаты(ИдентификаторЗаданияОпределенияНаличияСтатуса); + КонецПроцедуры #КонецОбласти @@ -116,6 +139,88 @@ ДанныеПлатежнойСсылки, РезультатВыполнения); + ПодключитьОбработчикОжидания("ОпределитьНаличиеСтатусаОплаты", 0.1, Истина); + +КонецПроцедуры + +&НаКлиенте +Процедура ОпределитьНаличиеСтатусаОплаты() + + ПараметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект); + ПараметрыОжидания.ВыводитьОкноОжидания = Ложь; + ПараметрыОжидания.Интервал = 1; + + РезультатВыполнения = ОпределитьНаличиеСтатусаОплатыНаСервере( + ДанныеСсылки, + УникальныйИдентификатор); + + ИдентификаторЗаданияПроверкиСтатуса = РезультатВыполнения.ИдентификаторЗадания; + ОповещениеОЗавершении = Новый ОписаниеОповещения( + "ОпределитьНаличиеСтатусаОплатыЗавершение", + ЭтотОбъект); + + Если РезультатВыполнения.Статус <> "Выполняется" Тогда + ОпределитьНаличиеСтатусаОплатыЗавершение(РезультатВыполнения, Неопределено); + Возврат; + КонецЕсли; + + ДлительныеОперацииКлиент.ОжидатьЗавершение( + РезультатВыполнения, + ОповещениеОЗавершении, + ПараметрыОжидания); + +КонецПроцедуры + +&НаСервереБезКонтекста +Функция ОпределитьНаличиеСтатусаОплатыНаСервере( + Знач ДанныеСсылки, + Знач УникальныйИдентификатор) + + ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор); + ПараметрыВыполнения.НаименованиеФоновогоЗадания = НСтр("ru = 'Проверка наличия статуса оплаты.'"); + + РезультатВыполнения = ДлительныеОперации.ВыполнитьФункцию( + ПараметрыВыполнения, + "СистемаБыстрыхПлатежейСлужебный.ОжидатьТерминальныйСтатусОплаты", + ДанныеСсылки.ИдентификаторОплаты, + ДанныеСсылки.ИдентификаторУчастника, + СистемаБыстрыхПлатежейСлужебный.ИдентификаторОперацииПроверкиОплаты()); + + ИдентификаторЗаданияОпределенияНаличияСтатуса = РезультатВыполнения.ИдентификаторЗадания; + + Возврат РезультатВыполнения; + +КонецФункции + +&НаКлиенте +Процедура ОпределитьНаличиеСтатусаОплатыЗавершение(Результат, ДополнительныеПараметры) Экспорт + + Если Результат = Неопределено Тогда + Возврат; + КонецЕсли; + + СообщениеОбОшибке = ""; + Если Результат.Статус = "Выполнено" Тогда + РезультатОперации = ПолучитьИзВременногоХранилища(Результат.АдресРезультата); + Если РезультатОперации.ТерминальныйСтатусПолучен Тогда + Закрыть(); + КонецЕсли; + ИначеЕсли Результат.Статус = "Ошибка" Тогда + ОбщегоНазначенияКлиент.СообщитьПользователю( + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Операция проверки наличия статуса оплаты завершилось с ошибкой: %1'"), + ОбработкаОшибок.ПредставлениеОшибкиДляПользователя(Результат.ИнформацияОбОшибке))); + КонецЕсли; + + ИдентификаторЗаданияОпределенияНаличияСтатуса = Неопределено; + +КонецПроцедуры + +&НаСервереБезКонтекста +Процедура ОтменитьЗаданиеОпределенияНаличияСтатусаОплаты(Знач ИдентификаторЗаданияОпределенияНаличияСтатуса) + + ДлительныеОперации.ОтменитьВыполнениеЗадания(ИдентификаторЗаданияОпределенияНаличияСтатуса); + КонецПроцедуры #КонецОбласти diff --git a/Конфигурация/CommonForms/ОтправкаПлатежнойСсылкиСБП/Ext/Form/Module.bsl b/Конфигурация/CommonForms/ОтправкаПлатежнойСсылкиСБП/Ext/Form/Module.bsl index 983ca9336..b69a11610 100644 --- a/Конфигурация/CommonForms/ОтправкаПлатежнойСсылкиСБП/Ext/Form/Module.bsl +++ b/Конфигурация/CommonForms/ОтправкаПлатежнойСсылкиСБП/Ext/Form/Module.bsl @@ -239,7 +239,8 @@ ОткрытьФорму( "ОбщаяФорма.ОтображениеQRКодаСБП", Новый Структура( - "ПлатежнаяСсылка, ОснованиеПлатежа", + "ВариантНастройки, ПлатежнаяСсылка, ОснованиеПлатежа", + ВариантНастройки, ПлатежнаяСсылка, ОснованиеПлатежа), ЭтотОбъект, diff --git a/Конфигурация/CommonForms/УОП_НастройкаПланированияПроизводства/Ext/Form/Module.bsl b/Конфигурация/CommonForms/УОП_НастройкаПланированияПроизводства/Ext/Form/Module.bsl index 7a92040e5..d07766120 100644 --- a/Конфигурация/CommonForms/УОП_НастройкаПланированияПроизводства/Ext/Form/Module.bsl +++ b/Конфигурация/CommonForms/УОП_НастройкаПланированияПроизводства/Ext/Form/Module.bsl @@ -78,10 +78,20 @@ Модифицированность = Ложь; - Для Каждого НастройкаИдентификатор Из СписокНастроек Цикл - УОП_ОбщегоНазначения.УстановитьЗначениеКонстанты(НастройкаИдентификатор.Значение, ЭтотОбъект[НастройкаИдентификатор.Значение]); - КонецЦикла; + СписокКонстантОповестить = Новый СписокЗначений; + Для Каждого НастройкаИдентификатор Из СписокНастроек Цикл + Если (УОП_ОбщегоНазначения.ЗначениеКонстанты(НастройкаИдентификатор.Значение) <> ЭтотОбъект[НастройкаИдентификатор.Значение]) Тогда + СписокКонстантОповестить.Добавить(НастройкаИдентификатор.Значение); + + УОП_ОбщегоНазначения.УстановитьЗначениеКонстанты(НастройкаИдентификатор.Значение, ЭтотОбъект[НастройкаИдентификатор.Значение]); + КонецЕсли; + КонецЦикла; + + ОбновитьПовторноИспользуемыеЗначения(); + Для Каждого ТекСтрока Из СписокКонстантОповестить Цикл + Оповестить("Запись_НаборКонстант", Новый Структура, ТекСтрока.Значение); + КонецЦикла; КонецПроцедуры &НаСервере @@ -117,6 +127,13 @@ НСтр("ru='Если настройка установлена, то при каскадном сохранении документов ""Планирование производства"" для позиций, которые были запланированы будущим числом, цены изменяться не будут'") ); + НоваяНастройка = УОП_НастройкаПрограммы.ДобавитьНастройкуФлаг(ТаблицаНастроек, + "УОП_ВыполнятьИндикациюНедействительныхРецептурИНоменклатуры", + НастройкиПоУмолчанию, + НСтр("ru='Индикация недействительных рецептур и номенклатурных позиций'"), + НСтр("ru='Управление возможностью индикации недействительных и помеченных на удаление рецептур и номенклатурных позиций в дереве меню.'") + ); + КонецЕсли; НастройкиПоУмолчанию.Раздел = "ГруппаАРМПланированияПроизводства"; @@ -178,7 +195,8 @@ ); НоваяНастройка.ОбновлятьИнтерфейс = Истина; - // ====================================================================================================================== + // ====================================================================================================================== + СписокНастроек.Очистить(); Для Каждого ТекНастройка Из ТаблицаНастроек Цикл diff --git a/Конфигурация/CommonForms/УточнениеСоставаУпаковкиИС/Ext/Form/Module.bsl b/Конфигурация/CommonForms/УточнениеСоставаУпаковкиИС/Ext/Form/Module.bsl index f0f83a1b4..f5170df71 100644 --- a/Конфигурация/CommonForms/УточнениеСоставаУпаковкиИС/Ext/Form/Module.bsl +++ b/Конфигурация/CommonForms/УточнениеСоставаУпаковкиИС/Ext/Form/Module.bsl @@ -538,8 +538,12 @@ Возврат Ложь; КонецЕсли; ИначеЕсли ЗначениеЗаполнено(Строка.СписокНоменклатуры) И Не Дополнять Тогда + Если ИмяРеквизита <> "Номенклатура" + И ИмяРеквизита <> "Характеристика" Тогда + Возврат Истина; + КонецЕсли; Для Каждого ЭлементСпискаВыбора Из Строка.СписокНоменклатуры Цикл - Если ЭлементСпискаВыбора.Свойство(ИмяРеквизита) И ЭлементСпискаВыбора[ИмяРеквизита] = Отбор[ИмяРеквизита] Тогда + Если ЭлементСпискаВыбора[ИмяРеквизита] = Отбор[ИмяРеквизита] Тогда Возврат Истина; КонецЕсли; КонецЦикла; diff --git a/Конфигурация/CommonForms/ФормаНастройкиНоменклатурыИС/Ext/Form/Module.bsl b/Конфигурация/CommonForms/ФормаНастройкиНоменклатурыИС/Ext/Form/Module.bsl index 0f5e53922..3da2c617c 100644 --- a/Конфигурация/CommonForms/ФормаНастройкиНоменклатурыИС/Ext/Form/Module.bsl +++ b/Конфигурация/CommonForms/ФормаНастройкиНоменклатурыИС/Ext/Form/Module.bsl @@ -797,7 +797,6 @@ ЭтоГрупповаяЛогистическаяУпаковка = (ВариантИспользованияЕдиницыХранения = Перечисления.ВариантыИспользованияЕдиницыХраненияИС.ГрупповаяЛогистическаяУпаковка); ЭтоФасованнаяПродукция = (ВариантИспользованияЕдиницыХранения = Перечисления.ВариантыИспользованияЕдиницыХраненияИС.МернаяПродукцияСФиксированнымЗначением); ЭтоТребуетВзвешивания = (ВариантИспользованияЕдиницыХранения = Перечисления.ВариантыИспользованияЕдиницыХраненияИС.МернаяПродукцияТребуетУказанияЗначения); - ДоступноПеременноеКоличество = КонструкторИСМПКлиентСервер.ВидПродукцииПоддерживаетПеременноеКоличествоМернойПродукции(ВидПродукции); ЭтоТабак = КонструкторИСМПОбщегоНазначенияКлиентСервер.ДоступноПолеМРЦ(ВидПродукции); // +УОП @@ -817,8 +816,8 @@ Элементы.ВариантЕдиницыИзмеренияИмеетФиксированныйВес.Видимость = (ЭтоФасованнаяПродукция Или Не ДопустимоИспользованиеУпаковок); Элементы.ПолеКоличествоФиксированныйВес.Видимость = (ЭтоФасованнаяПродукция Или Не ДопустимоИспользованиеУпаковок); Элементы.ВариантЕдиницыИзмеренияИмеетФиксированныйВес.Доступность = Не ДопустимоИспользованиеУпаковок; - Элементы.ВариантЕдиницыИзмеренияТребуетсяВзвешивание.Видимость = ДоступноПеременноеКоличество И (ДоступноТребуетВзвешивания Или ЭтоТребуетВзвешивания); - Элементы.ВариантЕдиницыИзмеренияТребуетсяВзвешивание.Доступность = ДоступноПеременноеКоличество И ДоступноТребуетВзвешивания; + Элементы.ВариантЕдиницыИзмеренияТребуетсяВзвешивание.Видимость = (ДоступноТребуетВзвешивания Или ЭтоТребуетВзвешивания); + Элементы.ВариантЕдиницыИзмеренияТребуетсяВзвешивание.Доступность = ДоступноТребуетВзвешивания; Элементы.ВариантЕдиницыИзмеренияЧастьУпаковки.Видимость = (ПоддерживаетсяЧастичноеВыбытие И ЭтоЧастьПотребительскойУпаковки); Элементы.ПолеКоличествоЧастичноеВыбытие.Видимость = (ПоддерживаетсяЧастичноеВыбытие И ЭтоЧастьПотребительскойУпаковки); Элементы.ПолеКоличествоЧастичноеВыбытие.Доступность = Ложь; diff --git a/Конфигурация/CommonForms/ФормаОтчета/Ext/Form.xml b/Конфигурация/CommonForms/ФормаОтчета/Ext/Form.xml index 6a11a3789..3037b2398 100644 --- a/Конфигурация/CommonForms/ФормаОтчета/Ext/Form.xml +++ b/Конфигурация/CommonForms/ФормаОтчета/Ext/Form.xml @@ -18,6 +18,7 @@ ReportSettings + InDialogWindow true ОтчетТабличныйДокумент ОтчетДанныеРасшифровки diff --git a/Конфигурация/CommonForms/ФормаПодключенияКассовогоQRКодаСБП/Ext/Form.xml b/Конфигурация/CommonForms/ФормаПодключенияКассовогоQRКодаСБП/Ext/Form.xml index a5be59921..b27e16b17 100644 --- a/Конфигурация/CommonForms/ФормаПодключенияКассовогоQRКодаСБП/Ext/Form.xml +++ b/Конфигурация/CommonForms/ФормаПодключенияКассовогоQRКодаСБП/Ext/Form.xml @@ -32,41 +32,15 @@ PictureAndText - - - - - - @@ -532,96 +506,6 @@ Подключить Text - - - <v8:item> - <v8:lang>ru</v8:lang> - <v8:content>Кассовый QR-код (А5 широкий)</v8:content> - </v8:item> - - - - ru - Кассовый QR-код (А5 широкий) - - - ПечатьQRКода - - - - <v8:item> - <v8:lang>ru</v8:lang> - <v8:content>Кассовый QR-код (А5 только логотипы)</v8:content> - </v8:item> - - - - ru - Кассовый QR-код (А5 только логотипы) - - - ПечатьQRКода - - - - <v8:item> - <v8:lang>ru</v8:lang> - <v8:content>Кассовый QR-код (А5 узкий)</v8:content> - </v8:item> - - - - ru - Кассовый QR-код (А5 узкий) - - - ПечатьQRКода - - - - <v8:item> - <v8:lang>ru</v8:lang> - <v8:content>Кассовый QR-код (А5 узкий горизонтальный)</v8:content> - </v8:item> - - - - ru - Кассовый QR-код (А5 узкий горизонтальный) - - - ПечатьQRКода - - - - <v8:item> - <v8:lang>ru</v8:lang> - <v8:content>Кассовый QR-код (А6 квадратный)</v8:content> - </v8:item> - - - - ru - Кассовый QR-код (А6 квадратный) - - - ПечатьQRКода - - - - <v8:item> - <v8:lang>ru</v8:lang> - <v8:content>Кассовый QR-код (А6 круглый)</v8:content> - </v8:item> - - - - ru - Кассовый QR-код (А6 круглый) - - - ПечатьQRКода - <v8:item> @@ -642,6 +526,36 @@ <Action>УдалитьКассовыйQRКод</Action> <Representation>TextPicture</Representation> </Command> + <Command name="КассоваяСсылкаА5Вертикальный" id="11"> + <Title> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Кассовый QR-код (А5 вертикальный)</v8:content> + </v8:item> + + + + ru + Кассовый QR-код (А5 вертикальный) + + + ПечатьQRКода + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Кассовый QR-код (А5 горизонтальный)</v8:content> + </v8:item> + + + + ru + Кассовый QR-код (А5 горизонтальный) + + + ПечатьQRКода + diff --git a/Конфигурация/CommonForms/ФормаПодключенияКассовогоQRКодаСБП/Ext/Form/Module.bsl b/Конфигурация/CommonForms/ФормаПодключенияКассовогоQRКодаСБП/Ext/Form/Module.bsl index 6df8c5dd6..e135de739 100644 --- a/Конфигурация/CommonForms/ФормаПодключенияКассовогоQRКодаСБП/Ext/Form/Module.bsl +++ b/Конфигурация/CommonForms/ФормаПодключенияКассовогоQRКодаСБП/Ext/Form/Module.bsl @@ -354,7 +354,7 @@ СформироватьКассовыеСсылкиЗавершение(Отказ, ОписаниеОшибки); Если Не Отказ Тогда - ОбработатьВыполненияКоманды("КассоваяСсылкаА5Широкий"); + ОбработатьВыполненияКоманды("КассоваяСсылкаА5Горизонтальный"); КонецЕсли; Иначе @@ -384,22 +384,18 @@ КассовыеСсылки = НастройкиКассовыхСсылокСБП.КассовыеСсылки; НастройкиСпособаОплаты = КассовыеСсылки.СпособыОплаты.Получить(СпособОплатыКассовойСсылкиСБП); - СписокПечатныхФорм = Новый СписокЗначений; - СписокПечатныхФорм.Добавить("КассоваяСсылкаА5Широкий", НСтр("ru = 'Кассовая ссылка (А5 широкий)'")); - СписокПечатныхФорм.Добавить("КассоваяСсылкаА5ТолькоЛого", НСтр("ru = 'Кассовая ссылка (А5 только логотипы)'")); - СписокПечатныхФорм.Добавить("КассоваяСсылкаА5Узкий", НСтр("ru = 'Кассовая ссылка (А5 узкий)'")); - СписокПечатныхФорм.Добавить("КассоваяСсылкаА5УзкийГоризонтальный", - НСтр("ru = 'Кассовая ссылка (А5 узкий горизонтальный)'")); - - СписокПечатныхФорм.Добавить("КассоваяСсылкаА6Квадратный", НСтр("ru = 'Кассовая ссылка (А6 квадратный)'")); - СписокПечатныхФорм.Добавить("КассоваяСсылкаА6Круглый", НСтр("ru = 'Кассовая ссылка (А6 круглый)'")); + Если ВидДействия = "КассоваяСсылкаА5Горизонтальный" Тогда + НазваниеПечатнойФормы = НСтр("ru = 'Кассовая ссылка (А5 горизонтальный)'"); + ТипПечати = 7; + ИначеЕсли ВидДействия = "КассоваяСсылкаА5Вертикальный" Тогда + НазваниеПечатнойФормы = НСтр("ru = 'Кассовая ссылка (А5 вертикальный)'"); + ТипПечати = 8; + Иначе + Возврат; + КонецЕсли; - ТипПечати = СписокПечатныхФорм.Индекс(СписокПечатныхФорм.НайтиПоЗначению(ВидДействия)) + 1; - - ИдентификаторПечатнойФормы = ВидДействия; - НазваниеПечатнойФормы = СписокПечатныхФорм.НайтиПоЗначению(ВидДействия).Представление; - - МакетКарточкиКассовойСсылки = СформироватьКарточкуКассовойСсылки(НастройкиСпособаОплаты, ТипПечати); + ИдентификаторПечатнойФормы = ВидДействия; + МакетКарточкиКассовойСсылки = СформироватьКарточкуКассовойСсылки(НастройкиСпособаОплаты, ТипПечати); КоллекцияПечатныхФорм = УправлениеПечатьюКлиент.НоваяКоллекцияПечатныхФорм(ИдентификаторПечатнойФормы); ПечатнаяФорма = УправлениеПечатьюКлиент.ОписаниеПечатнойФормы(КоллекцияПечатныхФорм, ИдентификаторПечатнойФормы); @@ -512,7 +508,7 @@ ЗаписатьДанныеКассовойСсылки(РеквизитыКассы.КассаККМ, КассовыеСсылки, ПлатежнаяСистема); НастроитьФорму(ЭтотОбъект); - ОбработатьВыполненияКоманды("КассоваяСсылкаА5Широкий"); + ОбработатьВыполненияКоманды("КассоваяСсылкаА5Горизонтальный"); КонецПроцедуры diff --git a/Конфигурация/CommonForms/ФормаСтруктурыПодчиненности/Ext/Form/Module.bsl b/Конфигурация/CommonForms/ФормаСтруктурыПодчиненности/Ext/Form/Module.bsl index 3e108ac8e..848a06452 100644 --- a/Конфигурация/CommonForms/ФормаСтруктурыПодчиненности/Ext/Form/Module.bsl +++ b/Конфигурация/CommonForms/ФормаСтруктурыПодчиненности/Ext/Form/Module.bsl @@ -641,6 +641,15 @@ ИЛИ МетаданныеДокумента.Имя = "СчетФактураПолученный" Тогда Запрос.Текст = СтрЗаменить(Запрос.Текст, "&Сумма", "Т.СуммаДокумента + Т.СуммаНДСДокумента"); + // +УОП + ИначеЕсли МетаданныеДокумента.Имя = "СписаниеЗапасов" Тогда + + Если УОП_ОтраслевыеРешения.ОтображатьСебестоимостьСНДС() Тогда + Запрос.Текст = СтрЗаменить(Запрос.Текст, "&Сумма", "Т.УОП_Себестоимость"); + Иначе + Запрос.Текст = СтрЗаменить(Запрос.Текст, "&Сумма", "Т.УОП_СебестоимостьБезНДС"); + КонецЕсли; + // -УОП ИначеЕсли МетаданныеДокумента.Реквизиты.Найти("СуммаДокумента") <> Неопределено Тогда diff --git a/Конфигурация/CommonForms/ШапкаТабличнаяЧасть/Ext/Form.xml b/Конфигурация/CommonForms/ШапкаТабличнаяЧасть/Ext/Form.xml index fc530f5ee..83153985d 100644 --- a/Конфигурация/CommonForms/ШапкаТабличнаяЧасть/Ext/Form.xml +++ b/Конфигурация/CommonForms/ШапкаТабличнаяЧасть/Ext/Form.xml @@ -50,6 +50,649 @@ ПриСозданииНаСервере + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Положение таблицы "Детали"</v8:content> + </v8:item> + + Button + Vertical + OneAndHalf + None + false + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>При расположении "в правой панели" в таблице выводятся только основные колонки таблицы - номенклатура и количество. При расположении "под списком", в таблице выводится больше колонок таблицы документа, а на странице "Детали" правой панели отображаются итоги и основные данные документа. Настроить расположение для всех списков документов можно в +<link ПерсональныеНастройкиПоложениеТаблицы>персональных настройках</>.</v8:content> + </v8:item> + + + ГруппаПоложениеПанелиДеталиРасширеннаяПодсказкаОбработкаНавигационнойСсылки + + + + + ПоложениеТаблицыДеталиВЗаказахПокупателей + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Положение таблицы Детали</v8:content> + </v8:item> + + Top + 1 + Auto + 1 + 1 + + + + 0 + + + + ru + В правой панели + + + Enum.ПоложениеТаблицыДетали.EnumValue.ВПравойПанели + + + + + 0 + + + + ru + Под списком + + + Enum.ПоложениеТаблицыДетали.EnumValue.ПодСписком + + + + + + + + ПоложениеТаблицыДеталиВСчетахНаОплатуПолученных + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Положение таблицы Детали</v8:content> + </v8:item> + + Top + 1 + Auto + 1 + 1 + + + + 0 + + + + ru + В правой панели + + + Enum.ПоложениеТаблицыДетали.EnumValue.ВПравойПанели + + + + + 0 + + + + ru + Под списком + + + Enum.ПоложениеТаблицыДетали.EnumValue.ПодСписком + + + + + + + + ПоложениеТаблицыДеталиВСчетахНаОплату + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Положение таблицы Детали</v8:content> + </v8:item> + + Top + 1 + Auto + 1 + 1 + + + + 0 + + + + ru + В правой панели + + + Enum.ПоложениеТаблицыДетали.EnumValue.ВПравойПанели + + + + + 0 + + + + ru + Под списком + + + Enum.ПоложениеТаблицыДетали.EnumValue.ПодСписком + + + + + + + + ПоложениеТаблицыДеталиВДополнительныхРасходах + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Положение таблицы Детали</v8:content> + </v8:item> + + Top + 1 + Auto + 1 + 1 + + + + 0 + + + + ru + В правой панели + + + Enum.ПоложениеТаблицыДетали.EnumValue.ВПравойПанели + + + + + 0 + + + + ru + Под списком + + + Enum.ПоложениеТаблицыДетали.EnumValue.ПодСписком + + + + + + + + ПоложениеТаблицыДеталиВПриходныхНакладных + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Положение таблицы Детали</v8:content> + </v8:item> + + Top + 1 + Auto + 1 + 1 + + + + 0 + + + + ru + В правой панели + + + Enum.ПоложениеТаблицыДетали.EnumValue.ВПравойПанели + + + + + 0 + + + + ru + Под списком + + + Enum.ПоложениеТаблицыДетали.EnumValue.ПодСписком + + + + + + + + ПоложениеТаблицыДеталиВРасходныхНакладных + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Положение таблицы Детали</v8:content> + </v8:item> + + Top + 1 + Auto + 1 + 1 + + + + 0 + + + + ru + В правой панели + + + Enum.ПоложениеТаблицыДетали.EnumValue.ВПравойПанели + + + + + 0 + + + + ru + Под списком + + + Enum.ПоложениеТаблицыДетали.EnumValue.ПодСписком + + + + + + + + ПоложениеТаблицыДеталиВЗаказахПоставщикам + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Положение таблицы Детали</v8:content> + </v8:item> + + Top + 1 + Auto + 1 + 1 + + + + 0 + + + + ru + В правой панели + + + Enum.ПоложениеТаблицыДетали.EnumValue.ВПравойПанели + + + + + 0 + + + + ru + Под списком + + + Enum.ПоложениеТаблицыДетали.EnumValue.ПодСписком + + + + + + + + ПоложениеТаблицыДеталиВИнвентаризацияхЗапасов + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Положение таблицы Детали</v8:content> + </v8:item> + + Top + 1 + Auto + 1 + 1 + + + + 0 + + + + ru + В правой панели + + + Enum.ПоложениеТаблицыДетали.EnumValue.ВПравойПанели + + + + + 0 + + + + ru + Под списком + + + Enum.ПоложениеТаблицыДетали.EnumValue.ПодСписком + + + + + + + + ПоложениеТаблицыДеталиВУстановкахЦенНоменклатуры + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Положение таблицы Детали</v8:content> + </v8:item> + + Top + 1 + Auto + 1 + 1 + + + + 0 + + + + ru + В правой панели + + + Enum.ПоложениеТаблицыДетали.EnumValue.ВПравойПанели + + + + + 0 + + + + ru + Под списком + + + Enum.ПоложениеТаблицыДетали.EnumValue.ПодСписком + + + + + + + + ПоложениеТаблицыДеталиВРасходахПриИмпорте + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Положение таблицы Детали</v8:content> + </v8:item> + + Top + 1 + Auto + 1 + 1 + + + + 0 + + + + ru + В правой панели + + + Enum.ПоложениеТаблицыДетали.EnumValue.ВПравойПанели + + + + + 0 + + + + ru + Под списком + + + Enum.ПоложениеТаблицыДетали.EnumValue.ПодСписком + + + + + + + + ПоложениеТаблицыДеталиВАктахОРасхождениях + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Положение таблицы Детали</v8:content> + </v8:item> + + Top + 1 + Auto + 1 + 1 + + + + 0 + + + + ru + В правой панели + + + Enum.ПоложениеТаблицыДетали.EnumValue.ВПравойПанели + + + + + 0 + + + + ru + Под списком + + + Enum.ПоложениеТаблицыДетали.EnumValue.ПодСписком + + + + + + + + ПоложениеТаблицыДеталиВКорректировкахРеализаций + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Положение таблицы Детали</v8:content> + </v8:item> + + Top + 1 + Auto + 1 + 1 + + + + 0 + + + + ru + В правой панели + + + Enum.ПоложениеТаблицыДетали.EnumValue.ВПравойПанели + + + + + 0 + + + + ru + Под списком + + + Enum.ПоложениеТаблицыДетали.EnumValue.ПодСписком + + + + + + + + ПоложениеТаблицыДеталиВКорректировкахПоступлений + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Положение таблицы Детали</v8:content> + </v8:item> + + Top + 1 + Auto + 1 + 1 + + + + 0 + + + + ru + В правой панели + + + Enum.ПоложениеТаблицыДетали.EnumValue.ВПравойПанели + + + + + 0 + + + + ru + Под списком + + + Enum.ПоложениеТаблицыДетали.EnumValue.ПодСписком + + + + + + + + ПоложениеТаблицыДеталиВЗаказНарядах + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Положение таблицы Детали</v8:content> + </v8:item> + + Top + 1 + Auto + 1 + 1 + + + + 0 + + + + ru + В правой панели + + + Enum.ПоложениеТаблицыДетали.EnumValue.ВПравойПанели + + + + + 0 + + + + ru + Под списком + + + Enum.ПоложениеТаблицыДетали.EnumValue.ПодСписком + + + + + + + + <v8:item> @@ -3756,6 +4399,171 @@ <v8:Type>xs:boolean</v8:Type> </Type> </Attribute> + <Attribute name="ПоложениеТаблицыДеталиВЗаказахПокупателей" id="113"> + <Title> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Положение таблицы детали в заказах покупателей</v8:content> + </v8:item> + + + cfg:EnumRef.ПоложениеТаблицыДетали + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Установить положение таблицы для всех документов</v8:content> + </v8:item> + + + xs:boolean + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Положение таблицы детали в заказ-нарядах</v8:content> + </v8:item> + + + cfg:EnumRef.ПоложениеТаблицыДетали + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Положение таблицы детали в счетах на оплату</v8:content> + </v8:item> + + + cfg:EnumRef.ПоложениеТаблицыДетали + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Положение таблицы детали в расходных накладных</v8:content> + </v8:item> + + + cfg:EnumRef.ПоложениеТаблицыДетали + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Положение таблицы детали в приходных накладных</v8:content> + </v8:item> + + + cfg:EnumRef.ПоложениеТаблицыДетали + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Положение таблицы детали в заказах поставщикам</v8:content> + </v8:item> + + + cfg:EnumRef.ПоложениеТаблицыДетали + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Положение таблицы детали в дополнительных расходах</v8:content> + </v8:item> + + + cfg:EnumRef.ПоложениеТаблицыДетали + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Положение таблицы детали в счетах на оплату</v8:content> + </v8:item> + + + cfg:EnumRef.ПоложениеТаблицыДетали + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Положение таблицы детали в счетах на оплату полученных</v8:content> + </v8:item> + + + cfg:EnumRef.ПоложениеТаблицыДетали + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Положение таблицы детали в установках цен номенклатуры</v8:content> + </v8:item> + + + cfg:EnumRef.ПоложениеТаблицыДетали + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Положение таблицы детали в актах о расхождениях</v8:content> + </v8:item> + + + cfg:EnumRef.ПоложениеТаблицыДетали + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Положение таблицы детали в расходах при импорте</v8:content> + </v8:item> + + + cfg:EnumRef.ПоложениеТаблицыДетали + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Положение таблицы детали в корректировках поступлений</v8:content> + </v8:item> + + + cfg:EnumRef.ПоложениеТаблицыДетали + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Положение таблицы детали в корректировках реализаций</v8:content> + </v8:item> + + + cfg:EnumRef.ПоложениеТаблицыДетали + + diff --git a/Конфигурация/CommonForms/ШапкаТабличнаяЧасть/Ext/Form/Module.bsl b/Конфигурация/CommonForms/ШапкаТабличнаяЧасть/Ext/Form/Module.bsl index 367c96b60..04aebd560 100644 --- a/Конфигурация/CommonForms/ШапкаТабличнаяЧасть/Ext/Form/Module.bsl +++ b/Конфигурация/CommonForms/ШапкаТабличнаяЧасть/Ext/Form/Module.bsl @@ -290,6 +290,18 @@ КонецПроцедуры +&НаКлиенте +Процедура ГруппаПоложениеПанелиДеталиРасширеннаяПодсказкаОбработкаНавигационнойСсылки(Элемент, + НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; + СтруктураПараметров = Новый Структура; + СтруктураПараметров.Вставить("СтрокаПоиска", НСтр("ru = 'Положение таблицы'")); + ОткрытьФорму("Обработка.ПерсональныеНастройки.Форма.ФормаНастройкиПользователя", СтруктураПараметров); + ИзмененыПерсональныеНастройки = Истина; + +КонецПроцедуры + #КонецОбласти #Область ОбработчикиКомандФормы @@ -442,7 +454,7 @@ КонецЕсли; - Возврат Результат + Возврат Результат; КонецФункции @@ -571,6 +583,21 @@ Результат.Добавить("УОП_ПроверятьРасхожденияСоСрокомГодности"); // -УОП + Результат.Добавить("ПоложениеТаблицыДеталиВЗаказахПокупателей"); + Результат.Добавить("ПоложениеТаблицыДеталиВЗаказНарядах"); + Результат.Добавить("ПоложениеТаблицыДеталиВСчетахНаОплату"); + Результат.Добавить("ПоложениеТаблицыДеталиВСчетахНаОплатуПолученных"); + Результат.Добавить("ПоложениеТаблицыДеталиВРасходныхНакладных"); + Результат.Добавить("ПоложениеТаблицыДеталиВПриходныхНакладных"); + Результат.Добавить("ПоложениеТаблицыДеталиВЗаказахПоставщикам"); + Результат.Добавить("ПоложениеТаблицыДеталиВДополнительныхРасходах"); + Результат.Добавить("ПоложениеТаблицыДеталиВИнвентаризацияхЗапасов"); + Результат.Добавить("ПоложениеТаблицыДеталиВУстановкахЦенНоменклатуры"); + Результат.Добавить("ПоложениеТаблицыДеталиВАктахОРасхождениях"); + Результат.Добавить("ПоложениеТаблицыДеталиВРасходахПриИмпорте"); + Результат.Добавить("ПоложениеТаблицыДеталиВКорректировкахПоступлений"); + Результат.Добавить("ПоложениеТаблицыДеталиВКорректировкахРеализаций"); + Возврат Результат; КонецФункции diff --git a/Конфигурация/CommonModules/АвтоматическоеПолучениеЭДО/Ext/Module.bsl b/Конфигурация/CommonModules/АвтоматическоеПолучениеЭДО/Ext/Module.bsl index c9e13842a..8b9d5f29a 100644 --- a/Конфигурация/CommonModules/АвтоматическоеПолучениеЭДО/Ext/Module.bsl +++ b/Конфигурация/CommonModules/АвтоматическоеПолучениеЭДО/Ext/Module.bsl @@ -1307,7 +1307,7 @@ ПараметрыВыполнения.ИспользоватьТокеныДоступа = Истина; ПараметрыВыполнения.РасшифрованныеМаркеры = КриптографияБЭДКлиентСервер.НовыйНаборРасшифрованныхДанных(); - РезультатДействийЭДО = ЭлектронныеДокументыЭДОСлужебный.ВыполнитьДействияЭДО(ПараметрыВыполнения); + РезультатДействийЭДО = ВыполнитьДействияДляПолученияПоЭДО(ПараметрыВыполнения); ЗаполнитьРезультатПолученияПоИдентификаторуЭДО(Результат, ИдентификаторЭДО, ДатаНачала, РезультатДействийЭДО); @@ -1365,7 +1365,7 @@ ИдентификаторЭДО, ПриниматьПриглашенияЭДОАвтоматически); ПараметрыВыполнения.РасшифрованныеМаркеры = РасшифрованныеМаркеры; - Возврат ЭлектронныеДокументыЭДОСлужебный.ВыполнитьДействияЭДО(ПараметрыВыполнения); + Возврат ВыполнитьДействияДляПолученияПоЭДО(ПараметрыВыполнения); КонецФункции @@ -1517,6 +1517,50 @@ КонецФункции +// Параметры: +// ПараметрыВыполнения - см. ПараметрыВыполненияДействийДляПолученияПоЭДО +// +// Возвращаемое значение: +// См. ЭлектронныеДокументыЭДОСлужебный.НовыйРезультатДействийПоЭДО +Функция ВыполнитьДействияДляПолученияПоЭДО(ПараметрыВыполнения) + + РезультатДействийЭДО = ЭлектронныеДокументыЭДОСлужебный.ВыполнитьДействияЭДО(ПараметрыВыполнения); + + ОтправитьИзвещенияПоПолученнымДокументамЭДО(ПараметрыВыполнения, РезультатДействийЭДО); + + Возврат РезультатДействийЭДО + +КонецФункции + +// Параметры: +// ПараметрыВыполненияПоДокументамЭДО - см. ПараметрыВыполненияДействийДляПолученияПоЭДО +// РезультатДействийПоДокументамЭДО - см. ЭлектронныеДокументыЭДОСлужебный.НовыйРезультатДействийПоЭДО +Процедура ОтправитьИзвещенияПоПолученнымДокументамЭДО(ПараметрыВыполненияПоДокументамЭДО, РезультатДействийПоДокументамЭДО) + + ДокументыДляОбработкиИзвещений = РезультатДействийПоДокументамЭДО.ДокументыДляОбработкиИзвещений; + Если Не ЗначениеЗаполнено(ДокументыДляОбработкиИзвещений) Тогда + Возврат; + КонецЕсли; + + ПараметрыВыполнения = ЭлектронныеДокументыЭДОКлиентСервер.НовыеПараметрыВыполненияДействийПоЭДО(); + ПараметрыВыполнения.ОбъектыДействий.ЭлектронныеДокументы = ОбщегоНазначения.ВыгрузитьКолонку( + ДокументыДляОбработкиИзвещений, "Ключ"); + ПараметрыВыполнения.ОтпечаткиСертификатов = ПараметрыВыполненияПоДокументамЭДО.ОтпечаткиСертификатов; + ПараметрыВыполнения.РасшифрованныеМаркеры = ПараметрыВыполненияПоДокументамЭДО.РасшифрованныеМаркеры; + ПараметрыВыполнения.ИспользоватьТокеныДоступа = ПараметрыВыполненияПоДокументамЭДО.ИспользоватьТокеныДоступа; + ПараметрыВыполнения.ОбработатьТолькоИзвещения = Истина; + + ЭлектронныеДокументыЭДОКлиентСервер.ДобавитьДействие(ПараметрыВыполнения.НаборДействий, + Перечисления.ДействияПоЭДО.Подписать); + ЭлектронныеДокументыЭДОКлиентСервер.ДобавитьДействие(ПараметрыВыполнения.НаборДействий, + Перечисления.ДействияПоЭДО.ПодготовитьКОтправке); + ЭлектронныеДокументыЭДОКлиентСервер.ДобавитьДействие(ПараметрыВыполнения.НаборДействий, + Перечисления.ДействияПоЭДО.Отправить); + + ЭлектронныеДокументыЭДОСлужебный.ВыполнитьДействияЭДО(ПараметрыВыполнения); + +КонецПроцедуры + // Параметры: // Результат - см. НовыйРезультатВариантаПолучения // ИдентификаторЭДО - Строка diff --git a/Конфигурация/CommonModules/АвтономнаяРаботаСлужебный/Ext/Module.bsl b/Конфигурация/CommonModules/АвтономнаяРаботаСлужебный/Ext/Module.bsl index 108dc8f62..d0d8f32bf 100644 --- a/Конфигурация/CommonModules/АвтономнаяРаботаСлужебный/Ext/Module.bsl +++ b/Конфигурация/CommonModules/АвтономнаяРаботаСлужебный/Ext/Module.bsl @@ -852,6 +852,10 @@ ЗакрытьЗапись = Истина; ИначеЕсли ПараметрыВыгрузки.ЗаписаноЭлементовПослеПроверкиРазмераФайла >= ПараметрыВыгрузки.КоличествоЭлементовПроверкиРазмераФайла Тогда + Если ОбменДаннымиСлужебный.ПутьКФайлуСодержитНедопустимыеСимволы(ПараметрыВыгрузки.ИмяФайлаДанных) Тогда + ВызватьИсключение НСтр("ru = 'Недопустимое имя файла.'"); + КонецЕсли; + ФайлДанных = Новый Файл(ПараметрыВыгрузки.ИмяФайлаДанных); Если ФайлДанных.Существует() И ФайлДанных.Размер() >= ПараметрыВыгрузки.МаксимальныйРазмерФайла Тогда ЗакрытьЗапись = Истина; diff --git a/Конфигурация/CommonModules/АдминистрированиеКластераRAS/Ext/Module.bsl b/Конфигурация/CommonModules/АдминистрированиеКластераRAS/Ext/Module.bsl index 488f62296..a0c6dd581 100644 --- a/Конфигурация/CommonModules/АдминистрированиеКластераRAS/Ext/Module.bsl +++ b/Конфигурация/CommonModules/АдминистрированиеКластераRAS/Ext/Module.bsl @@ -51,12 +51,33 @@ ПроверятьПараметрыАдминистрированияКластера = Истина) Экспорт Если ПроверятьПараметрыАдминистрированияКластера ИЛИ ПроверятьПараметрыАдминистрированияИнформационнойБазы Тогда - АгентСервера = АгентСервера(ПараметрыАдминистрированияКластера); - КластерСервера = КластерСервера(АгентСервера, ПараметрыАдминистрированияКластера); + Попытка + АгентСервера = АгентСервера(ПараметрыАдминистрированияКластера); + КластерСервера = КластерСервера(АгентСервера, ПараметрыАдминистрированияКластера); + Исключение + ШаблонОшибки = НСтр("ru = 'Не удалось подключиться с компьютера %1 к кластеру серверов по причине: + |%2 + | + |Если на компьютере %1 не запущен сервер администрирования (ras), следует его запустить. + |Например: + |""%3"" cluster --port=%4 %5:%6 + | + |Также рекомендуется проверить параметры подключения и сетевого экрана.'"); + КраткоеПредставлениеОшибки = ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); + АдресУтилитыАдминистрирования = КаталогПрограммы() + ?(ОбщегоНазначения.ЭтоWindowsСервер(), "ras.exe", "ras"); + ТекстИсключения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонОшибки, + ИмяКомпьютера(), + КраткоеПредставлениеОшибки, + АдресУтилитыАдминистрирования, + XMLСтрока(ПараметрыАдминистрированияКластера.ПортСервераАдминистрирования), + ПараметрыАдминистрированияКластера.АдресАгентаСервера, + XMLСтрока(ПараметрыАдминистрированияКластера.ПортАгентаСервера)); + ВызватьИсключение ТекстИсключения; + КонецПопытки; КонецЕсли; Если ПроверятьПараметрыАдминистрированияИнформационнойБазы Тогда БазаКластера(КластерСервера, ПараметрыАдминистрированияИБ); - КонецЕсли; + КонецЕсли; КонецПроцедуры #КонецОбласти diff --git a/Конфигурация/CommonModules/АдресныйКлассификаторСлужебный/Ext/Module.bsl b/Конфигурация/CommonModules/АдресныйКлассификаторСлужебный/Ext/Module.bsl index 055667a14..6f53efc45 100644 --- a/Конфигурация/CommonModules/АдресныйКлассификаторСлужебный/Ext/Module.bsl +++ b/Конфигурация/CommonModules/АдресныйКлассификаторСлужебный/Ext/Module.bsl @@ -400,7 +400,7 @@ И ТипЗнч(ЗагруженныеАдресныеСведения.Получить(КодРегиона)) = Тип("Структура") И ЗагруженныеАдресныеСведения.Получить(КодРегиона).ИспользоватьЗагруженные Тогда - Адрес = РаспознатьАдресЗагруженныеДанные(ЧастиАдреса, КодРегиона); + Адрес = РаспознатьАдресЗагруженныеДанные(ЧастиАдреса, КодРегиона, Представление); Если Адрес <> Неопределено И СтрСравнить(Адрес.addressType, АдресВСвободнойФорме()) <> 0 Тогда Возврат Адрес; КонецЕсли; @@ -3381,7 +3381,7 @@ КонецФункции -Функция РаспознатьАдресЗагруженныеДанные(ИсходныеЧастиАдреса, КодРегиона) +Функция РаспознатьАдресЗагруженныеДанные(ИсходныеЧастиАдреса, КодРегиона, Представление) ЧастиАдреса = ОбработатьОбщепринятыеСокращенияИУдалитьТочкуВКонецТипа(ИсходныеЧастиАдреса); @@ -3472,10 +3472,10 @@ КонецЕсли; Муниципальный = Истина; - АдресПоНайденнымДанным = ОпределитьАдресПоНайденнымДанным(СопоставленныеЧастиАдреса, Муниципальный); + АдресПоНайденнымДанным = ОпределитьАдресПоНайденнымДанным(СопоставленныеЧастиАдреса, Муниципальный, Представление); Если АдресПоНайденнымДанным.Адрес = Неопределено Тогда Муниципальный = Ложь; - АдресПоНайденнымДанным = ОпределитьАдресПоНайденнымДанным(СопоставленныеЧастиАдреса, Муниципальный); + АдресПоНайденнымДанным = ОпределитьАдресПоНайденнымДанным(СопоставленныеЧастиАдреса, Муниципальный, Представление); КонецЕсли; Если АдресПоНайденнымДанным.Адрес = Неопределено Тогда @@ -3635,7 +3635,7 @@ КонецФункции -Функция ОпределитьАдресПоНайденнымДанным(Знач СопоставленныеЧастиАдреса, Муниципальный) +Функция ОпределитьАдресПоНайденнымДанным(Знач СопоставленныеЧастиАдреса, Муниципальный, Представление) РезультатОпределения = Новый Структура; РезультатОпределения.Вставить("Адрес", Неопределено); @@ -3669,6 +3669,7 @@ СведенияОбАдресе = СведенияОбАдресномОбъекта(СтрокаУровня.Идентификатор); СведенияОбАдресе.ЗагруженныеДанные = Истина; СведенияОбАдресе.Муниципальный = Муниципальный; + СведенияОбАдресе.Представление = Представление; РезультатОпределения.ЦепочкаАдреса = ЦепочкаРодителей.Уровни; Прервать; diff --git a/Конфигурация/CommonModules/АкцизныеМаркиЕГАИС/Ext/Module.bsl b/Конфигурация/CommonModules/АкцизныеМаркиЕГАИС/Ext/Module.bsl index 335cb2402..9f301e348 100644 --- a/Конфигурация/CommonModules/АкцизныеМаркиЕГАИС/Ext/Module.bsl +++ b/Конфигурация/CommonModules/АкцизныеМаркиЕГАИС/Ext/Module.bsl @@ -1569,8 +1569,9 @@ ДеревоШтрихкодов.Колонки.ШтрихкодУпаковки.Имя = "АкцизнаяМарка"; ДокументОбъект.АкцизныеМарки.Очистить(); - - ЗаполнитьАкцизныеМаркиПоДереву(ДокументОбъект.АкцизныеМарки, ДеревоШтрихкодов.Строки, Неопределено); + ЧастичноеВыбытие =ДокументОбъект.Метаданные().ТабличныеЧасти.АкцизныеМарки.Реквизиты.Найти("ЧастичноеВыбытиеНоменклатура")<> Неопределено; + + ЗаполнитьАкцизныеМаркиПоДереву(ДокументОбъект.АкцизныеМарки, ДеревоШтрихкодов.Строки, ЧастичноеВыбытие, Неопределено); КонецПроцедуры @@ -1579,8 +1580,9 @@ // Параметры: // АкцизныеМарки - ТабличнаяЧасть - Заполняемая табличная часть. // СтрокиДерева - КоллекцияСтрокДереваЗначений - таблица упаковок. +// ЧастичноеВыбытие - Булево - Частичное выбытие // УпаковкаВерхнегоУровня - СтрокаТабличнойЧасти - Уточняемая строка. -Процедура ЗаполнитьАкцизныеМаркиПоДереву(АкцизныеМарки, СтрокиДерева, УпаковкаВерхнегоУровня) +Процедура ЗаполнитьАкцизныеМаркиПоДереву(АкцизныеМарки, СтрокиДерева, ЧастичноеВыбытие, УпаковкаВерхнегоУровня) Для Каждого Упаковка Из СтрокиДерева Цикл @@ -1595,7 +1597,15 @@ НоваяСтрока.ШтрихкодУпаковки = УпаковкаВерхнегоУровня.АкцизнаяМарка; КонецЕсли; - ЗаполнитьАкцизныеМаркиПоДереву(АкцизныеМарки, Упаковка.Строки, УпаковкаВерхнегоУровняСтрокиДерева); + Если НоваяСтрока <> Неопределено И ЧастичноеВыбытие Тогда + Если Упаковка.ЧастичноеВыбытие Тогда + НоваяСтрока.ЧастичноеВыбытиеКоличество = Упаковка.Количество; + НоваяСтрока.ЧастичноеВыбытиеНоменклатура = Упаковка.Номенклатура; + НоваяСтрока.ЧастичноеВыбытиеХарактеристика = Упаковка.Характеристика; + КонецЕсли; + КонецЕсли; + + ЗаполнитьАкцизныеМаркиПоДереву(АкцизныеМарки, Упаковка.Строки, ЧастичноеВыбытие, УпаковкаВерхнегоУровняСтрокиДерева); КонецЦикла; @@ -1669,6 +1679,20 @@ ТаблицаУпаковок.Колонки.АкцизнаяМарка.Имя = "ШтрихкодУпаковки"; ТаблицаУпаковок.Индексы.Добавить("ШтрихкодУпаковки"); + ПроверятьЧастичноеВыбытие = ТаблицаУпаковок.Колонки.Найти("ЧастичноеВыбытиеНоменклатура")<>Неопределено; + + Если ПроверятьЧастичноеВыбытие Тогда + СтрокиЧастичногоВыбытия = ТаблицаУпаковок.СкопироватьКолонки(); + Для Каждого СтрокаТЧ Из ТаблицаУпаковок Цикл + Если ЗначениеЗаполнено(СтрокаТЧ.ЧастичноеВыбытиеНоменклатура) Тогда + ЗаполнитьЗначенияСвойств(СтрокиЧастичногоВыбытия.Добавить(), СтрокаТЧ); + КонецЕсли; + КонецЦикла; + СтрокиЧастичногоВыбытия.Колонки.ЧастичноеВыбытиеНоменклатура.Имя = "Номенклатура"; + СтрокиЧастичногоВыбытия.Колонки.ЧастичноеВыбытиеХарактеристика.Имя = "Характеристика"; + СтрокиЧастичногоВыбытия.Колонки.ЧастичноеВыбытиеКоличество.Имя = "КоличествоПоДаннымИБ"; + КонецЕсли; + ВложенныеШтрихкоды = ШтрихкодированиеИС.ВложенныеШтрихкодыИзвестныхУпаковок(ТаблицаУпаковок.ВыгрузитьКолонку("ШтрихкодУпаковки")); ВложенныеШтрихкоды.МаркированныеТовары.Колонки.Добавить("Справка2", Новый ОписаниеТипов("СправочникСсылка.Справки2ЕГАИС")); ВложенныеШтрихкоды.ДеревоУпаковок.Колонки.Добавить("Справка2", Новый ОписаниеТипов("СправочникСсылка.Справки2ЕГАИС")); @@ -1752,14 +1776,23 @@ Для Каждого СтрокаТЧ Из ВложенныеШтрихкоды.МаркированныеТовары Цикл - Ключ = КлючСоответствия(СтрокаТЧ.Номенклатура); + Если ПроверятьЧастичноеВыбытие Тогда + ДанныеКодаМаркировки = СтрокиЧастичногоВыбытия.Найти(СтрокаТЧ.ШтрихкодУпаковки,"ШтрихкодУпаковки"); + Если ДанныеКодаМаркировки = Неопределено Тогда + ДанныеКодаМаркировки = СтрокаТЧ; + КонецЕсли; + Иначе + ДанныеКодаМаркировки = СтрокаТЧ; + КонецЕсли; + + Ключ = КлючСоответствия(ДанныеКодаМаркировки.Номенклатура); СоответствиеНоменклатура = ДанныеДляПроверки.Получить(Ключ); Если СоответствиеНоменклатура = Неопределено Тогда СоответствиеНоменклатура = Новый Соответствие; ДанныеДляПроверки.Вставить(Ключ, СоответствиеНоменклатура); КонецЕсли; - Ключ = КлючСоответствия(СтрокаТЧ.Характеристика); + Ключ = КлючСоответствия(ДанныеКодаМаркировки.Характеристика); СоответствиеХарактеристика = СоответствиеНоменклатура.Получить(Ключ); Если СоответствиеХарактеристика = Неопределено Тогда СоответствиеХарактеристика = Новый Соответствие; @@ -1788,7 +1821,7 @@ ДанныеСправка2.Вставить("Факт", 0); КонецЕсли; - ДанныеСправка2.Факт = ДанныеСправка2.Факт + СтрокаТЧ.КоличествоПоДаннымИБ; + ДанныеСправка2.Факт = ДанныеСправка2.Факт + ДанныеКодаМаркировки.КоличествоПоДаннымИБ; СоответствиеСерия.Вставить(Ключ, ДанныеСправка2); КонецЦикла; diff --git a/Конфигурация/CommonModules/БанковскиеПравила/Ext/Module.bsl b/Конфигурация/CommonModules/БанковскиеПравила/Ext/Module.bsl index 9e2ef96d0..6ba4ca563 100644 --- a/Конфигурация/CommonModules/БанковскиеПравила/Ext/Module.bsl +++ b/Конфигурация/CommonModules/БанковскиеПравила/Ext/Module.bsl @@ -1430,114 +1430,6 @@ КонецФункции -#Область ВидыОперацийЦР - -// Перевод цифровой валюты от Клиента - ЮЛ Клиенту - ЮЛ -// -// Возвращаемое значение: -// Строка - код операции. -// -Функция ОперацияB2B() Экспорт - - Возврат "BTOB"; - -КонецФункции - -// Перевод цифровой валюты от Клиента - ФЛ Клиенту - ЮЛ -// -// Возвращаемое значение: -// Строка - код операции. -// -Функция ОперацияC2B() Экспорт - - Возврат "CTOB"; - -КонецФункции - -// Возврат цифровой валюты от Клиента - ЮЛ Клиенту - ФЛ -// -// Возвращаемое значение: -// Строка - код операции. -// -Функция ОперацияB2C() Экспорт - - Возврат "BTOC"; - -КонецФункции - -//Обмен Клиентом ЦР на безналичные средства -// -// Возвращаемое значение: -// Строка - код операции. -// -Функция ОперацияDCSE() Экспорт - - Возврат "DCSE"; - -КонецФункции - -// Обмен Клиентом безналичных средств на ЦР -// -// Возвращаемое значение: -// Строка - код операции. -// -Функция ОперацияDCBU() Экспорт - - Возврат "DCBU"; - -КонецФункции - -// Возврат цифровой валюты -// -// Возвращаемое значение: -// Строка - код операции. -// -Функция ОперацияDCRF() Экспорт - - Возврат "DCRF"; - -КонецФункции - -// Перевод Клиентом ЮЛ в бюджет -// -Функция ОперацияB2G() Экспорт - - Возврат "BTOG"; - -КонецФункции - -// Выплата ЦР из бюджета Клиенту ЮЛ -// -Функция ОперацияG2B() Экспорт - - Возврат "GTOB"; - -КонецФункции - -// Выплата Оператором по обращению СЛ или Клиента -// -// Возвращаемое значение: -// Строка - код операции. -// -Функция ОперацияOPTR() Экспорт - - Возврат "OPTR"; - -КонецФункции - -// Другие операции -// -// Возвращаемое значение: -// Строка - код операции. -// -Функция ОперацияOOPN() Экспорт - - Возврат "OOPN"; - -КонецФункции - -#КонецОбласти - #КонецОбласти #КонецОбласти diff --git a/Конфигурация/CommonModules/БанковскиеСчетаСервер/Ext/Module.bsl b/Конфигурация/CommonModules/БанковскиеСчетаСервер/Ext/Module.bsl index ae9aa4f21..d94260a20 100644 --- a/Конфигурация/CommonModules/БанковскиеСчетаСервер/Ext/Module.bsl +++ b/Конфигурация/CommonModules/БанковскиеСчетаСервер/Ext/Module.bsl @@ -183,14 +183,10 @@ // Функция ЭтоИдентификаторЦифровогоСчета(Идентификатор) Экспорт - Если Не ЗначениеЗаполнено(Идентификатор) Тогда - Возврат Ложь; - КонецЕсли; + // g\.[a-z]{2}\.cbrdc\.wlt\.[a-z0-9]{2,5}\.[a-f0-9]{8}-[a-f0-9]{4}-4[a-f0-9]{3}-[89ab][a-f0-9]{3}-[a-f0-9]{12} + Результат = ОбменСБанкамиЦифровойРубль.ЭтоИдентификаторЦифровогоСчета(Идентификатор); - ШаблонЦР = "g\.[a-z]{2}\.cbrdc\.wlt\.[a-z0-9]{2,5}\.[a-f0-9]{8}-[a-f0-9]{4}-4[a-f0-9]{3}-[89ab][a-f0-9]{3}-[a-f0-9]{12}$"; - Результат = СтрНайтиПоРегулярномуВыражению(Идентификатор, ШаблонЦР); - - Возврат Результат.НачальнаяПозиция > 0; + Возврат Результат; КонецФункции @@ -223,7 +219,3 @@ КонецФункции #КонецОбласти - - - - diff --git a/Конфигурация/CommonModules/БизнесПроцессыИЗадачиСобытия/Ext/Module.bsl b/Конфигурация/CommonModules/БизнесПроцессыИЗадачиСобытия/Ext/Module.bsl index 24eb69602..02d4a7e98 100644 --- a/Конфигурация/CommonModules/БизнесПроцессыИЗадачиСобытия/Ext/Module.bsl +++ b/Конфигурация/CommonModules/БизнесПроцессыИЗадачиСобытия/Ext/Module.bsl @@ -120,4 +120,13 @@ КонецПроцедуры +// См. СтандартныеПодсистемыСервер.ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод +Процедура ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод(Методы) Экспорт + + Если ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.БазоваяФункциональность") Тогда + Методы.Вставить("СтартОтложенныхПроцессов"); + КонецЕсли; + +КонецПроцедуры + #КонецОбласти diff --git a/Конфигурация/CommonModules/БизнесСеть/Ext/Module.bsl b/Конфигурация/CommonModules/БизнесСеть/Ext/Module.bsl index 3a1946092..c4948777a 100644 --- a/Конфигурация/CommonModules/БизнесСеть/Ext/Module.bsl +++ b/Конфигурация/CommonModules/БизнесСеть/Ext/Module.bsl @@ -744,11 +744,11 @@ #Область ИдентификаторыКонтрагентов -Процедура АктуализироватьКэшДанныхКонтрагентов() Экспорт +Процедура АктуализироватьИдентификаторыОрганизацийКонтрагентов() Экспорт // Обработчик БСП ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания( - Метаданные.РегламентныеЗадания.ОбновлениеИдентификаторовКонтрагентовБизнесСети); + Метаданные.РегламентныеЗадания.ОбновлениеИдентификаторовБизнесСети); // Логирование ЗаписьЖурналаРегистрации( @@ -759,7 +759,8 @@ ОбщегоНазначения.КодОсновногоЯзыка())); // Выполнение логики регламентного задания - РегистрыСведений.КонтрагентыБизнесСеть.РезультатАктуализацииКешаКонтрагентов(); + РегистрыСведений.КонтрагентыБизнесСеть.Актуализировать(); + РегистрыСведений.ОрганизацииБизнесСеть.Актуализировать(); // Логирование ЗаписьЖурналаРегистрации( @@ -2056,14 +2057,17 @@ // См. ЭлектронноеВзаимодействие.ПриПолученииСпискаШаблонов. Процедура ПриПолученииСпискаШаблонов(ШаблоныЗаданий) Экспорт - ШаблоныЗаданий.Добавить(Метаданные.РегламентныеЗадания.ОбновлениеИдентификаторовКонтрагентовБизнесСети.Имя); + ШаблоныЗаданий.Добавить(Метаданные.РегламентныеЗадания.ОбновлениеИдентификаторовБизнесСети.Имя); КонецПроцедуры // См. ЭлектронноеВзаимодействие.ПриОпределенииПсевдонимовОбработчиков. Процедура ПриОпределенииПсевдонимовОбработчиков(СоответствиеИменПсевдонимам) Экспорт - СоответствиеИменПсевдонимам.Вставить(Метаданные.РегламентныеЗадания.ОбновлениеИдентификаторовКонтрагентовБизнесСети.ИмяМетода); + СоответствиеИменПсевдонимам.Вставить(Метаданные.РегламентныеЗадания.ОбновлениеИдентификаторовБизнесСети.ИмяМетода); + СоответствиеИменПсевдонимам.Вставить( + "БизнесСеть.АктуализироватьКэшДанныхКонтрагентов", + Метаданные.РегламентныеЗадания.ОбновлениеИдентификаторовБизнесСети.ИмяМетода); КонецПроцедуры @@ -2071,9 +2075,9 @@ Процедура ПриОпределенииНастроекРегламентныхЗаданий(Настройки) Экспорт НоваяСтрока = Настройки.Добавить(); - НоваяСтрока.РегламентноеЗадание = Метаданные.РегламентныеЗадания["ОбновлениеИдентификаторовКонтрагентовБизнесСети"]; + НоваяСтрока.РегламентноеЗадание = Метаданные.РегламентныеЗадания["ОбновлениеИдентификаторовБизнесСети"]; НоваяСтрока.ФункциональнаяОпция = Метаданные.ФункциональныеОпции["ИспользоватьОбменБизнесСеть"]; - НоваяСтрока.РаботаетСВнешнимиРесурсами = Истина; + НоваяСтрока.ОбращаетсяКВнешнимРесурсам = Истина; КонецПроцедуры @@ -2844,7 +2848,7 @@ // См. СтандартныеПодсистемыСервер.ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод Процедура ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод(Методы) Экспорт - Методы.Вставить("АктуализироватьКэшДанныхКонтрагентов", Истина); + Методы.Вставить("АктуализироватьИдентификаторыОрганизацийКонтрагентов", Истина); Методы.Вставить("ОтправитьДанныеДокументовЧерезБизнесСеть", Истина); Методы.Вставить("ОбновитьИнформациюОНовыхДокументахВСервисе", Истина); Методы.Вставить("ОтправитьУведомлениеОбОтправке", Истина); @@ -5210,7 +5214,7 @@ КонецФункции -Процедура УдалитьКлючДоступаИзЛокальногоХранилища(ИдентификаторОрганизации) +Процедура УдалитьКлючДоступаИзЛокальногоХранилища(ИдентификаторОрганизации) Экспорт УстановитьПривилегированныйРежим(Истина); @@ -5442,11 +5446,7 @@ Возврат СтатусыПодключения().Подключена; КонецЕсли; - Если ИнтернетПоддержкаПользователей.ЗаполненыДанныеАутентификацииПользователяИнтернетПоддержки() Тогда - Возврат СтатусыПодключения().ТребуетсяОбращениеКСервису; - Иначе - Возврат СтатусыПодключения().ТребуетсяИнтерактивноеПодключение; - КонецЕсли; + Возврат СтатусыПодключения().ТребуетсяИнтерактивноеПодключение; КонецФункции @@ -6550,6 +6550,8 @@ Процедура ЗаписатьИдентификаторОрганизации(Организация, Идентификатор) + ДанныеОрганизации = ДанныеОрганизации(Организация); + НачатьТранзакцию(); Попытка @@ -6570,6 +6572,8 @@ НоваяЗапись.Организация = Организация; НоваяЗапись.Идентификатор = Идентификатор; + НоваяЗапись.ИНН = ДанныеОрганизации.ИНН; + НоваяЗапись.КПП = ДанныеОрганизации.КПП; НаборЗаписей.Записать(); diff --git a/Конфигурация/CommonModules/БизнесСетьСлужебный/Ext/Module.bsl b/Конфигурация/CommonModules/БизнесСетьСлужебный/Ext/Module.bsl index 0f0c68647..fe755b11c 100644 --- a/Конфигурация/CommonModules/БизнесСетьСлужебный/Ext/Module.bsl +++ b/Конфигурация/CommonModules/БизнесСетьСлужебный/Ext/Module.bsl @@ -27,10 +27,12 @@ Процедура ПриДобавленииОбработчиковОбновления(Обработчики) Экспорт Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "1.10.1.9"; + Обработчик.Версия = "1.10.1.61"; Обработчик.Процедура = "БизнесСетьСлужебный.УстановитьРасписаниеОбновленияИдентификаторовКонтрагентов"; Обработчик.НачальноеЗаполнение = Истина; Обработчик.РежимВыполнения = "Оперативно"; + Обработчик.Комментарий = НСтр( + "ru = 'Устанавливает активность и расписание обновления идентификаторов 1С:Бизнес-сеть'") КонецПроцедуры @@ -39,11 +41,11 @@ #Область ОбработчикиОбновления // Обработчик обновления. -// Устанавливает расписание регламетного задания ОбновлениеИдентификаторовКонтрагентовБизнесСети случайным образом +// Устанавливает расписание регламетного задания ОбновлениеИдентификаторовБизнесСети случайным образом // с целью распределения нагрузки к сервису 1С:Бизнес-сеть. Процедура УстановитьРасписаниеОбновленияИдентификаторовКонтрагентов() Экспорт - МетаданныеЗадания = Метаданные.РегламентныеЗадания.ОбновлениеИдентификаторовКонтрагентовБизнесСети; + МетаданныеЗадания = Метаданные.РегламентныеЗадания.ОбновлениеИдентификаторовБизнесСети; Отбор = Новый Структура; Отбор.Вставить("Метаданные", МетаданныеЗадания); @@ -65,9 +67,12 @@ Расписание.ВремяНачала = ДатаНачала + Генератор.СлучайноеЧисло(0, Интервал); Расписание.ПериодПовтораДней = 1; + Использование = БизнесСеть.ИспользоватьОбменБизнесСеть(); + // Изменяемые параметры ПараметрыЗадания = Новый Структура; - ПараметрыЗадания.Вставить("Расписание", Расписание); + ПараметрыЗадания.Вставить("Расписание" , Расписание); + ПараметрыЗадания.Вставить("Использование" , Использование); Для Каждого Задание Из Задания Цикл РегламентныеЗаданияСервер.ИзменитьЗадание(Задание.УникальныйИдентификатор, ПараметрыЗадания); @@ -180,21 +185,22 @@ // // Возвращаемое значение: // ТаблицаЗначений - Новая таблица контрагентов: -// * Контрагент - ОпределяемыйТип.ОрганизацияКонтрагентEDI - Ссылка на контрагента +// * Ссылка - ОпределяемыйТип.ОрганизацияКонтрагентEDI - Ссылка на организацию или контрагента // * Идентификатор - Строка - Идентификатор организации в сервисе 1С:Бизнес-сеть // * ИНН - Строка - ИНН контрагента // * КПП - Строка - КПП контрагента // * Найден - Булево - Признак успешного поиска -Функция НоваяТаблицаПоискаКонтрагентов() Экспорт +Функция НоваяТаблицаПоиска() Экспорт Результат = Новый ТаблицаЗначений; МетаданныеРегистра = Метаданные.РегистрыСведений.КонтрагентыБизнесСеть; - Результат.Колонки.Добавить("Контрагент" , МетаданныеРегистра.Измерения.Контрагент.Тип); + Результат.Колонки.Добавить("Ссылка" , Метаданные.ОпределяемыеТипы.ОрганизацияКонтрагентEDI.Тип); Результат.Колонки.Добавить("Идентификатор" , МетаданныеРегистра.Ресурсы.Идентификатор.Тип); Результат.Колонки.Добавить("ИНН" , Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(12))); Результат.Колонки.Добавить("КПП" , Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(9))); Результат.Колонки.Добавить("Найден" , Новый ОписаниеТипов("Булево")); + Результат.Колонки.Добавить("Закеширован" , Новый ОписаниеТипов("Булево")); Возврат Результат; @@ -203,7 +209,7 @@ // Выполняет поиск контрагентов в сервисе 1С:Бизнес-сеть // // Параметры: -// ТаблицаПоискаКонтрагентов - См. БизнесСетьСлужебный.НоваяТаблицаПоискаКонтрагентов +// ТаблицаПоискаКонтрагентов - См. БизнесСетьСлужебный.НоваяТаблицаПоиска Процедура ВыполнитьПоискКонтрагентов(ТаблицаПоискаКонтрагентов) Экспорт Если ТаблицаПоискаКонтрагентов.Количество() = 0 Тогда @@ -343,12 +349,136 @@ #КонецОбласти +#Область ИнтеграцияПодсистем + +#Область События + +// Обработчик оповещения подсистем внешних библиотек о регистрации контрагентов +// +// Параметры: +// Контрагенты - См. БизнесСетьСлужебный.НовыеЗарегистрированныеКонтрагенты +Процедура ПриРегистрацииКонтрагентов(Знач Контрагенты) Экспорт + + Если Контрагенты.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + ИнтеграцияПодсистемБЭД.ПриРегистрацииКонтрагентов(Контрагенты); + +КонецПроцедуры + +// Обработчик оповещения подсистем внешних библиотек об изменении идентификаторов контрагентов +// +// Параметры: +// Контрагенты - См. БизнесСетьСлужебный.НовыеИзмененныеКонтрагенты +Процедура ПриИзмененииИдентификаторовКонтрагентов(Знач Контрагенты) Экспорт + + Если Контрагенты.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + ИнтеграцияПодсистемБЭД.ПриИзмененииИдентификаторовКонтрагентов(Контрагенты); + +КонецПроцедуры + +// Обработчик оповещения подсистем внешних библиотек об изменении идентификаторов организаций +// +// Параметры: +// Организации - См. БизнесСетьСлужебный.НовыеИзмененныеОрганизации +Процедура ПриИзмененииИдентификаторовОрганизаций(Знач Организации) Экспорт + + Если Организации.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + ИнтеграцияПодсистемБЭД.ПриИзмененииИдентификаторовОрганизаций(Организации); + +КонецПроцедуры + +#Область Конструкторы + +// Возвращаемое значение: +// ТаблицаЗначений: +// * Контрагент - ОпределяемыйТип.КонтрагентБЭД - Ссылка на контрагента +// * Идентификатор - Строка - Идентификатор контрагента в сервисе 1С:Бизнес-сеть +// * ИНН - Строка - ИНН контрагента +// * КПП - Строка - КПП контрагента +Функция НовыеЗарегистрированныеКонтрагенты() Экспорт + + Результат = Новый ТаблицаЗначений; + МетаданныеРегистра = Метаданные.РегистрыСведений.КонтрагентыБизнесСеть; + + Результат.Колонки.Добавить("Контрагент" , МетаданныеРегистра.Измерения.Контрагент.Тип); + Результат.Колонки.Добавить("Идентификатор" , МетаданныеРегистра.Ресурсы.Идентификатор.Тип); + Результат.Колонки.Добавить("ИНН" , МетаданныеРегистра.Реквизиты.ИНН.Тип); + Результат.Колонки.Добавить("КПП" , МетаданныеРегистра.Реквизиты.КПП.Тип); + + Возврат Результат; + +КонецФункции + +// Возвращаемое значение: +// ТаблицаЗначений: +// * Контрагент - ОпределяемыйТип.КонтрагентБЭД - Ссылка на контрагента +// * СтарыйИдентификатор - Строка - Идентификатор контрагента в сервисе 1С:Бизнес-сеть до изменения +// * СтарыйИНН - Строка - ИНН контрагента до изменения +// * СтарыйКПП - Строка - КПП контрагента до изменения +// * НовыйИдентификатор - Строка - Идентификатор контрагента в сервисе 1С:Бизнес-сеть после изменения +// * НовыйИНН - Строка - ИНН контрагента после изменения +// * НовыйКПП - Строка - КПП контрагента после изменения +Функция НовыеИзмененныеКонтрагенты() Экспорт + + Результат = Новый ТаблицаЗначений; + МетаданныеРегистра = Метаданные.РегистрыСведений.КонтрагентыБизнесСеть; + + Результат.Колонки.Добавить("Контрагент" , МетаданныеРегистра.Измерения.Контрагент.Тип); + Результат.Колонки.Добавить("СтарыйИдентификатор" , МетаданныеРегистра.Ресурсы.Идентификатор.Тип); + Результат.Колонки.Добавить("СтарыйИНН" , МетаданныеРегистра.Реквизиты.ИНН.Тип); + Результат.Колонки.Добавить("СтарыйКПП" , МетаданныеРегистра.Реквизиты.КПП.Тип); + Результат.Колонки.Добавить("НовыйИдентификатор" , МетаданныеРегистра.Ресурсы.Идентификатор.Тип); + Результат.Колонки.Добавить("НовыйИНН" , МетаданныеРегистра.Реквизиты.ИНН.Тип); + Результат.Колонки.Добавить("НовыйКПП" , МетаданныеРегистра.Реквизиты.КПП.Тип); + + Возврат Результат; + +КонецФункции + +// Возвращаемое значение: +// ТаблицаЗначений: +// * Организация - ОпределяемыйТип.ОрганизацияКонтрагентEDI - Ссылка на организацию +// * СтарыйИдентификатор - Строка - Идентификатор контрагента в сервисе 1С:Бизнес-сеть до изменения +// * СтарыйИНН - Строка - ИНН контрагента до изменения +// * СтарыйКПП - Строка - КПП контрагента до изменения +// * НовыйИдентификатор - Строка - Идентификатор контрагента в сервисе 1С:Бизнес-сеть после изменения +// * НовыйИНН - Строка - ИНН контрагента после изменения +// * НовыйКПП - Строка - КПП контрагента после изменения +Функция НовыеИзмененныеОрганизации() Экспорт + + Результат = Новый ТаблицаЗначений; + МетаданныеРегистра = Метаданные.РегистрыСведений.ОрганизацииБизнесСеть; + + Результат.Колонки.Добавить("Организация" , МетаданныеРегистра.Измерения.Организация.Тип); + Результат.Колонки.Добавить("СтарыйИдентификатор" , МетаданныеРегистра.Ресурсы.Идентификатор.Тип); + Результат.Колонки.Добавить("СтарыйИНН" , МетаданныеРегистра.Реквизиты.ИНН.Тип); + Результат.Колонки.Добавить("СтарыйКПП" , МетаданныеРегистра.Реквизиты.КПП.Тип); + Результат.Колонки.Добавить("НовыйИдентификатор" , МетаданныеРегистра.Ресурсы.Идентификатор.Тип); + Результат.Колонки.Добавить("НовыйИНН" , МетаданныеРегистра.Реквизиты.ИНН.Тип); + Результат.Колонки.Добавить("НовыйКПП" , МетаданныеРегистра.Реквизиты.КПП.Тип); + + Возврат Результат; + +КонецФункции + +#КонецОбласти + +#КонецОбласти + #Область ДляВызоваИзДругихПодсистем // См. СтандартныеПодсистемыСервер.ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод Процедура ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод(Методы) Экспорт - Методы.Вставить("ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод", Истина); + Методы.Вставить("УстановитьРасписаниеОбновленияИдентификаторовКонтрагентов", Ложь); КонецПроцедуры @@ -356,6 +486,8 @@ #КонецОбласти +#КонецОбласти + #Область СлужебныеПроцедурыИФункции #Область ПоставляемыеДанные @@ -367,7 +499,7 @@ #КонецОбласти -#Область Имя +#Область ПоискКонтрагентовВСервисе // См. ВыполнитьПоискКонтрагентов Процедура ВыполнитьПоискКонтрагентовВСервисе(ТаблицаПоискаКонтрагентов) @@ -424,4 +556,5 @@ #КонецОбласти -#КонецОбласти \ No newline at end of file +#КонецОбласти + diff --git a/Конфигурация/CommonModules/БизнесСетьСлужебныйКлиент/Ext/Module.bsl b/Конфигурация/CommonModules/БизнесСетьСлужебныйКлиент/Ext/Module.bsl index 007efcf6c..80cbfbe12 100644 --- a/Конфигурация/CommonModules/БизнесСетьСлужебныйКлиент/Ext/Module.bsl +++ b/Конфигурация/CommonModules/БизнесСетьСлужебныйКлиент/Ext/Module.bsl @@ -411,6 +411,33 @@ КонецФункции +// Подготовить организацию к использованию. +// +// Параметры: +// Организация - ОпределяемыйТип.Организация - Проверяемая / подключаемая организация +// ФормаВладелец - ФормаКлиентскогоПриложения - Активная форма из которой требуется вызвать подключение +// Оповещение - ОписаниеОповещения - Обработчик завершения подключения. Параметры: +// # ОрганизацияПодключена - Булево - Признак готовности организации к запросам +// # ДополнительныеПараметры - Произвольный - произвольные данные, переданные в описании оповещения. +Процедура ПодготовитьОрганизациюКИспользованию( + Знач Организация, + Знач ФормаВладелец = Неопределено, + Знач Оповещение = Неопределено) Экспорт + + Если БизнесСетьКлиент.ОрганизацияНеПодключенаТребуетсяПовторноеПодключение(Организация) Тогда + ДополнительныеПараметры = НовыеПараметрыПодготовитьОрганизациюКИспользованию(); + ДополнительныеПараметры.Оповещение = Оповещение; + ДополнительныеПараметры.Организация = Организация; + + ВнутреннееОповещение = Новый ОписаниеОповещения( + "ПослеПодключенияОрганизации", ЭтотОбъект, ДополнительныеПараметры); + ОткрытьФормуПодключенияОрганизации(Организация, ФормаВладелец, ВнутреннееОповещение); + Иначе + ВыполнитьОбработкуОповещения(Оповещение, Истина); + КонецЕсли; + +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -648,4 +675,33 @@ КонецПроцедуры +// Возвращаемое значение: +// Структура: +// * Оповещение - ОписаниеОповещения +// - Неопределено +// * Организация - ОпределяемыйТип.Организация +// - Неопределено +Функция НовыеПараметрыПодготовитьОрганизациюКИспользованию() + + Результат = Новый Структура; + + Результат.Вставить("Оповещение" , Неопределено); + Результат.Вставить("Организация" , Неопределено); + + Возврат Результат; + +КонецФункции + +// Параметры: +// Результат - Произвольный +// ДополнительныеПараметры - См. НовыеПараметрыПодготовитьОрганизациюКИспользованию +Процедура ПослеПодключенияОрганизации(Знач Результат, Знач ДополнительныеПараметры) Экспорт + + ОрганизацияПодключена = Не БизнесСетьКлиент.ОрганизацияНеПодключенаТребуетсяПовторноеПодключение( + ДополнительныеПараметры.Организация); + + ВыполнитьОбработкуОповещения(ДополнительныеПараметры.Оповещение, ОрганизацияПодключена); + +КонецПроцедуры + #КонецОбласти \ No newline at end of file diff --git a/Конфигурация/CommonModules/ВариантыОтчетов/Ext/Module.bsl b/Конфигурация/CommonModules/ВариантыОтчетов/Ext/Module.bsl index 97c538297..afdc2687b 100644 --- a/Конфигурация/CommonModules/ВариантыОтчетов/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ВариантыОтчетов/Ext/Module.bsl @@ -805,7 +805,7 @@ УдалятьВсе = (ИменаОтчетов = "" Или ИменаОтчетов = "*"); МассивУдаляемыхКлючейОбъектов = Новый Массив; - ВыборкаХранилища = ХранилищеВариантовОтчетов.Выбрать(НовыйФильтрПоКлючуОбъекта(ИменаОтчетов)); + ВыборкаХранилища = ПолучитьСтандартноеХранилищеВариантовОтчетов().Выбрать(НовыйФильтрПоКлючуОбъекта(ИменаОтчетов)); ОшибокЧтенияПодряд = 0; Пока Истина Цикл Попытка @@ -824,7 +824,7 @@ Если ИменаОтчетов = "" Или ИменаОтчетов = "*" Тогда Прервать; Иначе - ВыборкаХранилища = ХранилищеВариантовОтчетов.Выбрать(НовыйФильтрПоКлючуОбъекта(ИменаОтчетов)); + ВыборкаХранилища = ПолучитьСтандартноеХранилищеВариантовОтчетов().Выбрать(НовыйФильтрПоКлючуОбъекта(ИменаОтчетов)); Продолжить; КонецЕсли; ИначеЕсли ЭлементВыборкиПолучен = Неопределено Тогда diff --git a/Конфигурация/CommonModules/ВариантыОтчетовПереопределяемый/Ext/Module.bsl b/Конфигурация/CommonModules/ВариантыОтчетовПереопределяемый/Ext/Module.bsl index d34cba72a..48e28e28f 100644 --- a/Конфигурация/CommonModules/ВариантыОтчетовПереопределяемый/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ВариантыОтчетовПереопределяемый/Ext/Module.bsl @@ -612,6 +612,8 @@ ВариантыОтчетов.НастроитьОтчетВМодулеМенеджера(Настройки, Метаданные.Отчеты.УОП_КонтрольЗакупок); ВариантыОтчетов.НастроитьОтчетВМодулеМенеджера(Настройки, Метаданные.Отчеты.УОП_ABCАнализЗакупок); ВариантыОтчетов.НастроитьОтчетВМодулеМенеджера(Настройки, Метаданные.Отчеты.УОП_ABCXYZАнализЗакупок); + ВариантыОтчетов.НастроитьОтчетВМодулеМенеджера(Настройки, Метаданные.Отчеты.УОП_ABCАнализСписаний); + ВариантыОтчетов.НастроитьОтчетВМодулеМенеджера(Настройки, Метаданные.Отчеты.УОП_ABCXYZАнализСписаний); ВариантыОтчетов.НастроитьОтчетВМодулеМенеджера(Настройки, Метаданные.Отчеты.УОП_ФудКост); ВариантыОтчетов.НастроитьОтчетВМодулеМенеджера(Настройки, Метаданные.Отчеты.УОП_КалькуляционнаяКарточкаОП1); ВариантыОтчетов.НастроитьОтчетВМодулеМенеджера(Настройки, Метаданные.Отчеты.УОП_ТехникоТехнологическаяКарта); diff --git a/Конфигурация/CommonModules/ВидыПриложенийУНФ/Ext/Module.bsl b/Конфигурация/CommonModules/ВидыПриложенийУНФ/Ext/Module.bsl index aafea4cbb..122c518f5 100644 --- a/Конфигурация/CommonModules/ВидыПриложенийУНФ/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ВидыПриложенийУНФ/Ext/Module.bsl @@ -211,6 +211,8 @@ УстановитьРасширениеВидаПриложения(ИмяМакетаРасширения, РезультатОбработки); КонецЕсли; + ПланыВидовХарактеристик.ДополнительныеРеквизитыБизнесПриложение.ПослеУстановкиВидаПриложения(); + КонецПроцедуры // См. ВидыПриложенийПереопределяемый.ПослеПереходаНаВидПриложения diff --git a/Конфигурация/CommonModules/ВизуализацияЭДОСлужебный/Ext/Module.bsl b/Конфигурация/CommonModules/ВизуализацияЭДОСлужебный/Ext/Module.bsl index 7ed0c5830..a92c7f8bc 100644 --- a/Конфигурация/CommonModules/ВизуализацияЭДОСлужебный/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ВизуализацияЭДОСлужебный/Ext/Module.bsl @@ -36,13 +36,13 @@ КонецЕсли; НаименованиеЗадания = НСтр("ru = 'Получение визуализации электронного документа'"); - ВыполняемыйМетод = "ВизуализацияЭДО.ПолучениеВизуализацииЭлектронныхДокументовЭДО"; ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияПроцедуры(); ПараметрыВыполнения.НаименованиеФоновогоЗадания = НаименованиеЗадания; ПараметрыВыполнения.КлючФоновогоЗадания = КлючФоновогоЗадания; ПараметрыВыполнения.ОжидатьЗавершение = 0; ПараметрыВыполнения.ЗапуститьВФоне = Истина; - ДлительныеОперации.ВыполнитьПроцедуру(ПараметрыВыполнения, ВыполняемыйМетод); + ДлительныеОперации.ВыполнитьПроцедуру(ПараметрыВыполнения, + "ВизуализацияЭДО.ПолучениеВизуализацииЭлектронныхДокументовЭДО"); КонецПроцедуры // Получить визуализацию из кэша. @@ -1292,7 +1292,11 @@ Иначе ПараметрыДобавленияФайла = РаботаСФайлами.ПараметрыДобавленияФайла(); ПараметрыДобавленияФайла.ВладелецФайлов = ДокументЭДО; - ПараметрыДобавленияФайла.ИмяБезРасширения = СвойстваВизуализации.ИмяФайла; + Если РасширениеОригинальногоФайлаВизуализацииPDF(СвойстваВизуализации) Тогда + ПараметрыДобавленияФайла.ИмяБезРасширения = ИмяФайлаВизуализацииБезРасширения(СвойстваВизуализации); + Иначе + ПараметрыДобавленияФайла.ИмяБезРасширения = СвойстваВизуализации.ИмяФайла; + КонецЕсли; ПараметрыДобавленияФайла.РасширениеБезТочки = РасширениеБезТочки; НоваяСсылкаНаФайл = Справочники.КэшВизуализацииДокументовЭДОПрисоединенныеФайлы.ПолучитьСсылку(); КлючЗамера = "РаботаСФайлами.ДобавитьФайлЭДО"; @@ -1305,6 +1309,30 @@ КонецПроцедуры +// Параметры: +// СвойстваВизуализации - см. ВизуализацияЭДО.НовыеСвойстваВизуализации +// +// Возвращаемое значение: +// Булево +Функция РасширениеОригинальногоФайлаВизуализацииPDF(СвойстваВизуализации) + + РасширениеФайла = ОбщегоНазначенияКлиентСервер.ПолучитьРасширениеИмениФайла(СвойстваВизуализации.ИмяФайла); + Возврат РаботаСФайламиБЭДКлиентСервер.ЭтоРасширениеФайлаPDF(РасширениеФайла); + +КонецФункции + +// Параметры: +// СвойстваВизуализации - см. ВизуализацияЭДО.НовыеСвойстваВизуализации +// +// Возвращаемое значение: +// Строка +Функция ИмяФайлаВизуализацииБезРасширения(СвойстваВизуализации) + + СтруктураИмениФайла = ОбщегоНазначенияКлиентСервер.РазложитьПолноеИмяФайла(СвойстваВизуализации.ИмяФайла); + Возврат СтруктураИмениФайла.ИмяБезРасширения; + +КонецФункции + // Удалить регистрацию документа ЭДО из РС.ОчередьЗапросовВизуализацииЭДО. // // Параметры: @@ -1653,22 +1681,21 @@ Возврат РезультатРаспознавания; ИначеЕсли ЗначениеЗаполнено(ДанныеДокумента.ПроверкаЗаписанногоДокумента) И ЗначениеЗаполнено(ДанныеДокумента.ПроверкаЗаписанногоДокумента.Ссылка) Тогда - ВидДокумента = ДанныеДокумента.ПроверкаЗаписанногоДокумента.ВидДокумента; + ДанныеДокументаДляРаспознавания = ДанныеДокумента.ПроверкаЗаписанногоДокумента; ИначеЕсли ЗначениеЗаполнено(ДанныеДокумента.ПроверкаНовогоДокумента) Тогда - ВидДокумента = ДанныеДокумента.ПроверкаНовогоДокумента.ВидДокумента; + ДанныеДокументаДляРаспознавания = ДанныеДокумента.ПроверкаНовогоДокумента; Иначе Возврат РезультатРаспознавания; КонецЕсли; Если ОбщегоНазначения.ПодсистемаСуществует("ЭлектронноеВзаимодействие.ЭлектронноеАктированиеЕИС") Тогда МодульПодсистемы = ОбщегоНазначения.ОбщийМодуль("ЭлектронноеАктированиеЕИСПолучениеВходящих"); - МодульПодсистемы.ПриРаспознанииДокумента(ВидДокумента, РезультатРаспознавания); + МодульПодсистемы.ПриРаспознанииДокумента(ДанныеДокументаДляРаспознавания.ВидДокумента, РезультатРаспознавания); КонецЕсли; Если ОбщегоНазначения.ПодсистемаСуществует("ЭлектронноеВзаимодействие.ОбменСГИСЭПД") Тогда - МодульПодсистемы = ОбщегоНазначения.ОбщийМодуль("ОбменСГИСЭПД"); - МодульПодсистемы.ПриРаспознанииДокумента(ВидДокумента, РезультатРаспознавания); + МодульПодсистемы.ПриРаспознанииДокумента(ДанныеДокументаДляРаспознавания, РезультатРаспознавания); КонецЕсли; Возврат РезультатРаспознавания; КонецФункции @@ -2301,4 +2328,11 @@ #КонецОбласти +// См. СтандартныеПодсистемыСервер.ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод +Процедура ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод(Методы) Экспорт + + Методы.Вставить("ПолучениеВизуализацииЭлектронныхДокументовЭДО", Истина); + +КонецПроцедуры + #КонецОбласти diff --git a/Конфигурация/CommonModules/ВозможностиПриложения/Ext/Module.bsl b/Конфигурация/CommonModules/ВозможностиПриложения/Ext/Module.bsl index 81c1315a8..b33078064 100644 --- a/Конфигурация/CommonModules/ВозможностиПриложения/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ВозможностиПриложения/Ext/Module.bsl @@ -6,7 +6,7 @@ // Установить вид приложения "Пустое" // // Параметры: -// РезультатОбработки - Неопределено, Структура - См. ВидыПриложенийСервер.НовыйРезультатОбработки +// РезультатОбработки - Неопределено, Структура - результат обработки БТС // Процедура УстановитьВидПриложенияПустое(РезультатОбработки) Экспорт @@ -118,7 +118,7 @@ // Установить вид приложения "Управление нашей фирмой" // // Параметры: -// РезультатОбработки - Неопределено, Структура - См. ВидыПриложенийСервер.НовыйРезультатОбработки +// РезультатОбработки - Неопределено, Структура - результат обработки БТС // Процедура УстановитьВидПриложенияУНФ(РезультатОбработки) Экспорт @@ -351,7 +351,7 @@ // Установить вид приложения "Розница" // // Параметры: -// РезультатОбработки - Неопределено, Структура - См. ВидыПриложенийСервер.НовыйРезультатОбработки +// РезультатОбработки - Неопределено, Структура - результат обработки БТС // Процедура УстановитьВидПриложенияРозница(РезультатОбработки) Экспорт @@ -510,7 +510,7 @@ // Установить вид приложения "Бизнес" // // Параметры: -// РезультатОбработки - см. ВидыПриложенийСервер.НовыйРезультатОбработки +// РезультатОбработки - Неопределено, Структура - результат обработки БТС // Процедура УстановитьВидПриложенияБизнесПриложение(РезультатОбработки) Экспорт @@ -1240,8 +1240,152 @@ КонецФункции +// Процедура - Заполнить основные данные всех видов приложений +// +// вызывается только один раз при создании новой базы 1С +// +Процедура ЗаполнитьОсновныеДанныеВсехВидовПриложений() Экспорт + + Справочники.ПравилаРабочегоПроцесса.ЗаполнитьПоставляемыеПравила(); + ШаблоныПечатиОфисныхДокументов.СоздатьПредопределенныеШаблоныКоммерческогоПредложения(); + ШаблоныПечатиОфисныхДокументов.СоздатьПредопределенныеШаблоныДоговоровКонтрагентов(); + РегистрыСведений.СоответствиеПолейЛидаИКонтрагента.ЗаполнитьПоставляемыеСоответствияРеквизитовЛидаИКонтрагента(); + Документы.ЗаказПокупателя.СоздатьПоставляемыеШаблоныСообщений(); + Справочники.ВидыЗаказовПокупателей.ЗаполнитьОсновнойВидЗаказа(); + Справочники.ВидыЗаказНарядов.ЗаполнитьОсновнойВидЗаказа(); + + СпособИспользованияВидовЦенДляВозвратов = Перечисления.СпособыИспользованияВидовЦенДляВозвратов.ДляНовыхПользователей; + Константы.СпособИспользованияВидовЦенДляВозвратов.Установить(СпособИспользованияВидовЦенДляВозвратов); + + Константы.НачалоИспользованияСФ1137.Установить(Дата(2012, 04, 01)); + + // Начало действия Постановления Правительства РФ № 981 (счет-фактура) + Константы.НачалоИспользованияСФ981.Установить(Дата(2017, 10, 01)); + + // Настройка отбора номенклатуры. + ПерсональныеНастройкиРУНФ.Установить(Перечисления.ВидыОтборовНоменклатуры.КатегорииНоменклатуры, + "ОсновнойВидОтбора"); + + // Настройки подбора + ТекущийПользователь = Пользователи.ТекущийПользователь(); + ПодборНоменклатурыВДокументах.УстановитьСтандартныеНастройкиПодбора(ТекущийПользователь); + + // Формирование печатных форм в пользовательских единицах измерения + Константы.ПечатьПользовательскихЕдиницИзмерения.Установить( + Перечисления.ПечатьПользовательскихЕдиницИзмерения.ПересчитыватьВБазовуюЕдиницуИзмеренияНоменклатуры); + + // заполнение производственного календаря организации + КалендарьПоПроизводственномуКалендарюРФ = ГрафикиРаботыУНФ.КалендарьПоПроизводственномуКалендарюРФ(); + Если КалендарьПоПроизводственномуКалендарюРФ <> Неопределено Тогда + ОсновнаяОрганизация = Справочники.Организации.ОсновнаяОрганизация.ПолучитьОбъект(); + ОсновнаяОрганизация.ПроизводственныйКалендарь = КалендарьПоПроизводственномуКалендарюРФ; + ОбновлениеИнформационнойБазы.ЗаписатьДанные(ОсновнаяОрганизация); + КонецЕсли; + + // Создание стартового набора показателей бизнеса + Справочники.ПоказателиБизнеса.СформироватьПоказателиБизнесаДоходыРасходыПоШаблону(); + Справочники.ПоказателиБизнеса.СформироватьПоказателиБизнесаДенежныйПотокПоШаблону(); + Справочники.ПоказателиБизнеса.СформироватьПоказателиБизнесаБалансПоШаблону(); + + // Создание стартового набора карточек анализа бизнеса + Справочники.КарточкиАнализаБизнеса.СформироватьНаборПоставляемыхКарточек(); + + ОтчетыУНФ.Обновить(); + ОтчетыУНФ.ОбновитьТегиОтчетов(); + + // Заполнение констант ДатаНачалаРегистрацииРозничныхПродажВЕГАИС и ДатаНачалаРегистрацииРозничныхПродажВЕГАИСВСельскойМестности + ИнтеграцияЕГАИСУНФ.УстановитьКонстантыЕГАИС(); + + // Настройка вида КИ для ПФ Товарный чек + КИТоварногоЧека = Перечисления.КонтактнаяИнформацияТоварногоЧека.ОрганизацияИСтруктурнаяЕдиница; + Константы.КонтактнаяИнформацияТоварногоЧека.Установить(КИТоварногоЧека); + + // Создание шаблонов наименований для предопределенной категории. + ШаблоныНаименований.СоздатьШаблоныПоУмолчанию(Справочники.КатегорииНоменклатуры.БезКатегории); + + // Расчет стоимости операций сдельным нарядом с учетом нормы времени + Константы.РасчетСтоимостиОперацийПоНормеВремени.Установить(Перечисления.ДаНет.Да); + + // Установить значение константы использования ручного распределения материалов по умолчанию + Константы.ИспользоватьРучноеРаспределениеМатериаловПоУмолчанию.Установить(Перечисления.ДаНет.Нет); + + // Дата изменения движений по ордерному складу. + Константы.ДатаОбновленияНаРелиз_1_2_1.Установить("19800101"); + + // Коды товаров SKU + Константы.НижняяГраницаДиапазонаSKUВесовогоТовара.Установить(1); + Константы.ВерхняяГраницаДиапазонаSKUВесовогоТовара.Установить(99999); + + Константы.СпособЗачетаПредоплатыПоУмолчанию.Установить(Перечисления.СпособыЗачетаИРаспределенияПлатежей.Вручную); + Константы.СпособРазнесенияОплатыПоУмолчанию.Установить(Перечисления.СпособыЗачетаИРаспределенияПлатежей.Вручную); + + Константы.ЗачитыватьАвансыДолгиАвтоматически.Установить(Перечисления.ДаНет.Нет); + Константы.ВалютаУчета.Установить(Справочники.Валюты.ОсновнаяВалютаНачальногоЗаполнения()); + Константы.НациональнаяВалюта.Установить(Справочники.Валюты.ОсновнаяВалютаНачальногоЗаполнения()); + Константы.ЧастотаРасчетаКурсовыхРазниц.Установить(Перечисления.ЧастотаРасчетаКурсовыхРазниц.ТолькоПриЗакрытииПериода); + + // Установка значения служебной константы для регистра ДвиженияДенежныхСредств + Константы.РегистрДвиженияДенежныхСредствЗаполнен.Установить(Истина); + + // Заполнение курсов валюты. + РаботаСКурсамиВалют.ПроверитьКорректностьКурсаНа01_01_1980(Справочники.Валюты.ОсновнаяВалютаНачальногоЗаполнения()); + + ЗаполнитьНастройкиПредставленийВПечатныхФормахПриНачалеРаботы(); + + Если Не РаботаВМоделиСервиса.РазделениеВключено() Тогда + Префикс = ""; + ОбменДаннымиПереопределяемый.ПриОпределенииПрефиксаИнформационнойБазыПоУмолчанию(Префикс); + Константы.ПрефиксУзлаРаспределеннойИнформационнойБазы.Установить(Префикс); + КонецЕсли; + + // Создать группы для недостающих профилей доступа + УправлениеДоступомУНФ.СоздатьГруппыДляНедостающихПрофилей(); + + // Заполнение регистра сведений ЗначенияКБК + РегистрыСведений.ЗначенияКБК.ЗагрузитьЗначенияКБК(); + ДанныеГосударственныхОрганов.ДобавитьОбновитьПолучательКазначейство(); + + ОснованиеДоговорКонтрагента = Перечисления.ОснованиеПечатиСпособНачальногоЗаполнение.ДоговорКонтрагента; + Константы.ОснованиеПечатиЗаказПокупателя.Установить(ОснованиеДоговорКонтрагента); + Константы.ОснованиеПечатиСчетНаОплату.Установить(ОснованиеДоговорКонтрагента); + + // Использование новой обработки печати этикеток и ценников + Константы.ИспользоватьТолькоНовуюОбработкуПечатиЦенников.Установить(Истина); + + // Установим признак контроля остатков при пробитии чеков ККМ + Константы.КонтролироватьОстаткиПриПробитииЧековККМ.Установить(Истина); + + // Установим контроль денег в кассах при пробитии чеков ККМ + Константы.КонтролироватьОстаткиДенегВКассах.Установить(Истина); + + // Константы прайс-листа + Константы.ПрайсЛистВыводитьКод.Установить(Перечисления.ДаНет.Да); + Константы.ПрайсЛистВыводитьПолноеНаименование.Установить(Перечисления.ДаНет.Нет); + Константы.ПрайсЛистИспользоватьИерархиюНоменклатуры.Установить(Истина); + Константы.ПрайсЛистФормироватьПоНаличиюНаСкладах.Установить(Ложь); + + Константы.ФункциональнаяОпцияКонтрольДоговоров.Установить(Перечисления.ВидыКонтроляДоговоровПриПроведении.НеКонтролировать); + Константы.СчетУчетаЗапасовДляНоменклатурыПоУмолчанию.Установить(ПланыСчетов.Управленческий.СырьеИМатериалы); + + Константы.НеИспользоватьВидыЗаказовПокупателей.Установить(Истина); + Константы.НеИспользоватьВидыЗаказНарядов.Установить(Истина); + Константы.НеИспользоватьНесколькоОрганизаций.Установить(Истина); + + Константы.ВестиРасчетыПоДоговорам.Установить(Истина); + Константы.ВестиРасчетыПоДокументам.Установить(Истина); + Константы.ВестиРасчетыПоЗаказам.Установить(Истина); + Константы.ВестиУчетОплатыПоСчетам.Установить(Истина); + + // Для всех новых баз, начиная с 3.0.10 + Константы.ТребуетсяКонтрольДоговоровКонтрагентовВДенежныхДокументах.Установить(Истина); + + Константы.ВыводитьСуммуБезСкидки.Установить(Перечисления.ВариантыВыводаСуммыБезСкидки.Печатать); + +КонецПроцедуры + #КонецОбласти + #Область СлужебныеПроцедурыИФункции Функция ОписанияПриложенийПоПараметрамЗапуска(ПараметрыЗапускаКлиента) @@ -1624,149 +1768,6 @@ КонецПроцедуры -// Процедура - Заполнить основные данные всех видов приложений -// -// вызывается только один раз при создании новой базы 1С -// -Процедура ЗаполнитьОсновныеДанныеВсехВидовПриложений() Экспорт - - Справочники.ПравилаРабочегоПроцесса.ЗаполнитьПоставляемыеПравила(); - ШаблоныПечатиОфисныхДокументов.СоздатьПредопределенныеШаблоныКоммерческогоПредложения(); - ШаблоныПечатиОфисныхДокументов.СоздатьПредопределенныеШаблоныДоговоровКонтрагентов(); - РегистрыСведений.СоответствиеПолейЛидаИКонтрагента.ЗаполнитьПоставляемыеСоответствияРеквизитовЛидаИКонтрагента(); - Документы.ЗаказПокупателя.СоздатьПоставляемыеШаблоныСообщений(); - Справочники.ВидыЗаказовПокупателей.ЗаполнитьОсновнойВидЗаказа(); - Справочники.ВидыЗаказНарядов.ЗаполнитьОсновнойВидЗаказа(); - - СпособИспользованияВидовЦенДляВозвратов = Перечисления.СпособыИспользованияВидовЦенДляВозвратов.ДляНовыхПользователей; - Константы.СпособИспользованияВидовЦенДляВозвратов.Установить(СпособИспользованияВидовЦенДляВозвратов); - - Константы.НачалоИспользованияСФ1137.Установить(Дата(2012, 04, 01)); - - // Начало действия Постановления Правительства РФ № 981 (счет-фактура) - Константы.НачалоИспользованияСФ981.Установить(Дата(2017, 10, 01)); - - // Настройка отбора номенклатуры. - ПерсональныеНастройкиРУНФ.Установить(Перечисления.ВидыОтборовНоменклатуры.КатегорииНоменклатуры, - "ОсновнойВидОтбора"); - - // Настройки подбора - ТекущийПользователь = Пользователи.ТекущийПользователь(); - ПодборНоменклатурыВДокументах.УстановитьСтандартныеНастройкиПодбора(ТекущийПользователь); - - // Формирование печатных форм в пользовательских единицах измерения - Константы.ПечатьПользовательскихЕдиницИзмерения.Установить( - Перечисления.ПечатьПользовательскихЕдиницИзмерения.ПересчитыватьВБазовуюЕдиницуИзмеренияНоменклатуры); - - // заполнение производственного календаря организации - КалендарьПоПроизводственномуКалендарюРФ = ГрафикиРаботыУНФ.КалендарьПоПроизводственномуКалендарюРФ(); - Если КалендарьПоПроизводственномуКалендарюРФ <> Неопределено Тогда - ОсновнаяОрганизация = Справочники.Организации.ОсновнаяОрганизация.ПолучитьОбъект(); - ОсновнаяОрганизация.ПроизводственныйКалендарь = КалендарьПоПроизводственномуКалендарюРФ; - ОбновлениеИнформационнойБазы.ЗаписатьДанные(ОсновнаяОрганизация); - КонецЕсли; - - // Создание стартового набора показателей бизнеса - Справочники.ПоказателиБизнеса.СформироватьПоказателиБизнесаДоходыРасходыПоШаблону(); - Справочники.ПоказателиБизнеса.СформироватьПоказателиБизнесаДенежныйПотокПоШаблону(); - Справочники.ПоказателиБизнеса.СформироватьПоказателиБизнесаБалансПоШаблону(); - - // Создание стартового набора карточек анализа бизнеса - Справочники.КарточкиАнализаБизнеса.СформироватьНаборПоставляемыхКарточек(); - - ОтчетыУНФ.Обновить(); - ОтчетыУНФ.ОбновитьТегиОтчетов(); - - // Заполнение констант ДатаНачалаРегистрацииРозничныхПродажВЕГАИС и ДатаНачалаРегистрацииРозничныхПродажВЕГАИСВСельскойМестности - ИнтеграцияЕГАИСУНФ.УстановитьКонстантыЕГАИС(); - - // Настройка вида КИ для ПФ Товарный чек - КИТоварногоЧека = Перечисления.КонтактнаяИнформацияТоварногоЧека.ОрганизацияИСтруктурнаяЕдиница; - Константы.КонтактнаяИнформацияТоварногоЧека.Установить(КИТоварногоЧека); - - // Создание шаблонов наименований для предопределенной категории. - ШаблоныНаименований.СоздатьШаблоныПоУмолчанию(Справочники.КатегорииНоменклатуры.БезКатегории); - - // Расчет стоимости операций сдельным нарядом с учетом нормы времени - Константы.РасчетСтоимостиОперацийПоНормеВремени.Установить(Перечисления.ДаНет.Да); - - // Установить значение константы использования ручного распределения материалов по умолчанию - Константы.ИспользоватьРучноеРаспределениеМатериаловПоУмолчанию.Установить(Перечисления.ДаНет.Нет); - - // Дата изменения движений по ордерному складу. - Константы.ДатаОбновленияНаРелиз_1_2_1.Установить("19800101"); - - // Коды товаров SKU - Константы.НижняяГраницаДиапазонаSKUВесовогоТовара.Установить(1); - Константы.ВерхняяГраницаДиапазонаSKUВесовогоТовара.Установить(99999); - - Константы.СпособЗачетаПредоплатыПоУмолчанию.Установить(Перечисления.СпособыЗачетаИРаспределенияПлатежей.Вручную); - Константы.СпособРазнесенияОплатыПоУмолчанию.Установить(Перечисления.СпособыЗачетаИРаспределенияПлатежей.Вручную); - - Константы.ЗачитыватьАвансыДолгиАвтоматически.Установить(Перечисления.ДаНет.Нет); - Константы.ВалютаУчета.Установить(Справочники.Валюты.ОсновнаяВалютаНачальногоЗаполнения()); - Константы.НациональнаяВалюта.Установить(Справочники.Валюты.ОсновнаяВалютаНачальногоЗаполнения()); - Константы.ЧастотаРасчетаКурсовыхРазниц.Установить(Перечисления.ЧастотаРасчетаКурсовыхРазниц.ТолькоПриЗакрытииПериода); - - // Установка значения служебной константы для регистра ДвиженияДенежныхСредств - Константы.РегистрДвиженияДенежныхСредствЗаполнен.Установить(Истина); - - // Заполнение курсов валюты. - РаботаСКурсамиВалют.ПроверитьКорректностьКурсаНа01_01_1980(Справочники.Валюты.ОсновнаяВалютаНачальногоЗаполнения()); - - ЗаполнитьНастройкиПредставленийВПечатныхФормахПриНачалеРаботы(); - - ЗаполнитьРеквизитыКлючевыхОпераций(); - Если Не РаботаВМоделиСервиса.РазделениеВключено() Тогда - Префикс = ""; - ОбменДаннымиПереопределяемый.ПриОпределенииПрефиксаИнформационнойБазыПоУмолчанию(Префикс); - Константы.ПрефиксУзлаРаспределеннойИнформационнойБазы.Установить(Префикс); - КонецЕсли; - - // Создать группы для недостающих профилей доступа - УправлениеДоступомУНФ.СоздатьГруппыДляНедостающихПрофилей(); - - // Заполнение регистра сведений ЗначенияКБК - РегистрыСведений.ЗначенияКБК.ЗагрузитьЗначенияКБК(); - ДанныеГосударственныхОрганов.ДобавитьОбновитьПолучательКазначейство(); - - ОснованиеДоговорКонтрагента = Перечисления.ОснованиеПечатиСпособНачальногоЗаполнение.ДоговорКонтрагента; - Константы.ОснованиеПечатиЗаказПокупателя.Установить(ОснованиеДоговорКонтрагента); - Константы.ОснованиеПечатиСчетНаОплату.Установить(ОснованиеДоговорКонтрагента); - - // Использование новой обработки печати этикеток и ценников - Константы.ИспользоватьТолькоНовуюОбработкуПечатиЦенников.Установить(Истина); - - // Установим признак контроля остатков при пробитии чеков ККМ - Константы.КонтролироватьОстаткиПриПробитииЧековККМ.Установить(Истина); - - // Установим контроль денег в кассах при пробитии чеков ККМ - Константы.КонтролироватьОстаткиДенегВКассах.Установить(Истина); - - // Константы прайс-листа - Константы.ПрайсЛистВыводитьКод.Установить(Перечисления.ДаНет.Да); - Константы.ПрайсЛистВыводитьПолноеНаименование.Установить(Перечисления.ДаНет.Нет); - Константы.ПрайсЛистИспользоватьИерархиюНоменклатуры.Установить(Истина); - Константы.ПрайсЛистФормироватьПоНаличиюНаСкладах.Установить(Ложь); - - Константы.ФункциональнаяОпцияКонтрольДоговоров.Установить(Перечисления.ВидыКонтроляДоговоровПриПроведении.НеКонтролировать); - Константы.СчетУчетаЗапасовДляНоменклатурыПоУмолчанию.Установить(ПланыСчетов.Управленческий.СырьеИМатериалы); - - Константы.НеИспользоватьВидыЗаказовПокупателей.Установить(Истина); - Константы.НеИспользоватьВидыЗаказНарядов.Установить(Истина); - Константы.НеИспользоватьНесколькоОрганизаций.Установить(Истина); - - Константы.ВестиРасчетыПоДоговорам.Установить(Истина); - Константы.ВестиРасчетыПоДокументам.Установить(Истина); - Константы.ВестиРасчетыПоЗаказам.Установить(Истина); - Константы.ВестиУчетОплатыПоСчетам.Установить(Истина); - - // Для всех новых баз, начиная с 3.0.10 - Константы.ТребуетсяКонтрольДоговоровКонтрагентовВДенежныхДокументах.Установить(Истина); - - Константы.ВыводитьСуммуБезСкидки.Установить(Перечисления.ВариантыВыводаСуммыБезСкидки.Печатать); - -КонецПроцедуры Процедура УстановитьБазовыеВозможностиВидовПриложенийУНФИРозницы( Значение = Истина ) @@ -1841,18 +1842,6 @@ КонецПроцедуры -// Заполняет справочник ключевых операций, устанавливает целевое время -Процедура ЗаполнитьРеквизитыКлючевыхОпераций() - - Попытка - ОценкаПроизводительностиУНФ.ЗаполнитьЦелевоеВремяОперацийПроизводительности(); - Исключение - ПодробноеПредставлениеОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); - ЗаписьЖурналаРегистрации(НСтр("ru='Заполнение ключевых операций.'", ОбщегоНазначения.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки); - КонецПопытки; - -КонецПроцедуры Процедура УстановитьПоказВыбораДемоПриложений() diff --git a/Конфигурация/CommonModules/ВыводИзОборотаКлиентСервер/Ext/Module.bsl b/Конфигурация/CommonModules/ВыводИзОборотаКлиентСервер/Ext/Module.bsl index 107725f86..8dc48830a 100644 --- a/Конфигурация/CommonModules/ВыводИзОборотаКлиентСервер/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ВыводИзОборотаКлиентСервер/Ext/Module.bsl @@ -11,25 +11,12 @@ // Возвращаемое значение: // Булево - Истина, если поле ОСУ доступно Функция ДоступноПолеОСУ(ВидПродукцииТоварнаяГруппа) Экспорт - - #Если Сервер Или ВнешнееСоединение Или МобильноеПриложениеСервер Или МобильныйАвтономныйСервер Тогда - Дата = ТекущаяДатаСеанса(); - #Иначе - Дата = ОбщегоНазначенияКлиент.ДатаСеанса(); - #КонецЕсли - - ДоступноПолеОСУ = КонструкторИСОбщегоНазначенияКлиентСервер.ЗначенияЭлементаКонструктораПоВидуПродукции( + + Возврат КонструкторИСОбщегоНазначенияКлиентСервер.ЗначенияЭлементаКонструктораПоВидуПродукции( ПредопределенноеЗначение( "Справочник.ЭлементыКонструктораВидовПродукцииИС.ПолеОСУ"), КонструкторИСМПОбщегоНазначенияКлиентСервер.ВидыПродукции(ВидПродукцииТоварнаяГруппа)); - - ДатаНачалаОформленияОСУ = КонструкторИСМПОбщегоНазначенияКлиентСервер.ДатаНачалаОформленияУПДОСУ(ВидПродукцииТоварнаяГруппа); - Если ДатаНачалаОформленияОСУ = Неопределено Тогда - Возврат Ложь; - КонецЕсли; - - Возврат ДоступноПолеОСУ И ДатаНачалаОформленияОСУ <= Дата; - + КонецФункции // Проверяет, доступно ли уведомление об отгрузке на экспорт для указанного вида продукции и причины diff --git a/Конфигурация/CommonModules/ВыгрузкиДанныхИСМП/Ext/Module.bsl b/Конфигурация/CommonModules/ВыгрузкиДанныхИСМП/Ext/Module.bsl index b1876f7f4..86283ba39 100644 --- a/Конфигурация/CommonModules/ВыгрузкиДанныхИСМП/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ВыгрузкиДанныхИСМП/Ext/Module.bsl @@ -24,7 +24,7 @@ // См. СтандартныеПодсистемыСервер.ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод Процедура ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод(Методы) Экспорт - Методы.Вставить("ЗагрузитьСведенияОбОтклоненияхИзГИСМТ", Истина); + Методы.Вставить("ЗагрузитьСведенияОбОтклоненияхИзГИСМТ"); КонецПроцедуры diff --git a/Конфигурация/CommonModules/ГенерацияШтрихкода/Ext/Module.bsl b/Конфигурация/CommonModules/ГенерацияШтрихкода/Ext/Module.bsl index 20b6f7848..ca8bc0510 100644 --- a/Конфигурация/CommonModules/ГенерацияШтрихкода/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ГенерацияШтрихкода/Ext/Module.bsl @@ -42,7 +42,7 @@ // 23 - Datamatrix EDIFACT // 24 - Datamatrix GS1ASCII // 25 - Aztec -// 26 - QR УПК +// 26 - QR в формате универсального платежного кода. // * ОтображатьТекст - Булево - отображать HRI теста для штрихкода. // * РазмерШрифта - Число - размер шрифта HRI теста для штрихкода. // * УголПоворота - Число - угол поворота. @@ -61,8 +61,8 @@ // * GS1DatabarКоличествоСтрок - Число - количество строк в штрихкоде GS1Databar. // * УбратьЛишнийФон - Булево // * ЛоготипКартинка - Строка - строка с base64 представлением png картинки логотипа. -// * ФорматQRУПК - Число - Формат QR УПК -// Возможные значения: 0-Основная(градиент), 1-Монохромная, 2-Монохромная с цветным логотипом +// * ОтображениеУниверсальногоПлатежногоКода - Число - отборажение QR универсального платежного кода (когда ТипКода = 26). +// Возможные значения: 0 - Основная(градиент), 1 - Монохромная, 2 - Монохромная с цветным логотипом // * ЛоготипРазмерПроцентОтШК - Число - процент от генерированного QR для вписывания логотипа. // * ФорматВыходногоИзображения - Число - формат выходного изображения // Возможные значения: 0 - PNG, 1 - SVG @@ -74,7 +74,7 @@ ПараметрыШтрихкода.Вставить("Высота" , 100); ПараметрыШтрихкода.Вставить("ТипКода" , 99); ПараметрыШтрихкода.Вставить("ОтображатьТекст" , Истина); - ПараметрыШтрихкода.Вставить("РазмерШрифта" , 12); + ПараметрыШтрихкода.Вставить("РазмерШрифта" , 12); ПараметрыШтрихкода.Вставить("ИмяШрифта"); ПараметрыШтрихкода.Вставить("УголПоворота" , 0); ПараметрыШтрихкода.Вставить("Штрихкод" , ""); @@ -86,12 +86,12 @@ ПараметрыШтрихкода.Вставить("ВертикальноеВыравнивание" , 1); ПараметрыШтрихкода.Вставить("GS1DatabarКоличествоСтрок", 2); ПараметрыШтрихкода.Вставить("ТипВходныхДанных", 0); - ПараметрыШтрихкода.Вставить("УбратьЛишнийФон" , Ложь); + ПараметрыШтрихкода.Вставить("УбратьЛишнийФон" , Ложь); ПараметрыШтрихкода.Вставить("ЛоготипКартинка"); - ПараметрыШтрихкода.Вставить("ЛоготипРазмерПроцентОтШК"); - ПараметрыШтрихкода.Вставить("ФорматQRУПК", 0); - ПараметрыШтрихкода.Вставить("НовыйВызовКомпоненты", Истина); - ПараметрыШтрихкода.Вставить("ФорматВыходногоИзображения", 0); + ПараметрыШтрихкода.Вставить("ЛоготипРазмерПроцентОтШК"); + ПараметрыШтрихкода.Вставить("ОтображениеУниверсальногоПлатежногоКода", 0); + ПараметрыШтрихкода.Вставить("НовыйВызовКомпоненты", Истина); + ПараметрыШтрихкода.Вставить("ФорматВыходногоИзображения", 0); Возврат ПараметрыШтрихкода; @@ -242,7 +242,7 @@ // Установим основные параметры компоненты. // Если в системе установлен шрифт по умолчанию. - // Если шрифт не найден, будет испольован шрифт "Default" встроенный в ВК генерации штрихкода. + // Если шрифт не найден, будет использован шрифт "Default" встроенный в ВК генерации штрихкода. Если ВнешняяКомпонента.НайтиШрифт(ШрифтПоУмолчанию()) Тогда // Выбираем его как шрифт для формирования картинки. ВнешняяКомпонента.Шрифт = ШрифтПоУмолчанию(); @@ -272,7 +272,7 @@ #КонецОбласти -#Область СлужебныеПроцедурыИФункции +#Область СлужебныеПроцедурыИФункции // Возвращает имя шрифта по умолчанию используемое для генерации надписей в штихкоде. // @@ -390,7 +390,7 @@ // Тип штрихкода - QR YPC Если ПараметрыШтрихкода.ТипКода = 26 Тогда ЗаписьXML.ЗаписатьНачалоЭлемента("FormatQRUPC"); - ЗаписьXML.ЗаписатьТекст(XMLСтрока(Число(ПараметрыШтрихкода.ФорматQRУПК))); + ЗаписьXML.ЗаписатьТекст(XMLСтрока(Число(ПараметрыШтрихкода.ОтображениеУниверсальногоПлатежногоКода))); ЗаписьXML.ЗаписатьКонецЭлемента(); КонецЕсли; @@ -543,9 +543,9 @@ КонецПопытки КонецЕсли; - Если ПараметрыШтрихкода.ТипКода = 26 И ПараметрыШтрихкода.Свойство("ФорматQRУПК") Тогда + Если ПараметрыШтрихкода.ТипКода = 26 И ПараметрыШтрихкода.Свойство("ОтображениеУниверсальногоПлатежногоКода") Тогда Попытка - ВнешняяКомпонента.ФорматQRУПК = ПараметрыШтрихкода.ФорматQRУПК; + ВнешняяКомпонента.ФорматQRУПК = ПараметрыШтрихкода.ОтображениеУниверсальногоПлатежногоКода; Исключение #Если НЕ МобильноеПриложениеСервер Тогда МодульОбщегоНазначения = МодульОбщегоНазначения(); diff --git a/Конфигурация/CommonModules/ДеревоЭлектронногоДокументаБЭД/Ext/Module.bsl b/Конфигурация/CommonModules/ДеревоЭлектронногоДокументаБЭД/Ext/Module.bsl index 4c84f4030..722b9bdbd 100644 --- a/Конфигурация/CommonModules/ДеревоЭлектронногоДокументаБЭД/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ДеревоЭлектронногоДокументаБЭД/Ext/Module.bsl @@ -12,6 +12,66 @@ КонецФункции +// Процедура проверяет реквизит дерева на ограничения по длине +// +// Параметры: +// ДеревоДанных - ДеревоЗначений, СтрокаДереваЗначений - Дерево данных +// Ошибки - Неопределено, Массив из Структура - ошибки, накопленные за время обработки. см. ОбщегоНазначенияБЭДКлиентСервер.НовыеПараметрыОшибки. +// ПолноеИмяРеквизита - Строка - Полное имя реквизита +// МинимальнаяДлина - Число - Минимальная длина +// МаксимальнаяДлина - Число - Максимальная длина +// НомерСтроки - Неопределено, Число - Номер строки +// +Процедура ПроверитьДлинуСтрокиЗначенияДерева(ДеревоДанных, Ошибки, ПолноеИмяРеквизита, + МинимальнаяДлина, МаксимальнаяДлина, НомерСтроки = Неопределено) Экспорт + + РеквизитСтрокаДерева = Неопределено; + Реквизит = ЗначениеРеквизитаВДереве(ДеревоДанных, ПолноеИмяРеквизита, Ложь, РеквизитСтрокаДерева); + + Если ЗначениеЗаполнено(Реквизит) Тогда + + Если СтрДлина(Реквизит) < МинимальнаяДлина Или МаксимальнаяДлина < СтрДлина(Реквизит) Тогда + + ТекстОшибки = ""; + Если МинимальнаяДлина = МаксимальнаяДлина Тогда + ШаблонОшибки = НСтр("ru = 'длина значения должна быть равна %1, указано %2'"); + ТекстОшибки = СтрШаблон(ШаблонОшибки, МинимальнаяДлина, СокрЛП(Реквизит)); + Иначе + ШаблонОшибки = НСтр("ru = 'значение должно содержать от %1 до %2 символов, указано %3'"); + ТекстОшибки = СтрШаблон(ШаблонОшибки, МинимальнаяДлина, МаксимальнаяДлина, СокрЛП(Реквизит)); + КонецЕсли; + + ДобавитьОшибкуПроверкиДереваДанных(Ошибки, РеквизитСтрокаДерева, ТекстОшибки,, НомерСтроки); + + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +// Процедура проверяет на заполненность реквизит дерева +// +// Параметры: +// ДеревоДанных - СтрокаДереваЗначений - Дерево данных +// Ошибки - Неопределено +// - Массив Из см. ОбщегоНазначенияБЭДКлиентСервер.НовыеПараметрыОшибки +// ПолноеИмяРеквизита - Строка - Полное имя реквизита +// НомерСтроки - Неопределено, Число - Номер строки +// +Процедура ПроверитьЗаполненностьЗначенияДерева(ДеревоДанных, Ошибки, ПолноеИмяРеквизита, НомерСтроки = Неопределено) Экспорт + + РеквизитСтрокаДерева = Неопределено; + Реквизит = ЗначениеРеквизитаВДереве(ДеревоДанных, ПолноеИмяРеквизита, Ложь, РеквизитСтрокаДерева); + + Если Не ЗначениеЗаполнено(Реквизит) Тогда + + ДобавитьОшибкуПроверкиДереваДанных(Ошибки, РеквизитСтрокаДерева, + ТекстОшибкиНеЗаполненногоЗначенияДерева(),, НомерСтроки); + + КонецЕсли; + +КонецПроцедуры + // Очищает значение в дереве данных. // // Параметры: @@ -79,7 +139,7 @@ ПриведенныйПуть = Сред(Реквизит, СтрДлина(Дерево.ПолныйПуть) + 2); Путь = Путь + Дерево.ПолныйПуть; КонецЕсли; - МассивРеквизитов = ОбщегоНазначенияКлиентСервер.РазложитьСтрокуПоТочкамИСлэшам(ПриведенныйПуть); + МассивРеквизитов = СтрРазделить(ПриведенныйПуть, "./\", Ложь); Если МассивРеквизитов.Количество() = 1 Тогда Возврат; КонецЕсли; @@ -174,7 +234,7 @@ КонецЦикла; - МассивРеквизитов = ОбщегоНазначенияКлиентСервер.РазложитьСтрокуПоТочкамИСлэшам(НазваниеТаблицы); + МассивРеквизитов = СтрРазделить(НазваниеТаблицы, "./\", Ложь); Если МассивРеквизитов.Количество() = 1 Тогда Возврат; КонецЕсли; diff --git a/Конфигурация/CommonModules/ДеревоЭлектронногоДокументаБЭДСлужебный/Ext/Module.bsl b/Конфигурация/CommonModules/ДеревоЭлектронногоДокументаБЭДСлужебный/Ext/Module.bsl index 61ba01b47..94a3fd395 100644 --- a/Конфигурация/CommonModules/ДеревоЭлектронногоДокументаБЭДСлужебный/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ДеревоЭлектронногоДокументаБЭДСлужебный/Ext/Module.bsl @@ -1352,7 +1352,7 @@ КонецЦикла; СтрокаТаблицы.Значение = ТаблицаДанных.Количество(); - МассивРеквизитов = ОбщегоНазначенияКлиентСервер.РазложитьСтрокуПоТочкамИСлэшам(НазваниеТаблицы); + МассивРеквизитов = СтрРазделить(НазваниеТаблицы, "./\", Ложь); Если МассивРеквизитов.Количество() = 1 Тогда Возврат; КонецЕсли; @@ -1441,7 +1441,7 @@ ОбработатьРеквизитДереваСУчетомПризнака(СтрокаДанных[ИмяКолонки], ТекущаяСтрокаПодчиненная, СтрокаРеквизитаПодчиненная, ИмяКолонкиПодчиненной, СтрокаРеквизитаПодчиненная.ПолныйПуть); - МассивРеквизитов = ОбщегоНазначенияКлиентСервер.РазложитьСтрокуПоТочкамИСлэшам(СтрокаРеквизитаПодчиненная.ПолныйПуть); + МассивРеквизитов = СтрРазделить(СтрокаРеквизитаПодчиненная.ПолныйПуть, "./\", Ложь); Если МассивРеквизитов.Количество() = 1 Тогда Возврат; diff --git a/Конфигурация/CommonModules/ДлительныеОперации/Ext/Module.bsl b/Конфигурация/CommonModules/ДлительныеОперации/Ext/Module.bsl index 403c02064..1400dccd9 100644 --- a/Конфигурация/CommonModules/ДлительныеОперации/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ДлительныеОперации/Ext/Module.bsl @@ -1220,7 +1220,7 @@ Иначе БезопасныйРежимПриСоздании = БезопасныйРежим; КонецЕсли; - Обработка = ВнешниеОбработки.Создать(Параметры.ИмяОбработки, БезопасныйРежимПриСоздании); + Обработка = ВнешниеОбработки.Создать(Параметры.ИмяОбработки, БезопасныйРежимПриСоздании); // Не нарушает безопасность информации, так как внешний код подключается также, как при использовании Файл - Открыть. КонецЕсли; Иначе Обработка = Обработки[Параметры.ИмяОбработки].Создать(); @@ -1265,7 +1265,7 @@ Иначе БезопасныйРежимПриСоздании = БезопасныйРежим; КонецЕсли; - Отчет = ВнешниеОтчеты.Создать(Параметры.ИмяОтчета, БезопасныйРежимПриСоздании); + Отчет = ВнешниеОтчеты.Создать(Параметры.ИмяОтчета, БезопасныйРежимПриСоздании); // Не нарушает безопасность информации, так как внешний код подключается также, как при использовании Файл - Открыть. Иначе Отчет = Отчеты[Параметры.ИмяОтчета].Создать(); КонецЕсли; @@ -1940,7 +1940,7 @@ КонецЕсли; Попытка - ОбработкаОтчетОбъект = МенеджерОбъекта.Создать(ПолноеИмяФайла, БезопасныйРежимПриСоздании); + ОбработкаОтчетОбъект = МенеджерОбъекта.Создать(ПолноеИмяФайла, БезопасныйРежимПриСоздании); // Не нарушает безопасность информации, так как внешний код подключается также, как при использовании Файл - Открыть. Исключение Если СоздатьВременныйФайл Тогда УдалитьФайлы(ПолноеИмяФайла); diff --git a/Конфигурация/CommonModules/ДокументыУНФ/Ext/Module.bsl b/Конфигурация/CommonModules/ДокументыУНФ/Ext/Module.bsl index bf79dc37b..c27e7cc55 100644 --- a/Конфигурация/CommonModules/ДокументыУНФ/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ДокументыУНФ/Ext/Module.bsl @@ -937,6 +937,16 @@ ИЛИ МетаданныеДокумента.Имя = "СчетФактураПолученный" Тогда Запрос.Текст = СтрЗаменить(Запрос.Текст, "#Сумма", "СуммаДокумента + СуммаНДСДокумента КАК СуммаДокумента"); + // +УОП + + ИначеЕсли МетаданныеДокумента.Имя = "СписаниеЗапасов" Тогда + + Если УОП_ОтраслевыеРешения.ОтображатьСебестоимостьСНДС() Тогда + Запрос.Текст = СтрЗаменить(Запрос.Текст, "#Сумма", "УОП_Себестоимость КАК СуммаДокумента"); + Иначе + Запрос.Текст = СтрЗаменить(Запрос.Текст, "#Сумма", "УОП_СебестоимостьБезНДС КАК СуммаДокумента"); + КонецЕсли; + // -УОП ИначеЕсли МетаданныеДокумента.Реквизиты.Найти("СуммаДокумента") <> Неопределено Тогда @@ -1093,6 +1103,16 @@ ИЛИ КлючИЗначение.Ключ = "СчетФактураПолученный" Тогда Запрос.Текст = СтрЗаменить(Запрос.Текст, "#Сумма", "СуммаДокумента + СуммаНДСДокумента КАК СуммаДокумента"); + // +УОП + + ИначеЕсли КлючИЗначение.Ключ = "СписаниеЗапасов" Тогда + + Если УОП_ОтраслевыеРешения.ОтображатьСебестоимостьСНДС() Тогда + Запрос.Текст = СтрЗаменить(Запрос.Текст, "#Сумма", "УОП_Себестоимость КАК СуммаДокумента"); + Иначе + Запрос.Текст = СтрЗаменить(Запрос.Текст, "#Сумма", "УОП_СебестоимостьБезНДС КАК СуммаДокумента"); + КонецЕсли; + // -УОП ИначеЕсли КэшРеквизитовДокумента[КлючИЗначение.Ключ]["СуммаДокумента"] Тогда diff --git a/Конфигурация/CommonModules/ДокументыУНФКлиентСервер/Ext/Module.bsl b/Конфигурация/CommonModules/ДокументыУНФКлиентСервер/Ext/Module.bsl index 99c0c85ec..7c799796a 100644 --- a/Конфигурация/CommonModules/ДокументыУНФКлиентСервер/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ДокументыУНФКлиентСервер/Ext/Module.bsl @@ -6,6 +6,9 @@ // * СбрасыватьКоличество - Булево // * НовоеКоличествоПриИзмененииНоменклатуры - Число // * ЗапрашиватьСбросКоличества - Булево +// * ОбъединятьСтрокиПриДобавлении - Булево +// * ДобавлятьНовуюСтроку - Булево +// * ЗапрашиватьОбъединениеСтрок - Булево // Функция ПараметрыСбросаКоличества() Экспорт @@ -26,7 +29,7 @@ // Конструктор параметров сброса количества в табличных частях документов // Возвращаемое значение: // Структура: -// * РаспределятьЗаСчетРучнойСкидки - Булево +// * КорректировкаСуммыЗаСчетРучнойСкидки - Булево // * ЗапрашиватьРаспределение - Булево // Функция ПараметрыИзмененияСуммыДокумента() Экспорт diff --git a/Конфигурация/CommonModules/ДополнительныеОтчетыИОбработки/Ext/Module.bsl b/Конфигурация/CommonModules/ДополнительныеОтчетыИОбработки/Ext/Module.bsl index ec8e1e8ca..d604da608 100644 --- a/Конфигурация/CommonModules/ДополнительныеОтчетыИОбработки/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ДополнительныеОтчетыИОбработки/Ext/Module.bsl @@ -107,23 +107,20 @@ БезопасныйРежимПервогоПодключения = ?(БезопасныйРежим <> Ложь, БезопасныйРежим, Истина); РежимПодключения = БезопасныйРежимПервогоПодключения; - ИмяОбработки = Менеджер.Подключить(АдресВоВременномХранилище, , БезопасныйРежимПервогоПодключения, - ОбщегоНазначения.ОписаниеЗащитыБезПредупреждений()); - ВнешнийОбъект = Менеджер.Создать(ИмяОбработки); + ИмяОбработки = Менеджер.Подключить(АдресВоВременномХранилище, , БезопасныйРежимПервогоПодключения, ОбщегоНазначения.ОписаниеЗащитыБезПредупреждений()); // Не нарушает безопасность информации, так как подключается только внешний код, подтвержденный администратором. + ВнешнийОбъект = Менеджер.Создать(ИмяОбработки); // Не нарушает безопасность информации, так как создается уже подключенный объект. СведенияОВнешнейОбработке = ВнешнийОбъект.СведенияОВнешнейОбработке(); Если (Не СведенияОВнешнейОбработке.БезопасныйРежим Или ЕстьРазрешения) И БезопасныйРежим = Ложь Тогда // Повторное подключение в небезопасном режиме, если разрешено. - ИмяОбработки = Менеджер.Подключить(АдресВоВременномХранилище, , БезопасныйРежим, - ОбщегоНазначения.ОписаниеЗащитыБезПредупреждений()); + ИмяОбработки = Менеджер.Подключить(АдресВоВременномХранилище, , БезопасныйРежим, ОбщегоНазначения.ОписаниеЗащитыБезПредупреждений()); // Не нарушает безопасность информации, так как подключается только внешний код, подтвержденный администратором. РежимПодключения = БезопасныйРежим; СохранитьРежимПодключенияОтчетаОбработки(Ссылка, ДвоичныеДанные, БезопасныйРежим); КонецЕсли; Иначе - ИмяОбработки = Менеджер.Подключить(АдресВоВременномХранилище, , РежимПодключения, - ОбщегоНазначения.ОписаниеЗащитыБезПредупреждений()); + ИмяОбработки = Менеджер.Подключить(АдресВоВременномХранилище, , РежимПодключения, ОбщегоНазначения.ОписаниеЗащитыБезПредупреждений()); // Не нарушает безопасность информации, так как подключается только внешний код, подтвержденный администратором. КонецЕсли; ЗаписатьПримечание(Ссылка, @@ -174,7 +171,7 @@ Менеджер = ВнешниеОбработки; КонецЕсли; - Возврат Менеджер.Создать(ИмяОбработки); + Возврат Менеджер.Создать(ИмяОбработки); // Не нарушает безопасность информации, так как создается уже подключенный объект. КонецФункции @@ -1622,7 +1619,7 @@ Попытка ПараметрыОтчета.Имя = ПодключитьВнешнююОбработку(Ссылка); - ПараметрыОтчета.Объект = ВнешниеОтчеты.Создать(ПараметрыОтчета.Имя); + ПараметрыОтчета.Объект = ВнешниеОтчеты.Создать(ПараметрыОтчета.Имя); // Не нарушает безопасность информации, так как создается уже подключенный объект. Если ПолучатьМетаданные Тогда ПараметрыОтчета.Метаданные = ПараметрыОтчета.Объект.Метаданные(); КонецЕсли; @@ -2777,9 +2774,8 @@ ЭтоОтчет = (СтрокаТаблицы.Вид = "ОТЧЕТ"); АдресДанных = ПоместитьВоВременноеХранилище(СтрокаТаблицы.ДвоичныеДанные); Менеджер = ?(ЭтоОтчет, ВнешниеОтчеты, ВнешниеОбработки); - ИмяОбъекта = Менеджер.Подключить(АдресДанных, , Истина, - ОбщегоНазначения.ОписаниеЗащитыБезПредупреждений()); - ВнешнийОбъект = Менеджер.Создать(ИмяОбъекта); + ИмяОбъекта = Менеджер.Подключить(АдресДанных, , Истина, ОбщегоНазначения.ОписаниеЗащитыБезПредупреждений()); // Не нарушает безопасность информации, так как подключается только внешний код, подтвержденный администратором. + ВнешнийОбъект = Менеджер.Создать(ИмяОбъекта); // Не нарушает безопасность информации, так как создается уже подключенный объект. ВнешнийОбъектМетаданные = ВнешнийОбъект.Метаданные(); ОбработкаСведения = СтрокаТаблицы.Сведения; @@ -3193,12 +3189,11 @@ ДвоичныеДанные.Записать(РезультатРегистрации.ИмяОбъекта); #Иначе РезультатРегистрации.ИмяОбъекта = - СокрЛП(Менеджер.Подключить(ПараметрыРегистрации.АдресДанныхОбработки, , Истина, - ОбщегоНазначения.ОписаниеЗащитыБезПредупреждений())); + СокрЛП(Менеджер.Подключить(ПараметрыРегистрации.АдресДанныхОбработки, , Истина, ОбщегоНазначения.ОписаниеЗащитыБезПредупреждений())); // Не нарушает безопасность информации, так как подключается только внешний код, подтвержденный администратором. #КонецЕсли // Получение сведений о внешней обработке. - ВнешнийОбъект = Менеджер.Создать(РезультатРегистрации.ИмяОбъекта); + ВнешнийОбъект = Менеджер.Создать(РезультатРегистрации.ИмяОбъекта); // Не нарушает безопасность информации, так как создается уже подключенный объект. ВнешнийОбъектМетаданные = ВнешнийОбъект.Метаданные(); // ОбъектМетаданныхОтчет СведенияОВнешнейОбработке = ВнешнийОбъект.СведенияОВнешнейОбработке(); @@ -3443,6 +3438,10 @@ Методы.Вставить("УстановкаПараметровСеанса"); Методы.Вставить("ОбработчикКомандыЗаполнения"); + Если ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.БазоваяФункциональность") Тогда + Методы.Вставить("ВыполнитьОбработкуПоРегламентномуЗаданию"); + КонецЕсли; + Методы.Вставить("ВыполнитьКоманду", Истина); КонецПроцедуры diff --git a/Конфигурация/CommonModules/ДополнительныеОтчетыИОбработкиВМоделиСервиса/Ext/Module.bsl b/Конфигурация/CommonModules/ДополнительныеОтчетыИОбработкиВМоделиСервиса/Ext/Module.bsl index eb5ebb978..5ee80c6f4 100644 --- a/Конфигурация/CommonModules/ДополнительныеОтчетыИОбработкиВМоделиСервиса/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ДополнительныеОтчетыИОбработкиВМоделиСервиса/Ext/Module.bsl @@ -302,8 +302,7 @@ // АПК:553-выкл АдресВоВременномХранилище = ПоместитьВоВременноеХранилище(ПараметрыПодключения.ХранилищеОбработки.Получить()); Менеджер = ?(ЭтоОтчет(Ссылка), ВнешниеОтчеты, ВнешниеОбработки); - Результат = Менеджер.Подключить(АдресВоВременномХранилище, ПараметрыПодключения.ИмяОбъекта, БезопасныйРежим, - ОбщегоНазначения.ОписаниеЗащитыБезПредупреждений()); + Результат = Менеджер.Подключить(АдресВоВременномХранилище, ПараметрыПодключения.ИмяОбъекта, БезопасныйРежим, ОбщегоНазначения.ОписаниеЗащитыБезПредупреждений()); // Не нарушает безопасность информации, так как подключается только внешний код, подтвержденный администратором. // АПК:553-вкл // АПК:556-вкл // АПК:552-вкл @@ -340,9 +339,9 @@ // АПК:552-выкл Создание в области данных дополнительных отчетов и обработок, одобренных администратором сервиса. // АПК:553-выкл Если ЭтоОтчет(Ссылка) Тогда - Результат = ВнешниеОтчеты.Создать(ИмяОбработки); + Результат = ВнешниеОтчеты.Создать(ИмяОбработки); // Не нарушает безопасность информации, так как создается уже подключенный объект. Иначе - Результат = ВнешниеОбработки.Создать(ИмяОбработки); + Результат = ВнешниеОбработки.Создать(ИмяОбработки); // Не нарушает безопасность информации, так как создается уже подключенный объект. КонецЕсли; // АПК:553-вкл // АПК:552-вкл @@ -1883,4 +1882,15 @@ #КонецОбласти +// См. СтандартныеПодсистемыСервер.ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод +Процедура ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод(Методы) Экспорт + + Если ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.БазоваяФункциональность") Тогда + Методы.Вставить("УдалитьПоставляемуюОбработкуИзОбластиДанных"); + Методы.Вставить("УстановитьПоставляемуюОбработкуПриПолучении"); + Методы.Вставить("АктуализацияНастроекИспользуемойОбработки"); + КонецЕсли; + +КонецПроцедуры + #КонецОбласти diff --git a/Конфигурация/CommonModules/ДоставкаСервер/Ext/Module.bsl b/Конфигурация/CommonModules/ДоставкаСервер/Ext/Module.bsl index aade9a8f3..8ce9dfca4 100644 --- a/Конфигурация/CommonModules/ДоставкаСервер/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ДоставкаСервер/Ext/Module.bsl @@ -1193,45 +1193,38 @@ // Параметры: // Результат - Структура - содержит результат выполнения запроса в сервис; // ДокументОснование - СписокЗначений из ОпределяемыйТип.ОснованиеЗаказаСервисДоставки, -// ОпределяемыйТип.ОснованиеЗаказаСервисДоставки, -// Неопределено - документ, основание заказа на доставку. +// ОпределяемыйТип.ОснованиеЗаказаСервисДоставки, +// Неопределено - документ, основание заказа на доставку. // Процедура ОбработатьРезультатОформленияЗаказаНаДоставку(Результат, ДокументОснование = Неопределено) Экспорт - + Если Не ЗначениеЗаполнено(ДокументОснование) Или Результат = "" Или Не ОтветСервисаДоставкиКорректен(Результат) Тогда Возврат; КонецЕсли; - - ЭтоСписокДокументовОснования = ТипЗнч(ДокументОснование) = Тип("СписокЗначений"); + + ТипДокументаОснования = ТипЗнч(ДокументОснование); + ЭтоСписокДокументовОснования = ТипДокументаОснования = Тип("СписокЗначений"); Если ЭтоСписокДокументовОснования И ДокументОснование.Количество() = 0 Тогда Возврат; КонецЕсли; - + УстановитьПривилегированныйРежим(Истина); - - Если ЭтоСписокДокументовОснования Тогда - НаборЗаписей = РегистрыСведений.ЗаказыСервисовДоставки.СоздатьНаборЗаписей(); + + Если ЭтоСписокДокументовОснования Тогда Для Каждого ДокументОснования Из ДокументОснование Цикл - НоваяЗапись = НаборЗаписей.Добавить(); - НоваяЗапись.ДокументОснование = ДокументОснования.Значение; - НоваяЗапись.ТрекНомер = Результат.ТрекНомер; - НоваяЗапись.ИдентификаторЗаказа = Результат.Идентификатор; - НоваяЗапись.Статус = Результат.Статус; + ЗафиксироватьСлужебныеДанныеЗаказаНаДоставку(ДокументОснования.Значение, Результат); КонецЦикла; - НаборЗаписей.Записать(Истина); + ИначеЕсли ОбщегоНазначения.ЭтоСсылка(ТипДокументаОснования) + И Метаданные.ОпределяемыеТипы.ОснованиеЗаказаСервисДоставки.Тип.СодержитТип(ТипДокументаОснования) Тогда + ЗафиксироватьСлужебныеДанныеЗаказаНаДоставку(ДокументОснование, Результат); + Иначе Возврат; КонецЕсли; - - НоваяЗаписьРегистра = РегистрыСведений.ЗаказыСервисовДоставки.СоздатьМенеджерЗаписи(); - НоваяЗаписьРегистра.ДокументОснование = ДокументОснование[0].Значение; - НоваяЗаписьРегистра.ТрекНомер = Результат.ТрекНомер; - НоваяЗаписьРегистра.ИдентификаторЗаказа = Результат.Идентификатор; - НоваяЗаписьРегистра.Статус = Результат.Статус; - НоваяЗаписьРегистра.Записать(Истина); КонецПроцедуры + // Обрабатывает результат получения заказа на доставку из сервиса 1С:Доставка. // // Параметры: @@ -1413,6 +1406,26 @@ #Область СлужебныеПроцедурыИФункции +// Записывает данные заказа на доставку в регистр сведений ЗаказыСервисовДоставки. +// +// Параметры: +// ДокументОснование - ОпределяемыйТип.ОснованиеЗаказаСервисДоставки - документ-основание заказа на доставку. +// Результат - Структура - результат оформления заказа в сервисе доставки: +// * ТрекНомер - Строка - трек-номер заказа. +// * Идентификатор - Строка - идентификатор заказа в сервисе доставки. +// * Статус - Строка - статус заказа на доставку. +// +Процедура ЗафиксироватьСлужебныеДанныеЗаказаНаДоставку(ДокументОснование, Результат) + + НоваяЗаписьРегистра = РегистрыСведений.ЗаказыСервисовДоставки.СоздатьМенеджерЗаписи(); + НоваяЗаписьРегистра.ДокументОснование = ДокументОснование; + НоваяЗаписьРегистра.ТрекНомер = Результат.ТрекНомер; + НоваяЗаписьРегистра.ИдентификаторЗаказа = Результат.Идентификатор; + НоваяЗаписьРегистра.Статус = Результат.Статус; + НоваяЗаписьРегистра.Записать(Истина); + +КонецПроцедуры + Функция ОтветСервисаДоставкиКорректен(ОтветСервиса) ИмяСобытия = НСтр("ru='Обработка ответа сервиса доставки'"); diff --git a/Конфигурация/CommonModules/ЕдиныйНалоговыйСчет/Ext/Module.bsl b/Конфигурация/CommonModules/ЕдиныйНалоговыйСчет/Ext/Module.bsl index d7d440ab1..86e4d6105 100644 --- a/Конфигурация/CommonModules/ЕдиныйНалоговыйСчет/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ЕдиныйНалоговыйСчет/Ext/Module.bsl @@ -1,8 +1,10 @@ #Область ПрограммныйИнтерфейс -// Функция возвращает дату изменения последовательности уплаты налогов +// Возвращает дату изменения последовательности зачета налоговых платежей +// в соответствии с Федеральным законом № 196-ФЗ от 29.05.2023. +// // Возвращаемое значение: -// Дата смены алгоритма - Дата +// Дата - дата вступления в силу нового порядка зачета налоговых уплат Функция ДатаСменыПоследовательностиЗачетаУплат() Экспорт // Дата по 196-ФЗ от 29.05.2023 г. @@ -10,9 +12,11 @@ КонецФункции -// Функция возвращает дату изменения последовательности уплаты налогов при подачи уведомления +// Возвращает дату начала применения приоритезации уведомлений по НДФЛ +// в соответствии с Федеральным законом № 196-ФЗ от 29.05.2023. +// // Возвращаемое значение: -// Дата смены алгоритма - Дата +// Дата - дата смены алгоритма зачета уведомлений по НДФЛ Функция ДатаПриоритезацииУведомленияПоНДФЛ() Экспорт // Дата по 196-ФЗ от 29.05.2023 г. - через месяц после публикации @@ -20,9 +24,10 @@ КонецФункции -// Функция возвращает дату изменения последовательности уплаты налогов при подачи уведомления +// Возвращает дату перехода на приоритезацию уведомлений по страховым взносам в соответствии с 389-ФЗ от 31.07.2023. +// // Возвращаемое значение: -// Дата смены алгоритма - Дата +// Дата - дата начала применения нового алгоритма Функция ДатаПриоритезацииУведомленияПоСтраховымВзносам() Экспорт // Дата по 389-ФЗ от 31.07.2023 г. - с 01.10.2023 @@ -30,20 +35,21 @@ КонецФункции -// Функция возвращает таблицу зачета налогов за заданный период. +// Возвращает таблицу зачета налогов за указанный период по организации. // // Параметры: -// Организация - СправочникСсылка.Организации - Организация для получения остатков -// ДатаНачала - Дата начала осмотра. -// ДатаОкончания - Дата окончания осмотра. -// ВидыНалогов - Массив значений ПеречислениеСсылка.ВидыНалогов, или пусто -// Возвращаемое значение: -// Таблица значений -// Организация - СправочникСсылка.Организации -// РегистрацияВНалоговомОргане - СправочникСсылка.РегистрацииВНалоговомОргане -// ВидНалога - ПеречислениеСсылка.ВидыНалогов -// Сумма - Сумма оборота по ЕНС в разрезе платежныхналогов документов +// Организация - СправочникСсылка.Организации - организация, по которой формируются данные +// ДатаНачала - Дата - начало периода +// ДатаОкончания - Дата - окончание периода +// ВидыНалогов - Массив из ПеречислениеСсылка.ВидыНалогов - отбор по видам налогов +// - Неопределено - без отбора по видам налогов // +// Возвращаемое значение: +// ТаблицаЗначений: +// * Организация - СправочникСсылка.Организации +// * РегистрацияВНалоговомОргане - СправочникСсылка.РегистрацииВНалоговомОргане +// * ВидНалога - ПеречислениеСсылка.ВидыНалогов +// * Сумма - Число - сумма расхода (зачета) по ЕНС за период Функция ЗачтенныеУплатыНалоговЗаПериод(Организация, ДатаНачала, ДатаОкончания, ВидыНалогов = Неопределено) Экспорт ТекстЗапроса = @@ -54,14 +60,13 @@ | СУММА(РасчетыПоНалогамНаЕдиномНалоговомСчете.Сумма) КАК Сумма |ИЗ | РегистрНакопления.РасчетыПоНалогамНаЕдиномНалоговомСчете КАК РасчетыПоНалогамНаЕдиномНалоговомСчете - | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВидыНалоговИПлатежейВБюджет КАК ВидыНалоговИПлатежейВБюджет + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВидыНалогов КАК ВидыНалоговИПлатежейВБюджет | ПО РасчетыПоНалогамНаЕдиномНалоговомСчете.Налог = ВидыНалоговИПлатежейВБюджет.Ссылка |ГДЕ | РасчетыПоНалогамНаЕдиномНалоговомСчете.Период МЕЖДУ &ДатаНачала И &ДатаОкончания | И РасчетыПоНалогамНаЕдиномНалоговомСчете.ГоловнаяОрганизация = &ГоловнаяОрганизация | И РасчетыПоНалогамНаЕдиномНалоговомСчете.ВидДвижения = &ВидДвижения | И &УсловиеВидыНалога - | |СГРУППИРОВАТЬ ПО | РасчетыПоНалогамНаЕдиномНалоговомСчете.РегистрацияВНалоговомОргане, | РасчетыПоНалогамНаЕдиномНалоговомСчете.Организация, @@ -89,7 +94,7 @@ // Возвращает суммы по видам налогов, которые зарезервированы по заявлениям // // Параметры: -// Налог - Массив из СправочникСсылка.ВидыНалоговИПлатежейВБюджет - Виды налогов +// ВидыНалогов - Массив из СправочникСсылка.ВидыНалогов - Виды налогов // Документы - Массив из ДокументСсылка.ЗаявлениеОЗачетеВСчетПредстоящейОбязанности - Заявления о зачете // // Возвращаемое значение: @@ -128,8 +133,8 @@ // Организаци - СправочникСсылка.Организации - Организация, по которой необходимо вычислить зарезервированную сумму // ДатаНачала - Дата - Дата периода, с которого необходимо рассчитать зарезервированную сумму // датаОкончания - Дата - Дата периода, по которую необходимо рассчитать зарезервированную сумму -// ВидНалога - СправочникСсылка.ВидыНалоговИПлатежейВБюджет - Вид налогов -// +// ВидНалога - СправочникСсылка.ВидыНалогов - Вид налогов +// Организация - СправочникСсылка.Организации - Организация, по которой необходимо вычислить зарезервированную сумму // Возвращаемое значение: // Число // @@ -159,39 +164,37 @@ КонецФункции -// Проверяет можно ли для данного налога использовать отрицательную сумму в уведомлении +// Проверяет, допускается ли отрицательная сумма в уведомлении для указанного налога. // // Параметры: -// Налог - СправочникСсылка.ВидыНалоговИПлатежейВБюджет - проверяемый налог -// -// Возвращаемое значение: -// Булево - Истина, если можно +// Налог - СправочникСсылка.ВидыНалогов - проверяемый налог // +// Возвращаемое значение: +// Булево - Истина, если для налога допускается отрицательная сумма Функция МожноИспользоватьОтрицательнуюСуммуВУведомлении(Налог) Экспорт Возврат Налог = Справочники.ВидыНалогов.АвансовыйПлатежПриУСН Или Налог = Справочники.ВидыНалогов.АвансовыйПлатежПриУСНРасходы Или Налог = Справочники.ВидыНалогов.ЕдиныйНалогПриУСН - Или Налог = Справочники.ВидыНалогов.ЕдиныйНалогПриУСНРасходы + Или Налог = Справочники.ВидыНалогов.ЕдиныйНалогПриУСНРасходы; КонецФункции -// Функция возвращает таблицу зачета налогов за заданный период. +// Возвращает зачтенные суммы налогов по заявлениям о зачете в счет предстоящей обязанности за указанный период. // // Параметры: -// Организация - СправочникСсылка.Организации - Организация для получения остатков -// ДатаНачала - Дата начала осмотра. -// ДатаОкончания - Дата окончания осмотра. -// ВидыНалогов - Массив значений ПеречислениеСсылка.ВидыНалогов +// Организация - СправочникСсылка.Организации - организация, по которой получаются данные +// ДатаНачала - Дата - начало периода выборки зачетов +// ДатаОкончания - Дата - окончание периода выборки зачетов +// ВидыНалогов - Массив из ПеречислениеСсылка.ВидыНалогов - отбираемые виды налогов // // Возвращаемое значение: -// Таблица значений -// Организация - СправочникСсылка.Организации -// Сумма - Число - Сумма зачтенной уплаты -// Ссылка - ДокументСсылка.СписаниеСРасчетногоСчета, ДокументСсылка.РасходныйКассовыйОрдер -// Дата - Дата - Дата отражения в учете -// Уведомление - ДокументСсылка.ЗаявлениеОЗачетеВСчетПредстоящейОбязанности - Заявление о зачете сумм на ЕНС -// Оплачено - Булево - Признак состояние оплаченого вида налога -// Состояние - ПеречислениеСсылка.СостоянияБанковскихДокументов - Состояние оплаченого вида налог -// +// ТаблицаЗначений: +// * Организация - СправочникСсылка.Организации - организация зачета +// * Сумма - Число - сумма зачтенной уплаты +// * Ссылка - ДокументСсылка.РасходСоСчета, ДокументСсылка.РасходИзКассы - платежный документ зачета +// * Дата - Дата - дата отражения зачета в учете +// * Уведомление - ДокументСсылка.ЗаявлениеОЗачетеВСчетПредстоящейОбязанности - заявление о зачете +// * Оплачено - Булево - признак оплаты +// * Состояние - ПеречислениеСсылка.СостоянияБанковскихДокументов - состояние оплаты Функция ЗачтенныеУплатыНалоговПоДокументамЗаПериод(Организация, ДатаНачала, ДатаОкончания, ВидыНалогов) Экспорт ТекстЗапроса = @@ -315,7 +318,7 @@ РеквизитыОрганизации = Новый Структура("КПП, ОКТМО"); - НалогиУплачиваемыеОтдельно = ЕдиныйНалоговыйСчетПовтИсп.НалогиУплачиваемыеОтдельно(Период); + НалогиУплачиваемыеОтдельно = ЕдиныйНалоговыйСчетПовтИсп.НалогиУплачиваемыеОтдельно(); НалогУплачиваетсяОтдельно = НалогиУплачиваемыеОтдельно.Найти(Налог) <> Неопределено; ЭтоЕНП = Налог = Справочники.ВидыНалогов.ЕдиныйНалоговыйПлатеж; @@ -362,7 +365,7 @@ КодНалоговогоОргана = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Организация, "КодНалоговогоОргана"); Если Не ЗначениеЗаполнено(КодНалоговогоОргана) Тогда - Возврат + Возврат; КонецЕсли; ГосударственныйОрган = ДанныеГосударственныхОрганов.ГосударственныйОрган(Перечисления.ВидыГосударственныхОрганов.НалоговыйОрган, КодНалоговогоОргана); @@ -1040,7 +1043,6 @@ ДокументОбъект.Дата = ОбщегоНазначения.ТекущаяДатаПользователя(); ТаблицыЗаполнения = ПолучитьИзВременногоХранилища(АдресХранилищаТаблицыНалоги); - ТаблицаНалоги = ТаблицыЗаполнения.ТаблицаНалоги; Если ЗначениеЗаполнено(ТаблицыЗаполнения.ТаблицаНалоги) Тогда ДокументОбъект.Налоги.Загрузить(ТаблицыЗаполнения.ТаблицаНалоги); @@ -1049,8 +1051,6 @@ ДокументОбъект.ДополнительныеСвойства.Вставить("ЗаписьКалендаря", ЗаписьКалендаря); ДокументОбъект.ДополнительныеСвойства.Вставить("ПериодСобытия", ПериодСобытия); - МетаданныеДокумента = ДокументОбъект.Метаданные(); - БезОшибок = ДокументОбъект.ПроверитьЗаполнение(); Если БезОшибок Тогда ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение); @@ -1086,8 +1086,6 @@ Возврат; КонецЕсли; - Параметры = ПодготовитьПараметрыНачислениеНалогов(ТаблицаРеквизиты, ТаблицаНалоги); - Проводки = Движения.Управленческий; Реквизиты = ТаблицаРеквизиты[0]; @@ -1135,9 +1133,7 @@ Или Не ЗначениеЗаполнено(ТаблицаРеквизиты) Тогда Возврат; КонецЕсли; - - Параметры = ПодготовитьПараметрыПополнениеСписание(ТаблицаРеквизиты, ТаблицаНалоги); - + Проводки = Движения.Управленческий; Реквизиты = ТаблицаРеквизиты[0]; @@ -1186,8 +1182,6 @@ Возврат; КонецЕсли; - Параметры = ПодготовитьПараметрыПополнениеСписание(ТаблицаРеквизиты, ТаблицаНалоги); - Проводки = Движения.Управленческий; Реквизиты = ТаблицаРеквизиты[0]; @@ -1238,8 +1232,6 @@ Возврат; КонецЕсли; - Параметры = ПодготовитьПараметрыУплатаНалогов(ТаблицаРеквизиты, ТаблицаНалоги); - Проводки = Движения.Управленческий; Реквизиты = ТаблицаРеквизиты[0]; @@ -1286,9 +1278,7 @@ Если Не ЗначениеЗаполнено(ТаблицаНалоги) Или Не ЗначениеЗаполнено(ТаблицаРеквизиты) Тогда Возврат; - КонецЕсли; - - Параметры = ПодготовитьПараметрыНачислениеПенейШтрафов(ТаблицаРеквизиты, ТаблицаНалоги); + КонецЕсли; Проводки = Движения.Управленческий; Реквизиты = ТаблицаРеквизиты[0]; @@ -1338,8 +1328,6 @@ Возврат; КонецЕсли; - Параметры = ПодготовитьПараметрыПогашениеПенейШтрафов(ТаблицаРеквизиты, ТаблицаНалоги); - Проводки = Движения.Управленческий; Реквизиты = ТаблицаРеквизиты[0]; @@ -1429,177 +1417,6 @@ #Область СлужебныеПроцедурыИФункции -Функция ПодготовитьПараметрыНачислениеНалогов(ТаблицаРеквизитов, ТаблицаНалоги) - - Параметры = Новый Структура; - - // Подготовка таблицы Параметры.Реквизиты - - СписокОбязательныхКолонок = "" - +"Регистратор," // <ДокументСсылка> - +"Период," // <Дата> - +"Организация"; // <СправочникСсылка.Организация> - - Параметры.Вставить("Реквизиты", ПрослеживаемостьПереопределяемый.ПолучитьТаблицуПараметровПроведения( - ТаблицаРеквизитов, СписокОбязательныхКолонок)); - - // Подготовка таблицы Параметры.ТаблицаНалоги - - СписокОбязательныхКолонок = "" - +"НомерСтроки," // <Число> - +"РегистрацияВНалоговомОргане," // <СправочникСсылка.РегистрацииВНалоговомОргане> - +"КодПоОКТМО," // <Строка, 11> - +"Налог," // <СправочникСсылка.ВидыНалоговИПлатежейВБюджет> - +"КодБК," // <Строка, 20> - +"СрокУплаты," // <Дата> - +"СчетУчета," // <ПланСчетовСсылка.Хозрасчетный> - +"ВидДвижения," // <ВидДвиженияНакопления> - +"КорректировкаЕНС," // <Булево> - +"Сумма"; // <Число 15, 2> - - Параметры.Вставить("ТаблицаНалоги", ПрослеживаемостьПереопределяемый.ПолучитьТаблицуПараметровПроведения( - ТаблицаНалоги, СписокОбязательныхКолонок)); - - Возврат Параметры; - -КонецФункции - -Функция ПодготовитьПараметрыПополнениеСписание(ТаблицаРеквизитов, ТаблицаНалоги) - - Параметры = Новый Структура; - - // Подготовка таблицы Параметры.Реквизиты - - СписокОбязательныхКолонок = "" - +"Регистратор," // <ДокументСсылка> - +"Период," // <Дата> - +"Организация"; // <СправочникСсылка.Организация> - - Параметры.Вставить("Реквизиты", ПрослеживаемостьПереопределяемый.ПолучитьТаблицуПараметровПроведения( - ТаблицаРеквизитов, СписокОбязательныхКолонок)); - - // Подготовка таблицы Параметры.ПополнениеСчета/Параметры.СписаниеСоСчета - - СписокОбязательныхКолонок = "" - +"НомерСтроки," // <Число> - +"СчетЗатрат," // <ПланСчетовСсылка.Хозрасчетный> - +"УчитыватьВНУ," // <Булево> - +"Подразделение," // <СправочникСсылка.ПодразделенияОрганизаций> - +"ВидДвижения," // <ВидДвиженияНакопления> - +"ПлатежныйДокумент," // <ДокументСсылка> - + "Налог," // <СправочникСсылка.ВидыНалогов> - +"Сумма"; // <Число 15, 2> - - Параметры.Вставить("ТаблицаНалоги", ПрослеживаемостьПереопределяемый.ПолучитьТаблицуПараметровПроведения( - ТаблицаНалоги, СписокОбязательныхКолонок)); - - Возврат Параметры; - -КонецФункции - -Функция ПодготовитьПараметрыУплатаНалогов(ТаблицаРеквизитов, ТаблицаНалоги) - - Параметры = Новый Структура; - - // Подготовка таблицы Параметры.Реквизиты - - СписокОбязательныхКолонок = "" - +"Регистратор," // <ДокументСсылка> - +"Период," // <Дата> - +"Организация"; // <СправочникСсылка.Организация> - - Параметры.Вставить("Реквизиты", ПрослеживаемостьПереопределяемый.ПолучитьТаблицуПараметровПроведения( - ТаблицаРеквизитов, СписокОбязательныхКолонок)); - - // Подготовка таблицы Параметры.УплатаНалогов - - СписокОбязательныхКолонок = "" - +"НомерСтроки," // <Число> - +"РегистрацияВНалоговомОргане," // <СправочникСсылка.РегистрацииВНалоговомОргане> - +"КодПоОКТМО," // <Строка, 11> - +"Налог," // <СправочникСсылка.ВидыНалоговИПлатежейВБюджет> - +"КодБК," // <Строка, 20> - +"СрокУплаты," // <Дата> - +"СчетУчета," // <ПланСчетовСсылка.Хозрасчетный> - +"ВидДвижения," // <ВидДвиженияНакопления> - +"ПлатежныйДокумент," // <ДокументСсылка> - +"СчетЗатрат," // <ПланСчетовСсылка.Хозрасчетный> // <ХарактеристикаСсылка.ВидыСубконтоХозрасчетные> - +"УчитыватьВНУ," // <ПеречислениеСсылка.ОтражениеВУСН> - +"Подразделение," // <СправочникСсылка.ПодразделенияОрганизаций> - +"Сумма"; // <Число 15, 2> - - Параметры.Вставить("ТаблицаНалоги", ПрослеживаемостьПереопределяемый.ПолучитьТаблицуПараметровПроведения( - ТаблицаНалоги, СписокОбязательныхКолонок)); - - Возврат Параметры; - -КонецФункции - -Функция ПодготовитьПараметрыНачислениеПенейШтрафов(ТаблицаРеквизитов, ТаблицаНалоги) - - Параметры = Новый Структура; - - // Подготовка таблицы Параметры.Реквизиты - - СписокОбязательныхКолонок = "" - +"Регистратор," // <ДокументСсылка> - +"Период," // <Дата> - +"Организация"; // <СправочникСсылка.Организация> - - Параметры.Вставить("Реквизиты", ПрослеживаемостьПереопределяемый.ПолучитьТаблицуПараметровПроведения( - ТаблицаРеквизитов, СписокОбязательныхКолонок)); - - // Подготовка таблицы Параметры.НачислениеПенейШтрафов/Параметры.ПогашениеПенейШтрафов - - СписокОбязательныхКолонок = "" - +"НомерСтроки," // <Число> - +"ВидПлатежа," // <ПеречислениеСсылка.ВидыПлатежейВГосБюджет> - +"СчетЗатрат," // <ПланСчетовСсылка.Хозрасчетный> - +"УчитыватьВНУ," // <ПеречислениеСсылка.ОтражениеВУСН> - +"Подразделение," // <СправочникСсылка.ПодразделенияОрганизаций> - +"ВидДвижения," // <ВидДвиженияНакопления> - +"Сумма"; // <Число 15, 2> - - Параметры.Вставить("ТаблицаНалоги", ПрослеживаемостьПереопределяемый.ПолучитьТаблицуПараметровПроведения( - ТаблицаНалоги, СписокОбязательныхКолонок)); - - Возврат Параметры; - -КонецФункции - -Функция ПодготовитьПараметрыПогашениеПенейШтрафов(ТаблицаРеквизитов, ТаблицаНалоги) - - Параметры = Новый Структура; - - // Подготовка таблицы Параметры.Реквизиты - - СписокОбязательныхКолонок = "" - +"Регистратор," // <ДокументСсылка> - +"Период," // <Дата> - +"Организация"; // <СправочникСсылка.Организация> - - Параметры.Вставить("Реквизиты", ПрослеживаемостьПереопределяемый.ПолучитьТаблицуПараметровПроведения( - ТаблицаРеквизитов, СписокОбязательныхКолонок)); - - // Подготовка таблицы Параметры.НачислениеПенейШтрафов/Параметры.ПогашениеПенейШтрафов - - СписокОбязательныхКолонок = "" - +"НомерСтроки," // <Число> - +"ВидПлатежа," // <ПеречислениеСсылка.ВидыПлатежейВГосБюджет> - +"СчетЗатрат," // <ПланСчетовСсылка.Хозрасчетный> - +"УчитыватьВНУ," // <ПеречислениеСсылка.ОтражениеВУСН> - +"Подразделение," // <СправочникСсылка.ПодразделенияОрганизаций> - +"ВидДвижения," // <ВидДвиженияНакопления> - +"ПлатежныйДокумент," // <ДокументСсылка> - +"Сумма"; // <Число 15, 2> - - Параметры.Вставить("ТаблицаНалоги", ПрослеживаемостьПереопределяемый.ПолучитьТаблицуПараметровПроведения( - ТаблицаНалоги, СписокОбязательныхКолонок)); - - Возврат Параметры; - -КонецФункции - Процедура ПодготовитьТаблицуСписания(ТаблицаНалоги, ТаблицаУплаты, ИспользоватьПериодИсходныхОперации = Ложь) КолонкиСвертки = "ПлатежныйДокумент, Организация, ВидДвижения"; @@ -1686,12 +1503,12 @@ Построитель = Новый ПостроительЗапроса; Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТаблицаУплаты); - - тОтбор = Построитель.Отбор.Добавить("Налог"); - тОтбор.ВидСравнения = ВидСравнения.НеВСписке; - тОтбор.Значение = ВидыВзаиморасчетовУСН; - тОтбор.Использование = Истина; - + + ТОтбор = Построитель.Отбор.Добавить("Налог"); + ТОтбор.ВидСравнения = ВидСравнения.НеВСписке; + ТОтбор.Значение = ВидыВзаиморасчетовУСН; + ТОтбор.Использование = Истина; + Построитель.Выполнить(); ТаблицаУплаты = Построитель.Результат.Выгрузить(); @@ -1748,7 +1565,7 @@ КонецПроцедуры -Процедура СформироватьДвиженияРасчетыПоНалогам(ТаблицаРеквизиты, Движения, СодержаниеПроводки = ""); +Процедура СформироватьДвиженияРасчетыПоНалогам(ТаблицаРеквизиты, Движения, СодержаниеПроводки = "") Если Не ЗначениеЗаполнено(ТаблицаРеквизиты.ТаблицаУплатыПоЕдиномуНалоговомуСчету) Или Не ЗначениеЗаполнено(ТаблицаРеквизиты) Тогда @@ -1776,7 +1593,7 @@ КонецПроцедуры -Процедура СформироватьДвиженияРасчетыПоНалогамПополнениеИСписание(ТаблицаРеквизиты, ТаблицаНалогов, Движения, ВидДвижения, СодержаниеПроводки = ""); +Процедура СформироватьДвиженияРасчетыПоНалогамПополнениеИСписание(ТаблицаРеквизиты, ТаблицаНалогов, Движения, ВидДвижения, СодержаниеПроводки = "") Если Не ЗначениеЗаполнено(ТаблицаРеквизиты) Или Не ЗначениеЗаполнено(ТаблицаНалогов) Тогда @@ -1885,17 +1702,15 @@ Построитель = Новый ПостроительЗапроса; Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТЗПоВзносам); - - тОтбор = Построитель.Отбор.Добавить("Налог"); - тОтбор.ВидСравнения = ВидСравнения.ВСписке; - тОтбор.Значение = СтраховыеВидыВзаиморасчетов; - тОтбор.Использование = Истина; + + Отбор = Построитель.Отбор.Добавить("Налог"); + Отбор.ВидСравнения = ВидСравнения.ВСписке; + Отбор.Значение = СтраховыеВидыВзаиморасчетов; + Отбор.Использование = Истина; Построитель.Выполнить(); ТЗПоВзносам = Построитель.Результат.Выгрузить(); - ПараметрыОтбора = Новый Структура; - ТаблицаПоВзносам = Движения.РасчетыСФондамиПоСтраховымВзносамУНФ; Для Каждого СтрокаВзносов Из ТЗПоВзносам Цикл @@ -2016,7 +1831,7 @@ КонецЕсли; Для Каждого Налог Из Налоги Цикл - ПеречислениеНалогов = ЕдиныйНалоговыйСчет.ТаблицаРасшифровкиПлатежа(); + ПеречислениеНалогов = ТаблицаРасшифровкиПлатежа(); ПеречислениеНалогов.Колонки.Добавить("ПлатежноеПоручениеНомер"); ПеречислениеНалогов.Колонки.Добавить("ПлатежноеПоручениеДата"); Для Каждого СтрокаТаблицы Из ТаблицыУплатаНалогов.ТаблицаУплатыПоЕдиномуНалоговомуСчету Цикл @@ -2198,9 +2013,7 @@ |ИЗ | ТаблицаПеречислениеНДФЛ КАК Налоги"; - Результаты = Запрос.Выполнить(); - - Возврат Запрос.МенеджерВременныхТаблиц; + Возврат Запрос.Выполнить().МенеджерВременныхТаблиц; КонецФункции @@ -2213,10 +2026,10 @@ НоваяСтрока.Ставка = Ставка; НоваяСтрока.Период = ДатаОперации; Если НоваяСтрока.МесяцНалоговогоПериода >= '20150101' Тогда - НоваяСтрока.МесяцНалоговогоПериода = '00010101' + НоваяСтрока.МесяцНалоговогоПериода = '00010101'; КонецЕсли; - Возврат НоваяСтрока + Возврат НоваяСтрока; КонецФункции @@ -2257,7 +2070,7 @@ КонецФункции -Процедура РаспределитьОплатуПоДвижениямДокумента(ТаблицаСуммыЕдиногоНалоговогоПлатежа, ТаблицаРеквизиты, Движения, Отказ); +Процедура РаспределитьОплатуПоДвижениямДокумента(ТаблицаСуммыЕдиногоНалоговогоПлатежа, ТаблицаРеквизиты, Движения, Отказ) Реквизиты = ТаблицаРеквизиты[0]; @@ -2414,20 +2227,24 @@ КонецПроцедуры -// Функция возвращает дату изменения алгоритма +// Возвращает дату изменения алгоритма зачета уплат. +// // Возвращаемое значение: -// Дата смены алгоритма - Дата +// Дата - дата смены алгоритма Функция ДатаСменыАлгоритмаЗачетаУплат() Экспорт Возврат Дата(2022,09,09); КонецФункции -// Функция возвращает версию используемого алгоритма +// Возвращает номер версии алгоритма зачета уплат в зависимости от даты проведения зачета. +// // Параметры: -// Дата - Дата проведения зачета. +// Дата - Дата - дата проведения зачета. +// // Возвращаемое значение: -// Версия алгоритма - число +// Число - версия алгоритма зачета +// Функция ВерсияАлгоритмаЗачетаУплат(Дата) Экспорт Если Дата <= ДатаСменыАлгоритмаЗачетаУплат() Тогда @@ -2440,23 +2257,25 @@ КонецФункции -// Функция возвращает таблицу остатков расчетов по единому налоговому счету по правилам НК. +// Возвращает остатки расчетов по единому налоговому счету в разрезе платежных документов. // // Параметры: -// Организация - СправочникСсылка.Организации - Организация для получения остатков -// Дата - Дата получения остатков. -// ДокументСсылка - ДокументСсылк, если заполнен - остаток будет получен на момент времени документа -// Возвращаемое значение: -// Таблица значений -// ПлатежныйДокумент - документ, которым зарегистрирована уплата -// Сумма - Сумма остатка по ЕНС в разрезе платежных документов +// Организация - СправочникСсылка.Организации - организация, по которой получаются остатки +// Дата - Дата - дата получения остатков +// ДокументСсылка - ДокументСсылка - документ, на момент времени которого получаются остатки. +// Если не указан, остатки формируются на конец дня переданной даты. // +// Возвращаемое значение: +// ТаблицаЗначений: +// * Сумма - Число - положительный остаток по ЕНС в разрезе платежного документа +// * ПлатежныйДокумент - ДокументСсылка - документ, которым зарегистрирована уплата +// * ДатаРегистратора - Дата - дата платежного документа +// * Организация - СправочникСсылка.Организации - организация, по которой получен остаток +// * НомерСтроки - Число - порядковый номер записи Функция ТаблицаОстатковНаЕдиномНалоговомСчете(Организация, Дата, ДокументСсылка = Неопределено) Экспорт УстановитьПривилегированныйРежим(Истина); - - СуммаОстаток = 0; - + Если ЗначениеЗаполнено(ДокументСсылка) Тогда ПериодОстатков = Новый Граница(ДокументСсылка.МоментВремени(), ВидГраницы.Исключая); Иначе @@ -2510,6 +2329,30 @@ КонецФункции +// Функция возвращает остаток расчетов по единому налоговому счету по правилам НК. +// Учитывается порядок зачета платежей по факту наступлени срока уплаты. +// +// Параметры: +// Организация - СправочникСсылка.Организации - Организация для получения остатков +// Дата - Дата получения остатков. +// ДокументСсылка - ДокументСсылк, если заполнен - остаток будет получен на момент времени документа +// Возвращаемое значение: +// Сумма остатка по ЕНС +// +Функция ОстатокНаЕдиномНалоговомСчете(Организация, Дата, ДокументСсылка = Неопределено) Экспорт + + СуммаОстаток = 0; + + Результат = ТаблицаОстатковНаЕдиномНалоговомСчете(Организация, Дата, ДокументСсылка); + + Если Результат.Количество() <> 0 Тогда + СуммаОстаток = Результат.Итог("Сумма"); + КонецЕсли; + + Возврат СуммаОстаток; + +КонецФункции + Функция ПодготовитьПараметрыЗачетаАвансаПоЕдиномуНалоговомуСчетуПоДвижениямДокумента(ТаблицаРеквизиты) Параметры = Новый Структура; @@ -2615,16 +2458,21 @@ КонецФункции -// Возвращает данные о сформированных уведомлениях -// +// Возвращает данные о сформированных уведомлениях по записям календаря бухгалтера. +// // Параметры: -// Правило - СправочникСсылка.ПравилаПредставленияОтчетовУплатыНалогов, Массив -// Организация - СправочникСсылка.Организации -// ПериодСобытия - Дата +// ЗаписьКалендаря - СправочникСсылка - запись календаря, по которой требуется получить уведомления. +// Также допускается передача массива таких ссылок. +// Организация - СправочникСсылка.Организации - организация, по которой отбираются уведомления. +// ПериодСобытия - Дата - период события, на который зарегистрированы уведомления. // // Возвращаемое значение: -// Уведомления - Структура - см. НовыйТаблицаПлатежи() -// +// ТаблицаЗначений: +// * Уведомление - ДокументСсылка.УведомлениеОбИсчисленныхСуммахНалогов, +// - ДокументСсылка.ОперацияПоЕдиномуНалоговомуСчету, +// - ДокументСсылка.ЗаявлениеОЗачетеВСчетПредстоящейОбязанности - ссылка на сформированное уведомление. +// * Дата - Дата - дата уведомления. +// * Сумма - Число - сумма уведомления. Функция ДанныеДляУведомлений(ЗаписьКалендаря, Организация, ПериодСобытия) Экспорт Запрос = Новый Запрос; @@ -2868,7 +2716,7 @@ // Подсказка по заявлению Если ПодаетсяЗаявлениеОЗачете И ТребуетсяУведомление Тогда - ТаблицаОстатковНаЕдиномНалоговомСчете = ЕдиныйНалоговыйСчет.ТаблицаОстатковНаЕдиномНалоговомСчете( + ТаблицаОстатковНаЕдиномНалоговомСчете = ТаблицаОстатковНаЕдиномНалоговомСчете( Форма.ОрганизацияПредставление, Форма.ПериодСобытия); ДоступныйОстаток = ТаблицаОстатковНаЕдиномНалоговомСчете.Итог("Сумма"); @@ -4627,4 +4475,31 @@ #КонецОбласти +#Область ПростойУчетЕНС + +Функция НачалоПростогоУчета() Экспорт + + Возврат '2099-01-01'; + +КонецФункции + +Функция НачалоУчетаПоДаннымФНС(Организация) Экспорт + + Возврат '0001-01-01'; + +КонецФункции + +Функция ЭтоПростойУчет(Дата, Организация) Экспорт + + Если Дата < НачалоПростогоУчета() Тогда + Возврат Ложь; + Иначе + НачалоУчетаПоДаннымФНС = НачалоУчетаПоДаннымФНС(Организация); + Возврат Не ЗначениеЗаполнено(НачалоУчетаПоДаннымФНС) Или Дата < НачалоУчетаПоДаннымФНС; + КонецЕсли; + +КонецФункции + +#КонецОбласти + #КонецОбласти diff --git a/Конфигурация/CommonModules/ЕдиныйНалоговыйСчетИнтеграцияВызовСервераУНФ.xml b/Конфигурация/CommonModules/ЕдиныйНалоговыйСчетИнтеграцияВызовСервераУНФ.xml new file mode 100644 index 000000000..baf01cefe --- /dev/null +++ b/Конфигурация/CommonModules/ЕдиныйНалоговыйСчетИнтеграцияВызовСервераУНФ.xml @@ -0,0 +1,23 @@ + + + + + ЕдиныйНалоговыйСчетИнтеграцияВызовСервераУНФ + + + ru + Единый налоговый счет интеграция вызов сервера УНФ + + + + false + false + true + false + false + true + false + DontUse + + + \ No newline at end of file diff --git a/Конфигурация/CommonModules/ЕдиныйНалоговыйСчетИнтеграцияВызовСервераУНФ/Ext/Module.bsl b/Конфигурация/CommonModules/ЕдиныйНалоговыйСчетИнтеграцияВызовСервераУНФ/Ext/Module.bsl new file mode 100644 index 000000000..c4a070e26 --- /dev/null +++ b/Конфигурация/CommonModules/ЕдиныйНалоговыйСчетИнтеграцияВызовСервераУНФ/Ext/Module.bsl @@ -0,0 +1,57 @@ +//////////////////////////////////////////////////////////////////////////////// +// ЕдиныйНалоговыйСчетИнтеграцияВызовСервераУНФ: +// +//////////////////////////////////////////////////////////////////////////////// + +#Область СлужебныйПрограммныйИнтерфейс + +Функция ПараметрыФормыПлатежногоДокумента(Организация, ПериодРегистрации, СуммаДокумента) Экспорт + + ВидНалога = Перечисления.ВидыНалогов.ЕдиныйНалоговыйПлатеж; + Налог = Справочники.ВидыНалогов.НалогПоВиду(ВидНалога, Истина); + ЭтоЕНП = Налог = Справочники.ВидыНалогов.ЕдиныйНалоговыйПлатеж; + + Если ЭтоЕНП И ПлатежиВБюджетКлиентСервер.ДействуетПриказ58н(ПериодРегистрации) Тогда + КПППлательщика = ПлатежиВБюджетКлиентСервер.НезаполненноеЗначение(); + Иначе + КПППлательщика = Справочники.Организации.КППНаДату(Организация, ПериодРегистрации); + КонецЕсли; + + ОписаниеПлатежа = Новый Структура; + ОписаниеПлатежа.Вставить("Дата", ПериодРегистрации); + ОписаниеПлатежа.Вставить("ПериодРегистрации", ПериодРегистрации); + ОписаниеПлатежа.Вставить("ВидОперации", Перечисления.ВидыОперацийПлатежноеПоручение.ПеречислениеНалога); + ОписаниеПлатежа.Вставить("Налог", Налог); + ОписаниеПлатежа.Вставить("ВидПеречисленияВБюджет", Перечисления.ВидыПеречисленийВБюджет.НалоговыйПлатеж); + ОписаниеПлатежа.Вставить("Организация", Организация); + ОписаниеПлатежа.Вставить("ИННПлательщика", Общегоназначения.ЗначениеРеквизитаОбъекта(Организация,"ИНН")); + ОписаниеПлатежа.Вставить("КПППлательщика", КПППлательщика); + ОписаниеПлатежа.Вставить("СуммаДокумента", СуммаДокумента); + ОписаниеПлатежа.Вставить("БанковскийСчет", ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Организация, "БанковскийСчетПоУмолчанию")); + ОписаниеПлатежа.Вставить("ВалютаДокумента", Константы.НациональнаяВалюта.Получить()); + ОписаниеПлатежа.Вставить("НазначениеПлатежа", Справочники.ВидыНалогов.НазначениеПлатежа(Налог)); + ОписаниеПлатежа.Вставить("СтатусСоставителя", "01"); + ОписаниеПлатежа.Вставить("КодОКАТО", ЕдиныйНалоговыйСчет.ОКТМОЕдиногоНалоговогоСчета()); + ОписаниеПлатежа.Вставить("ПоказательНомера", ПлатежиВБюджетКлиентСервер.НезаполненноеЗначение()); + ОписаниеПлатежа.Вставить("ПоказательПериода", ПлатежиВБюджетКлиентСервер.НезаполненноеЗначение()); + ОписаниеПлатежа.Вставить("ИдентификаторПлатежа", ПлатежиВБюджетКлиентСервер.НезаполненноеЗначение()); + ОписаниеПлатежа.Вставить("КодБК", ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Налог, "КодБК")); + ОписаниеПлатежа.Вставить("ОчередностьПлатежа", 5); + ОписаниеПлатежа.Вставить("ПоказательТипа", ПлатежиВБюджетКлиентСервер.НезаполненноеЗначение()); + ОписаниеПлатежа.Вставить("ПоказательОснования", ПлатежиВБюджетКлиентСервер.НезаполненноеЗначение()); + ОписаниеПлатежа.Вставить("Контрагент", Справочники.Контрагенты.ПустаяСсылка()); + ОписаниеПлатежа.Вставить("ИННПолучателя", ""); + ОписаниеПлатежа.Вставить("КПППолучателя", ""); + ОписаниеПлатежа.Вставить("СчетКонтрагента", Справочники.БанковскиеСчета.ПустаяСсылка()); + ОписаниеПлатежа.Вставить("ТекстПолучателя", ""); + + Документы.ПлатежноеПоручение.ЗаполнитьРеквизитыЕНП(ОписаниеПлатежа); + + ПараметрыФормыПлатежногоДокумента = Новый Структура(); + ПараметрыФормыПлатежногоДокумента.Вставить("ЗначенияЗаполнения", ОписаниеПлатежа); + + Возврат ПараметрыФормыПлатежногоДокумента; + +КонецФункции + +#КонецОбласти \ No newline at end of file diff --git a/Конфигурация/CommonModules/ЕдиныйНалоговыйСчетИнтеграцияКлиентУНФ.xml b/Конфигурация/CommonModules/ЕдиныйНалоговыйСчетИнтеграцияКлиентУНФ.xml new file mode 100644 index 000000000..0a99c7edd --- /dev/null +++ b/Конфигурация/CommonModules/ЕдиныйНалоговыйСчетИнтеграцияКлиентУНФ.xml @@ -0,0 +1,23 @@ + + + + + ЕдиныйНалоговыйСчетИнтеграцияКлиентУНФ + + + ru + Единый налоговый счет интеграция клиент УНФ + + + + false + true + false + false + true + false + false + DontUse + + + \ No newline at end of file diff --git a/Конфигурация/CommonModules/ЕдиныйНалоговыйСчетИнтеграцияКлиентУНФ/Ext/Module.bsl b/Конфигурация/CommonModules/ЕдиныйНалоговыйСчетИнтеграцияКлиентУНФ/Ext/Module.bsl new file mode 100644 index 000000000..7aa8cb2a4 --- /dev/null +++ b/Конфигурация/CommonModules/ЕдиныйНалоговыйСчетИнтеграцияКлиентУНФ/Ext/Module.bsl @@ -0,0 +1,139 @@ +//////////////////////////////////////////////////////////////////////////////// +// ЕдиныйНалоговыйСчетИнтеграцияКлиентУНФ: +// +//////////////////////////////////////////////////////////////////////////////// + +#Область СлужебныйПрограммныйИнтерфейс + +Процедура СоздатьПлатежныйДокумент(Форма) Экспорт + + Задолженность = Форма.БлижайшийРекомендуемыйПлатеж + Форма.Задолженность; + + ТекущийДокумент = + ЕдиныйНалоговыйСчетИнтеграцияВызовСервераУНФ.ПараметрыФормыПлатежногоДокумента( + Форма.Объект.Организация, + Форма.Объект.Период, + Задолженность); + + ОткрытьФорму( + "Документ.ПлатежноеПоручение.Форма.ФормаДокумента", + ТекущийДокумент, + Форма, + , + , + , + , + РежимБлокировкиПриОткрытииОкнаФормы.БлокироватьВладельца); + +КонецПроцедуры + +// Добавляет отбор в коллекцию отборов компоновщика или группы отборов +// +// Параметры: +// ЭлементСтруктуры - КомпоновщикНастроекКомпоновкиДанных +// - НастройкиКомпоновкиДанных - элемент структуры КД +// ПараметрыОтбора - Структура - содержит параметры отбора компоновки данных: +// * Поле - Строка - имя поля, по которому добавляется отбор. +// * Значение - Произвольный - значение отбора КД (по умолчанию: Неопределено). +// * ВидСравнения - ВидСравненияКомпоновкиДанных - вид сравнений КД (по умолчанию: Неопределено). +// * Использование - Булево - признак использования отбора (по умолчанию: Истина). +// ДополнительныеПараметры - Структура - содержит дополнительные параметры, перечисленные ниже: +// * ВПользовательскиеНастройки - Булево - признак добавления в пользовательские настройки КД (по умолчанию: Ложь). +// * ЗаменятьСуществующий - Булево - признак полной замены существующего отбора по полю (по умолчанию: Истина). +// +// Возвращаемое значение: +// ЭлементОтбораКомпоновкиДанных - добавленный отбор. +// +Функция ДобавитьОтбор(ЭлементСтруктуры, ПараметрыОтбора, ДополнительныеПараметры = Неопределено) Экспорт + + Если ДополнительныеПараметры = Неопределено Тогда + ДополнительныеПараметры = Новый Структура; + ДополнительныеПараметры.Вставить("ВПользовательскиеНастройки", Ложь); + ДополнительныеПараметры.Вставить("ЗаменятьСуществующий", Истина); + Иначе + Если Не ДополнительныеПараметры.Свойство("ВПользовательскиеНастройки") Тогда + ДополнительныеПараметры.Вставить("ВПользовательскиеНастройки", Ложь); + КонецЕсли; + Если Не ДополнительныеПараметры.Свойство("ЗаменятьСуществующий") Тогда + ДополнительныеПараметры.Вставить("ЗаменятьСуществующий", Истина); + КонецЕсли; + КонецЕсли; + + Если ТипЗнч(ПараметрыОтбора.Поле) = Тип("Строка") Тогда + НовоеПоле = Новый ПолеКомпоновкиДанных(ПараметрыОтбора.Поле); + Иначе + НовоеПоле = ПараметрыОтбора.Поле; + КонецЕсли; + + ИдСуществующейПользовательскойНастройки = Неопределено; + + Если ТипЗнч(ЭлементСтруктуры) = Тип("КомпоновщикНастроекКомпоновкиДанных") Тогда + Отбор = ЭлементСтруктуры.Настройки.Отбор; + + Если ДополнительныеПараметры.ВПользовательскиеНастройки Тогда + + Для Каждого Элемент Из Отбор.Элементы Цикл + Если Элемент.ЛевоеЗначение = НовоеПоле Тогда + ИдСуществующейПользовательскойНастройки = Элемент.ИдентификаторПользовательскойНастройки; + СуществующийОтбор = Элемент; + Прервать; + КонецЕсли; + КонецЦикла; + + Для Каждого ЭлементНастройки Из ЭлементСтруктуры.ПользовательскиеНастройки.Элементы Цикл + Если ЭлементНастройки.ИдентификаторПользовательскойНастройки = + ЭлементСтруктуры.Настройки.Отбор.ИдентификаторПользовательскойНастройки Тогда + Отбор = ЭлементНастройки; + КонецЕсли; + КонецЦикла; + КонецЕсли; + + ИначеЕсли ТипЗнч(ЭлементСтруктуры) = Тип("НастройкиКомпоновкиДанных") Тогда + Отбор = ЭлементСтруктуры.Отбор; + Иначе + Отбор = ЭлементСтруктуры; + КонецЕсли; + + ЭлементОтбора = Неопределено; + Если ДополнительныеПараметры.ЗаменятьСуществующий Тогда + Для каждого Элемент Из Отбор.Элементы Цикл + + Если ТипЗнч(Элемент) = Тип("ГруппаЭлементовОтбораКомпоновкиДанных") Тогда + Продолжить; + КонецЕсли; + + Если Элемент.ЛевоеЗначение = НовоеПоле Тогда + ЭлементОтбора = Элемент; + КонецЕсли; + + КонецЦикла; + + Если ИдСуществующейПользовательскойНастройки <> Неопределено Тогда + ЭлементОтбора = СуществующийОтбор; + Для Каждого Элемент Из ЭлементСтруктуры.ПользовательскиеНастройки.Элементы Цикл + Если Элемент.ИдентификаторПользовательскойНастройки = ИдСуществующейПользовательскойНастройки Тогда + Элемент.Использование = ПараметрыОтбора.Использование; + Элемент.ВидСравнения = ?(ПараметрыОтбора.ВидСравнения = Неопределено, ВидСравненияКомпоновкиДанных.Равно, + ПараметрыОтбора.ВидСравнения); + Элемент.ПравоеЗначение = ПараметрыОтбора.Значение; + Прервать; + КонецЕсли; + КонецЦикла; + КонецЕсли; + + КонецЕсли; + + Если ЭлементОтбора = Неопределено Тогда + ЭлементОтбора = Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + КонецЕсли; + ЭлементОтбора.Использование = ПараметрыОтбора.Использование; + ЭлементОтбора.ЛевоеЗначение = НовоеПоле; + ЭлементОтбора.ВидСравнения = ?(ПараметрыОтбора.ВидСравнения = Неопределено, ВидСравненияКомпоновкиДанных.Равно, + ПараметрыОтбора.ВидСравнения); + ЭлементОтбора.ПравоеЗначение = ПараметрыОтбора.Значение; + + Возврат ЭлементОтбора; + +КонецФункции + +#КонецОбласти \ No newline at end of file diff --git a/Конфигурация/CommonModules/ЕдиныйНалоговыйСчетИнтеграцияПереопределяемый/Ext/Module.bsl b/Конфигурация/CommonModules/ЕдиныйНалоговыйСчетИнтеграцияПереопределяемый/Ext/Module.bsl index 43516420e..843685a4d 100644 --- a/Конфигурация/CommonModules/ЕдиныйНалоговыйСчетИнтеграцияПереопределяемый/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ЕдиныйНалоговыйСчетИнтеграцияПереопределяемый/Ext/Module.bsl @@ -16,5 +16,4 @@ Функция ИмяНастройкиБольшеНеПоказыватьБаннерПредупреждение(Параметры) Экспорт КонецФункции - #КонецОбласти diff --git a/Конфигурация/CommonModules/ЕдиныйНалоговыйСчетИнтеграцияУНФ.xml b/Конфигурация/CommonModules/ЕдиныйНалоговыйСчетИнтеграцияУНФ.xml new file mode 100644 index 000000000..cda4b99bc --- /dev/null +++ b/Конфигурация/CommonModules/ЕдиныйНалоговыйСчетИнтеграцияУНФ.xml @@ -0,0 +1,23 @@ + + + + + ЕдиныйНалоговыйСчетИнтеграцияУНФ + + + ru + Единый налоговый счет интеграция УНФ + + + + false + false + true + true + true + false + false + DontUse + + + \ No newline at end of file diff --git a/Конфигурация/CommonModules/ЕдиныйНалоговыйСчетИнтеграцияУНФ/Ext/Module.bsl b/Конфигурация/CommonModules/ЕдиныйНалоговыйСчетИнтеграцияУНФ/Ext/Module.bsl new file mode 100644 index 000000000..63be829cd --- /dev/null +++ b/Конфигурация/CommonModules/ЕдиныйНалоговыйСчетИнтеграцияУНФ/Ext/Module.bsl @@ -0,0 +1,183 @@ +//////////////////////////////////////////////////////////////////////////////// +// ЕдиныйНалоговыйСчетИнтеграцияУНФ +// +//////////////////////////////////////////////////////////////////////////////// + +#Область ПрограммныйИнтерфейс + +Процедура ГоловнаяОрганизация(ТекущаяОрганизация) Экспорт + + ТекущаяОрганизация = РегламентированнаяОтчетность.ГоловнаяОрганизация(ТекущаяОрганизация); + +КонецПроцедуры + +Процедура ПоддерживаетсяВводПлатежныхДокументов(ЕстьПлатежныеДокументы, Организация) Экспорт + + ЕстьПлатежныеДокументы = + ДоступенВводПлатежныхДокументов(); + +КонецПроцедуры + +Процедура ПоддерживаетсяРежимСверки(Признак) Экспорт + + Если Не Признак Тогда + ПоддерживаетсяРежимСверкиПлатежи(Признак); + КонецЕсли; + Если Не Признак Тогда + ПоддерживаетсяРежимСверкиОтчеты(Признак); + КонецЕсли; + Если Не Признак Тогда + ПоддерживаетсяРежимСверкиНачисления(Признак); + КонецЕсли; + Если Не Признак Тогда + ПоддерживаетсяРежимСверкиПениШтрафы(Признак); + КонецЕсли; + +КонецПроцедуры + +Процедура ПоддерживаетсяРежимСверкиГлавное(Признак) Экспорт + + Признак = Истина; + +КонецПроцедуры + +Процедура ПоддерживаетсяРежимСверкиСальдоЕНС(Признак) Экспорт + + Признак = Истина; + +КонецПроцедуры + +Процедура ПоддерживаетсяРежимСверкиПлатежи(Признак) Экспорт + + Признак = Истина; + +КонецПроцедуры + +Процедура ПоддерживаетсяРежимСверкиОтчеты(Признак) Экспорт + + Признак = Истина; + +КонецПроцедуры + +Процедура ПоддерживаетсяРежимСверкиНачисления(Признак) Экспорт + + Признак = Истина; + +КонецПроцедуры + +Процедура ПоддерживаетсяРежимСверкиУплаты(Признак) Экспорт + + Признак = Ложь; + +КонецПроцедуры + +Процедура ПоддерживаетсяРежимСверкиПениШтрафы(Признак) Экспорт + + Признак = Истина; + +КонецПроцедуры + +Процедура ПоддерживаетсяАвтоматическаяРегистрацияУплат(Признак) Экспорт + + Признак = Ложь; + +КонецПроцедуры + +Процедура ПериодОбработкиДанныхДляРегистрацииУплат(Организация, НачалоПериода, КонецПериода) Экспорт + + НачалоПериода = ЕдиныйНалоговыйСчет.НачалоПростогоУчета(); + +КонецПроцедуры + +Процедура ПоддерживаетсяАвтоматическаяРегистрацияОперацийЕНС(Признак) Экспорт + + Признак = Ложь; + +КонецПроцедуры + +Процедура ПериодОбработкиДанныхДляРегистрацииОперацийЕНС(Организация, НачалоПериода, КонецПериода) Экспорт + + НачалоУчетаПоДаннымФНС = ЕдиныйНалоговыйСчет.НачалоУчетаПоДаннымФНС(Организация); + Если Не ЗначениеЗаполнено(НачалоУчетаПоДаннымФНС) Тогда + Возврат; + КонецЕсли; + НачалоПериода = НачалоУчетаПоДаннымФНС; + КонецПериода = '2099-01-01'; + +КонецПроцедуры + +Процедура ДоступныеОрганизации(ТаблицаОрганизаций) Экспорт + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ РАЗРЕШЕННЫЕ + | Организации.Ссылка КАК Значение, + | Организации.Представление КАК Представление + |ИЗ + | Справочник.Организации КАК Организации + |ГДЕ + | Организации.Ссылка = Организации.ГоловнаяОрганизация"; + + ТаблицаОрганизаций = Запрос.Выполнить().Выгрузить(); + +КонецПроцедуры + +Процедура ДоступноОтражениеВУчетеНачисленийПениШтрафов(Признак) Экспорт + + Признак = Ложь; + +КонецПроцедуры + +Процедура ДоступноОтражениеВУчетеУплаты(Признак) Экспорт + + Признак = Ложь; + +КонецПроцедуры + +// Заполняет перечень доступных возвращаемых данных. +// +// Параметры: +// ДоступныеВозвращаемыеДанные - Соответствие - данные, доступные для получения через API +// * Ключ - Строка - Идентификатор данных +// * Значение - Структура - см. АсинхронноеПолучениеДанных.НовыйОписаниеВозвращаемыхДанных(). +// +Процедура УстановитьДоступныеВозвращаемыеДанные(ДоступныеВозвращаемыеДанные) Экспорт + + ОписаниеВозвращаемыхДанных = АсинхронноеПолучениеДанных.НовыйОписаниеВозвращаемыхДанных(); + ОписаниеВозвращаемыхДанных.Наименование = НСтр("ru='Личный кабинет ЕНС'"); + ОписаниеВозвращаемыхДанных.Описание = НСтр("ru='Личный кабинет ЕНС.'"); + ОписаниеВозвращаемыхДанных.МодульМенеджер = ЕдиныйНалоговыйСчетИнтеграцияУНФ; + ОписаниеВозвращаемыхДанных.ТипыРезультата.Добавить(АсинхронноеПолучениеДанныхСловарь.ТипJSON()); + + ДоступныеВозвращаемыеДанные.Вставить(ПубликуемыйИдентификатор(), ОписаниеВозвращаемыхДанных); + +КонецПроцедуры + +// Возвращает идентификатор помощника для вызова через внешний программный интерфейс. +// +// Возвращаемое значение: +// Строка - идентификатор помощника. +// +Функция ПубликуемыйИдентификатор() Экспорт + + Возврат "ens_dashboard"; + +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Функция ДоступенВводПлатежныхДокументов() Экспорт + + Возврат ПравоДоступа("Редактирование", Метаданные.Документы.ПлатежноеПоручение); + +КонецФункции + +Функция НавигационнаяСсылкаДляОткрытияЛичногоКабинетаЕНС() Экспорт + + Возврат "e1cib/app/Обработка.ЕдиныйНалоговыйСчетЛичныйКабинет"; + +КонецФункции + +#КонецОбласти diff --git a/Конфигурация/CommonModules/ЕдиныйНалоговыйСчетИнтеграцияФормыКлиентПереопределяемый/Ext/Module.bsl b/Конфигурация/CommonModules/ЕдиныйНалоговыйСчетИнтеграцияФормыКлиентПереопределяемый/Ext/Module.bsl index 68fd99513..c3be3e32b 100644 --- a/Конфигурация/CommonModules/ЕдиныйНалоговыйСчетИнтеграцияФормыКлиентПереопределяемый/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ЕдиныйНалоговыйСчетИнтеграцияФормыКлиентПереопределяемый/Ext/Module.bsl @@ -6,7 +6,7 @@ #Область ПрограммныйИнтерфейс Процедура СоздатьПлатежныйДокумент(Форма) Экспорт - + ЕдиныйНалоговыйСчетИнтеграцияКлиентУНФ.СоздатьПлатежныйДокумент(Форма); КонецПроцедуры Процедура ОтразитьВУчетеНачисления(Данные, Результат) Экспорт diff --git a/Конфигурация/CommonModules/ЕдиныйНалоговыйСчетИнтеграцияФормыПереопределяемый/Ext/Module.bsl b/Конфигурация/CommonModules/ЕдиныйНалоговыйСчетИнтеграцияФормыПереопределяемый/Ext/Module.bsl index c2be0ec6a..fcff3970f 100644 --- a/Конфигурация/CommonModules/ЕдиныйНалоговыйСчетИнтеграцияФормыПереопределяемый/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ЕдиныйНалоговыйСчетИнтеграцияФормыПереопределяемый/Ext/Module.bsl @@ -7,6 +7,8 @@ Процедура ПоддерживаетсяВводПлатежныхДокументов(ЕстьПлатежныеДокументы, Организация) Экспорт + ЕдиныйНалоговыйСчетИнтеграцияУНФ.ПоддерживаетсяВводПлатежныхДокументов(ЕстьПлатежныеДокументы, Организация); + КонецПроцедуры #КонецОбласти diff --git a/Конфигурация/CommonModules/ЕдиныйНалоговыйСчетЛичныйКабинетКлиентПереопределяемый/Ext/Module.bsl b/Конфигурация/CommonModules/ЕдиныйНалоговыйСчетЛичныйКабинетКлиентПереопределяемый/Ext/Module.bsl index c9f6b0066..748613ba6 100644 --- a/Конфигурация/CommonModules/ЕдиныйНалоговыйСчетЛичныйКабинетКлиентПереопределяемый/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ЕдиныйНалоговыйСчетЛичныйКабинетКлиентПереопределяемый/Ext/Module.bsl @@ -14,15 +14,12 @@ КонецПроцедуры Процедура ТаблицаНачисленияВыбор(Форма, Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) Экспорт - КонецПроцедуры Процедура ТаблицаТаблицаУплатыВыбор(Форма, Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) Экспорт - КонецПроцедуры Процедура ТаблицаПениШтрафыВыбор(Форма, Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) Экспорт - КонецПроцедуры Процедура ТаблицаОперацииЕНПДеревоСверкиВыбор(Форма, Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) Экспорт @@ -30,7 +27,23 @@ КонецПроцедуры Процедура СверкаСальдоЕНСПоДаннымУчета(Форма, Элемент, СтандартнаяОбработка) Экспорт + СтандартнаяОбработка = Ложь; + ФормаРегистра = ПолучитьФорму("РегистрНакопления.РасчетыПоЕдиномуНалоговомуСчету.ФормаСписка"); + + ПараметрыОтбора = Новый Структура; + ПараметрыОтбора.Вставить("Поле", "Организация"); + ПараметрыОтбора.Вставить("Значение", Форма.Объект.Организация); + ПараметрыОтбора.Вставить("ВидСравнения", ВидСравненияКомпоновкиДанных.Равно); + ПараметрыОтбора.Вставить("Использование", Истина); + + ДополнительныеПараметры = Новый Структура; + ДополнительныеПараметры.Вставить("ВПользовательскиеНастройки", Истина); + ДополнительныеПараметры.Вставить("ЗаменятьСуществующий", Истина); + + ЕдиныйНалоговыйСчетИнтеграцияКлиентУНФ.ДобавитьОтбор(ФормаРегистра.Список.КомпоновщикНастроек, ПараметрыОтбора, ДополнительныеПараметры); + + ФормаРегистра.Открыть(); КонецПроцедуры Процедура СверкаСальдоЕНППоДаннымУчета(Форма, Элемент, СтандартнаяОбработка) Экспорт diff --git a/Конфигурация/CommonModules/ЕдиныйНалоговыйСчетЛичныйКабинетПереопределяемый/Ext/Module.bsl b/Конфигурация/CommonModules/ЕдиныйНалоговыйСчетЛичныйКабинетПереопределяемый/Ext/Module.bsl index d9a9f7e23..4dc4d3c36 100644 --- a/Конфигурация/CommonModules/ЕдиныйНалоговыйСчетЛичныйКабинетПереопределяемый/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ЕдиныйНалоговыйСчетЛичныйКабинетПереопределяемый/Ext/Module.bsl @@ -1,104 +1,360 @@ //////////////////////////////////////////////////////////////////////////////// // ЕдиныйНалоговыйСчетЛичныйКабинетПереопределяемый +// Модуль содержит переопределяемые методы для управления интерфейсом в личном кабинете единого налогового счета. // +// Порядок использования: +// +// - В прикладном решении может быть реализована пользовательская настройка интерфейса и функционала. +// Можно управлять видимостью элементов в формы. +// А так же установить признаки использования режимов сверки различных розделов, например, сверка начислений налогов или пени и штрафов. +// +//@skip-check module-empty-method //////////////////////////////////////////////////////////////////////////////// #Область СлужебныйПрограммныйИнтерфейс +// Дает возможность установить параметр формы ТекущаяОрганизация, если значение не заполнено. +// +// Параметры: +// ТекущаяОрганизация - СправочникСсылка.Организации +// +// Пример: +// ТекущаяОрганизация = Справочники.Организации.ОсновнаяОрганизация(); Процедура ОсновнаяОрганизация(ТекущаяОрганизация) Экспорт КонецПроцедуры +// Дает возможность установить параметр формы ТекущаяОрганизация, если значение не заполнено. +// +// Параметры: +// ТекущаяОрганизация - СправочникСсылка.Организации +// +// Пример: +// ТекущаяОрганизация = Справочники.Организации.ОсновнаяОрганизация(); Процедура ГоловнаяОрганизация(ТекущаяОрганизация) Экспорт -КонецПроцедуры - -Процедура ДоступныеОрганизации(ТаблицаОрганизация) Экспорт + ЕдиныйНалоговыйСчетИнтеграцияУНФ.ГоловнаяОрганизация(ТекущаяОрганизация); КонецПроцедуры +// Дает возможность дополнить или вновь заполнить список выбора доступных организаций. +// +// Параметры: +// ТаблицаОрганизация - ТаблицаЗначений - список выбора доступных организаций, где: +// * Значение - СправочникСсылка.Организации.Ссылка +// * Представление - СправочникСсылка.Организации.Представление +// +// Пример: +// ТаблицаОрганизация.Очистить(); +Процедура ДоступныеОрганизации(ТаблицаОрганизация) Экспорт + + ЕдиныйНалоговыйСчетИнтеграцияУНФ.ДоступныеОрганизации(ТаблицаОрганизация); + +КонецПроцедуры + +// Дает возможность установить параметр формы ТекущаяРегистрация, если значение не заполнено. +// +// Параметры: +// Организация - СправочникСсылка.Организации +// ТекущаяРегистрация - СправочникСсылка.РегистрацииВНалоговомОргане Процедура ОсновнаяРегистрацияВНалоговомОргане(Организация, ТекущаяРегистрация) Экспорт КонецПроцедуры +// Дает возможность дополнить функционал и заполнить параметры формы ЛК ЕНС, вызывается при ПриСозданииНаСервере(). +// +// Параметры: +// Форма - ФормаКлиентскогоПриложения Процедура ПриСозданииНаСервере(Форма) Экспорт КонецПроцедуры +// Дает возможность дополнить функционал и заполнить параметры формы ЛК ЕНС, вызывается при ПодготовитьФормуНаСервере(). +// +// Параметры: +// Форма - ФормаКлиентскогоПриложения Процедура ПодготовитьФормуНаСервере(Форма) Экспорт КонецПроцедуры +// Дает возможность управлять интерфейсом формы ЛК ЕНС, вызывается при УправлениеФормой(). +// +// Параметры: +// Форма - ФормаКлиентскогоПриложения +// +// Пример: +// Элементы.ПополнитьЕНС.Видимость = Ложь; Процедура УправлениеФормой(Форма) Экспорт + Элементы = Форма.Элементы; + Элементы.КартинкаДанныеОтсутствуютВСервисе1С.Видимость = Ложь; + Элементы.КартинкаИнформацияДанныеДляЗагрузкиОтсутствуют.Видимость = Ложь; + Элементы.КартинкаИнформацияДанныеДляЗагрузкиОтсутствуют.Видимость = Ложь; + Элементы.ДекорацияКартинкаРекламыАвторизации.Видимость = Ложь; + Элементы.КартинкаРегистрация.Видимость = Ложь; + Элементы.КартинкаРегистрацияПрошлаУспешно.Видимость = Ложь; + Элементы.КартинкаБыстраяЗагрузкаВключена.Видимость = Ложь; + Элементы.ДекорацияКотОшибкаНеУдалосьОтправитьСогласие.Видимость = Ложь; + Элементы.ДекорацияКотОшибкаНеУдалосьОтправитьСогласие1.Видимость = Ложь; + Элементы.ПоказатьКонтекстныеНовости.Видимость = Ложь; + + Если Форма.ТребуетсяПодтверждениеУчетнойЗаписи Тогда + Элементы.ДекорацияНастройкаРегистрацииВЕНС.Заголовок = Новый ФорматированнаяСтрока(НСтр("ru = 'Настройте интеграцию с личным кабинетом ЕНС + | + |В личном кабинете вы сможете: + | - отслеживать состояние единого налогового счета + | - видеть предстоящие платежи глазами налоговой инспекции + | - контролировать суммы задолженности + | - сверять данные учета с данными налогового органа + | + |Начисление налогов на ЕНС будет отражаться в учете по данным отчетности, принятой ФНС. + |Документы ""Операции ЕНС"" и ""Сведения об уплате налогов"" будут создаваться автоматически.'"), ШрифтыСтиля.ЕдиныйНалоговыйСчетШрифтИтогиГлавное); + КонецЕсли; + КонецПроцедуры +// Дает возможность управлять интерфейсом формы ЛК ЕНС, вызывается при УстановитьУсловноеОформление(). +// +// Параметры: +// Форма - ФормаКлиентскогоПриложения +// +// Пример: +// ЭлементОформления = УсловноеОформление.Элементы.Добавить(); +// ЭлементОформления.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветКрасный); +// ОбщегоНазначенияКлиентСервер.ДобавитьЭлементКомпоновки(ЭлементОформления.Отбор, +// "СверкаСальдоЕНСРасхождения", ВидСравненияКомпоновкиДанных.Равно, 0); +// ПолеОформления = ЭлементОформления.Поля.Элементы.Добавить(); +// ПолеОформления.Поле = Новый ПолеКомпоновкиДанных("СверкаСальдоЕНСРасхождения"); Процедура УстановитьУсловноеОформление(Форма) Экспорт КонецПроцедуры +// Дает возможность управлять отбором таблицы "ТаблицаПлатежи" в форме ЛК ЕНС, вызывается при ПереключениеКомандПлатежиРасхождение(). +// +// Параметры: +// Форма - ФормаКлиентскогоПриложения +// +// Пример: +// ТаблицаУстановитьОтборВСпискеРасхождения("ТаблицаПлатежи", "ДокументОтраженияВУчетеЕстьРазница", Истина); Процедура ПереключениеКомандПлатежиРасхождение(Форма) Экспорт КонецПроцедуры +// Дает возможность управлять отбором таблицы "ТаблицаОтчеты" в форме ЛК ЕНС, вызывается при ПереключениеКомандОтчетыРасхождение(). +// +// Параметры: +// Форма - ФормаКлиентскогоПриложения +// +// Пример: +// ТаблицаУстановитьОтборВСпискеРасхождения("ТаблицаОтчеты", "ДокументРегОтчЕстьРазница", Истина); Процедура ПереключениеКомандОтчетыРасхождение(Форма) Экспорт КонецПроцедуры +// Дает возможность управлять отбором таблицы "ТаблицаНачисления" в форме ЛК ЕНС, вызывается при ПереключениеКомандНачисленияРасхождение(). +// +// Параметры: +// Форма - ФормаКлиентскогоПриложения +// +// Пример: +// ТаблицаУстановитьОтборВСпискеРасхождения("ТаблицаНачисления", "ЕстьРасхождение", Истина); Процедура ПереключениеКомандНачисленияРасхождение(Форма) Экспорт КонецПроцедуры +// Дает возможность управлять отбором таблицы "ТаблицаУплаты" в форме ЛК ЕНС, вызывается при ПереключениеКомандУплатыРасхождение(). +// +// Параметры: +// Форма - ФормаКлиентскогоПриложения +// +// Пример: +// ТаблицаУстановитьОтборВСпискеРасхождения("ТаблицаУплаты", "ЕстьРасхождение", Истина); Процедура ПереключениеКомандУплатаРасхождение(Форма) Экспорт КонецПроцедуры +// Дает возможность управлять отбором таблицы "ТаблицаПениШтрафы" в форме ЛК ЕНС, вызывается при ПереключениеКомандПениШтрафыРасхождение(). +// +// Параметры: +// Форма - ФормаКлиентскогоПриложения +// +// Пример: +// ТаблицаУстановитьОтборВСпискеРасхождения("ТаблицаПениШтрафы", "ЕстьРасхождение", Истина); Процедура ПереключениеКомандПениШтрафыРасхождение(Форма) Экспорт КонецПроцедуры +// Дает возможность использовать режим сверки данных от ФНС с данным программы в форме ЛК ЕНС. +// Вызывается при ЕдиныйНалоговыйСчетЛичныйКабинет.УправлениеФормой(). +// Для использования режима сверки, необходимо дополнительно собрать данные программы. +// +// Параметры: +// Признак - Булево - признак того, что используется режим сверки данных от ФНС с данными учета программы +// +// Пример: +// Признак = Истина; Процедура ПоддерживаетсяРежимСверки(Признак) Экспорт + ЕдиныйНалоговыйСчетИнтеграцияУНФ.ПоддерживаетсяРежимСверки(Признак); + КонецПроцедуры +// Дает возможность использовать режим сверки раздела "Главное" с данным программы в форме ЛК ЕНС. +// Вызывается при ЕдиныйНалоговыйСчетЛичныйКабинет.УправлениеФормой(). +// Для использования сверки, необходимо дополнительно собрать данные программы. +// +// Параметры: +// Признак - Булево - признак того, что используется режим сверки раздела "Главное" с данными учета программы +// +// Пример: +// Признак = Истина; Процедура ПоддерживаетсяРежимСверкиГлавное(Признак) Экспорт + ЕдиныйНалоговыйСчетИнтеграцияУНФ.ПоддерживаетсяРежимСверкиГлавное(Признак); + КонецПроцедуры +// Дает возможность использовать сверку СальдоЕНС с сальдо учета программы в форме ЛК ЕНС. +// Управляет видимостью элемента формы ГруппаСверкаСальдоЕНС. +// Вызывается при ЕдиныйНалоговыйСчетЛичныйКабинет.УправлениеФормой(). +// Для использования сверки, необходимо дополнительно собрать данные программы. +// +// Параметры: +// Признак - Булево - признак того, что отображается элемент формы ГруппаСверкаСальдоЕНС +// +// Пример: +// Признак = Истина; Процедура ПоддерживаетсяРежимСверкиСальдоЕНС(Признак) Экспорт -КонецПроцедуры - -Процедура ПоддерживаетсяРежимСверкиСальдоЕНП(Признак) Экспорт + ЕдиныйНалоговыйСчетИнтеграцияУНФ.ПоддерживаетсяРежимСверкиСальдоЕНС(Признак); КонецПроцедуры +// Дает возможность использовать сверку СальдоЕНП с сальдо учета программы в форме ЛК ЕНС. +// Управляет видимостью элемента формы ГруппаСверкаОстатокЕНП. +// Вызывается при ЕдиныйНалоговыйСчетЛичныйКабинет.УправлениеФормой(). +// Для использования сверки, необходимо дополнительно собрать данные программы. +// +// Параметры: +// Признак - Булево - признак того, что отображается элемент формы ГруппаСверкаОстатокЕНП +// +// Пример: +// Признак = Истина; +Процедура ПоддерживаетсяРежимСверкиСальдоЕНП(Признак) Экспорт + +КонецПроцедуры + +// Дает возможность использовать сверку в разделе "Платежи". +// Управляет видимостью элементов формы ГруппаСверкаОперацийПлатежи и МенюПлатежи +// Вызывается при ЕдиныйНалоговыйСчетЛичныйКабинет.УправлениеФормой(). +// Для использования сверки, необходимо дополнительно собрать данные программы. +// +// Параметры: +// Признак - Булево - признак того, что отображаются элементы формы ГруппаСверкаОперацийПлатежи и МенюПлатежи +// +// Пример: +// Признак = Истина; Процедура ПоддерживаетсяРежимСверкиПлатежи(Признак) Экспорт + ЕдиныйНалоговыйСчетИнтеграцияУНФ.ПоддерживаетсяРежимСверкиПлатежи(Признак); + КонецПроцедуры +// Дает возможность использовать сверку в разделе "Декларации, уведомления". +// Управляет видимостью элемента формы МенюОтчеты. +// Вызывается при ЕдиныйНалоговыйСчетЛичныйКабинет.УправлениеФормой(). +// Для использования сверки, необходимо дополнительно собрать данные программы. +// +// Параметры: +// Признак - Булево - признак того, что отображается элемент формы МенюОтчеты +// +// Пример: +// Признак = Истина; Процедура ПоддерживаетсяРежимСверкиОтчеты(Признак) Экспорт + ЕдиныйНалоговыйСчетИнтеграцияУНФ.ПоддерживаетсяРежимСверкиОтчеты(Признак); + КонецПроцедуры +// Дает возможность использовать сверку в разделе "Начисления налогов". +// Управляет видимостью элементов формы ГруппаСверкаОперацйНачисления и МенюНачислениеНалогов. +// Вызывается при ЕдиныйНалоговыйСчетЛичныйКабинет.УправлениеФормой(). +// Для использования сверки, необходимо дополнительно собрать данные программы. +// +// Параметры: +// Признак - Булево - признак того, что отображаются элементы формы ГруппаСверкаОперацйНачисления и МенюНачислениеНалогов +// +// Пример: +// Признак = Истина; Процедура ПоддерживаетсяРежимСверкиНачисления(Признак) Экспорт + ЕдиныйНалоговыйСчетИнтеграцияУНФ.ПоддерживаетсяРежимСверкиНачисления(Признак); + КонецПроцедуры +// Дает возможность использовать сверку в разделе "Уплата налогов". +// Управляет видимостью элементов формы ГруппаСверкаОперацийУплата и МенюУплатаНалогов. +// Вызывается при ЕдиныйНалоговыйСчетЛичныйКабинет.УправлениеФормой(). +// Для использования сверки, необходимо дополнительно собрать данные программы. +// +// Параметры: +// Признак - Булево - признак того, что отображаюся элементы формы ГруппаСверкаОперацийУплата и МенюУплатаНалогов +// +// Пример: +// Признак = Истина; Процедура ПоддерживаетсяРежимСверкиУплаты(Признак) Экспорт + ЕдиныйНалоговыйСчетИнтеграцияУНФ.ПоддерживаетсяРежимСверкиУплаты(Признак); + КонецПроцедуры +// Дает возможность использовать сверку в разделе "Пени, штрафы". +// Управляет видимостью элементов формы ГруппаСверкаОперацийПениШтрафы и ММенюПениШтрафы. +// Вызывается при ЕдиныйНалоговыйСчетЛичныйКабинет.УправлениеФормой(). +// Для использования сверки, необходимо дополнительно собрать данные программы. +// +// Параметры: +// Признак - Булево - признак того, что отображаются элементы формы ГруппаСверкаОперацийПениШтрафы и МенюПениШтрафы +// +// Пример: +// Признак = Истина; Процедура ПоддерживаетсяРежимСверкиПениШтрафы(Признак) Экспорт -КонецПроцедуры - -Процедура ПоддерживаетсяАвтоматическаяРегистрацияУплат(Признак) Экспорт + ЕдиныйНалоговыйСчетИнтеграцияУНФ.ПоддерживаетсяРежимСверкиПениШтрафы(Признак); КонецПроцедуры +// Дает возможность автоматически отобразить уплаты наловог в учете по данных ФНС. +// Вызывается при ЕдиныйНалоговыйСчетЛичныйКабинет.ПоддерживаетсяАвтоматическаяРегистрацияУплат(). +// Для использования, необходимо дополнительно прописать механизм отображения уплат в учете. +// +// Параметры: +// Признак - Булево - признак того, что отображаются улаты налогов в учете +// +// Пример: +// Признак = Истина; +Процедура ПоддерживаетсяАвтоматическаяРегистрацияУплат(Признак) Экспорт + + ЕдиныйНалоговыйСчетИнтеграцияУНФ.ПоддерживаетсяАвтоматическаяРегистрацияУплат(Признак); + +КонецПроцедуры + +// Дает возможность установить Даты начала и окончания периода, кода можно зарегистрировать уплаты налогов в учете. +// Вызывается при ЕдиныйНалоговыйСчетЛичныйКабинет.ПериодОбработкиДанныхДляРегистрацииУплат(Организация, ДатаНачала, ДатаОкончания). +// Используется в Модуле менеджера обработки ЕдиныйНалоговыйСчетОбслуживаниеБазовый +// +// Параметры: +// Организация - СправочникСсылка.Организации +// НачалоПериода - Дата - дата начала периода для регистрации улат налогов в учете +// КонецПериода - Дата - дата окончания периода для регистрации улат налогов в учете +// +// Пример: +// НачалоПериода = НачалоГода(ТекущаяДатаСеанса()); +// КонецПериода = КонецГода(ТекущаяДатаСеанса()); Процедура ПериодОбработкиДанныхДляРегистрацииУплат(Организация, НачалоПериода, КонецПериода) Экспорт + ЕдиныйНалоговыйСчетИнтеграцияУНФ.ПериодОбработкиДанныхДляРегистрацииУплат(Организация, НачалоПериода, КонецПериода); + КонецПроцедуры // Дает возможность автоматически отобразить начисления наловог, пени и щтрафов в учете по данных ФНС. @@ -111,6 +367,8 @@ // Признак = Истина; Процедура ПоддерживаетсяАвтоматическаяРегистрацияОперацийЕНС(Признак) Экспорт + ЕдиныйНалоговыйСчетИнтеграцияУНФ.ПоддерживаетсяАвтоматическаяРегистрацияОперацийЕНС(Признак); + КонецПроцедуры // Дает возможность установить Даты начала и окончания периода, кода можно зарегистрировать операции начисления налогов в учете. @@ -127,36 +385,89 @@ // КонецПериода = КонецГода(ТекущаяДатаСеанса()); Процедура ПериодОбработкиДанныхДляРегистрацииОперацийЕНС(Организация, НачалоПериода, КонецПериода) Экспорт + ЕдиныйНалоговыйСчетИнтеграцияУНФ.ПериодОбработкиДанныхДляРегистрацииОперацийЕНС(Организация, НачалоПериода, КонецПериода); + КонецПроцедуры +// Дает возможность установить признак что можно отразить в учете начисление налогов. +// Управляет видимостью элемента формы ОтразитьВУчетеНачислениеНалогов. +// Вызывается при ЕдиныйНалоговыйСчетЛичныйКабинет.УправлениеФормой(). +// +// Параметры: +// Признак - Булево - признак того, что отображаеся элемент формы ОтразитьВУчетеНачислениеНалогов +// +// Пример: +// Признак = Истина; Процедура ДоступноОтражениеВУчетеНачислений(Признак) Экспорт + ЕдиныйНалоговыйСчетИнтеграцияУНФ.ДоступноОтражениеВУчетеНачисленийПениШтрафов(Признак); + КонецПроцедуры +// Дает возможность установить признак что можно отразить в учете уплаты налогов. +// Управляет видимостью элемента формы ОтразитьВУчетеУплаты. +// Вызывается при ЕдиныйНалоговыйСчетЛичныйКабинет.УправлениеФормой(). +// +// Параметры: +// Признак - Булево - признак того, что отображаеся элемент формы ОтразитьВУчетеУплаты +// +// Пример: +// Признак = Истина; Процедура ДоступноОтражениеВУчетеУплаты(Признак) Экспорт -КонецПроцедуры - -Процедура ДоступноОтражениеВУчетеПениШтрафов(Признак) Экспорт + ЕдиныйНалоговыйСчетИнтеграцияУНФ.ДоступноОтражениеВУчетеУплаты(Признак); КонецПроцедуры +// Дает возможность установить признак что можно отразить в учете пени и штрафы. +// Управляет видимостью элемента формы ОтразитьВУчетеПени. +// Вызывается при ЕдиныйНалоговыйСчетЛичныйКабинет.УправлениеФормой(). +// +// Параметры: +// Признак - Булево - признак того, что отображаеся элемент формы ОтразитьВУчетеПени +// +// Пример: +// Признак = Истина; +Процедура ДоступноОтражениеВУчетеПениШтрафов(Признак) Экспорт + + ЕдиныйНалоговыйСчетИнтеграцияУНФ.ДоступноОтражениеВУчетеНачисленийПениШтрафов(Признак); + +КонецПроцедуры + +// Устарело: больше не используется Процедура ОтражениеВУчетеДоступноСтрокаНачисления(ДанныеСтроки, Признак) Экспорт КонецПроцедуры +// Устарело: больше не используется Процедура ОтражениеВУчетеДоступноСтрокаУплаты(ДанныеСтроки, Признак) Экспорт КонецПроцедуры +// Устарело: больше не используется Процедура ОтражениеВУчетеДоступноСтрокаПениШтрафы(ДанныеСтроки, Признак) Экспорт КонецПроцедуры +// Дает возможность управлять отбором таблицы "ТаблицаОперацииЕНПДеревоСверки" в форме ЛК ЕНС, вызывается при ПереключениеКомандОперацииЕНПРасхождение +// +// Параметры: +// Форма - ФормаКлиентскогоПриложения +// Пример: +// КоллекцияЭлементовДерева = ТаблицаОперацииЕНПДеревоСверки.ПолучитьЭлементы(); +// КоллекцияЭлементовДерева.Очистить(); Процедура ПереключениеКомандОперацииЕНПРасхождение(Форма) Экспорт КонецПроцедуры +// Дает возможность использовать режим сверки в разделе ОперацииЕНП от ФНС с данным программы в форме ЛК ЕНС, +// вызывается при ЕдиныйНалоговыйСчетЛичныйКабинет.УправлениеФормой +// Для использования сверки, необходимо дополнительно собрать данные программы. +// +// Параметры: +// Признак - Булево - признак того, что используется режим сверки в разделе ОперацииЕНП от ФНС с данными учета программы +// Пример: +// Признак = Истина; Процедура ПоддерживаетсяРежимСверкиОперацииЕНП(Признак) Экспорт КонецПроцедуры diff --git a/Конфигурация/CommonModules/ЕдиныйНалоговыйСчетПовтИсп/Ext/Module.bsl b/Конфигурация/CommonModules/ЕдиныйНалоговыйСчетПовтИсп/Ext/Module.bsl index 2ab33dd38..ceb67c35c 100644 --- a/Конфигурация/CommonModules/ЕдиныйНалоговыйСчетПовтИсп/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ЕдиныйНалоговыйСчетПовтИсп/Ext/Module.bsl @@ -12,7 +12,7 @@ КонецЕсли; КонецЦикла; - Возврат МассивНалогов + Возврат МассивНалогов; КонецФункции @@ -24,7 +24,7 @@ МассивВидовНалогов.Добавить(Перечисления.ВидыНалогов.ФиксированныеВзносы_ФСС); МассивВидовНалогов.Добавить(Перечисления.ВидыНалогов.ОбеспечительныйПлатежПриВвозеТоваровИзЕАЭС); - Возврат МассивВидовНалогов + Возврат МассивВидовНалогов; КонецФункции @@ -33,7 +33,7 @@ МассивВидовНалогов = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Перечисления.ВидыНалогов.ПустаяСсылка()); ОбщегоНазначенияКлиентСервер.ДополнитьМассив(МассивВидовНалогов, ВидыНалоговУплачиваемыеОтдельно()); - Возврат МассивВидовНалогов + Возврат МассивВидовНалогов; КонецФункции diff --git a/Конфигурация/CommonModules/ЗагрузкаВыпискиПоБанковскомуСчету/Ext/Module.bsl b/Конфигурация/CommonModules/ЗагрузкаВыпискиПоБанковскомуСчету/Ext/Module.bsl index 9c1d4b068..44e5cd1a4 100644 --- a/Конфигурация/CommonModules/ЗагрузкаВыпискиПоБанковскомуСчету/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ЗагрузкаВыпискиПоБанковскомуСчету/Ext/Module.bsl @@ -215,7 +215,8 @@ КонецЕсли; // Виды оперций, определяемые по правилам БП - Если Не СтрокаСекции.НайденоСоответствиеНазначенийПлатежаИРеквизитовПлатежа Тогда + Если Не СтрокаСекции.НайденоСоответствиеНазначенийПлатежаИРеквизитовПлатежа + И Не СтрокаСекции.НайденоСоответствиеВИсторииРеквизитов Тогда СтрокаСекции.ВидОперации = ХозяйственнаяОперация.ВидОперацииДокумента; Если ХозяйственнаяОперация.Свойство("Корреспонденция") Тогда @@ -815,23 +816,19 @@ Если СведенияОВладельцеБанковскогоСчетаИзКонтекста.Организация.Количество() = 1 Тогда Организация = СведенияОВладельцеБанковскогоСчетаИзКонтекста.Организация[0]; - Реквизиты = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Организация, "ИНН, Наименование"); - РеквизитыОрганизации.Вставить("ИННОрганизации", Реквизиты.ИНН); - РеквизитыОрганизации.Вставить("Наименование", Реквизиты.Наименование); + РеквизитыОрганизации = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Организация, "ИНН, КПП, Наименование"); РеквизитыОрганизации.Вставить("Организация", Организация); Иначе ВызватьИсключение НСтр("ru = 'Чтение выписки по цифровому рублю. Не указана организация.'"); КонецЕсли; - РеквизитыОрганизации.Вставить("ЦифровойСчет", Ложь); Если СведенияОВладельцеБанковскогоСчетаИзКонтекста.БанковскийСчетОрганизации.Количество() = 1 Тогда БанковскийСчет = СведенияОВладельцеБанковскогоСчетаИзКонтекста.БанковскийСчетОрганизации[0]; Если ЗначениеЗаполнено(БанковскийСчет) И ТипЗнч(БанковскийСчет) = Тип("СправочникСсылка.БанковскиеСчета") Тогда РеквизитыСчета = ОбщегоНазначения.ЗначенияРеквизитовОбъекта( - БанковскийСчет, "ЦифровойСчет, НомерСчета, ИдентификаторЦифровогоСчета"); + БанковскийСчет, "НомерСчета, ИдентификаторЦифровогоСчета"); РеквизитыОрганизации.Вставить("НомерСчета", РеквизитыСчета.НомерСчета); - РеквизитыОрганизации.Вставить("НомерСчетаЦР", РеквизитыСчета.ИдентификаторЦифровогоСчета); - РеквизитыОрганизации.ЦифровойСчет = РеквизитыСчета.ЦифровойСчет; + РеквизитыОрганизации.Вставить("ИдентификаторЦифровогоСчета", РеквизитыСчета.ИдентификаторЦифровогоСчета); Иначе ВызватьИсключение НСтр("ru = 'Чтение выписки по цифровому рублю. Не указан счет ЦР.'"); КонецЕсли; @@ -1002,7 +999,7 @@ Результат = Новый Структура; - НазначениеПлатежа = ПривестиТекстНазначения(ИсходноеНазначениеПлатежа); + НазначениеПлатежа = ПривестиТекстНазначения(ИсходноеНазначениеПлатежа, Истина); СпецСимволыЧисла = ":(%),.-= "; РезультатПоНДС = ВыделитьИнформациюОНДСВНазначении(НазначениеПлатежа, ЗначениеСтавкиНДС, СпецСимволыЧисла); @@ -1158,6 +1155,9 @@ // Используется при загрузке операций по счету цифрового рубля Выписка.Операции.Колонки.Добавить("ВидОперацииЦР", Новый ОписаниеТипов("Строка")); + Выписка.Операции.Колонки.Добавить("MCC", ОбщегоНазначения.ОписаниеТипаСтрока(4)); + Выписка.Операции.Колонки.Добавить("КодНазПлатежа", ОбщегоНазначения.ОписаниеТипаСтрока(1)); + Выписка.Операции.Колонки.Добавить("ПлатежнаяСсылкаЦР", Новый ОписаниеТипов("Строка")); // Используется передачи дополнительных свойств операции в процессее ее распознавания Выписка.Операции.Колонки.Добавить("ДополнительныеСвойства", Новый ОписаниеТипов("Структура")); @@ -1176,6 +1176,7 @@ БанковскиеПравила.ДлинаИдентификатораПорученияНаПереводЦР())); // TransactionDetails.References.EndToEndIdentification Для идентификации используется номер и дата документа, передаваемые от плательщика получателю (или при прямом дебитовании - от получателя плательщику) Выписка.Операции.Колонки.Добавить("ДатаДокумента", ОбщегоНазначения.ОписаниеТипаДата(ЧастиДаты.Дата)); Выписка.Операции.Колонки.Добавить("НомерСчетаКонтрагента", БанковскиеПравила.ТипЦифровойНомерСчета()); // TransactionDetails.References.InstructionIdentification Для идентификации операции в цепочке "банк-владелец счета" используется часть номера и дата документа, которым идентифицирована транзакция, а также номер банковского счета контрагента + Выписка.Операции.Колонки.Добавить("ИдентификаторЦифровогоСчета", БанковскиеПравила.ТипЦифровойНомерСчета()); // TransactionDetails.References.InstructionIdentification Для идентификации операции в цепочке "банк-владелец счета" используется часть номера и дата документа, которым идентифицирована транзакция, а также номер банковского счета контрагента Выписка.Операции.Колонки.Добавить("Сумма", ОбщегоНазначения.ОписаниеТипаЧисло(15,2)); // Amount Выписка.Операции.Колонки.Добавить("ПоступилоСписано", ТипПоступилоСписано()); // "Поступило" или "Списано" - CreditDebitIndicator Выписка.Операции.Колонки.Добавить("ДатаИсполнения", ОбщегоНазначения.ОписаниеТипаДата(ЧастиДаты.Дата)); // BookingDate; Принимаем, что Status = BOOK @@ -1325,7 +1326,13 @@ ПоступилоСписано.Вставить(ИмяПоступилоСписано, Ложь); АргументыПоступилоСписано.Вставить(ИмяПоступилоСписано, Новый Структура); - Счет = Документ[ИмяСтороны + "Счет"]; + ИдентификаторЦифровогоСчета = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры( + Документ[ИмяСтороны + "Реквизиты"], "ИдентификаторЦифровогоСчета", ""); + Если ЗначениеЗаполнено(ИдентификаторЦифровогоСчета) Тогда + Счет = ИдентификаторЦифровогоСчета; + Иначе + Счет = Документ[ИмяСтороны + "Счет"]; + КонецЕсли; Если Не ЗначениеЗаполнено(Счет) Тогда СчетИзЗаголовка = ""; @@ -1486,7 +1493,15 @@ Продолжить; КонецЕсли; - НомерСчета = Документ[ИмяСтороны + "Счет"]; + ИдентификаторЦифровогоСчета = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры( + Документ[ИмяСтороны + "Реквизиты"], "ИдентификаторЦифровогоСчета", ""); + + Если ЗначениеЗаполнено(ИдентификаторЦифровогоСчета) Тогда + НомерСчета = ИдентификаторЦифровогоСчета; + Иначе + НомерСчета = Документ[ИмяСтороны + "Счет"]; + КонецЕсли; + Если ПустаяСтрока(НомерСчета) Тогда Если ЗначениеЗаполнено(Документ["Дата" + ИмяПоступилоСписано]) И ЗначениеЗаполнено(СчетИзЗаголовка) Тогда НомерСчета = СчетИзЗаголовка; @@ -1552,6 +1567,12 @@ РеквизитыПротивоположнойСтороны = Документ[ИмяПротивоположнойСтороны + "Реквизиты"]; ИмяНашейСтороны = ?(ИмяПоступилоСписано = "Поступило", Стороны.Поступило, Стороны.Списано); + ИдентификаторЦРПротивоположнойСтороны = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры( + РеквизитыПротивоположнойСтороны, "ИдентификаторЦифровогоСчета"); + Если ЗначениеЗаполнено(ИдентификаторЦРПротивоположнойСтороны) Тогда + НомерСчетаПротивоположнойСтороны = ИдентификаторЦРПротивоположнойСтороны; + КонецЕсли; + Если ИмяПоступилоСписано = "Списано" И ПоступилоСписано.Поступило Тогда РеквизитыНашейСтороны = Документ[ИмяНашейСтороны + "Реквизиты"]; Если РеквизитыСчетаИдентичны(РеквизитыПротивоположнойСтороны, РеквизитыНашейСтороны) Тогда @@ -1567,7 +1588,7 @@ ЗаполнитьЗначенияСвойств(Операция, Документ, "Идентификатор,ИдентификаторАУСН,РазметкаАУСН,ТипДокументаАУСН, |ИдентификаторДокумента, - |ВидОперацииЦР, + |ВидОперацииЦР, MCC, ПлатежнаяСсылкаЦР, КодНазПлатежа, |Сумма,НазначениеПлатежа,ПлательщикРеквизиты,ПолучательРеквизиты,РасчетыВВалюте"); Операция.ПорядковыйНомерВФайле = ДанныеИзБанка.Документы.Индекс(Документ); Операция.ДатаДокумента = Документ.Дата; @@ -2209,9 +2230,12 @@ ДругиеРеквизиты.Наименование = Наименование; КонецЕсли; + ЭтоСБП = Ложь; + ЭтоСБПКакЭквайринг = Ложь; СчетКонтрагента = Счет; БалансовыйСчет = БанковскиеПравила.БалансовыйСчет(СчетКонтрагента); - ЭтоСчетПереводовЧерезСБП = БанковскиеПравила.ЭтоСчетНезавершенныхРасчетов3023Актив(БалансовыйСчет); + ЭтоСчетПереводовЧерезСБП = БанковскиеПравила.ЭтоСчетНезавершенныхРасчетов3023Актив(БалансовыйСчет) + Или БанковскиеПравила.ЭтоСчетНезавершенныхРасчетов3023Пассив(БалансовыйСчет); ЭтоСчетФизЛица = БанковскиеПравила.ЭтоСчетПереводовФизическимЛицам(БалансовыйСчет) Или БанковскиеПравила.ЭтоСчетДепозитовФизическихЛиц(БалансовыйСчет); ЭтоОбязательстваПоПрочимОперациямСМЗ = ЕстьРасчетыССамозанятыми @@ -2225,7 +2249,9 @@ НазначениеПлатежаУказываетНаСБП = НазначениеПлатежаУказываетНаСБП(Операция); ЭтоСБП = НазначениеПлатежаУказываетНаСБП Или Не НазначениеПлатежаУказываетНаЭквайринг; - Если Не ЭтоСБП Тогда + Если ЭтоСБП Тогда + ЭтоСБПКакЭквайринг = ЭтоНазваниеБанка(Наименование, СоставныеЧастиНазванияБанка()); + Иначе СчетКонтрагента = ""; КонецЕсли; ИначеЕсли ЭтоОбязательстваПоПрочимОперациямСМЗ Тогда @@ -2248,6 +2274,15 @@ Операция.Вставить("ШифрОперации", Документ.ВидОплаты); ЭтоВыплатаПоРееструСамозанятому = ВыплатаПоРееструСамозанятым(Операция); + ИначеЕсли Документ.ВидОперацииЦР = ЦифровойРубль.ОперацияC2B() Тогда + Если ЗначениеЗаполнено(Документ.ПлатежнаяСсылкаЦР) Тогда + РеквизитыЦБ = ЦифровойРубль.РеквизитыОператораПлатформыЦифровогоРубля(); + Идентификатор = ИдентификацияУчастниковБанковскихОпераций.ИдентификаторПоИНН( + УчастникиОпераций, РеквизитыЦБ.ИНН, РеквизитыЦБ.КПП); + Если Идентификатор <> Неопределено Тогда + ИдентификаторыУчастника.Добавить(Идентификатор); + КонецЕсли; + КонецЕсли; КонецЕсли; Если Не ЭтоВыплатаПоРееструСамозанятому @@ -2258,10 +2293,10 @@ КонецЕсли; ИдентификаторыФизическогоЛица = ИдентификаторыФизическогоЛицаИзНаименования( - Наименование, ИНН, СчетКонтрагента, Документ.ВидОперацииЦР); + Наименование, ИНН, СчетКонтрагента, Документ.ВидОперацииЦР, Сторона); Если ИдентификаторыФизическогоЛица.ЭтоФизическоеЛицо Тогда - Если Документ.ВидОперацииЦР = БанковскиеПравила.ОперацияC2B() - Или Документ.ВидОперацииЦР = БанковскиеПравила.ОперацияB2C() Тогда + Если Документ.ВидОперацииЦР = ЦифровойРубль.ОперацияC2B() + Или Документ.ВидОперацииЦР = ЦифровойРубль.ОперацияB2C() Тогда Идентификатор = ИдентификацияУчастниковБанковскихОпераций.ИдентификаторПоPAM( УчастникиОпераций, ИдентификаторыФизическогоЛица.Наименование); @@ -2270,8 +2305,12 @@ УчастникиОпераций, ИдентификаторыФизическогоЛица.Наименование); КонецЕсли; + Если Идентификатор <> Неопределено Тогда ИдентификаторыУчастника.Добавить(Идентификатор); + Если ЭтоСБП И Не ЭтоСБПКакЭквайринг Тогда + Документ[Сторона + "Счет"] = ""; + КонецЕсли; КонецЕсли; Если ИдентификаторыФизическогоЛица.ВалидныйИННФизическогоЛица Тогда @@ -2321,13 +2360,14 @@ ИдентификаторВладельца = Идентификатор; БИК = ?(ДругиеРеквизиты.Свойство("БИК"), ДругиеРеквизиты.БИК, ""); - НомерСчетаЦифровой = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ДругиеРеквизиты, "НомерСчетаЦифровой", ""); - Если ЗначениеЗаполнено(Счет) Или ЗначениеЗаполнено(НомерСчетаЦифровой) Тогда - Если БанковскиеСчетаСервер.ЭтоИдентификаторЦифровогоСчета(Счет) Тогда + ИдентификаторЦифровогоСчета = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры( + ДругиеРеквизиты, "ИдентификаторЦифровогоСчета", ""); + Если ЗначениеЗаполнено(Счет) Или ЗначениеЗаполнено(ИдентификаторЦифровогоСчета) Тогда + Если БанковскиеСчетаСервер.ЭтоИдентификаторЦифровогоСчета(ИдентификаторЦифровогоСчета) Тогда // DBAN (Digital Bank Account Number) БИКЦР = ?(ЗначениеЗаполнено(БИК), БИК, ЦифровойРубль.БИКПлатформыЦифровогоРубля()); Идентификатор = ИдентификацияУчастниковБанковскихОпераций.ИдентификаторПоИдентификаторуЦифровогоРубля( - УчастникиОпераций, Счет, НомерСчетаЦифровой, БИКЦР); + УчастникиОпераций, ИдентификаторЦифровогоСчета, Счет, БИКЦР); Иначе // BBAN (Basic Bank Account Number) или IBAN (International Bank Account Number) Идентификатор = ИдентификацияУчастниковБанковскихОпераций.ИдентификаторПоМеждународномуНомеруБанковскогоСчета( @@ -2372,9 +2412,11 @@ И СчетПозволяетИдентифицироватьКонтрагента(БалансовыйСчет, ИдентификаторыФизическогоЛица.ЭтоФизическоеЛицо); КонецЕсли; - // Здесь Идентификатор может быть как BBAN, так и IBAN + // Здесь Идентификатор может быть как BBAN, так и IBAN или DBAN Если Идентификатор <> Неопределено - И (СчетПозволяетИдентифицироватьКонтрагента Или БанковскиеПравила.ЭтоКазначейскийСчет(Счет)) Тогда + И (СчетПозволяетИдентифицироватьКонтрагента + Или БанковскиеПравила.ЭтоКазначейскийСчет(Счет) + Или БанковскиеСчетаСервер.ЭтоИдентификаторЦифровогоСчета(ИдентификаторЦифровогоСчета)) Тогда ИдентификаторыУчастника.Добавить(Идентификатор); ИдентификаторыДокумента[Сторона + "Счет"] = Идентификатор; КонецЕсли; @@ -2550,7 +2592,7 @@ КонецФункции -Функция ИдентификаторыФизическогоЛицаИзНаименования(Наименование, ИНН, Счет, ВидОперацииЦР) +Функция ИдентификаторыФизическогоЛицаИзНаименования(Наименование, ИНН, Счет, ВидОперацииЦР, Сторона = "") Результат = Новый Структура; Результат.Вставить("ЭтоФизическоеЛицо", Ложь); @@ -2561,8 +2603,8 @@ Результат.Вставить("ИННПустой", Ложь); Если ПустаяСтрока(ИНН) - И (ВидОперацииЦР = БанковскиеПравила.ОперацияB2C() - Или ВидОперацииЦР = БанковскиеПравила.ОперацияC2B()) Тогда + И (ВидОперацииЦР = ЦифровойРубль.ОперацияB2C() + Или ВидОперацииЦР = ЦифровойРубль.ОперацияC2B()) Тогда Результат.ЭтоФизическоеЛицо = Истина; Результат.ИННПустой = Истина; КонецЕсли; @@ -2577,8 +2619,11 @@ БалансовыйСчет = БанковскиеПравила.БалансовыйСчет(Счет); ЭтоСчетФизЛица = БанковскиеПравила.ЭтоСчетПереводовФизическимЛицам(БалансовыйСчет); - ЭтоПереводЧерезСБП = БанковскиеПравила.ЭтоСчетНезавершенныхРасчетов3023Актив(БалансовыйСчет); + ЭтоПереводЧерезСБП = БанковскиеПравила.ЭтоСчетНезавершенныхРасчетов3023Актив(БалансовыйСчет) + Или БанковскиеПравила.ЭтоСчетНезавершенныхРасчетов3023Пассив(БалансовыйСчет); ЭтоВыплатаЧерезСБП = БанковскиеПравила.ЭтоОбязательстваПоПрочимОперациям(БалансовыйСчет); + ЭтоВыплатаЧерезСБПНаПустыеРеквизиты = Сторона = "Получатель" И ПустаяСтрока(Счет) И ПустаяСтрока(ИНН) + И Не ЭтоНазваниеБанка(Наименование, СоставныеЧастиНазванияБанка); ЭтоВыплатаЧерезЭквайринг = БанковскиеПравила.ЭтоСчетНезавершенныхРасчетов3023Пассив(БалансовыйСчет); СловоИННСПробелом = НСтр("ru = 'ИНН'") + " "; @@ -2601,6 +2646,10 @@ Если ЭтоПереводЧерезСБП Тогда Разделитель = РазделительСлеши; Наименование = Разделитель + Наименование; + ИначеЕсли ЭтоВыплатаЧерезСБПНаПустыеРеквизиты Тогда + Результат.ЭтоФизическоеЛицо = Истина; + Результат.ИННПустой = Истина; + Возврат Результат; Иначе Возврат Результат; КонецЕсли; @@ -3087,6 +3136,7 @@ ОписаниеВладельцаСчета.Вставить("ИПИспользуетТрудНаемныхРаботников", Ложь); ОписаниеВладельцаСчета.Вставить("СчетКорпоративныхРасчетов", Ложь); ОписаниеВладельцаСчета.Вставить("ЦифровойКошелек", Справочники.БанковскиеСчета.ПустаяСсылка()); + ОписаниеВладельцаСчета.Вставить("ВидОплатыЦР", Справочники.СпособыОплаты.ПустаяСсылка()); ОписаниеВладельцаСчета.Вставить("СчетБанк", ПланыСчетов.Управленческий.ПустаяСсылка()); ОписаниеВладельцаСчета.Вставить("КорпоративныеКартыПодотчетныхЛиц", Новый Соответствие); // Ключ - номер карты; Значение - физ.лицо ОписаниеВладельцаСчета.Вставить("УчредителиОрганизации", Новый ТаблицаЗначений); @@ -3991,7 +4041,7 @@ ВидОперацииЦР = Параметры.Операция.ВидОперацииЦР; КонецЕсли; - Если ВидОперацииЦР = БанковскиеПравила.ОперацияB2G() Тогда + Если ВидОперацииЦР = ЦифровойРубль.ОперацияB2G() Тогда Возврат ХозяйственнаяОперацияНалогЦР(Параметры); КонецЕсли; @@ -4389,9 +4439,22 @@ // Вывод денег на счет предпринимателя уже должен быть проверен. Если Параметры.ПроверитьПрименимостьПравила Тогда + ВидОперацииЦР = ""; + Если ОбщегоНазначенияКлиентСервер.ЕстьРеквизитИлиСвойствоОбъекта(Параметры.Операция, "ВидОперацииЦР") Тогда + ВидОперацииЦР = Параметры.Операция.ВидОперацииЦР; + КонецЕсли; + + КодВидаДохода = ""; + Если ОбщегоНазначенияКлиентСервер.ЕстьРеквизитИлиСвойствоОбъекта(Параметры.Операция, "КодНазПлатежа") Тогда + КодВидаДохода = Параметры.Операция.КодНазПлатежа; + КонецЕсли; + + ЭтоПеречислениеФизлицуПоРееструЦР = ВидОперацииЦР = ЦифровойРубль.ОперацияB2C() И ЗначениеЗаполнено(КодВидаДохода); + Если Не БанковскиеПравила.ЭтоСчетПереводовФизическимЛицам(Параметры.Операция.БалансовыйСчет) И Не БанковскиеПравила.ЭтоСчетДепозитовФизическихЛиц(Параметры.Операция.БалансовыйСчет) - И Не БанковскиеПравила.ЭтоСчетСредствПереводаЭДС(Параметры.Операция.БалансовыйСчет) Тогда + И Не БанковскиеПравила.ЭтоСчетСредствПереводаЭДС(Параметры.Операция.БалансовыйСчет) + И Не ЭтоПеречислениеФизлицуПоРееструЦР Тогда Возврат НовыйРезультатОпределенияХозяйственнойОперации(); КонецЕсли; @@ -4419,7 +4482,7 @@ Возврат НовыйРезультатОпределенияХозяйственнойОперации(); КонецЕсли; - Если КонтрагентУстановлен(Параметры) Тогда + Если КонтрагентУстановлен(Параметры) И Не ЭтоПеречислениеФизлицуПоРееструЦР Тогда Возврат НовыйРезультатОпределенияХозяйственнойОперации(); КонецЕсли; КонецЕсли; @@ -4525,6 +4588,7 @@ КонецФункции +//@skip-check module-unused-method Функция ХозяйственнаяОперацияПеречислениеПоГПХПоВедомости(Параметры) Если Параметры.ПроверитьПрименимостьПравила Тогда @@ -4621,7 +4685,7 @@ КонецЕсли; Если Не НазначениеПлатежаУказываетНаВозврат(Параметры.Операция) - И ВидОперацииЦР <> БанковскиеПравила.ОперацияB2C() Тогда + И ВидОперацииЦР <> ЦифровойРубль.ОперацияB2C() Тогда Возврат НовыйРезультатОпределенияХозяйственнойОперации(); КонецЕсли; КонецЕсли; @@ -5345,10 +5409,12 @@ // Классификация по ISO2002 // Family = "MCRD"; // Merchant Card Transactions - ОрганизацияИП = Параметры.ВладелецСчета.ЮридическоеФизическоеЛицо = Перечисления.ЮридическоеФизическоеЛицо.ФизическоеЛицо; + ОрганизацияИП = + Параметры.ВладелецСчета.ЮридическоеФизическоеЛицо = Перечисления.ЮридическоеФизическоеЛицо.ФизическоеЛицо; НазначениеПлатежаУказываетНаСБП = Ложь; НазначениеПлатежаУказываетНаЭквайринг = Ложь; + ОплатаПоQRКодуЦР = Ложь; Если Параметры.ПроверитьПрименимостьПравила Тогда ЭтоВозвратСредствСДепозита = ПлательщикИПолучательСовпадаютПоСхемеTXID(Параметры) И БанковскиеПравила.ЭтоСчетВнутрибанковскиеОбязательстваПоПереводамКлиентов(Параметры.Операция.БалансовыйСчет); @@ -5365,12 +5431,21 @@ НазначениеПлатежаУказываетНаСБП = НазначениеПлатежаУказываетНаСБП(Параметры.Операция); НазначениеПлатежаУказываетНаЭквайринг = НазначениеПлатежаУказываетНаЭквайринг(Параметры.Операция); + НазначениеПлатежаУказываетНаЭквайрингФНС = НазначениеПлатежаУказываетНаЭквайрингФНС(Параметры.Операция); // Банковские платежные агенты при расчетах через Систему быстрых платежей ЭтоСчетБанковскогоПлатежногоАгентаСБП = БанковскиеПравила.ЭтоСчетБанковскогоПлатежногоАгента( Параметры.Операция.БалансовыйСчет) И (НазначениеПлатежаУказываетНаСБП Или НазначениеПлатежаУказываетНаЭквайринг); + ОплатаПоQRКодуЦР = ЗначениеЗаполнено(Параметры.Операция.ПлатежнаяСсылкаЦР) + И ЗначениеЗаполнено(Параметры.ВладелецСчета.ВидОплатыЦР); + Если Не ОплатаПоQRКодуЦР И ЗначениеЗаполнено(Параметры.Операция.ПлатежнаяСсылкаЦР) Тогда + ОчиститьИдентификаторыTXID(Параметры, "Плательщик"); + КонецЕсли; + Если Не ЭтоСчетНезавершенныхРасчетов И Не ЭтоСчетРасчетовФилиалаБанкаСКлиентамиБанка + И Не НазначениеПлатежаУказываетНаЭквайрингФНС + И Не ОплатаПоQRКодуЦР И Не ЭтоСчетБанковскогоПлатежногоАгентаСБП Тогда Возврат НовыйРезультатОпределенияХозяйственнойОперации(); КонецЕсли; @@ -5391,7 +5466,9 @@ Параметры.УчастникиОпераций); Если ЮридическоеФизическоеЛицо = Перечисления.ЮридическоеФизическоеЛицо.ФизическоеЛицо Тогда - Если Параметры.ПроверитьПрименимостьПравила И Не НазначениеПлатежаУказываетНаЭквайринг Тогда + Если Параметры.ПроверитьПрименимостьПравила + И Не НазначениеПлатежаУказываетНаЭквайринг + И Не ОплатаПоQRКодуЦР Тогда // Посредник - банк или другая финансовая организация, а значит юридическое лицо. // В то же время, счета незавершенных расчетов могут использоваться для платежей физических лиц без открытия банковского счета. // В этих случаях данные о плательщике могут содержать идентификаторы как юридического, так и физического лица. @@ -5406,18 +5483,38 @@ Результат.ХозяйственнаяОперация.Вставить("КурсВзаиморасчетов", 1); Результат.ХозяйственнаяОперация.Вставить("КратностьВзаиморасчетов", 1); Результат.ХозяйственнаяОперация.Вставить("СуммаВзаиморасчетов", Параметры.Операция.Сумма); + Если ОплатаПоQRКодуЦР Тогда + КонтрагентЦР = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Параметры.ВладелецСчета.ВидОплатыЦР, "Эквайрер"); // УНФ + Результат.ХозяйственнаяОперация.Вставить("Контрагент", КонтрагентЦР); + Результат.ХозяйственнаяОперация.Вставить("ВидОплаты", Параметры.ВладелецСчета.ВидОплатыЦР); + ОчиститьИдентификаторыЦРНеСоответствующиеЦБ(Параметры, "Плательщик"); + + Если Параметры.ПлательщикКешИдентификаторов <> Неопределено Тогда + Параметры.ПлательщикКешИдентификаторов.ВсеСсылкиПоТипам.Очистить(); + КонецЕсли; + + Если Параметры.КешПроверенныхСвойствПравил.Свойство("ДоговорыКонтрагентовПоВидам") Тогда + Параметры.КешПроверенныхСвойствПравил.Удалить("ДоговорыКонтрагентовПоВидам"); // очистим кэш + КонецЕсли; + КонецЕсли; СуммаУслугБанка = 0; НаборШаблонов = НовыйШаблоныКомиссия(); НашлиВидОплатыПоПроцентуКомиссии = Ложь; - ДобавитьОтбор(ОтборДоговоров, "ВидОплаты"); + Если ОплатаПоQRКодуЦР Тогда + ДобавитьОтбор(ОтборДоговоров, "ВидОплаты", Параметры.ВладелецСчета.ВидОплатыЦР); + Параметры.Операция.ДополнительныеСвойства.Вставить("ЭтоУслугиБанкаПоЭквайрингу", Истина); + Иначе + ДобавитьОтбор(ОтборДоговоров, "ВидОплаты"); + КонецЕсли; + ДоговорНайден = НайтиДоговорПоВидуОперации( Результат.ХозяйственнаяОперация, Параметры, Результат.ХозяйственнаяОперация.ВидОперацииДокумента, ОтборДоговоров); - Если ДоговорНайден Тогда + Если ДоговорНайден И Не ОплатаПоQRКодуЦР Тогда // Если договор, ассоциированный с Видом оплаты найден, то возможно таких договоров (и Видов оплат) много, // попытаемся усилить отбор доп.параметрами. // Если в этом случае договор не будет найден, то восстановим результаы предыдущего поиска. @@ -5525,8 +5622,8 @@ КонецЕсли; КонецЕсли; - ЭтоСБП = НазначениеПлатежаУказываетНаСБП - Или Не (НазначениеПлатежаУказываетНаЭквайринг Или НашлиВидОплатыПоПроцентуКомиссии); + ЭтоСБП = Не ОплатаПоQRКодуЦР И (НазначениеПлатежаУказываетНаСБП + Или Не (НазначениеПлатежаУказываетНаЭквайринг Или НашлиВидОплатыПоПроцентуКомиссии)); // Если Результат.ХозяйственнаяОперация.Свойство("ВидОплаты") // И ЗначениеЗаполнено(Результат.ХозяйственнаяОперация.ВидОплаты) Тогда // ДанныеВидаОплаты = ОбщегоНазначения.ЗначенияРеквизитовОбъекта( @@ -5635,7 +5732,7 @@ КонецЕсли; Если НазначениеПлатежаУказываетНаВозврат(Параметры.Операция) - Или ВидОперацииЦР = БанковскиеПравила.ОперацияB2C() Тогда + Или ВидОперацииЦР = ЦифровойРубль.ОперацияB2C() Тогда Возврат НовыйРезультатОпределенияХозяйственнойОперации(); КонецЕсли; КонецЕсли; @@ -6141,10 +6238,8 @@ КонецЕсли; ЭтоВыпискаПоСчетуЦифровогоРубля = Параметры.ВладелецСчета.БанковскийСчет = Параметры.ВладелецСчета.ЦифровойКошелек; - ЭтоПереводСредствЦР = ЭтоВыпискаПоСчетуЦифровогоРубля - // Перевод между счетами - И (ВидОперацииЦР = БанковскиеПравила.ОперацияDCBU() // Пополнение ЦР (банковский счет -> ЦР) - Или ВидОперацииЦР = БанковскиеПравила.ОперацияDCSE()); // Вывод средств (банковский счет <- ЦР) + ЭтоПереводСредствЦР = ВидОперацииЦР = ЦифровойРубль.ОперацияDCBU() // Пополнение ЦР (банковский счет -> ЦР) + Или ВидОперацииЦР = ЦифровойРубль.ОперацияDCSE(); // Вывод средств (банковский счет <- ЦР) ЭтоОперацияСЦифровымКошельком = Не ЭтоВыпискаПоСчетуЦифровогоРубля И ЭтоОперацияСЦифровымКошельком(Параметры.Операция); @@ -7128,9 +7223,9 @@ // и DCRF (Возврат цифровой валюты) в формате нет детального описания. МассивНеподерживаемыхОпераций = Новый Массив; - МассивНеподерживаемыхОпераций.Добавить(БанковскиеПравила.ОперацияDCRF()); - МассивНеподерживаемыхОпераций.Добавить(БанковскиеПравила.ОперацияOOPN()); - МассивНеподерживаемыхОпераций.Добавить(БанковскиеПравила.ОперацияOPTR()); + МассивНеподерживаемыхОпераций.Добавить(ЦифровойРубль.ОперацияDCRF()); + МассивНеподерживаемыхОпераций.Добавить(ЦифровойРубль.ОперацияOOPN()); + МассивНеподерживаемыхОпераций.Добавить(ЦифровойРубль.ОперацияOPTR()); ЭтоПоддерживаемаяОперация = МассивНеподерживаемыхОпераций.Найти(ВидОперации) = Неопределено; @@ -7138,6 +7233,31 @@ КонецФункции +Процедура ОчиститьИдентификаторыЦРНеСоответствующиеЦБ(Параметры, СторонаКонтрагента) + + МассивСхем = Новый Массив; + МассивСхем.Добавить("PAM"); + МассивСхем.Добавить("DBAN"); + + МассивКУдалению = Новый Массив; + МассивИдентификаторов = Параметры.Операция[СторонаКонтрагента + "Идентификаторы"]; + Для Индекс = 0 По МассивИдентификаторов.ВГраница() Цикл + Идентификатор = МассивИдентификаторов[Индекс]; + Для каждого Схема Из МассивСхем Цикл + Если СтрНачинаетсяС(Идентификатор, Схема) Тогда + МассивКУдалению.Добавить(Индекс); + КонецЕсли; + КонецЦикла; + КонецЦикла; + + КоличествоКУдалению = МассивКУдалению.Количество(); + Для Счетчик = 1 По КоличествоКУдалению Цикл + ИндексКУдалению = МассивКУдалению[КоличествоКУдалению - Счетчик]; + МассивИдентификаторов.Удалить(ИндексКУдалению); + КонецЦикла; + +КонецПроцедуры + #КонецОбласти Функция ДопАналитикаВидовОпераций() @@ -7356,9 +7476,14 @@ Функция НайтиДоговорПоВидуОперации(ХозяйственнаяОперация, Параметры, ВидОперации, ОтборДоговоров = Неопределено) - ЭтоУслугиБанкаПоЭквайрингу = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Параметры.Операция.ДополнительныеСвойства, - "ЭтоУслугиБанкаПоЭквайрингу", Ложь); - ЭтоУслугиБанкаПоЭквайрингу = Ложь; // Данный фунционал в УНФ реализован иначе + ЭтоУслугиБанкаПоЭквайрингу = Ложь; + // Данный фунционал в УНФ реализован иначе + //Если Параметры.Операция.Владелец().Колонки.Найти("ДополнтельныеСвойства") <> Неопределено Тогда + // ЭтоУслугиБанкаПоЭквайрингу = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры( + // Параметры.Операция.ДополнительныеСвойства, "ЭтоУслугиБанкаПоЭквайрингу", Ложь); + //КонецЕсли; + // УНФ + Если ЭтоУслугиБанкаПоЭквайрингу Тогда ВидыДоговоров = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Перечисления.ВидыДоговоров.СПоставщиком); Иначе @@ -8265,9 +8390,9 @@ КонецЕсли; НомерБанковскогоСчетаКонтрагента = Операция.НомерСчетаКонтрагента; - ЭтоЦифровойСчет = БанковскиеСчетаСервер.ЭтоИдентификаторЦифровогоСчета(НомерБанковскогоСчетаКонтрагента) - Или Операция.ПлательщикРеквизиты.Свойство("РасчСчет") - И БанковскиеСчетаСервер.ЭтоИдентификаторЦифровогоСчета(Операция.ПлательщикРеквизиты.РасчСчет); + ИдентификаторЦифровогоСчетаКонтрагента = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры( + Операция.ПлательщикРеквизиты, "ИдентификаторЦифровогоСчета", ""); + ЭтоЦифровойСчет = БанковскиеСчетаСервер.ЭтоИдентификаторЦифровогоСчета(ИдентификаторЦифровогоСчетаКонтрагента); ОперацииПоКлючуПустойСчет = Неопределено; Если ЭтоЦифровойСчет Тогда @@ -8276,10 +8401,6 @@ Операция.НомерДокумента, "", Истина); - // В платежках можно включать в ключ номер счета, но в строках выписки - нет. - // Потому что контрагент в созданных документах - это не достаточно надежный признак для поиска документов. - // На него надо опираться, но искать и документы с другими контрагентами (с меньшим приоритетом). - // Например, потому что пользователь может указать "сводного контрагента" - т.е. не такого, как в файлах выписки. ОперацииПоКлючуПустойСчет = ОперацииДляПоискаДокументов[КлючПоискаПустогоДокумента]; Если ОперацииПоКлючуПустойСчет = Неопределено Тогда @@ -8288,15 +8409,23 @@ КонецЕсли; КонецЕсли; - КлючПоиска = КлючПоискаПлатежногоПоручения( - Операция.ДатаДокумента, - Операция.НомерДокумента, - НомерБанковскогоСчетаКонтрагента, - ЭтоЦифровойСчет); - // В платежках можно включать в ключ номер счета, но в строках выписки - нет. - // Потому что контрагент в созданных документах - это не достаточно надежный признак для поиска документов. - // На него надо опираться, но искать и документы с другими контрагентами (с меньшим приоритетом). - // Например, потому что пользователь может указать "сводного контрагента" - т.е. не такого, как в файлах выписки. + Если ЭтоЦифровойСчет Тогда + КлючПоиска = КлючПоискаПлатежногоПоручения( + Операция.ДатаДокумента, + Операция.НомерДокумента, + ИдентификаторЦифровогоСчетаКонтрагента, + ЭтоЦифровойСчет); + Иначе + КлючПоиска = КлючПоискаПлатежногоПоручения( + Операция.ДатаДокумента, + Операция.НомерДокумента, + НомерБанковскогоСчетаКонтрагента); + КонецЕсли; + + // В платежках можно включать в ключ номер счета, но в строках выписки - нет. + // Потому что контрагент в созданных документах - это не достаточно надежный признак для поиска документов. + // На него надо опираться, но искать и документы с другими контрагентами (с меньшим приоритетом). + // Например, потому что пользователь может указать "сводного контрагента" - т.е. не такого, как в файлах выписки. ОперацииПоКлючу = ОперацииДляПоискаДокументов[КлючПоиска]; Если ОперацииПоКлючу = Неопределено Тогда @@ -8654,6 +8783,7 @@ | Документы.СчетКонтрагента КАК СчетКонтрагента, | ЕСТЬNULL(Документы.Контрагент.ИНН, """") КАК ИННКонтрагента, | ЕСТЬNULL(Документы.СчетКонтрагента.НомерСчета, """") КАК НомерСчетаКонтрагента, + | ЕСТЬNULL(Документы.СчетКонтрагента.ИдентификаторЦифровогоСчета, """") КАК ИдентификаторЦифровогоСчетаКонтрагента, | ИСТИНА КАК НетОснованияПлатежноеПоручение, | Документы.ДополнительныеРеквизиты.( | Свойство КАК Свойство, @@ -8699,6 +8829,7 @@ | Документы.СчетКонтрагента КАК СчетКонтрагента, | ЕСТЬNULL(Документы.Контрагент.ИНН, """") КАК ИННКонтрагента, | ЕСТЬNULL(Документы.СчетКонтрагента.НомерСчета, """") КАК НомерСчетаКонтрагента, + | ЕСТЬNULL(Документы.СчетКонтрагента.ИдентификаторЦифровогоСчета, """") КАК ИдентификаторЦифровогоСчетаКонтрагента, | ПлатежноеПоручениеОснование.Ссылка ЕСТЬ NULL КАК НетОснованияПлатежноеПоручение, | Документы.ДополнительныеРеквизиты.( | Свойство КАК Свойство, @@ -8890,7 +9021,8 @@ КонецЕсли; ОценитьСоответствиеПоКритерию(Оценщик, Не ЗначениеЗаполнено(Выборка.ИННКонтрагента)); - ОценитьСоответствиеПоКритерию(Оценщик, Не ЗначениеЗаполнено(Выборка.НомерСчетаКонтрагента)); + ОценитьСоответствиеПоКритерию(Оценщик, Не ЗначениеЗаполнено(Выборка.НомерСчетаКонтрагента) + И Не ЗначениеЗаполнено(Выборка.ИдентификаторЦифровогоСчетаКонтрагента)); Соответствие.Приоритет = Оценщик.Приоритет; @@ -9550,6 +9682,12 @@ СтрокаСекции.Договор = ХозяйственнаяОперация.ДоговорКонтрагента; СтрокаСекции.ДоговорНеНайденКартинка = -1; КонецЕсли; + + Если ХозяйственнаяОперация.Свойство("ВидОплаты") + И ЗначениеЗаполнено(ХозяйственнаяОперация.ВидОплаты) + И СтрокаСекции.ЭквайринговыйТерминал <> ХозяйственнаяОперация.ВидОплаты Тогда + СтрокаСекции.ЭквайринговыйТерминал = ХозяйственнаяОперация.ВидОплаты; + КонецЕсли; КонецЕсли; СтрокаИзмененныхРеквизитов = ""; @@ -10395,8 +10533,8 @@ ТаблицаПоступило = Выписка.Операции.Скопировать(СтруктураПоискаПоступило); НеоплаченныеСтатусы = Новый Массив; - НеоплаченныеСтатусы.Добавить(Перечисления.СтатусОплатыСчета.НеОплачен); - НеоплаченныеСтатусы.Добавить(Перечисления.СтатусОплатыСчета.ОплаченЧастично); +// НеоплаченныеСтатусы.Добавить(Перечисления.СтатусОплатыСчета.НеОплачен); +// НеоплаченныеСтатусы.Добавить(Перечисления.СтатусОплатыСчета.ОплаченЧастично); РеквизитыПокупателей = РеквизитыПокупателей(РаспознаннаяВыписка); Если РеквизитыПокупателей.Количество() = 0 Тогда @@ -11260,6 +11398,268 @@ КонецФункции +Функция НазначениеПлатежаУказываетНаЭквайрингФНС(Операция) + + КлючевыеФразы = Новый Массив; + + КлючевыеФразы.Добавить(НСтр("ru = 'зачисление средств по терминалам эквайр'")); + КлючевыеФразы.Добавить(НСтр("ru = 'возмещение средств по услуге эквайринга по реестру опер'")); + КлючевыеФразы.Добавить(НСтр("ru = 'удержание средств по услуге интернет-эквайринга по реестру опер'")); + КлючевыеФразы.Добавить( + НСтр("ru = 'зачисление денежных средств по договору об обслуживании держателей платежных карт по терминал'")); + + // "перевод средств по договору № ИЭ-" и "по реестру операций от" и "сумма комиссии" + Фраза = Новый Массив; // исключил указание комиссии, т.к. в качестве эквайера может выступать не только банк + Фраза.Добавить(НСтр("ru = 'перевод средств по договору'")); + Фраза.Добавить(НСтр("ru = 'иэ'")); + Фраза.Добавить(НСтр("ru = 'по реестру операций'")); + ДобавитьПравилоПроверкиФразы(КлючевыеФразы, Фраза, "СловаВЛюбомПорядке"); + + // "перевод средств по договору" и "(FOLDS) по реестру операций от" и "сумма комиссии" + Фраза = Новый Массив; + Фраза.Добавить(НСтр("ru = 'перевод средств по договору'")); + Фраза.Добавить(НСтр("ru = 'folds'")); + Фраза.Добавить(НСтр("ru = 'по реестру опер'")); + Фраза.Добавить(НСтр("ru = 'сумма комис'")); + ДобавитьПравилоПроверкиФразы(КлючевыеФразы, Фраза, "СловаВЛюбомПорядке"); + + // "зачисление средств по операциям эквайринга. мерчант №" и "дата реестра" и "комиссия" и "возврат покупки" + Фраза = Новый Массив; + Фраза.Добавить(НСтр("ru = 'зачисление средств по операциям эквайринга'")); + Фраза.Добавить(НСтр("ru = 'мерчант'")); + Фраза.Добавить(НСтр("ru = 'дата реестра'")); + Фраза.Добавить(НСтр("ru = 'комиссия'")); + Фраза.Добавить(НСтр("ru = 'возврат покупки'")); + ДобавитьПравилоПроверкиФразы(КлючевыеФразы, Фраза, "СловаВЛюбомПорядке"); + + // "зачисление средств по операциям с МБК (на основании реестров платежей). мерчант №" и "дата реестра" и "комиссия" + // и "возврат покупки" + Фраза = Новый Массив; + Фраза.Добавить(НСтр("ru = 'зачисление средств по операциям'")); + Фраза.Добавить(НСтр("ru = 'МБК'")); // аббревиатуру указываем заглавными, чтобы проверять на точное соответствие + Фраза.Добавить(НСтр("ru = 'на основании реестров платежей'")); + Фраза.Добавить(НСтр("ru = 'мерчант'")); + Фраза.Добавить(НСтр("ru = 'дата реестра'")); + Фраза.Добавить(НСтр("ru = 'комиссия'")); + Фраза.Добавить(НСтр("ru = 'возврат покупки'")); + ДобавитьПравилоПроверкиФразы(КлючевыеФразы, Фраза, "СловаВЛюбомПорядке"); + + // "возмещение по торговому эквайрингу мерчант" и "комиссия" и "терминал" и "возврат покупки" + Фраза = Новый Массив; + Фраза.Добавить(НСтр("ru = 'возмещение по торговому эквайрингу мерчант'")); + Фраза.Добавить(НСтр("ru = 'комиссия'")); + Фраза.Добавить(НСтр("ru = 'терминал'")); + Фраза.Добавить(НСтр("ru = 'возврат покупки'")); + ДобавитьПравилоПроверкиФразы(КлючевыеФразы, Фраза, "СловаВЛюбомПорядке"); + + // "оплата товаров и услуг по ТСТ" и "реестр от" и "комиссия" и "возврат покупки по ТСТ" + Фраза = Новый Массив; + Фраза.Добавить(НСтр("ru = 'оплата товаров и услуг'")); + Фраза.Добавить(НСтр("ru = 'реестр'")); + Фраза.Добавить(НСтр("ru = 'комиссия'")); + Фраза.Добавить(НСтр("ru = 'ТСТ'")); // аббревиатуру указываем заглавными, чтобы проверять на точное соответствие + Фраза.Добавить(НСтр("ru = 'возврат покупки'")); + ДобавитьПравилоПроверкиФразы(КлючевыеФразы, Фраза, "СловаВЛюбомПорядке"); + + // "оплата товаров и услуг по банковским картам (МПК) согласно реестра торг. операций. кол-во операций:" + // и "удержано по операциям возврата:" и "сумма комиссии" + Фраза = Новый Массив; + Фраза.Добавить(НСтр("ru = 'оплата товаров и услуг по банковским картам'")); + Фраза.Добавить(НСтр("ru = 'согласно реестра торг'")); + Фраза.Добавить(НСтр("ru = 'кол-во'")); + Фраза.Добавить(НСтр("ru = 'операций'")); + Фраза.Добавить(НСтр("ru = 'МПК'")); // аббревиатуру указываем заглавными, чтобы проверять на точное соответствие + Фраза.Добавить(НСтр("ru = 'удержано по операциям возврата'")); + Фраза.Добавить(НСтр("ru = 'сумма комиссии'")); + ДобавитьПравилоПроверкиФразы(КлючевыеФразы, Фраза, "СловаВЛюбомПорядке"); + + // эквайринг за" и "комиссия" и "возврат:" и "возврат др.ТСТ:" и "реестр" + Фраза = Новый Массив; + Фраза.Добавить(НСтр("ru = 'эквайринг'")); + Фраза.Добавить(НСтр("ru = 'комиссия'")); + Фраза.Добавить(НСтр("ru = 'возврат'")); + Фраза.Добавить(НСтр("ru = 'ТСТ'")); // аббревиатуру указываем заглавными, чтобы проверять на точное соответствие + Фраза.Добавить(НСтр("ru = 'реестр'")); + ДобавитьПравилоПроверкиФразы(КлючевыеФразы, Фраза, "СловаВЛюбомПорядке"); + + // "эквайринг, по мерчанту" и "удержано ком" и "возвр" + Фраза = Новый Массив; + Фраза.Добавить(НСтр("ru = 'эквайринг'")); + Фраза.Добавить(НСтр("ru = 'по мерчанту'")); + Фраза.Добавить(НСтр("ru = 'удержано ком'")); + Фраза.Добавить(НСтр("ru = 'возвр'")); + ДобавитьПравилоПроверкиФразы(КлючевыеФразы, Фраза, "СловаВЛюбомПорядке"); + + // "по принятым платежам с" и "в т.ч.усл.банка:" и "согласно эл.реестру" + Фраза = Новый Массив; + Фраза.Добавить(НСтр("ru = 'по принятым платежам'")); + Фраза.Добавить(НСтр("ru = 'усл'")); + Фраза.Добавить(НСтр("ru = 'банка'")); + Фраза.Добавить(НСтр("ru = 'согласно'")); + Фраза.Добавить(НСтр("ru = 'реестру'")); + ДобавитьПравилоПроверкиФразы(КлючевыеФразы, Фраза, "СловаВЛюбомПорядке"); + + // "терминал №" и "дата операций" и "комиссия банка" + Фраза = Новый Массив; + Фраза.Добавить(НСтр("ru = 'терминал'")); + Фраза.Добавить(НСтр("ru = 'дата операций'")); + Фраза.Добавить(НСтр("ru = 'комиссия банка'")); + ДобавитьПравилоПроверкиФразы(КлючевыеФразы, Фраза, "СловаВЛюбомПорядке"); + + // "возмещение ден.ср-в ТСП за" и "комиссия банка" + Фраза = Новый Массив; + Фраза.Добавить(НСтр("ru = 'возмещение'")); + Фраза.Добавить(НСтр("ru = 'ден'")); + Фраза.Добавить(НСтр("ru = 'ср-в'")); + Фраза.Добавить(НСтр("ru = 'ТСП'")); // аббревиатуру указываем заглавными, чтобы проверять на точное соответствие + Фраза.Добавить(НСтр("ru = 'комиссия банка'")); + ДобавитьПравилоПроверкиФразы(КлючевыеФразы, Фраза, "СловаВЛюбомПорядке"); + + // "сумма возмещения" и "по договору №" и "(TTR за" и "комиссия" + Фраза = Новый Массив; + Фраза.Добавить(НСтр("ru = 'сумма возмещения'")); + Фраза.Добавить(НСтр("ru = 'по договору'")); + Фраза.Добавить(НСтр("ru = 'ttr'")); + Фраза.Добавить(НСтр("ru = 'комиссия'")); + ДобавитьПравилоПроверкиФразы(КлючевыеФразы, Фраза, "СловаВЛюбомПорядке"); + + // "возмещение ср-в по операциям эквайринга за" и "согласно договору" и "комиссия по операциям" + Фраза = Новый Массив; + Фраза.Добавить(НСтр("ru = 'возмещение ср-в по операциям эквайринга'")); + Фраза.Добавить(НСтр("ru = 'согласно договору'")); + Фраза.Добавить(НСтр("ru = 'комиссия по операциям'")); + ДобавитьПравилоПроверкиФразы(КлючевыеФразы, Фраза, "СловаВЛюбомПорядке"); + + // "возмещение ден.ср-в по дог.экв." и "оборот:" и "комиссия" + Фраза = Новый Массив; + Фраза.Добавить(НСтр("ru = 'возмещение ден'")); + Фраза.Добавить(НСтр("ru = 'ср-в по дог'")); + Фраза.Добавить(НСтр("ru = 'экв'")); + Фраза.Добавить(НСтр("ru = 'оборот'")); + Фраза.Добавить(НСтр("ru = 'комиссия'")); + ДобавитьПравилоПроверкиФразы(КлючевыеФразы, Фраза, "СловаВЛюбомПорядке"); + + // "общая сумма к возмещению" и "комиссия за осущ.расч." и "RURвозмещение ден.ср-в по дог.экв." и "оборот:" + // и "комиссия:" + Фраза = Новый Массив; + Фраза.Добавить(НСтр("ru = 'общая сумма к возмещению'")); + Фраза.Добавить(НСтр("ru = 'комиссия за осущ'")); + Фраза.Добавить(НСтр("ru = 'расч'")); + Фраза.Добавить(НСтр("ru = 'RURвозмещение ден'")); + Фраза.Добавить(НСтр("ru = 'ср-в по дог'")); + Фраза.Добавить(НСтр("ru = 'экв'")); + Фраза.Добавить(НСтр("ru = 'оборот'")); + Фраза.Добавить(НСтр("ru = 'комиссия'")); + ДобавитьПравилоПроверкиФразы(КлючевыеФразы, Фраза, "СловаВЛюбомПорядке"); + + // "возм.по дог.экв.N" и "об.:" и "ком.:" + Фраза = Новый Массив; + Фраза.Добавить(НСтр("ru = 'возм'")); + Фраза.Добавить(НСтр("ru = 'по дог'")); + Фраза.Добавить(НСтр("ru = 'экв'")); + Фраза.Добавить(НСтр("ru = 'об'")); + Фраза.Добавить(НСтр("ru = 'ком'")); + ДобавитьПравилоПроверкиФразы(КлючевыеФразы, Фраза, "СловаВЛюбомПорядке"); + + // "перечисление по договору №" и "с ТСП ИНН" и "комиссия банка" + // "перечисление по договору с ТСП" и "комиссия банка" + Фраза = Новый Массив; + Фраза.Добавить(НСтр("ru = 'перечисление по договору'")); + Фраза.Добавить(НСтр("ru = 'ТСП'")); // аббревиатуру указываем заглавными, чтобы проверять на точное соответствие + Фраза.Добавить(НСтр("ru = 'комиссия банка'")); + ДобавитьПравилоПроверкиФразы(КлючевыеФразы, Фраза, "СловаВЛюбомПорядке"); + + // "расчеты по дог." и "за период с" и "сумма оплат" и "сумма возвратов" и "сумма отмены возвратов" и "комиссия" + Фраза = Новый Массив; + Фраза.Добавить(НСтр("ru = 'расчеты по дог'")); + Фраза.Добавить(НСтр("ru = 'за период'")); + Фраза.Добавить(НСтр("ru = 'сумма'")); + Фраза.Добавить(НСтр("ru = 'оплат'")); + Фраза.Добавить(НСтр("ru = 'отмены'")); + Фраза.Добавить(НСтр("ru = 'возвратов'")); + Фраза.Добавить(НСтр("ru = 'комиссия'")); + ДобавитьПравилоПроверкиФразы(КлючевыеФразы, Фраза, "СловаВЛюбомПорядке"); + + // "возмещение по терминалам:" и "в т.ч. комиссия" + Фраза = Новый Массив; + Фраза.Добавить(НСтр("ru = 'возмещение по терминалам'")); + Фраза.Добавить(НСтр("ru = 'комиссия'")); + ДобавитьПравилоПроверкиФразы(КлючевыеФразы, Фраза, "СловаПоследовательно"); + + // "расч по дог. б/н опер." и "ком банка" + Фраза = Новый Массив; + Фраза.Добавить(НСтр("ru = 'расч по дог'")); + Фраза.Добавить(НСтр("ru = 'б/н опер'")); + Фраза.Добавить(НСтр("ru = 'ком банка'")); + ДобавитьПравилоПроверкиФразы(КлючевыеФразы, Фраза, "СловаВЛюбомПорядке"); + + // "возмещение по ТСО по сумме" и "сумма комиссии" и "сумма возмещения" и "дата расчета" и "договор" + Фраза = Новый Массив; + Фраза.Добавить(НСтр("ru = 'возмещение'")); + Фраза.Добавить(НСтр("ru = 'ТСО'")); // аббревиатуру указываем заглавными, чтобы проверять на точное соответствие + Фраза.Добавить(НСтр("ru = 'сумм'")); + Фраза.Добавить(НСтр("ru = 'комиссии'")); + Фраза.Добавить(НСтр("ru = 'возмещения'")); + Фраза.Добавить(НСтр("ru = 'дата расчета'")); + Фраза.Добавить(НСтр("ru = 'договор'")); + ДобавитьПравилоПроверкиФразы(КлючевыеФразы, Фраза, "СловаВЛюбомПорядке"); + + // "перечисление денежных средств по договору MRC/" и "комиссия" и "выплата за" + Фраза = Новый Массив; + Фраза.Добавить(НСтр("ru = 'перечисление денежных средств по договору'")); + Фраза.Добавить(НСтр("ru = 'MRC/'")); // аббревиатуру указываем заглавными, чтобы проверять на точное соответствие + Фраза.Добавить(НСтр("ru = 'комиссия'")); + Фраза.Добавить(НСтр("ru = 'выплата'")); + ДобавитьПравилоПроверкиФразы(КлючевыеФразы, Фраза, "СловаВЛюбомПорядке"); + + // "платежи по дог." и "принято" и "комиссия" и "удержана" + Фраза = Новый Массив; + Фраза.Добавить(НСтр("ru = 'платежи по дог'")); + Фраза.Добавить(НСтр("ru = 'принято'")); + Фраза.Добавить(НСтр("ru = 'комиссия'")); + Фраза.Добавить(НСтр("ru = 'удержана'")); + ДобавитьПравилоПроверкиФразы(КлючевыеФразы, Фраза, "СловаВЛюбомПорядке"); + + // "//реестр//" и "количество" и "перечисление денежных средств по договору" и "по реестру за" + Фраза = Новый Массив; + Фраза.Добавить(НСтр("ru = '//реестр//'")); + Фраза.Добавить(НСтр("ru = 'перечисление денежных средств по договору'")); + Фраза.Добавить(НСтр("ru = 'комиссия'")); + Фраза.Добавить(НСтр("ru = 'по реестру'")); + ДобавитьПравилоПроверкиФразы(КлючевыеФразы, Фраза, "СловаВЛюбомПорядке"); + + // "перечисл. ден.ср-в с уч. упл. комис." и "по дог.от" и "за пер. с" + Фраза = Новый Массив; + Фраза.Добавить(НСтр("ru = 'перечисл'")); + Фраза.Добавить(НСтр("ru = 'ден'")); + Фраза.Добавить(НСтр("ru = 'ср-в с уч'")); + Фраза.Добавить(НСтр("ru = 'упл'")); + Фраза.Добавить(НСтр("ru = 'комис'")); + Фраза.Добавить(НСтр("ru = 'по дог'")); + Фраза.Добавить(НСтр("ru = 'от'")); + Фраза.Добавить(НСтр("ru = 'за пер'")); + ДобавитьПравилоПроверкиФразы(КлючевыеФразы, Фраза, "СловаПоследовательно"); + + // "возврат денежных средств по эквайринговым операциям от" и "согласно договору" + Фраза = Новый Массив; + Фраза.Добавить(НСтр("ru = 'возврат денежных средств по эквайринговым операциям'")); + Фраза.Добавить(НСтр("ru = 'согласно договору'")); + ДобавитьПравилоПроверкиФразы(КлючевыеФразы, Фраза, "СловаВЛюбомПорядке"); + + // "расчеты по договору №" и "по операции" и "по мерчанту" + Фраза = Новый Массив; + Фраза.Добавить(НСтр("ru = 'платежи по дог'")); + Фраза.Добавить(НСтр("ru = 'принято'")); + Фраза.Добавить(НСтр("ru = 'комиссия'")); + Фраза.Добавить(НСтр("ru = 'удержана'")); + ДобавитьПравилоПроверкиФразы(КлючевыеФразы, Фраза, "СловаВЛюбомПорядке"); + + Результат = НайтиКлючевыеФразыВТекстеНазначения(КлючевыеФразы, Операция, "/-"); + + Возврат Результат; + +КонецФункции + Функция НазначениеПлатежаУказываетНаВзносВУставныйКапитал(Операция) // Ищем фразу "уставный капитал" в произвольном падеже, например, "уставном капитале". @@ -11346,58 +11746,67 @@ Или НазначениеПлатежаУказываетНаПеречислениеЗарплаты(Операция) Тогда Возврат Ложь; КонецЕсли; - + + // УНФ КлючевыеФразы = Новый Массив; - КлючевыеФразы.Добавить(НСтр("ru = 'самоз'")); Фраза = Новый Массив; - Фраза.Добавить(НСтр("ru = 'за'")); - Фраза.Добавить(НСтр("ru = 'услуг'")); - ДобавитьПравилоПроверкиФразы(КлючевыеФразы, Фраза, "СловаПодряд"); - - Фраза = Новый Массив; - Фраза.Добавить(НСтр("ru = 'за'")); - Фраза.Добавить(НСтр("ru = 'товар'")); - ДобавитьПравилоПроверкиФразы(КлючевыеФразы, Фраза, "СловаПодряд"); - - Фраза = Новый Массив; - Фраза.Добавить(НСтр("ru = 'за'")); - Фраза.Добавить(НСтр("ru = 'работ'")); - ДобавитьПравилоПроверкиФразы(КлючевыеФразы, Фраза, "СловаПодряд"); - - Фраза = Новый Массив; - Фраза.Добавить(НСтр("ru = 'по'")); - Фраза.Добавить(НСтр("ru = 'счет'")); - ДобавитьПравилоПроверкиФразы(КлючевыеФразы, Фраза, "СловаПодряд"); - - Фраза = Новый Массив; - Фраза.Добавить(НСтр("ru = 'опл'")); - Фраза.Добавить(НСтр("ru = 'по'")); - Фраза.Добавить(НСтр("ru = 'дог'")); - ДобавитьПравилоПроверкиФразы(КлючевыеФразы, Фраза, "СловаПодряд"); - - Фраза = Новый Массив; - Фраза.Добавить(НСтр("ru = 'консул'")); - Фраза.Добавить(НСтр("ru = 'усл'")); - ДобавитьПравилоПроверкиФразы(КлючевыеФразы, Фраза, "СловаПодряд"); - - Фраза = Новый Массив; - Фраза.Добавить(НСтр("ru = 'опл'")); - Фраза.Добавить(НСтр("ru = 'по'")); - Фраза.Добавить(НСтр("ru = 'сч'")); + Фраза.Добавить(НСтр("ru = 'оплат'")); + Фраза.Добавить(НСтр("ru = 'самозан'")); ДобавитьПравилоПроверкиФразы(КлючевыеФразы, Фраза, "СловаПоследовательно"); + //УНФ - Фраза = Новый Массив; - Фраза.Добавить(НСтр("ru = 'опл'")); - Фраза.Добавить(НСтр("ru = 'за'")); - Фраза.Добавить(НСтр("ru = 'усл'")); - ДобавитьПравилоПроверкиФразы(КлючевыеФразы, Фраза, "СловаПоследовательно"); - - Фраза = Новый Массив; - Фраза.Добавить(НСтр("ru = 'опл'")); - Фраза.Добавить(НСтр("ru = 'за'")); - Фраза.Добавить(НСтр("ru = 'тов'")); - ДобавитьПравилоПроверкиФразы(КлючевыеФразы, Фраза, "СловаПоследовательно"); +// КлючевыеФразы = Новый Массив; +// КлючевыеФразы.Добавить(НСтр("ru = 'самоз'")); +// +// Фраза = Новый Массив; +// Фраза.Добавить(НСтр("ru = 'за'")); +// Фраза.Добавить(НСтр("ru = 'услуг'")); +// ДобавитьПравилоПроверкиФразы(КлючевыеФразы, Фраза, "СловаПодряд"); +// +// Фраза = Новый Массив; +// Фраза.Добавить(НСтр("ru = 'за'")); +// Фраза.Добавить(НСтр("ru = 'товар'")); +// ДобавитьПравилоПроверкиФразы(КлючевыеФразы, Фраза, "СловаПодряд"); +// +// Фраза = Новый Массив; +// Фраза.Добавить(НСтр("ru = 'за'")); +// Фраза.Добавить(НСтр("ru = 'работ'")); +// ДобавитьПравилоПроверкиФразы(КлючевыеФразы, Фраза, "СловаПодряд"); +// +// Фраза = Новый Массив; +// Фраза.Добавить(НСтр("ru = 'по'")); +// Фраза.Добавить(НСтр("ru = 'счет'")); +// ДобавитьПравилоПроверкиФразы(КлючевыеФразы, Фраза, "СловаПодряд"); +// +// Фраза = Новый Массив; +// Фраза.Добавить(НСтр("ru = 'опл'")); +// Фраза.Добавить(НСтр("ru = 'по'")); +// Фраза.Добавить(НСтр("ru = 'дог'")); +// ДобавитьПравилоПроверкиФразы(КлючевыеФразы, Фраза, "СловаПодряд"); +// +// Фраза = Новый Массив; +// Фраза.Добавить(НСтр("ru = 'консул'")); +// Фраза.Добавить(НСтр("ru = 'усл'")); +// ДобавитьПравилоПроверкиФразы(КлючевыеФразы, Фраза, "СловаПодряд"); +// +// Фраза = Новый Массив; +// Фраза.Добавить(НСтр("ru = 'опл'")); +// Фраза.Добавить(НСтр("ru = 'по'")); +// Фраза.Добавить(НСтр("ru = 'сч'")); +// ДобавитьПравилоПроверкиФразы(КлючевыеФразы, Фраза, "СловаПоследовательно"); +// +// Фраза = Новый Массив; +// Фраза.Добавить(НСтр("ru = 'опл'")); +// Фраза.Добавить(НСтр("ru = 'за'")); +// Фраза.Добавить(НСтр("ru = 'усл'")); +// ДобавитьПравилоПроверкиФразы(КлючевыеФразы, Фраза, "СловаПоследовательно"); +// +// Фраза = Новый Массив; +// Фраза.Добавить(НСтр("ru = 'опл'")); +// Фраза.Добавить(НСтр("ru = 'за'")); +// Фраза.Добавить(НСтр("ru = 'тов'")); +// ДобавитьПравилоПроверкиФразы(КлючевыеФразы, Фраза, "СловаПоследовательно"); Результат = НайтиКлючевыеФразыВТекстеНазначения(КлючевыеФразы, Операция); @@ -11469,6 +11878,10 @@ Фраза.Добавить(НСтр("ru = 'воз-т'")); ДобавитьПравилоПроверкиФразы(КлючевыеФразы, Фраза, "СловаПодряд", 2); + Фраза = Новый Массив; + Фраза.Добавить(НСтр("ru = 'возв-т'")); + ДобавитьПравилоПроверкиФразы(КлючевыеФразы, Фраза, "СловаПодряд", 2); + Результат = НайтиКлючевыеФразыВТекстеНазначения(КлючевыеФразы, Операция, "-"); Возврат Результат; @@ -11881,7 +12294,11 @@ ПозитивныйПоиск = Истина; Если ТипЗнч(КлючеваяФраза) = Тип("Строка") Тогда Правило = "СловаПодряд"; - СловаФразы = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(КлючеваяФраза); + Если СтрНайти(КлючеваяФраза, " ") > 0 Тогда + СловаФразы = СтрРазделить(КлючеваяФраза, " "); + Иначе + СловаФразы = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(КлючеваяФраза); + КонецЕсли; ИначеЕсли ТипЗнч(КлючеваяФраза) = Тип("Структура") Тогда Для Каждого КлючИЗначение Из КлючеваяФраза Цикл Если КлючИЗначение.Ключ = "ПроверитьСловВНачалеКоличество" Тогда @@ -12188,8 +12605,10 @@ ТаблицаШаблонов.Добавить(НСтр("ru = 'комиссия по операциям'")); ТаблицаШаблонов.Добавить(НСтр("ru = 'ком-сия по операциям'")); ТаблицаШаблонов.Добавить(НСтр("ru = 'комиссия:'")); + ТаблицаШаблонов.Добавить(НСтр("ru = 'комиссия-оплата'")); ТаблицаШаблонов.Добавить(НСтр("ru = 'комиссия'")); ТаблицаШаблонов.Добавить(НСтр("ru = 'комиссии'")); + ТаблицаШаблонов.Добавить(НСтр("ru = 'комиссии за прием платежей'")); ТаблицаШаблонов.Добавить(НСтр("ru = 'ком-сия'")); ТаблицаШаблонов.Добавить(НСтр("ru = 'с учетом взаимозачет. вознагр.'")); ТаблицаШаблонов.Добавить(НСтр("ru = 'комис.'")); @@ -12294,6 +12713,10 @@ СтрокаШаблона.ОблагаетсяНДС = Истина; СтрокаШаблона.НДСВСумме = Истина; + СтрокаШаблона = ТаблицаШаблонов.Добавить(); + СтрокаШаблона.ТекстШаблона = НСтр("ru = 'кроме того ндс'"); // НДС "сверху" + СтрокаШаблона.ОблагаетсяНДС = Истина; + // Должен быть последним в таблице, чтобы можно было проверить предыдущие шаблоны. СтрокаШаблона = ТаблицаШаблонов.Добавить(); СтрокаШаблона.ТекстШаблона = НСтр("ru = 'ндс'"); @@ -12451,9 +12874,9 @@ КонецПроцедуры -Функция ПривестиТекстНазначения(ИсходноеНазначениеПлатежа) +Функция ПривестиТекстНазначения(Знач ИсходноеНазначениеПлатежа, УбратьСкобку = Ложь) - ЗаменяемыеСимволы = "()" + ЗаменяемыеСимволы = ?(УбратьСкобку, "", "(") + ")" + Символы.НПП + Символы.ПС + Символы.ВК @@ -12556,6 +12979,38 @@ КонецЕсли; КонецЦикла; + Если Результат <> Неопределено И ЗначениеЗаполнено(Результат.ТекстПосле) Тогда + ФорматЧисло = Новый ОписаниеТипов("Число"); + ТекстПосле = Результат.ТекстПосле; + ПозицияСкобки = СтрНайти(ТекстПосле, "("); + ОбщаяКомиссия = "0"; + Если ПозицияСкобки > 0 Тогда + ОбщаяКомиссия = Лев(ТекстПосле, ПозицияСкобки - 1); + ТекстПосле = Сред(ТекстПосле, ПозицияСкобки + 1); + КонецЕсли; + + Если ОбщаяКомиссия <> "0" Тогда + РезультатКомиссия = ВыделитьКомиссииНДСИБезНДС(ТекстПосле); + Если ЗначениеЗаполнено(РезультатКомиссия.СуммаСНДС) И ЗначениеЗаполнено(РезультатКомиссия.СуммаБезНДС) Тогда + СуммаКомиссии = ФорматЧисло.ПривестиЗначение(СтрЗаменить(ОбщаяКомиссия, " ", "")); + СуммаСНДС = ФорматЧисло.ПривестиЗначение(СтрЗаменить(РезультатКомиссия.СуммаСНДС, " ", "")); + СуммаБезНДС = ФорматЧисло.ПривестиЗначение(СтрЗаменить(РезультатКомиссия.СуммаБезНДС, " ", "")); + Если СуммаКомиссии = СуммаСНДС + СуммаБезНДС Тогда + Результат.ТекстПосле = ОбщаяКомиссия; + Возврат Результат; + КонецЕсли; + КонецЕсли; + КонецЕсли; + + Результат.ТекстПосле = СтрЗаменить(Результат.ТекстПосле, "(", " "); + РезультатКомиссия = ВыделитьКомиссииНДСИБезНДС(Результат.ТекстПосле); + Если ЗначениеЗаполнено(РезультатКомиссия.СуммаСНДС) И ЗначениеЗаполнено(РезультатКомиссия.СуммаБезНДС) Тогда + Результат.ТекстПосле = СтрЗаменить(Результат.ТекстПосле, + СтрШаблон(НСтр("ru = 'и %1'"), РезультатКомиссия.СуммаБезНДС), + СтрШаблон(НСтр("ru = 'и комиссия %1'"), РезультатКомиссия.СуммаБезНДС)); + КонецЕсли; + КонецЕсли; + Возврат Результат; КонецФункции @@ -12741,6 +13196,46 @@ КонецФункции +Функция ВыделитьКомиссииНДСИБезНДС(ТекстПосле) + + Результат = Новый Структура("СуммаСНДС, СуммаБезНДС"); + + // Проверим, что в тексте переданы 2 комиссии - с НДС и без НДС и поправим текст для дальнейшей обработки. + РегулярноеВыражениеВТЧНДС = "(\d+(?:[.,]\d+)?)(?=[\s(]*в т\.ч\.)"; + КомиссияВТЧНДС = СтрНайтиПоРегулярномуВыражению(ТекстПосле, РегулярноеВыражениеВТЧНДС); + Если Не ЗначениеЗаполнено(КомиссияВТЧНДС.Значение) Тогда + РегулярноеВыражениеВТЧНДС = "(\d+(?:[.,]\d+)?)(?=\s*\.\s*возврат покупки.*?в т\.ч\.)"; + КомиссияВТЧНДС = СтрНайтиПоРегулярномуВыражению(ТекстПосле, РегулярноеВыражениеВТЧНДС); + КонецЕсли; + + КомиссияБезНДС = СтрНайтиПоРегулярномуВыражению(ТекстПосле, "(\d+(?:[.,]\d+)?)(?=[\s(]*ндс не)"); + Если ЗначениеЗаполнено(КомиссияВТЧНДС.Значение) И ЗначениеЗаполнено(КомиссияБезНДС.Значение) Тогда + // Комиссия может быть с пробелами - разделителями групп. + + РегулярноеВыражениеВТЧНДС = СтрЗаменить(РегулярноеВыражениеВТЧНДС, + "(\d+(?:[.,]\d+)", "(\d{1,3}(?:\s\d{3})*(?:[.,]\d+)"); + КомиссияВТЧНДССПробелами = СтрНайтиПоРегулярномуВыражению(ТекстПосле, РегулярноеВыражениеВТЧНДС); + Если ЗначениеЗаполнено(КомиссияВТЧНДССПробелами.Значение) + И СтрДлина(СтрЗаменить(КомиссияВТЧНДССПробелами.Значение, " ", "")) > СтрДлина(КомиссияВТЧНДС.Значение) Тогда + Результат.СуммаСНДС = КомиссияВТЧНДССПробелами.Значение; + Иначе + Результат.СуммаСНДС = КомиссияВТЧНДС.Значение; + КонецЕсли; + + КомиссияСПробелами = СтрНайтиПоРегулярномуВыражению(ТекстПосле, + "(\d{1,3}(?:\s\d{3})*(?:[.,]\d+)?)\s*(?=[\s(]*ндс не)"); + Если ЗначениеЗаполнено(КомиссияСПробелами.Значение) + И СтрДлина(СтрЗаменить(КомиссияСПробелами.Значение, " ", "")) > СтрДлина(КомиссияБезНДС.Значение) Тогда + Результат.СуммаБезНДС = КомиссияСПробелами.Значение; + Иначе + Результат.СуммаБезНДС = КомиссияБезНДС.Значение; + КонецЕсли; + КонецЕсли; + + Возврат Результат; + +КонецФункции + #КонецОбласти Процедура ЗаполнитьДанныеВладелецСчета(ОписаниеВладельцаСчета, ОписаниеОрганизации, ОписаниеСчета = Неопределено) Экспорт @@ -12776,6 +13271,8 @@ ОписаниеВладельцаСчета.Организация, ВалютаРеглУчета, , Истина); Если БанковскиеСчетаЦифровые.Количество() > 0 Тогда ОписаниеВладельцаСчета.ЦифровойКошелек = БанковскиеСчетаЦифровые[0].Ссылка; + ОписаниеВладельцаСчета.ВидОплатыЦР = + Справочники.СпособыОплаты.СпособыОплатыЦР(ОписаниеВладельцаСчета.Организация); КонецЕсли; ОписаниеВладельцаСчета.СчетБанк = ОбщегоНазначения.ЗначениеРеквизитаОбъекта( ОписаниеВладельцаСчета.БанковскийСчет, "СчетУчета"); @@ -13688,6 +14185,7 @@ ДокументыКИмпорту.Колонки.Добавить("СчетКонтрагентаИсходный", Новый ОписаниеТипов("СправочникСсылка.БанковскиеСчета, Строка", Новый КвалификаторыСтроки(255))); ДокументыКИмпорту.Колонки.Добавить("НайденоСоответствиеНазначенийПлатежаИРеквизитовПлатежа", Новый ОписаниеТипов("Булево"));; + ДокументыКИмпорту.Колонки.Добавить("НайденоСоответствиеВИсторииРеквизитов", Новый ОписаниеТипов("Булево"));; ТаблицаНайденныхДокументов = Новый ТаблицаЗначений; ТаблицаНайденныхДокументов.Колонки.Добавить("Контрагент", Новый ОписаниеТипов("СправочникСсылка.Контрагенты")); @@ -13849,8 +14347,13 @@ // 1) Определим вид платежа: входящий или исходящий. ИсходящийПоРеквизитамВыписки = - ЗначениеЗаполнено(Операция.ПлательщикРеквизиты.РасчСчет) - И СтрНайти(Контекст.Идентификатор, Операция.ПлательщикРеквизиты.РасчСчет) > 0; + Операция.ПлательщикРеквизиты.Свойство("РасчСчет") + И ЗначениеЗаполнено(Операция.ПлательщикРеквизиты.РасчСчет) + И СтрНайти(Контекст.Идентификатор, Операция.ПлательщикРеквизиты.РасчСчет) > 0 + Или + Операция.ПлательщикРеквизиты.Свойство("ИдентификаторЦифровогоСчета") + И ЗначениеЗаполнено(Операция.ПлательщикРеквизиты.ИдентификаторЦифровогоСчета) + И СтрНайти(Контекст.Идентификатор, Операция.ПлательщикРеквизиты.ИдентификаторЦифровогоСчета) > 0; Если ЗначениеЗаполнено(Объект.БанковскийСчет) И Объект.БанковскийСчет.ПолучитьОбъект() = Неопределено Тогда ЭтоНовыйСчетДепозита = Истина; Исходящий = ИсходящийПоРеквизитамВыписки; @@ -16327,6 +16830,7 @@ КонецЕсли; Если СтруктураРеквизитов.ВидОперации <> Неопределено Тогда ДанныеСтроки.ВидОперации = СтруктураРеквизитов.ВидОперации; + ДанныеСтроки.НайденоСоответствиеВИсторииРеквизитов = Истина; КонецЕсли; Если СтруктураРеквизитов.СтатьяДДС <> Неопределено Тогда ДанныеСтроки.СтатьяДДС = СтруктураРеквизитов.СтатьяДДС; diff --git a/Конфигурация/CommonModules/ИдентификацияУчастниковБанковскихОпераций/Ext/Module.bsl b/Конфигурация/CommonModules/ИдентификацияУчастниковБанковскихОпераций/Ext/Module.bsl index d162d9a0d..06005be09 100644 --- a/Конфигурация/CommonModules/ИдентификацияУчастниковБанковскихОпераций/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ИдентификацияУчастниковБанковскихОпераций/Ext/Module.bsl @@ -674,6 +674,7 @@ Схемы.Добавить("TXID"); Схемы.Добавить("BBAN");// см. СхемаПрименяетсяОграниченно() Схемы.Добавить("IBAN"); + Схемы.Добавить("DBAN"); Схемы.Добавить("PNNM"); Схемы.Добавить("AIIN"); // Номер карты. КонецЕсли; @@ -1016,7 +1017,7 @@ КонецФункции -Функция ИдентификаторПоИдентификаторуЦифровогоРубля(УчастникиОпераций, НомерСчета, НомерСчетаЦифровой, БИК) Экспорт +Функция ИдентификаторПоИдентификаторуЦифровогоРубля(УчастникиОпераций, ИдентификаторЦифровогоСчета, НомерСчета, БИК) Экспорт // DBAN - digital BAN @@ -1024,20 +1025,20 @@ Возврат Неопределено; КонецЕсли; - ЦифровойСчет = БанковскиеСчетаСервер.ЭтоИдентификаторЦифровогоСчета(НомерСчета); + ЦифровойСчет = БанковскиеСчетаСервер.ЭтоИдентификаторЦифровогоСчета(ИдентификаторЦифровогоСчета); Если Не ЦифровойСчет Тогда Возврат Неопределено; КонецЕсли; Состав = Новый Структура; - Состав.Вставить("ИдентификаторЦифровогоСчета", НомерСчета); + Состав.Вставить("ИдентификаторЦифровогоСчета", ИдентификаторЦифровогоСчета); Состав.Вставить("БИК", БИК); - Состав.Вставить("НомерБанковскогоСчета", НомерСчетаЦифровой); + Состав.Вставить("НомерБанковскогоСчета", НомерСчета); Состав.Вставить("ЭтоЦифровойСчет", Истина); Состав.Вставить("СвязанныеСвойства", "ЭтоЦифровойСчет_ЭтоСчетКонтрагента"); // отобразим связь через "_" - Возврат УстановитьИдентификатор(УчастникиОпераций, "DBAN", НомерСчета, Состав, Истина, ""); + Возврат УстановитьИдентификатор(УчастникиОпераций, "DBAN", ИдентификаторЦифровогоСчета, Состав, Истина, ""); КонецФункции diff --git a/Конфигурация/CommonModules/Интеграция1СШтампСлужебный/Ext/Module.bsl b/Конфигурация/CommonModules/Интеграция1СШтампСлужебный/Ext/Module.bsl index c42aba638..d806e06ac 100644 --- a/Конфигурация/CommonModules/Интеграция1СШтампСлужебный/Ext/Module.bsl +++ b/Конфигурация/CommonModules/Интеграция1СШтампСлужебный/Ext/Module.bsl @@ -101,15 +101,15 @@ Результат = НовыйРезультатОбработкиДокумента(); // Создаем ссылку для загрузки файла - Ответ = СсылкаДляЗагрузки(СлужебнаяИнформацияЗапроса); + ОтветСервиса = СсылкаДляЗагрузки(СлужебнаяИнформацияЗапроса); - Если Ответ.Отказ Тогда + Если ОтветСервиса.Отказ Тогда Результат.ЕстьОшибки = Истина; - Результат.ИнформацияОбОшибках = Ответ.ТекстОшибки; + Результат.ИнформацияОбОшибках = ОтветСервиса; Возврат Результат; КонецЕсли; - URLДляЗагрузки = Ответ.URLРедиректа; + URLДляЗагрузки = ОтветСервиса.URLРедиректа; // Создаем задание в очередь в сервисе ОтветСервиса = РезультатВыполненияЗапросаСоздатьЗаданиеВСервисеНаУстановкуШтамповВДокумент( diff --git a/Конфигурация/CommonModules/ИнтеграцияShare/Ext/Module.bsl b/Конфигурация/CommonModules/ИнтеграцияShare/Ext/Module.bsl index 4634d28e8..9fddef6bd 100644 --- a/Конфигурация/CommonModules/ИнтеграцияShare/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ИнтеграцияShare/Ext/Module.bsl @@ -2844,12 +2844,12 @@ Функция ДанныеСформированногоДокументаДляВыгрузки(СсылкаНаДокумент, ДанныеДокумента) Настройки = ФорматыЭДО.НовыеНастройкиФормированияДокументаПоОбъектуУчета(); - Настройки.ТипДокумента = ДанныеДокумента.ТипДокумента; - Настройки.Формат = ДанныеДокумента.Формат; - Настройки.ОтключитьРассчетДополнительныхПолей = Истина; - Настройки.Организация = ДанныеДокумента.Организация; - Настройки.Контрагент = ДанныеДокумента.Контрагент; - Настройки.Договор = ДанныеДокумента.ДоговорКонтрагента; + Настройки.ТипДокумента = ДанныеДокумента.ТипДокумента; + Настройки.Формат = ДанныеДокумента.Формат; + Настройки.ОтключитьРасчетДополнительныхПолей = Истина; + Настройки.Организация = ДанныеДокумента.Организация; + Настройки.Контрагент = ДанныеДокумента.Контрагент; + Настройки.Договор = ДанныеДокумента.ДоговорКонтрагента; ДанныеОрганизации = ДанныеУчастникаОбмена(ДанныеДокумента.Организация); ДанныеКонтрагента = ДанныеУчастникаОбмена(ДанныеДокумента.Контрагент); diff --git a/Конфигурация/CommonModules/ИнтеграцияВЕТИС/Ext/Module.bsl b/Конфигурация/CommonModules/ИнтеграцияВЕТИС/Ext/Module.bsl index f9f832fe7..63d22892c 100644 --- a/Конфигурация/CommonModules/ИнтеграцияВЕТИС/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ИнтеграцияВЕТИС/Ext/Module.bsl @@ -8373,7 +8373,7 @@ Методы.Вставить("ДанныеКонтрагентаПоИННФоновоеЗадание", Истина); Методы.Вставить("УстановитьПараметрыСеанса"); - Методы.Вставить("СверткаРегистраСоответствиеНоменклатурыВЕТИС", Истина); + Методы.Вставить("СверткаРегистраСоответствиеНоменклатурыВЕТИС"); КонецПроцедуры diff --git a/Конфигурация/CommonModules/ИнтеграцияГИСМ/Ext/Module.bsl b/Конфигурация/CommonModules/ИнтеграцияГИСМ/Ext/Module.bsl index a0661d6d2..229c2f06e 100644 --- a/Конфигурация/CommonModules/ИнтеграцияГИСМ/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ИнтеграцияГИСМ/Ext/Module.bsl @@ -2641,13 +2641,6 @@ #КонецОбласти -// См. СтандартныеПодсистемыСервер.ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод -Процедура ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод(Методы) Экспорт - - Методы.Вставить("ВыполнитьОбменРегламентноеЗадание"); - -КонецПроцедуры - #КонецОбласти #Область СлужебныйПрограммныйИнтерфейс diff --git a/Конфигурация/CommonModules/ИнтеграцияЕГАИС/Ext/Module.bsl b/Конфигурация/CommonModules/ИнтеграцияЕГАИС/Ext/Module.bsl index 4a8416962..f8077703f 100644 --- a/Конфигурация/CommonModules/ИнтеграцияЕГАИС/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ИнтеграцияЕГАИС/Ext/Module.bsl @@ -6720,7 +6720,7 @@ КонецФункции -// Загружает данные отчета Остатки в регистре №3 или Остатки по вскрытым бутылкам в базу данных. +// Загружает данные отчета Остатки в регистре №3 в базу данных. // // Параметры: // ДанныеДокумента - Структура - Данные документа @@ -6760,7 +6760,7 @@ Реквизиты.Вставить("Операция", ДанныеДокумента.Операция); Реквизиты.Вставить("Документ", РезультатПоиска.Ссылка); Реквизиты.Вставить("СообщениеОснование", ИсходящееСообщение); - Реквизиты.Вставить("Описание", ОписаниеОперацииЗагрузкиОтчетаОстаткиВРегистре3(ДанныеДокумента.Операция)); + Реквизиты.Вставить("Описание", НСтр("ru = 'Получены данные отчета ""Остатки в регистре №3""'")); Реквизиты.Вставить("ИдентификаторЗапроса", ДанныеДокумента.ИдентификаторЗапроса); Реквизиты.Вставить("ФорматОбмена", ДанныеДокумента.ФорматОбмена); Реквизиты.Вставить("ОрганизацияЕГАИС", ОрганизацияЕГАИС); @@ -6777,9 +6777,142 @@ ДокументОбъект = РезультатПоиска.Ссылка.ПолучитьОбъект(); - //@skip-check bsl-legacy-check-string-literal - ОбъемАлкогольнойПродукции = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ДокументОбъект.АлкогольнаяПродукция, "Объем"); - ОбъемАлкогольнойПродукции = ОбъемАлкогольнойПродукции * 1000; + // Если выполнить блокировку объекта не удалось, то будет выдано исключение. + // Документ будет получен в следующий итерации загрузки данных. + ДокументОбъект.Заблокировать(); + + ДокументОбъект.Дата = ДанныеДокумента.Объект.RestsDate; + ДокументОбъект.АкцизныеМарки.Очистить(); + + Если ДанныеДокумента.Объект.MarkInfo <> Неопределено Тогда + Для Каждого ЭлементДанных Из ДанныеДокумента.Объект.MarkInfo Цикл + Для Каждого КодАкцизнойМарки Из ЭлементДанных.amc Цикл + СтрокаТЧ = ДокументОбъект.АкцизныеМарки.Добавить(); + СтрокаТЧ.КодАкцизнойМарки = КодАкцизнойМарки; + КонецЦикла; + КонецЦикла; + КонецЕсли; + + ПараметрыОбновленияСтатуса = ПараметрыОбновленияСтатуса(); + ПараметрыОбновленияСтатуса.ОбновлятьДвижения = Ложь; + ПараметрыОбновленияСтатуса.ДокументОбъект = ДокументОбъект; + ПараметрыОбновленияСтатуса.ИдентификаторЗапроса = Реквизиты.ИдентификаторЗапроса; + ПараметрыОбновленияСтатуса.СтатусОбработки = Реквизиты.СтатусОбработки; + ПараметрыОбновленияСтатуса.ФорматОбмена = РезультатПоиска.ФорматОбмена; + + ПолноеИмя = ДокументОбъект.Ссылка.Метаданные().ПолноеИмя(); + МенеджерОбъекта = ОбщегоНазначенияИС.МенеджерОбъектаПоПолномуИмени(ПолноеИмя); + НовыйСтатус = МенеджерОбъекта.ОбновитьСтатусПослеПолученияДанных( + ДокументОбъект.Ссылка, ДанныеДокумента.Операция, + ПараметрыОбновленияСтатуса); + + ДокументОбъект.Записать(РежимЗаписи(ДокументОбъект)); + ОбъектИзменен = Истина; + + ЕстьОшибки = Документы.ОтчетЕГАИС.ЕстьРасхожденияВПолученныхДанных(ДокументОбъект.ВидДокумента, ДокументОбъект.Ссылка); + Если ЕстьОшибки Тогда + + ПараметрыОбновленияСтатуса = ПараметрыОбновленияСтатуса(); + ПараметрыОбновленияСтатуса.ОбновлятьДвижения = Ложь; + ПараметрыОбновленияСтатуса.ДокументОбъект = ДокументОбъект; + ПараметрыОбновленияСтатуса.ИдентификаторЗапроса = ДанныеДокумента.ИдентификаторЗапроса; + ПараметрыОбновленияСтатуса.СтатусОбработки = Перечисления.СтатусыОбработкиСообщенийЕГАИС.Ошибка; + ПараметрыОбновленияСтатуса.ФорматОбмена = РезультатПоиска.ФорматОбмена; + + НовыйСтатус = МенеджерОбъекта.ОбновитьСтатусПослеПолученияДанных( + ДокументОбъект.Ссылка, ДанныеДокумента.Операция, + ПараметрыОбновленияСтатуса); + + КонецЕсли; + + КонецЕсли; + + ВозвращаемоеЗначение = ОбменДаннымиЕГАИСКлиентСервер.СтруктураИзменения(); + ВозвращаемоеЗначение.ОрганизацияЕГАИС = ОрганизацияЕГАИС; + ВозвращаемоеЗначение.Операция = ДанныеДокумента.Операция; + ВозвращаемоеЗначение.ФорматОбмена = ДанныеДокумента.ФорматОбмена; + + ВозвращаемоеЗначение.ТекстОшибки = ""; + ВозвращаемоеЗначение.ПодготовленоКПередаче = Ложь; + ВозвращаемоеЗначение.ПереданоВУТМ = Ложь; + ВозвращаемоеЗначение.Принято = Истина; + + ВозвращаемоеЗначение.ИсходящееСообщение = ИсходящееСообщение; + ВозвращаемоеЗначение.ВходящееСообщение = РезультатДобавленияЗаписи.Ссылка; + + ВозвращаемоеЗначение.Объект = ДокументОбъект.Ссылка; + ВозвращаемоеЗначение.ДокументОснование = Неопределено; + ВозвращаемоеЗначение.НовыйСтатус = НовыйСтатус; + ВозвращаемоеЗначение.ОбъектИзменен = ОбъектИзменен; + + СлужебныеДанные = Новый Массив; + СлужебныеДанные.Добавить( + СлужебныеДанные( + ОрганизацияЕГАИС, + ДанныеДокумента.Операция, + ДанныеДокумента.АдресЗапроса)); + ВозвращаемоеЗначение.Вставить("СлужебныеДанные", СлужебныеДанные); + + Возврат ВозвращаемоеЗначение; + +КонецФункции + +// Загружает данные отчета Остатки по вскрытым бутылкам в базу данных. +// +// Параметры: +// ДанныеДокумента - Структура - Данные документа +// ОрганизацияЕГАИС - СправочникСсылка.КлассификаторОрганизацийЕГАИС - Организация ЕГАИС +// ДополнительныеПараметры - Неопределено - Дополнительные параметры +// +// Возвращаемое значение: +// см. ОбменДаннымиЕГАИСКлиентСервер.СтруктураИзменения +Функция ЗагрузитьОтветНаЗапросОтчетаОстаткиПоВскрытымБутылкам(ДанныеДокумента, ОрганизацияЕГАИС, ДополнительныеПараметры = Неопределено) Экспорт + + РезультатПоиска = НайтиОбъектПоИдентификаторуЗапроса( + ДанныеДокумента.ИдентификаторЗапроса, Ложь); + + Если РезультатПоиска = Неопределено Тогда + + ВызватьИсключение СтрШаблон( + НСтр("ru = 'При загрузке данных отчета ЕГАИС (Остатки по вскрытым бутылкам): + |Не найден документ с идентификатором запроса %1.'"), + ДанныеДокумента.ИдентификаторЗапроса); + + КонецЕсли; + + Если ДополнительныеПараметры <> Неопределено Тогда + + Если ДополнительныеПараметры.СтопЛист.Получить(РезультатПоиска.Ссылка) <> Неопределено Тогда + Возврат Неопределено; + КонецЕсли; + + ДополнительныеПараметры.ТекущийОбъект = РезультатПоиска.Ссылка; + + КонецЕсли; + + ИсходящееСообщение = Неопределено; + + Реквизиты = Новый Структура; + Реквизиты.Вставить("ТипСообщения", Перечисления.ТипыЗапросовИС.Входящий); + Реквизиты.Вставить("Операция", ДанныеДокумента.Операция); + Реквизиты.Вставить("Документ", РезультатПоиска.Ссылка); + Реквизиты.Вставить("СообщениеОснование", ИсходящееСообщение); + Реквизиты.Вставить("Описание", НСтр("ru = 'Получены данные отчета ""Остатки по вскрытым бутылкам""'")); + Реквизиты.Вставить("ИдентификаторЗапроса", ДанныеДокумента.ИдентификаторЗапроса); + Реквизиты.Вставить("ФорматОбмена", ДанныеДокумента.ФорматОбмена); + Реквизиты.Вставить("ОрганизацияЕГАИС", ОрганизацияЕГАИС); + Реквизиты.Вставить("СтатусОбработки", Перечисления.СтатусыОбработкиСообщенийЕГАИС.ПринятИзЕГАИС); + + НовыйСтатус = Неопределено; + ОбъектИзменен = Ложь; + + РезультатДобавленияЗаписи = ОбменДаннымиЕГАИС.ДобавитьЗаписьВПротоколОбмена( + ДанныеДокумента.ТекстXML, + Реквизиты); + + Если РезультатДобавленияЗаписи.НовоеСообщение Тогда + + ДокументОбъект = РезультатПоиска.Ссылка.ПолучитьОбъект(); // Если выполнить блокировку объекта не удалось, то будет выдано исключение. // Документ будет получен в следующий итерации загрузки данных. @@ -6789,24 +6922,17 @@ ДокументОбъект.АкцизныеМарки.Очистить(); Если ДанныеДокумента.Объект.MarkInfo <> Неопределено Тогда - Если ДокументОбъект.ВидДокумента = Перечисления.ВидыДокументовЕГАИС.ЗапросОтчетаОстаткиПоВскрытымБутылкам Тогда - Для Каждого ЭлементДанных Из ДанныеДокумента.Объект.MarkInfo.amccat Цикл - СтрокаТЧ = ДокументОбъект.АкцизныеМарки.Добавить(); - СтрокаТЧ.КодАкцизнойМарки = ЭлементДанных.amc; - Если ЭлементДанных.amcvol = Неопределено Тогда - СтрокаТЧ.КоличествоОстатокЧастичногоВыбытия = ОбъемАлкогольнойПродукции; - Иначе - СтрокаТЧ.КоличествоОстатокЧастичногоВыбытия = ЭлементДанных.amcvol; - КонецЕсли; - КонецЦикла; - Иначе - Для Каждого ЭлементДанных Из ДанныеДокумента.Объект.MarkInfo Цикл - Для Каждого КодАкцизнойМарки Из ЭлементДанных.amc Цикл - СтрокаТЧ = ДокументОбъект.АкцизныеМарки.Добавить(); - СтрокаТЧ.КодАкцизнойМарки = КодАкцизнойМарки; - КонецЦикла; - КонецЦикла; - КонецЕсли; + ОбъемАлкогольнойПродукции = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ДокументОбъект.АлкогольнаяПродукция, "Объем"); + ОбъемАлкогольнойПродукции = ОбъемАлкогольнойПродукции * 1000; + Для Каждого ЭлементДанных Из ДанныеДокумента.Объект.MarkInfo.amccat Цикл + СтрокаТЧ = ДокументОбъект.АкцизныеМарки.Добавить(); + СтрокаТЧ.КодАкцизнойМарки = ЭлементДанных.amc; + Если ЭлементДанных.amcvol = Неопределено Тогда + СтрокаТЧ.КоличествоОстатокЧастичногоВыбытия = ОбъемАлкогольнойПродукции; + Иначе + СтрокаТЧ.КоличествоОстатокЧастичногоВыбытия = ЭлементДанных.amcvol; + КонецЕсли; + КонецЦикла; КонецЕсли; ПараметрыОбновленияСтатуса = ПараметрыОбновленияСтатуса(); @@ -8963,7 +9089,7 @@ // См. СтандартныеПодсистемыСервер.ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод Процедура ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод(Методы) Экспорт - Методы.Вставить("СверткаРегистраСоответствиеНоменклатурыЕГАИС", Истина); + Методы.Вставить("СверткаРегистраСоответствиеНоменклатурыЕГАИС"); Методы.Вставить("УстановитьПараметрыСеанса"); КонецПроцедуры @@ -9404,6 +9530,11 @@ ДанныеЗагруженногоДокумента = ЗагрузитьОтветНаЗапросОтчетаОстаткиВРегистре3( ДанныеДокумента, ПараметрыОбработки.ОрганизацияЕГАИС, ПараметрыОбработки.ДополнительныеПараметры); + ИначеЕсли ДанныеДокумента.Операция = Перечисления.ВидыДокументовЕГАИС.ОтветНаЗапросОтчетаОстаткиПоВскрытымБутылкам Тогда + + ДанныеЗагруженногоДокумента = ЗагрузитьОтветНаЗапросОтчетаОстаткиПоВскрытымБутылкам( + ДанныеДокумента, ПараметрыОбработки.ОрганизацияЕГАИС, ПараметрыОбработки.ДополнительныеПараметры); + // +УОП ИначеЕсли ДанныеДокумента.Операция = Перечисления.ВидыДокументовЕГАИС.УОП_ОтветНаЗапросОтчетаОстаткиВРегистре3ПоМл Тогда @@ -14126,22 +14257,4 @@ КонецФункции -// Возвращает описание операции загрузки отчета об остатках в регистре №3 или по вскрытым бутылкам. -// -// Параметры: -// Операция - ПеречислениеСсылка.ВидыДокументовЕГАИС - операция загрузки ответа. -// -// Возвращаемое значение: -// Строка - описание операции. -// -Функция ОписаниеОперацииЗагрузкиОтчетаОстаткиВРегистре3(Операция) - - Если Операция = Перечисления.ВидыДокументовЕГАИС.ОтветНаЗапросОтчетаОстаткиПоВскрытымБутылкам Тогда - Возврат НСтр("ru = 'Получены данные отчета ""Остатки по вскрытым бутылкам""'"); - Иначе - Возврат НСтр("ru = 'Получены данные отчета ""Остатки в регистре №3""'"); - КонецЕсли; - -КонецФункции - #КонецОбласти diff --git a/Конфигурация/CommonModules/ИнтеграцияЕГАИСВызовСервера/Ext/Module.bsl b/Конфигурация/CommonModules/ИнтеграцияЕГАИСВызовСервера/Ext/Module.bsl index 9ad826e65..c681e06fb 100644 --- a/Конфигурация/CommonModules/ИнтеграцияЕГАИСВызовСервера/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ИнтеграцияЕГАИСВызовСервера/Ext/Module.bsl @@ -471,6 +471,42 @@ КонецПроцедуры +// Расходятся признаки маркировки. +// +// Параметры: +// Коллекция - ДанныеФормыКоллекция - таблица "Товары" входящей ТТН ЕГАИС +// +// Возвращаемое значение: +// Структура - признаки маркировки: +// * Номенклатура - См. ОбщегоНазначенияИС.ОписаниеНоменклатуры +// * АлкогольнаяПродукция - Соответствие Из Булево - признак маркировки алкогольной продукции: +// ** Ключ - СправочникСсылка.КлассификаторАлкогольнойПродукцииЕГАИС - алкогольная продукция +// ** Значение - Булево - признак маркировки. Функция ПризнакиМаркировки(Знач Коллекция) Экспорт + + Результат = Новый Структура; + Результат.Вставить("Номенклатура", + ОбщегоНазначенияИС.ОписаниеНоменклатуры(Коллекция.Выгрузить(,"Номенклатура").ВыгрузитьКолонку("Номенклатура"))); + Результат.Вставить("АлкогольнаяПродукция", Новый Соответствие); + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | АлкогольнаяПродукция.Ссылка КАК АлкогольнаяПродукция, + | АлкогольнаяПродукция.ВидПродукции.Маркируемый КАК Маркируемый + |ИЗ + | Справочник.КлассификаторАлкогольнойПродукцииЕГАИС КАК АлкогольнаяПродукция + |ГДЕ + | АлкогольнаяПродукция.Ссылка В(&АлкогольнаяПродукция)"; + Запрос.УстановитьПараметр("АлкогольнаяПродукция", + Коллекция.Выгрузить(,"АлкогольнаяПродукция").ВыгрузитьКолонку("АлкогольнаяПродукция")); + Выборка = Запрос.Выполнить().Выбрать(); + Пока Выборка.Следующий() Цикл + Результат.АлкогольнаяПродукция.Вставить(Выборка.АлкогольнаяПродукция, Выборка.Маркируемый); + КонецЦикла; + + Возврат Результат; + +КонецФункции + #КонецОбласти #Область ОбработчикиСобытийПолученияФормОбъектов diff --git a/Конфигурация/CommonModules/ИнтеграцияЕГАИСУНФ/Ext/Module.bsl b/Конфигурация/CommonModules/ИнтеграцияЕГАИСУНФ/Ext/Module.bsl index 8a402f810..4ea410c3a 100644 --- a/Конфигурация/CommonModules/ИнтеграцияЕГАИСУНФ/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ИнтеграцияЕГАИСУНФ/Ext/Module.bsl @@ -1111,7 +1111,7 @@ |ИЗ | ТоварыКОформлению КАК ТоварыКОформлению | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВидыАлкогольнойПродукции КАК ВидыАлкогольнойПродукции - | ПО ТоварыКОформлению.АлкогольнаяПродукция.ВидПродукции = ВидыАлкогольнойПродукции.Ссылка + | ПО ТоварыКОформлению.Номенклатура.ВидАлкогольнойПродукции = ВидыАлкогольнойПродукции.Ссылка | |СГРУППИРОВАТЬ ПО | ТоварыКОформлению.Номенклатура, diff --git a/Конфигурация/CommonModules/ИнтеграцияЗЕРНОСлужебный/Ext/Module.bsl b/Конфигурация/CommonModules/ИнтеграцияЗЕРНОСлужебный/Ext/Module.bsl index 2116d0ae8..0361e5de8 100644 --- a/Конфигурация/CommonModules/ИнтеграцияЗЕРНОСлужебный/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ИнтеграцияЗЕРНОСлужебный/Ext/Module.bsl @@ -5701,6 +5701,7 @@ КонецЦикла; Исключения = Новый Соответствие; + Исключения.Вставить(Перечисления.ДальнейшиеДействияПоВзаимодействиюЗЕРНО.АннулируйтеОперацию, Истина); Для Каждого КлючИЗначение Из СообщенияПоДокументам Цикл diff --git a/Конфигурация/CommonModules/ИнтеграцияИС/Ext/Module.bsl b/Конфигурация/CommonModules/ИнтеграцияИС/Ext/Module.bsl index 7e44102f9..bf7191bc6 100644 --- a/Конфигурация/CommonModules/ИнтеграцияИС/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ИнтеграцияИС/Ext/Module.bsl @@ -1532,10 +1532,11 @@ // ДокументОбъект - ДокументОбъект - документ ГосИС: // * Товары - ТабличнаяЧасть - табличная часть документа: // ** Номенклатура - ОпределяемыйТип.Номенклатура - номенклатура в строке документа +// ИмяПодсистемы - Неопределено, Строка - имя подсистемы // // Возвращаемое значение: // СправочникСсылка.ВидыПродукцииИС - вид продукции -Функция ВидПродукцииПоТабличнойЧасти(ДокументОбъект) Экспорт +Функция ВидПродукцииПоТабличнойЧасти(ДокументОбъект, ИмяПодсистемы = Неопределено) Экспорт Результат = Справочники.ВидыПродукцииИС.ПустаяСсылка(); @@ -1544,7 +1545,7 @@ Номенклатура = ДокументОбъект.Товары[0].Номенклатура; ОписаниеНоменклатуры = ОбщегоНазначенияИС.ОписаниеНоменклатуры(Номенклатура)[Номенклатура]; Если ЗначениеЗаполнено(ОписаниеНоменклатуры.КлючВидовПродукции) Тогда - ВидыПродукции = КонструкторИСОбщегоНазначенияКлиентСервер.ВидыПродукцииКлюча(ОписаниеНоменклатуры.КлючВидовПродукции); + ВидыПродукции = КонструкторИСОбщегоНазначенияКлиентСервер.ВидыПродукцииКлюча(ОписаниеНоменклатуры.КлючВидовПродукции, ИмяПодсистемы); Для Каждого ВидПродукции Из ВидыПродукции Цикл Возврат ВидПродукции; КонецЦикла; @@ -3447,6 +3448,7 @@ Справочники.ЭлементыКонструктораВидовПродукцииИС.ДобавитьПараметризуемыеЭлементы( Результат, ПараметризуемыеЭлементы, Тип("ПеречислениеСсылка.ВидыОперацийИСМП"), + Тип("СправочникСсылка.ПричиныВыводаИзОборотаИСМП"), Тип("ПеречислениеСсылка.СпособыВводаВОборотСУЗ")); // diff --git a/Конфигурация/CommonModules/ИнтеграцияИСМП/Ext/Module.bsl b/Конфигурация/CommonModules/ИнтеграцияИСМП/Ext/Module.bsl index 78972d265..e89d46c4c 100644 --- a/Конфигурация/CommonModules/ИнтеграцияИСМП/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ИнтеграцияИСМП/Ext/Module.bsl @@ -527,9 +527,8 @@ // См. СтандартныеПодсистемыСервер.ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод Процедура ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод(Методы) Экспорт - Методы.Вставить("ОчисткаПулаКодовМаркировкиРегламентноеЗадание", Истина); - Методы.Вставить("УдалениеНеиспользованныхКодовМаркировкиРегламентноеЗадание", Истина); - Методы.Вставить("ВыполнитьОбменРегламентноеЗадание", Истина); + Методы.Вставить("ОчисткаПулаКодовМаркировкиРегламентноеЗадание"); + Методы.Вставить("УдалениеНеиспользованныхКодовМаркировкиРегламентноеЗадание"); Методы.Вставить("ВыполнитьРасчетПроблем", Истина); КонецПроцедуры diff --git a/Конфигурация/CommonModules/ИнтеграцияИСПереопределяемый/Ext/Module.bsl b/Конфигурация/CommonModules/ИнтеграцияИСПереопределяемый/Ext/Module.bsl index 61c63f1d6..444fe15d9 100644 --- a/Конфигурация/CommonModules/ИнтеграцияИСПереопределяемый/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ИнтеграцияИСПереопределяемый/Ext/Module.bsl @@ -95,6 +95,7 @@ // ТипНоменклатуры - ОпределяемыйТип.ТипНоменклатуры - тип номенклатуры. // ТребуетВзвешивания - Булево - признак, что для номенклатуры маркированные потребительские упаковки имеют индивидуальный вес. // ПроизвольнаяЕдиницаУчета - Булево - признак, что для номенклатуры базовая единица учета отличается от маркированной потребительской упаковки. +// МаркируемаяПродукция - Булево - признак, что в строке таблицы маркируемая номенклатура. // // Параметры: // Форма - ФормаКлиентскогоПриложения, Неопределено - Форма. diff --git a/Конфигурация/CommonModules/ИнтеграцияМОТПУНФКлиентСервер/Ext/Module.bsl b/Конфигурация/CommonModules/ИнтеграцияМОТПУНФКлиентСервер/Ext/Module.bsl index b7d523c97..e0a784c1c 100644 --- a/Конфигурация/CommonModules/ИнтеграцияМОТПУНФКлиентСервер/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ИнтеграцияМОТПУНФКлиентСервер/Ext/Module.bsl @@ -1058,6 +1058,9 @@ НастройкиИСМП.Вставить("КонтрольУникальностиКодовМаркировки", Ложь); НастройкиИСМП.Вставить("СоздаватьШтрихкодУпаковки", Ложь); + ВидОперацииИСМП = ПредопределенноеЗначение("Перечисление.ВидыОперацийИСМП.ВнутреннееПеремещение"); + ПараметрыСканирования.ВидОперацииИСМП = ВидОперацииИСМП; + ЗаполнитьЗначенияСвойств(ПараметрыСканирования, НастройкиИСМП); #КонецОбласти diff --git a/Конфигурация/CommonModules/ИнтеграцияПодсистемБИП/Ext/Module.bsl b/Конфигурация/CommonModules/ИнтеграцияПодсистемБИП/Ext/Module.bsl index 067d818c9..72fd178c1 100644 --- a/Конфигурация/CommonModules/ИнтеграцияПодсистемБИП/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ИнтеграцияПодсистемБИП/Ext/Module.bsl @@ -2070,6 +2070,17 @@ #Область ОнлайнОплаты +// См. ОнлайнОплатыПереопределяемый.ПриНастройкеОнлайнОплат. +// +Процедура ПриНастройкеОнлайнОплат(НастройкиОнлайнОплат) Экспорт + + Если ИнтеграцияПодсистемБИППовтИсп.ПодпискиБСП().ПриНастройкеОнлайнОплат Тогда + МодульИнтеграцияПодсистемБСП = ОбщегоНазначения.ОбщийМодуль("ИнтеграцияПодсистемБСП"); + МодульИнтеграцияПодсистемБСП.ПриНастройкеОнлайнОплат(НастройкиОнлайнОплат); + КонецЕсли; + +КонецПроцедуры + // См. ОнлайнОплатыПереопределяемый.ПриОпределенииДополнительныхНастроекОнлайнОплаты. // Процедура ПриОпределенииДополнительныхНастроекОнлайнОплаты(ДополнительныеНастройки) Экспорт @@ -3548,6 +3559,7 @@ События.Вставить("ПослеОбновленияНастройки", Ложь); // Онлайн оплаты + События.Вставить("ПриНастройкеОнлайнОплат", Ложь); События.Вставить("ПриОпределенииДополнительныхНастроекОнлайнОплаты", Ложь); События.Вставить("ПриСозданииФормыОнлайнОплаты", Ложь); События.Вставить("ПередНачаломРедактированияДополнительныхНастроекОнлайнОплаты", Ложь); diff --git a/Конфигурация/CommonModules/ИнтеграцияПодсистемБСП/Ext/Module.bsl b/Конфигурация/CommonModules/ИнтеграцияПодсистемБСП/Ext/Module.bsl index b1b3d4f62..811ae21e2 100644 --- a/Конфигурация/CommonModules/ИнтеграцияПодсистемБСП/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ИнтеграцияПодсистемБСП/Ext/Module.bsl @@ -648,7 +648,7 @@ МодульОбменДаннымиВМоделиСервиса.РегистрацияИнтерфейсовПринимаемыхСообщений(МассивОбработчиков); КонецЕсли; - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСПочтовымиСообщениями") Тогда + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.БазоваяФункциональностьВМоделиСервиса") Тогда МодульСообщенияОткрытаяАвторизацияПочтовогоСервисаИнтерфейсСлужебный = ОбщегоНазначения.ОбщийМодуль("СообщенияОткрытаяАвторизацияПочтовогоСервисаИнтерфейсСлужебный"); МодульСообщенияОткрытаяАвторизацияПочтовогоСервисаИнтерфейсСлужебный.РегистрацияИнтерфейсовПринимаемыхСообщений(МассивОбработчиков); КонецЕсли; @@ -2417,6 +2417,11 @@ МодульДополнительныеОтчетыИОбработки.ПриНастройкеПроверкиМетодовВызываемыхКакПроизвольныйКод(Настройки); КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонтактнаяИнформация") Тогда + МодульУправлениеКонтактнойИнформациейСлужебный = ОбщегоНазначения.ОбщийМодуль("УправлениеКонтактнойИнформациейСлужебный"); + МодульУправлениеКонтактнойИнформациейСлужебный.ПриНастройкеПроверкиМетодовВызываемыхКакПроизвольныйКод(Настройки); + КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонтрольВеденияУчета") Тогда МодульКонтрольВеденияУчетаСлужебный = ОбщегоНазначения.ОбщийМодуль("КонтрольВеденияУчетаСлужебный"); МодульКонтрольВеденияУчетаСлужебный.ПриНастройкеПроверкиМетодовВызываемыхКакПроизвольныйКод(Настройки); @@ -2427,6 +2432,11 @@ МодульНастройкаПорядкаЭлементов.ПриНастройкеПроверкиМетодовВызываемыхКакПроизвольныйКод(Настройки); КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными") Тогда + МодульОбменДаннымиСервер = ОбщегоНазначения.ОбщийМодуль("ОбменДаннымиСервер"); + МодульОбменДаннымиСервер.ПриНастройкеПроверкиМетодовВызываемыхКакПроизвольныйКод(Настройки); + КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПодключаемыеКоманды") Тогда МодульПодключаемыеКоманды = ОбщегоНазначения.ОбщийМодуль("ПодключаемыеКоманды"); МодульПодключаемыеКоманды.ПриНастройкеПроверкиМетодовВызываемыхКакПроизвольныйКод(Настройки); diff --git a/Конфигурация/CommonModules/ИнтеграцияПодсистемБЭД/Ext/Module.bsl b/Конфигурация/CommonModules/ИнтеграцияПодсистемБЭД/Ext/Module.bsl index 2dec7b7f9..bcd350081 100644 --- a/Конфигурация/CommonModules/ИнтеграцияПодсистемБЭД/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ИнтеграцияПодсистемБЭД/Ext/Module.bsl @@ -77,12 +77,105 @@ КонецПроцедуры +#Область Подписки + +// Определяет события, на которые могут подписаться другие библиотеки. +// +// Возвращаемое значение: +// Структура - События БЭД: +// * БизнесСеть - Структура - События подсистемы БизнесСеть БЭД: +// ** ПриРегистрацииКонтрагентов - Булево - Событие получения сведений о новых контрагентах +// в сервисе 1С:Бизнес-сеть. +// ** ПриИзмененииИдентификаторовКонтрагентов - Булево - Событие изменения идентификатора контрагентов +// в сервисе 1С:Бизнес-сеть. +// ** ПриИзмененииИдентификаторовОрганизаций - Булево - Событие изменения идентификатора организаций +// в сервисе 1С:Бизнес-сеть. +Функция СобытияБЭД() Экспорт + + События = Новый Структура; + + // БизнесСеть + СобытияБизнесСеть = Новый Структура; + СобытияБизнесСеть.Вставить("ПриРегистрацииКонтрагентов", Ложь); + СобытияБизнесСеть.Вставить("ПриИзмененииИдентификаторовКонтрагентов", Ложь); + СобытияБизнесСеть.Вставить("ПриИзмененииИдентификаторовОрганизаций", Ложь); + + События.Вставить("БизнесСеть", СобытияБизнесСеть); + + Возврат События; + +КонецФункции + +#КонецОбласти + +#Область События + +#Область БизнесСеть + +// См. БизнесСетьСлужебный.ПриРегистрацииКонтрагентов +Процедура ПриРегистрацииКонтрагентов(Знач Контрагенты) Экспорт + + Если ПодпискиБСС().БизнесСеть.ПриРегистрацииКонтрагентов Тогда + //@skip-check bsl-legacy-check-string-literal - ДемоБЭД не содержит БСС + МодульИнтеграцияПодсистемБТС = ОбщегоНазначения.ОбщийМодуль("ИнтеграцияПодсистемБСС"); + //@skip-check dynamic-access-method-not-found - ДемоБЭД не содержит БСС + МодульИнтеграцияПодсистемБТС.ПриРегистрацииКонтрагентов(Контрагенты); + КонецЕсли; + +КонецПроцедуры + +// См. БизнесСетьСлужебный.ПриИзмененииИдентификаторовКонтрагентов +Процедура ПриИзмененииИдентификаторовКонтрагентов(Знач Контрагенты) Экспорт + + Если ПодпискиБСС().БизнесСеть.ПриИзмененииИдентификаторовКонтрагентов Тогда + //@skip-check bsl-legacy-check-string-literal - ДемоБЭД не содержит БСС + МодульИнтеграцияПодсистемБТС = ОбщегоНазначения.ОбщийМодуль("ИнтеграцияПодсистемБСС"); + //@skip-check dynamic-access-method-not-found - ДемоБЭД не содержит БСС + МодульИнтеграцияПодсистемБТС.ПриИзмененииИдентификаторовКонтрагентов(Контрагенты); + КонецЕсли; + +КонецПроцедуры + +// См. БизнесСетьСлужебный.ПриИзмененииИдентификаторовОрганизаций +Процедура ПриИзмененииИдентификаторовОрганизаций(Знач Организации) Экспорт + + Если ПодпискиБСС().БизнесСеть.ПриИзмененииИдентификаторовКонтрагентов Тогда + //@skip-check bsl-legacy-check-string-literal - ДемоБЭД не содержит БСС + МодульИнтеграцияПодсистемБТС = ОбщегоНазначения.ОбщийМодуль("ИнтеграцияПодсистемБСС"); + //@skip-check dynamic-access-method-not-found - ДемоБЭД не содержит БСС + МодульИнтеграцияПодсистемБТС.ПриИзмененииИдентификаторовОрганизаций(Организации); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#КонецОбласти + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +#Область Подписки + +// См. ИнтеграцияПодсистемБЭДСлужебный.ПодпискиБСС +Функция ПодпискиБСС() + Возврат ИнтеграцияПодсистемБЭДПовтИсп.ПодпискиБСС(); +КонецФункции + +#КонецОбласти + // См. ИнтеграцияПодсистемБСП.ПриНастройкеПроверкиМетодовВызываемыхКакПроизвольныйКод. Процедура ПриНастройкеПроверкиМетодовВызываемыхКакПроизвольныйКод(Настройки) Экспорт Если ОбщегоНазначения.ПодсистемаСуществует("ЭлектронноеВзаимодействие.ОбменСБанками") Тогда - МодульОбменСБанкамиСлужебный = ОбщегоНазначения.ОбщийМодуль("ОбменСБанкамиСлужебный"); - МодульОбменСБанкамиСлужебный.ПриНастройкеПроверкиМетодовВызываемыхКакПроизвольныйКод(Настройки); + МодульОбменСБанками = ОбщегоНазначения.ОбщийМодуль("ОбменСБанками"); + МодульОбменСБанками.ПриНастройкеПроверкиМетодовВызываемыхКакПроизвольныйКод(Настройки); + КонецЕсли; + + Если ОбщегоНазначения.ПодсистемаСуществует("ЭлектронноеВзаимодействие.СервисДоставки") Тогда + МодульСервисДоставки = ОбщегоНазначения.ОбщийМодуль("СервисДоставки"); + МодульСервисДоставки.ПриНастройкеПроверкиМетодовВызываемыхКакПроизвольныйКод(Настройки); КонецЕсли; КонецПроцедуры diff --git a/Конфигурация/CommonModules/ИнтеграцияПодсистемБЭДПовтИсп.xml b/Конфигурация/CommonModules/ИнтеграцияПодсистемБЭДПовтИсп.xml new file mode 100644 index 000000000..51e1a2818 --- /dev/null +++ b/Конфигурация/CommonModules/ИнтеграцияПодсистемБЭДПовтИсп.xml @@ -0,0 +1,23 @@ + + + + + ИнтеграцияПодсистемБЭДПовтИсп + + + ru + Интеграция подсистем БЭД (повторное использование) + + + + false + false + true + true + true + false + false + DuringSession + + + \ No newline at end of file diff --git a/Конфигурация/CommonModules/ИнтеграцияПодсистемБЭДПовтИсп/Ext/Module.bsl b/Конфигурация/CommonModules/ИнтеграцияПодсистемБЭДПовтИсп/Ext/Module.bsl new file mode 100644 index 000000000..069aea508 --- /dev/null +++ b/Конфигурация/CommonModules/ИнтеграцияПодсистемБЭДПовтИсп/Ext/Module.bsl @@ -0,0 +1,10 @@ +// @strict-types + +#Область СлужебныйПрограммныйИнтерфейс + +// См. ИнтеграцияПодсистемБЭДСлужебный.ПодпискиБСС +Функция ПодпискиБСС() Экспорт + Возврат ИнтеграцияПодсистемБЭДСлужебный.ПодпискиБСС(); +КонецФункции + +#КонецОбласти \ No newline at end of file diff --git a/Конфигурация/CommonModules/ИнтеграцияПодсистемБЭДСлужебный.xml b/Конфигурация/CommonModules/ИнтеграцияПодсистемБЭДСлужебный.xml new file mode 100644 index 000000000..b2f48103d --- /dev/null +++ b/Конфигурация/CommonModules/ИнтеграцияПодсистемБЭДСлужебный.xml @@ -0,0 +1,23 @@ + + + + + ИнтеграцияПодсистемБЭДСлужебный + + + ru + Интеграция подсистем БЭДСлужебный + + + + false + false + true + true + true + false + false + DontUse + + + \ No newline at end of file diff --git a/Конфигурация/CommonModules/ИнтеграцияПодсистемБЭДСлужебный/Ext/Module.bsl b/Конфигурация/CommonModules/ИнтеграцияПодсистемБЭДСлужебный/Ext/Module.bsl new file mode 100644 index 000000000..745567a48 --- /dev/null +++ b/Конфигурация/CommonModules/ИнтеграцияПодсистемБЭДСлужебный/Ext/Module.bsl @@ -0,0 +1,29 @@ +// @strict-types + +#Область СлужебныйПрограммныйИнтерфейс + +// Подписки БСС. +// +// Возвращаемое значение: +// См. ИнтеграцияПодсистемБЭД.СобытияБЭД +Функция ПодпискиБСС() Экспорт + + Подписки = ИнтеграцияПодсистемБЭД.СобытияБЭД(); + + //@skip-check bsl-legacy-check-string-literal - ДемоБЭД не содержит БСС + Если Не ОбщегоНазначения.ПодсистемаСуществует("СервисСверкиРасчетов") Тогда + Возврат Подписки; // Конфигурация не содержит БСС + ИначеЕсли Метаданные.ОбщиеМодули.Найти("ИнтеграцияПодсистемБСС") = Неопределено Тогда + Возврат Подписки; // Версия БСС не поддерживает интеграцию подсистем + КонецЕсли; + + //@skip-check bsl-legacy-check-string-literal - ДемоБЭД не содержит БСС + МодульИнтеграцияПодсистемБТС = ОбщегоНазначения.ОбщийМодуль("ИнтеграцияПодсистемБСС"); + + //@skip-check dynamic-access-method-not-found - ДемоБЭД не содержит БСС + МодульИнтеграцияПодсистемБТС.ПриОпределенииПодписокНаСобытияБЭД(Подписки); + Возврат Подписки; + +КонецФункции + +#КонецОбласти \ No newline at end of file diff --git a/Конфигурация/CommonModules/ИнтеграцияСАТУРН/Ext/Module.bsl b/Конфигурация/CommonModules/ИнтеграцияСАТУРН/Ext/Module.bsl index 5a886b79a..7553b87c9 100644 --- a/Конфигурация/CommonModules/ИнтеграцияСАТУРН/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ИнтеграцияСАТУРН/Ext/Module.bsl @@ -1439,7 +1439,7 @@ // См. СтандартныеПодсистемыСервер.ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод Процедура ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод(Методы) Экспорт - Методы.Вставить("СверткаРегистраСоответствиеНоменклатурыСАТУРН", Истина); + Методы.Вставить("СверткаРегистраСоответствиеНоменклатурыСАТУРН"); Методы.Вставить("УстановитьПараметрыСеанса"); КонецПроцедуры diff --git a/Конфигурация/CommonModules/ИнтеграцияСАТУРНСлужебный/Ext/Module.bsl b/Конфигурация/CommonModules/ИнтеграцияСАТУРНСлужебный/Ext/Module.bsl index 4b9337fae..7ff399cf2 100644 --- a/Конфигурация/CommonModules/ИнтеграцияСАТУРНСлужебный/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ИнтеграцияСАТУРНСлужебный/Ext/Module.bsl @@ -3839,6 +3839,7 @@ КонецЦикла; Исключения = Новый Соответствие; + Исключения.Вставить(Перечисления.ДальнейшиеДействияПоВзаимодействиюСАТУРН.АннулируйтеОперацию, Истина); Для Каждого КлючИЗначение Из СообщенияПоДокументам Цикл diff --git a/Конфигурация/CommonModules/ИнтеграцияСМаркетплейсомOzonСервер/Ext/Module.bsl b/Конфигурация/CommonModules/ИнтеграцияСМаркетплейсомOzonСервер/Ext/Module.bsl index 13b6f8915..8f4a62e26 100644 --- a/Конфигурация/CommonModules/ИнтеграцияСМаркетплейсомOzonСервер/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ИнтеграцияСМаркетплейсомOzonСервер/Ext/Module.bsl @@ -1334,47 +1334,58 @@ КонецПроцедуры -// Возвращает информацию о счетчике выгрузки товаров. -// + +// Возвращает информацию об общем лимите на загрузку и обновление товаров из сервиса Ozon. +// Описание метода см. https://docs.ozon.ru/api/seller/#operation/ProductAPI_GetUploadQuota (версия 4). +// // Параметры: -// УчетнаяЗаписьМаркетплейса - СправочникСсылка.УчетныеЗаписиМаркетплейсов - Учетная запись для получения информации о счетчике. +// УчетнаяЗаписьМаркетплейса - СправочникСсылка.УчетныеЗаписиМаркетплейсов - Учетная запись маркетплейса // // Возвращаемое значение: -// Структура - Структура формата: -// * ЗначениеУстановлено - Булево - Признак, что метод API успешно вернул результат; -// * Использовано - Число - Использовано; -// * Остаток - Число - Остаток счетчика; -// * ВремяСброса - Дата - Дата сброса счетчика; -// * Значение - Число - Номинальное значение счетчика. -// +// Структура - Получить счетчик выгрузки: +// * ЗначениеУстановлено - Булево - Истина, если метод API успешно вернул результат; +// * СуточныйЛимитСоздания - Число - значение лимита на загрузку товаров; +// * СуточныйОстатокСоздания - Число - сколько новых записей можно внести до сброса счетчика за текущие сутки; +// * СуточныйЛимитОбновления - Число - значение лимита на обновление товаров; +// * СуточныйОстатокОбновления - Число - сколько изменений можно внести до сброса счетчика за текущие сутки; +// * ВремяСбросаСчетчиков - Дата - дата и время, когда сбросится значение счетчика за текущие сутки; +// * ОбщийЛимитСоздания - Число - сколько новых записей можно внести всего; +// * ОбщийОстатокСоздания - Число - значение лимита на создание товаров. Функция ПолучитьСчетчикВыгрузки(УчетнаяЗаписьМаркетплейса) Экспорт + ТекстЗапроса = "/v4/product/info/limit"; + + Результат = Новый Структура; + Результат.Вставить("ЗначениеУстановлено", Ложь); + Результат.Вставить("СуточныйЛимитСоздания", 0); + Результат.Вставить("СуточныйОстатокСоздания", 0); + Результат.Вставить("СуточныйЛимитОбновления", 0); + Результат.Вставить("СуточныйОстатокОбновления", 0); + Результат.Вставить("ВремяСбросаСчетчиков", '00010101000000'); + Результат.Вставить("ОбщийЛимитСоздания", 0); + Результат.Вставить("ОбщийОстатокСоздания", 0); + УстановитьПривилегированныйРежим(Истина); - СлужебныеПараметры = СлужебныеПараметрыHTTPЗапроса(); + СлужебныеПараметры = СлужебныеПараметрыHTTPЗапроса(); СлужебныеПараметры.ПоляТипаДата = "reset_at"; ПараметрыЗапроса = Новый Структура("СлужебныеПараметры", СлужебныеПараметры); - Результат = Новый Структура; - Результат.Вставить("ЗначениеУстановлено", Ложь); - Результат.Вставить("Использовано", 0); - Результат.Вставить("Остаток", 0); - Результат.Вставить("ВремяСброса", '00010101000000'); - Результат.Вставить("Значение", 0); - ПараметрыКонтекст = Новый Структура( "Действие", Перечисления.ОбменСВнешнимиСистемамиЛогированиеДействия.ПолучениеЛимитовЗагрузки ); + // POST-запрос + РезультатЗапроса = ВыполнитьЗапросКСервису(ТекстЗапроса, ПараметрыЗапроса, УчетнаяЗаписьМаркетплейса, Истина); - ТекстЗапроса = "v4/product/info/limit"; - РезультатЗапроса = ВыполнитьЗапросКСервису(ТекстЗапроса, ПараметрыЗапроса, УчетнаяЗаписьМаркетплейса, Истина - , ПараметрыКонтекст ); - Если РезультатЗапроса <> Неопределено Тогда - Результат.ЗначениеУстановлено = Истина; - Результат.Использовано = РезультатЗапроса[ "daily_update" ][ "usage" ]; - Результат.ВремяСброса = РезультатЗапроса[ "daily_update" ][ "reset_at" ]; - Результат.Значение = РезультатЗапроса[ "daily_update" ][ "limit" ]; - Результат.Остаток = Результат.Значение - Результат.Использовано; + Результат.ЗначениеУстановлено = Истина; + Результат.СуточныйЛимитСоздания = РезультатЗапроса["daily_create"]["limit"]; + Результат.СуточныйОстатокСоздания = РезультатЗапроса["daily_create"]["limit"] - РезультатЗапроса["daily_create"]["usage"]; + Результат.СуточныйЛимитОбновления = РезультатЗапроса["daily_update"]["limit"]; + Результат.СуточныйОстатокОбновления = РезультатЗапроса["daily_update"]["limit"] - РезультатЗапроса["daily_update"]["usage"]; + Результат.ВремяСбросаСчетчиков = Макс(РезультатЗапроса["daily_create"]["reset_at"], РезультатЗапроса["daily_update"]["reset_at"]); + Результат.ОбщийЛимитСоздания = РезультатЗапроса["total"]["limit"]; + Результат.ОбщийОстатокСоздания = ?(Результат.ОбщийЛимитСоздания <= 0, -1, + РезультатЗапроса["total"]["limit"] - РезультатЗапроса["total"]["usage"]); КонецЕсли; - + Возврат Результат; КонецФункции @@ -6049,50 +6060,50 @@ ТаблицаИменПолей.Колонки.Добавить("ИмяПоля", Новый ОписаниеТипов("Строка")); ТаблицаИменПолей.Колонки.Добавить("ПолныйПутьКРеквизиту1С", Новый ОписаниеТипов("Строка")); ТаблицаИменПолей.Колонки.Добавить("ДобавляемаяКолонка", Новый ОписаниеТипов("Булево")); - + // Подготовка схемы компоновки данных и компоновщика настроек для получения значений реквизитов. Поля = ПолучитьПоляСхемыДляПолученияРеквизитовАтрибутов(Истина); Результат = СоздатьСхемуКомпоновкиДанныхДляВыбораРеквизита(Поля); - + СхемаКомпоновкиДанных = Результат.СхемаКомпоновкиДанных; - + КомпоновщикНастроек = Новый КомпоновщикНастроекКомпоновкиДанных; - + // Получение таблицы значений реквизитов по установленным настройкам для атрибутов категорий 1С. КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных)); - + НастройкиКомпоновщика = КомпоновщикНастроек.Настройки; НастройкиКомпоновщика.Структура.Очистить(); - + ГруппировкаПолей = НастройкиКомпоновщика.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных")); - + ВыводРеквизитов = ГруппировкаПолей.ПараметрыВывода.Элементы.Найти("РасположениеРеквизитов"); Если Не ВыводРеквизитов.Использование Тогда ВыводРеквизитов.Значение = РасположениеРеквизитовКомпоновкиДанных.Отдельно; ВыводРеквизитов.Использование = Истина; КонецЕсли; - + Для Каждого ДанныеПоля Из Поля Цикл Поле = ДанныеПоля.Значение; - + СтрокаИмениПоля = ТаблицаИменПолей.Найти(Поле.ПолеКомпоновкиДанных, "ПолныйПутьКРеквизиту1С"); Если СтрокаИмениПоля = Неопределено Тогда ВыбранноеПоле = ГруппировкаПолей.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных")); ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных(Поле.ПолеКомпоновкиДанных); ВыбранноеПоле.Заголовок = Поле.ПутьКДанным; - + // Добавление записей в таблицу псевдонимов полей. СтрокаИмениПоля = ТаблицаИменПолей.Добавить(); СтрокаИмениПоля.ИмяПоля = Поле.ПутьКДанным; СтрокаИмениПоля.ПолныйПутьКРеквизиту1С = Поле.ПолеКомпоновкиДанных; КонецЕсли; КонецЦикла; - + // Получение таблицы установленных настроек для атрибутов категорий 1С. ЧастиТекстаЗапроса = СоставныеЧастиТекстаЗапросаПолученияНастроекСоответствияАтрибутов(); - + Запрос = Новый Запрос; - + Если ТипЗнч(ИсточникДанныхТоваров) = Тип("ТаблицаЗначений") Тогда МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц; @@ -6107,34 +6118,34 @@ Если ДанныеПубликации.Количество() = 0 Тогда Возврат Неопределено; КонецЕсли; - + Запрос.Текст = ЧастиТекстаЗапроса.Пролог + ЧастиТекстаЗапроса.Разделитель + ЧастиТекстаЗапроса.Рефрен; - + УстановитьПривилегированныйРежим(Истина); - + Инд = 2; Пока Истина Цикл ВыборкаДанных = Запрос.Выполнить().Выбрать(); Если ВыборкаДанных.Количество() = 0 Тогда Прервать; КонецЕсли; - + ЧастиТекстаЗапроса.Рефрен = СтрЗаменить(ЧастиТекстаЗапроса.Рефрен, - "ТаблицаАнализа" + Формат(Инд, "ЧГ="), - "ТаблицаАнализа" + Формат(Инд + 1, "ЧГ=")); + "ТаблицаАнализа" + Формат(Инд, "ЧГ="), + "ТаблицаАнализа" + Формат(Инд + 1, "ЧГ=")); ЧастиТекстаЗапроса.Рефрен = СтрЗаменить(ЧастиТекстаЗапроса.Рефрен, - "ТаблицаАнализа" + Формат(Инд - 1, "ЧГ="), - "ТаблицаАнализа" + Формат(Инд, "ЧГ=")); + "ТаблицаАнализа" + Формат(Инд - 1, "ЧГ="), + "ТаблицаАнализа" + Формат(Инд, "ЧГ=")); Запрос.Текст = ЧастиТекстаЗапроса.Рефрен; - + Инд = Инд + 1; КонецЦикла; - + ЧастиТекстаЗапроса.Эпилог = СтрЗаменить(ЧастиТекстаЗапроса.Эпилог, "ТаблицаАнализа2", "ТаблицаАнализа" + Формат(Инд, "ЧГ=")); Запрос.Текст = ЧастиТекстаЗапроса.Эпилог; - + ТаблицаНастроекПолейКатегорий1С = Запрос.Выполнить().Выгрузить(); - + // 00-00537447 ТаблицаНастроекПолейКатегорий1С.Колонки.Добавить("ЗначениеПоУмолчанию", Новый ОписаниеТипов(ПростыеТипы())); Для каждого СтрокаТаблицыЗначений Из ТаблицаНастроекПолейКатегорий1С Цикл @@ -6144,41 +6155,41 @@ СтрокаТаблицыЗначений.ЗначениеПоУмолчанию = СтрокаТаблицыЗначений.ЗначениеПоУмолчаниюИзЗапроса; КонецЕсли; КонецЦикла; - + ТаблицаНастроекПолейКатегорий1С.Индексы.Добавить("ПолныйПутьКРеквизиту1С, Категория1С"); ТаблицаНастроекПолейКатегорий1С.Индексы.Добавить("ПолныйПутьКРеквизиту1С, Категория1С, ИдентификаторКатегорииМаркетплейса"); - + УстановитьПривилегированныйРежим(Ложь); - + Если ТаблицаНастроекПолейКатегорий1С.Количество() = 0 Тогда Возврат Неопределено; КонецЕсли; - + // Заполнение таблицы псевдонимов полей и дополнение компоновщика настроек полями из установленных настроек для // атрибутов категорий 1С. ИндПоля = 1; МассивНезаполненныхСопоставлений = Новый Массив; МассивДублейПолей = Новый Массив; - + Для Каждого СтрокаПоляКатегории1С Из ТаблицаНастроекПолейКатегорий1С Цикл - + Если ПустаяСтрока(СтрокаПоляКатегории1С.ПолныйПутьКРеквизиту1С) Тогда МассивНезаполненныхСопоставлений.Добавить(СтрокаПоляКатегории1С); Продолжить; КонецЕсли; - + СтрокаИмениПоля = ТаблицаИменПолей.Найти(СтрокаПоляКатегории1С.ПолныйПутьКРеквизиту1С, "ПолныйПутьКРеквизиту1С"); Если СтрокаИмениПоля = Неопределено Тогда - + СтрокаИмениПоля = ТаблицаИменПолей.Добавить(); СтрокаИмениПоля.ИмяПоля = "Значение1С_" + ИндПоля; СтрокаИмениПоля.ПолныйПутьКРеквизиту1С = СтрокаПоляКатегории1С.ПолныйПутьКРеквизиту1С; СтрокаИмениПоля.ДобавляемаяКолонка = Истина; - + СообщениеОДубле = - ИнтеграцияСМаркетплейсомOzonКлиентСервер.ПроверитьДублированиеДополнительногоРеквизита(СтрокаПоляКатегории1С.ПолныйПутьКРеквизиту1С, - СтрокаПоляКатегории1С.ПредставлениеРеквизита1С, НастройкиКомпоновщика.ДоступныеПоляВыбора); - + ИнтеграцияСМаркетплейсомOzonКлиентСервер.ПроверитьДублированиеДополнительногоРеквизита(СтрокаПоляКатегории1С.ПолныйПутьКРеквизиту1С, + СтрокаПоляКатегории1С.ПредставлениеРеквизита1С, НастройкиКомпоновщика.ДоступныеПоляВыбора); + Если Не ПустаяСтрока(СообщениеОДубле) Тогда МассивДублейПолей.Добавить(СтрокаИмениПоля.ИмяПоля); Иначе @@ -6186,46 +6197,46 @@ ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных(СтрокаПоляКатегории1С.ПолныйПутьКРеквизиту1С); ВыбранноеПоле.Заголовок = СтрокаИмениПоля.ИмяПоля; КонецЕсли; - + ИндПоля = ИндПоля + 1; КонецЕсли; КонецЦикла; - + КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; - Попытка + Попытка МакетКомпоновки = - КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, НастройкиКомпоновщика,,, Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений")); + КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, НастройкиКомпоновщика,,, Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений")); Исключение ТекстОшибки = НСтр("ru = 'Ошибка получения значений атрибутов товаров, возможно, поменялось наименование дополнительного реквизита:'" ) - + " " + ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + + " " + ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); ОбменСВнешнимиСистемамиЛогирование.ЗаписатьВЛог( ТекстОшибки, , Истина ); ВызватьИсключение ТекстОшибки; КонецПопытки; - + // 00-00537447 Для каждого НаборДанных Из МакетКомпоновки.НаборыДанных Цикл ИсправитьЗапросВНаборахДанныхДляСтроковыхДополнительныхЗначений(НаборДанных); КонецЦикла; - - + + ВнешниеНаборы = Новый Структура("ДанныеПубликации", ДанныеПубликации); - + ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных; ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, ВнешниеНаборы); - + ТаблицаЗначенийРеквизитов = Новый ТаблицаЗначений; - + ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений; ПроцессорВывода.УстановитьОбъект(ТаблицаЗначенийРеквизитов); ПроцессорВывода.Вывести(ПроцессорКомпоновки); - + // Замена имен колонок таблицы значений реквизитов на псевдонимы из таблицы псевдонимов полей. ЯчейкиМакета = Новый Массив; Для Каждого Макет Из МакетКомпоновки.Макеты Цикл ЯчейкиМакета = Макет.Макет.Ячейки; Прервать; КонецЦикла; - + Для Каждого ЯчейкаМакета Из ЯчейкиМакета Цикл СтрокаИмениПоля = ТаблицаИменПолей.Найти(ЯчейкаМакета.Заголовок, "ИмяПоля"); Если СтрокаИмениПоля <> Неопределено Тогда @@ -6234,30 +6245,30 @@ КолонкаТаблицы.Заголовок = СтрокаИмениПоля.ПолныйПутьКРеквизиту1С; КонецЕсли; КонецЦикла; - + Для Каждого ИсключенноеПоле Из МассивДублейПолей Цикл СтрокаИмениПоля = ТаблицаИменПолей.Найти(ИсключенноеПоле, "ИмяПоля"); Если СтрокаИмениПоля <> Неопределено Тогда ТаблицаЗначенийРеквизитов.Колонки.Добавить(ИсключенноеПоле,, СтрокаИмениПоля.ПолныйПутьКРеквизиту1С); КонецЕсли; КонецЦикла; - + ТаблицаЗначенийРеквизитов.Колонки.Добавить("СтрокаОбработана", Новый ОписаниеТипов("Булево")); - + // Подготовка таблицы для получения соответствия значений реквизитов 1С значениям атрибутов маркетплейса. ТаблицаДанныхАтрибутов = ТаблицаНастроекПолейКатегорий1С.СкопироватьКолонки(); - + МассивТипов = ПростыеТипы(); Для Каждого Колонка Из ТаблицаЗначенийРеквизитов.Колонки Цикл Для Каждого ТипКолонки Из Колонка.ТипЗначения.Типы() Цикл Если ТипКолонки = Тип("Null") Тогда Продолжить; КонецЕсли; - + МассивТипов.Добавить(ТипКолонки); КонецЦикла; КонецЦикла; - + КолонкаЗначениеРеквизита1СТип = Новый ОписаниеТипов(МассивТипов); ТаблицаДанныхАтрибутов.Колонки.Добавить("ЗначениеРеквизита1С", КолонкаЗначениеРеквизита1СТип); ТаблицаДанныхАтрибутов.Колонки.Добавить("ЗначениеРеквизитаОбъект1С", Новый ОписаниеТипов(МассивТипов,, @@ -6271,16 +6282,67 @@ ДобавленныеОсновныеПоля.Вставить(Поле.ПутьКДанным, Поле.ПолеКомпоновкиДанных); КонецЕсли; КонецЦикла; - + Для Каждого СтрокаДанных Из ТаблицаЗначенийРеквизитов Цикл + + ЕстьОшибкаЗаполненияИсточникаКатегории = Ложь; + ТекстОшибкиИсточника = ""; + + ИмяКолонкиКатегории = ""; + Если ЗначениеЗаполнено(СтрокаДанных.ИсточникКатегории) Тогда + ИмяЗначенияПеречисления = ""; + Попытка + ИмяЗначенияПеречисления = ОбщегоНазначения.ИмяЗначенияПеречисления( + СтрокаДанных.ИсточникКатегории); + Исключение + ЕстьОшибкаЗаполненияИсточникаКатегории = Истина; + ТекстОшибки = ОбработкаОшибок.СообщениеОбОшибкеДляПользователя(ИнформацияОбОшибке()); + ТекстОшибкиИсточника = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось определить имя значения перечисления для источника категории. Учетная запись: %1, Номенклатура: %2, Характеристика: %3, Упаковка: %4. По причине: %5'"), + Строка(СтрокаДанных.УчетнаяЗаписьМаркетплейса), + Строка(СтрокаДанных.Номенклатура), + Строка(СтрокаДанных.Характеристика), + Строка(СтрокаДанных.Упаковка), + ТекстОшибки); + КонецПопытки; + Если ИмяЗначенияПеречисления <> "" Тогда + ИмяКолонкиКатегории = "Категория1С_" + ИмяЗначенияПеречисления; + КонецЕсли; + Иначе + ЕстьОшибкаЗаполненияИсточникаКатегории = Истина; + ТекстОшибкиИсточника = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось определить имя значения перечисления для источника категории. Учетная запись: %1, Номенклатура: %2, Характеристика: %3, Упаковка: %4'"), + Строка(СтрокаДанных.УчетнаяЗаписьМаркетплейса), + Строка(СтрокаДанных.Номенклатура), + Строка(СтрокаДанных.Характеристика), + Строка(СтрокаДанных.Упаковка)); + КонецЕсли; + + Если ЕстьОшибкаЗаполненияИсточникаКатегории Тогда + ЗаписьЖурналаРегистрации( + СобытиеЖурналаРегистрации(), + УровеньЖурналаРегистрации.Ошибка,,, + ТекстОшибкиИсточника); + ОбменСВнешнимиСистемамиЛогирование.ЗаписатьВЛог( + ТекстОшибкиИсточника, + СтрокаДанных.УчетнаяЗаписьМаркетплейса, + Истина); + Продолжить; + КонецЕсли; + + // Если источник категории не определен или содержит битую ссылку - + // пропускаем обработку всего набора атрибутов для текущего товара. + Если ПустаяСтрока(ИмяКолонкиКатегории) Тогда + Продолжить; + КонецЕсли; + Для Каждого Колонка Из ТаблицаЗначенийРеквизитов.Колонки Цикл Если ПустаяСтрока(Колонка.Заголовок) Тогда Продолжить; КонецЕсли; - - Отбор = Новый Структура("ПолныйПутьКРеквизиту1С", Колонка.Заголовок); - - ИмяКолонкиКатегории = "Категория1С_" + ОбщегоНазначения.ИмяЗначенияПеречисления(СтрокаДанных.ИсточникКатегории); + + Отбор = Новый Структура("ПолныйПутьКРеквизиту1С", Колонка.Заголовок); + ДобавленноеПоле = ДобавленныеОсновныеПоля.Получить(ИмяКолонкиКатегории); Если ДобавленноеПоле <> Неопределено Тогда СтрокаИмениПоля = ТаблицаИменПолей.Найти(ДобавленноеПоле, "ПолныйПутьКРеквизиту1С"); @@ -6290,18 +6352,18 @@ Продолжить; КонецЕсли; КонецЕсли; - - Отбор.Вставить("Категория1С", СтрокаДанных[ИмяКолонкиКатегории]); - + + Отбор.Вставить("Категория1С", СтрокаДанных[ИмяКолонкиКатегории]); + Если Не ПустаяСтрока(СтрокаДанных.ИдентификаторКатегорииМаркетплейса) Тогда Отбор.Вставить("ИдентификаторКатегорииМаркетплейса", СтрокаДанных.ИдентификаторКатегорииМаркетплейса); КонецЕсли; - + СтрокиПолейКатегории1С = ТаблицаНастроекПолейКатегорий1С.НайтиСтроки(Отбор); - + Если СтрокиПолейКатегории1С.Количество() > 0 Тогда СтрокаДанных.СтрокаОбработана = Истина; - + Для Каждого СтрокаПолейКатегории1С Из СтрокиПолейКатегории1С Цикл НоваяСтрока = ТаблицаДанныхАтрибутов.Добавить(); ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаДанных); @@ -6315,14 +6377,14 @@ КонецЕсли; КонецЦикла; КонецЕсли; - + НоваяСтрока.ЗначениеРеквизита1С = СтрокаДанных[Колонка.Имя]; НоваяСтрока.ЗначениеРеквизитаОбъект1С = НоваяСтрока.ЗначениеРеквизита1С; КонецЦикла; КонецЕсли; КонецЦикла; КонецЦикла; - + Отбор = Новый Структура("СтрокаОбработана", Ложь); СтрокиБезПравилСопоставления = ТаблицаЗначенийРеквизитов.НайтиСтроки(Отбор); Для Каждого СтрокаДанных Из СтрокиБезПравилСопоставления Цикл @@ -6343,24 +6405,24 @@ НоваяСтрока.ДоступенВыборЗначенияИзСписка = Ложь; НоваяСтрока.МаксимальноеКоличествоЗначений = 0; КонецЦикла; - + Если МассивНезаполненныхСопоставлений.Количество() > 0 Тогда ИменаКолонок = "УчетнаяЗаписьМаркетплейса, Номенклатура, Характеристика, Упаковка, ИсточникКатегории, Категория1С, ИсточникКатегорииМаркетплейса, ИдентификаторКатегорииМаркетплейса"; ТаблицаПубликуемыхТоваров = ТаблицаДанныхАтрибутов.Скопировать(, ИменаКолонок); ТаблицаПубликуемыхТоваров.Свернуть(ИменаКолонок); ТаблицаПубликуемыхТоваров.Индексы.Добавить("УчетнаяЗаписьМаркетплейса, Категория1С, ИсточникКатегорииМаркетплейса"); - + Для Каждого СтрокаДанных Из МассивНезаполненныхСопоставлений Цикл Отбор = Новый Структура("УчетнаяЗаписьМаркетплейса, Категория1С, ИсточникКатегорииМаркетплейса"); ЗаполнитьЗначенияСвойств(Отбор, СтрокаДанных); СтрокиПубликации = ТаблицаПубликуемыхТоваров.НайтиСтроки(Отбор); - + Для Каждого СтрокаПубликации Из СтрокиПубликации Цикл Если Не ПустаяСтрока(СтрокаПубликации.ИдентификаторКатегорииМаркетплейса) И СтрокаПубликации.ИдентификаторКатегорииМаркетплейса <> СтрокаДанных.ИдентификаторКатегорииМаркетплейса Тогда Продолжить; КонецЕсли; - + НоваяСтрока = ТаблицаДанныхАтрибутов.Добавить(); ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаПубликации); ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаДанных); @@ -9524,381 +9586,355 @@ ЛогПараметры = ПараметрыКонтекст; ОбменСВнешнимиСистемамиЛогирование.ЗаписатьВЛог( ЛогКомментарий, УчетнаяЗаписьМаркетплейса, , ЛогПараметры ); КонецЕсли; - + Если ЛимитПозицийНаИтерацию > 100 Тогда ЛимитПозицийНаИтерацию = 100; КонецЕсли; - + Результат = ИнтеграцияСМаркетплейсамиСервер.НоваяОшибка(); - + ДанныеСчетчикаВыгрузки = ПолучитьСчетчикВыгрузки(УчетнаяЗаписьМаркетплейса); - ОстатокЗаписей = ДанныеСчетчикаВыгрузки.Остаток; - - Если ОстатокЗаписей = 0 Тогда - ТекстОшибки = НСтр("ru = 'Превышен лимит публикации товаров в сутки.'"); - Результат.КодОшибки = КодыОшибокРегистраСтатусовПубликацииТоваров().ОшибкаПубликацииТоваров; - Результат.ОписаниеОшибки = ТекстОшибки; - ОбменСВнешнимиСистемамиЛогирование.ЗаписатьВЛог( ТекстОшибки, УчетнаяЗаписьМаркетплейса, Истина ); + + Если Не ДанныеСчетчикаВыгрузки.ЗначениеУстановлено Тогда + Результат.КодОшибки = КодыОшибокРегистраСтатусовПубликацииТоваров().ОшибкаОбновлениеДанныхЗапрещено; + Результат.ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Для учетной записи <%1> невозможно обновление данных из-за отсутствия информации о лимитах.'"), + УчетнаяЗаписьМаркетплейса); Возврат Результат; КонецЕсли; - + + ОстатокЗаписей = ДанныеСчетчикаВыгрузки.ОбщийОстатокСоздания; + + КоличествоЗаданийВОчереди = КоличествоЗаданийВОчереди(УчетнаяЗаписьМаркетплейса); + + // Лимит активных заданий на выгрузку + ЛимитЗаданийВОчереди = 500; + + Если КоличествоЗаданийВОчереди >= ЛимитЗаданийВОчереди Тогда + Результат.КодОшибки = КодыОшибокРегистраСтатусовПубликацииТоваров().ОшибкаОбновлениеДанныхЗапрещено; + Результат.ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Для учетной записи <%1> невозможна публикация товаров из-за большого количества (500 заданий и более) необработанных заданий публикации. Публикация будет доступна после обработки ранее отправленных заданий'"), + УчетнаяЗаписьМаркетплейса); + Возврат Результат; + КонецЕсли; + ТаблицаПроверенныхПозиций = Новый ТаблицаЗначений; ТаблицаПроверенныхПозиций.Колонки.Добавить("УчетнаяЗаписьМаркетплейса", Новый ОписаниеТипов("СправочникСсылка.УчетныеЗаписиМаркетплейсов")); ТаблицаПроверенныхПозиций.Колонки.Добавить("Номенклатура", Новый ОписаниеТипов("СправочникСсылка.Номенклатура")); ТаблицаПроверенныхПозиций.Колонки.Добавить("Характеристика", Новый ОписаниеТипов("СправочникСсылка.ХарактеристикиНоменклатуры")); ТаблицаПроверенныхПозиций.Колонки.Добавить("Упаковка", Новый ОписаниеТипов("СправочникСсылка.ЕдиницыИзмерения")); - + ТекстЗапроса = - "ВЫБРАТЬ - | ТаблицаПроверенныхПозиций.УчетнаяЗаписьМаркетплейса КАК УчетнаяЗаписьМаркетплейса, - | ТаблицаПроверенныхПозиций.Номенклатура КАК Номенклатура, - | ТаблицаПроверенныхПозиций.Характеристика КАК Характеристика, - | ТаблицаПроверенныхПозиций.Упаковка КАК Упаковка - |ПОМЕСТИТЬ ТаблицаПроверенныхПозиций - |ИЗ - | &ТаблицаПроверенныхПозиций КАК ТаблицаПроверенныхПозиций - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ ПЕРВЫЕ 100 - | СтатусыПубликацииОбъектовМаркетплейсаOzon.УчетнаяЗаписьМаркетплейса КАК УчетнаяЗаписьМаркетплейса, - | СтатусыПубликацииОбъектовМаркетплейсаOzon.Номенклатура КАК Номенклатура, - | СтатусыПубликацииОбъектовМаркетплейсаOzon.Характеристика КАК Характеристика, - | СтатусыПубликацииОбъектовМаркетплейсаOzon.Упаковка КАК Упаковка, - | СтатусыПубликацииОбъектовМаркетплейсаOzon.ИдентификаторКатегорииМаркетплейса КАК ИдентификаторКатегорииМаркетплейса, - | ВЫБОР - | КОГДА ТИПЗНАЧЕНИЯ(СтатусыПубликацииОбъектовМаркетплейсаOzon.ИсточникКатегорииМаркетплейса) = ТИП(Справочник.Номенклатура) - | ТОГДА ЗНАЧЕНИЕ(Перечисление.ИсточникиКатегорийДляМаркетплейса.ИерархияНоменклатуры) - | КОГДА ТИПЗНАЧЕНИЯ(СтатусыПубликацииОбъектовМаркетплейсаOzon.ИсточникКатегорииМаркетплейса) = ТИП(Справочник.КатегорииНоменклатуры) - | ТОГДА ЗНАЧЕНИЕ(Перечисление.ИсточникиКатегорийДляМаркетплейса.ВидНоменклатуры) - | ИНАЧЕ СправУчетныеЗаписи.ИсточникКатегории - | КОНЕЦ КАК ИсточникКатегории - |ПОМЕСТИТЬ ДанныеПубликации - |ИЗ - | РегистрСведений.СтатусыПубликацииОбъектовМаркетплейсаOzon КАК СтатусыПубликацииОбъектовМаркетплейсаOzon - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.УчетныеЗаписиМаркетплейсов КАК СправУчетныеЗаписи - | ПО СтатусыПубликацииОбъектовМаркетплейсаOzon.УчетнаяЗаписьМаркетплейса = СправУчетныеЗаписи.Ссылка - | ЛЕВОЕ СОЕДИНЕНИЕ ТаблицаПроверенныхПозиций КАК ТаблицаПроверенныхПозиций - | ПО СтатусыПубликацииОбъектовМаркетплейсаOzon.УчетнаяЗаписьМаркетплейса = ТаблицаПроверенныхПозиций.УчетнаяЗаписьМаркетплейса - | И СтатусыПубликацииОбъектовМаркетплейсаOzon.Номенклатура = ТаблицаПроверенныхПозиций.Номенклатура - | И СтатусыПубликацииОбъектовМаркетплейсаOzon.Характеристика = ТаблицаПроверенныхПозиций.Характеристика - | И СтатусыПубликацииОбъектовМаркетплейсаOzon.Упаковка = ТаблицаПроверенныхПозиций.Упаковка - |ГДЕ - | СтатусыПубликацииОбъектовМаркетплейсаOzon.УчетнаяЗаписьМаркетплейса = &УчетнаяЗапись - | И СтатусыПубликацииОбъектовМаркетплейсаOzon.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыОбъектовМаркетплейсаOzon.КПубликации) - | И СтатусыПубликацииОбъектовМаркетплейсаOzon.ВидОбъектаМаркетплейса = ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовМаркетплейсов.Товар) - | И ТаблицаПроверенныхПозиций.Номенклатура ЕСТЬ NULL - | И ВЫБОР - | КОГДА СтатусыПубликацииОбъектовМаркетплейсаOzon.ВыгружатьПоНастройкамУчетнойЗаписи - | ТОГДА СтатусыПубликацииОбъектовМаркетплейсаOzon.УчетнаяЗаписьМаркетплейса.ВыгружатьОписаниеТовара - | ИНАЧЕ СтатусыПубликацииОбъектовМаркетплейсаOzon.ВыгружатьОписаниеТовара - | КОНЕЦ - | И &УсловиеПоИдентификаторамПубликации - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | ДанныеПубликации.УчетнаяЗаписьМаркетплейса КАК УчетнаяЗаписьМаркетплейса, - | ДанныеПубликации.Номенклатура КАК Номенклатура, - | ДанныеПубликации.Характеристика КАК Характеристика, - | ДанныеПубликации.Упаковка КАК Упаковка - |ИЗ - | ДанныеПубликации КАК ДанныеПубликации - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |УНИЧТОЖИТЬ ТаблицаПроверенныхПозиций"; - + "ВЫБРАТЬ + | ТаблицаПроверенныхПозиций.УчетнаяЗаписьМаркетплейса КАК УчетнаяЗаписьМаркетплейса, + | ТаблицаПроверенныхПозиций.Номенклатура КАК Номенклатура, + | ТаблицаПроверенныхПозиций.Характеристика КАК Характеристика, + | ТаблицаПроверенныхПозиций.Упаковка КАК Упаковка + |ПОМЕСТИТЬ ТаблицаПроверенныхПозиций + |ИЗ + | &ТаблицаПроверенныхПозиций КАК ТаблицаПроверенныхПозиций + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ ПЕРВЫЕ 100 + | СтатусыПубликацииОбъектовМаркетплейсаOzon.УчетнаяЗаписьМаркетплейса КАК УчетнаяЗаписьМаркетплейса, + | СтатусыПубликацииОбъектовМаркетплейсаOzon.Номенклатура КАК Номенклатура, + | СтатусыПубликацииОбъектовМаркетплейсаOzon.Характеристика КАК Характеристика, + | СтатусыПубликацииОбъектовМаркетплейсаOzon.Упаковка КАК Упаковка, + | СтатусыПубликацииОбъектовМаркетплейсаOzon.ИдентификаторКатегорииМаркетплейса КАК ИдентификаторКатегорииМаркетплейса, + | ВЫБОР + | КОГДА ТИПЗНАЧЕНИЯ(СтатусыПубликацииОбъектовМаркетплейсаOzon.ИсточникКатегорииМаркетплейса) = ТИП(Справочник.Номенклатура) + | ТОГДА ЗНАЧЕНИЕ(Перечисление.ИсточникиКатегорийДляМаркетплейса.ИерархияНоменклатуры) + | КОГДА ТИПЗНАЧЕНИЯ(СтатусыПубликацииОбъектовМаркетплейсаOzon.ИсточникКатегорииМаркетплейса) = ТИП(Справочник.КатегорииНоменклатуры) + | ТОГДА ЗНАЧЕНИЕ(Перечисление.ИсточникиКатегорийДляМаркетплейса.ВидНоменклатуры) + | ИНАЧЕ СправУчетныеЗаписи.ИсточникКатегории + | КОНЕЦ КАК ИсточникКатегории + |ПОМЕСТИТЬ ДанныеПубликации + |ИЗ + | РегистрСведений.СтатусыПубликацииОбъектовМаркетплейсаOzon КАК СтатусыПубликацииОбъектовМаркетплейсаOzon + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.УчетныеЗаписиМаркетплейсов КАК СправУчетныеЗаписи + | ПО СтатусыПубликацииОбъектовМаркетплейсаOzon.УчетнаяЗаписьМаркетплейса = СправУчетныеЗаписи.Ссылка + | ЛЕВОЕ СОЕДИНЕНИЕ ТаблицаПроверенныхПозиций КАК ТаблицаПроверенныхПозиций + | ПО СтатусыПубликацииОбъектовМаркетплейсаOzon.УчетнаяЗаписьМаркетплейса = ТаблицаПроверенныхПозиций.УчетнаяЗаписьМаркетплейса + | И СтатусыПубликацииОбъектовМаркетплейсаOzon.Номенклатура = ТаблицаПроверенныхПозиций.Номенклатура + | И СтатусыПубликацииОбъектовМаркетплейсаOzon.Характеристика = ТаблицаПроверенныхПозиций.Характеристика + | И СтатусыПубликацииОбъектовМаркетплейсаOzon.Упаковка = ТаблицаПроверенныхПозиций.Упаковка + |ГДЕ + | СтатусыПубликацииОбъектовМаркетплейсаOzon.УчетнаяЗаписьМаркетплейса = &УчетнаяЗапись + | И СтатусыПубликацииОбъектовМаркетплейсаOzon.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыОбъектовМаркетплейсаOzon.КПубликации) + | И СтатусыПубликацииОбъектовМаркетплейсаOzon.ВидОбъектаМаркетплейса = ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовМаркетплейсов.Товар) + | И ТаблицаПроверенныхПозиций.Номенклатура ЕСТЬ NULL + | И ВЫБОР + | КОГДА СтатусыПубликацииОбъектовМаркетплейсаOzon.ВыгружатьПоНастройкамУчетнойЗаписи + | ТОГДА СтатусыПубликацииОбъектовМаркетплейсаOzon.УчетнаяЗаписьМаркетплейса.ВыгружатьОписаниеТовара + | ИНАЧЕ СтатусыПубликацииОбъектовМаркетплейсаOzon.ВыгружатьОписаниеТовара + | КОНЕЦ + | И &УсловиеПоИдентификаторамПубликации + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ДанныеПубликации.УчетнаяЗаписьМаркетплейса КАК УчетнаяЗаписьМаркетплейса, + | ДанныеПубликации.Номенклатура КАК Номенклатура, + | ДанныеПубликации.Характеристика КАК Характеристика, + | ДанныеПубликации.Упаковка КАК Упаковка + |ИЗ + | ДанныеПубликации КАК ДанныеПубликации + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |УНИЧТОЖИТЬ ТаблицаПроверенныхПозиций"; + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "100", Формат(ЛимитПозицийНаИтерацию, "ЧГ=")); - + Запрос = Новый Запрос; Запрос.УстановитьПараметр("УчетнаяЗапись", УчетнаяЗаписьМаркетплейса); - + ПроверятьСоставАтрибутов = Ложь; - + Если ТипЗнч(ИдентификаторыПубликации) = Тип("Массив") И ИдентификаторыПубликации.Количество() > 0 Тогда ПроверятьСоставАтрибутов = Ложь; ТекстЗапроса = СтрЗаменить( ТекстЗапроса, "&УсловиеПоИдентификаторамПубликации", - "СтатусыПубликацииОбъектовМаркетплейсаOzon.ИдентификаторПубликации В (&ИдентификаторыПубликации)"); + "СтатусыПубликацииОбъектовМаркетплейсаOzon.ИдентификаторПубликации В (&ИдентификаторыПубликации)"); Запрос.УстановитьПараметр("ИдентификаторыПубликации", ИдентификаторыПубликации); Иначе ТекстЗапроса = СтрЗаменить( ТекстЗапроса, "&УсловиеПоИдентификаторамПубликации", "ИСТИНА" ); КонецЕсли; - + Запрос.Текст = ТекстЗапроса; - + КоличествоОпубликованныхТоваров = 0; ЕстьЗаписиКПубликации = Ложь; - + СостоянияПубликации = СостоянияПубликации(); - + ВидОбъектаМаркетплейсаТовар = ПредопределенноеЗначение("Перечисление.ВидыОбъектовМаркетплейсов.Товар"); ВидОбъектаМаркетплейсаИзображение = ПредопределенноеЗначение("Перечисление.ВидыОбъектовМаркетплейсов.Изображение"); СтатусЗначениеНеИспользуется = ПредопределенноеЗначение("Перечисление.СтатусыОбъектовМаркетплейсаOzon.НеИспользуется"); - + ТокенДоступа = ИнтеграцияСМаркетплейсамиСервер.ПолучитьТокенДоступаЯндексДиск(УчетнаяЗаписьМаркетплейса); - - КоличествоПубликуемыхЭлементов = 0; - - ЕстьОшибки = Ложь; - + + КоличествоПубликуемыхЭлементов = 0; + + ЕстьОшибки = Ложь; + Пока ОстатокЗаписей > 0 Цикл + Если ОстатокЗаписей < ЛимитПозицийНаИтерацию Тогда ЛимитПозицийНаИтерацию = ОстатокЗаписей; КонецЕсли; - + + Если КоличествоЗаданийВОчереди >= ЛимитЗаданийВОчереди Тогда + Прервать; + КонецЕсли; + МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц; Запрос.УстановитьПараметр("ТаблицаПроверенныхПозиций", ТаблицаПроверенныхПозиций); - - НачатьТранзакцию(); - Попытка - УстановитьПривилегированныйРежим(Истина); - //@skip-check query-in-loop - РезультатЗапроса = Запрос.Выполнить(); - УстановитьПривилегированныйРежим(Ложь); - - Если РезультатЗапроса.Пустой()Тогда - ОтменитьТранзакцию(); + + УстановитьПривилегированныйРежим(Истина); + //@skip-check query-in-loop + РезультатЗапроса = Запрос.Выполнить(); + УстановитьПривилегированныйРежим(Ложь); + + Если РезультатЗапроса.Пустой()Тогда + Прервать; + Иначе + ВыборкаДанных = РезультатЗапроса.Выбрать(); + Если ВыборкаДанных.Количество() = 0 Тогда Прервать; Иначе - ВыборкаДанных = РезультатЗапроса.Выбрать(); - Если ВыборкаДанных.Количество() = 0 Тогда - ОтменитьТранзакцию(); - Прервать; - Иначе - ОстатокЗаписей = ОстатокЗаписей - ВыборкаДанных.Количество(); - ЕстьЗаписиКПубликации = Истина; - КонецЕсли; + ОстатокЗаписей = ОстатокЗаписей - ВыборкаДанных.Количество(); + ЕстьЗаписиКПубликации = Истина; КонецЕсли; - - // Блокировка изменения публикуемых товаров. - БлокировкаДанных = Новый БлокировкаДанных; - ЭлементБлокировкиДанных = БлокировкаДанных.Добавить("РегистрСведений.СтатусыПубликацииОбъектовМаркетплейсаOzon"); - ЭлементБлокировкиДанных.Режим = РежимБлокировкиДанных.Разделяемый; - ЭлементБлокировкиДанных.УстановитьЗначение("ВидОбъектаМаркетплейса", ВидОбъектаМаркетплейсаТовар); - ЭлементБлокировкиДанных.ИсточникДанных = РезультатЗапроса; - ЭлементБлокировкиДанных.ИспользоватьИзИсточникаДанных("УчетнаяЗаписьМаркетплейса", "УчетнаяЗаписьМаркетплейса"); - ЭлементБлокировкиДанных.ИспользоватьИзИсточникаДанных("Номенклатура", "Номенклатура"); - ЭлементБлокировкиДанных.ИспользоватьИзИсточникаДанных("Характеристика", "Характеристика"); - ЭлементБлокировкиДанных.ИспользоватьИзИсточникаДанных("Упаковка", "Упаковка"); - БлокировкаДанных.Заблокировать(); - - СписокПараметров = СписокПараметровПодготовкиДанныхПубликуемыхТоваров(); - СписокПараметров.ПолучитьАтрибуты = Истина; - СписокПараметров.ДляПубликации = Истина; - СписокПараметров.ПроверятьСоставАтрибутов = ПроверятьСоставАтрибутов; - СписокПараметров.ПолучитьИзображения = Истина; - СписокПараметров.ПроверитьОшибкиЗаполнения = Истина; - - //@skip-check query-in-loop - ДанныеПубликации = ПодготовитьДанныеПубликуемыхТоваров(МенеджерВременныхТаблиц, СписокПараметров, ПараметрыКонтекст); - - МассивДанныхПубликации = Новый Массив; - КоличествоПубликуемыхЭлементов = 0; + КонецЕсли; + + СписокПараметров = СписокПараметровПодготовкиДанныхПубликуемыхТоваров(); + СписокПараметров.ПолучитьАтрибуты = Истина; + СписокПараметров.ДляПубликации = Истина; + СписокПараметров.ПроверятьСоставАтрибутов = ПроверятьСоставАтрибутов; + СписокПараметров.ПолучитьИзображения = Истина; + СписокПараметров.ПроверитьОшибкиЗаполнения = Истина; + + //@skip-check query-in-loop + ДанныеПубликации = ПодготовитьДанныеПубликуемыхТоваров(МенеджерВременныхТаблиц, СписокПараметров, ПараметрыКонтекст); + + МассивДанныхПубликации = Новый Массив; + КоличествоПубликуемыхЭлементов = 0; + + Для Каждого СтрокаПубликации Из ДанныеПубликации Цикл + НоваяСтрока = ТаблицаПроверенныхПозиций.Добавить(); + ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаПубликации); - Для Каждого СтрокаПубликации Из ДанныеПубликации Цикл - НоваяСтрока = ТаблицаПроверенныхПозиций.Добавить(); - ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаПубликации); - - Если СтрокаПубликации.ЕстьКритичныеОшибки Тогда + Если СтрокаПубликации.ЕстьКритичныеОшибки Тогда + Запись = РегистрыСведений.СтатусыПубликацииОбъектовМаркетплейсаOzon.СоздатьМенеджерЗаписи(); + Запись.ВидОбъектаМаркетплейса = ВидОбъектаМаркетплейсаТовар; + ЗаполнитьЗначенияСвойств(Запись, СтрокаПубликации, "УчетнаяЗаписьМаркетплейса, Номенклатура, Характеристика, Упаковка"); + Запись.ОбъектПубликации = Неопределено; + Запись.Прочитать(); + + Если Запись.Выбран() И Запись.ОписаниеОшибки <> СтрокаПубликации.ОписаниеОшибки Тогда + ЗаполнитьЗначенияСвойств(Запись, СтрокаПубликации, "КодОшибки, ОписаниеОшибки"); + Запись.Записать(); + КонецЕсли; + Иначе + АтрибутыТовара = АтрибутыТовараДляПубликации(СтрокаПубликации, УчетнаяЗаписьМаркетплейса, ТокенДоступа); + + Если АтрибутыТовара.Свойство("ОписаниеОшибки") Тогда Запись = РегистрыСведений.СтатусыПубликацииОбъектовМаркетплейсаOzon.СоздатьМенеджерЗаписи(); - Запись.ВидОбъектаМаркетплейса = ВидОбъектаМаркетплейсаТовар; + Запись.ВидОбъектаМаркетплейса = ВидОбъектаМаркетплейсаТовар; ЗаполнитьЗначенияСвойств(Запись, СтрокаПубликации, "УчетнаяЗаписьМаркетплейса, Номенклатура, Характеристика, Упаковка"); Запись.ОбъектПубликации = Неопределено; Запись.Прочитать(); - - Если Запись.Выбран() И Запись.ОписаниеОшибки <> СтрокаПубликации.ОписаниеОшибки Тогда - ЗаполнитьЗначенияСвойств(Запись, СтрокаПубликации, "КодОшибки, ОписаниеОшибки"); + + Если Запись.Выбран() И Не ПустаяСтрока(АтрибутыТовара.ОписаниеОшибки) + И Запись.ОписаниеОшибки <> АтрибутыТовара.ОписаниеОшибки Тогда + Запись.КодОшибки = КодыОшибокРегистраСтатусовПубликацииТоваров().ОшибкаЗаполненияДанных; + Запись.ОписаниеОшибки = АтрибутыТовара.ОписаниеОшибки; Запись.Записать(); + + Результат.ОписаниеОшибки = Результат.ОписаниеОшибки + ?(ПустаяСтрока(Результат.ОписаниеОшибки), "", Символы.ПС) + + АтрибутыТовара.ОписаниеОшибки; КонецЕсли; - Иначе - АтрибутыТовара = АтрибутыТовараДляПубликации(СтрокаПубликации, УчетнаяЗаписьМаркетплейса, ТокенДоступа); - - Если АтрибутыТовара.Свойство("ОписаниеОшибки") Тогда - Запись = РегистрыСведений.СтатусыПубликацииОбъектовМаркетплейсаOzon.СоздатьМенеджерЗаписи(); - Запись.ВидОбъектаМаркетплейса = ВидОбъектаМаркетплейсаТовар; - ЗаполнитьЗначенияСвойств(Запись, СтрокаПубликации, "УчетнаяЗаписьМаркетплейса, Номенклатура, Характеристика, Упаковка"); - Запись.ОбъектПубликации = Неопределено; - Запись.Прочитать(); - - Если Запись.Выбран() И Не ПустаяСтрока(АтрибутыТовара.ОписаниеОшибки) - И Запись.ОписаниеОшибки <> АтрибутыТовара.ОписаниеОшибки Тогда - Запись.КодОшибки = КодыОшибокРегистраСтатусовПубликацииТоваров().ОшибкаЗаполненияДанных; - Запись.ОписаниеОшибки = АтрибутыТовара.ОписаниеОшибки; - Запись.Записать(); - - Результат.ОписаниеОшибки = Результат.ОписаниеОшибки + ?(ПустаяСтрока(Результат.ОписаниеОшибки), "", Символы.ПС) - + АтрибутыТовара.ОписаниеОшибки; - КонецЕсли; - ИначеЕсли Не ПустаяСтрока(АтрибутыТовара.offer_id) Тогда - МассивДанныхПубликации.Добавить(АтрибутыТовара); - КоличествоПубликуемыхЭлементов = КоличествоПубликуемыхЭлементов + 1; - КонецЕсли; - - Если КоличествоПубликуемыхЭлементов >= ЛимитПозицийНаИтерацию Тогда - Прервать; - КонецЕсли; + ИначеЕсли Не ПустаяСтрока(АтрибутыТовара.offer_id) Тогда + МассивДанныхПубликации.Добавить(АтрибутыТовара); + КоличествоПубликуемыхЭлементов = КоличествоПубликуемыхЭлементов + 1; КонецЕсли; - КонецЦикла; - - Если КоличествоПубликуемыхЭлементов > 0 Тогда - - ПараметрыЗапроса = Новый Структура; - ПараметрыЗапроса.Вставить( "ДанныеПубликации", МассивДанныхПубликации ); - Ответ = ВыполнитьПубликациюТоваровВСервисе( УчетнаяЗаписьМаркетплейса, ПараметрыЗапроса ); - - Если Ответ <> Неопределено Тогда - - // запись номера задания публикации - НомерЗаданияПубликации = Ответ; - НомерЗаданияПубликацииСтрокой = ЧислоВСтроку( НомерЗаданияПубликации ); - - КоличествоОпубликованныхТоваров = КоличествоОпубликованныхТоваров + ДанныеПубликации.Количество(); - - СостояниеТовара = СостоянияПубликации.ОтправленНаМодерацию; - ДатаОбновления = ТекущаяДатаСеанса(); - - Отбор = Новый Структура("ЕстьКритичныеОшибки", Ложь); - СтрокиИзмененияСтатуса = ДанныеПубликации.НайтиСтроки(Отбор); - Для Каждого СтрокаПубликации Из СтрокиИзмененияСтатуса Цикл - - //@skip-check query-in-loop - ИзображенияСоздатьЗаписиВРегистреСтатусовПубликацииОбъектовМаркетплейсаOzonПоНоменклатуре( СтрокаПубликации.Номенклатура ); - - Запись = РегистрыСведений.СтатусыПубликацииОбъектовМаркетплейсаOzon.СоздатьМенеджерЗаписи(); - Запись.ВидОбъектаМаркетплейса = ВидОбъектаМаркетплейсаТовар; - ЗаполнитьЗначенияСвойств(Запись, СтрокаПубликации, "УчетнаяЗаписьМаркетплейса, Номенклатура, Характеристика, Упаковка"); - Запись.ОбъектПубликации = Неопределено; - Запись.Прочитать(); - - Если Запись.Выбран() Тогда - Запись.ЗаданиеПубликации = НомерЗаданияПубликацииСтрокой; - - Запись.КодОшибки = ""; - Запись.ОписаниеОшибки = ""; - Запись.Статус = СостояниеТовара.Статус; - Запись.Состояние = СостояниеТовара.Состояние; - Запись.ОписаниеСостояния = СостояниеТовара.ОписаниеСостояния; - - ДанныеДляПубликацииЦены = СтрокаПубликации.ДанныеДляПубликации.Цены; - ИнформацияЦеныДоСкидок = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры( ДанныеДляПубликацииЦены, "ВидЦеныДоСкидок"); - ИнформацияЦеныСУчетомСкидок = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры( ДанныеДляПубликацииЦены, "ВидЦеныСУчетомСкидок"); - ИнформацияЦеныМинимальная = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры( ДанныеДляПубликацииЦены, "ВидЦеныМинимальныхЦен"); - - Запись.ЦенаДоСкидки = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ИнформацияЦеныДоСкидок, "Цена", 0); - Запись.ЦенаСоСкидкой = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ИнформацияЦеныСУчетомСкидок, "Цена", 0); - Запись.МинимальнаяЦена = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ИнформацияЦеныМинимальная, "Цена", 0); - Запись.ДатаВыгрузкиЦенПродажи = ДатаОбновления; - - Запись.Записать(); - КонецЕсли; - - // запись статусов Изображений - Отбор = Новый Структура("ВидОбъектаМаркетплейса", ПредопределенноеЗначение("Перечисление.ВидыОбъектовМаркетплейсов.Изображение")); - СтрокиИзображений = СтрокаПубликации.ОбъектыПубликации.НайтиСтроки(Отбор); - Для Каждого СтрокаИзображения Из СтрокиИзображений Цикл - Если СтрокаИзображения.Статус = СтатусЗначениеНеИспользуется Тогда - Продолжить; - КонецЕсли; - - Запись = РегистрыСведений.СтатусыПубликацииОбъектовМаркетплейсаOzon.СоздатьМенеджерЗаписи(); - Запись.ВидОбъектаМаркетплейса = ВидОбъектаМаркетплейсаИзображение; - ЗаполнитьЗначенияСвойств(Запись, СтрокаПубликации, "УчетнаяЗаписьМаркетплейса, Номенклатура, Характеристика, Упаковка"); - Запись.ОбъектПубликации = СтрокаИзображения.ОбъектПубликации; - Запись.Прочитать(); - - Если Запись.Выбран() Тогда - ЗаполнитьПубличнуюСсылкуИзображений = (Запись.ПредставлениеОбъектаМаркетплейса <> СтрокаИзображения.ПредставлениеОбъектаМаркетплейса); - - Если Не ЗаполнитьПубличнуюСсылкуИзображений Тогда - // Запись статуса для изображения конкретного товара. - Запись.ДанныеОбъекта = Новый ХранилищеЗначения(СтрокаИзображения.ДанныеОбъекта); - Запись.ЗаданиеПубликации = НомерЗаданияПубликацииСтрокой; - - Запись.Статус = СостояниеТовара.СтатусОбъектаПубликации; - Запись.Состояние = СостояниеТовара.СостояниеОбъектаПубликации; - Запись.ОписаниеСостояния = СостояниеТовара.ОписаниеСостоянияОбъектаПубликации; - - Запись.Записать(); - Иначе - // Запись публичной ссылки URL изображения для всех товаров с этим изображением. - БлокировкаДанных = Новый БлокировкаДанных; - ЭлементБлокировкиДанных = БлокировкаДанных.Добавить("РегистрСведений.СтатусыПубликацииОбъектовМаркетплейсаOzon"); - ЭлементБлокировкиДанных.УстановитьЗначение("УчетнаяЗаписьМаркетплейса", УчетнаяЗаписьМаркетплейса); - ЭлементБлокировкиДанных.УстановитьЗначение("ВидОбъектаМаркетплейса", ВидОбъектаМаркетплейсаИзображение); - ЭлементБлокировкиДанных.УстановитьЗначение("Номенклатура", СтрокаПубликации.Номенклатура); - ЭлементБлокировкиДанных.УстановитьЗначение("ОбъектПубликации", СтрокаИзображения.ОбъектПубликации); - БлокировкаДанных.Заблокировать(); - - НаборЗаписей = РегистрыСведений.СтатусыПубликацииОбъектовМаркетплейсаOzon.СоздатьНаборЗаписей(); - НаборЗаписей.Отбор.УчетнаяЗаписьМаркетплейса.Установить(УчетнаяЗаписьМаркетплейса); - НаборЗаписей.Отбор.ВидОбъектаМаркетплейса.Установить(ВидОбъектаМаркетплейсаИзображение); - НаборЗаписей.Отбор.Номенклатура.Установить(СтрокаПубликации.Номенклатура); - НаборЗаписей.Отбор.ОбъектПубликации.Установить(СтрокаИзображения.ОбъектПубликации); - НаборЗаписей.Прочитать(); - - Для Каждого Запись Из НаборЗаписей Цикл - Запись.ПредставлениеОбъектаМаркетплейса = СтрокаИзображения.ПредставлениеОбъектаМаркетплейса;//URL - - Если Запись.Характеристика = СтрокаПубликации.Характеристика - И Запись.Упаковка = СтрокаПубликации.Упаковка Тогда - // Запись статуса для изображения конкретного товара. - Запись.ЗаданиеПубликации = НомерЗаданияПубликацииСтрокой; - - Запись.Статус = СостояниеТовара.СтатусОбъектаПубликации; - Запись.Состояние = СостояниеТовара.СостояниеОбъектаПубликации; - Запись.ОписаниеСостояния = СостояниеТовара.ОписаниеСостоянияОбъектаПубликации; - - Запись.ДанныеОбъекта = Новый ХранилищеЗначения(СтрокаИзображения.ДанныеОбъекта); - Иначе - ДанныеОбъекта = Запись.ДанныеОбъекта.Получить(); - ДанныеОбъекта.Вставить("СсылкаНаФайлВСервисеПубличныхСсылок", СтрокаИзображения.ДанныеОбъекта.СсылкаНаФайлВСервисеПубличныхСсылок); - Запись.ДанныеОбъекта = Новый ХранилищеЗначения(ДанныеОбъекта); - КонецЕсли; - КонецЦикла; - - НаборЗаписей.Записать(); - КонецЕсли; - КонецЕсли; - КонецЦикла; - КонецЦикла; + Если КоличествоПубликуемыхЭлементов >= ЛимитПозицийНаИтерацию Тогда + Прервать; КонецЕсли; КонецЕсли; - - ЗафиксироватьТранзакцию(); - Исключение - ОтменитьТранзакцию(); - - ЕстьОшибки = Истина; - - ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке() ); - ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка,,, ТекстОшибки ); + КонецЦикла; + + Если КоличествоПубликуемыхЭлементов > 0 Тогда - ОбщегоНазначения.СообщитьПользователю( ТекстОшибки ); + ПараметрыЗапроса = Новый Структура; + ПараметрыЗапроса.Вставить( "ДанныеПубликации", МассивДанныхПубликации ); - ОбменСВнешнимиСистемамиЛогирование.ЗаписатьВЛог( УчетнаяЗаписьМаркетплейса, ТекстОшибки, , Истина ); + Ответ = ВыполнитьПубликациюТоваровВСервисе( УчетнаяЗаписьМаркетплейса, ПараметрыЗапроса ); - Прервать; - - КонецПопытки; - + Если Ответ <> Неопределено Тогда + + КоличествоЗаданийВОчереди = КоличествоЗаданийВОчереди + 1; + + // запись номера задания публикации + НомерЗаданияПубликации = Ответ; + НомерЗаданияПубликацииСтрокой = ЧислоВСтроку( НомерЗаданияПубликации ); + + КоличествоОпубликованныхТоваров = КоличествоОпубликованныхТоваров + ДанныеПубликации.Количество(); + + СостояниеТовара = СостоянияПубликации.ОтправленНаМодерацию; + ДатаОбновления = ТекущаяДатаСеанса(); + + Отбор = Новый Структура("ЕстьКритичныеОшибки", Ложь); + СтрокиИзмененияСтатуса = ДанныеПубликации.НайтиСтроки(Отбор); + Для Каждого СтрокаПубликации Из СтрокиИзмененияСтатуса Цикл + + //@skip-check query-in-loop + ИзображенияСоздатьЗаписиВРегистреСтатусовПубликацииОбъектовМаркетплейсаOzonПоНоменклатуре( СтрокаПубликации.Номенклатура ); + + Запись = РегистрыСведений.СтатусыПубликацииОбъектовМаркетплейсаOzon.СоздатьМенеджерЗаписи(); + Запись.ВидОбъектаМаркетплейса = ВидОбъектаМаркетплейсаТовар; + ЗаполнитьЗначенияСвойств(Запись, СтрокаПубликации, "УчетнаяЗаписьМаркетплейса, Номенклатура, Характеристика, Упаковка"); + Запись.ОбъектПубликации = Неопределено; + Запись.Прочитать(); + + Если Запись.Выбран() Тогда + Запись.ЗаданиеПубликации = НомерЗаданияПубликацииСтрокой; + + Запись.КодОшибки = ""; + Запись.ОписаниеОшибки = ""; + Запись.Статус = СостояниеТовара.Статус; + Запись.Состояние = СостояниеТовара.Состояние; + Запись.ОписаниеСостояния = СостояниеТовара.ОписаниеСостояния; + + ДанныеДляПубликацииЦены = СтрокаПубликации.ДанныеДляПубликации.Цены; + ИнформацияЦеныДоСкидок = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры( ДанныеДляПубликацииЦены, "ВидЦеныДоСкидок"); + ИнформацияЦеныСУчетомСкидок = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры( ДанныеДляПубликацииЦены, "ВидЦеныСУчетомСкидок"); + ИнформацияЦеныМинимальная = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры( ДанныеДляПубликацииЦены, "ВидЦеныМинимальныхЦен"); + + Запись.ЦенаДоСкидки = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ИнформацияЦеныДоСкидок, "Цена", 0); + Запись.ЦенаСоСкидкой = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ИнформацияЦеныСУчетомСкидок, "Цена", 0); + Запись.МинимальнаяЦена = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ИнформацияЦеныМинимальная, "Цена", 0); + Запись.ДатаВыгрузкиЦенПродажи = ДатаОбновления; + + Запись.Записать(); + КонецЕсли; + + // запись статусов Изображений + Отбор = Новый Структура("ВидОбъектаМаркетплейса", ПредопределенноеЗначение("Перечисление.ВидыОбъектовМаркетплейсов.Изображение")); + СтрокиИзображений = СтрокаПубликации.ОбъектыПубликации.НайтиСтроки(Отбор); + Для Каждого СтрокаИзображения Из СтрокиИзображений Цикл + Если СтрокаИзображения.Статус = СтатусЗначениеНеИспользуется Тогда + Продолжить; + КонецЕсли; + + Запись = РегистрыСведений.СтатусыПубликацииОбъектовМаркетплейсаOzon.СоздатьМенеджерЗаписи(); + Запись.ВидОбъектаМаркетплейса = ВидОбъектаМаркетплейсаИзображение; + ЗаполнитьЗначенияСвойств(Запись, СтрокаПубликации, "УчетнаяЗаписьМаркетплейса, Номенклатура, Характеристика, Упаковка"); + Запись.ОбъектПубликации = СтрокаИзображения.ОбъектПубликации; + Запись.Прочитать(); + + Если Запись.Выбран() Тогда + ЗаполнитьПубличнуюСсылкуИзображений = (Запись.ПредставлениеОбъектаМаркетплейса <> СтрокаИзображения.ПредставлениеОбъектаМаркетплейса); + + Если Не ЗаполнитьПубличнуюСсылкуИзображений Тогда + // Запись статуса для изображения конкретного товара. + Запись.ДанныеОбъекта = Новый ХранилищеЗначения(СтрокаИзображения.ДанныеОбъекта); + Запись.ЗаданиеПубликации = НомерЗаданияПубликацииСтрокой; + + Запись.Статус = СостояниеТовара.СтатусОбъектаПубликации; + Запись.Состояние = СостояниеТовара.СостояниеОбъектаПубликации; + Запись.ОписаниеСостояния = СостояниеТовара.ОписаниеСостоянияОбъектаПубликации; + + Запись.Записать(); + Иначе + // Запись публичной ссылки URL изображения для всех товаров с этим изображением. + НаборЗаписей = РегистрыСведений.СтатусыПубликацииОбъектовМаркетплейсаOzon.СоздатьНаборЗаписей(); + НаборЗаписей.Отбор.УчетнаяЗаписьМаркетплейса.Установить(УчетнаяЗаписьМаркетплейса); + НаборЗаписей.Отбор.ВидОбъектаМаркетплейса.Установить(ВидОбъектаМаркетплейсаИзображение); + НаборЗаписей.Отбор.Номенклатура.Установить(СтрокаПубликации.Номенклатура); + НаборЗаписей.Отбор.ОбъектПубликации.Установить(СтрокаИзображения.ОбъектПубликации); + НаборЗаписей.Прочитать(); + + Если Запись.Характеристика = СтрокаПубликации.Характеристика + И Запись.Упаковка = СтрокаПубликации.Упаковка Тогда + // Запись статуса для изображения конкретного товара. + Запись.ЗаданиеПубликации = НомерЗаданияПубликацииСтрокой; + Запись.Статус = СостояниеТовара.СтатусОбъектаПубликации; + Запись.Состояние = СостояниеТовара.СостояниеОбъектаПубликации; + Запись.ОписаниеСостояния = СостояниеТовара.ОписаниеСостоянияОбъектаПубликации; + Запись.ДанныеОбъекта = Новый ХранилищеЗначения(СтрокаИзображения.ДанныеОбъекта); + Иначе + ДанныеОбъекта = Запись.ДанныеОбъекта.Получить(); + ДанныеОбъекта.Вставить("СсылкаНаФайлВСервисеПубличныхСсылок", СтрокаИзображения.ДанныеОбъекта.СсылкаНаФайлВСервисеПубличныхСсылок); + Запись.ДанныеОбъекта = Новый ХранилищеЗначения(ДанныеОбъекта); + КонецЕсли; + + НаборЗаписей.Записать(); + КонецЕсли; + КонецЕсли; + КонецЦикла; + КонецЦикла; + КонецЕсли; + КонецЕсли; + Если КоличествоПубликуемыхЭлементов >= ЛимитПозицийНаИтерацию Тогда Прервать; КонецЕсли; КонецЦикла; - - - Если ЕстьОшибки = Истина Тогда + + Если ЕстьОшибки = Истина Тогда + ИначеЕсли ЕстьЗаписиКПубликации И КоличествоОпубликованныхТоваров = 0 Тогда Результат.КодОшибки = КодыОшибокРегистраСтатусовПубликацииТоваров().ОшибкаПубликацииТоваров; Результат.ОписаниеОшибки = НСтр("ru = 'Не найдены товары, доступные для публикации. Необходимо проверить наличие ошибок в товарах к публикации.'"); КонецЕсли; - + Возврат Результат; КонецФункции @@ -10676,7 +10712,7 @@ Если ОбменСВнешнимиСистемамиЛогированиеПовтИсп.ЛогированиеВключено( УчетнаяЗапись ) Тогда СтекВызоваСтр = ОбменСВнешнимиСистемамиЛогирование.СтекВызоваПолучить(); - + ЛогКомментарий = НСтр("ru = 'ВыполнитьПроверкуПубликацииИзображенийТоваров:'") + Символы.ПС + НСтр("ru = 'Учетная запись:'") + Символы.ПС + ОбменСВнешнимиСистемамиЛогирование.ОбъектПредставление( УчетнаяЗапись ) + ОбменСВнешнимиСистемамиЛогирование.КомментарийРазделительБлоков() @@ -10687,35 +10723,35 @@ Запрос = Новый Запрос; Запрос.УстановитьПараметр("УчетнаяЗапись", УчетнаяЗапись); Запрос.Текст = - "ВЫБРАТЬ РАЗРЕШЕННЫЕ - | СтатусыПубликацииОбъектовМаркетплейсаOzon_Товары.ИдентификаторОбъектаМаркетплейса КАК ИдентификаторОбъектаМаркетплейса, - | СтатусыПубликацииОбъектовМаркетплейсаOzon.ВидОбъектаМаркетплейса КАК ВидОбъектаМаркетплейса, - | СтатусыПубликацииОбъектовМаркетплейсаOzon.Номенклатура КАК Номенклатура, - | СтатусыПубликацииОбъектовМаркетплейсаOzon.Характеристика КАК Характеристика, - | СтатусыПубликацииОбъектовМаркетплейсаOzon.Упаковка КАК Упаковка, - | СтатусыПубликацииОбъектовМаркетплейсаOzon.ОбъектПубликации КАК ОбъектПубликации, - | СтатусыПубликацииОбъектовМаркетплейсаOzon.ИдентификаторОбъектаМаркетплейса КАК ИндексИзображенияВКоллекции, - | """" КАК ИдентификаторПубликации, - | СтатусыПубликацииОбъектовМаркетплейсаOzon.ПредставлениеОбъектаМаркетплейса КАК ПредставлениеОбъектаМаркетплейса, - | СтатусыПубликацииОбъектовМаркетплейсаOzon.ДанныеОбъекта КАК ДанныеОбъекта - |ИЗ - | РегистрСведений.СтатусыПубликацииОбъектовМаркетплейсаOzon КАК СтатусыПубликацииОбъектовМаркетплейсаOzon - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СтатусыПубликацииОбъектовМаркетплейсаOzon КАК СтатусыПубликацииОбъектовМаркетплейсаOzon_Товары - | ПО СтатусыПубликацииОбъектовМаркетплейсаOzon.УчетнаяЗаписьМаркетплейса = СтатусыПубликацииОбъектовМаркетплейсаOzon_Товары.УчетнаяЗаписьМаркетплейса - | И СтатусыПубликацииОбъектовМаркетплейсаOzon.Номенклатура = СтатусыПубликацииОбъектовМаркетплейсаOzon_Товары.Номенклатура - | И СтатусыПубликацииОбъектовМаркетплейсаOzon.Характеристика = СтатусыПубликацииОбъектовМаркетплейсаOzon_Товары.Характеристика - | И СтатусыПубликацииОбъектовМаркетплейсаOzon.Упаковка = СтатусыПубликацииОбъектовМаркетплейсаOzon_Товары.Упаковка - | И (СтатусыПубликацииОбъектовМаркетплейсаOzon_Товары.ВидОбъектаМаркетплейса = ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовМаркетплейсов.Товар)) - | И (СтатусыПубликацииОбъектовМаркетплейсаOzon_Товары.ИдентификаторОбъектаМаркетплейса <> """") - |ГДЕ - | СтатусыПубликацииОбъектовМаркетплейсаOzon.УчетнаяЗаписьМаркетплейса = &УчетнаяЗапись - | И СтатусыПубликацииОбъектовМаркетплейсаOzon.ВидОбъектаМаркетплейса = ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовМаркетплейсов.Изображение) - | И СтатусыПубликацииОбъектовМаркетплейсаOzon.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыОбъектовМаркетплейсаOzon.НаМодерации) - | - |УПОРЯДОЧИТЬ ПО - | СтатусыПубликацииОбъектовМаркетплейсаOzon.НаименованиеОбъектаМаркетплейса - |ИТОГИ ПО - | ИдентификаторОбъектаМаркетплейса"; + "ВЫБРАТЬ РАЗРЕШЕННЫЕ + | СтатусыПубликацииОбъектовМаркетплейсаOzon_Товары.ИдентификаторОбъектаМаркетплейса КАК ИдентификаторОбъектаМаркетплейса, + | СтатусыПубликацииОбъектовМаркетплейсаOzon.ВидОбъектаМаркетплейса КАК ВидОбъектаМаркетплейса, + | СтатусыПубликацииОбъектовМаркетплейсаOzon.Номенклатура КАК Номенклатура, + | СтатусыПубликацииОбъектовМаркетплейсаOzon.Характеристика КАК Характеристика, + | СтатусыПубликацииОбъектовМаркетплейсаOzon.Упаковка КАК Упаковка, + | СтатусыПубликацииОбъектовМаркетплейсаOzon.ОбъектПубликации КАК ОбъектПубликации, + | СтатусыПубликацииОбъектовМаркетплейсаOzon.ИдентификаторОбъектаМаркетплейса КАК ИндексИзображенияВКоллекции, + | """" КАК ИдентификаторПубликации, + | СтатусыПубликацииОбъектовМаркетплейсаOzon.ПредставлениеОбъектаМаркетплейса КАК ПредставлениеОбъектаМаркетплейса, + | СтатусыПубликацииОбъектовМаркетплейсаOzon.ДанныеОбъекта КАК ДанныеОбъекта + |ИЗ + | РегистрСведений.СтатусыПубликацииОбъектовМаркетплейсаOzon КАК СтатусыПубликацииОбъектовМаркетплейсаOzon + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СтатусыПубликацииОбъектовМаркетплейсаOzon КАК СтатусыПубликацииОбъектовМаркетплейсаOzon_Товары + | ПО СтатусыПубликацииОбъектовМаркетплейсаOzon.УчетнаяЗаписьМаркетплейса = СтатусыПубликацииОбъектовМаркетплейсаOzon_Товары.УчетнаяЗаписьМаркетплейса + | И СтатусыПубликацииОбъектовМаркетплейсаOzon.Номенклатура = СтатусыПубликацииОбъектовМаркетплейсаOzon_Товары.Номенклатура + | И СтатусыПубликацииОбъектовМаркетплейсаOzon.Характеристика = СтатусыПубликацииОбъектовМаркетплейсаOzon_Товары.Характеристика + | И СтатусыПубликацииОбъектовМаркетплейсаOzon.Упаковка = СтатусыПубликацииОбъектовМаркетплейсаOzon_Товары.Упаковка + | И (СтатусыПубликацииОбъектовМаркетплейсаOzon_Товары.ВидОбъектаМаркетплейса = ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовМаркетплейсов.Товар)) + | И (СтатусыПубликацииОбъектовМаркетплейсаOzon_Товары.ИдентификаторОбъектаМаркетплейса <> """") + |ГДЕ + | СтатусыПубликацииОбъектовМаркетплейсаOzon.УчетнаяЗаписьМаркетплейса = &УчетнаяЗапись + | И СтатусыПубликацииОбъектовМаркетплейсаOzon.ВидОбъектаМаркетплейса = ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовМаркетплейсов.Изображение) + | И СтатусыПубликацииОбъектовМаркетплейсаOzon.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыОбъектовМаркетплейсаOzon.НаМодерации) + | + |УПОРЯДОЧИТЬ ПО + | СтатусыПубликацииОбъектовМаркетплейсаOzon.НаименованиеОбъектаМаркетплейса + |ИТОГИ ПО + | ИдентификаторОбъектаМаркетплейса"; СоответствиеСостоянийПубликации = СоответствиеСостоянийПубликации(); @@ -10726,7 +10762,7 @@ Если ОбменСВнешнимиСистемамиЛогированиеПовтИсп.ЛогированиеВключено( УчетнаяЗапись ) Тогда ПубликацииСтр = ОбменСВнешнимиСистемамиЛогирование.ОбъектПредставление( РезультатЗапроса.Выгрузить() ); СтекВызоваСтр = ОбменСВнешнимиСистемамиЛогирование.СтекВызоваПолучить(); - + ЛогКомментарий = НСтр("ru = 'ВыполнитьПроверкуПубликацииИзображенийТоваров:'") + Символы.ПС + "Публикации:" + Символы.ПС + ПубликацииСтр + ОбменСВнешнимиСистемамиЛогирование.КомментарийРазделительБлоков() @@ -10737,7 +10773,21 @@ ВыборкаИдентификаторовТоваров = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаИдентификаторовТоваров.Следующий() Цикл ИдентификаторТовара = СтроковыеФункцииКлиентСервер.СтрокаВЧисло(ВыборкаИдентификаторовТоваров.ИдентификаторОбъектаМаркетплейса); - + + Если ИдентификаторТовара = Неопределено Тогда + ТекстОшибкиИсточника = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Пропуск проверки публикации изображений: некорректный Идентификатор Ozon. Учетная запись: %1, Номенклатура: %2, Характеристика: %3, Упаковка: %4, Идентификатор: %5.'"), + Строка(УчетнаяЗапись), + Строка(ВыборкаИдентификаторовТоваров.Номенклатура), + Строка(ВыборкаИдентификаторовТоваров.Характеристика), + Строка(ВыборкаИдентификаторовТоваров.Упаковка), + Строка(ВыборкаИдентификаторовТоваров.ИдентификаторОбъектаМаркетплейса)); + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), + УровеньЖурналаРегистрации.Ошибка,,, + ТекстОшибкиИсточника); + Продолжить; + КонецЕсли; + // Проверка публикации изображений. МассивИдентификаторов = Новый Массив; МассивИдентификаторов.Добавить(ИдентификаторТовара); @@ -10820,8 +10870,8 @@ ОтменитьТранзакцию(); ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), - УровеньЖурналаРегистрации.Ошибка,,, - ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + УровеньЖурналаРегистрации.Ошибка,,, + ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; КонецЦикла; @@ -10830,73 +10880,89 @@ КонецЕсли; КонецЦикла; - // Запишем состояния для изображений с очисткой публичной ссылки, - // т.к. содержимое полученной публичной ссылки Ozon не соответствует содержимому публичной ссылки записи. - Если Результат.Количество() <> МассивЗаписанныхИдентификаторов.Количество() Тогда - СтруктураРезультата = Новый Структура; - СтруктураРезультата.Вставить("state", ""); - СтруктураРезультата.Вставить("product_id", 0); - СтруктураРезультата.Вставить("url", ""); - ЗаполнитьЗначенияСвойствИзСервиса(СтруктураРезультата, Результат[0]); + // Запишем состояния для изображений, которым не нашлось соответствия в основном цикле. + Если ВыборкаИзображений.Количество() <> МассивЗаписанныхИдентификаторов.Количество() Тогда - ИдентификаторТовара = ЧислоВСтроку(СтруктураРезультата.product_id); - ТекущееСостояние = СоответствиеСостоянийПубликации[СтруктураРезультата.state + "_object"]; + СвободныеОтветы = Новый Массив; + Для Каждого ДанныеРезультата Из Результат Цикл + ИндексОтвета = ЧислоВСтроку(Результат.Найти(ДанныеРезультата), Истина); + Если МассивЗаписанныхИдентификаторов.Найти(ИндексОтвета) = Неопределено Тогда + СвободныеОтветы.Добавить(ДанныеРезультата); + КонецЕсли; + КонецЦикла; - Если ТекущееСостояние <> Неопределено Тогда - ВыборкаИзображений.Сбросить(); + ВыборкаИзображений.Сбросить(); + Отбор = Новый Структура("ИдентификаторОбъектаМаркетплейса", ИдентификаторТовара); - Отбор = Новый Структура("ИдентификаторОбъектаМаркетплейса", ИдентификаторТовара); - Пока ВыборкаИзображений.НайтиСледующий(Отбор) Цикл - Если МассивЗаписанныхИдентификаторов.Найти(ВыборкаИзображений.ИндексИзображенияВКоллекции) <> Неопределено Тогда - Продолжить; - КонецЕсли; + Пока ВыборкаИзображений.НайтиСледующий(Отбор) Цикл + Если МассивЗаписанныхИдентификаторов.Найти(ВыборкаИзображений.ИндексИзображенияВКоллекции) <> Неопределено Тогда + Продолжить; + КонецЕсли; - НачатьТранзакцию(); - Попытка - // Блокировка изменения публикуемых изображений. - БлокировкаДанных = Новый БлокировкаДанных; - ЭлементБлокировкиДанных = БлокировкаДанных.Добавить("РегистрСведений.СтатусыПубликацииОбъектовМаркетплейсаOzon"); - ЭлементБлокировкиДанных.Режим = РежимБлокировкиДанных.Разделяемый; - ЭлементБлокировкиДанных.УстановитьЗначение("УчетнаяЗаписьМаркетплейса", УчетнаяЗапись); - ЭлементБлокировкиДанных.УстановитьЗначение("ВидОбъектаМаркетплейса", ВыборкаИзображений.ВидОбъектаМаркетплейса); - ЭлементБлокировкиДанных.УстановитьЗначение("Номенклатура", ВыборкаИзображений.Номенклатура); - ЭлементБлокировкиДанных.УстановитьЗначение("ОбъектПубликации", ВыборкаИзображений.ОбъектПубликации); - БлокировкаДанных.Заблокировать(); + НачатьТранзакцию(); + Попытка + БлокировкаДанных = Новый БлокировкаДанных; + ЭлементБлокировкиДанных = БлокировкаДанных.Добавить("РегистрСведений.СтатусыПубликацииОбъектовМаркетплейсаOzon"); + ЭлементБлокировкиДанных.Режим = РежимБлокировкиДанных.Разделяемый; + ЭлементБлокировкиДанных.УстановитьЗначение("УчетнаяЗаписьМаркетплейса", УчетнаяЗапись); + ЭлементБлокировкиДанных.УстановитьЗначение("ВидОбъектаМаркетплейса", ВыборкаИзображений.ВидОбъектаМаркетплейса); + ЭлементБлокировкиДанных.УстановитьЗначение("Номенклатура", ВыборкаИзображений.Номенклатура); + ЭлементБлокировкиДанных.УстановитьЗначение("ОбъектПубликации", ВыборкаИзображений.ОбъектПубликации); + БлокировкаДанных.Заблокировать(); - НаборЗаписей = РегистрыСведений.СтатусыПубликацииОбъектовМаркетплейсаOzon.СоздатьНаборЗаписей(); - НаборЗаписей.Отбор.УчетнаяЗаписьМаркетплейса.Установить(УчетнаяЗапись); - НаборЗаписей.Отбор.ВидОбъектаМаркетплейса.Установить(ВыборкаИзображений.ВидОбъектаМаркетплейса); - НаборЗаписей.Отбор.Номенклатура.Установить(ВыборкаИзображений.Номенклатура); - НаборЗаписей.Отбор.ОбъектПубликации.Установить(ВыборкаИзображений.ОбъектПубликации); - НаборЗаписей.Прочитать(); + НаборЗаписей = РегистрыСведений.СтатусыПубликацииОбъектовМаркетплейсаOzon.СоздатьНаборЗаписей(); + НаборЗаписей.Отбор.УчетнаяЗаписьМаркетплейса.Установить(УчетнаяЗапись); + НаборЗаписей.Отбор.ВидОбъектаМаркетплейса.Установить(ВыборкаИзображений.ВидОбъектаМаркетплейса); + НаборЗаписей.Отбор.Номенклатура.Установить(ВыборкаИзображений.Номенклатура); + НаборЗаписей.Отбор.ОбъектПубликации.Установить(ВыборкаИзображений.ОбъектПубликации); + НаборЗаписей.Прочитать(); - Для Каждого Запись Из НаборЗаписей Цикл - Если Запись.Характеристика = ВыборкаИзображений.Характеристика - И Запись.Упаковка = ВыборкаИзображений.Упаковка Тогда - Запись.Статус = ТекущееСостояние.СтатусОбъектаПубликации; - Запись.Состояние = ТекущееСостояние.СостояниеОбъектаПубликации; - Запись.ОписаниеСостояния = ТекущееСостояние.ОписаниеСостоянияОбъектаПубликации; + Для Каждого Запись Из НаборЗаписей Цикл + Если Запись.Характеристика <> ВыборкаИзображений.Характеристика + ИЛИ Запись.Упаковка <> ВыборкаИзображений.Упаковка Тогда + Продолжить; + КонецЕсли; - ЗаполнитьДанныеПубликацииИзображения(Запись, ВыборкаИзображений); - КонецЕсли; + Если СвободныеОтветы.Количество() > 0 Тогда + ДанныеРезультата = СвободныеОтветы[0]; + СвободныеОтветы.Удалить(0); - Запись.ПредставлениеОбъектаМаркетплейса = ""; - КонецЦикла; + СтруктураРезультата = Новый Структура; + СтруктураРезультата.Вставить("state", ""); + СтруктураРезультата.Вставить("url", ""); + ЗаполнитьЗначенияСвойствИзСервиса(СтруктураРезультата, ДанныеРезультата); - Если НаборЗаписей.Количество() > 0 Тогда - НаборЗаписей.Записать(); - КонецЕсли; + ТекущееСостояние = СоответствиеСостоянийПубликации[СтруктураРезультата.state + "_object"]; + Если ТекущееСостояние <> Неопределено Тогда + ИндексИзображения = ЧислоВСтроку(Результат.Найти(ДанныеРезультата), Истина); - ЗафиксироватьТранзакцию(); - Исключение - ОтменитьТранзакцию(); + Запись.Статус = ТекущееСостояние.СтатусОбъектаПубликации; + Запись.Состояние = ТекущееСостояние.СостояниеОбъектаПубликации; + Запись.ОписаниеСостояния = ТекущееСостояние.ОписаниеСостоянияОбъектаПубликации; + Запись.ПредставлениеОбъектаМаркетплейса = СтруктураРезультата.url; + Запись.ИдентификаторОбъектаМаркетплейса = ИндексИзображения; - ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), - УровеньЖурналаРегистрации.Ошибка,,, - ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - КонецПопытки; - КонецЦикла; - КонецЕсли; + МассивЗаписанныхИдентификаторов.Добавить(ИндексИзображения); + КонецЕсли; + Иначе + // Нет свободных ответов Ozon — изображение не принято (лимит/ошибка модерации). + Запись.ОписаниеСостояния = "Изображение не принято Ozon (превышен лимит или ошибка модерации)"; + КонецЕсли; + КонецЦикла; + + Если НаборЗаписей.Количество() > 0 Тогда + НаборЗаписей.Записать(); + КонецЕсли; + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), + УровеньЖурналаРегистрации.Ошибка,,, + ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + КонецЦикла; КонецЕсли; КонецЕсли; КонецЦикла; @@ -23170,4 +23236,38 @@ КонецЕсли; КонецПроцедуры +// Возвращает количество непроверенных заданий публикации из учетной системы. +// +// Параметры: +// УчетнаяЗаписьМаркетплейса - СправочникСсылка.УчетныеЗаписиМаркетплейсов - учетная запись подключения к сервису. +// +// Возвращаемое значение: +// Число - количество непроверенных заданий публикации товаров. +// +Функция КоличествоЗаданийВОчереди(УчетнаяЗаписьМаркетплейса) + + КоличествоЗаданийВОчереди = 0; + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("УчетнаяЗаписьМаркетплейса", УчетнаяЗаписьМаркетплейса); + Запрос.Текст = + "ВЫБРАТЬ РАЗРЕШЕННЫЕ + | КОЛИЧЕСТВО(РАЗЛИЧНЫЕ СтатусыПубликацииОбъектовМаркетплейсаOzon.ЗаданиеПубликации) КАК КоличествоЗаданийПубликации + |ИЗ + | РегистрСведений.СтатусыПубликацииОбъектовМаркетплейсаOzon КАК СтатусыПубликацииОбъектовМаркетплейсаOzon + |ГДЕ + | СтатусыПубликацииОбъектовМаркетплейсаOzon.УчетнаяЗаписьМаркетплейса = &УчетнаяЗаписьМаркетплейса + | И СтатусыПубликацииОбъектовМаркетплейсаOzon.ВидОбъектаМаркетплейса = ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовМаркетплейсов.Товар) + | И СтатусыПубликацииОбъектовМаркетплейсаOzon.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыОбъектовМаркетплейсаOzon.НаМодерации) + | И СтатусыПубликацииОбъектовМаркетплейсаOzon.ЗаданиеПубликации <> """""; + ВыборкаКоличестваЗаданий = Запрос.Выполнить().Выбрать(); + + Если ВыборкаКоличестваЗаданий.Следующий() Тогда + КоличествоЗаданийВОчереди = ВыборкаКоличестваЗаданий.КоличествоЗаданийПубликации; + КонецЕсли; + + Возврат КоличествоЗаданийВОчереди; + +КонецФункции + #КонецОбласти diff --git a/Конфигурация/CommonModules/ИнтеграцияСЭлектроннымиТорговымиПлощадками/Ext/Module.bsl b/Конфигурация/CommonModules/ИнтеграцияСЭлектроннымиТорговымиПлощадками/Ext/Module.bsl index 0ef344c7e..9fe6854ec 100644 --- a/Конфигурация/CommonModules/ИнтеграцияСЭлектроннымиТорговымиПлощадками/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ИнтеграцияСЭлектроннымиТорговымиПлощадками/Ext/Module.bsl @@ -1583,6 +1583,24 @@ КонецФункции +#Область ДляВызоваИзДругихПодсистем + +// См. СтандартныеПодсистемыСервер.ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод +Процедура ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод(Методы) Экспорт + + Методы.Вставить("ПроверитьСвязьСЭТПБидзаарДляПоставщиков", Истина); + Методы.Вставить("ПроверитьСвязьСЭТПБидзаарДляПокупателей", Истина); + Методы.Вставить("ПубликацияТоваровИУслугБидзаар", Истина); + Методы.Вставить("ПубликацияЗапросаКоммерческихПредложенийБидзаар", Истина); + Методы.Вставить("ЗапросТекущихСостоянийОпубликованныхДокументовБидзаар", Истина); + Методы.Вставить("ПолучениеДанныхКоммерческихПредложенийПоЗапросуБидзаар", Истина); + Методы.Вставить("ПолучениеДанныхУчастниковПоЗапросуБидзаар", Истина); + Методы.Вставить("ПолучениеФайловКоммерческихПредложенийБидзаар", Истина); + +КонецПроцедуры + +#КонецОбласти + #КонецОбласти #Область СлужебныйПрограммныйИнтерфейс diff --git a/Конфигурация/CommonModules/ИнтеграцияСЭлектроннымиТорговымиПлощадкамиВызовСервера/Ext/Module.bsl b/Конфигурация/CommonModules/ИнтеграцияСЭлектроннымиТорговымиПлощадкамиВызовСервера/Ext/Module.bsl index b8c5fa835..d54628bd2 100644 --- a/Конфигурация/CommonModules/ИнтеграцияСЭлектроннымиТорговымиПлощадкамиВызовСервера/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ИнтеграцияСЭлектроннымиТорговымиПлощадкамиВызовСервера/Ext/Module.bsl @@ -24,6 +24,14 @@ Возврат СтрокаПодключения; КонецФункции +// Проверить связь с ЭТП Бидзаар в фоне. +// +// Параметры: +// ПараметрыОперации - Структура - Параметры операции +// +// Возвращаемое значение: +// Неопределено, Структура - см. ДлительныеОперации.ВыполнитьВФоне +// Функция ПроверитьСвязьСЭТПБидзаарВФоне(ПараметрыОперации) Экспорт ВидЭТП = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ПараметрыОперации, "ВидЭТП"); @@ -33,7 +41,6 @@ Если Не Константы.ИспользоватьИнтеграциюСЭТПБидзаарДляПокупателей.Получить() Тогда Возврат Неопределено; КонецЕсли; - ИмяПроцедуры = "ИнтеграцияСЭлектроннымиТорговымиПлощадками.ПроверитьСвязьСЭТПБидзаарДляПокупателей"; УчетнаяЗапись = Справочники.УчетныеЗаписиЭлектронныхТорговыхПлощадок.УчетнаяЗаписьОрганизации(ВидЭТП, ПараметрыОперации.Организация); УстановитьПривилегированныйРежим(Ложь); @@ -47,7 +54,6 @@ Если Не Константы.ИспользоватьИнтеграциюСЭТПБидзаарДляПоставщиков.Получить() Тогда Возврат Неопределено; КонецЕсли; - ИмяПроцедуры = "ИнтеграцияСЭлектроннымиТорговымиПлощадками.ПроверитьСвязьСЭТПБидзаарДляПоставщиков"; УстановитьПривилегированныйРежим(Ложь); Иначе Возврат Неопределено; @@ -57,8 +63,18 @@ ПараметрыВыполнения.НаименованиеФоновогоЗадания = НСтр("ru = 'Проверка связи с ЭТП Бидзаар'"); ПараметрыВыполнения.ОжидатьЗавершение = 0; ПараметрыВыполнения.ЗапуститьВФоне = Истина; - - Возврат ДлительныеОперации.ВыполнитьВФоне(ИмяПроцедуры, ПараметрыОперации, ПараметрыВыполнения); + + Если ВидЭТП = Перечисления.ВидыЭлектронныхТорговыхПлощадок.БидзаарПокупатели Тогда + ДлительныеОперации.ВыполнитьВФоне( + "ИнтеграцияСЭлектроннымиТорговымиПлощадками.ПроверитьСвязьСЭТПБидзаарДляПокупателей", + ПараметрыОперации, ПараметрыВыполнения); + ИначеЕсли ВидЭТП = Перечисления.ВидыЭлектронныхТорговыхПлощадок.БидзаарПоставщики Тогда + ДлительныеОперации.ВыполнитьВФоне( + "ИнтеграцияСЭлектроннымиТорговымиПлощадками.ПроверитьСвязьСЭТПБидзаарДляПоставщиков", + ПараметрыОперации, ПараметрыВыполнения); + Иначе + Возврат Неопределено; + КонецЕсли; КонецФункции @@ -84,46 +100,7 @@ Возврат ДлительныеОперации.ВыполнитьВФоне( "ИнтеграцияСЭлектроннымиТорговымиПлощадками.ПубликацияЗапросаКоммерческихПредложенийБидзаар", - ПараметрыОперации, - ПараметрыВыполнения); - -КонецФункции - -// Формирует фоновое задание, позволяющее опубликовать файлы, присодиненные к запросу коммерческих предложений -// -// Параметры: -// ЗапросКоммерческихПредложений - ДокументСсылка.ЗапросКоммерческихПредложенийПоставщиков - документ, присоединенные файлы которого необходимо опубликовать -// -// Возвращаемое значение: -// Структура - см. описание ДлительныеОперации.ВыполнитьВФоне -// -Функция ПубликацияДокументовЗапросаКоммерческихПредложенийБидзаарВФоне(Знач ЗапросКоммерческихПредложений) Экспорт - - РеквизитыДокумента = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ЗапросКоммерческихПредложений, - "Организация, МенеджерEmail"); - УчетнаяЗапись = Справочники.УчетныеЗаписиЭлектронныхТорговыхПлощадок.УчетнаяЗаписьОрганизации( - Перечисления.ВидыЭлектронныхТорговыхПлощадок.БидзаарПокупатели, РеквизитыДокумента.Организация); - - ОписанияФайлов = ИнтеграцияСЭлектроннымиТорговымиПлощадками.ОписанияФайловДляПубликацииЗапросаКоммерческихПредложенийБидзаар( - ЗапросКоммерческихПредложений); - - ИдентификаторФормы = Новый УникальныйИдентификатор; - ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(ИдентификаторФормы); - ПараметрыВыполнения.НаименованиеФоновогоЗадания = НСтр( - "ru = 'Публикация документов запроса коммерческих предложений.'"); - ПараметрыВыполнения.КлючФоновогоЗадания = XMLСтрока(ЗапросКоммерческихПредложений); - ПараметрыВыполнения.ОжидатьЗавершение = 0; - ПараметрыВыполнения.ЗапуститьВФоне = Истина; - - ПараметрыОперации = Новый Структура; - ПараметрыОперации.Вставить("УчетнаяЗапись", УчетнаяЗапись); - ПараметрыОперации.Вставить("МенеджерEmail", РеквизитыДокумента.МенеджерEmail); - ПараметрыОперации.Вставить("ОписанияФайлов", ОписанияФайлов); - - Возврат ДлительныеОперации.ВыполнитьВФоне( - "ИнтеграцияСЭлектроннымиТорговымиПлощадками.ПубликацияДокументовБидзаар", - ПараметрыОперации, - ПараметрыВыполнения); + ПараметрыОперации, ПараметрыВыполнения); КонецФункции @@ -154,6 +131,14 @@ КонецФункции +// Запускает в фоновом задании получение данных коммерческих предложений по запросу Бидзаар. +// +// Параметры: +// ЗапросКоммерческихПредложений - ДокументСсылка.ЗапросКоммерческихПредложенийПоставщиков - запрос коммерческих предложений +// +// Возвращаемое значение: +// Структура - см. описание ДлительныеОперации.ВыполнитьВФоне +// Функция ПолучениеДанныхКоммерческихПредложенийПоЗапросуБидзаарВФоне(Знач ЗапросКоммерческихПредложений) Экспорт ИдентификаторФормы = Новый УникальныйИдентификатор; @@ -172,6 +157,15 @@ КонецФункции +// Получение данных участников по запросу бидзаар в фоне. +// +// Параметры: +// ЗапросКоммерческихПредложений - ДокументСсылка.ЗапросКоммерческихПредложенийПоставщиков +// ТолькоПобедители - Булево - Только победители +// +// Возвращаемое значение: +// Структура - см. ДлительныеОперации.ВыполнитьВФоне +// Функция ПолучениеДанныхУчастниковПоЗапросуБидзаарВФоне(Знач ЗапросКоммерческихПредложений, ТолькоПобедители) Экспорт ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(Новый УникальныйИдентификатор); @@ -199,11 +193,13 @@ // Возвращаемое значение: // ПеречислениеСсылка.ВидыЭлектронныхТорговыхПлощадок, Строка - Вид ЭТП или раздел учета Функция ПолучитьВидЭТПИлиРазделУчета(Параметр, ПолучитьВидЭТП = Истина) Экспорт - Возврат ИнтеграцияСЭлектроннымиТорговымиПлощадками.ПолучитьВидЭТПИлиРазделУчета(Параметр, ПолучитьВидЭТП = Истина); - КонецФункции +// Доступно право настройки авторизации бидзаар. +// +// Возвращаемое значение: +// Булево - Доступно право настройки авторизации бидзаар Функция ДоступноПравоНастройкиАвторизацииБидзаар() Экспорт Возврат ИнтеграцияСЭлектроннымиТорговымиПлощадками.ДоступноПравоНастройкиАвторизацииБидзаар(); КонецФункции diff --git a/Конфигурация/CommonModules/ИнтеграцияТСПИоТКлиентСервер/Ext/Module.bsl b/Конфигурация/CommonModules/ИнтеграцияТСПИоТКлиентСервер/Ext/Module.bsl index 6242dbe9a..0f4ec437c 100644 --- a/Конфигурация/CommonModules/ИнтеграцияТСПИоТКлиентСервер/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ИнтеграцияТСПИоТКлиентСервер/Ext/Module.bsl @@ -517,7 +517,7 @@ ПродажаПоДаннымОффлайнРежима = СтрокаДанныхОКодах.Получить("isCheckedOffline"); - Если ЗначениеЗаполнено(КодОшибки) Тогда + Если ЗначениеЗаполнено(КодОшибки) И Не КодОшибки = ОбщегоНазначенияИСМПКлиентСерверПовтИсп.ПоставарийныйРежимКодОтветаСервисаГИСМТ() Тогда ТекстОшибки = ТекстОшибкиРазрешительногоРежимаПоКодуОшибкиТСПИоТ(КодОшибки, СообщениеОбОшибке); diff --git a/Конфигурация/CommonModules/ИнтеграцияЭДО/Ext/Module.bsl b/Конфигурация/CommonModules/ИнтеграцияЭДО/Ext/Module.bsl index f8ef28fe2..d275c2472 100644 --- a/Конфигурация/CommonModules/ИнтеграцияЭДО/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ИнтеграцияЭДО/Ext/Module.bsl @@ -56,6 +56,8 @@ // // Параметры: // ОбъектыУчета - Массив Из ОпределяемыйТип.ОснованияЭлектронныхДокументовЭДО +// Направление - ПеречислениеСсылка.НаправленияЭДО +// поддерживаются значения Перечисления.НаправленияЭДО.Исходящий или Перечисления.НаправленияЭДО.Входящий // // Возвращаемое значение: // ТаблицаЗначений: @@ -66,9 +68,10 @@ // * Контрагент - ОпределяемыйТип.УчастникЭДО - контрагент в электронном документе. // * ДоговорКонтрагента - ОпределяемыйТип.ДоговорСКонтрагентомЭДО - договор контрагента в электронном документе. // -Функция АктуальныеЭлектронныеДокументы(Знач ОбъектыУчета) Экспорт +Функция АктуальныеЭлектронныеДокументы(Знач ОбъектыУчета, Направление = Неопределено) Экспорт Запрос = Новый Запрос; + Запрос.Параметры.Вставить("ОбъектУчета", ОбъектыУчета); Запрос.Текст = "ВЫБРАТЬ | ОбъектыУчетаДокументовЭДО.ОбъектУчета КАК ОбъектУчета, @@ -81,8 +84,20 @@ | РегистрСведений.ОбъектыУчетаДокументовЭДО КАК ОбъектыУчетаДокументовЭДО |ГДЕ | ОбъектыУчетаДокументовЭДО.ОбъектУчета В (&ОбъектУчета) - | И ОбъектыУчетаДокументовЭДО.Актуальный"; - Запрос.Параметры.Вставить("ОбъектУчета", ОбъектыУчета); + | И ОбъектыУчетаДокументовЭДО.Актуальный + | И &УсловиеНаправление + |"; + + Если Направление = Перечисления.НаправленияЭДО.Исходящий + Или Направление = Перечисления.НаправленияЭДО.Входящий Тогда + + Запрос.Текст = СтрЗаменить(Запрос.Текст, "&УсловиеНаправление", + "ОбъектыУчетаДокументовЭДО.ЭлектронныйДокумент Ссылка " + + ЭлектронныеДокументыЭДО.ИмяТаблицыДокументаЭДО(Направление = Перечисления.НаправленияЭДО.Входящий)); + + Иначе + Запрос.Текст = СтрЗаменить(Запрос.Текст, "&УсловиеНаправление", "Истина"); + КонецЕсли; Возврат Запрос.Выполнить().Выгрузить(); @@ -5319,10 +5334,11 @@ Если НЕ ОписаниеИзменений.СостояниеЭлектронногоДокумента = ЭлектронныеДокументыЭДО.НачальноеСостояниеДокумента() Тогда // Электронный документ создан, но не соответствует основанию. ЗакрытьПринудительноЭлектронныйДокумент(ОбъектУчета); + Иначе + ОчиститьАктуальныйЭлектронныйДокумент(ОбъектУчета.Ссылка); + УстановитьОснованиеНовогоЭлектронногоДокумента(ОбъектУчета.Ссылка); КонецЕсли; - ОчиститьАктуальныйЭлектронныйДокумент(ОбъектУчета.Ссылка); - УстановитьОснованиеНовогоЭлектронногоДокумента(ОбъектУчета.Ссылка); УстановитьПривилегированныйРежим(Ложь); КонецЕсли; @@ -5909,7 +5925,8 @@ // Проверяем состояния документов. - АктуальныеЭлектронныеДокументы = АктуальныеЭлектронныеДокументы(Источник.Ссылка).ВыгрузитьКолонку("ЭлектронныйДокумент"); + АктуальныеЭлектронныеДокументы = АктуальныеЭлектронныеДокументы( + Источник.Ссылка, Перечисления.НаправленияЭДО.Исходящий).ВыгрузитьКолонку("ЭлектронныйДокумент"); Если АктуальныеЭлектронныеДокументы.Количество() = 0 Тогда Возврат; @@ -12850,6 +12867,8 @@ Если КодРегиона = "99" Тогда Возврат "иные территории, включая город и космодром Байконур";// АПК:1297 -Строка не локализована. Возможно, она видна пользователю (1297) + ИначеЕсли КодРегиона = "94" Или КодРегиона = "93" Тогда + Возврат СоединитьНаименованиеИТипРегиона(Наименование, "Республика", Истина); ИначеЕсли СтрСравнить(ТипРегиона, "респ.") = 0 Тогда Возврат СоединитьНаименованиеИТипРегиона(Наименование, "Республика"); ИначеЕсли СтрСравнить(ТипРегиона, "обл.") = 0 Тогда diff --git a/Конфигурация/CommonModules/ИнтеграцияЭДОКлиент/Ext/Module.bsl b/Конфигурация/CommonModules/ИнтеграцияЭДОКлиент/Ext/Module.bsl index eb62a5f57..0c5a98dd7 100644 --- a/Конфигурация/CommonModules/ИнтеграцияЭДОКлиент/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ИнтеграцияЭДОКлиент/Ext/Module.bsl @@ -310,9 +310,14 @@ // Параметры: // НаборОбъектовУчета - Массив Из ОпределяемыйТип.ОснованияЭлектронныхДокументовЭДО +// - Неопределено // ПараметрыДействия - См. ПараметрыПодготовкиКДокументообороту Процедура ПодготовитьКДокументообороту(Знач НаборОбъектовУчета, Знач ПараметрыДействия) Экспорт + Если Не ЗначениеЗаполнено(НаборОбъектовУчета) Тогда + Возврат; + КонецЕсли; + Если ПараметрыДействия.Настройки.ВыводитьПодтверждениеПриМассовомФормировании Тогда ПараметрыДействия.Настройки.ВыводитьПодтверждениеПриМассовомФормировании = Ложь; Если НаборОбъектовУчета.Количество() > 1 Тогда diff --git a/Конфигурация/CommonModules/ИнтернетПоддержкаПользователей/Ext/Module.bsl b/Конфигурация/CommonModules/ИнтернетПоддержкаПользователей/Ext/Module.bsl index 90d5e7e17..89dead281 100644 --- a/Конфигурация/CommonModules/ИнтернетПоддержкаПользователей/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ИнтернетПоддержкаПользователей/Ext/Module.bsl @@ -1187,10 +1187,10 @@ // методов передаваемые методом POST, PUT, PATCH. // Значение по умолчанию: Неопределено // * ФорматДанныхДляОбработки - Число - формат отправки данных: -// 0 - как файл. +// 0 - как файл во временном каталоге. // 1 - как строка. // 2 - как двоичные данные. -// Значение по умолчанию: 1 +// Значение по умолчанию: 0 // * Заголовки - Неопределено // - Соответствие из КлючИЗначение: // ** Ключ - Строка - имя заголовка запроса. @@ -1400,6 +1400,10 @@ Если ПараметрыПолучения.ФорматДанныхДляОбработки = 0 Тогда + Если Не ЭтоИмяВременногоФайла(ПараметрыПолучения.ДанныеДляОбработки) Тогда + ВызватьИсключение НСтр("ru = 'Ошибка в адресе файла для http-запроса.'"); + КонецЕсли; + HTTPЗапрос.УстановитьИмяФайлаТела(ПараметрыПолучения.ДанныеДляОбработки); ИначеЕсли ПараметрыПолучения.ФорматДанныхДляОбработки = 1 Тогда @@ -1911,85 +1915,20 @@ #Область ФункциональныеОпцииБСП -// Проверяет наличие подсистемы "Взаимодействия" и производит включение функциональной опции, отвечающей за SMS. +// Выполняет включение функциональных опций, необходимых для отправки шаблонов сообщений. // -Процедура УстановитьИспользованиеSMS() Экспорт - - Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Взаимодействия") Тогда - Возврат; - КонецЕсли; - - МодульВзаимодействия = ОбщегоНазначения.ОбщийМодуль("Взаимодействия"); - - УстановитьПривилегированныйРежим(Истина); - - Если Не МодульВзаимодействия.ИспользуютсяПрочиеВзаимодействия() Тогда - МодульВзаимодействия.УстановитьИспользованиеПрочегоВзаимодействия(Истина); - КонецЕсли; - - УстановитьПривилегированныйРежим(Ложь); - -КонецПроцедуры - -// Проверяет наличие подсистемы "Шаблоны сообщений" и производит включение соответствующей функциональной опции. +// Параметры: +// ИспользоватьПодсистемуВзаимодействия - Булево - признак использования подсистемы Взаимодействия. // -Процедура УстановитьИспользованиеШаблоновСообщений() Экспорт +Процедура УстановитьИспользованиеОтправкиШаблоновСообщений(ИспользоватьПодсистемуВзаимодействия) Экспорт - Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ШаблоныСообщений") Тогда - Возврат; + Если ИспользоватьПодсистемуВзаимодействия Тогда + УстановитьИспользованиеSMS(); + УстановитьИспользованиеЭлектроннойПочты(); + УстановитьОтправкуПисемВФорматеHTML(); КонецЕсли; - МодульШаблоныСообщений = ОбщегоНазначения.ОбщийМодуль("ШаблоныСообщений"); - - УстановитьПривилегированныйРежим(Истина); - - Если Не МодульШаблоныСообщений.ИспользуютсяШаблоныСообщений() Тогда - МодульШаблоныСообщений.УстановитьИспользованиеШаблоновСообщений(Истина); - ОбновитьПовторноИспользуемыеЗначения(); - КонецЕсли; - - УстановитьПривилегированныйРежим(Ложь); - -КонецПроцедуры - -// Проверяет наличие подсистемы "Взаимодействия" и производит включение функциональной опции, отвечающей за ЭП. -// -Процедура УстановитьИспользованиеЭлектроннойПочты() Экспорт - - Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Взаимодействия") Тогда - Возврат; - КонецЕсли; - - МодульВзаимодействия = ОбщегоНазначения.ОбщийМодуль("Взаимодействия"); - - УстановитьПривилегированныйРежим(Истина); - - Если Не МодульВзаимодействия.ИспользуетсяПочтовыйКлиент() Тогда - МодульВзаимодействия.УстановитьИспользованиеПочтовогоКлиента(Истина); - КонецЕсли; - - УстановитьПривилегированныйРежим(Ложь); - -КонецПроцедуры - -// Проверяет наличие подсистемы "Взаимодействия" и производит включение функциональной опции, -// отвечающей за отправку писем в формате HTML. -// -Процедура УстановитьОтправкуПисемВФорматеHTML() Экспорт - - Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Взаимодействия") Тогда - Возврат; - КонецЕсли; - - МодульВзаимодействия = ОбщегоНазначения.ОбщийМодуль("Взаимодействия"); - - УстановитьПривилегированныйРежим(Истина); - - Если Не МодульВзаимодействия.ИспользуетсяОтправкаПисемВФорматеHTML() Тогда - МодульВзаимодействия.УстановитьИспользованиеОтправкиПисемВФорматеHTML(Истина); - КонецЕсли; - - УстановитьПривилегированныйРежим(Ложь); + УстановитьИспользованиеШаблоновСообщений(); КонецПроцедуры @@ -2388,6 +2327,94 @@ #Область СлужебныеПроцедурыИФункции +#Область ФункциональныеОпцииБСП + +// Проверяет наличие подсистемы "Взаимодействия" и производит включение функциональной опции, отвечающей за SMS. +// +Процедура УстановитьИспользованиеSMS() + + Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Взаимодействия") + Или Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОтправкаSMS") Тогда + Возврат; + КонецЕсли; + + МодульВзаимодействия = ОбщегоНазначения.ОбщийМодуль("Взаимодействия"); + + УстановитьПривилегированныйРежим(Истина); + + Если Не МодульВзаимодействия.ИспользуютсяПрочиеВзаимодействия() Тогда + МодульВзаимодействия.УстановитьИспользованиеПрочегоВзаимодействия(Истина); + КонецЕсли; + + УстановитьПривилегированныйРежим(Ложь); + +КонецПроцедуры + +// Проверяет наличие подсистемы "Шаблоны сообщений" и производит включение соответствующей функциональной опции. +// +Процедура УстановитьИспользованиеШаблоновСообщений() + + Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ШаблоныСообщений") Тогда + Возврат; + КонецЕсли; + + МодульШаблоныСообщений = ОбщегоНазначения.ОбщийМодуль("ШаблоныСообщений"); + + УстановитьПривилегированныйРежим(Истина); + + Если Не МодульШаблоныСообщений.ИспользуютсяШаблоныСообщений() Тогда + МодульШаблоныСообщений.УстановитьИспользованиеШаблоновСообщений(Истина); + ОбновитьПовторноИспользуемыеЗначения(); + КонецЕсли; + + УстановитьПривилегированныйРежим(Ложь); + +КонецПроцедуры + +// Проверяет наличие подсистемы "Взаимодействия" и производит включение функциональной опции, отвечающей за ЭП. +// +Процедура УстановитьИспользованиеЭлектроннойПочты() + + Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Взаимодействия") + Или Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСПочтовымиСообщениями") Тогда + Возврат; + КонецЕсли; + + МодульВзаимодействия = ОбщегоНазначения.ОбщийМодуль("Взаимодействия"); + + УстановитьПривилегированныйРежим(Истина); + + Если Не МодульВзаимодействия.ИспользуетсяПочтовыйКлиент() Тогда + МодульВзаимодействия.УстановитьИспользованиеПочтовогоКлиента(Истина); + КонецЕсли; + + УстановитьПривилегированныйРежим(Ложь); + +КонецПроцедуры + +// Проверяет наличие подсистемы "Взаимодействия" и производит включение функциональной опции, +// отвечающей за отправку писем в формате HTML. +// +Процедура УстановитьОтправкуПисемВФорматеHTML() + + Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Взаимодействия") Тогда + Возврат; + КонецЕсли; + + МодульВзаимодействия = ОбщегоНазначения.ОбщийМодуль("Взаимодействия"); + + УстановитьПривилегированныйРежим(Истина); + + Если Не МодульВзаимодействия.ИспользуетсяОтправкаПисемВФорматеHTML() Тогда + МодульВзаимодействия.УстановитьИспользованиеОтправкиПисемВФорматеHTML(Истина); + КонецЕсли; + + УстановитьПривилегированныйРежим(Ложь); + +КонецПроцедуры + +#КонецОбласти + #Область ПодключениеИнтернетПоддержки // Создает новую структуру параметров аутентификации. diff --git a/Конфигурация/CommonModules/ИнтернетПоддержкаПользователейКлиентСервер/Ext/Module.bsl b/Конфигурация/CommonModules/ИнтернетПоддержкаПользователейКлиентСервер/Ext/Module.bsl index d4c55efc9..32fde2684 100644 --- a/Конфигурация/CommonModules/ИнтернетПоддержкаПользователейКлиентСервер/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ИнтернетПоддержкаПользователейКлиентСервер/Ext/Module.bsl @@ -25,7 +25,7 @@ // Функция ВерсияБиблиотеки() Экспорт - Возврат "2.9.2.13"; + Возврат "2.9.2.19"; КонецФункции diff --git a/Конфигурация/CommonModules/ИнтернетПоддержкаПользователейКлиентСерверПереопределяемый/Ext/Module.bsl b/Конфигурация/CommonModules/ИнтернетПоддержкаПользователейКлиентСерверПереопределяемый/Ext/Module.bsl index 1c6b74f14..00e9d4786 100644 --- a/Конфигурация/CommonModules/ИнтернетПоддержкаПользователейКлиентСерверПереопределяемый/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ИнтернетПоддержкаПользователейКлиентСерверПереопределяемый/Ext/Module.bsl @@ -21,11 +21,12 @@ // // Параметры: // Настройки - Структура - настройки подсистемы на клиенте: -// *ОтключитьАвторизацию - Булево - отключает авторизацию пользователей -// при переходе на страницы интегрированных ресурсов. +// * ОтключитьАвторизацию - Булево - отключает авторизацию пользователей +// при переходе на страницы интегрированных ресурсов. +// * ХостСервисовИнтернетПоддержки - Строка - хост сервисов Интернет-поддержки. // //@skip-warning -Процедура ПриОпределенииНастроекИнтернетПоддержкиПользователей(Настройки)Экспорт +Процедура ПриОпределенииНастроекИнтернетПоддержкиПользователей(Настройки) Экспорт diff --git a/Конфигурация/CommonModules/ИнтерфейсДокументовЭДО/Ext/Module.bsl b/Конфигурация/CommonModules/ИнтерфейсДокументовЭДО/Ext/Module.bsl index 236989433..1abee4591 100644 --- a/Конфигурация/CommonModules/ИнтерфейсДокументовЭДО/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ИнтерфейсДокументовЭДО/Ext/Module.bsl @@ -1196,14 +1196,25 @@ // // Параметры: // Форма - ФормаКлиентскогоПриложения - форма просмотра входящего/исходящего электронного документа: +// * Объект - ДанныеФормыСтруктура: +// ** Ссылка - ДокументСсылка.ЭлектронныйДокументВходящийЭДО +// - ДокументСсылка.ЭлектронныйДокументИсходящийЭДО // * СопроводительнаяЗаписка - Строка // * Элементы - ВсеЭлементыФормы: -// ** СтраницаСопроводительнаяЗаписка - ГруппаФормы -// ** ОчиститьЗаписку - Кнопка -// ** СопроводительнаяЗаписка - ПолеВвода +// ** СтраницаСопроводительнаяЗаписка - ГруппаФормы: +// *** ОчиститьЗаписку - Кнопка +// *** СопроводительнаяЗаписка - ПолеВвода // ЭлементСхемы - ДанныеФормыЭлементДерева Процедура НастроитьСопроводительнуюЗаписку(Форма, ЭлементСхемы) Экспорт + Если Не ЭлектронныеДокументыЭДО.ЭтоВходящийЭДО(Форма.Объект.Ссылка) + И ВыводитьЧатУниверсальныхСообщений() Тогда + Форма.Элементы.СтраницаСопроводительнаяЗаписка.Видимость = Ложь; + Возврат; + КонецЕсли; + + Форма.Элементы.СтраницаСопроводительнаяЗаписка.Видимость = Истина; + Форма.Элементы.СтраницаСопроводительнаяЗаписка.Картинка = ОбщегоНазначенияКлиентСервер.КартинкаКомментария( Форма.СопроводительнаяЗаписка); @@ -1896,13 +1907,15 @@ МассивФайлов = Новый Массив; КоличествоФайловДокументов = Новый Соответствие; + ЗанятыеИменаФайлов = Новый Соответствие; Для каждого ДанныеПечатнойФормы Из ПечатныеФормы Цикл ИмяФайла = РаботаСФайламиБЭДКлиентСервер.ДопустимоеИмяФайла(ДанныеПечатнойФормы.СинонимМакета, Истина); ПолноеИмяФайла = АдресКаталога + ИмяФайла + ".pdf"; РаботаСФайламиБЭД.СократитьИмяФайла(ПолноеИмяФайла); - ПолноеИмяФайла = РаботаСФайламиБЭДКлиентСервер.ОпределитьУникальноеИмяФайла(ПолноеИмяФайла); + ПолноеИмяФайла = РаботаСФайламиБЭДКлиентСервер.ОпределитьУникальноеИмяФайла(ПолноеИмяФайла, + ЗанятыеИменаФайлов); ДанныеПечатнойФормы.ТабличныйДокумент.Записать(ПолноеИмяФайла, ТипФайлаТабличногоДокумента.PDF); @@ -1932,7 +1945,8 @@ ДанныеФайла = ИнтерфейсДокументовЭДОВызовСервера.ДанныеФайла(ОсновнойФайл); ПолноеИмяФайла = АдресКаталога + ДанныеФайла.ИмяФайла; - ПолноеИмяФайла = РаботаСФайламиБЭДКлиентСервер.ОпределитьУникальноеИмяФайла(ПолноеИмяФайла); + ПолноеИмяФайла = РаботаСФайламиБЭДКлиентСервер.ОпределитьУникальноеИмяФайла(ПолноеИмяФайла, + ЗанятыеИменаФайлов); ДвоичныеДанныеФайла = ПолучитьИзВременногоХранилища(ДанныеФайла.СсылкаНаДвоичныеДанныеФайла); ДвоичныеДанныеФайла.Записать(ПолноеИмяФайла); @@ -1953,6 +1967,8 @@ ТабличныйДокумент = СформироватьРеестрЭлектронныхДокументов(ЭлектронныеДокументы, КоличествоФайловДокументов); РаботаСФайламиБЭД.СократитьИмяФайла(ПолноеИмяФайла); + ПолноеИмяФайла = РаботаСФайламиБЭДКлиентСервер.ОпределитьУникальноеИмяФайла(ПолноеИмяФайла, + ЗанятыеИменаФайлов); ТабличныйДокумент.Записать(ПолноеИмяФайла, ТипФайлаТабличногоДокумента.PDF); МассивФайлов.Добавить(ПолноеИмяФайла); @@ -2019,6 +2035,8 @@ ТипыРегламентов = ОбщегоНазначения.ЗначениеРеквизитаОбъектов(ЭлектронныеДокументы, "ТипРегламента"); + ЗанятыеИменаФайлов = Новый Соответствие; + Для каждого ЭлектронныйДокумент Из ЭлектронныеДокументы Цикл ПараметрыОтбораФайлов = Новый Структура("ЭлектронныйДокумент", ЭлектронныйДокумент); @@ -2030,8 +2048,8 @@ ПредставлениеДокумента = ЭлектронныеДокументыЭДО.ПредставлениеДокумента(ЭлектронныйДокумент); КаталогДокумента = АдресКаталогаФайлов + ОбщегоНазначенияКлиентСервер.ЗаменитьНедопустимыеСимволыВИмениФайла( ПредставлениеДокумента); - КаталогДокумента = РаботаСФайламиБЭДКлиентСервер.ОпределитьУникальноеИмяФайла(КаталогДокумента, Истина) - + ПолучитьРазделительПути(); + КаталогДокумента = РаботаСФайламиБЭДКлиентСервер.ОпределитьУникальноеИмяФайла(КаталогДокумента, + ЗанятыеИменаФайлов, Истина) + ПолучитьРазделительПути(); СоздатьКаталог(КаталогДокумента); ТипРегламента = ТипыРегламентов[ЭлектронныйДокумент]; @@ -2050,8 +2068,8 @@ ПрисоединенныйФайл = ФайлДокумента.ПрисоединенныйФайл; КаталогСообщения = КаталогДокумента + ТипыСообщенийЭДО[ФайлДокумента.СообщениеЭДО]; - КаталогСообщения = РаботаСФайламиБЭДКлиентСервер.ОпределитьУникальноеИмяФайла(КаталогСообщения, Истина) - + ПолучитьРазделительПути(); + КаталогСообщения = РаботаСФайламиБЭДКлиентСервер.ОпределитьУникальноеИмяФайла(КаталогСообщения, + ЗанятыеИменаФайлов, Истина) + ПолучитьРазделительПути(); ДанныеФайла = РаботаСФайлами.ДанныеФайла(ПрисоединенныйФайл); @@ -2540,6 +2558,31 @@ КонецПроцедуры +// Возвращаемое значение: +// Булево +Функция ИспользуетсяРежимМножественногоВыделенияВСпискахТекущихДелЭДО() Экспорт + + КлючОбъектаНастроек = ИнтерфейсДокументовЭДОКлиентСервер.КлючОбъектаНастроекИнтерфейсаЭДО(); + КлючНастройки = КлючНастройкиИспользуетсяРежимМножественногоВыделенияВСпискахТекущихДелЭДО(); + + ИспользуетсяРежимМножественногоВыделения = + ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить(КлючОбъектаНастроек, КлючНастройки, Истина); + + Возврат ИспользуетсяРежимМножественногоВыделения; + +КонецФункции + +// Параметры: +// Значение - Булево +Процедура ИзменитьНастройкуИспользуетсяРежимМножественногоВыделенияВСпискахТекущихДелЭДО(Значение) Экспорт + + КлючОбъектаНастроек = ИнтерфейсДокументовЭДОКлиентСервер.КлючОбъектаНастроекИнтерфейсаЭДО(); + КлючНастройки = КлючНастройкиИспользуетсяРежимМножественногоВыделенияВСпискахТекущихДелЭДО(); + + ОбщегоНазначения.ХранилищеОбщихНастроекСохранить(КлючОбъектаНастроек, КлючНастройки, Значение); + +КонецПроцедуры + #КонецОбласти // Скрывает все элементы на форме @@ -3107,7 +3150,8 @@ | ЗНАЧЕНИЕ(Перечисление.СостоянияДокументовЭДО.ОжидаетсяПодтверждениеОператора), | ЗНАЧЕНИЕ(Перечисление.СостоянияДокументовЭДО.ОжидаетсяИзвещениеПоОтклонению), | ЗНАЧЕНИЕ(Перечисление.СостоянияДокументовЭДО.ТребуетсяИзвещениеОПолучении), - | ЗНАЧЕНИЕ(Перечисление.СостоянияДокументовЭДО.ОжидаетсяОтветНаПриглашение) + | ЗНАЧЕНИЕ(Перечисление.СостоянияДокументовЭДО.ОжидаетсяОтветНаПриглашение), + | ЗНАЧЕНИЕ(Перечисление.СостоянияДокументовЭДО.ТребуетсяСоздатьДокумент) | ) | ГДЕ | &УсловиеОтбора @@ -4163,15 +4207,17 @@ // Возвращает пустые свойства электронного документа для формирования представления. // // Возвращаемое значение: -// Структура - Описание: -// * ВидДокумента - СправочникСсылка.ВидыДокументовЭДО - -// * НомерДокумента - Строка - -// * ДатаДокумента - Дата - +// Структура - Описание: +// * ВидДокумента - СправочникСсылка.ВидыДокументовЭДО +// * НомерДокумента - Строка +// * ДатаДокумента - Дата +// * ПредставлениеЧерновика - Строка Функция НовыеСвойстваПредставленияДокумента() Экспорт Свойства = Новый Структура; Свойства.Вставить("ВидДокумента", Справочники.ВидыДокументовЭДО.ПустаяСсылка()); Свойства.Вставить("НомерДокумента", ""); Свойства.Вставить("ДатаДокумента", Дата(1,1,1)); + Свойства.Вставить("ПредставлениеЧерновика", ""); Возврат Свойства; КонецФункции @@ -5327,6 +5373,7 @@ // * СтатусЗаявкиНаРоуминг - ПеречислениеСсылка.СтатусыПриглашений // * ЭтоОблачныйЭДО - Булево // * ДополнительныеДанныеСпискаВыбора - Соответствие +// * АбонентНеТребуетПриглашений - Булево Функция НовыеПараметрыСвязиИдентификаторов() Экспорт ОписаниеТипаБулево = Новый ОписаниеТипов("Булево"); ОписаниеТипаСтрокаНеограниченная = ОбщегоНазначения.ОписаниеТипаСтрока(0); @@ -5371,6 +5418,7 @@ ПараметрыСвязи.Колонки.Добавить("СтатусЗаявкиНаРоуминг", ОписаниеТипаСтатусыПриглашений); ПараметрыСвязи.Колонки.Добавить("ЭтоОблачныйЭДО", ОписаниеТипаБулево); ПараметрыСвязи.Колонки.Добавить("ДополнительныеДанныеСпискаВыбора", Новый ОписаниеТипов("Соответствие")); + ПараметрыСвязи.Колонки.Добавить("АбонентНеТребуетПриглашений", ОписаниеТипаБулево); Возврат ПараметрыСвязи; КонецФункции @@ -5539,11 +5587,6 @@ КонтекстДиагностики = ОбработкаНеисправностейБЭД.НовыйКонтекстДиагностики(); - Если НастройкиЭДО.ИспользоватьИнтеграциюОблачногоЭДО() Тогда - ОбщийМодульУчетныеЗаписиЭДОИнтеграцияОблака = ОбщегоНазначения.ОбщийМодуль("УчетныеЗаписиЭДОИнтеграцияОблака"); - КонтекстДиагностики = ОбщийМодульУчетныеЗаписиЭДОИнтеграцияОблака.ОбновитьУчетныеЗаписиЭДО(); - КонецЕсли; - Если НастройкиЭДО.ИспользоватьИнтеграциюЛокальногоЭДО() Тогда ОбщийМодульСинхронизацияЭДО = ОбщегоНазначения.ОбщийМодуль("СинхронизацияЭДО"); ОбщийМодульСинхронизацияЭДО.ОбновитьКешиОператоровЭДОИФорматов(КонтекстДиагностики); @@ -9160,6 +9203,14 @@ КонецПроцедуры +// Возвращаемое значение: +// Строка +Функция КлючНастройкиИспользуетсяРежимМножественногоВыделенияВСпискахТекущихДелЭДО() + + Возврат "ИспользуетсяРежимМножественногоВыделенияВСпискахТекущихДел"; + +КонецФункции + #КонецОбласти // НастройкиИнтерфейса Функция ВыборкаРеквизитовНомерДатаОбъектовУчета(ОбъектыУчетаПоИдентификаторам) diff --git a/Конфигурация/CommonModules/ИнтерфейсДокументовЭДОКлиент/Ext/Module.bsl b/Конфигурация/CommonModules/ИнтерфейсДокументовЭДОКлиент/Ext/Module.bsl index 115486293..58d26c36f 100644 --- a/Конфигурация/CommonModules/ИнтерфейсДокументовЭДОКлиент/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ИнтерфейсДокументовЭДОКлиент/Ext/Module.bsl @@ -1851,6 +1851,11 @@ Или ДанныеPdfДокумента = Неопределено Тогда Возврат; КонецЕсли; + Если ОбщегоНазначенияКлиентСервер.ЕстьРеквизитИлиСвойствоОбъекта(Форма.Элементы, СведенияОPdfДокументе.ИмяЭлемента) Тогда + ЭлементПоляPDF = Форма.Элементы[СведенияОPdfДокументе.ИмяЭлемента]; + Иначе + Возврат; + КонецЕсли; РеквизитПоляPdf = Форма[СведенияОPdfДокументе.ИмяРеквизита]; ТекстОшибки = НСтр("ru='Произошла ошибка при чтении файла. Файл поврежден и не может быть восстановлен.'", "ru"); #Если ВебКлиент Тогда @@ -1866,10 +1871,10 @@ КонецЕсли; Попытка Ждать РеквизитПоляPdf.ПрочитатьАсинх(ДанныеPdfДокумента.ОткрытьПотокДляЧтения()); - Форма.Элементы[СведенияОPdfДокументе.ИмяЭлемента].Видимость = Истина; + ЭлементПоляPDF.Видимость = Истина; Исключение РеквизитПоляPdf = Новый ДокументPDF; - Форма.Элементы[СведенияОPdfДокументе.ИмяЭлемента].Видимость = Ложь; + ЭлементПоляPDF.Видимость = Ложь; ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстОшибки); КонецПопытки; @@ -5227,12 +5232,20 @@ Возврат ДанныеФорм; КонецЕсли; + ОднаЗаполненнаяПечатнаяФорма = НастройкиПечатныхФорм.Количество() = 1 + И ОбщегоНазначенияКлиентСервер.ЕстьРеквизитИлиСвойствоОбъекта(Форма, "ТекущаяПечатнаяФорма") + И Форма.ТекущаяПечатнаяФорма.ВысотаТаблицы <> 0; + Для Каждого НастройкаПечатнойФормы Из НастройкиПечатныхФорм Цикл ДанныеПечатнойФормы = ИнтерфейсДокументовЭДОКлиентСервер.НовыеДанныеПечатнойФормыДляНеформализованногоЭДО(); ТабличныйДокумент = Форма[НастройкаПечатнойФормы.ИмяРеквизита]; + Если ОднаЗаполненнаяПечатнаяФорма И Форма.ТекущаяПечатнаяФорма <> ТабличныйДокумент Тогда + ТабличныйДокумент = Форма.ТекущаяПечатнаяФорма; + КонецЕсли; + Если ТабличныйДокумент.ВысотаТаблицы = 0 Тогда Продолжить; КонецЕсли; diff --git a/Конфигурация/CommonModules/ИнтерфейсДокументовЭДОКлиентСервер/Ext/Module.bsl b/Конфигурация/CommonModules/ИнтерфейсДокументовЭДОКлиентСервер/Ext/Module.bsl index fad5418dc..9af71a459 100644 --- a/Конфигурация/CommonModules/ИнтерфейсДокументовЭДОКлиентСервер/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ИнтерфейсДокументовЭДОКлиентСервер/Ext/Module.bsl @@ -23,6 +23,7 @@ Параметры.Вставить("ПараметрыОбмена", Неопределено); Параметры.Вставить("ИдентификаторДокумента", ""); Параметры.Вставить("СопроводительнаяЗаписка", ""); + Параметры.Вставить("Черновик", Неопределено); Возврат Параметры; КонецФункции @@ -396,6 +397,8 @@ Представление = Строка(СвойстваДокумента.ВидДокумента); КонецЕсли; + ПриОпределенииПредставленияДокументаПоСвойствам(Представление, СвойстваДокумента); + Если ЭтоНовый Тогда Представление = СтрШаблон(НСтр("ru = '%1 (Создание)'"), Представление); КонецЕсли; @@ -878,6 +881,7 @@ Поля.Добавить("ВидДокумента"); Поля.Добавить("НомерДокумента"); Поля.Добавить("ДатаДокумента"); + ПриОпределенииПолейПредставленияДокумента(Поля); КонецПроцедуры // Заполняет представление электронного документа. @@ -892,6 +896,19 @@ Представление = ПредставлениеДокументаПоСвойствам(Данные); КонецПроцедуры +// Параметры: +// Поля - Массив из Строка +Процедура ПриОпределенииПолейПредставленияДокумента(Поля) + ЧерновикиЭДОКлиентСервер.ПриОпределенииПолейПредставленияДокумента(Поля); +КонецПроцедуры + +// Параметры: +// Представление - Строка +// СвойстваДокумента - См. ПредставлениеДокументаПоСвойствам.СвойстваДокумента +Процедура ПриОпределенииПредставленияДокументаПоСвойствам(Представление, СвойстваДокумента) + ЧерновикиЭДОКлиентСервер.ПриОпределенииПредставленияДокументаПоСвойствам(Представление, СвойстваДокумента); +КонецПроцедуры + #КонецОбласти #Область РучноеФормированиеТитула diff --git a/Конфигурация/CommonModules/ИнтерфейсИСМПОбщегоНазначения/Ext/Module.bsl b/Конфигурация/CommonModules/ИнтерфейсИСМПОбщегоНазначения/Ext/Module.bsl index b97f1acda..dc1a3be57 100644 --- a/Конфигурация/CommonModules/ИнтерфейсИСМПОбщегоНазначения/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ИнтерфейсИСМПОбщегоНазначения/Ext/Module.bsl @@ -974,6 +974,7 @@ ДанныеДляУточнения.ВидПродукции = ВидПродукции; ДанныеДляУточнения.ТНВЭД = ПараметрыКодаМаркировки.КодТНВЭД; ДанныеДляУточнения.ГруппаТНВЭД = ПараметрыКодаМаркировки.ГруппаТНВЭД; + ДанныеДляУточнения.GTIN = ИсточникДанных["gtin"]; Значение = ИсточникДанных["batchNumber"]; Если ЗначениеЗаполнено(Значение) Тогда @@ -2129,46 +2130,12 @@ ДанныеДляУточненияТоварнойГруппы = ИнтерфейсИСМПОбщегоНазначенияКлиентСервер.ДанныеДляУточненияТоварнойГруппы(); ЗаполнитьЗначенияСвойств(ДанныеДляУточненияТоварнойГруппы, ДанныеПродукции); + ДанныеДляУточненияТоварнойГруппы.ДанныеПродукции = ДанныеПродукции; + ДанныеДляУточненияТоварнойГруппы.GTIN = ДанныеПродукции.GTIN; ВидПродукции = ИнтерфейсИСМПОбщегоНазначенияКлиентСервер.ТоварнаяГруппаЧислом( ДанныеПродукции.ТоварнаяГруппаЧислом, ДанныеДляУточненияТоварнойГруппы); - Если Не ЗначениеЗаполнено(ВидПродукции) Тогда - - ВидыПродукцииПоДаннымУточнения = ИнтерфейсИСМПОбщегоНазначенияВызовСервера.ВидыПродукцииПоДаннымУточнения( - ДанныеДляУточненияТоварнойГруппы); - ВидыПродукцииПоддерживающиеПодключениеКОборудованиюРозлива = - КонструкторИСМПОбщегоНазначенияКлиентСервер.ВидыПродукцииПоддерживающиеПодключениеКОборудованиюРозлива(); - ВидыПродукцииПодконтрольныеВЕТИС = КонструкторИСМПОбщегоНазначенияКлиентСервер.ВидыПродукцииИСМПВЕТИС(); - - Для Каждого ВидПродукцииПоДаннымУточнения Из ВидыПродукцииПоДаннымУточнения Цикл - - Если ПодлежитВетеринарномуКонтролю = Неопределено Тогда - ВидПродукции = ВидПродукцииПоДаннымУточнения; - Если Строка(ДанныеПродукции.ТоварнаяГруппаЧислом) = "15" // beer - И (СтрНайти(ВРег(ДанныеПродукции.ХарактеристикаУпаковки), "КЕГ") > 0 - Или СтрНайти(ВРег(ДанныеПродукции.ХарактеристикаУпаковки), "УПАКОВКА СПЕЦИАЛИЗИРОВАННАЯ") > 0) - И ВидыПродукцииПоддерживающиеПодключениеКОборудованиюРозлива.Количество() > 0 - И ВидыПродукцииПоддерживающиеПодключениеКОборудованиюРозлива.Найти(ВидПродукции) = Неопределено Тогда - ВидПродукции = ВидыПродукцииПоддерживающиеПодключениеКОборудованиюРозлива[0]; - КонецЕсли; - Прервать; - Иначе - Если ПодлежитВетеринарномуКонтролю - И ВидыПродукцииПодконтрольныеВЕТИС.Найти(ВидПродукцииПоДаннымУточнения) <> Неопределено Тогда - ВидПродукции = ВидПродукцииПоДаннымУточнения; - Прервать; - ИначеЕсли Не ПодлежитВетеринарномуКонтролю - И ВидыПродукцииПодконтрольныеВЕТИС.Найти(ВидПродукцииПоДаннымУточнения) = Неопределено Тогда - ВидПродукции = ВидПродукцииПоДаннымУточнения; - Прервать; - КонецЕсли; - КонецЕсли; - - КонецЦикла; - - КонецЕсли; - ДанныеПродукции.ВидПродукции = ВидПродукции; КонецЕсли; diff --git a/Конфигурация/CommonModules/ИнтерфейсИСМПОбщегоНазначенияКлиентСервер/Ext/Module.bsl b/Конфигурация/CommonModules/ИнтерфейсИСМПОбщегоНазначенияКлиентСервер/Ext/Module.bsl index dfb8424a5..84ec2c742 100644 --- a/Конфигурация/CommonModules/ИнтерфейсИСМПОбщегоНазначенияКлиентСервер/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ИнтерфейсИСМПОбщегоНазначенияКлиентСервер/Ext/Module.bsl @@ -793,6 +793,7 @@ СоответствиеПредставлений.Вставить("RZN", НСтр("ru = 'Росздравнадзор'")); СоответствиеПредставлений.Вставить("VETRF", НСтр("ru = 'ВетИС (аннулированный ВСД)'")); СоответствиеПредставлений.Вставить("RD", НСтр("ru = 'Государственные органы контроля за соблюдением требований технических регламентов'")); + СоответствиеПредставлений.Вставить("FSSP", НСтр("ru = 'Федеральная служба судебных приставов'")); Для Каждого Идентификатор Из МассивИдентификаторов Цикл @@ -879,6 +880,8 @@ Результат = ОбщегоНазначенияИСМПКлиентСервер.ДанныеДляУточненияВидовПродукцииПоТНВЭДиОКПД2(); Результат.Вставить("ВидПродукции", Неопределено); + Результат.Вставить("ДанныеПродукции", Неопределено); + Результат.Вставить("GTIN", Неопределено); Возврат Результат; @@ -1924,22 +1927,163 @@ Результат = ПредопределенноеЗначение("Справочник.ВидыПродукцииИС.ПустаяСсылка"); - Если ВидыПродукции.Количество() > 0 Тогда - Если ДанныеДляУточнения <> Неопределено Тогда - Если ЗначениеЗаполнено(ДанныеДляУточнения.ВидПродукции) - И ВидыПродукции.Найти(ДанныеДляУточнения.ВидПродукции) <> Неопределено Тогда - Результат = ДанныеДляУточнения.ВидПродукции; - ИначеЕсли ЕстьДанныеДляУточненияВидаПродукции(ДанныеДляУточнения) Тогда - ВидыПродукцииПоДаннымУточнения = ИнтерфейсИСМПОбщегоНазначенияВызовСервера.ВидыПродукцииПоДаннымУточнения(ДанныеДляУточнения); - Если ВидыПродукцииПоДаннымУточнения.Количество() = 1 - И ВидыПродукции.Найти(ВидыПродукцииПоДаннымУточнения[0]) <> Неопределено Тогда - Результат = ВидыПродукцииПоДаннымУточнения[0]; - КонецЕсли; + Если ВидыПродукции.Количество() = 0 Тогда + Возврат Результат; + КонецЕсли; + + Если ДанныеДляУточнения <> Неопределено Тогда + + Варианты = Новый Массив; + + Если ЗначениеЗаполнено(ДанныеДляУточнения.ВидПродукции) + И ВидыПродукции.Найти(ДанныеДляУточнения.ВидПродукции) <> Неопределено Тогда + + Варианты.Добавить(ДанныеДляУточнения.ВидПродукции); + + ИначеЕсли ЕстьДанныеДляУточненияВидаПродукции(ДанныеДляУточнения) Тогда + + ВидыПродукцииПоДаннымУточнения = ИнтерфейсИСМПОбщегоНазначенияВызовСервера.ВидыПродукцииПоДаннымУточнения(ДанныеДляУточнения); + Если ВидыПродукцииПоДаннымУточнения.Количество() = 1 + И ВидыПродукции.Найти(ВидыПродукцииПоДаннымУточнения[0]) <> Неопределено Тогда + + Варианты.Добавить(ВидыПродукцииПоДаннымУточнения[0]); + + ИначеЕсли ДанныеДляУточнения.ДанныеПродукции <> Неопределено Тогда + + ВидыПродукцииПоддерживающиеПодключениеКОборудованиюРозлива = + КонструкторИСМПОбщегоНазначенияКлиентСервер.ВидыПродукцииПоддерживающиеПодключениеКОборудованиюРозлива(); + ВидыПродукцииПодконтрольныеВЕТИС = КонструкторИСМПОбщегоНазначенияКлиентСервер.ВидыПродукцииИСМПВЕТИС(); + + ПодлежитВетеринарномуКонтролю = ДанныеДляУточнения.ДанныеПродукции.ПодлежитВетеринарномуКонтролю; + + Для Каждого ВидПродукцииПоДаннымУточнения Из ВидыПродукцииПоДаннымУточнения Цикл + + Если ВидыПродукции.Найти(ВидПродукцииПоДаннымУточнения) = Неопределено Тогда + Продолжить; + КонецЕсли; + + Если Строка(ДанныеДляУточнения.ДанныеПродукции.ТоварнаяГруппаЧислом) = "15" Тогда // beer + + ЭтоКегВНациональномКаталоге = СтрНайти(ВРег(ДанныеДляУточнения.ДанныеПродукции.ХарактеристикаУпаковки), "КЕГ") > 0 + Или СтрНайти(ВРег(ДанныеДляУточнения.ДанныеПродукции.ХарактеристикаУпаковки), "УПАКОВКА СПЕЦИАЛИЗИРОВАННАЯ") > 0; + + ЭтоПивоВКегах = ВидыПродукцииПоддерживающиеПодключениеКОборудованиюРозлива.Найти(ВидПродукцииПоДаннымУточнения) <> Неопределено; + + Если ЭтоКегВНациональномКаталоге И ЭтоПивоВКегах Тогда // Пиво в кегах + Варианты.Добавить(ВидПродукцииПоДаннымУточнения); + Прервать; + ИначеЕсли Не ЭтоКегВНациональномКаталоге И Не ЭтоПивоВКегах Тогда // Пиво в потребительских упаковках + Варианты.Добавить(ВидПродукцииПоДаннымУточнения); + Прервать; + КонецЕсли; + + ИначеЕсли ПодлежитВетеринарномуКонтролю <> Неопределено Тогда + + Если ПодлежитВетеринарномуКонтролю + И ВидыПродукцииПодконтрольныеВЕТИС.Найти(ВидПродукцииПоДаннымУточнения) <> Неопределено Тогда + Варианты.Добавить(ВидПродукцииПоДаннымУточнения); + Прервать; + ИначеЕсли Не ПодлежитВетеринарномуКонтролю + И ВидыПродукцииПодконтрольныеВЕТИС.Найти(ВидПродукцииПоДаннымУточнения) = Неопределено Тогда + Варианты.Добавить(ВидПродукцииПоДаннымУточнения); + Прервать; + КонецЕсли; + + Иначе + + Варианты.Добавить(ВидПродукцииПоДаннымУточнения); + + КонецЕсли; + + КонецЦикла; + + Иначе + + Для Каждого ВидПродукцииПоДаннымУточнения Из ВидыПродукцииПоДаннымУточнения Цикл + + Если ВидыПродукции.Найти(ВидПродукцииПоДаннымУточнения) = Неопределено Тогда + Продолжить; + КонецЕсли; + + Варианты.Добавить(ВидПродукцииПоДаннымУточнения); + + КонецЦикла; + КонецЕсли; + + ИначеЕсли ДанныеДляУточнения.ДанныеПродукции <> Неопределено + И ВидыПродукции.Количество() > 1 Тогда + + ВидыПродукцииПоддерживающиеПодключениеКОборудованиюРозлива = + КонструкторИСМПОбщегоНазначенияКлиентСервер.ВидыПродукцииПоддерживающиеПодключениеКОборудованиюРозлива(); + ВидыПродукцииПодконтрольныеВЕТИС = КонструкторИСМПОбщегоНазначенияКлиентСервер.ВидыПродукцииИСМПВЕТИС(); + + ПодлежитВетеринарномуКонтролю = ДанныеДляУточнения.ДанныеПродукции.ПодлежитВетеринарномуКонтролю; + + Для Каждого ВидПродукцииПоДаннымУточнения Из ВидыПродукции Цикл + + Если Строка(ДанныеДляУточнения.ДанныеПродукции.ТоварнаяГруппаЧислом) = "15" Тогда // beer + + ЭтоКегВНациональномКаталоге = СтрНайти(ВРег(ДанныеДляУточнения.ДанныеПродукции.ХарактеристикаУпаковки), "КЕГ") > 0 + Или СтрНайти(ВРег(ДанныеДляУточнения.ДанныеПродукции.ХарактеристикаУпаковки), "УПАКОВКА СПЕЦИАЛИЗИРОВАННАЯ") > 0; + + ЭтоПивоВКегах = ВидыПродукцииПоддерживающиеПодключениеКОборудованиюРозлива.Найти(ВидПродукцииПоДаннымУточнения) <> Неопределено; + + Если ЭтоКегВНациональномКаталоге И ЭтоПивоВКегах Тогда // Пиво в кегах + Варианты.Добавить(ВидПродукцииПоДаннымУточнения); + Прервать; + ИначеЕсли Не ЭтоКегВНациональномКаталоге И Не ЭтоПивоВКегах Тогда // Пиво в потребительских упаковках + Варианты.Добавить(ВидПродукцииПоДаннымУточнения); + Прервать; + КонецЕсли; + + ИначеЕсли ПодлежитВетеринарномуКонтролю <> Неопределено Тогда + + Если ПодлежитВетеринарномуКонтролю + И ВидыПродукцииПодконтрольныеВЕТИС.Найти(ВидПродукцииПоДаннымУточнения) <> Неопределено Тогда + Варианты.Добавить(ВидПродукцииПоДаннымУточнения); + Прервать; + ИначеЕсли Не ПодлежитВетеринарномуКонтролю + И ВидыПродукцииПодконтрольныеВЕТИС.Найти(ВидПродукцииПоДаннымУточнения) = Неопределено Тогда + Варианты.Добавить(ВидПродукцииПоДаннымУточнения); + Прервать; + КонецЕсли; + + Иначе + + Варианты.Добавить(ВидПродукцииПоДаннымУточнения); + + КонецЕсли; + + КонецЦикла; + КонецЕсли; - Если Не ЗначениеЗаполнено(Результат) Тогда - Результат = ВидыПродукции[0]; + + Если Варианты.Количество() = 1 Тогда + Результат = Варианты[0]; + ИначеЕсли ЗначениеЗаполнено(ДанныеДляУточнения.GTIN) + И Варианты.Количество() > 1 Тогда + + #Если Сервер Или ВнешнееСоединение Тогда + ОписаниеНоменклатурыПоGTIN = ШтрихкодированиеОбщегоНазначенияИС.ОписаниеНоменклатурыПоGTINИзКеша(ДанныеДляУточнения.GTIN); + + Если ОписаниеНоменклатурыПоGTIN <> Неопределено + И Варианты.Найти(ОписаниеНоменклатурыПоGTIN.ВидПродукции) <> Неопределено Тогда + Результат = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(ОписаниеНоменклатурыПоGTIN.ВидПродукции); + КонецЕсли; + #КонецЕсли + КонецЕсли; + + Если Не ЗначениеЗаполнено(Результат) + И Варианты.Количество() > 0 Тогда + Результат = Варианты[0]; + КонецЕсли; + + КонецЕсли; + + Если Не ЗначениеЗаполнено(Результат) Тогда + Результат = ВидыПродукции[0]; КонецЕсли; Возврат Результат; @@ -2078,6 +2222,7 @@ ДанныеДляУточнения = ДанныеДляУточненияТоварнойГруппы(); ДанныеДляУточнения.ВидПродукции = ВидПродукции; + ДанныеДляУточнения.GTIN = ИсточникДанных["gtin"]; Если Значение <> Неопределено И Значение.Количество() Тогда ПараметрыКодаМаркировки.ВидПродукции = ТоварнаяГруппаЧислом(Значение[0], ДанныеДляУточнения); diff --git a/Конфигурация/CommonModules/ИнтерфейсИСМПСлужебный/Ext/Module.bsl b/Конфигурация/CommonModules/ИнтерфейсИСМПСлужебный/Ext/Module.bsl index d3e92d1f1..f4d6703e7 100644 --- a/Конфигурация/CommonModules/ИнтерфейсИСМПСлужебный/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ИнтерфейсИСМПСлужебный/Ext/Module.bsl @@ -116,6 +116,7 @@ Если ИсточникДанных["productGroup"] <> Неопределено И ЗначениеЗаполнено( ИсточникДанных["productGroup"]) Тогда ДанныеДляУточненияТоварнойГруппы = ИнтерфейсИСМПОбщегоНазначенияКлиентСервер.ДанныеДляУточненияТоварнойГруппы(); ДанныеДляУточненияТоварнойГруппы.ВидПродукции = ВидПродукции; + ДанныеДляУточненияТоварнойГруппы.GTIN = ИсточникДанных["gtin"]; ПараметрыКодаМаркировки.ВидПродукции = ОбщегоНазначенияИСМПКлиентСерверПовтИсп.ТоварнаяГруппа( ИсточникДанных["productGroup"], ДанныеДляУточненияТоварнойГруппы); КонецЕсли; diff --git a/Конфигурация/CommonModules/ИнтерфейсМОТПСлужебный/Ext/Module.bsl b/Конфигурация/CommonModules/ИнтерфейсМОТПСлужебный/Ext/Module.bsl index 3657174fe..0537babd4 100644 --- a/Конфигурация/CommonModules/ИнтерфейсМОТПСлужебный/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ИнтерфейсМОТПСлужебный/Ext/Module.bsl @@ -57,6 +57,7 @@ Если ИсточникДанных["productGroup"] <> Неопределено И ЗначениеЗаполнено( ИсточникДанных["productGroup"]) Тогда ДанныеДляУточненияТоварнойГруппы = ИнтерфейсИСМПОбщегоНазначенияКлиентСервер.ДанныеДляУточненияТоварнойГруппы(); ДанныеДляУточненияТоварнойГруппы.ВидПродукции = ВидПродукции; + ДанныеДляУточненияТоварнойГруппы.GTIN = ИсточникДанных["gtin"]; ПараметрыКодаМаркировки.ВидПродукции = ИнтерфейсИСМПОбщегоНазначенияКлиентСервер.ТоварнаяГруппа( ИсточникДанных["productGroup"], ДанныеДляУточненияТоварнойГруппы); КонецЕсли; diff --git a/Конфигурация/CommonModules/ИнтерфейсРМКСлужебныйКлиент/Ext/Module.bsl b/Конфигурация/CommonModules/ИнтерфейсРМКСлужебныйКлиент/Ext/Module.bsl index 38e6671fa..ba48e5612 100644 --- a/Конфигурация/CommonModules/ИнтерфейсРМКСлужебныйКлиент/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ИнтерфейсРМКСлужебныйКлиент/Ext/Module.bsl @@ -1024,6 +1024,7 @@ ИспользуемыеТипыКонтроля = ПолучитьТипыКонтроляЭтапа(ЭтапКонтроля); ОчиститьРезультатКонтроляПродаж(РезультатКонтроля); + РезультатКонтроля.СтартКонтроля = Истина; РезультатКонтроля.ЭтапКонтроля = ЭтапКонтроля; Если ЭтапКонтроля = ЭтапыКонтроляПродаж.ДобавлениеТовара Или ЭтапКонтроля = ЭтапыКонтроляПродаж.ИзменениеСтрокиТовара Тогда @@ -1682,6 +1683,7 @@ ПараметрыДляОткрытия.Вставить("ОстатокБаллов", 0); ПараметрыДляОткрытия.Вставить("СуммаОплаченоБонусами", 0); ПараметрыДляОткрытия.Вставить("КурсБаллов", 1); + ПараметрыДляОткрытия.Вставить("СуммаПредоплатыБонусами", 0); Возврат ПараметрыДляОткрытия; diff --git a/Конфигурация/CommonModules/ИнтерфейсРМКСлужебныйКлиентСервер/Ext/Module.bsl b/Конфигурация/CommonModules/ИнтерфейсРМКСлужебныйКлиентСервер/Ext/Module.bsl index f4fec4502..36ec1143d 100644 --- a/Конфигурация/CommonModules/ИнтерфейсРМКСлужебныйКлиентСервер/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ИнтерфейсРМКСлужебныйКлиентСервер/Ext/Module.bsl @@ -1618,13 +1618,32 @@ Возврат Результат; КонецФункции -Функция ОписаниеКартыДляИнтерфейса(ДанныеССервераЛояльности) Экспорт +Функция ОписаниеКартыДляИнтерфейса(ДанныеССервераЛояльности, РежимКассыСамообслуживания = Ложь) Экспорт Результат = СтруктураДанныхКартыДляИнтерфейса(); НомерКарты = ?(ЗначениеЗаполнено(ДанныеССервераЛояльности.Barcode), ДанныеССервераЛояльности.Barcode, ДанныеССервераЛояльности.MagneticCode); Результат.КодКарты = НомерКарты; Если ДанныеССервераЛояльности.Свойство("BonusData") Тогда - Результат.ПокупательФИО = ДанныеССервераЛояльности.ClientName; - Результат.НомерТелефона = ДанныеССервераЛояльности.Phone; + ТипПоиска = ""; + Если РежимКассыСамообслуживания Тогда + ТипПоиска = ДанныеССервераЛояльности.SearchType; + КонецЕсли; + ПокупательФИО = ДанныеССервераЛояльности.ClientName; + Если ТипПоиска <> "ФИО" + И ЗначениеЗаполнено(ПокупательФИО) И ЗначениеЗаполнено(ТипПоиска) Тогда + ЧастиФИО = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(СокрЛП(ПокупательФИО), + СтрШаблон(НСтр("ru = '%1'"), " ")); + Если ЧастиФИО.Количество() > 2 Тогда + ПокупательФИО = ФизическиеЛицаКлиентСервер.ФамилияИнициалы(ПокупательФИО); + КонецЕсли; + КонецЕсли; + Результат.ПокупательФИО = ПокупательФИО; + НомерТелефона = ДанныеССервераЛояльности.Phone; + Если ТипПоиска <> "Телефон" + И ЗначениеЗаполнено(НомерТелефона) И ЗначениеЗаполнено(ТипПоиска) Тогда + ШаблонТелефона = НСтр("ru = '****%1'"); + НомерТелефона = СтрШаблон(ШаблонТелефона, Прав(НомерТелефона, 4)); + КонецЕсли; + Результат.НомерТелефона = НомерТелефона; Результат.ПокупательПочта = ДанныеССервераЛояльности.EMail; Результат.ФизическоеЛицо = ДанныеССервераЛояльности.IsPerson; СтрокаXMLТолькоЧастьДата = Лев(ДанныеССервераЛояльности.DateOfBirth, 10); diff --git a/Конфигурация/CommonModules/КалендарныеГрафикиСлужебный/Ext/Module.bsl b/Конфигурация/CommonModules/КалендарныеГрафикиСлужебный/Ext/Module.bsl index 44e11d91f..94610c232 100644 --- a/Конфигурация/CommonModules/КалендарныеГрафикиСлужебный/Ext/Module.bsl +++ b/Конфигурация/CommonModules/КалендарныеГрафикиСлужебный/Ext/Module.bsl @@ -123,4 +123,13 @@ КонецПроцедуры +// См. СтандартныеПодсистемыСервер.ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод +Процедура ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод(Методы) Экспорт + + Если ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.БазоваяФункциональность") Тогда + Методы.Вставить("ОбновитьДанныеЗависимыеОтПроизводственныхКалендарей"); + КонецЕсли; + +КонецПроцедуры + #КонецОбласти \ No newline at end of file diff --git a/Конфигурация/CommonModules/КонструкторИСМПОбщегоНазначенияКлиентСервер/Ext/Module.bsl b/Конфигурация/CommonModules/КонструкторИСМПОбщегоНазначенияКлиентСервер/Ext/Module.bsl index e164497d5..056cfe0f7 100644 --- a/Конфигурация/CommonModules/КонструкторИСМПОбщегоНазначенияКлиентСервер/Ext/Module.bsl +++ b/Конфигурация/CommonModules/КонструкторИСМПОбщегоНазначенияКлиентСервер/Ext/Module.bsl @@ -1599,6 +1599,13 @@ // Массив Из СправочникСсылка.ВидыПродукцииИС - Массив связанных видов продукции ГИСМТ. Функция ВидыПродукцииИСМПВЕТИС() Экспорт + РезультатЧтенияКеша = ОбщегоНазначенияИСКлиентСервер.ПрочитатьКеш( + "Общее", "ВидыПродукцииИСМПВЕТИС"); + Если РезультатЧтенияКеша <> Неопределено + И РезультатЧтенияКеша.Результат <> Неопределено Тогда + Возврат РезультатЧтенияКеша.Результат; + КонецЕсли; + Результат = Новый Массив; ВидыПродукцииИСМП = КонструкторИСОбщегоНазначенияКлиентСервер.ВидыПродукцииИСМП(); @@ -1613,6 +1620,8 @@ КонецЦикла; + ОбщегоНазначенияИСКлиентСервер.ЗаписатьВКеш(РезультатЧтенияКеша, Результат); + Возврат Результат; КонецФункции diff --git a/Конфигурация/CommonModules/КонструкторИСОбщегоНазначенияКлиентСервер/Ext/Module.bsl b/Конфигурация/CommonModules/КонструкторИСОбщегоНазначенияКлиентСервер/Ext/Module.bsl index 4f8b481aa..8dd43348e 100644 --- a/Конфигурация/CommonModules/КонструкторИСОбщегоНазначенияКлиентСервер/Ext/Module.bsl +++ b/Конфигурация/CommonModules/КонструкторИСОбщегоНазначенияКлиентСервер/Ext/Module.bsl @@ -33,7 +33,9 @@ ВозвращаемоеЗначение.Добавить(ЭлементМассива); КонецЕсли; КонецЦикла; - ОбщегоНазначенияКлиентСервер.СвернутьМассив(ВозвращаемоеЗначение); + Если ВозвращаемоеЗначение.Количество() > 1 Тогда + ОбщегоНазначенияКлиентСервер.СвернутьМассив(ВозвращаемоеЗначение); + КонецЕсли; Возврат ВозвращаемоеЗначение; Иначе Возврат ВидПродукции; @@ -203,6 +205,12 @@ // Массив Из СправочникСсылка.ВидыПродукцииИС - Массив связанных видов продукции ГИС МТ. Функция ВидыПродукцииИСМПЕГАИС() Экспорт + РезультатЧтенияКеша = ОбщегоНазначенияИСКлиентСервер.ПрочитатьКеш("Общее", "ВидыПродукцииИСМПЕГАИС"); + Если РезультатЧтенияКеша <> Неопределено + И РезультатЧтенияКеша.Результат <> Неопределено Тогда + Возврат РезультатЧтенияКеша.Результат; + КонецЕсли; + Результат = Новый Массив; ВидыПродукцииИСМП = ВидыПродукцииИСМП(); @@ -217,6 +225,8 @@ КонецЦикла; + ОбщегоНазначенияИСКлиентСервер.ЗаписатьВКеш(РезультатЧтенияКеша, Результат); + Возврат Результат; КонецФункции @@ -870,6 +880,22 @@ // Массив из СправочникСсылка.ВидыПродукцииИС - виды продукции. Функция ВидыПродукцииКлюча(КлючВидовПродукции, ИменаПодсистем = Неопределено) Экспорт + Если ЗначениеЗаполнено(КлючВидовПродукции) Тогда + Если ИменаПодсистем = Неопределено Тогда + Значение = СтрШаблон("ВидыПродукцииКлюча%1", КлючВидовПродукции.УникальныйИдентификатор()); + Иначе + Значение = СтрШаблон("ВидыПродукцииКлюча%1%2", КлючВидовПродукции.УникальныйИдентификатор(), ИменаПодсистем); + КонецЕсли; + Иначе + Значение = "ВидыПродукцииКлючаНеопределено"; + КонецЕсли; + + РезультатЧтенияКеша = ОбщегоНазначенияИСКлиентСервер.ПрочитатьКеш("ВидыПродукцииКлюча", Значение); + Если РезультатЧтенияКеша <> Неопределено + И РезультатЧтенияКеша.Результат <> Неопределено Тогда + Возврат РезультатЧтенияКеша.Результат; + КонецЕсли; + Результат = Новый Массив; ДанныеКлюча = ДанныеКлючаВидовПродукции(КлючВидовПродукции); @@ -902,6 +928,8 @@ КонецЕсли; + ОбщегоНазначенияИСКлиентСервер.ЗаписатьВКеш(РезультатЧтенияКеша, Результат); + Возврат Результат; КонецФункции @@ -980,11 +1008,10 @@ // Массив из ОпределяемыйТип.ЗначениеЭлементаКонструктораВидовПродукцииИС - значение. Функция ЗначенияЭлементаКонструктораПоВидуПродукции(ЭлементКонструктора, ВидПродукции) Экспорт - КешРезультатовФункции = Неопределено; - Результат = ОбщегоНазначенияИСКлиентСервер.ПрочитатьКеш( - ОбщегоНазначенияИСКлиентСерверПовтИсп.ГлобальныйКеш(), ЭлементКонструктора, ВидПродукции, КешРезультатовФункции); - Если Результат <> Неопределено Тогда - Возврат Результат; + РезультатЧтенияКеша = ОбщегоНазначенияИСКлиентСервер.ПрочитатьКеш(ЭлементКонструктора, ВидПродукции); + Если РезультатЧтенияКеша <> Неопределено + И РезультатЧтенияКеша.Результат <> Неопределено Тогда + Возврат РезультатЧтенияКеша.Результат; КонецЕсли; Если ТипЗнч(ВидПродукции) = Тип("Массив") @@ -1028,9 +1055,7 @@ КонецЕсли; - Если КешРезультатовФункции <> Неопределено Тогда - КешРезультатовФункции.Вставить(ВидПродукции, Результат); - КонецЕсли; + ОбщегоНазначенияИСКлиентСервер.ЗаписатьВКеш(РезультатЧтенияКеша, Результат); Возврат Результат; @@ -1045,11 +1070,10 @@ // Массив из СправочникСсылка.ВидыПродукцииИС - виды продукции по элементу конструктора. Функция ВидыПродукцииПоЭлементуКонструктора(ЭлементКонструктора) Экспорт - КешРезультатовФункции = Неопределено; - Результат = ОбщегоНазначенияИСКлиентСервер.ПрочитатьКеш( - ОбщегоНазначенияИСКлиентСерверПовтИсп.ГлобальныйКеш(), ЭлементКонструктора, "", КешРезультатовФункции); - Если Результат <> Неопределено Тогда - Возврат Результат; + РезультатЧтенияКеша = ОбщегоНазначенияИСКлиентСервер.ПрочитатьКеш(ЭлементКонструктора, ""); + Если РезультатЧтенияКеша <> Неопределено + И РезультатЧтенияКеша.Результат <> Неопределено Тогда + Возврат РезультатЧтенияКеша.Результат; КонецЕсли; ДанныеЭлемента = ДанныеЭлементаКонструктора(ЭлементКонструктора); @@ -1059,9 +1083,7 @@ Результат.Добавить(КлючИЗначение.Ключ); КонецЦикла; - Если КешРезультатовФункции <> Неопределено Тогда - КешРезультатовФункции.Вставить("", Результат); - КонецЕсли; + ОбщегоНазначенияИСКлиентСервер.ЗаписатьВКеш(РезультатЧтенияКеша, Результат); Возврат Результат; @@ -1246,6 +1268,13 @@ // * Значение - Массив из СправочникСсылка.ВидыПродукцииИС - вид продукции, для которого задано значение. Функция ВидыПродукцииПоЗначениямЭлементаКонструктора(ЭлементКонструктора) Экспорт + РезультатЧтенияКеша = ОбщегоНазначенияИСКлиентСервер.ПрочитатьКеш( + "ВидыПродукцииПоЗначениямЭлементаКонструктора", ЭлементКонструктора); + Если РезультатЧтенияКеша <> Неопределено + И РезультатЧтенияКеша.Результат <> Неопределено Тогда + Возврат РезультатЧтенияКеша.Результат; + КонецЕсли; + ДанныеЭлемента = ДанныеЭлементаКонструктора(ЭлементКонструктора); Результат = Новый Соответствие; @@ -1265,6 +1294,8 @@ КонецЦикла; КонецЦикла; + ОбщегоНазначенияИСКлиентСервер.ЗаписатьВКеш(РезультатЧтенияКеша, Результат); + Возврат Результат; КонецФункции @@ -1566,7 +1597,7 @@ ПредставлениеВидаУпаковки = НСтр("ru = 'единицы'"); ИначеЕсли ВидУпаковки = ВидУпаковкиЛогистическая Тогда - ПредставлениеВидаУпаковки = НСтр("ru = 'Короб'"); + ПредставлениеВидаУпаковки = НСтр("ru = 'Логистическая'"); Иначе ПредставлениеВидаУпаковки = ""; diff --git a/Конфигурация/CommonModules/КонтрольОстатковУНФ/Ext/Module.bsl b/Конфигурация/CommonModules/КонтрольОстатковУНФ/Ext/Module.bsl index fa9383092..70ed42e9f 100644 --- a/Конфигурация/CommonModules/КонтрольОстатковУНФ/Ext/Module.bsl +++ b/Конфигурация/CommonModules/КонтрольОстатковУНФ/Ext/Module.bsl @@ -138,8 +138,7 @@ КонецЕсли; // +УОП - - УОП_ИнформацияПоПартиям = ИнформацияОТипахПартий(ВыборкаЗаписей, УОП_ИнформацияПоПартиям); + УОП_ИнформацияПоПартиям = ИнформацияОТипахПартий(ВыборкаЗаписей, УОП_ИнформацияПоПартиям); //-УОП ПредставлениеНоменклатуры = Справочники.Номенклатура.Представление(ВыборкаЗаписей.НоменклатураПредставление, @@ -149,8 +148,7 @@ ТекстСообщения = СтрЗаменить(ШаблонСообщения, "%НоменклатураХарактеристикаПартия%", ПредставлениеНоменклатуры); // +УОП - Если УОП_ИнформацияПоПартиям.ТипПартии = Перечисления.УОП_ТипыПартий.ПартияОтрицательнойОбласти - ИЛИ УОП_ИнформацияПоПартиям.ТипПартии = Перечисления.УОП_ТипыПартий.ПартияОтрицательнойОбластиДругихСкладов Тогда + Если НЕ УОП_ИнформацияПоПартиям.ТипыПартийПоложительнойОбласти.Найти(УОП_ИнформацияПоПартиям.ТипПартии) = Неопределено Тогда ТекстСообщения = СтрЗаменить(ТекстСообщения, НСтр("ru='остаток %КоличествоОстаток% %ЕдиницаИзмерения%, '", "ru"),""); КонецЕсли; // -УОП @@ -238,8 +236,8 @@ // +УОП УОП_КолонкаПартия = Неопределено; УОП_УчитыватьПартииПООПоСреднему = УОП_ОбщегоНазначения.ЗначениеКонстанты("УОП_УчитыватьПООПоСреднемуПриАвтосписании"); - УОП_ИнформацияПоПартиям = Новый Соответствие; + УОП_ИнформацияПоПартиям = Новый Соответствие; // -УОП Пока ВыборкаЗаписей.Следующий() Цикл @@ -354,6 +352,7 @@ // +УОП ЗафиксироватьОшибкуВДокументе(ДокОбъект, Отказ); + УОП_ИнформацияПоПартиям = Неопределено; // -УОП ЗаголовокОшибки = НСтр("ru = 'Ошибка:'"); @@ -373,10 +372,6 @@ УчетПоНесколькимСкладам = Константы.ФункциональнаяОпцияУчетПоНесколькимСкладам.Получить(); УчетПоНесколькимПодразделениям = Константы.ФункциональнаяОпцияУчетПоНесколькимПодразделениям.Получить(); - // +УОП - УОП_ИнформацияПоПартиям = Неопределено; - // -УОП - Пока ВыборкаЗаписей.Следующий() Цикл // Интеркампани @@ -417,8 +412,7 @@ ТекстСообщения = СтрЗаменить(ШаблонСообщения, "%НоменклатураХарактеристикаПартия%", ПредставлениеНоменклатуры); // +УОП - Если УОП_ИнформацияПоПартиям.ТипПартии = Перечисления.УОП_ТипыПартий.ПартияОтрицательнойОбласти - ИЛИ УОП_ИнформацияПоПартиям.ТипПартии = Перечисления.УОП_ТипыПартий.ПартияОтрицательнойОбластиДругихСкладов Тогда + Если НЕ УОП_ИнформацияПоПартиям.ТипыПартийПоложительнойОбласти.Найти(УОП_ИнформацияПоПартиям.ТипПартии) = Неопределено Тогда ТекстСообщения = СтрЗаменить(ТекстСообщения, НСтр("ru='остаток %КоличествоОстаток% %ЕдиницаИзмерения%, '", "ru"),""); КонецЕсли; // -УОП @@ -2551,6 +2545,24 @@ Отбор.Вставить("НомерГТД", ВыборкаЗаписей.НомерГТДПредставление); КонецЕсли; + // +УОП + // В результате выборке могут быть данные, которые отличаются от фактических строк. + // Например, единица измерения в выборке типа Классификаторных единиц, а ТЧ может быть ЕдиницыИзмерения. + // Аналогично при использовании автосписании пользователь не указывает партию или же при ПОО. + ПорядокПоиска = Новый Массив; + ПорядокПоиска.Добавить(Неопределено); + ПорядокПоиска.Добавить("ЕдиницаИзмерения"); + ПорядокПоиска.Добавить("Партия"); + Для СчетИсключаемыхСвойств = 0 По ПорядокПоиска.ВГраница() Цикл + Если НЕ ПорядокПоиска[СчетИсключаемыхСвойств] = Неопределено + И Отбор.Свойство(ПорядокПоиска[СчетИсключаемыхСвойств]) Тогда + Отбор.Удалить(ПорядокПоиска[СчетИсключаемыхСвойств]); + ИначеЕсли НЕ ПорядокПоиска[СчетИсключаемыхСвойств] = Неопределено + И НЕ Отбор.Свойство(ПорядокПоиска[СчетИсключаемыхСвойств]) Тогда + Продолжить; + КонецЕсли; + // -УОП + МассивСтрок = ДокОбъект.Запасы.НайтиСтроки(Отбор); Если МассивСтрок.Количество() Тогда @@ -2559,6 +2571,13 @@ НомерСтроки = Неопределено; КонецЕсли; + // +УОП + Если НЕ НомерСтроки = Неопределено Тогда + Прервать; + КонецЕсли; + + КонецЦикла; + // -УОП КонецЕсли; Возврат НомерСтроки; @@ -2698,6 +2717,7 @@ ВыходныеПараметры.Вставить("ИмяКолонкиПартия", ИмяКолонкиПартия); ВыходныеПараметры.Вставить("ТипПартии"); ВыходныеПараметры.Вставить("ПартияПредставление"); + ВыходныеПараметры.Вставить("ТипыПартийПоложительнойОбласти", УОП_ПартионныйУчет.ТипыПартийПоложительнойОбласти()); ВыходныеПараметры.Вставить("ИнформацияПоПартиям", Новый Соответствие); КонецЕсли; @@ -2720,7 +2740,6 @@ ВыходныеПараметры.ПартияПредставление = Справочники.ПартииНоменклатуры.ПустаяСсылка(); КонецЕсли; - Возврат ВыходныеПараметры; КонецФункции diff --git a/Конфигурация/CommonModules/КриптографияБЭД/Ext/Module.bsl b/Конфигурация/CommonModules/КриптографияБЭД/Ext/Module.bsl index 4c4dcfafa..2e0a991c4 100644 --- a/Конфигурация/CommonModules/КриптографияБЭД/Ext/Module.bsl +++ b/Конфигурация/CommonModules/КриптографияБЭД/Ext/Module.bsl @@ -2596,8 +2596,12 @@ ПодписьВерна = СвойстваПодписи.ПодписьВерна; - Сертификат = Неопределено; - ДанныеСертификата = СвойстваПодписи.Сертификат.Получить(); + Сертификат = Неопределено; + Если СвойстваПодписи.Сертификат = Неопределено Тогда + ДанныеСертификата = Неопределено; + Иначе + ДанныеСертификата = СвойстваПодписи.Сертификат.Получить(); + КонецЕсли; Если ДанныеСертификата <> Неопределено Тогда Сертификат = Новый СертификатКриптографии(ДанныеСертификата); КонецЕсли; @@ -2684,6 +2688,8 @@ ЗначенияПараметров.Вставить("НомерСертификата", Сертификат.СерийныйНомер); ЗначенияПараметров.Вставить("ВыдалСертификат", Сертификат.Издатель.CN); ЗначенияПараметров.Вставить("СрокДействия", СрокДействия); + Иначе + ЗначенияПараметров.Вставить("ОрганизацияПодписант", СвойстваПодписи.Владелец); КонецЕсли; ЗначенияПараметров.Вставить("ТекстОтметки", ТекстОтметки); diff --git a/Конфигурация/CommonModules/КриптографияБЭДКлиент/Ext/Module.bsl b/Конфигурация/CommonModules/КриптографияБЭДКлиент/Ext/Module.bsl index e9d78d05c..7929bb529 100644 --- a/Конфигурация/CommonModules/КриптографияБЭДКлиент/Ext/Module.bsl +++ b/Конфигурация/CommonModules/КриптографияБЭДКлиент/Ext/Module.bsl @@ -77,7 +77,7 @@ КонецПроцедуры -// Проверяет сертификат средствами БСП, а также дополнительно проверяет на условия призннания квалифицироанным. +// Проверяет сертификат средствами БСП, а также дополнительно проверяет на условия признания квалифицированным. // // Параметры: // ОбработчикРезультатаПроверки - См. ЭлектроннаяПодписьКлиент.ПроверитьСертификат.Оповещение diff --git a/Конфигурация/CommonModules/КриптографияБЭДКлиентСервер/Ext/Module.bsl b/Конфигурация/CommonModules/КриптографияБЭДКлиентСервер/Ext/Module.bsl index a615d5c6d..647b74f6e 100644 --- a/Конфигурация/CommonModules/КриптографияБЭДКлиентСервер/Ext/Module.bsl +++ b/Конфигурация/CommonModules/КриптографияБЭДКлиентСервер/Ext/Module.bsl @@ -50,6 +50,28 @@ КонецЕсли; КонецФункции +// Параметры: +// Сертификат - СертификатКриптографии +// ДвоичныеДанныеСертификата - ДвоичныеДанные +// Кеш - Соответствие Из КлючИЗначение: +// * Ключ - Строка +// * Значение - См. ЭлектроннаяПодписьСлужебныйКлиентСервер.СвойстваСертификата +// +// Возвращаемое значение: +// См. ЭлектроннаяПодписьСлужебныйКлиентСервер.СвойстваСертификата +Функция ДополнительныеСвойстваСертификата(Сертификат, ДвоичныеДанныеСертификата, Кеш) Экспорт + Ключ = "ДополнительныеСвойстваСертификата"; + ДополнительныеСвойства = Кеш.Получить(Ключ); + Если ДополнительныеСвойства = Неопределено Тогда + // АПК:277-выкл Не проверять вызов служебной процедуры или функции другой подсистемы. + ДополнительныеСвойства = ЭлектроннаяПодписьСлужебныйКлиентСервер.СвойстваСертификата(Сертификат, + РазницаСУниверсальнымВременем(), ДвоичныеДанныеСертификата); + // АПК:277-вкл + Кеш.Вставить(Ключ, ДополнительныеСвойства); + КонецЕсли; + Возврат ДополнительныеСвойства; +КонецФункции + #КонецОбласти //ПроверкаКвалифицированногоСертификата // Параметры: @@ -787,19 +809,6 @@ Возврат СвойстваПодписи.ДатаШтампаВремени; КонецФункции -Функция ДополнительныеСвойстваСертификата(Сертификат, ДвоичныеДанныеСертификата, Кеш) Экспорт - Ключ = "ДополнительныеСвойстваСертификата"; - ДополнительныеСвойства = Кеш.Получить(Ключ); - Если ДополнительныеСвойства = Неопределено Тогда - // АПК:277-выкл Не проверять вызов служебной процедуры или функции другой подсистемы. - ДополнительныеСвойства = ЭлектроннаяПодписьСлужебныйКлиентСервер.СвойстваСертификата(Сертификат, - РазницаСУниверсальнымВременем(), ДвоичныеДанныеСертификата); - // АПК:277-вкл - Кеш.Вставить(Ключ, ДополнительныеСвойства); - КонецЕсли; - Возврат ДополнительныеСвойства; -КонецФункции - // Параметры: // Сертификат - См. ПроверитьКвалифицированныйСертификат.Сертификат // Кеш - Соответствие из КлючИЗначение: diff --git a/Конфигурация/CommonModules/ЛегкийИнтерфейсДокументовЭДО/Ext/Module.bsl b/Конфигурация/CommonModules/ЛегкийИнтерфейсДокументовЭДО/Ext/Module.bsl index b193eb27c..eacef1c0f 100644 --- a/Конфигурация/CommonModules/ЛегкийИнтерфейсДокументовЭДО/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ЛегкийИнтерфейсДокументовЭДО/Ext/Module.bsl @@ -69,21 +69,7 @@ // Новые данные компонента панель команд входящего документа. // // Возвращаемое значение: -// Структура: -// * ДоступныеДействияПоЭДОДляДокумента - Соответствие Из КлючИЗначение: -// ** Ключ - ПеречислениеСсылка.ДействияПоЭДО -// ** Значение - Булево -// * ДоступныеДействияПоЭДОДляДокументаПакета - Соответствие Из КлючИЗначение: -// ** Ключ - ПеречислениеСсылка.ДействияПоЭДО -// ** Значение - Булево -// * ИспользуетсяОтложеннаяОтправка - Булево -// * ЕстьПравоОбработкиДокументов - Булево -// * ЕстьПравоВыполненияОбмена - Булево -// * ЭтоПакетДокументов - Булево -// * ЭтоИнтеркампани - Булево -// * ТипДокумента - ПеречислениеСсылка.ТипыДокументовЭДО -// * ЭтоПрикладнойВидДокумента - Булево -// * ТребуетсяОднородностьОтвета - Булево +// См. ЛегкийИнтерфейсДокументовЭДОСлужебный.НовыеДанныеКомпонентаПанельКомандВходящегоДокумента Функция НовыеДанныеКомпонентаПанельКомандВходящегоДокумента() Экспорт Возврат ЛегкийИнтерфейсДокументовЭДОСлужебный.НовыеДанныеКомпонентаПанельКомандВходящегоДокумента(); КонецФункции @@ -1376,6 +1362,9 @@ // * ВидПодписи - ПеречислениеСсылка.ВидыЭлектронныхПодписей // * ИдентификаторОрганизации - Строка // * ИдентификаторСвязи - Строка +// * ЧерновикВладелец - ДокументСсылка.ЧерновикЭлектронногоДокументаЭДО +// * ПредставлениеЧерновика - Строка +// Функция НовыеСвойстваДокументаДляПолученияДанныхКомпонентовПросмотра() Экспорт СвойстваДокумента = Новый Структура; @@ -1408,6 +1397,9 @@ ПредопределенноеЗначение("Перечисление.ВидыЭлектронныхПодписей.ПустаяСсылка")); СвойстваДокумента.Вставить("ИдентификаторОрганизации", ""); СвойстваДокумента.Вставить("ИдентификаторСвязи", ""); + СвойстваДокумента.Вставить("ЧерновикВладелец", + ПредопределенноеЗначение("Документ.ЧерновикЭлектронногоДокументаЭДО.ПустаяСсылка")); + СвойстваДокумента.Вставить("ПредставлениеЧерновика", ""); Возврат СвойстваДокумента; КонецФункции @@ -2604,6 +2596,10 @@ СвойстваДокумента.ВидПодписи = Объект.ВидПодписи; СвойстваДокумента.МаршрутУказанВНастройках = Форма.МаршрутУказанВНастройках; КонецЕсли; + Если СвойстваДокумента.ЭтоВходящийЭДО Тогда + СвойстваДокумента.ЧерновикВладелец = Объект.ЧерновикВладелец; + СвойстваДокумента.ПредставлениеЧерновика = Объект.ПредставлениеЧерновика; + КонецЕсли; Возврат СвойстваДокумента; КонецФункции @@ -2741,6 +2737,8 @@ НастроитьПанельКомандДляПрикладногоДокументаКарточкиДокумента(Форма, ДанныеКомпонента); + НастроитьПанельКомандСозданиеЧерновикаКарточкиВходящегоДокумента(Форма, ДанныеКомпонента); + КонецПроцедуры #КонецОбласти // ПанельКомандВходящегоДокумента @@ -3372,6 +3370,10 @@ Перечисления.СостоянияДокументовЭДО.НеСформирован, ВариантыПредставлений.Подписать); ПредставленияПоСостояниямЭДО.Вставить( Перечисления.СостоянияДокументовЭДО.ЗакрытСОтклонениемПриглашения, ВариантыПредставлений.ПриглашениеОтклонено); + ПредставленияПоСостояниямЭДО.Вставить(Перечисления.СостоянияДокументовЭДО.ТребуетсяСоздатьДокумент, + ВариантыПредставлений.СоздатьДокументПоЧерновику); + ПредставленияПоСостояниямЭДО.Вставить(Перечисления.СостоянияДокументовЭДО.ЗакрытСОтзывом, + ВариантыПредставлений.ЧерновикОтозван); Возврат ПредставленияПоСостояниямЭДО[СостояниеЭДО]; @@ -3502,12 +3504,10 @@ ВариантыЦвета.Зеленый); ЦветаПоСостояниямЭДО.Вставить(ВариантыПредставленийПоСостояниямЭДО.Отменен, ВариантыЦвета.Красный); - ЦветаПоСостояниямЭДО.Вставить(ВариантыПредставленийПоСостояниямЭДО.КонтрагентОтказалВПодписи, ВариантыЦвета.Красный); ЦветаПоСостояниямЭДО.Вставить(ВариантыПредставленийПоСостояниямЭДО.ОтказаноВПодписиКонтрагенту, ВариантыЦвета.Красный); - ЦветаПоСостояниямЭДО.Вставить(ВариантыПредставленийПоСостояниямЭДО.Отклонен, ВариантыЦвета.Красный); ЦветаПоСостояниямЭДО.Вставить(ВариантыПредставленийПоСостояниямЭДО.ЗавершенОшибка, @@ -3540,8 +3540,10 @@ ВариантыЦвета.Желтый); ЦветаПоСостояниямЭДО.Вставить(ВариантыПредставленийПоСостояниямЭДО.Создать, ВариантыЦвета.Желтый); - ЦветаПоСостояниямЭДО.Вставить(ВариантыПредставленийПоСостояниямЭДО.ЖдатьОбработкуОблачнымЭДО, + ЦветаПоСостояниямЭДО.Вставить(ВариантыПредставленийПоСостояниямЭДО.СоздатьДокументПоЧерновику, ВариантыЦвета.Желтый); + ЦветаПоСостояниямЭДО.Вставить(ВариантыПредставленийПоСостояниямЭДО.ЧерновикОтозван, + ВариантыЦвета.Красный); ВариантыПредставленийПоПринятиюКУчету = ПредставленияСостоянияПоДаннымКонтроляОтраженияВУчете(); ЦветаПоПринятиюКУчету = Новый Соответствие; @@ -3675,6 +3677,8 @@ // * КонтрагентОтказалВПодписи - Строка // * ОтказаноВПодписиКонтрагенту - Строка // * ПриглашениеОтклонено - Строка +// * СоздатьДокументПоЧерновику - Строка +// * ЧерновикОтозван - Строка // Функция ПредставленияСостоянияПоДаннымСостоянияЭДО() @@ -3703,6 +3707,9 @@ Представления.Вставить("КонтрагентОтказалВПодписи", НСтр("ru = 'Контрагент отказал в подписи%1'")); Представления.Вставить("ОтказаноВПодписиКонтрагенту", НСтр("ru = 'Отказано в подписи контрагенту%1'")); Представления.Вставить("ПриглашениеОтклонено", НСтр("ru = 'Контрагент отклонил приглашение%1'")); + Представления.Вставить("СоздатьДокументПоЧерновику", + НСтр("ru = 'Создать документ по черновику%1'")); + Представления.Вставить("ЧерновикОтозван", НСтр("ru = 'Черновик отозван%1'")); Возврат Представления; КонецФункции @@ -4245,6 +4252,10 @@ Иначе Форма.Элементы.КнопкаПоказатьВсеДокументыУчета.Заголовок = НСтр("ru = 'Все документы'"); КонецЕсли; + + Если ЭтоВходящийЭДО И ДанныеКомпонента.ЭтоФормализованныйДокумент И Не МногоОбъектовУчета Тогда + Форма.Элементы.КнопкаПоказатьВсеДокументыУчета.Заголовок = НСтр("ru = 'Еще...'"); + КонецЕсли; Форма.Элементы.НадписьДокументыУчета.Заголовок = ?(ТребуетсяПоказыватьВторойДокументУчета, НСтр("ru = 'Документы учета:'"), @@ -4256,7 +4267,7 @@ Форма.Элементы.ГруппаВсеДокументыУчета.Видимость = Не ЭтоВнутреннийДокумент И ТребуетсяПоказыватьВторойДокументУчета Или ЭтоПрикладнойВидДокумента - Или (ЭтоВходящийЭДО И Не ЕстьВозможностьОтраженияВУчете И ЕстьПравоОбработкиДокументов) + Или (ЭтоВходящийЭДО И ЕстьПравоОбработкиДокументов) Или (ЭтоИсходящийЭДО И НетОбъектовУчета И ЕстьПравоОбработкиДокументов) Или (ЭтоИсходящийЭДО И Не НетОбъектовУчета И Не ДанныеКомпонента.ДокументРаспознан И Не ЭтоНовыйДокумент И ЕстьПравоОбработкиДокументов); @@ -4384,6 +4395,10 @@ Иначе Форма.Элементы.КнопкаПоказатьВсеДокументыУчета.Заголовок = НСтр("ru = 'Все документы'"); КонецЕсли; + + Если ЭтоВходящийЭДО И ДанныеКомпонента.ЭтоФормализованныйДокумент И Не МногоОбъектовУчета Тогда + Форма.Элементы.КнопкаПоказатьВсеДокументыУчета.Заголовок = НСтр("ru = 'Еще...'"); + КонецЕсли; ЭтоВнутреннийДокумент = ДанныеКомпонента.ЭтоВнутреннийВидДокумента; ЭтоПрикладнойВидДокумента = ДанныеКомпонента.ЭтоПрикладнойВидДокумента; @@ -4391,7 +4406,7 @@ Форма.Элементы.ГруппаВсеДокументыУчета.Видимость = Не ЭтоВнутреннийДокумент И ТребуетсяПоказыватьВторойДокументУчета Или ЭтоПрикладнойВидДокумента - Или (ЭтоВходящийЭДО И Не ЕстьВозможностьОтраженияВУчете И ЕстьПравоОбработкиДокументов) + Или (ЭтоВходящийЭДО И ЕстьПравоОбработкиДокументов) Или (ЭтоИсходящийЭДО И НетОбъектовУчета И ЕстьПравоОбработкиДокументов) Или (ЭтоИсходящийЭДО И Не НетОбъектовУчета И Не ДанныеКомпонента.ДокументРаспознан И Не ЭтоНовыйДокумент И ЕстьПравоОбработкиДокументов); @@ -5779,6 +5794,27 @@ КонецПроцедуры +// Параметры: +// Форма - ФормаКлиентскогоПриложения - форма просмотра входящего электронного документа легкого интерфейса +// ДанныеКомпонента - Структура: +// * ТипДокумента - ПеречислениеСсылка.ТипыДокументовЭДО +// * ТипДокументаЧерновика - ПеречислениеСсылка.ТипыДокументовЭДО +Процедура НастроитьПанельКомандСозданиеЧерновикаКарточкиВходящегоДокумента(Форма, ДанныеКомпонента) + + Форма.Элементы.КнопкаСоздатьДокументПоЧерновику.Видимость = Ложь; + + Если ДанныеКомпонента.ТипДокумента <> Перечисления.ТипыДокументовЭДО.Черновик Тогда + Возврат; + КонецЕсли; + + КомандаВидна = Ложь; + ЧерновикиЭДО.ПриОпределенииВидимостиКомандыСозданияДокументаНаОснованииЧерновика(КомандаВидна, + ДанныеКомпонента.ТипДокументаЧерновика); + + Форма.Элементы.КнопкаСоздатьДокументПоЧерновику.Видимость = КомандаВидна; + +КонецПроцедуры + #КонецОбласти // ПанелиКоманд #Область ПанелиСопроводительнойЗаписки diff --git a/Конфигурация/CommonModules/ЛегкийИнтерфейсДокументовЭДОСлужебный/Ext/Module.bsl b/Конфигурация/CommonModules/ЛегкийИнтерфейсДокументовЭДОСлужебный/Ext/Module.bsl index 1a9ca2038..c6df22ca5 100644 --- a/Конфигурация/CommonModules/ЛегкийИнтерфейсДокументовЭДОСлужебный/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ЛегкийИнтерфейсДокументовЭДОСлужебный/Ext/Module.bsl @@ -428,6 +428,10 @@ ДанныеКомпонента.ЭтоПрикладнойВидДокумента = ЭлектронныеДокументыЭДО.ЭтоПрикладнойВидДокумента( СвойстваДокумента.ВидДокумента); + Если СвойстваДокумента.ТипДокумента = Перечисления.ТипыДокументовЭДО.Черновик Тогда + ДанныеКомпонента.ТипДокументаЧерновика = ЧерновикиЭДО.ТипДокументаЧерновика(СвойстваДокумента.ЧерновикВладелец); + КонецЕсли; + ЗаполнитьДанныеПоИнтеркампаниВДанныхКомпонента(ДанныеКомпонента, СвойстваДокумента); ЗаполнитьДанныеПоПакетуВходящегоДокументаВДанныхКомпонента(ДанныеКомпонента, СвойстваДокумента); @@ -454,6 +458,7 @@ // * ТипДокумента - ПеречислениеСсылка.ТипыДокументовЭДО // * ЭтоПрикладнойВидДокумента - Булево // * ТребуетсяОднородностьОтвета - Булево +// * ТипДокументаЧерновика - ПеречислениеСсылка.ТипыДокументовЭДО Функция НовыеДанныеКомпонентаПанельКомандВходящегоДокумента() Экспорт ДанныеКомпонента = Новый Структура; @@ -467,6 +472,7 @@ ДанныеКомпонента.Вставить("ТипДокумента", Перечисления.ТипыДокументовЭДО.ПустаяСсылка()); ДанныеКомпонента.Вставить("ЭтоПрикладнойВидДокумента", Ложь); ДанныеКомпонента.Вставить("ТребуетсяОднородностьОтвета", Ложь); + ДанныеКомпонента.Вставить("ТипДокументаЧерновика", Перечисления.ТипыДокументовЭДО.ПустаяСсылка()); Возврат ДанныеКомпонента; КонецФункции @@ -1157,6 +1163,7 @@ ПакетыДокументовЭДО.СостояниеПакета(СостоянияДокументовСКомментарием.ВыгрузитьКолонку("Состояние")); Если СводноеСостояние = Неопределено Тогда СтрокаСостояния = СостоянияДокументовСКомментарием.Найти(СвойстваДокумента.Ссылка, "ЭлектронныйДокумент"); + СводноеСостояние = СтрокаСостояния.Состояние; Иначе СтрокаСостояния = СостоянияДокументовСКомментарием.Найти(СводноеСостояние, "Состояние"); КонецЕсли; @@ -1571,7 +1578,7 @@ // // Параметры: // ДанныеКомпонента - См. НовыеДанныеКомпонентаПанельОтраженияВУчете -// СвойстваДокумента - См. НовыеСвойстваДокументаДляПолученияДанныхКомпонентовПросмотра +// СвойстваДокумента - См. ЛегкийИнтерфейсДокументовЭДО.НовыеСвойстваДокументаДляПолученияДанныхКомпонентовПросмотра // ОбъектыУчета - Неопределено // - Массив Из ОпределяемыйТип.ОснованияЭлектронныхДокументовЭДО Процедура ЗаполнитьДанныеКомпонентаПанельОтраженияВУчете(ДанныеКомпонента, СвойстваДокумента, @@ -1600,6 +1607,8 @@ ДанныеКомпонента.ЭтоПрикладнойВидДокумента = ЭлектронныеДокументыЭДО.ЭтоПрикладнойВидДокумента( СвойстваДокумента.ВидДокумента); + + ДанныеКомпонента.ЭтоФормализованныйДокумент = ЗначениеЗаполнено(СвойстваДокумента.ФорматОсновногоТитула); ДанныеКомпонента.ОбъектыУчетаДокумента.Очистить(); Если СвойстваДокумента.ЭтоНовыйДокумент @@ -1647,7 +1656,8 @@ СвойстваДокумента.Ссылка, СпособыОбработки); КонецЕсли; - Если СвойстваДокумента.ТипДокумента = Перечисления.ТипыДокументовЭДО.УПД Тогда + Если СвойстваДокумента.ТипДокумента = Перечисления.ТипыДокументовЭДО.УПД + И ДанныеКомпонента.ЭтоФормализованныйДокумент Тогда ДанныеЭлектронныхДокументов = ЭлектронныеДокументыЭДО.ДанныеДокументовДляОтраженияВУчете( ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(СвойстваДокумента.Ссылка)); @@ -1707,6 +1717,7 @@ // * ЕстьПравоОбработкиДокументов - Булево // * ЭтоВнутреннийВидДокумента - Булево // * ЭтоПрикладнойВидДокумента - Булево +// * ЭтоФормализованныйДокумент - Булево Функция НовыеДанныеКомпонентаПанельОтраженияВУчете() Экспорт ДанныеКомпонента = Новый Структура; @@ -1719,6 +1730,7 @@ ДанныеКомпонента.Вставить("ЕстьПравоОбработкиДокументов", Ложь); ДанныеКомпонента.Вставить("ЭтоВнутреннийВидДокумента", Ложь); ДанныеКомпонента.Вставить("ЭтоПрикладнойВидДокумента", Ложь); + ДанныеКомпонента.Вставить("ЭтоФормализованныйДокумент", Ложь); Возврат ДанныеКомпонента; КонецФункции @@ -2843,6 +2855,7 @@ // * НомерДокумента - Строка // * ДатаДокумента - Дата // * ЭтоНовыйДокумент - Булево +// * ПредставлениеЧерновика - Строка // КоличествоДокументовВПакете - Число Процедура ЗаполнитьДанныеКомпонентаПанельКарточкиПоПараметрам(ДанныеКомпонента, СвойстваДокумента, КоличествоДокументовВПакете) @@ -2863,6 +2876,7 @@ ПараметрыПредставления.ВидДокумента = СвойстваДокумента.ВидДокумента; ПараметрыПредставления.НомерДокумента = СвойстваДокумента.НомерДокумента; ПараметрыПредставления.ДатаДокумента = СвойстваДокумента.ДатаДокумента; + ПараметрыПредставления.ПредставлениеЧерновика = СвойстваДокумента.ПредставлениеЧерновика; ДанныеКомпонента.ТекстЗаголовка = ИнтерфейсДокументовЭДО.ПредставлениеДокументаПоСвойствам(ПараметрыПредставления, СвойстваДокумента.ЭтоНовыйДокумент); diff --git a/Конфигурация/CommonModules/МашиночитаемыеДоверенности/Ext/Module.bsl b/Конфигурация/CommonModules/МашиночитаемыеДоверенности/Ext/Module.bsl index 2c98fd3dd..49947856d 100644 --- a/Конфигурация/CommonModules/МашиночитаемыеДоверенности/Ext/Module.bsl +++ b/Конфигурация/CommonModules/МашиночитаемыеДоверенности/Ext/Module.bsl @@ -4080,7 +4080,7 @@ #Область Справочники_КлассификаторПолномочийФНСМЧД002_ОбработатьДанныеДляПереходаНаНовуюВерсию Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "1.10.1.52"; + Обработчик.Версия = "1.10.1.67"; Обработчик.РежимВыполнения = "Отложенно"; Обработчик.ЗапускатьИВПодчиненномУзлеРИБСФильтрами = Истина; Обработчик.Процедура = "Справочники.КлассификаторПолномочийФНСМЧД002.ОбработатьДанныеДляПереходаНаНовуюВерсию"; @@ -4141,7 +4141,7 @@ #Область Справочники_КлассификаторПолномочийМЧД003_ОбработатьДанныеДляПереходаНаНовуюВерсию Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "1.10.1.52"; + Обработчик.Версия = "1.10.1.67"; Обработчик.РежимВыполнения = "Отложенно"; Обработчик.ЗапускатьИВПодчиненномУзлеРИБСФильтрами = Истина; Обработчик.Процедура = "Справочники.КлассификаторПолномочийМЧД003.ОбработатьДанныеДляПереходаНаНовуюВерсию"; diff --git a/Конфигурация/CommonModules/МенеджерОбменаУРМКУНФ/Ext/Module.bsl b/Конфигурация/CommonModules/МенеджерОбменаУРМКУНФ/Ext/Module.bsl index 0ffec060c..d27b6d637 100644 --- a/Конфигурация/CommonModules/МенеджерОбменаУРМКУНФ/Ext/Module.bsl +++ b/Конфигурация/CommonModules/МенеджерОбменаУРМКУНФ/Ext/Module.bsl @@ -3435,6 +3435,8 @@ ДобавитьПКС(СвойстваТЧ, "ВидПлатежнойКарты", "", 1); ДобавитьПКС(СвойстваТЧ, "СсылочныйНомер", "", 1); ДобавитьПКС(СвойстваТЧ, "ИдентификаторПлатежнойСистемы", "", 1); + ДобавитьПКС(СвойстваТЧ, "ИдентификаторQRОперации", "", 1); + ДобавитьПКС(СвойстваТЧ, "КодСпособаОплатыЭТ", "", 1); ДобавитьПКС(СвойстваТЧ, "СуммаКомиссии", "", 1); ДобавитьПКС(СвойстваТЧ, "ПодарочныйСертификат", "ВидПодарочногоСертификата", 1,"Справочник_ВидыПодарочныхСертификатов_Получение"); ДобавитьПКС(СвойстваТЧ, "НомерСертификата", "", 1); @@ -3712,6 +3714,8 @@ ДобавитьПКС(СвойстваТЧ, "ВидПлатежнойКарты", "", 1); ДобавитьПКС(СвойстваТЧ, "СсылочныйНомер", "", 1); ДобавитьПКС(СвойстваТЧ, "ИдентификаторПлатежнойСистемы", "", 1); + ДобавитьПКС(СвойстваТЧ, "ИдентификаторQRОперации", "", 1); + ДобавитьПКС(СвойстваТЧ, "КодСпособаОплатыЭТ", "", 1); ДобавитьПКС(СвойстваТЧ, "СуммаКомиссии", "", 1); ДобавитьПКС(СвойстваТЧ, "ПодарочныйСертификат", "ВидПодарочногоСертификата", 1,"Справочник_ВидыПодарочныхСертификатов_Получение"); ДобавитьПКС(СвойстваТЧ, "НомерСертификата", "", 1); @@ -7427,7 +7431,7 @@ Функция ПолучитьСтрокиТЧБезналичнаяОплата(ДанныеXDTO, КомпонентыОбмена, ДляВозвратТовара = Ложь) - Перем ОплатыПлатежнымиСистемами, AdditionalInfo; + Перем ОплатыПлатежнымиСистемами, ОплатыЦРиУПК, AdditionalInfo; МассивСтрокОплата = Новый Массив; ОбработанныеИдентификаторыСтрок = Новый Массив; @@ -7475,6 +7479,12 @@ ИЛИ Не ДанныеXDTO.AdditionalInfo.Свойство("ОплатыПлатежнымиСистемами", ОплатыПлатежнымиСистемами) Тогда ОплатыПлатежнымиСистемами = Новый Соответствие; КонецЕсли; + + Если Не ДанныеXDTO.Свойство("AdditionalInfo") + ИЛИ Не ДанныеXDTO.AdditionalInfo.Свойство("ОплатыЦРиУПК", ОплатыЦРиУПК) Тогда + ОплатыЦРиУПК = Новый Соответствие; + КонецЕсли; + ОплатаПлатежнымиКартами = Новый ТаблицаЗначений; СвойствоСТипомПлатежнойСистемы = СвойствоФорматаОбмена(КомпонентыОбмена, "ОплатаПлатежнымиКартами.Строка.ТипыПлатежнойСистемыККТ"); @@ -7512,7 +7522,9 @@ |ТипПлатежнойСистемы, |ИдентификаторСтроки, |СуммаСкидки, - |ВидКарты"); + |ВидКарты, + |ИдентификаторQRОперации, + |КодСпособаОплатыЭТ"); ЗаполнитьЗначенияСвойств(СтруктураДанныхСтроки, Строка); @@ -7549,7 +7561,17 @@ ПараметрыПС.ТипПлатежнойСистемы)); КонецЕсли; КонецЕсли; - + + Если ОплатыЦРиУПК.Количество() + И ЗначениеЗаполнено(СтруктураДанныхСтроки.ИдентификаторСтроки) + И ТипЗнч(ОплатыЦРиУПК.Получить(СтруктураДанныхСтроки.ИдентификаторСтроки)) = Тип("Структура") Тогда + + ДанныеОплатыЦРиУПК = ОплатыЦРиУПК.Получить(СтруктураДанныхСтроки.ИдентификаторСтроки); + ДанныеОплатыЦРиУПК.Свойство("ИдентификаторQRОперации", СтруктураДанныхСтроки.ИдентификаторQRОперации); + ДанныеОплатыЦРиУПК.Свойство("КодСпособаОплатыЭТ", СтруктураДанныхСтроки.КодСпособаОплатыЭТ); + ДанныеОплатыЦРиУПК.Свойство("СпособОплаты", СтруктураДанныхСтроки.СпособОплаты); + КонецЕсли; + Если ЗначениеЗаполнено(Строка.Эквайрер) Тогда ИмяПКО = "Справочник_Контрагенты_Получение"; @@ -9262,6 +9284,8 @@ "ВариантИспользованияЕдиницыХранения", XMLСтрока(ДанныеНоменклатуры.ВариантИспользованияЕдиницыХранения)); + СтруктураДопРеквизитов.Вставить("ВидыПродукцииФГИС", Новый ТаблицаЗначений); + Если ЗначениеЗаполнено(ДанныеНоменклатуры.КлючВидовПродукции) Тогда ПоляКлюча = Справочники.КлючиВидовПродукцииИС.ПолучитьПоляКлюча(ДанныеНоменклатуры.КлючВидовПродукции); diff --git a/Конфигурация/CommonModules/МенеджерОбменаЧерезУниверсальныйФормат/Ext/Module.bsl b/Конфигурация/CommonModules/МенеджерОбменаЧерезУниверсальныйФормат/Ext/Module.bsl index b4189b146..c657b2727 100644 --- a/Конфигурация/CommonModules/МенеджерОбменаЧерезУниверсальныйФормат/Ext/Module.bsl +++ b/Конфигурация/CommonModules/МенеджерОбменаЧерезУниверсальныйФормат/Ext/Module.bsl @@ -552,7 +552,8 @@ // +УОП ДобавитьПОД_Документ_УОП_ОбобщеннаяСебестоимость_Отправка(ПравилаОбработкиДанных); ДобавитьПОД_Документ_УОП_ОбобщенноеПеремещение_Отправка(ПравилаОбработкиДанных); - ДобавитьПОД_Документ_КорректировкаРегистров_Отправка(ПравилаОбработкиДанных); + ДобавитьПОД_Документ_КорректировкаРегистров_Отправка(ПравилаОбработкиДанных); + ДобавитьПОД_Документ_УОП_ОбобщенноеПроизводство_Отправка(ПравилаОбработкиДанных); // -УОП ДобавитьПОД_ПланВидовХарактеристик_ДополнительныеРеквизитыИСведения_Отправка(ПравилаОбработкиДанных); ДобавитьПОД_РегистрСведений_ФактОплатыЗаказов_Отправка(ПравилаОбработкиДанных); @@ -915,6 +916,7 @@ ДобавитьПКО_Документ_УОП_ОРПТребованиеНакладная_Отправка(ПравилаКонвертации); ДобавитьПКО_Документ_УОП_ОбобщенноеПеремещение_ПеремещениеТоваров_Отправка(ПравилаКонвертации); ДобавитьПКО_Документ_УОП_ОбобщенноеПеремещение_ПересортицаТоваров_Отправка(ПравилаКонвертации); + ДобавитьПКО_Документ_УОП_ОбобщенноеПроизводство_Отправка(ПравилаКонвертации); // -УОП ИначеЕсли НаправлениеОбмена = "Получение" Тогда ДобавитьПКО_Документ_ВнесениеНаличных_Получение(ПравилаКонвертации); @@ -2257,7 +2259,13 @@ Параметры.ОбъектОбработки, Параметры.ИспользованиеПКО, Параметры.КомпонентыОбмена); ИначеЕсли ИмяПроцедуры = "ПОД_Документ_УОП_ОбобщенноеПеремещение_Отправка_ПриОбработке" Тогда ПОД_Документ_УОП_ОбобщенноеПеремещение_Отправка_ПриОбработке( - Параметры.ОбъектОбработки, Параметры.ИспользованиеПКО, Параметры.КомпонентыОбмена); + Параметры.ОбъектОбработки, Параметры.ИспользованиеПКО, Параметры.КомпонентыОбмена); + ИначеЕсли ИмяПроцедуры = "ПОД_Документ_УОП_ОбобщенноеПроизводство_Отправка_ПриОбработке" Тогда + ПОД_Документ_УОП_ОбобщенноеПроизводство_Отправка_ПриОбработке( + Параметры.ОбъектОбработки, Параметры.ИспользованиеПКО, Параметры.КомпонентыОбмена); + ИначеЕсли ИмяПроцедуры = "ПКО_Документ_УОП_ОбобщенноеПроизводство_Отправка_ПриОтправкеДанных" Тогда + ПКО_ДокументСсылка_УОП_ОбобщенноеПроизводство_Отправка_ПриОтправкеДанных( + Параметры.ДанныеИБ, Параметры.ДанныеXDTO, Параметры.КомпонентыОбмена, Параметры.СтекВыгрузки); // -УОП ИначеЕсли ИмяПроцедуры = "ПОД_ПланВидовХарактеристик_ДополнительныеРеквизитыИСведения_Отправка_ПриОбработке" Тогда ПОД_ПланВидовХарактеристик_ДополнительныеРеквизитыИСведения_Отправка_ПриОбработке( @@ -4498,7 +4506,16 @@ ПравилоОбработки.ОчисткаДанных = Истина; ПравилоОбработки.ИспользуемыеПКО.Добавить("Документ_УОП_ОбобщенноеПеремещение_ПересортицаТоваров_Отправка"); ПравилоОбработки.ИспользуемыеПКО.Добавить("Документ_УОП_ОбобщенноеПеремещение_ПеремещениеТоваров_Отправка"); -КонецПроцедуры +КонецПроцедуры + +Процедура ДобавитьПОД_Документ_УОП_ОбобщенноеПроизводство_Отправка(ПравилаОбработкиДанных) + ПравилоОбработки = ПравилаОбработкиДанных.Добавить(); + ПравилоОбработки.Имя = "Документ_УОП_ОбобщенноеПроизводство_Отправка"; + ПравилоОбработки.ОбъектВыборкиМетаданные = Метаданные.Документы.УОП_ОбобщенноеПроизводство; + ПравилоОбработки.ПриОбработке = "ПОД_Документ_УОП_ОбобщенноеПроизводство_Отправка_ПриОбработке"; + ПравилоОбработки.ОчисткаДанных = Ложь; + ПравилоОбработки.ИспользуемыеПКО.Добавить("Документ_УОП_ОбобщенноеПроизводство_Отправка"); +КонецПроцедуры Процедура ДобавитьПОД_Документ_КорректировкаРегистров_Отправка(ПравилаОбработкиДанных) ПравилоОбработки = ПравилаОбработкиДанных.Добавить(); @@ -10843,6 +10860,110 @@ СвойствоШапки = СвойстваШапки.Найти("ПриходоватьТоварыПоСебестоимостиСписания", "СвойствоКонфигурации"); СвойстваШапки.Удалить(СвойствоШапки); +КонецПроцедуры + +Процедура ДобавитьПКО_Документ_УОП_ОбобщенноеПроизводство_Отправка(ПравилаКонвертации) + ПравилоКонвертации = ОбменДаннымиXDTOСервер.ИнициализироватьПравилоКонвертацииОбъекта(ПравилаКонвертации); + ПравилоКонвертации.ИмяПКО = "Документ_УОП_ОбобщенноеПроизводство_Отправка"; + ПравилоКонвертации.ОбъектДанных = Метаданные.Документы.УОП_ОбобщенноеПроизводство; + ПравилоКонвертации.ОбъектФормата = "Документ.ВыпускПродукции"; + ПравилоКонвертации.ПриОтправкеДанных = "ПКО_Документ_УОП_ОбобщенноеПроизводство_Отправка_ПриОтправкеДанных"; + //СвойстваШапки = ПравилоКонвертации.Свойства; + //ДобавитьПКС(СвойстваШапки, "Дата", "Дата"); + //ДобавитьПКС(СвойстваШапки, "Комментарий", "Комментарий"); + //ДобавитьПКС(СвойстваШапки, "Номер", "Номер"); + //ДобавитьПКС(СвойстваШапки, "Организация", "Организация", , "Справочник_Организации_Отправка"); + // + //СвойстваТЧ = ДобавитьПКТЧ(ПравилоКонвертации, "ВозвратныеОтходы", "ВозвратныеОтходы"); + //ДобавитьПКС(СвойстваТЧ, "КатегорияНоменклатуры", "ГруппаАналитическогоУчетаНоменклатуры", 1, "Справочник_НоменклатурныеГруппы_Отправка"); + //ДобавитьПКС(СвойстваТЧ, "ЕдиницаИзмерения", "ЕдиницаИзмерения", , "Справочник_ЕдиницыИзмерения"); + //ДобавитьПКС(СвойстваТЧ, "Номенклатура", "Номенклатура", , "Справочник_Номенклатура_Отправка"); + //ДобавитьПКС(СвойстваТЧ, "Характеристика", "Характеристика", , "Справочник_ХарактеристикиНоменклатуры"); + //ДобавитьПКС(СвойстваТЧ, "ИдентификаторСтроки", "ИдентификаторСтроки"); + //ДобавитьПКС(СвойстваТЧ, "Количество", "Количество"); + //ДобавитьПКС(СвойстваТЧ, "Сумма", "Сумма"); + // + //СвойстваТЧ = ДобавитьПКТЧ(ПравилоКонвертации, "Запасы", "Материалы"); + //ДобавитьПКС(СвойстваТЧ, "КатегорияНоменклатуры", "ГруппаАналитическогоУчетаНоменклатуры", 1, "Справочник_НоменклатурныеГруппы_Отправка"); + //ДобавитьПКС(СвойстваТЧ, "ЕдиницаИзмерения", "ЕдиницаИзмерения", , "Справочник_ЕдиницыИзмерения"); + //ДобавитьПКС(СвойстваТЧ, "", "ЕдиницаИзмеренияПрослеживаемости", 1, "Справочник_ЕдиницыИзмерения"); + //ДобавитьПКС(СвойстваТЧ, "ИдентификаторСтроки", "ИдентификаторСтроки"); + //ДобавитьПКС(СвойстваТЧ, "Количество", "Количество"); + //ДобавитьПКС(СвойстваТЧ, "Номенклатура", "Продукция", , "Справочник_Номенклатура_Отправка"); + //ДобавитьПКС(СвойстваТЧ, "ПрослеживаемыйТовар", "ПрослеживаемыйТовар"); + // + //СвойстваТЧ = ДобавитьПКТЧ(ПравилоКонвертации, "Продукция", "Продукция"); + //ДобавитьПКС(СвойстваТЧ, "ЕдиницаИзмерения", "ЕдиницаИзмерения", , "Справочник_ЕдиницыИзмерения"); + //ДобавитьПКС(СвойстваТЧ, "ИдентификаторСтроки", "ИдентификаторСтроки"); + //ДобавитьПКС(СвойстваТЧ, "Количество", "Количество"); + //ДобавитьПКС(СвойстваТЧ, "Спецификация", "СпецификацияНоменклатуры", , "Справочник_СпецификацииНоменклатуры_Отправка"); + //ДобавитьПКС(СвойстваТЧ, "Сумма", "Сумма"); + //ДобавитьПКС(СвойстваТЧ, "Цена", "Цена"); + // + //СвойстваТЧ = ДобавитьПКТЧ(ПравилоКонвертации, "СведенияПрослеживаемости", "СведенияРНПТ"); + //ДобавитьПКС(СвойстваТЧ, "ИдентификаторСтроки", "ИдентификаторСтроки"); + //ДобавитьПКС(СвойстваТЧ, "Количество", "Количество"); + //ДобавитьПКС(СвойстваТЧ, "КоличествоПрослеживаемости", "КоличествоРНПТ"); + //ДобавитьПКС(СвойстваТЧ, "Номенклатура", "НаименованиеТовара", 1); + //ДобавитьПКС(СвойстваТЧ, "РНПТ", "РНПТ", 1); + //ДобавитьПКС(СвойстваТЧ, "Сумма", "СуммаРНПТ"); + + СвойстваШапки = ПравилоКонвертации.Свойства; + ДобавитьПКС(СвойстваШапки, "Автор", "Ответственный", , "Справочник_Пользователи_Отправка"); + ДобавитьПКС(СвойстваШапки, "", "ВидОперации", 1); + ДобавитьПКС(СвойстваШапки, "Дата", "Дата"); + ДобавитьПКС(СвойстваШапки, "Комментарий", "Комментарий"); + ДобавитьПКС(СвойстваШапки, "Номер", "Номер"); + ДобавитьПКС(СвойстваШапки, "Организация", "Организация", , "Справочник_Организации_Отправка"); + ДобавитьПКС(СвойстваШапки, "", "ПодразделениеЗатрат", 1, "Справочник_Подразделения_Отправка"); + ДобавитьПКС(СвойстваШапки, "", "Склад", 1); + + СвойстваТЧ = ДобавитьПКТЧ(ПравилоКонвертации, "", "ВозвратныеОтходы"); + ДобавитьПКС(СвойстваТЧ, "", "ГруппаАналитическогоУчетаНоменклатуры", 1, "Справочник_НоменклатурныеГруппы_Отправка"); + ДобавитьПКС(СвойстваТЧ, "", "ЕдиницаИзмерения", 1, "Справочник_ЕдиницыИзмерения"); + ДобавитьПКС(СвойстваТЧ, "", "ИдентификаторСтроки", 1); + ДобавитьПКС(СвойстваТЧ, "", "Количество", 1); + ДобавитьПКС(СвойстваТЧ, "", "Номенклатура", 1, "Справочник_Номенклатура_Отправка"); + ДобавитьПКС(СвойстваТЧ, "", "Сумма", 1); + ДобавитьПКС(СвойстваТЧ, "", "Характеристика", 1, "Справочник_ХарактеристикиНоменклатуры"); + + СвойстваТЧ = ДобавитьПКТЧ(ПравилоКонвертации, "", "Материалы"); + ДобавитьПКС(СвойстваТЧ, "", "ГруппаАналитическогоУчетаНоменклатуры", 1, "Справочник_НоменклатурныеГруппы_Отправка"); + ДобавитьПКС(СвойстваТЧ, "", "ЕдиницаИзмерения", 1, "Справочник_ЕдиницыИзмерения"); + ДобавитьПКС(СвойстваТЧ, "", "ЕдиницаИзмеренияПрослеживаемости", 1, "Справочник_ЕдиницыИзмерения"); + ДобавитьПКС(СвойстваТЧ, "", "ИдентификаторСтроки", 1); + ДобавитьПКС(СвойстваТЧ, "", "Количество", 1); + ДобавитьПКС(СвойстваТЧ, "", "КоличествоРНПТ", 1); + ДобавитьПКС(СвойстваТЧ, "", "Номенклатура", 1, "Справочник_Номенклатура_Отправка"); + ДобавитьПКС(СвойстваТЧ, "", "Продукция", 1, "Справочник_Номенклатура_Отправка"); + ДобавитьПКС(СвойстваТЧ, "", "ПрослеживаемыйТовар", 1); + ДобавитьПКС(СвойстваТЧ, "", "Характеристика", 1, "Справочник_ХарактеристикиНоменклатуры"); + + // +УПО + ДобавитьПКС(СвойстваТЧ, "", "Себестоимость", 1); + // -УПО + + СвойстваТЧ = ДобавитьПКТЧ(ПравилоКонвертации, "", "Продукция"); + ДобавитьПКС(СвойстваТЧ, "", "ГруппаАналитическогоУчетаНоменклатуры", 1, "Справочник_НоменклатурныеГруппы_Отправка"); + ДобавитьПКС(СвойстваТЧ, "", "ЕдиницаИзмерения", 1, "Справочник_ЕдиницыИзмерения"); + ДобавитьПКС(СвойстваТЧ, "", "ИдентификаторСтроки", 1); + ДобавитьПКС(СвойстваТЧ, "", "Количество", 1); + ДобавитьПКС(СвойстваТЧ, "", "Номенклатура", 1, "Справочник_Номенклатура_Отправка"); + ДобавитьПКС(СвойстваТЧ, "", "СпецификацияНоменклатуры", 1, "Справочник_СпецификацииНоменклатуры_Отправка"); + ДобавитьПКС(СвойстваТЧ, "", "Сумма", 1); + ДобавитьПКС(СвойстваТЧ, "", "Характеристика", 1, "Справочник_ХарактеристикиНоменклатуры"); + ДобавитьПКС(СвойстваТЧ, "", "Цена", 1); + + //СвойстваТЧ = ДобавитьПКТЧ(ПравилоКонвертации, "", "СведенияРНПТ"); + //ДобавитьПКС(СвойстваТЧ, "", "ИдентификаторСтроки", 1); + //ДобавитьПКС(СвойстваТЧ, "", "Количество", 1); + //ДобавитьПКС(СвойстваТЧ, "", "КоличествоРНПТ", 1); + //ДобавитьПКС(СвойстваТЧ, "", "Номенклатура", 1, "Справочник_Номенклатура_Отправка"); + //ДобавитьПКС(СвойстваТЧ, "", "РНПТ", 1); + //ДобавитьПКС(СвойстваТЧ, "", "СуммаРНПТ", 1); + + + КонецПроцедуры Процедура ДобавитьПКО_Справочник_УОП_ТоварныеГруппы(ПравилаКонвертации) @@ -16366,6 +16487,68 @@ КонецЕсли; КонецПроцедуры +Процедура ПОД_Документ_УОП_ОбобщенноеПроизводство_Отправка_ПриОбработке(ДанныеИБ, ИспользованиеПКО, КомпонентыОбмена) + // колк - проверить поправить для обобщенного + + //ИспользованиеПКО.Документ_Комплектация_Отправка = Ложь; + //ИспользованиеПКО.Документ_Производство_Отправка = Ложь; + //ИспользованиеПКО.Документ_ПроизводствоПеремещениеПродукции_Отправка = Ложь; + //ИспользованиеПКО.Документ_ПроизводствоПеремещениеОтходов_Отправка = Ложь; + + // +УОП + //Если УОП_СтрЗначениеНастройкиСинхронизацииСебестоим(КомпонентыОбмена.УзелКорреспондента) <> "Стандартно" Тогда + // УстановитьИспользованиеПКО(ИспользованиеПКО, Ложь); + // Возврат; + //КонецЕсли; + // + ////Если ЗначениеЗаполнено(ДанныеИБ.СтруктурнаяЕдиница) + //// И ДанныеИБ.СтруктурнаяЕдиница.ТипСтруктурнойЕдиницы = Перечисления.ТипыСтруктурныхЕдиниц.Склад Тогда + //// ИспользованиеПКО.Документ_Комплектация_Отправка = ДанныеИБ.Запасы.Количество() > 0; + ////Иначе + //// ИспользованиеПКО.Документ_Производство_Отправка = Истина; + ////КонецЕсли; + // + //// При типовом обмене выгружается лишь первая из всей продукции, представленной в ТЧ. + //ИспользованиеПКО.Документ_Производство_Отправка = Истина; + // -УОП + + //Если Не КомпонентыОбмена.ПараметрыКонвертации.ИспользуютсяСкладыВТабличныхЧастях Тогда + // + // ИспользованиеПКО.Документ_ПроизводствоПеремещениеПродукции_Отправка = ДанныеИБ.СтруктурнаяЕдиницаПродукции <> ДанныеИБ.СтруктурнаяЕдиницаЗапасов + // И ДанныеИБ.Продукция.Количество() > 0; + // ИспользованиеПКО.Документ_ПроизводствоПеремещениеОтходов_Отправка = ДанныеИБ.СтруктурнаяЕдиницаОтходов <> ДанныеИБ.СтруктурнаяЕдиницаЗапасов + // И ДанныеИБ.Отходы.Количество() > 0; + //КонецЕсли; + + //// +УОП + //#Область УОП_Документ_ПроизводствоТребованиеНакладная_Отправка + //ИспользованиеПКО.УОП_Документ_ПроизводствоТребованиеНакладная_Отправка = Ложь; + // + //Если ДанныеИБ.ВидОперации = Перечисления.ВидыОперацийСборкаЗапасов.УОП_ВыпускПродукцииСоСписанием + // ИЛИ ДанныеИБ.ВидОперации = Перечисления.ВидыОперацийСборкаЗапасов.УОП_ВыпускПродукцииСРеализацией + // ИЛИ ДанныеИБ.ВидОперации = Перечисления.ВидыОперацийСборкаЗапасов.УОП_ВыпускПродукцииСРозничнойРеализацией Тогда + // + // // Это комплексный выпуск (выпуск с реализацией (втч с розничной) или со писанием). + // + // УОП_ВыпускВТребованиеНакладную = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(КомпонентыОбмена.ПараметрыКонвертации, "УОП_ВыпускВТребованиеНакладную", Ложь); + // + // ВыпускВТребованиеНакладнаяОформленКорректно = Истина; + // Если УОП_ВыпускВТребованиеНакладную Тогда + // ДанныеДокумента = УОП_ДанныеДокументаПроизводствоВТН(ДанныеИБ);// Только ингридиенты. + // ВыпускВТребованиеНакладнаяОформленКорректно = (ДанныеДокумента.Товары.Количество() > 0); + // КонецЕсли; + // + // // Прои включенной настройке такой выпуск должен выгрузиться как Требование накладная. + // ИспользованиеПКО.Документ_Производство_Отправка = Не УОП_ВыпускВТребованиеНакладную; + // ИспользованиеПКО.УОП_Документ_ПроизводствоТребованиеНакладная_Отправка = УОП_ВыпускВТребованиеНакладную И ВыпускВТребованиеНакладнаяОформленКорректно; + //КонецЕсли; + //#КонецОбласти //УОП_Документ_ПроизводствоТребованиеНакладная_Отправка + //// -УОП + + //ПроверитьНеобходимостьФормСкладаПроизводства(ДанныеИБ.СтруктурнаяЕдиницаПродукции, КомпонентыОбмена); + //ПроверитьНеобходимостьФормСкладаПроизводства(ДанныеИБ.СтруктурнаяЕдиницаЗапасов, КомпонентыОбмена); + ПроверитьНеобходимостьФормСкладаПроизводства(ДанныеИБ.СтруктурнаяЕдиница, КомпонентыОбмена); +КонецПроцедуры Процедура ПОД_Документ_КорректировкаРегистров_Отправка_ПриОбработке(ДанныеИБ, ИспользованиеПКО, КомпонентыОбмена) Если ДанныеИБ <> Неопределено @@ -16377,7 +16560,9 @@ ОбъектВыгрузки.ДополнительныеСвойства.Вставить("СторноДокумент", ДанныеИБ.Ссылка.УникальныйИдентификатор()); ОбъектВыгрузки.ДополнительныеСвойства.Вставить("СторноДата", ДанныеИБ.Дата); ОбъектВыгрузки.ДополнительныеСвойства.Вставить("СторноПометкаУдаления", ДанныеИБ.ПометкаУдаления); - + ОбъектВыгрузки.ДополнительныеСвойства.Вставить("СторноКомментарий", + СтрШаблон("Выгружен из УПО %1. Источник: '%2'", Строка(ТекущаяДата()), ДанныеИБ.Ссылка)); + ОбменДаннымиXDTOСервер.ВыгрузкаОбъектаВыборки(КомпонентыОбмена, ОбъектВыгрузки); КонецЕсли; @@ -22400,6 +22585,294 @@ ДанныеXDTO.Вставить("Товары", Товары); КонецЕсли; +КонецПроцедуры +Процедура ПКО_ДокументСсылка_УОП_ОбобщенноеПроизводство_Отправка_ПриОтправкеДанных(ДанныеИБ, ДанныеXDTO, КомпонентыОбмена, СтекВыгрузки) + // колк - перепроверить заменить согласно документу обобщенному + + Если СтекВыгрузки.Количество() > 1 Тогда + Возврат; + КонецЕсли; + + ДанныеXDTO.Вставить("ВидОперации", "ВыпускПродукцииНаСклад"); + + Если ЗначениеЗаполнено(ДанныеИБ.СтруктурнаяЕдиница) + И ДанныеИБ.СтруктурнаяЕдиница.ТипСтруктурнойЕдиницы = Перечисления.ТипыСтруктурныхЕдиниц.Подразделение Тогда + + ДанныеXDTO.Вставить("ПодразделениеЗатрат", ДанныеИБ.СтруктурнаяЕдиница); + + Иначе + + ДанныеXDTO.Вставить("ПодразделениеЗатрат", Справочники.СтруктурныеЕдиницы.ОсновноеПодразделение); + + КонецЕсли; + + + + // +УПО + + //// Для разделки отправку Подразделения делаем аналогичную Выпуску продукции + // + //Если ДанныеИБ.ВидОперации = Перечисления.ВидыОперацийСборкаЗапасов.УОП_Разделка Тогда + // + // Если ЗначениеЗаполнено(ДанныеИБ.СтруктурнаяЕдиницаПродукции) + // + // И ДанныеИБ.СтруктурнаяЕдиница.ТипСтруктурнойЕдиницы = Перечисления.ТипыСтруктурныхЕдиниц.Подразделение Тогда + // + // ДанныеXDTO.Вставить("ПодразделениеЗатрат", ДанныеИБ.СтруктурнаяЕдиницаПродукции); + // + // Иначе + // + // ДанныеXDTO.Вставить("ПодразделениеЗатрат", Справочники.СтруктурныеЕдиницы.ОсновноеПодразделение); + // + // КонецЕсли; + // + //КонецЕсли; + // + // -УПО + + + + Если КомпонентыОбмена.ПараметрыКонвертации.ИспользуютсяСкладыВТабличныхЧастях Тогда + + Склад = КомпонентыОбмена.ПараметрыКонвертации.ОбобщенныйСклад; + + Иначе + + Склад = ДанныеИБ.СтруктурнаяЕдиница; + + КонецЕсли; + + + + ИмяПКО = ПКОДляСтруктурнойЕдиницы(Склад); + + ДанныеXDTO.Вставить("Склад", Новый Структура("Значение, ИмяПКО", Склад, ИмяПКО)); + + + + //РасширенныеДанныеИБ = ДанныеИБ.Продукция.Выгрузить();//ДанныеДокументаПроизводство(ДанныеИБ); + + РасширенныеДанныеИБ = УОП_ДанныеДокументаОбобщенноеПроизводство(ДанныеИБ); + + Продукция = РасширенныеДанныеИБ.Продукция;//ДанныеИБ.Продукция.Выгрузить(); // РасширенныеДанныеИБ.Продукция; + + + + // +УПО + + ДополнительныеСведения = Новый Структура( ); + + Если УОП_СворачиватьНоменклатуру(КомпонентыОбмена.ПараметрыКонвертации) Тогда + + ПараметрыПолитики = ПараметрыНалогообложения(ДанныеИБ.Организация); + + Если ПараметрыПолитики <> Неопределено Тогда + + ДополнительныеСведения.Вставить("СуммаСебестоимостьБезННС", НЕ ПараметрыПолитики.ПлательщикУСН); + + КонецЕсли; + + Продукция.ЗаполнитьЗначения(Справочники.Спецификации.ПустаяСсылка(), "Спецификация"); + + УОП_СверткаНоменклатурыПередОтправкой(Продукция, ДанныеИБ.Ссылка, КомпонентыОбмена, Ложь, , , , ДополнительныеСведения); + + КонецЕсли; + + // -УПО + + + + Если Продукция.Количество() > 0 Тогда + + Продукция.Колонки.Добавить("ГруппаАналитическогоУчетаНоменклатуры"); + + // Для Каждого Строка ИЗ Продукция Цикл + // + // Если КомпонентыОбмена.ПараметрыКонвертации.ПереноситьКатегорииКакВидыНоменклатуры Тогда + // + // Строка.ГруппаАналитическогоУчетаНоменклатуры = Новый Структура("Значение, ИмяПКО", Строка.НаправлениеДеятельности, ИмяПКОДляГруппыАналитическогоУчета(КомпонентыОбмена)); + // + // Иначе + // + // Строка.ГруппаАналитическогоУчетаНоменклатуры = Новый Структура("Значение, ИмяПКО", Строка.КатегорияНоменклатуры, ИмяПКОДляГруппыАналитическогоУчета(КомпонентыОбмена)); + // + // КонецЕсли; + // + // КонецЦикла; + + ДанныеXDTO.Вставить("Продукция", Продукция); + + КонецЕсли; + + Материалы = РасширенныеДанныеИБ.Материалы; + + //Материалы = ДополнитьДаннымиПрослеживаемостиИГТД(ДанныеИБ, Материалы, РасширенныеДанныеИБ.СведенияПрослеживаемости, "Количество", КомпонентыОбмена); + + //Материалы = ДанныеИБ.Запасы.Выгрузить(); + + // +УПО + + УОП_СворачиватьНоменклатуру = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(КомпонентыОбмена.ПараметрыКонвертации, "УОП_СворачиватьНоменклатуру", Ложь); + + Если УОП_СворачиватьНоменклатуру Тогда + + Материалы.ЗаполнитьЗначения("", "ИдентификаторСтроки"); + + ДополнительныеСведения.Вставить("ЭтоМатериалыПроизводства"); + + УОП_СверткаНоменклатурыПередОтправкой(Материалы, ДанныеИБ.Ссылка, КомпонентыОбмена, , , , , ДополнительныеСведения); + + ДополнительныеСведения.Удалить("ЭтоМатериалыПроизводства"); + + // Удаление материалов с нулевым количеством (т.е. свернутые без себестоимости). + + УдаляемыеСтроки = Материалы.НайтиСтроки(Новый Структура("Количество", 0)); + + Для каждого СтрокаТЗ Из УдаляемыеСтроки Цикл + + Материалы.Удалить(СтрокаТЗ); + + КонецЦикла; + + УдаляемыеСтроки.Очистить(); + + УдаляемыеСтроки = Неопределено; + + // + + УОП_ВставитьОтметкуСвертки(ДанныеXDTO, КомпонентыОбмена); + + КонецЕсли; + + // -УПО + + Если Материалы.Количество() > 0 Тогда + + Материалы.Колонки.Добавить("ГруппаАналитическогоУчетаНоменклатуры"); + + // Для Каждого Строка ИЗ Материалы Цикл + // + // Если КомпонентыОбмена.ПараметрыКонвертации.ПереноситьКатегорииКакВидыНоменклатуры Тогда + // + // Строка.ГруппаАналитическогоУчетаНоменклатуры = Новый Структура("Значение, ИмяПКО", Строка.НаправлениеДеятельности, ИмяПКОДляГруппыАналитическогоУчета(КомпонентыОбмена)); + // + // Иначе + // + // Строка.ГруппаАналитическогоУчетаНоменклатуры = Новый Структура("Значение, ИмяПКО", Строка.КатегорияНоменклатуры, ИмяПКОДляГруппыАналитическогоУчета(КомпонентыОбмена)); + // + // КонецЕсли; + // + // КонецЦикла; + // + ДанныеXDTO.Вставить("Материалы", Материалы); + + КонецЕсли; + + ВозвратныеОтходы = РасширенныеДанныеИБ.ВозвратныеОтходы; + + //ВозвратныеОтходы = ДанныеИБ.ВозвратныеОтходы.Выгрузить(); + // +УПО + + Если УОП_СворачиватьНоменклатуру(КомпонентыОбмена.ПараметрыКонвертации) Тогда + + УОП_СверткаНоменклатурыПередОтправкой(ВозвратныеОтходы, ДанныеИБ.Ссылка, КомпонентыОбмена, Ложь, , , , ДополнительныеСведения); + + КонецЕсли; + + // -УПО + + Если ВозвратныеОтходы.Количество() > 0 Тогда + + ВозвратныеОтходы.Колонки.Добавить("ГруппаАналитическогоУчетаНоменклатуры"); + + // Для Каждого Строка ИЗ ВозвратныеОтходы Цикл + // + // Если КомпонентыОбмена.ПараметрыКонвертации.ПереноситьКатегорииКакВидыНоменклатуры Тогда + // + // Строка.ГруппаАналитическогоУчетаНоменклатуры = Новый Структура("Значение, ИмяПКО", Строка.НаправлениеДеятельности, ИмяПКОДляГруппыАналитическогоУчета(КомпонентыОбмена)); + // + // Иначе + // + // Строка.ГруппаАналитическогоУчетаНоменклатуры = Новый Структура("Значение, ИмяПКО", Строка.КатегорияНоменклатуры, ИмяПКОДляГруппыАналитическогоУчета(КомпонентыОбмена)); + // + // КонецЕсли; + // + // КонецЦикла; + + ДанныеXDTO.Вставить("ВозвратныеОтходы", ВозвратныеОтходы); + + КонецЕсли; + + + //Если ВерсияФорматаЧислом(КомпонентыОбмена.ВерсияФорматаОбмена) >= ВерсияФорматаЧислом("1.16") Тогда + // + // ЗаполнитьСведенияОПрослеживаемости(ДанныеИБ, ДанныеXDTO, КомпонентыОбмена); + // + //КонецЕсли; + // + // +УОП + + #Область ПереносСуммБезНДС + + // Перенос сумм продукции без НДС, как дополнительной информации (через 'AdditionalInfo'). + + // Если применяется ОСНО, то на стороне БП будет загружена сумма без НДС. + + СуммыБезНДС = Новый Соответствие; // Номен строки ТЧ 'Продукция' > Сумма без НДС + + Если Продукция.Количество() > 0 Тогда + + НомерСтроки = 0; + + Для каждого СтрокаТЗ Из Продукция Цикл + + НомерСтроки = НомерСтроки + 1; + + СуммыБезНДС[НомерСтроки] = СтрокаТЗ.УОП_СуммаБезНДС; + + КонецЦикла; + + КонецЕсли; + + // + + Если СуммыБезНДС.Количество() > 0 Тогда + + УОП_ДобавитьAdditionalInfo(ДанныеXDTO, "УОП_Продукция_СуммыБезНДС", СуммыБезНДС); + + КонецЕсли; + + #КонецОбласти // ПереносСуммБезНДС + + // + + Если УОП_СворачиватьНоменклатуру = Истина Тогда + + // Веделение строк с себестоимостью в количестве. + + ДопСведение_СвернутыеСтроки = Новый Соответствие; + + СтрокиТЗ = Материалы.НайтиСтроки(Новый Структура("РезультатСвертки", Истина)); + + Если СтрокиТЗ.Количество() > 0 Тогда + + СтрокиТЧ = Новый Массив; + + Для каждого СтрокаТЗ Из СтрокиТЗ Цикл + + СтрокиТЧ.Добавить(Материалы.Индекс(СтрокаТЗ) + 1); + + КонецЦикла; + + ДопСведение_СвернутыеСтроки["Материалы"] = СтрокиТЧ; + + КонецЕсли; + + УОП_ДобавитьAdditionalInfo(ДанныеXDTO, "УОП_СтрокиСвертки", ДопСведение_СвернутыеСтроки); + + КонецЕсли; + + // -УОП КонецПроцедуры Процедура ПКО_Документ_УОП_ОбобщенноеПеремещение_ПересортицаТоваров_Отправка_ПриОтправкеДанных(ДанныеИБ, ДанныеXDTO, КомпонентыОбмена, СтекВыгрузки) Если СтекВыгрузки.Количество() > 1 Тогда @@ -36778,8 +37251,152 @@ ТаблицаСведенияПрослеживаемости = РезультатыЗапроса[РезультатыЗапроса.Количество()-1].Выгрузить(); Результат.Вставить("СведенияПрослеживаемости", ТаблицаСведенияПрослеживаемости); + Возврат Результат; +КонецФункции +// +УОП +Функция УОП_ДанныеДокументаОбобщенноеПроизводство(ДанныеИБ) + Результат = Новый Структура; + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | МАКСИМУМ(СборкаЗапасовПродукция.НомерСтроки) КАК НомерСтроки, + | СборкаЗапасовПродукция.Ссылка КАК Документ, + | СборкаЗапасовПродукция.Номенклатура КАК Номенклатура, + | СборкаЗапасовПродукция.Характеристика КАК Характеристика, + | СборкаЗапасовПродукция.Номенклатура.КатегорияНоменклатуры КАК КатегорияНоменклатуры, + | СборкаЗапасовПродукция.Номенклатура.НаправлениеДеятельности КАК НаправлениеДеятельности, + | СборкаЗапасовПродукция.Спецификация КАК Спецификация, + | СУММА(СборкаЗапасовПродукция.Количество) КАК КоличествоМест, + | СУММА(ВЫБОР + | КОГДА ТИПЗНАЧЕНИЯ(СборкаЗапасовПродукция.ЕдиницаИзмерения) = ТИП(Справочник.ЕдиницыИзмерения) + | И СборкаЗапасовПродукция.ЕдиницаИзмерения.Коэффициент > 0 + | ТОГДА ВЫРАЗИТЬ(СборкаЗапасовПродукция.Количество * СборкаЗапасовПродукция.ЕдиницаИзмерения.Коэффициент КАК ЧИСЛО(15, 3)) + | ИНАЧЕ СборкаЗапасовПродукция.Количество + | КОНЕЦ) КАК Количество, + | ВЫБОР + | КОГДА СборкаЗапасовПродукция.ЕдиницаИзмерения ССЫЛКА Справочник.ЕдиницыИзмерения + | ТОГДА СборкаЗапасовПродукция.Номенклатура.ЕдиницаИзмерения + | ИНАЧЕ СборкаЗапасовПродукция.ЕдиницаИзмерения + | КОНЕЦ КАК ЕдиницаИзмерения, + | ВЫБОР + | КОГДА СборкаЗапасовПродукция.ЕдиницаИзмерения ССЫЛКА Справочник.ЕдиницыИзмерения + | ТОГДА СборкаЗапасовПродукция.ЕдиницаИзмерения.Коэффициент + | ИНАЧЕ 1 + | КОНЕЦ КАК Коэффициент, + | СУММА(СборкаЗапасовПродукция.Цена) КАК Цена, + | СУММА(СборкаЗапасовПродукция.Сумма) КАК Сумма, + | СУММА(СборкаЗапасовПродукция.УОП_СуммаБезНДС) КАК УОП_СуммаБезНДС, + | СборкаЗапасовПродукция.ИдентификаторСтроки КАК ИдентификаторСтроки, + | СборкаЗапасовПродукция.ПрослеживаемыйТовар КАК ПрослеживаемыйТовар + |ИЗ + | Документ.УОП_ОбобщенноеПроизводство.Продукция КАК СборкаЗапасовПродукция + |ГДЕ + | СборкаЗапасовПродукция.Ссылка = &Документ + | + |СГРУППИРОВАТЬ ПО + | СборкаЗапасовПродукция.Спецификация, + | СборкаЗапасовПродукция.Номенклатура, + | СборкаЗапасовПродукция.Характеристика, + | СборкаЗапасовПродукция.Ссылка, + | ВЫБОР + | КОГДА СборкаЗапасовПродукция.ЕдиницаИзмерения ССЫЛКА Справочник.ЕдиницыИзмерения + | ТОГДА СборкаЗапасовПродукция.ЕдиницаИзмерения.Коэффициент + | ИНАЧЕ 1 + | КОНЕЦ, + | ВЫБОР + | КОГДА СборкаЗапасовПродукция.ЕдиницаИзмерения ССЫЛКА Справочник.ЕдиницыИзмерения + | ТОГДА СборкаЗапасовПродукция.Номенклатура.ЕдиницаИзмерения + | ИНАЧЕ СборкаЗапасовПродукция.ЕдиницаИзмерения + | КОНЕЦ, + | СборкаЗапасовПродукция.Номенклатура.КатегорияНоменклатуры, + | СборкаЗапасовПродукция.Номенклатура.НаправлениеДеятельности, + | СборкаЗапасовПродукция.ИдентификаторСтроки, + | СборкаЗапасовПродукция.ПрослеживаемыйТовар + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | СборкаЗапасовОтходы.Номенклатура КАК Номенклатура, + | СборкаЗапасовОтходы.Характеристика КАК Характеристика, + | ВЫБОР + | КОГДА ТИПЗНАЧЕНИЯ(СборкаЗапасовОтходы.ЕдиницаИзмерения) = ТИП(Справочник.ЕдиницыИзмерения) + | И СборкаЗапасовОтходы.ЕдиницаИзмерения.Коэффициент > 0 + | ТОГДА ВЫРАЗИТЬ(СборкаЗапасовОтходы.Количество * СборкаЗапасовОтходы.ЕдиницаИзмерения.Коэффициент КАК ЧИСЛО(15, 3)) + | ИНАЧЕ СборкаЗапасовОтходы.Количество + | КОНЕЦ КАК Количество, + | СборкаЗапасовОтходы.Сумма КАК Сумма, + | СборкаЗапасовОтходы.ЕдиницаИзмерения КАК ЕдиницаИзмерения, + | СборкаЗапасовОтходы.Номенклатура.КатегорияНоменклатуры КАК КатегорияНоменклатуры, + | СборкаЗапасовОтходы.Номенклатура.НаправлениеДеятельности КАК НаправлениеДеятельности + |ИЗ + | Документ.УОП_ОбобщенноеПроизводство.ВозвратныеОтходы КАК СборкаЗапасовОтходы + |ГДЕ + | СборкаЗапасовОтходы.Ссылка = &Документ + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | УОП_ОбобщенноеПроизводствоЗапасы.Ссылка КАК Ссылка, + | УОП_ОбобщенноеПроизводствоЗапасы.НомерСтроки КАК НомерСтроки, + | УОП_ОбобщенноеПроизводствоЗапасы.Номенклатура КАК Номенклатура, + | УОП_ОбобщенноеПроизводствоЗапасы.Номенклатура.КатегорияНоменклатуры КАК КатегорияНоменклатуры, + | УОП_ОбобщенноеПроизводствоЗапасы.Характеристика КАК Характеристика, + | УОП_ОбобщенноеПроизводствоЗапасы.Количество КАК Количество, + | ВЫБОР + | КОГДА УОП_ОбобщенноеПроизводствоЗапасы.ЕдиницаИзмерения ССЫЛКА Справочник.ЕдиницыИзмерения + | ТОГДА УОП_ОбобщенноеПроизводствоЗапасы.Номенклатура.ЕдиницаИзмерения + | ИНАЧЕ УОП_ОбобщенноеПроизводствоЗапасы.ЕдиницаИзмерения + | КОНЕЦ КАК ЕдиницаИзмерения, + | УОП_ОбобщенноеПроизводствоЗапасы.ИдентификаторСтроки КАК ИдентификаторСтроки, + | УОП_ОбобщенноеПроизводствоЗапасы.ПрослеживаемыйТовар КАК ПрослеживаемыйТовар, + | УОП_ОбобщенноеПроизводствоЗапасы.Спецификация КАК Спецификация, + | УОП_ОбобщенноеПроизводствоЗапасы.Продукция КАК Продукция, + | УОП_ОбобщенноеПроизводствоЗапасы.Себестоимость КАК Себестоимость + |ИЗ + | Документ.УОП_ОбобщенноеПроизводство.Запасы КАК УОП_ОбобщенноеПроизводствоЗапасы + |ГДЕ + | УОП_ОбобщенноеПроизводствоЗапасы.Ссылка = &Документ + |; + |"; + + // +УОП + //Если ДанныеИБ.ВидОперации = Перечисления.ВидыОперацийСборкаЗапасов.Разборка + // ИЛИ ДанныеИБ.ВидОперации = Перечисления.ВидыОперацийСборкаЗапасов.УОП_Разделка Тогда + //// -УОП + // Запрос.Текст = СтрЗаменить(Запрос.Текст, "Документ.СборкаЗапасов.Продукция", "Документ.СборкаЗапасов.Запасы"); + //КонецЕсли; + + Запрос.УстановитьПараметр("Документ", ДанныеИБ.Ссылка); + Запрос.УстановитьПараметр("Дата", ДанныеИБ.Дата); + Запрос.УстановитьПараметр("РегВалюта", Константы.НациональнаяВалюта.Получить()); + Запрос.УстановитьПараметр("УпрВалюта", Константы.ВалютаУчета.Получить()); + + РезультатыЗапроса = Запрос.ВыполнитьПакет(); + + ТаблицаПродукция = РезультатыЗапроса[0].Выгрузить(); + Результат.Вставить("Продукция", ТаблицаПродукция); + + ТаблицаОтходы = РезультатыЗапроса[1].Выгрузить(); + Если ТаблицаПродукция.Количество() = 1 Тогда + Для каждого СтрокаТаблицы Из ТаблицаОтходы Цикл + СтрокаТаблицы.КатегорияНоменклатуры = ТаблицаПродукция[0].КатегорияНоменклатуры; + СтрокаТаблицы.НаправлениеДеятельности = ТаблицаПродукция[0].НаправлениеДеятельности; + КонецЦикла; + КонецЕсли; + //Если ДанныеИБ.ВариантУчетаСтоимостиОтходов = Перечисления.ВариантУчетаСтоимостиОтходов.Нулевая Тогда + // Для каждого СтрокаТаблицы Из ТаблицаОтходы Цикл + // СтрокаТаблицы.Сумма = 0; + // КонецЦикла; + //КонецЕсли; + Результат.Вставить("ВозвратныеОтходы", ТаблицаОтходы); + + ТаблицаМатериалы = РезультатыЗапроса[2].Выгрузить();//ТаблицаРаспределенияМатериалов(ДанныеИБ); + Результат.Вставить("Материалы", ТаблицаМатериалы); + Возврат Результат; КонецФункции +// -УОП Функция ДанныеДокументаПроизводствоВПеремещениеОтходов(ДанныеИБ) Результат = Новый Структура; @@ -45245,7 +45862,12 @@ СтрУсловиеДополнительное = " | И Регистр.СтруктурнаяЕдиница = &СтруктурнаяЕдиницаПродукции | И Регистр.Номенклатура = Регистр.КоррНоменклатура"; - + + Если ТипЗнч(Регистратор) = Тип("ДокументСсылка.СборкаЗапасов") Тогда + СтрУсловиеДополнительное = СтрУсловиеДополнительное + " + | И ЗаказНаПроизводство = ЗНАЧЕНИЕ(Документ.ЗаказНаПроизводство.ПустаяСсылка)"; + КонецЕсли; + Запрос.УстановитьПараметр( "СтруктурнаяЕдиницаПродукции", ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Регистратор, "СтруктурнаяЕдиницаПродукции")); @@ -46560,6 +47182,9 @@ ИначеЕсли ИмяПроцедуры = "ПКО_Документ_УОП_ОРПТребованиеНакладная_Отправка_ПриОтправкеДанных" Тогда СворачиваемыеКолонки.Добавить(СтрРазделить("Счет,Аналитика", ",")); ИначеЕсли ИмяПроцедуры = "ПКО_Документ_Производство_Отправка_ПриОтправкеДанных" Тогда + СворачиваемыеКолонки.Добавить("УОП_СуммаБезНДС"); + СворачиваемыеКолонки.Добавить("Себестоимость"); + ИначеЕсли ИмяПроцедуры = "ПКО_Документ_УОП_ОбобщенноеПроизводство_Отправка_ПриОтправкеДанных" Тогда СворачиваемыеКолонки.Добавить("УОП_СуммаБезНДС"); ИначеЕсли ИмяПроцедуры = "ПКО_Документ_УОП_ОбобщенноеПеремещение_ПеремещениеТоваров_Отправка_ПриОтправкеДанных" Тогда СворачиваемыеКолонки.Добавить("СебестоимостьБезНДС"); @@ -46621,6 +47246,8 @@ "УОП_СторноДата", ДанныеИБ.ДополнительныеСвойства.СторноДата); Параметры.ДанныеXDTO.AdditionalInfo.Вставить( "УОП_СторноПометкаУдаления", ДанныеИБ.ДополнительныеСвойства.СторноПометкаУдаления); + Параметры.ДанныеXDTO.AdditionalInfo.Вставить( + "УОП_СторноКомментарий", ДанныеИБ.ДополнительныеСвойства.СторноКомментарий); КонецЕсли; Исключение КонецПопытки; diff --git a/Конфигурация/CommonModules/МенеджерОборудования/Ext/Module.bsl b/Конфигурация/CommonModules/МенеджерОборудования/Ext/Module.bsl index 716304afe..a089ed925 100644 --- a/Конфигурация/CommonModules/МенеджерОборудования/Ext/Module.bsl +++ b/Конфигурация/CommonModules/МенеджерОборудования/Ext/Module.bsl @@ -11,7 +11,7 @@ // Функция ВерсияБиблиотеки() Экспорт - ВерсияБиблиотекиБПО = "3.3.4.24"; + ВерсияБиблиотекиБПО = "3.3.4.28"; Возврат ВерсияБиблиотекиБПО; КонецФункции @@ -1941,7 +1941,10 @@ Результат.Вставить("КраткоеОписание", ""); Результат.Вставить("ОписаниеОшибки", ""); - ДрайверПоставляетсяВКонфигурации = ДрайверПоставляетсяВКонфигурации(ИдентификаторУстройства); + ПараметрыПоставкиДрайвера = ПараметрыПоставкиДрайвера(ИдентификаторУстройства); + ДрайверПоставляетсяВКонфигурации = + ПараметрыПоставкиДрайвера.ПоставляетсяВКонфигурации + И Не ПараметрыПоставкиДрайвера.СнятСПоддержки; ТекущаяВерсияДрайвера = ""; АктуальнаяВерсияДрайвера = ""; @@ -1961,6 +1964,7 @@ Результат.КраткоеОписание = КлассОшибки.КраткоеОписание; Строки = Новый Массив; Строки.Добавить(ТекстОшибки); + Строки.Добавить(); Строки.Добавить(КлассОшибки.ПодробноеОписание); ПредставлениеКонтактнойИнформации = ПредставлениеКонтактнойИнформацииТехподдержки(ИдентификаторУстройства); Если ЗначениеЗаполнено(ПредставлениеКонтактнойИнформации) Тогда @@ -1972,9 +1976,15 @@ Результат.ЛокальнаяОбработкаОшибки = Истина; Результат.КраткоеОписание = НСтр("ru = 'Драйвер не сертифицирован'"); + Строки = Новый Массив; Строки.Добавить(ТекстОшибки); - Строки.Добавить(НСтр("ru = 'Используемый драйвер оборудования не сертифицирован или снят с поддержки.'")); + Строки.Добавить(); + Если ПараметрыПоставкиДрайвера.СнятСПоддержки Тогда + Строки.Добавить(НСтр("ru = 'Используемый драйвер оборудования не сертифицирован.'")); + Иначе + Строки.Добавить(НСтр("ru = 'Используемый драйвер оборудования снят с поддержки.'")); + КонецЕсли; Строки.Добавить(НСтр("ru = 'Обратитесь, пожалуйста, за помощью к поставщику драйвера.'")); ПредставлениеКонтактнойИнформации = ПредставлениеКонтактнойИнформацииТехподдержки(ИдентификаторУстройства); Если ЗначениеЗаполнено(ПредставлениеКонтактнойИнформации) Тогда @@ -1988,6 +1998,7 @@ Результат.КраткоеОписание = НСтр("ru = 'Устаревшая версия драйвера'"); Строки = Новый Массив; Строки.Добавить(ТекстОшибки); + Строки.Добавить(); Строки.Добавить( СтрШаблон(НСтр("ru = 'Версия этого драйвера устарела, текущая версия драйвера %1, актуальная версия драйвера %2.'"), ТекущаяВерсияДрайвера, @@ -2243,6 +2254,32 @@ // -- НеМобильноеПриложение +Функция ПараметрыПоставкиДрайвера(ИдентификаторУстройства) + + Результат = Новый Структура("ПоставляетсяВКонфигурации, СнятСПоддержки", Истина, Ложь); + + Если ЗначениеЗаполнено(ИдентификаторУстройства) Тогда + Реквизиты = ОбщегоНазначенияБПО.ЗначенияРеквизитовОбъекта( + ИдентификаторУстройства, + "ДрайверОборудования.Предопределенный, ДрайверОборудования.СнятСПоддержки"); + + Если ЗначениеЗаполнено(Реквизиты.ДрайверОборудованияПредопределенный) Тогда + Результат.ПоставляетсяВКонфигурации = Реквизиты.ДрайверОборудованияПредопределенный; + Иначе + Результат.ПоставляетсяВКонфигурации = Ложь; + КонецЕсли; + Если ЗначениеЗаполнено(Реквизиты.ДрайверОборудованияСнятСПоддержки) Тогда + Результат.СнятСПоддержки = Реквизиты.ДрайверОборудованияСнятСПоддержки; + Иначе + Результат.СнятСПоддержки = Ложь; + КонецЕсли; + + КонецЕсли; + + Возврат Результат; + +КонецФункции + #КонецОбласти #КонецЕсли diff --git a/Конфигурация/CommonModules/МенеджерОборудованияВызовСервера/Ext/Module.bsl b/Конфигурация/CommonModules/МенеджерОборудованияВызовСервера/Ext/Module.bsl index b77c401b3..816f36ea8 100644 --- a/Конфигурация/CommonModules/МенеджерОборудованияВызовСервера/Ext/Module.bsl +++ b/Конфигурация/CommonModules/МенеджерОборудованияВызовСервера/Ext/Module.bsl @@ -28,7 +28,6 @@ Функция ДоступныеПротоколыОбменаФЭСНСПК() Экспорт ПротоколыОбменаФЭСНСПК = Новый Массив(); - ПротоколыОбменаФЭСНСПК.Добавить(Перечисления.ПротоколОбменаФЭСНСПК.ВерсияV1); ПротоколыОбменаФЭСНСПК.Добавить(Перечисления.ПротоколОбменаФЭСНСПК.ВерсияV2); МенеджерОборудованияВызовСервераПереопределяемый.ДоступныеПротоколыОбменаФЭСНСПК(ПротоколыОбменаФЭСНСПК); Возврат ПротоколыОбменаФЭСНСПК; diff --git a/Конфигурация/CommonModules/МенеджерОборудованияРМККлиент/Ext/Module.bsl b/Конфигурация/CommonModules/МенеджерОборудованияРМККлиент/Ext/Module.bsl index 65bb68fb2..60235d16c 100644 --- a/Конфигурация/CommonModules/МенеджерОборудованияРМККлиент/Ext/Module.bsl +++ b/Конфигурация/CommonModules/МенеджерОборудованияРМККлиент/Ext/Module.bsl @@ -1198,11 +1198,13 @@ Если СтандартнаяОбработка Тогда Если ИспользуетсяБПО() И ОбщегоНазначенияКлиент.ПодсистемаСуществует("ПоддержкаОборудования.ПодключаемоеОборудование.ПлатежныеСистемы") Тогда Если КодСпособаОпалатыЭТ = 1 Тогда - Результат = ПредопределенноеЗначение("Перечисление.ВидОплатыНаТерминале.СБПQR"); + СпособОплатыЭТ = ПредопределенноеЗначение("Перечисление.ВидОплатыНаТерминале.СБПQR"); ИначеЕсли КодСпособаОпалатыЭТ = 2 Тогда - Результат = ПредопределенноеЗначение("Перечисление.ВидОплатыНаТерминале.ПлатиQR"); + СпособОплатыЭТ = ПредопределенноеЗначение("Перечисление.ВидОплатыНаТерминале.ПлатиQR"); + ИначеЕсли КодСпособаОпалатыЭТ = 3 Тогда + СпособОплатыЭТ = ПредопределенноеЗначение("Перечисление.ВидОплатыНаТерминале.ЦифровойРубль"); Иначе - Результат = ПредопределенноеЗначение("Перечисление.ВидОплатыНаТерминале.Карта"); + СпособОплатыЭТ = ПредопределенноеЗначение("Перечисление.ВидОплатыНаТерминале.Карта"); КонецЕсли; КонецЕсли; КонецЕсли; diff --git a/Конфигурация/CommonModules/МониторПортала1СИТС/Ext/Module.bsl b/Конфигурация/CommonModules/МониторПортала1СИТС/Ext/Module.bsl index 51a73fe71..7cdce215b 100644 --- a/Конфигурация/CommonModules/МониторПортала1СИТС/Ext/Module.bsl +++ b/Конфигурация/CommonModules/МониторПортала1СИТС/Ext/Module.bsl @@ -280,6 +280,10 @@ Методы.Вставить("ПроверитьНаличиеНовойИнформацииВФоне", Истина); Методы.Вставить("ПроверитьНаличиеУведомлений", Истина); + Если ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.БазоваяФункциональность") Тогда + Методы.Вставить("ПолучениеУведомленийМонитораПортала"); + КонецЕсли; + КонецПроцедуры #КонецОбласти diff --git a/Конфигурация/CommonModules/НастройкиОтправкиЭДО/Ext/Module.bsl b/Конфигурация/CommonModules/НастройкиОтправкиЭДО/Ext/Module.bsl index 1e2ad43e9..c5b0c6866 100644 --- a/Конфигурация/CommonModules/НастройкиОтправкиЭДО/Ext/Module.bsl +++ b/Конфигурация/CommonModules/НастройкиОтправкиЭДО/Ext/Module.bsl @@ -1481,6 +1481,8 @@ КонецЕсли; КонецЦикла; + СервисEDIСлужебный.ПриЗаполненииНастроекОтправкиЭлектронныхДокументовПоВидам(ТаблицаНастроек); + Если Не (ЗначениеЗаполнено(СтрокаНастроекПоУмолчанию.ИдентификаторОтправителя) И ЗначениеЗаполнено(СтрокаНастроекПоУмолчанию.ИдентификаторПолучателя) И ЗначениеЗаполнено(СтрокаНастроекПоУмолчанию.СпособОбменаЭД)) Тогда diff --git a/Конфигурация/CommonModules/НастройкиОтправкиЭДОСлужебный/Ext/Module.bsl b/Конфигурация/CommonModules/НастройкиОтправкиЭДОСлужебный/Ext/Module.bsl index c90e45b45..4e0e1744f 100644 --- a/Конфигурация/CommonModules/НастройкиОтправкиЭДОСлужебный/Ext/Module.bsl +++ b/Конфигурация/CommonModules/НастройкиОтправкиЭДОСлужебный/Ext/Module.bsl @@ -1407,6 +1407,8 @@ Результат = Истина; ИначеЕсли СинхронизацияЭДО.ЭтоПрямойОбмен(СпособОбмена) Тогда Результат = Истина; + ИначеЕсли СервисEDIСлужебный.ЭтоОбменЧерезСервис1СEDI(СпособОбмена) Тогда + Результат = Истина; Иначе КлючПриглашенияНаИдентификатор = ПриглашенияЭДОКлиентСервер.КлючПриглашенияНаИдентификатор(); КлючПриглашенияНаИдентификатор.ИдентификаторОрганизации = ИдентификаторОтправителя; diff --git a/Конфигурация/CommonModules/НастройкиПлатежныхСистем/Ext/Module.bsl b/Конфигурация/CommonModules/НастройкиПлатежныхСистем/Ext/Module.bsl index 59c047824..4ec3d7bb8 100644 --- a/Конфигурация/CommonModules/НастройкиПлатежныхСистем/Ext/Module.bsl +++ b/Конфигурация/CommonModules/НастройкиПлатежныхСистем/Ext/Module.bsl @@ -140,57 +140,11 @@ ТипПечати, Тип("Число")); - ИменаКартинок = Новый Структура("Цветной, Монохромный, Черный"); - - Преобразовать = Ложь; - - Если ПлатежнаяСистема = НастройкиПлатежныхСистемКлиентСервер.ИмяПодсистемыСБП() Тогда - ИменаКартинок.Цветной = "ЛоготипСБПЦветной"; - ИменаКартинок.Монохромный = "ЛоготипСБПМонохромный"; - ИменаКартинок.Черный = "ЛоготипСБПЧерный"; - ИначеЕсли ПлатежнаяСистема = НастройкиПлатежныхСистемКлиентСервер.ИмяПодсистемыЯндексПэй() Тогда - ИменаКартинок.Цветной = "ЛоготипЯндексПэй"; - ИменаКартинок.Монохромный = "ЛоготипЯндексПэйМонохромный"; - ИменаКартинок.Черный = "ЛоготипЯндексПэйМонохромный"; - Преобразовать = Истина; - Иначе - ТипПечати = 3; - КонецЕсли; - - Логотип = Неопределено; - Если ТипПечати = 0 Тогда - Логотип = БиблиотекаКартинок[ИменаКартинок.Цветной]; - ИначеЕсли ТипПечати = 1 Тогда - Логотип = БиблиотекаКартинок[ИменаКартинок.Монохромный]; - ИначеЕсли ТипПечати = 2 Тогда - Логотип = БиблиотекаКартинок[ИменаКартинок.Черный]; - КонецЕсли; - - // Метод ГенерацияШтрихкода.ИзображениеШтрихкода принимает только PNG, - // поэтому преобразовываем, если другой формат - Если Преобразовать И Логотип <> Неопределено Тогда - Логотип = Логотип.Преобразовать(ФорматКартинки.PNG); - КонецЕсли; - - ПараметрыГенерации = ГенерацияШтрихкода.ПараметрыГенерацииШтрихкода(); - ПараметрыГенерации.Ширина = Размер; - ПараметрыГенерации.Высота = Размер; - ПараметрыГенерации.ТипКода = 16; - ПараметрыГенерации.Штрихкод = ФункциональнаяСсылка; - ПараметрыГенерации.УровеньКоррекцииQR = 3; - ПараметрыГенерации.ПрозрачныйФон = Ложь; - - ПараметрыГенерации.ЛоготипКартинка = ?(Логотип = Неопределено, - "", - Base64Строка(Логотип.ПолучитьДвоичныеДанные())); - ПараметрыГенерации.ЛоготипРазмерПроцентОтШК = ?(Логотип = Неопределено, - 0, - 33); - - Результат = ГенерацияШтрихкода.ИзображениеШтрихкода( - ПараметрыГенерации); - - Возврат Результат.ДвоичныеДанные; + Возврат НастройкиПлатежныхСистемСлужебный.ИзображениеQRКода( + ФункциональнаяСсылка, + Размер, + ПлатежнаяСистема, + ТипПечати); КонецФункции diff --git a/Конфигурация/CommonModules/НастройкиПлатежныхСистемСлужебный/Ext/Module.bsl b/Конфигурация/CommonModules/НастройкиПлатежныхСистемСлужебный/Ext/Module.bsl index ff46a082a..1a905cb52 100644 --- a/Конфигурация/CommonModules/НастройкиПлатежныхСистемСлужебный/Ext/Module.bsl +++ b/Конфигурация/CommonModules/НастройкиПлатежныхСистемСлужебный/Ext/Module.bsl @@ -1757,6 +1757,10 @@ Процедура ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод(Методы) Экспорт Методы.Вставить("УстановитьДлительностьОперацийПоУмолчанию"); + + Если ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.БазоваяФункциональность") Тогда + Методы.Вставить("ЗагрузкаСтатусовОперацийПлатежныхСистем"); + КонецЕсли; КонецПроцедуры @@ -2389,4 +2393,147 @@ #КонецОбласти +#Область ИзображениеQRКода + +// Формирование изображения идентификатора оплаты (QR-кода). +// +// Параметры: +// ФункциональнаяСсылка - Строка - идентификатор оплаты. +// Размер - Число - размер QR-кода в пикселях. +// ПлатежнаяСистема - Строка - платежная система, логотип которой должен быть использован. +// Допустимые значения: "СистемаБыстрыхПлатежей", "ЯндексПэй". +// При указании любого другого значения QR-код будет выведен без логотипа. +// ТипПечати - Число - вариант печати QR-кода. В зависимости от выбранного варианта +// печати подбирается картинка с логотипом платежной системы. +// Возможные варианты: +// 0 - цветной логотип. +// 1 - монохромный логотип (оттенки серого). +// 2 - черно-белый логотип. +// 3 - без логотипа. +// Особенности вывода изображений для разных платежных систем: +// для Яндекс Пэй используется одинаковая картинка для типа печати 1 и 2. +// +// Возвращаемое значение: +// ДвоичныеДанные - данные изображения QR-кода. +// +Функция ИзображениеQRКода(ФункциональнаяСсылка, Размер, ПлатежнаяСистема, Знач ТипПечати) Экспорт + + Логотип = ЛоготипQRКода(ПлатежнаяСистема, ТипПечати); + + ПараметрыГенерации = ГенерацияШтрихкода.ПараметрыГенерацииШтрихкода(); + ПараметрыГенерации.Ширина = Размер; + ПараметрыГенерации.Высота = Размер; + ПараметрыГенерации.Штрихкод = ФункциональнаяСсылка; + ПараметрыГенерации.УровеньКоррекцииQR = 3; + + Если ПлатежнаяСистема = НастройкиПлатежныхСистемКлиентСервер.ИмяПодсистемыСБП() + И ПечатьУПКПоддержана() Тогда + ПараметрыГенерации.ТипКода = 26; + ПараметрыГенерации.ФорматВыходногоИзображения = 1; + ПараметрыГенерации.ПрозрачныйФон = Ложь; + Если ТипПечати = 1 + Или ТипПечати = 2 Тогда + ПараметрыГенерации.ОтображениеУниверсальногоПлатежногоКода = 1; + Иначе + ПараметрыГенерации.ОтображениеУниверсальногоПлатежногоКода = 0; + КонецЕсли; + Иначе + ПараметрыГенерации.ТипКода = 16; + ПараметрыГенерации.ЛоготипКартинка = ?(Логотип = Неопределено, + "", + Base64Строка(Логотип.ПолучитьДвоичныеДанные())); + ПараметрыГенерации.ЛоготипРазмерПроцентОтШК = ?(Логотип = Неопределено, + 0, + 33); + КонецЕсли; + + Результат = ГенерацияШтрихкода.ИзображениеШтрихкода( + ПараметрыГенерации); + + Возврат Результат.ДвоичныеДанные; + +КонецФункции + +// Формирование изображения идентификатора оплаты (QR-кода). +// +// Параметры: +// ПлатежнаяСистема - Строка - платежная система, логотип которой должен быть использован. +// Допустимые значения: "СистемаБыстрыхПлатежей", "ЯндексПэй". +// При указании любого другого значения QR-код будет выведен без логотипа. +// ТипПечати - Число - вариант печати QR-кода. В зависимости от выбранного варианта +// печати подбирается картинка с логотипом платежной системы. +// Возможные варианты: +// 0 - цветной логотип. +// 1 - монохромный логотип (оттенки серого). +// 2 - черно-белый логотип. +// 3 - без логотипа. +// +// Возвращаемое значение: +// Картинка - логотип платежной системы. +// +Функция ЛоготипQRКода(ПлатежнаяСистема, Знач ТипПечати) + + Логотип = Неопределено; + ИменаКартинок = Новый Структура("Цветной, Монохромный, Черный"); + + Преобразовать = Ложь; + + Если ПлатежнаяСистема = НастройкиПлатежныхСистемКлиентСервер.ИмяПодсистемыСБП() Тогда + ИменаКартинок.Цветной = "ЛоготипСБПЦветной"; + ИменаКартинок.Монохромный = "ЛоготипСБПМонохромный"; + ИменаКартинок.Черный = "ЛоготипСБПЧерный"; + ИначеЕсли ПлатежнаяСистема = НастройкиПлатежныхСистемКлиентСервер.ИмяПодсистемыЯндексПэй() Тогда + ИменаКартинок.Цветной = "ЛоготипЯндексПэй"; + ИменаКартинок.Монохромный = "ЛоготипЯндексПэйМонохромный"; + ИменаКартинок.Черный = "ЛоготипЯндексПэйМонохромный"; + Преобразовать = Истина; + Иначе + ТипПечати = 3; + КонецЕсли; + + Если ТипПечати = 0 Тогда + Логотип = БиблиотекаКартинок[ИменаКартинок.Цветной]; + ИначеЕсли ТипПечати = 1 Тогда + Логотип = БиблиотекаКартинок[ИменаКартинок.Монохромный]; + ИначеЕсли ТипПечати = 2 Тогда + Логотип = БиблиотекаКартинок[ИменаКартинок.Черный]; + КонецЕсли; + + // Метод ГенерацияШтрихкода.ИзображениеШтрихкода принимает только PNG, + // поэтому преобразовываем, если другой формат + Если Преобразовать И Логотип <> Неопределено Тогда + Логотип = Логотип.Преобразовать(ФорматКартинки.PNG); + КонецЕсли; + + Возврат Логотип; + +КонецФункции + +// Выполняет проверку поддержки печати УПК. +// +// Возвращаемое значение: +// Булево - Истина, если печать УПК поддержана. +// +Функция ПечатьУПКПоддержана() + + ТекущаяВерсияБСП = СтандартныеПодсистемыСервер.ВерсияБиблиотеки(); + + Если ОбщегоНазначенияКлиентСервер.СравнитьВерсии(ТекущаяВерсияБСП, "3.2.1.1") >= 0 Тогда + ТребуемаяВерсия = "3.2.1.499"; + Иначе + ТребуемаяВерсия = "3.1.12.293"; + КонецЕсли; + + РезультатСравнения = ОбщегоНазначенияКлиентСервер.СравнитьВерсии(ТребуемаяВерсия, ТекущаяВерсияБСП); + + Если РезультатСравнения > 0 Тогда + Возврат Ложь; + Иначе + Возврат Истина; + КонецЕсли; + +КонецФункции + +#КонецОбласти + #КонецОбласти diff --git a/Конфигурация/CommonModules/НастройкиЭДО/Ext/Module.bsl b/Конфигурация/CommonModules/НастройкиЭДО/Ext/Module.bsl index c93714108..7303a3d77 100644 --- a/Конфигурация/CommonModules/НастройкиЭДО/Ext/Module.bsl +++ b/Конфигурация/CommonModules/НастройкиЭДО/Ext/Module.bsl @@ -74,6 +74,26 @@ КонецФункции +// Определяет, используется ли механизм обмена без приглашений +// +// Возвращаемое значение: +// Булево +Функция ИспользуетсяОбменБезПриглашений() Экспорт + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | ИдентификаторЭДО + |ИЗ + | РегистрСведений.УчетныеЗаписиЭДО КАК УчетныеЗаписиЭДО + |ГДЕ + | НеИспользоватьПриглашения + |"; + + Возврат Не Запрос.Выполнить().Пустой(); + +КонецФункции + // Определяет, используется ли механизм ознакомления с электронными документами. // // Возвращаемое значение: diff --git a/Конфигурация/CommonModules/НастройкиЭДОКлиентСервер/Ext/Module.bsl b/Конфигурация/CommonModules/НастройкиЭДОКлиентСервер/Ext/Module.bsl index e143b237d..c68ebb3e7 100644 --- a/Конфигурация/CommonModules/НастройкиЭДОКлиентСервер/Ext/Module.bsl +++ b/Конфигурация/CommonModules/НастройкиЭДОКлиентСервер/Ext/Module.bsl @@ -29,6 +29,7 @@ // * Отправитель - Неопределено,ОпределяемыйТип.Организация // * Получатель - Неопределено,ОпределяемыйТип.УчастникЭДО // * Договор - Неопределено,ОпределяемыйТип.ДоговорСКонтрагентомЭДО +// * ВсегдаСоздаватьАвтоматическоеПриглашение - Булево // * ВидДокумента - СправочникСсылка.ВидыДокументовЭДО Функция НовыйКлючНастроекОтправки() Экспорт @@ -36,6 +37,7 @@ КлючНастроек.Вставить("Отправитель", Неопределено); КлючНастроек.Вставить("Получатель", Неопределено); КлючНастроек.Вставить("Договор", Неопределено); + КлючНастроек.Вставить("ВсегдаСоздаватьАвтоматическоеПриглашение", Ложь); КлючНастроек.Вставить("ВидДокумента", ПредопределенноеЗначение("Справочник.ВидыДокументовЭДО.ПустаяСсылка")); Возврат КлючНастроек; diff --git a/Конфигурация/CommonModules/НачалоРаботыСПрограммойКлиент/Ext/Module.bsl b/Конфигурация/CommonModules/НачалоРаботыСПрограммойКлиент/Ext/Module.bsl index 7770a6481..e7a63ac17 100644 --- a/Конфигурация/CommonModules/НачалоРаботыСПрограммойКлиент/Ext/Module.bsl +++ b/Конфигурация/CommonModules/НачалоРаботыСПрограммойКлиент/Ext/Module.bsl @@ -142,6 +142,10 @@ Результат.ДополнительныеПараметрыКоманднойСтроки = ДополнительныеПараметрыКоманднойСтроки; ЗавершитьРаботуСистемы(Ложь, Истина, ДополнительныеПараметрыКоманднойСтроки); + ИначеЕсли ПараметрыНачалаРаботы.ВключенИнтерфейс85 Тогда + + ЗавершитьРаботуСистемы(Ложь, Истина); + Иначе ОбновитьИнтерфейс(); diff --git a/Конфигурация/CommonModules/ОФДСервис/Ext/Module.bsl b/Конфигурация/CommonModules/ОФДСервис/Ext/Module.bsl index 00b922877..e36a904c0 100644 --- a/Конфигурация/CommonModules/ОФДСервис/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ОФДСервис/Ext/Module.bsl @@ -2261,11 +2261,16 @@ Функция ПрочитатьДанные_items(Знач ДанныеТоваровИзСервиса) ДанныеПоТоварам = Новый Массив; + НечитаемыеСимволы = НечитаемыеСимволы(); Для Каждого ДанныеПоТоваруИзСервиса Из ДанныеТоваровИзСервиса Цикл ДанныеТовара = Новый Структура; - ДанныеТовара.Вставить("Наименование", ДанныеПоТоваруИзСервиса.name); + ДанныеТовара.Вставить( + "Наименование", + УдалитьНечитаемыеСимволы( + ДанныеПоТоваруИзСервиса.name, + НечитаемыеСимволы)); ДанныеТовара.Вставить("Стоимость", ДанныеПоТоваруИзСервиса.price); ДанныеТовара.Вставить("Количество", ДанныеПоТоваруИзСервиса.quantity); ДанныеТовара.Вставить("Сумма", ДанныеПоТоваруИзСервиса.summ); @@ -2347,6 +2352,31 @@ КонецФункции +Функция УдалитьНечитаемыеСимволы(Знач ИсходнаяСтрока, Знач НечитаемыеСимволы) Экспорт + + Для Каждого НечитаемыйСимвол Из НечитаемыеСимволы Цикл + ИсходнаяСтрока = СтрЗаменить(ИсходнаяСтрока, НечитаемыйСимвол, ""); + КонецЦикла; + + Возврат ИсходнаяСтрока; + +КонецФункции + +Функция НечитаемыеСимволы() + + НечитаемыеСимволы = Новый Массив(); + + Для КодСимвола = 0 По 31 Цикл + Если КодСимвола = 9 Или КодСимвола = 10 Или КодСимвола = 13 Тогда + Продолжить; + КонецЕсли; + НечитаемыеСимволы.Добавить(Символ(КодСимвола)); + КонецЦикла; + + Возврат НечитаемыеСимволы; + +КонецФункции + #КонецОбласти #Область ВызовОперацииПолученияДанныхЧеков diff --git a/Конфигурация/CommonModules/ОблачныеКассыКлиентСервер/Ext/Module.bsl b/Конфигурация/CommonModules/ОблачныеКассыКлиентСервер/Ext/Module.bsl index 2d8d7c669..84750953c 100644 --- a/Конфигурация/CommonModules/ОблачныеКассыКлиентСервер/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ОблачныеКассыКлиентСервер/Ext/Module.bsl @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2024, ООО 1С-Софт +// Copyright (c) 2026, ООО 1С-Софт // Все права защищены. Эта программа и сопроводительные материалы предоставляются // в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) // Текст лицензии доступен по ссылке: @@ -199,4 +199,37 @@ #КонецОбласти +#Область ОбработкаСтрок + +// Удаляет нечитаемые символы из строки. +// +// Параметры: +// ИсходнаяСтрока - Строка - данные аутентификации, которые необходимо обработать. +// +// Возвращаемое значение: +// Строка - результат обработки. +// +Функция УдалитьНечитаемыеСимволы(Знач ИсходнаяСтрока) Экспорт + + НечитаемыеСимволы = Новый Массив(); + НечитаемыеСимволы.Добавить(Символы.ВК); + НечитаемыеСимволы.Добавить(Символы.ВТаб); + НечитаемыеСимволы.Добавить(Символы.НПП); + НечитаемыеСимволы.Добавить(Символы.ПС); + НечитаемыеСимволы.Добавить(Символы.ПФ); + НечитаемыеСимволы.Добавить(Символы.Таб); + НечитаемыеСимволы.Добавить(Символ(182)); // символ параграфа + НечитаемыеСимволы.Добавить(Символ(176)); // символ градуса + НечитаемыеСимволы.Добавить(" "); + + Для Каждого НечитаемыйСимвол Из НечитаемыеСимволы Цикл + ИсходнаяСтрока = СтрЗаменить(ИсходнаяСтрока, НечитаемыйСимвол, ""); + КонецЦикла; + + Возврат ИсходнаяСтрока; + +КонецФункции + +#КонецОбласти + #КонецОбласти \ No newline at end of file diff --git a/Конфигурация/CommonModules/ОблачныеКассыСлужебный/Ext/Module.bsl b/Конфигурация/CommonModules/ОблачныеКассыСлужебный/Ext/Module.bsl index 2436936fb..47a52cf7b 100644 --- a/Конфигурация/CommonModules/ОблачныеКассыСлужебный/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ОблачныеКассыСлужебный/Ext/Module.bsl @@ -49,6 +49,10 @@ Методы.Вставить("ДоступныеОблачныеКассы", Истина); + Если ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.БазоваяФункциональность") Тогда + Методы.Вставить("ЗагрузкаСтатусовОперацийОблачныхКасс"); + КонецЕсли; + КонецПроцедуры #КонецОбласти @@ -721,6 +725,16 @@ // Процедура СохранитьПараметрыАутентификации(НастройкаПодключения, ПараметрыАутентификации) Экспорт + // Обработка ошибки ввода данных аутентификации пользователем. + Для Каждого КлючЗначение Из ПараметрыАутентификации Цикл + Если ТипЗнч(КлючЗначение.Значение) = Тип("Строка") Тогда + ПараметрыАутентификации.Вставить( + КлючЗначение.Ключ, + ОблачныеКассыКлиентСервер.УдалитьНечитаемыеСимволы( + КлючЗначение.Значение)); + КонецЕсли; + КонецЦикла; + УстановитьПривилегированныйРежим(Истина); ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(НастройкаПодключения, ПараметрыАутентификации); УстановитьПривилегированныйРежим(Ложь); @@ -1191,8 +1205,10 @@ Если ПустаяСтрока(Результат.КодОшибки) Тогда ПозицияЧека = Новый Структура(); - ПозицияЧека.Вставить("operationId" , ИдентификаторОперации); - ПозицияЧека.Вставить("prepaymentOperationId", ИдентификаторПредоплаты); + ПозицияЧека.Вставить("operationId", ИдентификаторОперации); + Если Не ПустаяСтрока(ИдентификаторПредоплаты) Тогда + ПозицияЧека.Вставить("prepaymentOperationId", ИдентификаторПредоплаты); + КонецЕсли; ДанныеЗапроса = Новый Структура(); ДанныеЗапроса.Вставить("operationRequest", ПозицияЧека); diff --git a/Конфигурация/CommonModules/ОблачныйАрхив20/Ext/Module.bsl b/Конфигурация/CommonModules/ОблачныйАрхив20/Ext/Module.bsl index 77cd952ec..5fbfaf47c 100644 --- a/Конфигурация/CommonModules/ОблачныйАрхив20/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ОблачныйАрхив20/Ext/Module.bsl @@ -1369,17 +1369,14 @@ // Процедура ИнициализацияНастроекСкачатьДистрибутивАгента(URLДистрибутива, РезультатИнициализации, Контекст) - КаталогЗагрузки = ФайловаяСистема.СоздатьВременныйКаталог(); - ИмяФайлаОтвета = КаталогЗагрузки + "installAgent.exe"; - Заголовки = Новый Соответствие(); Заголовки.Вставить("X-Correlation-ID", Контекст.КонтекстСервиса.ИдентификаторОперации); ПараметрыЗапроса = Новый Структура(); - ПараметрыЗапроса.Вставить("Метод" , "GET"); - ПараметрыЗапроса.Вставить("Заголовки" , Заголовки); - ПараметрыЗапроса.Вставить("ИмяФайлаОтвета", ИмяФайлаОтвета); - ПараметрыЗапроса.Вставить("Таймаут" , 43200); + ПараметрыЗапроса.Вставить("Метод", "GET"); + ПараметрыЗапроса.Вставить("Заголовки", Заголовки); + ПараметрыЗапроса.Вставить("ИмяФайла", "installAgent.exe"); + ПараметрыЗапроса.Вставить("Таймаут", 43200); РезультатОперации = ИнтернетПоддержкаПользователей.ЗагрузитьСодержимоеИзИнтернет( URLДистрибутива @@ -1397,21 +1394,20 @@ ОбщегоНазначения.КодОсновногоЯзыка()), URLДистрибутива, Контекст.КонтекстСервиса.ИдентификаторОперации, - ИмяФайлаОтвета); + РезультатОперации.Содержимое); ЗаписатьИнформациюВЖурналРегистрации(ТекстИнформации); Если РезультатОперации.КодСостояния = 200 Тогда - ФайлДистрибутива = Новый Файл(ИмяФайлаОтвета); + ФайлДистрибутива = Новый Файл(РезультатОперации.Содержимое); Если ФайлДистрибутива.Существует() Тогда ИнициализацияНастроекУстановитьДистрибутивАгента( - КаталогЗагрузки, - ИмяФайлаОтвета, + РезультатОперации.Содержимое, РезультатИнициализации, Контекст); // Удаление временного каталога если файл дистрибутива Агента не заполнен Если РезультатИнициализации.ФайлДистрибутиваАгента = Неопределено Тогда - ФайловаяСистема.УдалитьВременныйКаталог(КаталогЗагрузки); + ФайловаяСистема.УдалитьВременныйФайл(РезультатОперации.Содержимое); КонецЕсли; Иначе @@ -1428,7 +1424,7 @@ |Дистрибутив: %3'"), URLДистрибутива, Контекст.КонтекстСервиса.ИдентификаторОперации, - ИмяФайлаОтвета); + РезультатОперации.Содержимое); ЗаписатьИнформациюВЖурналРегистрации(РезультатИнициализации.СообщениеТехподдержке, Истина); @@ -1475,13 +1471,11 @@ // Выполняет установку дистрибутива Агента облачного архива и запускает операцию по его проверке. // // Параметры: -// КаталогДистрибутива - Строка // ФайлДистрибутива - Строка - файл дистрибутива Агента. // РезультатИнициализации - см. ОблачныйАрхив20.ИнициализацияНастроекОблачногоАрхиваВФоне // Контекст - см. НовыйКонтекстИнициализацииНастроек // Процедура ИнициализацияНастроекУстановитьДистрибутивАгента( - КаталогДистрибутива, ФайлДистрибутива, РезультатИнициализации, Контекст) diff --git a/Конфигурация/CommonModules/ОбменДаннымиВЕТИС/Ext/Module.bsl b/Конфигурация/CommonModules/ОбменДаннымиВЕТИС/Ext/Module.bsl index 5786d95d7..053c16e72 100644 --- a/Конфигурация/CommonModules/ОбменДаннымиВЕТИС/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ОбменДаннымиВЕТИС/Ext/Module.bsl @@ -2178,7 +2178,7 @@ // См. СтандартныеПодсистемыСервер.ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод Процедура ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод(Методы) Экспорт - Методы.Вставить("ОбменДаннымиРегламентноеЗадание", Истина); + Методы.Вставить("ОбменДаннымиРегламентноеЗадание"); КонецПроцедуры diff --git a/Конфигурация/CommonModules/ОбменДаннымиВМоделиСервиса/Ext/Module.bsl b/Конфигурация/CommonModules/ОбменДаннымиВМоделиСервиса/Ext/Module.bsl index 4b454f50e..076bdc97a 100644 --- a/Конфигурация/CommonModules/ОбменДаннымиВМоделиСервиса/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ОбменДаннымиВМоделиСервиса/Ext/Module.bsl @@ -3009,8 +3009,10 @@ // См. СтандартныеПодсистемыСервер.ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод Процедура ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод(Методы) Экспорт - Методы.Вставить("ВыполнитьДействиеСценарияОбменаДаннымиВоВторойИнформационнойБазе", Истина); - Методы.Вставить("ВыполнитьДействиеСценарияОбменаДаннымиВПервойИнформационнойБазе", Истина); + Методы.Вставить("ВыполнитьДействиеСценарияОбменаДаннымиВоВторойИнформационнойБазе"); + Методы.Вставить("ВыполнитьДействиеСценарияОбменаДаннымиВПервойИнформационнойБазе"); + Методы.Вставить("ВыполнитьОбменДанными"); + Методы.Вставить("УстановитьПризнакИзмененияДанных"); КонецПроцедуры diff --git a/Конфигурация/CommonModules/ОбменДаннымиВебСервис/Ext/Module.bsl b/Конфигурация/CommonModules/ОбменДаннымиВебСервис/Ext/Module.bsl index 1e99f6487..44d116e7c 100644 --- a/Конфигурация/CommonModules/ОбменДаннымиВебСервис/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ОбменДаннымиВебСервис/Ext/Module.bsl @@ -33,105 +33,27 @@ ИменаФайлов = Новый Массив; - КаталогВременногоХранилищаФайлов = ОбменДаннымиСервер.КаталогВременногоХранилищаФайлов(); + КаталогСборки = СоздатьКаталогСборки(); - КаталогСборки = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(КаталогВременногоХранилищаФайлов, "{" + Строка(Новый УникальныйИдентификатор) + "}"); - СоздатьКаталог(КаталогСборки); + СтруктураНастроекОбмена = Неопределено; - ШаблонИмениФайла = "data.zip.[n]"; + ПротоколироватьНачалоЗагрузки(УзелИнформационнойБазы, КоличествоЧастей, СтруктураНастроекОбмена); - // Протоколирование событий обмена. - Если ЗначениеЗаполнено(УзелИнформационнойБазы) Тогда - - СтруктураНастроекОбмена = ОбменДаннымиСервер.НастройкиОбменаДляУзлаИнформационнойБазы( - УзелИнформационнойБазы, Перечисления.ДействияПриОбмене.ВыгрузкаДанных); - - СтруктураНастроекОбмена.КлючСообщенияЖурналаРегистрации = ОбменДаннымиСервер.КлючСообщенияЖурналаРегистрации( - УзелИнформационнойБазы, Перечисления.ДействияПриОбмене.ЗагрузкаДанных); - - Комментарий = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Начало получения сообщения обмена из Интернета (количество частей файла %1).'"), - Формат(КоличествоЧастей, "ЧН=0; ЧГ=0")); - - ОбменДаннымиСервер.ЗаписьЖурналаРегистрацииОбменаДанными(Комментарий, СтруктураНастроекОбмена); - - КонецЕсли; - - Для НомерЧасти = 1 По КоличествоЧастей Цикл - - ДанныеЧасти = Неопределено; // ДвоичныеДанные - - Попытка - ПолучитьЧастьФайла(Прокси, ИдентификаторСессии, НомерЧасти, ДанныеЧасти, ОбластьДанных); - Исключение - Прокси.ReleaseFile(ИдентификаторСессии); - ВызватьИсключение; - КонецПопытки; - - ИмяФайла = СтрЗаменить(ШаблонИмениФайла, "[n]", Формат(НомерЧасти, "ЧГ=0")); - ИмяФайлаЧасти = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(КаталогСборки, ИмяФайла); - - ДанныеЧасти.Записать(ИмяФайлаЧасти); - ИменаФайлов.Добавить(ИмяФайлаЧасти); - - КонецЦикла; - - ДанныеЧасти = Неопределено; + ПолучитьЧастиФайла(Прокси, ИдентификаторСессии, КоличествоЧастей, КаталогСборки, ИменаФайлов, ОбластьДанных); Прокси.ReleaseFile(ИдентификаторСессии); - ИмяАрхива = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(КаталогСборки, "data.zip"); - - ОбъединитьФайлы(ИменаФайлов, ИмяАрхива); + ИмяАрхива = СобратьАрхивИзЧастей(КаталогСборки, ИменаФайлов); - Разархиватор = Новый ЧтениеФайлаАрхива(ИмяАрхива); - Если Разархиватор.Элементы.Количество() = 0 Тогда - Попытка - УдалитьФайлы(КаталогСборки); - Исключение - ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииУдалениеВременногоФайла(), - УровеньЖурналаРегистрации.Ошибка,,, ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - КонецПопытки; - ВызватьИсключение(НСтр("ru = 'Файл архива не содержит данных.'")); - КонецЕсли; + ПроверитьВалидностьАрхива(ИмяАрхива, КаталогСборки); - // Протоколирование событий обмена. - ФайлАрхива = Новый Файл(ИмяАрхива); + ПротоколироватьОкончаниеЗагрузки(УзелИнформационнойБазы, ИмяАрхива, СтруктураНастроекОбмена); - Если ЗначениеЗаполнено(УзелИнформационнойБазы) Тогда + ИмяФайла = РаспаковатьАрхив(ИмяАрхива, КаталогСборки); + ИмяФайлаРезультата = ПереместитьФайлВХранилище(ИмяФайла); - Комментарий = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Окончание получения сообщения обмена из Интернета (размер сжатого сообщения обмена %1 Мб).'"), - Формат(Окр(ФайлАрхива.Размер() / 1024 / 1024, 3), "ЧН=0; ЧГ=0")); - - ОбменДаннымиСервер.ЗаписьЖурналаРегистрацииОбменаДанными(Комментарий, СтруктураНастроекОбмена); + УдалитьВременныеФайлыБезОшибок(КаталогСборки); - КонецЕсли; - - ЭлементАрхива = Разархиватор.Элементы.Получить(0); - ИмяФайла = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(КаталогСборки, ЭлементАрхива.Имя); - - Разархиватор.Извлечь(ЭлементАрхива, КаталогСборки); - Разархиватор.Закрыть(); - - Файл = Новый Файл(ИмяФайла); - - КаталогВременногоХранилищаФайлов = ОбменДаннымиСервер.КаталогВременногоХранилищаФайлов(); - - ВременныйКаталог = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(КаталогВременногоХранилищаФайлов, "{" + Строка(Новый УникальныйИдентификатор) + "}"); //АПК:441 удаление каталога происходит при получении данных обмена в другой ИБ - СоздатьКаталог(ВременныйКаталог); - - ИмяФайлаРезультата = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(ВременныйКаталог, Файл.Имя); - - ПереместитьФайл(ИмяФайла, ИмяФайлаРезультата); - - Попытка - УдалитьФайлы(КаталогСборки); - Исключение - ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииУдалениеВременногоФайла(), - УровеньЖурналаРегистрации.Ошибка,,, ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - КонецПопытки; - Возврат ИмяФайлаРезультата; КонецФункции @@ -1057,6 +979,225 @@ КонецФункции +// Создает временный каталог для сборки файла из частей в каталоге временного хранилища файлов +// +// Возвращаемое значение: +// Строка - путь к созданному каталогу +// +Функция СоздатьКаталогСборки() + + КаталогВременногоХранилищаФайлов = ОбменДаннымиСервер.КаталогВременногоХранилищаФайлов(); + КаталогСборки = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(КаталогВременногоХранилищаФайлов, "{" + Строка(Новый УникальныйИдентификатор) + "}"); + СоздатьКаталог(КаталогСборки); + + Возврат КаталогСборки; + +КонецФункции + +// Протоколирует начало загрузки файла из сервиса передачи файлов в журнал регистрации +// +// Параметры: +// УзелИнформационнойБазы - ПланОбменаСсылка - узел плана обмена, для которого выполняется загрузка. +// Если Неопределено, протоколирование не выполняется +// КоличествоЧастей - Число - количество частей, на которые разбит файл +// +Процедура ПротоколироватьНачалоЗагрузки(УзелИнформационнойБазы, КоличествоЧастей, СтруктураНастроекОбмена) + + Если НЕ ЗначениеЗаполнено(УзелИнформационнойБазы) Тогда + Возврат; + КонецЕсли; + + СтруктураНастроекОбмена = ОбменДаннымиСервер.НастройкиОбменаДляУзлаИнформационнойБазы( + УзелИнформационнойБазы, Перечисления.ДействияПриОбмене.ВыгрузкаДанных); + + СтруктураНастроекОбмена.КлючСообщенияЖурналаРегистрации = ОбменДаннымиСервер.КлючСообщенияЖурналаРегистрации( + УзелИнформационнойБазы, Перечисления.ДействияПриОбмене.ЗагрузкаДанных); + + Комментарий = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Начало получения сообщения обмена из Интернета (количество частей файла %1).'"), + Формат(КоличествоЧастей, "ЧН=0; ЧГ=0")); + + ОбменДаннымиСервер.ЗаписьЖурналаРегистрацииОбменаДанными(Комментарий, СтруктураНастроекОбмена); + +КонецПроцедуры + +// Получает все части файла из сервиса передачи файлов и сохраняет их в указанный каталог +// +// Параметры: +// Прокси - WSПрокси - прокси для работы с сервисом передачи файлов +// ИдентификаторСессии - УникальныйИдентификатор - идентификатор сессии получения файла +// КоличествоЧастей - Число - количество частей файла для получения +// КаталогСборки - Строка - каталог для сохранения полученных частей +// ИменаФайлов - Массив из Строка - массив для добавления имен полученных файлов (заполняется) +// ОбластьДанных - Число - область данных +// +Процедура ПолучитьЧастиФайла(Прокси, ИдентификаторСессии, КоличествоЧастей, КаталогСборки, ИменаФайлов, ОбластьДанных) + + ШаблонИмениФайла = "data.zip.[n]"; + + Для НомерЧасти = 1 По КоличествоЧастей Цикл + + ДанныеЧасти = Неопределено; + + Попытка + ПолучитьЧастьФайла(Прокси, ИдентификаторСессии, НомерЧасти, ДанныеЧасти, ОбластьДанных); + Исключение + Прокси.ReleaseFile(ИдентификаторСессии); + ВызватьИсключение; + КонецПопытки; + + ИмяФайлаЧасти = ПолучитьИмяФайлаЧасти(КаталогСборки, ШаблонИмениФайла, НомерЧасти); + + ДанныеЧасти.Записать(ИмяФайлаЧасти); + ИменаФайлов.Добавить(ИмяФайлаЧасти); + + КонецЦикла; + + ДанныеЧасти = Неопределено; + +КонецПроцедуры + +// Формирует полное имя файла части по шаблону и номеру части +// +// Параметры: +// КаталогСборки - Строка - каталог для размещения файла +// ШаблонИмениФайла - Строка - шаблон имени файла с плейсхолдером [n] +// НомерЧасти - Число - номер части файла +// +// Возвращаемое значение: +// Строка - полное имя файла части +// +Функция ПолучитьИмяФайлаЧасти(КаталогСборки, ШаблонИмениФайла, НомерЧасти) + + ИмяФайла = СтрЗаменить(ШаблонИмениФайла, "[n]", Формат(НомерЧасти, "ЧГ=0")); + ИмяФайлаЧасти = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(КаталогСборки, ИмяФайла); + + Возврат ИмяФайлаЧасти; + +КонецФункции + +// Объединяет части файлов в единый архив в указанном каталоге +// +// Параметры: +// КаталогСборки - Строка - каталог, содержащий части файлов +// ИменаФайлов - Массив из Строка - массив полных имен файлов частей для объединения +// +// Возвращаемое значение: +// Строка - полное имя созданного архива +// +Функция СобратьАрхивИзЧастей(КаталогСборки, ИменаФайлов) + + ИмяАрхива = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(КаталогСборки, "data.zip"); + ОбъединитьФайлы(ИменаФайлов, ИмяАрхива); + + Возврат ИмяАрхива; + +КонецФункции + +// Проверяет валидность архива и выбрасывает исключение, если архив пуст +// +// Параметры: +// ИмяАрхива - Строка - полное имя проверяемого архива +// КаталогСборки - Строка - каталог для удаления при ошибке +// +Процедура ПроверитьВалидностьАрхива(ИмяАрхива, КаталогСборки) + + Разархиватор = Новый ЧтениеФайлаАрхива(ИмяАрхива); + + Если Разархиватор.Элементы.Количество() = 0 Тогда + УдалитьВременныеФайлыБезОшибок(КаталогСборки); + ВызватьИсключение(НСтр("ru = 'Файл архива не содержит данных.'")); + КонецЕсли; + + Разархиватор.Закрыть(); + +КонецПроцедуры + +// Протоколирует окончание загрузки файла из сервиса передачи файлов в журнал регистрации +// +// Параметры: +// УзелИнформационнойБазы - ПланОбменаСсылка - узел плана обмена, для которого выполняется загрузка. +// Если Неопределено, протоколирование не выполняется +// ИмяАрхива - Строка - полное имя архива для определения размера +// +Процедура ПротоколироватьОкончаниеЗагрузки(УзелИнформационнойБазы, ИмяАрхива, СтруктураНастроекОбмена) + + Если НЕ ЗначениеЗаполнено(УзелИнформационнойБазы) Тогда + Возврат; + КонецЕсли; + + ФайлАрхива = Новый Файл(ИмяАрхива); + Комментарий = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Окончание получения сообщения обмена из Интернета (размер сжатого сообщения обмена %1 Мб).'"), + Формат(Окр(ФайлАрхива.Размер() / 1024 / 1024, 3), "ЧН=0; ЧГ=0")); + + ОбменДаннымиСервер.ЗаписьЖурналаРегистрацииОбменаДанными(Комментарий, СтруктураНастроекОбмена); + +КонецПроцедуры + +// Распаковывает архив и возвращает имя первого извлеченного файла +// +// Параметры: +// ИмяАрхива - Строка - полное имя архива для распаковки +// КаталогСборки - Строка - каталог для распаковки +// +// Возвращаемое значение: +// Строка - полное имя распакованного файла +// +Функция РаспаковатьАрхив(ИмяАрхива, КаталогСборки) + + Разархиватор = Новый ЧтениеФайлаАрхива(ИмяАрхива); + + ЭлементАрхива = Разархиватор.Элементы.Получить(0); + ИмяФайла = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(КаталогСборки, ЭлементАрхива.Имя); + + Разархиватор.Извлечь(ЭлементАрхива, КаталогСборки); + Разархиватор.Закрыть(); + + Возврат ИмяФайла; + +КонецФункции + +// Перемещает файл в каталог временного хранилища файлов и возвращает новое имя +// +// Параметры: +// ИмяФайла - Строка - полное имя исходного файла для перемещения +// +// Возвращаемое значение: +// Строка - полное имя файла в временном хранилище +// +Функция ПереместитьФайлВХранилище(ИмяФайла) + + Файл = Новый Файл(ИмяФайла); + + КаталогВременногоХранилищаФайлов = ОбменДаннымиСервер.КаталогВременногоХранилищаФайлов(); + ВременныйКаталог = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(КаталогВременногоХранилищаФайлов, "{" + Строка(Новый УникальныйИдентификатор) + "}"); + + СоздатьКаталог(ВременныйКаталог); + ИмяФайлаРезультата = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(ВременныйКаталог, Файл.Имя); + + ПереместитьФайл(ИмяФайла, ИмяФайлаРезультата); + + Возврат ИмяФайлаРезультата; + +КонецФункции + +// Безопасно удаляет временные файлы и каталоги с обработкой ошибок +// +// Параметры: +// Каталог - Строка - полный путь к удаляемому каталогу +// +Процедура УдалитьВременныеФайлыБезОшибок(Каталог) + + Попытка + УдалитьФайлы(Каталог); + Исключение + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииУдалениеВременногоФайла(), + УровеньЖурналаРегистрации.Ошибка,,, ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + +КонецПроцедуры + // См. СтандартныеПодсистемыСервер.ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод Процедура ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод(Методы) Экспорт diff --git a/Конфигурация/CommonModules/ОбменДаннымиВнутренняяПубликация/Ext/Module.bsl b/Конфигурация/CommonModules/ОбменДаннымиВнутренняяПубликация/Ext/Module.bsl index b74c91d6e..7d6213000 100644 --- a/Конфигурация/CommonModules/ОбменДаннымиВнутренняяПубликация/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ОбменДаннымиВнутренняяПубликация/Ext/Module.bsl @@ -2097,6 +2097,16 @@ КонецФункции +// См. СтандартныеПодсистемыСервер.ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод +Процедура ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод(Методы) Экспорт + + Методы.Вставить("ВыполнитьВыгрузкуДляУзлаИнформационнойБазыВСервисПередачиФайлов"); + Методы.Вставить("ВыполнитьЗагрузкуДляУзлаИнформационнойБазыИзСервисаПередачиФайлов"); + Методы.Вставить("ВыполнитьОчередьЗадач"); + Методы.Вставить("ВыполнитьОбменДаннымиПоСценарию"); + +КонецПроцедуры + #КонецОбласти #КонецОбласти diff --git a/Конфигурация/CommonModules/ОбменДаннымиЕГАИС/Ext/Module.bsl b/Конфигурация/CommonModules/ОбменДаннымиЕГАИС/Ext/Module.bsl index ccd41da0a..a2e1ad37d 100644 --- a/Конфигурация/CommonModules/ОбменДаннымиЕГАИС/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ОбменДаннымиЕГАИС/Ext/Module.bsl @@ -634,6 +634,9 @@ НСтр("ru = 'Получение отчета ""Остатки в регистре №3 в мл (Общепит)""'")); // -УОП + ПолучениеДанных.Вставить( + Перечисления.ВидыДокументовЕГАИС.ОтветНаЗапросОтчетаОстаткиПоВскрытымБутылкам, + НСтр("ru = 'Получение отчета ""Остатки по вскрытым бутылкам""'")); ПолучениеДанных.Вставить( Перечисления.ВидыДокументовЕГАИС.ОтветНаЗапросОтчетаИсторияСправок2, НСтр("ru = 'Получение отчета ""История справок 2""'")); @@ -1557,7 +1560,7 @@ // См. СтандартныеПодсистемыСервер.ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод Процедура ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод(Методы) Экспорт - Методы.Вставить("ЗапуститьОбработкуОтветовЕГАИС", Истина); + Методы.Вставить("ЗапуститьОбработкуОтветовЕГАИС"); КонецПроцедуры diff --git a/Конфигурация/CommonModules/ОбменДаннымиЗЕРНО/Ext/Module.bsl b/Конфигурация/CommonModules/ОбменДаннымиЗЕРНО/Ext/Module.bsl index ca2906e16..782fa07b0 100644 --- a/Конфигурация/CommonModules/ОбменДаннымиЗЕРНО/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ОбменДаннымиЗЕРНО/Ext/Module.bsl @@ -30,7 +30,7 @@ // См. СтандартныеПодсистемыСервер.ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод Процедура ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод(Методы) Экспорт - Методы.Вставить("ОбменДаннымиРегламентноеЗадание", Истина); + Методы.Вставить("ОбменДаннымиРегламентноеЗадание"); КонецПроцедуры diff --git a/Конфигурация/CommonModules/ОбменДаннымиОперацииВебСервисов/Ext/Module.bsl b/Конфигурация/CommonModules/ОбменДаннымиОперацииВебСервисов/Ext/Module.bsl index ab9523782..6c6a415d4 100644 --- a/Конфигурация/CommonModules/ОбменДаннымиОперацииВебСервисов/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ОбменДаннымиОперацииВебСервисов/Ext/Module.bsl @@ -402,6 +402,11 @@ КонецЕсли; ИмяФайлаЧасти = ИменаФайлов[0].ПолноеИмя; + + Если ОбменДаннымиСлужебный.ПутьКФайлуСодержитНедопустимыеСимволы(ИмяФайлаЧасти) Тогда + ВызватьИсключение НСтр("ru = 'Недопустимое имя файла.'"); + КонецЕсли; + ДанныеЧасти = Новый ДвоичныеДанные(ИмяФайлаЧасти); ВыйтиИзОбластиДанных(Область); diff --git a/Конфигурация/CommonModules/ОбменДаннымиСАТУРН/Ext/Module.bsl b/Конфигурация/CommonModules/ОбменДаннымиСАТУРН/Ext/Module.bsl index 2998b5689..9adce059c 100644 --- a/Конфигурация/CommonModules/ОбменДаннымиСАТУРН/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ОбменДаннымиСАТУРН/Ext/Module.bsl @@ -30,7 +30,7 @@ // См. СтандартныеПодсистемыСервер.ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод Процедура ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод(Методы) Экспорт - Методы.Вставить("ОбменДаннымиРегламентноеЗадание", Истина); + Методы.Вставить("ОбменДаннымиРегламентноеЗадание"); КонецПроцедуры diff --git a/Конфигурация/CommonModules/ОбменДаннымиСервер/Ext/Module.bsl b/Конфигурация/CommonModules/ОбменДаннымиСервер/Ext/Module.bsl index bb49dd82d..fc808da7c 100644 --- a/Конфигурация/CommonModules/ОбменДаннымиСервер/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ОбменДаннымиСервер/Ext/Module.bsl @@ -1536,118 +1536,28 @@ // Выполняет загрузку приоритетных данных, полученных из главного узла РИБ. Процедура ЗагрузитьПриоритетныеДанныеВПодчиненныйУзелРИБ(Отказ = Ложь) Экспорт - Если ОбменДаннымиСлужебный.РежимЗагрузкиСообщенияОбменаДаннымиПередЗапуском( - "ПропуститьЗагрузкуСообщенияОбменаДаннымиПередЗапуском") Тогда - Возврат; - КонецЕсли; + ПропуститьЗагрузкуПриоритетныхДанных(); - Если ОбменДаннымиСлужебный.РежимЗагрузкиСообщенияОбменаДаннымиПередЗапуском( - "ПропуститьЗагрузкуПриоритетныхДанныхПередЗапуском") Тогда - Возврат; - КонецЕсли; - - УстановитьПривилегированныйРежим(Истина); - УстановитьРежимЗагрузкиСообщенияОбменаДаннымиПередЗапуском("ЗагрузкаРазрешена", Истина); - УстановитьПривилегированныйРежим(Ложь); + ВключитьОтключитьРежимЗагрузки(Истина); Попытка - Если НЕ ПолучитьФункциональнуюОпцию("ИспользоватьСинхронизациюДанных") Тогда - - Если ОбщегоНазначения.РазделениеВключено() Тогда - - ИспользоватьСинхронизациюДанных = Константы.ИспользоватьСинхронизациюДанных.СоздатьМенеджерЗначения(); - ИспользоватьСинхронизациюДанных.ДополнительныеСвойства.Вставить("ОтключитьМеханизмРегистрацииОбъектов"); - ИспользоватьСинхронизациюДанных.ОбменДанными.Загрузка = Истина; - ИспользоватьСинхронизациюДанных.Значение = Истина; - ИспользоватьСинхронизациюДанных.Записать(); - - Иначе - - Если ПолучитьИспользуемыеПланыОбмена().Количество() > 0 Тогда - - ИспользоватьСинхронизациюДанных = Константы.ИспользоватьСинхронизациюДанных.СоздатьМенеджерЗначения(); - ИспользоватьСинхронизациюДанных.ДополнительныеСвойства.Вставить("ОтключитьМеханизмРегистрацииОбъектов"); - ИспользоватьСинхронизациюДанных.ОбменДанными.Загрузка = Истина; - ИспользоватьСинхронизациюДанных.Значение = Истина; - ИспользоватьСинхронизациюДанных.Записать(); - - КонецЕсли; - - КонецЕсли; - - КонецЕсли; + ВключитьСинхронизациюДанныхПриНеобходимости(); Если ПолучитьФункциональнуюОпцию("ИспользоватьСинхронизациюДанных") Тогда - УзелИнформационнойБазы = ГлавныйУзел(); - - Если УзелИнформационнойБазы <> Неопределено Тогда - - ИдентификаторТранспорта = ТранспортСообщенийОбмена.ТранспортПоУмолчанию(УзелИнформационнойБазы); - - ИмяПараметра = "СтандартныеПодсистемы.ОбменДанными.ПравилаРегистрации." - + ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(УзелИнформационнойБазы); - ПравилаРегистрацииОбновлены = СтандартныеПодсистемыСервер.ПараметрРаботыПрограммы(ИмяПараметра); - Если ПравилаРегистрацииОбновлены = Неопределено Тогда - ВыполнитьОбновлениеПравилДляОбменаДанными(); - КонецЕсли; - ПравилаРегистрацииОбновлены = СтандартныеПодсистемыСервер.ПараметрРаботыПрограммы(ИмяПараметра); - Если ПравилаРегистрацииОбновлены = Неопределено Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не выполнено обновление кэша правил регистрации данных для плана обмена ""%1""'"), - ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(УзелИнформационнойБазы)); - КонецЕсли; - - // Загрузка только параметров работы программы. - ПараметрыОбмена = ПараметрыОбмена(); - ПараметрыОбмена.ИдентификаторТранспорта = ИдентификаторТранспорта; - ПараметрыОбмена.ВыполнятьЗагрузку = Истина; - ПараметрыОбмена.ВыполнятьВыгрузку = Ложь; - ПараметрыОбмена.ТолькоПараметры = Истина; - ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы(УзелИнформационнойБазы, ПараметрыОбмена, Отказ); - - КонецЕсли; + ВыполнитьЗагрузкуПараметровГлавногоУзла(Отказ); КонецЕсли; Исключение - УстановитьПривилегированныйРежим(Истина); - УстановитьРежимЗагрузкиСообщенияОбменаДаннымиПередЗапуском("ЗагрузкаРазрешена", Ложь); - УстановитьПривилегированныйРежим(Ложь); - - ВключитьПовторениеЗагрузкиСообщенияОбменаДаннымиПередЗапуском(); - - ЗаписьЖурналаРегистрации( - НСтр("ru = 'Обмен данными.Загрузка приоритетных данных'", ОбщегоНазначения.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Ошибка,,, - ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - - ВызватьИсключение - НСтр("ru = 'Ошибка загрузки приоритетных данных из сообщения обмена. - |См. подробности в журнале регистрации.'"); + ОбработатьОшибкуЗагрузки(); + ВызватьИсключение; КонецПопытки; - УстановитьПривилегированныйРежим(Истина); - УстановитьРежимЗагрузкиСообщенияОбменаДаннымиПередЗапуском("ЗагрузкаРазрешена", Ложь); - УстановитьПривилегированныйРежим(Ложь); - Если Отказ Тогда - - Если КонфигурацияИзменена() Тогда - ВызватьИсключение - НСтр("ru = 'Загружены изменения программы, полученные из главного узла. - |Завершите работу программы. Откройте программу в конфигураторе - |и выполните команду ""Обновить конфигурацию базы данных (F7)"". - | - |После этого запустите программу.'"); - КонецЕсли; - - ВключитьПовторениеЗагрузкиСообщенияОбменаДаннымиПередЗапуском(); - - ВызватьИсключение - НСтр("ru = 'Ошибка загрузки приоритетных данных из сообщения обмена. - |См. подробности в журнале регистрации.'"); - КонецЕсли; + ВключитьОтключитьРежимЗагрузки(Ложь); + + ПроверитьИОбработатьОтказ(Отказ); КонецПроцедуры @@ -5908,6 +5818,10 @@ КонецЕсли; + Если ОбменДаннымиСлужебный.ПутьКФайлуСодержитНедопустимыеСимволы(ИмяФайла) Тогда + ВызватьИсключение НСтр("ru = 'Недопустимое имя файла.'"); + КонецЕсли; + Если ПассивныйРежимФайловаяИБ Тогда ПолноеИмяФайла = ПолноеИмяФайлаДляСопоставленияФайловаяИБ(ИмяФайла); Иначе @@ -8074,14 +7988,38 @@ // возвращаемое значение МассивПлановОбмена = Новый Массив; - Для Каждого ИмяПланаОбмена Из ОбменДаннымиПовтИсп.ПланыОбменаБСП() Цикл - - Если Не ПланОбменаНеСодержитУзлов(ИмяПланаОбмена) Тогда - - МассивПлановОбмена.Добавить(ИмяПланаОбмена); - - КонецЕсли; + ПланыОбменаБСП = ОбменДаннымиПовтИсп.ПланыОбменаБСП(); + + Если Не ПланыОбменаБСП.Количество() Тогда + Возврат МассивПлановОбмена; + КонецЕсли; + + ТекстЗапроса = ""; + Разделитель = ""; + + Для Каждого ИмяПланаОбмена Из ПланыОбменаБСП Цикл + ТекстЗапроса = ТекстЗапроса + Разделитель + + "ВЫБРАТЬ ПЕРВЫЕ 1" + + Символы.Таб + """" + ИмяПланаОбмена + """ КАК ИмяПланаОбмена" + + Символы.ПС + "ИЗ" + + Символы.Таб + "ПланОбмена." + ИмяПланаОбмена + " КАК ПланОбмена" + + Символы.ПС + "ГДЕ" + + Символы.Таб + "НЕ ПланОбмена.ЭтотУзел"; + Разделитель = Символы.ПС + Символы.ПС + "ОБЪЕДИНИТЬ ВСЕ" + Символы.ПС + Символы.ПС; + КонецЦикла; + + Запрос = Новый Запрос(ТекстЗапроса); + РезультатЗапроса = Запрос.Выполнить(); + + Если РезультатЗапроса.Пустой() Тогда + Возврат МассивПлановОбмена; + КонецЕсли; + + Выборка = РезультатЗапроса.Выбрать(); + + Пока Выборка.Следующий() Цикл + МассивПлановОбмена.Добавить(Выборка.ИмяПланаОбмена); КонецЦикла; Возврат МассивПлановОбмена; @@ -8201,22 +8139,6 @@ КонецФункции -Функция ПланОбменаНеСодержитУзлов(Знач ИмяПланаОбмена) - - Запрос = Новый Запрос( - "ВЫБРАТЬ ПЕРВЫЕ 1 - | ИСТИНА - |ИЗ - | #ИмяТаблицыПланаОбмена КАК ПланОбмена - |ГДЕ - | НЕ ПланОбмена.ЭтотУзел"); - - Запрос.Текст = СтрЗаменить(Запрос.Текст, "#ИмяТаблицыПланаОбмена", "ПланОбмена." + ИмяПланаОбмена); - - Возврат Запрос.Выполнить().Пустой(); - -КонецФункции - Процедура ЗаполнитьЗначенияСвойствДляТаблицыЗначенийПРО(ТаблицаПриемник, ТаблицаИсточник) Для Каждого СтрокаИсточника Из ТаблицаИсточник Цикл @@ -9330,6 +9252,10 @@ Возврат; КонецЕсли; + Если ОбменДаннымиСлужебный.ПутьКФайлуСодержитНедопустимыеСимволы(СообщениеОбмена) Тогда + ВызватьИсключение НСтр("ru = 'Недопустимое имя файла.'"); + КонецЕсли; + Если ЭтоПодчиненныйУзелРИБ() И ТипЗнч(ГлавныйУзел()) = ТипЗнч(Получатель) Тогда @@ -9387,6 +9313,10 @@ Если ТипСтруктура Или ТипЗнч(СтароеСообщение) = Тип("ДвоичныеДанные") Тогда Если ТипСтруктура Тогда + Если ОбменДаннымиСлужебный.ПутьКФайлуСодержитНедопустимыеСимволы(СтароеСообщение.ПутьКФайлу) Тогда + ВызватьИсключение НСтр("ru = 'Недопустимое имя файла.'"); + КонецЕсли; + СтароеСообщение = Новый ДвоичныеДанные(СтароеСообщение.ПутьКФайлу); КонецЕсли; @@ -13454,7 +13384,7 @@ Запрос = Новый Запрос; Запрос.Текст = - "ВЫБРАТЬ + "ВЫБРАТЬ | АрхивСообщенийОбменовСрезПоследних.ПолноеИмяФайла КАК ПолноеИмяФайла, | АрхивСообщенийОбменовСрезПоследних.Хранилище КАК Хранилище, | АрхивСообщенийОбменовСрезПоследних.РасширениеФайла КАК РасширениеФайла @@ -13473,9 +13403,13 @@ Выборка.Следующий(); Если ЗначениеЗаполнено(Выборка.ПолноеИмяФайла) Тогда + Если ОбменДаннымиСлужебный.ПутьКФайлуСодержитНедопустимыеСимволы(Выборка.ПолноеИмяФайла) Тогда + ВызватьИсключение НСтр("ru = 'Недопустимое имя файла.'"); + КонецЕсли; + Если Выборка.РасширениеФайла = "zip" Тогда УстановитьСообщениеОбменаИзАрхива(Выборка.ПолноеИмяФайла, УзелИнформационнойБазы); - Иначе + Иначе ДвоичныеДанныеАрхива = Новый ДвоичныеДанные(Выборка.ПолноеИмяФайла); УстановитьСообщениеОбменаДаннымиИзГлавногоУзла(ДвоичныеДанныеАрхива, УзелИнформационнойБазы); КонецЕсли; @@ -13546,9 +13480,135 @@ Методы.Вставить("ЗарегистрироватьВсеДанныеКромеСправочниковДляНачальнойВыгрузкиВФоне", Истина); Методы.Вставить("ИнтерактивноеИзменениеВыгрузки_СформироватьДеревоЗначений", Истина); Методы.Вставить("ИнтерактивноеИзменениеВыгрузки_СформироватьТабличныйДокументПользователя", Истина); + Методы.Вставить("ВыполнитьОбменДаннымиСВнешнейСистемой"); + Методы.Вставить("ВыполнитьОбменДаннымиПоРегламентномуЗаданию"); КонецПроцедуры +Функция ПропуститьЗагрузкуПриоритетныхДанных() + + Если ОбменДаннымиСлужебный.РежимЗагрузкиСообщенияОбменаДаннымиПередЗапуском( + "ПропуститьЗагрузкуСообщенияОбменаДаннымиПередЗапуском") Тогда + Возврат Истина; + КонецЕсли; + + Если ОбменДаннымиСлужебный.РежимЗагрузкиСообщенияОбменаДаннымиПередЗапуском( + "ПропуститьЗагрузкуПриоритетныхДанныхПередЗапуском") Тогда + Возврат Истина; + КонецЕсли; + + Возврат Ложь; + +КонецФункции + +Процедура ВключитьСинхронизациюДанныхПриНеобходимости() + + Если ПолучитьФункциональнуюОпцию("ИспользоватьСинхронизациюДанных") Тогда + Возврат; + КонецЕсли; + + Если ОбщегоНазначения.РазделениеВключено() Или + ПолучитьИспользуемыеПланыОбмена().Количество() Тогда + + ВключитьСинхронизациюДанных(); + + КонецЕсли; + +КонецПроцедуры + +Процедура ВключитьСинхронизациюДанных() + + ИспользоватьСинхронизациюДанных = Константы.ИспользоватьСинхронизациюДанных.СоздатьМенеджерЗначения(); + ИспользоватьСинхронизациюДанных.ДополнительныеСвойства.Вставить("ОтключитьМеханизмРегистрацииОбъектов"); + ИспользоватьСинхронизациюДанных.ОбменДанными.Загрузка = Истина; + ИспользоватьСинхронизациюДанных.Значение = Истина; + ИспользоватьСинхронизациюДанных.Записать(); + +КонецПроцедуры + +Процедура ВыполнитьЗагрузкуПараметровГлавногоУзла(Отказ) + + УзелИнформационнойБазы = ГлавныйУзел(); + + Если УзелИнформационнойБазы = Неопределено Тогда + Возврат; + КонецЕсли; + + ИдентификаторТранспорта = ТранспортСообщенийОбмена.ТранспортПоУмолчанию(УзелИнформационнойБазы); + ОбновитьПравилаРегистрацииДляУзла(УзелИнформационнойБазы); + + ПараметрыОбмена = ПараметрыОбмена(); + ПараметрыОбмена.ИдентификаторТранспорта = ИдентификаторТранспорта; + ПараметрыОбмена.ВыполнятьЗагрузку = Истина; + ПараметрыОбмена.ВыполнятьВыгрузку = Ложь; + ПараметрыОбмена.ТолькоПараметры = Истина; + + ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы(УзелИнформационнойБазы, ПараметрыОбмена, Отказ); + +КонецПроцедуры + +Процедура ОбновитьПравилаРегистрацииДляУзла(УзелИнформационнойБазы) + + ИмяПараметра = "СтандартныеПодсистемы.ОбменДанными.ПравилаРегистрации." + + ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(УзелИнформационнойБазы); + ПравилаРегистрацииОбновлены = СтандартныеПодсистемыСервер.ПараметрРаботыПрограммы(ИмяПараметра); + + Если ПравилаРегистрацииОбновлены = Неопределено Тогда + ВыполнитьОбновлениеПравилДляОбменаДанными(); + КонецЕсли; + + ПравилаРегистрацииОбновлены = СтандартныеПодсистемыСервер.ПараметрРаботыПрограммы(ИмяПараметра); + Если ПравилаРегистрацииОбновлены = Неопределено Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не выполнено обновление кэша правил регистрации данных для плана обмена ""%1""'"), + ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(УзелИнформационнойБазы)); + КонецЕсли; + +КонецПроцедуры + +Процедура ОбработатьОшибкуЗагрузки() + + ВключитьОтключитьРежимЗагрузки(Ложь); + ВключитьПовторениеЗагрузкиСообщенияОбменаДаннымиПередЗапуском(); + + ЗаписьЖурналаРегистрации( + НСтр("ru = 'Обмен данными.Загрузка приоритетных данных'", ОбщегоНазначения.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка,,, + ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + +КонецПроцедуры + +Процедура ВключитьОтключитьРежимЗагрузки(ПризнакРежимаЗагрузки) + + УстановитьПривилегированныйРежим(Истина); + УстановитьРежимЗагрузкиСообщенияОбменаДаннымиПередЗапуском("ЗагрузкаРазрешена", ПризнакРежимаЗагрузки); + УстановитьПривилегированныйРежим(Ложь); + +КонецПроцедуры + +Процедура ПроверитьИОбработатьОтказ(Отказ) + + Если Не Отказ Тогда + Возврат; + КонецЕсли; + + Если КонфигурацияИзменена() Тогда + ВызватьИсключение + НСтр("ru = 'Загружены изменения программы, полученные из главного узла. + |Завершите работу программы. Откройте программу в конфигураторе + |и выполните команду ""Обновить конфигурацию базы данных (F7)"". + | + |После этого запустите программу.'"); + КонецЕсли; + + ВключитьПовторениеЗагрузкиСообщенияОбменаДаннымиПередЗапуском(); + + ВызватьИсключение + НСтр("ru = 'Ошибка загрузки приоритетных данных из сообщения обмена. + |См. подробности в журнале регистрации.'"); + +КонецПроцедуры + #КонецОбласти #КонецОбласти diff --git a/Конфигурация/CommonModules/ОбменДаннымиСлужебный/Ext/Module.bsl b/Конфигурация/CommonModules/ОбменДаннымиСлужебный/Ext/Module.bsl index 75d0ae4ef..913faefbd 100644 --- a/Конфигурация/CommonModules/ОбменДаннымиСлужебный/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ОбменДаннымиСлужебный/Ext/Module.bsl @@ -608,6 +608,10 @@ // Строка - Всегда пустая строка // Функция ЗагрузитьЧастьФайла(ИдентификаторФайла, НомерЗагружаемойЧастиФайла, ЗагружаемаяЧастьФайла, СообщениеОбОшибке) Экспорт + + Если ПутьКФайлуСодержитНедопустимыеСимволы(ИдентификаторФайла) Тогда + ВызватьИсключение НСтр("ru = 'Недопустимое имя файла.'"); + КонецЕсли; СообщениеОбОшибке = ""; @@ -643,6 +647,11 @@ КонецФункции Функция ВыгрузитьЧастьФайла(ИдентификаторФайла, НомерВыгружаемойЧастиФайла, СообщениеОбОшибке) Экспорт + + Если ПутьКФайлуСодержитНедопустимыеСимволы(ИдентификаторФайла) Тогда + СообщениеОбОшибке = НСтр("ru = 'Недопустимое имя файла.'"); + Возврат Неопределено; + КонецЕсли; СообщениеОбОшибке = ""; ИмяЧастиФайла = ""; diff --git a/Конфигурация/CommonModules/ОбменСБанками/Ext/Module.bsl b/Конфигурация/CommonModules/ОбменСБанками/Ext/Module.bsl index 23d0fc431..f953de147 100644 --- a/Конфигурация/CommonModules/ОбменСБанками/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ОбменСБанками/Ext/Module.bsl @@ -432,6 +432,144 @@ КонецФункции +// Производит поиск настройки обмена с банком по заданному отбору. Возвращает первую найденную настройку обмена. +// +// Параметры: +// ПараметрыОтбора - см. ОбменСБанкамиКлиентСервер.НовыеПараметрыОтбораНастройкиОбмена +// +// Возвращаемое значение: +// СправочникСсылка.НастройкиОбменСБанками, Неопределено - найденная настройка обмена с банком. +// +Функция НастройкаОбменаПоОтбору(ПараметрыОтбора) Экспорт + + Возврат ОбменСБанкамиСлужебный.НастройкаОбменаПоОтбору(ПараметрыОтбора); + +КонецФункции + +// Определяет интеграторов, доступных для обмена банковской выписки и проверяет наличие +// банковского счета для указанной организации. +// +// Параметры: +// Организация - ОпределяемыйТип.Организация - организация, для которой выполняется проверка настроек. +// Банк - ОпределяемыйТип.БанкОбменСБанками - банк, для которого выполняется поиск интеграторов. +// +// Возвращаемое значение: +// ТаблицаЗначений: +// * Банк - ОпределяемыйТип.БанкОбменСБанками - ссылка на интегратор, для которого есть активная настройка +// и хотя один банковский счет у организации. +// * Наименование - Строка - наименование интегратора. +// +Функция ИнтеграторыБанковскойВыписки(Организация, Банк) Экспорт + + Интеграторы = Новый ТаблицаЗначений; + Интеграторы.Колонки.Добавить("Банк", Метаданные.ОпределяемыеТипы.БанкОбменСБанками.Тип); + Интеграторы.Колонки.Добавить("Наименование", ОбщегоНазначения.ОписаниеТипаСтрока(150)); + + НастройкиИнтегратораИзМакета = ОбменСБанкамиСлужебный.НастройкиИнтеграторовИзМакета(); + БИКБанка = ОбменСБанкамиСлужебный.БИК(Банк); + + НомераИнтеграторов = Новый Массив; + Для Каждого КлючИЗначение Из НастройкиИнтегратораИзМакета.БанкиИИдентификаторыИнтеграторов Цикл + Индекс = КлючИЗначение.Значение.Найти(БИКБанка); + Если Индекс <> Неопределено Тогда + НомераИнтеграторов.Добавить(КлючИЗначение.Ключ); + КонецЕсли; + КонецЦикла; + + Если НомераИнтеграторов.Количество() = 0 Тогда + Возврат Интеграторы; + КонецЕсли; + + БИКиИнтеграторов = Новый Массив; + Для Каждого НомерИнтегратора Из НомераИнтеграторов Цикл + БИКИнтегратора = НастройкиИнтегратораИзМакета.ИдентификаторыБИКиИнтеграторов[НомерИнтегратора]; + БИКиИнтеграторов.Добавить(БИКИнтегратора); + КонецЦикла; + + БанкиПоБИКам = ОбменСБанкамиСлужебный.БанкиПоБИКам(БИКиИнтеграторов); + Если Не ЗначениеЗаполнено(БанкиПоБИКам) Тогда + Возврат Интеграторы; + КонецЕсли; + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | НастройкиОбменСБанками.Банк КАК Банк, + | НастройкиОбменСБанками.Банк.Наименование КАК Наименование + |ИЗ + | Справочник.НастройкиОбменСБанками КАК НастройкиОбменСБанками + |ГДЕ + | НастройкиОбменСБанками.Организация = &Организация + | И НастройкиОбменСБанками.Банк В(&Банки) + | И НЕ НастройкиОбменСБанками.ПометкаУдаления + | И НЕ НастройкиОбменСБанками.Недействительна"; + + РеквизитНаименование = ОбменСБанкамиСлужебный.ИмяПрикладногоРеквизита("Банк.Наименование"); + Запрос.Текст = СтрЗаменить(Запрос.Текст, "Банк.Наименование", СтрШаблон("Банк.%1", РеквизитНаименование)); + + Банки = БанкиПоБИКам.ВыгрузитьКолонку("Ссылка"); + Запрос.УстановитьПараметр("Банки", Банки); + Запрос.УстановитьПараметр("Организация", Организация); + РезультатЗапроса = Запрос.Выполнить(); + Выборка = РезультатЗапроса.Выбрать(); + + Пока Выборка.Следующий() Цикл + НомераБанковскихСчетов = ОбменСБанкамиСлужебный.НомераБанковскихСчетов(Организация, Выборка.Банк); + Если НомераБанковскихСчетов.Количество() > 0 Тогда + НоваяСтрока = Интеграторы.Добавить(); + НоваяСтрока.Банк = Выборка.Банк; + НоваяСтрока.Наименование = Выборка.Наименование; + КонецЕсли; + КонецЦикла; + + Возврат Интеграторы; + +КонецФункции + +// Возвращает настройки обмена с интегратором банковских выписок для указанных организации и банка. +// +// Параметры: +// Организация - ОпределяемыйТип.Организация - организация, для которой выполняется поиск настроек. +// Банк - ОпределяемыйТип.БанкОбменСБанками - банк, для которого выполняется поиск настроек. +// +// Возвращаемое значение: +// Структура - настройки обмена с интегратором: +// * НастройкаОбменаСБанком - СправочникСсылка.НастройкиОбменСБанками - найденная настройка обмена. +// * БанкДляПрямогоОбмена - ОпределяемыйТип.БанкОбменСБанками - банк из настройки обмена. +// * ЗагрузкаВыписокЧерезИнтегратор - Булево - признак загрузки выписок через банк интегратор. +// * НаименованиеИнтегратора - Строка - наименование банка интегратора. +// +Функция НастройкиОбменаВыписки(Организация, Банк) Экспорт + + Настройки = Новый Структура; + Настройки.Вставить("НастройкаОбменаСБанком", Справочники.НастройкиОбменСБанками.ПустаяСсылка()); + Настройки.Вставить("БанкДляПрямогоОбмена", ОбменСБанкамиСлужебный.ПустаяСсылкаНаСправочникБанки()); + Настройки.Вставить("ЗагрузкаВыписокЧерезИнтегратор", Ложь); + Настройки.Вставить("НаименованиеИнтегратора", ""); + + Если ПолучитьФункциональнуюОпцию("ИспользоватьОбменСБанками")Тогда + + ПараметрыОтбора = ОбменСБанкамиКлиентСервер.НовыеПараметрыОтбораНастройкиОбмена(); + ПараметрыОтбора.Организация = Организация; + ПараметрыОтбора.Банк = Банк; + ПараметрыОтбора.ОтборПоДополнительнымБанкам = Истина; + НастройкаОбмена = НастройкаОбменаПоОтбору(ПараметрыОтбора); + + Если НастройкаОбмена <> Неопределено Тогда + Настройки.НастройкаОбменаСБанком = НастройкаОбмена; + БанкНастройки = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(НастройкаОбмена, "Банк"); + Настройки.БанкДляПрямогоОбмена = БанкНастройки; + Если БанкНастройки <> Банк Тогда + Настройки.ЗагрузкаВыписокЧерезИнтегратор = Истина; + Настройки.НаименованиеИнтегратора = ОбменСБанкамиСлужебный.НаименованиеБанка(БанкНастройки); + КонецЕсли; + КонецЕсли; + КонецЕсли; + + Возврат Настройки; + +КонецФункции + #Область УстаревшиеПроцедурыИФункции // Устарела. Следует использовать ОбменСБанкамиКлиентСервер.ПараметрыСозданияФормыСписка. @@ -1349,6 +1487,27 @@ #КонецОбласти +#Область ПроверкаМетодовВызываемыхКакПроизвольныйКод + +// См. ОбщегоНазначенияПереопределяемый.ПриНастройкеПроверкиМетодовВызываемыхКакПроизвольныйКод. +Процедура ПриНастройкеПроверкиМетодовВызываемыхКакПроизвольныйКод(Настройки) Экспорт + + ИсключениеПроверки = Настройки.ИсключенияПроверки.Добавить(); + ИсключениеПроверки.ПолноеИмяОбъекта = "ОбщийМодуль.ОбменСБанкамиСлужебный"; + ИсключениеПроверки.ИмяПроцедуры = "СформироватьФайлыДокументов"; + ИсключениеПроверки.ФрагментСодержания = + "ОбщегоНазначения.ВыполнитьМетодКонфигурации(МетодЗаполненияДанных, ПараметрыПроцедуры)"; + + ИсключениеПроверки = Настройки.ИсключенияПроверки.Добавить(); + ИсключениеПроверки.ПолноеИмяОбъекта = "ОбщийМодуль.ОбменСБанкамиСлужебный"; + ИсключениеПроверки.ИмяПроцедуры = "СформироватьФайлыДокументов"; + ИсключениеПроверки.ФрагментСодержания = + "ОбщегоНазначения.ВыполнитьМетодКонфигурации(МетодФормированияЭД, ПараметрыПроцедуры)"; + +КонецПроцедуры + +#КонецОбласти + #Область ДляВызоваИзДругихПодсистем // См. СтандартныеПодсистемыСервер.ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод diff --git a/Конфигурация/CommonModules/ОбменСБанкамиКлиент/Ext/Module.bsl b/Конфигурация/CommonModules/ОбменСБанкамиКлиент/Ext/Module.bsl index cbedd9f5d..f5d777db1 100644 --- a/Конфигурация/CommonModules/ОбменСБанкамиКлиент/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ОбменСБанкамиКлиент/Ext/Module.bsl @@ -21,21 +21,35 @@ // Банк - СправочникСсылка.КлассификаторБанков - ссылка на банк. // НомерБанковскогоСчета - Строка - номер банковского счета. // ОбработчикОповещения - ОписаниеОповещения - содержит описание процедуры, -// которая будет вызвана после создания настройки обмена с банком, не вызывается если настройка обмена уже существует. Параметры процедуры: +// которая будет вызвана после создания настройки обмена с банком, не вызывается если настройка обмена уже существует. +// Параметры процедуры: // * НастройкаОбмена - СправочникСсылка.НастройкиОбменСБанками - созданная настройка обмена с банком. // * ДополнительныеПараметры - Произвольный - значение, которое было указано при создании объекта ОписаниеОповещения. +// ДополнительныеПараметры - Неопределено, Структура - дополнительные параметры для управления поведением процедуры. +// Возможные ключи: +// * ТолькоОткрытьПомощник - Булево - Необязательный. Если Истина, то открывает помощник создания настройки даже +// если настройка обмена уже существует. +// * ТребуетсяПолныйОбмен - Булево - Необязательный. Признак того, что требуется полный обмен с банком. // -Процедура ОткрытьСоздатьНастройкуОбмена(Организация, Банк, НомерБанковскогоСчета = "", ОбработчикОповещения = Неопределено) Экспорт +Процедура ОткрытьСоздатьНастройкуОбмена( + Организация, + Банк, + НомерБанковскогоСчета = "", + ОбработчикОповещения = Неопределено, + ДополнительныеПараметры = Неопределено) Экспорт ЕстьПравоПросмотраНастройкиЭДО = Ложь; ФОВключенаСейчас = Ложь; ЕстьПравоНастройкиЭДО = Ложь; ТекущаяНастройка = ОбменСБанкамиСлужебныйВызовСервера.НастройкаОбмена( Организация, Банк, Истина, Истина, ЕстьПравоПросмотраНастройкиЭДО, ЕстьПравоНастройкиЭДО, ФОВключенаСейчас); - + ТекстСообщения = НСтр("ru = 'Недостаточно прав для настройки прямого обмена с банком. |Обратитесь к администратору.'"); - - Если ЗначениеЗаполнено(ТекущаяНастройка) Тогда + + ТолькоОткрытьПомощник = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ДополнительныеПараметры, + "ТолькоОткрытьПомощник", Ложь); + + Если ЗначениеЗаполнено(ТекущаяНастройка) И Не ТолькоОткрытьПомощник Тогда Если Не ЕстьПравоПросмотраНастройкиЭДО Тогда ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстСообщения); Возврат; @@ -58,6 +72,10 @@ ПараметрыФормы.Вставить("Банк", Банк); ПараметрыФормы.Вставить("НомерБанковскогоСчета", НомерБанковскогоСчета); + Если ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ДополнительныеПараметры, "ТребуетсяПолныйОбмен", Ложь) Тогда + ПараметрыФормы.Вставить("ТребуетсяПолныйОбмен", ДополнительныеПараметры.ТребуетсяПолныйОбмен); + КонецЕсли; + ОткрытьФорму("Справочник.НастройкиОбменСБанками.Форма.ПомощникСозданияНастройкиОбмена", ПараметрыФормы, , , , , ОбработчикОповещения); @@ -236,15 +254,8 @@ // Процедура ПолучитьВыписку(Оповещение, БанковскийСчет, ДатаНачала, Знач ДатаОкончания) Экспорт - Если Не ДатыКорректны(ДатаНачала, ДатаОкончания) Тогда - Результат = Новый Структура("Успех", Ложь); - ВыполнитьОбработкуОповещения(Оповещение, Результат); - Возврат; - КонецЕсли; - ПараметрыОбмена = ОбменСБанкамиСлужебныйВызовСервера.ПараметрыОбменаПоНомеруСчета(БанковскийСчет); - - ОбработатьПолучениеВыписки(Оповещение, ПараметрыОбмена, ДатаНачала, ДатаОкончания); + ОбработатьПолучениеВыпискиСПроверкойДат(Оповещение, ПараметрыОбмена, ДатаНачала, ДатаОкончания); КонецПроцедуры @@ -259,18 +270,40 @@ // НастройкаОбмена - СправочникСсылка.НастройкиОбменСБанками - ссылка на настройку обмена организации с банком // ДатаНачала - Дата - начало периода запроса. // ДатаОкончания - Дата - окончание периода запроса. +// Банк - Неопределено, ОпределяемыйТип.БанкОбменСБанками - если банк указан, то выписка запрашивается по этому банку. // -Процедура ПолучитьВыпискуПоНастройкеОбмена(Оповещение, НастройкаОбмена, ДатаНачала, Знач ДатаОкончания) Экспорт - - Если Не ДатыКорректны(ДатаНачала, ДатаОкончания) Тогда - Результат = Новый Структура("Успех", Ложь); - ВыполнитьОбработкуОповещения(Оповещение, Результат); - Возврат; - КонецЕсли; +Процедура ПолучитьВыпискуПоНастройкеОбмена( + Оповещение, + НастройкаОбмена, + ДатаНачала, + Знач ДатаОкончания, + Банк = Неопределено) Экспорт ПараметрыОбмена = ОбменСБанкамиСлужебныйВызовСервера.ПараметрыОбменаПоНастройкеОбмена(НастройкаОбмена); - ОбработатьПолучениеВыписки(Оповещение, ПараметрыОбмена, ДатаНачала, ДатаОкончания); + Если Банк <> Неопределено И ПараметрыОбмена <> Неопределено Тогда + ПараметрыОбмена.РеквизитыСчета.Банк = Банк; + КонецЕсли; + + ОбработатьПолучениеВыпискиСПроверкойДат(Оповещение, ПараметрыОбмена, ДатаНачала, ДатаОкончания); + +КонецПроцедуры + +// Отправляет запрос выписки в банк, а после получения выписки вызывает обработчик из оповещения. +// +// Параметры: +// Оповещение - ОписаниеОповещения - оповещение, вызываемое после получения выписки банка. +// * Результат - Структура - содержит следующие поля: +// ** Успех - Булево - если Истина, то операция успешно выполнена. +// ** Выписки - Массив - массив документов, содержащих данные выписок. +// *** ДокументСсылка.СообщениеОбменСБанками - ссылка на сообщение обмена с выпиской банка. +// ПараметрыВыписки - см. ОбменСБанкамиКлиентСервер.ПараметрыПолученияВыпискиБанка +// +Процедура ПолучитьВыпискуПоПараметрам(Оповещение, ПараметрыВыписки) Экспорт + + ПараметрыОбмена = ОбменСБанкамиСлужебныйВызовСервера.ПараметрыОбменаПоПараметрамВыписки(ПараметрыВыписки); + ОбработатьПолучениеВыпискиСПроверкойДат(Оповещение, ПараметрыОбмена, ПараметрыВыписки.ДатаНачала, + ПараметрыВыписки.ДатаОкончания); КонецПроцедуры @@ -791,11 +824,14 @@ ПараметрыЗапроса.НомерСчета = ПараметрыОбмена.РеквизитыСчета.НомерСчета; ПараметрыЗапроса.ДатаНачала = ДатаНачала; ПараметрыЗапроса.ДатаОкончания = ДатаОкончания; - ПараметрыЗапроса.Вставить("НастройкаОбмена", НастройкаОбмена); + ПараметрыЗапроса.БанкВладелец = ПараметрыОбмена.РеквизитыСчета.Банк; + ПараметрыЗапроса.НастройкаОбмена = НастройкаОбмена; + ПараметрыЗапроса.Организация = ПараметрыОбмена.РеквизитыСчета.Организация; + // Для асинхронного обмена используется ключ "БанкВладелец". + // Ключ "Банк" в структуре "ПараметрыЗапроса" оставлен для совместимости с остальными вариантами обмена. + ПараметрыЗапроса.Вставить("Банк", ПараметрыОбмена.РеквизитыСчета.Банк); ПараметрыЗапроса.Вставить("РеквизитыНастройкиОбмена", РеквизитыНастройкиОбмена); ПараметрыЗапроса.Вставить("ОповещениеПослеПолученияВыписки", Оповещение); - ПараметрыЗапроса.Вставить("Организация", ПараметрыОбмена.РеквизитыСчета.Организация); - ПараметрыЗапроса.Вставить("Банк", ПараметрыОбмена.РеквизитыСчета.Банк); ЗапросВыпискиТребуетЭП = РеквизитыНастройкиОбмена.НастройкиПодписанияПоВидамЭД[ ПредопределенноеЗначение("Перечисление.ВидыЭДОбменСБанками.ЗапросВыписки")] = @@ -1069,4 +1105,16 @@ КонецФункции +Процедура ОбработатьПолучениеВыпискиСПроверкойДат(Оповещение, ПараметрыОбмена, ДатаНачала, ДатаОкончания) + + Если Не ДатыКорректны(ДатаНачала, ДатаОкончания) Тогда + Результат = Новый Структура("Успех", Ложь); + ВыполнитьОбработкуОповещения(Оповещение, Результат); + Возврат; + КонецЕсли; + + ОбработатьПолучениеВыписки(Оповещение, ПараметрыОбмена, ДатаНачала, ДатаОкончания); + +КонецПроцедуры + #КонецОбласти diff --git a/Конфигурация/CommonModules/ОбменСБанкамиКлиентСервер/Ext/Module.bsl b/Конфигурация/CommonModules/ОбменСБанкамиКлиентСервер/Ext/Module.bsl index d7256ea73..a0dd42ed7 100644 --- a/Конфигурация/CommonModules/ОбменСБанкамиКлиентСервер/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ОбменСБанкамиКлиентСервер/Ext/Module.bsl @@ -158,6 +158,33 @@ КонецФункции +// Функция-конструктор параметров процедуры ОбменСБанками.НастройкаОбменаПоОтбору +// +// Возвращаемое значение: +// Структура - параметры выполнения процедуры, содержит поля: +// * Организация - ОпределяемыйТип.Организация - организация, указанная в настройке. +// * Банк - ОпределяемыйТип.БанкОбменСБанками - банк, указанный в настройке. +// * ТолькоДействительная - Булево - Истина - поиск только действующей настройки, Ложь - поиск любой настройки. +// * ТолькоДействительнаяДляДополнительныхБанков - Булево - Истина - поиск только действующей настройки для банков +// из табличной части "Дополнительные банки", +// Ложь - поиск любой настройки. +// * ОтборПоДополнительнымБанкам - Булево - Истина - выполнять поиск банка и в табличной части "Дополнительные банки". +// * ИсключаяНастройки - Массив - массив ссылок на настройки обмена, которые исключаются из поиска. +// +Функция НовыеПараметрыОтбораНастройкиОбмена() Экспорт + + ПараметрыОтбора = Новый Структура; + ПараметрыОтбора.Вставить("Организация", Неопределено); + ПараметрыОтбора.Вставить("Банк", Неопределено); + ПараметрыОтбора.Вставить("ТолькоДействительная", Истина); + ПараметрыОтбора.Вставить("ТолькоДействительнаяДляДополнительныхБанков", Истина); + ПараметрыОтбора.Вставить("ОтборПоДополнительнымБанкам", Ложь); + ПараметрыОтбора.Вставить("ИсключаяНастройки", Новый Массив); + + Возврат ПараметрыОтбора; + +КонецФункции + #КонецОбласти #Область СлужебныйПрограммныйИнтерфейс @@ -383,17 +410,29 @@ КонецФункции -// Формирует параметры получения выписки банка -// +// Формирует параметры получения выписки банка. +// // Возвращаемое значение: -// Структура - содержит параметры получения выписки. Все поля необязательны для заполнения. -// * ДатаНачала - Дата - дата начала периода запроса выписки -// * ДатаОкончания - Дата - дата окончания периода запроса выписки +// Структура - содержит параметры получения выписки. Все поля необязательны для заполнения: +// * ДатаНачала - Дата - дата начала периода запроса выписки. +// * ДатаОкончания - Дата - дата окончания периода запроса выписки. // * НомерСчета - Строка - номер счета, по которому требуется получить выписку. +// * БанкВладелец - Неопределено, ОпределяемыйТип.БанкОбменСБанками - ссылка на банк, в котором открыт счет. +// * НастройкаОбмена - Неопределено, СправочникСсылка.НастройкиОбменСБанками - настройка, через которую +// запрашивается выписка. +// * Организация - Неопределено, ОпределяемыйТип.Организация - организация для запроса выписки. // Функция ПараметрыПолученияВыпискиБанка() Экспорт - Возврат Новый Структура("ДатаНачала, ДатаОкончания, НомерСчета"); + ПараметрыПолученияВыписки = Новый Структура; + ПараметрыПолученияВыписки.Вставить("ДатаНачала", '00010101'); + ПараметрыПолученияВыписки.Вставить("ДатаОкончания", '00010101'); + ПараметрыПолученияВыписки.Вставить("НомерСчета", ""); + ПараметрыПолученияВыписки.Вставить("БанкВладелец", Неопределено); + ПараметрыПолученияВыписки.Вставить("НастройкаОбмена", Неопределено); + ПараметрыПолученияВыписки.Вставить("Организация", Неопределено); + + Возврат ПараметрыПолученияВыписки; КонецФункции diff --git a/Конфигурация/CommonModules/ОбменСБанкамиПереопределяемый/Ext/Module.bsl b/Конфигурация/CommonModules/ОбменСБанкамиПереопределяемый/Ext/Module.bsl index 5b50f38a8..2d0a02af1 100644 --- a/Конфигурация/CommonModules/ОбменСБанкамиПереопределяемый/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ОбменСБанкамиПереопределяемый/Ext/Module.bsl @@ -510,17 +510,6 @@ КонецПроцедуры -// Проверяет доступность функциональности отправки почтовых сообщений -// -// Параметры: -// ЭлектроннаяПочтаПоддерживается - Булево -// -Процедура ПроверитьДоступностьФункциональностиЭлектроннойПочты(ЭлектроннаяПочтаПоддерживается) Экспорт - - ЭлектроннаяПочтаПоддерживается = Истина; - -КонецПроцедуры - #Область ЗарплатныйПроект // Вызывается для формирования XML файла в прикладном решении @@ -674,6 +663,27 @@ КонецПроцедуры +// Определяет доступную функциональность обмена с банками. +// Используется для включения или отключения отдельных возможностей. +// +// Параметры: +// ДоступнаяФункциональность - Структура - см. ОбменСБанкамиСлужебныйКлиентСервер.НовыйДоступнаяФункциональность +// +Процедура ПриОпределенииДоступнойФункциональности(ДоступнаяФункциональность) Экспорт + +КонецПроцедуры + +// Проверяет доступность функциональности отправки почтовых сообщений +// +// Параметры: +// ЭлектроннаяПочтаПоддерживается - Булево +// +Процедура ПроверитьДоступностьФункциональностиЭлектроннойПочты(ЭлектроннаяПочтаПоддерживается) Экспорт + + ЭлектроннаяПочтаПоддерживается = Истина; + +КонецПроцедуры + // Для выполнения действий после отправки электронных документов в прикладной конфигурации // // Параметры: diff --git a/Конфигурация/CommonModules/ОбменСБанкамиСлужебный/Ext/Module.bsl b/Конфигурация/CommonModules/ОбменСБанкамиСлужебный/Ext/Module.bsl index 7fcb47e84..63a127c67 100644 --- a/Конфигурация/CommonModules/ОбменСБанкамиСлужебный/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ОбменСБанкамиСлужебный/Ext/Module.bsl @@ -82,18 +82,161 @@ #Область ПолучениеДанныхИзИнформационнойБазы -// Получает БИК банка +// Получает БИК банка. // // Параметры: -// Банк - ОпределяемыйТип.БанкОбменСБанками - ссылка на банк +// Банк - ОпределяемыйТип.БанкОбменСБанками - ссылка на банк. // Возвращаемое значение: -// Строка - значение БИК банка +// Строка - значение БИК банка. +// Функция БИК(Банк) Экспорт + Если Не ЗначениеЗаполнено(Банк) Тогда + Возврат ""; + КонецЕсли; + Возврат ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Банк, ИмяПрикладногоРеквизита("Банк.БИК")); КонецФункции +// Получает наименование банка. +// +// Параметры: +// Банк - ОпределяемыйТип.БанкОбменСБанками - ссылка на банк. +// Возвращаемое значение: +// Строка - наименование банка. +// +Функция НаименованиеБанка(Банк) Экспорт + + Если Не ЗначениеЗаполнено(Банк) Тогда + Возврат ""; + КонецЕсли; + + Возврат ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Банк, ИмяПрикладногоРеквизита("Банк.Наименование")); + +КонецФункции + +// Возвращает реквизиты банка по переданной ссылке. +// +// Параметры: +// Банк - ОпределяемыйТип.БанкОбменСБанками - ссылка на банк. +// +// Возвращаемое значение: +// Структура - реквизиты счета. Содержит поля: +// * Наименование - Строка - наименование банка. +// * Город - Строка - город банка. +// * БИК - Строка - БИК банка. +// * Банк - ОпределяемыйТип.БанкОбменСБанками - ссылка на банк. +// +Функция РеквизитыБанкаПоСсылке(Банк) Экспорт + + Возврат РеквизитыБанкаЗапросомПоПараметру("Банки.Ссылка = &Параметр", Банк); + +КонецФункции + +// Возвращает реквизиты банка по заданному параметру поиска. +// +// Параметры: +// ИмяПараметра - Строка - условие поиска банка (например, "Банки.Ссылка = &Параметр"). +// ЗначениеПараметра - Произвольный - значение параметра поиска. +// +// Возвращаемое значение: +// Структура - реквизиты счета. Содержит поля: +// * Наименование - Строка - наименование банка. +// * Город - Строка - город банка. +// * БИК - Строка - БИК банка. +// * Банк - ОпределяемыйТип.БанкОбменСБанками - ссылка на банк. +// +Функция РеквизитыБанкаЗапросомПоПараметру(ИмяПараметра, ЗначениеПараметра) Экспорт + + СтруктураВозврата = Новый Структура(); + СтруктураВозврата.Вставить("БИК", ""); + СтруктураВозврата.Вставить("Наименование", ""); + СтруктураВозврата.Вставить("Город", ""); + СтруктураВозврата.Вставить("Банк", Неопределено); + + ТипБанк = Метаданные.ОпределяемыеТипы.БанкОбменСБанками.Тип.Типы().Получить(0); + РеквизитБИК = ИмяПрикладногоРеквизита("Банк.БИК"); + РеквизитНаименование = ИмяПрикладногоРеквизита("Банк.Наименование"); + РеквизитГород = ИмяПрикладногоРеквизита("Банк.Город"); + СправочникБанки = Метаданные.НайтиПоТипу(ТипБанк); + + Запрос = Новый Запрос(); + Запрос.Текст = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | Банки.Код КАК БИК, + | Банки.Наименование КАК Наименование, + | Банки.Город КАК Город, + | Банки.ПометкаУдаления КАК ПометкаУдаления, + | Банки.Ссылка КАК Банк + |ИЗ + | Справочник.Банки КАК Банки + |ГДЕ + | %1 + | + |УПОРЯДОЧИТЬ ПО + | ПометкаУдаления"; + + Запрос.УстановитьПараметр("Параметр", ЗначениеПараметра); + Запрос.Текст = СтрЗаменить(Запрос.Текст, "Справочник.Банки", СтрШаблон("Справочник.%1", СправочникБанки.Имя)); + Запрос.Текст = СтрЗаменить(Запрос.Текст, "Банки.Код", СтрШаблон("Банки.%1", РеквизитБИК)); + Запрос.Текст = СтрЗаменить(Запрос.Текст, "Банки.Наименование", СтрШаблон("Банки.%1", РеквизитНаименование)); + Запрос.Текст = СтрЗаменить(Запрос.Текст, "Банки.Город", СтрШаблон("Банки.%1", РеквизитГород)); + Запрос.Текст = СтрЗаменить(Запрос.Текст, "%1", ИмяПараметра); + + Выборка = Запрос.Выполнить().Выбрать(); + + Если Выборка.Следующий() Тогда + СтруктураВозврата.БИК = Выборка.БИК; + СтруктураВозврата.Наименование = Выборка.Наименование; + СтруктураВозврата.Город = Выборка.Город; + СтруктураВозврата.Банк = Выборка.Банк; + КонецЕсли; + + Возврат СтруктураВозврата; + +КонецФункции + +// Возвращает таблицу значений с информацией о банках по указанным БИКам. +// +// Параметры: +// БИКи - Массив из Строка - массив БИК для поиска. +// +// Возвращаемое значение: +// ТаблицаЗначений: +// * Ссылка - ОпределяемыйТип.БанкОбменСБанками - ссылка на элемент справочника банков. +// * Наименование - Строка - наименование банка. +// +Функция БанкиПоБИКам(БИКи) Экспорт + + Запрос = Новый Запрос(); + Запрос.Текст = + "ВЫБРАТЬ + | Банки.Ссылка КАК Ссылка, + | Банки.Наименование КАК Наименование + |ИЗ + | Справочник.Банки КАК Банки + |ГДЕ + | Банки.Код В(&БИКи) + | И НЕ Банки.ПометкаУдаления"; + + ИмяСправочникаБанки = ИмяСправочникаБанки(); + Запрос.Текст = СтрЗаменить(Запрос.Текст, "Справочник.Банки", СтрШаблон("Справочник.%1", ИмяСправочникаБанки)); + + РеквизитБИК = ИмяПрикладногоРеквизита("Банк.БИК"); + Запрос.Текст = СтрЗаменить(Запрос.Текст, "Банки.Код", СтрШаблон("Банки.%1", РеквизитБИК)); + + РеквизитНаименование = ИмяПрикладногоРеквизита("Банк.Наименование"); + Запрос.Текст = СтрЗаменить(Запрос.Текст, "Банки.Наименование", СтрШаблон("Банки.%1", РеквизитНаименование)); + + Запрос.УстановитьПараметр("БИКи", БИКи); + + РезультатЗапроса = Запрос.Выполнить(); + + Возврат РезультатЗапроса.Выгрузить(); + +КонецФункции + // Возвращает двоичные данные сертификата банка по его номеру // // Параметры: @@ -2855,6 +2998,241 @@ КонецФункции +// Производит поиск настройки обмена с банком по заданному отбору. Возвращает первую найденную настройку обмена. +// +// Параметры: +// ПараметрыОтбора - см. ОбменСБанкамиКлиентСервер.НовыеПараметрыОтбораНастройкиОбмена +// +// Возвращаемое значение: +// СправочникСсылка.НастройкиОбменСБанками, Неопределено - найденная настройка обмена с банком. +// +Функция НастройкаОбменаПоОтбору(ПараметрыОтбора) Экспорт + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("Организация", ПараметрыОтбора.Организация); + Запрос.УстановитьПараметр("ТолькоДействительная", ПараметрыОтбора.ТолькоДействительная); + Запрос.УстановитьПараметр("ТолькоДействительнаяДляДополнительныхБанков", + ПараметрыОтбора.ТолькоДействительнаяДляДополнительныхБанков); + + Если ДоступнаЗагрузкаВыписокДругихБанков() Тогда + Запрос.УстановитьПараметр("ОтборПоДополнительнымБанкам", ПараметрыОтбора.ОтборПоДополнительнымБанкам); + Иначе + Запрос.УстановитьПараметр("ОтборПоДополнительнымБанкам", Ложь); + КонецЕсли; + Запрос.УстановитьПараметр("ИсключаяНастройки", ПараметрыОтбора.ИсключаяНастройки); + + БИК = БИК(ПараметрыОтбора.Банк); + + Запрос.УстановитьПараметр("Банк", ПараметрыОтбора.Банк); + Запрос.УстановитьПараметр("БИК", БИК); + + Запрос.Текст = + "ВЫБРАТЬ + | 0 КАК Приоритет, + | НастройкиОбменСБанкамиДополнительныеБанки.Ссылка КАК Ссылка, + | НастройкиОбменСБанкамиДополнительныеБанки.Ссылка.ПометкаУдаления КАК ПометкаУдаления, + | НастройкиОбменСБанкамиДополнительныеБанки.Ссылка.Недействительна КАК Недействительна + |ИЗ + | Справочник.НастройкиОбменСБанками.ДополнительныеБанки КАК НастройкиОбменСБанкамиДополнительныеБанки + |ГДЕ + | &ОтборПоДополнительнымБанкам + | И НастройкиОбменСБанкамиДополнительныеБанки.Ссылка.Организация = &Организация + | И НастройкиОбменСБанкамиДополнительныеБанки.Банк = &Банк + | И ВЫБОР + | КОГДА &ТолькоДействительнаяДляДополнительныхБанков + | ТОГДА НЕ НастройкиОбменСБанкамиДополнительныеБанки.Ссылка.Недействительна + | И НЕ НастройкиОбменСБанкамиДополнительныеБанки.Ссылка.ПометкаУдаления + | ИНАЧЕ ИСТИНА + | КОНЕЦ + | И НЕ НастройкиОбменСБанкамиДополнительныеБанки.Ссылка В (&ИсключаяНастройки) + | + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ ПЕРВЫЕ 1 + | 1 КАК Приоритет, + | НастройкиОбменСБанками.Ссылка КАК Ссылка, + | НастройкиОбменСБанками.ПометкаУдаления КАК ПометкаУдаления, + | НастройкиОбменСБанками.Недействительна КАК Недействительна + |ИЗ + | Справочник.НастройкиОбменСБанками КАК НастройкиОбменСБанками + |ГДЕ + | НастройкиОбменСБанками.Организация = &Организация + | И НастройкиОбменСБанками.Банк = &Банк + | И ВЫБОР + | КОГДА &ТолькоДействительная + | ТОГДА НЕ НастройкиОбменСБанками.Недействительна + | И НЕ НастройкиОбменСБанками.ПометкаУдаления + | ИНАЧЕ ИСТИНА + | КОНЕЦ + | И НЕ НастройкиОбменСБанками.Ссылка В (&ИсключаяНастройки) + | + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ ПЕРВЫЕ 1 + | 2, + | НастройкиОбменСБанками.Ссылка, + | НастройкиОбменСБанками.ПометкаУдаления, + | НастройкиОбменСБанками.Недействительна + |ИЗ + | Справочник.НастройкиОбменСБанками КАК НастройкиОбменСБанками + |ГДЕ + | НастройкиОбменСБанками.Организация = &Организация + | И НастройкиОбменСБанками.Банк.Код = &БИК + | И ВЫБОР + | КОГДА &ТолькоДействительная + | ТОГДА НЕ НастройкиОбменСБанками.Недействительна + | И НЕ НастройкиОбменСБанками.ПометкаУдаления + | ИНАЧЕ ИСТИНА + | КОНЕЦ + | И НЕ НастройкиОбменСБанками.Ссылка В (&ИсключаяНастройки) + | + |УПОРЯДОЧИТЬ ПО + | Приоритет, + | Недействительна, + | ПометкаУдаления"; + + РеквизитБИК = ИмяПрикладногоРеквизита("Банк.БИК"); + Запрос.Текст = СтрЗаменить(Запрос.Текст, "НастройкиОбменСБанками.Банк.Код", + СтрШаблон("НастройкиОбменСБанками.Банк.%1", РеквизитБИК)); + + УстановитьПривилегированныйРежим(Истина); + Выборка = Запрос.Выполнить().Выбрать(); + УстановитьПривилегированныйРежим(Ложь); + + Если Выборка.Следующий() Тогда + Возврат Выборка.Ссылка; + КонецЕсли; + + Возврат Неопределено; + +КонецФункции + +// Возвращает настройки интеграторов с банком для организации. +// +// Параметры: +// Банк - ОпределяемыйТип.БанкОбменСБанками - банк, для которого выполняется поиск интеграторов. +// Организация - ОпределяемыйТип.Организация - организация, для проверки доступных банковских счетов. +// +// Возвращаемое значение: +// Структура: +// * ДоступноПолучениеВыписокИзДругихБанков - Булево - признак наличия интеграции выписок. +// * Банки - ТаблицаЗначений - таблица банков с настроенной интеграцией: +// * Ссылка - ОпределяемыйТип.БанкОбменСБанками - ссылка на банк. +// * Наименование - Строка - наименование банка. +// +Функция НастройкиИнтеграторов(Банк, Организация) Экспорт + + Настройки = Новый Структура; + Настройки.Вставить("ДоступноПолучениеВыписокИзДругихБанков", Ложь); + + Банки = Новый ТаблицаЗначений; + Банки.Колонки.Добавить("Ссылка", Метаданные.ОпределяемыеТипы.БанкОбменСБанками.Тип); + Банки.Колонки.Добавить("Наименование", ОбщегоНазначения.ОписаниеТипаСтрока(150)); + Настройки.Вставить("Банки", Банки); + + БИКИнтегратора = БИК(Банк); + Если Не ЗначениеЗаполнено(БИКИнтегратора) Тогда + Возврат Настройки; + КонецЕсли; + + НастройкиИнтегратораИзМакета = НастройкиИнтеграторовИзМакета(); + НомерИнтегратора = НастройкиИнтегратораИзМакета.БИКиИдентификаторыИнтеграторов[БИКИнтегратора]; + Если Не ЗначениеЗаполнено(НомерИнтегратора) Тогда + Возврат Настройки; + КонецЕсли; + + БИКи = НастройкиИнтегратораИзМакета.БанкиИИдентификаторыИнтеграторов[НомерИнтегратора]; + Если Не ЗначениеЗаполнено(БИКи) Тогда + Возврат Настройки; + КонецЕсли; + + БанкиДляВыписок = БанкиПоБИКам(БИКи); + Если Не ЗначениеЗаполнено(БанкиДляВыписок) Тогда + Возврат Настройки; + КонецЕсли; + + Для Каждого БанкВыписки Из БанкиДляВыписок Цикл + НомераБанковскихСчетов = НомераБанковскихСчетов(Организация, БанкВыписки.Ссылка); + Если НомераБанковскихСчетов.Количество() > 0 Тогда + НоваяСтрока = Настройки.Банки.Добавить(); + НоваяСтрока.Ссылка = БанкВыписки.Ссылка; + НоваяСтрока.Наименование = БанкВыписки.Наименование; + + Настройки.ДоступноПолучениеВыписокИзДругихБанков = Истина; + КонецЕсли; + КонецЦикла; + + Возврат Настройки; + +КонецФункции + +// Возвращает настройки интеграторов банков из макета. +// +// Возвращаемое значение: +// Структура: +// * БанкиИИдентификаторыИнтеграторов - Соответствие: +// * Ключ - Строка - идентификатор интегратора. +// * Значение - Массив - массив БИК банков, для которых интегратор поддерживает интеграцию. +// * БИКиИдентификаторыИнтеграторов - Соответствие: +// * Ключ - Строка - БИК банка интегратора. +// * Значение - Строка - идентификатор банка интегратора. +// * ИдентификаторыБИКиИнтеграторов - Соответствие: +// * Ключ - Строка - идентификатор банка интегратора. +// * Значение - Строка - БИК банка интегратора. +// +Функция НастройкиИнтеграторовИзМакета() Экспорт + + Настройки = Новый Структура; + Настройки.Вставить("БанкиИИдентификаторыИнтеграторов", Новый Соответствие); + Настройки.Вставить("БИКиИдентификаторыИнтеграторов", Новый Соответствие); + Настройки.Вставить("ИдентификаторыБИКиИнтеграторов", Новый Соответствие); + + Если Не ДоступнаЗагрузкаВыписокДругихБанков() Тогда + Возврат Настройки; + КонецЕсли; + + КолонкаБИК = 2; + КолонкаИнтегратор = 15; + КолонкаДоступныеИнтеграторы = 16; + + БанкиИИдентификаторыИнтеграторов = Новый Соответствие; + БИКиИдентификаторыИнтеграторов = Новый Соответствие; + ИдентификаторыБИКиИнтеграторов = Новый Соответствие; + + Макет = ОбменСБанкамиСлужебныйПовтИсп.СписокБанков(); + КоличествоЗаписей = Макет.ВысотаТаблицы; + Для Индекс = 2 По КоличествоЗаписей Цикл + + ДоступныеИнтеграторыВМакете = Макет.Область(Индекс, КолонкаДоступныеИнтеграторы).Текст; + Если ЗначениеЗаполнено(ДоступныеИнтеграторыВМакете) Тогда + МассивИнтеграторов = СтрРазделить(ДоступныеИнтеграторыВМакете, ",", Ложь); + Для Каждого ТекущийИнтегратор Из МассивИнтеграторов Цикл + ТекущийНомерИнтегратора = СокрЛП(ТекущийИнтегратор); + Если БанкиИИдентификаторыИнтеграторов[ТекущийНомерИнтегратора] = Неопределено Тогда + БанкиИИдентификаторыИнтеграторов[ТекущийНомерИнтегратора] = Новый Массив; + КонецЕсли; + ТекущееЗначение = БанкиИИдентификаторыИнтеграторов[ТекущийНомерИнтегратора]; + ТекущееЗначение.Добавить(СокрЛП(Макет.Область(Индекс, КолонкаБИК).Текст)); + КонецЦикла; + КонецЕсли; + + НомерИнтегратораВМакете = СокрЛП(Макет.Область(Индекс, КолонкаИнтегратор).Текст); + Если ЗначениеЗаполнено(НомерИнтегратораВМакете) Тогда + БИКИнтегратора = СокрЛП(Макет.Область(Индекс, КолонкаБИК).Текст); + БИКиИдентификаторыИнтеграторов[БИКИнтегратора] = НомерИнтегратораВМакете; + ИдентификаторыБИКиИнтеграторов[НомерИнтегратораВМакете] = БИКИнтегратора; + КонецЕсли; + + КонецЦикла; + + Настройки.БанкиИИдентификаторыИнтеграторов = БанкиИИдентификаторыИнтеграторов; + Настройки.БИКиИдентификаторыИнтеграторов = БИКиИдентификаторыИнтеграторов; + Настройки.ИдентификаторыБИКиИнтеграторов = ИдентификаторыБИКиИнтеграторов; + + Возврат Настройки; + +КонецФункции + // Определяет организацию по данным электронного документа. Если ИНН и КПП совпадают с переданной организацией, // возвращает ее. В противном случае выполняет поиск по реквизитам из файла. // Вызывает исключение, если в файле настроек нет информации об организации или если организация не найдена @@ -3423,6 +3801,17 @@ ПараметрыСообщения.НастройкаОбмена, "Организация, Банк"); ЗаполнитьЗначенияСвойств(НовоеСообщениеОбъект, РеквизитыНастройкиОбмена); КонецЕсли; + + Если ПараметрыСообщения.Свойство("БанкВладелецСчета") Тогда + Если ЗначениеЗаполнено(ПараметрыСообщения.БанкВладелецСчета) + И ПараметрыСообщения.БанкВладелецСчета.Свойство("БИК") Тогда + + БанкВладелецСчета = ОбменСБанкамиСлужебныйВызовСервера.РеквизитыБанка(ПараметрыСообщения.БанкВладелецСчета.БИК); + Если ЗначениеЗаполнено(БанкВладелецСчета.Банк) Тогда + НовоеСообщениеОбъект.Банк = БанкВладелецСчета.Банк; + КонецЕсли; + КонецЕсли; + КонецЕсли; НовоеСообщениеОбъект.ПрограммаБанка = ПрограммаБанка; @@ -7451,6 +7840,7 @@ // НомерСчета - Строка - счет, по которому сформирована выписка // Организация - ОпределяемыйТип.Организация - ссылка на организацию // Банк - ОпределяемыйТип.БанкОбменСБанками - ссылка на банк +// БанкВладелецСчета - ОпределяемыйТип.БанкОбменСБанками - ссылка на банк, в котором открыт счет // НачальныйОстаток - Число - входящий остаток по выписке // ОборотВходящихПлатежей - Число - поступило денежных средств за период // ОборотИсходящихПлатежей - Число - оплачено за период @@ -7468,8 +7858,10 @@ ТаблицаВыписок.Колонки.Добавить("НачалоПериода"); ТаблицаВыписок.Колонки.Добавить("КонецПериода"); ТаблицаВыписок.Колонки.Добавить("НомерСчета"); + ТаблицаВыписок.Колонки.Добавить("ИдентификаторЦифровогоСчета"); ТаблицаВыписок.Колонки.Добавить("Организация"); ТаблицаВыписок.Колонки.Добавить("Банк"); + ТаблицаВыписок.Колонки.Добавить("БанкВладелецСчета"); ТаблицаВыписок.Колонки.Добавить("НачальныйОстаток"); ТаблицаВыписок.Колонки.Добавить("ОборотВходящихПлатежей"); ТаблицаВыписок.Колонки.Добавить("ОборотИсходящихПлатежей"); @@ -7757,7 +8149,7 @@ // НастройкаОбмена - СправочникСсылка.НастройкиОбменСБанками - настройка обмена с банком. // ДатаНачала - Дата - начало периода запроса выписки. // ДатаОкончания - Дата - окончания периода запроса выписки. -// МассивБанковскихСчетов - Массив - содержит строки с номерами счетов. +// ДанныеБанковскихСчетов - см. ОбменСБанкамиСлужебный.НовыеДанныеБанковскихСчетов // СозданАвтоматически - Булево - признак автоматического создания запроса выписки. // // Возвращаемое значение: @@ -7767,7 +8159,7 @@ НастройкаОбмена, ДатаНачала, ДатаОкончания, - МассивБанковскихСчетов, + ДанныеБанковскихСчетов, СозданАвтоматически = Ложь) Экспорт МассивЗапросов = Новый Массив; @@ -7789,7 +8181,7 @@ ПространствоИмен = ПространствоИменАсинхронногоОбмена(ВерсияФормата); Фабрика = ОбменСБанкамиСлужебныйПовтИсп.ФабрикаAsyncXDTO(ВерсияФормата); - Для Каждого НомерСчета Из МассивБанковскихСчетов Цикл + Для Каждого ДанныеБанковскогоСчета Из ДанныеБанковскихСчетов Цикл ТекстОшибки = ""; Попытка @@ -7821,11 +8213,11 @@ ЗаполнитьСвойствоXDTO(ДанныеЗапроса, "StatementType", "0", Истина, ТекстОшибки); ЗаполнитьСвойствоXDTO(ДанныеЗапроса, "DateFrom", ДатаНачала, Истина, ТекстОшибки); ЗаполнитьСвойствоXDTO(ДанныеЗапроса, "DateTo", ДатаОкончания, Истина, ТекстОшибки); - ЗаполнитьСвойствоXDTO(ДанныеЗапроса, "Account", СокрЛП(НомерСчета), Истина, ТекстОшибки); + ЗаполнитьСвойствоXDTO(ДанныеЗапроса, "Account", СокрЛП(ДанныеБанковскогоСчета.НомерСчета), Истина, ТекстОшибки); БанкСчета = ОбъектТипаCML(Фабрика, "BankType", ПространствоИмен); - ЗаполнитьСвойствоXDTO(БанкСчета, "BIC", РеквизитыБанка.Код, Истина, ТекстОшибки); - ЗаполнитьСвойствоXDTO(БанкСчета, "Name", РеквизитыБанка.Наименование, , ТекстОшибки); + ЗаполнитьСвойствоXDTO(БанкСчета, "BIC", ДанныеБанковскогоСчета.БИК, Истина, ТекстОшибки); + ЗаполнитьСвойствоXDTO(БанкСчета, "Name", ДанныеБанковскогоСчета.НаименованиеБанка, , ТекстОшибки); ЗаполнитьСвойствоXDTO(ДанныеЗапроса, "Bank", БанкСчета, Истина, ТекстОшибки); ЗаполнитьСвойствоXDTO(ЭД, "Data", ДанныеЗапроса, Истина, ТекстОшибки); @@ -7865,7 +8257,7 @@ СтруктураРеквизитов.Вставить("ВидЭД", Перечисления.ВидыЭДОбменСБанками.ЗапросВыписки); СтруктураРеквизитов.Вставить("НастройкаОбмена", НастройкаОбмена); СтруктураРеквизитов.Вставить("Организация", РеквизитыНастройкиОбмена.Организация); - СтруктураРеквизитов.Вставить("Банк", РеквизитыНастройкиОбмена.Банк); + СтруктураРеквизитов.Вставить("Банк", ДанныеБанковскогоСчета.БанкВладелец); СтруктураРеквизитов.Вставить("Направление", Перечисления.НаправленияЭДО.Исходящий); СтруктураРеквизитов.Вставить("АдресФайлаВоВременномХранилище", АдресФайла); СтруктураРеквизитов.Вставить("СсылкаНаОбъект", НастройкаОбмена); @@ -7873,7 +8265,7 @@ СтруктураРеквизитов.Вставить("ДатаНачала", ДатаНачала); СтруктураРеквизитов.Вставить("ДатаОкончания", ДатаОкончания); СтруктураРеквизитов.Вставить("СозданАвтоматически", СозданАвтоматически); - СтруктураРеквизитов.Вставить("НомерСчета", СокрЛП(НомерСчета)); + СтруктураРеквизитов.Вставить("НомерСчета", СокрЛП(ДанныеБанковскогоСчета.НомерСчета)); СтруктураРеквизитов.Вставить("ФорматФайла", "xml"); СообщениеЗапрос = Неопределено; СохранитьСообщениеОбмена(СтруктураРеквизитов, СообщениеЗапрос); @@ -8112,9 +8504,16 @@ ПараметрыЗапроса = ОбменСБанкамиКлиентСервер.ПараметрыПолученияВыпискиБанка(); ПараметрыЗапроса.ДатаНачала = ДатаНачалаЗапросаВыписки(СтруктураПараметров.НастройкаОбмена); ПараметрыЗапроса.ДатаОкончания = ТекущаяДатаСеанса(); - МассивСообщенийОбмена = ОбменСБанкамиСлужебныйВызовСервера.ЗапросыВыписок( - СтруктураПараметров.НастройкаОбмена, ПараметрыЗапроса, , , Истина); - + + МассивСообщенийОбмена = Новый Массив; + БанкиНастройки = БанкиНастройкиОбмена(СтруктураПараметров.НастройкаОбмена); + Для Каждого БанкНастройки Из БанкиНастройки Цикл + ПараметрыЗапроса.БанкВладелец = БанкНастройки.Ссылка; + МассивСообщенийОбменаПоБанку = ОбменСБанкамиСлужебныйВызовСервера.ЗапросыВыписок( + СтруктураПараметров.НастройкаОбмена, ПараметрыЗапроса, , , Истина); + ОбщегоНазначенияКлиентСервер.ДополнитьМассив(МассивСообщенийОбмена, МассивСообщенийОбменаПоБанку); + КонецЦикла; + НовыйПакет = Неопределено; СоздатьПакетОбменСБанками(СтруктураПараметров.НастройкаОбмена, МассивСообщенийОбмена, НовыйПакет); @@ -8159,14 +8558,6 @@ ЗначенияРеквизитовСчета = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Параметры.СчетОрганизации, "" + РеквизитОрганизация + "," + РеквизитБанк + "," + РеквизитНомерСчета); - НастройкаОбмена = НастройкаОбмена( - ЗначенияРеквизитовСчета[РеквизитОрганизация], ЗначенияРеквизитовСчета[РеквизитБанк], Ложь); - - Если Не ЗначениеЗаполнено(НастройкаОбмена) Тогда - ТекстИсключения = НСтр("ru = 'Отсутствуют электронные документы для указанного счета.'"); - ВызватьИсключение ТекстИсключения; - КонецЕсли; - Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ | СообщениеОбменСБанками.Ссылка КАК Ссылка, @@ -8176,8 +8567,8 @@ |ИЗ | Документ.СообщениеОбменСБанками КАК СообщениеОбменСБанками |ГДЕ - | СообщениеОбменСБанками.НастройкаОбмена = &НастройкаОбмена - | И СообщениеОбменСБанками.ВидЭД = ЗНАЧЕНИЕ(Перечисление.ВидыЭДОбменСБанками.ВыпискаБанка) + | СообщениеОбменСБанками.ВидЭД = ЗНАЧЕНИЕ(Перечисление.ВидыЭДОбменСБанками.ВыпискаБанка) + | И СообщениеОбменСБанками.Банк = &Банк | И СообщениеОбменСБанками.НомерСчета = &НомерСчета | И СообщениеОбменСБанками.ДатаОкончания >= &ДатаНачала | И СообщениеОбменСБанками.ДатаНачала <= &ДатаОкончания @@ -8185,7 +8576,7 @@ |УПОРЯДОЧИТЬ ПО | ДатаНачала, | ДатаИзмененияСтатуса УБЫВ"; - Запрос.УстановитьПараметр("НастройкаОбмена", НастройкаОбмена); + Запрос.УстановитьПараметр("Банк", ЗначенияРеквизитовСчета[РеквизитБанк]); Запрос.УстановитьПараметр("НомерСчета", СокрЛП(ЗначенияРеквизитовСчета[РеквизитНомерСчета])); Запрос.УстановитьПараметр("ДатаНачала", Параметры.Период.ДатаНачала); Запрос.УстановитьПараметр("ДатаОкончания", Параметры.Период.ДатаОкончания); @@ -8305,6 +8696,177 @@ КонецПроцедуры +// Возвращает новую таблицу значений для хранения данных о банковских счетах. +// +// Возвращаемое значение: +// ТаблицаЗначений: +// * НомерСчета - Строка - номер банковского счета. +// * БИК - Строка - БИК банка. +// * НаименованиеБанка - Строка - наименование банка. +// * БанкВладелец - ОпределяемыйТип.БанкОбменСБанками - банк, в котором открыт банковский счет. +// +Функция НовыеДанныеБанковскихСчетов() Экспорт + + ДанныеБанковскихСчетов = Новый ТаблицаЗначений; + ДанныеБанковскихСчетов.Колонки.Добавить("НомерСчета", ОбщегоНазначения.ОписаниеТипаСтрока(70)); + ДанныеБанковскихСчетов.Колонки.Добавить("БИК", ОбщегоНазначения.ОписаниеТипаСтрока(9)); + ДанныеБанковскихСчетов.Колонки.Добавить("НаименованиеБанка", ОбщегоНазначения.ОписаниеТипаСтрока(150)); + ДанныеБанковскихСчетов.Колонки.Добавить("БанкВладелец", Метаданные.ОпределяемыеТипы.БанкОбменСБанками.Тип); + + Возврат ДанныеБанковскихСчетов; + +КонецФункции + +// Вычисляет количество попыток запроса выписок с применением градации коэффициентов +// в зависимости от количества выписок. +// +// Параметры: +// КоличествоВыписок - Число - количество выписок для запроса. +// +// Возвращаемое значение: +// Число - количество попыток запроса выписок. +// +Функция КоличествоПопытокЗапросаВыписок(КоличествоВыписок) Экспорт + + Коэффициент = 1; + Если КоличествоВыписок > 11 И КоличествоВыписок <= 50 Тогда + Коэффициент = 2; + ИначеЕсли КоличествоВыписок > 50 И КоличествоВыписок <= 200 Тогда + Коэффициент = 4; + ИначеЕсли КоличествоВыписок > 200 И КоличествоВыписок <= 1000 Тогда + Коэффициент = 8; + ИначеЕсли КоличествоВыписок > 1000 Тогда + Коэффициент = 16; + КонецЕсли; + + МинимальноеЗначение = 9; + Возврат МинимальноеЗначение + Цел(КоличествоВыписок / Коэффициент); + +КонецФункции + +// Возвращает выписки банка по переданным запросам и настройке обмена. +// +// Параметры: +// НастройкаОбмена - СправочникСсылка.НастройкиОбменСБанками - настройка обмена с банком. +// МассивЗапросов - Массив из Документ.СообщениеОбменСБанками - сообщения-родители, для которых ищутся выписки. +// +// Возвращаемое значение: +// Массив из ДокументСсылка.СообщениеОбменСБанками - найденные выписки банка. +// +Функция ВыпискиПоЗапросам(НастройкаОбмена, МассивЗапросов) Экспорт + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | СообщениеОбменСБанками.Ссылка КАК Ссылка + |ИЗ + | Документ.СообщениеОбменСБанками КАК СообщениеОбменСБанками + |ГДЕ + | СообщениеОбменСБанками.НастройкаОбмена = &НастройкаОбмена + | И СообщениеОбменСБанками.СообщениеРодитель В(&МассивЗапросов) + | И СообщениеОбменСБанками.ВидЭД = ЗНАЧЕНИЕ(Перечисление.ВидыЭДОбменСБанками.ВыпискаБанка)"; + Запрос.УстановитьПараметр("МассивЗапросов", МассивЗапросов); + Запрос.УстановитьПараметр("НастройкаОбмена", НастройкаОбмена); + + МассивВозврата = Новый Массив; + + Выборка = Запрос.Выполнить().Выбрать(); + Пока Выборка.Следующий() Цикл + МассивВозврата.Добавить(Выборка.Ссылка); + КонецЦикла; + + Возврат МассивВозврата; + +КонецФункции + +// Формирует текстовое сообщение о проблемах при получении банковских выписок. +// +// Параметры: +// СписокСообщенийОбмена - Массив из ДокументСсылка.СообщениеОбменСБанками - список отправленных запросов выписок. +// +// Возвращаемое значение: +// Строка - сформированное сообщение с перечнем счетов и причин, по которым выписки не получены. +// +Функция СообщениеПроблемПолученияВыписок(СписокСообщенийОбмена) Экспорт + + СообщениеРезультат = ""; + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ЗапросыВыписок.НомерСчета КАК НомерСчета, + | ЗапросыВыписок.Статус КАК Статус, + | ЗапросыВыписок.ПричинаОтклонения КАК ПричинаОтклонения + |ИЗ + | Документ.СообщениеОбменСБанками КАК ЗапросыВыписок + | ЛЕВОЕ СОЕДИНЕНИЕ Документ.СообщениеОбменСБанками КАК ПолученныеВыписки + | ПО ЗапросыВыписок.Ссылка = ПолученныеВыписки.СообщениеРодитель + |ГДЕ + | ЗапросыВыписок.Ссылка В(&ОтправленныеЗапросы) + | И (ПолученныеВыписки.Ссылка ЕСТЬ NULL + | ИЛИ ЗапросыВыписок.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыОбменСБанками.ОтклоненБанком))"; + + Запрос.УстановитьПараметр("ОтправленныеЗапросы", СписокСообщенийОбмена); + РезультатЗапроса = Запрос.Выполнить(); + ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); + + КоличествоСчетов = ВыборкаДетальныеЗаписи.Количество(); + НомераСчетов = Новый Массив; + ПричиныОтклонений = Новый Массив; + Пока ВыборкаДетальныеЗаписи.Следующий() Цикл + Если ВыборкаДетальныеЗаписи.Статус = Перечисления.СтатусыОбменСБанками.ОтклоненБанком Тогда + СообщениеОЗапросеПоНевалидномуСчету = НСтр("ru = 'В запросе указан неверный номер счета'"); + СообщениеКодОшибки1013 = НСтр("ru = 'Код ошибки 1013'"); + ШаблонСообщения = НСтр("ru = '- Выписка по счету %1 не получена по причине: %2'"); + ПричинаОтклонения = ВыборкаДетальныеЗаписи.ПричинаОтклонения; + Если ПричинаОтклонения = СообщениеОЗапросеПоНевалидномуСчету + Или СтрНайти(ПричинаОтклонения, СообщениеКодОшибки1013) > 0 Тогда + + КраткийШаблон = НСтр("ru = '- Выписка по счету %1 не получена. Если он закрыт, то укажите в счете дату закрытия.'"); + ТекстСообщения = СтрШаблон(КраткийШаблон, ВыборкаДетальныеЗаписи.НомерСчета); + Иначе + ТекстСообщения = СтрШаблон(ШаблонСообщения, ВыборкаДетальныеЗаписи.НомерСчета, ПричинаОтклонения); + КонецЕсли; + ПричиныОтклонений.Добавить(ТекстСообщения); + Иначе + НомераСчетов.Добавить(ВыборкаДетальныеЗаписи.НомерСчета); + КонецЕсли; + КонецЦикла; + + Если КоличествоСчетов = 0 Тогда + Возврат СообщениеРезультат; + КонецЕсли; + + КоличествоНеполученныхВыписок = КоличествоСчетов - ПричиныОтклонений.Количество(); + СообщенияОшибок = Новый Массив; + Если ПричиныОтклонений.Количество() > 0 Тогда + + ТекстПричинаОтклонений = СтрСоединить(ПричиныОтклонений, Символы.ПС); + Если КоличествоНеполученныхВыписок > 0 Тогда + ТекстПричинаОтклонений = ТекстПричинаОтклонений + Символы.ПС; + КонецЕсли; + + СообщенияОшибок.Добавить(ТекстПричинаОтклонений); + КонецЕсли; + + Если КоличествоНеполученныхВыписок = 1 Тогда + ТекстШаблона = НСтр("ru = '- Не удалось получить выписку по счету: + |%1.'"); + ТекстНеполученныхВыписок = СтрШаблон(ТекстШаблона, НомераСчетов[0]); + СообщенияОшибок.Добавить(ТекстНеполученныхВыписок); + ИначеЕсли КоличествоНеполученныхВыписок > 1 Тогда + ТекстШаблона = НСтр("ru = '- Не удалось получить выписки по счетам: + |%1.'"); + ТекстНеполученныхВыписок = СтрШаблон(ТекстШаблона, СтрСоединить(НомераСчетов, Символы.ПС)); + СообщенияОшибок.Добавить(ТекстНеполученныхВыписок); + КонецЕсли; + + СообщениеРезультат = СтрСоединить(СообщенияОшибок, Символы.ПС); + + Возврат СообщениеРезультат; + +КонецФункции + #КонецОбласти #Область ВнешняяКомпонента @@ -8861,6 +9423,58 @@ #КонецОбласти +#Область ОбработкаОшибок + +// Вызывает обработку исключительной ситуации для события "ОбменСБанками" +// см. ЭлектронноеВзаимодействие.ОбработатьОшибку +// +// Параметры: +// Операция - Строка - Вид операции, при которой возникло исключение. +// ТекстОшибки - Строка - Описание ошибки. +// ТекстСообщения - Строка - Текст сообщения. +// СсылкаОбъект - ДокументСсылка, СправочникСсылка - Ссылка на объект с которым связано данное событие. +// +Процедура ОбработатьОшибку(Операция, ТекстОшибки, ТекстСообщения = "", СсылкаОбъект = Неопределено) Экспорт + + ЭлектронноеВзаимодействие.ОбработатьОшибку( + Операция, ТекстОшибки, ТекстСообщения, "ОбменСБанками", СсылкаОбъект); + +КонецПроцедуры + +#КонецОбласти + +#Область РаботаСОбъектами + +// Получает пустую ссылку на справочник банков +// +// Возвращаемое значение: +// - СправочникСсылка.КлассификаторБанков +// - Неопределено - если справочник банков в конфигурации отсутствует +// +Функция ПустаяСсылкаНаСправочникБанки() Экспорт + + Возврат ПолучитьПустуюСсылку("Банки"); + +КонецФункции + +#КонецОбласти + +#Область ДоступнаяФункциональность + +// Проверяет доступна функциональность загрузки выписок из других банков через интегратор. +// +// Возвращаемое значение: +// - Булево - Истина, если доступна функциональность загрузки выписок из других банков через интегратор, иначе Ложь. +Функция ДоступнаЗагрузкаВыписокДругихБанков() Экспорт + + Функциональность = ОбменСБанкамиСлужебныйКлиентСервер.НовыйДоступнаяФункциональность(); + ОбменСБанкамиПереопределяемый.ПриОпределенииДоступнойФункциональности(Функциональность); + Возврат ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Функциональность, "ЗагрузкаВыписокДругихБанков", Ложь); + +КонецФункции + +#КонецОбласти + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -11956,6 +12570,7 @@ СтруктураРеквизитов.Вставить("СсылкаНаОбъект", НастройкаОбмена); СтруктураРеквизитов.Вставить("ДатаНачала", ДанныеВыписки.НачалоПериода); СтруктураРеквизитов.Вставить("ДатаОкончания", ДанныеВыписки.КонецПериода); + СтруктураРеквизитов.Вставить("БанкВладелецСчета", ДанныеВыписки.БанкВладелецСчета); СохранитьСообщениеОбмена(СтруктураРеквизитов, НовоеСообщениеОбмена); Если Не ЗначениеЗаполнено(НовоеСообщениеОбмена) Тогда @@ -12328,13 +12943,16 @@ | НастройкиОбменаСертификаты.СертификатЭП.ДействителенДо КАК ДействителенДо, | НастройкиОбменаСертификаты.СертификатЭП.ПометкаУдаления КАК ПометкаУдаления, | НастройкиОбменаСертификаты.СертификатЭП.Пользователь КАК Пользователь, - | НастройкиОбменаСертификаты.Ссылка КАК НастройкаОбмена + | НастройкиОбменаСертификаты.Ссылка КАК НастройкаОбмена, + | НастройкиОбменСБанками.ПрограммаБанка КАК ПрограммаБанка |ПОМЕСТИТЬ ВТ_СертификатыИзНастроек |ИЗ | ВТ_ЭД КАК ВТ_ЭД | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.НастройкиОбменСБанками.СертификатыПодписейОрганизации КАК | НастройкиОбменаСертификаты | ПО ВТ_ЭД.НастройкаОбмена = НастройкиОбменаСертификаты.Ссылка + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.НастройкиОбменСБанками КАК НастройкиОбменСБанками + | ПО ВТ_ЭД.НастройкаОбмена = НастройкиОбменСБанками.Ссылка |; | | @@ -12345,7 +12963,7 @@ | Сертификаты.Отпечаток КАК Отпечаток, | Сертификаты.Отозван КАК Отозван, | Сертификаты.Наименование КАК Наименование, - | ПрограммыБанков.ПрограммаБанка КАК ПрограммаБанка, + | ВТ_ЭД.ПрограммаБанка КАК ПрограммаБанка, | Сертификаты.ДействителенДо КАК ДействителенДо |ПОМЕСТИТЬ ВТ_РеквизитыСертификатов |ИЗ @@ -12356,8 +12974,6 @@ | И (СостояниеПодписанияЭД.Текущий) | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.СертификатыКлючейЭлектроннойПодписиИШифрования КАК Сертификаты | ПО (СостояниеПодписанияЭД.Сертификат = Сертификаты.Ссылка) - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СведенияОСертификатахОбменСБанками КАК ПрограммыБанков - | ПО (ПрограммыБанков.СертификатЭП = Сертификаты.Ссылка) |ГДЕ | Сертификаты.Ссылка В | (ВЫБРАТЬ @@ -12372,7 +12988,7 @@ | Сертификаты.Отпечаток, | Сертификаты.Отозван, | Сертификаты.НаименованиеСертификата, - | ПрограммыБанков.ПрограммаБанка, + | Сертификаты.ПрограммаБанка, | Сертификаты.ДействителенДо |ИЗ | ВТ_ЭД КАК ВТ_ЭД @@ -12382,8 +12998,6 @@ | И (СостояниеПодписанияЭД.Текущий) | ЛЕВОЕ СОЕДИНЕНИЕ ВТ_СертификатыИзНастроек КАК Сертификаты | ПО (СостояниеПодписанияЭД.Сертификат = &ПустаяСсылкаНаСертификат) - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СведенияОСертификатахОбменСБанками КАК ПрограммыБанков - | ПО (ПрограммыБанков.СертификатЭП = Сертификаты.СертификатЭП) |ГДЕ | Сертификаты.СертификатЭП В | (ВЫБРАТЬ @@ -12398,21 +13012,19 @@ | Сертификаты.Отпечаток, | Сертификаты.Отозван, | Сертификаты.Наименование, - | ПрограммыБанков.ПрограммаБанка, + | СертификатыИзНастроек.ПрограммаБанка, | Сертификаты.ДействителенДо |ИЗ | Справочник.СертификатыКлючейЭлектроннойПодписиИШифрования КАК Сертификаты | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_СертификатыИзНастроек КАК СертификатыИзНастроек | ПО Сертификаты.Ссылка = СертификатыИзНастроек.СертификатЭП - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СведенияОСертификатахОбменСБанками КАК ПрограммыБанков - | ПО (ПрограммыБанков.СертификатЭП = Сертификаты.Ссылка) |ГДЕ | Сертификаты.Ссылка В | (ВЫБРАТЬ | ВТСертификатыДоступныеПользователю.Ссылка | ИЗ | ВТСертификатыДоступныеПользователю КАК ВТСертификатыДоступныеПользователю) - | И ПрограммыБанков.ПрограммаБанка В (&СписокПрограммБанков) + | И СертификатыИзНастроек.ПрограммаБанка В (&СписокПрограммБанков) |; | | @@ -12607,7 +13219,18 @@ | Сертификаты.ПрограммаБанка КАК ПрограммаБанка, | Сертификаты.ДействителенДо КАК ДействителенДо |ИЗ - | ВТ_РеквизитыСертификатов КАК Сертификаты"; + | ВТ_РеквизитыСертификатов КАК Сертификаты + |; + | + | + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ВТ_СертификатыИзНастроек.СертификатЭП КАК СертификатПодписи, + | ВТ_СертификатыИзНастроек.НаименованиеСертификата КАК НаименованиеСертификата + |ИЗ + | ВТ_СертификатыИзНастроек КАК ВТ_СертификатыИзНастроек + |"; МассивСтатусов = Новый Массив; МассивСтатусов.Добавить(Перечисления.СтатусыОбменСБанками.Сформирован); @@ -12802,12 +13425,21 @@ МассивБанковскихСообщенийОбмена.Добавить(СсылкаНаСообщениеОбмена); КонецЕсли; ИначеЕсли ПодозрениеНаОшибкиМаршрутаПодписания Тогда - СоотвСообщенийОбменаИОшибокПодписи.Вставить(СсылкаНаСообщениеОбмена, "ОшибкиВМаршруте"); + Если МассивСсылокНаОбъект.Количество() = 1 Тогда + ДиагностироватьПричинуНевозможностиПодписанияДокумента( + МассивСсылокНаОбъект.Получить(0), НастройкиОбъектов, Результат[8].Выгрузить(), МассивОтпечатков, + Результат[9].Выгрузить()); + Иначе + СоотвСообщенийОбменаИОшибокПодписи.Вставить(СсылкаНаСообщениеОбмена, "ОшибкиВМаршруте"); + КонецЕсли; КонецЕсли; КонецЦикла; ИначеЕсли МассивСсылокНаОбъект.Количество() = 1 Тогда + // Либо у документа установлены все подписи, либо еще нет ни одной подписи + // и пользователю не доступны нужные сертификаты для подписи. ДиагностироватьПричинуНевозможностиПодписанияДокумента( - МассивСсылокНаОбъект.Получить(0), НастройкиОбъектов, Результат[8].Выгрузить(), МассивОтпечатков); + МассивСсылокНаОбъект.Получить(0), НастройкиОбъектов, Результат[8].Выгрузить(), МассивОтпечатков, + Результат[9].Выгрузить()); КонецЕсли; Если СоотвСообщенийОбменаИОшибокПодписи.Количество() > 0 Тогда @@ -14450,6 +15082,11 @@ СтруктураРеквизитов.Вставить("НомерСчета", НомерСчета); СтруктураРеквизитов.Вставить("ФорматФайла", "xml"); + БанкВладелецСчета = Новый Структура; + БанкВладелецСчета.Вставить("БИК", ЗначениеСвойстваXDTO(Stmt, "Acct.Svcr.FinInstnId.ClrSysMmbId.MmbId")); + БанкВладелецСчета.Вставить("Наименование", ЗначениеСвойстваXDTO(Stmt, "Acct.Svcr.FinInstnId.Nm")); + СтруктураРеквизитов.Вставить("БанкВладелецСчета", БанкВладелецСчета); + СохранитьСообщениеОбмена(СтруктураРеквизитов, НовоеСообщениеОбмена); Если Не ЗначениеЗаполнено(НовоеСообщениеОбмена) Тогда Возврат; @@ -16620,6 +17257,50 @@ КонецПроцедуры +Функция БанкиНастройкиОбмена(НастройкаОбмена) + + РеквизитНаименование = ИмяПрикладногоРеквизита("Банк.Наименование"); + РеквизитБИК = ИмяПрикладногоРеквизита("Банк.БИК"); + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | НастройкиОбменСБанками.Банк КАК Ссылка, + | НастройкиОбменСБанками.Банк.Код КАК Код, + | НастройкиОбменСБанками.Банк.Наименование КАК Наименование + |ИЗ + | Справочник.НастройкиОбменСБанками КАК НастройкиОбменСБанками + |ГДЕ + | НастройкиОбменСБанками.Ссылка = &НастройкаОбмена + | + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ + | НастройкиОбменСБанкамиДополнительныеБанки.Банк, + | НастройкиОбменСБанкамиДополнительныеБанки.Банк.Код, + | НастройкиОбменСБанкамиДополнительныеБанки.Банк.Наименование + |ИЗ + | Справочник.НастройкиОбменСБанками.ДополнительныеБанки КАК НастройкиОбменСБанкамиДополнительныеБанки + |ГДЕ + | &ОтборПоДополнительнымБанкам + | И НастройкиОбменСБанкамиДополнительныеБанки.Ссылка = &НастройкаОбмена"; + Запрос.Текст = СтрЗаменить(Запрос.Текст, "Банк.Наименование", СтрШаблон("Банк.%1", РеквизитНаименование)); + Запрос.Текст = СтрЗаменить(Запрос.Текст, "Банк.Код", СтрШаблон("Банк.%1", РеквизитБИК)); + + Запрос.УстановитьПараметр("НастройкаОбмена", НастройкаОбмена); + + Если ДоступнаЗагрузкаВыписокДругихБанков() Тогда + Запрос.УстановитьПараметр("ОтборПоДополнительнымБанкам", Истина); + Иначе + Запрос.УстановитьПараметр("ОтборПоДополнительнымБанкам", Ложь); + КонецЕсли; + + РезультатЗапроса = Запрос.Выполнить(); + + Возврат РезультатЗапроса.Выгрузить(); + +КонецФункции + #КонецОбласти #Область АсинхронныйОбмен @@ -16742,14 +17423,21 @@ КонецЕсли; РеквизитыНастройкиОбмена = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(НастройкаОбмена, "Организация, Банк"); - - ДатаНачала = ДатаНачалаЗапросаВыписки(НастройкаОбмена); - ДатаОкончания = ТекущаяДатаСеанса(); - - МассивБанковскихСчетов = НомераБанковскихСчетов( - РеквизитыНастройкиОбмена.Организация, РеквизитыНастройкиОбмена.Банк); - Если МассивБанковскихСчетов.Количество() = 0 Тогда + ДанныеБанковскихСчетов = ОбменСБанкамиСлужебный.НовыеДанныеБанковскихСчетов(); + БанкиНастройки = БанкиНастройкиОбмена(НастройкаОбмена); + Для Каждого Банк Из БанкиНастройки Цикл + МассивБанковскихСчетов = НомераБанковскихСчетов(РеквизитыНастройкиОбмена.Организация, Банк.Ссылка); + Для Каждого НомерСчета Из МассивБанковскихСчетов Цикл + НоваяСтрока = ДанныеБанковскихСчетов.Добавить(); + НоваяСтрока.НомерСчета = НомерСчета; + НоваяСтрока.БИК = Банк.Код; + НоваяСтрока.НаименованиеБанка = Банк.Наименование; + НоваяСтрока.БанкВладелец = Банк.Ссылка; + КонецЦикла; + КонецЦикла; + + Если ДанныеБанковскихСчетов.Количество() = 0 Тогда ШаблонСообщения = НСтр("ru = 'У %1 нет доступных счетов в %2 для автоматического получения выписки. |Сначала необходимо добавить счета в справочнике банковских счетов.'"); @@ -16757,13 +17445,16 @@ ШаблонСообщения, Строка(РеквизитыНастройкиОбмена.Организация), Строка(РеквизитыНастройкиОбмена.Банк)); - + ВызватьИсключение ТекстСообщения; КонецЕсли; + ДатаНачала = ДатаНачалаЗапросаВыписки(НастройкаОбмена); + ДатаОкончания = ТекущаяДатаСеанса(); + МассивСообщенийЗапросов = МассивЗапросовВыпискиАсинхронныйОбмен(НастройкаОбмена, - ДатаНачала, ДатаОкончания, МассивБанковскихСчетов, Истина); + ДатаНачала, ДатаОкончания, ДанныеБанковскихСчетов, Истина); НовыйПакет = Неопределено; СоздатьПакетОбменСБанками(НастройкаОбмена, МассивСообщенийЗапросов, НовыйПакет); @@ -16779,17 +17470,38 @@ ВызватьИсключение ТекстСообщения; КонецЕсли; - // В некоторых случаях банк может не успеть сформировать выписку - Если НЕ ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда - ВызватьПаузу(20000); - КонецЕсли; - ПараметрыПолучения = Новый Структура; ПараметрыПолучения.Вставить("НастройкаОбмена", НастройкаОбмена); ПараметрыПолучения.Вставить("ИдентификаторСессии", РезультатАутентификации.ИдентификаторСессии); ПараметрыПолучения.Вставить("ПолучениеАвтовыписки", Истина); - ПолучитьНовыеДокументыИзБанка(ПараметрыПолучения); + КоличествоПолученныхВыписок = 0; + НомерПопытки = 1; + КоличествоЗапрашиваемыхВыписок = МассивСообщенийЗапросов.Количество(); + КоличествоПопыток = КоличествоПопытокЗапросаВыписок(КоличествоЗапрашиваемыхВыписок); + + Пока КоличествоПолученныхВыписок <> КоличествоЗапрашиваемыхВыписок И НомерПопытки <= КоличествоПопыток Цикл + + // В некоторых случаях банк может не успеть сформировать выписку + Если НЕ ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда + ОбщегоНазначенияБЭД.Пауза(20); + КонецЕсли; + + Попытка + ПолучитьНовыеДокументыИзБанка(ПараметрыПолучения); + Исключение + ВызватьИсключение; + КонецПопытки; + + ВыпискиБанка = ВыпискиПоЗапросам(НастройкаОбмена, МассивСообщенийЗапросов); + КоличествоПолученныхВыписок = ВыпискиБанка.Количество(); + НомерПопытки = НомерПопытки + 1; + КонецЦикла; + + Если КоличествоПолученныхВыписок <> КоличествоЗапрашиваемыхВыписок Тогда + СообщениеПроблемПолученияВыписок = СообщениеПроблемПолученияВыписок(МассивСообщенийЗапросов); + ВызватьИсключение СообщениеПроблемПолученияВыписок; + КонецЕсли; КонецПроцедуры @@ -20591,7 +21303,8 @@ Документ, НастройкиОбъектов, СертификатыМаршрута, - МассивОтпечатков) + МассивОтпечатков, + СертификатыНастройкиТаблица) Для Каждого КлючЗначение Из НастройкиОбъектов Цикл НастройкиОбмена = КлючЗначение.Значение; @@ -20603,25 +21316,47 @@ Если ЗначениеЗаполнено(СообщениеОбмена) И НЕ ОбменСБанкамиСлужебныйВызовСервера.ЭлектронныйДокументПолностьюПодписан(СообщениеОбмена) Тогда // Дополнительная диагностика проблемы. Проверка, что сертификат установлен в личное хранилище. + СертификатыМаршрута.Свернуть("Ссылка,Отпечаток,Отозван,Наименование,ПрограммаБанка,ДействителенДо"); ОтпечаткиВМаршруте = СертификатыМаршрута.ВыгрузитьКолонку("Отпечаток"); - РазностьМассивов = ОбщегоНазначенияКлиентСервер.РазностьМассивов(МассивОтпечатков, ОтпечаткиВМаршруте); + РазностьМассивов = ОбщегоНазначенияКлиентСервер.РазностьМассивов(ОтпечаткиВМаршруте, МассивОтпечатков); НастройкаОбмена = НастройкиОбъектов.Получить(Документ).НастройкаОбмена; - Если СертификатыМаршрута.Количество() - И (СертификатыМаршрута[0].ПрограммаБанка = Перечисления.ПрограммыБанка.АсинхронныйОбмен + Если СертификатыМаршрута.Количество() > 0 + И (СертификатыМаршрута[0].ПрограммаБанка = Перечисления.ПрограммыБанка.АсинхронныйОбмен ИЛИ СертификатыМаршрута[0].ПрограммаБанка = Перечисления.ПрограммыБанка.АльфаБанкОнлайн) - И РазностьМассивов.Количество() = МассивОтпечатков.Количество() Тогда - ТекстСообщения = НСтр("ru = 'На компьютере не установлен необходимый сертификат подписи. - |Проверьте сертификаты подписей в настройке обмена с банком. - |Установите сертификат подписи в личное хранилище сертификатов.'"); + И РазностьМассивов.Количество() > 0 Тогда + + СертификатыМаршрутаНеДоступны = СертификатыМаршрута.СкопироватьКолонки(); + Для Каждого НедоступныйОтпечаток Из РазностьМассивов Цикл + СтрокаНайденногоСертификата = СертификатыМаршрута.Найти(НедоступныйОтпечаток, "Отпечаток"); + Если СтрокаНайденногоСертификата <> Неопределено Тогда + НоваяСтрока = СертификатыМаршрутаНеДоступны.Добавить(); + ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаНайденногоСертификата); + КонецЕсли; + КонецЦикла; + + Если СертификатыМаршрутаНеДоступны.Количество() = 1 Тогда + СтрокаУстановленСертификат = НСтр("ru = 'установлен сертификат'"); + СтрокаСертификатПодписи = НСтр("ru = 'сертификат подписи'"); + НаименованиеСертификата = СертификатыМаршрутаНеДоступны[0].Наименование; + Иначе + СтрокаУстановленСертификат = НСтр("ru = 'установлены сертификаты'"); + СтрокаСертификатПодписи = НСтр("ru = 'сертификаты подписей'"); + СтрокиСертификатов = СертификатыМаршрутаНеДоступны.ВыгрузитьКолонку("Наименование"); + НаименованиеСертификата = СтрСоединить(СтрокиСертификатов, ", "); + КонецЕсли; + ШаблонСообщения = НСтр("ru = 'На компьютере не %1 подписи: %2. + |Проверьте %3 в настройке обмена с банком. + |Установите %3 в личное хранилище сертификатов.'"); + ТекстСообщения = СтрШаблон(ШаблонСообщения, СтрокаУстановленСертификат, НаименованиеСертификата, СтрокаСертификатПодписи); ИначеЕсли СертификатыМаршрута.Количество() = 1 И СертификатыМаршрута[0].ДействителенДО < ТекущаяДатаСеанса() Тогда ШаблонСообщения = НСтр("ru = 'Закончился срок действия сертификата %1.'"); - ТекстСообщения = СтрШаблон(ШаблонСообщения, СертификатыМаршрута[0].Ссылка); + ТекстСообщения = СтрШаблон(ШаблонСообщения, СертификатыМаршрута[0].Наименование); ИначеЕсли НЕ НастройкиОбмена.ПараметрыОбмена.ЕстьДействующиеСертификатыВНастройкеОбмена Тогда ТекстСообщения = НСтр("ru = 'В настройке обмена с банком отсутствуют действующие сертификаты. |Получите новые настройки из банка.'"); Иначе - ТекстСообщения = НСтр("ru = 'Требуется подпись другого пользователя.'"); + ТекстСообщения = ТекстСообщенияПоСертификатамМаршрута(СообщениеОбмена, СертификатыНастройкиТаблица); КонецЕсли; ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, НастройкаОбмена); КонецЕсли; @@ -21655,13 +22390,6 @@ КонецПроцедуры -Процедура ОбработатьОшибку(Операция, ТекстОшибки, ТекстСообщения = "", СсылкаОбъект = Неопределено) - - ЭлектронноеВзаимодействие.ОбработатьОшибку( - Операция, ТекстОшибки, ТекстСообщения, "ОбменСБанками", СсылкаОбъект); - -КонецПроцедуры - Функция ВидОперацииФормированиеЭД() Возврат НСтр("ru = 'Формирование электронного документа'"); @@ -21670,27 +22398,6 @@ #КонецОбласти -#Область ПроверкаМетодовВызываемыхКакПроизвольныйКод - -// См. ОбщегоНазначенияПереопределяемый.ПриНастройкеПроверкиМетодовВызываемыхКакПроизвольныйКод. -Процедура ПриНастройкеПроверкиМетодовВызываемыхКакПроизвольныйКод(Настройки) Экспорт - - ИсключениеПроверки = Настройки.ИсключенияПроверки.Добавить(); - ИсключениеПроверки.ПолноеИмяОбъекта = "ОбщийМодуль.ОбменСБанкамиСлужебный"; - ИсключениеПроверки.ИмяПроцедуры = "СформироватьФайлыДокументов"; - ИсключениеПроверки.ФрагментСодержания = - "ОбщегоНазначения.ВыполнитьМетодКонфигурации(МетодЗаполненияДанных, ПараметрыПроцедуры)"; - - ИсключениеПроверки = Настройки.ИсключенияПроверки.Добавить(); - ИсключениеПроверки.ПолноеИмяОбъекта = "ОбщийМодуль.ОбменСБанкамиСлужебный"; - ИсключениеПроверки.ИмяПроцедуры = "СформироватьФайлыДокументов"; - ИсключениеПроверки.ФрагментСодержания = - "ОбщегоНазначения.ВыполнитьМетодКонфигурации(МетодФормированияЭД, ПараметрыПроцедуры)"; - -КонецПроцедуры - -#КонецОбласти - #Область Прочее Функция УзелМожетСодержатьНастройкуОбменаСБанками(ИмяУзла) @@ -22044,6 +22751,124 @@ КонецФункции +Функция ТекстСообщенияПоСертификатамМаршрута(СообщениеОбмена, СертификатыНастройкиТаблица) + + СостояниеПодписания = СведенияОТребуемыхСертификатахПоДокументу(СообщениеОбмена); + СертификатыПодписания = СостояниеПодписания.СертификатыПодписания; + ТребованиеПодписания = СостояниеПодписания.ТребованиеПодписания; + + Если СертификатыПодписания.Количество() = 0 Тогда + СертификатыПоНастройке = СведенияОТребуемыхСертификатахПоНастройке(СообщениеОбмена, СертификатыНастройкиТаблица, + ТребованиеПодписания); + СертификатыПодписания = СертификатыПоНастройке.СертификатыПодписания; + ТребованиеПодписания = СертификатыПоНастройке.ТребованиеПодписания; + КонецЕсли; + + СертификатыПодписания = ОбщегоНазначенияКлиентСервер.СвернутьМассив(СертификатыПодписания); + Если СертификатыПодписания.Количество() = 1 Тогда + СтрокаЭтиСертификаты = НСтр("ru = 'этому сертификату'"); + Иначе + СтрокаЭтиСертификаты = НСтр("ru = 'этим сертификатам'"); + КонецЕсли; + + ТекстСообщения = ""; + Если СертификатыПодписания.Количество() > 0 Тогда + СертификатыПодписанияСтрокой = СтрСоединить(СертификатыПодписания, ", "); + ТекстСообщения = СтрШаблон(НСтр("ru = '%1 %2. + |У текущего пользователя нет доступа к %3.'"), + ТребованиеПодписания, СертификатыПодписанияСтрокой, СтрокаЭтиСертификаты); + КонецЕсли; + + Возврат ТекстСообщения; + +КонецФункции + +Функция СведенияОТребуемыхСертификатахПоДокументу(СообщениеОбмена) + + Результат = Новый Структура; + Результат.Вставить("СертификатыПодписания", Новый Массив); + Результат.Вставить("ТребованиеПодписания", ""); + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ЕстьNULL(СостояниеПодписанияЭД.Сертификат.Представление, """") КАК СертификатПредставление, + | СостояниеПодписанияЭД.Требование + |ИЗ + | РегистрСведений.СостояниеПодписанияЭД КАК СостояниеПодписанияЭД + |ГДЕ + | СостояниеПодписанияЭД.Объект = &СообщениеОбмена + | И СостояниеПодписанияЭД.Текущий"; + + Запрос.УстановитьПараметр("СообщениеОбмена", СообщениеОбмена); + УстановитьПривилегированныйРежим(Истина); + РезультатЗапроса = Запрос.Выполнить(); + УстановитьПривилегированныйРежим(Ложь); + ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); + + ТребованиеПодписания = ""; + СертификатыПодписания = Новый Массив; + Пока ВыборкаДетальныеЗаписи.Следующий() Цикл + Если ВыборкаДетальныеЗаписи.Требование = Перечисления.ТребованияКПодписаниюЭД.И Тогда + ТребованиеПодписания = НСтр("ru = 'Требуется подписать следующими сертификатами:'"); + ИначеЕсли ВыборкаДетальныеЗаписи.Требование = Перечисления.ТребованияКПодписаниюЭД.ИЛИ Тогда + ТребованиеПодписания = НСтр("ru = 'Требуется подписать одним из сертификатов:'"); + ИначеЕсли ВыборкаДетальныеЗаписи.Требование = Перечисления.ТребованияКПодписаниюЭД.ПустаяСсылка() + И ВыборкаДетальныеЗаписи.СертификатПредставление <> "" Тогда + + СертификатыПодписания.Добавить(ВыборкаДетальныеЗаписи.СертификатПредставление); + КонецЕсли; + КонецЦикла; + + Результат.СертификатыПодписания = СертификатыПодписания; + + Если СертификатыПодписания.Количество() = 1 Тогда + ТребованиеПодписания = НСтр("ru = 'Требуется подписание сертификатом:'"); + КонецЕсли; + Результат.ТребованиеПодписания = ТребованиеПодписания; + + Возврат Результат; + +КонецФункции + +Функция СведенияОТребуемыхСертификатахПоНастройке(СообщениеОбмена, СертификатыНастройкиТаблица, ТребованиеПодписания) + + Результат = Новый Структура; + Результат.Вставить("СертификатыПодписания", Новый Массив); + Результат.Вставить("ТребованиеПодписания", ТребованиеПодписания); + + СертификатыСообщенияОбмена = Новый Массив; + ПодписиСообщенияОбмена = ПодписиСообщенияОбмена(СообщениеОбмена); + Для Каждого ПодписьСообщенияОбмена Из ПодписиСообщенияОбмена Цикл + СсылкаНаСертификат = ЭлектроннаяПодпись.СсылкаНаСертификат(ПодписьСообщенияОбмена.Отпечаток); + Если ЗначениеЗаполнено(СсылкаНаСертификат) Тогда + СертификатыСообщенияОбмена.Добавить(СсылкаНаСертификат); + КонецЕсли; + КонецЦикла; + + СертификатыНастройки = СертификатыНастройкиТаблица.ВыгрузитьКолонку("СертификатПодписи"); + СертификатыПодписи = ОбщегоНазначенияКлиентСервер.РазностьМассивов(СертификатыНастройки, СертификатыСообщенияОбмена); + + СертификатыПодписания = Новый Массив; + Для Каждого СертификатПодписи Из СертификатыПодписи Цикл + НайденнаяСтрока = СертификатыНастройкиТаблица.Найти(СертификатПодписи, "СертификатПодписи"); + Если НайденнаяСтрока <> Неопределено Тогда + СертификатыПодписания.Добавить(НайденнаяСтрока.НаименованиеСертификата); + КонецЕсли; + КонецЦикла; + + Результат.СертификатыПодписания = СертификатыПодписания; + + Если СертификатыПодписания.Количество() = 1 Тогда + ТребованиеПодписания = НСтр("ru = 'Требуется подписание сертификатом:'"); + КонецЕсли; + + Результат.ТребованиеПодписания = ТребованиеПодписания; + + Возврат Результат; + +КонецФункции + #КонецОбласти #Область РазборВыпискиБанка @@ -22920,7 +23745,7 @@ Процедура ПрочитатьВыписку1CBankExch(Stmt, ТаблицаВыписок) СтрокаВыписки = ТаблицаВыписок.Добавить(); - СтрокаВыписки.ДатаФормирования = XMLЗначение(Тип("Дата"), Stmt.creationDate); + СтрокаВыписки.ДатаФормирования = XMLЗначение(Тип("Дата"), ЗначениеСвойстваXDTO(Stmt, "creationDate")); СтрокаВыписки.ИдентификаторДокумента = ЗначениеСвойстваXDTO(Stmt, "id"); СтрокаВыписки.ИдентификаторЗапроса = ЗначениеСвойстваXDTO(Stmt, "ExtIDStatementRequest"); StmtData = Stmt.Data; @@ -22929,19 +23754,24 @@ ДатаНачала = XMLЗначение(Тип("Дата"), Сред(ДатаНачалаСтрокой, 1, 19)); КонецЕсли; СтрокаВыписки.НачалоПериода = ДатаНачала; - СтрокаВыписки.КонецПериода = XMLЗначение(Тип("Дата"), Сред(StmtData.DateTo, 1, 19)); - СтрокаВыписки.НомерСчета = StmtData.Account; + СтрокаВыписки.КонецПериода = XMLЗначение(Тип("Дата"), Сред(ЗначениеСвойстваXDTO(StmtData, "DateTo"), 1, 19)); + СтрокаВыписки.НомерСчета = ЗначениеСвойстваXDTO(StmtData, "Account"); Организация = Новый Структура; - Организация.Вставить("ИНН", ЗначениеСвойстваXDTO(Stmt.Recipient, "inn")); - Организация.Вставить("Наименование", ЗначениеСвойстваXDTO(Stmt.Recipient, "Name")); + Организация.Вставить("ИНН", ЗначениеСвойстваXDTO(Stmt, "Recipient.inn")); + Организация.Вставить("Наименование", ЗначениеСвойстваXDTO(Stmt, "Recipient.Name")); СтрокаВыписки.Организация = Организация; Банк = Новый Структура; - Банк.Вставить("БИК", Stmt.Sender.bic); - Банк.Вставить("Наименование", ЗначениеСвойстваXDTO(Stmt.Sender, "name")); + Банк.Вставить("БИК", ЗначениеСвойстваXDTO(Stmt, "Sender.bic")); + Банк.Вставить("Наименование", ЗначениеСвойстваXDTO(Stmt, "Sender.name")); СтрокаВыписки.Банк = Банк; + БанкВладелецСчета = Новый Структура; + БанкВладелецСчета.Вставить("БИК", ЗначениеСвойстваXDTO(StmtData, "Bank.BIC")); + БанкВладелецСчета.Вставить("Наименование", ЗначениеСвойстваXDTO(StmtData, "Bank.Name")); + СтрокаВыписки.БанкВладелецСчета = БанкВладелецСчета; + НачальныйОстаток = ЗначениеСвойстваXDTO(StmtData, "OpeningBalance"); НачальныйОстаток = ОбменСБанкамиКлиентСервер.ЧислоИзСтроки(НачальныйОстаток); НачальныйОстаток = ?(НачальныйОстаток = Неопределено, 0, НачальныйОстаток); @@ -22952,7 +23782,8 @@ ВсегоСписано = ЗначениеСвойстваXDTO(StmtData, "TotalDebits"); ВсегоСписано = ОбменСБанкамиКлиентСервер.ЧислоИзСтроки(ВсегоСписано); СтрокаВыписки.ОборотИсходящихПлатежей = ВсегоСписано; - СтрокаВыписки.КонечныйОстаток = ОбменСБанкамиКлиентСервер.ЧислоИзСтроки(StmtData.ClosingBalance); + СтрокаВыписки.КонечныйОстаток = ОбменСБанкамиКлиентСервер.ЧислоИзСтроки( + ЗначениеСвойстваXDTO(StmtData, "ClosingBalance")); ТаблицаОпераций = ТаблицаОперацийВыписки(); @@ -22972,16 +23803,16 @@ Stamp = ЗначениеСвойстваXDTO(StmtData, "Stamp"); Если Stamp <> Неопределено Тогда ПараметрыШтампа = Новый Структура; - ПараметрыШтампа.Вставить("БИК", ЗначениеСвойстваXDTO(StmtData.Stamp, "BIC")); - ПараметрыШтампа.Вставить("НаименованиеБанка", ЗначениеСвойстваXDTO(StmtData.Stamp, "Name")); - ПараметрыШтампа.Вставить("ГородБанка", ЗначениеСвойстваXDTO(StmtData.Stamp, "City")); - ПараметрыШтампа.Вставить("Отделение", ЗначениеСвойстваXDTO(StmtData.Stamp, "Branch")); + ПараметрыШтампа.Вставить("БИК", ЗначениеСвойстваXDTO(Stamp, "BIC")); + ПараметрыШтампа.Вставить("НаименованиеБанка", ЗначениеСвойстваXDTO(Stamp, "Name")); + ПараметрыШтампа.Вставить("ГородБанка", ЗначениеСвойстваXDTO(Stamp, "City")); + ПараметрыШтампа.Вставить("Отделение", ЗначениеСвойстваXDTO(Stamp, "Branch")); СтрокаВыписки.Штамп = ПараметрыШтампа; КонецЕсли; КонецПроцедуры -Функция ТаблицаОперацийВыписки() +Функция ТаблицаОперацийВыписки() Экспорт ТаблицаОпераций = Новый ТаблицаЗначений; ТаблицаОпераций.Колонки.Добавить("Статус"); @@ -22997,6 +23828,9 @@ ТаблицаОпераций.Колонки.Добавить("Получатель"); ТаблицаОпераций.Колонки.Добавить("ВидПлатежа"); ТаблицаОпераций.Колонки.Добавить("ВидОперации"); + ТаблицаОпераций.Колонки.Добавить("ВидОперацииЦР"); // Вид операции цифрового рубля + ТаблицаОпераций.Колонки.Добавить("MCC"); + ТаблицаОпераций.Колонки.Добавить("ПлатежнаяСсылкаЦР"); ТаблицаОпераций.Колонки.Добавить("Очередность"); ТаблицаОпераций.Колонки.Добавить("УникальныйИдентификаторПлатежа"); ТаблицаОпераций.Колонки.Добавить("КодВидаДохода"); @@ -24143,18 +24977,6 @@ КонецПроцедуры -// Получает пустую ссылку на справочник банков -// -// Возвращаемое значение: -// - СправочникСсылка.КлассификаторБанков -// - Неопределено - если справочник банков в конфигурации отсутствует -// -Функция ПустаяСсылкаНаСправочникБанки() Экспорт - - Возврат ПолучитьПустуюСсылку("Банки"); - -КонецФункции - // Возвращает статусы исходящих писем // // Возвращаемое значение: @@ -24903,6 +25725,31 @@ КонецФункции +#КонецОбласти + +#Область РаботаСОбъектами + +Функция ИмяСправочникаБанки() + + БанкОбменСБанками = Метаданные.ОпределяемыеТипы.БанкОбменСБанками.Тип; + ВозможныеТипы = БанкОбменСБанками.Типы(); + Если ВозможныеТипы.Количество() = 0 Тогда + ТекстОшибки = НСтр("ru = 'Не заполнен определяемый тип ""БанкОбменСБанками"".'"); + ВызватьИсключение ТекстОшибки; + КонецЕсли; + + НайденныеМетаданные = Метаданные.НайтиПоТипу(ВозможныеТипы[0]); + Если НайденныеМетаданные = Неопределено Тогда + ТекстОшибки = НСтр("ru = 'В определяемом типе ""БанкОбменСБанками"" нет ссылочного типа.'"); + ВызватьИсключение ТекстОшибки; + КонецЕсли; + + ИмяСправочника = НайденныеМетаданные.Имя; + + Возврат ИмяСправочника; + +КонецФункции + #КонецОбласти #КонецОбласти diff --git a/Конфигурация/CommonModules/ОбменСБанкамиСлужебныйВызовСервера/Ext/Module.bsl b/Конфигурация/CommonModules/ОбменСБанкамиСлужебныйВызовСервера/Ext/Module.bsl index baab24d8e..5a2ad1b1b 100644 --- a/Конфигурация/CommonModules/ОбменСБанкамиСлужебныйВызовСервера/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ОбменСБанкамиСлужебныйВызовСервера/Ext/Module.bsl @@ -372,21 +372,21 @@ КонецФункции -// Получает параметры обмена по ссылке на счет организации +// Возвращает параметры обмена для настройки обмена с банком. // // Параметры: -// НастройкаОбмена - СправочникСсылка.НастройкиОбменСБанками - ссылка на настройку обмена организации с банком +// НастройкаОбмена - СправочникСсылка.НастройкиОбменСБанками - ссылка на настройку обмена организации с банком. // Возвращаемое значение: -// Неопределено, Структура - При ошибке возвращается Неопределено. В остальных случая структура с полями: +// Неопределено, Структура - При ошибке возвращается Неопределено. В остальных случая структура с полями: // * РеквизитыСчета - Структура - реквизиты банковского счета организации: -// ** Организация - ОпределяемыйТип.Организация - ссылка на организацию -// ** Банк - ОпределяемыйТип.БанкОбменСБанками - ссылка на банк -// ** НомерСчета - Строка - номер счета +// ** Организация - ОпределяемыйТип.Организация - ссылка на организацию. +// ** Банк - ОпределяемыйТип.БанкОбменСБанками - ссылка на банк. +// ** НомерСчета - Строка - номер счета. // * РеквизитыНастройкиОбмена - Структура - содержит поля: -// ** ПрограммаБанка - ПеречислениеСсылка.ПрограммыБанка - программа банка -// ** ИмяВнешнегоМодуля - Строка - идентификатор внешней компоненты -// ** ИспользуетсяКриптография - Булево - признак использования криптографии -// ** АутентификацияПоСертификату - Булево - признак использования аутентификации по сертификату +// ** ПрограммаБанка - ПеречислениеСсылка.ПрограммыБанка - программа банка. +// ** ИмяВнешнегоМодуля - Строка - идентификатор внешней компоненты. +// ** ИспользуетсяКриптография - Булево - признак использования криптографии. +// ** АутентификацияПоСертификату - Булево - признак использования аутентификации по сертификату. // ** ДополнительнаяОбработка - СправочникСсылка.ДополнительныеОтчетыИОбработки - внешняя обработка. // * НастройкаОбмена - СправочникСсылка.НастройкиОбменСБанками - действующая настройка обмена с банком. // @@ -458,55 +458,19 @@ // Получает реквизиты банковского счета организации по БИК банка. // // Параметры: -// БИК - Строка - БИК банка +// БИК - Строка - БИК банка. // // Возвращаемое значение: // Структура - реквизиты счета. Содержит поля: // * Наименование - Строка - наименование банка. -// * Город - - ссылка на банк. +// * Город - Строка - город банка. // * БИК - Строка - БИК банка. +// * Банк - ОпределяемыйТип.БанкОбменСБанками - ссылка на банк. // Функция РеквизитыБанка(БИК) Экспорт - СтруктураВозврата = Новый Структура(); - СтруктураВозврата.Вставить("Наименование", ""); - СтруктураВозврата.Вставить("Город", ""); - СтруктураВозврата.Вставить("БИК", БИК); - СтруктураВозврата.Вставить("Ссылка", Неопределено); - ТипБанк = Метаданные.ОпределяемыеТипы.БанкОбменСБанками.Тип.Типы().Получить(0); - РеквизитНаименование = ОбменСБанкамиСлужебный.ИмяПрикладногоРеквизита("Банк.Наименование"); - РеквизитГород = ОбменСБанкамиСлужебный.ИмяПрикладногоРеквизита("Банк.Город"); - РеквизитБИК = ОбменСБанкамиСлужебный.ИмяПрикладногоРеквизита("Банк.БИК"); - СправочникБанки = Метаданные.НайтиПоТипу(ТипБанк); - - Запрос = Новый Запрос(); - Запрос.Текст = - "ВЫБРАТЬ ПЕРВЫЕ 1 - | Банки.Наименование КАК Наименование, - | Банки.Город КАК Город, - | Банки.ПометкаУдаления КАК ПометкаУдаления, - | Банки.Ссылка КАК Ссылка - |ИЗ - | Справочник.Банки КАК Банки - |ГДЕ - | Банки.Код = &БИК - | - |УПОРЯДОЧИТЬ ПО - | ПометкаУдаления"; - - Запрос.УстановитьПараметр("БИК", БИК); - Запрос.Текст = СтрЗаменить(Запрос.Текст, "Справочник.Банки", СтрШаблон("Справочник.%1", СправочникБанки.Имя)); - Запрос.Текст = СтрЗаменить(Запрос.Текст, "Банки.Код", СтрШаблон("Банки.%1", РеквизитБИК)); - - Выборка = Запрос.Выполнить().Выбрать(); - - Если Выборка.Следующий() Тогда - СтруктураВозврата.Наименование = Выборка[РеквизитНаименование]; - СтруктураВозврата.Город = Выборка[РеквизитГород]; - СтруктураВозврата.Ссылка = Выборка.Ссылка; - КонецЕсли; - - Возврат СтруктураВозврата; + ИмяПараметра = СтрШаблон("Банки.%1 = &Параметр", ОбменСБанкамиСлужебный.ИмяПрикладногоРеквизита("Банк.БИК")); + Возврат ОбменСБанкамиСлужебный.РеквизитыБанкаЗапросомПоПараметру(ИмяПараметра, БИК); КонецФункции @@ -1003,6 +967,50 @@ КонецФункции +// Получает параметры обмена по параметрам выписки. +// +// Параметры: +// ПараметрыВыписки - см. ОбменСБанкамиКлиентСервер.ПараметрыПолученияВыпискиБанка. +// Возвращаемое значение: +// Неопределено, Структура - При ошибке возвращается Неопределено. В остальных случая структура с полями: +// * РеквизитыСчета - Структура - реквизиты банковского счета организации: +// ** Организация - ОпределяемыйТип.Организация - ссылка на организацию. +// ** Банк - ОпределяемыйТип.БанкОбменСБанками - ссылка на банк. +// ** НомерСчета - Строка - номер счета. +// * РеквизитыНастройкиОбмена - Структура - содержит поля: +// ** ПрограммаБанка - ПеречислениеСсылка.ПрограммыБанка - программа банка. +// ** ИмяВнешнегоМодуля - Строка - идентификатор внешней компоненты. +// ** ИспользуетсяКриптография - Булево - признак использования криптографии. +// ** АутентификацияПоСертификату - Булево - признак использования аутентификации по сертификату. +// ** ДополнительнаяОбработка - СправочникСсылка.ДополнительныеОтчетыИОбработки - внешняя обработка. +// * НастройкаОбмена - СправочникСсылка.НастройкиОбменСБанками - действующая настройка обмена с банком. +// +Функция ПараметрыОбменаПоПараметрамВыписки(ПараметрыВыписки) Экспорт + + Если Не ОбменСБанками.ПравоВыполненияОбмена(Истина) Тогда + Возврат Неопределено; + КонецЕсли; + + РеквизитыОбмена = Новый Структура; + РеквизитыОбмена.Вставить("Организация", ПараметрыВыписки.Организация); + РеквизитыОбмена.Вставить("Банк", ПараметрыВыписки.БанкВладелец); + РеквизитыОбмена.Вставить("НастройкаОбмена", ПараметрыВыписки.НастройкаОбмена); + РеквизитыОбмена.Вставить("НомерСчета", ""); + + МассивБанковскихСчетов = ОбменСБанкамиСлужебный.НомераБанковскихСчетов( + ПараметрыВыписки.Организация, ПараметрыВыписки.БанкВладелец); + + Если МассивБанковскихСчетов.Количество() > 0 Тогда + НомерСчета = МассивБанковскихСчетов[0]; + РеквизитыОбмена.НомерСчета = НомерСчета; + КонецЕсли; + + СтруктураВозврата = ПараметрыОбменаПоРеквизитам(РеквизитыОбмена); + + Возврат СтруктураВозврата; + +КонецФункции + #КонецОбласти #Область ОперацииСВК @@ -2323,8 +2331,18 @@ ДатаНачала = ОбменСБанкамиСлужебный.ДатаНачалаЗапросаВыписки(НастройкаОбмена); ДатаОкончания = ТекущаяДатаСеанса(); + РеквизитыБанка = ОбменСБанкамиСлужебный.РеквизитыБанкаПоСсылке(РеквизитыНастройкиОбмена.Банк); + ДанныеБанковскихСчетов = ОбменСБанкамиСлужебный.НовыеДанныеБанковскихСчетов(); + + Для Каждого НомерСчета Из МассивБанковскихСчетов Цикл + НоваяСтрока = ДанныеБанковскихСчетов.Добавить(); + НоваяСтрока.НомерСчета = НомерСчета; + НоваяСтрока.БИК = РеквизитыБанка.БИК; + НоваяСтрока.НаименованиеБанка = РеквизитыБанка.Наименование; + НоваяСтрока.БанкВладелец = РеквизитыНастройкиОбмена.Банк; + КонецЦикла; МассивСообщенийЗапросов = ОбменСБанкамиСлужебный.МассивЗапросовВыпискиАсинхронныйОбмен( - НастройкаОбмена, ДатаНачала, ДатаОкончания, МассивБанковскихСчетов, Истина); + НастройкаОбмена, ДатаНачала, ДатаОкончания, ДанныеБанковскихСчетов, Истина); НовыйПакет = Неопределено; ОбменСБанкамиСлужебный.СоздатьПакетОбменСБанками( @@ -2825,7 +2843,7 @@ Макет = ОбменСБанкамиСлужебныйПовтИсп.СписокБанков(); - БИКБанка = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Банк, "Код"); + БИКБанка = ОбменСБанкамиСлужебный.БИК(Банк); КоличествоЗаписей = Макет.ВысотаТаблицы; Для Индекс = 2 По КоличествоЗаписей Цикл @@ -5495,6 +5513,21 @@ КонецФункции +// Производит поиск настройки обмена с банком по заданному отбору. Возвращает первую найденную настройку обмена. +// +// Параметры: +// ПараметрыОтбора - см. ОбменСБанкамиКлиентСервер.НовыеПараметрыОтбораНастройкиОбмена +// +// Возвращаемое значение: +// СправочникСсылка.НастройкиОбменСБанками, Неопределено - найденная настройка обмена с банком. +// +Функция НастройкаОбменаПоОтбору(Знач ПараметрыОтбора) Экспорт + + ТекущаяНастройкаОбмена = ОбменСБанкамиСлужебный.НастройкаОбменаПоОтбору(ПараметрыОтбора); + Возврат ТекущаяНастройкаОбмена; + +КонецФункции + // Определяет необходимость стандартной криптографии для обработки документов. // // Параметры: @@ -5628,7 +5661,11 @@ Если РеквизитыОбмена.Свойство("НастройкаОбмена") Тогда НастройкаОбмена = РеквизитыОбмена.НастройкаОбмена; Иначе - НастройкаОбмена = ОбменСБанкамиСлужебный.НастройкаОбмена(РеквизитыОбмена.Организация, РеквизитыОбмена.Банк); + ПараметрыОтбора = ОбменСБанкамиКлиентСервер.НовыеПараметрыОтбораНастройкиОбмена(); + ПараметрыОтбора.Организация = РеквизитыОбмена.Организация; + ПараметрыОтбора.Банк = РеквизитыОбмена.Банк; + ПараметрыОтбора.ОтборПоДополнительнымБанкам = Истина; + НастройкаОбмена = НастройкаОбменаПоОтбору(ПараметрыОтбора); КонецЕсли; Если НастройкаОбмена = Неопределено Тогда @@ -5642,10 +5679,11 @@ СтруктураВозврата = Новый Структура; СтруктураВозврата.Вставить("НастройкаОбмена", НастройкаОбмена); - РеквизитыНастройкиОбмена = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(НастройкаОбмена, "ПрограммаБанка, - |ИмяВнешнегоМодуля, ИспользуетсяКриптография, АутентификацияПоСертификату, ДополнительнаяОбработка, Банк"); + РеквизитыНастройкиОбмена = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(НастройкаОбмена, "Банк, ПрограммаБанка, + |ИмяВнешнегоМодуля, ИспользуетсяКриптография, АутентификацияПоСертификату, ДополнительнаяОбработка"); СтруктураВозврата.Вставить("РеквизитыНастройкиОбмена", РеквизитыНастройкиОбмена); + СтруктураВозврата.Вставить("РеквизитыСчета", РеквизитыОбмена); Запрос = Новый Запрос; @@ -6277,15 +6315,24 @@ ДатаНачала = НачалоДня(ДатаОкончания); КонецЕсли; - РеквизитыНастройкиОбмена = ОбщегоНазначения.ЗначенияРеквизитовОбъекта( - НастройкаОбмена, "Организация, Банк, ПрограммаБанка, ИспользуетсяКриптография"); + Если ЗначениеЗаполнено(ПараметрыПолученияВыписки.БанкВладелец) Тогда + РеквизитыНастройкиОбмена = ОбщегоНазначения.ЗначенияРеквизитовОбъекта( + НастройкаОбмена, "Организация, ПрограммаБанка, ИспользуетсяКриптография"); + + БанкВладелец = ПараметрыПолученияВыписки.БанкВладелец; + Иначе + РеквизитыНастройкиОбмена = ОбщегоНазначения.ЗначенияРеквизитовОбъекта( + НастройкаОбмена, "Организация, ПрограммаБанка, ИспользуетсяКриптография, Банк"); + + БанкВладелец = РеквизитыНастройкиОбмена.Банк; + КонецЕсли; Если ЗначениеЗаполнено(НомерСчета) Тогда МассивБанковскихСчетов = Новый Массив; МассивБанковскихСчетов.Добавить(НомерСчета); Иначе МассивБанковскихСчетов = ОбменСБанкамиСлужебный.НомераБанковскихСчетов( - РеквизитыНастройкиОбмена.Организация, РеквизитыНастройкиОбмена.Банк); + РеквизитыНастройкиОбмена.Организация, БанкВладелец); КонецЕсли; Если МассивБанковскихСчетов.Количество() = 0 Тогда @@ -6295,7 +6342,7 @@ ТекстСообщения = СтрШаблон( ШаблонСообщения, Строка(РеквизитыНастройкиОбмена.Организация), - Строка(РеквизитыНастройкиОбмена.Банк)); + Строка(БанкВладелец)); ВызватьИсключение ТекстСообщения; @@ -6303,10 +6350,21 @@ Если РеквизитыНастройкиОбмена.ПрограммаБанка = Перечисления.ПрограммыБанка.АльфаБанкОнлайн Тогда МассивСообщенийЗапросов = МассивЗапросовВыписки(НастройкаОбмена, РеквизитыНастройкиОбмена.Организация, - РеквизитыНастройкиОбмена.Банк, ДатаНачала, ДатаОкончания, МассивБанковскихСчетов); + БанкВладелец, ДатаНачала, ДатаОкончания, МассивБанковскихСчетов); Иначе + РеквизитыБанка = ОбменСБанкамиСлужебный.РеквизитыБанкаПоСсылке(БанкВладелец); + ДанныеБанковскихСчетов = ОбменСБанкамиСлужебный.НовыеДанныеБанковскихСчетов(); + + Для Каждого НомерСчета Из МассивБанковскихСчетов Цикл + НоваяСтрока = ДанныеБанковскихСчетов.Добавить(); + НоваяСтрока.НомерСчета = НомерСчета; + НоваяСтрока.БИК = РеквизитыБанка.БИК; + НоваяСтрока.НаименованиеБанка = РеквизитыБанка.Наименование; + НоваяСтрока.БанкВладелец = БанкВладелец; + КонецЦикла; + МассивСообщенийЗапросов = ОбменСБанкамиСлужебный.МассивЗапросовВыпискиАсинхронныйОбмен( - НастройкаОбмена, ДатаНачала, ДатаОкончания, МассивБанковскихСчетов, АвтоматическоеПолучение); + НастройкаОбмена, ДатаНачала, ДатаОкончания, ДанныеБанковскихСчетов, АвтоматическоеПолучение); КонецЕсли; Если НЕ МассивСообщенийЗапросов.Количество() Тогда @@ -7254,7 +7312,7 @@ КонецФункции -// Получает реквизиты банковского счета организации. +// Получает реквизиты настройки обмена с банком. // // Параметры: // Ссылка - СправочникСсылка.НастройкиОбменСБанками - ссылка на настройку обмена организации с банком diff --git a/Конфигурация/CommonModules/ОбменСБанкамиСлужебныйКлиент/Ext/Module.bsl b/Конфигурация/CommonModules/ОбменСБанкамиСлужебныйКлиент/Ext/Module.bsl index 289dbaf35..7b8c459b1 100644 --- a/Конфигурация/CommonModules/ОбменСБанкамиСлужебныйКлиент/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ОбменСБанкамиСлужебныйКлиент/Ext/Module.bsl @@ -3725,7 +3725,7 @@ Процедура ПодготовитьЗапросыВыписокДляОтправкиЧерезВК(Оповещение, НастройкаОбмена, ПараметрыЗапроса, ЭтоСинхронизация = Ложь) Экспорт НастройкиОбмена = Неопределено; - ПараметрыФормирования = Новый Структура("ДатаОкончания, ДатаНачала, НомерСчета"); + ПараметрыФормирования = ОбменСБанкамиКлиентСервер.ПараметрыПолученияВыпискиБанка(); ЗаполнитьЗначенияСвойств(ПараметрыФормирования, ПараметрыЗапроса); МассивЗапросов = ОбменСБанкамиСлужебныйВызовСервера.ЗапросыВыписок( НастройкаОбмена, ПараметрыФормирования, Новый Массив, НастройкиОбмена, ЭтоСинхронизация); @@ -3858,6 +3858,26 @@ КонецФункции +// Изменяет режим отображения символов поля с секретными данными. +// +// Параметры: +// Форма - ФормаКлиентскогоПриложения - форма, на которой обрабатываются секретные данные. +// Элемент - ПолеФормы - элемент формы с секретными данными. +// ИмяРеквизита - Строка - имя реквизита формы для обновления данных. +// +Процедура ОтобразитьСекретныеДанные(Форма, Элемент, ИмяРеквизита, СтандартнаяОбработка) Экспорт + + СтандартнаяОбработка = Ложь; + Форма[ИмяРеквизита] = Элемент.ТекстРедактирования; + Элемент.РежимПароля = Не Элемент.РежимПароля; + Если Элемент.РежимПароля Тогда + Элемент.КартинкаКнопкиВыбора = БиблиотекаКартинок.ВводимыеСимволыВидны; + Иначе + Элемент.КартинкаКнопкиВыбора = БиблиотекаКартинок.ВводимыеСимволыСкрыты; + КонецЕсли; + +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -7103,7 +7123,11 @@ КонецЕсли; Если ДополнительныеПараметры.РеквизитыНастройкиОбмена.АутентификацияПоСертификату Тогда - ПослеПолученияОтпечатковВыполнитьОбмен(ДополнительныеПараметры.ОтпечаткиСертификатов, ДополнительныеПараметры); + Если Не Результат.Отказ Тогда + ПослеПолученияОтпечатковВыполнитьОбмен(ДополнительныеПараметры.ОтпечаткиСертификатов, ДополнительныеПараметры); + ИначеЕсли ДополнительныеПараметры.Свойство("ОповещениеПослеСинхронизации") Тогда + ВыполнитьОбработкуОповещения(ДополнительныеПараметры.ОповещениеПослеСинхронизации, Ложь); + КонецЕсли; ИначеЕсли ПарольКСертификатуПолучен(ДополнительныеПараметры.НастройкаОбмена, ДанныеАвторизации) Тогда Если ДанныеАвторизации = Неопределено Тогда ДополнительныеПараметры.Вставить("ТребуетсяАвторизация", Ложь); @@ -8609,6 +8633,7 @@ ПараметрыФормы = Новый Структура(); ПараметрыФормы.Вставить("ИдентификаторСессии", Результат.ИдентификаторСессии); ПараметрыФормы.Вставить("Телефон", Результат.МаскаТелефона); + ПараметрыФормы.Вставить("НастройкаОбмена", НастройкаОбмена); ОписаниеОповещенияОдноразовыйПароль = Новый ОписаниеОповещения("ОтправитьОдноразовыйПарольSMSВБанк", ЭтотОбъект, Параметры); ОткрытьФорму("Обработка.ОбменСБанками.Форма.ЗапросОдноразовогоПароля", ПараметрыФормы, , , , , @@ -8699,6 +8724,12 @@ Процедура ЗапроситьВыпискуПослеПолученияМаркераБанка(ИдентификаторСессии, Параметры) Экспорт Если НЕ ЗначениеЗаполнено(ИдентификаторСессии) Тогда + Если Параметры.Свойство("ОповещениеПослеПолученияВыписки") Тогда + Результат = Новый Структура; + Результат.Вставить("Успех", Ложь); + Результат.Вставить("Ошибка", НСтр("ru = 'Возникли проблемы с подключением.'")); + ВыполнитьОбработкуОповещения(Параметры.ОповещениеПослеПолученияВыписки, Результат); + КонецЕсли; Возврат; КонецЕсли; @@ -9084,7 +9115,9 @@ ДополнительныеПараметры = Новый Структура("НастройкиОбъектов, Действия", НастройкиОбъектов, Действия); Оповещение = Новый ОписаниеОповещения( "ОбработатьДокументыПослеСозданияНастройкиОбмена", ЭтотОбъект, ДополнительныеПараметры); - ОбменСБанкамиКлиент.ОткрытьСоздатьНастройкуОбмена(Организация, Банк, , Оповещение); + ПараметрыНастройки = Новый Структура; + ПараметрыНастройки.Вставить("ТребуетсяПолныйОбмен", Истина); + ОбменСБанкамиКлиент.ОткрытьСоздатьНастройкуОбмена(Организация, Банк, , Оповещение, ПараметрыНастройки); Иначе Параметры = Новый Структура("НастройкиОбъектов, Действия", НастройкиОбъектов, Действия); ОткрытьФорму("Справочник.НастройкиОбменСБанками.Форма.СозданиеНастроекОбмена", Параметры, , , , , , @@ -9406,10 +9439,8 @@ РезультатОтправки = ДополнительныеПараметры.РезультатОтправки; - ЕстьОшибка = Ложь; - Если ЗначениеЗаполнено(РезультатОтправки.ТекстОшибки) Тогда - ОбщегоНазначенияКлиент.СообщитьПользователю(РезультатОтправки.ТекстОшибки, , , , ЕстьОшибка); + ОбщегоНазначенияКлиент.СообщитьПользователю(РезультатОтправки.ТекстОшибки); КонецЕсли; Отправлено = РезультатОтправки.КоличествоОтправленныхПакетов; @@ -9417,25 +9448,54 @@ Если РезультатПолучения = Неопределено Тогда // отменено пользователем или критичная ошибка Получено = 0; Оповестить("ОбновитьСостояниеОбменСБанками"); // для отправленных документов - ЕстьОшибка = Истина; + ПоказатьРезультатСинхронизации(Отправлено, Получено); + ВыполнитьОбработкуОповещения(ДополнительныеПараметры.ОповещениеПослеСинхронизации, Ложь); Иначе Получено = РезультатПолучения.КоличествоПолученныхПакетов; ВызватьОповещения(РезультатПолучения); - Если РезультатПолучения.Свойство("ДанныеЭП") И РезультатПолучения.ДанныеЭП.Количество() Тогда - Оповещение = Новый ОписаниеОповещения; - Для Каждого КлючЗначение Из РезультатПолучения.ДанныеЭП Цикл - ДобавитьПодписиИОпределитьСтатусы(Оповещение, КлючЗначение.Ключ, КлючЗначение.Значение); - КонецЦикла; + Если РезультатПолучения.Свойство("ДанныеЭП") Тогда + ПараметрыОбработкиПодписей = Новый Структура; + ПараметрыОбработкиПодписей.Вставить("ДанныеЭП", РезультатПолучения.ДанныеЭП); + ПараметрыОбработкиПодписей.Вставить("ПараметрОповещения", РезультатПолучения.ПараметрОповещения); + ПараметрыОбработкиПодписей.Вставить("Отправлено", Отправлено); + ПараметрыОбработкиПодписей.Вставить("Получено", Получено); + ПараметрыОбработкиПодписей.Вставить("ОповещениеПослеСинхронизации", + ДополнительныеПараметры.ОповещениеПослеСинхронизации); + ОбработатьДанныеЭП(ПараметрыОбработкиПодписей); КонецЕсли; - - Оповестить("ОбновитьСостояниеОбменСБанками", РезультатПолучения.ПараметрОповещения); КонецЕсли; - ПоказатьРезультатСинхронизации(Отправлено, Получено); - - ВыполнитьОбработкуОповещения(ДополнительныеПараметры.ОповещениеПослеСинхронизации, Не ЕстьОшибка); - +КонецПроцедуры + +Процедура ОбработатьДанныеЭП(ДополнительныеПараметры) + + Если ДополнительныеПараметры.ДанныеЭП.Количество() = 0 Тогда + Оповестить("ОбновитьСостояниеОбменСБанками", ДополнительныеПараметры.ПараметрОповещения); + ПоказатьРезультатСинхронизации(ДополнительныеПараметры.Отправлено, ДополнительныеПараметры.Получено); + ЕстьОшибка = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ДополнительныеПараметры, "ЕстьОшибка", Ложь); + ВыполнитьОбработкуОповещения(ДополнительныеПараметры.ОповещениеПослеСинхронизации, Не ЕстьОшибка); + Возврат; + КонецЕсли; + + Для Каждого КлючЗначение Из ДополнительныеПараметры.ДанныеЭП Цикл + Прервать; + КонецЦикла; + + ДополнительныеПараметры.ДанныеЭП.Удалить(КлючЗначение.Ключ); + + Оповещение = Новый ОписаниеОповещения("ПослеОбработкиОдногоСообщения", ЭтотОбъект, ДополнительныеПараметры); + ДобавитьПодписиИОпределитьСтатусы(Оповещение, КлючЗначение.Ключ, КлючЗначение.Значение); + +КонецПроцедуры + +Процедура ПослеОбработкиОдногоСообщения(Результат, ДополнительныеПараметры) Экспорт + + Если Не Результат Тогда + ДополнительныеПараметры.Вставить("ЕстьОшибка", Истина); + КонецЕсли; + + ОбработатьДанныеЭП(ДополнительныеПараметры); КонецПроцедуры // Получает новые документы из банка. diff --git a/Конфигурация/CommonModules/ОбменСБанкамиСлужебныйКлиентСервер/Ext/Module.bsl b/Конфигурация/CommonModules/ОбменСБанкамиСлужебныйКлиентСервер/Ext/Module.bsl index 0d0b298e5..dd547069f 100644 --- a/Конфигурация/CommonModules/ОбменСБанкамиСлужебныйКлиентСервер/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ОбменСБанкамиСлужебныйКлиентСервер/Ext/Module.bsl @@ -238,6 +238,25 @@ #КонецОбласти +#Область Функциональность + +// Определяет доступную функциональность обмена с банками. +// Используется для включения или отключения отдельных возможностей. +// +// Возвращаемое значение: +// Структура - настройки доступной функциональности: +// * ЗагрузкаВыписокДругихБанков - Булево - признак использования интеграторов. +// Если Истина, то интеграторы будут использоваться при работе с банками. +Функция НовыйДоступнаяФункциональность() Экспорт + + Функциональность = Новый Структура; + Функциональность.Вставить("ЗагрузкаВыписокДругихБанков", Ложь); + + Возврат Функциональность; +КонецФункции + +#КонецОбласти + #КонецОбласти #Область СлужебныеПроцедурыИФункции diff --git a/Конфигурация/CommonModules/ОбменСБанкамиЦифровойРубль.xml b/Конфигурация/CommonModules/ОбменСБанкамиЦифровойРубль.xml new file mode 100644 index 000000000..cf0b773ec --- /dev/null +++ b/Конфигурация/CommonModules/ОбменСБанкамиЦифровойРубль.xml @@ -0,0 +1,23 @@ + + + + + ОбменСБанкамиЦифровойРубль + + + ru + Обмен с банками цифровой рубль + + + + false + false + true + true + true + false + false + DontUse + + + \ No newline at end of file diff --git a/Конфигурация/CommonModules/ОбменСБанкамиЦифровойРубль/Ext/Module.bsl b/Конфигурация/CommonModules/ОбменСБанкамиЦифровойРубль/Ext/Module.bsl new file mode 100644 index 000000000..c2a6b78a6 --- /dev/null +++ b/Конфигурация/CommonModules/ОбменСБанкамиЦифровойРубль/Ext/Module.bsl @@ -0,0 +1,895 @@ +#Область ПрограммныйИнтерфейс + +#Область ЗагрузкаИсторииОпераций + +// Возвращает данные истории операций по счету цифрового рубля +// +// Параметры: +// ДвоичныеДанныеФайла - Двоичные данные - данные файла с историей операций по счет ЦР +// РеквизитыОрганизации - Структура - реквизиты организации, содержит поля: +// * ИНН - Строка - ИНН организации +// * КПП - Строка - КПП организации +// * Наименование - Строка - наименование организации +// * НаименованиеМеждународное - Строка,Неопределено - международное наименование организации (необязательный) +// * НомерСчета - Строка - номер счета цифрового рубля (20 знаков) +// * ИдентификаторЦифровогоСчета - Строка - идентификатор счета цифрового рубля (до 70 знаков) +// +// Возвращаемое значение: +// Дерево - разобранная история операций (см. ДеревоЭлектронногоДокументаБЭДСлужебный.ДеревоЭлектронногоДокумента) +// +Функция ДанныеИсторииОпераций(ДвоичныеДанныеФайла, РеквизитыОрганизации) Экспорт + + // По схеме cbdc.011.001.04_ReturnOrganisationWalletInfo_2026.07.xsd + + ДанныеОрганизации = Новый Структура("ИНН, Наименование, НаименованиеМеждународное"); + ДанныеБанка = Новый Структура("БИК, SWIFT, Наименование, НаименованиеМеждународное"); + + ЗаполнитьЗначенияСвойств(ДанныеОрганизации, РеквизитыОрганизации); + + ДанныеБанка.БИК = БИКПлатформыЦифровогоРубля(); + ДанныеБанка.Наименование = НаименованиеПлатформыЦифровогоРубля(); + + ОбъектXML = Новый ЧтениеXML; + + Попытка + ОбъектXML.ОткрытьПоток(ДвоичныеДанныеФайла.ОткрытьПотокДляЧтения()); + Statement = ФабрикаXDTO.ПрочитатьXML(ОбъектXML); + Исключение + РазборВыпискиВызыватьИсключение(); + КонецПопытки; + + ОбъектXML.Закрыть(); + + RtrWlltInf = ЗначениеСвойстваXDTO(Statement, "RtrWlltInf"); + Если RtrWlltInf = Неопределено Или ЗначениеСвойстваXDTO(RtrWlltInf, "Rpt") = Неопределено Тогда + РазборВыпискиВызыватьИсключение(); + КонецЕсли; + + // Детальные отчеты по Кошельку + Если ТипЗнч(RtrWlltInf.Rpt) = Тип("ОбъектXDTO") Тогда // Report + Выписки = Новый Массив; + Выписки.Добавить(RtrWlltInf.Rpt); + Иначе + Выписки = RtrWlltInf.Rpt; + КонецЕсли; + + ИдентификаторДокумента = ЗначениеСвойстваXDTO(RtrWlltInf, "MsgHdr.MsgId"); + ДатаФормирования = ЗначениеСвойстваXDTO(RtrWlltInf, "MsgHdr.CreDt"); + + ТаблицаВыписок = ОбменСБанкамиСлужебный.ТаблицаВыписок(); + + Для Каждого Выписка Из Выписки Цикл + СтрокаВыписки = ТаблицаВыписок.Добавить(); + СтрокаВыписки.Организация = ДанныеОрганизации; + СтрокаВыписки.Банк = ДанныеБанка; + ЗаполнитьШапку(СтрокаВыписки, Выписка, ДатаФормирования, ИдентификаторДокумента, РеквизитыОрганизации); + + // Информация по операциям + Операции = ЗначениеСвойстваXDTO(Выписка, "OprtnsInf"); // OperationsInformation + Если Операции = Неопределено Тогда + Продолжить; + КонецЕсли; + + ТаблицаОпераций = ОбменСБанкамиСлужебный.ТаблицаОперацийВыписки(); + Если ТипЗнч(Операции) = Тип("ОбъектXDTO") Тогда + ПрочитатьОперациюВыписки(СтрокаВыписки, Операции, ТаблицаОпераций, РеквизитыОрганизации); + Иначе + Для Каждого Операция Из Операции Цикл + ПрочитатьОперациюВыписки(СтрокаВыписки, Операция, ТаблицаОпераций, РеквизитыОрганизации); + КонецЦикла; + КонецЕсли; + + СтрокаВыписки.Операции = ТаблицаОпераций; + КонецЦикла; + + ПрочитанныеДанныеСервиса = ТаблицаВыписокБанкаВДерево(ТаблицаВыписок); + + Возврат ПрочитанныеДанныеСервиса; + +КонецФункции + +#КонецОбласти + +#Область ВидыОперацийЦР + +// Перевод цифровой валюты от Клиента - ЮЛ Клиенту - ЮЛ +// +// Возвращаемое значение: +// Строка +// +Функция ОперацияB2B() Экспорт + + Возврат "BTOB"; + +КонецФункции + +// Перевод цифровой валюты от Клиента - ФЛ Клиенту - ЮЛ +// +// Возвращаемое значение: +// Строка +// +Функция ОперацияC2B() Экспорт + + Возврат "CTOB"; + +КонецФункции + +// Возврат цифровой валюты от Клиента - ЮЛ Клиенту - ФЛ +// +// Возвращаемое значение: +// Строка +// +Функция ОперацияB2C() Экспорт + + Возврат "BTOC"; + +КонецФункции + +// Обмен Клиентом ЦР на безналичные средства +// +// Возвращаемое значение: +// Строка +// +Функция ОперацияDCSE() Экспорт + + Возврат "DCSE"; + +КонецФункции + +// Обмен Клиентом безналичных средств на ЦР +// +// Возвращаемое значение: +// Строка +// +Функция ОперацияDCBU() Экспорт + + Возврат "DCBU"; + +КонецФункции + +// Возврат цифровой валюты +// +// Возвращаемое значение: +// Строка +// +Функция ОперацияDCRF() Экспорт + + Возврат "DCRF"; + +КонецФункции + +// Перевод Клиентом ЮЛ в бюджет +// +// Возвращаемое значение: +// Строка +// +Функция ОперацияB2G() Экспорт + + Возврат "BTOG"; + +КонецФункции + +// Выплата ЦР из бюджета Клиенту ЮЛ +// +// Возвращаемое значение: +// Строка +// +Функция ОперацияG2B() Экспорт + + Возврат "GTOB"; + +КонецФункции + +// Выплата Оператором по обращению СЛ или Клиента +// +// Возвращаемое значение: +// Строка +// +Функция ОперацияOPTR() Экспорт + + Возврат "OPTR"; + +КонецФункции + +// Другие операции +// +// Возвращаемое значение: +// Строка +// +Функция ОперацияOOPN() Экспорт + + Возврат "OOPN"; + +КонецФункции + +#КонецОбласти + +#Область РеквизитыПлатформыЦифровогоРубля + +// Возвращает БИК платформы цифрового рубля +// +// Возвращаемое значение: +// Строка +// +Функция БИКПлатформыЦифровогоРубля() Экспорт + + БИК = "044595002"; + + Возврат БИК; + +КонецФункции + +// Возвращает номер счета платформы цифрового рубля +// +// Возвращаемое значение: +// Строка +// +Функция НомерСчетаПлатформыЦифровогоРубля() Экспорт + + Счет = "30000810945950000002"; + + Возврат Счет; + +КонецФункции + +// Возвращает наименование платформы цифрового рубля +// +// Возвращаемое значение: +// Строка +// +Функция НаименованиеПлатформыЦифровогоРубля() Экспорт + + Наименование = НСтр("ru = 'Оператор платформы цифрового рубля'"); + + Возврат Наименование; + +КонецФункции + +// Возвращает реквизиты оператора платформы цифрового рубля +// +// Возвращаемое значение: +// Структура - реквизиты оператора платформы цифрового рубля. Содержит поля: +// * Наименование - Строка - Наименование оператора платформы цифрового рубля +// * ИНН - Строка - ИНН Банка России +// * КПП - Строка - КПП Банка России +// * ОГРН - Строка - ОГРН Банка России +// * ПлатежныеРеквизиты - Структура - платежные реквизиты оператора. Содержит поля: +// ** Наименование - Строка - Наименование банка +// ** БИК - Строка - БИК банка +// ** КоррСчет - Строка - КоррСчет банка +// +Функция РеквизитыОператораПлатформыЦифровогоРубля() Экспорт + + ПлатежныеРеквизиты = Новый Структура; + ПлатежныеРеквизиты.Вставить("Наименование", НаименованиеПлатформыЦифровогоРубля()); + ПлатежныеРеквизиты.Вставить("БИК", БИКПлатформыЦифровогоРубля()); + ПлатежныеРеквизиты.Вставить("КоррСчет", НомерСчетаПлатформыЦифровогоРубля()); + + Реквизиты = Новый Структура; + Реквизиты.Вставить("Наименование", НаименованиеКонтрагентаЦБ()); + Реквизиты.Вставить("ИНН", ИННПлатформыЦифровогоРубля()); + Реквизиты.Вставить("КПП", КПППлатформыЦифровогоРубля()); + Реквизиты.Вставить("ОГРН", ОГРНПлатформыЦифровогоРубля()); + Реквизиты.Вставить("ПлатежныеРеквизиты", ПлатежныеРеквизиты); + + Возврат Реквизиты; + +КонецФункции + +#КонецОбласти + +#Область БанковскийСчет + +// Возвращает результат проверки номера на формат идентификатора цифрового счета +// +// Параметры: +// Идентификатор - Строка - номер банковского счета или идентификатор кошелька цифрового рубля. +// +// Возвращаемое значение: +// Булево - признак цифрового рубля. +// +Функция ЭтоИдентификаторЦифровогоСчета(Идентификатор) Экспорт + + Если Не ЗначениеЗаполнено(Идентификатор) Тогда + Возврат Ложь; + КонецЕсли; + + ШаблонЦР = "g\.[a-z]{2}\.cbrdc\.wlt\.[a-z0-9]{2,5}\.[a-f0-9]{8}-[a-f0-9]{4}-4[a-f0-9]{3}-[89ab][a-f0-9]{3}-[a-f0-9]{12}$"; + Результат = СтрНайтиПоРегулярномуВыражению(Идентификатор, ШаблонЦР); + + Возврат Результат.НачальнаяПозиция > 0; + +КонецФункции + +#КонецОбласти + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +#Область ИсторияОперацийСлужебная + +Процедура ЗаполнитьШапку(СтрокаВыписки, Выписка, ДатаФормирования, ИдДокумента, РеквизитыОрганизации) + + СтрокаВыписки.ДатаФормирования = XMLЗначение(Тип("Дата"), ДатаФормирования); + СтрокаВыписки.ИдентификаторДокумента = ИдДокумента; + + СтрокаВыписки.ИдентификаторЦифровогоСчета = ЗначениеСвойстваXDTO(Выписка, "WlltPtyInf.Id"); + Если СтрокаВыписки.ИдентификаторЦифровогоСчета <> РеквизитыОрганизации.ИдентификаторЦифровогоСчета Тогда + ВызватьИсключение СтрШаблон(НСтр("ru = 'Неизвестный счет ЦР в выписке %1'"), + СтрокаВыписки.ИдентификаторЦифровогоСчета); + КонецЕсли; + + DCAcctNb = ЗначениеСвойстваXDTO(Выписка, "WlltPtyInf.DCAcctNb"); // DCAccountNumber + Если DCAcctNb <> Неопределено Тогда + СтрокаВыписки.НомерСчета = DCAcctNb.Id; // 20-значный + КонецЕсли; + + Prd = ЗначениеСвойстваXDTO(Выписка, "Prd"); + Если Prd <> Неопределено Тогда + СтрокаВыписки.НачалоПериода = XMLЗначение(Тип("Дата"), ЗначениеСвойстваXDTO(Prd, "FrDtTm", ТекущаяДатаСеанса())); + СтрокаВыписки.КонецПериода = XMLЗначение(Тип("Дата"), ЗначениеСвойстваXDTO(Prd, "ToDtTm", ТекущаяДатаСеанса())); + КонецЕсли; + + // Остатки + OpngBal = ЗначениеСвойстваXDTO(Выписка, "OpngBal"); + Если OpngBal <> Неопределено Тогда + НачальныйОстатокПоследовательность = ЗначениеСвойстваXDTO(OpngBal, "TtlAmt"); + Если ТипЗнч(НачальныйОстатокПоследовательность) = Тип("ОбъектXDTO") Тогда + НачальныйОстатокСтрокой = ""; + НачальныйОстатокСтрокойПоследовательность = НачальныйОстатокПоследовательность.Последовательность(); + Если НачальныйОстатокСтрокойПоследовательность.Количество() > 0 Тогда + НачальныйОстатокСтрокой = НачальныйОстатокСтрокойПоследовательность.ПолучитьТекст(0); + КонецЕсли; + + СтрокаВыписки.НачальныйОстаток = XMLЗначение(Тип("Число"), НачальныйОстатокСтрокой); + КонецЕсли; + КонецЕсли; + + OutgngBal = ЗначениеСвойстваXDTO(Выписка, "OutgngBal"); + Если OutgngBal <> Неопределено Тогда + КонечныйОстатокПоследовательность = ЗначениеСвойстваXDTO(OutgngBal, "TtlAmt"); + Если ТипЗнч(КонечныйОстатокПоследовательность) = Тип("ОбъектXDTO") Тогда + КонечныйОстатокСтрокой = ""; + КонечныйОстатокСтрокойПоследовательность = КонечныйОстатокПоследовательность.Последовательность(); + Если КонечныйОстатокСтрокойПоследовательность.Количество() > 0 Тогда + КонечныйОстатокСтрокой = КонечныйОстатокСтрокойПоследовательность.ПолучитьТекст(0); + КонецЕсли; + + СтрокаВыписки.КонечныйОстаток = XMLЗначение(Тип("Число"), КонечныйОстатокСтрокой); + КонецЕсли; + КонецЕсли; + + // Обороты + TtlAmtCdt = ЗначениеСвойстваXDTO(Выписка, "TtlAmtCdt"); + Если TtlAmtCdt <> Неопределено Тогда + ОборотВходящихПлатежейПоследовательность = ЗначениеСвойстваXDTO(TtlAmtCdt, "TtlAmt"); + Если ТипЗнч(ОборотВходящихПлатежейПоследовательность) = Тип("ОбъектXDTO") Тогда + ОборотВходящихПлатежейСтрокой = ""; + ОборотВходящихПлатежейСтрокойПоследовательность = ОборотВходящихПлатежейПоследовательность.Последовательность(); + Если ОборотВходящихПлатежейСтрокойПоследовательность.Количество() > 0 Тогда + ОборотВходящихПлатежейСтрокой = ОборотВходящихПлатежейСтрокойПоследовательность.ПолучитьТекст(0); + КонецЕсли; + + СтрокаВыписки.ОборотВходящихПлатежей = XMLЗначение(Тип("Число"), ОборотВходящихПлатежейСтрокой); + КонецЕсли; + КонецЕсли; + + TtlAmtDbt = ЗначениеСвойстваXDTO(Выписка, "TtlAmtDbt"); + Если TtlAmtDbt <> Неопределено Тогда + ОборотИсходящихПлатежейПоследовательность = ЗначениеСвойстваXDTO(TtlAmtDbt, "TtlAmt"); + Если ТипЗнч(ОборотИсходящихПлатежейПоследовательность) = Тип("ОбъектXDTO") Тогда + ОборотИсходящихПлатежейСтрокой = ""; + ОборотИсходящихПлатежейСтрокойПоследовательность = ОборотИсходящихПлатежейПоследовательность.Последовательность(); + Если ОборотИсходящихПлатежейСтрокойПоследовательность.Количество() > 0 Тогда + ОборотИсходящихПлатежейСтрокой = ОборотИсходящихПлатежейСтрокойПоследовательность.ПолучитьТекст(0); + КонецЕсли; + + СтрокаВыписки.ОборотИсходящихПлатежей = XMLЗначение(Тип("Число"), ОборотИсходящихПлатежейСтрокой); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +Процедура ПрочитатьОперациюВыписки(СтрокаВыписки, Операция, ТаблицаОпераций, РеквизитыОрганизации) + + НовСтрока = ТаблицаОпераций.Добавить(); + НовСтрока.ВидОперацииЦР = ВРег(ЗначениеСвойстваXDTO(Операция, "Tp", ОперацияOOPN())); + + СуммаПоследовательность = ЗначениеСвойстваXDTO(Операция, "Amt.TtlAmt"); + Если ТипЗнч(СуммаПоследовательность) = Тип("ОбъектXDTO") Тогда + СуммаСтрокой = ""; + СуммаСтрокойПоследовательность = СуммаПоследовательность.Последовательность(); + Если СуммаСтрокойПоследовательность.Количество() > 0 Тогда + СуммаСтрокой = СуммаСтрокойПоследовательность.ПолучитьТекст(0); + КонецЕсли; + НовСтрока.СуммаДокумента = XMLЗначение(Тип("Число"), СуммаСтрокой); + КонецЕсли; + + КредитДебет = ЗначениеСвойстваXDTO(Операция, "CdtDbtInd", "DBIT"); + НовСтрока.НаправлениеПлатежа = ?(КредитДебет = "DBIT", "1", "2"); + + НовСтрока.НомерДокумента = ЗначениеСвойстваXDTO(Операция, "OprId"); + НовСтрока.ДатаОперации = XMLЗначение(Тип("Дата"), ЗначениеСвойстваXDTO(Операция, "SttlmDtTm")); + НовСтрока.ДатаДокумента = НовСтрока.ДатаОперации; + НовСтрока.ВидДокумента = "ПлатежноеПоручение"; + НовСтрока.ВидОперации = "01"; // Платежное поручение + НовСтрока.Очередность = 5; // Очередность платежа "по умолчанию" + + ДебитКредит = ЗначениеСвойстваXDTO(Операция, "CdtDbtInd"); + + Если ДебитКредит = "CRDT" Тогда + Сторона = "Плательщик"; + ПротивоположнаяСторона = "Получатель"; + Иначе + Сторона = "Получатель"; + ПротивоположнаяСторона = "Плательщик"; + КонецЕсли; + + Если ЗначениеЗаполнено(РеквизитыОрганизации.ИНН) Тогда + НовСтрока[ПротивоположнаяСторона] = Новый Структура; + НовСтрока[ПротивоположнаяСторона].Вставить("ИНН", РеквизитыОрганизации.ИНН); + Если СтрДлина(РеквизитыОрганизации.ИНН) = 10 Тогда + НовСтрока[ПротивоположнаяСторона].Вставить("КПП", РеквизитыОрганизации.КПП); + КонецЕсли; + НовСтрока[ПротивоположнаяСторона].Вставить("Наименование", РеквизитыОрганизации.Наименование); + НовСтрока[ПротивоположнаяСторона].Вставить("РасчСчет", СтрокаВыписки.НомерСчета); + НовСтрока[ПротивоположнаяСторона].Вставить("ИдентификаторЦифровогоСчета", СтрокаВыписки.ИдентификаторЦифровогоСчета); + НовСтрока[ПротивоположнаяСторона].Вставить("Банк", Новый Структура); + НовСтрока[ПротивоположнаяСторона].Банк.Вставить("БИК", БИКПлатформыЦифровогоРубля()); + НовСтрока[ПротивоположнаяСторона].Банк.Вставить("КоррСчет", НомерСчетаПлатформыЦифровогоРубля()); + НовСтрока[ПротивоположнаяСторона].Банк.Вставить("Наименование", НаименованиеПлатформыЦифровогоРубля()); + Иначе + ОписаниеПроблемы = СтрШаблон( + НСтр("ru = 'У организации %1 не задан ИНН. Укажите его в карточке организации.'"), РеквизитыОрганизации.Наименование); + ЗаписьЖурналаРегистрации(ИмяСобытияЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка,,, ОписаниеПроблемы); + ВызватьИсключение ОписаниеПроблемы; + КонецЕсли; + + ПрочитатьДанныеПоВидуОперации(Операция, НовСтрока, Сторона, РеквизитыОрганизации); + +КонецПроцедуры + +Процедура ПрочитатьДанныеПоВидуОперации(Операция, НовСтрока, Сторона, РеквизитыОрганизации) + + ДеталиОперации = ЗначениеСвойстваXDTO(Операция, "OthrDtls"); + + // Перевод между счетами + Если НовСтрока.ВидОперацииЦР = ОперацияDCBU() // Пополнение ЦР (банковский счет -> ЦР) + Или НовСтрока.ВидОперацииЦР = ОперацияDCSE() Тогда // Вывод средств (банковский счет <- ЦР) + + ПрочитатьДанныеОбменМеждуСчетомИКошелькомЦР(ДеталиОперации, НовСтрока, Сторона, РеквизитыОрганизации); + + ИначеЕсли ЗначениеСвойстваXDTO(ДеталиОперации, "B2B") <> Неопределено Тогда + + ПрочитатьДанныеОперацияB2B(ДеталиОперации, НовСтрока, Сторона); + + ИначеЕсли ЗначениеСвойстваXDTO(ДеталиОперации, "C2B") <> Неопределено Тогда + + ПрочитатьДанныеОперацияC2B(ДеталиОперации, НовСтрока, Сторона); + + ИначеЕсли ЗначениеСвойстваXDTO(ДеталиОперации, "B2C") <> Неопределено Тогда + + ПрочитатьДанныеОперацияB2C(ДеталиОперации, НовСтрока, Сторона); + + ИначеЕсли ЗначениеСвойстваXDTO(ДеталиОперации, "X2G") <> Неопределено Тогда + + ПрочитатьДанныеОперацияX2G(ДеталиОперации, НовСтрока, Сторона); + + Иначе // пока не обслуживаем + + НовСтрока[Сторона] = Новый Структура; + + Если НовСтрока.ВидОперацииЦР = ОперацияOPTR() Тогда + ПрочитатьДанныеОперацияOPTrf(ДеталиОперации, НовСтрока); + Возврат; + КонецЕсли; + + // По остальным операциям нет описания. + + ОписаниеПроблемы = СтрШаблон( + НСтр("ru = 'Неподдерживаемый вид %1 в операции с идентификатором %2'"), + НовСтрока.ВидОперацииЦР, НовСтрока.НомерДокумента); + ЗаписьЖурналаРегистрации(ИмяСобытияЖурналаРегистрации(), УровеньЖурналаРегистрации.Предупреждение,,, ОписаниеПроблемы); + + КонецЕсли; + +КонецПроцедуры + +Процедура ПрочитатьДанныеОбменМеждуСчетомИКошелькомЦР(ДеталиОперации, НовСтрока, Сторона, РеквизитыОрганизации) + + НовСтрока[Сторона] = Новый Структура; + Если ЗначениеЗаполнено(РеквизитыОрганизации.ИНН) Тогда + НовСтрока[Сторона].Вставить("ИНН", РеквизитыОрганизации.ИНН); + Если СтрДлина(РеквизитыОрганизации.ИНН) = 10 Тогда + НовСтрока[Сторона].Вставить("КПП", РеквизитыОрганизации.КПП); + КонецЕсли; + НовСтрока[Сторона].Вставить("Наименование", РеквизитыОрганизации.Наименование); + КонецЕсли; + + // Детали операций обмена ЦР на безналичные средства и наоборот + Xchg = ЗначениеСвойстваXDTO(ДеталиОперации, "Xchg"); // Exchange + Если Xchg = Неопределено Тогда + ОписаниеПроблемы = СтрШаблон( + НСтр("ru = 'Некорректные данные в операции с идентификатором %1. В теге указан вид операции %2, но отсутствует или не заполнен тег '"), + НовСтрока.НомерДокумента, НовСтрока.ВидОперацииЦР); + ЗаписьЖурналаРегистрации(ИмяСобытияЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка,,, ОписаниеПроблемы); + Возврат; + КонецЕсли; + + // Банковский счет Субъекта ПлЦР + PtyInf = ЗначениеСвойстваXDTO(Xchg, "PtyInf"); // PartyInformation + NtlId = Неопределено; + Если PtyInf <> Неопределено Тогда + // Информация о реквизитах Субъекта ПлЦР-резидента, необходимых для проведения банковского платежа. + NtlId = ЗначениеСвойстваXDTO(PtyInf, "NtlId"); // NationalIdentification + Если NtlId <> Неопределено Тогда + НовСтрока[Сторона].Вставить("РасчСчет", ЗначениеСвойстваXDTO(NtlId, "Acct.Id")); + КонецЕсли; + КонецЕсли; + + БИК = ""; + БИКПосредника = ""; + Наименование = ""; + НовСтрока[Сторона].Вставить("Банк", Новый Структура); + + Если ПустаяСтрока(БИК) И NtlId <> Неопределено Тогда + // Servicer - Банк, обслуживающий счет + БИК = ЗначениеСвойстваXDTO(NtlId, "Svcr.MmbId"); + КонецЕсли; + + Intrmy = ЗначениеСвойстваXDTO(Xchg, "Intrmy"); // Intermediary (Посредник) + // Идентификатор посредника, через которого происходит взаимодействие Клиента с ПлЦР по операции. + Если Intrmy <> Неопределено Тогда + БИКПосредника = ЗначениеСвойстваXDTO(Intrmy, "ClrSysIdr.MmbId", ""); + Наименование = ЗначениеСвойстваXDTO(Intrmy, "Nm"); + КонецЕсли; + + Если ЗначениеЗаполнено(БИК) Тогда + НовСтрока[Сторона].Банк.Вставить("БИК", БИК); + + Если ЗначениеЗаполнено(Наименование) И БИК = БИКПосредника Тогда + НовСтрока[Сторона].Банк.Вставить("Наименование", Наименование); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +Процедура ПрочитатьДанныеОперацияB2B(ДеталиОперации, НовСтрока, Сторона) + + Если НовСтрока.ВидОперацииЦР <> ОперацияB2B() Тогда + ОписаниеПроблемы = СтрШаблон( + НСтр("ru = 'Некорректные данные в операции с идентификатором %1. В теге указан вид операции %2, вместо %3. + | Т.к. присутствует и заполнен тег '"), + НовСтрока.НомерДокумента, НовСтрока.ВидОперацииЦР, ОперацияB2B()); + ЗаписьЖурналаРегистрации(ИмяСобытияЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка,,, ОписаниеПроблемы); + КонецЕсли; + + НовСтрока[Сторона] = Новый Структура; + + // Данные участника операции - контрагента ЮЛ + РеквизитыКонтрагента = ЗначениеСвойстваXDTO(ДеталиОперации.B2B, "BizCtrPty"); // BusinessCounterparty + Если РеквизитыКонтрагента <> Неопределено Тогда + НовСтрока[Сторона].Вставить("ИНН", ЗначениеСвойстваXDTO(РеквизитыКонтрагента, "INN")); + НовСтрока[Сторона].Вставить("КПП", ЗначениеСвойстваXDTO(РеквизитыКонтрагента, "KPP")); + НовСтрока[Сторона].Вставить("Наименование", ЗначениеСвойстваXDTO(РеквизитыКонтрагента, "Nm")); + НовСтрока[Сторона].Вставить("ИдентификаторЦифровогоСчета", + ЗначениеСвойстваXDTO(РеквизитыКонтрагента, "Wllt.Id")); + + НовСтрока[Сторона].Вставить("Банк", Новый Структура); + ДанныеСчета = ЗначениеСвойстваXDTO(РеквизитыКонтрагента, "Wllt.DCAcctNb"); // DCAccountNumber + Если ДанныеСчета <> Неопределено Тогда + // Указывается номер СЦР Субъекта ПлЦР + НовСтрока[Сторона].Вставить("РасчСчет", ЗначениеСвойстваXDTO(ДанныеСчета, "Id", "")); // 20-значный + // Данные банка (платформы цифрового рубля) имеет смысл заполнять + // только в случае заполненного цифрового номера счета. + Если ЗначениеЗаполнено(НовСтрока[Сторона].РасчСчет) Тогда + НовСтрока[Сторона].Банк.Вставить("БИК", БИКПлатформыЦифровогоРубля()); + НовСтрока[Сторона].Банк.Вставить("КоррСчет", НомерСчетаПлатформыЦифровогоРубля()); + НовСтрока[Сторона].Банк.Вставить("Наименование", НаименованиеПлатформыЦифровогоРубля()); + КонецЕсли; + КонецЕсли; + КонецЕсли; + + НазначениеПлатежа = ЗначениеСвойстваXDTO(ДеталиОперации.B2B, "Purp"); + Если НазначениеПлатежа <> Неопределено Тогда + НовСтрока.НазначениеПлатежа = НазначениеПлатежа; + КонецЕсли; + +КонецПроцедуры + +Процедура ПрочитатьДанныеОперацияC2B(ДеталиОперации, НовСтрока, Сторона) + + Если НовСтрока.ВидОперацииЦР <> ОперацияC2B() Тогда + ОписаниеПроблемы = СтрШаблон( + НСтр("ru = 'Некорректные данные в операции с идентификатором %1. В теге указан вид операции %2, вместо %3. + |Т.к. присутствует и заполнен тег '"), + НовСтрока.НомерДокумента, НовСтрока.ВидОперацииЦР, ОперацияC2B()); + ЗаписьЖурналаРегистрации(ИмяСобытияЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка,,, ОписаниеПроблемы); + КонецЕсли; + + НовСтрока[Сторона] = Новый Структура; + + // Данные участника операции - контрагента ФЛ + РеквизитыКонтрагента = ЗначениеСвойстваXDTO(ДеталиОперации.C2B, "CstmrCtrPty"); // CustomerCounterparty + Если РеквизитыКонтрагента <> Неопределено Тогда + НовСтрока[Сторона].Вставить("Наименование", ЗначениеСвойстваXDTO(РеквизитыКонтрагента, "PAM")); + НовСтрока[Сторона].Вставить("ИдентификаторЦифровогоСчета", + ЗначениеСвойстваXDTO(РеквизитыКонтрагента, "Wllt.Id")); + + НовСтрока[Сторона].Вставить("Банк", Новый Структура); + ДанныеСчета = ЗначениеСвойстваXDTO(РеквизитыКонтрагента, "Wllt.DCAcctNb"); // DCAccountNumber + Если ДанныеСчета <> Неопределено Тогда + // Указывается номер СЦР Субъекта ПлЦР + НовСтрока[Сторона].Вставить("РасчСчет", ЗначениеСвойстваXDTO(ДанныеСчета, "Id", "")); // 20-значный + // Данные банка (платформы цифрового рубля) имеет смысл заполнять + // только в случае заполненного цифрового номера счета. + Если ЗначениеЗаполнено(НовСтрока[Сторона].РасчСчет) Тогда + НовСтрока[Сторона].Банк.Вставить("БИК", БИКПлатформыЦифровогоРубля()); + НовСтрока[Сторона].Банк.Вставить("КоррСчет", НомерСчетаПлатформыЦифровогоРубля()); + НовСтрока[Сторона].Банк.Вставить("Наименование", НаименованиеПлатформыЦифровогоРубля()); + КонецЕсли; + КонецЕсли; + КонецЕсли; + + НазначениеПлатежа = ЗначениеСвойстваXDTO(ДеталиОперации.C2B, "Purp"); + Если НазначениеПлатежа <> Неопределено Тогда + НовСтрока.НазначениеПлатежа = НазначениеПлатежа; + КонецЕсли; + + MCC = ЗначениеСвойстваXDTO(ДеталиОперации.C2B, "MCC"); + Если MCC <> Неопределено Тогда + НовСтрока.MCC = MCC; + КонецЕсли; + + ПлатежнаяСсылка = ЗначениеСвойстваXDTO(ДеталиОперации.C2B, "PmtLkData.PmtLkID"); + Если ПлатежнаяСсылка <> Неопределено Тогда + НовСтрока.ПлатежнаяСсылкаЦР = ПлатежнаяСсылка; + КонецЕсли; + + // Информация о референсах, предоставленная получателем средств, позволяющая идентифицировать исходные документы. + CdtrRefInf = ЗначениеСвойстваXDTO(ДеталиОперации.C2B, "RmtInf.CdtrRefInf"); // CreditorReferenceInformation + Если CdtrRefInf = Неопределено Тогда + Возврат; + КонецЕсли; + + ПризнакИдентификаторПлатежа = ЗначениеСвойстваXDTO(CdtrRefInf, "Tp", ""); // Type + Если ПризнакИдентификаторПлатежа = "UIP2" Тогда + ИдентификаторПлатежа = ЗначениеСвойстваXDTO(CdtrRefInf, "Ref"); // Reference + Если ИдентификаторПлатежа <> Неопределено Тогда + НовСтрока.УникальныйИдентификаторПлатежа = ИдентификаторПлатежа; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +Процедура ПрочитатьДанныеОперацияB2C(ДеталиОперации, НовСтрока, Сторона) + + Если НовСтрока.ВидОперацииЦР <> ОперацияB2C() Тогда + ОписаниеПроблемы = СтрШаблон( + НСтр("ru = 'Некорректные данные в операции с идентификатором %1. В теге указан вид операции %2, вместо %3. + | Т.к. присутствует и заполнен тег '"), + НовСтрока.НомерДокумента, НовСтрока.ВидОперацииЦР, ОперацияB2C()); + ЗаписьЖурналаРегистрации(ИмяСобытияЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка,,, ОписаниеПроблемы); + КонецЕсли; + + НовСтрока[Сторона] = Новый Структура; + + // Данные участника операции - контрагента ФЛ + РеквизитыКонтрагента = ЗначениеСвойстваXDTO(ДеталиОперации.B2C, "CstmrCtrPty"); // CustomerCounterparty + Если РеквизитыКонтрагента <> Неопределено Тогда + НовСтрока[Сторона].Вставить("Наименование", ЗначениеСвойстваXDTO(РеквизитыКонтрагента, "PAM")); + НовСтрока[Сторона].Вставить("ИдентификаторЦифровогоСчета", + ЗначениеСвойстваXDTO(РеквизитыКонтрагента, "Wllt.Id")); + + НовСтрока[Сторона].Вставить("Банк", Новый Структура); + ДанныеСчета = ЗначениеСвойстваXDTO(РеквизитыКонтрагента, "Wllt.DCAcctNb"); // DCAccountNumber + Если ДанныеСчета <> Неопределено Тогда + // Указывается номер СЦР Субъекта ПлЦР + НовСтрока[Сторона].Вставить("РасчСчет", ЗначениеСвойстваXDTO(ДанныеСчета, "Id", "")); // 20-значный + // Данные банка (платформы цифрового рубля) имеет смысл заполнять + // только в случае заполненного цифрового номера счета. + Если ЗначениеЗаполнено(НовСтрока[Сторона].РасчСчет) Тогда + НовСтрока[Сторона].Банк.Вставить("БИК", БИКПлатформыЦифровогоРубля()); + НовСтрока[Сторона].Банк.Вставить("КоррСчет", НомерСчетаПлатформыЦифровогоРубля()); + НовСтрока[Сторона].Банк.Вставить("Наименование", НаименованиеПлатформыЦифровогоРубля()); + КонецЕсли; + КонецЕсли; + КонецЕсли; + + НазначениеПлатежа = ЗначениеСвойстваXDTO(ДеталиОперации.B2C, "Purp"); + Если НазначениеПлатежа <> Неопределено Тогда + НовСтрока.НазначениеПлатежа = НазначениеПлатежа; + КонецЕсли; + + КодВидаДохода = ЗначениеСвойстваXDTO(ДеталиОперации.B2C, "IncmCd"); + Если КодВидаДохода <> Неопределено Тогда + НовСтрока.КодВидаДохода = КодВидаДохода; + КонецЕсли; + +КонецПроцедуры + +Процедура ПрочитатьДанныеОперацияX2G(ДеталиОперации, НовСтрока, Сторона) + + Если НовСтрока.ВидОперацииЦР <> ОперацияB2G() Тогда + ОписаниеПроблемы = СтрШаблон( + НСтр("ru = 'Некорректные данные в операции с идентификатором %1. В теге указан вид операции %2, вместо %3. + | Т.к. присутствует и заполнен тег '"), + НовСтрока.НомерДокумента, НовСтрока.ВидОперацииЦР, ОперацияB2G()); + ЗаписьЖурналаРегистрации(ИмяСобытияЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка,,, ОписаниеПроблемы); + КонецЕсли; + + НовСтрока[Сторона] = Новый Структура; + + // Данные участника операции - бюджетополучателя + ИНН = ЗначениеСвойстваXDTO(ДеталиОперации.X2G, "CrrspINN"); + Если ИНН <> Неопределено Тогда + НовСтрока[Сторона].Вставить("ИНН", ИНН); + КонецЕсли; + + КПП = ЗначениеСвойстваXDTO(ДеталиОперации.X2G, "CrrspKPP"); + Если КПП <> Неопределено Тогда + НовСтрока[Сторона].Вставить("КПП", КПП); + КонецЕсли; + + НаименованиеПолучателя = ЗначениеСвойстваXDTO(ДеталиОперации.X2G, "CrrspNm.LineNm"); + Если НаименованиеПолучателя <> Неопределено Тогда + НовСтрока[Сторона].Вставить("Наименование", НаименованиеПолучателя); + КонецЕсли; + + ИдентификаторПлатежа = ЗначениеСвойстваXDTO(ДеталиОперации.X2G, "PmtID"); // PaymentID + Если ИдентификаторПлатежа <> Неопределено Тогда + НовСтрока.УникальныйИдентификаторПлатежа = ИдентификаторПлатежа; + КонецЕсли; + + ДанныеКоррСчета = ЗначениеСвойстваXDTO(ДеталиОперации.X2G, "CrrspAcc"); // CorrespAcc + Если ДанныеКоррСчета <> Неопределено Тогда + НовСтрока[Сторона].Вставить("РасчСчет", ЗначениеСвойстваXDTO(ДанныеКоррСчета, "Id", "")); + КонецЕсли; + + НовСтрока[Сторона].Вставить("Банк", Новый Структура); + + ДанныеСчета = ЗначениеСвойстваXDTO(ДеталиОперации.X2G, "CtrPty"); // Counterparty + Если ДанныеСчета <> Неопределено Тогда + НовСтрока[Сторона].Вставить("ИдентификаторЦифровогоСчета", + ЗначениеСвойстваXDTO(ДанныеСчета, "Id", "")); + НовСтрока[Сторона].Банк.Вставить("БИК", БИКПлатформыЦифровогоРубля()); + НовСтрока[Сторона].Банк.Вставить("Наименование", НаименованиеПлатформыЦифровогоРубля()); + ДанныеКазначейскогоСчета = ЗначениеСвойстваXDTO(ДанныеСчета, "DCAcctNb"); + Если ДанныеКазначейскогоСчета <> Неопределено Тогда + КоррСчет = ЗначениеСвойстваXDTO(ДанныеКазначейскогоСчета, "Id", ""); // Единый казначейский счет + Если ЗначениеЗаполнено(КоррСчет) Тогда + НовСтрока[Сторона].Вставить("РасчСчет", КоррСчет); + КонецЕсли; + КонецЕсли; + КонецЕсли; + + НазначениеПлатежа = ЗначениеСвойстваXDTO(ДеталиОперации.X2G, "Purp"); + Если НазначениеПлатежа <> Неопределено Тогда + НовСтрока.НазначениеПлатежа = НазначениеПлатежа; + КонецЕсли; + +КонецПроцедуры + +Процедура ПрочитатьДанныеОперацияOPTrf(ДеталиОперации, НовСтрока) + + // Операция "Перевод оператором". + // Для данной операции пока заполняем только Назначение платежа. + + НазначениеПлатежа = ЗначениеСвойстваXDTO(ДеталиОперации.OPTrf, "Purp"); + Если НазначениеПлатежа <> Неопределено Тогда + НовСтрока.НазначениеПлатежа = НазначениеПлатежа; + КонецЕсли; + +КонецПроцедуры + +Процедура РазборВыпискиВызыватьИсключение() + + ШаблонСообщения = НСтр("ru = 'При разборе выписки по счету Цифрового рубля (ЦР) возникла ошибка: + |%1. + |Возможно файл не является выпиской по счету ЦР.'"); + КраткоеПредставлениеОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); + ТекстОшибки = СтрШаблон(ШаблонСообщения, КраткоеПредставлениеОшибки); + Если Пользователи.ЭтоПолноправныйПользователь(, , Ложь) Тогда + ТекстСообщения = ТекстОшибки; + Иначе + ТекстСообщения = НСтр("ru = 'Файл выписки Цифровому рублю (ЦР), полученный из банка, невозможно прочитать. + |Файл содержит ошибку или не является выпиской по счету ЦР.'"); + КонецЕсли; + + ЗаписьЖурналаРегистрации(ИмяСобытияЖурналаРегистрации(), + УровеньЖурналаРегистрации.Ошибка, + , + , + ТекстОшибки); + + ВызватьИсключение ТекстСообщения; + +КонецПроцедуры + +#КонецОбласти + +#Область РеквизитыПлатформыЦифровогоРубля + +// Возвращает наименование Банка России +// +// Возвращаемое значение: +// Строка +// +Функция НаименованиеКонтрагентаЦБ() + + Наименование = НСтр("ru = 'БАНК РОССИИ'"); + + Возврат Наименование; + +КонецФункции + +// Возвращает ИНН оператора платформы цифрового рубля +// +// Возвращаемое значение: +// Строка +// +Функция ИННПлатформыЦифровогоРубля() + + ИНН = "7702235133"; + + Возврат ИНН; + +КонецФункции + +// Возвращает КПП оператора платформы цифрового рубля +// +// Возвращаемое значение: +// Строка +// +Функция КПППлатформыЦифровогоРубля() + + КПП = "770201001"; + + Возврат КПП; + +КонецФункции + +// Возвращает ОГРН оператора платформы цифрового рубля +// +// Возвращаемое значение: +// Строка +// +Функция ОГРНПлатформыЦифровогоРубля() + + ОГРН = "1037700013020"; + + Возврат ОГРН; + +КонецФункции + +#КонецОбласти + +Функция ТаблицаВыписокБанкаВДерево(ТаблицаВыписок) + + ДеревоДанных = ДеревоЭлектронногоДокументаБЭД.ДеревоЭлектронногоДокумента("ОбменСБанками.ВыпискаБанка"); + + ЭлектронноеВзаимодействие.ЗагрузитьТаблицуВДерево(ДеревоДанных, ТаблицаВыписок, "Выписки"); + + Возврат ДеревоДанных; + +КонецФункции + +Функция ИмяСобытияЖурналаРегистрации() + + Возврат НСтр("ru = 'Загрузка истории операций по счету цифрового рубля'", ОбщегоНазначения.КодОсновногоЯзыка()); + +КонецФункции + +Функция ЗначениеСвойстваXDTO(ОбъектXDTO, ИмяСвойства, + ЗначениеПоУмолчанию = Неопределено, + Тип = Неопределено, + ЭтоСписок = Ложь, + НеопределеноПоУмолчанию = Ложь) + + Возврат РаботаСФайламиБЭД.ЗначениеСвойстваXDTO( + ОбъектXDTO, ИмяСвойства, ЗначениеПоУмолчанию, Тип, ЭтоСписок, НеопределеноПоУмолчанию); + +КонецФункции + +#КонецОбласти diff --git a/Конфигурация/CommonModules/ОбменСБанкомВФормате1С/Ext/Module.bsl b/Конфигурация/CommonModules/ОбменСБанкомВФормате1С/Ext/Module.bsl index 52f306e75..71039d61d 100644 --- a/Конфигурация/CommonModules/ОбменСБанкомВФормате1С/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ОбменСБанкомВФормате1С/Ext/Module.bsl @@ -298,7 +298,12 @@ ДанныеИзБанка.Документы.Колонки.Добавить("ИдентификаторДокумента", ОбщегоНазначения.ОписаниеТипаСтрока(36)); // Используется при загрузке операций по счету цифрового рубля - ДанныеИзБанка.Документы.Колонки.Добавить("ВидОперацииЦР", ТипСтрока); + ДанныеИзБанка.Документы.Колонки.Добавить("ВидОперацииЦР", ТипСтрока); + ДанныеИзБанка.Документы.Колонки.Добавить("MCC", ОбщегоНазначения.ОписаниеТипаСтрока(4)); + ДанныеИзБанка.Документы.Колонки.Добавить("ПлатежнаяСсылкаЦР", ТипСтрока); + + // Используется передачи дополнительных свойств операции + ДанныеИзБанка.Документы.Колонки.Добавить("ДополнительныеСвойства", Новый ОписаниеТипов("Структура")); // Используется при обмене с сервисом АУСН ДанныеИзБанка.Документы.Колонки.Добавить("ИдентификаторАУСН", ОбщегоНазначения.ОписаниеТипаСтрока(64)); @@ -588,7 +593,7 @@ ЭлементыРеквизитовСчетаУчастника.Добавить("Банк"); // ПлательщикБанк1, ПолучательБанк1 ЭлементыРеквизитовСчетаУчастника.Добавить("ГородБанка"); // ПлательщикБанк2, ПолучательБанк2 ЭлементыРеквизитовСчетаУчастника.Добавить("РасчСчет"); - ЭлементыРеквизитовСчетаУчастника.Добавить("НомерСчетаЦифровой"); + ЭлементыРеквизитовСчетаУчастника.Добавить("ИдентификаторЦифровогоСчета"); Возврат ЭлементыРеквизитовСчетаУчастника; diff --git a/Конфигурация/CommonModules/ОбменСГИСЭПД/Ext/Module.bsl b/Конфигурация/CommonModules/ОбменСГИСЭПД/Ext/Module.bsl index 8f566d3fe..c6847e24d 100644 --- a/Конфигурация/CommonModules/ОбменСГИСЭПД/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ОбменСГИСЭПД/Ext/Module.bsl @@ -1,5 +1,35 @@ #Область ПрограммныйИнтерфейс +Процедура ПослеЗагрузкиНовогоЭлектронногоДокумента(ЗагруженныйДокумент, НеОтражатьДанныеЭлектронногоДокумента) Экспорт + + Если Не ЭтоДокументЭПД(ЗагруженныйДокумент.ТипДокумента) Тогда + Возврат; + КонецЕсли; + + Если СтрНачинаетсяС(ВРег(ЗагруженныйДокумент.ОписаниеДанных.ИмяФайла), "DP_UVUTOCH") Тогда + НеОтражатьДанныеЭлектронногоДокумента = Истина; + Возврат; + КонецЕсли; + + ТипРегламента = ОбщегоНазначения.ЗначениеРеквизитаОбъекта( + ЗагруженныйДокумент.ЭлектронныйДокумент, "ТипРегламента"); + + Если ТипРегламента = Перечисления.ТипыРегламентовЭДО.Черновик Тогда + НеОтражатьДанныеЭлектронногоДокумента = Истина; + КонецЕсли; + +КонецПроцедуры + +// Параметры: +// КомандаВидна - Булево - выходной, переопределяемый параметр +// ТипДокументаЧерновика - ПеречислениеСсылка.СостоянияДокументовЭДО +Процедура ПриОпределенииВидимостиКомандыСозданияДокументаНаОснованииЧерновика(КомандаВидна, + Знач ТипДокументаЧерновика) Экспорт + + КомандаВидна = ЭтоДокументЭПД(ТипДокументаЧерновика); + +КонецПроцедуры + // При определении печатных форм запрещенных для формирования документа. // @@ -27,7 +57,10 @@ Списки.Вставить(Метаданные.Документы.ЭлектроннаяСопроводительнаяВедомость, Истина); Списки.Вставить(Метаданные.Документы.ЭлектронныйЗаказЗаявка, Истина); Списки.Вставить(Метаданные.Документы.ЭлектронныйДоговорФрахтования, Истина); - Списки.Вставить(Метаданные.Документы.ЭлектронныйПутевойЛист, Истина); + Списки.Вставить(Метаданные.Документы.ЭлектронныйПутевойЛист, Истина); + Списки.Вставить(Метаданные.Документы.ЭлектронноеПоручениеЭкспедитору, Истина); + Списки.Вставить(Метаданные.Документы.ЭлектроннаяЭкспедиторскаяРасписка, Истина); + Списки.Вставить(Метаданные.Документы.ЭлектроннаяCкладскаяРасписка, Истина); Списки.Вставить(Метаданные.РегистрыСведений.РеестрЭПД, Истина); Списки.Вставить(Метаданные.РегистрыСведений.ВерсииТитуловЭПД, Истина); Списки.Вставить(Метаданные.РегистрыСведений.ЗначенияРеквизитовДокументовЭПД, Истина); @@ -41,6 +74,12 @@ Процедура ПриЗаполненииВидовОграниченийПравОбъектовМетаданных(Описание) Экспорт Описание = Описание + " + |Документ.ЭлектроннаяCкладскаяРасписка.Чтение.Организации + |Документ.ЭлектроннаяCкладскаяРасписка.Изменение.Организации + |Документ.ЭлектроннаяЭкспедиторскаяРасписка.Чтение.Организации + |Документ.ЭлектроннаяЭкспедиторскаяРасписка.Изменение.Организации + |Документ.ЭлектронноеПоручениеЭкспедитору.Чтение.Организации + |Документ.ЭлектронноеПоручениеЭкспедитору.Изменение.Организации |Документ.ЭлектроннаяСопроводительнаяВедомость.Чтение.Организации |Документ.ЭлектроннаяСопроводительнаяВедомость.Изменение.Организации |Документ.ЭлектроннаяТранспортнаяНакладная.Чтение.Организации @@ -119,9 +158,336 @@ ТипыДокументов.Вставить("ЭЗЗ", Перечисления.ТипыДокументовЭДО.ЭЗЗ); ТипыДокументов.Вставить("ЭПЛ", Перечисления.ТипыДокументовЭДО.ЭПЛ); ТипыДокументов.Вставить("ЭДФ", Перечисления.ТипыДокументовЭДО.ЭДФ); + ТипыДокументов.Вставить("ЭПЭ", Перечисления.ТипыДокументовЭДО.ЭПЭ); + ТипыДокументов.Вставить("ЭЭР", Перечисления.ТипыДокументовЭДО.ЭЭР); + ТипыДокументов.Вставить("ЭСР", Перечисления.ТипыДокументовЭДО.ЭСР); КонецПроцедуры +// Параметры: +// КодТранзакции - Строка +// ТипДокументаСтрокой - Строка +// Приоритет - Число - приоритет, где 0 - самый высокий +Процедура ПриОпределенииПриоритетаРаспаковкиКонтейнера(КодТранзакции, ТипДокументаСтрокой, Приоритет) Экспорт + + Если КодТранзакции = "ShipperInformation" + Или КодТранзакции = "ChartererInformation" + Или КодТранзакции = "SendOrder" + Или КодТранзакции = "OwnerVehicleInfo" + Или КодТранзакции = "TransactionEDF_T1" + Или КодТранзакции = "CarrierInformation_1" + Или КодТранзакции = "EPE_T1" Тогда + + Приоритет = 0; + + КонецЕсли; + +КонецПроцедуры + +// Возвращает, включен демонстрационный режим или нет +// +// Возвращаемое значение: +// Булево - Демо режим включен +Функция ДемоРежимВключен() Экспорт + УстановитьПривилегированныйРежим(Истина); + Возврат ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("ЭПДДемоРежим", "ДемоРежимВключен", Ложь, , ""); +КонецФункции + +// Включить или выключить демонстрационный режим +// +// Параметры: +// Включить - Булево - Включить или выключить демонстрационный режим +Процедура ДемоРежимВключить( Включить ) Экспорт + УстановитьПривилегированныйРежим(Истина); + ОбщегоНазначения.ХранилищеОбщихНастроекСохранить("ЭПДДемоРежим", "ДемоРежимВключен", Включить, , ""); +КонецПроцедуры + +// Возвращает, статус приема экспедиторских документов в ГИС +// +// Возвращаемое значение: +// Булево - Истина, если документы принимаются +Функция СтатусПриемаЭкспедиторскихДокументовВГисЭПД() Экспорт + + Результата = Истина; + + ПолныйАдрес = СервисНастроекЭДО.АдресОблачногоХранилищаНастроек() + "/epd/EpdExpDocNotSend2Gis.json"; + + РезультатПолученияФайла = ПолучениеФайловИзИнтернета.СкачатьФайлВоВременноеХранилище(ПолныйАдрес); + + Если РезультатПолученияФайла.Статус Тогда + + Результата = Ложь; + + УдалитьИзВременногоХранилища(РезультатПолученияФайла.Путь); + + КонецЕсли; + + Возврат Результата; + +КонецФункции + +// При определении параметров сервиса 1С-ЭДО. +// +// Параметры: +// ПараметрыСервиса Параметры сервиса +Процедура ПриОпределенииПараметровСервиса1СЭДО(ПараметрыСервиса) Экспорт + + Если ДемоРежимВключен() Тогда + + ПараметрыСервиса.АдресВебСервиса = "https://1ctest.ru/API"; + ПараметрыСервиса.АдресДляПроверкиАктивности = "https://1ctest.ru/"; + + КонецЕсли; + +КонецПроцедуры + +// При заполнении параметров карточки регистрации. +// +// Параметры: +// ЭДКарточки ЭДКарточки +Процедура ПриЗаполненииПараметровКарточкиРегистрации(ЭДКарточки) Экспорт + + Если ДемоРежимВключен() Тогда + + ЭДКарточки.ЗаписатьНачалоЭлемента("AdditionalParameter"); + ЭДКарточки.ЗаписатьАтрибут("Name", "ЭПДДемо"); + ЭДКарточки.ЗаписатьАтрибут("Value", "true"); + ЭДКарточки.ЗаписатьКонецЭлемента(); + + КонецЕсли; + +КонецПроцедуры + +// Перед отправкой регистрационного пакета1 СЭДО. +// +// Параметры: +// ПараметрыВыполненияОперации Параметры выполнения операции +Процедура ПередОтправкойРегистрационногоПакета1СЭДО(ПараметрыВыполненияОперации) Экспорт + + Если ДемоРежимВключен() Тогда + + ПараметрыВыполненияОперации.Заголовки.Вставить("Epd-Demo", "true"); + + КонецЕсли; + +КонецПроцедуры + +// При поиске учетных записей абонентов. +// +// Параметры: +// Идентификаторы Идентификаторы +// КПП КПП +// Результат Результат +Процедура ПриПоискеУчетныхЗаписейАбонентов(Знач Идентификаторы, Знач КПП, Результат) Экспорт + + Если ДемоРежимВключен() Тогда + + Результат = Новый СписокЗначений; + + КонецЕсли; + +КонецПроцедуры + +// При заполнении данных абонентов из сервиса настроек. +// +// Параметры: +// Отбор Отбор +// Отказ Отказ +// КонтекстДиагностики Контекст диагностики +// Результат Результат +Процедура ПриЗаполненииДанныхАбонентовИзСервисаНастроек(Отбор, Отказ, КонтекстДиагностики, Результат) Экспорт + + Если ДемоРежимВключен() Тогда + + Результат = Неопределено; + + КонецЕсли; + +КонецПроцедуры + +Процедура ПриЗаполненииОписанияФайла(Данные, ОписаниеФайла) Экспорт +Если Не ЭтоТитулЭПД(ОписаниеФайла.ИмяФайла) Тогда + Возврат; + КонецЕсли; + + ЭлектронныйДокумент = ЭлектронныеДокументыЭДО.ЭлектронныйДокументСообщенияЭДО(Данные.Сообщение); + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("ЭлектронныйДокумент", ЭлектронныйДокумент); + Запрос.Текст = "ВЫБРАТЬ + | ОбъектыУчетаДокументовЭДО.ОбъектУчета КАК ДокументЭПД, + | ОбъектыУчетаДокументовЭДО.ЭлектронныйДокумент.ТипРегламента КАК ТипРегламента + |ИЗ + | РегистрСведений.ОбъектыУчетаДокументовЭДО КАК ОбъектыУчетаДокументовЭДО + |ГДЕ + | ОбъектыУчетаДокументовЭДО.ЭлектронныйДокумент = &ЭлектронныйДокумент + | И ОбъектыУчетаДокументовЭДО.Актуальный = ИСТИНА"; + + Выборка = Запрос.Выполнить().Выбрать(); + + Если Выборка.Следующий() Тогда + ОписаниеФайла.Вставить("ДокументЭПД", Выборка.ДокументЭПД); + ОписаниеФайла.Вставить("ТипРегламента", Выборка.ТипРегламента); + КонецЕсли; + +КонецПроцедуры + +Функция ПриФормированияДанныхФайлаЭД(ОписаниеФайла) Экспорт +Если Не ЭтоТитулЭПД(ОписаниеФайла.ИмяФайла) Тогда + Возврат Неопределено; + КонецЕсли; + + ДанныеФайлаЭД = Неопределено; + + Попытка + + СоответствиеПрефикса = ПолучитьСоответствиеПрефиксаПоИдФайла(ОписаниеФайла.ИмяФайла); + + МенеджерОбъекта = СоответствиеПрефикса.Менеджер; + ИмяСхемы = СоответствиеПрефикса.ИмяСхемы; + + МакетСхема = МенеджерОбъекта.ПолучитьМакет("Схема" + ИмяСхемы); + + ДанныеПоXsdСхеме = СоздатьФабрикуПоСхемеXSD(МакетСхема.ПолучитьТекст()); + + Пакет = Неопределено; + Если ДанныеПоXsdСхеме.targetNamespace <> Неопределено Тогда + Пакет = ДанныеПоXsdСхеме.Фабрика.Пакеты.Получить(ДанныеПоXsdСхеме.targetNamespace); + ИначеЕсли ДанныеПоXsdСхеме.xmlns <> Неопределено Тогда + Пакет = ДанныеПоXsdСхеме.Фабрика.Пакеты.Получить(ДанныеПоXsdСхеме.xmlns); + Иначе + Пакет = ДанныеПоXsdСхеме.Фабрика.Пакеты[0]; + КонецЕсли; + + СвойствоФайл = Пакет.КорневыеСвойства.Получить("Файл"); + + ЧтениеXML = Новый ЧтениеXML; + + ПотокДанныхФайла = ОписаниеФайла.ДвоичныеДанные.ОткрытьПотокДляЧтения(); + ЧтениеXML.ОткрытьПоток(ПотокДанныхФайла); + + ДанныеФайлаЭД = ДанныеПоXsdСхеме.Фабрика.ПрочитатьXML(ЧтениеXML, СвойствоФайл.Тип); + + Исключение + КодОсновногоЯзыка = ОбщегоНазначения.КодОсновногоЯзыка(); + + ШаблонСообщения = НСтр("ru = 'Ошибка при чтении данных из файла: + |%1'", КодОсновногоЯзыка); + ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, ОписаниеФайла.ИмяФайла); + ОбщегоНазначения.СообщитьПользователю(ОписаниеОшибки); + + ИнформацияОбОшибке = ИнформацияОбОшибке(); + ИмяСобытия = НСтр("ru = 'ЭПД.ПриФормированияДанныхФайлаЭД'", КодОсновногоЯзыка); + ПодробноеПредставлениеОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке); + ЗаписьЖурналаРегистрации(ИмяСобытия, + УровеньЖурналаРегистрации.Ошибка, , , + ПодробноеПредставлениеОшибки); + + КонецПопытки; + + Возврат ДанныеФайлаЭД; + +КонецФункции + +Функция ПриЗаполнениеДанныхПодписантаДоступно(СодержаниеДокумента) Экспорт + + Возврат ЭтоТипРегламентаЭПД(СодержаниеДокумента.ТипРегламента); + +КонецФункции + +Процедура ПриЗаполненииДанныхПодписанта(ОписаниеФайла, ДанныеФайлаЭД, ДанныеПодписанта, ЗаполнениеДанныхПодписантаДляЭПД, Ошибки) Экспорт + + Если Не ОписаниеФайла.Свойство("ДокументЭПД") Тогда + Возврат; + КонецЕсли; + + Если Не ЗначениеЗаполнено(ДанныеПодписанта.СертификатПодписи) Тогда + ТекстОшибки = НСтр("ru = 'Не удалось заполнить подписанта. Не заполнен сертификат подписи'"); + ОбщегоНазначенияБЭД.ДобавитьОшибку(Ошибки, ТекстОшибки); + Возврат; + КонецЕсли; + + ЗаполнениеДанныхПодписантаДляЭПД = Истина; + + Если ОписаниеФайла.ТипРегламента = Перечисления.ТипыРегламентовЭДО.ЭТрН Тогда + + ЗаполнитьДанныеПодписанта(ОписаниеФайла, ДанныеФайлаЭД, ДанныеПодписанта); + + ИначеЕсли ОписаниеФайла.ТипРегламента = Перечисления.ТипыРегламентовЭДО.ЭЗН Тогда + + ЗаполнитьДанныеПодписанта(ОписаниеФайла, ДанныеФайлаЭД, ДанныеПодписанта); + + ИначеЕсли ОписаниеФайла.ТипРегламента = Перечисления.ТипыРегламентовЭДО.ЭСВ Тогда + + ЗаполнитьДанныеПодписанта(ОписаниеФайла, ДанныеФайлаЭД, ДанныеПодписанта); + + ИначеЕсли ОписаниеФайла.ТипРегламента = Перечисления.ТипыРегламентовЭДО.ЭЗЗ Тогда + + ЗаполнитьДанныеПодписантаСОпределением(ОписаниеФайла, ДанныеФайлаЭД, ДанныеПодписанта); + + ИначеЕсли ОписаниеФайла.ТипРегламента = Перечисления.ТипыРегламентовЭДО.ЭПЛ Тогда + + ЗаполнитьДанныеПодписантаСОпределением(ОписаниеФайла, ДанныеФайлаЭД, ДанныеПодписанта); + + ИначеЕсли ОписаниеФайла.ТипРегламента = Перечисления.ТипыРегламентовЭДО.ЭДФ Тогда + + ЗаполнитьДанныеПодписантаСОпределением(ОписаниеФайла, ДанныеФайлаЭД, ДанныеПодписанта); + + ИначеЕсли ОписаниеФайла.ТипРегламента = Перечисления.ТипыРегламентовЭДО.ЭПЭ Тогда + + ЗаполнитьДанныеПодписантаСОпределением(ОписаниеФайла, ДанныеФайлаЭД, ДанныеПодписанта); + + ИначеЕсли ОписаниеФайла.ТипРегламента = Перечисления.ТипыРегламентовЭДО.ЭЭР Тогда + + ЗаполнитьДанныеПодписантаСОпределением(ОписаниеФайла, ДанныеФайлаЭД, ДанныеПодписанта); + + ИначеЕсли ОписаниеФайла.ТипРегламента = Перечисления.ТипыРегламентовЭДО.ЭСР Тогда + + ЗаполнитьДанныеПодписантаСОпределением(ОписаниеФайла, ДанныеФайлаЭД, ДанныеПодписанта); + + Иначе + + ЗаполнениеДанныхПодписантаДляЭПД = Ложь; + + ТекстОшибки = НСтр("ru = 'Тип документа для заполнения информации о подписанте не поддерживается!'"); + ОбщегоНазначенияБЭД.ДобавитьОшибку(Ошибки, ТекстОшибки); + + КонецЕсли; + +КонецПроцедуры + +Функция ПриУдаленииПространстваИмен(ДанныеФайлаЭД, УдалениеПространстваИменДляЭПД) Экспорт + + Если Не ЭтоТитулЭПД(ДанныеФайлаЭД.ИдФайл) Тогда + Возврат Неопределено; + КонецЕсли; + + Кодировка = "windows-1251"; + + Если ТитулДолженБытьВКодировкеUtf8(ДанныеФайлаЭД.ИдФайл) Тогда + Кодировка = "utf-8"; + КонецЕсли; + + + ДанныеФайлаЭДФабрикаXDTO = ДанныеФайлаЭД.Фабрика(); + + ЗаписьОбъекта = Новый ЗаписьXML; + ЗаписьОбъекта.УстановитьСтроку(Кодировка); + ЗаписьОбъекта.ЗаписатьОбъявлениеXML(); + + ДанныеФайлаЭДФабрикаXDTO.ЗаписатьXML(ЗаписьОбъекта, ДанныеФайлаЭД, "Файл"); + + ТекстОбъекта = ЗаписьОбъекта.Закрыть(); + + ТекстОбъекта = СтрЗаменить(ТекстОбъекта, "xmlns=""TEMPXMLNS"" xmlns:xs=""http://www.w3.org/2001/XMLSchema"" xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" ", ""); + + ДвоичныеДанные = ПолучитьДвоичныеДанныеИзСтроки(ТекстОбъекта, Кодировка); + + УдалениеПространстваИменДляЭПД = Истина; + + Возврат ДвоичныеДанные; + +КонецФункции // Это прерывающее УОУ. // @@ -184,8 +550,11 @@ Или ТипРегламента = Перечисления.ТипыРегламентовЭДО.ЭСВ Или ТипРегламента = Перечисления.ТипыРегламентовЭДО.ЭЗЗ Или ТипРегламента = Перечисления.ТипыРегламентовЭДО.ЭПЛ - Или ТипРегламента = Перечисления.ТипыРегламентовЭДО.ЭДФ; - + Или ТипРегламента = Перечисления.ТипыРегламентовЭДО.ЭДФ + Или ТипРегламента = Перечисления.ТипыРегламентовЭДО.ЭПЭ + Или ТипРегламента = Перечисления.ТипыРегламентовЭДО.ЭЭР + Или ТипРегламента = Перечисления.ТипыРегламентовЭДО.ЭСР; + КонецФункции // Дополнить запрос выборки документов для формирования ответа. @@ -340,7 +709,13 @@ ИначеЕсли ТипРегламента = Перечисления.ТипыРегламентовЭДО.ЭПЛ Тогда Возврат ОбщегоНазначения.ОбщийМодуль("РегламентыЭПД_ЭПЛ"); ИначеЕсли ТипРегламента = Перечисления.ТипыРегламентовЭДО.ЭДФ Тогда - Возврат ОбщегоНазначения.ОбщийМодуль("РегламентыЭПД_ЭДФ"); + Возврат ОбщегоНазначения.ОбщийМодуль("РегламентыЭПД_ЭДФ"); + ИначеЕсли ТипРегламента = Перечисления.ТипыРегламентовЭДО.ЭПЭ Тогда + Возврат ОбщегоНазначения.ОбщийМодуль("РегламентыЭПД_ЭПЭ"); + ИначеЕсли ТипРегламента = Перечисления.ТипыРегламентовЭДО.ЭЭР Тогда + Возврат ОбщегоНазначения.ОбщийМодуль("РегламентыЭПД_ЭЭР"); + ИначеЕсли ТипРегламента = Перечисления.ТипыРегламентовЭДО.ЭСР Тогда + Возврат ОбщегоНазначения.ОбщийМодуль("РегламентыЭПД_ЭСР"); Иначе Возврат Неопределено; КонецЕсли; @@ -690,6 +1065,8 @@ МассивВозможныхПустыхЗначений.Добавить("//Файл/Документ/СодИнфГО/СвГруз/ОпГруз/Габар/ДлЗнач"); МассивВозможныхПустыхЗначений.Добавить("//Файл/Документ/СодИнфГО/СвГруз/ОпГруз/Габар/ШирЗнач"); + МассивВозможныхПустыхЗначений.Добавить("//Файл/Документ/СодИнфГО/СвГруз/ОбЦеннГр/СтЦеннГр"); + МассивВозможныхПустыхЗначений.Добавить("//Файл/Документ/СодФХЖ1/СумНал/СумНДС"); ИначеЕсли ТипДокумента = Перечисления.ТипыДокументовЭДО.ЭЗН Тогда @@ -704,10 +1081,18 @@ МассивВозможныхПустыхЗначений.Добавить("//Файл/Документ/СодИнфГО/ОпГруз/РазмерГрМест/ВысЗнач"); МассивВозможныхПустыхЗначений.Добавить("//Файл/Документ/СодИнфГО/ОпГруз/РазмерГрМест/ДлЗнач"); МассивВозможныхПустыхЗначений.Добавить("//Файл/Документ/СодИнфГО/ОпГруз/РазмерГрМест/ШирЗнач"); + ИначеЕсли ТипДокумента = Перечисления.ТипыДокументовЭДО.ЭПЛ Тогда МенеджерОбъекта = Документы.ЭлектронныйПутевойЛист; ИначеЕсли ТипДокумента = Перечисления.ТипыДокументовЭДО.ЭДФ Тогда МенеджерОбъекта = Документы.ЭлектронныйДоговорФрахтования; + ИначеЕсли ТипДокумента = Перечисления.ТипыДокументовЭДО.ЭПЭ Тогда + МенеджерОбъекта = Документы.ЭлектронноеПоручениеЭкспедитору; + ИначеЕсли ТипДокумента = Перечисления.ТипыДокументовЭДО.ЭЭР Тогда + МенеджерОбъекта = Документы.ЭлектроннаяЭкспедиторскаяРасписка; + ИначеЕсли ТипДокумента = Перечисления.ТипыДокументовЭДО.ЭСР Тогда + МенеджерОбъекта = Документы.ЭлектроннаяCкладскаяРасписка; + КонецЕсли; ИмяСхемы = ПрефиксТитула; @@ -851,6 +1236,12 @@ КонецЦикла; КонецЦикла; + Если ТипДокумента = Перечисления.ТипыДокументовЭДО.ЭПЭ + Или ТипДокумента = Перечисления.ТипыДокументовЭДО.ЭЭР + Или ТипДокумента = Перечисления.ТипыДокументовЭДО.ЭСР Тогда + УстановитьПоследовательностьУзловРекурсивно(ОбъектXDTO); + КонецЕсли; + Попытка ОбъектXDTO.Проверить(); Исключение @@ -890,8 +1281,6 @@ ТекстОбъекта = ЗаписьОбъекта.Закрыть(); - ТекстОбъекта = СтрЗаменить(ТекстОбъекта, "xmlns=""TEMPXMLNS"" xmlns:xs=""http://www.w3.org/2001/XMLSchema"" xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" ", ""); - ДвоичныеДанные = ПолучитьДвоичныеДанныеИзСтроки(ТекстОбъекта, СтруктураСФабрикой.Кодировка); Если АдресВоВременномХранилище <> Неопределено Тогда Результат.ДвоичныеДанные = ПоместитьВоВременноеХранилище(ДвоичныеДанные, АдресВоВременномХранилище); @@ -903,7 +1292,6 @@ Результат.ИмяФайла = Объект[ПрефиксТитула + ПостфиксИдентификаторФайла] + ".xml"; - //@skip-check constructor-function-return-section Возврат Результат; @@ -1304,8 +1692,10 @@ // РезультатРаспаковки - см. ТранспортныеКонтейнерыЭДО.РаспаковатьФайлКонтейнера // ПараметрыПриглашения - см. ПриглашенияЭДОКлиентСервер.КлючПриглашения // Контрагент - СправочникСсылка.Контрагенты - Контрагент, которого необходимо заполнить. -// -Процедура ПриЗаполненииКонтрагентаПриРаспаковкеКонтейнера(ПараметрыКонтейнера, РезультатРаспаковки, ПараметрыПриглашения, Контрагент) Экспорт +// СоздаватьПриглашениеДляЭПДАвтоматически - Булево - Признак который необходимо заполнить + +Процедура ПриЗаполненииКонтрагентаПриРаспаковкеКонтейнера(ПараметрыКонтейнера, РезультатРаспаковки, + ПараметрыПриглашения, Контрагент, СоздаватьПриглашениеДляЭПДАвтоматически = Ложь) Экспорт Если Не ЭтоВидСервисаЭПД(ПараметрыКонтейнера.ВидСервисаЭДО) Тогда Возврат; @@ -1342,6 +1732,21 @@ КПП, Карточка.Дата); КонецЕсли; КонецЕсли; + + Таблица = Новый ТаблицаЗначений; + Таблица.Колонки.Добавить("ТипДокументаСтрокой"); + Таблица.Колонки.Добавить("ТипДокумента"); + Таблица.Колонки.Добавить("ТипЭлементаРегламента"); + Таблица.Колонки.Добавить("ТипРегламента"); + Таблица.Колонки.Добавить("ТипДокументаДляДополнительныхДанныхСтрокой"); + Таблица.Колонки.Добавить("ЭтоОтветнаяПодпись"); + + ДобавитьТипыДокументовЭПД(Таблица); + + Если Таблица.Найти(РезультатРаспаковки.Карточка.ТипДокумента, + "ТипДокументаДляДополнительныхДанныхСтрокой") <> Неопределено Тогда + СоздаватьПриглашениеДляЭПДАвтоматически = Истина; + КонецЕсли; КонецПроцедуры @@ -1471,7 +1876,8 @@ // См. Обработка.ИнтерфейсДокументовЭДО.ТекущиеДелаПоЭДО.РаспознатьДокумент. // // Параметры: -// ЭлектронныйДокумент - ДокументСсылка.ЭлектронныйДокументВходящийЭДО,ДокументСсылка.ЭлектронныйДокументИсходящийЭДО +// ДанныеДокумента - ДокументСсылка.ЭлектронныйДокументВходящийЭДО, +// ДокументСсылка.ЭлектронныйДокументИсходящийЭДО,СправочникСсылка.ВидыДокументовЭДО // УспешностьРаспознования- Булево - Успешность распознования. // // Возвращаемое значение: @@ -1479,19 +1885,56 @@ // @skip-check doc-comment-description-ends-on-dot // @skip-check function-return-types // @skip-check doc-comment-ref-link -Функция ПриРаспознаванииДокумента(ТипДокумента, УспешностьРаспознования) Экспорт +Функция ПриРаспознаванииДокумента(ДанныеДокумента, УспешностьРаспознования) Экспорт - Если Не ЭтоДокументЭПД(ТипДокумента) Тогда - Возврат Неопределено; + ТипДокумента = Неопределено; + + Если ТипЗнч(ДанныеДокумента) = Тип("СправочникСсылка.ВидыДокументовЭДО") Тогда + + УспешностьРаспознования = ЭтоДокументЭПД(ДанныеДокумента); + ТипДокумента = ДанныеДокумента; + + ИначеЕсли ТипЗнч(ДанныеДокумента) = Тип("ДокументСсылка.ЭлектронныйДокументВходящийЭДО") + Или ТипЗнч(ДанныеДокумента) = Тип("ДокументСсылка.ЭлектронныйДокументИсходящийЭДО") Тогда + + ТипДокумента = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ДанныеДокумента, "ВидДокумента.ТипДокумента"); + + Если ТипДокумента = Перечисления.ТипыДокументовЭДО.Черновик Тогда + + ТипДокументаЧерновикаЗначение = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ДанныеДокумента, + "ЧерновикВладелец.ВидЧерновика.ТипДокумента"); + + Если ЗначениеЗаполнено(ТипДокументаЧерновикаЗначение) Тогда + ТипДокументаЧерновика = ТипДокументаЧерновикаЗначение.ЧерновикВладелецВидЧерновикаТипДокумента; + КонецЕсли; + + Если ЗначениеЗаполнено(ТипДокументаЧерновика) + И (ТипДокументаЧерновика = Перечисления.ТипыДокументовЭДО.ЭТрН + Или ТипДокументаЧерновика = Перечисления.ТипыДокументовЭДО.ЭЗЗ) Тогда + + УспешностьРаспознования = Истина; + + КонецЕсли; + + Иначе + + УспешностьРаспознования = ЭтоДокументЭПД(ТипДокумента); + + КонецЕсли; + КонецЕсли; - ПараметрыФайла = Новый Структура(); - ПараметрыФайла.Вставить("ТипДокумента", ОбщегоНазначения.ИмяЗначенияПеречисления(ТипДокумента)); - ПараметрыФайла.Вставить("ОтражениеВУчете", Неопределено); - - УспешностьРаспознования = Истина; + Если УспешностьРаспознования Тогда - Возврат ПараметрыФайла; + ПараметрыФайла = Новый Структура(); + ПараметрыФайла.Вставить("ТипДокумента", ОбщегоНазначения.ИмяЗначенияПеречисления(ТипДокумента)); + ПараметрыФайла.Вставить("ОтражениеВУчете", Неопределено); + + Возврат ПараметрыФайла; + + КонецЕсли; + + Возврат Неопределено; КонецФункции @@ -1528,6 +1971,12 @@ МенеджерОбъекта = Документы.ЭлектронныйПутевойЛист; ИначеЕсли КлючеваяИнформацияПоТитулу.ТипДокумента = Перечисления.ТипыДокументовЭДО.ЭДФ Тогда МенеджерОбъекта = Документы.ЭлектронныйДоговорФрахтования; + ИначеЕсли КлючеваяИнформацияПоТитулу.ТипДокумента = Перечисления.ТипыДокументовЭДО.ЭПЭ Тогда + МенеджерОбъекта = Документы.ЭлектронноеПоручениеЭкспедитору; + ИначеЕсли КлючеваяИнформацияПоТитулу.ТипДокумента = Перечисления.ТипыДокументовЭДО.ЭЭР Тогда + МенеджерОбъекта = Документы.ЭлектроннаяЭкспедиторскаяРасписка; + ИначеЕсли КлючеваяИнформацияПоТитулу.ТипДокумента = Перечисления.ТипыДокументовЭДО.ЭСР Тогда + МенеджерОбъекта = Документы.ЭлектроннаяCкладскаяРасписка; КонецЕсли; ОриентацияСтраницыТД = ОриентацияСтраницы.Портрет; @@ -1665,7 +2114,10 @@ Или ТипДокумента = Перечисления.ТипыДокументовЭДО.ЭСВ Или ТипДокумента = Перечисления.ТипыДокументовЭДО.ЭЗЗ Или ТипДокумента = Перечисления.ТипыДокументовЭДО.ЭПЛ - Или ТипДокумента = Перечисления.ТипыДокументовЭДО.ЭДФ; + Или ТипДокумента = Перечисления.ТипыДокументовЭДО.ЭДФ + Или ТипДокумента = Перечисления.ТипыДокументовЭДО.ЭПЭ + Или ТипДокумента = Перечисления.ТипыДокументовЭДО.ЭЭР + Или ТипДокумента = Перечисления.ТипыДокументовЭДО.ЭСР; КонецФункции @@ -1794,6 +2246,60 @@ ПараметрыИсточника.Организация = СоставительПервогоТитула; ПараметрыИсточника.Контрагент = СоставительВторогоТитула; КонецЕсли; + ИначеЕсли ТипЗнч(ИсточникДанныхСсылка) = Тип("ДокументСсылка.ЭлектронноеПоручениеЭкспедитору") + Или ТипЗнч(ИсточникДанныхСсылка) = Тип("ДокументОбъект.ЭлектронноеПоручениеЭкспедитору") Тогда + ПараметрыИсточника.Тип = Перечисления.ТипыДокументовЭДО.ЭПЭ; + ПараметрыИсточника.Направление = ?(ИсточникДанныхСсылка.ЭтоВходящий, Перечисления.НаправленияЭДО.Входящий, Перечисления.НаправленияЭДО.Исходящий); + + Если ЗначениеЗаполнено(ИсточникДанныхСсылка.СсылкаТитулЗаказчикаСоставитель) Тогда + СоставительПервогоТитула = ИсточникДанныхСсылка.СсылкаТитулЗаказчикаСоставитель; + Иначе + СоставительПервогоТитула = ИсточникДанныхСсылка.СсылкаТитулЗаказчикаЗаказчик; + КонецЕсли; + + Если ИсточникДанныхСсылка.ЭтоВходящий = Истина Тогда + ПараметрыИсточника.Организация = ИсточникДанныхСсылка.СсылкаТитулЗаказчикаЭкспедитор; + ПараметрыИсточника.Контрагент = СоставительПервогоТитула; + Иначе + ПараметрыИсточника.Организация = СоставительПервогоТитула; + ПараметрыИсточника.Контрагент = ИсточникДанныхСсылка.СсылкаТитулЗаказчикаЭкспедитор; + КонецЕсли; + ИначеЕсли ТипЗнч(ИсточникДанныхСсылка) = Тип("ДокументСсылка.ЭлектроннаяЭкспедиторскаяРасписка") + Или ТипЗнч(ИсточникДанныхСсылка) = Тип("ДокументОбъект.ЭлектроннаяЭкспедиторскаяРасписка") Тогда + ПараметрыИсточника.Тип = Перечисления.ТипыДокументовЭДО.ЭЭР; + ПараметрыИсточника.Направление = ?(ИсточникДанныхСсылка.ЭтоВходящий, Перечисления.НаправленияЭДО.Входящий, Перечисления.НаправленияЭДО.Исходящий); + + Если ЗначениеЗаполнено(ИсточникДанныхСсылка.СсылкаТитулЭкспедитораСоставитель) Тогда + СоставительПервогоТитула = ИсточникДанныхСсылка.СсылкаТитулЭкспедитораСоставитель; + Иначе + СоставительПервогоТитула = ИсточникДанныхСсылка.СсылкаТитулЭкспедитораЭкспедитор; + КонецЕсли; + + Если ИсточникДанныхСсылка.ЭтоВходящий = Истина Тогда + ПараметрыИсточника.Организация = ИсточникДанныхСсылка.СсылкаТитулЭкспедитораЗаказчик; + ПараметрыИсточника.Контрагент = СоставительПервогоТитула; + Иначе + ПараметрыИсточника.Организация = СоставительПервогоТитула; + ПараметрыИсточника.Контрагент = ИсточникДанныхСсылка.СсылкаТитулЭкспедитораЗаказчик; + КонецЕсли; + ИначеЕсли ТипЗнч(ИсточникДанныхСсылка) = Тип("ДокументСсылка.ЭлектроннаяCкладскаяРасписка") + Или ТипЗнч(ИсточникДанныхСсылка) = Тип("ДокументОбъект.ЭлектроннаяCкладскаяРасписка") Тогда + ПараметрыИсточника.Тип = Перечисления.ТипыДокументовЭДО.ЭСР; + ПараметрыИсточника.Направление = ?(ИсточникДанныхСсылка.ЭтоВходящий, Перечисления.НаправленияЭДО.Входящий, Перечисления.НаправленияЭДО.Исходящий); + + Если ЗначениеЗаполнено(ИсточникДанныхСсылка.СсылкаТитулЭкспедитораСоставитель) Тогда + СоставительПервогоТитула = ИсточникДанныхСсылка.СсылкаТитулЭкспедитораСоставитель; + Иначе + СоставительПервогоТитула = ИсточникДанныхСсылка.СсылкаТитулЭкспедитораЭкспедитор; + КонецЕсли; + + Если ИсточникДанныхСсылка.ЭтоВходящий = Истина Тогда + ПараметрыИсточника.Организация = ИсточникДанныхСсылка.СсылкаТитулЭкспедитораЗаказчик; + ПараметрыИсточника.Контрагент = СоставительПервогоТитула; + Иначе + ПараметрыИсточника.Организация = СоставительПервогоТитула; + ПараметрыИсточника.Контрагент = ИсточникДанныхСсылка.СсылкаТитулЭкспедитораЗаказчик; + КонецЕсли; КонецЕсли; КонецПроцедуры @@ -1880,8 +2386,18 @@ Или СтрНачинаетсяС(ИдФайл, "ON_PTLSPOSMO") // ЭДФ Или СтрНачинаетсяС(ИдФайл, "ON_DOGFRAKHTEL") - Или СтрНачинаетсяС(ИдФайл, "ON_DOGFRASHCH"); + Или СтрНачинаетсяС(ИдФайл, "ON_DOGFRASHCH") + // ЭПЭ + Или СтрНачинаетсяС(ИдФайл, "ON_POREXPKLT") + Или СтрНачинаетсяС(ИдФайл, "ON_POREXPEXP") + Или СтрНачинаетсяС(ИдФайл, "ON_POREXPOTZ") + + // ЭЭР + Или СтрНачинаетсяС(ИдФайл, "ON_EXPRASP") + + // ЭСР + Или СтрНачинаетсяС(ИдФайл, "ON_SKLADRASP"); КонецФункции // Прочитать содержание документа. @@ -2016,6 +2532,55 @@ Содержание.ДатаДокумента = КлючеваяИнформацияПоТитулу.Дата; Содержание.НомерДокумента = КлючеваяИнформацияПоТитулу.Номер; КонецЕсли; + ИначеЕсли СтрНачинаетсяС(ОписаниеФайла.ИмяФайла, "ON_POREXP") Тогда + Содержание.ТипДокумента = Перечисления.ТипыДокументовЭДО.ЭПЭ; + Содержание.ТипРегламента = Перечисления.ТипыРегламентовЭДО.ЭПЭ; + Содержание.Формат = "EPE"; + // Дата и номер есть только в первом титуле + Если СтрНачинаетсяС(ОписаниеФайла.ИмяФайла, "ON_POREXPKLT_") Тогда + Поток = ОписаниеФайла.ДвоичныеДанные.ОткрытьПотокДляЧтения(); + ЧтениеXML = Новый ЧтениеXML; + ЧтениеXML.ОткрытьПоток(Поток); + ОбъектXDTO = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML); + ЧтениеXML.Закрыть(); + КлючеваяИнформацияПоТитулу = КлючеваяИнформацияПоТитулу(ОбъектXDTO); + + Содержание.ДатаДокумента = КлючеваяИнформацияПоТитулу.Дата; + Содержание.НомерДокумента = КлючеваяИнформацияПоТитулу.Номер; + КонецЕсли; + ИначеЕсли СтрНачинаетсяС(ОписаниеФайла.ИмяФайла, "ON_EXPRASP") Тогда + Содержание.ТипДокумента = Перечисления.ТипыДокументовЭДО.ЭЭР; + Содержание.ТипРегламента = Перечисления.ТипыРегламентовЭДО.ЭЭР; + Содержание.Формат = "EER"; + // Дата и номер есть только в первом титуле + Если СтрНачинаетсяС(ОписаниеФайла.ИмяФайла, "ON_EXPRASP_") Тогда + Поток = ОписаниеФайла.ДвоичныеДанные.ОткрытьПотокДляЧтения(); + ЧтениеXML = Новый ЧтениеXML; + ЧтениеXML.ОткрытьПоток(Поток); + ОбъектXDTO = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML); + ЧтениеXML.Закрыть(); + КлючеваяИнформацияПоТитулу = КлючеваяИнформацияПоТитулу(ОбъектXDTO); + + Содержание.ДатаДокумента = КлючеваяИнформацияПоТитулу.Дата; + Содержание.НомерДокумента = КлючеваяИнформацияПоТитулу.Номер; + КонецЕсли; + ИначеЕсли СтрНачинаетсяС(ОписаниеФайла.ИмяФайла, "ON_SKLADRASP") Тогда + Содержание.ТипДокумента = Перечисления.ТипыДокументовЭДО.ЭСР; + Содержание.ТипРегламента = Перечисления.ТипыРегламентовЭДО.ЭСР; + Содержание.Формат = "ESR"; + // Дата и номер есть только в первом титуле + Если СтрНачинаетсяС(ОписаниеФайла.ИмяФайла, "ON_SKLADRASP_") Тогда + Поток = ОписаниеФайла.ДвоичныеДанные.ОткрытьПотокДляЧтения(); + ЧтениеXML = Новый ЧтениеXML; + ЧтениеXML.ОткрытьПоток(Поток); + ОбъектXDTO = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML); + ЧтениеXML.Закрыть(); + КлючеваяИнформацияПоТитулу = КлючеваяИнформацияПоТитулу(ОбъектXDTO); + + Содержание.ДатаДокумента = КлючеваяИнформацияПоТитулу.Дата; + Содержание.НомерДокумента = КлючеваяИнформацияПоТитулу.Номер; + КонецЕсли; + КонецЕсли; //@skip-check constructor-function-return-section @@ -2091,7 +2656,11 @@ Или ТипЭлементаРегламента = Перечисления.ТипыЭлементовРегламентаЭДО.ЭСВ_Титул1_5 Или ТипЭлементаРегламента = Перечисления.ТипыЭлементовРегламентаЭДО.ЭЗЗ_Титул1 Или ТипЭлементаРегламента = Перечисления.ТипыЭлементовРегламентаЭДО.ЭПЛ_Титул1 - Или ТипЭлементаРегламента = Перечисления.ТипыЭлементовРегламентаЭДО.ЭДФ_Титул1; + Или ТипЭлементаРегламента = Перечисления.ТипыЭлементовРегламентаЭДО.ЭДФ_Титул1 + Или ТипЭлементаРегламента = Перечисления.ТипыЭлементовРегламентаЭДО.ЭПЭ_Титул1 + Или ТипЭлементаРегламента = Перечисления.ТипыЭлементовРегламентаЭДО.ЭЭР_Титул1 + Или ТипЭлементаРегламента = Перечисления.ТипыЭлементовРегламентаЭДО.ЭСР_Титул1; + КонецФункции @@ -2111,7 +2680,8 @@ Или ТипЭлементаРегламента = Перечисления.ТипыЭлементовРегламентаЭДО.ЭСВ_Титул3_2 Или ТипЭлементаРегламента = Перечисления.ТипыЭлементовРегламентаЭДО.ЭЗЗ_Титул2 Или ТипЭлементаРегламента = Перечисления.ТипыЭлементовРегламентаЭДО.ЭПЛ_Титул2 - Или ТипЭлементаРегламента = Перечисления.ТипыЭлементовРегламентаЭДО.ЭДФ_Титул2; + Или ТипЭлементаРегламента = Перечисления.ТипыЭлементовРегламентаЭДО.ЭДФ_Титул2 + Или ТипЭлементаРегламента = Перечисления.ТипыЭлементовРегламентаЭДО.ЭПЭ_Титул2; КонецФункции @@ -2136,6 +2706,12 @@ Возврат Перечисления.ТипыЭлементовРегламентаЭДО.ЭПЛ_Титул1; ИначеЕсли ТипДокумента = Перечисления.ТипыДокументовЭДО.ЭДФ Тогда Возврат Перечисления.ТипыЭлементовРегламентаЭДО.ЭДФ_Титул1; + ИначеЕсли ТипДокумента = Перечисления.ТипыДокументовЭДО.ЭПЭ Тогда + Возврат Перечисления.ТипыЭлементовРегламентаЭДО.ЭПЭ_Титул1; + ИначеЕсли ТипДокумента = Перечисления.ТипыДокументовЭДО.ЭЭР Тогда + Возврат Перечисления.ТипыЭлементовРегламентаЭДО.ЭЭР_Титул1; + ИначеЕсли ТипДокумента = Перечисления.ТипыДокументовЭДО.ЭСР Тогда + Возврат Перечисления.ТипыЭлементовРегламентаЭДО.ЭСР_Титул1; КонецЕсли; КонецФункции @@ -2569,22 +3145,93 @@ НоваяСтрока.ТипДокументаДляДополнительныхДанныхСтрокой = "SpecificationNotice"; НоваяСтрока.ЭтоОтветнаяПодпись = Неопределено; + // Поручение экспедитору + + НоваяСтрока = Таблица.Добавить(); + НоваяСтрока.ТипДокументаСтрокой = "Other"; + НоваяСтрока.ТипДокумента = Перечисления.ТипыДокументовЭДО.ЭПЭ; + НоваяСтрока.ТипЭлементаРегламента = Перечисления.ТипыЭлементовРегламентаЭДО.ЭПЭ_Титул1; + НоваяСтрока.ТипРегламента = Перечисления.ТипыРегламентовЭДО.ЭПЭ; + НоваяСтрока.ТипДокументаДляДополнительныхДанныхСтрокой = "EPE_T1"; + НоваяСтрока.ЭтоОтветнаяПодпись = Неопределено; + + НоваяСтрока = Таблица.Добавить(); + НоваяСтрока.ТипДокументаСтрокой = "Other"; + НоваяСтрока.ТипДокумента = Перечисления.ТипыДокументовЭДО.ЭПЭ; + НоваяСтрока.ТипЭлементаРегламента = Перечисления.ТипыЭлементовРегламентаЭДО.ЭПЭ_Титул2; + НоваяСтрока.ТипРегламента = Перечисления.ТипыРегламентовЭДО.ЭПЭ; + НоваяСтрока.ТипДокументаДляДополнительныхДанныхСтрокой = "EPE_T2"; + НоваяСтрока.ЭтоОтветнаяПодпись = Неопределено; + + НоваяСтрока = Таблица.Добавить(); + НоваяСтрока.ТипДокументаСтрокой = "Other"; + НоваяСтрока.ТипДокумента = Перечисления.ТипыДокументовЭДО.ЭПЭ; + НоваяСтрока.ТипЭлементаРегламента = Перечисления.ТипыЭлементовРегламентаЭДО.ЭПЭ_Титул3; + НоваяСтрока.ТипРегламента = Перечисления.ТипыРегламентовЭДО.ЭПЭ; + НоваяСтрока.ТипДокументаДляДополнительныхДанныхСтрокой = "EPE_T3"; + НоваяСтрока.ЭтоОтветнаяПодпись = Неопределено; + + //Электронная экспедиторская расписка + НоваяСтрока = Таблица.Добавить(); + НоваяСтрока.ТипДокументаСтрокой = "Other"; + НоваяСтрока.ТипДокумента = Перечисления.ТипыДокументовЭДО.ЭЭР; + НоваяСтрока.ТипЭлементаРегламента = Перечисления.ТипыЭлементовРегламентаЭДО.ЭЭР_Титул1; + НоваяСтрока.ТипРегламента = Перечисления.ТипыРегламентовЭДО.ЭЭР; + НоваяСтрока.ТипДокументаДляДополнительныхДанныхСтрокой = "EER_T1"; + НоваяСтрока.ЭтоОтветнаяПодпись = Неопределено; + + //Электронная экспедиторская расписка + НоваяСтрока = Таблица.Добавить(); + НоваяСтрока.ТипДокументаСтрокой = "Other"; + НоваяСтрока.ТипДокумента = Перечисления.ТипыДокументовЭДО.ЭСР; + НоваяСтрока.ТипЭлементаРегламента = Перечисления.ТипыЭлементовРегламентаЭДО.ЭСР_Титул1; + НоваяСтрока.ТипРегламента = Перечисления.ТипыРегламентовЭДО.ЭСР; + НоваяСтрока.ТипДокументаДляДополнительныхДанныхСтрокой = "ESR_T1"; + НоваяСтрока.ЭтоОтветнаяПодпись = Неопределено; + + КонецПроцедуры // При распознании документа. // // Параметры: -// ВидСообщения - СправочникСсылка.ВидыДокументовЭДО - Вид сообщения +// ДанныеДокумента - Структура Или СправочникСсылка.ВидыДокументовЭДО // ЭлементСхемы - СтрокаДереваЗначений - Элемент схемы -Процедура ПриРаспознанииДокумента(ВидСообщения, ЭлементСхемы) Экспорт +Процедура ПриРаспознанииДокумента(ДанныеДокумента, ЭлементСхемы) Экспорт - ТипДокумента = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ВидСообщения, "ТипДокумента"); - Если ТипДокумента = Перечисления.ТипыДокументовЭДО.ЭТрН - Или ТипДокумента = Перечисления.ТипыДокументовЭДО.ЭЗН - Или ТипДокумента = Перечисления.ТипыДокументовЭДО.ЭСВ - Или ТипДокумента = Перечисления.ТипыДокументовЭДО.ЭЗЗ - Или ТипДокумента = Перечисления.ТипыДокументовЭДО.ЭПЛ - Или ТипДокумента = Перечисления.ТипыДокументовЭДО.ЭДФ Тогда + ЭтоЭПДДокумент = Ложь; + + Если ТипЗнч(ДанныеДокумента) = Тип("СправочникСсылка.ВидыДокументовЭДО") Тогда + + ТипДокумента = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ДанныеДокумента, "ТипДокумента"); + + ЭтоЭПДДокумент = ЭтоДокументЭПД(ТипДокумента); + + ИначеЕсли ТипЗнч(ДанныеДокумента) = Тип("Структура") Тогда + + ТипДокумента = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ДанныеДокумента.ВидДокумента, "ТипДокумента"); + + Если ТипДокумента = Перечисления.ТипыДокументовЭДО.Черновик Тогда + + ТипДокументаЧерновикаЗначение = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ДанныеДокумента.Ссылка, + "ЧерновикВладелец.ВидЧерновика.ТипДокумента"); + + Если ЗначениеЗаполнено(ТипДокументаЧерновикаЗначение) Тогда + ТипДокументаЧерновика = ТипДокументаЧерновикаЗначение.ЧерновикВладелецВидЧерновикаТипДокумента; + КонецЕсли; + + Если ЗначениеЗаполнено(ТипДокументаЧерновика) + И (ТипДокументаЧерновика = Перечисления.ТипыДокументовЭДО.ЭТрН + Или ТипДокументаЧерновика = Перечисления.ТипыДокументовЭДО.ЭЗЗ) Тогда + ЭтоЭПДДокумент = Истина; + КонецЕсли; + Иначе + ЭтоЭПДДокумент = ЭтоДокументЭПД(ТипДокумента); + КонецЕсли; + + КонецЕсли; + + Если ЭтоЭПДДокумент Тогда ЭлементСхемы.ФормированиеПоОбъектуУчета = Истина; ЭлементСхемы.РаспознаниеВыполнено = Истина; ЭлементСхемы.Распознан = Истина; @@ -2614,7 +3261,13 @@ ИначеЕсли ТипДокумента = Перечисления.ТипыДокументовЭДО.ЭПЛ Тогда ТитулГрузоотправителяСтрока = НСтр("ru='Информация оформителя (Титул 1)'"); ИначеЕсли ТипДокумента = Перечисления.ТипыДокументовЭДО.ЭДФ Тогда - ТитулГрузоотправителяСтрока = НСтр("ru='Информация фрахтователя (Титул 1)'"); + ТитулГрузоотправителяСтрока = НСтр("ru='Информация фрахтователя (Титул 1)'"); + ИначеЕсли ТипДокумента = Перечисления.ТипыДокументовЭДО.ЭПЭ Тогда + ТитулГрузоотправителяСтрока = НСтр("ru='Информация заказчика (Титул 1)'"); + ИначеЕсли ТипДокумента = Перечисления.ТипыДокументовЭДО.ЭЭР Тогда + ТитулГрузоотправителяСтрока = НСтр("ru='Информация экспедитора (Титул 1)'"); + ИначеЕсли ТипДокумента = Перечисления.ТипыДокументовЭДО.ЭСР Тогда + ТитулГрузоотправителяСтрока = НСтр("ru='Информация экспедитора (Титул 1)'"); КонецЕсли; Представление = ТитулГрузоотправителяСтрока; @@ -2776,6 +3429,72 @@ | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ЭлектронныйДоговорФрахтования КАК ЭлектронныйДоговорФрахтования | ПО ОбъектыУчетаДокументовЭДО.ОбъектУчета = ЭлектронныйДоговорФрахтования.Ссылка |ГДЕ + | ОбъектыУчетаДокументовЭДО.ЭлектронныйДокумент = &ЭлектронныйДокумент + | + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ + | ЭлектронноеПоручениеЭкспедитору.ВидДокумента, + | ЭлектронноеПоручениеЭкспедитору.ИдентификаторЗаказчика КАК Грузоотправитель, + | ЭлектронноеПоручениеЭкспедитору.ИдентификаторЭкспедитора КАК Грузоперевозчик, + | НЕОПРЕДЕЛЕНО КАК Грузополучатель, + | НЕОПРЕДЕЛЕНО КАК Оформитель, + | НЕОПРЕДЕЛЕНО КАК Медосмотр, + | НЕОПРЕДЕЛЕНО КАК Техконтроль, + | НЕОПРЕДЕЛЕНО КАК Одометр, + | ЭлектронноеПоручениеЭкспедитору.ЭтоВходящий КАК ЭтоВходящий, + | ЭлектронноеПоручениеЭкспедитору.ТекущийТитул КАК ТекущийТитул, + | ЭлектронноеПоручениеЭкспедитору.УИДМинтранс КАК МинтрансИД, + | """" + |ИЗ + | РегистрСведений.ОбъектыУчетаДокументовЭДО КАК ОбъектыУчетаДокументовЭДО + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ЭлектронноеПоручениеЭкспедитору КАК ЭлектронноеПоручениеЭкспедитору + | ПО ОбъектыУчетаДокументовЭДО.ОбъектУчета = ЭлектронноеПоручениеЭкспедитору.Ссылка + |ГДЕ + | ОбъектыУчетаДокументовЭДО.ЭлектронныйДокумент = &ЭлектронныйДокумент + | + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ + | ЭлектроннаяЭкспедиторскаяРасписка.ВидДокумента, + | ЭлектроннаяЭкспедиторскаяРасписка.ИдентификаторЗаказчика КАК Грузоотправитель, + | ЭлектроннаяЭкспедиторскаяРасписка.ИдентификаторЭкспедитора КАК Грузоперевозчик, + | НЕОПРЕДЕЛЕНО КАК Грузополучатель, + | НЕОПРЕДЕЛЕНО КАК Оформитель, + | НЕОПРЕДЕЛЕНО КАК Медосмотр, + | НЕОПРЕДЕЛЕНО КАК Техконтроль, + | НЕОПРЕДЕЛЕНО КАК Одометр, + | ЭлектроннаяЭкспедиторскаяРасписка.ЭтоВходящий КАК ЭтоВходящий, + | ЭлектроннаяЭкспедиторскаяРасписка.ТекущийТитул КАК ТекущийТитул, + | ЭлектроннаяЭкспедиторскаяРасписка.УИДМинтранс КАК МинтрансИД, + | """" + |ИЗ + | РегистрСведений.ОбъектыУчетаДокументовЭДО КАК ОбъектыУчетаДокументовЭДО + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ЭлектроннаяЭкспедиторскаяРасписка КАК ЭлектроннаяЭкспедиторскаяРасписка + | ПО ОбъектыУчетаДокументовЭДО.ОбъектУчета = ЭлектроннаяЭкспедиторскаяРасписка.Ссылка + |ГДЕ + | ОбъектыУчетаДокументовЭДО.ЭлектронныйДокумент = &ЭлектронныйДокумент + | + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ + | ЭлектроннаяCкладскаяРасписка.ВидДокумента, + | ЭлектроннаяCкладскаяРасписка.ИдентификаторЗаказчика КАК Грузоотправитель, + | ЭлектроннаяCкладскаяРасписка.ИдентификаторЭкспедитора КАК Грузоперевозчик, + | НЕОПРЕДЕЛЕНО КАК Грузополучатель, + | НЕОПРЕДЕЛЕНО КАК Оформитель, + | НЕОПРЕДЕЛЕНО КАК Медосмотр, + | НЕОПРЕДЕЛЕНО КАК Техконтроль, + | НЕОПРЕДЕЛЕНО КАК Одометр, + | ЭлектроннаяCкладскаяРасписка.ЭтоВходящий КАК ЭтоВходящий, + | ЭлектроннаяCкладскаяРасписка.ТекущийТитул КАК ТекущийТитул, + | ЭлектроннаяCкладскаяРасписка.УИДМинтранс КАК МинтрансИД, + | """" + |ИЗ + | РегистрСведений.ОбъектыУчетаДокументовЭДО КАК ОбъектыУчетаДокументовЭДО + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ЭлектроннаяCкладскаяРасписка КАК ЭлектроннаяCкладскаяРасписка + | ПО ОбъектыУчетаДокументовЭДО.ОбъектУчета = ЭлектроннаяCкладскаяРасписка.Ссылка + |ГДЕ | ОбъектыУчетаДокументовЭДО.ЭлектронныйДокумент = &ЭлектронныйДокумент"; Выборка = Запрос.Выполнить().Выбрать(); @@ -3067,6 +3786,23 @@ ДобавитьВТаблицуТипЭлементаРегламента(Таблица, "UOUTransactionEDF_T1", Перечисления.ТипыЭлементовРегламентаЭДО.ЭДФ_ОткФщ); + //Электронное поручение экспедитору + ДобавитьВТаблицуТипЭлементаРегламента(Таблица, + "EPE_T1", Перечисления.ТипыЭлементовРегламентаЭДО.ЭПЭ_Титул1); + ДобавитьВТаблицуТипЭлементаРегламента(Таблица, + "EPE_T2", Перечисления.ТипыЭлементовРегламентаЭДО.ЭПЭ_Титул2); + ДобавитьВТаблицуТипЭлементаРегламента(Таблица, + "EPE_T3", Перечисления.ТипыЭлементовРегламентаЭДО.ЭПЭ_Титул3); + + //Экспедиторская расписка + ДобавитьВТаблицуТипЭлементаРегламента(Таблица, + "EER_T1", Перечисления.ТипыЭлементовРегламентаЭДО.ЭЭР_Титул1); + + //Складская расписка + ДобавитьВТаблицуТипЭлементаРегламента(Таблица, + "ESR_T1", Перечисления.ТипыЭлементовРегламентаЭДО.ЭСР_Титул1); + + КонецПроцедуры // При формировании таблицы типов регламентов. @@ -3097,8 +3833,20 @@ НоваяСтрока = Таблица.Добавить(); НоваяСтрока.КодРегламента = "CharteringContract"; - НоваяСтрока.ТипРегламента = Перечисления.ТипыРегламентовЭДО.ЭДФ; + НоваяСтрока.ТипРегламента = Перечисления.ТипыРегламентовЭДО.ЭДФ; + НоваяСтрока = Таблица.Добавить(); + НоваяСтрока.КодРегламента = "EPE"; + НоваяСтрока.ТипРегламента = Перечисления.ТипыРегламентовЭДО.ЭПЭ; + + НоваяСтрока = Таблица.Добавить(); + НоваяСтрока.КодРегламента = "EER"; + НоваяСтрока.ТипРегламента = Перечисления.ТипыРегламентовЭДО.ЭЭР; + + НоваяСтрока = Таблица.Добавить(); + НоваяСтрока.КодРегламента = "ESR"; + НоваяСтрока.ТипРегламента = Перечисления.ТипыРегламентовЭДО.ЭСР; + КонецПроцедуры // При определении информации отправителя. @@ -3135,6 +3883,16 @@ ИначеЕсли ТипРегламента = Перечисления.ТипыРегламентовЭДО.ЭДФ Тогда ИнформацияОтправителя = ДанныеЭлементовСхемы.Найти( Перечисления.ТипыЭлементовРегламентаЭДО.ЭДФ_Титул1, "ТипЭлементаРегламента"); + ИначеЕсли ТипРегламента = Перечисления.ТипыРегламентовЭДО.ЭПЭ Тогда + ИнформацияОтправителя = ДанныеЭлементовСхемы.Найти( + Перечисления.ТипыЭлементовРегламентаЭДО.ЭПЭ_Титул1, "ТипЭлементаРегламента"); + ИначеЕсли ТипРегламента = Перечисления.ТипыРегламентовЭДО.ЭЭР Тогда + ИнформацияОтправителя = ДанныеЭлементовСхемы.Найти( + Перечисления.ТипыЭлементовРегламентаЭДО.ЭЭР_Титул1, "ТипЭлементаРегламента"); + ИначеЕсли ТипРегламента = Перечисления.ТипыРегламентовЭДО.ЭСР Тогда + ИнформацияОтправителя = ДанныеЭлементовСхемы.Найти( + Перечисления.ТипыЭлементовРегламентаЭДО.ЭСР_Титул1, "ТипЭлементаРегламента"); + КонецЕсли; КонецПроцедуры @@ -3189,6 +3947,12 @@ АктуальныеТипы, Перечисления.ТипыДокументовЭДО.ЭПЛ, Истина, Истина); ОбменСКонтрагентами.ДобавитьИспользуемыйТипДокумента( АктуальныеТипы, Перечисления.ТипыДокументовЭДО.ЭДФ, Истина, Истина); + ОбменСКонтрагентами.ДобавитьИспользуемыйТипДокумента( + АктуальныеТипы, Перечисления.ТипыДокументовЭДО.ЭПЭ, Истина, Истина); + ОбменСКонтрагентами.ДобавитьИспользуемыйТипДокумента( + АктуальныеТипы, Перечисления.ТипыДокументовЭДО.ЭЭР, Истина, Истина); + ОбменСКонтрагентами.ДобавитьИспользуемыйТипДокумента( + АктуальныеТипы, Перечисления.ТипыДокументовЭДО.ЭСР, Истина, Истина); КонецЕсли; КонецПроцедуры @@ -3205,7 +3969,10 @@ ПредставленияЭПД.Вставить(Перечисления.ТипыДокументовЭДО.ЭЗЗ, НСтр("ru = 'Электронные заказы (заявки)'")); ПредставленияЭПД.Вставить(Перечисления.ТипыДокументовЭДО.ЭПЛ, НСтр("ru = 'Электронные путевые листы'")); ПредставленияЭПД.Вставить(Перечисления.ТипыДокументовЭДО.ЭДФ, НСтр("ru = 'Электронные договоры фрахтования'")); - + ПредставленияЭПД.Вставить(Перечисления.ТипыДокументовЭДО.ЭПЭ, НСтр("ru = 'Электронные поручения экспедиторам'")); + ПредставленияЭПД.Вставить(Перечисления.ТипыДокументовЭДО.ЭЭР, НСтр("ru = 'Электронные экспедиторские расписки'")); + ПредставленияЭПД.Вставить(Перечисления.ТипыДокументовЭДО.ЭСР, НСтр("ru = 'Электронные складские расписки'")); + КонецПроцедуры // Способы отражения в учете типа электронного документа. @@ -3227,6 +3994,12 @@ СпособыОтраженияВУчете.Добавить("ЭлектронныйПутевойЛист", НСтр("ru = 'Электронный путевой лист'"), Истина); ИначеЕсли ТипДокумента = Перечисления.ТипыДокументовЭДО.ЭДФ Тогда СпособыОтраженияВУчете.Добавить("ЭлектронныйДоговорФрахтования", НСтр("ru = 'Электронный договор фрахтования'"), Истина); + ИначеЕсли ТипДокумента = Перечисления.ТипыДокументовЭДО.ЭПЭ Тогда + СпособыОтраженияВУчете.Добавить("ЭлектронноеПоручениеЭкспедитору", НСтр("ru = 'Электронное поручение экспедитору'"), Истина); + ИначеЕсли ТипДокумента = Перечисления.ТипыДокументовЭДО.ЭЭР Тогда + СпособыОтраженияВУчете.Добавить("ЭлектроннаяЭкспедиторскаяРасписка", НСтр("ru = 'Электронная экспедиторская расписка'"), Истина); + ИначеЕсли ТипДокумента = Перечисления.ТипыДокументовЭДО.ЭСР Тогда + СпособыОтраженияВУчете.Добавить("ЭлектроннаяCкладскаяРасписка", НСтр("ru = 'Электронная складская расписка'"), Истина); КонецЕсли; КонецПроцедуры @@ -3240,13 +4013,7 @@ // НайденныйОбъект - ДокументСсылка - Найденный объект Процедура СохранитьДанныеОбъектаВБД(СтрокаДляЗагрузки, ДеревоРазбора, ПараметрыОбработки, НайденныйОбъект) Экспорт - Если СтрокаДляЗагрузки.ВидЭД = Перечисления.ТипыДокументовЭДО.ЭТрН - Или СтрокаДляЗагрузки.ВидЭД = Перечисления.ТипыДокументовЭДО.ЭЗН - Или СтрокаДляЗагрузки.ВидЭД = Перечисления.ТипыДокументовЭДО.ЭСВ - Или СтрокаДляЗагрузки.ВидЭД = Перечисления.ТипыДокументовЭДО.ЭЗЗ - Или СтрокаДляЗагрузки.ВидЭД = Перечисления.ТипыДокументовЭДО.ЭПЛ - Или СтрокаДляЗагрузки.ВидЭД = Перечисления.ТипыДокументовЭДО.ЭДФ Тогда - + Если ЭтоДокументЭПД(СтрокаДляЗагрузки.ВидЭД) Тогда НайденныйОбъект = НайтиСоздатьЭПД(СтрокаДляЗагрузки.ЗначениеРеквизита, ДеревоРазбора, ПараметрыОбработки, НайденныйОбъект); КонецЕсли; @@ -3275,6 +4042,12 @@ ИмяДокумента = "ЭлектронныйПутевойЛист"; ИначеЕсли ТипДокумента = Перечисления.ТипыДокументовЭДО.ЭДФ Тогда ИмяДокумента = "ЭлектронныйДоговорФрахтования"; + ИначеЕсли ТипДокумента = Перечисления.ТипыДокументовЭДО.ЭПЭ Тогда + ИмяДокумента = "ЭлектронноеПоручениеЭкспедитору"; + ИначеЕсли ТипДокумента = Перечисления.ТипыДокументовЭДО.ЭЭР Тогда + ИмяДокумента = "ЭлектроннаяЭкспедиторскаяРасписка"; + ИначеЕсли ТипДокумента = Перечисления.ТипыДокументовЭДО.ЭСР Тогда + ИмяДокумента = "ЭлектроннаяCкладскаяРасписка"; КонецЕсли; Возврат ИмяДокумента; @@ -3451,9 +4224,484 @@ КонецФункции +// Добавляет команды создания документов +// Параметры: +// Команды - См. ПодключаемыеКомандыПереопределяемый.ПриОпределенииКомандПодключенныхКОбъекту.Команды +// ВидКоманды - Строка +// РежимЗаписи - Строка +Процедура ЗаполнитьКомандыСозданияУчетныхДокументов(Команды, ВидКоманды, РежимЗаписи) Экспорт + + НоваяКоманда = Команды.Добавить(); + НоваяКоманда.Вид = ВидКоманды; + НоваяКоманда.Важность = "СмТакже"; + НоваяКоманда.РежимЗаписи = РежимЗаписи; + НоваяКоманда.Порядок = 1; + НоваяКоманда.Идентификатор = "СоздатьЭлектронныйЗаказЗаявка"; + НоваяКоманда.Представление = НСтр("ru='Электронный заказ (заявка)'"); + НоваяКоманда.Обработчик = "ОбменСГИСЭПДКлиент.СоздатьЭлектронныйЗаказЗаявкаКоманда"; + + НоваяКоманда = Команды.Добавить(); + НоваяКоманда.Вид = ВидКоманды; + НоваяКоманда.Важность = "СмТакже"; + НоваяКоманда.РежимЗаписи = РежимЗаписи; + НоваяКоманда.Порядок = 2; + НоваяКоманда.Идентификатор = "СоздатьЭлектроннаяТранспортнаяНакладная"; + НоваяКоманда.Представление = НСтр("ru='Электронная транспортная накладная'"); + НоваяКоманда.Обработчик = "ОбменСГИСЭПДКлиент.СоздатьЭлектроннаяТранспортнаяНакладнаяКоманда"; + + НоваяКоманда = Команды.Добавить(); + НоваяКоманда.Вид = ВидКоманды; + НоваяКоманда.Важность = "СмТакже"; + НоваяКоманда.РежимЗаписи = РежимЗаписи; + НоваяКоманда.Порядок = 3; + НоваяКоманда.Идентификатор = "СоздатьЭлектронныйПутевойЛист"; + НоваяКоманда.Представление = НСтр("ru='Электронный путевой лист'"); + НоваяКоманда.Обработчик = "ОбменСГИСЭПДКлиент.СоздатьЭлектронныйПутевойЛистКоманда"; + + НоваяКоманда = Команды.Добавить(); + НоваяКоманда.Вид = ВидКоманды; + НоваяКоманда.Важность = "СмТакже"; + НоваяКоманда.РежимЗаписи = РежимЗаписи; + НоваяКоманда.Порядок = 4; + НоваяКоманда.Идентификатор = "СоздатьЭлектронныйЗаказНаряд"; + НоваяКоманда.Представление = НСтр("ru='Электронный заказ-наряд'"); + НоваяКоманда.Обработчик = "ОбменСГИСЭПДКлиент.СоздатьЭлектронныйЗаказНарядКоманда"; + + НоваяКоманда = Команды.Добавить(); + НоваяКоманда.Вид = ВидКоманды; + НоваяКоманда.Важность = "СмТакже"; + НоваяКоманда.РежимЗаписи = РежимЗаписи; + НоваяКоманда.Порядок = 5; + НоваяКоманда.Идентификатор = "СоздатьЭлектроннаяСопроводительнаяВедомость"; + НоваяКоманда.Представление = НСтр("ru='Электронная сопроводительная ведомость'"); + НоваяКоманда.Обработчик = "ОбменСГИСЭПДКлиент.СоздатьЭлектроннаяСопроводительнаяВедомостьКоманда"; + + НоваяКоманда = Команды.Добавить(); + НоваяКоманда.Вид = ВидКоманды; + НоваяКоманда.Важность = "СмТакже"; + НоваяКоманда.РежимЗаписи = РежимЗаписи; + НоваяКоманда.Порядок = 6; + НоваяКоманда.Идентификатор = "СоздатьЭлектронныйДоговорФрахтования"; + НоваяКоманда.Представление = НСтр("ru='Электронный договор фрахтования'"); + НоваяКоманда.Обработчик = "ОбменСГИСЭПДКлиент.СоздатьЭлектронныйДоговорФрахтованияКоманда"; + + НоваяКоманда = Команды.Добавить(); + НоваяКоманда.Вид = ВидКоманды; + НоваяКоманда.Важность = "СмТакже"; + НоваяКоманда.РежимЗаписи = РежимЗаписи; + НоваяКоманда.Порядок = 7; + НоваяКоманда.Идентификатор = "СоздатьЭлектронноеПоручениеЭкспедитору"; + НоваяКоманда.Представление = НСтр("ru='Электронное поручение экспедитору'"); + НоваяКоманда.Обработчик = "ОбменСГИСЭПДКлиент.СоздатьЭлектронноеПоручениеЭкспедиторуКоманда"; + + НоваяКоманда = Команды.Добавить(); + НоваяКоманда.Вид = ВидКоманды; + НоваяКоманда.Важность = "СмТакже"; + НоваяКоманда.РежимЗаписи = РежимЗаписи; + НоваяКоманда.Порядок = 8; + НоваяКоманда.Идентификатор = "СоздатьЭлектроннаяЭкспедиторскаяРасписка"; + НоваяКоманда.Представление = НСтр("ru='Электронная экспедиторская расписка'"); + НоваяКоманда.Обработчик = "ОбменСГИСЭПДКлиент.СоздатьЭлектроннаяЭкспедиторскаяРаспискаКоманда"; + + НоваяКоманда = Команды.Добавить(); + НоваяКоманда.Вид = ВидКоманды; + НоваяКоманда.Важность = "СмТакже"; + НоваяКоманда.РежимЗаписи = РежимЗаписи; + НоваяКоманда.Порядок = 9; + НоваяКоманда.Идентификатор = "СоздатьЭлектроннаяCкладскаяРасписка"; + НоваяКоманда.Представление = НСтр("ru='Электронная складская расписка'"); + НоваяКоманда.Обработчик = "ОбменСГИСЭПДКлиент.СоздатьЭлектроннаяCкладскаяРаспискаКоманда"; + +КонецПроцедуры + #КонецОбласти -#Область СлужебныйПрограммныйИнтерфейс +#Область СлужебныйПрограммныйИнтерфейс + +Процедура ДобавитьПолеДляЕгаисВФормеЭПЛ(Форма) Экспорт + + ИдентификаторИнформацииЕгаис = "ЕГАИС"; + ИндексИнформацииЕгаис = 0; + ИнформацииЕгаис = Новый Структура; + + ДопИнф = ОбменСГИСЭПДКлиентСервер.МассивСтрокТаблицыИзСтруктурыФормы(Форма, "ТитулОформлениеДополнительнаяИнформация"); + + Индекс = 0; + Для Каждого ИнфПоле Из ДопИнф Цикл + Индекс = Индекс + 1; + Если ИнфПоле.Свойство("ИдентификаторИнформации") + И ВРЕГ(ИнфПоле.ИдентификаторИнформации) = ИдентификаторИнформацииЕгаис Тогда + ИндексИнформацииЕгаис = Индекс; + ИнформацииЕгаис = ИнфПоле; + Прервать; + КонецЕсли; + КонецЦикла; + + Если ИндексИнформацииЕгаис <= 0 Тогда + ИндексИнформацииЕгаис = 1; + КонецЕсли; + + КонтейнерОтображаемойВерсии = Неопределено; + + Префикс = "ТитулОформлениеДополнительнаяИнформация__" + ИндексИнформацииЕгаис + "__"; + + Если Не ИнформацииЕгаис.Свойство("ИдентификаторСтрокиРодителя") Тогда + + ИдентификаторСтрокиИнфПолей = ""; + + ИнфПоля = ОбменСГИСЭПДКлиентСервер.МассивСтрокТаблицыИзСтруктурыФормы(Форма, "ТитулОформлениеИнформационныеПоля"); + + Если ИнфПоля.Количество() > 0 Тогда + + ИдентификаторСтрокиИнфПолей = ИнфПоля[0].ИдентификаторСтроки + + Иначе + ИдентификаторСтрокиИнфПолей = Строка(Новый УникальныйИдентификатор); + + ОбменСГИСЭПДКлиентСервер.УстановитьЗначениеРеквизитаВСтруктуреФормы(Форма, + "ТитулОформлениеИнформационныеПоля__1__ИдентификаторСтроки", + ИдентификаторСтрокиИнфПолей, + Ложь, КонтейнерОтображаемойВерсии); + КонецЕсли; + + ОбменСГИСЭПДКлиентСервер.УстановитьЗначениеРеквизитаВСтруктуреФормы(Форма, + Префикс + "ИдентификаторСтрокиРодителя", + ИдентификаторСтрокиИнфПолей, + Ложь, КонтейнерОтображаемойВерсии); + + КонецЕсли; + + ОбменСГИСЭПДКлиентСервер.УстановитьЗначениеРеквизитаВСтруктуреФормы(Форма, + Префикс + "ИдентификаторИнформации", + ИдентификаторИнформацииЕгаис, + Ложь, КонтейнерОтображаемойВерсии); + + ОбменСГИСЭПДКлиентСервер.УстановитьЗначениеРеквизитаВСтруктуреФормы(Форма, + Префикс + "ТипДанных", + "Строка", + Ложь, КонтейнерОтображаемойВерсии); + + ОбменСГИСЭПДКлиентСервер.УстановитьЗначениеРеквизитаВСтруктуреФормы(Форма, + Префикс + "Квалификаторы", + 20, + Ложь, КонтейнерОтображаемойВерсии); + + ОбменСГИСЭПДКлиентСервер.УстановитьЗначениеРеквизитаВСтруктуреФормы(Форма, + Префикс + "Заголовок", + "Идентификатор заявки ЕГАИС", + Ложь, КонтейнерОтображаемойВерсии, Истина); + +КонецПроцедуры + +// Возвращает истину если тип входит в опредееляемый тип ДоговорЭПД +// +// Параметры: +// ТипСсылки - Произвольный +// +// Возвращаемое значение: +// Булево - Успешность обработки результата +// +Функция ЭтоДоговорЭПД(ТипСсылки) Экспорт + + Возврат Метаданные.ОпределяемыеТипы.ДоговорЭПД.Тип.СодержитТип(ТипСсылки); + +КонецФункции + +// Возвращает истину если в определяемом типе ДоговорЭПД нет типа СправочникСсылка.ИдентификаторыОбъектовМетаданных +// +// Возвращаемое значение: +// Булево - Успешность обработки результата +// +Функция ОпределенДоговорЭПД() Экспорт + + Возврат Не Метаданные.ОпределяемыеТипы.ДоговорЭПД.Тип.СодержитТип(Тип("СправочникСсылка.ИдентификаторыОбъектовМетаданных")); + +КонецФункции + +Функция ТитулДолженБытьВКодировкеUtf8(ИмяФайла) + + Результат = Ложь; + + ПрефиксыИмениФайла = Новый Массив; + ПрефиксыИмениФайла.Добавить("ON_POREXPKLT"); + ПрефиксыИмениФайла.Добавить("ON_POREXPEXP"); + ПрефиксыИмениФайла.Добавить("ON_POREXPOTZ"); + ПрефиксыИмениФайла.Добавить("ON_EXPRASP"); + ПрефиксыИмениФайла.Добавить("ON_SKLADRASP"); + + ИмяФайлаВВерхнемРегистре = ВРЕГ(ИмяФайла); + + Для Каждого ПрефиксФайла Из ПрефиксыИмениФайла Цикл + + Если СтрНачинаетсяС(ИмяФайлаВВерхнемРегистре, ПрефиксФайла) Тогда + Результат = Истина; + Прервать; + КонецЕсли; + + КонецЦикла; + + Возврат Результат; + +КонецФункции + +Функция ПолучитьДанныеОЗаписиВРеестреУведомленийТЭДПоПоследнемуДокументу(Организация, ВидДокумента, Титул = Неопределено) Экспорт + + Результат = Новый Структура("Номер, Дата"); + + ТипДокумента = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ВидДокумента, "ТипДокумента"); + + ИмяДокумента = ИмяДокументаПоТипу(ТипДокумента); + + Если Титул = Неопределено Тогда + Если ТипДокумента = Перечисления.ТипыДокументовЭДО.ЭПЭ Тогда + Титул = ПредопределенноеЗначение("Перечисление.ТипыЭлементовРегламентаЭДО.ЭПЭ_Титул2"); + ИначеЕсли ТипДокумента = Перечисления.ТипыДокументовЭДО.ЭЭР Тогда + Титул = ПредопределенноеЗначение("Перечисление.ТипыЭлементовРегламентаЭДО.ЭЭР_Титул1"); + ИначеЕсли ТипДокумента = Перечисления.ТипыДокументовЭДО.ЭСР Тогда + Титул = ПредопределенноеЗначение("Перечисление.ТипыЭлементовРегламентаЭДО.ЭСР_Титул1"); + КонецЕсли; + КонецЕсли; + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ ПЕРВЫЕ 2 + | Т.ЗначениеРеквизитаСтрока КАК ЗначениеРеквизитаСтрока, + | Т.ЗначениеРеквизита КАК ЗначениеРеквизита, + | Т.ИмяРеквизита КАК ИмяРеквизита + |ИЗ + | РегистрСведений.ЗначенияРеквизитовДокументовЭПД КАК Т + |ГДЕ + | Т.Организация = &Организация + | И Т.Титул = &Титул + | И (Т.ИмяРеквизита = ""ТитулЭкспедитораНомРеестр"" + | ИЛИ Т.ИмяРеквизита = ""ТитулЭкспедитораДатаРеестр"") + | И Т.Документ В + | (ВЫБРАТЬ ПЕРВЫЕ 1 + | Док.Ссылка + | ИЗ + | Документ." + ИмяДокумента + " КАК Док + | ГДЕ + | Док.Организация = &Организация + | УПОРЯДОЧИТЬ ПО + | Док.МоментВремени УБЫВ)"; + + Запрос.УстановитьПараметр("Организация", Организация); + Запрос.УстановитьПараметр("Титул", Титул); + + Выборка = Запрос.Выполнить().Выбрать(); + + Пока Выборка.Следующий() Цикл + + Если Выборка.ИмяРеквизита = "ТитулЭкспедитораНомРеестр" Тогда + Результат.Номер = Выборка.ЗначениеРеквизитаСтрока; + ИначеЕсли Выборка.ИмяРеквизита = "ТитулЭкспедитораДатаРеестр" Тогда + Результат.Дата = Выборка.ЗначениеРеквизита; + КонецЕсли; + + КонецЦикла; + + Возврат Результат; + +КонецФункции + + +Процедура ОбновитьДанныеОПодписантах(Объект, НомерВерсии, СтруктураРеквизитов) Экспорт + + Запрос = СформироватьЗапросДляПолученияДанныхОПодписантах(Объект, НомерВерсии); + + Если Запрос = Неопределено Тогда + Возврат; + КонецЕсли; + + ВыборкаРеквизитовПоТитулу = Запрос.Выполнить().Выбрать(); + + Пока ВыборкаРеквизитовПоТитулу.Следующий() Цикл + + ЗначениеРеквизита = Неопределено; + + Если ВыборкаРеквизитовПоТитулу.ТипРеквизита = Перечисления.ТипыРеквизитовЭПД.НеограниченнаяСтрока Тогда + ЗначениеРеквизита = ВыборкаРеквизитовПоТитулу.ЗначениеРеквизитаСтрока; + ИначеЕсли ВыборкаРеквизитовПоТитулу.ТипРеквизита = Перечисления.ТипыРеквизитовЭПД.ПростойКромеСтроки Тогда + ЗначениеРеквизита = ВыборкаРеквизитовПоТитулу.ЗначениеРеквизита; + ИначеЕсли ВыборкаРеквизитовПоТитулу.ТипРеквизита = Перечисления.ТипыРеквизитовЭПД.СсылочныйТип Тогда + ЗначениеРеквизита = ВыборкаРеквизитовПоТитулу.ЗначениеРеквизитаСсылка; + КонецЕсли; + + Если СтруктураРеквизитов.Свойство(ВыборкаРеквизитовПоТитулу.ИмяРеквизита) Тогда + СтруктураРеквизитов[ВыборкаРеквизитовПоТитулу.ИмяРеквизита] = ЗначениеРеквизита; + КонецЕсли + + КонецЦикла; + +КонецПроцедуры + +Процедура ОбновитьДанныеОПодписантахВСтруктуреФормы(Форма, НомерВерсии) Экспорт + + Объект = Форма.Объект; + + Запрос = СформироватьЗапросДляПолученияДанныхОПодписантах(Объект, НомерВерсии); + + Если Запрос = Неопределено Тогда + Возврат; + КонецЕсли; + + ВыборкаРеквизитовПоТитулу = Запрос.Выполнить().Выбрать(); + + Пока ВыборкаРеквизитовПоТитулу.Следующий() Цикл + + ЗначениеРеквизита = Неопределено; + + Если ВыборкаРеквизитовПоТитулу.ТипРеквизита = Перечисления.ТипыРеквизитовЭПД.НеограниченнаяСтрока Тогда + ЗначениеРеквизита = ВыборкаРеквизитовПоТитулу.ЗначениеРеквизитаСтрока; + ИначеЕсли ВыборкаРеквизитовПоТитулу.ТипРеквизита = Перечисления.ТипыРеквизитовЭПД.ПростойКромеСтроки Тогда + ЗначениеРеквизита = ВыборкаРеквизитовПоТитулу.ЗначениеРеквизита; + ИначеЕсли ВыборкаРеквизитовПоТитулу.ТипРеквизита = Перечисления.ТипыРеквизитовЭПД.СсылочныйТип Тогда + ЗначениеРеквизита = ВыборкаРеквизитовПоТитулу.ЗначениеРеквизитаСсылка; + КонецЕсли; + + ОбменСГИСЭПДКлиентСервер.УстановитьЗначениеРеквизитаВСтруктуреФормы(Форма, + ВыборкаРеквизитовПоТитулу.ИмяРеквизита, ЗначениеРеквизита + , , , Истина); + + КонецЦикла; + +КонецПроцедуры + +Функция ПолучитьДанныеДляТитулаНаОснованииЧерновика(ЭлектронныйДокумент, ЧерновикДокумента) Экспорт + + Результат = Новый Структура; + Результат.Вставить("ЭтоЭПДЧерновик", Ложь); + + ТипДокументаЗначение = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ЧерновикДокумента, + "ВидЧерновика.ТипДокумента"); + + ТипДокумента = Неопределено; + + Если ЗначениеЗаполнено(ТипДокументаЗначение) + И ТипДокументаЗначение.Свойство("ВидЧерновикаТипДокумента") Тогда + ТипДокумента = ТипДокументаЗначение.ВидЧерновикаТипДокумента; + КонецЕсли; + + ИмяСхемы = ""; + МенеджерОбъекта = Неопределено; + МетаДанныеПолноеИмя = ""; + + Если ТипДокумента = Перечисления.ТипыДокументовЭДО.ЭТрН Тогда + ИмяСхемы = "ТитулГрузоотправителя"; + МенеджерОбъекта = Документы.ЭлектроннаяТранспортнаяНакладная; + МетаДанныеПолноеИмя = "Документ.ЭлектроннаяТранспортнаяНакладная"; + ИначеЕсли ТипДокумента = Перечисления.ТипыДокументовЭДО.ЭЗЗ Тогда + ИмяСхемы = "ТитулГрузоотправителя"; + МенеджерОбъекта = Документы.ЭлектронныйЗаказЗаявка; + МетаДанныеПолноеИмя = "Документ.ЭлектронныйЗаказЗаявка"; + Иначе + Возврат Результат; + КонецЕсли; + + Результат.ЭтоЭПДЧерновик = Истина; + + ДанныеПоФайлуЧерновика = ЭлектронныеДокументыЭДОСлужебный.ОсновнойФайлИнформацииОтправителя(ЭлектронныйДокумент); + ДанныеЧерновика = РаботаСФайлами.ДанныеФайла(ДанныеПоФайлуЧерновика); + ДвоичныеДанныеЧерновика = ПолучитьИзВременногоХранилища(ДанныеЧерновика.СсылкаНаДвоичныеДанныеФайла); + + МакетСхемы = МенеджерОбъекта.ПолучитьМакет("СхемаЧерновика" + ИмяСхемы); + + ТекстСхемы = МакетСхемы.ПолучитьТекст(); + + СтруктураСФабрикой = СоздатьФабрикуПоСхемеXSD(ТекстСхемы); + Если СтруктураСФабрикой.targetNamespace <> Неопределено Тогда + Пакет = СтруктураСФабрикой.Фабрика.Пакеты.Получить(СтруктураСФабрикой.targetNamespace); + ИначеЕсли СтруктураСФабрикой.xmlns <> Неопределено Тогда + Пакет = СтруктураСФабрикой.Фабрика.Пакеты.Получить(СтруктураСФабрикой.xmlns); + Иначе + Пакет = СтруктураСФабрикой.Фабрика.Пакеты[0]; + КонецЕсли; + КорневоеСвойство = Пакет.КорневыеСвойства[0]; + ТипXDTOФайла = КорневоеСвойство.Тип; + + ЧтениеXML = Новый ЧтениеXML; + + // Замена пространства имен + ПотокДанныхФайла = ДвоичныеДанныеЧерновика.ОткрытьПотокДляЧтения(); + ПотокДанныхФайла.Перейти(0, ПозицияВПотоке.Начало); + ЧтениеXML.ОткрытьПоток(ПотокДанныхФайла); + + ПостроительDOM = Новый ПостроительDOM(); + ДокументDOM = ПостроительDOM.Прочитать(ЧтениеXML); + ЧтениеXML.Закрыть(); + + ДокументDOM.ЭлементДокумента.УстановитьСоответствиеПространстваИмен("", СтруктураСФабрикой.xmlns); + + ПотокЗаписи = Новый ПотокВПамяти; + + ЗаписьXML = Новый ЗаписьXML; + ЗаписьXML.ОткрытьПоток(ПотокЗаписи); + + ЗаписьDOM = Новый ЗаписьDOM; + ЗаписьDOM.Записать(ДокументDOM, ЗаписьXML); + ЗаписьXML.Закрыть(); + + ДвоичныеДанныеФайла = ПотокЗаписи.ЗакрытьИПолучитьДвоичныеДанные(); + + ЧтениеXML.ОткрытьПоток(ДвоичныеДанныеФайла.ОткрытьПотокДляЧтения()); + + Попытка + + ОбъектXDTO = СтруктураСФабрикой.Фабрика.ПрочитатьXML(ЧтениеXML, ТипXDTOФайла); + + Исключение + + ПодробныйТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ПараметрыЗаписиВЖурналРегистрации = ОбщегоНазначенияБЭД.НовыеПараметрыЗаписиВЖурналРегистрации(); + ПараметрыЗаписиВЖурналРегистрации.Данные = ЧерновикДокумента; + ОбщегоНазначенияБЭД.ЗаписатьВЖурналРегистрации(ПодробныйТекстОшибки, + "ОбменСГИСЭПД", + УровеньЖурналаРегистрации.Ошибка, + ПараметрыЗаписиВЖурналРегистрации); + Возврат Результат; + + КонецПопытки; + + КлючеваяИнформацияПоТитулу = КлючеваяИнформацияПоТитулу(ОбъектXDTO); + + СтруктураРеквизитов = Новый Структура; + ДокументОбъект = Новый Структура("ДополнительныеСвойства,ТипДокумента,ТекущийПолученныйТитул", + Новый Структура, ТипДокумента, КлючеваяИнформацияПоТитулу.Титул); + ДокументОбъект.ДополнительныеСвойства.Вставить("СтруктураРеквизитов", СтруктураРеквизитов); + + МакетСоответствиеИмен = МенеджерОбъекта.ПолучитьМакет("СоответствиеИменРеквизитов" + + ПостфиксМакетаПоНомеруВерсии(КлючеваяИнформацияПоТитулу.ВерсияФормата)); + ОбластьПоискаИмен = МакетСоответствиеИмен.ПолучитьОбласть(КлючеваяИнформацияПоТитулу.ПрефиксТитула); + + ЗаполнитьЭПДПоОбъектуXDTOРекурсивно(ОбъектXDTO, ДокументОбъект, ОбластьПоискаИмен, Новый Соответствие, "//Файл"); + + ИмяФормы = Неопределено; + + Если КлючеваяИнформацияПоТитулу.ТипДокумента = Перечисления.ТипыДокументовЭДО.ЭТрН Тогда + + ПолучитьДанныеНаОснованииЧерновикаЭТрН(ДокументОбъект, КлючеваяИнформацияПоТитулу); + + ИмяФормы = "Документ.ЭлектроннаяТранспортнаяНакладная.ФормаОбъекта"; + + ИначеЕсли КлючеваяИнформацияПоТитулу.ТипДокумента = Перечисления.ТипыДокументовЭДО.ЭЗЗ Тогда + + ПолучитьДанныеНаОснованииЧерновикаЭЗЗ(ДокументОбъект, КлючеваяИнформацияПоТитулу); + + ИмяФормы = "Документ.ЭлектронныйЗаказЗаявка.ФормаОбъекта"; + + КонецЕсли; + + ЗаполнитьПредставленияСсылочныхТипов(ДокументОбъект); + ЗаполнитьПредставлениеХранимыхДанныхОбъекта(СтруктураРеквизитов, МетаДанныеПолноеИмя, ОбластьПоискаИмен); + + СтруктураРеквизитов.Вставить("Ссылка" + КлючеваяИнформацияПоТитулу.ПрефиксТитула + "Черновик", ЧерновикДокумента); + + Результат.Вставить("ДанныеДляЗаполнения", СтруктураРеквизитов); + Результат.Вставить("ИмяФормы", ИмяФормы); + + Возврат Результат; + +КонецФункции // Разделить строку пробелами. // @@ -3564,6 +4812,12 @@ МенеджерОбъекта = Документы.ЭлектронныйПутевойЛист; ИначеЕсли КлючеваяИнформацияПоТитулу.ТипДокумента = Перечисления.ТипыДокументовЭДО.ЭДФ Тогда МенеджерОбъекта = Документы.ЭлектронныйДоговорФрахтования; + ИначеЕсли КлючеваяИнформацияПоТитулу.ТипДокумента = Перечисления.ТипыДокументовЭДО.ЭПЭ Тогда + МенеджерОбъекта = Документы.ЭлектронноеПоручениеЭкспедитору; + ИначеЕсли КлючеваяИнформацияПоТитулу.ТипДокумента = Перечисления.ТипыДокументовЭДО.ЭЭР Тогда + МенеджерОбъекта = Документы.ЭлектроннаяЭкспедиторскаяРасписка; + ИначеЕсли КлючеваяИнформацияПоТитулу.ТипДокумента = Перечисления.ТипыДокументовЭДО.ЭСР Тогда + МенеджерОбъекта = Документы.ЭлектроннаяCкладскаяРасписка; КонецЕсли; ИмяСхемы = КлючеваяИнформацияПоТитулу.ПрефиксТитула + ПостфиксМакетаПоНомеруВерсии(КлючеваяИнформацияПоТитулу.ВерсияФормата); Если СтрНачинаетсяС(ИмяСхемы, "Доп") Тогда @@ -4004,6 +5258,12 @@ Макет = Документы.ЭлектронныйПутевойЛист.ПолучитьМакет("СоответствиеИменРеквизитов"); ИначеЕсли ТипДокумента = ТипДокументаДоговорФрахтования() Тогда Макет = Документы.ЭлектронныйДоговорФрахтования.ПолучитьМакет("СоответствиеИменРеквизитов"); + ИначеЕсли ТипДокумента = ТипДокументаПоручениеЭкспедитору() Тогда + Макет = Документы.ЭлектронноеПоручениеЭкспедитору.ПолучитьМакет("СоответствиеИменРеквизитов"); + ИначеЕсли ТипДокумента = ТипДокументаЭкспедиторскаяРасписка() Тогда + Макет = Документы.ЭлектроннаяЭкспедиторскаяРасписка.ПолучитьМакет("СоответствиеИменРеквизитов"); + ИначеЕсли ТипДокумента = ТипДокументаСкладскаяРасписка() Тогда + Макет = Документы.ЭлектроннаяCкладскаяРасписка.ПолучитьМакет("СоответствиеИменРеквизитов"); КонецЕсли; Возврат Макет; @@ -4025,6 +5285,19 @@ Результат.Вставить("СведенияОбИнформационнойСистеме"); Результат.Вставить("СоответствуетОтбору"); + Если ОтборПодписанта = Неопределено Тогда + + //Реальное заполнение будет после выбора сертификата при отправке + Результат.Вставить("Фамилия", "---"); + Результат.Вставить("Имя", "---"); + Результат.Вставить("Отчество", "---"); + Результат.Вставить("Должность", "---"); + Результат.Вставить("СоответствуетОтбору", Истина); + + Возврат Результат; + + КонецЕсли; + АвторизованныйПользователь = Пользователи.АвторизованныйПользователь(); ПользователиДоступныхСертификатов = Новый Массив; @@ -4175,6 +5448,12 @@ ТипДокумента = Перечисления.ТипыДокументовЭДО.ЭЗН; ИначеЕсли ВидДокумента = "Документ.ЭлектронныйПутевойЛист" Тогда ТипДокумента = Перечисления.ТипыДокументовЭДО.ЭПЛ; + ИначеЕсли ВидДокумента = "Документ.ЭлектронноеПоручениеЭкспедитору" Тогда + ТипДокумента = Перечисления.ТипыДокументовЭДО.ЭПЭ; + ИначеЕсли ВидДокумента = "Документ.ЭлектроннаяЭкспедиторскаяРасписка" Тогда + ТипДокумента = Перечисления.ТипыДокументовЭДО.ЭЭР; + ИначеЕсли ВидДокумента = "Документ.ЭлектроннаяCкладскаяРасписка" Тогда + ТипДокумента = Перечисления.ТипыДокументовЭДО.ЭСР; КонецЕсли; Иначе ТипДокумента = ВидДокумента.ТипДокумента; @@ -4188,6 +5467,8 @@ МассивВозможныхПустыхЗначений.Добавить("//Файл/Документ/СодИнфГО/СвГруз/ОпГруз/Габар/ДлЗнач"); МассивВозможныхПустыхЗначений.Добавить("//Файл/Документ/СодИнфГО/СвГруз/ОпГруз/Габар/ШирЗнач"); + МассивВозможныхПустыхЗначений.Добавить("//Файл/Документ/СодИнфГО/СвГруз/ОбЦеннГр/СтЦеннГр"); + МассивВозможныхПустыхЗначений.Добавить("//Файл/Документ/СодФХЖ1/СумНал/СумНДС"); ИначеЕсли ТипДокумента = Перечисления.ТипыДокументовЭДО.ЭЗН Тогда @@ -4206,6 +5487,12 @@ МенеджерОбъекта = Документы.ЭлектронныйПутевойЛист; ИначеЕсли ТипДокумента = Перечисления.ТипыДокументовЭДО.ЭДФ Тогда МенеджерОбъекта = Документы.ЭлектронныйДоговорФрахтования; + ИначеЕсли ТипДокумента = Перечисления.ТипыДокументовЭДО.ЭПЭ Тогда + МенеджерОбъекта = Документы.ЭлектронноеПоручениеЭкспедитору; + ИначеЕсли ТипДокумента = Перечисления.ТипыДокументовЭДО.ЭЭР Тогда + МенеджерОбъекта = Документы.ЭлектроннаяЭкспедиторскаяРасписка; + ИначеЕсли ТипДокумента = Перечисления.ТипыДокументовЭДО.ЭСР Тогда + МенеджерОбъекта = Документы.ЭлектроннаяCкладскаяРасписка; КонецЕсли; МакетСоответствиеИменОбщий = МенеджерОбъекта.ПолучитьМакет("СоответствиеИменРеквизитов"); @@ -4915,6 +6202,12 @@ Результат.Добавить(Перечисления.ТипыЭлементовРегламентаЭДО.ЭДФ_Титул2); Результат.Добавить(Перечисления.ТипыЭлементовРегламентаЭДО.ЭДФ_Титул1_ИОП); Результат.Добавить(Перечисления.ТипыЭлементовРегламентаЭДО.ЭДФ_ОткФщ); + Результат.Добавить(Перечисления.ТипыЭлементовРегламентаЭДО.ЭПЭ_Титул1); + Результат.Добавить(Перечисления.ТипыЭлементовРегламентаЭДО.ЭПЭ_Титул2); + Результат.Добавить(Перечисления.ТипыЭлементовРегламентаЭДО.ЭПЭ_Титул3); + Результат.Добавить(Перечисления.ТипыЭлементовРегламентаЭДО.ЭЭР_Титул1); + Результат.Добавить(Перечисления.ТипыЭлементовРегламентаЭДО.ЭСР_Титул1); + Возврат Результат; @@ -4930,6 +6223,9 @@ МассивТитулов.Добавить(Перечисления.ТипыЭлементовРегламентаЭДО.ЭЗЗ_Титул1); МассивТитулов.Добавить(Перечисления.ТипыЭлементовРегламентаЭДО.ЭПЛ_Титул1); МассивТитулов.Добавить(Перечисления.ТипыЭлементовРегламентаЭДО.ЭДФ_Титул1); + МассивТитулов.Добавить(Перечисления.ТипыЭлементовРегламентаЭДО.ЭПЭ_Титул1); + МассивТитулов.Добавить(Перечисления.ТипыЭлементовРегламентаЭДО.ЭЭР_Титул1); + МассивТитулов.Добавить(Перечисления.ТипыЭлементовРегламентаЭДО.ЭСР_Титул1); КонецПроцедуры @@ -5383,6 +6679,29 @@ КонецФункции +// Создает таблицу значений для хранения информационных полей обмена с ГИС ЭПД. +// +// Возвращаемое значение: +// ТаблицаЗначений: +// * ИдентификаторИнфоПолей - Строка - идентификатор строки родителя информационных полей +// * ИдентификаторДопИнформации - Строка - идентификатор группы информационных полей +// * Идентификатор - Строка - идентификатор информационного поля +// * Значение - Строка - значение информационного поля +// * ТипДанных - Строка - тип данных информационного поля +Функция НоваяТаблицаИнформационныеПоля() Экспорт + + ТипСтрока = Новый ОписаниеТипов("Строка"); + Результат = Новый ТаблицаЗначений; + Результат.Колонки.Добавить("ИдентификаторИнфоПолей", ТипСтрока); + Результат.Колонки.Добавить("ИдентификаторДопИнформации", ТипСтрока); + Результат.Колонки.Добавить("Идентификатор", ТипСтрока); + Результат.Колонки.Добавить("Значение", ТипСтрока); + Результат.Колонки.Добавить("ТипДанных", ТипСтрока); + + Возврат Результат; + +КонецФункции + #Область ИнтеграцияМобильногоПриложения // Добавляет баннер новости о мобильном приложении. @@ -6298,15 +7617,13 @@ // // Возвращаемое значение: // Структура - см. СтруктураУчастникаЭПД -Функция ПолучитьРеквизитыУчастника(Участник, ДобавитьПлатежныеРеквизиты = Ложь) Экспорт +Функция ПолучитьРеквизитыУчастника(Участник, ДобавитьПлатежныеРеквизиты = Ложь, Параметры = Неопределено) Экспорт Результат = СтруктураУчастникаЭПД(ДобавитьПлатежныеРеквизиты); Если ЗначениеЗаполнено(Участник) Тогда - - СведенияОбУчастнике = ЭлектронноеВзаимодействие.СтруктураДанныхЮрФизЛица(); + СведенияОбУчастнике = ЭлектронноеВзаимодействие.СтруктураДанныхЮрФизЛица(); СведенияОбУчастнике.Вставить("ЗначениеJSONЮридическийАдрес"); - ЭлектронноеВзаимодействиеПереопределяемый.ПолучитьДанныеЮрФизЛица(Участник, СведенияОбУчастнике); СтранаРегистрации = Неопределено; @@ -6315,8 +7632,11 @@ ЮрФизЛицо = Неопределено; СведенияОбУчастнике.Свойство("ЮридическоеФизическоеЛицо", ЮрФизЛицо); Если ЮрФизЛицо = Неопределено Тогда - СведенияОбУчастнике.Свойство("ЮрФизЛицо", ЮрФизЛицо); - КонецЕсли; + СведенияОбУчастнике.Свойство("ЮрФизЛицо", ЮрФизЛицо); + Если ЮрФизЛицо = Неопределено Тогда + СведенияОбУчастнике.Свойство("ВидКонтрагента", ЮрФизЛицо); + КонецЕсли; + КонецЕсли; Если ЗначениеЗаполнено(СтранаРегистрации) И СтранаРегистрации <> ПредопределенноеЗначение("Справочник.СтраныМира.Россия") Тогда @@ -6324,7 +7644,8 @@ Результат.Вставить("ИнострЛицоБезУчетаИдентификатор", СведенияОбУчастнике.ОГРН); Иначе Если Строка(ЮрФизЛицо) = "Физическое лицо" - Или Строка(ЮрФизЛицо) = "Индивидуальный предприниматель" Тогда + Или Строка(ЮрФизЛицо) = "Физ. лицо" + Или Строка(ЮрФизЛицо) = "Индивидуальный предприниматель" Тогда Если СведенияОбУчастнике.Свойство("ФИОФизлица") И ЗначениеЗаполнено(СведенияОбУчастнике.ФИОФизлица) Тогда ЧастиФИО = СтрРазделить(СведенияОбУчастнике.ФИОФизлица, " "); @@ -6340,7 +7661,11 @@ Результат.Вставить("ИПИмя", Имя); Результат.Вставить("ИПОтчество", Отчество); Результат.Вставить("ИП_ИНН", СведенияОбУчастнике.ИНН); - Результат.Вставить("ОГРНИП", СведенияОбУчастнике.ОГРН); + Если СведенияОбУчастнике.Свойство("ОГРНИП") Тогда + Результат.Вставить("ОГРНИП", СведенияОбУчастнике.ОГРНИП); + ИначеЕсли СведенияОбУчастнике.Свойство("ОГРН") Тогда + Результат.Вставить("ОГРНИП", СведенияОбУчастнике.ОГРН); + КонецЕсли; Иначе Результат.Вставить("ЮЛНаименование", СведенияОбУчастнике.ПолноеНаименование); Результат.Вставить("ЮЛ_ИНН", СведенияОбУчастнике.ИНН); @@ -6369,31 +7694,60 @@ АдресВоВнутреннемФормате = Неопределено; СведенияОбУчастнике.Свойство("ЗначениеJSONЮридическийАдрес", АдресВоВнутреннемФормате); Если АдресВоВнутреннемФормате = Неопределено Тогда - СведенияОбУчастнике.Свойство("ЮридическийАдресXML", АдресВоВнутреннемФормате); - - Если АдресВоВнутреннемФормате = Неопределено И СведенияОбУчастнике.Свойство("ЮридическийАдрес") Тогда - ЮрАдресПредставление = Неопределено; - СведенияОбУчастнике.Свойство("ЮридическийАдрес", ЮрАдресПредставление); - Если ЗначениеЗаполнено(ЮрАдресПредставление) Тогда - АдресВоВнутреннемФормате = УправлениеКонтактнойИнформацией.КонтактнаяИнформацияПоПредставлению(ЮрАдресПредставление, Перечисления.ТипыКонтактнойИнформации.Адрес); - КонецЕсли; - КонецЕсли; + СведенияОбУчастнике.Свойство("ЮридическийАдресXML", АдресВоВнутреннемФормате); КонецЕсли; - АдресОтправителяСтруктура = РаботаСАдресами.СведенияОбАдресе(АдресВоВнутреннемФормате, ДополнительныеПараметры); + АдресУчастника = РаботаСАдресами.СведенияОбАдресе(АдресВоВнутреннемФормате, ДополнительныеПараметры); - Результат.Вставить("АдресИндекс", АдресОтправителяСтруктура.Индекс); - Результат.Вставить("АдресКодРегиона", АдресОтправителяСтруктура.КодРегиона); - Если АдресОтправителяСтруктура.КодРегиона = "77" Или АдресОтправителяСтруктура.КодРегиона = "78" Или АдресОтправителяСтруктура.КодРегиона = "92" Тогда - Результат.Вставить("АдресГород", АдресОтправителяСтруктура.Регион + ?(АдресОтправителяСтруктура.РегионТипКраткий = "", "", " ") + АдресОтправителяСтруктура.РегионТипКраткий); + ЭтоАдресЭПДВСвободнойФорме = ЗначениеЗаполнено(АдресУчастника.Территория) + Или (Не РаботаСАдресамиКлиентСервер.ЭтоАдминистративноТерриториальныйАдрес(АдресУчастника.ТипАдреса) + И Не РаботаСАдресамиКлиентСервер.ЭтоМуниципальныйАдрес(АдресУчастника.ТипАдреса)) + Или (АдресУчастника.Здание.ТипЗдания <> "Дом") + Или (АдресУчастника.Корпуса.Количество() > 0 + И АдресУчастника.Корпуса[0].ТипКорпуса <> "Корпус") + Или (АдресУчастника.Помещения.Количество() > 0 + И АдресУчастника.Помещения[0].ТипПомещения <> "Квартира"); + + Если Параметры <> Неопределено И Параметры.Свойство("АдресВСвободнойФорме") + И Параметры.АдресВСвободнойФорме Тогда + ЭтоАдресЭПДВСвободнойФорме = Истина; + КонецЕсли; + + Если ЭтоАдресЭПДВСвободнойФорме Тогда + Результат.Вставить("АдресКодСтраны", АдресУчастника.КодСтраны); + Результат.Вставить("АдресПредставление", АдресУчастника.Представление); + + Если Параметры <> Неопределено И Параметры.Свойство("АдресВСвободнойФорме") + И Параметры.АдресВСвободнойФорме Тогда + Результат.Вставить("АдресСтрана", АдресУчастника.Страна); + КонецЕсли; + Иначе - Результат.Вставить("АдресГород", АдресОтправителяСтруктура.Город + ?(АдресОтправителяСтруктура.ГородТипКраткий = "", "", " ") + АдресОтправителяСтруктура.ГородТипКраткий); - КонецЕсли; - Результат.Вставить("АдресРайон", АдресОтправителяСтруктура.Район + ?(АдресОтправителяСтруктура.РайонТипКраткий = "", "", " ") + АдресОтправителяСтруктура.РайонТипКраткий); - Результат.Вставить("АдресНаселенныйПункт", АдресОтправителяСтруктура.НаселенныйПункт + ?(АдресОтправителяСтруктура.НаселенныйПунктТипКраткий = "", "", " ") + АдресОтправителяСтруктура.НаселенныйПунктТипКраткий); - Результат.Вставить("АдресУлица", АдресОтправителяСтруктура.Улица + ?(АдресОтправителяСтруктура.УлицаТипКраткий = "", "", " ") + АдресОтправителяСтруктура.УлицаТипКраткий); - Результат.Вставить("АдресДом", АдресОтправителяСтруктура.Здание.Номер); - Если АдресОтправителяСтруктура.Корпуса.Количество() > 0 Тогда - Результат.Вставить("АдресКорпус", АдресОтправителяСтруктура.Корпуса[0].Номер); + Результат.Вставить("АдресИндекс", АдресУчастника.Индекс); + Результат.Вставить("АдресКодРегиона", АдресУчастника.КодРегиона); + Если АдресУчастника.КодРегиона = "77" + Или АдресУчастника.КодРегиона = "78" + Или АдресУчастника.КодРегиона = "92" Тогда + Результат.Вставить("АдресГород", АдресУчастника.Регион + + ?(АдресУчастника.РегионТипКраткий = "", "", " ") + + АдресУчастника.РегионТипКраткий); + Иначе + Результат.Вставить("АдресГород", АдресУчастника.Город + + ?(АдресУчастника.ГородТипКраткий = "", "", " ") + АдресУчастника.ГородТипКраткий); + КонецЕсли; + Результат.Вставить("АдресРайон", АдресУчастника.Район + + ?(АдресУчастника.РайонТипКраткий = "", "", " ") + АдресУчастника.РайонТипКраткий); + Результат.Вставить("АдресНаселенныйПункт", АдресУчастника.НаселенныйПункт + + ?(АдресУчастника.НаселенныйПунктТипКраткий = "", "", " ") + + АдресУчастника.НаселенныйПунктТипКраткий); + Результат.Вставить("АдресУлица", АдресУчастника.Улица + + ?(АдресУчастника.УлицаТипКраткий = "", "", " ") + АдресУчастника.УлицаТипКраткий); + Результат.Вставить("АдресДом", АдресУчастника.Здание.Номер); + Если АдресУчастника.Корпуса.Количество() > 0 Тогда + Результат.Вставить("АдресКорпус", АдресУчастника.Корпуса[0].Номер); + КонецЕсли; + Если АдресУчастника.Помещения.Количество() > 0 Тогда + Результат.Вставить("АдресКвартира", АдресУчастника.Помещения[0].Номер); + КонецЕсли; КонецЕсли; Если ДобавитьПлатежныеРеквизиты = Истина Тогда @@ -6406,7 +7760,7 @@ //@skip-check constructor-function-return-section Возврат Результат; - + КонецФункции // Получить реквизиты физ лица. @@ -6487,6 +7841,33 @@ КонецФункции +// Получить реквизиты договора. +// +// Параметры: +// СсылкаНаДоговор Ссылка на договор +// +// Возвращаемое значение: +// Структура - Получить реквизиты договора: +// * Наименование +// * Номер +// * Дата +Функция ПолучитьРеквизитыДоговора(СсылкаНаДоговор) Экспорт + + Результат = Новый Структура("Наименование,Номер,Дата"); + + РеквизитыДоговора = Неопределено; + ОбменСГИСЭПДПереопределяемый.ПолучитьРеквизитыДоговора(СсылкаНаДоговор, РеквизитыДоговора); + + Если РеквизитыДоговора <> Неопределено Тогда + + ЗаполнитьЗначенияСвойств(Результат, РеквизитыДоговора); + + КонецЕсли; + + Возврат Результат; + +КонецФункции + // Создать элементы ввода значений списка. // // Параметры: @@ -6697,6 +8078,9 @@ ИначеЕсли ТипСтрокой = "Строка" Тогда ОграничениеТипа = ОписаниеТипаДопРеквизита(ТипСтрокой, КвалификаторыСтрокой); РазрешитьМногострочныйРежим = Истина; + Если Форма[ИмяТаблицы][ИтераторЦикла].ИдентификаторИнформации = "ЕГАИС" Тогда + РазрешитьМногострочныйРежим = Ложь; + КонецЕсли; ИначеЕсли ТипСтрокой = "Перечисление" Тогда ОграничениеТипа = ОписаниеТипаДопРеквизита(ТипСтрокой); Иначе @@ -7971,6 +9355,7 @@ КонецПроцедуры + Процедура ЗаполнитьТаблицуЗначенийРеквизитовПоПараметрамФормы(Параметры, СтруктураРеквизитов) Экспорт Если ЗначениеЗаполнено(Параметры.ЗначениеКопирования) Тогда @@ -8037,8 +9422,37 @@ МассивИсключений.Добавить("ТитулФрахтователяУИДМинтранс"); ПервыйТитул = Перечисления.ТипыЭлементовРегламентаЭДО.ЭДФ_Титул1; - КонецЕсли; - + ИначеЕсли ТипЗнч(Параметры.ЗначениеКопирования) = Тип("ДокументСсылка.ЭлектронноеПоручениеЭкспедитору") Тогда + МассивИсключений.Добавить("ТитулЗаказчикаНомер"); + МассивИсключений.Добавить("ТитулЗаказчикаДата"); + МассивИсключений.Добавить("ТитулЗаказчикаИдентификаторФайла"); + МассивИсключений.Добавить("ТитулЗаказчикаДатаФормированияФайла"); + МассивИсключений.Добавить("ТитулЗаказчикаВремяФормированияФайла"); + МассивИсключений.Добавить("ТитулЗаказчикаУИДМинтранс"); + + ПервыйТитул = Перечисления.ТипыЭлементовРегламентаЭДО.ЭПЭ_Титул1; + + ИначеЕсли ТипЗнч(Параметры.ЗначениеКопирования) = Тип("ДокументСсылка.ЭлектроннаяЭкспедиторскаяРасписка") Тогда + МассивИсключений.Добавить("ТитулЭкспедитораНомер"); + МассивИсключений.Добавить("ТитулЭкспедитораДата"); + МассивИсключений.Добавить("ТитулЭкспедитораИдентификаторФайла"); + МассивИсключений.Добавить("ТитулЭкспедитораДатаФормированияФайла"); + МассивИсключений.Добавить("ТитулЭкспедитораВремяФормированияФайла"); + МассивИсключений.Добавить("ТитулЭкспедитораУИДМинтранс"); + + ПервыйТитул = Перечисления.ТипыЭлементовРегламентаЭДО.ЭЭР_Титул1; + + ИначеЕсли ТипЗнч(Параметры.ЗначениеКопирования) = Тип("ДокументСсылка.ЭлектроннаяCкладскаяРасписка") Тогда + МассивИсключений.Добавить("ТитулЭкспедитораНомер"); + МассивИсключений.Добавить("ТитулЭкспедитораДата"); + МассивИсключений.Добавить("ТитулЭкспедитораИдентификаторФайла"); + МассивИсключений.Добавить("ТитулЭкспедитораДатаФормированияФайла"); + МассивИсключений.Добавить("ТитулЭкспедитораВремяФормированияФайла"); + МассивИсключений.Добавить("ТитулЭкспедитораУИДМинтранс"); + + ПервыйТитул = Перечисления.ТипыЭлементовРегламентаЭДО.ЭСР_Титул1; + + КонецЕсли; ЗаполнитьТаблицуЗначенийРеквизитов(Параметры.ЗначениеКопирования, Параметры.ЗначениеКопирования.Организация, СтруктураРеквизитов, @@ -8093,7 +9507,13 @@ ИначеЕсли ТипЗнч(Параметры.ЗначениеКопирования) = Тип("ДокументСсылка.ЭлектронныйПутевойЛист") Тогда ПервыйТитулПрефикс = "ТитулОформление"; ИначеЕсли ТипЗнч(Параметры.ЗначениеКопирования) = Тип("ДокументСсылка.ЭлектронныйДоговорФрахтования") Тогда - ПервыйТитулПрефикс = "ТитулФрахтователя"; + ПервыйТитулПрефикс = "ТитулФрахтователя"; + ИначеЕсли ТипЗнч(Параметры.ЗначениеКопирования) = Тип("ДокументСсылка.ЭлектронноеПоручениеЭкспедитору") Тогда + ПервыйТитулПрефикс = "ТитулЗаказчика"; + ИначеЕсли ТипЗнч(Параметры.ЗначениеКопирования) = Тип("ДокументСсылка.ЭлектроннаяЭкспедиторскаяРасписка") Тогда + ПервыйТитулПрефикс = "ТитулЭкспедитора"; + ИначеЕсли ТипЗнч(Параметры.ЗначениеКопирования) = Тип("ДокументСсылка.ЭлектроннаяCкладскаяРасписка") Тогда + ПервыйТитулПрефикс = "ТитулЭкспедитора"; КонецЕсли; МассивВерсийЗаполнение.Добавить(Новый ФиксированнаяСтруктура(СтруктураРеквизитовТитулаЗаполнение)); @@ -8120,251 +9540,8 @@ СтруктураРеквизитов = Новый ФиксированнаяСтруктура(Новый Структура); КонецЕсли; -КонецПроцедуры - -Процедура ЗаполнитьЭТрННаОснованииЭЗЗ(Параметры, Основание, СтруктураРеквизитов) - - СтруктураРеквизитовОснования = Неопределено; - ЗаполнитьТаблицуЗначенийРеквизитов(Основание, - Основание.Организация, - СтруктураРеквизитовОснования); - - МенеджерОбъекта = Документы.ЭлектроннаяТранспортнаяНакладная; - МакетСоответствиеИмен = МенеджерОбъекта.ПолучитьМакет("СоответствиеИменРеквизитов"); - ОбластьПоискаИмен = МакетСоответствиеИмен.ПолучитьОбласть("ТитулГрузоотправителя"); - ОбластьКолонкаРеквизитов = МакетСоответствиеИмен.Область(,1,МакетСоответствиеИмен.ВысотаТаблицы,1); - - СтруктураРеквизитовЗаполнение = Новый Структура; - МассивВерсийЗаполнение = Новый Массив; - СтруктураРеквизитовТитулаЗаполнение = Новый Структура; - - Для Каждого ТитулКиЗ Из СтруктураРеквизитовОснования Цикл - ПоследняяВерсия = ТитулКиЗ.Значение[ТитулКиЗ.Значение.ВГраница()]; - Для Каждого РеквизитКиЗ Из ПоследняяВерсия Цикл - Если СтрЗаканчиваетсяНа(РеквизитКиЗ.Ключ, "СсылкаСведенияОбОпасномГрузе") - И ЗначениеЗаполнено(РеквизитКиЗ.Значение) Тогда - ПрефиксСтрокиОткуда = СтрЗаменить(РеквизитКиЗ.Ключ, "СсылкаСведенияОбОпасномГрузе", ""); - ПрефиксСтрокиКуда = СтрЗаменить(ПрефиксСтрокиОткуда, "ТитулГрузоотправителяГрузы", "ТитулГрузоотправителяСведенияОбОпасныхГрузах"); - СтруктураРеквизитовТитулаЗаполнение.Вставить(ПрефиксСтрокиКуда + "СсылкаДОПОГ", РеквизитКиЗ.Значение); - ИдентификаторСтрокиГруза = Неопределено; - ПоследняяВерсия.Свойство(ПрефиксСтрокиОткуда + "ИдентификаторСтроки", ИдентификаторСтрокиГруза); - Если ИдентификаторСтрокиГруза <> Неопределено Тогда - СтруктураРеквизитовТитулаЗаполнение.Вставить(ПрефиксСтрокиКуда + "ИдентификаторСтрокиРодителя", ИдентификаторСтрокиГруза); - КонецЕсли; - Если ТипЗнч(РеквизитКиЗ.Значение) = Тип("СправочникСсылка.ХранимыеДанныеЭПД") Тогда - СтруктураДОПОГ = Новый Структура; - ОбменСГИСЭПДКлиентСервер.ЗаполнитьРеквизитыКлассификатораДОПОГ(РеквизитКиЗ.Значение, "", СтруктураДОПОГ); - Для Каждого ДопогКиЗ Из СтруктураДОПОГ Цикл - СтруктураРеквизитовТитулаЗаполнение.Вставить(ПрефиксСтрокиКуда + ДопогКиЗ.Ключ, ДопогКиЗ.Значение); - КонецЦикла; - КонецЕсли; - ИначеЕсли СтрНачинаетсяС(РеквизитКиЗ.Ключ, "ТитулПеревозчикаТранспортноеСредство") - Или СтрНачинаетсяС(РеквизитКиЗ.Ключ, "ТитулПеревозчикаОснованияВладенияТС") - Или СтрНачинаетсяС(РеквизитКиЗ.Ключ, "ТитулПеревозчикаОснованиеВладенияТСРеквизитыСторон") - Или СтрНачинаетсяС(РеквизитКиЗ.Ключ, "ТитулПеревозчикаПрицепы") - Или СтрНачинаетсяС(РеквизитКиЗ.Ключ, "ТитулПеревозчикаОснованияВладенияПрицепом") - Или СтрНачинаетсяС(РеквизитКиЗ.Ключ, "ТитулПеревозчикаОснованиеВладенияПрицепомРеквизитыСторон") - Или СтрНачинаетсяС(РеквизитКиЗ.Ключ, "ТитулПеревозчикаСпециальныеУсловияДвижения") - Или СтрНачинаетсяС(РеквизитКиЗ.Ключ, "ТитулПеревозчикаВодители") - Или СтрНачинаетсяС(РеквизитКиЗ.Ключ, "ТитулПеревозчикаВодительНомераТелефонов") Тогда - КлючКуда = СтрЗаменить(РеквизитКиЗ.Ключ, "ТитулПеревозчика", "ТитулГрузоотправителя"); - СтруктураРеквизитовТитулаЗаполнение.Вставить(КлючКуда, РеквизитКиЗ.Значение); - ИначеЕсли РеквизитКиЗ.Ключ = "СсылкаТитулГрузоотправителяГрузоотправитель" - Или РеквизитКиЗ.Ключ = "СсылкаТитулГрузоотправителяПеревозчик" - Или РеквизитКиЗ.Ключ = "СсылкаТитулГрузоотправителяГрузополучатель" - Или РеквизитКиЗ.Ключ = "СсылкаТитулГрузоотправителяВалюта" Тогда - СтруктураРеквизитовТитулаЗаполнение.Вставить(РеквизитКиЗ.Ключ, РеквизитКиЗ.Значение); - ИначеЕсли РеквизитКиЗ.Ключ = "ТитулГрузоотправителяРекомендацииОПредельныхСрокахПеревозки" Тогда - СтруктураРеквизитовТитулаЗаполнение.Вставить("ТитулГрузоотправителяСрокДоставкиГруза", РеквизитКиЗ.Значение); - ИначеЕсли РеквизитКиЗ.Ключ = "ТитулГрузоотправителяУказанияВОтношенииВыполненияНормПеревозки" - И РеквизитКиЗ.Значение <> "Отсутствуют" Тогда - Указания = Неопределено; - Если СтруктураРеквизитовТитулаЗаполнение.Свойство("ТитулГрузоотправителяУказанияВОтношенииВыполненияНормПеревозки", Указания) - И Указания <> "Отсутствуют" Тогда - СтруктураРеквизитовТитулаЗаполнение.Вставить("ТитулГрузоотправителяУказанияВОтношенииВыполненияНормПеревозки", - Указания + "; " + РеквизитКиЗ.Значение); - Иначе - СтруктураРеквизитовТитулаЗаполнение.Вставить("ТитулГрузоотправителяУказанияВОтношенииВыполненияНормПеревозки", РеквизитКиЗ.Значение); - КонецЕсли; - ИначеЕсли СтрНачинаетсяС(РеквизитКиЗ.Ключ, "ТитулГрузоотправителяГрузоотправитель") - Или СтрНачинаетсяС(РеквизитКиЗ.Ключ, "ТитулГрузоотправителяПеревозчик") - Или СтрНачинаетсяС(РеквизитКиЗ.Ключ, "ТитулГрузоотправителяГрузополучатель") - Или СтрНачинаетсяС(РеквизитКиЗ.Ключ, "ТитулГрузоотправителяАдресПогрузки") - Или СтрНачинаетсяС(РеквизитКиЗ.Ключ, "ТитулГрузоотправителяТранспортноеСредство") - Или СтрНачинаетсяС(РеквизитКиЗ.Ключ, "ТитулГрузоотправителяГрузы") - Или СтрНачинаетсяС(РеквизитКиЗ.Ключ, "ТитулГрузоотправителяЗаказчик") - Или РеквизитКиЗ.Ключ = "ТитулГрузоотправителяЗаявленныеДатаВремяПодачи" - Или РеквизитКиЗ.Ключ = "ТитулГрузоотправителяЗаказНомер" - Или РеквизитКиЗ.Ключ = "ТитулГрузоотправителяЗаказДата" - Или РеквизитКиЗ.Ключ = "ТитулГрузоотправителяВерхнийПределТемпературыПриПеревозке" - Или РеквизитКиЗ.Ключ = "ТитулГрузоотправителяНижнийПределТемпературыПриПеревозке" - Или РеквизитКиЗ.Ключ = "ТитулГрузоотправителяВерхнийПределВлажностиПриПеревозке" - Или РеквизитКиЗ.Ключ = "ТитулГрузоотправителяНижнийПределВлажностиПриПеревозке" - Или РеквизитКиЗ.Ключ = "ТитулГрузоотправителяСтоимостьГруза" - Или РеквизитКиЗ.Ключ = "ТитулГрузоотправителяКодВалюты" - Или РеквизитКиЗ.Ключ = "ТитулГрузоотправителяНаименованиеВалюты" Тогда - МассивЧастейИмени = ОбменСГИСЭПДКлиентСервер.РазделитьСтрокуСоСложнымРазделителем(РеквизитКиЗ.Ключ, "__"); - Если МассивЧастейИмени.Количество() = 1 Тогда - ИмяРеквизита = РеквизитКиЗ.Ключ; - ИначеЕсли МассивЧастейИмени.Количество() = 3 Тогда - ИмяРеквизита = МассивЧастейИмени[0] + "." + МассивЧастейИмени[2]; - КонецЕсли; - ОбластьНайдено = МакетСоответствиеИмен.НайтиТекст(ИмяРеквизита, , ОбластьКолонкаРеквизитов, Ложь, Истина, Истина, Ложь); - Если ОбластьНайдено <> Неопределено Тогда - СтруктураРеквизитовТитулаЗаполнение.Вставить(РеквизитКиЗ.Ключ, РеквизитКиЗ.Значение); - Иначе - Если ИмяРеквизита = "ТитулГрузоотправителяГрузы.СсылкаВалютаСтоимости" Тогда - СтруктураРеквизитовТитулаЗаполнение.Вставить(РеквизитКиЗ.Ключ, РеквизитКиЗ.Значение); - КонецЕсли; - КонецЕсли; - КонецЕсли; - КонецЦикла; - Если ТитулКиЗ.Ключ = "ТитулГрузоотправителя" Тогда - // Адреса погрузки и выгрузки - МассивСтрокАдресов = ОбменСГИСЭПДКлиентСервер.МассивСтрокТаблицыИзСтруктурыРеквизитов(ПоследняяВерсия, - "ТитулГрузоотправителяАдресаПунктовПогрузкиИВыгрузки"); - НомерПогрузки = 999; - НомерВыгрузки = 999; - СтрокаПервойПогрузки = Новый Структура; - СтрокаПервойВыгрузки = Новый Структура; - Для Каждого СтруктураСтроки Из МассивСтрокАдресов Цикл - Если СтруктураСтроки.Операция = "Погрузка" И СтруктураСтроки.НомерПп < НомерПогрузки Тогда - НомерПогрузки = СтруктураСтроки.НомерПп; - СтрокаПервойПогрузки = СтруктураСтроки; - КонецЕсли; - Если СтруктураСтроки.Операция = "Выгрузка" И СтруктураСтроки.НомерПп < НомерВыгрузки Тогда - НомерВыгрузки = СтруктураСтроки.НомерПп; - СтрокаПервойВыгрузки = СтруктураСтроки; - КонецЕсли; - КонецЦикла; - Для Каждого РеквизитКиЗ Из СтрокаПервойПогрузки Цикл - КлючРеквизита = СтрЗаменить(РеквизитКиЗ.Ключ, "АдресПунктаПогрузки", "ТитулГрузоотправителяАдресПогрузки"); - СтруктураРеквизитовТитулаЗаполнение.Вставить(КлючРеквизита, РеквизитКиЗ.Значение); - КонецЦикла; - Для Каждого РеквизитКиЗ Из СтрокаПервойВыгрузки Цикл - КлючРеквизита = СтрЗаменить(РеквизитКиЗ.Ключ, "АдресПунктаПогрузки", "ТитулГрузоотправителяГрузополучательАдресДоставки"); - СтруктураРеквизитовТитулаЗаполнение.Вставить(КлючРеквизита, РеквизитКиЗ.Значение); - КонецЦикла; - // Суммарные величины - СуммаБрутто = ОбменСГИСЭПДКлиентСервер.СуммаПоСтрокамТаблицыИзСтруктурыРеквизитов(ПоследняяВерсия, - "ТитулГрузоотправителяГрузы", - "МассаБрутто"); - СтруктураРеквизитовТитулаЗаполнение.Вставить("ТитулГрузоотправителяМассаБруттоГруза", СуммаБрутто); - - СуммаМест = ОбменСГИСЭПДКлиентСервер.СуммаПоСтрокамТаблицыИзСтруктурыРеквизитов(ПоследняяВерсия, - "ТитулГрузоотправителяГрузы", - "КоличествоГрузовыхМест"); - СтруктураРеквизитовТитулаЗаполнение.Вставить("ТитулГрузоотправителяКоличествоГрузовыхМест", СуммаМест); - КонецЕсли; - КонецЦикла; - - ВидТары = Неопределено; - ИтераторЦикла = 1; - Пока ПоследняяВерсия.Свойство("ТитулГрузоотправителяГрузы__" + ИтераторЦикла + "__ВидТары", ВидТары) Цикл - СтруктураРеквизитовТитулаЗаполнение.Вставить("ТитулГрузоотправителяГрузы__" + ИтераторЦикла + "__СпособУпаковки", ВидТары); - Если СтруктураРеквизитовТитулаЗаполнение.Свойство("ТитулГрузоотправителяГрузы__" + ИтераторЦикла + "__ИдентификаторСтроки") = Ложь Тогда - СтруктураРеквизитовТитулаЗаполнение.Вставить("ТитулГрузоотправителяГрузы__" + ИтераторЦикла + "__ИдентификаторСтроки", - Строка(Новый УникальныйИдентификатор())); - КонецЕсли; - ИтераторЦикла = ИтераторЦикла + 1; - КонецЦикла; - - ИдентификаторСтроки = Неопределено; - ИтераторЦикла = 1; - Пока СтруктураРеквизитовТитулаЗаполнение.Свойство( - "ТитулГрузоотправителяГрузы__" + ИтераторЦикла + "__ИдентификаторСтроки", ИдентификаторСтроки) Цикл - СтруктураРеквизитовТитулаЗаполнение.Вставить("ТитулГрузоотправителяПереченьМаркировокГруза__" - + ИтераторЦикла + "__ИдентификаторСтрокиРодителя", ИдентификаторСтроки); - СтруктураРеквизитовТитулаЗаполнение.Вставить("ТитулГрузоотправителяПереченьМаркировокГруза__" - + ИтераторЦикла + "__МаркировкаГруза", "Отсутствует"); - ИтераторЦикла = ИтераторЦикла + 1; - КонецЦикла; - - СтруктураРеквизитовТитулаЗаполнение.Вставить("ТитулГрузоотправителяЛицоИмеющееПолномочияПереадресовки", "Грузоотправитель"); - СтруктураРеквизитовТитулаЗаполнение.Вставить("ТитулГрузоотправителяСпособПередачиУказанияНаПереадресовку", "Электронное уведомление перевозчика о переадресовке"); - Телефон = Неопределено; - СтруктураРеквизитовТитулаЗаполнение.Свойство("ТитулГрузоотправителяГрузоотправительНомераТелефонов__1__Телефон", Телефон); - Если Телефон <> Неопределено Тогда - СтруктураРеквизитовТитулаЗаполнение.Вставить("ТитулГрузоотправителяОтветственныйЗаПереадресовкуНомераТелефонов__1__Телефон", Телефон); - КонецЕсли; - - ЗаполнитьПредставлениеХранимыхДанныхОбъекта(СтруктураРеквизитовТитулаЗаполнение, - "Документ.ЭлектроннаяТранспортнаяНакладная", - ОбластьПоискаИмен); - - МассивВерсийЗаполнение.Добавить(Новый ФиксированнаяСтруктура(СтруктураРеквизитовТитулаЗаполнение)); - ПервыйТитулПрефикс = "ТитулГрузоотправителя"; - СтруктураРеквизитовЗаполнение.Вставить(ПервыйТитулПрефикс, Новый ФиксированныйМассив(МассивВерсийЗаполнение)); - СтруктураРеквизитов = Новый ФиксированнаяСтруктура(СтруктураРеквизитовЗаполнение); - КонецПроцедуры -// Заполняет структуру реквизитов титула данными из таблицы информационных полей. -// -// Параметры: -// СтруктураРеквизитовТитулаЗаполнение - Структура - структура для заполнения реквизитов титула -// АдресТаблицаИнформационныеПоля - Строка, Неопределено - адрес таблицы информационных полей во временном хранилище -Процедура ЗаполнитьТаблицуИнформационныхПолей(СтруктураРеквизитовТитулаЗаполнение, АдресТаблицаИнформационныеПоля) - - Если АдресТаблицаИнформационныеПоля = Неопределено - Или Не ЭтоАдресВременногоХранилища(АдресТаблицаИнформационныеПоля) Тогда - Возврат; - КонецЕсли; - - ТаблицаИнформационныеПоля = ПолучитьИзВременногоХранилища(АдресТаблицаИнформационныеПоля); // см. НоваяТаблицаИнформационныеПоля - ИтераторЦикла = 1; - ИдентификаторСтрокиИнфПолей = Строка(Новый УникальныйИдентификатор); - Для Каждого СтрокаИнформационныхПолей Из ТаблицаИнформационныеПоля Цикл - Если ИтераторЦикла = 1 Тогда - // Добавляем строку-родителя информационных полей - ДобавитьСтрокуИнформационныхПолей(СтруктураРеквизитовТитулаЗаполнение, - СтрокаИнформационныхПолей.ИдентификаторИнфоПолей, - ИтераторЦикла, - "ИдентификаторСтроки", - ИдентификаторСтрокиИнфПолей); - КонецЕсли; - // Добавляем информационные поля - ДобавитьСтрокуИнформационныхПолей(СтруктураРеквизитовТитулаЗаполнение, - СтрокаИнформационныхПолей.ИдентификаторДопИнформации, - ИтераторЦикла, - "ИдентификаторИнформации", - СтрокаИнформационныхПолей.Идентификатор); - ДобавитьСтрокуИнформационныхПолей(СтруктураРеквизитовТитулаЗаполнение, - СтрокаИнформационныхПолей.ИдентификаторДопИнформации, - ИтераторЦикла, - "ТипДанных", - СтрокаИнформационныхПолей.ТипДанных); - ДобавитьСтрокуИнформационныхПолей(СтруктураРеквизитовТитулаЗаполнение, - СтрокаИнформационныхПолей.ИдентификаторДопИнформации, - ИтераторЦикла, - "Значение", - СтрокаИнформационныхПолей.Значение); - ДобавитьСтрокуИнформационныхПолей(СтруктураРеквизитовТитулаЗаполнение, - СтрокаИнформационныхПолей.ИдентификаторДопИнформации, - ИтераторЦикла, - "ИдентификаторСтрокиРодителя", - ИдентификаторСтрокиИнфПолей); - ИтераторЦикла = ИтераторЦикла + 1; - КонецЦикла; - -КонецПроцедуры - -// Добавляет строку информационного поля в структуру реквизитов титула. -// -// Параметры: -// СтруктураРеквизитовТитула - Структура - структура для хранения реквизитов титула -// ИдентификаторИнфоПолей - Строка - идентификатор группы информационных полей -// Итератор - Число - номер итерации для уникальности ключа -// Идентификатор - Строка - идентификатор информационного поля -// Значение - Строка - значение информационного поля -Процедура ДобавитьСтрокуИнформационныхПолей(СтруктураРеквизитовТитула, ИдентификаторИнфоПолей, Итератор, Идентификатор, - Значение) - - СтруктураРеквизитовТитула.Вставить(ИдентификаторИнфоПолей + "__" + Итератор + "__" + Идентификатор, Значение); - -КонецПроцедуры - - Процедура ЗаполнитьТаблицуЗначенийРеквизитов(Документ, Организация, СтруктураРеквизитов, Титул = Неопределено, МассивИсключений = Неопределено, ТолькоНовые = Ложь) Экспорт Запрос = Новый Запрос; @@ -8415,7 +9592,9 @@ МассивВерсийЗаполнение = Неопределено; СтруктураРеквизитовЗаполнение.Свойство(ИнформацияПоПрефиксамТитула.ВПрограмме, МассивВерсийЗаполнение); Если МассивВерсийЗаполнение = Неопределено Тогда - МассивВерсийЗаполнение = Новый Массив; + МассивВерсийЗаполнение = Новый Массив; + ИначеЕсли ТипЗнч(МассивВерсийЗаполнение) = Тип("ФиксированныйМассив") Тогда + МассивВерсийЗаполнение = ОбменСГИСЭПДКлиентСервер.СкопироватьИзФиксированногоЗначенияРекурсивно(МассивВерсийЗаполнение); КонецЕсли; СчетчикВерсий = 0; @@ -9520,7 +10699,7 @@ ЕстьЗначенияДопРеквизитов = Ложь; Для Каждого ОписаниеГруппыДопРеквизитов Из Форма.ОписаниеРеквизитовФормы.ОписаниеДопРеквизитов Цикл - Если СтрНачинаетсяС(ОписаниеГруппыДопРеквизитов.Ключ, ПрефиксТитула) Тогда + Если СтрНачинаетсяС(ПрефиксТитула, ОписаниеГруппыДопРеквизитов.Ключ) Тогда Если ОбменСГИСЭПДКлиентСервер.ЗагрузитьТаблицуВСтруктуруФормы(Форма, ОписаниеГруппыДопРеквизитов.Ключ + "ДополнительнаяИнформация", Истина, КонтейнерОтображаемойВерсии) Тогда ЕстьЗначенияДопРеквизитов = ОбменСГИСЭПДКлиентСервер.ЗагрузитьТаблицуВСтруктуруФормы(Форма, ОписаниеГруппыДопРеквизитов.Ключ + "ИнформационныеПоля", Истина, КонтейнерОтображаемойВерсии) Иначе @@ -9557,6 +10736,793 @@ #Область СлужебныеПроцедурыИФункции +Функция СформироватьЗапросДляПолученияДанныхОПодписантах(Объект, НомерВерсии) + + ИнформацияПоПрефиксамТитула = ОбменСГИСЭПДКлиентСервер.ПрефиксТитулаПоЭлементуРегламентаЭДО(Объект.ТекущийТитул); + + Если ИнформацияПоПрефиксамТитула.ВПрограмме = Неопределено Тогда + Возврат Неопределено; + КонецЕсли; + + Запрос = Новый Запрос; + + Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ + | ЗначенияРеквизитовДокументовЭПД.ИмяТабличнойЧасти КАК ИмяТабличнойЧасти, + | ЗначенияРеквизитовДокументовЭПД.НомерСтрокиРеквизита КАК НомерСтрокиРеквизита, + | ЗначенияРеквизитовДокументовЭПД.ИмяРеквизита КАК ИмяРеквизита, + | ЗначенияРеквизитовДокументовЭПД.ЗначениеРеквизита КАК ЗначениеРеквизита, + | ЗначенияРеквизитовДокументовЭПД.ЗначениеРеквизитаСсылка КАК ЗначениеРеквизитаСсылка, + | ЗначенияРеквизитовДокументовЭПД.ЗначениеРеквизитаСтрока КАК ЗначениеРеквизитаСтрока, + | ЗначенияРеквизитовДокументовЭПД.ТипРеквизита КАК ТипРеквизита + |ИЗ + | РегистрСведений.ЗначенияРеквизитовДокументовЭПД КАК ЗначенияРеквизитовДокументовЭПД + |ГДЕ + | ЗначенияРеквизитовДокументовЭПД.Документ = &Документ + | И ЗначенияРеквизитовДокументовЭПД.Организация = &Организация + | И ЗначенияРеквизитовДокументовЭПД.НомерВерсии = &НомерВерсии + | И ЗначенияРеквизитовДокументовЭПД.Титул = &Титул + | И ЗначенияРеквизитовДокументовЭПД.ИмяРеквизита ПОДОБНО &ИмяРеквизита"; + + Запрос.УстановитьПараметр("Документ", Объект.Ссылка); + Запрос.УстановитьПараметр("Организация", Объект.Организация); + Запрос.УстановитьПараметр("НомерВерсии", НомерВерсии); + Запрос.УстановитьПараметр("Титул", Объект.ТекущийТитул); + Запрос.УстановитьПараметр("ИмяРеквизита", ИнформацияПоПрефиксамТитула.ВПрограмме + "Подписант%"); + + Возврат Запрос; + +КонецФункции + +Функция НайтиСсылкуНаКонтрагента(СтруктураРеквизитов, ПрефиксРеквизита, ТипОбъекта = "Контрагенты") + + Инн = ""; + Кпп = ""; + + СтруктураРеквизитов.Свойство(ПрефиксРеквизита + "ЮЛ_ИНН", Инн); + СтруктураРеквизитов.Свойство(ПрефиксРеквизита + "ЮЛ_КПП", Кпп); + + Если Не ЗначениеЗаполнено(Инн) Тогда + СтруктураРеквизитов.Свойство(ПрефиксРеквизита + "ИП_ИНН", Инн); + Кпп = ""; + КонецЕсли; + + Контрагент = Неопределено; + Если ЗначениеЗаполнено(Инн) Тогда + Контрагент = ИнтеграцияЭДО.СсылкаНаОбъектПоИННКПП(ТипОбъекта, Инн, Кпп); + КонецЕсли; + + Возврат Контрагент; + +КонецФункции + +Процедура ЗадатьСсылкуНаКонтрагента(ДокументОбъект, ПрефиксРеквизита, ТипОбъекта = "Контрагенты") + + СтруктураРеквизитов = Неопределено; + Если ДокументОбъект.ДополнительныеСвойства.Свойство("СтруктураРеквизитов", СтруктураРеквизитов) = Ложь Тогда + Возврат; + КонецЕсли; + + ДокументОбъект.Вставить("Ссылка" + ПрефиксРеквизита, + НайтиСсылкуНаКонтрагента(СтруктураРеквизитов, ПрефиксРеквизита, ТипОбъекта)); + + СтруктураРеквизитов.Вставить("Ссылка" + ПрефиксРеквизита, + ДокументОбъект["Ссылка" + ПрефиксРеквизита]); + +КонецПроцедуры + +Процедура ПолучитьДанныеНаОснованииЧерновикаЭТрН(ДокументОбъект, КлючеваяИнформацияПоТитулу) + + СтруктураРеквизитов = Неопределено; + Если ДокументОбъект.ДополнительныеСвойства.Свойство("СтруктураРеквизитов", СтруктураРеквизитов) = Ложь Тогда + Возврат; + КонецЕсли; + + РеквизитыДляУдаления = Новый Массив; + + РеквизитыДляУдаления.Добавить("ТитулГрузоотправителяУИДМинтранс"); + РеквизитыДляУдаления.Добавить("ТитулГрузоотправителяВерсияПрограммы"); + РеквизитыДляУдаления.Добавить("ТитулГрузоотправителяВерсияФормата"); + РеквизитыДляУдаления.Добавить("ТитулГрузоотправителяИдентификаторФайла"); + РеквизитыДляУдаления.Добавить("ТитулГрузоотправителяДатаФормированияФайла"); + РеквизитыДляУдаления.Добавить("ТитулГрузоотправителяВремяФормированияФайла"); + + Для Каждого РеквизитДляУдаления Из РеквизитыДляУдаления Цикл + СтруктураРеквизитов.Удалить(РеквизитДляУдаления); + КонецЦикла; + + ЗадатьСсылкуНаКонтрагента(ДокументОбъект, "ТитулГрузоотправителяГрузоотправитель", "Организации"); + ЗадатьСсылкуНаКонтрагента(ДокументОбъект, "ТитулГрузоотправителяПеревозчик"); + ЗадатьСсылкуНаКонтрагента(ДокументОбъект, "ТитулГрузоотправителяГрузополучатель"); + ЗадатьСсылкуНаКонтрагента(ДокументОбъект, "ТитулГрузоотправителяЗаказчик"); + ЗадатьСсылкуНаКонтрагента(ДокументОбъект, "ТитулГрузоотправителяВладелецПунктаПогрузки"); + ЗадатьСсылкуНаКонтрагента(ДокументОбъект, "ТитулГрузоотправителяРеквизитыГрузоотправителя"); + ЗадатьСсылкуНаКонтрагента(ДокументОбъект, "ТитулГрузоотправителяЛицоОсуществляющееПогрузку"); + +КонецПроцедуры + +Процедура ПолучитьДанныеНаОснованииЧерновикаЭЗЗ(ДокументОбъект, КлючеваяИнформацияПоТитулу) + + СтруктураРеквизитов = Неопределено; + Если ДокументОбъект.ДополнительныеСвойства.Свойство("СтруктураРеквизитов", СтруктураРеквизитов) = Ложь Тогда + Возврат; + КонецЕсли; + + РеквизитыДляУдаления = Новый Массив; + + РеквизитыДляУдаления.Добавить("ТитулГрузоотправителяУИДМинтранс"); + РеквизитыДляУдаления.Добавить("ТитулГрузоотправителяВерсияПрограммы"); + РеквизитыДляУдаления.Добавить("ТитулГрузоотправителяВерсияФормата"); + РеквизитыДляУдаления.Добавить("ТитулГрузоотправителяИдентификаторФайла"); + РеквизитыДляУдаления.Добавить("ТитулГрузоотправителяДатаФормированияФайла"); + РеквизитыДляУдаления.Добавить("ТитулГрузоотправителяВремяФормированияФайла"); + + Для Каждого РеквизитДляУдаления Из РеквизитыДляУдаления Цикл + СтруктураРеквизитов.Удалить(РеквизитДляУдаления); + КонецЦикла; + + ЗадатьСсылкуНаКонтрагента(ДокументОбъект, "ТитулГрузоотправителяГрузоотправитель", "Организации"); + ЗадатьСсылкуНаКонтрагента(ДокументОбъект, "ТитулГрузоотправителяПеревозчик"); + +КонецПроцедуры + +Функция ПолучитьСоответствиеПрефиксов() + + СоответствиеПрефиксов = Новый Соответствие; + СоответствиеПрефиксов.Вставить("ON_TRNACLGROT", Новый Структура("Менеджер, ИмяСхемы", Документы.ЭлектроннаяТранспортнаяНакладная, "ТитулГрузоотправителя")); + СоответствиеПрефиксов.Вставить("ON_TRNACLPPRIN", Новый Структура("Менеджер, ИмяСхемы", Документы.ЭлектроннаяТранспортнаяНакладная, "ТитулПеревозчикаПриемка")); + СоответствиеПрефиксов.Вставить("ON_TRNPEREADR", Новый Структура("Менеджер, ИмяСхемы", Документы.ЭлектроннаяТранспортнаяНакладная, "ТитулПереадресовка")); + СоответствиеПрефиксов.Вставить("ON_TRNZAMEN", Новый Структура("Менеджер, ИмяСхемы", Документы.ЭлектроннаяТранспортнаяНакладная, "ТитулПеревозчикаЗамены")); + СоответствиеПрефиксов.Вставить("ON_TRNACLGRPO", Новый Структура("Менеджер, ИмяСхемы", Документы.ЭлектроннаяТранспортнаяНакладная, "ТитулГрузополучателя")); + СоответствиеПрефиксов.Вставить("ON_TRNACLPVYN", Новый Структура("Менеджер, ИмяСхемы", Документы.ЭлектроннаяТранспортнаяНакладная, "ТитулПеревозчикаВыдача")); + СоответствиеПрефиксов.Вставить("ON_TRNPUDPER", Новый Структура("Менеджер, ИмяСхемы", Документы.ЭлектроннаяТранспортнаяНакладная, "ТитулПеревозчикаФХЖ")); + СоответствиеПрефиксов.Вставить("ON_TRNPUDGO", Новый Структура("Менеджер, ИмяСхемы", Документы.ЭлектроннаяТранспортнаяНакладная, "ТитулГрузоотправителяФХЖ")); + СоответствиеПрефиксов.Вставить("ON_PTLSSOBTS", Новый Структура("Менеджер, ИмяСхемы", Документы.ЭлектронныйПутевойЛист, "ТитулОформление")); + СоответствиеПрефиксов.Вставить("ON_PTLSPRMO", Новый Структура("Менеджер, ИмяСхемы", Документы.ЭлектронныйПутевойЛист, "ТитулМедосмотр")); + СоответствиеПрефиксов.Вставить("ON_PTLSVIPTS", Новый Структура("Менеджер, ИмяСхемы", Документы.ЭлектронныйПутевойЛист, "ТитулВыпуск")); + СоответствиеПрефиксов.Вставить("ON_PTLSODVZD", Новый Структура("Менеджер, ИмяСхемы", Документы.ЭлектронныйПутевойЛист, "ТитулВыезд")); + СоответствиеПрефиксов.Вставить("ON_PTLSODPARK", Новый Структура("Менеджер, ИмяСхемы", Документы.ЭлектронныйПутевойЛист, "ТитулЗаезд")); + СоответствиеПрефиксов.Вставить("ON_PTLSPOSMO", Новый Структура("Менеджер, ИмяСхемы", Документы.ЭлектронныйПутевойЛист, "ТитулМедосмотрПосле")); + СоответствиеПрефиксов.Вставить("ON_ZAKZVGO", Новый Структура("Менеджер, ИмяСхемы", Документы.ЭлектронныйЗаказЗаявка, "ТитулГрузоотправителя")); + СоответствиеПрефиксов.Вставить("ON_ZAKZVPER", Новый Структура("Менеджер, ИмяСхемы", Документы.ЭлектронныйЗаказЗаявка, "ТитулПеревозчика")); + СоответствиеПрефиксов.Вставить("ON_DOGFRAKHTEL", Новый Структура("Менеджер, ИмяСхемы", Документы.ЭлектронныйДоговорФрахтования, "ТитулФрахтователя")); + СоответствиеПрефиксов.Вставить("ON_DOGFRASHCH", Новый Структура("Менеджер, ИмяСхемы", Документы.ЭлектронныйДоговорФрахтования, "ТитулФрахтовщика")); + СоответствиеПрефиксов.Вставить("ON_ZAKAZNARSOG", Новый Структура("Менеджер, ИмяСхемы", Документы.ЭлектронныйЗаказНаряд, "ТитулФрахтовщика")); + СоответствиеПрефиксов.Вставить("ON_ZAKAZNARPOD", Новый Структура("Менеджер, ИмяСхемы", Документы.ЭлектронныйЗаказНаряд, "ТитулФрахтователяПодача")); + СоответствиеПрефиксов.Вставить("ON_ZAKAZNARVOZ", Новый Структура("Менеджер, ИмяСхемы", Документы.ЭлектронныйЗаказНаряд, "ТитулФрахтовщикаВозврат")); + СоответствиеПрефиксов.Вставить("ON_ZAKAZNAR", Новый Структура("Менеджер, ИмяСхемы", Документы.ЭлектронныйЗаказНаряд, "ТитулФрахтователя")); + СоответствиеПрефиксов.Вставить("ON_SOPVEDPER", Новый Структура("Менеджер, ИмяСхемы", Документы.ЭлектроннаяСопроводительнаяВедомость, "ТитулПеревозчика")); + СоответствиеПрефиксов.Вставить("ON_SOPVEDGO", Новый Структура("Менеджер, ИмяСхемы", Документы.ЭлектроннаяСопроводительнаяВедомость, "ТитулГрузоотправителя")); + СоответствиеПрефиксов.Вставить("ON_SOPVEDGP", Новый Структура("Менеджер, ИмяСхемы", Документы.ЭлектроннаяСопроводительнаяВедомость, "ТитулГрузополучателя")); + СоответствиеПрефиксов.Вставить("ON_POREXPKLT", Новый Структура("Менеджер, ИмяСхемы", Документы.ЭлектронноеПоручениеЭкспедитору, "ТитулЗаказчика")); + СоответствиеПрефиксов.Вставить("ON_POREXPEXP", Новый Структура("Менеджер, ИмяСхемы", Документы.ЭлектронноеПоручениеЭкспедитору, "ТитулЭкспедитора")); + СоответствиеПрефиксов.Вставить("ON_POREXPOTZ", Новый Структура("Менеджер, ИмяСхемы", Документы.ЭлектронноеПоручениеЭкспедитору, "ТитулЗаказчикаОтзыв")); + СоответствиеПрефиксов.Вставить("ON_EXPRASP", Новый Структура("Менеджер, ИмяСхемы", Документы.ЭлектроннаяЭкспедиторскаяРасписка, "ТитулЭкспедитора")); + СоответствиеПрефиксов.Вставить("ON_SKLADRASP", Новый Структура("Менеджер, ИмяСхемы", Документы.ЭлектроннаяCкладскаяРасписка, "ТитулЭкспедитора")); + + + Возврат СоответствиеПрефиксов; + +КонецФункции + +Функция ПолучитьСоответствиеПрефиксаПоИдФайла(ИдФайл) + + СоответствиеПрефиксов = ПолучитьСоответствиеПрефиксов(); + + Для Каждого Элемент Из СоответствиеПрефиксов Цикл + Если СтрНачинаетсяС(ИдФайл, Элемент.Ключ) Тогда + Возврат Элемент.Значение; + КонецЕсли; + КонецЦикла; + + Возврат Неопределено; + +КонецФункции + +Функция ПолучитьДанныеПоСертификатуИДоверенностиДляЗаполнения(ТипРегламента, ДанныеПодписанта) + + Результат = Новый Структура; + + Результат.Вставить("Организация", ДанныеПодписанта.Организация); + Результат.Вставить("Фамилия"); + Результат.Вставить("Имя"); + Результат.Вставить("Отчество"); + Результат.Вставить("Должность"); + Результат.Вставить("НомерДоверенности"); + Результат.Вставить("ДатаДоверенности"); + Результат.Вставить("ПорядковыйНомерДоверенности"); + Результат.Вставить("СведенияОбИнформационнойСистеме"); + + ПараметрыСертификатов = КриптографияБЭД.СвойстваСертификатов( + ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(ДанныеПодписанта.СертификатПодписи)); + + ПараметрыСертификата = ПараметрыСертификатов.Получить(ДанныеПодписанта.СертификатПодписи); + + Результат.Фамилия = ПараметрыСертификата.Фамилия; + Результат.Имя = ПараметрыСертификата.Имя; + Результат.Отчество = ПараметрыСертификата.Отчество; + + Если ЗначениеЗаполнено(ПараметрыСертификата.Должность) Тогда + Результат.Должность = ПараметрыСертификата.Должность; + КонецЕсли; + + Если (ТипРегламента = Перечисления.ТипыРегламентовЭДО.ЭЗЗ + Или ТипРегламента = Перечисления.ТипыРегламентовЭДО.ЭДФ) + И Не ЗначениеЗаполнено(Результат.Должность) Тогда + Результат.Должность = "-"; + КонецЕсли; + + Если ЗначениеЗаполнено(ДанныеПодписанта.Доверенность) Тогда + + ЗапросПоДоверенности = Новый Запрос; + ЗапросПоДоверенности.УстановитьПараметр("Доверенность", ДанныеПодписанта.Доверенность); + + Если ТипЗнч(ДанныеПодписанта.Доверенность) = Тип("СправочникСсылка.МЧД003") Тогда + + ЗапросПоДоверенности.Текст = "ВЫБРАТЬ + | Доверенности.Ссылка КАК Ссылка, + | Доверенности.НомерДоверенности КАК НомерДоверенности, + | Доверенности.ДатаВыдачи КАК ДатаДоверенности, + | Доверенности.СтатусВРеестреФНС КАК СтатусВРеестреФНС, + | ""https://m4d.nalog.gov.ru/EMCHD/check-status?guid="" + Доверенности.НомерДоверенности КАК + | СведенияОбИнформационнойСистеме + |ИЗ + | Справочник.МЧД003 КАК Доверенности + |ГДЕ + | Доверенности.Ссылка = &Доверенность"; + + Иначе + + ЗапросПоДоверенности.Текст = "ВЫБРАТЬ + | Доверенности.Ссылка, + | Доверенности.НомерДоверенности, + | Доверенности.ДатаВыдачи, + | Доверенности.СтатусВРеестреФНС, + | Доверенности.СведенияОбИнформационнойСистеме + |ИЗ + | Справочник.МашиночитаемыеДоверенностиОрганизаций КАК Доверенности + |ГДЕ + | Доверенности.Ссылка = &Доверенность"; + + КонецЕсли; + + Выборка = ЗапросПоДоверенности.Выполнить().Выбрать(); + + Если Выборка.Следующий() Тогда + ЗаполнитьЗначенияСвойств(Результат, Выборка, "НомерДоверенности, ДатаДоверенности, СведенияОбИнформационнойСистеме"); + Если ЗначениеЗаполнено(Выборка.СтатусВРеестреФНС) = Ложь Тогда + Результат.СведенияОбИнформационнойСистеме = ""; + Результат.НомерДоверенности = "ON_EMCHD_" + Формат(ТекущаяДатаСеанса(), "ДФ=yyyyMMdd;") + "_" + Результат.НомерДоверенности + ".xml"; + КонецЕсли; + Результат.ПорядковыйНомерДоверенности = ""; + КонецЕсли; + + КонецЕсли; + + Возврат Результат; + +КонецФункции + +Процедура ЗаполнитьСвойствоXDTO(ОбъектXDTO, ИмяСвойства, Значение, Обязательное = Ложь, УстанавливатьПустыеЗначения = Ложь) Экспорт + + Если ТипЗнч(Значение) = Тип("ЗначениеXDTO") ИЛИ ТипЗнч(Значение) = Тип("ОбъектXDTO") Тогда + + ОбъектXDTO.Установить(ИмяСвойства, Значение); + + Иначе + + Если Обязательное ИЛИ ЗначениеЗаполнено(Значение) ИЛИ УстанавливатьПустыеЗначения Тогда + ОбъектXDTO.Установить(ИмяСвойства, Значение); + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +Процедура ЗаполнитьДанныеПодписантаСОпределением(ОписаниеФайла, ДанныеФайлаЭД, ДанныеПодписанта) + + ДанныеПоСертификатуИДоверенности = ПолучитьДанныеПоСертификатуИДоверенностиДляЗаполнения(ОписаниеФайла.ТипРегламента, ДанныеПодписанта); + + ПространствоИменСхемы = ДанныеФайлаЭД.Тип().URIПространстваИмен; + ДанныеФайлаЭДФабрикаXDTO = ДанныеФайлаЭД.Фабрика(); + + СвойстваВДокументе = ДанныеФайлаЭД.Документ.Тип().Свойства; + + ПодписантXDTO = Неопределено; + + Для Каждого СвойствоВДокументе Из СвойстваВДокументе Цикл + + Если СтрНачинаетсяС(СвойствоВДокументе.Имя, "Подп") Тогда + ПодписантXDTO = СвойствоВДокументе; + Прервать; + КонецЕсли; + + КонецЦикла; + + Если ПодписантXDTO = Неопределено Тогда + Возврат; + КонецЕсли; + + ДанныеДляЗаписиВРеквизитыДокумента = Новый Структура; + + ДанныеФайлаЭД.Документ.Сбросить(ПодписантXDTO.Имя); + + Подписант = ДанныеФайлаЭДФабрикаXDTO.Создать(ПодписантXDTO.Тип); + + ФИО = ДанныеФайлаЭДФабрикаXDTO.Создать(ДанныеФайлаЭДФабрикаXDTO.Тип(ПространствоИменСхемы, "ФИОТип")); + + ЗаполнитьСвойствоXDTO(ФИО, "Фамилия", ДанныеПоСертификатуИДоверенности.Фамилия, Истина); + ЗаполнитьСвойствоXDTO(ФИО, "Имя", ДанныеПоСертификатуИДоверенности.Имя, Истина); + ЗаполнитьСвойствоXDTO(ФИО, "Отчество", ДанныеПоСертификатуИДоверенности.Отчество); + + ЗаполнитьСвойствоXDTO(Подписант, "ФИО", ФИО, Истина); + ЗаполнитьСвойствоXDTO(Подписант, "Должн", ДанныеПоСертификатуИДоверенности.Должность); + + ЗаполнитьСвойствоXDTO(Подписант, "ТипПодпис", "1", Истина); + + ДанныеДляЗаписиВРеквизитыДокумента.Вставить("ПодписантФамилия", ДанныеПоСертификатуИДоверенности.Фамилия); + ДанныеДляЗаписиВРеквизитыДокумента.Вставить("ПодписантИмя", ДанныеПоСертификатуИДоверенности.Имя); + ДанныеДляЗаписиВРеквизитыДокумента.Вставить("ПодписантОтчество", ДанныеПоСертификатуИДоверенности.Отчество); + ДанныеДляЗаписиВРеквизитыДокумента.Вставить("ПодписантДолжность", ДанныеПоСертификатуИДоверенности.Должность); + + Если ЗначениеЗаполнено(ДанныеПоСертификатуИДоверенности.НомерДоверенности) Тогда + + Если ЗначениеЗаполнено(ДанныеПоСертификатуИДоверенности.СведенияОбИнформационнойСистеме) Тогда + + ЗаполнитьСвойствоXDTO(Подписант, "СпосПодтПолном", "3", Истина); + + ДанныеДляЗаписиВРеквизитыДокумента.Вставить("ПодписантСпособПодтвержденияПолномочий", "3"); + + СвДоверЭл = ДанныеФайлаЭДФабрикаXDTO.Создать(Подписант.Тип().Свойства.Получить("СвДоверЭл").Тип); + + ЗаполнитьСвойствоXDTO(СвДоверЭл, "НомДовер", ДанныеПоСертификатуИДоверенности.НомерДоверенности, Истина); + ЗаполнитьСвойствоXDTO(СвДоверЭл, "ДатаДовер", Формат(ДанныеПоСертификатуИДоверенности.ДатаДоверенности, "ДФ=dd.MM.yyyy"), Истина); + ЗаполнитьСвойствоXDTO(СвДоверЭл, "ИдСистХран", ДанныеПоСертификатуИДоверенности.СведенияОбИнформационнойСистеме, Истина); + + ЗаполнитьСвойствоXDTO(СвДоверЭл, "ВнНомДовер", ДанныеПоСертификатуИДоверенности.ПорядковыйНомерДоверенности); + + Подписант.СвДоверЭл.Добавить(СвДоверЭл); + + ДанныеДляЗаписиВРеквизитыДокумента.Вставить("ПодписантДоверенностьЭлектронная__1__Номер", + ДанныеПоСертификатуИДоверенности.НомерДоверенности); + ДанныеДляЗаписиВРеквизитыДокумента.Вставить("ПодписантДоверенностьЭлектронная__1__Дата", + ДанныеПоСертификатуИДоверенности.ДатаДоверенности); + ДанныеДляЗаписиВРеквизитыДокумента.Вставить("ПодписантДоверенностьЭлектронная__1__ИнформационнаяСистема", + ДанныеПоСертификатуИДоверенности.СведенияОбИнформационнойСистеме); + + Иначе + + ЗаполнитьСвойствоXDTO(Подписант, "СпосПодтПолном", "6", Истина); + + ДанныеДляЗаписиВРеквизитыДокумента.Вставить("ПодписантСпособПодтвержденияПолномочий", "6"); + КонецЕсли; + + Иначе + + ЗаполнитьСвойствоXDTO(Подписант, "СпосПодтПолном", "1", Истина); + + ДанныеДляЗаписиВРеквизитыДокумента.Вставить("ПодписантСпособПодтвержденияПолномочий", "1"); + КонецЕсли; + + ЗаполнитьСвойствоXDTO(ДанныеФайлаЭД.Документ, ПодписантXDTO.Имя, Подписант, Истина); + + ЗаписатьДанныеОПодписантеВРеквизитыДокумента(ОписаниеФайла.ДокументЭПД, ДанныеФайлаЭД, + ДанныеПодписанта.Организация, ДанныеДляЗаписиВРеквизитыДокумента); + +КонецПроцедуры + +Процедура ЗаполнитьДанныеПодписанта(ОписаниеФайла, ДанныеФайлаЭД, ДанныеПодписанта) + + ДанныеПоСертификатуИДоверенности = ПолучитьДанныеПоСертификатуИДоверенностиДляЗаполнения(ОписаниеФайла.ТипРегламента, ДанныеПодписанта); + ПространствоИменСхемы = ДанныеФайлаЭД.Тип().URIПространстваИмен; + ДанныеФайлаЭДФабрикаXDTO = ДанныеФайлаЭД.Фабрика(); + + ИдФайл = ВРЕГ(ДанныеФайлаЭД.ИдФайл); + + ПодписантМножественный = Ложь; + + Если СтрНачинаетсяС(ИдФайл, "ON_TRNPEREADR") + Или СтрНачинаетсяС(ИдФайл, "ON_TRNPUDGO") + Или СтрНачинаетсяС(ИдФайл, "ON_TRNPUDPER") Тогда + + ПодписантМножественный = Истина; + + КонецЕсли; + + Если ПодписантМножественный Тогда + + ПодписантТипXDTO = ДанныеФайлаЭД.Документ.Подписант[0].Тип(); + ДанныеФайлаЭД.Документ.Подписант.Очистить(); + + Иначе + + ПодписантТипXDTO = ДанныеФайлаЭД.Документ.Подписант.Тип(); + ДанныеФайлаЭД.Документ.Сбросить("Подписант"); + + КонецЕсли; + + ДанныеДляЗаписиВРеквизитыДокумента = Новый Структура; + + Подписант = ДанныеФайлаЭДФабрикаXDTO.Создать(ПодписантТипXDTO); + ФИО = ДанныеФайлаЭДФабрикаXDTO.Создать(ДанныеФайлаЭДФабрикаXDTO.Тип(ПространствоИменСхемы, "ФИОТип")); + + ЗаполнитьСвойствоXDTO(ФИО, "Фамилия", ДанныеПоСертификатуИДоверенности.Фамилия, Истина); + ЗаполнитьСвойствоXDTO(ФИО, "Имя", ДанныеПоСертификатуИДоверенности.Имя, Истина); + ЗаполнитьСвойствоXDTO(ФИО, "Отчество", ДанныеПоСертификатуИДоверенности.Отчество); + + ЗаполнитьСвойствоXDTO(Подписант, "ФИО", ФИО, Истина); + ЗаполнитьСвойствоXDTO(Подписант, "Должн", ДанныеПоСертификатуИДоверенности.Должность); + + Если ПодписантМножественный Тогда + ДанныеДляЗаписиВРеквизитыДокумента.Вставить("Подписанты__1__Фамилия", ДанныеПоСертификатуИДоверенности.Фамилия); + ДанныеДляЗаписиВРеквизитыДокумента.Вставить("Подписанты__1__Имя", ДанныеПоСертификатуИДоверенности.Имя); + ДанныеДляЗаписиВРеквизитыДокумента.Вставить("Подписанты__1__Отчество", ДанныеПоСертификатуИДоверенности.Отчество); + ДанныеДляЗаписиВРеквизитыДокумента.Вставить("Подписанты__1__Должность", ДанныеПоСертификатуИДоверенности.Должность); + + Иначе + + ДанныеДляЗаписиВРеквизитыДокумента.Вставить("ПодписантФамилия", ДанныеПоСертификатуИДоверенности.Фамилия); + ДанныеДляЗаписиВРеквизитыДокумента.Вставить("ПодписантИмя", ДанныеПоСертификатуИДоверенности.Имя); + ДанныеДляЗаписиВРеквизитыДокумента.Вставить("ПодписантОтчество", ДанныеПоСертификатуИДоверенности.Отчество); + ДанныеДляЗаписиВРеквизитыДокумента.Вставить("ПодписантДолжность", ДанныеПоСертификатуИДоверенности.Должность); + + КонецЕсли; + + Если ЗначениеЗаполнено(ДанныеПоСертификатуИДоверенности.НомерДоверенности) Тогда + + ЗаполнитьСвойствоXDTO(Подписант, "СтатПодп", "2", Истина); + + ЗаполнитьСвойствоXDTO(Подписант, "ИдСистХран", ДанныеПоСертификатуИДоверенности.СведенияОбИнформационнойСистеме); + + СвДовер = ДанныеФайлаЭДФабрикаXDTO.Создать(Подписант.Тип().Свойства.Получить("СвДовер").Тип); + + ЗаполнитьСвойствоXDTO(СвДовер, "ДатаДовер", + Формат(ДанныеПоСертификатуИДоверенности.ДатаДоверенности, "ДФ=dd.MM.yyyy"), Истина); + + ЗаполнитьСвойствоXDTO(СвДовер, "ИдентДовер", ДанныеПоСертификатуИДоверенности.НомерДоверенности, Истина); + ЗаполнитьСвойствоXDTO(СвДовер, "НомерДовер", ДанныеПоСертификатуИДоверенности.НомерДоверенности, Истина); + + ЗаполнитьСвойствоXDTO(Подписант, "СвДовер", СвДовер); + + Если ПодписантМножественный Тогда + + ДанныеДляЗаписиВРеквизитыДокумента.Вставить("Подписанты__1__КодСтатусаПодписанта", "2"); + + ДанныеДляЗаписиВРеквизитыДокумента.Вставить("Подписанты__1__ДоверенностьИдентификаторФайла", + ДанныеПоСертификатуИДоверенности.НомерДоверенности); + ДанныеДляЗаписиВРеквизитыДокумента.Вставить("Подписанты__1__ДоверенностьДата", + ДанныеПоСертификатуИДоверенности.ДатаДоверенности); + ДанныеДляЗаписиВРеквизитыДокумента.Вставить("Подписанты__1__СистемаХранящаяДоверенность", + ДанныеПоСертификатуИДоверенности.СведенияОбИнформационнойСистеме); + + Иначе + + ДанныеДляЗаписиВРеквизитыДокумента.Вставить("ПодписантКодСтатуса", "2"); + + ДанныеДляЗаписиВРеквизитыДокумента.Вставить("ПодписантДоверенностьЭлектроннаяНомер", + ДанныеПоСертификатуИДоверенности.НомерДоверенности); + ДанныеДляЗаписиВРеквизитыДокумента.Вставить("ПодписантДоверенностьЭлектроннаяДата", + ДанныеПоСертификатуИДоверенности.ДатаДоверенности); + ДанныеДляЗаписиВРеквизитыДокумента.Вставить("ПодписантДоверенностьЭлектроннаяИнформационнаяСистема", + ДанныеПоСертификатуИДоверенности.СведенияОбИнформационнойСистеме); + + КонецЕсли; + + Иначе + + ЗаполнитьСвойствоXDTO(Подписант, "СтатПодп", "1", Истина); + + Если ПодписантМножественный Тогда + ДанныеДляЗаписиВРеквизитыДокумента.Вставить("Подписанты__1__КодСтатусаПодписанта", "1"); + Иначе + ДанныеДляЗаписиВРеквизитыДокумента.Вставить("ПодписантКодСтатуса", "1"); + КонецЕсли; + + КонецЕсли; + + Если ПодписантМножественный Тогда + + ДанныеФайлаЭД.Документ.Подписант.Добавить(Подписант); + + Иначе + + ЗаполнитьСвойствоXDTO(ДанныеФайлаЭД.Документ, "Подписант", Подписант, Истина); + + КонецЕсли; + + ЗаписатьДанныеОПодписантеВРеквизитыДокумента(ОписаниеФайла.ДокументЭПД, ДанныеФайлаЭД, + ДанныеПодписанта.Организация, ДанныеДляЗаписиВРеквизитыДокумента); + +КонецПроцедуры + +Процедура ЗаписатьДанныеОПодписантеВРеквизитыДокумента(ДокументЭПД, ДанныеФайлаЭД, Организация, ДанныеДляЗаписиВРеквизитыДокумента) + + КлючеваяИнформацияПоТитулу = КлючеваяИнформацияПоТитулу(ДанныеФайлаЭД); + + ИдФайл = ДанныеФайлаЭД.ИдФайл; + + НомерВерсии = 0; + + ЗапросВерсии = Новый Запрос; + ЗапросВерсии.Текст = "ВЫБРАТЬ + | МАКСИМУМ(ВЫБОР + | КОГДА ВерсииТитуловЭПД.ИдентификаторФайла = &ИдентификаторФайла + | И ВерсииТитуловЭПД.ДатаВерсии = &ДатаВерсии + | ТОГДА ВерсииТитуловЭПД.НомерВерсии + | ИНАЧЕ -1 + | КОНЕЦ) КАК НомерЭтойВерсии + |ИЗ + | РегистрСведений.ВерсииТитуловЭПД КАК ВерсииТитуловЭПД + |ГДЕ + | ВерсииТитуловЭПД.Документ = &Документ + | И ВерсииТитуловЭПД.Организация = &Организация + | И ВерсииТитуловЭПД.Титул = &Титул"; + + ЗапросВерсии.Параметры.Вставить("Документ", ДокументЭПД); + ЗапросВерсии.Параметры.Вставить("Организация", Организация); + ЗапросВерсии.Параметры.Вставить("Титул", КлючеваяИнформацияПоТитулу.Титул); + ЗапросВерсии.Параметры.Вставить("ИдентификаторФайла", ИдФайл); + ЗапросВерсии.Параметры.Вставить("ДатаВерсии", КлючеваяИнформацияПоТитулу.ДатаВерсии); + + Выборка = ЗапросВерсии.Выполнить().Выбрать(); + + Если Выборка.Следующий() Тогда + Если ТипЗнч(Выборка.НомерЭтойВерсии) = Тип("Число") И Выборка.НомерЭтойВерсии > -1 Тогда + НомерВерсии = Выборка.НомерЭтойВерсии; + КонецЕсли; + КонецЕсли; + + Для Каждого КиЗ Из ДанныеДляЗаписиВРеквизитыДокумента Цикл + + МассивЧастей = ОбменСГИСЭПДКлиентСервер.РазделитьСтрокуСоСложнымРазделителем(КиЗ.Ключ, "__"); + Если МассивЧастей.Количество() = 3 Тогда + ИмяТабличнойЧасти = МассивЧастей[0]; + НомерСтрокиРеквизита = Число(МассивЧастей[1]); + ИмяРеквизита = МассивЧастей[2]; + Иначе + ИмяТабличнойЧасти = ""; + НомерСтрокиРеквизита = 0; + ИмяРеквизита = КиЗ.Ключ; + КонецЕсли; + + ИмяРеквизита = КлючеваяИнформацияПоТитулу.ПрефиксТитула + ИмяРеквизита; + + НаборЗаписейЗначений = РегистрыСведений.ЗначенияРеквизитовДокументовЭПД.СоздатьНаборЗаписей(); + + НаборЗаписейЗначений.Отбор.Документ.Установить(ДокументЭПД); + НаборЗаписейЗначений.Отбор.Организация.Установить(Организация); + НаборЗаписейЗначений.Отбор.Титул.Установить(КлючеваяИнформацияПоТитулу.Титул); + НаборЗаписейЗначений.Отбор.НомерВерсии.Установить(НомерВерсии); + + НаборЗаписейЗначений.Отбор.ИмяРеквизита.Установить(ИмяРеквизита); + НаборЗаписейЗначений.Отбор.ИмяТабличнойЧасти.Установить(ИмяТабличнойЧасти); + НаборЗаписейЗначений.Отбор.НомерСтрокиРеквизита.Установить(НомерСтрокиРеквизита); + + НаборЗаписейЗначений.Прочитать(); + + Если НаборЗаписейЗначений.Количество() > 0 Тогда + + Для Каждого НаборЗапись Из НаборЗаписейЗначений Цикл + + ЗаполнитьРеквизит(НаборЗапись, КиЗ); + + КонецЦикла; + + Иначе + + НоваяЗапись = НаборЗаписейЗначений.Добавить(); + НоваяЗапись.Документ = ДокументЭПД; + НоваяЗапись.Организация = Организация; + НоваяЗапись.Титул = КлючеваяИнформацияПоТитулу.Титул; + НоваяЗапись.НомерВерсии = НомерВерсии; + + НоваяЗапись.ИмяТабличнойЧасти = ИмяТабличнойЧасти; + НоваяЗапись.НомерСтрокиРеквизита = НомерСтрокиРеквизита; + НоваяЗапись.ИмяРеквизита = ИмяРеквизита; + + ЗаполнитьРеквизит(НоваяЗапись, КиЗ); + + КонецЕсли; + + НаборЗаписейЗначений.Записать(Истина); + + КонецЦикла; + +КонецПроцедуры + +Процедура ЗаполнитьРеквизит(НаборЗапись, ДанныеРеквизита) + + Если ДанныеРеквизита.Значение = Неопределено Или ТипЗнч(ДанныеРеквизита.Значение) = Тип("Строка") Тогда + НаборЗапись.ЗначениеРеквизитаСтрока = ДанныеРеквизита.Значение; + НаборЗапись.ТипРеквизита = Перечисления.ТипыРеквизитовЭПД.НеограниченнаяСтрока; + ИначеЕсли ТипЗнч(ДанныеРеквизита.Значение) = Тип("Число") + Или ТипЗнч(ДанныеРеквизита.Значение) = Тип("Дата") + Или ТипЗнч(ДанныеРеквизита.Значение) = Тип("Булево") Тогда + НаборЗапись.ЗначениеРеквизита = ДанныеРеквизита.Значение; + НаборЗапись.ТипРеквизита = Перечисления.ТипыРеквизитовЭПД.ПростойКромеСтроки; + Иначе + НаборЗапись.ЗначениеРеквизитаСсылка = ДанныеРеквизита.Значение; + НаборЗапись.ТипРеквизита = Перечисления.ТипыРеквизитовЭПД.СсылочныйТип; + КонецЕсли; + +КонецПроцедуры + +Процедура ЗаполнитьЭТрННаОснованииЭЗЗ(Параметры, Основание, СтруктураРеквизитов) + + СтруктураРеквизитовОснования = Неопределено; + ЗаполнитьТаблицуЗначенийРеквизитов(Основание, + Основание.Организация, + СтруктураРеквизитовОснования); + + МенеджерОбъекта = Документы.ЭлектроннаяТранспортнаяНакладная; + МакетСоответствиеИмен = МенеджерОбъекта.ПолучитьМакет("СоответствиеИменРеквизитов"); + ОбластьПоискаИмен = МакетСоответствиеИмен.ПолучитьОбласть("ТитулГрузоотправителя"); + ОбластьКолонкаРеквизитов = МакетСоответствиеИмен.Область(,1,МакетСоответствиеИмен.ВысотаТаблицы,1); + + СтруктураРеквизитовЗаполнение = Новый Структура; + МассивВерсийЗаполнение = Новый Массив; + СтруктураРеквизитовТитулаЗаполнение = Новый Структура; + + Для Каждого ТитулКиЗ Из СтруктураРеквизитовОснования Цикл + ПоследняяВерсия = ТитулКиЗ.Значение[ТитулКиЗ.Значение.ВГраница()]; + Для Каждого РеквизитКиЗ Из ПоследняяВерсия Цикл + Если СтрЗаканчиваетсяНа(РеквизитКиЗ.Ключ, "СсылкаСведенияОбОпасномГрузе") + И ЗначениеЗаполнено(РеквизитКиЗ.Значение) Тогда + ПрефиксСтрокиОткуда = СтрЗаменить(РеквизитКиЗ.Ключ, "СсылкаСведенияОбОпасномГрузе", ""); + ПрефиксСтрокиКуда = СтрЗаменить(ПрефиксСтрокиОткуда, "ТитулГрузоотправителяГрузы", "ТитулГрузоотправителяСведенияОбОпасныхГрузах"); + СтруктураРеквизитовТитулаЗаполнение.Вставить(ПрефиксСтрокиКуда + "СсылкаДОПОГ", РеквизитКиЗ.Значение); + ИдентификаторСтрокиГруза = Неопределено; + ПоследняяВерсия.Свойство(ПрефиксСтрокиОткуда + "ИдентификаторСтроки", ИдентификаторСтрокиГруза); + Если ИдентификаторСтрокиГруза <> Неопределено Тогда + СтруктураРеквизитовТитулаЗаполнение.Вставить(ПрефиксСтрокиКуда + "ИдентификаторСтрокиРодителя", ИдентификаторСтрокиГруза); + КонецЕсли; + Если ТипЗнч(РеквизитКиЗ.Значение) = Тип("СправочникСсылка.ХранимыеДанныеЭПД") Тогда + СтруктураДОПОГ = Новый Структура; + ОбменСГИСЭПДКлиентСервер.ЗаполнитьРеквизитыКлассификатораДОПОГ(РеквизитКиЗ.Значение, "", СтруктураДОПОГ); + Для Каждого ДопогКиЗ Из СтруктураДОПОГ Цикл + СтруктураРеквизитовТитулаЗаполнение.Вставить(ПрефиксСтрокиКуда + ДопогКиЗ.Ключ, ДопогКиЗ.Значение); + КонецЦикла; + КонецЕсли; + ИначеЕсли СтрНачинаетсяС(РеквизитКиЗ.Ключ, "ТитулПеревозчикаТранспортноеСредство") + Или СтрНачинаетсяС(РеквизитКиЗ.Ключ, "ТитулПеревозчикаОснованияВладенияТС") + Или СтрНачинаетсяС(РеквизитКиЗ.Ключ, "ТитулПеревозчикаОснованиеВладенияТСРеквизитыСторон") + Или СтрНачинаетсяС(РеквизитКиЗ.Ключ, "ТитулПеревозчикаПрицепы") + Или СтрНачинаетсяС(РеквизитКиЗ.Ключ, "ТитулПеревозчикаОснованияВладенияПрицепом") + Или СтрНачинаетсяС(РеквизитКиЗ.Ключ, "ТитулПеревозчикаОснованиеВладенияПрицепомРеквизитыСторон") + Или СтрНачинаетсяС(РеквизитКиЗ.Ключ, "ТитулПеревозчикаСпециальныеУсловияДвижения") + Или СтрНачинаетсяС(РеквизитКиЗ.Ключ, "ТитулПеревозчикаВодители") + Или СтрНачинаетсяС(РеквизитКиЗ.Ключ, "ТитулПеревозчикаВодительНомераТелефонов") Тогда + КлючКуда = СтрЗаменить(РеквизитКиЗ.Ключ, "ТитулПеревозчика", "ТитулГрузоотправителя"); + СтруктураРеквизитовТитулаЗаполнение.Вставить(КлючКуда, РеквизитКиЗ.Значение); + ИначеЕсли РеквизитКиЗ.Ключ = "СсылкаТитулГрузоотправителяГрузоотправитель" + Или РеквизитКиЗ.Ключ = "СсылкаТитулГрузоотправителяПеревозчик" + Или РеквизитКиЗ.Ключ = "СсылкаТитулГрузоотправителяГрузополучатель" + Или РеквизитКиЗ.Ключ = "СсылкаТитулГрузоотправителяВалюта" Тогда + СтруктураРеквизитовТитулаЗаполнение.Вставить(РеквизитКиЗ.Ключ, РеквизитКиЗ.Значение); + ИначеЕсли РеквизитКиЗ.Ключ = "ТитулГрузоотправителяРекомендацииОПредельныхСрокахПеревозки" Тогда + СтруктураРеквизитовТитулаЗаполнение.Вставить("ТитулГрузоотправителяСрокДоставкиГруза", РеквизитКиЗ.Значение); + ИначеЕсли РеквизитКиЗ.Ключ = "ТитулГрузоотправителяУказанияВОтношенииВыполненияНормПеревозки" + И РеквизитКиЗ.Значение <> "Отсутствуют" Тогда + Указания = Неопределено; + Если СтруктураРеквизитовТитулаЗаполнение.Свойство("ТитулГрузоотправителяУказанияВОтношенииВыполненияНормПеревозки", Указания) + И Указания <> "Отсутствуют" Тогда + СтруктураРеквизитовТитулаЗаполнение.Вставить("ТитулГрузоотправителяУказанияВОтношенииВыполненияНормПеревозки", + Указания + "; " + РеквизитКиЗ.Значение); + Иначе + СтруктураРеквизитовТитулаЗаполнение.Вставить("ТитулГрузоотправителяУказанияВОтношенииВыполненияНормПеревозки", РеквизитКиЗ.Значение); + КонецЕсли; + ИначеЕсли СтрНачинаетсяС(РеквизитКиЗ.Ключ, "ТитулГрузоотправителяГрузоотправитель") + Или СтрНачинаетсяС(РеквизитКиЗ.Ключ, "ТитулГрузоотправителяПеревозчик") + Или СтрНачинаетсяС(РеквизитКиЗ.Ключ, "ТитулГрузоотправителяГрузополучатель") + Или СтрНачинаетсяС(РеквизитКиЗ.Ключ, "ТитулГрузоотправителяАдресПогрузки") + Или СтрНачинаетсяС(РеквизитКиЗ.Ключ, "ТитулГрузоотправителяТранспортноеСредство") + Или СтрНачинаетсяС(РеквизитКиЗ.Ключ, "ТитулГрузоотправителяГрузы") + Или СтрНачинаетсяС(РеквизитКиЗ.Ключ, "ТитулГрузоотправителяЗаказчик") + Или РеквизитКиЗ.Ключ = "ТитулГрузоотправителяЗаявленныеДатаВремяПодачи" + Или РеквизитКиЗ.Ключ = "ТитулГрузоотправителяЗаказНомер" + Или РеквизитКиЗ.Ключ = "ТитулГрузоотправителяЗаказДата" + Или РеквизитКиЗ.Ключ = "ТитулГрузоотправителяВерхнийПределТемпературыПриПеревозке" + Или РеквизитКиЗ.Ключ = "ТитулГрузоотправителяНижнийПределТемпературыПриПеревозке" + Или РеквизитКиЗ.Ключ = "ТитулГрузоотправителяВерхнийПределВлажностиПриПеревозке" + Или РеквизитКиЗ.Ключ = "ТитулГрузоотправителяНижнийПределВлажностиПриПеревозке" + Или РеквизитКиЗ.Ключ = "ТитулГрузоотправителяСтоимостьГруза" + Или РеквизитКиЗ.Ключ = "ТитулГрузоотправителяКодВалюты" + Или РеквизитКиЗ.Ключ = "ТитулГрузоотправителяНаименованиеВалюты" Тогда + МассивЧастейИмени = ОбменСГИСЭПДКлиентСервер.РазделитьСтрокуСоСложнымРазделителем(РеквизитКиЗ.Ключ, "__"); + Если МассивЧастейИмени.Количество() = 1 Тогда + ИмяРеквизита = РеквизитКиЗ.Ключ; + ИначеЕсли МассивЧастейИмени.Количество() = 3 Тогда + ИмяРеквизита = МассивЧастейИмени[0] + "." + МассивЧастейИмени[2]; + КонецЕсли; + ОбластьНайдено = МакетСоответствиеИмен.НайтиТекст(ИмяРеквизита, , ОбластьКолонкаРеквизитов, Ложь, Истина, Истина, Ложь); + Если ОбластьНайдено <> Неопределено Тогда + СтруктураРеквизитовТитулаЗаполнение.Вставить(РеквизитКиЗ.Ключ, РеквизитКиЗ.Значение); + Иначе + Если ИмяРеквизита = "ТитулГрузоотправителяГрузы.СсылкаВалютаСтоимости" Тогда + СтруктураРеквизитовТитулаЗаполнение.Вставить(РеквизитКиЗ.Ключ, РеквизитКиЗ.Значение); + КонецЕсли; + КонецЕсли; + КонецЕсли; + КонецЦикла; + Если ТитулКиЗ.Ключ = "ТитулГрузоотправителя" Тогда + // Адреса погрузки и выгрузки + МассивСтрокАдресов = ОбменСГИСЭПДКлиентСервер.МассивСтрокТаблицыИзСтруктурыРеквизитов(ПоследняяВерсия, + "ТитулГрузоотправителяАдресаПунктовПогрузкиИВыгрузки"); + НомерПогрузки = 999; + НомерВыгрузки = 999; + СтрокаПервойПогрузки = Новый Структура; + СтрокаПервойВыгрузки = Новый Структура; + Для Каждого СтруктураСтроки Из МассивСтрокАдресов Цикл + Если СтруктураСтроки.Операция = "Погрузка" И СтруктураСтроки.НомерПп < НомерПогрузки Тогда + НомерПогрузки = СтруктураСтроки.НомерПп; + СтрокаПервойПогрузки = СтруктураСтроки; + КонецЕсли; + Если СтруктураСтроки.Операция = "Выгрузка" И СтруктураСтроки.НомерПп < НомерВыгрузки Тогда + НомерВыгрузки = СтруктураСтроки.НомерПп; + СтрокаПервойВыгрузки = СтруктураСтроки; + КонецЕсли; + КонецЦикла; + Для Каждого РеквизитКиЗ Из СтрокаПервойПогрузки Цикл + КлючРеквизита = СтрЗаменить(РеквизитКиЗ.Ключ, "АдресПунктаПогрузки", "ТитулГрузоотправителяАдресПогрузки"); + СтруктураРеквизитовТитулаЗаполнение.Вставить(КлючРеквизита, РеквизитКиЗ.Значение); + КонецЦикла; + Для Каждого РеквизитКиЗ Из СтрокаПервойВыгрузки Цикл + КлючРеквизита = СтрЗаменить(РеквизитКиЗ.Ключ, "АдресПунктаПогрузки", "ТитулГрузоотправителяГрузополучательАдресДоставки"); + СтруктураРеквизитовТитулаЗаполнение.Вставить(КлючРеквизита, РеквизитКиЗ.Значение); + КонецЦикла; + // Суммарные величины + СуммаБрутто = ОбменСГИСЭПДКлиентСервер.СуммаПоСтрокамТаблицыИзСтруктурыРеквизитов(ПоследняяВерсия, + "ТитулГрузоотправителяГрузы", + "МассаБрутто"); + СтруктураРеквизитовТитулаЗаполнение.Вставить("ТитулГрузоотправителяМассаБруттоГруза", СуммаБрутто); + + СуммаМест = ОбменСГИСЭПДКлиентСервер.СуммаПоСтрокамТаблицыИзСтруктурыРеквизитов(ПоследняяВерсия, + "ТитулГрузоотправителяГрузы", + "КоличествоГрузовыхМест"); + СтруктураРеквизитовТитулаЗаполнение.Вставить("ТитулГрузоотправителяКоличествоГрузовыхМест", СуммаМест); + КонецЕсли; + КонецЦикла; + + ВидТары = Неопределено; + ИтераторЦикла = 1; + Пока ПоследняяВерсия.Свойство("ТитулГрузоотправителяГрузы__" + ИтераторЦикла + "__ВидТары", ВидТары) Цикл + СтруктураРеквизитовТитулаЗаполнение.Вставить("ТитулГрузоотправителяГрузы__" + ИтераторЦикла + "__СпособУпаковки", ВидТары); + Если СтруктураРеквизитовТитулаЗаполнение.Свойство("ТитулГрузоотправителяГрузы__" + ИтераторЦикла + "__ИдентификаторСтроки") = Ложь Тогда + СтруктураРеквизитовТитулаЗаполнение.Вставить("ТитулГрузоотправителяГрузы__" + ИтераторЦикла + "__ИдентификаторСтроки", + Строка(Новый УникальныйИдентификатор())); + КонецЕсли; + ИтераторЦикла = ИтераторЦикла + 1; + КонецЦикла; + + ИдентификаторСтроки = Неопределено; + ИтераторЦикла = 1; + Пока СтруктураРеквизитовТитулаЗаполнение.Свойство( + "ТитулГрузоотправителяГрузы__" + ИтераторЦикла + "__ИдентификаторСтроки", ИдентификаторСтроки) Цикл + СтруктураРеквизитовТитулаЗаполнение.Вставить("ТитулГрузоотправителяПереченьМаркировокГруза__" + + ИтераторЦикла + "__ИдентификаторСтрокиРодителя", ИдентификаторСтроки); + СтруктураРеквизитовТитулаЗаполнение.Вставить("ТитулГрузоотправителяПереченьМаркировокГруза__" + + ИтераторЦикла + "__МаркировкаГруза", "Отсутствует"); + ИтераторЦикла = ИтераторЦикла + 1; + КонецЦикла; + + СтруктураРеквизитовТитулаЗаполнение.Вставить("ТитулГрузоотправителяЛицоИмеющееПолномочияПереадресовки", "Грузоотправитель"); + СтруктураРеквизитовТитулаЗаполнение.Вставить("ТитулГрузоотправителяСпособПередачиУказанияНаПереадресовку", "Электронное уведомление перевозчика о переадресовке"); + Телефон = Неопределено; + СтруктураРеквизитовТитулаЗаполнение.Свойство("ТитулГрузоотправителяГрузоотправительНомераТелефонов__1__Телефон", Телефон); + Если Телефон <> Неопределено Тогда + СтруктураРеквизитовТитулаЗаполнение.Вставить("ТитулГрузоотправителяОтветственныйЗаПереадресовкуНомераТелефонов__1__Телефон", Телефон); + КонецЕсли; + + ЗаполнитьПредставлениеХранимыхДанныхОбъекта(СтруктураРеквизитовТитулаЗаполнение, + "Документ.ЭлектроннаяТранспортнаяНакладная", + ОбластьПоискаИмен); + + МассивВерсийЗаполнение.Добавить(Новый ФиксированнаяСтруктура(СтруктураРеквизитовТитулаЗаполнение)); + ПервыйТитулПрефикс = "ТитулГрузоотправителя"; + СтруктураРеквизитовЗаполнение.Вставить(ПервыйТитулПрефикс, Новый ФиксированныйМассив(МассивВерсийЗаполнение)); + СтруктураРеквизитов = Новый ФиксированнаяСтруктура(СтруктураРеквизитовЗаполнение); + +КонецПроцедуры + #Область МетодыУниверсальнойПечатнойФормы Функция КоличествоКолонокПечатнойФормы() @@ -10151,7 +12117,20 @@ Форма.Контрагент = РеквизитыХранимыхДанных.Контрагент; Форма.ДополнительныйОтбор = РеквизитыХранимыхДанных.ДополнительныйОтбор; ОписаниеХранимыхДанныхЭПД = ПолучитьОписаниеХранимыхДанныхЭПДПоСсылке(ЗначениеЗаполнения, Форма.ГруппаДанных); + ЗаполнитьЗначенияСвойств(Форма, ОписаниеХранимыхДанныхЭПД.ДанныеЗаполненияРеквизитовФормы); + + Если РеквизитыХранимыхДанных.ГруппаДанных = "Груз" + И ОписаниеХранимыхДанныхЭПД.ДанныеЗаполненияРеквизитовФормы.Свойство("КодТоварнойНоменклатуры") Тогда + + СсылкаТоварнойНоменклатуры = НайтиСсылкуВОпределяемомТипеПоКоду("КлассификаторТНВЭДЭПД", + ОписаниеХранимыхДанныхЭПД.ДанныеЗаполненияРеквизитовФормы.КодТоварнойНоменклатуры); + Если ЗначениеЗаполнено(СсылкаТоварнойНоменклатуры) Тогда + Форма.КодТоварнойНоменклатуры = СсылкаТоварнойНоменклатуры; + КонецЕсли; + + КонецЕсли; + Если ОписаниеХранимыхДанныхЭПД.Свойство("ДанныеЗаполненияТаблицФормы") Тогда Для Каждого ТаблицКиЗ Из ОписаниеХранимыхДанныхЭПД.ДанныеЗаполненияТаблицФормы Цикл Если Форма.ОписаниеРеквизитовФормы.ОписаниеТаблицФормы.Свойство(ТаблицКиЗ.Ключ) Тогда @@ -10336,6 +12315,28 @@ КонецПроцедуры +// Найти ссылку в определяемом типе по коду. +// +// Параметры: +// ИмяОпределяемогоТипа - Строка - Имя определяемого типа +// Код - Строка - Код +// +// Возвращаемое значение: +// Неопределено - Найти ссылку в определяемом типе по коду +Функция НайтиСсылкуВОпределяемомТипеПоКоду(ИмяОпределяемогоТипа, Код) + МассивТипов = Метаданные.ОпределяемыеТипы[ИмяОпределяемогоТипа].Тип.Типы(); + Для Каждого Тип Из МассивТипов Цикл + Если Метаданные.НайтиПоТипу(Тип) <> Неопределено Тогда + ИмяОбъекта = Метаданные.НайтиПоТипу(Тип).ПолноеИмя(); + Менеджер = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ИмяОбъекта); + НайденнаяСсылка = Менеджер.НайтиПоКоду(Код); + Если ЗначениеЗаполнено(НайденнаяСсылка) Тогда + Возврат НайденнаяСсылка; + КонецЕсли; + КонецЕсли; + КонецЦикла; + Возврат Неопределено; +КонецФункции // Менеджер объекта формы. // @@ -10460,6 +12461,7 @@ Результат.Вставить("ЮЛНаименование"); Результат.Вставить("ЮЛ_ИНН"); Результат.Вставить("ЮЛ_КПП"); + Результат.Вставить("ЮЛ_ОГРН"); Результат.Вставить("ОГРН"); Результат.Вставить("АдресИндекс"); @@ -10470,6 +12472,11 @@ Результат.Вставить("АдресУлица"); Результат.Вставить("АдресДом"); Результат.Вставить("АдресКорпус"); + Результат.Вставить("АдресКвартира"); + + Результат.Вставить("АдресКодСтраны"); + Результат.Вставить("АдресСтрана"); + Результат.Вставить("АдресПредставление"); Если ДобавитьПлатежныеРеквизиты = Истина Тогда Результат.Вставить("БИК"); @@ -10605,6 +12612,9 @@ Результат.Добавить(Перечисления.ТипыРегламентовЭДО.ЭЗЗ); Результат.Добавить(Перечисления.ТипыРегламентовЭДО.ЭПЛ); Результат.Добавить(Перечисления.ТипыРегламентовЭДО.ЭДФ); + Результат.Добавить(Перечисления.ТипыРегламентовЭДО.ЭПЭ); + Результат.Добавить(Перечисления.ТипыРегламентовЭДО.ЭЭР); + Результат.Добавить(Перечисления.ТипыРегламентовЭДО.ЭСР); Возврат Результат; @@ -10650,6 +12660,34 @@ МенеджерЗаписи.Записать(); КонецПроцедуры +// Выполняет поиск объекта учета (например, ЭТрН) по имени файла исходящего сообщения ЭДО +// +// Параметры: +// ИмяФайла - Строка - Имя файла сообщения ЭДО отправленного ЭД +// +// Возвращаемое значение: +// ОпределяемыйТип.ОснованияЭлектронныхДокументовЭДО - Найденный документ +Функция ДокументПоИмениФайла(Знач ИмяФайла) + + Сведения = РегистрыСведений.СведенияОФайлахСообщенийЭДО.СведенияОСообщении(ИмяФайла); + + Если Сведения = Неопределено Тогда + Возврат Неопределено; + КонецЕсли; + + ЭлектронныйДокумент = ОбщегоНазначения.ЗначениеРеквизитаОбъекта( + Сведения.ФайлСообщенияЭДО, "ВладелецФайла.ЭлектронныйДокумент"); + ЭлектронныеДокументы = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(ЭлектронныйДокумент); + ОбъектыУчета = ИнтеграцияЭДО.АктуальныеОбъектыУчетаСДаннымиПроведения(ЭлектронныеДокументы); + + Если ОбъектыУчета.Количество() = 1 Тогда + Возврат ОбъектыУчета[0].ОбъектУчета; + Иначе + Возврат Неопределено; + КонецЕсли; + +КонецФункции + Функция НайтиСоздатьЭПД(ДеревоДляСовместимостиСБЭД, ДеревоРазбора, ПараметрыОбработки, НайденныйОбъект) УстановитьПривилегированныйРежим(Истина); @@ -10674,7 +12712,14 @@ МенеджерОбъекта = Документы.ЭлектронныйПутевойЛист; ИначеЕсли КлючеваяИнформацияПоТитулу.ТипДокумента = Перечисления.ТипыДокументовЭДО.ЭДФ Тогда МенеджерОбъекта = Документы.ЭлектронныйДоговорФрахтования; + ИначеЕсли КлючеваяИнформацияПоТитулу.ТипДокумента = Перечисления.ТипыДокументовЭДО.ЭПЭ Тогда + МенеджерОбъекта = Документы.ЭлектронноеПоручениеЭкспедитору; + ИначеЕсли КлючеваяИнформацияПоТитулу.ТипДокумента = Перечисления.ТипыДокументовЭДО.ЭЭР Тогда + МенеджерОбъекта = Документы.ЭлектроннаяЭкспедиторскаяРасписка; + ИначеЕсли КлючеваяИнформацияПоТитулу.ТипДокумента = Перечисления.ТипыДокументовЭДО.ЭСР Тогда + МенеджерОбъекта = Документы.ЭлектроннаяCкладскаяРасписка; КонецЕсли; + Если ЗначениеЗаполнено(ЭПД) Тогда ДокументОбъект = ЭПД.ПолучитьОбъект(); @@ -10741,7 +12786,40 @@ Если ПараметрыОбработки.ИдентификаторПолучателя = КлючеваяИнформацияПоТитулу.Одометр Тогда РольУчастника = РольУчастника + 8; КонецЕсли; + ИначеЕсли КлючеваяИнформацияПоТитулу.ТипДокумента = Перечисления.ТипыДокументовЭДО.ЭПЭ Тогда + ИдентификаторГрузоотправителя = КлючеваяИнформацияПоТитулу.Грузоотправитель; + ИдентификаторГрузоперевозчика = КлючеваяИнформацияПоТитулу.Грузоперевозчик; + Если ИдентификаторГрузоперевозчика = ПараметрыОбработки.ИдентификаторПолучателя Тогда + РольУчастника = 1; + ИначеЕсли ИдентификаторГрузоотправителя = ПараметрыОбработки.ИдентификаторПолучателя Тогда + РольУчастника = 3; + Иначе + // Иной получатель + РольУчастника = 9; + КонецЕсли; + Запрос.УстановитьПараметр("РольУчастника", РольУчастника); + ДопОтбор = ДопОтбор + " + | И Док.РольУчастника = &РольУчастника"; + + ИначеЕсли КлючеваяИнформацияПоТитулу.ТипДокумента = Перечисления.ТипыДокументовЭДО.ЭЭР + Или КлючеваяИнформацияПоТитулу.ТипДокумента = Перечисления.ТипыДокументовЭДО.ЭСР Тогда + + ИдентификаторГрузоотправителя = КлючеваяИнформацияПоТитулу.Грузоотправитель; + ИдентификаторГрузоперевозчика = КлючеваяИнформацияПоТитулу.Грузоперевозчик; + Если ИдентификаторГрузоперевозчика = ПараметрыОбработки.ИдентификаторПолучателя Тогда + РольУчастника = 1; + ИначеЕсли ИдентификаторГрузоотправителя = ПараметрыОбработки.ИдентификаторПолучателя Тогда + РольУчастника = 3; + Иначе + // Иной получатель + РольУчастника = 9; + КонецЕсли; + Запрос.УстановитьПараметр("РольУчастника", РольУчастника); + ДопОтбор = ДопОтбор + " + | И Док.РольУчастника = &РольУчастника"; + КонецЕсли; + Запрос.Текст = "ВЫБРАТЬ Док.Ссылка ИЗ Документ." + ИмяДокумента + " КАК Док |ГДЕ | Док.Организация = &Организация @@ -10752,6 +12830,8 @@ СсылкаПоИдФайла = Неопределено; Если Выборка.Следующий() Тогда СсылкаПоИдФайла = Выборка.Ссылка; + Иначе + СсылкаПоИдФайла = ДокументПоИмениФайла(КлючеваяИнформацияПоТитулу.ЗначениеИДПоиска); КонецЕсли; Если ЗначениеЗаполнено(СсылкаПоИдФайла) Тогда ДокументОбъект = СсылкаПоИдФайла.ПолучитьОбъект(); @@ -10819,6 +12899,15 @@ Если РольУчастника > ДокументОбъект.РольУчастника Тогда ДокументОбъект.РольУчастника = РольУчастника; КонецЕсли; + ИначеЕсли КлючеваяИнформацияПоТитулу.ТипДокумента = Перечисления.ТипыДокументовЭДО.ЭПЭ Тогда + ДокументОбъект.ИдентификаторЗаказчика = ИдентификаторГрузоотправителя; + ДокументОбъект.ИдентификаторЭкспедитора = ИдентификаторГрузоперевозчика; + ДокументОбъект.РольУчастника = РольУчастника; + ИначеЕсли КлючеваяИнформацияПоТитулу.ТипДокумента = Перечисления.ТипыДокументовЭДО.ЭЭР + Или КлючеваяИнформацияПоТитулу.ТипДокумента = Перечисления.ТипыДокументовЭДО.ЭСР Тогда + ДокументОбъект.ИдентификаторЭкспедитора = ИдентификаторГрузоотправителя; + ДокументОбъект.ИдентификаторЗаказчика = ИдентификаторГрузоперевозчика; + ДокументОбъект.РольУчастника = РольУчастника; Иначе ДокументОбъект.ИдентификаторГрузоотправителя = ИдентификаторГрузоотправителя; ДокументОбъект.ИдентификаторПеревозчика = ИдентификаторГрузоперевозчика; @@ -11049,7 +13138,107 @@ ДокументОбъект.СсылкаТитулГрузоотправителяПеревозчик); ДокументОбъект.ДополнительныеСвойства.СтруктураРеквизитов.Свойство( "ТитулГрузоотправителяФункция", - ДокументОбъект.ТитулГрузоотправителяФункция); + ДокументОбъект.ТитулГрузоотправителяФункция); + + ИначеЕсли КлючеваяИнформацияПоТитулу.Титул = Перечисления.ТипыЭлементовРегламентаЭДО.ЭПЭ_Титул1 Тогда + ДокументОбъект.ТитулЗаказчикаНомер = КлючеваяИнформацияПоТитулу.Номер; + ДокументОбъект.ТитулЗаказчикаДата = КлючеваяИнформацияПоТитулу.Дата; + + Если ДокументОбъект.РольУчастника = 9 Тогда + ДокументОбъект.Организация = ПараметрыОбработки.Получатель; + // Попробуем определить ссылки на участников перевозки, если мы являемся иным получателем + // Заказчик + КонтрагентТретьегоУчастника = Неопределено; + НастройкиОбменаСТретьимУчастником = ОтражениеВУчетеЭДО.ПолучитьНастройкиПолученияПоИдентификаторам( + ИдентификаторГрузоотправителя, + ПараметрыОбработки.ИдентификаторПолучателя, + ОрганизацияПолучателяПоНастройкам, + КонтрагентТретьегоУчастника, Истина); + Если НастройкиОбменаСТретьимУчастником <> Неопределено Тогда + Если КлючеваяИнформацияПоТитулу.ПоДоверенности = Истина Тогда + ДокументОбъект.СсылкаТитулЗаказчикаСоставитель = НастройкиОбменаСТретьимУчастником.Контрагент; + Иначе + ДокументОбъект.СсылкаТитулЗаказчикаЗаказчик = НастройкиОбменаСТретьимУчастником.Контрагент; + КонецЕсли; + КонецЕсли; + // Экспедитор + КонтрагентТретьегоУчастника = Неопределено; + НастройкиОбменаСТретьимУчастником = ОтражениеВУчетеЭДО.ПолучитьНастройкиПолученияПоИдентификаторам( + ИдентификаторГрузоперевозчика, + ПараметрыОбработки.ИдентификаторПолучателя, + ОрганизацияПолучателяПоНастройкам, + КонтрагентТретьегоУчастника, Истина); + Если НастройкиОбменаСТретьимУчастником <> Неопределено Тогда + ДокументОбъект.СсылкаТитулЗаказчикаЭкспедитор = НастройкиОбменаСТретьимУчастником.Контрагент; + КонецЕсли; + Иначе + ДокументОбъект.СсылкаТитулЗаказчикаЗаказчик = ПараметрыОбработки.Отправитель; + ДокументОбъект.СсылкаТитулЗаказчикаЭкспедитор = ПараметрыОбработки.Получатель; + КонецЕсли; + + Если ЗначениеЗаполнено(ДокументОбъект.СсылкаТитулЗаказчикаСоставитель) Тогда + ДокументОбъект.ДополнительныеСвойства.СтруктураРеквизитов.Вставить( + "СсылкаТитулЗаказчикаСоставитель", + ДокументОбъект.СсылкаТитулЗаказчикаСоставитель); + КонецЕсли; + + ДокументОбъект.ДополнительныеСвойства.СтруктураРеквизитов.Вставить( + "СсылкаТитулЗаказчикаЗаказчик", + ДокументОбъект.СсылкаТитулЗаказчикаЗаказчик); + ДокументОбъект.ДополнительныеСвойства.СтруктураРеквизитов.Вставить( + "СсылкаТитулЗаказчикаЭкспедитор", + ДокументОбъект.СсылкаТитулЗаказчикаЭкспедитор); + + ИначеЕсли КлючеваяИнформацияПоТитулу.Титул = Перечисления.ТипыЭлементовРегламентаЭДО.ЭЭР_Титул1 + Или КлючеваяИнформацияПоТитулу.Титул = Перечисления.ТипыЭлементовРегламентаЭДО.ЭСР_Титул1 Тогда + + ДокументОбъект.ТитулЭкспедитораНомер = КлючеваяИнформацияПоТитулу.Номер; + ДокументОбъект.ТитулЭкспедитораДата = КлючеваяИнформацияПоТитулу.Дата; + + Если ДокументОбъект.РольУчастника = 9 Тогда + ДокументОбъект.Организация = ПараметрыОбработки.Получатель; + // Попробуем определить ссылки на участников перевозки, если мы являемся иным получателем + // Заказчик + КонтрагентТретьегоУчастника = Неопределено; + НастройкиОбменаСТретьимУчастником = ОтражениеВУчетеЭДО.ПолучитьНастройкиПолученияПоИдентификаторам( + ИдентификаторГрузоотправителя, + ПараметрыОбработки.ИдентификаторПолучателя, + ОрганизацияПолучателяПоНастройкам, + КонтрагентТретьегоУчастника, Истина); + Если НастройкиОбменаСТретьимУчастником <> Неопределено Тогда + Если КлючеваяИнформацияПоТитулу.ПоДоверенности = Истина Тогда + ДокументОбъект.СсылкаТитулЭкспедитораСоставитель = НастройкиОбменаСТретьимУчастником.Контрагент; + Иначе + ДокументОбъект.СсылкаТитулЭкспедитораЭкспедитор = НастройкиОбменаСТретьимУчастником.Контрагент; + КонецЕсли; + КонецЕсли; + + КонтрагентТретьегоУчастника = Неопределено; + НастройкиОбменаСТретьимУчастником = ОтражениеВУчетеЭДО.ПолучитьНастройкиПолученияПоИдентификаторам( + ИдентификаторГрузоперевозчика, + ПараметрыОбработки.ИдентификаторПолучателя, + ОрганизацияПолучателяПоНастройкам, + КонтрагентТретьегоУчастника, Истина); + Если НастройкиОбменаСТретьимУчастником <> Неопределено Тогда + ДокументОбъект.СсылкаТитулЭкспедитораЗаказчик = НастройкиОбменаСТретьимУчастником.Контрагент; + КонецЕсли; + Иначе + ДокументОбъект.СсылкаТитулЭкспедитораЭкспедитор = ПараметрыОбработки.Отправитель; + ДокументОбъект.СсылкаТитулЭкспедитораЗаказчик = ПараметрыОбработки.Получатель; + КонецЕсли; + + Если ЗначениеЗаполнено(ДокументОбъект.СсылкаТитулЭкспедитораСоставитель) Тогда + ДокументОбъект.ДополнительныеСвойства.СтруктураРеквизитов.Вставить( + "СсылкаТитулЭкспедитораСоставитель", + ДокументОбъект.СсылкаТитулЭкспедитораСоставитель); + КонецЕсли; + + ДокументОбъект.ДополнительныеСвойства.СтруктураРеквизитов.Вставить( + "СсылкаТитулЭкспедитораЭкспедитор", + ДокументОбъект.СсылкаТитулЭкспедитораЭкспедитор); + ДокументОбъект.ДополнительныеСвойства.СтруктураРеквизитов.Вставить( + "СсылкаТитулЭкспедитораЗаказчик", + ДокументОбъект.СсылкаТитулЭкспедитораЗаказчик); ИначеЕсли КлючеваяИнформацияПоТитулу.Титул = Перечисления.ТипыЭлементовРегламентаЭДО.ЭПЛ_Титул1 Тогда ДокументОбъект.ТитулОформлениеНомерПутевогоЛиста = КлючеваяИнформацияПоТитулу.Номер; @@ -11300,6 +13489,12 @@ ОбменСГИСЭПДКлиентСервер.УстановитьТекущийДоступныйТитулЭПЛ(ДокументОбъект, Неопределено, ТитулыПоДокументу); ИначеЕсли КлючеваяИнформацияПоТитулу.ТипДокумента = Перечисления.ТипыДокументовЭДО.ЭДФ Тогда ОбменСГИСЭПДКлиентСервер.УстановитьТекущийДоступныйТитулЭДФ(ДокументОбъект, ТитулыПоДокументу); + ИначеЕсли КлючеваяИнформацияПоТитулу.ТипДокумента = Перечисления.ТипыДокументовЭДО.ЭПЭ Тогда + ОбменСГИСЭПДКлиентСервер.УстановитьТекущийДоступныйТитулЭПЭ(ДокументОбъект, ТитулыПоДокументу); + ИначеЕсли КлючеваяИнформацияПоТитулу.ТипДокумента = Перечисления.ТипыДокументовЭДО.ЭЭР Тогда + ОбменСГИСЭПДКлиентСервер.УстановитьТекущийДоступныйТитулЭЭР(ДокументОбъект, ТитулыПоДокументу); + ИначеЕсли КлючеваяИнформацияПоТитулу.ТипДокумента = Перечисления.ТипыДокументовЭДО.ЭСР Тогда + ОбменСГИСЭПДКлиентСервер.УстановитьТекущийДоступныйТитулЭСР(ДокументОбъект, ТитулыПоДокументу); КонецЕсли; ДокументОбъект.ДополнительныеСвойства.Вставить("НомерВерсии", НомерВерсии); @@ -11459,7 +13654,13 @@ Возврат; КонецЕсли; - Если ТипЗнч(ДокументОбъект) = Тип("ДокументОбъект.ЭлектроннаяТранспортнаяНакладная") Тогда + ТипДокумента = Неопределено; + Если ТипЗнч(ДокументОбъект) = Тип("Структура") И ДокументОбъект.Свойство("ТипДокумента") Тогда + ТипДокумента = ДокументОбъект.ТипДокумента; + КонецЕсли; + + Если ТипЗнч(ДокументОбъект) = Тип("ДокументОбъект.ЭлектроннаяТранспортнаяНакладная") + Или ТипДокумента = Перечисления.ТипыДокументовЭДО.ЭТрН Тогда Если ДокументОбъект.ТекущийПолученныйТитул = Перечисления.ТипыЭлементовРегламентаЭДО.ЭТрН_Титул1 Тогда @@ -11787,7 +13988,8 @@ КонецЕсли; КонецЕсли; - ИначеЕсли ТипЗнч(ДокументОбъект) = Тип("ДокументОбъект.ЭлектронныйЗаказЗаявка") Тогда + ИначеЕсли ТипЗнч(ДокументОбъект) = Тип("ДокументОбъект.ЭлектронныйЗаказЗаявка") + Или ТипДокумента = Документы.ЭлектронныйЗаказЗаявка Тогда Если ЗначениеЗаполнено(ДокументОбъект.СсылкаТитулГрузоотправителяГрузоотправитель) = Ложь Тогда ЗаполнитьПредставлениеСсылкиУчастника(СтруктураРеквизитов, "ТитулГрузоотправителяГрузоотправитель"); @@ -11869,7 +14071,382 @@ КлючСтруктуры = "ТитулФрахтователяОписаниеГруза__" + ИтераторЦикла + "__НадлежащееОтгрузочноеНаименование"; КонецЦикла; - КонецЕсли; + ИначеЕсли ТипЗнч(ДокументОбъект) = Тип("ДокументОбъект.ЭлектронноеПоручениеЭкспедитору") Тогда + + Если ДокументОбъект.ТекущийПолученныйТитул = Перечисления.ТипыЭлементовРегламентаЭДО.ЭПЭ_Титул1 Тогда + + Если ЗначениеЗаполнено(ДокументОбъект.СсылкаТитулЗаказчикаЗаказчик) = Ложь Тогда + ЗаполнитьПредставлениеСсылкиУчастника(СтруктураРеквизитов, "ТитулЗаказчикаЗаказчик"); + КонецЕсли; + Если ЗначениеЗаполнено(ДокументОбъект.СсылкаТитулЗаказчикаСоставитель) = Ложь Тогда + ЗаполнитьПредставлениеСсылкиУчастника(СтруктураРеквизитов, "ТитулЗаказчикаСоставитель"); + КонецЕсли; + + Если ЗначениеЗаполнено(ДокументОбъект.СсылкаТитулЗаказчикаЭкспедитор) = Ложь Тогда + ЗаполнитьПредставлениеСсылкиУчастника(СтруктураРеквизитов, "ТитулЗаказчикаЭкспедитор"); + КонецЕсли; + + ПостфиксыДляЗаполнения = Новый Массив; + ПостфиксыДляЗаполнения.Добавить("Грузоотправитель"); + ПостфиксыДляЗаполнения.Добавить("Грузополучатель"); + ПостфиксыДляЗаполнения.Добавить("Грузополучатель"); + ПостфиксыДляЗаполнения.Добавить("СвСтрахРекИдентСтрах"); + + Для каждого ПостфиксЗаполнения Из ПостфиксыДляЗаполнения Цикл + + ИтераторЦикла = 1; + КлючСтруктуры = "ТитулЗаказчикаГрузы__" + ИтераторЦикла + "__" + ПостфиксЗаполнения; + Пока ЗаполнитьПредставлениеСсылкиУчастника(СтруктураРеквизитов, КлючСтруктуры) Цикл + ИтераторЦикла = ИтераторЦикла + 1; + КлючСтруктуры = "ТитулЗаказчикаГрузы__" + ИтераторЦикла + "__" + ПостфиксЗаполнения; + КонецЦикла; + + КонецЦикла; + + ИтераторЦикла = 1; + КлючСтруктуры = "ТитулЗаказчикаГрузыСвУведСторон__" + ИтераторЦикла + "__Сторона"; + Сторона = Неопределено; + Пока СтруктураРеквизитов.Свойство(КлючСтруктуры, Сторона) Цикл + Если Сторона = "3" Тогда + ЗаполнитьПредставлениеСсылкиУчастника(СтруктураРеквизитов, "ТитулЗаказчикаГрузыСвУведСторон__" + ИтераторЦикла + "__ИноеУвед"); + КонецЕсли; + ИтераторЦикла = ИтераторЦикла + 1; + КлючСтруктуры = "ТитулЗаказчикаГрузыСвУведСторон__" + ИтераторЦикла + "__Сторона"; + КонецЦикла; + + ИтераторЦикла = 1; + КлючСтруктуры = "ТитулЗаказчикаОписаниеГруза__" + ИтераторЦикла + "__ДейстСтГрузКодВалюты"; + КодВалютыСтоимости = Неопределено; + Пока СтруктураРеквизитов.Свойство(КлючСтруктуры, КодВалютыСтоимости) Цикл + Если ЗначениеЗаполнено(КодВалютыСтоимости) Тогда + ВалютаНайдено = Справочники.Валюты.НайтиПоКоду(КодВалютыСтоимости); + КлючЗначенияСсылки = "ТитулЗаказчикаОписаниеГруза__" + ИтераторЦикла + "__СсылкаДейстСтГрузВалюта"; + Если ЗначениеЗаполнено(ВалютаНайдено) Тогда + СтруктураРеквизитов.Вставить(КлючЗначенияСсылки, ВалютаНайдено); + Иначе + НаименованиеВалютыСтоимости = Неопределено; + СтруктураРеквизитов.Свойство("ТитулЗаказчикаОписаниеГруза__" + ИтераторЦикла + "__ДейстСтГрузНаименованиеВалюты", НаименованиеВалютыСтоимости); + Если ЗначениеЗаполнено(НаименованиеВалютыСтоимости) Тогда + СтруктураРеквизитов.Вставить(КлючЗначенияСсылки, НайтиСоздатьСтроковойЗначениеЭПД(НаименованиеВалютыСтоимости)); + КонецЕсли; + КонецЕсли; + КонецЕсли; + ИтераторЦикла = ИтераторЦикла + 1; + КлючСтруктуры = "ТитулЗаказчикаОписаниеГруза__" + ИтераторЦикла + "__ДейстСтГрузКодВалюты"; + КонецЦикла; + + ИтераторЦикла = 1; + КлючСтруктуры = "ТитулЗаказчикаОписаниеГрузаСвСтрПроисх__" + ИтераторЦикла + "__КодСтраны"; + КодСтраны = Неопределено; + Пока СтруктураРеквизитов.Свойство(КлючСтруктуры, КодСтраны) Цикл + Если ЗначениеЗаполнено(КодСтраны) Тогда + СтранаНайдено = Справочники.СтраныМира.НайтиПоКоду(КодСтраны); + КлючЗначенияСсылки = "ТитулЗаказчикаОписаниеГрузаСвСтрПроисх__" + ИтераторЦикла + "__СсылкаСтрана"; + Если ЗначениеЗаполнено(ВалютаНайдено) Тогда + СтруктураРеквизитов.Вставить(КлючЗначенияСсылки, СтранаНайдено); + Иначе + НаименованиеСтраны = Неопределено; + СтруктураРеквизитов.Свойство("ТитулЗаказчикаОписаниеГрузаСвСтрПроисх__" + ИтераторЦикла + "__НаименованиеСтраны", НаименованиеСтраны); + Если ЗначениеЗаполнено(НаименованиеСтраны) Тогда + СтруктураРеквизитов.Вставить(КлючЗначенияСсылки, НайтиСоздатьСтроковойЗначениеЭПД(НаименованиеСтраны)); + КонецЕсли; + КонецЕсли; + КонецЕсли; + ИтераторЦикла = ИтераторЦикла + 1; + КлючСтруктуры = "ТитулЗаказчикаОписаниеГрузаСвСтрПроисх__" + ИтераторЦикла + "__КодСтраны"; + КонецЦикла; + + ИтераторЦикла = 1; + КлючСтруктуры = "ТитулЗаказчикаОписаниеГруза__" + ИтераторЦикла + "__ОбъявлСтГрузКодВалюты"; + КодВалютыСтоимости = Неопределено; + Пока СтруктураРеквизитов.Свойство(КлючСтруктуры, КодВалютыСтоимости) Цикл + Если ЗначениеЗаполнено(КодВалютыСтоимости) Тогда + ВалютаНайдено = Справочники.Валюты.НайтиПоКоду(КодВалютыСтоимости); + КлючЗначенияСсылки = "ТитулЗаказчикаОписаниеГруза__" + ИтераторЦикла + "__СсылкаОбъявлСтГрузВалюта"; + Если ЗначениеЗаполнено(ВалютаНайдено) Тогда + СтруктураРеквизитов.Вставить(КлючЗначенияСсылки, ВалютаНайдено); + Иначе + НаименованиеВалютыСтоимости = Неопределено; + СтруктураРеквизитов.Свойство("ТитулЗаказчикаОписаниеГруза__" + ИтераторЦикла + "__ОбъявлСтГрузНаименованиеВалюты", НаименованиеВалютыСтоимости); + Если ЗначениеЗаполнено(НаименованиеВалютыСтоимости) Тогда + СтруктураРеквизитов.Вставить(КлючЗначенияСсылки, НайтиСоздатьСтроковойЗначениеЭПД(НаименованиеВалютыСтоимости)); + КонецЕсли; + КонецЕсли; + КонецЕсли; + ИтераторЦикла = ИтераторЦикла + 1; + КлючСтруктуры = "ТитулЗаказчикаОписаниеГруза__" + ИтераторЦикла + "__ОбъявлСтГрузКодВалюты"; + КонецЦикла; + + ИтераторЦикла = 1; + КлючСтруктуры = "ТитулЗаказчикаОписаниеГрузаСвОпаснГруз__" + ИтераторЦикла + "__НадлежащееОтгрузочноеНаименование"; + НадлежащееОтгрузочноеНаименование = Неопределено; + Пока СтруктураРеквизитов.Свойство(КлючСтруктуры, НадлежащееОтгрузочноеНаименование) Цикл + Если ЗначениеЗаполнено(НадлежащееОтгрузочноеНаименование) Тогда + Если СтрДлина(НадлежащееОтгрузочноеНаименование) <= 150 Тогда + КраткоеНаименованиеДОПОГ = НадлежащееОтгрузочноеНаименование; + Иначе + КраткоеНаименованиеДОПОГ = Лев(НадлежащееОтгрузочноеНаименование, 147) + "..."; + КонецЕсли; + КлассификаторДОПОГНайдено = Справочники.КлассификаторДОПОГЭПД.НайтиПоНаименованию(КраткоеНаименованиеДОПОГ); + КлючЗначенияСсылки = "ТитулЗаказчикаОписаниеГрузаСвОпаснГруз__" + ИтераторЦикла + "__СсылкаДОПОГ"; + Если ЗначениеЗаполнено(КлассификаторДОПОГНайдено) Тогда + СтруктураРеквизитов.Вставить(КлючЗначенияСсылки, КлассификаторДОПОГНайдено); + Иначе + СтруктураРеквизитов.Вставить(КлючЗначенияСсылки, НайтиСоздатьСтроковойЗначениеЭПД(КраткоеНаименованиеДОПОГ)); + КонецЕсли; + КонецЕсли; + ИтераторЦикла = ИтераторЦикла + 1; + КлючСтруктуры = "ТитулЗаказчикаОписаниеГрузаСвОпаснГруз__" + ИтераторЦикла + "__НадлежащееОтгрузочноеНаименование"; + КонецЦикла; + + ИначеЕсли ДокументОбъект.ТекущийПолученныйТитул = Перечисления.ТипыЭлементовРегламентаЭДО.ЭПЭ_Титул2 Тогда + + ИтераторЦикла = 1; + КлючСтруктуры = "ТитулЭкспедитораДопИнфЭксп__" + ИтераторЦикла + "__СвПредстЭксп"; + Пока ЗаполнитьПредставлениеСсылкиУчастника(СтруктураРеквизитов, КлючСтруктуры) Цикл + ИтераторЦикла = ИтераторЦикла + 1; + КлючСтруктуры = "ТитулЭкспедитораДопИнфЭксп__" + ИтераторЦикла + "__СвПредстЭксп"; + КонецЦикла; + + ИтераторЦикла = 1; + КлючСтруктуры = "ТитулЭкспедитораДопИнфЭксп__" + ИтераторЦикла + "__СвОплатаКодВалюты"; + КодВалютыСтоимости = Неопределено; + Пока СтруктураРеквизитов.Свойство(КлючСтруктуры, КодВалютыСтоимости) Цикл + Если ЗначениеЗаполнено(КодВалютыСтоимости) Тогда + ВалютаНайдено = Справочники.Валюты.НайтиПоКоду(КодВалютыСтоимости); + КлючЗначенияСсылки = "ТитулЭкспедитораДопИнфЭксп__" + ИтераторЦикла + "__СсылкаСвОплатаВалюта"; + Если ЗначениеЗаполнено(ВалютаНайдено) Тогда + СтруктураРеквизитов.Вставить(КлючЗначенияСсылки, ВалютаНайдено); + Иначе + НаименованиеВалютыСтоимости = Неопределено; + СтруктураРеквизитов.Свойство("ТитулЭкспедитораДопИнфЭксп__" + ИтераторЦикла + "__СвОплатаНаименованиеВалюты", НаименованиеВалютыСтоимости); + Если ЗначениеЗаполнено(НаименованиеВалютыСтоимости) Тогда + СтруктураРеквизитов.Вставить(КлючЗначенияСсылки, НайтиСоздатьСтроковойЗначениеЭПД(НаименованиеВалютыСтоимости)); + КонецЕсли; + КонецЕсли; + КонецЕсли; + ИтераторЦикла = ИтераторЦикла + 1; + КлючСтруктуры = "ТитулЭкспедитораДопИнфЭксп__" + ИтераторЦикла + "__СвОплатаКодВалюты"; + КонецЦикла; + + ИначеЕсли ДокументОбъект.ТекущийПолученныйТитул = Перечисления.ТипыЭлементовРегламентаЭДО.ЭПЭ_Титул3 Тогда + + ЗаполнитьПредставлениеСсылкиУчастника(СтруктураРеквизитов, "ТитулЗаказчикаОтзывСвВозврГрузКонтЛицо"); + + КонецЕсли; + + ИначеЕсли ТипЗнч(ДокументОбъект) = Тип("ДокументОбъект.ЭлектроннаяЭкспедиторскаяРасписка") Тогда + + Если ЗначениеЗаполнено(ДокументОбъект.СсылкаТитулЭкспедитораЭкспедитор) = Ложь Тогда + ЗаполнитьПредставлениеСсылкиУчастника(СтруктураРеквизитов, "ТитулЭкспедитораЭкспедитор"); + КонецЕсли; + Если ЗначениеЗаполнено(ДокументОбъект.СсылкаТитулЭкспедитораСоставитель) = Ложь Тогда + ЗаполнитьПредставлениеСсылкиУчастника(СтруктураРеквизитов, "ТитулЭкспедитораСоставитель"); + КонецЕсли; + + Если ЗначениеЗаполнено(ДокументОбъект.СсылкаТитулЭкспедитораЗаказчик) = Ложь Тогда + ЗаполнитьПредставлениеСсылкиУчастника(СтруктураРеквизитов, "ТитулЭкспедитораЗаказчик"); + КонецЕсли; + + ЗаполнитьПредставлениеСсылкиУчастника(СтруктураРеквизитов, "ТитулЭкспедитораВладИнфр"); + ЗаполнитьПредставлениеСсылкиУчастника(СтруктураРеквизитов, "ТитулЭкспедитораСвЛицПриемГр"); + + ЗаполнитьПредставлениеСсылкиУчастника(СтруктураРеквизитов, "ТитулЭкспедитораГрузоотправитель"); + + ИтераторЦикла = 1; + КлючСтруктуры = "ТитулЭкспедитораОписаниеГрузаСвСтрПроисх__" + ИтераторЦикла + "__КодСтраны"; + КодСтраны = Неопределено; + Пока СтруктураРеквизитов.Свойство(КлючСтруктуры, КодСтраны) Цикл + Если ЗначениеЗаполнено(КодСтраны) Тогда + СтранаНайдено = Справочники.СтраныМира.НайтиПоКоду(КодСтраны); + КлючЗначенияСсылки = "ТитулЭкспедитораОписаниеГрузаСвСтрПроисх__" + ИтераторЦикла + "__СсылкаСтрана"; + Если ЗначениеЗаполнено(ВалютаНайдено) Тогда + СтруктураРеквизитов.Вставить(КлючЗначенияСсылки, СтранаНайдено); + Иначе + НаименованиеСтраны = Неопределено; + СтруктураРеквизитов.Свойство("ТитулЭкспедитораОписаниеГрузаСвСтрПроисх__" + ИтераторЦикла + "__НаименованиеСтраны", НаименованиеСтраны); + Если ЗначениеЗаполнено(НаименованиеСтраны) Тогда + СтруктураРеквизитов.Вставить(КлючЗначенияСсылки, НайтиСоздатьСтроковойЗначениеЭПД(НаименованиеСтраны)); + КонецЕсли; + КонецЕсли; + КонецЕсли; + ИтераторЦикла = ИтераторЦикла + 1; + КлючСтруктуры = "ТитулЭкспедитораОписаниеГрузаСвСтрПроисх__" + ИтераторЦикла + "__КодСтраны"; + КонецЦикла; + + ИтераторЦикла = 1; + КлючСтруктуры = "ТитулЭкспедитораОписаниеГруза__" + ИтераторЦикла + "__ДейстСтГрузКодВалюты"; + КодВалютыСтоимости = Неопределено; + Пока СтруктураРеквизитов.Свойство(КлючСтруктуры, КодВалютыСтоимости) Цикл + Если ЗначениеЗаполнено(КодВалютыСтоимости) Тогда + ВалютаНайдено = Справочники.Валюты.НайтиПоКоду(КодВалютыСтоимости); + КлючЗначенияСсылки = "ТитулЭкспедитораОписаниеГруза__" + ИтераторЦикла + "__СсылкаДейстСтГрузВалюта"; + Если ЗначениеЗаполнено(ВалютаНайдено) Тогда + СтруктураРеквизитов.Вставить(КлючЗначенияСсылки, ВалютаНайдено); + Иначе + НаименованиеВалютыСтоимости = Неопределено; + СтруктураРеквизитов.Свойство("ТитулЭкспедитораОписаниеГруза__" + ИтераторЦикла + "__ДейстСтГрузНаименованиеВалюты", НаименованиеВалютыСтоимости); + Если ЗначениеЗаполнено(НаименованиеВалютыСтоимости) Тогда + СтруктураРеквизитов.Вставить(КлючЗначенияСсылки, НайтиСоздатьСтроковойЗначениеЭПД(НаименованиеВалютыСтоимости)); + КонецЕсли; + КонецЕсли; + КонецЕсли; + ИтераторЦикла = ИтераторЦикла + 1; + КлючСтруктуры = "ТитулЭкспедитораОписаниеГруза__" + ИтераторЦикла + "__ДейстСтГрузКодВалюты"; + КонецЦикла; + + ИтераторЦикла = 1; + КлючСтруктуры = "ТитулЭкспедитораОписаниеГруза__" + ИтераторЦикла + "__ОбъявлСтГрузКодВалюты"; + КодВалютыСтоимости = Неопределено; + Пока СтруктураРеквизитов.Свойство(КлючСтруктуры, КодВалютыСтоимости) Цикл + Если ЗначениеЗаполнено(КодВалютыСтоимости) Тогда + ВалютаНайдено = Справочники.Валюты.НайтиПоКоду(КодВалютыСтоимости); + КлючЗначенияСсылки = "ТитулЭкспедитораОписаниеГруза__" + ИтераторЦикла + "__СсылкаОбъявлСтГрузВалюта"; + Если ЗначениеЗаполнено(ВалютаНайдено) Тогда + СтруктураРеквизитов.Вставить(КлючЗначенияСсылки, ВалютаНайдено); + Иначе + НаименованиеВалютыСтоимости = Неопределено; + СтруктураРеквизитов.Свойство("ТитулЭкспедитораОписаниеГруза__" + ИтераторЦикла + "__ОбъявлСтГрузНаименованиеВалюты", НаименованиеВалютыСтоимости); + Если ЗначениеЗаполнено(НаименованиеВалютыСтоимости) Тогда + СтруктураРеквизитов.Вставить(КлючЗначенияСсылки, НайтиСоздатьСтроковойЗначениеЭПД(НаименованиеВалютыСтоимости)); + КонецЕсли; + КонецЕсли; + КонецЕсли; + ИтераторЦикла = ИтераторЦикла + 1; + КлючСтруктуры = "ТитулЭкспедитораОписаниеГруза__" + ИтераторЦикла + "__ОбъявлСтГрузКодВалюты"; + КонецЦикла; + + ИтераторЦикла = 1; + КлючСтруктуры = "ТитулЭкспедитораОписаниеГрузаСвОпаснГруз__" + ИтераторЦикла + "__НадлежащееОтгрузочноеНаименование"; + НадлежащееОтгрузочноеНаименование = Неопределено; + Пока СтруктураРеквизитов.Свойство(КлючСтруктуры, НадлежащееОтгрузочноеНаименование) Цикл + Если ЗначениеЗаполнено(НадлежащееОтгрузочноеНаименование) Тогда + Если СтрДлина(НадлежащееОтгрузочноеНаименование) <= 150 Тогда + КраткоеНаименованиеДОПОГ = НадлежащееОтгрузочноеНаименование; + Иначе + КраткоеНаименованиеДОПОГ = Лев(НадлежащееОтгрузочноеНаименование, 147) + "..."; + КонецЕсли; + КлассификаторДОПОГНайдено = Справочники.КлассификаторДОПОГЭПД.НайтиПоНаименованию(КраткоеНаименованиеДОПОГ); + КлючЗначенияСсылки = "ТитулЭкспедитораОписаниеГрузаСвОпаснГруз__" + ИтераторЦикла + "__СсылкаДОПОГ"; + Если ЗначениеЗаполнено(КлассификаторДОПОГНайдено) Тогда + СтруктураРеквизитов.Вставить(КлючЗначенияСсылки, КлассификаторДОПОГНайдено); + Иначе + СтруктураРеквизитов.Вставить(КлючЗначенияСсылки, НайтиСоздатьСтроковойЗначениеЭПД(КраткоеНаименованиеДОПОГ)); + КонецЕсли; + КонецЕсли; + ИтераторЦикла = ИтераторЦикла + 1; + КлючСтруктуры = "ТитулЭкспедитораОписаниеГрузаСвОпаснГруз__" + ИтераторЦикла + "__НадлежащееОтгрузочноеНаименование"; + КонецЦикла; + + ИначеЕсли ТипЗнч(ДокументОбъект) = Тип("ДокументОбъект.ЭлектроннаяCкладскаяРасписка") Тогда + + Если ЗначениеЗаполнено(ДокументОбъект.СсылкаТитулЭкспедитораЭкспедитор) = Ложь Тогда + ЗаполнитьПредставлениеСсылкиУчастника(СтруктураРеквизитов, "ТитулЭкспедитораЭкспедитор"); + КонецЕсли; + Если ЗначениеЗаполнено(ДокументОбъект.СсылкаТитулЭкспедитораСоставитель) = Ложь Тогда + ЗаполнитьПредставлениеСсылкиУчастника(СтруктураРеквизитов, "ТитулЭкспедитораСоставитель"); + КонецЕсли; + + Если ЗначениеЗаполнено(ДокументОбъект.СсылкаТитулЭкспедитораЗаказчик) = Ложь Тогда + ЗаполнитьПредставлениеСсылкиУчастника(СтруктураРеквизитов, "ТитулЭкспедитораЗаказчик"); + КонецЕсли; + + ЗаполнитьПредставлениеСсылкиУчастника(СтруктураРеквизитов, "ТитулЭкспедитораСведСкладСвВладСклад"); + ЗаполнитьПредставлениеСсылкиУчастника(СтруктураРеквизитов, "ТитулЭкспедитораГрузСвСтрахРекИдентСтрах"); + + ИтераторЦикла = 1; + КлючСтруктуры = "ТитулЭкспедитораГрузУслПриемГр__" + ИтераторЦикла + "__СвЛицПриемГрХран"; + Пока ЗаполнитьПредставлениеСсылкиУчастника(СтруктураРеквизитов, КлючСтруктуры) Цикл + ИтераторЦикла = ИтераторЦикла + 1; + КлючСтруктуры = "ТитулЭкспедитораГрузУслПриемГр__" + ИтераторЦикла + "__СвЛицПриемГрХран"; + КонецЦикла; + + ИтераторЦикла = 1; + КлючСтруктуры = "ТитулЭкспедитораОписаниеГрузаСвСтрПроисх__" + ИтераторЦикла + "__КодСтраны"; + КодСтраны = Неопределено; + Пока СтруктураРеквизитов.Свойство(КлючСтруктуры, КодСтраны) Цикл + Если ЗначениеЗаполнено(КодСтраны) Тогда + СтранаНайдено = Справочники.СтраныМира.НайтиПоКоду(КодСтраны); + КлючЗначенияСсылки = "ТитулЭкспедитораОписаниеГрузаСвСтрПроисх__" + ИтераторЦикла + "__СсылкаСтрана"; + Если ЗначениеЗаполнено(ВалютаНайдено) Тогда + СтруктураРеквизитов.Вставить(КлючЗначенияСсылки, СтранаНайдено); + Иначе + НаименованиеСтраны = Неопределено; + СтруктураРеквизитов.Свойство("ТитулЭкспедитораОписаниеГрузаСвСтрПроисх__" + ИтераторЦикла + "__НаименованиеСтраны", НаименованиеСтраны); + Если ЗначениеЗаполнено(НаименованиеСтраны) Тогда + СтруктураРеквизитов.Вставить(КлючЗначенияСсылки, НайтиСоздатьСтроковойЗначениеЭПД(НаименованиеСтраны)); + КонецЕсли; + КонецЕсли; + КонецЕсли; + ИтераторЦикла = ИтераторЦикла + 1; + КлючСтруктуры = "ТитулЭкспедитораОписаниеГрузаСвСтрПроисх__" + ИтераторЦикла + "__КодСтраны"; + КонецЦикла; + + ИтераторЦикла = 1; + КлючСтруктуры = "ТитулЭкспедитораОписаниеГруза__" + ИтераторЦикла + "__ДейстСтГрузКодВалюты"; + КодВалютыСтоимости = Неопределено; + Пока СтруктураРеквизитов.Свойство(КлючСтруктуры, КодВалютыСтоимости) Цикл + Если ЗначениеЗаполнено(КодВалютыСтоимости) Тогда + ВалютаНайдено = Справочники.Валюты.НайтиПоКоду(КодВалютыСтоимости); + КлючЗначенияСсылки = "ТитулЭкспедитораОписаниеГруза__" + ИтераторЦикла + "__СсылкаДейстСтГрузВалюта"; + Если ЗначениеЗаполнено(ВалютаНайдено) Тогда + СтруктураРеквизитов.Вставить(КлючЗначенияСсылки, ВалютаНайдено); + Иначе + НаименованиеВалютыСтоимости = Неопределено; + СтруктураРеквизитов.Свойство("ТитулЭкспедитораОписаниеГруза__" + ИтераторЦикла + "__ДейстСтГрузНаименованиеВалюты", НаименованиеВалютыСтоимости); + Если ЗначениеЗаполнено(НаименованиеВалютыСтоимости) Тогда + СтруктураРеквизитов.Вставить(КлючЗначенияСсылки, НайтиСоздатьСтроковойЗначениеЭПД(НаименованиеВалютыСтоимости)); + КонецЕсли; + КонецЕсли; + КонецЕсли; + ИтераторЦикла = ИтераторЦикла + 1; + КлючСтруктуры = "ТитулЭкспедитораОписаниеГруза__" + ИтераторЦикла + "__ДейстСтГрузКодВалюты"; + КонецЦикла; + + ИтераторЦикла = 1; + КлючСтруктуры = "ТитулЭкспедитораОписаниеГруза__" + ИтераторЦикла + "__ОбъявлСтГрузКодВалюты"; + КодВалютыСтоимости = Неопределено; + Пока СтруктураРеквизитов.Свойство(КлючСтруктуры, КодВалютыСтоимости) Цикл + Если ЗначениеЗаполнено(КодВалютыСтоимости) Тогда + ВалютаНайдено = Справочники.Валюты.НайтиПоКоду(КодВалютыСтоимости); + КлючЗначенияСсылки = "ТитулЭкспедитораОписаниеГруза__" + ИтераторЦикла + "__СсылкаОбъявлСтГрузВалюта"; + Если ЗначениеЗаполнено(ВалютаНайдено) Тогда + СтруктураРеквизитов.Вставить(КлючЗначенияСсылки, ВалютаНайдено); + Иначе + НаименованиеВалютыСтоимости = Неопределено; + СтруктураРеквизитов.Свойство("ТитулЭкспедитораОписаниеГруза__" + ИтераторЦикла + "__ОбъявлСтГрузНаименованиеВалюты", НаименованиеВалютыСтоимости); + Если ЗначениеЗаполнено(НаименованиеВалютыСтоимости) Тогда + СтруктураРеквизитов.Вставить(КлючЗначенияСсылки, НайтиСоздатьСтроковойЗначениеЭПД(НаименованиеВалютыСтоимости)); + КонецЕсли; + КонецЕсли; + КонецЕсли; + ИтераторЦикла = ИтераторЦикла + 1; + КлючСтруктуры = "ТитулЭкспедитораОписаниеГруза__" + ИтераторЦикла + "__ОбъявлСтГрузКодВалюты"; + КонецЦикла; + + ИтераторЦикла = 1; + КлючСтруктуры = "ТитулЭкспедитораОписаниеГрузаСвОпаснГруз__" + ИтераторЦикла + "__НадлежащееОтгрузочноеНаименование"; + НадлежащееОтгрузочноеНаименование = Неопределено; + Пока СтруктураРеквизитов.Свойство(КлючСтруктуры, НадлежащееОтгрузочноеНаименование) Цикл + Если ЗначениеЗаполнено(НадлежащееОтгрузочноеНаименование) Тогда + Если СтрДлина(НадлежащееОтгрузочноеНаименование) <= 150 Тогда + КраткоеНаименованиеДОПОГ = НадлежащееОтгрузочноеНаименование; + Иначе + КраткоеНаименованиеДОПОГ = Лев(НадлежащееОтгрузочноеНаименование, 147) + "..."; + КонецЕсли; + КлассификаторДОПОГНайдено = Справочники.КлассификаторДОПОГЭПД.НайтиПоНаименованию(КраткоеНаименованиеДОПОГ); + КлючЗначенияСсылки = "ТитулЭкспедитораОписаниеГрузаСвОпаснГруз__" + ИтераторЦикла + "__СсылкаДОПОГ"; + Если ЗначениеЗаполнено(КлассификаторДОПОГНайдено) Тогда + СтруктураРеквизитов.Вставить(КлючЗначенияСсылки, КлассификаторДОПОГНайдено); + Иначе + СтруктураРеквизитов.Вставить(КлючЗначенияСсылки, НайтиСоздатьСтроковойЗначениеЭПД(КраткоеНаименованиеДОПОГ)); + КонецЕсли; + КонецЕсли; + ИтераторЦикла = ИтераторЦикла + 1; + КлючСтруктуры = "ТитулЭкспедитораОписаниеГрузаСвОпаснГруз__" + ИтераторЦикла + "__НадлежащееОтгрузочноеНаименование"; + КонецЦикла; + + КонецЕсли; КонецПроцедуры @@ -11940,6 +14517,8 @@ Если ДокументОбъект.ДополнительныеСвойства.СтруктураРеквизитов.Свойство(ИмяРеквизитаСтрокиТЧ, ТекущееЗначение) Тогда ЗначениеРеквизита = ОбменСГИСЭПДКлиентСервер.СложитьЧастиДат(ТекущееЗначение, ЗначениеРеквизита); КонецЕсли; + ИначеЕсли ТипРеквизита = "Время" Тогда + ЗначениеРеквизита = ОбменСГИСЭПДКлиентСервер.ПреобразоватьВДату(ТекущийОбъектXDTO.Объект); ИначеЕсли ТипРеквизита = "Число" Тогда ЗначениеРеквизита = ОбменСГИСЭПДКлиентСервер.ПреобразоватьВЧисло(ТекущийОбъектXDTO.Объект); ИначеЕсли ТипРеквизита = "Булево" Тогда @@ -11963,6 +14542,8 @@ Если ДокументОбъект.ДополнительныеСвойства.СтруктураРеквизитов.Свойство(ИмяРеквизита, ТекущееЗначение) Тогда ЗначениеРеквизита = ОбменСГИСЭПДКлиентСервер.СложитьЧастиДат(ТекущееЗначение, ЗначениеРеквизита); КонецЕсли; + ИначеЕсли ТипРеквизита = "Время" Тогда + ЗначениеРеквизита = ОбменСГИСЭПДКлиентСервер.ПреобразоватьВДату(ТекущийОбъектXDTO.Объект); ИначеЕсли ТипРеквизита = "Число" Тогда ЗначениеРеквизита = ОбменСГИСЭПДКлиентСервер.ПреобразоватьВЧисло(ТекущийОбъектXDTO.Объект); ИначеЕсли ТипРеквизита = "Булево" Тогда @@ -12471,6 +15052,82 @@ ВремяВерсии = ОбменСГИСЭПДКлиентСервер.ПреобразоватьВДату(ОбъектXDTO.Документ.ВрИнфФт); Результат.ДатаВерсии = ОбменСГИСЭПДКлиентСервер.ПреобразоватьВДату(ОбъектXDTO.Документ.ДатИнфФт) + 60*60*Час(ВремяВерсии) + 60*Минута(ВремяВерсии) + Секунда(ВремяВерсии); + // Электронное поручение экспедитору + ИначеЕсли СтрНачинаетсяС(ОбъектXDTO.ИдФайл, "ON_POREXPOTZ") Тогда + Результат.ТипДокумента = Перечисления.ТипыДокументовЭДО.ЭПЭ; + Результат.ПрефиксТитула = "ТитулЗаказчикаОтзыв"; + Результат.Титул = Перечисления.ТипыЭлементовРегламентаЭДО.ЭПЭ_Титул3; + Результат.ПолеПоиска = "УИДМинтранс"; + Результат.ЗначениеИДПоиска = ОбъектXDTO.Документ.СодИнфОтз.УИД_ПорЭксп; + Результат.МинтрансИД = ОбъектXDTO.Документ.СодИнфОтз.УИД_ПорЭксп; + Результат.Номер = ""; + Результат.Дата = '00010101'; + Результат.Грузоотправитель = Адресаты.Грузоотправитель; + Результат.Грузоперевозчик = Адресаты.Грузоперевозчик; + ВремяВерсии = ОбменСГИСЭПДКлиентСервер.ПреобразоватьВДату(ОбъектXDTO.Документ.ВрИнфОтз); + Результат.ДатаВерсии = ОбменСГИСЭПДКлиентСервер.ПреобразоватьВДату(ОбъектXDTO.Документ.ДатИнфОтз) + + 60*60*Час(ВремяВерсии) + 60*Минута(ВремяВерсии) + Секунда(ВремяВерсии); + + ИначеЕсли СтрНачинаетсяС(ОбъектXDTO.ИдФайл, "ON_POREXPEXP") Тогда + Результат.ТипДокумента = Перечисления.ТипыДокументовЭДО.ЭПЭ; + Результат.ПрефиксТитула = "ТитулЭкспедитора"; + Результат.Титул = Перечисления.ТипыЭлементовРегламентаЭДО.ЭПЭ_Титул2; + Результат.ПолеПоиска = "ТитулЗаказчикаИдентификаторФайла"; + Результат.ЗначениеИДПоиска = ОбъектXDTO.Документ.ИдИнфКлнт.ИдФайлИнфКлнт; + Результат.МинтрансИД = ОбъектXDTO.Документ.СодИнфЭксп.УИД_ПорЭксп; + Результат.Номер = ""; + Результат.Дата = '00010101'; + Результат.Грузоотправитель = Адресаты.Грузоотправитель; + Результат.Грузоперевозчик = Адресаты.Грузоперевозчик; + ВремяВерсии = ОбменСГИСЭПДКлиентСервер.ПреобразоватьВДату(ОбъектXDTO.Документ.ВрИнфЭксп); + Результат.ДатаВерсии = ОбменСГИСЭПДКлиентСервер.ПреобразоватьВДату(ОбъектXDTO.Документ.ДатИнфЭксп) + + 60*60*Час(ВремяВерсии) + 60*Минута(ВремяВерсии) + Секунда(ВремяВерсии); + ИначеЕсли СтрНачинаетсяС(ОбъектXDTO.ИдФайл, "ON_POREXPKLT") Тогда + Результат.ТипДокумента = Перечисления.ТипыДокументовЭДО.ЭПЭ; + Результат.ПрефиксТитула = "ТитулЗаказчика"; + Результат.Титул = Перечисления.ТипыЭлементовРегламентаЭДО.ЭПЭ_Титул1; + Результат.ПолеПоиска = "ТитулЗаказчикаИдентификаторФайла"; + Результат.ЗначениеИДПоиска = ОбъектXDTO.ИдФайл; + Результат.МинтрансИД = ЗначениеНеобязательногоСвойства(ОбъектXDTO.Документ.СодИнфКлнт, "УИД_ПорЭксп", , ""); + Результат.Номер = ОбъектXDTO.Документ.СодИнфКлнт.НомДок; + Результат.Дата = ОбменСГИСЭПДКлиентСервер.ПреобразоватьВДату(ОбъектXDTO.Документ.СодИнфКлнт.ДатаДок); + Результат.Грузоотправитель = Адресаты.Грузоотправитель; + Результат.Грузоперевозчик = Адресаты.Грузоперевозчик; + ВремяВерсии = ОбменСГИСЭПДКлиентСервер.ПреобразоватьВДату(ОбъектXDTO.Документ.ВрИнфКлнт); + Результат.ДатаВерсии = ОбменСГИСЭПДКлиентСервер.ПреобразоватьВДату(ОбъектXDTO.Документ.ДатИнфКлнт) + + 60*60*Час(ВремяВерсии) + 60*Минута(ВремяВерсии) + Секунда(ВремяВерсии); + // Экспедиторская расписка + ИначеЕсли СтрНачинаетсяС(ОбъектXDTO.ИдФайл, "ON_EXPRASP") Тогда + Результат.ТипДокумента = Перечисления.ТипыДокументовЭДО.ЭЭР; + Результат.ПрефиксТитула = "ТитулЭкспедитора"; + Результат.Титул = Перечисления.ТипыЭлементовРегламентаЭДО.ЭЭР_Титул1; + Результат.ПолеПоиска = "ТитулЭкспедитораИдентификаторФайла"; + Результат.ЗначениеИДПоиска = ОбъектXDTO.ИдФайл; + Результат.МинтрансИД = ОбъектXDTO.Документ.СодИнфЭксп.УИД_ЭкспР; + Результат.Номер = ОбъектXDTO.Документ.СодИнфЭксп.НомДок; + Результат.Дата = ОбменСГИСЭПДКлиентСервер.ПреобразоватьВДату(ОбъектXDTO.Документ.СодИнфЭксп.ДатаДок); + Результат.Грузоотправитель = Адресаты.Грузоотправитель; + Результат.Грузоперевозчик = Адресаты.Грузоперевозчик; + ВремяВерсии = ОбменСГИСЭПДКлиентСервер.ПреобразоватьВДату(ОбъектXDTO.Документ.ВрИнфЭксп); + Результат.ДатаВерсии = ОбменСГИСЭПДКлиентСервер.ПреобразоватьВДату(ОбъектXDTO.Документ.ДатИнфЭксп) + + 60*60*Час(ВремяВерсии) + 60*Минута(ВремяВерсии) + Секунда(ВремяВерсии); + // Скалдская расписка + ИначеЕсли СтрНачинаетсяС(ОбъектXDTO.ИдФайл, "ON_SKLADRASP") Тогда + Результат.ТипДокумента = Перечисления.ТипыДокументовЭДО.ЭСР; + Результат.ПрефиксТитула = "ТитулЭкспедитора"; + Результат.Титул = Перечисления.ТипыЭлементовРегламентаЭДО.ЭСР_Титул1; + Результат.ПолеПоиска = "ТитулЭкспедитораИдентификаторФайла"; + Результат.ЗначениеИДПоиска = ОбъектXDTO.ИдФайл; + Результат.МинтрансИД = ОбъектXDTO.Документ.СодИнфЭксп.УИД_СкладР; + + Результат.Номер = ОбъектXDTO.Документ.СодИнфЭксп.НомДок; + Результат.Дата = ОбменСГИСЭПДКлиентСервер.ПреобразоватьВДату(ОбъектXDTO.Документ.СодИнфЭксп.ДатаДок); + + Результат.Грузоотправитель = Адресаты.Грузоотправитель; + Результат.Грузоперевозчик = Адресаты.Грузоперевозчик; + ВремяВерсии = ОбменСГИСЭПДКлиентСервер.ПреобразоватьВДату(ОбъектXDTO.Документ.ВрИнфЭксп); + Результат.ДатаВерсии = ОбменСГИСЭПДКлиентСервер.ПреобразоватьВДату(ОбъектXDTO.Документ.ДатИнфЭксп) + + 60*60*Час(ВремяВерсии) + 60*Минута(ВремяВерсии) + Секунда(ВремяВерсии); КонецЕсли; Исключение ЗаписьЖурналаРегистрации(НСтр("ru='ЭПД.Чтение XDTO'", ОбщегоНазначения.КодОсновногоЯзыка()), @@ -12499,7 +15156,10 @@ Или ТипДокумента = Перечисления.ТипыДокументовЭДО.ЭСВ Или ТипДокумента = Перечисления.ТипыДокументовЭДО.ЭЗЗ Или ТипДокумента = Перечисления.ТипыДокументовЭДО.ЭПЛ - Или ТипДокумента = Перечисления.ТипыДокументовЭДО.ЭДФ Тогда + Или ТипДокумента = Перечисления.ТипыДокументовЭДО.ЭДФ + Или ТипДокумента = Перечисления.ТипыДокументовЭДО.ЭПЭ + Или ТипДокумента = Перечисления.ТипыДокументовЭДО.ЭЭР + Или ТипДокумента = Перечисления.ТипыДокументовЭДО.ЭСР Тогда Возврат Истина; КонецЕсли; @@ -12593,6 +15253,30 @@ |Дата"); ДанныеСообщения.Содержание.НомерДокумента = РеквизитыДокумента.Номер; ДанныеСообщения.Содержание.ДатаДокумента = РеквизитыДокумента.Дата; + ИначеЕсли ТипЗнч(ОбъектУчета) = Тип("ДокументСсылка.ЭлектронноеПоручениеЭкспедитору") Тогда + ДанныеСообщения.Содержание.ТипДокумента = Перечисления.ТипыДокументовЭДО.ЭПЭ; + ДанныеСообщения.Содержание.ТипРегламента = Перечисления.ТипыРегламентовЭДО.ЭПЭ; + РеквизитыДокумента = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ОбъектУчета, + "Номер, + |Дата"); + ДанныеСообщения.Содержание.НомерДокумента = РеквизитыДокумента.Номер; + ДанныеСообщения.Содержание.ДатаДокумента = РеквизитыДокумента.Дата; + ИначеЕсли ТипЗнч(ОбъектУчета) = Тип("ДокументСсылка.ЭлектроннаяЭкспедиторскаяРасписка") Тогда + ДанныеСообщения.Содержание.ТипДокумента = Перечисления.ТипыДокументовЭДО.ЭЭР; + ДанныеСообщения.Содержание.ТипРегламента = Перечисления.ТипыРегламентовЭДО.ЭЭР; + РеквизитыДокумента = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ОбъектУчета, + "Номер, + |Дата"); + ДанныеСообщения.Содержание.НомерДокумента = РеквизитыДокумента.Номер; + ДанныеСообщения.Содержание.ДатаДокумента = РеквизитыДокумента.Дата; + ИначеЕсли ТипЗнч(ОбъектУчета) = Тип("ДокументСсылка.ЭлектроннаяCкладскаяРасписка") Тогда + ДанныеСообщения.Содержание.ТипДокумента = Перечисления.ТипыДокументовЭДО.ЭСР; + ДанныеСообщения.Содержание.ТипРегламента = Перечисления.ТипыРегламентовЭДО.ЭСР; + РеквизитыДокумента = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ОбъектУчета, + "Номер, + |Дата"); + ДанныеСообщения.Содержание.НомерДокумента = РеквизитыДокумента.Номер; + ДанныеСообщения.Содержание.ДатаДокумента = РеквизитыДокумента.Дата; КонецЕсли; Возврат ДанныеСообщения; @@ -13003,6 +15687,93 @@ КонецПроцедуры +Процедура УстановитьПоследовательностьУзловРекурсивно(ОбъектXDTO) + + Если ТипЗнч(ОбъектXDTO) = Тип("ОбъектXDTO") Тогда + + ТипОбъекта = ОбъектXDTO.Тип(); + + КоллекцияСвойств = ТипОбъекта.Свойства; + + Если ТипОбъекта.Последовательный Тогда + + ДанныеПоследовательности = Новый Соответствие; + + Последовательность = ОбъектXDTO.Последовательность(); + + Для Индекс = 0 По Последовательность.Количество() -1 Цикл + + СвойствоПоследовательности = Последовательность.ПолучитьСвойство(Индекс); + + ЗначенияПоследовательности = ДанныеПоследовательности.Получить(СвойствоПоследовательности); + + Если ЗначенияПоследовательности = Неопределено Тогда + ЗначенияПоследовательности = Новый Массив; + ДанныеПоследовательности.Вставить(СвойствоПоследовательности, ЗначенияПоследовательности); + КонецЕсли; + + ЗначенияПоследовательности.Добавить(Последовательность.ПолучитьЗначение(Индекс)); + + КонецЦикла; + + Последовательность.Очистить(); + + Для Каждого Свойство Из КоллекцияСвойств Цикл + + Если Свойство.Форма <> ФормаXML.Элемент Тогда + Продолжить; + КонецЕсли; + + ЗначенияСвойств = ДанныеПоследовательности.Получить(Свойство); + + Если ЗначенияСвойств <> Неопределено Тогда + + Для Каждого ЗначениеСвойства Из ЗначенияСвойств Цикл + Последовательность.Добавить(Свойство, ЗначениеСвойства); + КонецЦикла; + + КонецЕсли; + + КонецЦикла; + + КонецЕсли; + + Для Каждого Свойство Из КоллекцияСвойств Цикл + + Если Свойство.Форма <> ФормаXML.Элемент Тогда + Продолжить; + КонецЕсли; + + ЗначениеСвойства = ОбъектXDTO[Свойство.Имя]; + + Если ЗначениеСвойства = Неопределено Тогда + Продолжить; + КонецЕсли; + + Если ТипЗнч(ЗначениеСвойства) = Тип("СписокXDTO") Тогда + + Для Индекс = 0 По ЗначениеСвойства.Количество() -1 Цикл + УстановитьПоследовательностьУзловРекурсивно(ЗначениеСвойства.Получить(Индекс)); + КонецЦикла; + + Иначе + + УстановитьПоследовательностьУзловРекурсивно(ЗначениеСвойства); + + КонецЕсли; + + КонецЦикла; + + ИначеЕсли ТипЗнч(ОбъектXDTO) = Тип("СписокXDTO") Тогда + + Для Индекс = 0 По ОбъектXDTO.Количество() -1 Цикл + УстановитьПоследовательностьУзловРекурсивно(ОбъектXDTO.Получить(Индекс)); + КонецЦикла; + + КонецЕсли; + +КонецПроцедуры + Функция ПреобразоватьЗначениеДляXML(Значение, СвойствоТип) Результат = Значение; @@ -13070,12 +15841,85 @@ Результат = Лев(Значение, Длина); КонецЕсли; КонецЕсли; + ИначеЕсли ОбщегоНазначения.ЭтоСсылка(ТипЗнч(Значение)) Тогда + + Если СвойствоТип.Имя = "string" Или СвойствоТип.БазовыйТип.Имя = "string" + Или СвойствоТип.БазовыйТип.Имя = "ОКВГУМТип" Тогда + Результат = Строка(Значение); + КонецЕсли; + КонецЕсли; + Возврат Результат; КонецФункции +// Заполняет структуру реквизитов титула данными из таблицы информационных полей. +// +// Параметры: +// СтруктураРеквизитовТитулаЗаполнение - Структура - структура для заполнения реквизитов титула +// АдресТаблицаИнформационныеПоля - Строка, Неопределено - адрес таблицы информационных полей во временном хранилище +Процедура ЗаполнитьТаблицуИнформационныхПолей(СтруктураРеквизитовТитулаЗаполнение, АдресТаблицаИнформационныеПоля) + + Если АдресТаблицаИнформационныеПоля = Неопределено + Или Не ЭтоАдресВременногоХранилища(АдресТаблицаИнформационныеПоля) Тогда + Возврат; + КонецЕсли; + + ТаблицаИнформационныеПоля = ПолучитьИзВременногоХранилища(АдресТаблицаИнформационныеПоля); // см. НоваяТаблицаИнформационныеПоля + ИтераторЦикла = 1; + ИдентификаторСтрокиИнфПолей = Строка(Новый УникальныйИдентификатор); + Для Каждого СтрокаИнформационныхПолей Из ТаблицаИнформационныеПоля Цикл + Если ИтераторЦикла = 1 Тогда + // Добавляем строку-родителя информационных полей + ДобавитьСтрокуИнформационныхПолей(СтруктураРеквизитовТитулаЗаполнение, + СтрокаИнформационныхПолей.ИдентификаторИнфоПолей, + ИтераторЦикла, + "ИдентификаторСтроки", + ИдентификаторСтрокиИнфПолей); + КонецЕсли; + // Добавляем информационные поля + ДобавитьСтрокуИнформационныхПолей(СтруктураРеквизитовТитулаЗаполнение, + СтрокаИнформационныхПолей.ИдентификаторДопИнформации, + ИтераторЦикла, + "ИдентификаторИнформации", + СтрокаИнформационныхПолей.Идентификатор); + ДобавитьСтрокуИнформационныхПолей(СтруктураРеквизитовТитулаЗаполнение, + СтрокаИнформационныхПолей.ИдентификаторДопИнформации, + ИтераторЦикла, + "ТипДанных", + СтрокаИнформационныхПолей.ТипДанных); + ДобавитьСтрокуИнформационныхПолей(СтруктураРеквизитовТитулаЗаполнение, + СтрокаИнформационныхПолей.ИдентификаторДопИнформации, + ИтераторЦикла, + "Значение", + СтрокаИнформационныхПолей.Значение); + ДобавитьСтрокуИнформационныхПолей(СтруктураРеквизитовТитулаЗаполнение, + СтрокаИнформационныхПолей.ИдентификаторДопИнформации, + ИтераторЦикла, + "ИдентификаторСтрокиРодителя", + ИдентификаторСтрокиИнфПолей); + ИтераторЦикла = ИтераторЦикла + 1; + КонецЦикла; + +КонецПроцедуры + +// Добавляет строку информационного поля в структуру реквизитов титула. +// +// Параметры: +// СтруктураРеквизитовТитула - Структура - структура для хранения реквизитов титула +// ИдентификаторИнфоПолей - Строка - идентификатор группы информационных полей +// Итератор - Число - номер итерации для уникальности ключа +// Идентификатор - Строка - идентификатор информационного поля +// Значение - Строка - значение информационного поля +Процедура ДобавитьСтрокуИнформационныхПолей(СтруктураРеквизитовТитула, ИдентификаторИнфоПолей, Итератор, Идентификатор, + Значение) + + СтруктураРеквизитовТитула.Вставить(ИдентификаторИнфоПолей + "__" + Итератор + "__" + Идентификатор, Значение); + +КонецПроцедуры + #Область ПроверкаЗаполненияЭПД Функция НайтиПереходыРекурсивно(СтрокаДерева, МакетСоответствиеИмен, МакетСоответствиеОбязательныеСтруктуры) @@ -13800,10 +16644,355 @@ Возврат УзлыСхемыФормыПутевогоЛиста(ИмяФормы); ИначеЕсли ТипДокумента = ТипДокументаДоговорФрахтования() Тогда Возврат УзлыСхемыФормыДоговораФрахтования(ИмяФормы); + ИначеЕсли ТипДокумента = ТипДокументаПоручениеЭкспедитору() Тогда + Возврат УзлыСхемыФормыПоручениеЭкспедитору(ИмяФормы); + ИначеЕсли ТипДокумента = ТипДокументаЭкспедиторскаяРасписка() Тогда + Возврат УзлыСхемыФормыЭкспедиторскаяРасписка(ИмяФормы); + ИначеЕсли ТипДокумента = ТипДокументаСкладскаяРасписка() Тогда + Возврат УзлыСхемыФормыСкладскаяРасписка(ИмяФормы); + КонецЕсли; КонецФункции +Функция УзлыСхемыФормыСкладскаяРасписка(ИмяФормы) + + МассивУзлов = Новый Массив; + + Если ИмяФормы = "ОсновнаяФорма" Тогда + МассивУзлов.Добавить("//Файл"); + ИначеЕсли ИмяФормы = "ТитулЭкспедитораСоставительДоверенность" Тогда + МассивУзлов.Добавить("//Файл/Документ/ОснДовОргСост"); + ИначеЕсли ИмяФормы = "ТитулЭкспедитораДоговор" Тогда + МассивУзлов.Добавить("//Файл/Документ/СодИнфЭксп/ДогТрЭксп"); + + ИначеЕсли ИмяФормы = "ТитулЭкспедитораСведСклад" Тогда + МассивУзлов.Добавить("//Файл/Документ/СодИнфЭксп/СведСклад/АдрСклад/Адрес/АдрИнф/АдрТекст"); + МассивУзлов.Добавить("//Файл/Документ/СодИнфЭксп/СведСклад/ВладСкладЭксп"); + + ИначеЕсли ИмяФормы = "ТитулЭкспедитораСопроводительныеДокументы" Тогда + МассивУзлов.Добавить("//Файл/Документ/СодИнфЭксп/СопрДок"); + + ИначеЕсли ИмяФормы = "ТитулЭкспедитораРеквизитыСторонСопроводительныхДокументов" Тогда + МассивУзлов.Добавить("//Файл/Документ/СодИнфЭксп/СопрДок/РеквИдРекСост"); + + ИначеЕсли ИмяФормы = "ТитулЭкспедитораГруз" Тогда + МассивУзлов.Добавить("//Файл/Документ/СодИнфЭксп/СвГруз"); + + ИначеЕсли ИмяФормы = "ТитулЭкспедитораГрузСвКонтейн" Тогда + МассивУзлов.Добавить("//Файл/Документ/СодИнфЭксп/СвГруз/СвКонтейн"); + + ИначеЕсли ИмяФормы = "ТитулЭкспедитораГрузСвКонтейнНомПломб" Тогда + МассивУзлов.Добавить("//Файл/Документ/СодИнфЭксп/СвГруз/СвКонтейн/НомПломб"); + + ИначеЕсли ИмяФормы = "ТитулЭкспедитораГрузСопрДокПарт" Тогда + МассивУзлов.Добавить("//Файл/Документ/СодИнфЭксп/СвГруз/СопрДок"); + + ИначеЕсли ИмяФормы = "ТитулЭкспедитораГрузРеквизитыСторонСопрДокПарт" Тогда + МассивУзлов.Добавить("//Файл/Документ/СодИнфЭксп/СвГруз/СопрДок/РеквИдРекСост"); + + ИначеЕсли ИмяФормы = "ТитулЭкспедитораГрузРеквЗаказПок" Тогда + МассивУзлов.Добавить("//Файл/Документ/СодИнфЭксп/СвГруз/РеквЗаказПок"); + + ИначеЕсли ИмяФормы = "ТитулЭкспедитораГрузРеквЗаказПокРеквизитыСторон" Тогда + МассивУзлов.Добавить("//Файл/Документ/СодИнфЭксп/СвГруз/РеквЗаказПок/РеквИдРекСост"); + + ИначеЕсли ИмяФормы = "ТитулЭкспедитораОписаниеГруза" Тогда + МассивУзлов.Добавить("//Файл/Документ/СодИнфЭксп/СвГруз/ОпГрузХран"); + + ИначеЕсли ИмяФормы = "ТитулЭкспедитораГрузУслПриемГр" Тогда + МассивУзлов.Добавить("//Файл/Документ/СодИнфЭксп/СвГруз/УслПриемГр"); + + ИначеЕсли ИмяФормы = "ТитулЭкспедитораГрузУслПриемГрОснДовПриемГрХран" Тогда + МассивУзлов.Добавить("//Файл/Документ/СодИнфЭксп/СвГруз/УслПриемГр/ОснДовПриемГрХран/РеквНаимДок"); + МассивУзлов.Добавить("//Файл/Документ/СодИнфЭксп/СвГруз/УслПриемГр/ОснДовПриемГрХран/РеквНомерДок"); + МассивУзлов.Добавить("//Файл/Документ/СодИнфЭксп/СвГруз/УслПриемГр/ОснДовПриемГрХран/РеквДатаДок"); + + ИначеЕсли ИмяФормы = "ТитулЭкспедитораГрузСвСтрахПолис" Тогда + МассивУзлов.Добавить("//Файл/Документ/СодИнфЭксп/СвГруз/СвСтрах/Полис"); + + ИначеЕсли ИмяФормы = "ТитулЭкспедитораГрузСвСтрахУслСтрах" Тогда + МассивУзлов.Добавить("//Файл/Документ/СодИнфЭксп/СвГруз/СвСтрах/УслСтрах"); + + ИначеЕсли ИмяФормы = "ТитулЭкспедитораОписаниеГрузаКодТовОКПД2" Тогда + МассивУзлов.Добавить("//Файл/Документ/СодИнфЭксп/СвГруз/ОпГрузХран/КодТовОКПД2"); + + ИначеЕсли ИмяФормы = "ТитулЭкспедитораОписаниеГрузаКодГрузГНГ" Тогда + МассивУзлов.Добавить("//Файл/Документ/СодИнфЭксп/СвГруз/ОпГрузХран/КодГрузГНГ"); + + ИначеЕсли ИмяФормы = "ТитулЭкспедитораОписаниеГрузаКодГрузЕТСНГ" Тогда + МассивУзлов.Добавить("//Файл/Документ/СодИнфЭксп/СвГруз/ОпГрузХран/КодГрузЕТСНГ"); + + ИначеЕсли ИмяФормы = "ТитулЭкспедитораОписаниеГрузаМарк" Тогда + МассивУзлов.Добавить("//Файл/Документ/СодИнфЭксп/СвГруз/ОпГрузХран/Марк"); + + ИначеЕсли ИмяФормы = "ТитулЭкспедитораОписаниеГрузаНомКонтейн" Тогда + МассивУзлов.Добавить("//Файл/Документ/СодИнфЭксп/СвГруз/ОпГрузХран/НомКонтейн"); + + ИначеЕсли ИмяФормы = "ТитулЭкспедитораОписаниеГрузаСвСтрПроисх" Тогда + МассивУзлов.Добавить("//Файл/Документ/СодИнфЭксп/СвГруз/ОпГрузХран/СвСтрПроисх"); + + ИначеЕсли ИмяФормы = "ТитулЭкспедитораОписаниеГрузаИнфУпГруз" Тогда + МассивУзлов.Добавить("//Файл/Документ/СодИнфЭксп/СвГруз/ОпГрузХран/ИнфУпГруз"); + + ИначеЕсли ИмяФормы = "ТитулЭкспедитораОписаниеГрузаСвОпаснГруз" Тогда + МассивУзлов.Добавить("//Файл/Документ/СодИнфЭксп/СвГруз/ОпГрузХран/СвОпаснГруз"); + + ИначеЕсли ИмяФормы = "ТитулЭкспедитораОписаниеГрузаСвГосСист" Тогда + МассивУзлов.Добавить("//Файл/Документ/СодИнфЭксп/СвГруз/ОпГрузХран/СвГосСист"); + + КонецЕсли; + + Возврат МассивУзлов; + +КонецФункции + +Функция УзлыСхемыФормыЭкспедиторскаяРасписка(ИмяФормы) + + МассивУзлов = Новый Массив; + + Если ИмяФормы = "ОсновнаяФорма" Тогда + МассивУзлов.Добавить("//Файл"); + ИначеЕсли ИмяФормы = "ТитулЭкспедитораСоставительДоверенность" Тогда + МассивУзлов.Добавить("//Файл/Документ/ОснДовОргСост"); + ИначеЕсли ИмяФормы = "ТитулЭкспедитораДоговор" Тогда + МассивУзлов.Добавить("//Файл/Документ/СодИнфЭксп/ДогТрЭксп"); + + ИначеЕсли ИмяФормы = "ТитулЭкспедитораСопроводительныеДокументы" Тогда + МассивУзлов.Добавить("//Файл/Документ/СодИнфЭксп/СопрДок"); + + ИначеЕсли ИмяФормы = "ТитулЭкспедитораРеквизитыСторонСопроводительныхДокументов" Тогда + МассивУзлов.Добавить("//Файл/Документ/СодИнфЭксп/СопрДок/РеквИдРекСост"); + + ИначеЕсли ИмяФормы = "ТитулЭкспедитораГрузы" Тогда + МассивУзлов.Добавить("//Файл/Документ/СодИнфЭксп/СвГруз"); + + ИначеЕсли ИмяФормы = "ТитулЭкспедитораГрузыСвКонтейн" Тогда + МассивУзлов.Добавить("//Файл/Документ/СодИнфЭксп/СвГруз/СвКонтейн"); + + ИначеЕсли ИмяФормы = "ТитулЭкспедитораГрузыСвКонтейнНомПломб" Тогда + МассивУзлов.Добавить("//Файл/Документ/СодИнфЭксп/СвГруз/СвКонтейн/НомПломб"); + + ИначеЕсли ИмяФормы = "ТитулЭкспедитораГрузыСопрДокПарт" Тогда + МассивУзлов.Добавить("//Файл/Документ/СодИнфЭксп/СвГруз/СопрДокПарт"); + + ИначеЕсли ИмяФормы = "ТитулЭкспедитораГрузыРеквизитыСторонСопрДокПарт" Тогда + МассивУзлов.Добавить("//Файл/Документ/СодИнфЭксп/СвГруз/СопрДокПарт/РеквИдРекСост"); + + ИначеЕсли ИмяФормы = "ТитулЭкспедитораГрузыРеквЗакПост" Тогда + МассивУзлов.Добавить("//Файл/Документ/СодИнфЭксп/СвГруз/РеквЗаказПост"); + + ИначеЕсли ИмяФормы = "ТитулЭкспедитораГрузыРеквизитыСторонРеквЗакПост" Тогда + МассивУзлов.Добавить("//Файл/Документ/СодИнфЭксп/СвГруз/РеквЗаказПост/РеквИдРекСост"); + + ИначеЕсли ИмяФормы = "ТитулЭкспедитораОписаниеГруза" Тогда + МассивУзлов.Добавить("//Файл/Документ/СодИнфЭксп/СвГруз/ОпГруз"); + + ИначеЕсли ИмяФормы = "ТитулЭкспедитораГрузыСвСтрахУслСтрах" Тогда + МассивУзлов.Добавить("//Файл/Документ/СодИнфЭксп/СвГруз/СвСтрах/УслСтрах"); + + ИначеЕсли ИмяФормы = "ТитулЭкспедитораОписаниеГрузаКодТовОКПД2" Тогда + МассивУзлов.Добавить("//Файл/Документ/СодИнфЭксп/СвГруз/ОпГруз/КодТовОКПД2"); + + ИначеЕсли ИмяФормы = "ТитулЭкспедитораОписаниеГрузаКодГрузГНГ" Тогда + МассивУзлов.Добавить("//Файл/Документ/СодИнфЭксп/СвГруз/ОпГруз/КодГрузГНГ"); + + ИначеЕсли ИмяФормы = "ТитулЭкспедитораОписаниеГрузаКодГрузЕТСНГ" Тогда + МассивУзлов.Добавить("//Файл/Документ/СодИнфЭксп/СвГруз/ОпГруз/КодГрузЕТСНГ"); + + ИначеЕсли ИмяФормы = "ТитулЭкспедитораОписаниеГрузаМарк" Тогда + МассивУзлов.Добавить("//Файл/Документ/СодИнфЭксп/СвГруз/ОпГруз/Марк"); + + ИначеЕсли ИмяФормы = "ТитулЭкспедитораОписаниеГрузаНомКонтейн" Тогда + МассивУзлов.Добавить("//Файл/Документ/СодИнфЭксп/СвГруз/ОпГруз/НомКонтейн"); + + ИначеЕсли ИмяФормы = "ТитулЭкспедитораОписаниеГрузаСвСтрПроисх" Тогда + МассивУзлов.Добавить("//Файл/Документ/СодИнфЭксп/СвГруз/ОпГруз/СвСтрПроисх"); + + ИначеЕсли ИмяФормы = "ТитулЭкспедитораОписаниеГрузаИнфУпГруз" Тогда + МассивУзлов.Добавить("//Файл/Документ/СодИнфЭксп/СвГруз/ОпГруз/ИнфУпГруз"); + + ИначеЕсли ИмяФормы = "ТитулЭкспедитораОписаниеГрузаСвОпаснГруз" Тогда + МассивУзлов.Добавить("//Файл/Документ/СодИнфЭксп/СвГруз/ОпГруз/СвОпаснГруз"); + + ИначеЕсли ИмяФормы = "ТитулЭкспедитораОписаниеГрузаСвГосСист" Тогда + МассивУзлов.Добавить("//Файл/Документ/СодИнфЭксп/СвГруз/ОпГруз/СвГосСист"); + + ИначеЕсли ИмяФормы = "ТитулЭкспедитораВладИнфр" Тогда + МассивУзлов.Добавить("//Файл/Документ/СодИнфЭксп/ВладИнфр/СовпГОВ"); + + ИначеЕсли ИмяФормы = "ТитулЭкспедитораСвЛицПриемГр" Тогда + МассивУзлов.Добавить("//Файл/Документ/СодИнфЭксп/ОснДовПриемГр/РеквНаимДок"); + МассивУзлов.Добавить("//Файл/Документ/СодИнфЭксп/ОснДовПриемГр/РеквНомерДок"); + МассивУзлов.Добавить("//Файл/Документ/СодИнфЭксп/ОснДовПриемГр/РеквДатаДок"); + ИначеЕсли ИмяФормы = "ТитулЭкспедитораСвЛицПогрГр" Тогда + МассивУзлов.Добавить("//Файл/Документ/СодИнфЭксп/СвЛицПогрГр/ЛицоПогруз"); + + ИначеЕсли ИмяФормы = "ТитулЭкспедитораГрузыУслПриемОбязЭксп" Тогда + МассивУзлов.Добавить("//Файл/Документ/СодИнфЭксп/СвГруз/УслПрием/ОбязЭксп"); + + КонецЕсли; + + Возврат МассивУзлов; + +КонецФункции + +Функция УзлыСхемыФормыПоручениеЭкспедитору(ИмяФормы) + + МассивУзлов = Новый Массив; + + Если ИмяФормы = "ОсновнаяФорма" Тогда + МассивУзлов.Добавить("//Файл"); + ИначеЕсли ИмяФормы = "ТитулЗаказчикаСоставительДоверенность" Тогда + МассивУзлов.Добавить("//Файл/Документ/ОснДовОргСост"); + ИначеЕсли ИмяФормы = "ТитулЗаказчикаДоговор" Тогда + МассивУзлов.Добавить("//Файл/Документ/СодИнфКлнт/ДогТрЭксп"); + ИначеЕсли ИмяФормы = "ТитулЗаказчикаЗаявкиНаТранспортировку" Тогда + МассивУзлов.Добавить("//Файл/Документ/СодИнфКлнт/РеквЗаявТранс"); + ИначеЕсли ИмяФормы = "ТитулЗаказчикаРеквизитыСторонЗаявокНаТранспортировку" Тогда + МассивУзлов.Добавить("//Файл/Документ/СодИнфКлнт/РеквЗаявТранс/РеквИдРекСост"); + ИначеЕсли ИмяФормы = "ТитулЗаказчикаСопроводительныеДокументы" Тогда + МассивУзлов.Добавить("//Файл/Документ/СодИнфКлнт/СопрДок"); + ИначеЕсли ИмяФормы = "ТитулЗаказчикаРеквизитыСторонСопроводительныхДокументов" Тогда + МассивУзлов.Добавить("//Файл/Документ/СодИнфКлнт/СопрДок/РеквИдРекСост"); + ИначеЕсли ИмяФормы = "ТитулЗаказчикаИныеДанныеИОговоркиКлиента" Тогда + МассивУзлов.Добавить("//Файл/Документ/СодИнфКлнт/ИныеДанКлнт"); + + ИначеЕсли ИмяФормы = "ТитулЗаказчикаГрузы" Тогда + МассивУзлов.Добавить("//Файл/Документ/СодИнфКлнт/СвГруз"); + + ИначеЕсли ИмяФормы = "ТитулЗаказчикаГрузыСвТС" Тогда + МассивУзлов.Добавить("//Файл/Документ/СодИнфКлнт/СвГруз/СвТС"); + + ИначеЕсли ИмяФормы = "ТитулЗаказчикаОписаниеГруза" Тогда + МассивУзлов.Добавить("//Файл/Документ/СодИнфКлнт/СвГруз/ОпГруз"); + + ИначеЕсли ИмяФормы = "ТитулЗаказчикаГрузыСвСтрахПолис" Тогда + МассивУзлов.Добавить("/Файл/Документ/СодИнфКлнт/СвГруз/СвСтрах/Полис/РеквНаимДок"); + МассивУзлов.Добавить("//Файл/Документ/СодИнфКлнт/СвГруз/СвСтрах/Полис/РеквНомерДок"); + МассивУзлов.Добавить("//Файл/Документ/СодИнфКлнт/СвГруз/СвСтрах/Полис/РеквДатаДок"); + + ИначеЕсли ИмяФормы = "ТитулЗаказчикаГрузыСвСтрахУслСтрах" Тогда + МассивУзлов.Добавить("//Файл/Документ/СодИнфКлнт/СвГруз/СвСтрах/УслСтрах"); + + ИначеЕсли ИмяФормы = "ТитулЗаказчикаГрузыСвУведСторон" Тогда + МассивУзлов.Добавить("//Файл/Документ/СодИнфКлнт/СвГруз/СвУведСторон"); + + ИначеЕсли ИмяФормы = "ТитулЗаказчикаГрузыСвУсл" Тогда + МассивУзлов.Добавить("//Файл/Документ/СодИнфКлнт/СвГруз/СвУсл"); + + ИначеЕсли ИмяФормы = "ТитулЗаказчикаГрузыРеквЗакПост" Тогда + МассивУзлов.Добавить("//Файл/Документ/СодИнфКлнт/СвГруз/РеквЗакПост"); + + ИначеЕсли ИмяФормы = "ТитулЗаказчикаГрузыРеквизитыСторонРеквЗакПост" Тогда + МассивУзлов.Добавить("//Файл/Документ/СодИнфКлнт/СвГруз/РеквЗакПост/РеквИдРекСост"); + + ИначеЕсли ИмяФормы = "ТитулЗаказчикаГрузыСопрДокПарт" Тогда + МассивУзлов.Добавить("//Файл/Документ/СодИнфКлнт/СвГруз/СопрДокПарт"); + + ИначеЕсли ИмяФормы = "ТитулЗаказчикаГрузыРеквизитыСторонСопрДокПарт" Тогда + МассивУзлов.Добавить("//Файл/Документ/СодИнфКлнт/СвГруз/СопрДокПарт/РеквИдРекСост"); + + ИначеЕсли ИмяФормы = "ТитулЗаказчикаГрузыСвКонтейн" Тогда + МассивУзлов.Добавить("//Файл/Документ/СодИнфКлнт/СвГруз/СвКонтейн"); + + ИначеЕсли ИмяФормы = "ТитулЗаказчикаГрузыСвКонтейнНомПломб" Тогда + МассивУзлов.Добавить("//Файл/Документ/СодИнфКлнт/СвГруз/СвКонтейн/НомПломб"); + + ИначеЕсли ИмяФормы = "ТитулЗаказчикаГрузыУказКлнт" Тогда + МассивУзлов.Добавить("//Файл/Документ/СодИнфКлнт/СвГруз/УказКлнт/УкНормПрвз"); + МассивУзлов.Добавить("//Файл/Документ/СодИнфКлнт/СвГруз/УказКлнт/Отмет"); + + ИначеЕсли ИмяФормы = "ТитулЗаказчикаОписаниеГрузаКодТовОКПД2" Тогда + МассивУзлов.Добавить("//Файл/Документ/СодИнфКлнт/СвГруз/ОпГруз/КодТовОКПД2"); + + ИначеЕсли ИмяФормы = "ТитулЗаказчикаОписаниеГрузаКодГрузГНГ" Тогда + МассивУзлов.Добавить("//Файл/Документ/СодИнфКлнт/СвГруз/ОпГруз/КодГрузГНГ"); + + ИначеЕсли ИмяФормы = "ТитулЗаказчикаОписаниеГрузаКодГрузЕТСНГ" Тогда + МассивУзлов.Добавить("//Файл/Документ/СодИнфКлнт/СвГруз/ОпГруз/КодГрузЕТСНГ"); + + ИначеЕсли ИмяФормы = "ТитулЗаказчикаОписаниеГрузаМарк" Тогда + МассивУзлов.Добавить("//Файл/Документ/СодИнфКлнт/СвГруз/ОпГруз/Марк"); + + ИначеЕсли ИмяФормы = "ТитулЗаказчикаОписаниеГрузаНомКонтейн" Тогда + МассивУзлов.Добавить("//Файл/Документ/СодИнфКлнт/СвГруз/ОпГруз/НомКонтейн"); + + ИначеЕсли ИмяФормы = "ТитулЗаказчикаОписаниеГрузаСвСтрПроисх" Тогда + МассивУзлов.Добавить("//Файл/Документ/СодИнфКлнт/СвГруз/ОпГруз/СвСтрПроисх"); + + ИначеЕсли ИмяФормы = "ТитулЗаказчикаОписаниеГрузаИнфУпГруз" Тогда + МассивУзлов.Добавить("//Файл/Документ/СодИнфКлнт/СвГруз/ОпГруз/ИнфУпГруз"); + + ИначеЕсли ИмяФормы = "ТитулЗаказчикаОписаниеГрузаСвОпаснГруз" Тогда + МассивУзлов.Добавить("//Файл/Документ/СодИнфКлнт/СвГруз/ОпГруз/СвОпаснГруз"); + + ИначеЕсли ИмяФормы = "ТитулЗаказчикаОписаниеГрузаСвГосСист" Тогда + МассивУзлов.Добавить("//Файл/Документ/СодИнфКлнт/СвГруз/ОпГруз/СвГосСист"); + + ИначеЕсли ИмяФормы = "ТитулЭкспедитораДопИнфЭксп" Тогда + МассивУзлов.Добавить("//Файл/Документ/СодИнфЭксп/ДопИнфЭксп"); + + ИначеЕсли ИмяФормы = "ТитулЭкспедитораИныеДанЭксп" Тогда + МассивУзлов.Добавить("//Файл/Документ/СодИнфЭксп/ИныеДанЭксп"); + + ИначеЕсли ИмяФормы = "ТитулЭкспедитораДопИнфЭкспОснОкУслИным" Тогда + МассивУзлов.Добавить("//Файл/Документ/СодИнфЭксп/ДопИнфЭксп/СвПредстЭксп/ОснОкУслИным/РеквНаимДок"); + МассивУзлов.Добавить("//Файл/Документ/СодИнфЭксп/ДопИнфЭксп/СвПредстЭксп/ОснОкУслИным/РеквНомерДок"); + МассивУзлов.Добавить("//Файл/Документ/СодИнфЭксп/ДопИнфЭксп/СвПредстЭксп/ОснОкУслИным/РеквДатаДок"); + + ИначеЕсли ИмяФормы = "ТитулЭкспедитораДопИнфЭкспРеквЗакПост" Тогда + МассивУзлов.Добавить("//Файл/Документ/СодИнфЭксп/ДопИнфЭксп/РеквЗакПост"); + + ИначеЕсли ИмяФормы = "ТитулЭкспедитораДопИнфЭкспРеквЗакПостРеквИдРекСост" Тогда + МассивУзлов.Добавить("//Файл/Документ/СодИнфЭксп/ДопИнфЭксп/РеквЗакПост/РеквИдРекСост"); + + ИначеЕсли ИмяФормы = "ТитулЭкспедитораДопИнфЭкспИдентПартГруз" Тогда + МассивУзлов.Добавить("//Файл/Документ/СодИнфЭксп/ДопИнфЭксп/ИдентПартГруз"); + + ИначеЕсли ИмяФормы = "ТитулЭкспедитораДопИнфЭкспНомПартГруз" Тогда + МассивУзлов.Добавить("//Файл/Документ/СодИнфЭксп/ДопИнфЭксп/НомПартГруз"); + + ИначеЕсли ИмяФормы = "ТитулЭкспедитораДопИнфЭкспСвОплата" Тогда + МассивУзлов.Добавить("//Файл/Документ/СодИнфЭксп/ДопИнфЭксп/СвОплата/ОбщСтУсл"); + + ИначеЕсли ИмяФормы = "ТитулЭкспедитораДопИнфЭкспСвТрсГруз" Тогда + МассивУзлов.Добавить("//Файл/Документ/СодИнфЭксп/ДопИнфЭксп/СвТрсГруз"); + + ИначеЕсли ИмяФормы = "ТитулЭкспедитораДопИнфЭкспСвТрсГрузСвТСДост" Тогда + МассивУзлов.Добавить("//Файл/Документ/СодИнфЭксп/ДопИнфЭксп/СвТрсГруз/СвТСДост"); + + ИначеЕсли ИмяФормы = "ТитулЭкспедитораДопИнфЭкспСвОплатаДокОплУ" Тогда + МассивУзлов.Добавить("//Файл/Документ/СодИнфЭксп/ДопИнфЭксп/СвОплата/ДокОплУсл/РеквИдРекСост"); + + ИначеЕсли ИмяФормы = "ТитулЭкспедитораДопИнфЭкспСвТрсГрузСвТСДостСвВодит" Тогда + МассивУзлов.Добавить("//Файл/Документ/СодИнфЭксп/ДопИнфЭксп/СвТрсГруз/СвТСДост/СвВодит"); + + ИначеЕсли ИмяФормы = "ТитулЭкспедитораДопИнфЭкспСвТрсГрузСвТСДостСвВодитПутевойЛист" Тогда + МассивУзлов.Добавить("//Файл/Документ/СодИнфЭксп/ДопИнфЭксп/СвТрсГруз/СвТСДост/СвВодит/ПутевойЛист/РеквНаимДок"); + МассивУзлов.Добавить("//Файл/Документ/СодИнфЭксп/ДопИнфЭксп/СвТрсГруз/СвТСДост/СвВодит/ПутевойЛист/РеквНомерДок"); + МассивУзлов.Добавить("//Файл/Документ/СодИнфЭксп/ДопИнфЭксп/СвТрсГруз/СвТСДост/СвВодит/ПутевойЛист/РеквДатаДок"); + + ИначеЕсли ИмяФормы = "ТитулЭкспедитораДопИнфЭкспСвОплатаДокОплУсл" Тогда + МассивУзлов.Добавить("//Файл/Документ/СодИнфЭксп/ДопИнфЭксп/СвОплата/ДокОплУсл/РеквНаимДок"); + МассивУзлов.Добавить("//Файл/Документ/СодИнфЭксп/ДопИнфЭксп/СвОплата/ДокОплУсл/РеквНомерДок"); + МассивУзлов.Добавить("//Файл/Документ/СодИнфЭксп/ДопИнфЭксп/СвОплата/ДокОплУсл/РеквДатаДок"); + + ИначеЕсли ИмяФормы = "ТитулЗаказчикаОтзывИныеДанКлнт" Тогда + МассивУзлов.Добавить("//Файл/Документ/СодИнфОтз/ИныеДанКлнт"); + + ИначеЕсли ИмяФормы = "ТитулЗаказчикаОтзывИныеДанКлнт" Тогда + МассивУзлов.Добавить("//Файл/Документ/СодИнфОтз/ИныеДанКлнт"); + + ИначеЕсли ИмяФормы = "ТитулЗаказчикаОтзывСвВозврГруз" Тогда + МассивУзлов.Добавить("//Файл/Документ/СодИнфОтз/СвВозврГруз/УслВозврГруз"); + + КонецЕсли; + + Возврат МассивУзлов; + +КонецФункции + Функция УзлыСхемыФормыТранспортнойНакладной(ИмяФормы) МассивУзлов = Новый Массив; @@ -14413,6 +17602,25 @@ КонецФункции +Функция ТипДокументаПоручениеЭкспедитору() + + Возврат ОбменСГИСЭПДКлиентСервер.ТипДокументаПоручениеЭкспедитору(); + +КонецФункции + +Функция ТипДокументаЭкспедиторскаяРасписка() + + Возврат ОбменСГИСЭПДКлиентСервер.ТипДокументаЭкспедиторскаяРасписка(); + +КонецФункции + +Функция ТипДокументаСкладскаяРасписка() + + Возврат ОбменСГИСЭПДКлиентСервер.ТипДокументаСкладскаяРасписка(); + +КонецФункции + + Процедура УстановитьОформлениеКнопкиТабЧасти(ЭлементОформления, ЗначениеОформления) Если ЗначениеОформления = ЗначениеОформленияНеобязательно() Тогда @@ -15863,7 +19071,8 @@ Если Не ОбъектСДаннымиДокумента.Свойство(ТабличнаяЧасть) Тогда Возврат Ложь; КонецЕсли; - Если ОбъектСДаннымиДокумента[ТабличнаяЧасть].Количество() > 0 Тогда + Если ОбъектСДаннымиДокумента[ТабличнаяЧасть].Количество() > 0 + И ОбъектСДаннымиДокумента[ТабличнаяЧасть].Колонки.Найти(Реквизит) <> Неопределено Тогда ТипЗнч = ТипЗнч(ОбъектСДаннымиДокумента[ТабличнаяЧасть][ИндексТабличнойЧасти][Реквизит]); Если ТипЗнч <> Тип("Булево") Тогда Возврат ЗначениеЗаполнено(ОбъектСДаннымиДокумента[ТабличнаяЧасть][ИндексТабличнойЧасти][Реквизит]); @@ -15876,12 +19085,18 @@ ИначеЕсли СтрокаДерева.СтруктураХраненияРеквизита.ЭтоТабЧасть Тогда Возврат ОбъектСДаннымиДокумента[Реквизит].Количество() > 0; Иначе - ТипЗнч = ТипЗнч(ОбъектСДаннымиДокумента[Реквизит]); - Если ТипЗнч <> Тип("Булево") Тогда - Возврат ЗначениеЗаполнено(ОбъектСДаннымиДокумента[Реквизит]); + + Если ОбъектСДаннымиДокумента.Свойство(Реквизит) Тогда + ТипЗнч = ТипЗнч(ОбъектСДаннымиДокумента[Реквизит]); + Если ТипЗнч <> Тип("Булево") Тогда + Возврат ЗначениеЗаполнено(ОбъектСДаннымиДокумента[Реквизит]); + Иначе + Возврат Истина; + КонецЕсли; Иначе - Возврат Истина; + Возврат Ложь; КонецЕсли; + КонецЕсли; Иначе @@ -16146,6 +19361,19 @@ Заголовок = ОсобоеОформлениеДляДоговораФрахтования(ПутьКЭлементуФормы, ОбъектСДаннымиДокумента, СтруктураРеквизитов); Возврат Заголовок; + ИначеЕсли ТипДокумента = ТипДокументаПоручениеЭкспедитору() Тогда + Заголовок = ОсобоеОформлениеДляПорученияЭкспедитору(ПутьКЭлементуФормы, + ОбъектСДаннымиДокумента, СтруктураРеквизитов); + Возврат Заголовок; + ИначеЕсли ТипДокумента = ТипДокументаЭкспедиторскаяРасписка() Тогда + Заголовок = ОсобоеОформлениеДляЭкспедиторскойРасписки(ПутьКЭлементуФормы, + ОбъектСДаннымиДокумента, СтруктураРеквизитов); + Возврат Заголовок; + ИначеЕсли ТипДокумента = ТипДокументаСкладскаяРасписка() Тогда + Заголовок = ОсобоеОформлениеДляСкладскойРасписки(ПутьКЭлементуФормы, + ОбъектСДаннымиДокумента, СтруктураРеквизитов); + Возврат Заголовок; + КонецЕсли; Возврат Неопределено; @@ -16998,6 +20226,90 @@ КонецФункции +Функция ОсобоеОформлениеДляПорученияЭкспедитору(ПутьКЭлементуФормы, ОбъектСДаннымиДокумента, СтруктураРеквизитов) + + Если ПутьКЭлементуФормы = "ЗаполнитьТитулЗаказчикаСоставительДоверенность" Тогда + + Наименование = ЗначениеРеквизитаСтруктурыРеквизитов(СтруктураРеквизитов, "ТитулЗаказчикаСоставительДоверенностьНаименование"); + Номер = ЗначениеРеквизитаСтруктурыРеквизитов(СтруктураРеквизитов, "ТитулЗаказчикаСоставительДоверенностьНомер"); + Дата = ЗначениеРеквизитаСтруктурыРеквизитов(СтруктураРеквизитов, "ТитулЗаказчикаСоставительДоверенностьДата"); + + Заголовок = СтрШаблон("%1 %2 от %3", Наименование, Номер, Формат(Дата, "ДЛФ=D;")); + + Возврат Заголовок; + + ИначеЕсли ПутьКЭлементуФормы = "ЗаполнитьТитулЗаказчикаДоговор" Тогда + + Наименование = ЗначениеРеквизитаСтруктурыРеквизитов(СтруктураРеквизитов, "ТитулЗаказчикаДоговорНаименование"); + Номер = ЗначениеРеквизитаСтруктурыРеквизитов(СтруктураРеквизитов, "ТитулЗаказчикаДоговорНомер"); + Дата = ЗначениеРеквизитаСтруктурыРеквизитов(СтруктураРеквизитов, "ТитулЗаказчикаДоговорДата"); + + Заголовок = СтрШаблон("%1 %2 от %3", Наименование, Номер, Формат(Дата, "ДЛФ=D;")); + + Возврат Заголовок; + + КонецЕсли; + + Возврат Неопределено; + +КонецФункции + +Функция ОсобоеОформлениеДляЭкспедиторскойРасписки(ПутьКЭлементуФормы, ОбъектСДаннымиДокумента, СтруктураРеквизитов) + + Если ПутьКЭлементуФормы = "ЗаполнитьТитулЭкспедитораСоставительДоверенность" Тогда + + Наименование = ЗначениеРеквизитаСтруктурыРеквизитов(СтруктураРеквизитов, "ТитулЭкспедитораСоставительДоверенностьНаименование"); + Номер = ЗначениеРеквизитаСтруктурыРеквизитов(СтруктураРеквизитов, "ТитулЭкспедитораСоставительДоверенностьНомер"); + Дата = ЗначениеРеквизитаСтруктурыРеквизитов(СтруктураРеквизитов, "ТитулЭкспедитораСоставительДоверенностьДата"); + + Заголовок = СтрШаблон("%1 %2 от %3", Наименование, Номер, Формат(Дата, "ДЛФ=D;")); + + Возврат Заголовок; + + ИначеЕсли ПутьКЭлементуФормы = "ЗаполнитьТитулЭкспедитораДоговор" Тогда + + Наименование = ЗначениеРеквизитаСтруктурыРеквизитов(СтруктураРеквизитов, "ТитулЭкспедитораДоговорНаименование"); + Номер = ЗначениеРеквизитаСтруктурыРеквизитов(СтруктураРеквизитов, "ТитулЭкспедитораДоговорНомер"); + Дата = ЗначениеРеквизитаСтруктурыРеквизитов(СтруктураРеквизитов, "ТитулЭкспедитораДоговорДата"); + + Заголовок = СтрШаблон("%1 %2 от %3", Наименование, Номер, Формат(Дата, "ДЛФ=D;")); + + Возврат Заголовок; + + КонецЕсли; + + Возврат Неопределено; + +КонецФункции + +Функция ОсобоеОформлениеДляСкладскойРасписки(ПутьКЭлементуФормы, ОбъектСДаннымиДокумента, СтруктураРеквизитов) + + Если ПутьКЭлементуФормы = "ЗаполнитьТитулЭкспедитораСоставительДоверенность" Тогда + + Наименование = ЗначениеРеквизитаСтруктурыРеквизитов(СтруктураРеквизитов, "ТитулЭкспедитораСоставительДоверенностьНаименование"); + Номер = ЗначениеРеквизитаСтруктурыРеквизитов(СтруктураРеквизитов, "ТитулЭкспедитораСоставительДоверенностьНомер"); + Дата = ЗначениеРеквизитаСтруктурыРеквизитов(СтруктураРеквизитов, "ТитулЭкспедитораСоставительДоверенностьДата"); + + Заголовок = СтрШаблон("%1 %2 от %3", Наименование, Номер, Формат(Дата, "ДЛФ=D;")); + + Возврат Заголовок; + + ИначеЕсли ПутьКЭлементуФормы = "ЗаполнитьТитулЭкспедитораДоговор" Тогда + + Наименование = ЗначениеРеквизитаСтруктурыРеквизитов(СтруктураРеквизитов, "ТитулЭкспедитораДоговорНаименование"); + Номер = ЗначениеРеквизитаСтруктурыРеквизитов(СтруктураРеквизитов, "ТитулЭкспедитораДоговорНомер"); + Дата = ЗначениеРеквизитаСтруктурыРеквизитов(СтруктураРеквизитов, "ТитулЭкспедитораДоговорДата"); + + Заголовок = СтрШаблон("%1 %2 от %3", Наименование, Номер, Формат(Дата, "ДЛФ=D;")); + + Возврат Заголовок; + + КонецЕсли; + + Возврат Неопределено; + +КонецФункции + Функция ПредставлениеДанныхТабЧасти(ОбъектСДаннымиДокумента, ТабличнаяЧасть, МассивИменРеквизитов, diff --git a/Конфигурация/CommonModules/ОбменСГИСЭПДВызовСервера/Ext/Module.bsl b/Конфигурация/CommonModules/ОбменСГИСЭПДВызовСервера/Ext/Module.bsl index 5d48d3f15..d304afbbb 100644 --- a/Конфигурация/CommonModules/ОбменСГИСЭПДВызовСервера/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ОбменСГИСЭПДВызовСервера/Ext/Module.bsl @@ -1,5 +1,27 @@ #Область СлужебныйПрограммныйИнтерфейс + +Функция ЭтоДоговорЭПД(ТипСсылки) Экспорт + Возврат ОбменСГИСЭПД.ЭтоДоговорЭПД(ТипСсылки); +КонецФункции + +Функция ОпределенДоговорЭПД() Экспорт + Возврат ОбменСГИСЭПД.ОпределенДоговорЭПД(); +КонецФункции + +Функция ПолучитьРеквизитыДоговора(СсылкаНаДоговор) Экспорт + Возврат ОбменСГИСЭПД.ПолучитьРеквизитыДоговора(СсылкаНаДоговор); +КонецФункции + +Функция ДемоРежимВключен() Экспорт + Возврат ОбменСГИСЭПД.ДемоРежимВключен(); + +КонецФункции + +Функция ПолучитьДанныеДляТитулаНаОснованииЧерновика(ЭлектронныйДокумент, ЧерновикДокумента) Экспорт + Возврат ОбменСГИСЭПД.ПолучитьДанныеДляТитулаНаОснованииЧерновика(ЭлектронныйДокумент, ЧерновикДокумента); +КонецФункции + Процедура СохранитьПризнакЗакрытияБаннера(ИмяБаннера) Экспорт ХранилищеОбщихНастроек.Сохранить("ЗакрытыеБаннерыЭПД", ИмяБаннера, Истина); @@ -44,7 +66,26 @@ Функция СведенияОбАдресе(РезультатЗначение, ДополнительныеПараметры) Экспорт - Возврат РаботаСАдресами.СведенияОбАдресе(РезультатЗначение, ДополнительныеПараметры); + СтруктураАдреса = РаботаСАдресами.СведенияОбАдресе(РезультатЗначение, ДополнительныеПараметры); + + Если ЗначениеЗаполнено(СтруктураАдреса) + И СтруктураАдреса.ТипАдреса <> "ВСвободнойФорме" Тогда + + Город = СтруктураАдреса.Город + + ?(СтруктураАдреса.ГородТипКраткий = "", "", " ") + + СтруктураАдреса.ГородТипКраткий; + НаселенныйПункт = СтруктураАдреса.НаселенныйПункт + + ?(СтруктураАдреса.НаселенныйПунктТипКраткий = "", "", " ") + + СтруктураАдреса.НаселенныйПунктТипКраткий; + + Если ВРЕГ(Город) = ВРЕГ(НаселенныйПункт) Тогда + СтруктураАдреса.НаселенныйПункт = ""; + СтруктураАдреса.НаселенныйПунктТипКраткий = ""; + КонецЕсли; + + КонецЕсли; + + Возврат СтруктураАдреса; КонецФункции @@ -63,9 +104,9 @@ КонецФункции -Функция ПолучитьРеквизитыУчастника(Участник, ДобавитьПлатежныеРеквизиты = Ложь) Экспорт +Функция ПолучитьРеквизитыУчастника(Участник, ДобавитьПлатежныеРеквизиты = Ложь, Параметры = Неопределено) Экспорт - Возврат ОбменСГИСЭПД.ПолучитьРеквизитыУчастника(Участник, ДобавитьПлатежныеРеквизиты); + Возврат ОбменСГИСЭПД.ПолучитьРеквизитыУчастника(Участник, ДобавитьПлатежныеРеквизиты, Параметры); КонецФункции @@ -169,6 +210,12 @@ КонецФункции +Функция ИмяТипаСтраны() Экспорт + + Возврат ОбменСГИСЭПДПереопределяемый.ИмяТипаСтраны(); + +КонецФункции + Функция ЭтоУОУ(ТипЭлементаРегламента) Экспорт Возврат ОбменСГИСЭПД.ЭтоУОУ(ТипЭлементаРегламента); @@ -234,7 +281,13 @@ ИначеЕсли ТипЗнч(ДокументСсылка) = Тип("ДокументСсылка.ЭлектронныйПутевойЛист") Тогда ПерваяТранзакция = "OwnerVehicleInfo"; ИначеЕсли ТипЗнч(ДокументСсылка) = Тип("ДокументСсылка.ЭлектронныйДоговорФрахтования") Тогда - ПерваяТранзакция = "SendOrder"; + ПерваяТранзакция = "SendOrder"; + ИначеЕсли ТипЗнч(ДокументСсылка) = Тип("ДокументСсылка.ЭлектронноеПоручениеЭкспедитору") Тогда + ПерваяТранзакция = "EPE_T1"; + ИначеЕсли ТипЗнч(ДокументСсылка) = Тип("ДокументСсылка.ЭлектроннаяЭкспедиторскаяРасписка") Тогда + ПерваяТранзакция = "EER_T1"; + ИначеЕсли ТипЗнч(ДокументСсылка) = Тип("ДокументСсылка.ЭлектроннаяCкладскаяРасписка") Тогда + ПерваяТранзакция = "ESR_T1"; КонецЕсли; ПараметрыВызова.АдресРесурса = ПараметрыВызова.АдресРесурса + "?docflow_id=" + ЭД.ИдентификаторДокументооборота; Если ПерваяТранзакция <> Неопределено Тогда diff --git a/Конфигурация/CommonModules/ОбменСГИСЭПДКлиент/Ext/Module.bsl b/Конфигурация/CommonModules/ОбменСГИСЭПДКлиент/Ext/Module.bsl index e1f7e9724..ed5f4a018 100644 --- a/Конфигурация/CommonModules/ОбменСГИСЭПДКлиент/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ОбменСГИСЭПДКлиент/Ext/Module.bsl @@ -1,5 +1,36 @@ #Область ПрограммныйИнтерфейс +// Параметры: +// СтандартнаяОбработка - Булево - выходной, переопределеяемый параметр. +// ЭлектронныйДокумент - ДокументСсылка.ЭлектронныйДокументВходящийЭДО +// ЧерновикДокумента - ДокументСсылка.ЧерновикЭлектронногоДокументаЭДО +// ОбработчикЗавершения - ОписаниеОповещения - обработчик, который необходимо вызвать после выполнения команды. +Процедура ПриВыполненииКомандыСоздатьДокументПоЧерновику(СтандартнаяОбработка, + Знач ЭлектронныйДокумент, Знач ЧерновикДокумента, Знач ОбработчикЗавершения) Экспорт + + Данные = ОбменСГИСЭПДВызовСервера.ПолучитьДанныеДляТитулаНаОснованииЧерновика(ЭлектронныйДокумент, + ЧерновикДокумента); + + Если Данные = Неопределено + Или Не Данные.ЭтоЭПДЧерновик Тогда + Возврат; + КонецЕсли; + + СтандартнаяОбработка = Ложь; + + Если Данные.Свойство("ДанныеДляЗаполнения") Тогда + + ПараметрыОткрытия = Новый Структура("ЗначенияЗаполнения", Данные.ДанныеДляЗаполнения); + ОткрытьФорму(Данные.ИмяФормы, ПараметрыОткрытия); + + ИтогВыполненияДействийПоЭДО = ИнтерфейсДокументовЭДОКлиентСервер.НовыйИтогВыполненияДействийПоЭДО(); + ИтогВыполненияДействийПоЭДО.ОбработанныеДокументы.Вставить(ЭлектронныйДокумент, Истина); + ВыполнитьОбработкуОповещения(ОбработчикЗавершения, ИтогВыполненияДействийПоЭДО); + + КонецЕсли; + +КонецПроцедуры + Процедура ОткрытьФормуДокументовОснований(Форма) Экспорт Объект = Форма.Объект; @@ -164,6 +195,91 @@ КонецПроцедуры +// Данные заполнения ЭТрН +// +// Возвращаемое значение: +// Структура - Данные для заполнения ЭТрН: +// * Организация - ОпределяемыйТип.Организация - Организация в ЭТрН +// - Неопределено - Не задан +// * Грузоотправитель - ОпределяемыйТип.УчастникЭДО_ЭПД - Грузоотправитель в ЭТрН +// - Неопределено - Не задан +// * Составитель - ОпределяемыйТип.УчастникЭДО_ЭПД - Составитель в ЭТрН +// - Неопределено - Не задан +// * Заказчик - ОпределяемыйТип.КонтрагентЭПД - Заказчик в ЭТрН +// - Неопределено - Не задан +// * Грузополучатель - ОпределяемыйТип.УчастникЭДО_ЭПД - Грузополучатель в ЭТрН +// - Неопределено - Не задан +// * Перевозчик - ОпределяемыйТип.УчастникЭДО_ЭПД - Перевозчик в ЭТрН +// - Неопределено - Не задан +// * ДокументОснование - ОпределяемыйТип.ДокументыОснованияЭТрН_ЭПД - Документ основание ЭТрН +// - Неопределено - Не задан +// * ТаблицаИнформационныеПоля - Строка - Адрес временного хранилища Таблицы инфополей ЭТрН +// - Неопределено - Не задан +Функция НовыеДанныеЗаполненияЭТрН() Экспорт + + Результат = Новый Структура; + + Результат.Вставить("Организация" , Неопределено); + Результат.Вставить("Грузоотправитель" , Неопределено); + Результат.Вставить("Составитель" , Неопределено); + Результат.Вставить("Заказчик" , Неопределено); + Результат.Вставить("Грузополучатель" , Неопределено); + Результат.Вставить("Перевозчик" , Неопределено); + Результат.Вставить("ДокументОснование" , Неопределено); + Результат.Вставить("ТаблицаИнформационныеПоля", Неопределено); + + Возврат Результат; + +КонецФункции + +// Открывает форму создания документа ЭТрН +// +// Параметры: +// ДанныеЗаполнения - См. НовыеДанныеЗаполненияЭТрН +// - Неопределено +// ФормаВладелец - ФормаКлиентскогоПриложения - Форма, из которой открывается форма документа ЭТрН +// - Неопределено - Форма не задана +// Оповещение - ОписаниеОповещения - Обработчик оповещения о завершении работы с формой документа ЭТрН +// - Неопределено - Обработчик не требуется +Процедура СоздатьЭТрН( + Знач ДанныеЗаполнения = Неопределено, + Знач ФормаВладелец = Неопределено, + Знач Оповещение = Неопределено) Экспорт + + ЗначенияЗаполнения = Новый Структура; + + Если ДанныеЗаполнения <> Неопределено Тогда + ЗначенияЗаполнения.Вставить("СоздатьЭТрН", Истина); + ЗначенияЗаполнения.Вставить("Организация", ДанныеЗаполнения.Организация); + ЗначенияЗаполнения.Вставить("ДокументОснование", ДанныеЗаполнения.ДокументОснование); + ЗначенияЗаполнения.Вставить("СсылкаТитулГрузоотправителяГрузоотправитель", ДанныеЗаполнения.Грузоотправитель); + ЗначенияЗаполнения.Вставить("СсылкаТитулГрузоотправителяСоставитель", ДанныеЗаполнения.Составитель); + ЗначенияЗаполнения.Вставить("СсылкаТитулГрузоотправителяЗаказчик", ДанныеЗаполнения.Заказчик); + ЗначенияЗаполнения.Вставить("СсылкаТитулГрузоотправителяГрузополучатель", ДанныеЗаполнения.Грузополучатель); + ЗначенияЗаполнения.Вставить("СсылкаТитулГрузоотправителяПеревозчик", ДанныеЗаполнения.Перевозчик); + ЗначенияЗаполнения.Вставить("ТаблицаИнформационныеПоля", ДанныеЗаполнения.ТаблицаИнформационныеПоля); + КонецЕсли; + + ПараметрыОткрытияФормы = Новый Структура; + ПараметрыОткрытияФормы.Вставить("ЗначенияЗаполнения", ЗначенияЗаполнения); + + Если ФормаВладелец = Неопределено Тогда + РежимОткрытия = РежимБлокировкиПриОткрытииОкнаФормы.Независимый; + Иначе + РежимОткрытия = РежимБлокировкиПриОткрытииОкнаФормы.БлокироватьОкноВладельца; + КонецЕсли; + + ИмяФормы = "Документ.ЭлектроннаяТранспортнаяНакладная.ФормаОбъекта"; + + ОткрытьФорму( + ИмяФормы, + ПараметрыОткрытияФормы, + ФормаВладелец, , , , + Оповещение, + РежимОткрытия); + +КонецПроцедуры + #КонецОбласти #Область СлужебныйПрограммныйИнтерфейс @@ -688,6 +804,7 @@ КлючНастроекОтправки.ВидДокумента = ВидДокумента; КлючНастроекОтправки.Отправитель = Организация; КлючНастроекОтправки.Получатель = Контрагент; + КлючНастроекОтправки.ВсегдаСоздаватьАвтоматическоеПриглашение = Истина; НастройкиОтправки = ОбменСГИСЭПДВызовСервера.НастройкиОтправки(КлючНастроекОтправки); @@ -2078,7 +2195,7 @@ КонецПроцедуры -Процедура ВводАдреса(ИмяЭлемента, Форма, ВладелецАдреса = Неопределено, ТекущиеДанные = Неопределено) Экспорт +Процедура ВводАдреса(ИмяЭлемента, Форма, ВладелецАдреса = Неопределено, ТекущиеДанные = Неопределено, Параметры = Неопределено) Экспорт СтруктураРеквизитовАдреса = ОбменСГИСЭПДКлиентСервер.ПолучитьСтруктуруАдресаУчастника(ИмяЭлемента, Форма, ТекущиеДанные); @@ -2095,6 +2212,8 @@ ДополнительныеПараметры.Вставить("Форма", Форма); ДополнительныеПараметры.Вставить("ТекущиеДанные", ТекущиеДанные); ДополнительныеПараметры.Вставить("ВладелецАдреса", ВладелецАдреса); + ДополнительныеПараметры.Вставить("Параметры", Параметры); + Оповещение = Новый ОписаниеОповещения("ВводАдреса_Завершение", ЭтотОбъект, ДополнительныеПараметры); СтандартнаяОбработка = Истина; @@ -2111,8 +2230,13 @@ ДополнительныеПараметры.Свойство("ТекущиеДанные", ТекущиеДанные); Если Результат <> Неопределено Тогда ОбменСГИСЭПДКлиентПереопределяемый.ПриЗавершенииВводаАдреса(Результат, ДополнительныеПараметры); + + Параметры = Неопределено; + ДополнительныеПараметры.Свойство("Параметры", Параметры); - ОбменСГИСЭПДКлиентСервер.ЗаполнитьРеквизитыАдреса(ДополнительныеПараметры.Форма, Результат, ДополнительныеПараметры.ИмяЭлемента, ТекущиеДанные); + ОбменСГИСЭПДКлиентСервер.ЗаполнитьРеквизитыАдреса(ДополнительныеПараметры.Форма, + Результат, ДополнительныеПараметры.ИмяЭлемента, ТекущиеДанные, Параметры); + ДополнительныеПараметры.Форма.Модифицированность = Истина; ВладелецАдреса = Неопределено; Если ДополнительныеПараметры.Свойство("ВладелецАдреса", ВладелецАдреса) Тогда @@ -2284,6 +2408,20 @@ Иначе Результат = Объект.ИдентификаторГрузополучателя; КонецЕсли; + ИначеЕсли ТипЗнч(Объект.Ссылка) = Тип("ДокументСсылка.ЭлектронноеПоручениеЭкспедитору") Тогда + Если ТипЗнч(Объект.СсылкаТитулЗаказчикаЗаказчик) = ТипОрганизация + Или ТипЗнч(Объект.СсылкаТитулЗаказчикаСоставитель) = ТипОрганизация Тогда + Результат = Объект.ИдентификаторЗаказчика; + Иначе + Результат = Объект.ИдентификаторЭкспедитора; + КонецЕсли; + ИначеЕсли ТипЗнч(Объект.Ссылка) = Тип("ДокументСсылка.ЭлектроннаяЭкспедиторскаяРасписка") + Или ТипЗнч(Объект.Ссылка) = Тип("ДокументСсылка.ЭлектроннаяCкладскаяРасписка") Тогда + Если ТипЗнч(Объект.СсылкаТитулЭкспедитораЭкспедитор) = ТипОрганизация + Или ТипЗнч(Объект.СсылкаТитулЭкспедитораСоставитель) = ТипОрганизация Тогда + Результат = Объект.ИдентификаторЭкспедитора; + КонецЕсли; + КонецЕсли; Возврат Результат; @@ -3703,6 +3841,23 @@ ОбменСГИСЭПДКлиентСервер.УдалитьРеквизитыПоГруппеДанных(Форма, "ТитулМедосмотрПослеСтороннийМедработник", КонтейнерОтображаемойВерсии); КонецЕсли; + //ЭПЭ + ИначеЕсли Объект.ТекущийТитул = ПредопределенноеЗначение("Перечисление.ТипыЭлементовРегламентаЭДО.ЭПЭ_Титул1") + Или Объект.ТекущийТитул = ПредопределенноеЗначение("Перечисление.ТипыЭлементовРегламентаЭДО.ЭПЭ_Титул2") + Или Объект.ТекущийТитул = ПредопределенноеЗначение("Перечисление.ТипыЭлементовРегламентаЭДО.ЭПЭ_Титул3") Тогда + + ЗаполнитьИдентификациюФайлаОбменаЭПЭ(Форма, Объект, КонтейнерОтображаемойВерсии); + + //ЭЭР + ИначеЕсли Объект.ТекущийТитул = ПредопределенноеЗначение("Перечисление.ТипыЭлементовРегламентаЭДО.ЭЭР_Титул1") Тогда + + ЗаполнитьИдентификациюФайлаОбменаЭЭР(Форма, Объект, КонтейнерОтображаемойВерсии); + + //ЭСР + ИначеЕсли Объект.ТекущийТитул = ПредопределенноеЗначение("Перечисление.ТипыЭлементовРегламентаЭДО.ЭСР_Титул1") Тогда + + ЗаполнитьИдентификациюФайлаОбменаЭСР(Форма, Объект, КонтейнерОтображаемойВерсии); + КонецЕсли; СчетчикЦикла = 1; @@ -3929,6 +4084,27 @@ Объект.ИдентификаторТехконтроль, Объект.ИдентификаторПоказанияОдометра, НаличиеИныхПолучателей); + ИначеЕсли ТипЗнч(Объект.Ссылка) = Тип("ДокументСсылка.ЭлектронноеПоручениеЭкспедитору") Тогда + ИдФайл = ПолучитьИмяФайла(ИнформацияПоПрефиксамТитула.ШаблонИмениФайла, + Объект.ИдентификаторЗаказчика, + , + Объект.ИдентификаторЭкспедитора, + , + НаличиеИныхПолучателей); + ИначеЕсли ТипЗнч(Объект.Ссылка) = Тип("ДокументСсылка.ЭлектроннаяЭкспедиторскаяРасписка") Тогда + ИдФайл = ПолучитьИмяФайла(ИнформацияПоПрефиксамТитула.ШаблонИмениФайла, + Объект.ИдентификаторЗаказчика, + , + Объект.ИдентификаторЭкспедитора, + , + НаличиеИныхПолучателей); + ИначеЕсли ТипЗнч(Объект.Ссылка) = Тип("ДокументСсылка.ЭлектроннаяCкладскаяРасписка") Тогда + ИдФайл = ПолучитьИмяФайла(ИнформацияПоПрефиксамТитула.ШаблонИмениФайла, + Объект.ИдентификаторЗаказчика, + , + Объект.ИдентификаторЭкспедитора, + , + НаличиеИныхПолучателей); КонецЕсли; ОбменСГИСЭПДКлиентСервер.УстановитьЗначениеРеквизитаВСтруктуреФормы( @@ -3971,6 +4147,267 @@ КонецПроцедуры +Процедура ЗаполнитьИдентификациюФайлаОбменаЭСР(Форма, Объект, КонтейнерОтображаемойВерсии) + + + ОбменСГИСЭПДКлиентСервер.УстановитьЗначениеРеквизитаВСтруктуреФормы(Форма, + "ТитулЭкспедитораДата", + Объект.Дата, Ложь, + КонтейнерОтображаемойВерсии); + + ОбменСГИСЭПДКлиентСервер.УстановитьЗначениеРеквизитаВСтруктуреФормы(Форма, + "ТитулЭкспедитораНомер", + Объект.Номер, Ложь, + КонтейнерОтображаемойВерсии); + + ОбменСГИСЭПДКлиентСервер.УстановитьЗначениеРеквизитаВСтруктуреФормы(Форма, + "ТитулЭкспедитораНаименованиеДокумента", + "электронная складская расписка", , + КонтейнерОтображаемойВерсии); + + ОбменСГИСЭПДКлиентСервер.УстановитьЗначениеРеквизитаВСтруктуреФормы(Форма, + "ТитулЭкспедитораСодержаниеОперации", + "выдача электронной складской расписки", , + КонтейнерОтображаемойВерсии); + + СчетчикЦикла = 1; + КлючСтруктуры = "ТитулЭкспедитораОписаниеГруза__" + СчетчикЦикла + "__ИдентификаторСтроки"; + ИдентификаторСтроки = Неопределено; + СтруктураРеквизитовТитула = КонтейнерОтображаемойВерсии.СтруктураРеквизитовЗаполнение[КонтейнерОтображаемойВерсии.ПрефиксТитула][КонтейнерОтображаемойВерсии.НомерВерсии]; + Пока СтруктураРеквизитовТитула.Свойство(КлючСтруктуры, ИдентификаторСтроки) Цикл + + ЗначенияСтроки = Новый Структура("Маркировка", "Отсутствует"); + ОбменСГИСЭПДКлиентСервер.УстановитьЗначениеПодчиненнойСтрокиВСтруктуреФормы( + Форма, "ТитулЭкспедитораОписаниеГрузаМарк", ИдентификаторСтроки, ЗначенияСтроки, Ложь, КонтейнерОтображаемойВерсии); + + СтГрузСтоимость = 0; + КлючСвойства = "ТитулЭкспедитораОписаниеГруза__" + СчетчикЦикла + "__ОбъявлСтГрузСтоимость"; + Если Не СтруктураРеквизитовТитула.Свойство(КлючСвойства, СтГрузСтоимость) Тогда + КлючСвойства = "ТитулЭкспедитораОписаниеГруза__" + СчетчикЦикла + "__ДейстСтГрузСтоимость"; + СтруктураРеквизитовТитула.Свойство(КлючСвойства, СтГрузСтоимость); + КонецЕсли; + КлючСвойства = "ТитулЭкспедитораОписаниеГруза__" + СчетчикЦикла + "__ВозмУкСтГруз"; + ОбменСГИСЭПДКлиентСервер.УстановитьЗначениеРеквизитаВСтруктуреФормы( + Форма, КлючСвойства, ЗначениеЗаполнено(СтГрузСтоимость), Истина, КонтейнерОтображаемойВерсии); + + СчетчикЦикла = СчетчикЦикла + 1; + КлючСтруктуры = "ТитулЭкспедитораОписаниеГруза__" + СчетчикЦикла + "__ИдентификаторСтроки"; + КонецЦикла; + + СчетчикЦикла = 1; + КлючСтруктуры = "ТитулЭкспедитораГрузы__" + СчетчикЦикла + "__ИдентификаторСтроки"; + ИдентификаторСтроки = Неопределено; + СтруктураРеквизитовТитула = КонтейнерОтображаемойВерсии.СтруктураРеквизитовЗаполнение[КонтейнерОтображаемойВерсии.ПрефиксТитула][КонтейнерОтображаемойВерсии.НомерВерсии]; + Пока СтруктураРеквизитовТитула.Свойство(КлючСтруктуры, ИдентификаторСтроки) Цикл + + ОбъявлСтГруз = 0; + КлючСвойства = "ТитулЭкспедитораГрузы__" + СчетчикЦикла + "__ОбъявлСтГрузПартСтГр"; + Если Не СтруктураРеквизитовТитула.Свойство(КлючСвойства, ОбъявлСтГруз) Тогда + КлючСвойства = "ТитулЭкспедитораГрузы__" + СчетчикЦикла + "__ДейстСтГрузПартСтГр"; + СтруктураРеквизитовТитула.Свойство(КлючСвойства, ОбъявлСтГруз); + КонецЕсли; + КлючСвойства = "ТитулЭкспедитораГрузы__" + СчетчикЦикла + "__ВозмУкСтПарт"; + ОбменСГИСЭПДКлиентСервер.УстановитьЗначениеРеквизитаВСтруктуреФормы( + Форма, КлючСвойства, ЗначениеЗаполнено(ОбъявлСтГруз), Истина, КонтейнерОтображаемойВерсии); + + СчетчикЦикла = СчетчикЦикла + 1; + КлючСтруктуры = "ТитулЭкспедитораГрузы__" + СчетчикЦикла + "__ИдентификаторСтроки"; + КонецЦикла; + + ОбменСГИСЭПДКлиентСервер.УстановитьЗначениеРеквизитаВСтруктуреФормы(Форма, + "ТитулЭкспедитораВозмУкОбщСтГруз", + Ложь, Ложь, КонтейнерОтображаемойВерсии); + + +КонецПроцедуры + +Процедура ЗаполнитьИдентификациюФайлаОбменаЭЭР(Форма, Объект, КонтейнерОтображаемойВерсии) + + + ОбменСГИСЭПДКлиентСервер.УстановитьЗначениеРеквизитаВСтруктуреФормы(Форма, + "ТитулЭкспедитораДата", + Объект.Дата, Ложь, + КонтейнерОтображаемойВерсии); + + ОбменСГИСЭПДКлиентСервер.УстановитьЗначениеРеквизитаВСтруктуреФормы(Форма, + "ТитулЭкспедитораНомер", + Объект.Номер, Ложь, + КонтейнерОтображаемойВерсии); + + ОбменСГИСЭПДКлиентСервер.УстановитьЗначениеРеквизитаВСтруктуреФормы(Форма, + "ТитулЭкспедитораНаименованиеДокумента", + "электронная экспедиторская расписка", , + КонтейнерОтображаемойВерсии); + + ОбменСГИСЭПДКлиентСервер.УстановитьЗначениеРеквизитаВСтруктуреФормы(Форма, + "ТитулЭкспедитораСодержаниеОперации", + "груз принят во владение экспедитором", , + КонтейнерОтображаемойВерсии); + + СчетчикЦикла = 1; + КлючСтруктуры = "ТитулЭкспедитораОписаниеГруза__" + СчетчикЦикла + "__ИдентификаторСтроки"; + ИдентификаторСтроки = Неопределено; + СтруктураРеквизитовТитула = КонтейнерОтображаемойВерсии.СтруктураРеквизитовЗаполнение[КонтейнерОтображаемойВерсии.ПрефиксТитула][КонтейнерОтображаемойВерсии.НомерВерсии]; + Пока СтруктураРеквизитовТитула.Свойство(КлючСтруктуры, ИдентификаторСтроки) Цикл + + ЗначенияСтроки = Новый Структура("Маркировка", "Отсутствует"); + ОбменСГИСЭПДКлиентСервер.УстановитьЗначениеПодчиненнойСтрокиВСтруктуреФормы( + Форма, "ТитулЭкспедитораОписаниеГрузаМарк", ИдентификаторСтроки, ЗначенияСтроки, Ложь, КонтейнерОтображаемойВерсии); + + СтГрузСтоимость = 0; + КлючСвойства = "ТитулЭкспедитораОписаниеГруза__" + СчетчикЦикла + "__ОбъявлСтГрузСтоимость"; + Если Не СтруктураРеквизитовТитула.Свойство(КлючСвойства, СтГрузСтоимость) Тогда + КлючСвойства = "ТитулЭкспедитораОписаниеГруза__" + СчетчикЦикла + "__ДейстСтГрузСтоимость"; + СтруктураРеквизитовТитула.Свойство(КлючСвойства, СтГрузСтоимость); + КонецЕсли; + КлючСвойства = "ТитулЭкспедитораОписаниеГруза__" + СчетчикЦикла + "__ВозмУкСтГруз"; + ОбменСГИСЭПДКлиентСервер.УстановитьЗначениеРеквизитаВСтруктуреФормы( + Форма, КлючСвойства, ЗначениеЗаполнено(СтГрузСтоимость), Истина, КонтейнерОтображаемойВерсии); + + СчетчикЦикла = СчетчикЦикла + 1; + КлючСтруктуры = "ТитулЭкспедитораОписаниеГруза__" + СчетчикЦикла + "__ИдентификаторСтроки"; + КонецЦикла; + + СчетчикЦикла = 1; + КлючСтруктуры = "ТитулЭкспедитораГрузы__" + СчетчикЦикла + "__ИдентификаторСтроки"; + ИдентификаторСтроки = Неопределено; + СтруктураРеквизитовТитула = КонтейнерОтображаемойВерсии.СтруктураРеквизитовЗаполнение[КонтейнерОтображаемойВерсии.ПрефиксТитула][КонтейнерОтображаемойВерсии.НомерВерсии]; + Пока СтруктураРеквизитовТитула.Свойство(КлючСтруктуры, ИдентификаторСтроки) Цикл + + ОбъявлСтГруз = 0; + КлючСвойства = "ТитулЭкспедитораГрузы__" + СчетчикЦикла + "__ОбъявлСтГрузПартСтГр"; + Если Не СтруктураРеквизитовТитула.Свойство(КлючСвойства, ОбъявлСтГруз) Тогда + КлючСвойства = "ТитулЭкспедитораГрузы__" + СчетчикЦикла + "__ДейстСтГрузПартСтГр"; + СтруктураРеквизитовТитула.Свойство(КлючСвойства, ОбъявлСтГруз); + КонецЕсли; + КлючСвойства = "ТитулЭкспедитораГрузы__" + СчетчикЦикла + "__ВозмУкСтПарт"; + ОбменСГИСЭПДКлиентСервер.УстановитьЗначениеРеквизитаВСтруктуреФормы( + Форма, КлючСвойства, ЗначениеЗаполнено(ОбъявлСтГруз), Истина, КонтейнерОтображаемойВерсии); + + СчетчикЦикла = СчетчикЦикла + 1; + КлючСтруктуры = "ТитулЭкспедитораГрузы__" + СчетчикЦикла + "__ИдентификаторСтроки"; + КонецЦикла; + + ОбменСГИСЭПДКлиентСервер.УстановитьЗначениеРеквизитаВСтруктуреФормы(Форма, + "ТитулЭкспедитораВозмУкОбщСтГруз", + Ложь, Ложь, КонтейнерОтображаемойВерсии); + + +КонецПроцедуры + +Процедура ЗаполнитьИдентификациюФайлаОбменаЭПЭ(Форма, Объект, КонтейнерОтображаемойВерсии) + + Если Объект.ТекущийТитул = ПредопределенноеЗначение("Перечисление.ТипыЭлементовРегламентаЭДО.ЭПЭ_Титул1") Тогда + ЗаполнитьИдентификациюФайлаОбменаЭПЭТитул1(Форма, Объект, КонтейнерОтображаемойВерсии); + ИначеЕсли Объект.ТекущийТитул = ПредопределенноеЗначение("Перечисление.ТипыЭлементовРегламентаЭДО.ЭПЭ_Титул2") Тогда + ЗаполнитьИдентификациюФайлаОбменаЭПЭТитул2(Форма, Объект, КонтейнерОтображаемойВерсии); + ИначеЕсли Объект.ТекущийТитул = ПредопределенноеЗначение("Перечисление.ТипыЭлементовРегламентаЭДО.ЭПЭ_Титул3") Тогда + ЗаполнитьИдентификациюФайлаОбменаЭПЭТитул3(Форма, Объект, КонтейнерОтображаемойВерсии); + КонецЕсли; + +КонецПроцедуры + +Процедура ЗаполнитьИдентификациюФайлаОбменаЭПЭТитул1(Форма, Объект, КонтейнерОтображаемойВерсии) + + ОбменСГИСЭПДКлиентСервер.УстановитьЗначениеРеквизитаВСтруктуреФормы(Форма, + "ТитулЗаказчикаДата", + Объект.Дата, Ложь, + КонтейнерОтображаемойВерсии); + + ОбменСГИСЭПДКлиентСервер.УстановитьЗначениеРеквизитаВСтруктуреФормы(Форма, + "ТитулЗаказчикаНомер", + Объект.Номер, Ложь, + КонтейнерОтображаемойВерсии); + + ОбменСГИСЭПДКлиентСервер.УстановитьЗначениеРеквизитаВСтруктуреФормы(Форма, + "ТитулЗаказчикаНаименованиеДокумента", + "электронное поручение экспедитору, информация клиента", , + КонтейнерОтображаемойВерсии); + + ОбменСГИСЭПДКлиентСервер.УстановитьЗначениеРеквизитаВСтруктуреФормы(Форма, + "ТитулЗаказчикаСодержаниеОперации", + "представление электронного поручения экспедитору", , + КонтейнерОтображаемойВерсии); + + СтруктураРеквизитовТитула = КонтейнерОтображаемойВерсии.СтруктураРеквизитовЗаполнение[КонтейнерОтображаемойВерсии.ПрефиксТитула][КонтейнерОтображаемойВерсии.НомерВерсии]; + + ОбменСГИСЭПДКлиентСервер.УстановитьЗначениеРеквизитаВСтруктуреФормы(Форма, + "ТитулЗаказчикаДокГруз", + СтруктураРеквизитовТитула.Свойство("ТитулЗаказчикаСопроводительныеДокументы__1__ИдентификаторСтроки"), , + КонтейнерОтображаемойВерсии); + + + СчетчикЦикла = 1; + КлючСтруктуры = "ТитулЗаказчикаОписаниеГруза__" + СчетчикЦикла + "__ИдентификаторСтроки"; + ИдентификаторСтроки = Неопределено; + Пока СтруктураРеквизитовТитула.Свойство(КлючСтруктуры, ИдентификаторСтроки) Цикл + ЗначенияСтроки = Новый Структура("Маркировка", "Отсутствует"); + ОбменСГИСЭПДКлиентСервер.УстановитьЗначениеПодчиненнойСтрокиВСтруктуреФормы( + Форма, "ТитулЗаказчикаОписаниеГрузаМарк", ИдентификаторСтроки, ЗначенияСтроки, Ложь, КонтейнерОтображаемойВерсии); + СчетчикЦикла = СчетчикЦикла + 1; + КлючСтруктуры = "ТитулЗаказчикаОписаниеГруза__" + СчетчикЦикла + "__ИдентификаторСтроки"; + КонецЦикла; + +КонецПроцедуры + +Процедура ЗаполнитьИдентификациюФайлаОбменаЭПЭТитул2(Форма, Объект, КонтейнерОтображаемойВерсии) + + ОбменСГИСЭПДКлиентСервер.УстановитьЗначениеРеквизитаВСтруктуреФормы(Форма, + "ТитулЭкспедитораНаименованиеДокумента", + "электронное поручение экспедитору, информация экспедитора", , + КонтейнерОтображаемойВерсии); + + ОбменСГИСЭПДКлиентСервер.УстановитьЗначениеРеквизитаВСтруктуреФормы(Форма, + "ТитулЭкспедитораСодержаниеОперации", + "согласование подлежащих оказанию транспортно-экспедиционных услуг и условий", , + КонтейнерОтображаемойВерсии); + + ОбменСГИСЭПДКлиентСервер.УстановитьЗначениеРеквизитаВСтруктуреФормы( + Форма, "ТитулЭкспедитораФайлЗаказчикаИдентификатор", + Объект.ТитулЗаказчикаИдентификаторФайла, , КонтейнерОтображаемойВерсии); + + ОбменСГИСЭПДКлиентСервер.УстановитьЗначениеРеквизитаВСтруктуреФормы( + Форма, "ТитулЭкспедитораФайлЗаказчикаДатаФормирования", Объект.ТитулЗаказчикаДатаФормированияФайла, , КонтейнерОтображаемойВерсии); + + ОбменСГИСЭПДКлиентСервер.УстановитьЗначениеРеквизитаВСтруктуреФормы( + Форма, "ТитулЭкспедитораФайлЗаказчикаВремяФормирования", Объект.ТитулЗаказчикаВремяФормированияФайла, , КонтейнерОтображаемойВерсии); + + ОбменСГИСЭПДКлиентСервер.УстановитьЗначениеРеквизитаВСтруктуреФормы( + Форма, "ТитулЭкспедитораФайлЗаказчикаЭлектроннаяПодпись", + ОбменСГИСЭПДВызовСервера.ПолучитьПодписьТитулаBase64(Объект.Ссылка, + ПредопределенноеЗначение("Перечисление.ТипыЭлементовРегламентаЭДО.ЭПЭ_Титул1")), , КонтейнерОтображаемойВерсии); + +КонецПроцедуры + +Процедура ЗаполнитьИдентификациюФайлаОбменаЭПЭТитул3(Форма, Объект, КонтейнерОтображаемойВерсии) + + ОбменСГИСЭПДКлиентСервер.УстановитьЗначениеРеквизитаВСтруктуреФормы(Форма, + "ТитулЗаказчикаОтзывНаименованиеДокумента", + "электронное поручение экспедитору, информация клиента об отзыве поручения экспедитору", , + КонтейнерОтображаемойВерсии); + + ОбменСГИСЭПДКлиентСервер.УстановитьЗначениеРеквизитаВСтруктуреФормы(Форма, + "ТитулЗаказчикаОтзывСодержаниеОперации", + "отзыв поручения экспедитору и обязательство возместить экспедитору фактические расходы", , + КонтейнерОтображаемойВерсии); + + ОбменСГИСЭПДКлиентСервер.УстановитьЗначениеРеквизитаВСтруктуреФормы( + Форма, "ТитулЗаказчикаОтзывФайлЗаказчикаИдентификатор", + Объект.ТитулЗаказчикаИдентификаторФайла, , КонтейнерОтображаемойВерсии); + + ОбменСГИСЭПДКлиентСервер.УстановитьЗначениеРеквизитаВСтруктуреФормы( + Форма, "ТитулЗаказчикаОтзывФайлЗаказчикаДатаФормирования", Объект.ТитулЗаказчикаДатаФормированияФайла, , КонтейнерОтображаемойВерсии); + + ОбменСГИСЭПДКлиентСервер.УстановитьЗначениеРеквизитаВСтруктуреФормы( + Форма, "ТитулЗаказчикаОтзывФайлЗаказчикаВремяФормирования", Объект.ТитулЗаказчикаВремяФормированияФайла, , КонтейнерОтображаемойВерсии); + + ОбменСГИСЭПДКлиентСервер.УстановитьЗначениеРеквизитаВСтруктуреФормы( + Форма, "ТитулЗаказчикаОтзывФайлЗаказчикаЭлектроннаяПодпись", + ОбменСГИСЭПДВызовСервера.ПолучитьПодписьТитулаBase64(Объект.Ссылка, + ПредопределенноеЗначение("Перечисление.ТипыЭлементовРегламентаЭДО.ЭПЭ_Титул1")), , КонтейнерОтображаемойВерсии); + +КонецПроцедуры + Процедура ОтправитьУОУ(ДокументСсылка, ТекущийТитул, Текст, Форма, ИдентификаторыСтрок = Неопределено) Экспорт Если ЗначениеЗаполнено(Текст) = Ложь Тогда @@ -4268,6 +4705,22 @@ ПараметрыВыполненияДействийПоЭДО.ОбъектыДействий.ОбъектыУчета.Добавить(Объект.Ссылка); ПараметрыВыполненияДействийПоЭДО.НаборДействий = НаборДействий; + СсылкаНаЧерновик = Неопределено; + + Если Объект.ТекущийТитул = ПредопределенноеЗначение("Перечисление.ТипыЭлементовРегламентаЭДО.ЭТрН_Титул1") + Или Объект.ТекущийТитул = ПредопределенноеЗначение("Перечисление.ТипыЭлементовРегламентаЭДО.ЭЗЗ_Титул1") Тогда + + СсылкаНаЧерновик = ОбменСГИСЭПДКлиентСервер.ПолучитьЗначениеРеквизитаИзСтруктурыФормы( + Форма, "СсылкаТитулГрузоотправителяЧерновик", Неопределено); + + КонецЕсли; + + Если ЗначениеЗаполнено(СсылкаНаЧерновик) Тогда + ДопПараметрЧерновик = ЭлектронныеДокументыЭДОКлиентСервер.НовыеДополнительныеПараметрыДействия(); + ДопПараметрЧерновик.Черновик = СсылкаНаЧерновик; + ПараметрыВыполненияДействийПоЭДО.ДополнительныеПараметрыДействий[Объект.Ссылка] = ДопПараметрЧерновик; + КонецЕсли; + ДополнительныеПараметрыУспешногоЗавершения = Новый Структура; ДополнительныеПараметрыУспешногоЗавершения.Вставить("НаборДействий", НаборДействий); ДополнительныеПараметрыУспешногоЗавершения.Вставить("ЭтоИсправление", ЭтоИсправление); @@ -4275,6 +4728,8 @@ ДополнительныеПараметрыВыполнения = Новый Структура; ДополнительныеПараметрыВыполнения.Вставить("ЭтоИсправление", ЭтоИсправление); + ДополнительныеПараметрыВыполнения.Вставить("ПараметрыВыполненияДействийПоЭДО", ПараметрыВыполненияДействийПоЭДО); + //@skip-check notify-description-to-server-procedure ДополнительныеПараметрыВыполнения.Вставить("ОповещениеУспешногоЗавершения", Новый ОписаниеОповещения("ПослеВыполненияДействийПоЭДО", Форма, diff --git a/Конфигурация/CommonModules/ОбменСГИСЭПДКлиентПереопределяемый/Ext/Module.bsl b/Конфигурация/CommonModules/ОбменСГИСЭПДКлиентПереопределяемый/Ext/Module.bsl index 992342db6..3ef840ffb 100644 --- a/Конфигурация/CommonModules/ОбменСГИСЭПДКлиентПереопределяемый/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ОбменСГИСЭПДКлиентПереопределяемый/Ext/Module.bsl @@ -55,6 +55,33 @@ Процедура ОбработкаЗаполненияНаФормеЭДФ(Форма, ДанныеЗаполнения) Экспорт КонецПроцедуры +//@skip-check module-empty-method +// Обработчик заполнения документа. +// +// Параметры: +// Форма - ФормаКлиентскогоПриложения - Форма: +// ДанныеЗаполнения - произвольный - данные для заполнения +Процедура ОбработкаЗаполненияНаФормеЭПЭ(Форма, ДанныеЗаполнения) Экспорт +КонецПроцедуры + +//@skip-check module-empty-method +// Обработчик заполнения документа. +// +// Параметры: +// Форма - ФормаКлиентскогоПриложения - Форма: +// ДанныеЗаполнения - произвольный - данные для заполнения +Процедура ОбработкаЗаполненияНаФормеЭЭР(Форма, ДанныеЗаполнения) Экспорт +КонецПроцедуры + +//@skip-check module-empty-method +// Обработчик заполнения документа. +// +// Параметры: +// Форма - ФормаКлиентскогоПриложения - Форма: +// ДанныеЗаполнения - произвольный - данные для заполнения +Процедура ОбработкаЗаполненияНаФормеЭСР(Форма, ДанныеЗаполнения) Экспорт +КонецПроцедуры + //@skip-check module-empty-method // При вводе адреса. // @@ -96,6 +123,18 @@ Процедура ОбработкаОповещенияНаФормеСпискаЭПД(Форма, ИмяСобытия, Параметр, Источник) Экспорт КонецПроцедуры +// Заполнение договора начало выбора. Позволяет сделать отбор по организации и контрагенту +// +// Параметры: +// Организация Организация +// Контрагент Контрагент +// Элемент Элемент +// ДанныеВыбора Данные выбора +// ВыборДобавлением Выбор добавлением +// СтандартнаяОбработка Стандартная обработка +Процедура ЗаполнениеДоговораНачалоВыбора(Организация, Контрагент, Элемент, ДанныеВыбора, ВыборДобавлением, СтандартнаяОбработка) Экспорт +КонецПроцедуры + #КонецОбласти #Область СлужебныйПрограммныйИнтерфейс diff --git a/Конфигурация/CommonModules/ОбменСГИСЭПДКлиентСервер/Ext/Module.bsl b/Конфигурация/CommonModules/ОбменСГИСЭПДКлиентСервер/Ext/Module.bsl index 21ff55c62..c107f70a0 100644 --- a/Конфигурация/CommonModules/ОбменСГИСЭПДКлиентСервер/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ОбменСГИСЭПДКлиентСервер/Ext/Module.bsl @@ -96,6 +96,25 @@ СоответствиеТитулов.Вставить(ПредопределенноеЗначение("Перечисление.ТипыЭлементовРегламентаЭДО.ЭДФ_Титул2"), НСтр("ru='Подтверждение'")); КонецЕсли; + Если ТипЗнч(Документ) = Тип("ДокументСсылка.ЭлектронноеПоручениеЭкспедитору") + Или Документ = Неопределено Тогда + СоответствиеТитулов.Вставить(ПредопределенноеЗначение("Перечисление.ТипыЭлементовРегламентаЭДО.ЭПЭ_Титул1"), НСтр("ru='Оформление'")); + СоответствиеТитулов.Вставить(ПредопределенноеЗначение("Перечисление.ТипыЭлементовРегламентаЭДО.ЭПЭ_Титул2"), НСтр("ru='Подтверждение'")); + СоответствиеТитулов.Вставить(ПредопределенноеЗначение("Перечисление.ТипыЭлементовРегламентаЭДО.ЭПЭ_Титул3"), НСтр("ru='Отзыв'")); + КонецЕсли; + + Если ТипЗнч(Документ) = Тип("ДокументСсылка.ЭлектроннаяЭкспедиторскаяРасписка") + Или Документ = Неопределено Тогда + СоответствиеТитулов.Вставить(ПредопределенноеЗначение("Перечисление.ТипыЭлементовРегламентаЭДО.ЭЭР_Титул1"), НСтр("ru='Оформление'")); + КонецЕсли; + + Если ТипЗнч(Документ) = Тип("ДокументСсылка.ЭлектроннаяCкладскаяРасписка") + Или Документ = Неопределено Тогда + СоответствиеТитулов.Вставить(ПредопределенноеЗначение("Перечисление.ТипыЭлементовРегламентаЭДО.ЭСР_Титул1"), НСтр("ru='Оформление'")); + КонецЕсли; + + + Возврат СоответствиеТитулов; КонецФункции @@ -279,6 +298,23 @@ МассивПрефиксов.Добавить("ТитулФрахтовщика"); КонецЕсли; + Если ИмяДокумента = "Документ.ЭлектронноеПоручениеЭкспедитору" + Или Не ЗначениеЗаполнено(ИмяДокумента) Тогда + МассивПрефиксов.Добавить("ТитулЗаказчикаОтзыв"); + МассивПрефиксов.Добавить("ТитулЗаказчика"); + МассивПрефиксов.Добавить("ТитулЭкспедитора"); + КонецЕсли; + + Если ИмяДокумента = "Документ.ЭлектроннаяЭкспедиторскаяРасписка" + Или Не ЗначениеЗаполнено(ИмяДокумента) Тогда + МассивПрефиксов.Добавить("ТитулЭкспедитора"); + КонецЕсли; + + Если ИмяДокумента = "Документ.ЭлектроннаяCкладскаяРасписка" + Или Не ЗначениеЗаполнено(ИмяДокумента) Тогда + МассивПрефиксов.Добавить("ТитулЭкспедитора"); + КонецЕсли; + Возврат МассивПрефиксов; КонецФункции @@ -554,6 +590,8 @@ Элементы = Форма.Элементы; Объект = Форма.Объект; + Элементы.ГруппаДемоРежим.Видимость = ОбменСГИСЭПДВызовСервера.ДемоРежимВключен(); + ДанныеСостоянияЭДО = ИнтеграцияЭДОВызовСервера.ДанныеСостоянияЭДОДляФормыОбъектаУчета(Объект.Ссылка); ТитулыПоДокументу = ОбменСГИСЭПДВызовСервера.ПолучитьТитулыПоДокументу(Объект.Ссылка, Истина); @@ -673,6 +711,8 @@ Элементы = Форма.Элементы; Объект = Форма.Объект; + Элементы.ГруппаДемоРежим.Видимость = ОбменСГИСЭПДВызовСервера.ДемоРежимВключен(); + ДанныеСостоянияЭДО = ИнтеграцияЭДОВызовСервера.ДанныеСостоянияЭДОДляФормыОбъектаУчета(Объект.Ссылка); ТитулыПоДокументу = ОбменСГИСЭПДВызовСервера.ПолучитьТитулыПоДокументу(Объект.Ссылка, Истина); ВерсииТитулов = ОбменСГИСЭПДВызовСервера.ПолучитьВерсииТитуловДокумента(Объект.Ссылка, Объект.Организация); @@ -858,7 +898,6 @@ Элементы.ОтменаВводаДопТитула.Видимость = ВводимЛюбойДопТитул; Если (Объект.ТекущийТитул = ПредопределенноеЗначение("Перечисление.ТипыЭлементовРегламентаЭДО.ЭТрН_Титул2") - Или Объект.ТекущийТитул = ПредопределенноеЗначение("Перечисление.ТипыЭлементовРегламентаЭДО.ЭТрН_Титул4") Или Объект.ТекущийТитул = ПредопределенноеЗначение("Перечисление.ТипыЭлементовРегламентаЭДО.ЭТрН_Титул6")) И Форма.ВводимИсправление = Ложь Тогда Элементы.ФормаОтправитьУОУ.Видимость = Истина; @@ -980,6 +1019,8 @@ Элементы = Форма.Элементы; Объект = Форма.Объект; + Элементы.ГруппаДемоРежим.Видимость = ОбменСГИСЭПДВызовСервера.ДемоРежимВключен(); + ДанныеСостоянияЭДО = ИнтеграцияЭДОВызовСервера.ДанныеСостоянияЭДОДляФормыОбъектаУчета(Объект.Ссылка); ТитулыПоДокументу = ОбменСГИСЭПДВызовСервера.ПолучитьТитулыПоДокументу(Объект.Ссылка, Истина); @@ -1068,6 +1109,8 @@ Элементы = Форма.Элементы; Объект = Форма.Объект; + + Элементы.ГруппаДемоРежим.Видимость = ОбменСГИСЭПДВызовСервера.ДемоРежимВключен(); ДанныеСостоянияЭДО = ИнтеграцияЭДОВызовСервера.ДанныеСостоянияЭДОДляФормыОбъектаУчета(Объект.Ссылка); ТитулыПоДокументу = ОбменСГИСЭПДВызовСервера.ПолучитьТитулыПоДокументу(Объект.Ссылка, Истина); @@ -1127,11 +1170,223 @@ КонецПроцедуры +Процедура УстановитьДоступностьЭлементовЭПЭ(Форма) Экспорт + + Элементы = Форма.Элементы; + Объект = Форма.Объект; + + Элементы.ГруппаДемоРежим.Видимость = ОбменСГИСЭПДВызовСервера.ДемоРежимВключен(); + + ВводимЛюбойДопТитул = Форма.ВводимТитулОтзывПоручения; + + ДанныеСостоянияЭДО = ИнтеграцияЭДОВызовСервера.ДанныеСостоянияЭДОДляФормыОбъектаУчета(Объект.Ссылка); + ТитулыПоДокументу = ОбменСГИСЭПДВызовСервера.ПолучитьТитулыПоДокументу(Объект.Ссылка, Истина); + + ЭтоНеЗаконченнаяОтправка = Ложь; + УстановитьДоступностьЭлементовПоСостоянию(Форма, ДанныеСостоянияЭДО, ЭтоНеЗаконченнаяОтправка); + ТребуетсяПовторно = ЭтоНеЗаконченнаяОтправка; + + Если ДанныеСостоянияЭДО.ПредставлениеСостояния = "Закрыт с отклонением" Тогда + Объект.ТекущийТитул = Неопределено; + Иначе + УстановитьТекущийДоступныйТитулЭПЭ(Объект, ТитулыПоДокументу, ВводимЛюбойДопТитул,ТребуетсяПовторно); + КонецЕсли; + + // По имеющимся титулам + Элементы.СтраницаТитулЗаказчика.ТолькоПросмотр = ТитулыПоДокументу.Получить(ПредопределенноеЗначение("Перечисление.ТипыЭлементовРегламентаЭДО.ЭПЭ_Титул1")) <> Неопределено; + Элементы.СтраницаТитулЭкспедитора.ТолькоПросмотр = ТитулыПоДокументу.Получить(ПредопределенноеЗначение("Перечисление.ТипыЭлементовРегламентаЭДО.ЭПЭ_Титул2")) <> Неопределено; + Элементы.СтраницаТитулЗаказчикаОтзыв.ТолькоПросмотр = ТитулыПоДокументу.Получить(ПредопределенноеЗначение("Перечисление.ТипыЭлементовРегламентаЭДО.ЭПЭ_Титул3")) <> Неопределено; + + // Документ еще не отправлялся - дадим редактировать + Если Объект.ТекущийТитул = ПредопределенноеЗначение("Перечисление.ТипыЭлементовРегламентаЭДО.ЭПЭ_Титул1") Тогда + Элементы.СтраницаТитулЗаказчика.ТолькоПросмотр = Ложь; + ИначеЕсли Объект.ТекущийТитул = ПредопределенноеЗначение("Перечисление.ТипыЭлементовРегламентаЭДО.ЭПЭ_Титул2") Тогда + Элементы.СтраницаТитулЭкспедитора.ТолькоПросмотр = Ложь; + ИначеЕсли Объект.ТекущийТитул = ПредопределенноеЗначение("Перечисление.ТипыЭлементовРегламентаЭДО.ЭПЭ_Титул3") Тогда + Элементы.СтраницаТитулЗаказчикаОтзыв.ТолькоПросмотр = Ложь; + КонецЕсли; + + Элементы.ФормаСоздатьТитулОтзыва.Видимость = Ложь; + + Если Объект.РольУчастника = 3 + И ТитулыПоДокументу.Получить(ПредопределенноеЗначение("Перечисление.ТипыЭлементовРегламентаЭДО.ЭПЭ_Титул2")) <> Неопределено + И ТитулыПоДокументу.Получить(ПредопределенноеЗначение("Перечисление.ТипыЭлементовРегламентаЭДО.ЭПЭ_Титул3")) = Неопределено + И ВводимЛюбойДопТитул = Ложь + Тогда + Элементы.ФормаСоздатьТитулОтзыва.Видимость = Истина; + КонецЕсли; + + Элементы.ОтменаВводаДопТитула.Видимость = ВводимЛюбойДопТитул; + + ДоступноИзменение = ОбменСГИСЭПДВызовСервера.ДоступноИзменение(Объект.Ссылка); + Элементы.ФормаОтправитьЧерезЭДО.Доступность = ЗначениеЗаполнено(Объект.ТекущийТитул) И ДоступноИзменение; + Элементы.ФормаОтправитьЧерезЭДОПовторно.Доступность = ДоступноИзменение; + Элементы.ФормаОтправитьЧерезЭДОПовторно.Видимость = Ложь; + +КонецПроцедуры + +Процедура УстановитьТекущийДоступныйТитулЭПЭ(Объект, ТитулыПоДокументу = Неопределено, ВводимЛюбойДопТитул = Ложь, ТребуетсяПовторно = Ложь) Экспорт + + ТекущийДоступныйТитул = Неопределено; + + Если ТитулыПоДокументу = Неопределено Тогда + ТитулыПоДокументу = ОбменСГИСЭПДВызовСервера.ПолучитьТитулыПоДокументу(Объект, Истина); + КонецЕсли; + + Если Объект.РольУчастника = 0 Тогда + Объект.РольУчастника = 3; + КонецЕсли; + + // Экспедитор + Если Объект.РольУчастника = 1 Тогда + Если ЗначениеЗаполнено(ТитулыПоДокументу.Получить(ПредопределенноеЗначение("Перечисление.ТипыЭлементовРегламентаЭДО.ЭПЭ_Титул1"))) + И (ТребуетсяПовторно Или ЗначениеЗаполнено(ТитулыПоДокументу.Получить(ПредопределенноеЗначение("Перечисление.ТипыЭлементовРегламентаЭДО.ЭПЭ_Титул2"))) = Ложь) Тогда + ТекущийДоступныйТитул = ПредопределенноеЗначение("Перечисление.ТипыЭлементовРегламентаЭДО.ЭПЭ_Титул2"); + КонецЕсли; + // Заказчик + ИначеЕсли Объект.РольУчастника = 3 Тогда + + Если ЗначениеЗаполнено(ТитулыПоДокументу.Получить(ПредопределенноеЗначение("Перечисление.ТипыЭлементовРегламентаЭДО.ЭПЭ_Титул1"))) = Ложь Тогда + ТекущийДоступныйТитул = ПредопределенноеЗначение("Перечисление.ТипыЭлементовРегламентаЭДО.ЭПЭ_Титул1"); + ИначеЕсли ЗначениеЗаполнено(ТитулыПоДокументу.Получить(ПредопределенноеЗначение("Перечисление.ТипыЭлементовРегламентаЭДО.ЭПЭ_Титул1"))) + И ЗначениеЗаполнено(ТитулыПоДокументу.Получить(ПредопределенноеЗначение("Перечисление.ТипыЭлементовРегламентаЭДО.ЭПЭ_Титул2"))) + И ВводимЛюбойДопТитул Тогда + ТекущийДоступныйТитул = ПредопределенноеЗначение("Перечисление.ТипыЭлементовРегламентаЭДО.ЭПЭ_Титул3"); + КонецЕсли; + КонецЕсли; + + Объект.ТекущийТитул = ТекущийДоступныйТитул; + +КонецПроцедуры + +Процедура УстановитьДоступностьЭлементовЭЭР(Форма) Экспорт + + Элементы = Форма.Элементы; + Объект = Форма.Объект; + + Элементы.ГруппаДемоРежим.Видимость = ОбменСГИСЭПДВызовСервера.ДемоРежимВключен(); + + ДанныеСостоянияЭДО = ИнтеграцияЭДОВызовСервера.ДанныеСостоянияЭДОДляФормыОбъектаУчета(Объект.Ссылка); + ТитулыПоДокументу = ОбменСГИСЭПДВызовСервера.ПолучитьТитулыПоДокументу(Объект.Ссылка, Истина); + + ЭтоНеЗаконченнаяОтправка = Ложь; + УстановитьДоступностьЭлементовПоСостоянию(Форма, ДанныеСостоянияЭДО, ЭтоНеЗаконченнаяОтправка); + ТребуетсяПовторно = ЭтоНеЗаконченнаяОтправка; + + Если ДанныеСостоянияЭДО.ПредставлениеСостояния = "Закрыт с отклонением" Тогда + Объект.ТекущийТитул = Неопределено; + Иначе + УстановитьТекущийДоступныйТитулЭЭР(Объект, ТитулыПоДокументу, ТребуетсяПовторно); + КонецЕсли; + + // По имеющимся титулам + Элементы.СтраницаТитулЭкспедитора.ТолькоПросмотр = ТитулыПоДокументу.Получить(ПредопределенноеЗначение("Перечисление.ТипыЭлементовРегламентаЭДО.ЭЭР_Титул1")) <> Неопределено; + + // Документ еще не отправлялся - дадим редактировать + Если Объект.ТекущийТитул = ПредопределенноеЗначение("Перечисление.ТипыЭлементовРегламентаЭДО.ЭЭР_Титул1") Тогда + Элементы.СтраницаТитулЭкспедитора.ТолькоПросмотр = Ложь; + КонецЕсли; + + ДоступноИзменение = ОбменСГИСЭПДВызовСервера.ДоступноИзменение(Объект.Ссылка); + Элементы.ФормаОтправитьЧерезЭДО.Доступность = ЗначениеЗаполнено(Объект.ТекущийТитул) И ДоступноИзменение; + Элементы.ФормаОтправитьЧерезЭДОПовторно.Доступность = ДоступноИзменение; + Элементы.ФормаОтправитьЧерезЭДОПовторно.Видимость = Ложь; + +КонецПроцедуры + +Процедура УстановитьТекущийДоступныйТитулЭЭР(Объект, ТитулыПоДокументу = Неопределено, ТребуетсяПовторно = Ложь) Экспорт + + ТекущийДоступныйТитул = Неопределено; + + Если ТитулыПоДокументу = Неопределено Тогда + ТитулыПоДокументу = ОбменСГИСЭПДВызовСервера.ПолучитьТитулыПоДокументу(Объект, Истина); + КонецЕсли; + + Если Объект.РольУчастника = 0 Тогда + Объект.РольУчастника = 3; + КонецЕсли; + + // Экспедитор + Если Объект.РольУчастника = 3 Тогда + + Если ЗначениеЗаполнено(ТитулыПоДокументу.Получить(ПредопределенноеЗначение("Перечисление.ТипыЭлементовРегламентаЭДО.ЭЭР_Титул1"))) = Ложь Тогда + ТекущийДоступныйТитул = ПредопределенноеЗначение("Перечисление.ТипыЭлементовРегламентаЭДО.ЭЭР_Титул1"); + КонецЕсли; + + КонецЕсли; + + Объект.ТекущийТитул = ТекущийДоступныйТитул; + +КонецПроцедуры + +Процедура УстановитьДоступностьЭлементовЭСР(Форма) Экспорт + + Элементы = Форма.Элементы; + Объект = Форма.Объект; + + Элементы.ГруппаДемоРежим.Видимость = ОбменСГИСЭПДВызовСервера.ДемоРежимВключен(); + + ДанныеСостоянияЭДО = ИнтеграцияЭДОВызовСервера.ДанныеСостоянияЭДОДляФормыОбъектаУчета(Объект.Ссылка); + ТитулыПоДокументу = ОбменСГИСЭПДВызовСервера.ПолучитьТитулыПоДокументу(Объект.Ссылка, Истина); + + ЭтоНеЗаконченнаяОтправка = Ложь; + УстановитьДоступностьЭлементовПоСостоянию(Форма, ДанныеСостоянияЭДО, ЭтоНеЗаконченнаяОтправка); + ТребуетсяПовторно = ЭтоНеЗаконченнаяОтправка; + + Если ДанныеСостоянияЭДО.ПредставлениеСостояния = "Закрыт с отклонением" Тогда + Объект.ТекущийТитул = Неопределено; + Иначе + УстановитьТекущийДоступныйТитулЭСР(Объект, ТитулыПоДокументу, ТребуетсяПовторно); + КонецЕсли; + + // По имеющимся титулам + Элементы.СтраницаТитулЭкспедитора.ТолькоПросмотр = ТитулыПоДокументу.Получить(ПредопределенноеЗначение("Перечисление.ТипыЭлементовРегламентаЭДО.ЭСР_Титул1")) <> Неопределено; + + // Документ еще не отправлялся - дадим редактировать + Если Объект.ТекущийТитул = ПредопределенноеЗначение("Перечисление.ТипыЭлементовРегламентаЭДО.ЭСР_Титул1") Тогда + Элементы.СтраницаТитулЭкспедитора.ТолькоПросмотр = Ложь; + КонецЕсли; + + ДоступноИзменение = ОбменСГИСЭПДВызовСервера.ДоступноИзменение(Объект.Ссылка); + Элементы.ФормаОтправитьЧерезЭДО.Доступность = ЗначениеЗаполнено(Объект.ТекущийТитул) И ДоступноИзменение; + Элементы.ФормаОтправитьЧерезЭДОПовторно.Доступность = ДоступноИзменение; + Элементы.ФормаОтправитьЧерезЭДОПовторно.Видимость = Ложь; + +КонецПроцедуры + +Процедура УстановитьТекущийДоступныйТитулЭСР(Объект, ТитулыПоДокументу = Неопределено, ТребуетсяПовторно = Ложь) Экспорт + + ТекущийДоступныйТитул = Неопределено; + + Если ТитулыПоДокументу = Неопределено Тогда + ТитулыПоДокументу = ОбменСГИСЭПДВызовСервера.ПолучитьТитулыПоДокументу(Объект, Истина); + КонецЕсли; + + Если Объект.РольУчастника = 0 Тогда + Объект.РольУчастника = 3; + КонецЕсли; + + // Экспедитор + Если Объект.РольУчастника = 3 Тогда + + Если ЗначениеЗаполнено(ТитулыПоДокументу.Получить(ПредопределенноеЗначение("Перечисление.ТипыЭлементовРегламентаЭДО.ЭСР_Титул1"))) = Ложь Тогда + ТекущийДоступныйТитул = ПредопределенноеЗначение("Перечисление.ТипыЭлементовРегламентаЭДО.ЭСР_Титул1"); + КонецЕсли; + + КонецЕсли; + + Объект.ТекущийТитул = ТекущийДоступныйТитул; + +КонецПроцедуры + + Процедура УстановитьДоступностьЭлементовЭДФ(Форма) Экспорт Элементы = Форма.Элементы; Объект = Форма.Объект; + + Элементы.ГруппаДемоРежим.Видимость = ОбменСГИСЭПДВызовСервера.ДемоРежимВключен(); ДанныеСостоянияЭДО = ИнтеграцияЭДОВызовСервера.ДанныеСостоянияЭДОДляФормыОбъектаУчета(Объект.Ссылка); ТитулыПоДокументу = ОбменСГИСЭПДВызовСервера.ПолучитьТитулыПоДокументу(Объект.Ссылка, Истина); @@ -1207,6 +1462,8 @@ Элементы = Форма.Элементы; Объект = Форма.Объект; + Элементы.ГруппаДемоРежим.Видимость = ОбменСГИСЭПДВызовСервера.ДемоРежимВключен(); + ДанныеСостоянияЭДО = ИнтеграцияЭДОВызовСервера.ДанныеСостоянияЭДОДляФормыОбъектаУчета(Объект.Ссылка); ТитулыПоДокументу = ОбменСГИСЭПДВызовСервера.ПолучитьТитулыПоДокументу(Объект.Ссылка, Истина); @@ -1590,6 +1847,30 @@ Результат.Грузоотправитель = ВРег(МассивЧастейИдФайла[2]); Результат.Грузоперевозчик = ВРег(МассивЧастейИдФайла[3]); + // Электронное поручение экспедитору + ИначеЕсли СтрНачинаетсяС(ИдФайл, "ON_POREXPKLT") Тогда + Результат.Грузоотправитель = ВРег(МассивЧастейИдФайла[3]); + Результат.Грузоперевозчик = ВРег(МассивЧастейИдФайла[2]); + Результат.ЕстьИные = МассивЧастейИдФайла[4] = "1"; + ИначеЕсли СтрНачинаетсяС(ИдФайл, "ON_POREXPEXP") Тогда + Результат.Грузоотправитель = ВРег(МассивЧастейИдФайла[2]); + Результат.Грузоперевозчик = ВРег(МассивЧастейИдФайла[3]); + ИначеЕсли СтрНачинаетсяС(ИдФайл, "ON_POREXPOTZ") Тогда + Результат.Грузоотправитель = ВРег(МассивЧастейИдФайла[3]); + Результат.Грузоперевозчик = ВРег(МассивЧастейИдФайла[2]); + + // Электронная экспедиторская расписка + ИначеЕсли СтрНачинаетсяС(ИдФайл, "ON_EXPRASP") Тогда + Результат.Грузоотправитель = ВРег(МассивЧастейИдФайла[3]); + Результат.Грузоперевозчик = ВРег(МассивЧастейИдФайла[2]); + Результат.ЕстьИные = МассивЧастейИдФайла[4] = "1"; + + // Электронная складская расписка + ИначеЕсли СтрНачинаетсяС(ИдФайл, "ON_SKLADRASP") Тогда + Результат.Грузоотправитель = ВРег(МассивЧастейИдФайла[3]); + Результат.Грузоперевозчик = ВРег(МассивЧастейИдФайла[2]); + Результат.ЕстьИные = МассивЧастейИдФайла[4] = "1"; + КонецЕсли; Возврат Результат; @@ -1859,6 +2140,47 @@ Результат.ШаблонИмениФайла = Результат.ДляФайла + "_ИдГО_ИдПЕР_GGGGMMDD_ГУИДФайла"; Результат.КНД = "1110374"; Результат.ПоФактХЖ = ""; + //Поручение экспедитору + ИначеЕсли ЭлементРегламента = ПредопределенноеЗначение("Перечисление.ТипыЭлементовРегламентаЭДО.ЭПЭ_Титул1") Тогда + Результат.ВПрограмме = "ТитулЗаказчика"; + Результат.ДляФайла = "ON_POREXPKLT"; + Результат.ПолеУИД = Результат.ВПрограмме + "УИДМинтранс"; + Результат.ШаблонИмениФайла = Результат.ДляФайла + "_ИдПЕР_ИдГО_НалДр_GGGGMMDD_ГУИДФайла"; + Результат.КНД = "1110486"; + Результат.ПоФактХЖ = ""; + ИначеЕсли ЭлементРегламента = ПредопределенноеЗначение("Перечисление.ТипыЭлементовРегламентаЭДО.ЭПЭ_Титул2") Тогда + Результат.ВПрограмме = "ТитулЭкспедитора"; + Результат.ДляФайла = "ON_POREXPEXP"; + Результат.ПолеУИД = Результат.ВПрограмме + "УИДМинтранс"; + Результат.ШаблонИмениФайла = Результат.ДляФайла + "_ИдГО_ИдПЕР_НалДр_GGGGMMDD_ГУИДФайла"; + Результат.КНД = "1110487"; + Результат.ПоФактХЖ = ""; + ИначеЕсли ЭлементРегламента = ПредопределенноеЗначение("Перечисление.ТипыЭлементовРегламентаЭДО.ЭПЭ_Титул3") Тогда + Результат.ВПрограмме = "ТитулЗаказчикаОтзыв"; + Результат.ДляФайла = "ON_POREXPOTZ"; + Результат.ПолеУИД = Результат.ВПрограмме + "УИДМинтранс"; + Результат.ШаблонИмениФайла = Результат.ДляФайла + "_ИдПЕР_ИдГО_НалДр_GGGGMMDD_ГУИДФайла"; + Результат.КНД = "1110488"; + Результат.ПоФактХЖ = ""; + + //Экспедиторская расписка + ИначеЕсли ЭлементРегламента = ПредопределенноеЗначение("Перечисление.ТипыЭлементовРегламентаЭДО.ЭЭР_Титул1") Тогда + Результат.ВПрограмме = "ТитулЭкспедитора"; + Результат.ДляФайла = "ON_EXPRASP"; + Результат.ПолеУИД = Результат.ВПрограмме + "УИДМинтранс"; + Результат.ШаблонИмениФайла = Результат.ДляФайла + "_ИдГО_ИдПЕР_НалДр_GGGGMMDD_ГУИДФайла"; + Результат.КНД = "1110489"; + Результат.ПоФактХЖ = ""; + + //Складская расписка + ИначеЕсли ЭлементРегламента = ПредопределенноеЗначение("Перечисление.ТипыЭлементовРегламентаЭДО.ЭСР_Титул1") Тогда + Результат.ВПрограмме = "ТитулЭкспедитора"; + Результат.ДляФайла = "ON_SKLADRASP"; + Результат.ПолеУИД = Результат.ВПрограмме + "УИДМинтранс"; + Результат.ШаблонИмениФайла = Результат.ДляФайла + "_ИдГО_ИдПЕР_НалДр_GGGGMMDD_ГУИДФайла"; + Результат.КНД = "1110490"; + Результат.ПоФактХЖ = ""; + КонецЕсли; КонецЕсли; @@ -2506,24 +2828,38 @@ Функция МассивСтрокТаблицыИзСтруктурыРеквизитов(СтруктураРеквизитов, ИмяТаблицы) Экспорт - МассивЗначений = Новый Массив; + СоответствиеСтрок = Новый Соответствие; НачалоКлюча = ИмяТаблицы + "__"; + Для Каждого КиЗ Из СтруктураРеквизитов Цикл Если СтрНачинаетсяС(КиЗ.Ключ, НачалоКлюча) Тогда МассивЧастей = РазделитьСтрокуСоСложнымРазделителем(КиЗ.Ключ, "__"); НомерСтрокиТаблицы = Число(МассивЧастей[1]); - Если МассивЗначений.Количество() >= НомерСтрокиТаблицы Тогда - СтруктураСтроки = МассивЗначений[НомерСтрокиТаблицы - 1]; - Иначе + СтруктураСтроки = СоответствиеСтрок.Получить(НомерСтрокиТаблицы); + Если СтруктураСтроки = Неопределено Тогда СтруктураСтроки = Новый Структура; - МассивЗначений.Вставить(НомерСтрокиТаблицы - 1); - КонецЕсли; + СоответствиеСтрок.Вставить(НомерСтрокиТаблицы, СтруктураСтроки); + КонецЕсли; СтруктураСтроки.Вставить(МассивЧастей[2], КиЗ.Значение); - МассивЗначений[НомерСтрокиТаблицы - 1] = СтруктураСтроки; КонецЕсли; КонецЦикла; - Возврат МассивЗначений; + МассивКлючей = Новый Массив; + Для каждого Ключ Из СоответствиеСтрок Цикл + МассивКлючей.Добавить(Ключ.Ключ); + КонецЦикла; + + СписокЗначений = Новый СписокЗначений; + СписокЗначений.ЗагрузитьЗначения(МассивКлючей); + СписокЗначений.СортироватьПоЗначению(); + МассивКлючей = СписокЗначений.ВыгрузитьЗначения(); + + Результат = Новый Массив; + Для каждого НомерСтроки Из МассивКлючей Цикл + Результат.Добавить(СоответствиеСтрок.Получить(НомерСтроки)); + КонецЦикла; + + Возврат Результат; КонецФункции @@ -3130,10 +3466,147 @@ Элементы.ГруппаРеквизитаСсылкаТитулФрахтовщикаСоставитель.Видимость = Форма.ВариантЗаФрахтовщикаПоДоверенности; Элементы.ГруппаРеквизитаЗаполнитьТитулФрахтовщикаОснованиеСоставленияФайла.Видимость = Форма.ВариантЗаФрахтовщикаПоДоверенности; КонецЕсли; + + ИначеЕсли Форма.ИмяФормы = "Документ.ЭлектронноеПоручениеЭкспедитору.Форма.ОсновнаяФорма" Тогда + // Страница "Оформление" + Если ЗначениеЗаполнено(Форма.Объект.СсылкаТитулЗаказчикаСоставитель) Тогда + Форма.ВариантПоДоверенностиЗаЗаказчика = 1; + ИначеЕсли ИмяЭлемента <> "ВариантПоДоверенностиЗаЗаказчика" Тогда + Форма.ВариантПоДоверенностиЗаЗаказчика = 0; + КонецЕсли; + + Если Форма.ВариантПоДоверенностиЗаЗаказчика = 1 Тогда + Элементы.ГруппаРеквизитаСсылкаТитулЗаказчикаСоставитель.Видимость = Истина; + Элементы.ГруппаРеквизитаЗаполнитьТитулЗаказчикаСоставительДоверенность.Видимость = Истина; + Элементы.ГруппаРеквизитаСсылкаТитулЗаказчикаЗаказчик.ЦветФона = Новый Цвет; + Если Форма.Объект.РольУчастника = 3 Тогда + Элементы.ГруппаРеквизитаСсылкаТитулЗаказчикаСоставитель.ЦветФона = ЦветВыделенияУчастникаЭПД; + КонецЕсли; + Иначе + Элементы.ГруппаРеквизитаСсылкаТитулЗаказчикаСоставитель.Видимость = Ложь; + Элементы.ГруппаРеквизитаЗаполнитьТитулЗаказчикаСоставительДоверенность.Видимость = Ложь; + Элементы.ГруппаРеквизитаСсылкаТитулЗаказчикаСоставитель.ЦветФона = Новый Цвет; + Если Форма.Объект.РольУчастника = 3 Тогда + Элементы.ГруппаРеквизитаСсылкаТитулЗаказчикаЗаказчик.ЦветФона = ЦветВыделенияУчастникаЭПД; + КонецЕсли; + КонецЕсли; + + ИначеЕсли Форма.ИмяФормы = "Документ.ЭлектронноеПоручениеЭкспедитору.Форма.ТитулЭкспедитораДопИнфЭкспСвОплата" Тогда + + СвОплатаНалСт = Форма.СвОплатаНалСт; + + Если СвОплатаНалСт = "без НДС" Тогда + + Форма.СвОплатаБезНДС = "без НДС"; + Форма.СвОплатаСумНал = Неопределено; + + Иначе + + Форма.СвОплатаБезНДС = Неопределено; + + СвОплатаОбщСтУсл = Форма.СвОплатаОбщСтУсл; + + Форма.СвОплатаСумНал = ИзвлечьНДСИзСуммы(СвОплатаОбщСтУсл, СвОплатаНалСт); + + КонецЕсли; + + ИначеЕсли Форма.ИмяФормы = "Документ.ЭлектроннаяЭкспедиторскаяРасписка.Форма.ОсновнаяФорма" + Или Форма.ИмяФормы = "Документ.ЭлектроннаяCкладскаяРасписка.Форма.ОсновнаяФорма" Тогда + + // Страница "Оформление" + Если ЗначениеЗаполнено(Форма.Объект.СсылкаТитулЭкспедитораСоставитель) Тогда + Форма.ВариантПоДоверенностиЗаЭкспедитора = 1; + ИначеЕсли ИмяЭлемента <> "ВариантПоДоверенностиЗаЭкспедитора" Тогда + Форма.ВариантПоДоверенностиЗаЭкспедитора = 0; + КонецЕсли; + + Если Форма.ВариантПоДоверенностиЗаЭкспедитора = 1 Тогда + Элементы.ГруппаРеквизитаСсылкаТитулЭкспедитораСоставитель.Видимость = Истина; + Элементы.ГруппаРеквизитаЗаполнитьТитулЭкспедитораСоставительДоверенность.Видимость = Истина; + Элементы.ГруппаРеквизитаСсылкаТитулЭкспедитораЭкспедитор.ЦветФона = Новый Цвет; + Если Форма.Объект.РольУчастника = 3 Тогда + Элементы.ГруппаРеквизитаСсылкаТитулЭкспедитораСоставитель.ЦветФона = ЦветВыделенияУчастникаЭПД; + КонецЕсли; + Иначе + Элементы.ГруппаРеквизитаСсылкаТитулЭкспедитораСоставитель.Видимость = Ложь; + Элементы.ГруппаРеквизитаЗаполнитьТитулЭкспедитораСоставительДоверенность.Видимость = Ложь; + Элементы.ГруппаРеквизитаСсылкаТитулЭкспедитораСоставитель.ЦветФона = Новый Цвет; + Если Форма.Объект.РольУчастника = 3 Тогда + Элементы.ГруппаРеквизитаСсылкаТитулЭкспедитораЭкспедитор.ЦветФона = ЦветВыделенияУчастникаЭПД; + КонецЕсли; + КонецЕсли; + + ИначеЕсли Форма.ИмяФормы = "Документ.ЭлектроннаяЭкспедиторскаяРасписка.Форма.ТитулЭкспедитораВладИнфр" Тогда + Если ЗначениеЗаполнено(Форма.ТитулЭкспедитораВладИнфрСовпГОВ) = Ложь Тогда + Форма.ТитулЭкспедитораВладИнфрСовпГОВ = "1"; + КонецЕсли; + + Элементы.СсылкаТитулЭкспедитораВладИнфр.Доступность = Форма.ТитулЭкспедитораВладИнфрСовпГОВ = "2"; + Элементы.ТитулЭкспедитораВладИнфрОбНетИнфОВлад.Доступность = Форма.ТитулЭкспедитораВладИнфрСовпГОВ = "3"; + + ИначеЕсли Форма.ИмяФормы = "Документ.ЭлектроннаяЭкспедиторскаяРасписка.Форма.ТитулЭкспедитораСвЛицПогрГр" Тогда + + Если ЗначениеЗаполнено(Форма.ТитулЭкспедитораСвЛицПогрГрЛицоПогруз) = Ложь Тогда + Форма.ТитулЭкспедитораСвЛицПогрГрЛицоПогруз = "1"; + КонецЕсли; + + Элементы.ТитулЭкспедитораСвЛицПогрГрРеквДокЛицоДата.Доступность = Форма.ТитулЭкспедитораСвЛицПогрГрЛицоПогруз <> "1"; + Элементы.ТитулЭкспедитораСвЛицПогрГрРеквДокЛицоДополнительныеСведения.Доступность = Форма.ТитулЭкспедитораСвЛицПогрГрЛицоПогруз <> "1"; + Элементы.ТитулЭкспедитораСвЛицПогрГрРеквДокЛицоНаименование.Доступность = Форма.ТитулЭкспедитораСвЛицПогрГрЛицоПогруз <> "1"; + Элементы.ТитулЭкспедитораСвЛицПогрГрРеквДокЛицоНомер.Доступность = Форма.ТитулЭкспедитораСвЛицПогрГрЛицоПогруз <> "1"; + Элементы.ТитулЭкспедитораСвЛицПогрГрРеквДокЛицоРеквизитыСторон.Доступность = Форма.ТитулЭкспедитораСвЛицПогрГрЛицоПогруз <> "1"; + + ИначеЕсли Форма.ИмяФормы = "Документ.ЭлектроннаяЭкспедиторскаяРасписка.Форма.ТитулЭкспедитораСвЛицПриемГр" Тогда + + СсылкаЗаполнена = ЗначениеЗаполнено(Форма.СсылкаТитулЭкспедитораСвЛицПриемГр); + + Элементы.ТитулЭкспедитораОснДовПриемГрНаименование.Доступность = СсылкаЗаполнена; + Элементы.ТитулЭкспедитораОснДовПриемГрНомер.Доступность = СсылкаЗаполнена; + Элементы.ТитулЭкспедитораОснДовПриемГрДата.Доступность = СсылкаЗаполнена; + Элементы.ТитулЭкспедитораОснДовПриемГрДополнительныеСведения.Доступность = СсылкаЗаполнена; + Элементы.ТитулЭкспедитораОснДовПриемГрРеквизитыСторон.Доступность = СсылкаЗаполнена; + + ИначеЕсли Форма.ИмяФормы = "Документ.ЭлектроннаяCкладскаяРасписка.Форма.ТитулЭкспедитораСведСклад" Тогда + + Если ЗначениеЗаполнено(Форма.ТитулЭкспедитораСведСкладВладСкладЭксп) = Ложь Тогда + Форма.ТитулЭкспедитораСведСкладВладСкладЭксп = "1"; + КонецЕсли; + + Элементы.СсылкаТитулЭкспедитораСведСкладСвВладСклад.Доступность = Форма.ТитулЭкспедитораСведСкладВладСкладЭксп = "0"; + КонецЕсли; КонецПроцедуры +Функция ИзвлечьНДСИзСуммы(СуммаСНДС, СтавкаСтрокой) + + Результат = 0; + + Если СтавкаСтрокой = "0%" Тогда + + Результат = 0; + + ИначеЕсли СтавкаСтрокой = "5%" Тогда + + Результат = СуммаСНДС * 5 / 105; + + ИначеЕсли СтавкаСтрокой = "7%" Тогда + + Результат = СуммаСНДС * 7 / 107; + + ИначеЕсли СтавкаСтрокой = "22%" Тогда + + Результат = СуммаСНДС * 22 / 122; + + КонецЕсли; + + //По формату 2 знака после запятой + Результат = Окр(Результат, 2); + + Возврат Результат; + + +КонецФункции Функция РасчетНДСПоСтавкеСтрокой(СуммаБезНДС, СтавкаСтрокой) @@ -3382,6 +3855,29 @@ ИначеЕсли ПрефиксТитула = "ТитулФрахтовщика" Тогда Результат = ПредопределенноеЗначение("Перечисление.ТипыЭлементовРегламентаЭДО.ЭДФ_Титул2"); КонецЕсли; + + // ЭПЭ + ИначеЕсли ТипДокумента = "Документ.ЭлектронноеПоручениеЭкспедитору" Тогда + Если ПрефиксТитула = "ТитулЗаказчика" Тогда + Результат = ПредопределенноеЗначение("Перечисление.ТипыЭлементовРегламентаЭДО.ЭПЭ_Титул1"); + ИначеЕсли ПрефиксТитула = "ТитулЭкспедитора" Тогда + Результат = ПредопределенноеЗначение("Перечисление.ТипыЭлементовРегламентаЭДО.ЭПЭ_Титул2"); + ИначеЕсли ПрефиксТитула = "ТитулЗаказчикаОтзыв" Тогда + Результат = ПредопределенноеЗначение("Перечисление.ТипыЭлементовРегламентаЭДО.ЭПЭ_Титул3"); + КонецЕсли; + + //ЭЭР + ИначеЕсли ТипДокумента = "Документ.ЭлектроннаяЭкспедиторскаяРасписка" Тогда + Если ПрефиксТитула = "ТитулЭкспедитора" Тогда + Результат = ПредопределенноеЗначение("Перечисление.ТипыЭлементовРегламентаЭДО.ЭЭР_Титул1"); + КонецЕсли; + + //ЭСР + ИначеЕсли ТипДокумента = "Документ.ЭлектроннаяCкладскаяРасписка" Тогда + Если ПрефиксТитула = "ТитулЭкспедитора" Тогда + Результат = ПредопределенноеЗначение("Перечисление.ТипыЭлементовРегламентаЭДО.ЭСР_Титул1"); + КонецЕсли; + КонецЕсли; Возврат Результат; @@ -3550,6 +4046,7 @@ СтруктураРеквизитовАдреса.Вставить("Улица", ""); СтруктураРеквизитовАдреса.Вставить("Дом", ""); СтруктураРеквизитовАдреса.Вставить("Корпус", ""); + СтруктураРеквизитовАдреса.Вставить("Квартира", ""); Если КонтейнерРеквизитов <> Неопределено Тогда Если ТипЗнч(КонтейнерРеквизитов) = Тип("Структура") Тогда @@ -3668,7 +4165,7 @@ // КонтейнерРеквизитов - Структура, ДанныеФормыЭлементКоллекции - Контейнер реквизитов // Форма - ФормаКлиентскогоПриложения // ПрефиксТитула - Неопределено, Строка - Префикс титула -Процедура ЗаполнитьРеквизитыУчастника(Участник, ПрефиксРеквизитов, КонтейнерРеквизитов, Форма, ПрефиксТитула = Неопределено) Экспорт +Процедура ЗаполнитьРеквизитыУчастника(Участник, ПрефиксРеквизитов, КонтейнерРеквизитов, Форма, ПрефиксТитула = Неопределено, Параметры = Неопределено) Экспорт ПостфиксТелефоны = "НомераТелефонов"; ПостфиксЭлПочта = "АдресаЭлектроннойПочты"; @@ -3691,7 +4188,7 @@ МодульОбменСГИСЭПД = ОбменСГИСЭПДВызовСервера; #КонецЕсли - РеквизитыУчастника = МодульОбменСГИСЭПД.ПолучитьРеквизитыУчастника(Участник, Ложь); + РеквизитыУчастника = МодульОбменСГИСЭПД.ПолучитьРеквизитыУчастника(Участник, Ложь, Параметры); ПрефиксКонтактов = ""; ПрефиксАдреса = ""; @@ -3986,6 +4483,22 @@ КонецПроцедуры +Процедура ЗаполнитьРеквизитыСтраны(Страна, ПрефиксРеквизитов, КонтейнерРеквизитов) Экспорт + + РеквизитыСтраны = ОбменСГИСЭПДВызовСервера.ЗначенияРеквизитовОбъекта(Страна, "Код, Наименование"); + + ИмяКодСтраны = СтрЗаменить(ПрефиксРеквизитов, "Страна", "КодСтраны"); + ИмяНаименованиеСтраны = СтрЗаменить(ПрефиксРеквизитов, "Страна", "НаименованиеСтраны"); + Если ТипЗнч(КонтейнерРеквизитов) = Тип("Структура") Тогда + КонтейнерРеквизитов.Вставить(ИмяКодСтраны, РеквизитыСтраны.Код); + КонтейнерРеквизитов.Вставить(ИмяНаименованиеСтраны, РеквизитыСтраны.Наименование); + Иначе + КонтейнерРеквизитов[ИмяКодСтраны] = РеквизитыСтраны.Код; + КонтейнерРеквизитов[ИмяНаименованиеСтраны] = РеквизитыСтраны.Наименование; + КонецЕсли; + +КонецПроцедуры + Процедура ЗаполнитьРеквизитыБанковскогоСчета(БанковскийСчет, ПрефиксРеквизитов, КонтейнерРеквизитов) Экспорт @@ -4005,8 +4518,7 @@ КонецПроцедуры - -Процедура ЗаполнитьРеквизитыАдреса(Форма, Результат, ИмяЭлемента, ТекущиеДанные = Неопределено) Экспорт +Процедура ЗаполнитьРеквизитыАдреса(Форма, Результат, ИмяЭлемента, ТекущиеДанные = Неопределено, Параметры = Неопределено) Экспорт Префикс = СтрЗаменить(ИмяЭлемента, "Представление", ""); @@ -4032,14 +4544,32 @@ КонецЕсли; Если КонтейнерРеквизитов <> Неопределено Тогда - Если СтруктураАдреса.ТипАдреса = "ВСвободнойФорме" - Или ЗначениеЗаполнено(СтруктураАдреса.Территория) Тогда + + ЭтоАдресЭПДВСвободнойФорме = ЗначениеЗаполнено(СтруктураАдреса.Территория) + Или (Не РаботаСАдресамиКлиентСервер.ЭтоАдминистративноТерриториальныйАдрес(СтруктураАдреса.ТипАдреса) + И Не РаботаСАдресамиКлиентСервер.ЭтоМуниципальныйАдрес(СтруктураАдреса.ТипАдреса)) + Или (СтруктураАдреса.Здание.ТипЗдания <> "Дом") + Или (СтруктураАдреса.Корпуса.Количество() > 0 + И СтруктураАдреса.Корпуса[0].ТипКорпуса <> "Корпус") + Или (СтруктураАдреса.Помещения.Количество() > 0 + И СтруктураАдреса.Помещения[0].ТипПомещения <> "Квартира"); + + Если Параметры <> Неопределено И Параметры.Свойство("АдресВСвободнойФорме") + И Параметры.АдресВСвободнойФорме Тогда + ЭтоАдресЭПДВСвободнойФорме = Истина; + КонецЕсли; + + Если ЭтоАдресЭПДВСвободнойФорме Тогда Если СтруктураВерсииТитула <> Неопределено Тогда СтруктураВерсииТитула.Вставить(Префикс + "Представление", СтруктураАдреса.Представление); - СтруктураВерсииТитула.Вставить(Префикс + "КодСтраны", СтруктураАдреса.КодСтраны); + СтруктураВерсииТитула.Вставить(Префикс + "КодСтраны", СтруктураАдреса.КодСтраны); + СтруктураВерсииТитула.Вставить(Префикс + "Страна", СтруктураАдреса.Страна); Иначе КонтейнерРеквизитов[Префикс + "Представление"] = СтруктураАдреса.Представление; КонтейнерРеквизитов[Префикс + "КодСтраны"] = СтруктураАдреса.КодСтраны; + Если ОбщегоНазначенияКлиентСервер.ЕстьРеквизитИлиСвойствоОбъекта(КонтейнерРеквизитов, Префикс + "Страна") Тогда + КонтейнерРеквизитов[Префикс + "Страна"] = СтруктураАдреса.Страна; + КонецЕсли; КонецЕсли; Иначе Если СтруктураВерсииТитула <> Неопределено Тогда @@ -4052,7 +4582,10 @@ СтруктураВерсииТитула.Вставить(Префикс + "Дом", СтруктураАдреса.Здание.Номер); Если СтруктураАдреса.Корпуса.Количество() > 0 Тогда СтруктураВерсииТитула.Вставить(Префикс + "Корпус", СтруктураАдреса.Корпуса[0].Номер); - КонецЕсли; + КонецЕсли; + Если СтруктураАдреса.Помещения.Количество() > 0 Тогда + СтруктураВерсииТитула.Вставить(Префикс + "Квартира", СтруктураАдреса.Помещения[0].Номер); + КонецЕсли; ПоказатьОшибкиПоАдресу(Форма, СтруктураВерсииТитула, Префикс, ИмяЭлемента); Иначе КонтейнерРеквизитов[Префикс + "Индекс"] = СтруктураАдреса.Индекс; @@ -4065,6 +4598,9 @@ Если СтруктураАдреса.Корпуса.Количество() > 0 Тогда КонтейнерРеквизитов[Префикс + "Корпус"] = СтруктураАдреса.Корпуса[0].Номер; КонецЕсли; + Если СтруктураАдреса.Помещения.Количество() > 0 Тогда + КонтейнерРеквизитов[Префикс + "Квартира"] = СтруктураАдреса.Помещения[0].Номер; + КонецЕсли; ПоказатьОшибкиПоАдресу(Форма, КонтейнерРеквизитов, Префикс, ИмяЭлемента); КонецЕсли; КонецЕсли; @@ -4074,10 +4610,33 @@ Форма.СтруктураРеквизитов = СкопироватьВФиксированноеЗначенияРекурсивно(КонтейнерРеквизитов.СтруктураРеквизитовЗаполнение); КонецЕсли; - Форма.Модифицированность = Истина; + Форма.Модифицированность = Истина; КонецПроцедуры +Процедура ЗаполнитьРеквизитыДоговора(ДоговорСсылка, ПрефиксРеквизитов, КонтейнерРеквизитов) Экспорт + + #Если Сервер Тогда + МодульОбменСГИСЭПД = ОбменСГИСЭПД; + #Иначе + МодульОбменСГИСЭПД = ОбменСГИСЭПДВызовСервера; + #КонецЕсли + + РеквизитыДоговора = МодульОбменСГИСЭПД.ПолучитьРеквизитыДоговора(ДоговорСсылка); + + Если ТипЗнч(КонтейнерРеквизитов) = Тип("Структура") Тогда + КонтейнерРеквизитов.Вставить(ПрефиксРеквизитов + "Наименование", РеквизитыДоговора.Наименование); + КонтейнерРеквизитов.Вставить(ПрефиксРеквизитов + "Номер", РеквизитыДоговора.Номер); + КонтейнерРеквизитов.Вставить(ПрефиксРеквизитов + "Дата", РеквизитыДоговора.Дата); + Иначе + КонтейнерРеквизитов[ПрефиксРеквизитов + "Наименование"] = РеквизитыДоговора.Наименование; + КонтейнерРеквизитов[ПрефиксРеквизитов + "Номер"] = РеквизитыДоговора.Номер; + КонтейнерРеквизитов[ПрефиксРеквизитов + "Дата"] = РеквизитыДоговора.Дата; + КонецЕсли; + +КонецПроцедуры + + #КонецОбласти @@ -4090,21 +4649,32 @@ Если ТипЗнч(КонтейнерРеквизитов) = Тип("Структура") Тогда КонтейнерРеквизитов.Удалить(Префикс + "Индекс"); КонтейнерРеквизитов.Удалить(Префикс + "КодРегиона"); + КонтейнерРеквизитов.Удалить(Префикс + "Регион"); КонтейнерРеквизитов.Удалить(Префикс + "Город"); КонтейнерРеквизитов.Удалить(Префикс + "Район"); КонтейнерРеквизитов.Удалить(Префикс + "НаселенныйПункт"); КонтейнерРеквизитов.Удалить(Префикс + "Улица"); КонтейнерРеквизитов.Удалить(Префикс + "Дом"); КонтейнерРеквизитов.Удалить(Префикс + "Корпус"); + КонтейнерРеквизитов.Удалить(Префикс + "Квартира"); + КонтейнерРеквизитов.Удалить(Префикс + "ИныеСведения"); Иначе КонтейнерРеквизитов[Префикс + "Индекс"] = Неопределено; КонтейнерРеквизитов[Префикс + "КодРегиона"] = Неопределено; + Если ОбщегоНазначенияКлиентСервер.ЕстьРеквизитИлиСвойствоОбъекта(КонтейнерРеквизитов, Префикс + "Регион") Тогда + КонтейнерРеквизитов[Префикс + "Регион"] = Неопределено; + КонецЕсли; КонтейнерРеквизитов[Префикс + "Город"] = Неопределено; КонтейнерРеквизитов[Префикс + "Район"] = Неопределено; КонтейнерРеквизитов[Префикс + "НаселенныйПункт"] = Неопределено; КонтейнерРеквизитов[Префикс + "Улица"] = Неопределено; КонтейнерРеквизитов[Префикс + "Дом"] = Неопределено; КонтейнерРеквизитов[Префикс + "Корпус"] = Неопределено; + КонтейнерРеквизитов[Префикс + "Квартира"] = Неопределено; + Если ОбщегоНазначенияКлиентСервер.ЕстьРеквизитИлиСвойствоОбъекта(КонтейнерРеквизитов, Префикс + "ИныеСведения") Тогда + КонтейнерРеквизитов[Префикс + "ИныеСведения"] = Неопределено; + КонецЕсли; + КонецЕсли; Если ТипЗнч(КонтейнерРеквизитов) = Тип("ФормаКлиентскогоПриложения") Тогда @@ -4118,15 +4688,18 @@ Если ТипЗнч(КонтейнерРеквизитов) = Тип("Структура") Тогда КонтейнерРеквизитов.Удалить(Префикс + "Представление"); КонтейнерРеквизитов.Удалить(Префикс + "КодСтраны"); + КонтейнерРеквизитов.Удалить(Префикс + "Страна"); Иначе КонтейнерРеквизитов[Префикс + "Представление"] = Неопределено; - КонтейнерРеквизитов[Префикс + "КодСтраны"] = Неопределено; + КонтейнерРеквизитов[Префикс + "КодСтраны"] = Неопределено; + Если ОбщегоНазначенияКлиентСервер.ЕстьРеквизитИлиСвойствоОбъекта(КонтейнерРеквизитов, Префикс + "Страна") Тогда + КонтейнерРеквизитов[Префикс + "Страна"] = Неопределено; + КонецЕсли; КонецЕсли; КонецЕсли; КонецПроцедуры - Функция ПолучитьТипОрганизация() Экспорт Результат = Неопределено; @@ -4141,7 +4714,6 @@ КонецФункции - Функция ПолучитьТипКонтрагент() Экспорт Результат = Неопределено; @@ -4210,7 +4782,17 @@ КонецФункции -Процедура ЗаполнитьРеквизитыПоСсылке(Элемент, Форма, ТекущиеДанные = Неопределено, ПрефиксТитула = Неопределено) Экспорт +Функция ЭтоДоговорЭПД(ТипСсылки) + + #Если Сервер Или ВнешнееСоединение Тогда + Возврат ОбменСГИСЭПД.ЭтоДоговорЭПД(ТипСсылки); + #Иначе + Возврат ОбменСГИСЭПДВызовСервера.ЭтоДоговорЭПД(ТипСсылки); + #КонецЕсли + +КонецФункции + +Процедура ЗаполнитьРеквизитыПоСсылке(Элемент, Форма, ТекущиеДанные = Неопределено, ПрефиксТитула = Неопределено, Параметры = Неопределено) Экспорт ГруппаДанных = СтрЗаменить(Элемент.Имя, "Ссылка", ""); @@ -4250,17 +4832,25 @@ Если ТипЗнч(ЗначениеРеквизита) = ПолучитьТипОрганизация() Или ТипЗнч(ЗначениеРеквизита) = ПолучитьТипКонтрагент() Тогда ПрефиксРеквизитов = ГруппаДанных; - ЗаполнитьРеквизитыУчастника(ЗначениеРеквизита, ПрефиксРеквизитов, КонтейнерРеквизитов, Форма, ПрефиксТитула); + ЗаполнитьРеквизитыУчастника(ЗначениеРеквизита, ПрефиксРеквизитов, КонтейнерРеквизитов, Форма, ПрефиксТитула, Параметры); ИначеЕсли ТипЗнч(ЗначениеРеквизита) = Тип("СправочникСсылка.Валюты") Тогда ПрефиксРеквизитов = ГруппаДанных; ЗаполнитьРеквизитыВалюты(ЗначениеРеквизита, ПрефиксРеквизитов, КонтейнерРеквизитов); ИначеЕсли ТипЗнч(ЗначениеРеквизита) = Тип(ОбменСГИСЭПДВызовСервера.ИмяТипаБанковскиеСчетаОрганизации()) Тогда ЗаполнитьРеквизитыБанковскогоСчета(ЗначениеРеквизита, ГруппаДанных, КонтейнерРеквизитов); + ИначеЕсли ТипЗнч(ЗначениеРеквизита) = Тип(ОбменСГИСЭПДВызовСервера.ИмяТипаСтраны()) Тогда + ЗаполнитьРеквизитыСтраны(ЗначениеРеквизита, ГруппаДанных, КонтейнерРеквизитов); ИначеЕсли ТипЗнч(ЗначениеРеквизита) = Тип("СправочникСсылка.КлассификаторДОПОГЭПД") Тогда ПрефиксРеквизитов = ГруппаДанных; ЗаполнитьРеквизитыКлассификатораДОПОГ(ЗначениеРеквизита, ПрефиксРеквизитов, КонтейнерРеквизитов); ИначеЕсли ТипЗнч(ЗначениеРеквизита) = Тип("СправочникСсылка.ФизическиеЛица") Тогда - ЗаполнитьРеквизитыФизическогоЛица(ЗначениеРеквизита, ГруппаДанных, КонтейнерРеквизитов, Форма.Объект.Организация); + Организация = Неопределено; + Если ОбщегоНазначенияКлиентСервер.ЕстьРеквизитИлиСвойствоОбъекта(Форма, "Объект") Тогда + Организация = Форма.Объект.Организация + КонецЕсли; + ЗаполнитьРеквизитыФизическогоЛица(ЗначениеРеквизита, ГруппаДанных, КонтейнерРеквизитов, Организация); + ИначеЕсли ЭтоДоговорЭПД(ТипЗнч(ЗначениеРеквизита)) Тогда + ЗаполнитьРеквизитыДоговора(ЗначениеРеквизита, ГруппаДанных, КонтейнерРеквизитов); КонецЕсли; Если ТипЗнч(КонтейнерРеквизитовИлиОписание) = Тип("Структура") Тогда @@ -5556,12 +6146,65 @@ Возврат "ТитулФрахтовщика"; КонецЕсли; - КонецЕсли; + ИначеЕсли ТипДокумента = ТипДокументаПоручениеЭкспедитору() Тогда + + Если ИмяТекущейСтраницы = "СтраницаТитулЗаказчика" Тогда + Возврат "ТитулЗаказчика"; + ИначеЕсли ИмяТекущейСтраницы = "СтраницаТитулЭкспедитора" Тогда + Возврат "ТитулЭкспедитора"; + ИначеЕсли ИмяТекущейСтраницы = "СтраницаТитулЗаказчикаОтзыв" Тогда + Возврат "ТитулЗаказчикаОтзыв"; + КонецЕсли; + + ИначеЕсли ТипДокумента = ТипДокументаЭкспедиторскаяРасписка() Тогда + + Если ИмяТекущейСтраницы = "СтраницаТитулЭкспедитора" Тогда + Возврат "ТитулЭкспедитора"; + КонецЕсли; + + ИначеЕсли ТипДокумента = ТипДокументаСкладскаяРасписка() Тогда + + Если ИмяТекущейСтраницы = "СтраницаТитулЭкспедитора" Тогда + Возврат "ТитулЭкспедитора"; + КонецЕсли; + + КонецЕсли;; Возврат "" КонецФункции +// Возвращает текстовое представление типа документа складская расписка. +// +// Возвращаемое значение: +// Строка - текстовое представление типа документа. +Функция ТипДокументаСкладскаяРасписка() Экспорт + + Возврат "ЭлектроннаяCкладскаяРасписка"; + +КонецФункции + +// Возвращает текстовое представление типа документа экспедиторская расписка. +// +// Возвращаемое значение: +// Строка - текстовое представление типа документа. +Функция ТипДокументаЭкспедиторскаяРасписка() Экспорт + + Возврат "ЭлектроннаяЭкспедиторскаяРасписка"; + +КонецФункции + + +// Возвращает текстовое представление типа документа поручение экспедитору. +// +// Возвращаемое значение: +// Строка - текстовое представление типа документа. +Функция ТипДокументаПоручениеЭкспедитору() Экспорт + + Возврат "ЭлектронноеПоручениеЭкспедитору"; + +КонецФункции + // Возвращает текстовое представление типа документа транспортной накладной. // // Возвращаемое значение: diff --git a/Конфигурация/CommonModules/ОбменСГИСЭПДПереопределяемый/Ext/Module.bsl b/Конфигурация/CommonModules/ОбменСГИСЭПДПереопределяемый/Ext/Module.bsl index 1a3d1527d..9eac7a3b2 100644 --- a/Конфигурация/CommonModules/ОбменСГИСЭПДПереопределяемый/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ОбменСГИСЭПДПереопределяемый/Ext/Module.bsl @@ -30,6 +30,18 @@ Процедура ОбработкаЗаполненияЭДФ(ДокументОбъект, ДанныеЗаполнения, ТекстЗаполнения, СтандартнаяОбработка) Экспорт КонецПроцедуры +//@skip-check module-empty-method +Процедура ОбработкаЗаполненияЭПЭ(ДокументОбъект, ДанныеЗаполнения, ТекстЗаполнения, СтандартнаяОбработка) Экспорт +КонецПроцедуры + +//@skip-check module-empty-method +Процедура ОбработкаЗаполненияЭЭР(ДокументОбъект, ДанныеЗаполнения, ТекстЗаполнения, СтандартнаяОбработка) Экспорт +КонецПроцедуры + +//@skip-check module-empty-method +Процедура ОбработкаЗаполненияЭСР(ДокументОбъект, ДанныеЗаполнения, ТекстЗаполнения, СтандартнаяОбработка) Экспорт +КонецПроцедуры + //@skip-check module-empty-method Процедура ПриСозданииНаСервереФормыСпискаЭПД(Форма, Отказ, СтандартнаяОбработка) Экспорт КонецПроцедуры @@ -73,4 +85,23 @@ Возврат "СправочникСсылка.БанковскиеСчета"; -КонецФункции \ No newline at end of file +КонецФункции + + +Функция ИмяТипаСтраны() Экспорт + + Возврат "СправочникСсылка.СтраныМира"; + +КонецФункции + +// Получить реквизиты договора. +// +// Параметры: +// СсылкаНаДоговор Ссылка на договор +// Результат - Структура +// * Наименование - строка +// * Номер - строка +// * Дата - дата +Процедура ПолучитьРеквизитыДоговора(СсылкаНаДоговор, Результат) Экспорт + +КонецПроцедуры diff --git a/Конфигурация/CommonModules/ОбменСГИСЭПДСлужебный/Ext/Module.bsl b/Конфигурация/CommonModules/ОбменСГИСЭПДСлужебный/Ext/Module.bsl index 7e0a083c0..7690c1a8a 100644 --- a/Конфигурация/CommonModules/ОбменСГИСЭПДСлужебный/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ОбменСГИСЭПДСлужебный/Ext/Module.bsl @@ -1,15 +1,20 @@ Функция ЭтоЭПД(ИсточникДанныхСсылка) Экспорт + Если ТипЗнч(ИсточникДанныхСсылка) = Тип ("ДокументСсылка.ЭлектроннаяТранспортнаяНакладная") Или ТипЗнч(ИсточникДанныхСсылка) = Тип ("ДокументСсылка.ЭлектронныйЗаказНаряд") Или ТипЗнч(ИсточникДанныхСсылка) = Тип ("ДокументСсылка.ЭлектроннаяСопроводительнаяВедомость") Или ТипЗнч(ИсточникДанныхСсылка) = Тип ("ДокументСсылка.ЭлектронныйЗаказЗаявка") Или ТипЗнч(ИсточникДанныхСсылка) = Тип ("ДокументСсылка.ЭлектронныйПутевойЛист") - Или ТипЗнч(ИсточникДанныхСсылка) = Тип ("ДокументСсылка.ЭлектронныйДоговорФрахтования") + Или ТипЗнч(ИсточникДанныхСсылка) = Тип ("ДокументСсылка.ЭлектронныйДоговорФрахтования") + Или ТипЗнч(ИсточникДанныхСсылка) = Тип ("ДокументСсылка.ЭлектронноеПоручениеЭкспедитору") + Или ТипЗнч(ИсточникДанныхСсылка) = Тип ("ДокументСсылка.ЭлектроннаяЭкспедиторскаяРасписка") + Или ТипЗнч(ИсточникДанныхСсылка) = Тип ("ДокументСсылка.ЭлектроннаяCкладскаяРасписка") Тогда Возврат Истина; КонецЕсли; Возврат Ложь; + КонецФункции \ No newline at end of file diff --git a/Конфигурация/CommonModules/ОбменСКонтрагентамиИнтеграцияСобытия/Ext/Module.bsl b/Конфигурация/CommonModules/ОбменСКонтрагентамиИнтеграцияСобытия/Ext/Module.bsl index 32c5e093b..5495b0db3 100644 --- a/Конфигурация/CommonModules/ОбменСКонтрагентамиИнтеграцияСобытия/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ОбменСКонтрагентамиИнтеграцияСобытия/Ext/Module.bsl @@ -6,7 +6,7 @@ // См. ЭлектронноеВзаимодействие.ПриДобавленииОбработчиковОбновления. Процедура ПриДобавленииОбработчиковОбновления(Обработчики) Экспорт - + ЭлектронныеДокументыЭДО.ПриДобавленииОбработчиковОбновления(Обработчики); ИнтеграцияЭДО.ПриДобавленииОбработчиковОбновления(Обработчики); НастройкиЭДОСобытия.ПриДобавленииОбработчиковОбновления(Обработчики); @@ -18,6 +18,7 @@ ИнтерфейсДокументовЭДО.ПриДобавленииОбработчиковОбновления(Обработчики); УчетныеЗаписиЭДО.ПриДобавленииОбработчиковОбновления(Обработчики); ФорматыЭДО.ПриДобавленииОбработчиковОбновления(Обработчики); + СервисEDIСлужебный.ПриДобавленииОбработчиковОбновления(Обработчики); КонецПроцедуры diff --git a/Конфигурация/CommonModules/ОбменСКонтрагентамиКлиент/Ext/Module.bsl b/Конфигурация/CommonModules/ОбменСКонтрагентамиКлиент/Ext/Module.bsl index c3ee3d3a4..a10d31b4e 100644 --- a/Конфигурация/CommonModules/ОбменСКонтрагентамиКлиент/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ОбменСКонтрагентамиКлиент/Ext/Module.bsl @@ -448,6 +448,9 @@ ПараметрыЗапуска.ОтборУчетныхДокументов = ПараметрыОтбора.ОтборВРазделеСоздать; Для Каждого ЭлементОтбора Из ПараметрыЗапуска.ОтборУчетныхДокументов Цикл + Если ЭлементОтбора.Поле = "Ссылка" Тогда + Продолжить; + КонецЕсли; ЭлементОтбора.Поле = "Документ." + ЭлементОтбора.Поле; КонецЦикла; diff --git a/Конфигурация/CommonModules/ОбновлениеИнформационнойБазы/Ext/Module.bsl b/Конфигурация/CommonModules/ОбновлениеИнформационнойБазы/Ext/Module.bsl index 78f0a778c..fe2f3e632 100644 --- a/Конфигурация/CommonModules/ОбновлениеИнформационнойБазы/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ОбновлениеИнформационнойБазы/Ext/Module.bsl @@ -3587,188 +3587,6 @@ Возврат ОбновлениеИнформационнойБазыСлужебный.РазрешеноМногопоточноеОбновление(); КонецФункции -// Возвращает прогресс обновления областей данных. -// -// Параметры: -// РежимОбновления - Строка - определяет, по какому этапу обновления необходимо получить данные. -// Доступные значения: "Оперативное", "Отложенное". -// -// Возвращаемое значение: -// Структура: -// * Обновлено - Число - количество областей, этап обновления которых завершен. -// * Выполняется - Число - количество областей, по которым обновление выполняется. -// * Ожидают - Число - количество областей, ожидающих начало этапа обновления. -// * Проблемы - Число - количество областей, в процессе обновления которых произошли ошибки. -// * ОбластиСПроблемами - Массив из Число - номера областей, в процессе обновления которых произошли ошибки. -// * ОбластиВыполняется - Массив из Число - номера областей, по которым обновление выполняется. -// * ОбластиОжидает - Массив из Число - номера областей, ожидающих начало этапа обновления. -// * ОбластиОбновлено - Массив из Число - номера областей, этап обновления которых завершен. -// -Функция ПрогрессОбновленияОбластейДанных(РежимОбновления) Экспорт - - Если Не ОбщегоНазначения.РазделениеВключено() - Или Не ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.БазоваяФункциональность") - Или Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбновлениеВерсииИБВМоделиСервиса") Тогда - Возврат Неопределено; - КонецЕсли; - - РежимОбновленияОперативное = "Оперативное"; - РежимОбновленияОтложенное = "Отложенное"; - - Если РежимОбновления = РежимОбновленияОперативное Тогда - РежимыВыполнения = Новый Массив; - РежимыВыполнения.Добавить(Перечисления.РежимыВыполненияОбработчиков.Оперативно); - РежимыВыполнения.Добавить(Перечисления.РежимыВыполненияОбработчиков.Монопольно); - ИначеЕсли РежимОбновления = РежимОбновленияОтложенное Тогда - РежимыВыполнения = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве( - Перечисления.РежимыВыполненияОбработчиков.Отложенно); - Иначе - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Некорректное значение параметра ""%1"". - |Доступные значения: ""%2"", ""%3""'"), "РежимОбновления", РежимОбновленияОперативное, РежимОбновленияОтложенное); - КонецЕсли; - - ПорядокСостоянияОбновлено = 4; - ПорядокСостоянияОжидает = 3; - ПорядокСостоянияВыполняется = 2; - ПорядокСостоянияОшибка = 1; - - Запрос = Новый Запрос; - - Запрос.УстановитьПараметр("РежимыВыполнения", РежимыВыполнения); - Запрос.УстановитьПараметр("РежимОбновления", РежимОбновления); - Запрос.УстановитьПараметр("РежимОбновленияОперативное", РежимОбновленияОперативное); - Запрос.УстановитьПараметр("РежимОбновленияОтложенное", РежимОбновленияОтложенное); - - Запрос.УстановитьПараметр("ПорядокСостоянияОбновлено", ПорядокСостоянияОбновлено); - Запрос.УстановитьПараметр("ПорядокСостоянияВыполняется", ПорядокСостоянияВыполняется); - Запрос.УстановитьПараметр("ПорядокСостоянияОжидает", ПорядокСостоянияОжидает); - Запрос.УстановитьПараметр("ПорядокСостоянияОшибка", ПорядокСостоянияОшибка); - - МодульОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("ОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса"); - ОбластиОбновленныеНаВерсию = МодульОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса.ОбластиОбновленныеНаВерсию(Метаданные.Имя, Метаданные.Версия); - - МодульРаботаВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("РаботаВМоделиСервиса"); - ИспользуемыеОбластиДанных = МодульРаботаВМоделиСервиса.ИспользуемыеОбластиДанных(); - ТаблицаИспользуемыеОбласти = Новый ТаблицаЗначений; - ТаблицаИспользуемыеОбласти.Колонки.Добавить("ОбластьДанных", Новый ОписаниеТипов("Число")); - ОбщегоНазначенияКлиентСервер.ДополнитьТаблицуИзМассива(ТаблицаИспользуемыеОбласти, ИспользуемыеОбластиДанных, "ОбластьДанных"); - Запрос.УстановитьПараметр("ИспользуемыеОбласти", ТаблицаИспользуемыеОбласти); - Запрос.УстановитьПараметр("ОбновленныеОбласти", ОбластиОбновленныеНаВерсию); - - Запрос.Текст = - "ВЫБРАТЬ - | ИспользуемыеОбласти.ОбластьДанных КАК ОбластьДанных - |ПОМЕСТИТЬ ИспользуемыеОбласти - |ИЗ - | &ИспользуемыеОбласти КАК ИспользуемыеОбласти - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | ОбновленныеОбласти.ОбластьДанныхВспомогательныеДанные КАК ОбластьДанныхВспомогательныеДанные, - | ОбновленныеОбласти.ВыполненаРегистрацияОтложенныхОбработчиков КАК ВыполненаРегистрацияОтложенныхОбработчиков - |ПОМЕСТИТЬ ОбновленныеОбласти - |ИЗ - | &ОбновленныеОбласти КАК ОбновленныеОбласти - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | ИспользуемыеОбласти.ОбластьДанных КАК ОбластьДанных, - | НЕ ОбновленныеОбласти.ОбластьДанныхВспомогательныеДанные ЕСТЬ NULL КАК ОперативноеОбновлениеЗавершено, - | НЕ ОбновленныеОбласти.ОбластьДанныхВспомогательныеДанные ЕСТЬ NULL - | И НЕ ОбновленныеОбласти.ВыполненаРегистрацияОтложенныхОбработчиков КАК ВыполняетсяРегистрацияОтложенныхОбработчиков - |ПОМЕСТИТЬ ОбластиДанных - |ИЗ - | ИспользуемыеОбласти КАК ИспользуемыеОбласти - | ЛЕВОЕ СОЕДИНЕНИЕ ОбновленныеОбласти КАК ОбновленныеОбласти - | ПО (ОбновленныеОбласти.ОбластьДанныхВспомогательныеДанные = ИспользуемыеОбласти.ОбластьДанных) - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | ОбластиДанных.ОбластьДанных КАК ОбластьДанных, - | МИНИМУМ(ВЫБОР - | КОГДА &РежимОбновления = &РежимОбновленияОперативное - | И ОбластиДанных.ОперативноеОбновлениеЗавершено - | ТОГДА ВЫБОР - | КОГДА ОбластиДанных.ВыполняетсяРегистрацияОтложенныхОбработчиков - | ТОГДА &ПорядокСостоянияВыполняется - | ИНАЧЕ &ПорядокСостоянияОбновлено - | КОНЕЦ - | КОГДА &РежимОбновления = &РежимОбновленияОтложенное - | И НЕ ОбластиДанных.ОперативноеОбновлениеЗавершено - | ТОГДА &ПорядокСостоянияОжидает - | КОГДА &РежимОбновления = &РежимОбновленияОтложенное - | И ЕСТЬNULL(ОбработчикиОбновления.Статус, ЗНАЧЕНИЕ(Перечисление.СтатусыОбработчиковОбновления.Выполнен)) = ЗНАЧЕНИЕ(Перечисление.СтатусыОбработчиковОбновления.Выполнен) - | ТОГДА &ПорядокСостоянияОбновлено - | КОГДА ОбработчикиОбновления.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыОбработчиковОбновления.Выполняется) - | ТОГДА &ПорядокСостоянияВыполняется - | КОГДА ОбработчикиОбновления.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыОбработчиковОбновления.Ошибка) - | ТОГДА &ПорядокСостоянияОшибка - | ИНАЧЕ &ПорядокСостоянияВыполняется - | КОНЕЦ) КАК ПорядокСостояния - |ПОМЕСТИТЬ СтатистикаОбновления - |ИЗ - | ОбластиДанных КАК ОбластиДанных - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ОбработчикиОбновления КАК ОбработчикиОбновления - | ПО (ОбработчикиОбновления.ОбластьДанныхВспомогательныеДанные = ОбластиДанных.ОбластьДанных) - | И (ОбработчикиОбновления.РежимВыполнения В (&РежимыВыполнения)) - | - |СГРУППИРОВАТЬ ПО - | ОбластиДанных.ОбластьДанных - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | СтатистикаОбновления.ПорядокСостояния КАК ПорядокСостояния, - | СтатистикаОбновления.ОбластьДанных КАК ОбластьДанных - |ИЗ - | СтатистикаОбновления КАК СтатистикаОбновления - | - |УПОРЯДОЧИТЬ ПО - | ОбластьДанных - |ИТОГИ - | КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ОбластьДанных) - |ПО - | ПорядокСостояния"; - - ПрогрессОбновления = ОбновлениеИнформационнойБазыСлужебный.НовыйПрогрессОбновленияОбластейДанных(); - - Результат = Запрос.Выполнить(); - Если Результат.Пустой() Тогда - Возврат ПрогрессОбновления; - КонецЕсли; - - ВыборкаПорядокСостояния = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); - Пока ВыборкаПорядокСостояния.Следующий() Цикл - - Если ВыборкаПорядокСостояния.ПорядокСостояния = ПорядокСостоянияОбновлено Тогда - ПрогрессОбновления.Обновлено = ВыборкаПорядокСостояния.ОбластьДанных; - Расшифровка = ПрогрессОбновления.ОбластиОбновлено; - ИначеЕсли ВыборкаПорядокСостояния.ПорядокСостояния = ПорядокСостоянияВыполняется Тогда - ПрогрессОбновления.Выполняется = ВыборкаПорядокСостояния.ОбластьДанных; - Расшифровка = ПрогрессОбновления.ОбластиВыполняется; - ИначеЕсли ВыборкаПорядокСостояния.ПорядокСостояния = ПорядокСостоянияОшибка Тогда - ПрогрессОбновления.Проблемы = ВыборкаПорядокСостояния.ОбластьДанных; - Расшифровка = ПрогрессОбновления.ОбластиСПроблемами; - Иначе - ПрогрессОбновления.Ожидают = ВыборкаПорядокСостояния.ОбластьДанных; - Расшифровка = ПрогрессОбновления.ОбластиОжидает; - КонецЕсли; - - ВыборкаОбласти = ВыборкаПорядокСостояния.Выбрать(); - Пока ВыборкаОбласти.Следующий() Цикл - Расшифровка.Добавить(ВыборкаОбласти.ОбластьДанных); - КонецЦикла; - - КонецЦикла; - - Возврат ПрогрессОбновления; - -КонецФункции - // Возвращает таблицу обработчиков обновления по указанному отбору. // В режиме сервиса, если не задан отбор по областям данных, // возвращаются все обработчики - разделенные и неразделенные. @@ -4004,6 +3822,192 @@ // Конец ИнтернетПоддержкаПользователей.ПолучениеОбновленийПрограммы +// ТехнологияСервиса + +// Возвращает прогресс обновления областей данных. +// +// Параметры: +// РежимОбновления - Строка - определяет, по какому этапу обновления необходимо получить данные. +// Доступные значения: "Оперативное", "Отложенное". +// +// Возвращаемое значение: +// Структура: +// * Обновлено - Число - количество областей, этап обновления которых завершен. +// * Выполняется - Число - количество областей, по которым обновление выполняется. +// * Ожидают - Число - количество областей, ожидающих начало этапа обновления. +// * Проблемы - Число - количество областей, в процессе обновления которых произошли ошибки. +// * ОбластиСПроблемами - Массив из Число - номера областей, в процессе обновления которых произошли ошибки. +// * ОбластиВыполняется - Массив из Число - номера областей, по которым обновление выполняется. +// * ОбластиОжидает - Массив из Число - номера областей, ожидающих начало этапа обновления. +// * ОбластиОбновлено - Массив из Число - номера областей, этап обновления которых завершен. +// +Функция ПрогрессОбновленияОбластейДанных(РежимОбновления) Экспорт + + Если Не ОбщегоНазначения.РазделениеВключено() + Или Не ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.БазоваяФункциональность") + Или Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбновлениеВерсииИБВМоделиСервиса") Тогда + Возврат Неопределено; + КонецЕсли; + + РежимОбновленияОперативное = "Оперативное"; + РежимОбновленияОтложенное = "Отложенное"; + + Если РежимОбновления = РежимОбновленияОперативное Тогда + РежимыВыполнения = Новый Массив; + РежимыВыполнения.Добавить(Перечисления.РежимыВыполненияОбработчиков.Оперативно); + РежимыВыполнения.Добавить(Перечисления.РежимыВыполненияОбработчиков.Монопольно); + ИначеЕсли РежимОбновления = РежимОбновленияОтложенное Тогда + РежимыВыполнения = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве( + Перечисления.РежимыВыполненияОбработчиков.Отложенно); + Иначе + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Некорректное значение параметра ""%1"". + |Доступные значения: ""%2"", ""%3""'"), "РежимОбновления", РежимОбновленияОперативное, РежимОбновленияОтложенное); + КонецЕсли; + + ПорядокСостоянияОбновлено = 4; + ПорядокСостоянияОжидает = 3; + ПорядокСостоянияВыполняется = 2; + ПорядокСостоянияОшибка = 1; + + Запрос = Новый Запрос; + + Запрос.УстановитьПараметр("РежимыВыполнения", РежимыВыполнения); + Запрос.УстановитьПараметр("РежимОбновления", РежимОбновления); + Запрос.УстановитьПараметр("РежимОбновленияОперативное", РежимОбновленияОперативное); + Запрос.УстановитьПараметр("РежимОбновленияОтложенное", РежимОбновленияОтложенное); + + Запрос.УстановитьПараметр("ПорядокСостоянияОбновлено", ПорядокСостоянияОбновлено); + Запрос.УстановитьПараметр("ПорядокСостоянияВыполняется", ПорядокСостоянияВыполняется); + Запрос.УстановитьПараметр("ПорядокСостоянияОжидает", ПорядокСостоянияОжидает); + Запрос.УстановитьПараметр("ПорядокСостоянияОшибка", ПорядокСостоянияОшибка); + + МодульОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("ОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса"); + ОбластиОбновленныеНаВерсию = МодульОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса.ОбластиОбновленныеНаВерсию(Метаданные.Имя, Метаданные.Версия); + + МодульРаботаВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("РаботаВМоделиСервиса"); + ИспользуемыеОбластиДанных = МодульРаботаВМоделиСервиса.ИспользуемыеОбластиДанных(); + ТаблицаИспользуемыеОбласти = Новый ТаблицаЗначений; + ТаблицаИспользуемыеОбласти.Колонки.Добавить("ОбластьДанных", Новый ОписаниеТипов("Число")); + ОбщегоНазначенияКлиентСервер.ДополнитьТаблицуИзМассива(ТаблицаИспользуемыеОбласти, ИспользуемыеОбластиДанных, "ОбластьДанных"); + Запрос.УстановитьПараметр("ИспользуемыеОбласти", ТаблицаИспользуемыеОбласти); + Запрос.УстановитьПараметр("ОбновленныеОбласти", ОбластиОбновленныеНаВерсию); + + Запрос.Текст = + "ВЫБРАТЬ + | ИспользуемыеОбласти.ОбластьДанных КАК ОбластьДанных + |ПОМЕСТИТЬ ИспользуемыеОбласти + |ИЗ + | &ИспользуемыеОбласти КАК ИспользуемыеОбласти + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ОбновленныеОбласти.ОбластьДанныхВспомогательныеДанные КАК ОбластьДанныхВспомогательныеДанные, + | ОбновленныеОбласти.ВыполненаРегистрацияОтложенныхОбработчиков КАК ВыполненаРегистрацияОтложенныхОбработчиков + |ПОМЕСТИТЬ ОбновленныеОбласти + |ИЗ + | &ОбновленныеОбласти КАК ОбновленныеОбласти + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ИспользуемыеОбласти.ОбластьДанных КАК ОбластьДанных, + | НЕ ОбновленныеОбласти.ОбластьДанныхВспомогательныеДанные ЕСТЬ NULL КАК ОперативноеОбновлениеЗавершено, + | НЕ ОбновленныеОбласти.ОбластьДанныхВспомогательныеДанные ЕСТЬ NULL + | И НЕ ОбновленныеОбласти.ВыполненаРегистрацияОтложенныхОбработчиков КАК ВыполняетсяРегистрацияОтложенныхОбработчиков + |ПОМЕСТИТЬ ОбластиДанных + |ИЗ + | ИспользуемыеОбласти КАК ИспользуемыеОбласти + | ЛЕВОЕ СОЕДИНЕНИЕ ОбновленныеОбласти КАК ОбновленныеОбласти + | ПО (ОбновленныеОбласти.ОбластьДанныхВспомогательныеДанные = ИспользуемыеОбласти.ОбластьДанных) + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ОбластиДанных.ОбластьДанных КАК ОбластьДанных, + | МИНИМУМ(ВЫБОР + | КОГДА &РежимОбновления = &РежимОбновленияОперативное + | И ОбластиДанных.ОперативноеОбновлениеЗавершено + | ТОГДА ВЫБОР + | КОГДА ОбластиДанных.ВыполняетсяРегистрацияОтложенныхОбработчиков + | ТОГДА &ПорядокСостоянияВыполняется + | ИНАЧЕ &ПорядокСостоянияОбновлено + | КОНЕЦ + | КОГДА &РежимОбновления = &РежимОбновленияОтложенное + | И НЕ ОбластиДанных.ОперативноеОбновлениеЗавершено + | ТОГДА &ПорядокСостоянияОжидает + | КОГДА &РежимОбновления = &РежимОбновленияОтложенное + | И ЕСТЬNULL(ОбработчикиОбновления.Статус, ЗНАЧЕНИЕ(Перечисление.СтатусыОбработчиковОбновления.Выполнен)) = ЗНАЧЕНИЕ(Перечисление.СтатусыОбработчиковОбновления.Выполнен) + | ТОГДА &ПорядокСостоянияОбновлено + | КОГДА ОбработчикиОбновления.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыОбработчиковОбновления.Выполняется) + | ТОГДА &ПорядокСостоянияВыполняется + | КОГДА ОбработчикиОбновления.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыОбработчиковОбновления.Ошибка) + | ТОГДА &ПорядокСостоянияОшибка + | ИНАЧЕ &ПорядокСостоянияОжидает + | КОНЕЦ) КАК ПорядокСостояния + |ПОМЕСТИТЬ СтатистикаОбновления + |ИЗ + | ОбластиДанных КАК ОбластиДанных + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ОбработчикиОбновления КАК ОбработчикиОбновления + | ПО (ОбработчикиОбновления.ОбластьДанныхВспомогательныеДанные = ОбластиДанных.ОбластьДанных) + | И (ОбработчикиОбновления.РежимВыполнения В (&РежимыВыполнения)) + | + |СГРУППИРОВАТЬ ПО + | ОбластиДанных.ОбластьДанных + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | СтатистикаОбновления.ПорядокСостояния КАК ПорядокСостояния, + | СтатистикаОбновления.ОбластьДанных КАК ОбластьДанных + |ИЗ + | СтатистикаОбновления КАК СтатистикаОбновления + | + |УПОРЯДОЧИТЬ ПО + | ОбластьДанных + |ИТОГИ + | КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ОбластьДанных) + |ПО + | ПорядокСостояния"; + + ПрогрессОбновления = ОбновлениеИнформационнойБазыСлужебный.НовыйПрогрессОбновленияОбластейДанных(); + + Результат = Запрос.Выполнить(); + Если Результат.Пустой() Тогда + Возврат ПрогрессОбновления; + КонецЕсли; + + ВыборкаПорядокСостояния = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); + Пока ВыборкаПорядокСостояния.Следующий() Цикл + + Если ВыборкаПорядокСостояния.ПорядокСостояния = ПорядокСостоянияОбновлено Тогда + ПрогрессОбновления.Обновлено = ВыборкаПорядокСостояния.ОбластьДанных; + Расшифровка = ПрогрессОбновления.ОбластиОбновлено; + ИначеЕсли ВыборкаПорядокСостояния.ПорядокСостояния = ПорядокСостоянияВыполняется Тогда + ПрогрессОбновления.Выполняется = ВыборкаПорядокСостояния.ОбластьДанных; + Расшифровка = ПрогрессОбновления.ОбластиВыполняется; + ИначеЕсли ВыборкаПорядокСостояния.ПорядокСостояния = ПорядокСостоянияОшибка Тогда + ПрогрессОбновления.Проблемы = ВыборкаПорядокСостояния.ОбластьДанных; + Расшифровка = ПрогрессОбновления.ОбластиСПроблемами; + Иначе + ПрогрессОбновления.Ожидают = ВыборкаПорядокСостояния.ОбластьДанных; + Расшифровка = ПрогрессОбновления.ОбластиОжидает; + КонецЕсли; + + ВыборкаОбласти = ВыборкаПорядокСостояния.Выбрать(); + Пока ВыборкаОбласти.Следующий() Цикл + Расшифровка.Добавить(ВыборкаОбласти.ОбластьДанных); + КонецЦикла; + + КонецЦикла; + + Возврат ПрогрессОбновления; + +КонецФункции + +// Конец ТехнологияСервиса + #КонецОбласти #Область ЗаполнениеПредопределенныхЭлементов diff --git a/Конфигурация/CommonModules/ОбновлениеИнформационнойБазыБСД/Ext/Module.bsl b/Конфигурация/CommonModules/ОбновлениеИнформационнойБазыБСД/Ext/Module.bsl index 74ab51304..3ff884eb2 100644 --- a/Конфигурация/CommonModules/ОбновлениеИнформационнойБазыБСД/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ОбновлениеИнформационнойБазыБСД/Ext/Module.bsl @@ -39,7 +39,7 @@ Процедура ПриДобавленииПодсистемы(Описание) Экспорт Описание.Имя = "БиблиотекаСинхронизацииДанных"; - Описание.Версия = "1.1.1.43"; + Описание.Версия = "1.1.1.50"; Описание.ИдентификаторИнтернетПоддержки = "DSL"; Описание.РежимВыполненияОтложенныхОбработчиков = "Параллельно"; Описание.ПараллельноеОтложенноеОбновлениеСВерсии = "1.0.1.1"; diff --git a/Конфигурация/CommonModules/ОбновлениеИнформационнойБазыБСП/Ext/Module.bsl b/Конфигурация/CommonModules/ОбновлениеИнформационнойБазыБСП/Ext/Module.bsl index ab1ff9274..4bf65cfdc 100644 --- a/Конфигурация/CommonModules/ОбновлениеИнформационнойБазыБСП/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ОбновлениеИнформационнойБазыБСП/Ext/Module.bsl @@ -44,7 +44,7 @@ Процедура ПриДобавленииПодсистемы(Описание) Экспорт Описание.Имя = "СтандартныеПодсистемы"; - Описание.Версия = "3.2.1.489"; + Описание.Версия = "3.2.1.517"; Описание.ИдентификаторИнтернетПоддержки = "SSL"; Описание.РежимВыполненияОтложенныхОбработчиков = "Параллельно"; Описание.ПараллельноеОтложенноеОбновлениеСВерсии = "2.3.3.0"; diff --git a/Конфигурация/CommonModules/ОбновлениеИнформационнойБазыБЭД/Ext/Module.bsl b/Конфигурация/CommonModules/ОбновлениеИнформационнойБазыБЭД/Ext/Module.bsl index 66a7ed845..77d13ebcd 100644 --- a/Конфигурация/CommonModules/ОбновлениеИнформационнойБазыБЭД/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ОбновлениеИнформационнойБазыБЭД/Ext/Module.bsl @@ -17,7 +17,7 @@ // Функция ВерсияБиблиотеки() Экспорт - Возврат "1.10.1.53"; + Возврат "1.10.1.67"; КонецФункции diff --git a/Конфигурация/CommonModules/ОбновлениеИнформационнойБазыГИСМ/Ext/Module.bsl b/Конфигурация/CommonModules/ОбновлениеИнформационнойБазыГИСМ/Ext/Module.bsl index 8de88806a..d7388e5ad 100644 --- a/Конфигурация/CommonModules/ОбновлениеИнформационнойБазыГИСМ/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ОбновлениеИнформационнойБазыГИСМ/Ext/Module.bsl @@ -30,17 +30,6 @@ Обработчик.РежимВыполнения = "Монопольно"; Обработчик.Комментарий = НСтр("ru = 'Заполнение версии схем обмена с ГИСМ.'"); - Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "1.0.2.1"; - Обработчик.РежимВыполнения = "Отложенно"; - Обработчик.Процедура = "ОбновлениеИнформационнойБазыГИСМ.НастройкиОбменаГИСМ_ОбработатьДанныеДляПереходаНаНовуюВерсию"; - Обработчик.ПроцедураЗаполненияДанныхОбновления = "ОбновлениеИнформационнойБазыГИСМ.НастройкиОбменаГИСМ_ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию"; - Обработчик.Идентификатор = Новый УникальныйИдентификатор("a1f8ea38-0dd3-42c0-a746-385d3066b99f"); - Обработчик.ОчередьОтложеннойОбработки = 1; - Обработчик.ЧитаемыеОбъекты = "Константа.НастройкиОбменаГосИС"; - Обработчик.ИзменяемыеОбъекты = "Константа.НастройкиОбменаГосИС"; - Обработчик.Комментарий = НСтр("ru = 'Обновление настроек обмена с ГИСМ.'"); - ТипОрганизация = Метаданные.ОпределяемыеТипы.Организация.Тип.Типы()[0]; Если ТипОрганизация <> Тип("Строка") Тогда @@ -97,17 +86,6 @@ Обработчик.ПриоритетыВыполнения = ОбновлениеИнформационнойБазы.ПриоритетыВыполненияОбработчика(); - Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "1.0.2.5"; - Обработчик.РежимВыполнения = "Отложенно"; - Обработчик.Процедура = "ОбновлениеИнформационнойБазыГИСМ.ВерсииСхемОбменаГИСМ_ВерсияСхемОбменаПоУмолчанию_ОбработатьДанныеДляПереходаНаНовуюВерсию"; - Обработчик.ПроцедураЗаполненияДанныхОбновления = "ОбновлениеИнформационнойБазыГИСМ.ВерсииСхемОбменаГИСМ_ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию"; - Обработчик.Идентификатор = Новый УникальныйИдентификатор("e9552338-0042-48cf-b294-db94b2469f88"); - Обработчик.ОчередьОтложеннойОбработки = 1; - Обработчик.ЧитаемыеОбъекты = "Константа.ВерсииСхемОбменаГИСМ"; - Обработчик.ИзменяемыеОбъекты = "Константа.ВерсииСхемОбменаГИСМ"; - Обработчик.Комментарий = НСтр("ru = 'Обновление версии схем обмена с ГИСМ до 2.41'"); - Обработчик = Обработчики.Добавить(); Обработчик.Версия = "1.0.2.6"; Обработчик.РежимВыполнения = "Отложенно"; @@ -226,11 +204,7 @@ // См. СтандартныеПодсистемыСервер.ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод Процедура ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод(Методы) Экспорт - Методы.Вставить("НастройкиОбменаГИСМ_ОбработатьДанныеДляПереходаНаНовуюВерсию"); - Методы.Вставить("ВерсииСхемОбменаГИСМ_ВерсияСхемОбменаПоУмолчанию_ОбработатьДанныеДляПереходаНаНовуюВерсию"); - Методы.Вставить("ВерсииСхемОбменаГИСМ_ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию"); Методы.Вставить("НачальноеЗаполнение"); - Методы.Вставить("НастройкиОбменаГИСМ_ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию"); КонецПроцедуры @@ -301,106 +275,6 @@ КонецПроцедуры -Процедура ВерсииСхемОбменаГИСМ_ВерсияСхемОбменаПоУмолчанию_ОбработатьДанныеДляПереходаНаНовуюВерсию(Параметры) Экспорт - - ОбработкаЗавершена = Ложь; - - НачатьТранзакцию(); - Попытка - - Блокировка = Новый БлокировкаДанных; - ЭлементБлокировки = Блокировка.Добавить("Константа.ВерсииСхемОбменаГИСМ"); - ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; - Блокировка.Заблокировать(); - - ИнтеграцияГИСМ.ПроверитьОбновитьВерсиюСхемОбмена(ИнтеграцияГИСМ.ВерсияСхемОбменаПоУмолчанию(), Истина); - - ОбработкаЗавершена = Истина; - - ЗафиксироватьТранзакцию(); - - Исключение - - ОтменитьТранзакцию(); - - ОбработкаЗавершена = Ложь; - - ТекстСообщения = НСтр("ru = 'Не удалось обработать константу ВерсииСхемОбменаГИСМ по причине: %Причина%'"); - ТекстСообщения = СтрЗаменить(ТекстСообщения, "%Причина%", ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - ЗаписьЖурналаРегистрации(ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(), - УровеньЖурналаРегистрации.Предупреждение, - Метаданные.Константы.ВерсииСхемОбменаГИСМ,, - ТекстСообщения); - - КонецПопытки; - - Параметры.ОбработкаЗавершена = ОбработкаЗавершена; - -КонецПроцедуры - -Процедура ВерсииСхемОбменаГИСМ_ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию(Параметры) Экспорт - - Возврат; - -КонецПроцедуры - -#КонецОбласти - -#Область ОбновлениеИнформационнойБазы_НастройкиОбменаГИСМ - -Процедура НастройкиОбменаГИСМ_ОбработатьДанныеДляПереходаНаНовуюВерсию(Параметры) Экспорт - - НачатьТранзакцию(); - Попытка - - Блокировка = Новый БлокировкаДанных; - ЭлементБлокировки = Блокировка.Добавить("Константа.НастройкиОбменаГосИС"); - ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; - Блокировка.Заблокировать(); - - НастройкиОбмена = ИнтеграцияИС.НастройкиОбменаГосИС(); - - Если НастройкиОбмена <> Неопределено Тогда - - Если НастройкиОбмена.Колонки.Найти("Подразделение") = Неопределено Тогда - - НастройкиОбмена.Колонки.Добавить("Подразделение", Метаданные.ОпределяемыеТипы.Подразделение.Тип); - - ХранилищеЗначения = Новый ХранилищеЗначения(НастройкиОбмена); - - МенеджерЗначения = Константы.НастройкиОбменаГосИС.СоздатьМенеджерЗначения(); - МенеджерЗначения.Значение = ХранилищеЗначения; - ОбновлениеИнформационнойБазы.ЗаписатьДанные(МенеджерЗначения); - - КонецЕсли; - - КонецЕсли; - - ЗафиксироватьТранзакцию(); - - Исключение - - ОтменитьТранзакцию(); - - ТекстСообщения = НСтр("ru = 'Не удалось обработать константу НастройкиОбменаГосИС по причине: %Причина%'"); - ТекстСообщения = СтрЗаменить(ТекстСообщения, "%Причина%", ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - ЗаписьЖурналаРегистрации(ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(), - УровеньЖурналаРегистрации.Предупреждение, - Метаданные.Константы.НастройкиОбменаГосИС,, - ТекстСообщения); - - КонецПопытки; - - Параметры.ОбработкаЗавершена = Истина; - -КонецПроцедуры - -Процедура НастройкиОбменаГИСМ_ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию(Параметры) Экспорт - - Возврат; - -КонецПроцедуры - #КонецОбласти #Область ОбновлениеИнформационнойБазы_ОтключениеГИСМ diff --git a/Конфигурация/CommonModules/ОбновлениеИнформационнойБазыГосИС/Ext/Module.bsl b/Конфигурация/CommonModules/ОбновлениеИнформационнойБазыГосИС/Ext/Module.bsl index 686eb665b..d2b6c2f82 100644 --- a/Конфигурация/CommonModules/ОбновлениеИнформационнойБазыГосИС/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ОбновлениеИнформационнойБазыГосИС/Ext/Module.bsl @@ -96,17 +96,15 @@ // РегистрыСведений.ВскрытыеПотребительскиеУпаковкиИС.ПриДобавленииОбработчиковОбновления(Обработчики); - Если ОбщегоНазначенияИС.ТребуетсяПовторнаяЗагрузкаКлассификатораИзМакетаПослеОбновления() Тогда - // Перезагрузка ранее загруженной версии классификатора (при добавлении новых элементов конструктора) - ОбъектМетаданных = Метаданные.Справочники.ВидыПродукцииИС; - Обработчик = Обработчики.Добавить(); - Обработчик.Версия = ОбщегоНазначенияИС.ВерсияБиблиотеки(); - Обработчик.Идентификатор = Новый УникальныйИдентификатор("0eb047f2-6095-4d71-b6c8-1a247efd9584"); - Обработчик.Процедура = "Справочники.ВидыПродукцииИС.ОбработатьДанныеПриПовторнойЗагрузкеКлассификатора"; - Обработчик.Комментарий = НСтр("ru = 'Повторная загрузка классификаторов механизма конструктора настроек видов продукции БГосИС'"); - Обработчик.ОбщиеДанные = Истина; - Обработчик.РежимВыполнения = "Оперативно"; - КонецЕсли; + // Перезагрузка ранее загруженной версии классификатора (при добавлении новых элементов конструктора) + ОбъектМетаданных = Метаданные.Справочники.ВидыПродукцииИС; + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = ОбщегоНазначенияИС.ВерсияБиблиотеки(); + Обработчик.Идентификатор = Новый УникальныйИдентификатор("0eb047f2-6095-4d71-b6c8-1a247efd9584"); + Обработчик.Процедура = "Справочники.ВидыПродукцииИС.ОбработатьДанныеПриПовторнойЗагрузкеКлассификатора"; + Обработчик.Комментарий = НСтр("ru = 'Повторная загрузка классификаторов механизма конструктора настроек видов продукции БГосИС'"); + Обработчик.ОбщиеДанные = Истина; + Обработчик.РежимВыполнения = "Оперативно"; КонецПроцедуры diff --git a/Конфигурация/CommonModules/ОбновлениеИнформационнойБазыСлужебный/Ext/Module.bsl b/Конфигурация/CommonModules/ОбновлениеИнформационнойБазыСлужебный/Ext/Module.bsl index ef5c5c319..0a44073ca 100644 --- a/Конфигурация/CommonModules/ОбновлениеИнформационнойБазыСлужебный/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ОбновлениеИнформационнойБазыСлужебный/Ext/Module.bsl @@ -10810,7 +10810,9 @@ Методы.Вставить("ПриОтменеПотокаОтложенногоОбработчика"); Методы.Вставить("ПриАварийномЗавершенииПотокаПоискаПорцииДляОбновления"); Методы.Вставить("ПриОтменеПотокаПоискаПорцииДляОбновления"); - Методы.Вставить("ОбработчикПроверкиВеденияУчета"); + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонтрольВеденияУчета") Тогда + Методы.Вставить("ОбработчикПроверкиВеденияУчета"); + КонецЕсли; Методы.Вставить("ЗаполнитьДанныеОтложенногоОбработчика", Истина); Методы.Вставить("ЗавершитьРегистрациюДанныхОтложенногоОбновления", Истина); diff --git a/Конфигурация/CommonModules/ОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса/Ext/Module.bsl b/Конфигурация/CommonModules/ОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса/Ext/Module.bsl index d02d345c1..a33c482a8 100644 --- a/Конфигурация/CommonModules/ОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса/Ext/Module.bsl @@ -1082,4 +1082,13 @@ КонецПроцедуры +// См. СтандартныеПодсистемыСервер.ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод +Процедура ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод(Методы) Экспорт + + Если ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.БазоваяФункциональность") Тогда + Методы.Вставить("ВыполнитьОбновлениеТекущейОбластиДанных"); + КонецЕсли; + +КонецПроцедуры + #КонецОбласти diff --git a/Конфигурация/CommonModules/ОбновлениеИнформационнойБазыУНФ/Ext/Module.bsl b/Конфигурация/CommonModules/ОбновлениеИнформационнойБазыУНФ/Ext/Module.bsl index a78e18423..e73e2aa3d 100644 --- a/Конфигурация/CommonModules/ОбновлениеИнформационнойБазыУНФ/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ОбновлениеИнформационнойБазыУНФ/Ext/Module.bsl @@ -9,7 +9,7 @@ Процедура ПриДобавленииПодсистемы(Описание) Экспорт Описание.Имя = "УправлениеНебольшойФирмой"; - Описание.Версия = "3.0.14.123"; + Описание.Версия = "3.0.14.143"; Описание.ИдентификаторИнтернетПоддержки = "SmallBusiness"; КонецПроцедуры @@ -382,7 +382,7 @@ Обработчик.Комментарий = НСтр("ru = 'Пометка на удаление устаревших шаблонов этикеток и ценников'"); Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "3.0.14.112"; + Обработчик.Версия = "3.0.14.129"; Обработчик.РежимВыполнения = "Отложенно"; Обработчик.Процедура = "ОбновлениеИнформационнойБазыУНФ.ОбновитьШаблоныЭтикетокИЦенников"; Обработчик.Идентификатор = Новый УникальныйИдентификатор("858577c8-52ba-4666-bf6b-73eb203a3e7f"); @@ -532,6 +532,34 @@ Обработчик.Идентификатор = Новый УникальныйИдентификатор("796c3294-1164-4b6b-9992-4f15b080a317"); Обработчик.Комментарий = НСтр("ru = 'Начальное заполнение свойств'"); + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "3.0.14.130"; + Обработчик.РежимВыполнения = "Отложенно"; + Обработчик.Процедура = "ОбновлениеИнформационнойБазыУНФ.ЗаполнитьПодразделениеЗавершающегоЭтапаВСдельномНаряде"; + Обработчик.Идентификатор = Новый УникальныйИдентификатор("8f3a9c2e-7d4b-4e1a-b5c6-3f8e9d2a7c1b"); + Обработчик.Комментарий = НСтр("ru = 'Заполнение реквизита ПодразделениеЗавершающегоЭтапа в ТЧ Операции документа СдельныйНаряд и корректировка движений по регистру Запасы.'"); + + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "3.0.14.134"; + Обработчик.РежимВыполнения = "Отложенно"; + Обработчик.Процедура = "ОбновлениеИнформационнойБазыУНФ.ЗаполнитьПодразделениеЗавершающегоЭтапаВЗаказеНаПроизводство"; + Обработчик.Идентификатор = Новый УникальныйИдентификатор("9b4d2a1c-3e7f-4d8b-a5e6-1f9c8b7d4a2e"); + Обработчик.Комментарий = НСтр("ru = 'Заполнение реквизита ПодразделениеЗавершающегоЭтапа в ТЧ Продукция документа ЗаказНаПроизводство и корректировка движений по регистру Запасы.'"); + + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "3.0.14.134"; + Обработчик.РежимВыполнения = "Отложенно"; + Обработчик.Процедура = "ОбновлениеИнформационнойБазыУНФ.ЗаполнитьПодразделениеЗавершающегоЭтапаВСборкеЗапасов"; + Обработчик.Идентификатор = Новый УникальныйИдентификатор("7e8f6d5c-4b3a-2c1d-0e9f-8a7b6c5d4e3f"); + Обработчик.Комментарий = НСтр("ru = 'Заполнение реквизита ПодразделениеЗавершающегоЭтапа в ТЧ Продукция документа СборкаЗапасов и корректировка движений по регистру Запасы.'"); + + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "3.0.14.142"; + Обработчик.РежимВыполнения = "Отложенно"; + Обработчик.Идентификатор = Новый УникальныйИдентификатор("eb77fe3b-40ff-49c5-9da7-d8ef0fadb18a"); + Обработчик.Процедура = "ПланыВидовХарактеристик.ДополнительныеРеквизитыБизнесПриложение.НачальноеЗаполнениеСвойств2"; + Обработчик.Комментарий = НСтр("ru = 'Исправление ошибки в начальном заполнении свойств'"); + #КонецОбласти КонецПроцедуры @@ -621,7 +649,6 @@ Параметры.ОбъектыСНачальнымЗаполнением.Добавить(Метаданные.Справочники.СценарииПланирования); Параметры.ОбъектыСНачальнымЗаполнением.Добавить(Метаданные.Справочники.ШаблоныЗаполненияГрафиковРабочегоВремени); Параметры.ОбъектыСНачальнымЗаполнением.Добавить(Метаданные.ПланыСчетов.Управленческий); - Параметры.ОбъектыСНачальнымЗаполнением.Добавить(Метаданные.ПланыВидовХарактеристик.ДополнительныеРеквизитыБизнесПриложение); Параметры.ОбъектыСНачальнымЗаполнением.Добавить(Метаданные.ПланыВидовХарактеристик.НастройкиПользователей); Параметры.ОбъектыСНачальнымЗаполнением.Добавить(Метаданные.ПланыВидовХарактеристик.РеквизитыДляСписка); @@ -784,38 +811,38 @@ Попытка - // 1. Заполним константу ИзвлекатьТекстыФайловНаСервере + // 1. Заполнить константу ИзвлекатьТекстыФайловНаСервере Константы.ИзвлекатьТекстыФайловНаСервере.Установить(Истина); Константы.ИспользоватьПроверкуКонтрагентов.Установить(Истина); - // 2. Заполним календарь отчетности + // 2. Заполнить календарь отчетности Справочники.КалендарьПодготовкиОтчетности.ЗагрузитьКалендарьПодготовкиОтчетности(); - // 3. Загружаем тарифы страховых взносов с предельными величинами + // 3. Загрузить тарифы страховых взносов с предельными величинами Справочники.ВидыТарифовСтраховыхВзносовУНФ.НачальноеЗаполнение(); // Тарифы должны видеть новые данные в ВидыТарифовСтраховыхВзносовУНФ ОбновитьПовторноИспользуемыеЗначения(); РегистрыСведений.ТарифыСтраховыхВзносовУНФ.НачальноеЗаполнение(); РегистрыСведений.ПредельнаяВеличинаБазыСтраховыхВзносовУНФ.УстановитьПредельнуюВеличинуБазыСтраховыхВзносов(); - // 4. Заполняем виды предпринимательской деятельности + // 4. Заполнить виды предпринимательской деятельности Справочники.ВидыПредпринимательскойДеятельности.ЗаполнитьВидыПредпринимательскойДеятельности(); - // 5. Заполняем справочник ОКУН + // 5. Заполнить справочник ОКУН ЗагрузитьОКУН(); - // 6. Заполняем регистр сведений КоэффициентДефлятор + // 6. Заполнить регистр сведений КоэффициентДефлятор ЗаполнитьКоэффициентДефлятор(); - // 7. Заполняем регистр сведений МРОТ + // 7. Заполнить регистр сведений МРОТ РегистрыСведений.МРОТ.НачальноеЗаполнение(); - // 8. Заполняем справочник Вычеты НДФЛ + // 8. Заполнить справочник Вычеты НДФЛ Справочники.ВычетыНДФЛ.НачальноеЗаполнение(); - // 9. Заполним регистр сведений НДФЛРазмерВычетов. + // 9. Заполнить регистр сведений НДФЛРазмерВычетов. СотрудникиУНФ.ЗаполнитьРазмерыВычетовНДФЛ(); - + // 10. Отчетность Справочники.ПараметрыИсчисляемогоСтраховогоСтажа.НачальноеЗаполнение(); Справочники.ОснованияДосрочногоНазначенияПенсии.НачальноеЗаполнение(); @@ -828,6 +855,9 @@ РегистрыСведений.РазмерФиксированныхВзносовОтНесчастныхСлучаевАУСН.ЗаполнитьПоставляемыеДанные(); + // 11. Заполнить справочник КлючевыеОперации (общие данные). + ОценкаПроизводительностиУНФ.ЗаполнитьЦелевоеВремяОперацийПроизводительности(); + ЗафиксироватьТранзакцию(); Исключение @@ -2107,6 +2137,209 @@ КонецПроцедуры +Процедура ЗаполнитьПодразделениеЗавершающегоЭтапаВСдельномНаряде(ПараметрыОбработчика) Экспорт + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ ПЕРВЫЕ 1000 РАЗЛИЧНЫЕ + | Запасы.Регистратор КАК СдельныйНаряд + |ИЗ + | РегистрНакопления.Запасы КАК Запасы + |ГДЕ + | Запасы.СтруктурнаяЕдиница = ЗНАЧЕНИЕ(Справочник.СтруктурныеЕдиницы.ПустаяСсылка) + | И Запасы.Регистратор ССЫЛКА Документ.СдельныйНаряд + |УПОРЯДОЧИТЬ ПО + | Запасы.Регистратор"; + + Выборка = Запрос.Выполнить().Выбрать(); + + Если Выборка.Количество() = 0 Тогда + ПараметрыОбработчика.ОбработкаЗавершена = Истина; + Возврат; + КонецЕсли; + + ПараметрыОбработчика.ОбработкаЗавершена = Ложь; + + Пока Выборка.Следующий() Цикл + + НачатьТранзакцию(); + Попытка + + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("Документ.СдельныйНаряд"); + ЭлементБлокировки.УстановитьЗначение("Ссылка", Выборка.СдельныйНаряд); + Блокировка.Заблокировать(); + + ДокументОбъект = Выборка.СдельныйНаряд.ПолучитьОбъект(); + + // Если документ удалён или уже не проведён - пропускаем. + Если ДокументОбъект = Неопределено + Или НЕ ДокументОбъект.Проведен Тогда + ЗафиксироватьТранзакцию(); + Продолжить; + КонецЕсли; + + // Присваиваем Комментарий самому себе, чтобы установить флаг модифицированности объекта. + // Иначе ОбменДаннымиСобытияУНФ.ПропуститьДозаполнениеДокумента прервёт обработчик ПередЗаписью, + // и ПодразделениеЗавершающегоЭтапа не будет заполнено. + ДокументОбъект.Комментарий = ДокументОбъект.Комментарий; + + ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение); + + ЗафиксироватьТранзакцию(); + + Исключение + + ОтменитьТранзакцию(); + + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Процедуре ЗаполнитьПодразделениеЗавершающегоЭтапаВСдельномНаряде не удалось обработать документ %1 по причине: + |%2'"), Выборка.СдельныйНаряд, ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ЗаписьЖурналаРегистрации(ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(), + УровеньЖурналаРегистрации.Предупреждение, Метаданные.Документы.СдельныйНаряд, + Выборка.СдельныйНаряд, ТекстСообщения); + + КонецПопытки; + + КонецЦикла; + +КонецПроцедуры + +Процедура ЗаполнитьПодразделениеЗавершающегоЭтапаВЗаказеНаПроизводство(ПараметрыОбработчика) Экспорт + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ ПЕРВЫЕ 1000 РАЗЛИЧНЫЕ + | Запасы.Регистратор КАК ЗаказНаПроизводство + |ИЗ + | РегистрНакопления.Запасы КАК Запасы + |ГДЕ + | Запасы.СтруктурнаяЕдиница = ЗНАЧЕНИЕ(Справочник.СтруктурныеЕдиницы.ПустаяСсылка) + | И Запасы.Регистратор ССЫЛКА Документ.ЗаказНаПроизводство + |УПОРЯДОЧИТЬ ПО + | Запасы.Регистратор"; + + Выборка = Запрос.Выполнить().Выбрать(); + + Если Выборка.Количество() = 0 Тогда + ПараметрыОбработчика.ОбработкаЗавершена = Истина; + Возврат; + КонецЕсли; + + ПараметрыОбработчика.ОбработкаЗавершена = Ложь; + + Пока Выборка.Следующий() Цикл + + НачатьТранзакцию(); + Попытка + + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("Документ.ЗаказНаПроизводство"); + ЭлементБлокировки.УстановитьЗначение("Ссылка", Выборка.ЗаказНаПроизводство); + Блокировка.Заблокировать(); + + ДокументОбъект = Выборка.ЗаказНаПроизводство.ПолучитьОбъект(); + + // Если документ удалён или уже не проведён - пропускаем. + Если ДокументОбъект = Неопределено Или Не ДокументОбъект.Проведен Тогда + ЗафиксироватьТранзакцию(); + Продолжить; + КонецЕсли; + + // Присваиваем Комментарий самому себе, чтобы установить флаг модифицированности объекта. + // Иначе ОбменДаннымиСобытияУНФ.ПропуститьДозаполнениеДокумента прервёт обработчик ПередЗаписью, + // и ПодразделениеЗавершающегоЭтапа не будет заполнено. + ДокументОбъект.Комментарий = ДокументОбъект.Комментарий; + + ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение); + + ЗафиксироватьТранзакцию(); + + Исключение + + ОтменитьТранзакцию(); + + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Процедуре ЗаполнитьПодразделениеЗавершающегоЭтапаВЗаказеНаПроизводство не удалось обработать документ %1 по причине: + |%2'"), Выборка.ЗаказНаПроизводство, ОбработкаОшибок.ПодробноеПредставлениеОшибки( + ИнформацияОбОшибке())); + ЗаписьЖурналаРегистрации(ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(), + УровеньЖурналаРегистрации.Предупреждение, Метаданные.Документы.ЗаказНаПроизводство, + Выборка.ЗаказНаПроизводство, ТекстСообщения); + + КонецПопытки; + + КонецЦикла; + +КонецПроцедуры + +Процедура ЗаполнитьПодразделениеЗавершающегоЭтапаВСборкеЗапасов(ПараметрыОбработчика) Экспорт + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ ПЕРВЫЕ 1000 РАЗЛИЧНЫЕ + | Запасы.Регистратор КАК СборкаЗапасов + |ИЗ + | РегистрНакопления.Запасы КАК Запасы + |ГДЕ + | Запасы.СтруктурнаяЕдиница = ЗНАЧЕНИЕ(Справочник.СтруктурныеЕдиницы.ПустаяСсылка) + | И Запасы.Регистратор ССЫЛКА Документ.СборкаЗапасов + |УПОРЯДОЧИТЬ ПО + | Запасы.Регистратор"; + + Выборка = Запрос.Выполнить().Выбрать(); + + Если Выборка.Количество() = 0 Тогда + ПараметрыОбработчика.ОбработкаЗавершена = Истина; + Возврат; + КонецЕсли; + + ПараметрыОбработчика.ОбработкаЗавершена = Ложь; + + Пока Выборка.Следующий() Цикл + + НачатьТранзакцию(); + Попытка + + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("Документ.СборкаЗапасов"); + ЭлементБлокировки.УстановитьЗначение("Ссылка", Выборка.СборкаЗапасов); + Блокировка.Заблокировать(); + + ДокументОбъект = Выборка.СборкаЗапасов.ПолучитьОбъект(); + + // Если документ удалён или уже не проведён - пропускаем. + Если ДокументОбъект = Неопределено Или Не ДокументОбъект.Проведен Тогда + ЗафиксироватьТранзакцию(); + Продолжить; + КонецЕсли; + + // Присваиваем Комментарий самому себе, чтобы установить флаг модифицированности объекта. + // Иначе ОбменДаннымиСобытияУНФ.ПропуститьДозаполнениеДокумента прервёт обработчик ПередЗаписью, + // и ПодразделениеЗавершающегоЭтапа не будет заполнено. + ДокументОбъект.Комментарий = ДокументОбъект.Комментарий; + + ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение); + + ЗафиксироватьТранзакцию(); + + Исключение + + ОтменитьТранзакцию(); + + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Процедуре ЗаполнитьПодразделениеЗавершающегоЭтапаВСборкеЗапасов не удалось обработать документ %1 по причине: + |%2'"), Выборка.СборкаЗапасов, ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ЗаписьЖурналаРегистрации(ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(), + УровеньЖурналаРегистрации.Предупреждение, Метаданные.Документы.СборкаЗапасов, Выборка.СборкаЗапасов, + ТекстСообщения); + + КонецПопытки; + + КонецЦикла; + +КонецПроцедуры + #КонецОбласти #КонецОбласти diff --git a/Конфигурация/CommonModules/ОборудованиеПлатежныеСистемы/Ext/Module.bsl b/Конфигурация/CommonModules/ОборудованиеПлатежныеСистемы/Ext/Module.bsl index 872d703fa..47439e2fd 100644 --- a/Конфигурация/CommonModules/ОборудованиеПлатежныеСистемы/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ОборудованиеПлатежныеСистемы/Ext/Module.bsl @@ -197,6 +197,7 @@ РезультатВыполнения.Вставить("Операции", Операции); КонецЕсли; Иначе + Если РезультатВыполнения.Свойство("ИсходящиеПараметрыXML") И НЕ ПустаяСтрока(РезультатВыполнения.ИсходящиеПараметрыXML) Тогда ПараметрыОперации = ОбщегоНазначенияБПО.ПрочитатьКорневойЭлементXML(РезультатВыполнения.ИсходящиеПараметрыXML); Если ПараметрыОперации.Свойство("AuthorizationCode") Тогда @@ -231,6 +232,9 @@ Если ПараметрыОперации.Свойство("UUID") Тогда РезультатВыполнения.ИдентификаторБанковскойТранзакции = ПараметрыОперации.UUID; КонецЕсли; + Если ПараметрыОперации.Свойство("QRTransactionIdentifier") Тогда + РезультатВыполнения.ИдентификаторQRОперации = ПараметрыОперации.QRTransactionIdentifier; + КонецЕсли; Если ПараметрыОперации.Свойство("Date") Тогда РезультатВыполнения.ДатаВремя = ПараметрыОперации.Date; КонецЕсли; @@ -317,6 +321,7 @@ Запись.ИдентификаторБанкаЭквайера = ?(РезультатВыполнения.Свойство("ИдентификаторБанкаЭквайера"), РезультатВыполнения.ИдентификаторБанкаЭквайера, Неопределено); Запись.ИдентификаторПлатежнойСистемы = ?(РезультатВыполнения.Свойство("ИдентификаторПлатежнойСистемы"),РезультатВыполнения.ИдентификаторПлатежнойСистемы, Неопределено); Запись.ИдентификаторБанковскойТранзакции = ?(РезультатВыполнения.Свойство("ИдентификаторБанковскойТранзакции"), РезультатВыполнения.ИдентификаторБанковскойТранзакции, Неопределено); + Запись.ИдентификаторQRОперации = ?(РезультатВыполнения.Свойство("ИдентификаторQRОперации"), РезультатВыполнения.ИдентификаторQRОперации, Неопределено); Запись.ДатаВремяТранзакции = ?(РезультатВыполнения.Свойство("ДатаВремя"), РезультатВыполнения.ДатаВремя, Неопределено); КонецЕсли; @@ -379,6 +384,7 @@ | ПлатежныеОперации.ИдентификаторБанкаЭквайера КАК ИдентификаторБанкаЭквайера, | ПлатежныеОперации.ИдентификаторПлатежнойСистемы КАК ИдентификаторПлатежнойСистемы, | ПлатежныеОперации.ИдентификаторБанковскойТранзакции КАК ИдентификаторБанковскойТранзакции, + | ПлатежныеОперации.ИдентификаторQRОперации КАК ИдентификаторQRОперации, | ПлатежныеОперации.ДатаВремяТранзакции КАК ДатаВремяТранзакции, | ПлатежныеОперации.ДанныеЗапроса КАК ДанныеЗапроса, | ПлатежныеОперации.ДанныеОтвета КАК ДанныеОтвета @@ -417,6 +423,7 @@ ПлатежнаяОперация.Вставить("ИдентификаторБанкаЭквайера"); ПлатежнаяОперация.Вставить("ИдентификаторПлатежнойСистемы"); ПлатежнаяОперация.Вставить("ИдентификаторБанковскойТранзакции"); + ПлатежнаяОперация.Вставить("ИдентификаторQRОперации"); ПлатежнаяОперация.Вставить("ДатаВремяТранзакции"); ПлатежнаяОперация.Вставить("ДанныеЗапроса"); ПлатежнаяОперация.Вставить("ДанныеОтвета"); diff --git a/Конфигурация/CommonModules/ОборудованиеПлатежныеСистемыКлиент/Ext/Module.bsl b/Конфигурация/CommonModules/ОборудованиеПлатежныеСистемыКлиент/Ext/Module.bsl index af5ac765d..83edf22f8 100644 --- a/Конфигурация/CommonModules/ОборудованиеПлатежныеСистемыКлиент/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ОборудованиеПлатежныеСистемыКлиент/Ext/Module.bsl @@ -421,7 +421,8 @@ Если Команда <> "OperationStatus" Тогда Если Команда = "PayElectronicCertificate" Или Команда = "ReturnElectronicCertificate" Тогда - Если ПустаяСтрока(ПараметрыОперации.ИдентификаторКорзины) Или ПараметрыОперации.СуммаЭлектронногоСертификата = 0 Тогда + Если ПустаяСтрока(ПараметрыОперации.ИдентификаторКорзины) + Или (ПараметрыОперации.СуммаЭлектронногоСертификата = 0 И ПараметрыОперации.СкидкаЭлектроннымиСертификатами = 0) Тогда ДанныеОперации.ТекстОшибки = НСтр("ru='Неверные параметры в операции.'"); ДанныеОперации.Результат = Ложь; Возврат ДанныеОперации; diff --git a/Конфигурация/CommonModules/ОборудованиеПлатежныеСистемыКлиентСервер/Ext/Module.bsl b/Конфигурация/CommonModules/ОборудованиеПлатежныеСистемыКлиентСервер/Ext/Module.bsl index 74fe457db..ad8224398 100644 --- a/Конфигурация/CommonModules/ОборудованиеПлатежныеСистемыКлиентСервер/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ОборудованиеПлатежныеСистемыКлиентСервер/Ext/Module.bsl @@ -68,6 +68,8 @@ Результат.Вставить("ИдентификаторФискальнойОперации"); // Строка,Необязательно - Уникальный идентификатор фискальной операции. Результат.Вставить("ИспользоватьПечатающееУстройство", Истина); // Булево,Необязательно - определяет использование печатного устройства при выполнении фискальной операции. Результат.Вставить("ИдентификаторОперацииНаОборудовании"); // Строка,Необязательно - Идентификатор операции на оборудовании. + // Операции для операций по УПК QR + Результат.Вставить("ИдентификаторQRОперации"); // Строка,Необязательно - Идентификатор заказа QR операции для операций по УПК. // Расширение Результат.Вставить("ХешНомерКарты"); // Строка,Необязательно - PAN карты хешированном по алгоритму SHA256 виде. Возврат Результат; @@ -95,6 +97,7 @@ Результат.Вставить("КодАвторизации"); // Строка,Необязательно - Код авторизации. Результат.Вставить("ДатаВремя"); // Дата,Необязательно - Дата и время инициализации транзакции, содержит локальную дату и время инициализации транзакции Результат.Вставить("КодЗавершения"); // Число,Необязательно - Дополнительный код завершения операции. + Результат.Вставить("ИдентификаторQRОперации"); // Строка,Необязательно - Идентификатор заказа QR операции для операций по УПК. Результат.Вставить("ИдентификаторПлатежнойСистемы"); // Строка,Необязательно - Уникальный идентификатор платежной системы, через которую проводилась операция. Результат.Вставить("ИдентификаторБанковскойТранзакции"); // Строка,Необязательно - Уникальный идентификатор банковской транзакции, формируемый на стороне банка-эмитента. @@ -271,6 +274,11 @@ ЗаписьXML.ЗаписатьАтрибут("AuthorizationCode", XMLСтрока(КодАвторизации)); КонецЕсли; + ИдентификаторQRОперации = ?(ПараметрыОперации.ИдентификаторQRОперации <> Неопределено, ПараметрыОперации.ИдентификаторQRОперации, ""); + Если Не ПустаяСтрока(ИдентификаторQRОперации) Тогда + ЗаписьXML.ЗаписатьАтрибут("QRTransactionIdentifier", XMLСтрока(ИдентификаторQRОперации)); + КонецЕсли; + ЗаписьXML.ЗаписатьКонецЭлемента(); Возврат ЗаписьXML.Закрыть(); @@ -295,4 +303,4 @@ КонецФункции -#КонецОбласти +#КонецОбласти \ No newline at end of file diff --git a/Конфигурация/CommonModules/ОборудованиеЧекопечатающиеОблачныеККТ/Ext/Module.bsl b/Конфигурация/CommonModules/ОборудованиеЧекопечатающиеОблачныеККТ/Ext/Module.bsl index 52e13ffd2..eb4460ca9 100644 --- a/Конфигурация/CommonModules/ОборудованиеЧекопечатающиеОблачныеККТ/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ОборудованиеЧекопечатающиеОблачныеККТ/Ext/Module.bsl @@ -839,19 +839,6 @@ КонецПроцедуры -#Область РазрешенныеМетодыДляВызоваКакПроизвольныйКод - -// Возвращает список методов, которые могут быть вызваны как произвольный код -// (для регламентных заданий и фоновых заданий) -Процедура ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод(Методы) Экспорт - - Методы.Вставить("ПробитьЧек", Истина); - Методы.Вставить("ПолучитьСтатусПробитияЧека", Истина); - -КонецПроцедуры - -#КонецОбласти - Процедура ЗаписатьДанныеКодаТоварнойНоменклатуры(ПараметрыТовараЧека, Позиция, ТипРасчета, ДробноеКоличество); ДанныеКодаТоварнойНоменклатуры = Позиция.ДанныеКодаТоварнойНоменклатуры; diff --git a/Конфигурация/CommonModules/ОборудованиеЧекопечатающиеУстройства/Ext/Module.bsl b/Конфигурация/CommonModules/ОборудованиеЧекопечатающиеУстройства/Ext/Module.bsl index b5a2a61dd..02afd5e67 100644 --- a/Конфигурация/CommonModules/ОборудованиеЧекопечатающиеУстройства/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ОборудованиеЧекопечатающиеУстройства/Ext/Module.bsl @@ -2381,7 +2381,7 @@ Драйвер = ДрайвераОборудования.Добавить(); Драйвер.ТипОборудования = Перечисления.ТипыПодключаемогоОборудования.ККТ; Драйвер.ИмяДрайвера = "ДрайверАТОЛККТ54ФЗ107X"; - Драйвер.Наименование = НСтр("ru = 'АТОЛ:ККТ с передачей данных в ОФД 10.10.8.х'", ОбщегоНазначенияБПО.КодОсновногоЯзыка()); + Драйвер.Наименование = НСтр("ru = 'АТОЛ:ККТ с передачей данных в ОФД 10.10.9.х'", ОбщегоНазначенияБПО.КодОсновногоЯзыка()); Драйвер.ИдентификаторОбъекта = "ATOL_KKT_1C_V10_X"; Драйвер.РекомендуемоеИспользование = Истина; @@ -2528,7 +2528,13 @@ Драйвер.ИмяДрайвера = "ДрайверКАСТОМФ54ФЗ"; Драйвер.Наименование = НСтр("ru = 'КАСТОМ:ККТ с передачей данных в ОФД (54-ФЗ)'", ОбщегоНазначенияБПО.КодОсновногоЯзыка()); Драйвер.ИдентификаторОбъекта = "q3xfru"; - Драйвер.СнятСПоддержки = Истина; + Драйвер.СнятСПоддержки = Истина; + + Драйвер = ДрайвераОборудования.Добавить(); + Драйвер.ТипОборудования = Перечисления.ТипыПодключаемогоОборудования.ККТ; + Драйвер.ИмяДрайвера = "ДрайверКАСТОМФ54ФЗx4"; + Драйвер.Наименование = НСтр("ru = 'КАСТОМ:ККТ с передачей данных в ОФД'", ОбщегоНазначенияБПО.КодОсновногоЯзыка()); + Драйвер.ИдентификаторОбъекта = "customru"; Драйвер = ДрайвераОборудования.Добавить(); Драйвер.ТипОборудования = Перечисления.ТипыПодключаемогоОборудования.ККТ; diff --git a/Конфигурация/CommonModules/ОбработкаНеисправностейБЭДКлиентСервер/Ext/Module.bsl b/Конфигурация/CommonModules/ОбработкаНеисправностейБЭДКлиентСервер/Ext/Module.bsl index 3bb0249a9..d747ebb43 100644 --- a/Конфигурация/CommonModules/ОбработкаНеисправностейБЭДКлиентСервер/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ОбработкаНеисправностейБЭДКлиентСервер/Ext/Module.bsl @@ -294,9 +294,9 @@ КонецФункции // Возвращает пустой контекст диагностики. -// +// // Возвращаемое значение: -// Структура - Новый контекст диагностики: +// Структура: // * ЗаголовокОперации - Строка // * Диагностика - Структура: // ** Ошибки - Массив из см. ОбработкаНеисправностейБЭД.НоваяОшибка @@ -306,13 +306,14 @@ // * ОшибкиОбработаны - Булево // * СообщатьОбОшибке - Булево // * ДополнительныеСвойства - Структура -// * ОбъектыДействий - Массив из см. ВыполнитьДействияЭДО.ПараметрыВыполнения +// Функция НовыйКонтекстДиагностики() Экспорт + Диагностика = Новый Структура; + Диагностика.Вставить("Ошибки", Новый Массив); + Контекст = Новый Структура; Контекст.Вставить("ЗаголовокОперации", ""); - Диагностика = Новый Структура; - Диагностика.Вставить("Ошибки", Новый Массив); Контекст.Вставить("Диагностика", Диагностика); Контекст.Вставить("ТекущийПользовательИБ", ""); Контекст.Вставить("ДатаНачалаОперации", Дата(1, 1, 1)); diff --git a/Конфигурация/CommonModules/ОбработкаНовостейКлиент/Ext/Module.bsl b/Конфигурация/CommonModules/ОбработкаНовостейКлиент/Ext/Module.bsl index 701ad30a3..56d6dee8b 100644 --- a/Конфигурация/CommonModules/ОбработкаНовостейКлиент/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ОбработкаНовостейКлиент/Ext/Module.bsl @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2025, ООО 1С-Софт +// Copyright (c) 2026, ООО 1С-Софт // Все права защищены. Эта программа и сопроводительные материалы предоставляются // в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) // Текст лицензии доступен по ссылке: @@ -1831,6 +1831,26 @@ КонецПроцедуры +// Обработчик команды Справочник.Новости.Команды.КомандаСписокНовостейПоЛентеНовостей; +// +// Параметры: +// ПараметрКоманды - ПараметрКоманды, Неопределено - параметр для команды; +// ПараметрыВыполненияКоманды - ПараметрыВыполненияКоманды, Структура - параметры выполнения, обязательные ключи: +// * Источник; +// * Уникальность. +// ИсточникВызова - Строка - Произвольный идентификатор. +// +Процедура ОткрытьСписокНовостейПоЛентеНовостей(ПараметрКоманды, ПараметрыВыполненияКоманды, ИсточникВызова = "") Экспорт + + ПараметрыОткрытияФормы = Новый Структура; + ПараметрыОткрытияФормы.Вставить("АктивироватьПапку_ВариантОтбора" , 1); + ПараметрыОткрытияФормы.Вставить("АктивироватьПапку_ЗначениеОтбора", ПараметрКоманды); + ПараметрыОткрытияФормы.Вставить("ИсточникВызова" , ИсточникВызова); + + ОткрытьСписокНовостей(ПараметрКоманды, ПараметрыВыполненияКоманды, ПараметрыОткрытияФормы, Истина); + +КонецПроцедуры + // Обработчик команды Справочник.Новости.Команды.КомандаСписокВажныхНовостейТребующихПрочтения; // // Параметры: diff --git a/Конфигурация/CommonModules/ОбработкаНовостейСлужебный/Ext/Module.bsl b/Конфигурация/CommonModules/ОбработкаНовостейСлужебный/Ext/Module.bsl index 4ee953ca9..97f2ec3d5 100644 --- a/Конфигурация/CommonModules/ОбработкаНовостейСлужебный/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ОбработкаНовостейСлужебный/Ext/Module.bsl @@ -482,6 +482,10 @@ Методы.Вставить("УстановкаПараметровСеанса"); Методы.Вставить("ПересчитатьОтборыПоНовостям_РедкоМеняющиеся", Истина); + Если ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.БазоваяФункциональность") Тогда + Методы.Вставить("ВсеОбновленияНовостейДляОбластиДанных"); + КонецЕсли; + КонецПроцедуры // См. ОбщегоНазначенияПереопределяемый.ПриНастройкеПроверкиМетодовВызываемыхКакПроизвольныйКод diff --git a/Конфигурация/CommonModules/ОбсужденияСлужебныйВызовСервера/Ext/Module.bsl b/Конфигурация/CommonModules/ОбсужденияСлужебныйВызовСервера/Ext/Module.bsl index 977eac85c..e1e5b668e 100644 --- a/Конфигурация/CommonModules/ОбсужденияСлужебныйВызовСервера/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ОбсужденияСлужебныйВызовСервера/Ext/Module.bsl @@ -31,7 +31,7 @@ // АПК:553-выкл ВыполнитьПроверкуПравДоступа("ИнтерактивноеОткрытиеВнешнихОбработок", Метаданные); БезопасныйРежим = Не ПравоДоступа("Администрирование", Метаданные); - Возврат ВнешниеОбработки.Подключить(АдресВоВременномХранилище, , БезопасныйРежим); + Возврат ВнешниеОбработки.Подключить(АдресВоВременномХранилище, , БезопасныйРежим); // Не нарушает безопасность информации, так как внешний код подключается также, как при использовании Файл - Открыть. // АПК:553-вкл // АПК:556-вкл // АПК:552-вкл @@ -45,7 +45,7 @@ // АПК:553-выкл ВыполнитьПроверкуПравДоступа("ИнтерактивноеОткрытиеВнешнихОтчетов", Метаданные); БезопасныйРежим = Не ПравоДоступа("Администрирование", Метаданные); - Возврат ВнешниеОтчеты.Подключить(АдресВоВременномХранилище, , БезопасныйРежим); + Возврат ВнешниеОтчеты.Подключить(АдресВоВременномХранилище, , БезопасныйРежим); // Не нарушает безопасность информации, так как внешний код подключается также, как при использовании Файл - Открыть. // АПК:553-вкл // АПК:556-вкл // АПК:552-вкл diff --git a/Конфигурация/CommonModules/ОбщегоНазначения/Ext/Module.bsl b/Конфигурация/CommonModules/ОбщегоНазначения/Ext/Module.bsl index a223c3e2c..3e12f61e2 100644 --- a/Конфигурация/CommonModules/ОбщегоНазначения/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ОбщегоНазначения/Ext/Module.bsl @@ -1769,11 +1769,31 @@ // // Параметры: // Имя - Строка - имя общего модуля или модуля менеджера, например "ОбновлениеКонфигурации", -// "Обработка.ПолнотекстовыйПоиск". +// "Обработки.ПолнотекстовыйПоиск". // // Возвращаемое значение: -// ОбщийМодуль -// МодульМенеджераОбъекта +// ОбщийМодуль +// ПланОбменаМенеджер +// ХранилищеНастроекМенеджер +// КонстантаМенеджер +// СправочникМенеджер +// ДокументМенеджер +// ЖурналДокументовМенеджер +// ПеречислениеМенеджер +// ОтчетМенеджер +// ОбработкаМенеджер +// ПланВидовХарактеристикМенеджер +// ПланСчетовМенеджер +// ПланВидовРасчетаМенеджер +// РегистрСведенийМенеджер +// РегистрНакопленияМенеджер +// РегистрБухгалтерииМенеджер +// РегистрРасчетаМенеджер +// БизнесПроцессМенеджер +// ЗадачаМенеджер +// ВнешнийИсточникДанныхТаблицаМенеджер +// ВнешнийИсточникДанныхКубМенеджер +// ВнешнийИсточникДанныхКубТаблицаИзмеренияМенеджер // // Пример: // Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбновлениеКонфигурации") Тогда @@ -1782,7 +1802,7 @@ // КонецЕсли; // // Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПолнотекстовыйПоиск") Тогда -// МодульОбработкаПолнотекстовыйПоиск = ОбщегоНазначения.ОбщийМодуль("Обработка.ПолнотекстовыйПоиск"); +// МодульОбработкаПолнотекстовыйПоиск = ОбщегоНазначения.ОбщийМодуль("Обработки.ПолнотекстовыйПоиск"); // МодульОбработкаПолнотекстовыйПоиск.<Имя процедуры>(); // КонецЕсли; // @@ -1791,10 +1811,10 @@ Если Метаданные.ОбщиеМодули.Найти(Имя) <> Неопределено Тогда // АПК:488-выкл ВычислитьВБезопасномРежиме не используется, чтобы избежать вызова ОбщийМодуль рекурсивно. УстановитьБезопасныйРежим(Истина); - Модуль = Вычислить(Имя); + Модуль = Вычислить(Имя); // Не нарушает безопасность информации, так как вычисляется ссылка на общий модуль по проверенному имени. // АПК:488-вкл - ИначеЕсли СтрЧислоВхождений(Имя, ".") = 1 Тогда - Возврат СерверныйМодульМенеджера(Имя); + ИначеЕсли СтрЧислоВхождений(Имя, ".") > 0 Тогда + Возврат МенеджерОбъектаПоИмени(Имя, Истина, Истина, Истина, "ОбщегоНазначения.ОбщийМодуль", "Имя"); Иначе Модуль = Неопределено; КонецЕсли; @@ -3733,12 +3753,14 @@ КонецФункции // Определяет принадлежность объекта метаданных к ссылочному типу. +// Принадлежность определяется по базовому типу, то есть для формы справочника будет Истина, +// для формы регистра будет Ложь. Если объект метаданных не найден по типу, тогда будет Ложь. // // Параметры: -// ОписаниеОбъекта - ОбъектМетаданных, Тип - объект, для которого необходимо определить принадлежность к заданному типу. +// ОписаниеОбъекта - ОбъектМетаданных, Тип // // Возвращаемое значение: -// Булево - Истина, если объект ссылочного типа. +// Булево - Истина, если базовый тип объекта ссылочного типа. // Функция ЭтоОбъектСсылочногоТипа(ОписаниеОбъекта) Экспорт @@ -3751,22 +3773,16 @@ ОбъектМетаданных = ОписаниеОбъекта; КонецЕсли; - ИмяОбъектаМетаданных = ОбъектМетаданных.ПолноеИмя(); - Позиция = СтрНайти(ИмяОбъектаМетаданных, "."); - Если Позиция > 0 Тогда - ИмяБазовогоТипа = Лев(ИмяОбъектаМетаданных, Позиция - 1); - Возврат ИмяБазовогоТипа = "Справочник" - Или ИмяБазовогоТипа = "Документ" - Или ИмяБазовогоТипа = "БизнесПроцесс" - Или ИмяБазовогоТипа = "Задача" - Или ИмяБазовогоТипа = "ПланСчетов" - Или ИмяБазовогоТипа = "ПланОбмена" - Или ИмяБазовогоТипа = "ПланВидовХарактеристик" - Или ИмяБазовогоТипа = "ПланВидовРасчета"; - Иначе + ИмяВидаОбъектов = СтрРазделить(ОбъектМетаданных.ПолноеИмя(), ".")[0]; + ПоВидамОбъектов = СтандартныеПодсистемыПовтИсп.СвойстваВидовОбъектовМетаданных().ПоВидамОбъектов; + Свойства = ПоВидамОбъектов.Получить(ВРег(ИмяВидаОбъектов)); + + Если Свойства.ИмяКоллекции = "Перечисления" Тогда // Обратная совместимость. Возврат Ложь; КонецЕсли; + Возврат Свойства <> Неопределено И Свойства.ЕстьСсылка; + КонецФункции #КонецОбласти @@ -3799,285 +3815,107 @@ Возврат Результат; КонецФункции -// Возвращает имя базового типа по переданному значению объекта метаданных. +// Возвращает имя базового типа по началу полного имени объекта метаданных. // // Параметры: -// ОбъектМетаданных - ОбъектМетаданных - объект метаданных, по которому необходимо определить базовый тип. +// ОбъектМетаданных - ОбъектМетаданных - объект метаданных, для которого необходимо определить базовый тип. // // Возвращаемое значение: -// Строка - имя базового типа по переданному значению объекта метаданных. +// Строка - имя базового типа указанного объекта метаданных, например, +// "ОбщиеМодули", ..., "Языки", ..., "Документы", ..., "РегистрыСведений", ... +// Для перерасчетов регистров расчета возвращается "Перерасчеты". // // Пример: -// ИмяБазовогоТипа = ОбщегоНазначения.ИмяБазовогоТипаПоОбъектуМетаданных(Метаданные.Справочники.Номенклатура); = "Справочники". +// ИмяБазовогоТипа = ОбщегоНазначения.ИмяБазовогоТипаПоОбъектуМетаданных(Метаданные.Справочники.Номенклатура); // Функция ИмяБазовогоТипаПоОбъектуМетаданных(ОбъектМетаданных) Экспорт - Если Метаданные.Документы.Содержит(ОбъектМетаданных) Тогда - Возврат "Документы"; - - ИначеЕсли Метаданные.Справочники.Содержит(ОбъектМетаданных) Тогда - Возврат "Справочники"; - - ИначеЕсли Метаданные.Перечисления.Содержит(ОбъектМетаданных) Тогда - Возврат "Перечисления"; - - ИначеЕсли Метаданные.РегистрыСведений.Содержит(ОбъектМетаданных) Тогда - Возврат "РегистрыСведений"; - - ИначеЕсли Метаданные.РегистрыНакопления.Содержит(ОбъектМетаданных) Тогда - Возврат "РегистрыНакопления"; - - ИначеЕсли Метаданные.РегистрыБухгалтерии.Содержит(ОбъектМетаданных) Тогда - Возврат "РегистрыБухгалтерии"; - - ИначеЕсли Метаданные.РегистрыРасчета.Содержит(ОбъектМетаданных) Тогда - Возврат "РегистрыРасчета"; - - ИначеЕсли Метаданные.ПланыОбмена.Содержит(ОбъектМетаданных) Тогда - Возврат "ПланыОбмена"; - - ИначеЕсли Метаданные.ПланыВидовХарактеристик.Содержит(ОбъектМетаданных) Тогда - Возврат "ПланыВидовХарактеристик"; - - ИначеЕсли Метаданные.БизнесПроцессы.Содержит(ОбъектМетаданных) Тогда - Возврат "БизнесПроцессы"; - - ИначеЕсли Метаданные.Задачи.Содержит(ОбъектМетаданных) Тогда - Возврат "Задачи"; - - ИначеЕсли Метаданные.ПланыСчетов.Содержит(ОбъектМетаданных) Тогда - Возврат "ПланыСчетов"; - - ИначеЕсли Метаданные.ПланыВидовРасчета.Содержит(ОбъектМетаданных) Тогда - Возврат "ПланыВидовРасчета"; - - ИначеЕсли Метаданные.Константы.Содержит(ОбъектМетаданных) Тогда - Возврат "Константы"; - - ИначеЕсли Метаданные.ЖурналыДокументов.Содержит(ОбъектМетаданных) Тогда - Возврат "ЖурналыДокументов"; - - ИначеЕсли Метаданные.Последовательности.Содержит(ОбъектМетаданных) Тогда - Возврат "Последовательности"; - - ИначеЕсли Метаданные.РегламентныеЗадания.Содержит(ОбъектМетаданных) Тогда - Возврат "РегламентныеЗадания"; - - ИначеЕсли Метаданные.РегистрыРасчета.Содержит(ОбъектМетаданных.Родитель()) - И ОбъектМетаданных.Родитель().Перерасчеты.Найти(ОбъектМетаданных.Имя) = ОбъектМетаданных Тогда - Возврат "Перерасчеты"; - - ИначеЕсли Метаданные.Обработки.Содержит(ОбъектМетаданных) Тогда - Возврат "Обработки"; - - ИначеЕсли Метаданные.Отчеты.Содержит(ОбъектМетаданных) Тогда - Возврат "Отчеты"; - - ИначеЕсли Метаданные.Подсистемы.Содержит(ОбъектМетаданных) Тогда - Возврат "Подсистемы"; - - ИначеЕсли Метаданные.ОбщиеМодули.Содержит(ОбъектМетаданных) Тогда - Возврат "ОбщиеМодули"; - - ИначеЕсли Метаданные.ПараметрыСеанса.Содержит(ОбъектМетаданных) Тогда - Возврат "ПараметрыСеанса"; - - ИначеЕсли Метаданные.Роли.Содержит(ОбъектМетаданных) Тогда - Возврат "Роли"; - - ИначеЕсли Метаданные.ОбщиеРеквизиты.Содержит(ОбъектМетаданных) Тогда - Возврат "ОбщиеРеквизиты"; - - ИначеЕсли Метаданные.КритерииОтбора.Содержит(ОбъектМетаданных) Тогда - Возврат "КритерииОтбора"; - - ИначеЕсли Метаданные.ПодпискиНаСобытия.Содержит(ОбъектМетаданных) Тогда - Возврат "ПодпискиНаСобытия"; - - ИначеЕсли Метаданные.ФункциональныеОпции.Содержит(ОбъектМетаданных) Тогда - Возврат "ФункциональныеОпции"; - - ИначеЕсли Метаданные.ПараметрыФункциональныхОпций.Содержит(ОбъектМетаданных) Тогда - Возврат "ПараметрыФункциональныхОпций"; - - ИначеЕсли Метаданные.ХранилищаНастроек.Содержит(ОбъектМетаданных) Тогда - Возврат "ХранилищаНастроек"; - - ИначеЕсли Метаданные.ОбщиеФормы.Содержит(ОбъектМетаданных) Тогда - Возврат "ОбщиеФормы"; - - ИначеЕсли Метаданные.ОбщиеКоманды.Содержит(ОбъектМетаданных) Тогда - Возврат "ОбщиеКоманды"; - - ИначеЕсли Метаданные.ГруппыКоманд.Содержит(ОбъектМетаданных) Тогда - Возврат "ГруппыКоманд"; - - ИначеЕсли Метаданные.ОбщиеМакеты.Содержит(ОбъектМетаданных) Тогда - Возврат "ОбщиеМакеты"; - - ИначеЕсли Метаданные.ОбщиеКартинки.Содержит(ОбъектМетаданных) Тогда - Возврат "ОбщиеКартинки"; - - ИначеЕсли Метаданные.ПакетыXDTO.Содержит(ОбъектМетаданных) Тогда - Возврат "ПакетыXDTO"; - - ИначеЕсли Метаданные.WebСервисы.Содержит(ОбъектМетаданных) Тогда - Возврат "WebСервисы"; - - ИначеЕсли Метаданные.WSСсылки.Содержит(ОбъектМетаданных) Тогда - Возврат "WSСсылки"; - - ИначеЕсли Метаданные.СервисыИнтеграции.Содержит(ОбъектМетаданных) Тогда - Возврат "СервисыИнтеграции"; - - ИначеЕсли Метаданные.Стили.Содержит(ОбъектМетаданных) Тогда - Возврат "Стили"; - - ИначеЕсли Метаданные.Языки.Содержит(ОбъектМетаданных) Тогда - Возврат "Языки"; - - ИначеЕсли Метаданные.ВнешниеИсточникиДанных.Содержит(ОбъектМетаданных) Тогда - Возврат "ВнешниеИсточникиДанных"; - - Иначе - + ЧастиИмени = СтрРазделить(ОбъектМетаданных.ПолноеИмя(), "."); + ПоВидамОбъектов = СтандартныеПодсистемыПовтИсп.СвойстваВидовОбъектовМетаданных().ПоВидамОбъектов; + Свойства = ПоВидамОбъектов.Получить(ВРег(ЧастиИмени[0])); + + Если Свойства = Неопределено Тогда Возврат ""; - КонецЕсли; + Если Свойства.ИмяВидаОбъекта = "РегистрРасчета" + И ЧастиИмени.Количество() = 4 + И ВРег(ЧастиИмени[2]) = "ПЕРЕРАСЧЕТ" Тогда + Возврат "Перерасчеты"; + КонецЕсли; + + Возврат Свойства.ИмяКоллекции; + КонецФункции -// Возвращает менеджер объекта по полному имени объекта метаданных. +// Возвращает менеджер объекта по началу полному имени объекта метаданных. +// Вызывает исключение при неверном начале полного имени или +// отсутствии объектов в конфигурации из начала полного имени, +// определяющего менеджер объекта. +// Например, для реквизитов или форм справочника используется только +// имя справочника и возвращается менеджер справочника, +// а для перерасчета используется имя регистра расчета, имя перерасчета и +// возвращается менеджер перерасчета. // -// Ограничения -// - Не работает с точками маршрутов бизнес-процессов. -// - Вызывает исключение при неверном формате имени или отсутствии объекта в конфигурации. -// // Параметры: // ПолноеИмя - Строка - полное имя объекта метаданных. Пример: "Справочник.Организации". // // Возвращаемое значение: -// СправочникМенеджер, ДокументМенеджер, ОбработкаМенеджер, РегистрСведенийМенеджер, ПланВидовХарактеристикМенеджер -// +// ПланОбменаМенеджер +// КритерийОтбораМенеджер +// ХранилищеНастроекМенеджер +// WSСсылкаМенеджер +// СервисИнтеграцииМенеджер +// КонстантаМенеджер +// СправочникМенеджер +// ДокументМенеджер +// ПоследовательностьМенеджер +// ЖурналДокументовМенеджер +// ПеречислениеМенеджер +// ОтчетМенеджер +// ОбработкаМенеджер +// ПланВидовХарактеристикМенеджер +// ПланСчетовМенеджер +// ПланВидовРасчетаМенеджер +// РегистрСведенийМенеджер +// РегистрНакопленияМенеджер +// РегистрБухгалтерииМенеджер +// РегистрРасчетаМенеджер +// ПерерасчетМенеджер +// БизнесПроцессМенеджер +// ЗадачаМенеджер +// ВнешнийИсточникДанныхМенеджер +// ВнешнийИсточникДанныхТаблицаМенеджер +// ВнешнийИсточникДанныхКубМенеджер +// ВнешнийИсточникДанныхКубТаблицаИзмеренияМенеджер +// // Пример: // МенеджерСправочника = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени("Справочник.Организации"); // ПустаяСсылка = МенеджерСправочника.ПустаяСсылка(); // Функция МенеджерОбъектаПоПолномуИмени(ПолноеИмя) Экспорт - Перем КлассОМ, ИмяОМ, Менеджер; - - ЧастиИмени = СтрРазделить(ПолноеИмя, "."); - - Если ЧастиИмени.Количество() >= 2 Тогда - КлассОМ = ЧастиИмени[0]; - ИмяОМ = ЧастиИмени[1]; - Иначе - Менеджер = Неопределено; - КонецЕсли; - - Если ВРег(КлассОМ) = "ПЛАНОБМЕНА" Тогда - Менеджер = ПланыОбмена; - - ИначеЕсли ВРег(КлассОМ) = "СПРАВОЧНИК" Тогда - Менеджер = Справочники; - - ИначеЕсли ВРег(КлассОМ) = "ДОКУМЕНТ" Тогда - Менеджер = Документы; - - ИначеЕсли ВРег(КлассОМ) = "ЖУРНАЛДОКУМЕНТОВ" Тогда - Менеджер = ЖурналыДокументов; - - ИначеЕсли ВРег(КлассОМ) = "ПЕРЕЧИСЛЕНИЕ" Тогда - Менеджер = Перечисления; - - ИначеЕсли ВРег(КлассОМ) = "ОТЧЕТ" Тогда - Менеджер = Отчеты; - - ИначеЕсли ВРег(КлассОМ) = "ОБРАБОТКА" Тогда - Менеджер = Обработки; - - ИначеЕсли ВРег(КлассОМ) = "ПЛАНВИДОВХАРАКТЕРИСТИК" Тогда - Менеджер = ПланыВидовХарактеристик; - - ИначеЕсли ВРег(КлассОМ) = "ПЛАНСЧЕТОВ" Тогда - Менеджер = ПланыСчетов; - - ИначеЕсли ВРег(КлассОМ) = "ПЛАНВИДОВРАСЧЕТА" Тогда - Менеджер = ПланыВидовРасчета; - - ИначеЕсли ВРег(КлассОМ) = "РЕГИСТРСВЕДЕНИЙ" Тогда - Менеджер = РегистрыСведений; - - ИначеЕсли ВРег(КлассОМ) = "РЕГИСТРНАКОПЛЕНИЯ" Тогда - Менеджер = РегистрыНакопления; - - ИначеЕсли ВРег(КлассОМ) = "РЕГИСТРБУХГАЛТЕРИИ" Тогда - Менеджер = РегистрыБухгалтерии; - - ИначеЕсли ВРег(КлассОМ) = "РЕГИСТРРАСЧЕТА" Тогда - - Если ЧастиИмени.Количество() = 2 Тогда - Менеджер = РегистрыРасчета; - - ИначеЕсли ЧастиИмени.Количество() = 4 Тогда - КлассПодчиненногоОМ = ЧастиИмени[2]; - ИмяПодчиненногоОМ = ЧастиИмени[3]; - - Если ВРег(КлассПодчиненногоОМ) = "ПЕРЕРАСЧЕТ" Тогда - Менеджер = РегистрыРасчета[ИмяОМ].Перерасчеты; - ИмяОм = ИмяПодчиненногоОМ; - - Иначе - Менеджер = Неопределено; - КонецЕсли; - - Иначе - Менеджер = Неопределено; - КонецЕсли; - - ИначеЕсли ВРег(КлассОМ) = "БИЗНЕСПРОЦЕСС" Тогда - Менеджер = БизнесПроцессы; - - ИначеЕсли ВРег(КлассОМ) = "ЗАДАЧА" Тогда - Менеджер = Задачи; - - ИначеЕсли ВРег(КлассОМ) = "КОНСТАНТА" Тогда - Менеджер = Константы; - - ИначеЕсли ВРег(КлассОМ) = "ПОСЛЕДОВАТЕЛЬНОСТЬ" Тогда - Менеджер = Последовательности; - - Иначе - Менеджер = Неопределено; - КонецЕсли; - - Если Менеджер = Неопределено Тогда - ПроверитьОбъектМетаданныхСуществует(ПолноеИмя); - ВызватьИсключение(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Неверное значение параметра %1 функции %2. У объекта метаданных ""%3"" нет менеджера объекта.'"), - "ПолноеИмя", "ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени", ПолноеИмя), - КатегорияОшибки.ОшибкаКонфигурации); - КонецЕсли; - - Попытка - Возврат Менеджер[ИмяОМ]; - Исключение - ПроверитьОбъектМетаданныхСуществует(ПолноеИмя); - ВызватьИсключение; - КонецПопытки; + Возврат МенеджерОбъектаПоИмени(ПолноеИмя, Истина, Ложь, Ложь, + "ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени", "ПолноеИмя", Ложь); КонецФункции // Возвращает менеджер объекта по ссылке на объект. -// Ограничение: не обрабатываются точки маршрутов бизнес-процессов. -// См. также ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени. +// См. МенеджерОбъектаПоПолномуИмени. // // Параметры: -// Ссылка - ЛюбаяСсылка - объект, менеджер которого требуется получить. +// Ссылка - ЛюбаяСсылка - ссылка на объект, менеджер которого требуется получить. // // Возвращаемое значение: -// СправочникМенеджер, ДокументМенеджер, ОбработкаМенеджер, РегистрСведенийМенеджер - менеджер объекта. +// ПланОбменаМенеджер +// СправочникМенеджер +// ДокументМенеджер +// ПеречислениеМенеджер +// ПланВидовХарактеристикМенеджер +// ПланСчетовМенеджер +// ПланВидовРасчетаМенеджер +// БизнесПроцессМенеджер +// ЗадачаМенеджер // // Пример: // МенеджерСправочника = ОбщегоНазначения.МенеджерОбъектаПоСсылке(СсылкаНаОрганизацию); @@ -4085,39 +3923,19 @@ // Функция МенеджерОбъектаПоСсылке(Ссылка) Экспорт - ИмяОбъекта = Ссылка.Метаданные().Имя; - ТипСсылки = ТипЗнч(Ссылка); + ЧастиИмени = СтрРазделить(Ссылка.Метаданные().ПолноеИмя(), "."); + ПоВидамОбъектов = СтандартныеПодсистемыПовтИсп.СвойстваВидовОбъектовМетаданных().ПоВидамОбъектов; + Свойства = ПоВидамОбъектов.Получить(ВРег(ЧастиИмени[0])); - Если Справочники.ТипВсеСсылки().СодержитТип(ТипСсылки) Тогда - Возврат Справочники[ИмяОбъекта]; - - ИначеЕсли Документы.ТипВсеСсылки().СодержитТип(ТипСсылки) Тогда - Возврат Документы[ИмяОбъекта]; - - ИначеЕсли БизнесПроцессы.ТипВсеСсылки().СодержитТип(ТипСсылки) Тогда - Возврат БизнесПроцессы[ИмяОбъекта]; - - ИначеЕсли ПланыВидовХарактеристик.ТипВсеСсылки().СодержитТип(ТипСсылки) Тогда - Возврат ПланыВидовХарактеристик[ИмяОбъекта]; - - ИначеЕсли ПланыСчетов.ТипВсеСсылки().СодержитТип(ТипСсылки) Тогда - Возврат ПланыСчетов[ИмяОбъекта]; - - ИначеЕсли ПланыВидовРасчета.ТипВсеСсылки().СодержитТип(ТипСсылки) Тогда - Возврат ПланыВидовРасчета[ИмяОбъекта]; - - ИначеЕсли Задачи.ТипВсеСсылки().СодержитТип(ТипСсылки) Тогда - Возврат Задачи[ИмяОбъекта]; - - ИначеЕсли ПланыОбмена.ТипВсеСсылки().СодержитТип(ТипСсылки) Тогда - Возврат ПланыОбмена[ИмяОбъекта]; - - ИначеЕсли Перечисления.ТипВсеСсылки().СодержитТип(ТипСсылки) Тогда - Возврат Перечисления[ИмяОбъекта]; - Иначе - Возврат Неопределено; + Если Свойства <> Неопределено И Свойства.ЕстьСсылка Тогда + Возврат Свойства.Менеджер[ЧастиИмени[1]]; КонецЕсли; + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Неверное значение ""%1"" (тип %2) параметра %3 в %4.'"), + Ссылка, ТипЗнч(Ссылка), "Ссылка", "ОбщегоНазначения.МенеджерОбъектаПоСсылке"); + ВызватьИсключение(ТекстОшибки, КатегорияОшибки.ОшибкаКонфигурации); + КонецФункции // Проверка того, что переданный тип является ссылочным типом данных. @@ -4192,39 +4010,29 @@ // Функция ВидОбъектаПоТипу(ТипОбъекта) Экспорт - Если Справочники.ТипВсеСсылки().СодержитТип(ТипОбъекта) Тогда - Возврат "Справочник"; - - ИначеЕсли Документы.ТипВсеСсылки().СодержитТип(ТипОбъекта) Тогда - Возврат "Документ"; - - ИначеЕсли БизнесПроцессы.ТипВсеСсылки().СодержитТип(ТипОбъекта) Тогда - Возврат "БизнесПроцесс"; - - ИначеЕсли ПланыВидовХарактеристик.ТипВсеСсылки().СодержитТип(ТипОбъекта) Тогда - Возврат "ПланВидовХарактеристик"; - - ИначеЕсли ПланыСчетов.ТипВсеСсылки().СодержитТип(ТипОбъекта) Тогда - Возврат "ПланСчетов"; - - ИначеЕсли ПланыВидовРасчета.ТипВсеСсылки().СодержитТип(ТипОбъекта) Тогда - Возврат "ПланВидовРасчета"; - - ИначеЕсли Задачи.ТипВсеСсылки().СодержитТип(ТипОбъекта) Тогда - Возврат "Задача"; - - ИначеЕсли ПланыОбмена.ТипВсеСсылки().СодержитТип(ТипОбъекта) Тогда - Возврат "ПланОбмена"; - - ИначеЕсли Перечисления.ТипВсеСсылки().СодержитТип(ТипОбъекта) Тогда - Возврат "Перечисление"; - - Иначе - ВызватьИсключение(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Неверный тип значения параметра %1 функции %2: %3.'"), "ТипОбъекта", - "ОбщегоНазначения.ВидОбъектаПоТипу", Строка(ТипОбъекта)), КатегорияОшибки.ОшибкаКонфигурации); + ОбъектМетаданных = Метаданные.НайтиПоТипу(ТипОбъекта); + Если ОбъектМетаданных = Неопределено Тогда + ОбщегоНазначенияКлиентСервер.ПроверитьПараметр("ОбщегоНазначения.ВидОбъектаПоТипу", + "ТипОбъекта", ТипОбъекта, Тип("Тип")); + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Неверное значение ""%1"" (тип %2) параметра %3 в %4. Не существует объекта метаданных для указанного типа.'"), + ТипОбъекта, ТипЗнч(ТипОбъекта), "ТипОбъекта", "ОбщегоНазначения.ВидОбъектаПоТипу"); + ВызватьИсключение(ТекстОшибки, КатегорияОшибки.ОшибкаКонфигурации); КонецЕсли; + ИмяВидаОбъектов = СтрРазделить(ОбъектМетаданных.ПолноеИмя(), ".")[0]; + ПоВидамОбъектов = СтандартныеПодсистемыПовтИсп.СвойстваВидовОбъектовМетаданных().ПоВидамОбъектов; + Свойства = ПоВидамОбъектов.Получить(ВРег(ИмяВидаОбъектов)); + + Если Свойства = Неопределено Тогда + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Неверное значение ""%1"" (тип %2) параметра %3 в %4. Не определен вид объектов метаданных для указанного типа.'"), + ТипОбъекта, ТипЗнч(ТипОбъекта), "ТипОбъекта", "ОбщегоНазначения.ВидОбъектаПоТипу"); + ВызватьИсключение(ТекстОшибки, КатегорияОшибки.ОшибкаКонфигурации); + КонецЕсли; + + Возврат Свойства.ИмяВидаОбъекта; + КонецФункции // Возвращает полное имя объекта метаданных по переданному значению ссылки. @@ -4469,15 +4277,15 @@ Функция ОбъектМетаданныхПоПолномуИмени(ПолноеИмя) Экспорт ПозицияТочки = СтрНайти(ПолноеИмя, "."); - ИмяБазовогоТипа = Лев(ПолноеИмя, ПозицияТочки - 1); + ИмяВидаОбъектов = Лев(ПолноеИмя, ПозицияТочки - 1); - ИменаКоллекций = СтандартныеПодсистемыПовтИсп.ИменаКоллекцийПоИменамБазовыхТипов(); - Коллекция = ИменаКоллекций.Получить(ВРег(ИмяБазовогоТипа)); + ПоВидамОбъектов = СтандартныеПодсистемыПовтИсп.СвойстваВидовОбъектовМетаданных().ПоВидамОбъектов; + Свойства = ПоВидамОбъектов.Получить(ВРег(ИмяВидаОбъектов)); - Если Коллекция <> Неопределено Тогда - Если Коллекция <> "Подсистемы" Тогда + Если Свойства <> Неопределено Тогда + Если Свойства.ИмяКоллекции <> "Подсистемы" Тогда ИмяОбъекта = Сред(ПолноеИмя, ПозицияТочки + 1); - ОбъектМетаданных = Метаданные[Коллекция].Найти(ИмяОбъекта); + ОбъектМетаданных = Метаданные[Свойства.ИмяКоллекции].Найти(ИмяОбъекта); Иначе ИменаПодсистем = СтрРазделить(ВРег(ПолноеИмя), "."); Количество = ИменаПодсистем.Количество(); @@ -4560,59 +4368,37 @@ КонецПроцедуры -// Возвращает строковое представление типа, например, "СправочникСсылка.ИмяОбъекта", "ДокументСсылка.ИмяОбъекта". -// Для остальных типов приводит тип к строке, например "Число". +// Возвращает строковое представление типа, например, "СправочникСсылка.ИмяОбъекта", "Форма клиентского приложения". +// Тип приводится к строке напрямую, кроме простых типов, ссылочных типов и типов ключей регистров. // // Параметры: // Тип - Тип - для которого надо получить представление. // // Возвращаемое значение: -// Строка +// Строка - "СправочникСсылка.ИмяОбъекта", "РегистрСведенийКлючЗаписи.ИмяОбъекта", ... // Функция СтроковоеПредставлениеТипа(Тип) Экспорт - Представление = ""; + ОбъектМетаданных = Метаданные.НайтиПоТипу(Тип); - Если ЭтоСсылка(Тип) Тогда - - ПолноеИмя = Метаданные.НайтиПоТипу(Тип).ПолноеИмя(); - ИмяОбъекта = СтрРазделить(ПолноеИмя, ".")[1]; - - Если Справочники.ТипВсеСсылки().СодержитТип(Тип) Тогда - Представление = "СправочникСсылка"; - - ИначеЕсли Документы.ТипВсеСсылки().СодержитТип(Тип) Тогда - Представление = "ДокументСсылка"; - - ИначеЕсли БизнесПроцессы.ТипВсеСсылки().СодержитТип(Тип) Тогда - Представление = "БизнесПроцессСсылка"; - - ИначеЕсли БизнесПроцессы.ТипВсеСсылкиТочекМаршрутаБизнесПроцессов().СодержитТип(Тип) Тогда - Представление = "ТочкаМаршрутаБизнесПроцессаСсылка"; - - ИначеЕсли ПланыВидовХарактеристик.ТипВсеСсылки().СодержитТип(Тип) Тогда - Представление = "ПланВидовХарактеристикСсылка"; - - ИначеЕсли ПланыСчетов.ТипВсеСсылки().СодержитТип(Тип) Тогда - Представление = "ПланСчетовСсылка"; - - ИначеЕсли ПланыВидовРасчета.ТипВсеСсылки().СодержитТип(Тип) Тогда - Представление = "ПланВидовРасчетаСсылка"; - - ИначеЕсли Задачи.ТипВсеСсылки().СодержитТип(Тип) Тогда - Представление = "ЗадачаСсылка"; - - ИначеЕсли ПланыОбмена.ТипВсеСсылки().СодержитТип(Тип) Тогда - Представление = "ПланОбменаСсылка"; - - ИначеЕсли Перечисления.ТипВсеСсылки().СодержитТип(Тип) Тогда - Представление = "ПеречислениеСсылка"; - + Если ОбъектМетаданных <> Неопределено Тогда + ЧастиИмени = СтрРазделить(ОбъектМетаданных.ПолноеИмя(), "."); + ПоВидамОбъектов = СтандартныеПодсистемыПовтИсп.СвойстваВидовОбъектовМетаданных().ПоВидамОбъектов; + Свойства = ПоВидамОбъектов.Получить(ВРег(ЧастиИмени[0])); + Если Свойства <> Неопределено Тогда + Если Свойства.ИмяВидаОбъекта = "БизнесПроцесс" + И БизнесПроцессы.ТипВсеСсылкиТочекМаршрутаБизнесПроцессов().СодержитТип(Тип) Тогда + ИмяТипа = "ТочкаМаршрутаБизнесПроцессаСсылка"; + ИначеЕсли Свойства.ЕстьСсылка Или Свойства.ЕстьКлючЗаписи Тогда + ИмяТипа = Свойства.ИмяТипа; + КонецЕсли; + + Возврат ИмяТипа + "." + ЧастиИмени[1]; + КонецЕсли; - - Результат = ?(Представление = "", Представление, Представление + "." + ИмяОбъекта); - - ИначеЕсли Тип = Тип("Неопределено") Тогда + КонецЕсли; + + Если Тип = Тип("Неопределено") Тогда Результат = "Неопределено"; ИначеЕсли Тип = Тип("Строка") Тогда @@ -4626,11 +4412,9 @@ ИначеЕсли Тип = Тип("Дата") Тогда Результат = "Дата"; - + Иначе - Результат = Строка(Тип); - КонецЕсли; Возврат Результат; @@ -6784,7 +6568,8 @@ Если ЧастиИмени.Количество() = 3 Тогда ПолноеИмяОбъекта = ЧастиИмени[0] + "." + ЧастиИмени[1]; Попытка - Менеджер = МенеджерОбъектаПоИмени(ПолноеИмяОбъекта); + Менеджер = МенеджерОбъектаПоИмени(ПолноеИмяОбъекта, Истина, Истина, Истина, + "ОбщегоНазначения.СтрокаВызоваМетодаКакПроизвольногоКода", "ИмяМетода"); Исключение Менеджер = Неопределено; КонецПопытки; @@ -10343,104 +10128,6 @@ #КонецОбласти -#Область УсловныеВызовы - -// Возвращает серверный модуль менеджера по имени объекта. -Функция СерверныйМодульМенеджера(Имя) - ОбъектНайден = Ложь; - - ЧастиИмени = СтрРазделить(Имя, "."); - Если ЧастиИмени.Количество() = 2 Тогда - - ИмяВида = ВРег(ЧастиИмени[0]); - ИмяОбъекта = ЧастиИмени[1]; - - Если ИмяВида = ВРег("Константы") Тогда - Если Метаданные.Константы.Найти(ИмяОбъекта) <> Неопределено Тогда - ОбъектНайден = Истина; - КонецЕсли; - ИначеЕсли ИмяВида = ВРег("РегистрыСведений") Тогда - Если Метаданные.РегистрыСведений.Найти(ИмяОбъекта) <> Неопределено Тогда - ОбъектНайден = Истина; - КонецЕсли; - ИначеЕсли ИмяВида = ВРег("РегистрыНакопления") Тогда - Если Метаданные.РегистрыНакопления.Найти(ИмяОбъекта) <> Неопределено Тогда - ОбъектНайден = Истина; - КонецЕсли; - ИначеЕсли ИмяВида = ВРег("РегистрыБухгалтерии") Тогда - Если Метаданные.РегистрыБухгалтерии.Найти(ИмяОбъекта) <> Неопределено Тогда - ОбъектНайден = Истина; - КонецЕсли; - ИначеЕсли ИмяВида = ВРег("РегистрыРасчета") Тогда - Если Метаданные.РегистрыРасчета.Найти(ИмяОбъекта) <> Неопределено Тогда - ОбъектНайден = Истина; - КонецЕсли; - ИначеЕсли ИмяВида = ВРег("Справочники") Тогда - Если Метаданные.Справочники.Найти(ИмяОбъекта) <> Неопределено Тогда - ОбъектНайден = Истина; - КонецЕсли; - ИначеЕсли ИмяВида = ВРег("Документы") Тогда - Если Метаданные.Документы.Найти(ИмяОбъекта) <> Неопределено Тогда - ОбъектНайден = Истина; - КонецЕсли; - ИначеЕсли ИмяВида = ВРег("Отчеты") Тогда - Если Метаданные.Отчеты.Найти(ИмяОбъекта) <> Неопределено Тогда - ОбъектНайден = Истина; - КонецЕсли; - ИначеЕсли ИмяВида = ВРег("Обработки") Тогда - Если Метаданные.Обработки.Найти(ИмяОбъекта) <> Неопределено Тогда - ОбъектНайден = Истина; - КонецЕсли; - ИначеЕсли ИмяВида = ВРег("БизнесПроцессы") Тогда - Если Метаданные.БизнесПроцессы.Найти(ИмяОбъекта) <> Неопределено Тогда - ОбъектНайден = Истина; - КонецЕсли; - ИначеЕсли ИмяВида = ВРег("ЖурналыДокументов") Тогда - Если Метаданные.ЖурналыДокументов.Найти(ИмяОбъекта) <> Неопределено Тогда - ОбъектНайден = Истина; - КонецЕсли; - ИначеЕсли ИмяВида = ВРег("Задачи") Тогда - Если Метаданные.Задачи.Найти(ИмяОбъекта) <> Неопределено Тогда - ОбъектНайден = Истина; - КонецЕсли; - ИначеЕсли ИмяВида = ВРег("ПланыСчетов") Тогда - Если Метаданные.ПланыСчетов.Найти(ИмяОбъекта) <> Неопределено Тогда - ОбъектНайден = Истина; - КонецЕсли; - ИначеЕсли ИмяВида = ВРег("ПланыОбмена") Тогда - Если Метаданные.ПланыОбмена.Найти(ИмяОбъекта) <> Неопределено Тогда - ОбъектНайден = Истина; - КонецЕсли; - ИначеЕсли ИмяВида = ВРег("ПланыВидовХарактеристик") Тогда - Если Метаданные.ПланыВидовХарактеристик.Найти(ИмяОбъекта) <> Неопределено Тогда - ОбъектНайден = Истина; - КонецЕсли; - ИначеЕсли ИмяВида = ВРег("ПланыВидовРасчета") Тогда - Если Метаданные.ПланыВидовРасчета.Найти(ИмяОбъекта) <> Неопределено Тогда - ОбъектНайден = Истина; - КонецЕсли; - КонецЕсли; - - КонецЕсли; - - Если Не ОбъектНайден Тогда - ВызватьИсключение(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Неверное значение параметра %1 в функции %2. Объект метаданных ""%3"" не существует.'"), - "Имя", "ОбщегоНазначения.СерверныйМодульМенеджера", Имя), - КатегорияОшибки.ОшибкаКонфигурации, - "СтандартныеПодсистемы.БазоваяФункциональность.ЭтоОшибкаПолученияМодуляМенеджераПоИмени"); - КонецЕсли; - - // АПК:488-выкл ВычислитьВБезопасномРежиме не используется, чтобы избежать вызова ОбщийМодуль рекурсивно. - УстановитьБезопасныйРежим(Истина); - Модуль = Вычислить(Имя); - // АПК:488-вкл - - Возврат Модуль; -КонецФункции - -#КонецОбласти - #Область Данные Функция СравниваемыеКолонки(Знач КоллекцияСтрок, Знач ИменаКолонок, Знач ИсключаяКолонки) @@ -10789,20 +10476,6 @@ #КонецОбласти -#Область Метаданные - -Процедура ПроверитьОбъектМетаданныхСуществует(ПолноеИмя) - - Если ОбъектМетаданныхПоПолномуИмени(ПолноеИмя) = Неопределено Тогда - ВызватьИсключение(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Несуществующий тип объекта метаданных ""%1"".'"), ПолноеИмя), - КатегорияОшибки.ОшибкаКонфигурации); - КонецЕсли; - -КонецПроцедуры - -#КонецОбласти - #Область ХранилищеНастроек Процедура ХранилищеСохранить(МенеджерХранилища, КлючОбъекта, КлючНастроек, Настройки, @@ -11024,146 +10697,200 @@ #Область БезопасноеВыполнениеВнешнегоКода // Возвращает менеджер объекта по имени. -// Ограничение: не обрабатываются точки маршрутов бизнес-процессов. // // Параметры: -// Имя - Строка - имя например, "Справочник", "Справочники", "Справочник.Организации". +// Имя - Строка - имя например, "Справочники.Организации", "Справочник.Организации", "Справочники", "Справочник". +// ЭтоПолноеИмя - Неопределено, Булево +// ЭтоИмяМенеджера - Неопределено, Булево +// ТребуетсяМодульМенеджера - Булево +// ИмяВызывающейПроцедуры - Строка +// ИмяПараметра - Строка +// МенеджерПоТочномуИмени - Булево - если Ложь, +// тогда для вложенных объектов (форм, реквизитов, ...) +// возвращается менеджер основного объекта (по первым двум частям имени через точку), +// при этом для перерасчетов возвращается менеджер перерасчета (по первым четырем частям имени через точку). // // Возвращаемое значение: +// см. МенеджерОбъектаПоПолномуИмени +// ПланыОбменаМенеджер +// КритерииОтбораМенеджер +// ХранилищаНастроекМенеджер +// WSСсылкиМенеджер +// СервисыИнтеграцииМенеджер +// КонстантыМенеджер // СправочникиМенеджер -// СправочникМенеджер // ДокументыМенеджер -// ДокументМенеджер -// ... +// ПоследовательностиМенеджер +// ЖурналыДокументовМенеджер +// ПеречисленияМенеджер +// ОтчетыМенеджер +// ОбработкиМенеджер +// ПланыВидовХарактеристикМенеджер +// ПланыСчетовМенеджер +// ПланыВидовРасчетаМенеджер +// РегистрыСведенийМенеджер +// РегистрыНакопленияМенеджер +// РегистрыБухгалтерииМенеджер +// РегистрыРасчетаМенеджер +// ПерерасчетыМенеджер +// БизнесПроцессыМенеджер +// ЗадачиМенеджер +// ВнешниеИсточникиДанныхМенеджер +// ВнешнийИсточникДанныхТаблицыМенеджер +// ВнешнийИсточникДанныхКубыМенеджер +// ВнешнийИсточникДанныхКубТаблицыИзмеренийМенеджер // -Функция МенеджерОбъектаПоИмени(Имя) - Перем КлассОМ, ИмяОМ, Менеджер; +Функция МенеджерОбъектаПоИмени(Имя, ЭтоПолноеИмя, ЭтоИмяМенеджера, ТребуетсяМодульМенеджера, + ИмяВызывающейПроцедуры, ИмяПараметра, МенеджерПоТочномуИмени = Истина) ЧастиИмени = СтрРазделить(Имя, "."); + ПерваяЧастьИмени = ЧастиИмени[0]; - Если ЧастиИмени.Количество() > 0 Тогда - КлассОМ = ВРег(ЧастиИмени[0]); + СвойстваВидовОбъектов = СтандартныеПодсистемыПовтИсп.СвойстваВидовОбъектовМетаданных(); + Свойства = СвойстваВидовОбъектов.ПоКоллекциям.Получить(ВРег(ПерваяЧастьИмени)); + НайденоПоКоллекциям = Истина; + Если Свойства = Неопределено Тогда + Свойства = СвойстваВидовОбъектов.ПоВидамОбъектов.Получить(ВРег(ПерваяЧастьИмени)); + НайденоПоКоллекциям = Ложь; + КонецЕсли; + КодОшибки = "СтандартныеПодсистемы.БазоваяФункциональность.ЭтоОшибкаПолученияМодуляМенеджераПоИмени"; + + Если Свойства = Неопределено Тогда + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Неверное значение ""%1"" (тип %2) параметра %3 в %4. Не существует объектов ""%5"".'"), + Имя, ТипЗнч(Имя), ИмяПараметра, ИмяВызывающейПроцедуры, ПерваяЧастьИмени); + ВызватьИсключение(ТекстОшибки, КатегорияОшибки.ОшибкаКонфигурации, КодОшибки); + КонецЕсли; + Если ЭтоИмяМенеджера = Истина И Не НайденоПоКоллекциям Тогда + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Неверное значение ""%1"" (тип %2) параметра %3 в %4. Указано ""%5"" - начало имени объекта метаданных, а ожидается начало имени менеджера объекта.'"), + Имя, ТипЗнч(Имя), ИмяПараметра, ИмяВызывающейПроцедуры, ПерваяЧастьИмени); + ВызватьИсключение(ТекстОшибки, КатегорияОшибки.ОшибкаКонфигурации, КодОшибки); + ИначеЕсли ЭтоИмяМенеджера = Ложь И НайденоПоКоллекциям Тогда + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Неверное значение ""%1"" (тип %2) параметра %3 в %4. Указано ""%5"" - начало имени менеджера объекта, а ожидается начало имени объекта метаданных.'"), + Имя, ТипЗнч(Имя), ИмяПараметра, ИмяВызывающейПроцедуры, ПерваяЧастьИмени); + ВызватьИсключение(ТекстОшибки, КатегорияОшибки.ОшибкаКонфигурации, КодОшибки); КонецЕсли; - Если ЧастиИмени.Количество() > 1 Тогда - ИмяОМ = ЧастиИмени[1]; + Менеджер = Свойства.Менеджер; + Если Менеджер = Неопределено Тогда + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Неверное значение ""%1"" (тип %2) параметра %3 в %4. У объектов ""%5"" нет менеджера.'"), + Имя, ТипЗнч(Имя), ИмяПараметра, ИмяВызывающейПроцедуры, ПерваяЧастьИмени); + ВызватьИсключение(ТекстОшибки, КатегорияОшибки.ОшибкаКонфигурации, КодОшибки); КонецЕсли; - Если КлассОМ = "ПЛАНОБМЕНА" - Или КлассОМ = "ПЛАНЫОБМЕНА" Тогда - Менеджер = ПланыОбмена; + ЕстьМодульМенеджера = Свойства.ЕстьМодульМенеджера; + КоллекцияМетаданных = Метаданные[Свойства.ИмяКоллекции]; + Индекс = 0; + + Если ЧастиИмени.Количество() > 2 + И ( Свойства.ИмяВидаОбъекта = "РегистрРасчета" + Или Свойства.ИмяВидаОбъекта = "ВнешнийИсточникДанных") Тогда - ИначеЕсли КлассОМ = "СПРАВОЧНИК" - Или КлассОМ = "СПРАВОЧНИКИ" Тогда - Менеджер = Справочники; - - ИначеЕсли КлассОМ = "ДОКУМЕНТ" - Или КлассОМ = "ДОКУМЕНТЫ" Тогда - Менеджер = Документы; - - ИначеЕсли КлассОМ = "ЖУРНАЛДОКУМЕНТОВ" - Или КлассОМ = "ЖУРНАЛЫДОКУМЕНТОВ" Тогда - Менеджер = ЖурналыДокументов; - - ИначеЕсли КлассОМ = "ПЕРЕЧИСЛЕНИЕ" - Или КлассОМ = "ПЕРЕЧИСЛЕНИЯ" Тогда - Менеджер = Перечисления; - - ИначеЕсли КлассОМ = "ОБЩИЙМОДУЛЬ" - Или КлассОМ = "ОБЩИЕМОДУЛИ" Тогда - - Возврат ОбщийМодуль(ИмяОМ); - - ИначеЕсли КлассОМ = "ОТЧЕТ" - Или КлассОМ = "ОТЧЕТЫ" Тогда - Менеджер = Отчеты; - - ИначеЕсли КлассОМ = "ОБРАБОТКА" - Или КлассОМ = "ОБРАБОТКИ" Тогда - Менеджер = Обработки; - - ИначеЕсли КлассОМ = "ПЛАНВИДОВХАРАКТЕРИСТИК" - Или КлассОМ = "ПЛАНЫВИДОВХАРАКТЕРИСТИК" Тогда - Менеджер = ПланыВидовХарактеристик; - - ИначеЕсли КлассОМ = "ПЛАНСЧЕТОВ" - Или КлассОМ = "ПЛАНЫСЧЕТОВ" Тогда - Менеджер = ПланыСчетов; - - ИначеЕсли КлассОМ = "ПЛАНВИДОВРАСЧЕТА" - Или КлассОМ = "ПЛАНЫВИДОВРАСЧЕТА" Тогда - Менеджер = ПланыВидовРасчета; - - ИначеЕсли КлассОМ = "РЕГИСТРСВЕДЕНИЙ" - Или КлассОМ = "РЕГИСТРЫСВЕДЕНИЙ" Тогда - Менеджер = РегистрыСведений; - - ИначеЕсли КлассОМ = "РЕГИСТРНАКОПЛЕНИЯ" - Или КлассОМ = "РЕГИСТРЫНАКОПЛЕНИЯ" Тогда - Менеджер = РегистрыНакопления; - - ИначеЕсли КлассОМ = "РЕГИСТРБУХГАЛТЕРИИ" - Или КлассОМ = "РЕГИСТРЫБУХГАЛТЕРИИ" Тогда - Менеджер = РегистрыБухгалтерии; - - ИначеЕсли КлассОМ = "РЕГИСТРРАСЧЕТА" - Или КлассОМ = "РЕГИСТРЫРАСЧЕТА" Тогда - - Если ЧастиИмени.Количество() < 3 Тогда - // Регистр расчета - Менеджер = РегистрыРасчета; + Если Свойства.ИмяВидаОбъекта = "РегистрРасчета" Тогда + УстановитьМенеджерВложенногоОбъекта("ПЕРЕРАСЧЕТЫ", "ПЕРЕРАСЧЕТ", Ложь, + Индекс, Менеджер, ЕстьМодульМенеджера, КоллекцияМетаданных, Имя, ЧастиИмени, + НайденоПоКоллекциям, ИмяВызывающейПроцедуры, ИмяПараметра, КодОшибки); Иначе - КлассПодчиненногоОМ = ВРег(ЧастиИмени[2]); - Если ЧастиИмени.Количество() > 3 Тогда - ИмяПодчиненногоОМ = ЧастиИмени[3]; - КонецЕсли; - Если КлассПодчиненногоОМ = "ПЕРЕРАСЧЕТ" - Или КлассПодчиненногоОМ = "ПЕРЕРАСЧЕТЫ" Тогда - // Перерасчет - Попытка - Менеджер = РегистрыРасчета[ИмяОМ].Перерасчеты; - ИмяОМ = ИмяПодчиненногоОМ; - Исключение - Менеджер = Неопределено; - КонецПопытки; + УстановитьМенеджерВложенногоОбъекта("КУБЫ", "КУБ", Истина, + Индекс, Менеджер, ЕстьМодульМенеджера, КоллекцияМетаданных, Имя, ЧастиИмени, + НайденоПоКоллекциям, ИмяВызывающейПроцедуры, ИмяПараметра, КодОшибки); + Если Индекс = 0 Тогда + УстановитьМенеджерВложенногоОбъекта("ТАБЛИЦЫ", "ТАБЛИЦА", Истина, + Индекс, Менеджер, ЕстьМодульМенеджера, КоллекцияМетаданных, Имя, ЧастиИмени, + НайденоПоКоллекциям, ИмяВызывающейПроцедуры, ИмяПараметра, КодОшибки); + ИначеЕсли ЧастиИмени.Количество() > 4 Тогда + УстановитьМенеджерВложенногоОбъекта("ТАБЛИЦЫИЗМЕРЕНИЙ", "ТАБЛИЦАИЗМЕРЕНИЯ", Истина, + Индекс, Менеджер, ЕстьМодульМенеджера, КоллекцияМетаданных, Имя, ЧастиИмени, + НайденоПоКоллекциям, ИмяВызывающейПроцедуры, ИмяПараметра, КодОшибки); КонецЕсли; КонецЕсли; - - ИначеЕсли КлассОМ = "БИЗНЕСПРОЦЕСС" - Или КлассОМ = "БИЗНЕСПРОЦЕССЫ" Тогда - Менеджер = БизнесПроцессы; - - ИначеЕсли КлассОМ = "ЗАДАЧА" - Или КлассОМ = "ЗАДАЧИ" Тогда - Менеджер = Задачи; - - ИначеЕсли КлассОМ = "КОНСТАНТА" - Или КлассОМ = "КОНСТАНТЫ" Тогда - Менеджер = Константы; - - ИначеЕсли КлассОМ = "ПОСЛЕДОВАТЕЛЬНОСТЬ" - Или КлассОМ = "ПОСЛЕДОВАТЕЛЬНОСТИ" Тогда - Менеджер = Последовательности; КонецЕсли; - Если Менеджер <> Неопределено Тогда - Если ЗначениеЗаполнено(ИмяОМ) Тогда - Попытка - Возврат Менеджер[ИмяОМ]; - Исключение - Менеджер = Неопределено; - КонецПопытки; - Иначе + Если ЧастиИмени.Количество() = Индекс + 1 Тогда + Если Не ЭтоПолноеИмя Тогда Возврат Менеджер; КонецЕсли; + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Неверное значение ""%1"" (тип %2) параметра %3 в %4. Ожидается полное имя объекта.'"), + Имя, ТипЗнч(Имя), ИмяПараметра, ИмяВызывающейПроцедуры); + ВызватьИсключение(ТекстОшибки, КатегорияОшибки.ОшибкаКонфигурации, КодОшибки); КонецЕсли; - ВызватьИсключение(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Неверное значение параметра %1 в %2. Менеджер для объекта ""%3"" не существует.'"), Имя), - "Имя", "ОбщегоНазначения.МенеджерОбъектаПоИмени", КатегорияОшибки.ОшибкаКонфигурации); + Если ТребуетсяМодульМенеджера И Не ЕстьМодульМенеджера Тогда + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Неверное значение ""%1"" (тип %2) параметра %3 в %4. У объектов ""%5"" нет модулей менеджера.'"), + Имя, ТипЗнч(Имя), ИмяПараметра, ИмяВызывающейПроцедуры, ЧастиИмени[Индекс]); + ВызватьИсключение(ТекстОшибки, КатегорияОшибки.ОшибкаКонфигурации, КодОшибки); + КонецЕсли; + + ИмяОбъекта = ЧастиИмени[Индекс + 1]; + + Попытка + Возврат Менеджер[ИмяОбъекта]; + Исключение + Если КоллекцияМетаданных.Найти(ИмяОбъекта) = Неопределено Тогда + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Неверное значение ""%1"" (тип %2) параметра %3 в %4. Не существует объект ""%5"".'"), + Имя, ТипЗнч(Имя), ИмяПараметра, ИмяВызывающейПроцедуры, ИмяОбъекта); + ВызватьИсключение(ТекстОшибки, КатегорияОшибки.ОшибкаКонфигурации, КодОшибки); + КонецЕсли; + ВызватьИсключение; + КонецПопытки; КонецФункции +// АПК:134-выкл - Количество параметров более 7 для компактного описания и производительности (0-2 вызовов за раз). + +// Для функции МенеджерОбъектаПоИмени. +Процедура УстановитьМенеджерВложенногоОбъекта(ИмяКоллекции, ИмяВидаОбъекта, ЕстьМодуль, + Индекс, Менеджер, ЕстьМодульМенеджера, КоллекцияМетаданных, Имя, ЧастиИмени, + НайденоПоКоллекциям, ИмяВызывающейПроцедуры, ИмяПараметра, КодОшибки) + + ПерваяЧастьВложенногоИмени = ЧастиИмени[Индекс + 2]; + + Если ВРег(ПерваяЧастьВложенногоИмени) <> ИмяВидаОбъекта + И ВРег(ПерваяЧастьВложенногоИмени) <> ИмяКоллекции Тогда + Возврат; + КонецЕсли; + + Если ВРег(ПерваяЧастьВложенногоИмени) = ИмяВидаОбъекта И НайденоПоКоллекциям Тогда + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Неверное значение ""%1"" (тип %2) параметра %3 в %4. Указано ""%5"" - часть имени объекта метаданных, а ожидается часть имени менеджера объекта.'"), + Имя, ТипЗнч(Имя), ИмяПараметра, ИмяВызывающейПроцедуры, ПерваяЧастьВложенногоИмени); + ВызватьИсключение(ТекстОшибки, КатегорияОшибки.ОшибкаКонфигурации, КодОшибки); + + ИначеЕсли ВРег(ПерваяЧастьВложенногоИмени) = ИмяКоллекции И Не НайденоПоКоллекциям Тогда + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Неверное значение ""%1"" (тип %2) параметра %3 в %4. Указано ""%5"" - часть имени менеджера объекта, а ожидается часть имени объекта метаданных.'"), + Имя, ТипЗнч(Имя), ИмяПараметра, ИмяВызывающейПроцедуры, ПерваяЧастьВложенногоИмени); + ВызватьИсключение(ТекстОшибки, КатегорияОшибки.ОшибкаКонфигурации, КодОшибки); + КонецЕсли; + + ИмяОбъекта = ЧастиИмени[Индекс + 1]; + + Попытка + Менеджер = Менеджер[ИмяОбъекта][ИмяКоллекции]; + Исключение + Если КоллекцияМетаданных.Найти(ИмяОбъекта) = Неопределено Тогда + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Неверное значение ""%1"" (тип %2) параметра %3 в %4. Не существует объект ""%5"".'"), + Имя, ТипЗнч(Имя), ИмяПараметра, ИмяВызывающейПроцедуры, ИмяОбъекта); + ВызватьИсключение(ТекстОшибки, КатегорияОшибки.ОшибкаКонфигурации, КодОшибки); + КонецЕсли; + ВызватьИсключение; + КонецПопытки; + + ЕстьМодульМенеджера = ЕстьМодуль; + КоллекцияМетаданных = КоллекцияМетаданных[ИмяОбъекта][ИмяКоллекции]; + Индекс = Индекс + 2; + +КонецПроцедуры + +// АПК:134-вкл + #КонецОбласти #Область ВнешниеКомпоненты diff --git a/Конфигурация/CommonModules/ОбщегоНазначенияБЭД/Ext/Module.bsl b/Конфигурация/CommonModules/ОбщегоНазначенияБЭД/Ext/Module.bsl index 8f46afebd..c078655ed 100644 --- a/Конфигурация/CommonModules/ОбщегоНазначенияБЭД/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ОбщегоНазначенияБЭД/Ext/Module.bsl @@ -1620,6 +1620,27 @@ КонецПроцедуры +// Получает данные внутри структуры по пути +// +// Параметры: +// Данные - Структура - Данные, в контексте которых вычисляются данные по пути +// Путь - Строка - Путь к данным через "." +// +// Возвращаемое значение: +// Неопределено, Произвольный - Полученные данные +Функция ЗначениеПоПути(Знач Данные, Знач Путь) Экспорт + + ЧастиПути = СтрРазделить(Путь, "."); + Контекст = Данные; + + Для Каждого ЧастьПути Из ЧастиПути Цикл + Контекст = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Контекст, ЧастьПути); + КонецЦикла; + + Возврат Контекст; + +КонецФункции + #КонецОбласти #Область Организации diff --git a/Конфигурация/CommonModules/ОбщегоНазначенияБЭДСлужебныйКлиент/Ext/Module.bsl b/Конфигурация/CommonModules/ОбщегоНазначенияБЭДСлужебныйКлиент/Ext/Module.bsl index 7f4fdfc1a..98e725ebd 100644 --- a/Конфигурация/CommonModules/ОбщегоНазначенияБЭДСлужебныйКлиент/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ОбщегоНазначенияБЭДСлужебныйКлиент/Ext/Module.bsl @@ -219,13 +219,8 @@ ДокументыМассив = ДополнительныеПараметры.ДокументыМассив; ОбработкаПродолжения = ДополнительныеПараметры.ОбработкаПродолжения; - - Если Результат = КодВозвратаДиалога.Пропустить И ЗначениеЗаполнено(ДокументыМассив) Тогда - ВыполнитьОбработкуОповещения(ОбработкаПродолжения, ДокументыМассив); - Иначе - ВыполнитьОбработкуОповещения(ОбработкаПродолжения); - КонецЕсли; - + ВыполнитьОбработкуОповещения(ОбработкаПродолжения, ДокументыМассив); + КонецПроцедуры #КонецОбласти diff --git a/Конфигурация/CommonModules/ОбщегоНазначенияИС/Ext/Module.bsl b/Конфигурация/CommonModules/ОбщегоНазначенияИС/Ext/Module.bsl index d88c55f6f..3a09d1493 100644 --- a/Конфигурация/CommonModules/ОбщегоНазначенияИС/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ОбщегоНазначенияИС/Ext/Module.bsl @@ -6,7 +6,7 @@ // Строка - Версия библиотеки Функция ВерсияБиблиотеки() Экспорт - Возврат "3.0.8.4"; + Возврат "3.0.8.7"; КонецФункции @@ -774,18 +774,15 @@ // Функция СтрокаВДату(Значение) Экспорт - КешРезультатовФункции = Неопределено; - Результат = ОбщегоНазначенияИСКлиентСервер.ПрочитатьКеш( - ОбщегоНазначенияИСКлиентСерверПовтИсп.ГлобальныйКеш(), "Функция.СтрокаВДату", Значение, КешРезультатовФункции); - Если Результат <> Неопределено Тогда - Возврат Результат; + РезультатЧтенияКеша = ОбщегоНазначенияИСКлиентСервер.ПрочитатьКеш("Функция.СтрокаВДату", Значение); + Если РезультатЧтенияКеша <> Неопределено + И РезультатЧтенияКеша.Результат <> Неопределено Тогда + Возврат РезультатЧтенияКеша.Результат; КонецЕсли; Результат = СтроковыеФункцииКлиентСервер.СтрокаВДату(Значение); - Если КешРезультатовФункции <> Неопределено Тогда - КешРезультатовФункции.Вставить(Значение, Результат); - КонецЕсли; + ОбщегоНазначенияИСКлиентСервер.ЗаписатьВКеш(РезультатЧтенияКеша, Результат); Возврат Результат; @@ -3146,7 +3143,9 @@ Если ФоновоеЗадание = Неопределено Тогда Параметры = Новый Массив; Параметры.Добавить(Секунд); - ФоновоеЗадание = ФоновыеЗадания.Выполнить("ОбщегоНазначенияИС.Пауза", Параметры); + ПараметрыФоновогоЗадания = ОбщегоНазначения.НовыеПараметрыВыполненияФоновогоЗадания(); + ПараметрыФоновогоЗадания.Параметры = Параметры; + ФоновоеЗадание = ОбщегоНазначения.ВыполнитьФоновоеЗадание("ОбщегоНазначенияИС.Пауза"); КонецЕсли; ФоновоеЗадание.ОжидатьЗавершенияВыполнения(Секунд); diff --git a/Конфигурация/CommonModules/ОбщегоНазначенияИСКлиентСервер/Ext/Module.bsl b/Конфигурация/CommonModules/ОбщегоНазначенияИСКлиентСервер/Ext/Module.bsl index e5fb36e3b..7a1e832f4 100644 --- a/Конфигурация/CommonModules/ОбщегоНазначенияИСКлиентСервер/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ОбщегоНазначенияИСКлиентСервер/Ext/Module.bsl @@ -373,33 +373,38 @@ // Возвращает значение из двухуровневого кэша или Неопределено, если значение отсутствует. // // Параметры: -// ГлобальныйКеш - Соответствие из Произвольный - хранилище локальных кэшей -// Имя - Строка - ключ для получения локального кэша +// Ключ - Строка - ключ для получения локального кэша // Значение - Произвольный - ключ для поиска значения в локальном кэше -// ЛокальныйКеш - Соответствие из Произвольный - выходной параметр, содержит локальный кэш для указанного имени // // Возвращаемое значение: // Произвольный - найденное значение из кэша // - Неопределено - если значение или глобальный кэш отсутствуют -Функция ПрочитатьКеш(ГлобальныйКеш, Имя, Значение, ЛокальныйКеш) Экспорт +Функция ПрочитатьКеш(Ключ, Знач Значение) Экспорт + ГлобальныйКеш = ОбщегоНазначенияИСКлиентСерверПовтИсп.ГлобальныйКеш(); Если ГлобальныйКеш <> Неопределено Тогда Если ТипЗнч(Значение) = Тип("Массив") Или ТипЗнч(Значение) = Тип("ФиксированныйМассив") Тогда - Возврат Неопределено; + КоличествоЗначений = Значение.Количество(); + Если КоличествоЗначений = 1 Тогда + Значение = Значение[0]; + ИначеЕсли КоличествоЗначений = 0 Тогда + Значение = Неопределено; + Иначе + Возврат Неопределено; + КонецЕсли; КонецЕсли; - - ЛокальныйКеш = ГлобальныйКеш[Имя]; + + ЛокальныйКеш = ГлобальныйКеш[Ключ]; Если ЛокальныйКеш = Неопределено Тогда ЛокальныйКеш = Новый Соответствие; - ГлобальныйКеш.Вставить(Имя, ЛокальныйКеш); + ГлобальныйКеш.Вставить(Ключ, ЛокальныйКеш); КонецЕсли; - Результат = ЛокальныйКеш[Значение]; - Если Результат <> Неопределено Тогда - Возврат Результат; - КонецЕсли; + Возврат Новый Структура( + "ЛокальныйКеш, Значение, Результат", + ЛокальныйКеш, Значение, ЛокальныйКеш[Значение]); КонецЕсли; @@ -407,6 +412,65 @@ КонецФункции +// Возвращает значение из двухуровневого кэша или Неопределено, если значение отсутствует. +// +// Параметры: +// Ключ - Строка - ключ для получения локального кэша +// Значение - Произвольный - ключ для поиска значения в локальном кэше +// +// Возвращаемое значение: +// Произвольный - найденное значение из кэша +// - Неопределено - если значение или глобальный кэш отсутствуют +Функция ПрочитатьНовыйКеш(Ключ, Знач Значение) Экспорт + + ГлобальныйКеш = ОбщегоНазначенияИСКлиентСерверПовтИсп.ГлобальныйКеш(); + Если ГлобальныйКеш <> Неопределено Тогда + + Если ТипЗнч(Значение) = Тип("Массив") + Или ТипЗнч(Значение) = Тип("ФиксированныйМассив") Тогда + КоличествоЗначений = Значение.Количество(); + Если КоличествоЗначений = 1 Тогда + Значение = Значение[0]; + ИначеЕсли КоличествоЗначений = 0 Тогда + Значение = Неопределено; + Иначе + Возврат Неопределено; + КонецЕсли; + КонецЕсли; + + ЛокальныйКеш = ГлобальныйКеш[Ключ]; + Если ЛокальныйКеш = Неопределено Тогда + ЛокальныйКеш = Новый Соответствие; + ГлобальныйКеш.Вставить(Ключ, ЛокальныйКеш); + КонецЕсли; + + Возврат Новый Структура( + "ЛокальныйКеш, Значение, Результат", + ЛокальныйКеш, Значение, ЛокальныйКеш[Значение]); + + КонецЕсли; + + Возврат Неопределено; + +КонецФункции + +// Записывает значение в кеш по ключу, полученному из результата чтения кеша. +// +// Параметры: +// РезультатЧтенияКеша - Структура - результат чтения кеша, содержащий ключ и локальный кеш: +// * Значение - Произвольный - ключ записи в кеше +// * ЛокальныйКеш - Соответствие - локальное хранилище кеша +// Результат - Произвольный - значение, помещаемое в кеш +Процедура ЗаписатьВКеш(РезультатЧтенияКеша, Результат) Экспорт + + Если РезультатЧтенияКеша <> Неопределено + И РезультатЧтенияКеша.ЛокальныйКеш <> Неопределено Тогда + РезультатЧтенияКеша.ЛокальныйКеш.Вставить( + РезультатЧтенияКеша.Значение, Результат); + КонецЕсли; + +КонецПроцедуры + #Область РаботаСДатами Функция ДатаИзСтрокиUNIX(Знач Значение, Делитель = 1000, ПриводитьКМестномуВремени = Истина) Экспорт diff --git a/Конфигурация/CommonModules/ОбщегоНазначенияИСМПКлиентСерверПовтИсп/Ext/Module.bsl b/Конфигурация/CommonModules/ОбщегоНазначенияИСМПКлиентСерверПовтИсп/Ext/Module.bsl index 413ab0118..92890bdf8 100644 --- a/Конфигурация/CommonModules/ОбщегоНазначенияИСМПКлиентСерверПовтИсп/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ОбщегоНазначенияИСМПКлиентСерверПовтИсп/Ext/Module.bsl @@ -201,20 +201,6 @@ КонецФункции -// Проверяет, является ли вид операции розничной продажей. -// -// Параметры: -// ВидОперации - ПеречислениеСсылка.ВидыОперацийИСМП -// -// Возвращаемое значение: -// Булево - Истина, если это вид операции розничная продажа -Функция ЭтоВидОперацииРозничнаяПродажа(ВидОперации) Экспорт - - ВидОперацииРозница = ВидОперацииРозничнаяПродажа(); - Возврат (ВидОперации = ВидОперацииРозница); - -КонецФункции - // Функция возвращает вид операции Розничный возврат. // // Возвращаемое значение: @@ -241,17 +227,17 @@ // ПеречислениеСсылка.ВидыОперацийИСМП Функция ВидОперацииЗакупка() Экспорт - Возврат ПредопределенноеЗначение("Перечисление.ВидыОперацийИСМП.Приемка"); + Возврат ПредопределенноеЗначение("Перечисление.ВидыОперацийИСМП.ПриемкаПродажа"); КонецФункции -// Проверяет, является ли вид операции оптовой продажей. +// Проверяет, является ли вид операции оптовой закупкой. // // Параметры: // ВидОперации - ПеречислениеСсылка.ВидыОперацийИСМП // // Возвращаемое значение: -// Булево - Истина, если это вид операции оптовая продажа +// Булево - Истина, если это вид операции оптовая закупка Функция ЭтоВидОперацииОптоваяПродажа(ВидОперации) Экспорт ВидОперацииОпт = ВидОперацииОптоваяПродажа(); @@ -273,6 +259,48 @@ КонецФункции +// Проверяет, является ли вид операции розничной продажей. +// +// Параметры: +// ВидОперации - ПеречислениеСсылка.ВидыОперацийИСМП +// +// Возвращаемое значение: +// Булево - Истина, если это вид операции розничная продажа +Функция ЭтоВидОперацииРозничнаяПродажа(ВидОперации) Экспорт + + ВидОперацииРозница = ВидОперацииРозничнаяПродажа(); + Возврат (ВидОперации = ВидОперацииРозница); + +КонецФункции + +// Проверяет, является ли вид операции оптовым возвратом. +// +// Параметры: +// ВидОперации - ПеречислениеСсылка.ВидыОперацийИСМП +// +// Возвращаемое значение: +// Булево - Истина, если это вид операции оптовый возврат +Функция ЭтоВидОперацииОптовыйВозврат(ВидОперации) Экспорт + + ВидОперацииВозврат = ВидОперацииОптовыйВозврат(); + Возврат (ВидОперации = ВидОперацииВозврат); + +КонецФункции + +// Проверяет, является ли вид операции розничным возвратом. +// +// Параметры: +// ВидОперации - ПеречислениеСсылка.ВидыОперацийИСМП +// +// Возвращаемое значение: +// Булево - Истина, если это вид операции розничный возврат +Функция ЭтоВидОперацииРозничныйВозврат(ВидОперации) Экспорт + + ВидОперацииВозврат = ВидОперацииРозничныйВозврат(); + Возврат (ВидОперации = ВидОперацииВозврат); + +КонецФункции + // Функция возвращает признак необходимости получения КМ в зависимости от вида операции по уже рассчитанным датам // Возможность оборота регулируется настройками дат в рабочем месте Интеграция ИС МП (обувь, одежда, табак...) // и текущим законодательством. @@ -327,8 +355,7 @@ ЗаполнитьЗначенияСвойств(ДатыКонтроля, СтруктураДатКонтроля); ДействуетКонтроль = (ДатыКонтроля.ДатаЗапретПродажиНемаркированныхОстатков > НаДату) - Или ВидОперации = ВидОперацииРозничныйВозврат() - Или ВидОперации = ВидОперацииОптовыйВозврат(); + Или ВидОперации = ВидОперацииРозничныйВозврат(); Возврат ДействуетКонтроль; @@ -366,8 +393,10 @@ // Возвращаемое значение: // Булево - Вид операции поддерживает проверку владельца по дате производства Функция ВидОперацииПоддерживаетПроверкуВладельцаПоДатеПроизводства(ВидОперации) Экспорт - Возврат ОбщегоНазначенияИСМПКлиентСерверПовтИсп.ЭтоВидОперацииОптоваяПродажа(ВидОперации) - Или ОбщегоНазначенияИСМПКлиентСерверПовтИсп.ЭтоВидОперацииРозничнаяПродажа(ВидОперации); + Возврат ЭтоВидОперацииОптоваяПродажа(ВидОперации) + Или ЭтоВидОперацииРозничнаяПродажа(ВидОперации) + Или ЭтоВидОперацииОптовыйВозврат(ВидОперации) + Или ЭтоВидОперацииРозничныйВозврат(ВидОперации); КонецФункции #Область РазрешительныйРежимРозничнойПродажи @@ -396,13 +425,11 @@ ПродукцияПодлежитПроверке = Ложь; - Если Не ТребуетсяПроверкаСредствамиККТ Тогда - Возврат ПродукцияПодлежитПроверке; - КонецЕсли; - Если ВидОперации = Неопределено Тогда ВидОперации = ПредопределенноеЗначение("Перечисление.ВидыОперацийИСМП.ВыводИзОборотаРозничнаяПродажа"); - ИначеЕсли Не ВидОперации = ПредопределенноеЗначение("Перечисление.ВидыОперацийИСМП.ВыводИзОборотаРозничнаяПродажа") Тогда + КонецЕсли; + + Если Не ЭтоРозничнаяПродажаСИспользованиемПроверкиМарокНаКассе(ВидОперации, ТребуетсяПроверкаСредствамиККТ) Тогда Возврат ПродукцияПодлежитПроверке; КонецЕсли; @@ -420,6 +447,28 @@ КонецФункции +// Проверка, является ли это розничной продажей с использованием проверки марок на кассе - процесс, подлежащей проверке УР и РР. +// +// Параметры: +// ВидОперации - ПеречислениеСсылка.ВидыОперацийИСМП - Вид операции для проверки +// ТребуетсяПроверкаСредствамиККТ - Булево - проверка на версию ФФД 1.2 +// +// Возвращаемое значение: +// Булево - Истина, если это процесс, требующий проверки УР и РР +Функция ЭтоРозничнаяПродажаСИспользованиемПроверкиМарокНаКассе(ВидОперации, ТребуетсяПроверкаСредствамиККТ) Экспорт + + Если Не ТребуетсяПроверкаСредствамиККТ Тогда + Возврат Ложь; + КонецЕсли; + + Если Не ВидОперации = ПредопределенноеЗначение("Перечисление.ВидыОперацийИСМП.ВыводИзОборотаРозничнаяПродажа") Тогда + Возврат Ложь; + КонецЕсли; + + Возврат Истина; + +КонецФункции + // Проверка, подлежит ли продукция обязательной оффлайн-проверке перед розничной продажей. // // Параметры: @@ -565,6 +614,16 @@ КонецФункции +// Возвращает код ответа, зафиксированный ГИС МТ как код ответа, означающий действие поставарийного режима +// +// Возвращаемое значение: +// Число - Код ответа поставарийного режима +Функция ПоставарийныйРежимКодОтветаСервисаГИСМТ() Экспорт + + Возврат 204; + +КонецФункции + // Возвращает признак, нужно ли писать данные успешных операций сканирования в РС ОперацииПроверкиКМ при настройке // Проверка кодов маркировки средствами ККТ = Перед пробитием чека. // diff --git a/Конфигурация/CommonModules/ОбщегоНазначенияКлиент/Ext/Module.bsl b/Конфигурация/CommonModules/ОбщегоНазначенияКлиент/Ext/Module.bsl index 793d697c5..cef5e6395 100644 --- a/Конфигурация/CommonModules/ОбщегоНазначенияКлиент/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ОбщегоНазначенияКлиент/Ext/Module.bsl @@ -217,16 +217,25 @@ // Функция ОбщийМодуль(Имя) Экспорт - Модуль = Вычислить(Имя); + Свойства = Новый Структура; + Попытка + Свойства.Вставить(Имя); + Исключение + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Некорректное имя общего модуля ""%1"".'"), Имя); + ВызватьИсключение(ТекстОшибки, КатегорияОшибки.ОшибкаКонфигурации); + КонецПопытки; + + Модуль = Вычислить(Имя); // Не нарушает безопасность информации, так как вычисляется только имя переменной. #Если Не ВебКлиент Тогда // В веб-клиенте не проверяется, // т.к. при обращении к модулям с вызовом сервера типа такого модуля в веб-клиенте не существует. Если ТипЗнч(Модуль) <> Тип("ОбщийМодуль") Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Общий модуль ""%1"" не существует.'"), - Имя); + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Общий модуль ""%1"" не существует.'"), Имя); + ВызватьИсключение(ТекстОшибки, КатегорияОшибки.ОшибкаКонфигурации); КонецЕсли; #КонецЕсли @@ -1303,7 +1312,17 @@ КонецЕсли; Если Форма.Элементы.Найти(ИмяГруппыПоказатьВсе) <> Неопределено Тогда - Форма.Элементы[ИмяГруппыПоказатьВсе].Видимость = Ложь; + ГруппаПоказатьВсе = Форма.Элементы[ИмяГруппыПоказатьВсе]; + ГруппаПоказатьВсе.Видимость = Ложь; + + Если Не ОбщегоНазначенияКлиентСервер.ЭтоВариантИнтерфейса85() Тогда + РодительПоказатьВсе = ГруппаПоказатьВсе.Родитель; + ОбщаяВидимость = Ложь; + Для Каждого ГруппаПоказатьВсе Из РодительПоказатьВсе.ПодчиненныеЭлементы Цикл + ОбщаяВидимость = ОбщаяВидимость Или ГруппаПоказатьВсе.Видимость; + КонецЦикла; + РодительПоказатьВсе.Видимость = ОбщаяВидимость; + КонецЕсли; КонецЕсли; Форма.БФ_ВсегоВажныхСообщений = Форма.БФ_ВсегоВажныхСообщений - 1; diff --git a/Конфигурация/CommonModules/ОбщегоНазначенияРМК/Ext/Module.bsl b/Конфигурация/CommonModules/ОбщегоНазначенияРМК/Ext/Module.bsl index e864d79cf..92ef1b34a 100644 --- a/Конфигурация/CommonModules/ОбщегоНазначенияРМК/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ОбщегоНазначенияРМК/Ext/Module.bsl @@ -1680,7 +1680,7 @@ // Функция ВерсияБиблиотеки() Экспорт - ВерсияБиблиотекиРМК = "1.1.4.69"; + ВерсияБиблиотекиРМК = "1.1.4.85"; Возврат ВерсияБиблиотекиРМК; КонецФункции diff --git a/Конфигурация/CommonModules/ОбщегоНазначенияРМКВызовСервера/Ext/Module.bsl b/Конфигурация/CommonModules/ОбщегоНазначенияРМКВызовСервера/Ext/Module.bsl index f622861f3..5c829447d 100644 --- a/Конфигурация/CommonModules/ОбщегоНазначенияРМКВызовСервера/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ОбщегоНазначенияРМКВызовСервера/Ext/Module.bsl @@ -127,6 +127,7 @@ Реквизиты.Вставить("НомерЧекаЭТ"); Реквизиты.Вставить("СсылочныйНомер"); Реквизиты.Вставить("ЭквайринговыйТерминал"); + Реквизиты.Вставить("ИдентификаторQRОперации"); ОбщегоНазначенияРМКПереопределяемый.ЗаполнитьРеквизитыЭквайринговойОперации(ЧекПродажи, Реквизиты); diff --git a/Конфигурация/CommonModules/ОбщегоНазначенияРМКУНФ/Ext/Module.bsl b/Конфигурация/CommonModules/ОбщегоНазначенияРМКУНФ/Ext/Module.bsl index 6bd986aab..04ce547ca 100644 --- a/Конфигурация/CommonModules/ОбщегоНазначенияРМКУНФ/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ОбщегоНазначенияРМКУНФ/Ext/Module.bsl @@ -8275,6 +8275,8 @@ // Процедура ЗаполнитьРеквизитыЭквайринговойОперации(ЧекПродажи, Реквизиты) Экспорт + Реквизиты.Вставить("КодСпособаОплатыЭТ"); + Для Каждого СтрокаОплатыПродажи Из ЧекПродажи.БезналичнаяОплата Цикл Если СтрокаОплатыПродажи.ВидОплаты = Перечисления.ВидыБезналичныхОплат.БанковскаяКарта Тогда @@ -10192,6 +10194,8 @@ |ГДЕ | ЧекККМОплата.ЭквайринговыйТерминал = &ЭквайринговыйТерминал | И ЧекККМОплата.Ссылка = &ЧекККМ + | И НЕ ЧекККМОплата.КодСпособаОплатыЭТ = 1 + | И НЕ ЧекККМОплата.КодСпособаОплатыЭТ = 3 |; | |//////////////////////////////////////////////////////////////////////////////// @@ -15853,7 +15857,12 @@ ПарольДляОтправкиSMS = НастройкиОтправкиSMS.Пароль; СпособАвторизации = НастройкиОтправкиSMS.СпособАвторизации; - ДоступностьГруппыСМС = ЗначениеЗаполнено(ЛогинДляОтправкиSMS) И ЗначениеЗаполнено(ПарольДляОтправкиSMS); + Если СпособАвторизации = "ПоИдентификатору" + Или СпособАвторизации = "ПоКлючу" Тогда + ДоступностьГруппыСМС = ЗначениеЗаполнено(ПарольДляОтправкиSMS); + Иначе + ДоступностьГруппыСМС = ЗначениеЗаполнено(ЛогинДляОтправкиSMS) И ЗначениеЗаполнено(ПарольДляОтправкиSMS); + КонецЕсли; КонецПроцедуры diff --git a/Конфигурация/CommonModules/ОбщегоНазначенияСерверЛояльностиКлиентСервер/Ext/Module.bsl b/Конфигурация/CommonModules/ОбщегоНазначенияСерверЛояльностиКлиентСервер/Ext/Module.bsl index e543ba48d..8c2867fbe 100644 --- a/Конфигурация/CommonModules/ОбщегоНазначенияСерверЛояльностиКлиентСервер/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ОбщегоНазначенияСерверЛояльностиКлиентСервер/Ext/Module.bsl @@ -16,7 +16,7 @@ // Функция ВерсияБиблиотеки() Экспорт - ВерсияБСЛ = "3.0.14.123"; + ВерсияБСЛ = "3.0.14.143"; Возврат ВерсияБСЛ; КонецФункции diff --git a/Конфигурация/CommonModules/ОнлайнЗаказы/Ext/Module.bsl b/Конфигурация/CommonModules/ОнлайнЗаказы/Ext/Module.bsl index 927c81d85..6449da2d3 100644 --- a/Конфигурация/CommonModules/ОнлайнЗаказы/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ОнлайнЗаказы/Ext/Module.bsl @@ -562,21 +562,4 @@ КонецФункции -#КонецОбласти - -#Область СлужебныйПрограммныйИнтерфейс - -#Область ИнтеграцияСБиблиотекойСтандартныхПодсистем - -// См. СтандартныеПодсистемыСервер.ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод -// -Процедура ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод(Методы) Экспорт - - Методы.Вставить("УстановитьСтатусЗаказа", Истина); - Методы.Вставить("ЗаписатьНастройкуПодключения", Истина); - -КонецПроцедуры - -#КонецОбласти - #КонецОбласти \ No newline at end of file diff --git a/Конфигурация/CommonModules/ОнлайнЗаказыВызовСервера/Ext/Module.bsl b/Конфигурация/CommonModules/ОнлайнЗаказыВызовСервера/Ext/Module.bsl index 8f743149e..dc1f48c55 100644 --- a/Конфигурация/CommonModules/ОнлайнЗаказыВызовСервера/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ОнлайнЗаказыВызовСервера/Ext/Module.bsl @@ -94,11 +94,11 @@ КонецФункции -// См. ОнлайнЗаказыСлужебный.УстановитьИспользованиеШаблоновСообщенийПроверкаПодсистем. +// См. ОнлайнЗаказыСлужебный.УстановитьИспользованиеШаблоновСообщений. // -Процедура УстановитьИспользованиеШаблоновСообщенийПроверкаПодсистем() Экспорт +Процедура УстановитьИспользованиеШаблоновСообщений() Экспорт - ОнлайнЗаказыСлужебный.УстановитьИспользованиеШаблоновСообщенийПроверкаПодсистем(); + ОнлайнЗаказыСлужебный.УстановитьИспользованиеШаблоновСообщений(); КонецПроцедуры diff --git a/Конфигурация/CommonModules/ОнлайнЗаказыКлиент/Ext/Module.bsl b/Конфигурация/CommonModules/ОнлайнЗаказыКлиент/Ext/Module.bsl index a9ecfa0ae..243858ffc 100644 --- a/Конфигурация/CommonModules/ОнлайнЗаказыКлиент/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ОнлайнЗаказыКлиент/Ext/Module.bsl @@ -786,7 +786,7 @@ Возврат; ИначеЕсли Результат = КодВозвратаДиалога.Да Тогда - ОнлайнЗаказыВызовСервера.УстановитьИспользованиеШаблоновСообщенийПроверкаПодсистем(); + ОнлайнЗаказыВызовСервера.УстановитьИспользованиеШаблоновСообщений(); СозданныеШаблоны = ОнлайнЗаказыВызовСервера.СоздатьПредопределенныеШаблоныСообщенийПроверкаПодсистем(); diff --git a/Конфигурация/CommonModules/ОнлайнЗаказыСлужебный/Ext/Module.bsl b/Конфигурация/CommonModules/ОнлайнЗаказыСлужебный/Ext/Module.bsl index 7bbe29ddf..930fe32b7 100644 --- a/Конфигурация/CommonModules/ОнлайнЗаказыСлужебный/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ОнлайнЗаказыСлужебный/Ext/Module.bsl @@ -78,6 +78,10 @@ Методы.Вставить("СтатусЗаказа", Истина); Методы.Вставить("ИнициализироватьОбновлениеНастройки", Истина); + Если ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.БазоваяФункциональность") Тогда + Методы.Вставить("ЗагрузкаСтатусовОнлайнЗаказов"); + КонецЕсли; + КонецПроцедуры #КонецОбласти @@ -292,11 +296,7 @@ Результат = Новый Структура(); Результат.Вставить("ОнлайнЗаказыДоступны", ОнлайнЗаказы.ОнлайнЗаказыДоступны()); Результат.Вставить("НастройкаОнлайнЗаказовДоступна", ОнлайнЗаказы.НастройкаОнлайнЗаказовДоступна()); - Результат.Вставить("НастройкиСрокаЖизни", Неопределено); - - Если Результат.ОнлайнЗаказыДоступны Тогда - Результат.НастройкиСрокаЖизни = НастройкиСрокаЖизни(); - КонецЕсли; + Результат.Вставить("НастройкиСрокаЖизни", НастройкиСрокаЖизни()); Возврат Результат; @@ -1568,6 +1568,10 @@ НастройкиСрокаЖизни = НовыйНастройкиСрокаЖизниСлужебный(); + Если Не ОнлайнЗаказы.НастройкаОнлайнЗаказовДоступна() Тогда + Возврат НастройкиСрокаЖизни; + КонецЕсли; + НастройкиОнлайнЗаказов = НастройкиОнлайнЗаказов(); ЗаполнитьЗначенияСвойств(НастройкиСрокаЖизни, НастройкиОнлайнЗаказов.СрокЖизни); @@ -1758,7 +1762,17 @@ #Область НастройкаПодключения -//См. Справочники.НастройкиПодключенияКОнлайнЗаказам.НоваяНастройкаПодключения +// Создает новую настройку подключения к онлайн-заказам. +// +// Параметры: +// Организация - ОпределяемыйТип.Организация - Организация настройки. +// +// Возвращаемое значение: +// Структура - результат создания торговой точки: +// * НастройкаПодключения - СправочникСсылка.НастройкиПодключенияКОнлайнЗаказам - новая настройка; +// - Неопределено - в случае возникновения ошибок; +// * ОшибкаОтправкиВСервис - Булево - признак ошибки отправки в сервис; +// * СообщениеОбОшибке - Строка, ФорматированнаяСтрока - сообщение об ошибке для пользователя. // Функция НоваяНастройкаОрганизации(Организация) Экспорт @@ -1955,7 +1969,17 @@ КонецФункции -//См. Справочники.НастройкиПодключенияКОнлайнЗаказам.ВключитьНастройку +// Выполняет включение использования настройки онлайн-заказов. +// +// Параметры: +// НастройкаПодключения - СправочникСсылка.НастройкиПодключенияКОнлайнЗаказам - +// настройка для которой выполняется операция включения. +// +// Возвращаемое значение: +// Структура - результат создания торговой точки: +// * Ошибка - Булево - признак ошибки сохранения; +// * ОшибкаОтправкиВСервис - Булево - признак ошибки отправки в сервис; +// * СообщениеОбОшибке - Строка, ФорматированнаяСтрока - сообщение об ошибке для пользователя. // Функция ВключитьНастройкуПодключения(НастройкаПодключения) Экспорт @@ -4037,6 +4061,9 @@ СрокЖизни.Вставить("ЗначениеПоУмолчанию", 0); Результат.Вставить("СрокЖизни", СрокЖизни); + Результат.Вставить( + "ИспользоватьПодсистемуВзаимодействия", + ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Взаимодействия")); Возврат Результат; @@ -7279,12 +7306,12 @@ // Включает функциональные опции необходимые для работы с шаблонами сообщений. // -Процедура УстановитьИспользованиеШаблоновСообщенийПроверкаПодсистем() Экспорт +Процедура УстановитьИспользованиеШаблоновСообщений() Экспорт - ИнтернетПоддержкаПользователей.УстановитьИспользованиеSMS(); - ИнтернетПоддержкаПользователей.УстановитьИспользованиеЭлектроннойПочты(); - ИнтернетПоддержкаПользователей.УстановитьОтправкуПисемВФорматеHTML(); - ИнтернетПоддержкаПользователей.УстановитьИспользованиеШаблоновСообщений(); + НастройкиОнлайнЗаказов = НастройкиОнлайнЗаказов(); + + ИнтернетПоддержкаПользователей.УстановитьИспользованиеОтправкиШаблоновСообщений( + НастройкиОнлайнЗаказов.ИспользоватьПодсистемуВзаимодействия); КонецПроцедуры diff --git a/Конфигурация/CommonModules/ОнлайнОплатыПереопределяемый/Ext/Module.bsl b/Конфигурация/CommonModules/ОнлайнОплатыПереопределяемый/Ext/Module.bsl index 8a37cfd4c..a21fe841c 100644 --- a/Конфигурация/CommonModules/ОнлайнОплатыПереопределяемый/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ОнлайнОплатыПереопределяемый/Ext/Module.bsl @@ -23,6 +23,21 @@ #Область ПрограммныйИнтерфейс +#Область НастройкиПодсистемы + +// Определяет общие настройки онлайн оплат. +// +// Параметры: +// НастройкиОнлайнОплат - Структура - содержит описание настроек онлайн оплат. +// * ИспользоватьПодсистемуВзаимодействия - Булево - Признак использования подсистемы Взаимодействия +// для целей отправки шаблонов сообщений. Истина по умолчанию, Ложь в случае если подситема не встроена. +// +Процедура ПриНастройкеОнлайнОплат(НастройкиОнлайнОплат) Экспорт + +КонецПроцедуры + +#КонецОбласти + #Область РаботаСПодсистемой // В процедуре задается описание дополнительных реквизитов настройки онлайн оплаты, diff --git a/Конфигурация/CommonModules/ОнлайнОплатыСлужебный/Ext/Module.bsl b/Конфигурация/CommonModules/ОнлайнОплатыСлужебный/Ext/Module.bsl index d7c6b6246..6e4c9c0a6 100644 --- a/Конфигурация/CommonModules/ОнлайнОплатыСлужебный/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ОнлайнОплатыСлужебный/Ext/Module.bsl @@ -118,6 +118,10 @@ Методы.Вставить("ПлатежнаяСсылка", Истина); Методы.Вставить("СтатусПодключенияМагазина", Истина); + Если ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.БазоваяФункциональность") Тогда + Методы.Вставить("ПолучениеУведомленийОтОнлайнОплат"); + КонецЕсли; + КонецПроцедуры // См. ОбщегоНазначенияПереопределяемый.ПриНастройкеПроверкиМетодовВызываемыхКакПроизвольныйКод @@ -671,6 +675,35 @@ #Область СлужебныеПроцедурыИФункции +#Область НастройкиОнлайнОплат + +Функция НастройкиОнлайнОплат() + + НастройкиОнлайнОплат = НовыйНастройкиОнлайнОплат(); + + ИнтеграцияПодсистемБИП.ПриНастройкеОнлайнОплат( + НастройкиОнлайнОплат); + + ОнлайнОплатыПереопределяемый.ПриНастройкеОнлайнОплат( + НастройкиОнлайнОплат); + + Возврат НастройкиОнлайнОплат; + +КонецФункции + +Функция НовыйНастройкиОнлайнОплат() + + Результат = Новый Структура; + Результат.Вставить( + "ИспользоватьПодсистемуВзаимодействия", + ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Взаимодействия")); + + Возврат Результат; + +КонецФункции + +#КонецОбласти + #Область АдресаСтендов Функция АдресСтраницыДоступа() Экспорт @@ -856,7 +889,8 @@ ДанныеОснования = ДанныеОснованияПлатежа(ВходящиеПараметры.ОснованиеПлатежа); ДанныеВСервисе = ВходящиеПараметры.ДанныеОснованияПлатежаВСервисе; - Если ВходящиеПараметры.НастройкаОнлайнОплаты.ОтправкаЧековЧерезСервис Тогда + Если Не ЗначениеЗаполнено(ВходящиеПараметры.НастройкаОнлайнОплаты.ИдентификаторВитрины) + И ВходящиеПараметры.НастройкаОнлайнОплаты.ОтправкаЧековЧерезСервис Тогда ДанныеОснования.Номенклатура = ПровестиФорматноЛогическийКонтроль(ДанныеОснования.Номенклатура); КонецЕсли; @@ -5313,21 +5347,12 @@ // Включает функциональные опции необходимые для работы с шаблонами сообщений. // -Процедура УстановитьИспользованиеШаблоновСообщенийПроверкаПодсистем() Экспорт +Процедура УстановитьИспользованиеШаблоновСообщений() Экспорт - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОтправкаSMS") Тогда - ИнтернетПоддержкаПользователей.УстановитьИспользованиеSMS(); - КонецЕсли; + НастройкиОнлайнОплат = НастройкиОнлайнОплат(); - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСПочтовымиСообщениями") Тогда - ИнтернетПоддержкаПользователей.УстановитьИспользованиеЭлектроннойПочты(); - КонецЕсли; - - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Взаимодействия") Тогда - ИнтернетПоддержкаПользователей.УстановитьОтправкуПисемВФорматеHTML(); - КонецЕсли; - - ИнтернетПоддержкаПользователей.УстановитьИспользованиеШаблоновСообщений(); + ИнтернетПоддержкаПользователей.УстановитьИспользованиеОтправкиШаблоновСообщений( + НастройкиОнлайнОплат.ИспользоватьПодсистемуВзаимодействия); КонецПроцедуры diff --git a/Конфигурация/CommonModules/ОнлайнОплатыСлужебныйВызовСервера/Ext/Module.bsl b/Конфигурация/CommonModules/ОнлайнОплатыСлужебныйВызовСервера/Ext/Module.bsl index b343030dd..e0138733e 100644 --- a/Конфигурация/CommonModules/ОнлайнОплатыСлужебныйВызовСервера/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ОнлайнОплатыСлужебныйВызовСервера/Ext/Module.bsl @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2024, ООО 1С-Софт +// Copyright (c) 2026, ООО 1С-Софт // Все права защищены. Эта программа и сопроводительные материалы предоставляются // в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) // Текст лицензии доступен по ссылке: @@ -63,11 +63,11 @@ КонецФункции -// См. ОнлайнОплатыСлужебный.УстановитьИспользованиеШаблоновСообщенийПроверкаПодсистем. +// См. ОнлайнОплатыСлужебный.УстановитьИспользованиеШаблоновСообщений. // -Процедура УстановитьИспользованиеШаблоновСообщенийПроверкаПодсистем() Экспорт +Процедура УстановитьИспользованиеШаблоновСообщений() Экспорт - ОнлайнОплатыСлужебный.УстановитьИспользованиеШаблоновСообщенийПроверкаПодсистем(); + ОнлайнОплатыСлужебный.УстановитьИспользованиеШаблоновСообщений(); КонецПроцедуры diff --git a/Конфигурация/CommonModules/ОнлайнОплатыСлужебныйКлиент/Ext/Module.bsl b/Конфигурация/CommonModules/ОнлайнОплатыСлужебныйКлиент/Ext/Module.bsl index 7d8672071..46d1c9cff 100644 --- a/Конфигурация/CommonModules/ОнлайнОплатыСлужебныйКлиент/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ОнлайнОплатыСлужебныйКлиент/Ext/Module.bsl @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2024, ООО 1С-Софт +// Copyright (c) 2026, ООО 1С-Софт // Все права защищены. Эта программа и сопроводительные материалы предоставляются // в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) // Текст лицензии доступен по ссылке: @@ -137,7 +137,7 @@ Возврат; ИначеЕсли Результат = КодВозвратаДиалога.Да Тогда - ОнлайнОплатыСлужебныйВызовСервера.УстановитьИспользованиеШаблоновСообщенийПроверкаПодсистем(); + ОнлайнОплатыСлужебныйВызовСервера.УстановитьИспользованиеШаблоновСообщений(); МассивСозданныхШаблонов = ОнлайнОплатыСлужебныйВызовСервера.СоздатьПредопределенныеШаблоныСообщенийПроверкаПодсистем(); diff --git a/Конфигурация/CommonModules/ОповещенияОСобытияхЭДО/Ext/Module.bsl b/Конфигурация/CommonModules/ОповещенияОСобытияхЭДО/Ext/Module.bsl index 6302f54c1..cfca1cc20 100644 --- a/Конфигурация/CommonModules/ОповещенияОСобытияхЭДО/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ОповещенияОСобытияхЭДО/Ext/Module.bsl @@ -321,55 +321,25 @@ Если ОбщегоНазначения.РазделениеВключено() И НЕ ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда Возврат - КонецЕсли; - - Логин = ИмяСлужебногоПользователяОповещенийЭДО(); - Пароль = "946135e8-a9a7-405f-a5df-19e734c712c7"; - - ПользовательИзСправочника = Пользователи.НайтиПоИмени(Логин); - - Если ПользовательИзСправочника <> Неопределено Тогда - Возврат; - КонецЕсли; - - Если НЕ ОбщегоНазначения.РазделениеВключено() - И НЕ ПользователиИнформационнойБазы.ПолучитьПользователей().Количество() Тогда - Возврат - КонецЕсли; + КонецЕсли; + + Свойства = Пользователи.НовоеОписаниеПользователяИБ(, Истина); + Свойства.Имя = ИмяСлужебногоПользователяОповещенийЭДО(); + СсылкаНового = Справочники.Пользователи.ПолучитьСсылку( + Новый УникальныйИдентификатор("946135e8-a9a7-405f-a5df-19e734c712c7")); Попытка - - ОписаниеПользователяИБ = Пользователи.НовоеОписаниеПользователяИБ(); - ОписаниеПользователяИБ.Имя = Логин; - ОписаниеПользователяИБ.ПолноеИмя = НСтр("ru='Бот 1С-ЭДО'"); - ОписаниеПользователяИБ.АутентификацияСтандартная = Истина; - ОписаниеПользователяИБ.АутентификацияOpenIDConnect = Ложь; - ОписаниеПользователяИБ.АутентификацияТокеномДоступа = Ложь; - ОписаниеПользователяИБ.ПоказыватьВСпискеВыбора = Ложь; - ОписаниеПользователяИБ.Вставить("Действие", "Записать"); - ОписаниеПользователяИБ.Вставить("ВходВПрограммуРазрешен", Истина); - ОписаниеПользователяИБ.ЗапрещеноИзменятьПароль = Истина; - ОписаниеПользователяИБ.Пароль = Пароль; - ОписаниеПользователяИБ.Роли = Новый Массив; - ОписаниеПользователяИБ.Роли.Добавить(Метаданные.Роли.ИспользованиеУведомленийЭДО.Имя); - - НовыйПользователь = Справочники.Пользователи.СоздатьЭлемент(); - НовыйПользователь.Наименование = ОписаниеПользователяИБ.ПолноеИмя; - НовыйПользователь.Служебный = Истина; - НовыйПользователь.ДополнительныеСвойства.Вставить("ОписаниеПользователяИБ", ОписаниеПользователяИБ); - НовыйПользователь.Записать(); - + СлужебныйПользовательИБ = Пользователи.СлужебныйПользовательИБ(Свойства, СсылкаНового); Исключение - МетаданныеОбъекта = Метаданные.Справочники.Пользователи; - ТекстОшибки = НСтр("ru = 'Не удалось создать служебного пользователя по причине:'") + ТекстОшибки = НСтр("ru = 'Не удалось получить служебного пользователя оповещений ЭДО по причине:'") + Символы.ПС + ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); ЗаписьЖурналаРегистрации(ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Предупреждение, МетаданныеОбъекта,, ТекстОшибки); + ТекстСообщения = НСтр("ru = 'При создании служебного пользователя для получения уведомлений от сервиса ЭДО произошла ошибка: %1'"); ТекстСообщения = СтрШаблон(ТекстСообщения, ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); ОбщегоНазначения.СообщитьПользователю(ТекстСообщения); - КонецПопытки; КонецПроцедуры @@ -435,7 +405,11 @@ |ГДЕ | Пользователи.ИдентификаторПользователяИБ <> &EDIEvents | И Пользователи.Ссылка <> &ПользовательНеУказан"; - Запрос.УстановитьПараметр("EDIEvents", Новый УникальныйИдентификатор("ecabae76-1a0d-4a5d-b8d3-065cd57c0459")); + + Бот = Пользователи.СвойстваПользователяИБ(ИмяСлужебногоПользователяОповещенийЭДО()); + УникальныйИдентификаторБота = ?(ЗначениеЗаполнено(Бот), Бот.УникальныйИдентификатор, Неопределено); + + Запрос.УстановитьПараметр("EDIEvents", УникальныйИдентификаторБота); Запрос.УстановитьПараметр("ПользовательНеУказан", Пользователи.СсылкаНеуказанногоПользователя()); ТаблицаВыборки = Запрос.Выполнить().Выгрузить(); @@ -564,6 +538,7 @@ Если ИдентификаторБота = Неопределено Тогда Попытка ПользовательСистемыВзаимодействия = СистемаВзаимодействия.СоздатьПользователя(Бот.ПользовательИБ); + ПользовательСистемыВзаимодействия.ПолноеИмя = НСтр("ru='Бот 1С-ЭДО'"); ПользовательСистемыВзаимодействия.Картинка = БиблиотекаКартинок.ЭмблемаСервиса1СЭДО48; ПользовательСистемыВзаимодействия.Записать(); ИдентификаторБота = ПользовательСистемыВзаимодействия.Идентификатор; diff --git a/Конфигурация/CommonModules/ОтражениеВУчетеЭДО/Ext/Module.bsl b/Конфигурация/CommonModules/ОтражениеВУчетеЭДО/Ext/Module.bsl index 73163a1c4..aa7384efd 100644 --- a/Конфигурация/CommonModules/ОтражениеВУчетеЭДО/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ОтражениеВУчетеЭДО/Ext/Module.bsl @@ -112,6 +112,7 @@ КонецЕсли; ЭтоЭПД = Ложь; + МодульОбменСГИСЭПД = Неопределено; Если ОбщегоНазначения.ПодсистемаСуществует("ЭлектронноеВзаимодействие.ОбменСГИСЭПД") Тогда МодульОбменСГИСЭПД = ОбщегоНазначения.ОбщийМодуль("ОбменСГИСЭПД"); ЭтоЭПД = МодульОбменСГИСЭПД.ЭтоДокументЭПД(ЗагруженныйДокумент.ТипДокумента); @@ -123,6 +124,14 @@ Возврат; КонецЕсли; + Если МодульОбменСГИСЭПД <> Неопределено Тогда + НеОтражатьДанныеЭлектронногоДокумента = Ложь; + МодульОбменСГИСЭПД.ПослеЗагрузкиНовогоЭлектронногоДокумента(ЗагруженныйДокумент, НеОтражатьДанныеЭлектронногоДокумента); + Если НеОтражатьДанныеЭлектронногоДокумента Тогда + Возврат; + КонецЕсли; + КонецЕсли; + ДанныеДокумента = НовыеДанныеЭлектронногоДокументаДляОтраженияВУчете(); ДанныеДокумента.ЭлектронныйДокумент = ЗагруженныйДокумент.ЭлектронныйДокумент; ДанныеДокумента.ВидДокумента = ЗагруженныйДокумент.ВидДокумента; diff --git a/Конфигурация/CommonModules/ОтчетыСервер/Ext/Module.bsl b/Конфигурация/CommonModules/ОтчетыСервер/Ext/Module.bsl index 58ece146c..1dfbd2f16 100644 --- a/Конфигурация/CommonModules/ОтчетыСервер/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ОтчетыСервер/Ext/Module.bsl @@ -1271,7 +1271,7 @@ Если Вид = "ОТЧЕТ" Тогда Возврат Отчеты[Имя].Создать(); ИначеЕсли Вид = "ВНЕШНИЙОТЧЕТ" Тогда - Возврат ВнешниеОтчеты.Создать(Имя); // АПК:552 Для внешних отчетов, не подключенных к подсистеме "Дополнительные отчеты и обработки". Вызов безопасен, так как проверки безопасности для внешнего отчета выполнены ранее при подключении. + Возврат ВнешниеОтчеты.Создать(Имя); // АПК:552 Для внешних отчетов, не подключенных к подсистеме "Дополнительные отчеты и обработки". Не нарушает безопасность информации, так как создается уже подключенный объект. Иначе ВызватьИсключение СтрЗаменить(НСтр("ru = '""%1"" не является отчетом.'"), "%1", ПолноеИмя); КонецЕсли; diff --git a/Конфигурация/CommonModules/ОфлайнОборудованиеАтолККМВызовСервера/Ext/Module.bsl b/Конфигурация/CommonModules/ОфлайнОборудованиеАтолККМВызовСервера/Ext/Module.bsl index 3c70e8f04..53b2ec5f3 100644 --- a/Конфигурация/CommonModules/ОфлайнОборудованиеАтолККМВызовСервера/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ОфлайнОборудованиеАтолККМВызовСервера/Ext/Module.bsl @@ -1413,6 +1413,12 @@ ДанныеДляЗаполнения.Вставить("КодТипаНоменклатуры", 34); ИначеЕсли Источник.ВидМаркированнойПродукции = ПредопределенноеЗначение("Перечисление.ВидыМаркированнойПродукцииБПО.ИгрыИИгрушкиДляДетей") Тогда ДанныеДляЗаполнения.Вставить("КодТипаНоменклатуры", 36); + ИначеЕсли Источник.ВидМаркированнойПродукции = ПредопределенноеЗначение("Перечисление.ВидыМаркированнойПродукцииБПО.ПарфюмерныеИКосметическиеСредстваИБытоваяХимия") Тогда + ДанныеДляЗаполнения.Вставить("КодТипаНоменклатуры", 37); + ИначеЕсли Источник.ВидМаркированнойПродукции = ПредопределенноеЗначение("Перечисление.ВидыМаркированнойПродукцииБПО.СладостиИКондитерскиеИзделия") Тогда + ДанныеДляЗаполнения.Вставить("КодТипаНоменклатуры", 39); + ИначеЕсли Источник.ВидМаркированнойПродукции = ПредопределенноеЗначение("Перечисление.ВидыМаркированнойПродукцииБПО.СтроительныеМатериалы") Тогда + ДанныеДляЗаполнения.Вставить("КодТипаНоменклатуры", 40); Иначе ДанныеДляЗаполнения.Вставить("КодТипаНоменклатуры", 7); КонецЕсли; diff --git a/Конфигурация/CommonModules/ОценкаПроизводительностиСлужебный/Ext/Module.bsl b/Конфигурация/CommonModules/ОценкаПроизводительностиСлужебный/Ext/Module.bsl index 4f468b1ff..883e1b20a 100644 --- a/Конфигурация/CommonModules/ОценкаПроизводительностиСлужебный/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ОценкаПроизводительностиСлужебный/Ext/Module.bsl @@ -567,7 +567,7 @@ Если ЕстьБазоваяФункциональность() Тогда // АПК:488-выкл ОбщегоНазначения.ВычислитьВБезопасномРежиме не используется, так нет технической возможности. УстановитьБезопасныйРежим(Истина); - МодульОбщегоНазначения = Вычислить("ОбщегоНазначения"); + МодульОбщегоНазначения = Вычислить("ОбщегоНазначения"); // Не нарушает безопасность информации, так как вычисляется фиксированная строка, содержащая только имя общего модуля. УстановитьБезопасныйРежим(Ложь); // АПК:488-вкл Модуль = МодульОбщегоНазначения.ОбщийМодуль(Имя); @@ -575,7 +575,7 @@ Если Метаданные.ОбщиеМодули.Найти(Имя) <> Неопределено Тогда // АПК:488-выкл ОбщегоНазначения.ВычислитьВБезопасномРежиме не используется, так как нет БСП. УстановитьБезопасныйРежим(Истина); - Модуль = Вычислить(Имя); + Модуль = Вычислить(Имя); // Не нарушает безопасность информации, так как вычисляется ссылка на общий модуль по проверенному имени. УстановитьБезопасныйРежим(Ложь); // АПК:488-вкл ИначеЕсли СтрЧислоВхождений(Имя, ".") = 1 Тогда @@ -680,7 +680,7 @@ // АПК:488-выкл ОбщегоНазначения.ВычислитьВБезопасномРежиме не используется, так как нет БСП. УстановитьБезопасныйРежим(Истина); - Модуль = Вычислить(Имя); + Модуль = Вычислить(Имя); // Не нарушает безопасность информации, так как вычисляется ссылка на модуль менеджера по проверенному имени. УстановитьБезопасныйРежим(Ложь); // АПК:488-вкл diff --git a/Конфигурация/CommonModules/ОценкаПроизводительностиУНФ/Ext/Module.bsl b/Конфигурация/CommonModules/ОценкаПроизводительностиУНФ/Ext/Module.bsl index af2cdc718..ba65b7895 100644 --- a/Конфигурация/CommonModules/ОценкаПроизводительностиУНФ/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ОценкаПроизводительностиУНФ/Ext/Module.bsl @@ -16,8 +16,16 @@ ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; Блокировка.Заблокировать(); + ИменаОпераций = Новый Массив; Для Каждого КлючеваяОперация Из КлючевыеОперации Цикл - СоздатьИЗаполнитьЦелевоеВремяКлючевойОперации(КлючеваяОперация.Ключ, КлючеваяОперация.Значение); + ИменаОпераций.Добавить(КлючеваяОперация.Ключ); + КонецЦикла; + + СуществующиеОперации = СуществующиеКлючевыеОперации(ИменаОпераций); + + Для Каждого КлючеваяОперация Из КлючевыеОперации Цикл + СоздатьИЗаполнитьЦелевоеВремяКлючевойОперации(КлючеваяОперация.Ключ, КлючеваяОперация.Значение, Ложь, + СуществующиеОперации); КонецЦикла; ЗафиксироватьТранзакцию(); @@ -277,52 +285,84 @@ КонецПроцедуры -Процедура СоздатьИЗаполнитьЦелевоеВремяКлючевойОперации(ИмяКлючевойОперации, ЦелевоеВремя = 1, ВыполненаСОшибкой = Ложь) - - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ ПЕРВЫЕ 1 - | КлючевыеОперации.Ссылка КАК Ссылка, - | КлючевыеОперации.ЦелевоеВремя КАК ЦелевоеВремя - |ИЗ - | Справочник.КлючевыеОперации КАК КлючевыеОперации - |ГДЕ - | КлючевыеОперации.ИмяХеш = &ИмяХеш - | - |УПОРЯДОЧИТЬ ПО - | Ссылка"; - - ХешMD5 = Новый ХешированиеДанных(ХешФункция.MD5); - ХешMD5.Добавить(ИмяКлючевойОперации); - ИмяХеш = ХешMD5.ХешСумма; - ИмяХеш = СтрЗаменить(Строка(ИмяХеш), " ", ""); - - Запрос.УстановитьПараметр("ИмяХеш", ИмяХеш); - РезультатЗапроса = Запрос.Выполнить(); - Если РезультатЗапроса.Пустой() Тогда +Процедура СоздатьИЗаполнитьЦелевоеВремяКлючевойОперации(ИмяКлючевойОперации, + ЦелевоеВремя = 1, ВыполненаСОшибкой = Ложь, СуществующиеОперации = Неопределено) + + ИмяХеш = ИмяХешКлючевойОперации(ИмяКлючевойОперации); + + ДанныеСуществующейОперации = Неопределено; + Если СуществующиеОперации <> Неопределено Тогда + ДанныеСуществующейОперации = СуществующиеОперации.Получить(ИмяХеш); + КонецЕсли; + + Если ДанныеСуществующейОперации = Неопределено Тогда Наименование = РазложитьСтрокуПоСловам(ИмяКлючевойОперации); - + НовыйЭлемент = Справочники.КлючевыеОперации.СоздатьЭлемент(); НовыйЭлемент.Имя = ИмяКлючевойОперации; НовыйЭлемент.Наименование = Наименование; НовыйЭлемент.ЦелевоеВремя = ЦелевоеВремя; НовыйЭлемент.ВыполненаСОшибкой = ВыполненаСОшибкой; - + НовыйЭлемент.Записать(); Иначе - Выборка = РезультатЗапроса.Выбрать(); - Выборка.Следующий(); - - Если Выборка.ЦелевоеВремя <> ЦелевоеВремя Тогда - ОперацияОбъект = Выборка.Ссылка.ПолучитьОбъект(); + Если ДанныеСуществующейОперации.ЦелевоеВремя <> ЦелевоеВремя Тогда + ОперацияОбъект = ДанныеСуществующейОперации.Ссылка.ПолучитьОбъект(); ОперацияОбъект.ЦелевоеВремя = ЦелевоеВремя; - + ОперацияОбъект.Записать(); - КонецЕсли; + КонецЕсли; КонецЕсли; - + КонецПроцедуры +Функция ИмяХешКлючевойОперации(ИмяКлючевойОперации) + + ХешMD5 = Новый ХешированиеДанных(ХешФункция.MD5); + ХешMD5.Добавить(ИмяКлючевойОперации); + ИмяХеш = СтрЗаменить(Строка(ХешMD5.ХешСумма), " ", ""); + + Возврат ИмяХеш; + +КонецФункции + +Функция СуществующиеКлючевыеОперации(ИменаОпераций) + + Результат = Новый Соответствие; + + Если ИменаОпераций.Количество() = 0 Тогда + Возврат Результат; + КонецЕсли; + + ИменаХеш = Новый Массив; + Для Каждого ИмяОперации Из ИменаОпераций Цикл + ИменаХеш.Добавить(ИмяХешКлючевойОперации(ИмяОперации)); + КонецЦикла; + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | КлючевыеОперации.Ссылка КАК Ссылка, + | КлючевыеОперации.ЦелевоеВремя КАК ЦелевоеВремя, + | КлючевыеОперации.ИмяХеш КАК ИмяХеш + |ИЗ + | Справочник.КлючевыеОперации КАК КлючевыеОперации + |ГДЕ + | КлючевыеОперации.ИмяХеш В (&ИменаХеш)"; + Запрос.УстановитьПараметр("ИменаХеш", ИменаХеш); + + Выборка = Запрос.Выполнить().Выбрать(); + Пока Выборка.Следующий() Цикл + ДанныеОперации = Новый Структура; + ДанныеОперации.Вставить("Ссылка", Выборка.Ссылка); + ДанныеОперации.Вставить("ЦелевоеВремя", Выборка.ЦелевоеВремя); + Результат.Вставить(Выборка.ИмяХеш, ДанныеОперации); + КонецЦикла; + + Возврат Результат; + +КонецФункции + Функция РазложитьСтрокуПоСловам(Знач Строка) МассивСлов = Новый Массив; diff --git a/Конфигурация/CommonModules/ПереводыСБПb2b/Ext/Module.bsl b/Конфигурация/CommonModules/ПереводыСБПb2b/Ext/Module.bsl index b23426950..fe12d96bb 100644 --- a/Конфигурация/CommonModules/ПереводыСБПb2b/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ПереводыСБПb2b/Ext/Module.bsl @@ -437,7 +437,7 @@ ДокументыОпераций, Тип("Массив")); - ПереводыСБПb2bСлужебный.ПроверитьПраваНаВыполнениеОперации(); + ПереводыСБПb2bСлужебный.ПроверитьПраваНаЧтениеОпераций(); Возврат СистемаБыстрыхПлатежейСлужебный.ПлатежныеСсылкиПоДокументамОпераций( ДокументыОпераций, diff --git a/Конфигурация/CommonModules/ПереводыСБПb2bСлужебный/Ext/Module.bsl b/Конфигурация/CommonModules/ПереводыСБПb2bСлужебный/Ext/Module.bsl index d8d224e10..1139ffbec 100644 --- a/Конфигурация/CommonModules/ПереводыСБПb2bСлужебный/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ПереводыСБПb2bСлужебный/Ext/Module.bsl @@ -669,6 +669,18 @@ КонецПроцедуры +// Проверяет права на чтение данных операций Системы быстрых платежей +// в случае отсутствия прав, вызывается исключение. +// +Процедура ПроверитьПраваНаЧтениеОпераций() Экспорт + + Если Не ПереводыСБПb2b.ЧтениеПереводовСБПДоступно() Тогда + ВызватьИсключение НСтр("ru = 'Нарушение прав доступа. Пользователю запрещено чтение данных операций в Системе быстрых платежей. + |Обратитесь к администратору.'"); + КонецЕсли; + +КонецПроцедуры + #КонецОбласти #КонецОбласти diff --git a/Конфигурация/CommonModules/ПереводыСБПc2b/Ext/Module.bsl b/Конфигурация/CommonModules/ПереводыСБПc2b/Ext/Module.bsl index aad7b36a0..0fbf8ee05 100644 --- a/Конфигурация/CommonModules/ПереводыСБПc2b/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ПереводыСБПc2b/Ext/Module.bsl @@ -522,12 +522,14 @@ // ПараметрыПечати - Структура - настройки печати: // * ТипПечати - Число - формат печати; // Допустимые значения : -// "1" - для кассовой ссылки будет сформирован макет формата А5 широкий; -// "2" - для кассовой ссылки будет сформирован макет формата А5 только логотипы; -// "3" - для кассовой ссылки будет сформирован макет формата А5 узкий; -// "4" - для кассовой ссылки будет сформирован макет формата А5 узкий горизонтальный; -// "5" - для кассовой ссылки будет сформирован макет формата А6 квадратный; -// "6" - для кассовой ссылки будет сформирован макет формата А6 круглый. +// "1" - устарело. Для кассовой ссылки будет сформирован макет формата А5 широкий; +// "2" - устарело. Для кассовой ссылки будет сформирован макет формата А5 только логотипы; +// "3" - устарело. Для кассовой ссылки будет сформирован макет формата А5 узкий; +// "4" - устарело. Для кассовой ссылки будет сформирован макет формата А5 узкий горизонтальный; +// "5" - устарело. Для кассовой ссылки будет сформирован макет формата А6 квадратный; +// "6" - устарело. Для кассовой ссылки будет сформирован макет формата А6 круглый. +// "7" - для кассовой ссылки будет сформирован макет формата А5 с УПК горизонтальный; +// "8" - для кассовой ссылки будет сформирован макет формата А5 с УПК вертикальный; // // Возвращаемое значение: // ТабличныйДокумент - подготовленный для печати документ. @@ -568,6 +570,11 @@ Макет = СистемаБыстрыхПлатежейСлужебный.ПолучитьМакетСБП("CashLinkSquare"); ИначеЕсли ПараметрыПечати.ТипПечати = 6 Тогда Макет = СистемаБыстрыхПлатежейСлужебный.ПолучитьМакетСБП("CashLinkCircle"); + ИначеЕсли ПараметрыПечати.ТипПечати = 7 Тогда + Макет = СистемаБыстрыхПлатежейСлужебный.ПолучитьМакетСБП("CashLinkHorizontalUPC"); + ИначеЕсли ПараметрыПечати.ТипПечати = 8 Тогда + Макет = СистемаБыстрыхПлатежейСлужебный.ПолучитьМакетСБП("CashLinkVerticalUPC"); + ТабличныйДокумент.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт; Иначе Возврат ТабличныйДокумент; КонецЕсли; @@ -1252,7 +1259,7 @@ ДокументыОпераций, Тип("Массив")); - ПереводыСБПc2bСлужебный.ПроверитьПраваНаВыполнениеОперации(); + ПереводыСБПc2bСлужебный.ПроверитьПраваНаЧтениеОпераций(); Возврат СистемаБыстрыхПлатежейСлужебный.ПлатежныеСсылкиПоДокументамОпераций( ДокументыОпераций, diff --git a/Конфигурация/CommonModules/ПереводыСБПc2bСервис/Ext/Module.bsl b/Конфигурация/CommonModules/ПереводыСБПc2bСервис/Ext/Module.bsl index 0a066970b..6e7c96fc3 100644 --- a/Конфигурация/CommonModules/ПереводыСБПc2bСервис/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ПереводыСБПc2bСервис/Ext/Module.bsl @@ -2440,6 +2440,15 @@ УстановитьПривилегированныйРежим(Ложь); + Если ДанныеХранилища = Неопределено Тогда + Результат.Ошибка = Истина; + Результат.ИнформацияОбОшибке = + НСтр("ru = 'Для работы с сервисом необходимо ввести данные аутентификации.'"); + СистемаБыстрыхПлатежейСлужебный.ЗаписатьИнформациюВЖурналРегистрации( + Результат.ИнформацияОбОшибке); + Возврат Результат; + КонецЕсли; + ДанныеАутентификации = ДанныеХранилища.Получить(ПараметрыНастройкиПодключения.ИдентификаторУчастника); Если ДанныеАутентификации = Неопределено Тогда diff --git a/Конфигурация/CommonModules/ПереводыСБПc2bСлужебный/Ext/Module.bsl b/Конфигурация/CommonModules/ПереводыСБПc2bСлужебный/Ext/Module.bsl index 3eeddadc9..158bf08ac 100644 --- a/Конфигурация/CommonModules/ПереводыСБПc2bСлужебный/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ПереводыСБПc2bСлужебный/Ext/Module.bsl @@ -1080,6 +1080,18 @@ КонецПроцедуры +// Проверяет права на чтение данных операций Системы быстрых платежей +// в случае отсутствия прав, вызывается исключение. +// +Процедура ПроверитьПраваНаЧтениеОпераций() Экспорт + + Если Не ПереводыСБПc2b.ЧтениеПереводовСБПДоступно() Тогда + ВызватьИсключение НСтр("ru = 'Нарушение прав доступа. Пользователю запрещено чтение данных операций в Системе быстрых платежей. + |Обратитесь к администратору.'"); + КонецЕсли; + +КонецПроцедуры + #КонецОбласти #КонецОбласти diff --git a/Конфигурация/CommonModules/ПодключаемоеОборудованиеOfflineВызовСервера/Ext/Module.bsl b/Конфигурация/CommonModules/ПодключаемоеОборудованиеOfflineВызовСервера/Ext/Module.bsl index 4d8348d4d..b6d0bd97d 100644 --- a/Конфигурация/CommonModules/ПодключаемоеОборудованиеOfflineВызовСервера/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ПодключаемоеОборудованиеOfflineВызовСервера/Ext/Module.bsl @@ -4,6 +4,25 @@ Процедура ЗаполнитьНастройкиККМ(ОфлайнОборудование, НастройкиОборудования) Экспорт + ЗапросКассыККМ = Новый Запрос; + ЗапросКассыККМ.Текст = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | КассаККМ.Ссылка КАК КассаККМ + |ИЗ + | Справочник.КассыККМ КАК КассаККМ + |ГДЕ + | КассаККМ.ОфлайнОборудование = &ОфлайнОборудование"; + + ЗапросКассыККМ.УстановитьПараметр("ОфлайнОборудование", ОфлайнОборудование); + + РезультатЗапроса = ЗапросКассыККМ.Выполнить(); + + Выборка = РезультатЗапроса.Выбрать(); + + Пока Выборка.Следующий() Цикл + НастройкиОборудования.КассаККМСсылка = Выборка.КассаККМ; + КонецЦикла; + Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ @@ -28,6 +47,8 @@ НастройкиОборудования.НаименованиеОрганизации = Выборка.НаименованиеОрганизации; НастройкиОборудования.НаименованиеМагазина = Выборка.НаименованиеРозничнойТочки; + НастройкиОборудования.ОрганизацияСсылка = Выборка.Организация; + НастройкиОборудования.ТорговыйОбъектСсылка = Выборка.Склад; НастройкиОборудования.ИНН = Выборка.ИНН; НастройкиОборудования.КПП = Выборка.КПП; АдресМагазина = ПечатьДокументовУНФ.КонтактнаяИнформация(Выборка.Склад, ПредопределенноеЗначение("Справочник.ВидыКонтактнойИнформации.ФактАдресСтруктурнойЕдиницы")); diff --git a/Конфигурация/CommonModules/ПодключаемоеОборудованиеДрайверКлиент/Ext/Module.bsl b/Конфигурация/CommonModules/ПодключаемоеОборудованиеДрайверКлиент/Ext/Module.bsl index 42a86fba1..cd55f71cb 100644 --- a/Конфигурация/CommonModules/ПодключаемоеОборудованиеДрайверКлиент/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ПодключаемоеОборудованиеДрайверКлиент/Ext/Module.bsl @@ -502,19 +502,23 @@ ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова); Если РезультатВызова.Значение <> Истина Тогда // Именно Значение <> Истина, Из драйвера Значение может ошибочно вернуться произвольного типа. - РезультатВыполнения = ПолучитьОшибкуДрайвера(ОбъектДрайвера, ЗаписьЛога); + РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера, ЗаписьЛога); Возврат РезультатВыполнения; КонецЕсли; ПараметрыВызова = РезультатВызова.Параметры; - ОписаниеДрайвераПараметры = МенеджерОборудованияКлиент.ПолучитьОписаниеДрайвера(ПараметрыВызова[0]); // ОписаниеДрайвераXML - ОписаниеДрайвера = МенеджерОборудованияКлиентСервер.ПараметрыОписанияДрайвера(); - ЗаполнитьЗначенияСвойств(ОписаниеДрайвера, ОписаниеДрайвераПараметры); - ОписаниеДрайвера.РевизияИнтерфейсаПредставление = ПредставлениеРевизияИнтерфейса(ОписаниеДрайвера.РевизияИнтерфейса); - - РезультатВыполнения = РезультатОперацииНаОборудовании(Истина); - РезультатВыполнения.Вставить("ОписаниеДрайвера", ОписаниеДрайвера); - Возврат РезультатВыполнения; + Попытка + ОписаниеДрайвераПараметры = МенеджерОборудованияКлиент.ПолучитьОписаниеДрайвера(ПараметрыВызова[0]); // ОписаниеДрайвераXML + ОписаниеДрайвера = МенеджерОборудованияКлиентСервер.ПараметрыОписанияДрайвера(); + ЗаполнитьЗначенияСвойств(ОписаниеДрайвера, ОписаниеДрайвераПараметры); + ОписаниеДрайвера.РевизияИнтерфейсаПредставление = ПредставлениеРевизияИнтерфейса(ОписаниеДрайвера.РевизияИнтерфейса); + РезультатВыполнения = РезультатОперацииНаОборудовании(Истина); + РезультатВыполнения.Вставить("ОписаниеДрайвера", ОписаниеДрайвера); + Возврат РезультатВыполнения; + Исключение + ОписаниеОшибки = ОписаниеОшибки(); + РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь, ОписаниеОшибки); + КонецПопытки КонецЕсли; КонецФункции @@ -1136,7 +1140,7 @@ РезультатВыполнения = РезультатОперацииНаОборудовании(Истина); Если РезультатВызова.Значение <> Истина Тогда - РезультатВыполнения = ПолучитьОшибкуДрайвера(ОбъектДрайвера, ЗаписьЛога); + РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера, ЗаписьЛога); КонецЕсли; Иначе @@ -2516,18 +2520,20 @@ КонецЕсли; КонецЕсли; - //АктивныеКодыМаркировки = МенеджерОборудованияКлиент.ПроверенныеКодыМаркировкиАктивнойСессии(ПараметрыПодключения.ИдентификаторУстройства); - //// В чеке присутствуют коды маркировки - //Если ДанныеОперации.КодыМаркировки.Количество() > 0 Тогда - // Для Каждого ТекущийКодМаркировки Из ДанныеОперации.КодыМаркировки Цикл - // Если АктивныеКодыМаркировки.Найти(ТекущийКодМаркировки.КодМаркировки) = Неопределено Тогда - // СообщениеОбОшибке = НСтр("ru = 'Контрольная марка для товара ""%1"" не проверена на ККТ.'"); - // СообщениеОбОшибке = СтрШаблон(СообщениеОбОшибке, ТекущийКодМаркировки.Наименование); - // РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь, СообщениеОбОшибке); - // Возврат РезультатВыполнения; - // КонецЕсли; - // КонецЦикла - //КонецЕсли; + Если ДанныеОперации.ТипРасчета = ПредопределенноеЗначение("Перечисление.ТипыРасчетаДенежнымиСредствами.ПриходДенежныхСредств") Тогда + АктивныеКодыМаркировки = МенеджерОборудованияКлиент.ПроверенныеКодыМаркировкиАктивнойСессии(ПараметрыПодключения.ИдентификаторУстройства); + // В чеке присутствуют коды маркировки + Если ДанныеОперации.КодыМаркировки.Количество() > 0 Тогда + Для Каждого ТекущийКодМаркировки Из ДанныеОперации.КодыМаркировки Цикл + Если АктивныеКодыМаркировки.Найти(ТекущийКодМаркировки.КодМаркировки) = Неопределено Тогда + СообщениеОбОшибке = НСтр("ru = 'Контрольная марка для товара ""%1"" не проверена на ККТ.'"); + СообщениеОбОшибке = СтрШаблон(СообщениеОбОшибке, ТекущийКодМаркировки.Наименование); + РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь, СообщениеОбОшибке); + Возврат РезультатВыполнения; + КонецЕсли; + КонецЦикла + КонецЕсли; + КонецЕсли; Попытка Если ДанныеОперации.ЕстьПерсональныеДанные Тогда @@ -4232,6 +4238,7 @@ РезультатВыполнения.Вставить("КодЗавершения"); РезультатВыполнения.Вставить("ИдентификаторПлатежнойСистемы"); РезультатВыполнения.Вставить("ИдентификаторБанковскойТранзакции"); + РезультатВыполнения.Вставить("ИдентификаторQRОперации"); РезультатВыполнения.Вставить("ИдентификаторТерминала" , ПараметрыПодключения.ИдентификаторТерминала); РезультатВыполнения.Вставить("ИдентификаторБанкаЭквайера", ПараметрыПодключения.ИдентификаторБанкаЭквайера); @@ -4834,6 +4841,7 @@ КодАвторизации = ?(ДанныеОперации.КодАвторизации <> Неопределено, ДанныеОперации.КодАвторизации, ""); ИдентификаторКорзины = ?(ДанныеОперации.ИдентификаторКорзины <> Неопределено, ДанныеОперации.ИдентификаторКорзины, ""); СуммаЭлектронногоСертификата = ?(ДанныеОперации.СуммаЭлектронногоСертификата <> Неопределено, ДанныеОперации.СуммаЭлектронногоСертификата, 0); + СкидкаЭлектроннымиСертификатами = ?(ДанныеОперации.СкидкаЭлектроннымиСертификатами <> Неопределено, ДанныеОперации.СкидкаЭлектроннымиСертификатами, 0); СуммаСобственныхСредств = ?(ДанныеОперации.СуммаСобственныхСредств <> Неопределено, ДанныеОперации.СуммаСобственныхСредств, 0); ТекстСлипЧека = ""; СтатусОперации = 0; @@ -4845,6 +4853,13 @@ Возврат РезультатВыполнения; КонецЕсли; + Если (СкидкаЭлектроннымиСертификатами > 0) Тогда + ОписаниеОшибки = НСтр("ru='Терминал не поддерживает операцию cкидки по ЭС.'"); + ЗаписатьОшибкуВЛог(ПараметрыПодключения, Команда, ОписаниеОшибки); + РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь, ОписаниеОшибки); + Возврат РезультатВыполнения; + КонецЕсли; + Попытка Если ПараметрыПодключения.РевизияИнтерфейса >= 4000 Тогда Если Команда = "PayElectronicCertificate" Тогда diff --git a/Конфигурация/CommonModules/ПодключаемыеКоманды/Ext/Module.bsl b/Конфигурация/CommonModules/ПодключаемыеКоманды/Ext/Module.bsl index b5de87828..7a4010efa 100644 --- a/Конфигурация/CommonModules/ПодключаемыеКоманды/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ПодключаемыеКоманды/Ext/Module.bsl @@ -1132,12 +1132,13 @@ Если ТипЗнч(СписокРеквизит) = Тип("ДинамическийСписок") И ЗначениеЗаполнено(СписокРеквизит.ОсновнаяТаблица) Тогда ИмяОбъектаМетаданных = СписокРеквизит.ОсновнаяТаблица; ОбъектМетаданных = ОбщегоНазначения.ОбъектМетаданныхПоПолномуИмени(ИмяОбъектаМетаданных); - Попытка + + ПустаяСсылка = Неопределено; + Если ОбъектМетаданных <> Неопределено И ОбщегоНазначения.ЭтоОбъектСсылочногоТипа(ОбъектМетаданных) Тогда МенеджерОбъекта = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ОбъектМетаданных.ПолноеИмя()); ПустаяСсылка = МенеджерОбъекта.ПустаяСсылка(); - Исключение - ПустаяСсылка = Неопределено; - КонецПопытки; + КонецЕсли; + Если ПустаяСсылка = Неопределено Тогда ДоступныеПоля = СписокРеквизит.КомпоновщикНастроек.Настройки.ДоступныеПоляВыбора.Элементы; ПолеСсылка = ДоступныеПоля.Найти("Ссылка"); diff --git a/Конфигурация/CommonModules/ПодключаемыеСтатусыЭДО/Ext/Module.bsl b/Конфигурация/CommonModules/ПодключаемыеСтатусыЭДО/Ext/Module.bsl index a4c556f3b..7fa803f17 100644 --- a/Конфигурация/CommonModules/ПодключаемыеСтатусыЭДО/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ПодключаемыеСтатусыЭДО/Ext/Module.bsl @@ -49,11 +49,11 @@ ПодготовитьСтатус(ПараметрыСтатусаЭДО); КонецПроцедуры -// Обновление статуса ЭДО в событии "ПриЧтениииНаСервере" +// Обновление статуса ЭДО в событии "ПриЧтенииНаСервере" // // Параметры: // ПараметрыСтатусаЭДО - см. ПараметрыСтатусаЭДО_ФормаДокумента -Процедура ПриЧтениииНаСервере(ПараметрыСтатусаЭДО) Экспорт +Процедура ПриЧтенииНаСервере(ПараметрыСтатусаЭДО) Экспорт ПриИзмененииКлючевыхРеквизитовСтатусЭДО(ПараметрыСтатусаЭДО); КонецПроцедуры @@ -110,7 +110,11 @@ Или СостояниеЭДО = Перечисления.СостоянияДокументовЭДО.ТребуетсяПодтверждениеАннулирования Тогда Возврат Перечисления.СтатусыЭДО.Отправить; КонецЕсли; - Если СостояниеЭДО = Перечисления.СостоянияДокументовЭДО.ТребуетсяУточнение Тогда + Если СостояниеЭДО = Перечисления.СостоянияДокументовЭДО.ТребуетсяУточнение + Или СостояниеЭДО = Перечисления.СостоянияДокументовЭДО.ТребуетсяПодготовкаКОтправкеОтказаВПодписи + Или СостояниеЭДО = Перечисления.СостоянияДокументовЭДО.ТребуетсяОтправкаОтказаВПодписи + Или СостояниеЭДО = Перечисления.СостоянияДокументовЭДО.ОтказаноВПодписиКонтрагенту + Или СостояниеЭДО = Перечисления.СостоянияДокументовЭДО.КонтрагентОтказалВПодписи Тогда Возврат Перечисления.СтатусыЭДО.Уточнить; КонецЕсли; Если СостояниеЭДО = Перечисления.СостоянияДокументовЭДО.Аннулирован @@ -167,7 +171,7 @@ КонецЕсли; Если ЗначениеЗаполнено(ОбъектУчета) Тогда - Возврат ПолучитьСтратусПоСостояниюЭДО(ОбъектУчета); + Возврат ПолучитьСтатусПоСостояниюЭДО(ОбъектУчета); КонецЕсли; Возврат Перечисления.СтатусыЭДО.Создать; КонецФункции @@ -200,8 +204,8 @@ // ОбъектУчета - ОпределяемыйТип.ОснованияЭлектронныхДокументовЭДО // // Возвращаемое значение: -// ПеречислениеСсылка.СтатусыЭДО - Получить стратус по состоянию ЭДО -Функция ПолучитьСтратусПоСостояниюЭДО(ОбъектУчета) +// ПеречислениеСсылка.СтатусыЭДО - Получить статус по состоянию ЭДО +Функция ПолучитьСтатусПоСостояниюЭДО(ОбъектУчета) ТекущееСостояние = ИнтеграцияЭДО.РассчитатьСостояниеОбъектаУчета(ОбъектУчета); Статус = ПолучитьСтатусПоСостоянию(ТекущееСостояние.Состояние); Возврат Статус; diff --git a/Конфигурация/CommonModules/ПодключениеСервисовСопровождения/Ext/Module.bsl b/Конфигурация/CommonModules/ПодключениеСервисовСопровождения/Ext/Module.bsl index 464bd212e..65dcf7742 100644 --- a/Конфигурация/CommonModules/ПодключениеСервисовСопровождения/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ПодключениеСервисовСопровождения/Ext/Module.bsl @@ -421,6 +421,10 @@ Методы.Вставить("ПодключитьТестовыйПериод", Истина); Методы.Вставить("ПроверитьСостояниеЗапросаНаПодключение", Истина); + Если ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.БазоваяФункциональность") Тогда + Методы.Вставить("ПодключениеТестовыхПериодов"); + КонецЕсли; + КонецПроцедуры // См. ОбщегоНазначенияПереопределяемый.ПриНастройкеПроверкиМетодовВызываемыхКакПроизвольныйКод diff --git a/Конфигурация/CommonModules/ПолучениеВнешнихКомпонент/Ext/Module.bsl b/Конфигурация/CommonModules/ПолучениеВнешнихКомпонент/Ext/Module.bsl index 1ccd7f4d5..2cde67cc3 100644 --- a/Конфигурация/CommonModules/ПолучениеВнешнихКомпонент/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ПолучениеВнешнихКомпонент/Ext/Module.bsl @@ -460,8 +460,8 @@ РезультатОбновления = ОбновитьДанныеКэшаВнешнихКомпонент(ОписаниеВнешнихКомпонент); Если ЗначениеЗаполнено(РезультатОбновления.КодОшибки) Тогда ЗаполнитьЗначенияСвойств( - РезультатОбновления, РезультатОперации, + РезультатОбновления, "КодОшибки,СообщениеОбОшибке,ИнформацияОбОшибке"); Возврат РезультатОперации; КонецЕсли; @@ -552,21 +552,14 @@ // Процедура ИзменитьНастройкиОбновленияВнешнихКомпонент(Настройки) Экспорт - Если Не ДоступнаЗагрузкаВнешнихКомпонент() Тогда + Если Не ДоступнаЗагрузкаВнешнихКомпонент() + Или Не ДоступноИзменениеНастроекРегламентногоЗадания() Тогда Возврат; КонецЕсли; НастройкиОбновления = Новый Структура("Расписание,ВариантОбновления,ФайлВнешнихКомпонент"); ЗаполнитьЗначенияСвойств(НастройкиОбновления, Настройки); - Если НастройкиОбновления.Расписание <> Неопределено Тогда - ЗаписатьРасписаниеОбновления(Настройки.Расписание); - КонецЕсли; - - Если Не ДоступноИзменениеНастроекРегламентногоЗадания() Тогда - Возврат; - КонецЕсли; - Если НастройкиОбновления.ВариантОбновления <> Неопределено Тогда Константы.ВариантОбновленияВнешнихКомпонент.Установить(Настройки.ВариантОбновления); КонецЕсли; @@ -574,7 +567,11 @@ Если НастройкиОбновления.ФайлВнешнихКомпонент <> Неопределено Тогда Константы.ФайлВнешнихКомпонент.Установить(Настройки.ФайлВнешнихКомпонент); КонецЕсли; - + + Если НастройкиОбновления.Расписание <> Неопределено Тогда + ЗаписатьРасписаниеОбновления(Настройки.Расписание); + КонецЕсли; + КонецПроцедуры #КонецОбласти diff --git a/Конфигурация/CommonModules/ПолучениеОбновленийПрограммы/Ext/Module.bsl b/Конфигурация/CommonModules/ПолучениеОбновленийПрограммы/Ext/Module.bsl index ee7e47501..7e2f03d96 100644 --- a/Конфигурация/CommonModules/ПолучениеОбновленийПрограммы/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ПолучениеОбновленийПрограммы/Ext/Module.bsl @@ -1894,7 +1894,6 @@ Функция УстановкаИУдалениеИсправлений( Исправления, ОтозванныеИсправления, - УдалятьФайлыИсправлений = Ложь, ВФоне = Ложь) Экспорт Результат = Новый Структура; @@ -1923,18 +1922,6 @@ ФайлыИсправленийПараметр.Добавить( ПоместитьВоВременноеХранилище( Новый ДвоичныеДанные(ТекИсправление.ИмяПолученногоФайла))); - Если УдалятьФайлыИсправлений Тогда - Попытка - УдалитьФайлы(ТекИсправление.ИмяПолученногоФайла); - Исключение - ЗаписатьОшибкуВЖурналРегистрации( - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не удалось удалить файл исправления %1. - |%2'"), - ТекИсправление.ИмяПолученногоФайла, - ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()))); - КонецПопытки; - КонецЕсли; КонецЕсли; Иначе ИдентификаторыУстановленныхОписанияСтр.Добавить(ИдентификаторСтр); @@ -2345,6 +2332,9 @@ КонецЦикла; // 3) Получение файлов исправлений. + КаталогИсправлений = ПолучениеОбновленийПрограммыКлиентСервер.КаталогДляРаботыСИсправлениями( + Параметры.ЭтоWindowsКлиент); + Для Каждого ТекИсправление Из Контекст.Исправления Цикл ЗаписатьИнформациюВЖурналРегистрации( @@ -2395,6 +2385,10 @@ Иначе Попытка + // Проверка что сохраняемый файл находится в ожидаемом каталоге + Если ПолучениеОбновленийПрограммыКлиентСервер.ПутьККаталогуИзменен(ТекИсправление.ИмяПолученногоФайла, КаталогИсправлений) Тогда + ВызватьИсключение НСтр("ru = 'Ошибка в адресе каталога хранения исправлений.'"); + КонецЕсли; РезультатПолучения.Содержимое.Записать(ТекИсправление.ИмяПолученногоФайла); Исключение @@ -2479,7 +2473,10 @@ Контекст.ТекущееДействие = НСтр("ru = 'Установка исправлений (патчей)'"); СообщитьСостояние("УстановкаИсправлений", , Контекст); - РезультатУстановки = УстановкаИУдалениеИсправлений(Контекст.Исправления, Контекст.ОтозванныеИсправления, , Истина); + РезультатУстановки = УстановкаИУдалениеИсправлений( + Контекст.Исправления, + Контекст.ОтозванныеИсправления, + Истина); Если РезультатУстановки.Ошибка Тогда Контекст.ИмяОшибки = "ОшибкаУстановкиИсправлений"; @@ -2509,11 +2506,14 @@ КаталогДляЗагрузки = ПолучениеОбновленийПрограммыКлиентСервер.КаталогДляРаботыСОбновлениямиПлатформы(); КаталогХраненияДистрибутивов = Параметры.КаталогХраненияДистрибутивовПлатформы; - Если КаталогХраненияДистрибутивов = Неопределено Тогда + Если КаталогХраненияДистрибутивов = Неопределено + Или Не ЭтоФайловаяИБ() Тогда + КаталогДистрибутива = КаталогДляЗагрузки + ?(ПолучениеОбновленийПрограммыКлиентСервер.Это64РазрядноеПриложение(), "setup_64\", "setup\"); + Иначе Если Прав(КаталогХраненияДистрибутивов, 1) <> "\" Тогда КаталогХраненияДистрибутивов = КаталогХраненияДистрибутивов + "\"; @@ -2863,6 +2863,10 @@ ДопПараметры); Если ПустаяСтрока(РезультатПолучения.КодОшибки) Тогда + КаталогОбновлений = ПолучениеОбновленийПрограммыКлиентСервер.КаталогДляРаботыСОбновлениямиКонфигурации(); + Если ПолучениеОбновленийПрограммыКлиентСервер.ПутьККаталогуИзменен(Обновление.ИмяПолученногоФайла, КаталогОбновлений) Тогда + ВызватьИсключение НСтр("ru = 'Ошибка в адресе каталога обовлений.'"); + КонецЕсли; ПереместитьФайл(РезультатПолучения.Содержимое, Обновление.ИмяПолученногоФайла); Иначе @@ -2922,14 +2926,22 @@ ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания( Метаданные.РегламентныеЗадания.ПолучениеИУстановкаИсправленийКонфигурации); - Если Не Пользователи.ЭтоПолноправныйПользователь(, Истина, Ложь) Тогда + Если Не ЭтоАдминистраторСистемы() Тогда ВызватьИсключение НСтр("ru = 'Недостаточно прав.'"); КонецЕсли; - Если Не ДоступнаАвтоматическаяЗагрузкаИсправлений() Тогда - ЗаписатьИнформациюВЖурналРегистрации( - НСтр("ru = 'Использование получения исправлений недоступно в текущем режиме работы. - |Регламентное задание ПолучениеИУстановкаИсправленийКонфигурации отключено.'")); + ПричинаОстановкиЗадания = ""; + ЗагружатьАвтоматически = Константы.ЗагружатьИУстанавливатьИсправленияАвтоматически.Получить(); + Если Не ЗагружатьАвтоматически Тогда + ПричинаОстановкиЗадания = НСтр("ru = 'Автоматическая загрузка и установка исправлений отключена в настройках. + |Регламентное задание ПолучениеИУстановкаИсправленийКонфигурации отключено.'"); + ИначеЕсли Не ДоступнаАвтоматическаяЗагрузкаИсправлений() Тогда + ПричинаОстановкиЗадания = НСтр("ru = 'Использование получения исправлений недоступно в текущем режиме работы. + |Регламентное задание ПолучениеИУстановкаИсправленийКонфигурации отключено.'"); + КонецЕсли; + + Если Не ПустаяСтрока(ПричинаОстановкиЗадания) Тогда + ЗаписатьИнформациюВЖурналРегистрации(ПричинаОстановкиЗадания); РегламентныеЗаданияСервер.УстановитьИспользованиеРегламентногоЗадания( Метаданные.РегламентныеЗадания.ПолучениеИУстановкаИсправленийКонфигурации, Ложь); @@ -3024,7 +3036,7 @@ КонецЕсли; // 3) Установка исправлений. - УстановкаИУдалениеИсправлений(ОписаниеФайлов.Исправления, ОтозванныеИсправления, , ВФоне); + УстановкаИУдалениеИсправлений(ОписаниеФайлов.Исправления, ОтозванныеИсправления, ВФоне); ЗаписатьИнформациюВЖурналРегистрации( НСтр("ru = 'Завершено автоматическое получение и установка исправлений (патчей)'")); diff --git a/Конфигурация/CommonModules/ПолучениеОбновленийПрограммыКлиентСервер/Ext/Module.bsl b/Конфигурация/CommonModules/ПолучениеОбновленийПрограммыКлиентСервер/Ext/Module.bsl index 84f41a773..8b9c87827 100644 --- a/Конфигурация/CommonModules/ПолучениеОбновленийПрограммыКлиентСервер/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ПолучениеОбновленийПрограммыКлиентСервер/Ext/Module.bsl @@ -79,7 +79,7 @@ ПутьКонфигурационногоФайла = КаталогProgramData + "1C\1CEStart\1CEStart.cfg"; ОписательФайла = Новый Файл(ПутьКонфигурационногоФайла); - Если НЕ ОписательФайла.Существует() Тогда + Если Не ОписательФайла.Существует() Тогда Возврат Неопределено; КонецЕсли; @@ -89,15 +89,25 @@ Пока ПрочитаннаяСтрока <> Неопределено Цикл Если ВРег(Лев(ПрочитаннаяСтрока, 17)) = "INSTALLEDLOCATION" Тогда ПутьКаталогаУстановки = Сред(ПрочитаннаяСтрока, 19); - Если НЕ ПустаяСтрока(ПутьКаталогаУстановки) Тогда + Если Не ПустаяСтрока(ПутьКаталогаУстановки) Тогда + ПутьКаталогаВерсииПлатформы = ПутьКаталогаУстановки + ?(Прав(ПутьКаталогаУстановки, 1) = "\", "", "\") + НомерВерсии + "\bin\"; + ОписательФайла = Новый Файл(ПутьКаталогаВерсииПлатформы); Если ОписательФайла.Существует() Тогда + + Если ПутьККаталогуИзменен(ПутьКаталогаВерсииПлатформы, ПутьКаталогаУстановки) Тогда + ВызватьИсключение НСтр("ru = 'Некорректный путь к каталогу установки платформы.'"); + КонецЕсли; + ЧтениеТекста.Закрыть(); + Возврат ПутьКаталогаВерсииПлатформы; + КонецЕсли; + КонецЕсли; КонецЕсли; ПрочитаннаяСтрока = ЧтениеТекста.ПрочитатьСтроку(); @@ -124,7 +134,7 @@ КонецФункции -Функция КаталогДляРаботыСОбновлениямиКонфигурации() +Функция КаталогДляРаботыСОбновлениямиКонфигурации() Экспорт КаталогAppData = СистемныйКаталог(28); ПутьКаталога = КаталогAppData + ?(Прав(КаталогAppData, 1) = "\", "", "\") @@ -147,7 +157,7 @@ // Возвращаемое значение: // Строка // -Функция КаталогДляРаботыСИсправлениями(ЭтоWindowsКлиент) +Функция КаталогДляРаботыСИсправлениями(ЭтоWindowsКлиент) Экспорт Разделитель = ПолучитьРазделительПути(); ПроверитьДоступ = Ложь; @@ -188,6 +198,14 @@ КонецФункции +Функция КаталогИндексаФайлов() + + Возврат КаталогДляРаботыСОбновлениямиКонфигурации() + + "FileIndex" + + ПолучитьРазделительПути(); + +КонецФункции + Функция КаталогШаблонов() ИмяКаталога = СистемныйКаталог(26); @@ -320,18 +338,14 @@ Если Результат.ОбновленияКонфигурации.Количество() > 0 Тогда - Результат.Вставить("ВременныйКаталогОбновленийКонфигурации", - КаталогДляРаботыСОбновлениямиКонфигурации()); - Результат.Вставить("КаталогИндексаФайлов", - Результат.ВременныйКаталогОбновленийКонфигурации + "FileIndex\"); - Результат.Вставить("КаталогШаблонов", КаталогШаблонов()); + КаталогШаблонов = КаталогШаблонов(); Для Каждого ТекОбновление Из Результат.ОбновленияКонфигурации Цикл КоличествоФайлов = КоличествоФайлов + 1; ОбъемФайлов = ОбъемФайлов + ТекОбновление.РазмерФайла; ТекОбновление.Вставить("Получено" , Ложь); - ТекОбновление.Вставить("КаталогДистрибутива", Результат.КаталогШаблонов + ТекОбновление.ПодкаталогШаблонов); + ТекОбновление.Вставить("КаталогДистрибутива", КаталогШаблонов + ТекОбновление.ПодкаталогШаблонов); ТекОбновление.Вставить("КаталогCFUФайлаВКаталогеДистрибутивов", ТекОбновление.КаталогДистрибутива + ТекОбновление.ПодкаталогCfu); ТекОбновление.Вставить("ПолноеИмяCFUФайлаВКаталогеДистрибутивов", @@ -343,12 +357,6 @@ КонецЦикла; - Иначе - - Результат.Вставить("ВременныйКаталогОбновленийКонфигурации", ""); - Результат.Вставить("КаталогИндексаФайлов" , ""); - Результат.Вставить("КаталогШаблонов" , ""); - КонецЕсли; Если Параметры.УстановитьИсправления Тогда @@ -489,7 +497,7 @@ Попытка - ПолноеИмяИндексногоФайла = Контекст.КаталогИндексаФайлов + Обновление.ИмяИндексногоФайла; + ПолноеИмяИндексногоФайла = КаталогИндексаФайлов() + Обновление.ИмяИндексногоФайла; Если Не ФайлСуществует(ПолноеИмяИндексногоФайла, Ложь) Тогда Возврат Ложь; КонецЕсли; @@ -538,7 +546,7 @@ Процедура СоздатьКаталогиДляПолученияОбновления(Обновление, Контекст) Экспорт - ВременныйКаталогОбновленийКонфигурации = Контекст.ВременныйКаталогОбновленийКонфигурации; + ВременныйКаталогОбновленийКонфигурации = КаталогДляРаботыСОбновлениямиКонфигурации(); Попытка СоздатьКаталог(ВременныйКаталогОбновленийКонфигурации); Исключение @@ -562,7 +570,7 @@ КонецПопытки; - КаталогИндексаФайлов = Контекст.КаталогИндексаФайлов; + КаталогИндексаФайлов = КаталогИндексаФайлов(); Попытка СоздатьКаталог(КаталогИндексаФайлов); Исключение @@ -587,10 +595,14 @@ КонецПопытки; // Создание каталога дистрибутива. + КаталогШаблонов = КаталогШаблонов(); Если Обновление.ФорматФайлаОбновления <> "zip" Тогда // Только cfu-файл. Попытка + Если ПутьККаталогуИзменен(Обновление.КаталогCFUФайлаВКаталогеДистрибутивов, КаталогШаблонов) Тогда + ВызватьИсключение НСтр("ru = 'Ошибка в адресе каталога дистрибутива.'"); + КонецЕсли; СоздатьКаталог(Обновление.КаталогCFUФайлаВКаталогеДистрибутивов); Исключение @@ -618,6 +630,9 @@ Иначе Попытка + Если ПутьККаталогуИзменен(Обновление.КаталогДистрибутива, КаталогШаблонов) Тогда + ВызватьИсключение НСтр("ru = 'Ошибка в адресе каталога дистрибутива.'"); + КонецЕсли; СоздатьКаталог(Обновление.КаталогДистрибутива); Исключение @@ -701,6 +716,10 @@ Если Обновление.ФорматФайлаОбновления = "zip" Тогда Попытка + КаталогОбновлений = КаталогДляРаботыСОбновлениямиКонфигурации(); + Если ПутьККаталогуИзменен(Обновление.ИмяПолученногоФайла, КаталогОбновлений) Тогда + ВызватьИсключение НСтр("ru = 'Ошибка в адресе каталога дистрибутива.'"); + КонецЕсли; УдалитьФайлы(Обновление.ИмяПолученногоФайла); Исключение ПолучениеОбновленийПрограммыВызовСервера.ЗаписатьОшибкуВЖурналРегистрации( @@ -711,7 +730,7 @@ // Запись индексного файла. Попытка - ПолноеИмяИндексногоФайла = Контекст.КаталогИндексаФайлов + Обновление.ИмяИндексногоФайла; + ПолноеИмяИндексногоФайла = КаталогИндексаФайлов() + Обновление.ИмяИндексногоФайла; ОписательФайлаОбновления = Новый Файл(Обновление.ПолноеИмяCFUФайлаВКаталогеДистрибутивов); ЗаписьТекста = Новый ЗаписьТекста(ПолноеИмяИндексногоФайла); @@ -733,6 +752,15 @@ //////////////////////////////////////////////////////////////////////////////// // Прочие служебные процедуры и функции +Функция ПутьККаталогуИзменен(Путь, ПроверяемыйПуть) Экспорт + + Файл = Новый Файл(Путь); + ПроверяемыйФайл = Новый Файл(ПроверяемыйПуть); + + Возврат Не СтрНачинаетсяС(Файл.ПолноеИмя, ПроверяемыйФайл.ПолноеИмя); + +КонецФункции + Функция ИмяСобытияЖурналаРегистрации(КодОсновногоЯзыка) Экспорт Возврат НСтр("ru = 'Получение обновлений программы'", КодОсновногоЯзыка); diff --git a/Конфигурация/CommonModules/ПользователиСлужебный/Ext/Module.bsl b/Конфигурация/CommonModules/ПользователиСлужебный/Ext/Module.bsl index 4781d7ed7..4109be872 100644 --- a/Конфигурация/CommonModules/ПользователиСлужебный/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ПользователиСлужебный/Ext/Module.bsl @@ -8609,6 +8609,33 @@ КонецПроцедуры +// Для формы элемента справочников Пользователи и ВнешниеПользователи. +// Возвращает начальные значения аутентификации при создании пользователя или копировании. +// +// Параметры: +// ДляСервиса - Булево - вариант, когда разделение включено. +// +// Возвращаемое значение: +// Структура: +// * ПользовательИБАутентификацияСтандартная - Булево +// * ПользовательИБАутентификацияOpenID - Булево +// * ПользовательИБАутентификацияOpenIDConnect - Булево +// * ПользовательИБАутентификацияТокеномДоступа - Булево +// * ПользовательИБАутентификацияОС - Булево +// +Функция АутентификацияДляНовогоПользователя(ДляСервиса = Ложь) Экспорт + + Результат = Новый Структура; + Результат.Вставить("ПользовательИБАутентификацияСтандартная", Истина); + Результат.Вставить("ПользовательИБАутентификацияOpenID", ДляСервиса); + Результат.Вставить("ПользовательИБАутентификацияOpenIDConnect", ДляСервиса); + Результат.Вставить("ПользовательИБАутентификацияТокеномДоступа", ДляСервиса); + Результат.Вставить("ПользовательИБАутентификацияОС", Ложь); + + Возврат Результат; + +КонецФункции + #КонецОбласти #Область УниверсальныеПроцедурыИФункции diff --git a/Конфигурация/CommonModules/ПоставляемыеНастройкиВМоделиСервиса/Ext/Module.bsl b/Конфигурация/CommonModules/ПоставляемыеНастройкиВМоделиСервиса/Ext/Module.bsl index abd3fe1d3..15ee868f8 100644 --- a/Конфигурация/CommonModules/ПоставляемыеНастройкиВМоделиСервиса/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ПоставляемыеНастройкиВМоделиСервиса/Ext/Module.bsl @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2025, ООО 1С-Софт +// Copyright (c) 2026, ООО 1С-Софт // Все права защищены. Эта программа и сопроводительные материалы предоставляются // в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) // Текст лицензии доступен по ссылке: @@ -18,6 +18,25 @@ #Область СлужебныйПрограммныйИнтерфейс +#Область ИнтеграцияСБиблиотекойСтандартныхПодсистем + +#Область БазоваяФункциональностьБСП + +// См. СтандартныеПодсистемыСервер.ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод +// +Процедура ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод(Методы) Экспорт + + Если ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.БазоваяФункциональность") Тогда + Методы.Вставить("ОбновлениеРазделеннойНастройки"); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#КонецОбласти + + #Область ИнтеграцияСБиблиотекойТехнологииСервиса #Область БТСПоставляемыеДанные diff --git a/Конфигурация/CommonModules/ПриглашенияЭДО/Ext/Module.bsl b/Конфигурация/CommonModules/ПриглашенияЭДО/Ext/Module.bsl index 3667678bc..6f004a7f9 100644 --- a/Конфигурация/CommonModules/ПриглашенияЭДО/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ПриглашенияЭДО/Ext/Module.bsl @@ -43,6 +43,133 @@ КонецФункции +// Создает автоматически принимаемое приглашение +// +// Параметры: +// Карточка - см. ТранспортныеКонтейнерыЭДО.НовоеОписаниеКарточкиЭлектронногоДокумента +// Организация - ОпределяемыйТип.Организация - Организация для создания приглашения +// Контрагент - ОпределяемыйТип.УчастникЭДО, Неопределено - контрагент для создания приглашения. +// +// Возвращаемое значение: +// Неопределено, +// ДанныеПриглашения - см. ПриглашенияЭДОСлужебный.НовыеДанныеПриглашения +// +Функция СоздатьПриглашениеПоДаннымКарточки(Карточка, Организация, Контрагент) Экспорт + + Если Не ЗначениеЗаполнено(Контрагент) Тогда + Возврат Неопределено; + КонецЕсли; + + КлючПриглашения = ПриглашенияЭДОКлиентСервер.НовыйКлючПриглашения(); + КлючПриглашения.Ключ = Строка(Новый УникальныйИдентификатор); + КлючПриглашения.ИдентификаторОрганизации = Карточка.ИдентификаторПолучателя; + + ТекстПриглашения = НСтр("ru = 'Связь настроена автоматически. Отключено требование приглашений.'"); + + СтруктураРеквизитов = Новый Структура("ИНН, КПП, Наименование"); + РеквизитыКонтрагента = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Контрагент, СтруктураРеквизитов); + + МенеджерЗаписи = РегистрыСведений.ПриглашенияКОбменуЭлектроннымиДокументами.СоздатьМенеджерЗаписи(); + ЗаполнитьЗначенияСвойств(МенеджерЗаписи, РеквизитыКонтрагента); + МенеджерЗаписи.Ключ = КлючПриглашения.Ключ; + МенеджерЗаписи.ИдентификаторОрганизации = Карточка.ИдентификаторПолучателя; + + МенеджерЗаписи.ИдентификаторКонтрагента = Карточка.ИдентификаторОтправителя; + МенеджерЗаписи.Контрагент = Контрагент; + МенеджерЗаписи.Организация = Организация; + МенеджерЗаписи.Тип = Перечисления.ТипыПриглашений.НаИдентификатор; + МенеджерЗаписи.Статус = Перечисления.СтатусыПриглашений.Принято; + МенеджерЗаписи.ТекстПриглашения = ТекстПриглашения; + МенеджерЗаписи.ДатаИзмененияСтатуса = ТекущаяДатаСеанса(); + МенеджерЗаписи.Автоматическое = Истина; + + МенеджерЗаписи.Записать(); + + СведенияОПриглашении = ПриглашенияЭДОСлужебный.СведенияОЗаписанномПриглашении(); + ЗаполнитьЗначенияСвойств(СведенияОПриглашении, МенеджерЗаписи); + СведенияОПриглашении.Организация = Организация; + ПриглашенияЭДОСобытия.ПослеИзмененияПриглашения(СведенияОПриглашении); + + ДанныеПриглашения = ПриглашенияЭДОСлужебный.НовыеДанныеПриглашения(); + ДанныеПриглашения.КлючПриглашения = КлючПриглашения.Ключ; + ДанныеПриглашения.Организация = Организация; + ДанныеПриглашения.Контрагент = Контрагент; + + Возврат ДанныеПриглашения; + +КонецФункции + +// Создает автоматически отправляемое приглашение +// +// Параметры: +// ПараметрыПриглашения - Структура: +// * ИдентификаторОрганизации - Строка +// * ИдентификаторПолучателя - Строка +// * Организация - ОпределяемыйТип.Организация +// * Контрагент - ОпределяемыйТип.УчастникЭДО +// * КлючПриглашения - Строка +// Отказ - Булево +Процедура СоздатьАвтоматическоеПриглашенияПоКлючевымРеквизитам(ПараметрыПриглашения, Отказ) Экспорт + + КлючПриглашения = ПриглашенияЭДОКлиентСервер.КлючПриглашенияНаИдентификатор(); + КлючПриглашения.ИдентификаторОрганизации = ПараметрыПриглашения.ИдентификаторОрганизации; + КлючПриглашения.ИдентификаторКонтрагента = ПараметрыПриглашения.ИдентификаторКонтрагента; + + ДанныеПриглашения = ДанныеПриглашенияПоПараметрам(КлючПриглашения); + + ШаблонПриглашения = + НСтр("ru = 'Связь настроена автоматически. Контрагент не требует приглашений.'"); + + Если ДанныеПриглашения = Неопределено Тогда + + Результат = + СоздатьПриглашениеКОтправкеОператоруЭДО(КлючПриглашения, ПараметрыПриглашения.Организация, + ПараметрыПриглашения.Контрагент, ШаблонПриглашения); + + Если Не Результат.Успешно Тогда + ЭлектронноеВзаимодействие.ОбработатьОшибку(НСтр("ru = 'Создание автоматического приглашения'"), + Результат.ОписаниеОшибки); + Отказ = Истина; + Возврат; + КонецЕсли; + + ДанныеПриглашения = ДанныеПриглашенияПоПараметрам(КлючПриглашения); + + КонецЕсли; + + Если Не ЗначениеЗаполнено(ДанныеПриглашения.КонтрагентИНН) + Или Не ЗначениеЗаполнено(ДанныеПриглашения.КонтрагентКПП) Тогда + + ИмяРеквизитаИНН = ИнтеграцияЭДО.ИмяНаличиеОбъектаРеквизитаВПрикладномРешении("ИННКонтрагента"); + ИмяРеквизитаКПП = ИнтеграцияЭДО.ИмяНаличиеОбъектаРеквизитаВПрикладномРешении("КППКонтрагента"); + ПараметрыКонтрагента = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ДанныеПриглашения.Контрагент, + ИмяРеквизитаИНН + ", " + ИмяРеквизитаКПП); + + ИНН = ПараметрыКонтрагента[ИмяРеквизитаИНН]; + КПП = ПараметрыКонтрагента[ИмяРеквизитаКПП]; + + Иначе + + ИНН = ДанныеПриглашения.КонтрагентИНН; + КПП = ДанныеПриглашения.КонтрагентКПП; + + КонецЕсли; + + СвойстваПриглашения = НовыеЗначенияСвойствПриглашенияДляОбновления(); + ЗаполнитьЗначенияСвойств(СвойстваПриглашения, ДанныеПриглашения); + СвойстваПриглашения.Ключ = ДанныеПриглашения.КлючПриглашения; + СвойстваПриглашения.Автоматическое = Истина; + СвойстваПриглашения.Статус = Перечисления.СтатусыПриглашений.Принято; + СвойстваПриглашения.ДатаИзмененияСтатуса = ТекущаяДатаСеанса(); + СвойстваПриглашения.ИНН = ИНН; + СвойстваПриглашения.КПП = КПП; + СвойстваПриглашения.Тип = Перечисления.ТипыПриглашений.НаИдентификатор; + ПриглашенияЭДОСлужебный.ОбновитьСвойстваПриглашения(СвойстваПриглашения); + + ПараметрыПриглашения.КлючПриглашения = ДанныеПриглашения.КлючПриглашения; + +КонецПроцедуры + // Создает таблицу приглашений. // // Возвращаемое значение: @@ -1897,7 +2024,8 @@ МенеджерЗаписи.КПП = НовыеПриглашения.КПП; МенеджерЗаписи.Наименование = НовыеПриглашения.Наименование; - Если ТребуетсяОпределитьКонтрагента(МенеджерЗаписи) Тогда + Если ТребуетсяОпределитьКонтрагента(МенеджерЗаписи) + И НЕ ТрансграничныйЭДО.ЗапрещеноСоздаватьКонтрагентовАвтоматически(МенеджерЗаписи.ИдентификаторКонтрагента) Тогда РеквизитыКонтрагента = ОбщегоНазначения.СтрокаТаблицыЗначенийВСтруктуру(НовыеПриглашения); GLN = ТрансграничныйЭДО.ПолучитьGLN(МенеджерЗаписи.ИдентификаторКонтрагента); @@ -1912,8 +2040,10 @@ СоздатьКонтрагентаБезусловно = ПриглашенияЭДОСлужебный.СоздатьКонтрагентаБезусловно(МенеджерЗаписи.ИНН, МенеджерЗаписи.КПП); + СоздаватьКонтрагентовАвтоматически = СоздаватьКонтрагентовАвтоматическиБЭД + И НЕ ТрансграничныйЭДО.ЗапрещеноСоздаватьКонтрагентовАвтоматически(МенеджерЗаписи.ИдентификаторКонтрагента); - Если (СоздатьКонтрагентаБезусловно Или СоздаватьКонтрагентовАвтоматическиБЭД) + Если (СоздатьКонтрагентаБезусловно Или СоздаватьКонтрагентовАвтоматически) И Не ОбменМеждуСобственнымиОрганизациями Тогда РеквизитыКонтрагента = Новый Структура; @@ -1950,6 +2080,12 @@ МенеджерЗаписи.ТекстПриглашения = НовыеПриглашения.ТекстПриглашения; КонецЕсли; + // Автоматически принятые приглашения имеют наивысший приоритет, не перезаписываем их + ЗаписатьНовыеДанныеПриглашения = Истина; + Если МенеджерЗаписи.Автоматическое Тогда + ЗаписатьНовыеДанныеПриглашения = Не ПриглашениеПринято(МенеджерЗаписи.Статус); + КонецЕсли; + МенеджерЗаписи.Статус = НовыеПриглашения.СтатусУчастника; МенеджерЗаписи.ДатаИзмененияСтатуса = ТекущаяДатаСеанса(); @@ -1967,8 +2103,13 @@ КонецЕсли; МенеджерЗаписи.ОписаниеОшибки = ТекстОписанияОшибки; - МенеджерЗаписи.Записать(); + + Если ЗаписатьНовыеДанныеПриглашения Тогда + МенеджерЗаписи.Записать(); + КонецЕсли; + ЗафиксироватьТранзакцию(); + Исключение ОтменитьТранзакцию(); ВызватьИсключение; diff --git a/Конфигурация/CommonModules/ПриглашенияЭДОИнтеграцияОблака/Ext/Module.bsl b/Конфигурация/CommonModules/ПриглашенияЭДОИнтеграцияОблака/Ext/Module.bsl index da090bd34..bba7f3615 100644 --- a/Конфигурация/CommonModules/ПриглашенияЭДОИнтеграцияОблака/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ПриглашенияЭДОИнтеграцияОблака/Ext/Module.bsl @@ -183,6 +183,19 @@ Возврат Результат; КонецФункции +// Возвращаемое значение: +// Структура: +// * Обработано - Число +// * КонтекстДиагностики - см. ОбработкаНеисправностейБЭД.НовыйКонтекстДиагностики +// * СтатусыПриглашений - Массив из см. ПриглашенияЭДОСлужебный.НовыйСтатусПриглашения +Функция НовыйРезультатФормированияПриглашений() Экспорт + Результат = Новый Структура; + Результат.Вставить("Обработано", 0); + Результат.Вставить("КонтекстДиагностики", Новый Структура); + Результат.Вставить("СтатусыПриглашений", Новый Массив); + Возврат Результат; +КонецФункции + // Параметры: // Приглашения - Массив из см. ПриглашенияЭДОКлиентСервер.НовоеИсходящееПриглашение // РасшифрованныеМаркеры - см. КриптографияБЭДКлиентСервер.НовыйНаборРасшифрованныхДанных @@ -248,6 +261,60 @@ КонецФункции +// Формирует приглашения в облачном ЭДО для контрагентов и возвращает результат действия. +// +// Параметры: +// Приглашения - Массив из см. ПриглашенияЭДОКлиентСервер.НовоеИсходящееПриглашение +// +// Возвращаемое значение: +// см. НовыйРезультатФормированияПриглашений +Функция СформироватьПриглашения(Приглашения) Экспорт + + Результат = НовыйРезультатФормированияПриглашений(); + Результат.КонтекстДиагностики = ОбработкаНеисправностейБЭД.НовыйКонтекстДиагностики(); + Результат.Обработано = 0; + + РезультатыДействияСформироватьПриглашения = Новый Массив(); + ИмяМетодаФормированияПриглашений = "СформироватьПриглашенияЭДО"; + + ДанныеПриглашений = ДанныеПриглашенийДляОтправки(Приглашения); + ПараметрыДействийПоУчетнымЗаписям = ПараметрыДействияСформироватьПриглашенияПоУчетнымЗаписямЭДО(ДанныеПриглашений, + Результат.КонтекстДиагностики); + + ТекущийПользователь = Пользователи.ТекущийПользователь(); + + Для Каждого ПараметрыДействияПоУчетнойЗаписи Из ПараметрыДействийПоУчетнымЗаписям Цикл + + УчетнаяЗаписьЦентраЭДО = ПараметрыДействияПоУчетнойЗаписи.Ключ; + ПараметрыДействия = ПараметрыДействияПоУчетнойЗаписи.Значение; + + ПараметрыВыполнения = ИнтеграцияОблачногоЭДОПовтИсп.ПараметрыВыполненияМетодаСервиса( + УчетнаяЗаписьЦентраЭДО, ТекущийПользователь); + + ОписаниеМетода = ИнтеграцияОблачногоЭДО.ОписаниеМетодаСервиса( + ИмяМетодаФормированияПриглашений, ПараметрыДействия.ДанныеПриглашений, + ПараметрыДействия.МаркерыАвторизации); + + РезультатФормирования = ИнтеграцияОблачногоЭДО.ВыполнитьМетодСервиса(ПараметрыВыполнения, ОписаниеМетода, + Результат.КонтекстДиагностики); // См. ПрограммныйИнтерфейсОблачногоЭДОВерсия3.СформироватьПриглашенияЭДО + + Если ЗначениеЗаполнено(РезультатФормирования) Тогда + ОбщегоНазначенияКлиентСервер.ДополнитьМассив(РезультатыДействияСформироватьПриглашения, + РезультатФормирования); + КонецЕсли; + + КонецЦикла; + + Результат.Обработано = ОбновитьПриглашенияПоРезультатамДействия(Приглашения, + РезультатыДействияСформироватьПриглашения); + + Результат.СтатусыПриглашений = + СтатусыПриглашенийИзФорматаСервиса(РезультатыДействияСформироватьПриглашения); + + Возврат Результат; + +КонецФункции + // Параметры: // ПакетМетодов - См. ИнтеграцияОблачногоЭДО.НовыйПакетМетодовСервиса // ПараметрыОперации - См. ЭлектронныеДокументыЭДОИнтеграцияОблака.НовыеПараметрыОперацииПоДействиямЭДО @@ -777,6 +844,57 @@ #КонецОбласти // ПринятиеИОтклонениеПриглашений +// Параметры: +// ДанныеПриглашений - См. ВыполнитьДействиеСПриглашениямиВСервисе.ДанныеПриглашений +// КонтекстДиагностики - См. ОбработкаНеисправностейБЭД.НовыйКонтекстДиагностики +// +// Возвращаемое значение: +// Соответствие из КлючИЗначение: +// * Ключ - СправочникСсылка.УчетныеЗаписиОблачногоЭДО +// * Значение - См. НовыеПараметрыДействияСПриглашениями +Функция ПараметрыДействияСформироватьПриглашенияПоУчетнымЗаписямЭДО(ДанныеПриглашений, КонтекстДиагностики) + + ВидОперации = "СформироватьПриглашенияЭДО"; + + ПараметрыДействияПоУчетнымЗаписям = Новый Соответствие; + + ИдентификаторыЭДО = ОбщегоНазначения.ВыгрузитьКолонку(ДанныеПриглашений, "ИдентификаторОрганизации", Истина); + + УчетныеЗаписиОблачногоЭДО = + РегистрыСведений.НастройкиОблачногоЭДО.УчетныеЗаписиПоИдентификаторамЭДО(ИдентификаторыЭДО); + + ОбработанныеМаркеры = Новый Массив; // Массив из Строка + + Для Каждого ДанныеПриглашения Из ДанныеПриглашений Цикл + + ИдентификаторОрганизации = ДанныеПриглашения.ИдентификаторОрганизации; + УчетнаяЗаписьОблачногоЭДО = УчетныеЗаписиОблачногоЭДО[ИдентификаторОрганизации]; + Если УчетнаяЗаписьОблачногоЭДО = Неопределено Тогда + ТекстОшибки = СтрШаблон( + НСтр("ru = 'Отсутствует учетная запись центра ЭДО для идентификатора организации %1'"), + ИдентификаторОрганизации); + ИнтеграцияОблачногоЭДО.ДобавитьНеизвестнуюОшибку(КонтекстДиагностики, ВидОперации, ТекстОшибки); + Продолжить; + КонецЕсли; + + ПараметрыДействия = ПараметрыДействияПоУчетнымЗаписям[УчетнаяЗаписьОблачногоЭДО]; + Если ПараметрыДействия = Неопределено Тогда + ПараметрыДействия = НовыеПараметрыДействияСПриглашениями(); + ПараметрыДействияПоУчетнымЗаписям.Вставить(УчетнаяЗаписьОблачногоЭДО, ПараметрыДействия); + КонецЕсли; + + ПараметрыДействия.ДанныеПриглашений.Добавить(ДанныеПриглашения); + + Если ОбработанныеМаркеры.Найти(ИдентификаторОрганизации) = Неопределено Тогда + ОбработанныеМаркеры.Добавить(ИдентификаторОрганизации); + КонецЕсли; + + КонецЦикла; + + Возврат ПараметрыДействияПоУчетнымЗаписям; + +КонецФункции + // Возвращаемое значение: // Структура: // * Организация - см. ИнтеграцияЭДО.КлючевыеРеквизитыОрганизации @@ -1646,18 +1764,10 @@ КонецФункции -#КонецОбласти - -//@skip-check module-structure-top-region -#Область ПрограммныйИнтерфейс - -#Область ДляВызоваИзДругихПодсистем - -#Область СтандартныеПодсистемы - // См. СтандартныеПодсистемыСервер.ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод Процедура ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод(Методы) Экспорт - + + Методы.Вставить("СформироватьПриглашения", Истина); Методы.Вставить("ОтклонитьПриглашения", Истина); Методы.Вставить("ОтправитьПриглашения", Истина); Методы.Вставить("ПринятьПриглашения", Истина); @@ -1665,7 +1775,3 @@ КонецПроцедуры #КонецОбласти - -#КонецОбласти - -#КонецОбласти \ No newline at end of file diff --git a/Конфигурация/CommonModules/ПриглашенияЭДОИнтеграцияОблакаВызовСервера/Ext/Module.bsl b/Конфигурация/CommonModules/ПриглашенияЭДОИнтеграцияОблакаВызовСервера/Ext/Module.bsl index b31abd144..86a38ff63 100644 --- a/Конфигурация/CommonModules/ПриглашенияЭДОИнтеграцияОблакаВызовСервера/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ПриглашенияЭДОИнтеграцияОблакаВызовСервера/Ext/Module.bsl @@ -71,4 +71,20 @@ КонецФункции +// Параметры: +// Приглашения - Массив из см. ПриглашенияЭДОКлиентСервер.НовоеИсходящееПриглашение +// РасшифрованныеМаркеры - см. КриптографияБЭДКлиентСервер.НовыйНаборРасшифрованныхДанных +// +// Возвращаемое значение: +// См. ДлительныеОперации.ВыполнитьФункцию +Функция СформироватьПриглашенияВФоне(Знач Приглашения) Экспорт + + ПараметрыВыполненияВФоне = ДлительныеОперации.ПараметрыВыполненияФункции(Новый УникальныйИдентификатор); + + // см. ПриглашенияЭДОИнтеграцияОблака.СформироватьПриглашения + Возврат ДлительныеОперации.ВыполнитьФункцию(ПараметрыВыполненияВФоне, + "ПриглашенияЭДОИнтеграцияОблака.СформироватьПриглашения", Приглашения); + +КонецФункции + #КонецОбласти diff --git a/Конфигурация/CommonModules/ПриглашенияЭДОИнтеграцияОблакаКлиент/Ext/Module.bsl b/Конфигурация/CommonModules/ПриглашенияЭДОИнтеграцияОблакаКлиент/Ext/Module.bsl index 896daada3..45d2beb5c 100644 --- a/Конфигурация/CommonModules/ПриглашенияЭДОИнтеграцияОблакаКлиент/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ПриглашенияЭДОИнтеграцияОблакаКлиент/Ext/Module.bsl @@ -45,6 +45,21 @@ КонецПроцедуры +// Сформирует приглашение в облачном ЭДО. +// +// Параметры: +// ОповещениеОЗавершении - ОписаниеОповещения +// Приглашения - Массив из см. ПриглашенияЭДОКлиентСервер.НовоеИсходящееПриглашение +Процедура СформироватьАвтоматическиеПриглашения(ОповещениеОЗавершении, Приглашения) Экспорт + + ПараметрыДействия = ПараметрыДействияСПриглашениями(ОповещениеОЗавершении, Приглашения); + + ДлительнаяОперация = ПриглашенияЭДОИнтеграцияОблакаВызовСервера.СформироватьПриглашенияВФоне(Приглашения); + + ОжидатьЗавершениеДействияСПриглашениями(ДлительнаяОперация, ПараметрыДействия); + +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции diff --git a/Конфигурация/CommonModules/ПриглашенияЭДОСлужебный/Ext/Module.bsl b/Конфигурация/CommonModules/ПриглашенияЭДОСлужебный/Ext/Module.bsl index ab3c8989f..105999c50 100644 --- a/Конфигурация/CommonModules/ПриглашенияЭДОСлужебный/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ПриглашенияЭДОСлужебный/Ext/Module.bsl @@ -13,7 +13,7 @@ КонтекстДиагностики = ДанныеЗаполненияНастройки.КонтекстДиагностики; Если ПараметрыЗаполнения.ОбновитьКэшНастроек Тогда - СинхронизацияЭДО.ОбновитьКешиОператоровЭДОИФорматов(КонтекстДиагностики); + СинхронизацияЭДО.ОбновитьКешиОператоровЭДОИФорматовВФоне(КонтекстДиагностики); КонецЕсли; Если ПараметрыЗаполнения.ЗаполнитьОператоровЭДО Тогда @@ -613,12 +613,18 @@ Новый ОписаниеТипов("Строка",,,, Новый КвалификаторыСтроки(70))); Для Каждого СтрокаТЧ Из Приглашения Цикл + + Если ТрансграничныйЭДО.ЗапрещеноСоздаватьКонтрагентовАвтоматически(СтрокаТЧ.ИдентификаторКонтрагента) Тогда + Продолжить; + КонецЕсли; + Если СтрокаТЧ.НовыйКонтрагент = 1 Тогда НоваяСтрока = ТаблицаИдентификаторов.Добавить(); ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаТЧ); Иначе СтрокаТЧ.ГотовоКПринятию = Истина; КонецЕсли; + КонецЦикла; Если ТаблицаИдентификаторов.Количество() = 0 Тогда @@ -1079,6 +1085,7 @@ // * ТекстПриглашения - Строка // * ОписаниеОшибки - Строка // * ПричинаОтказа - Строка +// * Автоматическое - Булево Функция НовыеЗначенияСвойствПриглашенияДляОбновления() Экспорт Данные = Новый Структура; Данные.Вставить("Ключ", ""); @@ -1098,6 +1105,7 @@ Данные.Вставить("ТекстПриглашения", ""); Данные.Вставить("ОписаниеОшибки", ""); Данные.Вставить("ПричинаОтказа", ""); + Данные.Вставить("Автоматическое", Ложь); Возврат Данные; КонецФункции @@ -1384,6 +1392,60 @@ КонецФункции +// Возвращаемое значение: +// Неопределено, Структура - Данные приглашения: +// * КлючПриглашения - Строка +// * Статус - ПеречислениеСсылка.СтатусыПриглашений +// * Контрагент - Неопределено, +// ОпределяемыйТип.УчастникЭДО +// * КонтрагентНаименование - Строка +// * КонтрагентПредставление - Строка +// * КонтрагентИНН - Строка +// * КонтрагентКПП - Строка +// * ИдентификаторКонтрагента - Строка +// * Организация - Неопределено, +// ОпределяемыйТип.Организация +// * СпособОбмена - ПеречислениеСсылка.СпособыОбменаЭД +// * ИдентификаторОрганизации - Строка +// * ОписаниеОшибки - Строка +// * ТекстПриглашения - Строка +// * ЭлектроннаяПочта - Строка +// * ОператорКонтрагента - Строка +// * ОператорОрганизации - Строка +// * ПричинаОтказа - Строка +// * EmailОрганизации - Строка +// * ОбменМеждуСобственнымиОрганизациями - Булево +// * ИспользоватьЦентрЭДО - Булево +// * Автоматическое - Булево +Функция НовыеДанныеПриглашения() Экспорт + + Данные = Новый Структура; + Данные.Вставить("КлючПриглашения", ""); + Данные.Вставить("Статус", Перечисления.СтатусыПриглашений.ПустаяСсылка()); + Данные.Вставить("Контрагент", Неопределено); + Данные.Вставить("КонтрагентНаименование", ""); + Данные.Вставить("КонтрагентПредставление", ""); + Данные.Вставить("КонтрагентИНН", ""); + Данные.Вставить("КонтрагентКПП", ""); + Данные.Вставить("ИдентификаторКонтрагента", ""); + Данные.Вставить("Организация", Неопределено); + Данные.Вставить("СпособОбмена", Перечисления.СпособыОбменаЭД.ПустаяСсылка()); + Данные.Вставить("ИдентификаторОрганизации", ""); + Данные.Вставить("ОписаниеОшибки", ""); + Данные.Вставить("ТекстПриглашения", ""); + Данные.Вставить("ЭлектроннаяПочта", ""); + Данные.Вставить("ОператорКонтрагента", ""); + Данные.Вставить("ОператорОрганизации", ""); + Данные.Вставить("ПричинаОтказа", ""); + Данные.Вставить("EmailОрганизации", ""); + Данные.Вставить("ОбменМеждуСобственнымиОрганизациями", Ложь); + Данные.Вставить("ИспользоватьЦентрЭДО", Ложь); + Данные.Вставить("Автоматическое", Ложь); + + Возврат Данные; + +КонецФункции + // Параметры: // КлючПриглашения - см. ПриглашенияЭДОКлиентСервер.НовыйКлючПриглашения // ЗаполнятьПредставлениеКонтрагента - Булево @@ -1410,6 +1472,7 @@ // * EmailОрганизации - Строка // * ОбменМеждуСобственнымиОрганизациями - Булево // * ЭтоОблачныйЭДО - Булево +// * Автоматическое - Булево Функция ДанныеПриглашения(КлючПриглашения, ЗаполнятьПредставлениеКонтрагента = Истина) Экспорт ИтоговыйЗапрос = Новый Запрос( @@ -1434,7 +1497,8 @@ | ПриглашенияКОбменуЭлектроннымиДокументами.Ключ КАК КлючПриглашения, | ТИПЗНАЧЕНИЯ(УчетныеЗаписиЭДО.Организация) = | ТИПЗНАЧЕНИЯ(ПриглашенияКОбменуЭлектроннымиДокументами.Контрагент) КАК ОбменМеждуСобственнымиОрганизациями, - | УчетныеЗаписиЭДО.ЭтоОблачныйЭДО КАК ЭтоОблачныйЭДО + | УчетныеЗаписиЭДО.ЭтоОблачныйЭДО КАК ЭтоОблачныйЭДО, + | ПриглашенияКОбменуЭлектроннымиДокументами.Автоматическое КАК Автоматическое |ИЗ | РегистрСведений.ПриглашенияКОбменуЭлектроннымиДокументами КАК ПриглашенияКОбменуЭлектроннымиДокументами | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.УчетныеЗаписиЭДО КАК УчетныеЗаписиЭДО @@ -1451,6 +1515,7 @@ // Запрос всегда должен быть в консистентном состоянии с частью текста запроса. ВызватьИсключение НСтр("ru = 'Не найдена заменяемая часть текста запроса.'"); КонецЕсли; + Если Не ЗаполнятьПредставлениеКонтрагента Тогда ТекстЗамены = """"""; ИтоговыйЗапрос.Текст = СтрЗаменить(ИтоговыйЗапрос.Текст, ЗаменяемаяЧастьТекстаЗапроса, ТекстЗамены); @@ -1482,6 +1547,7 @@ Данные.Вставить("EmailОрганизации", Выборка.EmailОрганизации); Данные.Вставить("ОбменМеждуСобственнымиОрганизациями", Выборка.ОбменМеждуСобственнымиОрганизациями); Данные.Вставить("ЭтоОблачныйЭДО", Выборка.ЭтоОблачныйЭДО); + Данные.Вставить("Автоматическое", Выборка.Автоматическое); Возврат Данные; diff --git a/Конфигурация/CommonModules/ПриглашенияЭДОСлужебныйКлиентСервер/Ext/Module.bsl b/Конфигурация/CommonModules/ПриглашенияЭДОСлужебныйКлиентСервер/Ext/Module.bsl index 52885965d..6e7ee8a23 100644 --- a/Конфигурация/CommonModules/ПриглашенияЭДОСлужебныйКлиентСервер/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ПриглашенияЭДОСлужебныйКлиентСервер/Ext/Module.bsl @@ -119,8 +119,7 @@ ШаблонОписаниеРешения = НСтр("ru = 'Уточните у контрагента, принял ли он приглашение. |Если приглашение принято - обратитесь в тех. поддержку'"); ОписаниеРешения = СтрШаблон(ШаблонОписаниеРешения, "приглашение", "обратитесь"); - ИначеЕсли СтатусПриглашения = ПредопределенноеЗначение("Перечисление.СтатусыПриглашений.Отклонено") - Или СтатусПриглашения = ПредопределенноеЗначение("Перечисление.СтатусыПриглашений.ТребуетсяОтправить") Тогда + ИначеЕсли СтатусПриглашения = ПредопределенноеЗначение("Перечисление.СтатусыПриглашений.ТребуетсяОтправить") Тогда Идентификатор = "ТребуетсяОтправкаПриглашения" + ВидОперации; ОписаниеПроблемы = НСтр("ru = 'Приглашение к обмену электронными документами еще не было отправлено'"); Если ВидОперации = "Распаковка" Тогда @@ -132,6 +131,18 @@ |После того как оно будет принято, документ можно будет отправить.'"); ОписаниеРешения = СтрШаблон(ШаблонОписаниеРешения, "приглашение"); КонецЕсли; + ИначеЕсли СтатусПриглашения = ПредопределенноеЗначение("Перечисление.СтатусыПриглашений.Отклонено") Тогда + Идентификатор = "ТребуетсяПовторнаяОтправкаПриглашения" + ВидОперации; + ОписаниеПроблемы = НСтр("ru = 'Приглашение к обмену электронными документами было отклонено'"); + Если ВидОперации = "Распаковка" Тогда + ШаблонОписаниеРешения = НСтр("ru = 'Чтобы возобновить обмен электронными документами с контрагентом, отправьте приглашение повторно. + |После того как оно будет принято, транспортный контейнер можно будет распаковать.'"); + ОписаниеРешения = СтрШаблон(ШаблонОписаниеРешения, "приглашение"); + Иначе + ШаблонОписаниеРешения = НСтр("ru = 'Чтобы возобновить обмен электронными документами с контрагентом, отправьте приглашение повторно. + |После того как оно будет принято, документ можно будет отправить.'"); + ОписаниеРешения = СтрШаблон(ШаблонОписаниеРешения, "приглашение"); + КонецЕсли; ИначеЕсли СтатусПриглашения = ПредопределенноеЗначение("Перечисление.СтатусыПриглашений.Ошибка") Тогда Идентификатор = "ОшибкаПриглашения" + ВидОперации; ОписаниеПроблемы = НСтр("ru = 'Приглашение к обмену электронными документами находится в статусе ""Ошибка""'"); diff --git a/Конфигурация/CommonModules/ПроверкаДанныхКлиентСервер/Ext/Module.bsl b/Конфигурация/CommonModules/ПроверкаДанныхКлиентСервер/Ext/Module.bsl index 760b9f0c0..3d976c4d1 100644 --- a/Конфигурация/CommonModules/ПроверкаДанныхКлиентСервер/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ПроверкаДанныхКлиентСервер/Ext/Module.bsl @@ -85,7 +85,16 @@ КонецФункции -Функция РегНомерПФРСоответствуетТребованиям(Знач РегНомерПФР) Экспорт +// Проверяет соответствие регистрационного номера в ПФР требованиям к формату. +// +// Параметры: +// РегНомерПФР - Строка - проверяемый регистрационный номер в формате XXX-XXX-XXXXXX. +// ТекстОшибки - Строка - в этот параметр помещается описание ошибки, если номер не соответствует требованиям. +// +// Возвращаемое значение: +// Булево - Истина, если номер соответствует требованиям или не заполнен; Ложь - в противном случае. +// +Функция РегНомерПФРСоответствуетТребованиям(Знач РегНомерПФР, ТекстОшибки = "") Экспорт РегНомерПФР = СокрЛП(РегНомерПФР); Если Не ЗначениеЗаполнено(РегНомерПФР) Тогда @@ -93,12 +102,14 @@ КонецЕсли; Если СтрДлина(СокрЛП(РегНомерПФР)) <> 14 Тогда + ТекстОшибки = НСтр("ru = 'Регистрационный номер задан неполностью'"); Возврат Ложь; КонецЕсли; Если Не СтроковыеФункцииКлиентСервер.ТолькоЦифрыВСтроке(Сред(СокрЛП(РегНомерПФР), 1, 3)) Или Не СтроковыеФункцииКлиентСервер.ТолькоЦифрыВСтроке(Сред(СокрЛП(РегНомерПФР), 5, 3)) Или Не СтроковыеФункцииКлиентСервер.ТолькоЦифрыВСтроке(Сред(СокрЛП(РегНомерПФР), 9)) Тогда + ТекстОшибки = НСтр("ru = 'Регистрационный номер должен состоять из групп цифр, разделенных дефисами'"); Возврат Ложь; КонецЕсли; diff --git a/Конфигурация/CommonModules/ПроверкаИПодборПродукцииЕГАИСКлиент/Ext/Module.bsl b/Конфигурация/CommonModules/ПроверкаИПодборПродукцииЕГАИСКлиент/Ext/Module.bsl index 965d14607..cc851dbff 100644 --- a/Конфигурация/CommonModules/ПроверкаИПодборПродукцииЕГАИСКлиент/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ПроверкаИПодборПродукцииЕГАИСКлиент/Ext/Module.bsl @@ -7,7 +7,6 @@ Если ШтрихкодированиеИСКлиентСервер.ЭтоКонтекстОбъекта(Форма, "Документ.АктПостановкиНаБалансЕГАИС") Или ШтрихкодированиеИСКлиентСервер.ЭтоКонтекстОбъекта(Форма, "Документ.АктСписанияЕГАИС") Или ШтрихкодированиеИСКлиентСервер.ЭтоКонтекстОбъекта(Форма, "Документ.ОтчетОбИмпортеЕГАИС") - Или ШтрихкодированиеИСКлиентСервер.ЭтоКонтекстОбъекта(Форма, "Документ.ТТНВходящаяЕГАИС") Или ШтрихкодированиеИСКлиентСервер.ЭтоКонтекстОбъекта(Форма, "Документ.ТТНИсходящаяЕГАИС") Или ШтрихкодированиеИСКлиентСервер.ЭтоКонтекстОбъекта(Форма, "Документ.ЧекЕГАИС") Или ШтрихкодированиеИСКлиентСервер.ЭтоКонтекстОбъекта(Форма, "Документ.ЧекЕГАИСВозврат") @@ -17,6 +16,10 @@ ПроверитьЗаполнениеНоменклатуры(Форма, "Товары", Отказ); + ИначеЕсли ШтрихкодированиеИСКлиентСервер.ЭтоКонтекстОбъекта(Форма, "Документ.ТТНВходящаяЕГАИС") Тогда + + ПроверитьЗаполнениеПризнакМаркированнойПродукции(Форма, Отказ); + ИначеЕсли ШтрихкодированиеИСКлиентСервер.ЭтоКонтекстОбъекта(Форма, "Документ.ОтчетОПроизводствеЕГАИС") И ПараметрыОткрытияФормыПроверки.Сценарий = 1 Тогда @@ -116,6 +119,42 @@ КонецПроцедуры +Процедура ПроверитьЗаполнениеПризнакМаркированнойПродукции(Форма, Отказ) + + Если Отказ Тогда + Возврат; + КонецЕсли; + ПризнакиМаркировки = ИнтеграцияЕГАИСВызовСервера.ПризнакиМаркировки(Форма.Объект.Товары); + ШаблонОшибки1 = НСтр("ru = 'В строке %1 таблицы %2 не заполнена номенклатура'"); + ШаблонОшибки2 = НСтр("ru = 'В строке %1 таблицы %2 не заполнена алкогольная продукция'"); + ШаблонОшибки3 = НСтр("ru = 'В строке %1 таблицы %2 номенклатура не настроена как алкогольная продукция'"); + ШаблонОшибки4 = НСтр("ru = 'В строке %1 таблицы %2 номенклатура маркируемая, вид алкогольной продукции - немаркируемый'"); + ШаблонОшибки5 = НСтр("ru = 'В строке %1 таблицы %2 номенклатура немаркируемая, вид алкогольной продукции - маркируемый'"); + Для Каждого СтрокаТЧ Из Форма.Объект.Товары Цикл + Шаблон = Неопределено; + Путь = Неопределено; + Номенклатура = ПризнакиМаркировки.Номенклатура[СтрокаТЧ.Номенклатура]; + АлкогольнаяПродукция = ПризнакиМаркировки.АлкогольнаяПродукция[СтрокаТЧ.АлкогольнаяПродукция]; + Если Не ЗначениеЗаполнено(СтрокаТЧ.Номенклатура) Тогда + Шаблон = ШаблонОшибки1; + ИначеЕсли Не ЗначениеЗаполнено(СтрокаТЧ.АлкогольнаяПродукция) Тогда + Шаблон = ШаблонОшибки2; + Путь = ОбщегоНазначенияКлиентСервер.ПутьКТабличнойЧасти("Объект.Товары", СтрокаТЧ.НомерСтроки, "АлкогольнаяПродукция"); + ИначеЕсли Не КонструкторИСОбщегоНазначенияКлиентСервер.ЭтоПродукцияЕГАИС(Номенклатура.КлючВидовПродукции) Тогда + Шаблон = ШаблонОшибки3; + ИначеЕсли КонструкторИСОбщегоНазначенияКлиентСервер.ЭтоМаркируемаяПродукцияЕГАИС(Номенклатура.КлючВидовПродукции) <> АлкогольнаяПродукция Тогда + Шаблон = ?(АлкогольнаяПродукция, ШаблонОшибки5, ШаблонОшибки4); + КонецЕсли; + Если Шаблон <> Неопределено Тогда + Ошибка = СтрШаблон(Шаблон, СтрокаТЧ.НомерСтроки, "Товары"); + Путь = ?(Путь <> Неопределено, Путь, + ОбщегоНазначенияКлиентСервер.ПутьКТабличнойЧасти("Объект.Товары", СтрокаТЧ.НомерСтроки, "Номенклатура")); + ОбщегоНазначенияКлиент.СообщитьПользователю(Ошибка,,Путь,,Отказ); + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + #КонецОбласти #КонецОбласти diff --git a/Конфигурация/CommonModules/ПроверкаИПодборПродукцииИСМП/Ext/Module.bsl b/Конфигурация/CommonModules/ПроверкаИПодборПродукцииИСМП/Ext/Module.bsl index a61f79f03..1cd2aac22 100644 --- a/Конфигурация/CommonModules/ПроверкаИПодборПродукцииИСМП/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ПроверкаИПодборПродукцииИСМП/Ext/Module.bsl @@ -548,14 +548,8 @@ // ОбновлениеТаблицыТоваров - Булево - Обновление таблицы товаров // Сценарий - Число - Сценарий Процедура ПрименитьКешШтрихкодовУпаковок(Форма, ОбновлениеТаблицыТоваров = Ложь, Сценарий = 0) Экспорт - - ПараметрыИнтеграцииМассив = Неопределено; - Для Каждого ВидПродукции Из КонструкторИСОбщегоНазначенияКлиентСервер.ВидыПродукцииИСМП(Истина) Цикл - ПараметрыИнтеграцииМассив = Форма.ПараметрыИнтеграцииГосИС.Получить(ВидПродукции); - Если ПараметрыИнтеграцииМассив <> Неопределено Тогда - Прервать; - КонецЕсли; - КонецЦикла; + + ПараметрыИнтеграцииМассив = Форма.ПараметрыИнтеграцииГосИС.Получить("ФормаПроверкиИПодбора"); Если ПараметрыИнтеграцииМассив = Неопределено Тогда Возврат; diff --git a/Конфигурация/CommonModules/ПроверкаИПодборПродукцииИСМПКлиент/Ext/Module.bsl b/Конфигурация/CommonModules/ПроверкаИПодборПродукцииИСМПКлиент/Ext/Module.bsl index d8b565bf5..939dc78af 100644 --- a/Конфигурация/CommonModules/ПроверкаИПодборПродукцииИСМПКлиент/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ПроверкаИПодборПродукцииИСМПКлиент/Ext/Module.bsl @@ -542,7 +542,7 @@ И ТипЗнч(Форма.ПроверяемыйДокумент) = Тип("ДокументСсылка.МаркировкаТоваровИСМП") Тогда СпособВводаВОборот = ШтрихкодированиеИСМПКлиентСервер.СпособВводаВОборотСУЗПоВидуОперации( ПроверкаИПодборПродукцииИСМПВызовСервера.ОперацияДокументаМаркировкиТоваровов(Форма.ПроверяемыйДокумент), - ТоварныеГруппы); + Форма.ДопустимыеВидыПродукции); Если ЗначениеЗаполнено(СпособВводаВОборот) Тогда СтруктураОтбора.Вставить("СпособВводаВОборот", СпособВводаВОборот); КонецЕсли; diff --git a/Конфигурация/CommonModules/ПроверкаКонтрагентаКлиентСервер/Ext/Module.bsl b/Конфигурация/CommonModules/ПроверкаКонтрагентаКлиентСервер/Ext/Module.bsl index fc2b79c87..ea07bc5ea 100644 --- a/Конфигурация/CommonModules/ПроверкаКонтрагентаКлиентСервер/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ПроверкаКонтрагентаКлиентСервер/Ext/Module.bsl @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2025, ООО 1С-Софт +// Copyright (c) 2026, ООО 1С-Софт // Все права защищены. Эта программа и сопроводительные материалы предоставляются // в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) // Текст лицензии доступен по ссылке: @@ -46,13 +46,11 @@ Возврат; КонецЕсли; МодульСПАРКРискиКлиентСервер = ОбщегоНазначения.ОбщийМодуль("СПАРКРискиКлиентСервер"); - МодульСПАРКРискиВызовСервера = ОбщегоНазначения.ОбщийМодуль("СПАРКРискиВызовСервера"); #Иначе Если Не ОбщегоНазначенияКлиент.ПодсистемаСуществует("ИнтернетПоддержкаПользователей.СПАРКРиски") Тогда Возврат; КонецЕсли; МодульСПАРКРискиКлиентСервер = ОбщегоНазначенияКлиент.ОбщийМодуль("СПАРКРискиКлиентСервер"); - МодульСПАРКРискиВызовСервера = ОбщегоНазначенияКлиент.ОбщийМодуль("СПАРКРискиВызовСервера"); #КонецЕсли Форма.ИндексыСПАРКРиски = РезультатИндексыКонтрагента; @@ -87,8 +85,6 @@ Элементы.КартинкаОжиданиеЗагрузкиИндексовСПАРКРиски.Видимость = Ложь; - ЕстьОшибкаПодключения = Ложь; - ВидОшибки = РезультатИндексыКонтрагента.ВидОшибки; СостояниеВыводаДанных = РезультатИндексыКонтрагента.СостояниеВыводаДанных; СостояниеЗагрузкиДанных = РезультатИндексыКонтрагента.СостояниеЗагрузкиДанных; @@ -347,7 +343,6 @@ КонецПроцедуры - Функция СокращенноеЗначениеЧисла( Знач Значение, Знач ЭтоВТысячах = Истина, @@ -391,4 +386,34 @@ КонецФункции +// Возвращает наименование контрагента с сокращенными организационно-правовыми формами. +// +// Параметры: +// Наименование - Строка - полное наименование контрагента или организации. +// +// Возвращаемое значение: +// Строка - наименование с замененными полными названиями организационно-правовых форм на сокращения. +// +Функция СократитьНаименование(Наименование) Экспорт + + Результат = Наименование; + + СписокОПФ = Новый Соответствие; + СписокОПФ.Вставить("Общество с ограниченной ответственностью", "ООО"); + СписокОПФ.Вставить("Публичное акционерное общество", "ПАО"); + СписокОПФ.Вставить("Открытое акционерное общество", "ОАО"); + СписокОПФ.Вставить("Закрытое акционерное общество", "ЗАО"); + СписокОПФ.Вставить("Акционерное общество", "АО"); + СписокОПФ.Вставить("Индивидуальный предприниматель", "ИП"); + СписокОПФ.Вставить("Федеральное государственное унитарное предприятие", "ФГУП"); + + Для Каждого ОПФ Из СписокОПФ Цикл + Результат = СтрЗаменить(Результат, ОПФ.Ключ, ОПФ.Значение); + Результат = СтрЗаменить(Результат, ВРег(ОПФ.Ключ), ОПФ.Значение); + КонецЦикла; + + Возврат Результат; + +КонецФункции + #КонецОбласти diff --git a/Конфигурация/CommonModules/ПроверкаКонтрагентовФНС/Ext/Module.bsl b/Конфигурация/CommonModules/ПроверкаКонтрагентовФНС/Ext/Module.bsl index 97bfa3e7e..a655eb983 100644 --- a/Конфигурация/CommonModules/ПроверкаКонтрагентовФНС/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ПроверкаКонтрагентовФНС/Ext/Module.bsl @@ -28,6 +28,10 @@ Методы.Вставить("УстановитьРасписаниеПроверкиКэшаСостояний"); + Если ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.БазоваяФункциональность") Тогда + Методы.Вставить("ПроверкаКэшаСостоянийФНС"); + КонецЕсли; + КонецПроцедуры #КонецОбласти diff --git a/Конфигурация/CommonModules/ПроизводствоСервер/Ext/Module.bsl b/Конфигурация/CommonModules/ПроизводствоСервер/Ext/Module.bsl index 7bd7c2665..b7374587c 100644 --- a/Конфигурация/CommonModules/ПроизводствоСервер/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ПроизводствоСервер/Ext/Module.bsl @@ -4499,10 +4499,8 @@ НоваяСтрока.Ссылка = СтрокаУзел.Ссылка; НоваяСтрока.Этап = СтрокаУзел.Этап; НоваяСтрока.НомерСтроки = СтрокаУзел.НомерСтроки; - НоваяСтрока.Количество = СтрокаУзел.Количество * СтрокаСостава.Количество - * СтрокаСостава.ЕдиницаИзмеренияКоэффициент; - НоваяСтрока.КоличествоПродукции = СтрокаУзел.КоличествоПродукции * СтрокаСостава.КоличествоПродукции - * СтрокаСостава.ЕдиницаИзмеренияКоэффициент; + НоваяСтрока.Количество = СтрокаУзел.Количество * СтрокаСостава.Количество; + НоваяСтрока.КоличествоПродукции = СтрокаУзел.КоличествоПродукции * СтрокаСостава.КоличествоПродукции; НоваяСтрока.ПутьСпецификации.Добавить(СтрокаУзел.Ссылка); Если СтрокаСостава.ТипСтрокиСостава = Перечисления.ТипыСтрокСоставаСпецификации.Узел Тогда diff --git a/Конфигурация/CommonModules/ПрослеживаемостьУНФ/Ext/Module.bsl b/Конфигурация/CommonModules/ПрослеживаемостьУНФ/Ext/Module.bsl index eda04c43f..68f89c547 100644 --- a/Конфигурация/CommonModules/ПрослеживаемостьУНФ/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ПрослеживаемостьУНФ/Ext/Module.bsl @@ -2920,6 +2920,8 @@ Запрос.Текст = ТекстЗапросаДвиженияПрослеживаемыхТоваровПеремещениеСписаниеНаРасходы(); ИначеЕсли ТипЗнч(ДокументСсылка) = Тип("ДокументСсылка.АктВыполненныхРабот") Тогда Запрос.Текст = ТекстЗапросаДвиженияПрослеживаемыхАктВыполненныхРабот(); + ИначеЕсли ТипЗнч(ДокументСсылка) = Тип("ДокументСсылка.КорректировкаРеализации") Тогда + Запрос.Текст = ТекстЗапросаДвиженияПрослеживаемыхТоваровКорректировкаРеализации(); Иначе Запрос.Текст = ТекстЗапросаДвиженияПрослеживаемыхТоваровОбщий(); КонецЕсли; @@ -4321,6 +4323,46 @@ КонецФункции +Функция ТекстЗапросаДвиженияПрослеживаемыхТоваровКорректировкаРеализации() + + Возврат + "ВЫБРАТЬ + | Шапка.Дата КАК Период, + | Шапка.Ссылка КАК Регистратор, + | СведенияПрослеживаемости.НомерСтроки КАК НомерСтроки, + | СведенияПрослеживаемости.ВидДвижения КАК ВидДвижения, + | &Организация КАК Организация, + | СведенияПрослеживаемости.РНПТ КАК РНПТ, + | ВЫБОР + | КОГДА СведенияПрослеживаемости.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход) + | И СведенияПрослеживаемости.СтранаПроисхождения = ЗНАЧЕНИЕ(Справочник.СтраныМира.ПустаяСсылка) + | ТОГДА ТаблицаЗапасы.СтранаПроисхождения + | КОГДА СведенияПрослеживаемости.Комплектующие = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка) + | ТОГДА ВЫБОР + | КОГДА СведенияПрослеживаемости.Количество < 0 + | ТОГДА ТаблицаЗапасы.СтранаПроисхожденияДоИзменения + | ИНАЧЕ ТаблицаЗапасы.СтранаПроисхождения + | КОНЕЦ + | ИНАЧЕ СведенияПрослеживаемости.СтранаПроисхождения + | КОНЕЦ КАК СтранаПроисхождения, + | ТаблицаЗапасы.Номенклатура КАК Номенклатура, + | ТаблицаЗапасы.Характеристика КАК Характеристика, + | ТаблицаЗапасы.Партия КАК Партия, + | СведенияПрослеживаемости.Количество КАК Количество, + | СведенияПрослеживаемости.КоличествоПрослеживаемости КАК КоличествоПрослеживаемости, + | &Контрагент КАК Контрагент, + | СведенияПрослеживаемости.Комплектующие КАК Комплектующие, + | ЕСТЬNULL(ТаблицаЗапасы.КорректируемыйДокумент, Шапка.КорректируемыйДокумент) КАК КорректируемыйДокумент + |ИЗ + | ВременнаяТаблицаСведенияПрослеживаемости КАК СведенияПрослеживаемости + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВременнаяТаблицаЗапасы КАК ТаблицаЗапасы + | ПО СведенияПрослеживаемости.ИдентификаторСтроки = ТаблицаЗапасы.ИдентификаторСтроки, + | ВременнаяТаблицаШапка КАК Шапка + |ГДЕ + | НЕ &ЭтоПоступлениеИзЕАЭС"; + +КонецФункции + Функция ТекстЗапросаДвиженияПрослеживаемыхТоваровОбщий() Возврат diff --git a/Конфигурация/CommonModules/РаботаСАбонентамиЭДО/Ext/Module.bsl b/Конфигурация/CommonModules/РаботаСАбонентамиЭДО/Ext/Module.bsl index 8ce389ff2..a87776ffd 100644 --- a/Конфигурация/CommonModules/РаботаСАбонентамиЭДО/Ext/Module.bsl +++ b/Конфигурация/CommonModules/РаботаСАбонентамиЭДО/Ext/Module.bsl @@ -1,16 +1,38 @@  #Область СлужебныйПрограммныйИнтерфейс +// Возвращает признак того, что абонент не требует приглашения для начала ЭДО +// +// Параметры: +// ИдентификаторУчетнойЗаписи - Строка +// +// Возвращаемое значение: +// Булево +Функция АбонентНеТребуетПриглашений(ИдентификаторУчетнойЗаписи) Экспорт + + СписокИдентификаторов = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(ИдентификаторУчетнойЗаписи); + АбонентИТребованиеПриглашения = АбонентыИТребованияПриглашений(СписокИдентификаторов); + + Если АбонентИТребованиеПриглашения[ИдентификаторУчетнойЗаписи] = Неопределено Тогда + Возврат Ложь; + КонецЕсли; + + Возврат АбонентИТребованиеПриглашения[ИдентификаторУчетнойЗаписи]; + +КонецФункции + // Возвращает описание запроса, в результате которого будут содержаться абоненты электронного документооборота. // Запрос содержит следующие поля: // * СрокДействияСертификатов - Дата. // * ДатаПоследнейАктивности - Дата. // * ИдентификаторЭДО - Строка. // * КраткоеОписание - Строка. +// * ПодробноеОписание - Строка. +// * НеТребуетПриглашений - Булево. // // Параметры: // ИмяВременнойТаблицы - Строка - таблица, в которую будет помещен результат запроса -// Отбор - Строка - см. НовыйОтборАбонентовЭДО +// Отбор - см. НовыйОтборАбонентовЭДО // Возвращаемое значение: // см. ОбщегоНазначенияБЭД.НовоеОписаниеЗапроса Функция ЗапросАбонентовЭДО(ИмяВременнойТаблицы, Отбор = Неопределено) Экспорт @@ -25,7 +47,8 @@ | АбонентыЭДО.ДатаПоследнейАктивности КАК ДатаПоследнейАктивности, | АбонентыЭДО.ИдентификаторЭДО КАК ИдентификаторЭДО, | АбонентыЭДО.КраткоеОписание КАК КраткоеОписание, - | АбонентыЭДО.ПодробноеОписание КАК ПодробноеОписание + | АбонентыЭДО.ПодробноеОписание КАК ПодробноеОписание, + | АбонентыЭДО.НеТребуетПриглашений КАК НеТребуетПриглашений |ПОМЕСТИТЬ ИмяВременнойТаблицы |ИЗ | РегистрСведений.АбонентыЭДО КАК АбонентыЭДО @@ -177,6 +200,43 @@ КонецФункции +// Возвращает признак того, что абонент не требует приглашения для начала ЭДО +// +// Параметры: +// СписокИдентификаторовУчетныхЗаписей - Массив из Строка +// +// Возвращаемое значение: +// Соответствие из КлючИЗначение: +// * Ключ - Строка - Идентификатор ЭДО +// * Значение - Булево - если Истина - абонент не требует приглашения перед началом ЭДО +Функция АбонентыИТребованияПриглашений(СписокИдентификаторовУчетныхЗаписей) Экспорт + + АбонентыИТребованияПриглашений = Новый Соответствие(); + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ РАЗРЕШЕННЫЕ + | АбонентыЭДО.НеТребуетПриглашений КАК НеТребуетПриглашений, + | АбонентыЭДО.ИдентификаторЭДО КАК ИдентификаторЭДО + |ИЗ + | РегистрСведений.АбонентыЭДО КАК АбонентыЭДО + |ГДЕ + | АбонентыЭДО.ИдентификаторЭДО В(&ИдентификаторЭДО)"; + + Запрос.УстановитьПараметр("ИдентификаторЭДО", СписокИдентификаторовУчетныхЗаписей); + + РезультатЗапроса = Запрос.Выполнить(); + + ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); + Пока ВыборкаДетальныеЗаписи.Следующий() Цикл + АбонентыИТребованияПриглашений.Вставить(ВыборкаДетальныеЗаписи.ИдентификаторЭДО, + ВыборкаДетальныеЗаписи.НеТребуетПриглашений); + КонецЦикла; + + Возврат АбонентыИТребованияПриглашений; + +КонецФункции + // Получает данные об абонентах из сервиса настроек и обновляет данные в кеше. // // Параметры: diff --git a/Конфигурация/CommonModules/РаботаСАбонентамиЭДОВызовСервера/Ext/Module.bsl b/Конфигурация/CommonModules/РаботаСАбонентамиЭДОВызовСервера/Ext/Module.bsl index 60da0268d..0f8640b5c 100644 --- a/Конфигурация/CommonModules/РаботаСАбонентамиЭДОВызовСервера/Ext/Module.bsl +++ b/Конфигурация/CommonModules/РаботаСАбонентамиЭДОВызовСервера/Ext/Module.bsl @@ -17,4 +17,17 @@ КонецФункции +// Возвращает признак того, что абонент не требует приглашения для начала ЭДО +// +// Параметры: +// ИдентификаторУчетнойЗаписи - Строка +// +// Возвращаемое значение: +// Булево +Функция АбонентНеТребуетПриглашений(ИдентификаторУчетнойЗаписи) Экспорт + + Возврат РаботаСАбонентамиЭДО.АбонентНеТребуетПриглашений(ИдентификаторУчетнойЗаписи); + +КонецФункции + #КонецОбласти diff --git a/Конфигурация/CommonModules/РаботаСАбонентамиЭДОСлужебный/Ext/Module.bsl b/Конфигурация/CommonModules/РаботаСАбонентамиЭДОСлужебный/Ext/Module.bsl index 358f0076c..dfcdba95f 100644 --- a/Конфигурация/CommonModules/РаботаСАбонентамиЭДОСлужебный/Ext/Module.bsl +++ b/Конфигурация/CommonModules/РаботаСАбонентамиЭДОСлужебный/Ext/Module.bsl @@ -62,6 +62,11 @@ СписокИдентификаторов.Добавить(ВыборкаДетальныеЗаписи.ИдентификаторЭДО, Представление, Пометка); КонецЦикла; + Если ОбщегоНазначения.ПодсистемаСуществует("ЭлектронноеВзаимодействие.ОбменСГИСЭПД") Тогда + МодульОбменСГИСЭПД = ОбщегоНазначения.ОбщийМодуль("ОбменСГИСЭПД"); + МодульОбменСГИСЭПД.ПриПоискеУчетныхЗаписейАбонентов(Идентификаторы, КПП, СписокИдентификаторов); + КонецЕсли; + Возврат СписокИдентификаторов; КонецФункции @@ -354,6 +359,7 @@ | ЕСТЬNULL(АбонентыЭДО.ПодробноеОписание, """") КАК ИдентификаторКонтрагентаОписание, | ЕСТЬNULL(АбонентыЭДО.ИНН, """") КАК АбонентИНН, | ЕСТЬNULL(АбонентыЭДО.КПП, """") КАК АбонентКПП, + | ЕСТЬNULL(АбонентыЭДО.НеТребуетПриглашений, ЛОЖЬ) КАК АбонентНеТребуетПриглашений, | УчетныеЗаписиЭДО.ИдентификаторЭДО КАК ИдентификаторОрганизации, | УчетныеЗаписиЭДО.НаименованиеУчетнойЗаписи КАК ИдентификаторОрганизацииПредставление, | ЕСТЬNULL(УчетныеЗаписиЭДО.ОператорЭДО, """") КАК ОператорОрганизации, @@ -704,9 +710,30 @@ ТекущийКонтрагент = Выборка.Контрагент; - ЗаполнитьЗначенияСвойств(НоваяСтрока, Выборка); + ЗаполнитьЗначенияСвойств(НоваяСтрока, Выборка,, "АбонентНеТребуетПриглашений"); НоваяСтрока.ИдентификаторКонтрагентаПредставление = ИдентификаторКонтрагентаПредставление; + АбонентНеТребуетПриглашений = Ложь; + + Если Выборка.АбонентНеТребуетПриглашений Тогда + + АбонентНеТребуетПриглашений = Истина; + + Если ТрансграничныйЭДО.ЭтоИностранныйОператор(Выборка.ИдентификаторКонтрагента) Тогда + АбонентНеТребуетПриглашений = + ТрансграничныйЭДО.ИностранномуКонтрагентуДоступенОбменБезПриглашений( + Выборка.ИдентификаторКонтрагента); + ИначеЕсли НоваяСтрока.ТребуетсяСоглашениеПриПервомПодключении + Или НоваяСтрока.ОбязательнаяОтправкаЗаявкиНаРоуминг Тогда + + АбонентНеТребуетПриглашений = Ложь; + + КонецЕсли; + + КонецЕсли; + + НоваяСтрока.АбонентНеТребуетПриглашений = АбонентНеТребуетПриглашений; + Если ФормироватьПредставлениеСтатусаПриглашения Тогда Если ЗначениеЗаполнено(Выборка.КлючПриглашения) @@ -722,8 +749,17 @@ НоваяСтрока.СтатусПриглашенияПредставление = СтроковыеФункции.ФорматированнаяСтрока( "%2", НоваяСтрока.НавигационнаяСсылкаНаПриглашение, Выборка.СтатусПриглашенияСтрокой); + + ИначеЕсли АбонентНеТребуетПриглашений Тогда + + НоваяСтрока.СтатусПриглашенияПредставление = + СтроковыеФункции.ФорматированнаяСтрока(НСтр("ru = 'Не требуется'")); + Иначе - НоваяСтрока.СтатусПриглашенияПредставление = СтроковыеФункции.ФорматированнаяСтрока(НСтр("ru = 'Не отправлено'")); + + НоваяСтрока.СтатусПриглашенияПредставление = + СтроковыеФункции.ФорматированнаяСтрока(НСтр("ru = 'Не отправлено'")); + КонецЕсли; КонецЕсли; diff --git a/Конфигурация/CommonModules/РаботаСАдресами/Ext/Module.bsl b/Конфигурация/CommonModules/РаботаСАдресами/Ext/Module.bsl index 3a64687dd..6ebbabc4c 100644 --- a/Конфигурация/CommonModules/РаботаСАдресами/Ext/Module.bsl +++ b/Конфигурация/CommonModules/РаботаСАдресами/Ext/Module.bsl @@ -1178,7 +1178,7 @@ Адрес.country = ВРег(ДополнительнаяИнформацияАдреса.Страна); КонецЕсли; - РасчетноеПредставление = УправлениеКонтактнойИнформациейСлужебный.ПредставлениеКонтактнойИнформации(Адрес); + РасчетноеПредставление = РаботаСАдресамиКлиентСервер.ПредставлениеАдреса(Адрес, Ложь); Адрес.value = РасчетноеПредставление; Если ДополнительнаяИнформацияАдреса.Свойство("АдресВJSON") И ДополнительнаяИнформацияАдреса.АдресВJSON = Истина Тогда @@ -1647,9 +1647,13 @@ Методы.Вставить("ИсправитьУстаревшиеАдресаВФоне", Истина); Методы.Вставить("ИсправитьНекорректныеАдресаВФоне", Истина); Методы.Вставить("ИсправитьТипЗданияЛитерВАдресахВФоне", Истина); - Методы.Вставить("ВыявитьУстаревшиеАдреса"); - Методы.Вставить("ПроверитьАдресаНаСоответствиеАдресномуКлассификатору"); - Методы.Вставить("ПроверитьАдресаНаТипЗданияЛитер"); + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонтрольВеденияУчета") Тогда + Методы.Вставить("ПроверитьАдресаНаТипЗданияЛитер"); + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда + Методы.Вставить("ВыявитьУстаревшиеАдреса"); + Методы.Вставить("ПроверитьАдресаНаСоответствиеАдресномуКлассификатору"); + КонецЕсли; + КонецЕсли; КонецПроцедуры diff --git a/Конфигурация/CommonModules/РаботаСКлассификаторамиСлужебныйВМоделиСервиса/Ext/Module.bsl b/Конфигурация/CommonModules/РаботаСКлассификаторамиСлужебныйВМоделиСервиса/Ext/Module.bsl index 76b09178b..b631da63b 100644 --- a/Конфигурация/CommonModules/РаботаСКлассификаторамиСлужебныйВМоделиСервиса/Ext/Module.bsl +++ b/Конфигурация/CommonModules/РаботаСКлассификаторамиСлужебныйВМоделиСервиса/Ext/Module.bsl @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2024, ООО 1С-Софт +// Copyright (c) 2026, ООО 1С-Софт // Все права защищены. Эта программа и сопроводительные материалы предоставляются // в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) // Текст лицензии доступен по ссылке: @@ -24,6 +24,23 @@ #Область ИнтеграцияСБиблиотекойСтандартныхПодсистем +#Область БазоваяФункциональностьБСП + +// См. СтандартныеПодсистемыСервер.ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод +// +Процедура ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод(Методы) Экспорт + + Если ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.БазоваяФункциональность") Тогда + Методы.Вставить("ОбновлениеРазделенногоКлассификатора"); + Методы.Вставить("ОбновлениеРазделенныхДанныхНеРазделенногоКлассификатора"); + Методы.Вставить("УдалитьКэшПоставляемыхКлассификаторов"); + Методы.Вставить("ЗапланироватьОбновлениеДанныхОбластей"); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + #Область БСПОбновлениеИнформационнойБазы // СтандартныеПодсистемы.ОбновлениеВерсииИБ diff --git a/Конфигурация/CommonModules/РаботаСКонтрагентами/Ext/Module.bsl b/Конфигурация/CommonModules/РаботаСКонтрагентами/Ext/Module.bsl index ea3ecd5e4..cf083768a 100644 --- a/Конфигурация/CommonModules/РаботаСКонтрагентами/Ext/Module.bsl +++ b/Конфигурация/CommonModules/РаботаСКонтрагентами/Ext/Module.bsl @@ -18,34 +18,33 @@ // Возвращаемое значение: // Структура - сведения о юридическом лице: // * ИНН - Строка - ИНН юридического лица. -// * ЕГРЮЛ - Структура, Неопределено - сведения из ЮГРЮЛ. Поля: +// * ЕГРЮЛ - Неопределено, Структура - сведения из ЕГРЮЛ: // ** ИНН - Строка - ИНН юридического лица. -// ** КПП - Строка - КПП юридического лица. -// ** Наименование - Строка - представление юридического лица в учетной программе. -// ** НаименованиеПолное - Строка - полное наименование юридического лица. -// ** НаименованиеСокращенное - Строка - сокращенное наименование юридического лица. -// ** НаименованиеПолноеЕГРЮЛ - Строка - полное наименование юридического лица в ЕГРЮЛ. -// ** НаименованиеСокращенноеЕГРЮЛ - Строка - сокращенное наименование юридического лица в ЕГРЮЛ. -// ** НаименованиеПолноеНаАнглийском - Строка - полное наименование юридического лица на английском. -// ** НаименованиеСокращенноеНаАнглийском - Строка - сокращенное наименование юридического лица на английском. -// ** РегистрационныйНомер - Строка - ОГРН юридического лица. -// ** Статус - Структура - текущий статус юридического лица. Поля: -// *** Код - Строка - код статуса; -// *** Наименование - Строка - наименование статуса; -// ** РегистрирующийОрган - Структура - орган, зарегистрировавший юридическое лицо. Поля: -// *** Код - Строка - код органа; -// *** Наименование - Строка - наименование органа; -// ** НомерТиповогоУстава - Строка - Номер типового устава юридического лица. +// ** КПП - Строка, Неопределено - КПП юридического лица. +// ** Наименование - Строка, Неопределено - представление юридического лица в учетной программе. +// ** НаименованиеПолное - Строка, Неопределено - полное наименование юридического лица. +// ** НаименованиеСокращенное - Строка, Неопределено - сокращенное наименование юридического лица. +// ** НаименованиеПолноеЕГРЮЛ - Строка, Неопределено - полное наименование юридического лица в ЕГРЮЛ. +// ** НаименованиеСокращенноеЕГРЮЛ - Строка, Неопределено - сокращенное наименование юридического лица в ЕГРЮЛ. +// ** НаименованиеПолноеНаАнглийском - Строка, Неопределено - полное наименование юридического лица на английском. +// ** НаименованиеСокращенноеНаАнглийском - Строка, Неопределено - сокращенное наименование юридического лица на английском. +// ** РегистрационныйНомер - Строка, Неопределено - ОГРН юридического лица. +// ** Статус - Неопределено, Структура - текущий статус юридического лица. +// см. НовыйДанныеСтатуса. +// ** РегистрирующийОрган - Неопределено, Структура - орган, зарегистрировавший юридическое лицо. +// см. НовыйДанныеРегистрирующегоОргана. +// ** НомерТиповогоУстава - Строка, Неопределено - Номер типового устава юридического лица. // ** ПравоваяФорма - Строка, Неопределено - правовая форма юридического лица. -// ** ЮридическийАдрес - Структура, Неопределено - данные о юридическом адресе. +// ** ЮридическийАдрес - Неопределено, Структура - данные о юридическом адресе: // *** КонтактнаяИнформация - Строка - данные в формате JSON для заполнения реквизита // "Значение" контактной информации в табличной части КонтактнаяИнформация объекта // (см. описание подсистемы "Контактная информация" Библиотеки стандартных подсистем). // *** Представление - Строка - представление адреса. // *** Комментарий - Строка - произвольный комментарий. // *** Корректный - Булево - адрес является корректным по данным ФИАС; +// ** ЭлектроннаяПочта - Строка, Неопределено - адрес электронной почты; // ** Руководители - ТаблицаЗначений - устарело, рекомендуется использовать свойство "ДанныеРуководителей". -// Сведения о руководителях. Колонки: +// Сведения о руководителях: // *** Должность - Строка - должность руководителя. // *** Фамилия - Строка - фамилия руководителя. // *** Имя - Строка - имя руководителя. @@ -58,124 +57,64 @@ // *** ПредставлениеСкрытыхДанных - Строка - представление скрытых данных о руководителях. // Заполняется если СкрытыеДанные = Истина // *** Руководители - ТаблицаЗначений - сведения о руководителях. Заполняется если СкрытыеДанные = Ложь. Колонки: -// **** Должность - Строка - должность руководителя. -// **** Фамилия - Строка - фамилия руководителя. -// **** Имя - Строка - имя руководителя. -// **** Отчество - Строка - отчество руководителя. -// **** Представление - Строка - ФИО руководителя или представление скрытых данных о руководителях. -// **** ИНН - Строка - ИНН руководителя. -// **** ДатаЗаписи - Дата - дата записи о руководителе. -// **** ОрганизацииГдеРуководитель - ТаблицаЗначений - сведения об организациях, где руководитель. -// **** ОрганизацииГдеУчредитель - ТаблицаЗначений - сведения об организациях, где учредитель. -// **** ОрганизацииГдеРуководительПоФИО - Булево - если Истина, поиск проводился по ФИО руководителя, иначе по ИНН. -// **** ОрганизацииГдеУчредительПоФИО - Булево - если Истина, поиск проводился по ФИО руководителя, иначе по ИНН. -// ** РегистрацияВНалоговомОргане - Структура, Неопределено - данные о регистрации в ИФНС. -// *** Код - Строка - код налогового органа. -// *** Наименование - Строка - наименование налогового органа. -// *** ОКТМО - Строка - код ОКТМО налогового органа. -// *** ОКАТО - Строка - код ОКАТО налогового органа. -// *** ДатаРегистрации - Дата - дата постановки на учет в налоговом органе. -// ** ДатаРегистрации - Дата - дата регистрации юридического лица. +// см. НоваяТаблицаРуководителей. +// ** РегистрацияВНалоговомОргане - Неопределено, Структура - данные о регистрации в ИФНС. +// см. НоваяРегистрацияВНалоговомОргане. +// ** ДатаРегистрации - Дата, Неопределено - дата регистрации юридического лица. // ** ДатаПрекращенияДеятельности - Дата, Неопределено - дата прекращения деятельности юридического лица. -// ** РегистрацияВПенсионномФонде - Структура, Неопределено - данные о регистрации в ПФР. -// *** РегистрационныйНомерПФР - Строка - регистрационный номер юридического лица в ПФР. -// *** КодОрганаПФР - Строка - код органа ПФР. -// *** НаименованиеОрганаПФР - Строка - наименование органа ПФР. -// *** ДатаРегистрации - Дата - дата постановки на учет в ПФР. -// ** РегистрацияВФСС - Структура, Неопределено - данные о регистрации в ФСС. -// *** РегистрационныйНомерФСС - Строка - регистрационный номер юридического лица в ФСС. -// *** КодПодчиненности - Строка - код подчиненности органа ФСС. -// *** КодОрганаФСС - Строка - код органа ФСС. -// *** НаименованиеОрганаФСС - Строка - наименование органа ФСС. -// *** ДатаРегистрации - Дата - дата постановки на учет в ФСС. -// ** РегистрацияВСФР - Структура, Неопределено - данные о регистрации в СФР. -// *** РегистрационныйНомерСФР - Строка - регистрационный номер юридического лица в СФР. -// *** КодОрганаСФР - Строка - код органа СФР. -// *** НаименованиеОрганаСФР - Строка - наименование органа СФР. -// *** ДатаРегистрации - Дата - дата постановки на учет в СФР. -// ** ВидДеятельности - Структура - описание вида экономической деятельности. Поля: -// *** Код - Строка - код вида деятельности; -// *** Наименование - Строка- наименование вида деятельности; -// *** Классификатор - Строка - тип классификатор экономической деятельности, согласно которому указаны код и наименование; -// Значения: "ОКВЭД", "ОКВЭД2" -// ** ОткрытыеГосударственныеДанныеФНС - ТаблицаЗначений - открытые данные. Колонки: -// *** Год - Число - год, за который указаны данные; -// *** КоличествоСотрудников - Число, Неопределено - количество сотрудников; -// *** СуммаДоходов - Число, Неопределено - сумма доходов; -// *** СуммаРасходов - Число, Неопределено - сумма расходов; -// *** УчастиеВКГН - Строка, Неопределено - участие в консолидированной группе налогоплательщиков; -// *** НалогообложениеЕСХН, Неопределено - Булево - Истина, если применяется тип налогообложения ЕСХН; -// *** НалогообложениеУСН, Неопределено - Булево - Истина, если применяется тип налогообложения УСН; -// *** НалогообложениеЕНВД, Неопределено - Булево - Истина, если применяется тип налогообложения ЕНВД; -// *** НалогообложениеСРП, Неопределено - Булево - Истина, если применяется тип налогообложения СРП; -// *** СведенияОНалогах - ТаблицаЗначений - сведения о налогах. Колонки: -// **** Наименование - Строка - наименование налога; -// **** Уплачено - Число, Неопределено - сумма уплаченного налога. Неопределено - нет данных; -// **** Задолженность - Число, Неопределено - сумма задолженности по налогу. Неопределено - нет данных; -// **** Штраф - Число, Неопределено - сумма штрафа по налогу. Неопределено - нет данных; -// **** Пени - Число, Неопределено - сумма пеней по налогу. Неопределено - нет данных; -// ** ИсторияРеквизитов - Структура - история изменения реквизитов юридического лица. -// *** КПП - ТаблицаЗначений - история изменения значения реквизита КПП. Колонки: -// **** Дата - Дата - дата изменения КПП; -// **** Значение - Строка - значение реквизита КПП; -// *** Наименование - ТаблицаЗначений - история изменения наименования. Колонки: -// **** Дата - Дата - дата изменения наименования; -// **** НаименованиеПолное - Строка - полное наименование юридического лица; -// **** НаименованиеСокращенное - Строка - сокращенное наименование юридического лица; -// *** Адрес - ТаблицаЗначений - история изменения адреса. Колонки: -// **** Дата - Дата - дата изменения адреса; -// **** КонтактнаяИнформация - Строка - данные в формате JSON для заполнения реквизита -// "Значение" контактной информации в табличной части КонтактнаяИнформация объекта -// (см. описание подсистемы "Контактная информация" Библиотеки стандартных подсистем). -// **** Представление - Строка - представление адреса; -// **** Комментарий - Строка - произвольный комментарий; -// *** Статус - ТаблицаЗначений - история изменения статуса. Колонки: -// **** Дата - Дата - дата изменения наименования; -// **** Код - Строка - код статуса; -// **** Наименование - Строка - наименование статуса; -// *** РеквизитыДиректора - ТаблицаЗначений - история изменения реквизитов директора. Колонки: -// **** Дата - Дата - дата изменения реквизитов директора; -// **** ДатаОкончания - Дата - дата окончания действия реквизитов. -// Пустая дата, если директор действующий; -// **** ИНН - Строка - ИНН; -// **** Фамилия - Строка - фамилия директора; -// **** Имя - Строка - имя; -// **** Отчество - Строка - отчество; -// **** ВидДолжности - Строка - вид должности; -// **** НаименованиеДолжности - Строка - наименование должности; -// * РАФП - ТаблицаЗначений - сведения из РАФП. Колонки: +// ** РегистрацияВПенсионномФонде - Неопределено, Структура - данные о регистрации в ПФР. +// см. НоваяРегистрацияВПенсионномФонде. +// ** РегистрацияВФСС - Неопределено, Структура - данные о регистрации в ФСС. +// см. НоваяРегистрацияВФСС. +// ** РегистрацияВСФР - Неопределено, Структура - данные о регистрации в СФР. +// см. НоваяРегистрацияВСФР. +// ** ВидДеятельности - Неопределено, Структура - описание основного вида экономической деятельности. +// см. НовыйОписаниеВидаДеятельности. +// ** ОткрытыеГосударственныеДанныеФНС - ТаблицаЗначений - открытые государственные данные ФНС. +// см. НоваяТаблицаОткрытыеГосударственныеДанныеФНС. +// ** ИсторияРеквизитов - Структура - история изменений реквизитов юридического лица. +// см. НовыйИсторияРеквизитовЮридическогоЛица. +// ** ОписаниеОшибки - Строка - текст ошибки при получении данных +// ** КодОКВЭД - Строка, Неопределено - устарело, следует использовать ВидДеятельности.Код, код основного +// вида деятельности по классификатору ОКВЭД. +// ** ЭтоОКВЭД2 - Булево - устарело, следует использовать ВидДеятельности.Классификатор, код ОКВЭД +// приведен по классификатору редакции 2 или редакции 1. +// ** Руководитель - Неопределено, Структура - устарело, информация о руководителе: +// *** Фамилия - Строка - фамилия руководителя; +// *** Имя - Строка - имя руководителя; +// *** Отчество - Строка - отчество руководителя; +// *** Представление - Строка - ФИО руководителя; +// *** ДатаЗаписи - Дата - дата записи о руководителе; +// * РАФП - ТаблицаЗначений - сведения из РАФП: // ** КПП - Строка - КПП юридического лица; // ** ВидОбособленногоПодразделения - Строка - вид обособленного подразделения; // ** НаименованиеПолное - Строка - полное наименование представительства; -// ** РегистрацияВНалоговомОргане - Структура - информация о регистрации представительства в налоговом органе. +// ** РегистрацияВНалоговомОргане - Неопределено, Структура - информация о регистрации представительства в налоговом органе: // *** Код - Строка - код налогового органа. // *** Наименование - Строка - наименование налогового органа. // *** ДатаРегистрации - Дата - дата регистрации в налоговом органе; -// ** ЮридическийАдрес - Структура, Неопределено - юридический адрес: +// ** ЮридическийАдрес - Неопределено, Структура - юридический адрес: // *** КонтактнаяИнформация - Строка - данные в формате JSON для заполнения реквизита; // "Значение" контактной информации в табличной части КонтактнаяИнформация объекта // (см. описание подсистемы "Контактная информация" Библиотеки стандартных подсистем). // *** Представление - Строка - представление адреса; // *** Комментарий - Строка - произвольный комментарий; // *** Корректный - Булево - адрес является корректным по данным ФИАС; -// ** ВидДеятельности - Структура - описание основного вида экономической деятельности. Поля: -// *** Код - Строка - код вида деятельности; -// *** Наименование - Строка - наименование вида деятельности; -// *** Классификатор - Строка - тип классификатор экономической деятельности, согласно которому указаны код и наименование; -// Значения: "ОКВЭД", "ОКВЭД2" +// ** ВидДеятельности - Неопределено, Структура - описание основного вида экономической деятельности. +// см. НовыйОписаниеВидаДеятельности. // ** ПрочиеВидыДеятельности - ТаблицаЗначений - описание прочих видов экономической деятельности: // *** Код - Строка - код вида деятельности; // *** Наименование - Строка - наименование вида деятельности; // *** Классификатор - Строка - тип классификатор экономической деятельности, согласно которому указаны код и наименование. // Значения: "ОКВЭД", "ОКВЭД2"; // ** КоличествоИностранныхСотрудников - Число - количество иностранных сотрудников в представительстве; -// ** Руководитель - Структура, Неопределено - информация о руководителе: +// ** Руководитель - Неопределено, Структура - информация о руководителе: // *** Фамилия - Строка - фамилия руководителя; // *** Имя - Строка - имя руководителя; // *** Отчество - Строка - отчество руководителя; // *** Представление - Строка - ФИО руководителя; // *** ДатаЗаписи - Дата - дата записи о руководителе; -// ** Аккредитация - Структура - информация об аккредитации представительства. Поля: +// ** Аккредитация - Неопределено, Структура - информация об аккредитации представительства. Поля: // *** НомерЗаписиОбАккредитации - Строка - номер записи об аккредитации; // *** ДатаАккредитации - Дата - дата аккредитации; // *** КодУполномоченногоНалоговогоОргана - Строка - код уполномоченного налогового органа, @@ -185,7 +124,7 @@ // *** ДатаОкончанияСрокаАккредитации - Дата - дата окончания срока аккредитации; // *** ДатаПродленияАккредитации - Дата - дата принятия решения о продлении срока аккредитации; // *** ДатаОкончанияСрокаПродленияАккредитации - Дата - дата окончания срока продления аккредитации; -// ** ИностранноеЮридическоеЛицо - Структура - данные иностранной компании. Поля: +// ** ИностранноеЮридическоеЛицо - Неопределено, Структура - данные иностранной компании. Поля: // *** НаименованиеПолное - Строка - полное наименование иностранного юридического лица; // *** КодСтраны - Число - код страны регистрации по ОКСМ; // *** Страна - Строка - наименование страны регистрации; @@ -200,8 +139,7 @@ // **** РегистрационныйНомер - Строка - регистрационный номер; // **** НаименованиеОргана - Строка - наименование органа регистрации в стране регистрации; // **** ОсобенностиРежимаРегистрации - Строка - описание особенности режима регистрации; -// -// * ОписаниеОшибки - Строка - описание возникшей ошибки. +// * ОписаниеОшибки - Строка, Неопределено - описание возникшей ошибки. // Для обработки ошибки на клиентской части необходимо использовать метод // РаботаСКонтрагентамиКлиент.ОбработатьОшибку. // @@ -234,83 +172,71 @@ // коды и т.д. // // Параметры: -// ИНН - Строка - ИНН индивидуального предпринимателя, реквизиты которого надо получить. +// ИНН - Строка - ИНН индивидуального предпринимателя, реквизиты которого надо получить. // // Возвращаемое значение: -// - Структура - реквизиты индивидуального предпринимателя. -// * ИНН - Строка - ИНН предпринимателя. -// * Наименование - Строка - представление предпринимателя в учетной программе. -// * НаименованиеПолное - Строка - фамилия, имя, отчество предпринимателя. -// * НаименованиеСокращенное - Строка - фамилия, имя, отчество предпринимателя. -// * ВидИП - Строка - вид предпринимателя. -// * Фамилия - Строка - фамилия предпринимателя. -// * Имя - Строка - имя предпринимателя. -// * Отчество - Строка - отчество предпринимателя. -// * РегистрационныйНомер - Строка - ОГРНИП. -// * Пол - Строка, Неопределено - "1" - Мужской, "2" - Женский. -// * КодСтраныГражданства - Строка, Неопределено - код страны. -// * РегистрацияВНалоговомОргане - Структура, Неопределено - данные о регистрации в ИФНС. -// ** Код - Строка - код налогового органа. -// ** Наименование - Строка - наименование налогового органа. -// ** ОКТМО - Строка - код ОКТМО налогового органа. -// ** ОКАТО - Строка - код ОКАТО налогового органа. -// ** ДатаРегистрации - Дата - дата постановки на учет в налоговом органе. -// * ДатаРегистрации - Дата - дата регистрации предпринимателя. -// * РегистрацияВПенсионномФонде - Структура, Неопределено - данные о регистрации в ПФР. -// ** РегистрационныйНомерПФР - Строка - регистрационный номер предпринимателя в ПФР. -// ** КодОрганаПФР - Строка - код органа ПФР. -// ** НаименованиеОрганаПФР - Строка - наименование органа ПФР. -// ** ДатаРегистрации - Дата - дата постановки на учет в ПФР. -// * РегистрацияВФСС - Структура, Неопределено - данные о регистрации в ФСС. -// ** РегистрационныйНомерФСС - Строка - регистрационный номер предпринимателя в ФСС. -// ** КодПодчиненности - Строка - код подчиненности органа ФСС. -// ** КодОрганаФСС - Строка - код органа ФСС. -// ** НаименованиеОрганаФСС - Строка - наименование органа ФСС. -// ** ДатаРегистрации - Дата - дата постановки на учет в ФСС. -// * РегистрацияВСФР - Структура, Неопределено - данные о регистрации в СФР. -// *** РегистрационныйНомерСФР - Строка - регистрационный номер предпринимателя в СФР. -// *** КодОрганаСФР - Строка - код органа СФР. -// *** НаименованиеОрганаСФР - Строка - наименование органа СФР. -// *** ДатаРегистрации - Дата - дата постановки на учет в СФР. -// * СвидетельствоОРегистрации - Структура, Неопределено - данные свидетельства. -// ** Серия - Строка - серия свидетельства. -// ** Номер - Строка - номер свидетельства. -// ** Дата - Дата - дата выдачи свидетельства. -// * ВидДеятельности - Структура - описание вида экономической деятельности. Поля: -// ** Код - Строка - код вида деятельности; -// ** Наименование - Строка - наименование вида деятельности; -// ** Классификатор - Строка - тип классификатор экономической деятельности, согласно которому указаны код и наименование; -// Значения: "ОКВЭД", "ОКВЭД2" -// * ИсторияРеквизитов - Структура - история изменения реквизитов предпринимателя. -// ** ФИО - ТаблицаЗначений - история изменения ФИО; -// Колонки: -// *** Дата - Дата - дата изменения ФИО; -// *** Фамилия - Строка - фамилия; -// *** Имя - Строка - имя; -// *** Отчество - Строка - отчество; -// ** Гражданство - ТаблицаЗначений - история изменения гражданства; -// Колонки: -// *** Дата - Дата - дата изменения гражданства; -// *** КодСтраныГражданства - Строка, Неопределено - код страны; -// ** ОГРН - ТаблицаЗначений - история изменения ОГРН; -// Колонки: -// *** Дата - Дата - дата изменения ОГРН; -// *** Значение - Строка - значение ОГРН; -// *** ВидПредпринимателя - Структура - вид предпринимателя. -// **** Дата - Дата - дата изменения вида предпринимателя; -// **** Код - Строка - код вида предпринимателя; -// **** Наименование - Строка - наименование вида предпринимателя; -// *** Статус - Структура - статус предпринимателя. -// **** Дата - Дата - дата изменения статуса; -// **** Код - Строка - код статуса; -// **** Наименование - Строка - наименование статуса; -// * ОписаниеОшибки - Строка - описание возникшей ошибки. -// Для обработки ошибки на клиентской части необходимо использовать метод -// РаботаСКонтрагентамиКлиент.ОбработатьОшибку. -// * КодОКВЭД (Устарело) - Строка - устарело, следует использовать ВидДеятельности.Код, код основного -// вида деятельности по классификатору ОКВЭД. -// * ЭтоОКВЭД2 (Устарело) - Булево - устарело, следует использовать ВидДеятельности.Классификатор, код ОКВЭД -// приведен по классификатору редакции 2 или редакции 1. +// Структура - реквизиты индивидуального предпринимателя: +// * ИНН - Строка - ИНН предпринимателя. +// * Наименование - Неопределено, Строка - представление предпринимателя в учетной программе. +// * НаименованиеПолное - Неопределено, Строка - фамилия, имя, отчество предпринимателя. +// * НаименованиеСокращенное - Неопределено, Строка - фамилия, имя, отчество предпринимателя. +// * ВидИП - Неопределено, Строка - вид предпринимателя. +// * Фамилия - Неопределено, Строка - фамилия предпринимателя. +// * Имя - Неопределено, Строка - имя предпринимателя. +// * Отчество - Неопределено, Строка - отчество предпринимателя. +// * ФамилияНаАнглийском - Неопределено, Строка - фамилия предпринимателя на английском. +// * ИмяНаАнглийском - Неопределено, Строка - имя предпринимателя на английском. +// * ОтчествоНаАнглийском - Неопределено, Строка - отчество предпринимателя на английском. +// * РегистрационныйНомер - Неопределено, Строка - ОГРНИП. +// * Пол - Неопределено, Строка - "1" - Мужской, "2" - Женский. +// * КодСтраныГражданства - Неопределено, Строка - код страны. +// * РегистрацияВНалоговомОргане - Неопределено, Структура - данные о регистрации в ИФНС: +// ** Код - Строка - код налогового органа. +// ** Наименование - Строка - наименование налогового органа. +// ** ОКТМО - Строка - код ОКТМО налогового органа. +// ** ОКАТО - Строка - код ОКАТО налогового органа. +// ** ДатаРегистрации - Дата - дата постановки на учет в налоговом органе. +// * РегистрацияВПенсионномФонде - Неопределено, Структура - данные о регистрации в ПФР: +// ** РегистрационныйНомерПФР - Строка - регистрационный номер предпринимателя в ПФР. +// ** КодОрганаПФР - Строка - код органа ПФР. +// ** НаименованиеОрганаПФР - Строка - наименование органа ПФР. +// ** ДатаРегистрации - Дата - дата постановки на учет в ПФР. +// * РегистрацияВФСС - Неопределено, Структура - данные о регистрации в ФСС: +// ** РегистрационныйНомерФСС - Строка - регистрационный номер предпринимателя в ФСС. +// ** КодПодчиненности - Строка - код подчиненности органа ФСС. +// ** КодОрганаФСС - Строка - код органа ФСС. +// ** НаименованиеОрганаФСС - Строка - наименование органа ФСС. +// ** ДатаРегистрации - Дата - дата постановки на учет в ФСС. +// * РегистрацияВСФР - Неопределено, Структура - данные о регистрации в СФР: +// ** РегистрационныйНомерСФР - Строка - регистрационный номер предпринимателя в СФР. +// ** КодОрганаСФР - Строка - код органа СФР. +// ** НаименованиеОрганаСФР - Строка - наименование органа СФР. +// ** ДатаРегистрации - Дата - дата постановки на учет в СФР. +// * ДатаРегистрации - Неопределено, Дата - дата регистрации предпринимателя. +// * СвидетельствоОРегистрации - Неопределено, Структура - данные свидетельства: +// ** Серия - Строка - серия свидетельства. +// ** Номер - Строка - номер свидетельства. +// ** Дата - Дата - дата выдачи свидетельства. +// * ВидДеятельности - Неопределено, Структура - описание вида экономической деятельности: +// ** Код - Строка - код вида деятельности; +// ** Наименование - Строка - наименование вида деятельности; +// ** Классификатор - Строка - тип классификатор экономической деятельности, согласно которому указаны код и наименование. +// Значения: "ОКВЭД", "ОКВЭД2"; +// * Статус - Неопределено, Структура - текущий статус предпринимателя: +// ** Код - Строка - код статуса; +// ** Наименование - Строка - наименование статуса. +// * ЭлектроннаяПочта - Неопределено, Строка - электронная почта. +// * ЯвляетсяГлавойКФХ - Булево - признак, что является главой КФХ. +// * ЯвляетсяГлавойКФХОписание - Строка - описание признака, что является главой КФХ. +// * ИсторияРеквизитов - Структура - история изменения реквизитов предпринимателя. +// см. НовыйИсторияРеквизитовПредпринимателя +// * ОписаниеОшибки - Неопределено, Строка - описание возникшей ошибки. +// Для обработки ошибки на клиентской части необходимо использовать метод +// РаботаСКонтрагентамиКлиент.ОбработатьОшибку. +// * КодОКВЭД - Неопределено, Строка - устарело, следует использовать ВидДеятельности.Код, код основного +// вида деятельности по классификатору ОКВЭД. +// * ЭтоОКВЭД2 - Булево - устарело, следует использовать ВидДеятельности.Классификатор, код ОКВЭД +// приведен по классификатору редакции 2 или редакции 1. // Функция РеквизитыПредпринимателяПоИНН(Знач ИНН) Экспорт @@ -347,32 +273,30 @@ // // Параметры: // Наименование - Строка - одно или несколько слов из наименования юридического лица для поиска в ЕГРЮЛ. -// КодРегиона - Строка, 2 - код региона в юридическом адресе для поиска в ЕГРЮЛ. +// КодРегиона - Строка - код региона (Строка(2)) в юридическом адресе для поиска в ЕГРЮЛ. // Адрес - Строка - одно или несколько слов из юридического адреса (от региона до улицы) для поиска в ЕГРЮЛ. // // Возвращаемое значение: -// Структура - реквизиты найденных юридических лиц. Содержание структуры: -// * РеквизитыОрганизаций - Массив из Структура- реквизиты найденных контрагентов. -// См. НовыеРеквизитыЮридическогоЛица. +// Структура - реквизиты найденных юридических лиц: +// * РеквизитыОрганизаций - Массив из Структура - реквизиты найденных контрагентов. +// См. НовыеРеквизитыЮридическогоЛица: // ** ИНН - Строка - ИНН юридического лица. -// ** КПП - Неопределено - не передается в текущем методе. -// ** Наименование - Строка - представление юридического лица в учетной программе. -// ** НаименованиеПолное - Строка - полное наименование юридического лица. -// ** НаименованиеСокращенное - Строка - сокращенное наименование юридического лица. -// ** НаименованиеПолноеЕГРЮЛ - Строка - полное наименование юридического лица в ЕГРЮЛ. -// ** НаименованиеСокращенноеЕГРЮЛ - Строка - сокращенное наименование юридического лица в ЕГРЮЛ. +// ** КПП - Неопределено - не заполняется в текущем методе. +// ** Наименование - Строка, Неопределено - представление юридического лица в учетной программе. +// ** НаименованиеПолное - Строка, Неопределено - полное наименование юридического лица. +// ** НаименованиеСокращенное - Строка, Неопределено - сокращенное наименование юридического лица. +// ** НаименованиеПолноеЕГРЮЛ - Строка, Неопределено - полное наименование юридического лица в ЕГРЮЛ. +// ** НаименованиеСокращенноеЕГРЮЛ - Строка, Неопределено - сокращенное наименование юридического лица в ЕГРЮЛ. // ** НаименованиеПолноеНаАнглийском - Строка, Неопределено - полное наименование юридического лица на английском. // ** НаименованиеСокращенноеНаАнглийском - Строка, Неопределено - сокращенное наименование юридического лица на английском. -// ** РегистрационныйНомер - Строка - ОГРН юридического лица. -// ** Статус - Структура - текущий статус юридического лица. Поля: -// *** Код - Строка - код статуса; -// *** Наименование - Строка - наименование статуса; -// ** РегистрирующийОрган - Структура - орган, зарегистрировавший юридическое лицо. Поля: -// *** Код - Строка - код органа; -// *** Наименование - Строка - наименование органа; -// ** НомерТиповогоУстава - Строка, Неопределено - номер типового устава юридического лица. +// ** РегистрационныйНомер - Строка, Неопределено - ОГРН юридического лица. +// ** Статус - Неопределено, Структура - текущий статус юридического лица. +// см. НовыйДанныеСтатуса. +// ** РегистрирующийОрган - Неопределено, Структура - орган, зарегистрировавший юридическое лицо. +// см. НовыйДанныеРегистрирующегоОргана. +// ** НомерТиповогоУстава - Неопределено - не используется в текущем методе. // ** ПравоваяФорма - Строка, Неопределено - правовая форма юридического лица. -// ** ЮридическийАдрес - Структура, Неопределено - данные о юридическом адресе. +// ** ЮридическийАдрес - Неопределено, Структура - данные о юридическом адресе: // *** КонтактнаяИнформация - Строка - данные в формате JSON для заполнения реквизита // "Значение" контактной информации в табличной части КонтактнаяИнформация объекта // (см. описание подсистемы "Контактная информация" Библиотеки стандартных подсистем). @@ -380,7 +304,7 @@ // *** Комментарий - Строка, Неопределено - произвольный комментарий. // *** Корректный - Булево - адрес является корректным по данным ФИАС; // ** Руководители - ТаблицаЗначений - устарело, рекомендуется использовать свойство "ДанныеРуководителей". -// Сведения о руководителях. Колонки: +// Сведения о руководителях: // *** Должность - Строка - должность руководителя. // *** Фамилия - Строка - фамилия руководителя. // *** Имя - Строка - имя руководителя. @@ -393,17 +317,7 @@ // *** ПредставлениеСкрытыхДанных - Строка - представление скрытых данных о руководителях. // Заполняется если СкрытыеДанные = Истина // *** Руководители - ТаблицаЗначений - сведения о руководителях. Заполняется если СкрытыеДанные = Ложь. Колонки: -// **** Должность - Строка - должность руководителя. -// **** Фамилия - Строка - фамилия руководителя. -// **** Имя - Строка - имя руководителя. -// **** Отчество - Строка - отчество руководителя. -// **** Представление - Строка - ФИО руководителя или представление скрытых данных о руководителях. -// **** ИНН - Строка - ИНН руководителя. -// **** ДатаЗаписи - Дата - дата записи о руководителе. -// **** ОрганизацииГдеРуководитель - ТаблицаЗначений - сведения об организациях, где руководитель. -// **** ОрганизацииГдеУчредитель - ТаблицаЗначений - сведения об организациях, где учредитель. -// **** ОрганизацииГдеРуководительПоФИО - Булево - если Истина, поиск проводился по ФИО руководителя, иначе по ИНН. -// **** ОрганизацииГдеУчредительПоФИО - Булево - если Истина, поиск проводился по ФИО руководителя, иначе по ИНН. +// см. НоваяТаблицаРуководителей. // ** РегистрацияВНалоговомОргане - Неопределено - не используется в текущем методе. // ** ДатаРегистрации - Дата, Неопределено - дата регистрации юридического лица. // ** ДатаПрекращенияДеятельности - Дата, Неопределено - дата прекращения деятельности юридического лица. @@ -412,17 +326,8 @@ // ** РегистрацияВСФР - Неопределено - не используется в текущем методе. // ** ВидДеятельности - Неопределено - не используется в текущем методе. // ** ОткрытыеГосударственныеДанныеФНС - ТаблицаЗначений - не используется в текущем методе. -// ** Подразделения - Массив из Структура - -// *** ИНН - Строка - ИНН юридического лица. -// *** Наименование - Строка - наименование подразделения. -// *** Идентификатор - Число - идентификатор подразделения в сервисе. -// *** ЮридическийАдрес - Структура, Неопределено - данные о юридическом адресе. -// **** КонтактнаяИнформация - Строка - данные в формате JSON для заполнения реквизита -// "Значение" контактной информации в табличной части КонтактнаяИнформация объекта -// (см. описание подсистемы "Контактная информация" Библиотеки стандартных подсистем). -// **** Представление - Строка - представление адреса. -// **** Комментарий - Строка, Неопределено - произвольный комментарий. -// **** Корректный - Булево - адрес является корректным по данным ФИАС; +// ** Подразделения - Неопределено, Массив из Структура - данные подразделений юридического лица. +// см. НовыйДанныеПодразделения. // ** ИсторияРеквизитов - Структура - не используется в текущем методе. // ** ОписаниеОшибки - Строка, Неопределено - служебный реквизит. // ** КодОКВЭД - Неопределено - не используется в текущем методе. @@ -430,11 +335,10 @@ // ** Руководитель - Неопределено - не используется в текущем методе. // * КоличествоНайденных - Число - общее количество найденных контрагентов. // * ОжиданиеОтвета - Булево - если возвращается Истина - требуется повторный вызов метода с такими же параметрами. -// * ОписаниеОшибки - Строка - служебный реквизит. +// * ОписаниеОшибки - Строка, Неопределено - служебный реквизит. // Для обработки ошибки на клиентской части необходимо использовать метод // РаботаСКонтрагентамиКлиент.ОбработатьОшибку. // -// Функция ЮридическиеЛицаПоНаименованию(Знач Наименование, Знач КодРегиона = "", Знач Адрес = "") Экспорт ЗаписатьИнформациюВЖурналРегистрации( @@ -468,7 +372,8 @@ Если Результат.ОжиданиеОтвета Или ЗначениеЗаполнено(Результат.ОписаниеОшибки) Тогда - Возврат Результат; + + Возврат Результат; КонецЕсли; ЗначениеCorporations = РезультатВызова.ТелоОтветаОбъект.Получить("corporations"); @@ -478,11 +383,10 @@ РеквизитыОрганизации = НовыеРеквизитыЮридическогоЛица(); РеквизитыОрганизации.ИНН = ТекущееCorporation.Получить("inn"); РеквизитыОрганизации.РегистрационныйНомер = ТекущееCorporation.Получить("ogrn"); - РеквизитыОрганизации.ДатаРегистрации = ДатаИзJSON(ТекущееCorporation.Получить("registrationDate")); - ДатаПрекращенияДеятельности = ТекущееCorporation.Получить("terminationDate"); - Если ДатаПрекращенияДеятельности <> Неопределено Тогда - РеквизитыОрганизации.ДатаПрекращенияДеятельности = ДатаИзJSON(ДатаПрекращенияДеятельности); - КонецЕсли; + РеквизитыОрганизации.ДатаРегистрации = ДатаИзJSON( + ТекущееCorporation.Получить("registrationDate")); + РеквизитыОрганизации.ДатаПрекращенияДеятельности = ДатаИзJSON( + ТекущееCorporation.Получить("terminationDate")); ЗаполнитьНаименованияЮридическогоЛица(ТекущееCorporation.Получить("name"), РеквизитыОрганизации); ЗаполнитьЮридическийАдрес(ТекущееCorporation.Получить("address"), РеквизитыОрганизации); @@ -521,32 +425,30 @@ // // Параметры: // ИНН - Строка - ИНН юридического лица. -// КодРегиона - Строка, 2 - код региона в юридическом адресе для поиска в ЕГРЮЛ. +// КодРегиона - Строка - код региона (Строка(2)) в юридическом адресе для поиска в ЕГРЮЛ. // Адрес - Строка - одно или несколько слов из юридического адреса (от региона до улицы) для поиска в ЕГРЮЛ. // // Возвращаемое значение: -// Структура - реквизиты найденных юридических лиц. Содержание структуры: -// * РеквизитыОрганизаций - Массив из Структура- реквизиты найденных контрагентов. -// См. НовыеРеквизитыЮридическогоЛица. +// Структура - реквизиты найденных юридических лиц: +// * РеквизитыОрганизаций - Массив из Структура - реквизиты найденных контрагентов. +// См. НовыеРеквизитыЮридическогоЛица: // ** ИНН - Строка - ИНН юридического лица. -// ** КПП - Неопределено - не передается в текущем методе. -// ** Наименование - Строка - представление юридического лица в учетной программе. -// ** НаименованиеПолное - Строка - полное наименование юридического лица. -// ** НаименованиеСокращенное - Строка - сокращенное наименование юридического лица. -// ** НаименованиеПолноеЕГРЮЛ - Строка - полное наименование юридического лица в ЕГРЮЛ. -// ** НаименованиеСокращенноеЕГРЮЛ - Строка - сокращенное наименование юридического лица в ЕГРЮЛ. +// ** КПП - Неопределено - не заполняется в текущем методе. +// ** Наименование - Строка, Неопределено - представление юридического лица в учетной программе. +// ** НаименованиеПолное - Строка, Неопределено - полное наименование юридического лица. +// ** НаименованиеСокращенное - Строка, Неопределено - сокращенное наименование юридического лица. +// ** НаименованиеПолноеЕГРЮЛ - Строка, Неопределено - полное наименование юридического лица в ЕГРЮЛ. +// ** НаименованиеСокращенноеЕГРЮЛ - Строка, Неопределено - сокращенное наименование юридического лица в ЕГРЮЛ. // ** НаименованиеПолноеНаАнглийском - Строка, Неопределено - полное наименование юридического лица на английском. // ** НаименованиеСокращенноеНаАнглийском - Строка, Неопределено - сокращенное наименование юридического лица на английском. -// ** РегистрационныйНомер - Строка - ОГРН юридического лица. -// ** Статус - Структура - текущий статус юридического лица. Поля: -// *** Код - Строка - код статуса; -// *** Наименование - Строка - наименование статуса; -// ** РегистрирующийОрган - Структура - орган, зарегистрировавший юридическое лицо. Поля: -// *** Код - Строка - код органа; -// *** Наименование - Строка - наименование органа; -// ** НомерТиповогоУстава - Строка, Неопределено - Номер типового устава юридического лица. +// ** РегистрационныйНомер - Строка, Неопределено - ОГРН юридического лица. +// ** Статус - Неопределено, Структура - текущий статус юридического лица. +// см. НовыйДанныеСтатуса. +// ** РегистрирующийОрган - Неопределено, Структура - орган, зарегистрировавший юридическое лицо. +// см. НовыйДанныеРегистрирующегоОргана. +// ** НомерТиповогоУстава - Неопределено - не используется в текущем методе. // ** ПравоваяФорма - Строка, Неопределено - правовая форма юридического лица. -// ** ЮридическийАдрес - Структура, Неопределено - данные о юридическом адресе. +// ** ЮридическийАдрес - Неопределено, Структура - данные о юридическом адресе: // *** КонтактнаяИнформация - Строка - данные в формате JSON для заполнения реквизита // "Значение" контактной информации в табличной части КонтактнаяИнформация объекта // (см. описание подсистемы "Контактная информация" Библиотеки стандартных подсистем). @@ -554,7 +456,7 @@ // *** Комментарий - Строка, Неопределено - произвольный комментарий. // *** Корректный - Булево - адрес является корректным по данным ФИАС; // ** Руководители - ТаблицаЗначений - устарело, рекомендуется использовать свойство "ДанныеРуководителей". -// Сведения о руководителях. Колонки: +// Сведения о руководителях: // *** Должность - Строка - должность руководителя. // *** Фамилия - Строка - фамилия руководителя. // *** Имя - Строка - имя руководителя. @@ -567,17 +469,7 @@ // *** ПредставлениеСкрытыхДанных - Строка - представление скрытых данных о руководителях. // Заполняется если СкрытыеДанные = Истина // *** Руководители - ТаблицаЗначений - сведения о руководителях. Заполняется если СкрытыеДанные = Ложь. Колонки: -// **** Должность - Строка - должность руководителя. -// **** Фамилия - Строка - фамилия руководителя. -// **** Имя - Строка - имя руководителя. -// **** Отчество - Строка - отчество руководителя. -// **** Представление - Строка - ФИО руководителя или представление скрытых данных о руководителях. -// **** ИНН - Строка - ИНН руководителя. -// **** ДатаЗаписи - Дата - дата записи о руководителе. -// **** ОрганизацииГдеРуководитель - ТаблицаЗначений - сведения об организациях, где руководитель. -// **** ОрганизацииГдеУчредитель - ТаблицаЗначений - сведения об организациях, где учредитель. -// **** ОрганизацииГдеРуководительПоФИО - Булево - если Истина, поиск проводился по ФИО руководителя, иначе по ИНН. -// **** ОрганизацииГдеУчредительПоФИО - Булево - если Истина, поиск проводился по ФИО руководителя, иначе по ИНН. +// см. НоваяТаблицаРуководителей. // ** РегистрацияВНалоговомОргане - Неопределено - не используется в текущем методе. // ** ДатаРегистрации - Дата, Неопределено - дата регистрации юридического лица. // ** ДатаПрекращенияДеятельности - Дата, Неопределено - дата прекращения деятельности юридического лица. @@ -586,17 +478,8 @@ // ** РегистрацияВСФР - Неопределено - не используется в текущем методе. // ** ВидДеятельности - Неопределено - не используется в текущем методе. // ** ОткрытыеГосударственныеДанныеФНС - ТаблицаЗначений - не используется в текущем методе. -// ** Подразделения - Массив из Структура - -// *** ИНН - Строка - ИНН юридического лица. -// *** Наименование - Строка - наименование подразделения. -// *** Идентификатор - Число - идентификатор подразделения в сервисе. -// *** ЮридическийАдрес - Структура, Неопределено - данные о юридическом адресе. -// **** КонтактнаяИнформация - Строка - данные в формате JSON для заполнения реквизита -// "Значение" контактной информации в табличной части КонтактнаяИнформация объекта -// (см. описание подсистемы "Контактная информация" Библиотеки стандартных подсистем). -// **** Представление - Строка - представление адреса. -// **** Комментарий - Строка, Неопределено - произвольный комментарий. -// **** Корректный - Булево - адрес является корректным по данным ФИАС; +// ** Подразделения - Неопределено, Массив из Структура - данные подразделений юридического лица. +// см. НовыйДанныеПодразделения. // ** ИсторияРеквизитов - Структура - не используется в текущем методе. // ** ОписаниеОшибки - Строка, Неопределено - служебный реквизит. // ** КодОКВЭД - Неопределено - не используется в текущем методе. @@ -604,7 +487,7 @@ // ** Руководитель - Неопределено - не используется в текущем методе. // * КоличествоНайденных - Число - общее количество найденных контрагентов. // * ОжиданиеОтвета - Булево - если возвращается Истина - требуется повторный вызов метода с такими же параметрами. -// * ОписаниеОшибки - Строка - служебный реквизит. +// * ОписаниеОшибки - Строка, Неопределено - служебный реквизит. // Для обработки ошибки на клиентской части необходимо использовать метод // РаботаСКонтрагентамиКлиент.ОбработатьОшибку. // @@ -646,7 +529,8 @@ Если Результат.ОжиданиеОтвета Или ЗначениеЗаполнено(Результат.ОписаниеОшибки) Тогда - Возврат Результат; + + Возврат Результат; КонецЕсли; ЗначениеCorporations = РезультатВызова.ТелоОтветаОбъект.Получить("corporations"); @@ -656,11 +540,11 @@ РеквизитыОрганизации = НовыеРеквизитыЮридическогоЛица(); РеквизитыОрганизации.ИНН = ТекущееCorporation.Получить("inn"); РеквизитыОрганизации.РегистрационныйНомер = ТекущееCorporation.Получить("ogrn"); - РеквизитыОрганизации.ДатаРегистрации = ДатаИзJSON(ТекущееCorporation.Получить("registrationDate")); - ДатаПрекращенияДеятельности = ТекущееCorporation.Получить("terminationDate"); - Если ДатаПрекращенияДеятельности <> Неопределено Тогда - РеквизитыОрганизации.ДатаПрекращенияДеятельности = ДатаИзJSON(ДатаПрекращенияДеятельности); - КонецЕсли; + РеквизитыОрганизации.ДатаРегистрации = ДатаИзJSON( + ТекущееCorporation.Получить("registrationDate")); + РеквизитыОрганизации.ДатаПрекращенияДеятельности = ДатаИзJSON( + ТекущееCorporation.Получить("terminationDate")); + ЗаполнитьНаименованияЮридическогоЛица(ТекущееCorporation.Получить("name"), РеквизитыОрганизации); ЗаполнитьЮридическийАдрес(ТекущееCorporation.Получить("address"), РеквизитыОрганизации); ЗаполнитьДанныеОРуководителях(ТекущееCorporation, РеквизитыОрганизации); @@ -692,238 +576,207 @@ // с другими лицами по данным ЕГРЮЛ. // // Параметры: -// ИНН - Строка - ИНН юридического лица, информацию о связях которого надо получить. +// ИНН - Строка - ИНН юридического лица, информацию о связях которого надо получить. // // Возвращаемое значение: -// - Структура - информация о связях юридического лица. -// Содержит основные данные о юридическом лице - см. НоваяИнформацияОСвязяхЮридическогоЛица. -// Также содержит данные: -// * Статус - Структура - текущий статус юридического лица. -// Поля: -// ** Код - Строка - код статуса; -// ** Наименование - Строка - наименование статуса; -// * РегистрирующийОрган - Структура - орган, зарегистрировавший юридическое лицо. Поля: -// ** Код - Строка - код органа; -// ** Наименование - Строка - наименование органа; -// * УставныйКапитал - Число - размер уставного капитала, рублей. -// * ВидыДеятельности - ТаблицаЗначений - информация о видах деятельности. -// ** Код - Строка - код вида деятельности; -// ** Наименование - Строка - наименование вида деятельности; -// ** Классификатор - Строка - тип классификатор экономической деятельности, согласно которому указаны код и наименование; -// Значения: "ОКВЭД", "ОКВЭД2" -// ** КодОКВЭД (устарело) - Строка - код вида деятельности по классификатору ОКВЭД. -// Устарело, следует использовать Код. -// ** НаименованиеОКВЭД (устарело) - Строка - наименование вида деятельности по ОКВЭД, -// сервисом не поставляется, должно заполняться из переопределяемого кода. -// Устарело, следует использовать Наименование. -// ** ЭтоОКВЭД2 (устарело) - Булево - код приведен по классификатору редакции 2 или редакции 1. -// Устарело, следует использовать Классификатор. -// * Лицензии - ТаблицаЗначений - данные о полученных лицензиях. -// ** Лицензия - Строка - наименование лицензии. -// ** ОписаниеЛицензии - Строка - подробное описание лицензии. -// * ЮридическийАдрес - Структура, Неопределено - данные о юридическом адресе. -// ** КонтактнаяИнформация - Строка - данные в формате JSON для заполнения реквизита -// "Значение" контактной информации в табличной части КонтактнаяИнформация объекта -// (см. описание подсистемы "Контактная информация" Библиотеки стандартных подсистем). -// ** Представление - Строка - представление адреса. -// ** Комментарий - Строка - произвольный комментарий. -// ** Корректный - Булево - адрес является корректным по данным ФИАС; -// * ОрганизацииПоАдресу - ТаблицаЗначений - данные об организациях, зарегистрированных по тому же адресу. -// ** НаименованиеОрганизации - Строка - наименование организации. -// ** ИНН - Строка - ИНН организации. -// ** КодСтатуса - Строка - код текущего статуса организации. -// ** НаименованиеСтатуса - Строка - наименование текущего статуса организации. -// * Руководители - ТаблицаЗначений - устарело, рекомендуется использовать свойство "ДанныеРуководителей". -// Сведения о руководителях. Колонки: -// ** Должность - Строка - должность руководителя. -// ** Фамилия - Строка - фамилия руководителя. -// ** Имя - Строка - имя руководителя. -// ** Отчество - Строка - отчество руководителя. -// ** Представление - Строка - ФИО руководителя. -// ** ИНН - Строка - ИНН руководителя. -// ** ДатаЗаписи - Дата - дата записи о руководителе. -// ** ОрганизацииГдеРуководитель - ТаблицаЗначений - данные об организациях, где руководитель этой -// организации также является руководителем. Колонки: -// *** НаименованиеОрганизации - Строка - наименование организации. -// *** ИНН - Строка - ИНН организации. -// *** КодСтатуса - Строка - код текущего статуса организации. -// *** НаименованиеСтатуса - Строка - наименование текущего статуса организации. -// ** ОрганизацииГдеРуководительПоФИО - Булево - если Истина, поиск проводился по ФИО руководителя, иначе по ИНН. -// ** ОрганизацииГдеУчредитель - ТаблицаЗначений - организации, -// где руководитель этой организации является учредителем. -// Колонки: -// *** НаименованиеОрганизации - Строка - наименование организации. -// *** ИНН - Строка - ИНН организации. -// *** КодСтатуса - Строка - код текущего статуса организации. -// *** НаименованиеСтатуса - Строка - наименование текущего статуса организации. -// *** ПроцентКапитала - Число - процент в уставном капитале. -// *** СуммаКапитала - Число - сумма взноса в уставный капитал. -// ** ОрганизацииГдеУчредительПоФИО - Булево - если Истина, поиск проводился по ФИО руководителя, иначе по ИНН. -// * ДанныеРуководителей - Структура - сведения о руководителях: -// ** СкрытыеДанные - Булево - признак скрытых данных о руководителях организации. -// ** ПредставлениеСкрытыхДанных - Строка - представление скрытых данных о руководителях. -// Заполняется если СкрытыеДанные = Истина -// ** Руководители - ТаблицаЗначений - сведения о руководителях. Заполняется если СкрытыеДанные = Ложь. Колонки: -// *** Должность - Строка - должность руководителя. -// *** Фамилия - Строка - фамилия руководителя. -// *** Имя - Строка - имя руководителя. -// *** Отчество - Строка - отчество руководителя. -// *** Представление - Строка - ФИО руководителя или представление скрытых данных о руководителях. -// *** ИНН - Строка - ИНН руководителя. -// *** ДатаЗаписи - Дата - дата записи о руководителе. -// *** ОрганизацииГдеРуководитель - ТаблицаЗначений - данные об организациях, где руководитель этой -// организации также является руководителем. Колонки: -// **** НаименованиеОрганизации - Строка - наименование организации. -// **** ИНН - Строка - ИНН организации. -// **** КодСтатуса - Строка - код текущего статуса организации. -// **** НаименованиеСтатуса - Строка - наименование текущего статуса организации. -// *** ОрганизацииГдеРуководительПоФИО - Булево - если Истина, поиск проводился по ФИО руководителя, иначе по ИНН. -// *** ОрганизацииГдеУчредитель - ТаблицаЗначений - организации, -// где руководитель этой организации является учредителем. Колонки: -// **** НаименованиеОрганизации - Строка - наименование организации. -// **** ИНН - Строка - ИНН организации. -// **** КодСтатуса - Строка - код текущего статуса организации. -// **** НаименованиеСтатуса - Строка - наименование текущего статуса организации. -// **** ПроцентКапитала - Число - процент в уставном капитале. -// **** СуммаКапитала - Число - сумма взноса в уставный капитал. -// *** ОрганизацииГдеУчредительПоФИО - Булево - если Истина, поиск проводился по ФИО руководителя, иначе по ИНН. -// * УчрежденныеФирмы - ТаблицаЗначений - организации, где эта организация является учредителем. -// ** НаименованиеОрганизации - Строка - наименование организации. -// ** ИНН - Строка - ИНН организации. -// ** КодСтатуса - Строка - код текущего статуса организации. -// ** НаименованиеСтатуса - Строка - наименование текущего статуса организации. -// ** ПроцентКапитала - Число - процент в уставном капитале. -// ** СуммаКапитала - Число - сумма взноса в уставный капитал. -// * Учредители - ТаблицаЗначений - устарело, рекомендуется использовать свойство "ДанныеУчредителей". -// Учредители этой организации. -// ** Учредитель - Строка - ФИО или наименование учредителя. -// ** ИНН - Строка - ИНН учредителя. -// ** ПроцентКапитала - Число - процент в уставном капитале. -// ** СуммаКапитала - Число - сумма взноса в уставный капитал. -// ** ОрганизацииГдеРуководитель - ТаблицаЗначений - данные об организациях, где этот учредитель является руководителем. -// *** НаименованиеОрганизации - Строка - наименование организации. -// *** ИНН - Строка - ИНН организации. -// *** КодСтатуса - Строка - код текущего статуса организации. -// *** НаименованиеСтатуса - Строка - наименование текущего статуса организации. -// ** ОрганизацииГдеРуководительПоФИО - Булево - если Истина, поиск проводился по ФИО учредителя, иначе по ИНН. -// ** ОрганизацииГдеУчредитель - ТаблицаЗначений - организации, где этот учредитель также является учредителем. -// *** НаименованиеОрганизации - Строка - наименование организации. -// *** ИНН - Строка - ИНН организации. -// *** КодСтатуса - Строка - код текущего статуса организации. -// *** НаименованиеСтатуса - Строка - наименование текущего статуса организации. -// *** ПроцентКапитала - Число - процент в уставном капитале. -// *** СуммаКапитала - Число - сумма взноса в уставный капитал. -// ** ОрганизацииГдеУчредительПоФИО - Булево - если Истина, поиск проводился по ФИО учредителя, иначе по ИНН. -// * ДанныеУчредителей - Структура - сведения о руководителях: -// ** СкрытыеДанные - Булево - признак скрытых данных об учредителях организации. -// ** ПредставлениеСкрытыхДанных - Строка - представление скрытых данных об учредителях. -// Заполняется если СкрытыеДанные = Истина -// ** Учредители - ТаблицаЗначений - учредители этой организации. -// *** Учредитель - Строка - ФИО или наименование учредителя. -// *** ИНН - Строка - ИНН учредителя. -// *** ПроцентКапитала - Число - процент в уставном капитале. -// *** СуммаКапитала - Число - сумма взноса в уставный капитал. -// *** ОрганизацииГдеРуководитель - ТаблицаЗначений - данные об организациях, где этот учредитель является руководителем. -// **** НаименованиеОрганизации - Строка - наименование организации. -// **** ИНН - Строка - ИНН организации. -// **** КодСтатуса - Строка - код текущего статуса организации. -// **** НаименованиеСтатуса - Строка - наименование текущего статуса организации. -// *** ОрганизацииГдеРуководительПоФИО - Булево - если Истина, поиск проводился по ФИО учредителя, иначе по ИНН. -// *** ОрганизацииГдеУчредитель - ТаблицаЗначений - организации, где этот учредитель также является учредителем. -// **** НаименованиеОрганизации - Строка - наименование организации. -// **** ИНН - Строка - ИНН организации. -// **** КодСтатуса - Строка - код текущего статуса организации. -// **** НаименованиеСтатуса - Строка - наименование текущего статуса организации. -// **** ПроцентКапитала - Число - процент в уставном капитале. -// **** СуммаКапитала - Число - сумма взноса в уставный капитал. -// *** ОрганизацииГдеУчредительПоФИО - Булево - если Истина, поиск проводился по ФИО учредителя, иначе по ИНН. -// * Подразделения - ТаблицаЗначений - филиалы и представительства юридического лица, указанные в Уставе. -// ** ОписаниеПодразделения - Строка - наименование подразделения. -// * ИзмененияВРеестре - ТаблицаЗначений - данные об изменениях в ЕГРЮЛ по этому лицу. -// ** ДатаИзменения - Дата - дата внесения изменения. -// ** ГосударственныйОрган - Строка - орган, который внес изменение. -// ** ОписаниеИзменения - Строка - описание изменения. -// * БухгалтерскаяОтчетность - ТаблицаЗначений - данные бухгалтерской отчетности, сданной в органы Росстата. -// ** Год - Число - год, за который была сдана отчетность. -// ** КодВалютыОтчетности - Строка - в рублях, в тысячах или в миллионах рублей. -// ** ТипОтчетности - Строка - обычная отчетность, упрощенная или отчетность НКО. -// ** Показатели - ТаблицаЗначений - показатели бухгалтерской отчетности. -// *** Код - Строка - код показателя отчетности. -// *** Значение - Число - значение показателя отчетности. -// * ОткрытыеГосударственныеДанныеФНС - ТаблицаЗначений - открытые данные. Колонки: -// ** Год - Число - год, за который указаны данные; -// ** КоличествоСотрудников - Число, Неопределено - количество сотрудников; -// ** СуммаДоходов - Число, Неопределено - сумма доходов; -// ** СуммаРасходов - Число, Неопределено - сумма расходов; -// ** УчастиеВКГН - Строка - участия в консолидированной группе налогоплательщиков; -// ** НалогообложениеЕСХН - Булево, Неопределено - Истина, если применяется тип налогообложения ЕСХН; -// ** НалогообложениеУСН - Булево, Неопределено - Истина, если применяется тип налогообложения УСН; -// ** НалогообложениеЕНВД - Булево, Неопределено - Истина, если применяется тип налогообложения ЕНВД; -// ** НалогообложениеСРП - Булево, Неопределено - Истина, если применяется тип налогообложения СРП; -// ** СведенияОНалогах - ТаблицаЗначений - сведения о налогах. Колонки: -// *** Наименование - Строка - наименование налога; -// *** Уплачено - Число, Неопределено - сумма уплаченного налога. Неопределено - нет данных; -// *** Задолженность - Число, Неопределено - сумма задолженности по налогу. Неопределено - нет данных; -// *** Штраф - Число, Неопределено - сумма штрафа по налогу. Неопределено - нет данных; -// *** Пени - Число, Неопределено - сумма пеней по налогу. Неопределено - нет данных; -// * ИсторияРеквизитов - Структура - история изменения реквизитов юридического лица. -// ** КПП - ТаблицаЗначений - история изменения значения реквизита КПП; -// Колонки: -// *** Дата - Дата - дата изменения КПП; -// *** Значение - Строка - значение реквизита КПП; -// ** Наименование - ТаблицаЗначений - история изменения наименования; -// Колонки: -// *** Дата - Дата - дата изменения наименования; -// *** НаименованиеПолное - Строка - полное наименование юридического лица; -// *** НаименованиеСокращенное - Строка - сокращенное наименование юридического лица; -// ** Адрес - ТаблицаЗначений - история изменения адреса; -// Колонки: -// *** Дата - Дата - дата изменения адреса; -// *** КонтактнаяИнформация - Строка - данные в формате JSON для заполнения реквизита -// "Значение" контактной информации в табличной части КонтактнаяИнформация объекта -// (см. описание подсистемы "Контактная информация" Библиотеки стандартных подсистем). -// *** Представление - Строка - представление адреса; -// *** Комментарий - Строка - произвольный комментарий; -// ** Статус - ТаблицаЗначений - история изменения статуса; -// Колонки: -// *** Дата - Дата - дата изменения наименования; -// *** Код - Строка - код статуса; -// *** Наименование - Строка - наименование статуса; -// ** РеквизитыДиректора - ТаблицаЗначений - история изменения реквизитов директора; -// Колонки: -// *** Дата - Дата - дата изменения реквизитов директора; -// *** ДатаОкончания - Дата - дата окончания действия реквизитов. -// Пустая дата, если директор действующий; -// *** ИНН - Строка - ИНН; -// *** Фамилия - Строка - фамилия директора; -// *** Имя - Строка - имя; -// *** Отчество - Строка - отчество; -// *** ВидДолжности - Строка - вид должности; -// *** НаименованиеДолжности - Строка - наименование должности; -// * ОрганизацииГдеРуководитель (Устарело) - ТаблицаЗначений - данные об организациях, где руководитель этой организации также является руководителем. -// Устарело, следует использовать Руководители[0].ОрганизацииГдеРуководитель -// ** НаименованиеОрганизации - Строка - наименование организации. -// ** ИНН - Строка - ИНН организации. -// ** КодСтатуса - Строка - код текущего статуса организации. -// ** НаименованиеСтатуса - Строка - наименование текущего статуса организации. -// * ОрганизацииГдеРуководительПоФИО (Устарело) - Булево - если Истина, поиск проводился по ФИО руководителя, иначе по ИНН. -// Устарело, следует использовать Руководители[0].ОрганизацииГдеРуководительПоФИО. -// * ОрганизацииГдеУчредитель (Устарело) - ТаблицаЗначений - организации, где руководитель этой организации является учредителем. -// Устарело, следует использовать Руководители[0].ОрганизацииГдеУчредитель. -// ** НаименованиеОрганизации - Строка - наименование организации. -// ** ИНН - Строка - ИНН организации. -// ** КодСтатуса - Строка - код текущего статуса организации. -// ** НаименованиеСтатуса - Строка - наименование текущего статуса организации. -// ** ПроцентКапитала - Число - процент в уставном капитале. -// ** СуммаКапитала - Число - сумма взноса в уставный капитал. -// * ОрганизацииГдеУчредительПоФИО (Устарело) - Булево - если Истина, поиск проводился по ФИО руководителя, иначе по ИНН. -// Устарело, следует использовать Руководители[0].ОрганизацииГдеУчредительПоФИО. -// * ОжиданиеОтвета - Булево - если возвращается Истина - требуется повторный вызов метода с этими же параметрами. -// * ОписаниеОшибки - Строка - служебный реквизит. -// Для обработки ошибки на клиентской части необходимо использовать метод -// РаботаСКонтрагентамиКлиент.ОбработатьОшибку; -// * НаименованиеСтатуса - Строка - устарело, необходимо использовать Статус.Наименование - наименование текущего статуса; -// * КодСтатуса - Строка - устарело, необходимо использовать Статус.Код - код текущего статуса. +// Структура - информация о связях юридического лица: +// * ИНН - Строка, Неопределено - ИНН юридического лица +// * КПП - Строка, Неопределено - КПП юридического лица +// * Наименование - Строка, Неопределено - представление юридического лица в учетной программе +// * НаименованиеПолное - Строка, Неопределено - полное наименование юридического лица +// * НаименованиеСокращенное - Строка, Неопределено - сокращенное наименование юридического лица +// * НаименованиеПолноеЕГРЮЛ - Строка, Неопределено - полное наименование юридического лица в ЕГРЮЛ +// * НаименованиеСокращенноеЕГРЮЛ - Строка, Неопределено - сокращенное наименование юридического лица в ЕГРЮЛ +// * НаименованиеПолноеНаАнглийском - Строка, Неопределено - полное наименование юридического лица на английском. +// * НаименованиеСокращенноеНаАнглийском - Строка, Неопределено - сокращенное наименование юридического лица на английском +// * РегистрационныйНомер - Неопределено, Строка - ОГРН юридического лица +// * Статус - Неопределено, Структура - текущий статус юридического лица. +// см. НовыйДанныеСтатуса. +// * РегистрирующийОрган - Неопределено, Структура - орган, зарегистрировавший юридическое лицо. +// см. НовыйДанныеРегистрирующегоОргана. +// * НомерТиповогоУстава - Строка, Неопределено - Номер типового устава юридического лица. +// * ПравоваяФорма - Неопределено, Строка - правовая форма юридического лица. +// * ЮридическийАдрес - Неопределено, Структура - данные о юридическом адресе: +// ** КонтактнаяИнформация - Строка - данные в формате JSON для заполнения реквизита +// "Значение" контактной информации в табличной части КонтактнаяИнформация объекта +// (см. описание подсистемы "Контактная информация" Библиотеки стандартных подсистем). +// ** Представление - Строка - представление адреса. +// ** Комментарий - Строка - произвольный комментарий. +// ** Корректный - Булево - адрес является корректным по данным ФИАС. +// * ЭлектроннаяПочта - Строка, Неопределено - адрес электронной почты +// * Руководители - ТаблицаЗначений - устарело, рекомендуется использовать свойство "ДанныеРуководителей". +// см. НоваяТаблицаРуководителей +// * ДанныеРуководителей - Структура - сведения о руководителях: +// ** СкрытыеДанные - Булево - признак скрытых данных о руководителях организации. +// ** ПредставлениеСкрытыхДанных - Строка - представление скрытых данных о руководителях. +// Заполняется если СкрытыеДанные = Истина +// ** Руководители - ТаблицаЗначений - сведения о руководителях. Заполняется если СкрытыеДанные = Ложь. +// см. НоваяТаблицаРуководителей. +// * РегистрацияВНалоговомОргане - Неопределено, Структура - данные о регистрации в ИФНС. +// см. НоваяРегистрацияВНалоговомОргане. +// * ДатаРегистрации - Неопределено, Дата - дата регистрации юридического лица +// * ДатаПрекращенияДеятельности - Дата, Неопределено - дата прекращения деятельности юридического лица. +// * РегистрацияВПенсионномФонде - Неопределено, Структура - данные о регистрации в ПФР. +// см. НоваяРегистрацияВПенсионномФонде. +// * РегистрацияВФСС - Неопределено, Структура - данные о регистрации в ФСС. +// см. НоваяРегистрацияВФСС. +// * РегистрацияВСФР - Неопределено, Структура - данные о регистрации в СФР. +// см. НоваяРегистрацияВСФР. +// * ВидДеятельности - Неопределено, Структура - описание основного вида экономической деятельности. +// см. НовыйОписаниеВидаДеятельности. +// * ОткрытыеГосударственныеДанныеФНС - ТаблицаЗначений - открытые государственные данные ФНС. +// см. НоваяТаблицаОткрытыеГосударственныеДанныеФНС +// * ИсторияРеквизитов - Структура - история изменений реквизитов юридического лица. +// см. НовыйИсторияРеквизитовЮридическогоЛица. +// * ОписаниеОшибки - Строка - текст ошибки при получении данных +// * КодОКВЭД - Строка, Неопределено - устарело, следует использовать ВидДеятельности.Код, код основного +// вида деятельности по классификатору ОКВЭД. +// * ЭтоОКВЭД2 - Булево - устарело, следует использовать ВидДеятельности.Классификатор, код ОКВЭД +// приведен по классификатору редакции 2 или редакции 1. +// * Руководитель - Неопределено, Структура - устарело, информация о руководителе: +// ** Фамилия - Строка - фамилия руководителя; +// ** Имя - Строка - имя руководителя; +// ** Отчество - Строка - отчество руководителя; +// ** Представление - Строка - ФИО руководителя; +// ** ДатаЗаписи - Дата - дата записи о руководителе; +// * УставныйКапитал - Число, Неопределено - размер уставного капитала, рублей. +// * ДанныеПравопреемников - Неопределено, Структура - данные о правопреемниках организации: +// ** СкрытыеДанные - Булево - признак скрытых данных о правопреемниках организации. +// ** ПредставлениеСкрытыхДанных - Строка - представление скрытых данных о правопреемниках. +// Заполняется если СкрытыеДанные = Истина. +// ** Правопреемники - Массив из см. НовыеДанныеПравопреемника - сведения о правопреемниках. +// * ДанныеПравопредшественников - Неопределено, Структура - данные о правопредшественниках организации: +// ** СкрытыеДанные - Булево - признак скрытых данных о правопредшественниках организации. +// ** ПредставлениеСкрытыхДанных - Строка - представление скрытых данных о правопредшественниках. +// Заполняется если СкрытыеДанные = Истина. +// ** Правопредшественники - Массив из см. НовыеДанныеПравопредшественника - сведения о правопредшественниках. +// * СтатусМКФ - Строка, Неопределено - сведения о том, что юридическое лицо является +// международной компанией или международным фондом. +// * КорпоративныйДоговор - Строка, Неопределено - сведения о наличии корпоративного договора. +// * ДержательРеестраАкционеров - Неопределено, Структура - сведения о держателе реестра акционеров акционерного общества: +// ** ОГРН - Строка - ОГРН держателя реестра акционеров; +// ** ИНН - Строка - ИНН держателя реестра акционеров +// ** Наименование - Строка - ОГРН держателя реестра акционеров. +// * ВидыДеятельности - ТаблицаЗначений - информация о видах деятельности: +// ** Код - Строка - код вида деятельности; +// ** Наименование - Строка - наименование вида деятельности; +// ** Классификатор - Строка - тип классификатор экономической деятельности, согласно которому указаны код и наименование; +// Значения: "ОКВЭД", "ОКВЭД2" +// ** КодОКВЭД - Строка - код вида деятельности по классификатору ОКВЭД. +// Устарело, следует использовать Код. +// ** НаименованиеОКВЭД - Строка - наименование вида деятельности по ОКВЭД, +// сервисом не поставляется, должно заполняться из переопределяемого кода. +// Устарело, следует использовать Наименование. +// ** ЭтоОКВЭД2 - Булево - код приведен по классификатору редакции 2 или редакции 1. +// Устарело, следует использовать Классификатор. +// * СведенияОРегистрацииНаДеньПринятия - Структура - сведения о регистрации на день принятия в Российскую Федерацию: +// ** ИдентификационныйКод - Строка - идентификационный код юридического лица; +// ** НаименованиеРегистрирующегоОргана - Строка - наименование органа, зарегистрировавшего юридическое лицо; +// ** РегистрационныйНомер - Строка - регистрационный номер, присвоенный юридическому лицу. +// * ДействующиеОтИмениЮридическогоЛица - Массив из Структура - сведения о юридическом лице, +// имеющем право без доверенности действовать от имени юридического лица: +// ** ИНН - Строка - ИНН юридического лица; +// ** ОГРН - Строка - ОГРН юридического лица; +// ** Наименование - Строка - Наименование юридического лица. +// * ВидПолномочий - Строка - Сведения о полномочиях нескольких лиц выступать от имени юридического лица. +// Принимает значение: +// "1" - если лица, имеющие право выступать от имени юридического лица, действуют совместно; +// "2" - если лица, имеющие право выступать от имени юридического лица, действуют независимо друг от друга. +// * Лицензии - ТаблицаЗначений - данные о полученных лицензиях: +// ** Лицензия - Строка - наименование лицензии; +// ** ОписаниеЛицензии - Строка - подробное описание лицензии; +// ** НомерЛицензии - Строка - номер лицензии; +// ** НомерЛицензииВЕдиномРеестре - Строка - номер лицензии, присвоенный в Едином реестре учета лицензий. +// * ОрганизацииПоАдресу - ТаблицаЗначений - данные об организациях, зарегистрированных по тому же адресу: +// ** НаименованиеОрганизации - Строка - наименование организации. +// ** ИНН - Строка - ИНН организации. +// ** КодСтатуса - Строка - код текущего статуса организации. +// ** НаименованиеСтатуса - Строка - наименование текущего статуса организации. +// * УчрежденныеФирмы - ТаблицаЗначений - организации, где эта организация является учредителем: +// ** НаименованиеОрганизации - Строка - наименование организации. +// ** ИНН - Строка - ИНН организации. +// ** КодСтатуса - Строка - код текущего статуса организации. +// ** НаименованиеСтатуса - Строка - наименование текущего статуса организации. +// ** ПроцентКапитала - Число - процент в уставном капитале. +// ** СуммаКапитала - Число - сумма взноса в уставный капитал. +// * Учредители - ТаблицаЗначений - рекомендуется использовать свойство "ДанныеУчредителей". +// Устарело. Учредители этой организации: +// ** Учредитель - Строка - ФИО или наименование учредителя. +// ** ИНН - Строка - ИНН учредителя. +// ** ПроцентКапитала - Число - процент в уставном капитале. +// ** СуммаКапитала - Число - сумма взноса в уставный капитал. +// ** ОрганизацииГдеРуководитель - ТаблицаЗначений - данные об организациях, где этот учредитель является руководителем: +// *** НаименованиеОрганизации - Строка - наименование организации. +// *** ИНН - Строка - ИНН организации. +// *** КодСтатуса - Строка - код текущего статуса организации. +// *** НаименованиеСтатуса - Строка - наименование текущего статуса организации. +// ** ОрганизацииГдеРуководительПоФИО - Булево - если Истина, поиск проводился по ФИО учредителя, иначе по ИНН. +// ** ОрганизацииГдеУчредитель - ТаблицаЗначений - организации, где этот учредитель также является учредителем: +// *** НаименованиеОрганизации - Строка - наименование организации. +// *** ИНН - Строка - ИНН организации. +// *** КодСтатуса - Строка - код текущего статуса организации. +// *** НаименованиеСтатуса - Строка - наименование текущего статуса организации. +// *** ПроцентКапитала - Число - процент в уставном капитале. +// *** СуммаКапитала - Число - сумма взноса в уставный капитал. +// ** ОрганизацииГдеУчредительПоФИО - Булево - если Истина, поиск проводился по ФИО учредителя, иначе по ИНН. +// * ДанныеУчредителей - Структура - сведения об учредителях: +// ** СкрытыеДанные - Булево - признак скрытых данных об учредителях организации. +// ** ПредставлениеСкрытыхДанных - Строка - представление скрытых данных об учредителях. +// Заполняется если СкрытыеДанные = Истина. +// ** Учредители - ТаблицаЗначений - учредители этой организации: +// *** Учредитель - Строка - ФИО или наименование учредителя. +// *** ИНН - Строка - ИНН учредителя. +// *** ПроцентКапитала - Число - процент в уставном капитале. +// *** СуммаКапитала - Число - сумма взноса в уставный капитал. +// *** ОрганизацииГдеРуководитель - ТаблицаЗначений - данные об организациях, где этот учредитель является руководителем: +// **** НаименованиеОрганизации - Строка - наименование организации. +// **** ИНН - Строка - ИНН организации. +// **** КодСтатуса - Строка - код текущего статуса организации. +// **** НаименованиеСтатуса - Строка - наименование текущего статуса организации. +// *** ОрганизацииГдеРуководительПоФИО - Булево - если Истина, поиск проводился по ФИО учредителя, иначе по ИНН. +// *** ОрганизацииГдеУчредитель - ТаблицаЗначений - организации, где этот учредитель также является учредителем: +// **** НаименованиеОрганизации - Строка - наименование организации. +// **** ИНН - Строка - ИНН организации. +// **** КодСтатуса - Строка - код текущего статуса организации. +// **** НаименованиеСтатуса - Строка - наименование текущего статуса организации. +// **** ПроцентКапитала - Число - процент в уставном капитале. +// **** СуммаКапитала - Число - сумма взноса в уставный капитал. +// *** ОрганизацииГдеУчредительПоФИО - Булево - если Истина, поиск проводился по ФИО учредителя, иначе по ИНН. +// * Подразделения - ТаблицаЗначений - филиалы и представительства юридического лица, указанные в Уставе: +// ** ОписаниеПодразделения - Строка - наименование подразделения. +// * ИзмененияВРеестре - ТаблицаЗначений - данные об изменениях в ЕГРЮЛ по этому лицу: +// ** ДатаИзменения - Дата - дата внесения изменения. +// ** ГосударственныйОрган - Строка - орган, который внес изменение. +// ** ОписаниеИзменения - Строка - описание изменения. +// * БухгалтерскаяОтчетность - ТаблицаЗначений - данные бухгалтерской отчетности, сданной в органы Росстата: +// ** Год - Число - год, за который была сдана отчетность. +// ** КодВалютыОтчетности - Строка - в рублях, в тысячах или в миллионах рублей. +// ** ТипОтчетности - Строка - обычная отчетность, упрощенная или отчетность НКО. +// ** Показатели - ТаблицаЗначений - показатели бухгалтерской отчетности: +// *** Код - Строка - код показателя отчетности. +// *** Значение - Число - значение показателя отчетности. +// * ОрганизацииГдеРуководитель - ТаблицаЗначений - (устарело) данные об организациях, где руководитель этой организации также является руководителем: +// следует использовать Руководители[0].ОрганизацииГдеРуководитель +// Колонки: +// ** НаименованиеОрганизации - Строка - наименование организации. +// ** ИНН - Строка - ИНН организации. +// ** КодСтатуса - Строка - код текущего статуса организации. +// ** НаименованиеСтатуса - Строка - наименование текущего статуса организации. +// * ОрганизацииГдеРуководительПоФИО - Булево - если Истина, поиск проводился по ФИО руководителя, иначе по ИНН. +// Устарело, следует использовать Руководители[0].ОрганизацииГдеРуководительПоФИО. +// * ОрганизацииГдеУчредитель - ТаблицаЗначений - организации, где руководитель этой организации является учредителем: +// Устарело, следует использовать Руководители[0].ОрганизацииГдеУчредитель. +// ** НаименованиеОрганизации - Строка - наименование организации. +// ** ИНН - Строка - ИНН организации. +// ** КодСтатуса - Строка - код текущего статуса организации. +// ** НаименованиеСтатуса - Строка - наименование текущего статуса организации. +// ** ПроцентКапитала - Число - процент в уставном капитале. +// ** СуммаКапитала - Число - сумма взноса в уставный капитал. +// * ОрганизацииГдеУчредительПоФИО - Булево - если Истина, поиск проводился по ФИО руководителя, иначе по ИНН. +// Устарело, следует использовать Руководители[0].ОрганизацииГдеУчредительПоФИО. +// * ОжиданиеОтвета - Булево - если возвращается Истина - требуется повторный вызов метода с этими же параметрами. +// * НаименованиеСтатуса - Строка, Неопределено - устарело, необходимо использовать Статус.Наименование - наименование текущего статуса; +// * КодСтатуса - Строка, Неопределено - устарело, необходимо использовать Статус.Код - код текущего статуса. // Функция ИнформацияОСвязяхЮридическогоЛицаПоИНН(Знач ИНН) Экспорт @@ -953,7 +806,9 @@ URLОперации, НСтр("ru='ИНН юридического лица должен состоять из 10 цифр.'")); ЗаполнитьЗначенияСвойств(Результат, РезультатВызова, "ОжиданиеОтвета, ОписаниеОшибки"); - Если Результат.ОжиданиеОтвета Или ЗначениеЗаполнено(Результат.ОписаниеОшибки) Тогда + Если Результат.ОжиданиеОтвета + Или ЗначениеЗаполнено(Результат.ОписаниеОшибки) Тогда + Возврат Результат; КонецЕсли; @@ -988,6 +843,7 @@ ЗаполнитьНаименованияЮридическогоЛица(ТелоОтветаОбъект.Получить("name"), Результат); ЗаполнитьЮридическийАдрес(ТелоОтветаОбъект.Получить("address"), Результат); + ЗаполнитьЭлектроннуюПочту(ТелоОтветаОбъект.Получить("email"), Результат); ЗаполнитьРегистрациюВНалоговомОргане(ТелоОтветаОбъект, Результат); ЗаполнитьРеквизитыПенсионногоФонда(ТелоОтветаОбъект, Результат); ЗаполнитьРеквизитыФондаСоциальногоСтрахования(ТелоОтветаОбъект, Результат); @@ -995,6 +851,7 @@ ЗаполнитьИнформациюОСтатусе(ТелоОтветаОбъект, Результат); ЗаполнитьИнформациюОСтатусеСтруктура(ТелоОтветаОбъект, Результат); ЗаполнитьИнформациюОРегистрирующемОргане(ТелоОтветаОбъект, Результат); + ЗаполнитьСведенияОРегистрацииНаДеньПринятия(ТелоОтветаОбъект, Результат); ЗаполнитьИсториюРеквизитовЮридическогоЛица(ТелоОтветаОбъект, Результат); ЗаполнитьИнформациюОМассовостиАдреса(ТелоОтветаОбъект, Результат); ЗаполнитьКодОКВЭД(ТелоОтветаОбъект, Результат); @@ -1002,11 +859,18 @@ ЗаполнитьИнформациюОВидахДеятельности(ТелоОтветаОбъект, Результат); ЗаполнитьИнформациюОЛицензиях(ТелоОтветаОбъект, Результат); ЗаполнитьСведенияОРуководителях(ТелоОтветаОбъект, Результат); + ЗаполнитьВидПолномочий(ТелоОтветаОбъект, Результат); ЗаполнитьДанныеОРуководителях(ТелоОтветаОбъект, Результат); ЗаполнитьИнформациюОбУчрежденныхФирмах(ТелоОтветаОбъект, Результат); ЗаполнитьИнформациюОбУчредителях(ТелоОтветаОбъект, Результат); ЗаполнитьИнформациюОДанныхУчредителей(ТелоОтветаОбъект, Результат); + ЗаполнитьИнформациюОДействующихОтИмениЮридическогоЛица(ТелоОтветаОбъект, Результат); ЗаполнитьИнформациюОбУставномКапитале(ТелоОтветаОбъект, Результат); + ЗаполнитьИнформациюОСтатусеМКФ(ТелоОтветаОбъект, Результат); + ЗаполнитьИнформациюОКорпоративномДоговоре(ТелоОтветаОбъект, Результат); + ЗаполнитьИнформациюОДержателеРеестраАкционеров(ТелоОтветаОбъект, Результат); + ЗаполнитьИнформациюОПравопреемниках(ТелоОтветаОбъект, Результат); + ЗаполнитьИнформациюОПравопредшественниках(ТелоОтветаОбъект, Результат); ЗаполнитьИнформациюОПодразделениях(ТелоОтветаОбъект, Результат); ЗаполнитьИнформациюОбИзмененияхВРеестре(ТелоОтветаОбъект, Результат); ЗаполнитьИнформациюОБухгалтерскойОтчетности(ТелоОтветаОбъект, Результат); @@ -1037,77 +901,84 @@ // Возвращается информация о связях индивидуального предпринимателя с другими лицами по данным ЕГРЮЛ и ЕГРИП. // // Параметры: -// ИНН - Строка - ИНН индивидуального предпринимателя, информацию о связях которого надо получить. +// ИНН - Строка - ИНН индивидуального предпринимателя, информацию о связях которого надо получить. // // Возвращаемое значение: -// - Структура - информация о связях индивидуального предпринимателя. -// Содержит основные данные о предпринимателе - см. РеквизитыПредпринимателяПоИНН. -// Также содержит данные: -// * Статус - Структура - текущий статус предпринимателя. -// Поля: -// ** Код - Строка - код статуса; -// ** Наименование - Строка - наименование статуса; -// * ВидыДеятельности - ТаблицаЗначений - информация о видах деятельности. -// ** Код - Строка - код вида деятельности; -// ** Наименование - Строка - наименование вида деятельности; -// ** Классификатор - Строка - тип классификатор экономической деятельности, согласно которому указаны код и наименование; -// Значения: "ОКВЭД", "ОКВЭД2" -// ** КодОКВЭД (устарело) - Строка - код вида деятельности по классификатору ОКВЭД. -// Устарело, следует использовать Код. -// ** НаименованиеОКВЭД (устарело) - Строка - наименование вида деятельности по ОКВЭД, -// сервисом не поставляется, должно заполняться из переопределяемого кода. -// Устарело, следует использовать Наименование. -// ** ЭтоОКВЭД2 (устарело) - Булево - код приведен по классификатору редакции 2 или редакции 1. -// Устарело, следует использовать Классификатор. -// * Лицензии - ТаблицаЗначений - данные о полученных лицензиях. -// ** Лицензия - Строка - наименование лицензии. -// ** ОписаниеЛицензии - Строка - подробное описание лицензии. -// * ОрганизацииГдеРуководитель - ТаблицаЗначений - данные об организациях, где этот предприниматель является руководителем. -// ** НаименованиеОрганизации - Строка - наименование организации. -// ** ИНН - Строка - ИНН организации. -// ** КодСтатуса - Строка - код текущего статуса организации. -// ** НаименованиеСтатуса - Строка - наименование текущего статуса организации. -// * ОрганизацииГдеРуководительПоФИО - Булево - если Истина, поиск проводился по ФИО предпринимателя, иначе по ИНН. -// * ОрганизацииГдеУчредитель - ТаблицаЗначений - организации, где этот предприниматель является учредителем. -// ** НаименованиеОрганизации - Строка - наименование организации. -// ** ИНН - Строка - ИНН организации. -// ** КодСтатуса - Строка - код текущего статуса организации. -// ** НаименованиеСтатуса - Строка - наименование текущего статуса организации. -// ** ПроцентКапитала - Число - процент в уставном капитале. -// ** СуммаКапитала - Число - сумма взноса в уставный капитал. -// * ОрганизацииГдеУчредительПоФИО - Булево - если Истина, поиск проводился по ФИО предпринимателя, иначе по ИНН. -// * ИзмененияВРеестре - ТаблицаЗначений - данные об изменениях в ЕГРИП по этому лицу. -// ** ДатаИзменения - Дата - дата внесения изменения. -// ** ГосударственныйОрган - Строка - орган, который внес изменение. -// ** ОписаниеИзменения - Строка - описание изменения; -// * ИсторияРеквизитов - Структура - история изменения реквизитов предпринимателя. -// ** ФИО - ТаблицаЗначений - история изменения ФИО; -// Колонки: -// *** Дата - Дата - дата изменения ФИО; -// *** Фамилия - Строка - фамилия; -// *** Имя - Строка - имя; -// *** Отчество - Строка - отчество; -// ** Гражданство - ТаблицаЗначений - история изменения гражданства; -// Колонки: -// *** Дата - Дата - дата изменения гражданства; -// *** КодСтраныГражданства - Строка, Неопределено - код страны; -// ** ОГРН - ТаблицаЗначений - история изменения ОГРН; -// Колонки: -// *** Дата - Дата - дата изменения ОГРН; -// *** Значение - Строка - значение ОГРН; -// *** ВидПредпринимателя - Структура - вид предпринимателя. -// **** Дата - Дата - дата изменения вида предпринимателя; -// **** Код - Строка - код вида предпринимателя; -// **** Наименование - Строка - наименование вида предпринимателя; -// *** Статус - Структура - статус предпринимателя. -// **** Дата - Дата - дата изменения статуса; -// **** Код - Строка - код статуса; -// **** Наименование - Строка - наименование статуса; -// * ОжиданиеОтвета - Булево - если возвращается Истина - требуется повторный вызов метода с этими же параметрами. -// * ОписаниеОшибки - Строка - служебный реквизит. -// Для обработки ошибки на клиентской части необходимо использовать метод -// РаботаСКонтрагентамиКлиент.ОбработатьОшибку. -// * КодСтатуса - Строка - устарело, необходимо использовать Статус.Код - код текущего статуса. +// Структура - информация о связях индивидуального предпринимателя: +// * ИНН - Неопределено, Строка - ИНН предпринимателя. +// * Наименование - Неопределено, Строка - представление предпринимателя в учетной программе. +// * НаименованиеПолное - Неопределено, Строка - фамилия, имя, отчество предпринимателя. +// * НаименованиеСокращенное - Неопределено, Строка - фамилия, имя, отчество предпринимателя. +// * ВидИП - Неопределено, Строка - вид предпринимателя. +// * Фамилия - Неопределено, Строка - фамилия предпринимателя. +// * Имя - Неопределено, Строка - имя предпринимателя. +// * Отчество - Неопределено, Строка - отчество предпринимателя. +// * ФамилияНаАнглийском - Неопределено, Строка - фамилия предпринимателя на английском. +// * ИмяНаАнглийском - Неопределено, Строка - имя предпринимателя на английском. +// * ОтчествоНаАнглийском - Неопределено, Строка - отчество предпринимателя на английском. +// * РегистрационныйНомер - Неопределено, Строка - ОГРНИП. +// * Пол - Неопределено, Строка - "1" - Мужской, "2" - Женский. +// * КодСтраныГражданства - Неопределено, Строка - код страны. +// * РегистрацияВНалоговомОргане - Неопределено, Структура - данные о регистрации в ИФНС: +// ** Код - Строка - код налогового органа. +// ** Наименование - Строка - наименование налогового органа. +// ** ОКТМО - Строка - код ОКТМО налогового органа. +// ** ОКАТО - Строка - код ОКАТО налогового органа. +// ** ДатаРегистрации - Дата - дата постановки на учет в налоговом органе. +// * РегистрацияВПенсионномФонде - Неопределено, Структура - данные о регистрации в ПФР: +// ** РегистрационныйНомерПФР - Строка - регистрационный номер предпринимателя в ПФР. +// ** КодОрганаПФР - Строка - код органа ПФР. +// ** НаименованиеОрганаПФР - Строка - наименование органа ПФР. +// ** ДатаРегистрации - Дата - дата постановки на учет в ПФР. +// * РегистрацияВФСС - Неопределено, Структура - данные о регистрации в ФСС: +// ** РегистрационныйНомерФСС - Строка - регистрационный номер предпринимателя в ФСС. +// ** КодПодчиненности - Строка - код подчиненности органа ФСС. +// ** КодОрганаФСС - Строка - код органа ФСС. +// ** НаименованиеОрганаФСС - Строка - наименование органа ФСС. +// ** ДатаРегистрации - Дата - дата постановки на учет в ФСС. +// * РегистрацияВСФР - Неопределено, Структура - данные о регистрации в СФР: +// ** РегистрационныйНомерСФР - Строка - регистрационный номер предпринимателя в СФР. +// ** КодОрганаСФР - Строка - код органа СФР. +// ** НаименованиеОрганаСФР - Строка - наименование органа СФР. +// ** ДатаРегистрации - Дата - дата постановки на учет в СФР. +// * ДатаРегистрации - Неопределено, Дата - дата регистрации предпринимателя. +// * СвидетельствоОРегистрации - Неопределено, Структура - данные свидетельства: +// ** Серия - Строка - серия свидетельства. +// ** Номер - Строка - номер свидетельства. +// ** Дата - Дата - дата выдачи свидетельства. +// * ВидДеятельности - Неопределено, Структура - описание вида экономической деятельности: +// ** Код - Строка - код вида деятельности; +// ** Наименование - Строка - наименование вида деятельности; +// ** Классификатор - Строка - тип классификатор экономической деятельности, согласно которому указаны код и наименование. +// Значения: "ОКВЭД", "ОКВЭД2"; +// * Статус - Неопределено, Структура - текущий статус предпринимателя: +// ** Код - Строка - код статуса; +// ** Наименование - Строка - наименование статуса. +// * ЭлектроннаяПочта - Неопределено, Строка - электронная почта. +// * ЯвляетсяГлавойКФХ - Булево - признак, что является главой КФХ. +// * ЯвляетсяГлавойКФХОписание - Строка - описание признака, что является главой КФХ. +// * ИсторияРеквизитов - Структура - история изменения реквизитов предпринимателя. +// см. НовыйИсторияРеквизитовПредпринимателя +// * ОписаниеОшибки - Неопределено, Строка - описание возникшей ошибки. +// Для обработки ошибки на клиентской части необходимо использовать метод +// РаботаСКонтрагентамиКлиент.ОбработатьОшибку. +// * КодОКВЭД - Неопределено, Строка - устарело, следует использовать ВидДеятельности.Код, код основного +// вида деятельности по классификатору ОКВЭД. +// * ЭтоОКВЭД2 - Булево - устарело, следует использовать ВидДеятельности.Классификатор, код ОКВЭД +// приведен по классификатору редакции 2 или редакции 1. +// * ВидыДеятельности - ТаблицаЗначений - информация о видах деятельности. см. НоваяТаблицаВидыДеятельности +// * Лицензии - ТаблицаЗначений - данные о полученных лицензиях. см. НоваяТаблицаЛицензии. +// * ОрганизацииГдеРуководитель - ТаблицаЗначений - данные об организациях, где этот предприниматель является руководителем. +// см. НоваяТаблицаОрганизации. +// * ОрганизацииГдеРуководительПоФИО - Булево - если Истина, поиск проводился по ФИО предпринимателя, иначе по ИНН. +// * ОрганизацииГдеУчредитель - ТаблицаЗначений - организации, где этот предприниматель является учредителем. +// см. НоваяТаблицаОрганизацииГдеУчредитель. +// * ОрганизацииГдеУчредительПоФИО - Булево - если Истина, поиск проводился по ФИО предпринимателя, иначе по ИНН. +// * ИзмененияВРеестре - ТаблицаЗначений - данные об изменениях в ЕГРИП по этому лицу. +// см. НоваяТаблицаИзмененияВРеестре. +// * ОжиданиеОтвета - Булево - если возвращается Истина - требуется повторный вызов метода с этими же параметрами. +// * НаименованиеСтатуса - Строка, Неопределено - устарело, необходимо использовать Статус.Наименование - наименование текущего статуса; +// * КодСтатуса - Строка, Неопределено - устарело, необходимо использовать Статус.Код - код текущего статуса. // Функция ИнформацияОСвязяхПредпринимателяПоИНН(Знач ИНН) Экспорт @@ -1137,7 +1008,9 @@ URLОперации, НСтр("ru='ИНН предпринимателя должен состоять из 12 цифр.'")); ЗаполнитьЗначенияСвойств(Результат, РезультатВызова, "ОжиданиеОтвета, ОписаниеОшибки"); - Если Результат.ОжиданиеОтвета Или ЗначениеЗаполнено(Результат.ОписаниеОшибки) Тогда + Если Результат.ОжиданиеОтвета + Или ЗначениеЗаполнено(Результат.ОписаниеОшибки) Тогда + Возврат Результат; КонецЕсли; @@ -1153,6 +1026,7 @@ КонецЕсли; ЗаполнитьОсновныеРеквизитыПредпринимателя(ТелоОтветаОбъект, Результат, Истина); + ЗаполнитьЭлектроннуюПочту(ТелоОтветаОбъект.Получить("email"), Результат); ЗаполнитьИнформациюОСтатусе(ТелоОтветаОбъект, Результат); ЗаполнитьКодОКВЭД(ТелоОтветаОбъект, Результат); ЗаполнитьВидДеятельности(ТелоОтветаОбъект, Результат); @@ -1189,44 +1063,44 @@ // контролирующими органами по открытым данным единого реестра проверок. // // Параметры: -// СписокИНН - Массив из Строка - ИНН юридических лиц и/или предпринимателей, -// информацию о проверках которых необходимо получить. -// Допустимое количество элементов - не более 1000. -// При превышении допустимого количества вызывается исключение; -// Плановые - Булево - требуется ли информация о плановых проверках; -// Внеплановые - Булево - требуется ли информация о внеплановых проверках; -// Завершенные - Булево - требуется ли информация о завершенных -// проверках (плановых и внеплановых), по которым уже известен результат. -// Незавершенные - Булево - требуется ли информация о незавершенных -// проверках (плановых и внеплановых), результат по которым неизвестен; +// СписокИНН - Массив из Строка - ИНН юридических лиц и/или предпринимателей, +// информацию о проверках которых необходимо получить. +// Допустимое количество элементов - не более 1000. +// При превышении допустимого количества вызывается исключение; +// Плановые - Булево - требуется ли информация о плановых проверках; +// Внеплановые - Булево - требуется ли информация о внеплановых проверках; +// Завершенные - Булево - требуется ли информация о завершенных +// проверках (плановых и внеплановых), по которым уже известен результат. +// Незавершенные - Булево - требуется ли информация о незавершенных +// проверках (плановых и внеплановых), результат по которым неизвестен; // // Возвращаемое значение: -// - Структура - результат получения информации о проверках. -// * Проверки - Соответствие - информация о проверках: -// ** Ключ - Строка - ИНН; -// ** Значение - ТаблицаЗначений - информация о проверках юридического лица -// или предпринимателя с указанным ИНН. -// Колонки таблицы: -// *** Идентификатор - Строка - идентификатор проверки в едином реестре проверок; -// *** ПлановаяПроверка - Булево - плановая проверка или внеплановая; -// *** ПериодПроверки - Дата - месяц, в котором проводится проверка; -// *** ДатаПроверки - Дата - дата начала проверки; -// *** КонтролирующийОрган - Строка - орган, который проводит проверку; -// *** АдресПроверки - Строка - адрес, по которому проводится проверка; -// *** ЦельПроверки - Строка - с какой целью проводится проверка; -// *** Длительность - Строка - длительность проверки; -// *** Результат - Строка - описание результата проверки; -// *** Нарушения - ТаблицаЗначений - найденные нарушения; -// **** НомерНарушения - Число - номер по порядку; -// **** Нарушение - Строка - описание нарушения; -// **** НарушенныйАкт - Строка - нарушенный нормативный акт; -// **** Предписание - Строка - выданное предписание о необходимости устранении нарушения; -// **** Исполнение - Строка - информация об устранении нарушения; -// * ОжиданиеОтвета - Булево - если возвращается Истина - требуется повторный -// вызов метода с этими же параметрами; -// * ОписаниеОшибки - Строка - служебный реквизит. -// Для обработки ошибки на клиентской части необходимо использовать метод -// РаботаСКонтрагентамиКлиент.ОбработатьОшибку. +// Структура - результат получения информации о проверках: +// * Проверки - Соответствие из Строка, ТаблицаЗначений - информация о проверках: +// ** Ключ - Строка - ИНН; +// ** Значение - ТаблицаЗначений - информация о проверках юридического лица +// или предпринимателя с указанным ИНН. +// Колонки таблицы: +// *** Идентификатор - Строка - идентификатор проверки в едином реестре проверок; +// *** ПлановаяПроверка - Булево - плановая проверка или внеплановая; +// *** ПериодПроверки - Дата - месяц, в котором проводится проверка; +// *** ДатаПроверки - Дата - дата начала проверки; +// *** КонтролирующийОрган - Строка - орган, который проводит проверку; +// *** АдресПроверки - Строка - адрес, по которому проводится проверка; +// *** ЦельПроверки - Строка - с какой целью проводится проверка; +// *** Длительность - Строка - длительность проверки; +// *** Результат - Строка - описание результата проверки; +// *** Нарушения - ТаблицаЗначений - найденные нарушения: +// **** НомерНарушения - Число - номер по порядку; +// **** Нарушение - Строка - описание нарушения; +// **** НарушенныйАкт - Строка - нарушенный нормативный акт; +// **** Предписание - Строка - выданное предписание о необходимости устранении нарушения; +// **** Исполнение - Строка - информация об устранении нарушения; +// * ОжиданиеОтвета - Булево - если возвращается Истина - требуется повторный +// вызов метода с этими же параметрами; +// * ОписаниеОшибки - Строка - служебный реквизит. +// Для обработки ошибки на клиентской части необходимо использовать метод +// РаботаСКонтрагентамиКлиент.ОбработатьОшибку. // Функция ИнформацияОПроверкахКонтролирующимиОрганамиПоСпискуИНН( СписокИНН, Плановые, Внеплановые, Завершенные, Незавершенные) Экспорт @@ -1245,10 +1119,10 @@ // // Возвращаемое значение: // Структура - сведения о юридическом лице: -// *ЕстьПодразделения - Булево - есть подразделения. -// *ОписаниеОшибки - Строка - служебный реквизит. -// Для обработки ошибки на клиентской части необходимо использовать метод -// РаботаСКонтрагентамиКлиент.ОбработатьОшибку. +// * ЕстьПодразделения - Булево - есть подразделения. +// * ОписаниеОшибки - Строка, Неопределено - служебный реквизит. +// Для обработки ошибки на клиентской части необходимо использовать метод +// РаботаСКонтрагентамиКлиент.ОбработатьОшибку. // Функция НаличиеПодразделенийПоИНН(ИНН) Экспорт @@ -1302,23 +1176,23 @@ // // Возвращаемое значение: // Структура - сведения о подразделении: -// *ИНН - Строка - ИНН юридического лица. -// *ЕГРЮЛ - Структура, Неопределено - сведения из ЮГРЮЛ. Поля: -// **ИНН - Строка - ИНН юридического лица. -// **КПП - Строка - КПП юридического лица. -// **Наименование - Строка - представление юридического лица в учетной программе. -// **РегистрационныйНомер - Строка - ОГРН юридического лица. -// **ЮридическийАдрес - Структура, Неопределено - данные о юридическом адресе. -// ***КонтактнаяИнформация - Строка - данные в формате JSON для заполнения реквизита +// * ИНН - Строка, Неопределено - ИНН юридического лица. +// * ЕГРЮЛ - Неопределено, Структура - сведения из ЕГРЮЛ: +// ** ИНН - Строка - ИНН юридического лица. +// ** КПП - Строка - КПП юридического лица. +// ** Наименование - Строка - представление юридического лица в учетной программе. +// ** РегистрационныйНомер - Строка - ОГРН юридического лица. +// ** ЮридическийАдрес - Неопределено, Структура - данные о юридическом адресе: +// *** КонтактнаяИнформация - Строка - данные в формате JSON для заполнения реквизита // "Значение" контактной информации в табличной части КонтактнаяИнформация объекта // (см. описание подсистемы "Контактная информация" Библиотеки стандартных подсистем). -// ***Представление - Строка - представление адреса. -// ***Комментарий - Строка - произвольный комментарий. -// ***Корректный - Булево - адрес является корректным по данным ФИАС; -// **ВидДеятельности - Структура - описание вида экономической деятельности. Поля: -// ***Код - Строка - код вида деятельности; -// ***Наименование - Строка- наименование вида деятельности; -// *ОписаниеОшибки - Строка - служебный реквизит. +// *** Представление - Строка - представление адреса. +// *** Комментарий - Строка - произвольный комментарий. +// *** Корректный - Булево - адрес является корректным по данным ФИАС; +// ** ВидДеятельности - Структура - описание вида экономической деятельности. Поля: +// *** Код - Строка - код вида деятельности; +// *** Наименование - Строка- наименование вида деятельности; +// * ОписаниеОшибки - Строка, Неопределено - служебный реквизит. // Для обработки ошибки на клиентской части необходимо использовать метод // РаботаСКонтрагентамиКлиент.ОбработатьОшибку. // @@ -1374,23 +1248,23 @@ // // Возвращаемое значение: // Структура - сведения о подразделении: -// *ИНН - Строка - ИНН юридического лица. -// *ЕГРЮЛ - Структура, Неопределено - сведения из ЮГРЮЛ. Поля: -// **ИНН - Строка - ИНН юридического лица. -// **КПП - Строка - КПП юридического лица. -// **Наименование - Строка - представление юридического лица в учетной программе. -// **РегистрационныйНомер - Строка - ОГРН юридического лица. -// **ЮридическийАдрес - Структура, Неопределено - данные о юридическом адресе. -// ***КонтактнаяИнформация - Строка - данные в формате JSON для заполнения реквизита +// * ИНН - Строка - ИНН юридического лица. +// * ЕГРЮЛ - Неопределено, Структура - сведения из ЕГРЮЛ: +// ** ИНН - Строка - ИНН юридического лица. +// ** КПП - Строка - КПП юридического лица. +// ** Наименование - Строка - представление юридического лица в учетной программе. +// ** РегистрационныйНомер - Строка - ОГРН юридического лица. +// ** ЮридическийАдрес - Неопределено, Структура - данные о юридическом адресе: +// *** КонтактнаяИнформация - Строка - данные в формате JSON для заполнения реквизита // "Значение" контактной информации в табличной части КонтактнаяИнформация объекта // (см. описание подсистемы "Контактная информация" Библиотеки стандартных подсистем). -// ***Представление - Строка - представление адреса. -// ***Комментарий - Строка - произвольный комментарий. -// ***Корректный - Булево - адрес является корректным по данным ФИАС; -// **ВидДеятельности - Структура - описание вида экономической деятельности. Поля: -// ***Код - Строка - код вида деятельности; -// ***Наименование - Строка- наименование вида деятельности; -// *ОписаниеОшибки - Строка - служебный реквизит. +// *** Представление - Строка - представление адреса. +// *** Комментарий - Строка - произвольный комментарий. +// *** Корректный - Булево - адрес является корректным по данным ФИАС; +// ** ВидДеятельности - Структура - описание вида экономической деятельности. Поля: +// *** Код - Строка - код вида деятельности; +// *** Наименование - Строка- наименование вида деятельности; +// * ОписаниеОшибки - Строка - служебный реквизит. // Для обработки ошибки на клиентской части необходимо использовать метод // РаботаСКонтрагентамиКлиент.ОбработатьОшибку. // @@ -1456,36 +1330,36 @@ // Возвращаются реквизиты налоговой инспекции по коду. // // Параметры: -// КодНалоговогоОргана - Строка - код налогового органа. +// КодНалоговогоОргана - Строка - код налогового органа. // // Возвращаемое значение: -// - Структура - реквизиты налоговой инспекции. -// * Код - Строка - код государственного органа; -// * ИНН - Строка - ИНН; -// * КПП - Строка - КПП; -// * Наименование - Строка - наименование государственного органа; -// * ПолноеНаименование - Строка - полное наименование государственного органа; -// * Адрес - Строка - Юридический адрес; -// * Телефон - Строка - Телефон; -// * ЭлектроннаяПочта - Строка - адрес электронной почты; -// * ИнтернетСайт - Строка - URL сайта государственного органа; -// * ПлатежныеРеквизиты - Структура - платежные реквизиты налогового органа: -// ** ПолучательПлатежа - Строка - получатель платежа; -// ** РасчетныйСчет - Строка - расчетный счет; -// ** КоррСчет - Строка - корреспондентский счет; -// ** БИК - Строка - БИК банка; -// * РегистрирующийОрганИП - Структура, Неопределено - реквизиты регистрирующего -// органа индивидуальных предпринимателей: -// ** Код - Строка - код органа; -// ** Наименование - Строка - наименование органа; -// ** Адрес - Строка - юридический адрес; -// ** Телефон - Строка - Строка; -// ** Информация - Строка - информация; -// * РегистрирующийОрганЮЛ - Структура, Неопределено - реквизиты регистрирующего органа юридических лиц. -// Описание реквизитов см. в поле РегистрирующийОрганИП. -// * ОписаниеОшибки - Строка - описание возникшей ошибки. -// Для обработки ошибки на клиентской части необходимо использовать метод -// РаботаСКонтрагентамиКлиент.ОбработатьОшибку. +// Структура - реквизиты налоговой инспекции: +// * Код - Строка - код государственного органа; +// * ИНН - Строка - ИНН; +// * КПП - Строка - КПП; +// * Наименование - Строка - наименование государственного органа; +// * ПолноеНаименование - Строка - полное наименование государственного органа; +// * Адрес - Строка - Юридический адрес; +// * Телефон - Строка - Телефон; +// * ЭлектроннаяПочта - Строка - адрес электронной почты; +// * ИнтернетСайт - Строка - URL сайта государственного органа; +// * ПлатежныеРеквизиты - Структура - платежные реквизиты налогового органа: +// ** ПолучательПлатежа - Строка - получатель платежа; +// ** РасчетныйСчет - Строка - расчетный счет; +// ** КоррСчет - Строка - корреспондентский счет; +// ** БИК - Строка - БИК банка; +// * РегистрирующийОрганИП - Неопределено, Структура - реквизиты регистрирующего +// органа индивидуальных предпринимателей: +// ** Код - Строка - код органа; +// ** Наименование - Строка - наименование органа; +// ** Адрес - Строка - юридический адрес; +// ** Телефон - Строка - Строка; +// ** Информация - Строка - информация; +// * РегистрирующийОрганЮЛ - Неопределено, Структура - реквизиты регистрирующего органа юридических лиц. +// Описание реквизитов см. в поле РегистрирующийОрганИП. +// * ОписаниеОшибки - Строка - описание возникшей ошибки. +// Для обработки ошибки на клиентской части необходимо использовать метод +// РаботаСКонтрагентамиКлиент.ОбработатьОшибку. // Функция РеквизитыНалоговогоОрганаПоКоду(Знач КодНалоговогоОргана) Экспорт @@ -1557,27 +1431,27 @@ // Возвращаются реквизиты отделения ФСС по коду. // // Параметры: -// КодОтделенияФСС - Строка - Код отделения ФСС. +// КодОтделенияФСС - Строка - Код отделения ФСС. // // Возвращаемое значение: -// - Структура - реквизиты отделения ФСС. -// * Код - Строка - код государственного органа; -// * ИНН - Строка - ИНН; -// * КПП - Строка - КПП; -// * Наименование - Строка - наименование государственного органа; -// * ПолноеНаименование - Строка - полное наименование государственного органа; -// * Адрес - Строка - Юридический адрес; -// * Телефон - Строка - Телефон; -// * ЭлектроннаяПочта - Строка - адрес электронной почты; -// * ИнтернетСайт - Строка - URL сайта государственного органа; -// * ПлатежныеРеквизиты - Структура - платежные реквизиты ФСС: -// ** ПолучательПлатежа - Строка - получатель платежа; -// ** РасчетныйСчет - Строка - расчетный счет; -// ** КоррСчет - Строка - корреспондентский счет; -// ** БИК - Строка - БИК банка; -// * ОписаниеОшибки - Строка - описание возникшей ошибки. -// Для обработки ошибки на клиентской части необходимо использовать метод -// РаботаСКонтрагентамиКлиент.ОбработатьОшибку. +// Структура - реквизиты отделения ФСС: +// * Код - Строка - код государственного органа; +// * ИНН - Строка - ИНН; +// * КПП - Строка - КПП; +// * Наименование - Строка - наименование государственного органа; +// * ПолноеНаименование - Строка - полное наименование государственного органа; +// * Адрес - Строка - Юридический адрес; +// * Телефон - Строка - Телефон; +// * ЭлектроннаяПочта - Строка - адрес электронной почты; +// * ИнтернетСайт - Строка - URL сайта государственного органа; +// * ПлатежныеРеквизиты - Структура - платежные реквизиты ФСС: +// ** ПолучательПлатежа - Строка - получатель платежа; +// ** РасчетныйСчет - Строка - расчетный счет; +// ** КоррСчет - Строка - корреспондентский счет; +// ** БИК - Строка - БИК банка; +// * ОписаниеОшибки - Строка - описание возникшей ошибки. +// Для обработки ошибки на клиентской части необходимо использовать метод +// РаботаСКонтрагентамиКлиент.ОбработатьОшибку. // Функция РеквизитыОтделенияФССПоКоду(Знач КодОтделенияФСС) Экспорт @@ -1635,27 +1509,27 @@ // Возвращаются реквизиты отделения ПФР по коду. // // Параметры: -// КодОтделенияПФР - Строка - код отделения ПФР. +// КодОтделенияПФР - Строка - код отделения ПФР. // // Возвращаемое значение: -// - Структура - реквизиты отделения ПРФ. -// * Код - Строка - код государственного органа; -// * ИНН - Строка - ИНН; -// * КПП - Строка - КПП; -// * Наименование - Строка - наименование государственного органа; -// * ПолноеНаименование - Строка - полное наименование государственного органа; -// * Адрес - Строка - Юридический адрес; -// * Телефон - Строка - Телефон; -// * ЭлектроннаяПочта - Строка - адрес электронной почты; -// * ИнтернетСайт - Строка - URL сайта государственного органа; -// * ПлатежныеРеквизиты - Структура - платежные реквизиты ПФР: -// ** ПолучательПлатежа - Строка - получатель платежа; -// ** РасчетныйСчет - Строка - расчетный счет; -// ** КоррСчет - Строка - корреспондентский счет; -// ** БИК - Строка - БИК банка; -// * ОписаниеОшибки - Строка - описание возникшей ошибки. -// Для обработки ошибки на клиентской части необходимо использовать метод -// РаботаСКонтрагентамиКлиент.ОбработатьОшибку. +// Структура - реквизиты отделения ПФР: +// * Код - Строка - код государственного органа; +// * ИНН - Строка - ИНН; +// * КПП - Строка - КПП; +// * Наименование - Строка - наименование государственного органа; +// * ПолноеНаименование - Строка - полное наименование государственного органа; +// * Адрес - Строка - Юридический адрес; +// * Телефон - Строка - Телефон; +// * ЭлектроннаяПочта - Строка - адрес электронной почты; +// * ИнтернетСайт - Строка - URL сайта государственного органа; +// * ПлатежныеРеквизиты - Структура - платежные реквизиты ПФР: +// ** ПолучательПлатежа - Строка - получатель платежа; +// ** РасчетныйСчет - Строка - расчетный счет; +// ** КоррСчет - Строка - корреспондентский счет; +// ** БИК - Строка - БИК банка; +// * ОписаниеОшибки - Строка - описание возникшей ошибки. +// Для обработки ошибки на клиентской части необходимо использовать метод +// РаботаСКонтрагентамиКлиент.ОбработатьОшибку. // Функция РеквизитыОтделенияПФРПоКоду(Знач КодОтделенияПФР) Экспорт @@ -1719,192 +1593,135 @@ // Возвращает сведения об юридическом лице для заполнения сертификата. // // Параметры: -// ИНН - Строка - ИНН юридического лица. +// ИНН - Строка - ИНН юридического лица. // // Возвращаемое значение: -// - Структура - сведения о юридическом лице: -// * ИНН - Строка - ИНН юридического лица. -// * ЕГРЮЛ - Структура, Неопределено - сведения из ЮГРЮЛ. Поля: -// ** КПП - Строка - КПП юридического лица. -// ** Наименование - Строка - представление юридического лица в учетной программе. -// ** НаименованиеПолное - Строка - полное наименование юридического лица. -// ** НаименованиеСокращенное - Строка - сокращенное наименование юридического лица. -// ** НаименованиеПолноеЕГРЮЛ - Строка - полное наименование юридического лица в ЕГРЮЛ. -// ** НаименованиеСокращенноеЕГРЮЛ - Строка - сокращенное наименование юридического лица в ЕГРЮЛ. -// ** НаименованиеПолноеНаАнглийском - Строка - полное наименование юридического лица на английском. -// ** НаименованиеСокращенноеНаАнглийском - Строка - сокращенное наименование юридического лица на английском. -// ** РегистрационныйНомер - Строка - ОГРН юридического лица. -// ** ПравоваяФорма - Строка, Неопределено - правовая форма юридического лица. -// ** Статус - Структура - текущий статус юридического лица. -// Поля: -// *** Код - Строка - код статуса; -// *** Наименование - Строка - наименование статуса; -// ** РегистрирующийОрган - Структура - орган, зарегистрировавший юридическое лицо. -// Поля: -// *** Код - Строка - код органа; -// *** Наименование - Строка - наименование органа; -// ** ЮридическийАдрес - Структура, Неопределено - данные о юридическом адресе. -// *** КонтактнаяИнформация - Строка - данные в формате JSON для заполнения реквизита -// "Значение" контактной информации в табличной части КонтактнаяИнформация объекта -// (см. описание подсистемы "Контактная информация" Библиотеки стандартных подсистем). -// *** Представление - Строка - представление адреса. -// *** Комментарий - Строка - произвольный комментарий. -// *** Корректный - Булево - адрес является корректным по данным ФИАС; -// ** РегистрацияВНалоговомОргане - Структура, Неопределено - данные о регистрации в ИФНС. -// *** Код - Строка - код налогового органа. -// *** Наименование - Строка - наименование налогового органа. -// *** ОКТМО - Строка - код ОКТМО налогового органа. -// *** ОКАТО - Строка - код ОКАТО налогового органа. -// *** ДатаРегистрации - Дата - дата постановки на учет в налоговом органе. -// ** ДатаРегистрации - Дата - дата регистрации юридического лица. -// ** ДатаПрекращенияДеятельности - Дата, Неопределено - дата прекращения деятельности юридического лица. -// ** НомерТиповогоУстава - Строка - Номер типового устава юридического лица. -// ** РегистрацияВПенсионномФонде - Структура, Неопределено - данные о регистрации в ПФР. -// *** РегистрационныйНомерПФР - Строка - регистрационный номер юридического лица в ПФР. -// *** КодОрганаПФР - Строка - код органа ПФР. -// *** НаименованиеОрганаПФР - Строка - наименование органа ПФР. -// *** ДатаРегистрации - Дата - дата постановки на учет в ПФР. -// ** РегистрацияВФСС - Структура, Неопределено - данные о регистрации в ФСС. -// *** РегистрационныйНомерФСС - Строка - регистрационный номер юридического лица в ФСС. -// *** КодПодчиненности - Строка - код подчиненности органа ФСС. -// *** КодОрганаФСС - Строка - код органа ФСС. -// *** НаименованиеОрганаФСС - Строка - наименование органа ФСС. -// *** ДатаРегистрации - Дата - дата постановки на учет в ФСС. -// ** РегистрацияВСФР - Структура, Неопределено - данные о регистрации в СФР. -// *** РегистрационныйНомерСФР - Строка - регистрационный номер юридического лица в СФР. -// *** КодОрганаСФР - Строка - код органа СФР. -// *** НаименованиеОрганаСФР - Строка - наименование органа СФР. -// *** ДатаРегистрации - Дата - дата постановки на учет в СФР. -// ** Руководители - ТаблицаЗначений - устарело, рекомендуется использовать свойство "ДанныеРуководителей". -// Сведения о руководителях. Колонки: -// *** Должность - Строка - должность руководителя. -// *** Фамилия - Строка - фамилия руководителя. -// *** Имя - Строка - имя руководителя. -// *** Отчество - Строка - отчество руководителя. -// *** Представление - Строка - ФИО руководителя или представление скрытых данных о руководителях. -// *** ИНН - Строка - ИНН руководителя. -// *** ДатаЗаписи - Дата - дата записи о руководителе. -// ** ДанныеРуководителей - Структура - сведения о руководителях: -// *** СкрытыеДанные - Булево - признак скрытых данных о руководителях организации. -// *** ПредставлениеСкрытыхДанных - Строка - представление скрытых данных о руководителях. -// Заполняется если СкрытыеДанные = Истина -// *** Руководители - ТаблицаЗначений - сведения о руководителях. Заполняется если СкрытыеДанные = Ложь. Колонки: -// **** Должность - Строка - должность руководителя. -// **** Фамилия - Строка - фамилия руководителя. -// **** Имя - Строка - имя руководителя. -// **** Отчество - Строка - отчество руководителя. -// **** Представление - Строка - ФИО руководителя или представление скрытых данных о руководителях. -// **** ИНН - Строка - ИНН руководителя. -// **** ДатаЗаписи - Дата - дата записи о руководителе. -// ** ВидДеятельности - Структура - описание вида экономической деятельности. Поля: -// *** Код - Строка - код вида деятельности; -// *** Наименование - Строка- наименование вида деятельности; -// *** Классификатор - Строка - тип классификатор экономической деятельности, согласно которому указаны код и наименование; -// Значения: "ОКВЭД", "ОКВЭД2" -// ** ОткрытыеГосударственныеДанныеФНС - ТаблицаЗначений - открытые данные. Колонки: -// *** Год - Число - год, за который указаны данные; -// *** КоличествоСотрудников - Число, Неопределено - количество сотрудников; -// *** УчастиеВКГН - Строка, Неопределено - участие в консолидированной группе налогоплательщиков; -// *** НалогообложениеЕСХН, Неопределено - Булево - Истина, если применяется тип налогообложения ЕСХН; -// *** НалогообложениеУСН, Неопределено - Булево - Истина, если применяется тип налогообложения УСН; -// *** НалогообложениеЕНВД, Неопределено - Булево - Истина, если применяется тип налогообложения ЕНВД; -// *** НалогообложениеСРП, Неопределено - Булево - Истина, если применяется тип налогообложения СРП; -// ** ИсторияРеквизитов - Структура - история изменения реквизитов юридического лица. -// *** КПП - ТаблицаЗначений - история изменения значения реквизита КПП; -// Колонки: -// **** Дата - Дата - дата изменения КПП; -// **** Значение - Строка - значение реквизита КПП; -// *** Наименование - ТаблицаЗначений - история изменения наименования; -// Колонки: -// **** Дата - Дата - дата изменения наименования; -// **** НаименованиеПолное - Строка - полное наименование юридического лица; -// **** НаименованиеСокращенное - Строка - сокращенное наименование юридического лица; -// *** Адрес - ТаблицаЗначений - история изменения адреса; -// Колонки: -// **** Дата - Дата - дата изменения адреса; -// **** КонтактнаяИнформация - Строка - данные в формате JSON для заполнения реквизита -// "Значение" контактной информации в табличной части КонтактнаяИнформация объекта -// (см. описание подсистемы "Контактная информация" Библиотеки стандартных подсистем). -// **** Представление - Строка - представление адреса; -// **** Комментарий - Строка - произвольный комментарий; -// *** Статус - ТаблицаЗначений - история изменения статуса; -// Колонки: -// **** Дата - Дата - дата изменения наименования; -// **** Код - Строка - код статуса; -// **** Наименование - Строка - наименование статуса; -// *** РеквизитыДиректора - ТаблицаЗначений - история изменения реквизитов директора; -// Колонки: -// **** Дата - Дата - дата изменения реквизитов директора; -// **** ДатаОкончания - Дата - дата окончания действия реквизитов. -// Пустая дата, если директор действующий; -// **** ИНН - Строка - ИНН; -// **** Фамилия - Строка - фамилия директора; -// **** Имя - Строка - имя; -// **** Отчество - Строка - отчество; -// **** ВидДолжности - Строка - вид должности; -// **** НаименованиеДолжности - Строка - наименование должности; -// * РАФП - ТаблицаЗначений - сведения из РАФП. Колонки: -// ** КПП - Строка - КПП юридического лица; -// ** ВидОбособленногоПодразделения - Строка - вид обособленного подразделения; -// ** НаименованиеПолное - Строка - полное наименование представительства; -// ** РегистрацияВНалоговомОргане - Структура - информация о регистрации представительства -// в налоговом органе. -// *** Код - Строка - код налогового органа. -// *** Наименование - Строка - наименование налогового органа. -// *** ДатаРегистрации - Дата - дата регистрации в налоговом органе; -// ** ЮридическийАдрес - Структура, Неопределено - юридический адрес: -// *** КонтактнаяИнформация - Строка - данные в формате JSON для заполнения реквизита; -// "Значение" контактной информации в табличной части КонтактнаяИнформация объекта -// (см. описание подсистемы "Контактная информация" Библиотеки стандартных подсистем). -// *** Представление - Строка - представление адреса; -// *** Комментарий - Строка - произвольный комментарий; -// *** Корректный - Булево - адрес является корректным по данным ФИАС; -// ** ВидДеятельности - Структура - описание основного вида экономической деятельности. Поля: -// *** Код - Строка - код вида деятельности; -// *** Наименование - Строка - наименование вида деятельности; -// *** Классификатор - Строка - тип классификатор экономической деятельности, согласно которому указаны код и наименование; -// Значения: "ОКВЭД", "ОКВЭД2" -// ** ПрочиеВидыДеятельности - ТаблицаЗначений - описание прочих видов экономической деятельности: -// *** Код - Строка - код вида деятельности; -// *** Наименование - Строка - наименование вида деятельности; -// *** Классификатор - Строка - тип классификатор экономической деятельности, согласно которому указаны код и наименование. -// Значения: "ОКВЭД", "ОКВЭД2"; -// ** КоличествоИностранныхСотрудников - Число - количество иностранных сотрудников в представительстве; -// ** Руководитель - Структура, Неопределено - информация о руководителе: -// *** Фамилия - Строка - фамилия руководителя; -// *** Имя - Строка - имя руководителя; -// *** Отчество - Строка - отчество руководителя; -// *** Представление - Строка - ФИО руководителя; -// *** ДатаЗаписи - Дата - дата записи о руководителе; -// ** Аккредитация - Структура - информация об аккредитации представительства. Поля: -// *** НомерЗаписиОбАккредитации - Строка - номер записи об аккредитации; -// *** ДатаАккредитации - Дата - дата аккредитации; -// *** КодУполномоченногоНалоговогоОргана - Строка - код уполномоченного налогового органа, -// выполнившего аккредитацию представительства; -// *** НаименованиеУполномоченногоНалоговогоОргана - Строка - наименование уполномоченного налогового органа, -// выполнившего аккредитацию представительства; -// *** ДатаОкончанияСрокаАккредитации - Дата - дата окончания срока аккредитации; -// *** ДатаПродленияАккредитации - Дата - дата принятия решения о продлении срока аккредитации; -// *** ДатаОкончанияСрокаПродленияАккредитации - Дата - дата окончания срока продления аккредитации; -// ** ИностранноеЮридическоеЛицо - Структура - данные иностранной компании. Поля: -// *** НаименованиеПолное - Строка - полное наименование иностранного юридического лица; -// *** КодСтраны - Число - код страны регистрации по ОКСМ; -// *** Страна - Строка - наименование страны регистрации; -// *** Адрес - Строка - адрес иностранного юридического лица в стране регистрации; -// *** УставныйКапитал - Структура - информация об уставном капитале. Поля: -// **** Размер - Число - размер уставного капитала; -// **** КодВалюты - Число - код валюты уставного капитала по ОКВ; -// **** НаименованиеВалюты - Строка - наименование валюты уставного капитала; -// *** КодНалогоплательщика - Строка - код или аналог кода налогоплательщика иностранного -// юридического лица в стране регистрации; -// *** Регистрация - Структура - информация о регистрации в стране регистрации. Поля: -// **** РегистрационныйНомер - Строка - регистрационный номер; -// **** НаименованиеОргана - Строка - наименование органа регистрации в стране регистрации; -// **** ОсобенностиРежимаРегистрации - Строка - описание особенности режима регистрации; -// -// * ОписаниеОшибки - Строка - описание возникшей ошибки. -// Для обработки ошибки на клиентской части необходимо использовать метод -// РаботаСКонтрагентамиКлиент.ОбработатьОшибку. +// Структура - сведения о юридическом лице: +// * ИНН - Строка - ИНН юридического лица. +// * ЕГРЮЛ - Неопределено, Структура - сведения из ЕГРЮЛ: +// ** ИНН - Строка - ИНН юридического лица. +// ** КПП - Строка, Неопределено - КПП юридического лица. +// ** Наименование - Строка, Неопределено - представление юридического лица в учетной программе. +// ** НаименованиеПолное - Строка, Неопределено - полное наименование юридического лица. +// ** НаименованиеСокращенное - Строка, Неопределено - сокращенное наименование юридического лица. +// ** НаименованиеПолноеЕГРЮЛ - Строка, Неопределено - полное наименование юридического лица в ЕГРЮЛ. +// ** НаименованиеСокращенноеЕГРЮЛ - Строка, Неопределено - сокращенное наименование юридического лица в ЕГРЮЛ. +// ** НаименованиеПолноеНаАнглийском - Строка, Неопределено - полное наименование юридического лица на английском. +// ** НаименованиеСокращенноеНаАнглийском - Строка, Неопределено - сокращенное наименование юридического лица на английском. +// ** РегистрационныйНомер - Строка, Неопределено - ОГРН юридического лица. +// ** Статус - Неопределено, Структура - текущий статус юридического лица. +// см. НовыйДанныеСтатуса. +// ** РегистрирующийОрган - Неопределено, Структура - орган, зарегистрировавший юридическое лицо. +// см. НовыйДанныеРегистрирующегоОргана. +// ** НомерТиповогоУстава - Строка, Неопределено - Номер типового устава юридического лица. +// ** ПравоваяФорма - Строка, Неопределено - правовая форма юридического лица. +// ** ЮридическийАдрес - Неопределено, Структура - данные о юридическом адресе: +// *** КонтактнаяИнформация - Строка - данные в формате JSON для заполнения реквизита +// "Значение" контактной информации в табличной части КонтактнаяИнформация объекта +// (см. описание подсистемы "Контактная информация" Библиотеки стандартных подсистем). +// *** Представление - Строка - представление адреса. +// *** Комментарий - Строка - произвольный комментарий. +// *** Корректный - Булево - адрес является корректным по данным ФИАС; +// ** ЭлектроннаяПочта - Строка, Неопределено - адрес электронной почты; +// ** Руководители - ТаблицаЗначений - устарело, рекомендуется использовать свойство "ДанныеРуководителей". +// Сведения о руководителях: +// *** Должность - Строка - должность руководителя. +// *** Фамилия - Строка - фамилия руководителя. +// *** Имя - Строка - имя руководителя. +// *** Отчество - Строка - отчество руководителя. +// *** Представление - Строка - ФИО руководителя или представление скрытых данных о руководителях. +// *** ИНН - Строка - ИНН руководителя. +// *** ДатаЗаписи - Дата - дата записи о руководителе. +// ** ДанныеРуководителей - Структура - сведения о руководителях: +// *** СкрытыеДанные - Булево - признак скрытых данных о руководителях организации. +// *** ПредставлениеСкрытыхДанных - Строка - представление скрытых данных о руководителях. +// Заполняется если СкрытыеДанные = Истина +// *** Руководители - ТаблицаЗначений - сведения о руководителях. Заполняется если СкрытыеДанные = Ложь. Колонки: +// см. НоваяТаблицаРуководителей. +// ** РегистрацияВНалоговомОргане - Неопределено, Структура - данные о регистрации в ИФНС. +// см. НоваяРегистрацияВНалоговомОргане. +// ** ДатаРегистрации - Дата, Неопределено - дата регистрации юридического лица. +// ** ДатаПрекращенияДеятельности - Дата, Неопределено - дата прекращения деятельности юридического лица. +// ** РегистрацияВПенсионномФонде - Неопределено, Структура - данные о регистрации в ПФР. +// см. НоваяРегистрацияВПенсионномФонде. +// ** РегистрацияВФСС - Неопределено, Структура - данные о регистрации в ФСС. +// см. НоваяРегистрацияВФСС. +// ** РегистрацияВСФР - Неопределено, Структура - данные о регистрации в СФР. +// см. НоваяРегистрацияВСФР. +// ** ВидДеятельности - Неопределено, Структура - описание основного вида экономической деятельности. +// см. НовыйОписаниеВидаДеятельности. +// ** ОткрытыеГосударственныеДанныеФНС - ТаблицаЗначений - открытые государственные данные ФНС. +// см. НоваяТаблицаОткрытыеГосударственныеДанныеФНС. +// ** ИсторияРеквизитов - Структура - история изменений реквизитов юридического лица. +// см. НовыйИсторияРеквизитовЮридическогоЛица. +// ** ОписаниеОшибки - Строка - текст ошибки при получении данных +// ** КодОКВЭД - Строка, Неопределено - устарело, следует использовать ВидДеятельности.Код, код основного +// вида деятельности по классификатору ОКВЭД. +// ** ЭтоОКВЭД2 - Булево - устарело, следует использовать ВидДеятельности.Классификатор, код ОКВЭД +// приведен по классификатору редакции 2 или редакции 1. +// ** Руководитель - Неопределено, Структура - устарело, информация о руководителе: +// *** Фамилия - Строка - фамилия руководителя; +// *** Имя - Строка - имя руководителя; +// *** Отчество - Строка - отчество руководителя; +// *** Представление - Строка - ФИО руководителя; +// *** ДатаЗаписи - Дата - дата записи о руководителе; +// * РАФП - ТаблицаЗначений - сведения из РАФП: +// ** КПП - Строка - КПП юридического лица; +// ** ВидОбособленногоПодразделения - Строка - вид обособленного подразделения; +// ** НаименованиеПолное - Строка - полное наименование представительства; +// ** РегистрацияВНалоговомОргане - Неопределено, Структура - информация о регистрации представительства в налоговом органе: +// *** Код - Строка - код налогового органа. +// *** Наименование - Строка - наименование налогового органа. +// *** ДатаРегистрации - Дата - дата регистрации в налоговом органе; +// ** ЮридическийАдрес - Неопределено, Структура - юридический адрес: +// *** КонтактнаяИнформация - Строка - данные в формате JSON для заполнения реквизита; +// "Значение" контактной информации в табличной части КонтактнаяИнформация объекта +// (см. описание подсистемы "Контактная информация" Библиотеки стандартных подсистем). +// *** Представление - Строка - представление адреса; +// *** Комментарий - Строка - произвольный комментарий; +// *** Корректный - Булево - адрес является корректным по данным ФИАС; +// ** ВидДеятельности - Неопределено, Структура - описание основного вида экономической деятельности. +// см. НовыйОписаниеВидаДеятельности. +// ** ПрочиеВидыДеятельности - ТаблицаЗначений - описание прочих видов экономической деятельности: +// *** Код - Строка - код вида деятельности; +// *** Наименование - Строка - наименование вида деятельности; +// *** Классификатор - Строка - тип классификатор экономической деятельности, согласно которому указаны код и наименование. +// Значения: "ОКВЭД", "ОКВЭД2"; +// ** КоличествоИностранныхСотрудников - Число - количество иностранных сотрудников в представительстве; +// ** Руководитель - Неопределено, Структура - информация о руководителе: +// *** Фамилия - Строка - фамилия руководителя; +// *** Имя - Строка - имя руководителя; +// *** Отчество - Строка - отчество руководителя; +// *** Представление - Строка - ФИО руководителя; +// *** ДатаЗаписи - Дата - дата записи о руководителе; +// ** Аккредитация - Неопределено, Структура - информация об аккредитации представительства. Поля: +// *** НомерЗаписиОбАккредитации - Строка - номер записи об аккредитации; +// *** ДатаАккредитации - Дата - дата аккредитации; +// *** КодУполномоченногоНалоговогоОргана - Строка - код уполномоченного налогового органа, +// выполнившего аккредитацию представительства; +// *** НаименованиеУполномоченногоНалоговогоОргана - Строка - наименование уполномоченного налогового органа, +// выполнившего аккредитацию представительства; +// *** ДатаОкончанияСрокаАккредитации - Дата - дата окончания срока аккредитации; +// *** ДатаПродленияАккредитации - Дата - дата принятия решения о продлении срока аккредитации; +// *** ДатаОкончанияСрокаПродленияАккредитации - Дата - дата окончания срока продления аккредитации; +// ** ИностранноеЮридическоеЛицо - Неопределено, Структура - данные иностранной компании. Поля: +// *** НаименованиеПолное - Строка - полное наименование иностранного юридического лица; +// *** КодСтраны - Число - код страны регистрации по ОКСМ; +// *** Страна - Строка - наименование страны регистрации; +// *** Адрес - Строка - адрес иностранного юридического лица в стране регистрации; +// *** УставныйКапитал - Структура - информация об уставном капитале. Поля: +// **** Размер - Число - размер уставного капитала; +// **** КодВалюты - Число - код валюты уставного капитала по ОКВ; +// **** НаименованиеВалюты - Строка - наименование валюты уставного капитала; +// *** КодНалогоплательщика - Строка - код или аналог кода налогоплательщика иностранного +// юридического лица в стране регистрации; +// *** Регистрация - Структура - информация о регистрации в стране регистрации. Поля: +// **** РегистрационныйНомер - Строка - регистрационный номер; +// **** НаименованиеОргана - Строка - наименование органа регистрации в стране регистрации; +// **** ОсобенностиРежимаРегистрации - Строка - описание особенности режима регистрации; +// * ОписаниеОшибки - Строка, Неопределено - описание возникшей ошибки. +// Для обработки ошибки на клиентской части необходимо использовать метод +// РаботаСКонтрагентамиКлиент.ОбработатьОшибку. // Функция ДанныеЮридическогоЛицаДляЗаполненияСертификата(Знач ИНН) Экспорт @@ -1934,83 +1751,71 @@ // Возвращает сведения об индивидуальном предпринимателе для заполнения сертификата. // // Параметры: -// ИНН - Строка - ИНН индивидуального предпринимателя, реквизиты которого надо получить. +// ИНН - Строка - ИНН индивидуального предпринимателя, реквизиты которого надо получить. // // Возвращаемое значение: -// - Структура - реквизиты индивидуального предпринимателя. -// * ИНН - Строка - ИНН предпринимателя. -// * Наименование - Строка - представление предпринимателя в учетной программе. -// * НаименованиеПолное - Строка - фамилия, имя, отчество предпринимателя. -// * НаименованиеСокращенное - Строка - фамилия, имя, отчество предпринимателя. -// * ВидИП - Строка - вид предпринимателя. -// * Фамилия - Строка - фамилия предпринимателя. -// * Имя - Строка - имя предпринимателя. -// * Отчество - Строка - отчество предпринимателя. -// * РегистрационныйНомер - Строка - ОГРНИП. -// * Пол - Строка, Неопределено - "1" - Мужской, "2" - Женский. -// * КодСтраныГражданства - Строка, Неопределено - код страны. -// * РегистрацияВНалоговомОргане - Структура, Неопределено - данные о регистрации в ИФНС. -// ** Код - Строка - код налогового органа. -// ** Наименование - Строка - наименование налогового органа. -// ** ОКТМО - Строка - код ОКТМО налогового органа. -// ** ОКАТО - Строка - код ОКАТО налогового органа. -// ** ДатаРегистрации - Дата - дата постановки на учет в налоговом органе. -// * ДатаРегистрации - Дата - дата регистрации предпринимателя. -// * РегистрацияВПенсионномФонде - Структура, Неопределено - данные о регистрации в ПФР. -// ** РегистрационныйНомерПФР - Строка - регистрационный номер предпринимателя в ПФР. -// ** КодОрганаПФР - Строка - код органа ПФР. -// ** НаименованиеОрганаПФР - Строка - наименование органа ПФР. -// ** ДатаРегистрации - Дата - дата постановки на учет в ПФР. -// * РегистрацияВФСС - Структура, Неопределено - данные о регистрации в ФСС. -// ** РегистрационныйНомерФСС - Строка - регистрационный номер предпринимателя в ФСС. -// ** КодПодчиненности - Строка - код подчиненности органа ФСС. -// ** КодОрганаФСС - Строка - код органа ФСС. -// ** НаименованиеОрганаФСС - Строка - наименование органа ФСС. -// ** ДатаРегистрации - Дата - дата постановки на учет в ФСС. -// * РегистрацияВСФР - Структура, Неопределено - данные о регистрации в СФР. -// ** РегистрационныйНомерСФР - Строка - регистрационный номер предпринимателя в СФР. -// ** КодОрганаСФР - Строка - код органа СФР. -// ** НаименованиеОрганаСФР - Строка - наименование органа СФР. -// ** ДатаРегистрации - Дата - дата постановки на учет в СФР. -// * СвидетельствоОРегистрации - Структура, Неопределено - данные свидетельства. -// ** Серия - Строка - серия свидетельства. -// ** Номер - Строка - номер свидетельства. -// ** Дата - Дата - дата выдачи свидетельства. -// * ВидДеятельности - Структура - описание вида экономической деятельности. Поля: -// ** Код - Строка - код вида деятельности; -// ** Наименование - Строка - наименование вида деятельности; -// ** Классификатор - Строка - тип классификатор экономической деятельности, согласно которому указаны код и наименование; -// Значения: "ОКВЭД", "ОКВЭД2" -// * ИсторияРеквизитов - Структура - история изменения реквизитов предпринимателя. -// ** ФИО - ТаблицаЗначений - история изменения ФИО; -// Колонки: -// *** Дата - Дата - дата изменения ФИО; -// *** Фамилия - Строка - фамилия; -// *** Имя - Строка - имя; -// *** Отчество - Строка - отчество; -// ** Гражданство - ТаблицаЗначений - история изменения гражданства; -// Колонки: -// *** Дата - Дата - дата изменения гражданства; -// *** КодСтраныГражданства - Строка, Неопределено - код страны; -// ** ОГРН - ТаблицаЗначений - история изменения ОГРН; -// Колонки: -// *** Дата - Дата - дата изменения ОГРН; -// *** Значение - Строка - значение ОГРН; -// *** ВидПредпринимателя - Структура - вид предпринимателя. -// **** Дата - Дата - дата изменения вида предпринимателя; -// **** Код - Строка - код вида предпринимателя; -// **** Наименование - Строка - наименование вида предпринимателя; -// *** Статус - Структура - статус предпринимателя. -// **** Дата - Дата - дата изменения статуса; -// **** Код - Строка - код статуса; -// **** Наименование - Строка - наименование статуса; -// * ОписаниеОшибки - Строка - описание возникшей ошибки. -// Для обработки ошибки на клиентской части необходимо использовать метод -// РаботаСКонтрагентамиКлиент.ОбработатьОшибку. -// * КодОКВЭД (Устарело) - Строка - устарело, следует использовать ВидДеятельности.Код, код основного -// вида деятельности по классификатору ОКВЭД. -// * ЭтоОКВЭД2 (Устарело) - Булево - устарело, следует использовать ВидДеятельности.Классификатор, код ОКВЭД -// приведен по классификатору редакции 2 или редакции 1. +// Структура - реквизиты индивидуального предпринимателя: +// * ИНН - Неопределено, Строка - ИНН предпринимателя. +// * Наименование - Неопределено, Строка - представление предпринимателя в учетной программе. +// * НаименованиеПолное - Неопределено, Строка - фамилия, имя, отчество предпринимателя. +// * НаименованиеСокращенное - Неопределено, Строка - фамилия, имя, отчество предпринимателя. +// * ВидИП - Неопределено, Строка - вид предпринимателя. +// * Фамилия - Неопределено, Строка - фамилия предпринимателя. +// * Имя - Неопределено, Строка - имя предпринимателя. +// * Отчество - Неопределено, Строка - отчество предпринимателя. +// * ФамилияНаАнглийском - Неопределено, Строка - фамилия предпринимателя на английском. +// * ИмяНаАнглийском - Неопределено, Строка - имя предпринимателя на английском. +// * ОтчествоНаАнглийском - Неопределено, Строка - отчество предпринимателя на английском. +// * РегистрационныйНомер - Неопределено, Строка - ОГРНИП. +// * Пол - Неопределено, Строка - "1" - Мужской, "2" - Женский. +// * КодСтраныГражданства - Неопределено, Строка - код страны. +// * РегистрацияВНалоговомОргане - Неопределено, Структура - данные о регистрации в ИФНС: +// ** Код - Строка - код налогового органа. +// ** Наименование - Строка - наименование налогового органа. +// ** ОКТМО - Строка - код ОКТМО налогового органа. +// ** ОКАТО - Строка - код ОКАТО налогового органа. +// ** ДатаРегистрации - Дата - дата постановки на учет в налоговом органе. +// * РегистрацияВПенсионномФонде - Неопределено, Структура - данные о регистрации в ПФР: +// ** РегистрационныйНомерПФР - Строка - регистрационный номер предпринимателя в ПФР. +// ** КодОрганаПФР - Строка - код органа ПФР. +// ** НаименованиеОрганаПФР - Строка - наименование органа ПФР. +// ** ДатаРегистрации - Дата - дата постановки на учет в ПФР. +// * РегистрацияВФСС - Неопределено, Структура - данные о регистрации в ФСС: +// ** РегистрационныйНомерФСС - Строка - регистрационный номер предпринимателя в ФСС. +// ** КодПодчиненности - Строка - код подчиненности органа ФСС. +// ** КодОрганаФСС - Строка - код органа ФСС. +// ** НаименованиеОрганаФСС - Строка - наименование органа ФСС. +// ** ДатаРегистрации - Дата - дата постановки на учет в ФСС. +// * РегистрацияВСФР - Неопределено, Структура - данные о регистрации в СФР: +// ** РегистрационныйНомерСФР - Строка - регистрационный номер предпринимателя в СФР. +// ** КодОрганаСФР - Строка - код органа СФР. +// ** НаименованиеОрганаСФР - Строка - наименование органа СФР. +// ** ДатаРегистрации - Дата - дата постановки на учет в СФР. +// * ДатаРегистрации - Неопределено, Дата - дата регистрации предпринимателя. +// * СвидетельствоОРегистрации - Неопределено, Структура - данные свидетельства: +// ** Серия - Строка - серия свидетельства. +// ** Номер - Строка - номер свидетельства. +// ** Дата - Дата - дата выдачи свидетельства. +// * ВидДеятельности - Неопределено, Структура - описание вида экономической деятельности: +// ** Код - Строка - код вида деятельности; +// ** Наименование - Строка - наименование вида деятельности; +// ** Классификатор - Строка - тип классификатор экономической деятельности, согласно которому указаны код и наименование. +// Значения: "ОКВЭД", "ОКВЭД2"; +// * Статус - Неопределено, Структура - текущий статус предпринимателя: +// ** Код - Строка - код статуса; +// ** Наименование - Строка - наименование статуса. +// * ЭлектроннаяПочта - Неопределено, Строка - электронная почта. +// * ЯвляетсяГлавойКФХ - Булево - признак, что является главой КФХ. +// * ЯвляетсяГлавойКФХОписание - Строка - описание признака, что является главой КФХ. +// * ИсторияРеквизитов - Структура - история изменения реквизитов предпринимателя. +// см. НовыйИсторияРеквизитовПредпринимателя +// * ОписаниеОшибки - Неопределено, Строка - описание возникшей ошибки. +// Для обработки ошибки на клиентской части необходимо использовать метод +// РаботаСКонтрагентамиКлиент.ОбработатьОшибку. +// * КодОКВЭД - Неопределено, Строка - устарело, следует использовать ВидДеятельности.Код, код основного +// вида деятельности по классификатору ОКВЭД. +// * ЭтоОКВЭД2 - Булево - устарело, следует использовать ВидДеятельности.Классификатор, код ОКВЭД +// приведен по классификатору редакции 2 или редакции 1. // Функция ДанныеПредпринимателяДляЗаполненияСертификата(Знач ИНН) Экспорт @@ -2061,10 +1866,12 @@ #Область ИнтеграцияПодсистемИнтернетПоддержкиПользователей +#Область БазоваяФункциональность + // Заполняет описание используемых в подсистеме хостов сервисов Интернет-поддержки. // // Параметры: -// ХостыСервисовИнтернетПоддержки - Соответствие - хост и название используемого сервиса. +// ХостыСервисовИнтернетПоддержки - Соответствие из Строка, Строка - хост и название используемого сервиса. // Процедура ПриЗаполненииХостовСервисовИнтернетПоддержки(ХостыСервисовИнтернетПоддержки) Экспорт @@ -2078,36 +1885,6 @@ КонецПроцедуры -// Регистрирует список сервисов, которые доступны для -// использования в конфигурации. -// -// Параметры: -// СервисыСопровождения - Массив из Структура - сервисы доступные для использовании в конфигурации; -// Значение - Структура - см. ПодключениеСервисовСопровождения.НовыйОписательСервиса(). -// -// Пример: -// ОписательСервиса = ПодключениеСервисовСопровождения.НовыйОписательСервиса(); -// ОписательСервиса.Идентификатор = "contragent"; -// ОписательСервиса.КартинкаСервиса = Метаданные.ОбщиеКартинки.Сервис1СКонтрагент; -// ОписательСервиса.Наименование = НСтр("ru = '1С:Контрагент'"); -// ОписательСервиса.ОписаниеСервиса = НСтр("ru = 'Быстрая проверка информации о контрагентах, автоматическое -// |заполнение реквизитов контрагентов в различных документах и другие полезные функции.'"); -// -// СервисыСопровождения.Добавить(ОписательСервиса); -// -Процедура ПриДобавленииОписанийСервисовСопровождения(СервисыСопровождения) Экспорт - - МодульПодключениеСервисовСопровождения = ОбщегоНазначения.ОбщийМодуль("ПодключениеСервисовСопровождения"); - ОписательСервиса = МодульПодключениеСервисовСопровождения.НовыйОписательСервиса(); - ОписательСервиса.Идентификатор = ИдентификаторСервиса(); - ОписательСервиса.Картинка = Метаданные.ОбщиеКартинки.Сервис1СКонтрагент48; - ОписательСервиса.Наименование = НСтр("ru = '1С:Контрагент'"); - ОписательСервиса.Описание = НСтр("ru = 'Быстрая проверка информации о контрагентах, автоматическое заполнение реквизитов контрагентов в различных документах, поиск контрагентов и пр.'"); - - СервисыСопровождения.Добавить(ОписательСервиса); - -КонецПроцедуры - #КонецОбласти #Область ОбработчикиСобытийПодсистемКонфигурации @@ -2373,251 +2150,220 @@ // Возвращает информацию о связях юридического лица, его руководителей и учредителей // с другими лицами по данным ЕГРЮЛ. // -// Параметры: -// ИНН - Строка - ИНН юридического лица, информацию о связях которого надо получить. -// // Возвращаемое значение: -// - Структура - информация о связях юридического лица. -// Содержит основные данные о юридическом лице - см. НоваяИнформацияОСвязяхЮридическогоЛица. -// Также содержит данные: -// * Статус - Структура, Неопределено - текущий статус юридического лица. -// Поля: -// ** Код - Строка - код статуса; -// ** Наименование - Строка - наименование статуса; -// * РегистрирующийОрган - Структура, Неопределено - орган, зарегистрировавший юридическое лицо. Поля: -// ** Код - Строка - код органа; -// ** Наименование - Строка - наименование органа; -// * УставныйКапитал - Число, Неопределено - размер уставного капитала, рублей. -// * ВидыДеятельности - ТаблицаЗначений - информация о видах деятельности. -// ** Код - Строка - код вида деятельности; -// ** Наименование - Строка - наименование вида деятельности; -// ** Классификатор - Строка - тип классификатор экономической деятельности, согласно которому указаны код и наименование; -// Значения: "ОКВЭД", "ОКВЭД2" -// ** КодОКВЭД (устарело) - Строка - код вида деятельности по классификатору ОКВЭД. -// Устарело, следует использовать Код. -// ** НаименованиеОКВЭД (устарело) - Строка - наименование вида деятельности по ОКВЭД, -// сервисом не поставляется, должно заполняться из переопределяемого кода. -// Устарело, следует использовать Наименование. -// ** ЭтоОКВЭД2 (устарело) - Булево - код приведен по классификатору редакции 2 или редакции 1. -// Устарело, следует использовать Классификатор. -// * Лицензии - ТаблицаЗначений - данные о полученных лицензиях. -// ** Лицензия - Строка - наименование лицензии. -// ** ОписаниеЛицензии - Строка - подробное описание лицензии. -// * ЮридическийАдрес - Структура, Неопределено - данные о юридическом адресе. -// ** КонтактнаяИнформация - Строка - данные в формате JSON для заполнения реквизита -// "Значение" контактной информации в табличной части КонтактнаяИнформация объекта -// (см. описание подсистемы "Контактная информация" Библиотеки стандартных подсистем). -// ** Представление - Строка - представление адреса. -// ** Комментарий - Строка - произвольный комментарий. -// ** Корректный - Булево - адрес является корректным по данным ФИАС; -// * ОрганизацииПоАдресу - ТаблицаЗначений - данные об организациях, зарегистрированных по тому же адресу. -// ** НаименованиеОрганизации - Строка - наименование организации. -// ** ИНН - Строка - ИНН организации. -// ** КодСтатуса - Строка - код текущего статуса организации. -// ** НаименованиеСтатуса - Строка - наименование текущего статуса организации. -// * Руководители - ТаблицаЗначений - устарело, рекомендуется использовать свойство "ДанныеРуководителей". -// Сведения о руководителях. Колонки: -// ** Должность - Строка - должность руководителя. -// ** Фамилия - Строка - фамилия руководителя. -// ** Имя - Строка - имя руководителя. -// ** Отчество - Строка - отчество руководителя. -// ** Представление - Строка - ФИО руководителя. -// ** ИНН - Строка - ИНН руководителя. -// ** ДатаЗаписи - Дата - дата записи о руководителе. -// ** ОрганизацииГдеРуководитель - ТаблицаЗначений - данные об организациях, где руководитель этой -// организации также является руководителем. Колонки: -// *** НаименованиеОрганизации - Строка - наименование организации. -// *** ИНН - Строка - ИНН организации. -// *** КодСтатуса - Строка - код текущего статуса организации. -// *** НаименованиеСтатуса - Строка - наименование текущего статуса организации. -// ** ОрганизацииГдеРуководительПоФИО - Булево - если Истина, поиск проводился по ФИО руководителя, иначе по ИНН. -// ** ОрганизацииГдеУчредитель - ТаблицаЗначений - организации, -// где руководитель этой организации является учредителем. -// Колонки: -// *** НаименованиеОрганизации - Строка - наименование организации. -// *** ИНН - Строка - ИНН организации. -// *** КодСтатуса - Строка - код текущего статуса организации. -// *** НаименованиеСтатуса - Строка - наименование текущего статуса организации. -// *** ПроцентКапитала - Число - процент в уставном капитале. -// *** СуммаКапитала - Число - сумма взноса в уставный капитал. -// ** ОрганизацииГдеУчредительПоФИО - Булево - если Истина, поиск проводился по ФИО руководителя, иначе по ИНН. -// * ДанныеРуководителей - Структура - сведения о руководителях: -// ** СкрытыеДанные - Булево - признак скрытых данных о руководителях организации. -// ** ПредставлениеСкрытыхДанных - Строка - представление скрытых данных о руководителях. -// Заполняется если СкрытыеДанные = Истина -// ** Руководители - ТаблицаЗначений - сведения о руководителях. Заполняется если СкрытыеДанные = Ложь. Колонки: -// *** Должность - Строка - должность руководителя. -// *** Фамилия - Строка - фамилия руководителя. -// *** Имя - Строка - имя руководителя. -// *** Отчество - Строка - отчество руководителя. -// *** Представление - Строка - ФИО руководителя или представление скрытых данных о руководителях. -// *** ИНН - Строка - ИНН руководителя. -// *** ДатаЗаписи - Дата - дата записи о руководителе. -// *** ОрганизацииГдеРуководитель - ТаблицаЗначений - данные об организациях, где руководитель этой -// организации также является руководителем. Колонки: -// **** НаименованиеОрганизации - Строка - наименование организации. -// **** ИНН - Строка - ИНН организации. -// **** КодСтатуса - Строка - код текущего статуса организации. -// **** НаименованиеСтатуса - Строка - наименование текущего статуса организации. -// *** ОрганизацииГдеРуководительПоФИО - Булево - если Истина, поиск проводился по ФИО руководителя, иначе по ИНН. -// *** ОрганизацииГдеУчредитель - ТаблицаЗначений - организации, -// где руководитель этой организации является учредителем. Колонки: -// **** НаименованиеОрганизации - Строка - наименование организации. -// **** ИНН - Строка - ИНН организации. -// **** КодСтатуса - Строка - код текущего статуса организации. -// **** НаименованиеСтатуса - Строка - наименование текущего статуса организации. -// **** ПроцентКапитала - Число - процент в уставном капитале. -// **** СуммаКапитала - Число - сумма взноса в уставный капитал. -// *** ОрганизацииГдеУчредительПоФИО - Булево - если Истина, поиск проводился по ФИО руководителя, иначе по ИНН. -// * УчрежденныеФирмы - ТаблицаЗначений - организации, где эта организация является учредителем. -// ** НаименованиеОрганизации - Строка - наименование организации. -// ** ИНН - Строка - ИНН организации. -// ** КодСтатуса - Строка - код текущего статуса организации. -// ** НаименованиеСтатуса - Строка - наименование текущего статуса организации. -// ** ПроцентКапитала - Число - процент в уставном капитале. -// ** СуммаКапитала - Число - сумма взноса в уставный капитал. -// * Учредители - ТаблицаЗначений - устарело, рекомендуется использовать свойство "ДанныеУчредителей". -// Учредители этой организации. -// ** Учредитель - Строка - ФИО или наименование учредителя. -// ** ИНН - Строка - ИНН учредителя. -// ** ПроцентКапитала - Число - процент в уставном капитале. -// ** СуммаКапитала - Число - сумма взноса в уставный капитал. -// ** ОрганизацииГдеРуководитель - ТаблицаЗначений - данные об организациях, где этот учредитель является руководителем. -// *** НаименованиеОрганизации - Строка - наименование организации. -// *** ИНН - Строка - ИНН организации. -// *** КодСтатуса - Строка - код текущего статуса организации. -// *** НаименованиеСтатуса - Строка - наименование текущего статуса организации. -// ** ОрганизацииГдеРуководительПоФИО - Булево - если Истина, поиск проводился по ФИО учредителя, иначе по ИНН. -// ** ОрганизацииГдеУчредитель - ТаблицаЗначений - организации, где этот учредитель также является учредителем. -// *** НаименованиеОрганизации - Строка - наименование организации. -// *** ИНН - Строка - ИНН организации. -// *** КодСтатуса - Строка - код текущего статуса организации. -// *** НаименованиеСтатуса - Строка - наименование текущего статуса организации. -// *** ПроцентКапитала - Число - процент в уставном капитале. -// *** СуммаКапитала - Число - сумма взноса в уставный капитал. -// ** ОрганизацииГдеУчредительПоФИО - Булево - если Истина, поиск проводился по ФИО учредителя, иначе по ИНН. -// * ДанныеУчредителей - Структура - сведения о руководителях: -// ** СкрытыеДанные - Булево - признак скрытых данных об учредителях организации. -// ** ПредставлениеСкрытыхДанных - Строка - представление скрытых данных об учредителях. -// Заполняется если СкрытыеДанные = Истина -// ** Учредители - ТаблицаЗначений - учредители этой организации. -// *** Учредитель - Строка - ФИО или наименование учредителя. -// *** ИНН - Строка - ИНН учредителя. -// *** ПроцентКапитала - Число - процент в уставном капитале. -// *** СуммаКапитала - Число - сумма взноса в уставный капитал. -// *** ОрганизацииГдеРуководитель - ТаблицаЗначений - данные об организациях, где этот учредитель является руководителем. -// **** НаименованиеОрганизации - Строка - наименование организации. -// **** ИНН - Строка - ИНН организации. -// **** КодСтатуса - Строка - код текущего статуса организации. -// **** НаименованиеСтатуса - Строка - наименование текущего статуса организации. -// *** ОрганизацииГдеРуководительПоФИО - Булево - если Истина, поиск проводился по ФИО учредителя, иначе по ИНН. -// *** ОрганизацииГдеУчредитель - ТаблицаЗначений - организации, где этот учредитель также является учредителем. -// **** НаименованиеОрганизации - Строка - наименование организации. -// **** ИНН - Строка - ИНН организации. -// **** КодСтатуса - Строка - код текущего статуса организации. -// **** НаименованиеСтатуса - Строка - наименование текущего статуса организации. -// **** ПроцентКапитала - Число - процент в уставном капитале. -// **** СуммаКапитала - Число - сумма взноса в уставный капитал. -// *** ОрганизацииГдеУчредительПоФИО - Булево - если Истина, поиск проводился по ФИО учредителя, иначе по ИНН. -// * Подразделения - ТаблицаЗначений - филиалы и представительства юридического лица, указанные в Уставе. -// ** ОписаниеПодразделения - Строка - наименование подразделения. -// * ИзмененияВРеестре - ТаблицаЗначений - данные об изменениях в ЕГРЮЛ по этому лицу. -// ** ДатаИзменения - Дата - дата внесения изменения. -// ** ГосударственныйОрган - Строка - орган, который внес изменение. -// ** ОписаниеИзменения - Строка - описание изменения. -// * БухгалтерскаяОтчетность - ТаблицаЗначений - данные бухгалтерской отчетности, сданной в органы Росстата. -// ** Год - Число - год, за который была сдана отчетность. -// ** КодВалютыОтчетности - Строка - в рублях, в тысячах или в миллионах рублей. -// ** ТипОтчетности - Строка - обычная отчетность, упрощенная или отчетность НКО. -// ** Показатели - ТаблицаЗначений - показатели бухгалтерской отчетности. -// *** Код - Строка - код показателя отчетности. -// *** Значение - Число - значение показателя отчетности. -// * ОткрытыеГосударственныеДанныеФНС - ТаблицаЗначений - открытые данные. Колонки: -// ** Год - Число - год, за который указаны данные; -// ** КоличествоСотрудников - Число, Неопределено - количество сотрудников; -// ** СуммаДоходов - Число, Неопределено - сумма доходов; -// ** СуммаРасходов - Число, Неопределено - сумма расходов; -// ** УчастиеВКГН - Строка - участия в консолидированной группе налогоплательщиков; -// ** НалогообложениеЕСХН - Булево, Неопределено - Истина, если применяется тип налогообложения ЕСХН; -// ** НалогообложениеУСН - Булево, Неопределено - Истина, если применяется тип налогообложения УСН; -// ** НалогообложениеЕНВД - Булево, Неопределено - Истина, если применяется тип налогообложения ЕНВД; -// ** НалогообложениеСРП - Булево, Неопределено - Истина, если применяется тип налогообложения СРП; -// ** СведенияОНалогах - ТаблицаЗначений - сведения о налогах. Колонки: -// *** Наименование - Строка - наименование налога; -// *** Уплачено - Число, Неопределено - сумма уплаченного налога. Неопределено - нет данных; -// *** Задолженность - Число, Неопределено - сумма задолженности по налогу. Неопределено - нет данных; -// *** Штраф - Число, Неопределено - сумма штрафа по налогу. Неопределено - нет данных; -// *** Пени - Число, Неопределено - сумма пеней по налогу. Неопределено - нет данных; -// * ИсторияРеквизитов - Структура - история изменения реквизитов юридического лица. -// ** КПП - ТаблицаЗначений - история изменения значения реквизита КПП; -// Колонки: -// *** Дата - Дата - дата изменения КПП; -// *** Значение - Строка - значение реквизита КПП; -// ** Наименование - ТаблицаЗначений - история изменения наименования; -// Колонки: -// *** Дата - Дата - дата изменения наименования; -// *** НаименованиеПолное - Строка - полное наименование юридического лица; -// *** НаименованиеСокращенное - Строка - сокращенное наименование юридического лица; -// ** Адрес - ТаблицаЗначений - история изменения адреса; -// Колонки: -// *** Дата - Дата - дата изменения адреса; -// *** КонтактнаяИнформация - Строка - данные в формате JSON для заполнения реквизита -// "Значение" контактной информации в табличной части КонтактнаяИнформация объекта -// (см. описание подсистемы "Контактная информация" Библиотеки стандартных подсистем). -// *** Представление - Строка - представление адреса; -// *** Комментарий - Строка - произвольный комментарий; -// ** Статус - ТаблицаЗначений - история изменения статуса; -// Колонки: -// *** Дата - Дата - дата изменения наименования; -// *** Код - Строка - код статуса; -// *** Наименование - Строка - наименование статуса; -// ** РеквизитыДиректора - ТаблицаЗначений - история изменения реквизитов директора; -// Колонки: -// *** Дата - Дата - дата изменения реквизитов директора; -// *** ДатаОкончания - Дата - дата окончания действия реквизитов. -// Пустая дата, если директор действующий; -// *** ИНН - Строка - ИНН; -// *** Фамилия - Строка - фамилия директора; -// *** Имя - Строка - имя; -// *** Отчество - Строка - отчество; -// *** ВидДолжности - Строка - вид должности; -// *** НаименованиеДолжности - Строка - наименование должности; -// * ОрганизацииГдеРуководитель (Устарело) - ТаблицаЗначений - данные об организациях, где руководитель этой организации также является руководителем. -// Устарело, следует использовать Руководители[0].ОрганизацииГдеРуководитель -// ** НаименованиеОрганизации - Строка - наименование организации. -// ** ИНН - Строка - ИНН организации. -// ** КодСтатуса - Строка - код текущего статуса организации. -// ** НаименованиеСтатуса - Строка - наименование текущего статуса организации. -// * ОрганизацииГдеРуководительПоФИО (Устарело) - Булево - если Истина, поиск проводился по ФИО руководителя, иначе по ИНН. -// Устарело, следует использовать Руководители[0].ОрганизацииГдеРуководительПоФИО. -// * ОрганизацииГдеУчредитель (Устарело) - ТаблицаЗначений - организации, где руководитель этой организации является учредителем. -// Устарело, следует использовать Руководители[0].ОрганизацииГдеУчредитель. -// ** НаименованиеОрганизации - Строка - наименование организации. -// ** ИНН - Строка - ИНН организации. -// ** КодСтатуса - Строка - код текущего статуса организации. -// ** НаименованиеСтатуса - Строка - наименование текущего статуса организации. -// ** ПроцентКапитала - Число - процент в уставном капитале. -// ** СуммаКапитала - Число - сумма взноса в уставный капитал. -// * ОрганизацииГдеУчредительПоФИО (Устарело) - Булево - если Истина, поиск проводился по ФИО руководителя, иначе по ИНН. -// Устарело, следует использовать Руководители[0].ОрганизацииГдеУчредительПоФИО. -// * ОжиданиеОтвета - Булево - если возвращается Истина - требуется повторный вызов метода с этими же параметрами. -// * ОписаниеОшибки - Строка,Неопределено - служебный реквизит. -// Для обработки ошибки на клиентской части необходимо использовать метод -// РаботаСКонтрагентамиКлиент.ОбработатьОшибку; -// * НаименованиеСтатуса - Строка, Неопределено - устарело, необходимо использовать Статус.Наименование - наименование текущего статуса; -// * КодСтатуса - Строка, Неопределено - устарело, необходимо использовать Статус.Код - код текущего статуса. +// Структура - информация о связях юридического лица: +// * ИНН - Строка, Неопределено - ИНН юридического лица +// * КПП - Строка, Неопределено - КПП юридического лица +// * Наименование - Строка, Неопределено - представление юридического лица в учетной программе +// * НаименованиеПолное - Строка, Неопределено - полное наименование юридического лица +// * НаименованиеСокращенное - Строка, Неопределено - сокращенное наименование юридического лица +// * НаименованиеПолноеЕГРЮЛ - Строка, Неопределено - полное наименование юридического лица в ЕГРЮЛ +// * НаименованиеСокращенноеЕГРЮЛ - Строка, Неопределено - сокращенное наименование юридического лица в ЕГРЮЛ +// * НаименованиеПолноеНаАнглийском - Строка, Неопределено - полное наименование юридического лица на английском. +// * НаименованиеСокращенноеНаАнглийском - Строка, Неопределено - сокращенное наименование юридического лица на английском +// * РегистрационныйНомер - Неопределено, Строка - ОГРН юридического лица +// * Статус - Неопределено, Структура - текущий статус юридического лица. +// см. НовыйДанныеСтатуса. +// * РегистрирующийОрган - Неопределено, Структура - орган, зарегистрировавший юридическое лицо. +// см. НовыйДанныеРегистрирующегоОргана. +// * НомерТиповогоУстава - Строка, Неопределено - Номер типового устава юридического лица. +// * ПравоваяФорма - Неопределено, Строка - правовая форма юридического лица. +// * ЮридическийАдрес - Неопределено, Структура - данные о юридическом адресе: +// ** КонтактнаяИнформация - Строка - данные в формате JSON для заполнения реквизита +// "Значение" контактной информации в табличной части КонтактнаяИнформация объекта +// (см. описание подсистемы "Контактная информация" Библиотеки стандартных подсистем). +// ** Представление - Строка - представление адреса. +// ** Комментарий - Строка - произвольный комментарий. +// ** Корректный - Булево - адрес является корректным по данным ФИАС. +// * ЭлектроннаяПочта - Строка, Неопределено - адрес электронной почты +// * Руководители - ТаблицаЗначений - устарело, рекомендуется использовать свойство "ДанныеРуководителей". +// см. НоваяТаблицаРуководителей +// * ДанныеРуководителей - Структура - сведения о руководителях: +// ** СкрытыеДанные - Булево - признак скрытых данных о руководителях организации. +// ** ПредставлениеСкрытыхДанных - Строка - представление скрытых данных о руководителях. +// Заполняется если СкрытыеДанные = Истина +// ** Руководители - ТаблицаЗначений - сведения о руководителях. Заполняется если СкрытыеДанные = Ложь. +// см. НоваяТаблицаРуководителей. +// * РегистрацияВНалоговомОргане - Неопределено, Структура - данные о регистрации в ИФНС. +// см. НоваяРегистрацияВНалоговомОргане. +// * ДатаРегистрации - Неопределено, Дата - дата регистрации юридического лица +// * ДатаПрекращенияДеятельности - Дата, Неопределено - дата прекращения деятельности юридического лица. +// * РегистрацияВПенсионномФонде - Неопределено, Структура - данные о регистрации в ПФР. +// см. НоваяРегистрацияВПенсионномФонде. +// * РегистрацияВФСС - Неопределено, Структура - данные о регистрации в ФСС. +// см. НоваяРегистрацияВФСС. +// * РегистрацияВСФР - Неопределено, Структура - данные о регистрации в СФР. +// см. НоваяРегистрацияВСФР. +// * ВидДеятельности - Неопределено, Структура - описание основного вида экономической деятельности. +// см. НовыйОписаниеВидаДеятельности. +// * ОткрытыеГосударственныеДанныеФНС - ТаблицаЗначений - открытые государственные данные ФНС. +// см. НоваяТаблицаОткрытыеГосударственныеДанныеФНС +// * ИсторияРеквизитов - Структура - история изменений реквизитов юридического лица. +// см. НовыйИсторияРеквизитовЮридическогоЛица. +// * ОписаниеОшибки - Строка - текст ошибки при получении данных +// * КодОКВЭД - Строка, Неопределено - устарело, следует использовать ВидДеятельности.Код, код основного +// вида деятельности по классификатору ОКВЭД. +// * ЭтоОКВЭД2 - Булево - устарело, следует использовать ВидДеятельности.Классификатор, код ОКВЭД +// приведен по классификатору редакции 2 или редакции 1. +// * Руководитель - Неопределено, Структура - устарело, информация о руководителе: +// ** Фамилия - Строка - фамилия руководителя; +// ** Имя - Строка - имя руководителя; +// ** Отчество - Строка - отчество руководителя; +// ** Представление - Строка - ФИО руководителя; +// ** ДатаЗаписи - Дата - дата записи о руководителе; +// * УставныйКапитал - Число, Неопределено - размер уставного капитала, рублей. +// * ДанныеПравопреемников - Неопределено, Структура - данные о правопреемниках организации: +// ** СкрытыеДанные - Булево - признак скрытых данных о правопреемниках организации. +// ** ПредставлениеСкрытыхДанных - Строка - представление скрытых данных о правопреемниках. +// Заполняется если СкрытыеДанные = Истина. +// ** Правопреемники - Массив из см. НовыеДанныеПравопреемника - сведения о правопреемниках. +// * ДанныеПравопредшественников - Неопределено, Структура - данные о правопредшественниках организации: +// ** СкрытыеДанные - Булево - признак скрытых данных о правопредшественниках организации. +// ** ПредставлениеСкрытыхДанных - Строка - представление скрытых данных о правопредшественниках. +// Заполняется если СкрытыеДанные = Истина. +// ** Правопредшественники - Массив из см. НовыеДанныеПравопредшественника - сведения о правопредшественниках. +// * СтатусМКФ - Строка, Неопределено - сведения о том, что юридическое лицо является +// международной компанией или международным фондом. +// * КорпоративныйДоговор - Строка, Неопределено - сведения о наличии корпоративного договора. +// * ДержательРеестраАкционеров - Неопределено, Структура - сведения о держателе реестра акционеров акционерного общества: +// ** ОГРН - Строка - ОГРН держателя реестра акционеров; +// ** ИНН - Строка - ИНН держателя реестра акционеров +// ** Наименование - Строка - ОГРН держателя реестра акционеров. +// * ВидыДеятельности - ТаблицаЗначений - информация о видах деятельности: +// ** Код - Строка - код вида деятельности; +// ** Наименование - Строка - наименование вида деятельности; +// ** Классификатор - Строка - тип классификатор экономической деятельности, согласно которому указаны код и наименование; +// Значения: "ОКВЭД", "ОКВЭД2" +// ** КодОКВЭД - Строка - код вида деятельности по классификатору ОКВЭД. +// Устарело, следует использовать Код. +// ** НаименованиеОКВЭД - Строка - наименование вида деятельности по ОКВЭД, +// сервисом не поставляется, должно заполняться из переопределяемого кода. +// Устарело, следует использовать Наименование. +// ** ЭтоОКВЭД2 - Булево - код приведен по классификатору редакции 2 или редакции 1. +// Устарело, следует использовать Классификатор. +// * СведенияОРегистрацииНаДеньПринятия - Структура - сведения о регистрации на день принятия в Российскую Федерацию: +// ** ИдентификационныйКод - Строка - идентификационный код юридического лица; +// ** НаименованиеРегистрирующегоОргана - Строка - наименование органа, зарегистрировавшего юридическое лицо; +// ** РегистрационныйНомер - Строка - регистрационный номер, присвоенный юридическому лицу. +// * ДействующиеОтИмениЮридическогоЛица - Массив из Структура - сведения о юридическом лице, +// имеющем право без доверенности действовать от имени юридического лица: +// ** ИНН - Строка - ИНН юридического лица; +// ** ОГРН - Строка - ОГРН юридического лица; +// ** Наименование - Строка - Наименование юридического лица. +// * ВидПолномочий - Строка - Сведения о полномочиях нескольких лиц выступать от имени юридического лица. +// Принимает значение: +// "1" - если лица, имеющие право выступать от имени юридического лица, действуют совместно; +// "2" - если лица, имеющие право выступать от имени юридического лица, действуют независимо друг от друга. +// * Лицензии - ТаблицаЗначений - данные о полученных лицензиях: +// ** Лицензия - Строка - наименование лицензии; +// ** ОписаниеЛицензии - Строка - подробное описание лицензии; +// ** НомерЛицензии - Строка - номер лицензии; +// ** НомерЛицензииВЕдиномРеестре - Строка - номер лицензии, присвоенный в Едином реестре учета лицензий. +// * ОрганизацииПоАдресу - ТаблицаЗначений - данные об организациях, зарегистрированных по тому же адресу: +// ** НаименованиеОрганизации - Строка - наименование организации. +// ** ИНН - Строка - ИНН организации. +// ** КодСтатуса - Строка - код текущего статуса организации. +// ** НаименованиеСтатуса - Строка - наименование текущего статуса организации. +// * УчрежденныеФирмы - ТаблицаЗначений - организации, где эта организация является учредителем: +// ** НаименованиеОрганизации - Строка - наименование организации. +// ** ИНН - Строка - ИНН организации. +// ** КодСтатуса - Строка - код текущего статуса организации. +// ** НаименованиеСтатуса - Строка - наименование текущего статуса организации. +// ** ПроцентКапитала - Число - процент в уставном капитале. +// ** СуммаКапитала - Число - сумма взноса в уставный капитал. +// * Учредители - ТаблицаЗначений - рекомендуется использовать свойство "ДанныеУчредителей". +// Устарело. Учредители этой организации: +// ** Учредитель - Строка - ФИО или наименование учредителя. +// ** ИНН - Строка - ИНН учредителя. +// ** ПроцентКапитала - Число - процент в уставном капитале. +// ** СуммаКапитала - Число - сумма взноса в уставный капитал. +// ** ОрганизацииГдеРуководитель - ТаблицаЗначений - данные об организациях, где этот учредитель является руководителем: +// *** НаименованиеОрганизации - Строка - наименование организации. +// *** ИНН - Строка - ИНН организации. +// *** КодСтатуса - Строка - код текущего статуса организации. +// *** НаименованиеСтатуса - Строка - наименование текущего статуса организации. +// ** ОрганизацииГдеРуководительПоФИО - Булево - если Истина, поиск проводился по ФИО учредителя, иначе по ИНН. +// ** ОрганизацииГдеУчредитель - ТаблицаЗначений - организации, где этот учредитель также является учредителем: +// *** НаименованиеОрганизации - Строка - наименование организации. +// *** ИНН - Строка - ИНН организации. +// *** КодСтатуса - Строка - код текущего статуса организации. +// *** НаименованиеСтатуса - Строка - наименование текущего статуса организации. +// *** ПроцентКапитала - Число - процент в уставном капитале. +// *** СуммаКапитала - Число - сумма взноса в уставный капитал. +// ** ОрганизацииГдеУчредительПоФИО - Булево - если Истина, поиск проводился по ФИО учредителя, иначе по ИНН. +// * ДанныеУчредителей - Структура - сведения об учредителях: +// ** СкрытыеДанные - Булево - признак скрытых данных об учредителях организации. +// ** ПредставлениеСкрытыхДанных - Строка - представление скрытых данных об учредителях. +// Заполняется если СкрытыеДанные = Истина. +// ** Учредители - ТаблицаЗначений - учредители этой организации: +// *** Учредитель - Строка - ФИО или наименование учредителя. +// *** ИНН - Строка - ИНН учредителя. +// *** ПроцентКапитала - Число - процент в уставном капитале. +// *** СуммаКапитала - Число - сумма взноса в уставный капитал. +// *** ОрганизацииГдеРуководитель - ТаблицаЗначений - данные об организациях, где этот учредитель является руководителем: +// **** НаименованиеОрганизации - Строка - наименование организации. +// **** ИНН - Строка - ИНН организации. +// **** КодСтатуса - Строка - код текущего статуса организации. +// **** НаименованиеСтатуса - Строка - наименование текущего статуса организации. +// *** ОрганизацииГдеРуководительПоФИО - Булево - если Истина, поиск проводился по ФИО учредителя, иначе по ИНН. +// *** ОрганизацииГдеУчредитель - ТаблицаЗначений - организации, где этот учредитель также является учредителем: +// **** НаименованиеОрганизации - Строка - наименование организации. +// **** ИНН - Строка - ИНН организации. +// **** КодСтатуса - Строка - код текущего статуса организации. +// **** НаименованиеСтатуса - Строка - наименование текущего статуса организации. +// **** ПроцентКапитала - Число - процент в уставном капитале. +// **** СуммаКапитала - Число - сумма взноса в уставный капитал. +// *** ОрганизацииГдеУчредительПоФИО - Булево - если Истина, поиск проводился по ФИО учредителя, иначе по ИНН. +// * Подразделения - ТаблицаЗначений - филиалы и представительства юридического лица, указанные в Уставе: +// ** ОписаниеПодразделения - Строка - наименование подразделения. +// * ИзмененияВРеестре - ТаблицаЗначений - данные об изменениях в ЕГРЮЛ по этому лицу: +// ** ДатаИзменения - Дата - дата внесения изменения. +// ** ГосударственныйОрган - Строка - орган, который внес изменение. +// ** ОписаниеИзменения - Строка - описание изменения. +// * БухгалтерскаяОтчетность - ТаблицаЗначений - данные бухгалтерской отчетности, сданной в органы Росстата: +// ** Год - Число - год, за который была сдана отчетность. +// ** КодВалютыОтчетности - Строка - в рублях, в тысячах или в миллионах рублей. +// ** ТипОтчетности - Строка - обычная отчетность, упрощенная или отчетность НКО. +// ** Показатели - ТаблицаЗначений - показатели бухгалтерской отчетности: +// *** Код - Строка - код показателя отчетности. +// *** Значение - Число - значение показателя отчетности. +// * ОрганизацииГдеРуководитель - ТаблицаЗначений - (устарело) данные об организациях, где руководитель этой организации также является руководителем: +// следует использовать Руководители[0].ОрганизацииГдеРуководитель +// Колонки: +// ** НаименованиеОрганизации - Строка - наименование организации. +// ** ИНН - Строка - ИНН организации. +// ** КодСтатуса - Строка - код текущего статуса организации. +// ** НаименованиеСтатуса - Строка - наименование текущего статуса организации. +// * ОрганизацииГдеРуководительПоФИО - Булево - если Истина, поиск проводился по ФИО руководителя, иначе по ИНН. +// Устарело, следует использовать Руководители[0].ОрганизацииГдеРуководительПоФИО. +// * ОрганизацииГдеУчредитель - ТаблицаЗначений - организации, где руководитель этой организации является учредителем: +// Устарело, следует использовать Руководители[0].ОрганизацииГдеУчредитель. +// ** НаименованиеОрганизации - Строка - наименование организации. +// ** ИНН - Строка - ИНН организации. +// ** КодСтатуса - Строка - код текущего статуса организации. +// ** НаименованиеСтатуса - Строка - наименование текущего статуса организации. +// ** ПроцентКапитала - Число - процент в уставном капитале. +// ** СуммаКапитала - Число - сумма взноса в уставный капитал. +// * ОрганизацииГдеУчредительПоФИО - Булево - если Истина, поиск проводился по ФИО руководителя, иначе по ИНН. +// Устарело, следует использовать Руководители[0].ОрганизацииГдеУчредительПоФИО. +// * ОжиданиеОтвета - Булево - если возвращается Истина - требуется повторный вызов метода с этими же параметрами. +// * НаименованиеСтатуса - Строка, Неопределено - устарело, необходимо использовать Статус.Наименование - наименование текущего статуса; +// * КодСтатуса - Строка, Неопределено - устарело, необходимо использовать Статус.Код - код текущего статуса. // Функция НоваяИнформацияОСвязяхЮридическогоЛица() Экспорт ИнформацияОСвязях = НовыеРеквизитыЮридическогоЛица(); - // Дополнительная информация о юридическом лице и его связях. - ИнформацияОСвязях.Вставить("НаименованиеСтатуса"); - ИнформацияОСвязях.Вставить("КодСтатуса"); - ИнформацияОСвязях.Вставить("УставныйКапитал"); - + ИнформацияОСвязях.Вставить("ДанныеПравопреемников", НовыеДанныеПравопреемников()); + ИнформацияОСвязях.Вставить("ДанныеПравопредшественников", НовыеДанныеПравопредшественников()); + ИнформацияОСвязях.Вставить("СтатусМКФ"); + ИнформацияОСвязях.Вставить("КорпоративныйДоговор"); + ИнформацияОСвязях.Вставить("ДержательРеестраАкционеров"); ИнформацияОСвязях.Вставить("ВидыДеятельности", НоваяТаблицаВидыДеятельности()); + ИнформацияОСвязях.Вставить("СведенияОРегистрацииНаДеньПринятия"); + ИнформацияОСвязях.Вставить("ДействующиеОтИмениЮридическогоЛица"); + ИнформацияОСвязях.Вставить("ВидПолномочий"); ИнформацияОСвязях.Вставить("Лицензии", НоваяТаблицаЛицензии()); @@ -2648,94 +2394,98 @@ ИнформацияОСвязях.Вставить("ОрганизацииГдеУчредитель" , НоваяТаблицаОрганизацииГдеУчредитель()); ИнформацияОСвязях.Вставить("ОрганизацииГдеУчредительПоФИО", Ложь); + // Устарело. Дополнительная информация о юридическом лице и его связях. + ИнформацияОСвязях.Вставить("НаименованиеСтатуса"); + ИнформацияОСвязях.Вставить("КодСтатуса"); + Возврат ИнформацияОСвязях; КонецФункции // Возвращается информация о связях индивидуального предпринимателя с другими лицами по данным ЕГРЮЛ и ЕГРИП. // -// Параметры: -// ИНН - Строка - ИНН индивидуального предпринимателя, информацию о связях которого надо получить. -// // Возвращаемое значение: -// - Структура - информация о связях индивидуального предпринимателя. -// Содержит основные данные о предпринимателе - см. РеквизитыПредпринимателяПоИНН. -// Также содержит данные: -// * Статус - Структура, Неопределено - текущий статус предпринимателя. -// Поля: -// ** Код - Строка - код статуса; -// ** Наименование - Строка - наименование статуса; -// * ВидыДеятельности - ТаблицаЗначений - информация о видах деятельности. -// ** Код - Строка - код вида деятельности; -// ** Наименование - Строка - наименование вида деятельности; -// ** Классификатор - Строка - тип классификатор экономической деятельности, согласно которому указаны код и наименование; -// Значения: "ОКВЭД", "ОКВЭД2" -// ** КодОКВЭД (устарело) - Строка - код вида деятельности по классификатору ОКВЭД. -// Устарело, следует использовать Код. -// ** НаименованиеОКВЭД (устарело) - Строка - наименование вида деятельности по ОКВЭД, -// сервисом не поставляется, должно заполняться из переопределяемого кода. -// Устарело, следует использовать Наименование. -// ** ЭтоОКВЭД2 (устарело) - Булево - код приведен по классификатору редакции 2 или редакции 1. -// Устарело, следует использовать Классификатор. -// * Лицензии - ТаблицаЗначений - данные о полученных лицензиях. -// ** Лицензия - Строка - наименование лицензии. -// ** ОписаниеЛицензии - Строка - подробное описание лицензии. -// * ОрганизацииГдеРуководитель - ТаблицаЗначений - данные об организациях, где этот предприниматель является руководителем. -// ** НаименованиеОрганизации - Строка - наименование организации. -// ** ИНН - Строка - ИНН организации. -// ** КодСтатуса - Строка - код текущего статуса организации. -// ** НаименованиеСтатуса - Строка - наименование текущего статуса организации. -// * ОрганизацииГдеРуководительПоФИО - Булево - если Истина, поиск проводился по ФИО предпринимателя, иначе по ИНН. -// * ОрганизацииГдеУчредитель - ТаблицаЗначений - организации, где этот предприниматель является учредителем. -// ** НаименованиеОрганизации - Строка - наименование организации. -// ** ИНН - Строка - ИНН организации. -// ** КодСтатуса - Строка - код текущего статуса организации. -// ** НаименованиеСтатуса - Строка - наименование текущего статуса организации. -// ** ПроцентКапитала - Число - процент в уставном капитале. -// ** СуммаКапитала - Число - сумма взноса в уставный капитал. -// * ОрганизацииГдеУчредительПоФИО - Булево - если Истина, поиск проводился по ФИО предпринимателя, иначе по ИНН. -// * ИзмененияВРеестре - ТаблицаЗначений - данные об изменениях в ЕГРИП по этому лицу. -// ** ДатаИзменения - Дата - дата внесения изменения. -// ** ГосударственныйОрган - Строка - орган, который внес изменение. -// ** ОписаниеИзменения - Строка - описание изменения; -// * ИсторияРеквизитов - Структура - история изменения реквизитов предпринимателя. -// ** ФИО - ТаблицаЗначений - история изменения ФИО; -// Колонки: -// *** Дата - Дата - дата изменения ФИО; -// *** Фамилия - Строка - фамилия; -// *** Имя - Строка - имя; -// *** Отчество - Строка - отчество; -// ** Гражданство - ТаблицаЗначений - история изменения гражданства; -// Колонки: -// *** Дата - Дата - дата изменения гражданства; -// *** КодСтраныГражданства - Строка, Неопределено - код страны; -// ** ОГРН - ТаблицаЗначений - история изменения ОГРН; -// Колонки: -// *** Дата - Дата - дата изменения ОГРН; -// *** Значение - Строка - значение ОГРН; -// *** ВидПредпринимателя - Структура - вид предпринимателя. -// **** Дата - Дата - дата изменения вида предпринимателя; -// **** Код - Строка - код вида предпринимателя; -// **** Наименование - Строка - наименование вида предпринимателя; -// *** Статус - Структура - статус предпринимателя. -// **** Дата - Дата - дата изменения статуса; -// **** Код - Строка - код статуса; -// **** Наименование - Строка - наименование статуса; -// * ОжиданиеОтвета - Булево - если возвращается Истина - требуется повторный вызов метода с этими же параметрами. -// * ОписаниеОшибки - Строка, Неопределено - служебный реквизит. -// Для обработки ошибки на клиентской части необходимо использовать метод -// РаботаСКонтрагентамиКлиент.ОбработатьОшибку. -// * КодСтатуса - Строка,Неопределено - устарело, необходимо использовать Статус.Код - код текущего статуса. +// Структура - информация о связях индивидуального предпринимателя: +// * ИНН - Неопределено, Строка - ИНН предпринимателя. +// * Наименование - Неопределено, Строка - представление предпринимателя в учетной программе. +// * НаименованиеПолное - Неопределено, Строка - фамилия, имя, отчество предпринимателя. +// * НаименованиеСокращенное - Неопределено, Строка - фамилия, имя, отчество предпринимателя. +// * ВидИП - Неопределено, Строка - вид предпринимателя. +// * Фамилия - Неопределено, Строка - фамилия предпринимателя. +// * Имя - Неопределено, Строка - имя предпринимателя. +// * Отчество - Неопределено, Строка - отчество предпринимателя. +// * ФамилияНаАнглийском - Неопределено, Строка - фамилия предпринимателя на английском. +// * ИмяНаАнглийском - Неопределено, Строка - имя предпринимателя на английском. +// * ОтчествоНаАнглийском - Неопределено, Строка - отчество предпринимателя на английском. +// * РегистрационныйНомер - Неопределено, Строка - ОГРНИП. +// * Пол - Неопределено, Строка - "1" - Мужской, "2" - Женский. +// * КодСтраныГражданства - Неопределено, Строка - код страны. +// * РегистрацияВНалоговомОргане - Неопределено, Структура - данные о регистрации в ИФНС: +// ** Код - Строка - код налогового органа. +// ** Наименование - Строка - наименование налогового органа. +// ** ОКТМО - Строка - код ОКТМО налогового органа. +// ** ОКАТО - Строка - код ОКАТО налогового органа. +// ** ДатаРегистрации - Дата - дата постановки на учет в налоговом органе. +// * РегистрацияВПенсионномФонде - Неопределено, Структура - данные о регистрации в ПФР: +// ** РегистрационныйНомерПФР - Строка - регистрационный номер предпринимателя в ПФР. +// ** КодОрганаПФР - Строка - код органа ПФР. +// ** НаименованиеОрганаПФР - Строка - наименование органа ПФР. +// ** ДатаРегистрации - Дата - дата постановки на учет в ПФР. +// * РегистрацияВФСС - Неопределено, Структура - данные о регистрации в ФСС: +// ** РегистрационныйНомерФСС - Строка - регистрационный номер предпринимателя в ФСС. +// ** КодПодчиненности - Строка - код подчиненности органа ФСС. +// ** КодОрганаФСС - Строка - код органа ФСС. +// ** НаименованиеОрганаФСС - Строка - наименование органа ФСС. +// ** ДатаРегистрации - Дата - дата постановки на учет в ФСС. +// * РегистрацияВСФР - Неопределено, Структура - данные о регистрации в СФР: +// ** РегистрационныйНомерСФР - Строка - регистрационный номер предпринимателя в СФР. +// ** КодОрганаСФР - Строка - код органа СФР. +// ** НаименованиеОрганаСФР - Строка - наименование органа СФР. +// ** ДатаРегистрации - Дата - дата постановки на учет в СФР. +// * ДатаРегистрации - Неопределено, Дата - дата регистрации предпринимателя. +// * СвидетельствоОРегистрации - Неопределено, Структура - данные свидетельства: +// ** Серия - Строка - серия свидетельства. +// ** Номер - Строка - номер свидетельства. +// ** Дата - Дата - дата выдачи свидетельства. +// * ВидДеятельности - Неопределено, Структура - описание вида экономической деятельности: +// ** Код - Строка - код вида деятельности; +// ** Наименование - Строка - наименование вида деятельности; +// ** Классификатор - Строка - тип классификатор экономической деятельности, согласно которому указаны код и наименование. +// Значения: "ОКВЭД", "ОКВЭД2"; +// * Статус - Неопределено, Структура - текущий статус предпринимателя: +// ** Код - Строка - код статуса; +// ** Наименование - Строка - наименование статуса. +// * ЭлектроннаяПочта - Неопределено, Строка - электронная почта. +// * ЯвляетсяГлавойКФХ - Булево - признак, что является главой КФХ. +// * ЯвляетсяГлавойКФХОписание - Строка - описание признака, что является главой КФХ. +// * ИсторияРеквизитов - Структура - история изменения реквизитов предпринимателя. +// см. НовыйИсторияРеквизитовПредпринимателя +// * ОписаниеОшибки - Неопределено, Строка - описание возникшей ошибки. +// Для обработки ошибки на клиентской части необходимо использовать метод +// РаботаСКонтрагентамиКлиент.ОбработатьОшибку. +// * КодОКВЭД - Неопределено, Строка - устарело, следует использовать ВидДеятельности.Код, код основного +// вида деятельности по классификатору ОКВЭД. +// * ЭтоОКВЭД2 - Булево - устарело, следует использовать ВидДеятельности.Классификатор, код ОКВЭД +// приведен по классификатору редакции 2 или редакции 1. +// * ВидыДеятельности - ТаблицаЗначений - информация о видах деятельности. см. НоваяТаблицаВидыДеятельности +// * Лицензии - ТаблицаЗначений - данные о полученных лицензиях. см. НоваяТаблицаЛицензии. +// * ОрганизацииГдеРуководитель - ТаблицаЗначений - данные об организациях, где этот предприниматель является руководителем. +// см. НоваяТаблицаОрганизации. +// * ОрганизацииГдеРуководительПоФИО - Булево - если Истина, поиск проводился по ФИО предпринимателя, иначе по ИНН. +// * ОрганизацииГдеУчредитель - ТаблицаЗначений - организации, где этот предприниматель является учредителем. +// см. НоваяТаблицаОрганизацииГдеУчредитель. +// * ОрганизацииГдеУчредительПоФИО - Булево - если Истина, поиск проводился по ФИО предпринимателя, иначе по ИНН. +// * ИзмененияВРеестре - ТаблицаЗначений - данные об изменениях в ЕГРИП по этому лицу. +// см. НоваяТаблицаИзмененияВРеестре. +// * ОжиданиеОтвета - Булево - если возвращается Истина - требуется повторный вызов метода с этими же параметрами. +// * НаименованиеСтатуса - Строка, Неопределено - устарело, необходимо использовать Статус.Наименование - наименование текущего статуса; +// * КодСтатуса - Строка, Неопределено - устарело, необходимо использовать Статус.Код - код текущего статуса. // Функция НоваяИнформацияОСвязяхПредпринимателя() Экспорт ИнформацияОСвязях = НовыеРеквизитыПредпринимателя(); // Дополнительная информация о предпринимателе и его связях. - - ИнформацияОСвязях.Вставить("НаименованиеСтатуса"); - ИнформацияОСвязях.Вставить("КодСтатуса"); - ИнформацияОСвязях.Вставить("ВидыДеятельности", НоваяТаблицаВидыДеятельности()); ИнформацияОСвязях.Вставить("Лицензии", НоваяТаблицаЛицензии()); @@ -2753,6 +2503,9 @@ // Служебный реквизит ИнформацияОСвязях.Вставить("ОжиданиеОтвета", Ложь); + ИнформацияОСвязях.Вставить("НаименованиеСтатуса"); + ИнформацияОСвязях.Вставить("КодСтатуса"); + Возврат ИнформацияОСвязях; КонецФункции @@ -2764,7 +2517,7 @@ // ИдентификаторОпции - Строка - идентификатор опции услуги портала 1С:ИТС. // // Возвращаемое значение: -// Структура, Неопределено - данные уведомления по опции 1С. +// Неопределено, Структура - данные уведомления по опции 1С. // Функция УведомлениеПользователя(ИдентификаторОпции) Экспорт @@ -2826,6 +2579,42 @@ #КонецОбласти +#Область ПодключениеСервисовСопровождения + +// Регистрирует список сервисов, которые доступны для +// использования в конфигурации. +// +// Параметры: +// СервисыСопровождения - Массив из Структура - сервисы доступные для использовании в конфигурации; +// Значение - Структура - см. ПодключениеСервисовСопровождения.НовыйОписательСервиса(). +// +// Пример: +// ОписательСервиса = ПодключениеСервисовСопровождения.НовыйОписательСервиса(); +// ОписательСервиса.Идентификатор = "contragent"; +// ОписательСервиса.КартинкаСервиса = Метаданные.ОбщиеКартинки.Сервис1СКонтрагент; +// ОписательСервиса.Наименование = НСтр("ru = '1С:Контрагент'"); +// ОписательСервиса.ОписаниеСервиса = НСтр("ru = 'Быстрая проверка информации о контрагентах, автоматическое +// |заполнение реквизитов контрагентов в различных документах и другие полезные функции.'"); +// +// СервисыСопровождения.Добавить(ОписательСервиса); +// +Процедура ПриДобавленииОписанийСервисовСопровождения(СервисыСопровождения) Экспорт + + МодульПодключениеСервисовСопровождения = ОбщегоНазначения.ОбщийМодуль("ПодключениеСервисовСопровождения"); + ОписательСервиса = МодульПодключениеСервисовСопровождения.НовыйОписательСервиса(); + ОписательСервиса.Идентификатор = ИдентификаторСервиса(); + ОписательСервиса.Картинка = Метаданные.ОбщиеКартинки.Сервис1СКонтрагент48; + ОписательСервиса.Наименование = НСтр("ru = '1С:Контрагент'"); + ОписательСервиса.Описание = НСтр("ru = 'Быстрая проверка информации о контрагентах, автоматическое заполнение реквизитов контрагентов в различных документах, поиск контрагентов и пр.'"); + + СервисыСопровождения.Добавить(ОписательСервиса); + +КонецПроцедуры + +#КонецОбласти + +#КонецОбласти + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -3410,10 +3199,10 @@ ИначеЕсли СтрНайти(ОписаниеОшибкиВРег, "SERVER-1:") > 0 Тогда Если ИмяМетода = "findCorporationByInn" - ИЛИ ИмяМетода = "findCorpTrustability" Тогда + Или ИмяМетода = "findCorpTrustability" Тогда Результат.ОписаниеОшибки = НСтр("ru='Не указан ИНН юридического лица.'"); ИначеЕсли ИмяМетода = "findEntrepreneurByInn" - ИЛИ ИмяМетода = "findEntrTrustabilityByInn" Тогда + Или ИмяМетода = "findEntrTrustabilityByInn" Тогда Результат.ОписаниеОшибки = НСтр("ru='Не указан ИНН предпринимателя.'"); ИначеЕсли ИмяМетода = "findCorporationsByName" Тогда Результат.ОписаниеОшибки = НСтр("ru='Не указано наименование юридического лица.'"); @@ -3439,10 +3228,10 @@ ИначеЕсли СтрНайти(ОписаниеОшибкиВРег, "SERVER-2:") > 0 Тогда Если ИмяМетода = "findCorporationByInn" - ИЛИ ИмяМетода = "findCorpTrustability" Тогда + Или ИмяМетода = "findCorpTrustability" Тогда Результат.ОписаниеОшибки = НСтр("ru='ИНН юридического лица должен состоять из 10 цифр.'"); ИначеЕсли ИмяМетода = "findEntrepreneurByInn" - ИЛИ ИмяМетода = "findEntrTrustabilityByInn" Тогда + Или ИмяМетода = "findEntrTrustabilityByInn" Тогда Результат.ОписаниеОшибки = НСтр("ru='ИНН предпринимателя должен состоять из 12 цифр.'"); ИначеЕсли ИмяМетода = "findInspectionsByInnList" Тогда Результат.ОписаниеОшибки = НСтр("ru='ИНН проверяемого лица должен состоять из 10 или 12 цифр.'"); @@ -3462,10 +3251,10 @@ ИначеЕсли СтрНайти(ОписаниеОшибкиВРег, "SERVER-3:") > 0 Тогда Если ИмяМетода = "findCorporationByInn" - ИЛИ ИмяМетода = "findCorpTrustability" Тогда + Или ИмяМетода = "findCorpTrustability" Тогда Результат.ОписаниеОшибки = НСтр("ru='ИНН юридического лица должен содержать только цифры.'"); ИначеЕсли ИмяМетода = "findEntrepreneurByInn" - ИЛИ ИмяМетода = "findEntrTrustabilityByInn" Тогда + Или ИмяМетода = "findEntrTrustabilityByInn" Тогда Результат.ОписаниеОшибки = НСтр("ru='ИНН предпринимателя должен содержать только цифры.'"); ИначеЕсли ИмяМетода = "findInspectionsByInnList" Тогда Результат.ОписаниеОшибки = НСтр("ru='ИНН проверяемого лица должен содержать только цифры.'"); @@ -3526,7 +3315,7 @@ ИначеЕсли Не ЗначениеЗаполнено(ОписаниеОшибки) И ОбъектXDTO = Неопределено Тогда Если ИмяМетода = "findCorporationByInn" - ИЛИ ИмяМетода = "findEntrepreneurByInn" Тогда + Или ИмяМетода = "findEntrepreneurByInn" Тогда Результат.ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru='Не удалось найти данные для заполнения реквизитов по ИНН %1.'"), Результат.ИНН); @@ -4040,6 +3829,20 @@ #Область ОписанияРеквизитов +// Новые сведения юридического лица. +// +// Параметры: +// ИНН - Строка - ИНН +// +// Возвращаемое значение: +// Структура - Новые сведения юридического лица: +// * ИНН - Строка - ИНН юридического лица; +// * ЕГРЮЛ - Неопределено, Структура - сведения из ЕГРЮЛ; +// * РАФП - ТаблицаЗначений - сведения из РАФП. см. НоваяТаблицаРАФП; +// * ОписаниеОшибки - Неопределено, Строка - описание возникшей ошибки. +// Для обработки ошибки на клиентской части необходимо использовать метод +// РаботаСКонтрагентамиКлиент.ОбработатьОшибку. +// Функция НовыеСведенияЮридическогоЛица(ИНН) Результат = Новый Структура; @@ -4051,6 +3854,72 @@ КонецФункции +// Возвращает структуру реквизитов юридического лица для заполнения данными из ЕГРЮЛ. +// +// Возвращаемое значение: +// Структура: +// * ИНН - Строка, Неопределено - ИНН юридического лица +// * КПП - Строка, Неопределено - КПП юридического лица +// * Наименование - Строка, Неопределено - представление юридического лица в учетной программе +// * НаименованиеПолное - Строка, Неопределено - полное наименование юридического лица +// * НаименованиеСокращенное - Строка, Неопределено - сокращенное наименование юридического лица +// * НаименованиеПолноеЕГРЮЛ - Строка, Неопределено - полное наименование юридического лица в ЕГРЮЛ +// * НаименованиеСокращенноеЕГРЮЛ - Строка, Неопределено - сокращенное наименование юридического лица в ЕГРЮЛ +// * НаименованиеПолноеНаАнглийском - Строка, Неопределено - полное наименование юридического лица на английском. +// * НаименованиеСокращенноеНаАнглийском - Строка, Неопределено - сокращенное наименование юридического лица на английском +// * РегистрационныйНомер - Неопределено, Строка - ОГРН юридического лица +// * Статус - Неопределено, Структура - текущий статус юридического лица. +// см. НовыйДанныеСтатуса. +// * РегистрирующийОрган - Неопределено, Структура - орган, зарегистрировавший юридическое лицо. +// см. НовыйДанныеРегистрирующегоОргана. +// * НомерТиповогоУстава - Строка, Неопределено - Номер типового устава юридического лица. +// * ПравоваяФорма - Неопределено, Строка - правовая форма юридического лица. +// * ЮридическийАдрес - Неопределено, Структура - данные о юридическом адресе: +// ** КонтактнаяИнформация - Строка - данные в формате JSON для заполнения реквизита +// "Значение" контактной информации в табличной части КонтактнаяИнформация объекта +// (см. описание подсистемы "Контактная информация" Библиотеки стандартных подсистем). +// ** Представление - Строка - представление адреса. +// ** Комментарий - Строка - произвольный комментарий. +// ** Корректный - Булево - адрес является корректным по данным ФИАС. +// * ЭлектроннаяПочта - Строка, Неопределено - адрес электронной почты +// * Руководители - ТаблицаЗначений - устарело, рекомендуется использовать свойство "ДанныеРуководителей". +// см. НоваяТаблицаРуководителей +// * ДанныеРуководителей - Структура - сведения о руководителях: +// ** СкрытыеДанные - Булево - признак скрытых данных о руководителях организации. +// ** ПредставлениеСкрытыхДанных - Строка - представление скрытых данных о руководителях. +// Заполняется если СкрытыеДанные = Истина +// ** Руководители - ТаблицаЗначений - сведения о руководителях. Заполняется если СкрытыеДанные = Ложь. +// см. НоваяТаблицаРуководителей. +// * РегистрацияВНалоговомОргане - Неопределено, Структура - данные о регистрации в ИФНС. +// см. НоваяРегистрацияВНалоговомОргане. +// * ДатаРегистрации - Неопределено, Дата - дата регистрации юридического лица +// * ДатаПрекращенияДеятельности - Дата, Неопределено - дата прекращения деятельности юридического лица. +// * РегистрацияВПенсионномФонде - Неопределено, Структура - данные о регистрации в ПФР. +// см. НоваяРегистрацияВПенсионномФонде. +// * РегистрацияВФСС - Неопределено, Структура - данные о регистрации в ФСС. +// см. НоваяРегистрацияВФСС. +// * РегистрацияВСФР - Неопределено, Структура - данные о регистрации в СФР. +// см. НоваяРегистрацияВСФР. +// * ВидДеятельности - Неопределено, Структура - описание основного вида экономической деятельности. +// см. НовыйОписаниеВидаДеятельности. +// * ОткрытыеГосударственныеДанныеФНС - ТаблицаЗначений - открытые государственные данные ФНС. +// см. НоваяТаблицаОткрытыеГосударственныеДанныеФНС +// * Подразделения - Неопределено, Массив из Структура - данные подразделений юридического лица. +// см. НовыйДанныеПодразделения. +// * ИсторияРеквизитов - Структура - история изменений реквизитов юридического лица. +// см. НовыйИсторияРеквизитовЮридическогоЛица. +// * ОписаниеОшибки - Строка - текст ошибки при получении данных +// * КодОКВЭД - Строка, Неопределено - устарело, следует использовать ВидДеятельности.Код, код основного +// вида деятельности по классификатору ОКВЭД. +// * ЭтоОКВЭД2 - Булево - устарело, следует использовать ВидДеятельности.Классификатор, код ОКВЭД +// приведен по классификатору редакции 2 или редакции 1. +// * Руководитель - Неопределено, Структура - устарело, информация о руководителе: +// ** Фамилия - Строка - фамилия руководителя; +// ** Имя - Строка - имя руководителя; +// ** Отчество - Строка - отчество руководителя; +// ** Представление - Строка - ФИО руководителя; +// ** ДатаЗаписи - Дата - дата записи о руководителе; +// Функция НовыеРеквизитыЮридическогоЛица() РеквизитыОрганизации = Новый Структура; @@ -4073,6 +3942,7 @@ // Следующие свойства могут содержать Неопределено в случае отсутствия в сервисе данных. РеквизитыОрганизации.Вставить("ПравоваяФорма"); РеквизитыОрганизации.Вставить("ЮридическийАдрес"); + РеквизитыОрганизации.Вставить("ЭлектроннаяПочта"); РеквизитыОрганизации.Вставить("Руководители", НоваяТаблицаРуководителей()); РеквизитыОрганизации.Вставить("ДанныеРуководителей", НовыеДанныеРуководителей()); РеквизитыОрганизации.Вставить("РегистрацияВНалоговомОргане"); @@ -4099,6 +3969,65 @@ КонецФункции +// Возвращает описание данных из РАФП. +// +// Возвращаемое значение: +// ТаблицаЗначений - сведения из РАФП: +// * КПП - Строка - КПП юридического лица; +// * ВидОбособленногоПодразделения - Строка - вид обособленного подразделения; +// * НаименованиеПолное - Строка - полное наименование представительства; +// * РегистрацияВНалоговомОргане - Неопределено, Структура - информация о регистрации представительства в налоговом органе: +// ** Код - Строка - код налогового органа. +// ** Наименование - Строка - наименование налогового органа. +// ** ДатаРегистрации - Дата - дата регистрации в налоговом органе; +// * ЮридическийАдрес - Неопределено, Структура - юридический адрес: +// ** КонтактнаяИнформация - Строка - данные в формате JSON для заполнения реквизита; +// "Значение" контактной информации в табличной части КонтактнаяИнформация объекта +// (см. описание подсистемы "Контактная информация" Библиотеки стандартных подсистем). +// ** Представление - Строка - представление адреса; +// ** Комментарий - Строка - произвольный комментарий; +// ** Корректный - Булево - адрес является корректным по данным ФИАС; +// * ВидДеятельности - Неопределено, Структура - описание основного вида экономической деятельности. +// см. НовыйОписаниеВидаДеятельности. +// * ПрочиеВидыДеятельности - Неопределено, ТаблицаЗначений - описание прочих видов экономической деятельности. +// Колонки: +// ** Код - Строка - код вида деятельности; +// ** Наименование - Строка - наименование вида деятельности; +// ** Классификатор - Строка - тип классификатор экономической деятельности, согласно которому указаны код и наименование. +// Значения: "ОКВЭД", "ОКВЭД2"; +// * КоличествоИностранныхСотрудников - Число - количество иностранных сотрудников в представительстве; +// * Руководитель - Неопределено, Структура - информация о руководителе: +// ** Фамилия - Строка - фамилия руководителя; +// ** Имя - Строка - имя руководителя; +// ** Отчество - Строка - отчество руководителя; +// ** Представление - Строка - ФИО руководителя; +// ** ДатаЗаписи - Дата - дата записи о руководителе; +// * Аккредитация - Неопределено, Структура - информация об аккредитации представительства: +// ** НомерЗаписиОбАккредитации - Строка - номер записи об аккредитации; +// ** ДатаАккредитации - Дата - дата аккредитации; +// ** КодУполномоченногоНалоговогоОргана - Строка - код уполномоченного налогового органа, +// выполнившего аккредитацию представительства; +// ** НаименованиеУполномоченногоНалоговогоОргана - Строка - наименование уполномоченного налогового органа, +// выполнившего аккредитацию представительства; +// ** ДатаОкончанияСрокаАккредитации - Дата - дата окончания срока аккредитации; +// ** ДатаПродленияАккредитации - Дата - дата принятия решения о продлении срока аккредитации; +// ** ДатаОкончанияСрокаПродленияАккредитации - Дата - дата окончания срока продления аккредитации; +// * ИностранноеЮридическоеЛицо - Неопределено, Структура - данные иностранной компании: +// ** НаименованиеПолное - Строка - полное наименование иностранного юридического лица; +// ** КодСтраны - Число - код страны регистрации по ОКСМ; +// ** Страна - Строка - наименование страны регистрации; +// ** Адрес - Строка - адрес иностранного юридического лица в стране регистрации; +// ** УставныйКапитал - Структура - информация об уставном капитале. Поля: +// *** Размер - Число - размер уставного капитала; +// *** КодВалюты - Число - код валюты уставного капитала по ОКВ; +// *** НаименованиеВалюты - Строка - наименование валюты уставного капитала; +// ** КодНалогоплательщика - Строка - код или аналог кода налогоплательщика иностранного +// юридического лица в стране регистрации; +// ** Регистрация - Структура - информация о регистрации в стране регистрации. Поля: +// *** РегистрационныйНомер - Строка - регистрационный номер; +// *** НаименованиеОргана - Строка - наименование органа регистрации в стране регистрации; +// *** ОсобенностиРежимаРегистрации - Строка - описание особенности режима регистрации; +// Функция НоваяТаблицаРАФП() Результат = Новый ТаблицаЗначений; @@ -4156,6 +4085,39 @@ #Область ИсторияРеквизитовЮридическогоЛица +// Возвращает описание данных истории изменений реквизитов юридического лица. +// +// Возвращаемое значение: +// Структура - данные истории реквизитов юридического лица: +// * КПП - ТаблицаЗначений - история изменения значения реквизита КПП: +// ** Дата - Дата - дата изменения КПП; +// ** Значение - Строка - значение реквизита КПП; +// * Наименование - ТаблицаЗначений - история изменения наименования: +// ** Дата - Строка - полное наименование юридического лица; +// ** НаименованиеПолное - Строка - полное наименование юридического лица; +// ** НаименованиеСокращенное - Строка - сокращенное наименование юридического лица +// * Адрес - ТаблицаЗначений - история изменения адреса: +// ** Дата - Дата - дата изменения адреса; +// ** КонтактнаяИнформация - Строка - данные в формате JSON для заполнения реквизита +// "Значение" контактной информации в табличной части КонтактнаяИнформация объекта +// (см. описание подсистемы "Контактная информация" Библиотеки стандартных подсистем). +// ** Представление- Строка - представление адреса; +// ** Комментарий - Строка - произвольный комментарий; +// * Статус - ТаблицаЗначений - история изменения статуса: +// ** Дата - Дата - дата изменения наименования; +// ** Код - Строка - код статуса; +// ** Наименование - Строка - наименование статуса; +// * РеквизитыДиректора - ТаблицаЗначений - история изменения реквизитов директора: +// ** Дата - Дата - дата изменения реквизитов директора; +// ** ДатаОкончания - Дата - дата окончания действия реквизитов. +// Пустая дата, если директор действующий; +// ** ИНН - Строка - ИНН; +// ** Фамилия - Строка - фамилия директора; +// ** Имя - Строка - имя; +// ** Отчество - Строка - отчество; +// ** ВидДолжности - Строка - вид должности; +// ** НаименованиеДолжности - Строка - наименование должности; +// Функция НовыйИсторияРеквизитовЮридическогоЛица() Результат = Новый Структура; @@ -4247,6 +4209,72 @@ #КонецОбласти +// Возвращает структуру реквизитов предпринимателя. +// +// Возвращаемое значение: +// Структура - реквизиты индивидуального предпринимателя: +// * ИНН - Неопределено, Строка - ИНН предпринимателя. +// * Наименование - Неопределено, Строка - представление предпринимателя в учетной программе. +// * НаименованиеПолное - Неопределено, Строка - фамилия, имя, отчество предпринимателя. +// * НаименованиеСокращенное - Неопределено, Строка - фамилия, имя, отчество предпринимателя. +// * ВидИП - Неопределено, Строка - вид предпринимателя. +// * Фамилия - Неопределено, Строка - фамилия предпринимателя. +// * Имя - Неопределено, Строка - имя предпринимателя. +// * Отчество - Неопределено, Строка - отчество предпринимателя. +// * ФамилияНаАнглийском - Неопределено, Строка - фамилия предпринимателя на английском. +// * ИмяНаАнглийском - Неопределено, Строка - имя предпринимателя на английском. +// * ОтчествоНаАнглийском - Неопределено, Строка - отчество предпринимателя на английском. +// * РегистрационныйНомер - Неопределено, Строка - ОГРНИП. +// * Пол - Неопределено, Строка - "1" - Мужской, "2" - Женский. +// * КодСтраныГражданства - Неопределено, Строка - код страны. +// * РегистрацияВНалоговомОргане - Неопределено, Структура - данные о регистрации в ИФНС: +// ** Код - Строка - код налогового органа. +// ** Наименование - Строка - наименование налогового органа. +// ** ОКТМО - Строка - код ОКТМО налогового органа. +// ** ОКАТО - Строка - код ОКАТО налогового органа. +// ** ДатаРегистрации - Дата - дата постановки на учет в налоговом органе. +// * РегистрацияВПенсионномФонде - Неопределено, Структура - данные о регистрации в ПФР: +// ** РегистрационныйНомерПФР - Строка - регистрационный номер предпринимателя в ПФР. +// ** КодОрганаПФР - Строка - код органа ПФР. +// ** НаименованиеОрганаПФР - Строка - наименование органа ПФР. +// ** ДатаРегистрации - Дата - дата постановки на учет в ПФР. +// * РегистрацияВФСС - Неопределено, Структура - данные о регистрации в ФСС: +// ** РегистрационныйНомерФСС - Строка - регистрационный номер предпринимателя в ФСС. +// ** КодПодчиненности - Строка - код подчиненности органа ФСС. +// ** КодОрганаФСС - Строка - код органа ФСС. +// ** НаименованиеОрганаФСС - Строка - наименование органа ФСС. +// ** ДатаРегистрации - Дата - дата постановки на учет в ФСС. +// * РегистрацияВСФР - Неопределено, Структура - данные о регистрации в СФР: +// ** РегистрационныйНомерСФР - Строка - регистрационный номер предпринимателя в СФР. +// ** КодОрганаСФР - Строка - код органа СФР. +// ** НаименованиеОрганаСФР - Строка - наименование органа СФР. +// ** ДатаРегистрации - Дата - дата постановки на учет в СФР. +// * ДатаРегистрации - Неопределено, Дата - дата регистрации предпринимателя. +// * СвидетельствоОРегистрации - Неопределено, Структура - данные свидетельства: +// ** Серия - Строка - серия свидетельства. +// ** Номер - Строка - номер свидетельства. +// ** Дата - Дата - дата выдачи свидетельства. +// * ВидДеятельности - Неопределено, Структура - описание вида экономической деятельности: +// ** Код - Строка - код вида деятельности; +// ** Наименование - Строка - наименование вида деятельности; +// ** Классификатор - Строка - тип классификатор экономической деятельности, согласно которому указаны код и наименование. +// Значения: "ОКВЭД", "ОКВЭД2"; +// * Статус - Неопределено, Структура - текущий статус предпринимателя: +// ** Код - Строка - код статуса; +// ** Наименование - Строка - наименование статуса. +// * ЭлектроннаяПочта - Неопределено, Строка - электронная почта. +// * ЯвляетсяГлавойКФХ - Булево - признак, что является главой КФХ. +// * ЯвляетсяГлавойКФХОписание - Строка - описание признака, что является главой КФХ. +// * ИсторияРеквизитов - Структура - история изменения реквизитов предпринимателя. +// см. НовыйИсторияРеквизитовПредпринимателя +// * ОписаниеОшибки - Неопределено, Строка - описание возникшей ошибки. +// Для обработки ошибки на клиентской части необходимо использовать метод +// РаботаСКонтрагентамиКлиент.ОбработатьОшибку. +// * КодОКВЭД - Неопределено, Строка - устарело, следует использовать ВидДеятельности.Код, код основного +// вида деятельности по классификатору ОКВЭД. +// * ЭтоОКВЭД2 - Булево - устарело, следует использовать ВидДеятельности.Классификатор, код ОКВЭД +// приведен по классификатору редакции 2 или редакции 1. +// Функция НовыеРеквизитыПредпринимателя() РеквизитыПредпринимателя = Новый Структура; @@ -4260,6 +4288,9 @@ РеквизитыПредпринимателя.Вставить("Фамилия"); РеквизитыПредпринимателя.Вставить("Имя"); РеквизитыПредпринимателя.Вставить("Отчество"); + РеквизитыПредпринимателя.Вставить("ФамилияНаАнглийском"); + РеквизитыПредпринимателя.Вставить("ИмяНаАнглийском"); + РеквизитыПредпринимателя.Вставить("ОтчествоНаАнглийском"); РеквизитыПредпринимателя.Вставить("РегистрационныйНомер"); // Следующие свойства могут содержать Неопределено в случае отсутствия в сервисе данных. @@ -4273,14 +4304,17 @@ РеквизитыПредпринимателя.Вставить("СвидетельствоОРегистрации"); РеквизитыПредпринимателя.Вставить("ВидДеятельности"); РеквизитыПредпринимателя.Вставить("Статус"); - - РеквизитыПредпринимателя.Вставить("КодОКВЭД"); - РеквизитыПредпринимателя.Вставить("ЭтоОКВЭД2", Ложь); + РеквизитыПредпринимателя.Вставить("ЭлектроннаяПочта"); + РеквизитыПредпринимателя.Вставить("ЯвляетсяГлавойКФХ", Ложь); + РеквизитыПредпринимателя.Вставить("ЯвляетсяГлавойКФХОписание", ""); РеквизитыПредпринимателя.Вставить("ИсторияРеквизитов", НовыйИсторияРеквизитовПредпринимателя()); РеквизитыПредпринимателя.Вставить("ОписаниеОшибки"); + РеквизитыПредпринимателя.Вставить("КодОКВЭД"); + РеквизитыПредпринимателя.Вставить("ЭтоОКВЭД2", Ложь); + Возврат РеквизитыПредпринимателя; КонецФункции @@ -4416,16 +4450,32 @@ КонецФункции +// Новая таблица руководителей. +// +// Возвращаемое значение: +// ТаблицаЗначений - Новая таблица руководителей: +// * Должность - Строка - должность руководителя. +// * Фамилия - Строка - фамилия руководителя. +// * Имя - Строка - имя руководителя. +// * Отчество - Строка - отчество руководителя. +// * Представление - Строка - ФИО руководителя или представление скрытых данных о руководителях. +// * ИНН - Строка - ИНН руководителя. +// * ДатаЗаписи - Дата - дата записи о руководителе. +// * ОрганизацииГдеРуководитель - ТаблицаЗначений - сведения об организациях, где руководитель. +// * ОрганизацииГдеУчредитель - ТаблицаЗначений - сведения об организациях, где учредитель. +// * ОрганизацииГдеРуководительПоФИО - Булево - если Истина, поиск проводился по ФИО руководителя, иначе по ИНН. +// * ОрганизацииГдеУчредительПоФИО - Булево - если Истина, поиск проводился по ФИО руководителя, иначе по ИНН. +// Функция НоваяТаблицаРуководителей() Результат = Новый ТаблицаЗначений; - Результат.Колонки.Добавить("Должность" , Новый ОписаниеТипов("Строка")); - Результат.Колонки.Добавить("Фамилия" , Новый ОписаниеТипов("Строка")); - Результат.Колонки.Добавить("Имя" , Новый ОписаниеТипов("Строка")); - Результат.Колонки.Добавить("Отчество" , Новый ОписаниеТипов("Строка")); - Результат.Колонки.Добавить("Представление" , Новый ОписаниеТипов("Строка")); - Результат.Колонки.Добавить("ИНН" , Новый ОписаниеТипов("Строка")); - Результат.Колонки.Добавить("ДатаЗаписи" , Новый ОписаниеТипов("Дата")); + Результат.Колонки.Добавить("Должность", Новый ОписаниеТипов("Строка")); + Результат.Колонки.Добавить("Фамилия", Новый ОписаниеТипов("Строка")); + Результат.Колонки.Добавить("Имя", Новый ОписаниеТипов("Строка")); + Результат.Колонки.Добавить("Отчество", Новый ОписаниеТипов("Строка")); + Результат.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка")); + Результат.Колонки.Добавить("ИНН", Новый ОписаниеТипов("Строка")); + Результат.Колонки.Добавить("ДатаЗаписи", Новый ОписаниеТипов("Дата")); Результат.Колонки.Добавить("ОрганизацииГдеРуководитель"); // НоваяТаблицаОрганизации() Результат.Колонки.Добавить("ОрганизацииГдеУчредитель"); // НоваяТаблицаОрганизацииГдеУчредитель() Результат.Колонки.Добавить("ОрганизацииГдеРуководительПоФИО", Новый ОписаниеТипов("Булево")); @@ -4456,6 +4506,16 @@ КонецФункции +// Возвращает данные регистрации в ИФНС. +// +// Возвращаемое значение: +// Структура - данные регистрация в ИФНС: +// * Код - Строка, Неопределено - код налогового органа. +// * Наименование - Строка, Неопределено - наименование налогового органа. +// * ОКТМО - Строка, Неопределено - код ОКТМО налогового органа. +// * ОКАТО - Строка, Неопределено - код ОКАТО налогового органа. +// * ДатаРегистрации - Дата, Неопределено - дата постановки на учет в налоговом органе. +// Функция НоваяРегистрацияВНалоговомОргане() Результат = Новый Структура; @@ -4468,6 +4528,15 @@ КонецФункции +// Возвращает данные о регистрации в ПФР. +// +// Возвращаемое значение: +// Структура - данные регистрации в ПФР: +// * РегистрационныйНомерПФР - Строка, Неопределено - регистрационный номер юридического лица в ПФР. +// * КодОрганаПФР - Строка, Неопределено - код органа ПФР. +// * НаименованиеОрганаПФР - Строка, Неопределено - наименование органа ПФР. +// * ДатаРегистрации - Дата, Неопределено - дата постановки на учет в ПФР. +// Функция НоваяРегистрацияВПенсионномФонде() Результат = Новый Структура; @@ -4479,6 +4548,16 @@ КонецФункции +// Возвращает данные о регистрации в ФСС. +// +// Возвращаемое значение: +// Структура - данные регистрации в ФСС: +// * РегистрационныйНомерФСС - Строка, Неопределено - регистрационный номер юридического лица в ФСС. +// * КодПодчиненности - Строка, Неопределено - код подчиненности органа ФСС. +// * КодОрганаФСС - Строка, Неопределено - код органа ФСС. +// * НаименованиеОрганаФСС - Строка, Неопределено - наименование органа ФСС. +// * ДатаРегистрации - Дата, Неопределено - дата постановки на учет в ФСС. +// Функция НоваяРегистрацияВФСС() Результат = Новый Структура; @@ -4491,6 +4570,15 @@ КонецФункции +// Возвращает данные о регистрации в СФР. +// +// Возвращаемое значение: +// Структура - данные регистрации в СФР: +// * РегистрационныйНомерСФР - Строка, Неопределено - регистрационный номер юридического лица в СФР. +// * КодОрганаСФР - Строка, Неопределено - код органа СФР. +// * НаименованиеОрганаСФР - Строка, Неопределено - наименование органа СФР. +// * ДатаРегистрации - Дата, Неопределено - дата постановки на учет в СФР. +// Функция НоваяРегистрацияВСФР() Результат = Новый Структура; @@ -4512,6 +4600,22 @@ КонецФункции +// Возвращает описание полученных видов деятельности. +// +// Возвращаемое значение: +// ТаблицаЗначений - информация о видах деятельности: +// * Код - Строка - код вида деятельности; +// * Наименование - Строка - наименование вида деятельности; +// * Классификатор - Строка - тип классификатор экономической деятельности, согласно которому указаны код и наименование; +// Значения: "ОКВЭД", "ОКВЭД2" +// * КодОКВЭД - Строка - код вида деятельности по классификатору ОКВЭД. +// Устарело, следует использовать Код. +// * НаименованиеОКВЭД - Строка - наименование вида деятельности по ОКВЭД, +// сервисом не поставляется, должно заполняться из переопределяемого кода. +// Устарело, следует использовать Наименование. +// * ЭтоОКВЭД2 - Булево - код приведен по классификатору редакции 2 или редакции 1. +// Устарело, следует использовать Классификатор. +// Функция НоваяТаблицаВидыДеятельности() Результат = Новый ТаблицаЗначений; @@ -4525,17 +4629,36 @@ Результат.Колонки.Добавить("ЭтоОКВЭД2", Новый ОписаниеТипов("Булево")); Возврат Результат; -КонецФункции +КонецФункции +// Возвращает таблицу для описания данных лицензии. +// +// Возвращаемое значение: +// ТаблицаЗначений - данные о полученных лицензиях: +// * Лицензия - Строка - наименование лицензии; +// * ОписаниеЛицензии - Строка - подробное описание лицензии; +// * НомерЛицензии - Строка - номер лицензии; +// * НомерЛицензииВЕдиномРеестре - Строка - номер лицензии, присвоенный в Едином реестре учета лицензий. +// Функция НоваяТаблицаЛицензии() Результат = Новый ТаблицаЗначений; - Результат.Колонки.Добавить("Лицензия", Новый ОписаниеТипов("Строка")); - Результат.Колонки.Добавить("ОписаниеЛицензии", Новый ОписаниеТипов("Строка")); + Результат.Колонки.Добавить("Лицензия", Новый ОписаниеТипов("Строка")); + Результат.Колонки.Добавить("ОписаниеЛицензии", Новый ОписаниеТипов("Строка")); + Результат.Колонки.Добавить("НомерЛицензии", Новый ОписаниеТипов("Строка")); + Результат.Колонки.Добавить("НомерЛицензииВЕдиномРеестре", Новый ОписаниеТипов("Строка")); Возврат Результат; -КонецФункции +КонецФункции +// Возвращает описание изменений в реестре по лицу. +// +// Возвращаемое значение: +// ТаблицаЗначений - данные об изменениях в реестре по этому лицу: +// * ДатаИзменения - Дата - дата внесения изменения. +// * ГосударственныйОрган - Строка - орган, который внес изменение. +// * ОписаниеИзменения - Строка - описание изменения; +// Функция НоваяТаблицаИзмененияВРеестре() Результат = Новый ТаблицаЗначений; @@ -4544,7 +4667,7 @@ Результат.Колонки.Добавить("ОписаниеИзменения", Новый ОписаниеТипов("Строка")); Возврат Результат; -КонецФункции +КонецФункции Функция НоваяТаблицаПодразделения() @@ -4552,8 +4675,17 @@ Результат.Колонки.Добавить("ОписаниеПодразделения", Новый ОписаниеТипов("Строка")); Возврат Результат; -КонецФункции +КонецФункции +// Возвращает описание данных об организациях. +// +// Возвращаемое значение: +// ТаблицаЗначений - данные об организациях: +// * НаименованиеОрганизации - Строка - наименование организации. +// * ИНН - Строка - ИНН организации. +// * КодСтатуса - Строка - код текущего статуса организации. +// * НаименованиеСтатуса - Строка - наименование текущего статуса организации. +// Функция НоваяТаблицаОрганизации() Результат = Новый ТаблицаЗначений; @@ -4563,12 +4695,23 @@ Результат.Колонки.Добавить("НаименованиеСтатуса", Новый ОписаниеТипов("Строка")); Возврат Результат; -КонецФункции +КонецФункции +// Возвращает описание данных организаций, где физическое лицо является учредителем. +// +// Возвращаемое значение: +// ТаблицаЗначений - описание данных организаций, где физическое лицо является учредителем: +// * НаименованиеОрганизации - Строка - наименование организации. +// * ИНН - Строка - ИНН организации. +// * КодСтатуса - Строка - код текущего статуса организации. +// * НаименованиеСтатуса - Строка - наименование текущего статуса организации. +// * ПроцентКапитала - Число - процент в уставном капитале. +// * СуммаКапитала - Число - сумма взноса в уставный капитал. +// Функция НоваяТаблицаОрганизацииГдеУчредитель() Результат = Новый ТаблицаЗначений; - Результат.Колонки.Добавить("ИНН", Новый ОписаниеТипов("Строка")); + Результат.Колонки.Добавить("ИНН", Новый ОписаниеТипов("Строка")); Результат.Колонки.Добавить("НаименованиеОрганизации", Новый ОписаниеТипов("Строка")); Результат.Колонки.Добавить("КодСтатуса", Новый ОписаниеТипов("Строка")); Результат.Колонки.Добавить("НаименованиеСтатуса", Новый ОписаниеТипов("Строка")); @@ -4576,7 +4719,7 @@ Результат.Колонки.Добавить("СуммаКапитала", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15, 2))); Возврат Результат; -КонецФункции +КонецФункции Функция НоваяТаблицаУчредители() @@ -4611,7 +4754,7 @@ Результат.Колонки.Добавить("Значение", Новый ОписаниеТипов("Число")); Возврат Результат; -КонецФункции +КонецФункции Функция НоваяТаблицаПроверкиКонтролирующимиОрганами() @@ -4640,7 +4783,7 @@ Результат.Колонки.Добавить("Исполнение", Новый ОписаниеТипов("Строка")); Возврат Результат; -КонецФункции +КонецФункции Функция НовыйСведенияОбИностранномЮридическомЛице() @@ -4679,6 +4822,52 @@ КонецФункции +Функция НовыеДанныеПравопреемников() + + Результат = Новый Структура; + Результат.Вставить("СкрытыеДанные", Ложь); + Результат.Вставить("ПредставлениеСкрытыхДанных", ""); + Результат.Вставить("Правопреемники", Новый Массив); + + Возврат Результат; + +КонецФункции + +Функция НовыеДанныеПравопредшественников() + + Результат = Новый Структура; + Результат.Вставить("СкрытыеДанные", Ложь); + Результат.Вставить("ПредставлениеСкрытыхДанных", ""); + Результат.Вставить("Правопредшественники", Новый Массив); + + Возврат Результат; + +КонецФункции + +Функция НовыеДанныеПравопреемника() + + Результат = Новый Структура; + Результат.Вставить("ИНН"); + Результат.Вставить("Наименование"); + Результат.Вставить("СкрытыеДанные", Ложь); + Результат.Вставить("ПредставлениеСкрытыхДанных"); + + Возврат Результат; + +КонецФункции + +Функция НовыеДанныеПравопредшественника() + + Результат = Новый Структура; + Результат.Вставить("ИНН"); + Результат.Вставить("Наименование"); + Результат.Вставить("СкрытыеДанные", Ложь); + Результат.Вставить("ПредставлениеСкрытыхДанных"); + + Возврат Результат; + +КонецФункции + #КонецОбласти #Область ЗаполнениеРеквизитов @@ -4740,21 +4929,18 @@ РеквизитыЮридическогоЛица.КПП = ЗначениеKpp.Получить("value"); КонецЕсли; - РеквизитыЮридическогоЛица.ДатаРегистрации = ДатаИзJSON(ДанныеЮридическогоЛица.Получить("registrationDate")); - ДатаПрекращенияДеятельности = ДанныеЮридическогоЛица.Получить("terminationDate"); - Если ДатаПрекращенияДеятельности <> Неопределено Тогда - РеквизитыЮридическогоЛица.ДатаПрекращенияДеятельности = ДатаИзJSON(ДатаПрекращенияДеятельности); - КонецЕсли; + РеквизитыЮридическогоЛица.ДатаРегистрации = ДатаИзJSON( + ДанныеЮридическогоЛица.Получить("registrationDate")); + РеквизитыЮридическогоЛица.ДатаПрекращенияДеятельности = ДатаИзJSON( + ДанныеЮридическогоЛица.Получить("terminationDate")); - НомерТиповогоУстава = ДанныеЮридическогоЛица.Получить("standardCharterNumber"); - Если НомерТиповогоУстава <> Неопределено Тогда - РеквизитыЮридическогоЛица.НомерТиповогоУстава = НомерТиповогоУстава; - КонецЕсли; + РеквизитыЮридическогоЛица.НомерТиповогоУстава = ДанныеЮридическогоЛица.Получить("standardCharterNumber"); ЗаполнитьНаименованияЮридическогоЛица(ДанныеЮридическогоЛица.Получить("name"), РеквизитыЮридическогоЛица); ЗаполнитьКодОКВЭД(ДанныеЮридическогоЛица, РеквизитыЮридическогоЛица); ЗаполнитьВидДеятельности(ДанныеЮридическогоЛица, РеквизитыЮридическогоЛица); ЗаполнитьЮридическийАдрес(ДанныеЮридическогоЛица.Получить("address"), РеквизитыЮридическогоЛица); + ЗаполнитьЭлектроннуюПочту(ДанныеЮридическогоЛица.Получить("email"), РеквизитыЮридическогоЛица); ЗаполнитьРегистрациюВНалоговомОргане(ДанныеЮридическогоЛица, РеквизитыЮридическогоЛица); ЗаполнитьРеквизитыПенсионногоФонда(ДанныеЮридическогоЛица, РеквизитыЮридическогоЛица); ЗаполнитьРеквизитыФондаСоциальногоСтрахования(ДанныеЮридическогоЛица, РеквизитыЮридическогоЛица); @@ -4816,16 +5002,8 @@ Реквизиты.НаименованиеСокращенное = СокрЛП(Строка(НаименованиеJSON.Получить("shortName"))); Реквизиты.НаименованиеПолноеЕГРЮЛ = НаименованиеJSON.Получить("fullNameFromEgrul"); Реквизиты.НаименованиеСокращенноеЕГРЮЛ = НаименованиеJSON.Получить("shortNameFromEgrul"); - - НаименованиеСокращенноеНаАнглийском = НаименованиеJSON.Получить("shortEnNameFromEgrul"); - Если НаименованиеСокращенноеНаАнглийском <> Неопределено Тогда - Реквизиты.НаименованиеСокращенноеНаАнглийском = НаименованиеСокращенноеНаАнглийском; - КонецЕсли; - - НаименованиеПолноеНаАнглийском = НаименованиеJSON.Получить("fullEnNameFromEgrul"); - Если НаименованиеПолноеНаАнглийском <> Неопределено Тогда - Реквизиты.НаименованиеПолноеНаАнглийском = НаименованиеПолноеНаАнглийском; - КонецЕсли; + Реквизиты.НаименованиеСокращенноеНаАнглийском = НаименованиеJSON.Получить("shortEnNameFromEgrul"); + Реквизиты.НаименованиеПолноеНаАнглийском = НаименованиеJSON.Получить("fullEnNameFromEgrul"); Реквизиты.ПравоваяФорма = НаименованиеJSON.Получить("organizationForm"); @@ -4956,6 +5134,16 @@ КонецПроцедуры +// Возвращает описание вида деятельности. +// +// Возвращаемое значение: +// Структура - Новый описание вида деятельности: +// * Код - Строка - код вида деятельности; +// * Наименование - Строка- наименование вида деятельности; +// * Классификатор - Строка - тип классификатор экономической деятельности, +// согласно которому указаны код и наименование; +// Значения: "ОКВЭД", "ОКВЭД2" +// Функция НовыйОписаниеВидаДеятельности() Результат = Новый Структура; @@ -5019,14 +5207,19 @@ Для Каждого ТекущееLicenseInfos Из ЗначениеLicenseInfos Цикл НоваяСтрока = ИнформацияОСвязях.Лицензии.Добавить(); + НоваяСтрока.НомерЛицензии = ТекущееLicenseInfos.Получить("number"); + НоваяСтрока.НомерЛицензииВЕдиномРеестре = ТекущееLicenseInfos.Получить("erulNumber"); + НомерЛицензии = ?(ПустаяСтрока(НоваяСтрока.НомерЛицензии), + НоваяСтрока.НомерЛицензииВЕдиномРеестре, + НоваяСтрока.НомерЛицензии); НоваяСтрока.Лицензия = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru='%1 от %2'"), - ТекущееLicenseInfos.Получить("number"), + НомерЛицензии, Формат(ДатаИзJSON(ТекущееLicenseInfos.Получить("date")), "ДЛФ=D")); ЗначениеActivityTypes = ТекущееLicenseInfos.Получить("activityTypes"); Если ТипЗнч(ЗначениеActivityTypes) = Тип("Массив") Тогда ОписаниеЛицензии = ""; - Для каждого ТекущееActivityTypes Из ЗначениеActivityTypes Цикл + Для Каждого ТекущееActivityTypes Из ЗначениеActivityTypes Цикл ОписаниеЛицензии = ОписаниеЛицензии + ?(ПустаяСтрока(ОписаниеЛицензии), "", ", ") + ТекущееActivityTypes; КонецЦикла; НоваяСтрока.ОписаниеЛицензии = ОписаниеЛицензии; @@ -5107,7 +5300,7 @@ Возврат; КонецЕсли; - Для каждого ТекущееFoundedCorporations Из ЗначениеFoundedCorporations Цикл + Для Каждого ТекущееFoundedCorporations Из ЗначениеFoundedCorporations Цикл ЗаполнитьСтрокуОбУчредителе(ТекущееFoundedCorporations, ИнформацияОСвязях.УчрежденныеФирмы); КонецЦикла; @@ -5159,9 +5352,32 @@ КонецПроцедуры -Процедура ЗаполнитьИнформациюОбУставномКапитале(ОбъектXDTO, ИнформацияОСвязях) +Процедура ЗаполнитьИнформациюОДействующихОтИмениЮридическогоЛица(ТелоОтветаОбъект, ИнформацияОСвязях) - ЗначениеAuthorizedCapital = ОбъектXDTO.Получить("authorizedCapital"); + ЗначенияManagementOrganizations = ТелоОтветаОбъект.Получить("managementOrganizations"); + Если ЗначенияManagementOrganizations = Неопределено Тогда + Возврат; + КонецЕсли; + + ДействующиеОтИмениЮридическогоЛица = Новый Массив; + Для Каждого ЗначениеManagementOrganizations Из ЗначенияManagementOrganizations Цикл + + ДействующийОтИмениЮридическогоЛица = Новый Структура; + ДействующийОтИмениЮридическогоЛица.Вставить("ИНН", ЗначениеManagementOrganizations.Получить("inn")); + ДействующийОтИмениЮридическогоЛица.Вставить("ОГРН", ЗначениеManagementOrganizations.Получить("ogrn")); + ДействующийОтИмениЮридическогоЛица.Вставить("Наименование", ЗначениеManagementOrganizations.Получить("fullName")); + + ДействующиеОтИмениЮридическогоЛица.Добавить(ДействующийОтИмениЮридическогоЛица); + + КонецЦикла; + + ИнформацияОСвязях.ДействующиеОтИмениЮридическогоЛица = ДействующиеОтИмениЮридическогоЛица; + +КонецПроцедуры + +Процедура ЗаполнитьИнформациюОбУставномКапитале(ТелоОтветаОбъект, ИнформацияОСвязях) + + ЗначениеAuthorizedCapital = ТелоОтветаОбъект.Получить("authorizedCapital"); Если ЗначениеAuthorizedCapital <> Неопределено Тогда ЗначениеAuthorizedCapitalValue = ЗначениеAuthorizedCapital.Получить("value"); Если ЗначениеAuthorizedCapitalValue <> Неопределено Тогда @@ -5177,6 +5393,102 @@ КонецПроцедуры +Процедура ЗаполнитьИнформациюОСтатусеМКФ(ТелоОтветаОбъект, ИнформацияОСвязях) + + ИнформацияОСвязях.СтатусМКФ = ТелоОтветаОбъект.Получить("registrationInfoInternationalStatus"); + +КонецПроцедуры + +Процедура ЗаполнитьИнформациюОКорпоративномДоговоре(ТелоОтветаОбъект, ИнформацияОСвязях) + + ЗначениеКорпоративныйДоговор = ТелоОтветаОбъект.Получить("corporateAgreements"); + Если ЗначениеКорпоративныйДоговор <> Неопределено Тогда + Тип = ЗначениеКорпоративныйДоговор[0].Получить("type"); + Если Тип = "1" Тогда + ИнформацияОСвязях.КорпоративныйДоговор = НСтр("ru='Корпоративным договором предусмотрен объем правомочий участников хозяйственного общества непропорционально размерам принадлежащих им долей в уставном капитале хозяйственного общества'"); + ИначеЕсли Тип = "2" Тогда + ИнформацияОСвязях.КорпоративныйДоговор = НСтр("ru='Корпоративным договором предусмотрены ограничения и условия отчуждения долей (акций)'"); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +Процедура ЗаполнитьИнформациюОДержателеРеестраАкционеров(ТелоОтветаОбъект, ИнформацияОСвязях) + + ДержательРеестраАкционеров = ТелоОтветаОбъект.Получить("shareholdersRegisterHolder"); + Если ДержательРеестраАкционеров <> Неопределено Тогда + ДанныеОДержателе = Новый Структура; + ДанныеОДержателе.Вставить("ОГРН", ДержательРеестраАкционеров.Получить("holderOgrn")); + ДанныеОДержателе.Вставить("ИНН", ДержательРеестраАкционеров.Получить("holderInn")); + ДанныеОДержателе.Вставить("Наименование", ДержательРеестраАкционеров.Получить("holderName")); + ИнформацияОСвязях.ДержательРеестраАкционеров = ДанныеОДержателе; + КонецЕсли; + +КонецПроцедуры + +Процедура ЗаполнитьИнформациюОПравопреемниках(ТелоОтветаОбъект, ИнформацияОСвязях) + + ДанныеОПравопреемниках = ТелоОтветаОбъект.Получить("legalSuccessorInfos"); + Если ДанныеОПравопреемниках = Неопределено Тогда + Возврат; + КонецЕсли; + + ОткрытыеДанные = Ложь; + Правопреемники = Новый Массив; + Для Каждого ДанныеОПравопреемнике Из ДанныеОПравопреемниках Цикл + Правопреемник = НовыеДанныеПравопреемника(); + ПредставлениеСкрытыхДанных = ДанныеОПравопреемнике.Получить("accessRestriction"); + Если ПредставлениеСкрытыхДанных = Неопределено Тогда + Правопреемник.ИНН = ДанныеОПравопреемнике.Получить("inn"); + Правопреемник.Наименование = ДанныеОПравопреемнике.Получить("fullName"); + Иначе + Правопреемник.СкрытыеДанные = Истина; + Правопреемник.ПредставлениеСкрытыхДанных = ПредставлениеСкрытыхДанных; + КонецЕсли; + Правопреемники.Добавить(Правопреемник); + ОткрытыеДанные = ОткрытыеДанные Или Не Правопреемник.СкрытыеДанные + КонецЦикла; + ИнформацияОСвязях.ДанныеПравопреемников.Правопреемники = Правопреемники; + + Если Не ОткрытыеДанные Тогда + ИнформацияОСвязях.ДанныеПравопреемников.СкрытыеДанные = Истина; + ИнформацияОСвязях.ДанныеПравопреемников.ПредставлениеСкрытыхДанных = Правопреемники[0].ПредставлениеСкрытыхДанных; + КонецЕсли; + +КонецПроцедуры + +Процедура ЗаполнитьИнформациюОПравопредшественниках(ТелоОтветаОбъект, ИнформацияОСвязях) + + ДанныеОПравопредшественниках = ТелоОтветаОбъект.Получить("legalPredecessorInfos"); + Если ДанныеОПравопредшественниках = Неопределено Тогда + Возврат; + КонецЕсли; + + ОткрытыеДанные = Ложь; + Правопредшественники = Новый Массив; + Для Каждого ДанныеОПравопредшественнике Из ДанныеОПравопредшественниках Цикл + Правопредшественник = НовыеДанныеПравопредшественника(); + ПредставлениеСкрытыхДанных = ДанныеОПравопредшественнике.Получить("accessRestriction"); + Если ПредставлениеСкрытыхДанных = Неопределено Тогда + Правопредшественник.ИНН = ДанныеОПравопредшественнике.Получить("inn"); + Правопредшественник.Наименование = ДанныеОПравопредшественнике.Получить("fullName"); + Иначе + Правопредшественник.СкрытыеДанные = Истина; + Правопредшественник.ПредставлениеСкрытыхДанных = ПредставлениеСкрытыхДанных; + КонецЕсли; + Правопредшественники.Добавить(Правопредшественник); + ОткрытыеДанные = ОткрытыеДанные Или Не Правопредшественник.СкрытыеДанные + КонецЦикла; + ИнформацияОСвязях.ДанныеПравопредшественников.Правопредшественники = Правопредшественники; + + Если Не ОткрытыеДанные Тогда + ИнформацияОСвязях.ДанныеПравопредшественников.СкрытыеДанные = Истина; + ИнформацияОСвязях.ДанныеПравопредшественников.ПредставлениеСкрытыхДанных = + Правопредшественники[0].ПредставлениеСкрытыхДанных; + КонецЕсли; + +КонецПроцедуры + Процедура ЗаполнитьИнформациюОСтатусе(ТелоОтветаОбъект, Данные) ЗначениеStatus = ТелоОтветаОбъект.Получить("status"); @@ -5351,6 +5663,7 @@ ЗаполнитьРеквизитыСФР(ТелоОтветаОбъект, Результат); ЗаполнитьСвидетельствоОРегистрации(ТелоОтветаОбъект, Результат); ЗаполнитьИнформациюОСтатусеСтруктура(ТелоОтветаОбъект.Получить("registrationInfo"), Результат); + ЗаполнитьЭлектроннуюПочту(ТелоОтветаОбъект.Получить("email"), Результат); ЗаполнитьИсториюРеквизитовПредпринимателя(ТелоОтветаОбъект, Результат); КонецПроцедуры @@ -5365,6 +5678,9 @@ Реквизиты.Фамилия = ЗначениеPerson.Получить("lastName"); Реквизиты.Имя = ЗначениеPerson.Получить("name"); Реквизиты.Отчество = ЗначениеPerson.Получить("patronymic"); + Реквизиты.ФамилияНаАнглийском = ЗначениеPerson.Получить("lastNameEn"); + Реквизиты.ИмяНаАнглийском = ЗначениеPerson.Получить("nameEn"); + Реквизиты.ОтчествоНаАнглийском = ЗначениеPerson.Получить("patronymicEn"); ЗначениеGender = ЗначениеPerson.Получить("gender"); Если ЗначениеGender = "женский" Тогда Реквизиты.Пол = "2"; @@ -5394,6 +5710,11 @@ КонецЕсли; Реквизиты.ВидИП = ВидИП; + ЗначениеFarmHeadStatus = ТелоОтветаОбъект.Получить("farmHeadStatus"); + Если ЗначениеFarmHeadStatus <> Неопределено Тогда + Реквизиты.ЯвляетсяГлавойКФХ = Истина; + Реквизиты.ЯвляетсяГлавойКФХОписание = ЗначениеFarmHeadStatus; + КонецЕсли; Если ВидИП = "Индивидуальный предприниматель" Тогда Реквизиты.НаименованиеПолное = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( @@ -5455,7 +5776,7 @@ Если Свидетельство.Дата > '00010101' Тогда Реквизиты.СвидетельствоОРегистрации = Свидетельство; - КонецЕсли + КонецЕсли; КонецПроцедуры @@ -5832,6 +6153,12 @@ КонецФункции +Процедура ЗаполнитьЭлектроннуюПочту(ЭлектроннаяПочта, Реквизиты) + + Реквизиты.ЭлектроннаяПочта = ЭлектроннаяПочта; + +КонецПроцедуры + Процедура ЗаполнитьСведенияОРуководителях(ТелоОтветаОбъект, Реквизиты) ЗначениеHeadPersonInfo = ТелоОтветаОбъект.Получить("headPersonInfo"); @@ -5886,6 +6213,12 @@ КонецПроцедуры +Процедура ЗаполнитьВидПолномочий(ТелоОтветаОбъект, Реквизиты) + + Реквизиты.ВидПолномочий = ТелоОтветаОбъект.Получить("powersType"); + +КонецПроцедуры + Процедура ЗаполнитьСведенияОПодразделениях(ТелоОтветаОбъект, Реквизиты) ДанныеПодразделений = ТелоОтветаОбъект.Получить("unitInfos"); @@ -5928,13 +6261,28 @@ КонецПроцедуры +// Новый данные подразделения. +// +// Возвращаемое значение: +// Структура - Новый данные подразделения: +// * ИНН - Строка - ИНН юридического лица +// * Наименование - Строка - наименование подразделения +// * Идентификатор - Строка, Неопределено - идентификатор подразделения в сервисе +// * ЮридическийАдрес - Неопределено, Структура - данные о юридическом адресе: +// ** КонтактнаяИнформация - Строка - данные в формате JSON для заполнения реквизита +// "Значение" контактной информации в табличной части КонтактнаяИнформация объекта +// (см. описание подсистемы "Контактная информация" Библиотеки стандартных подсистем). +// ** Представление - Строка - представление адреса. +// ** Комментарий - Строка, Неопределено - произвольный комментарий. +// ** Корректный - Булево - адрес является корректным по данным ФИАС; +// Функция НовыйДанныеПодразделения() Результат = Новый Структура; Результат.Вставить("ИНН", ""); Результат.Вставить("Наименование", ""); - Результат.Вставить("Идентификатор", ""); - Результат.Вставить("ЮридическийАдрес", ""); + Результат.Вставить("Идентификатор"); + Результат.Вставить("ЮридическийАдрес"); Возврат Результат; @@ -6005,29 +6353,29 @@ КонецПроцедуры -Процедура ЗаполнитьИсторияКПП(ИсторияKpp, Таблица) +Процедура ЗаполнитьИсторияКПП(ИсторияКПП, Таблица) - Если ТипЗнч(ИсторияKpp) <> Тип("Массив") Тогда + Если ТипЗнч(ИсторияКПП) <> Тип("Массив") Тогда Возврат; КонецЕсли; - Для Каждого ТекущееИсторияKpp Из ИсторияKpp Цикл + Для Каждого ТекущееИсторияКПП Из ИсторияКПП Цикл НоваяСтрока = Таблица.Добавить(); - НоваяСтрока.Дата = ДатаИзJSON(ТекущееИсторияKpp.Получить("fromDate")); - НоваяСтрока.Значение = ТекущееИсторияKpp.Получить("value"); + НоваяСтрока.Дата = ДатаИзJSON(ТекущееИсторияКПП.Получить("fromDate")); + НоваяСтрока.Значение = ТекущееИсторияКПП.Получить("value"); КонецЦикла; КонецПроцедуры -Процедура ЗаполнитьИсторияНаименование(ЗначениеNames, Таблица) +Процедура ЗаполнитьИсторияНаименование(ЗначениеНаименования, Таблица) - Если ТипЗнч(ЗначениеNames) <> Тип("Массив") Тогда + Если ТипЗнч(ЗначениеНаименования) <> Тип("Массив") Тогда Возврат; КонецЕсли; - Для Каждого ЭлементСписка Из ЗначениеNames Цикл + Для Каждого ЭлементСписка Из ЗначениеНаименования Цикл НоваяСтрока = Таблица.Добавить(); НоваяСтрока.Дата = ДатаИзJSON(ЭлементСписка.Получить("fromDate")); @@ -6049,13 +6397,13 @@ КонецПроцедуры -Процедура ЗаполнитьИсторияАдрес(ЗначениеAddresses, Таблица) +Процедура ЗаполнитьИсторияАдрес(ЗначениеАдреса, Таблица) - Если ТипЗнч(ЗначениеAddresses) <> Тип("Массив") Тогда + Если ТипЗнч(ЗначениеАдреса) <> Тип("Массив") Тогда Возврат; КонецЕсли; - Для Каждого ЭлементСписка Из ЗначениеAddresses Цикл + Для Каждого ЭлементСписка Из ЗначениеАдреса Цикл НоваяСтрока = Таблица.Добавить(); НоваяСтрока.Дата = ДатаИзJSON(ЭлементСписка.Получить("fromDate")); @@ -6066,13 +6414,13 @@ КонецПроцедуры -Процедура ЗаполнитьИсторияСтатус(ЗначениеStatuses, Таблица) +Процедура ЗаполнитьИсторияСтатус(ЗначениеСтатусы, Таблица) - Если ТипЗнч(ЗначениеStatuses) <> Тип("Массив") Тогда + Если ТипЗнч(ЗначениеСтатусы) <> Тип("Массив") Тогда Возврат; КонецЕсли; - Для Каждого ЭлементСписка Из ЗначениеStatuses Цикл + Для Каждого ЭлементСписка Из ЗначениеСтатусы Цикл НоваяСтрока = Таблица.Добавить(); НоваяСтрока.Дата = ДатаИзJSON(ЭлементСписка.Получить("fromDate")); @@ -6090,13 +6438,13 @@ КонецПроцедуры -Процедура ЗаполнитьИсторияРеквизитыДиректора(ЗначениеHeadPersons, Таблица) +Процедура ЗаполнитьИсторияРеквизитыДиректора(ЗначениеРуководители, Таблица) - Если ТипЗнч(ЗначениеHeadPersons) <> Тип("Массив") Тогда + Если ТипЗнч(ЗначениеРуководители) <> Тип("Массив") Тогда Возврат; КонецЕсли; - Для Каждого ЭлементСписка Из ЗначениеHeadPersons Цикл + Для Каждого ЭлементСписка Из ЗначениеРуководители Цикл НоваяСтрока = Таблица.Добавить(); НоваяСтрока.Дата = ДатаИзJSON(ЭлементСписка.Получить("fromDate")); @@ -6130,10 +6478,14 @@ Функция ЗаполнитьСтрокуОбОрганизации(ОрганизацияОбъект, ТаблицаДанных) - РеквизитыЮЛ = НовыеРеквизитыЮридическогоЛица(); - ЗаполнитьНаименованияЮридическогоЛица(ОрганизацияОбъект.Получить("name"), РеквизитыЮЛ); + СокращенноеНаименование = Неопределено; + Наименования = ОрганизацияОбъект.Получить("name"); + Если Наименования <> Неопределено Тогда + СокращенноеНаименование = СокрЛП(Строка(Наименования.Получить("shortName"))); + КонецЕсли; + НоваяСтрока = ТаблицаДанных.Добавить(); - НоваяСтрока.НаименованиеОрганизации = РеквизитыЮЛ.НаименованиеСокращенное; + НоваяСтрока.НаименованиеОрганизации = СокращенноеНаименование; НоваяСтрока.ИНН = ОрганизацияОбъект.Получить("inn"); ЗаполнитьИнформациюОСтатусе(ОрганизацияОбъект, НоваяСтрока); Возврат НоваяСтрока; @@ -6166,30 +6518,34 @@ Завершенные, Незавершенные) - Если НЕ Завершенные И НЕ Незавершенные Тогда + Если Не Завершенные + И Не Незавершенные Тогда + Возврат; КонецЕсли; - ТолькоЗавершенные = Завершенные И НЕ Незавершенные; - ТолькоНезавершенные = НЕ Завершенные И Незавершенные; + ТолькоЗавершенные = (Завершенные И Не Незавершенные); + ТолькоНезавершенные = (Не Завершенные И Незавершенные); // Внеплановые проверки. - Если Внеплановые И ОбъектXDTO.InspectionsUnregular294 <> Неопределено Тогда - Для каждого ПроверкиЗаМесяц Из ОбъектXDTO.InspectionsUnregular294 Цикл + Если Внеплановые + И ОбъектXDTO.InspectionsUnregular294 <> Неопределено Тогда + + Для Каждого ПроверкиЗаМесяц Из ОбъектXDTO.InspectionsUnregular294 Цикл Если ПроверкиЗаМесяц.InspectionUnregular294 <> Неопределено Тогда ГодПроверки = ПроверкиЗаМесяц.YEAR; МесяцПроверки = ПроверкиЗаМесяц.MONTH; ПериодПроверки = Дата(ГодПроверки, МесяцПроверки, 1); - Для каждого СтрокаПроверки Из ПроверкиЗаМесяц.InspectionUnregular294 Цикл + Для Каждого СтрокаПроверки Из ПроверкиЗаМесяц.InspectionUnregular294 Цикл - Если НЕ ЗначениеЗаполнено(СтрокаПроверки.KO_NAME) Тогда + Если Не ЗначениеЗаполнено(СтрокаПроверки.KO_NAME) Тогда Продолжить; // Пропускаем записи с пустым контролирующим органом. КонецЕсли; Завершена = СтрокаПроверки.InspectionResult294 <> Неопределено; - Если ТолькоЗавершенные И НЕ Завершена - ИЛИ ТолькоНезавершенные И Завершена Тогда + Если ТолькоЗавершенные И Не Завершена + Или ТолькоНезавершенные И Завершена Тогда Продолжить; КонецЕсли; @@ -6202,23 +6558,28 @@ НоваяСтрока.Идентификатор = Формат(СтрокаПроверки.ERPID, "ЧГ="); НоваяСтрока.ПлановаяПроверка = Ложь; НоваяСтрока.ПериодПроверки = ПериодПроверки; - ДатаНачала = ?(ЗначениеЗаполнено(СтрокаПроверки.START_DATE), - СтрокаПроверки.START_DATE, ПериодПроверки); - ДатаКонца = ?(ЗначениеЗаполнено(СтрокаПроверки.END_DATE), - СтрокаПроверки.END_DATE, КонецМесяца(ДатаНачала)); + ДатаНачала = ?(ЗначениеЗаполнено(СтрокаПроверки.START_DATE), + СтрокаПроверки.START_DATE, + ПериодПроверки); + ДатаКонца = ?(ЗначениеЗаполнено(СтрокаПроверки.END_DATE), + СтрокаПроверки.END_DATE, + КонецМесяца(ДатаНачала)); НоваяСтрока.ДатаПроверки = ДатаНачала; - НоваяСтрока.Длительность = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='с %1 по %2'"), - Формат(ДатаНачала, "ДЛФ=D"), Формат(ДатаКонца, "ДЛФ=D")); + НоваяСтрока.Длительность = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='с %1 по %2'"), + Формат(ДатаНачала, "ДЛФ=D"), + Формат(ДатаКонца, "ДЛФ=D")); НоваяСтрока.КонтролирующийОрган = СокрЛП(СтрокаПроверки.KO_NAME); - НоваяСтрока.АдресПроверки = ?(ЗначениеЗаполнено(СтрокаПроверки.ADR_SEC_II), - СокрЛП(СтрокаПроверки.ADR_SEC_II), СокрЛП(СтрокаПроверки.ADR_SEC_I)); + НоваяСтрока.АдресПроверки = ?(ЗначениеЗаполнено(СтрокаПроверки.ADR_SEC_II), + СокрЛП(СтрокаПроверки.ADR_SEC_II), + СокрЛП(СтрокаПроверки.ADR_SEC_I)); НоваяСтрока.ЦельПроверки = СокрЛП(СтрокаПроверки.INSP_TARGET); НоваяСтрока.Нарушения = НоваяТаблицаНарушенияВыявленныеКонтролирующимиОрганами(); Если Завершена Тогда Если СтрокаПроверки.InspectionResult294.InspectionViolations294 <> Неопределено Тогда - Для каждого СтрокаНарушения Из СтрокаПроверки.InspectionResult294.InspectionViolations294 Цикл + Для Каждого СтрокаНарушения Из СтрокаПроверки.InspectionResult294.InspectionViolations294 Цикл НоваяСтрокаНарушения = НоваяСтрока.Нарушения.Добавить(); НоваяСтрокаНарушения.НомерНарушения = СтрокаНарушения.Violation_ID; НоваяСтрокаНарушения.Нарушение = СтрокаНарушения.Violation_Note; @@ -6249,21 +6610,21 @@ // Плановые проверки. Если Плановые И ОбъектXDTO.InspectionsRegular294 <> Неопределено Тогда - Для каждого ПроверкиЗаМесяц Из ОбъектXDTO.InspectionsRegular294 Цикл + Для Каждого ПроверкиЗаМесяц Из ОбъектXDTO.InspectionsRegular294 Цикл Если ПроверкиЗаМесяц.InspectionRegular294 <> Неопределено Тогда ГодПроверки = ПроверкиЗаМесяц.YEAR; МесяцПроверки = ПроверкиЗаМесяц.MONTH; ПериодПроверки = Дата(ГодПроверки, МесяцПроверки, 1); - Для каждого СтрокаПроверки Из ПроверкиЗаМесяц.InspectionRegular294 Цикл + Для Каждого СтрокаПроверки Из ПроверкиЗаМесяц.InspectionRegular294 Цикл - Если НЕ ЗначениеЗаполнено(СтрокаПроверки.KO_NAME) Тогда + Если Не ЗначениеЗаполнено(СтрокаПроверки.KO_NAME) Тогда Продолжить; // Пропускаем записи с пустым контролирующим органом. КонецЕсли; Завершена = СтрокаПроверки.InspectionResult294 <> Неопределено; - Если ТолькоЗавершенные И НЕ Завершена - ИЛИ ТолькоНезавершенные И Завершена Тогда + Если ТолькоЗавершенные И Не Завершена + Или ТолькоНезавершенные И Завершена Тогда Продолжить; КонецЕсли; @@ -6276,28 +6637,36 @@ НоваяСтрока.Идентификатор = Формат(СтрокаПроверки.ERPID, "ЧГ="); НоваяСтрока.ПлановаяПроверка = Истина; НоваяСтрока.ПериодПроверки = ПериодПроверки; - ДатаНачала = ?(ЗначениеЗаполнено(СтрокаПроверки.START_DATE), - СтрокаПроверки.START_DATE, ПериодПроверки); + ДатаНачала = ?(ЗначениеЗаполнено(СтрокаПроверки.START_DATE), + СтрокаПроверки.START_DATE, + ПериодПроверки); Если ЗначениеЗаполнено(СтрокаПроверки.DURATION_SEC_II) Тогда Длительность = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru='%1 рабочих дней'"), СтрокаПроверки.DURATION_SEC_II); + НСтр("ru='%1 рабочих дней'"), + СтрокаПроверки.DURATION_SEC_II); ИначеЕсли ЗначениеЗаполнено(СтрокаПроверки.DURATION_SEC_I) Тогда Длительность = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru='%1 рабочих часов'"), СтрокаПроверки.DURATION_SEC_I); + НСтр("ru='%1 рабочих часов'"), + СтрокаПроверки.DURATION_SEC_I); Иначе Длительность = ""; КонецЕсли; НоваяСтрока.ДатаПроверки = ДатаНачала; Если ЗначениеЗаполнено(Длительность) Тогда НоваяСтрока.Длительность = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru='с %1, %2'"), Формат(ДатаНачала, "ДЛФ=D"), Длительность); + НСтр("ru='с %1, %2'"), + Формат(ДатаНачала, "ДЛФ=D"), + Длительность); Иначе НоваяСтрока.Длительность = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru='с %1'"), Формат(ДатаНачала, "ДЛФ=D")); + НСтр("ru='с %1'"), + Формат(ДатаНачала, "ДЛФ=D")); КонецЕсли; НоваяСтрока.КонтролирующийОрган = СокрЛП(СтрокаПроверки.KO_NAME); - НоваяСтрока.АдресПроверки = ?(ЗначениеЗаполнено(СтрокаПроверки.ADR_SEC_IV), СокрЛП(СтрокаПроверки.ADR_SEC_IV), - ?(ЗначениеЗаполнено(СтрокаПроверки.ADR_SEC_III), СокрЛП(СтрокаПроверки.ADR_SEC_III), + НоваяСтрока.АдресПроверки = ?(ЗначениеЗаполнено(СтрокаПроверки.ADR_SEC_IV), + СокрЛП(СтрокаПроверки.ADR_SEC_IV), + ?(ЗначениеЗаполнено(СтрокаПроверки.ADR_SEC_III), + СокрЛП(СтрокаПроверки.ADR_SEC_III), СокрЛП(СтрокаПроверки.ADR_SEC_I))); НоваяСтрока.ЦельПроверки = СокрЛП(СтрокаПроверки.INSP_TARGET); НоваяСтрока.Нарушения = НоваяТаблицаНарушенияВыявленныеКонтролирующимиОрганами(); @@ -6305,7 +6674,7 @@ Если Завершена Тогда Если СтрокаПроверки.InspectionResult294.InspectionViolations294 <> Неопределено Тогда - Для каждого СтрокаНарушения Из СтрокаПроверки.InspectionResult294.InspectionViolations294 Цикл + Для Каждого СтрокаНарушения Из СтрокаПроверки.InspectionResult294.InspectionViolations294 Цикл НоваяСтрокаНарушения = НоваяСтрока.Нарушения.Добавить(); НоваяСтрокаНарушения.НомерНарушения = СтрокаНарушения.Violation_ID; НоваяСтрокаНарушения.Нарушение = СтрокаНарушения.Violation_Note; @@ -6369,6 +6738,13 @@ КонецПроцедуры +// Возвращает данные статуса. +// +// Возвращаемое значение: +// Структура - данные статуса: +// * Код - Строка - код статуса; +// * Наименование - Строка - наименование статуса +// Функция НовыйДанныеСтатуса() Результат = Новый Структура; @@ -6379,6 +6755,13 @@ КонецФункции +// Возвращает данные регистрирующего органа. +// +// Возвращаемое значение: +// Структура - данные регистрирующего органа: +// * Код - Строка - код органа; +// * Наименование - Строка - наименование органа; +// Функция НовыйДанныеРегистрирующегоОргана() Результат = Новый Структура; @@ -6389,6 +6772,33 @@ КонецФункции +Процедура ЗаполнитьСведенияОРегистрацииНаДеньПринятия(ТелоОтветаОбъект, Данные) + + ЗначениеRegistrationInfoIdCode = ТелоОтветаОбъект.Получить("registrationInfoIdCode"); + Если ЗначениеRegistrationInfoIdCode = Неопределено Тогда + Возврат; + КонецЕсли; + + Сведения = НовыйСведенияОРегистрацииНаДеньПринятия(); + Сведения.ИдентификационныйКод = ЗначениеRegistrationInfoIdCode; + Сведения.НаименованиеРегистрирующегоОргана = ТелоОтветаОбъект.Получить("registrationInfoInspectionName"); + Сведения.РегистрационныйНомер = ТелоОтветаОбъект.Получить("registrationInfoNumber"); + + Данные.СведенияОРегистрацииНаДеньПринятия = Сведения; + +КонецПроцедуры + +Функция НовыйСведенияОРегистрацииНаДеньПринятия() + + Результат = Новый Структура; + Результат.Вставить("ИдентификационныйКод"); + Результат.Вставить("НаименованиеРегистрирующегоОргана"); + Результат.Вставить("РегистрационныйНомер"); + + Возврат Результат; + +КонецФункции + Процедура ЗаполнитьОткрытыеГосударственныеДанныеФНС(ЗначениеOpenDataInfo, Реквизиты) Если ТипЗнч(ЗначениеOpenDataInfo) <> Тип("Массив") Тогда @@ -6504,7 +6914,7 @@ Руководитель.Вставить("Отчество", ЗначениеHeadPerson.Получить("patronymic")); Руководитель.Вставить("Представление", СокрЛП(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru='%1 %2 %3'"), + НСтр("ru='%1 %2 %3'"), Руководитель.Фамилия, Руководитель.Имя, Руководитель.Отчество))); @@ -6882,11 +7292,11 @@ Функция ВызватьОперациюSOAPСервиса(Прокси, ИмяМетода, Параметры) Если ИмяМетода = "findPfrByCode" Тогда - Возврат Прокси.findPfrByCode(Параметры[0], Параметры[1]) + Возврат Прокси.findPfrByCode(Параметры[0], Параметры[1]); ИначеЕсли ИмяМетода = "findFssByCode" Тогда - Возврат Прокси.findFssByCode(Параметры[0], Параметры[1]) + Возврат Прокси.findFssByCode(Параметры[0], Параметры[1]); ИначеЕсли ИмяМетода = "findIfnsByCode" Тогда - Возврат Прокси.findIfnsByCode(Параметры[0], Параметры[1]) + Возврат Прокси.findIfnsByCode(Параметры[0], Параметры[1]); Иначе ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Некорректное значение параметра ""Имя метода"" (%1).'"), diff --git a/Конфигурация/CommonModules/РаботаСКурсамиВалют/Ext/Module.bsl b/Конфигурация/CommonModules/РаботаСКурсамиВалют/Ext/Module.bsl index 25ca36197..fa28b16a9 100644 --- a/Конфигурация/CommonModules/РаботаСКурсамиВалют/Ext/Module.bsl +++ b/Конфигурация/CommonModules/РаботаСКурсамиВалют/Ext/Module.bsl @@ -305,6 +305,21 @@ КонецПроцедуры +// Возвращает Истина, если тип является типом денежной суммы. +// +// Параметры: +// ТипЗначения - Тип +// +// Возвращаемое значение: +// Булево +// +Функция ЭтоТипДенежнойСуммы(ТипЗначения) Экспорт + + Возврат ТипЗначения = Метаданные.ОпределяемыеТипы.ДенежнаяСуммаЛюбогоЗнака.Тип + Или ТипЗначения = Метаданные.ОпределяемыеТипы.ДенежнаяСуммаНеотрицательная.Тип; + +КонецФункции + #КонецОбласти #Область СлужебныеПроцедурыИФункции diff --git a/Конфигурация/CommonModules/РаботаСКурсамиВалютСлужебный/Ext/Module.bsl b/Конфигурация/CommonModules/РаботаСКурсамиВалютСлужебный/Ext/Module.bsl index eb20d58f8..eddaf60f2 100644 --- a/Конфигурация/CommonModules/РаботаСКурсамиВалютСлужебный/Ext/Module.bsl +++ b/Конфигурация/CommonModules/РаботаСКурсамиВалютСлужебный/Ext/Module.bsl @@ -841,4 +841,14 @@ #КонецОбласти +// См. СтандартныеПодсистемыСервер.ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод +Процедура ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод(Методы) Экспорт + + Если ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.БазоваяФункциональность") Тогда + Методы.Вставить("ОбновитьКурсыВалют"); + Методы.Вставить("КопироватьКурсыВалюты"); + КонецЕсли; + +КонецПроцедуры + #КонецОбласти \ No newline at end of file diff --git a/Конфигурация/CommonModules/РаботаСНоменклатурой/Ext/Module.bsl b/Конфигурация/CommonModules/РаботаСНоменклатурой/Ext/Module.bsl index f28171753..809b3402e 100644 --- a/Конфигурация/CommonModules/РаботаСНоменклатурой/Ext/Module.bsl +++ b/Конфигурация/CommonModules/РаботаСНоменклатурой/Ext/Module.bsl @@ -1588,6 +1588,71 @@ #КонецОбласти +#Область НациональныйКаталог + +// Определяет основные теги публикации торговых площадок. +// +// Параметры: +// ТегиПубликации - СписокЗначений из Строка - основные теги публикации. +// +Процедура ПолучитьТегиПубликацииТорговыхПлощадок(ТегиПубликации) Экспорт + + Если ПолучитьФункциональнуюОпцию("ИспользоватьСервисРаботаСНоменклатурой") Тогда + ТегиПубликации.Добавить(ТегПубликацииНациональныйКаталог(), НСтр("ru = 'Национальный каталог (#crpt)'"),, БиблиотекаКартинок.ЛоготипНациональныйКаталог48); + КонецЕсли; + +КонецПроцедуры + +// Определяет дополнительные теги публикации торговых площадок. +// +// Параметры: +// ТегиПубликации - СписокЗначений из Строка - дополнительные теги публикации. +// +Процедура ПолучитьДополнительныеТегиПубликацииТорговыхПлощадок(ТегиПубликации) Экспорт + + Если ПолучитьФункциональнуюОпцию("ИспользоватьСервисРаботаСНоменклатурой") Тогда + ТегиПубликации.Добавить(ТегПубликацииИзображенияПоУмолчанию(), НСтр("ru = 'Национальный каталог. Фотография по умолчанию (#default)'")); + ТегиПубликации.Добавить("#left", НСтр("ru = 'Национальный каталог. Фотография слева (#left)'")); + ТегиПубликации.Добавить("#right", НСтр("ru = 'Национальный каталог. Фотография справа (#right)'")); + ТегиПубликации.Добавить("#back", НСтр("ru = 'Национальный каталог. Фотография сзади (#back)'")); + ТегиПубликации.Добавить("#above", НСтр("ru = 'Национальный каталог. Фотография сверху (#above)'")); + ТегиПубликации.Добавить("#below", НСтр("ru = 'Национальный каталог. Фотография снизу (#below)'")); + ТегиПубликации.Добавить("#in_package", НСтр("ru = 'Национальный каталог. Фотография в упаковке (#in_package)'")); + ТегиПубликации.Добавить("#without_package", НСтр("ru = 'Национальный каталог. Фотография без упаковки (#without_package)'")); + ТегиПубликации.Добавить("#group_packaging", НСтр("ru = 'Национальный каталог. Фотография групповой упаковки (#group_packaging)'")); + ТегиПубликации.Добавить("#3ds", НСтр("ru = 'Национальный каталог. 3D серия (#3ds)'")); + ТегиПубликации.Добавить("#text", НСтр("ru = 'Национальный каталог. Фотография с текстом (#text)'")); + ТегиПубликации.Добавить("#marketing", НСтр("ru = 'Национальный каталог. Коммерческая фотография (#marketing)'")); + ТегиПубликации.Добавить("#undef", НСтр("ru = 'Национальный каталог. Фотография с произвольного ракурса (#undef)'")); + ТегиПубликации.Добавить("#cubi", НСтр("ru = 'Национальный каталог. Фотография измерения весогабаритных характеристик (#cubi)'")); + КонецЕсли; + +КонецПроцедуры + +// Определяет основной тег изображений Национального каталога. +// +// Возвращаемое значение: +// Строка - тег публикации. +// +Функция ТегПубликацииНациональныйКаталог() Экспорт + + Возврат "#crpt"; + +КонецФункции + +// Определяет тег основного изображений Национального каталога. +// +// Возвращаемое значение: +// Строка - тег публикации. +// +Функция ТегПубликацииИзображенияПоУмолчанию() Экспорт + + Возврат "#default"; + +КонецФункции + +#КонецОбласти + #КонецОбласти #Область СлужебныйПрограммныйИнтерфейс @@ -3684,10 +3749,8 @@ Если ОбщегоНазначения.РазделениеВключено() Тогда СостоянияСервиса.ПодключенаИнтернетПоддержка = Истина; Иначе - УстановитьПривилегированныйРежим(Истина); - ПараметрыАутентификации = ИнтернетПоддержкаПользователей.ДанныеАутентификацииПользователяИнтернетПоддержки(); - УстановитьПривилегированныйРежим(Ложь); - СостоянияСервиса.ПодключенаИнтернетПоддержка = ТипЗнч(ПараметрыАутентификации) = Тип("Структура"); + СостоянияСервиса.ПодключенаИнтернетПоддержка = + ИнтернетПоддержкаПользователей.ЗаполненыДанныеАутентификацииПользователяИнтернетПоддержки(); КонецЕсли; Если СостоянияСервиса.ПодключенаИнтернетПоддержка Тогда diff --git a/Конфигурация/CommonModules/РаботаСНоменклатуройПереопределяемый/Ext/Module.bsl b/Конфигурация/CommonModules/РаботаСНоменклатуройПереопределяемый/Ext/Module.bsl index 04217269d..d895fd4d6 100644 --- a/Конфигурация/CommonModules/РаботаСНоменклатуройПереопределяемый/Ext/Module.bsl +++ b/Конфигурация/CommonModules/РаботаСНоменклатуройПереопределяемый/Ext/Module.bsl @@ -2272,6 +2272,16 @@ #КонецОбласти +// Выполняет публикацию и проверку изображений для выгружаемых товаров. +// +// Параметры: +// Изображения - Массив из СтрокаТаблицыЗначений - проверяемые изображения. +// ПараметрыПубликации - Неопределено, Структура из КлючИЗначение - произвольные параметры публикации изображений. +// +Процедура ОпубликоватьИзображения(Изображения, ПараметрыПубликации) Экспорт + +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции diff --git a/Конфигурация/CommonModules/РаботаСНоменклатуройСлужебный/Ext/Module.bsl b/Конфигурация/CommonModules/РаботаСНоменклатуройСлужебный/Ext/Module.bsl index 2c709e9d7..39129fce0 100644 --- a/Конфигурация/CommonModules/РаботаСНоменклатуройСлужебный/Ext/Module.bsl +++ b/Конфигурация/CommonModules/РаботаСНоменклатуройСлужебный/Ext/Module.bsl @@ -8480,6 +8480,10 @@ СхемаЗапроса = Новый СхемаЗапроса; СхемаЗапроса.УстановитьТекстЗапроса(Запрос.Текст); Для каждого ЗапросПакета Из СхемаЗапроса.ПакетЗапросов Цикл + Если ТипЗнч(ЗапросПакета) <> Тип("ЗапросВыбораСхемыЗапроса") Тогда + Продолжить; + КонецЕсли; + Если ЗапросПакета.ТаблицаДляПомещения = "Товары" Тогда Для каждого КолонкаЗапроса Из ЗапросПакета.Колонки Цикл ТекстЗапросаДополнение = ТекстЗапросаДополнение + Символы.Таб + СтрШаблон("Товары.%1 КАК %1,", КолонкаЗапроса.Псевдоним) + Символы.ПС; @@ -9560,6 +9564,8 @@ ИндексыОбходаРезультатов.Вставить("ВложенияСертификатов"); ИндексыОбходаРезультатов.Вставить("СоставНаборов"); + ПараметрыПубликацииИзображений = Неопределено; + ИндексВставки = 0; Для каждого ЗапросПакета Из СхемаЗапроса.ПакетЗапросов Цикл Если ТипЗнч(ЗапросПакета) = Тип("ЗапросВыбораСхемыЗапроса") @@ -9675,8 +9681,6 @@ ДанныеКорняПакета.Вставить("Описание", "description"); ДанныеКорняПакета.Вставить("СтранаПроисхождения", "countryOfOriginCode"); - Запрос.УстановитьПараметр("ПустоеЗначениеХарактеристики", ПустоеЗначениеХарактеристики); - Запрос.УстановитьПараметр("Организация", Организация); КоэффициентПорцииПрогресса = 1; ОбработаноПорцийДанных = 0; Пока Истина Цикл @@ -10056,16 +10060,20 @@ КонецЕсли; КонецЕсли; - //Изображения + // Изображения Если ЗначениеЗаполнено(ОбходРезультатов.Изображения) Тогда ДанныеПакета = Новый СписокЗначений; - ДанныеПакета.Добавить("id", "Файл", Истина); - ДанныеПакета.Добавить("name", "Наименование", Истина); - ДанныеПакета.Добавить("link", "Гиперссылка", Истина); + ДанныеПакета.Добавить("id", "Файл", Истина); + ДанныеПакета.Добавить("name", "Наименование", Истина); + ДанныеПакета.Добавить("link", "Гиперссылка", Истина); + ДанныеПакета.Добавить("tags", "ТегиПубликации"); + ДанныеПакета.Добавить("packageId", "Упаковка"); СтрокиВложеннойТаблицы = СтрокиДополнительнойТаблицыПоНоменклатуреИХарактеристике(ОбходРезультатов.Изображения, ПоискСХарактеристикой, ПустоеЗначениеХарактеристики); - КоллекцияДанных = КоллекцияДанныхВыгрузки(СтрокиВложеннойТаблицы, ДанныеПакета); + РаботаСНоменклатуройПереопределяемый.ОпубликоватьИзображения(СтрокиВложеннойТаблицы, ПараметрыПубликацииИзображений); + КоллекцияДанных = КоллекцияДанныхВыгрузки(СтрокиВложеннойТаблицы, ДанныеПакета); + Если КоллекцияДанных.Количество() Тогда ЭлементНоменклатура.Вставить("images", КоллекцияДанных); КонецЕсли; @@ -10474,6 +10482,10 @@ СхемаЗапроса = Новый СхемаЗапроса; СхемаЗапроса.УстановитьТекстЗапроса(Запрос.Текст); Для каждого ЗапросПакета Из СхемаЗапроса.ПакетЗапросов Цикл + Если ТипЗнч(ЗапросПакета) <> Тип("ЗапросВыбораСхемыЗапроса") Тогда + Продолжить; + КонецЕсли; + Если ЗапросПакета.ТаблицаДляПомещения = "Товары" Тогда Для каждого Реквизит Из ПроверяемыеРеквизиты Цикл КолонкаЗапроса = ЗапросПакета.Колонки.Найти(Реквизит.Ключ); diff --git a/Конфигурация/CommonModules/РаботаСПочтовымиСообщениямиЛокализация/Ext/Module.bsl b/Конфигурация/CommonModules/РаботаСПочтовымиСообщениямиЛокализация/Ext/Module.bsl index e5b084072..ba3e21c09 100644 --- a/Конфигурация/CommonModules/РаботаСПочтовымиСообщениямиЛокализация/Ext/Module.bsl +++ b/Конфигурация/CommonModules/РаботаСПочтовымиСообщениямиЛокализация/Ext/Module.bsl @@ -17,8 +17,8 @@ Процедура ПриПолученииАдресовСерверовDNS(АдресаСерверовDNS, СтандартнаяОбработка) Экспорт // Локализация - АдресаСерверовDNS.Добавить("78.88.8.8"); // dns.yandex - АдресаСерверовDNS.Добавить("78.88.8.1"); // dns.yandex + АдресаСерверовDNS.Добавить("78.88.8.8"); // dns.yandex - Не нарушает безопасность информации, так как ip-адрес публичный и его недоступность не блокирует работу приложения. + АдресаСерверовDNS.Добавить("78.88.8.1"); // dns.yandex - Не нарушает безопасность информации, так как ip-адрес публичный и его недоступность не блокирует работу приложения. СтандартнаяОбработка = Ложь; // Конец Локализация diff --git a/Конфигурация/CommonModules/РаботаСПочтовымиСообщениямиСлужебный/Ext/Module.bsl b/Конфигурация/CommonModules/РаботаСПочтовымиСообщениямиСлужебный/Ext/Module.bsl index fa4fd50d8..05d7b1aef 100644 --- a/Конфигурация/CommonModules/РаботаСПочтовымиСообщениямиСлужебный/Ext/Module.bsl +++ b/Конфигурация/CommonModules/РаботаСПочтовымиСообщениямиСлужебный/Ext/Module.bsl @@ -2997,8 +2997,8 @@ Возврат Результат; КонецЕсли; - Результат.Добавить("8.8.8.8"); // dns.google - Результат.Добавить("8.8.4.4"); // dns.google + Результат.Добавить("8.8.8.8"); // dns.google - Не нарушает безопасность информации, так как ip-адрес публичный и его недоступность не блокирует работу приложения. + Результат.Добавить("8.8.4.4"); // dns.google - Не нарушает безопасность информации, так как ip-адрес публичный и его недоступность не блокирует работу приложения. Возврат Результат; @@ -3116,4 +3116,13 @@ КонецФункции +// См. СтандартныеПодсистемыСервер.ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод +Процедура ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод(Методы) Экспорт + + Если ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.БазоваяФункциональность") Тогда + Методы.Вставить("ПолучениеСтатусовЭлектронныхПисем"); + КонецЕсли; + +КонецПроцедуры + #КонецОбласти \ No newline at end of file diff --git a/Конфигурация/CommonModules/РаботаСПочтовымиСообщениямиСлужебныйКлиентСервер/Ext/Module.bsl b/Конфигурация/CommonModules/РаботаСПочтовымиСообщениямиСлужебныйКлиентСервер/Ext/Module.bsl index e1a8b9184..3f2a3f625 100644 --- a/Конфигурация/CommonModules/РаботаСПочтовымиСообщениямиСлужебныйКлиентСервер/Ext/Module.bsl +++ b/Конфигурация/CommonModules/РаботаСПочтовымиСообщениямиСлужебныйКлиентСервер/Ext/Module.bsl @@ -32,10 +32,6 @@ КонецФункции -#КонецОбласти - -#Область СлужебныеПроцедурыИФункции - Функция ИмяСерверногоОповещения() Экспорт Возврат "СтандартныеПодсистемы.РаботаСПочтовымиСообщениями"; diff --git a/Конфигурация/CommonModules/РаботаСРезультатамиОбмена/Ext/Module.bsl b/Конфигурация/CommonModules/РаботаСРезультатамиОбмена/Ext/Module.bsl index 3efe9f807..3b6a2d47e 100644 --- a/Конфигурация/CommonModules/РаботаСРезультатамиОбмена/Ext/Module.bsl +++ b/Конфигурация/CommonModules/РаботаСРезультатамиОбмена/Ext/Module.bsl @@ -145,8 +145,8 @@ Процедура ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод(Методы) Экспорт Методы.Вставить("ПроверитьВозможностьЗагрузкиДругихОбъектовПослеУстановкиСоответствия", Истина); - Методы.Вставить("ПроверитьКорректностьЗаписейВРегистрахПообъектногоОбмена", Истина); - Методы.Вставить("ЗагрузитьДанныеДанныеБезОбрабатывающихЗаданий", Истина); + Методы.Вставить("ПроверитьКорректностьЗаписейВРегистрахПообъектногоОбмена", Ложь); + Методы.Вставить("ЗагрузитьДанныеДанныеБезОбрабатывающихЗаданий", Ложь); Методы.Вставить("ОбработатьПереданныеНаЗагрузкуОбъекты", Истина); Методы.Вставить("УдалитьЗаписиОтклоненныхПользователемОбъектов", Истина); diff --git a/Конфигурация/CommonModules/РаботаСФайлами/Ext/Module.bsl b/Конфигурация/CommonModules/РаботаСФайлами/Ext/Module.bsl index c521dc0b9..f566eca5b 100644 --- a/Конфигурация/CommonModules/РаботаСФайлами/Ext/Module.bsl +++ b/Конфигурация/CommonModules/РаботаСФайлами/Ext/Module.bsl @@ -31,9 +31,8 @@ // КонецЕсли; // Функция ДвоичныеДанныеФайла(Знач ПрисоединенныйФайл, Знач ВызыватьИсключение = Истина) Экспорт - - Возврат РаботаСФайламиСлужебный.ДвоичныеДанныеФайла(ПрисоединенныйФайл, ВызыватьИсключение); - + Результат = РаботаСФайламиСлужебный.ДвоичныеДанныеФайла(ПрисоединенныйФайл, ВызыватьИсключение); + Возврат Результат; КонецФункции // Возвращает двоичные данные файла. @@ -72,221 +71,47 @@ КатегорияОшибки.ОшибкаКонфигурации); КонецЕсли; КонецЦикла; - - РазрешенныеПрисоединенныеФайлы = Новый Массив; - ЕстьПраваНаОбъекты = ОбщегоНазначения.ЗначенияРеквизитовОбъектов(ПрисоединенныеФайлы, "Ссылка", Истина); - Для Каждого ЕстьПраваНаОбъект Из ЕстьПраваНаОбъекты Цикл - РазрешенныеПрисоединенныеФайлы.Добавить(ЕстьПраваНаОбъект.Ключ); - КонецЦикла; - - МетаданныеОбъектаФайла = Метаданные.НайтиПоТипу(ТипФайла); - + + МетаданныеОбъектаФайла = ПрисоединенныеФайлы[0].Метаданные(); + ПолноеИмя = МетаданныеОбъектаФайла.ПолноеИмя(); ЕстьРеквизитТекущаяВерсия = ОбщегоНазначения.ЕстьРеквизитОбъекта("ВладелецФайла", МетаданныеОбъектаФайла) - И ОбщегоНазначения.ЕстьРеквизитОбъекта("ТекущаяВерсия", МетаданныеОбъектаФайла); - + И ОбщегоНазначения.ЕстьРеквизитОбъекта("ТекущаяВерсия", МетаданныеОбъектаФайла); + + РеквизитыРазрешенныхПрисоединенныхФайлов = РеквизитыРазрешенныхПрисоединенныхФайлов(ЕстьРеквизитТекущаяВерсия, ПолноеИмя, ПрисоединенныеФайлы); + РазрешенныеПрисоединенныеФайлы = Новый Массив; + Для Каждого КлючИЗначение Из РеквизитыРазрешенныхПрисоединенныхФайлов Цикл + РазрешенныеПрисоединенныеФайлы.Добавить(КлючИЗначение.Ключ); + КонецЦикла; + УстановитьОтключениеБезопасногоРежима(Истина); УстановитьПривилегированныйРежим(Истина); - Если ЕстьРеквизитТекущаяВерсия Тогда - Если РаботаСФайламиСлужебныйПовтИсп.ДедупликацияВыполнена() Тогда - ТекстЗапроса = - "ВЫБРАТЬ - | ПрисоединенныеФайлы.Ссылка КАК Ссылка, - | ПрисоединенныеФайлы.ТипХраненияФайла КАК ТипХраненияФайла, - | ПрисоединенныеФайлы.Том КАК Том, - | ПрисоединенныеФайлы.ПометкаУдаления КАК ПометкаУдаления, - | ВЫБОР - | КОГДА ПрисоединенныеФайлы.ТипХраненияФайла = ЗНАЧЕНИЕ(Перечисление.ТипыХраненияФайлов.ВИнформационнойБазе) - | ТОГДА ХранилищеФайлов.ХранилищеДвоичныхДанных.ДвоичныеДанные - | КОГДА ПрисоединенныеФайлы.ТипХраненияФайла = ЗНАЧЕНИЕ(Перечисление.ТипыХраненияФайлов.ВоВнешнемХранилищеДвоичныхДанных) - | ТОГДА ЕСТЬNULL(МестаХраненияДвоичныхДанных.ДвоичныеДанныеВОперационномВнешнемХранилище, НЕОПРЕДЕЛЕНО) - | КОГДА ПрисоединенныеФайлы.ТипХраненияФайла = ЗНАЧЕНИЕ(Перечисление.ТипыХраненияФайлов.ВоВстроенномХранилищеДвоичныхДанных) - | ТОГДА ЕСТЬNULL(МестаХраненияДвоичныхДанных.ДвоичныеДанныеВОперационномВстроенномХранилище, НЕОПРЕДЕЛЕНО) - | ИНАЧЕ НЕОПРЕДЕЛЕНО - | КОНЕЦ КАК ХранилищеФайла - |ИЗ - | &ТаблицаПрисоединенныеФайлы КАК ПрисоединенныеФайлы - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ХранилищеФайлов КАК ХранилищеФайлов - | ПО ПрисоединенныеФайлы.Ссылка = ХранилищеФайлов.Файл - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.МестаХраненияДвоичныхДанных КАК МестаХраненияДвоичныхДанных - | ПО (ХранилищеФайлов.ХранилищеДвоичныхДанных = МестаХраненияДвоичныхДанных.ХранилищеДвоичныхДанных) - |ГДЕ - | ПрисоединенныеФайлы.Ссылка В(&ПрисоединенныеФайлы) - | И ПрисоединенныеФайлы.ТекущаяВерсия = ЗНАЧЕНИЕ(Справочник.ВерсииФайлов.ПустаяСсылка) - | - |ОБЪЕДИНИТЬ ВСЕ - | - |ВЫБРАТЬ - | ПрисоединенныеФайлы.Ссылка, - | ПрисоединенныеФайлы.ТипХраненияФайла, - | ПрисоединенныеФайлы.Том, - | ПрисоединенныеФайлы.ПометкаУдаления, - | ВЫБОР - | КОГДА ПрисоединенныеФайлы.ТипХраненияФайла = ЗНАЧЕНИЕ(Перечисление.ТипыХраненияФайлов.ВИнформационнойБазе) - | ТОГДА ХранилищеФайлов.ХранилищеДвоичныхДанных.ДвоичныеДанные - | КОГДА ПрисоединенныеФайлы.ТипХраненияФайла = ЗНАЧЕНИЕ(Перечисление.ТипыХраненияФайлов.ВоВнешнемХранилищеДвоичныхДанных) - | ТОГДА ЕСТЬNULL(МестаХраненияДвоичныхДанных.ДвоичныеДанныеВОперационномВнешнемХранилище, НЕОПРЕДЕЛЕНО) - | КОГДА ПрисоединенныеФайлы.ТипХраненияФайла = ЗНАЧЕНИЕ(Перечисление.ТипыХраненияФайлов.ВоВстроенномХранилищеДвоичныхДанных) - | ТОГДА ЕСТЬNULL(МестаХраненияДвоичныхДанных.ДвоичныеДанныеВОперационномВстроенномХранилище, НЕОПРЕДЕЛЕНО) - | ИНАЧЕ НЕОПРЕДЕЛЕНО - | КОНЕЦ - |ИЗ - | &ТаблицаПрисоединенныеФайлы КАК ПрисоединенныеФайлы - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ХранилищеФайлов КАК ХранилищеФайлов - | ПО ПрисоединенныеФайлы.ТекущаяВерсия = ХранилищеФайлов.Файл - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.МестаХраненияДвоичныхДанных КАК МестаХраненияДвоичныхДанных - | ПО (ХранилищеФайлов.ХранилищеДвоичныхДанных = МестаХраненияДвоичныхДанных.ХранилищеДвоичныхДанных) - |ГДЕ - | ПрисоединенныеФайлы.Ссылка В(&ПрисоединенныеФайлы) - | И ПрисоединенныеФайлы.ТекущаяВерсия <> ЗНАЧЕНИЕ(Справочник.ВерсииФайлов.ПустаяСсылка)"; - Иначе - ТекстЗапроса = - "ВЫБРАТЬ - | ПрисоединенныеФайлы.Ссылка КАК Ссылка, - | ПрисоединенныеФайлы.ТипХраненияФайла КАК ТипХраненияФайла, - | ПрисоединенныеФайлы.Том КАК Том, - | ПрисоединенныеФайлы.ПометкаУдаления КАК ПометкаУдаления, - | ВЫБОР - | КОГДА ХранилищеФайлов.Файл ЕСТЬ NULL - | ТОГДА УдалитьДвоичныеДанныеФайлов.ДвоичныеДанныеФайла - | ИНАЧЕ ВЫБОР - | КОГДА ПрисоединенныеФайлы.ТипХраненияФайла = ЗНАЧЕНИЕ(Перечисление.ТипыХраненияФайлов.ВИнформационнойБазе) - | ТОГДА ХранилищеФайлов.ХранилищеДвоичныхДанных.ДвоичныеДанные - | КОГДА ПрисоединенныеФайлы.ТипХраненияФайла = ЗНАЧЕНИЕ(Перечисление.ТипыХраненияФайлов.ВоВнешнемХранилищеДвоичныхДанных) - | ТОГДА ЕСТЬNULL(МестаХраненияДвоичныхДанных.ДвоичныеДанныеВОперационномВнешнемХранилище, НЕОПРЕДЕЛЕНО) - | КОГДА ПрисоединенныеФайлы.ТипХраненияФайла = ЗНАЧЕНИЕ(Перечисление.ТипыХраненияФайлов.ВоВстроенномХранилищеДвоичныхДанных) - | ТОГДА ЕСТЬNULL(МестаХраненияДвоичныхДанных.ДвоичныеДанныеВОперационномВстроенномХранилище, НЕОПРЕДЕЛЕНО) - | ИНАЧЕ НЕОПРЕДЕЛЕНО - | КОНЕЦ - | КОНЕЦ КАК ХранилищеФайла - |ИЗ - | &ТаблицаПрисоединенныеФайлы КАК ПрисоединенныеФайлы - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ХранилищеФайлов КАК ХранилищеФайлов - | ПО ПрисоединенныеФайлы.Ссылка = ХранилищеФайлов.Файл - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.УдалитьДвоичныеДанныеФайлов КАК УдалитьДвоичныеДанныеФайлов - | ПО ПрисоединенныеФайлы.Ссылка = УдалитьДвоичныеДанныеФайлов.Файл - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.МестаХраненияДвоичныхДанных КАК МестаХраненияДвоичныхДанных - | ПО (ХранилищеФайлов.ХранилищеДвоичныхДанных = МестаХраненияДвоичныхДанных.ХранилищеДвоичныхДанных) - |ГДЕ - | ПрисоединенныеФайлы.Ссылка В(&ПрисоединенныеФайлы) - | И ПрисоединенныеФайлы.ТекущаяВерсия = ЗНАЧЕНИЕ(Справочник.ВерсииФайлов.ПустаяСсылка) - | - |ОБЪЕДИНИТЬ ВСЕ - | - |ВЫБРАТЬ - | ПрисоединенныеФайлы.Ссылка, - | ПрисоединенныеФайлы.ТипХраненияФайла, - | ПрисоединенныеФайлы.Том, - | ПрисоединенныеФайлы.ПометкаУдаления, - | ВЫБОР - | КОГДА ХранилищеФайлов.Файл ЕСТЬ NULL - | ТОГДА УдалитьДвоичныеДанныеФайлов.ДвоичныеДанныеФайла - | ИНАЧЕ ВЫБОР - | КОГДА ПрисоединенныеФайлы.ТипХраненияФайла = ЗНАЧЕНИЕ(Перечисление.ТипыХраненияФайлов.ВИнформационнойБазе) - | ТОГДА ХранилищеФайлов.ХранилищеДвоичныхДанных.ДвоичныеДанные - | КОГДА ПрисоединенныеФайлы.ТипХраненияФайла = ЗНАЧЕНИЕ(Перечисление.ТипыХраненияФайлов.ВоВнешнемХранилищеДвоичныхДанных) - | ТОГДА ЕСТЬNULL(МестаХраненияДвоичныхДанных.ДвоичныеДанныеВОперационномВнешнемХранилище, НЕОПРЕДЕЛЕНО) - | КОГДА ПрисоединенныеФайлы.ТипХраненияФайла = ЗНАЧЕНИЕ(Перечисление.ТипыХраненияФайлов.ВоВстроенномХранилищеДвоичныхДанных) - | ТОГДА ЕСТЬNULL(МестаХраненияДвоичныхДанных.ДвоичныеДанныеВОперационномВстроенномХранилище, НЕОПРЕДЕЛЕНО) - | ИНАЧЕ НЕОПРЕДЕЛЕНО - | КОНЕЦ - | КОНЕЦ - |ИЗ - | &ТаблицаПрисоединенныеФайлы КАК ПрисоединенныеФайлы - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ХранилищеФайлов КАК ХранилищеФайлов - | ПО ПрисоединенныеФайлы.ТекущаяВерсия = ХранилищеФайлов.Файл - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.УдалитьДвоичныеДанныеФайлов КАК УдалитьДвоичныеДанныеФайлов - | ПО ПрисоединенныеФайлы.ТекущаяВерсия = УдалитьДвоичныеДанныеФайлов.Файл - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.МестаХраненияДвоичныхДанных КАК МестаХраненияДвоичныхДанных - | ПО (ХранилищеФайлов.ХранилищеДвоичныхДанных = МестаХраненияДвоичныхДанных.ХранилищеДвоичныхДанных) - |ГДЕ - | ПрисоединенныеФайлы.Ссылка В(&ПрисоединенныеФайлы) - | И ПрисоединенныеФайлы.ТекущаяВерсия <> ЗНАЧЕНИЕ(Справочник.ВерсииФайлов.ПустаяСсылка)"; - КонецЕсли; - Иначе - Если РаботаСФайламиСлужебныйПовтИсп.ДедупликацияВыполнена() Тогда - ТекстЗапроса = - "ВЫБРАТЬ - | ПрисоединенныеФайлы.Ссылка КАК Ссылка, - | ПрисоединенныеФайлы.ТипХраненияФайла КАК ТипХраненияФайла, - | ПрисоединенныеФайлы.Том КАК Том, - | ПрисоединенныеФайлы.ПометкаУдаления КАК ПометкаУдаления, - | ВЫБОР - | КОГДА ПрисоединенныеФайлы.ТипХраненияФайла = ЗНАЧЕНИЕ(Перечисление.ТипыХраненияФайлов.ВИнформационнойБазе) - | ТОГДА ХранилищеФайлов.ХранилищеДвоичныхДанных.ДвоичныеДанные - | КОГДА ПрисоединенныеФайлы.ТипХраненияФайла = ЗНАЧЕНИЕ(Перечисление.ТипыХраненияФайлов.ВоВнешнемХранилищеДвоичныхДанных) - | ТОГДА ЕСТЬNULL(МестаХраненияДвоичныхДанных.ДвоичныеДанныеВОперационномВнешнемХранилище, НЕОПРЕДЕЛЕНО) - | КОГДА ПрисоединенныеФайлы.ТипХраненияФайла = ЗНАЧЕНИЕ(Перечисление.ТипыХраненияФайлов.ВоВстроенномХранилищеДвоичныхДанных) - | ТОГДА ЕСТЬNULL(МестаХраненияДвоичныхДанных.ДвоичныеДанныеВОперационномВстроенномХранилище, НЕОПРЕДЕЛЕНО) - | ИНАЧЕ НЕОПРЕДЕЛЕНО - | КОНЕЦ КАК ХранилищеФайла - |ИЗ - | &ТаблицаПрисоединенныеФайлы КАК ПрисоединенныеФайлы - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ХранилищеФайлов КАК ХранилищеФайлов - | ПО ПрисоединенныеФайлы.Ссылка = ХранилищеФайлов.Файл - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.МестаХраненияДвоичныхДанных КАК МестаХраненияДвоичныхДанных - | ПО (ХранилищеФайлов.ХранилищеДвоичныхДанных = МестаХраненияДвоичныхДанных.ХранилищеДвоичныхДанных) - |ГДЕ - | ПрисоединенныеФайлы.Ссылка В(&ПрисоединенныеФайлы)"; - Иначе - ТекстЗапроса = - "ВЫБРАТЬ - | ПрисоединенныеФайлы.Ссылка КАК Ссылка, - | ПрисоединенныеФайлы.ТипХраненияФайла КАК ТипХраненияФайла, - | ПрисоединенныеФайлы.Том КАК Том, - | ПрисоединенныеФайлы.ПометкаУдаления КАК ПометкаУдаления, - | ВЫБОР - | КОГДА ХранилищеФайлов.Файл ЕСТЬ NULL - | ТОГДА УдалитьДвоичныеДанныеФайлов.ДвоичныеДанныеФайла - | ИНАЧЕ ВЫБОР - | КОГДА ПрисоединенныеФайлы.ТипХраненияФайла = ЗНАЧЕНИЕ(Перечисление.ТипыХраненияФайлов.ВИнформационнойБазе) - | ТОГДА ХранилищеФайлов.ХранилищеДвоичныхДанных.ДвоичныеДанные - | КОГДА ПрисоединенныеФайлы.ТипХраненияФайла = ЗНАЧЕНИЕ(Перечисление.ТипыХраненияФайлов.ВоВнешнемХранилищеДвоичныхДанных) - | ТОГДА ЕСТЬNULL(МестаХраненияДвоичныхДанных.ДвоичныеДанныеВОперационномВнешнемХранилище, НЕОПРЕДЕЛЕНО) - | КОГДА ПрисоединенныеФайлы.ТипХраненияФайла = ЗНАЧЕНИЕ(Перечисление.ТипыХраненияФайлов.ВоВстроенномХранилищеДвоичныхДанных) - | ТОГДА ЕСТЬNULL(МестаХраненияДвоичныхДанных.ДвоичныеДанныеВОперационномВстроенномХранилище, НЕОПРЕДЕЛЕНО) - | ИНАЧЕ НЕОПРЕДЕЛЕНО - | КОНЕЦ - | КОНЕЦ КАК ХранилищеФайла - |ИЗ - | &ТаблицаПрисоединенныеФайлы КАК ПрисоединенныеФайлы - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ХранилищеФайлов КАК ХранилищеФайлов - | ПО ПрисоединенныеФайлы.Ссылка = ХранилищеФайлов.Файл - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.УдалитьДвоичныеДанныеФайлов КАК УдалитьДвоичныеДанныеФайлов - | ПО ПрисоединенныеФайлы.Ссылка = УдалитьДвоичныеДанныеФайлов.Файл - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.МестаХраненияДвоичныхДанных КАК МестаХраненияДвоичныхДанных - | ПО (ХранилищеФайлов.ХранилищеДвоичныхДанных = МестаХраненияДвоичныхДанных.ХранилищеДвоичныхДанных) - |ГДЕ - | ПрисоединенныеФайлы.Ссылка В(&ПрисоединенныеФайлы)"; - КонецЕсли; - КонецЕсли; - Запрос = Новый Запрос; - Запрос.Текст = СтрЗаменить(ТекстЗапроса, "&ТаблицаПрисоединенныеФайлы", МетаданныеОбъектаФайла.ПолноеИмя()); - Запрос.УстановитьПараметр("ПрисоединенныеФайлы", РазрешенныеПрисоединенныеФайлы); + Запрос.Текст = ТекстЗапросаДвоичныеДанныеФайлов(ЕстьРеквизитТекущаяВерсия, ПолноеИмя); + Запрос.УстановитьПараметр("РазрешенныеПрисоединенныеФайлы", РазрешенныеПрисоединенныеФайлы); Выборка = Запрос.Выполнить().Выбрать(); - ДвоичныеДанныеФайлов = Новый Соответствие; + Результат = Новый Соответствие; Пока Выборка.Следующий() Цикл - Если РаботаСФайламиВХранилищеДвоичныхДанныхСлужебный.ТипХраненияНеИспользуетДиски(Выборка.ТипХраненияФайла) Тогда - ДвоичныеДанные = Неопределено; + РеквизитыФайла = РеквизитыРазрешенныхПрисоединенныхФайлов.Получить(Выборка.Ссылка); + + ДвоичныеДанные = Неопределено; + Если РаботаСФайламиВХранилищеДвоичныхДанныхСлужебный.ТипХраненияНеИспользуетДиски(РеквизитыФайла.ТипХраненияФайла) Тогда Если Выборка.ХранилищеФайла <> Null Тогда ДвоичныеДанные = Выборка.ХранилищеФайла.Получить(); КонецЕсли; - Если ДвоичныеДанные = Неопределено Тогда - РаботаСФайламиСлужебный.СообщитьОбОшибкеФайлНеНайден(Выборка.Ссылка, ВызыватьИсключение); - Иначе - ДвоичныеДанныеФайлов.Вставить(Выборка.Ссылка, ДвоичныеДанные); - КонецЕсли; Иначе - ДвоичныеДанные = РаботаСФайламиВТомахСлужебный.ДанныеФайла(Выборка.Ссылка, ВызыватьИсключение); - Если ДвоичныеДанные <> Неопределено Тогда - ДвоичныеДанныеФайлов.Вставить(Выборка.Ссылка, ДвоичныеДанные); - КонецЕсли; + ДвоичныеДанные = РаботаСФайламиВТомахСлужебный.ДанныеФайла(РеквизитыФайла, ВызыватьИсключение); + КонецЕсли; + + Если ДвоичныеДанные = Неопределено Тогда + РаботаСФайламиСлужебный.СообщитьОбОшибкеФайлНеНайден(Выборка.Ссылка, ВызыватьИсключение); + Иначе + Результат.Вставить(Выборка.Ссылка, ДвоичныеДанные); КонецЕсли; КонецЦикла; - Возврат ДвоичныеДанныеФайлов; + Возврат Результат; КонецФункции @@ -369,7 +194,6 @@ Знач УдалитьПолучатьСсылкуНаДвоичныеДанные = Истина, Знач УдалитьДляРедактирования = Ложь) Экспорт Если ТипЗнч(ДополнительныеПараметры) = Тип("Структура") Тогда - ДляРедактирования = ?(ДополнительныеПараметры.Свойство("ДляРедактирования"), ДополнительныеПараметры.ДляРедактирования, Ложь); ИдентификаторФормы = ?(ДополнительныеПараметры.Свойство("ИдентификаторФормы"), ДополнительныеПараметры.ИдентификаторФормы, Неопределено); ВызыватьИсключение = ?(ДополнительныеПараметры.Свойство("ВызыватьИсключение"), ДополнительныеПараметры.ВызыватьИсключение, Истина); @@ -388,13 +212,14 @@ ОбновлениеИнформационнойБазы.ПроверитьОбъектОбработан(ПрисоединенныйФайл); ОбщегоНазначенияКлиентСервер.ПроверитьПараметр("РаботаСФайлами.ДанныеФайла", "ПрисоединенныйФайл", ПрисоединенныйФайл, Метаданные.ОпределяемыеТипы.ПрисоединенныйФайл.Тип); - + + МетаданныеОбъектаФайла = ПрисоединенныйФайл.Метаданные(); Если Не ВызыватьИсключение Тогда Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом"); ЧтениеРазрешено = МодульУправлениеДоступом.ЧтениеРазрешено(ПрисоединенныйФайл); Иначе - ЧтениеРазрешено = ПравоДоступа("Чтение", ПрисоединенныйФайл.Метаданные()); + ЧтениеРазрешено = ПравоДоступа("Чтение", МетаданныеОбъектаФайла); КонецЕсли; Если Не ЧтениеРазрешено Тогда Возврат Неопределено; @@ -402,11 +227,12 @@ КонецЕсли; ФайлОбъект = ПрисоединенныйФайл.ПолучитьОбъект(); + Если ФайлОбъект = Неопределено Тогда Если ВызыватьИсключение Тогда ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru='Файл не существует или недоступен ""%1"" (%2)'"), - Строка(ПрисоединенныйФайл), ПрисоединенныйФайл.Метаданные().Представление()); + Строка(ПрисоединенныйФайл), МетаданныеОбъектаФайла.Представление()); ВызватьИсключение(ТекстСообщения, КатегорияОшибки.НарушениеПравДоступа); Иначе Возврат Неопределено; @@ -444,14 +270,13 @@ Если Не ПроверятьНаличиеФайлаВАрхиве Тогда ПолучениеФайлаИзАрхива = ПараметрыПолученияФайла.ФайлВАрхиве; КонецЕсли; - КонецЕсли; + КонецЕсли; Если ПроверятьНаличиеФайлаВАрхиве Тогда ПолучениеФайлаИзАрхива = РаботаСФайламиСлужебный.ФайлНаходитсяВФайловомАрхиве(ПрисоединенныйФайл, ПрисоединенныйФайлТекущаяВерсия); КонецЕсли; ДвоичныеДанные = РаботаСФайламиСлужебный.ДвоичныеДанныеФайла(ПрисоединенныйФайлТекущаяВерсия, ВызыватьИсключение, ПолучениеФайлаИзАрхива); - Если ПолучениеФайлаИзАрхива Тогда ДвоичныеДанные = РаботаСФайловымАрхивомСервер.ДвоичныеДанныеФайлаИзвлеченногоИзZipАрхива(ДвоичныеДанные, ПрисоединенныйФайлТекущаяВерсия); КонецЕсли; @@ -492,18 +317,17 @@ ОбщегоНазначения.СократитьИмяФайла(Результат.ИмяФайла); - МетаданныеОбъектаФайла = Метаданные.НайтиПоТипу(ТипЗнч(ПрисоединенныйФайл)); ЕстьВозможностьХранитьВерсии = ОбщегоНазначения.ЕстьРеквизитОбъекта("ТекущаяВерсия", МетаданныеОбъектаФайла); - Если ЕстьВозможностьХранитьВерсии И ЗначениеЗаполнено(ПрисоединенныйФайл.ТекущаяВерсия) Тогда РаботаСФайламиСлужебный.ЗаполнитьДополнительныеДанныеФайла(Результат, ПрисоединенныйФайл, ПрисоединенныйФайл.ТекущаяВерсия); Иначе РаботаСФайламиСлужебный.ЗаполнитьДополнительныеДанныеФайла(Результат, ПрисоединенныйФайл, Неопределено); КонецЕсли; - Результат.Вставить("ФайлРедактируется", ЗначениеЗаполнено(ФайлОбъект.Редактирует)); - Результат.Вставить("ФайлРедактируетТекущийПользователь", - ?(Результат.ФайлРедактируется, ФайлОбъект.Редактирует = Пользователи.АвторизованныйПользователь(), Ложь) ); + Результат.Вставить("ФайлРедактируется", ЗначениеЗаполнено(ФайлОбъект.Редактирует)); + + ФайлРедактируетТекущийПользователь = ?(Результат.ФайлРедактируется, ФайлОбъект.Редактирует = Пользователи.АвторизованныйПользователь(), Ложь); + Результат.Вставить("ФайлРедактируетТекущийПользователь", ФайлРедактируетТекущийПользователь); Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодпись") Тогда МодульЭлектроннаяПодпись = ОбщегоНазначения.ОбщийМодуль("ЭлектроннаяПодпись"); @@ -516,7 +340,7 @@ Результат.Вставить("Кодировка", РегистрыСведений.КодировкиФайлов.ОпределитьКодировкуФайла(Файл, ФайлОбъект.Расширение)); Результат.Вставить("Служебный", Ложь); - Если ОбщегоНазначенияКлиентСервер.ЕстьРеквизитИлиСвойствоОбъекта(ФайлОбъект, "Служебный") Тогда + Если ОбщегоНазначения.ЕстьРеквизитОбъекта("Служебный", МетаданныеОбъектаФайла) Тогда Результат.Служебный = ФайлОбъект.Служебный; КонецЕсли; @@ -1986,6 +1810,53 @@ #Область СлужебныеПроцедурыИФункции +#Область Сервис + +// Создает соответствие с данными выборки по результату запроса в виде структур +// +// Параметры: +// РезультатЗапроса - РезультатЗапроса +// ИмяПоляКлюча - Строка - имя поля выборки, для получения ключа соответствия +// ВсегдаСтруктура - Булево - для ситуаций когда в выборке только два поля определяет как возвращать +// значение ключа. Если Истина, в значение ключа помещается структура с одним +// элементом, иначе само значение поля. +// ПолеКлючаВНижнийРегистр - Булево - имеет смысл при передаче строковых полей ключа +// +// Возвращаемое значение: +// Соответствие Из КлючИЗначение: +// * Ключ - Произвольный - значение поля выборки по параметру "ИмяПоляКлюча" +// * Значение - Произвольный - при более двух выходных полях всегда структура, при двух выходных полях - в зависимости +// от флага "ВсегдаСтруктура" +// +Функция РезультатЗапросаВСоответствие(РезультатЗапроса, ИмяПоляКлюча, ВсегдаСтруктура = Ложь, ПолеКлючаВНижнийРегистр = Ложь) + Результат = Новый Соответствие; + СписокПолей = Новый Массив(); + Для Каждого КолонкаЗапроса Из РезультатЗапроса.Колонки Цикл + Если КолонкаЗапроса.Имя <> ИмяПоляКлюча Тогда + СписокПолей.Добавить(КолонкаЗапроса.Имя); + КонецЕсли; + КонецЦикла; + ЗначениеКакСтруктура = ВсегдаСтруктура ИЛИ СписокПолей.Количество() > 1; + ИменаПолей = СтрСоединить(СписокПолей, ","); + Выборка = РезультатЗапроса.Выбрать(); + Пока Выборка.Следующий() Цикл + Ключ = Выборка[ИмяПоляКлюча]; + Если ПолеКлючаВНижнийРегистр Тогда + Ключ = НРег(Ключ); + КонецЕсли; + Если ЗначениеКакСтруктура Тогда + Значение = Новый Структура(ИменаПолей); + ЗаполнитьЗначенияСвойств(Значение, Выборка); + Иначе + Значение = Выборка[ИменаПолей]; + КонецЕсли; + Результат.Вставить(Ключ, Значение); + КонецЦикла; + Возврат Результат; +КонецФункции + +#КонецОбласти + Функция РасширениеДляЗашифрованныхФайлов() Экспорт Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодпись") Тогда @@ -2184,31 +2055,23 @@ КонецПроцедуры -// Возвращает идентификатор владельца присоединенного файла. Функция ПолучитьИдентификаторОбъекта(Знач ВладелецФайлов) - - ТекстЗапроса = - "ВЫБРАТЬ + Запрос = Новый Запрос; + Запрос.Текст = "ВЫБРАТЬ | НаличиеФайлов.ИдентификаторОбъекта |ИЗ | РегистрСведений.НаличиеФайлов КАК НаличиеФайлов |ГДЕ | НаличиеФайлов.ОбъектСФайлами = &ОбъектСФайлами"; - - Запрос = Новый Запрос; - Запрос.Текст = ТекстЗапроса; Запрос.УстановитьПараметр("ОбъектСФайлами", ВладелецФайлов); РезультатВыполнения = Запрос.Выполнить(); - - Если РезультатВыполнения.Пустой() Тогда - Возврат ""; - КонецЕсли; - Выборка = РезультатВыполнения.Выбрать(); Выборка.Следующий(); - - Возврат Выборка.ИдентификаторОбъекта; - + Результат = Выборка.ИдентификаторОбъекта; + Если НЕ ЗначениеЗаполнено(Результат) Тогда + Результат = ""; + КонецЕсли; + Возврат Результат; КонецФункции // Возвращает двоичные данные файла из информационной базы. @@ -3256,4 +3119,249 @@ #КонецОбласти +#Область ДвоичныеДанныеФайлов + +Функция ТекстЗапросаДвоичныеДанныеФайлов(ЕстьРеквизитТекущаяВерсия, ПолноеИмя) + ДедупликацияВыполнена = РаботаСФайламиСлужебныйПовтИсп.ДедупликацияВыполнена(); + Если ЕстьРеквизитТекущаяВерсия Тогда + Если ДедупликацияВыполнена Тогда + Результат = ШаблонЗапросаДвоичныхДанныхВерсииДедупликацияВыполнена(); + + Иначе + Результат = ШаблонЗапросаДвоичныхДанныхВерсииДедупликацияНеВыполнена(); + + КонецЕсли; + Иначе + Если ДедупликацияВыполнена Тогда + Результат = ШаблонЗапросаДвоичныхДанныхБезВерсийДедупликацияВыполнена(); + + Иначе + Результат = ШаблонЗапросаДвоичныхДанныхБезВерсийДедупликацияНеВыполнена(); + + КонецЕсли; + КонецЕсли; + Результат = СтрЗаменить(Результат, "&ТаблицаПрисоединенныеФайлы", ПолноеИмя); + Возврат Результат; +КонецФункции + +Функция ШаблонЗапросаДвоичныхДанныхВерсииДедупликацияВыполнена() + Возврат "ВЫБРАТЬ + | ПрисоединенныеФайлы.Ссылка КАК Ссылка, + | ВЫБОР + | КОГДА ПрисоединенныеФайлы.ТипХраненияФайла = ЗНАЧЕНИЕ(Перечисление.ТипыХраненияФайлов.ВИнформационнойБазе) + | ТОГДА ХранилищеФайлов.ХранилищеДвоичныхДанных.ДвоичныеДанные + | КОГДА + | ПрисоединенныеФайлы.ТипХраненияФайла = ЗНАЧЕНИЕ(Перечисление.ТипыХраненияФайлов.ВоВнешнемХранилищеДвоичныхДанных) + | ТОГДА ЕСТЬNULL(МестаХраненияДвоичныхДанных.ДвоичныеДанныеВОперационномВнешнемХранилище, НЕОПРЕДЕЛЕНО) + | КОГДА + | ПрисоединенныеФайлы.ТипХраненияФайла = ЗНАЧЕНИЕ(Перечисление.ТипыХраненияФайлов.ВоВстроенномХранилищеДвоичныхДанных) + | ТОГДА ЕСТЬNULL(МестаХраненияДвоичныхДанных.ДвоичныеДанныеВОперационномВстроенномХранилище, НЕОПРЕДЕЛЕНО) + | ИНАЧЕ НЕОПРЕДЕЛЕНО + | КОНЕЦ КАК ХранилищеФайла + |ИЗ + | &ТаблицаПрисоединенныеФайлы КАК ПрисоединенныеФайлы + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ХранилищеФайлов КАК ХранилищеФайлов + | ПО ПрисоединенныеФайлы.Ссылка = ХранилищеФайлов.Файл + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.МестаХраненияДвоичныхДанных КАК МестаХраненияДвоичныхДанных + | ПО ХранилищеФайлов.ХранилищеДвоичныхДанных = МестаХраненияДвоичныхДанных.ХранилищеДвоичныхДанных + |ГДЕ + | ПрисоединенныеФайлы.Ссылка В (&РазрешенныеПрисоединенныеФайлы) + | И ПрисоединенныеФайлы.ТекущаяВерсия = ЗНАЧЕНИЕ(Справочник.ВерсииФайлов.ПустаяСсылка) + | + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ + | ПрисоединенныеФайлы.Ссылка, + | ВЫБОР + | КОГДА ПрисоединенныеФайлы.ТипХраненияФайла = ЗНАЧЕНИЕ(Перечисление.ТипыХраненияФайлов.ВИнформационнойБазе) + | ТОГДА ХранилищеФайлов.ХранилищеДвоичныхДанных.ДвоичныеДанные + | КОГДА + | ПрисоединенныеФайлы.ТипХраненияФайла = ЗНАЧЕНИЕ(Перечисление.ТипыХраненияФайлов.ВоВнешнемХранилищеДвоичныхДанных) + | ТОГДА ЕСТЬNULL(МестаХраненияДвоичныхДанных.ДвоичныеДанныеВОперационномВнешнемХранилище, НЕОПРЕДЕЛЕНО) + | КОГДА + | ПрисоединенныеФайлы.ТипХраненияФайла = ЗНАЧЕНИЕ(Перечисление.ТипыХраненияФайлов.ВоВстроенномХранилищеДвоичныхДанных) + | ТОГДА ЕСТЬNULL(МестаХраненияДвоичныхДанных.ДвоичныеДанныеВОперационномВстроенномХранилище, НЕОПРЕДЕЛЕНО) + | ИНАЧЕ НЕОПРЕДЕЛЕНО + | КОНЕЦ + |ИЗ + | &ТаблицаПрисоединенныеФайлы КАК ПрисоединенныеФайлы + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ХранилищеФайлов КАК ХранилищеФайлов + | ПО ПрисоединенныеФайлы.ТекущаяВерсия = ХранилищеФайлов.Файл + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.МестаХраненияДвоичныхДанных КАК МестаХраненияДвоичныхДанных + | ПО ХранилищеФайлов.ХранилищеДвоичныхДанных = МестаХраненияДвоичныхДанных.ХранилищеДвоичныхДанных + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ВерсииФайлов КАК ВерсииФайлов + | ПО ПрисоединенныеФайлы.ТекущаяВерсия = ВерсииФайлов.Ссылка + |ГДЕ + | ПрисоединенныеФайлы.Ссылка В (&РазрешенныеПрисоединенныеФайлы)"; +КонецФункции + +Функция ШаблонЗапросаДвоичныхДанныхВерсииДедупликацияНеВыполнена() + Возврат "ВЫБРАТЬ + | ПрисоединенныеФайлы.Ссылка КАК Ссылка, + | ВЫБОР + | КОГДА ХранилищеФайлов.Файл ЕСТЬ NULL + | ТОГДА УдалитьДвоичныеДанныеФайлов.ДвоичныеДанныеФайла + | ИНАЧЕ ВЫБОР + | КОГДА ПрисоединенныеФайлы.ТипХраненияФайла = ЗНАЧЕНИЕ(Перечисление.ТипыХраненияФайлов.ВИнформационнойБазе) + | ТОГДА ХранилищеФайлов.ХранилищеДвоичныхДанных.ДвоичныеДанные + | КОГДА + | ПрисоединенныеФайлы.ТипХраненияФайла = ЗНАЧЕНИЕ(Перечисление.ТипыХраненияФайлов.ВоВнешнемХранилищеДвоичныхДанных) + | ТОГДА ЕСТЬNULL(МестаХраненияДвоичныхДанных.ДвоичныеДанныеВОперационномВнешнемХранилище, НЕОПРЕДЕЛЕНО) + | КОГДА + | ПрисоединенныеФайлы.ТипХраненияФайла = ЗНАЧЕНИЕ(Перечисление.ТипыХраненияФайлов.ВоВстроенномХранилищеДвоичныхДанных) + | ТОГДА ЕСТЬNULL(МестаХраненияДвоичныхДанных.ДвоичныеДанныеВОперационномВстроенномХранилище, НЕОПРЕДЕЛЕНО) + | ИНАЧЕ НЕОПРЕДЕЛЕНО + | КОНЕЦ + | КОНЕЦ КАК ХранилищеФайла + |ИЗ + | &ТаблицаПрисоединенныеФайлы КАК ПрисоединенныеФайлы + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ХранилищеФайлов КАК ХранилищеФайлов + | ПО ПрисоединенныеФайлы.Ссылка = ХранилищеФайлов.Файл + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.УдалитьДвоичныеДанныеФайлов КАК УдалитьДвоичныеДанныеФайлов + | ПО ПрисоединенныеФайлы.Ссылка = УдалитьДвоичныеДанныеФайлов.Файл + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.МестаХраненияДвоичныхДанных КАК МестаХраненияДвоичныхДанных + | ПО ХранилищеФайлов.ХранилищеДвоичныхДанных = МестаХраненияДвоичныхДанных.ХранилищеДвоичныхДанных + |ГДЕ + | ПрисоединенныеФайлы.Ссылка В (&РазрешенныеПрисоединенныеФайлы) + | И ПрисоединенныеФайлы.ТекущаяВерсия = ЗНАЧЕНИЕ(Справочник.ВерсииФайлов.ПустаяСсылка) + | + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ + | ПрисоединенныеФайлы.Ссылка, + | ВЫБОР + | КОГДА ХранилищеФайлов.Файл ЕСТЬ NULL + | ТОГДА УдалитьДвоичныеДанныеФайлов.ДвоичныеДанныеФайла + | ИНАЧЕ ВЫБОР + | КОГДА ПрисоединенныеФайлы.ТипХраненияФайла = ЗНАЧЕНИЕ(Перечисление.ТипыХраненияФайлов.ВИнформационнойБазе) + | ТОГДА ХранилищеФайлов.ХранилищеДвоичныхДанных.ДвоичныеДанные + | КОГДА + | ПрисоединенныеФайлы.ТипХраненияФайла = ЗНАЧЕНИЕ(Перечисление.ТипыХраненияФайлов.ВоВнешнемХранилищеДвоичныхДанных) + | ТОГДА ЕСТЬNULL(МестаХраненияДвоичныхДанных.ДвоичныеДанныеВОперационномВнешнемХранилище, НЕОПРЕДЕЛЕНО) + | КОГДА + | ПрисоединенныеФайлы.ТипХраненияФайла = ЗНАЧЕНИЕ(Перечисление.ТипыХраненияФайлов.ВоВстроенномХранилищеДвоичныхДанных) + | ТОГДА ЕСТЬNULL(МестаХраненияДвоичныхДанных.ДвоичныеДанныеВОперационномВстроенномХранилище, НЕОПРЕДЕЛЕНО) + | ИНАЧЕ НЕОПРЕДЕЛЕНО + | КОНЕЦ + | КОНЕЦ + |ИЗ + | &ТаблицаПрисоединенныеФайлы КАК ПрисоединенныеФайлы + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ХранилищеФайлов КАК ХранилищеФайлов + | ПО ПрисоединенныеФайлы.ТекущаяВерсия = ХранилищеФайлов.Файл + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.УдалитьДвоичныеДанныеФайлов КАК УдалитьДвоичныеДанныеФайлов + | ПО ПрисоединенныеФайлы.ТекущаяВерсия = УдалитьДвоичныеДанныеФайлов.Файл + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.МестаХраненияДвоичныхДанных КАК МестаХраненияДвоичныхДанных + | ПО ХранилищеФайлов.ХранилищеДвоичныхДанных = МестаХраненияДвоичныхДанных.ХранилищеДвоичныхДанных + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ВерсииФайлов КАК ВерсииФайлов + | ПО ПрисоединенныеФайлы.ТекущаяВерсия = ВерсииФайлов.Ссылка + |ГДЕ + | ПрисоединенныеФайлы.Ссылка В (&РазрешенныеПрисоединенныеФайлы)"; +КонецФункции + +Функция ШаблонЗапросаДвоичныхДанныхБезВерсийДедупликацияВыполнена() + Возврат "ВЫБРАТЬ + | ПрисоединенныеФайлы.Ссылка КАК Ссылка, + | ВЫБОР + | КОГДА ПрисоединенныеФайлы.ТипХраненияФайла = ЗНАЧЕНИЕ(Перечисление.ТипыХраненияФайлов.ВИнформационнойБазе) + | ТОГДА ХранилищеФайлов.ХранилищеДвоичныхДанных.ДвоичныеДанные + | КОГДА + | ПрисоединенныеФайлы.ТипХраненияФайла = ЗНАЧЕНИЕ(Перечисление.ТипыХраненияФайлов.ВоВнешнемХранилищеДвоичныхДанных) + | ТОГДА ЕСТЬNULL(МестаХраненияДвоичныхДанных.ДвоичныеДанныеВОперационномВнешнемХранилище, НЕОПРЕДЕЛЕНО) + | КОГДА + | ПрисоединенныеФайлы.ТипХраненияФайла = ЗНАЧЕНИЕ(Перечисление.ТипыХраненияФайлов.ВоВстроенномХранилищеДвоичныхДанных) + | ТОГДА ЕСТЬNULL(МестаХраненияДвоичныхДанных.ДвоичныеДанныеВОперационномВстроенномХранилище, НЕОПРЕДЕЛЕНО) + | ИНАЧЕ НЕОПРЕДЕЛЕНО + | КОНЕЦ КАК ХранилищеФайла + |ИЗ + | &ТаблицаПрисоединенныеФайлы КАК ПрисоединенныеФайлы + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ХранилищеФайлов КАК ХранилищеФайлов + | ПО ПрисоединенныеФайлы.Ссылка = ХранилищеФайлов.Файл + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.МестаХраненияДвоичныхДанных КАК МестаХраненияДвоичныхДанных + | ПО ХранилищеФайлов.ХранилищеДвоичныхДанных = МестаХраненияДвоичныхДанных.ХранилищеДвоичныхДанных + |ГДЕ + | ПрисоединенныеФайлы.Ссылка В (&РазрешенныеПрисоединенныеФайлы)"; +КонецФункции + +Функция ШаблонЗапросаДвоичныхДанныхБезВерсийДедупликацияНеВыполнена() + Возврат "ВЫБРАТЬ + | ПрисоединенныеФайлы.Ссылка КАК Ссылка, + | ВЫБОР + | КОГДА ХранилищеФайлов.Файл ЕСТЬ NULL + | ТОГДА УдалитьДвоичныеДанныеФайлов.ДвоичныеДанныеФайла + | ИНАЧЕ ВЫБОР + | КОГДА ПрисоединенныеФайлы.ТипХраненияФайла = ЗНАЧЕНИЕ(Перечисление.ТипыХраненияФайлов.ВИнформационнойБазе) + | ТОГДА ХранилищеФайлов.ХранилищеДвоичныхДанных.ДвоичныеДанные + | КОГДА + | ПрисоединенныеФайлы.ТипХраненияФайла = ЗНАЧЕНИЕ(Перечисление.ТипыХраненияФайлов.ВоВнешнемХранилищеДвоичныхДанных) + | ТОГДА ЕСТЬNULL(МестаХраненияДвоичныхДанных.ДвоичныеДанныеВОперационномВнешнемХранилище, НЕОПРЕДЕЛЕНО) + | КОГДА + | ПрисоединенныеФайлы.ТипХраненияФайла = ЗНАЧЕНИЕ(Перечисление.ТипыХраненияФайлов.ВоВстроенномХранилищеДвоичныхДанных) + | ТОГДА ЕСТЬNULL(МестаХраненияДвоичныхДанных.ДвоичныеДанныеВОперационномВстроенномХранилище, НЕОПРЕДЕЛЕНО) + | ИНАЧЕ НЕОПРЕДЕЛЕНО + | КОНЕЦ + | КОНЕЦ КАК ХранилищеФайла + |ИЗ + | &ТаблицаПрисоединенныеФайлы КАК ПрисоединенныеФайлы + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ХранилищеФайлов КАК ХранилищеФайлов + | ПО ПрисоединенныеФайлы.Ссылка = ХранилищеФайлов.Файл + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.УдалитьДвоичныеДанныеФайлов КАК УдалитьДвоичныеДанныеФайлов + | ПО ПрисоединенныеФайлы.Ссылка = УдалитьДвоичныеДанныеФайлов.Файл + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.МестаХраненияДвоичныхДанных КАК МестаХраненияДвоичныхДанных + | ПО ХранилищеФайлов.ХранилищеДвоичныхДанных = МестаХраненияДвоичныхДанных.ХранилищеДвоичныхДанных + |ГДЕ + | ПрисоединенныеФайлы.Ссылка В (&РазрешенныеПрисоединенныеФайлы)"; +КонецФункции + +Функция РеквизитыРазрешенныхПрисоединенныхФайлов(ЕстьРеквизитТекущаяВерсия, ПолноеИмя, ПрисоединенныеФайлы) + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ РАЗРЕШЕННЫЕ + | ПрисоединенныеФайлы.Ссылка КАК Ссылка, + | ПрисоединенныеФайлы.Ссылка КАК СсылкаКлюч, + | ПрисоединенныеФайлы.Наименование КАК Наименование, + | ПрисоединенныеФайлы.ТипХраненияФайла КАК ТипХраненияФайла, + | ПрисоединенныеФайлы.Том КАК Том, + | ПрисоединенныеФайлы.ВладелецФайла КАК ВладелецФайла, + | ПрисоединенныеФайлы.Расширение КАК Расширение, + | ПрисоединенныеФайлы.ПутьКФайлу КАК ПутьКФайлу, + | """" КАК НомерВерсии + |ИЗ + | &ТаблицаПрисоединенныеФайлы КАК ПрисоединенныеФайлы + |ГДЕ + | ПрисоединенныеФайлы.Ссылка В (&ПрисоединенныеФайлы)"; + + Если ЕстьРеквизитТекущаяВерсия Тогда + Запрос.Текст = Запрос.Текст + " + | И ПрисоединенныеФайлы.ТекущаяВерсия = ЗНАЧЕНИЕ(Справочник.ВерсииФайлов.ПустаяСсылка) + | + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ + | ПрисоединенныеФайлы.Ссылка, + | ПрисоединенныеФайлы.Ссылка КАК СсылкаКлюч, + | ВерсииФайлов.Наименование КАК Наименование, + | ВерсииФайлов.ТипХраненияФайла КАК ТипХраненияФайла, + | ВерсииФайлов.Том КАК Том, + | ВерсииФайлов.Владелец КАК ВладелецФайла, + | ВерсииФайлов.Расширение КАК Расширение, + | ВерсииФайлов.ПутьКФайлу КАК ПутьКФайлу, + | ВерсииФайлов.НомерВерсии КАК НомерВерсии + |ИЗ + | &ТаблицаПрисоединенныеФайлы КАК ПрисоединенныеФайлы + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ВерсииФайлов КАК ВерсииФайлов + | ПО ПрисоединенныеФайлы.ТекущаяВерсия = ВерсииФайлов.Ссылка + |ГДЕ + | ПрисоединенныеФайлы.Ссылка В (&ПрисоединенныеФайлы)"; + КонецЕсли; + + Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ТаблицаПрисоединенныеФайлы", ПолноеИмя); + Запрос.УстановитьПараметр("ПрисоединенныеФайлы", ПрисоединенныеФайлы); + РезультатЗапроса = Запрос.Выполнить(); + + Результат = РезультатЗапросаВСоответствие(РезультатЗапроса, "СсылкаКлюч"); + Возврат Результат; +КонецФункции + +#КонецОбласти + #КонецОбласти \ No newline at end of file diff --git a/Конфигурация/CommonModules/РаботаСФайламиБЭДКлиентСервер/Ext/Module.bsl b/Конфигурация/CommonModules/РаботаСФайламиБЭДКлиентСервер/Ext/Module.bsl index faded1cd4..f6899ca84 100644 --- a/Конфигурация/CommonModules/РаботаСФайламиБЭДКлиентСервер/Ext/Module.bsl +++ b/Конфигурация/CommonModules/РаботаСФайламиБЭДКлиентСервер/Ext/Module.bsl @@ -7,6 +7,7 @@ // Параметры: // ПомещенныеФайлы - Массив из Структура: // * ПолноеИмя - Строка +// * ИмяФайла - Строка // // Возвращаемое значение: // - Неопределено @@ -18,8 +19,15 @@ Функция ИсключитьНедопустимыеФайлы(ПомещенныеФайлы) Экспорт ПроверяемыеФайлы = Новый Массив(); // Массив из Строка + Для Каждого ПомещенныйФайл Из ПомещенныеФайлы Цикл - ПроверяемыеФайлы.Добавить(ПомещенныйФайл.ПолноеИмя); + + ИмяФайла = ПомещенныйФайл.ПолноеИмя; + Если НЕ ЗначениеЗаполнено(ИмяФайла) Тогда + ИмяФайла = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ПомещенныйФайл, "ИмяФайла", ""); + КонецЕсли; + ПроверяемыеФайлы.Добавить(ИмяФайла); + КонецЦикла; ФайлыНедопустимыхТипов = НайтиФайлыНедопустимыхТипов(ПроверяемыеФайлы); @@ -27,13 +35,12 @@ Возврат Неопределено; КонецЕсли; - КоличествоПомещаемыхФайлов = ПомещенныеФайлы.Количество(); + КоличествоФайлов = ПроверяемыеФайлы.Количество(); - Для Счетчик = 1 По КоличествоПомещаемыхФайлов Цикл + Для Счетчик = 1 По КоличествоФайлов Цикл - Индекс = КоличествоПомещаемыхФайлов - Счетчик; - ПомещенныйФайл = ПомещенныеФайлы[Индекс]; - Если ФайлыНедопустимыхТипов.Найти(ПомещенныйФайл.ПолноеИмя) <> Неопределено Тогда + Индекс = КоличествоФайлов - Счетчик; + Если ФайлыНедопустимыхТипов.Найти(ПроверяемыеФайлы[Индекс]) <> Неопределено Тогда ПомещенныеФайлы.Удалить(Индекс); КонецЕсли; @@ -166,12 +173,15 @@ // // Параметры: // ИсходноеИмяФайла - Строка - Имя файла. +// ЗанятыеИменаФайлов - Соответствие Из КлючИЗначение - возвращаемый параметр, пополняется при каждом вызове: +// * Ключ - Строка - имя файла в верхнем регистре. +// * Значение - Булево - признак занятости имени файла. // ЭтоКаталог - Булево - Истина, если это каталог. // // Возвращаемое значение: // Строка - Уникальное имя файла. // -Функция ОпределитьУникальноеИмяФайла(Знач ИсходноеИмяФайла, Знач ЭтоКаталог = Ложь) Экспорт +Функция ОпределитьУникальноеИмяФайла(Знач ИсходноеИмяФайла, ЗанятыеИменаФайлов, Знач ЭтоКаталог = Ложь) Экспорт ПозицияДляДополнения = СтрНайти(ИсходноеИмяФайла, ".", НаправлениеПоиска.СКонца); Если ПозицияДляДополнения = 0 Или ЭтоКаталог Тогда @@ -186,7 +196,11 @@ + Сред(ИсходноеИмяФайла, ПозицияДляДополнения); Файл = Новый Файл(ИмяФайла); - Если Не Файл.Существует() Тогда + // Проверка существования файла на диске на регистрозависимых файловых системах (Linux/ext4) + // не считает дублями имена, различающиеся только регистром, тогда как ЗаписьZIPФайла + // сравнивает имена в архиве без учета регистра. + Если ЗанятыеИменаФайлов[ВРег(ИмяФайла)] = Неопределено + И Не Файл.Существует() Тогда Прервать; КонецЕсли; @@ -194,6 +208,7 @@ КонецЦикла; + ЗанятыеИменаФайлов.Вставить(ВРег(ИмяФайла), Истина); Возврат ИмяФайла; КонецФункции diff --git a/Конфигурация/CommonModules/РаботаСФайламиВТомахСлужебный/Ext/Module.bsl b/Конфигурация/CommonModules/РаботаСФайламиВТомахСлужебный/Ext/Module.bsl index 2ddd651c1..7f9ed361f 100644 --- a/Конфигурация/CommonModules/РаботаСФайламиВТомахСлужебный/Ext/Module.bsl +++ b/Конфигурация/CommonModules/РаботаСФайламиВТомахСлужебный/Ext/Module.bsl @@ -83,7 +83,9 @@ // Возвращает двоичные данные файла. // // Параметры: -// ПрисоединенныйФайл - ОпределяемыйТип.ПрисоединенныйФайл - ссылка на элемент справочника с файлом. +// ПрисоединенныйФайл - ОпределяемыйТип.ПрисоединенныйФайл, Структура - ссылка на элемент справочника с файлом, либо значения +// его свойств в виде структуры. Ключи структуры должны быть идентичны ключам метода см. +// СвойстваФайлаВТоме, и содержать ключ "Ссылка". // ВызыватьИсключение - Булево - если указать Ложь, то функция будет возвращать Неопределено // вместо вызова исключений. Значение по умолчанию - Истина. // ПолучениеФайлаИзАрхива - Булево. @@ -95,16 +97,26 @@ // найдены и параметр ВызыватьИсключение принимает значение Ложь, тогда // возвращаемое значение - Неопределено. // -Функция ДанныеФайла(ПрисоединенныйФайл, Знач ВызыватьИсключение = Истина, ПолучениеФайлаИзАрхива = Ложь) Экспорт +Функция ДанныеФайла(Источник, Знач ВызыватьИсключение = Истина, ПолучениеФайлаИзАрхива = Ложь) Экспорт - СвойстваФайла = СвойстваФайлаВТоме(ПрисоединенныйФайл); + Результат = Неопределено; + Если ТипЗнч(Источник) = Тип("Структура") Тогда + СвойстваФайла = Источник; + ФайлСсылка = СвойстваФайла.Ссылка; + Иначе + СвойстваФайла = СвойстваФайлаВТоме(Источник); + ФайлСсылка = Источник; + КонецЕсли; + Попытка - Возврат Новый ДвоичныеДанные(ПолноеИмяФайлаВТоме(СвойстваФайла)); + ПолноеИмяФайлаВТоме = ПолноеИмяФайлаВТоме(СвойстваФайла); + Результат = Новый ДвоичныеДанные(ПолноеИмяФайлаВТоме); Исключение - ФайлОбъект = РаботаСФайламиСлужебный.ФайлОбъект(ПрисоединенныйФайл); + ФайлОбъект = РаботаСФайламиСлужебный.ФайлОбъект(ФайлСсылка); РаботаСФайламиСлужебный.СообщитьОбОшибкеФайлНеНайден(ФайлОбъект, ВызыватьИсключение, ПолучениеФайлаИзАрхива); - Возврат Неопределено; КонецПопытки; + + Возврат Результат; КонецФункции @@ -271,8 +283,7 @@ ПрисоединенныйФайл.Том = ТомДляРазмещения; Иначе ПрисоединенныйФайл.Том = РаботаСФайловымАрхивомСервер.СвободныйТомХраненияПоТипуХраненияФайлов(ПрисоединенныйФайл, - ТипХраненияФайла, - Перечисления.ВидыХраненияФайлов.ОперационноеХранение); + ТипХраненияФайла, Перечисления.ВидыХраненияФайлов.ОперационноеХранение); КонецЕсли; Если ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВТомахТомНеОпределен Тогда @@ -486,13 +497,13 @@ // Функция СвойстваФайлаВТоме(Файл = Неопределено) Экспорт - СвойстваФайла = Новый Структура; - СвойстваФайла.Вставить("Наименование", ""); - СвойстваФайла.Вставить("Расширение", ""); - СвойстваФайла.Вставить("Том", Справочники.ТомаХраненияФайлов.ПустаяСсылка()); - СвойстваФайла.Вставить("ПутьКФайлу", ""); - СвойстваФайла.Вставить("ВладелецФайла", Неопределено); - СвойстваФайла.Вставить("НомерВерсии", ""); + Результат = Новый Структура; + Результат.Вставить("Наименование", ""); + Результат.Вставить("Расширение", ""); + Результат.Вставить("Том", Справочники.ТомаХраненияФайлов.ПустаяСсылка()); + Результат.Вставить("ПутьКФайлу", ""); + Результат.Вставить("ВладелецФайла", Неопределено); + Результат.Вставить("НомерВерсии", ""); Если ЗначениеЗаполнено(Файл) Тогда @@ -523,19 +534,19 @@ ИменаРеквизитов = СтрСоединить(РеквизитыФайла, ","); РеквизитыФайла = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(СсылкаНаВерсию, ИменаРеквизитов); - ЗаполнитьЗначенияСвойств(СвойстваФайла, РеквизитыФайла); + ЗаполнитьЗначенияСвойств(Результат, РеквизитыФайла); Если РеквизитыФайла.Свойство("Владелец") И ЗначениеЗаполнено(РеквизитыФайла.Владелец) Тогда - СвойстваФайла.ВладелецФайла = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(РеквизитыФайла.Владелец, "ВладелецФайла"); + Результат.ВладелецФайла = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(РеквизитыФайла.Владелец, "ВладелецФайла"); КонецЕсли; КонецЕсли; - Если ТипЗнч(СвойстваФайла.НомерВерсии) <> Тип("Строка") Тогда - СвойстваФайла.НомерВерсии = Строка(СвойстваФайла.НомерВерсии); + Если ТипЗнч(Результат.НомерВерсии) <> Тип("Строка") Тогда + Результат.НомерВерсии = Строка(Результат.НомерВерсии); КонецЕсли; - Возврат СвойстваФайла; + Возврат Результат; КонецФункции @@ -592,42 +603,14 @@ КонецПопытки КонецФункции -// Возвращает полный путь к корневому каталогу тома хранения файлов. -// -// Параметры: -// Том - СправочникСсылка.ТомаХраненияФайлов - том, путь к корневому каталогу которого необходимо получить. -// -// Возвращаемое значение: -// Строка - полный путь к корневому каталогу тома. -// +// см. РаботаСФайламиСлужебныйПовтИсп.ПолныйПутьТома Функция ПолныйПутьТома(Том) Экспорт - - УстановитьОтключениеБезопасногоРежима(Истина); - УстановитьПривилегированныйРежим(Истина); - - КорневойКаталог = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Том, - ?(ОбщегоНазначения.ЭтоWindowsСервер(), "ПолныйПутьWindows", "ПолныйПутьLinux")); - - Если ОбщегоНазначения.РазделениеВключено() Тогда - МодульРаботаВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("РаботаВМоделиСервиса"); - ЗначениеРазделителя = ""; - Если ПутьКТомуБезУчетаРегиональныхНастроек() Тогда - ЗначениеРазделителя = ?(МодульРаботаВМоделиСервиса.ИспользованиеРазделителяСеанса(), - Формат(МодульРаботаВМоделиСервиса.ЗначениеРазделителяСеанса(), "ЧГ=;"), - ""); - Иначе - ЗначениеРазделителя = ?(МодульРаботаВМоделиСервиса.ИспользованиеРазделителяСеанса(), - МодульРаботаВМоделиСервиса.ЗначениеРазделителяСеанса(), - ""); - КонецЕсли; - Иначе - ЗначениеРазделителя = ""; - КонецЕсли; - - Возврат СтрЗаменить(КорневойКаталог, "%z",ЗначениеРазделителя); - + Результат = РаботаСФайламиСлужебныйПовтИсп.ПолныйПутьТома(Том); + Возврат Результат; КонецФункции +#Область ОбъемТомов + // Возвращает суммарный размер всех файлов в томе в байтах. // // Параметры: @@ -637,29 +620,104 @@ // Число - суммарный размер файлов в томе. // Функция ОбъемТома(Том) Экспорт + Тома = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Том); + ОбъемыТомов = ОбъемыТомов(Тома); + Результат = ОбъемыТомов.Получить(Том); + Возврат Результат; +КонецФункции + +// Возвращает размеры всех файлов в каждом указанном томе в байтах. +// +// Параметры: +// Тома - Массив из СправочникСсылка.ТомаХраненияФайлов +// +// Возвращаемое значение: +// Соответствие из КлючИЗначение: +// * Ключ - СправочникСсылка.ТомаХраненияФайлов +// * Значение - Число - размер тома в байтах +// +Функция ОбъемыТомов(Тома) + Результат = Новый Соответствие; + Для Каждого Том Из Тома Цикл + Результат.Вставить(Том, 0); + КонецЦикла; - ОбъемТома = 0; Если Не ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда - Возврат ОбъемТома; + Возврат Результат; КонецЕсли; - - Запрос = Новый Запрос; - ТипыПрисоединенныхФайлов = Метаданные.ОпределяемыеТипы.ПрисоединенныйФайл.Тип.Типы(); - - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ - | ЕСТЬNULL(СУММА(Версии.Размер), 0) КАК РазмерФайлов + + МетаданныеСправочниковСФайламиДляРасчетаОбъемаТомов = МетаданныеСправочниковСФайламиДляРасчетаОбъемаТомов(); + Порции = РазбитьНаПорции(МетаданныеСправочниковСФайламиДляРасчетаОбъемаТомов, 250); + Для Каждого Порция Из Порции Цикл + //@skip-check query-in-loop + ПоместитьОбъемТомовПорцииСправочниковСФайлами(Результат, Тома, Порция); + КонецЦикла; + Возврат Результат; +КонецФункции + +Процедура ПоместитьОбъемТомовПорцииСправочниковСФайлами(ОбъемыТомов, Тома, Порция) + ТекстЗапросаОбъемаТомовИзПорцииСправочников = ТекстЗапросаОбъемаТомовИзПорцииСправочников(Порция); + Запрос = Новый Запрос(ТекстЗапросаОбъемаТомовИзПорцииСправочников); + Запрос.УстановитьПараметр("Тома", Тома); + РезультатЗапроса = Запрос.Выполнить(); + Выборка = РезультатЗапроса.Выбрать(); + Пока Выборка.Следующий() Цикл + ОбъемТома = ОбъемыТомов.Получить(Выборка.Том) + Выборка.Размер; + ОбъемыТомов.Вставить(Выборка.Том, ОбъемТома); + КонецЦикла; +КонецПроцедуры + +Функция ТекстЗапросаОбъемаТомовИзПорцииСправочников(Порция) + ЧастиВложенногоЗапроса = Новый Массив; + + ШаблонВложенногоЗапроса = "ВЫБРАТЬ + | ПрисоединенныеФайлы.Том, + | ПрисоединенныеФайлы.Размер |ИЗ - | Справочник.ВерсииФайлов КАК Версии + | &ИмяТаблицы КАК ПрисоединенныеФайлы |ГДЕ - | Версии.Том = &Том"; + | ПрисоединенныеФайлы.Том В (&Тома)"; - Для Каждого Тип Из ТипыПрисоединенныхФайлов Цикл - - Если Тип = Тип("СправочникСсылка.ВерсииФайлов") - Или Тип = Тип("СправочникСсылка.ИдентификаторыОбъектовМетаданных") Тогда - + Для Каждого МетаданныеСправочника Из Порция Цикл + ЧастьВложенногоЗапроса = СтрЗаменить(ШаблонВложенногоЗапроса, "&ИмяТаблицы", МетаданныеСправочника.ПолноеИмя()); + ЧастиВложенногоЗапроса.Добавить(ЧастьВложенногоЗапроса); + КонецЦикла; + + ТекстВложенногоЗапроса = СтрСоединить(ЧастиВложенногоЗапроса, Символы.ПС + "ОБЪЕДИНИТЬ ВСЕ" + Символы.ПС); + ТекстВложенногоЗапроса = СтрШаблон("(%1)", ТекстВложенногоЗапроса); + + ШаблонЗапроса = "ВЫБРАТЬ + | ВложенныйЗапрос.Том КАК Том, + | СУММА(ВложенныйЗапрос.Размер) КАК Размер + |ИЗ + | &ТекстВложенногоЗапроса КАК ВложенныйЗапрос + |СГРУППИРОВАТЬ ПО + | ВложенныйЗапрос.Том"; + Результат = СтрЗаменить(ШаблонЗапроса, "&ТекстВложенногоЗапроса", ТекстВложенногоЗапроса); + Возврат Результат; +КонецФункции + +Функция РазбитьНаПорции(ИсходныйМассив, РазмерПорции) + Результат = Новый Массив(); + РазмерВложеннойПорции = 0; + Для Каждого Элемент Из ИсходныйМассив Цикл + Если РазмерВложеннойПорции = 0 Тогда + Порция = Новый Массив(); + Результат.Добавить(Порция); + КонецЕсли; + Порция.Добавить(Элемент); + РазмерВложеннойПорции = РазмерВложеннойПорции + 1; + Если РазмерВложеннойПорции = РазмерПорции Тогда + РазмерВложеннойПорции = 0; + КонецЕсли; + КонецЦикла; + Возврат Результат; +КонецФункции + +Функция МетаданныеСправочниковСФайламиДляРасчетаОбъемаТомов() + Результат = Новый Массив(); + Для Каждого Тип Из Метаданные.ОпределяемыеТипы.ПрисоединенныйФайл.Тип.Типы() Цикл + Если Тип = Тип("СправочникСсылка.ИдентификаторыОбъектовМетаданных") Тогда Продолжить; КонецЕсли; @@ -667,33 +725,13 @@ Если МетаданныеСправочника.Реквизиты.Найти("ТекущаяВерсия") <> Неопределено Тогда Продолжить; КонецЕсли; - - ТекстЗапросаПоСправочнику = "ВЫБРАТЬ - | ЕСТЬNULL(СУММА(ПрисоединенныеФайлы.Размер), 0) - |ИЗ - | &ИмяСправочника КАК ПрисоединенныеФайлы - |ГДЕ - | ПрисоединенныеФайлы.Том = &Том"; - - Запрос.Текст = Запрос.Текст + " - | - |ОБЪЕДИНИТЬ ВСЕ - | - |" + СтрЗаменить(ТекстЗапросаПоСправочнику, "&ИмяСправочника", - Метаданные.НайтиПоТипу(Тип).ПолноеИмя()); - + Результат.Добавить(МетаданныеСправочника); КонецЦикла; - - Запрос.Параметры.Вставить("Том", Том); - Выборка = Запрос.Выполнить().Выбрать(); - Пока Выборка.Следующий() Цикл - ОбъемТома = ОбъемТома + Выборка.РазмерФайлов; - КонецЦикла; - - Возврат ОбъемТома; - + Возврат Результат; КонецФункции +#КонецОбласти + // Проверяет наличие файла в томе. // // Параметры: @@ -894,87 +932,6 @@ Возврат Результат; КонецФункции -// Возвращает размеры всех файлов в каждом указанном томе в байтах. -// -// Параметры: -// Тома - Массив из СправочникСсылка.ТомаХраненияФайлов -// -// Возвращаемое значение: -// Соответствие из КлючИЗначение: -// * Ключ - СправочникСсылка.ТомаХраненияФайлов -// * Значение - Число -// -Функция ОбъемыТомов(Тома) - - Результат = Новый Соответствие; - Для Каждого Том Из Тома Цикл - Результат[Том] = 0; - КонецЦикла; - - Если Не ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда - Возврат Результат; - КонецЕсли; - - ТипыПрисоединенныхФайлов = Метаданные.ОпределяемыеТипы.ПрисоединенныйФайл.Тип.Типы(); - ТекстыЗапросов = Новый Массив; - - ТекстЗапроса = - "ВЫБРАТЬ - | Версии.Том КАК Том, - | ЕСТЬNULL(Версии.Размер, 0) КАК РазмерФайлов - |ИЗ - | Справочник.ВерсииФайлов КАК Версии - |ГДЕ - | Версии.Том В (&Тома)"; - ТекстыЗапросов.Добавить(ТекстЗапроса); - - ШаблонТекстаЗапроса = "ВЫБРАТЬ - | ПрисоединенныеФайлы.Том, - | ЕСТЬNULL(ПрисоединенныеФайлы.Размер, 0) - |ИЗ - | &ИмяСправочника КАК ПрисоединенныеФайлы - |ГДЕ - | ПрисоединенныеФайлы.Том В (&Тома)"; - - Для Каждого Тип Из ТипыПрисоединенныхФайлов Цикл - - Если Тип = Тип("СправочникСсылка.ВерсииФайлов") - Или Тип = Тип("СправочникСсылка.ИдентификаторыОбъектовМетаданных") Тогда - - Продолжить; - КонецЕсли; - - МетаданныеСправочника = Метаданные.НайтиПоТипу(Тип); - Если МетаданныеСправочника.Реквизиты.Найти("ТекущаяВерсия") <> Неопределено Тогда - Продолжить; - КонецЕсли; - - ТекстыЗапросов.Добавить(СтрЗаменить(ШаблонТекстаЗапроса, "&ИмяСправочника", - Метаданные.НайтиПоТипу(Тип).ПолноеИмя())); - КонецЦикла; - - ТекстЗапроса = - "ВЫБРАТЬ - | ВложенныйЗапрос.Том, - | СУММА(ВложенныйЗапрос.РазмерФайлов) КАК РазмерФайлов - |ИЗ - | &ТекстЗапросаПрисоединенныхФайлов КАК ВложенныйЗапрос - |СГРУППИРОВАТЬ ПО - | ВложенныйЗапрос.Том"; - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТекстЗапросаПрисоединенныхФайлов", - "(" + СтрСоединить(ТекстыЗапросов, Символы.ПС + "ОБЪЕДИНИТЬ ВСЕ" + Символы.ПС) + ")"); // @query-part-3 - - Запрос = Новый Запрос(ТекстЗапроса); - Запрос.Параметры.Вставить("Тома", Тома); - Выборка = Запрос.Выполнить().Выбрать(); - Пока Выборка.Следующий() Цикл - Результат[Выборка.Том] = Выборка.РазмерФайлов; - КонецЦикла; - - Возврат Результат; - -КонецФункции - // Для функции см. ПолныйПутьТома. // // Возвращаемое значение: @@ -2368,7 +2325,8 @@ // СправочникСсылка.ТомаХраненияФайлов // Функция СвободныйТом(ПрисоединенныйФайл, Знач ВидТомаХраненияФайлов = Неопределено, Знач СпособХраненияФайлов = Неопределено) Экспорт - + Перем Результат; + Если ВидТомаХраненияФайлов = Неопределено Тогда ВидТомаХраненияФайлов = Перечисления.ВидыХраненияФайлов.ОперационноеХранение; КонецЕсли; @@ -2391,46 +2349,55 @@ |УПОРЯДОЧИТЬ ПО | ТомаХраненияФайлов.ПорядокЗаполнения"; - Запрос.УстановитьПараметр("ВидТомаХраненияФайлов" , ВидТомаХраненияФайлов); - Запрос.УстановитьПараметр("СпособХраненияФайлов" , СпособХраненияФайлов); - Запрос.УстановитьПараметр("ЛюбойСпособХраненияФайлов" , СпособХраненияФайлов = "ВТомахСЛюбымСпособомХранения"); + Запрос.УстановитьПараметр("ВидТомаХраненияФайлов", ВидТомаХраненияФайлов); + Запрос.УстановитьПараметр("СпособХраненияФайлов", СпособХраненияФайлов); + Запрос.УстановитьПараметр("ЛюбойСпособХраненияФайлов", СпособХраненияФайлов = "ВТомахСЛюбымСпособомХранения"); - Результат = Запрос.Выполнить(); - Если Результат.Пустой() Тогда - ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не удалось добавить файл ""%1"", - |т.к. не настроено ни одного тома для хранения файлов. - |Обратитесь к администратору.'"), - ПрисоединенныйФайл.Наименование + "." + ПрисоединенныйФайл.Расширение); + РезультатЗапроса = Запрос.Выполнить(); + ОписанияТомов = РезультатЗапроса.Выгрузить(); + Если ЗначениеЗаполнено(ОписанияТомов) Тогда + ОбъемыТомов = Неопределено; + + Для каждого ОписаниеТома Из ОписанияТомов Цикл + Том = ОписаниеТома.Ссылка; + Если ОписаниеТома.МаксимальныйРазмер = 0 Тогда + Результат = Том; + Иначе + Если ОбъемыТомов = Неопределено Тогда + СписокТомов = ОписанияТомов.ВыгрузитьКолонку("Ссылка"); + //@skip-check query-in-loop + ОбъемыТомов = ОбъемыТомов(СписокТомов); + КонецЕсли; + + МаксимальныйРазмерТомаВБайтах = ОписаниеТома.МаксимальныйРазмер * 1024 * 1024; + Если ОбъемыТомов[Том] + ПрисоединенныйФайл.Размер <= МаксимальныйРазмерТомаВБайтах Тогда + Результат = Том; + КонецЕсли; + КонецЕсли; + + Если ЗначениеЗаполнено(Результат) Тогда + Прервать; + КонецЕсли; + КонецЦикла; + + Если НЕ ЗначениеЗаполнено(Результат) Тогда + ШаблонИсключения = НСтр("ru = 'Не удалось добавить файл ""%1.%2"": в томах хранения файлов недостаточно места. + |Обратитесь к администратору.'"); + + ТекстИсключения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонИсключения, + ПрисоединенныйФайл.Наименование, ПрисоединенныйФайл.Расширение); + ВызватьИсключение ТекстИсключения; + КонецЕсли; + Иначе + ШаблонИсключения = НСтр("ru = 'Не удалось добавить файл ""%1.%2"": не настроено ни одного тома для хранения файлов. + |Обратитесь к администратору.'"); + + ТекстИсключения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонИсключения, + ПрисоединенныйФайл.Наименование, ПрисоединенныйФайл.Расширение); + ВызватьИсключение ТекстИсключения; КонецЕсли; - - ТомаХраненияФайлов = Результат.Выгрузить(); - ОбъемыТомов = Неопределено; - - Для каждого ТомХраненияФайлов Из ТомаХраненияФайлов Цикл - - Если ТомХраненияФайлов.МаксимальныйРазмер = 0 Тогда - Возврат ТомХраненияФайлов.Ссылка; - КонецЕсли; - Если ОбъемыТомов = Неопределено Тогда - // @skip-check query-in-loop - Разовый вызов - ОбъемыТомов = ОбъемыТомов(ТомаХраненияФайлов.ВыгрузитьКолонку("Ссылка")); - КонецЕсли; - ОбъемТома = ОбъемыТомов[ТомХраненияФайлов.Ссылка]; - Если ОбъемТома + ПрисоединенныйФайл.Размер <= ТомХраненияФайлов.МаксимальныйРазмер * 1024 * 1024 Тогда - Возврат ТомХраненияФайлов.Ссылка; - КонецЕсли; - - КонецЦикла; - - ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не удалось добавить файл ""%1"", - |т.к. в томах хранения файлов недостаточно места. - |Обратитесь к администратору.'"), - ПрисоединенныйФайл.Наименование + "." + ПрисоединенныйФайл.Расширение); - ВызватьИсключение ТекстОшибки; - + Возврат Результат; КонецФункции Функция СвойстваФайловойСистемы(Каталог) @@ -2474,7 +2441,9 @@ Методы.Вставить("ЗаполнитьНастройкиХраненияФайлов"); Методы.Вставить("УстановитьСпособФормированияПутиТома"); - Методы.Вставить("ПроверкаСсылокНаНесуществующиеФайлыВТоме"); + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонтрольВеденияУчета") Тогда + Методы.Вставить("ПроверкаСсылокНаНесуществующиеФайлыВТоме"); + КонецЕсли; КонецПроцедуры diff --git a/Конфигурация/CommonModules/РаботаСФайламиКлиент/Ext/Module.bsl b/Конфигурация/CommonModules/РаботаСФайламиКлиент/Ext/Module.bsl index ef70e5573..8dbaf9996 100644 --- a/Конфигурация/CommonModules/РаботаСФайламиКлиент/Ext/Module.bsl +++ b/Конфигурация/CommonModules/РаботаСФайламиКлиент/Ext/Module.bsl @@ -2041,7 +2041,7 @@ НомерЭлементаСтрокой = НомерЭлемента; Иначе НомерЭлементаЧислом = НомерЭлемента; - НомерЭлементаСтрокой = Формат(НомерЭлемента, "ЧГ=;"); + НомерЭлементаСтрокой = Формат(НомерЭлемента, "ЧН=0; ЧГ=;"); КонецЕсли; ИмяРеквизита = Форма.ПараметрыРаботыСФайлами.ОписанияЭлементовФормы[НомерЭлементаЧислом].ПутьКДаннымИзображения; diff --git a/Конфигурация/CommonModules/РаботаСФайламиСлужебный/Ext/Module.bsl b/Конфигурация/CommonModules/РаботаСФайламиСлужебный/Ext/Module.bsl index ea432e90b..a8cb9403f 100644 --- a/Конфигурация/CommonModules/РаботаСФайламиСлужебный/Ext/Module.bsl +++ b/Конфигурация/CommonModules/РаботаСФайламиСлужебный/Ext/Module.bsl @@ -108,19 +108,19 @@ // Процедура ЗаполнитьДополнительныеДанныеФайла(Результат, ПрисоединенныйФайл, ВерсияФайла = Неопределено) Экспорт - СправочникПоддерживаетВозможностьХранитьВерсии = ОбщегоНазначения.ЕстьРеквизитОбъекта("ТекущаяВерсия", - Метаданные.НайтиПоТипу(ТипЗнч(ПрисоединенныйФайл))); - Если СправочникПоддерживаетВозможностьХранитьВерсии И ЗначениеЗаполнено(ПрисоединенныйФайл.ТекущаяВерсия) Тогда + МетаданныеОбъектаФайла = ПрисоединенныйФайл.Метаданные(); + ЕстьВозможностьХранитьВерсии = ОбщегоНазначения.ЕстьРеквизитОбъекта("ТекущаяВерсия", МетаданныеОбъектаФайла); + Если ЕстьВозможностьХранитьВерсии И ЗначениеЗаполнено(ПрисоединенныйФайл.ТекущаяВерсия) Тогда ТекущаяВерсияФайла = ПрисоединенныйФайл.ТекущаяВерсия; Иначе ТекущаяВерсияФайла = ПрисоединенныйФайл.Ссылка; КонецЕсли; - + Результат.Вставить("ТекущаяВерсия", ТекущаяВерсияФайла); Если ВерсияФайла <> Неопределено Тогда Результат.Вставить("Версия", ВерсияФайла); - ИначеЕсли СправочникПоддерживаетВозможностьХранитьВерсии И ЗначениеЗаполнено(ПрисоединенныйФайл.ТекущаяВерсия) Тогда + ИначеЕсли ЕстьВозможностьХранитьВерсии И ЗначениеЗаполнено(ПрисоединенныйФайл.ТекущаяВерсия) Тогда Результат.Вставить("Версия", ПрисоединенныйФайл.ТекущаяВерсия); Иначе Результат.Вставить("Версия", ПрисоединенныйФайл.Ссылка); @@ -524,45 +524,58 @@ // Функция ДвоичныеДанныеФайла(Знач ПрисоединенныйФайл, Знач ВызыватьИсключение = Истина, ПолучениеФайлаИзАрхива = Ложь) Экспорт - ОбщегоНазначенияКлиентСервер.ПроверитьПараметр("РаботаСФайлами.ДвоичныеДанныеФайла", "ПрисоединенныйФайл", - ПрисоединенныйФайл, Метаданные.ОпределяемыеТипы.ПрисоединенныйФайл.Тип); - - ФайлОбъект = ФайлОбъект(ПрисоединенныйФайл); - Если (ФайлОбъект = Неопределено Или ФайлОбъект.ЭтоГруппа) И Не ВызыватьИсключение Тогда - Возврат Неопределено; - КонецЕсли; - - ОбщегоНазначенияКлиентСервер.Проверить(ФайлОбъект <> Неопределено, - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Недопустимое значение параметра %1'"), "ПрисоединенныйФайл"), - "РаботаСФайлами.ДвоичныеДанныеФайла"); - ОбщегоНазначенияКлиентСервер.Проверить(Не ФайлОбъект.ЭтоГруппа, - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Недопустимое значение параметра %1 (папка файлов ""%2"")'"), - "ПрисоединенныйФайл", ОбщегоНазначения.ПредметСтрокой(ПрисоединенныйФайл)), - "РаботаСФайлами.ДвоичныеДанныеФайла"); - - УстановитьОтключениеБезопасногоРежима(Истина); - УстановитьПривилегированныйРежим(Истина); - - Если РаботаСФайламиВХранилищеДвоичныхДанныхСлужебный.ТипХраненияНеИспользуетДиски(ФайлОбъект.ТипХраненияФайла) Тогда + ИмяФункции = "РаботаСФайлами.ДвоичныеДанныеФайла"; + ОписаниеТипа = Метаданные.ОпределяемыеТипы.ПрисоединенныйФайл.Тип; + ОбщегоНазначенияКлиентСервер.ПроверитьПараметр(ИмяФункции, "ПрисоединенныйФайл", ПрисоединенныйФайл, ОписаниеТипа); - Результат = РаботаСФайлами.ХранилищеФайлаИзИнформационнойБазы(ФайлОбъект.Ссылка, ПолучениеФайлаИзАрхива); - Если ТипЗнч(Результат) = Тип("ХранилищеЗначения") Тогда - Результат = Результат.Получить(); - Если ТипЗнч(Результат) = Тип("ДвоичныеДанные") Тогда - Возврат Результат; - ИначеЕсли ТипЗнч(Результат) = Тип("Картинка") Тогда - Возврат Результат.ПолучитьДвоичныеДанные(); - КонецЕсли; + Результат = Неопределено; + + ФайлОбъект = ФайлОбъект(ПрисоединенныйФайл); + Если ФайлОбъект = Неопределено Тогда + Если ВызыватьИсключение Тогда + ШаблонПроверки = НСтр("ru = 'Недопустимое значение параметра %1'"); + СообщениеПроверки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонПроверки, "ПрисоединенныйФайл"); + ОбщегоНазначенияКлиентСервер.Проверить(Ложь, СообщениеПроверки, ИмяФункции); КонецЕсли; - - СообщитьОбОшибкеФайлНеНайден(ФайлОбъект, ВызыватьИсключение, ПолучениеФайлаИзАрхива); - Возврат Неопределено; - + + ИначеЕсли ФайлОбъект.ЭтоГруппа Тогда + Если ВызыватьИсключение Тогда + ШаблонПроверки = НСтр("ru = 'Недопустимое значение параметра %1 (папка файлов ""%2"")'"); + ПредставлениеФайла = ОбщегоНазначения.ПредметСтрокой(ПрисоединенныйФайл); + СообщениеПроверки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонПроверки, "ПрисоединенныйФайл", ПредставлениеФайла); + ОбщегоНазначенияКлиентСервер.Проверить(Ложь, СообщениеПроверки, ИмяФункции); + КонецЕсли; Иначе - Возврат РаботаСФайламиВТомахСлужебный.ДанныеФайла(ПрисоединенныйФайл, ВызыватьИсключение, ПолучениеФайлаИзАрхива); + УстановитьОтключениеБезопасногоРежима(Истина); + УстановитьПривилегированныйРежим(Истина); + + Если РаботаСФайламиВХранилищеДвоичныхДанныхСлужебный.ТипХраненияНеИспользуетДиски(ФайлОбъект.ТипХраненияФайла) Тогда + ХранилищеФайлаИзИнформационнойБазы = РаботаСФайлами.ХранилищеФайлаИзИнформационнойБазы(ФайлОбъект.Ссылка, ПолучениеФайлаИзАрхива); + Если ТипЗнч(ХранилищеФайлаИзИнформационнойБазы) = Тип("ХранилищеЗначения") Тогда + ЗначениеХранилища = ХранилищеФайлаИзИнформационнойБазы.Получить(); + ТипЗначенияХранилища = ТипЗнч(ЗначениеХранилища); + + Если ТипЗначенияХранилища = Тип("ДвоичныеДанные") Тогда + Результат = ЗначениеХранилища; + + ИначеЕсли ТипЗначенияХранилища = Тип("Картинка") Тогда + Результат = ЗначениеХранилища.ПолучитьДвоичныеДанные(); + + КонецЕсли; + КонецЕсли; + + Если Результат = Неопределено Тогда + СообщитьОбОшибкеФайлНеНайден(ФайлОбъект, ВызыватьИсключение, ПолучениеФайлаИзАрхива); + КонецЕсли; + + Иначе + Результат = РаботаСФайламиВТомахСлужебный.ДанныеФайла(ФайлОбъект, ВызыватьИсключение, ПолучениеФайлаИзАрхива); + + КонецЕсли; + КонецЕсли; + + Возврат Результат; КонецФункции @@ -1090,50 +1103,73 @@ // Возвращает структуру объекта файла. // +// Параметры: +// ПрисоединенныйФайл - ОпределяемыйТип.ПрисоединенныйФайл +// +// Возвращаемое значение: +// Структура: +// * Ссылка - ОпределяемыйТип.ПрисоединенныйФайл +// * ТипХраненияФайла - ПеречислениеСсылка.ТипыХраненияФайлов +// * ВладелецФайла - ОпределяемыйТип.ВладелецПрисоединенныхФайлов +// * Наименование - Строка +// * Расширение - Строка +// * Том - СправочникСсылка.ТомаХраненияФайлов +// * ПутьКФайлу - Строка +// * ПометкаУдаления - Булево +// * ЭтоГруппа - Булево +// * НомерВерсии - Строка +// Функция ФайлОбъект(Знач ПрисоединенныйФайл) Экспорт - - ФайлОбъект = Неопределено; + + Результат = Неопределено; МетаданныеОбъектаФайла = Метаданные.НайтиПоТипу(ТипЗнч(ПрисоединенныйФайл)); - - // Это справочник файлов. + Если ОбщегоНазначения.ЕстьРеквизитОбъекта("ВладелецФайла", МетаданныеОбъектаФайла) Тогда - ЕстьТекущаяВерсия = Ложь; - Если ОбщегоНазначения.ЕстьРеквизитОбъекта("ТекущаяВерсия", МетаданныеОбъектаФайла) Тогда - ТекущаяВерсия = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ПрисоединенныйФайл, "ТекущаяВерсия"); - ЕстьТекущаяВерсия = ЗначениеЗаполнено(ТекущаяВерсия) И ОбщегоНазначения.СсылкаСуществует(ТекущаяВерсия); - КонецЕсли; - Если ЕстьТекущаяВерсия Тогда // С возможностью хранить версии - ИменаРеквизитов = "Ссылка,ТипХраненияФайла,Наименование,Расширение,Том,ПутьКФайлу,ПометкаУдаления"; - Если МетаданныеОбъектаФайла.Иерархический Тогда - ИменаРеквизитов = ИменаРеквизитов + "," + "ЭтоГруппа"; - КонецЕсли; - ФайлОбъект = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ТекущаяВерсия, ИменаРеквизитов); - ФайлОбъект.Вставить("ВладелецФайла", ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ПрисоединенныйФайл, "ВладелецФайла")); - Если Не МетаданныеОбъектаФайла.Иерархический Тогда - ФайлОбъект.Вставить("ЭтоГруппа", Ложь); - КонецЕсли; - Иначе // Без возможности хранить версии - ИменаРеквизитов = "Ссылка,ТипХраненияФайла,ВладелецФайла,Наименование,Расширение,Том,ПутьКФайлу,ПометкаУдаления"; - Если МетаданныеОбъектаФайла.Иерархический Тогда - ИменаРеквизитов = ИменаРеквизитов + "," + "ЭтоГруппа"; - КонецЕсли; - ФайлОбъект = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ПрисоединенныйФайл, ИменаРеквизитов); - Если Не МетаданныеОбъектаФайла.Иерархический Тогда - ФайлОбъект.Вставить("ЭтоГруппа", Ложь); - КонецЕсли; + ИменаРеквизитов = "Ссылка,ТипХраненияФайла,ВладелецФайла,Наименование,Расширение,Том,ПутьКФайлу,ПометкаУдаления"; + Если МетаданныеОбъектаФайла.Иерархический Тогда + ИменаРеквизитов = ИменаРеквизитов + "," + "ЭтоГруппа"; КонецЕсли; - // Это справочник версий файлов. + ЕстьРеквизитТекущаяВерсия = ОбщегоНазначения.ЕстьРеквизитОбъекта("ТекущаяВерсия", МетаданныеОбъектаФайла); + Если ЕстьРеквизитТекущаяВерсия Тогда + ИменаРеквизитов = ИменаРеквизитов + "," + "ТекущаяВерсия"; + КонецЕсли; + РеквизитыПрисоединенного = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ПрисоединенныйФайл, ИменаРеквизитов); + + ИспользоватьРеквизитыВерсии = ЕстьРеквизитТекущаяВерсия + И ЗначениеЗаполнено(РеквизитыПрисоединенного.ТекущаяВерсия) + И ОбщегоНазначения.СсылкаСуществует(РеквизитыПрисоединенного.ТекущаяВерсия); + + Если ИспользоватьРеквизитыВерсии Тогда + ИменаРеквизитов = "Ссылка,ТипХраненияФайла,Наименование,Расширение,Том,ПутьКФайлу,ПометкаУдаления,НомерВерсии"; + Если МетаданныеОбъектаФайла.Иерархический Тогда + ИменаРеквизитов = ИменаРеквизитов + "," + "ЭтоГруппа"; + КонецЕсли; + Результат = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(РеквизитыПрисоединенного.ТекущаяВерсия, ИменаРеквизитов); + Результат.Вставить("ВладелецФайла", РеквизитыПрисоединенного.ВладелецФайла); + + Иначе + РеквизитыПрисоединенного.Удалить("ТекущаяВерсия"); + + Результат = РеквизитыПрисоединенного; + КонецЕсли; + ИначеЕсли ОбщегоНазначения.ЕстьРеквизитОбъекта("РодительскаяВерсия", МетаданныеОбъектаФайла) Тогда - ФайлОбъект = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ПрисоединенныйФайл, + Результат = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ПрисоединенныйФайл, "Ссылка,ТипХраненияФайла,Наименование,Расширение,Том,ПутьКФайлу,Владелец,ПометкаУдаления"); - ФайлОбъект.Вставить("ВладелецФайла", - ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ФайлОбъект.Владелец, "ВладелецФайла")); - ФайлОбъект.Удалить("Владелец"); - ФайлОбъект.Вставить("ЭтоГруппа", Ложь); + + ВладелецВерсии = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Результат.Владелец, "ВладелецФайла"); + Результат.Вставить("ВладелецФайла", ВладелецВерсии); + Результат.Удалить("Владелец"); КонецЕсли; - - Возврат ФайлОбъект; - + Если Не МетаданныеОбъектаФайла.Иерархический Тогда + Результат.Вставить("ЭтоГруппа", Ложь); + КонецЕсли; + НомерВерсии = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Результат, "НомерВерсии"); + Если НЕ ЗначениеЗаполнено(НомерВерсии) Тогда + Результат.Вставить("НомерВерсии", ""); + КонецЕсли; + Возврат Результат; + КонецФункции #КонецОбласти @@ -10386,9 +10422,15 @@ Методы.Вставить("ДанныеФайлаДляОткрытияАсинхронный", Истина); Методы.Вставить("ДанныеФайлаДляСохраненияАсинхронный", Истина); Методы.Вставить("ДанныеФайлаУправлениеЭлектроннойПочтойАсинхронный", Истина); + Методы.Вставить("ОбновитьСписокЗапрещенныхРасширений"); Методы.Вставить("ОбновитьСписокРасширенийТекстовыхФайлов"); Методы.Вставить("ОбновитьСписокЗапрещенныхРасширенийВОбластиДанных"); + Если ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.БазоваяФункциональность") Тогда + Методы.Вставить("РегламентнаяСинхронизацияФайловWebdav"); + Методы.Вставить("ИзвлечьТекстИзФайлов"); + Методы.Вставить("ОчиститьНенужныеФайлы"); + КонецЕсли; КонецПроцедуры diff --git a/Конфигурация/CommonModules/РаботаСФайламиСлужебныйВМоделиСервиса/Ext/Module.bsl b/Конфигурация/CommonModules/РаботаСФайламиСлужебныйВМоделиСервиса/Ext/Module.bsl index b7ddd2cae..8f9d784f3 100644 --- a/Конфигурация/CommonModules/РаботаСФайламиСлужебныйВМоделиСервиса/Ext/Module.bsl +++ b/Конфигурация/CommonModules/РаботаСФайламиСлужебныйВМоделиСервиса/Ext/Module.bsl @@ -55,6 +55,7 @@ СоответствиеИменПсевдонимам.Вставить("РаботаСФайламиСлужебный.ОчиститьНенужныеФайлы"); СоответствиеИменПсевдонимам.Вставить("РаботаСФайламиСлужебный.РегламентнаяСинхронизацияФайловWebdav"); СоответствиеИменПсевдонимам.Вставить("РегистрыСведений.ХранилищеФайлов.ПеренестиДанные"); + СоответствиеИменПсевдонимам.Вставить("РаботаСФайловымАрхивомСервер.ПеренестиФайлыМеждуОперационнымХранилищемИФайловымАрхивом"); КонецПроцедуры diff --git a/Конфигурация/CommonModules/РаботаСФайламиСлужебныйВызовСервера/Ext/Module.bsl b/Конфигурация/CommonModules/РаботаСФайламиСлужебныйВызовСервера/Ext/Module.bsl index 73fb611aa..162ea4346 100644 --- a/Конфигурация/CommonModules/РаботаСФайламиСлужебныйВызовСервера/Ext/Module.bsl +++ b/Конфигурация/CommonModules/РаботаСФайламиСлужебныйВызовСервера/Ext/Module.bsl @@ -1897,7 +1897,6 @@ КонецФункции - // Находит в регистре сведений ФайлыВРабочемКаталоге информацию о ВерсииФайла: путь к файлу версии в рабочем каталоге, // и статус - на чтение или на редактирование. // @@ -2335,216 +2334,6 @@ КонецПроцедуры -#Область УдалениеДанныхФайловИВерсий - -Функция РезультатУдаленияФайлов(ФайлыИлиВерсии, УникальныйИдентификатор) Экспорт - - УстановитьПривилегированныйРежим(Истина); - - АвторизованныйПользователь = Пользователи.АвторизованныйПользователь(); - РезультатУдаления = Новый Соответствие; - АвторыФайлов = ОбщегоНазначения.ЗначениеРеквизитаОбъектов(ФайлыИлиВерсии, "Автор"); - - Для Каждого ФайлИлиВерсия Из ФайлыИлиВерсии Цикл - - ЭтоВерсияФайла = ТипЗнч(ФайлИлиВерсия) = Тип("СправочникСсылка.ВерсииФайлов"); - Результат = Новый Структура("ТекстПредупреждения, Файлы", "", Новый Массив); - Если АвторыФайлов[ФайлИлиВерсия] = АвторизованныйПользователь Тогда - Если ЭтоВерсияФайла Тогда - // @skip-check query-in-loop - Порционное удаление каждой версии в своей транзакции - УдалитьДанныеВерсии(ФайлИлиВерсия, УникальныйИдентификатор, Результат); - Иначе - // @skip-check query-in-loop - Порционное удаление каждого файла в своей транзакции - УдалитьДанныеФайла(ФайлИлиВерсия, УникальныйИдентификатор, Результат, АвторизованныйПользователь); - КонецЕсли; - Иначе - Результат.ТекстПредупреждения = ?(ЭтоВерсияФайла, НСтр("ru = 'Только автор может удалить версию файла.'"), - НСтр("ru = 'Только автор может удалить файл.'")); - КонецЕсли; - РезультатУдаления.Вставить(ФайлИлиВерсия, Результат); - - КонецЦикла; - - Возврат РезультатУдаления; - -КонецФункции -Процедура УдалитьДанныеВерсии(ФайлИлиВерсия, УникальныйИдентификатор, Результат) - - БлокировкаДанных = Новый БлокировкаДанных; - ЭлементБлокировкиДанных = БлокировкаДанных.Добавить(ФайлИлиВерсия.Метаданные().ПолноеИмя()); - ЭлементБлокировкиДанных.УстановитьЗначение("Ссылка", ФайлИлиВерсия); - - НачатьТранзакцию(); - Попытка - - БлокировкаДанных.Заблокировать(); - ПараметрыТекущейВерсииВладельца = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ФайлИлиВерсия, "Владелец,ТекущаяВерсия"); - Если ПараметрыТекущейВерсииВладельца.ТекущаяВерсия = ФайлИлиВерсия Тогда - - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ - | ВерсииФайлов.Ссылка КАК Ссылка - |ИЗ - | Справочник.ВерсииФайлов КАК ВерсииФайлов - |ГДЕ - | ВерсииФайлов.Владелец = &Владелец - | И ВерсииФайлов.Ссылка <> &Ссылка - | И НЕ ВерсииФайлов.ПометкаУдаления - | - |УПОРЯДОЧИТЬ ПО - | ВерсииФайлов.НомерВерсии УБЫВ"; - Запрос.УстановитьПараметр("Владелец", ПараметрыТекущейВерсииВладельца.Владелец); - Запрос.УстановитьПараметр("Ссылка", ФайлИлиВерсия); - ВерсииВладельца = Запрос.Выполнить().Выбрать(); - - Если ВерсииВладельца.Следующий() Тогда - РаботаСФайламиСлужебный.ОбновитьВерсиюВФайле(ПараметрыТекущейВерсииВладельца.Владелец, - ВерсииВладельца.Ссылка, Неопределено, УникальныйИдентификатор); - КонецЕсли; - - КонецЕсли; - - Результат.Файлы.Добавить(ФайлИлиВерсия); - УдалитьДанные(ФайлИлиВерсия, УникальныйИдентификатор); - ЗафиксироватьТранзакцию(); - - Исключение - ОтменитьТранзакцию(); - ВызватьИсключение; - КонецПопытки; - -КонецПроцедуры - -Процедура УдалитьДанныеФайла(Файл, УникальныйИдентификатор, Результат, АвторизованныйПользователь) - - БлокировкаДанных = Новый БлокировкаДанных; - ЭлементБлокировкиДанных = БлокировкаДанных.Добавить(Файл.Метаданные().ПолноеИмя()); - ЭлементБлокировкиДанных.УстановитьЗначение("Ссылка", Файл); - - ЕстьВерсииФайла = ТипЗнч(Файл) = Тип("СправочникСсылка.Файлы"); - Если ЕстьВерсииФайла Тогда - ЭлементБлокировкиДанных = БлокировкаДанных.Добавить(Метаданные.Справочники.ВерсииФайлов.ПолноеИмя()); - ЭлементБлокировкиДанных.УстановитьЗначение("Владелец", Файл); - ЭлементБлокировкиДанных.Режим = РежимБлокировкиДанных.Разделяемый; - КонецЕсли; - - НачатьТранзакцию(); - Попытка - БлокировкаДанных.Заблокировать(); - - Если ЕстьВерсииФайла Тогда - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ - | ВерсииФайлов.Ссылка КАК Ссылка, - | ВерсииФайлов.Автор КАК Автор - |ИЗ - | Справочник.ВерсииФайлов КАК ВерсииФайлов - |ГДЕ - | ВерсииФайлов.Владелец = &Владелец - | - |УПОРЯДОЧИТЬ ПО - | ВерсииФайлов.НомерВерсии УБЫВ"; - Запрос.УстановитьПараметр("Владелец", Файл); - РезультатЗапроса = Запрос.Выполнить(); - - ЕстьВерсииФайла = Не РезультатЗапроса.Пустой(); - КонецЕсли; - - Если ЕстьВерсииФайла Тогда - Выборка = РезультатЗапроса.Выбрать(); - Иначе - Результат.Файлы.Добавить(Файл); - УдалитьДанные(Файл, УникальныйИдентификатор); - КонецЕсли; - ЗафиксироватьТранзакцию(); - - Исключение - ОтменитьТранзакцию(); - ВызватьИсключение; - КонецПопытки; - - Если Не ЕстьВерсииФайла Тогда - Возврат; - КонецЕсли; - - ВерсияДругогоАвтора = Неопределено; - Пока Выборка.Следующий() Цикл - - Если Выборка.Автор <> АвторизованныйПользователь Тогда - Если ВерсияДругогоАвтора = Неопределено Тогда - ВерсияДругогоАвтора = Выборка.Ссылка; - КонецЕсли; - Продолжить; - КонецЕсли; - - Результат.Файлы.Добавить(Выборка.Ссылка); - УдалитьДанные(Выборка.Ссылка, УникальныйИдентификатор); - - КонецЦикла; - - Если ВерсияДругогоАвтора <> Неопределено Тогда - РаботаСФайламиСлужебный.ОбновитьВерсиюВФайле(Файл, ВерсияДругогоАвтора, Неопределено, УникальныйИдентификатор); - Иначе - Результат.Файлы.Добавить(Файл); - УдалитьДанные(Файл, УникальныйИдентификатор); - КонецЕсли; - -КонецПроцедуры - -Процедура УдалитьДанные(ФайлИлиВерсия, УникальныйИдентификатор) - - БлокировкаДанных = Новый БлокировкаДанных; - ЭлементБлокировкиДанных = БлокировкаДанных.Добавить(ФайлИлиВерсия.Метаданные().ПолноеИмя()); - ЭлементБлокировкиДанных.УстановитьЗначение("Ссылка", ФайлИлиВерсия); - - НачатьТранзакцию(); - Попытка - - БлокировкаДанных.Заблокировать(); - ЗаблокироватьДанныеДляРедактирования(ФайлИлиВерсия,, УникальныйИдентификатор); - - ФайлИлиВерсияОбъект = ФайлИлиВерсия.ПолучитьОбъект(); - Если ФайлИлиВерсияОбъект.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске Тогда - - ПрисоединенныйФайлНаходитсяНаДиске = ПрисоединенныйФайлНаходитсяНаДиске(ФайлИлиВерсия); - Если ПрисоединенныйФайлНаходитсяНаДиске Тогда - - СвойстваФайла = РаботаСФайламиВТомахСлужебный.СвойстваФайлаВТоме(); - ЗаполнитьЗначенияСвойств(СвойстваФайла, ФайлИлиВерсияОбъект); - РаботаСФайламиВТомахСлужебный.УдалитьФайл(РаботаСФайламиВТомахСлужебный.ПолноеИмяФайлаВТоме( - СвойстваФайла)); - - КонецЕсли; - // Изменяем путь к файлу, чтобы он был уникален. - // Т.к. данные на компьютере удалены, то корректность расширения не сохраняем. - ФайлИлиВерсияОбъект.ПутьКФайлу = ФайлИлиВерсияОбъект.ПутьКФайлу + "_remove";//@Non-NLS - Иначе - УстановитьПривилегированныйРежим(Истина); - РегистрыСведений.ХранилищеФайлов.УдалитьДвоичныеДанные(ФайлИлиВерсия); - УстановитьПривилегированныйРежим(Ложь); - КонецЕсли; - - ФайлИлиВерсияОбъект.ПометкаУдаления = Истина; - ФайлИлиВерсияОбъект.ДополнительныеСвойства.Вставить("УдалениеДанных", Истина); - ФайлИлиВерсияОбъект.Записать(); - - РазблокироватьДанныеДляРедактирования(ФайлИлиВерсия, УникальныйИдентификатор); - ЗафиксироватьТранзакцию(); - - Исключение - ОтменитьТранзакцию(); - РазблокироватьДанныеДляРедактирования(ФайлИлиВерсия, УникальныйИдентификатор); - ВызватьИсключение; - КонецПопытки; - -КонецПроцедуры - -#КонецОбласти - -// Информационные - // Функция возвращает количество Файлов, занятых текущим пользователем // в разрезе владельца. // Параметры: diff --git a/Конфигурация/CommonModules/РаботаСФайламиСлужебныйКлиент/Ext/Module.bsl b/Конфигурация/CommonModules/РаботаСФайламиСлужебныйКлиент/Ext/Module.bsl index ce7598a0f..12b3ea5ae 100644 --- a/Конфигурация/CommonModules/РаботаСФайламиСлужебныйКлиент/Ext/Module.bsl +++ b/Конфигурация/CommonModules/РаботаСФайламиСлужебныйКлиент/Ext/Module.bsl @@ -4656,7 +4656,7 @@ #Область ДействиеСФайлом -// Обработчик оповещения, вызываемый из РаботаСФайламиСлужебныйКлиент.ДействиеСФайлом для выполнения операций, +// Обработчик оповещения, вызываемый из см. ДействиеСФайлом для выполнения операций, // завершающих действие с файлом. // Вызывается для методов РаботаСФайламиСлужебный.ДанныеФайлаДляОткрытияАсинхронный и РаботаСФайламиСлужебный.ДанныеФайлаДляСохраненияАсинхронный. // @@ -7610,21 +7610,10 @@ КонецПроцедуры -// Добавляет файлы перетаскиванием в список файлов. -// -// Параметры: -// ВладелецФайла - ЛюбаяСсылка - владелец файла. -// ИдентификаторФормы - УникальныйИдентификатор формы. -// МассивИменФайлов - Массив из Строка - путей к файлам. -// -Процедура ДобавитьФайлыПеретаскиванием(Знач ВладелецФайла, Знач ИдентификаторФормы, Знач МассивИменФайлов) Экспорт +Процедура ДобавитьФайлыПеретаскиванием(Знач ВладелецФайла, Знач ИдентификаторФормы, Знач ВыбранныеФайлы, Знач ГруппаФайлов) Экспорт ПрисоединенныеФайлыМассив = Новый Массив; - ПоместитьВыбранныеФайлыВХранилище( - МассивИменФайлов, - ВладелецФайла, - ПрисоединенныеФайлыМассив, - ИдентификаторФормы); + ПоместитьВыбранныеФайлыВХранилище(ВыбранныеФайлы, ВладелецФайла, ПрисоединенныеФайлыМассив, ИдентификаторФормы, "", ГруппаФайлов); Если ПрисоединенныеФайлыМассив.Количество() = 1 Тогда ПрисоединенныйФайл = ПрисоединенныеФайлыМассив[0]; @@ -11987,83 +11976,6 @@ #Область УдалениеДанныхФайловИВерсий -Процедура УдалитьДанные(ОбработчикЗавершения, ФайлИлиВерсия, УникальныйИдентификатор) Экспорт - - Если Не ЗначениеЗаполнено(ФайлИлиВерсия) Тогда - Возврат; - КонецЕсли; - - Контекст = Новый Структура; - Контекст.Вставить("ФайлИлиВерсия", ФайлИлиВерсия); - Контекст.Вставить("ОбработчикЗавершения", ОбработчикЗавершения); - Контекст.Вставить("УникальныйИдентификатор", УникальныйИдентификатор); - - Если ТипЗнч(ФайлИлиВерсия) <> Тип("СправочникСсылка.ВерсииФайлов") Тогда - ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Удалить файл %1 без возможности восстановления?'"), - Строка(ФайлИлиВерсия)); - ТекстЗаголовка = НСтр("ru = 'Удаление файла'"); - Иначе - ТекстВопроса = НСтр("ru = 'Удалить версию файла без возможности восстановления?'"); - ТекстЗаголовка = НСтр("ru = 'Удаление версии файла'"); - КонецЕсли; - - ПоказатьВопрос(Новый ОписаниеОповещения("УдалитьДанныеПослеОтветаНаВопрос", ЭтотОбъект, Контекст), - ТекстВопроса, РежимДиалогаВопрос.ДаНет,, КодВозвратаДиалога.Нет, ТекстЗаголовка, КодВозвратаДиалога.Нет); - -КонецПроцедуры - -Процедура УдалитьДанныеПослеОтветаНаВопрос(Ответ, Контекст) Экспорт - - Если Ответ <> КодВозвратаДиалога.Да Тогда - Возврат; - КонецЕсли; - - Результат = РаботаСФайламиСлужебныйВызовСервера.РезультатУдаленияФайлов( - ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Контекст.ФайлИлиВерсия), - Контекст.УникальныйИдентификатор); - Результат = Результат[Контекст.ФайлИлиВерсия]; - - Если Результат.Файлы.Количество() > 0 Тогда - Результат.Вставить("ИндексУдаляемогоФайла", 0); - Результат.Вставить("ОбработчикЗавершения", Контекст.ОбработчикЗавершения); - НачатьУдалениеФайлаИзКеша(Результат); - Иначе - ОповеститьОбУдаленииДанных(Контекст.ОбработчикЗавершения, Результат.ТекстПредупреждения); - КонецЕсли; - -КонецПроцедуры - -Процедура НачатьУдалениеФайлаИзКеша(Контекст) - - Оповещение = Новый ОписаниеОповещения("ПослеУдаленияФайлаИзКеша", ЭтотОбъект, Контекст); - УдалитьФайлИзРабочегоКаталога(Оповещение, Контекст.Файлы[Контекст.ИндексУдаляемогоФайла], Истина); - -КонецПроцедуры - -Процедура ПослеУдаленияФайлаИзКеша(РезультатУдаления, Контекст) Экспорт - - Если Контекст.ИндексУдаляемогоФайла < Контекст.Файлы.Количество() - 1 Тогда - Контекст.ИндексУдаляемогоФайла = Контекст.ИндексУдаляемогоФайла + 1; - НачатьУдалениеФайлаИзКеша(Контекст); - Возврат; - КонецЕсли; - - ОповеститьОбУдаленииДанных(Контекст.ОбработчикЗавершения, Контекст.ТекстПредупреждения) - -КонецПроцедуры - -Процедура ОповеститьОбУдаленииДанных(ОбработчикЗавершения, ТекстПредупреждения) - - Оповестить("Запись_Файл", ПараметрыОповещенияЗаписиФайла()); - Если Не ПустаяСтрока(ТекстПредупреждения) Тогда - ПоказатьПредупреждение(ОбработчикЗавершения, ТекстПредупреждения); - ИначеЕсли ОбработчикЗавершения <> Неопределено Тогда - ВыполнитьОбработкуОповещения(ОбработчикЗавершения); - КонецЕсли; - -КонецПроцедуры - Процедура ИзменитьОтборПоПометкеУдаления(Область, КнопкаКоманды) Экспорт КнопкаКоманды.Пометка = Не КнопкаКоманды.Пометка; @@ -12072,74 +11984,6 @@ Не КнопкаКоманды.Пометка, РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный); КонецПроцедуры - -Процедура УдалитьДанныеФайлов(ОбработчикЗавершения, ФайлыИлиВерсии, УникальныйИдентификатор) Экспорт - - Если ФайлыИлиВерсии.Количество() = 0 Тогда - ВыполнитьОбработкуОповещения(ОбработчикЗавершения, Неопределено); - КонецЕсли; - - Контекст = Новый Структура; - Контекст.Вставить("ФайлыИлиВерсии", ФайлыИлиВерсии); - Контекст.Вставить("ОбработчикЗавершения", ОбработчикЗавершения); - Контекст.Вставить("УникальныйИдентификатор", УникальныйИдентификатор); - - ФайлИлиВерсия = ФайлыИлиВерсии[0]; - Если ФайлыИлиВерсии.Количество() = 1 Тогда - ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Удалить файл %1 без возможности восстановления?'"), - Строка(ФайлИлиВерсия)); - ТекстЗаголовка = НСтр("ru = 'Удаление файла'"); - Иначе - ТекстВопроса = НСтр("ru = 'Удалить файлы без возможности восстановления?'"); - ТекстЗаголовка = НСтр("ru = 'Удаление файлов'"); - КонецЕсли; - - ПоказатьВопрос(Новый ОписаниеОповещения("УдалитьДанныеФайловПослеОтветаНаВопрос", ЭтотОбъект, Контекст), - ТекстВопроса, РежимДиалогаВопрос.ДаНет,, КодВозвратаДиалога.Нет, ТекстЗаголовка, КодВозвратаДиалога.Нет); -КонецПроцедуры - -Процедура УдалитьДанныеФайловПослеОтветаНаВопрос(Ответ, Контекст) Экспорт - - Если Ответ <> КодВозвратаДиалога.Да Тогда - Возврат; - КонецЕсли; - - РезультатыУдаления = РаботаСФайламиСлужебныйВызовСервера.РезультатУдаленияФайлов( - Контекст.ФайлыИлиВерсии, Контекст.УникальныйИдентификатор); - - Предупреждения = Новый Соответствие; - Результат = Новый Структура("Файлы,ИндексУдаляемогоФайла,ОбработчикЗавершения,ТекстПредупреждения", - Новый Массив, 0); - - Для Каждого РезультатУдаления Из РезультатыУдаления Цикл - Если РезультатУдаления.Значение.Файлы.Количество() > 0 Тогда - ОбщегоНазначенияКлиентСервер.ДополнитьМассив(Результат.Файлы, РезультатУдаления.Значение.Файлы); - Иначе - Предупреждения.Вставить(РезультатУдаления.Ключ, РезультатУдаления.Значение.ТекстПредупреждения); - КонецЕсли; - КонецЦикла; - - Если Результат.Файлы.Количество() > 0 Тогда - - Результат.Вставить("ИндексУдаляемогоФайла", 0); - Результат.Вставить("ОбработчикЗавершения", Контекст.ОбработчикЗавершения); - - НачатьУдалениеФайлаИзКеша(Результат); - - КонецЕсли; - - Если Предупреждения.Количество() > 0 Тогда - ТекстПредупреждения = ""; - Для Каждого Предупреждение Из Предупреждения Цикл - ТекстПредупреждения = ?(ТекстПредупреждения = "", "", Символы.ПС) - + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='%1: %2'"), - Предупреждение.Ключ, Предупреждение.Значение); - КонецЦикла; - ОповеститьОбУдаленииДанных(Контекст.ОбработчикЗавершения, ТекстПредупреждения); - КонецЕсли; - -КонецПроцедуры #КонецОбласти diff --git a/Конфигурация/CommonModules/РаботаСФайламиСлужебныйПовтИсп/Ext/Module.bsl b/Конфигурация/CommonModules/РаботаСФайламиСлужебныйПовтИсп/Ext/Module.bsl index ab2eb9afc..76dc27bb6 100644 --- a/Конфигурация/CommonModules/РаботаСФайламиСлужебныйПовтИсп/Ext/Module.bsl +++ b/Конфигурация/CommonModules/РаботаСФайламиСлужебныйПовтИсп/Ext/Module.bsl @@ -207,6 +207,41 @@ Возврат Константы.ПутьКТомуБезУчетаРегиональныхНастроек.Получить(); КонецФункции +// Возвращает полный путь к корневому каталогу тома хранения файлов. +// +// Параметры: +// Том - СправочникСсылка.ТомаХраненияФайлов - том, путь к корневому каталогу которого необходимо получить. +// +// Возвращаемое значение: +// Строка - полный путь к корневому каталогу тома. +// +Функция ПолныйПутьТома(Том) Экспорт + УстановитьОтключениеБезопасногоРежима(Истина); + УстановитьПривилегированныйРежим(Истина); + + КорневойКаталог = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Том, + ?(ОбщегоНазначения.ЭтоWindowsСервер(), "ПолныйПутьWindows", "ПолныйПутьLinux")); + + Если ОбщегоНазначения.РазделениеВключено() Тогда + МодульРаботаВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("РаботаВМоделиСервиса"); + ЗначениеРазделителя = ""; + Если РаботаСФайламиСлужебныйПовтИсп.ПутьКТомуБезУчетаРегиональныхНастроек() Тогда + ЗначениеРазделителя = ?(МодульРаботаВМоделиСервиса.ИспользованиеРазделителяСеанса(), + Формат(МодульРаботаВМоделиСервиса.ЗначениеРазделителяСеанса(), "ЧГ=;"), + ""); + Иначе + ЗначениеРазделителя = ?(МодульРаботаВМоделиСервиса.ИспользованиеРазделителяСеанса(), + МодульРаботаВМоделиСервиса.ЗначениеРазделителяСеанса(), + ""); + КонецЕсли; + Иначе + ЗначениеРазделителя = ""; + КонецЕсли; + + Результат = СтрЗаменить(КорневойКаталог, "%z",ЗначениеРазделителя); + Возврат Результат; +КонецФункции + // Возвращает признак того, что данные перенесены в новый регистр. // // Возвращаемое значение: diff --git a/Конфигурация/CommonModules/РаботаСФайловымАрхивомСервер/Ext/Module.bsl b/Конфигурация/CommonModules/РаботаСФайловымАрхивомСервер/Ext/Module.bsl index e6b70ca39..b891256a2 100644 --- a/Конфигурация/CommonModules/РаботаСФайловымАрхивомСервер/Ext/Module.bsl +++ b/Конфигурация/CommonModules/РаботаСФайловымАрхивомСервер/Ext/Module.bsl @@ -243,6 +243,68 @@ #КонецОбласти +// Обработчик см. РегламентноеЗадание.ПереносФайловМеждуОперационнымХранилищемИФайловымАрхивом +// +// Параметры: +// Параметры - Структура - произвольные параметры ПараметрыПроцедуры. +// см. ДлительныеОперации.ВыполнитьВФоне описание параметра "ИмяПроцедуры" +// АдресРезультата - Строка - адрес временного хранилища, в которое нужно поместить результат работы процедуры. +// см. ДлительныеОперации.ВыполнитьВФоне описание параметра "ИмяПроцедуры" +// +Процедура ПеренестиФайлыМеждуОперационнымХранилищемИФайловымАрхивом(Параметры = Неопределено, АдресРезультата = Неопределено) Экспорт + + ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания(Метаданные.РегламентныеЗадания.ПереносФайловМеждуОперационнымХранилищемИФайловымАрхивом); + + Если Не ИспользоватьФайловыйАрхив() Тогда + Возврат; + КонецЕсли; + + УстановитьПривилегированныйРежим(Истина); + + НастройкиПереносаФайлов = РегистрыСведений.НастройкиРаботыСФайловымАрхивом.ПолучитьНастройкиРаботыСФайловымАрхивомДляПереносаФайлов(); + НастройкиПереносаДляОбъектовМетаданных = НастройкиПереносаФайлов.НайтиСтроки(Новый Структура("ЭтоДетальнаяНастройкаПереносаФайлов", Ложь)); + + Если НастройкиПереносаДляОбъектовМетаданных.Количество() > 0 Тогда + + РазмерПорции = РазмерПорцииПеремещаемыхФайлов(); + + ТекстЗапроса = ТекстЗапросаПорцииФайлов(РазмерПорции); + + ДополнительныеПараметрыПереноса = ДополнительныеПараметрыПереносаФайлов(); + ДополнительныеПараметрыПереноса.ТекстЗапросаПолученияПорцииФайловДляПереносаВАрхив = ТекстЗапроса; + + ТекстЗапроса = ТекстЗапросаПорцииФайлов(РазмерПорции, Ложь); + ДополнительныеПараметрыПереноса.ТекстЗапросаПолученияПорцииФайловДляВосстановленияИзАрхива = ТекстЗапроса; + ДополнительныеПараметрыПереноса.СпособХраненияФайлов = СпособХраненияФайлов(); + + КоличествоДнейХраненияПоУмолчанию = РегистрыСведений.НастройкиРаботыСФайловымАрхивом.ПолучитьКоличествоДнейХраненияИзНастройкиПоУмолчанию(); + + Для Каждого Настройка Из НастройкиПереносаДляОбъектовМетаданных Цикл + + МассивИсключений = Новый Массив; + + ДетализированныеНастройки = НастройкиПереносаФайлов.НайтиСтроки(Новый Структура( + "ОбщийИдентификаторВладельца, ЭтоДетальнаяНастройкаПереносаФайлов", + Настройка.ОбщийИдентификаторВладельца, + Истина)); + + Если ДетализированныеНастройки.Количество() > 0 Тогда + КоличествоДнейХраненияРодителя = КоличествоДнейХраненияДоПереносаВФайловыйАрхив(Настройка, КоличествоДнейХраненияПоУмолчанию); + + Для Каждого ДетализированнаяНастройка Из ДетализированныеНастройки Цикл + + ВыполнитьОперацииСФайлами(ДетализированнаяНастройка, МассивИсключений, КоличествоДнейХраненияРодителя, ДополнительныеПараметрыПереноса); + + КонецЦикла; + КонецЕсли; + + ВыполнитьОперацииСФайлами(Настройка, МассивИсключений, КоличествоДнейХраненияПоУмолчанию, ДополнительныеПараметрыПереноса); + + КонецЦикла; + КонецЕсли; + +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -401,7 +463,9 @@ Если ЗначениеЗаполнено(ТомИлиСпособХраненияФайлов) Тогда Если ТипЗнч(ТомИлиСпособХраненияФайлов) = Тип("СправочникСсылка.ТомаХраненияФайлов") Тогда + УстановитьПривилегированныйРежим(Истина); СпособХранения = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ТомИлиСпособХраненияФайлов, "СпособХраненияФайлов"); + УстановитьПривилегированныйРежим(Ложь); Иначе СпособХранения = ТомИлиСпособХраненияФайлов; КонецЕсли; @@ -742,12 +806,9 @@ Если Не ЗначениеЗаполнено(ПрисоединенныйФайл.ТипХраненияФайла) Тогда ПрисоединенныйФайл.ТипХраненияФайла = РаботаСФайламиСлужебный.ТипХраненияФайла(Размер, Расширение); - Если ПрисоединенныйФайл.ТипХраненияФайла <> Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда - ПрисоединенныйФайл.Том = СвободныйТомХраненияПоТипуХраненияФайлов(ПрисоединенныйФайл, - ПрисоединенныйФайл.ТипХраненияФайла, - Перечисления.ВидыХраненияФайлов.ОперационноеХранение); + ПрисоединенныйФайл.ТипХраненияФайла, Перечисления.ВидыХраненияФайлов.ОперационноеХранение); Если ПрисоединенныйФайл.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВТомахТомНеОпределен Тогда ПрисоединенныйФайл.ТипХраненияФайла = ТипХраненияПоТомуХраненияФайлов(ПрисоединенныйФайл.Том); КонецЕсли; @@ -1014,68 +1075,6 @@ #Область ПереносФайловМеждуОперационнымХранилищемИФайловымАрхивом -// Метод регламентного задания "ПереносФайловМеждуОперационнымХранилищемИФайловымАрхивом". -// -// Параметры: -// Параметры - Структура - произвольные параметры ПараметрыПроцедуры. -// см. ДлительныеОперации.ВыполнитьВФоне описание параметра "ИмяПроцедуры" -// АдресРезультата - Строка - адрес временного хранилища, в которое нужно поместить результат работы процедуры. -// см. ДлительныеОперации.ВыполнитьВФоне описание параметра "ИмяПроцедуры" -// -Процедура ПеренестиФайлыМеждуОперационнымХранилищемИФайловымАрхивом(Параметры = Неопределено, АдресРезультата = Неопределено) Экспорт - - ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания(Метаданные.РегламентныеЗадания.ПереносФайловМеждуОперационнымХранилищемИФайловымАрхивом); - - Если Не ИспользоватьФайловыйАрхив() Тогда - Возврат; - КонецЕсли; - - УстановитьПривилегированныйРежим(Истина); - - НастройкиПереносаФайлов = РегистрыСведений.НастройкиРаботыСФайловымАрхивом.ПолучитьНастройкиРаботыСФайловымАрхивомДляПереносаФайлов(); - НастройкиПереносаДляОбъектовМетаданных = НастройкиПереносаФайлов.НайтиСтроки(Новый Структура("ЭтоДетальнаяНастройкаПереносаФайлов", Ложь)); - - Если НастройкиПереносаДляОбъектовМетаданных.Количество() > 0 Тогда - - РазмерПорции = РазмерПорцииПеремещаемыхФайлов(); - - ТекстЗапроса = ТекстЗапросаПорцииФайлов(РазмерПорции); - - ДополнительныеПараметрыПереноса = ДополнительныеПараметрыПереносаФайлов(); - ДополнительныеПараметрыПереноса.ТекстЗапросаПолученияПорцииФайловДляПереносаВАрхив = ТекстЗапроса; - - ТекстЗапроса = ТекстЗапросаПорцииФайлов(РазмерПорции, Ложь); - ДополнительныеПараметрыПереноса.ТекстЗапросаПолученияПорцииФайловДляВосстановленияИзАрхива = ТекстЗапроса; - ДополнительныеПараметрыПереноса.СпособХраненияФайлов = СпособХраненияФайлов(); - - КоличествоДнейХраненияПоУмолчанию = РегистрыСведений.НастройкиРаботыСФайловымАрхивом.ПолучитьКоличествоДнейХраненияИзНастройкиПоУмолчанию(); - - Для Каждого Настройка Из НастройкиПереносаДляОбъектовМетаданных Цикл - - МассивИсключений = Новый Массив; - - ДетализированныеНастройки = НастройкиПереносаФайлов.НайтиСтроки(Новый Структура( - "ОбщийИдентификаторВладельца, ЭтоДетальнаяНастройкаПереносаФайлов", - Настройка.ОбщийИдентификаторВладельца, - Истина)); - - Если ДетализированныеНастройки.Количество() > 0 Тогда - КоличествоДнейХраненияРодителя = КоличествоДнейХраненияДоПереносаВФайловыйАрхив(Настройка, КоличествоДнейХраненияПоУмолчанию); - - Для Каждого ДетализированнаяНастройка Из ДетализированныеНастройки Цикл - - ВыполнитьОперацииСФайлами(ДетализированнаяНастройка, МассивИсключений, КоличествоДнейХраненияРодителя, ДополнительныеПараметрыПереноса); - - КонецЦикла; - КонецЕсли; - - ВыполнитьОперацииСФайлами(Настройка, МассивИсключений, КоличествоДнейХраненияПоУмолчанию, ДополнительныеПараметрыПереноса); - - КонецЦикла; - КонецЕсли; - -КонецПроцедуры - Процедура ВыполнитьОперацииСФайлами(Настройка, МассивИсключений, КоличествоДнейХраненияРодителя, ДополнительныеПараметрыПереноса) КоличествоДнейОперативногоХранения = КоличествоДнейХраненияДоПереносаВФайловыйАрхив(Настройка, КоличествоДнейХраненияРодителя); @@ -2925,6 +2924,9 @@ Методы.Вставить("ПервоначальноеЗаполнениеКонстант"); Методы.Вставить("ПервоначальноеЗаполнениеНастройкиРаботыСФайловымАрхивом"); + Если ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.БазоваяФункциональность") Тогда + Методы.Вставить("ПеренестиФайлыМеждуОперационнымХранилищемИФайловымАрхивом"); + КонецЕсли; КонецПроцедуры diff --git a/Конфигурация/CommonModules/РазборКодаМаркировкиИСМПСлужебныйКлиентСервер/Ext/Module.bsl b/Конфигурация/CommonModules/РазборКодаМаркировкиИСМПСлужебныйКлиентСервер/Ext/Module.bsl index ad4dce8b9..25a9484c1 100644 --- a/Конфигурация/CommonModules/РазборКодаМаркировкиИСМПСлужебныйКлиентСервер/Ext/Module.bsl +++ b/Конфигурация/CommonModules/РазборКодаМаркировкиИСМПСлужебныйКлиентСервер/Ext/Module.bsl @@ -32,11 +32,11 @@ ИначеЕсли ОписаниеЭлементаКМ.Имя = "ДатаФормированияАТК" Тогда - // дата формирования оператором агрегированного таможенного кода (ДДММГГ) + // дата формирования оператором агрегированного таможенного кода (ГГММДД) - Год = Прав(Значение, 2); + День = Прав(Значение, 2); Месяц = Сред(Значение, 3, 2); - День = Лев(Значение, 2); + Год = Лев(Значение, 2); ДатаСтрокой = СтрШаблон("20%1%2%3", Год, Месяц, День); @@ -45,6 +45,23 @@ ДатаФормированияАТК = ОписаниеТипа.ПривестиЗначение(ДатаСтрокой); + // Исключение: АТК начинается с 01 (ИП из Адыгеи) и начало АТК подходит под GTIN + Если СтрНачинаетсяС(ПараметрыОписанияКодаМаркировки.КодМаркировки, "01") Тогда + Если РазборКодаМаркировкиИССлужебныйКлиентСерверПовтИсп.ЭтоGTIN(Сред(ПараметрыОписанияКодаМаркировки.КодМаркировки, 3, 14)) Тогда + Возврат Ложь; + КонецЕсли; + КонецЕсли; + + #Если Не Клиент И Не ВебКлиент Тогда + + РазницаВДнях = (ТекущаяДатаСеанса() - ДатаФормированияАТК) / 86400; + + Если РазницаВДнях < 1 Тогда + Возврат Ложь; // АТК не может быть сформирован с будущей датой + КонецЕсли; + + #КонецЕсли + Возврат ДатаФормированияАТК <> '00010101'; ИначеЕсли ОписаниеЭлементаКМ.Имя = "ИНН" Тогда diff --git a/Конфигурация/CommonModules/РазборКодаМаркировкиИССлужебныйВызовСервера/Ext/Module.bsl b/Конфигурация/CommonModules/РазборКодаМаркировкиИССлужебныйВызовСервера/Ext/Module.bsl index db5047fa2..2733de3bb 100644 --- a/Конфигурация/CommonModules/РазборКодаМаркировкиИССлужебныйВызовСервера/Ext/Module.bsl +++ b/Конфигурация/CommonModules/РазборКодаМаркировкиИССлужебныйВызовСервера/Ext/Module.bsl @@ -15,34 +15,38 @@ // Функция ХешВидовПродукции(Значения) Экспорт - Список = Новый СписокЗначений; + ТипДанных = ТипЗнч(Значения); - Если ТипЗнч(Значения) = Тип("СправочникСсылка.ВидыПродукцииИС") Тогда + Список = Неопределено; + + Если ТипДанных = Тип("СправочникСсылка.ВидыПродукцииИС") Тогда Если Не Значения.Пустая() Тогда Возврат Строка(Значения.УникальныйИдентификатор()); КонецЕсли; - ИначеЕсли ТипЗнч(Значения) = Тип("Массив") Тогда + ИначеЕсли ТипДанных = Тип("Массив") Тогда Для Каждого Значение Из Значения Цикл Если ТипЗнч(Значение) = Тип("СправочникСсылка.ВидыПродукцииИС") И Не Значение.Пустая() Тогда + Если Список = Неопределено Тогда + Если Значения.Количество() = 1 Тогда + Возврат Строка(Значение.УникальныйИдентификатор()); + КонецЕсли; + Список = Новый СписокЗначений; + КонецЕсли; Список.Добавить(Значение); КонецЕсли; КонецЦикла; КонецЕсли; - КоличествоЭлементов = Список.Количество(); - Если КоличествоЭлементов > 0 Тогда - - Если КоличествоЭлементов > 1 Тогда - Список.СортироватьПоЗначению(); - КонецЕсли; - - Результат = ОбщегоНазначенияИС.ХэшСуммаСтроки(ЗначениеВСтрокуВнутр(Список.ВыгрузитьЗначения())); - - Иначе - Результат = ""; + Если Список = Неопределено Тогда + Возврат ""; КонецЕсли; - Возврат Результат; + Если Список.Количество() > 0 Тогда + Список.СортироватьПоЗначению(); + Возврат ОбщегоНазначенияИС.ХэшСуммаСтроки(ЗначениеВСтрокуВнутр(Список.ВыгрузитьЗначения())); + Иначе + Возврат ""; + КонецЕсли; КонецФункции diff --git a/Конфигурация/CommonModules/РазборКодаМаркировкиИССлужебныйКлиентСервер/Ext/Module.bsl b/Конфигурация/CommonModules/РазборКодаМаркировкиИССлужебныйКлиентСервер/Ext/Module.bsl index f07808e76..3b2ea4d91 100644 --- a/Конфигурация/CommonModules/РазборКодаМаркировкиИССлужебныйКлиентСервер/Ext/Module.bsl +++ b/Конфигурация/CommonModules/РазборКодаМаркировкиИССлужебныйКлиентСервер/Ext/Module.bsl @@ -362,6 +362,7 @@ ПараметрыОписанияКодаМаркировки.Вставить("МодульКонтекста", ПараметрыРазбораКодаМаркировки.МодульКонтекста); ПараметрыОписанияКодаМаркировки.Вставить("ДополнительныеПараметры", Настройки.ДополнительныеПараметры); ПараметрыОписанияКодаМаркировки.Вставить("Алфавит", Настройки.Алфавит); + ПараметрыОписанияКодаМаркировки.Вставить("КодМаркировки", ПараметрыРазбораКодаМаркировки.КодМаркировки); Если Не КодМаркировкиСоответствуетОписанию(ПараметрыРазбораКодаМаркировки, ПараметрыОписанияКодаМаркировки, СоставКодаМаркировки, ЗначенияЭлементовКодаМаркировки) Тогда Возврат Неопределено; diff --git a/Конфигурация/CommonModules/РассылкаОтчетов/Ext/Module.bsl b/Конфигурация/CommonModules/РассылкаОтчетов/Ext/Module.bsl index e54063044..5870ede23 100644 --- a/Конфигурация/CommonModules/РассылкаОтчетов/Ext/Module.bsl +++ b/Конфигурация/CommonModules/РассылкаОтчетов/Ext/Module.bsl @@ -5417,6 +5417,11 @@ Процедура ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод(Методы) Экспорт Методы.Вставить("УстановитьКоличествоМесяцевХраненияИсторииРассылкиОтчетов"); + Если ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.БазоваяФункциональность") Тогда + Методы.Вставить("ОчиститьУстаревшиеЗаписиИсторииРассылкиОтчетов"); + Методы.Вставить("ВыполнитьРассылкуПоРасписанию"); + КонецЕсли; + Методы.Вставить("РезультатФормированияПорцииОтчетов", Истина); Методы.Вставить("ВыполнитьОчисткуИсторииРассылкиОтчетовВФоновомЗадании", Истина); Методы.Вставить("ВыполнитьРассылкиВФоновомЗадании", Истина); diff --git a/Конфигурация/CommonModules/РасчетСтатусовОформленияИС/Ext/Module.bsl b/Конфигурация/CommonModules/РасчетСтатусовОформленияИС/Ext/Module.bsl index 8e75dd7a1..5fe8fb6d9 100644 --- a/Конфигурация/CommonModules/РасчетСтатусовОформленияИС/Ext/Module.bsl +++ b/Конфигурация/CommonModules/РасчетСтатусовОформленияИС/Ext/Module.bsl @@ -524,7 +524,7 @@ // См. СтандартныеПодсистемыСервер.ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод Процедура ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод(Методы) Экспорт - Методы.Вставить("РасчетСтатусовОформленияИС", Истина); + Методы.Вставить("РасчетСтатусовОформленияИС"); Методы.Вставить("РасчетСтатусовОформленияПослеЗаписиДокумента", Истина); КонецПроцедуры diff --git a/Конфигурация/CommonModules/РегламентныеЗаданияСервер/Ext/Module.bsl b/Конфигурация/CommonModules/РегламентныеЗаданияСервер/Ext/Module.bsl index 73272c965..f7949626b 100644 --- a/Конфигурация/CommonModules/РегламентныеЗаданияСервер/Ext/Module.bsl +++ b/Конфигурация/CommonModules/РегламентныеЗаданияСервер/Ext/Module.bsl @@ -532,7 +532,7 @@ КонецЦикла; ПараметрыСтрока = Сред(ПараметрыСтрока, 1, СтрДлина(ПараметрыСтрока) - 1); КонецЕсли; - Выполнить(Метаданные.РегламентныеЗадания[МетаданныеЗадания.Имя].ИмяМетода + "(" + ПараметрыСтрока + ")"); // АПК:487 Исполняемый код безопасен. + Выполнить(Метаданные.РегламентныеЗадания[МетаданныеЗадания.Имя].ИмяМетода + "(" + ПараметрыСтрока + ")"); // АПК:487 Исполняемый код безопасен. Не нарушает безопасность информации, так как выполняется только процедура, указанная в метаданных регламентного задания. Возврат Неопределено; КонецЕсли; diff --git a/Конфигурация/CommonModules/РегламентныеЗаданияСлужебный/Ext/Module.bsl b/Конфигурация/CommonModules/РегламентныеЗаданияСлужебный/Ext/Module.bsl index 234ce7be6..70c4aa79d 100644 --- a/Конфигурация/CommonModules/РегламентныеЗаданияСлужебный/Ext/Module.bsl +++ b/Конфигурация/CommonModules/РегламентныеЗаданияСлужебный/Ext/Module.bsl @@ -312,7 +312,7 @@ // тоже правило. // // Параметры: -// Задание - РегламентноеЗадание +// ИсточникЗадания - РегламентноеЗадание // - Строка - уникального идентификатора РегламентногоЗадания. // // Возвращаемое значение: @@ -323,39 +323,39 @@ // Для серверной ИБ - возвращает момент запуска фонового задания по факту. // * ИдентификаторФоновогоЗадания - Строка - для серверной ИБ возвращает идентификатор запущенного фонового задания. // -Функция ВыполнитьРегламентноеЗаданиеВручную(Знач Задание) Экспорт - +Функция ВыполнитьРегламентноеЗаданиеВручную(ИсточникЗадания) Экспорт ВызватьИсключениеЕслиНетПраваАдминистрирования(); УстановитьПривилегированныйРежим(Истина); - ПараметрыВыполнения = ПараметрыВыполненияРегламентногоЗадания(); - ПараметрыВыполнения.ПроцедураУжеВыполняется = Ложь; - Задание = РегламентныеЗаданияСервер.ПолучитьРегламентноеЗадание(Задание); - - ПараметрыВыполнения.ЗапускВыполнен = Ложь; + Результат = ПараметрыВыполненияРегламентногоЗадания(); + + Задание = РегламентныеЗаданияСервер.ПолучитьРегламентноеЗадание(ИсточникЗадания); СвойстваПоследнегоФоновогоЗадания = СвойстваПоследнегоФоновогоЗаданияВыполненияРегламентногоЗадания(Задание); - Если СвойстваПоследнегоФоновогоЗадания <> Неопределено И СвойстваПоследнегоФоновогоЗадания.Состояние = СостояниеФоновогоЗадания.Активно Тогда - - ПараметрыВыполнения.МоментЗапуска = СвойстваПоследнегоФоновогоЗадания.Начало; + Результат.ПроцедураУжеВыполняется = Истина; + Результат.МоментЗапуска = СвойстваПоследнегоФоновогоЗадания.Начало; Если ЗначениеЗаполнено(СвойстваПоследнегоФоновогоЗадания.Наименование) Тогда - ПараметрыВыполнения.ПредставлениеФоновогоЗадания = СвойстваПоследнегоФоновогоЗадания.Наименование; + Результат.ПредставлениеФоновогоЗадания = СвойстваПоследнегоФоновогоЗадания.Наименование; Иначе - ПараметрыВыполнения.ПредставлениеФоновогоЗадания = ПредставлениеРегламентногоЗадания(Задание); + Результат.ПредставлениеФоновогоЗадания = ПредставлениеРегламентногоЗадания(Задание); КонецЕсли; Иначе ПараметрыВыполненияЗадания = РегламентныеЗаданияСервер.НовыеПараметрыВыполненияЗадания(); - ПараметрыВыполненияЗадания.Ключ = Строка(Задание.УникальныйИдентификатор); ПараметрыВыполненияЗадания.Наименование = ПредставлениеРегламентногоЗадания(Задание); + ПараметрыВыполненияЗадания.ПоискАктивного = Истина; + + ДатаВЧасовомПоясеСервера = ТекущаяДата(); // АПК:143 для сравнения с датой запуска фонового задания ФоновоеЗадание = РегламентныеЗаданияСервер.ВыполнитьЗадание(Задание, ПараметрыВыполненияЗадания); - ПараметрыВыполнения.ИдентификаторФоновогоЗадания = Строка(ФоновоеЗадание.УникальныйИдентификатор); - ПараметрыВыполнения.МоментЗапуска = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(ФоновоеЗадание.УникальныйИдентификатор).Начало; - ПараметрыВыполнения.ЗапускВыполнен = Истина; + Результат.ИдентификаторФоновогоЗадания = Строка(ФоновоеЗадание.УникальныйИдентификатор); + Результат.МоментЗапуска = ФоновоеЗадание.Начало; + Результат.ПроцедураУжеВыполняется = Результат.МоментЗапуска < ДатаВЧасовомПоясеСервера; + Результат.ПредставлениеФоновогоЗадания = ФоновоеЗадание.Наименование; КонецЕсли; - ПараметрыВыполнения.ПроцедураУжеВыполняется = НЕ ПараметрыВыполнения.ЗапускВыполнен; - Возврат ПараметрыВыполнения; + Результат.ЗапускВыполнен = НЕ Результат.ПроцедураУжеВыполняется; + + Возврат Результат; КонецФункции diff --git a/Конфигурация/CommonModules/РегламентыЭДО/Ext/Module.bsl b/Конфигурация/CommonModules/РегламентыЭДО/Ext/Module.bsl index 4795f8a01..3baf7ef62 100644 --- a/Конфигурация/CommonModules/РегламентыЭДО/Ext/Module.bsl +++ b/Конфигурация/CommonModules/РегламентыЭДО/Ext/Module.bsl @@ -28,6 +28,7 @@ // * Исправлен - Булево - признак того, что создан документ исправление. // * ИдентификаторОрганизации - Строка // * ИдентификаторДокумента - Строка +// * ЧерновикОбработан - Булево // Функция НовыеПараметрыДокументаДляОпределенияСостояния() Экспорт @@ -43,6 +44,7 @@ ПараметрыДокумента.Вставить("Исправлен", Ложь); ПараметрыДокумента.Вставить("ИдентификаторОрганизации", ""); ПараметрыДокумента.Вставить("ИдентификаторДокумента", ""); + ПараметрыДокумента.Вставить("ЧерновикОбработан", Ложь); Возврат ПараметрыДокумента; @@ -886,6 +888,26 @@ Возврат Результат; КонецФункции +// Возвращает признак однотитульного формализованного документа. +// +// Параметры: +// ПараметрыДокумента - См. РегламентыЭДО.НовыеПараметрыДокументаДляОпределенияСостояния +// - СтрокаТаблицыЗначений из см. СинхронизацияЭДО.НовыеДанныеОбъектов +// - ВыборкаИзРезультатаЗапроса +// +// Возвращаемое значение: +// Булево +// +Функция ДокументБезОтветногоТитула(ПараметрыДокумента) Экспорт + + Если ПараметрыДокумента.ТипРегламента <> Перечисления.ТипыРегламентовЭДО.Формализованный Тогда + Возврат Ложь; + КонецЕсли; + + Возврат РегламентыЭДО_Формализованный.ДокументБезОтветногоТитула(ПараметрыДокумента); + +КонецФункции + // Возвращает признак того, что входящий электронный документ может потребовать заполнения ответного титула // // Параметры: @@ -1440,6 +1462,8 @@ Возврат РегламентыЭДО_ФормализованныйАктСверки; ИначеЕсли ТипРегламента = Перечисления.ТипыРегламентовЭДО.АктОРасхождениях Тогда Возврат РегламентыЭДО_АктОРасхождениях; + ИначеЕсли ТипРегламента = Перечисления.ТипыРегламентовЭДО.Черновик Тогда + Возврат РегламентыЭДО_Черновики; Иначе Если ОбщегоНазначения.ПодсистемаСуществует("ЭлектронноеВзаимодействие.ОбменСГИСЭПД") Тогда МодульОбменСГИСЭПД = ОбщегоНазначения.ОбщийМодуль("ОбменСГИСЭПД"); diff --git a/Конфигурация/CommonModules/РегламентыЭДО_АктОРасхождениях/Ext/Module.bsl b/Конфигурация/CommonModules/РегламентыЭДО_АктОРасхождениях/Ext/Module.bsl index 1a55fafb9..870e2065a 100644 --- a/Конфигурация/CommonModules/РегламентыЭДО_АктОРасхождениях/Ext/Module.bsl +++ b/Конфигурация/CommonModules/РегламентыЭДО_АктОРасхождениях/Ext/Module.bsl @@ -549,6 +549,13 @@ Возврат Ложь; КонецЕсли; Иначе + + Если ПараметрыДокумента.ТребуетсяПодтверждение + И ОписаниеТиповЭлемента.ОсновнойЭлемент = Перечисления.ТипыЭлементовРегламентаЭДО.ИнформацияОтправителя + И РегламентыЭДО.ИнформацияОтправителяНаХранении(СостоянияЭлементовРегламента) Тогда + Возврат Ложь; + КонецЕсли; + Если ЭлементИзвещения = Неопределено Тогда Состояние = Перечисления.СостоянияДокументовЭДО.ОжидаетсяИзвещениеОПолучении; Иначе diff --git a/Конфигурация/CommonModules/РегламентыЭДО_Формализованный/Ext/Module.bsl b/Конфигурация/CommonModules/РегламентыЭДО_Формализованный/Ext/Module.bsl index f5d4978f5..bb81a70ce 100644 --- a/Конфигурация/CommonModules/РегламентыЭДО_Формализованный/Ext/Module.bsl +++ b/Конфигурация/CommonModules/РегламентыЭДО_Формализованный/Ext/Module.bsl @@ -798,9 +798,18 @@ Результат = Ложь; + Если Не ПараметрыДокумента.ТребуетсяИзвещение Тогда + Возврат Результат; + КонецЕсли; + + Если РегламентыЭДО.ЕстьЭлементРегламента(СостоянияЭлементовРегламента, + Перечисления.ТипыЭлементовРегламентаЭДО.ИнформацияПолучателя) Тогда + Возврат Результат; + КонецЕсли; + ТипИОП = РегламентыЭДО.ТипыЭлементовРегламентаЭДОИзвещенийПервыхТитулов(); - Если ПараметрыДокумента.ТребуетсяИзвещение - И Не РегламентыЭДО.ОдинИзЭлементовРегламентаВходитВКоллекцию(СостоянияЭлементовРегламента, ТипИОП, Перечисления.НаправленияЭДО.Входящий) Тогда + Если Не РегламентыЭДО.ОдинИзЭлементовРегламентаВходитВКоллекцию( + СостоянияЭлементовРегламента, ТипИОП, Перечисления.НаправленияЭДО.Входящий) Тогда РегламентыЭДО.УстановитьПриоритетноеСостояние(Состояние, Перечисления.СостоянияДокументовЭДО.ОжидаетсяИзвещениеОПолучении); diff --git a/Конфигурация/CommonModules/РегламентыЭДО_ФормализованныйАктСверки/Ext/Module.bsl b/Конфигурация/CommonModules/РегламентыЭДО_ФормализованныйАктСверки/Ext/Module.bsl index 3bf4d983c..c09d9e878 100644 --- a/Конфигурация/CommonModules/РегламентыЭДО_ФормализованныйАктСверки/Ext/Module.bsl +++ b/Конфигурация/CommonModules/РегламентыЭДО_ФормализованныйАктСверки/Ext/Module.bsl @@ -24,8 +24,7 @@ ИЛИ ЗаполнитьСостояниеПоПредложениюОбАннулировании(ПараметрыДокумента, СостоянияЭлементовРегламента, Состояние) ИЛИ ЗаполнитьСостояниеПоПодтверждениюОператораИнформацииПолучателя(ПараметрыДокумента, СостоянияЭлементовРегламента, - Перечисления.ТипыЭлементовРегламентаЭДО.ИнформацияПолучателя_ПДП, - Перечисления.ТипыЭлементовРегламентаЭДО.ИнформацияПолучателя_ИОП, Состояние) + Перечисления.ТипыЭлементовРегламентаЭДО.ИнформацияПолучателя_ПДП, Состояние) ИЛИ ЗаполнитьСостояниеПоВходящейИнформацииОтправителя(СостоянияЭлементовРегламента, Состояние) @@ -599,59 +598,26 @@ // ПараметрыДокумента - См. РегламентыЭДО.НовыеПараметрыДокументаДляОпределенияСостояния // СостоянияЭлементовРегламента - См. РегламентыЭДО.НовыеСостоянияЭлементовРегламента // Подтверждение - ПеречислениеСсылка.ТипыЭлементовРегламентаЭДО -// Извещение - ПеречислениеСсылка.ТипыЭлементовРегламентаЭДО // Состояние - ПеречислениеСсылка.СостоянияДокументовЭДО // // Возвращаемое значение: // Булево // Функция ЗаполнитьСостояниеПоПодтверждениюОператораИнформацииПолучателя(ПараметрыДокумента, СостоянияЭлементовРегламента, - Подтверждение, Извещение, Состояние) + Подтверждение, Состояние) Если Не РегламентыЭДО.ЭтоОбменЧерезОператора(ПараметрыДокумента.СпособОбмена) Тогда Возврат Ложь; КонецЕсли; - Результат = Истина; - ЭлементРегламента = Неопределено; // Неопределено,СтрокаТаблицыЗначений: См. РегламентыЭДО.НовыеСостоянияЭлементовРегламента - - ТипыИзвещения = Новый Массив; // Массив из ПеречислениеСсылка.ТипыЭлементовРегламентаЭДО - ТипыИзвещения.Добавить(Извещение); - Если РегламентыЭДО.ВыполненПереходНаУниверсальныеСообщения() Тогда - ТипыИзвещения.Добавить(Перечисления.ТипыЭлементовРегламентаЭДО.УС_ИОП); - КонецЕсли; - Если РегламентыЭДО.ЕстьЭлементРегламента(СостоянияЭлементовРегламента, - Перечисления.ТипыЭлементовРегламентаЭДО.ИнформацияПолучателя) Тогда - - Если Не РегламентыЭДО.ЕстьЭлементРегламента(СостоянияЭлементовРегламента, Подтверждение, ЭлементРегламента) Тогда - - Результат = Ложь; + Перечисления.ТипыЭлементовРегламентаЭДО.ИнформацияПолучателя) + И Не РегламентыЭДО.ЕстьЭлементРегламента(СостоянияЭлементовРегламента, Подтверждение) Тогда РегламентыЭДО.УстановитьПриоритетноеСостояние(Состояние, Перечисления.СостоянияДокументовЭДО.ОжидаетсяПодтверждениеОператора); - - ИначеЕсли Не ЗначениеЗаполнено(Извещение) Тогда - - Результат = Ложь; - - ИначеЕсли ПараметрыДокумента.ТребуетсяИзвещение - И Не РегламентыЭДО.ОдинИзЭлементовРегламентаВходитВКоллекцию(СостоянияЭлементовРегламента, ТипыИзвещения, Перечисления.НаправленияЭДО.Входящий) Тогда - - РегламентыЭДО.УстановитьПриоритетноеСостояние(Состояние, Перечисления.СостоянияДокументовЭДО.ОжидаетсяИзвещениеОПолучении); - - Иначе - - Результат = Ложь; - - КонецЕсли; - - Иначе - - Результат = Ложь; - - КонецЕсли; + КонецЕсли; - Возврат Результат; + Возврат Ложь; КонецФункции @@ -745,9 +711,18 @@ Результат = Ложь; + Если Не ПараметрыДокумента.ТребуетсяИзвещение Тогда + Возврат Результат; + КонецЕсли; + + Если РегламентыЭДО.ЕстьЭлементРегламента(СостоянияЭлементовРегламента, + Перечисления.ТипыЭлементовРегламентаЭДО.ИнформацияПолучателя) Тогда + Возврат Результат; + КонецЕсли; + ТипИОП = РегламентыЭДО.ТипыЭлементовРегламентаЭДОИзвещенийПервыхТитулов(); - Если ПараметрыДокумента.ТребуетсяИзвещение - И Не РегламентыЭДО.ОдинИзЭлементовРегламентаВходитВКоллекцию(СостоянияЭлементовРегламента, ТипИОП, Перечисления.НаправленияЭДО.Входящий) Тогда + Если Не РегламентыЭДО.ОдинИзЭлементовРегламентаВходитВКоллекцию( + СостоянияЭлементовРегламента, ТипИОП, Перечисления.НаправленияЭДО.Входящий) Тогда РегламентыЭДО.УстановитьПриоритетноеСостояние(Состояние, Перечисления.СостоянияДокументовЭДО.ОжидаетсяИзвещениеОПолучении); diff --git a/Конфигурация/CommonModules/РегламентыЭДО_Черновики.xml b/Конфигурация/CommonModules/РегламентыЭДО_Черновики.xml new file mode 100644 index 000000000..53c0c4f8a --- /dev/null +++ b/Конфигурация/CommonModules/РегламентыЭДО_Черновики.xml @@ -0,0 +1,23 @@ + + + + + РегламентыЭДО_Черновики + + + ru + Регламенты ЭДО черновики + + + + false + false + true + true + true + false + false + DontUse + + + \ No newline at end of file diff --git a/Конфигурация/CommonModules/РегламентыЭДО_Черновики/Ext/Module.bsl b/Конфигурация/CommonModules/РегламентыЭДО_Черновики/Ext/Module.bsl new file mode 100644 index 000000000..6cb450bc9 --- /dev/null +++ b/Конфигурация/CommonModules/РегламентыЭДО_Черновики/Ext/Module.bsl @@ -0,0 +1,418 @@ +//@strict-types + +#Область СлужебныеПроцедурыИФункции + +#Область ДляВызоваИзМодуляРегламентыЭДО + +// Возвращает состояние входящего электронного документа. +// +// Параметры: +// ПараметрыДокумента - См. РегламентыЭДО.НовыеПараметрыДокументаДляОпределенияСостояния +// СостоянияЭлементовРегламента - См. РегламентыЭДО.НовыеСостоянияЭлементовРегламента +// +// Возвращаемое значение: +// ПеречислениеСсылка.СостоянияДокументовЭДО +// +Функция СостояниеВходящегоДокумента(ПараметрыДокумента, СостоянияЭлементовРегламента) Экспорт + + Состояние = Перечисления.СостоянияДокументовЭДО.ПустаяСсылка(); + + Если ЗаполнитьСостояниеПоВходящейИнформацииОтправителя(ПараметрыДокумента, СостоянияЭлементовРегламента, Состояние) + + ИЛИ ЗаполнитьСостояниеПоОтзывуЧерновика(ПараметрыДокумента, СостоянияЭлементовРегламента, Состояние) + + ИЛИ ЗаполнитьСостояниеПоПризнакуОбработкуЧерновика(ПараметрыДокумента, Состояние) + + ИЛИ ЗначениеЗаполнено(Состояние) Тогда + + Возврат Состояние; + + КонецЕсли; + + Возврат Перечисления.СостоянияДокументовЭДО.ОбменЗавершен; + +КонецФункции + +// Возвращает состояние исходящего электронного документа. +// +// Параметры: +// ПараметрыДокумента - См. РегламентыЭДО.НовыеПараметрыДокументаДляОпределенияСостояния +// СостоянияЭлементовРегламента - См. РегламентыЭДО.НовыеСостоянияЭлементовРегламента +// +// Возвращаемое значение: +// ПеречислениеСсылка.СостоянияДокументовЭДО +// +Функция СостояниеИсходящегоДокумента(ПараметрыДокумента, СостоянияЭлементовРегламента) Экспорт + + Состояние = Перечисления.СостоянияДокументовЭДО.ПустаяСсылка(); + + Если ЗаполнитьСостояниеПоИсходящейИнформацииОтправителя(ПараметрыДокумента, СостоянияЭлементовРегламента, Состояние) + + ИЛИ ЗаполнитьСостояниеПоОтзывуЧерновика(ПараметрыДокумента, СостоянияЭлементовРегламента, Состояние) + + ИЛИ ЗаполнитьСостояниеПоПодтверждениюОператора(ПараметрыДокумента, СостоянияЭлементовРегламента, Состояние) + + ИЛИ ЗаполнитьСостояниеПоВходящемуИзвещениюОПолучении(ПараметрыДокумента, СостоянияЭлементовРегламента, Состояние) + + ИЛИ ЗначениеЗаполнено(Состояние) Тогда + + Возврат Состояние; + + КонецЕсли; + + Возврат Перечисления.СостоянияДокументовЭДО.ОбменЗавершен; + +КонецФункции + +// Возвращает состояние сообщения. +// +// Параметры: +// ПараметрыСообщения - См. РегламентыЭДО.НовыеПараметрыСообщенияДляОпределенияСостояния +// ПараметрыДокумента - См. РегламентыЭДО.НовыеПараметрыДокументаДляОпределенияСостоянияСообщения +// ИспользоватьУтверждение - Булево +// +// Возвращаемое значение: +// ПеречислениеСсылка.СостоянияСообщенийЭДО +// +Функция СостояниеСообщения(ПараметрыСообщения, ПараметрыДокумента, ИспользоватьУтверждение) Экспорт + + Если ПараметрыСообщения.ТипЭлементаРегламента = Перечисления.ТипыЭлементовРегламентаЭДО.ПОА Тогда + Состояние = РегламентыЭДО.СостояниеСообщенияАннулирования(ПараметрыСообщения, ПараметрыДокумента); + ИначеЕсли РегламентыЭДО.ЭтоСлужебноеСообщение(ПараметрыСообщения.ТипЭлементаРегламента) Тогда + Состояние = РегламентыЭДО.СостояниеСлужебногоСообщения(ПараметрыСообщения, ПараметрыДокумента); + Иначе + Состояние = СостояниеСообщенияИнформацияОтправителя(ПараметрыСообщения, ПараметрыДокумента, ИспользоватьУтверждение); + КонецЕсли; + + Возврат Состояние; + +КонецФункции + +// Возвращает коллекцию добавленных элементов схемы регламента. +// +// Параметры: +// СхемаРегламента - См. РегламентыЭДО.НоваяСхемаРегламента +// НастройкиСхемыРегламента - См. РегламентыЭДО.НовыеНастройкиСхемыРегламента +// +// Возвращаемое значение: +// См. РегламентыЭДО.НоваяКоллекцияЭлементовСхемыРегламента +Функция ДобавитьЭлементыСхемыРегламента(СхемаРегламента, НастройкиСхемыРегламента) Экспорт + + ЭлементыСхемы = РегламентыЭДО.НоваяКоллекцияЭлементовСхемыРегламента(); + + Если НастройкиСхемыРегламента.ЭтоВходящийЭДО Тогда + ДобавитьЭлементыРегламентаПолучателя(СхемаРегламента, НастройкиСхемыРегламента, ЭлементыСхемы); + Иначе + ДобавитьЭлементыРегламентаОтправителя(СхемаРегламента, НастройкиСхемыРегламента, ЭлементыСхемы); + КонецЕсли; + + // ЭлектронноеВзаимодействие.ЭлектронноеАктированиеЕИС. + Если ОбщегоНазначения.ПодсистемаСуществует( + "ЭлектронноеВзаимодействие.ЭлектронноеАктированиеЕИС") Тогда + МодульЭлектронноеАктированиеЕИС = ОбщегоНазначения.ОбщийМодуль("ЭлектронноеАктированиеЕИС"); + МодульЭлектронноеАктированиеЕИС.ПриДобавленииЭлементовСхемыРегламента(ЭлементыСхемы, НастройкиСхемыРегламента); + КонецЕсли; + // ЭлектронноеВзаимодействие.ЭлектронноеАктированиеЕИС. + + Возврат ЭлементыСхемы; + +КонецФункции + +// Параметры: +// СхемаРегламента - см. РегламентыЭДО.НоваяСхемаРегламента +// НастройкиСхемыРегламента - см. РегламентыЭДО.НовыеНастройкиСхемыРегламента +// ТипЭлементаРегламента - ПеречислениеСсылка.ТипыЭлементовРегламентаЭДО +// +// Возвращаемое значение: +// См. РегламентыЭДО.НоваяКоллекцияЭлементовСхемыРегламента +Функция ДобавитьЭлементыСхемыВложенногоРегламента(СхемаРегламента, НастройкиСхемыРегламента, ТипЭлементаРегламента) Экспорт + + НовыеЭлементыСхемы = РегламентыЭДО.ДобавитьПроизвольныйЭлементРегламента(СхемаРегламента, ТипЭлементаРегламента); + + Возврат НовыеЭлементыСхемы; + +КонецФункции + +// Возвращает тип извещения для элемента входящего документа. +// +// Параметры: +// ТипЭлементаРегламента - ПеречислениеСсылка.ТипыЭлементовРегламентаЭДО +// +// Возвращаемое значение: +// ПеречислениеСсылка.ТипыЭлементовРегламентаЭДО +// +Функция ТипИзвещенияДляЭлементаВходящегоДокумента(ТипЭлементаРегламента) Экспорт + Возврат Перечисления.ТипыЭлементовРегламентаЭДО.ПустаяСсылка(); +КонецФункции + +// Возвращает тип извещения для элемента исходящего документа. +// +// Параметры: +// ТипЭлементаРегламента - ПеречислениеСсылка.ТипыЭлементовРегламентаЭДО +// +// Возвращаемое значение: +// ПеречислениеСсылка.ТипыЭлементовРегламентаЭДО +// +Функция ТипИзвещенияДляЭлементаИсходящегоДокумента(ТипЭлементаРегламента) Экспорт + Возврат Перечисления.ТипыЭлементовРегламентаЭДО.ПустаяСсылка(); +КонецФункции + +// Возвращает признак наличия информации получателя в регламенте. +// +// Возвращаемое значение: +// Булево +// +Функция ЕстьИнформацияПолучателя() Экспорт + Возврат Ложь; +КонецФункции + +#КонецОбласти + +#Область СостояниеДокумента + +// Возвращает признак успешности заполнения состояния по входящей информации отправителя. +// +// Параметры: +// ПараметрыДокумента - См. РегламентыЭДО.НовыеПараметрыДокументаДляОпределенияСостояния +// СостоянияЭлементовРегламента - См. РегламентыЭДО.НовыеСостоянияЭлементовРегламента +// Состояние - ПеречислениеСсылка.СостоянияДокументовЭДО +// +// Возвращаемое значение: +// Булево +// +Функция ЗаполнитьСостояниеПоВходящейИнформацииОтправителя(ПараметрыДокумента, СостоянияЭлементовРегламента, Состояние) + + Результат = Истина; + ЭлементРегламента = Неопределено; // Неопределено,СтрокаТаблицыЗначений: См. РегламентыЭДО.НовыеСостоянияЭлементовРегламента + + Состояние = Перечисления.СостоянияДокументовЭДО.ТребуетсяСоздатьДокумент; + + Если Не РегламентыЭДО.ЕстьЭлементРегламента(СостоянияЭлементовРегламента, + Перечисления.ТипыЭлементовРегламентаЭДО.ИнформацияОтправителя, ЭлементРегламента) Тогда + + Состояние = Перечисления.СостоянияДокументовЭДО.НеПолучен; + + Иначе + + Результат = Ложь; + + КонецЕсли; + + Возврат Результат; + +КонецФункции + +// Возвращает признак успешности заполнения состояния по исходящей информации отправителя. +// +// Параметры: +// ПараметрыДокумента - См. РегламентыЭДО.НовыеПараметрыДокументаДляОпределенияСостояния +// СостоянияЭлементовРегламента - См. РегламентыЭДО.НовыеСостоянияЭлементовРегламента +// Состояние - ПеречислениеСсылка.СостоянияДокументовЭДО +// +// Возвращаемое значение: +// Булево +// +Функция ЗаполнитьСостояниеПоИсходящейИнформацииОтправителя(ПараметрыДокумента, СостоянияЭлементовРегламента, Состояние) + + Результат = Истина; + ЭлементРегламента = Неопределено; // Неопределено,СтрокаТаблицыЗначений: См. РегламентыЭДО.НовыеСостоянияЭлементовРегламента + + Если Не РегламентыЭДО.ЕстьЭлементРегламента(СостоянияЭлементовРегламента, + Перечисления.ТипыЭлементовРегламентаЭДО.ИнформацияОтправителя, ЭлементРегламента) Тогда + + Состояние = РегламентыЭДО.НачальноеСостояниеДокумента(); + + ИначеЕсли ЭлементРегламента.Состояние = Перечисления.СостоянияСообщенийЭДО.ПодготовкаКОтправке Тогда + + Состояние = Перечисления.СостоянияДокументовЭДО.ТребуетсяПодготовкаКОтправке; + + ИначеЕсли ЭлементРегламента.Состояние = Перечисления.СостоянияСообщенийЭДО.Отправка Тогда + + Состояние = Перечисления.СостоянияДокументовЭДО.ТребуетсяОтправка; + + Иначе + + Результат = Ложь; + + КонецЕсли; + + Возврат Результат; + +КонецФункции + +// Возвращает признак успешности заполнения состояния по входящему извещению о получении. +// +// Параметры: +// ПараметрыДокумента - См. РегламентыЭДО.НовыеПараметрыДокументаДляОпределенияСостояния +// СостоянияЭлементовРегламента - См. РегламентыЭДО.НовыеСостоянияЭлементовРегламента +// Состояние - ПеречислениеСсылка.СостоянияДокументовЭДО +// +// Возвращаемое значение: +// Булево +// +Функция ЗаполнитьСостояниеПоВходящемуИзвещениюОПолучении(ПараметрыДокумента, СостоянияЭлементовРегламента, Состояние) + + Результат = Ложь; + + Если ПараметрыДокумента.ТребуетсяИзвещение + И Не РегламентыЭДО.ЕстьЭлементРегламента(СостоянияЭлементовРегламента, + Перечисления.ТипыЭлементовРегламентаЭДО.ИОП) Тогда + + РегламентыЭДО.УстановитьПриоритетноеСостояние(Состояние, Перечисления.СостоянияДокументовЭДО.ОжидаетсяИзвещениеОПолучении); + + КонецЕсли; + + Возврат Результат; + +КонецФункции + +// Возвращает признак успешности заполнения состояния по подтверждению оператора. +// +// Параметры: +// ПараметрыДокумента - См. РегламентыЭДО.НовыеПараметрыДокументаДляОпределенияСостояния +// СостоянияЭлементовРегламента - См. РегламентыЭДО.НовыеСостоянияЭлементовРегламента +// Состояние - ПеречислениеСсылка.СостоянияДокументовЭДО +// +// Возвращаемое значение: +// Булево +// +Функция ЗаполнитьСостояниеПоПодтверждениюОператора(ПараметрыДокумента, СостоянияЭлементовРегламента, Состояние) + + Если Не РегламентыЭДО.ЭтоОбменЧерезОператора(ПараметрыДокумента.СпособОбмена) Тогда + Возврат Ложь; + КонецЕсли; + + Результат = Ложь; + + Если Не РегламентыЭДО.ЕстьЭлементРегламента(СостоянияЭлементовРегламента, + Перечисления.ТипыЭлементовРегламентаЭДО.ПДП) Тогда + + Результат = Истина; + Состояние = Перечисления.СостоянияДокументовЭДО.ОжидаетсяПодтверждениеОператора; + + КонецЕсли; + + Возврат Результат; + +КонецФункции + +// Возвращает признак успешности заполнения состояния по отзыву черновика. +// +// Параметры: +// ПараметрыДокумента - См. РегламентыЭДО.НовыеПараметрыДокументаДляОпределенияСостояния +// СостоянияЭлементовРегламента - См. РегламентыЭДО.НовыеСостоянияЭлементовРегламента +// Состояние - ПеречислениеСсылка.СостоянияДокументовЭДО +// +// Возвращаемое значение: +// Булево +// +Функция ЗаполнитьСостояниеПоОтзывуЧерновика(ПараметрыДокумента, СостоянияЭлементовРегламента, Состояние) + + Результат = Ложь; + + Если РегламентыЭДО.ЕстьЭлементРегламента(СостоянияЭлементовРегламента, + Перечисления.ТипыЭлементовРегламентаЭДО.УС_ОтзывЧерновика) Тогда + + Результат = Истина; + Состояние = Перечисления.СостоянияДокументовЭДО.ЗакрытСОтзывом; + + КонецЕсли; + + Возврат Результат; + +КонецФункции + +// Параметры: +// ПараметрыДокумента - См. РегламентыЭДО.НовыеПараметрыДокументаДляОпределенияСостояния +// Состояние - ПеречислениеСсылка.СостоянияДокументовЭДО +// +// Возвращаемое значение: +// Булево +// +Функция ЗаполнитьСостояниеПоПризнакуОбработкуЧерновика(ПараметрыДокумента, Состояние) + + Результат = Ложь; + + Если ОбщегоНазначенияКлиентСервер.ЕстьРеквизитИлиСвойствоОбъекта(ПараметрыДокумента, "ЧерновикОбработан") + И ПараметрыДокумента.ЧерновикОбработан Тогда + + Результат = Истина; + Состояние = Перечисления.СостоянияДокументовЭДО.ОбменЗавершен; + + КонецЕсли; + + Возврат Результат; + +КонецФункции + +#КонецОбласти + +#Область СостояниеСообщения + +// Возвращает состояние сообщения по параметрам информации отправителя. +// +// Параметры: +// ПараметрыСообщения - См. РегламентыЭДО.НовыеПараметрыСообщенияДляОпределенияСостояния +// ПараметрыДокумента - См. РегламентыЭДО.НовыеПараметрыДокументаДляОпределенияСостоянияСообщения +// ИспользоватьУтверждение - Булево +// +// Возвращаемое значение: +// ПеречислениеСсылка.СостоянияСообщенийЭДО +// +Функция СостояниеСообщенияИнформацияОтправителя(ПараметрыСообщения, ПараметрыДокумента, ИспользоватьУтверждение) + + Состояние = Перечисления.СостоянияСообщенийЭДО.Хранение; + Возврат Состояние; + +КонецФункции + +#КонецОбласти + +#Область ДобавитьЭлементыСхемыРегламента + +// Добавляет элементы по регламенту отправителя. +// +// Параметры: +// СхемаРегламента - См. РегламентыЭДО.НоваяСхемаРегламента +// НастройкиСхемыРегламента - См. РегламентыЭДО.НовыеНастройкиСхемыРегламента +// ЭлементыСхемы - См. РегламентыЭДО.НоваяКоллекцияЭлементовСхемыРегламента +// +Процедура ДобавитьЭлементыРегламентаОтправителя(СхемаРегламента, НастройкиСхемыРегламента, ЭлементыСхемы) + + ИнформацияОтправителя = РегламентыЭДО.ВставитьЭлементСхемыРегламента(ЭлементыСхемы, СхемаРегламента, + Перечисления.ТипыЭлементовРегламентаЭДО.ИнформацияОтправителя); + + Если РегламентыЭДО.ЭтоОбменЧерезОператора(НастройкиСхемыРегламента.СпособОбмена) Тогда + + РегламентыЭДО.ВставитьЭлементСхемыРегламента(ЭлементыСхемы, ИнформацияОтправителя, + Перечисления.ТипыЭлементовРегламентаЭДО.ПДП); + + КонецЕсли; + + РегламентыЭДО.ВставитьЭлементСхемыРегламента(ЭлементыСхемы, ИнформацияОтправителя, + Перечисления.ТипыЭлементовРегламентаЭДО.ИОП, + Не НастройкиСхемыРегламента.ТребуетсяИзвещение); + +КонецПроцедуры + +// Добавляет элементы по регламенту получателя. +// +// Параметры: +// СхемаРегламента - См. РегламентыЭДО.НоваяСхемаРегламента +// НастройкиСхемыРегламента - См. РегламентыЭДО.НовыеНастройкиСхемыРегламента +// ЭлементыСхемы - См. РегламентыЭДО.НоваяКоллекцияЭлементовСхемыРегламента +// +Процедура ДобавитьЭлементыРегламентаПолучателя(СхемаРегламента, НастройкиСхемыРегламента, ЭлементыСхемы) + + ИнформацияОтправителя = РегламентыЭДО.ВставитьЭлементСхемыРегламента(ЭлементыСхемы, СхемаРегламента, + Перечисления.ТипыЭлементовРегламентаЭДО.ИнформацияОтправителя); + + РегламентыЭДО.ВставитьЭлементСхемыРегламента(ЭлементыСхемы, ИнформацияОтправителя, + Перечисления.ТипыЭлементовРегламентаЭДО.ИОП, + Не НастройкиСхемыРегламента.ТребуетсяИзвещение); + +КонецПроцедуры + +#КонецОбласти + +#КонецОбласти \ No newline at end of file diff --git a/Конфигурация/CommonModules/РегламентыЭПД_ЭПЭ.xml b/Конфигурация/CommonModules/РегламентыЭПД_ЭПЭ.xml new file mode 100644 index 000000000..74a3326ce --- /dev/null +++ b/Конфигурация/CommonModules/РегламентыЭПД_ЭПЭ.xml @@ -0,0 +1,23 @@ + + + + + РегламентыЭПД_ЭПЭ + + + ru + Регламенты ЭПД ЭПЭ + + + + false + false + true + true + true + false + false + DontUse + + + \ No newline at end of file diff --git a/Конфигурация/CommonModules/РегламентыЭПД_ЭПЭ/Ext/Module.bsl b/Конфигурация/CommonModules/РегламентыЭПД_ЭПЭ/Ext/Module.bsl new file mode 100644 index 000000000..0b588839a --- /dev/null +++ b/Конфигурация/CommonModules/РегламентыЭПД_ЭПЭ/Ext/Module.bsl @@ -0,0 +1,485 @@ +//@strict-types + +#Область СлужебныеПроцедурыИФункции + +#Область ДляВызоваИзМодуляРегламентыЭДО + +// Возвращает состояние входящего электронного документа. +// +// Параметры: +// ПараметрыДокумента - См. РегламентыЭДО.НовыеПараметрыДокументаДляОпределенияСостояния +// СостоянияЭлементовРегламента - См. РегламентыЭДО.НовыеСостоянияЭлементовРегламента +// +// Возвращаемое значение: +// ПеречислениеСсылка.СостоянияДокументовЭДО +// +Функция СостояниеВходящегоДокумента(ПараметрыДокумента, СостоянияЭлементовРегламента) Экспорт + + ОбменСГИСЭПД.ДобавитьДанныеВСостоянияЭлементовРегламента(ПараметрыДокумента, СостоянияЭлементовРегламента); + + Состояние = Перечисления.СостоянияДокументовЭДО.ПустаяСсылка(); + + Если ЗаполнитьСостояниеПоВходящейИнформацииОтправителя(ПараметрыДокумента, СостоянияЭлементовРегламента, Состояние) + ИЛИ ЗначениеЗаполнено(Состояние) Тогда + + Возврат Состояние; + + ИначеЕсли ПараметрыДокумента.Исправлен Тогда + + Возврат Перечисления.СостоянияДокументовЭДО.ОбменЗавершенСИсправлением; + + КонецЕсли; + + Возврат Перечисления.СостоянияДокументовЭДО.ОбменЗавершен; + +КонецФункции + +// Возвращает состояние исходящего электронного документа. +// +// Параметры: +// ПараметрыДокумента - См. РегламентыЭДО.НовыеПараметрыДокументаДляОпределенияСостояния +// СостоянияЭлементовРегламента - См. РегламентыЭДО.НовыеСостоянияЭлементовРегламента +// +// Возвращаемое значение: +// ПеречислениеСсылка.СостоянияДокументовЭДО +// +Функция СостояниеИсходящегоДокумента(ПараметрыДокумента, СостоянияЭлементовРегламента) Экспорт + + ОбменСГИСЭПД.ДобавитьДанныеВСостоянияЭлементовРегламента(ПараметрыДокумента, СостоянияЭлементовРегламента); + + Состояние = Перечисления.СостоянияДокументовЭДО.ПустаяСсылка(); + + Если ЗаполнитьСостояниеПоИсходящейИнформацииОтправителя(ПараметрыДокумента, СостоянияЭлементовРегламента, Состояние) + Тогда + + Возврат Состояние; + + ИначеЕсли ПараметрыДокумента.Исправлен Тогда + + Возврат Перечисления.СостоянияДокументовЭДО.ОбменЗавершенСИсправлением; + + КонецЕсли; + + Возврат Перечисления.СостоянияДокументовЭДО.ОбменЗавершен; + +КонецФункции + +// Возвращает состояние сообщения. +// +// Параметры: +// ПараметрыСообщения - См. РегламентыЭДО.НовыеПараметрыСообщенияДляОпределенияСостояния +// ПараметрыДокумента - См. РегламентыЭДО.НовыеПараметрыДокументаДляОпределенияСостоянияСообщения +// ИспользоватьУтверждение - Булево +// +// Возвращаемое значение: +// ПеречислениеСсылка.СостоянияСообщенийЭДО +// +Функция СостояниеСообщения(ПараметрыСообщения, ПараметрыДокумента, ИспользоватьУтверждение) Экспорт + + Состояние = Перечисления.СостоянияСообщенийЭДО.ПустаяСсылка(); + + Статус = ПараметрыСообщения.Статус; + + Если Статус = Перечисления.СтатусыСообщенийЭДО.Получен Тогда + + Если ПараметрыДокумента.ОбменБезПодписи Тогда + Состояние = Перечисления.СостоянияСообщенийЭДО.ПодготовкаКОтправке; + Иначе + Состояние = Перечисления.СостоянияСообщенийЭДО.Хранение; + КонецЕсли; + + ИначеЕсли Статус = Перечисления.СтатусыСообщенийЭДО.Утвержден Тогда + + Состояние = Перечисления.СостоянияСообщенийЭДО.Хранение; + + ИначеЕсли Статус = Перечисления.СтатусыСообщенийЭДО.Сформирован Тогда + + Если ПараметрыДокумента.ОбменБезПодписи Тогда + Состояние = Перечисления.СостоянияСообщенийЭДО.ПодготовкаКОтправке; + Иначе + Состояние = Перечисления.СостоянияСообщенийЭДО.Подписание; + КонецЕсли; + + ИначеЕсли Статус = Перечисления.СтатусыСообщенийЭДО.ЧастичноПодписан Тогда + + Состояние = Перечисления.СостоянияСообщенийЭДО.Подписание; + + ИначеЕсли Статус = Перечисления.СтатусыСообщенийЭДО.Подписан Тогда + + Состояние = Перечисления.СостоянияСообщенийЭДО.ПодготовкаКОтправке; + + ИначеЕсли Статус = Перечисления.СтатусыСообщенийЭДО.ПодготовленКОтправке Тогда + + Состояние = Перечисления.СостоянияСообщенийЭДО.Отправка; + + ИначеЕсли Статус = Перечисления.СтатусыСообщенийЭДО.Отправлен Тогда + + Состояние = Перечисления.СостоянияСообщенийЭДО.Хранение; + + КонецЕсли; + + Возврат Состояние; + +КонецФункции + +// Возвращает коллекцию добавленных элементов схемы регламента. +// +// Параметры: +// СхемаРегламента - См. РегламентыЭДО.НоваяСхемаРегламента +// НастройкиСхемыРегламента - См. РегламентыЭДО.НовыеНастройкиСхемыРегламента +// +// Возвращаемое значение: +// См. РегламентыЭДО.НоваяКоллекцияЭлементовСхемыРегламента +// +Функция ДобавитьЭлементыСхемыРегламента(СхемаРегламента, НастройкиСхемыРегламента) Экспорт + + ЭлементыСхемы = РегламентыЭДО.НоваяКоллекцияЭлементовСхемыРегламента(); + + ДобавитьЭлементыРегламентаОтправителя(СхемаРегламента, НастройкиСхемыРегламента, ЭлементыСхемы); + + Возврат ЭлементыСхемы; + +КонецФункции + +// Параметры: +// СхемаРегламента - см. РегламентыЭДО.НоваяСхемаРегламента +// НастройкиСхемыРегламента - см. РегламентыЭДО.НовыеНастройкиСхемыРегламента +// ТипЭлементаРегламента - ПеречислениеСсылка.ТипыЭлементовРегламентаЭДО +// +// Возвращаемое значение: +// См. РегламентыЭДО.НоваяКоллекцияЭлементовСхемыРегламента +Функция ДобавитьЭлементыСхемыВложенногоРегламента(СхемаРегламента, НастройкиСхемыРегламента, ТипЭлементаРегламента) Экспорт + + Возврат РегламентыЭДО.НоваяКоллекцияЭлементовСхемыРегламента(); + +КонецФункции + +// Возвращает тип извещения для элемента входящего документа. +// +// Параметры: +// ТипЭлементаРегламента - ПеречислениеСсылка.ТипыЭлементовРегламентаЭДО +// +// Возвращаемое значение: +// ПеречислениеСсылка.ТипыЭлементовРегламентаЭДО +// +Функция ТипИзвещенияДляЭлементаВходящегоДокумента(ТипЭлементаРегламента) Экспорт + + Результат = Перечисления.ТипыЭлементовРегламентаЭДО.ПустаяСсылка(); + + Возврат Результат; + +КонецФункции + +// Возвращает тип извещения для элемента исходящего документа. +// +// Параметры: +// ТипЭлементаРегламента - ПеречислениеСсылка.ТипыЭлементовРегламентаЭДО +// +// Возвращаемое значение: +// ПеречислениеСсылка.ТипыЭлементовРегламентаЭДО +// +Функция ТипИзвещенияДляЭлементаИсходящегоДокумента(ТипЭлементаРегламента) Экспорт + + Результат = Перечисления.ТипыЭлементовРегламентаЭДО.ПустаяСсылка(); + + Возврат Результат; + +КонецФункции + +// Возвращает признак наличия информации получателя в регламенте. +// +// Возвращаемое значение: +// Булево +// +Функция ЕстьИнформацияПолучателя() Экспорт + Возврат Истина; +КонецФункции + +#КонецОбласти + +#Область ДобавитьЭлементыСхемыРегламента + +// Добавляет элементы по регламенту отправителя. +// +// Параметры: +// СхемаРегламента - См. РегламентыЭДО.НоваяСхемаРегламента +// НастройкиСхемыРегламента - См. РегламентыЭДО.НовыеНастройкиСхемыРегламента +// ЭлементыСхемы - См. РегламентыЭДО.НоваяКоллекцияЭлементовСхемыРегламента +// +Процедура ДобавитьЭлементыРегламентаОтправителя(СхемаРегламента, НастройкиСхемыРегламента, ЭлементыСхемы) + + ЭПЭ_Титул1 = РегламентыЭДО.ВставитьЭлементСхемыРегламента(ЭлементыСхемы, СхемаРегламента, + Перечисления.ТипыЭлементовРегламентаЭДО.ЭПЭ_Титул1); + + РегламентыЭДО.ВставитьЭлементСхемыРегламента(ЭлементыСхемы, ЭПЭ_Титул1, + Перечисления.ТипыЭлементовРегламентаЭДО.ЭПЭ_Титул2); + + РегламентыЭДО.ВставитьЭлементСхемыРегламента(ЭлементыСхемы, ЭПЭ_Титул1, + Перечисления.ТипыЭлементовРегламентаЭДО.ЭПЭ_Титул3); + +КонецПроцедуры + +#КонецОбласти + +#Область СостояниеДокумента + +// Возвращает признак успешности заполнения состояния по входящей информации отправителя. +// +// Параметры: +// ПараметрыДокумента - См. РегламентыЭДО.НовыеПараметрыДокументаДляОпределенияСостояния +// СостоянияЭлементовРегламента - См. РегламентыЭДО.НовыеСостоянияЭлементовРегламента +// Состояние - ПеречислениеСсылка.СостоянияДокументовЭДО +// +// Возвращаемое значение: +// Булево +// +Функция ЗаполнитьСостояниеПоВходящейИнформацииОтправителя(ПараметрыДокумента, СостоянияЭлементовРегламента, Состояние) + + Результат = Истина; + ЭлементРегламента = Неопределено; // Неопределено,СтрокаТаблицыЗначений: См. РегламентыЭДО.НовыеСостоянияЭлементовРегламента + + ОбменЗавершен = Ложь; + + Если ЗаполнитьСостояниеПоОтклонению(ПараметрыДокумента, + СостоянияЭлементовРегламента, Состояние) Тогда + + Возврат Истина; + + ИначеЕсли РегламентыЭДО.ЕстьЭлементРегламента(СостоянияЭлементовРегламента, + Перечисления.ТипыЭлементовРегламентаЭДО.ЭПЭ_Титул2, ЭлементРегламента) Тогда + + ОбменЗавершен = Истина; + + ИначеЕсли РегламентыЭДО.ЕстьЭлементРегламента(СостоянияЭлементовРегламента, + Перечисления.ТипыЭлементовРегламентаЭДО.ЭПЭ_Титул1, ЭлементРегламента) Тогда + + Иначе + + Состояние = РегламентыЭДО.НачальноеСостояниеДокумента(); + Возврат Ложь; + + КонецЕсли; + + Если ОбменЗавершен = Истина + И (ЭлементРегламента.Состояние = Перечисления.СостоянияСообщенийЭДО.Хранение + Или ЭтоВходящийЭлементРегламента(ЭлементРегламента)) Тогда + Состояние = Перечисления.СостоянияДокументовЭДО.ОбменЗавершен; + ИначеЕсли ЭлементРегламента.Состояние = Перечисления.СостоянияСообщенийЭДО.Отправка Тогда + Состояние = Перечисления.СостоянияДокументовЭДО.ТребуетсяОтправка; + ИначеЕсли ЭлементРегламента.Состояние = Перечисления.СостоянияСообщенийЭДО.ПодготовкаКОтправке Тогда + Состояние = Перечисления.СостоянияДокументовЭДО.ТребуетсяПодготовкаКОтправке; + Иначе + Если СостоянияЭлементовРегламента.Колонки.Найти("Ссылка") = Неопределено Тогда + // Новый документ + ТекущийДоступныйТитул = Неопределено; + Иначе + ТекущийДоступныйТитул = ТекущийДоступныйТитул(ПараметрыДокумента, ЭлементРегламента); + КонецЕсли; + + Если ЗаполнитьСостояниеДляИзвещения(ПараметрыДокумента, ЭлементРегламента, СостоянияЭлементовРегламента, Состояние) Тогда + Возврат Истина; + ИначеЕсли ЗначениеЗаполнено(ТекущийДоступныйТитул) + И ЭлементРегламента.Состояние = Перечисления.СостоянияСообщенийЭДО.Подписание Тогда + Состояние = Перечисления.СостоянияДокументовЭДО.ТребуетсяПодписание; + Иначе + Состояние = Перечисления.СостоянияДокументовЭДО.ОжидаетсяПодтверждение; + КонецЕсли; + КонецЕсли; + + Возврат Результат; + +КонецФункции + +Функция ЗаполнитьСостояниеДляИзвещения(ПараметрыДокумента, ЭлементРегламента, СостоянияЭлементовРегламента, Состояние) + + Возврат Ложь; + +КонецФункции + +// Возвращает текущий доступный титул. +// +// Параметры: +// ПараметрыДокумента - Структура - Параметры документа: +// * Ссылка - Неопределено, ДокументСсылка.ЭлектронныйДокументИсходящийЭДО, ДокументСсылка.ЭлектронныйДокументВходящийЭДО - +// * ТипРегламента - ПеречислениеСсылка.ТипыРегламентовЭДО - +// * СпособОбмена - ПеречислениеСсылка.СпособыОбменаЭД - +// * ОбменБезПодписи - Булево - +// * ТребуетсяПодтверждение - Булево - +// * ТребуетсяИзвещение - Булево - +// * Остановлен - Булево - +// * ПричинаОстановки - ПеречислениеСсылка.ПричиныОстановкиЭДО - +// * Исправлен - Булево - +// * ИдентификаторОрганизации - Строка - +// * ИдентификаторДокумента - Строка - +// ЭлементРегламента - СтрокаТаблицыЗначений, Неопределено - Элемент регламента: +// * ТипЭлементаРегламента - ПеречислениеСсылка.ТипыЭлементовРегламентаЭДО - +// * Состояние - ПеречислениеСсылка.СостоянияСообщенийЭДО - +// * Направление - ПеречислениеСсылка.НаправленияЭДО - +// * Дата - Дата - +// +// Возвращаемое значение: +// Неопределено, ПеречислениеСсылка.ТипыЭлементовРегламентаЭДО - Текущий доступный титул +// +//@skip-check invocation-parameter-type-intersect +//@skip-check property-return-type +//@skip-check statement-type-change +//@skip-check doc-comment-description-ends-on-dot +//@skip-check bsl-legacy-check-string-literal +Функция ТекущийДоступныйТитул(ПараметрыДокумента, ЭлементРегламента) + + ИдФайл = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ЭлементРегламента.Ссылка, "ОсновнойФайл.ПолноеИмяФайла"); + + ИдентификаторОрганизации = Неопределено; + Если ТипЗнч(ПараметрыДокумента) = Тип("Структура") Тогда + ПараметрыДокумента.Свойство("ИдентификаторОрганизации", ИдентификаторОрганизации); + ИначеЕсли ТипЗнч(ПараметрыДокумента) = Тип("ВыборкаИзРезультатаЗапроса") Тогда + Если ПараметрыДокумента.Владелец().Колонки.Найти("ИдентификаторОрганизации") <> Неопределено Тогда + ИдентификаторОрганизации = ПараметрыДокумента.ИдентификаторОрганизации; + КонецЕсли; + КонецЕсли; + + Адресаты = ОбменСГИСЭПДКлиентСервер.АдресатыПоИдФайл(ИдФайл); + Если ТипЗнч(ИдентификаторОрганизации) = Тип("Строка") Тогда + ИдентификаторОрганизации = ВРег(ИдентификаторОрганизации); + КонецЕсли; + + Если ИдентификаторОрганизации = Адресаты.Грузоотправитель Тогда + РольУчастника = 3; + ИначеЕсли ИдентификаторОрганизации = Адресаты.Грузоперевозчик Тогда + РольУчастника = 1; + Иначе + РольУчастника = 9; + КонецЕсли; + + ТекущийДоступныйТитул = Неопределено; + // Экспедитор + Если РольУчастника = 1 Тогда + Если ЭлементРегламента.ТипЭлементаРегламента = ПредопределенноеЗначение("Перечисление.ТипыЭлементовРегламентаЭДО.ЭПЭ_Титул1") Тогда + ТекущийДоступныйТитул = ПредопределенноеЗначение("Перечисление.ТипыЭлементовРегламентаЭДО.ЭПЭ_Титул2"); + ИначеЕсли ЭлементРегламента.ТипЭлементаРегламента = ПредопределенноеЗначение("Перечисление.ТипыЭлементовРегламентаЭДО.ЭПЭ_Титул2") + И ЭлементРегламента.Состояние <> Перечисления.СостоянияСообщенийЭДО.Хранение Тогда + ТекущийДоступныйТитул = ЭлементРегламента.ТипЭлементаРегламента; + КонецЕсли; + // Заказчик + ИначеЕсли РольУчастника = 3 Тогда + Если ЭлементРегламента.ТипЭлементаРегламента = ПредопределенноеЗначение("Перечисление.ТипыЭлементовРегламентаЭДО.ЭПЭ_Титул1") + И ЭлементРегламента.Состояние <> Перечисления.СостоянияСообщенийЭДО.Хранение Тогда + ТекущийДоступныйТитул = ЭлементРегламента.ТипЭлементаРегламента; + КонецЕсли; + КонецЕсли; + + Возврат ТекущийДоступныйТитул; + +КонецФункции + +// Возвращает признак успешности заполнения состояния по исходящей информации отправителя. +// +// Параметры: +// ПараметрыДокумента - См. РегламентыЭДО.НовыеПараметрыДокументаДляОпределенияСостояния +// СостоянияЭлементовРегламента - См. РегламентыЭДО.НовыеСостоянияЭлементовРегламента +// Состояние - ПеречислениеСсылка.СостоянияДокументовЭДО +// +// Возвращаемое значение: +// Булево +// +Функция ЗаполнитьСостояниеПоИсходящейИнформацииОтправителя(ПараметрыДокумента, СостоянияЭлементовРегламента, Состояние) + + Результат = Истина; + ЭлементРегламента = Неопределено; // Неопределено,СтрокаТаблицыЗначений: См. РегламентыЭДО.НовыеСостоянияЭлементовРегламента + + ОбменЗавершен = Ложь; + + Если ЗаполнитьСостояниеПоОтклонению(ПараметрыДокумента, + СостоянияЭлементовРегламента, Состояние) Тогда + + Возврат Истина; + + ИначеЕсли РегламентыЭДО.ЕстьЭлементРегламента(СостоянияЭлементовРегламента, + Перечисления.ТипыЭлементовРегламентаЭДО.ЭПЭ_Титул2, ЭлементРегламента) Тогда + + ОбменЗавершен = Истина; + + ИначеЕсли РегламентыЭДО.ЕстьЭлементРегламента(СостоянияЭлементовРегламента, + Перечисления.ТипыЭлементовРегламентаЭДО.ЭПЭ_Титул1, ЭлементРегламента) Тогда + + Иначе + + Состояние = РегламентыЭДО.НачальноеСостояниеДокумента(); + Возврат Ложь; + + КонецЕсли; + + Если ОбменЗавершен = Истина + И (ЭлементРегламента.Состояние = Перечисления.СостоянияСообщенийЭДО.Хранение + Или ЭтоВходящийЭлементРегламента(ЭлементРегламента)) Тогда + Состояние = Перечисления.СостоянияДокументовЭДО.ОбменЗавершен; + ИначеЕсли ЭлементРегламента.Состояние = Перечисления.СостоянияСообщенийЭДО.Отправка Тогда + Состояние = Перечисления.СостоянияДокументовЭДО.ТребуетсяОтправка; + ИначеЕсли ЭлементРегламента.Состояние = Перечисления.СостоянияСообщенийЭДО.ПодготовкаКОтправке Тогда + Состояние = Перечисления.СостоянияДокументовЭДО.ТребуетсяПодготовкаКОтправке; + Иначе + Если СостоянияЭлементовРегламента.Колонки.Найти("Ссылка") = Неопределено Тогда + // Новый документ + ТекущийДоступныйТитул = Перечисления.ТипыЭлементовРегламентаЭДО.ЭПЭ_Титул1; + Иначе + ТекущийДоступныйТитул = ТекущийДоступныйТитул(ПараметрыДокумента, ЭлементРегламента); + КонецЕсли; + + Если ЗаполнитьСостояниеДляИзвещения(ПараметрыДокумента, ЭлементРегламента, СостоянияЭлементовРегламента, Состояние) Тогда + Возврат Истина; + ИначеЕсли ЗначениеЗаполнено(ТекущийДоступныйТитул) + И ЭлементРегламента.Состояние = Перечисления.СостоянияСообщенийЭДО.Подписание Тогда + Состояние = Перечисления.СостоянияДокументовЭДО.ТребуетсяПодписание; + Иначе + Состояние = Перечисления.СостоянияДокументовЭДО.ОжидаетсяПодтверждение; + КонецЕсли; + КонецЕсли; + + Возврат Результат; + +КонецФункции + +Функция ЭтоВходящийЭлементРегламента(ЭлементРегламента) + + Если ЭлементРегламента.Владелец().Колонки.Найти("Ссылка") = Неопределено Тогда + Результат = Ложь; + Иначе + //@skip-check property-return-type + //@skip-check variable-value-type + СообщениеСсылка = ЭлементРегламента.Ссылка; + Если ТипЗнч(СообщениеСсылка) = Тип("ДокументСсылка.СообщениеЭДО") Тогда + Результат = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(СообщениеСсылка, "Направление") = Перечисления.НаправленияЭДО.Входящий; + Иначе + Результат = Ложь; + КонецЕсли; + КонецЕсли; + + Возврат Результат; + +КонецФункции + +// Возвращает признак успешности заполнения состояния по исходящему отклонению. +// +// Параметры: +// ПараметрыДокумента - См. РегламентыЭДО.НовыеПараметрыДокументаДляОпределенияСостояния +// СостоянияЭлементовРегламента - См. РегламентыЭДО.НовыеСостоянияЭлементовРегламента +// Состояние - ПеречислениеСсылка.СостоянияДокументовЭДО +// +// Возвращаемое значение: +// Булево +// +Функция ЗаполнитьСостояниеПоОтклонению(ПараметрыДокумента, СостоянияЭлементовРегламента, Состояние) + + Результат = Ложь; + + Если ПараметрыДокумента.Исправлен = Истина Тогда + Результат = Ложь; + КонецЕсли; + + Возврат Результат; + +КонецФункции + +#КонецОбласти + +#КонецОбласти \ No newline at end of file diff --git a/Конфигурация/CommonModules/РегламентыЭПД_ЭСР.xml b/Конфигурация/CommonModules/РегламентыЭПД_ЭСР.xml new file mode 100644 index 000000000..4765ef46c --- /dev/null +++ b/Конфигурация/CommonModules/РегламентыЭПД_ЭСР.xml @@ -0,0 +1,23 @@ + + + + + РегламентыЭПД_ЭСР + + + ru + Регламенты ЭПД ЭСР + + + + false + false + true + true + true + false + false + DontUse + + + \ No newline at end of file diff --git a/Конфигурация/CommonModules/РегламентыЭПД_ЭСР/Ext/Module.bsl b/Конфигурация/CommonModules/РегламентыЭПД_ЭСР/Ext/Module.bsl new file mode 100644 index 000000000..4ea1e29e5 --- /dev/null +++ b/Конфигурация/CommonModules/РегламентыЭПД_ЭСР/Ext/Module.bsl @@ -0,0 +1,471 @@ +//@strict-types + +#Область СлужебныеПроцедурыИФункции + +#Область ДляВызоваИзМодуляРегламентыЭДО + +// Возвращает состояние входящего электронного документа. +// +// Параметры: +// ПараметрыДокумента - См. РегламентыЭДО.НовыеПараметрыДокументаДляОпределенияСостояния +// СостоянияЭлементовРегламента - См. РегламентыЭДО.НовыеСостоянияЭлементовРегламента +// +// Возвращаемое значение: +// ПеречислениеСсылка.СостоянияДокументовЭДО +// +Функция СостояниеВходящегоДокумента(ПараметрыДокумента, СостоянияЭлементовРегламента) Экспорт + + ОбменСГИСЭПД.ДобавитьДанныеВСостоянияЭлементовРегламента(ПараметрыДокумента, СостоянияЭлементовРегламента); + + Состояние = Перечисления.СостоянияДокументовЭДО.ПустаяСсылка(); + + Если ЗаполнитьСостояниеПоВходящейИнформацииОтправителя(ПараметрыДокумента, СостоянияЭлементовРегламента, Состояние) + ИЛИ ЗначениеЗаполнено(Состояние) Тогда + + Возврат Состояние; + + ИначеЕсли ПараметрыДокумента.Исправлен Тогда + + Возврат Перечисления.СостоянияДокументовЭДО.ОбменЗавершенСИсправлением; + + КонецЕсли; + + Возврат Перечисления.СостоянияДокументовЭДО.ОбменЗавершен; + +КонецФункции + +// Возвращает состояние исходящего электронного документа. +// +// Параметры: +// ПараметрыДокумента - См. РегламентыЭДО.НовыеПараметрыДокументаДляОпределенияСостояния +// СостоянияЭлементовРегламента - См. РегламентыЭДО.НовыеСостоянияЭлементовРегламента +// +// Возвращаемое значение: +// ПеречислениеСсылка.СостоянияДокументовЭДО +// +Функция СостояниеИсходящегоДокумента(ПараметрыДокумента, СостоянияЭлементовРегламента) Экспорт + + ОбменСГИСЭПД.ДобавитьДанныеВСостоянияЭлементовРегламента(ПараметрыДокумента, СостоянияЭлементовРегламента); + + Состояние = Перечисления.СостоянияДокументовЭДО.ПустаяСсылка(); + + Если ЗаполнитьСостояниеПоИсходящейИнформацииОтправителя(ПараметрыДокумента, СостоянияЭлементовРегламента, Состояние) + Тогда + + Возврат Состояние; + + ИначеЕсли ПараметрыДокумента.Исправлен Тогда + + Возврат Перечисления.СостоянияДокументовЭДО.ОбменЗавершенСИсправлением; + + КонецЕсли; + + Возврат Перечисления.СостоянияДокументовЭДО.ОбменЗавершен; + +КонецФункции + +// Возвращает состояние сообщения. +// +// Параметры: +// ПараметрыСообщения - См. РегламентыЭДО.НовыеПараметрыСообщенияДляОпределенияСостояния +// ПараметрыДокумента - См. РегламентыЭДО.НовыеПараметрыДокументаДляОпределенияСостоянияСообщения +// ИспользоватьУтверждение - Булево +// +// Возвращаемое значение: +// ПеречислениеСсылка.СостоянияСообщенийЭДО +// +Функция СостояниеСообщения(ПараметрыСообщения, ПараметрыДокумента, ИспользоватьУтверждение) Экспорт + + Состояние = Перечисления.СостоянияСообщенийЭДО.ПустаяСсылка(); + + Статус = ПараметрыСообщения.Статус; + + Если Статус = Перечисления.СтатусыСообщенийЭДО.Получен Тогда + + Если ПараметрыДокумента.ОбменБезПодписи Тогда + Состояние = Перечисления.СостоянияСообщенийЭДО.ПодготовкаКОтправке; + Иначе + Состояние = Перечисления.СостоянияСообщенийЭДО.Хранение; + КонецЕсли; + + ИначеЕсли Статус = Перечисления.СтатусыСообщенийЭДО.Утвержден Тогда + + Состояние = Перечисления.СостоянияСообщенийЭДО.Хранение; + + ИначеЕсли Статус = Перечисления.СтатусыСообщенийЭДО.Сформирован Тогда + + Если ПараметрыДокумента.ОбменБезПодписи Тогда + Состояние = Перечисления.СостоянияСообщенийЭДО.ПодготовкаКОтправке; + Иначе + Состояние = Перечисления.СостоянияСообщенийЭДО.Подписание; + КонецЕсли; + + ИначеЕсли Статус = Перечисления.СтатусыСообщенийЭДО.ЧастичноПодписан Тогда + + Состояние = Перечисления.СостоянияСообщенийЭДО.Подписание; + + ИначеЕсли Статус = Перечисления.СтатусыСообщенийЭДО.Подписан Тогда + + Состояние = Перечисления.СостоянияСообщенийЭДО.ПодготовкаКОтправке; + + ИначеЕсли Статус = Перечисления.СтатусыСообщенийЭДО.ПодготовленКОтправке Тогда + + Состояние = Перечисления.СостоянияСообщенийЭДО.Отправка; + + ИначеЕсли Статус = Перечисления.СтатусыСообщенийЭДО.Отправлен Тогда + + Состояние = Перечисления.СостоянияСообщенийЭДО.Хранение; + + КонецЕсли; + + Возврат Состояние; + +КонецФункции + +// Возвращает коллекцию добавленных элементов схемы регламента. +// +// Параметры: +// СхемаРегламента - См. РегламентыЭДО.НоваяСхемаРегламента +// НастройкиСхемыРегламента - См. РегламентыЭДО.НовыеНастройкиСхемыРегламента +// +// Возвращаемое значение: +// См. РегламентыЭДО.НоваяКоллекцияЭлементовСхемыРегламента +// +Функция ДобавитьЭлементыСхемыРегламента(СхемаРегламента, НастройкиСхемыРегламента) Экспорт + + ЭлементыСхемы = РегламентыЭДО.НоваяКоллекцияЭлементовСхемыРегламента(); + + ДобавитьЭлементыРегламентаОтправителя(СхемаРегламента, НастройкиСхемыРегламента, ЭлементыСхемы); + + Возврат ЭлементыСхемы; + +КонецФункции + +// Параметры: +// СхемаРегламента - см. РегламентыЭДО.НоваяСхемаРегламента +// НастройкиСхемыРегламента - см. РегламентыЭДО.НовыеНастройкиСхемыРегламента +// ТипЭлементаРегламента - ПеречислениеСсылка.ТипыЭлементовРегламентаЭДО +// +// Возвращаемое значение: +// См. РегламентыЭДО.НоваяКоллекцияЭлементовСхемыРегламента +Функция ДобавитьЭлементыСхемыВложенногоРегламента(СхемаРегламента, НастройкиСхемыРегламента, ТипЭлементаРегламента) Экспорт + + Возврат РегламентыЭДО.НоваяКоллекцияЭлементовСхемыРегламента(); + +КонецФункции + +// Возвращает тип извещения для элемента входящего документа. +// +// Параметры: +// ТипЭлементаРегламента - ПеречислениеСсылка.ТипыЭлементовРегламентаЭДО +// +// Возвращаемое значение: +// ПеречислениеСсылка.ТипыЭлементовРегламентаЭДО +// +Функция ТипИзвещенияДляЭлементаВходящегоДокумента(ТипЭлементаРегламента) Экспорт + + Результат = Перечисления.ТипыЭлементовРегламентаЭДО.ПустаяСсылка(); + + Возврат Результат; + +КонецФункции + +// Возвращает тип извещения для элемента исходящего документа. +// +// Параметры: +// ТипЭлементаРегламента - ПеречислениеСсылка.ТипыЭлементовРегламентаЭДО +// +// Возвращаемое значение: +// ПеречислениеСсылка.ТипыЭлементовРегламентаЭДО +// +Функция ТипИзвещенияДляЭлементаИсходящегоДокумента(ТипЭлементаРегламента) Экспорт + + Результат = Перечисления.ТипыЭлементовРегламентаЭДО.ПустаяСсылка(); + + Возврат Результат; + +КонецФункции + +// Возвращает признак наличия информации получателя в регламенте. +// +// Возвращаемое значение: +// Булево +// +Функция ЕстьИнформацияПолучателя() Экспорт + Возврат Истина; +КонецФункции + +#КонецОбласти + +#Область ДобавитьЭлементыСхемыРегламента + +// Добавляет элементы по регламенту отправителя. +// +// Параметры: +// СхемаРегламента - См. РегламентыЭДО.НоваяСхемаРегламента +// НастройкиСхемыРегламента - См. РегламентыЭДО.НовыеНастройкиСхемыРегламента +// ЭлементыСхемы - См. РегламентыЭДО.НоваяКоллекцияЭлементовСхемыРегламента +// +Процедура ДобавитьЭлементыРегламентаОтправителя(СхемаРегламента, НастройкиСхемыРегламента, ЭлементыСхемы) + + ЭЭР_Титул1 = РегламентыЭДО.ВставитьЭлементСхемыРегламента(ЭлементыСхемы, СхемаРегламента, + Перечисления.ТипыЭлементовРегламентаЭДО.ЭСР_Титул1); + +КонецПроцедуры + +#КонецОбласти + +#Область СостояниеДокумента + +// Возвращает признак успешности заполнения состояния по входящей информации отправителя. +// +// Параметры: +// ПараметрыДокумента - См. РегламентыЭДО.НовыеПараметрыДокументаДляОпределенияСостояния +// СостоянияЭлементовРегламента - См. РегламентыЭДО.НовыеСостоянияЭлементовРегламента +// Состояние - ПеречислениеСсылка.СостоянияДокументовЭДО +// +// Возвращаемое значение: +// Булево +// +Функция ЗаполнитьСостояниеПоВходящейИнформацииОтправителя(ПараметрыДокумента, СостоянияЭлементовРегламента, Состояние) + + Результат = Истина; + ЭлементРегламента = Неопределено; // Неопределено,СтрокаТаблицыЗначений: См. РегламентыЭДО.НовыеСостоянияЭлементовРегламента + + ОбменЗавершен = Ложь; + + Если ЗаполнитьСостояниеПоОтклонению(ПараметрыДокумента, + СостоянияЭлементовРегламента, Состояние) Тогда + + Возврат Истина; + + ИначеЕсли РегламентыЭДО.ЕстьЭлементРегламента(СостоянияЭлементовРегламента, + Перечисления.ТипыЭлементовРегламентаЭДО.ЭСР_Титул1, ЭлементРегламента) Тогда + + ОбменЗавершен = Истина; + + Иначе + + Состояние = РегламентыЭДО.НачальноеСостояниеДокумента(); + Возврат Ложь; + + КонецЕсли; + + Если ОбменЗавершен = Истина + И (ЭлементРегламента.Состояние = Перечисления.СостоянияСообщенийЭДО.Хранение + Или ЭтоВходящийЭлементРегламента(ЭлементРегламента)) Тогда + Состояние = Перечисления.СостоянияДокументовЭДО.ОбменЗавершен; + ИначеЕсли ЭлементРегламента.Состояние = Перечисления.СостоянияСообщенийЭДО.Отправка Тогда + Состояние = Перечисления.СостоянияДокументовЭДО.ТребуетсяОтправка; + ИначеЕсли ЭлементРегламента.Состояние = Перечисления.СостоянияСообщенийЭДО.ПодготовкаКОтправке Тогда + Состояние = Перечисления.СостоянияДокументовЭДО.ТребуетсяПодготовкаКОтправке; + Иначе + Если СостоянияЭлементовРегламента.Колонки.Найти("Ссылка") = Неопределено Тогда + // Новый документ + ТекущийДоступныйТитул = Неопределено; + Иначе + ТекущийДоступныйТитул = ТекущийДоступныйТитул(ПараметрыДокумента, ЭлементРегламента); + КонецЕсли; + + Если ЗаполнитьСостояниеДляИзвещения(ПараметрыДокумента, ЭлементРегламента, СостоянияЭлементовРегламента, Состояние) Тогда + Возврат Истина; + ИначеЕсли ЗначениеЗаполнено(ТекущийДоступныйТитул) + И ЭлементРегламента.Состояние = Перечисления.СостоянияСообщенийЭДО.Подписание Тогда + Состояние = Перечисления.СостоянияДокументовЭДО.ТребуетсяПодписание; + Иначе + Состояние = Перечисления.СостоянияДокументовЭДО.ОжидаетсяПодтверждение; + КонецЕсли; + КонецЕсли; + + Возврат Результат; + +КонецФункции + +Функция ЗаполнитьСостояниеДляИзвещения(ПараметрыДокумента, ЭлементРегламента, СостоянияЭлементовРегламента, Состояние) + + Возврат Ложь; + +КонецФункции + +// Возвращает текущий доступный титул. +// +// Параметры: +// ПараметрыДокумента - Структура - Параметры документа: +// * Ссылка - Неопределено, ДокументСсылка.ЭлектронныйДокументИсходящийЭДО, ДокументСсылка.ЭлектронныйДокументВходящийЭДО - +// * ТипРегламента - ПеречислениеСсылка.ТипыРегламентовЭДО - +// * СпособОбмена - ПеречислениеСсылка.СпособыОбменаЭД - +// * ОбменБезПодписи - Булево - +// * ТребуетсяПодтверждение - Булево - +// * ТребуетсяИзвещение - Булево - +// * Остановлен - Булево - +// * ПричинаОстановки - ПеречислениеСсылка.ПричиныОстановкиЭДО - +// * Исправлен - Булево - +// * ИдентификаторОрганизации - Строка - +// * ИдентификаторДокумента - Строка - +// ЭлементРегламента - СтрокаТаблицыЗначений, Неопределено - Элемент регламента: +// * ТипЭлементаРегламента - ПеречислениеСсылка.ТипыЭлементовРегламентаЭДО - +// * Состояние - ПеречислениеСсылка.СостоянияСообщенийЭДО - +// * Направление - ПеречислениеСсылка.НаправленияЭДО - +// * Дата - Дата - +// +// Возвращаемое значение: +// Неопределено, ПеречислениеСсылка.ТипыЭлементовРегламентаЭДО - Текущий доступный титул +// +//@skip-check invocation-parameter-type-intersect +//@skip-check property-return-type +//@skip-check statement-type-change +//@skip-check doc-comment-description-ends-on-dot +//@skip-check bsl-legacy-check-string-literal +Функция ТекущийДоступныйТитул(ПараметрыДокумента, ЭлементРегламента) + + ИдФайл = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ЭлементРегламента.Ссылка, "ОсновнойФайл.ПолноеИмяФайла"); + + ИдентификаторОрганизации = Неопределено; + Если ТипЗнч(ПараметрыДокумента) = Тип("Структура") Тогда + ПараметрыДокумента.Свойство("ИдентификаторОрганизации", ИдентификаторОрганизации); + ИначеЕсли ТипЗнч(ПараметрыДокумента) = Тип("ВыборкаИзРезультатаЗапроса") Тогда + Если ПараметрыДокумента.Владелец().Колонки.Найти("ИдентификаторОрганизации") <> Неопределено Тогда + ИдентификаторОрганизации = ПараметрыДокумента.ИдентификаторОрганизации; + КонецЕсли; + КонецЕсли; + + Адресаты = ОбменСГИСЭПДКлиентСервер.АдресатыПоИдФайл(ИдФайл); + Если ТипЗнч(ИдентификаторОрганизации) = Тип("Строка") Тогда + ИдентификаторОрганизации = ВРег(ИдентификаторОрганизации); + КонецЕсли; + + Если ИдентификаторОрганизации = Адресаты.Грузоотправитель Тогда + РольУчастника = 3; + ИначеЕсли ИдентификаторОрганизации = Адресаты.Грузоперевозчик Тогда + РольУчастника = 1; + Иначе + РольУчастника = 9; + КонецЕсли; + + ТекущийДоступныйТитул = Неопределено; + // Заказчик + Если РольУчастника = 1 Тогда + Если ЭлементРегламента.ТипЭлементаРегламента = ПредопределенноеЗначение("Перечисление.ТипыЭлементовРегламентаЭДО.ЭСР_Титул1") + И ЭлементРегламента.Состояние <> Перечисления.СостоянияСообщенийЭДО.Хранение Тогда + ТекущийДоступныйТитул = ЭлементРегламента.ТипЭлементаРегламента; + КонецЕсли; + // Экспедитор + ИначеЕсли РольУчастника = 3 Тогда + Если ЭлементРегламента.ТипЭлементаРегламента = ПредопределенноеЗначение("Перечисление.ТипыЭлементовРегламентаЭДО.ЭСР_Титул1") + И ЭлементРегламента.Состояние <> Перечисления.СостоянияСообщенийЭДО.Хранение Тогда + ТекущийДоступныйТитул = ЭлементРегламента.ТипЭлементаРегламента; + КонецЕсли; + КонецЕсли; + + Возврат ТекущийДоступныйТитул; + +КонецФункции + +// Возвращает признак успешности заполнения состояния по исходящей информации отправителя. +// +// Параметры: +// ПараметрыДокумента - См. РегламентыЭДО.НовыеПараметрыДокументаДляОпределенияСостояния +// СостоянияЭлементовРегламента - См. РегламентыЭДО.НовыеСостоянияЭлементовРегламента +// Состояние - ПеречислениеСсылка.СостоянияДокументовЭДО +// +// Возвращаемое значение: +// Булево +// +Функция ЗаполнитьСостояниеПоИсходящейИнформацииОтправителя(ПараметрыДокумента, СостоянияЭлементовРегламента, Состояние) + + Результат = Истина; + ЭлементРегламента = Неопределено; // Неопределено,СтрокаТаблицыЗначений: См. РегламентыЭДО.НовыеСостоянияЭлементовРегламента + + ОбменЗавершен = Ложь; + + Если ЗаполнитьСостояниеПоОтклонению(ПараметрыДокумента, + СостоянияЭлементовРегламента, Состояние) Тогда + + Возврат Истина; + + ИначеЕсли РегламентыЭДО.ЕстьЭлементРегламента(СостоянияЭлементовРегламента, + Перечисления.ТипыЭлементовРегламентаЭДО.ЭСР_Титул1, ЭлементРегламента) Тогда + + ОбменЗавершен = Истина; + + Иначе + + Состояние = РегламентыЭДО.НачальноеСостояниеДокумента(); + Возврат Ложь; + + КонецЕсли; + + Если ОбменЗавершен = Истина + И (ЭлементРегламента.Состояние = Перечисления.СостоянияСообщенийЭДО.Хранение + Или ЭтоВходящийЭлементРегламента(ЭлементРегламента)) Тогда + Состояние = Перечисления.СостоянияДокументовЭДО.ОбменЗавершен; + ИначеЕсли ЭлементРегламента.Состояние = Перечисления.СостоянияСообщенийЭДО.Отправка Тогда + Состояние = Перечисления.СостоянияДокументовЭДО.ТребуетсяОтправка; + ИначеЕсли ЭлементРегламента.Состояние = Перечисления.СостоянияСообщенийЭДО.ПодготовкаКОтправке Тогда + Состояние = Перечисления.СостоянияДокументовЭДО.ТребуетсяПодготовкаКОтправке; + Иначе + Если СостоянияЭлементовРегламента.Колонки.Найти("Ссылка") = Неопределено Тогда + // Новый документ + ТекущийДоступныйТитул = Перечисления.ТипыЭлементовРегламентаЭДО.ЭПЭ_Титул1; + Иначе + ТекущийДоступныйТитул = ТекущийДоступныйТитул(ПараметрыДокумента, ЭлементРегламента); + КонецЕсли; + + Если ЗаполнитьСостояниеДляИзвещения(ПараметрыДокумента, ЭлементРегламента, СостоянияЭлементовРегламента, Состояние) Тогда + Возврат Истина; + ИначеЕсли ЗначениеЗаполнено(ТекущийДоступныйТитул) + И ЭлементРегламента.Состояние = Перечисления.СостоянияСообщенийЭДО.Подписание Тогда + Состояние = Перечисления.СостоянияДокументовЭДО.ТребуетсяПодписание; + Иначе + Состояние = Перечисления.СостоянияДокументовЭДО.ОжидаетсяПодтверждение; + КонецЕсли; + КонецЕсли; + + Возврат Результат; + +КонецФункции + +Функция ЭтоВходящийЭлементРегламента(ЭлементРегламента) + + Если ЭлементРегламента.Владелец().Колонки.Найти("Ссылка") = Неопределено Тогда + Результат = Ложь; + Иначе + //@skip-check property-return-type + //@skip-check variable-value-type + СообщениеСсылка = ЭлементРегламента.Ссылка; + Если ТипЗнч(СообщениеСсылка) = Тип("ДокументСсылка.СообщениеЭДО") Тогда + Результат = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(СообщениеСсылка, "Направление") = Перечисления.НаправленияЭДО.Входящий; + Иначе + Результат = Ложь; + КонецЕсли; + КонецЕсли; + + Возврат Результат; + +КонецФункции + +// Возвращает признак успешности заполнения состояния по исходящему отклонению. +// +// Параметры: +// ПараметрыДокумента - См. РегламентыЭДО.НовыеПараметрыДокументаДляОпределенияСостояния +// СостоянияЭлементовРегламента - См. РегламентыЭДО.НовыеСостоянияЭлементовРегламента +// Состояние - ПеречислениеСсылка.СостоянияДокументовЭДО +// +// Возвращаемое значение: +// Булево +// +Функция ЗаполнитьСостояниеПоОтклонению(ПараметрыДокумента, СостоянияЭлементовРегламента, Состояние) + + Результат = Ложь; + + Если ПараметрыДокумента.Исправлен = Истина Тогда + Результат = Ложь; + КонецЕсли; + + Возврат Результат; + +КонецФункции + +#КонецОбласти + +#КонецОбласти \ No newline at end of file diff --git a/Конфигурация/CommonModules/РегламентыЭПД_ЭЭР.xml b/Конфигурация/CommonModules/РегламентыЭПД_ЭЭР.xml new file mode 100644 index 000000000..69e424022 --- /dev/null +++ b/Конфигурация/CommonModules/РегламентыЭПД_ЭЭР.xml @@ -0,0 +1,23 @@ + + + + + РегламентыЭПД_ЭЭР + + + ru + Регламенты ЭПД ЭЭР + + + + false + false + true + true + true + false + false + DontUse + + + \ No newline at end of file diff --git a/Конфигурация/CommonModules/РегламентыЭПД_ЭЭР/Ext/Module.bsl b/Конфигурация/CommonModules/РегламентыЭПД_ЭЭР/Ext/Module.bsl new file mode 100644 index 000000000..4a29b7685 --- /dev/null +++ b/Конфигурация/CommonModules/РегламентыЭПД_ЭЭР/Ext/Module.bsl @@ -0,0 +1,471 @@ +//@strict-types + +#Область СлужебныеПроцедурыИФункции + +#Область ДляВызоваИзМодуляРегламентыЭДО + +// Возвращает состояние входящего электронного документа. +// +// Параметры: +// ПараметрыДокумента - См. РегламентыЭДО.НовыеПараметрыДокументаДляОпределенияСостояния +// СостоянияЭлементовРегламента - См. РегламентыЭДО.НовыеСостоянияЭлементовРегламента +// +// Возвращаемое значение: +// ПеречислениеСсылка.СостоянияДокументовЭДО +// +Функция СостояниеВходящегоДокумента(ПараметрыДокумента, СостоянияЭлементовРегламента) Экспорт + + ОбменСГИСЭПД.ДобавитьДанныеВСостоянияЭлементовРегламента(ПараметрыДокумента, СостоянияЭлементовРегламента); + + Состояние = Перечисления.СостоянияДокументовЭДО.ПустаяСсылка(); + + Если ЗаполнитьСостояниеПоВходящейИнформацииОтправителя(ПараметрыДокумента, СостоянияЭлементовРегламента, Состояние) + ИЛИ ЗначениеЗаполнено(Состояние) Тогда + + Возврат Состояние; + + ИначеЕсли ПараметрыДокумента.Исправлен Тогда + + Возврат Перечисления.СостоянияДокументовЭДО.ОбменЗавершенСИсправлением; + + КонецЕсли; + + Возврат Перечисления.СостоянияДокументовЭДО.ОбменЗавершен; + +КонецФункции + +// Возвращает состояние исходящего электронного документа. +// +// Параметры: +// ПараметрыДокумента - См. РегламентыЭДО.НовыеПараметрыДокументаДляОпределенияСостояния +// СостоянияЭлементовРегламента - См. РегламентыЭДО.НовыеСостоянияЭлементовРегламента +// +// Возвращаемое значение: +// ПеречислениеСсылка.СостоянияДокументовЭДО +// +Функция СостояниеИсходящегоДокумента(ПараметрыДокумента, СостоянияЭлементовРегламента) Экспорт + + ОбменСГИСЭПД.ДобавитьДанныеВСостоянияЭлементовРегламента(ПараметрыДокумента, СостоянияЭлементовРегламента); + + Состояние = Перечисления.СостоянияДокументовЭДО.ПустаяСсылка(); + + Если ЗаполнитьСостояниеПоИсходящейИнформацииОтправителя(ПараметрыДокумента, СостоянияЭлементовРегламента, Состояние) + Тогда + + Возврат Состояние; + + ИначеЕсли ПараметрыДокумента.Исправлен Тогда + + Возврат Перечисления.СостоянияДокументовЭДО.ОбменЗавершенСИсправлением; + + КонецЕсли; + + Возврат Перечисления.СостоянияДокументовЭДО.ОбменЗавершен; + +КонецФункции + +// Возвращает состояние сообщения. +// +// Параметры: +// ПараметрыСообщения - См. РегламентыЭДО.НовыеПараметрыСообщенияДляОпределенияСостояния +// ПараметрыДокумента - См. РегламентыЭДО.НовыеПараметрыДокументаДляОпределенияСостоянияСообщения +// ИспользоватьУтверждение - Булево +// +// Возвращаемое значение: +// ПеречислениеСсылка.СостоянияСообщенийЭДО +// +Функция СостояниеСообщения(ПараметрыСообщения, ПараметрыДокумента, ИспользоватьУтверждение) Экспорт + + Состояние = Перечисления.СостоянияСообщенийЭДО.ПустаяСсылка(); + + Статус = ПараметрыСообщения.Статус; + + Если Статус = Перечисления.СтатусыСообщенийЭДО.Получен Тогда + + Если ПараметрыДокумента.ОбменБезПодписи Тогда + Состояние = Перечисления.СостоянияСообщенийЭДО.ПодготовкаКОтправке; + Иначе + Состояние = Перечисления.СостоянияСообщенийЭДО.Хранение; + КонецЕсли; + + ИначеЕсли Статус = Перечисления.СтатусыСообщенийЭДО.Утвержден Тогда + + Состояние = Перечисления.СостоянияСообщенийЭДО.Хранение; + + ИначеЕсли Статус = Перечисления.СтатусыСообщенийЭДО.Сформирован Тогда + + Если ПараметрыДокумента.ОбменБезПодписи Тогда + Состояние = Перечисления.СостоянияСообщенийЭДО.ПодготовкаКОтправке; + Иначе + Состояние = Перечисления.СостоянияСообщенийЭДО.Подписание; + КонецЕсли; + + ИначеЕсли Статус = Перечисления.СтатусыСообщенийЭДО.ЧастичноПодписан Тогда + + Состояние = Перечисления.СостоянияСообщенийЭДО.Подписание; + + ИначеЕсли Статус = Перечисления.СтатусыСообщенийЭДО.Подписан Тогда + + Состояние = Перечисления.СостоянияСообщенийЭДО.ПодготовкаКОтправке; + + ИначеЕсли Статус = Перечисления.СтатусыСообщенийЭДО.ПодготовленКОтправке Тогда + + Состояние = Перечисления.СостоянияСообщенийЭДО.Отправка; + + ИначеЕсли Статус = Перечисления.СтатусыСообщенийЭДО.Отправлен Тогда + + Состояние = Перечисления.СостоянияСообщенийЭДО.Хранение; + + КонецЕсли; + + Возврат Состояние; + +КонецФункции + +// Возвращает коллекцию добавленных элементов схемы регламента. +// +// Параметры: +// СхемаРегламента - См. РегламентыЭДО.НоваяСхемаРегламента +// НастройкиСхемыРегламента - См. РегламентыЭДО.НовыеНастройкиСхемыРегламента +// +// Возвращаемое значение: +// См. РегламентыЭДО.НоваяКоллекцияЭлементовСхемыРегламента +// +Функция ДобавитьЭлементыСхемыРегламента(СхемаРегламента, НастройкиСхемыРегламента) Экспорт + + ЭлементыСхемы = РегламентыЭДО.НоваяКоллекцияЭлементовСхемыРегламента(); + + ДобавитьЭлементыРегламентаОтправителя(СхемаРегламента, НастройкиСхемыРегламента, ЭлементыСхемы); + + Возврат ЭлементыСхемы; + +КонецФункции + +// Параметры: +// СхемаРегламента - см. РегламентыЭДО.НоваяСхемаРегламента +// НастройкиСхемыРегламента - см. РегламентыЭДО.НовыеНастройкиСхемыРегламента +// ТипЭлементаРегламента - ПеречислениеСсылка.ТипыЭлементовРегламентаЭДО +// +// Возвращаемое значение: +// См. РегламентыЭДО.НоваяКоллекцияЭлементовСхемыРегламента +Функция ДобавитьЭлементыСхемыВложенногоРегламента(СхемаРегламента, НастройкиСхемыРегламента, ТипЭлементаРегламента) Экспорт + + Возврат РегламентыЭДО.НоваяКоллекцияЭлементовСхемыРегламента(); + +КонецФункции + +// Возвращает тип извещения для элемента входящего документа. +// +// Параметры: +// ТипЭлементаРегламента - ПеречислениеСсылка.ТипыЭлементовРегламентаЭДО +// +// Возвращаемое значение: +// ПеречислениеСсылка.ТипыЭлементовРегламентаЭДО +// +Функция ТипИзвещенияДляЭлементаВходящегоДокумента(ТипЭлементаРегламента) Экспорт + + Результат = Перечисления.ТипыЭлементовРегламентаЭДО.ПустаяСсылка(); + + Возврат Результат; + +КонецФункции + +// Возвращает тип извещения для элемента исходящего документа. +// +// Параметры: +// ТипЭлементаРегламента - ПеречислениеСсылка.ТипыЭлементовРегламентаЭДО +// +// Возвращаемое значение: +// ПеречислениеСсылка.ТипыЭлементовРегламентаЭДО +// +Функция ТипИзвещенияДляЭлементаИсходящегоДокумента(ТипЭлементаРегламента) Экспорт + + Результат = Перечисления.ТипыЭлементовРегламентаЭДО.ПустаяСсылка(); + + Возврат Результат; + +КонецФункции + +// Возвращает признак наличия информации получателя в регламенте. +// +// Возвращаемое значение: +// Булево +// +Функция ЕстьИнформацияПолучателя() Экспорт + Возврат Истина; +КонецФункции + +#КонецОбласти + +#Область ДобавитьЭлементыСхемыРегламента + +// Добавляет элементы по регламенту отправителя. +// +// Параметры: +// СхемаРегламента - См. РегламентыЭДО.НоваяСхемаРегламента +// НастройкиСхемыРегламента - См. РегламентыЭДО.НовыеНастройкиСхемыРегламента +// ЭлементыСхемы - См. РегламентыЭДО.НоваяКоллекцияЭлементовСхемыРегламента +// +Процедура ДобавитьЭлементыРегламентаОтправителя(СхемаРегламента, НастройкиСхемыРегламента, ЭлементыСхемы) + + ЭЭР_Титул1 = РегламентыЭДО.ВставитьЭлементСхемыРегламента(ЭлементыСхемы, СхемаРегламента, + Перечисления.ТипыЭлементовРегламентаЭДО.ЭЭР_Титул1); + +КонецПроцедуры + +#КонецОбласти + +#Область СостояниеДокумента + +// Возвращает признак успешности заполнения состояния по входящей информации отправителя. +// +// Параметры: +// ПараметрыДокумента - См. РегламентыЭДО.НовыеПараметрыДокументаДляОпределенияСостояния +// СостоянияЭлементовРегламента - См. РегламентыЭДО.НовыеСостоянияЭлементовРегламента +// Состояние - ПеречислениеСсылка.СостоянияДокументовЭДО +// +// Возвращаемое значение: +// Булево +// +Функция ЗаполнитьСостояниеПоВходящейИнформацииОтправителя(ПараметрыДокумента, СостоянияЭлементовРегламента, Состояние) + + Результат = Истина; + ЭлементРегламента = Неопределено; // Неопределено,СтрокаТаблицыЗначений: См. РегламентыЭДО.НовыеСостоянияЭлементовРегламента + + ОбменЗавершен = Ложь; + + Если ЗаполнитьСостояниеПоОтклонению(ПараметрыДокумента, + СостоянияЭлементовРегламента, Состояние) Тогда + + Возврат Истина; + + ИначеЕсли РегламентыЭДО.ЕстьЭлементРегламента(СостоянияЭлементовРегламента, + Перечисления.ТипыЭлементовРегламентаЭДО.ЭЭР_Титул1, ЭлементРегламента) Тогда + + ОбменЗавершен = Истина; + + Иначе + + Состояние = РегламентыЭДО.НачальноеСостояниеДокумента(); + Возврат Ложь; + + КонецЕсли; + + Если ОбменЗавершен = Истина + И (ЭлементРегламента.Состояние = Перечисления.СостоянияСообщенийЭДО.Хранение + Или ЭтоВходящийЭлементРегламента(ЭлементРегламента)) Тогда + Состояние = Перечисления.СостоянияДокументовЭДО.ОбменЗавершен; + ИначеЕсли ЭлементРегламента.Состояние = Перечисления.СостоянияСообщенийЭДО.Отправка Тогда + Состояние = Перечисления.СостоянияДокументовЭДО.ТребуетсяОтправка; + ИначеЕсли ЭлементРегламента.Состояние = Перечисления.СостоянияСообщенийЭДО.ПодготовкаКОтправке Тогда + Состояние = Перечисления.СостоянияДокументовЭДО.ТребуетсяПодготовкаКОтправке; + Иначе + Если СостоянияЭлементовРегламента.Колонки.Найти("Ссылка") = Неопределено Тогда + // Новый документ + ТекущийДоступныйТитул = Неопределено; + Иначе + ТекущийДоступныйТитул = ТекущийДоступныйТитул(ПараметрыДокумента, ЭлементРегламента); + КонецЕсли; + + Если ЗаполнитьСостояниеДляИзвещения(ПараметрыДокумента, ЭлементРегламента, СостоянияЭлементовРегламента, Состояние) Тогда + Возврат Истина; + ИначеЕсли ЗначениеЗаполнено(ТекущийДоступныйТитул) + И ЭлементРегламента.Состояние = Перечисления.СостоянияСообщенийЭДО.Подписание Тогда + Состояние = Перечисления.СостоянияДокументовЭДО.ТребуетсяПодписание; + Иначе + Состояние = Перечисления.СостоянияДокументовЭДО.ОжидаетсяПодтверждение; + КонецЕсли; + КонецЕсли; + + Возврат Результат; + +КонецФункции + +Функция ЗаполнитьСостояниеДляИзвещения(ПараметрыДокумента, ЭлементРегламента, СостоянияЭлементовРегламента, Состояние) + + Возврат Ложь; + +КонецФункции + +// Возвращает текущий доступный титул. +// +// Параметры: +// ПараметрыДокумента - Структура - Параметры документа: +// * Ссылка - Неопределено, ДокументСсылка.ЭлектронныйДокументИсходящийЭДО, ДокументСсылка.ЭлектронныйДокументВходящийЭДО - +// * ТипРегламента - ПеречислениеСсылка.ТипыРегламентовЭДО - +// * СпособОбмена - ПеречислениеСсылка.СпособыОбменаЭД - +// * ОбменБезПодписи - Булево - +// * ТребуетсяПодтверждение - Булево - +// * ТребуетсяИзвещение - Булево - +// * Остановлен - Булево - +// * ПричинаОстановки - ПеречислениеСсылка.ПричиныОстановкиЭДО - +// * Исправлен - Булево - +// * ИдентификаторОрганизации - Строка - +// * ИдентификаторДокумента - Строка - +// ЭлементРегламента - СтрокаТаблицыЗначений, Неопределено - Элемент регламента: +// * ТипЭлементаРегламента - ПеречислениеСсылка.ТипыЭлементовРегламентаЭДО - +// * Состояние - ПеречислениеСсылка.СостоянияСообщенийЭДО - +// * Направление - ПеречислениеСсылка.НаправленияЭДО - +// * Дата - Дата - +// +// Возвращаемое значение: +// Неопределено, ПеречислениеСсылка.ТипыЭлементовРегламентаЭДО - Текущий доступный титул +// +//@skip-check invocation-parameter-type-intersect +//@skip-check property-return-type +//@skip-check statement-type-change +//@skip-check doc-comment-description-ends-on-dot +//@skip-check bsl-legacy-check-string-literal +Функция ТекущийДоступныйТитул(ПараметрыДокумента, ЭлементРегламента) + + ИдФайл = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ЭлементРегламента.Ссылка, "ОсновнойФайл.ПолноеИмяФайла"); + + ИдентификаторОрганизации = Неопределено; + Если ТипЗнч(ПараметрыДокумента) = Тип("Структура") Тогда + ПараметрыДокумента.Свойство("ИдентификаторОрганизации", ИдентификаторОрганизации); + ИначеЕсли ТипЗнч(ПараметрыДокумента) = Тип("ВыборкаИзРезультатаЗапроса") Тогда + Если ПараметрыДокумента.Владелец().Колонки.Найти("ИдентификаторОрганизации") <> Неопределено Тогда + ИдентификаторОрганизации = ПараметрыДокумента.ИдентификаторОрганизации; + КонецЕсли; + КонецЕсли; + + Адресаты = ОбменСГИСЭПДКлиентСервер.АдресатыПоИдФайл(ИдФайл); + Если ТипЗнч(ИдентификаторОрганизации) = Тип("Строка") Тогда + ИдентификаторОрганизации = ВРег(ИдентификаторОрганизации); + КонецЕсли; + + Если ИдентификаторОрганизации = Адресаты.Грузоотправитель Тогда + РольУчастника = 3; + ИначеЕсли ИдентификаторОрганизации = Адресаты.Грузоперевозчик Тогда + РольУчастника = 1; + Иначе + РольУчастника = 9; + КонецЕсли; + + ТекущийДоступныйТитул = Неопределено; + // Заказчик + Если РольУчастника = 1 Тогда + Если ЭлементРегламента.ТипЭлементаРегламента = ПредопределенноеЗначение("Перечисление.ТипыЭлементовРегламентаЭДО.ЭЭР_Титул1") + И ЭлементРегламента.Состояние <> Перечисления.СостоянияСообщенийЭДО.Хранение Тогда + ТекущийДоступныйТитул = ЭлементРегламента.ТипЭлементаРегламента; + КонецЕсли; + // Экспедитор + ИначеЕсли РольУчастника = 3 Тогда + Если ЭлементРегламента.ТипЭлементаРегламента = ПредопределенноеЗначение("Перечисление.ТипыЭлементовРегламентаЭДО.ЭЭР_Титул1") + И ЭлементРегламента.Состояние <> Перечисления.СостоянияСообщенийЭДО.Хранение Тогда + ТекущийДоступныйТитул = ЭлементРегламента.ТипЭлементаРегламента; + КонецЕсли; + КонецЕсли; + + Возврат ТекущийДоступныйТитул; + +КонецФункции + +// Возвращает признак успешности заполнения состояния по исходящей информации отправителя. +// +// Параметры: +// ПараметрыДокумента - См. РегламентыЭДО.НовыеПараметрыДокументаДляОпределенияСостояния +// СостоянияЭлементовРегламента - См. РегламентыЭДО.НовыеСостоянияЭлементовРегламента +// Состояние - ПеречислениеСсылка.СостоянияДокументовЭДО +// +// Возвращаемое значение: +// Булево +// +Функция ЗаполнитьСостояниеПоИсходящейИнформацииОтправителя(ПараметрыДокумента, СостоянияЭлементовРегламента, Состояние) + + Результат = Истина; + ЭлементРегламента = Неопределено; // Неопределено,СтрокаТаблицыЗначений: См. РегламентыЭДО.НовыеСостоянияЭлементовРегламента + + ОбменЗавершен = Ложь; + + Если ЗаполнитьСостояниеПоОтклонению(ПараметрыДокумента, + СостоянияЭлементовРегламента, Состояние) Тогда + + Возврат Истина; + + ИначеЕсли РегламентыЭДО.ЕстьЭлементРегламента(СостоянияЭлементовРегламента, + Перечисления.ТипыЭлементовРегламентаЭДО.ЭЭР_Титул1, ЭлементРегламента) Тогда + + ОбменЗавершен = Истина; + + Иначе + + Состояние = РегламентыЭДО.НачальноеСостояниеДокумента(); + Возврат Ложь; + + КонецЕсли; + + Если ОбменЗавершен = Истина + И (ЭлементРегламента.Состояние = Перечисления.СостоянияСообщенийЭДО.Хранение + Или ЭтоВходящийЭлементРегламента(ЭлементРегламента)) Тогда + Состояние = Перечисления.СостоянияДокументовЭДО.ОбменЗавершен; + ИначеЕсли ЭлементРегламента.Состояние = Перечисления.СостоянияСообщенийЭДО.Отправка Тогда + Состояние = Перечисления.СостоянияДокументовЭДО.ТребуетсяОтправка; + ИначеЕсли ЭлементРегламента.Состояние = Перечисления.СостоянияСообщенийЭДО.ПодготовкаКОтправке Тогда + Состояние = Перечисления.СостоянияДокументовЭДО.ТребуетсяПодготовкаКОтправке; + Иначе + Если СостоянияЭлементовРегламента.Колонки.Найти("Ссылка") = Неопределено Тогда + // Новый документ + ТекущийДоступныйТитул = Перечисления.ТипыЭлементовРегламентаЭДО.ЭПЭ_Титул1; + Иначе + ТекущийДоступныйТитул = ТекущийДоступныйТитул(ПараметрыДокумента, ЭлементРегламента); + КонецЕсли; + + Если ЗаполнитьСостояниеДляИзвещения(ПараметрыДокумента, ЭлементРегламента, СостоянияЭлементовРегламента, Состояние) Тогда + Возврат Истина; + ИначеЕсли ЗначениеЗаполнено(ТекущийДоступныйТитул) + И ЭлементРегламента.Состояние = Перечисления.СостоянияСообщенийЭДО.Подписание Тогда + Состояние = Перечисления.СостоянияДокументовЭДО.ТребуетсяПодписание; + Иначе + Состояние = Перечисления.СостоянияДокументовЭДО.ОжидаетсяПодтверждение; + КонецЕсли; + КонецЕсли; + + Возврат Результат; + +КонецФункции + +Функция ЭтоВходящийЭлементРегламента(ЭлементРегламента) + + Если ЭлементРегламента.Владелец().Колонки.Найти("Ссылка") = Неопределено Тогда + Результат = Ложь; + Иначе + //@skip-check property-return-type + //@skip-check variable-value-type + СообщениеСсылка = ЭлементРегламента.Ссылка; + Если ТипЗнч(СообщениеСсылка) = Тип("ДокументСсылка.СообщениеЭДО") Тогда + Результат = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(СообщениеСсылка, "Направление") = Перечисления.НаправленияЭДО.Входящий; + Иначе + Результат = Ложь; + КонецЕсли; + КонецЕсли; + + Возврат Результат; + +КонецФункции + +// Возвращает признак успешности заполнения состояния по исходящему отклонению. +// +// Параметры: +// ПараметрыДокумента - См. РегламентыЭДО.НовыеПараметрыДокументаДляОпределенияСостояния +// СостоянияЭлементовРегламента - См. РегламентыЭДО.НовыеСостоянияЭлементовРегламента +// Состояние - ПеречислениеСсылка.СостоянияДокументовЭДО +// +// Возвращаемое значение: +// Булево +// +Функция ЗаполнитьСостояниеПоОтклонению(ПараметрыДокумента, СостоянияЭлементовРегламента, Состояние) + + Результат = Ложь; + + Если ПараметрыДокумента.Исправлен = Истина Тогда + Результат = Ложь; + КонецЕсли; + + Возврат Результат; + +КонецФункции + +#КонецОбласти + +#КонецОбласти \ No newline at end of file diff --git a/Конфигурация/CommonModules/РозничныеПродажиСервер/Ext/Module.bsl b/Конфигурация/CommonModules/РозничныеПродажиСервер/Ext/Module.bsl index 49cffdca6..e81e89ec6 100644 --- a/Конфигурация/CommonModules/РозничныеПродажиСервер/Ext/Module.bsl +++ b/Конфигурация/CommonModules/РозничныеПродажиСервер/Ext/Module.bsl @@ -2706,10 +2706,14 @@ Объект = Ссылка.ПолучитьОбъект(); - ЕстьОшибкиГОСИС = Ложь; - ПроверитьЗаполнениеАкцизныхМарок(Объект, ЕстьОшибкиГОСИС); - Если ЕстьОшибкиГОСИС Тогда - Возврат Неопределено; + Если Не ЭтоОплатаЗаказа Тогда + + ЕстьОшибкиГОСИС = Ложь; + ПроверитьЗаполнениеАкцизныхМарок(Объект, ЕстьОшибкиГОСИС); + Если ЕстьОшибкиГОСИС Тогда + Возврат Неопределено; + КонецЕсли; + КонецЕсли; // Подготовка таблицы товаров diff --git a/Конфигурация/CommonModules/СПАРКРиски/Ext/Module.bsl b/Конфигурация/CommonModules/СПАРКРиски/Ext/Module.bsl index 8a3e933af..dc2fd151a 100644 --- a/Конфигурация/CommonModules/СПАРКРиски/Ext/Module.bsl +++ b/Конфигурация/CommonModules/СПАРКРиски/Ext/Module.bsl @@ -1579,6 +1579,11 @@ Методы.Вставить("ПерейтиНаВерсию_2_1_7_10"); Методы.Вставить("ПерейтиНаВерсию_2_1_7_11"); + Если ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.БазоваяФункциональность") Тогда + Методы.Вставить("ЗаполнениеКонтрагентовНаМониторингеСПАРКРиски"); + Методы.Вставить("ПроверитьГотовностьСправкиСПАРКРиски"); + КонецЕсли; + КонецПроцедуры #КонецОбласти diff --git a/Конфигурация/CommonModules/СверкаВзаиморасчетовСБПc2b/Ext/Module.bsl b/Конфигурация/CommonModules/СверкаВзаиморасчетовСБПc2b/Ext/Module.bsl index f7e0c33f9..518f468dd 100644 --- a/Конфигурация/CommonModules/СверкаВзаиморасчетовСБПc2b/Ext/Module.bsl +++ b/Конфигурация/CommonModules/СверкаВзаиморасчетовСБПc2b/Ext/Module.bsl @@ -432,6 +432,10 @@ Методы.Вставить("СверкаВзаиморасчетовПоОборотамИнтерактивныйЗапрос", Истина); + Если ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.БазоваяФункциональность") Тогда + Методы.Вставить("ПроверкаГотовностиСверкиВзаиморасчетовСБПc2b"); + КонецЕсли; + КонецПроцедуры #КонецОбласти diff --git a/Конфигурация/CommonModules/СерверныеОповещения/Ext/Module.bsl b/Конфигурация/CommonModules/СерверныеОповещения/Ext/Module.bsl index 0be7bec74..fddcac2d4 100644 --- a/Конфигурация/CommonModules/СерверныеОповещения/Ext/Module.bsl +++ b/Конфигурация/CommonModules/СерверныеОповещения/Ext/Module.bsl @@ -944,7 +944,7 @@ УстановитьОтключениеБезопасногоРежима(Истина); УстановитьПривилегированныйРежим(Истина); - Возврат Константы.РегистрироватьПоказателиСерверныхОповещений.Получить(); + Возврат Константы.РегистрироватьПоказателиСерверныхОповещений.Получить() = Истина; КонецФункции @@ -3016,9 +3016,18 @@ УстановитьБезопасныйРежим(Истина); // АПК:488-выкл Поддержка новых возможностей платформы (исполняемый код безопасен) - Возврат Вычислить("УведомленияКлиента") + Возврат Вычислить("УведомленияКлиента"); // Не нарушает безопасность информации, так как вычисляется фиксированная строка, содержащая только свойство глобального контекста платформы. // АПК:488-вкл КонецФункции +// См. СтандартныеПодсистемыСервер.ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод +Процедура ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод(Методы) Экспорт + + Если ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.БазоваяФункциональность") Тогда + Методы.Вставить("ОтправкаСерверныхОповещенийКлиентам"); + КонецЕсли; + +КонецПроцедуры + #КонецОбласти diff --git a/Конфигурация/CommonModules/СерверныеОповещенияКлиент/Ext/Module.bsl b/Конфигурация/CommonModules/СерверныеОповещенияКлиент/Ext/Module.bsl index efed24390..00d2a3d32 100644 --- a/Конфигурация/CommonModules/СерверныеОповещенияКлиент/Ext/Module.bsl +++ b/Конфигурация/CommonModules/СерверныеОповещенияКлиент/Ext/Module.bsl @@ -175,7 +175,7 @@ СостояниеПолучения.ПроверкаРазрешена = Истина; ПодключитьОбработчикПроверкиПолученияСерверныхОповещений(); - ПодключитьОбработчикНовыхСообщений(СостояниеПолучения()); + ПодключитьОбработчикНовыхСообщений(СостояниеПолучения); КонецПроцедуры @@ -631,6 +631,7 @@ // * Оповещения - см. ОбщегоНазначенияПереопределяемый.ПриДобавленииСерверныхОповещений.Оповещения // * ПолученныеОповещения - Массив из Строка - строки уникальных идентификаторов полученных сообщений. // * УведомленияКлиентаДоступны - Булево +// * ОбработчикУведомленийКлиентаПодключен - Булево // * СистемаВзаимодействийПодключена - Булево // * ИдентификаторЛичногоОбсуждения - Неопределено - обсуждение недоступно. // - ИдентификаторОбсужденияСистемыВзаимодействия - идентификатор @@ -667,6 +668,7 @@ Состояние.Вставить("Оповещения", Новый Соответствие); Состояние.Вставить("ПолученныеОповещения", Новый Массив); Состояние.Вставить("УведомленияКлиентаДоступны", Ложь); + Состояние.Вставить("ОбработчикУведомленийКлиентаПодключен", Ложь); Состояние.Вставить("СистемаВзаимодействийПодключена", Ложь); Состояние.Вставить("ИдентификаторЛичногоОбсуждения", Неопределено); Состояние.Вставить("ИдентификаторОбщегоОбсуждения", Неопределено); @@ -687,10 +689,14 @@ Контекст = Новый Структура("СостояниеПолучения", СостояниеПолучения); Если СостояниеПолучения.УведомленияКлиентаДоступны Тогда + Если СостояниеПолучения.ОбработчикУведомленийКлиентаПодключен Тогда + Возврат; + КонецЕсли; МенеджерУведомленийКлиента().ПодключитьОбработчик( СерверныеОповещенияСлужебныйКлиентСервер.КлючУведомленийСерверныхОповещений(), Новый ОписаниеОповещения("ПриПолученииНовогоУведомленияКлиента", ЭтотОбъект, Контекст, "ПриОшибкеПолученияНовогоУведомленияКлиента", ЭтотОбъект)); + СостояниеПолучения.ОбработчикУведомленийКлиентаПодключен = Истина; Возврат; КонецЕсли; @@ -934,7 +940,7 @@ Функция МенеджерУведомленийКлиента() // АПК:488-выкл Поддержка новых возможностей платформы (исполняемый код безопасен) - Возврат Вычислить("УведомленияКлиента") + Возврат Вычислить("УведомленияКлиента"); // Не нарушает безопасность информации, так как вычисляется фиксированная строка, содержащая только свойство глобального контекста платформы. // АПК:488-вкл КонецФункции diff --git a/Конфигурация/CommonModules/СервисEDI.xml b/Конфигурация/CommonModules/СервисEDI.xml new file mode 100644 index 000000000..c2c2a20c1 --- /dev/null +++ b/Конфигурация/CommonModules/СервисEDI.xml @@ -0,0 +1,23 @@ + + + + + СервисEDI + + + ru + Сервис 1С:EDI (сервер) + + + + false + false + true + true + true + false + false + DontUse + + + \ No newline at end of file diff --git a/Конфигурация/CommonModules/СервисEDI/Ext/Module.bsl b/Конфигурация/CommonModules/СервисEDI/Ext/Module.bsl new file mode 100644 index 000000000..e19f83dac --- /dev/null +++ b/Конфигурация/CommonModules/СервисEDI/Ext/Module.bsl @@ -0,0 +1,13 @@ +// @strict-types + +#Область ПрограммныйИнтерфейс + +// Выполняем загрузку документов через сервис 1С:EDI +// +// Возвращаемое значение: +// Массив из ДокументСсылка.ТранспортныйКонтейнерЭДО - Загруженные транспортные контейнеры +Функция ПолучитьСообщения() Экспорт + Возврат СервисEDIСлужебный.ПолучитьСообщения(); +КонецФункции + +#КонецОбласти diff --git a/Конфигурация/CommonModules/СервисEDIВызовСервера.xml b/Конфигурация/CommonModules/СервисEDIВызовСервера.xml new file mode 100644 index 000000000..8c3f7e54e --- /dev/null +++ b/Конфигурация/CommonModules/СервисEDIВызовСервера.xml @@ -0,0 +1,23 @@ + + + + + СервисEDIВызовСервера + + + ru + Сервис 1С:EDI (вызов сервера) + + + + false + false + true + false + false + true + false + DontUse + + + \ No newline at end of file diff --git a/Конфигурация/CommonModules/СервисEDIВызовСервера/Ext/Module.bsl b/Конфигурация/CommonModules/СервисEDIВызовСервера/Ext/Module.bsl new file mode 100644 index 000000000..4916e7853 --- /dev/null +++ b/Конфигурация/CommonModules/СервисEDIВызовСервера/Ext/Module.bsl @@ -0,0 +1,29 @@ +// @strict-types + +#Область СлужебныйПрограммныйИнтерфейс + +// См. СервисEDIСлужебный.ЗафиксироватьНастройкиЭТрН +Процедура ЗафиксироватьНастройкиЭТрН( + Знач Организация, + Знач Контрагент) Экспорт + + СервисEDIСлужебный.ЗафиксироватьНастройкиЭТрН(Организация, Контрагент); + +КонецПроцедуры + +// См. СервисEDIСлужебный.ЭтоКлючНастроекЧерезСервис1СEDI +Функция ЭтоКлючНастроекЧерезСервис1СEDI(Знач КлючНастроекЭДО) Экспорт + Возврат СервисEDIСлужебный.ЭтоКлючНастроекЧерезСервис1СEDI(КлючНастроекЭДО); +КонецФункции + +// См. СервисEDIСлужебныйКлиент.ТребуетсяНастройкаОбмена +Функция ТребуетсяНастройкаОбмена(КлючНастроек) Экспорт + Возврат СервисEDIСлужебный.ТребуетсяНастройкаОбмена(КлючНастроек); +КонецФункции + +// См. СервисEDIСлужебный.ЗапуститьПолучениеСообщений +Функция ЗапуститьПолучениеСообщений() Экспорт + Возврат СервисEDIСлужебный.ЗапуститьПолучениеСообщений(); +КонецФункции + +#КонецОбласти diff --git a/Конфигурация/CommonModules/СервисEDIКлиент.xml b/Конфигурация/CommonModules/СервисEDIКлиент.xml new file mode 100644 index 000000000..ac711e71d --- /dev/null +++ b/Конфигурация/CommonModules/СервисEDIКлиент.xml @@ -0,0 +1,23 @@ + + + + + СервисEDIКлиент + + + ru + Сервис 1С:EDI (клиент) + + + + false + true + false + false + true + false + false + DontUse + + + \ No newline at end of file diff --git a/Конфигурация/CommonModules/СервисEDIКлиент/Ext/Module.bsl b/Конфигурация/CommonModules/СервисEDIКлиент/Ext/Module.bsl new file mode 100644 index 000000000..200b58524 --- /dev/null +++ b/Конфигурация/CommonModules/СервисEDIКлиент/Ext/Module.bsl @@ -0,0 +1,56 @@ +// @strict-types + +#Область ПрограммныйИнтерфейс + +// Создает новый документ ЭТрН для отправки через сервис 1С:EDI +// +// Важно: +// Перед открытием формы ЭТрН будут проверены/созданы настройки обмена между +// Организация и Контрагент для обмена через сервис 1С:EDI. +// +// Параметры: +// Организация - ОпределяемыйТип.Организация - Грузоотправитель по ЭТрН +// Контрагент - ОпределяемыйТип.УчастникЭДО - Грузополучатель по ЭТрН +// ДокументОснования - ОпределяемыйТип.ДокументыОснованияЭТрН_ЭПД - Документ-основания ЭТрН +// ФормаВладелец - ФормаКлиентскогоПриложения - Форма, из которой открывается форма документа ЭТрН +// - Неопределено - Форма не задана +// АдресХранилищаИнфоПолейЭТрН - Строка - адрес хранилища таблицы инфополей ЭТрН +// - Неопределено - Таблица инфополей не передана +// Оповещение - ОписаниеОповещения - Обработчик завершения работы с ЭТрН +// - Неопределено - Оповещать не требуется +Процедура СоздатьЭТрН( + Знач Организация, + Знач Контрагент, + Знач ДокументОснования = Неопределено, + Знач ФормаВладелец = Неопределено, + Знач АдресХранилищаИнфоПолейЭТрН = Неопределено, + Знач Оповещение = Неопределено) Экспорт + + СервисEDIСлужебныйКлиент.СоздатьЭТрН( + Организация, + Контрагент, + ДокументОснования, + ФормаВладелец, + АдресХранилищаИнфоПолейЭТрН, + Оповещение); + +КонецПроцедуры + +// Получить сообщения. +// +// Параметры: +// ФормаВладелец - ФормаКлиентскогоПриложения - Форма, из которой открывается форма +// документа ЭТрН. +// - Неопределено - Форма не задана +// Оповещение - ОписаниеОповещения - Обработчик завершения работы с ЭТрН +// - Неопределено - Оповещать не требуется +// ПараметрыОжидания - См. ДлительныеОперацииКлиент.ПараметрыОжидания +// - Неопределено - Стандартные параметры ожидания +Процедура ПолучитьСообщения( + Знач ФормаВладелец = Неопределено, + Знач Оповещение = Неопределено, + Знач ПараметрыОжидания = Неопределено) Экспорт + СервисEDIСлужебныйКлиент.ПолучитьСообщения(ФормаВладелец, Оповещение, ПараметрыОжидания); +КонецПроцедуры + +#КонецОбласти diff --git a/Конфигурация/CommonModules/СервисEDIСлужебный.xml b/Конфигурация/CommonModules/СервисEDIСлужебный.xml new file mode 100644 index 000000000..6a40ae19c --- /dev/null +++ b/Конфигурация/CommonModules/СервисEDIСлужебный.xml @@ -0,0 +1,23 @@ + + + + + СервисEDIСлужебный + + + ru + Сервис 1С:EDI (сервер служебный) + + + + false + false + true + true + true + false + false + DontUse + + + \ No newline at end of file diff --git a/Конфигурация/CommonModules/СервисEDIСлужебный/Ext/Module.bsl b/Конфигурация/CommonModules/СервисEDIСлужебный/Ext/Module.bsl new file mode 100644 index 000000000..f46fefa7d --- /dev/null +++ b/Конфигурация/CommonModules/СервисEDIСлужебный/Ext/Module.bsl @@ -0,0 +1,3145 @@ +// @strict-types + +#Область СлужебныйПрограммныйИнтерфейс + +#Область ОбновлениеКонфигурации + +// См. ОбновлениеИнформационнойБазыБСП.ПриДобавленииОбработчиковОбновления. +Процедура ПриДобавленииОбработчиковОбновления(Обработчики) Экспорт + РегистрыСведений.СведенияОФайлахСообщенийЭДО.ПриДобавленииОбработчиковОбновления(Обработчики); +КонецПроцедуры + +#КонецОбласти + +#Область РеализацияПрограммногоИнтерфейса + +// См. СервисEDI.ПолучитьСообщения +Функция ПолучитьСообщения() Экспорт + + РезультатПолученияДокументов = СинхронизацияЭДОСлужебный.НовыйРезультатПолученияДокументов(); + КлючиСинхронизации = СинхронизацияЭДОКлиентСервер.НовыеКлючиСинхронизации(); + КонтекстДиагностики = ОбработкаНеисправностейБЭД.НовыйКонтекстДиагностики(); + РезультатыОтправкиПолучения = ЭлектронныеДокументыЭДОКлиентСервер.НовыеРезультатыОтправкиПолучения(); + + ПолучитьНовыеЭлектронныеДокументыЧерезСервис1СEDI( + РезультатПолученияДокументов, + КлючиСинхронизации, + КонтекстДиагностики, + РезультатыОтправкиПолучения); + + РаспаковатьКонтейнеры(РезультатПолученияДокументов.Контейнеры); + + Возврат РезультатПолученияДокументов.Контейнеры; + +КонецФункции + +#КонецОбласти + +#Область ИнтеграцияОбменСКонтрагентами + +// Отправляет транспортный контейнер через сервис 1С:EDI. +// +// Параметры: +// ПараметрыОтправки - См. СинхронизацияЭДОСлужебный.НовыеПараметрыОтправкиТранспортногоКонтейнера +// КонтекстДиагностики - См. ОбработкаНеисправностейБЭД.НовыйКонтекстДиагностики +// +// Возвращаемое значение: +// См. СинхронизацияЭДОСлужебный.НовыйРезультатОтправкиТранспортногоКонтейнера +Функция ОтправитьКонтейнер(Знач ПараметрыОтправки, КонтекстДиагностики) Экспорт + + Результат = СинхронизацияЭДОСлужебный.НовыйРезультатОтправкиТранспортногоКонтейнера(); + + РезультатВыполнения = ОтправитьСообщение(ПараметрыОтправки); + + Если РезультатВыполнения.Отказ Тогда + Ошибка = СинхронизацияЭДО.НоваяОшибкаПередачи(); + Ошибка.Код = КодОшибкиТранспорта(); + Ошибка.Блокирующая = Истина; + Ошибка.Описание = РезультатВыполнения.ТекстОшибки; + + Результат.Успех = Ложь; + Результат.ОшибкаПередачи = Ошибка; + + ВидОперации = НСтр( + "ru = 'Отправка транспортного контейнера ЭДО через сервис 1С:EDI'", + ОбщегоНазначения.КодОсновногоЯзыка()); + + ТекстСообщения = + СтрШаблон( + НСтр( + "ru = 'Не удалось отправить сообщение через сервис 1С:EDI по причине: %1'", + ОбщегоНазначения.КодОсновногоЯзыка()), + РезультатВыполнения.ТекстОшибки); + Ошибка = ОбработкаНеисправностейБЭД.НоваяОшибка( + ВидОперации, + ОбработкаНеисправностейБЭДКлиентСервер.ВидОшибкиНеизвестнаяОшибка(), + ТекстСообщения, + ТекстСообщения); + ОбработкаНеисправностейБЭД.ДобавитьОшибку(КонтекстДиагностики, Ошибка, + ОбщегоНазначенияБЭДКлиентСервер.ПодсистемыБЭД().ОбменСКонтрагентами); + Иначе + Результат.Успех = Истина; + КонецЕсли; + + Возврат Результат; + +КонецФункции + +// Фиксирует настройки обмена ЭТрН через сервис 1С:EDI +// +// Параметры: +// Организация - ОпределяемыйТип.Организация - Грузоотправитель по ЭТрН +// Контрагент - ОпределяемыйТип.УчастникЭДО - Грузополучатель по ЭТрН +// +Процедура ЗафиксироватьНастройкиЭТрН( + Знач Организация, + Знач Контрагент) Экспорт + + ЗафиксироватьНастройки(Перечисления.ТипыДокументовЭДО.ЭТрН, Организация, Контрагент); + +КонецПроцедуры + +// Проверяет, является ли способ обмена через сервис 1С:EDI +// +// Параметры: +// СпособОбмена - ПеречислениеСсылка.СпособыОбменаЭД - Способ обмена +// +// Возвращаемое значение: +// Булево - Истина, если это обмен через сервис 1С:EDI +Функция ЭтоОбменЧерезСервис1СEDI(Знач СпособОбмена) Экспорт + Возврат СпособОбмена = Перечисления.СпособыОбменаЭД.ЧерезСервис1СEDI; +КонецФункции + +// Получить новые электронные документы от оператора ЭДО. +// +// Параметры: +// РезультатПолученияДокументов - См. СинхронизацияЭДОСлужебный.НовыйРезультатПолученияДокументов +// КлючиСинхронизации - См. СинхронизацияЭДОКлиентСервер.НовыеКлючиСинхронизации +// КонтекстДиагностики - См. ОбработкаНеисправностейБЭД.НовыйКонтекстДиагностики +// РезультатыОтправкиПолучения - См. ЭлектронныеДокументыЭДОКлиентСервер.НовыеРезультатыОтправкиПолучения +Процедура ПолучитьНовыеЭлектронныеДокументыЧерезСервис1СEDI( + РезультатПолученияДокументов, + КлючиСинхронизации, + КонтекстДиагностики, + РезультатыОтправкиПолучения) Экспорт + + Контекст = "СервисEDIСлужебный.ПолучитьНовыеЭлектронныеДокументыЧерезСервис1СEDI"; + УчетныеЗаписи = УчетныеЗаписи(); + + ПроверитьОтсутствиеТранзакции(Контекст); + + Для Каждого УчетнаяЗапись Из УчетныеЗаписи Цикл + Попытка + ПолучитьДокументыПоОрганизации(РезультатПолученияДокументов, УчетнаяЗапись); + Исключение + ТекстОшибки = ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); + Операция = НСтр("ru = 'Получение электронных документов через сервис 1С:EDI'"); + ПодробноеПредставлениеОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ОбработкаНеисправностейБЭД.ОбработатьОшибку( + Операция, ОбщегоНазначенияБЭДКлиентСервер.ПодсистемыБЭД().ОбменСКонтрагентами, + ПодробноеПредставлениеОшибки, ТекстОшибки); + Продолжить; // Не прерываем обработку других учетных записей + КонецПопытки; + КонецЦикла; + +КонецПроцедуры + +// Проверяет, является ли переданный ключ ключом обмена через сервис 1С:EDI +// +// Параметры: +// КлючНастроекЭДО - См. НастройкиЭДОКлиентСервер.НовыйКлючНастроекОтправки +// +// Возвращаемое значение: +// Булево - Истина, если это ключ настроек для обмена через сервис 1С:EDI. +// Ложь, в ином случае. +Функция ЭтоКлючНастроекЧерезСервис1СEDI(Знач КлючНастроекЭДО) Экспорт + + НастройкиОтправки = НастройкиЭДО.НастройкиОтправки(КлючНастроекЭДО); + + Если НастройкиОтправки = Неопределено Тогда + Возврат Ложь; + КонецЕсли; + + Возврат ЭтоОбменЧерезСервис1СEDI(НастройкиОтправки.СпособОбмена); + +КонецФункции + +// Проверяет, является ли код ошибки кодом ошибки транспорта через сервис 1С:EDI +// +// Параметры: +// КодОшибки - Строка - Проверяемый код ошибки +// +// Возвращаемое значение: +// Булево - Истина, если это ошибка транспорта через сервис 1С:EDI +Функция ЭтоКодОшибкиТранспорта(Знач КодОшибки) Экспорт + Возврат КодОшибки = КодОшибкиТранспорта(); +КонецФункции + +// Параметры: +// СообщениеОбъект - ДокументОбъект.СообщениеЭДО +// ОписаниеСообщения - см. ЭлектронныеДокументыЭДО.НовоеОписаниеСообщения +// НастройкиДокумента - Структура: +// * ТипДокумента - ПеречислениеСсылка.ТипыДокументовЭДО +// * ТипРегламента - ПеречислениеСсылка.ТипыРегламентовЭДО +// * ТребуетсяПодтверждение - Булево +// * ОбменБезПодписи - Булево +// * СпособОбмена - ПеречислениеСсылка.СпособыОбменаЭД +Процедура ЗафиксироватьСведенияОФайлахСообщенийЭДО( + Знач СообщениеОбъект, + Знач ОписаниеСообщения, + Знач НастройкиДокумента) Экспорт + + ИдентификаторДокументооборота = ОбщегоНазначения.ЗначениеРеквизитаОбъекта( + СообщениеОбъект.ЭлектронныйДокумент, "ИдентификаторДокументооборота"); + ИмяФайла = ОписаниеСообщения.Данные.Документ.ИмяФайла; + СтруктураИмениФайла = ОбщегоНазначенияКлиентСервер.РазложитьПолноеИмяФайла(ИмяФайла); + + Сведения = РегистрыСведений.СведенияОФайлахСообщенийЭДО.НовыеСведенияОСообщении(); + + Сведения.ФайлСообщенияЭДО = СообщениеОбъект.ОсновнойФайл; + Сведения.ИдентификаторДокументооборота = ИдентификаторДокументооборота; + //@skip-check property-return-type + //@skip-check statement-type-change + Сведения.ИмяФайла = СтруктураИмениФайла.ИмяБезРасширения; // Строка + + РегистрыСведений.СведенияОФайлахСообщенийЭДО.Зафиксировать(Сведения); + +КонецПроцедуры + +// Параметры: +// ОписаниеКонтейнера - См. ТранспортныеКонтейнерыЭДО.РаспаковатьФайлКонтейнера +Процедура ВыполнитьПоискИдентификаторовДокументооборотаПоИмениФайла(ОписаниеКонтейнера) Экспорт + + ДокументыКонтейнера = ОбщегоНазначенияБЭД.ЗначениеПоПути( + ОписаниеКонтейнера, + "Метаданные.Документы"); // Массив из См. ТранспортныеКонтейнерыЭДО.НовоеОписаниеДокументаКонтейнера + + Если ДокументыКонтейнера = Неопределено Тогда + Возврат; + КонецЕсли; + + Для Каждого ДокументКонтейнера Из ДокументыКонтейнера Цикл + ВыполнитьПоискИдентификаторовДокументооборотаДокументаПоИмениФайла(ДокументКонтейнера); + КонецЦикла; + +КонецПроцедуры + +// См. СервисEDIСлужебныйКлиент.ТребуетсяНастройкаОбмена +Функция ТребуетсяНастройкаОбмена(КлючНастроек) Экспорт + + КлючНастроекКонтрагент = НастройкиЭДОКлиентСервер.НовыйКлючНастроекОтправки(); + + КлючНастроекКонтрагент.Отправитель = КлючНастроек.Организация; + КлючНастроекКонтрагент.Получатель = КлючНастроек.Контрагент; + КлючНастроекКонтрагент.Договор = КлючНастроек.Договор; + КлючНастроекКонтрагент.ВидДокумента = КлючНастроек.ВидДокумента; + + НастройкиОтправкиКонтрагент = НастройкиЭДО.НастройкиОтправки(КлючНастроекКонтрагент); + + КлючНастроекПеревозчик = НастройкиЭДОКлиентСервер.НовыйКлючНастроекОтправки(); + + КлючНастроекПеревозчик.Отправитель = КлючНастроек.Организация; + КлючНастроекПеревозчик.Получатель = КлючНастроек.Перевозчик; + КлючНастроекПеревозчик.Договор = КлючНастроек.Договор; + КлючНастроекПеревозчик.ВидДокумента = КлючНастроек.ВидДокумента; + + НастройкиОтправкиПеревозчик = НастройкиЭДО.НастройкиОтправки(КлючНастроекПеревозчик); + + Если Не ЭтоНастройкиОтправкиЧерезСервис1СEDI(НастройкиОтправкиКонтрагент) + И Не ЭтоНастройкиОтправкиЧерезСервис1СEDI(НастройкиОтправкиПеревозчик) Тогда + Возврат Ложь; + КонецЕсли; + + Возврат Не НастройкиОтправкиЗаполнены(НастройкиОтправкиКонтрагент); + +КонецФункции + +// Параметры: +// ТаблицаНастроек - ТаблицаЗначений: +// * СпособОбменаЭД - ПеречислениеСсылка.СпособыОбменаЭД +// * Формировать - Булево +Процедура ПриЗаполненииНастроекОтправкиЭлектронныхДокументовПоВидам(ТаблицаНастроек) Экспорт + + СпособыОбменаЭД = ТаблицаНастроек.ВыгрузитьКолонку("СпособОбменаЭД"); + СпособыОбменаЭД = ОбщегоНазначенияКлиентСервер.СвернутьМассив(СпособыОбменаЭД); + + Индекс = СпособыОбменаЭД.Найти(Перечисления.СпособыОбменаЭД.ПустаяСсылка()); + + Если Индекс <> Неопределено Тогда + СпособыОбменаЭД.Удалить(Индекс); + КонецЕсли; + + Если СпособыОбменаЭД.Количество() = 1 + И СпособыОбменаЭД[0] = СпособОбмена() Тогда + + Отбор = Новый Структура; + Отбор.Вставить("СпособОбменаЭД", Перечисления.СпособыОбменаЭД.ПустаяСсылка()); + + Строки = ТаблицаНастроек.НайтиСтроки(Отбор); + + Для каждого Строка Из Строки Цикл + Строка.Формировать = Ложь; + КонецЦикла; + + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область НастройкиЭДО + +// Получает настройки обмена по организации, контрагенту и виду документа +// +// Параметры: +// Организация - ОпределяемыйТип.Организация - Отправитель для настроек +// Контрагент - ОпределяемыйТип.УчастникЭДО - Получатель для настроек +// ВидДокумента - СправочникСсылка.ВидыДокументовЭДО - Вид документа для настроек +// +// Возвращаемое значение: +// См. НастройкиОтправкиЭДО.НастройкиОтправки +Функция НастройкиОбмена(Знач Организация, Знач Контрагент, Знач ВидДокумента) Экспорт + + КлючНастроекЭДО = НастройкиЭДОКлиентСервер.НовыйКлючНастроекОтправки(); + + КлючНастроекЭДО.Отправитель = Организация; + КлючНастроекЭДО.Получатель = Контрагент; + КлючНастроекЭДО.Договор = ПустойДоговор(); + КлючНастроекЭДО.ВидДокумента = ВидДокумента; + + Результат = НастройкиЭДО.НастройкиОтправки(КлючНастроекЭДО); + + Если Результат = Неопределено Тогда + Возврат Результат; + КонецЕсли; + + Если Не ЭтоОбменЧерезСервис1СEDI(Результат.СпособОбмена) Тогда + ВызватьИсключение( + СтрШаблон( + НСтр( + "ru = 'Недопустим ввод настроек через сервис 1С:EDI. + |Настройки введены ранее для другого оператора: + |- Организация: %1 + |- Контрагент: %2 + |- Вид документа: %3 + |- Способ обмена: %4'", + ОбщегоНазначения.КодОсновногоЯзыка()), + Организация, + Контрагент, + ВидДокумента, + Результат.СпособОбмена)); + КонецЕсли; + + Возврат Результат; + +КонецФункции + +// Метод-конструктор настроек обмена ЭТрН через сервис 1С:EDI +// +// Возвращаемое значение: +// Структура - Настройки: +// * Организация - ОпределяемыйТип.Организация - Организация настроек +// - Неопределено - Не задан +// * Контрагент - ОпределяемыйТип.УчастникЭДО - Контрагент настроек +// - Неопределено - Не задан +// * Перевозчик - ОпределяемыйТип.УчастникЭДО - Перевозчик настроек +// - Неопределено - Не задан +// * ИдентификаторОрганизации - Строка - Идентификатор ЭДО организации +// * ИдентификаторКонтрагента - Строка - Идентификатор ЭДО контрагента +// * ИдентификаторПеревозчика - Строка - Идентификатор ЭДО перевозчика +// * Сертификат - СправочникСсылка.СертификатыКлючейЭлектроннойПодписиИШифрования - Сертификат +// * Доверенность - ОпределяемыйТип.МашиночитаемаяДоверенность - Доверенность сертификата +// - Неопределено - Не задана +Функция НовыеНастройкиЭТрН() Экспорт + + Результат = Новый Структура; + + Результат.Вставить("Организация" , Неопределено); + Результат.Вставить("Контрагент" , Неопределено); + Результат.Вставить("Перевозчик" , Неопределено); + + Результат.Вставить("ИдентификаторОрганизации", ""); + Результат.Вставить("ИдентификаторКонтрагента", ""); + Результат.Вставить("ИдентификаторПеревозчика", ""); + + Результат.Вставить("Сертификат" , Справочники.СертификатыКлючейЭлектроннойПодписиИШифрования.ПустаяСсылка()); + Результат.Вставить("Доверенность", Неопределено); + + Возврат Результат; + +КонецФункции + +// Записывает настройки обмена через сервис 1С:EDI. +// +// Параметры: +// Настройки - См. НовыеНастройкиЭТрН +Процедура ЗаписатьНастройкиЭТрН(Знач Настройки) Экспорт + + Контекст = "СервисEDIСлужебный.ЗаписатьНастройкиЭТрН"; + + ПроверитьНаличиеПодсистемыБизнесСеть(Контекст); + + ВидДокумента = ВидДокумента(Перечисления.ТипыДокументовЭДО.ЭТрН); + + Организация = Настройки.Организация; + Контрагент = Настройки.Контрагент; + Перевозчик = Настройки.Перевозчик; + + ПроверитьУчастника(Контекст, "Настройки.Организация", Организация, Метаданные.ОпределяемыеТипы.Организация.Тип); + ПроверитьУчастника(Контекст, "Настройки.Контрагент", Контрагент, Метаданные.ОпределяемыеТипы.УчастникЭДО.Тип); + ПроверитьУчастника(Контекст, "Настройки.Перевозчик", Перевозчик, Метаданные.ОпределяемыеТипы.УчастникЭДО.Тип); + + ИдентификаторОрганизации = Настройки.ИдентификаторОрганизации; + ИдентификаторКонтрагента = Настройки.ИдентификаторКонтрагента; + ИдентификаторПеревозчика = Настройки.ИдентификаторПеревозчика; + + ПроверитьИдентификатор(Контекст, "Настройки.ИдентификаторОрганизации", ИдентификаторОрганизации); + ПроверитьИдентификатор(Контекст, "Настройки.ИдентификаторКонтрагента", ИдентификаторКонтрагента); + ПроверитьИдентификатор(Контекст, "Настройки.ИдентификаторПеревозчика", ИдентификаторПеревозчика); + + НачатьТранзакцию(); + Попытка + УстановитьБлокировкуУчетнойЗаписи(ИдентификаторОрганизации); + УстановитьБлокировкуНастроекОтправкиПоВидам(ВидДокумента, Организация, Контрагент); + УстановитьБлокировкуНастроекОтправкиПоВидам(ВидДокумента, Организация, Перевозчик); + + ЗаписатьУчетнуюЗапись( + Организация, + ИдентификаторОрганизации); + ЗаписатьСертификатУчетнойЗаписи( + ИдентификаторОрганизации, + Настройки.Сертификат, + Настройки.Доверенность); + ЗаписатьИдентификаторы( + ВидДокумента, + Организация, + Контрагент, + ИдентификаторОрганизации, + ИдентификаторКонтрагента); + ЗаписатьИдентификаторы( + ВидДокумента, + Организация, + Перевозчик, + ИдентификаторОрганизации, + ИдентификаторПеревозчика); + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры + +#КонецОбласти + +#Область ДанныеУчастников + +#Область Конструкторы + +// Метод-конструктор таблицы участников +// +// Возвращаемое значение: +// ТаблицаЗначений - Таблица участников: +// * Участник - ЛюбаяСсылка - Ссылка на участника +// * ТипУчастника - Строка - Тип участника, значения: См. ТипыУчастников. +Функция НоваяТаблицаУчастников() Экспорт + + Результат = Новый ТаблицаЗначений; + + Результат.Колонки.Добавить("Участник" , ОбщегоНазначения.ОписаниеТипаВсеСсылки()); + Результат.Колонки.Добавить("ТипУчастника" , Новый ОписаниеТипов("Строка")); + + Возврат Результат; + +КонецФункции + +// Метод-конструктор данных участников +// +// Возвращаемое значение: +// ТаблицаЗначений - Данные участников: +// * Участник - ЛюбаяСсылка - Ссылка на участника +// * ИНН - Строка - ИНН участника +// * КПП - Строка - КПП участника +// * Представление - Строка - Представление участника +Функция НовыеДанныеУчастников() Экспорт + + Результат = Новый ТаблицаЗначений; + + Результат.Колонки.Добавить("Участник" , ОбщегоНазначения.ОписаниеТипаВсеСсылки()); + Результат.Колонки.Добавить("ИНН" , ОбщегоНазначения.ОписаниеТипаСтрока(12)); + Результат.Колонки.Добавить("КПП" , ОбщегоНазначения.ОписаниеТипаСтрока(9)); + Результат.Колонки.Добавить("Представление" , Новый ОписаниеТипов("Строка")); + + Возврат Результат; + +КонецФункции + +#КонецОбласти + +#Область Добавление + +// Добавляет организацию в таблицу участников +// +// Параметры: +// ТаблицаУчастников - См. НоваяТаблицаУчастников +// Организация - ОпределяемыйТип.Организация +Процедура ДобавитьОрганизацию(ТаблицаУчастников, Знач Организация) Экспорт + + ОбщегоНазначенияКлиентСервер.ПроверитьПараметр( + "СервисEDIСлужебный.ДобавитьОрганизацию", + "Организация", + Организация, + Метаданные.ОпределяемыеТипы.Организация.Тип); + + ДобавитьУчастника(ТаблицаУчастников, Организация, ТипыУчастников().Организация); + +КонецПроцедуры + +// Добавляет контрагента в таблицу участников +// +// Параметры: +// ТаблицаУчастников - См. НоваяТаблицаУчастников +// Контрагент - ОпределяемыйТип.УчастникЭДО +Процедура ДобавитьКонтрагента(ТаблицаУчастников, Знач Контрагент) Экспорт + + ОбщегоНазначенияКлиентСервер.ПроверитьПараметр( + "СервисEDIСлужебный.ДобавитьКонтрагента", + "Контрагент", + Контрагент, + Метаданные.ОпределяемыеТипы.УчастникЭДО_ЭПД.Тип); + + ДобавитьУчастника(ТаблицаУчастников, Контрагент, ТипыУчастников().Контрагент); + +КонецПроцедуры + +#КонецОбласти + +#Область Чтение + +// Получает данные участников по таблице участников +// +// Параметры: +// ТаблицаУчастников - См. НоваяТаблицаУчастников +// +// Возвращаемое значение: +// См. НовыеДанныеУчастников +Функция ДанныеУчастников(Знач ТаблицаУчастников) Экспорт + + Результат = НовыеДанныеУчастников(); + + Организации = Новый Массив; // Массив Из ЛюбаяСсылка + Контрагенты = Новый Массив; // Массив Из ЛюбаяСсылка + + Для Каждого СтрокаУчастника Из ТаблицаУчастников Цикл + + Участник = СтрокаУчастника.Участник; + ТипУчастника = СтрокаУчастника.ТипУчастника; + + Если ЭтоТипУчастникаОрганизация(ТипУчастника) Тогда + Организации.Добавить(Участник); + ИначеЕсли ЭтоТипУчастникаКонтрагент(ТипУчастника) Тогда + Контрагенты.Добавить(Участник); + Иначе + ВызватьИсключение( + СтрШаблон( + НСтр( + "ru = 'Неизвестный тип участника %1'", + ОбщегоНазначения.КодОсновногоЯзыка()), + ТипУчастника)); + КонецЕсли; + + КонецЦикла; + + Организации = ОбщегоНазначенияКлиентСервер.СвернутьМассив(Организации); + Контрагенты = ОбщегоНазначенияКлиентСервер.СвернутьМассив(Контрагенты); + + Запрос = Новый Запрос; + + ТекстыЗапросов = Новый Массив; // Массив Из Строка + + Если Организации.Количество() > 0 Тогда + Запрос.УстановитьПараметр("Организации", Организации); + ТекстыЗапросов.Добавить( + ТекстЗапросаДанныеУчастникаИБ( + "Организации", + "ИННОрганизации", + "КППОрганизации", + "НаименованиеОрганизации", + "Организации")); + КонецЕсли; + + Если Контрагенты.Количество() > 0 Тогда + Запрос.УстановитьПараметр("Контрагенты", Контрагенты); + ТекстыЗапросов.Добавить( + ТекстЗапросаДанныеУчастникаИБ( + "Контрагенты", + "ИННКонтрагента", + "КППКонтрагента", + "НаименованиеКонтрагента", + "Контрагенты")); + КонецЕсли; + + Если ТекстыЗапросов.Количество() = 0 Тогда + Возврат Результат; + КонецЕсли; + + Запрос.Текст = СтрСоединить(ТекстыЗапросов, ТекстРазделителяОбъединитьВсе()); + + УстановитьПривилегированныйРежим(Истина); + РезультатЗапроса = Запрос.Выполнить(); + УстановитьПривилегированныйРежим(Ложь); + + ВыборкаЗапроса = РезультатЗапроса.Выбрать(); + + Для Каждого СтрокаУчастника Из ТаблицаУчастников Цикл + + Участник = СтрокаУчастника.Участник; + + Отбор = Новый Структура; + Отбор.Вставить("Участник", Участник); + + ВыборкаЗапроса.Сбросить(); + + Если Не ВыборкаЗапроса.НайтиСледующий(Отбор) Тогда + ВызватьИсключение( + СтрШаблон( + НСтр( + "ru = 'Не удалось найти сведения об участнике %1'", + ОбщегоНазначения.КодОсновногоЯзыка()), + Участник)); + КонецЕсли; + + НоваяСтрока = Результат.Добавить(); + + НоваяСтрока.Участник = Участник; + //@skip-check property-return-type - Особенности работы с выборкой запроса в строгой типизации + //@skip-check statement-type-change - Особенности работы с выборкой запроса в строгой типизации + НоваяСтрока.ИНН = ВыборкаЗапроса.ИНН; // Строка + //@skip-check property-return-type - Особенности работы с выборкой запроса в строгой типизации + //@skip-check statement-type-change - Особенности работы с выборкой запроса в строгой типизации + НоваяСтрока.КПП = ВыборкаЗапроса.КПП; // Строка + //@skip-check property-return-type - Особенности работы с выборкой запроса в строгой типизации + //@skip-check statement-type-change - Особенности работы с выборкой запроса в строгой типизации + НоваяСтрока.Представление = ВыборкаЗапроса.Представление; // Строка + + КонецЦикла; + + Возврат Результат; + +КонецФункции + +// Получает данные участника по таблице данных участников +// +// Параметры: +// ДанныеУчастников - См. НовыеДанныеУчастников +// Участник - ЛюбаяСсылка +// +// Возвращаемое значение: +// См. НовыеДанныеУчастника +Функция ДанныеУчастника(Знач ДанныеУчастников, Знач Участник) Экспорт + + СтрокаУчастника = ДанныеУчастников.Найти(Участник, "Участник"); + + Если СтрокаУчастника = Неопределено Тогда + ВызватьИсключение( + СтрШаблон( + НСтр( + "ru = 'Ошибка получения данных участника %1: участник не найден'", + ОбщегоНазначения.КодОсновногоЯзыка()), + Участник)); + КонецЕсли; + + Результат = НовыеДанныеУчастника(); + + Результат.ИНН = СтрокаУчастника.ИНН; + Результат.КПП = СтрокаУчастника.КПП; + Результат.Представление = СтрокаУчастника.Представление; + + Возврат Результат; + +КонецФункции + +#КонецОбласти + +#КонецОбласти + +#Область ИдентификаторыЭПД + +// Метод-конструктор участников ЭТрН +// +// Возвращаемое значение: +// Структура - Участники ЭТрН: +// * Организация - ОпределяемыйТип.Организация - Организация по ЭТрН +// - Неопределено - Не указана +// * Контрагент - ОпределяемыйТип.УчастникЭДО_ЭПД - Контрагент по ЭТрН +// - Неопределено - Не указан +// * Перевозчик - ОпределяемыйТип.УчастникЭДО_ЭПД - Перевозчик по ЭТрН +// - Неопределено - Не указан +Функция НовыеУчастникиЭТрН() Экспорт + + Результат = Новый Структура; + + Результат.Вставить("Организация" , Неопределено); + Результат.Вставить("Контрагент" , Неопределено); + Результат.Вставить("Перевозчик" , Неопределено); + + Возврат Результат; + +КонецФункции + +// Метод-конструктор сведений о связи идентификаторов участников ЭТрН +// +// Возвращаемое значение: +// Структура - Новая связь идентификаторы участников э тр Н: +// * Организация - См. НовыеСведенияОбУчастникеСвязи +// * Контрагент - См. НовыеСведенияОбУчастникеСвязи +// * Перевозчик - См. НовыеСведенияОбУчастникеСвязи +Функция НоваяСвязьИдентификаторовУчастниковЭТрН() Экспорт + + Результат = Новый Структура; + + Результат.Вставить("Организация" , НовыеСведенияОбУчастникеСвязи()); + Результат.Вставить("Контрагент" , НовыеСведенияОбУчастникеСвязи()); + Результат.Вставить("Перевозчик" , НовыеСведенияОбУчастникеСвязи()); + + Возврат Результат; + +КонецФункции + +// Получает связь идентификаторов ЭПД по набору участников ЭТрН +// +// Параметры: +// УчастникиЭТрН - См. НовыеУчастникиЭТрН +// +// Возвращаемое значение: +// См. НоваяСвязьИдентификаторовУчастниковЭТрН +Функция СвязьИдентификаторыУчастниковЭТрН(Знач УчастникиЭТрН) Экспорт + Возврат СвязьИдентификаторовУчастников(УчастникиЭТрН.Организация, УчастникиЭТрН); +КонецФункции + +#КонецОбласти + +#Область ЗапускДлительныхОпераций + +// Запускает фоновое получение сообщений через сервис 1С:EDI +// +// Возвращаемое значение: +// См. ДлительныеОперации.ВыполнитьФункцию +Функция ЗапуститьПолучениеСообщений() Экспорт + + ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияПроцедуры(); + ПараметрыВыполнения.НаименованиеФоновогоЗадания = + НСтр( + "ru = 'Получение сообщений через сервис 1С:EDI'", + ОбщегоНазначения.КодОсновногоЯзыка()); + + Возврат ДлительныеОперации.ВыполнитьФункцию(ПараметрыВыполнения, "СервисEDIСлужебный.ПолучитьСообщения"); + +КонецФункции + +#КонецОбласти + +#Область ДляВызоваИзДругихПодсистем + +// СтандартныеПодсистемы.БазоваяФункциональность + +// См. СтандартныеПодсистемыСервер.ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод +Процедура ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод(Методы) Экспорт + + Методы.Вставить("ИдентификаторыУчастниковЭТрН", Истина); + Методы.Вставить("ПолучитьСообщения", Истина); + Методы.Вставить("СвязьИдентификаторыУчастниковЭТрН", Истина); + +КонецПроцедуры + +// Конец СтандартныеПодсистемы.БазоваяФункциональность + +#КонецОбласти + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +#Область ПоискДанныхОбменСКонтрагентами + +// Параметры: +// ТипДокумента - ПеречислениеСсылка.ТипыДокументовЭДО +// +// Возвращаемое значение: +// ДокументСсылка.СообщениеЭДО +Функция ВидДокумента(Знач ТипДокумента) + Возврат ИнтерфейсДокументовЭДО.ВидДокументаПоТипу(ТипДокумента); +КонецФункции + +// Возвращаемое значение: +// ПеречислениеСсылка.СпособыОбменаЭД +Функция СпособОбмена() + Возврат Перечисления.СпособыОбменаЭД.ЧерезСервис1СEDI; +КонецФункции + +#КонецОбласти + +#Область Проверки + +// Параметры: +// Контекст - Строка +Процедура ПроверитьАктивностьТранзакции(Знач Контекст) + ПроверитьСостояниеТранзакции(Контекст, Истина); +КонецПроцедуры + +// Параметры: +// Контекст - Строка +Процедура ПроверитьОтсутствиеТранзакции(Знач Контекст) + ПроверитьСостояниеТранзакции(Контекст, Ложь); +КонецПроцедуры + +// Параметры: +// Контекст - Строка +// ЦелевоеСостояние - Булево +Процедура ПроверитьСостояниеТранзакции(Знач Контекст, Знач ЦелевоеСостояние) + + ТекущееСостояние = ТранзакцияАктивна(); + ФорматированнаяСтрока = "БЛ='не активна'; БИ=активна;"; + + ОбщегоНазначенияКлиентСервер.Проверить( + ТекущееСостояние = ЦелевоеСостояние, + СтрШаблон( + НСтр( + "ru = 'Недопустимое состояние транзакции: + |Текущее состояние: %1 + |Ожидаемое состояние: %2'", + ОбщегоНазначения.КодОсновногоЯзыка()), + Формат(ТекущееСостояние, ФорматированнаяСтрока), + Формат(ЦелевоеСостояние, ФорматированнаяСтрока)), + Контекст); + +КонецПроцедуры + +// Параметры: +// Контекст - Строка +Процедура ПроверитьНаличиеПодсистемыБизнесСеть(Знач Контекст) + + ОбщегоНазначенияКлиентСервер.Проверить( + ОбщегоНазначения.ПодсистемаСуществует("ЭлектронноеВзаимодействие.БизнесСеть"), + НСтр( + "ru = 'Для отправки документов через сервис 1С:EDI требуется подсистема 1С:Бизнес-сеть'", + ОбщегоНазначения.КодОсновногоЯзыка()), + Контекст); + +КонецПроцедуры + +// Параметры: +// Контекст - Строка +// ИмяПараметра - Строка +// ЗначениеПараметра - Строка +Процедура ПроверитьИдентификатор(Знач Контекст, Знач ИмяПараметра, Знач ЗначениеПараметра) + + ОбщегоНазначенияКлиентСервер.ПроверитьПараметр(Контекст, ИмяПараметра, ЗначениеПараметра, Тип("Строка")); + ОбщегоНазначенияКлиентСервер.Проверить( + Не ПустаяСтрока(ЗначениеПараметра), + СтрШаблон( + НСтр( + "ru = 'Значение параметра %1 не может содержать пустую строку'", + ОбщегоНазначения.КодОсновногоЯзыка()), + ИмяПараметра), + Контекст); + +КонецПроцедуры + +// Параметры: +// Контекст - Строка +// ИмяПараметра - Строка +// ЗначениеПараметра - Произвольный +// ТипПараметра - ОписаниеТипов +Процедура ПроверитьУчастника(Знач Контекст, Знач ИмяПараметра, Знач ЗначениеПараметра, Знач ТипПараметра) + + ОбщегоНазначенияКлиентСервер.ПроверитьПараметр(Контекст, ИмяПараметра, ЗначениеПараметра, ТипПараметра); + ОбщегоНазначенияКлиентСервер.Проверить( + ЗначениеЗаполнено(ЗначениеПараметра), + СтрШаблон( + НСтр( + "ru = 'Значение параметра %1 не может содержать пустое значение'", + ОбщегоНазначения.КодОсновногоЯзыка()), + ИмяПараметра), + Контекст); + +КонецПроцедуры + +#КонецОбласти + +#Область НастройкиОтправкиЭлектронныхДокументовПоВидам + +// Возвращаемое значение: +// ОпределяемыйТип.ДоговорСКонтрагентомЭДО +Функция ПустойДоговор() + Возврат Метаданные.ОпределяемыеТипы.ДоговорСКонтрагентомЭДО.Тип.ПривестиЗначение(Неопределено); +КонецФункции + +// Параметры: +// ТипДокумента - ПеречислениеСсылка.ТипыДокументовЭДО +// Организация - ОпределяемыйТип.Организация +// Контрагент - ОпределяемыйТип.УчастникЭДО +Процедура ЗафиксироватьНастройки( + Знач ТипДокумента, + Знач Организация, + Знач Контрагент) + + ПроверитьНаличиеПодсистемыБизнесСеть("СервисEDIСлужебный.ЗафиксироватьНастройки"); + + ВидДокумента = ВидДокумента(ТипДокумента); + Договор = ПустойДоговор(); + СпособОбмена = СпособОбмена(); + + НачатьТранзакцию(); + Попытка + УстановитьБлокировкуНастроекОтправкиПоВидам(ВидДокумента, Организация, Контрагент); + + НаборЗаписей = РегистрыСведений.НастройкиОтправкиЭлектронныхДокументовПоВидам.СоздатьНаборЗаписей(); + + НаборЗаписей.Отбор.Отправитель.Установить(Организация); + НаборЗаписей.Отбор.Получатель.Установить(Контрагент); + НаборЗаписей.Отбор.Договор.Установить(Договор); + НаборЗаписей.Отбор.ВидДокумента.Установить(ВидДокумента); + + НаборЗаписей.Прочитать(); + + Если НаборЗаписей.Количество() > 1 Тогда + + ВызватьИсключение( + СтрШаблон( + НСтр( + "ru = 'Выявлено дублирование настроек отправки по видам для: + |Отправитель: %1 + |Получатель: %2 + |Вид документа: %3'", + ОбщегоНазначения.КодОсновногоЯзыка()), + Организация, + Контрагент, + ВидДокумента)); + + ИначеЕсли НаборЗаписей.Количество() = 1 Тогда + + Если НаборЗаписей[0].СпособОбменаЭД <> СпособОбмена Тогда + ВызватьИсключение( + СтрШаблон( + НСтр( + "ru = 'Настройка отправки документа ""%1"" для организации ""%2"" и контрагента ""%3"" уже существует.'", + ОбщегоНазначения.КодОсновногоЯзыка()), + ВидДокумента, + Организация, + Контрагент)); + КонецЕсли; + + ЗафиксироватьТранзакцию(); + Возврат; // Настройки установлены ранее + + КонецЕсли; + + Запись = НаборЗаписей.Добавить(); + + Запись.Отправитель = Организация; + Запись.Получатель = Контрагент; + Запись.Договор = Договор; + Запись.ВидДокумента = ВидДокумента; + Запись.СпособОбменаЭД = СпособОбмена; + Запись.Формировать = Истина; + Запись.МаршрутПодписания = Справочники.МаршрутыПодписания.ОднойДоступнойПодписью; + + НаборЗаписей.Записать(); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры + +// Параметры: +// ВидДокумента - ДокументСсылка.СообщениеЭДО +// Организация - ОпределяемыйТип.Организация +// Контрагент - ОпределяемыйТип.УчастникЭДО +Процедура УстановитьБлокировкуНастроекОтправкиПоВидам( + Знач ВидДокумента, + Знач Организация, + Знач Контрагент) + + ПроверитьАктивностьТранзакции("СервисEDIСлужебный.УстановитьБлокировкуНастроекОтправкиПоВидам"); + + ИмяРегистра = Метаданные.РегистрыСведений.НастройкиОтправкиЭлектронныхДокументовПоВидам.ПолноеИмя(); + Блокировка = Новый БлокировкаДанных; + + ЭлементБлокировки = Блокировка.Добавить(ИмяРегистра); + ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; + + ЭлементБлокировки.УстановитьЗначение("Отправитель" , Организация); + ЭлементБлокировки.УстановитьЗначение("Получатель" , Контрагент); + ЭлементБлокировки.УстановитьЗначение("Договор" , ПустойДоговор()); + ЭлементБлокировки.УстановитьЗначение("ВидДокумента" , ВидДокумента); + + //@skip-check lock-out-of-try - Транзакция открывается выше по стеку + Блокировка.Заблокировать(); + +КонецПроцедуры + +#КонецОбласти + +#Область ПриглашенияЭДО + +// Параметры: +// Ключ - Строка +// ИдентификаторОрганизации - Строка +Процедура УстановитьБлокировкуПриглашенияЭДО(Знач Ключ, Знач ИдентификаторОрганизации) + + ПроверитьАктивностьТранзакции("СервисEDIСлужебный.УстановитьБлокировкуПриглашенияЭДО"); + + ПространствоИмен = Метаданные.РегистрыСведений.ПриглашенияКОбменуЭлектроннымиДокументами.ПолноеИмя(); + + БлокировкаДанных = Новый БлокировкаДанных(); + ЭлементБлокировки = БлокировкаДанных.Добавить(ПространствоИмен); + ЭлементБлокировки.УстановитьЗначение("Ключ" , Ключ); + ЭлементБлокировки.УстановитьЗначение("ИдентификаторОрганизации" , ИдентификаторОрганизации); + ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; + + //@skip-check lock-out-of-try - Транзакция открывается выше по стеку + БлокировкаДанных.Заблокировать(); + +КонецПроцедуры + +// Параметры: +// Отправитель - ОпределяемыйТип.Организация +// Получатель - ОпределяемыйТип.УчастникЭДО +// ИдентификаторОтправителя - Строка +// ИдентификаторПолучателя - Строка +Процедура ОтключитьПриглашенияЭДО( + Знач Отправитель, + Знач Получатель, + Знач ИдентификаторОтправителя, + Знач ИдентификаторПолучателя) + + ДанныеКонтрагента = ДанныеКонтрагента(Получатель); + Ключ = Строка(Новый УникальныйИдентификатор); + + НачатьТранзакцию(); + Попытка + УстановитьБлокировкуПриглашенияЭДО(Ключ, ИдентификаторОтправителя); + + НаборЗаписей = РегистрыСведений.ПриглашенияКОбменуЭлектроннымиДокументами.СоздатьНаборЗаписей(); + НаборЗаписей.Отбор.Ключ.Установить(Ключ); + НаборЗаписей.Отбор.ИдентификаторОрганизации.Установить(ИдентификаторОтправителя); + + Запись = НаборЗаписей.Добавить(); + + Запись.Ключ = Ключ; + Запись.ИдентификаторОрганизации = ИдентификаторОтправителя; + + Запись.ИдентификаторКонтрагента = ИдентификаторПолучателя; + Запись.ИНН = ДанныеКонтрагента.ИНН; + Запись.КПП = ДанныеКонтрагента.КПП; + + Запись.Статус = Перечисления.СтатусыПриглашений.НеТребуется; + + НаборЗаписей.Записать(Истина); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры + +#КонецОбласти + +#Область ЗаписьНастроек + +// Параметры: +// ИдентификаторЭДО - Строка +Процедура УстановитьБлокировкуУчетнойЗаписи(Знач ИдентификаторЭДО) + + ПроверитьАктивностьТранзакции("СервисEDIСлужебный.ЗаблокироватьУчетнуюЗапись"); + + БлокировкаДанных = Новый БлокировкаДанных(); + ЭлементБлокировки = БлокировкаДанных.Добавить(Метаданные.РегистрыСведений.УчетныеЗаписиЭДО.ПолноеИмя()); + ЭлементБлокировки.УстановитьЗначение("ИдентификаторЭДО", ИдентификаторЭДО); + ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; + + //@skip-check lock-out-of-try - Транзакция открывается выше по стеку + БлокировкаДанных.Заблокировать(); + +КонецПроцедуры + +// Создает учетную запись ЭДО +// +// Параметры: +// Организация - ОпределяемыйТип.Организация - Организация +// ИдентификаторЭДО - Строка - Идентификатор ЭДО +Процедура ЗаписатьУчетнуюЗапись(Знач Организация, Знач ИдентификаторЭДО) + + СпособОбменаЭД = СпособОбмена(); + + НачатьТранзакцию(); + Попытка + УстановитьБлокировкуУчетнойЗаписи(ИдентификаторЭДО); + + НаборЗаписей = РегистрыСведений.УчетныеЗаписиЭДО.СоздатьНаборЗаписей(); + НаборЗаписей.Отбор.ИдентификаторЭДО.Установить(ИдентификаторЭДО); + НаборЗаписей.Прочитать(); + + Если НаборЗаписей.Количество() = 0 Тогда + Запись = НаборЗаписей.Добавить(); + Запись.ИдентификаторЭДО = ИдентификаторЭДО; + Запись.Организация = Организация; + Запись.СпособОбменаЭД = СпособОбмена(); + Запись.ОператорЭДО = "2JM"; // ООО "СИСЛИНК" + Иначе + Запись = НаборЗаписей[0]; + + Если Запись.Организация <> Организация Тогда + ВызватьИсключение( + СтрШаблон( + НСтр( + "ru = 'Идентификатор %1 уже занят организацией %2 (организация для записи: %3)'", + ОбщегоНазначения.КодОсновногоЯзыка()), + ИдентификаторЭДО, + Запись.Организация, + Организация)); + КонецЕсли; + + Если Запись.СпособОбменаЭД <> СпособОбменаЭД Тогда + ВызватьИсключение( + СтрШаблон( + НСтр( + "ru = 'Для учетной записи %1 используется способ обмена %2 (способ обмена для записи: %3)'", + ОбщегоНазначения.КодОсновногоЯзыка()), + ИдентификаторЭДО, + Запись.СпособОбменаЭД, + СпособОбменаЭД)); + КонецЕсли; + + КонецЕсли; + + Запись.ПринятыУсловияИспользования = Истина; + + НаборЗаписей.Записать(); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры + +// Добавляет сертификат к учетной записи ЭДО +// +// Параметры: +// ИдентификаторЭДО - Строка - Идентификатор ЭДО +// Сертификат - СправочникСсылка.СертификатыКлючейЭлектроннойПодписиИШифрования - Сертификат +// Доверенность - ОпределяемыйТип.МашиночитаемаяДоверенность - Доверенность +Процедура ЗаписатьСертификатУчетнойЗаписи(Знач ИдентификаторЭДО, Знач Сертификат, Знач Доверенность = Неопределено) + + Сертификаты = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Сертификат); + + Доверенности = Новый Соответствие; + + Если Доверенность <> Неопределено Тогда + Доверенности.Вставить(Сертификат, Доверенность); + КонецЕсли; + + УчетныеЗаписиЭДО.ЗаписатьСертификатыУчетнойЗаписи(ИдентификаторЭДО, Сертификаты, , Доверенности); + +КонецПроцедуры + +// Фиксирует идентификаторы обмена. +// +// Параметры: +// ВидДокумента - СправочникСсылка.ВидыДокументовЭДО - Вид документа +// Отправитель - ОпределяемыйТип.Организация - Организация-отправитель +// Получатель - ОпределяемыйТип.УчастникЭДО - Получатель +// ИдентификаторОтправителя - Строка - Идентификатор отправителя +// ИдентификаторПолучателя - Строка - Идентификатор получателя +Процедура ЗаписатьИдентификаторы( + Знач ВидДокумента, + Знач Отправитель, + Знач Получатель, + Знач ИдентификаторОтправителя, + Знач ИдентификаторПолучателя) + + Договор = ПустойДоговор(); + СпособОбмена = СпособОбмена(); + + НачатьТранзакцию(); + Попытка + УстановитьБлокировкуНастроекОтправкиПоВидам(ВидДокумента, Отправитель, Получатель); + + НаборЗаписей = РегистрыСведений.НастройкиОтправкиЭлектронныхДокументовПоВидам.СоздатьНаборЗаписей(); + + НаборЗаписей.Отбор.Отправитель.Установить(Отправитель); + НаборЗаписей.Отбор.Получатель.Установить(Получатель); + НаборЗаписей.Отбор.Договор.Установить(Договор); + НаборЗаписей.Отбор.ВидДокумента.Установить(ВидДокумента); + + НаборЗаписей.Прочитать(); + + Если НаборЗаписей.Количество() > 1 Тогда + + ВызватьИсключение( + СтрШаблон( + НСтр( + "ru = 'Выявлено дублирование настроек отправки по видам для: + |Отправитель: %1 + |Получатель: %2 + |Вид документа: %3'", + ОбщегоНазначения.КодОсновногоЯзыка()), + Отправитель, + Получатель, + ВидДокумента)); + + ИначеЕсли НаборЗаписей.Количество() = 1 Тогда + + Если НаборЗаписей[0].СпособОбменаЭД <> СпособОбмена Тогда + ВызватьИсключение( + СтрШаблон( + НСтр( + "ru = 'Настройка отправки документа ""%1"" для организации ""%2"" и контрагента ""%3"" уже существует.'", + ОбщегоНазначения.КодОсновногоЯзыка()), + ВидДокумента, + Отправитель, + Получатель)); + КонецЕсли; + + Запись = НаборЗаписей[0]; + + Иначе + + Запись = НаборЗаписей.Добавить(); + + Запись.Отправитель = Отправитель; + Запись.Получатель = Получатель; + Запись.Договор = Договор; + Запись.ВидДокумента = ВидДокумента; + Запись.СпособОбменаЭД = СпособОбмена; + + КонецЕсли; + + Запись.ИдентификаторОтправителя = ИдентификаторОтправителя; + Запись.ИдентификаторПолучателя = ИдентификаторПолучателя; + + Запись.Формировать = Истина; + Запись.МаршрутПодписания = Справочники.МаршрутыПодписания.ОднойДоступнойПодписью; + + ОтключитьПриглашенияЭДО( + Отправитель, + Получатель, + ИдентификаторОтправителя, + ИдентификаторПолучателя); + + НаборЗаписей.Записать(); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры + +#КонецОбласти + +#Область ДанныеУчастников + +// Метод-конструктор данных участника +// +// Возвращаемое значение: +// Структура - Новые данные участника: +// * ИНН - Строка - ИНН участника +// * КПП - Строка - КПП участника +// * Представление - Строка - Представление участника +Функция НовыеДанныеУчастника() + + Результат = Новый Структура; + + Результат.Вставить("ИНН", ""); + Результат.Вставить("КПП", ""); + Результат.Вставить("Представление", ""); + + Возврат Результат; + +КонецФункции + +// Перечисление типов участников +// +// Возвращаемое значение: +// Структура - Типы участников: +// * Организация - Строка - Организация +// * Контрагент - Строка - Контрагент +Функция ТипыУчастников() + + Результат = Новый Структура; + + Результат.Вставить("Организация" , "Организация"); + Результат.Вставить("Контрагент" , "Контрагент"); + + Возврат Результат; + +КонецФункции + +// Проверяет, является ли тип участника организацией +// +// Параметры: +// ТипУчастника - Строка - Тип участника +// +// Возвращаемое значение: +// Булево - Истина, если это тип участника организация. +// Ложь в ином случае. +Функция ЭтоТипУчастникаОрганизация(Знач ТипУчастника) + Возврат ТипУчастника = ТипыУчастников().Организация; +КонецФункции + +// Проверяет, является ли тип участника контрагентом +// +// Параметры: +// ТипУчастника - Строка - Тип участника +// +// Возвращаемое значение: +// Булево - Истина, если это тип участника контрагент. +// Ложь в ином случае. +Функция ЭтоТипУчастникаКонтрагент(Знач ТипУчастника) + Возврат ТипУчастника = ТипыУчастников().Контрагент; +КонецФункции + +// Добавляет участника в таблицу участников +// +// Параметры: +// ТаблицаУчастников - См. НоваяТаблицаУчастников +// Участник - ЛюбаяСсылка - Добавляемый участник +// ТипУчастника - Строка - Тип добавляемого участника +Процедура ДобавитьУчастника(ТаблицаУчастников, Знач Участник, Знач ТипУчастника) + + НайденнаяСтрока = ТаблицаУчастников.Найти(Участник, "Участник"); + + Если НайденнаяСтрока = Неопределено Тогда + + НоваяСтрока = ТаблицаУчастников.Добавить(); + + НоваяСтрока.Участник = Участник; + НоваяСтрока.ТипУчастника = ТипУчастника; + + ИначеЕсли НайденнаяСтрока.ТипУчастника = ТипУчастника Тогда + Возврат; // Ничего не делаем, участник уже добавлен ранее + Иначе + ВызватьИсключение( + СтрШаблон( + НСтр( + "ru = 'Ошибка дублирования при добавлении участника %1: + |- Тип добавляемого участника: %2 + |- Тип ранее добавленного участника: %3'", + ОбщегоНазначения.КодОсновногоЯзыка()), + Участник, + ТипУчастника, + НайденнаяСтрока.ТипУчастника)); + КонецЕсли; + +КонецПроцедуры + +// Получает шаблон текста запросов для данных участников +// +// Возвращаемое значение: +// Строка - Шаблон текста запроса +Функция ТекстЗапросаДанныеУчастника() + + Возврат + "ВЫБРАТЬ + | Таблица.Ссылка КАК Участник, + | &ПутьИНН КАК ИНН, + | &ПутьКПП КАК КПП, + | &ПутьПредставление КАК Представление + |ИЗ + | &Таблица КАК Таблица + |ГДЕ + | Таблица.Ссылка В(&НаборСсылок)"; + +КонецФункции + +// См. ОбщегоНазначенияБЭДПовтИсп.ИмяПрикладногоСправочника +Функция ИмяПрикладногоСправочника(Знач ИмяСправочника) + Возврат ОбщегоНазначенияБЭДПовтИсп.ИмяПрикладногоСправочника(ИмяСправочника); +КонецФункции + +// См. ОбщегоНазначенияБЭДПовтИсп.ИмяНаличиеОбъектаРеквизитаВПрикладномРешении +Функция ИмяРеквизитаПрикладногоСправочника(Знач ИмяРеквизита) + Возврат ОбщегоНазначенияБЭДПовтИсп.ИмяНаличиеОбъектаРеквизитаВПрикладномРешении(ИмяРеквизита); +КонецФункции + +// Получает текст запроса по данным типа участника. +// +// Параметры: +// ИмяПараметраСправочник - Строка - Имя параметра для прикладного справочника +// ИмяПараметраРеквизитИНН - Строка - Имя параметра для реквизита ИНН +// ИмяПараметраРеквизитКПП - Строка - Имя параметра для реквизита КПП +// ИмяПараметраРеквизитПредставление - Строка - Имя параметра для реквизита представления +// ИмяПараметраНаборСсылок - Строка - Имя параметра для набора ссылок +// +// Возвращаемое значение: +// Строка - Текст запроса по типа участника +Функция ТекстЗапросаДанныеУчастникаИБ( + Знач ИмяПараметраСправочник, + Знач ИмяПараметраРеквизитИНН, + Знач ИмяПараметраРеквизитКПП, + Знач ИмяПараметраРеквизитПредставление, + Знач ИмяПараметраНаборСсылок) + + Результат = ТекстЗапросаДанныеУчастника(); + + ИмяСправочника = ИмяПрикладногоСправочника(ИмяПараметраСправочник); + ИмяРеквизитаИНН = ИмяРеквизитаПрикладногоСправочника(ИмяПараметраРеквизитИНН); + ИмяРеквизитаКПП = ИмяРеквизитаПрикладногоСправочника(ИмяПараметраРеквизитКПП); + ИмяРеквизитаПредставление = ИмяРеквизитаПрикладногоСправочника(ИмяПараметраРеквизитПредставление); + + ПолноеИмяСправочника = СтрШаблон("Справочник.%1" , ИмяСправочника); + ПолноеИмяРеквизитаИНН = СтрШаблон("Таблица.%1" , ИмяРеквизитаИНН); + ПолноеИмяРеквизитаКПП = СтрШаблон("Таблица.%1" , ИмяРеквизитаКПП); + ПолноеИмяРеквизитаПредставление = СтрШаблон("Таблица.%1" , ИмяРеквизитаПредставление); + ПолноеИмяПараметра = СтрШаблон("&%1" , ИмяПараметраНаборСсылок); + + Результат = СтрЗаменить(Результат, "&Таблица" , ПолноеИмяСправочника); + Результат = СтрЗаменить(Результат, "&ПутьИНН" , ПолноеИмяРеквизитаИНН); + Результат = СтрЗаменить(Результат, "&ПутьКПП" , ПолноеИмяРеквизитаКПП); + Результат = СтрЗаменить(Результат, "&ПутьПредставление" , ПолноеИмяРеквизитаПредставление); + Результат = СтрЗаменить(Результат, "&НаборСсылок" , ПолноеИмяПараметра); + + Возврат Результат; + +КонецФункции + +// Текст разделителя запросов ОБЪЕДИНИТЬ ВСЕ. +// +// Возвращаемое значение: +// Строка - Текст разделителя запросов +Функция ТекстРазделителяОбъединитьВсе() + Возврат Символы.ПС + Символы.ПС + "ОБЪЕДИНИТЬ ВСЕ" + Символы.ПС + Символы.ПС; +КонецФункции + +// Получает данные контрагента по ссылке на контрагента +// +// Параметры: +// Контрагент - ОпределяемыйТип.УчастникЭДО +// +// Возвращаемое значение: +// См. НовыеДанныеУчастника +Функция ДанныеКонтрагента(Знач Контрагент) + + Участники = НоваяТаблицаУчастников(); + ДобавитьКонтрагента(Участники, Контрагент); + ДанныеУчастников = ДанныеУчастников(Участники); + Возврат ДанныеУчастника(ДанныеУчастников, Контрагент); + +КонецФункции + +#КонецОбласти + +#Область ИдентификаторыЭПД + +#Область ЗапросСвязьИдентификаторовУчастников + +// Метод-конструктор сведений об участнике связи +// +// Возвращаемое значение: +// Структура - Сведения об участнике связи: +// * Идентификатор - Строка - Идентификатор ЭПД участника +// * Идентификаторы - ТаблицаЗначений - Допустимые идентификаторы участника: +// ** Идентификатор - Строка - Допустимый идентификатор ЭПД участника +// ** Наименование - Строка - Наименование участника +// ** Комментарий - Строка - Комментарий к идентификатору ЭПД +Функция НовыеСведенияОбУчастникеСвязи() Экспорт + + Результат = Новый Структура; + + Идентификаторы = Новый ТаблицаЗначений; + Идентификаторы.Колонки.Добавить("Идентификатор" , Новый ОписаниеТипов("Строка")); + Идентификаторы.Колонки.Добавить("Наименование" , Новый ОписаниеТипов("Строка")); + Идентификаторы.Колонки.Добавить("Комментарий" , Новый ОписаниеТипов("Строка")); + + Результат.Вставить("Идентификатор", ""); + Результат.Вставить("Идентификаторы", Идентификаторы); + + Возврат Результат; + +КонецФункции + +// Метод конструктор параметров запроса связи идентификаторов участников +// +// Возвращаемое значение: +// Структура: +// * Организация - ОпределяемыйТип.Организация +// - Неопределено +// * УчастникиЭТрН - См. НовыеУчастникиЭТрН +Функция НовыеПараметрыЗапросаСвязьИдентификаторовУчастников() + + Результат = Новый Структура; + + Результат.Вставить("Организация" , Неопределено); + Результат.Вставить("УчастникиЭТрН" , НовыеУчастникиЭТрН()); + + Возврат Результат; + +КонецФункции + +// Параметры запроса связи идентификаторов участников. +// +// Параметры: +// Организация - ОпределяемыйТип.Организация - Организация для авторизации в сервисе 1С:Бизнес-сеть +// УчастникиЭТрН - См. НовыеУчастникиЭТрН +// +// Возвращаемое значение: +// См. НовыеПараметрыЗапросаСвязьИдентификаторовУчастников +Функция ПараметрыЗапросаСвязьИдентификаторовУчастников(Знач Организация, Знач УчастникиЭТрН) + + Результат = НовыеПараметрыЗапросаСвязьИдентификаторовУчастников(); + + Результат.Организация = Организация; + Результат.УчастникиЭТрН = УчастникиЭТрН; + + Возврат Результат; + +КонецФункции + +// Возвращаемое значение: +// Структура: +// * inn - Строка +// * kpp - Строка +Функция ТелоЗапросаСвязьИдентификаторУчастника() + + Результат = Новый Структура; + + Результат.Вставить("inn" , ""); + Результат.Вставить("kpp" , ""); + + Возврат Результат; + +КонецФункции + +// Возвращаемое значение: +// Структура: +// * seller - См. ТелоЗапросаСвязьИдентификаторУчастника +// * buyer - См. ТелоЗапросаСвязьИдентификаторУчастника +Функция ТелоЗапросаСвязьИдентификаторовУчастников() + + Результат = Новый Структура; + + Результат.Вставить("seller" , ТелоЗапросаСвязьИдентификаторУчастника()); + Результат.Вставить("buyer" , ТелоЗапросаСвязьИдентификаторУчастника()); + + Возврат Результат; + +КонецФункции + +// Параметры: +// ТелоЗапроса - См. ТелоЗапросаСвязьИдентификаторУчастника +// ДанныеУчастников - См. НовыеДанныеУчастников +// Участник - ЛюбаяСсылка +Процедура ЗаполнитьДанныеУчастникаСвязи(ТелоЗапроса, Знач ДанныеУчастников, Знач Участник) + + ДанныеУчастника = ДанныеУчастника(ДанныеУчастников, Участник); + + ТелоЗапроса.inn = ДанныеУчастника.ИНН; + ТелоЗапроса.kpp = ДанныеУчастника.КПП; + +КонецПроцедуры + +// Сериализатор набора участников в модель сервиса +// +// Параметры: +// УчастникиЭТрН - См. НовыеУчастникиЭТрН +// +// Возвращаемое значение: +// См. ТелоЗапросаСвязьИдентификаторовУчастников +Функция УчастникиЭТрНВМоделиСервиса(Знач УчастникиЭТрН) + + Результат = ТелоЗапросаСвязьИдентификаторовУчастников(); + + ТаблицаУчастников = НоваяТаблицаУчастников(); + + ДобавитьОрганизацию(ТаблицаУчастников, УчастникиЭТрН.Организация); + ДобавитьКонтрагента(ТаблицаУчастников, УчастникиЭТрН.Контрагент); + + ДанныеУчастников = ДанныеУчастников(ТаблицаУчастников); + + ЗаполнитьДанныеУчастникаСвязи(Результат.seller, ДанныеУчастников, УчастникиЭТрН.Организация); + ЗаполнитьДанныеУчастникаСвязи(Результат.buyer, ДанныеУчастников, УчастникиЭТрН.Контрагент); + + Возврат Результат; + +КонецФункции + +// Формирует запрос к сервису для получения идентификаторов ЭПД +// +// Параметры: +// ПараметрыЗапроса - См. НовыеПараметрыЗапросаСвязьИдентификаторовУчастников +// +// Возвращаемое значение: +// См. НовыйЗапрос +Функция ЗапросСервисаСвязьИдентификаторовУчастников(Знач ПараметрыЗапроса) + + Результат = НовыйЗапрос( + "ПолучитьИдентификаторыУчастников", + ИнтернетСоединениеБЭД.HTTPМетоды().POST, + ПараметрыЗапроса.Организация, + "hub/identifiers/relation"); + + Результат.ТипЗапроса = "application/vnd.1cedi.identifiers.relation.filter.v1+json"; + Результат.ТипОтвета = "application/vnd.1cedi.identifiers.relation.v1+json"; + Результат.Тело = УчастникиЭТрНВМоделиСервиса(ПараметрыЗапроса.УчастникиЭТрН); + Результат.ФорматОтвета = ФорматыОтвета().HTTPОтвет; + Результат.КодыОтвета.Добавить(404); + + Возврат Результат; + +КонецФункции + +// Параметры: +// Ответ - HTTPОтвет - Ответ от сервиса +// +// Возвращаемое значение: +// См. НоваяСвязьИдентификаторовУчастниковЭТрН +Функция СвязьИдентификаторовУчастниковИзМоделиСервиса(Знач Ответ) + + Результат = НоваяСвязьИдентификаторовУчастниковЭТрН(); + + Если Ответ.КодСостояния <> 200 Тогда + Возврат Результат; + КонецЕсли; + + ТелоОтвета = ДанныеJSON(Ответ); // Структура + + Идентификатор = ЗначениеАтрибута(ТелоОтвета, "seller"); // Строка + Результат.Организация.Идентификатор = Идентификатор; + + Идентификатор = ЗначениеАтрибута(ТелоОтвета, "buyer"); // Строка + Результат.Контрагент.Идентификатор = Идентификатор; + + Возврат Результат; + +КонецФункции + +// Получает идентификаторы ЭПД из сервиса 1С:EDI по таблице поиска +// +// Параметры: +// Организация - ОпределяемыйТип.Организация - Организация для авторизации в сервисе 1С:Бизнес-сеть +// УчастникиЭТрН - См. НовыеУчастникиЭТрН +// +// Возвращаемое значение: +// См. НоваяСвязьИдентификаторовУчастниковЭТрН +Функция СвязьИдентификаторовУчастников(Знач Организация, Знач УчастникиЭТрН) + + ПараметрыЗапроса = ПараметрыЗапросаСвязьИдентификаторовУчастников(Организация, УчастникиЭТрН); + ЗапросСервиса = ЗапросСервисаСвязьИдентификаторовУчастников(ПараметрыЗапроса); + РезультатЗапроса = ВыполнитьЗапрос(ЗапросСервиса); + + ОбщегоНазначенияКлиентСервер.Проверить( + Не РезультатЗапроса.Отказ, + СтрШаблон( + НСтр( + "ru = 'Ошибка получения идентификаторов из сервиса 1С:EDI по причине: %1'", + ОбщегоНазначения.КодОсновногоЯзыка()), + РезультатЗапроса.ТекстОшибки), + "СервисEDIСлужебный.ИдентификаторыУчастниковПровайдераЭПД"); + + Возврат СвязьИдентификаторовУчастниковИзМоделиСервиса(РезультатЗапроса.Данные); + +КонецФункции + +#КонецОбласти + +#КонецОбласти + +#Область Сообщения + +#Область ЗапросОтправитьСообщение + +// Метод-конструктор параметров для запроса отправить сообщение. +// +// Возвращаемое значение: +// Структура - Новые параметры запроса отправить сообщение: +// * Организация - ОпределяемыйТип.Организация - Организация для авторизации в сервисе 1С:EDI +// - Неопределено - Не задана +// * ДвоичныеДанные - ДвоичныеДанные - Двоичные данные сообщения +// - Неопределено - Не заданы +// * ИмяФайла - Строка - Имя файла отправляемого сообщения +Функция НовыеПараметрыЗапросаОтправитьСообщение() + + Результат = Новый Структура; + + Результат.Вставить("Организация" , Неопределено); + Результат.Вставить("ДвоичныеДанные" , Неопределено); + Результат.Вставить("ИмяФайла" , ""); + + Возврат Результат; + +КонецФункции + +// Формирует параметры для запроса отправить сообщение. +// +// Параметры: +// ПараметрыОтправки - См. СинхронизацияЭДОСлужебный.НовыеПараметрыОтправкиТранспортногоКонтейнера +// +// Возвращаемое значение: +// См. НовыеПараметрыЗапросаОтправитьСообщение +Функция ПараметрыЗапросаОтправитьСообщение(Знач ПараметрыОтправки) + + Результат = НовыеПараметрыЗапросаОтправитьСообщение(); + + Результат.Организация = УчетныеЗаписиЭДО.ОрганизацияУчетнойЗаписи( + ПараметрыОтправки.РеквизитыКонтейнера.Отправитель); + Результат.ДвоичныеДанные = ПараметрыОтправки.ДанныеДляОтправки.ДвоичныеДанные; + Результат.ИмяФайла = ПараметрыОтправки.ДанныеДляОтправки.Наименование; + + Возврат Результат; + +КонецФункции + +// Формирует запрос к сервису для отправки сообщения +// +// Параметры: +// ПараметрыЗапроса - См. НовыеПараметрыЗапросаОтправитьСообщение +// +// Возвращаемое значение: +// См. НовыйЗапрос +Функция ЗапросСервисаОтправитьСообщение(Знач ПараметрыЗапроса) + + Результат = НовыйЗапрос( + "ОтправитьСообщение", + ИнтернетСоединениеБЭД.HTTPМетоды().POST, + ПараметрыЗапроса.Организация, + "hub/messages", + 201); + + Результат.ТипЗапроса = "application/zip"; + Результат.Тело = ПараметрыЗапроса.ДвоичныеДанные; + Результат.ФорматОтвета = ФорматыОтвета().Неопределено; + + Результат.Заголовки.Вставить(ЗаголовкиHTTP().ИмяФайла, ПараметрыЗапроса.ИмяФайла); + + Возврат Результат; + +КонецФункции + +// Отправляет сообщение через сервис 1С:EDI. +// +// Параметры: +// ПараметрыОтправки - См. СинхронизацияЭДОСлужебный.НовыеПараметрыОтправкиТранспортногоКонтейнера +// +// Возвращаемое значение: +// См. НовыйРезультатВыполненияОперации +Функция ОтправитьСообщение(Знач ПараметрыОтправки) + + РезультатВыполнения = НовыйРезультатВыполненияОперации(); + ПараметрыЗапроса = ПараметрыЗапросаОтправитьСообщение(ПараметрыОтправки); + ЗапросСервиса = ЗапросСервисаОтправитьСообщение(ПараметрыЗапроса); + РезультатЗапроса = ВыполнитьЗапрос(ЗапросСервиса); + + Если РезультатЗапроса.Отказ Тогда + РезультатВыполнения.Отказ = Истина; + РезультатВыполнения.ТекстОшибки = РезультатЗапроса.ТекстОшибки; + КонецЕсли; + + Возврат РезультатВыполнения; + +КонецФункции + +#КонецОбласти + +#Область ЗапросПолучитьПорциюДокументов + +// Возвращаемое значение: +// Структура: +// * Организация - ОпределяемыйТип.Организация +// - Неопределено +// * РазмерСтраницы - Число +// - Неопределено +// * ПоложениеКурсора - Строка +// - Неопределено +Функция НовыеПараметрыЗапросаПолучитьПорциюДокументов() + + Результат = Новый Структура; + + Результат.Вставить("Организация" , Неопределено); + Результат.Вставить("РазмерСтраницы" , Неопределено); + Результат.Вставить("ПоложениеКурсора" , Неопределено); + + Возврат Результат; + +КонецФункции + +// Параметры: +// Организация - ОпределяемыйТип.Организация +// Пагинация - См. НоваяПагинация +// +// Возвращаемое значение: +// См. НовыеПараметрыЗапросаПолучитьПорциюДокументов +Функция ПараметрыЗапросаПолучитьПорциюДокументов(Знач Организация, Знач Пагинация) + + Результат = НовыеПараметрыЗапросаПолучитьПорциюДокументов(); + + Результат.Организация = Организация; + Результат.РазмерСтраницы = Пагинация.РазмерСтраницы; + Результат.ПоложениеКурсора = Пагинация.ПоложениеКурсора; + + Возврат Результат; + +КонецФункции + +// Параметры: +// ПараметрыЗапроса - См. НовыеПараметрыЗапросаПолучитьПорциюДокументов +// +// Возвращаемое значение: +// См. НовыйЗапрос +Функция ЗапросСервисаПолучитьПорциюДокументов(Знач ПараметрыЗапроса) + + Результат = НовыйЗапрос( + "ПолучитьСообщения", + ИнтернетСоединениеБЭД.HTTPМетоды().GET, + ПараметрыЗапроса.Организация, + "hub/messages", + 200); + + Результат.ТипОтвета = "application/vnd.1cedi.messages.list.v1+json"; + Результат.ФорматОтвета = ФорматыОтвета().JSON; + + Результат.Параметры.Вставить("size" , ПараметрыЗапроса.РазмерСтраницы); + Результат.Параметры.Вставить("cursor" , ПараметрыЗапроса.ПоложениеКурсора); + + Возврат Результат; + +КонецФункции + +// Возвращаемое значение: +// Структура: +// * Список - См. НовыеДокументыОрганизации +// * ПоложениеКурсора - Строка +// - Неопределено +Функция НоваяПорцияДокументов() + + Результат = Новый Структура; + + Результат.Вставить("Список" , НовыеДокументыОрганизации()); + Результат.Вставить("ПоложениеКурсора" , Неопределено); + + Возврат Результат; + +КонецФункции + +// Параметры: +// Данные - Структура +// +// Возвращаемое значение: +// См. НоваяПорцияДокументов +Функция ПорцияДокументовИзМоделиСервиса(Знач Данные) + + Результат = НоваяПорцияДокументов(); + + Результат.ПоложениеКурсора = ЗначениеПоПути(Данные, "page.next"); // Строка + Файлы = ЗначениеПоПути(Данные, "embedded", Новый Массив); // Массив Из Структура + + Для Каждого Файл Из Файлы Цикл + Идентификатор = ЗначениеПоПути(Файл, "id"); // Строка + + НоваяСтрока = Результат.Список.Добавить(); + НоваяСтрока.Идентификатор = Идентификатор; + КонецЦикла; + + Возврат Результат; + +КонецФункции + +// Параметры: +// Организация - ОпределяемыйТип.Организация +// Пагинация - См. НоваяПагинация +// +// Возвращаемое значение: +// См. НоваяПорцияДокументов +Функция ПолучитьПорциюДокументов(Знач Организация, Знач Пагинация) + + ПараметрыЗапроса = ПараметрыЗапросаПолучитьПорциюДокументов(Организация, Пагинация); + ЗапросСервиса = ЗапросСервисаПолучитьПорциюДокументов(ПараметрыЗапроса); + РезультатЗапроса = ВыполнитьЗапрос(ЗапросСервиса); + + ОбщегоНазначенияКлиентСервер.Проверить( + Не РезультатЗапроса.Отказ, + СтрШаблон( + НСтр( + "ru = 'Ошибка получения порции документов из сервиса 1С:EDI по причине: %1'", + ОбщегоНазначения.КодОсновногоЯзыка()), + РезультатЗапроса.ТекстОшибки), + "СервисEDIСлужебный.ПолучитьПорциюДокументов"); + + Возврат ПорцияДокументовИзМоделиСервиса(РезультатЗапроса.Данные); + +КонецФункции + +#КонецОбласти + +#Область ЗапросОписаниеДокумента + +// Возвращаемое значение: +// Структура: +// * Организация - ОпределяемыйТип.Организация +// - Неопределено +// * Идентификатор - Строка +Функция НовыеПараметрыЗапросаОписаниеДокумента() + + Результат = Новый Структура; + + Результат.Вставить("Организация" , Неопределено); + Результат.Вставить("Идентификатор" , ""); + + Возврат Результат; + +КонецФункции + +// Параметры: +// Организация - ОпределяемыйТип.Организация +// Идентификатор - Строка +// +// Возвращаемое значение: +// См. НовыеПараметрыЗапросаОписаниеДокумента +Функция ПараметрыЗапросаОписаниеДокумента(Знач Организация, Знач Идентификатор) + + Результат = НовыеПараметрыЗапросаОписаниеДокумента(); + + Результат.Организация = Организация; + Результат.Идентификатор = Идентификатор; + + Возврат Результат; + +КонецФункции + +// Параметры: +// ПараметрыЗапроса - См. НовыеПараметрыЗапросаОписаниеДокумента +// +// Возвращаемое значение: +// См. НовыйЗапрос +Функция ЗапросСервисаОписаниеДокумента(ПараметрыЗапроса) + + Результат = НовыйЗапрос( + "ОписаниеДокумента", + ИнтернетСоединениеБЭД.HTTPМетоды().GET, + ПараметрыЗапроса.Организация, + СтрШаблон("hub/messages/%1", ПараметрыЗапроса.Идентификатор), + 200); + + Результат.ТипОтвета = "application/zip"; + Результат.ФорматОтвета = ФорматыОтвета().HTTPОтвет; + + Возврат Результат; + +КонецФункции + +// Параметры: +// Данные - HTTPОтвет +// ПараметрыЗапроса - См. НовыеПараметрыЗапросаОписаниеДокумента +// +// Возвращаемое значение: +// См. НовоеОписаниеДокумента +Функция ОписаниеДокументаИзМоделиСервиса(Знач Данные, Знач ПараметрыЗапроса) + + Результат = НовоеОписаниеДокумента(); + + Результат.Данные = Данные.ПолучитьТелоКакДвоичныеДанные(); + Результат.Имя = ЗначениеЗаголовка(Данные, ЗаголовкиHTTP().ИмяФайла); + Результат.Идентификатор = ПараметрыЗапроса.Идентификатор; + + Возврат Результат; + +КонецФункции + +// Параметры: +// Организация - ОпределяемыйТип.Организация +// Идентификатор - Строка +// +// Возвращаемое значение: +// См. НовоеОписаниеДокумента +Функция ОписаниеДокумента(Знач Организация, Знач Идентификатор) + + ПараметрыЗапроса = ПараметрыЗапросаОписаниеДокумента(Организация, Идентификатор); + ЗапросСервиса = ЗапросСервисаОписаниеДокумента(ПараметрыЗапроса); + РезультатЗапроса = ВыполнитьЗапрос(ЗапросСервиса); + + ОбщегоНазначенияКлиентСервер.Проверить( + Не РезультатЗапроса.Отказ, + СтрШаблон( + НСтр( + "ru = 'Ошибка получения описания документа из сервиса 1С:EDI по причине: %1'", + ОбщегоНазначения.КодОсновногоЯзыка()), + РезультатЗапроса.ТекстОшибки), + "СервисEDIСлужебный.ОписаниеДокумента"); + + Возврат ОписаниеДокументаИзМоделиСервиса(РезультатЗапроса.Данные, ПараметрыЗапроса); + +КонецФункции + +#КонецОбласти + +#Область ЗапросОтметитьПолучениеСообщения + +// Возвращаемое значение: +// Структура: +// * Организация - ОпределяемыйТип.Организация +// - Неопределено +// * Идентификатор - Строка +Функция НовыеПараметрыЗапросаОтметитьПолучениеСообщения() + + Результат = Новый Структура; + + Результат.Вставить("Организация" , Неопределено); + Результат.Вставить("Идентификатор" , ""); + + Возврат Результат; + +КонецФункции + +// Параметры: +// Организация - ОпределяемыйТип.Организация +// Идентификатор - Строка +// +// Возвращаемое значение: +// См. НовыеПараметрыЗапросаОтметитьПолучениеСообщения +Функция ПараметрыЗапросаОтметитьПолучениеСообщения(Знач Организация, Знач Идентификатор) + + Результат = НовыеПараметрыЗапросаОтметитьПолучениеСообщения(); + + Результат.Организация = Организация; + Результат.Идентификатор = Идентификатор; + + Возврат Результат; + +КонецФункции + +// Параметры: +// ПараметрыЗапроса - См. НовыеПараметрыЗапросаОписаниеДокумента +// +// Возвращаемое значение: +// См. НовыйЗапрос +Функция ЗапросСервисаОтметитьПолучениеСообщения(ПараметрыЗапроса) + + Результат = НовыйЗапрос( + "ОписаниеДокумента", + ИнтернетСоединениеБЭД.HTTPМетоды().PATCH, + ПараметрыЗапроса.Организация, + СтрШаблон("hub/messages/%1", ПараметрыЗапроса.Идентификатор), + 200); + + Результат.ФорматОтвета = ФорматыОтвета().Неопределено; + + Возврат Результат; + +КонецФункции + +// Параметры: +// Организация - ОпределяемыйТип.Организация +// Идентификатор - Строка +Процедура ОтметитьПолучениеСообщения(Знач Организация, Знач Идентификатор) + + ПараметрыЗапроса = ПараметрыЗапросаОтметитьПолучениеСообщения(Организация, Идентификатор); + ЗапросСервиса = ЗапросСервисаОтметитьПолучениеСообщения(ПараметрыЗапроса); + + ВыполнитьЗапрос(ЗапросСервиса); + +КонецПроцедуры + +#КонецОбласти + +#КонецОбласти + +#Область Операции + +// Метод-конструктор результата выполнения операции +// +// Возвращаемое значение: +// Структура - Новый результат выполнения запроса: +// * Отказ - Булево - Истина, если операция выполнена с ошибками. +// Ложь, в ином случае. +// * ТекстОшибки - Строка - Текст ошибки при выполнении операции +// * Данные - Произвольный - Результат выполнения операции +// - Неопределено - Выходные данные отсутствуют +Функция НовыйРезультатВыполненияОперации() + + Результат = Новый Структура; + + Результат.Вставить("Отказ" , Ложь); + Результат.Вставить("ТекстОшибки" , ""); + Результат.Вставить("Данные" , Неопределено); + + Возврат Результат; + +КонецФункции + +#КонецОбласти + +#Область ВзаимодействиеССервисом + +#Область Конструкторы + +// Метод-конструктор запроса к сервису 1С:EDI +// +// Параметры: +// Имя - Строка - Имя метода сервиса +// Метод - Строка - Имя HTTP-метода запроса +// Организация - ОпределяемыйТип.Организация - Организация для получения абсолютного пути и токена +// Адрес - Строка - Путь к ресурсу на сервере +// КодОтвета - Число - Ожидаемый код ответа +// +// Возвращаемое значение: +// Структура - Запрос: +// * Имя - Строка - Имя метода сервиса +// * Метод - Строка - Имя HTTP-метода запроса +// * Организация - ОпределяемыйТип.Организация - Организация для получения абсолютного пути и токена +// - Неопределено - Не задана +// * Адрес - Строка - Путь к ресурсу на сервере +// * Тело - Строка - Текст тела запроса +// - Массив Из Произвольный - JSON-объект +// - Структура - JSON-объект +// - ДвоичныеДанные - Двоичные данные тела запроса +// - Неопределено - Тело запроса не задано +// * ТипЗапроса - Строка - Заголовок Content-Type +// - Неопределено - Не задан +// * ТипОтвета - Строка - Заголовок Accept +// - Неопределено - Не задан +// * Таймаут - Число - Длительность таймаута запроса +// * КодыОтвета - Массив Из Число - Допустимые коды ответа +// * ФорматОтвета - Строка - Формат, в котором следует вернуть ответ сервиса +// См. ФорматыОтвета +// * Заголовки - Соответствие Из КлючИЗначение - Заголовки запроса: +// ** Ключ - Строка - Имя заголовка +// ** Значение - Строка - Значение заголовка +// * Параметры - Соответствие Из КлючИЗначение - Параметры запроса: +// ** Ключ - Строка - Имя параметра +// ** Значение - Строка - Значение параметра +Функция НовыйЗапрос(Знач Имя, Знач Метод, Знач Организация, Знач Адрес, Знач КодОтвета = 200) + + Результат = Новый Структура; + + Результат.Вставить("Имя" , Имя); + Результат.Вставить("Метод" , Метод); + Результат.Вставить("Организация" , Организация); + Результат.Вставить("Адрес" , Адрес); + Результат.Вставить("Тело" , Неопределено); + Результат.Вставить("ТипЗапроса" , Неопределено); + Результат.Вставить("ТипОтвета" , Неопределено); + Результат.Вставить("Таймаут" , 60); + Результат.Вставить("КодыОтвета" , ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(КодОтвета)); + Результат.Вставить("ФорматОтвета" , ФорматыОтвета().HTTPОтвет); + Результат.Вставить("Заголовки" , Новый Соответствие); + Результат.Вставить("Параметры" , Новый Соответствие); + + Возврат Результат; + +КонецФункции + +// Метод-конструктор результата выполнения запроса к сервису +// +// Возвращаемое значение: +// Структура - Новый результат выполнения запроса: +// * Отказ - Булево - Истина, если запрос выполнен с ошибками. +// Ложь, в ином случае. +// * ТекстОшибки - Строка - Текст ошибки при выполнении запроса +// * Данные - HTTPОтвет - Если Запрос.ФорматОтвета=ФорматыОтвета().HTTPОтвет +// - ДвоичныеДанные - Если Запрос.ФорматОтвета=ФорматыОтвета().ДвоичныеДанные +// - Поток - Если Запрос.ФорматОтвета=ФорматыОтвета().Поток +// - Строка - Если Запрос.ФорматОтвета=ФорматыОтвета().Строка +// - Структура - Если Запрос.ФорматОтвета=ФорматыОтвета().JSON +// - Массив Из Структура - Если Запрос.ФорматОтвета=ФорматыОтвета().JSON +// - Неопределено - Если Запрос.ФорматОтвета=ФорматыОтвета().Неопределено +Функция НовыйРезультатВыполненияЗапроса() + + Результат = Новый Структура; + + Результат.Вставить("Отказ" , Ложь); + Результат.Вставить("ТекстОшибки" , ""); + Результат.Вставить("Данные" , Неопределено); + + Возврат Результат; + +КонецФункции + +// Метод-конструктор нового HTTP-соединения +// +// Параметры: +// СтруктураURI - См. ОбщегоНазначенияКлиентСервер.СтруктураURI +// Таймаут - Число - Длительность таймаута запроса +// +// Возвращаемое значение: +// HTTPСоединение +Функция НовоеHTTPСоединение(Знач СтруктураURI, Знач Таймаут) + + Если СтруктураURI.Схема = "https" Тогда + ЗащищенноеСоединение = ОбщегоНазначенияКлиентСервер.НовоеЗащищенноеСоединение(); + ПортПоУмолчанию = 443; + Иначе + ЗащищенноеСоединение = Неопределено; + ПортПоУмолчанию = 80; + КонецЕсли; + + Порт = + ?(СтруктураURI.Порт = Неопределено, + ПортПоУмолчанию, + СтруктураURI.Порт); + + Прокси = ПолучениеФайловИзИнтернета.ПолучитьПрокси(СтруктураURI.Схема); + + Возврат Новый HTTPСоединение( + СтруктураURI.Хост, + Порт, + СтруктураURI.Логин, + СтруктураURI.Пароль, + Прокси, + Таймаут, + ЗащищенноеСоединение); + +КонецФункции + +// Метод-конструктор нового HTTP-запроса +// +// Параметры: +// СтруктураURI - См. ОбщегоНазначенияКлиентСервер.СтруктураURI +// Запрос - См. НовыйЗапрос +// +// Возвращаемое значение: +// HTTPЗапрос +Функция НовыйHTTPЗапрос(Знач СтруктураURI, Знач Запрос) + + Заголовки = Новый Соответствие; + Заголовки.Вставить(ЗаголовкиHTTP().Авторизация, ТокенОрганизацииБС(Запрос.Организация)); + + Если Запрос.ТипЗапроса <> Неопределено Тогда + Заголовки.Вставить(ЗаголовкиHTTP().ТипЗапроса, Запрос.ТипЗапроса); + КонецЕсли; + + Если Запрос.ТипОтвета <> Неопределено Тогда + Заголовки.Вставить(ЗаголовкиHTTP().ТипОтвета, Запрос.ТипОтвета); + КонецЕсли; + + ОбщегоНазначенияКлиентСервер.ДополнитьСоответствие(Заголовки, Запрос.Заголовки); + + Адрес = АдресЗапроса(СтруктураURI.ПутьНаСервере, Запрос.Параметры); + + Результат = Новый HTTPЗапрос(Адрес, Заголовки); + + Если Запрос.Тело = Неопределено Тогда + // Тело не задано + ИначеЕсли ТипЗнч(Запрос.Тело) = Тип("Строка") Тогда + Результат.УстановитьТелоИзСтроки(Запрос.Тело); + ИначеЕсли ТипЗнч(Запрос.Тело) = Тип("ДвоичныеДанные") Тогда + Результат.УстановитьТелоИзДвоичныхДанных(Запрос.Тело); + ИначеЕсли ТипЗнч(Запрос.Тело) = Тип("Массив") + Или ТипЗнч(Запрос.Тело) = Тип("Структура") Тогда + Результат.УстановитьТелоИзДвоичныхДанных(ТелоЗапросаJSON(Запрос.Тело)); + Иначе + ВызватьИсключение( + СтрШаблон( + НСтр( + "ru = 'Неподдерживаемый тип тела запроса: %1'", + ОбщегоНазначения.КодОсновногоЯзыка()), + ТипЗнч(Запрос.Тело))); + КонецЕсли; + + Возврат Результат; + +КонецФункции + +#КонецОбласти + +#Область Перечисления + +// Заголовки HTTP-запросов +// +// Возвращаемое значение: +// Структура - Заголовки: +// * Авторизация - Строка - Заголовок Authorization +// * ТипЗапроса - Строка - Заголовок Content-Type +// * ТипОтвета - Строка - Заголовок Accept +// * ИмяФайла - Строка - Заголовок Content-Disposition +Функция ЗаголовкиHTTP() + + Результат = Новый Структура; + + Результат.Вставить("Авторизация" , "Authorization"); + Результат.Вставить("ТипЗапроса" , "Content-Type"); + Результат.Вставить("ТипОтвета" , "Accept"); + Результат.Вставить("ИмяФайла" , "Content-Disposition"); + + Возврат Результат; + +КонецФункции + +// Форматы получения ответа HTTP-запроса +// +// Возвращаемое значение: +// Структура - Форматы ответа: +// * HTTPОтвет - Строка - Сам HTTPОтвет +// * ДвоичныеДанные - Строка - HTTPОтвет.ПолучитьТелоКакДвоичныеДанные() +// * Поток - Строка - HTTPОтвет.ПолучитьТелоКакПоток() +// * Строка - Строка - HTTPОтвет.ПолучитьТелоКакСтроку() +// * JSON - Строка - Прочитать тело HTTP-ответа как JSON-строку +// * Неопределено - Строка - Читать ответ не требуется +Функция ФорматыОтвета() + + Результат = Новый Структура; + + Результат.Вставить("HTTPОтвет" , "HTTPОтвет"); + Результат.Вставить("ДвоичныеДанные" , "ДвоичныеДанные"); + Результат.Вставить("Поток" , "Поток"); + Результат.Вставить("Строка" , "Строка"); + Результат.Вставить("JSON" , "JSON"); + Результат.Вставить("Неопределено" , "Неопределено"); + + Возврат Результат; + +КонецФункции + +#КонецОбласти + +// Параметры: +// HTTPОтвет - HTTPОтвет +// ИмяЗаголовка - Строка +// ЗначениеПоУмолчанию - Строка +// - Неопределено +// +// Возвращаемое значение: +// Строка +// Неопределено +Функция ЗначениеЗаголовка(Знач HTTPОтвет, Знач ИмяЗаголовка, Знач ЗначениеПоУмолчанию = Неопределено) + + Для Каждого Заголовок Из HTTPОтвет.Заголовки Цикл + ИмяЗаголовкаОтвета = Заголовок.Ключ; // Строка + Если СтрСравнить(ИмяЗаголовкаОтвета, ИмяЗаголовка) = 0 Тогда + Возврат Заголовок.Значение; + КонецЕсли; + КонецЦикла; + + Возврат ЗначениеПоУмолчанию; + +КонецФункции + +// Формирует полное имя запроса к сервису +// +// Параметры: +// Имя - Строка - Имя запроса к сервису для логирования +// +// Возвращаемое значение: +// Строка - Полное имя запроса +Функция ИмяЗапроса(Знач Имя = Неопределено) + Возврат СтрШаблон("ЭлектронноеВзаимодействие.ОбменСКонтрагентами.СервисEDI.%1", Имя); +КонецФункции + +// Параметры: +// Параметры - См. АдресЗапроса.Параметры +// +// Возвращаемое значение: +// Строка +Функция СтрокаПараметровЗапроса(Знач Параметры) + + Результат = Новый Массив; // Массив Из Строка + + Для Каждого Параметр Из Параметры Цикл + Результат.Добавить( + СтрШаблон( + "%1=%2", + Параметр.Ключ, + Параметр.Значение)); + КонецЦикла; + + Возврат СтрСоединить(Результат, "&"); + +КонецФункции + +// Параметры: +// Путь - Строка +// Параметры - Соответствие Из КлючИЗначение: +// * Ключ - Строка +// * Значение - Строка +// +// Возвращаемое значение: +// Строка +Функция АдресЗапроса(Знач Путь, Знач Параметры) + + Если Параметры.Количество() = 0 Тогда + Возврат Путь; + Иначе + Возврат СтрШаблон("%1?%2", Путь, СтрокаПараметровЗапроса(Параметры)); + КонецЕсли; + +КонецФункции + +// Адрес сервиса 1С:EDI. +// +// Возвращаемое значение: +// Строка +Функция АдресСервиса() + Возврат "https://edi.1cfresh.com/api"; +КонецФункции + +// Параметры: +// Соединение - HTTPСоединение +// Запрос - HTTPЗапрос +// Метод - Строка +// Имя - Строка +// +// Возвращаемое значение: +// HTTPОтвет +Функция ВызватьHTTPМетод(Знач Соединение, Знач Запрос, Знач Метод, Знач Имя) + Возврат Соединение.ВызватьHTTPМетод(Метод, Запрос); +КонецФункции + +// Параметры: +// Результат - См. НовыйРезультатВыполненияЗапроса +// Запрос - См. НовыйЗапрос +// HTTPОтвет - HTTPОтвет +Процедура ПроверитьКодОтвета(Результат, Знач Запрос, Знач HTTPОтвет) + + Если Запрос.КодыОтвета.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + Если Запрос.КодыОтвета.Найти(HTTPОтвет.КодСостояния) = Неопределено Тогда + Результат.Отказ = Истина; + Результат.ТекстОшибки = + СтрШаблон( + НСтр( + "ru = 'Полученный код ответа (%1) не входит в список ожидаемых: %2.'", + ОбщегоНазначения.КодОсновногоЯзыка()), + HTTPОтвет.КодСостояния, + СтрСоединить(Запрос.КодыОтвета, ", ")); + КонецЕсли; + +КонецПроцедуры + +// Сериализует тело запроса в JSON. +// +// Параметры: +// Тело - Массив Из Произвольный - Тело запроса (JSON) +// - Структура - Тело запроса (JSON) +// +// Возвращаемое значение: +// ДвоичныеДанные - Тело запроса в виде двоичных данных +Функция ТелоЗапросаJSON(Знач Тело) + + Поток = Новый ПотокВПамяти; + + ЗаписьJSON = Новый ЗаписьJSON; + ЗаписьJSON.ОткрытьПоток(Поток); + ЗаписатьJSON(ЗаписьJSON, Тело); + ЗаписьJSON.Закрыть(); + + Возврат Поток.ЗакрытьИПолучитьДвоичныеДанные(); + +КонецФункции + +// Параметры: +// Результат - См. НовыйРезультатВыполненияЗапроса +// Запрос - См. НовыйЗапрос +// HTTPОтвет - HTTPОтвет +Процедура ПрочитатьТелоОтветаJSON(Результат, Знач Запрос, Знач HTTPОтвет) + + ПотокДанных = HTTPОтвет.ПолучитьТелоКакПоток(); + + Попытка + Результат.Данные = ДанныеJSON(HTTPОтвет); + Исключение + Результат.Отказ = Истина; + Результат.ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + КонецПопытки; + + ПотокДанных.Закрыть(); + +КонецПроцедуры + +// Параметры: +// HTTPОтвет - HTTPОтвет +// +// Возвращаемое значение: +// Произвольный +Функция ДанныеJSON(Знач HTTPОтвет) + + ПотокДанных = HTTPОтвет.ПолучитьТелоКакПоток(); + + Попытка + ЧтениеJSON = Новый ЧтениеJSON; + ЧтениеJSON.ОткрытьПоток(ПотокДанных); + Результат = ПрочитатьJSON(ЧтениеJSON, , , ФорматДатыJSON.ISO); + ЧтениеJSON.Закрыть(); + ПотокДанных.Закрыть(); + Исключение + ПотокДанных.Закрыть(); + ВызватьИсключение; + КонецПопытки; + + Возврат Результат; + +КонецФункции + +// Параметры: +// Результат - См. НовыйРезультатВыполненияЗапроса +// Запрос - См. НовыйЗапрос +// HTTPОтвет - HTTPОтвет +Процедура ПрочитатьТелоОтвета(Результат, Знач Запрос, Знач HTTPОтвет) + + Если Запрос.ФорматОтвета = ФорматыОтвета().HTTPОтвет Тогда + Результат.Данные = HTTPОтвет; + ИначеЕсли Запрос.ФорматОтвета = ФорматыОтвета().ДвоичныеДанные Тогда + Результат.Данные = HTTPОтвет.ПолучитьТелоКакДвоичныеДанные(); + ИначеЕсли Запрос.ФорматОтвета = ФорматыОтвета().Поток Тогда + Результат.Данные = HTTPОтвет.ПолучитьТелоКакПоток(); + ИначеЕсли Запрос.ФорматОтвета = ФорматыОтвета().Строка Тогда + Результат.Данные = HTTPОтвет.ПолучитьТелоКакСтроку(); + ИначеЕсли Запрос.ФорматОтвета = ФорматыОтвета().JSON Тогда + ПрочитатьТелоОтветаJSON(Результат, Запрос, HTTPОтвет); + ИначеЕсли Запрос.ФорматОтвета = ФорматыОтвета().Неопределено Тогда + Результат.Данные = Неопределено; + Иначе + ВызватьИсключение( + СтрШаблон( + НСтр( + "ru = 'Непредвиденный формат ответа: %1'", + ОбщегоНазначения.КодОсновногоЯзыка()), + Запрос.ФорматОтвета)); + КонецЕсли; + +КонецПроцедуры + +// Выполняет запрос к сервису 1С:EDI +// +// Параметры: +// Запрос - См. НовыйЗапрос +// +// Возвращаемое значение: +// См. НовыйРезультатВыполненияЗапроса +Функция ВыполнитьЗапрос(Знач Запрос) + + Результат = НовыйРезультатВыполненияЗапроса(); + + ПолныйАдрес = + СтрШаблон( + "%1/%2/%3", + АдресСервиса(), + ИдентификаторОрганизацииБС(Запрос.Организация), + Запрос.Адрес); + + СтруктураURI = ОбщегоНазначенияКлиентСервер.СтруктураURI(ПолныйАдрес); + HTTPСоединение = НовоеHTTPСоединение(СтруктураURI, Запрос.Таймаут); + HTTPЗапрос = НовыйHTTPЗапрос(СтруктураURI, Запрос); + + Попытка + HTTPОтвет = ВызватьHTTPМетод(HTTPСоединение, HTTPЗапрос, Запрос.Метод, ИмяЗапроса(Запрос.Имя)); + Исключение + Результат.Отказ = Истина; + Результат.ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + Возврат Результат; + КонецПопытки; + + ПроверитьКодОтвета(Результат, Запрос, HTTPОтвет); + + Если Результат.Отказ Тогда + Возврат Результат; + КонецЕсли; + + ПрочитатьТелоОтвета(Результат, Запрос, HTTPОтвет); + + Возврат Результат; + +КонецФункции + +#КонецОбласти + +#Область БизнесСеть + +// См. БизнесСеть.ИдентификаторОрганизации +Функция ИдентификаторОрганизацииБС(Знач Организация) + ПроверитьНаличиеПодсистемыБизнесСеть("СервисEDIСлужебный.ИдентификаторОрганизацииБС"); + ОбщийМодульБизнесСеть = ОбщегоНазначения.ОбщийМодуль("БизнесСеть"); + Возврат ОбщийМодульБизнесСеть.ИдентификаторОрганизации(Организация); +КонецФункции + +// Получает токен доступа 1С:Бизнес-сеть +// +// Параметры: +// Организация - ОпределяемыйТип.Организация - Организация +// +// Возвращаемое значение: +// Строка - Токен доступа 1С:Бизнес-сеть +Функция ТокенОрганизацииБС(Знач Организация) + Контекст = "СервисEDIСлужебный.ТокенОрганизацииБС"; + + ПроверитьНаличиеПодсистемыБизнесСеть(Контекст); + + ОбщийМодульБизнесСеть = ОбщегоНазначения.ОбщийМодуль("БизнесСеть"); + + ИдентификаторОрганизации = ИдентификаторОрганизацииБС(Организация); + + Отказ = Ложь; + + Токен = ОбщийМодульБизнесСеть.СтрокаАутентификации(ИдентификаторОрганизации, Ложь, Отказ, Ложь); // Строка + + ОбщегоНазначенияКлиентСервер.Проверить( + Не Отказ, + НСтр( + "ru = 'Ошибка получения токена доступа 1С:Бизнес-сеть'", + ОбщегоНазначения.КодОсновногоЯзыка()), + Контекст); + + Возврат Токен; + +КонецФункции + +#КонецОбласти + +#Область ОшибкиБЭД + +// Возвращаемое значение: +// Строка +Функция КодОшибкиТранспорта() + Возврат "ОшибкаТранспортаEDI"; +КонецФункции + +#КонецОбласти + +#Область ВходящиеСообщения + +#Область Перечисления + +// Возвращаемое значение: +// Структура: +// * НеНачато - Строка +// * Выполняется - Строка +// * Завершено - Строка +Функция СтатусыЗагрузкиДанных() + + Результат = Новый Структура; + + Результат.Вставить("НеНачато" , "НеНачато"); + Результат.Вставить("Выполняется" , "Выполняется"); + Результат.Вставить("Завершено" , "Завершено"); + + Возврат Результат; + +КонецФункции + +// Возвращаемое значение: +// Структура: +// * НеНачато - Строка +// * Выполняется - Строка +// * Завершено - Строка +Функция СтатусыЧтенияПорции() + + Результат = Новый Структура; + + Результат.Вставить("НеНачато" , "НеНачато"); + Результат.Вставить("Выполняется" , "Выполняется"); + Результат.Вставить("Завершено" , "Завершено"); + + Возврат Результат; + +КонецФункции + +#КонецОбласти + +#Область Конструкторы + +// Возвращаемое значение: +// ТаблицаЗначений: +// * Организация - ОпределяемыйТип.Организация +// * Идентификатор - Строка +Функция НовыеУчетныеЗаписи() + + Результат = Новый ТаблицаЗначений; + + Результат.Колонки.Добавить("Организация" , Метаданные.ОпределяемыеТипы.Организация.Тип); + Результат.Колонки.Добавить("Идентификатор" , Новый ОписаниеТипов("Строка")); + + Возврат Результат; + +КонецФункции + +// Возвращаемое значение: +// ТаблицаЗначений: +// * Идентификатор - Строка +Функция НовыеДокументыОрганизации() + + Результат = Новый ТаблицаЗначений; + + Результат.Колонки.Добавить("Идентификатор" , Новый ОписаниеТипов("Строка")); + + Возврат Результат; + +КонецФункции + +// Возвращаемое значение: +// Структура: +// * РазмерСтраницы - Число +// * ПоложениеКурсора - Строка +// - Неопределено +Функция НоваяПагинация() + + Результат = Новый Структура; + + Результат.Вставить("РазмерСтраницы" , 100); + Результат.Вставить("ПоложениеКурсора" , Неопределено); + + Возврат Результат; + +КонецФункции + +// Новые документы. +// +// Возвращаемое значение: +// Структура - Новые документы: +// * Список - См. НовыеДокументыОрганизации +// * ТекущаяСтрока - СтрокаТаблицыЗначений: См. НовыеДокументыОрганизации +// - Неопределено +// * НомерСтроки - Число +// * СтатусЗагрузки - Строка - См. СтатусыЗагрузкиДанных +// * СтатусЧтения - Строка - См. СтатусыЧтенияПорции +Функция НовыеДокументы() + + Результат = Новый Структура; + + Результат.Вставить("Список" , НовыеДокументыОрганизации()); + Результат.Вставить("ТекущаяСтрока" , Неопределено); + Результат.Вставить("НомерСтроки" , 0); + Результат.Вставить("СтатусЗагрузки" , СтатусыЗагрузкиДанных().НеНачато); + Результат.Вставить("СтатусЧтения" , СтатусыЧтенияПорции().НеНачато); + + Возврат Результат; + +КонецФункции + +// Возвращаемое значение: +// Структура: +// * Идентификатор - Строка +// * Имя - Строка +// * Данные - ДвоичныеДанные +// - Неопределено +Функция НовоеОписаниеДокумента() + + Результат = Новый Структура; + + Результат.Вставить("Идентификатор" , ""); + Результат.Вставить("Имя" , ""); + Результат.Вставить("Данные" , Неопределено); + + Возврат Результат; + +КонецФункции + +#КонецОбласти + +// Возвращаемое значение: +// См. НовыеУчетныеЗаписи +Функция УчетныеЗаписи() + + Результат = НовыеУчетныеЗаписи(); + + ПроверитьНаличиеПодсистемыБизнесСеть("СервисEDIСлужебный.УчетныеЗаписи"); + ОбщийМодульБизнесСеть = ОбщегоНазначения.ОбщийМодуль("БизнесСеть"); + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("СпособОбменаЭД", СпособОбмена()); + Запрос.Текст = + "ВЫБРАТЬ РАЗЛИЧНЫЕ + | Настройки.Отправитель КАК Организация, + | Настройки.ИдентификаторОтправителя КАК Идентификатор + |ИЗ + | РегистрСведений.НастройкиОтправкиЭлектронныхДокументовПоВидам КАК Настройки + |ГДЕ + | Настройки.СпособОбменаЭД = &СпособОбменаЭД"; + + УстановитьПривилегированныйРежим(Истина); + Выборка = Запрос.Выполнить().Выбрать(); + УстановитьПривилегированныйРежим(Ложь); + + Пока Выборка.Следующий() Цикл + + Организация = Выборка.Организация; // ОпределяемыйТип.Организация + Идентификатор = Выборка.Идентификатор; // Строка + + Если ОбщийМодульБизнесСеть.ОрганизацияНеПодключенаТребуетсяПовторноеПодключение(Организация) Тогда + Продолжить; + КонецЕсли; + + НоваяСтрока = Результат.Добавить(); + НоваяСтрока.Организация = Организация; + НоваяСтрока.Идентификатор = Идентификатор; + + КонецЦикла; + + Возврат Результат; + +КонецФункции + +// Параметры: +// УчетнаяЗапись - СтрокаТаблицыЗначений: См. НовыеУчетныеЗаписи +// +// Возвращаемое значение: +// Структура: +// * УчетнаяЗапись - СтрокаТаблицыЗначений: См. НовыеУчетныеЗаписи +// * Документы - См. НовыеДокументы +// * Пагинация - См. НоваяПагинация +Функция ВыборкаДокументовОрганизации(Знач УчетнаяЗапись) + + Результат = Новый Структура; + + Результат.Вставить("УчетнаяЗапись" , УчетнаяЗапись); + Результат.Вставить("Документы" , НовыеДокументы()); + Результат.Вставить("Пагинация" , НоваяПагинация()); + + Возврат Результат; + +КонецФункции + +// Параметры: +// Выборка - См. ВыборкаДокументовОрганизации +Процедура ПрочитатьПорциюДокументов(Выборка) + + Контекст = "СервисEDIСлужебный.ПрочитатьПорциюДокументов"; + + ОбщегоНазначенияКлиентСервер.Проверить( + Выборка.Документы.СтатусЗагрузки <> СтатусыЗагрузкиДанных().Завершено, + НСтр( + "ru = 'Ошибка получения порции выборки: все данные получены'", + ОбщегоНазначения.КодОсновногоЯзыка()), + Контекст); + + Порция = ПолучитьПорциюДокументов(Выборка.УчетнаяЗапись.Организация, Выборка.Пагинация); + + Выборка.Документы.Список = Порция.Список; + Выборка.Пагинация.ПоложениеКурсора = Порция.ПоложениеКурсора; + Выборка.Документы.ТекущаяСтрока = Неопределено; + Выборка.Документы.НомерСтроки = 0; + + Если Выборка.Документы.Список.Количество() = 0 Тогда + Выборка.Документы.СтатусЧтения = СтатусыЧтенияПорции().Завершено; + Иначе + Выборка.Документы.СтатусЧтения = СтатусыЧтенияПорции().НеНачато; + КонецЕсли; + + Если Выборка.Документы.Список.Количество() = Выборка.Пагинация.РазмерСтраницы Тогда + Выборка.Документы.СтатусЗагрузки = СтатусыЗагрузкиДанных().Выполняется; + Иначе + Выборка.Документы.СтатусЗагрузки = СтатусыЗагрузкиДанных().Завершено; + КонецЕсли; + +КонецПроцедуры + +// Параметры: +// Выборка - См. ВыборкаДокументовОрганизации +Процедура ПерейтиКСледующемуДокументу(Выборка) + + Контекст = "СервисEDIСлужебный.ПерейтиКСледующемуДокументу"; + + ОбщегоНазначенияКлиентСервер.Проверить( + Выборка.Документы.СтатусЧтения <> СтатусыЧтенияПорции().Завершено, + НСтр( + "ru = 'Ошибка позиционирования выборки: обход не начат'", + ОбщегоНазначения.КодОсновногоЯзыка()), + Контекст); + ОбщегоНазначенияКлиентСервер.Проверить( + Выборка.Документы.Список.Количество() > Выборка.Документы.НомерСтроки, + НСтр( + "ru = 'Ошибка позиционирования выборки: обход завершен'", + ОбщегоНазначения.КодОсновногоЯзыка()), + Контекст); + + Выборка.Документы.НомерСтроки = Выборка.Документы.НомерСтроки + 1; + Выборка.Документы.ТекущаяСтрока = Выборка.Документы.Список[Выборка.Документы.НомерСтроки - 1]; + + Если Выборка.Документы.Список.Количество() = Выборка.Документы.НомерСтроки Тогда + Выборка.Документы.СтатусЧтения = СтатусыЧтенияПорции().Завершено; + Иначе + Выборка.Документы.СтатусЧтения = СтатусыЧтенияПорции().Выполняется; + КонецЕсли; + +КонецПроцедуры + +// Требуется загрузить порцию документов. +// +// Параметры: +// Выборка - См. ВыборкаДокументовОрганизации +// +// Возвращаемое значение: +// Булево +Функция ТребуетсяЗагрузитьПорциюДокументов(Выборка) + + Если Выборка.Документы.СтатусЗагрузки = СтатусыЗагрузкиДанных().НеНачато Тогда + Возврат Истина; + ИначеЕсли Выборка.Документы.СтатусЗагрузки = СтатусыЗагрузкиДанных().Выполняется + И Выборка.Документы.СтатусЧтения = СтатусыЗагрузкиДанных().Завершено Тогда + Возврат Истина; + Иначе + Возврат Ложь; + КонецЕсли; + +КонецФункции + +// Требуется загрузить порцию документов. +// +// Параметры: +// Выборка - См. ВыборкаДокументовОрганизации +// +// Возвращаемое значение: +// Булево +Функция ЗавершенаОбработка(Выборка) + + Возврат Выборка.Документы.СтатусЗагрузки = СтатусыЗагрузкиДанных().Завершено + И Выборка.Документы.СтатусЧтения = СтатусыЧтенияПорции().Завершено; + +КонецФункции + +// Параметры: +// Выборка - См. ВыборкаДокументовОрганизации +// +// Возвращаемое значение: +// Булево +Функция СледующийДокумент(Выборка) + + Если ТребуетсяЗагрузитьПорциюДокументов(Выборка) Тогда + ПрочитатьПорциюДокументов(Выборка); + КонецЕсли; + + Если ЗавершенаОбработка(Выборка) Тогда + Возврат Ложь; + КонецЕсли; + + ПерейтиКСледующемуДокументу(Выборка); + + Возврат Истина; + +КонецФункции + +// Параметры: +// Выборка - См. ВыборкаДокументовОрганизации +// +// Возвращаемое значение: +// См. НовоеОписаниеДокумента +Функция ПолучитьДокумент(Выборка) + Возврат ОписаниеДокумента(Выборка.УчетнаяЗапись.Организация, Выборка.Документы.ТекущаяСтрока.Идентификатор); +КонецФункции + +// Параметры: +// Выборка - См. ВыборкаДокументовОрганизации +Процедура ОтметитьПолучениеДокумента(Выборка) + ОтметитьПолучениеСообщения(Выборка.УчетнаяЗапись.Организация, Выборка.Документы.ТекущаяСтрока.Идентификатор); +КонецПроцедуры + +// Параметры: +// Результат - См. СинхронизацияЭДОСлужебный.НовыйРезультатПолученияДокументов +// УчетнаяЗапись - СтрокаТаблицыЗначений: См. НовыеУчетныеЗаписи +Процедура ПолучитьДокументыПоОрганизации(Результат, Знач УчетнаяЗапись) + + Выборка = ВыборкаДокументовОрганизации(УчетнаяЗапись); + СпособОбмена = СпособОбмена(); + + КонтекстДиагностики = ОбработкаНеисправностейБЭД.НовыйКонтекстДиагностики(); + + Пока СледующийДокумент(Выборка) Цикл + ОписаниеДокумента = ПолучитьДокумент(Выборка); + + КлючСинхронизации = СинхронизацияЭДОКлиентСервер.НовыйКлючСинхронизации(); + КлючСинхронизации.СпособОбмена = СпособОбмена; + КлючСинхронизации.ИдентификаторУчетнойЗаписи = УчетнаяЗапись.Идентификатор; + + ОписаниеКонтейнера = СервисЭДО.НоваяТаблицаКонтейнеров().Добавить(); + ОписаниеКонтейнера.ИДДокумента = ОписаниеДокумента.Идентификатор; + ОписаниеКонтейнера.ДвоичныеДанные = ОписаниеДокумента.Данные; + + РезультатСохраненияКонтейнера = ТранспортныеКонтейнерыЭДО.СохранитьКонтейнер( + ОписаниеКонтейнера, КлючСинхронизации, КонтекстДиагностики); + ТранспортныйКонтейнер = РезультатСохраненияКонтейнера.ТранспортныйКонтейнер; + + Если ЗначениеЗаполнено(ТранспортныйКонтейнер) Тогда + Результат.Контейнеры.Добавить(ТранспортныйКонтейнер); + КонецЕсли; + + ОтметитьПолучениеДокумента(Выборка); + + КонецЦикла; + +КонецПроцедуры + +#КонецОбласти + +#Область JSON + +// Параметры: +// Данные - Структура +// - Неопределено +// Путь - Строка +// ЗначениеПоУмолчанию - Произвольный +// +// Возвращаемое значение: +// Произвольный +Функция ЗначениеПоПути(Знач Данные, Знач Путь, Знач ЗначениеПоУмолчанию = Неопределено) + + Контекст = Данные; + Значение = Неопределено; + ЧастиПути = СтрРазделить(Путь, "."); + + Для Каждого ЧастьПути Из ЧастиПути Цикл + + Если Контекст = Неопределено Тогда + Возврат ЗначениеПоУмолчанию; + ИначеЕсли Не Контекст.Свойство(ЧастьПути, Значение) Тогда + Возврат ЗначениеПоУмолчанию; + КонецЕсли; + + Контекст = Значение; + + КонецЦикла; + + Возврат Контекст; + +КонецФункции + +#КонецОбласти + +#Область СведенияОФайлахСообщенийЭДО + +// Расположение ссылок на файл-источник в разных сообщениях +// +// Возвращаемое значение: +// Соответствие Из КлючИЗначение - Расположения: +// * Ключ - Строка - Код регламента +// * Значение - Строка - Путь к имени файла внутри файла +Функция РасположенияСсылокНаФайлИсточник() + + Результат = Новый Соответствие; + + Результат.Вставить("CarrierInformationDeliveryCargo", "Документ.ИдИнфГП.ИдФайлИнфГП"); + Результат.Вставить("ConsigneeInformation", "Документ.ИдИнфПрвПрием.ИдФайлИнфПрвПрием"); + Результат.Вставить("CarrierInformationAcceptanceCargo", "Документ.ИдИнфГО.ИдФайлИнфГО"); + + Возврат Результат; + +КонецФункции + +// Параметры: +// Документ - ОбъектXDTO +// КодТранзакции - Строка +// +// Возвращаемое значение: +// Строка +// Неопределено +Функция ИмяФайлаИсточника(Знач Документ, Знач КодТранзакции) + + Путь = РасположенияСсылокНаФайлИсточник()[КодТранзакции]; + + Если Путь = Неопределено Тогда + Возврат Неопределено; + КонецЕсли; + + Возврат РаботаСФайламиБЭД.ЗначениеСвойстваXDTO(Документ, Путь); + +КонецФункции + +// Параметры: +// ДокументКонтейнера - См. ТранспортныеКонтейнерыЭДО.НовоеОписаниеДокументаКонтейнера +Процедура ВыполнитьПоискИдентификаторовДокументооборотаДокументаПоИмениФайла(ДокументКонтейнера) + + Если Не ПустаяСтрока(ДокументКонтейнера.ИдентификаторДокументооборота) Тогда + Возврат; // Идентификатор получен ранее + КонецЕсли; + + Поток = ДокументКонтейнера.ОписаниеДанных.ДвоичныеДанные.ОткрытьПотокДляЧтения(); + + Документ = РаботаСФайламиБЭД.ПрочитатьXDTO(Поток); + ИмяФайла = ИмяФайлаИсточника(Документ, ДокументКонтейнера.КодТранзакции); + + Если ИмяФайла = Неопределено Тогда + Возврат; // В формате не предполагается передача сведений о файле-источнике + КонецЕсли; + + Сведения = РегистрыСведений.СведенияОФайлахСообщенийЭДО.СведенияОСообщении(ИмяФайла); + + Если Сведения = Неопределено Тогда + Возврат; // Не известен файл-источник + КонецЕсли; + + ДокументКонтейнера.ИдентификаторДокументооборота = Сведения.ИдентификаторДокументооборота; + +КонецПроцедуры + +#КонецОбласти + +#Область ТранспортныеКонтейнеры + +// Параметры: +// Контейнеры - Массив из ДокументСсылка.ТранспортныйКонтейнерЭДО +Процедура РаспаковатьКонтейнеры(Знач Контейнеры) + + ПараметрыВыполнения = ЭлектронныеДокументыЭДОКлиентСервер.НовыеПараметрыВыполненияДействийПоЭДО(); + + ЭлектронныеДокументыЭДОКлиентСервер.ДобавитьДействие( + ПараметрыВыполнения.НаборДействий, + Перечисления.ДействияПоЭДО.Загрузить); + + ПараметрыВыполнения.ОбъектыДействий.ТранспортныеКонтейнеры = Контейнеры; + + ЭлектронныеДокументыЭДОСлужебный.ВыполнитьДействияЭДО(ПараметрыВыполнения); + +КонецПроцедуры + +#КонецОбласти + +#Область НастройкиОтправки + +// Параметры: +// НастройкиОтправки - См. НастройкиЭДОКлиентСервер.НовыйКлючНастроекОтправки +// +// Возвращаемое значение: +// Булево +Функция ЭтоНастройкиОтправкиЧерезСервис1СEDI(Знач НастройкиОтправки) + + Если НастройкиОтправки = Неопределено Тогда + Возврат Ложь; + Иначе + Возврат ЭтоОбменЧерезСервис1СEDI(НастройкиОтправки.СпособОбмена); + КонецЕсли; + +КонецФункции + +// Параметры: +// НастройкиОтправки - См. НастройкиЭДОКлиентСервер.НовыйКлючНастроекОтправки +// +// Возвращаемое значение: +// Булево +Функция НастройкиОтправкиЗаполнены(Знач НастройкиОтправки) + + Если НастройкиОтправки = Неопределено Тогда + Возврат Ложь; + Иначе + Возврат Не ПустаяСтрока(НастройкиОтправки.ИдентификаторОтправителя) + И Не ПустаяСтрока(НастройкиОтправки.ИдентификаторПолучателя); + КонецЕсли; + +КонецФункции + +#КонецОбласти + +#Область ОбщегоНазначения + +// Получает значение атрибута JSON +// +// Параметры: +// Объект - Структура - Объект, атрибут которого нужно получить +// ИмяСвойства - Строка - Имя атрибута +// ЗначениеПоУмолчанию - Неопределено - Значение по умолчанию +// +// Возвращаемое значение: +// Произвольный - Значение свойства +Функция ЗначениеАтрибута(Знач Объект, Знач ИмяСвойства, Знач ЗначениеПоУмолчанию = Неопределено) + Возврат ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Объект, ИмяСвойства, ЗначениеПоУмолчанию); +КонецФункции + +#КонецОбласти + +#КонецОбласти diff --git a/Конфигурация/CommonModules/СервисEDIСлужебныйКлиент.xml b/Конфигурация/CommonModules/СервисEDIСлужебныйКлиент.xml new file mode 100644 index 000000000..3734ea624 --- /dev/null +++ b/Конфигурация/CommonModules/СервисEDIСлужебныйКлиент.xml @@ -0,0 +1,23 @@ + + + + + СервисEDIСлужебныйКлиент + + + ru + Сервис 1С:EDI (служебный клиент) + + + + false + true + false + false + true + false + false + DontUse + + + \ No newline at end of file diff --git a/Конфигурация/CommonModules/СервисEDIСлужебныйКлиент/Ext/Module.bsl b/Конфигурация/CommonModules/СервисEDIСлужебныйКлиент/Ext/Module.bsl new file mode 100644 index 000000000..c88c76642 --- /dev/null +++ b/Конфигурация/CommonModules/СервисEDIСлужебныйКлиент/Ext/Module.bsl @@ -0,0 +1,369 @@ +// @strict-types + +#Область СлужебныйПрограммныйИнтерфейс + +#Область РеализацияПрограммногоИнтерфейса + +// См. СервисEDIКлиент.СоздатьЭТрН +Процедура СоздатьЭТрН( + Знач Организация, + Знач Контрагент, + Знач ДокументОснования = Неопределено, + Знач ФормаВладелец = Неопределено, + Знач АдресХранилищаИнфоПолейЭТрН = Неопределено, + Знач Оповещение = Неопределено) Экспорт + + ДополнительныеПараметры = НовыеПараметрыСозданияЭТрН(); + ДополнительныеПараметры.Организация = Организация; + ДополнительныеПараметры.Контрагент = Контрагент; + ДополнительныеПараметры.ДокументОснования = ДокументОснования; + ДополнительныеПараметры.ФормаВладелец = ФормаВладелец; + ДополнительныеПараметры.АдресХранилищаИнфоПолейЭТрН = АдресХранилищаИнфоПолейЭТрН; + ДополнительныеПараметры.Оповещение = Оповещение; + + ВнутреннееОповещение = Новый ОписаниеОповещения( + "СоздатьЭТрНПослеПодключенияБизнесСети", ЭтотОбъект, ДополнительныеПараметры); + + БизнесСетьСлужебныйКлиент.ПодготовитьОрганизациюКИспользованию(Организация, ФормаВладелец, ВнутреннееОповещение); + +КонецПроцедуры + +// См. СервисEDIКлиент.ПолучитьСообщения +Процедура ПолучитьСообщения( + Знач ФормаВладелец = Неопределено, + Знач Оповещение = Неопределено, + Знач ПараметрыОжидания = Неопределено) Экспорт + + Если ПараметрыОжидания = Неопределено Тогда + ПараметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ФормаВладелец); + КонецЕсли; + + ДополнительныеПараметры = Новый Структура; + ДополнительныеПараметры.Вставить("Оповещение", Оповещение); + + ПромежуточноеОповещение = Новый ОписаниеОповещения( + "ПродолжитьПолучениеСообщений", ЭтотОбъект, ДополнительныеПараметры); + + ДлительнаяОперация = СервисEDIВызовСервера.ЗапуститьПолучениеСообщений(); + ДлительныеОперацииКлиент.ОжидатьЗавершение(ДлительнаяОперация, ПромежуточноеОповещение, ПараметрыОжидания); + +КонецПроцедуры + +#КонецОбласти + +#Область ИнтеграцияОбменСКонтрагентами + +// Проверяет, является ли переданный ключ ключом обмена через сервис 1С:EDI +// +// Параметры: +// КлючНастроекЭДО - См. НастройкиЭДОКлиентСервер.НовыйКлючНастроекОтправки +// +// Возвращаемое значение: +// Булево - Истина, если это ключ настроек для обмена через сервис 1С:EDI. +// Ложь, в ином случае. +Функция ЭтоКлючНастроекЧерезСервис1СEDI(Знач КлючНастроекЭДО) Экспорт + Возврат СервисEDIВызовСервера.ЭтоКлючНастроекЧерезСервис1СEDI(КлючНастроекЭДО); +КонецФункции + +// Ключ настроек обмена через сервис 1С:EDI +// +// Возвращаемое значение: +// Структура - Ключ настроек: +// * Организация - ОпределяемыйТип.Организация - Организация для настроек +// - Неопределено - Не задана +// * Контрагент - ОпределяемыйТип.УчастникЭДО - Контрагент для настроек +// - Неопределено - Не задан +// * Перевозчик - ОпределяемыйТип.УчастникЭДО - Перевозчик для настроек +// - Неопределено - Не задан +// * Договор - ОпределяемыйТип.ДоговорСКонтрагентомЭДО - Договор для настроек +// - Неопределено - Не задан +// * ВидДокумента - СправочникСсылка.ВидыДокументовЭДО - Вид документа ЭДО для настроек +Функция НовыйКлючНастроек() Экспорт + + Результат = Новый Структура; + ВидДокумента = ОбщегоНазначенияКлиент.ПредопределенныйЭлемент( + "Справочник.ВидыДокументовЭДО.ПустаяСсылка"); // СправочникСсылка.ВидыДокументовЭДО + + Результат.Вставить("Организация" , Неопределено); + Результат.Вставить("Контрагент" , Неопределено); + Результат.Вставить("Перевозчик" , Неопределено); + Результат.Вставить("Договор" , Неопределено); + Результат.Вставить("ВидДокумента" , ВидДокумента); + + //@skip-check constructor-function-return-section - Особенность строгой типизации + Возврат Результат; + +КонецФункции + +// Проверяет, требуется ли настройка обмена для сервиса 1С:EDI +// +// Параметры: +// КлючНастроек - См. СервисEDIСлужебныйКлиент.НовыйКлючНастроек +// +// Возвращаемое значение: +// Булево - Истина, если текущее состояние настроек с точки зрения сервиса 1С:EDI заполнено не полностью. +// Ложь, в ином случае. +Функция ТребуетсяНастройкаОбмена(Знач КлючНастроек) Экспорт + Возврат СервисEDIВызовСервера.ТребуетсяНастройкаОбмена(КлючНастроек); +КонецФункции + +// Открыть форму настройки обмена через сервис 1С:EDI. +// +// Параметры: +// КлючНастроек - См. СервисEDIСлужебныйКлиент.НовыйКлючНастроек +// ФормаВладелец - ФормаКлиентскогоПриложения - Форма, из которой открывается форма настроек +// - Неопределено - Форма не задана +// Оповещение - ОписаниеОповещения - Обработчик завершения настройки +// - Неопределено - Оповещать не требуется +Процедура ОткрытьФормуНастройкиОбменаЧерезСервис1СEDI( + Знач КлючНастроек, + Знач ФормаВладелец = Неопределено, + Знач Оповещение = Неопределено) Экспорт + + Если Не ОбщегоНазначенияКлиент.ПодсистемаСуществует("ЭлектронноеВзаимодействие.БизнесСеть") Тогда + ВызватьИсключение НСтр( + "ru = 'Для отправки документов через сервис 1С:EDI требуется подсистема 1С:Бизнес-сеть'", + ОбщегоНазначенияКлиент.КодОсновногоЯзыка()); + КонецЕсли; + + ДополнительныеПараметры = НовыеПараметрыОткрытияФормыНастройкиОбмена(); + ДополнительныеПараметры.КлючНастроек = КлючНастроек; + ДополнительныеПараметры.ФормаВладелец = ФормаВладелец; + ДополнительныеПараметры.Оповещение = Оповещение; + + ВнутреннееОповещение = Новый ОписаниеОповещения( + "ОткрытьФормуНастройкиОбменаПослеПодключенияБизнесСети", ЭтотОбъект, ДополнительныеПараметры); + + ОбщийМодульБизнесСетьСлужебныйКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("БизнесСетьСлужебныйКлиент"); + ОбщийМодульБизнесСетьСлужебныйКлиент.ПодготовитьОрганизациюКИспользованию( + КлючНастроек.Организация, ФормаВладелец, ВнутреннееОповещение); + +КонецПроцедуры + +#КонецОбласти + +#Область ДлительныеОперации + +// Выполняет ДлительныеОперацииКлиент.ОжидатьЗавершение и обрабатывает результат с передачей обработки далее +// +// Параметры: +// ДлительнаяОперация - см. ДлительныеОперации.ВыполнитьВФоне +// ОповещениеОЗавершении - ОписаниеОповещения - оповещение, которое вызывается после завершения +// длительной операции, в том числе после закрытия окна ожидания, если открывалось. +// Параметры процедуры-обработчика оповещения: +// # Результат - Строка - адрес результата во временном хранилище. +// - Неопределено - если задание было отменено +// # ДополнительныеПараметры - Произвольный - произвольные данные, переданные в описании оповещения. +// ПараметрыОжидания - см. ДлительныеОперацииКлиент.ПараметрыОжидания +// +Процедура ОжидатьЗавершение( + Знач ДлительнаяОперация, + Знач ОповещениеОЗавершении = Неопределено, + Знач ПараметрыОжидания = Неопределено) Экспорт + + ОбработчикРезультата = Новый ОписаниеОповещения( + "ПриЗавершенииДлительнойОперации", + ЭтотОбъект, + НовыеПараметрыОжиданияРезультата(ОповещениеОЗавершении)); + + ДлительныеОперацииКлиент.ОжидатьЗавершение(ДлительнаяОперация, ОбработчикРезультата, ПараметрыОжидания); + +КонецПроцедуры + +#КонецОбласти + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +#Область ДлительныеОперации + +// Параметры: +// ОповещениеОЗавершении - ОписаниеОповещения +// - Неопределено +// +// Возвращаемое значение: +// Структура: +// * ОповещениеОЗавершении - ОписаниеОповещения +// - Неопределено +Функция НовыеПараметрыОжиданияРезультата(Знач ОповещениеОЗавершении = Неопределено) + + Результат = Новый Структура; + + Результат.Вставить("ОповещениеОЗавершении", ОповещениеОЗавершении); + + Возврат Результат; + +КонецФункции + +// При завершении длительной операции. +// +// Параметры: +// РезультатВыполнения - См. ДлительныеОперацииКлиент.НовыйРезультатДлительнойОперации +// - Неопределено +// ДополнительныеПараметры - См. НовыеПараметрыОжиданияРезультата +Процедура ПриЗавершенииДлительнойОперации(РезультатВыполнения, ДополнительныеПараметры) Экспорт + + Если РезультатВыполнения = Неопределено Тогда + // Задание было отменено + ВыполнитьОбработкуОповещения(ДополнительныеПараметры.ОповещениеОЗавершении, Неопределено); + Возврат; + КонецЕсли; + + Сообщения = РезультатВыполнения.Сообщения; // ФиксированныйМассив Из СообщениеПользователю + + Для Каждого Сообщение Из Сообщения Цикл + Сообщение.Сообщить(); + КонецЦикла; + + Если РезультатВыполнения.Статус = "Ошибка" Тогда + ОбщегоНазначенияКлиент.СообщитьПользователю(РезультатВыполнения.ПодробноеПредставлениеОшибки); + РезультатВыполнения.АдресРезультата = Неопределено; + КонецЕсли; + + // Возвращаем управление вызывающему коду + ВыполнитьОбработкуОповещения(ДополнительныеПараметры.ОповещениеОЗавершении, РезультатВыполнения.АдресРезультата); + +КонецПроцедуры + +// Параметры: +// РезультатВыполнения - См. ДлительныеОперацииКлиент.НовыйРезультатДлительнойОперации +// ДополнительныеПараметры - Структура - Дополнительные параметры: +// * Оповещение - ОписаниеОповещения - Оповещение о завершении получения сообщений. +Процедура ПродолжитьПолучениеСообщений(Знач РезультатВыполнения, ДополнительныеПараметры) Экспорт + + Если РезультатВыполнения = Неопределено Тогда + Возврат; // Задание было отменено пользователем + КонецЕсли; + + ТранспортныеКонтейнеры = ПолучитьИзВременногоХранилища( + РезультатВыполнения.АдресРезультата); // Массив Из ДокументСсылка.ТранспортныйКонтейнерЭДО + + ПараметрыВыполнения = ИнтерфейсДокументовЭДОКлиентСервер.НовыеПараметрыВыполненияДействийПоЭДО(); + ПараметрыВыполнения.ОбъектыДействий.ТранспортныеКонтейнеры = ТранспортныеКонтейнеры; + + ЭлектронныеДокументыЭДОКлиентСервер.ДобавитьДействие( + ПараметрыВыполнения.НаборДействий, ПредопределенноеЗначение("Перечисление.ДействияПоЭДО.Загрузить")); + + ЭлектронныеДокументыЭДОКлиент.НачатьВыполнениеДействийПоЭДО( + ДополнительныеПараметры.Оповещение, ПараметрыВыполнения); + +КонецПроцедуры + +#КонецОбласти + +#Область СоздатьЭТрН + +// Возвращаемое значение: +// Структура: +// * Организация - ЛюбаяСсылка +// - Неопределено +// * Контрагент - ЛюбаяСсылка +// - Неопределено +// * ДокументОснования - ЛюбаяСсылка +// - Неопределено +// * ФормаВладелец - ФормаКлиентскогоПриложения +// - Неопределено +// * АдресХранилищаИнфоПолейЭТрН - Строка +// - Неопределено +// * Оповещение - ОписаниеОповещения +// - Неопределено +Функция НовыеПараметрыСозданияЭТрН() + + Результат = Новый Структура; + + Результат.Вставить("Организация" , Неопределено); + Результат.Вставить("Контрагент" , Неопределено); + Результат.Вставить("ДокументОснования" , Неопределено); + Результат.Вставить("ФормаВладелец" , Неопределено); + Результат.Вставить("АдресХранилищаИнфоПолейЭТрН", Неопределено); + Результат.Вставить("Оповещение" , Неопределено); + + Возврат Результат; + +КонецФункции + +// Параметры: +// ОрганизацияПодключена - Булево +// ДополнительныеПараметры - См. НовыеПараметрыСозданияЭТрН +Процедура СоздатьЭТрНПослеПодключенияБизнесСети( + Знач ОрганизацияПодключена, + Знач ДополнительныеПараметры) Экспорт + + Если Не ОрганизацияПодключена Тогда + Возврат; + КонецЕсли; + + СервисEDIВызовСервера.ЗафиксироватьНастройкиЭТрН( + ДополнительныеПараметры.Организация, + ДополнительныеПараметры.Контрагент); + + ДанныеЗаполнения = ОбменСГИСЭПДКлиент.НовыеДанныеЗаполненияЭТрН(); + + ДанныеЗаполнения.Организация = ДополнительныеПараметры.Организация; + ДанныеЗаполнения.Грузоотправитель = ДополнительныеПараметры.Организация; + ДанныеЗаполнения.Грузополучатель = ДополнительныеПараметры.Контрагент; + ДанныеЗаполнения.Заказчик = ДополнительныеПараметры.Контрагент; + ДанныеЗаполнения.ДокументОснование = ДополнительныеПараметры.ДокументОснования; + ДанныеЗаполнения.ТаблицаИнформационныеПоля = ДополнительныеПараметры.АдресХранилищаИнфоПолейЭТрН; + + ОбменСГИСЭПДКлиент.СоздатьЭТрН( + ДанныеЗаполнения, + ДополнительныеПараметры.ФормаВладелец, + ДополнительныеПараметры.Оповещение); + +КонецПроцедуры + +#КонецОбласти + +#Область ОткрытьФормуНастройкиОбменаЧерезСервис1СEDI + +// Возвращаемое значение: +// Структура: +// * КлючНастроек - См. СервисEDIСлужебныйКлиент.НовыйКлючНастроек +// - Неопределено +// * ФормаВладелец - ФормаКлиентскогоПриложения +// - Неопределено +// * Оповещение - ОписаниеОповещения +// - Неопределено +Функция НовыеПараметрыОткрытияФормыНастройкиОбмена() + + Результат = Новый Структура; + + Результат.Вставить("КлючНастроек" , Неопределено); + Результат.Вставить("ФормаВладелец" , Неопределено); + Результат.Вставить("Оповещение" , Неопределено); + + Возврат Результат; + +КонецФункции + +// Параметры: +// ОрганизацияПодключена - Булево +// ДополнительныеПараметры - См. НовыеПараметрыОткрытияФормыНастройкиОбмена +Процедура ОткрытьФормуНастройкиОбменаПослеПодключенияБизнесСети( + Знач ОрганизацияПодключена, + Знач ДополнительныеПараметры) Экспорт + + Если Не ОрганизацияПодключена Тогда + Возврат; + КонецЕсли; + + Если ДополнительныеПараметры.ФормаВладелец = Неопределено Тогда + РежимОткрытия = РежимОткрытияОкнаФормы.Независимый; + Иначе + РежимОткрытия = РежимОткрытияОкнаФормы.БлокироватьОкноВладельца; + КонецЕсли; + + ОткрытьФорму( + "ОбщаяФорма.ВводНастроекОтправкиЧерезСервис1СEDI", + ДополнительныеПараметры.КлючНастроек, + ДополнительныеПараметры.ФормаВладелец, , , , + ДополнительныеПараметры.Оповещение, + РежимОткрытия); + +КонецПроцедуры + +#КонецОбласти + +#КонецОбласти \ No newline at end of file diff --git a/Конфигурация/CommonModules/СервисEDIСлужебныйКлиентСервер.xml b/Конфигурация/CommonModules/СервисEDIСлужебныйКлиентСервер.xml new file mode 100644 index 000000000..359f6eed4 --- /dev/null +++ b/Конфигурация/CommonModules/СервисEDIСлужебныйКлиентСервер.xml @@ -0,0 +1,23 @@ + + + + + СервисEDIСлужебныйКлиентСервер + + + ru + Сервис 1С:EDI (служебный клиент-сервер) + + + + false + true + true + true + true + false + false + DontUse + + + \ No newline at end of file diff --git a/Конфигурация/CommonModules/СервисEDIСлужебныйКлиентСервер/Ext/Module.bsl b/Конфигурация/CommonModules/СервисEDIСлужебныйКлиентСервер/Ext/Module.bsl new file mode 100644 index 000000000..5f7184acb --- /dev/null +++ b/Конфигурация/CommonModules/СервисEDIСлужебныйКлиентСервер/Ext/Module.bsl @@ -0,0 +1,35 @@ +// @strict-types + +#Область СлужебныйПрограммныйИнтерфейс + +// Нормализует значение идентификатора участника ЭДО +// +// Параметры: +// Идентификатор - Строка - Идентификатор участника ЭДО +Процедура НормализоватьИдентификатор(Идентификатор) Экспорт + Идентификатор = НормализованныйИдентификатор(Идентификатор); +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Функция НормализованныйИдентификатор(Знач Идентификатор) + + Результат = Идентификатор; + + Результат = СокрЛП(Результат); + Результат = СтрЗаменить(Результат, " ", ""); + Результат = СтрЗаменить(Результат, Символы.ВК, ""); + Результат = СтрЗаменить(Результат, Символы.ВТаб, ""); + Результат = СтрЗаменить(Результат, Символы.НПП, ""); + Результат = СтрЗаменить(Результат, Символы.ПС, ""); + Результат = СтрЗаменить(Результат, Символы.ПФ, ""); + Результат = СтрЗаменить(Результат, Символы.Таб, ""); + Результат = ВРег(Результат); + + Возврат Результат; + +КонецФункции + +#КонецОбласти diff --git a/Конфигурация/CommonModules/СервисВзаимодействияМПЭПД/Ext/Module.bsl b/Конфигурация/CommonModules/СервисВзаимодействияМПЭПД/Ext/Module.bsl index ccab9b728..05630518d 100644 --- a/Конфигурация/CommonModules/СервисВзаимодействияМПЭПД/Ext/Module.bsl +++ b/Конфигурация/CommonModules/СервисВзаимодействияМПЭПД/Ext/Module.bsl @@ -1,4 +1,30 @@  +#Область ПрограммныйИнтерфейс + +#Область ДляВызоваИзДругихПодсистем + +#Область СтандартныеПодсистемы + +// См. СтандартныеПодсистемыСервер.ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод +Процедура ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод(Методы) Экспорт + + Методы.Вставить("СервисРегистрацияОрганизации", Истина); + Методы.Вставить("СервисИзменитьПользователя", Истина); + Методы.Вставить("СервисПриостановитьРаботуПользователя", Истина); + Методы.Вставить("СервисВозобновитьРаботуПользователя", Истина); + Методы.Вставить("СервисДобавитьПользователя", Истина); + Методы.Вставить("СервисУдалитьПользователя", Истина); + Методы.Вставить("СервисПолучитьПользователей", Истина); + Методы.Вставить("СервисУдалитьСписокПользователей", Истина); + +КонецПроцедуры + +#КонецОбласти + +#КонецОбласти + +#КонецОбласти + #Область СлужебныйПрограммныйИнтерфейс #Область ОбменДаннымиССервером @@ -181,6 +207,7 @@ ПараметрыЗапроса.Вставить("DirectExchange", СвойствоСтруктуры(ДанныеВодителя, "ПрямойОбмен", Ложь)); ПараметрыЗапроса.Вставить("PaperAttorney", ЕстьБумажнаяДоверенность); ПараметрыЗапроса.Вставить("IdentificationDocuments", СвойствоСтруктуры(ДанныеВодителя, "ЛичныеДокументыДляОтправкиВМП")); + ПараметрыЗапроса.Вставить("LedVersion", ВерсияОбменаСМобильнымПриложением()); ПараметрыОперации = ПараметрыВыполненияОперацииСервиса(ИдентификаторЭДО); ПараметрыОперации.АдресРесурса = "service/registrationMA"; @@ -508,6 +535,7 @@ СтруктураДанныхДоверенности.Вставить("Дата", ДанныеДоверенности.ДатаВыдачи); СтруктураДанныхДоверенности.Вставить("ДатаОкончания", ДанныеДоверенности.ДатаОкончания); СтруктураДанныхДоверенности.Вставить("СсылкаНаДоверенностьВРеестре", ДанныеДоверенности.СсылкаНаДоверенностьВРеестре); + СтруктураДанныхДоверенности.Вставить("СсылкаНаРеестр", ДанныеДоверенности.СсылкаНаРеестр); КонецЕсли; @@ -525,7 +553,8 @@ ПараметрыЗапроса.Вставить("DirectExchange", СвойствоСтруктуры(ДанныеВодителя, "ПрямойОбмен", Ложь)); ПараметрыЗапроса.Вставить("PaperAttorney", ЕстьБумажнаяДоверенность); ПараметрыЗапроса.Вставить("IdentificationDocuments", СвойствоСтруктуры(ДанныеВодителя, "ЛичныеДокументыДляОтправкиВМП")); - + ПараметрыЗапроса.Вставить("LedVersion", ВерсияОбменаСМобильнымПриложением()); + ПараметрыОперации = ПараметрыВыполненияОперацииСервиса(ИдентификаторЭДО); ПараметрыОперации.АдресРесурса = "service/changeMA"; ПараметрыОперации.Метод = "POST"; @@ -1088,6 +1117,7 @@ ТитулСобытияУведомления = Неопределено; ПроверятьТитулыРеестраИСообщенияНаСовпадение = Ложь; Иначе + ПроверятьТитулыРеестраИСообщенияНаСовпадение = Истина; Если СтрокаМассива.ВидСообщения = Перечисления.ТипыВзаимодействияМПЭПД.ПривязкаВодителя Или СтрокаМассива.ВидСообщения = Перечисления.ТипыВзаимодействияМПЭПД.ОтвязкаВодителя Тогда ТитулСобытияУведомления = Перечисления.ТипыЭлементовРегламентаЭДО.ЭПЛ_Титул1; @@ -1238,6 +1268,648 @@ #КонецОбласти +#Область ДанныеМобильногоПриложения + +// Возвращает признак необходимости добавления данных МП. +// +// Параметры: +// ПервичнаяЗаписьРегистра - Структура, РегистрСведенийМенеджер.РеестрЭПД - +// ИзмененнаяЗаписьРегистра - Структура, РегистрСведенийМенеджер.РеестрЭПД - +// +// Возвращаемое значение: +// Булево - Признак необходимости добавления данных МП. +// +Функция НужноДобавитьДанныеМП(ПервичнаяЗаписьРегистра, ИзмененнаяЗаписьРегистра) Экспорт + + Если ТипЗнч(ИзмененнаяЗаписьРегистра.Ссылка) <> Тип("ДокументСсылка.ЭлектроннаяТранспортнаяНакладная") + И ТипЗнч(ИзмененнаяЗаписьРегистра.Ссылка) <> Тип("ДокументСсылка.ЭлектронныйПутевойЛист") Тогда + Возврат Ложь; + КонецЕсли; + + ТекущийШагИзменился = ПервичнаяЗаписьРегистра.ТекущийШаг <> ИзмененнаяЗаписьРегистра.ТекущийШаг + Или ПервичнаяЗаписьРегистра.ТекущийШагВыполнен <> ИзмененнаяЗаписьРегистра.ТекущийШагВыполнен; + + ШагиТребующиеПросмотрМП = ШагиТребующиеПросмотрМП(); + ЭтотШагТребуетРасчетаПросмотра = + ШагиТребующиеПросмотрМП.Найти(ИзмененнаяЗаписьРегистра.ТекущийШаг) <> Неопределено + И ИзмененнаяЗаписьРегистра.ТекущийШагВыполнен; + + НужноДобавитьДанныеМП = ТекущийШагИзменился Или ЭтотШагТребуетРасчетаПросмотра; + + Возврат НужноДобавитьДанныеМП + +КонецФункции + +// Возвращает данные мобильного приложения для записи в реестр ЭПД. +// +// Параметры: +// КоллекцияЗаписейРегистра - Произвольный - Коллекция с данными регистра и возможностью изменения. См. ОбменСГИСЭПДКлиентСервер.НоваяСтруктураДляРеестраЭПД. +// ЗаписьИзФормы - Булево - Запись документа из формы означает прочтение сообщения от МП. +// СоответствиеЭлектронныхДокументов - Неопределено, Соответствие из ДокументСсылка - Соответствие электронных документов и документов учета. +// Обязательно при записи новых документов, т.к. в этом случае записей в регистре ОбъектыУчетаДокументовЭДО еще нет. +// +Процедура ДобавитьДанныеМобильногоПриложенияДляЗаписиВРеестр(КоллекцияЗаписейРегистра, ЗаписьИзФормы, + СоответствиеЭлектронныхДокументов = Неопределено) Экспорт + + Если КоллекцияЗаписейРегистра.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + ТаблицаДоступныхВзаимодействий = Новый ТаблицаЗначений; + ОписаниеТиповДокумент = Новый ОписаниеТипов("ДокументСсылка.ЭлектроннаяТранспортнаяНакладная, ДокументСсылка.ЭлектронныйПутевойЛист"); + ОписаниеТиповЭлектронныйДокумент = Новый ОписаниеТипов("ДокументСсылка.ЭлектронныйДокументВходящийЭДО, ДокументСсылка.ЭлектронныйДокументИсходящийЭДО"); + ТаблицаДоступныхВзаимодействий.Колонки.Добавить("Документ", ОписаниеТиповДокумент); + ТаблицаДоступныхВзаимодействий.Колонки.Добавить("ЭлектронныйДокумент", ОписаниеТиповЭлектронныйДокумент); + ТаблицаДоступныхВзаимодействий.Колонки.Добавить("ВидВзаимодействия", Новый ОписаниеТипов("ПеречислениеСсылка.ТипыВзаимодействияМПЭПД")); + + // СоответствиеЭлектронныхДокументов передается при записи новых документов. + ЗапросСОтборомПоЭлектронномуДокументу = СоответствиеЭлектронныхДокументов <> Неопределено; + ЭтоНовыйДокумент = СоответствиеЭлектронныхДокументов <> Неопределено; + МожноРассчитатьДанныеОПросмотреМП = Ложь; + ШагиТребующиеПросмотрМП = ШагиТребующиеПросмотрМП(); + + // Подготовка таблицы доступных взаимодействий. + Для Каждого ЗаписьРегистра Из КоллекцияЗаписейРегистра Цикл + Документ = ЗаписьРегистра.Ссылка; + РольУчастника = ЗаписьРегистра.РольУчастника; + + Если Не МожноРассчитатьДанныеОПросмотреМП + И ШагиТребующиеПросмотрМП.Найти(ЗаписьРегистра.ТекущийШаг) <> Неопределено + И ЗаписьРегистра.ТекущийШагВыполнен Тогда + МожноРассчитатьДанныеОПросмотреМП = Истина; + КонецЕсли; + + СоответствиеТитуловИШагов = ОбменСГИСЭПДКлиентСервер.СоответствиеТитуловИШагов(Документ); + СоответствиеТитуловИШагов = СервисВзаимодействияМПЭПДКлиентСервер.ПеревернутьСоответствие( + СоответствиеТитуловИШагов); + + Титул = СоответствиеТитуловИШагов.Получить(ЗаписьРегистра.ТекущийШаг); + ИндексРаботыПоТитулу = СервисВзаимодействияМПЭПДКлиентСервер.ИндексРаботыПоТитулу(Титул); + ИндексРаботыДоступен = СервисВзаимодействияМПЭПДКлиентСервер.ИндексРаботыДоступенДляРолиУчастника(Документ, + РольУчастника, ИндексРаботыПоТитулу); + + Если ТипЗнч(Документ) = Тип("ДокументСсылка.ЭлектроннаяТранспортнаяНакладная") Тогда + МассивДоступныхИндексов = СервисВзаимодействияМПЭПДКлиентСервер.МассивДоступныхИндексовРаботПоРолиУчастника( + Документ, РольУчастника); + ПоТитуламМогутБытьВзаимодействия = ИндексРаботыДоступен + Или Титул = Перечисления.ТипыЭлементовРегламентаЭДО.ЭТрН_Титул7 + Или Титул = Перечисления.ТипыЭлементовРегламентаЭДО.ЭТрН_ДопТитул7 + Или Титул = Перечисления.ТипыЭлементовРегламентаЭДО.ЭТрН_Титул8 + Или Титул = Перечисления.ТипыЭлементовРегламентаЭДО.ЭТрН_ДопТитул8; + Если Не ЭтоНовыйДокумент + И (МассивДоступныхИндексов.Количество() = 0 Или Не ПоТитуламМогутБытьВзаимодействия) Тогда + Продолжить; + КонецЕсли; + Иначе + Если Не ИндексРаботыДоступен И Не ЭтоНовыйДокумент Тогда + Продолжить; + КонецЕсли; + КонецЕсли; + + Если ЭтоНовыйДокумент Тогда + МассивДоступныхВидовВзаимодействия = Новый Массив; + МассивДоступныхВидовВзаимодействия.Добавить(Перечисления.ТипыВзаимодействияМПЭПД.ПривязкаВодителя); + МассивДоступныхВидовВзаимодействия.Добавить(Перечисления.ТипыВзаимодействияМПЭПД.ОтвязкаВодителя); + МассивДоступныхВидовВзаимодействия.Добавить(Перечисления.ТипыВзаимодействияМПЭПД.ПривязкаМедработникаДоРейса); + МассивДоступныхВидовВзаимодействия.Добавить(Перечисления.ТипыВзаимодействияМПЭПД.ОтвязкаМедработникаДоРейса); + МассивДоступныхВидовВзаимодействия.Добавить(Перечисления.ТипыВзаимодействияМПЭПД.ПривязкаМеханика); + МассивДоступныхВидовВзаимодействия.Добавить(Перечисления.ТипыВзаимодействияМПЭПД.ОтвязкаМеханика); + МассивДоступныхВидовВзаимодействия.Добавить(Перечисления.ТипыВзаимодействияМПЭПД.ПривязкаОтветственногоЗаОдометрДоРейса); + МассивДоступныхВидовВзаимодействия.Добавить(Перечисления.ТипыВзаимодействияМПЭПД.ОтвязкаОтветственногоЗаОдометрДоРейса); + МассивДоступныхВидовВзаимодействия.Добавить(Перечисления.ТипыВзаимодействияМПЭПД.ПривязкаОтветственногоЗаОдометрПослеРейса); + МассивДоступныхВидовВзаимодействия.Добавить(Перечисления.ТипыВзаимодействияМПЭПД.ОтвязкаОтветственногоЗаОдометрПослеРейса); + МассивДоступныхВидовВзаимодействия.Добавить(Перечисления.ТипыВзаимодействияМПЭПД.ПривязкаМедработникаПослеРейса); + МассивДоступныхВидовВзаимодействия.Добавить(Перечисления.ТипыВзаимодействияМПЭПД.ОтвязкаМедработникаПослеРейса); + МассивДоступныхВидовВзаимодействия.Добавить(Перечисления.ТипыВзаимодействияМПЭПД.Сообщение); + Иначе + МассивДоступныхВидовВзаимодействия = + СервисВзаимодействияМПЭПДКлиентСервер.МассивДоступныхВидовВзаимодействияПоТитулу(Титул); + КонецЕсли; + + Для Каждого ВидВзаимодействия Из МассивДоступныхВидовВзаимодействия Цикл + НоваяСтрока = ТаблицаДоступныхВзаимодействий.Добавить(); + НоваяСтрока.Документ = Документ; + НоваяСтрока.ВидВзаимодействия = ВидВзаимодействия; + Если ЗапросСОтборомПоЭлектронномуДокументу Тогда + НоваяСтрока.ЭлектронныйДокумент = СоответствиеЭлектронныхДокументов[Документ]; + КонецЕсли; + КонецЦикла; + КонецЦикла; + + Если ТаблицаДоступныхВзаимодействий.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + // Формирование запроса. + Если ЗапросСОтборомПоЭлектронномуДокументу Тогда + СтруктураЗапроса = ТекстИИндексЗапросаСообщенийМП_ОтборПоЭлектронномуДокументу(); + ТекстЗапроса = СтруктураЗапроса.ТекстЗапроса; + ИндексВыборкиДокументов = СтруктураЗапроса.ИндексРезультата; + Иначе + СтруктураЗапроса = ТекстИИндексЗапросаСообщенийМП_ОтборПоОбъектамУчета(); + ТекстЗапроса = СтруктураЗапроса.ТекстЗапроса; + ИндексВыборкиДокументов = СтруктураЗапроса.ИндексРезультата; + КонецЕсли; + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("ТаблицаДоступныхВзаимодействий", ТаблицаДоступныхВзаимодействий); + Запрос.Текст = ТекстЗапроса; + + Если МожноРассчитатьДанныеОПросмотреМП Тогда + СтруктураЗапроса = ТекстИИндексЗапросаДанныхОПросмотреМП(); + РазделительПакетаЗапросов = ОбщегоНазначения.РазделительПакетаЗапросов(); + Запрос.Текст = Запрос.Текст + РазделительПакетаЗапросов + СтруктураЗапроса.ТекстЗапроса; + ИндексДанныхОПросмотреМП = ИндексВыборкиДокументов + СтруктураЗапроса.ИндексРезультата + 1; + КонецЕсли; + + // Получение результата запроса. + Если МожноРассчитатьДанныеОПросмотреМП Тогда + МассивРезультатов = Запрос.ВыполнитьПакет(); + ВыборкаДокументов = МассивРезультатов[ИндексВыборкиДокументов].Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); + ВыборкаДанныхОПросмотреДокумента = МассивРезультатов[ИндексДанныхОПросмотреМП].Выбрать(); + Иначе + ВыборкаДокументов = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); + КонецЕсли; + + СтруктураПоискаПоДокументу = Новый Структура; + СтруктураПоискаПоДокументу.Вставить("Документ"); + + СоответствиеТитуловТипамМП = СервисВзаимодействияМПЭПДКлиентСервер.СоответствиеТитуловТипамМП(); + + // Добавление в записи регистра данных МП, доступных для текущего титула (ТаблицаДоступныхВзаимодействий). + Для Каждого ЗаписьРегистра Из КоллекцияЗаписейРегистра Цикл + ВыборкаДокументов.Сбросить(); + ТитулЗаписиРегистра = ТитулТекущегоШагаДокумента(ЗаписьРегистра.Ссылка, ЗаписьРегистра.ТекущийШаг); + Документ = ЗаписьРегистра.Ссылка; + + МожетБытьДобавленПризнакОжиданияПросмотраМП = + МожноРассчитатьДанныеОПросмотреМП + И ШагиТребующиеПросмотрМП.Найти(ЗаписьРегистра.ТекущийШаг) <> Неопределено + И ЗаписьРегистра.ТекущийШагВыполнен; + + СтруктураПоискаПоДокументу.Документ = Документ; + Если Не ВыборкаДокументов.НайтиСледующий(СтруктураПоискаПоДокументу) Тогда + // Нет доступных взаимодействий по титулу. + УбратьДанныеМПИзЗаписиРегистра(ЗаписьРегистра); + Продолжить; + КонецЕсли; + + ВыборкаДанныхПоДокументу = ВыборкаДокументов.Выбрать(); + + // Добавление документов в КЭШ взаимодействия с МП. + Если ЭтоНовыйДокумент Тогда + ПриЗаписиРеестраДобавитьДокументВКэшВзаимодействияМПЭПД(Документ, ВыборкаДанныхПоДокументу); + КонецЕсли; + + Пока ВыборкаДанныхПоДокументу.Следующий() Цикл + ЭтоСообщение = СервисВзаимодействияМПЭПДКлиентСервер.ЭтоТипВзаимодействияСообщение( + ВыборкаДанныхПоДокументу.ВидСообщения); + Если Не ЭтоСообщение Тогда + Прервать; + КонецЕсли; + + Если ЗначениеЗаполнено(ВыборкаДанныхПоДокументу.ДанныеСообщения) Тогда + СтруктураПризнаков = ТипИПризнакПринятоСообщенияМП(ВыборкаДанныхПоДокументу.ДанныеСообщения); + Тип = СтруктураПризнаков.Тип; + ТитулПринят = СтруктураПризнаков.Принято; + ЭтоТипСообщенияОбОтправкеТитула = СтруктураПризнаков.ЭтоТипСообщенияОбОтправкеТитула; + + ТитулВСообщении = СоответствиеТитуловТипамМП.Получить(Тип); + Если ТитулВСообщении = ТитулЗаписиРегистра Тогда + Прервать; + КонецЕсли; + КонецЕсли; + + ЭтоСообщение = Ложь; + КонецЦикла; + + ЭтоПривязкаДокумента = + СервисВзаимодействияМПЭПДКлиентСервер.ЭтоПривязкаДокумента(ВыборкаДанныхПоДокументу.ВидСообщения); + + Если Не ЭтоПривязкаДокумента И Не ЭтоСообщение Тогда + // Обработка отвязки документа от МП. + УбратьДанныеМПИзЗаписиРегистра(ЗаписьРегистра, МожетБытьДобавленПризнакОжиданияПросмотраМП); + + ИначеЕсли ЭтоСообщение Тогда + // Обработка событий с сообщениями и непосредственно сообщений (уведомлений). + ЗаписьРегистра.МобильноеПриложение = ВыборкаДанныхПоДокументу.ИдентификаторМП; + ЗаписьРегистра.ИдентификаторЗаписиМП = ВыборкаДанныхПоДокументу.ИдентификаторЗаписиМП; + ЗаписьРегистра.НаименованиеМП = ВыборкаДанныхПоДокументу.НаименованиеМП; + + Если ЗаписьРегистра.ТекущийШагВыполнен Тогда + ЗаписьРегистра.ТекущийШагМП = ""; + ИначеЕсли ЭтоТипСообщенияОбОтправкеТитула Тогда + ЗаписьРегистра.ТекущийШагМП = Тип; + ИначеЕсли Тип <> Неопределено Тогда + ЗаписьРегистра.ТекущийШагМП = Тип + ?(ТитулПринят = Ложь, "_reject", ""); + КонецЕсли; + + Иначе + // Обработка взаимодействий без сообщений (например вызываных из БЭД или событий привзяки). + ЗаписьРегистра.МобильноеПриложение = ВыборкаДанныхПоДокументу.ИдентификаторМП; + ЗаписьРегистра.ИдентификаторЗаписиМП = ВыборкаДанныхПоДокументу.ИдентификаторЗаписиМП; + ЗаписьРегистра.НаименованиеМП = ВыборкаДанныхПоДокументу.НаименованиеМП; + КонецЕсли; + + Если МожетБытьДобавленПризнакОжиданияПросмотраМП Тогда + ПриЗаписиРеестраУстановитьПризнакОжиданияПросмотраМП(ЗаписьРегистра, ВыборкаДанныхПоДокументу, + ВыборкаДанныхОПросмотреДокумента, СтруктураПоискаПоДокументу); + КонецЕсли; + + // Отметка о том, что данные сообщения МП просмотрены на форме. + Если ЗаписьИзФормы Тогда + ЗаписьРегистра.ТекущийШагМП = ""; + КонецЕсли; + + КонецЦикла; // По коллекции записей регистра + +КонецПроцедуры + +// Возвращает список подключенных устройств. +// +// Параметры: +// Отборы - Неопределено, Структура - Отборы. +// ТолькоАктивные - Булево - Возвращаются только активные МП. +// ВернутьМассив - Булево - Признак возвращения массива, в ином случае вернется таблица. +// +// Возвращаемое значение: +// ТаблицаЗначений - Список подключенных МП: +// * ИдентификаторЭДО - Строка +// * ИдентификаторМП - Строка +// * Идентификатор - Строка +// * Состояние - ПеречислениеСсылка.СостояниеМПЭПД +// * ИндексКартинки - Число +// * Фамилия - Строка +// * Имя - Строка +// * Отчество - Строка +// * ИНН - Строка +// * СНИЛС - Строка +// * СерияВУ - Строка +// * НомерВУ - Строка +// * ДатаВыдачиВУ - Дата +// * Наименование - Строка +// * ВидПодписи - ПеречислениеСсылка.ВидыПодписиМПЭПД +// * Телефоны - Строка +// * МЧД - СправочникСсылка.МашиночитаемыеДоверенностиОрганизаций +// * Фото - ХранилищеЗначения +// * Роль - Число +// * ВидыДокументов - Число +// * ПредставлениеРоли - Строка +// * Организация - ОпределяемыйТип.Организация +// +//@skip-check module-query-syntax +//@skip-check bsl-ql-hub +//@skip-check doc-comment-description-ends-on-dot +Функция СписокПодключенныхМП(Отборы = Неопределено, ТолькоАктивные = Ложь) Экспорт + + МетаданныеПеречисления = Перечисления.СостояниеМПЭПД.ПустаяСсылка().Метаданные(); + ПервоеЗначение = Истина; + МассивЧастейСостояний = Новый Массив; + Для Каждого ЗначениеПеречисления Из МетаданныеПеречисления.ЗначенияПеречисления Цикл + СостояниеТекстом = ЗначениеПеречисления.Имя; + Состояние = Перечисления.СостояниеМПЭПД[СостояниеТекстом]; + ИндексКартинки = Перечисления.СостояниеМПЭПД.ПолучитьИндексКартинки(Состояние); + Если ПервоеЗначение Тогда + Шаблон = "ВЫБРАТЬ + |ЗНАЧЕНИЕ(Перечисление.СостояниеМПЭПД.%1) КАК Состояние, + |%2 КАК ИндексКартинки + |ПОМЕСТИТЬ ВТ_ИндексыКартинокСостояний"; + ПервоеЗначение = Ложь; + Иначе + Шаблон = "ВЫБРАТЬ + |ЗНАЧЕНИЕ(Перечисление.СостояниеМПЭПД.%1) КАК Состояние, + |%2 КАК ИндексКартинки"; + КонецЕсли; + ТекстВставки = СтрШаблон(Шаблон, СостояниеТекстом, ИндексКартинки); + МассивЧастейСостояний.Добавить(ТекстВставки); + КонецЦикла; + + ПредставленияРолейМП = СервисВзаимодействияМПЭПДКлиентСервер.ПредставленияРолейМП(); + МассивЧастейПредставленийРолей = Новый Массив; + ПервоеЗначение = Истина; + Для Каждого КиЗ Из ПредставленияРолейМП Цикл + Если ПервоеЗначение Тогда + ШаблонПредставленияРолей = "ВЫБРАТЬ + |%1 КАК ЧисловоеЗначение, + |""%2"" КАК Представление + |ПОМЕСТИТЬ ВТ_ПредставленияРолей"; + ПервоеЗначение = Ложь; + Иначе + ШаблонПредставленияРолей = "ВЫБРАТЬ + |%1 КАК ЧисловоеЗначение, + |""%2"" КАК Представление"; + КонецЕсли; + ТекстВставки = СтрШаблон(ШаблонПредставленияРолей, КиЗ.Ключ, КиЗ.Значение); + МассивЧастейПредставленийРолей.Добавить(ТекстВставки); + КонецЦикла; + + СтрокаОбъединения = " + |ОБЪЕДИНИТЬ ВСЕ + |"; + ТекстНачалаЗапроса = СтрСоединить(МассивЧастейСостояний, СтрокаОбъединения); + + ТекстНачалаЗапроса = ТекстНачалаЗапроса + + "; + | + |//////////////////////////////////////////////////////////////////////////////// + |" + СтрСоединить(МассивЧастейПредставленийРолей, СтрокаОбъединения); + + ТекстЗапроса = ТекстНачалаЗапроса + + "; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ РАЗРЕШЕННЫЕ + | НастройкиВзаимодействияМПЭПД.ИдентификаторЭДО КАК ИдентификаторЭДО, + | НастройкиВзаимодействияМПЭПД.Организация КАК Организация + |ПОМЕСТИТЬ ВсеУчетныеЗаписи + |ИЗ + | РегистрСведений.НастройкиВзаимодействияМПЭПД КАК НастройкиВзаимодействияМПЭПД + |{ГДЕ + | НастройкиВзаимодействияМПЭПД.Организация, + | НастройкиВзаимодействияМПЭПД.ИдентификаторЭДО} + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ПодключенныеМПЭПД.ИдентификаторЭДО КАК ИдентификаторЭДО, + | ПодключенныеМПЭПД.ИдентификаторМП КАК ИдентификаторМП, + | ПодключенныеМПЭПД.Идентификатор КАК Идентификатор, + | ПодключенныеМПЭПД.Состояние КАК Состояние, + | ЕСТЬNULL(ВТ_ИндексыКартинокСостояний.ИндексКартинки, 1) КАК ИндексКартинки, + | ПодключенныеМПЭПД.Фамилия КАК Фамилия, + | ПодключенныеМПЭПД.Имя КАК Имя, + | ПодключенныеМПЭПД.Отчество КАК Отчество, + | ПодключенныеМПЭПД.ИНН КАК ИНН, + | ПодключенныеМПЭПД.СНИЛС КАК СНИЛС, + | ПодключенныеМПЭПД.СерияВУ КАК СерияВУ, + | ПодключенныеМПЭПД.НомерВУ КАК НомерВУ, + | ПодключенныеМПЭПД.ДатаВыдачиВУ КАК ДатаВыдачиВУ, + | ПодключенныеМПЭПД.Наименование КАК Наименование, + | ПодключенныеМПЭПД.ВидПодписи КАК ВидПодписи, + | ПодключенныеМПЭПД.Телефоны КАК Телефоны, + | ПодключенныеМПЭПД.МЧД КАК МЧД, + | ПодключенныеМПЭПД.Фото КАК Фото, + | ПодключенныеМПЭПД.Роль КАК Роль, + | ПодключенныеМПЭПД.ВидыДокументов КАК ВидыДокументов, + | ВТ_ПредставленияРолей.Представление КАК ПредставлениеРоли, + | ВсеУчетныеЗаписи.Организация КАК Организация + |ИЗ + | РегистрСведений.ПодключенныеМПЭПД КАК ПодключенныеМПЭПД + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВсеУчетныеЗаписи КАК ВсеУчетныеЗаписи + | ПО ПодключенныеМПЭПД.ИдентификаторЭДО = ВсеУчетныеЗаписи.ИдентификаторЭДО + | И НЕ ПодключенныеМПЭПД.Удален + | ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ИндексыКартинокСостояний КАК ВТ_ИндексыКартинокСостояний + | ПО ПодключенныеМПЭПД.Состояние = ВТ_ИндексыКартинокСостояний.Состояние + | ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ПредставленияРолей КАК ВТ_ПредставленияРолей + | ПО ПодключенныеМПЭПД.Роль = ВТ_ПредставленияРолей.ЧисловоеЗначение + |{ГДЕ + | ПодключенныеМПЭПД.ИНН, + | ПодключенныеМПЭПД.СНИЛС, + | ПодключенныеМПЭПД.СерияВУ, + | ПодключенныеМПЭПД.НомерВУ, + | ПодключенныеМПЭПД.ДатаВыдачиВУ, + | ПодключенныеМПЭПД.Телефоны, + | ПодключенныеМПЭПД.ИдентификаторМП}"; + + НовыйЗапрос = Новый ПостроительЗапроса; + НовыйЗапрос.Текст = ТекстЗапроса; + НовыйЗапрос.ЗаполнитьНастройки(); + + Счетчик = 1; + Если Отборы <> Неопределено Тогда + Для Каждого КлючЗначение Из Отборы Цикл + Если ТипЗнч(КлючЗначение.Значение) = Тип("СписокЗначений") Тогда + НовыйОтбор = НовыйЗапрос.Отбор.Добавить(КлючЗначение.Ключ, "П" + Счетчик); + НовыйОтбор.ВидСравнения = ВидСравнения.ВСписке; + НовыйОтбор.Значение = КлючЗначение.Значение; + НовыйОтбор.Использование = Истина; + Иначе + НовыйОтбор = НовыйЗапрос.Отбор.Добавить(КлючЗначение.Ключ, "П" + Счетчик); + НовыйОтбор.ВидСравнения = ВидСравнения.Равно; + НовыйОтбор.Значение = КлючЗначение.Значение; + НовыйОтбор.Использование = Истина; + КонецЕсли; + Счетчик = Счетчик + 1; + КонецЦикла; + КонецЕсли; + + Если ТолькоАктивные Тогда + СписокСостояний = Новый СписокЗначений; + СписокСостояний.Добавить(Перечисления.СостояниеМПЭПД.Подключен); + НовыйОтбор = НовыйЗапрос.Отбор.Добавить("Состояние", "П" + Счетчик); + НовыйОтбор.ВидСравнения = ВидСравнения.ВСписке; + НовыйОтбор.Значение = СписокСостояний; + НовыйОтбор.Использование = Истина; + КонецЕсли; + + Запрос = НовыйЗапрос.ПолучитьЗапрос(); + РезультатТаблица = Запрос.Выполнить().Выгрузить(); + + Возврат РезультатТаблица; + +КонецФункции + +// Осуществляет поиск МП по идентификатору или ключевым полям. При поиске по ключевым полям +// запись ищется либо по ИНН, либо полям ВУ, либо по ФИО. +// +// Параметры: +// ИдентификаторЭДО - Строка - Идентификатор ЭДО +// Роль - Число - Числовое представление роли пользователя +// Идентификатор - Неопределено, Строка - Если Неопределено тогда поиск осуществляется по "Идентификатор" +// СтруктураКлючевыхПолей - Неопределено, Структура - Если Неопределено тогда поиск осуществляется по "СтруктураКлючевыхПолей" +// +// Возвращаемое значение: +// Неопределено, Структура - Если запись найдена возвращается структура: +// * ИдентификаторЭДО - Строка +// * ИдентификаторМП - Строка +// * Идентификатор - Строка +// * Состояние - ПеречислениеСсылка.СостояниеМПЭПД +// * ИндексКартинки - Число +// * Фамилия - Строка +// * Имя - Строка +// * Отчество - Строка +// * ИНН - Строка +// * СНИЛС - Строка +// * СерияВУ - Строка +// * НомерВУ - Строка +// * ДатаВыдачиВУ - Дата +// * Наименование - Строка +// * ВидПодписи - ПеречислениеСсылка.ВидыПодписиМПЭПД +// * Телефоны - Строка +// * МЧД - СправочникСсылка.МашиночитаемыеДоверенностиОрганизаций +// * Фото - ХранилищеЗначения +// * Роль - Число +// * ВидыДокументов - Число +// * ПредставлениеРоли - Строка +// * Организация - ОпределяемыйТип.Организация +// +//@skip-check module-query-syntax +//@skip-check bsl-ql-hub +//@skip-check doc-comment-description-ends-on-dot +Функция СтруктураДанныхМП(ИдентификаторЭДО, Роль, Идентификатор = Неопределено, + СтруктураКлючевыхПолей = Неопределено) Экспорт + + ПредставленияРолейМП = СервисВзаимодействияМПЭПДКлиентСервер.ПредставленияРолейМП(); + МассивЧастейПредставленийРолей = Новый Массив; + ПервоеЗначение = Истина; + Для Каждого КиЗ Из ПредставленияРолейМП Цикл + Если ПервоеЗначение Тогда + + ШаблонПредставленияРолей = "ВЫБРАТЬ + |%1 КАК ЧисловоеЗначение, + |""%2"" КАК Представление + |ПОМЕСТИТЬ ВТ_ПредставленияРолей"; + ПервоеЗначение = Ложь; + Иначе + ШаблонПредставленияРолей = "ВЫБРАТЬ + |%1 КАК ЧисловоеЗначение, + |""%2"" КАК Представление"; + КонецЕсли; + ТекстВставки = СтрШаблон(ШаблонПредставленияРолей, КиЗ.Ключ, КиЗ.Значение); + МассивЧастейПредставленийРолей.Добавить(ТекстВставки); + КонецЦикла; + СтрокаОбъединения = " + |ОБЪЕДИНИТЬ ВСЕ + |"; + ТекстЗапросаРолей = СтрСоединить(МассивЧастейПредставленийРолей, СтрокаОбъединения); + + РазделительПакетаЗапросов = ОбщегоНазначения.РазделительПакетаЗапросов(); + + ТекстЗапроса = ТекстЗапросаРолей + РазделительПакетаЗапросов + + "ВЫБРАТЬ РАЗРЕШЕННЫЕ + | НастройкиВзаимодействияМПЭПД.ИдентификаторЭДО КАК ИдентификаторЭДО, + | НастройкиВзаимодействияМПЭПД.Организация КАК Организация + |ПОМЕСТИТЬ ВТ_УчетныеЗаписи + |ИЗ + | РегистрСведений.НастройкиВзаимодействияМПЭПД КАК НастройкиВзаимодействияМПЭПД + |ГДЕ + | НастройкиВзаимодействияМПЭПД.ИдентификаторЭДО = &ИдентификаторЭДО + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ПодключенныеМПЭПД.ИдентификаторЭДО КАК ИдентификаторЭДО, + | ПодключенныеМПЭПД.ИдентификаторМП КАК ИдентификаторМП, + | ПодключенныеМПЭПД.Идентификатор КАК Идентификатор, + | ПодключенныеМПЭПД.Состояние КАК Состояние, + | ПодключенныеМПЭПД.Фамилия КАК Фамилия, + | ПодключенныеМПЭПД.Имя КАК Имя, + | ПодключенныеМПЭПД.Отчество КАК Отчество, + | ПодключенныеМПЭПД.ИНН КАК ИНН, + | ПодключенныеМПЭПД.СНИЛС КАК СНИЛС, + | ПодключенныеМПЭПД.СерияВУ КАК СерияВУ, + | ПодключенныеМПЭПД.НомерВУ КАК НомерВУ, + | ПодключенныеМПЭПД.ДатаВыдачиВУ КАК ДатаВыдачиВУ, + | ПодключенныеМПЭПД.Наименование КАК Наименование, + | ПодключенныеМПЭПД.ВидПодписи КАК ВидПодписи, + | ПодключенныеМПЭПД.Телефоны КАК Телефоны, + | ПодключенныеМПЭПД.МЧД КАК МЧД, + | ПодключенныеМПЭПД.Фото КАК Фото, + | ПодключенныеМПЭПД.Роль КАК Роль, + | ПодключенныеМПЭПД.ВидыДокументов КАК ВидыДокументов, + | ВТ_ПредставленияРолей.Представление КАК ПредставлениеРоли, + | ВТ_УчетныеЗаписи.Организация КАК Организация + |ИЗ + | РегистрСведений.ПодключенныеМПЭПД КАК ПодключенныеМПЭПД + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_УчетныеЗаписи КАК ВТ_УчетныеЗаписи + | ПО ПодключенныеМПЭПД.ИдентификаторЭДО = ВТ_УчетныеЗаписи.ИдентификаторЭДО + | ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ПредставленияРолей КАК ВТ_ПредставленияРолей + | ПО ПодключенныеМПЭПД.Роль = ВТ_ПредставленияРолей.ЧисловоеЗначение + |ГДЕ + | &ТекстУсловийПоиска"; + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("ИдентификаторЭДО", ИдентификаторЭДО); + + Если ЗначениеЗаполнено(Идентификатор) Тогда + + Запрос.УстановитьПараметр("Идентификатор", Идентификатор); + ТекстУсловийПоиска = "Идентификатор = &Идентификатор"; + + Иначе + МассивТекстовУсловий = Новый Массив; + + РазделительУсловийИ = " + | И "; + РазделительУсловийИли = " + | ИЛИ "; + + // Условия поиска по ФИО + МассивУсловий = Новый Массив; + ТекстУсловияЗапроса = СформироватьТекстУсловияЗапроса(СтруктураКлючевыхПолей, "Фамилия", Запрос); + СервисВзаимодействияМПЭПДКлиентСервер.ДобавитьНеПустоеЗначениеВМассив(МассивУсловий, ТекстУсловияЗапроса); + ТекстУсловияЗапроса = СформироватьТекстУсловияЗапроса(СтруктураКлючевыхПолей, "Имя", Запрос); + СервисВзаимодействияМПЭПДКлиентСервер.ДобавитьНеПустоеЗначениеВМассив(МассивУсловий, ТекстУсловияЗапроса); + ТекстУсловияЗапроса = СформироватьТекстУсловияЗапроса(СтруктураКлючевыхПолей, "Отчество", Запрос); + СервисВзаимодействияМПЭПДКлиентСервер.ДобавитьНеПустоеЗначениеВМассив(МассивУсловий, ТекстУсловияЗапроса); + + ТекстУсловияЗапроса = СтрШаблон("(%1)", СтрСоединить(МассивУсловий, РазделительУсловийИ)); + СервисВзаимодействияМПЭПДКлиентСервер.ДобавитьНеПустоеЗначениеВМассив(МассивТекстовУсловий, ТекстУсловияЗапроса); + + // Условия поиска по ВУ + МассивУсловий = Новый Массив; + ТекстУсловияЗапроса = СформироватьТекстУсловияЗапроса(СтруктураКлючевыхПолей, "СерияВУ", Запрос); + СервисВзаимодействияМПЭПДКлиентСервер.ДобавитьНеПустоеЗначениеВМассив(МассивУсловий, ТекстУсловияЗапроса); + ТекстУсловияЗапроса = СформироватьТекстУсловияЗапроса(СтруктураКлючевыхПолей, "НомерВУ", Запрос); + СервисВзаимодействияМПЭПДКлиентСервер.ДобавитьНеПустоеЗначениеВМассив(МассивУсловий, ТекстУсловияЗапроса); + ТекстУсловияЗапроса = СформироватьТекстУсловияЗапроса(СтруктураКлючевыхПолей, "ДатаВыдачиВУ", Запрос); + СервисВзаимодействияМПЭПДКлиентСервер.ДобавитьНеПустоеЗначениеВМассив(МассивУсловий, ТекстУсловияЗапроса); + + ТекстУсловияЗапроса = СтрШаблон("(%1)", СтрСоединить(МассивУсловий, РазделительУсловийИ)); + СервисВзаимодействияМПЭПДКлиентСервер.ДобавитьНеПустоеЗначениеВМассив(МассивТекстовУсловий, ТекстУсловияЗапроса); + + // Прочие условия + МассивИсключенныхПолей = Новый Массив; + МассивИсключенныхПолей.Добавить("Фамилия"); + МассивИсключенныхПолей.Добавить("Имя"); + МассивИсключенныхПолей.Добавить("Отчество"); + МассивИсключенныхПолей.Добавить("СерияВУ"); + МассивИсключенныхПолей.Добавить("НомерВУ"); + МассивИсключенныхПолей.Добавить("ДатаВыдачиВУ"); + + Для Каждого КлючЗначение Из СтруктураКлючевыхПолей Цикл + Если МассивИсключенныхПолей.Найти(КлючЗначение.Ключ) <> Неопределено Тогда + Продолжить; + КонецЕсли; + + ТекстУсловияЗапроса = СформироватьТекстУсловияЗапроса(СтруктураКлючевыхПолей, КлючЗначение.Ключ, Запрос); + СервисВзаимодействияМПЭПДКлиентСервер.ДобавитьНеПустоеЗначениеВМассив(МассивТекстовУсловий, ТекстУсловияЗапроса); + КонецЦикла; + + // Выполнение запроса, получение результата + Если МассивТекстовУсловий.Количество() = 0 Тогда + Возврат Неопределено; + КонецЕсли; + + МассивВключающихРолей = ОбменСГИСЭПДКлиентСервер.ВсеВключающиеРоли(Роль, 5); + Запрос.УстановитьПараметр("МассивВключающихРолей", МассивВключающихРолей); + ТекстУсловийПоиска = СтрШаблон("ПодключенныеМПЭПД.Роль В(&МассивВключающихРолей) И (%1)", + СтрСоединить(МассивТекстовУсловий, РазделительУсловийИли)); + КонецЕсли; + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТекстУсловийПоиска", ТекстУсловийПоиска); + Запрос.Текст = ТекстЗапроса; + + ТаблицаУстройств = Запрос.Выполнить().Выгрузить(); + Если ТаблицаУстройств.Количество() = 0 Тогда + Возврат Неопределено; + КонецЕсли; + + Результат = ОбщегоНазначения.СтрокаТаблицыЗначенийВСтруктуру(ТаблицаУстройств[0]); + //@skip-check constructor-function-return-section + Возврат Результат; + +КонецФункции + +Процедура УдалитьЗаписьПодключенныхМПЭПД(ИдентификаторЭДО, Идентификатор) Экспорт + + ПараметрыЗаписи = РегистрыСведений.ПодключенныеМПЭПД.ПараметрыЗаписиРегистра(ИдентификаторЭДО, Идентификатор); + РегистрыСведений.ПодключенныеМПЭПД.УдалитьЗапись(ПараметрыЗаписи); + +КонецПроцедуры + +#КонецОбласти + #Область УчетныеЗаписиЭДО // Возвращает представление учетной записи ЭДО. @@ -1794,6 +2466,14 @@ // Массив кодов, по которым загружаются исходящие документы (по остальным пропускаются). МассивЗагружаемыхКодов = Новый Массив; + + // ЭТрН + МассивЗагружаемыхКодов.Добавить("CarrierInformationAcceptanceCargo"); + МассивЗагружаемыхКодов.Добавить("CarrierInformationDeliveryCargo"); + МассивЗагружаемыхКодов.Добавить("ConsigneeCancellationOfferReject"); + МассивЗагружаемыхКодов.Добавить("CarrierCancellationOfferReject"); + + // ЭПЛ МассивЗагружаемыхКодов.Добавить("BeforeMedicalCheck"); МассивЗагружаемыхКодов.Добавить("UOUMedicalCheck"); МассивЗагружаемыхКодов.Добавить("BeforeTechnicalCheck"); @@ -2113,7 +2793,13 @@ Или ОписаниеСообщения.ТипЭлементаРегламента = Перечисления.ТипыЭлементовРегламентаЭДО.ЭПЛ_Титул3 Или ОписаниеСообщения.ТипЭлементаРегламента = Перечисления.ТипыЭлементовРегламентаЭДО.ЭПЛ_Титул4 Или ОписаниеСообщения.ТипЭлементаРегламента = Перечисления.ТипыЭлементовРегламентаЭДО.ЭПЛ_Титул5 - Или ОписаниеСообщения.ТипЭлементаРегламента = Перечисления.ТипыЭлементовРегламентаЭДО.ЭПЛ_Титул6); + Или ОписаниеСообщения.ТипЭлементаРегламента = Перечисления.ТипыЭлементовРегламентаЭДО.ЭПЛ_Титул6 + + Или ОписаниеСообщения.ТипЭлементаРегламента = Перечисления.ТипыЭлементовРегламентаЭДО.ЭТрН_Титул2 + Или ОписаниеСообщения.ТипЭлементаРегламента = Перечисления.ТипыЭлементовРегламентаЭДО.ЭТрН_Титул4 + Или ОписаниеСообщения.ТипЭлементаРегламента = Перечисления.ТипыЭлементовРегламентаЭДО.ЭТрН_ДопТитул4 + Или ОписаниеСообщения.ТипЭлементаРегламента = Перечисления.ТипыЭлементовРегламентаЭДО.ЭТрН_ОткП + Или ОписаниеСообщения.ТипЭлементаРегламента = Перечисления.ТипыЭлементовРегламентаЭДО.ЭТрН_ОткТ3); Если Не ВозможныИзмененияВДокументеПоСвойствамСообщения Тогда Возврат; @@ -2137,626 +2823,6 @@ #КонецОбласти -#Область ДанныеМобильногоПриложения - -// Возвращает признак необходимости добавления данных МП. -// -// Параметры: -// ПервичнаяЗаписьРегистра - Структура, РегистрСведенийМенеджер.РеестрЭПД - -// ИзмененнаяЗаписьРегистра - Структура, РегистрСведенийМенеджер.РеестрЭПД - -// -// Возвращаемое значение: -// Булево - Признак необходимости добавления данных МП. -// -Функция НужноДобавитьДанныеМП(ПервичнаяЗаписьРегистра, ИзмененнаяЗаписьРегистра) Экспорт - - Если ТипЗнч(ИзмененнаяЗаписьРегистра.Ссылка) <> Тип("ДокументСсылка.ЭлектроннаяТранспортнаяНакладная") - И ТипЗнч(ИзмененнаяЗаписьРегистра.Ссылка) <> Тип("ДокументСсылка.ЭлектронныйПутевойЛист") Тогда - Возврат Ложь; - КонецЕсли; - - ТекущийШагИзменился = ПервичнаяЗаписьРегистра.ТекущийШаг <> ИзмененнаяЗаписьРегистра.ТекущийШаг - Или ПервичнаяЗаписьРегистра.ТекущийШагВыполнен <> ИзмененнаяЗаписьРегистра.ТекущийШагВыполнен; - - ШагиТребующиеПросмотрМП = ШагиТребующиеПросмотрМП(); - ЭтотШагТребуетРасчетаПросмотра = - ШагиТребующиеПросмотрМП.Найти(ИзмененнаяЗаписьРегистра.ТекущийШаг) <> Неопределено - И ИзмененнаяЗаписьРегистра.ТекущийШагВыполнен; - - НужноДобавитьДанныеМП = ТекущийШагИзменился Или ЭтотШагТребуетРасчетаПросмотра; - - Возврат НужноДобавитьДанныеМП - -КонецФункции - -// Возвращает данные мобильного приложения для записи в реестр ЭПД. -// -// Параметры: -// КоллекцияЗаписейРегистра - Произвольный - Коллекция с данными регистра и возможностью изменения. См. ОбменСГИСЭПДКлиентСервер.НоваяСтруктураДляРеестраЭПД. -// ЗаписьИзФормы - Булево - Запись документа из формы означает прочтение сообщения от МП. -// СоответствиеЭлектронныхДокументов - Неопределено, Соответствие из ДокументСсылка - Соответствие электронных документов и документов учета. -// Обязательно при записи новых документов, т.к. в этом случае записей в регистре ОбъектыУчетаДокументовЭДО еще нет. -// -Процедура ДобавитьДанныеМобильногоПриложенияДляЗаписиВРеестр(КоллекцияЗаписейРегистра, ЗаписьИзФормы, - СоответствиеЭлектронныхДокументов = Неопределено) Экспорт - - Если КоллекцияЗаписейРегистра.Количество() = 0 Тогда - Возврат; - КонецЕсли; - - ТаблицаДоступныхВзаимодействий = Новый ТаблицаЗначений; - ОписаниеТиповДокумент = Новый ОписаниеТипов("ДокументСсылка.ЭлектроннаяТранспортнаяНакладная, ДокументСсылка.ЭлектронныйПутевойЛист"); - ОписаниеТиповЭлектронныйДокумент = Новый ОписаниеТипов("ДокументСсылка.ЭлектронныйДокументВходящийЭДО, ДокументСсылка.ЭлектронныйДокументИсходящийЭДО"); - ТаблицаДоступныхВзаимодействий.Колонки.Добавить("Документ", ОписаниеТиповДокумент); - ТаблицаДоступныхВзаимодействий.Колонки.Добавить("ЭлектронныйДокумент", ОписаниеТиповЭлектронныйДокумент); - ТаблицаДоступныхВзаимодействий.Колонки.Добавить("ВидВзаимодействия", Новый ОписаниеТипов("ПеречислениеСсылка.ТипыВзаимодействияМПЭПД")); - - ЗапросСОтборомПоЭлектронномуДокументу = СоответствиеЭлектронныхДокументов <> Неопределено; - МожноРассчитатьДанныеОПросмотреМП = Ложь; - ШагиТребующиеПросмотрМП = ШагиТребующиеПросмотрМП(); - - // Подготовка таблицы доступных взаимодействий. - Для Каждого ЗаписьРегистра Из КоллекцияЗаписейРегистра Цикл - Документ = ЗаписьРегистра.Ссылка; - РольУчастника = ЗаписьРегистра.РольУчастника; - - Если Не МожноРассчитатьДанныеОПросмотреМП - И ШагиТребующиеПросмотрМП.Найти(ЗаписьРегистра.ТекущийШаг) <> Неопределено - И ЗаписьРегистра.ТекущийШагВыполнен Тогда - МожноРассчитатьДанныеОПросмотреМП = Истина; - КонецЕсли; - - СоответствиеТитуловИШагов = ОбменСГИСЭПДКлиентСервер.СоответствиеТитуловИШагов(Документ); - СоответствиеТитуловИШагов = СервисВзаимодействияМПЭПДКлиентСервер.ПеревернутьСоответствие( - СоответствиеТитуловИШагов); - - Титул = СоответствиеТитуловИШагов.Получить(ЗаписьРегистра.ТекущийШаг); - ИндексРаботыПоТитулу = СервисВзаимодействияМПЭПДКлиентСервер.ИндексРаботыПоТитулу(Титул); - ИндексРаботыДоступен = СервисВзаимодействияМПЭПДКлиентСервер.ИндексРаботыДоступенДляРолиУчастника(Документ, - РольУчастника, ИндексРаботыПоТитулу); - - Если ТипЗнч(Документ) = Тип("ДокументСсылка.ЭлектроннаяТранспортнаяНакладная") Тогда - МассивДоступныхИндексов = СервисВзаимодействияМПЭПДКлиентСервер.МассивДоступныхИндексовРаботПоРолиУчастника( - Документ, РольУчастника); - ПоТитуламМогутБытьВзаимодействия = ИндексРаботыДоступен - Или Титул = Перечисления.ТипыЭлементовРегламентаЭДО.ЭТрН_Титул7 - Или Титул = Перечисления.ТипыЭлементовРегламентаЭДО.ЭТрН_ДопТитул7 - Или Титул = Перечисления.ТипыЭлементовРегламентаЭДО.ЭТрН_Титул8 - Или Титул = Перечисления.ТипыЭлементовРегламентаЭДО.ЭТрН_ДопТитул8; - Если МассивДоступныхИндексов.Количество() = 0 Или Не ПоТитуламМогутБытьВзаимодействия Тогда - Продолжить; - КонецЕсли; - Иначе - Если Не ИндексРаботыДоступен Тогда - Продолжить; - КонецЕсли; - КонецЕсли; - - МассивДоступныхВидовВзаимодействия = - СервисВзаимодействияМПЭПДКлиентСервер.МассивДоступныхВидовВзаимодействияПоТитулу(Титул); - Для Каждого ВидВзаимодействия Из МассивДоступныхВидовВзаимодействия Цикл - НоваяСтрока = ТаблицаДоступныхВзаимодействий.Добавить(); - НоваяСтрока.Документ = Документ; - НоваяСтрока.ВидВзаимодействия = ВидВзаимодействия; - Если ЗапросСОтборомПоЭлектронномуДокументу Тогда - НоваяСтрока.ЭлектронныйДокумент = СоответствиеЭлектронныхДокументов[Документ]; - КонецЕсли; - КонецЦикла; - КонецЦикла; - - Если ТаблицаДоступныхВзаимодействий.Количество() = 0 Тогда - Возврат; - КонецЕсли; - - // Формирование запроса. - Если ЗапросСОтборомПоЭлектронномуДокументу Тогда - СтруктураЗапроса = ТекстИИндексЗапросаСообщенийМП_ОтборПоЭлектронномуДокументу(); - ТекстЗапроса = СтруктураЗапроса.ТекстЗапроса; - ИндексВыборкиДокументов = СтруктураЗапроса.ИндексРезультата; - Иначе - СтруктураЗапроса = ТекстИИндексЗапросаСообщенийМП_ОтборПоОбъектамУчета(); - ТекстЗапроса = СтруктураЗапроса.ТекстЗапроса; - ИндексВыборкиДокументов = СтруктураЗапроса.ИндексРезультата; - КонецЕсли; - - Запрос = Новый Запрос; - Запрос.УстановитьПараметр("ТаблицаДоступныхВзаимодействий", ТаблицаДоступныхВзаимодействий); - Запрос.Текст = ТекстЗапроса; - - Если МожноРассчитатьДанныеОПросмотреМП Тогда - СтруктураЗапроса = ТекстИИндексЗапросаДанныхОПросмотреМП(); - РазделительПакетаЗапросов = ОбщегоНазначения.РазделительПакетаЗапросов(); - Запрос.Текст = Запрос.Текст + РазделительПакетаЗапросов + СтруктураЗапроса.ТекстЗапроса; - ИндексДанныхОПросмотреМП = ИндексВыборкиДокументов + СтруктураЗапроса.ИндексРезультата + 1; - КонецЕсли; - - // Получение результата запроса. - Если МожноРассчитатьДанныеОПросмотреМП Тогда - МассивРезультатов = Запрос.ВыполнитьПакет(); - ВыборкаДокументов = МассивРезультатов[ИндексВыборкиДокументов].Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); - ВыборкаДанныхОПросмотреДокумента = МассивРезультатов[ИндексДанныхОПросмотреМП].Выбрать(); - Иначе - ВыборкаДокументов = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); - КонецЕсли; - - СтруктураПоискаПоДокументу = Новый Структура; - СтруктураПоискаПоДокументу.Вставить("Документ"); - - СоответствиеТитуловТипамМП = СервисВзаимодействияМПЭПДКлиентСервер.СоответствиеТитуловТипамМП(); - - // Добавление в записи регистра данных МП, доступных для текущего титула (ТаблицаДоступныхВзаимодействий). - Для Каждого ЗаписьРегистра Из КоллекцияЗаписейРегистра Цикл - ВыборкаДокументов.Сбросить(); - ТитулЗаписиРегистра = ТитулТекущегоШагаДокумента(ЗаписьРегистра.Ссылка, ЗаписьРегистра.ТекущийШаг); - - МожетБытьДобавленПризнакОжиданияПросмотраМП = - МожноРассчитатьДанныеОПросмотреМП - И ШагиТребующиеПросмотрМП.Найти(ЗаписьРегистра.ТекущийШаг) <> Неопределено - И ЗаписьРегистра.ТекущийШагВыполнен; - - СтруктураПоискаПоДокументу.Документ = Документ; - Если Не ВыборкаДокументов.НайтиСледующий(СтруктураПоискаПоДокументу) Тогда - // Нет доступных взаимодействий по титулу. - УбратьДанныеМПИзЗаписиРегистра(ЗаписьРегистра); - Продолжить; - КонецЕсли; - - ВыборкаДанныхПоДокументу = ВыборкаДокументов.Выбрать(); - - // Добавление документов в КЭШ взаимодействия с МП. - Если ЗапросСОтборомПоЭлектронномуДокументу Тогда - ПриЗаписиРеестраДобавитьДокументВКэшВзаимодействияМПЭПД(Документ, ВыборкаДанныхПоДокументу); - КонецЕсли; - - Пока ВыборкаДанныхПоДокументу.Следующий() Цикл - ЭтоСообщение = СервисВзаимодействияМПЭПДКлиентСервер.ЭтоТипВзаимодействияСообщение( - ВыборкаДанныхПоДокументу.ВидСообщения); - Если Не ЭтоСообщение Тогда - Прервать; - КонецЕсли; - - Если ЗначениеЗаполнено(ВыборкаДанныхПоДокументу.ДанныеСообщения) Тогда - СтруктураПризнаков = ТипИПризнакПринятоСообщенияМП(ВыборкаДанныхПоДокументу.ДанныеСообщения); - Тип = СтруктураПризнаков.Тип; - ТитулПринят = СтруктураПризнаков.Принято; - ЭтоТипСообщенияОбОтправкеТитула = СтруктураПризнаков.ЭтоТипСообщенияОбОтправкеТитула; - - ТитулВСообщении = СоответствиеТитуловТипамМП.Получить(Тип); - Если ТитулВСообщении = ТитулЗаписиРегистра Тогда - Прервать; - КонецЕсли; - КонецЕсли; - - ЭтоСообщение = Ложь; - КонецЦикла; - - ЭтоПривязкаДокумента = - СервисВзаимодействияМПЭПДКлиентСервер.ЭтоПривязкаДокумента(ВыборкаДанныхПоДокументу.ВидСообщения); - - Если Не ЭтоПривязкаДокумента И Не ЭтоСообщение Тогда - // Обработка отвязки документа от МП. - УбратьДанныеМПИзЗаписиРегистра(ЗаписьРегистра, МожетБытьДобавленПризнакОжиданияПросмотраМП); - - ИначеЕсли ЭтоСообщение Тогда - // Обработка событий с сообщениями и непосредственно сообщений (уведомлений). - ЗаписьРегистра.МобильноеПриложение = ВыборкаДанныхПоДокументу.ИдентификаторМП; - ЗаписьРегистра.ИдентификаторЗаписиМП = ВыборкаДанныхПоДокументу.ИдентификаторЗаписиМП; - ЗаписьРегистра.НаименованиеМП = ВыборкаДанныхПоДокументу.НаименованиеМП; - - Если ЗаписьРегистра.ТекущийШагВыполнен Тогда - ЗаписьРегистра.ТекущийШагМП = ""; - ИначеЕсли ЭтоТипСообщенияОбОтправкеТитула Тогда - ЗаписьРегистра.ТекущийШагМП = Тип; - ИначеЕсли Тип <> Неопределено Тогда - ЗаписьРегистра.ТекущийШагМП = Тип + ?(ТитулПринят = Ложь, "_reject", ""); - КонецЕсли; - - Иначе - // Обработка взаимодействий без сообщений (например вызываных из БЭД или событий привзяки). - ЗаписьРегистра.МобильноеПриложение = ВыборкаДанныхПоДокументу.ИдентификаторМП; - ЗаписьРегистра.ИдентификаторЗаписиМП = ВыборкаДанныхПоДокументу.ИдентификаторЗаписиМП; - ЗаписьРегистра.НаименованиеМП = ВыборкаДанныхПоДокументу.НаименованиеМП; - КонецЕсли; - - Если МожетБытьДобавленПризнакОжиданияПросмотраМП Тогда - ПриЗаписиРеестраУстановитьПризнакОжиданияПросмотраМП(ЗаписьРегистра, ВыборкаДанныхПоДокументу, - ВыборкаДанныхОПросмотреДокумента, СтруктураПоискаПоДокументу); - КонецЕсли; - - // Отметка о том, что данные сообщения МП просмотрены на форме. - Если ЗаписьИзФормы Тогда - ЗаписьРегистра.ТекущийШагМП = ""; - КонецЕсли; - - КонецЦикла; // По коллекции записей регистра - -КонецПроцедуры - -// Возвращает список подключенных устройств. -// -// Параметры: -// Отборы - Неопределено, Структура - Отборы. -// ТолькоАктивные - Булево - Возвращаются только активные МП. -// ВернутьМассив - Булево - Признак возвращения массива, в ином случае вернется таблица. -// -// Возвращаемое значение: -// ТаблицаЗначений - Список подключенных МП: -// * ИдентификаторЭДО - Строка -// * ИдентификаторМП - Строка -// * Идентификатор - Строка -// * Состояние - ПеречислениеСсылка.СостояниеМПЭПД -// * ИндексКартинки - Число -// * Фамилия - Строка -// * Имя - Строка -// * Отчество - Строка -// * ИНН - Строка -// * СНИЛС - Строка -// * СерияВУ - Строка -// * НомерВУ - Строка -// * ДатаВыдачиВУ - Дата -// * Наименование - Строка -// * ВидПодписи - ПеречислениеСсылка.ВидыПодписиМПЭПД -// * Телефоны - Строка -// * МЧД - СправочникСсылка.МашиночитаемыеДоверенностиОрганизаций -// * Фото - ХранилищеЗначения -// * Роль - Число -// * ВидыДокументов - Число -// * ПредставлениеРоли - Строка -// * Организация - ОпределяемыйТип.Организация -// -//@skip-check module-query-syntax -//@skip-check bsl-ql-hub -//@skip-check doc-comment-description-ends-on-dot -Функция СписокПодключенныхМП(Отборы = Неопределено, ТолькоАктивные = Ложь) Экспорт - - МетаданныеПеречисления = Перечисления.СостояниеМПЭПД.ПустаяСсылка().Метаданные(); - ПервоеЗначение = Истина; - МассивЧастейСостояний = Новый Массив; - Для Каждого ЗначениеПеречисления Из МетаданныеПеречисления.ЗначенияПеречисления Цикл - СостояниеТекстом = ЗначениеПеречисления.Имя; - Состояние = Перечисления.СостояниеМПЭПД[СостояниеТекстом]; - ИндексКартинки = Перечисления.СостояниеМПЭПД.ПолучитьИндексКартинки(Состояние); - Если ПервоеЗначение Тогда - Шаблон = "ВЫБРАТЬ - |ЗНАЧЕНИЕ(Перечисление.СостояниеМПЭПД.%1) КАК Состояние, - |%2 КАК ИндексКартинки - |ПОМЕСТИТЬ ВТ_ИндексыКартинокСостояний"; - ПервоеЗначение = Ложь; - Иначе - Шаблон = "ВЫБРАТЬ - |ЗНАЧЕНИЕ(Перечисление.СостояниеМПЭПД.%1) КАК Состояние, - |%2 КАК ИндексКартинки"; - КонецЕсли; - ТекстВставки = СтрШаблон(Шаблон, СостояниеТекстом, ИндексКартинки); - МассивЧастейСостояний.Добавить(ТекстВставки); - КонецЦикла; - - ПредставленияРолейМП = СервисВзаимодействияМПЭПДКлиентСервер.ПредставленияРолейМП(); - МассивЧастейПредставленийРолей = Новый Массив; - ПервоеЗначение = Истина; - Для Каждого КиЗ Из ПредставленияРолейМП Цикл - Если ПервоеЗначение Тогда - ШаблонПредставленияРолей = "ВЫБРАТЬ - |%1 КАК ЧисловоеЗначение, - |""%2"" КАК Представление - |ПОМЕСТИТЬ ВТ_ПредставленияРолей"; - ПервоеЗначение = Ложь; - Иначе - ШаблонПредставленияРолей = "ВЫБРАТЬ - |%1 КАК ЧисловоеЗначение, - |""%2"" КАК Представление"; - КонецЕсли; - ТекстВставки = СтрШаблон(ШаблонПредставленияРолей, КиЗ.Ключ, КиЗ.Значение); - МассивЧастейПредставленийРолей.Добавить(ТекстВставки); - КонецЦикла; - - СтрокаОбъединения = " - |ОБЪЕДИНИТЬ ВСЕ - |"; - ТекстНачалаЗапроса = СтрСоединить(МассивЧастейСостояний, СтрокаОбъединения); - - ТекстНачалаЗапроса = ТекстНачалаЗапроса + - "; - | - |//////////////////////////////////////////////////////////////////////////////// - |" + СтрСоединить(МассивЧастейПредставленийРолей, СтрокаОбъединения); - - ТекстЗапроса = ТекстНачалаЗапроса + - "; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ РАЗРЕШЕННЫЕ - | НастройкиВзаимодействияМПЭПД.ИдентификаторЭДО КАК ИдентификаторЭДО, - | НастройкиВзаимодействияМПЭПД.Организация КАК Организация - |ПОМЕСТИТЬ ВсеУчетныеЗаписи - |ИЗ - | РегистрСведений.НастройкиВзаимодействияМПЭПД КАК НастройкиВзаимодействияМПЭПД - |{ГДЕ - | НастройкиВзаимодействияМПЭПД.Организация, - | НастройкиВзаимодействияМПЭПД.ИдентификаторЭДО} - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | ПодключенныеМПЭПД.ИдентификаторЭДО КАК ИдентификаторЭДО, - | ПодключенныеМПЭПД.ИдентификаторМП КАК ИдентификаторМП, - | ПодключенныеМПЭПД.Идентификатор КАК Идентификатор, - | ПодключенныеМПЭПД.Состояние КАК Состояние, - | ЕСТЬNULL(ВТ_ИндексыКартинокСостояний.ИндексКартинки, 1) КАК ИндексКартинки, - | ПодключенныеМПЭПД.Фамилия КАК Фамилия, - | ПодключенныеМПЭПД.Имя КАК Имя, - | ПодключенныеМПЭПД.Отчество КАК Отчество, - | ПодключенныеМПЭПД.ИНН КАК ИНН, - | ПодключенныеМПЭПД.СНИЛС КАК СНИЛС, - | ПодключенныеМПЭПД.СерияВУ КАК СерияВУ, - | ПодключенныеМПЭПД.НомерВУ КАК НомерВУ, - | ПодключенныеМПЭПД.ДатаВыдачиВУ КАК ДатаВыдачиВУ, - | ПодключенныеМПЭПД.Наименование КАК Наименование, - | ПодключенныеМПЭПД.ВидПодписи КАК ВидПодписи, - | ПодключенныеМПЭПД.Телефоны КАК Телефоны, - | ПодключенныеМПЭПД.МЧД КАК МЧД, - | ПодключенныеМПЭПД.Фото КАК Фото, - | ПодключенныеМПЭПД.Роль КАК Роль, - | ПодключенныеМПЭПД.ВидыДокументов КАК ВидыДокументов, - | ВТ_ПредставленияРолей.Представление КАК ПредставлениеРоли, - | ВсеУчетныеЗаписи.Организация КАК Организация - |ИЗ - | РегистрСведений.ПодключенныеМПЭПД КАК ПодключенныеМПЭПД - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВсеУчетныеЗаписи КАК ВсеУчетныеЗаписи - | ПО ПодключенныеМПЭПД.ИдентификаторЭДО = ВсеУчетныеЗаписи.ИдентификаторЭДО - | И НЕ ПодключенныеМПЭПД.Удален - | ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ИндексыКартинокСостояний КАК ВТ_ИндексыКартинокСостояний - | ПО ПодключенныеМПЭПД.Состояние = ВТ_ИндексыКартинокСостояний.Состояние - | ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ПредставленияРолей КАК ВТ_ПредставленияРолей - | ПО ПодключенныеМПЭПД.Роль = ВТ_ПредставленияРолей.ЧисловоеЗначение - |{ГДЕ - | ПодключенныеМПЭПД.ИНН, - | ПодключенныеМПЭПД.СНИЛС, - | ПодключенныеМПЭПД.СерияВУ, - | ПодключенныеМПЭПД.НомерВУ, - | ПодключенныеМПЭПД.ДатаВыдачиВУ, - | ПодключенныеМПЭПД.Телефоны, - | ПодключенныеМПЭПД.ИдентификаторМП}"; - - НовыйЗапрос = Новый ПостроительЗапроса; - НовыйЗапрос.Текст = ТекстЗапроса; - НовыйЗапрос.ЗаполнитьНастройки(); - - Счетчик = 1; - Если Отборы <> Неопределено Тогда - Для Каждого КлючЗначение Из Отборы Цикл - Если ТипЗнч(КлючЗначение.Значение) = Тип("СписокЗначений") Тогда - НовыйОтбор = НовыйЗапрос.Отбор.Добавить(КлючЗначение.Ключ, "П" + Счетчик); - НовыйОтбор.ВидСравнения = ВидСравнения.ВСписке; - НовыйОтбор.Значение = КлючЗначение.Значение; - НовыйОтбор.Использование = Истина; - Иначе - НовыйОтбор = НовыйЗапрос.Отбор.Добавить(КлючЗначение.Ключ, "П" + Счетчик); - НовыйОтбор.ВидСравнения = ВидСравнения.Равно; - НовыйОтбор.Значение = КлючЗначение.Значение; - НовыйОтбор.Использование = Истина; - КонецЕсли; - Счетчик = Счетчик + 1; - КонецЦикла; - КонецЕсли; - - Если ТолькоАктивные Тогда - СписокСостояний = Новый СписокЗначений; - СписокСостояний.Добавить(Перечисления.СостояниеМПЭПД.Подключен); - НовыйОтбор = НовыйЗапрос.Отбор.Добавить("Состояние", "П" + Счетчик); - НовыйОтбор.ВидСравнения = ВидСравнения.ВСписке; - НовыйОтбор.Значение = СписокСостояний; - НовыйОтбор.Использование = Истина; - КонецЕсли; - - Запрос = НовыйЗапрос.ПолучитьЗапрос(); - РезультатТаблица = Запрос.Выполнить().Выгрузить(); - - Возврат РезультатТаблица; - -КонецФункции - -// Осуществляет поиск МП по идентификатору или ключевым полям. При поиске по ключевым полям -// запись ищется либо по ИНН, либо полям ВУ, либо по ФИО. -// -// Параметры: -// ИдентификаторЭДО - Строка - Идентификатор ЭДО -// Роль - Число - Числовое представление роли пользователя -// Идентификатор - Неопределено, Строка - Если Неопределено тогда поиск осуществляется по "Идентификатор" -// СтруктураКлючевыхПолей - Неопределено, Структура - Если Неопределено тогда поиск осуществляется по "СтруктураКлючевыхПолей" -// -// Возвращаемое значение: -// Неопределено, Структура - Если запись найдена возвращается структура: -// * ИдентификаторЭДО - Строка -// * ИдентификаторМП - Строка -// * Идентификатор - Строка -// * Состояние - ПеречислениеСсылка.СостояниеМПЭПД -// * ИндексКартинки - Число -// * Фамилия - Строка -// * Имя - Строка -// * Отчество - Строка -// * ИНН - Строка -// * СНИЛС - Строка -// * СерияВУ - Строка -// * НомерВУ - Строка -// * ДатаВыдачиВУ - Дата -// * Наименование - Строка -// * ВидПодписи - ПеречислениеСсылка.ВидыПодписиМПЭПД -// * Телефоны - Строка -// * МЧД - СправочникСсылка.МашиночитаемыеДоверенностиОрганизаций -// * Фото - ХранилищеЗначения -// * Роль - Число -// * ВидыДокументов - Число -// * ПредставлениеРоли - Строка -// * Организация - ОпределяемыйТип.Организация -// -//@skip-check module-query-syntax -//@skip-check bsl-ql-hub -//@skip-check doc-comment-description-ends-on-dot -Функция СтруктураДанныхМП(ИдентификаторЭДО, Роль, Идентификатор = Неопределено, - СтруктураКлючевыхПолей = Неопределено) Экспорт - - ПредставленияРолейМП = СервисВзаимодействияМПЭПДКлиентСервер.ПредставленияРолейМП(); - МассивЧастейПредставленийРолей = Новый Массив; - ПервоеЗначение = Истина; - Для Каждого КиЗ Из ПредставленияРолейМП Цикл - Если ПервоеЗначение Тогда - - ШаблонПредставленияРолей = "ВЫБРАТЬ - |%1 КАК ЧисловоеЗначение, - |""%2"" КАК Представление - |ПОМЕСТИТЬ ВТ_ПредставленияРолей"; - ПервоеЗначение = Ложь; - Иначе - ШаблонПредставленияРолей = "ВЫБРАТЬ - |%1 КАК ЧисловоеЗначение, - |""%2"" КАК Представление"; - КонецЕсли; - ТекстВставки = СтрШаблон(ШаблонПредставленияРолей, КиЗ.Ключ, КиЗ.Значение); - МассивЧастейПредставленийРолей.Добавить(ТекстВставки); - КонецЦикла; - СтрокаОбъединения = " - |ОБЪЕДИНИТЬ ВСЕ - |"; - ТекстЗапросаРолей = СтрСоединить(МассивЧастейПредставленийРолей, СтрокаОбъединения); - - РазделительПакетаЗапросов = ОбщегоНазначения.РазделительПакетаЗапросов(); - - ТекстЗапроса = ТекстЗапросаРолей + РазделительПакетаЗапросов + - "ВЫБРАТЬ РАЗРЕШЕННЫЕ - | НастройкиВзаимодействияМПЭПД.ИдентификаторЭДО КАК ИдентификаторЭДО, - | НастройкиВзаимодействияМПЭПД.Организация КАК Организация - |ПОМЕСТИТЬ ВТ_УчетныеЗаписи - |ИЗ - | РегистрСведений.НастройкиВзаимодействияМПЭПД КАК НастройкиВзаимодействияМПЭПД - |ГДЕ - | НастройкиВзаимодействияМПЭПД.ИдентификаторЭДО = &ИдентификаторЭДО - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | ПодключенныеМПЭПД.ИдентификаторЭДО КАК ИдентификаторЭДО, - | ПодключенныеМПЭПД.ИдентификаторМП КАК ИдентификаторМП, - | ПодключенныеМПЭПД.Идентификатор КАК Идентификатор, - | ПодключенныеМПЭПД.Состояние КАК Состояние, - | ПодключенныеМПЭПД.Фамилия КАК Фамилия, - | ПодключенныеМПЭПД.Имя КАК Имя, - | ПодключенныеМПЭПД.Отчество КАК Отчество, - | ПодключенныеМПЭПД.ИНН КАК ИНН, - | ПодключенныеМПЭПД.СНИЛС КАК СНИЛС, - | ПодключенныеМПЭПД.СерияВУ КАК СерияВУ, - | ПодключенныеМПЭПД.НомерВУ КАК НомерВУ, - | ПодключенныеМПЭПД.ДатаВыдачиВУ КАК ДатаВыдачиВУ, - | ПодключенныеМПЭПД.Наименование КАК Наименование, - | ПодключенныеМПЭПД.ВидПодписи КАК ВидПодписи, - | ПодключенныеМПЭПД.Телефоны КАК Телефоны, - | ПодключенныеМПЭПД.МЧД КАК МЧД, - | ПодключенныеМПЭПД.Фото КАК Фото, - | ПодключенныеМПЭПД.Роль КАК Роль, - | ПодключенныеМПЭПД.ВидыДокументов КАК ВидыДокументов, - | ВТ_ПредставленияРолей.Представление КАК ПредставлениеРоли, - | ВТ_УчетныеЗаписи.Организация КАК Организация - |ИЗ - | РегистрСведений.ПодключенныеМПЭПД КАК ПодключенныеМПЭПД - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_УчетныеЗаписи КАК ВТ_УчетныеЗаписи - | ПО ПодключенныеМПЭПД.ИдентификаторЭДО = ВТ_УчетныеЗаписи.ИдентификаторЭДО - | ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ПредставленияРолей КАК ВТ_ПредставленияРолей - | ПО ПодключенныеМПЭПД.Роль = ВТ_ПредставленияРолей.ЧисловоеЗначение - |ГДЕ - | &ТекстУсловийПоиска"; - - Запрос = Новый Запрос; - Запрос.УстановитьПараметр("ИдентификаторЭДО", ИдентификаторЭДО); - - Если ЗначениеЗаполнено(Идентификатор) Тогда - - Запрос.УстановитьПараметр("Идентификатор", Идентификатор); - ТекстУсловийПоиска = "Идентификатор = &Идентификатор"; - - Иначе - МассивТекстовУсловий = Новый Массив; - - РазделительУсловийИ = " - | И "; - РазделительУсловийИли = " - | ИЛИ "; - - // Условия поиска по ФИО - МассивУсловий = Новый Массив; - ТекстУсловияЗапроса = СформироватьТекстУсловияЗапроса(СтруктураКлючевыхПолей, "Фамилия", Запрос); - СервисВзаимодействияМПЭПДКлиентСервер.ДобавитьНеПустоеЗначениеВМассив(МассивУсловий, ТекстУсловияЗапроса); - ТекстУсловияЗапроса = СформироватьТекстУсловияЗапроса(СтруктураКлючевыхПолей, "Имя", Запрос); - СервисВзаимодействияМПЭПДКлиентСервер.ДобавитьНеПустоеЗначениеВМассив(МассивУсловий, ТекстУсловияЗапроса); - ТекстУсловияЗапроса = СформироватьТекстУсловияЗапроса(СтруктураКлючевыхПолей, "Отчество", Запрос); - СервисВзаимодействияМПЭПДКлиентСервер.ДобавитьНеПустоеЗначениеВМассив(МассивУсловий, ТекстУсловияЗапроса); - - ТекстУсловияЗапроса = СтрШаблон("(%1)", СтрСоединить(МассивУсловий, РазделительУсловийИ)); - СервисВзаимодействияМПЭПДКлиентСервер.ДобавитьНеПустоеЗначениеВМассив(МассивТекстовУсловий, ТекстУсловияЗапроса); - - // Условия поиска по ВУ - МассивУсловий = Новый Массив; - ТекстУсловияЗапроса = СформироватьТекстУсловияЗапроса(СтруктураКлючевыхПолей, "СерияВУ", Запрос); - СервисВзаимодействияМПЭПДКлиентСервер.ДобавитьНеПустоеЗначениеВМассив(МассивУсловий, ТекстУсловияЗапроса); - ТекстУсловияЗапроса = СформироватьТекстУсловияЗапроса(СтруктураКлючевыхПолей, "НомерВУ", Запрос); - СервисВзаимодействияМПЭПДКлиентСервер.ДобавитьНеПустоеЗначениеВМассив(МассивУсловий, ТекстУсловияЗапроса); - ТекстУсловияЗапроса = СформироватьТекстУсловияЗапроса(СтруктураКлючевыхПолей, "ДатаВыдачиВУ", Запрос); - СервисВзаимодействияМПЭПДКлиентСервер.ДобавитьНеПустоеЗначениеВМассив(МассивУсловий, ТекстУсловияЗапроса); - - ТекстУсловияЗапроса = СтрШаблон("(%1)", СтрСоединить(МассивУсловий, РазделительУсловийИ)); - СервисВзаимодействияМПЭПДКлиентСервер.ДобавитьНеПустоеЗначениеВМассив(МассивТекстовУсловий, ТекстУсловияЗапроса); - - // Прочие условия - МассивИсключенныхПолей = Новый Массив; - МассивИсключенныхПолей.Добавить("Фамилия"); - МассивИсключенныхПолей.Добавить("Имя"); - МассивИсключенныхПолей.Добавить("Отчество"); - МассивИсключенныхПолей.Добавить("СерияВУ"); - МассивИсключенныхПолей.Добавить("НомерВУ"); - МассивИсключенныхПолей.Добавить("ДатаВыдачиВУ"); - - Для Каждого КлючЗначение Из СтруктураКлючевыхПолей Цикл - Если МассивИсключенныхПолей.Найти(КлючЗначение.Ключ) <> Неопределено Тогда - Продолжить; - КонецЕсли; - - ТекстУсловияЗапроса = СформироватьТекстУсловияЗапроса(СтруктураКлючевыхПолей, КлючЗначение.Ключ, Запрос); - СервисВзаимодействияМПЭПДКлиентСервер.ДобавитьНеПустоеЗначениеВМассив(МассивТекстовУсловий, ТекстУсловияЗапроса); - КонецЦикла; - - // Выполнение запроса, получение результата - Если МассивТекстовУсловий.Количество() = 0 Тогда - Возврат Неопределено; - КонецЕсли; - - МассивВключающихРолей = ОбменСГИСЭПДКлиентСервер.ВсеВключающиеРоли(Роль, 5); - Запрос.УстановитьПараметр("МассивВключающихРолей", МассивВключающихРолей); - ТекстУсловийПоиска = СтрШаблон("ПодключенныеМПЭПД.Роль В(&МассивВключающихРолей) И (%1)", - СтрСоединить(МассивТекстовУсловий, РазделительУсловийИли)); - КонецЕсли; - - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТекстУсловийПоиска", ТекстУсловийПоиска); - Запрос.Текст = ТекстЗапроса; - - ТаблицаУстройств = Запрос.Выполнить().Выгрузить(); - Если ТаблицаУстройств.Количество() = 0 Тогда - Возврат Неопределено; - КонецЕсли; - - Результат = ОбщегоНазначения.СтрокаТаблицыЗначенийВСтруктуру(ТаблицаУстройств[0]); - //@skip-check constructor-function-return-section - Возврат Результат; - -КонецФункции - -Процедура УдалитьЗаписьПодключенныхМПЭПД(ИдентификаторЭДО, Идентификатор) Экспорт - - ПараметрыЗаписи = РегистрыСведений.ПодключенныеМПЭПД.ПараметрыЗаписиРегистра(ИдентификаторЭДО, Идентификатор); - РегистрыСведений.ПодключенныеМПЭПД.УдалитьЗапись(ПараметрыЗаписи); - -КонецПроцедуры - -#КонецОбласти - // Ожидает выполнение фоновой функции. // // Параметры: @@ -3637,47 +3703,22 @@ #КонецОбласти -// Возвращает текстовое представление работы используемое на сервере МП. -// Работа определяется с учетом титула и документа. -// Пример 1 - медработник проводящий медосмотр перед рейсом. -// Пример 2 - ответственный за показания одометра вносящий показания после рейса. -// -// Параметры: -// ТипВзаимодействияМПЭПД - ПеречислениеСсылка.ТипыВзаимодействияМПЭПД - -// Документ - ДокументСсылка - -// -// Возвращаемое значение: -// Строка - текстовое представление роли пользователя. -// -Функция РаботаВыполняемаяПользователем(ТипВзаимодействияМПЭПД, Документ) +Функция ПараметрыВыполненияОперацииСервиса(ИдентификаторЭДО = "") - РаботаВыполняемаяПользователем = ""; + Параметры = Новый Структура; + Параметры.Вставить("АдресРесурса", ""); + Параметры.Вставить("ВерсияИнтерфейса", 1); + Параметры.Вставить("ПредставлениеОперации", ""); + Параметры.Вставить("Метод", ""); + Параметры.Вставить("Токен", Неопределено); + Параметры.Вставить("ТокенОбновления", Неопределено); + Параметры.Вставить("ПараметрыЗапроса", Новый Структура); + Параметры.Вставить("Заголовки", Новый Соответствие); + Параметры.Вставить("ТелоЗапроса", Неопределено); + Параметры.Вставить("Таймаут", 60); + Параметры.Вставить("ИдентификаторЭДО", ИдентификаторЭДО); - Если ТипВзаимодействияМПЭПД = Перечисления.ТипыВзаимодействияМПЭПД.ПривязкаВодителя Тогда - Если ТипЗнч(Документ) = Тип("ДокументСсылка.ЭлектронныйПутевойЛист") Тогда - РаботаВыполняемаяПользователем = "EPL_Driver"; - ИначеЕсли ТипЗнч(Документ) = Тип("ДокументСсылка.ЭлектроннаяТранспортнаяНакладная") Тогда - РаботаВыполняемаяПользователем = "ETrN_Driver"; - КонецЕсли; - - ИначеЕсли ТипВзаимодействияМПЭПД = Перечисления.ТипыВзаимодействияМПЭПД.ПривязкаМедработникаДоРейса Тогда - РаботаВыполняемаяПользователем = "EPL_MedicBeforeShift"; - - ИначеЕсли ТипВзаимодействияМПЭПД = Перечисления.ТипыВзаимодействияМПЭПД.ПривязкаМедработникаПослеРейса Тогда - РаботаВыполняемаяПользователем = "EPL_MedicAfterShift"; - - ИначеЕсли ТипВзаимодействияМПЭПД = Перечисления.ТипыВзаимодействияМПЭПД.ПривязкаОтветственногоЗаОдометрДоРейса Тогда - РаботаВыполняемаяПользователем = "EPL_OdometrBeforeShift"; - - ИначеЕсли ТипВзаимодействияМПЭПД = Перечисления.ТипыВзаимодействияМПЭПД.ПривязкаОтветственногоЗаОдометрПослеРейса Тогда - РаботаВыполняемаяПользователем = "EPL_OdometrAfterShift"; - - ИначеЕсли ТипВзаимодействияМПЭПД = Перечисления.ТипыВзаимодействияМПЭПД.ПривязкаМеханика Тогда - РаботаВыполняемаяПользователем = "EPL_Mechanic"; - - КонецЕсли; - - Возврат РаботаВыполняемаяПользователем; + Возврат Параметры; КонецФункции @@ -3712,17 +3753,6 @@ КонецФункции -Функция ТитулТекущегоШагаДокумента(Документ, ТекущийШаг) - - СоответствиеТитуловИШагов = ОбменСГИСЭПДКлиентСервер.СоответствиеТитуловИШагов(Документ); - СоответствиеТитуловИШагов = СервисВзаимодействияМПЭПДКлиентСервер.ПеревернутьСоответствие( - СоответствиеТитуловИШагов); - ТитулЗаписиРегистра = СоответствиеТитуловИШагов.Получить(ТекущийШаг); - - Возврат ТитулЗаписиРегистра; - -КонецФункции - Функция ОпределитьВидПодписи(ВидПодписи) Возврат СоответствиеВидаПодписи(ВидПодписи); @@ -3855,6 +3885,12 @@ КонецФункции +Функция ВерсияОбменаСМобильнымПриложением() + + Возврат "1.1.1.1"; + +КонецФункции + // Получение объекта соединение. // // Параметры: @@ -3991,25 +4027,6 @@ КонецПроцедуры -Функция ПараметрыВыполненияОперацииСервиса(ИдентификаторЭДО = "") - - Параметры = Новый Структура; - Параметры.Вставить("АдресРесурса", ""); - Параметры.Вставить("ВерсияИнтерфейса", 1); - Параметры.Вставить("ПредставлениеОперации", ""); - Параметры.Вставить("Метод", ""); - Параметры.Вставить("Токен", Неопределено); - Параметры.Вставить("ТокенОбновления", Неопределено); - Параметры.Вставить("ПараметрыЗапроса", Новый Структура); - Параметры.Вставить("Заголовки", Новый Соответствие); - Параметры.Вставить("ТелоЗапроса", Неопределено); - Параметры.Вставить("Таймаут", 60); - Параметры.Вставить("ИдентификаторЭДО", ИдентификаторЭДО); - - Возврат Параметры; - -КонецФункции - // Выполнение операции на сервере МП. // // Параметры: @@ -4080,15 +4097,25 @@ Функция АдресСервисаВзаимодействия() Результат = "https://app-492902.1cmycloud.com"; + + Если ОбменСГИСЭПД.ДемоРежимВключен() Тогда + Результат = "https://app-110604.1cmycloud.com"; + КонецЕсли; + Возврат Результат; КонецФункции Функция АдресВерсииИнтерфейса(ВерсияВзаимодействия = 1) - Результат = "applications/REDMS"; - Если ВерсияВзаимодействия = 1 Тогда - Результат = Результат + "/api/v1"; + Если ОбменСГИСЭПД.ДемоРежимВключен() Тогда + Результат = "applications/EDMS/api/v1"; + Возврат Результат; + Иначе + Результат = "applications/REDMS"; + Если ВерсияВзаимодействия = 1 Тогда + Результат = Результат + "/api/v1"; + КонецЕсли; КонецЕсли; Возврат Результат; @@ -4130,7 +4157,11 @@ Или СтрНачинаетсяС(ИдентификаторФайла, "ON_PTLSVIPTS") Или СтрНачинаетсяС(ИдентификаторФайла, "ON_PTLSODVZD") Или СтрНачинаетсяС(ИдентификаторФайла, "ON_PTLSODPARK") - Или СтрНачинаетсяС(ИдентификаторФайла, "ON_PTLSPOSMO"); + Или СтрНачинаетсяС(ИдентификаторФайла, "ON_PTLSPOSMO") + + Или СтрНачинаетсяС(ИдентификаторФайла, "ON_TRNACLPPRIN") + Или СтрНачинаетсяС(ИдентификаторФайла, "ON_TRNACLPVYN") + Или СтрНачинаетсяС(ИдентификаторФайла, "DP_UVUTOCH"); Возврат ФайлаМожетБытьОтправленСМП; @@ -4140,10 +4171,18 @@ МассивЧастейФайла = СтрРазделить(ИдентификаторФайла, "_", Истина); - // УОУ. Отправитель медик. + // УОУ. Отправитель: медик, перевозчик, грузополучатель. Если СтрНачинаетсяС(ИдентификаторФайла, "DP_UVUTOCH") Тогда ИдентификаторОтправителя = МассивЧастейФайла[3]; + // ЭТрН Титул2. Отправитель перевозчик. + ИначеЕсли СтрНачинаетсяС(ИдентификаторФайла, "ON_TRNACLPPRIN") Тогда + ИдентификаторОтправителя = МассивЧастейФайла[4]; + + // ЭТрН Титул4. Отправитель перевозчик. + ИначеЕсли СтрНачинаетсяС(ИдентификаторФайла, "ON_TRNACLPVYN") Тогда + ИдентификаторОтправителя = МассивЧастейФайла[4]; + // ЭПЛ Титул2. Отправитель медик. ИначеЕсли СтрНачинаетсяС(ИдентификаторФайла, "ON_PTLSPRMO") Тогда ИдентификаторОтправителя = МассивЧастейФайла[4]; @@ -4175,11 +4214,25 @@ МассивПолучателей = Новый Массив; МассивЧастейФайла = СтрРазделить(ИдентификаторФайла, "_", Истина); - // УОУ. Отправитель медик. + // УОУ. Отправитель: медик, перевозчик, грузополучатель. Если СтрНачинаетсяС(ИдентификаторФайла, "DP_UVUTOCH") Тогда - // Оформитель + // Второй участник. МассивПолучателей.Добавить(МассивЧастейФайла[2]); + // ЭТрН Титул2. Отправитель перевозчик. + ИначеЕсли СтрНачинаетсяС(ИдентификаторФайла, "ON_TRNACLPPRIN") Тогда + // Грузополучатель + МассивПолучателей.Добавить(МассивЧастейФайла[2]); + // Грузоотправитель + МассивПолучателей.Добавить(МассивЧастейФайла[3]); + + // ЭТрН Титул4. Отправитель перевозчик. + ИначеЕсли СтрНачинаетсяС(ИдентификаторФайла, "ON_TRNACLPVYN") Тогда + // Грузополучатель + МассивПолучателей.Добавить(МассивЧастейФайла[2]); + // Грузоотправитель + МассивПолучателей.Добавить(МассивЧастейФайла[3]); + // ЭПЛ Титул2. Отправитель медик. ИначеЕсли СтрНачинаетсяС(ИдентификаторФайла, "ON_PTLSPRMO") Тогда // Оформитель @@ -4256,4 +4309,59 @@ КонецФункции +// Возвращает текстовое представление работы используемое на сервере МП. +// Работа определяется с учетом титула и документа. +// Пример 1 - медработник проводящий медосмотр перед рейсом. +// Пример 2 - ответственный за показания одометра вносящий показания после рейса. +// +// Параметры: +// ТипВзаимодействияМПЭПД - ПеречислениеСсылка.ТипыВзаимодействияМПЭПД - +// Документ - ДокументСсылка - +// +// Возвращаемое значение: +// Строка - текстовое представление роли пользователя. +// +Функция РаботаВыполняемаяПользователем(ТипВзаимодействияМПЭПД, Документ) + + РаботаВыполняемаяПользователем = ""; + + Если ТипВзаимодействияМПЭПД = Перечисления.ТипыВзаимодействияМПЭПД.ПривязкаВодителя Тогда + Если ТипЗнч(Документ) = Тип("ДокументСсылка.ЭлектронныйПутевойЛист") Тогда + РаботаВыполняемаяПользователем = "EPL_Driver"; + ИначеЕсли ТипЗнч(Документ) = Тип("ДокументСсылка.ЭлектроннаяТранспортнаяНакладная") Тогда + РаботаВыполняемаяПользователем = "ETrN_Driver"; + КонецЕсли; + + ИначеЕсли ТипВзаимодействияМПЭПД = Перечисления.ТипыВзаимодействияМПЭПД.ПривязкаМедработникаДоРейса Тогда + РаботаВыполняемаяПользователем = "EPL_MedicBeforeShift"; + + ИначеЕсли ТипВзаимодействияМПЭПД = Перечисления.ТипыВзаимодействияМПЭПД.ПривязкаМедработникаПослеРейса Тогда + РаботаВыполняемаяПользователем = "EPL_MedicAfterShift"; + + ИначеЕсли ТипВзаимодействияМПЭПД = Перечисления.ТипыВзаимодействияМПЭПД.ПривязкаОтветственногоЗаОдометрДоРейса Тогда + РаботаВыполняемаяПользователем = "EPL_OdometrBeforeShift"; + + ИначеЕсли ТипВзаимодействияМПЭПД = Перечисления.ТипыВзаимодействияМПЭПД.ПривязкаОтветственногоЗаОдометрПослеРейса Тогда + РаботаВыполняемаяПользователем = "EPL_OdometrAfterShift"; + + ИначеЕсли ТипВзаимодействияМПЭПД = Перечисления.ТипыВзаимодействияМПЭПД.ПривязкаМеханика Тогда + РаботаВыполняемаяПользователем = "EPL_Mechanic"; + + КонецЕсли; + + Возврат РаботаВыполняемаяПользователем; + +КонецФункции + +Функция ТитулТекущегоШагаДокумента(Документ, ТекущийШаг) + + СоответствиеТитуловИШагов = ОбменСГИСЭПДКлиентСервер.СоответствиеТитуловИШагов(Документ); + СоответствиеТитуловИШагов = СервисВзаимодействияМПЭПДКлиентСервер.ПеревернутьСоответствие( + СоответствиеТитуловИШагов); + ТитулЗаписиРегистра = СоответствиеТитуловИШагов.Получить(ТекущийШаг); + + Возврат ТитулЗаписиРегистра; + +КонецФункции + #КонецОбласти diff --git a/Конфигурация/CommonModules/СервисВзаимодействияМПЭПДКлиентСервер/Ext/Module.bsl b/Конфигурация/CommonModules/СервисВзаимодействияМПЭПДКлиентСервер/Ext/Module.bsl index 1ef2018bd..8f85ecf94 100644 --- a/Конфигурация/CommonModules/СервисВзаимодействияМПЭПДКлиентСервер/Ext/Module.bsl +++ b/Конфигурация/CommonModules/СервисВзаимодействияМПЭПДКлиентСервер/Ext/Module.bsl @@ -394,7 +394,9 @@ // ЭТрН Результат.Вставить("acceptance", ПредопределенноеЗначение("Перечисление.ТипыЭлементовРегламентаЭДО.ЭТрН_Титул2")); + Результат.Вставить("acceptance_rejection", ПредопределенноеЗначение("Перечисление.ТипыЭлементовРегламентаЭДО.ЭТрН_ОткП")); Результат.Вставить("unloading", ПредопределенноеЗначение("Перечисление.ТипыЭлементовРегламентаЭДО.ЭТрН_Титул4")); + Результат.Вставить("unloading_rejection", ПредопределенноеЗначение("Перечисление.ТипыЭлементовРегламентаЭДО.ЭТрН_ОткТ3")); // ЭПЛ Результат.Вставить("ShippingList_medic_before", ПредопределенноеЗначение("Перечисление.ТипыЭлементовРегламентаЭДО.ЭПЛ_Титул2")); @@ -432,19 +434,6 @@ КонецФункции -// Это тип сообщения о просмотре титула в МП. -// -// Параметры: -// ТипСообщенияМП - Строка - Тип сообщения от МП. -// -// Возвращаемое значение: -// Булево - Признак того, что переданный тип это тип сообщения о просмотре титула в МП. -Функция ЭтоТипСообщенияОПросмотреТитулаВМП(ТипСообщенияМП) Экспорт - - Возврат НРег(ТипСообщенияМП) = "readressing_viewed" Или НРег(ТипСообщенияМП) = "replacement_viewed"; - -КонецФункции - // Приводит тип сообщения от МП к типу сообщения, по которому можно получить титул. // // Параметры: @@ -740,6 +729,19 @@ КонецФункции +// Это тип сообщения о просмотре титула в МП. +// +// Параметры: +// ТипСообщенияМП - Строка - Тип сообщения от МП. +// +// Возвращаемое значение: +// Булево - Признак того, что переданный тип это тип сообщения о просмотре титула в МП. +Функция ЭтоТипСообщенияОПросмотреТитулаВМП(ТипСообщенияМП) Экспорт + + Возврат НРег(ТипСообщенияМП) = "readressing_viewed" Или НРег(ТипСообщенияМП) = "replacement_viewed"; + +КонецФункции + #КонецОбласти #Область КлючевыеПоля @@ -1076,25 +1078,6 @@ КонецФункции -// Возвращает массив типов взаимодействий МПЭПД которые будут загружаться с сервера МП. -// -// Возвращаемое значение: -// Массив из ПеречислениеСсылка.ТипыВзаимодействияМПЭПД - список типов взаимодействий для загрузки -Функция МассивЗагружаемыхТиповВзаимодействий() Экспорт - - Массив = Новый Массив; - - Массив.Добавить(ПредопределенноеЗначение("Перечисление.ТипыВзаимодействияМПЭПД.ПовторнаяРегистрацияМП")); - Массив.Добавить(ПредопределенноеЗначение("Перечисление.ТипыВзаимодействияМПЭПД.ИзменениеСведенийМП")); - Массив.Добавить(ПредопределенноеЗначение("Перечисление.ТипыВзаимодействияМПЭПД.ОтвязкаВодителя")); - Массив.Добавить(ПредопределенноеЗначение("Перечисление.ТипыВзаимодействияМПЭПД.ПривязкаВодителя")); - Массив.Добавить(ПредопределенноеЗначение("Перечисление.ТипыВзаимодействияМПЭПД.УдалениеМП")); - Массив.Добавить(ПредопределенноеЗначение("Перечисление.ТипыВзаимодействияМПЭПД.Сообщение")); - - Возврат Массив; - -КонецФункции - // Возвращает тип привязки/отвязки. // // Параметры: @@ -1272,10 +1255,13 @@ Если Титул = ПредопределенноеЗначение("Перечисление.ТипыЭлементовРегламентаЭДО.ЭТрН_Титул2") Или Титул = ПредопределенноеЗначение("Перечисление.ТипыЭлементовРегламентаЭДО.ЭТрН_Титул4") - Или Титул = ПредопределенноеЗначение("Перечисление.ТипыЭлементовРегламентаЭДО.ЭТрН_ДопТитул4") Тогда + Или Титул = ПредопределенноеЗначение("Перечисление.ТипыЭлементовРегламентаЭДО.ЭТрН_ДопТитул4") + Или Титул = ПредопределенноеЗначение("Перечисление.ТипыЭлементовРегламентаЭДО.ЭТрН_ОткП") + Или Титул = ПредопределенноеЗначение("Перечисление.ТипыЭлементовРегламентаЭДО.ЭТрН_ОткТ3") Тогда Возврат ИндексРаботыВодитель(); - ИначеЕсли Титул = ПредопределенноеЗначение("Перечисление.ТипыЭлементовРегламентаЭДО.ЭПЛ_Титул2") Тогда + ИначеЕсли Титул = ПредопределенноеЗначение("Перечисление.ТипыЭлементовРегламентаЭДО.ЭПЛ_Титул2") + Или Титул = ПредопределенноеЗначение("Перечисление.ТипыЭлементовРегламентаЭДО.ЭПЛ_ОткМ") Тогда Возврат ИндексРаботыМедработникДоРейса(); ИначеЕсли Титул = ПредопределенноеЗначение("Перечисление.ТипыЭлементовРегламентаЭДО.ЭПЛ_Титул3") Тогда @@ -1943,6 +1929,25 @@ КонецФункции +// Возвращает массив типов взаимодействий МПЭПД которые будут загружаться с сервера МП. +// +// Возвращаемое значение: +// Массив из ПеречислениеСсылка.ТипыВзаимодействияМПЭПД - список типов взаимодействий для загрузки +Функция МассивЗагружаемыхТиповВзаимодействий() Экспорт + + Массив = Новый Массив; + + Массив.Добавить(ПредопределенноеЗначение("Перечисление.ТипыВзаимодействияМПЭПД.ПовторнаяРегистрацияМП")); + Массив.Добавить(ПредопределенноеЗначение("Перечисление.ТипыВзаимодействияМПЭПД.ИзменениеСведенийМП")); + Массив.Добавить(ПредопределенноеЗначение("Перечисление.ТипыВзаимодействияМПЭПД.ОтвязкаВодителя")); + Массив.Добавить(ПредопределенноеЗначение("Перечисление.ТипыВзаимодействияМПЭПД.ПривязкаВодителя")); + Массив.Добавить(ПредопределенноеЗначение("Перечисление.ТипыВзаимодействияМПЭПД.УдалениеМП")); + Массив.Добавить(ПредопределенноеЗначение("Перечисление.ТипыВзаимодействияМПЭПД.Сообщение")); + + Возврат Массив; + +КонецФункции + #КонецОбласти #Область ВидПодписи diff --git a/Конфигурация/CommonModules/СервисДоставки/Ext/Module.bsl b/Конфигурация/CommonModules/СервисДоставки/Ext/Module.bsl index fa0c2e127..01cf9abed 100644 --- a/Конфигурация/CommonModules/СервисДоставки/Ext/Module.bsl +++ b/Конфигурация/CommonModules/СервисДоставки/Ext/Module.bsl @@ -77,7 +77,7 @@ Параметры.ИнтернетПоддержкаПодключена = ИнтернетПоддержкаПользователей.ЗаполненыДанныеАутентификацииПользователяИнтернетПоддержки(); - ДанныеОрганизаций = СервисДоставкиПовтИсп.ДоступныеПодключенныеОрганизации(); + ДанныеОрганизаций = СервисДоставкиСлужебный.ДоступныеПодключенныеОрганизации(); Если ДанныеОрганизаций.Количество() = 1 Тогда Параметры.ЕдинственнаяПодключеннаяОрганизацияБизнесСети = ДанныеОрганизаций[0].Организация; ИначеЕсли ДанныеОрганизаций.Количество() > 1 Тогда @@ -99,7 +99,7 @@ ОрганизацияБизнесСети = ПараметрыФормы.ОрганизацияБизнесСети; Если ПараметрыФормы.ЗаполнятьОрганизациюПоУмолчанию И Не ЗначениеЗаполнено(ОрганизацияБизнесСети) Тогда - ОрганизацияБизнесСети = ОрганизацияПоУмолчанию(ТипГрузоперевозки); + ОрганизацияБизнесСети = ОрганизацияПоУмолчанию(ТипГрузоперевозки, ДанныеОрганизаций); Если Не ЗначениеЗаполнено(ОрганизацияБизнесСети) Тогда ИдентификаторТипаГрузоперевозки = СервисДоставкиКлиентСервер.ЧисловойИдентификаторГрузоперевозчика(ТипГрузоперевозки); ПараметрыГрузоперевозчика = ПараметрыГрузоперевозчиков[ИдентификаторТипаГрузоперевозки]; @@ -4491,7 +4491,12 @@ | КОГДА НастройкиДоставки.НаименованиеПараметра = ""ГрузВидРасшифровки"" | ТОГДА НастройкиДоставки.Значение | ИНАЧЕ """" - | КОНЕЦ КАК СТРОКА(150))) КАК ГрузВидРасшифровки + | КОНЕЦ КАК СТРОКА(150))) КАК ГрузВидРасшифровки, + | МАКСИМУМ(ВЫРАЗИТЬ(ВЫБОР + | КОГДА НастройкиДоставки.НаименованиеПараметра = ""ВыгружатьКодыМаркировки"" + | ТОГДА НастройкиДоставки.Значение + | ИНАЧЕ ЛОЖЬ + | КОНЕЦ КАК БУЛЕВО)) КАК ВыгружатьКодыМаркировки |ПОМЕСТИТЬ ВременнаяТаблица |ИЗ | РегистрСведений.НастройкиОбщиеСервисДоставки КАК НастройкиДоставки @@ -4543,6 +4548,7 @@ | ВременнаяТаблица.ХарактерГрузаСтрокой КАК ХарактерГрузаСтрокой, | ВременнаяТаблица.ХарактерГрузаИдентификатор КАК ХарактерГрузаИдентификатор, | ВременнаяТаблица.ГрузВидРасшифровки КАК ГрузВидРасшифровки, + | ВременнаяТаблица.ВыгружатьКодыМаркировки КАК ВыгружатьКодыМаркировки, | ВременнаяТаблицаУслугиДоставки.УслугиДоставки КАК УслугиДоставки |ИЗ | ВременнаяТаблица КАК ВременнаяТаблица @@ -5596,6 +5602,21 @@ КонецПроцедуры +// См. ОбщегоНазначенияПереопределяемый.ПриНастройкеПроверкиМетодовВызываемыхКакПроизвольныйКод +Процедура ПриНастройкеПроверкиМетодовВызываемыхКакПроизвольныйКод(Настройки) Экспорт + + ИсключениеПроверки = Настройки.ИсключенияПроверки.Добавить(); + ИсключениеПроверки.ПолноеИмяОбъекта = "ОбщийМодуль.СервисДоставки"; + ИсключениеПроверки.ИмяПроцедуры = "ВыполнитьДлительнуюОперацию"; + ИсключениеПроверки.ФрагментСодержания = + "ОбщегоНазначения.ВыполнитьМетодКонфигурации(""СервисДоставки."" + ИмяМетода, ПараметрыМетодаКонфигурации)"; + + Методы = Новый Соответствие; + ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод(Методы); + Настройки.ИсключенияКогдаУказанныйМетодНеВызывается.Вставить("ОбщийМодуль.СервисДоставки", Методы); + +КонецПроцедуры + #КонецОбласти #КонецОбласти @@ -6241,11 +6262,14 @@ КонецФункции -Функция ОрганизацияПоУмолчанию(ТипГрузоперевозки) Экспорт +Функция ОрганизацияПоУмолчанию(ТипГрузоперевозки, ДоступныеПодключенныеОрганизации = Неопределено) Экспорт ОрганизацияБизнесСетиСсылка = ПараметрыПоУмолчанию(ТипГрузоперевозки, "ОрганизацияБизнесСети").ОрганизацияБизнесСети; - ДоступныеПодключенныеОрганизации = СервисДоставкиПовтИсп.ДоступныеПодключенныеОрганизации(); + Если ДоступныеПодключенныеОрганизации = Неопределено Тогда + ДоступныеПодключенныеОрганизации = СервисДоставкиПовтИсп.ДоступныеПодключенныеОрганизации(); + КонецЕсли; + Если ЗначениеЗаполнено(ОрганизацияБизнесСетиСсылка) Тогда Если ДоступныеПодключенныеОрганизации.Найти(ОрганизацияБизнесСетиСсылка, "Организация") = Неопределено Тогда ОрганизацияБизнесСетиСсылка = Неопределено; @@ -6253,7 +6277,7 @@ КонецЕсли; Если Не ЗначениеЗаполнено(ОрганизацияБизнесСетиСсылка) Тогда - Если ДоступныеПодключенныеОрганизации.Количество() > 0 Тогда + Если ДоступныеПодключенныеОрганизации.Количество() = 1 Тогда ОрганизацияБизнесСетиСсылка = ДоступныеПодключенныеОрганизации[0].Организация; КонецЕсли; КонецЕсли; @@ -6711,6 +6735,35 @@ #КонецОбласти +#Область ШаблоныДоставки + +Процедура ОчиститьНезаполненныеПоляШаблона(ПараметрыЗаказа, ТипГрузоперевозки) Экспорт + + УдаляемыеКлючи = Новый Массив; + + Для Каждого Реквизит Из ПараметрыЗаказа Цикл + Если Реквизит.Значение = Неопределено Или Не ЗначениеЗаполнено(Реквизит.Значение) Тогда + УдаляемыеКлючи.Добавить(Реквизит.Ключ); + ИначеЕсли (ТипЗнч(Реквизит.Значение) = ТИП("ТаблицаЗначений") Или ТипЗнч(Реквизит.Значение) = ТИП("Массив") + Или ТипЗнч(Реквизит.Значение) = ТИП("СписокЗначений")) И Реквизит.Значение.Количество() = 0 Тогда + УдаляемыеКлючи.Добавить(Реквизит.Ключ); + ИначеЕсли ТипЗнч(Реквизит.Значение) = ТИП("Булево") И Не Реквизит.Значение Тогда + УдаляемыеКлючи.Добавить(Реквизит.Ключ); + ИначеЕсли (Реквизит.Ключ = "СпособДоставки" Или Реквизит.Ключ = "СпособОтгрузки") И Реквизит.Значение = 1 Тогда + УдаляемыеКлючи.Добавить(Реквизит.Ключ); + ИначеЕсли ТипЗнч(Реквизит.Значение) = ТИП("Структура") Тогда + ОчиститьНезаполненнуюСтруктуруШаблона(Реквизит, УдаляемыеКлючи, ТипГрузоперевозки); + КонецЕсли; + КонецЦикла; + + Для Каждого Ключ Из УдаляемыеКлючи Цикл + ПараметрыЗаказа.Удалить(Ключ); + КонецЦикла; + +КонецПроцедуры + +#КонецОбласти + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -7292,7 +7345,7 @@ Параметры.Вставить("ИдентификаторДокументаОснования", ""); // Строка(36) Параметры.Вставить("ИдентификаторСтроки", ""); // Строка(36). Уникален в пределах документа-основания заказа на доставку. В его отсутствие уникален в пределах заказа на доставку Параметры.Вставить("ИдентификаторГрузовогоМеста", 0); // Число(5). номер грузового места - Параметры.Вставить("КодМаркировки", 0); // Строка(150). код маркировки честного знака + Параметры.Вставить("КодМаркировки", ""); // Строка(150). код маркировки честного знака Параметры.Вставить("ОбъемКоэффициентСм3", ""); // Число(15,3) Параметры.Вставить("Стоимость", 0); @@ -8552,6 +8605,7 @@ ДобавитьЗначение(НоваяПозиция, "priceWithVat", ТекущаяПозиция.Сумма / ТекущаяПозиция.Количество, Истина); ДобавитьЗначение(НоваяПозиция, "priceVat", ТекущаяПозиция.СуммаНДС / ТекущаяПозиция.Количество, Истина); ДобавитьЗначение(НоваяПозиция, "costDeclared", ТекущаяПозиция.Стоимость, Истина); + ДобавитьЗначение(НоваяПозиция, "marking", ТекущаяПозиция.КодМаркировки, Истина); КонецЕсли; ДобавитьЗначение(НоваяПозиция, "cost", ТекущаяПозиция.Сумма, Истина); ДобавитьЗначение(НоваяПозиция, "vatCode", ТекущаяПозиция.СтавкаНДС, Истина, ""); @@ -10621,7 +10675,7 @@ НоваяПозиция.ИдентификаторГрузовогоМеста = ПолучитьЗначение(ТекущаяПозиция, "packageId"); КонецЕсли; Если ЕстьКодМаркировки Тогда - НоваяПозиция.КодМаркировки = ПолучитьЗначение(ТекущаяПозиция, "Marking"); + НоваяПозиция.КодМаркировки = ПолучитьЗначение(ТекущаяПозиция, "marking"); КонецЕсли; Если ЭтоСДЭК Тогда @@ -13938,6 +13992,91 @@ Возврат Не РегионОтправителя = РегионПолучателя; КонецФункции +Процедура ОчиститьНезаполненнуюСтруктуруШаблона(Реквизит, УдаляемыеКлючи, ТипГрузоперевозки) + + Если Реквизит.Ключ = "Валюта" И Не ЗначениеЗаполнено(Реквизит.Значение.Ссылка) Тогда + УдаляемыеКлючи.Добавить(Реквизит.Ключ); + ИначеЕсли Реквизит.Ключ = "ВремяДоставки" И ДатаНеЗаполнена(Реквизит.Значение) Тогда + УдаляемыеКлючи.Добавить(Реквизит.Ключ); + ИначеЕсли Реквизит.Ключ = "ВремяОтгрузки" И ДатаНеЗаполнена(Реквизит.Значение) Тогда + УдаляемыеКлючи.Добавить(Реквизит.Ключ); + ИначеЕсли Реквизит.Ключ = "Отправитель" И ДанныеКонтрагентаНеЗаполнены(Реквизит.Значение) Тогда + УдаляемыеКлючи.Добавить(Реквизит.Ключ); + ИначеЕсли Реквизит.Ключ = "Плательщик" И ДанныеКонтрагентаНеЗаполнены(Реквизит.Значение) Тогда + УдаляемыеКлючи.Добавить(Реквизит.Ключ); + ИначеЕсли Реквизит.Ключ = "Получатель" И ДанныеКонтрагентаНеЗаполнены(Реквизит.Значение) Тогда + УдаляемыеКлючи.Добавить(Реквизит.Ключ); + ИначеЕсли Реквизит.Ключ = "ОтправительНаселенныйПункт" И Не ЗначениеЗаполнено(Реквизит.Значение.Представление) Тогда + УдаляемыеКлючи.Добавить(Реквизит.Ключ); + ИначеЕсли Реквизит.Ключ = "ПолучательНаселенныйПункт" И Не ЗначениеЗаполнено(Реквизит.Значение.Представление) Тогда + УдаляемыеКлючи.Добавить(Реквизит.Ключ); + ИначеЕсли Реквизит.Ключ = "Пропуск" И Не ЗначениеЗаполнено(Реквизит.Значение.Заказывать) Тогда + УдаляемыеКлючи.Добавить(Реквизит.Ключ); + ИначеЕсли Реквизит.Ключ = "ПунктВыдачиГруза" И Не ЗначениеЗаполнено(Реквизит.Значение.Адрес) Тогда + УдаляемыеКлючи.Добавить(Реквизит.Ключ); + ИначеЕсли Реквизит.Ключ = "ПунктВыдачиКлиента" И Не ЗначениеЗаполнено(Реквизит.Значение.Адрес) Тогда + УдаляемыеКлючи.Добавить(Реквизит.Ключ); + ИначеЕсли Реквизит.Ключ = "ПунктПриемаГруза" И Не ЗначениеЗаполнено(Реквизит.Значение.Адрес) Тогда + УдаляемыеКлючи.Добавить(Реквизит.Ключ); + ИначеЕсли Реквизит.Ключ = "Тариф" И Не ЗначениеЗаполнено(Реквизит.Значение.Идентификатор) Тогда + УдаляемыеКлючи.Добавить(Реквизит.Ключ); + КонецЕсли; + + Если ТипГрузоперевозки = Перечисления.ТипыГрузоперевозки.ДеловыеЛинии Тогда + Если Реквизит.Ключ = "Груз" И ДанныеГрузаНеЗаполнены(Реквизит.Значение) Тогда + УдаляемыеКлючи.Добавить(Реквизит.Ключ); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +Функция ДатаНеЗаполнена(Дата) + + Возврат Не (ЗначениеЗаполнено(Дата.ОбедС) Или ЗначениеЗаполнено(Дата.ОбедПо) + Или ЗначениеЗаполнено(Дата.С) Или ЗначениеЗаполнено(Дата.По) Или ЗначениеЗаполнено(Дата.Фиксированное)); + +КонецФункции + +Функция ДанныеКонтрагентаНеЗаполнены(ДанныеКонтрагента) + + УдаляемыеКлючи = Новый Массив; + + Для Каждого Реквизит Из ДанныеКонтрагента Цикл + Если Реквизит.Ключ = "Адрес" И Не ЗначениеЗаполнено(Реквизит.Значение.Представление) Тогда + УдаляемыеКлючи.Добавить(Реквизит.Ключ); + ИначеЕсли Реквизит.Ключ = "КонтактноеЛицо" И Не ЗначениеЗаполнено(Реквизит.Значение.Наименование) Тогда + УдаляемыеКлючи.Добавить(Реквизит.Ключ); + ИначеЕсли Реквизит.Ключ = "Контрагент" И Не ЗначениеЗаполнено(Реквизит.Значение.Наименование) Тогда + УдаляемыеКлючи.Добавить(Реквизит.Ключ); + КонецЕсли; + КонецЦикла; + + Для Каждого Ключ Из УдаляемыеКлючи Цикл + ДанныеКонтрагента.Удалить(Ключ); + КонецЦикла; + + Возврат Не ЗначениеЗаполнено(ДанныеКонтрагента); + +КонецФункции + +Функция ДанныеГрузаНеЗаполнены(ДанныеГруза) + + УдаляемыеКлючи = Новый Массив; + + Для Каждого Реквизит Из ДанныеГруза Цикл + Если Не ЗначениеЗаполнено(Реквизит.Значение) Тогда + УдаляемыеКлючи.Добавить(Реквизит.Ключ); + КонецЕсли; + КонецЦикла; + + Для Каждого Ключ Из УдаляемыеКлючи Цикл + ДанныеГруза.Удалить(Ключ); + КонецЦикла; + + Возврат Не ЗначениеЗаполнено(ДанныеГруза); + +КонецФункции + #КонецОбласти #Область ЗагрузкаНаложенныхПлатежей diff --git a/Конфигурация/CommonModules/СервисДоставкиКлиентСервер/Ext/Module.bsl b/Конфигурация/CommonModules/СервисДоставкиКлиентСервер/Ext/Module.bsl index b39d9977d..f76e61098 100644 --- a/Конфигурация/CommonModules/СервисДоставкиКлиентСервер/Ext/Module.bsl +++ b/Конфигурация/CommonModules/СервисДоставкиКлиентСервер/Ext/Module.bsl @@ -1137,7 +1137,7 @@ КонецФункции // Возвращаемое значение: -// Строка - Имя настойки, отвечающей за ощистку полей заказа шаблоном +// Строка - Имя настойки, отвечающей за очистку полей заказа шаблоном Функция ИмяНастройкиШаблонОчищаетПоляЗаказа() Экспорт Возврат "ШаблонОчищаетПоляЗаказа"; КонецФункции diff --git a/Конфигурация/CommonModules/СервисДоставкиСлужебный/Ext/Module.bsl b/Конфигурация/CommonModules/СервисДоставкиСлужебный/Ext/Module.bsl index fd6d77fe9..e21d18930 100644 --- a/Конфигурация/CommonModules/СервисДоставкиСлужебный/Ext/Module.bsl +++ b/Конфигурация/CommonModules/СервисДоставкиСлужебный/Ext/Module.bsl @@ -660,6 +660,11 @@ Возврат ДокументыОснования; КонецФункции +// См. БизнесСеть.ДоступныеПодключенныеОрганизации +Функция ДоступныеПодключенныеОрганизации() Экспорт + Возврат БизнесСеть.ДоступныеПодключенныеОрганизации(); +КонецФункции + #КонецОбласти #Область СлужебныеПроцедурыИФункции diff --git a/Конфигурация/CommonModules/СервисКриптографииDSSСлужебный/Ext/Module.bsl b/Конфигурация/CommonModules/СервисКриптографииDSSСлужебный/Ext/Module.bsl index 6c07ed27a..7ffc12ae9 100644 --- a/Конфигурация/CommonModules/СервисКриптографииDSSСлужебный/Ext/Module.bsl +++ b/Конфигурация/CommonModules/СервисКриптографииDSSСлужебный/Ext/Module.bsl @@ -287,31 +287,6 @@ #Область ИнтеграцияВПодсистемуЭлектроннаяПодпись -// Формирует массив сертификатов (объектов), которые задействованы в "Облачной подписи". -// Массив формируется на основе закэшированных сертификатов после последней аутентификации. -// -// Параметры: -// ДвоичныеДанныеКакHEX - Булево - режим преобразования двоичных данных -// -// Возвращаемое значение: -// Массив из Структура - описывает объект сертификата -// -Функция ПолучитьДанныеСертификатов(ДвоичныеДанныеКакHEX = Истина) Экспорт - - МассивСертификатов = Новый Массив; - НашлиСертификаты = ПолучитьВсеСертификаты(); - - Для каждого СтрокаТаблицы Из НашлиСертификаты Цикл - ДанныеСертификата = СтрокаТаблицы.ДанныеСертификата.Получить(); - Если ЗначениеЗаполнено(ДанныеСертификата) Тогда - МассивСертификатов.Добавить(СервисКриптографииDSS.ПолучитьОбъектСертификата(ДанныеСертификата, Ложь, ДвоичныеДанныеКакHEX)); - КонецЕсли; - КонецЦикла; - - Возврат МассивСертификатов; - -КонецФункции - // Формирует ТаблицуЗначений с данным сертификатов хранимые в кеше сертификатов. // Данные формируется на основе закэшированных сертификатов после последней аутентификации. // diff --git a/Конфигурация/CommonModules/СервисМобильнойПодписиКлиентСервер/Ext/Module.bsl b/Конфигурация/CommonModules/СервисМобильнойПодписиКлиентСервер/Ext/Module.bsl index 36565cf52..05a517400 100644 --- a/Конфигурация/CommonModules/СервисМобильнойПодписиКлиентСервер/Ext/Module.bsl +++ b/Конфигурация/CommonModules/СервисМобильнойПодписиКлиентСервер/Ext/Module.bsl @@ -178,6 +178,10 @@ Функция НовоеОписаниеОшибки(ЗаголовокОшибки, Знач ТекстОшибки) Экспорт + Если ТипЗнч(ТекстОшибки) <> Тип("Строка") И ТипЗнч(ТекстОшибки) <> Тип("ФорматированнаяСтрока") Тогда + ТекстОшибки = ЗаписатьЗначениеJSON(ТекстОшибки); + КонецЕсли; + Если Не СтрЗаканчиваетсяНа(ТекстОшибки, ".") Тогда ТекстОшибки = ТекстОшибки + "."; КонецЕсли; diff --git a/Конфигурация/CommonModules/СервисМобильнойПодписиСлужебный/Ext/Module.bsl b/Конфигурация/CommonModules/СервисМобильнойПодписиСлужебный/Ext/Module.bsl index aae5a0f6a..31d3bb36f 100644 --- a/Конфигурация/CommonModules/СервисМобильнойПодписиСлужебный/Ext/Module.bsl +++ b/Конфигурация/CommonModules/СервисМобильнойПодписиСлужебный/Ext/Module.bsl @@ -3023,26 +3023,30 @@ ТипОшибки = ""; СообщениеОбОшибке = ""; Ошибки = Новый Массив; - Для Каждого КлючИЗначение Из СтруктураОтвета.error Цикл - Если КлючИЗначение.Ключ = "details" Тогда - Если ЗначениеЗаполнено(СтруктураОтвета.error.details) Тогда - Ошибки.Добавить(ДеталиОшибки(СтруктураОтвета.error.details)); + Если ТипЗнч(СтруктураОтвета.error) = Тип("Массив") Тогда + Для Каждого КлючИЗначение Из СтруктураОтвета.error Цикл + Если КлючИЗначение.Ключ = "details" Тогда + Если ЗначениеЗаполнено(СтруктураОтвета.error.details) Тогда + Ошибки.Добавить(ДеталиОшибки(СтруктураОтвета.error.details)); + КонецЕсли; + ИначеЕсли КлючИЗначение.Ключ = "message" Тогда + Если НРег(КлючИЗначение.Значение) = "see details" Тогда + Продолжить; + КонецЕсли; + СообщениеОбОшибке = КлючИЗначение.Значение; + ИначеЕсли КлючИЗначение.Ключ = "ueid" Тогда + ИдентификаторОшибки = КлючИЗначение.Значение; + ИначеЕсли КлючИЗначение.Ключ = "type" Тогда + ТипОшибки = КлючИЗначение.Значение; + ИначеЕсли КлючИЗначение.Ключ = "non_field_errors" Тогда + Ошибки.Добавить(ДеталиОшибки(КлючИЗначение.Значение)); + Иначе + Ошибки.Добавить(КлючИЗначение.Ключ + ": " + ДеталиОшибки(КлючИЗначение.Значение)); КонецЕсли; - ИначеЕсли КлючИЗначение.Ключ = "message" Тогда - Если НРег(КлючИЗначение.Значение) = "see details" Тогда - Продолжить; - КонецЕсли; - СообщениеОбОшибке = КлючИЗначение.Значение; - ИначеЕсли КлючИЗначение.Ключ = "ueid" Тогда - ИдентификаторОшибки = КлючИЗначение.Значение; - ИначеЕсли КлючИЗначение.Ключ = "type" Тогда - ТипОшибки = КлючИЗначение.Значение; - ИначеЕсли КлючИЗначение.Ключ = "non_field_errors" Тогда - Ошибки.Добавить(ДеталиОшибки(КлючИЗначение.Значение)); - Иначе - Ошибки.Добавить(КлючИЗначение.Ключ + ": " + ДеталиОшибки(КлючИЗначение.Значение)); - КонецЕсли; - КонецЦикла; + КонецЦикла; + Иначе + Ошибки.Добавить(ЗаписатьЗначениеJSON(СтруктураОтвета.error)); + КонецЕсли; Если ЗначениеЗаполнено(СообщениеОбОшибке) И ТипОшибки <> "FNS_ERROR" Тогда Ошибки.Вставить(0, СообщениеОбОшибке); @@ -4296,6 +4300,10 @@ Процедура ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод(Методы) Экспорт Методы.Вставить("УстановитьПараметрСеансаПараметрыАвторизацииВСервисеМобильнойПодписи"); + Если ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.БазоваяФункциональность") Тогда + Методы.Вставить("ПолучениеРезультатовИзСервисаМобильнойПодписи"); + КонецЕсли; + Методы.Вставить("ОтправитьНаПодписание", Истина); КонецПроцедуры diff --git a/Конфигурация/CommonModules/СервисНастроекЭДО/Ext/Module.bsl b/Конфигурация/CommonModules/СервисНастроекЭДО/Ext/Module.bsl index 3a362df09..1963a1a18 100644 --- a/Конфигурация/CommonModules/СервисНастроекЭДО/Ext/Module.bsl +++ b/Конфигурация/CommonModules/СервисНастроекЭДО/Ext/Module.bsl @@ -752,7 +752,7 @@ // КонтекстДиагностики - см. ОбработкаНеисправностейБЭД.НовыйКонтекстДиагностики // Возвращаемое значение: // - Неопределено - данные получить не удалось. -// - См. НоваяТаблицаАбонентов . +// - См. НоваяТаблицаАбонентов. Функция ДанныеАбонентовИзСервисаНастроек(Отбор, Отказ, КонтекстДиагностики = Неопределено) Экспорт Если Отбор.СписокИНН.Количество() = 0 И Отбор.ИдентификаторыЭДО.Количество() = 0 Тогда @@ -808,6 +808,12 @@ ДанныеАбонентов.identifierInfos = НаборСведений; Результат = ОбработатьДанныеОтветаСервиса(ПараметрыКоманды, ДанныеАбонентов, Отказ, КонтекстДиагностики); + + Если ОбщегоНазначения.ПодсистемаСуществует("ЭлектронноеВзаимодействие.ОбменСГИСЭПД") Тогда + МодульОбменСГИСЭПД = ОбщегоНазначения.ОбщийМодуль("ОбменСГИСЭПД"); + МодульОбменСГИСЭПД.ПриЗаполненииДанныхАбонентовИзСервисаНастроек(Отбор, Отказ, КонтекстДиагностики, Результат); + КонецЕсли; + Возврат Результат; КонецФункции @@ -861,16 +867,20 @@ // Отправляет данные абонента в сервис настроек. // // Параметры: -// ИдентификаторУчетнойЗаписи - Строка +// ДанныеУчетнойЗаписи - Строка - ИдентификаторУчетнойЗаписи, +// см. СервисНастроекЭДОКлиентСервер.ОписаниеИзмененийДанныхАбонентаСервисаНастроек // Возвращаемое значение: // Структура: // * Результат - Булево - данные абонента отправлены в сервис // * КонтекстДиагностики - см. ОбработкаНеисправностейБЭД.НовыйКонтекстДиагностики -Функция ОтправитьДанныеАбонентаВСервисНастроек(ИдентификаторУчетнойЗаписи) Экспорт +Функция ОтправитьДанныеАбонентаВСервисНастроек(ДанныеУчетнойЗаписи) Экспорт + + Отказ = Ложь; + ЭтоНовыеДанные = ТипЗнч(ДанныеУчетнойЗаписи) = Тип("Структура"); + ИдентификаторУчетнойЗаписи = ?(ЭтоНовыеДанные, ДанныеУчетнойЗаписи.ИдентификаторУчетнойЗаписи, ДанныеУчетнойЗаписи); КонтекстДиагностики = ОбработкаНеисправностейБЭД.НовыйКонтекстДиагностики(); СинхронизацияЭДОКлиентСервер.УстановитьТекущуюУчетнуюЗапись(КонтекстДиагностики, ИдентификаторУчетнойЗаписи); - Отказ = Ложь; Запросы = Новый Массив; ЗапросФорматов = ЭлектронныеДокументыЭДО.ЗапросФорматовЭлектронныхДокументов("ФорматыЭлектронныхДокументов"); @@ -889,47 +899,61 @@ Запрос = Новый Запрос; Запрос.Текст = - "ВЫБРАТЬ - | УчетныеЗаписиЭДО.НазначениеУчетнойЗаписи КАК НазначениеУчетнойЗаписи, - | УчетныеЗаписиЭДО.ПодробноеОписаниеУчетнойЗаписи КАК ПодробноеОписаниеУчетнойЗаписи, - | УчетныеЗаписиЭДО.Организация КАК Организация - |ИЗ - | УчетныеЗаписиЭДО КАК УчетныеЗаписиЭДО - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | СертификатыКлючейЭлектроннойПодписиИШифрования.Отпечаток КАК imprint, - | СертификатыКлючейЭлектроннойПодписиИШифрования.ДействителенДо КАК expireDate - |ИЗ - | СертификатыУчетныхЗаписейЭДО КАК СертификатыУчетныхЗаписейЭДО - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.СертификатыКлючейЭлектроннойПодписиИШифрования КАК СертификатыКлючейЭлектроннойПодписиИШифрования - | ПО СертификатыУчетныхЗаписейЭДО.Сертификат = СертификатыКлючейЭлектроннойПодписиИШифрования.Ссылка - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | РасшифровкаФорматов.Формат КАК Формат, - | РасшифровкаФорматов.ВариантЗаполнения КАК ВариантЗаполнения - |ПОМЕСТИТЬ РасшифровкаФорматов - |ИЗ - | &Расшифровка КАК РасшифровкаФорматов - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | ФорматыЭлектронныхДокументов.ИдентификаторСервиса КАК formatUeid, - | РасшифровкаФорматов.ВариантЗаполнения КАК fillOption - |ИЗ - | РасшифровкаФорматов КАК РасшифровкаФорматов - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ФорматыЭлектронныхДокументов КАК ФорматыЭлектронныхДокументов - | ПО РасшифровкаФорматов.Формат = ФорматыЭлектронныхДокументов.Формат"; + "ВЫБРАТЬ + | УчетныеЗаписиЭДО.НазначениеУчетнойЗаписи КАК НазначениеУчетнойЗаписи, + | УчетныеЗаписиЭДО.ПодробноеОписаниеУчетнойЗаписи КАК ПодробноеОписаниеУчетнойЗаписи, + | УчетныеЗаписиЭДО.НеИспользоватьПриглашения КАК НеИспользоватьПриглашения, + | УчетныеЗаписиЭДО.Организация КАК Организация + |ИЗ + | УчетныеЗаписиЭДО КАК УчетныеЗаписиЭДО + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | СертификатыКлючей.Отпечаток КАК imprint, + | СертификатыКлючей.ДействителенДо КАК expireDate + |ИЗ + | СертификатыУчетныхЗаписейЭДО КАК СертификатыУчетныхЗаписейЭДО + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.СертификатыКлючейЭлектроннойПодписиИШифрования КАК СертификатыКлючей + | ПО СертификатыУчетныхЗаписейЭДО.Сертификат = СертификатыКлючей.Ссылка + | + |ОБЪЕДИНИТЬ + | + |ВЫБРАТЬ + | СертификатыКлючей.Отпечаток, + | СертификатыКлючей.ДействителенДо + |ИЗ + | Справочник.СертификатыКлючейЭлектроннойПодписиИШифрования КАК СертификатыКлючей + |ГДЕ + | СертификатыКлючей.Ссылка В (&СписокСертификатов) + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | РасшифровкаФорматов.Формат КАК Формат, + | РасшифровкаФорматов.ВариантЗаполнения КАК ВариантЗаполнения + |ПОМЕСТИТЬ РасшифровкаФорматов + |ИЗ + | &Расшифровка КАК РасшифровкаФорматов + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ФорматыЭлектронныхДокументов.ИдентификаторСервиса КАК formatUeid, + | РасшифровкаФорматов.ВариантЗаполнения КАК fillOption + |ИЗ + | РасшифровкаФорматов КАК РасшифровкаФорматов + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ФорматыЭлектронныхДокументов КАК ФорматыЭлектронныхДокументов + | ПО РасшифровкаФорматов.Формат = ФорматыЭлектронныхДокументов.Формат + |"; ИтоговыйЗапрос = ОбщегоНазначенияБЭД.СоединитьЗапросы(Запрос, Запросы); Расшифровка = ЭлектронныеДокументыЭДО.РасшифровкаВариантовЗаполненияФорматовЭДО(); ИтоговыйЗапрос.УстановитьПараметр("Расшифровка" , Расшифровка); ИтоговыйЗапрос.УстановитьПараметр("ИдентификаторЭДО", ИдентификаторУчетнойЗаписи); + ИтоговыйЗапрос.УстановитьПараметр("СписокСертификатов", + ?(ЭтоНовыеДанные, ДанныеУчетнойЗаписи.СертификатыАбонента, Неопределено)); РезультатЗапроса = ИтоговыйЗапрос.ВыполнитьПакет(); ДанныеПоУчетнойЗаписи = РезультатЗапроса[3].Выгрузить()[0]; @@ -941,10 +965,10 @@ ИмяРеквизитаИННОрганизации + ", " + ИмяРеквизитаКППОрганизации); ОписаниеДанных = НовоеОписаниеОтправкиДанныхАбонентаВСервисеНастроек(); - ОписаниеДанных.ИНН = СокрЛП(ПараметрыОрганизации[ИмяРеквизитаИННОрганизации]); - ОписаниеДанных.КПП = СокрЛП(ПараметрыОрганизации[ИмяРеквизитаКППОрганизации]); + ОписаниеДанных.ИНН = СокрЛП(ПараметрыОрганизации[ИмяРеквизитаИННОрганизации]); + ОписаниеДанных.КПП = СокрЛП(ПараметрыОрганизации[ИмяРеквизитаКППОрганизации]); ОписаниеДанных.ИдентификаторЭДО = ИдентификаторУчетнойЗаписи; - ОписаниеДанных.Версия = Метаданные.Версия; + ОписаниеДанных.Версия = Метаданные.Версия; СертификатыАбонента = Новый Массив; Для Каждого СтокаТЧ Из РезультатЗапроса[4].Выгрузить() Цикл @@ -953,17 +977,19 @@ Сертификат = Новый Структура; Сертификат.Вставить("imprint" , СтокаТЧ.imprint); - Сертификат.Вставить("expireDate", СтрЗаменить(ДатаJSON,"+",".0+")); + Сертификат.Вставить("expireDate", СтрЗаменить(ДатаJSON, "+", ".0+")); СертификатыАбонента.Добавить(Сертификат); + КонецЦикла; ТаблицаФорматов = РезультатЗапроса[6].Выгрузить(); ТаблицаФорматов.Сортировать("formatUeid"); ОписаниеДанных.ВариантыЗаполненияФорматов = ОбщегоНазначения.ТаблицаЗначенийВМассив(ТаблицаФорматов); - ОписаниеДанных.СертификатыАбонента = СертификатыАбонента; + ОписаниеДанных.СертификатыАбонента = СертификатыАбонента; - ЗаполнитьЗначенияСвойств(ОписаниеДанных, ДанныеПоУчетнойЗаписи, "НазначениеУчетнойЗаписи, ПодробноеОписаниеУчетнойЗаписи"); + ЗаполнитьЗначенияСвойств(ОписаниеДанных, ?(ЭтоНовыеДанные, ДанныеУчетнойЗаписи, ДанныеПоУчетнойЗаписи), + "НазначениеУчетнойЗаписи, ПодробноеОписаниеУчетнойЗаписи, НеИспользоватьПриглашения"); ПараметрыКоманды = ПараметрыКомандыОтправкаДанныхАбонентаВСервисНастроек(ОписаниеДанных, Отказ, КонтекстДиагностики); @@ -971,7 +997,7 @@ ВыполнитьКомандуСервиса(ПараметрыКоманды, Отказ, КонтекстДиагностики); КонецЕсли; - Если Не Отказ Тогда + Если Не ЭтоНовыеДанные И Не Отказ Тогда УчетныеЗаписиЭДО.ИзменитьВерсиюКонфигурации(ИдентификаторУчетнойЗаписи, ОписаниеДанных.Версия); КонецЕсли; @@ -1957,7 +1983,7 @@ #Область Версия_1_9_1 Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "1.10.1.52"; + Обработчик.Версия = "1.10.1.67"; Обработчик.РежимВыполнения = "Отложенно"; Обработчик.ЗапускатьИВПодчиненномУзлеРИБСФильтрами = Истина; Обработчик.Процедура = "РегистрыСведений.ОператорыЭДО.ОбработатьДанныеДляПереходаНаНовуюВерсию"; @@ -1985,7 +2011,7 @@ Обработчик.Комментарий = НСтр("ru = '1С:Обмен с контрагентами: обновление операторов ЭДО (начальное заполнение).'"); Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "1.10.1.52"; + Обработчик.Версия = "1.10.1.67"; Обработчик.РежимВыполнения = "Отложенно"; Обработчик.ЗапускатьИВПодчиненномУзлеРИБСФильтрами = Истина; Обработчик.Процедура = "РегистрыСведений.СовместимостьОператоровЭДО.ОбработатьДанныеДляПереходаНаНовуюВерсию"; @@ -2322,18 +2348,33 @@ КонецФункции // Описание параметров отправки данных в сервис 1С:Сервис настроек. +// +// Возвращаемое значение: +// Структура - Новое описание отправки данных абонента в сервисе настроек: +// * ИНН - Строка +// * КПП - Строка +// * ИдентификаторЭДО - Строка +// * НазначениеУчетнойЗаписи - Строка +// * Версия - Строка +// * ПодробноеОписаниеУчетнойЗаписи - Строка +// * СертификатыАбонента - Массив из Структура: +// ** imprint - Строка +// ** expireDate - Дата +// * ВариантыЗаполненияФорматов - Массив из Структура см. ТаблицуФорматов +// * НеИспользоватьПриглашения - Булево // Функция НовоеОписаниеОтправкиДанныхАбонентаВСервисеНастроек() Результат = Новый Структура; - Результат.Вставить("ИНН" , ""); - Результат.Вставить("КПП" , ""); - Результат.Вставить("ИдентификаторЭДО" , ""); - Результат.Вставить("НазначениеУчетнойЗаписи" , ""); - Результат.Вставить("Версия " , ""); - Результат.Вставить("ПодробноеОписаниеУчетнойЗаписи" , ""); - Результат.Вставить("СертификатыАбонента" , Новый Массив); - Результат.Вставить("ВариантыЗаполненияФорматов" , Новый Массив); + Результат.Вставить("ИНН", ""); + Результат.Вставить("КПП", ""); + Результат.Вставить("ИдентификаторЭДО", ""); + Результат.Вставить("НазначениеУчетнойЗаписи", ""); + Результат.Вставить("Версия", ""); + Результат.Вставить("ПодробноеОписаниеУчетнойЗаписи", ""); + Результат.Вставить("СертификатыАбонента", Новый Массив); + Результат.Вставить("ВариантыЗаполненияФорматов", Новый Массив); + Результат.Вставить("НеИспользоватьПриглашения", Ложь); Возврат Результат; @@ -2343,7 +2384,10 @@ // // Параметры: // ПараметрыЗапроса - Структура - Параметры запроса. -// +// Отказ - Булево +// КонтекстДиагностики - см. ОбработкаНеисправностейБЭД.НовыйКонтекстДиагностики +// - Неопределено +// // Возвращаемое значение: // Структура - параметры команды ВыполнитьКомандуСервиса. // @@ -2382,6 +2426,10 @@ ОписаниеИдентификатора.Вставить("certificates" , ПараметрыЗапроса.СертификатыАбонента); ОписаниеИдентификатора.Вставить("documentTypes" , ПараметрыЗапроса.ВариантыЗаполненияФорматов); + Если СервисНастроекЭДОПовтИсп.ОператорПоддерживаетВерсиюФорматаРегистрации(Лев(Идентификатор, 3), "5.04") Тогда + ОписаниеИдентификатора.Вставить("noInvitations", ПараметрыЗапроса.НеИспользоватьПриглашения); + КонецЕсли; + СтруктураJSON.Вставить("identifierInfo", ОписаниеИдентификатора); ТекстJSON = ОбщегоНазначенияБЭД.JSONСтрока(СтруктураJSON); @@ -2747,6 +2795,21 @@ НоваяСтрока.СпособОбменаЭД = СпособОбменаПоИдентификаторуСервиса(Абонент.provider); КонецЕсли; + // Если оператор еще официально не готов к схеме работы без приглашений, или наблюдаются проблемы в работе + // без приглашений, убираем признак по абонентам. + Если СервисНастроекЭДОПовтИсп.ОператорПоддерживаетОбменБезПриглашений(НоваяСтрока.ОператорЭДО) Тогда + Если Абонент.Свойство("noInvitations") Тогда + НоваяСтрока.НеТребуетПриглашений = Абонент.noInvitations; + КонецЕсли; + Иначе + НоваяСтрока.НеТребуетПриглашений = Ложь; + КонецЕсли; + + Если Абонент.Свойство("abonentDocTypes") Тогда + НоваяСтрока.КодыПоддерживаемыхТиповДокументов = ?(ЗначениеЗаполнено(Абонент.abonentDocTypes), + ОбщегоНазначения.ЗначениеВJSON(Абонент.abonentDocTypes), ""); + КонецЕсли; + КонецЦикла; Возврат Таблица; @@ -3039,8 +3102,11 @@ НоваяСтрока.МаксимальноеКоличествоЭДВПакете = ОператорЭДО.maximumQuantityDocumentsInPacket; НоваяСтрока.МаксимальныйРазмерПакетаЭД = ОператорЭДО.maximumPacketSize; НоваяСтрока.КодОшибкиНедействительныхСертификатов = ОператорЭДО.inactiveCertificatesErrorCode; - НоваяСтрока.ВерсияПоддерживаемогоРегистрационногоПакета = ОператорЭДО.regPackageVersion; - НоваяСтрока.ПоддерживаетсяОбменБезПриглашений = ОператорЭДО.isNoInvitationsEnabled; + // Отключено обновление версии поддерживаемого пакета, для включения поддержки нужно получать данные + // из параметров ВерсияПоддерживаемогоРегистрационногоПакета = ОператорЭДО.regPackageVersion и + // ПоддерживаетсяОбменБезПриглашений = ОператорЭДО.isNoInvitationsEnabled + НоваяСтрока.ВерсияПоддерживаемогоРегистрационногоПакета = "5.02"; + НоваяСтрока.ПоддерживаетсяОбменБезПриглашений = Ложь; КонецЦикла; ДатаПоследнегоИзменения = ДатаИзJsonСПроверкой(ПолученныеДанные.lastChangeDate, ФорматДатыJSON.ISO); @@ -3261,6 +3327,8 @@ // * ОператорЭДО - Строка // * ПоддерживаемыеФорматыЭД - Массив из Строка // * ЭтоПользователь1С - Булево +// * НеТребуетПриглашений - Булево +// * КодыПоддерживаемыхТиповДокументов - Строка Функция НоваяТаблицаАбонентов() Таблица = Новый ТаблицаЗначений; @@ -3275,6 +3343,8 @@ Таблица.Колонки.Добавить("ПоддерживаемыеФорматыЭД" , Типы().Массив); Таблица.Колонки.Добавить("ЭтоПользователь1С" , Типы().Булево); Таблица.Колонки.Добавить("СпособОбменаЭД" , Типы().СпособыОбменаЭД); + Таблица.Колонки.Добавить("НеТребуетПриглашений", Типы().Булево); + Таблица.Колонки.Добавить("КодыПоддерживаемыхТиповДокументов", Типы().Строка); Возврат Таблица; diff --git a/Конфигурация/CommonModules/СервисНастроекЭДОВызовСервера/Ext/Module.bsl b/Конфигурация/CommonModules/СервисНастроекЭДОВызовСервера/Ext/Module.bsl index f98c59a23..61f93eaac 100644 --- a/Конфигурация/CommonModules/СервисНастроекЭДОВызовСервера/Ext/Module.bsl +++ b/Конфигурация/CommonModules/СервисНастроекЭДОВызовСервера/Ext/Module.bsl @@ -4,13 +4,14 @@ // Запуск длительной операции отправки данных об абоненте в сервис настроек. // // Параметры: -// ИдентификаторУчетнойЗаписи - Строка +// ДанныеУчетнойЗаписи - Строка - ИдентификаторУчетнойЗаписи, +// см. СервисНастроекЭДОКлиентСервер.ОписаниеИзмененийДанныхАбонентаСервисаНастроек // ИдентификаторФормы - УникальныйИдентификатор // // Возвращаемое значение: // См. ДлительныеОперации.ВыполнитьФункцию // -Функция НачатьОтправкуДанныхАбонентаВСервисНастроек(ИдентификаторУчетнойЗаписи, ИдентификаторФормы = Неопределено) Экспорт +Функция НачатьОтправкуДанныхАбонентаВСервисНастроек(ДанныеУчетнойЗаписи, ИдентификаторФормы = Неопределено) Экспорт ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияФункции(ИдентификаторФормы); ПараметрыВыполнения.НаименованиеФоновогоЗадания = НСтр("ru = 'Отправка данных абонента в сервис настроек 1С-ЭДО'"); @@ -18,7 +19,7 @@ ПараметрыВыполнения.ОжидатьЗавершение = 0; Возврат ДлительныеОперации.ВыполнитьФункцию(ПараметрыВыполнения, - "СервисНастроекЭДО.ОтправитьДанныеАбонентаВСервисНастроек", ИдентификаторУчетнойЗаписи); + "СервисНастроекЭДО.ОтправитьДанныеАбонентаВСервисНастроек", ДанныеУчетнойЗаписи); КонецФункции @@ -33,4 +34,18 @@ КонецФункции +// см. РегистрыСведений.ОператорыЭДО.ВерсияПоддерживаемогоРегистрационногоПакета +Функция ВерсияПоддерживаемогоРегистрационногоПакетаОператора(ИдентификаторОператора) Экспорт + + Возврат СервисНастроекЭДОПовтИсп.ВерсияПоддерживаемогоРегистрационногоПакетаОператора(ИдентификаторОператора); + +КонецФункции + +// см. СервисНастроекЭДОПовтИсп.ОператорПоддерживаетВерсиюФорматаРегистрации +Функция ОператорПоддерживаетВерсиюФорматаРегистрации(ИдентификаторОператора, Версия) Экспорт + + Возврат СервисНастроекЭДОПовтИсп.ОператорПоддерживаетВерсиюФорматаРегистрации(ИдентификаторОператора, Версия); + +КонецФункции + #КонецОбласти \ No newline at end of file diff --git a/Конфигурация/CommonModules/СервисНастроекЭДОКлиент/Ext/Module.bsl b/Конфигурация/CommonModules/СервисНастроекЭДОКлиент/Ext/Module.bsl index b52adf711..fa1c47998 100644 --- a/Конфигурация/CommonModules/СервисНастроекЭДОКлиент/Ext/Module.bsl +++ b/Конфигурация/CommonModules/СервисНастроекЭДОКлиент/Ext/Module.bsl @@ -5,7 +5,8 @@ // Отправляет данные абонента в сервис настроек. // // Параметры: -// ИдентификаторУчетнойЗаписи - Строка +// ДанныеУчетнойЗаписи - Строка - ИдентификаторУчетнойЗаписи, +// см. СервисНастроекЭДОКлиентСервер.ОписаниеИзмененийДанныхАбонентаСервисаНастроек // ОписаниеОповещения - ОписаниеОповещения - содержит описание процедуры, которая будет вызвана после отправки данных // со следующими параметрами: // Результат - см. СервисНастроекЭДО.ОтправитьДанныеАбонентаВСервисНастроек @@ -13,7 +14,7 @@ // объекта ОписаниеОповещения. // Форма - ФормаКлиентскогоПриложения - форма, во временное хранилище которой надо поместить результат // выполнения процедуры. -Процедура ОтправитьДанныеАбонентаВСервисНастроек(ИдентификаторУчетнойЗаписи, ОписаниеОповещения, Форма = Неопределено) Экспорт +Процедура ОтправитьДанныеАбонентаВСервисНастроек(ДанныеУчетнойЗаписи, ОписаниеОповещения, Форма = Неопределено) Экспорт ПараметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(Форма); ПараметрыОжидания.ВыводитьОкноОжидания = Ложь; @@ -22,7 +23,7 @@ ИдентификаторФормы = ?(Форма = Неопределено, Новый УникальныйИдентификатор(), Форма.УникальныйИдентификатор); ДлительнаяОперация = СервисНастроекЭДОВызовСервера.НачатьОтправкуДанныхАбонентаВСервисНастроек( - ИдентификаторУчетнойЗаписи, ИдентификаторФормы); + ДанныеУчетнойЗаписи, ИдентификаторФормы); ДлительныеОперацииКлиент.ОжидатьЗавершение(ДлительнаяОперация, ОписаниеОповещения, diff --git a/Конфигурация/CommonModules/СервисНастроекЭДОКлиентСервер/Ext/Module.bsl b/Конфигурация/CommonModules/СервисНастроекЭДОКлиентСервер/Ext/Module.bsl index 95e2bad67..ecf02ebe8 100644 --- a/Конфигурация/CommonModules/СервисНастроекЭДОКлиентСервер/Ext/Module.bsl +++ b/Конфигурация/CommonModules/СервисНастроекЭДОКлиентСервер/Ext/Module.bsl @@ -1,6 +1,32 @@  #Область СлужебныйПрограммныйИнтерфейс +#Область Абоненты + +// Возвращает структуру описывающую не записанные изменения для передачи в сервис настроек +// +// Возвращаемое значение: +// Структура: +// * ИдентификаторУчетнойЗаписи - Строка +// * НазначениеУчетнойЗаписи - Строка +// * ПодробноеОписаниеУчетнойЗаписи - Строка +// * НеИспользоватьПриглашения - Булево +// * СертификатыАбонента - Массив из СправочникСсылка.СертификатыКлючейЭлектроннойПодписиИШифрования +Функция ОписаниеИзмененийДанныхАбонентаСервисаНастроек() Экспорт + + ОписаниеИзменений = Новый Структура; + ОписаниеИзменений.Вставить("ИдентификаторУчетнойЗаписи", ""); + ОписаниеИзменений.Вставить("НазначениеУчетнойЗаписи", ""); + ОписаниеИзменений.Вставить("ПодробноеОписаниеУчетнойЗаписи", ""); + ОписаниеИзменений.Вставить("НеИспользоватьПриглашения", Ложь); + ОписаниеИзменений.Вставить("СертификатыАбонента", Новый Массив); + + Возврат ОписаниеИзменений; + +КонецФункции + +#КонецОбласти + #Область Операторы // Идентификатор Такскома @@ -23,6 +49,13 @@ КонецФункции +// см. СервисНастроекЭДОПовтИсп.ОператорПоддерживаетВерсиюФорматаРегистрации +Функция ОператорПоддерживаетВерсиюФорматаРегистрации(ИдентификаторОператора, Версия) Экспорт + + Возврат СервисНастроекЭДОВызовСервера.ОператорПоддерживаетВерсиюФорматаРегистрации(ИдентификаторОператора, Версия); + +КонецФункции + #КонецОбласти #КонецОбласти diff --git a/Конфигурация/CommonModules/СервисНастроекЭДОПовтИсп/Ext/Module.bsl b/Конфигурация/CommonModules/СервисНастроекЭДОПовтИсп/Ext/Module.bsl index 7d257583d..28219a23d 100644 --- a/Конфигурация/CommonModules/СервисНастроекЭДОПовтИсп/Ext/Module.bsl +++ b/Конфигурация/CommonModules/СервисНастроекЭДОПовтИсп/Ext/Module.bsl @@ -1,4 +1,31 @@ //@strict-types +#Область СлужебныйПрограммныйИнтерфейс + +// Оператор поддерживает формат пакета регистрации с версией не ниже указанной. +// +// Параметры: +// ИдентификаторОператора - Строка - идентификатор оператора +// Версия - Строка - целевая версия для сравнения +// +// Возвращаемое значение: +// Булево - Истина, если поддерживает +Функция ОператорПоддерживаетВерсиюФорматаРегистрации(ИдентификаторОператора, Версия) Экспорт + + Если Не ЗначениеЗаполнено(ИдентификаторОператора) Тогда + Возврат Ложь; + КонецЕсли; + + ВерсияОператора = РегистрыСведений.ОператорыЭДО.ВерсияПоддерживаемогоРегистрационногоПакета(ИдентификаторОператора); + + Если Не ЗначениеЗаполнено(ВерсияОператора) Тогда + Возврат Ложь; + КонецЕсли; + + Возврат СервисЭДОКлиентСервер.СравнитьВерсииФорматовРегистрации(ВерсияОператора, Версия) >= 0; + +КонецФункции + +#КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -47,4 +74,18 @@ КонецФункции +// см. РегистрыСведений.ОператорыЭДО.ВерсияПоддерживаемогоРегистрационногоПакета +Функция ВерсияПоддерживаемогоРегистрационногоПакетаОператора(ИдентификаторОператора) Экспорт + + Возврат РегистрыСведений.ОператорыЭДО.ВерсияПоддерживаемогоРегистрационногоПакета(ИдентификаторОператора); + +КонецФункции + +// см. РегистрыСведений.ОператорыЭДО.ОператорПоддерживаетОбменБезПриглашений +Функция ОператорПоддерживаетОбменБезПриглашений(ИдентификаторОператора) Экспорт + + Возврат РегистрыСведений.ОператорыЭДО.ОператорПоддерживаетОбменБезПриглашений(ИдентификаторОператора); + +КонецФункции + #КонецОбласти \ No newline at end of file diff --git a/Конфигурация/CommonModules/СервисСверкиРасчетовУНФ/Ext/Module.bsl b/Конфигурация/CommonModules/СервисСверкиРасчетовУНФ/Ext/Module.bsl index d6340d1d7..fde5cfb89 100644 --- a/Конфигурация/CommonModules/СервисСверкиРасчетовУНФ/Ext/Module.bsl +++ b/Конфигурация/CommonModules/СервисСверкиРасчетовУНФ/Ext/Module.bsl @@ -1030,7 +1030,7 @@ | КОНЕЦ КАК НомерДокумента, | ВЫБОР | КОГДА УчетПоКомпании.Значение - | ТОГДА РасчетыСПокупателямиОбороты.Договор.Владелец + | ТОГДА РасчетыСПокупателямиОбороты.Договор.Организация | ИНАЧЕ РасчетыСПокупателямиОбороты.Организация | КОНЕЦ КАК Организация, | РасчетыСПокупателямиОбороты.Контрагент КАК Контрагент, @@ -1096,7 +1096,7 @@ | КОНЕЦ, | ВЫБОР | КОГДА УчетПоКомпании.Значение - | ТОГДА РасчетыСПоставщикамиОбороты.Договор.Владелец + | ТОГДА РасчетыСПоставщикамиОбороты.Договор.Организация | ИНАЧЕ РасчетыСПоставщикамиОбороты.Организация | КОНЕЦ, | РасчетыСПоставщикамиОбороты.Контрагент, @@ -1141,7 +1141,7 @@ | РасчетыСПрочимиКонтрагентамиОбороты.Регистратор.Номер, | ВЫБОР | КОГДА УчетПоКомпании.Значение - | ТОГДА РасчетыСПрочимиКонтрагентамиОбороты.Договор.Владелец + | ТОГДА РасчетыСПрочимиКонтрагентамиОбороты.Договор.Организация | ИНАЧЕ РасчетыСПрочимиКонтрагентамиОбороты.Организация | КОНЕЦ, | РасчетыСПрочимиКонтрагентамиОбороты.Контрагент, @@ -1209,7 +1209,13 @@ | ВложенныйЗапрос.ЭтоРасчетыСПоставщиком, | ВложенныйЗапрос.Регистратор, | ВложенныйЗапрос.ВидОперации, - | ВложенныйЗапрос.Период"; + | ВложенныйЗапрос.Период" + + " + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |"; + КонецФункции diff --git a/Конфигурация/CommonModules/СервисЭДО/Ext/Module.bsl b/Конфигурация/CommonModules/СервисЭДО/Ext/Module.bsl index 96f8d62ca..e52075fab 100644 --- a/Конфигурация/CommonModules/СервисЭДО/Ext/Module.bsl +++ b/Конфигурация/CommonModules/СервисЭДО/Ext/Module.bsl @@ -85,7 +85,7 @@ Если Не ЭтоОперацияПоТокену(ПараметрыОперации) И Не ЭтоОперацияPing(ПараметрыОперации) И ПараметрыОперации.СпособОбмена = Перечисления.СпособыОбменаЭД.ЧерезСервис1СЭДО - И Не ЕстьДоступКВебСервису1CЭДО(КонтекстДиагностики) Тогда + И Не ЕстьДоступКВебСервису1СЭДО(КонтекстДиагностики) Тогда РезультатВыполненияОперации.ОшибкаОператора = НоваяОшибкаОператора(); РезультатВыполненияОперации.ОшибкаОператора.Текст = ТекстОшибкиДоступа; @@ -398,6 +398,11 @@ ПараметрыВыполненияОперации.ТелоЗапроса = РегистрационныйПакет; ПараметрыВыполненияОперации.Таймаут = ИнтернетСоединениеБЭД.ТаймаутПоРазмеруФайла( РегистрационныйПакет.Размер()); + + Если ОбщегоНазначения.ПодсистемаСуществует("ЭлектронноеВзаимодействие.ОбменСГИСЭПД") Тогда + МодульОбменСГИСЭПД = ОбщегоНазначения.ОбщийМодуль("ОбменСГИСЭПД"); + МодульОбменСГИСЭПД.ПередОтправкойРегистрационногоПакета1СЭДО(ПараметрыВыполненияОперации); + КонецЕсли; Результат = ВыполнитьОперацию(ПараметрыВыполненияОперации, КонтекстДиагностики); @@ -511,7 +516,7 @@ // ПараметрыРегистрации - см. СервисЭДОКлиент.НовыеПараметрыРегистрацииВСервисе1СЭДО // // Возвращаемое значение: -// Структура: +// Структура: // * РеквизитыПакета - Структура // * ДвоичныеДанныеДляОператораЭДО - ДвоичныеДанные // * ДвоичныеДанныеСоглашенияНаПодключениеЭДО - ДвоичныеДанные @@ -797,6 +802,8 @@ МодульОбменСГИСЭПД.ПередВыполнениемОперацииОтправитьКонтейнер(ПараметрыВыполненияОперации, ОписаниеКонтейнера); КонецЕсли; + ДобавитьТокенВПараметрыОперации(ПараметрыВыполненияОперации, КлючСинхронизации); + РезультатВыполненияОперации = ВыполнитьОперацию(ПараметрыВыполненияОперации, КонтекстДиагностики, КлючСинхронизации); Успех = РезультатВыполненияОперации.Успех; @@ -1167,6 +1174,11 @@ ПараметрыСервиса.АдресВебСервиса = "https://1c-edo.ru/API"; ПараметрыСервиса.АдресДляПроверкиАктивности = "https://1c-edo.ru/API/GetInfo/1"; + Если ОбщегоНазначения.ПодсистемаСуществует("ЭлектронноеВзаимодействие.ОбменСГИСЭПД") Тогда + МодульОбменСГИСЭПД = ОбщегоНазначения.ОбщийМодуль("ОбменСГИСЭПД"); + МодульОбменСГИСЭПД.ПриОпределенииПараметровСервиса1СЭДО(ПараметрыСервиса); + КонецЕсли; + Возврат ПараметрыСервиса; КонецФункции @@ -1258,8 +1270,18 @@ КонецФункции +// Это код ошибки повторной отправки. +// +// Параметры: +// КодОшибки - Число - Код ошибки +// +// Возвращаемое значение: +// Булево - Это код ошибки повторной отправки +// Функция ЭтоКодОшибкиПовторнойОтправки(КодОшибки) Экспорт + Возврат КодОшибки = 2301 ИЛИ КодОшибки = 2401; + КонецФункции // Определяет, является ли код ошибки кодом неизвестной ошибки. @@ -1392,20 +1414,20 @@ // * ИдФайл - Строка - Используется для загрузки исходящих титулов в подсистеме ОбменСГИСЭПД. Функция НоваяТаблицаКонтейнеров() Экспорт - ТЗ = Новый ТаблицаЗначений; - ТЗ.Колонки.Добавить("ИДПакета", Новый ОписаниеТипов("Строка")); - ТЗ.Колонки.Добавить("ИДДокументооборота", Новый ОписаниеТипов("Строка")); - ТЗ.Колонки.Добавить("КодТранзакции", Новый ОписаниеТипов("Строка")); - ТЗ.Колонки.Добавить("КодРегламента", Новый ОписаниеТипов("Строка")); - ТЗ.Колонки.Добавить("ИДДокумента", Новый ОписаниеТипов("Строка", , + ТаблицаКонтейнеров = Новый ТаблицаЗначений; + ТаблицаКонтейнеров.Колонки.Добавить("ИДПакета", Новый ОписаниеТипов("Строка")); + ТаблицаКонтейнеров.Колонки.Добавить("ИДДокументооборота", Новый ОписаниеТипов("Строка")); + ТаблицаКонтейнеров.Колонки.Добавить("КодТранзакции", Новый ОписаниеТипов("Строка")); + ТаблицаКонтейнеров.Колонки.Добавить("КодРегламента", Новый ОписаниеТипов("Строка")); + ТаблицаКонтейнеров.Колонки.Добавить("ИДДокумента", Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(80, ДопустимаяДлина.Переменная))); - ТЗ.Колонки.Добавить("ДвоичныеДанные"); - ТЗ.Колонки.Добавить("Приоритет", Новый ОписаниеТипов("Число")); - ТЗ.Колонки.Добавить("ВидСервисаЭДО", Новый ОписаниеТипов("ПеречислениеСсылка.ВидыСервисовЭДО")); - ТЗ.Колонки.Добавить("АдресРесурсаКонтрагента", Новый ОписаниеТипов("Строка")); - ТЗ.Колонки.Добавить("ИдФайл", Новый ОписаниеТипов("Строка")); + ТаблицаКонтейнеров.Колонки.Добавить("ДвоичныеДанные"); + ТаблицаКонтейнеров.Колонки.Добавить("Приоритет", Новый ОписаниеТипов("Число")); + ТаблицаКонтейнеров.Колонки.Добавить("ВидСервисаЭДО", Новый ОписаниеТипов("ПеречислениеСсылка.ВидыСервисовЭДО")); + ТаблицаКонтейнеров.Колонки.Добавить("АдресРесурсаКонтрагента", Новый ОписаниеТипов("Строка")); + ТаблицаКонтейнеров.Колонки.Добавить("ИдФайл", Новый ОписаниеТипов("Строка")); - Возврат ТЗ; + Возврат ТаблицаКонтейнеров; КонецФункции @@ -2051,7 +2073,7 @@ ДополнитьДаннымиЭПД = Ложь; КонецЕсли; - ТЗ = Результат.ЭлектронныеДокументы; + ТаблицаЭД = Результат.ЭлектронныеДокументы; СписокЭД_XML = РезультатВыполненияОперации.Ответ.ПолучитьТелоКакСтроку(); @@ -2086,7 +2108,7 @@ Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента И ЧтениеXML.ЛокальноеИмя = "Identifiers" Тогда - СтрТЗ = ТЗ.Добавить(); + СтрТЗ = ТаблицаЭД.Добавить(); СтрТЗ.ИДПакета = ЧтениеXML.ПолучитьАтрибут("InternalDocumentGroupId"); СтрТЗ.ИДДокументооборота = ИДДокументооборота; СтрТЗ.ИДДокумента = ЧтениеXML.ПолучитьАтрибут("InternalId"); @@ -2114,7 +2136,8 @@ КонецЦикла; - ТЗ.Сортировать("Приоритет"); + ТаблицаЭД.Сортировать("Приоритет"); + КонецЕсли; Результат.ДатаПоследнегоЗапроса = ДатаВремяЗапроса; @@ -2205,12 +2228,12 @@ // Проверяет наличие доступа к веб-сервису 1С-ЭДО. // // Параметры: -// * КонтекстДиагностики - см. ОбработкаНеисправностейБЭД.НовыйКонтекстДиагностики +// КонтекстДиагностики - см. ОбработкаНеисправностейБЭД.НовыйКонтекстДиагностики // // Возвращаемое значение: // Булево - наличие доступа к сервису. // -Функция ЕстьДоступКВебСервису1CЭДО(КонтекстДиагностики) +Функция ЕстьДоступКВебСервису1СЭДО(КонтекстДиагностики) РезультатПроверки = СервисЭДОПовтИспНаВызов.ПроверитьДоступКВебСервису1СЭДО(); @@ -2277,7 +2300,7 @@ // // Возвращаемое значение: // Структура - Описание: -// * ИнтернетПоддержкаПользователейПодключена - Булево - +// * ТребуетсяПодключениеИнтернетПоддержки - Булево - Функция НовыеПараметрыАвторизации() Параметры = Новый Структура; @@ -2616,16 +2639,22 @@ // *** Значение - Структура: // **** ИННДоверителя - Строка // **** ИННПредставителей - Массив из Строка +// ** Комментарий - Строка +// ** СогласенНаОбменБезПриглашений - Булево Функция ДанныеРегистрационнойИнформации(ПараметрыРегистрации, ДанныеОператора, Ошибки) Если Не ЗначениеЗаполнено(ПараметрыРегистрации.Идентификатор) Тогда ПараметрыРегистрации.Идентификатор = РаботаСФайламиБЭД.НовыйUUID(); КонецЕсли; - Если ЗначениеЗаполнено(ПараметрыРегистрации.АдресОрганизацииЗначение) Тогда - СтруктураАдреса = ИнтеграцияБСПБЭД.СведенияОбАдресеПоЗначению(ПараметрыРегистрации.АдресОрганизацииЗначение); - Иначе - СтруктураАдреса = ИнтеграцияБСПБЭД.СведенияОбАдресеПоПредставлению(ПараметрыРегистрации.АдресОрганизации); + АктуальныйФормат = АктуальнаяВерсияФорматаРегистрацииПоОператоруЭДО(ПараметрыРегистрации.ОператорЭДО); + + Если СервисЭДОКлиентСервер.СравнитьВерсииФорматовРегистрации(АктуальныйФормат.Версия, "5.03") < 0 Тогда + Если ЗначениеЗаполнено(ПараметрыРегистрации.АдресОрганизацииЗначение) Тогда + СтруктураАдреса = ИнтеграцияБСПБЭД.СведенияОбАдресеПоЗначению(ПараметрыРегистрации.АдресОрганизацииЗначение); + Иначе + СтруктураАдреса = ИнтеграцияБСПБЭД.СведенияОбАдресеПоПредставлению(ПараметрыРегистрации.АдресОрганизации); + КонецЕсли; КонецЕсли; // Подготовим данные для 1СЭДО @@ -2704,23 +2733,30 @@ РеквизитыПакета.Вставить("Отчество", ПараметрыСертификатаОтчество); РеквизитыПакета.Вставить("ИННДоверителяИДоверенныхЛицДоверенностей", Новый Соответствие); РеквизитыПакета.Вставить("ИННСубъектаСертификатаПодписанта", ИННСубъектаСертификатаПодписанта); + Если СервисЭДОКлиентСервер.СравнитьВерсииФорматовРегистрации(АктуальныйФормат.Версия, "5.04") >= 0 Тогда + РеквизитыПакета.Вставить("Комментарий", ПараметрыРегистрации.Комментарий); + РеквизитыПакета.Вставить("ОбменБезПриглашений", Ложь); + КонецЕсли; СервисЭДОСобытия.ПриФормированииРегистрационнойИнформации(РеквизитыПакета); // Подготовим данные для оператора ЭДО ДеревоРегистрационнойИнформации = ДеревоЭлектронногоДокументаБЭД.ДеревоЭлектронногоДокумента( - "ОбменСКонтрагентами.РегистрационнаяИнформация"); + АктуальныйФормат.ИмяМакета); ЗначенияРеквизитов = Новый Соответствие; // Служебные данные ЗначенияРеквизитов.Вставить("ИдФайл", "registration_" + ПараметрыРегистрации.Идентификатор); ЗначенияРеквизитов.Вставить("ВерсПрог", ФорматыЭДО.ВерсияПрограммы()); - ЗначенияРеквизитов.Вставить("ВерсФорм", "5.02"); + + ЗначенияРеквизитов.Вставить("ВерсФорм", АктуальныйФормат.Версия); ЗначенияРеквизитов.Вставить("КНД", "1115109"); - // Данные по налоговому органу - ЗначенияРеквизитов.Вставить("КодНО", ПараметрыРегистрации.КодНалоговогоОргана); + Если СервисЭДОКлиентСервер.СравнитьВерсииФорматовРегистрации(АктуальныйФормат.Версия, "5.03") < 0 Тогда + // Данные по налоговому органу + ЗначенияРеквизитов.Вставить("КодНО", ПараметрыРегистрации.КодНалоговогоОргана); + КонецЕсли; // Данные по оператору ЭДО ЗначенияРеквизитов.Вставить("ОперЭДО.НаимОрг", ДанныеОператора.Наименование); @@ -2741,6 +2777,17 @@ ИмяБезПодчеркивания = СтрЗаменить(ПараметрыСертификатаИмя, "_", " "); ОтчествоБезПодчеркивания = СтрЗаменить(ПараметрыСертификатаОтчество, "_", " "); + Если Не ПараметрыРегистрации.НеИспользоватьПриглашения = Неопределено + И СервисЭДОКлиентСервер.СравнитьВерсииФорматовРегистрации(АктуальныйФормат.Версия, "5.04") >= 0 Тогда + ЗначенияРеквизитов.Вставить("УчастЭДО.ОбменБезПриглашений", ПараметрыРегистрации.НеИспользоватьПриглашения); + РеквизитыПакета.ОбменБезПриглашений = ПараметрыРегистрации.НеИспользоватьПриглашения; + КонецЕсли; + + Если ЗначениеЗаполнено(ПараметрыРегистрации.Комментарий) + И СервисЭДОКлиентСервер.СравнитьВерсииФорматовРегистрации(АктуальныйФормат.Версия, "5.04") >= 0 Тогда + ЗначенияРеквизитов.Вставить("УчастЭДО.Комментарий", ПараметрыРегистрации.Комментарий); + КонецЕсли; + Если Не ИнтеграцияЭДО.ЭтоФизЛицо(ПараметрыРегистрации.Организация) Тогда ТипУчастника = "ЮЛ"; @@ -2776,24 +2823,28 @@ ЗначенияРеквизитов.Вставить(СтрШаблон("УчастЭДО.ТипУчастника.%1.ДатаПодклЭДО", ТипУчастника), ТекущаяДатаСеанса()); - ЗначенияРеквизитов.Вставить(СтрШаблон("УчастЭДО.ТипУчастника.%1.АдрРФ.Индекс", ТипУчастника), - СтруктураАдреса.Индекс); - ЗначенияРеквизитов.Вставить(СтрШаблон("УчастЭДО.ТипУчастника.%1.АдрРФ.КодРегион", ТипУчастника), - СтруктураАдреса.КодРегиона); - ЗначенияРеквизитов.Вставить(СтрШаблон("УчастЭДО.ТипУчастника.%1.АдрРФ.Район", ТипУчастника), - СтруктураАдреса.Район); - ЗначенияРеквизитов.Вставить(СтрШаблон("УчастЭДО.ТипУчастника.%1.АдрРФ.Город", ТипУчастника), - СтруктураАдреса.Город); - ЗначенияРеквизитов.Вставить(СтрШаблон("УчастЭДО.ТипУчастника.%1.АдрРФ.НаселПункт", ТипУчастника), - СтруктураАдреса.НаселенныйПункт); - ЗначенияРеквизитов.Вставить(СтрШаблон("УчастЭДО.ТипУчастника.%1.АдрРФ.Улица", ТипУчастника), - СтруктураАдреса.Улица); - ЗначенияРеквизитов.Вставить(СтрШаблон("УчастЭДО.ТипУчастника.%1.АдрРФ.Дом", ТипУчастника), - СтруктураАдреса.Дом); - ЗначенияРеквизитов.Вставить(СтрШаблон("УчастЭДО.ТипУчастника.%1.АдрРФ.Корпус", ТипУчастника), - СтруктураАдреса.Корпус); - ЗначенияРеквизитов.Вставить(СтрШаблон("УчастЭДО.ТипУчастника.%1.АдрРФ.Кварт", ТипУчастника), - СтруктураАдреса.Квартира); + Если СервисЭДОКлиентСервер.СравнитьВерсииФорматовРегистрации(АктуальныйФормат.Версия, "5.03") < 0 Тогда + + ЗначенияРеквизитов.Вставить(СтрШаблон("УчастЭДО.ТипУчастника.%1.АдрРФ.Индекс", ТипУчастника), + СтруктураАдреса.Индекс); + ЗначенияРеквизитов.Вставить(СтрШаблон("УчастЭДО.ТипУчастника.%1.АдрРФ.КодРегион", ТипУчастника), + СтруктураАдреса.КодРегиона); + ЗначенияРеквизитов.Вставить(СтрШаблон("УчастЭДО.ТипУчастника.%1.АдрРФ.Район", ТипУчастника), + СтруктураАдреса.Район); + ЗначенияРеквизитов.Вставить(СтрШаблон("УчастЭДО.ТипУчастника.%1.АдрРФ.Город", ТипУчастника), + СтруктураАдреса.Город); + ЗначенияРеквизитов.Вставить(СтрШаблон("УчастЭДО.ТипУчастника.%1.АдрРФ.НаселПункт", ТипУчастника), + СтруктураАдреса.НаселенныйПункт); + ЗначенияРеквизитов.Вставить(СтрШаблон("УчастЭДО.ТипУчастника.%1.АдрРФ.Улица", ТипУчастника), + СтруктураАдреса.Улица); + ЗначенияРеквизитов.Вставить(СтрШаблон("УчастЭДО.ТипУчастника.%1.АдрРФ.Дом", ТипУчастника), + СтруктураАдреса.Дом); + ЗначенияРеквизитов.Вставить(СтрШаблон("УчастЭДО.ТипУчастника.%1.АдрРФ.Корпус", ТипУчастника), + СтруктураАдреса.Корпус); + ЗначенияРеквизитов.Вставить(СтрШаблон("УчастЭДО.ТипУчастника.%1.АдрРФ.Кварт", ТипУчастника), + СтруктураАдреса.Квартира); + + КонецЕсли; СертификатыПользователя = Новый ТаблицаЗначений; СертификатыПользователя.Колонки.Добавить("ДатаНачСертиф"); @@ -3012,7 +3063,10 @@ Функция СформироватьРегистрационнуюИнформациюCML(ДеревоДанных) Ошибки = Неопределено; // служебная переменная для хранения списка возникших ошибок - ПутьКОписанию = "{http://www.1c.ru/edo/registration}.Файл"; + ИдентификаторОператора = ДеревоЭлектронногоДокументаБЭД.ЗначениеРеквизитаВДереве(ДеревоДанных, "ОперЭДО.ИдОперЭДО"); + АктуальныйФормат = АктуальнаяВерсияФорматаРегистрацииПоОператоруЭДО(ИдентификаторОператора); + + ПутьКОписанию = СтрШаблон("{%1}.Файл", АктуальныйФормат.ПространствоИмен); Попытка // Коммерческая информация @@ -3026,7 +3080,9 @@ Документ = РаботаСФайламиБЭД.ПолучитьОбъектТипаCML(ПутьКОписанию + ".Документ"); ЗначенияСвойствXDTO = Новый Соответствие; ЗначенияСвойствXDTO.Вставить("КНД", "КНД"); - ЗначенияСвойствXDTO.Вставить("КодНО", "КодНО"); + Если СервисЭДОКлиентСервер.СравнитьВерсииФорматовРегистрации(АктуальныйФормат.Версия, "5.03") < 0 Тогда + ЗначенияСвойствXDTO.Вставить("КодНО", "КодНО"); + КонецЕсли; РаботаСФайламиБЭД.ЗаполнитьСвойстваXDTOИзДерева(Документ, ЗначенияСвойствXDTO, ДеревоДанных, Ошибки); ОперЭДО = РаботаСФайламиБЭД.ПолучитьОбъектТипаCML(ПутьКОписанию + ".Документ.ОперЭДО"); @@ -3045,8 +3101,20 @@ Если ЗначениеЗаполнено(ДеревоЭлектронногоДокументаБЭД.ЗначениеРеквизитаВДереве(ДеревоДанных, "УчастЭДО.ИдУчастЭДО")) Тогда ЗначенияСвойствXDTO.Вставить("ИдУчастЭДО", "УчастЭДО.ИдУчастЭДО"); КонецЕсли; + Если СервисЭДОКлиентСервер.СравнитьВерсииФорматовРегистрации(АктуальныйФормат.Версия, "5.04") >= 0 Тогда + Комментарий = ДеревоЭлектронногоДокументаБЭД.ЗначениеРеквизитаВДереве(ДеревоДанных, "УчастЭДО.Комментарий", Ложь); + Если ЗначениеЗаполнено(Комментарий) Тогда + ЗначенияСвойствXDTO.Вставить("Комментарий", "УчастЭДО.Комментарий"); + КонецЕсли; + + ОбменБезПриглашений = + ДеревоЭлектронногоДокументаБЭД.ЗначениеРеквизитаВДереве(ДеревоДанных, "УчастЭДО.ОбменБезПриглашений", Ложь); + Если Не ОбменБезПриглашений = Неопределено Тогда + ЗначенияСвойствXDTO.Вставить("ОбменБезПриглашений", "УчастЭДО.ОбменБезПриглашений"); + КонецЕсли; + КонецЕсли; ПараметрыЗаполнения = РаботаСФайламиБЭД.НовыеПараметрыЗаполненияXDTO(); - ПараметрыЗаполнения.НеобязательныеСвойства = "ИдУчастЭДО"; + ПараметрыЗаполнения.НеобязательныеСвойства = "ИдУчастЭДО, Комментарий, ОбменБезПриглашений"; РаботаСФайламиБЭД.ЗаполнитьСвойстваXDTOИзДерева(УчастникЭДО, ЗначенияСвойствXDTO, ДеревоДанных, Ошибки, ПараметрыЗаполнения); @@ -3069,7 +3137,9 @@ РаботаСФайламиБЭД.ЗаполнитьСвойстваXDTOИзДерева(СвЮЛ, ЗначенияСвойствXDTO, ДеревоДанных, Ошибки, ПараметрыЗаполнения); - ЗаполнитьАдресУчастника(ДеревоДанных, СвЮЛ, ТипУчастника, ПутьКОписанию, Ошибки); + Если СервисЭДОКлиентСервер.СравнитьВерсииФорматовРегистрации(АктуальныйФормат.Версия, "5.03") < 0 Тогда + ЗаполнитьАдресУчастника(ДеревоДанных, СвЮЛ, ТипУчастника, ПутьКОписанию, Ошибки); + КонецЕсли; ФИООтв = РаботаСФайламиБЭД.ПолучитьОбъектТипаCML(ПутьКОписанию + ".Документ.УчастЭДО.ЮЛ.ФИООтв"); ЗначенияСвойствXDTO = Новый Соответствие; @@ -3095,7 +3165,9 @@ РаботаСФайламиБЭД.ЗаполнитьСвойстваXDTOИзДерева(СвИП, ЗначенияСвойствXDTO, ДеревоДанных, Ошибки, ПараметрыЗаполнения); - ЗаполнитьАдресУчастника(ДеревоДанных, СвИП, ТипУчастника, ПутьКОписанию, Ошибки); + Если СервисЭДОКлиентСервер.СравнитьВерсииФорматовРегистрации(АктуальныйФормат.Версия, "5.03") < 0 Тогда + ЗаполнитьАдресУчастника(ДеревоДанных, СвИП, ТипУчастника, ПутьКОписанию, Ошибки); + КонецЕсли; ФИО = РаботаСФайламиБЭД.ПолучитьОбъектТипаCML(ПутьКОписанию + ".Документ.УчастЭДО.ИП.ФИО"); ЗначенияСвойствXDTO = Новый Соответствие; @@ -3214,7 +3286,9 @@ ВызватьИсключение ОбщегоНазначенияБЭД.СоединитьОшибки(Ошибки); КонецЕсли; - Возврат РаботаСФайламиБЭД.XDTOВДвоичныеДанные(Файл, Ложь); + ДвоичныеДанныеДляРегистрации = РаботаСФайламиБЭД.XDTOВДвоичныеДанные(Файл, Ложь); + Возврат РегистрационныйПакетСИсправленнымПространствомИмен( + ДвоичныеДанныеДляРегистрации, АктуальныйФормат.ПространствоИмен); Исключение ТекстОшибки = ОбщегоНазначенияБЭД.СоединитьОшибки(Ошибки); @@ -3224,7 +3298,24 @@ ТекстСообщения); Возврат Неопределено; КонецПопытки; + +КонецФункции + +// Регистрационный пакет с исправленным пространством имен. +// +// Параметры: +// ДвоичныеДанные - ДвоичныеДанные +// ТекущееПространствоИмен - Строка +// +// Возвращаемое значение: +// ДвоичныеДанные - Регистрационный пакет с исправленным пространством имен +Функция РегистрационныйПакетСИсправленнымПространствомИмен(ДвоичныеДанные, ТекущееПространствоИмен) + ПространствоИмен = "http://www.1c.ru/edo/registration"; + + СтрокаДанных = ПолучитьСтрокуИзДвоичныхДанных(ДвоичныеДанные, "windows-1251"); + СтрокаДанных = СтрЗаменить(СтрокаДанных, ТекущееПространствоИмен, ПространствоИмен); + Возврат ПолучитьДвоичныеДанныеИзСтроки(СтрокаДанных, "windows-1251"); КонецФункции @@ -3455,7 +3546,28 @@ ЭДКарточки.ЗаписатьАтрибут("Value", Метаданные.Версия); ЭДКарточки.ЗаписатьКонецЭлемента(); + Если ОбщегоНазначения.ПодсистемаСуществует("ЭлектронноеВзаимодействие.ОбменСГИСЭПД") Тогда + МодульОбменСГИСЭПД = ОбщегоНазначения.ОбщийМодуль("ОбменСГИСЭПД"); + МодульОбменСГИСЭПД.ПриЗаполненииПараметровКарточкиРегистрации(ЭДКарточки); + КонецЕсли; + // Комментарий + Если РеквизитыПакета.Свойство("Комментарий") + И СервисНастроекЭДОПовтИсп.ОператорПоддерживаетВерсиюФорматаРегистрации(РеквизитыПакета.ОператорЭДОИд, "5.04") Тогда + ЭДКарточки.ЗаписатьНачалоЭлемента("AdditionalParameter"); + ЭДКарточки.ЗаписатьАтрибут("Name", "Комментарий"); + ЭДКарточки.ЗаписатьАтрибут("Value", РеквизитыПакета.Комментарий); + ЭДКарточки.ЗаписатьКонецЭлемента(); + КонецЕсли; + + // Согласен на работу без приглашений + Если РеквизитыПакета.Свойство("ОбменБезПриглашений") + И СервисНастроекЭДОПовтИсп.ОператорПоддерживаетВерсиюФорматаРегистрации(РеквизитыПакета.ОператорЭДОИд, "5.04") Тогда + ЭДКарточки.ЗаписатьНачалоЭлемента("AdditionalParameter"); + ЭДКарточки.ЗаписатьАтрибут("Name", "ОбменБезПриглашений"); + ЭДКарточки.ЗаписатьАтрибут("Value", XMLСтрока(РеквизитыПакета.ОбменБезПриглашений)); + ЭДКарточки.ЗаписатьКонецЭлемента(); + КонецЕсли; ЭДКарточки.ЗаписатьКонецЭлемента(); ЭДКарточки.ЗаписатьКонецЭлемента(); @@ -3612,6 +3724,66 @@ КонецФункции +// Возвращает структуру, описывающую формат пакета регистрационных данных +// +// Возвращаемое значение: +// Структура: +// * Версия - Строка +// * ИмяМакета - Строка - Имя макета дерева заполнения формата +// * ПространствоИмен - Строка +Функция ОписаниеФорматаРегистрационногоПакета() + + Формат = Новый Структура(); + Формат.Вставить("Версия", ""); + Формат.Вставить("ИмяМакета", ""); + Формат.Вставить("ПространствоИмен", ""); + + Возврат Формат; + +КонецФункции + +// Возвращает актуальный формат пакета регистрации для указанного оператора ЭДО. +// +// Параметры: +// ИдентификаторОператора - Строка - Идентификатор оператора ЭДО +// +// Возвращаемое значение: +// Структура - см. ОписаниеФорматаРегистрационногоПакета +Функция АктуальнаяВерсияФорматаРегистрацииПоОператоруЭДО(ИдентификаторОператора) + + Версия = СервисНастроекЭДОПовтИсп.ВерсияПоддерживаемогоРегистрационногоПакетаОператора(ИдентификаторОператора); + + АктуальныйФормат = Неопределено; + + Если Версия = "5.02" Тогда + // Формат регистрации 5.02 + АктуальныйФормат = ОписаниеФорматаРегистрационногоПакета(); + АктуальныйФормат.Версия = "5.02"; + АктуальныйФормат.ИмяМакета = "ОбменСКонтрагентами.РегистрационнаяИнформация"; + АктуальныйФормат.ПространствоИмен = "http://www.1c.ru/edo/registration"; + + ИначеЕсли Версия = "5.03" Тогда + + // Формат регистрации 5.03 + АктуальныйФормат = ОписаниеФорматаРегистрационногоПакета(); + АктуальныйФормат.Версия = "5.03"; + АктуальныйФормат.ИмяМакета = "ОбменСКонтрагентами.РегистрационнаяИнформация_5_03"; + АктуальныйФормат.ПространствоИмен = "http://www.1c.ru/edo/registration_5_03"; + + ИначеЕсли Версия = "5.04" Тогда + + // Формат регистрации 5.04 + АктуальныйФормат = ОписаниеФорматаРегистрационногоПакета(); + АктуальныйФормат.Версия = "5.04"; + АктуальныйФормат.ИмяМакета = "ОбменСКонтрагентами.РегистрационнаяИнформация_5_04"; + АктуальныйФормат.ПространствоИмен = "http://www.1c.ru/edo/registration_5_04"; + + КонецЕсли; + + Возврат АктуальныйФормат; + +КонецФункции + #КонецОбласти #Область ОтправкаИПолучениеТранспортныхКонтейнеров @@ -3623,8 +3795,7 @@ // ДатаПоследнегоЗапроса - Дата // АдресРесурса - Строка // КонтекстДиагностики - См. ОбработкаНеисправностейБЭД.НовыйКонтекстДиагностики -// ВидСервисаЭДО - Неопределено, ПеречислениеСсылка.ВидыСервисовЭДО - если ВидСервисаЭДО = Неопределено - -// это документы ЭДО +// ВидСервисаЭДО - Неопределено, ПеречислениеСсылка.ВидыСервисовЭДО - если ВидСервисаЭДО = Неопределено - это документы ЭДО // ПараметрыЗапроса - Неопределено, Структура - Дополнительные параметры, которые будут использованы при выполнении запроса // // Возвращаемое значение: diff --git a/Конфигурация/CommonModules/СервисЭДОКлиентСервер/Ext/Module.bsl b/Конфигурация/CommonModules/СервисЭДОКлиентСервер/Ext/Module.bsl index 125d19fc0..c401ea798 100644 --- a/Конфигурация/CommonModules/СервисЭДОКлиентСервер/Ext/Module.bsl +++ b/Конфигурация/CommonModules/СервисЭДОКлиентСервер/Ext/Module.bsl @@ -52,6 +52,8 @@ // при подписании рег. пакета. // * ВидОперацииЭДО - Строка - см. УчетныеЗаписиЭДОКлиентСервер.ДействиеОбновлениеСертификата, // см. УчетныеЗаписиЭДОКлиентСервер.ДействиеПодключениеЭДО +// * НеИспользоватьПриглашения - Неопределено,Булево +// * Комментарий - Строка Функция НовыеПараметрыРегистрацииВСервисе1СЭДО() Экспорт ПараметрыРегистрации = Новый Структура; @@ -68,9 +70,29 @@ ПараметрыРегистрации.Вставить("Доверенности", Новый Соответствие); ПараметрыРегистрации.Вставить("СертификатПодписанта", Неопределено); ПараметрыРегистрации.Вставить("ВидОперацииЭДО", ""); + ПараметрыРегистрации.Вставить("НеИспользоватьПриглашения", Неопределено); + ПараметрыРегистрации.Вставить("Комментарий", ""); Возврат ПараметрыРегистрации; КонецФункции +// Сравнить версии форматов регистрации. +// +// Параметры: +// Версия1 - Строка - Версия1 +// Версия2 - Строка - Версия2 +// +// Возвращаемое значение: +// Число - Числовая разница версий +// +Функция СравнитьВерсииФорматовРегистрации(Знач Версия1 = "0", Знач Версия2 = "0") Экспорт + + Версия1Числом = СтроковыеФункцииКлиентСервер.СтрокаВЧисло(СтрЗаменить(Версия1, ".", "")); + Версия2Числом = СтроковыеФункцииКлиентСервер.СтрокаВЧисло(СтрЗаменить(Версия2, ".", "")); + + Возврат Версия1Числом - Версия2Числом; + +КонецФункции + #КонецОбласти \ No newline at end of file diff --git a/Конфигурация/CommonModules/СинхронизацияЭДО/Ext/Module.bsl b/Конфигурация/CommonModules/СинхронизацияЭДО/Ext/Module.bsl index 51698dc4a..aee62302e 100644 --- a/Конфигурация/CommonModules/СинхронизацияЭДО/Ext/Module.bsl +++ b/Конфигурация/CommonModules/СинхронизацияЭДО/Ext/Module.bsl @@ -26,6 +26,7 @@ Процедура ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод(Методы) Экспорт Методы.Вставить("ОбновитьКешиОператоровЭДОИФорматов", Истина); + Методы.Вставить("ОбновитьКешиОператоровЭДОИФорматовВФонеСервер", Истина); Методы.Вставить("ОбновитьПоддерживаемыеФорматыАбонентовИзСервисаНастроек", Истина); Методы.Вставить("ПолучитьПриглашения", Истина); Методы.Вставить("СинхронизироватьКлассификаторПолномочий_МЧД003", Истина); @@ -96,8 +97,17 @@ СписокУчетныхЗаписейПереведенныхИзТакском = УчетныеЗаписиЭДО.СписокУчетныхЗаписейПереведенныхИзТакском(); ПараметрыПереводаИзТакском = ПараметрыПереводаИзТакском(); - ОбрабатыватьТолькоОбъектыAPIТакском = ТипЗнч(ДополнительныеПараметры) = Тип("Структура") - И ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ДополнительныеПараметры.ПараметрыВыполнения, "ВыполнитьТолькоПоТакском", Ложь); + + ОбрабатыватьТолькоОбъектыAPIТакском = Ложь; + ИспользоватьТокеныДоступа = Ложь; + ПараметрыВыполнения = Новый Структура; + Если ТипЗнч(ДополнительныеПараметры) = Тип("Структура") + И ДополнительныеПараметры.Свойство("ПараметрыВыполнения", ПараметрыВыполнения) Тогда + ОбрабатыватьТолькоОбъектыAPIТакском = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры( + ПараметрыВыполнения, "ВыполнитьТолькоПоТакском", Ложь); + ИспользоватьТокеныДоступа = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры( + ПараметрыВыполнения, "ИспользоватьТокеныДоступа", Ложь); + КонецЕсли; Запросы = Новый Массив; @@ -192,6 +202,20 @@ КонтекстДиагностики, ИдентификаторыОтправителей, ВыбранныеСертификаты, ПараметрыПереводаИзТакском); КонецЕсли; + Если ИспользоватьТокеныДоступа Тогда + + КлючиСинхронизацииПоТокенам = КлючиСинхронизацииПоТокенамДоступаКСервисуЭДО( + ИдентификаторыОтправителей, КонтекстДиагностики); + + Если ЗначениеЗаполнено(ДанныеДляСинхронизации.КлючиСинхронизации) Тогда + ОбщегоНазначенияКлиентСервер.ДополнитьСоответствие( + ДанныеДляСинхронизации.КлючиСинхронизации, КлючиСинхронизацииПоТокенам, Ложь); + Иначе + ДанныеДляСинхронизации.КлючиСинхронизации = КлючиСинхронизацииПоТокенам; + КонецЕсли; + + КонецЕсли; + КонтекстОтправки = СинхронизацияЭДОСлужебный.НовыйКонтекстОтправки(); КонтекстОтправки.ТранспортныеКонтейнеры = ТранспортныеКонтейнеры; @@ -236,6 +260,7 @@ // * ИдентификаторСообщения - Строка // * ИдентификаторКонтейнера - Строка // * ИдентификаторыСообщенийОснований - Массив из Строка +// * ИдентификаторЧерновика - Строка // * ИдентификаторыДокументооборотовОснований - Массив из Строка // * Отказ - Булево // * ПричинаОтказа - Строка @@ -252,7 +277,10 @@ // * СтатусПриглашения - ПеречислениеСсылка.СтатусыПриглашений - (служебное поле) // * РазрешеноОтправлять - Булево - (служебное поле) // * КодОшибки - Строка - (служебное поле) -// * Карточка - Структура - (служебное поле) +// * Карточка - см. ТранспортныеКонтейнерыЭДО.НовоеОписаниеКарточкиЭлектронногоДокумента - карточка контейнера оператора ЭДО. +// - см. ЭлектронноеАктированиеЕИСПолучениеВходящих.НовоеОписаниеКарточкиПакета - карточка контейнера ЕИС. +// Состав полей свой: поле ДанныеЧерновика и служебные поля оператора +// (ФайлНазначения, ДоверенностьВерна, КарточкаМЧД и др.) отсутствуют. // * ЭтоПовторноЗагружаемоеСообщение - Булево - Устанавливается в Истина, если сообщение ЭДО загружается повторно, // например, если пользователь изменил начальную дату запроса электронных // документов у оператора ЭДО и выполнил обмен. @@ -304,6 +332,8 @@ Новый КвалификаторыСтроки(200)));// InternalId, возвращаемы методом GetMessageList ДанныеОбъектов.Колонки.Добавить("ИдентификаторыСообщенийОснований", Новый ОписаниеТипов("Массив"));// ParentDocument ДанныеОбъектов.Колонки.Добавить("ИдентификаторыДокументооборотовОснований", Новый ОписаниеТипов("Массив"));// LinkedDocument + ДанныеОбъектов.Колонки.Добавить("ИдентификаторЧерновика", Новый ОписаниеТипов("Строка",,, + Новый КвалификаторыСтроки(32))); // LinkedTemplate ДанныеОбъектов.Колонки.Добавить("Отказ", ОписаниеТиповБулево); ДанныеОбъектов.Колонки.Добавить("ПричинаОтказа", Новый ОписаниеТипов("Строка")); ДанныеОбъектов.Колонки.Добавить("ТипОшибкиОтправки", ОписаниеТиповСтрока100); @@ -921,6 +951,7 @@ СпособыОбмена = Новый Массив; СпособыОбмена.Добавить(Перечисления.СпособыОбменаЭД.ЧерезСервис1СЭДО); СпособыОбмена.Добавить(Перечисления.СпособыОбменаЭД.ЧерезОператораЭДОТакском); + СпособыОбмена.Добавить(Перечисления.СпособыОбменаЭД.ЧерезСервис1СEDI); Возврат СпособыОбмена; @@ -1413,9 +1444,47 @@ РезультатВыполнения.Вставить("КонтекстДиагностики", КонтекстДиагностики); Возврат РезультатВыполнения; - + КонецФункции +// Серверная процедура для запуска синхронизации кеша ЭДО в фоновом режиме. +// +// Параметры: +// Параметры - Структура - структура с параметрами: +// *КонтекстДиагностики - см. ОбработкаНеисправностейБЭД.НовыйКонтекстДиагностики +// АдресРезультата - Строка +Процедура ОбновитьКешиОператоровЭДОИФорматовВФонеСервер(Параметры, АдресРезультата = "") Экспорт + + КонтекстДиагностики = Неопределено; + Если Параметры.Свойство("КонтекстДиагностики") Тогда + КонтекстДиагностики = Параметры.КонтекстДиагностики; + КонецЕсли; + + ОбновитьКешиОператоровЭДОИФорматов(КонтекстДиагностики); + + ПоместитьВоВременноеХранилище(КонтекстДиагностики, АдресРезультата); +КонецПроцедуры + +// Запускает обновление кеша операторов ЭДО и форматов в фоновом задании. +// Не блокирует выполнение вызывающего кода, синхронизация выполняется асинхронно. +// +// Параметры: +// КонтекстДиагностики - см. ОбработкаНеисправностейБЭД.НовыйКонтекстДиагностики +Процедура ОбновитьКешиОператоровЭДОИФорматовВФоне(КонтекстДиагностики = Неопределено) Экспорт + + ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(); + ПараметрыВыполнения.ОжидатьЗавершение = 0; + ПараметрыВыполнения.ЗапуститьВФоне = Истина; + ПараметрыВыполнения.КлючФоновогоЗадания = "ОбновитьКешиОператоровЭДОИФорматов"; + + ПараметрыПроцедуры = Новый Структура; + ПараметрыПроцедуры.Вставить("КонтекстДиагностики", КонтекстДиагностики); + + ДлительныеОперации.ВыполнитьВФоне("СинхронизацияЭДО.ОбновитьКешиОператоровЭДОИФорматовВФонеСервер", + ПараметрыПроцедуры, ПараметрыВыполнения); + +КонецПроцедуры + // Содержит описание сертификата электронной подписи, включая расшифрованный и зашифрованный маркер. // // Возвращаемое значение: diff --git a/Конфигурация/CommonModules/СинхронизацияЭДОСлужебный/Ext/Module.bsl b/Конфигурация/CommonModules/СинхронизацияЭДОСлужебный/Ext/Module.bsl index 10476ac09..7ae722139 100644 --- a/Конфигурация/CommonModules/СинхронизацияЭДОСлужебный/Ext/Module.bsl +++ b/Конфигурация/CommonModules/СинхронизацияЭДОСлужебный/Ext/Module.bsl @@ -883,6 +883,8 @@ // Получаем документы из сервисов операторов ЭДО. ПолучитьНовыеЭлектронныеДокументыЧерезОператораЭДО(РезультатПолученияДокументов, КлючиСинхронизации, КонтекстДиагностики, РезультатыОтправкиПолучения); + СервисEDIСлужебный.ПолучитьНовыеЭлектронныеДокументыЧерезСервис1СEDI(РезультатПолученияДокументов, + КлючиСинхронизации, КонтекстДиагностики, РезультатыОтправкиПолучения); ОповещенияОСобытияхЭДО.УстановитьПризнакНаличияНовыхЭлектронныхДокументов( РезультатПолученияДокументов.УчетныеЗаписи1СЭДОПолученыВсеДокументы, Ложь); @@ -1620,6 +1622,9 @@ ИдентификаторыУчетныхЗаписей = СинхронизацияЭДО.УчетныеЗаписиКлючейСинхронизации(КлючиСинхронизации); + ПараметрыУчетныхЗаписей = УчетныеЗаписиЭДО.ПараметрыУчетныхЗаписей(ИдентификаторыУчетныхЗаписей, + "Организация, НеИспользоватьПриглашения"); + ДатыПолучения = СинхронизацияЭДО.ДатыЗапросаДанныхОператораЭДО(ИдентификаторыУчетныхЗаписей, СинхронизацияЭДО.ТипДанныхЗапросаОператораЭДОДокументы()); @@ -1641,6 +1646,7 @@ ПараметрыПолучения.Вставить("СдвигатьДату", Истина); ПараметрыПолучения.Вставить("НеЗагружено", Новый Массив); ПараметрыПолучения.Вставить("КлючСинхронизации", КлючСинхронизации); + ПараметрыПолучения.Вставить("ПараметрыУчетныхЗаписей", ПараметрыУчетныхЗаписей); ПолученыВсеДокументы = Ложь; ОбновитьИнформациюОбАктивностиУчетнойЗаписи(ИдентификаторОрганизации, КонтекстДиагностики); @@ -2109,6 +2115,9 @@ И МодульЭлектронноеАктированиеЕИС.ЭтоОбменЧерезСерверЕИС(ТипОтправки) Тогда РезультатОтправкиКонтейнера = МодульЭлектронноеАктированиеЕИС.ОтправитьКонтейнерЧерезСерверЕИС( ПараметрыОтправки, КонтекстДиагностики); + ИначеЕсли СервисEDIСлужебный.ЭтоОбменЧерезСервис1СEDI(ТипОтправки) Тогда + РезультатОтправкиКонтейнера = СервисEDIСлужебный.ОтправитьКонтейнер( + ПараметрыОтправки, КонтекстДиагностики); КонецЕсли; КонтейнерОтправлен = РезультатОтправкиКонтейнера.Успех; @@ -2233,7 +2242,8 @@ Возврат Результат; КонецЕсли; - Если Не ЗначениеЗаполнено(КлючСинхронизации.МаркерРасшифрованный) Тогда + Если Не ЗначениеЗаполнено(КлючСинхронизации.МаркерРасшифрованный) + И Не ЗначениеЗаполнено(КлючСинхронизации.Токен) Тогда Результат.Успех = Ложь; Возврат Результат; КонецЕсли; @@ -3093,7 +3103,8 @@ Если Не ЭтоПрямойОбмен(ДанныеОбъекта.СпособОбмена) И (Не ЕстьЭлектронноеАктированиеЕИС Или Не МодульЭлектронноеАктированиеЕИС.ЭтоОбменЧерезСерверЕИС(ДанныеОбъекта.СпособОбмена)) И ДанныеОбъекта.ИдентификаторОтправителя <> ДанныеОбъекта.ИдентификаторПолучателя - И Не ПриглашенияЭДО.ПриглашениеПринято(ДанныеОбъекта.СтатусПриглашения) Тогда + И Не ПриглашенияЭДО.ПриглашениеПринято(ДанныеОбъекта.СтатусПриглашения) + И Не СервисEDIСлужебный.ЭтоОбменЧерезСервис1СEDI(ДанныеОбъекта.СпособОбмена) Тогда ДанныеОбъекта.РазрешеноОтправлять = Ложь; Если ПриглашенияЭДО.ОжидаетсяОтветНаПриглашение(ДанныеОбъекта.СтатусПриглашения) Тогда ДанныеОбъекта.ТипОшибкиОтправки = СинхронизацияЭДО.ТипыОшибокОтправки().ОжидаетсяОтветНаПриглашение; @@ -3117,7 +3128,7 @@ // * УчетныеЗаписи1СЭДОПолученыВсеДокументы - Массив из Строка // * ТребуетсяОбработкаНаКлиенте - Булево // * КонтекстПолучения - Структура -Функция НовыйРезультатПолученияДокументов() +Функция НовыйРезультатПолученияДокументов() Экспорт РезультатПолученияДокументов = Новый Структура; РезультатПолученияДокументов.Вставить("Контейнеры", Новый Массив); @@ -3387,6 +3398,11 @@ // * СдвигатьДату - Булево // * НеЗагружено - Массив из Строка // * КлючСинхронизации - см. СинхронизацияЭДОКлиентСервер.НовыйКлючСинхронизации +// * ПараметрыУчетныхЗаписей - Соответствие из КлючИЗначение: +// ** Ключ - Строка - Идентификатор учетной записи ЭДО +// ** Значение - Структура: +// *** Организация - ОпределяемыйТип.Организация +// *** НеИспользоватьПриглашения - Булево // ЭтоПакетДокументов - Булево // // Возвращаемое значение: @@ -3421,7 +3437,7 @@ Попытка РезультатСохраненияКонтейнера = ТранспортныеКонтейнерыЭДО.СохранитьКонтейнер(ДокументДляЗагрузки, - КлючСинхронизации, КонтекстДиагностики); + КлючСинхронизации, КонтекстДиагностики,, ПараметрыПолучения.ПараметрыУчетныхЗаписей); Если ЗначениеЗаполнено(РезультатСохраненияКонтейнера.ТранспортныйКонтейнер) Тогда Результат.Контейнеры.Добавить(РезультатСохраненияКонтейнера.ТранспортныйКонтейнер); ЗафиксироватьРезультатОправкиПолучения(РезультатыОтправкиПолучения, @@ -3950,7 +3966,8 @@ Возврат СервисЭДО.ЭтоКодНеизвестнойОшибки(ОшибкаПередачи.Код) Или СервисЭДО.ЭтоКодОшибкиПросроченногоМаркера(ОшибкаПередачи.Код) - Или СервисЭДО.ЭтоКодОшибкиНевалидногоМаркера(ОшибкаПередачи.Код); + Или СервисЭДО.ЭтоКодОшибкиНевалидногоМаркера(ОшибкаПередачи.Код) + Или СервисEDIСлужебный.ЭтоКодОшибкиТранспорта(ОшибкаПередачи.Код); КонецФункции @@ -3974,13 +3991,15 @@ // Возвращаемое значение: // Структура: // * ТранспортныйКонтейнер - ДокументСсылка.ТранспортныйКонтейнерЭДО -// * РеквизитыКонтейнера - Неопределено, см. ТранспортныеКонтейнерыЭДО.ДанныеДляОтправки -// * ДанныеДляОтправки - Неопределено, см. СформироватьДанныеДляОтправки +// * РеквизитыКонтейнера - см. ТранспортныеКонтейнерыЭДО.ДанныеДляОтправки +// - Неопределено +// * ДанныеДляОтправки - см. СформироватьДанныеДляОтправки +// - Неопределено // * КлючиСинхронизации - см. СинхронизацияЭДОКлиентСервер.НовыеКлючиСинхронизации // * КэшFTPСоединений - Соответствие из КлючИЗначение: // ** Ключ - Строка - идентификатор отправителя // ** Значение - FTPСоединение -Функция НовыеПараметрыОтправкиТранспортногоКонтейнера() +Функция НовыеПараметрыОтправкиТранспортногоКонтейнера() Экспорт ПараметрыОтправки = Новый Структура; ПараметрыОтправки.Вставить("ТранспортныйКонтейнер", Документы.ТранспортныйКонтейнерЭДО.ПустаяСсылка()); diff --git a/Конфигурация/CommonModules/СинхронизацияЭДОСлужебныйКлиент/Ext/Module.bsl b/Конфигурация/CommonModules/СинхронизацияЭДОСлужебныйКлиент/Ext/Module.bsl index ecd71550e..e59811fce 100644 --- a/Конфигурация/CommonModules/СинхронизацияЭДОСлужебныйКлиент/Ext/Module.bsl +++ b/Конфигурация/CommonModules/СинхронизацияЭДОСлужебныйКлиент/Ext/Module.bsl @@ -204,6 +204,15 @@ КонецФункции +// Результат проверки операции подключения ЭДО. +// +// Параметры: +// ОперацияЭДО - Структура - Операция ЭДО +// +// Возвращаемое значение: +// Структура: +// Ошибки - Массив Из строка +// Функция РезультатПроверкиОперацииПодключенияЭДО(Знач ОперацияЭДО) Результат = Новый Структура; @@ -211,6 +220,9 @@ Параметры = ОперацияЭДО.Параметры; + АктуальнаяВерсия = + СервисНастроекЭДОВызовСервера.ВерсияПоддерживаемогоРегистрационногоПакетаОператора(Параметры.ОператорЭДО); + ВключеноРазделениеДанных = Неопределено; ОперацияЭДО.СлужебныеПараметры.Свойство("ВключеноРазделениеДанных", ВключеноРазделениеДанных); @@ -218,11 +230,13 @@ Если Не ЗначениеЗаполнено(Параметры.Организация) Тогда Результат.Ошибки.Добавить(НСтр("ru = 'Не заполнена организация.'")); КонецЕсли; - Если Не ЗначениеЗаполнено(Параметры.АдресОрганизации) Тогда + Если Не ЗначениеЗаполнено(Параметры.АдресОрганизации) + И СервисЭДОКлиентСервер.СравнитьВерсииФорматовРегистрации(АктуальнаяВерсия, "5.03") < 0 Тогда Результат.Ошибки.Добавить(НСтр("ru = 'Не заполнен адрес организации.'")); КонецЕсли; Если Параметры.СпособОбменаЭД <> ПредопределенноеЗначение("Перечисление.СпособыОбменаЭД.ЧерезОператораЭДОТакском") - И Не ЗначениеЗаполнено(Параметры.КодНалоговогоОргана) Тогда + И Не ЗначениеЗаполнено(Параметры.КодНалоговогоОргана) + И СервисЭДОКлиентСервер.СравнитьВерсииФорматовРегистрации(АктуальнаяВерсия, "5.03") < 0 Тогда Результат.Ошибки.Добавить(НСтр("ru = 'Не заполнен код налогового органа.'")); КонецЕсли; Если Параметры.УведомлятьОСобытиях И Не ЗначениеЗаполнено(Параметры.ЭлектроннаяПочтаДляУведомлений) Тогда @@ -413,7 +427,7 @@ ОписаниеУчетнойЗаписи.Наименование = ОперацияЭДО.Параметры.НаименованиеУчетнойЗаписи; ОписаниеУчетнойЗаписи.Назначение = ОперацияЭДО.Параметры.НазначениеУчетнойЗаписи; ОписаниеУчетнойЗаписи.ПодробноеОписание = ОперацияЭДО.Параметры.ОписаниеУчетнойЗаписи; - ОписаниеУчетнойЗаписи.ПринятыУсловияИспользования = ОперацияЭДО.Параметры.ПринятыУсловияИспользования; + ОписаниеУчетнойЗаписи.ПринятыУсловияИспользования = ОперацияЭДО.Параметры.ПринятыУсловияИспользования; Если ЗначениеЗаполнено(ОперацияЭДО.Параметры.Сертификат) Тогда ОписаниеУчетнойЗаписи.Сертификаты.Добавить(ОперацияЭДО.Параметры.Сертификат); КонецЕсли; @@ -425,7 +439,9 @@ ПараметрыУведомлений.УведомлятьОНовыхДокументах = ОперацияЭДО.Параметры.УведомлятьОНовыхДокументах; ПараметрыУведомлений.УведомлятьОНеобработанныхДокументах = ОперацияЭДО.Параметры.УведомлятьОНеОбработанныхДокументах; ПараметрыУведомлений.УведомлятьОбОкончанииСрокаДействияСертификата = ОперацияЭДО.Параметры.УведомлятьОбОкончанииСрокаДействияСертификата; - + НеИспользоватьПриглашения = + ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ОперацияЭДО.Параметры, "НеИспользоватьПриглашения", Ложь); + ОписаниеУчетнойЗаписи.НеИспользоватьПриглашения = НеИспользоватьПриглашения; Возврат СинхронизацияЭДОВызовСервера.СоздатьУчетнуюЗапись(ОписаниеУчетнойЗаписи); КонецФункции @@ -706,6 +722,11 @@ ПараметрыРегистрации.ЭлектроннаяПочта = Параметры.ЭлектроннаяПочтаДляУведомлений; ПараметрыРегистрации.КодНалоговогоОргана = Параметры.КодНалоговогоОргана; ПараметрыРегистрации.СертификатыПодписейОрганизации = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Параметры.Сертификат); + ПараметрыРегистрации.НеИспользоватьПриглашения = + ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Параметры, "НеИспользоватьПриглашения", + Не УчетныеЗаписиЭДОКлиентСервер.ТребоватьПриглашенияПередНачаломЭДОЗначениеПоУмолчанию()); + ПараметрыРегистрации.Комментарий = + ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Параметры, "НазначениеУчетнойЗаписи", ""); КонтекстДиагностики = ОбработкаНеисправностейБЭДКлиент.НовыйКонтекстДиагностики(); УчетныеЗаписиЭДОКлиент.ЗарегистрироватьСертификатВСервисе1СЭДО(Неопределено, diff --git a/Конфигурация/CommonModules/СистемаБыстрыхПлатежей/Ext/Module.bsl b/Конфигурация/CommonModules/СистемаБыстрыхПлатежей/Ext/Module.bsl index 8d9bead16..5cb89be8e 100644 --- a/Конфигурация/CommonModules/СистемаБыстрыхПлатежей/Ext/Module.bsl +++ b/Конфигурация/CommonModules/СистемаБыстрыхПлатежей/Ext/Module.bsl @@ -683,22 +683,4 @@ #КонецОбласти -#КонецОбласти - -#Область СлужебныйПрограммныйИнтерфейс - -#Область ИнтеграцияСБиблиотекойСтандартныхПодсистем - -// См. СтандартныеПодсистемыСервер.ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод -// -Процедура ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод(Методы) Экспорт - - Методы.Вставить("ПараметрыПодключенияПоУчастникуСБП", Истина); - Методы.Вставить("ПроверитьПараметрыПодключения", Истина); - Методы.Вставить("ПолучитьУчастниковСБП", Истина); - -КонецПроцедуры - -#КонецОбласти - #КонецОбласти \ No newline at end of file diff --git a/Конфигурация/CommonModules/СистемаБыстрыхПлатежейСервис/Ext/Module.bsl b/Конфигурация/CommonModules/СистемаБыстрыхПлатежейСервис/Ext/Module.bsl index cbeb693a0..8a34509f7 100644 --- a/Конфигурация/CommonModules/СистемаБыстрыхПлатежейСервис/Ext/Module.bsl +++ b/Конфигурация/CommonModules/СистемаБыстрыхПлатежейСервис/Ext/Module.bsl @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2025, ООО 1С-Софт +// Copyright (c) 2026, ООО 1С-Софт // Все права защищены. Эта программа и сопроводительные материалы предоставляются // в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) // Текст лицензии доступен по ссылке: @@ -1080,6 +1080,7 @@ // Функция URLДанныхМакетов(Операция) + Возврат "https://payment-gateway.1c.ru/resources/templates" + Операция; КонецФункции diff --git a/Конфигурация/CommonModules/СистемаБыстрыхПлатежейСлужебный/Ext/Module.bsl b/Конфигурация/CommonModules/СистемаБыстрыхПлатежейСлужебный/Ext/Module.bsl index 51afbe339..f29dc3b27 100644 --- a/Конфигурация/CommonModules/СистемаБыстрыхПлатежейСлужебный/Ext/Module.bsl +++ b/Конфигурация/CommonModules/СистемаБыстрыхПлатежейСлужебный/Ext/Module.bsl @@ -185,6 +185,7 @@ Методы.Вставить("УстановитьДлительностьОпераций"); Методы.Вставить("УстановитьИдентификаторУчастникаСБП"); Методы.Вставить("УстановитьНовоеИмя1ССБП"); + Методы.Вставить("ОжидатьТерминальныйСтатусОплаты", Истина); КонецПроцедуры @@ -2026,6 +2027,10 @@ Результат.Вставить("ИнформацияОбОшибке", ""); Результат.Вставить("Ошибка", Ложь); + Если ДанныеАутентификации = Неопределено Тогда + ВызватьИсключение НСтр("ru = 'Неопределенны данные аутентификации.'"); + КонецЕсли; + Если ПараметрыНастройкиПодключения.ТипАутентификации = Перечисления.ТипыАутентификацииСБП.RESOURCE_OWNER_PASSWORD_CREDENTIALS_GRANT Тогда // Данные токена должны быть удалены из ИБ @@ -3090,6 +3095,64 @@ КонецФункции +// Выполняет ожидание терминального статуса оплаты. +// +// Параметры: +// ИдентификаторОплаты - Строка - идентификатор оплаты; +// ИдентификаторУчастника - Строка - идентификатор участника СБП; +// ИдентификаторОперации - Строка - идентификатор операции оплаты. +// +// Возвращаемое значение: +// Структура - данные сверке взаиморасчетов: +// * ТерминальныйСтатусПолучен - Булево - признак получения терминального статуса операции. +// * КодОшибки - Строка - строковый код возникшей ошибки, который +// может быть обработан вызывающим методом; +// * СообщениеОбОшибке - Строка, ФорматированнаяСтрока - сообщение об ошибке для пользователя; +// * ИнформацияОбОшибке - Строка, ФорматированнаяСтрока - сообщение об ошибке для администратора. +// +Функция ОжидатьТерминальныйСтатусОплаты( + ИдентификаторОплаты, + ИдентификаторУчастника, + ИдентификаторОперации) Экспорт + + РезультатОперации = НовыйРезультатОперации(); + РезультатОперации.Вставить("ТерминальныйСтатусПолучен", Ложь); + ДатаЗапросаСтатуса = ТекущаяДатаСеанса(); + + НастройкиВызова = НастройкиПлатежныхСистемСлужебный.НовыйИтеративныйВызовОперации(); + + Пока ВозможенВызовОперации(НастройкиВызова) Цикл + + ИдентификаторыОплат = НовыйИдентификаторыПроверкиНаличияСтатуса(); + ДанныеОплаты = ИдентификаторыОплат.Добавить(); + ДанныеОплаты.Идентификатор = ИдентификаторОплаты; + ДанныеОплаты.ДатаЗапросаСтатуса = ДатаЗапросаСтатуса; + ДатаЗапросаСтатуса = ТекущаяДатаСеанса(); + + РезультатПроверки = СистемаБыстрыхПлатежейСервис.ОперацияПроверкаНаличияСтатусаОперацийОплат( + ИдентификаторыОплат, + ИдентификаторУчастника, + ИдентификаторОперации); + + Если ЗначениеЗаполнено(РезультатПроверки.КодОшибки) Тогда + ЗаполнитьЗначенияСвойств( + РезультатОперации, + РезультатПроверки, + "КодОшибки, СообщениеОбОшибке, ИнформацияОбОшибке"); + Возврат РезультатОперации; + КонецЕсли; + + Если РезультатПроверки.Идентификаторы.Найти(ИдентификаторОплаты) <> Неопределено Тогда + РезультатОперации.ТерминальныйСтатусПолучен = Истина; + Возврат РезультатОперации; + КонецЕсли; + + КонецЦикла; + + Возврат РезультатОперации; + +КонецФункции + #КонецОбласти #Область ИдентификаторыСпособовФормированияСсылки @@ -7530,19 +7593,10 @@ // Процедура УстановитьИспользованиеШаблоновСообщений() Экспорт - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОтправкаSMS") Тогда - ИнтернетПоддержкаПользователей.УстановитьИспользованиеSMS(); - КонецЕсли; + НастройкиПодключенияПрограммы = НастройкиПодключенияПрограммы(); - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСПочтовымиСообщениями") Тогда - ИнтернетПоддержкаПользователей.УстановитьИспользованиеЭлектроннойПочты(); - КонецЕсли; - - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Взаимодействия") Тогда - ИнтернетПоддержкаПользователей.УстановитьОтправкуПисемВФорматеHTML(); - КонецЕсли; - - ИнтернетПоддержкаПользователей.УстановитьИспользованиеШаблоновСообщений(); + ИнтернетПоддержкаПользователей.УстановитьИспользованиеОтправкиШаблоновСообщений( + НастройкиПодключенияПрограммы.ОбщиеНастройки.ИспользоватьПодсистемуВзаимодействия); КонецПроцедуры @@ -7968,26 +8022,6 @@ КонецФункции -// Включает функциональные опции необходимые для работы с шаблонами сообщений. -// -Процедура УстановитьИспользованиеШаблонов() Экспорт - - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОтправкаSMS") Тогда - ИнтернетПоддержкаПользователей.УстановитьИспользованиеSMS(); - КонецЕсли; - - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСПочтовымиСообщениями") Тогда - ИнтернетПоддержкаПользователей.УстановитьИспользованиеЭлектроннойПочты(); - КонецЕсли; - - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Взаимодействия") Тогда - ИнтернетПоддержкаПользователей.УстановитьОтправкуПисемВФорматеHTML(); - КонецЕсли; - - ИнтернетПоддержкаПользователей.УстановитьИспользованиеШаблоновСообщений(); - -КонецПроцедуры - #КонецОбласти #Область ПодключаемыеКоманды diff --git a/Конфигурация/CommonModules/СистемаБыстрыхПлатежейСобытия/Ext/Module.bsl b/Конфигурация/CommonModules/СистемаБыстрыхПлатежейСобытия/Ext/Module.bsl index ab32e400c..8209b8b89 100644 --- a/Конфигурация/CommonModules/СистемаБыстрыхПлатежейСобытия/Ext/Module.bsl +++ b/Конфигурация/CommonModules/СистемаБыстрыхПлатежейСобытия/Ext/Module.bsl @@ -324,6 +324,11 @@ // Процедура ПриОпределенииНастроекПодключенияПрограммы(Настройки) Экспорт + ОбщиеНастройки = Новый Структура; + ОбщиеНастройки.Вставить( + "ИспользоватьПодсистемуВзаимодействия", + ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Взаимодействия")); + НастройкиСБПc2b = Новый Структура; НастройкиСБПc2b.Вставить("ОбъектМетаданных", Неопределено); НастройкиСБПc2b.Вставить("ИсключаемыеПоля", Новый Массив); @@ -340,6 +345,7 @@ Настройки = Новый Структура; Настройки.Вставить("c2b", НастройкиСБПc2b); Настройки.Вставить("b2b", НастройкиСБПb2b); + Настройки.Вставить("ОбщиеНастройки", ОбщиеНастройки); КонецПроцедуры diff --git a/Конфигурация/CommonModules/СкидкиНаценкиСервер/Ext/Module.bsl b/Конфигурация/CommonModules/СкидкиНаценкиСервер/Ext/Module.bsl index 99421d73d..b4cdcd83f 100644 --- a/Конфигурация/CommonModules/СкидкиНаценкиСервер/Ext/Module.bsl +++ b/Конфигурация/CommonModules/СкидкиНаценкиСервер/Ext/Module.bsl @@ -4591,9 +4591,44 @@ КонецЕсли; КонецЕсли; КонецЕсли; - - СуммаБонусов = Окр((ЗначениеСкидкиНаценки / 100) * Сумма, 2); - Комментарий = "Сумма " + Сумма + " * " + ЗначениеСкидкиНаценки + "%"; + + НоваяСтрока = ТаблицаДанных.Добавить(); + // Кратность + ДеревоУсловий = РезультатПроверкиУсловийСтрок[Товар.КлючСвязи]; + Если НЕ ДеревоУсловий = Неопределено + И ДеревоУсловий.Строки.Количество() > 0 Тогда + УсловияСтроки = ДеревоУсловий.Строки[0]; + КонецЕсли; + Если УсловияСтроки.КратностьСтрокиТовара = 0 Тогда + БонусДействует = Ложь; + Иначе + БонусДействует = УсловияСтроки.Выполнено; + КонецЕсли; + КратностьСтроки = Неопределено; + Если ИспользоватьРежимКратности И Повторять Тогда + КратностьСтроки = УсловияСтроки.КратностьСтрокиТовара; + ИначеЕсли ИспользоватьРежимКратности + И УсловияСтроки.КратностьСтрокиТовара <> Неопределено Тогда + КратностьСтроки = Макс(УсловияСтроки.КратностьСтрокиТовара, 1); + КонецЕсли; + ДоступноПримененийВСтроке = ?(КратностьСтроки = Неопределено, Товар.Количество, КратностьСтроки * ПримененийЗаОдноВыполнение); + ДоступноПримененийВСтроке = Мин(ДоступноПримененийВСтроке, ?(ДоступноПрименений = Неопределено, ДоступноПримененийВСтроке, ДоступноПрименений)); + КоличествоСрабатыванийСкидки = Мин(ДоступноПримененийВСтроке, Товар.Количество); + // Конец Кратность + + + БазаДляСкидки = Сумма; + КомментарийКратность = ""; + Если КоличествоСрабатыванийСкидки = Товар.Количество Тогда + Комментарий = "Сумма " + Сумма + " * " + ЗначениеСкидкиНаценки + "%"; + Иначе + СтоимостьЕдиницы = Сумма / Товар.Количество; + БазаДляСкидки = КоличествоСрабатыванийСкидки * СтоимостьЕдиницы; + Комментарий = "Цена " + СтоимостьЕдиницы + " * " + ЗначениеСкидкиНаценки + "%" + КомментарийКратность; + Комментарий = Комментарий + " " + СтрШаблон(НСтр("ru = '(зачетено %1 применений)'"), КоличествоСрабатыванийСкидки) ; + КонецЕсли; + + СуммаБонусов = Окр((ЗначениеСкидкиНаценки / 100) * БазаДляСкидки, 2); ТаблицаБонусов = ПустаяТаблицаБонусов(); Если СуммаБонусов > 0 И БонусДействует Тогда @@ -4621,7 +4656,6 @@ Иначе БонусДействует = Ложь; КонецЕсли; - НоваяСтрока = ТаблицаДанных.Добавить(); НоваяСтрока.КлючСвязи = Товар.КлючСвязи; НоваяСтрока.Действует = БонусДействует; НоваяСтрока.Сумма = 0; @@ -4736,6 +4770,9 @@ КонецЕсли; ИначеЕсли ПараметрыСкидки.ОбластьПредоставления = Перечисления.ВариантыОбластейОграниченияСкидокНаценок.ВСтроке Тогда + + БонусДействует = Истина; + Для Каждого Товар Из Товары Цикл ЗначениеСкидкиНаценки = ПараметрыСкидки.ЗначениеСкидкиНаценки; @@ -4811,9 +4848,9 @@ УсловияСтроки = ДеревоУсловий.Строки[0]; КонецЕсли; Если УсловияСтроки.КратностьСтрокиТовара = 0 Тогда - НоваяСтрока.Действует = Ложь; + БонусДействует = Ложь; Иначе - НоваяСтрока.Действует = УсловияСтроки.Выполнено; + БонусДействует = УсловияСтроки.Выполнено; КонецЕсли; КратностьСтроки = Неопределено; Если ИспользоватьРежимКратности И Повторять Тогда @@ -4837,7 +4874,7 @@ КонецЕсли; ТаблицаБонусов = ПустаяТаблицаБонусов(); - Если СуммаБонусов > 0 Тогда + Если СуммаБонусов > 0 И БонусДействует Тогда НоваяСтрокаБонусов = ТаблицаБонусов.Добавить(); НоваяСтрокаБонусов.КлючСвязи = Товар.КлючСвязи; @@ -4864,7 +4901,7 @@ КонецЕсли; НоваяСтрока = ТаблицаДанных.Добавить(); НоваяСтрока.КлючСвязи = Товар.КлючСвязи; - НоваяСтрока.Действует = Истина; + НоваяСтрока.Действует = БонусДействует; НоваяСтрока.Сумма = 0; НоваяСтрока.ОценкаСкидки = СуммаБонусов * Курсбонусов; НоваяСтрока.ТаблицаБонусов = ТаблицаБонусов; @@ -4874,7 +4911,6 @@ Если ПараметрыСкидки.ОбластьПредоставления = Перечисления.ВариантыОбластейОграниченияСкидокНаценок.ВДокументе Тогда СуммаСкидкиКРаспределению = СуммаСкидкиКРаспределению - СуммаБонусов; КонецЕсли; - ОбщаяСуммаТоваровСегмента = ОбщаяСуммаТоваровСегмента - Сумма; Если НоваяСтрока.Действует И ЗначениеЗаполнено(ДоступноПрименений) Тогда ДоступноПрименений = ДоступноПрименений - КоличествоСрабатыванийСкидки; diff --git a/Конфигурация/CommonModules/СообщенияОткрытаяАвторизацияПочтовогоСервисаОбработчикСообщения_1_0_0_1/Ext/Module.bsl b/Конфигурация/CommonModules/СообщенияОткрытаяАвторизацияПочтовогоСервисаОбработчикСообщения_1_0_0_1/Ext/Module.bsl index 29bf0ee5f..93555b330 100644 --- a/Конфигурация/CommonModules/СообщенияОткрытаяАвторизацияПочтовогоСервисаОбработчикСообщения_1_0_0_1/Ext/Module.bsl +++ b/Конфигурация/CommonModules/СообщенияОткрытаяАвторизацияПочтовогоСервисаОбработчикСообщения_1_0_0_1/Ext/Module.bsl @@ -70,8 +70,13 @@ // Отправитель - ПланОбменаСсылка.ОбменСообщениями - узел плана обмена, соответствующий отправителю сообщения // СообщениеОбработано - Булево - флаг успешной обработки сообщения. Устанавливается в Истина, // если сообщение было успешно прочитано в обработчике +// Процедура ОбработатьСообщениеМоделиСервиса(Сообщение, Отправитель, СообщениеОбработано) Экспорт + Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСПочтовымиСообщениями") Тогда + Возврат; + КонецЕсли; + ТипСообщения = Сообщение.Body.Тип(); ТипОбратныйВызов = СообщенияОткрытаяАвторизацияПочтовогоСервисаИнтерфейсСлужебный.ТипОбратныйВызов(); @@ -85,7 +90,10 @@ ПараметрыСерверногоОповещения.Вставить("ИмяСобытия", "ОткрытаяАвторизацияПочтовогоСервиса"); ПараметрыСерверногоОповещения.Вставить("Контекст", Контекст); - ИмяСерверногоОповещения = РаботаСПочтовымиСообщениямиСлужебныйКлиентСервер.ИмяСерверногоОповещения(); + МодульРаботаСПочтовымиСообщениямиСлужебныйКлиентСервер = ОбщегоНазначения.ОбщийМодуль( + "РаботаСПочтовымиСообщениямиСлужебныйКлиентСервер"); + + ИмяСерверногоОповещения = МодульРаботаСПочтовымиСообщениямиСлужебныйКлиентСервер.ИмяСерверногоОповещения(); АдресатыСерверногоОповещения = АдресатыСерверногоОповещения(Сообщение.Body.session, Сообщение.Body.user_id); СерверныеОповещения.ОтправитьСерверноеОповещение( diff --git a/Конфигурация/CommonModules/СоответствиеТребованиямГИСМТ/Ext/Module.bsl b/Конфигурация/CommonModules/СоответствиеТребованиямГИСМТ/Ext/Module.bsl index 4c2c44509..d195e146e 100644 --- a/Конфигурация/CommonModules/СоответствиеТребованиямГИСМТ/Ext/Module.bsl +++ b/Конфигурация/CommonModules/СоответствиеТребованиямГИСМТ/Ext/Module.bsl @@ -192,6 +192,7 @@ ВозможенЭДО = Метаданные.ОпределяемыеТипы.ОснованияЭлектронныхДокументовЭДО.Тип.СодержитТип(ТипЗнч(Документ)); ЭлектронныйДокумент = Неопределено; + УстановитьПривилегированныйРежим(Истина); Если ВозможенЭДО Тогда СтатусДокументооборота = ОбменСКонтрагентами.СтатусДокументооборота(Документ); @@ -204,6 +205,8 @@ ИдентификаторЭлектронногоДокумента = СведенияОбЭлектронномДокументе.Сообщения.ДанныеОтправителя.ИмяФайлаБезРасширения; КонецЕсли; + УстановитьПривилегированныйРежим(Ложь); + Если РезультатПроверкиПоДокументу = Неопределено Тогда РезультатПроверкиПоДокументу = РезультатПроверкиПоДокументу(Документ, ИдентификаторЭлектронногоДокумента); @@ -276,7 +279,7 @@ Процедура ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод(Методы) Экспорт Методы.Вставить("РезультатПроверкиДокументаНаСоответствиеТребованиямГИСМТИзФоновогоЗадания", Истина); - Методы.Вставить("ПроверкаДокументовВГИСМТ", Истина); + Методы.Вставить("ПроверкаДокументовВГИСМТ"); КонецПроцедуры @@ -3415,6 +3418,10 @@ Возврат Перечисления.СтатусыОбработкиДокументовИСМП.ЗавершеноСОшибкой; + ИначеЕсли СтатусДокументаВСервисе = Перечисления.СтатусыДокументовИСМП.Отменен Тогда + + Возврат Перечисления.СтатусыОбработкиДокументовИСМП.Завершено; + Иначе ВызватьИсключение СтрШаблон(НСтр("ru = 'Неизвестный статус обработки документа в сервисе ""%1""'"), СтатусДокументаВСервисе); @@ -3445,7 +3452,13 @@ Функция ТекстСостоянияДокумента(ПараметрыОбработки) Экспорт - Если (ПараметрыОбработки.СтатусОтправки = Перечисления.СтатусОтправкиГИСМТ.ДоставленВГИСМТ + Если ПараметрыОбработки.СтатусОтправки = Перечисления.СтатусОтправкиГИСМТ.ДоставленВГИСМТ + И ОбщегоНазначенияКлиентСервер.ЕстьРеквизитИлиСвойствоОбъекта(ПараметрыОбработки, "СтатусДокументаВСервисе") + И ПараметрыОбработки.СтатусДокументаВСервисе = Перечисления.СтатусыДокументовИСМП.Отменен Тогда + + ТекстСостояния = НСтр("ru = 'УПД отменен в ГИС МТ'"); + + ИначеЕсли (ПараметрыОбработки.СтатусОтправки = Перечисления.СтатусОтправкиГИСМТ.ДоставленВГИСМТ И ПараметрыОбработки.Статус = Перечисления.СтатусыОбработкиДокументовИСМП.Завершено) Или (ПараметрыОбработки.ВыполненаПредварительнаяПроверка И ПараметрыОбработки.СтатусОтправки = Перечисления.СтатусОтправкиГИСМТ.НеОтправлен) Тогда diff --git a/Конфигурация/CommonModules/СопоставлениеНоменклатурыКонтрагентовСлужебный/Ext/Module.bsl b/Конфигурация/CommonModules/СопоставлениеНоменклатурыКонтрагентовСлужебный/Ext/Module.bsl index 23c8506a8..ff6e75a7a 100644 --- a/Конфигурация/CommonModules/СопоставлениеНоменклатурыКонтрагентовСлужебный/Ext/Module.bsl +++ b/Конфигурация/CommonModules/СопоставлениеНоменклатурыКонтрагентовСлужебный/Ext/Module.bsl @@ -5226,7 +5226,9 @@ НоваяСвязь = Новый СвязьПараметраВыбора(ИмяПараметраСвязи, ПутьКДанным); ВсеСвязи.Добавить(НоваяСвязь); КонецЕсли; - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(ЭлементыФормы, "Упаковка", "СвязиПараметровВыбора", + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(ЭлементыФормы, + ИмяЭлементаФормы, + "СвязиПараметровВыбора", Новый ФиксированныйМассив(ВсеСвязи)); КонецПроцедуры diff --git a/Конфигурация/CommonModules/СтандартныеПодсистемыПовтИсп/Ext/Module.bsl b/Конфигурация/CommonModules/СтандартныеПодсистемыПовтИсп/Ext/Module.bsl index 4c895bd47..67870af3b 100644 --- a/Конфигурация/CommonModules/СтандартныеПодсистемыПовтИсп/Ext/Module.bsl +++ b/Конфигурация/CommonModules/СтандартныеПодсистемыПовтИсп/Ext/Module.bsl @@ -673,55 +673,264 @@ КонецФункции -Функция ИменаКоллекцийПоИменамБазовыхТипов() Экспорт +// Свойства видов объектов метаданных. +// +// Возвращаемое значение: +// ФиксированнаяСтруктура: +// * ПоКоллекциям - ФиксированноеСоответствие из КлючИЗначение: +// ** Ключ - Строка - имя коллекции объектов метаданных, например, "СПРАВОЧНИКИ", "CATALOGS". +// ** Значение - см. НовыеСвойстваВидаОбъектов +// +// * ПоВидамОбъектов - ФиксированноеСоответствие из КлючИЗначение: +// ** Ключ - Строка - имя вида объектов метаданных, например, "СПРАВОЧНИК", "CATALOG". +// ** Значение - см. НовыеСвойстваВидаОбъектов +// +Функция СвойстваВидовОбъектовМетаданных() Экспорт - ИменаКоллекций = Новый Соответствие; - ИменаКоллекций.Вставить(ВРег("Подсистема"), "Подсистемы"); - ИменаКоллекций.Вставить(ВРег("ОбщийМодуль"), "ОбщиеМодули"); - ИменаКоллекций.Вставить(ВРег("ПараметрСеанса"), "ПараметрыСеанса"); - ИменаКоллекций.Вставить(ВРег("Роль"), "Роли"); - ИменаКоллекций.Вставить(ВРег("ОбщийРеквизит"), "ОбщиеРеквизиты"); - ИменаКоллекций.Вставить(ВРег("ПланОбмена"), "ПланыОбмена"); - ИменаКоллекций.Вставить(ВРег("КритерийОтбора"), "КритерииОтбора"); - ИменаКоллекций.Вставить(ВРег("ПодпискаНаСобытие"), "ПодпискиНаСобытия"); - ИменаКоллекций.Вставить(ВРег("РегламентноеЗадание"), "РегламентныеЗадания"); - ИменаКоллекций.Вставить(ВРег("ФункциональнаяОпция"), "ФункциональныеОпции"); - ИменаКоллекций.Вставить(ВРег("ПараметрФункциональныхОпций"), "ПараметрыФункциональныхОпций"); - ИменаКоллекций.Вставить(ВРег("ОпределяемыйТип"), "ОпределяемыеТипы"); - ИменаКоллекций.Вставить(ВРег("ХранилищеНастроек"), "ХранилищаНастроек"); - ИменаКоллекций.Вставить(ВРег("ОбщаяФорма"), "ОбщиеФормы"); - ИменаКоллекций.Вставить(ВРег("ОбщаяКоманда"), "ОбщиеКоманды"); - ИменаКоллекций.Вставить(ВРег("ГруппаКоманд"), "ГруппыКоманд"); - ИменаКоллекций.Вставить(ВРег("ОбщийМакет"), "ОбщиеМакеты"); - ИменаКоллекций.Вставить(ВРег("ОбщаяКартинка"), "ОбщиеКартинки"); - ИменаКоллекций.Вставить(ВРег("ПакетXDTO"), "ПакетыXDTO"); - ИменаКоллекций.Вставить(ВРег("WebСервис"), "WebСервисы"); - ИменаКоллекций.Вставить(ВРег("HTTPСервис"), "HTTPСервисы"); - ИменаКоллекций.Вставить(ВРег("WSСсылка"), "WSСсылки"); - ИменаКоллекций.Вставить(ВРег("СервисИнтеграции"), "СервисыИнтеграции"); - ИменаКоллекций.Вставить(ВРег("ЭлементСтиля"), "ЭлементыСтиля"); - ИменаКоллекций.Вставить(ВРег("Стиль"), "Стили"); - ИменаКоллекций.Вставить(ВРег("Язык"), "Языки"); - ИменаКоллекций.Вставить(ВРег("Константа"), "Константы"); - ИменаКоллекций.Вставить(ВРег("Справочник"), "Справочники"); - ИменаКоллекций.Вставить(ВРег("Документ"), "Документы"); - ИменаКоллекций.Вставить(ВРег("Последовательность"), "Последовательности"); - ИменаКоллекций.Вставить(ВРег("ЖурналДокументов"), "ЖурналыДокументов"); - ИменаКоллекций.Вставить(ВРег("Перечисление"), "Перечисления"); - ИменаКоллекций.Вставить(ВРег("Отчет"), "Отчеты"); - ИменаКоллекций.Вставить(ВРег("Обработка"), "Обработки"); - ИменаКоллекций.Вставить(ВРег("ПланВидовХарактеристик"), "ПланыВидовХарактеристик"); - ИменаКоллекций.Вставить(ВРег("ПланСчетов"), "ПланыСчетов"); - ИменаКоллекций.Вставить(ВРег("ПланВидовРасчета"), "ПланыВидовРасчета"); - ИменаКоллекций.Вставить(ВРег("РегистрСведений"), "РегистрыСведений"); - ИменаКоллекций.Вставить(ВРег("РегистрНакопления"), "РегистрыНакопления"); - ИменаКоллекций.Вставить(ВРег("РегистрБухгалтерии"), "РегистрыБухгалтерии"); - ИменаКоллекций.Вставить(ВРег("РегистрРасчета"), "РегистрыРасчета"); - ИменаКоллекций.Вставить(ВРег("БизнесПроцесс"), "БизнесПроцессы"); - ИменаКоллекций.Вставить(ВРег("Задача"), "Задачи"); - ИменаКоллекций.Вставить(ВРег("ВнешниеИсточникиДанных"), "ВнешнийИсточникДанных"); + Результат = Новый Структура; + Результат.Вставить("ПоКоллекциям", Новый Соответствие); + Результат.Вставить("ПоВидамОбъектов", Новый Соответствие); - Возврат Новый ФиксированноеСоответствие(ИменаКоллекций); + ДобавитьСвойстваВидаОбъектов(Результат, Неопределено, Ложь, Ложь, Ложь, + "Подсистемы", "Подсистема", "Subsystems", "Subsystem"); // @Non-NLS-1 @Non-NLS-2 + + ДобавитьСвойстваВидаОбъектов(Результат, Неопределено, Ложь, Ложь, Ложь, + "ОбщиеМодули", "ОбщийМодуль", "CommonModules", "CommonModule"); // @Non-NLS-1 @Non-NLS-2 + + ДобавитьСвойстваВидаОбъектов(Результат, Неопределено, Ложь, Ложь, Ложь, + "ПараметрыСеанса", "ПараметрСеанса", "SessionParameters", "SessionParameter"); // @Non-NLS-1 @Non-NLS-2 + + ДобавитьСвойстваВидаОбъектов(Результат, Неопределено, Ложь, Ложь, Ложь, + "Роли", "Роль", "Roles", "Role"); // @Non-NLS-1 @Non-NLS-2 + + ДобавитьСвойстваВидаОбъектов(Результат, Неопределено, Ложь, Ложь, Ложь, + "ОбщиеРеквизиты", "ОбщийРеквизит", "CommonAttributes", "CommonAttribute"); // @Non-NLS-1 @Non-NLS-2 + + ДобавитьСвойстваВидаОбъектов(Результат, ПланыОбмена, Истина, Истина, Ложь, + "ПланыОбмена", "ПланОбмена", "ExchangePlans", "ExchangePlan"); // @Non-NLS-1 @Non-NLS-2 + + ДобавитьСвойстваВидаОбъектов(Результат, КритерииОтбора, Ложь, Ложь, Ложь, + "КритерииОтбора", "КритерийОтбора", "FilterCriteria", "FilterCriterion"); // @Non-NLS-1 @Non-NLS-2 + + ДобавитьСвойстваВидаОбъектов(Результат, Неопределено, Ложь, Ложь, Ложь, + "ПодпискиНаСобытия", "ПодпискаНаСобытие", "EventSubscriptions", "EventSubscription"); // @Non-NLS-1 @Non-NLS-2 + + ДобавитьСвойстваВидаОбъектов(Результат, Неопределено, Ложь, Ложь, Ложь, + "РегламентныеЗадания", "РегламентноеЗадание", "ScheduledJobs", "ScheduledJob"); // @Non-NLS-1 @Non-NLS-2 + + ДобавитьСвойстваВидаОбъектов(Результат, Неопределено, Ложь, Ложь, Ложь, + "Боты", "Бот", "Bots", "Bot"); // @Non-NLS-1 @Non-NLS-2 + + ДобавитьСвойстваВидаОбъектов(Результат, Неопределено, Ложь, Ложь, Ложь, + "ФункциональныеОпции", "ФункциональнаяОпция", "FunctionalOptions", "FunctionalOption"); // @Non-NLS-1 @Non-NLS-2 + + ДобавитьСвойстваВидаОбъектов(Результат, Неопределено, Ложь, Ложь, Ложь, + "ПараметрыФункциональныхОпций", "ПараметрФункциональныхОпций", "FunctionalOptionParameters", "FunctionalOptionsParameter"); // @Non-NLS-1 @Non-NLS-2 + + ДобавитьСвойстваВидаОбъектов(Результат, Неопределено, Ложь, Ложь, Ложь, + "ОпределяемыеТипы", "ОпределяемыйТип", "DefinedTypes", "DefinedType"); // @Non-NLS-1 @Non-NLS-2 + + ДобавитьСвойстваВидаОбъектов(Результат, ХранилищаНастроек, Истина, Ложь, Ложь, + "ХранилищаНастроек", "ХранилищеНастроек", "SettingsStorages", "SettingsStorage"); // @Non-NLS-1 @Non-NLS-2 + + ДобавитьСвойстваВидаОбъектов(Результат, Неопределено, Ложь, Ложь, Ложь, + "ОбщиеКоманды", "ОбщаяКоманда", "CommonCommands", "CommonCommand"); // @Non-NLS-1 @Non-NLS-2 + + ДобавитьСвойстваВидаОбъектов(Результат, Неопределено, Ложь, Ложь, Ложь, + "ГруппыКоманд", "ГруппаКоманд", "CommandGroups", "CommandGroup"); // @Non-NLS-1 @Non-NLS-2 + + ДобавитьСвойстваВидаОбъектов(Результат, Неопределено, Ложь, Ложь, Ложь, + "ОбщиеФормы", "ОбщаяФорма", "CommonForms", "CommonForm"); // @Non-NLS-1 @Non-NLS-2 + + ДобавитьСвойстваВидаОбъектов(Результат, Неопределено, Ложь, Ложь, Ложь, + "ОбщиеМакеты", "ОбщийМакет", "CommonTemplates", "CommonTemplate"); // @Non-NLS-1 @Non-NLS-2 + + ДобавитьСвойстваВидаОбъектов(Результат, Неопределено, Ложь, Ложь, Ложь, + "ОбщиеКартинки", "ОбщаяКартинка", "CommonPictures", "CommonPicture"); // @Non-NLS-1 @Non-NLS-2 + + ДобавитьСвойстваВидаОбъектов(Результат, Неопределено, Ложь, Ложь, Ложь, + "ПакетыXDTO", "ПакетXDTO", "XDTOPackages", "XDTOPackage"); // @Non-NLS-1 @Non-NLS-2 + + ДобавитьСвойстваВидаОбъектов(Результат, Неопределено, Ложь, Ложь, Ложь, + "WebСервисы", "WebСервис", "WebServices", "WebService"); // @Non-NLS-1 @Non-NLS-2 + + ДобавитьСвойстваВидаОбъектов(Результат, Неопределено, Ложь, Ложь, Ложь, + "HTTPСервисы", "HTTPСервис", "HTTPServices", "HTTPService"); // @Non-NLS-1 @Non-NLS-2 + + ДобавитьСвойстваВидаОбъектов(Результат, WSСсылки, Ложь, Ложь, Ложь, + "WSСсылки", "WSСсылка", "WSReferences", "WSReference"); // @Non-NLS-1 @Non-NLS-2 + + ДобавитьСвойстваВидаОбъектов(Результат, СервисыИнтеграции, Ложь, Ложь, Ложь, + "СервисыИнтеграции", "СервисИнтеграции", "IntegrationServices", "IntegrationService"); // @Non-NLS-1 @Non-NLS-2 + + ДобавитьСвойстваВидаОбъектов(Результат, Неопределено, Ложь, Ложь, Ложь, + "ЭлементыСтиля", "ЭлементСтиля", "StyleItems", "StyleItem"); // @Non-NLS-1 @Non-NLS-2 + + ДобавитьСвойстваВидаОбъектов(Результат, Неопределено, Ложь, Ложь, Ложь, + "Стили", "Стиль", "Styles", "Style"); // @Non-NLS-1 @Non-NLS-2 + + ДобавитьСвойстваВидаОбъектов(Результат, Неопределено, Ложь, Ложь, Ложь, + "Языки", "Язык", "Languages", "Language"); // @Non-NLS-1 @Non-NLS-2 + + ДобавитьСвойстваВидаОбъектов(Результат, Константы, Истина, Ложь, Ложь, + "Константы", "Константа", "Constants", "Constant"); // @Non-NLS-1 @Non-NLS-2 + + ДобавитьСвойстваВидаОбъектов(Результат, Справочники, Истина, Истина, Ложь, + "Справочники", "Справочник", "Catalogs", "Catalog"); // @Non-NLS-1 @Non-NLS-2 + + ДобавитьСвойстваВидаОбъектов(Результат, Документы, Истина, Истина, Ложь, + "Документы", "Документ", "Documents", "Document"); // @Non-NLS-1 @Non-NLS-2 + + ДобавитьСвойстваВидаОбъектов(Результат, Последовательности, Ложь, Ложь, Ложь, + "Последовательности", "Последовательность", "Sequences", "Sequence"); // @Non-NLS-1 @Non-NLS-2 + + ДобавитьСвойстваВидаОбъектов(Результат, ЖурналыДокументов, Истина, Ложь, Ложь, + "ЖурналыДокументов", "ЖурналДокументов", "DocumentJournals", "DocumentJournal"); // @Non-NLS-1 @Non-NLS-2 + + ДобавитьСвойстваВидаОбъектов(Результат, Перечисления, Истина, Истина, Ложь, + "Перечисления", "Перечисление", "Enums", "Enum"); // @Non-NLS-1 @Non-NLS-2 + + ДобавитьСвойстваВидаОбъектов(Результат, Отчеты, Истина, Ложь, Ложь, + "Отчеты", "Отчет", "Reports", "Report"); // @Non-NLS-1 @Non-NLS-2 + + ДобавитьСвойстваВидаОбъектов(Результат, Обработки, Истина, Ложь, Ложь, + "Обработки", "Обработка", "DataProcessors", "DataProcessor"); // @Non-NLS-1 @Non-NLS-2 + + ДобавитьСвойстваВидаОбъектов(Результат, ПланыВидовХарактеристик, Истина, Истина, Ложь, + "ПланыВидовХарактеристик", "ПланВидовХарактеристик", "ChartsOfCharacteristicTypes", "ChartOfCharacteristicTypes"); // @Non-NLS-1 @Non-NLS-2 + + ДобавитьСвойстваВидаОбъектов(Результат, ПланыСчетов, Истина, Истина, Ложь, + "ПланыСчетов", "ПланСчетов", "ChartsOfAccounts", "ChartOfAccounts"); // @Non-NLS-1 @Non-NLS-2 + + ДобавитьСвойстваВидаОбъектов(Результат, ПланыВидовРасчета, Истина, Истина, Ложь, + "ПланыВидовРасчета", "ПланВидовРасчета", "ChartsOfCalculationTypes", "ChartOfCalculationTypes"); // @Non-NLS-1 @Non-NLS-2 + + ДобавитьСвойстваВидаОбъектов(Результат, РегистрыСведений, Истина, Ложь, Истина, + "РегистрыСведений", "РегистрСведений", "InformationRegisters", "InformationRegister"); // @Non-NLS-1 @Non-NLS-2 + + ДобавитьСвойстваВидаОбъектов(Результат, РегистрыНакопления, Истина, Ложь, Истина, + "РегистрыНакопления", "РегистрНакопления", "AccumulationRegisters", "AccumulationRegister"); // @Non-NLS-1 @Non-NLS-2 + + ДобавитьСвойстваВидаОбъектов(Результат, РегистрыБухгалтерии, Истина, Ложь, Истина, + "РегистрыБухгалтерии", "РегистрБухгалтерии", "AccountingRegisters", "AccountingRegister"); // @Non-NLS-1 @Non-NLS-2 + + ДобавитьСвойстваВидаОбъектов(Результат, РегистрыРасчета, Истина, Ложь, Истина, + "РегистрыРасчета", "РегистрРасчета", "CalculationRegisters", "CalculationRegister"); // @Non-NLS-1 @Non-NLS-2 + + ДобавитьСвойстваВидаОбъектов(Результат, БизнесПроцессы, Истина, Истина, Ложь, + "БизнесПроцессы", "БизнесПроцесс", "BusinessProcesses", "BusinessProcess"); // @Non-NLS-1 @Non-NLS-2 + + ДобавитьСвойстваВидаОбъектов(Результат, Задачи, Истина, Истина, Ложь, + "Задачи", "Задача", "Tasks", "Task"); // @Non-NLS-1 @Non-NLS-2 + + ДобавитьСвойстваВидаОбъектов(Результат, ВнешниеИсточникиДанных, Ложь, Ложь, Ложь, + "ВнешниеИсточникиДанных", "ВнешнийИсточникДанных", "ExternalDataSources", "ExternalDataSource"); // @Non-NLS-1 @Non-NLS-2 + + ФиксированныйРезультат = Новый Структура; + ФиксированныйРезультат.Вставить("ПоКоллекциям", + Новый ФиксированноеСоответствие(Результат.ПоКоллекциям)); + ФиксированныйРезультат.Вставить("ПоВидамОбъектов", + Новый ФиксированноеСоответствие(Результат.ПоВидамОбъектов)); + + Возврат Новый ФиксированнаяСтруктура(ФиксированныйРезультат); + +КонецФункции + +// АПК:134-выкл - Количество параметров более 7 для компактного описания и производительности. + +// Для функции СвойстваВидовОбъектовМетаданных. +// +// Параметры: +// Результат - Структура: +// * ПоКоллекциям - Соответствие +// * ПоВидамОбъектов - Соответствие +// Менеджер - Произвольный - менеджер объектов. +// ЕстьМодульМенеджера - Булево +// ЕстьСсылка - Булево +// ЕстьКлючЗаписи - Булево +// ИмяКоллекцииЯзыкРусский - Строка - например, "Справочники". +// ИмяВидаОбъектаЯзыкРусский - Строка - например, "Справочник". +// ИмяКоллекцииЯзыкАнглийский - Строка - например, "Catalogs". +// ИмяВидаОбъектаЯзыкАнглийский - Строка - например, "Catalog". +// +Процедура ДобавитьСвойстваВидаОбъектов(Результат, Менеджер, ЕстьМодульМенеджера, ЕстьСсылка, ЕстьКлючЗаписи, + ИмяКоллекцииЯзыкРусский, ИмяВидаОбъектаЯзыкРусский, ИмяКоллекцииЯзыкАнглийский, ИмяВидаОбъектаЯзыкАнглийский) + + Свойства = Новый Структура(СтандартныеПодсистемыПовтИсп.НовыеСвойстваВидаОбъектов()); // см. НовыеСвойстваВидаОбъектов + Свойства.Менеджер = Менеджер; + Свойства.ЕстьМодульМенеджера = ЕстьМодульМенеджера; + Свойства.ЕстьСсылка = ЕстьСсылка; + Свойства.ЕстьКлючЗаписи = ЕстьКлючЗаписи; + Если Метаданные.ВариантВстроенногоЯзыка = Метаданные.СвойстваОбъектов.ВариантВстроенногоЯзыка.Русский Тогда + Свойства.ИмяКоллекции = ИмяКоллекцииЯзыкРусский; + Свойства.ИмяВидаОбъекта = ИмяВидаОбъектаЯзыкРусский; + Свойства.ИмяТипа = ?(ЕстьСсылка, ИмяВидаОбъектаЯзыкРусский + "Ссылка", + ?(ЕстьКлючЗаписи, ИмяВидаОбъектаЯзыкРусский + "КлючЗаписи", "")); + Иначе + Свойства.ИмяКоллекции = ИмяКоллекцииЯзыкАнглийский; + Свойства.ИмяВидаОбъекта = ИмяВидаОбъектаЯзыкАнглийский; + Свойства.ИмяТипа = ?(ЕстьСсылка, ИмяВидаОбъектаЯзыкАнглийский + "Ref", + ?(ЕстьКлючЗаписи, ИмяВидаОбъектаЯзыкАнглийский + "RecordKey", "")); + КонецЕсли; + Свойства = Новый ФиксированнаяСтруктура(Свойства); + + Результат.ПоКоллекциям.Вставить(ВРег(ИмяКоллекцииЯзыкРусский), Свойства); + Результат.ПоКоллекциям.Вставить(ВРег(ИмяКоллекцииЯзыкАнглийский), Свойства); + + Результат.ПоВидамОбъектов.Вставить(ВРег(ИмяВидаОбъектаЯзыкРусский), Свойства); + Результат.ПоВидамОбъектов.Вставить(ВРег(ИмяВидаОбъектаЯзыкАнглийский), Свойства); + +КонецПроцедуры + +// АПК:134-вкл + +// Описание свойств фиксированной структуры. +// +// Возвращаемое значение: +// ФиксированнаяСтруктура: +// * ИмяКоллекции - Строка - например, "Справочники" на варианте встроенного языка конфигурации. +// * ИмяВидаОбъекта - Строка - например, "Справочник" на варианте встроенного языка конфигурации. +// * ЕстьСсылка - Булево +// * ЕстьКлючЗаписи - Строка +// * ИмяТипа - Строка - имя типа ссылки или типа ключа записи, если есть. +// * ЕстьМодульМенеджера - Булево +// * Менеджер - ПланыОбменаМенеджер +// - КритерииОтбораМенеджер +// - ХранилищаНастроекМенеджер +// - WSСсылкиМенеджер +// - СервисыИнтеграцииМенеджер +// - КонстантыМенеджер +// - СправочникиМенеджер +// - ДокументыМенеджер +// - ПоследовательностиМенеджер +// - ЖурналыДокументовМенеджер +// - ПеречисленияМенеджер +// - ОтчетыМенеджер +// - ОбработкиМенеджер +// - ПланыВидовХарактеристикМенеджер +// - ПланыСчетовМенеджер +// - ПланыВидовРасчетаМенеджер +// - РегистрыСведенийМенеджер +// - РегистрыНакопленияМенеджер +// - РегистрыБухгалтерииМенеджер +// - РегистрыРасчетаМенеджер +// - БизнесПроцессыМенеджер +// - ЗадачиМенеджер +// - ВнешниеИсточникиДанныхМенеджер +// - Неопределено - менеджер объекта, имеющего модуль менеджера. +// +Функция НовыеСвойстваВидаОбъектов() Экспорт + + Результат = Новый Структура; + Результат.Вставить("ИмяКоллекции", ""); + Результат.Вставить("ИмяВидаОбъекта", ""); + Результат.Вставить("ЕстьСсылка", Ложь); + Результат.Вставить("ЕстьКлючЗаписи", Ложь); + Результат.Вставить("ИмяТипа", ""); + Результат.Вставить("ЕстьМодульМенеджера", Ложь); + Результат.Вставить("Менеджер", Неопределено); + + Возврат Новый ФиксированнаяСтруктура(Результат); КонецФункции @@ -876,7 +1085,7 @@ УстановитьБезопасныйРежим(Истина); // АПК:488-выкл Поддержка новых типов платформы (исполняемый код безопасен) - Возврат Вычислить("РежимЗамещения.Добавление"); + Возврат Вычислить("РежимЗамещения.Добавление"); // Не нарушает безопасность информации, так как вычисляется фиксированная строка, содержащая только свойство системного перечисления платформы. // АПК:488-вкл КонецФункции @@ -890,21 +1099,21 @@ УстановитьБезопасныйРежим(Истина); // АПК:488-выкл Поддержка новых типов платформы (исполняемый код безопасен) - Возврат Вычислить("РежимЗамещения.Замещение"); + Возврат Вычислить("РежимЗамещения.Замещение"); // Не нарушает безопасность информации, так как вычисляется фиксированная строка, содержащая только свойство системного перечисления платформы. // АПК:488-вкл КонецФункции Функция РежимОбновленияНабораЗаписей() Экспорт - Если Не РежимыЗамещенияДоступны(Истина) Тогда + Если Не РежимыЗамещенияДоступны() Тогда Возврат Неопределено; КонецЕсли; УстановитьБезопасныйРежим(Истина); // АПК:488-выкл Поддержка новых типов платформы (исполняемый код безопасен) - Возврат Вычислить("РежимЗамещения.Обновление"); + Возврат Вычислить("РежимЗамещения.Обновление"); // Не нарушает безопасность информации, так как вычисляется фиксированная строка, содержащая только свойство системного перечисления платформы. // АПК:488-вкл КонецФункции @@ -918,7 +1127,7 @@ УстановитьБезопасныйРежим(Истина); // АПК:488-выкл Поддержка новых типов платформы (исполняемый код безопасен) - Возврат Вычислить("РежимЗамещения.Слияние"); + Возврат Вычислить("РежимЗамещения.Слияние"); // Не нарушает безопасность информации, так как вычисляется фиксированная строка, содержащая только свойство системного перечисления платформы. // АПК:488-вкл КонецФункции @@ -932,12 +1141,12 @@ УстановитьБезопасныйРежим(Истина); // АПК:488-выкл Поддержка новых типов платформы (исполняемый код безопасен) - Возврат Вычислить("РежимЗамещения.Удаление"); + Возврат Вычислить("РежимЗамещения.Удаление"); // Не нарушает безопасность информации, так как вычисляется фиксированная строка, содержащая только свойство системного перечисления платформы. // АПК:488-вкл КонецФункции -Функция РежимыЗамещенияДоступны(ВключаяОбновление = Ложь) +Функция РежимыЗамещенияДоступны() СистемнаяИнформация = Новый СистемнаяИнформация; Версия = СистемнаяИнформация.ВерсияПриложения; @@ -956,11 +1165,8 @@ Функция ТипРежимЗамещения() Экспорт - УстановитьБезопасныйРежим(Истина); - - // АПК:488-выкл Поддержка новых методов платформы (исполняемый код безопасен) - Возврат Вычислить("Тип(""РежимЗамещения"")"); - // АПК:488-вкл + ИмяТипа = "РежимЗамещения"; + Возврат Тип(ИмяТипа); КонецФункции diff --git a/Конфигурация/CommonModules/СтандартныеПодсистемыСервер/Ext/Module.bsl b/Конфигурация/CommonModules/СтандартныеПодсистемыСервер/Ext/Module.bsl index 6bae70add..905183001 100644 --- a/Конфигурация/CommonModules/СтандартныеПодсистемыСервер/Ext/Module.bsl +++ b/Конфигурация/CommonModules/СтандартныеПодсистемыСервер/Ext/Module.bsl @@ -5324,7 +5324,7 @@ // Вызов ОбщегоНазначения.ВычислитьВБезопасномРежиме не требуется, // т.к. это проверка установки привилегированного режима в функции Вычислить без установки безопасного режима. - Возврат Вычислить("ДоступенПереходВПривилегированныйРежим()"); // АПК:488 + Возврат Вычислить("ДоступенПереходВПривилегированныйРежим()"); // АПК:488 - Не нарушает безопасность информации, так как вычисляется фиксированная строка, содержащая только вызов функции модуля конфигурации. КонецФункции diff --git a/Конфигурация/CommonModules/ТарификацияБизнес/Ext/Module.bsl b/Конфигурация/CommonModules/ТарификацияБизнес/Ext/Module.bsl index 1cb84e3bb..513432ff7 100644 --- a/Конфигурация/CommonModules/ТарификацияБизнес/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ТарификацияБизнес/Ext/Module.bsl @@ -410,8 +410,9 @@ ОтправлятьОповещение = Ложь, ОчищатьНастройкиПользователя = Истина) Экспорт - ОписаниеДоступныхПриложений = ДоступныеПриложения(ПроверятьЛицензии, Истина); - ОписаниеДоступныхПриложений = УдалитьПриложениеИзСписка(ОписаниеДоступныхПриложений, ОписаниеНовогоПриложения.Имя); + ДоступныеПриложения = ДоступныеПриложения(ПроверятьЛицензии, Истина); + ПриложениеУжеПодключено = ПриложениеЕстьВСписке(ДоступныеПриложения, ОписаниеНовогоПриложения.Имя); + ОписаниеДоступныхПриложений = УдалитьПриложениеИзСписка(ДоступныеПриложения, ОписаниеНовогоПриложения.Имя); ПодключенноеПриложениеАктуально = Истина; Если ПроверятьЛицензии = Истина Тогда @@ -447,7 +448,10 @@ ОтключитьПриложения(ПриложенияДляОтключения, ПричинаПодключения, ДоступныеВозможностиПриложений); ПодключитьПриложения(ПриложенияДляПодключения, ПричинаПодключения); - Если ОтправлятьОповещение И НЕ ПодключаетсяЗамещаемоеПриложение Тогда + Если ОтправлятьОповещение + И НЕ ПодключаетсяЗамещаемоеПриложение + И ПодключенноеПриложениеАктуально = Истина + И Не ПриложениеУжеПодключено Тогда ОповеститьОПодключенномПриложении(ОписаниеНовогоПриложения); КонецЕсли; @@ -936,6 +940,18 @@ КонецФункции +Функция ПриложениеЕстьВСписке(СписокПриложений, ИмяПриложения) + + Для каждого ОписаниеПриложения Из СписокПриложений Цикл + Если ОписаниеПриложения.Имя = ИмяПриложения Тогда + Возврат Истина; + КонецЕсли; + КонецЦикла; + + Возврат Ложь; + +КонецФункции + Функция ДоступныеВозможностиПриложений(ОписаниеДоступныхПриложений, ЗамещаемыеПриложения = Неопределено) ДоступныеВозможностиПриложений = Новый Массив; diff --git a/Конфигурация/CommonModules/ТорговыеПредложенияПовтИсп/Ext/Module.bsl b/Конфигурация/CommonModules/ТорговыеПредложенияПовтИсп/Ext/Module.bsl index 8e3bf42aa..480236389 100644 --- a/Конфигурация/CommonModules/ТорговыеПредложенияПовтИсп/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ТорговыеПредложенияПовтИсп/Ext/Module.bsl @@ -181,8 +181,14 @@ ИмяСтавкиНДС = Неопределено; ТорговыеПредложенияПереопределяемый.ПолучитьИмяСтавкиНДС(СтавкаНДС, ИмяСтавкиНДС); - Если ИмяСтавкиНДС = "БезНДС" Или ИмяСтавкиНДС = "НДС0" Тогда + Если ИмяСтавкиНДС = "БезНДС" Тогда Результат = "VAT_WITHOUT" + ИначеЕсли ИмяСтавкиНДС = "НДС0"Тогда + Результат = "VAT_0" + ИначеЕсли ИмяСтавкиНДС = "НДС5" Или ИмяСтавкиНДС = "НДС5_105" Тогда + Результат = "VAT_5" + ИначеЕсли ИмяСтавкиНДС = "НДС7" Или ИмяСтавкиНДС = "НДС7_107" Тогда + Результат = "VAT_7" ИначеЕсли ИмяСтавкиНДС = "НДС10" Или ИмяСтавкиНДС = "НДС10_110" Тогда Результат = "VAT_10" ИначеЕсли ИмяСтавкиНДС = "НДС18" Или ИмяСтавкиНДС = "НДС18_118" Тогда @@ -202,7 +208,7 @@ // Получение ставки НДС по коду. // // Параметры: -// СтавкаСтрокой - Строка - наименование ставки НДС (БезНДС, НДС10, НДС18, НДС20, НДС22). +// СтавкаСтрокой - Строка - наименование ставки НДС (БезНДС, НДС5, НДС7, НДС10, НДС18, НДС20, НДС22). // // Возвращаемое значение: // Ссылка - значение ставки НДС. diff --git a/Конфигурация/CommonModules/ТорговыеПредложенияСлужебный/Ext/Module.bsl b/Конфигурация/CommonModules/ТорговыеПредложенияСлужебный/Ext/Module.bsl index 2455d1a7f..4ee515652 100644 --- a/Конфигурация/CommonModules/ТорговыеПредложенияСлужебный/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ТорговыеПредложенияСлужебный/Ext/Module.bsl @@ -3762,13 +3762,16 @@ ДобавитьЗначение(Данные, "termsOfSale", УсловияПродаж, Истина); - Наличие = Неопределено; - Если ПараметрыЗапроса.Наличие = 1 Тогда + Если ПараметрыЗапроса.Наличие = 0 Тогда + Наличие = "OUT_OF_STOCK"; + ИначеЕсли ПараметрыЗапроса.Наличие = 1 Тогда Наличие = "LOW"; ИначеЕсли ПараметрыЗапроса.Наличие = 2 Тогда Наличие = "MEDIUM"; ИначеЕсли ПараметрыЗапроса.Наличие = 3 Тогда Наличие = "HIGH"; + Иначе + Наличие = Неопределено; КонецЕсли; Остатки = Новый Структура; // stock @@ -6466,7 +6469,7 @@ Функция ПредставлениеОстатковПоЗапросу() - Результат = НСтр("ru = 'Нет на складе'"); + Результат = НСтр("ru = 'По запросу'"); Возврат Результат; @@ -6474,14 +6477,16 @@ Функция ПредставлениеОтносительногоОстатка(КодНаличия) - Результат = ПредставлениеОстатковПоЗапросу(); - - Если КодНаличия = 1 Тогда + Если КодНаличия = 0 Тогда + Результат = НСтр("ru = 'Нет на складе'"); + ИначеЕсли КодНаличия = 1 Тогда Результат = НСтр("ru = 'мало'"); ИначеЕсли КодНаличия = 2 Тогда Результат = НСтр("ru = 'достаточно'"); ИначеЕсли КодНаличия = 3 Тогда Результат = НСтр("ru = 'много'"); + Иначе + Результат = ПредставлениеОстатковПоЗапросу(); КонецЕсли; Возврат Результат; @@ -8326,7 +8331,9 @@ КонецЕсли; ЗначениеСвойства = ЭлементКоллекции[Свойство]; - Если ЗначениеСвойства = "LOW" Тогда + Если ЗначениеСвойства = "OUT_OF_STOCK" Тогда + НовоеЗначение = 0; + ИначеЕсли ЗначениеСвойства = "LOW" Тогда НовоеЗначение = 1; ИначеЕсли ЗначениеСвойства = "MEDIUM" Тогда НовоеЗначение = 2; @@ -8695,6 +8702,8 @@ Если ТипЗнч(ЭлементКоллекции) = Тип("ЗапросУничтоженияТаблицыСхемыЗапроса") Тогда Продолжить; + ИначеЕсли ЗначениеЗаполнено(ЭлементКоллекции.ТаблицаДляДобавления) Тогда + Продолжить; ИначеЕсли ВременныеТаблицы.Свойство(ЭлементКоллекции.ТаблицаДляПомещения) Тогда // Сохранение строки коллекции для определения индекса. СтрокиРезультатов[ЭлементКоллекции.ТаблицаДляПомещения] = ЭлементКоллекции; @@ -12344,6 +12353,9 @@ Результат = Новый Массив; Результат.Добавить("VAT_WITHOUT"); + Результат.Добавить("VAT_0"); + Результат.Добавить("VAT_5"); + Результат.Добавить("VAT_7"); Результат.Добавить("VAT_10"); ДатаПроверки = ТекущаяДатаСеанса(); @@ -13061,6 +13073,10 @@ ИсточникРезультат = ОператорЗапросаПриемник.Источники.НайтиПоИмени(Источник.Источник.ИмяТаблицы); + Если ТипЗнч(Источник.Источник) <> Тип("ТаблицаСхемыЗапроса") Тогда + Продолжить; + КонецЕсли; + КоличествоПараметров = Источник.Источник.Параметры.Количество(); Для СчетчикПараметров = 1 По КоличествоПараметров Цикл diff --git a/Конфигурация/CommonModules/ТрансграничныйЭДО/Ext/Module.bsl b/Конфигурация/CommonModules/ТрансграничныйЭДО/Ext/Module.bsl index 498e6bdc6..cf4298a91 100644 --- a/Конфигурация/CommonModules/ТрансграничныйЭДО/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ТрансграничныйЭДО/Ext/Module.bsl @@ -296,62 +296,6 @@ КонецПроцедуры -// Возвращает данные квитанции ДТС. -// -// Параметры: -// ДвоичныеДанные - ДвоичныеДанные -// ИмяФайлаБезРасширения - Строка -// -// Возвращаемое значение: -// Структура: -// * Представление - см. РаботаСФайламиБЭД.НовоеОписаниеФайла, Неопределено - -// * Подпись - см. РаботаСФайламиБЭД.НовоеОписаниеФайла, Неопределено - -// -Функция ДанныеКвитанцииДТС(ДвоичныеДанные, Знач ИмяФайлаБезРасширения = "") Экспорт - - Результат = Новый Структура(); - Результат.Вставить("Представление", Неопределено); - Результат.Вставить("Подпись", Неопределено); - - Если НЕ ЗначениеЗаполнено(ДвоичныеДанные) Тогда - Возврат Результат; - КонецЕсли; - - Квитанция = ПрочитатьКвитанциюДТС(ДвоичныеДанные); - - Если НЕ ЗначениеЗаполнено(Квитанция) Тогда - Возврат Результат; - КонецЕсли; - - ПредставлениеСтрокой = Квитанция["printForm"]; // Строка - Если НЕ ЗначениеЗаполнено(ПредставлениеСтрокой) Тогда - Возврат Результат; - КонецЕсли; - - Если НЕ ЗначениеЗаполнено(ИмяФайлаБезРасширения) Тогда - ИмяФайлаБезРасширения = РаботаСФайламиБЭД.НовыйUUID(); - КонецЕсли; - - Представление = РаботаСФайламиБЭД.НовоеОписаниеФайла(); - Представление.ДвоичныеДанные = Base64Значение(ПредставлениеСтрокой); - Представление.ИмяФайла = СтрШаблон("%1.pdf", ИмяФайлаБезРасширения); - - ПодписьСтрокой = Квитанция["printFormSignature"]; // Строка - Если НЕ ЗначениеЗаполнено(ПодписьСтрокой) Тогда - Возврат Результат; - КонецЕсли; - - Подпись = РаботаСФайламиБЭД.НовоеОписаниеФайла(); - Подпись.ДвоичныеДанные = Base64Значение(ПодписьСтрокой); - Подпись.ИмяФайла = СтрШаблон("%1.sig", ИмяФайлаБезРасширения); - - Результат.Представление = Представление; - Результат.Подпись = Подпись; - - Возврат Результат; - -КонецФункции - #КонецОбласти #Область ВыгрузкаДляФНС @@ -460,6 +404,20 @@ #Область Прочее +// Проверяет доступен ли обмен без приглашений по идентификатору иностранного контрагента +// +// Параметры: +// ИдентификаторУчастника - Строка +// +// Возвращаемое значение: +// Булево - доступен обмен без приглашений +// +Функция ИностранномуКонтрагентуДоступенОбменБезПриглашений(ИдентификаторУчастника) Экспорт + + Возврат Ложь; + +КонецФункции + // При определении использования универсальных сообщений. // // Параметры: @@ -546,6 +504,18 @@ КонецПроцедуры +// Проверяет возможность автоматического создания контрагента. +// +// Параметры: +// ИдентификаторКонтрагента - Строка +// +// Возвращаемое значение: +// Булево +// +Функция ЗапрещеноСоздаватьКонтрагентовАвтоматически(ИдентификаторКонтрагента) Экспорт + Возврат ЭтоИностранныйОператор(ИдентификаторКонтрагента); +КонецФункции + // Проверяет иностранного оператора // // Параметры: @@ -1829,6 +1799,62 @@ #Область Подписи +// Возвращает данные квитанции ДТС. +// +// Параметры: +// ДвоичныеДанные - ДвоичныеДанные +// ИмяФайлаБезРасширения - Строка +// +// Возвращаемое значение: +// Структура: +// * Представление - см. РаботаСФайламиБЭД.НовоеОписаниеФайла, Неопределено - +// * Подпись - см. РаботаСФайламиБЭД.НовоеОписаниеФайла, Неопределено - +// +Функция ДанныеКвитанцииДТС(ДвоичныеДанные, Знач ИмяФайлаБезРасширения = "") + + Результат = Новый Структура(); + Результат.Вставить("Представление", Неопределено); + Результат.Вставить("Подпись", Неопределено); + + Если НЕ ЗначениеЗаполнено(ДвоичныеДанные) Тогда + Возврат Результат; + КонецЕсли; + + Квитанция = ПрочитатьКвитанциюДТС(ДвоичныеДанные); + + Если НЕ ЗначениеЗаполнено(Квитанция) Тогда + Возврат Результат; + КонецЕсли; + + ПредставлениеСтрокой = Квитанция["printForm"]; // Строка + Если НЕ ЗначениеЗаполнено(ПредставлениеСтрокой) Тогда + Возврат Результат; + КонецЕсли; + + Если НЕ ЗначениеЗаполнено(ИмяФайлаБезРасширения) Тогда + ИмяФайлаБезРасширения = РаботаСФайламиБЭД.НовыйUUID(); + КонецЕсли; + + Представление = РаботаСФайламиБЭД.НовоеОписаниеФайла(); + Представление.ДвоичныеДанные = Base64Значение(ПредставлениеСтрокой); + Представление.ИмяФайла = СтрШаблон("%1.pdf", ИмяФайлаБезРасширения); + + ПодписьСтрокой = Квитанция["printFormSignature"]; // Строка + Если НЕ ЗначениеЗаполнено(ПодписьСтрокой) Тогда + Возврат Результат; + КонецЕсли; + + Подпись = РаботаСФайламиБЭД.НовоеОписаниеФайла(); + Подпись.ДвоичныеДанные = Base64Значение(ПодписьСтрокой); + Подпись.ИмяФайла = СтрШаблон("%1.sig", ИмяФайлаБезРасширения); + + Результат.Представление = Представление; + Результат.Подпись = Подпись; + + Возврат Результат; + +КонецФункции + Функция ТекстОшибкиОтсутствияПроверкиДТС() Возврат НСтр("ru = 'Отсутствует проверка ДТС'"); КонецФункции diff --git a/Конфигурация/CommonModules/ТранспортныеКонтейнерыЭДО/Ext/Module.bsl b/Конфигурация/CommonModules/ТранспортныеКонтейнерыЭДО/Ext/Module.bsl index 1398cd725..d1bdac49e 100644 --- a/Конфигурация/CommonModules/ТранспортныеКонтейнерыЭДО/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ТранспортныеКонтейнерыЭДО/Ext/Module.bsl @@ -7,11 +7,16 @@ // КлючСинхронизации - см. СинхронизацияЭДОКлиентСервер.НовыйКлючСинхронизации // КонтекстДиагностики - см. ОбработкаНеисправностейБЭД.НовыйКонтекстДиагностики // ИмяБезРасширения - Строка - имя файла контейнера +// ПараметрыУчетныхЗаписей - Неопределено, Соответствие из см. УчетныеЗаписиЭДО.ПараметрыУчетнойЗаписи - +// параметры учетных записей, которые используются при распаковке контейнеров: Организация, НеИспользоватьПриглашения. +// +// // Возвращаемое значение: // Структура: // * ТранспортныйКонтейнер - ДокументСсылка.ТранспортныйКонтейнерЭДО // * Объект - Произвольный - связанный с контейнером объект -Функция СохранитьКонтейнер(ОписаниеКонтейнера, КлючСинхронизации, КонтекстДиагностики, ИмяБезРасширения = "") Экспорт +Функция СохранитьКонтейнер(ОписаниеКонтейнера, КлючСинхронизации, КонтекстДиагностики, ИмяБезРасширения = "", + ПараметрыУчетныхЗаписей = Неопределено) Экспорт РезультатСохранения = Новый Структура; РезультатСохранения.Вставить("ТранспортныйКонтейнер", Документы.ТранспортныйКонтейнерЭДО.ПустаяСсылка()); @@ -56,7 +61,7 @@ Попытка // Распаковка файла и заполнение параметров контейнера. ЗаполнитьПараметрыКонтейнера(ПараметрыКонтейнера, ОписаниеКонтейнера.ДвоичныеДанные, - Неопределено, КонтекстДиагностики); + Неопределено, КонтекстДиагностики,, ПараметрыУчетныхЗаписей); // Повторная запись контейнера с параметрами, полученными в результате распаковки файла. ЗаполнитьТранспортныйКонтейнер(ПараметрыКонтейнера, ТранспортныйКонтейнер); Исключение @@ -386,7 +391,6 @@ КонецФункции - // Распаковывает архив транспортного контейнера. // // Параметры: @@ -396,7 +400,7 @@ // // Возвращаемое значение: // Структура: -// * Карточка - см. ПрочитатьКарточкуЭлектронногоДокумента +// * Карточка - см. НовоеОписаниеКарточкиЭлектронногоДокумента // * Метаданные - см. ПрочитатьФайлМетаданных // * Ошибка - см. ПрочитатьФайлОшибки // * Картинки - см. РаботаСФайламиБЭД.НовоеОписаниеФайла @@ -520,6 +524,7 @@ КонецЕсли; ТрансграничныйЭДО.ДополнитьОписаниеКонтейнера(ОписаниеКонтейнера); + СервисEDIСлужебный.ВыполнитьПоискИдентификаторовДокументооборотаПоИмениФайла(ОписаниеКонтейнера); Возврат ОписаниеКонтейнера; @@ -946,8 +951,125 @@ КонецПроцедуры +// Параметры: +// Таблица - ТаблицаЗначений: +// * КодТранзакции - Строка +// * ТипЭлементаРегламента - ПеречислениеСсылка.ТипыЭлементовРегламентаЭДО +// * ТипДокумента - Строка +Процедура ПриФормированииТаблицыТиповЭлементовРегламента(Таблица) Экспорт + Если ОбщегоНазначения.ПодсистемаСуществует("ЭлектронноеВзаимодействие.ОбменСГИСЭПД") Тогда + МодульОбменСГИСЭПД = ОбщегоНазначения.ОбщийМодуль("ОбменСГИСЭПД"); + МодульОбменСГИСЭПД.ПриФормированииТаблицыТиповЭлементовРегламента(Таблица); + КонецЕсли; + + Если ОбщегоНазначения.ПодсистемаСуществует("ЭлектронноеВзаимодействие.ЭлектронноеАктированиеЕИС") Тогда + МодульЭлектронноеАктированиеЕИС = ОбщегоНазначения.ОбщийМодуль("ЭлектронноеАктированиеЕИС"); + МодульЭлектронноеАктированиеЕИС.ПриФормированииТаблицыТиповЭлементовРегламента(Таблица); + КонецЕсли; + + ТрансграничныйЭДО.ПриФормированииТаблицыТиповЭлементовРегламента(Таблица); + ЧерновикиЭДО.ПриФормированииТаблицыТиповЭлементовРегламента(Таблица); +КонецПроцедуры + +// Параметры: +// Таблица - ТаблицаЗначений: +// * КодРегламента - Строка +// * КодДокумента - Строка +// * ТипРегламента - ПеречислениеСсылка.ТипыРегламентовЭДО +// * ТипДокумента - ПеречислениеСсылка.ТипыДокументовЭДО +Процедура ПриФормированииТаблицыТиповРегламентов(Таблица) Экспорт + Если ОбщегоНазначения.ПодсистемаСуществует("ЭлектронноеВзаимодействие.ОбменСГИСЭПД") Тогда + МодульОбменСГИСЭПД = ОбщегоНазначения.ОбщийМодуль("ОбменСГИСЭПД"); + МодульОбменСГИСЭПД.ПриФормированииТаблицыТиповРегламентов(Таблица); + КонецЕсли; + + ЧерновикиЭДО.ПриФормированииТаблицыТиповРегламентов(Таблица); +КонецПроцедуры + #Область ДляВызоваИзДругихПодсистем +// Возвращает карточку транспортного контейнера оператора ЭДО (card.xml). +// Для обмена через сервер ЕИС используется собственная структура карточки, +// см. ЭлектронноеАктированиеЕИСПолучениеВходящих.НовоеОписаниеКарточкиПакета. +// +// Возвращаемое значение: +// Структура: +// * ТипДокумента - Строка +// * ИдентификаторСообщения - Строка +// * ТекстСопроводительнойЗаписки - Строка +// * ИдентификаторыСообщенийОснований - Массив из Строка +// * ИдентификаторыДокументооборотовОснований - Массив из Строка +// * ЗаголовокДокумента - Строка +// * ТребуетсяПодтверждение - Булево +// * ТребуетсяИзвещение - Булево +// * НомерДоговора - Строка +// * ДатаДоговора - Дата +// * ДатаДокумента - Дата +// * Дата - Дата +// * Номер - Строка +// * Сумма - Число +// * ИдентификаторОтправителя - Строка +// * ИдентификаторПолучателя - Строка +// * НаименованиеКонтрагента - Строка +// * ИННКонтрагента - Строка +// * КППКонтрагента - Строка +// * ИННОрганизации - Строка +// * КППОрганизации - Строка +// * КППОрганизацииУточненный - Неопределено +// - Строка +// * КППКонтрагентаУточненный - Неопределено +// - Строка +// * НаименованиеКонтрагентаУточненное - Неопределено +// - Строка +// * АдресРесурсаКонтрагента - Неопределено +// - Строка +// * ДоверенностьВерна - Неопределено +// - Булево +// * КарточкаМЧД - Строка +// * ТипПользователя - Строка +// * ФайлНазначения - Строка +// * ДанныеЧерновика - Неопределено +// - См. ЧерновикиЭДО.НовыеДанныеЧерновика +// * ДополнительныеПараметры - Структура +Функция НовоеОписаниеКарточкиЭлектронногоДокумента() Экспорт + + Карточка = Новый Структура; + Карточка.Вставить("ТипДокумента", ""); + Карточка.Вставить("ИдентификаторСообщения", ""); + Карточка.Вставить("ТекстСопроводительнойЗаписки", ""); + Карточка.Вставить("ИдентификаторыСообщенийОснований", Новый Массив); + Карточка.Вставить("ИдентификаторыДокументооборотовОснований", Новый Массив); + Карточка.Вставить("ЗаголовокДокумента", ""); + Карточка.Вставить("ТребуетсяПодтверждение", Ложь); + Карточка.Вставить("ТребуетсяИзвещение", Истина); + Карточка.Вставить("НомерДоговора", ""); + Карточка.Вставить("ДатаДоговора", Дата(1, 1, 1)); + Карточка.Вставить("ДатаДокумента", Дата(1, 1, 1)); + Карточка.Вставить("Дата", Дата(1, 1, 1)); + Карточка.Вставить("Номер", ""); + Карточка.Вставить("Сумма", 0); + Карточка.Вставить("ИдентификаторОтправителя", ""); + Карточка.Вставить("ИдентификаторПолучателя", ""); + Карточка.Вставить("НаименованиеКонтрагента", ""); + Карточка.Вставить("ИННКонтрагента", ""); + Карточка.Вставить("КППКонтрагента", ""); + Карточка.Вставить("ИННОрганизации", ""); + Карточка.Вставить("КППОрганизации", ""); + Карточка.Вставить("КППОрганизацииУточненный", Неопределено); + Карточка.Вставить("КППКонтрагентаУточненный", Неопределено); + Карточка.Вставить("НаименованиеКонтрагентаУточненное", Неопределено); + Карточка.Вставить("АдресРесурсаКонтрагента", Неопределено); + Карточка.Вставить("ДоверенностьВерна", Неопределено); + Карточка.Вставить("КарточкаМЧД", ""); + Карточка.Вставить("ТипПользователя", ""); + Карточка.Вставить("ФайлНазначения", ""); + Карточка.Вставить("ДанныеЧерновика", Неопределено); + Карточка.Вставить("ДополнительныеПараметры", Новый Структура); + + Возврат Карточка; + +КонецФункции + // Возвращает описание документа транспортного контейнера. // // Возвращаемое значение: @@ -1218,16 +1340,16 @@ ЗаблокироватьКонтейнер(ДанныеОбъекта.ТранспортныйКонтейнер); КонтейнерОбъект = ДанныеОбъекта.ТранспортныйКонтейнер.ПолучитьОбъект(); - Если Не КонтейнерОбъект.Организация = ДанныеОбъекта.Организация Тогда + Если Не ЗначениеЗаполнено(КонтейнерОбъект.Организация) Тогда КонтейнерОбъект.Организация = ДанныеОбъекта.Организация; КонецЕсли; - Если Не КонтейнерОбъект.Контрагент = ДанныеОбъекта.Контрагент Тогда + Если Не ЗначениеЗаполнено(КонтейнерОбъект.Контрагент) Тогда КонтейнерОбъект.Контрагент = ДанныеОбъекта.Контрагент; КонецЕсли; - Если Не КонтейнерОбъект.ДоговорКонтрагента = ДанныеОбъекта.ДоговорКонтрагента Тогда + Если Не ЗначениеЗаполнено(КонтейнерОбъект.ДоговорКонтрагента) Тогда КонтейнерОбъект.ДоговорКонтрагента = ДанныеОбъекта.ДоговорКонтрагента; КонецЕсли; - Если Не КонтейнерОбъект.Отправитель = ДанныеОбъекта.ИдентификаторОтправителя Тогда + Если Не ЗначениеЗаполнено(КонтейнерОбъект.Отправитель) Тогда КонтейнерОбъект.Отправитель = ДанныеОбъекта.ИдентификаторОтправителя; КонецЕсли; Если ЗначениеЗаполнено(Объект) Тогда @@ -1490,7 +1612,9 @@ // * ИдентификаторыСообщенийОснований - Массив из Строка // * ИдентификаторыДокументооборотовОснований - Массив из Строка // * СопроводительнаяЗаписка - Строка -// * Карточка - см. ПрочитатьКарточкуЭлектронногоДокумента +// * Карточка - см. НовоеОписаниеКарточкиЭлектронногоДокумента - карточка оператора ЭДО. +// Для обмена через сервер ЕИС состав полей свой, +// см. ЭлектронноеАктированиеЕИСПолучениеВходящих.НовоеОписаниеКарточкиПакета. // * Ошибка - см. ПрочитатьФайлОшибки // * Доверенности - см. ПрочитатьКарточкуМЧД // * ДанныеТЭДО - см. ТрансграничныйЭДО.ДанныеКонтейнера @@ -1498,7 +1622,7 @@ Функция ДанныеВходящегоОбъекта(ДвоичныеДанные, РезультатРаспаковки, КонтекстДиагностики) ДанныеКонтейнера = Новый Структура; - ДанныеКонтейнера.Вставить("ТипДокумента"); + ДанныеКонтейнера.Вставить("ТипДокумента", ""); ДанныеКонтейнера.Вставить("ИдентификаторСообщения"); ДанныеКонтейнера.Вставить("ТребуетсяИзвещение", Ложь); ДанныеКонтейнера.Вставить("ТребуетсяПодтверждение", Ложь); @@ -1541,8 +1665,11 @@ // РезультатРаспаковки - см. РаспаковатьФайлКонтейнера // КонтекстДиагностики - см. ОбработкаНеисправностейБЭД.НовыйКонтекстДиагностики // КэшЦиклов - Соответствие из КлючИЗначение, Неопределено - Возвращаемый параметр, кэширует значение между циклами. +// ПараметрыУчетныхЗаписей - Неопределено, Соответствие из см. УчетныеЗаписиЭДО.ПараметрыУчетнойЗаписи - +// параметры учетных записей, которые используются при распаковке контейнеров: Организация, НеИспользоватьПриглашения. +// Процедура ЗаполнитьПараметрыКонтейнера(ПараметрыКонтейнера, ДвоичныеДанные, РезультатРаспаковки, КонтекстДиагностики, - КэшЦиклов = Неопределено) + КэшЦиклов = Неопределено, ПараметрыУчетныхЗаписей = Неопределено) Если РезультатРаспаковки = Неопределено Тогда РезультатРаспаковки = РаспаковатьФайлКонтейнера(ДвоичныеДанные, КонтекстДиагностики); @@ -1563,15 +1690,16 @@ СоздаватьКонтрагентовАвтоматическиБЭД = КэшЦиклов["СоздаватьКонтрагентовАвтоматически"]; Иначе УстановитьПривилегированныйРежим(Истина); - СоздаватьКонтрагентовАвтоматическиБЭД = НастройкиЭДО.СоздаватьКонтрагентовАвтоматически(); + СоздаватьКонтрагентовАвтоматическиБЭД = НастройкиЭДО.СоздаватьКонтрагентовАвтоматически() + И НЕ ТрансграничныйЭДО.ЗапрещеноСоздаватьКонтрагентовАвтоматически(РезультатРаспаковки.Карточка.ИдентификаторОтправителя); УстановитьПривилегированныйРежим(Ложь); Если КэшЦиклов <> Неопределено Тогда КэшЦиклов["СоздаватьКонтрагентовАвтоматически"] = СоздаватьКонтрагентовАвтоматическиБЭД; КонецЕсли; КонецЕсли; - ЗаполнитьКонтрагентаПриРаспаковкеКонтейнера( - ПараметрыКонтейнера, РезультатРаспаковки, СоздаватьКонтрагентовАвтоматическиБЭД); + ЗаполнитьКонтрагентаПриРаспаковкеКонтейнера(ПараметрыКонтейнера, РезультатРаспаковки, + СоздаватьКонтрагентовАвтоматическиБЭД, ПараметрыУчетныхЗаписей); Организация = Неопределено; Если ЗначениеЗаполнено(Карточка.КППОрганизацииУточненный) Тогда @@ -1634,73 +1762,19 @@ Возврат ПараметрыКонтейнера.Статус = Перечисления.СтатусыТранспортныхСообщенийБЭД.РаспакованДокументыНеОбработаны; КонецФункции -// Возвращает карточку транспортного контейнера. +// Читает карточку транспортного контейнера оператора ЭДО из card.xml. // // Параметры: // ИмяФайла - Строка, // - ПотокВПамяти // Возвращаемое значение: -// Структура, Неопределено - Описание: -// * ТипДокумента - Строка -// * ИдентификаторСообщения - Строка -// * Дата - Дата -// * ТекстСопроводительнойЗаписки - Строка -// * ИдентификаторыДокументовОснований - Массив из Строка -// * ИдентификаторыДокументооборотовОснований - Массив из Строка -// * ЗаголовокДокумента - Строка -// * ТребуетсяПодтверждение - Булево -// * ТребуетсяИзвещение - Булево -// * ИдентификаторОтправителя - Строка -// * ИдентификаторПолучателя - Строка -// * НаименованиеКонтрагента - Строка -// * ИННКонтрагента - Строка -// * КППКонтрагента - Строка -// * ИННОрганизации - Строка -// * КППОрганизации - Строка -// * КППОрганизацииУточненный - Строка -// * КППКонтрагентаУточненный - Строка -// * НаименованиеКонтрагентаУточненное - Строка -// * АдресРесурсаКонтрагента - Неопределено -// - Строка -// * ДоверенностьВерна - Неопределено -// - Булево -// * КарточкаМЧД - Строка -// * ДополнительныеПараметры - Структура -// +// см. НовоеОписаниеКарточкиЭлектронногоДокумента Функция ПрочитатьКарточкуЭлектронногоДокумента(ИмяФайла) ВидОперации = НСтр("ru = 'Чтение карточки электронного документа.'"); ПодсистемаСобытия = ОбщегоНазначенияБЭДКлиентСервер.ПодсистемыБЭД().ОбменСКонтрагентами; - Карточка = Новый Структура; - Карточка.Вставить("ТипДокумента", ""); - Карточка.Вставить("ИдентификаторСообщения", ""); - Карточка.Вставить("ТекстСопроводительнойЗаписки", ""); - Карточка.Вставить("ИдентификаторыСообщенийОснований", Новый Массив); - Карточка.Вставить("ИдентификаторыДокументооборотовОснований", Новый Массив); - Карточка.Вставить("ЗаголовокДокумента", ""); - Карточка.Вставить("ТребуетсяПодтверждение", Ложь); - Карточка.Вставить("ТребуетсяИзвещение", Истина); - Карточка.Вставить("НомерДоговора", ""); - Карточка.Вставить("ДатаДоговора", Дата(1, 1, 1)); - Карточка.Вставить("ДатаДокумента", Дата(1, 1, 1)); - Карточка.Вставить("Дата", Дата(1, 1, 1)); - Карточка.Вставить("Номер", ""); - Карточка.Вставить("Сумма", 0); - Карточка.Вставить("ИдентификаторОтправителя", ""); - Карточка.Вставить("ИдентификаторПолучателя", ""); - Карточка.Вставить("НаименованиеКонтрагента", ""); - Карточка.Вставить("ИННКонтрагента", ""); - Карточка.Вставить("КППКонтрагента", ""); - Карточка.Вставить("ИННОрганизации", ""); - Карточка.Вставить("КППОрганизации", ""); - Карточка.Вставить("КППОрганизацииУточненный", Неопределено); - Карточка.Вставить("КППКонтрагентаУточненный", Неопределено); - Карточка.Вставить("НаименованиеКонтрагентаУточненное", Неопределено); - Карточка.Вставить("АдресРесурсаКонтрагента", Неопределено); - Карточка.Вставить("ДоверенностьВерна", Неопределено); - Карточка.Вставить("КарточкаМЧД", ""); - Карточка.Вставить("ФайлНазначения", ""); + Карточка = НовоеОписаниеКарточкиЭлектронногоДокумента(); ОшибкаЧтенияКарточки = Ложь; ПодробноеПредставлениеОшибки = ""; @@ -1752,7 +1826,7 @@ Карточка.ИдентификаторСообщения = ИдентификаторСообщенияВКарточке(КарточкаXDTO); ДополнительныеПараметры = ИзвлечьДополнительныеПараметрыКарточки(КарточкаXDTO); - Карточка.Вставить("ДополнительныеПараметры", ДополнительныеПараметры); + Карточка.ДополнительныеПараметры = ДополнительныеПараметры; ДоверенностьВерна = Неопределено; Если ДополнительныеПараметры.Свойство("IsWarrantActive", ДоверенностьВерна) Тогда @@ -1898,6 +1972,11 @@ Карточка.АдресРесурсаКонтрагента = ДополнительныеПараметры.ReplyTo; КонецЕсли; + Если Карточка.ТипДокумента = "Template" Тогда + ЧерновикиЭДО.ЗаполнитьДанныеЧерновикаПоДаннымДополнительныхПараметровКарточкиДокумента(Карточка.ДанныеЧерновика, + ДополнительныеПараметры); + КонецЕсли; + Возврат Карточка; КонецФункции @@ -2587,7 +2666,7 @@ // * ВидСервисаЭДО - ПеречислениеСсылка.ВидыСервисовЭДО // * Направление - ПеречислениеСсылка.НаправленияЭДО // * СпособОбмена - ПеречислениеСсылка.СпособыОбменаЭД -// Карточка - см. ПрочитатьКарточкуЭлектронногоДокумента +// Карточка - см. НовоеОписаниеКарточкиЭлектронногоДокумента // КонтекстДиагностики - см. ОбработкаНеисправностейБЭД.НовыйКонтекстДиагностики // // Возвращаемое значение: @@ -2662,14 +2741,17 @@ ДанныеОбъектов = СинхронизацияЭДО.НовыеДанныеОбъектов(); ДанныеОбъектовПакетов = СинхронизацияЭДО.НовыеДанныеОбъектов(); + ПрисоединенныеФайлыКонтейнеров = ПрисоединенныеФайлыКонтейнеров(ТранспортныеКонтейнеры); + РеквизитыКонтейнеров = "Статус, Организация, Контрагент, Отправитель, Получатель, ДоговорКонтрагента, |СпособОбменаЭД, ВнешнийУИД, ИдентификаторПакета, ИдентификаторДокументооборота, ВидСервисаЭДО, Направление"; ЗначенияРеквизитовКонтейнеров = ОбщегоНазначения.ЗначенияРеквизитовОбъектов(ТранспортныеКонтейнеры, РеквизитыКонтейнеров); - ПрисоединенныеФайлыКонтейнеров = ПрисоединенныеФайлыКонтейнеров(ТранспортныеКонтейнеры); + МассивПрисоединенныхФайлов = Новый Массив; Для Каждого ПрисоединенныйФайлКонтейнера Из ПрисоединенныеФайлыКонтейнеров Цикл МассивПрисоединенныхФайлов.Добавить(ПрисоединенныйФайлКонтейнера.Значение[0]); КонецЦикла; + ДвоичныеДанныеФайлов = РаботаСФайлами.ДвоичныеДанныеФайлов(МассивПрисоединенныхФайлов); ТипыДокументовТранспортнойИнформации = ТранспортныеКонтейнерыЭДОСлужебный.ТипыДокументовТранспортнойИнформации(); @@ -3030,7 +3112,8 @@ Если ЗначениеЗаполнено(ТранспортныйКонтейнер) Тогда Если СинхронизацияЭДОКлиентСервер.ЭтоОбменЧерезОператора(ПараметрыКонтейнера.СпособОбменаЭД) - Или СинхронизацияЭДО.ЭтоПрямойОбмен(ПараметрыКонтейнера.СпособОбменаЭД) Тогда + Или СинхронизацияЭДО.ЭтоПрямойОбмен(ПараметрыКонтейнера.СпособОбменаЭД) + Или СервисEDIСлужебный.ЭтоОбменЧерезСервис1СEDI(ПараметрыКонтейнера.СпособОбменаЭД) Тогда ТранспортныеКонтейнерыЭДОСлужебный.СформироватьПрисоединенныйФайлТранспортногоКонтейнераОператораЭДО( ТранспортныйКонтейнер, ДанныеОбъектов, КонтекстДиагностики); ИначеЕсли ДанныеОбъекта <> Неопределено @@ -3302,113 +3385,132 @@ КонецФункции +// Получить контрагента по данным контейнера. +// +// Параметры: +// ПараметрыПриглашения - см. ПриглашенияЭДОКлиентСервер.КлючПриглашения() +// КлючКонтрагента - см. ПриглашенияЭДО.НовыйКлючУчастникаЭДО() +// ОбменЧерезОператора - Булево - Обмен через оператора +// НаименованиеКонтрагента - Строка - Наименование контрагента +// ИдентификаторОтправителя - Строка - Идентификатор отправителя +// СоздаватьКонтрагентовАвтоматически - Булево - Создавать контрагентов автоматически +// +// Возвращаемое значение: +// Неопределено, ОпределяемыйТип.УчастникЭДО - Получить контрагента по данным контейнера +// +Функция КонтрагентПоДаннымКонтейнера(ПараметрыПриглашения, КлючКонтрагента, ОбменЧерезОператора, + НаименованиеКонтрагента, ИдентификаторОтправителя, СоздаватьКонтрагентовАвтоматически) + + Контрагент = Неопределено; + + Если ОбменЧерезОператора Тогда + + СтруктураУчастникаЭДО = ПриглашенияЭДО.УчастникЭДОПоКлючуИПриглашению(ПараметрыПриглашения, КлючКонтрагента); + Контрагент = СтруктураУчастникаЭДО.Ссылка; + ОбменМеждуСобственнымиОрганизациями = СтруктураУчастникаЭДО.ЭтоОрганизация; + + Иначе + ОбменМеждуСобственнымиОрганизациями = СинхронизацияЭДО.ЭтоИнтеркампани(ИдентификаторОтправителя); + КонецЕсли; + + Если ЗначениеЗаполнено(Контрагент) Тогда + Возврат Контрагент; + КонецЕсли; + + ТипОбъектаОтправителя = ?(Не ОбменМеждуСобственнымиОрганизациями = Истина, "Контрагенты", "Организации"); + Контрагент = ИнтеграцияЭДО.СсылкаНаОбъектПоИННКПП(ТипОбъектаОтправителя, КлючКонтрагента.ИНН, КлючКонтрагента.КПП, + КлючКонтрагента.ДатаСведений); + + Если Не ЗначениеЗаполнено(Контрагент) + И СоздаватьКонтрагентовАвтоматически + И Не ОбменМеждуСобственнымиОрганизациями = Истина + И ЗначениеЗаполнено(НаименованиеКонтрагента) Тогда + + РеквизитыКонтрагента = Новый Структура("ИНН, КПП"); + ЗаполнитьЗначенияСвойств(РеквизитыКонтрагента, КлючКонтрагента); + РеквизитыКонтрагента.Вставить("Наименование", НаименованиеКонтрагента); + Контрагент = ИнтеграцияЭДО.СоздатьКонтрагента(РеквизитыКонтрагента); + + КонецЕсли; + + Возврат Контрагент; + +КонецФункции + // Заполняет контрагента при распаковке транспортного контейнера электронного документа // Параметры: // ПараметрыКонтейнера - см. ПараметрыКонтейнера // РезультатРаспаковки - см. РаспаковатьФайлКонтейнера // СоздаватьКонтрагентовАвтоматически - Булево -Процедура ЗаполнитьКонтрагентаПриРаспаковкеКонтейнера(ПараметрыКонтейнера, - РезультатРаспаковки, СоздаватьКонтрагентовАвтоматически) +// ПараметрыУчетныхЗаписей - Неопределено, Соответствие из см. УчетныеЗаписиЭДО.ПараметрыУчетнойЗаписи - +// параметры учетных записей, которые используются при распаковке контейнеров: Организация, НеИспользоватьПриглашения. +// +Процедура ЗаполнитьКонтрагентаПриРаспаковкеКонтейнера(ПараметрыКонтейнера, РезультатРаспаковки, + СоздаватьКонтрагентовАвтоматически, ПараметрыУчетныхЗаписей) Карточка = РезультатРаспаковки.Карточка; - ОбменМеждуСобственнымиОрганизациями = Неопределено; + Контрагент = Неопределено; + ДанныеПриглашения = Неопределено; + + Если ПараметрыУчетныхЗаписей = Неопределено Тогда + + ПараметрыУчетныхЗаписей = УчетныеЗаписиЭДО.ПараметрыУчетныхЗаписей(ПараметрыКонтейнера.Получатель, + "Организация, НеИспользоватьПриглашения"); + + КонецЕсли; + + ПараметрыУчетнойЗаписи = ПараметрыУчетныхЗаписей[ПараметрыКонтейнера.Получатель]; + + КлючКонтрагента = ПриглашенияЭДО.НовыйКлючУчастникаЭДО(); + КлючКонтрагента.ИНН = Карточка.ИННКонтрагента; + КлючКонтрагента.ДатаСведений = Карточка.Дата; ПараметрыПриглашения = ПриглашенияЭДОКлиентСервер.КлючПриглашения(); ПараметрыПриглашения.ИдентификаторОрганизации = ПараметрыКонтейнера.Получатель; ПараметрыПриглашения.ИдентификаторКонтрагента = Карточка.ИдентификаторОтправителя; - Контрагент = Неопределено; + ОбменЧерезОператора = СинхронизацияЭДОКлиентСервер.ЭтоОбменЧерезОператора(ПараметрыКонтейнера.СпособОбмена); + + СоздаватьПриглашениеДляЭПДАвтоматически = Ложь; + Если ОбщегоНазначения.ПодсистемаСуществует("ЭлектронноеВзаимодействие.ОбменСГИСЭПД") Тогда МодульОбменСГИСЭПД = ОбщегоНазначения.ОбщийМодуль("ОбменСГИСЭПД"); МодульОбменСГИСЭПД.ПриЗаполненииКонтрагентаПриРаспаковкеКонтейнера(ПараметрыКонтейнера, РезультатРаспаковки, - ПараметрыПриглашения, Контрагент); + ПараметрыПриглашения, Контрагент, СоздаватьПриглашениеДляЭПДАвтоматически); КонецЕсли; - - ОбменПоПриглашению = СинхронизацияЭДОКлиентСервер.ЭтоОбменЧерезОператора(ПараметрыКонтейнера.СпособОбмена); - - Если Не ЗначениеЗаполнено(Контрагент) - И ЗначениеЗаполнено(Карточка.КППКонтрагентаУточненный) Тогда - Если ОбменПоПриглашению Тогда - КлючКонтрагента = ПриглашенияЭДО.НовыйКлючУчастникаЭДО(); - КлючКонтрагента.ИНН = Карточка.ИННКонтрагента; - КлючКонтрагента.КПП = Карточка.КППКонтрагентаУточненный; - КлючКонтрагента.ДатаСведений = Карточка.Дата; - СтруктураУчастникаЭДО = ПриглашенияЭДО.УчастникЭДОПоКлючуИПриглашению(ПараметрыПриглашения, КлючКонтрагента); - Контрагент = СтруктураУчастникаЭДО.Ссылка; - ОбменМеждуСобственнымиОрганизациями = СтруктураУчастникаЭДО.ЭтоОрганизация; - Иначе - ОбменМеждуСобственнымиОрганизациями = СинхронизацияЭДО.ЭтоИнтеркампани(Карточка.ИдентификаторОтправителя); - ТипОбъектаОтправителя = ?(ОбменМеждуСобственнымиОрганизациями, "Организации", "Контрагенты"); - Контрагент = ИнтеграцияЭДО.СсылкаНаОбъектПоИННКПП(ТипОбъектаОтправителя, Карточка.ИННКонтрагента, - Карточка.КППКонтрагентаУточненный, Карточка.Дата); - КонецЕсли; + Если Не ЗначениеЗаполнено(Контрагент) И ЗначениеЗаполнено(Карточка.КППКонтрагентаУточненный) Тогда - Если Не ЗначениеЗаполнено(Контрагент) - И СоздаватьКонтрагентовАвтоматически - И Не ОбменМеждуСобственнымиОрганизациями = Истина - И ЗначениеЗаполнено(Карточка.НаименованиеКонтрагентаУточненное) Тогда - - РеквизитыКонтрагента = Новый Структура; - РеквизитыКонтрагента.Вставить("ИНН", Карточка.ИННКонтрагента); - РеквизитыКонтрагента.Вставить("КПП", Карточка.КППКонтрагентаУточненный); - РеквизитыКонтрагента.Вставить("Наименование", Карточка.НаименованиеКонтрагентаУточненное); - Контрагент = ИнтеграцияЭДО.СоздатьКонтрагента(РеквизитыКонтрагента); - - КонецЕсли; + КлючКонтрагента.КПП = Карточка.КППКонтрагентаУточненный; + + Контрагент = КонтрагентПоДаннымКонтейнера(ПараметрыПриглашения, КлючКонтрагента, ОбменЧерезОператора, + Карточка.НаименованиеКонтрагентаУточненное, ПараметрыПриглашения.ИдентификаторКонтрагента, + СоздаватьКонтрагентовАвтоматически Или ПараметрыУчетнойЗаписи.НеИспользоватьПриглашения); КонецЕсли; - Если Не ЗначениеЗаполнено(Контрагент) - И ЗначениеЗаполнено(Карточка.ИННКонтрагента) Тогда + Если Не ЗначениеЗаполнено(Контрагент) И ЗначениеЗаполнено(Карточка.ИННКонтрагента) Тогда - Если ОбменПоПриглашению Тогда - КлючКонтрагента = ПриглашенияЭДО.НовыйКлючУчастникаЭДО(); - КлючКонтрагента.ИНН = Карточка.ИННКонтрагента; - КлючКонтрагента.КПП = Карточка.КППКонтрагента; - КлючКонтрагента.ДатаСведений = Карточка.Дата; - СтруктураУчастникаЭДО = ПриглашенияЭДО.УчастникЭДОПоКлючуИПриглашению(ПараметрыПриглашения, КлючКонтрагента); - Контрагент = СтруктураУчастникаЭДО.Ссылка; - ОбменМеждуСобственнымиОрганизациями = СтруктураУчастникаЭДО.ЭтоОрганизация; - Иначе - ОбменМеждуСобственнымиОрганизациями = - СинхронизацияЭДО.ЭтоИнтеркампани(ПараметрыПриглашения.ИдентификаторОрганизации); - ТипОбъектаОтправителя = ?(ОбменМеждуСобственнымиОрганизациями, "Организации", "Контрагенты"); - Контрагент = ИнтеграцияЭДО.СсылкаНаОбъектПоИННКПП(ТипОбъектаОтправителя, Карточка.ИННКонтрагента, - Карточка.КППКонтрагента, Карточка.Дата); - КонецЕсли; + КлючКонтрагента.КПП = Карточка.КППКонтрагента; - Если Не ЗначениеЗаполнено(Контрагент) - И СоздаватьКонтрагентовАвтоматически - И Не ОбменМеждуСобственнымиОрганизациями = Истина - И ЗначениеЗаполнено(Карточка.НаименованиеКонтрагента) Тогда - - РеквизитыКонтрагента = Новый Структура; - РеквизитыКонтрагента.Вставить("ИНН", Карточка.ИННКонтрагента); - РеквизитыКонтрагента.Вставить("КПП", Карточка.КППКонтрагента); - РеквизитыКонтрагента.Вставить("Наименование", Карточка.НаименованиеКонтрагента); - Контрагент = ИнтеграцияЭДО.СоздатьКонтрагента(РеквизитыКонтрагента); - - КонецЕсли; + Контрагент = КонтрагентПоДаннымКонтейнера(ПараметрыПриглашения, КлючКонтрагента, ОбменЧерезОператора, + Карточка.НаименованиеКонтрагента, ПараметрыПриглашения.ИдентификаторОрганизации, + СоздаватьКонтрагентовАвтоматически Или ПараметрыУчетнойЗаписи.НеИспользоватьПриглашения); КонецЕсли; - ДанныеПриглашения = Неопределено; - Если Не ПустаяСтрока(Карточка.ИдентификаторОтправителя) Тогда - - ЗаполнятьПредставлениеКонтрагента = Ложь; - ДанныеПриглашения = ПриглашенияЭДО.ДанныеПриглашенияПоПараметрам( - ПараметрыПриглашения, - ЗаполнятьПредставлениеКонтрагента); - + ДанныеПриглашения = ПриглашенияЭДО.ДанныеПриглашенияПоПараметрам(ПараметрыПриглашения, Ложь); КонецЕсли; - Если ДанныеПриглашения <> Неопределено - И Не ЗначениеЗаполнено(Контрагент) Тогда - + Если ДанныеПриглашения = Неопределено И ОбменЧерезОператора + И (ПараметрыУчетнойЗаписи.НеИспользоватьПриглашения Или СоздаватьПриглашениеДляЭПДАвтоматически) Тогда + ДанныеПриглашения = ПриглашенияЭДО.СоздатьПриглашениеПоДаннымКарточки(Карточка, + ПараметрыУчетнойЗаписи.Организация, Контрагент); + КонецЕсли; + + Если ДанныеПриглашения <> Неопределено И Не ЗначениеЗаполнено(Контрагент) Тогда Контрагент = ДанныеПриглашения.Контрагент; - КонецЕсли; ЗаполнитьКонтрагентаВПриглашении(ДанныеПриглашения, Контрагент); diff --git a/Конфигурация/CommonModules/ТранспортныеКонтейнерыЭДОСлужебный/Ext/Module.bsl b/Конфигурация/CommonModules/ТранспортныеКонтейнерыЭДОСлужебный/Ext/Module.bsl index 5545ba901..9d1abaa89 100644 --- a/Конфигурация/CommonModules/ТранспортныеКонтейнерыЭДОСлужебный/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ТранспортныеКонтейнерыЭДОСлужебный/Ext/Module.bsl @@ -163,7 +163,7 @@ КонтекстДиагностики); Если СинхронизацияЭДО.ПоддерживаетсяПередачаМЧДВТранспортномКонтейнере(СпособОбмена) - // ГИС ЭПД не поддерживате вложенные в пакет МЧД. Это не соотвествует нормативке, но поддерживать не собираются + // ГИС ЭПД не поддерживает вложенные в пакет МЧД. Это не соответствует нормативке, но поддерживать не собираются И Не ЭтоЭПД Тогда // Формируем warrant.xml. СформироватьИнформациюПоДоверенностям(ДанныеФайлов, АдресКаталога, Ошибки, КонтекстДиагностики); @@ -566,7 +566,7 @@ Если ПриглашенияСКонтрагентомОбъектНеНайден.Количество() = 0 Тогда Возврат Контрагент; - Конецесли; + КонецЕсли; НачатьТранзакцию(); Попытка @@ -691,6 +691,12 @@ НоваяСтрока.Значение = "true"; КонецЕсли; + Если ЗначениеЗаполнено(ОписаниеОбъекта.ИдентификаторЧерновика) Тогда + НоваяСтрока = ДополнительныеДанные.Добавить(); + НоваяСтрока.Имя = "LinkedTemplate"; + НоваяСтрока.Значение = ОписаниеОбъекта.ИдентификаторЧерновика; + КонецЕсли; + Если РегламентыЭДО.ЭтоУниверсальноеСообщение(ОписаниеОбъекта.ТипЭлементаРегламента) Тогда СвойстваУниверсальногоСообщенияЭДО = Документы.СообщениеЭДО.СвойстваУниверсальногоСообщенияЭДО(ОписаниеОбъекта.Объект); Если ЗначениеЗаполнено(СвойстваУниверсальногоСообщенияЭДО) Тогда @@ -777,7 +783,8 @@ НоваяСтрока.Значение = СокрЛП(Комментарий); КонецЕсли; - Если Не ОписаниеОбъекта.ТребуетсяИзвещение Тогда + Если Не ОписаниеОбъекта.ТребуетсяИзвещение + Или СообщениеНеТребуетИзвещениеОПолучении(ОписаниеОбъекта.ТипЭлементаРегламента) Тогда НоваяСтрока = ДополнительныеДанные.Добавить(); НоваяСтрока.Имя = "НеТребуетсяИзвещение"; НоваяСтрока.Значение = Истина; @@ -1315,7 +1322,7 @@ КонецФункции -// Возвращает тип элемента регламента по коду транзакции и тпу документа. +// Возвращает тип элемента регламента по коду транзакции и типу документа. // // Параметры: // КодТранзакции - Строка @@ -1450,17 +1457,7 @@ "UniversalMessageAdditionalInformation", Перечисления.ТипыЭлементовРегламентаЭДО.УС_ДополнительнаяИнформация); - Если ОбщегоНазначения.ПодсистемаСуществует("ЭлектронноеВзаимодействие.ОбменСГИСЭПД") Тогда - МодульОбменСГИСЭПД = ОбщегоНазначения.ОбщийМодуль("ОбменСГИСЭПД"); - МодульОбменСГИСЭПД.ПриФормированииТаблицыТиповЭлементовРегламента(Таблица); - КонецЕсли; - - Если ОбщегоНазначения.ПодсистемаСуществует("ЭлектронноеВзаимодействие.ЭлектронноеАктированиеЕИС") Тогда - МодульЭлектронноеАктированиеЕИС = ОбщегоНазначения.ОбщийМодуль("ЭлектронноеАктированиеЕИС"); - МодульЭлектронноеАктированиеЕИС.ПриФормированииТаблицыТиповЭлементовРегламента(Таблица); - КонецЕсли; - - ТрансграничныйЭДО.ПриФормированииТаблицыТиповЭлементовРегламента(Таблица); + ТранспортныеКонтейнерыЭДО.ПриФормированииТаблицыТиповЭлементовРегламента(Таблица); Возврат Таблица; @@ -1562,10 +1559,7 @@ НоваяСтрока.ТипРегламента = Перечисления.ТипыРегламентовЭДО.АктОРасхождениях; НоваяСтрока.ТипДокумента = Перечисления.ТипыДокументовЭДО.АктОРасхождениях; - Если ОбщегоНазначения.ПодсистемаСуществует("ЭлектронноеВзаимодействие.ОбменСГИСЭПД") Тогда - МодульОбменСГИСЭПД = ОбщегоНазначения.ОбщийМодуль("ОбменСГИСЭПД"); - МодульОбменСГИСЭПД.ПриФормированииТаблицыТиповРегламентов(Таблица); - КонецЕсли; + ТранспортныеКонтейнерыЭДО.ПриФормированииТаблицыТиповРегламентов(Таблица); Возврат Таблица; @@ -2348,6 +2342,15 @@ КонецФункции +Функция СообщениеНеТребуетИзвещениеОПолучении(ТипЭлементаРегламента) + + Если ТипЭлементаРегламента = Перечисления.ТипыЭлементовРегламентаЭДО.ИнформацияОтправителя Тогда + Возврат Ложь; + КонецЕсли; + + Возврат Истина; + +КонецФункции // Формирует таблицу типов документов транспортной информации. // diff --git a/Конфигурация/CommonModules/УОП_ЗаморозкаОбъектовКлиентСервер/Ext/Module.bsl b/Конфигурация/CommonModules/УОП_ЗаморозкаОбъектовКлиентСервер/Ext/Module.bsl index 33751584a..608de56d0 100644 --- a/Конфигурация/CommonModules/УОП_ЗаморозкаОбъектовКлиентСервер/Ext/Module.bsl +++ b/Конфигурация/CommonModules/УОП_ЗаморозкаОбъектовКлиентСервер/Ext/Module.bsl @@ -290,9 +290,11 @@ Результат.Вставить("Родитель", ""); Результат.Вставить("ЭлементПередКоторым", ""); ИмяФормы = Форма.ИмяФормы; - Если ИмяФормы= "Справочник.Номенклатура.Форма.ФормаСписка" Тогда - Результат.Родитель = "ОсновныеКоманды"; - КонецЕсли; + // Доступно переопределение родителей. Если на форме не используется командная панель. + // Пример: + //Если ИмяФормы= "Справочник.Номенклатура.Форма.ФормаСписка" Тогда + // Результат.Родитель = "ОсновныеКоманды"; + // КонецЕсли; Возврат Результат; КонецФункции diff --git a/Конфигурация/CommonModules/УОП_ЗаполнениеВремениДокументов/Ext/Module.bsl b/Конфигурация/CommonModules/УОП_ЗаполнениеВремениДокументов/Ext/Module.bsl index 28bb51f0d..7b6b248b9 100644 --- a/Конфигурация/CommonModules/УОП_ЗаполнениеВремениДокументов/Ext/Module.bsl +++ b/Конфигурация/CommonModules/УОП_ЗаполнениеВремениДокументов/Ext/Module.bsl @@ -518,9 +518,12 @@ Возврат; КонецЕсли; - - ДатаИзменяласьВручную = НЕ ДокументОбъект.Дата = Форма.УОП_ДатаДоРучногоИзменения; - ДокументОбъект.ДополнительныеСвойства.Вставить("УОП_ДатаИзменяласьВручную", ДатаИзменяласьВручную); + + ВремяИзменялосьВручную = НЕ (Час(ДокументОбъект.Дата) = Час(Форма.УОП_ДатаДоРучногоИзменения)) + ИЛИ НЕ (Минута(ДокументОбъект.Дата) = Минута(Форма.УОП_ДатаДоРучногоИзменения)) + ИЛИ НЕ (Секунда(ДокументОбъект.Дата) = Секунда(Форма.УОП_ДатаДоРучногоИзменения)); + + ДокументОбъект.ДополнительныеСвойства.Вставить("УОП_ДатаИзменяласьВручную", ВремяИзменялосьВручную); Форма.УОП_ДатаДоРучногоИзменения = Дата(1,1,1); diff --git a/Конфигурация/CommonModules/УОП_Инвентаризация/Ext/Module.bsl b/Конфигурация/CommonModules/УОП_Инвентаризация/Ext/Module.bsl index 404c8a65a..d5a9d3606 100644 --- a/Конфигурация/CommonModules/УОП_Инвентаризация/Ext/Module.bsl +++ b/Конфигурация/CommonModules/УОП_Инвентаризация/Ext/Module.bsl @@ -1516,20 +1516,47 @@ | ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ПартииНоменклатуры.ПустаяСсылка) | КОНЕЦ КАК Партия, | СУММА(ВЫБОР - | КОГДА Запасы.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход) + | КОГДА НЕ ТИПЗНАЧЕНИЯ(Запасы.Регистратор) В(&ДокументыНедостачи) + | ТОГДА 0 + | КОГДА Запасы.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход) | ТОГДА 1 | ИНАЧЕ -1 - | КОНЕЦ * Запасы.Количество) КАК Количество, + | КОНЕЦ * Запасы.Количество) КАК КоличествоНедостачи, | СУММА(ВЫБОР - | КОГДА Запасы.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход) + | КОГДА НЕ ТИПЗНАЧЕНИЯ(Запасы.Регистратор) В(&ДокументыИзлишков) + | ТОГДА 0 + | КОГДА Запасы.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход) | ТОГДА 1 | ИНАЧЕ -1 - | КОНЕЦ * Запасы.Сумма) КАК Сумма, + | КОНЕЦ * Запасы.Количество) КАК КоличествоИзлишков, | СУММА(ВЫБОР + | КОГДА НЕ ТИПЗНАЧЕНИЯ(Запасы.Регистратор) В(&ДокументыНедостачи) + | ТОГДА 0 | КОГДА Запасы.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход) | ТОГДА 1 | ИНАЧЕ -1 - | КОНЕЦ * Запасы.УОП_СуммаНДС) КАК УОП_СуммаНДС + | КОНЕЦ * Запасы.Сумма) КАК СуммаНедостачи, + | СУММА(ВЫБОР + | КОГДА НЕ ТИПЗНАЧЕНИЯ(Запасы.Регистратор) В(&ДокументыИзлишков) + | ТОГДА 0 + | КОГДА Запасы.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход) + | ТОГДА 1 + | ИНАЧЕ -1 + | КОНЕЦ * Запасы.Сумма) КАК СуммаИзлишков, + | СУММА(ВЫБОР + | КОГДА НЕ ТИПЗНАЧЕНИЯ(Запасы.Регистратор) В(&ДокументыНедостачи) + | ТОГДА 0 + | КОГДА Запасы.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход) + | ТОГДА 1 + | ИНАЧЕ -1 + | КОНЕЦ * Запасы.УОП_СуммаНДС) КАК УОП_СуммаНДСНедостачи, + | СУММА(ВЫБОР + | КОГДА НЕ ТИПЗНАЧЕНИЯ(Запасы.Регистратор) В(&ДокументыИзлишков) + | ТОГДА 0 + | КОГДА Запасы.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход) + | ТОГДА 1 + | ИНАЧЕ -1 + | КОНЕЦ * Запасы.УОП_СуммаНДС) КАК УОП_СуммаНДСИзлишков |ИЗ | РегистрНакопления.Запасы КАК Запасы |ГДЕ @@ -1546,6 +1573,17 @@ Запрос.УстановитьПараметр("МассивРегистраторов", СписокСписаний); + ДокументыНедостачи = Новый Массив; + ДокументыНедостачи.Добавить(Тип("ДокументСсылка.СписаниеЗапасов")); + ДокументыНедостачи.Добавить(Тип("ДокументСсылка.ПересортицаЗапасов")); + + ДокументыИзлишков = Новый Массив; + ДокументыИзлишков.Добавить(Тип("ДокументСсылка.ОприходованиеЗапасов")); + ДокументыИзлишков.Добавить(Тип("ДокументСсылка.ПересортицаЗапасов")); + + Запрос.УстановитьПараметр("ДокументыНедостачи", ДокументыНедостачи); + Запрос.УстановитьПараметр("ДокументыИзлишков", ДокументыИзлишков); + РезультатЗапроса = Запрос.Выполнить(); Если РезультатЗапроса.Пустой() Тогда Возврат; @@ -1563,13 +1601,44 @@ Продолжить; КонецЕсли; - ТекСтрокаЗапасов = МассСтрок[0]; - СуммаСписания = Выборка.Сумма - ?(ОтображатьСНДС,0, Выборка.УОП_СуммаНДС); + СуммаИзлишковОстаток = Выборка.СуммаИзлишков - ?(ОтображатьСНДС,0, Выборка.УОП_СуммаНДСИзлишков); + СуммаНедостачиОстаток = Выборка.СуммаНедостачи - ?(ОтображатьСНДС,0, Выборка.УОП_СуммаНДСНедостачи); - ТекСтрокаЗапасов.УОП_Сумма = СуммаСписания; - ТекСтрокаЗапасов.Сумма = ТекСтрокаЗапасов.СуммаУчет - ТекСтрокаЗапасов.УОП_Сумма; + КоличествоИзлишковОстаток = Выборка.КоличествоИзлишков; + КоличествоНедостачиОстаток = Выборка.КоличествоНедостачи; - УОП_ИнвентаризацияКлиентСервер.ВыполнитьПересчетПриИзмененииРеквизита("Сумма", ТекСтрокаЗапасов); + Для Каждого ТекСтрокаЗапасов Из МассСтрок Цикл + ЭтоНедостача = ТекСтрокаЗапасов.Отклонение < 0; + Если ЭтоНедостача Тогда + КоличествоОстаток = КоличествоНедостачиОстаток; + СуммаСписания = СуммаНедостачиОстаток; + КоличествоСтроки = -ТекСтрокаЗапасов.Отклонение; + КоэффициентСуммы = -1; + Иначе + КоличествоОстаток = КоличествоИзлишковОстаток; + СуммаСписания = СуммаИзлишковОстаток; + КоличествоСтроки = ТекСтрокаЗапасов.Отклонение; + КоэффициентСуммы = 1; + КонецЕсли; + + КоличествоКСписанию = Мин(КоличествоОстаток, КоличествоСтроки); + Если КоличествоКСписанию = КоличествоОстаток Тогда + СуммаКСписанию = СуммаСписания; + Иначе + СуммаКСписанию = ?(КоличествоОстаток = 0, 0, КоличествоКСписанию * СуммаСписания / КоличествоОстаток); + КонецЕсли; + ТекСтрокаЗапасов.УОП_Сумма = СуммаКСписанию * КоэффициентСуммы; + ТекСтрокаЗапасов.Сумма = ТекСтрокаЗапасов.СуммаУчет + ТекСтрокаЗапасов.УОП_Сумма; + УОП_ИнвентаризацияКлиентСервер.ВыполнитьПересчетПриИзмененииРеквизита("Сумма", ТекСтрокаЗапасов); + + Если ЭтоНедостача Тогда + КоличествоНедостачиОстаток = КоличествоНедостачиОстаток - КоличествоКСписанию; + СуммаНедостачиОстаток = СуммаНедостачиОстаток - СуммаКСписанию; + Иначе + КоличествоИзлишковОстаток = КоличествоИзлишковОстаток - КоличествоКСписанию; + СуммаИзлишковОстаток = СуммаИзлишковОстаток - СуммаКСписанию; + КонецЕсли; + КонецЦикла; КонецЦикла; diff --git a/Конфигурация/CommonModules/УОП_ОбновлениеИнформационнойБазы/Ext/Module.bsl b/Конфигурация/CommonModules/УОП_ОбновлениеИнформационнойБазы/Ext/Module.bsl index 0c76c2513..e92bb2c32 100644 --- a/Конфигурация/CommonModules/УОП_ОбновлениеИнформационнойБазы/Ext/Module.bsl +++ b/Конфигурация/CommonModules/УОП_ОбновлениеИнформационнойБазы/Ext/Module.bsl @@ -51,8 +51,8 @@ Описание = Новый Структура; Описание.Вставить("Имя", ""); - Описание.Вставить("Версия", "3.0.14.123"); - Описание.Вставить("ДатаРелиза", Дата('20260828')); + Описание.Вставить("Версия", "3.0.14.143"); + Описание.Вставить("ДатаРелиза", Дата('20260911')); Описание.Вставить("ИдентификаторИнтернетПоддержки", ""); Описание.Вставить("АдресИнтернетПоддержки", "food@rarus.ru"); diff --git a/Конфигурация/CommonModules/УОП_ПартионныйУчет/Ext/Module.bsl b/Конфигурация/CommonModules/УОП_ПартионныйУчет/Ext/Module.bsl index 1b82adeb2..9b3932a31 100644 --- a/Конфигурация/CommonModules/УОП_ПартионныйУчет/Ext/Module.bsl +++ b/Конфигурация/CommonModules/УОП_ПартионныйУчет/Ext/Module.bsl @@ -354,6 +354,7 @@ ИспользоватьПартиюИзСтроки = (ПараметрыУказанияПартий.ИмяДокумента = "ОприходованиеЗапасов" ИЛИ ПараметрыУказанияПартий.ИмяДокумента = "ОтчетОРозничныхПродажах" + ИЛИ ПараметрыУказанияПартий.ИмяДокумента = "ПересортицаЗапасов" ИЛИ ПараметрыУказанияПартий.ИмяДокумента = "ПеремещениеЗапасов"); ИнициализироватьРеквизитыГосИС = ПараметрыУказанияПартий.ИмяДокумента = "СборкаЗапасов"; @@ -376,6 +377,12 @@ Если НЕ МассивСтрокОтборов = Неопределено И ЕстьНомерСтроки И МассивСтрокОтборов.Найти(ТекПроверяемаяСтрока.НомерСтроки) = Неопределено Тогда + Продолжить; + КонецЕсли; + + Если ПараметрыУказанияПартий.ИмяДокумента = "ПересортицаЗапасов" И + (ТекПроверяемаяСтрока.Номенклатура = ТекПроверяемаяСтрока.НоменклатураОприходование) Тогда + Продолжить; КонецЕсли; @@ -952,6 +959,9 @@ ЭтоПересортица = (ТипЗнч(ДокументСсылка) = тип("ДокументСсылка.ПересортицаЗапасов")); + ЭтоПеремещениеВПроизводство = (ТипЗнч(ДокументСсылка) = тип("ДокументСсылка.ПересортицаЗапасов") + И (ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ДокументСсылка,"УОП_ХозяйственнаяОперация") = Справочники.ХозяйственныеОперации.УОП_ПеремещениеВПроизводство)); + ЭтоПередачаНаКоммиссию = (ТипЗнч(ДокументСсылка) = тип("ДокументСсылка.РасходнаяНакладная")) И (ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ДокументСсылка,"ВидОперации") = Перечисления.ВидыОперацийРасходнаяНакладная.ПередачаНаКомиссию); @@ -2596,12 +2606,21 @@ Если ТекСтрокаПриход.МетодОценки = Перечисления.МетодОценкиЗапасов.ПоСредней Тогда НовСтрока2ТЗ.Партия = Справочники.ПартииНоменклатуры.ПустаяСсылка(); Иначе + ЕстьСрокиГодности = ТаблицаЗапасов.Колонки.Найти("УОП_СрокГодности") <> Неопределено + И ТаблицаЗапасов.Колонки.Найти("УОП_СрокХранения") <> Неопределено + И ТаблицаЗапасов.Колонки.Найти("УОП_ДатаИзготовления") <> Неопределено; + СтруктураПараметровСрокГодности = Неопределено; - Если ЭтоПересортица И ТаблицаЗапасов.Колонки.Найти("УОП_СрокГодности") <> Неопределено - И ТаблицаЗапасов.Колонки.Найти("УОП_СрокХранения") <> Неопределено И ТаблицаЗапасов.Колонки.Найти("УОП_ДатаИзготовления") <> Неопределено Тогда + Если ЭтоПересортица И ЕстьСрокиГодности Тогда СтруктураПараметровСрокГодности = Новый Структура("УОП_ДатаИзготовления, УОП_СрокХранения, УОП_СрокГодности", НовСтрока2ТЗ.УОП_ДатаИзготовления, НовСтрока2ТЗ.УОП_СрокХранения, НовСтрока2ТЗ.УОП_СрокГодности); + + КонецЕсли; + Если ЭтоПеремещениеВПроизводство И ЕстьСрокиГодности Тогда + + СтруктураПараметровСрокГодности = Новый Структура("ЭтоПеремещениеВПроизводство", Истина); + КонецЕсли; НовСтрока2ТЗ.Партия = НайтиИлиСкопироватьПартиюНоменклатуры(НовСтрокаТЗ.Партия, НовСтрока2ТЗ.Номенклатура, СтруктураПараметровСрокГодности); @@ -5362,7 +5381,14 @@ Если СтруктураПараметровСрокГодности = Неопределено Тогда Запрос.УстановитьПараметр("УОП_ДатаИзготовления" , РеквизитыПартии.УОП_ДатаИзготовления); Запрос.УстановитьПараметр("УОП_СрокГодности" , РеквизитыПартии.УОП_СрокГодности); - Запрос.УстановитьПараметр("УОП_СрокХранения" , РеквизитыПартии.УОП_СрокХранения); + Запрос.УстановитьПараметр("УОП_СрокХранения" , РеквизитыПартии.УОП_СрокХранения); + + ИначеЕсли СтруктураПараметровСрокГодности.Свойство("ЭтоПеремещениеВПроизводство") Тогда + + Запрос.УстановитьПараметр("УОП_ДатаИзготовления" , РеквизитыПартии.УОП_ДатаИзготовления); + Запрос.УстановитьПараметр("УОП_СрокГодности" , РеквизитыПартии.УОП_СрокГодности); + Запрос.УстановитьПараметр("УОП_СрокХранения" , РеквизитыПартии.УОП_СрокХранения); + Иначе Запрос.УстановитьПараметр("УОП_ДатаИзготовления" , СтруктураПараметровСрокГодности.УОП_ДатаИзготовления); Запрос.УстановитьПараметр("УОП_СрокГодности" , СтруктураПараметровСрокГодности.УОП_СрокГодности); @@ -5373,9 +5399,10 @@ Если РезультатЗапроса.Пустой() Тогда // Такая партия еще не создана, скопируем ее из исходной. НоваяПартия = ИсходнаяПартия.Скопировать(); - НоваяПартия.Владелец = НоваяНоменклатура; + НоваяПартия.Владелец = НоваяНоменклатура; - Если СтруктураПараметровСрокГодности <> Неопределено Тогда + // В Перемещении в производство срок хранения копируется из партии складской номенклатуры + Если СтруктураПараметровСрокГодности <> Неопределено И НЕ СтруктураПараметровСрокГодности.Свойство("ЭтоПеремещениеВПроизводство") Тогда ЗаполнитьЗначенияСвойств(НоваяПартия, СтруктураПараметровСрокГодности, "УОП_ДатаИзготовления, УОП_СрокГодности, УОП_СрокХранения"); КонецЕсли; diff --git a/Конфигурация/CommonModules/УОП_ПечатьЭтикетокИЦенников/Ext/Module.bsl b/Конфигурация/CommonModules/УОП_ПечатьЭтикетокИЦенников/Ext/Module.bsl index ddefa4813..cecd29566 100644 --- a/Конфигурация/CommonModules/УОП_ПечатьЭтикетокИЦенников/Ext/Module.bsl +++ b/Конфигурация/CommonModules/УОП_ПечатьЭтикетокИЦенников/Ext/Module.bsl @@ -54,6 +54,11 @@ Возврат Результат; КонецФункции +Функция СопоставлятьШтрихкодыПоЕдиницамИзмерения() Экспорт + Результат = Ложь; + Возврат Результат; +КонецФункции + #КонецОбласти diff --git a/Конфигурация/CommonModules/УОП_РасчетПроизводства/Ext/Module.bsl b/Конфигурация/CommonModules/УОП_РасчетПроизводства/Ext/Module.bsl index 1b834e83a..bb0ef1340 100644 --- a/Конфигурация/CommonModules/УОП_РасчетПроизводства/Ext/Module.bsl +++ b/Конфигурация/CommonModules/УОП_РасчетПроизводства/Ext/Module.bsl @@ -658,7 +658,11 @@ ТекДокументОбъект.СтруктурнаяЕдиницаОтходов = СтруктурнаяЕдиница; ТекДокументОбъект.СтруктурнаяЕдиницаПродукции = СтруктурнаяЕдиница; ТекДокументОбъект.УОП_РазделПланирования = Справочники.УОП_РазделыПланирования.РазделПоУмолчанию(ТекДокументОбъект.СтруктурнаяЕдиница, - ТекДокументОбъект.СтруктурнаяЕдиницаПродукции); + ТекДокументОбъект.СтруктурнаяЕдиницаПродукции); + + Если ТипЗнч(ДанныеЗаполнения) = тип("ДокументСсылка.ЗаказНаПроизводство") Тогда + ТекДокументОбъект.УОП_ТипПитания = ДанныеЗаполнения.УОП_ТипПитания; + КонецЕсли; ИначеЕсли УОП_ОтраслевыеРешения.ЭтоРазделка(ТекДокументОбъект.ВидОперации) Тогда ТекДокументОбъект.СтруктурнаяЕдиница = СтруктурнаяЕдиница; ТекДокументОбъект.СтруктурнаяЕдиницаЗавершенияПроизводства = СтруктурнаяЕдиница; diff --git a/Конфигурация/CommonModules/УОП_УправлениеДиалогомКлиентСервер/Ext/Module.bsl b/Конфигурация/CommonModules/УОП_УправлениеДиалогомКлиентСервер/Ext/Module.bsl index 38531899a..cf87c429b 100644 --- a/Конфигурация/CommonModules/УОП_УправлениеДиалогомКлиентСервер/Ext/Module.bsl +++ b/Конфигурация/CommonModules/УОП_УправлениеДиалогомКлиентСервер/Ext/Module.bsl @@ -336,7 +336,7 @@ КонецЕсли; Если ФормаПоддерживаетОтображениеФактическойСебестоимости(Форма) - И СтруктураОжидаемыхРеквизитов.УОП_СебестоимостьПоРегистру = КонтрольноеЗначение Тогда + И НЕ СтруктураОжидаемыхРеквизитов.УОП_СебестоимостьПоРегистру = КонтрольноеЗначение Тогда СтрокаТабличнойЧасти.УОП_СебестоимостьПоРегистру = 0; КонецЕсли; diff --git a/Конфигурация/CommonModules/УОП_УправлениеДиалогомСервер/Ext/Module.bsl b/Конфигурация/CommonModules/УОП_УправлениеДиалогомСервер/Ext/Module.bsl index ff023f095..e146ff30a 100644 --- a/Конфигурация/CommonModules/УОП_УправлениеДиалогомСервер/Ext/Module.bsl +++ b/Конфигурация/CommonModules/УОП_УправлениеДиалогомСервер/Ext/Module.bsl @@ -3101,6 +3101,7 @@ РеквизитыОтборов.Вставить("Организация", Объект.Организация); РеквизитыОтборов.Вставить("СтруктурнаяЕдиница", СтруктурнаяЕдиница); РеквизитыОтборов.Вставить("ВидДвижения", ВидДвиженияНакопления.Приход); + РеквизитыОтборов.Вставить("ЗаказНаПроизводство", Документы.ЗаказНаПроизводство.ПустаяСсылка()); ЗафиксироватьОписаниеРеквизитов_ФактическаяСебестоимость(ОписаниеРеквизитов, "УОП_Продукция",, diff --git a/Конфигурация/CommonModules/УдалениеПомеченныхОбъектовСлужебный/Ext/Module.bsl b/Конфигурация/CommonModules/УдалениеПомеченныхОбъектовСлужебный/Ext/Module.bsl index a2dcf1172..c6bab4264 100644 --- a/Конфигурация/CommonModules/УдалениеПомеченныхОбъектовСлужебный/Ext/Module.bsl +++ b/Конфигурация/CommonModules/УдалениеПомеченныхОбъектовСлужебный/Ext/Module.bsl @@ -1765,6 +1765,10 @@ Методы.Вставить("УстановкаПараметровСеанса"); Методы.Вставить("ВключитьУдалениеПомеченныхОбъектов"); Методы.Вставить("УстановитьРасписаниеУдаленияПомеченных"); + Если ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.БазоваяФункциональность") Тогда + Методы.Вставить("УдалениеПомеченныхПоРасписанию"); + КонецЕсли; + Методы.Вставить("ПомеченныеНаУдаление", Истина); Методы.Вставить("ВыполнитьОбработкуПричинНеудаления", Истина); Методы.Вставить("УдалитьПомеченныеОбъекты", Истина); diff --git a/Конфигурация/CommonModules/УправлениеДоступомСлужебный/Ext/Module.bsl b/Конфигурация/CommonModules/УправлениеДоступомСлужебный/Ext/Module.bsl index 11e463aa2..af945fee9 100644 --- a/Конфигурация/CommonModules/УправлениеДоступомСлужебный/Ext/Module.bsl +++ b/Конфигурация/CommonModules/УправлениеДоступомСлужебный/Ext/Module.bsl @@ -866,7 +866,11 @@ Значение = Константы.ОграничиватьДоступНаУровнеЗаписейУниверсально.Получить(); - Если Не Значение И Не ВариантВстроенногоЯзыкаРусский() + Если Значение Тогда + Возврат Истина; + КонецЕсли; + + Если Не ВариантВстроенногоЯзыкаРусский() Или ОтключеноОграничениеНаУровнеЗаписей() Или ОтключенСтандартныйВариант() Тогда @@ -918,37 +922,55 @@ ОграничиватьДоступНаУровнеЗаписейУниверсально()); КонецЕсли; - Отбор = Новый Структура("Метаданные", Метаданные.РегламентныеЗадания.ОбновлениеДоступаНаУровнеЗаписей); - Задания = РегламентныеЗаданияСервер.НайтиЗадания(Отбор); + ИзменитьВФоне = Не МонопольныйРежим() + И ТранзакцияАктивна() + И Не ОбщегоНазначения.ИнформационнаяБазаФайловая(); - ТребуетсяИзменение = Ложь; - Для Каждого Задание Из Задания Цикл - Если ВключитьЗадание <> Задание.Использование Тогда - ТребуетсяИзменение = Истина; - Прервать; + БезРасширенийВМоделиСервиса = Не ЗначениеЗаполнено(ПараметрыСеанса.ПодключенныеРасширения) + И ОбщегоНазначения.РазделениеВключено(); + + Если БезРасширенийВМоделиСервиса Тогда + Если МонопольныйРежим() Тогда + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Невозможно изменить использование регламентного задания + |""%1"" + |в монопольном режиме в модели сервиса в сеансе без расширений.'"), + Метаданные.РегламентныеЗадания.ОбновлениеДоступаНаУровнеЗаписей.Представление()); + ВызватьИсключение(ТекстОшибки, КатегорияОшибки.ОшибкаКонфигурации); КонецЕсли; - КонецЦикла; - - Если Не ТребуетсяИзменение Тогда - Возврат; - КонецЕсли; - - Если ВключитьЗадание И ЭтоСеансФоновогоОбновленияДоступа() Тогда - Возврат; - КонецЕсли; - - Если МонопольныйРежим() - Или Не ТранзакцияАктивна() - Или ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда + ИзменитьВФоне = Истина; + Иначе + Отбор = Новый Структура("Метаданные", Метаданные.РегламентныеЗадания.ОбновлениеДоступаНаУровнеЗаписей); + Задания = РегламентныеЗаданияСервер.НайтиЗадания(Отбор); + ТребуетсяИзменение = Ложь; + Для Каждого Задание Из Задания Цикл + Если ВключитьЗадание <> Задание.Использование Тогда + ТребуетсяИзменение = Истина; + Прервать; + КонецЕсли; + КонецЦикла; + + Если Не ТребуетсяИзменение Тогда + Возврат; + КонецЕсли; + + Если ВключитьЗадание И ЭтоСеансФоновогоОбновленияДоступа() Тогда + Возврат; + КонецЕсли; + КонецЕсли; + + Если Не ИзменитьВФоне Тогда ИзменитьРегламентноеЗаданиеОбновленияДоступа(ВключитьЗадание); ИначеЕсли ВключитьЗадание Тогда - ФоновыеЗадания.Выполнить("УправлениеДоступомСлужебный.ВключитьРегламентноеЗаданиеОбновленияДоступа",,, + РасширенияКонфигурации.ВыполнитьФоновоеЗаданиеСРасширениямиБазыДанных( + "УправлениеДоступомСлужебный.ВключитьРегламентноеЗаданиеОбновленияДоступа",,, НСтр("ru = 'Управление доступом: Включение регламентного задания обновления доступа'", ОбщегоНазначения.КодОсновногоЯзыка())); Иначе - ФоновыеЗадания.Выполнить("УправлениеДоступомСлужебный.ОтключитьРегламентноеЗаданиеОбновленияДоступа",,, + РасширенияКонфигурации.ВыполнитьФоновоеЗаданиеСРасширениямиБазыДанных( + "УправлениеДоступомСлужебный.ОтключитьРегламентноеЗаданиеОбновленияДоступа",,, НСтр("ru = 'Управление доступом: Отключение регламентного задания обновления доступа'", ОбщегоНазначения.КодОсновногоЯзыка())); КонецЕсли; diff --git a/Конфигурация/CommonModules/УправлениеДоступомУНФ/Ext/Module.bsl b/Конфигурация/CommonModules/УправлениеДоступомУНФ/Ext/Module.bsl index bc2ac4a27..9e89270c5 100644 --- a/Конфигурация/CommonModules/УправлениеДоступомУНФ/Ext/Module.bsl +++ b/Конфигурация/CommonModules/УправлениеДоступомУНФ/Ext/Module.bsl @@ -1306,6 +1306,7 @@ ОписаниеПрофиля.Роли.Добавить("ОперацииИнтернетЭквайринга"); ОписаниеПрофиля.Роли.Добавить("ЧтениеНастроекПодключенияКИнтернетЭквайрингу"); ОписаниеПрофиля.Роли.Добавить("ЧтениеОперацийИнтернетЭквайринга"); + ОписаниеПрофиля.Роли.Добавить("ОперацииОнлайнЗаказов"); ОписаниеПрофиля.Роли.Добавить("ПодключениеИнтернетПоддержки"); ОписаниеПрофиля.Роли.Добавить("ЗапросНовойСправкиСПАРКРиски"); @@ -1650,6 +1651,8 @@ ОписаниеПрофиля.Роли.Добавить("ПодключениеИнтернетПоддержки"); ОписаниеПрофиля.Роли.Добавить("ПолучениеОбновленийКлассификаторов"); ОписаниеПрофиля.Роли.Добавить("ПросмотрИнформацииОДоступныхОбновленияхПрограммы"); + ОписаниеПрофиля.Роли.Добавить("ОперацииОнлайнЗаказов"); + ОписаниеПрофиля.Роли.Добавить("НастройкаПодключенияКОнлайнЗаказам"); // Доставка ОписаниеПрофиля.Роли.Добавить("БазовыеПраваСервисДоставки"); diff --git a/Конфигурация/CommonModules/УправлениеКонтактнойИнформацией/Ext/Module.bsl b/Конфигурация/CommonModules/УправлениеКонтактнойИнформацией/Ext/Module.bsl index bf6ab3f59..91428055b 100644 --- a/Конфигурация/CommonModules/УправлениеКонтактнойИнформацией/Ext/Module.bsl +++ b/Конфигурация/CommonModules/УправлениеКонтактнойИнформацией/Ext/Module.bsl @@ -7266,4 +7266,11 @@ #КонецОбласти +// См. СтандартныеПодсистемыСервер.ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод +Процедура ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод(Методы) Экспорт + + Методы.Вставить("ОбновитьКонтактнуюИнформациюДляСписковОтложенно", Истина); + +КонецПроцедуры + #КонецОбласти \ No newline at end of file diff --git a/Конфигурация/CommonModules/УправлениеКонтактнойИнформациейКлиент/Ext/Module.bsl b/Конфигурация/CommonModules/УправлениеКонтактнойИнформациейКлиент/Ext/Module.bsl index af43fc115..8801746f7 100644 --- a/Конфигурация/CommonModules/УправлениеКонтактнойИнформациейКлиент/Ext/Module.bsl +++ b/Конфигурация/CommonModules/УправлениеКонтактнойИнформациейКлиент/Ext/Module.bsl @@ -147,16 +147,17 @@ // производиться не будет. // Процедура ОбработкаВыбора(Знач Форма, Знач ВыбранноеЗначение, Знач ИмяРеквизита, СтандартнаяОбработка = Ложь) Экспорт - + СтандартнаяОбработка = Ложь; Форма[ИмяРеквизита] = ВыбранноеЗначение.Представление; - + НайденныеСтроки = УправлениеКонтактнойИнформациейКлиентСервер.ОписаниеКонтактнойИнформацииНаФорме(Форма).НайтиСтроки(Новый Структура("ИмяРеквизита", ИмяРеквизита)); Если НайденныеСтроки.Количество() > 0 Тогда НайденныеСтроки[0].Представление = ВыбранноеЗначение.Представление; НайденныеСтроки[0].Значение = ВыбранноеЗначение.Адрес; + Форма.Модифицированность = Истина; КонецЕсли; - + КонецПроцедуры // Открытие формы адреса формы контактной информации. diff --git a/Конфигурация/CommonModules/УправлениеКонтактнойИнформациейСлужебный/Ext/Module.bsl b/Конфигурация/CommonModules/УправлениеКонтактнойИнформациейСлужебный/Ext/Module.bsl index cc5a21086..276ecb09a 100644 --- a/Конфигурация/CommonModules/УправлениеКонтактнойИнформациейСлужебный/Ext/Module.bsl +++ b/Конфигурация/CommonModules/УправлениеКонтактнойИнформациейСлужебный/Ext/Module.bsl @@ -300,6 +300,15 @@ Обработчики.Вставить("ИнтерактивнаяПроверкаЗаполненияКонтактнойИнформации", "УправлениеКонтактнойИнформациейСлужебный.УстановкаПараметровСеанса"); КонецПроцедуры +// См. ОбщегоНазначенияПереопределяемый.ПриНастройкеПроверкиМетодовВызываемыхКакПроизвольныйКод. +Процедура ПриНастройкеПроверкиМетодовВызываемыхКакПроизвольныйКод(Настройки) Экспорт + + Методы = Новый Соответствие; + Методы.Вставить("ОбновитьКонтактнуюИнформациюДляСписковОтложенно", Истина); + Настройки.ИсключенияКогдаУказанныйМетодНеВызывается.Вставить("ОбщийМодуль.УправлениеКонтактнойИнформацией", Методы); + +КонецПроцедуры + // См. КонтрольВеденияУчетаПереопределяемый.ПриОпределенииПроверок. Процедура ПриОпределенииПроверок(ГруппыПроверок, Проверки) Экспорт @@ -3132,7 +3141,13 @@ Методы.Вставить("УстановкаПараметровСеанса"); Методы.Вставить("УстановитьЗначениеПризнакаИспользуется"); - Методы.Вставить("ПроверитьВидыКонтактнойИнформации"); + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонтрольВеденияУчета") Тогда + Методы.Вставить("ПроверитьВидыКонтактнойИнформации"); + КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.БазоваяФункциональность") Тогда + Методы.Вставить("ИсправлениеУстаревшихАдресов"); + КонецЕсли; + Методы.Вставить("ИсправитьВидыКонтактнойИнформацииВФоне", Истина); КонецПроцедуры diff --git a/Конфигурация/CommonModules/УправлениеНебольшойФирмойЭлектронныеДокументыВызовСервера/Ext/Module.bsl b/Конфигурация/CommonModules/УправлениеНебольшойФирмойЭлектронныеДокументыВызовСервера/Ext/Module.bsl index 2014df881..ade7988d2 100644 --- a/Конфигурация/CommonModules/УправлениеНебольшойФирмойЭлектронныеДокументыВызовСервера/Ext/Module.bsl +++ b/Конфигурация/CommonModules/УправлениеНебольшойФирмойЭлектронныеДокументыВызовСервера/Ext/Module.bsl @@ -88,7 +88,17 @@ ИначеЕсли ТипЗнч(Основание) = Тип("ДокументСсылка.РасходнаяНакладная") Тогда Возврат ДанныеЗаполненияЭЗЗПоДаннымРеализации(Основание); КонецЕсли; -КонецФункции +КонецФункции + +Функция ДанныеЗаполненияЭПЭ(Основание) Экспорт + Если ТипЗнч(Основание) = Тип("ДокументСсылка.СчетНаОплату") Тогда + Возврат ДанныеЗаполненияЭПЭПоДаннымСчета(Основание); + ИначеЕсли ТипЗнч(Основание) = Тип("ДокументСсылка.ЗаказПокупателя") Тогда + Возврат ДанныеЗаполненияЭПЭПоДаннымРеализации(Основание); + ИначеЕсли ТипЗнч(Основание) = Тип("ДокументСсылка.РасходнаяНакладная") Тогда + Возврат ДанныеЗаполненияЭПЭПоДаннымРеализации(Основание); + КонецЕсли; +КонецФункции Функция ДанныеЗаполненияЭЗЗПоДаннымСчета(Основание) @@ -163,6 +173,65 @@ КонецФункции +Функция ДанныеЗаполненияЭПЭПоДаннымСчета(Основание) + + ДанныеЗаполнения = Новый Структура; + + СписокРеквизитов = "Организация, Контрагент, Дата, Номер, Организация"; + + РеквизитыОснования = ОбщегоНазначения.ЗначенияРеквизитовОбъекта( + Основание, СписокРеквизитов); + + ДанныеЗаполнения.Вставить("ДокументыОснования", Новый Массив); + ДанныеЗаполнения.ДокументыОснования.Добавить(Новый Структура("ДокументОснование", Основание)); + + ДанныеЗаполнения.Вставить("Организация", РеквизитыОснования.Организация); + + ДанныеЗаполнения.Вставить("ТитулЗаказчикаДата", РеквизитыОснования.Дата); + + ДанныеЗаполнения.Вставить("СсылкаТитулЗаказчикаЗаказчик", РеквизитыОснования.Организация); + + Параметры = Новый Структура; + Параметры.Вставить("АдресВСвободнойФорме", Истина); + + ОбменСГИСЭПДКлиентСервер.ЗаполнитьРеквизитыУчастника( + РеквизитыОснования.Организация, + "ТитулЗаказчикаЗаказчик", ДанныеЗаполнения, Неопределено,,Параметры); + + Возврат ДанныеЗаполнения; + +КонецФункции + +Функция ДанныеЗаполненияЭПЭПоДаннымРеализации(Основание) + + ДанныеЗаполнения = Новый Структура; + + СписокРеквизитов = "Организация, Контрагент, Грузоотправитель, Грузополучатель, + |Перевозчик, Дата, Номер, АдресДоставки, АдресДоставкиЗначение, + |Организация, ЭтоУниверсальныйДокумент"; + + РеквизитыОснования = ОбщегоНазначения.ЗначенияРеквизитовОбъекта( + Основание, СписокРеквизитов); + + ДанныеЗаполнения.Вставить("ДокументыОснования", Новый Массив); + ДанныеЗаполнения.ДокументыОснования.Добавить(Новый Структура("ДокументОснование", Основание)); + + ДанныеЗаполнения.Вставить("Организация", РеквизитыОснования.Организация); + + ДанныеЗаполнения.Вставить("ТитулЗаказчикаДата", РеквизитыОснования.Дата); + + ДанныеЗаполнения.Вставить("СсылкаТитулЗаказчикаЗаказчик", РеквизитыОснования.Организация); + + Параметры = Новый Структура; + Параметры.Вставить("АдресВСвободнойФорме", Истина); + + ОбменСГИСЭПДКлиентСервер.ЗаполнитьРеквизитыУчастника( + РеквизитыОснования.Организация, + "ТитулЗаказчикаЗаказчик", ДанныеЗаполнения, Неопределено,,Параметры); + + Возврат ДанныеЗаполнения; +КонецФункции + Функция ДанныеЗаполненияАдрес(ДанныеЗаполнения, Знач АдресЗначение, Знач АдресПредставление, Префикс) Если НЕ ЗначениеЗаполнено(АдресЗначение) @@ -255,6 +324,26 @@ Возврат УправлениеНебольшойФирмойЭлектронныеДокументыСервер.ЭлектронныеДокументыПоОснованию(ДокументСсылка, ТипСсылки); КонецФункции +// Проверяет, что для документа ещё нет ни Электронного заказа-заявки, +// ни Электронной транспортной накладной. +// В этом случае разрешает выбор типа "Электронное поручение экспедитору". +// +// Возвращаемое значение: +// Булево - Истина, если можно создать поручение экспедитору. +// +Функция МожноСоздатьПоручениеЭкспедитору(Объект) Экспорт + + СписокОснований = УправлениеНебольшойФирмойЭлектронныеДокументыКлиентСервер.СписокСчетовИЗаказовПокупателей(Объект); + СписокОснований.Добавить(Объект.Ссылка); + + СписокДокументов = УправлениеНебольшойФирмойЭлектронныеДокументыСервер.ЭлектронныеДокументыПоОснованию(Объект.Ссылка); + + ЭлектронныеДокументы = УправлениеНебольшойФирмойЭлектронныеДокументыСервер.РазложитьСписокПоТипамЗначенийОбъектов(СписокДокументов.ВыгрузитьЗначения()); + + Возврат ЭлектронныеДокументы[Тип("ДокументСсылка.ЭлектронныйЗаказЗаявка")] = Неопределено + И ЭлектронныеДокументы[Тип("ДокументСсылка.ЭлектроннаяТранспортнаяНакладная")] = Неопределено; +КонецФункции + #КонецОбласти #Область СлужебныеПроцедурыИФункции diff --git a/Конфигурация/CommonModules/УправлениеНебольшойФирмойЭлектронныеДокументыКлиент/Ext/Module.bsl b/Конфигурация/CommonModules/УправлениеНебольшойФирмойЭлектронныеДокументыКлиент/Ext/Module.bsl index 3ebe41cea..9b6bd807a 100644 --- a/Конфигурация/CommonModules/УправлениеНебольшойФирмойЭлектронныеДокументыКлиент/Ext/Module.bsl +++ b/Конфигурация/CommonModules/УправлениеНебольшойФирмойЭлектронныеДокументыКлиент/Ext/Module.bsl @@ -80,10 +80,17 @@ КонецПроцедуры Асинх Процедура ВыбратьТипДокумента(Форма, ЭлементФормы) + Объект = Форма.Объект; + ТипыДокументов = Новый СписокЗначений; ТипыДокументов.Добавить("ЭлектроннаяТранспортнаяНакладная", НСтр("ru = 'Электронная транспортная накладная'")); ТипыДокументов.Добавить("ЭлектроннаяЗаказЗаявка", НСтр("ru = 'Электронная заказ (заявка)'")); + Если УправлениеНебольшойФирмойЭлектронныеДокументыВызовСервера.МожноСоздатьПоручениеЭкспедитору(Объект) Тогда + ТипыДокументов.Добавить("ЭлектронноеПоручениеЭкспедитору", + НСтр("ru = 'Электронное поручение экспедитору'")); + КонецЕсли; + РезультатВыбора = Ждать Форма.ВыбратьИзСпискаАсинх(ТипыДокументов, ЭлементФормы); Если РезультатВыбора = Неопределено Тогда Возврат; @@ -98,6 +105,8 @@ Если РезультатВыбора.Значение = "ЭлектроннаяЗаказЗаявка" Тогда СоздатьЭлектроннуюЗаказЗаявку(Форма); + ИначеЕсли РезультатВыбора.Значение = "ЭлектронноеПоручениеЭкспедитору" Тогда + СоздатьЭлектронноеПоручениеЭкспедитору(Форма); Иначе СоздатьЭлектроннуюТранспортнуюНакладную(Форма); КонецЕсли; @@ -124,6 +133,15 @@ ОткрытьФорму("Документ.ЭлектронныйЗаказЗаявка.ФормаОбъекта", ПараметрыОткрытия,,,,,ОповешениеОЗакрытии); КонецПроцедуры +Процедура СоздатьЭлектронноеПоручениеЭкспедитору(Форма) Экспорт + ДокументОснование = Форма.Объект.Ссылка; + + ПараметрыОткрытия = Новый Структура("ЗначенияЗаполнения", + УправлениеНебольшойФирмойЭлектронныеДокументыВызовСервера.ДанныеЗаполненияЭПЭ(ДокументОснование)); + ОповешениеОЗакрытии = Новый ОписаниеОповещения("СоздатьЭПДЗавершение", ЭтотОбъект, Форма); + ОткрытьФорму("Документ.ЭлектронноеПоручениеЭкспедитору.ФормаОбъекта", ПараметрыОткрытия, , , , ОповешениеОЗакрытии); +КонецПроцедуры + Процедура СоздатьЭлектроннуюТранспортнуюНакладную(Форма) Экспорт ДокументОснование = Форма.Объект.Ссылка; @@ -137,7 +155,6 @@ УправлениеНебольшойФирмойЭлектронныеДокументыКлиентСервер.ОбновитьТекстЭПД(Форма); КонецПроцедуры - Процедура ОткрытьСписокЭПД(Форма) Экспорт Если НЕ ЗначениеЗаполнено(Форма.ЭПДСсылка) Тогда СписокОснований = УправлениеНебольшойФирмойЭлектронныеДокументыКлиентСервер.СписокСчетовИЗаказовПокупателей(Форма.Объект); @@ -154,5 +171,5 @@ КонецПроцедуры - #КонецОбласти + diff --git a/Конфигурация/CommonModules/УправлениеНебольшойФирмойЭлектронныеДокументыСервер/Ext/Module.bsl b/Конфигурация/CommonModules/УправлениеНебольшойФирмойЭлектронныеДокументыСервер/Ext/Module.bsl index 03ed5485a..fb695c608 100644 --- a/Конфигурация/CommonModules/УправлениеНебольшойФирмойЭлектронныеДокументыСервер/Ext/Module.bsl +++ b/Конфигурация/CommonModules/УправлениеНебольшойФирмойЭлектронныеДокументыСервер/Ext/Module.bsl @@ -10383,7 +10383,7 @@ ПараметрыСтатусаЭДО.Организация = Объект.Организация; ПараметрыСтатусаЭДО.Контрагент = Объект.Контрагент; ПараметрыСтатусаЭДО.Направление = ПодключаемыеСтатусыЭДО.НаправленияЭДО().Исходящий; - ПодключаемыеСтатусыЭДО.ПриЧтениииНаСервере(ПараметрыСтатусаЭДО); + ПодключаемыеСтатусыЭДО.ПриЧтенииНаСервере(ПараметрыСтатусаЭДО); //Конец ЭлектронноеВзаимодействие.ПодключаемыеСтатусыЭДО // ЭлектронноеВзаимодействие.ОбменСКонтрагентами @@ -15863,10 +15863,10 @@ ТаблицаКодовМаркировкиПосле = ДанныеДляФормированияЭД.МаркировкаПосле; ТаблицаКодовМаркировкиДо = ДанныеДляФормированияЭД.МаркировкаДо; - Если ТаблицаКодовМаркировкиПосле.Количество() > 0 Тогда + Если ЗначениеЗаполнено(ДанныеШапки.СсылкаНаОбъект) Тогда ТаблицаКодовМаркировкиДо.Колонки.Ссылка.Имя = "ДокументОснование"; ТаблицаКодовМаркировкиДо.Колонки.Добавить("Ссылка"); - ТаблицаКодовМаркировкиДо.ЗаполнитьЗначения(ТаблицаКодовМаркировкиПосле[0].Ссылка, "Ссылка"); + ТаблицаКодовМаркировкиДо.ЗаполнитьЗначения(ДанныеШапки.СсылкаНаОбъект, "Ссылка"); КонецЕсли; ДанныеДляФормированияЭД.ТаблицаДокумента.Колонки.Добавить("Номенклатура"); ДанныеДляФормированияЭД.ТаблицаДокумента.Колонки.Добавить("КоличествоДо"); @@ -18282,6 +18282,59 @@ Возврат СписокДокументов; КонецФункции +// Проверяет, что для документа ещё нет ни Электронного заказа-заявки, +// ни Электронной транспортной накладной. +// В этом случае разрешает выбор типа "Электронное поручение экспедитору". +// +// Возвращаемое значение: +// Булево - Истина, если можно создать поручение экспедитору. +// +Функция МожноСоздатьПоручениеЭкспедитору(Объект) Экспорт + + СписокОснований = УправлениеНебольшойФирмойЭлектронныеДокументыКлиентСервер.СписокСчетовИЗаказовПокупателей(Объект); + СписокОснований.Добавить(Объект.Ссылка); + + СписокДокументов = ЭлектронныеДокументыПоОснованию(Объект.Ссылка); + + ЭлектронныеДокументы = РазложитьСписокПоТипамЗначенийОбъектов(СписокДокументов.ВыгрузитьЗначения()); + + Возврат ЭлектронныеДокументы[Тип("ДокументСсылка.ЭлектронныйЗаказЗаявка")] = Неопределено + И ЭлектронныеДокументы[Тип("ДокументСсылка.ЭлектроннаяТранспортнаяНакладная")] = Неопределено; +КонецФункции + +// Раскладывает переданный список значений или массив на соотвествие по типам значений +// +// Параметры: +// СписокОбъектов - Массив - ссылки на объекты метаданных. +// +// Возвращаемое значение: +// Соответствие - соответствие в котором: +// Ключ - Тип - тип значения объекта. +// Значение - Массив - массив объектов типа. +// +Функция РазложитьСписокПоТипамЗначенийОбъектов(СписокОбъектов) Экспорт + + СтруктураТипов = Новый Соответствие; + + Для Каждого Объект Из СписокОбъектов Цикл + + ТипЗначенияОбъекта = ТипЗнч(Объект); + + Если СтруктураТипов.Получить(ТипЗначенияОбъекта) = Неопределено Тогда + + МассивОбъектов = Новый Массив; + СтруктураТипов.Вставить(ТипЗначенияОбъекта, МассивОбъектов); + + КонецЕсли; + + СтруктураТипов[ТипЗначенияОбъекта].Добавить(Объект); + + КонецЦикла; + + Возврат СтруктураТипов; + +КонецФункции + #КонецОбласти #Область Прочее diff --git a/Конфигурация/CommonModules/УправлениеПечатью/Ext/Module.bsl b/Конфигурация/CommonModules/УправлениеПечатью/Ext/Module.bsl index b3bc1934f..ea772c227 100644 --- a/Конфигурация/CommonModules/УправлениеПечатью/Ext/Module.bsl +++ b/Конфигурация/CommonModules/УправлениеПечатью/Ext/Module.bsl @@ -6626,10 +6626,9 @@ КонецЕсли; Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Валюты") Тогда - Если ТипИсточникаПолей = Метаданные.ОпределяемыеТипы.ДенежнаяСуммаЛюбогоЗнака.Тип - Или ТипИсточникаПолей = Метаданные.ОпределяемыеТипы.ДенежнаяСуммаНеотрицательная.Тип Тогда - МодульРаботаСКурсамиВалют = ОбщегоНазначения.ОбщийМодуль("РаботаСКурсамиВалют"); - МодульРаботаСКурсамиВалют.ПодключитьИсточникДанныхПечатиЧислоПрописью(ИсточникиПолей, ИмяИсточникаПолей); + МодульРаботаСКурсамиВалют = ОбщегоНазначения.ОбщийМодуль("РаботаСКурсамиВалют"); + Если МодульРаботаСКурсамиВалют.ЭтоТипДенежнойСуммы(ТипИсточникаПолей) Тогда + МодульРаботаСКурсамиВалют.ПодключитьИсточникДанныхПечатиЧислоПрописью(ИсточникиПолей, ИмяИсточникаПолей); КонецЕсли; КонецЕсли; diff --git a/Конфигурация/CommonModules/УправлениеПечатьюПереопределяемый/Ext/Module.bsl b/Конфигурация/CommonModules/УправлениеПечатьюПереопределяемый/Ext/Module.bsl index 9226d8326..970ca968b 100644 --- a/Конфигурация/CommonModules/УправлениеПечатьюПереопределяемый/Ext/Module.bsl +++ b/Конфигурация/CommonModules/УправлениеПечатьюПереопределяемый/Ext/Module.bsl @@ -26,10 +26,6 @@ // Процедура ПриОпределенииНастроекПечати(Настройки) Экспорт - // ЗарплатаКадрыПодсистемы - ЗарплатаКадры.ПриОпределенииНастроекПечати(Настройки); - // Конец ЗарплатаКадрыПодсистемы - ПечатьДокументовУНФ.ПриОпределенииНастроекПечати(Настройки); КонецПроцедуры diff --git a/Конфигурация/CommonModules/УправлениеПечатьюСлужебныйКлиент/Ext/Module.bsl b/Конфигурация/CommonModules/УправлениеПечатьюСлужебныйКлиент/Ext/Module.bsl index 4428267f3..807b8ee50 100644 --- a/Конфигурация/CommonModules/УправлениеПечатьюСлужебныйКлиент/Ext/Module.bsl +++ b/Конфигурация/CommonModules/УправлениеПечатьюСлужебныйКлиент/Ext/Module.bsl @@ -184,14 +184,24 @@ Если Не ПустаяСтрока(ОписаниеКоманды.Обработчик) Тогда ОписаниеКоманды.Вставить("Форма", Форма); ИмяОбработчика = ОписаниеКоманды.Обработчик; + ЧастиИмени = СтрРазделить(ИмяОбработчика, "."); + Свойства = Новый Структура; + Для Каждого ЧастьИмени Из ЧастиИмени Цикл + Попытка + Свойства.Вставить(ЧастьИмени); + Исключение + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Некорректное имя процедуры печати ""%1"".'"), ИмяОбработчика); + ВызватьИсключение(ТекстОшибки, КатегорияОшибки.ОшибкаКонфигурации); + КонецПопытки; + КонецЦикла; Если СтрЧислоВхождений(ИмяОбработчика, ".") = 0 И ЭтоОтчетИлиОбработка(ОписаниеКоманды.МенеджерПечати) Тогда ОсновнаяФорма = ПолучитьФорму(ОписаниеКоманды.МенеджерПечати + ".Форма", , Форма, Истина);// АПК:65 - форма создается для вызова метода ИмяОбработчика = "ОсновнаяФорма." + ИмяОбработчика; КонецЕсли; ПараметрыПечати = УправлениеПечатьюКлиент.ОписаниеПараметровПечати(); ЗаполнитьЗначенияСвойств(ПараметрыПечати, ОписаниеКоманды); - Обработчик = ИмяОбработчика + "(ПараметрыПечати)"; - Результат = Вычислить(Обработчик); + Результат = Вычислить(ИмяОбработчика + "(ПараметрыПечати)"); // Не нарушает безопасность информации, так как вычисляется только функция модуля. ОписаниеКоманды.Удалить("Форма"); ОбновитьКоманды(Форма, ОписаниеКоманды); diff --git a/Конфигурация/CommonModules/УчетНДСПереопределяемый/Ext/Module.bsl b/Конфигурация/CommonModules/УчетНДСПереопределяемый/Ext/Module.bsl index f2780d0c2..12546b386 100644 --- a/Конфигурация/CommonModules/УчетНДСПереопределяемый/Ext/Module.bsl +++ b/Конфигурация/CommonModules/УчетНДСПереопределяемый/Ext/Module.bsl @@ -2497,6 +2497,7 @@ СписокТиповДляПроверки.Добавить(Тип("ДокументОбъект.РасходИзКассы"),, Истина); СписокТиповДляПроверки.Добавить(Тип("ДокументОбъект.РасходСоСчета"),, Истина); СписокТиповДляПроверки.Добавить(Тип("ДокументОбъект.ОтчетОРозничныхПродажах")); + СписокТиповДляПроверки.Добавить(Тип("ДокументОбъект.Взаимозачет")); ЭлементСписка = СписокТиповДляПроверки.НайтиПоЗначению(ТипДокумента); diff --git a/Конфигурация/CommonModules/УчетНДСФормированиеОтчетности/Ext/Module.bsl b/Конфигурация/CommonModules/УчетНДСФормированиеОтчетности/Ext/Module.bsl index 176ede7e0..80c655bda 100644 --- a/Конфигурация/CommonModules/УчетНДСФормированиеОтчетности/Ext/Module.bsl +++ b/Конфигурация/CommonModules/УчетНДСФормированиеОтчетности/Ext/Module.bsl @@ -3397,76 +3397,6 @@ #Область КосвенныеНалогиПриИмпорте -Функция НачислениеНДСПоЗаявлениямОВвозе(ПараметрыОтчета, ДатаПодписиДекларации) Экспорт - - ВидыСубконто6842 = Новый СписокЗначений; - ВидыСубконто6842.Добавить(ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Контрагенты); - ВидыСубконто6842.Добавить(ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Договоры); - ВидыСубконто6842.Добавить(ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.СФПолученные); - - Запрос = Новый Запрос; - Запрос.УстановитьПараметр("Организация", ПараметрыОтчета.Организация); - Запрос.УстановитьПараметр("НачалоПериода", ПараметрыОтчета.мДатаНачалаПериодаОтчета); - Запрос.УстановитьПараметр("КонецПериода", ПараметрыОтчета.мДатаКонцаПериодаОтчета); - Запрос.УстановитьПараметр("ДатаПодписиДекларации", КонецДня(ДатаПодписиДекларации)); - Запрос.УстановитьПараметр("Счет6842", ПланыСчетов.Хозрасчетный.НДСТаможенныйСоюзКУплате); - Запрос.УстановитьПараметр("ВидыСубконто6842", ВидыСубконто6842); - - Запрос.Текст = - "ВЫБРАТЬ - | ЗаявленияОВвозе.Ссылка КАК ЗаявлениеОВвозе, - | МИНИМУМ(ЗаявленияОВвозе.ДатаПринятияНаУчет) КАК НалоговыйПериод - |ПОМЕСТИТЬ ЗаявленияПоНалоговымПериодам - |ИЗ - | Документ.ЗаявлениеОВвозеТоваров.Товары КАК ЗаявленияОВвозе - |ГДЕ - | ЗаявленияОВвозе.Ссылка.Организация = &Организация - | И ЗаявленияОВвозе.Ссылка.Проведен - | - |СГРУППИРОВАТЬ ПО - | ЗаявленияОВвозе.Ссылка - | - |ИНДЕКСИРОВАТЬ ПО - | НалоговыйПериод - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | ЗаявленияПоНалоговымПериодам.ЗаявлениеОВвозе - |ПОМЕСТИТЬ ДекларируемыеЗаявления - |ИЗ - | ЗаявленияПоНалоговымПериодам КАК ЗаявленияПоНалоговымПериодам - |ГДЕ - | ЗаявленияПоНалоговымПериодам.НалоговыйПериод МЕЖДУ &НачалоПериода И &КонецПериода - | - |ИНДЕКСИРОВАТЬ ПО - | ЗаявленияПоНалоговымПериодам.ЗаявлениеОВвозе - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | ЕСТЬNULL(ВЫРАЗИТЬ(ХозрасчетныйОбороты.СуммаОборотКт КАК ЧИСЛО(15, 0)), 0) КАК СуммаНДС - |ИЗ - | РегистрБухгалтерии.Хозрасчетный.Обороты( - | , - | &ДатаПодписиДекларации, - | , - | Счет = &Счет6842, - | &ВидыСубконто6842, - | Организация = &Организация - | И Субконто3 В - | (ВЫБРАТЬ - | ДекларируемыеЗаявления.ЗаявлениеОВвозе - | ИЗ - | ДекларируемыеЗаявления), - | , - | ) КАК ХозрасчетныйОбороты"; - - Выборка = Запрос.Выполнить(); - Возврат Выборка; - -КонецФункции - // Создает список показателей декларации по косвенным налогам при импорте товаров, которые будут автоматически заполняться. // Для версии отчета ФормаОтчета2017Кв4. Процедура ПолучитьСведенияОПоказателяхОтчетаКосвенныеНалогиПриИмпортеФормаОтчета2017Кв4(ПоказателиОтчета) Экспорт @@ -7539,70 +7469,6 @@ #Область ОкруглениеНДС -Функция НовыеПоказателиРаздела3Декларации2009Кв4() - - СтруктураПоказателейРаздела3 = Новый Структура; - - СтруктураПоказателейРаздела3.Вставить("П000300001003",0); - СтруктураПоказателейРаздела3.Вставить("П000300002003",0); - СтруктураПоказателейРаздела3.Вставить("П000300003003",0); - СтруктураПоказателейРаздела3.Вставить("П000300004003",0); - СтруктураПоказателейРаздела3.Вставить("П000300005003",0); - СтруктураПоказателейРаздела3.Вставить("П000300006003",0); - СтруктураПоказателейРаздела3.Вставить("П000300007003",0); - СтруктураПоказателейРаздела3.Вставить("П000300008003",0); - СтруктураПоказателейРаздела3.Вставить("П000300013003",0); - СтруктураПоказателейРаздела3.Вставить("П000300014003",0); - СтруктураПоказателейРаздела3.Вставить("П000300015003",0); - СтруктураПоказателейРаздела3.Вставить("П000300016003",0); - СтруктураПоказателейРаздела3.Вставить("П000300017003",0); - СтруктураПоказателейРаздела3.Вставить("П000300018003",0); - СтруктураПоказателейРаздела3.Вставить("П000300019003",0); - СтруктураПоказателейРаздела3.Вставить("П000300020003",0); - СтруктураПоказателейРаздела3.Вставить("П000300021003",0); - СтруктураПоказателейРаздела3.Вставить("П000300022003",0); - СтруктураПоказателейРаздела3.Вставить("П000300023003",0); - СтруктураПоказателейРаздела3.Вставить("П000300024003",0); - СтруктураПоказателейРаздела3.Вставить("П000300001005",0); - СтруктураПоказателейРаздела3.Вставить("П000300002005",0); - СтруктураПоказателейРаздела3.Вставить("П000300003005",0); - СтруктураПоказателейРаздела3.Вставить("П000300004005",0); - СтруктураПоказателейРаздела3.Вставить("П000300005005",0); - СтруктураПоказателейРаздела3.Вставить("П000300006005",0); - СтруктураПоказателейРаздела3.Вставить("П000300007005",0); - СтруктураПоказателейРаздела3.Вставить("П000300008005",0); - СтруктураПоказателейРаздела3.Вставить("П000300009005",0); - СтруктураПоказателейРаздела3.Вставить("П000300010005",0); - СтруктураПоказателейРаздела3.Вставить("П000300011005",0); - СтруктураПоказателейРаздела3.Вставить("П000300012005",0); - - Возврат СтруктураПоказателейРаздела3; - -КонецФункции - -Функция НовыеПоказателиРаздела4Декларации2009Кв4() - - СтруктураПоказателейРаздела4 = Новый Структура; - - СтруктураПоказателейРаздела4.Вставить("П000400000102_1",0); - СтруктураПоказателейРаздела4.Вставить("П000400000103_1",0); - - Возврат СтруктураПоказателейРаздела4; - -КонецФункции - -Функция НовыеПоказателиРаздела6Декларации2009Кв4() - - СтруктураПоказателейРаздела6 = Новый Структура; - - СтруктураПоказателейРаздела6.Вставить("П000600000102_1", 0); - СтруктураПоказателейРаздела6.Вставить("П000600000103_1", 0); - СтруктураПоказателейРаздела6.Вставить("П000600000104_1", 0); - - Возврат СтруктураПоказателейРаздела6; - -КонецФункции - Функция СтруктураПоказателейРаздела3Декларации(ПараметрыЗаполнения) Если ПараметрыЗаполнения = "2026Кв1" Тогда diff --git a/Конфигурация/CommonModules/УчетныеЗаписиЭДО/Ext/Module.bsl b/Конфигурация/CommonModules/УчетныеЗаписиЭДО/Ext/Module.bsl index 86f3ac31d..6053c7a42 100644 --- a/Конфигурация/CommonModules/УчетныеЗаписиЭДО/Ext/Module.bsl +++ b/Конфигурация/CommonModules/УчетныеЗаписиЭДО/Ext/Module.bsl @@ -132,6 +132,7 @@ // * ПутьFTP - Строка // * УчетнаяЗаписьЭлектроннойПочты - СправочникСсылка.УчетныеЗаписиЭлектроннойПочты // * КодНалоговогоОргана - Строка. +// * НеИспользоватьПриглашения - Булево - признак того, что перед началом ЭДО необходимо приглашение. // // Параметры: // ИмяВременнойТаблицы - Строка - таблица, в которую будет помещен результат запроса @@ -166,7 +167,8 @@ |Организация, ОператорЭДО, СпособОбменаЭД, ПринятыУсловияИспользования, |СпособОбменаЭД В (&СпособыПрямогоОбмена) КАК ВозможенОбменБезПодписи, |ИмяФайлаСоглашенияНаРоуминг, ДанныеСоглашенияНаРоуминг, ДатаСоглашенияНаРоуминг, - |КаталогОбмена, ПутьFTP, УчетнаяЗаписьЭлектроннойПочты, КодНалоговогоОргана, ЭтоОблачныйЭДО"; + |КаталогОбмена, ПутьFTP, УчетнаяЗаписьЭлектроннойПочты, КодНалоговогоОргана, ЭтоОблачныйЭДО, + |НеИспользоватьПриглашения"; ОписаниеЗапроса.Текст = ШаблонЗапросаУчетныхЗаписей(ИмяВременнойТаблицы, ПоляЗапроса, ПоляУсловия); @@ -1234,6 +1236,79 @@ КонецФункции +// Возвращает значения параметров учетных записей. +// Если список параметров не был передан, будут возвращены все реквизиты и ресурсы регистра. +// +// Параметры: +// ИдентификаторыЭДО - Массив из Строка +// СписокПараметров - Строка - Перечисление реквизитов (допускается обращение через "." и использование представлений). +// +// Возвращаемое значение: +// Соответствие из КлючИЗначение: +// * Ключ - Строка - Идентификатор учетной записи ЭДО +// * Значение - Структура: +// ** Ключ - Строка - имя реквизита; +// ** Значение - Произвольный - значение реквизита. +// +Функция ПараметрыУчетныхЗаписей(ИдентификаторыЭДО, СписокПараметров = "") Экспорт + + Результат = Новый Соответствие; + СтрокаРеквизитов = ""; + + Если ЗначениеЗаполнено(СписокПараметров) Тогда + СтрокаРеквизитов = СписокПараметров; + Иначе + + Для Каждого Ресурс Из Метаданные.РегистрыСведений.УчетныеЗаписиЭДО.Ресурсы Цикл + СтрокаРеквизитов = СтрокаРеквизитов + Ресурс.Имя + ","; + КонецЦикла; + + Для Каждого Реквизит Из Метаданные.РегистрыСведений.УчетныеЗаписиЭДО.Реквизиты Цикл + СтрокаРеквизитов = СтрокаРеквизитов + Реквизит.Имя + ","; + КонецЦикла; + + СтрокаРеквизитов = Лев(СтрокаРеквизитов, СтрДлина(СтрокаРеквизитов) - 1); + + КонецЕсли; + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("ИдентификаторыЭДО", ИдентификаторыЭДО); + Запрос.Текст = + "ВЫБРАТЬ + | ИдентификаторЭДО КАК ИдентификаторЭДО, + | &СтрокаРеквизитов + |ИЗ + | РегистрСведений.УчетныеЗаписиЭДО + |ГДЕ + | ИдентификаторЭДО В (&ИдентификаторыЭДО) + |"; + + Запрос.Текст = СтрЗаменить(Запрос.Текст, "&СтрокаРеквизитов", СтрокаРеквизитов); + + ТаблицаДанных = Запрос.Выполнить().Выгрузить(); + + Для Каждого СтрокаТаблицы Из ТаблицаДанных Цикл + + СтруктураДанных = Новый Структура; + + Для Каждого КолонкаТаблицы Из ТаблицаДанных.Колонки Цикл + + Если КолонкаТаблицы.Имя = "ИдентификаторЭДО" Тогда + Продолжить; + КонецЕсли; + + СтруктураДанных.Вставить(КолонкаТаблицы.Имя, СтрокаТаблицы[КолонкаТаблицы.Имя]); + + КонецЦикла; + + Результат.Вставить(СтрокаТаблицы.ИдентификаторЭДО, СтруктураДанных); + + КонецЦикла; + + Возврат Результат; + +КонецФункции + // Возвращаемое значение: // Структура: // * Организация - Неопределено,ОпределяемыйТип.Организация @@ -2202,6 +2277,20 @@ #КонецОбласти +// Устанавливает признак создавать контрагентов автоматически +// +Процедура УстановитьПризнакАвтосозданияКонтрагентов() Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Если Константы.СоздаватьКонтрагентовАвтоматическиБЭД.Получить() Тогда + Возврат; + КонецЕсли; + + Константы.СоздаватьКонтрагентовАвтоматическиБЭД.Установить(Истина); + +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции diff --git a/Конфигурация/CommonModules/УчетныеЗаписиЭДОИнтеграцияОблака/Ext/Module.bsl b/Конфигурация/CommonModules/УчетныеЗаписиЭДОИнтеграцияОблака/Ext/Module.bsl index 6c06e2afe..3693b3cb3 100644 --- a/Конфигурация/CommonModules/УчетныеЗаписиЭДОИнтеграцияОблака/Ext/Module.bsl +++ b/Конфигурация/CommonModules/УчетныеЗаписиЭДОИнтеграцияОблака/Ext/Module.bsl @@ -172,33 +172,6 @@ КонецПроцедуры -// Возвращаемое значение: -// См. ОбработкаНеисправностейБЭД.НовыйКонтекстДиагностики -Функция ОбновитьУчетныеЗаписиЭДО() Экспорт - - КонтекстДиагностики = ОбработкаНеисправностейБЭД.НовыйКонтекстДиагностики(); - УчетныеЗаписиОблачногоЭДО = РегистрыСведений.НастройкиОблачногоЭДО.УчетныеЗаписиОблачногоЭДО(); - ТекущийПользователь = Пользователи.ТекущийПользователь(); - ОписаниеМетода = ИнтеграцияОблачногоЭДО.ОписаниеМетодаСервиса("СписокУчетныхЗаписейЭДО"); - - Для Каждого УчетнаяЗаписьОблачногоЭДО Из УчетныеЗаписиОблачногоЭДО Цикл - - ПараметрыВыполнения = ИнтеграцияОблачногоЭДОПовтИсп.ПараметрыВыполненияМетодаСервиса( - УчетнаяЗаписьОблачногоЭДО, ТекущийПользователь); - - РезультатСервиса = ИнтеграцияОблачногоЭДО.ВыполнитьМетодСервиса( - ПараметрыВыполнения, ОписаниеМетода, КонтекстДиагностики); // См. ПрограммныйИнтерфейсОблачногоЭДОВерсия2.СписокУчетныхЗаписейЭДО - - Если Не ЗначениеЗаполнено(РезультатСервиса) Тогда - Продолжить; - КонецЕсли; - - КонецЦикла; - - Возврат КонтекстДиагностики; - -КонецФункции - // Параметры: // ПараметрыДанных - см. УчетныеЗаписиЭДО.НовыеПараметрыДанныхПоИдентификаторамДляРегистрацииВЭДО // @@ -1765,15 +1738,6 @@ #КонецОбласти -#КонецОбласти - -//@skip-check module-structure-top-region -#Область ПрограммныйИнтерфейс - -#Область ДляВызоваИзДругихПодсистем - -#Область СтандартныеПодсистемы - // См. СтандартныеПодсистемыСервер.ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод Процедура ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод(Методы) Экспорт @@ -1788,7 +1752,3 @@ КонецПроцедуры #КонецОбласти - -#КонецОбласти - -#КонецОбласти \ No newline at end of file diff --git a/Конфигурация/CommonModules/УчетныеЗаписиЭДОКлиентСервер/Ext/Module.bsl b/Конфигурация/CommonModules/УчетныеЗаписиЭДОКлиентСервер/Ext/Module.bsl index a0c3ccd66..017fddad5 100644 --- a/Конфигурация/CommonModules/УчетныеЗаписиЭДОКлиентСервер/Ext/Module.bsl +++ b/Конфигурация/CommonModules/УчетныеЗаписиЭДОКлиентСервер/Ext/Module.bsl @@ -66,6 +66,7 @@ // * ПараметрыУведомлений - см. СервисЭДОКлиентСервер.НовыеПараметрыУведомлений // * ЭтоОблачныйЭДО - Булево // * УчетнаяЗаписьОблачногоЭДО - Неопределено,СправочникСсылка.УчетныеЗаписиОблачногоЭДО +// * НеИспользоватьПриглашения - Булево Функция НовоеОписаниеУчетнойЗаписи() Экспорт Данные = Новый Структура; @@ -86,6 +87,7 @@ Данные.Вставить("ПараметрыУведомлений", СервисЭДОКлиентСервер.НовыеПараметрыУведомлений()); Данные.Вставить("ЭтоОблачныйЭДО", Ложь); Данные.Вставить("УчетнаяЗаписьОблачногоЭДО", Неопределено); + Данные.Вставить("НеИспользоватьПриглашения", Ложь); Возврат Данные; @@ -216,6 +218,8 @@ // * УведомлятьОНовыхДокументах - Булево - признак необходимости отправки уведомлений о новых документах. // * УведомлятьОНеОбработанныхДокументах - Булево - признак необходимости отправки уведомлений о не обработанных документах. // * УведомлятьОбОкончанииСрокаДействияСертификата - Булево - признак необходимости отправки уведомлений об окончании действия сертификата. +// * НеИспользоватьПриглашения - Неопределено,Булево - признак необходимости получения приглашения перед началом ЭДО. +// * Комментарий - Строка // Функция НовыеПараметрыПодключенияЭДО() Экспорт @@ -238,6 +242,8 @@ Параметры.Вставить("УведомлятьОНовыхДокументах", Ложь); Параметры.Вставить("УведомлятьОНеОбработанныхДокументах", Ложь); Параметры.Вставить("УведомлятьОбОкончанииСрокаДействияСертификата", Ложь); + Параметры.Вставить("НеИспользоватьПриглашения", Неопределено); + Параметры.Вставить("Комментарий", ""); Возврат Параметры; @@ -354,6 +360,22 @@ КонецФункции +// Возвращаемое значение: +// Булево - Признак, определяющий нужно ли получать приглашение от контрагента, прежде чем он сможет направлять электронные документы. +Функция ТребоватьПриглашенияПередНачаломЭДОЗначениеПоУмолчанию() Экспорт + + Возврат Истина; + +КонецФункции + +// Возвращаемое значение: +// Строка - количество символов, являющееся минимальной допустимой длиной назначения учетной записи ЭДО +Функция МинимальнаяДопустимаяДлинаНазначенияУчетнойЗаписи() Экспорт + + Возврат 7; + +КонецФункции + #КонецОбласти #Область СлужебныеПроцедурыИФункции diff --git a/Конфигурация/CommonModules/УчетныеЗаписиЭДОСлужебный/Ext/Module.bsl b/Конфигурация/CommonModules/УчетныеЗаписиЭДОСлужебный/Ext/Module.bsl index 45f2d761c..29a96b036 100644 --- a/Конфигурация/CommonModules/УчетныеЗаписиЭДОСлужебный/Ext/Module.bsl +++ b/Конфигурация/CommonModules/УчетныеЗаписиЭДОСлужебный/Ext/Module.bsl @@ -237,6 +237,7 @@ НоваяУчетнаяЗапись.ПодробноеОписаниеУчетнойЗаписи = ОписаниеУчетнойЗаписи.ПодробноеОписание; НоваяУчетнаяЗапись.ПринятыУсловияИспользования = ОписаниеУчетнойЗаписи.ПринятыУсловияИспользования; НоваяУчетнаяЗапись.ЭтоОблачныйЭДО = ОписаниеУчетнойЗаписи.ЭтоОблачныйЭДО; + НоваяУчетнаяЗапись.НеИспользоватьПриглашения = ОписаниеУчетнойЗаписи.НеИспользоватьПриглашения; КонецПроцедуры @@ -450,7 +451,8 @@ Если ИзмененыПараметрыУчетнойЗаписи Тогда МассивСтрок.Добавить(" УчетныеЗаписиЭДО.НазначениеУчетнойЗаписи КАК НазначениеУчетнойЗаписи, - | УчетныеЗаписиЭДО.ПодробноеОписаниеУчетнойЗаписи КАК ПодробноеОписаниеУчетнойЗаписи"); + | УчетныеЗаписиЭДО.ПодробноеОписаниеУчетнойЗаписи КАК ПодробноеОписаниеУчетнойЗаписи, + | УчетныеЗаписиЭДО.НеИспользоватьПриглашения"); КонецЕсли; МассивСтрок.Добавить(Символы.ПС); @@ -549,6 +551,7 @@ ОбработкаОшибок.ПодробноеПредставлениеОшибки(Информация), СтрШаблон(НСтр("ru = 'Не удалось обновить сертификаты по ученой записи: %1'"), ИдентификаторУчетнойЗаписи)); + ВызватьИсключение; КонецПопытки; КонецПроцедуры @@ -1025,8 +1028,8 @@ Если Не СертификатОтозван Тогда МенеджерКриптографии = ЭлектроннаяПодпись.МенеджерКриптографии("", Ложь); ОписаниеОшибки = ""; - ДвоичныеДанныеСертификта = КриптографияБЭД.ДвоичныеДанныеСертификата(Сертификат); - ЭлектроннаяПодпись.ПроверитьСертификат(МенеджерКриптографии, ДвоичныеДанныеСертификта, ОписаниеОшибки); + ДвоичныеДанныеСертификата = КриптографияБЭД.ДвоичныеДанныеСертификата(Сертификат); + ЭлектроннаяПодпись.ПроверитьСертификат(МенеджерКриптографии, ДвоичныеДанныеСертификата, ОписаниеОшибки); СертификатОтозван = КриптографияБЭД.СертификатОтозван(Сертификат); КонецЕсли; Если СертификатОтозван Тогда diff --git a/Конфигурация/CommonModules/ФорматыЭДО/Ext/Module.bsl b/Конфигурация/CommonModules/ФорматыЭДО/Ext/Module.bsl index 481146de0..26d429282 100644 --- a/Конфигурация/CommonModules/ФорматыЭДО/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ФорматыЭДО/Ext/Module.bsl @@ -191,7 +191,10 @@ Форматы.ЭПД.Вставить("ЭСВ", "ESV"); Форматы.ЭПД.Вставить("ЭЗЗ", "EZZ"); Форматы.ЭПД.Вставить("ЭПЛ", "EPL"); - Форматы.ЭПД.Вставить("ЭДФ", "EDF"); + Форматы.ЭПД.Вставить("ЭДФ", "EDF"); + Форматы.ЭПД.Вставить("ЭПЭ", "EPE"); + Форматы.ЭПД.Вставить("ЭЭР", "EER"); + Форматы.ЭПД.Вставить("ЭСР", "ESR"); КонецЕсли; ТрансграничныйЭДО.ДополнитьФорматы(Форматы); @@ -1624,7 +1627,17 @@ Формат = СодержаниеДокумента.Формат; ОписаниеОшибки = ""; - ДанныеФайлаЭД = ДанныеФайлаЭД(ОписаниеФайла, ОписаниеОшибки); + + ДанныеФайлаЭД = Неопределено; + + Если ОбщегоНазначения.ПодсистемаСуществует("ЭлектронноеВзаимодействие.ОбменСГИСЭПД") Тогда + МодульПодсистемы = ОбщегоНазначения.ОбщийМодуль("ОбменСГИСЭПД"); + ДанныеФайлаЭД = МодульПодсистемы.ПриФормированияДанныхФайлаЭД(ОписаниеФайла); + КонецЕсли; + + Если ДанныеФайлаЭД = Неопределено Тогда + ДанныеФайлаЭД = ДанныеФайлаЭД(ОписаниеФайла, ОписаниеОшибки); + КонецЕсли; Если Не ПустаяСтрока(ОписаниеОшибки) Тогда ВызватьИсключение ОписаниеОшибки; @@ -2506,13 +2519,29 @@ РаботаСФайламиБЭД.ЗаполнитьСвойствоXDTO(ДанныеФайлаЭД.Документ, "Подписант", Подписант, Истина, Ошибки); Иначе + + ЗаполнениеДанныхПодписантаДляЭПД = Ложь; + + Если ОбщегоНазначения.ПодсистемаСуществует("ЭлектронноеВзаимодействие.ОбменСГИСЭПД") Тогда + МодульПодсистемы = ОбщегоНазначения.ОбщийМодуль("ОбменСГИСЭПД"); + ДанныеПодписанта = НовыеДанныеПодписанта(Организация, СертификатПодписи, ВыбраннаяМЧД); + МодульПодсистемы.ПриЗаполненииДанныхПодписанта(ОписаниеФайла, ДанныеФайлаЭД, ДанныеПодписанта, + ЗаполнениеДанныхПодписантаДляЭПД, Ошибки); + КонецЕсли; + Попытка - Обработка = ОбработкаФормата(Формат); - Если ТипЗнч(Обработка) <> Тип("Неопределено") И Обработка.ЗаполнениеДанныхПодписантаДоступно() Тогда - ЛокальноеИмя = "Файл"; - ДанныеПодписанта = НовыеДанныеПодписанта(Организация, СертификатПодписи, ВыбраннаяМЧД); - Обработка.ЗаполнитьДанныеПодписанта(ДанныеФайлаЭД, ДанныеПодписанта, Ошибки); + + Если Не ЗаполнениеДанныхПодписантаДляЭПД Тогда + + Обработка = ОбработкаФормата(Формат); + Если ТипЗнч(Обработка) <> Тип("Неопределено") И Обработка.ЗаполнениеДанныхПодписантаДоступно() Тогда + ЛокальноеИмя = "Файл"; + ДанныеПодписанта = НовыеДанныеПодписанта(Организация, СертификатПодписи, ВыбраннаяМЧД); + Обработка.ЗаполнитьДанныеПодписанта(ДанныеФайлаЭД, ДанныеПодписанта, Ошибки); + КонецЕсли; + КонецЕсли; + Исключение ПодсистемаРегистрацииОшибок = ОбщегоНазначенияБЭДКлиентСервер.ПодсистемыБЭД().ОбменСКонтрагентами; Шаблон = НСтр( @@ -2526,8 +2555,19 @@ // Записываем ЭД в файл и удаляем пространство имен только у ФНС документов. Если ДанныеФайлаЭД.Свойства().Получить("ИдФайл") <> Неопределено Тогда - ДвоичныеДанные = РаботаСФайламиБЭД.XDTOВДвоичныеДанные(ДанныеФайлаЭД, Ложь, "windows-1251", ЛокальноеИмя); - ДвоичныеДанные = ОбщегоНазначенияБЭД.УдалитьПространствоИмен(ДвоичныеДанные, ПространствоИменСхемы); + + УдалениеПространстваИменДляЭПД = Ложь; + + Если ОбщегоНазначения.ПодсистемаСуществует("ЭлектронноеВзаимодействие.ОбменСГИСЭПД") Тогда + МодульПодсистемы = ОбщегоНазначения.ОбщийМодуль("ОбменСГИСЭПД"); + ДвоичныеДанные = МодульПодсистемы.ПриУдаленииПространстваИмен(ДанныеФайлаЭД, УдалениеПространстваИменДляЭПД); + КонецЕсли; + + Если Не УдалениеПространстваИменДляЭПД Тогда + ДвоичныеДанные = РаботаСФайламиБЭД.XDTOВДвоичныеДанные(ДанныеФайлаЭД, Ложь, "windows-1251", ЛокальноеИмя); + ДвоичныеДанные = ОбщегоНазначенияБЭД.УдалитьПространствоИмен(ДвоичныеДанные, ПространствоИменСхемы); + КонецЕсли; + Иначе ДвоичныеДанные = РаботаСФайламиБЭД.XDTOВДвоичныеДанные(ДанныеФайлаЭД) КонецЕсли; @@ -2550,6 +2590,13 @@ // Функция ЗаполнениеДанныхПодписантаДоступно(СодержаниеДокумента) Экспорт + Если ОбщегоНазначения.ПодсистемаСуществует("ЭлектронноеВзаимодействие.ОбменСГИСЭПД") Тогда + МодульПодсистемы = ОбщегоНазначения.ОбщийМодуль("ОбменСГИСЭПД"); + Если МодульПодсистемы.ПриЗаполнениеДанныхПодписантаДоступно(СодержаниеДокумента) Тогда + Возврат Истина; + КонецЕсли; + КонецЕсли; + ТипДокумента = СодержаниеДокумента.ТипДокумента; Формат = СодержаниеДокумента.Формат; @@ -2988,11 +3035,11 @@ // Структура - параметры формирования: // * Формат - Строка - формат документа (см. ПоддерживаемыеФорматы). // * ТипДокумента - ПеречислениеСсылка.ТипыДокументовЭДО - тип документа. -// * Организация - ОпределяемыеТипы.Организация - организация. -// * Контрагент - ОпределяемыеТипы.УчастникЭДО - контрагент. -// * Договор - ОпределяемыеТипы.ДоговорСКонтрагентомЭДО - договор контрагента. +// * Организация - ОпределяемыйТип.Организация - организация. +// * Контрагент - ОпределяемыйТип.УчастникЭДО - контрагент. +// * Договор - ОпределяемыйТип.ДоговорСКонтрагентомЭДО - договор контрагента. // * ВыгружатьДополнительныеСведения - Булево - признак выгрузки дополнительных сведений. -// * ОтключитьРассчетДополнительныхПолей - Булево - признак отключения расч. счета дополнительных полей. +// * ОтключитьРасчетДополнительныхПолей - Булево - признак отключения расч. счета дополнительных полей. // * ЗаполнениеКодаТовара - Строка - значение из списка, заданного в // ПриОпределенииВариантовЗаполненияПолейЭлектронныхДокументов. // @@ -3005,7 +3052,7 @@ Параметры.Вставить("Контрагент", Метаданные.ОпределяемыеТипы.УчастникЭДО.Тип.ПривестиЗначение()); Параметры.Вставить("Договор", Метаданные.ОпределяемыеТипы.ДоговорСКонтрагентомЭДО.Тип.ПривестиЗначение()); Параметры.Вставить("ВыгружатьДополнительныеСведения", Истина); - Параметры.Вставить("ОтключитьРассчетДополнительныхПолей", Ложь); + Параметры.Вставить("ОтключитьРасчетДополнительныхПолей", Ложь); Параметры.Вставить("ЗаполнениеКодаТовара", ""); Возврат Параметры; @@ -3222,7 +3269,7 @@ КонецЕсли; - ЗначенияДополнительныхПолей = СформироватьЗначенияДополнительныхПолейДокумента(ОбъектУчета, Настройки, Данные, Настройки.ОтключитьРассчетДополнительныхПолей); + ЗначенияДополнительныхПолей = СформироватьЗначенияДополнительныхПолейДокумента(ОбъектУчета, Настройки, Данные, Настройки.ОтключитьРасчетДополнительныхПолей); ДополнитьДанныеДокумента(ДанныеДокумента, Данные); @@ -3574,16 +3621,16 @@ // * Участники - Структура - участники ЭДО: // ** ИдентификаторОтправителя - Строка // ** ИдентификаторПолучателя - Строка -// ОтключитьРассчетДополнительныхПолей - Булево +// ОтключитьРасчетДополнительныхПолей - Булево // // Возвращаемое значение: // см. ДополнитьДокументДаннымиДополнительныхПолей // -Функция СформироватьЗначенияДополнительныхПолейДокумента(ОбъектУчета, Настройки, Данные, ОтключитьРассчетДополнительныхПолей) Экспорт +Функция СформироватьЗначенияДополнительныхПолейДокумента(ОбъектУчета, Настройки, Данные, ОтключитьРасчетДополнительныхПолей) Экспорт - Если ОтключитьРассчетДополнительныхПолей + Если ОтключитьРасчетДополнительныхПолей Или (ТипЗнч(Данные.ЗначенияДополнительныхПолей) = Тип("Структура") - И ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Данные.ЗначенияДополнительныхПолей, "ОтключитьРассчетДополнительныхПолей", Ложь )) Тогда + И ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Данные.ЗначенияДополнительныхПолей, "ОтключитьРасчетДополнительныхПолей", Ложь )) Тогда ЗначенияДополнительныхПолей = Новый Структура("Успех", Истина); Иначе Формат = Настройки.Формат; @@ -4178,12 +4225,14 @@ // МягкоеЧтение - Булево - определяет будет ли для файлов в формате CML вырезаться пространство имен. // // Возвращаемое значение: -// ОбъектXDTO. +// - ОбъектXDTO +// - Неопределено // Функция ДанныеФайлаЭД(ДанныеФайла, ОписаниеОшибки, ПространствоИменФНС = Неопределено, ИмяКорневогоУзла = "", МягкоеЧтение = Ложь) Экспорт ДанныеФайлаЭД = Неопределено; ПространствоИменФайла = ""; + ДвоичныеДанныеФайла = ДанныеФайла.ДвоичныеДанные; Если НРег(Прав(ДанныеФайла.ИмяФайла, 4)) = ".zip" Тогда ДанныеМЧД = МашиночитаемыеДоверенности.ДанныеДоверенностиИзФайлаОбмена(ДанныеФайла); @@ -4201,11 +4250,18 @@ ДанныеФайла.ИмяФайла); ЭлектронноеВзаимодействие.ОбработатьОшибку(НСтр("ru = 'Чтение ЭД.'"), ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), ОписаниеОшибки); + Возврат Неопределено; КонецЕсли; - Иначе - ДвоичныеДанныеФайла = ДанныеФайла.ДвоичныеДанные; КонецЕсли; + + Если ТипЗнч(ДвоичныеДанныеФайла) <> Тип("ДвоичныеДанные") Тогда + ШаблонСообщения = НСтр("ru = 'Ошибка при чтении данных из файла: + |%1'"); + ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, ДанныеФайла.ИмяФайла); + Возврат Неопределено; + КонецЕсли; + ДвоичныеДанныеФайла = РаботаСФайламиБЭД.ДвоичныеДанныеНормализованногоXML(ДвоичныеДанныеФайла); ЧтениеXML = Новый ЧтениеXML; @@ -4882,6 +4938,18 @@ // ДеревоДанных - См. ДеревоЭлектронногоДокументаБЭД.ДеревоЭлектронногоДокумента // Ошибки - Массив из Строка Процедура ПроверитьРегистрационныеДанныеДляОператораЭДО(ДеревоДанных, Ошибки) Экспорт + + СтрокаКомментария = Неопределено; + МинимальнаяДлиннаКомментария = УчетныеЗаписиЭДОКлиентСервер.МинимальнаяДопустимаяДлинаНазначенияУчетнойЗаписи(); + Комментарий = СокрЛП(ДеревоЭлектронногоДокументаБЭД.ЗначениеРеквизитаВДереве(ДеревоДанных, + "УчастЭДО.Комментарий", Ложь, СтрокаКомментария)); + + Если ЗначениеЗаполнено(Комментарий) И СтрДлина(Комментарий) < МинимальнаяДлиннаКомментария Тогда + ТекстОшибки = СтрШаблон(НСтр("ru = 'Длина назначения должна быть не менее %1 символов'"), МинимальнаяДлиннаКомментария); + ДеревоЭлектронногоДокументаБЭД.ДобавитьОшибкуПроверкиДереваДанных(Ошибки, СтрокаКомментария, ТекстОшибки, + Истина, , "Назначение учетной записи"); + КонецЕсли; + // АПК:1036-выкл не требуется проверки орфографии. НайденнаяСтрока = Неопределено; ТипУчастника = ДеревоЭлектронногоДокументаБЭД.ЗначениеРеквизитаВДереве(ДеревоДанных, "УчастЭДО.ТипУчастника"); @@ -4908,12 +4976,13 @@ ДеревоЭлектронногоДокументаБЭД.ДобавитьОшибкуПроверкиДереваДанных(Ошибки, НайденнаяСтрока, ТекстОшибки); КонецЕсли; // АПК:1036-вкл + КонецПроцедуры // Получает текст уточнения электронного документа. // // Параметры: -// ОписаниеФайла - См. РаботаСФайламиБЭДКлиентСервер.НовоеОписаниеФайла() - описание файла документа. +// ОписаниеФайла - См. РаботаСФайламиБЭДКлиентСервер.НовоеОписаниеФайла() // // Возвращаемое значение: // Строка - текст уточнения. @@ -5979,7 +6048,7 @@ Обработчик = Обработчики.Добавить(); Обработчик.Процедура = "КонвертацияЭДО.ВыполнитьЗаполнениеПравилПреобразования"; - Обработчик.Версия = "1.10.1.52"; + Обработчик.Версия = "1.10.1.67"; Обработчик.РежимВыполнения = "Оперативно"; Обработчик.Идентификатор = Новый УникальныйИдентификатор("086b4610-a498-466e-8d21-97d7edf79578"); Обработчик.ОбщиеДанные = Истина; @@ -6023,7 +6092,7 @@ #Область ПереченьСпециальныхОбстоятельствДокументаЭДО_ОбработатьДанныеДляПереходаНаНовуюВерсию Обработчик = Обработчики.Добавить(); Обработчик.Процедура = "КонвертацияЭДО.ЗаполнитьПереченьСпециальныхОбстоятельствДокументаЭДО"; - Обработчик.Версия = "1.10.1.52"; + Обработчик.Версия = "1.10.1.67"; Обработчик.РежимВыполнения = "Оперативно"; Обработчик.Идентификатор = Новый УникальныйИдентификатор("c9bf16c0-bbdb-4f91-9b44-600230c1897e"); Обработчик.НачальноеЗаполнение = Истина; diff --git a/Конфигурация/CommonModules/ФорматыЭДО_ФНС/Ext/Module.bsl b/Конфигурация/CommonModules/ФорматыЭДО_ФНС/Ext/Module.bsl index 543d09938..b45e1b7c2 100644 --- a/Конфигурация/CommonModules/ФорматыЭДО_ФНС/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ФорматыЭДО_ФНС/Ext/Module.bsl @@ -870,7 +870,8 @@ КонецЕсли; // НаимЕдИзм - наименование единицы измерение обязательно, если указан ее код. - ПроверитьНаименованиеЕдиницыИзмеренияФНС(Товар, Ошибки, НомерСтроки, ЕдиницаИзмеренияКод); + ПроверитьНаименованиеЕдиницыИзмеренияФНС(Товар, Ошибки, НомерСтроки, ЕдиницаИзмеренияКод,, + КлассификаторЕдиницИзмерения); ПроверитьДанныеЕдиницыИзмеренияПоКлассификатору( ЕдиницаИзмеренияКод, ЕдиницаИзмеренияКодСтрокаДерева, Ошибки, НомерСтроки, КлассификаторЕдиницИзмерения); @@ -918,8 +919,10 @@ КонецЕсли; КонецЕсли; - ПроверитьДлинуСтрокиЗначенияДерева(Товар, Ошибки, "СведенияОТоварах.НомерСтроки.КодКаталога", 27, 27, НомерСтроки); - ПроверитьДлинуСтрокиЗначенияДерева(Товар, Ошибки, "СведенияОТоварах.НомерСтроки.КодВидаТовара", 10, 10, НомерСтроки); + ДеревоЭлектронногоДокументаБЭД.ПроверитьДлинуСтрокиЗначенияДерева(Товар, Ошибки, + "СведенияОТоварах.НомерСтроки.КодКаталога", 27, 27, НомерСтроки); + ДеревоЭлектронногоДокументаБЭД.ПроверитьДлинуСтрокиЗначенияДерева(Товар, Ошибки, + "СведенияОТоварах.НомерСтроки.КодВидаТовара", 10, 10, НомерСтроки); НомерСтроки = НомерСтроки + 1; КонецЦикла; @@ -954,13 +957,13 @@ КонецЕсли; - ПроверитьДлинуСтрокиЗначенияДерева( + ДеревоЭлектронногоДокументаБЭД.ПроверитьДлинуСтрокиЗначенияДерева( Данные, Ошибки, "ДополнительныеСведенияОбУчастниках.ИдентификаторГосКонтракта", 20, 25); - ПроверитьДлинуСтрокиЗначенияДерева( + ДеревоЭлектронногоДокументаБЭД.ПроверитьДлинуСтрокиЗначенияДерева( Данные, Ошибки, "ДополнительныеСведенияОбУчастниках.ЗакупкаДляГосударственныхНужд.НомерЛицевогоСчетаПродавца", 11, 11); - ПроверитьДлинуСтрокиЗначенияДерева( + ДеревоЭлектронногоДокументаБЭД.ПроверитьДлинуСтрокиЗначенияДерева( Данные, Ошибки, "ДополнительныеСведенияОбУчастниках.ЗакупкаДляГосударственныхНужд.КодБюджетнойКлассификацииПродавца", 20, 20); - ПроверитьДлинуСтрокиЗначенияДерева( + ДеревоЭлектронногоДокументаБЭД.ПроверитьДлинуСтрокиЗначенияДерева( Данные, Ошибки, "ДополнительныеСведенияОбУчастниках.ЗакупкаДляГосударственныхНужд.КодЦели", 20, 20); Возврат Ошибки; @@ -971,19 +974,19 @@ Ошибки = Неопределено; - ПроверитьДлинуСтрокиЗначенияДерева( + ДеревоЭлектронногоДокументаБЭД.ПроверитьДлинуСтрокиЗначенияДерева( Данные, Ошибки, "ЗакупкаДляГосударственныхНужд.НомерЛицевогоСчетаПокупателя", 11, 11); - ПроверитьДлинуСтрокиЗначенияДерева( + ДеревоЭлектронногоДокументаБЭД.ПроверитьДлинуСтрокиЗначенияДерева( Данные, Ошибки, "ЗакупкаДляГосударственныхНужд.НомерРеестровойЗаписиПокупателя", 8, 8); - ПроверитьДлинуСтрокиЗначенияДерева( + ДеревоЭлектронногоДокументаБЭД.ПроверитьДлинуСтрокиЗначенияДерева( Данные, Ошибки, "ЗакупкаДляГосударственныхНужд.НомерБюджетногоОбязательстваПокупателя", 16, 19); - ПроверитьДлинуСтрокиЗначенияДерева( + ДеревоЭлектронногоДокументаБЭД.ПроверитьДлинуСтрокиЗначенияДерева( Данные, Ошибки, "ЗакупкаДляГосударственныхНужд.КазначействоПокупателяКод", 4, 4); - ПроверитьДлинуСтрокиЗначенияДерева( + ДеревоЭлектронногоДокументаБЭД.ПроверитьДлинуСтрокиЗначенияДерева( Данные, Ошибки, "ЗакупкаДляГосударственныхНужд.НомерДенежногоОбязательства", 22, 22); - ПроверитьДлинуСтрокиЗначенияДерева( + ДеревоЭлектронногоДокументаБЭД.ПроверитьДлинуСтрокиЗначенияДерева( Данные, Ошибки, "ЗакупкаДляГосударственныхНужд.ОКТМОПокупателя", 8, 11); - ПроверитьДлинуСтрокиЗначенияДерева( + ДеревоЭлектронногоДокументаБЭД.ПроверитьДлинуСтрокиЗначенияДерева( Данные, Ошибки, "ЗакупкаДляГосударственныхНужд.ОКТМОМестаПоставки", 8, 11); НомерСтроки = 1; @@ -991,7 +994,7 @@ СтрокаДереваДенежныеОбязательства = СтрокаДереваЗакупкаДляГосударственныхНужд.Строки.Найти("ДенежныеОбязательства"); Для Каждого Обязательство Из СтрокаДереваДенежныеОбязательства.Строки Цикл - ПроверитьДлинуСтрокиЗначенияДерева(Обязательство, Ошибки, + ДеревоЭлектронногоДокументаБЭД.ПроверитьДлинуСтрокиЗначенияДерева(Обязательство, Ошибки, "ЗакупкаДляГосударственныхНужд.ДенежныеОбязательства.НомерСтроки.КодБюджетнойКлассификации", 20, 20, НомерСтроки); НомерСтроки = НомерСтроки + 1; КонецЦикла; @@ -1161,9 +1164,9 @@ Если ТипЗнч(Реквизит) = Тип("Число") И Реквизит > 0 Тогда СтрокиТД = Товар.Строки.Найти(Путь + ".НомерСтроки.СведенияОПрослеживаемости", "ПолныйПуть", Истина); Для Каждого СтрокаТД Из СтрокиТД.Строки Цикл - ПроверитьДлинуСтрокиЗначенияДерева( + ДеревоЭлектронногоДокументаБЭД.ПроверитьДлинуСтрокиЗначенияДерева( СтрокаТД, Ошибки, Путь + ".НомерСтроки.СведенияОПрослеживаемости.НомерСтроки.НомерТовара", 27, 29); - ПроверитьДлинуСтрокиЗначенияДерева( + ДеревоЭлектронногоДокументаБЭД.ПроверитьДлинуСтрокиЗначенияДерева( СтрокаТД, Ошибки, Путь + ".НомерСтроки.СведенияОПрослеживаемости.НомерСтроки.ЕдиницаИзмеренияКод", 3, 4); КонецЦикла; КонецЕсли; @@ -1196,8 +1199,10 @@ КонецЕсли; КонецЕсли; - ПроверитьДлинуСтрокиЗначенияДерева(Товар, Ошибки, Путь + ".НомерСтроки.КодКаталога", 27, 27, НомерСтроки); - ПроверитьДлинуСтрокиЗначенияДерева(Товар, Ошибки, Путь + ".НомерСтроки.КодВидаТовара", 10, 10, НомерСтроки); + ДеревоЭлектронногоДокументаБЭД.ПроверитьДлинуСтрокиЗначенияДерева(Товар, Ошибки, + Путь + ".НомерСтроки.КодКаталога", 27, 27, НомерСтроки); + ДеревоЭлектронногоДокументаБЭД.ПроверитьДлинуСтрокиЗначенияДерева(Товар, Ошибки, + Путь + ".НомерСтроки.КодВидаТовара", 10, 10, НомерСтроки); НомерСтроки = НомерСтроки + 1; @@ -1235,13 +1240,13 @@ КонецЕсли; Путь = "СведенияОСчетеФактуре.ДополнительныеСведенияОбУчастниках."; - ПроверитьДлинуСтрокиЗначенияДерева( + ДеревоЭлектронногоДокументаБЭД.ПроверитьДлинуСтрокиЗначенияДерева( Данные, Ошибки, Путь + "ИдентификаторГосКонтракта", 20, 25); - ПроверитьДлинуСтрокиЗначенияДерева( + ДеревоЭлектронногоДокументаБЭД.ПроверитьДлинуСтрокиЗначенияДерева( Данные, Ошибки, Путь + "СведенияОГосКонтракте.НомерСчетаПродавца", 11, 11); - ПроверитьДлинуСтрокиЗначенияДерева( + ДеревоЭлектронногоДокументаБЭД.ПроверитьДлинуСтрокиЗначенияДерева( Данные, Ошибки, Путь + "СведенияОГосКонтракте.КодПоБюджетнойКлассификации", 20, 20); - ПроверитьДлинуСтрокиЗначенияДерева( + ДеревоЭлектронногоДокументаБЭД.ПроверитьДлинуСтрокиЗначенияДерева( Данные, Ошибки, Путь + "СведенияОГосКонтракте.КодЦели", 20, 20); Возврат Ошибки; @@ -1254,26 +1259,26 @@ // Данные - ДеревоЗначений - дерево для проверки. // // Возвращаемое значение: -// Неопределено, Массив - ошибки, накопленные за время проверки. Элементами массива являются структуры. -// Состав структур см. в ОбщегоНазначенияБЭДКлиентСервер.НовыеПараметрыОшибки. +// Неопределено, +// Массив из см. в ОбщегоНазначенияБЭДКлиентСервер.НовыеПараметрыОшибки. // Функция ПроверитьЗаполнениеДанных_УПД_5_02_ИнформацияПокупателя(Данные) Ошибки = Неопределено; - ПроверитьДлинуСтрокиЗначенияДерева( + ДеревоЭлектронногоДокументаБЭД.ПроверитьДлинуСтрокиЗначенияДерева( Данные, Ошибки, "ЗакупкаДляГосударственныхНужд.НомерЛицевогоСчетаПокупателя", 11, 11); - ПроверитьДлинуСтрокиЗначенияДерева( + ДеревоЭлектронногоДокументаБЭД.ПроверитьДлинуСтрокиЗначенияДерева( Данные, Ошибки, "ЗакупкаДляГосударственныхНужд.НомерРеестровойЗаписиПокупателя", 8, 8); - ПроверитьДлинуСтрокиЗначенияДерева( + ДеревоЭлектронногоДокументаБЭД.ПроверитьДлинуСтрокиЗначенияДерева( Данные, Ошибки, "ЗакупкаДляГосударственныхНужд.НомерБюджетногоОбязательстваПокупателя", 16, 19); - ПроверитьДлинуСтрокиЗначенияДерева( + ДеревоЭлектронногоДокументаБЭД.ПроверитьДлинуСтрокиЗначенияДерева( Данные, Ошибки, "ЗакупкаДляГосударственныхНужд.КазначействоПокупателяКод", 4, 4); - ПроверитьДлинуСтрокиЗначенияДерева( + ДеревоЭлектронногоДокументаБЭД.ПроверитьДлинуСтрокиЗначенияДерева( Данные, Ошибки, "ЗакупкаДляГосударственныхНужд.НомерДенежногоОбязательства", 22, 22); - ПроверитьДлинуСтрокиЗначенияДерева( + ДеревоЭлектронногоДокументаБЭД.ПроверитьДлинуСтрокиЗначенияДерева( Данные, Ошибки, "ЗакупкаДляГосударственныхНужд.ОКТМОПокупателя", 8, 11); - ПроверитьДлинуСтрокиЗначенияДерева( + ДеревоЭлектронногоДокументаБЭД.ПроверитьДлинуСтрокиЗначенияДерева( Данные, Ошибки, "ЗакупкаДляГосударственныхНужд.ОКТМОМестаПоставки", 8, 11); НомерСтроки = 1; @@ -1281,7 +1286,7 @@ СтрокаДереваДенежныеОбязательства = СтрокаДереваЗакупкаДляГосударственныхНужд.Строки.Найти("ДенежныеОбязательства"); Для Каждого Обязательство Из СтрокаДереваДенежныеОбязательства.Строки Цикл - ПроверитьДлинуСтрокиЗначенияДерева(Обязательство, Ошибки, + ДеревоЭлектронногоДокументаБЭД.ПроверитьДлинуСтрокиЗначенияДерева(Обязательство, Ошибки, "ЗакупкаДляГосударственныхНужд.ДенежныеОбязательства.НомерСтроки.КодБюджетнойКлассификации", 20, 20, НомерСтроки); НомерСтроки = НомерСтроки + 1; КонецЦикла; @@ -1296,7 +1301,8 @@ // Данные - ДеревоЗначений - дерево для проверки. // // Возвращаемое значение: -// Неопределено, Массив - ошибки, накопленные за время проверки. Элементами массива являются структуры. +// Неопределено, +// Массив - ошибки, накопленные за время проверки. Элементами массива являются структуры. // Состав структур см. в ОбщегоНазначенияБЭДКлиентСервер.НовыеПараметрыОшибки. // Функция ПроверитьЗаполнениеДанных_УПД_5_03_ИнформацияПродавца(Данные) @@ -1396,6 +1402,7 @@ СтавкаНДСИсчисляетсяАгентом = ВРег("НДС исчисляется налоговым агентом"); ДействуетСхемаУПД_5_03_04 = ДействуетСхемаУПД_5_03_04(); СтранаОбязательнаКЗаполнению = Не ДействуетСхемаУПД_5_03_04 И СодержитСчетФактуру И Не ЭтоАванс; + КешКлассификатора = Неопределено; Для Каждого Товар Из СтрокаТаблицаТоваров.Строки Цикл ЕдиницаИзмеренияКодСтрокаДерева = Неопределено; ЕдиницаИзмеренияКод = ДеревоЭлектронногоДокументаБЭД.ЗначениеРеквизитаВДереве(Товар, @@ -1407,8 +1414,11 @@ Если ЗначениеЗаполнено(ЕдиницаИзмеренияКод) Тогда ЕдиницаИзмеренияНаименование = ДеревоЭлектронногоДокументаБЭД.ЗначениеРеквизитаВДереве(Товар, Путь + ".НомерСтроки.ЕдиницаИзмеренияНаименование"); - ЕдиницаИзмеренияПоКлассификатору = ЕдиницаИзмеренияПоКлассификатору(ЕдиницаИзмеренияКод, - ЕдиницаИзмеренияНаименование); + ЕдиницаИзмеренияПоКлассификатору = ЕдиницаИзмеренияПоКлассификатору( + ЕдиницаИзмеренияКод, + ЕдиницаИзмеренияНаименование, + Истина, + КешКлассификатора); Если Не ЗначениеЗаполнено(ЕдиницаИзмеренияПоКлассификатору.Код) Тогда ТекстСообщения = СтрШаблон(НСтр( @@ -1483,9 +1493,9 @@ Если ТипЗнч(Реквизит) = Тип("Число") И Реквизит > 0 Тогда СтрокиТД = Товар.Строки.Найти(Путь + ".НомерСтроки.СведенияОПрослеживаемости", "ПолныйПуть", Истина); Для Каждого СтрокаТД Из СтрокиТД.Строки Цикл - ПроверитьДлинуСтрокиЗначенияДерева( + ДеревоЭлектронногоДокументаБЭД.ПроверитьДлинуСтрокиЗначенияДерева( СтрокаТД, Ошибки, Путь + ".НомерСтроки.СведенияОПрослеживаемости.НомерСтроки.НомерТовара", 25, 29); - ПроверитьДлинуСтрокиЗначенияДерева( + ДеревоЭлектронногоДокументаБЭД.ПроверитьДлинуСтрокиЗначенияДерева( СтрокаТД, Ошибки, Путь + ".НомерСтроки.СведенияОПрослеживаемости.НомерСтроки.ЕдиницаИзмеренияКод", 3, 4); ЕдиницаИзмеренияКодСтрокаДерева = Неопределено; ЕдиницаИзмеренияКод = ДеревоЭлектронногоДокументаБЭД.ЗначениеРеквизитаВДереве(СтрокаТД, Путь @@ -1494,8 +1504,11 @@ Если ЗначениеЗаполнено(ЕдиницаИзмеренияКод) Тогда ЕдиницаИзмеренияНаименование = ДеревоЭлектронногоДокументаБЭД.ЗначениеРеквизитаВДереве(СтрокаТД, Путь + ".НомерСтроки.СведенияОПрослеживаемости.НомерСтроки.ЕдиницаИзмеренияНаименование"); - ЕдиницаИзмеренияПоКлассификатору = ЕдиницаИзмеренияПоКлассификатору(ЕдиницаИзмеренияКод, - ЕдиницаИзмеренияНаименование, Ложь); + ЕдиницаИзмеренияПоКлассификатору = ЕдиницаИзмеренияПоКлассификатору( + ЕдиницаИзмеренияКод, + ЕдиницаИзмеренияНаименование, + Ложь, + КешКлассификатора); Если Не ЗначениеЗаполнено(ЕдиницаИзмеренияПоКлассификатору.Код) Тогда ТекстСообщения = СтрШаблон(НСтр( @@ -1508,6 +1521,33 @@ КонецЦикла; КонецЕсли; + // Если есть КИЗ и НомУпак, проверяем на заполненность + Реквизит = ДеревоЭлектронногоДокументаБЭД.ЗначениеРеквизитаВДереве(Товар, Путь + ".НомерСтроки.СведенияОМаркировке"); + Если ТипЗнч(Реквизит) = Тип("Число") И Реквизит > 0 Тогда + СтрокиТД = Товар.Строки.Найти(Путь + ".НомерСтроки.СведенияОМаркировке", "ПолныйПуть", Истина); + Для Каждого СтрокаТД Из СтрокиТД.Строки Цикл + + ИдентификаторПуть = Путь + ".НомерСтроки.СведенияОМаркировке.НомерСтроки.Идентификатор"; + + КонтрольныеЗнаки = СтрокаТД.Строки.Найти(ИдентификаторПуть + ".КонтрольныеЗнаки", "ПолныйПуть", Истина); + Если ЗначениеЗаполнено(КонтрольныеЗнаки.Значение) Тогда + Для Каждого СтрокаКИЗ Из КонтрольныеЗнаки.Строки Цикл + ДеревоЭлектронногоДокументаБЭД.ПроверитьЗаполненностьЗначенияДерева(СтрокаКИЗ, Ошибки, + ИдентификаторПуть + ".КонтрольныеЗнаки.НомерСтроки.КонтрольныйЗнак", НомерСтроки); + КонецЦикла; + КонецЕсли; + + ИдентификаторыУпаковок = СтрокаТД.Строки.Найти(ИдентификаторПуть + ".ИдентификаторыУпаковок", "ПолныйПуть", Истина); + Если ЗначениеЗаполнено(ИдентификаторыУпаковок.Значение) Тогда + Для Каждого СтрокаИУ Из ИдентификаторыУпаковок.Строки Цикл + ДеревоЭлектронногоДокументаБЭД.ПроверитьЗаполненностьЗначенияДерева(СтрокаИУ, Ошибки, + ИдентификаторПуть + ".ИдентификаторыУпаковок.НомерСтроки.ИдентификаторУпаковки", НомерСтроки); + КонецЦикла; + КонецЕсли; + + КонецЦикла; + КонецЕсли; + // ПрТовРаб - признак товара должен принадлежать определенному перечню ПризнакТовараСтрокаДерева = Неопределено; ПризнакТовара = ДеревоЭлектронногоДокументаБЭД.ЗначениеРеквизитаВДереве(Товар, @@ -1536,8 +1576,10 @@ КонецЕсли; КонецЕсли; - ПроверитьДлинуСтрокиЗначенияДерева(Товар, Ошибки, Путь + ".НомерСтроки.КодКаталога", 27, 27, НомерСтроки); - ПроверитьДлинуСтрокиЗначенияДерева(Товар, Ошибки, Путь + ".НомерСтроки.КодВидаТовара", 10, 10, НомерСтроки); + ДеревоЭлектронногоДокументаБЭД.ПроверитьДлинуСтрокиЗначенияДерева(Товар, Ошибки, + Путь + ".НомерСтроки.КодКаталога", 27, 27, НомерСтроки); + ДеревоЭлектронногоДокументаБЭД.ПроверитьДлинуСтрокиЗначенияДерева(Товар, Ошибки, + Путь + ".НомерСтроки.КодВидаТовара", 10, 10, НомерСтроки); НомерСтроки = НомерСтроки + 1; @@ -1606,13 +1648,13 @@ КонецЕсли; Путь = "СведенияОСчетеФактуре.ДополнительныеСведенияОбУчастниках."; - ПроверитьДлинуСтрокиЗначенияДерева( + ДеревоЭлектронногоДокументаБЭД.ПроверитьДлинуСтрокиЗначенияДерева( Данные, Ошибки, Путь + "ИдентификаторГосКонтракта", 20, 25); - ПроверитьДлинуСтрокиЗначенияДерева( + ДеревоЭлектронногоДокументаБЭД.ПроверитьДлинуСтрокиЗначенияДерева( Данные, Ошибки, Путь + "СведенияОГосКонтракте.НомерСчетаПродавца", 11, 11); - ПроверитьДлинуСтрокиЗначенияДерева( + ДеревоЭлектронногоДокументаБЭД.ПроверитьДлинуСтрокиЗначенияДерева( Данные, Ошибки, Путь + "СведенияОГосКонтракте.КодПоБюджетнойКлассификации", 20, 20); - ПроверитьДлинуСтрокиЗначенияДерева( + ДеревоЭлектронногоДокументаБЭД.ПроверитьДлинуСтрокиЗначенияДерева( Данные, Ошибки, Путь + "СведенияОГосКонтракте.КодЦели", 20, 20); Возврат Ошибки; @@ -1625,26 +1667,27 @@ // Данные - ДеревоЗначений - дерево для проверки. // // Возвращаемое значение: -// Неопределено, Массив - ошибки, накопленные за время проверки. Элементами массива являются структуры. +// Неопределено, +// Массив - ошибки, накопленные за время проверки. Элементами массива являются структуры. // Состав структур см. в ОбщегоНазначенияБЭДКлиентСервер.НовыеПараметрыОшибки. // Функция ПроверитьЗаполнениеДанных_УПД_5_03_ИнформацияПокупателя(Данные) Ошибки = Неопределено; - ПроверитьДлинуСтрокиЗначенияДерева( + ДеревоЭлектронногоДокументаБЭД.ПроверитьДлинуСтрокиЗначенияДерева( Данные, Ошибки, "ЗакупкаДляГосударственныхНужд.НомерЛицевогоСчетаПокупателя", 11, 11); - ПроверитьДлинуСтрокиЗначенияДерева( + ДеревоЭлектронногоДокументаБЭД.ПроверитьДлинуСтрокиЗначенияДерева( Данные, Ошибки, "ЗакупкаДляГосударственныхНужд.НомерРеестровойЗаписиПокупателя", 8, 8); - ПроверитьДлинуСтрокиЗначенияДерева( + ДеревоЭлектронногоДокументаБЭД.ПроверитьДлинуСтрокиЗначенияДерева( Данные, Ошибки, "ЗакупкаДляГосударственныхНужд.НомерБюджетногоОбязательстваПокупателя", 16, 19); - ПроверитьДлинуСтрокиЗначенияДерева( + ДеревоЭлектронногоДокументаБЭД.ПроверитьДлинуСтрокиЗначенияДерева( Данные, Ошибки, "ЗакупкаДляГосударственныхНужд.КазначействоПокупателяКод", 4, 4); - ПроверитьДлинуСтрокиЗначенияДерева( + ДеревоЭлектронногоДокументаБЭД.ПроверитьДлинуСтрокиЗначенияДерева( Данные, Ошибки, "ЗакупкаДляГосударственныхНужд.НомерДенежногоОбязательства", 22, 22); - ПроверитьДлинуСтрокиЗначенияДерева( + ДеревоЭлектронногоДокументаБЭД.ПроверитьДлинуСтрокиЗначенияДерева( Данные, Ошибки, "ЗакупкаДляГосударственныхНужд.ОКТМОПокупателя", 8, 11); - ПроверитьДлинуСтрокиЗначенияДерева( + ДеревоЭлектронногоДокументаБЭД.ПроверитьДлинуСтрокиЗначенияДерева( Данные, Ошибки, "ЗакупкаДляГосударственныхНужд.ОКТМОМестаПоставки", 8, 11); НомерСтроки = 1; @@ -1652,7 +1695,7 @@ СтрокаДереваДенежныеОбязательства = СтрокаДереваЗакупкаДляГосударственныхНужд.Строки.Найти("ДенежныеОбязательства"); Для Каждого Обязательство Из СтрокаДереваДенежныеОбязательства.Строки Цикл - ПроверитьДлинуСтрокиЗначенияДерева(Обязательство, Ошибки, + ДеревоЭлектронногоДокументаБЭД.ПроверитьДлинуСтрокиЗначенияДерева(Обязательство, Ошибки, "ЗакупкаДляГосударственныхНужд.ДенежныеОбязательства.НомерСтроки.КодБюджетнойКлассификации", 20, 20, НомерСтроки); НомерСтроки = НомерСтроки + 1; КонецЦикла; @@ -2452,34 +2495,6 @@ Возврат "ДИС"; КонецФункции -Процедура ПроверитьДлинуСтрокиЗначенияДерева(ДеревоДанных, Ошибки, ПолноеИмяРеквизита, - МинимальнаяДлина, МаксимальнаяДлина, НомерСтроки = Неопределено) - - РеквизитСтрокаДерева = Неопределено; - Реквизит = ДеревоЭлектронногоДокументаБЭД.ЗначениеРеквизитаВДереве(ДеревоДанных, - ПолноеИмяРеквизита, Ложь, РеквизитСтрокаДерева); - - Если ЗначениеЗаполнено(Реквизит) Тогда - - ДлинаСтроки = СтрДлина(Реквизит); - - Если ДлинаСтроки < МинимальнаяДлина Или МаксимальнаяДлина < ДлинаСтроки Тогда - ТекстОшибки = ""; - Если МинимальнаяДлина = МаксимальнаяДлина Тогда - ШаблонОшибки = НСтр("ru = 'длина значения должна быть равна %1, указано %2'"); - ТекстОшибки = СтрШаблон(ШаблонОшибки, МинимальнаяДлина, СокрЛП(Реквизит)); - Иначе - ШаблонОшибки = НСтр("ru = 'значение должно содержать от %1 до %2 символов, указано %3'"); - ТекстОшибки = СтрШаблон(ШаблонОшибки, МинимальнаяДлина, МаксимальнаяДлина, СокрЛП(Реквизит)); - КонецЕсли; - ДеревоЭлектронногоДокументаБЭД.ДобавитьОшибкуПроверкиДереваДанных(Ошибки, РеквизитСтрокаДерева, - ТекстОшибки,, НомерСтроки); - КонецЕсли; - - КонецЕсли; - -КонецПроцедуры - Процедура ПроверитьКодВалютыФНС(ДеревоДанных, Ошибки, ПолныйПуть = "ВалютаКод") НайденнаяСтрокаРеквизита = Неопределено; @@ -2691,14 +2706,14 @@ // БанковскиеРеквизиты - проверка длины переданных значений Если ДействуетСхемаУПД_5_03_04 Тогда - ПроверитьДлинуСтрокиЗначенияДерева( + ДеревоЭлектронногоДокументаБЭД.ПроверитьДлинуСтрокиЗначенияДерева( ДеревоДанных, Ошибки, ВидУчастника + ".БанковскиеРеквизиты.НомерСчета", 1, 34); - ПроверитьДлинуСтрокиЗначенияДерева( + ДеревоЭлектронногоДокументаБЭД.ПроверитьДлинуСтрокиЗначенияДерева( ДеревоДанных, Ошибки, ВидУчастника + ".БанковскиеРеквизиты.КорреспондентскийСчетБанка", 1, 34); Иначе - ПроверитьДлинуСтрокиЗначенияДерева( + ДеревоЭлектронногоДокументаБЭД.ПроверитьДлинуСтрокиЗначенияДерева( ДеревоДанных, Ошибки, ВидУчастника + ".БанковскиеРеквизиты.НомерСчета", 1, 20); - ПроверитьДлинуСтрокиЗначенияДерева( + ДеревоЭлектронногоДокументаБЭД.ПроверитьДлинуСтрокиЗначенияДерева( ДеревоДанных, Ошибки, ВидУчастника + ".БанковскиеРеквизиты.КорреспондентскийСчетБанка", 1, 20); КонецЕсли; @@ -2718,10 +2733,10 @@ ИначеЕсли АдресУчастника = "АдресРФ" Или АдресУчастника = "АдресГАР" Тогда Если ДействуетСхемаУПД_5_03_04 Тогда - ПроверитьДлинуСтрокиЗначенияДерева(ДеревоДанных, Ошибки, + ДеревоЭлектронногоДокументаБЭД.ПроверитьДлинуСтрокиЗначенияДерева(ДеревоДанных, Ошибки, ВидУчастника + ".Адрес.ТипАдреса." + АдресУчастника + ".НаименованиеРегиона", 1, 51); Иначе - ПроверитьДлинуСтрокиЗначенияДерева(ДеревоДанных, Ошибки, + ДеревоЭлектронногоДокументаБЭД.ПроверитьДлинуСтрокиЗначенияДерева(ДеревоДанных, Ошибки, ВидУчастника + ".Адрес.ТипАдреса." + АдресУчастника + ".НаименованиеРегиона", 1, 50); КонецЕсли; @@ -3045,7 +3060,8 @@ КонецПроцедуры Процедура ПроверитьНаименованиеЕдиницыИзмеренияФНС(ДанныеТовара, Ошибки, НомерСтроки, - ЕдиницаИзмеренияКод, ИмяЕдиницыИзмерения = "СведенияОТоварах.НомерСтроки.ЕдиницаИзмеренияНаименование") + ЕдиницаИзмеренияКод, ИмяЕдиницыИзмерения = "СведенияОТоварах.НомерСтроки.ЕдиницаИзмеренияНаименование", + КешКлассификатора = Неопределено) Если Не ЗначениеЗаполнено(ЕдиницаИзмеренияКод) Тогда Возврат; @@ -3064,7 +3080,7 @@ КонецЕсли; Иначе ЕдиницаИзмеренияПоКлассификатору = ЕдиницаИзмеренияПоКлассификатору(ЕдиницаИзмеренияКод, - ЕдиницаИзмеренияНаименование, Ложь); + ЕдиницаИзмеренияНаименование, Ложь, КешКлассификатора); Если ЗначениеЗаполнено(ЕдиницаИзмеренияПоКлассификатору.Наименование) И ЕдиницаИзмеренияПоКлассификатору.Наименование <> ЕдиницаИзмеренияНаименование Тогда ТекстСообщения = СтрШаблон(НСтр( @@ -7897,6 +7913,7 @@ ДействуетСхемаУПД_5_03_04 = ДействуетСхемаУПД_5_03_04(); СтраныПроисхожденияОбязательныКЗаполнению = Не ДействуетСхемаУПД_5_03_04 И СодержитСчетФактуру И Не ЭтоАванс; СведенияОбОтгруженныхПозициях = ДеревоДанных.Строки.Найти(Путь + "СведенияОбОтгруженныхПозициях", "ПолныйПуть", Истина); + КешКлассификатора = Неопределено; Если ЗначениеЗаполнено(СведенияОбОтгруженныхПозициях.Значение) Тогда СвойствоСведТов = ТаблСчФакт.Свойства().Получить("СведТов"); ПутьОтгруженнойПозиции = Путь + "СведенияОбОтгруженныхПозициях.НомерСтроки."; @@ -7917,7 +7934,11 @@ Если Не ЗначениеЗаполнено(ЕдиницаИзмеренияКод) И ЗначениеЗаполнено(ЕдиницаИзмеренияНаименование) Тогда ЕдиницаИзмеренияКод = "0000"; КонецЕсли; - ЕдиницаИзмеренияПоКлассификатору = ЕдиницаИзмеренияПоКлассификатору(ЕдиницаИзмеренияКод, ЕдиницаИзмеренияНаименование); + ЕдиницаИзмеренияПоКлассификатору = ЕдиницаИзмеренияПоКлассификатору( + ЕдиницаИзмеренияКод, + ЕдиницаИзмеренияНаименование, + Истина, + КешКлассификатора); Если Не ЗначениеЗаполнено(ЕдиницаИзмеренияПоКлассификатору.Код) И ЗначениеЗаполнено(ЕдиницаИзмеренияКод) Тогда ТекстСообщения = СтрШаблон(НСтр("ru='Для единицы измерения ""%1"" указан код не соответствующий классификатору (ОКЕИ)'"), ЕдиницаИзмеренияНаименование); @@ -8108,7 +8129,11 @@ ТекущаяПрослеживаемость, ПрослеживаемостьПуть + "ЕдиницаИзмеренияКод"); ЕдиницаИзмеренияНаименование = ДеревоЭлектронногоДокументаБЭД.ЗначениеРеквизитаВДереве( ТекущаяПрослеживаемость, ПрослеживаемостьПуть + "ЕдиницаИзмеренияНаименование"); - ЕдиницаИзмеренияПоКлассификатору = ЕдиницаИзмеренияПоКлассификатору(ЕдиницаИзмеренияКод, ЕдиницаИзмеренияНаименование, Ложь); + ЕдиницаИзмеренияПоКлассификатору = ЕдиницаИзмеренияПоКлассификатору( + ЕдиницаИзмеренияКод, + ЕдиницаИзмеренияНаименование, + Ложь, + КешКлассификатора); Если Не ЗначениеЗаполнено(ЕдиницаИзмеренияПоКлассификатору.Код) И ЗначениеЗаполнено(ЕдиницаИзмеренияКод) Тогда ТекстСообщения = СтрШаблон(НСтр("ru='Для единицы измерения ""%1"" указан код не соответствующий классификатору (ОКЕИ)'"), ЕдиницаИзмеренияНаименование); @@ -35570,10 +35595,16 @@ #Область КлассификаторЕдиницИзмерения -Функция ЕдиницаИзмеренияПоКлассификатору(Знач Код, Знач ПрикладнойВариант, РазрешенКодСвоейЕдиницы = Истина) +Функция ЕдиницаИзмеренияПоКлассификатору(Знач Код, Знач ПрикладнойВариант, РазрешенКодСвоейЕдиницы = Истина, + КешКлассификатора = Неопределено) КодСвоейЕдиницы = "0000"; ЕдиницаИзмерения = Новый Структура("Код, Наименование", Код, ПрикладнойВариант); - Классификатор = ФорматыЭДО.КлассификаторЕдиницИзмерения(); + Если КешКлассификатора <> Неопределено Тогда + Классификатор = КешКлассификатора; + Иначе + Классификатор = ФорматыЭДО.КлассификаторЕдиницИзмерения(); + КешКлассификатора = Классификатор; + КонецЕсли; Если РазрешенКодСвоейЕдиницы И Код = КодСвоейЕдиницы Тогда Возврат ЕдиницаИзмерения; diff --git a/Конфигурация/CommonModules/ФормыДокументовДеньги/Ext/Module.bsl b/Конфигурация/CommonModules/ФормыДокументовДеньги/Ext/Module.bsl index 08fe2773d..70f5b4641 100644 --- a/Конфигурация/CommonModules/ФормыДокументовДеньги/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ФормыДокументовДеньги/Ext/Module.bsl @@ -858,12 +858,10 @@ ИЛИ ВидОперации = Перечисления.ВидыОперацийРасходСоСчета.Поставщику ИЛИ ВидОперации = Перечисления.ВидыОперацийРасходСоСчета.НашейОрганизации ИЛИ ВидОперации = Перечисления.ВидыОперацийРасходСоСчета.Зарплата - ИЛИ ВидОперации = Перечисления.ВидыОперацийРасходСоСчета.ЗарплатаСотруднику ИЛИ ВидОперации = Перечисления.ВидыОперацийРасходИзКассы.Покупателю ИЛИ ВидОперации = Перечисления.ВидыОперацийРасходИзКассы.Поставщику ИЛИ ВидОперации = Перечисления.ВидыОперацийРасходИзКассы.НашейОрганизации ИЛИ ВидОперации = Перечисления.ВидыОперацийРасходИзКассы.Зарплата - ИЛИ ВидОперации = Перечисления.ВидыОперацийРасходИзКассы.ЗарплатаСотруднику ИЛИ ВидОперации = Перечисления.ВидыОперацийПоступлениеНаСчет.ОтПокупателя ИЛИ ВидОперации = Перечисления.ВидыОперацийПоступлениеНаСчет.ОтПоставщика ИЛИ ВидОперации = Перечисления.ВидыОперацийПоступлениеНаСчет.ОтНашейОрганизации @@ -876,7 +874,6 @@ ИЛИ ВидОперации = Перечисления.ВидыОперацийПлатежноеПоручение.ПеречислениеНалога ИЛИ ВидОперации = Перечисления.ВидыОперацийПлатежноеПоручение.Оплата ИЛИ ВидОперации = Перечисления.ВидыОперацийПлатежноеПоручение.Зарплата - ИЛИ ВидОперации = Перечисления.ВидыОперацийПлатежноеПоручение.ЗарплатаСотруднику ИЛИ ВидОперации = Перечисления.ВидыОперацийПлатежноеПоручение.РасчетыПоКредитам ИЛИ ВидОперации = Перечисления.ВидыОперацийРасходСоСчета.ПрочиеРасчеты ИЛИ ВидОперации = Перечисления.ВидыОперацийРасходСоСчета.РасчетыПоКредитам @@ -907,6 +904,13 @@ ИЛИ ВидОперации = Перечисления.ВидыОперацийЭквайринга.ВозвратОплатыПокупателю Тогда Элементы.ГруппаРасшифровкаПлатежа.Видимость = Истина; + + ИначеЕсли ВидОперации = Перечисления.ВидыОперацийРасходСоСчета.ЗарплатаСотруднику + ИЛИ ВидОперации = Перечисления.ВидыОперацийРасходИзКассы.ЗарплатаСотруднику + ИЛИ ВидОперации = Перечисления.ВидыОперацийПлатежноеПоручение.ЗарплатаСотруднику Тогда + + Элементы.ГруппаРасшифровкаПлатежаОбщая.Видимость = ПолучитьФункциональнуюОпцию("ПлатежныйКалендарь") + И НЕ Форма.ПоказыватьЭлементыБЗКБ; ИначеЕсли ПолучитьФункциональнуюОпцию("ПлатежныйКалендарь") ИЛИ Объект.ПоложениеСтатьи = Перечисления.ПоложениеРеквизитаНаФорме.ВТабличнойЧасти @@ -914,7 +918,7 @@ ИЛИ Объект.ПоложениеПодразделения = Перечисления.ПоложениеРеквизитаНаФорме.ВТабличнойЧасти Тогда Элементы.ГруппаРасшифровкаПлатежаОбщая.Видимость = Истина; - + Иначе Элементы.ГруппаРасшифровкаПлатежаОбщая.Видимость = Ложь; КонецЕсли; diff --git a/Конфигурация/CommonModules/ЦенообразованиеСервер/Ext/Module.bsl b/Конфигурация/CommonModules/ЦенообразованиеСервер/Ext/Module.bsl index d3ee9c5de..18d4bab6a 100644 --- a/Конфигурация/CommonModules/ЦенообразованиеСервер/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ЦенообразованиеСервер/Ext/Module.bsl @@ -5682,7 +5682,7 @@ Запрос = Новый Запрос; Запрос.Текст = - "ВЫБРАТЬ + "ВЫБРАТЬ РАЗРЕШЕННЫЕ | ВидыЦенПравилаОкругленияЦены.Ссылка КАК ВидЦен, | КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ВидыЦенПравилаОкругленияЦены.НомерСтроки) КАК НомерСтроки |ПОМЕСТИТЬ ВТ_ВидыЦенСПорогами @@ -5694,7 +5694,7 @@ |; | |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ ПЕРВЫЕ 1 + |ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1 | ВидыЦен.Ссылка КАК Ссылка |ИЗ | ВТ_ВидыЦенСПорогами КАК ВТ_ВидыЦенСПорогами diff --git a/Конфигурация/CommonModules/ЦифровойРубль/Ext/Module.bsl b/Конфигурация/CommonModules/ЦифровойРубль/Ext/Module.bsl index 15f8c75ff..23ee79c72 100644 --- a/Конфигурация/CommonModules/ЦифровойРубль/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ЦифровойРубль/Ext/Module.bsl @@ -1,72 +1,28 @@ #Область ПрограммныйИнтерфейс +// Возвращает данные истории операций по счету цифрового рубля +// +// Параметры: +// ДвоичныеДанныеФайла - Двоичные данные - данные файла с историей операций по счет ЦР +// РеквизитыОрганизации - Структура - реквизиты организации, содержит поля: +// * ИНН - Строка - ИНН организации +// * КПП - Строка - КПП организации +// * Наименование - Строка - наименование организации +// * НомерСчета - Строка - номер счета цифрового рубля (20 знаков) +// * ИдентификаторЦифровогоСчета - Строка - идентификатор счета цифрового рубля (до 70 знаков) +// * Организация - СправочникСсылка.Организации - организация, по которой разбирается история операций +// +// Возвращаемое значение: +// Структура - разобранные данные истории операций по счету ЦР, содержит значения: +// * ДанныеИзБанка - Структура - см. ОбменСБанкомВФормате1С.НовыйДанныеИзБанка() +// * Протокол - ТаблицаЗначений - см. ОбменСБанкомВФормате1С.НовыйПротоколЧтенияФайла() +// Функция РазобратьВыпискуБанкаПоЦифровомуРублю(ДвоичныеДанныеФайла, РеквизитыОрганизации) Экспорт // По схеме cbdc.011.001.04_ReturnOrganisationWalletInfo_2026.07.xsd - ДанныеОрганизации = Новый Структура("ИНН, Наименование, НаименованиеМеждународное"); - ДанныеБанка = Новый Структура("БИК, SWIFT, Наименование, НаименованиеМеждународное"); - - ДанныеОрганизации.ИНН = РеквизитыОрганизации.ИННОрганизации; - ДанныеОрганизации.Наименование = РеквизитыОрганизации.Наименование; - - ДанныеБанка.БИК = БИКПлатформыЦифровогоРубля(); - ДанныеБанка.Наименование = НаименованиеПлатформыЦифровогоРубля(); - - ОбъектXML = Новый ЧтениеXML; - - Попытка - ОбъектXML.ОткрытьПоток(ДвоичныеДанныеФайла.ОткрытьПотокДляЧтения()); - Statement = ФабрикаXDTO.ПрочитатьXML(ОбъектXML); - Исключение - РазборВыпискиВызыватьИсключение(); - КонецПопытки; - - ОбъектXML.Закрыть(); - - RtrWlltInf = ЗначениеСвойстваXDTO(Statement, "RtrWlltInf"); - Если RtrWlltInf = Неопределено Или ЗначениеСвойстваXDTO(RtrWlltInf, "Rpt") = Неопределено Тогда - РазборВыпискиВызыватьИсключение(); - КонецЕсли; - - // Детальные отчеты по Кошельку - Если ТипЗнч(RtrWlltInf.Rpt) = Тип("ОбъектXDTO") Тогда // Report - Выписки = Новый Массив; - Выписки.Добавить(RtrWlltInf.Rpt); - Иначе - Выписки = RtrWlltInf.Rpt; - КонецЕсли; - - ИдентификаторДокумента = ЗначениеСвойстваXDTO(RtrWlltInf, "MsgHdr.MsgId"); - ДатаФормирования = ЗначениеСвойстваXDTO(RtrWlltInf, "MsgHdr.CreDt"); - - ТаблицаВыписок = НовыйТаблицаВыписок(); - - Для Каждого Выписка Из Выписки Цикл - СтрокаВыписки = ТаблицаВыписок.Добавить(); - СтрокаВыписки.Организация = ДанныеОрганизации; - СтрокаВыписки.Банк = ДанныеБанка; - ЗаполнитьШапку(СтрокаВыписки, Выписка, ДатаФормирования, ИдентификаторДокумента, РеквизитыОрганизации); - - // Информация по операциям - Операции = ЗначениеСвойстваXDTO(Выписка, "OprtnsInf"); // OperationsInformation - Если Операции = Неопределено Тогда - Продолжить; - КонецЕсли; - - ТаблицаОпераций = НовыйТаблицаОпераций(); - Если ТипЗнч(Операции) = Тип("ОбъектXDTO") Тогда - ПрочитатьОперациюВыписки(СтрокаВыписки, Операции, ТаблицаОпераций, РеквизитыОрганизации); - Иначе - Для Каждого Операция Из Операции Цикл - ПрочитатьОперациюВыписки(СтрокаВыписки, Операция, ТаблицаОпераций, РеквизитыОрганизации); - КонецЦикла; - КонецЕсли; - - СтрокаВыписки.Операции = ТаблицаОпераций; - КонецЦикла; - - ПрочитанныеДанныеСервиса = ДанныеВыписокБанкаВКоллекцию(ТаблицаВыписок, РеквизитыОрганизации); + ДеревоДанных = ОбменСБанкамиЦифровойРубль.ДанныеИсторииОпераций(ДвоичныеДанныеФайла, РеквизитыОрганизации); + ПрочитанныеДанныеСервиса = ДеревоВыписокБанкаВКоллекцию(ДеревоДанных, РеквизитыОрганизации); Возврат ПрочитанныеДанныеСервиса; @@ -87,167 +43,9 @@ #Область СлужебныйПрограммныйИнтерфейс -Функция ДанныеВыписокБанкаВКоллекцию(ТаблицаВыписок, РеквизитыОрганизации) Экспорт - - ДанныеВыписки = ОбменСБанкомВФормате1С.НовыйДанныеИзБанка(); - Протокол = ОбменСБанкомВФормате1С.НовыйПротоколЧтенияФайла(); - - Для Каждого СтрокаВыписки Из ТаблицаВыписок Цикл - Индекс = 0; - - ДанныеВыписки.Заголовок.ДатаСоздания = СтрокаВыписки.ДатаФормирования; - ДанныеВыписки.Заголовок.Отправитель = НаименованиеПлатформыЦифровогоРубля(); - ДанныеВыписки.Заголовок.Кодировка = "Windows"; - - Если СтрокаВыписки.НомерСчета <> РеквизитыОрганизации.НомерСчетаЦР Тогда - ВызватьИсключение СтрШаблон(НСтр("ru = 'Неизвестный счет ЦР в выписке %1'"), СтрокаВыписки.НомерСчета); - КонецЕсли; - - Если ЗначениеЗаполнено(ДанныеВыписки.Условия.ДатаНачала) Тогда - ДанныеВыписки.Условия.ДатаНачала = Мин(СтрокаВыписки.НачалоПериода, ДанныеВыписки.Условия.ДатаКонца); - Иначе - ДанныеВыписки.Условия.ДатаНачала = СтрокаВыписки.НачалоПериода; - КонецЕсли; - - ДанныеВыписки.Условия.ДатаКонца = Макс(СтрокаВыписки.КонецПериода, ДанныеВыписки.Условия.ДатаКонца); - ДанныеВыписки.Условия.РасчСчет.Добавить(СтрокаВыписки.НомерСчета); - - Если ЗначениеЗаполнено(СтрокаВыписки.НачальныйОстаток) Или ЗначениеЗаполнено(СтрокаВыписки.КонечныйОстаток) - Или ЗначениеЗаполнено(СтрокаВыписки.ОборотВходящихПлатежей) - Или ЗначениеЗаполнено(СтрокаВыписки.ОборотИсходящихПлатежей) Тогда - СтрокаОстатка = ДанныеВыписки.Остатки.Добавить(); - СтрокаОстатка.РасчСчет = СтрокаВыписки.НомерСчета; - СтрокаОстатка.ДатаНачала = СтрокаВыписки.НачалоПериода; - СтрокаОстатка.ДатаКонца = СтрокаВыписки.КонецПериода; - - // Остатки - СтрокаОстатка.НачальныйОстаток = Формат(СтрокаВыписки.НачальныйОстаток, "ЧРД=.; ЧГ="); - СтрокаОстатка.КонечныйОстаток = Формат(СтрокаВыписки.КонечныйОстаток, "ЧРД=.; ЧГ="); - - // Обороты - СтрокаОстатка.ВсегоПоступило = Формат(СтрокаВыписки.ОборотВходящихПлатежей, "ЧРД=.; ЧГ="); - СтрокаОстатка.ВсегоСписано = Формат(СтрокаВыписки.ОборотИсходящихПлатежей, "ЧРД=.; ЧГ="); - КонецЕсли; - - Для Каждого НовСтрока Из СтрокаВыписки.Операции Цикл - ОперацияВыписки = ДанныеВыписки.Документы.Добавить(); - - Если НовСтрока.НаправлениеПлатежа = "2" Тогда - Сторона = "Плательщик"; - ПротивоположнаяСтрона = "Получатель"; - - ОперацияВыписки.ДатаПоступило = НовСтрока.ДатаПоступило; - Иначе - Сторона = "Получатель"; - ПротивоположнаяСтрона = "Плательщик"; - - ОперацияВыписки.ДатаСписано = НовСтрока.ДатаСписано; - КонецЕсли; - - ОперацияВыписки.Номер = НовСтрока.НомерДокумента; - ОперацияВыписки.Дата = НовСтрока.ДатаДокумента; - ОперацияВыписки.Сумма = НовСтрока.СуммаДокумента; - ОперацияВыписки.Код = НовСтрока.УникальныйИдентификаторПлатежа; - ОперацияВыписки.ВидОплаты = НовСтрока.ВидОперации; - ОперацияВыписки.Очередность = НовСтрока.Очередность; - - РеквизитыУчастников = ОбменСБанкомВФормате1С.ЭлементыРеквизитовУчастника(); - Для Каждого РеквизитУчастника Из РеквизитыУчастников Цикл - ОперацияВыписки.ПлательщикРеквизиты.Вставить(РеквизитУчастника, ""); - ОперацияВыписки.ПолучательРеквизиты.Вставить(РеквизитУчастника, ""); - КонецЦикла; - - Если НовСтрока.ВидОперацииЦР = БанковскиеПравила.ОперацияDCBU() // Пополнение ЦР. Перевод между счетами (банковский счет -> ЦР) - Или НовСтрока.ВидОперацииЦР = БанковскиеПравила.ОперацияDCSE() // Вывод средств. Перевод между счетами (банковский счет <- ЦР) - Или НовСтрока.ВидОперацииЦР = БанковскиеПравила.ОперацияB2G() // Перевод Клиентом ЮЛ в бюджет - Или НовСтрока.ВидОперацииЦР = БанковскиеПравила.ОперацияB2B() - Или НовСтрока.ВидОперацииЦР = БанковскиеПравила.ОперацияC2B() - Или НовСтрока.ВидОперацииЦР = БанковскиеПравила.ОперацияB2C() Тогда - - ОперацияВыписки.ВидОперацииЦР = НовСтрока.ВидОперацииЦР; - ОперацияВыписки.НазначениеПлатежа = НовСтрока.НазначениеПлатежа; - - Иначе // пока не обслуживаем - - ОперацияВыписки.ВидОперацииЦР = ВРег(НовСтрока.ВидОперацииЦР); - Если НовСтрока.ВидОперацииЦР = БанковскиеПравила.ОперацияDCRF() Тогда - ОперацияВыписки.НазначениеПлатежа = НСтр("ru = '#Возврат цифровой валюты при неуспешной операции#'"); - ИначеЕсли НовСтрока.ВидОперацииЦР = БанковскиеПравила.ОперацияOOPN() Тогда - ОперацияВыписки.НазначениеПлатежа = НСтр("ru = '#Другие операции#'"); - ИначеЕсли НовСтрока.ВидОперацииЦР = БанковскиеПравила.ОперацияOPTR() Тогда - ОперацияВыписки.НазначениеПлатежа = НовСтрока.НазначениеПлатежа; - КонецЕсли; - - ОписаниеПроблемы = СтрШаблон( - НСтр("ru = 'Неподдерживаемый вид %1 в операции %2'"), НовСтрока.ВидОперацииЦР, НовСтрока.НомерДокумента); - Запись = Протокол.Добавить(); - Запись.НомерСтроки = Индекс; - Запись.КодСобытия = ОписаниеПроблемы; - - КонецЕсли; - - ОперацияВыписки.ПлательщикСчет = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(НовСтрока.Плательщик, "РасчСчет"); - ОперацияВыписки.ПолучательСчет = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(НовСтрока.Получатель, "РасчСчет"); - - ОперацияВыписки.ПлательщикИНН = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(НовСтрока.Плательщик, "ИНН", ""); - ОперацияВыписки.ПолучательИНН = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(НовСтрока.Получатель, "ИНН", ""); - - Если НовСтрока.Плательщик.Свойство("Банк") Тогда - ЗаполнитьЗначенияСвойств(ОперацияВыписки.ПлательщикРеквизиты, НовСтрока.Плательщик,, "Банк"); - БанкПлательщика = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(НовСтрока.Плательщик, "Банк"); - Если ЗначениеЗаполнено(БанкПлательщика) Тогда - ОперацияВыписки.ПлательщикРеквизиты.БИК = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры( - БанкПлательщика, "БИК", ""); - ОперацияВыписки.ПлательщикРеквизиты.Банк = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры( - БанкПлательщика, "Наименование", ""); - ОперацияВыписки.ПлательщикРеквизиты.КорСчет = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры( - БанкПлательщика, "КоррСчет", ""); - КонецЕсли; - Иначе - ЗаполнитьЗначенияСвойств(ОперацияВыписки.ПлательщикРеквизиты, НовСтрока.Плательщик); - КонецЕсли; - - Если НовСтрока.Получатель.Свойство("Банк") Тогда - ЗаполнитьЗначенияСвойств(ОперацияВыписки.ПолучательРеквизиты, НовСтрока.Получатель,, "Банк"); - БанкПолучателя = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(НовСтрока.Получатель, "Банк"); - Если ЗначениеЗаполнено(БанкПолучателя) Тогда - ОперацияВыписки.ПолучательРеквизиты.БИК = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры( - БанкПолучателя, "БИК", ""); - ОперацияВыписки.ПолучательРеквизиты.Банк = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры( - БанкПолучателя, "Наименование", ""); - ОперацияВыписки.ПолучательРеквизиты.КорСчет = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры( - БанкПолучателя, "КоррСчет", ""); - КонецЕсли; - Иначе - ЗаполнитьЗначенияСвойств(ОперацияВыписки.ПолучательРеквизиты, НовСтрока.Получатель); - КонецЕсли; - - ОбменСБанкомВФормате1С.ИсправитьОшибкиУчастникаСчет(ОперацияВыписки, "Плательщик"); - ОбменСБанкомВФормате1С.ИсправитьОшибкиУчастникаСчет(ОперацияВыписки, "Получатель"); - Для Каждого Колонка Из ДанныеВыписки.Документы.Колонки Цикл - ОбменСБанкомВФормате1С.ОчиститьТолькоНулиВСтроке(ОперацияВыписки[Колонка.Имя]); - КонецЦикла; - - ОперацияВыписки.Идентификатор = Формат(Индекс, "ЧН=0; ЧГ=;"); - Индекс = Индекс + 1; - КонецЦикла; - - КонецЦикла; - - ПрочитанныеДанныеСервиса = Новый Структура; - ПрочитанныеДанныеСервиса.Вставить("ДанныеИзБанка", ДанныеВыписки); - ПрочитанныеДанныеСервиса.Вставить("Протокол", Протокол); - - Возврат ПрочитанныеДанныеСервиса; - -КонецФункции - -Функция ТаблицаВыписокБанкаВКоллекцию(ТаблицаВыписок, РеквизитыОрганизации) Экспорт +Функция ДеревоВыписокБанкаВКоллекцию(ДеревоДанных, РеквизитыОрганизации) Экспорт МассивСчетов = Новый Массив; - ДеревоДанных = ДеревоЭлектронногоДокументаБЭД.ДеревоЭлектронногоДокумента("ОбменСБанками.ВыпискаБанка"); - - ЭлектронноеВзаимодействие.ЗагрузитьТаблицуВДерево(ДеревоДанных, ТаблицаВыписок, "Выписки"); ПрочитанныеДанныеСервиса = ЭлектронноеВзаимодействиеБПВызовСервера.ПрочитанныеДанныеВыпискиИзДерева( ДеревоДанных, РеквизитыОрганизации.Организация, МассивСчетов); @@ -273,7 +71,7 @@ Функция БИКПлатформыЦифровогоРубля() Экспорт - БИК = "044595002"; + БИК = ОбменСБанкамиЦифровойРубль.БИКПлатформыЦифровогоРубля(); Возврат БИК; @@ -281,7 +79,7 @@ Функция НомерСчетаПлатформыЦифровогоРубля() Экспорт - Счет = "30000810945950000002"; + Счет = ОбменСБанкамиЦифровойРубль.НомерСчетаПлатформыЦифровогоРубля(); Возврат Счет; @@ -289,564 +87,108 @@ Функция НаименованиеПлатформыЦифровогоРубля() Экспорт - Наименование = НСтр("ru = 'Оператор платформы цифрового рубля'"); + Наименование = ОбменСБанкамиЦифровойРубль.НаименованиеПлатформыЦифровогоРубля(); Возврат Наименование; КонецФункции +Функция РеквизитыОператораПлатформыЦифровогоРубля() Экспорт + + Реквизиты = ОбменСБанкамиЦифровойРубль.РеквизитыОператораПлатформыЦифровогоРубля(); + + Возврат Реквизиты; + +КонецФункции + +#Область ВидыОперацийЦР + +// Перевод цифровой валюты от Клиента - ЮЛ Клиенту - ЮЛ +// +Функция ОперацияB2B() Экспорт + + Возврат ОбменСБанкамиЦифровойРубль.ОперацияB2B(); // BTOB + +КонецФункции + +// Перевод цифровой валюты от Клиента - ФЛ Клиенту - ЮЛ +// +Функция ОперацияC2B() Экспорт + + Возврат ОбменСБанкамиЦифровойРубль.ОперацияC2B(); // CTOB + +КонецФункции + +// Возврат цифровой валюты от Клиента - ЮЛ Клиенту - ФЛ +// +Функция ОперацияB2C() Экспорт + + Возврат ОбменСБанкамиЦифровойРубль.ОперацияB2C(); // BTOC + +КонецФункции + +//Обмен Клиентом ЦР на безналичные средства +// +Функция ОперацияDCSE() Экспорт + + Возврат ОбменСБанкамиЦифровойРубль.ОперацияDCSE(); + +КонецФункции + +// Обмен Клиентом безналичных средств на ЦР +// +Функция ОперацияDCBU() Экспорт + + Возврат ОбменСБанкамиЦифровойРубль.ОперацияDCBU(); + +КонецФункции + +// Возврат цифровой валюты +// +Функция ОперацияDCRF() Экспорт + + Возврат ОбменСБанкамиЦифровойРубль.ОперацияDCRF(); + +КонецФункции + +// Перевод Клиентом ЮЛ в бюджет +// +Функция ОперацияB2G() Экспорт + + Возврат ОбменСБанкамиЦифровойРубль.ОперацияB2G(); // BTOG + +КонецФункции + +// Выплата ЦР из бюджета Клиенту ЮЛ +// +Функция ОперацияG2B() Экспорт + + Возврат ОбменСБанкамиЦифровойРубль.ОперацияG2B(); // GTOB + +КонецФункции + +// Выплата Оператором по обращению СЛ или Клиента +// +Функция ОперацияOPTR() Экспорт + + Возврат ОбменСБанкамиЦифровойРубль.ОперацияOPTR(); + +КонецФункции + +// Другие операции +// +Функция ОперацияOOPN() Экспорт + + Возврат ОбменСБанкамиЦифровойРубль.ОперацияOOPN(); + +КонецФункции + +#КонецОбласти + #КонецОбласти #Область СлужебныйПроцедурыИФункции -#Область ИсторияОперацийСлужебная - -Процедура ЗаполнитьШапку(СтрокаВыписки, Выписка, ДатаФормирования, ИдДокумента, РеквизитыОрганизации) - - СтрокаВыписки.ДатаФормирования = ДатаФормирования; - СтрокаВыписки.ИдентификаторДокумента = ИдДокумента; - - СтрокаВыписки.НомерСчета = ЗначениеСвойстваXDTO(Выписка, "WlltPtyInf.Id"); - СтрокаВыписки.НомерСчетаЦифровой = РеквизитыОрганизации.НомерСчета; - Если СтрокаВыписки.НомерСчета <> РеквизитыОрганизации.НомерСчетаЦР Тогда - ВызватьИсключение СтрШаблон(НСтр("ru = 'Неизвестный счет ЦР в выписке %1'"), СтрокаВыписки.НомерСчета); - КонецЕсли; - - DCAcctNb = ЗначениеСвойстваXDTO(Выписка, "WlltPtyInf.DCAcctNb"); // DCAccountNumber - Если DCAcctNb <> Неопределено Тогда - СтрокаВыписки.НомерСчетаЦифровой = DCAcctNb.Id; // 20-значный - КонецЕсли; - - Prd = ЗначениеСвойстваXDTO(Выписка, "Prd"); - Если Prd <> Неопределено Тогда - СтрокаВыписки.НачалоПериода = XMLЗначение(Тип("Дата"), ЗначениеСвойстваXDTO(Prd, "FrDtTm", ТекущаяДатаСеанса())); - СтрокаВыписки.КонецПериода = XMLЗначение(Тип("Дата"), ЗначениеСвойстваXDTO(Prd, "ToDtTm", ТекущаяДатаСеанса())); - КонецЕсли; - - // Остатки - OpngBal = ЗначениеСвойстваXDTO(Выписка, "OpngBal"); - Если OpngBal <> Неопределено Тогда - НачальныйОстатокПоследовательность = ЗначениеСвойстваXDTO(OpngBal, "TtlAmt"); - Если ТипЗнч(НачальныйОстатокПоследовательность) = Тип("ОбъектXDTO") Тогда - НачальныйОстатокСтрокой = ""; - НачальныйОстатокСтрокойПоследовательность = НачальныйОстатокПоследовательность.Последовательность(); - Если НачальныйОстатокСтрокойПоследовательность.Количество() > 0 Тогда - НачальныйОстатокСтрокой = НачальныйОстатокСтрокойПоследовательность.ПолучитьТекст(0); - КонецЕсли; - - СтрокаВыписки.НачальныйОстаток = XMLЗначение(Тип("Число"), НачальныйОстатокСтрокой); - КонецЕсли; - КонецЕсли; - - OutgngBal = ЗначениеСвойстваXDTO(Выписка, "OutgngBal"); - Если OutgngBal <> Неопределено Тогда - КонечныйОстатокПоследовательность = ЗначениеСвойстваXDTO(OutgngBal, "TtlAmt"); - Если ТипЗнч(КонечныйОстатокПоследовательность) = Тип("ОбъектXDTO") Тогда - КонечныйОстатокСтрокой = ""; - КонечныйОстатокСтрокойПоследовательность = КонечныйОстатокПоследовательность.Последовательность(); - Если КонечныйОстатокСтрокойПоследовательность.Количество() > 0 Тогда - КонечныйОстатокСтрокой = КонечныйОстатокСтрокойПоследовательность.ПолучитьТекст(0); - КонецЕсли; - - СтрокаВыписки.КонечныйОстаток = XMLЗначение(Тип("Число"), КонечныйОстатокСтрокой); - КонецЕсли; - КонецЕсли; - - // Обороты - TtlAmtCdt = ЗначениеСвойстваXDTO(Выписка, "TtlAmtCdt"); - Если TtlAmtCdt <> Неопределено Тогда - ОборотВходящихПлатежейПоследовательность = ЗначениеСвойстваXDTO(TtlAmtCdt, "TtlAmt"); - Если ТипЗнч(ОборотВходящихПлатежейПоследовательность) = Тип("ОбъектXDTO") Тогда - ОборотВходящихПлатежейСтрокой = ""; - ОборотВходящихПлатежейСтрокойПоследовательность = ОборотВходящихПлатежейПоследовательность.Последовательность(); - Если ОборотВходящихПлатежейСтрокойПоследовательность.Количество() > 0 Тогда - ОборотВходящихПлатежейСтрокой = ОборотВходящихПлатежейСтрокойПоследовательность.ПолучитьТекст(0); - КонецЕсли; - - СтрокаВыписки.ОборотВходящихПлатежей = XMLЗначение(Тип("Число"), ОборотВходящихПлатежейСтрокой); - КонецЕсли; - КонецЕсли; - - TtlAmtDbt = ЗначениеСвойстваXDTO(Выписка, "TtlAmtDbt"); - Если TtlAmtDbt <> Неопределено Тогда - ОборотИсходящихПлатежейПоследовательность = ЗначениеСвойстваXDTO(TtlAmtDbt, "TtlAmt"); - Если ТипЗнч(ОборотИсходящихПлатежейПоследовательность) = Тип("ОбъектXDTO") Тогда - ОборотИсходящихПлатежейСтрокой = ""; - ОборотИсходящихПлатежейСтрокойПоследовательность = ОборотИсходящихПлатежейПоследовательность.Последовательность(); - Если ОборотИсходящихПлатежейСтрокойПоследовательность.Количество() > 0 Тогда - ОборотИсходящихПлатежейСтрокой = ОборотИсходящихПлатежейСтрокойПоследовательность.ПолучитьТекст(0); - КонецЕсли; - - СтрокаВыписки.ОборотИсходящихПлатежей = XMLЗначение(Тип("Число"), ОборотИсходящихПлатежейСтрокой); - КонецЕсли; - КонецЕсли; - -КонецПроцедуры - -Процедура ПрочитатьОперациюВыписки(СтрокаВыписки, Операция, ТаблицаОпераций, РеквизитыОрганизации) - - НовСтрока = ТаблицаОпераций.Добавить(); - НовСтрока.ВидОперацииЦР = ВРег(ЗначениеСвойстваXDTO(Операция, "Tp", БанковскиеПравила.ОперацияOOPN())); - - СуммаПоследовательность = ЗначениеСвойстваXDTO(Операция, "Amt.TtlAmt"); - Если ТипЗнч(СуммаПоследовательность) = Тип("ОбъектXDTO") Тогда - СуммаСтрокой = ""; - СуммаСтрокойПоследовательность = СуммаПоследовательность.Последовательность(); - Если СуммаСтрокойПоследовательность.Количество() > 0 Тогда - СуммаСтрокой = СуммаСтрокойПоследовательность.ПолучитьТекст(0); - КонецЕсли; - НовСтрока.СуммаДокумента = XMLЗначение(Тип("Число"), СуммаСтрокой); - КонецЕсли; - - КредитДебет = ЗначениеСвойстваXDTO(Операция, "CdtDbtInd", "DBIT"); - НовСтрока.НаправлениеПлатежа = ?(КредитДебет = "DBIT", "1", "2"); - - НовСтрока.НомерДокумента = ЗначениеСвойстваXDTO(Операция, "OprId"); - НовСтрока.ДатаОперации = XMLЗначение(Тип("Дата"), ЗначениеСвойстваXDTO(Операция, "SttlmDtTm")); - НовСтрока.ДатаДокумента = НовСтрока.ДатаОперации; - НовСтрока.ВидОперации = "01"; - НовСтрока.Очередность = Число(УчетДенежныхСредствКлиентСервер.ОчередностьПлатежаПоУмолчанию()); - - ДебитКредит = ЗначениеСвойстваXDTO(Операция, "CdtDbtInd"); - - Если ДебитКредит = "CRDT" Тогда - Сторона = "Плательщик"; - ПротивоположнаяСтрона = "Получатель"; - - НовСтрока.ДатаПоступило = НовСтрока.ДатаОперации; - Иначе - Сторона = "Получатель"; - ПротивоположнаяСтрона = "Плательщик"; - - НовСтрока.ДатаСписано = НовСтрока.ДатаОперации; - КонецЕсли; - - Если ЗначениеЗаполнено(РеквизитыОрганизации.ИННОрганизации) Тогда - НовСтрока[ПротивоположнаяСтрона] = Новый Структура; - НовСтрока[ПротивоположнаяСтрона].Вставить("ИНН", РеквизитыОрганизации.ИННОрганизации); - НовСтрока[ПротивоположнаяСтрона].Вставить("РасчСчет", СтрокаВыписки.НомерСчета); - НовСтрока[ПротивоположнаяСтрона].Вставить("НомерСчетаЦифровой", СтрокаВыписки.НомерСчетаЦифровой); - НовСтрока[ПротивоположнаяСтрона].Вставить("Банк", Новый Структура); - НовСтрока[ПротивоположнаяСтрона].Банк.Вставить("БИК", БИКПлатформыЦифровогоРубля()); - НовСтрока[ПротивоположнаяСтрона].Банк.Вставить("КоррСчет", НомерСчетаПлатформыЦифровогоРубля()); - НовСтрока[ПротивоположнаяСтрона].Банк.Вставить("Наименование", НаименованиеПлатформыЦифровогоРубля()); - Иначе - ОписаниеПроблемы = СтрШаблон( - НСтр("ru = 'У организации %1 не задан ИНН. Укажите его в карточке организации.'"), РеквизитыОрганизации.Наименование); - ЗаписьЖурналаРегистрации(ИмяСобытияЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка,,, ОписаниеПроблемы); - ВызватьИсключение ОписаниеПроблемы; - КонецЕсли; - - ПрочитатьДанныеПоВидуОперации(Операция, НовСтрока, Сторона, РеквизитыОрганизации); - -КонецПроцедуры - -Процедура ПрочитатьДанныеПоВидуОперации(Операция, НовСтрока, Сторона, РеквизитыОрганизации) - - ДеталиОперации = ЗначениеСвойстваXDTO(Операция, "OthrDtls"); - - // Перевод между счетами - Если НовСтрока.ВидОперацииЦР = БанковскиеПравила.ОперацияDCBU() // Пополнение ЦР (банковский счет -> ЦР) - Или НовСтрока.ВидОперацииЦР = БанковскиеПравила.ОперацияDCSE() Тогда // Вывод средств (банковский счет <- ЦР) - - ПрочитатьДанныеОбменМеждуСчетомИКошелькомЦР(ДеталиОперации, НовСтрока, Сторона, РеквизитыОрганизации); - - ИначеЕсли ЗначениеСвойстваXDTO(ДеталиОперации, "B2B") <> Неопределено Тогда - - ПрочитатьДанныеОперацияB2B(ДеталиОперации, НовСтрока, Сторона); - - ИначеЕсли ЗначениеСвойстваXDTO(ДеталиОперации, "C2B") <> Неопределено Тогда - - ПрочитатьДанныеОперацияC2B(ДеталиОперации, НовСтрока, Сторона); - - ИначеЕсли ЗначениеСвойстваXDTO(ДеталиОперации, "B2C") <> Неопределено Тогда - - ПрочитатьДанныеОперацияB2C(ДеталиОперации, НовСтрока, Сторона); - - ИначеЕсли ЗначениеСвойстваXDTO(ДеталиОперации, "X2G") <> Неопределено Тогда - - ПрочитатьДанныеОперацияX2G(ДеталиОперации, НовСтрока, Сторона); - - Иначе // пока не обслуживаем - - НовСтрока[Сторона] = Новый Структура; - - Если НовСтрока.ВидОперацииЦР = БанковскиеПравила.ОперацияOPTR() Тогда - ПрочитатьДанныеОперацияOPTrf(ДеталиОперации, НовСтрока); - Возврат; - КонецЕсли; - - // По остальным операциям нет описания. - - ОписаниеПроблемы = СтрШаблон( - НСтр("ru = 'Неподдерживаемый вид %1 в операции с идентификатором %2'"), - НовСтрока.ВидОперацииЦР, НовСтрока.НомерДокумента); - ЗаписьЖурналаРегистрации(ИмяСобытияЖурналаРегистрации(), УровеньЖурналаРегистрации.Предупреждение,,, ОписаниеПроблемы); - - КонецЕсли; - -КонецПроцедуры - -Процедура ПрочитатьДанныеОбменМеждуСчетомИКошелькомЦР(ДеталиОперации, НовСтрока, Сторона, РеквизитыОрганизации) - - НовСтрока[Сторона] = Новый Структура; - Если ЗначениеЗаполнено(РеквизитыОрганизации.ИННОрганизации) Тогда - НовСтрока[Сторона].Вставить("ИНН", РеквизитыОрганизации.ИННОрганизации); - КонецЕсли; - - // Детали операций обмена ЦР на безналичные средства и наоборот - Xchg = ЗначениеСвойстваXDTO(ДеталиОперации, "Xchg"); // Exchange - Если Xchg = Неопределено Тогда - ОписаниеПроблемы = СтрШаблон( - НСтр("ru = 'Некорректные данные в операции с идентификатором %1. В теге указан вид операции %2, но отсутствует или не заполнен тег '"), - НовСтрока.НомерДокумента, НовСтрока.ВидОперацииЦР); - ЗаписьЖурналаРегистрации(ИмяСобытияЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка,,, ОписаниеПроблемы); - Возврат; - КонецЕсли; - - // Банковский счет Субъекта ПлЦР - PtyInf = ЗначениеСвойстваXDTO(Xchg, "PtyInf"); // PartyInformation - NtlId = Неопределено; - Если PtyInf <> Неопределено Тогда - // Информация о реквизитах Субъекта ПлЦР-резидента, необходимых для проведения банковского платежа. - NtlId = ЗначениеСвойстваXDTO(PtyInf, "NtlId"); // NationalIdentification - Если NtlId <> Неопределено Тогда - НовСтрока[Сторона].Вставить("РасчСчет", ЗначениеСвойстваXDTO(NtlId, "Acct.Id")); - КонецЕсли; - КонецЕсли; - - БИК = ""; - БИКПосредника = ""; - Наименование = ""; - НовСтрока[Сторона].Вставить("Банк", Новый Структура); - - Если ПустаяСтрока(БИК) И NtlId <> Неопределено Тогда - // Servicer - Банк, обслуживающий счет - БИК = ЗначениеСвойстваXDTO(NtlId, "Svcr.MmbId"); - КонецЕсли; - - Intrmy = ЗначениеСвойстваXDTO(Xchg, "Intrmy"); // Intermediary (Посредник) - // Идентификатор посредника, через которого происходит взаимодействие Клиента с ПлЦР по операции. - Если Intrmy <> Неопределено Тогда - БИКПосредника = ЗначениеСвойстваXDTO(Intrmy, "ClrSysIdr.MmbId", ""); - Наименование = ЗначениеСвойстваXDTO(Intrmy, "Nm"); - КонецЕсли; - - Если ЗначениеЗаполнено(БИК) Тогда - НовСтрока[Сторона].Банк.Вставить("БИК", БИК); - - Если ЗначениеЗаполнено(Наименование) И БИК = БИКПосредника Тогда - НовСтрока[Сторона].Банк.Вставить("Наименование", Наименование); - КонецЕсли; - КонецЕсли; - -КонецПроцедуры - -Процедура ПрочитатьДанныеОперацияB2B(ДеталиОперации, НовСтрока, Сторона) - - Если НовСтрока.ВидОперацииЦР <> БанковскиеПравила.ОперацияB2B() Тогда - ОписаниеПроблемы = СтрШаблон( - НСтр("ru = 'Некорректные данные в операции с идентификатором %1. В теге указан вид операции %2, вместо %3. - | Т.к. присутствует и заполнен тег '"), - НовСтрока.НомерДокумента, НовСтрока.ВидОперацииЦР, БанковскиеПравила.ОперацияB2B()); - ЗаписьЖурналаРегистрации(ИмяСобытияЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка,,, ОписаниеПроблемы); - КонецЕсли; - - НовСтрока[Сторона] = Новый Структура; - - // Данные участника операции - контрагента ЮЛ - РеквизитыКонтрагента = ЗначениеСвойстваXDTO(ДеталиОперации.B2B, "BizCtrPty"); // BusinessCounterparty - Если РеквизитыКонтрагента <> Неопределено Тогда - НовСтрока[Сторона].Вставить("ИНН", ЗначениеСвойстваXDTO(РеквизитыКонтрагента, "INN")); - НовСтрока[Сторона].Вставить("КПП", ЗначениеСвойстваXDTO(РеквизитыКонтрагента, "KPP")); - НовСтрока[Сторона].Вставить("Наименование", ЗначениеСвойстваXDTO(РеквизитыКонтрагента, "Nm")); - НовСтрока[Сторона].Вставить("РасчСчет", ЗначениеСвойстваXDTO(РеквизитыКонтрагента, "Wllt.Id")); - - НовСтрока[Сторона].Вставить("Банк", Новый Структура); - ДанныеСчета = ЗначениеСвойстваXDTO(РеквизитыКонтрагента, "Wllt.DCAcctNb"); // DCAccountNumber - Если ДанныеСчета <> Неопределено Тогда - // Указывается номер СЦР Субъекта ПлЦР - НовСтрока[Сторона].Вставить("НомерСчетаЦифровой", ЗначениеСвойстваXDTO(ДанныеСчета, "Id", "")); // 20-значный - // Данные банка (платформы цифрового рубля) имеет смысл заполнять - // только в случае заполненного цифрового номера счета. - Если ЗначениеЗаполнено(НовСтрока[Сторона].НомерСчетаЦифровой) Тогда - НовСтрока[Сторона].Банк.Вставить("БИК", БИКПлатформыЦифровогоРубля()); - НовСтрока[Сторона].Банк.Вставить("КоррСчет", НомерСчетаПлатформыЦифровогоРубля()); - НовСтрока[Сторона].Банк.Вставить("Наименование", НаименованиеПлатформыЦифровогоРубля()); - КонецЕсли; - КонецЕсли; - КонецЕсли; - - НазначениеПлатежа = ЗначениеСвойстваXDTO(ДеталиОперации.B2B, "Purp"); - Если НазначениеПлатежа <> Неопределено Тогда - НовСтрока.НазначениеПлатежа = НазначениеПлатежа; - КонецЕсли; - -КонецПроцедуры - -Процедура ПрочитатьДанныеОперацияC2B(ДеталиОперации, НовСтрока, Сторона) - - Если НовСтрока.ВидОперацииЦР <> БанковскиеПравила.ОперацияC2B() Тогда - ОписаниеПроблемы = СтрШаблон( - НСтр("ru = 'Некорректные данные в операции с идентификатором %1. В теге указан вид операции %2, вместо %3. - |Т.к. присутствует и заполнен тег '"), - НовСтрока.НомерДокумента, НовСтрока.ВидОперацииЦР, БанковскиеПравила.ОперацияC2B()); - ЗаписьЖурналаРегистрации(ИмяСобытияЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка,,, ОписаниеПроблемы); - КонецЕсли; - - НовСтрока[Сторона] = Новый Структура; - - // Данные участника операции - контрагента ФЛ - РеквизитыКонтрагента = ЗначениеСвойстваXDTO(ДеталиОперации.C2B, "CstmrCtrPty"); // CustomerCounterparty - Если РеквизитыКонтрагента <> Неопределено Тогда - НовСтрока[Сторона].Вставить("Наименование", ЗначениеСвойстваXDTO(РеквизитыКонтрагента, "PAM")); - НовСтрока[Сторона].Вставить("РасчСчет", ЗначениеСвойстваXDTO(РеквизитыКонтрагента, "Wllt.Id")); - - НовСтрока[Сторона].Вставить("Банк", Новый Структура); - ДанныеСчета = ЗначениеСвойстваXDTO(РеквизитыКонтрагента, "Wllt.DCAcctNb"); // DCAccountNumber - Если ДанныеСчета <> Неопределено Тогда - // Указывается номер СЦР Субъекта ПлЦР - НовСтрока[Сторона].Вставить("НомерСчетаЦифровой", ЗначениеСвойстваXDTO(ДанныеСчета, "Id", "")); // 20-значный - // Данные банка (платформы цифрового рубля) имеет смысл заполнять - // только в случае заполненного цифрового номера счета. - Если ЗначениеЗаполнено(НовСтрока[Сторона].НомерСчетаЦифровой) Тогда - НовСтрока[Сторона].Банк.Вставить("БИК", БИКПлатформыЦифровогоРубля()); - НовСтрока[Сторона].Банк.Вставить("КоррСчет", НомерСчетаПлатформыЦифровогоРубля()); - НовСтрока[Сторона].Банк.Вставить("Наименование", НаименованиеПлатформыЦифровогоРубля()); - КонецЕсли; - КонецЕсли; - КонецЕсли; - - НазначениеПлатежа = ЗначениеСвойстваXDTO(ДеталиОперации.C2B, "Purp"); - Если НазначениеПлатежа <> Неопределено Тогда - НовСтрока.НазначениеПлатежа = НазначениеПлатежа; - КонецЕсли; - - // Информация о референсах, предоставленная получателем средств, позволяющая идентифицировать исходные документы. - CdtrRefInf = ЗначениеСвойстваXDTO(ДеталиОперации.C2B, "RmtInf.CdtrRefInf"); // CreditorReferenceInformation - Если CdtrRefInf = Неопределено Тогда - Возврат; - КонецЕсли; - - ПризнакИдентификаторПлатежа = ЗначениеСвойстваXDTO(CdtrRefInf, "Tp", ""); // Type - Если ПризнакИдентификаторПлатежа = "UIP2" Тогда - ИдентификаторПлатежа = ЗначениеСвойстваXDTO(CdtrRefInf, "Ref"); // Reference - Если ИдентификаторПлатежа <> Неопределено Тогда - НовСтрока.УникальныйИдентификаторПлатежа = ИдентификаторПлатежа; - КонецЕсли; - КонецЕсли; - -КонецПроцедуры - -Процедура ПрочитатьДанныеОперацияB2C(ДеталиОперации, НовСтрока, Сторона) - - Если НовСтрока.ВидОперацииЦР <> БанковскиеПравила.ОперацияB2C() Тогда - ОписаниеПроблемы = СтрШаблон( - НСтр("ru = 'Некорректные данные в операции с идентификатором %1. В теге указан вид операции %2, вместо %3. - | Т.к. присутствует и заполнен тег '"), - НовСтрока.НомерДокумента, НовСтрока.ВидОперацииЦР, БанковскиеПравила.ОперацияB2C()); - ЗаписьЖурналаРегистрации(ИмяСобытияЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка,,, ОписаниеПроблемы); - КонецЕсли; - - НовСтрока[Сторона] = Новый Структура; - - // Данные участника операции - контрагента ФЛ - РеквизитыКонтрагента = ЗначениеСвойстваXDTO(ДеталиОперации.B2C, "CstmrCtrPty"); // CustomerCounterparty - Если РеквизитыКонтрагента <> Неопределено Тогда - НовСтрока[Сторона].Вставить("Наименование", ЗначениеСвойстваXDTO(РеквизитыКонтрагента, "PAM")); - НовСтрока[Сторона].Вставить("РасчСчет", ЗначениеСвойстваXDTO(РеквизитыКонтрагента, "Wllt.Id")); - - НовСтрока[Сторона].Вставить("Банк", Новый Структура); - ДанныеСчета = ЗначениеСвойстваXDTO(РеквизитыКонтрагента, "Wllt.DCAcctNb"); // DCAccountNumber - Если ДанныеСчета <> Неопределено Тогда - // Указывается номер СЦР Субъекта ПлЦР - НовСтрока[Сторона].Вставить("НомерСчетаЦифровой", ЗначениеСвойстваXDTO(ДанныеСчета, "Id", "")); // 20-значный - // Данные банка (платформы цифрового рубля) имеет смысл заполнять - // только в случае заполненного цифрового номера счета. - Если ЗначениеЗаполнено(НовСтрока[Сторона].НомерСчетаЦифровой) Тогда - НовСтрока[Сторона].Банк.Вставить("БИК", БИКПлатформыЦифровогоРубля()); - НовСтрока[Сторона].Банк.Вставить("КоррСчет", НомерСчетаПлатформыЦифровогоРубля()); - НовСтрока[Сторона].Банк.Вставить("Наименование", НаименованиеПлатформыЦифровогоРубля()); - КонецЕсли; - КонецЕсли; - КонецЕсли; - - НазначениеПлатежа = ЗначениеСвойстваXDTO(ДеталиОперации.B2C, "Purp"); - Если НазначениеПлатежа <> Неопределено Тогда - НовСтрока.НазначениеПлатежа = НазначениеПлатежа; - КонецЕсли; - -КонецПроцедуры - -Процедура ПрочитатьДанныеОперацияX2G(ДеталиОперации, НовСтрока, Сторона) - - Если НовСтрока.ВидОперацииЦР <> БанковскиеПравила.ОперацияB2G() Тогда - ОписаниеПроблемы = СтрШаблон( - НСтр("ru = 'Некорректные данные в операции с идентификатором %1. В теге указан вид операции %2, вместо %3. - | Т.к. присутствует и заполнен тег '"), - НовСтрока.НомерДокумента, НовСтрока.ВидОперацииЦР, БанковскиеПравила.ОперацияB2G()); - ЗаписьЖурналаРегистрации(ИмяСобытияЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка,,, ОписаниеПроблемы); - КонецЕсли; - - НовСтрока[Сторона] = Новый Структура; - - // Данные участника операции - бюджетополучателя - ИНН = ЗначениеСвойстваXDTO(ДеталиОперации.X2G, "CrrspINN"); - Если ИНН <> Неопределено Тогда - НовСтрока[Сторона].Вставить("ИНН", ИНН); - КонецЕсли; - - КПП = ЗначениеСвойстваXDTO(ДеталиОперации.X2G, "CrrspKPP"); - Если КПП <> Неопределено Тогда - НовСтрока[Сторона].Вставить("КПП", КПП); - КонецЕсли; - - НаименованиеПолучателя = ЗначениеСвойстваXDTO(ДеталиОперации.X2G, "CrrspNm.LineNm"); - Если НаименованиеПолучателя <> Неопределено Тогда - НовСтрока[Сторона].Вставить("Наименование", НаименованиеПолучателя); - КонецЕсли; - - ИдентификаторПлатежа = ЗначениеСвойстваXDTO(ДеталиОперации.X2G, "PmtID"); // PaymentID - Если ИдентификаторПлатежа <> Неопределено Тогда - НовСтрока.УникальныйИдентификаторПлатежа = ИдентификаторПлатежа; - КонецЕсли; - - ДанныеКоррСчета = ЗначениеСвойстваXDTO(ДеталиОперации.X2G, "CrrspAcc"); // CorrespAcc - Если ДанныеКоррСчета <> Неопределено Тогда - НовСтрока[Сторона].Вставить("НомерСчетаЦифровой", ЗначениеСвойстваXDTO(ДанныеКоррСчета, "Id", "")); - КонецЕсли; - - НовСтрока[Сторона].Вставить("Банк", Новый Структура); - - ДанныеСчета = ЗначениеСвойстваXDTO(ДеталиОперации.X2G, "CtrPty"); // Counterparty - Если ДанныеСчета <> Неопределено Тогда - НовСтрока[Сторона].Вставить("РасчСчет", ЗначениеСвойстваXDTO(ДанныеСчета, "Id", "")); - НовСтрока[Сторона].Банк.Вставить("БИК", БИКПлатформыЦифровогоРубля()); - НовСтрока[Сторона].Банк.Вставить("Наименование", НаименованиеПлатформыЦифровогоРубля()); - ДанныеКазначейскогоСчета = ЗначениеСвойстваXDTO(ДанныеСчета, "DCAcctNb"); - Если ДанныеКазначейскогоСчета <> Неопределено Тогда - КоррСчет = ЗначениеСвойстваXDTO(ДанныеКазначейскогоСчета, "Id", ""); // Единый казначейский счет - Если ЗначениеЗаполнено(КоррСчет) Тогда - НовСтрока[Сторона].Вставить("НомерСчетаЦифровой", КоррСчет); - КонецЕсли; - КонецЕсли; - КонецЕсли; - - НазначениеПлатежа = ЗначениеСвойстваXDTO(ДеталиОперации.X2G, "Purp"); - Если НазначениеПлатежа <> Неопределено Тогда - НовСтрока.НазначениеПлатежа = НазначениеПлатежа; - КонецЕсли; - -КонецПроцедуры - -Процедура ПрочитатьДанныеОперацияOPTrf(ДеталиОперации, НовСтрока) - - // Операция "Перевод оператором". - // Для данной операции пока заполняем только Назначение платежа. - - НазначениеПлатежа = ЗначениеСвойстваXDTO(ДеталиОперации.OPTrf, "Purp"); - Если НазначениеПлатежа <> Неопределено Тогда - НовСтрока.НазначениеПлатежа = НазначениеПлатежа; - КонецЕсли; - -КонецПроцедуры - -// Формирует пустую таблицу для заполнения данных по выписке -// -// Возвращаемое значение: -// ТаблицаЗначений - данные для выписки. Содержит колонки: -// *ДатаФормирования - Дата - дата формирования документа -// *ИдентификаторДокумента - Строка - уникальный идентификатор документа -// *ИдентификаторЗапроса - Строка - идентификатор запроса, по которому была сформирована выписка. -// *НачалоПериода - Дата - дата начала периода выписки -// *КонецПериода - Дата - дата окончания периода выписки -// *НомерСчета - Строка - счет по которому сформирована выписка -// *НомерСчетаЦифровой - Строка - 20-значный номер счета -// *Организация - Структура - реквизиты организации, см. макет ОбмнеСБанками.ВыпискаБанка -// *Банк - Структура - реквизиты банка, см. макет ОбмнеСБанками.ВыпискаБанка -// *НачальныйОстаток - Число - входящий остаток по выписке -// *ОборотВходящихПлатежей - Число - поступило денежных средств за период -// *ОборотИсходящихПлатежей - Число - оплачено за период -// *КонечныйОстаток - Число - остаток денежных средств на конец периода -// *Операции - ТаблицаЗначений - операции по выписке, см. НовыйТаблицаОпераций() -// *Штамп - Структура - данных для штампа -// *ЭлектронныеПодписи - ТаблицаЗначений - данные электронных подписей. -// -Функция НовыйТаблицаВыписок() - - ТаблицаВыписок = Новый ТаблицаЗначений; - ТаблицаВыписок.Колонки.Добавить("ДатаФормирования", ОбщегоНазначения.ОписаниеТипаДата(ЧастиДаты.Дата)); - ТаблицаВыписок.Колонки.Добавить("ИдентификаторДокумента", ОбщегоНазначения.ОписаниеТипаСтрока(36)); - ТаблицаВыписок.Колонки.Добавить("НачалоПериода", ОбщегоНазначения.ОписаниеТипаДата(ЧастиДаты.Дата)); - ТаблицаВыписок.Колонки.Добавить("КонецПериода", ОбщегоНазначения.ОписаниеТипаДата(ЧастиДаты.Дата)); - ТаблицаВыписок.Колонки.Добавить("НомерСчета", БанковскиеПравила.ТипЦифровойНомерСчета()); - ТаблицаВыписок.Колонки.Добавить("НомерСчетаЦифровой", // 20-значный - ОбщегоНазначения.ОписаниеТипаСтрока(БанковскиеПравила.МаксимальнаяДлинаНациональногоНомераСчета())); - ТаблицаВыписок.Колонки.Добавить("Организация", Новый ОписаниеТипов("Структура")); - ТаблицаВыписок.Колонки.Добавить("Банк", Новый ОписаниеТипов("Структура")); - ТаблицаВыписок.Колонки.Добавить("НачальныйОстаток", ОбщегоНазначения.ОписаниеТипаЧисло(15, 2)); - ТаблицаВыписок.Колонки.Добавить("ОборотВходящихПлатежей", ОбщегоНазначения.ОписаниеТипаЧисло(15, 2)); - ТаблицаВыписок.Колонки.Добавить("ОборотИсходящихПлатежей", ОбщегоНазначения.ОписаниеТипаЧисло(15, 2)); - ТаблицаВыписок.Колонки.Добавить("КонечныйОстаток", ОбщегоНазначения.ОписаниеТипаЧисло(15, 2)); - ТаблицаВыписок.Колонки.Добавить("Операции", Новый ОписаниеТипов("ТаблицаЗначений")); - - // Для механизмов БЭД - ТаблицаВыписок.Колонки.Добавить("ИдентификаторЗапроса", Новый ОписаниеТипов("Строка")); - ТаблицаВыписок.Колонки.Добавить("Штамп", Новый ОписаниеТипов("Структура")); - ТаблицаВыписок.Колонки.Добавить("ЭлектронныеПодписи", Новый ОписаниеТипов("ТаблицаЗначений")); - - Возврат ТаблицаВыписок; - -КонецФункции - -Функция НовыйТаблицаОпераций() - - ТаблицаОпераций = Новый ТаблицаЗначений; - ТаблицаОпераций.Колонки.Добавить("ВидОперации", ОбщегоНазначения.ОписаниеТипаСтрока(2)); // ВидОплаты / TransitionKind - ТаблицаОпераций.Колонки.Добавить("ВидОперацииЦР", Новый ОписаниеТипов("Строка")); // Вид операции цифрового рубля - ТаблицаОпераций.Колонки.Добавить("Очередность", ОбщегоНазначения.ОписаниеТипаЧисло(1)); - ТаблицаОпераций.Колонки.Добавить("ДатаОперации", ОбщегоНазначения.ОписаниеТипаДата(ЧастиДаты.Дата)); - ТаблицаОпераций.Колонки.Добавить("ДатаДокумента", ОбщегоНазначения.ОписаниеТипаДата(ЧастиДаты.Дата)); - ТаблицаОпераций.Колонки.Добавить("ДатаСписано", ОбщегоНазначения.ОписаниеТипаДата(ЧастиДаты.Дата)); - ТаблицаОпераций.Колонки.Добавить("ДатаПоступило", ОбщегоНазначения.ОписаниеТипаДата(ЧастиДаты.Дата)); - ТаблицаОпераций.Колонки.Добавить("НаправлениеПлатежа", ОбщегоНазначения.ОписаниеТипаСтрока(1)); - ТаблицаОпераций.Колонки.Добавить("НомерДокумента", ОбщегоНазначения.ОписаниеТипаСтрока(36)); - ТаблицаОпераций.Колонки.Добавить("СуммаДокумента", ОбщегоНазначения.ОписаниеТипаЧисло(15, 2)); - ТаблицаОпераций.Колонки.Добавить("Плательщик", Новый ОписаниеТипов("Структура")); - ТаблицаОпераций.Колонки.Добавить("Получатель", Новый ОписаниеТипов("Структура")); - ТаблицаОпераций.Колонки.Добавить("НазначениеПлатежа", Новый ОписаниеТипов("Строка")); - ТаблицаОпераций.Колонки.Добавить("УникальныйИдентификаторПлатежа", ОбщегоНазначения.ОписаниеТипаСтрока(35)); - - Возврат ТаблицаОпераций; - -КонецФункции - -Процедура РазборВыпискиВызыватьИсключение() - - ШаблонСообщения = НСтр("ru = 'При разборе выписки по счету Цифрового рубля (ЦР) возникла ошибка: - |%1. - |Возможно файл не является выпиской по счету ЦР.'"); - КраткоеПредставлениеОшибки = ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); - ТекстОшибки = СтрШаблон(ШаблонСообщения, КраткоеПредставлениеОшибки); - Если Пользователи.ЭтоПолноправныйПользователь(, , Ложь) Тогда - ТекстСообщения = ТекстОшибки; - Иначе - ТекстСообщения = НСтр("ru = 'Файл выписки Цифровому рублю (ЦР), полученный из банка, невозможно прочитать. - |Файл содержит ошибку или не является выпиской по счету ЦР.'"); - КонецЕсли; - - ЗаписьЖурналаРегистрации(ИмяСобытияЖурналаРегистрации(), - УровеньЖурналаРегистрации.Ошибка, - , - , - ТекстОшибки); - - ВызватьИсключение ТекстСообщения; - -КонецПроцедуры - -#КонецОбласти - #Область ПлатежныеПорученияЦРСлужебная Функция СформироватьПлатежныеДанные(ПлатежныеДокументы, ИдентификаторСчета) @@ -867,7 +209,7 @@ Если ПлатежныеДокументы[0].ОрганизацияЦифровойСчет Тогда НомерСчета = ПлатежныеДокументы[0].ОрганизацияНомерСчета; Иначе - ВалютаРеглУчета = Константы.НациональнаяВалюта.Получить(); + ВалютаРеглУчета = УправлениеНебольшойФирмойПовтИсп.ПолучитьНациональнуюВалюту(); БанковскиеСчетаЦифровые = Справочники.БанковскиеСчета.БанковскиеСчетаОрганизации( Владелец, ВалютаРеглУчета, , Истина); Если БанковскиеСчетаЦифровые.Количество() > 0 Тогда @@ -1013,24 +355,6 @@ #КонецОбласти -Функция ИмяСобытияЖурналаРегистрации() Экспорт - - Возврат НСтр("ru = 'Загрузка выписки по счету цифрового рубля'", ОбщегоНазначения.КодОсновногоЯзыка()); - -КонецФункции - -Функция ЗначениеСвойстваXDTO(ОбъектXDTO, - ИмяСвойства, - ЗначениеПоУмолчанию = Неопределено, - Тип = Неопределено, - ЭтоСписок = Ложь, - НеопределеноПоУмолчанию = Ложь) - - Возврат РаботаСФайламиБЭД.ЗначениеСвойстваXDTO( - ОбъектXDTO, ИмяСвойства, ЗначениеПоУмолчанию, Тип, ЭтоСписок, НеопределеноПоУмолчанию); - -КонецФункции - // Преобразует полученные данные в строку формата JSON. // Для значений с типом, не поддерживаемым при сериализации, будет вызвана функция преобразования ПреобразованиеЗначенийJSON. // Перед обработкой значений новых типов следует модифицировать функцию преобразования. diff --git a/Конфигурация/CommonModules/ЧерновикиЭДО.xml b/Конфигурация/CommonModules/ЧерновикиЭДО.xml new file mode 100644 index 000000000..1ec8034cb --- /dev/null +++ b/Конфигурация/CommonModules/ЧерновикиЭДО.xml @@ -0,0 +1,23 @@ + + + + + ЧерновикиЭДО + + + ru + Черновики ЭДО + + + + false + false + true + true + true + false + false + DontUse + + + \ No newline at end of file diff --git a/Конфигурация/CommonModules/ЧерновикиЭДО/Ext/Module.bsl b/Конфигурация/CommonModules/ЧерновикиЭДО/Ext/Module.bsl new file mode 100644 index 000000000..3ecefa017 --- /dev/null +++ b/Конфигурация/CommonModules/ЧерновикиЭДО/Ext/Module.bsl @@ -0,0 +1,374 @@ +// @strict-types + +#Область СлужебныйПрограммныйИнтерфейс + +#Область ДляВызоваИзДругихПодсистем + +#Область ТранспортныеКонтейнерыЭДО + +// См. ТранспортныеКонтейнерыЭДО.ПриФормированииТаблицыТиповЭлементовРегламента +Процедура ПриФормированииТаблицыТиповЭлементовРегламента(Таблица) Экспорт + НоваяСтрока = Таблица.Добавить(); + НоваяСтрока.КодТранзакции = "Template"; + НоваяСтрока.ТипЭлементаРегламента = Перечисления.ТипыЭлементовРегламентаЭДО.ИнформацияОтправителя; +КонецПроцедуры + +// См. ТранспортныеКонтейнерыЭДО.ПриФормированииТаблицыТиповРегламентов +Процедура ПриФормированииТаблицыТиповРегламентов(Таблица) Экспорт + НоваяСтрока = Таблица.Добавить(); + НоваяСтрока.КодРегламента = "Template"; + НоваяСтрока.КодДокумента = "Template"; + НоваяСтрока.ТипРегламента = Перечисления.ТипыРегламентовЭДО.Черновик; + НоваяСтрока.ТипДокумента = Перечисления.ТипыДокументовЭДО.ПустаяСсылка(); +КонецПроцедуры + +// Возвращаемое значение: +// Структура: +// * Идентификатор - Строка - идентификатор черновика. Должен быть указан в описании документа, +// созданного в ответ на Черновик. +// * Тип - Строка - тип технологии роуминга или type Name Такском. +// * ОжидаетсяИзвещениеОПолучении - Булево - отправитель черновика ожидает УС (1999). Значение по умолчанию: false. +// * ДействителенС - Дата +// * ДействителенПо - Дата +// * ПолучательДокумента - Строка - на случай если отправитель черновика не является получателем ответа на Черновик. +// * ПлательщикДокумента - Строка - есть в рабочих переписках, в версии РГ - нет. Тот, кто будет оплачивать документ +// по черновику. Сейчас в 1С всегда платит отправитель документа. +// * МаксимальноеКоличествоОтветов - Число - на первом этапе всегда 1. +// * РедактируемыеДанные - Массив из Строка - xpath строки доступных для редактирования полей. +Функция НовыеДанныеЧерновика() Экспорт + Результат = Новый Структура; + Результат.Вставить("Идентификатор", ""); + Результат.Вставить("Тип", ""); + Результат.Вставить("ОжидаетсяИзвещениеОПолучении", Ложь); + Результат.Вставить("ДействителенС", Дата(1, 1, 1)); + Результат.Вставить("ДействителенПо", Дата(1, 1, 1)); + Результат.Вставить("ПолучательДокумента", ""); + Результат.Вставить("ПлательщикДокумента", ""); + Результат.Вставить("МаксимальноеКоличествоОтветов", 1); + Результат.Вставить("РедактируемыеДанные", Новый Массив); + Возврат Результат; +КонецФункции + +// Параметры: +// ДанныеЧерновика - Неопределено - возвращаемый параметр, если данные черновика есть в дополнительных параметрах карточки +// возвращается структура. См. НовыеДанныеЧерновика +// ДополнительныеПараметры - Структура +// @skip-check statement-type-change,property-return-type +Процедура ЗаполнитьДанныеЧерновикаПоДаннымДополнительныхПараметровКарточкиДокумента(ДанныеЧерновика, + Знач ДополнительныеПараметры) Экспорт + + ОписаниеТипаЧисло = ОбщегоНазначения.ОписаниеТипаЧисло(2); + ОписаниеТипаБулево = Новый ОписаниеТипов("Булево"); + + ДанныеЧерновика = НовыеДанныеЧерновика(); + ДанныеЧерновика.Идентификатор = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ДополнительныеПараметры, + "ШаблонИдентификатор", ""); + ДанныеЧерновика.Тип = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ДополнительныеПараметры, + "ШаблонТип", ""); + + Если ДополнительныеПараметры.Свойство("ШаблонОжидаетсяИзвещениеОПолучении") + И ЗначениеЗаполнено(ДополнительныеПараметры.ШаблонОжидаетсяИзвещениеОПолучении) Тогда + ДанныеЧерновика.ОжидаетсяИзвещениеОПолучении = ОписаниеТипаБулево.ПривестиЗначение( + ДополнительныеПараметры.ШаблонОжидаетсяИзвещениеОПолучении); + КонецЕсли; + + Если ДополнительныеПараметры.Свойство("ШаблонДействителенС") + И ЗначениеЗаполнено(ДополнительныеПараметры.ШаблонДействителенС) Тогда + ДанныеЧерновика.ДействителенС = XMLЗначение(Тип("Дата"), ДополнительныеПараметры.ШаблонДействителенС); + КонецЕсли; + + Если ДополнительныеПараметры.Свойство("ШаблонДействителенПо") + И ЗначениеЗаполнено(ДополнительныеПараметры.ШаблонДействителенПо) Тогда + ДанныеЧерновика.ДействителенПо = XMLЗначение(Тип("Дата"), ДополнительныеПараметры.ШаблонДействителенПо); + КонецЕсли; + + ДанныеЧерновика.ПолучательДокумента = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ДополнительныеПараметры, + "ШаблонПолучательДокумента", ""); + ДанныеЧерновика.ПлательщикДокумента = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ДополнительныеПараметры, + "ШаблонПлательщикДокумента", ""); + + Если ДополнительныеПараметры.Свойство("ШаблонМаксимальноеКоличествоОтветов") + И ЗначениеЗаполнено(ДополнительныеПараметры.ШаблонМаксимальноеКоличествоОтветов) Тогда + ДанныеЧерновика.МаксимальноеКоличествоОтветов = ОписаниеТипаЧисло.ПривестиЗначение( + ДополнительныеПараметры.ШаблонМаксимальноеКоличествоОтветов); + КонецЕсли; + + ДанныеЧерновика.РедактируемыеДанные = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ДополнительныеПараметры, + "ШаблонРедактируемыеДанные", ДанныеЧерновика.РедактируемыеДанные); + +КонецПроцедуры + +#КонецОбласти // ТранспортныеКонтейнерыЭДО + +#Область ЭлектронныеДокументыЭДО + +// Возвращаемое значение: +// Структура: +// * Идентификатор - Строка +// * ЭлектронныйДокументИсточник - ДокументСсылка.ЭлектронныйДокументИсходящийЭДО +// * ВидЧерновика - СправочникСсылка.ВидыДокументовЭДО +// * ОтправительЧерновика - Неопределено,ОпределяемыйТип.УчастникЭДО +// * ОтправительДляДокумента - Неопределено,ОпределяемыйТип.УчастникЭДО +// * ПолучательДляДокумента - Неопределено,ОпределяемыйТип.УчастникЭДО +// * РедактируемыеПоля - Массив из Строка +Функция НовыеПараметрыЧерновикаДокументаДляЗагрузки() Экспорт + Параметры = Новый Структура; + Параметры.Вставить("Идентификатор", ""); + Параметры.Вставить("ЭлектронныйДокументИсточник", Документы.ЧерновикЭлектронногоДокументаЭДО.ПустаяСсылка()); + Параметры.Вставить("ВидЧерновика", Справочники.ВидыДокументовЭДО.ПустаяСсылка()); + Параметры.Вставить("ОтправительЧерновика", Неопределено); + Параметры.Вставить("ОтправительДляДокумента", Неопределено); + Параметры.Вставить("ПолучательДляДокумента", Неопределено); + Параметры.Вставить("РедактируемыеПоля", Новый Массив); + Возврат Параметры; +КонецФункции + +// Параметры: +// ПараметрыЧерновика - Неопределено - возвращаемый параметр. См. НовыеПараметрыЧерновикаДокументаДляЗагрузки +// ДанныеОбъекта - СтрокаТаблицыЗначений из См. СинхронизацияЭДО.НовыеДанныеОбъектов +// @skip-check statement-type-change,property-return-type,variable-value-type +Процедура ЗаполнитьПараметрыЧерновикаДокумента(ПараметрыЧерновика, Знач ДанныеОбъекта) Экспорт + + Карточка = ДанныеОбъекта.Карточка; + + ДанныеЧерновика = Неопределено; // См. НовыеДанныеЧерновика + Если Карточка = Неопределено + Или Не Карточка.Свойство("ДанныеЧерновика", ДанныеЧерновика) + Или ДанныеЧерновика = Неопределено Тогда + Возврат; + КонецЕсли; + + СодержаниеДокумента = ДанныеОбъекта.Содержание; + + ПараметрыЧерновика = НовыеПараметрыЧерновикаДокументаДляЗагрузки(); + ПараметрыЧерновика.Идентификатор = ДанныеЧерновика.Идентификатор; + ПараметрыЧерновика.ВидЧерновика = ДанныеОбъекта.ВидДокумента; + + ТипДокументаИзСодержания = Перечисления.ТипыДокументовЭДО.Прочее; + Если СодержаниеДокумента <> Неопределено + И СодержаниеДокумента.ТипДокумента <> Перечисления.ТипыДокументовЭДО.Черновик Тогда + ТипДокументаИзСодержания = СодержаниеДокумента.ТипДокумента; + КонецЕсли; + ПараметрыЧерновика.ВидЧерновика = ЭлектронныеДокументыЭДО.ВидДокументаПоТипу(ТипДокументаИзСодержания); + + ПараметрыЧерновика.ОтправительЧерновика = + УчетныеЗаписиЭДО.ОрганизацияУчетнойЗаписи(ДанныеОбъекта.ИдентификаторОтправителя); + Если Не ЗначениеЗаполнено(ПараметрыЧерновика.ОтправительЧерновика) Тогда + ПараметрыЧерновика.ОтправительЧерновика = ДанныеОбъекта.Контрагент; + КонецЕсли; + ПараметрыЧерновика.ОтправительДляДокумента = ДанныеОбъекта.Контрагент; + ПараметрыЧерновика.ПолучательДляДокумента = ДанныеОбъекта.Организация; + + ОбщегоНазначенияКлиентСервер.ДополнитьМассив(ПараметрыЧерновика.РедактируемыеПоля, ДанныеЧерновика.РедактируемыеДанные); + +КонецПроцедуры + +// Параметры: +// ПараметрыСоздания - См. НовыеПараметрыЧерновикаДокументаДляЗагрузки +// +// Возвращаемое значение: +// ДокументОбъект.ЧерновикЭлектронногоДокументаЭДО +//@skip-check variable-value-type +Функция СоздатьЧерновикДокументаЭДО(ПараметрыСоздания) Экспорт + + ЧерновикОбъект = Документы.ЧерновикЭлектронногоДокументаЭДО.СоздатьДокумент(); + ЗаполнитьЗначенияСвойств(ЧерновикОбъект, ПараметрыСоздания); + Для Каждого РедактируемоеПоле Из ПараметрыСоздания.РедактируемыеПоля Цикл + НоваяСтрока = ЧерновикОбъект.РедактируемыеПоля.Добавить(); + НоваяСтрока.Поле = РедактируемоеПоле; + КонецЦикла; + ЧерновикОбъект.Записать(); + + Возврат ЧерновикОбъект; + +КонецФункции + +// Параметры: +// СвойстваДокумента - См. ЧерновикиЭДОКлиентСервер.НовыеСвойстваДокументаДляПолученияПредставленияЧерновика +// +// Возвращаемое значение: +// Строка +Функция ПредставлениеЧерновика(СвойстваДокумента) Экспорт + ПредставлениеДокумента = СтрШаблон(НСтр("ru = '%1 № %2 от %3'"), Строка(СвойстваДокумента.ВидЧерновика), + СвойстваДокумента.НомерДокумента, Формат(СвойстваДокумента.ДатаДокумента, "ДЛФ=D;")); + + ПредставлениеДокументаРП = ПолучитьСклоненияСтроки(ПредставлениеДокумента, "L=ru_RU", "CS=Genitive;")[0]; + Возврат СтрШаблон(НСтр("ru='Черновик %1'"), ПредставлениеДокументаРП); +КонецФункции + +// Параметры: +// СообщениеОбъект - ДокументОбъект.СообщениеЭДО +Процедура ПриЗагрузкеСообщенияУжеСозданногоДокумента(СообщениеОбъект) Экспорт + + Если СообщениеОбъект.ТипЭлементаРегламента = Перечисления.ТипыЭлементовРегламентаЭДО.УС_ОтзывЧерновика Тогда + УстановитьПометкуОтзываЧерновикаДокумента(СообщениеОбъект.ЭлектронныйДокумент); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти // ЭлектронныеДокументыЭДО + +#Область ИнтерфейсДокументовЭДО + +// Параметры: +// Черновик - ДокументСсылка.ЧерновикЭлектронногоДокументаЭДО +// +// Возвращаемое значение: +// ПеречислениеСсылка.ТипыДокументовЭДО +Функция ТипДокументаЧерновика(Черновик) Экспорт + + РеквизитыЧерновика = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Черновик, "ВидЧерновика.ТипДокумента"); + //@skip-check property-return-type + Возврат РеквизитыЧерновика.ВидЧерновикаТипДокумента; + +КонецФункции + +// Параметры: +// КомандаВидна - Булево - выходной, переопределяемый параметр +// ТипДокументаЧерновика - ПеречислениеСсылка.СостоянияДокументовЭДО +Процедура ПриОпределенииВидимостиКомандыСозданияДокументаНаОснованииЧерновика(КомандаВидна, + Знач ТипДокументаЧерновика) Экспорт + + КомандаВидна = Ложь; + + Если ОбщегоНазначения.ПодсистемаСуществует("ЭлектронноеВзаимодействие.ОбменСГИСЭПД") Тогда + МодульОбменСГИСЭПД = ОбщегоНазначения.ОбщийМодуль("ОбменСГИСЭПД"); + МодульОбменСГИСЭПД.ПриОпределенииВидимостиКомандыСозданияДокументаНаОснованииЧерновика( + КомандаВидна, ТипДокументаЧерновика); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти // ИнтерфейсДокументовЭДО + +#КонецОбласти // ДляВызоваИзДругихПодсистем + +// Параметры: +// Ссылка - ОпределяемыйТип.ОснованияЭлектронныхДокументовЭДО +// +// Возвращаемое значение: +// Булево +Функция ЭтоЧерновик(Ссылка) Экспорт + + ДопустимыеТипы = Новый Массив(2); + ДопустимыеТипы[0] = Тип("ДокументСсылка.ЭлектронныйДокументВходящийЭДО"); + ДопустимыеТипы[1] = Тип("ДокументСсылка.ЭлектронныйДокументИсходящийЭДО"); + + ТипСсылки = ТипЗнч(Ссылка); + Если ДопустимыеТипы.Найти(ТипСсылки) = Неопределено Тогда + Возврат Ложь; + КонецЕсли; + + ЭтоЧерновик = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Ссылка, "ЭтоЧерновик"); + Возврат ЭтоЧерновик; + +КонецФункции + +// Возвращаемое значение: +// Строка - строка длиной 32 символа +Функция НовыйИдентификаторЧерновика() Экспорт + + Возврат СтрЗаменить(Строка(Новый УникальныйИдентификатор()), "-", ""); + +КонецФункции + +// Параметры: +// ЧерновикОснование - ДокументСсылка.ЧерновикЭлектронногоДокументаЭДО +// КонтекстДиагностики - См. ОбработкаНеисправностейБЭД.НовыйКонтекстДиагностики +Процедура ПослеСозданияЭлектронногоДокументаПоЧерновику(ЧерновикОснование, КонтекстДиагностики) Экспорт + + УстановитьПометкуОбработан(ЧерновикОснование); + ЗавершитьОбменДляДокументаИсточникаЧерновика(ЧерновикОснование, КонтекстДиагностики); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +// Параметры: +// ЭлектронныйДокумент - ДокументСсылка.ЭлектронныйДокументВходящийЭДО +// - ДокументСсылка.ЭлектронныйДокументИсходящийЭДО +Процедура УстановитьПометкуОтзываЧерновикаДокумента(ЭлектронныйДокумент) + + Черновик = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ЭлектронныйДокумент, "ЧерновикОснование"); + + Если Не ЗначениеЗаполнено(Черновик) Тогда + Возврат; + КонецЕсли; + + НачатьТранзакцию(); + + Попытка + + ЧерновикОбъект = ОбщегоНазначенияБЭД.ОбъектПоСсылкеДляИзменения(Черновик); + ЧерновикОбъект.Отозван = Истина; + ЧерновикОбъект.Записать(); + + ЗафиксироватьТранзакцию(); + + Исключение + + ОтменитьТранзакцию(); + + Операция = НСтр("ru = 'Установка пометки отзыва черновика электронного документа'"); + ПодробныйТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ТекстСообщения = НСтр("ru = 'Не удалось установить пометку отзыва черновика электронного документа. + |Подробности в журнале регистрации'"); + ОбработкаНеисправностейБЭД.ОбработатьОшибку(Операция, + ОбщегоНазначенияБЭДКлиентСервер.ПодсистемыБЭД().ОбменСКонтрагентами, + ПодробныйТекстОшибки, ТекстСообщения, Черновик); + + КонецПопытки; + +КонецПроцедуры + +// Параметры: +// Черновик - ДокументСсылка.ЧерновикЭлектронногоДокументаЭДО +Процедура УстановитьПометкуОбработан(Черновик) + + НачатьТранзакцию(); + + Попытка + + ЧерновикОбъект = ОбщегоНазначенияБЭД.ОбъектПоСсылкеДляИзменения(Черновик); + ЧерновикОбъект.Обработан = Истина; + ЧерновикОбъект.Записать(); + + ЗафиксироватьТранзакцию(); + + Исключение + + ОтменитьТранзакцию(); + + Операция = НСтр("ru = 'Установка признака обработки черновика электронного документа'"); + ПодробныйТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ТекстСообщения = НСтр("ru = 'Не удалось установить пометку обработки черновика электронного документа. + |Подробности в журнале регистрации'"); + ОбработкаНеисправностейБЭД.ОбработатьОшибку(Операция, + ОбщегоНазначенияБЭДКлиентСервер.ПодсистемыБЭД().ОбменСКонтрагентами, + ПодробныйТекстОшибки, ТекстСообщения, Черновик); + + КонецПопытки; + +КонецПроцедуры + +// Параметры: +// Черновик - ДокументСсылка.ЧерновикЭлектронногоДокументаЭДО +// КонтекстДиагностики - См. ОбработкаНеисправностейБЭД.НовыйКонтекстДиагностики +Процедура ЗавершитьОбменДляДокументаИсточникаЧерновика(Черновик, КонтекстДиагностики) + + ДокументИсточник = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Черновик, "ЭлектронныйДокументИсточник"); + + Если Не ЗначениеЗаполнено(ДокументИсточник) Тогда + Возврат; + КонецЕсли; + + Действие = Перечисления.ДействияПоЭДО.СоздатьДокументПоЧерновику; + + ЭлектронныеДокументыЭДОСлужебный.ОбновитьСостояниеДокументаПоДействию(ДокументИсточник, Действие, + КонтекстДиагностики); + +КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/Конфигурация/CommonModules/ЧерновикиЭДОВызовСервера.xml b/Конфигурация/CommonModules/ЧерновикиЭДОВызовСервера.xml new file mode 100644 index 000000000..20f03415f --- /dev/null +++ b/Конфигурация/CommonModules/ЧерновикиЭДОВызовСервера.xml @@ -0,0 +1,23 @@ + + + + + ЧерновикиЭДОВызовСервера + + + ru + Черновики ЭДО вызов сервера + + + + false + false + true + false + false + true + false + DontUse + + + \ No newline at end of file diff --git a/Конфигурация/CommonModules/ЧерновикиЭДОВызовСервера/Ext/Module.bsl b/Конфигурация/CommonModules/ЧерновикиЭДОВызовСервера/Ext/Module.bsl new file mode 100644 index 000000000..c9f41477f --- /dev/null +++ b/Конфигурация/CommonModules/ЧерновикиЭДОВызовСервера/Ext/Module.bsl @@ -0,0 +1,14 @@ +// @strict-types + +#Область СлужебныйПрограммныйИнтерфейс + +// Параметры: +// ЧерновикОснование - ДокументСсылка.ЧерновикЭлектронногоДокументаЭДО +// КонтекстДиагностики - См. ОбработкаНеисправностейБЭД.НовыйКонтекстДиагностики +Процедура ПослеСозданияЭлектронногоДокументаПоЧерновику(ЧерновикОснование, КонтекстДиагностики) Экспорт + + ЧерновикиЭДО.ПослеСозданияЭлектронногоДокументаПоЧерновику(ЧерновикОснование, КонтекстДиагностики); + +КонецПроцедуры + +#КонецОбласти diff --git a/Конфигурация/CommonModules/ЧерновикиЭДОКлиент.xml b/Конфигурация/CommonModules/ЧерновикиЭДОКлиент.xml new file mode 100644 index 000000000..aa75b3c60 --- /dev/null +++ b/Конфигурация/CommonModules/ЧерновикиЭДОКлиент.xml @@ -0,0 +1,23 @@ + + + + + ЧерновикиЭДОКлиент + + + ru + Черновики ЭДО клиент + + + + false + true + false + false + true + false + false + DontUse + + + \ No newline at end of file diff --git a/Конфигурация/CommonModules/ЧерновикиЭДОКлиент/Ext/Module.bsl b/Конфигурация/CommonModules/ЧерновикиЭДОКлиент/Ext/Module.bsl new file mode 100644 index 000000000..b67a63690 --- /dev/null +++ b/Конфигурация/CommonModules/ЧерновикиЭДОКлиент/Ext/Module.bsl @@ -0,0 +1,85 @@ +// @strict-types + +#Область СлужебныйПрограммныйИнтерфейс + +#Область ДляВызоваИзДругихПодсистем + +#Область ИнтерфейсДокументовЭДО + +// Параметры: +// ЭлектронныйДокумент - ДокументСсылка.ЭлектронныйДокументВходящийЭДО +// ЧерновикДокумента - ДокументСсылка.ЧерновикЭлектронногоДокументаЭДО +Процедура СоздатьДокументПоЧерновику(ЭлектронныйДокумент, ЧерновикДокумента) Экспорт + + СтандартнаяОбработка = Истина; + + ПараметрыОбработчика = Новый Структура; + ПараметрыОбработчика.Вставить("ЭлектронныйДокумент", ЭлектронныйДокумент); + ПараметрыОбработчика.Вставить("ЧерновикДокумента", ЧерновикДокумента); + ОбработчикЗавершения = Новый ОписаниеОповещения("ПослеСозданияДокументаПоЧерновику", + ЭтотОбъект, ПараметрыОбработчика); + + ПриВыполненииКомандыСоздатьДокументПоЧерновику(СтандартнаяОбработка, + ЭлектронныйДокумент, ЧерновикДокумента, ОбработчикЗавершения); + + Если Не СтандартнаяОбработка Тогда + Возврат; + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти // ИнтерфейсДокументовЭДО + +#КонецОбласти // ДляВызоваИзДругихПодсистем + +#КонецОбласти // СлужебныйПрограммныйИнтерфейс + +#Область СлужебныеПроцедурыИФункции + +// Параметры: +// СтандартнаяОбработка - Булево - выходной, переопределяемый параметр. +// ЭлектронныйДокумент - ДокументСсылка.ЭлектронныйДокументВходящийЭДО +// ЧерновикДокумента - ДокументСсылка.ЧерновикЭлектронногоДокументаЭДО +// ОбработчикЗавершения - ОписаниеОповещения - обработчик, который необходимо вызвать после выполнения команды. +Процедура ПриВыполненииКомандыСоздатьДокументПоЧерновику(СтандартнаяОбработка, + Знач ЭлектронныйДокумент, Знач ЧерновикДокумента, Знач ОбработчикЗавершения) + + СтандартнаяОбработка = Истина; + + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("ЭлектронноеВзаимодействие.ОбменСГИСЭПД") Тогда + МодульОбменСГИСЭПД = ОбщегоНазначенияКлиент.ОбщийМодуль("ОбменСГИСЭПДКлиент"); + МодульОбменСГИСЭПД.ПриВыполненииКомандыСоздатьДокументПоЧерновику( + СтандартнаяОбработка, ЭлектронныйДокумент, ЧерновикДокумента, ОбработчикЗавершения); + КонецЕсли; + +КонецПроцедуры + +// Параметры: +// Результат - Неопределено +// - См. ИнтерфейсДокументовЭДОКлиентСервер.НовыйИтогВыполненияДействийПоЭДО +// ПараметрыОбработчика - Структура: +// * ЭлектронныйДокумент - ДокументСсылка.ЭлектронныйДокументВходящийЭДО +// * ЧерновикДокумента - ДокументСсылка.ЧерновикЭлектронногоДокументаЭДО +Процедура ПослеСозданияДокументаПоЧерновику(Результат, ПараметрыОбработчика) Экспорт + + Если Не ЗначениеЗаполнено(Результат) + Или Не ЗначениеЗаполнено(Результат.ОбработанныеДокументы) Тогда + Возврат; + КонецЕсли; + + КонтекстДиагностики = ОбработкаНеисправностейБЭДКлиент.НовыйКонтекстДиагностики(); + ЧерновикиЭДОВызовСервера.ПослеСозданияЭлектронногоДокументаПоЧерновику(ПараметрыОбработчика.ЧерновикДокумента, + КонтекстДиагностики); + + Если ОбработкаНеисправностейБЭДКлиентСервер.ЕстьОшибки(КонтекстДиагностики) Тогда + ОбработкаНеисправностейБЭДКлиент.ОбработатьОшибки(КонтекстДиагностики); + Возврат; + КонецЕсли; + + ПараметрыСобытия = ИнтерфейсДокументовЭДОКлиент.НовыеПараметрыСобытияОбновленияСостоянияЭДО(); + ПараметрыСобытия.ЭлектронныеДокументы.Добавить(ПараметрыОбработчика.ЭлектронныйДокумент); + Оповестить(ИнтерфейсДокументовЭДОКлиент.ИмяСобытияОбновленияСостоянияЭДО(), ПараметрыСобытия); + +КонецПроцедуры + +#КонецОбласти // СлужебныеПроцедурыИФункции \ No newline at end of file diff --git a/Конфигурация/CommonModules/ЧерновикиЭДОКлиентСервер.xml b/Конфигурация/CommonModules/ЧерновикиЭДОКлиентСервер.xml new file mode 100644 index 000000000..06ccc4d46 --- /dev/null +++ b/Конфигурация/CommonModules/ЧерновикиЭДОКлиентСервер.xml @@ -0,0 +1,23 @@ + + + + + ЧерновикиЭДОКлиентСервер + + + ru + Черновики ЭДО клиент сервер + + + + false + true + true + true + true + false + false + DontUse + + + \ No newline at end of file diff --git a/Конфигурация/CommonModules/ЧерновикиЭДОКлиентСервер/Ext/Module.bsl b/Конфигурация/CommonModules/ЧерновикиЭДОКлиентСервер/Ext/Module.bsl new file mode 100644 index 000000000..5f6dd448b --- /dev/null +++ b/Конфигурация/CommonModules/ЧерновикиЭДОКлиентСервер/Ext/Module.bsl @@ -0,0 +1,32 @@ +#Область СлужебныйПрограммныйИнтерфейс + +// Возвращаемое значение: +// Структура: +// * ВидЧерновика - СправочникСсылка.ВидыДокументовЭДО +// * НомерДокумента - Строка +// * ДатаДокумента - Дата +Функция НовыеСвойстваДокументаДляПолученияПредставленияЧерновика() Экспорт + Результат = Новый Структура; + Результат.Вставить("ВидЧерновика", ПредопределенноеЗначение("Справочник.ВидыДокументовЭДО.ПустаяСсылка")); + Результат.Вставить("НомерДокумента", ""); + Результат.Вставить("ДатаДокумента", Дата(1, 1, 1)); + Возврат Результат; +КонецФункции + +// Параметры: +// Поля - Массив из Строка +Процедура ПриОпределенииПолейПредставленияДокумента(Поля) Экспорт + Поля.Добавить("ПредставлениеЧерновика"); +КонецПроцедуры + +// Параметры: +// Представление - Строка +// СвойстваДокумента - См. ПредставлениеДокументаПоСвойствам.СвойстваДокумента +Процедура ПриОпределенииПредставленияДокументаПоСвойствам(Представление, СвойстваДокумента) Экспорт + Если ОбщегоНазначенияКлиентСервер.ЕстьРеквизитИлиСвойствоОбъекта(СвойстваДокумента, "ПредставлениеЧерновика") + И ЗначениеЗаполнено(СвойстваДокумента.ПредставлениеЧерновика) Тогда + Представление = СвойстваДокумента.ПредставлениеЧерновика; + КонецЕсли; +КонецПроцедуры + +#КонецОбласти // СлужебныйПрограммныйИнтерфейс \ No newline at end of file diff --git a/Конфигурация/CommonModules/ЧерновикиЭДОПовтИсп.xml b/Конфигурация/CommonModules/ЧерновикиЭДОПовтИсп.xml new file mode 100644 index 000000000..849b40bf8 --- /dev/null +++ b/Конфигурация/CommonModules/ЧерновикиЭДОПовтИсп.xml @@ -0,0 +1,23 @@ + + + + + ЧерновикиЭДОПовтИсп + + + ru + Черновики ЭДО повт исп + + + + false + false + true + true + true + false + false + DuringSession + + + \ No newline at end of file diff --git a/Конфигурация/CommonModules/ЧерновикиЭДОПовтИсп/Ext/Module.bsl b/Конфигурация/CommonModules/ЧерновикиЭДОПовтИсп/Ext/Module.bsl new file mode 100644 index 000000000..e62549627 --- /dev/null +++ b/Конфигурация/CommonModules/ЧерновикиЭДОПовтИсп/Ext/Module.bsl @@ -0,0 +1,12 @@ +// @strict-types + +#Область СлужебныйПрограммныйИнтерфейс + +// См. ЧерновикиЭДО.ЭтоЧерновик +Функция ЭтоЧерновик(Ссылка) Экспорт + + Возврат ЧерновикиЭДО.ЭтоЧерновик(Ссылка); + +КонецФункции + +#КонецОбласти \ No newline at end of file diff --git a/Конфигурация/CommonModules/ШтрихкодированиеИС/Ext/Module.bsl b/Конфигурация/CommonModules/ШтрихкодированиеИС/Ext/Module.bsl index b1552f5b7..6b0307ec9 100644 --- a/Конфигурация/CommonModules/ШтрихкодированиеИС/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ШтрихкодированиеИС/Ext/Module.bsl @@ -2382,18 +2382,19 @@ // Подготовка таблицы Товаров ТаблицаТовары = Новый ТаблицаЗначений(); - ТаблицаТовары.Колонки.Добавить("Номенклатура", Метаданные.ОпределяемыеТипы.Номенклатура.Тип); - ТаблицаТовары.Колонки.Добавить("Характеристика", Метаданные.ОпределяемыеТипы.ХарактеристикаНоменклатуры.Тип); - ТаблицаТовары.Колонки.Добавить("Упаковка", Метаданные.ОпределяемыеТипы.Упаковка.Тип); - ТаблицаТовары.Колонки.Добавить("Серия", Метаданные.ОпределяемыеТипы.СерияНоменклатуры.Тип); - ТаблицаТовары.Колонки.Добавить("Количество", ОбщегоНазначения.ОписаниеТипаЧисло(15, 3)); - ТаблицаТовары.Колонки.Добавить("Цена", ОбщегоНазначения.ОписаниеТипаЧисло(15, 3)); - ТаблицаТовары.Колонки.Добавить("Сумма", ОбщегоНазначения.ОписаниеТипаЧисло(15, 3)); - ТаблицаТовары.Колонки.Добавить("КоличествоУпаковок", ОбщегоНазначения.ОписаниеТипаЧисло(15, 3)); - ТаблицаТовары.Колонки.Добавить("Приоритет", ОбщегоНазначения.ОписаниеТипаЧисло(3)); - ТаблицаТовары.Колонки.Добавить("ИндексИсходнойСтроки", ОбщегоНазначения.ОписаниеТипаЧисло(10)); - ТаблицаТовары.Колонки.Добавить("ТребуетсяКодМаркировки", Новый ОписаниеТипов("Булево")); - ТаблицаТовары.Колонки.Добавить("УпаковкаОтсутствует", Новый ОписаниеТипов("Булево")); + ТаблицаТовары.Колонки.Добавить("Номенклатура", Метаданные.ОпределяемыеТипы.Номенклатура.Тип); + ТаблицаТовары.Колонки.Добавить("Характеристика", Метаданные.ОпределяемыеТипы.ХарактеристикаНоменклатуры.Тип); + ТаблицаТовары.Колонки.Добавить("Упаковка", Метаданные.ОпределяемыеТипы.Упаковка.Тип); + ТаблицаТовары.Колонки.Добавить("Серия", Метаданные.ОпределяемыеТипы.СерияНоменклатуры.Тип); + ТаблицаТовары.Колонки.Добавить("Количество", ОбщегоНазначения.ОписаниеТипаЧисло(15, 3)); + ТаблицаТовары.Колонки.Добавить("КоличествоПоСтрокеТоваров", ОбщегоНазначения.ОписаниеТипаЧисло(15, 3)); + ТаблицаТовары.Колонки.Добавить("Цена", ОбщегоНазначения.ОписаниеТипаЧисло(15, 3)); + ТаблицаТовары.Колонки.Добавить("Сумма", ОбщегоНазначения.ОписаниеТипаЧисло(15, 3)); + ТаблицаТовары.Колонки.Добавить("КоличествоУпаковок", ОбщегоНазначения.ОписаниеТипаЧисло(15, 3)); + ТаблицаТовары.Колонки.Добавить("Приоритет", ОбщегоНазначения.ОписаниеТипаЧисло(3)); + ТаблицаТовары.Колонки.Добавить("ИндексИсходнойСтроки", ОбщегоНазначения.ОписаниеТипаЧисло(10)); + ТаблицаТовары.Колонки.Добавить("ТребуетсяКодМаркировки", Новый ОписаниеТипов("Булево")); + ТаблицаТовары.Колонки.Добавить("УпаковкаОтсутствует", Новый ОписаниеТипов("Булево")); Для Каждого СтрокаТовары Из Товары Цикл @@ -2408,6 +2409,7 @@ НоваяСтрока.ТребуетсяКодМаркировки = (НоваяСтрока.Количество > 0); НоваяСтрока.УпаковкаОтсутствует = Не ЗначениеЗаполнено(НоваяСтрока.Упаковка); + НоваяСтрока.КоличествоПоСтрокеТоваров = НоваяСтрока.Количество; КонецЦикла; @@ -2634,9 +2636,10 @@ ЗаполнитьКоличествоЧастичноеВыбытие.Добавить(ЭлементОбработки); КонецЕсли; - РезультатСписания.Количество = СтрокаШтрихкод.Количество; - РезультатСписания.КодМаркировки = СтрокаШтрихкод.Штрихкод; - РезультатСписания.Сумма = СтрокаТовары.Сумма; + РезультатСписания.Количество = СтрокаШтрихкод.Количество; + РезультатСписания.КодМаркировки = СтрокаШтрихкод.Штрихкод; + РезультатСписания.Сумма = СтрокаТовары.Сумма; + РезультатСписания.КоличествоПоСтрокеТоваров = СтрокаТовары.КоличествоПоСтрокеТоваров; ОбработкаИтоговойСтрокиРаспределения(РезультатСписания, СтрокаШтрихкод, ПараметрыНормализацииКМ, ПараметрыНормализацииМОТП, ПараметрыНормализацииИСМП); @@ -4836,7 +4839,10 @@ КонецЦикла; - ДанныеПоШтрихкодам.ВидыПродукции = ОбщегоНазначенияКлиентСервер.СвернутьМассив(ДанныеКодовМаркировки.ВыгрузитьКолонку("ВидПродукции")); + Если ТипЗнч(ДеревоУпаковок) = Тип("ДеревоЗначений") Тогда + ДанныеПоШтрихкодам.ВидыПродукции = ОбщегоНазначенияКлиентСервер.СвернутьМассив( + ДанныеПоШтрихкодам.ДанныеКодовМаркировки.ВыгрузитьКолонку("ВидПродукции")); + КонецЕсли; КонецПроцедуры diff --git a/Конфигурация/CommonModules/ШтрихкодированиеИСКлиентСервер/Ext/Module.bsl b/Конфигурация/CommonModules/ШтрихкодированиеИСКлиентСервер/Ext/Module.bsl index daa13bf55..96de7d88b 100644 --- a/Конфигурация/CommonModules/ШтрихкодированиеИСКлиентСервер/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ШтрихкодированиеИСКлиентСервер/Ext/Module.bsl @@ -80,6 +80,7 @@ // * Количество - Число - Количество базовых единиц. // * КоличествоУпаковок - Число - Устарел. Количество упаковок. // * КоличествоПотребительскихУпаковок - Число - Количество потребительских упаковок. +// * КоличествоПоСтрокеТоваров - Число - количество по строке товаров. // * Штрихкод - Строка - Строковое представление кода маркиаровки. // * ВидПродукции - СправочникСсылка.ВидыПродукцииИС, Неопределено - Вид продукции. // * ВидУпаковки - ПеречислениеСсылка.ВидыУпаковокИС, Неопределено - Вид упаковки. @@ -109,6 +110,7 @@ ВозвращаемоеЗначение.Вставить("Количество", 0); ВозвращаемоеЗначение.Вставить("КоличествоПотребительскихУпаковок", 0); ВозвращаемоеЗначение.Вставить("КоличествоУпаковок", 0); + ВозвращаемоеЗначение.Вставить("КоличествоПоСтрокеТоваров", 0); ВозвращаемоеЗначение.Вставить("Штрихкод", ""); ВозвращаемоеЗначение.Вставить("ВидПродукции", Неопределено); ВозвращаемоеЗначение.Вставить("ВидУпаковки", Неопределено); diff --git a/Конфигурация/CommonModules/ШтрихкодированиеИСМПКлиент/Ext/Module.bsl b/Конфигурация/CommonModules/ШтрихкодированиеИСМПКлиент/Ext/Module.bsl index 2c9b9b84f..179c046aa 100644 --- a/Конфигурация/CommonModules/ШтрихкодированиеИСМПКлиент/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ШтрихкодированиеИСМПКлиент/Ext/Module.bsl @@ -16,7 +16,7 @@ ЭлементДанных, РезультатРаспределения, "ВидПродукции,ВидУпаковки,КодМаркировки,ПолныйКодМаркировки,СоставКодаМаркировки,ШтрихкодУпаковки,Сумма,ЗапрещеноИгнорироватьОшибку, - |Количество,ТекстОшибки,КодЕдиницыИзмерения,КоличествоПотребительскихУпаковок,МинимальнаяРозничнаяЦена, + |Количество,ТекстОшибки,КодЕдиницыИзмерения,КоличествоПотребительскихУпаковок,КоличествоПоСтрокеТоваров,МинимальнаяРозничнаяЦена, |РазрешительныйРежимИдентификаторЗапросаГИСМТ,РазрешительныйРежимДатаЗапросаГИСМТ,РазрешительныйРежимИдентификаторЭкземпляраПО,РазрешительныйРежимВерсияБазы"); Если РезультатРаспределения.ЧастичноеВыбытие diff --git a/Конфигурация/CommonModules/ШтрихкодированиеИСМПСлужебный/Ext/Module.bsl b/Конфигурация/CommonModules/ШтрихкодированиеИСМПСлужебный/Ext/Module.bsl index c2ee9a1f2..dbbbdc963 100644 --- a/Конфигурация/CommonModules/ШтрихкодированиеИСМПСлужебный/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ШтрихкодированиеИСМПСлужебный/Ext/Module.bsl @@ -1606,10 +1606,6 @@ ШтрихкодированиеОбщегоНазначенияИС.ДополнитьДанныеШтрихкодовСпецификойМаркируемойПродукции(ДанныеПоШтрихкодам, ПараметрыСканирования, ПараметрыДополнения, Истина); - Если ДопустимаПродукцияИСМП Или ДопустимаТабачнаяПродукция Тогда - ШтрихкодированиеОбщегоНазначенияИСМП.ЗаполнитьДанныеИдентификатораРозничнойПродажиПоОбязательнымТоварнымГруппам(ДанныеПоШтрихкодам, ПараметрыСканирования); - КонецЕсли; - НормализоватьДанныеДереваУпаковок( ВложенныеШтрихкодыИзвестныхУпаковок.ДеревоУпаковок, ПараметрыСканирования, ДанныеПоШтрихкодам.ДанныеКодовМаркировки); @@ -7222,7 +7218,7 @@ КонецПроцедуры Процедура ЗаполнитьСтрокуИнформациейОПродукцииПоДаннымСервиса(СтрокаТаблицы, ДанныеПоGTIN) - + Если ЗначениеЗаполнено(ДанныеПоGTIN.ОКПД2) И Не ЗначениеЗаполнено(СтрокаТаблицы.КодОКПД2) Тогда СтрокаТаблицы.КодОКПД2 = ДанныеПоGTIN.ОКПД2; @@ -7231,14 +7227,15 @@ И Не ЗначениеЗаполнено(СтрокаТаблицы.ГруппаОКПД2) Тогда СтрокаТаблицы.ГруппаОКПД2 = ДанныеПоGTIN.ГруппаОКПД2; КонецЕсли; - + СтрокаТаблицы.КодАлкогольнойПродукции = ДанныеПоGTIN.КодАлкогольнойПродукции; СтрокаТаблицы.ПодлежитВетеринарномуКонтролю = ДанныеПоGTIN.ПодлежитВетеринарномуКонтролю; - + СтрокаТаблицы.ДанныеПродукции = ДанныеПоGTIN; + Если СтрокаТаблицы.СтрокаДерева = Неопределено Тогда Возврат; КонецЕсли; - + Если ЗначениеЗаполнено(ДанныеПоGTIN.ОКПД2) И Не ЗначениеЗаполнено(СтрокаТаблицы.СтрокаДерева.КодОКПД2) Тогда СтрокаТаблицы.СтрокаДерева.КодОКПД2 = ДанныеПоGTIN.ОКПД2; @@ -7247,10 +7244,11 @@ И Не ЗначениеЗаполнено(СтрокаТаблицы.СтрокаДерева.ГруппаОКПД2) Тогда СтрокаТаблицы.СтрокаДерева.ГруппаОКПД2 = ДанныеПоGTIN.ГруппаОКПД2; КонецЕсли; - + СтрокаТаблицы.СтрокаДерева.КодАлкогольнойПродукции = ДанныеПоGTIN.КодАлкогольнойПродукции; СтрокаТаблицы.СтрокаДерева.ПодлежитВетеринарномуКонтролю = ДанныеПоGTIN.ПодлежитВетеринарномуКонтролю; - + СтрокаТаблицы.СтрокаДерева.ДанныеПродукции = ДанныеПоGTIN; + КонецПроцедуры // Выполняет заполнение представления номенклатуры по данным, полученным из сервиса ИСМП. diff --git a/Конфигурация/CommonModules/ШтрихкодированиеИСПереопределяемый/Ext/Module.bsl b/Конфигурация/CommonModules/ШтрихкодированиеИСПереопределяемый/Ext/Module.bsl index 7e6ddf2e7..d6d8c2a3e 100644 --- a/Конфигурация/CommonModules/ШтрихкодированиеИСПереопределяемый/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ШтрихкодированиеИСПереопределяемый/Ext/Module.bsl @@ -1,6 +1,6 @@ #Область ПрограммныйИнтерфейс -// Заполняет соответствие штрихкодов данными: Номенклатура, Храктеристика, МаркируемаяПродукция, Коэффициент. +// Заполняет соответствие штрихкодов данными: Номенклатура, Характеристика, МаркируемаяПродукция, Коэффициент. // // Параметры: // Штрихкоды - Соответствие - Список штрихкодов. diff --git a/Конфигурация/CommonModules/ШтрихкодированиеМОТП/Ext/Module.bsl b/Конфигурация/CommonModules/ШтрихкодированиеМОТП/Ext/Module.bsl index 70a361307..11f875476 100644 --- a/Конфигурация/CommonModules/ШтрихкодированиеМОТП/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ШтрихкодированиеМОТП/Ext/Module.bsl @@ -2333,7 +2333,8 @@ КоллекцияДополнительныхКолонок.Вставить("ИмяТоварнойГруппы", Новый ОписаниеТипов("Строка")); КоллекцияДополнительныхКолонок.Вставить("ИдентификаторПроизводственногоВСД", Новый ОписаниеТипов("Строка")); КоллекцияДополнительныхКолонок.Вставить("ПодлежитВетеринарномуКонтролю"); - + КоллекцияДополнительныхКолонок.Вставить("ДанныеПродукции"); + Возврат КоллекцияДополнительныхКолонок; КонецФункции diff --git a/Конфигурация/CommonModules/ШтрихкодированиеОбщегоНазначенияИС/Ext/Module.bsl b/Конфигурация/CommonModules/ШтрихкодированиеОбщегоНазначенияИС/Ext/Module.bsl index 025924bb9..39acc971a 100644 --- a/Конфигурация/CommonModules/ШтрихкодированиеОбщегоНазначенияИС/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ШтрихкодированиеОбщегоНазначенияИС/Ext/Module.bsl @@ -3647,6 +3647,46 @@ КонецФункции +Функция ОписаниеНоменклатурыПоGTINИзКеша(GTIN) Экспорт + + ОписаниеНоменклатурыПоGTIN = Неопределено; + + РезультатЧтенияКеша = ОбщегоНазначенияИСКлиентСервер.ПрочитатьНовыйКеш("КешGTIN", GTIN); + Если РезультатЧтенияКеша <> Неопределено + И РезультатЧтенияКеша.Результат = Неопределено Тогда + + ДанныеПоШтрихкодамEANРезультат = ДанныеПоШтрихкодамEAN( + ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(GTIN)); + Для Каждого СтрокаТЧ Из ДанныеПоШтрихкодамEANРезультат.ДанныеПоШтрихкодамEAN Цикл + + Если ОбщегоНазначенияИСПовтИсп.ЭтоПродукцияИСМП(СтрокаТЧ.ВидПродукции, Истина) Тогда + + ВидПродукцииКлюча = КонструкторИСОбщегоНазначенияКлиентСервер.ВидПродукцииКлючаПоПодсистеме(СтрокаТЧ.ВидПродукции, "ГИСМТ"); + + ОписаниеНоменклатурыПоGTIN = Новый Структура( + "ВидПродукции, ВидУпаковки, КоличествоПотребительскихУпаковок", + ВидПродукцииКлюча, СтрокаТЧ.ВидУпаковкиИС, СтрокаТЧ.ПлановоеКоличествоПотребительскихУпаковок); + ОбщегоНазначенияИСКлиентСервер.ЗаписатьВКеш(РезультатЧтенияКеша, ОписаниеНоменклатурыПоGTIN); + + Прервать; + + КонецЕсли; + + КонецЦикла; + + Если ОписаниеНоменклатурыПоGTIN = Неопределено Тогда + ОписаниеНоменклатурыПоGTIN = Новый Структура( + "ВидПродукции, ВидУпаковки, КоличествоПотребительскихУпаковок", + Неопределено, Неопределено, 0); + ОбщегоНазначенияИСКлиентСервер.ЗаписатьВКеш(РезультатЧтенияКеша, ОписаниеНоменклатурыПоGTIN); + КонецЕсли; + + КонецЕсли; + + Возврат ОписаниеНоменклатурыПоGTIN; + +КонецФункции + #КонецОбласти #КонецОбласти @@ -3953,8 +3993,8 @@ И Не ЗначениеЗаполнено(ВидПродукции) Тогда Если СтрокаДанных.ВидУпаковки = Перечисления.ВидыУпаковокИС.Логистическая - И СтрокаДанных.СтрокаДерева <> Неопределено - И СтрокаДанных.СтрокаДерева.Строки.Количество() = 0 + И ((СтрокаДанных.СтрокаДерева <> Неопределено И СтрокаДанных.СтрокаДерева.Строки.Количество() = 0) + Или СтрокаДанных.СтрокаДерева = Неопределено) И ПараметрыСканирования.РазрешенаОбработкаНеНайденныхЛогистическихУпаковок Тогда Продолжить; КонецЕсли; diff --git a/Конфигурация/CommonModules/ШтрихкодированиеОбщегоНазначенияИСМП/Ext/Module.bsl b/Конфигурация/CommonModules/ШтрихкодированиеОбщегоНазначенияИСМП/Ext/Module.bsl index d3dbdf681..c8420b447 100644 --- a/Конфигурация/CommonModules/ШтрихкодированиеОбщегоНазначенияИСМП/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ШтрихкодированиеОбщегоНазначенияИСМП/Ext/Module.bsl @@ -1748,8 +1748,14 @@ КонтролироватьСтатусы = НастройкаПараметровСканированияСлужебныйКлиентСерверПовтИсп.КонтролироватьСтатусыКодовМаркировки( СтрокаДанных.ВидПродукции, ПараметрыСканирования.ВидОперацииИСМП, ПараметрыСканирования.ТребуетсяПроверкаСредствамиККТ Или ПараметрыСканирования.ЭтоОблачнаяККТИСМП); КонецЕсли; - - СтрокаДанных.ОтключитьЗапросВСервисПоОперацииИПродукции = Не КонтролироватьВладельцев И Не КонтролироватьСтатусы; + + Если Не ЗначениеЗаполнено(СтрокаДанных.ВидПродукции) + И ОбщегоНазначенияИСМПКлиентСерверПовтИсп.ЭтоРозничнаяПродажаСИспользованиемПроверкиМарокНаКассе(ПараметрыСканирования.ВидОперацииИСМП, + ПараметрыСканирования.ТребуетсяПроверкаСредствамиККТ Или ПараметрыСканирования.ЭтоОблачнаяККТИСМП) Тогда + СтрокаДанных.ОтключитьЗапросВСервисПоОперацииИПродукции = Истина; + Иначе + СтрокаДанных.ОтключитьЗапросВСервисПоОперацииИПродукции = Не КонтролироватьВладельцев И Не КонтролироватьСтатусы; + КонецЕсли; КонецПроцедуры diff --git a/Конфигурация/CommonModules/ШтрихкодированиеОбщегоНазначенияИСМПКлиент/Ext/Module.bsl b/Конфигурация/CommonModules/ШтрихкодированиеОбщегоНазначенияИСМПКлиент/Ext/Module.bsl index dbc0a2d3b..0af0aeb39 100644 --- a/Конфигурация/CommonModules/ШтрихкодированиеОбщегоНазначенияИСМПКлиент/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ШтрихкодированиеОбщегоНазначенияИСМПКлиент/Ext/Module.bsl @@ -1569,7 +1569,7 @@ Продолжить; КонецЕсли; - ЦенаПродажиЕдиницы = Окр(ЭлементПроверки.Сумма / ЭлементПроверки.Количество, 2); + ЦенаПродажиЕдиницы = Окр(ЭлементПроверки.Сумма / ЭлементПроверки.КоличествоПоСтрокеТоваров * ЭлементПроверки.КоличествоПотребительскихУпаковок, 2); ШаблонОшибкиПроверкаПоМРЦ = НСтр("ru = 'Минимальная розничная цена по данным ГИС МТ - %1 руб. |Продажа по цене %2 руб. запрещена.'"); ТекстОшибкиПроверкаПоМРЦ = СтрШаблон(ШаблонОшибкиПроверкаПоМРЦ, ЭлементПроверки.МинимальнаяРозничнаяЦена, ЦенаПродажиЕдиницы); diff --git a/Конфигурация/CommonModules/ШтрихкодированиеОбщегоНазначенияИСМПКлиентСервер/Ext/Module.bsl b/Конфигурация/CommonModules/ШтрихкодированиеОбщегоНазначенияИСМПКлиентСервер/Ext/Module.bsl index 40149620a..abe8ca786 100644 --- a/Конфигурация/CommonModules/ШтрихкодированиеОбщегоНазначенияИСМПКлиентСервер/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ШтрихкодированиеОбщегоНазначенияИСМПКлиентСервер/Ext/Module.bsl @@ -132,6 +132,7 @@ // * ТекстОшибки - Строка, Неопределено - текст ошибки распределения. // * ЗапрещеноИгнорироватьОшибку - Булево - Признак запрета пробития чека при наличии такой ошибки // * Количество - Число - количество штук или иной мере (вес, объем и.т.д.). +// * КоличествоПоСтрокеТоваров - Число - количество по строке товаров. // * ЧастичноеВыбытиеКоличество - Число, Неопределено - числитель частичного выбытия. // * ЕмкостьПотребительскойУпаковки - Число, Неопределено - знаменатель частичного выбытия. // * КодЕдиницыИзмерения - Строка, Неопределено - код единицы измерения частично выбытия @@ -169,6 +170,7 @@ ВозвращаемоеЗначение.Вставить("ТекстОшибки", Неопределено); ВозвращаемоеЗначение.Вставить("ЗапрещеноИгнорироватьОшибку", Ложь); ВозвращаемоеЗначение.Вставить("КоличествоПотребительскихУпаковок", 0); + ВозвращаемоеЗначение.Вставить("КоличествоПоСтрокеТоваров", 0); ВозвращаемоеЗначение.Вставить("РазрешительныйРежимИдентификаторЗапросаГИСМТ", ""); ВозвращаемоеЗначение.Вставить("РазрешительныйРежимДатаЗапросаГИСМТ", ""); ВозвращаемоеЗначение.Вставить("РазрешительныйРежимИдентификаторЭкземпляраПО", ""); diff --git a/Конфигурация/CommonModules/ЭлектроннаяПодпись/Ext/Module.bsl b/Конфигурация/CommonModules/ЭлектроннаяПодпись/Ext/Module.bsl index db038b765..9f636fa79 100644 --- a/Конфигурация/CommonModules/ЭлектроннаяПодпись/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ЭлектроннаяПодпись/Ext/Module.bsl @@ -3649,4 +3649,13 @@ #КонецОбласти +// См. СтандартныеПодсистемыСервер.ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод +Процедура ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод(Методы) Экспорт + + Если ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.БазоваяФункциональность") Тогда + Методы.Вставить("ПродлениеДостоверностиПодписей"); + КонецЕсли; + +КонецПроцедуры + #КонецОбласти \ No newline at end of file diff --git a/Конфигурация/CommonModules/ЭлектроннаяПодписьЛокализация/Ext/Module.bsl b/Конфигурация/CommonModules/ЭлектроннаяПодписьЛокализация/Ext/Module.bsl index 25f082f97..266369539 100644 --- a/Конфигурация/CommonModules/ЭлектроннаяПодписьЛокализация/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ЭлектроннаяПодписьЛокализация/Ext/Module.bsl @@ -770,10 +770,15 @@ // Локализация МодульСервисКриптографииDSSСлужебный = ОбщегоНазначения.ОбщийМодуль("СервисКриптографииDSSСлужебный"); - МассивСертификатов = МодульСервисКриптографииDSSСлужебный.ПолучитьДанныеСертификатов(Ложь); + МассивСертификатов = МодульСервисКриптографииDSSСлужебный.ПолучитьВсеСертификаты(Ложь); Для Каждого Сертификат Из МассивСертификатов Цикл - МассивОтпечатков.Добавить(Base64Строка(Сертификат.Отпечаток)); + Если ЗначениеЗаполнено(Сертификат.Отпечаток) Тогда + ДанныеОтпечатка = Base64Строка(ПолучитьДвоичныеДанныеИзHexСтроки(Сертификат.Отпечаток)); + Если ЗначениеЗаполнено(ДанныеОтпечатка) Тогда + МассивОтпечатков.Добавить(ДанныеОтпечатка); + КонецЕсли; + КонецЕсли; КонецЦикла; // Конец Локализация @@ -789,8 +794,16 @@ // Локализация МодульСервисКриптографииDSSСлужебный = ОбщегоНазначения.ОбщийМодуль("СервисКриптографииDSSСлужебный"); - МассивСертификатов = МодульСервисКриптографииDSSСлужебный.ПолучитьДанныеСертификатов(Ложь); - + МассивСертификатов = Новый Массив; + Сертификаты = МодульСервисКриптографииDSSСлужебный.ПолучитьВсеСертификаты(Истина); + + Для каждого СтрокаТаблицы Из Сертификаты Цикл + ДанныеСертификата = СтрокаТаблицы.ДанныеСертификата.Получить(); + Если ЗначениеЗаполнено(ДанныеСертификата) Тогда + МассивСертификатов.Добавить(Новый СертификатКриптографии(ДанныеСертификата)); + КонецЕсли; + КонецЦикла; + ПараметрыДобавленияСвойств = Новый Структура("ОблачнаяПодпись", Истина); ЭлектроннаяПодписьСлужебныйКлиентСервер.ДобавитьСвойстваСертификатов(ТаблицаСвойствСертификатов, @@ -966,6 +979,15 @@ КонецПроцедуры +// См. СтандартныеПодсистемыСервер.ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод +Процедура ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод(Методы) Экспорт + + Если ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.БазоваяФункциональность") Тогда + Методы.Вставить("ОбновлениеСостоянияЗаявленияНаВыпускСертификата"); + КонецЕсли; + +КонецПроцедуры + #КонецОбласти // Конец Локализация \ No newline at end of file diff --git a/Конфигурация/CommonModules/ЭлектроннаяПодписьСлужебный/Ext/Module.bsl b/Конфигурация/CommonModules/ЭлектроннаяПодписьСлужебный/Ext/Module.bsl index 354d359f4..f5497e8bb 100644 --- a/Конфигурация/CommonModules/ЭлектроннаяПодписьСлужебный/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ЭлектроннаяПодписьСлужебный/Ext/Module.bsl @@ -3294,14 +3294,11 @@ КонецЕсли; - Если ИспользоватьСервисОблачнойПодписи() Тогда - МодульСервисКриптографииDSSСлужебный = ОбщегоНазначения.ОбщийМодуль("СервисКриптографииDSSСлужебный"); - МассивСертификатов = МодульСервисКриптографииDSSСлужебный.ПолучитьДанныеСертификатов(Ложь); - Для Каждого Элемент Из МассивСертификатов Цикл - СписокСертификатов.Добавить(Base64Строка(Элемент.Отпечаток)); - КонецЦикла; - КонецЕсли; - + ОтпечаткиСертификатовСервиса = ОтпечаткиСертификатовСервиса(); + Для Каждого Отпечаток Из ОтпечаткиСертификатовСервиса Цикл + СписокСертификатов.Добавить(Отпечаток); + КонецЦикла; + КонецПроцедуры // Только для внутреннего использования. diff --git a/Конфигурация/CommonModules/ЭлектроннаяПодписьСлужебныйКлиент/Ext/Module.bsl b/Конфигурация/CommonModules/ЭлектроннаяПодписьСлужебныйКлиент/Ext/Module.bsl index 7bf15d20c..62208039a 100644 --- a/Конфигурация/CommonModules/ЭлектроннаяПодписьСлужебныйКлиент/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ЭлектроннаяПодписьСлужебныйКлиент/Ext/Module.bsl @@ -9252,7 +9252,7 @@ Функция ИспользованиеИнтерактивногоРежимаКриптографииИспользовать() - Возврат Вычислить("ИспользованиеИнтерактивногоРежимаКриптографии.Использовать"); + Возврат Вычислить("ИспользованиеИнтерактивногоРежимаКриптографии.Использовать"); // Не нарушает безопасность информации, так как вычисляется фиксированная строка, содержащая только свойство системного перечисления платформы. КонецФункции diff --git a/Конфигурация/CommonModules/ЭлектроннаяПодписьСлужебныйКлиентСервер/Ext/Module.bsl b/Конфигурация/CommonModules/ЭлектроннаяПодписьСлужебныйКлиентСервер/Ext/Module.bsl index ff1a2b51b..6adeb5c58 100644 --- a/Конфигурация/CommonModules/ЭлектроннаяПодписьСлужебныйКлиентСервер/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ЭлектроннаяПодписьСлужебныйКлиентСервер/Ext/Module.bsl @@ -1529,12 +1529,12 @@ ДатыСертификата = ДатыСертификата(Сертификат, РазницаСУниверсальнымВременем); - Если ДатыСертификата.ДатаОкончания > НачалоДня(НаДату) Тогда + Если ДатыСертификата.ДатаОкончания > НаДату Тогда Возврат ""; КонецЕсли; Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'На %1 просрочен сертификат.'"), Формат(НачалоДня(НаДату), "ДЛФ=D")); + НСтр("ru = 'На %1 просрочен сертификат.'"), НаДату); КонецФункции @@ -1545,12 +1545,12 @@ Возврат ""; КонецЕсли; - Если СвойстваСертификата.ДатаОкончанияЗакрытогоКлюча > НачалоДня(НаДату) Тогда + Если СвойстваСертификата.ДатаОкончанияЗакрытогоКлюча > НаДату Тогда Возврат ""; КонецЕсли; Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'На %1 просрочен закрытый ключ сертификата.'"), Формат(НачалоДня(НаДату), "ДЛФ=D")); + НСтр("ru = 'На %1 просрочен закрытый ключ сертификата.'"), НаДату); КонецФункции diff --git a/Конфигурация/CommonModules/ЭлектроннаяПодписьСлужебныйРФ/Ext/Module.bsl b/Конфигурация/CommonModules/ЭлектроннаяПодписьСлужебныйРФ/Ext/Module.bsl index af546f40f..fe6cb4797 100644 --- a/Конфигурация/CommonModules/ЭлектроннаяПодписьСлужебныйРФ/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ЭлектроннаяПодписьСлужебныйРФ/Ext/Module.bsl @@ -608,7 +608,7 @@ // Функция ВерсияКлассификатора() Экспорт - Возврат "3.0.1.77"; + Возврат "3.0.1.82"; КонецФункции diff --git a/Конфигурация/CommonModules/ЭлектронноеВзаимодействие/Ext/Module.bsl b/Конфигурация/CommonModules/ЭлектронноеВзаимодействие/Ext/Module.bsl index 3372bdd06..cf926df69 100644 --- a/Конфигурация/CommonModules/ЭлектронноеВзаимодействие/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ЭлектронноеВзаимодействие/Ext/Module.bsl @@ -492,6 +492,13 @@ #Область ДляВызоваИзДругихПодсистем +// См. СтандартныеПодсистемыСервер.ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод +Процедура ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод(Методы) Экспорт + + Методы.Вставить("ЗаполнениеДанныхОбновления"); + +КонецПроцедуры + //См. МониторПортала1СИТСПереопределяемый.ПриЗаполненииПараметровСервисов Процедура ПриЗаполненииПараметровСервисов(ПараметрыСервисов) Экспорт diff --git a/Конфигурация/CommonModules/ЭлектронноеВзаимодействиеБПВызовСервера/Ext/Module.bsl b/Конфигурация/CommonModules/ЭлектронноеВзаимодействиеБПВызовСервера/Ext/Module.bsl index 5e270e978..e9950e18f 100644 --- a/Конфигурация/CommonModules/ЭлектронноеВзаимодействиеБПВызовСервера/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ЭлектронноеВзаимодействиеБПВызовСервера/Ext/Module.bsl @@ -279,7 +279,12 @@ Для ИндексВыписки = 0 По КоличествоВыписок - 1 Цикл Выписка = СтрокаТаблицыВыписок.Строки.Получить(ИндексВыписки); НомерСчета = ЗначениеРеквизитаВДереве(Выписка, "Выписки.НомерСтроки.НомерСчета"); - МассивНомеровСчетов.Добавить(НомерСчета); + ИдентификаторЦифровогоСчета = ЗначениеРеквизитаВДереве(Выписка, "Выписки.НомерСтроки.ИдентификаторЦифровогоСчета"); + Если ЗначениеЗаполнено(ИдентификаторЦифровогоСчета) Тогда + МассивНомеровСчетов.Добавить(ИдентификаторЦифровогоСчета); + Иначе + МассивНомеровСчетов.Добавить(НомерСчета); + КонецЕсли; КонецЦикла; ПерваяВыписка = СтрокаТаблицыВыписок.Строки.Получить(0); @@ -301,6 +306,10 @@ ДанныеВыписки.Заголовок.Вставить("ДатаКонца", Формат(ДатаКонца, ФорматДатыРоссия())); ДополнительныеРеквизиты = Новый Структура("Владелец", Организация); + БИК = ЗначениеРеквизитаВДереве(Выписка, "Выписки.НомерСтроки.Банк.БИК"); + Если ЗначениеЗаполнено(БИК) Тогда + ДополнительныеРеквизиты.Вставить("БИК", БИК); + КонецЕсли; МассивНомеровСчетов = ОбщегоНазначенияКлиентСервер.СвернутьМассив(МассивНомеровСчетов); Для Каждого НомерСчета Из МассивНомеровСчетов Цикл @@ -308,68 +317,114 @@ МассивСчетов.Добавить(СчетОрганизации); КонецЦикла; - // Остатки заполняем только в том случае, если это выписка по одному счету. Если МассивНомеровСчетов.Количество() = 1 Тогда ДанныеВыписки.Заголовок.Вставить("РасчСчет", НомерСчета); - - // СекцияРасчСчет - ДанныеВыписки.Условия.РасчСчет.Добавить(НомерСчета); - ДанныеВыписки.Условия.Вставить("ДатаНачала", Формат(ДатаНачала, ФорматДатыРоссия())); - ДанныеВыписки.Условия.Вставить("ДатаКонца", Формат(ДатаКонца, ФорматДатыРоссия())); - - ЗаполнитьОстаткиИОбороты(ДанныеВыписки, СтрокаТаблицыВыписок, ПерваяВыписка, ПоследняяВыписка); Иначе ДанныеВыписки.Заголовок.Вставить("РасчСчет", МассивНомеровСчетов); КонецЕсли; + ТаблицаИтогов = ОбменСБанкамиСлужебный.ТаблицаВыписок(); + Для Каждого Выписка Из СтрокаТаблицыВыписок.Строки Цикл + НомерСчетаВыписки = ЗначениеРеквизитаВДереве(Выписка, "Выписки.НомерСтроки.НомерСчета"); + ИдентификаторЦифровогоСчета = ЗначениеРеквизитаВДереве(Выписка, "Выписки.НомерСтроки.ИдентификаторЦифровогоСчета"); + НачальныйОстаток = ЗначениеРеквизитаВДереве(Выписка, "Выписки.НомерСтроки.НачальныйОстаток"); + ОборотВходящихПлатежей = ЗначениеРеквизитаВДереве(Выписка, "Выписки.НомерСтроки.ОборотВходящихПлатежей"); + ОборотИсходящихПлатежей = ЗначениеРеквизитаВДереве(Выписка, "Выписки.НомерСтроки.ОборотИсходящихПлатежей"); + КонечныйОстаток = ЗначениеРеквизитаВДереве(Выписка, "Выписки.НомерСтроки.КонечныйОстаток"); + НачалоПериода = ЗначениеРеквизитаВДереве(Выписка, "Выписки.НомерСтроки.НачалоПериода"); + КонецПериода = ЗначениеРеквизитаВДереве(Выписка, "Выписки.НомерСтроки.КонецПериода"); + + СтрокаИтогов = ТаблицаИтогов.Найти(НомерСчетаВыписки, "НомерСчета"); + Если СтрокаИтогов = Неопределено Тогда + СтрокаИтогов = ТаблицаИтогов.Добавить(); + СтрокаИтогов.ИдентификаторЦифровогоСчета = ИдентификаторЦифровогоСчета; + СтрокаИтогов.НомерСчета = НомерСчетаВыписки; + СтрокаИтогов.НачалоПериода = НачалоПериода; + СтрокаИтогов.НачальныйОстаток = НачальныйОстаток; + СтрокаИтогов.ОборотВходящихПлатежей = 0; + СтрокаИтогов.ОборотИсходящихПлатежей = 0; + КонецЕсли; + + Если НачалоПериода < СтрокаИтогов.НачалоПериода Тогда + СтрокаИтогов.НачальныйОстаток = НачальныйОстаток; + КонецЕсли; + + Если Не ЗначениеЗаполнено(СтрокаИтогов.КонецПериода) Или КонецПериода > СтрокаИтогов.КонецПериода Тогда + СтрокаИтогов.КонечныйОстаток = КонечныйОстаток; + КонецЕсли; + + СтрокаИтогов.НачалоПериода = Мин(НачалоПериода, СтрокаИтогов.НачалоПериода); + СтрокаИтогов.КонецПериода = + Макс(КонецПериода, ?(ЗначениеЗаполнено(СтрокаИтогов.КонецПериода), СтрокаИтогов.КонецПериода, '00010101')); + + СтрокаИтогов.ОборотВходящихПлатежей = СтрокаИтогов.ОборотВходящихПлатежей + + ?(ЗначениеЗаполнено(ОборотВходящихПлатежей), ОборотВходящихПлатежей, 0); + СтрокаИтогов.ОборотИсходящихПлатежей = СтрокаИтогов.ОборотИсходящихПлатежей + + ?(ЗначениеЗаполнено(ОборотИсходящихПлатежей), ОборотИсходящихПлатежей, 0); + КонецЦикла; + + ЗаполнитьОстаткиИОбороты(ДанныеВыписки, ТаблицаИтогов); + КонецПроцедуры -Процедура ЗаполнитьОстаткиИОбороты(ДанныеВыписки, СтрокаТаблицыВыписок, ПерваяВыписка, ПоследняяВыписка) +Процедура ЗаполнитьОстаткиИОбороты(ДанныеВыписки, ТаблицаИтогов) - СтрокаОстатка = ДанныеВыписки.Остатки.Добавить(); - - ЕстьОстатки = Ложь; - НачальныйОстаток = ЗначениеРеквизитаВДереве(ПерваяВыписка, "Выписки.НомерСтроки.НачальныйОстаток"); - Если ЗначениеЗаполнено(НачальныйОстаток) Тогда - СтрокаОстатка.НачальныйОстаток = Формат(НачальныйОстаток, "ЧРД=.; ЧГ="); - ЕстьОстатки = Истина; - КонецЕсли; - - ВсегоПоступило = 0; - ВсегоСписано = 0; - - Для Каждого Выписка Из СтрокаТаблицыВыписок.Строки Цикл - ТекВсегоПоступило = ЗначениеРеквизитаВДереве(Выписка, "Выписки.НомерСтроки.ОборотВходящихПлатежей"); - Если ЗначениеЗаполнено(ТекВсегоПоступило) Тогда - ВсегоПоступило = ВсегоПоступило + ТекВсегоПоступило; + ДатаНачала = '00010101'; + ДатаКонца = '00010101'; + Для Каждого СтрокаИтогов Из ТаблицаИтогов Цикл + СтрокаОстатка = ДанныеВыписки.Остатки.Добавить(); + + ЕстьОстатки = Ложь; + Если ЗначениеЗаполнено(СтрокаИтогов.НачальныйОстаток) Тогда + СтрокаОстатка.НачальныйОстаток = СтрокаИтогов.НачальныйОстаток; + ЕстьОстатки = Истина; КонецЕсли; - ТекВсегоСписано = ЗначениеРеквизитаВДереве(Выписка, "Выписки.НомерСтроки.ОборотИсходящихПлатежей"); - Если ЗначениеЗаполнено(ТекВсегоСписано) Тогда - ВсегоСписано = ВсегоСписано + ТекВсегоСписано; + + Если ЗначениеЗаполнено(СтрокаИтогов.ОборотВходящихПлатежей) Тогда + СтрокаОстатка.ВсегоПоступило = СтрокаИтогов.ОборотВходящихПлатежей; + ЕстьОстатки = Истина; + КонецЕсли; + + Если ЗначениеЗаполнено(СтрокаИтогов.ОборотИсходящихПлатежей) Тогда + СтрокаОстатка.ВсегоСписано = СтрокаИтогов.ОборотИсходящихПлатежей; + ЕстьОстатки = Истина; + КонецЕсли; + + Если ЗначениеЗаполнено(СтрокаИтогов.КонечныйОстаток) Тогда + СтрокаОстатка.КонечныйОстаток = СтрокаИтогов.КонечныйОстаток; + ЕстьОстатки = Истина; + КонецЕсли; + + Если ЕстьОстатки Тогда + Если ЗначениеЗаполнено(СтрокаИтогов.ИдентификаторЦифровогоСчета) Тогда + СтрокаОстатка.РасчСчет = СтрокаИтогов.ИдентификаторЦифровогоСчета; + Иначе + СтрокаОстатка.РасчСчет = СтрокаИтогов.НомерСчета; + КонецЕсли; + + СтрокаОстатка.ДатаНачала = СтрокаИтогов.НачалоПериода; + СтрокаОстатка.ДатаКонца = СтрокаИтогов.КонецПериода; + + Если ЗначениеЗаполнено(ДатаНачала) Тогда + ДатаНачала = Мин(ДатаНачала, СтрокаОстатка.ДатаНачала); + Иначе + ДатаНачала = СтрокаОстатка.ДатаНачала; + КонецЕсли; + + ДатаКонца = Макс(ДатаКонца, СтрокаОстатка.ДатаКонца); + + // СекцияРасчСчет + ДанныеВыписки.Условия.РасчСчет.Добавить(СтрокаИтогов.НомерСчета); + Иначе + ДанныеВыписки.Остатки.Удалить(СтрокаОстатка); КонецЕсли; КонецЦикла; - Если ЗначениеЗаполнено(ВсегоПоступило) Тогда - СтрокаОстатка.ВсегоПоступило = Формат(ВсегоПоступило, "ЧРД=.; ЧГ="); - ЕстьОстатки = Истина; - КонецЕсли; - Если ЗначениеЗаполнено(ВсегоСписано) Тогда - СтрокаОстатка.ВсегоСписано = Формат(ВсегоСписано, "ЧРД=.; ЧГ="); - ЕстьОстатки = Истина; - КонецЕсли; - - КонечныйОстаток = ЗначениеРеквизитаВДереве(ПоследняяВыписка, "Выписки.НомерСтроки.КонечныйОстаток"); - Если ЗначениеЗаполнено(КонечныйОстаток) Тогда - СтрокаОстатка.КонечныйОстаток = Формат(КонечныйОстаток, "ЧРД=.; ЧГ="); - ЕстьОстатки = Истина; - КонецЕсли; - - Если ЕстьОстатки Тогда - СтрокаОстатка.РасчСчет = ЗначениеРеквизитаВДереве(ПоследняяВыписка, "Выписки.НомерСтроки.НомерСчета"); - СтрокаОстатка.ДатаНачала = ЗначениеРеквизитаВДереве(ПерваяВыписка, "Выписки.НомерСтроки.НачалоПериода"); - СтрокаОстатка.ДатаКонца = ЗначениеРеквизитаВДереве(ПоследняяВыписка, "Выписки.НомерСтроки.КонецПериода"); - Иначе - ДанныеВыписки.Остатки.Удалить(СтрокаОстатка); + Если ЗначениеЗаполнено(ДанныеВыписки.Условия.РасчСчет) + И ЗначениеЗаполнено(ДатаНачала) + И ЗначениеЗаполнено(ДатаКонца) Тогда + ДанныеВыписки.Условия.Вставить("ДатаНачала", ДатаНачала); + ДанныеВыписки.Условия.Вставить("ДатаКонца", ДатаКонца); КонецЕсли; КонецПроцедуры @@ -401,6 +456,10 @@ "Выписки.НомерСтроки.Операции.НомерСтроки.ВидОперации"); ДобавитьНеПустойПараметр(Документ, Операция, "ВидОперацииЦР", "Выписки.НомерСтроки.Операции.НомерСтроки.ВидОперацииЦР"); + ДобавитьНеПустойПараметр(Документ, Операция, "MCC", + "Выписки.НомерСтроки.Операции.НомерСтроки.MCC"); + ДобавитьНеПустойПараметр(Документ, Операция, "ПлатежнаяСсылкаЦР", + "Выписки.НомерСтроки.Операции.НомерСтроки.ПлатежнаяСсылкаЦР"); ДобавитьНеПустойПараметр(Документ, Операция, "Код", "Выписки.НомерСтроки.Операции.НомерСтроки.УникальныйИдентификаторПлатежа",, Истина); ДобавитьНеПустойПараметр(Документ, Операция, "КодНазПлатежа", @@ -432,7 +491,15 @@ КонецЕсли; Если ПустаяСтрока(РасСчет) Тогда - Возврат; + СтрокаДерева = Операция; + Пока СтрокаДерева <> Неопределено И Не ЗначениеЗаполнено(РасСчет) Цикл + РасСчет = ЗначениеРеквизитаВДереве(СтрокаДерева, "Выписки.НомерСтроки.НомерСчета"); + СтрокаДерева = СтрокаДерева.Родитель; + КонецЦикла; + + Если Не ЗначениеЗаполнено(РасСчет) Тогда + Возврат; + КонецЕсли; КонецЕсли; // Заполним счет организации, если по дате исполнения известна сторона организации (плательщик/получатель) @@ -535,8 +602,8 @@ "Выписки.НомерСтроки.Операции.НомерСтроки.Плательщик.КПП", , Истина); ДобавитьНеПустойПараметр(ДанныеЭД, Операция, "ПлательщикРасчСчет", "Выписки.НомерСтроки.Операции.НомерСтроки.Плательщик.РасчСчет", , Истина); - ДобавитьНеПустойПараметр(ДанныеЭД, Операция, "ПлательщикНомерСчетаЦифровой", - "Выписки.НомерСтроки.Операции.НомерСтроки.Плательщик.НомерСчетаЦифровой", , Истина); + ДобавитьНеПустойПараметр(ДанныеЭД, Операция, "ПлательщикИдентификаторЦифровогоСчета", + "Выписки.НомерСтроки.Операции.НомерСтроки.Плательщик.ИдентификаторЦифровогоСчета", , Истина); ДобавитьНеПустойПараметр(ДанныеЭД, Операция, "ПлательщикБанк1", "Выписки.НомерСтроки.Операции.НомерСтроки.Плательщик.Банк.Наименование", "Выписки.НомерСтроки.Операции.НомерСтроки.Плательщик.Банк.НаименованиеМеждународное"); @@ -564,8 +631,8 @@ "Выписки.НомерСтроки.Операции.НомерСтроки.Получатель.КПП", , Истина); ДобавитьНеПустойПараметр(ДанныеЭД, Операция, "ПолучательРасчСчет", "Выписки.НомерСтроки.Операции.НомерСтроки.Получатель.РасчСчет", , Истина); - ДобавитьНеПустойПараметр(ДанныеЭД, Операция, "ПолучательНомерСчетаЦифровой", - "Выписки.НомерСтроки.Операции.НомерСтроки.Получатель.НомерСчетаЦифровой", , Истина); + ДобавитьНеПустойПараметр(ДанныеЭД, Операция, "ПолучательИдентификаторЦифровогоСчета", + "Выписки.НомерСтроки.Операции.НомерСтроки.Получатель.ИдентификаторЦифровогоСчета", , Истина); ДобавитьНеПустойПараметр(ДанныеЭД, Операция, "ПолучательБанк1", "Выписки.НомерСтроки.Операции.НомерСтроки.Получатель.Банк.Наименование", "Выписки.НомерСтроки.Операции.НомерСтроки.Получатель.Банк.НаименованиеМеждународное", Истина); @@ -786,6 +853,10 @@ Функция ВыделитьРасСчет(ДанныеИзБанка) РасСчет = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ДанныеИзБанка.Заголовок, "РасчСчет", ""); + Если ТипЗнч(РасСчет) = Тип("Массив") И РасСчет.Количество() > 1 Тогда + РасСчет = ""; + КонецЕсли; + Если ПустаяСтрока(РасСчет) Тогда РасСчета = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ДанныеИзБанка.Условия, "РасчСчет"); Если ЗначениеЗаполнено(РасСчета) И РасСчета.Количество() = 1 Тогда diff --git a/Конфигурация/CommonModules/ЭлектронноеВзаимодействиеИСМП/Ext/Module.bsl b/Конфигурация/CommonModules/ЭлектронноеВзаимодействиеИСМП/Ext/Module.bsl index 8ef4872e7..c23256ece 100644 --- a/Конфигурация/CommonModules/ЭлектронноеВзаимодействиеИСМП/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ЭлектронноеВзаимодействиеИСМП/Ext/Module.bsl @@ -742,18 +742,19 @@ Если КодыОСУРаспределены Тогда ЭлементКоличества = НайтиНазначениеКодаОСУ(СтрокаУпаковки, Источник, ЕстьСерии); - Если ЭлементКоличества = Неопределено Тогда + Если ЭлементКоличества = Неопределено Тогда Продолжить; КонецЕсли; СтрокаУпаковки.КоличестваПоСтрокеОбъемноСортовогоУчета.Удалить(ЭлементКоличества); КонецЕсли; - НоваяСтрока = СведенияОМаркировке.Добавить(); - - НоваяСтрока.Количество = СформироватьКоличествоПоОСУ(Источник, СтрокаУпаковки); - Приемник.ГТИН = СтрокаУпаковки.ЗначениеШтрихкода; - - НоваяСтрока.Идентификатор = Новый Структура("ИдентификаторыУпаковок", ИндивидуальныеУпаковки); + КоличествоПоОСУ = СформироватьКоличествоПоОСУ(Источник, СтрокаУпаковки); + Если КоличествоПоОСУ > 0 Тогда + НоваяСтрока = СведенияОМаркировке.Добавить(); + НоваяСтрока.Количество = КоличествоПоОСУ; + Приемник.ГТИН = СтрокаУпаковки.ЗначениеШтрихкода; + НоваяСтрока.Идентификатор = Новый Структура("ИдентификаторыУпаковок", ИндивидуальныеУпаковки); + КонецЕсли; Прервать; Иначе @@ -1115,11 +1116,16 @@ СтруктураДанных.Вставить("ЗначениеШтрихкода", СтрокаУпаковки.ЗначениеШтрихкода); СтруктураДанных.Вставить("КоличествоУпаковок", 0); - ШтрихкодированиеИСМПСлужебный.ЗаменитьЗначенияШтрихкодаНаОбъемноСортовойУчет( - ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(СтруктураДанных), - "ЗначениеШтрихкода", "КоличествоУпаковок"); - НормализованныйКодМаркировки = КодМаркировкиДляПередачиУПД( - СтруктураДанных.ЗначениеШтрихкода, СтрокаУпаковки.ВидПродукции); + Если КонструкторИСОбщегоНазначенияКлиентСервер.ЭтоСырьеГИСМТ(СтрокаУпаковки.ВидПродукции) Тогда + НормализованныйКодМаркировки = СтрокаУпаковки.ЗначениеШтрихкода; + Иначе + ШтрихкодированиеИСМПСлужебный.ЗаменитьЗначенияШтрихкодаНаОбъемноСортовойУчет( + ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(СтруктураДанных), + "ЗначениеШтрихкода", "КоличествоУпаковок"); + НормализованныйКодМаркировки = КодМаркировкиДляПередачиУПД( + СтруктураДанных.ЗначениеШтрихкода, СтрокаУпаковки.ВидПродукции); + КонецЕсли; + НоваяСтрока = ИндивидуальныеУпаковкиПосле.Добавить(); НоваяСтрока.Код = НормализованныйКодМаркировки; @@ -4317,7 +4323,10 @@ МодульБЭД = ОбщегоНазначения.ОбщийМодуль("ОбновлениеИнформационнойБазыБЭД"); ВерсияБЭД = МодульБЭД.ВерсияБиблиотеки(); - Если ОбщегоНазначенияКлиентСервер.СравнитьВерсии(ВерсияБЭД, "1.9.16.1") >= 0 Тогда + РедакцияБЭД = СтрРазделить(ВерсияБЭД, ".")[1]; + + Если РедакцияБЭД = "9" И ОбщегоНазначенияКлиентСервер.СравнитьВерсии(ВерсияБЭД, "1.9.16.1") >= 0 + Или РедакцияБЭД = "10" И ОбщегоНазначенияКлиентСервер.СравнитьВерсии(ВерсияБЭД, "1.10.2.1") >= 0 Тогда ИдентификаторОтправителя = ИдентификаторУчетнойЗаписиЭДО(Организация); ОписаниеДополненногоФайла = Модуль.ЗаполнитьДанныеПодписантаДокумента(ОписаниеФайла, Организация, СертификатПодписи, СодержаниеДокумента, ИдентификаторОтправителя, ВыбраннаяМЧД); Иначе @@ -5452,7 +5461,7 @@ ДеревоДанных, ПутьКАдресу + ".КодРегиона", АдресПоПриказуМинфина.КодРегиона); ЗаполнитьЗначениеРеквизитаВДереве( - ДеревоДанных, ПутьКАдресу + ".НаименованиеРегиона", АдресПоПриказуМинфина.КодРегиона); + ДеревоДанных, ПутьКАдресу + ".НаименованиеРегиона", АдресПоПриказуМинфина.Регион); ПредставлениеЭлемента = ПредставлениеАдресногоЭлемента(АдресПоПриказуМинфина.Район, АдресПоПриказуМинфина.РайонСокращение); diff --git a/Конфигурация/CommonModules/ЭлектронныеДокументыЭДО/Ext/Module.bsl b/Конфигурация/CommonModules/ЭлектронныеДокументыЭДО/Ext/Module.bsl index d6c8ca91c..28f86f677 100644 --- a/Конфигурация/CommonModules/ЭлектронныеДокументыЭДО/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ЭлектронныеДокументыЭДО/Ext/Module.bsl @@ -155,6 +155,8 @@ // См. СтандартныеПодсистемыСервер.ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод Процедура ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод(Методы) Экспорт + Методы.Вставить("ПервыйЗапуск"); + Методы.Вставить("ВыполнитьДействияПоИнтеграциямЭДО", Истина); Методы.Вставить("ЗаписатьРезультатПроверкиПодписейДокумента", Истина); Методы.Вставить("ПредставлениеДанныхСообщения", Истина); @@ -2514,11 +2516,13 @@ // * ВидДокумента - СправочникСсылка.ВидыДокументовЭДО // * НомерДокумента - Строка // * ДатаДокумента - Дата +// * ПредставлениеЧерновика - Строка Функция НовыеСвойстваПредставленияДокумента() Экспорт Свойства = Новый Структура; Свойства.Вставить("ВидДокумента", Справочники.ВидыДокументовЭДО.ПустаяСсылка()); Свойства.Вставить("НомерДокумента", ""); Свойства.Вставить("ДатаДокумента", Дата(1,1,1)); + Свойства.Вставить("ПредставлениеЧерновика", ""); Возврат Свойства; КонецФункции @@ -3680,7 +3684,7 @@ Настройки = ФорматыЭДО.НовыеНастройкиФормированияДокументаПоОбъектуУчета(); Настройки.ТипДокумента = Выборка.ТипДокумента; Настройки.Формат = ВерсияФормата; - Настройки.ОтключитьРассчетДополнительныхПолей = Истина; + Настройки.ОтключитьРасчетДополнительныхПолей = Истина; Настройки.Организация = Выборка.Организация; Настройки.Контрагент = Выборка.Контрагент; Настройки.Договор = Выборка.ДоговорКонтрагента; @@ -5837,9 +5841,18 @@ // Возвращаемое значение: // ДокументОбъект.ЭлектронныйДокументИсходящийЭДО // -Функция СоздатьДокументПоОписаниюСообщений(НастройкиОтправки, ОписанияСообщений, КонтекстДиагностики, СвязующийОбъектУчета = Неопределено, ОбъектыУчета = Неопределено, ИдентификаторыОснований = Неопределено) Экспорт - Возврат ЭлектронныеДокументыЭДОСлужебный.СоздатьИсходящийДокумент(НастройкиОтправки, ОписанияСообщений, - КонтекстДиагностики, СвязующийОбъектУчета, ОбъектыУчета, ИдентификаторыОснований) +Функция СоздатьДокументПоОписаниюСообщений(НастройкиОтправки, ОписанияСообщений, КонтекстДиагностики, + СвязующийОбъектУчета = Неопределено, ОбъектыУчета = Неопределено, ИдентификаторыОснований = Неопределено) Экспорт + + ПараметрыСозданияИсходящегоДокумента = ЭлектронныеДокументыЭДОСлужебный.НовыеПараметрыСозданияИсходящегоДокумента(); + ПараметрыСозданияИсходящегоДокумента.НастройкиОтправки = НастройкиОтправки; + ПараметрыСозданияИсходящегоДокумента.ОписанияСообщений = ОписанияСообщений; + ПараметрыСозданияИсходящегоДокумента.КонтекстДиагностики = КонтекстДиагностики; + ПараметрыСозданияИсходящегоДокумента.СвязующийОбъектУчета = СвязующийОбъектУчета; + ПараметрыСозданияИсходящегоДокумента.ОбъектыУчета = ОбъектыУчета; + ПараметрыСозданияИсходящегоДокумента.ИдентификаторыОснований = ИдентификаторыОснований; + Возврат ЭлектронныеДокументыЭДОСлужебный.СоздатьИсходящийДокумент(ПараметрыСозданияИсходящегоДокумента); + КонецФункции // Отправляет все документы в соответствующем состоянии для указанных идентификаторов организаций. @@ -6363,6 +6376,7 @@ Списки.Вставить(Метаданные.Документы.ЭлектронныйДокументВходящийЭДО, Истина); Списки.Вставить(Метаданные.Документы.ЭлектронныйДокументИсходящийЭДО, Истина); Списки.Вставить(Метаданные.Документы.СообщениеЭДО, Истина); + Списки.Вставить(Метаданные.Документы.ЧерновикЭлектронногоДокументаЭДО, Истина); Списки.Вставить(Метаданные.Справочники.СообщениеЭДОПрисоединенныеФайлы, Истина); Списки.Вставить(Метаданные.Справочники.КэшВизуализацииДокументовЭДОПрисоединенныеФайлы, Истина); Списки.Вставить(Метаданные.РегистрыСведений.ЖурналДействийПоЭДО, Истина); @@ -6386,6 +6400,8 @@ |Документ.ЭлектронныйДокументИсходящийЭДО.Изменение.Организации |Документ.СообщениеЭДО.Чтение.Организации |Документ.СообщениеЭДО.Изменение.Организации + |Документ.ЧерновикЭлектронногоДокументаЭДО.Чтение.Организации + |Документ.ЧерновикЭлектронногоДокументаЭДО.Изменение.Организации |Справочник.СообщениеЭДОПрисоединенныеФайлы.Чтение.Организации |Справочник.СообщениеЭДОПрисоединенныеФайлы.Изменение.Организации |Справочник.КэшВизуализацииДокументовЭДОПрисоединенныеФайлы.Чтение.Организации @@ -6895,7 +6911,7 @@ #Область РегистрыСведений_СвязьВидовИФорматовДокументовЭДО_ОбработатьДанныеДляПереходаНаНовуюВерсию Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "1.10.1.52"; + Обработчик.Версия = "1.10.1.67"; Обработчик.РежимВыполнения = "Отложенно"; Обработчик.ЗапускатьИВПодчиненномУзлеРИБСФильтрами = Истина; Обработчик.Процедура = "РегистрыСведений.СвязьВидовИФорматовДокументовЭДО.ОбработатьДанныеДляПереходаНаНовуюВерсию"; @@ -6963,7 +6979,7 @@ #Область РегистрыСведений_ФорматыЭлектронныхДокументов_ОбработатьДанныеДляПереходаНаНовуюВерсию Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "1.10.1.52"; + Обработчик.Версия = "1.10.1.67"; Обработчик.РежимВыполнения = "Отложенно"; Обработчик.ЗапускатьИВПодчиненномУзлеРИБСФильтрами = Истина; Обработчик.Процедура = "РегистрыСведений.ФорматыЭлектронныхДокументов.ОбработатьДанныеДляПереходаНаНовуюВерсию"; diff --git a/Конфигурация/CommonModules/ЭлектронныеДокументыЭДОИнтеграцияОблака/Ext/Module.bsl b/Конфигурация/CommonModules/ЭлектронныеДокументыЭДОИнтеграцияОблака/Ext/Module.bsl index 3a94921c7..f86a4fbdf 100644 --- a/Конфигурация/CommonModules/ЭлектронныеДокументыЭДОИнтеграцияОблака/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ЭлектронныеДокументыЭДОИнтеграцияОблака/Ext/Module.bsl @@ -6857,15 +6857,6 @@ #КонецОбласти -#КонецОбласти // СлужебныеПроцедурыИФункции - -//@skip-check module-structure-top-region -#Область ПрограммныйИнтерфейс - -#Область ДляВызоваИзДругихПодсистем - -#Область СтандартныеПодсистемы - // См. СтандартныеПодсистемыСервер.ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод Процедура ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод(Методы) Экспорт @@ -6874,8 +6865,4 @@ КонецПроцедуры -#КонецОбласти - -#КонецОбласти - -#КонецОбласти +#КонецОбласти // СлужебныеПроцедурыИФункции diff --git a/Конфигурация/CommonModules/ЭлектронныеДокументыЭДОКлиент/Ext/Module.bsl b/Конфигурация/CommonModules/ЭлектронныеДокументыЭДОКлиент/Ext/Module.bsl index 89430a3bb..0d73abb87 100644 --- a/Конфигурация/CommonModules/ЭлектронныеДокументыЭДОКлиент/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ЭлектронныеДокументыЭДОКлиент/Ext/Module.bsl @@ -1349,8 +1349,7 @@ ПараметрыПроверки.ОбработкаЗавершенияПроверки = Новый ОписаниеОповещения( "ПроверитьПодписиДокументаЗавершение", ЭлектронныеДокументыЭДОКлиент, ОповещениеОЗавершении); ПараметрыПроверки.ОбработкаПроверкиПодписи = Новый ОписаниеОповещения( - "ОбработатьРезультатПроверкиПодписиДокумента", ЭлектронныеДокументыЭДОКлиент, - ОбщегоНазначенияКлиент.СкопироватьРекурсивно(ПараметрыПроверки)); + "ОбработатьРезультатПроверкиПодписиДокумента", ЭлектронныеДокументыЭДОКлиент, ПараметрыПроверки); ПараметрыПроверки.ОперацияМенеджераКриптографии = "ПроверкаПодписи"; ПараметрыПроверки.КонтекстДиагностики = КонтекстДиагностики; diff --git a/Конфигурация/CommonModules/ЭлектронныеДокументыЭДОКлиентСервер/Ext/Module.bsl b/Конфигурация/CommonModules/ЭлектронныеДокументыЭДОКлиентСервер/Ext/Module.bsl index be6000883..9ca6f34fc 100644 --- a/Конфигурация/CommonModules/ЭлектронныеДокументыЭДОКлиентСервер/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ЭлектронныеДокументыЭДОКлиентСервер/Ext/Module.bsl @@ -64,10 +64,14 @@ // Структура: // * Комментарий - Строка // * Ответственный - Неопределено,ОпределяемыйТип.Пользователь +// * Черновик - Неопределено +// - ДокументСсылка.ЧерновикЭлектронногоДокументаЭДО +// Функция НовыеДополнительныеПараметрыДействия() Экспорт Параметры = Новый Структура; Параметры.Вставить("Комментарий", ""); Параметры.Вставить("Ответственный", Неопределено); + Параметры.Вставить("Черновик", Неопределено); Возврат Параметры; КонецФункции @@ -137,14 +141,14 @@ // Возвращаемое значение: // Структура: -// * ОписанияДокументовПоФайлам - Массив из см. НовоеОписаниеДокументаДляФормированияПоФайлам -// * ОбъектыУчета - Массив из ОпределяемыйТип.ОснованияЭлектронныхДокументовЭДО -// * ЭлектронныеДокументы - Массив из ДокументСсылка.ЭлектронныйДокументВходящийЭДО, -// ДокументСсылка.ЭлектронныйДокументИсходящийЭДО -// * Сообщения - Массив из ДокументСсылка.СообщениеЭДО -// * ПакетыДокументов - Массив из УникальныйИдентификатор -// * ИдентификаторыОрганизаций - Массив из Строка -// * ТранспортныеКонтейнеры - Массив из ДокументСсылка.ТранспортныйКонтейнерЭДО +// * ОписанияДокументовПоФайлам - Массив из см. НовоеОписаниеДокументаДляФормированияПоФайлам +// * ОбъектыУчета - Массив из ОпределяемыйТип.ОснованияЭлектронныхДокументовЭДО +// * ЭлектронныеДокументы - Массив из ДокументСсылка.ЭлектронныйДокументВходящийЭДО, +// ДокументСсылка.ЭлектронныйДокументИсходящийЭДО +// * Сообщения - Массив из ДокументСсылка.СообщениеЭДО +// * ПакетыДокументов - Массив из УникальныйИдентификатор +// * ИдентификаторыОрганизаций - Массив из Строка +// * ТранспортныеКонтейнеры - Массив из ДокументСсылка.ТранспортныйКонтейнерЭДО Функция НовыеОбъектыДействийПоЭДО() Экспорт ОбъектыДействий = Новый Структура; ОбъектыДействий.Вставить("ОписанияДокументовПоФайлам", Новый Массив); diff --git a/Конфигурация/CommonModules/ЭлектронныеДокументыЭДОСлужебный/Ext/Module.bsl b/Конфигурация/CommonModules/ЭлектронныеДокументыЭДОСлужебный/Ext/Module.bsl index 17e068191..c13f51fe9 100644 --- a/Конфигурация/CommonModules/ЭлектронныеДокументыЭДОСлужебный/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ЭлектронныеДокументыЭДОСлужебный/Ext/Module.bsl @@ -559,6 +559,12 @@ ВыполнитьДействиеАннулировать(ПараметрыВыполнения, РезультатДействий); Обработано = РезультатДействий.Итог.ОбработаноПоДействиям[Перечисления.ДействияПоЭДО.Аннулировать]; + Если ЗначениеЗаполнено(РезультатДействий.ОшибкиФормирования) Тогда + ОбщегоНазначенияБЭД.ЗакончитьЗамер("Переформировать", ОписаниеЗамера, Обработано, + НСтр("ru = 'Ошибки при аннулировании документа'")); + Возврат; + КонецЕсли; + ОбщегоНазначенияБЭД.ЗафиксироватьЭтап("Аннулировать", ОписаниеЗамера, Обработано); КонецЕсли; @@ -1662,7 +1668,9 @@ НаборПараметровФормирования = ПараметрыФормированияДокумента(ПараметрыВыполнения, РезультатыЗапросаНастроек, РезультатДействий); - + + ЕстьДополнительныеПараметрыДействия = ЗначениеЗаполнено(ПараметрыВыполнения.ДополнительныеПараметрыДействий); + Если ЗначениеЗаполнено(РезультатДействий.ОшибкиФормирования) Тогда Возврат; КонецЕсли; @@ -1714,10 +1722,22 @@ Продолжить; КонецЕсли; + Черновик = Неопределено; + Если ЕстьДополнительныеПараметрыДействия Тогда + Черновик = ПараметрыВыполнения.ДополнительныеПараметрыДействий[ПараметрыФормирования.ОбъектУчета].Черновик; + КонецЕсли; + Попытка - ДокументОбъект = СоздатьИсходящийДокумент(ПараметрыФормирования.НастройкиДокумента, ОписанияСообщений, - РезультатДействий.КонтекстДиагностики, ПараметрыФормирования.ОбъектУчета, ПараметрыФормирования.Основания, - ПараметрыФормирования.ИдентификаторыОснований); + ПараметрыСозданияИсходящегоДокумента = НовыеПараметрыСозданияИсходящегоДокумента(); + ПараметрыСозданияИсходящегоДокумента.НастройкиОтправки = ПараметрыФормирования.НастройкиДокумента; + ПараметрыСозданияИсходящегоДокумента.ОписанияСообщений = ОписанияСообщений; + ПараметрыСозданияИсходящегоДокумента.КонтекстДиагностики = РезультатДействий.КонтекстДиагностики; + ПараметрыСозданияИсходящегоДокумента.СвязующийОбъектУчета = ПараметрыФормирования.ОбъектУчета; + ПараметрыСозданияИсходящегоДокумента.ОбъектыУчета = ПараметрыФормирования.Основания; + ПараметрыСозданияИсходящегоДокумента.ИдентификаторыОснований = ПараметрыФормирования.ИдентификаторыОснований; + ПараметрыСозданияИсходящегоДокумента.Черновик = Черновик; + ДокументОбъект = СоздатьИсходящийДокумент(ПараметрыСозданияИсходящегоДокумента); + ЗаполнитьИтогВыполненияДействияПоЭДО(РезультатДействий.Итог, Действие, ДокументОбъект.Ссылка); Исключение ПодробныйТекстОшибки = ТекстОшибки + Символы.ПС + ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); @@ -1940,9 +1960,11 @@ ОписаниеСообщения.Данные.Документ = ОписаниеФайлаДокумента; ОписаниеСообщения.ДополнительнаяИнформация = ПараметрыСоздания.СопроводительнаяЗаписка; - КонтекстДиагностики = ОбработкаНеисправностейБЭД.НовыйКонтекстДиагностики(); - ДокументОбъект = СоздатьИсходящийДокумент( - НастройкиДокумента, ОписаниеСообщения, КонтекстДиагностики, Неопределено, ПараметрыСоздания.ОбъектыУчета); + ПараметрыСозданияИсходящегоДокумента = НовыеПараметрыСозданияИсходящегоДокумента(); + ПараметрыСозданияИсходящегоДокумента.НастройкиОтправки = НастройкиДокумента; + ПараметрыСозданияИсходящегоДокумента.ОписанияСообщений = ОписаниеСообщения; + ПараметрыСозданияИсходящегоДокумента.ОбъектыУчета = ПараметрыСоздания.ОбъектыУчета; + ДокументОбъект = СоздатьИсходящийДокумент(ПараметрыСозданияИсходящегоДокумента); Результат.ЭлектронныйДокумент = ДокументОбъект.Ссылка; Результат.Успех = Истина; @@ -3149,17 +3171,20 @@ КонецФункции // Параметры: -// НастройкиОтправки - см. ЭлектронныеДокументыЭДО.НовыеНастройкиОтправкиДокумента -// ОписанияСообщений - Массив из см. НовоеОписаниеСообщения -// КонтекстДиагностики - см. ОбработкаНеисправностейБЭД.НовыйКонтекстДиагностики -// СвязующийОбъектУчета - ОпределяемыйТип.ОснованияЭлектронныхДокументовЭДО -// ОбъектыУчета - Массив из см. ОпределяемыйТип.ОснованияЭлектронныхДокументовЭДО -// ИдентификаторыОснований - Массив из см. НовыйЭлементКоллекцииИдентификаторыОснованияДокумента +// ПараметрыСоздания - См. НовыеПараметрыСозданияИсходящегоДокумента // // Возвращаемое значение: // ДокументОбъект.ЭлектронныйДокументИсходящийЭДО // -Функция СоздатьИсходящийДокумент(НастройкиОтправки, ОписанияСообщений, КонтекстДиагностики, СвязующийОбъектУчета = Неопределено, ОбъектыУчета = Неопределено, ИдентификаторыОснований = Неопределено) Экспорт +Функция СоздатьИсходящийДокумент(ПараметрыСоздания) Экспорт + + НастройкиОтправки = ПараметрыСоздания.НастройкиОтправки; + ОписанияСообщений = ПараметрыСоздания.ОписанияСообщений; + КонтекстДиагностики = ПараметрыСоздания.КонтекстДиагностики; + СвязующийОбъектУчета = ПараметрыСоздания.СвязующийОбъектУчета; + ОбъектыУчета = ПараметрыСоздания.ОбъектыУчета; + ИдентификаторыОснований = ПараметрыСоздания.ИдентификаторыОснований; + Черновик = ПараметрыСоздания.Черновик; Если ЗначениеЗаполнено(СвязующийОбъектУчета) Тогда ИдентификаторСвязи = Строка(СвязующийОбъектУчета.УникальныйИдентификатор()); @@ -3167,7 +3192,8 @@ ИдентификаторСвязи = Строка(Новый УникальныйИдентификатор); КонецЕсли; - ДокументОбъект = НовыйИсходящийДокументОбъект(НастройкиОтправки, ОписанияСообщений, ИдентификаторСвязи, ИдентификаторыОснований); + ДокументОбъект = НовыйИсходящийДокументОбъект(НастройкиОтправки, ОписанияСообщений, ИдентификаторСвязи, + ИдентификаторыОснований, Черновик); ЭлектронныеДокументыЭДО.ПередЗаписьюНовогоДокумента(ДокументОбъект, ОписанияСообщений); @@ -3180,7 +3206,8 @@ ДокументОбъект.Записать(); - ЭлектронныеДокументыЭДО.ПриЗаписиНовогоДокумента(ДокументОбъект, ОписанияСообщений, КонтекстДиагностики, ОбъектыУчета); + ЭлектронныеДокументыЭДО.ПриЗаписиНовогоДокумента(ДокументОбъект, ОписанияСообщений, КонтекстДиагностики, + ОбъектыУчета); ЗафиксироватьТранзакцию(); Исключение @@ -3194,6 +3221,34 @@ КонецФункции +// Возвращаемое значение: +// Структура: +// * НастройкиОтправки - см. ЭлектронныеДокументыЭДО.НовыеНастройкиОтправкиДокумента +// * ОписанияСообщений - Массив из см. НовоеОписаниеСообщения +// * КонтекстДиагностики - см. ОбработкаНеисправностейБЭД.НовыйКонтекстДиагностики +// * СвязующийОбъектУчета - Неопределено +// - ОпределяемыйТип.ОснованияЭлектронныхДокументовЭДО +// * ОбъектыУчета - Неопределено +// - Массив из см. ОпределяемыйТип.ОснованияЭлектронныхДокументовЭДО +// * ИдентификаторыОснований - Неопределено +// - Массив из см. НовыйЭлементКоллекцииИдентификаторыОснованияДокумента +// * Черновик - Неопределено +// - ДокументСсылка.ЧерновикЭлектронногоДокументаЭДО +// +Функция НовыеПараметрыСозданияИсходящегоДокумента() Экспорт + + Результат = Новый Структура; + Результат.Вставить("НастройкиОтправки", ЭлектронныеДокументыЭДО.НовыеНастройкиОтправкиДокумента()); + Результат.Вставить("ОписанияСообщений", Новый Массив); + Результат.Вставить("КонтекстДиагностики", ОбработкаНеисправностейБЭД.НовыйКонтекстДиагностики()); + Результат.Вставить("СвязующийОбъектУчета", Неопределено); + Результат.Вставить("ОбъектыУчета", Неопределено); + Результат.Вставить("ИдентификаторыОснований", Неопределено); + Результат.Вставить("Черновик", Неопределено); + Возврат Результат; + +КонецФункции + // Возвращает объект нового исходящего электронного документа. // // Параметры: @@ -3201,12 +3256,14 @@ // ОписанияСообщений - Массив из см. НовоеОписаниеСообщения // ИдентификаторСвязи - УникальныйИдентификатор // ИдентификаторыОснований - Массив из См. НовыйЭлементКоллекцииИдентификаторыОснованияДокумента +// Черновик - Неопределено +// - ДокументСсылка.ЧерновикЭлектронногоДокументаЭДО // // Возвращаемое значение: // ДокументОбъект.ЭлектронныйДокументИсходящийЭДО // Функция НовыйИсходящийДокументОбъект(НастройкиОтправки, ОписанияСообщений, ИдентификаторСвязи, - ИдентификаторыОснований = Неопределено) + ИдентификаторыОснований = Неопределено, Черновик = Неопределено) Если ТипЗнч(ОписанияСообщений) = Тип("Массив") И ОписанияСообщений.Количество() > 0 Тогда ОписаниеСообщения = ОписанияСообщений[0]; @@ -3224,7 +3281,7 @@ КонецЕсли; ЗаполнитьИсходящийДокументОбъект(ДокументОбъект, НастройкиОтправки, ОписаниеСообщения, ИдентификаторСвязи, - ИдентификаторыОснований); + ИдентификаторыОснований, Черновик); Возврат ДокументОбъект; @@ -3237,9 +3294,11 @@ // ИдентификаторСвязи - Строка // ИдентификаторыОснований - Неопределено // - Массив из См. НовыйЭлементКоллекцииИдентификаторыОснованияДокумента +// Черновик - Неопределено +// - ДокументСсылка.ЧерновикЭлектронногоДокументаЭДО // Процедура ЗаполнитьИсходящийДокументОбъект(ДокументОбъект, НастройкиОтправки, ОписаниеСообщения, - ИдентификаторСвязи = "", ИдентификаторыОснований = Неопределено) + ИдентификаторСвязи = "", ИдентификаторыОснований = Неопределено, Черновик = Неопределено) ДокументОбъект.Организация = НастройкиОтправки.Организация; ДокументОбъект.Контрагент = НастройкиОтправки.Контрагент; @@ -3286,6 +3345,11 @@ Если ЗначениеЗаполнено(ИдентификаторыОснований) Тогда ОбщегоНазначенияКлиентСервер.ДополнитьТаблицу(ИдентификаторыОснований, ДокументОбъект.ИдентификаторыОснований); КонецЕсли; + + Если ЗначениеЗаполнено(Черновик) Тогда + ДокументОбъект.ЧерновикОснование = Черновик; + ДокументОбъект.ИдентификаторЧерновика = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Черновик, "Идентификатор"); + КонецЕсли; КонецПроцедуры @@ -3419,6 +3483,8 @@ КонецЕсли; + СервисEDIСлужебный.ЗафиксироватьСведенияОФайлахСообщенийЭДО(СообщениеОбъект, ОписаниеСообщения, НастройкиДокумента); + Возврат СообщениеОбъект; КонецФункции @@ -3945,7 +4011,22 @@ Возврат Результат; КонецЕсли; - ПараметрыФормирования = НаборПараметровФормирования[0]; + ПараметрыФормирования = Неопределено; + ВидИсправляемогоДокумента = + ЭлектронныеДокументыЭДО.СвойстваДокумента(ЭлектронныйДокумент, "ВидДокумента").ВидДокумента; + Если НаборПараметровФормирования.Количество() > 1 Тогда + Для Каждого ПараметрыФормированияДляПроверки Из НаборПараметровФормирования Цикл + Для Каждого ОписаниеСообщения Из ПараметрыФормированияДляПроверки.ОписаниеСообщения Цикл + Если ОписаниеСообщения.ВидСообщения = ВидИсправляемогоДокумента Тогда + ПараметрыФормирования = ПараметрыФормированияДляПроверки; + КонецЕсли; + КонецЦикла; + КонецЦикла; + КонецЕсли; + + Если Не ЗначениеЗаполнено(ПараметрыФормирования) Тогда + ПараметрыФормирования = НаборПараметровФормирования[0]; + КонецЕсли; Если ЗначениеЗаполнено(ПараметрыФормирования.ОбъектУчета) Тогда ИдентификаторСвязи = Строка(ПараметрыФормирования.ОбъектУчета.УникальныйИдентификатор()); @@ -4073,7 +4154,8 @@ РезультатДействий.Итог.ОбработаноПоДействиям.Вставить(Действие, 0); РезультатЗапроса = РезультатЗапросаДокументовДляФормированияИзвещения(ПараметрыВыполнения.ОбъектыДействий); - Если РезультатЗапроса.Пустой() Тогда + Если РезультатЗапроса = Неопределено + Или РезультатЗапроса.Пустой() Тогда Возврат; КонецЕсли; @@ -4094,7 +4176,7 @@ // * Сообщения - Массив из ДокументСсылка.СообщениеЭДО // // Возвращаемое значение: -// РезультатЗапроса +// Неопределено,РезультатЗапроса Функция РезультатЗапросаДокументовДляФормированияИзвещения(ОбъектыДействий) Запрос = Новый Запрос; @@ -4183,6 +4265,10 @@ КонецЕсли; + Если Не ЗначениеЗаполнено(ТекстыЗапросов) Тогда + Возврат Неопределено; + КонецЕсли; + ОтборСостояния = Новый Массив; ОтборСостояния.Добавить(Перечисления.СостоянияДокументовЭДО.ТребуетсяИзвещениеОПолучении); ОтборСостояния.Добавить(Перечисления.СостоянияДокументовЭДО.ТребуетсяИзвещениеПоОтклонению); @@ -4447,7 +4533,8 @@ КонтрагентНайден = Истина; - ИначеЕсли НастройкиЭДО.СоздаватьКонтрагентовАвтоматически() Тогда + ИначеЕсли НастройкиЭДО.СоздаватьКонтрагентовАвтоматически() + И НЕ ТрансграничныйЭДО.ЗапрещеноСоздаватьКонтрагентовАвтоматически(Приглашение.ИдентификаторКонтрагента) Тогда РеквизитыКонтрагента = Новый Структура; РеквизитыКонтрагента.Вставить("Наименование", Приглашение.КонтрагентНаименование); @@ -5436,6 +5523,7 @@ ТекстыЗапроса.Добавить(ТекстЗапросаСостоянияДокумента()); ТекстыЗапроса.Добавить(ТекстЗапросаСостоянияСообщений()); ТекстыЗапроса.Добавить(ТекстЗапросаСвойствСообщенияИнформацииОтправителя()); + ТекстыЗапроса.Добавить(ТекстЗапросаПараметровОбновленияСостоянияДокумента(ЭтоВходящийЭДО)); Запрос = Новый Запрос; Запрос.Текст = СтрСоединить(ТекстыЗапроса, ОбщегоНазначения.РазделительПакетаЗапросов()); @@ -5479,7 +5567,10 @@ ДатаИзменения = ТекущаяДатаСеанса(); - СостояниеДокумента = УстановитьСостояниеДокументаПриИзменении(ДокументОбъект, СостоянияСообщений, + ПараметрыДокумента = РезультатыЗапроса[3].Выбрать(); + ПараметрыДокумента.Следующий(); + + СостояниеДокумента = УстановитьСостояниеДокументаПриИзменении(ПараметрыДокумента, СостоянияСообщений, ДатаИзменения, КонтекстДиагностики); РегистрыСведений.ЖурналДействийПоЭДО.ЗаписатьДействие(Действие, ДокументОбъект, СостояниеДокумента, @@ -6423,9 +6514,14 @@ СостоянияСообщений = НовыйСостоянияСообщений(); ОбщегоНазначенияКлиентСервер.ДополнитьТаблицу(РезультатыЗапроса[1].Выгрузить(), СостоянияСообщений); + НетУведомленияОбУточнении = СостоянияСообщений.Найти(Перечисления.ТипыЭлементовРегламентаЭДО.УОУ, + "ТипЭлементаРегламента") = Неопределено + И СостоянияСообщений.Найти(Перечисления.ТипыЭлементовРегламентаЭДО.ПОА_УОУ, + "ТипЭлементаРегламента") = Неопределено; + ЭтоПовторноеАннулирование = СостоянияСообщений.Найти(Перечисления.ТипыЭлементовРегламентаЭДО.ПОА, "ТипЭлементаРегламента") <> Неопределено; - Если ЭтоПовторноеАннулирование Тогда + Если ЭтоПовторноеАннулирование И НетУведомленияОбУточнении Тогда ДобавитьОшибкуПовторногоАннулирования(КонтекстДиагностики, Действие, ЭлектронныйДокумент); Результат.Отказ = Истина; ОтменитьТранзакцию(); @@ -6451,7 +6547,7 @@ ДокументОбъект.Записать(); ПараметрыДокумента = ДокументОбъект; - Иначе + ИначеЕсли НетУведомленияОбУточнении Тогда СвойстваОсновногоФайла = РезультатыЗапроса[2].Выбрать(); СвойстваОсновногоФайла.Следующий(); @@ -7463,7 +7559,7 @@ НайденнаяСтрока.Состояние = СообщениеОбъект.Состояние; СформироватьМаршрут = Ложь; - Если РегламентыЭДО_Формализованный.ДокументБезОтветногоТитула(ПараметрыДокумента) + Если РегламентыЭДО.ДокументБезОтветногоТитула(ПараметрыДокумента) Или ПараметрыДокумента.ТипРегламента = Перечисления.ТипыРегламентовЭДО.АктОРасхождениях Тогда СформироватьМаршрут = ПараметрыДокумента.ТребуетсяПодтверждение @@ -7801,7 +7897,7 @@ | И (НЕ СформированныеОтветы.ПометкаУдаления) |ГДЕ | ЭлектронныйДокументВходящийЭДО.Ссылка В(&ОтборЭлектронныеДокументы) - | И ЭлектронныйДокументВходящийЭДО.ТребуетсяПодтверждение = Ложь + | И ЭлектронныйДокументВходящийЭДО.ТребуетсяПодтверждение = ЛОЖЬ | И ЭлектронныйДокументВходящийЭДО.ТипРегламента = ЗНАЧЕНИЕ(Перечисление.ТипыРегламентовЭДО.АктОРасхождениях) | И СформированныеОтветы.ЭлектронныйДокумент ЕСТЬ NULL | И НЕ ЭлектронныйДокументВходящийЭДО.ЭтоОблачныйЭДО"; @@ -10435,6 +10531,11 @@ Иначе ОписаниеФайла.ДвоичныеДанные = ДвоичныеДанныеФайлов[Выборка.Ссылка]; КонецЕсли; + + Если ОбщегоНазначения.ПодсистемаСуществует("ЭлектронноеВзаимодействие.ОбменСГИСЭПД") Тогда + МодульПодсистемы = ОбщегоНазначения.ОбщийМодуль("ОбменСГИСЭПД"); + МодульПодсистемы.ПриЗаполненииОписанияФайла(Выборка, ОписаниеФайла); + КонецЕсли; СодержаниеДокумента = ФорматыЭДО.ПрочитатьСодержаниеДокумента(ОписаниеФайла); @@ -11934,6 +12035,7 @@ | ДокументЭДО.ИдентификаторОрганизации КАК ИдентификаторОрганизации, | ДокументЭДО.ИдентификаторКонтрагента КАК ИдентификаторКонтрагента, | ДокументЭДО.ИдентификаторСвязи КАК ИдентификаторСвязи, + | """" КАК ИдентификаторЧерновика, | ДокументЭДО.Организация КАК Организация, | ДокументЭДО.Контрагент КАК Контрагент, | ДокументЭДО.ДоговорКонтрагента КАК ДоговорКонтрагента, @@ -12002,8 +12104,8 @@ |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | СообщенияДляОтправки.ЭлектронныйДокумент КАК ЭлектронныйДокумент, - | ИдентификаторыОснованийДокументаЭДО.ИдентификаторСвязи, - | ИдентификаторыОснованийДокументаЭДО.ИдентификаторДокументооборота + | ИдентификаторыОснованийДокументаЭДО.ИдентификаторСвязи КАК ИдентификаторСвязи, + | ИдентификаторыОснованийДокументаЭДО.ИдентификаторДокументооборота КАК ИдентификаторДокументооборота |ИЗ | СообщенияДляОтправки КАК СообщенияДляОтправки | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ЭлектронныйДокументИсходящийЭДО.ИдентификаторыОснований КАК @@ -12027,7 +12129,14 @@ ИмяТаблицыДокументаЭДО = ЭлектронныеДокументыЭДО.ИмяТаблицыДокументаЭДО(ЭтоВходящийЭДО); ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ИмяТаблицыДокументаЭДО", ИмяТаблицыДокументаЭДО); + + Если Не ЭтоВходящийЭДО Тогда + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, """"" КАК ИдентификаторЧерновика", + "ДокументЭДО.ИдентификаторЧерновика КАК ИдентификаторЧерновика"); + КонецЕсли; + Возврат ТекстЗапроса; + КонецФункции // Параметры: @@ -12195,6 +12304,7 @@ ДанныеОбъекта.ИдентификаторСообщения = СвойстваДокумента.ИдентификаторСвязи; ДанныеОбъекта.ИдентификаторОтправителя = СвойстваДокумента.ИдентификаторОрганизации; ДанныеОбъекта.ИдентификаторПолучателя = СвойстваДокумента.ИдентификаторКонтрагента; + ДанныеОбъекта.ИдентификаторЧерновика = СвойстваДокумента.ИдентификаторЧерновика; ДанныеОбъекта.Организация = СвойстваДокумента.Организация; ДанныеОбъекта.Контрагент = СвойстваДокумента.Контрагент; ДанныеОбъекта.ДоговорКонтрагента = СвойстваДокумента.ДоговорКонтрагента; @@ -13831,7 +13941,8 @@ Если КэшЦиклов <> Неопределено И КэшЦиклов["СоздаватьКонтрагентовАвтоматически"] <> Неопределено Тогда СоздаватьКонтрагентовАвтоматическиБЭД = КэшЦиклов["СоздаватьКонтрагентовАвтоматически"]; Иначе - СоздаватьКонтрагентовАвтоматическиБЭД = НастройкиЭДО.СоздаватьКонтрагентовАвтоматически(); + СоздаватьКонтрагентовАвтоматическиБЭД = НастройкиЭДО.СоздаватьКонтрагентовАвтоматически() + И НЕ ТрансграничныйЭДО.ЗапрещеноСоздаватьКонтрагентовАвтоматически(ПараметрыПриглашения.ИдентификаторКонтрагента); Если КэшЦиклов <> Неопределено Тогда КэшЦиклов["СоздаватьКонтрагентовАвтоматически"] = СоздаватьКонтрагентовАвтоматическиБЭД; КонецЕсли; @@ -14909,6 +15020,7 @@ ОписаниеСообщения = ПараметрыЗагрузки.ОписаниеСообщения; ПараметрыДокумента = ПараметрыЗагрузки.ПараметрыДокумента; + ПараметрыЧерновика = ПараметрыЗагрузки.ПараметрыЧерновикаДокумента; Если ПараметрыЗагрузки.ЭтоНовыйДокумент Тогда ПроверитьДанныеДокументаПередЗагрузкой(ПараметрыДокумента, ОписаниеСообщения); @@ -14918,6 +15030,10 @@ ПараметрыДокумента.Ссылка = ДокументОбъект.Ссылка; ПараметрыДокумента.Дата = ДокументОбъект.Дата; ДатаИзмененияСостояния = ДокументОбъект.Дата; + + Если ЗначениеЗаполнено(ПараметрыЧерновика) Тогда + СоздатьЧерновикДокументаЭДО(ДокументОбъект, ПараметрыЧерновика); + КонецЕсли; Иначе ДатаИзмененияСостояния = ТекущаяДатаСеанса(); КонецЕсли; @@ -15022,6 +15138,8 @@ КонецЕсли; СостояниеДокумента = УстановитьСостояниеДокументаПриИзменении(ПараметрыДокумента, ПараметрыЗагрузки.СостоянияСообщений, ДатаИзмененияСостояния, КонтекстДиагностики,, Комментарий); + + ПриЗагрузкеСообщенияУжеСозданногоДокумента(СообщениеОбъект); КонецЕсли; РегистрыСведений.ЖурналДействийПоЭДО.ЗаписатьДействие(ПараметрыЗагрузки.Действие, @@ -15046,6 +15164,39 @@ КонецФункции +// Параметры: +// ДокументОбъект - ДокументОбъект.ЭлектронныйДокументВходящийЭДО +// ПараметрыЧерновика - См. ЧерновикиЭДО.НовыеПараметрыЧерновикаДокументаДляЗагрузки +Процедура СоздатьЧерновикДокументаЭДО(ДокументОбъект, ПараметрыЧерновика) + + ПараметрыЧерновика.ЭлектронныйДокументИсточник = ДокументОбъект.Ссылка; + ЧерновикОбъект = ЧерновикиЭДО.СоздатьЧерновикДокументаЭДО(ПараметрыЧерновика); + + ДокументОбъект.ЧерновикВладелец = ЧерновикОбъект.Ссылка; + + СвойстваДокументаДляПредставленияЧерновика = + ЧерновикиЭДОКлиентСервер.НовыеСвойстваДокументаДляПолученияПредставленияЧерновика(); + СвойстваДокументаДляПредставленияЧерновика.ВидЧерновика = ЧерновикОбъект.ВидЧерновика; + СвойстваДокументаДляПредставленияЧерновика.НомерДокумента = ЧерновикОбъект.Номер; + СвойстваДокументаДляПредставленияЧерновика.ДатаДокумента = ЧерновикОбъект.Дата; + + ДокументОбъект.ПредставлениеЧерновика = ЧерновикиЭДО.ПредставлениеЧерновика( + СвойстваДокументаДляПредставленияЧерновика); + + ДокументОбъект.ВидДокумента = ЭлектронныеДокументыЭДО.ВидДокументаПоТипу(Перечисления.ТипыДокументовЭДО.Черновик); + + ДокументОбъект.Записать(); + +КонецПроцедуры + +// Параметры: +// СообщениеОбъект - ДокументОбъект.СообщениеЭДО +Процедура ПриЗагрузкеСообщенияУжеСозданногоДокумента(СообщениеОбъект) + + ЧерновикиЭДО.ПриЗагрузкеСообщенияУжеСозданногоДокумента(СообщениеОбъект); + +КонецПроцедуры + // Возвращаемое значение: // Структура - Новые параметры документа для загрузки: // * Ссылка - ДокументСсылка.ЭлектронныйДокументВходящийЭДО,ДокументСсылка.ЭлектронныйДокументИсходящийЭДО @@ -15135,23 +15286,25 @@ // КонтекстДиагностики - см. ОбработкаНеисправностейБЭД.НовыйКонтекстДиагностики // // Возвращаемое значение: -// Структура: -// * Действие - ПеречислениеСсылка.ДействияПоЭДО -// * ОписаниеСообщения - см. НовоеОписаниеСообщения -// * ПодписиОсновныхДанных - Массив Из Структура см. КриптографияБЭДКлиентСервер.НовыеСвойстваПодписи -// * ПодписиДополнительныхДанных - Массив Из Структура см. КриптографияБЭДКлиентСервер.НовыеСвойстваПодписи -// * ЭтоНовыйДокумент - Булево -// * ЭтоВходящийЭДО - Булево -// * ПараметрыДокумента - см. НовыеПараметрыДокументаДляЗагрузки -// * СостоянияСообщений - См. НовыйСостоянияСообщений -// * ТипИзвещения - ПеречислениеСсылка.ТипыЭлементовРегламентаЭДО -// * СостояниеДокумента - ПеречислениеСсылка.СостоянияДокументовЭДО -// * КомментарийСостояния - Строка -// * ОповещенияПодписантов - Массив Из Структура: -// ** СообщениеОбъект - см. СоздатьСообщение -// ** ТаблицаПодписания - см. МаршрутыПодписанияБЭД.СформироватьМаршрутПодписанияЭД -// * ИдентификаторыОснований - см. ИдентификаторыОснованийПоДаннымСообщения -// * ДанныеУчастниковЭДО - см. НовыеДанныеУчастниковЭДО +// Структура: +// * Действие - ПеречислениеСсылка.ДействияПоЭДО +// * ОписаниеСообщения - см. НовоеОписаниеСообщения +// * ПодписиОсновныхДанных - Массив Из Структура см. КриптографияБЭДКлиентСервер.НовыеСвойстваПодписи +// * ПодписиДополнительныхДанных - Массив Из Структура см. КриптографияБЭДКлиентСервер.НовыеСвойстваПодписи +// * ЭтоНовыйДокумент - Булево +// * ЭтоВходящийЭДО - Булево +// * ПараметрыДокумента - см. НовыеПараметрыДокументаДляЗагрузки +// * СостоянияСообщений - См. НовыйСостоянияСообщений +// * ТипИзвещения - ПеречислениеСсылка.ТипыЭлементовРегламентаЭДО +// * СостояниеДокумента - ПеречислениеСсылка.СостоянияДокументовЭДО +// * КомментарийСостояния - Строка +// * ОповещенияПодписантов - Массив Из Структура: +// ** СообщениеОбъект - см. СоздатьСообщение +// ** ТаблицаПодписания - см. МаршрутыПодписанияБЭД.СформироватьМаршрутПодписанияЭД +// * ИдентификаторыОснований - см. ИдентификаторыОснованийПоДаннымСообщения +// * ДанныеУчастниковЭДО - см. НовыеДанныеУчастниковЭДО +// * ПараметрыЧерновикаДокумента - Неопределено +// - См. ЧерновикиЭДО.НовыеПараметрыЧерновикаДокументаДляЗагрузки // Функция ПараметрыЗагрузкиСообщения(ДанныеОбъекта, ПроверенныеПодписи, КонтекстДиагностики) Экспорт @@ -15166,6 +15319,7 @@ Результат.Вставить("ЭтоНовыйДокумент", Ложь); Результат.Вставить("ЭтоВходящийЭДО", Ложь); Результат.Вставить("ПараметрыДокумента", ПараметрыДокумента); + Результат.Вставить("ПараметрыЧерновикаДокумента", Неопределено); Результат.Вставить("СостоянияСообщений", НовыйСостоянияСообщений()); Результат.Вставить("ТипИзвещения", Перечисления.ТипыЭлементовРегламентаЭДО.ПустаяСсылка()); Результат.Вставить("СостояниеДокумента", Перечисления.СостоянияДокументовЭДО.ПустаяСсылка()); @@ -15292,6 +15446,8 @@ ПараметрыДокумента.ТребуетсяПодтверждение = ДанныеОбъекта.ТребуетсяПодтверждение; КонецЕсли; + ЧерновикиЭДО.ЗаполнитьПараметрыЧерновикаДокумента(Результат.ПараметрыЧерновикаДокумента, ДанныеОбъекта); + Если МодульОбменСГИСЭПД <> Неопределено И МодульОбменСГИСЭПД.ЭтоТитулОтправителя(ДанныеОбъекта.ТипЭлементаРегламента) Тогда Выборка = РезультатыЗапроса[0].Выбрать(); @@ -17894,9 +18050,12 @@ | ЭлектронныйДокументВходящийЭДО.Исправлен КАК Исправлен, | ЭлектронныйДокументВходящийЭДО.НаОзнакомлении КАК НаОзнакомлении, | ЭлектронныйДокументВходящийЭДО.Ответственный КАК Ответственный, - | ЭлектронныйДокументВходящийЭДО.ФорматОсновногоТитула КАК ФорматОсновногоТитула + | ЭлектронныйДокументВходящийЭДО.ФорматОсновногоТитула КАК ФорматОсновногоТитула, + | ЧерновикЭлектронногоДокументаЭДО.Обработан КАК ЧерновикОбработан |ИЗ | Документ.ЭлектронныйДокументВходящийЭДО КАК ЭлектронныйДокументВходящийЭДО + | ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЧерновикЭлектронногоДокументаЭДО КАК ЧерновикЭлектронногоДокументаЭДО + | ПО ЭлектронныйДокументВходящийЭДО.ЧерновикВладелец = ЧерновикЭлектронногоДокументаЭДО.Ссылка |ГДЕ | ЭлектронныйДокументВходящийЭДО.Ссылка = &ЭлектронныйДокумент"); Иначе @@ -17922,9 +18081,11 @@ | ЭлектронныйДокументИсходящийЭДО.Исправлен КАК Исправлен, | ЭлектронныйДокументИсходящийЭДО.НаОзнакомлении КАК НаОзнакомлении, | ЭлектронныйДокументИсходящийЭДО.Ответственный КАК Ответственный, - | ЭлектронныйДокументИсходящийЭДО.ФорматОсновногоТитула КАК ФорматОсновногоТитула + | ЭлектронныйДокументИсходящийЭДО.ФорматОсновногоТитула КАК ФорматОсновногоТитула, + | ЛОЖЬ КАК ЧерновикОбработан |ИЗ | Документ.ЭлектронныйДокументИсходящийЭДО КАК ЭлектронныйДокументИсходящийЭДО + | |ГДЕ | ЭлектронныйДокументИсходящийЭДО.Ссылка = &ЭлектронныйДокумент"); КонецЕсли; @@ -18303,6 +18464,71 @@ | СостоянияДокументовЭДО.ЭлектронныйДокумент В (&ЭлектронныеДокументы)"; КонецФункции +// Параметры: +// ЭлектронныйДокумент - ДокументСсылка.ЭлектронныйДокументВходящийЭДО +// ДокументСсылка.ЭлектронныйДокументИсходящийЭДО +// Действие - ПеречислениеСсылка.ДействияПоЭДО +// КонтекстДиагностики - см. ОбработкаНеисправностейБЭД.НовыйКонтекстДиагностики +// Комментарий - Строка +// +// Возвращаемое значение: +// Булево +Функция ОбновитьСостояниеДокументаПоДействию(ЭлектронныйДокумент, Действие, КонтекстДиагностики, Комментарий = "") Экспорт + + Результат = Истина; + + ЭтоВходящийЭДО = ЭлектронныеДокументыЭДО.ЭтоВходящийЭДО(ЭлектронныйДокумент); + + ТекстыЗапроса = Новый Массив; + ТекстыЗапроса.Добавить(ТекстЗапросаСостоянияСообщений()); + ТекстыЗапроса.Добавить(ТекстЗапросаСвойствСообщенияИнформацииОтправителя()); + ТекстыЗапроса.Добавить(ТекстЗапросаПараметровОбновленияСостоянияДокумента(ЭтоВходящийЭДО)); + + Запрос = Новый Запрос; + Запрос.Текст = СтрСоединить(ТекстыЗапроса, ОбщегоНазначения.РазделительПакетаЗапросов()); + Запрос.УстановитьПараметр("ЭлектронныйДокумент", ЭлектронныйДокумент); + + ТитулыОтправителя = Новый Массив; + ТитулыОтправителя.Добавить(Перечисления.ТипыЭлементовРегламентаЭДО.ИнформацияОтправителя); + Если ОбщегоНазначения.ПодсистемаСуществует("ЭлектронноеВзаимодействие.ОбменСГИСЭПД") Тогда + МодульОбменСГИСЭПД = ОбщегоНазначения.ОбщийМодуль("ОбменСГИСЭПД"); + МодульОбменСГИСЭПД.ЗаполнитьТитулыОтправителя(ТитулыОтправителя); + КонецЕсли; + Запрос.УстановитьПараметр("ТитулыОтправителя", ТитулыОтправителя); + + РезультатыЗапроса = Запрос.ВыполнитьПакет(); + Если РезультатыЗапроса[0].Пустой() + Или РезультатыЗапроса[1].Пустой() + Или РезультатыЗапроса[2].Пустой() Тогда + Результат = Ложь; + Возврат Результат; + КонецЕсли; + + СостоянияСообщений = НовыйСостоянияСообщений(); + ОбщегоНазначенияКлиентСервер.ДополнитьТаблицу(РезультатыЗапроса[0].Выгрузить(), СостоянияСообщений); + + СвойстваСообщения = РезультатыЗапроса[1].Выбрать(); + СвойстваСообщения.Выбрать(); + + ДатаИзменения = ТекущаяДатаСеанса(); + + ПараметрыДокумента = РезультатыЗапроса[2].Выбрать(); + ПараметрыДокумента.Следующий(); + + СостояниеДокумента = УстановитьСостояниеДокументаПриИзменении(ПараметрыДокумента, СостоянияСообщений, + ДатаИзменения, КонтекстДиагностики); + + СвойстваДляЗаписиДействия = Новый Структура; + СвойстваДляЗаписиДействия.Вставить("Ссылка", ЭлектронныйДокумент); + СвойстваДляЗаписиДействия.Вставить("Ответственный", Пользователи.ТекущийПользователь()); + + РегистрыСведений.ЖурналДействийПоЭДО.ЗаписатьДействие(Действие, СвойстваДляЗаписиДействия, СостояниеДокумента, + ДатаИзменения, СвойстваСообщения, Комментарий); + + Возврат Результат; + +КонецФункции + #КонецОбласти #Область ДействияПоСостояниюДокумента @@ -18718,6 +18944,15 @@ Действия.Вставить(Перечисления.ДействияПоЭДО.СформироватьИсправление, Истина); Действия.Вставить(Перечисления.ДействияПоЭДО.Перенаправить, Истина); Действия.Вставить(Перечисления.ДействияПоЭДО.ЗакрытьПринудительно, Истина); + + ИначеЕсли СостояниеДокумента = Перечисления.СостоянияДокументовЭДО.ЗакрытСОтзывом + Или СостояниеДокумента = Перечисления.СостоянияДокументовЭДО.ТребуетсяСоздатьДокумент Тогда + + Действия.Вставить(Перечисления.ДействияПоЭДО.Перенаправить, Истина); + Если ДействиеЗакрытьДоступно(СвойстваДокумента) Тогда + Действия.Вставить(Перечисления.ДействияПоЭДО.ЗакрытьПринудительно, Истина); + КонецЕсли; + КонецЕсли; Если СвойстваДокумента.НаОзнакомлении Тогда @@ -18750,7 +18985,8 @@ ВидДокумента = СвойстваДокумента.ВидДокумента; Если ЗначениеЗаполнено(ВидДокумента) Тогда ТипДокумента = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ВидДокумента, "ТипДокумента"); - Возврат ТипДокумента <> Перечисления.ТипыДокументовЭДО.МашиночитаемаяДоверенность; + Возврат ТипДокумента <> Перечисления.ТипыДокументовЭДО.МашиночитаемаяДоверенность + И ТипДокумента <> Перечисления.ТипыДокументовЭДО.Черновик; КонецЕсли; Возврат Истина; diff --git a/Конфигурация/CommonModules/ЭлектронныеДокументыЭДОСлужебныйКлиент/Ext/Module.bsl b/Конфигурация/CommonModules/ЭлектронныеДокументыЭДОСлужебныйКлиент/Ext/Module.bsl index 4bfc05c02..bfe5cc02c 100644 --- a/Конфигурация/CommonModules/ЭлектронныеДокументыЭДОСлужебныйКлиент/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ЭлектронныеДокументыЭДОСлужебныйКлиент/Ext/Module.bsl @@ -717,7 +717,9 @@ КонецЦикла; РезультатОбработки.ДокументыДляОбработкиИзвещений = РезультатДействий.ДокументыДляОбработкиИзвещений; - РезультатОбработки.ДокументыДляОбработкиДополнительныхСведений = РезультатДействий.ДокументыДляОбработкиДополнительныхСведений; + Если ЗначениеЗаполнено(КонтекстОбработки.ПодписанныеСообщения) Тогда + РезультатОбработки.ДокументыДляОбработкиДополнительныхСведений = РезультатДействий.ДокументыДляОбработкиДополнительныхСведений; + КонецЕсли; РезультатОбработки.ОшибкиФормирования = РезультатДействий.ОшибкиФормирования; diff --git a/Конфигурация/CommonModules/ЯндексПэй/Ext/Module.bsl b/Конфигурация/CommonModules/ЯндексПэй/Ext/Module.bsl index a194e9bda..9e7d5d86a 100644 --- a/Конфигурация/CommonModules/ЯндексПэй/Ext/Module.bsl +++ b/Конфигурация/CommonModules/ЯндексПэй/Ext/Module.bsl @@ -136,19 +136,3 @@ КонецФункции #КонецОбласти - -#Область СлужебныйПрограммныйИнтерфейс - -#Область ИнтеграцияСБиблиотекойСтандартныхПодсистем - -// См. СтандартныеПодсистемыСервер.ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод -// -Процедура ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод(Методы) Экспорт - - Методы.Вставить("КассовыеСсылкиНастройки", Истина); - -КонецПроцедуры - -#КонецОбласти - -#КонецОбласти diff --git a/Конфигурация/CommonPictures/ДиректБанкОбменЧерезБанкПосредник.xml b/Конфигурация/CommonPictures/ДиректБанкОбменЧерезБанкПосредник.xml new file mode 100644 index 000000000..bf37992d2 --- /dev/null +++ b/Конфигурация/CommonPictures/ДиректБанкОбменЧерезБанкПосредник.xml @@ -0,0 +1,17 @@ + + + + + ДиректБанкОбменЧерезБанкПосредник + + + ru + Директ банк обмен через банк посредник + + + + false + false + + + \ No newline at end of file diff --git a/Конфигурация/CommonPictures/ДиректБанкОбменЧерезБанкПосредник/Ext/Picture.xml b/Конфигурация/CommonPictures/ДиректБанкОбменЧерезБанкПосредник/Ext/Picture.xml new file mode 100644 index 000000000..99855f7bf --- /dev/null +++ b/Конфигурация/CommonPictures/ДиректБанкОбменЧерезБанкПосредник/Ext/Picture.xml @@ -0,0 +1,7 @@ + + + + Picture.zip + false + + \ No newline at end of file diff --git a/Конфигурация/CommonPictures/ДиректБанкОбменЧерезБанкПосредник/Ext/Picture/Picture.zip b/Конфигурация/CommonPictures/ДиректБанкОбменЧерезБанкПосредник/Ext/Picture/Picture.zip new file mode 100644 index 000000000..c9b69d117 Binary files /dev/null and b/Конфигурация/CommonPictures/ДиректБанкОбменЧерезБанкПосредник/Ext/Picture/Picture.zip differ diff --git a/Конфигурация/CommonPictures/ДиректБанкПолныйОбмен.xml b/Конфигурация/CommonPictures/ДиректБанкПолныйОбмен.xml new file mode 100644 index 000000000..c89e61af8 --- /dev/null +++ b/Конфигурация/CommonPictures/ДиректБанкПолныйОбмен.xml @@ -0,0 +1,17 @@ + + + + + ДиректБанкПолныйОбмен + + + ru + Директ банк полный обмен + + + + false + false + + + \ No newline at end of file diff --git a/Конфигурация/CommonPictures/ДиректБанкПолныйОбмен/Ext/Picture.xml b/Конфигурация/CommonPictures/ДиректБанкПолныйОбмен/Ext/Picture.xml new file mode 100644 index 000000000..99855f7bf --- /dev/null +++ b/Конфигурация/CommonPictures/ДиректБанкПолныйОбмен/Ext/Picture.xml @@ -0,0 +1,7 @@ + + + + Picture.zip + false + + \ No newline at end of file diff --git a/Конфигурация/CommonPictures/ДиректБанкПолныйОбмен/Ext/Picture/Picture.zip b/Конфигурация/CommonPictures/ДиректБанкПолныйОбмен/Ext/Picture/Picture.zip new file mode 100644 index 000000000..6c6e51dd2 Binary files /dev/null and b/Конфигурация/CommonPictures/ДиректБанкПолныйОбмен/Ext/Picture/Picture.zip differ diff --git a/Конфигурация/CommonPictures/МаркируемаяПродукцияТЧ/Ext/Picture/Picture.zip b/Конфигурация/CommonPictures/МаркируемаяПродукцияТЧ/Ext/Picture/Picture.zip index 251b90507..04cf7b370 100644 Binary files a/Конфигурация/CommonPictures/МаркируемаяПродукцияТЧ/Ext/Picture/Picture.zip and b/Конфигурация/CommonPictures/МаркируемаяПродукцияТЧ/Ext/Picture/Picture.zip differ diff --git a/Конфигурация/CommonTemplates/Драйвер1СЭквайринговыеТерминалыСбербанк2х_ru/Ext/Template.bin b/Конфигурация/CommonTemplates/Драйвер1СЭквайринговыеТерминалыСбербанк2х_ru/Ext/Template.bin index 24eb2f7ba..685814bfb 100644 Binary files a/Конфигурация/CommonTemplates/Драйвер1СЭквайринговыеТерминалыСбербанк2х_ru/Ext/Template.bin and b/Конфигурация/CommonTemplates/Драйвер1СЭквайринговыеТерминалыСбербанк2х_ru/Ext/Template.bin differ diff --git a/Конфигурация/CommonTemplates/ДрайверMERTECHПромСканерШтрихкода_ru/Ext/Template.bin b/Конфигурация/CommonTemplates/ДрайверMERTECHПромСканерШтрихкода_ru/Ext/Template.bin index 09d60cca3..f86a4e307 100644 Binary files a/Конфигурация/CommonTemplates/ДрайверMERTECHПромСканерШтрихкода_ru/Ext/Template.bin and b/Конфигурация/CommonTemplates/ДрайверMERTECHПромСканерШтрихкода_ru/Ext/Template.bin differ diff --git a/Конфигурация/CommonTemplates/ДрайверАТОЛККТ54ФЗ107X_ru.xml b/Конфигурация/CommonTemplates/ДрайверАТОЛККТ54ФЗ107X_ru.xml index cc1dbd5a6..e9306da56 100644 --- a/Конфигурация/CommonTemplates/ДрайверАТОЛККТ54ФЗ107X_ru.xml +++ b/Конфигурация/CommonTemplates/ДрайверАТОЛККТ54ФЗ107X_ru.xml @@ -6,7 +6,7 @@ ru - АТОЛ:ККТ с передачей данных в ОФД 10.10.8.х + АТОЛ:ККТ с передачей данных в ОФД 10.10.9.х diff --git a/Конфигурация/CommonTemplates/ДрайверАТОЛККТ54ФЗ107X_ru/Ext/Template.bin b/Конфигурация/CommonTemplates/ДрайверАТОЛККТ54ФЗ107X_ru/Ext/Template.bin index b408da2ec..cab545d8f 100644 Binary files a/Конфигурация/CommonTemplates/ДрайверАТОЛККТ54ФЗ107X_ru/Ext/Template.bin and b/Конфигурация/CommonTemplates/ДрайверАТОЛККТ54ФЗ107X_ru/Ext/Template.bin differ diff --git a/Конфигурация/CommonTemplates/ДрайверАТОЛСканерШтрихкода_ru/Ext/Template.bin b/Конфигурация/CommonTemplates/ДрайверАТОЛСканерШтрихкода_ru/Ext/Template.bin index 1d1132adf..218b738e2 100644 Binary files a/Конфигурация/CommonTemplates/ДрайверАТОЛСканерШтрихкода_ru/Ext/Template.bin and b/Конфигурация/CommonTemplates/ДрайверАТОЛСканерШтрихкода_ru/Ext/Template.bin differ diff --git a/Конфигурация/CommonTemplates/ДрайверКАСТОМФ54ФЗx4_ru.xml b/Конфигурация/CommonTemplates/ДрайверКАСТОМФ54ФЗx4_ru.xml new file mode 100644 index 000000000..87e79ff10 --- /dev/null +++ b/Конфигурация/CommonTemplates/ДрайверКАСТОМФ54ФЗx4_ru.xml @@ -0,0 +1,16 @@ + + + + + ДрайверКАСТОМФ54ФЗx4_ru + + + ru + Драйвер "КАСТОМ:ККТ с передачей данных в ОФД" + + + + AddIn + + + \ No newline at end of file diff --git a/Конфигурация/CommonTemplates/ДрайверКАСТОМФ54ФЗx4_ru/Ext/Template.bin b/Конфигурация/CommonTemplates/ДрайверКАСТОМФ54ФЗx4_ru/Ext/Template.bin new file mode 100644 index 000000000..05a4c76f0 Binary files /dev/null and b/Конфигурация/CommonTemplates/ДрайверКАСТОМФ54ФЗx4_ru/Ext/Template.bin differ diff --git a/Конфигурация/CommonTemplates/ДрайверПОСЦентрККТ54ФЗ4ФФД12NG_ru/Ext/Template.bin b/Конфигурация/CommonTemplates/ДрайверПОСЦентрККТ54ФЗ4ФФД12NG_ru/Ext/Template.bin index 2244461ac..5bcbfb24b 100644 Binary files a/Конфигурация/CommonTemplates/ДрайверПОСЦентрККТ54ФЗ4ФФД12NG_ru/Ext/Template.bin and b/Конфигурация/CommonTemplates/ДрайверПОСЦентрККТ54ФЗ4ФФД12NG_ru/Ext/Template.bin differ diff --git a/Конфигурация/CommonTemplates/ДрайверПОСЦентрККТ54ФЗ4ФФД12_ru/Ext/Template.bin b/Конфигурация/CommonTemplates/ДрайверПОСЦентрККТ54ФЗ4ФФД12_ru/Ext/Template.bin index 6b5adc857..fe43ccbef 100644 Binary files a/Конфигурация/CommonTemplates/ДрайверПОСЦентрККТ54ФЗ4ФФД12_ru/Ext/Template.bin and b/Конфигурация/CommonTemplates/ДрайверПОСЦентрККТ54ФЗ4ФФД12_ru/Ext/Template.bin differ diff --git a/Конфигурация/CommonTemplates/ДрайверРРЭлектроККТ54ФЗ4ФФД12_ru/Ext/Template.bin b/Конфигурация/CommonTemplates/ДрайверРРЭлектроККТ54ФЗ4ФФД12_ru/Ext/Template.bin index b08de6782..87f40853c 100644 Binary files a/Конфигурация/CommonTemplates/ДрайверРРЭлектроККТ54ФЗ4ФФД12_ru/Ext/Template.bin and b/Конфигурация/CommonTemplates/ДрайверРРЭлектроККТ54ФЗ4ФФД12_ru/Ext/Template.bin differ diff --git a/Конфигурация/CommonTemplates/КомпонентаПечатиШтрихкодов/Ext/Template.bin b/Конфигурация/CommonTemplates/КомпонентаПечатиШтрихкодов/Ext/Template.bin index 85785eaf5..e4b96ba28 100644 Binary files a/Конфигурация/CommonTemplates/КомпонентаПечатиШтрихкодов/Ext/Template.bin and b/Конфигурация/CommonTemplates/КомпонентаПечатиШтрихкодов/Ext/Template.bin differ diff --git a/Конфигурация/CommonTemplates/ОписаниеИзмененийДляРТ/Ext/Template/ru.html b/Конфигурация/CommonTemplates/ОписаниеИзмененийДляРТ/Ext/Template/ru.html index 113db2925..986ac1b04 100644 --- a/Конфигурация/CommonTemplates/ОписаниеИзмененийДляРТ/Ext/Template/ru.html +++ b/Конфигурация/CommonTemplates/ОписаниеИзмененийДляРТ/Ext/Template/ru.html @@ -1,4 +1,4 @@ -Новое в версии 1C:Розница 3.0.14.123