commit 1afb299d68f6d5e8b357343ae79a3fcb62d6871d Author: NikDizell Date: Sat Apr 4 08:41:14 2026 +0300 Инициализация diff --git a/Проект_деньги/.project b/Проект_деньги/.project new file mode 100644 index 0000000..8ad216b --- /dev/null +++ b/Проект_деньги/.project @@ -0,0 +1,18 @@ + + + Проект_деньги + + + + + + org.eclipse.xtext.ui.shared.xtextBuilder + + + + + + org.eclipse.xtext.ui.shared.xtextNature + com._1c.g5.v8.dt.core.V8ConfigurationNature + + diff --git a/Проект_деньги/.settings/org.eclipse.core.resources.prefs b/Проект_деньги/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 0000000..99f26c0 --- /dev/null +++ b/Проект_деньги/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +encoding/=UTF-8 diff --git a/Проект_деньги/DT-INF/PROJECT.PMF b/Проект_деньги/DT-INF/PROJECT.PMF new file mode 100644 index 0000000..6192698 --- /dev/null +++ b/Проект_деньги/DT-INF/PROJECT.PMF @@ -0,0 +1,2 @@ +Manifest-Version: 1.0 +Runtime-Version: 8.3.27 diff --git a/Проект_деньги/src/AccumulationRegisters/ДенежныеСредства/Forms/ФормаОстатков/Attributes/Объект/ExtInfo/ListSettings.dcss b/Проект_деньги/src/AccumulationRegisters/ДенежныеСредства/Forms/ФормаОстатков/Attributes/Объект/ExtInfo/ListSettings.dcss new file mode 100644 index 0000000..b1b393f --- /dev/null +++ b/Проект_деньги/src/AccumulationRegisters/ДенежныеСредства/Forms/ФормаОстатков/Attributes/Объект/ExtInfo/ListSettings.dcss @@ -0,0 +1,16 @@ + + + + dfcece9d-5077-440b-b6b3-45a5cb4538eb + + + Normal + 88619765-ccb3-46c6-ac52-38e9c992ebd4 + + + Normal + b75fecce-942b-4aed-abc9-e6a02e460fb3 + + Normal + 911b6018-f537-43e8-a417-da56b22f9aec + diff --git a/Проект_деньги/src/AccumulationRegisters/ДенежныеСредства/Forms/ФормаОстатков/Form.form b/Проект_деньги/src/AccumulationRegisters/ДенежныеСредства/Forms/ФормаОстатков/Form.form new file mode 100644 index 0000000..ca8665a --- /dev/null +++ b/Проект_деньги/src/AccumulationRegisters/ДенежныеСредства/Forms/ФормаОстатков/Form.form @@ -0,0 +1,436 @@ + + + + Пользователь + 23 + true + true + + true + + + Пользователь + + + OnChange + ПользовательПриИзменении + + + ПользовательРасширеннаяПодсказка + 25 + Label + true + true + + Left + + + + ПользовательКонтекстноеМеню + 24 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + + + + Объект + 1 + true + true + + true + + + Объект + + None + + Счет + 14 + true + true + + true + + + Объект.Счет + + + СчетРасширеннаяПодсказка + 16 + Label + true + true + + Left + + + + СчетКонтекстноеМеню + 15 + true + + LabelField + Enter + true + Left + true + + true + true + + + + СуммаОстаток + 17 + true + true + + true + + + Объект.СуммаОстаток + + + СуммаОстатокРасширеннаяПодсказка + 19 + Label + true + true + + Left + + + + СуммаОстатокКонтекстноеМеню + 18 + true + + InputField + Enter + true + Left + true + + 2 + true + true + true + true + true + + + + СчетВалюта + 26 + true + true + + true + + + Объект.Счет.Валюта + + + СчетВалютаРасширеннаяПодсказка + 28 + Label + true + true + + Left + + + + СчетВалютаКонтекстноеМеню + 27 + true + + LabelField + Enter + true + Left + true + + 1 + 1 + 1 + false + false + + + + ОбъектКоманднаяПанель + 3 + Left + true + + + OnActivateRow + ОбъектПриАктивизацииСтроки + + + ОбъектСтрокаПоиска + 5 + + ОбъектСтрокаПоискаРасширеннаяПодсказка + 7 + Label + true + true + + Left + + + + ОбъектСтрокаПоискаКонтекстноеМеню + 6 + true + + Объект + + true + + + + ОбъектСостояниеПросмотра + 8 + + ОбъектСостояниеПросмотраРасширеннаяПодсказка + 10 + Label + true + true + + Left + + + + ОбъектСостояниеПросмотраКонтекстноеМеню + 9 + true + + ViewStatusAddition + Объект + + true + + + + ОбъектУправлениеПоиском + 11 + + ОбъектУправлениеПоискомРасширеннаяПодсказка + 13 + Label + true + true + + Left + + + + ОбъектУправлениеПоискомКонтекстноеМеню + 12 + true + + SearchControlAddition + Объект + + true + + + + ОбъектРасширеннаяПодсказка + 4 + Label + true + true + + Left + + + + ОбъектКонтекстноеМеню + 2 + true + + HierarchicalList + true + true + true + true + true + MultiRow +
true
+ 1 + 1 + AutoUse + AutoUse + true + true + true + Auto + Auto + true + true + true + + Объект.DefaultPicture + + + 60 + + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + true + true + +
+ + Итого + 20 + true + true + + true + + + Итого + + + ИтогоРасширеннаяПодсказка + 22 + Label + true + true + + Left + + + + ИтогоКонтекстноеМеню + 21 + true + + LabelField + Enter + true + Left + true + + true + true + + + + ФормаКоманднаяПанель + -1 + Left + true + + + OnOpen + ПриОткрытии + + + OnCreateAtServer + ПриСозданииНаСервере + + true + true + true + Vertical + true + true + true + true + true + + Объект + + <key>ru</key> + <value>Объект</value> + + 1 + + DynamicList + + + true + + + true + +
true
+ + ВЫБРАТЬ + РегистрНакопленияДенежныеСредстваОстатки.Счет КАК Счет, + РегистрНакопленияДенежныеСредстваОстатки.СуммаОстаток КАК СуммаОстаток +ИЗ + РегистрНакопления.ДенежныеСредства.Остатки(, Пользователь = &Пользователь) КАК РегистрНакопленияДенежныеСредстваОстатки + AccumulationRegister.ДенежныеСредства.Balance + true + true + true + true + +
+ + Итого + + <key>ru</key> + <value>Итого</value> + + 2 + + Number + + 15 + 2 + + + + true + + + true + + + + Пользователь + + <key>ru</key> + <value>Пользователь</value> + + 3 + + CatalogRef.Пользователи + + + true + + + true + + + + + + + +
diff --git a/Проект_деньги/src/AccumulationRegisters/ДенежныеСредства/Forms/ФормаОстатков/Module.bsl b/Проект_деньги/src/AccumulationRegisters/ДенежныеСредства/Forms/ФормаОстатков/Module.bsl new file mode 100644 index 0000000..82010c7 --- /dev/null +++ b/Проект_деньги/src/AccumulationRegisters/ДенежныеСредства/Forms/ФормаОстатков/Module.bsl @@ -0,0 +1,87 @@ + +&НаСервереБезКонтекста +Функция ПолучитьОстаток(Пользователь) + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | КурсыВалютСрезПоследних.Валюта КАК Валюта, + | КурсыВалютСрезПоследних.Курс КАК Курс, + | КурсыВалютСрезПоследних.Кратность КАК Кратность + |ПОМЕСТИТЬ ВТ_КурсыВалют + |ИЗ + | РегистрСведений.КурсыВалют.СрезПоследних(&Период, ) КАК КурсыВалютСрезПоследних + | + |ИНДЕКСИРОВАТЬ ПО + | Валюта + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ДенежныеСредстваОстатки.Счет КАК Счет, + | СУММА(ДенежныеСредстваОстатки.СуммаОстаток) КАК СуммаОстаток, + | ДенежныеСредстваОстатки.Счет.Валюта КАК Валюта + |ПОМЕСТИТЬ ВТ_Остатки + |ИЗ + | РегистрНакопления.ДенежныеСредства.Остатки(, Пользователь = &Пользователь) КАК ДенежныеСредстваОстатки + | + |СГРУППИРОВАТЬ ПО + | ДенежныеСредстваОстатки.Счет, + | ДенежныеСредстваОстатки.Счет.Валюта + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ВТ_Остатки.Счет КАК Счет, + | ВТ_Остатки.СуммаОстаток * (ЕСТЬNULL(ВТ_КурсыВалют.Курс, 1) * ЕСТЬNULL(ВТ_КурсыВалют.Кратность, 1)) КАК СуммаОстаток + |ИЗ + | ВТ_Остатки КАК ВТ_Остатки + | ЛЕВОЕ СОЕДИНЕНИЕ ВТ_КурсыВалют КАК ВТ_КурсыВалют + | ПО ВТ_Остатки.Валюта = ВТ_КурсыВалют.Валюта + |ИТОГИ + | СУММА(СуммаОстаток) + |ПО + | ОБЩИЕ"; + + Запрос.УстановитьПараметр("Пользователь", Пользователь); + Запрос.УстановитьПараметр("Период", ТекущаяДата()); + РезультатЗапроса = Запрос.Выполнить(); + Выборка = РезультатЗапроса.Выбрать(); + Выборка.Следующий(); + Возврат Выборка.СуммаОстаток; + +КонецФункции + +&НаКлиенте +Процедура ОбъектПриАктивизацииСтроки(Элемент) + + Итого = ПолучитьОстаток(Пользователь); + ЭтаФорма.ОбновитьОтображениеДанных(); + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + Итого = ПолучитьОстаток(Пользователь); + ЭтаФорма.ОбновитьОтображениеДанных(); + +КонецПроцедуры + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + Пользователь = ОбщегоНазначенияКлиентСервер.ПолучитьПользователя(); + Объект.Параметры.УстановитьЗначениеПараметра("Пользователь", Пользователь); +КонецПроцедуры + + +&НаКлиенте +Процедура ПользовательПриИзменении(Элемент) + + Объект.Параметры.УстановитьЗначениеПараметра("Пользователь", Пользователь); + Элементы.Объект.Обновить(); + Итого = ПолучитьОстаток(Пользователь); + ЭтаФорма.ОбновитьОтображениеДанных(); + +КонецПроцедуры + diff --git a/Проект_деньги/src/AccumulationRegisters/ДенежныеСредства/ДенежныеСредства.mdo b/Проект_деньги/src/AccumulationRegisters/ДенежныеСредства/ДенежныеСредства.mdo new file mode 100644 index 0000000..538d47b --- /dev/null +++ b/Проект_деньги/src/AccumulationRegisters/ДенежныеСредства/ДенежныеСредства.mdo @@ -0,0 +1,75 @@ + + + + + + + + + + + ДенежныеСредства + + ru + Денежные средства + + true + Managed + true + + Сумма + + ru + Сумма + + + Number + + 15 + 2 + + + + + ShowError + Use + + + Счет + + ru + Счет + + + CatalogRef.Счета + + + + ShowError + Use + true + + + Пользователь + + ru + Пользователь + + + CatalogRef.Пользователи + + + + Use + true + + + ФормаОстатков + + ru + Форма остатков + + PersonalComputer + MobileDevice + + diff --git a/Проект_деньги/src/AccumulationRegisters/Доходы/Доходы.mdo b/Проект_деньги/src/AccumulationRegisters/Доходы/Доходы.mdo new file mode 100644 index 0000000..005b523 --- /dev/null +++ b/Проект_деньги/src/AccumulationRegisters/Доходы/Доходы.mdo @@ -0,0 +1,86 @@ + + + + + + + + + + + Доходы + + ru + Доходы + + true + Turnovers + Managed + true + + Количество + + ru + Количество + + + Number + + 12 + 3 + + + + + ShowError + Use + + + Сумма + + ru + Сумма + + + Number + + 15 + 2 + + + + + ShowError + Use + + + Номенклатура + + ru + Номенклатура + + + CatalogRef.Номенклатура + CatalogRef.ВидыДоходов + + + + ShowError + Use + true + + + Пользователь + + ru + Пользователь + + + CatalogRef.Пользователи + + + + Use + true + + diff --git a/Проект_деньги/src/AccumulationRegisters/Продажи/Продажи.mdo b/Проект_деньги/src/AccumulationRegisters/Продажи/Продажи.mdo new file mode 100644 index 0000000..4a496be --- /dev/null +++ b/Проект_деньги/src/AccumulationRegisters/Продажи/Продажи.mdo @@ -0,0 +1,85 @@ + + + + + + + + + + + Продажи + + ru + Продажи + + true + Turnovers + Managed + true + + Количество + + ru + Количество + + + Number + + 12 + 3 + + + + + ShowError + Use + + + Сумма + + ru + Сумма + + + Number + + 15 + 2 + + + + + ShowError + Use + + + Номенклатура + + ru + Номенклатура + + + CatalogRef.Номенклатура + + + + ShowError + Use + true + + + Пользователь + + ru + Пользователь + + + CatalogRef.Пользователи + + + + Use + true + + diff --git a/Проект_деньги/src/AccumulationRegisters/Расходы/Расходы.mdo b/Проект_деньги/src/AccumulationRegisters/Расходы/Расходы.mdo new file mode 100644 index 0000000..1ead7d1 --- /dev/null +++ b/Проект_деньги/src/AccumulationRegisters/Расходы/Расходы.mdo @@ -0,0 +1,85 @@ + + + + + + + + + + + Расходы + + ru + Расходы + + true + Turnovers + Managed + true + + Количество + + ru + Количество + + + Number + + 12 + 3 + + + + + ShowError + Use + + + Сумма + + ru + Сумма + + + Number + + 15 + 2 + + + + + ShowError + Use + + + Номенклатура + + ru + Номенклатура + + + CatalogRef.Номенклатура + + + + ShowError + Use + true + + + Пользователь + + ru + Пользователь + + + CatalogRef.Пользователи + + + + Use + true + + diff --git a/Проект_деньги/src/Catalogs/Банки/ObjectModule.bsl b/Проект_деньги/src/Catalogs/Банки/ObjectModule.bsl new file mode 100644 index 0000000..4898069 --- /dev/null +++ b/Проект_деньги/src/Catalogs/Банки/ObjectModule.bsl @@ -0,0 +1,6 @@ + +Процедура ПриУстановкеНовогоКода(СтандартнаяОбработка, Префикс) + + Префикс = Обмен.ПолучитьПрефиксНомера(); + +КонецПроцедуры diff --git a/Проект_деньги/src/Catalogs/Банки/Банки.mdo b/Проект_деньги/src/Catalogs/Банки/Банки.mdo new file mode 100644 index 0000000..2e35653 --- /dev/null +++ b/Проект_деньги/src/Catalogs/Банки/Банки.mdo @@ -0,0 +1,37 @@ + + + + + + + + + + Банки + + ru + Банки + + true + Catalog.Банки.StandardAttribute.Description + Catalog.Банки.StandardAttribute.Code + DontUse + Use + Managed + Use + + ru + Банк + + 2 + true + 9 + 150 + String + Variable + true + true + AsDescription + InDialog + BothWays + diff --git a/Проект_деньги/src/Catalogs/Валюты/Валюты.mdo b/Проект_деньги/src/Catalogs/Валюты/Валюты.mdo new file mode 100644 index 0000000..2ea5d22 --- /dev/null +++ b/Проект_деньги/src/Catalogs/Валюты/Валюты.mdo @@ -0,0 +1,41 @@ + + + + + + + + + + Валюты + + ru + Валюты + + true + Catalog.Валюты.StandardAttribute.Description + Catalog.Валюты.StandardAttribute.Code + DontUse + Use + Managed + Use + + ru + Валюта + + + ru + Валюты + + 2 + true + 3 + 10 + String + Variable + true + true + AsDescription + InDialog + BothWays + diff --git a/Проект_деньги/src/Catalogs/ВидыДоходов/Forms/ФормаВыбора/Attributes/Список/ExtInfo/ListSettings.dcss b/Проект_деньги/src/Catalogs/ВидыДоходов/Forms/ФормаВыбора/Attributes/Список/ExtInfo/ListSettings.dcss new file mode 100644 index 0000000..9b5b065 --- /dev/null +++ b/Проект_деньги/src/Catalogs/ВидыДоходов/Forms/ФормаВыбора/Attributes/Список/ExtInfo/ListSettings.dcss @@ -0,0 +1,17 @@ + + + + Normal + dfcece9d-5077-440b-b6b3-45a5cb4538eb + + + Normal + 88619765-ccb3-46c6-ac52-38e9c992ebd4 + + + Normal + b75fecce-942b-4aed-abc9-e6a02e460fb3 + + Normal + 911b6018-f537-43e8-a417-da56b22f9aec + diff --git a/Проект_деньги/src/Catalogs/ВидыДоходов/Forms/ФормаВыбора/Form.form b/Проект_деньги/src/Catalogs/ВидыДоходов/Forms/ФормаВыбора/Form.form new file mode 100644 index 0000000..f06476d --- /dev/null +++ b/Проект_деньги/src/Catalogs/ВидыДоходов/Forms/ФормаВыбора/Form.form @@ -0,0 +1,258 @@ + + + + СписокКомпоновщикНастроекПользовательскиеНастройки + 1 + true + true + + true + + + <key>ru</key> + <value>Группа пользовательских настроек</value> + + false + + СписокКомпоновщикНастроекПользовательскиеНастройкиРасширеннаяПодсказка + 2 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + WeakSeparation + true + true + Auto + Auto + + + + Список + 3 + true + true + + true + + + Список + + true + None + + Наименование + 16 + true + true + + true + + + Список.Description + + true + + НаименованиеРасширеннаяПодсказка + 18 + Label + true + true + + Left + + + + НаименованиеКонтекстноеМеню + 17 + true + + LabelField + Enter + true + Left + true + + true + true + + + None + + СписокКоманднаяПанель + 5 + Left + + + СписокСтрокаПоиска + 7 + + СписокСтрокаПоискаРасширеннаяПодсказка + 9 + Label + true + true + + Left + + + + СписокСтрокаПоискаКонтекстноеМеню + 8 + true + + Список + + true + + + + СписокСостояниеПросмотра + 10 + + СписокСостояниеПросмотраРасширеннаяПодсказка + 12 + Label + true + true + + Left + + + + СписокСостояниеПросмотраКонтекстноеМеню + 11 + true + + ViewStatusAddition + Список + + true + + + + СписокУправлениеПоиском + 13 + + СписокУправлениеПоискомРасширеннаяПодсказка + 15 + Label + true + true + + Left + + + + СписокУправлениеПоискомКонтекстноеМеню + 14 + true + + SearchControlAddition + Список + + true + + + + СписокРасширеннаяПодсказка + 6 + Label + true + true + + Left + + + + СписокКонтекстноеМеню + 4 + true + + true + true + true + true + true + true + MultiRow +
true
+ 1 + 1 + AutoUse + AutoUse + true + true + true + Auto + Auto + ExpandTopLevel + true + true + true + AsFileRef + + Список.DefaultPicture + + + 60 + + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + true + true + СписокКомпоновщикНастроекПользовательскиеНастройки + +
+ + FormCommandBar + -1 + Left + true + + LockOwnerWindow + true + true + true + Vertical + true + true + true + true + true + + Список + 1 + + DynamicList + + + true + + + true + +
true
+ + Catalog.ВидыДоходов + true + true + true + true + +
+ + + + + +
diff --git a/Проект_деньги/src/Catalogs/ВидыДоходов/ObjectModule.bsl b/Проект_деньги/src/Catalogs/ВидыДоходов/ObjectModule.bsl new file mode 100644 index 0000000..42b5ab2 --- /dev/null +++ b/Проект_деньги/src/Catalogs/ВидыДоходов/ObjectModule.bsl @@ -0,0 +1,6 @@ + +Процедура ПриУстановкеНовогоКода(СтандартнаяОбработка, Префикс) + + Префикс = Обмен.ПолучитьПрефиксНомера(); + +КонецПроцедуры diff --git a/Проект_деньги/src/Catalogs/ВидыДоходов/ВидыДоходов.mdo b/Проект_деньги/src/Catalogs/ВидыДоходов/ВидыДоходов.mdo new file mode 100644 index 0000000..fe31bef --- /dev/null +++ b/Проект_деньги/src/Catalogs/ВидыДоходов/ВидыДоходов.mdo @@ -0,0 +1,43 @@ + + + + + + + + + + ВидыДоходов + + ru + Виды доходов + + true + Catalog.ВидыДоходов.StandardAttribute.Description + Catalog.ВидыДоходов.StandardAttribute.Code + DontUse + Use + Managed + Use + 2 + true + 9 + 50 + String + Variable + true + true + AsDescription + InDialog + BothWays + Catalog.ВидыДоходов.Form.ФормаВыбора + + ФормаВыбора + + ru + Форма выбора + + PersonalComputer + MobileDevice + + diff --git a/Проект_деньги/src/Catalogs/ЕдиницыИзмерений/ObjectModule.bsl b/Проект_деньги/src/Catalogs/ЕдиницыИзмерений/ObjectModule.bsl new file mode 100644 index 0000000..42b5ab2 --- /dev/null +++ b/Проект_деньги/src/Catalogs/ЕдиницыИзмерений/ObjectModule.bsl @@ -0,0 +1,6 @@ + +Процедура ПриУстановкеНовогоКода(СтандартнаяОбработка, Префикс) + + Префикс = Обмен.ПолучитьПрефиксНомера(); + +КонецПроцедуры diff --git a/Проект_деньги/src/Catalogs/ЕдиницыИзмерений/ЕдиницыИзмерений.mdo b/Проект_деньги/src/Catalogs/ЕдиницыИзмерений/ЕдиницыИзмерений.mdo new file mode 100644 index 0000000..31adf52 --- /dev/null +++ b/Проект_деньги/src/Catalogs/ЕдиницыИзмерений/ЕдиницыИзмерений.mdo @@ -0,0 +1,33 @@ + + + + + + + + + + ЕдиницыИзмерений + + ru + Единицы измерений + + true + Catalog.ЕдиницыИзмерений.StandardAttribute.Description + Catalog.ЕдиницыИзмерений.StandardAttribute.Code + DontUse + Use + Managed + Use + 2 + true + 9 + 50 + String + Variable + true + true + AsDescription + InDialog + BothWays + diff --git a/Проект_деньги/src/Catalogs/Номенклатура/Forms/ФормаВыбора/Attributes/Список/ExtInfo/ListSettings.dcss b/Проект_деньги/src/Catalogs/Номенклатура/Forms/ФормаВыбора/Attributes/Список/ExtInfo/ListSettings.dcss new file mode 100644 index 0000000..9b5b065 --- /dev/null +++ b/Проект_деньги/src/Catalogs/Номенклатура/Forms/ФормаВыбора/Attributes/Список/ExtInfo/ListSettings.dcss @@ -0,0 +1,17 @@ + + + + Normal + dfcece9d-5077-440b-b6b3-45a5cb4538eb + + + Normal + 88619765-ccb3-46c6-ac52-38e9c992ebd4 + + + Normal + b75fecce-942b-4aed-abc9-e6a02e460fb3 + + Normal + 911b6018-f537-43e8-a417-da56b22f9aec + diff --git a/Проект_деньги/src/Catalogs/Номенклатура/Forms/ФормаВыбора/Form.form b/Проект_деньги/src/Catalogs/Номенклатура/Forms/ФормаВыбора/Form.form new file mode 100644 index 0000000..ce0d5ea --- /dev/null +++ b/Проект_деньги/src/Catalogs/Номенклатура/Forms/ФормаВыбора/Form.form @@ -0,0 +1,264 @@ + + + + СписокКомпоновщикНастроекПользовательскиеНастройки + 1 + true + true + + true + + + <key>ru</key> + <value>Группа пользовательских настроек</value> + + false + + СписокКомпоновщикНастроекПользовательскиеНастройкиРасширеннаяПодсказка + 2 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + WeakSeparation + true + true + Auto + Auto + + + + Список + 3 + true + true + + true + + + Список + + true + None + + Наименование + 16 + true + true + + true + + + Список.Description + + true + + НаименованиеРасширеннаяПодсказка + 18 + Label + true + true + + Left + + + + НаименованиеКонтекстноеМеню + 17 + true + + LabelField + Enter + true + Left + true + + true + true + + + None + + СписокКоманднаяПанель + 5 + Left + + + СписокСтрокаПоиска + 7 + + СписокСтрокаПоискаРасширеннаяПодсказка + 9 + Label + true + true + + Left + + + + СписокСтрокаПоискаКонтекстноеМеню + 8 + true + + Список + + true + + + + СписокСостояниеПросмотра + 10 + + СписокСостояниеПросмотраРасширеннаяПодсказка + 12 + Label + true + true + + Left + + + + СписокСостояниеПросмотраКонтекстноеМеню + 11 + true + + ViewStatusAddition + Список + + true + + + + СписокУправлениеПоиском + 13 + + СписокУправлениеПоискомРасширеннаяПодсказка + 15 + Label + true + true + + Left + + + + СписокУправлениеПоискомКонтекстноеМеню + 14 + true + + SearchControlAddition + Список + + true + + + + СписокРасширеннаяПодсказка + 6 + Label + true + true + + Left + + + + СписокКонтекстноеМеню + 4 + true + + HierarchicalList + true + true + true + true + true + true + MultiRow +
true
+ 1 + 1 + AutoUse + AutoUse + true + true + true + Auto + Auto + ExpandTopLevel + true + true + true + true + AsFileRef + + Список.DefaultPicture + + + 60 + + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + true + true + СписокКомпоновщикНастроекПользовательскиеНастройки + +
+ + ФормаКоманднаяПанель + -1 + Left + true + + + OnCreateAtServer + ПриСозданииНаСервере + + LockOwnerWindow + true + true + true + Vertical + true + true + true + true + true + + Список + 1 + + DynamicList + + + true + + + true + +
true
+ + Catalog.Номенклатура + true + true + true + true + +
+ + + + + +
diff --git a/Проект_деньги/src/Catalogs/Номенклатура/Forms/ФормаВыбора/Module.bsl b/Проект_деньги/src/Catalogs/Номенклатура/Forms/ФормаВыбора/Module.bsl new file mode 100644 index 0000000..15a8b46 --- /dev/null +++ b/Проект_деньги/src/Catalogs/Номенклатура/Forms/ФормаВыбора/Module.bsl @@ -0,0 +1,44 @@ + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + //отбор помеченных на удаление + Отбор = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + Отбор.Использование = Истина; + Отбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ПометкаУдаления"); + Отбор.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + Отбор.ПравоеЗначение = Ложь; + + //проверка для отчетов + Если (Параметры.Свойство("Товар") ИЛИ + Параметры.Свойство("Услуга") ИЛИ + Параметры.Свойство("КомПлатежи")) Тогда + + //отбор вида номенклатуры + Отбор = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + Отбор.Использование = Истина; + Отбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ВидНоменклатуры"); + Отбор.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + + //группировка по родителю + ГруппировкаСписка = Список.Группировка.Элементы; + ПолеГруппировкаСписка = ГруппировкаСписка.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных")); + ПолеГруппировкаСписка.Поле = Новый ПолеКомпоновкиДанных("Родитель"); + Если Параметры.Свойство("Товар") Тогда + Отбор.ПравоеЗначение = Перечисления.ВидыНоменклатуры.Товар; + АвтоЗаголовок = Ложь; + Заголовок = "Выберите товар!"; + ИначеЕсли Параметры.Свойство("Услуга") Тогда + Отбор.ПравоеЗначение = Перечисления.ВидыНоменклатуры.Услуга; + АвтоЗаголовок = Ложь; + Заголовок = "Выберите услугу!"; + ИначеЕсли Параметры.Свойство("КомПлатежи") Тогда + Отбор.ПравоеЗначение = Перечисления.ВидыНоменклатуры.КУ; + АвтоЗаголовок = Ложь; + Заголовок = "Выберите ком. услугу"; + КонецЕсли; + КонецЕсли; + + + +КонецПроцедуры diff --git a/Проект_деньги/src/Catalogs/Номенклатура/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss b/Проект_деньги/src/Catalogs/Номенклатура/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss new file mode 100644 index 0000000..595ae03 --- /dev/null +++ b/Проект_деньги/src/Catalogs/Номенклатура/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss @@ -0,0 +1,23 @@ + + + + + false + Ссылка + Equal + Справочник.Номенклатура.ПустаяСсылка + + Normal + dfcece9d-5077-440b-b6b3-45a5cb4538eb + + + Normal + 88619765-ccb3-46c6-ac52-38e9c992ebd4 + + + Normal + b75fecce-942b-4aed-abc9-e6a02e460fb3 + + Normal + 911b6018-f537-43e8-a417-da56b22f9aec + diff --git a/Проект_деньги/src/Catalogs/Номенклатура/Forms/ФормаСписка/Form.form b/Проект_деньги/src/Catalogs/Номенклатура/Forms/ФормаСписка/Form.form new file mode 100644 index 0000000..bf98b50 --- /dev/null +++ b/Проект_деньги/src/Catalogs/Номенклатура/Forms/ФормаСписка/Form.form @@ -0,0 +1,315 @@ + + + + СписокКомпоновщикНастроекПользовательскиеНастройки + 1 + true + true + + true + + + <key>ru</key> + <value>Группа пользовательских настроек</value> + + false + + СписокКомпоновщикНастроекПользовательскиеНастройкиРасширеннаяПодсказка + 2 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + WeakSeparation + true + true + Auto + Auto + + + + Список + 3 + true + true + + true + + + Список + + true + None + + Наименование + 16 + true + true + + true + + + Список.Description + + true + + НаименованиеРасширеннаяПодсказка + 18 + Label + true + true + + Left + + + + НаименованиеКонтекстноеМеню + 17 + true + + LabelField + Enter + true + Left + true + + true + true + + + None + + СписокКоманднаяПанель + 5 + Left + + + СписокСтрокаПоиска + 7 + + СписокСтрокаПоискаРасширеннаяПодсказка + 9 + Label + true + true + + Left + + + + СписокСтрокаПоискаКонтекстноеМеню + 8 + true + + Список + + true + + + + СписокСостояниеПросмотра + 10 + + СписокСостояниеПросмотраРасширеннаяПодсказка + 12 + Label + true + true + + Left + + + + СписокСостояниеПросмотраКонтекстноеМеню + 11 + true + + ViewStatusAddition + Список + + true + + + + СписокУправлениеПоиском + 13 + + СписокУправлениеПоискомРасширеннаяПодсказка + 15 + Label + true + true + + Left + + + + СписокУправлениеПоискомКонтекстноеМеню + 14 + true + + SearchControlAddition + Список + + true + + + + СписокРасширеннаяПодсказка + 6 + Label + true + true + + Left + + + + СписокКонтекстноеМеню + 4 + true + + HierarchicalList + true + true + true + true + true + MultiRow +
true
+ 1 + 1 + AutoUse + AutoUse + true + true + true + Auto + Auto + ExpandTopLevel + true + true + true + true + + Список.DefaultPicture + + + 60 + + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + true + true + СписокКомпоновщикНастроекПользовательскиеНастройки + +
+ + ФормаПоискПоШтрихКоду + 22 + true + true + + true + + + ФормаПоискПоШтрихКодуРасширеннаяПодсказка + 23 + Label + true + true + + Left + + + UsualButton + Form.Command.ПоискПоШтрихКоду + Auto + true + 1 + true + true + Center + UserCmds + Auto + + + ФормаКоманднаяПанель + -1 + Left + true + + + OnOpen + ПриОткрытии + + true + true + true + Vertical + true + true + true + true + true + + Список + 1 + + DynamicList + + + true + + + true + +
true
+ + Catalog.Номенклатура + true + true + true + true + +
+ + ПоискПоШтрихКоду + + <key>ru</key> + <value>Поиск по штрих коду</value> + + 1 + + ru + Поиск по штрих коду + + + true + + + CommonPicture.СканШтрихКода + + + + ПоискПоШтрихКоду + + + TextPicture + DontUse + + + + + + +
diff --git a/Проект_деньги/src/Catalogs/Номенклатура/Forms/ФормаСписка/Module.bsl b/Проект_деньги/src/Catalogs/Номенклатура/Forms/ФормаСписка/Module.bsl new file mode 100644 index 0000000..c6021e8 --- /dev/null +++ b/Проект_деньги/src/Catalogs/Номенклатура/Forms/ФормаСписка/Module.bsl @@ -0,0 +1,78 @@ + +&НаКлиенте +Процедура ПоискПоШтрихКоду(Команда) + + #Если МобильноеПриложениеКлиент Тогда + + Если СредстваМультимедиа.ПоддерживаетсяСканированиеШтрихКодов() Тогда + ОповещениеСканирования = Новый ОписаниеОповещения("ОбработкаОтсканированногоШтрихКода", ЭтотОбъект); + СредстваМультимедиа.ПоказатьСканированиеШтрихКодов("Сканирование штриш-кода",ОповещениеСканирования,, ТипШтрихКода.Все); + СредстваМультимедиа.ЗакрытьСканированиеШтрихКодов(); + Иначе + Сообщение = Новый СообщениеПользователю; + Сообщение.Текст = "Не поддерживается сканирование штрих-кодов на данном устройстве"; + Сообщение.Сообщить(); + КонецЕсли; + + #КонецЕсли + +КонецПроцедуры + +&НаКлиенте +Процедура ОбработкаОтсканированногоШтрихКода(ШтрихКод, Результат, Сообщение, ДопПараметры) Экспорт + + Если Результат И ЗначениеЗаполнено(ШтрихКод) Тогда + Номенклатура = НайтиНоменклатуруПоШтрихКоду(ШтрихКод); + Если Номенклатура = Неопределено Тогда + Сообщение = Новый СообщениеПользователю; + Сообщение.Текст = "Штрих-код не найден"; + Сообщение.Сообщить(); + Иначе + Элементы.Список.Отображение = ОтображениеТаблицы.Список; + НовЭлементОтбора = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + НовЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Ссылка"); + НовЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + НовЭлементОтбора.Использование = Истина; + НовЭлементОтбора.ПравоеЗначение = Номенклатура; + КонецЕсли; + Иначе + Сообщение.Текст = "Ошибка сканирования"; + Сообщение.Сообщить(); + КонецЕсли; + +КонецПроцедуры + +&НаСервереБезКонтекста +Функция НайтиНоменклатуруПоШтрихКоду(ШтрихКод) + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ШтрихКоды.Владелец.Ссылка КАК Владелец + |ИЗ + | РегистрСведений.ШтрихКоды КАК ШтрихКоды + |ГДЕ + | ШтрихКоды.ШтрихКод = &ШтрихКод + | + |СГРУППИРОВАТЬ ПО + | ШтрихКоды.Владелец.Ссылка"; + + Запрос.УстановитьПараметр("ШтрихКод", ШтрихКод); + РезультатЗапроса = Запрос.Выполнить(); + Выборка = РезультатЗапроса.Выбрать(); + Если РезультатЗапроса.Пустой() Тогда + Возврат Неопределено; + Иначе + Выборка.Следующий(); + Возврат Выборка.Владелец; + КонецЕсли; + +КонецФункции // () + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + Элементы.Список.Отображение = ОтображениеТаблицы.Дерево; + +КонецПроцедуры + diff --git a/Проект_деньги/src/Catalogs/Номенклатура/Forms/ФормаЭлемента/Attributes/ШтрихКоды/ExtInfo/ListSettings.dcss b/Проект_деньги/src/Catalogs/Номенклатура/Forms/ФормаЭлемента/Attributes/ШтрихКоды/ExtInfo/ListSettings.dcss new file mode 100644 index 0000000..9b5b065 --- /dev/null +++ b/Проект_деньги/src/Catalogs/Номенклатура/Forms/ФормаЭлемента/Attributes/ШтрихКоды/ExtInfo/ListSettings.dcss @@ -0,0 +1,17 @@ + + + + Normal + dfcece9d-5077-440b-b6b3-45a5cb4538eb + + + Normal + 88619765-ccb3-46c6-ac52-38e9c992ebd4 + + + Normal + b75fecce-942b-4aed-abc9-e6a02e460fb3 + + Normal + 911b6018-f537-43e8-a417-da56b22f9aec + diff --git a/Проект_деньги/src/Catalogs/Номенклатура/Forms/ФормаЭлемента/Form.form b/Проект_деньги/src/Catalogs/Номенклатура/Forms/ФормаЭлемента/Form.form new file mode 100644 index 0000000..18f8338 --- /dev/null +++ b/Проект_деньги/src/Catalogs/Номенклатура/Forms/ФормаЭлемента/Form.form @@ -0,0 +1,663 @@ + + + + Страницы + 18 + + Данные + 20 + + Группа1 + 16 + + Код + 1 + true + true + + true + + + Объект.Code + + + КодРасширеннаяПодсказка + 3 + Label + true + true + + Left + + + + КодКонтекстноеМеню + 2 + true + + InputField + EnterOnInput + true + Left + true + + true + true + true + true + true + true + + + + Наименование + 4 + true + true + + true + + + Объект.Description + + + НаименованиеРасширеннаяПодсказка + 6 + Label + true + true + + Left + + + + НаименованиеКонтекстноеМеню + 5 + true + + InputField + EnterOnInput + true + Left + true + + true + true + true + true + true + true + + + true + true + + true + + + Группа1РасширеннаяПодсказка + 17 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + Родитель + 7 + true + true + + true + + + Объект.Parent + + + OnChange + РодительПриИзменении + + + РодительРасширеннаяПодсказка + 9 + Label + true + true + + Left + + + + РодительКонтекстноеМеню + 8 + true + + InputField + EnterOnInput + true + Left + true + + true + true + true + true + true + true + + + + ВидНоменклатуры + 50 + true + true + + true + + + Объект.ВидНоменклатуры + + + OnChange + ВидНоменклатурыПриИзменении + + + ВидНоменклатурыРасширеннаяПодсказка + 52 + Label + true + true + + Left + + + + ВидНоменклатурыКонтекстноеМеню + 51 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + + + + ЕдиницаИзмерения + 10 + true + true + + true + + + Объект.ЕдиницаИзмерения + + + ЕдиницаИзмеренияРасширеннаяПодсказка + 12 + Label + true + true + + Left + + + + ЕдиницаИзмеренияКонтекстноеМеню + 11 + true + + InputField + EnterOnInput + true + Left + true + + true + true + true + true + true + true + + + true + true + + true + + + <key>ru</key> + <value>Данные</value> + + + ru + Данные + + + ДанныеРасширеннаяПодсказка + 21 + Label + true + true + + Left + + + Page + + Vertical + true + + + + ШтрихКоды + 22 + + ШтрихКоды1 + 24 + true + true + + true + + + ШтрихКоды + + None + + ШтрихКоды1ШтрихКод + 40 + true + true + + true + + + ШтрихКоды.ШтрихКод + + + ШтрихКоды1ШтрихКодРасширеннаяПодсказка + 42 + Label + true + true + + Left + + + + ШтрихКоды1ШтрихКодКонтекстноеМеню + 41 + true + + LabelField + Enter + true + Left + true + + true + true + + + + ШтрихКоды1КоманднаяПанель + 26 + + ШтрихКоды1ДобавитьШтрихКод + 43 + true + true + + true + + + ШтрихКоды1ДобавитьШтрихКодРасширеннаяПодсказка + 44 + Label + true + true + + Left + + + Form.Command.ДобавитьШтрихКод + Auto + true + true + UserCmds + Auto + + Left + + + ШтрихКоды1СтрокаПоиска + 28 + + ШтрихКоды1СтрокаПоискаРасширеннаяПодсказка + 30 + Label + true + true + + Left + + + + ШтрихКоды1СтрокаПоискаКонтекстноеМеню + 29 + true + + ШтрихКоды1 + + true + + + + ШтрихКоды1СостояниеПросмотра + 31 + + ШтрихКоды1СостояниеПросмотраРасширеннаяПодсказка + 33 + Label + true + true + + Left + + + + ШтрихКоды1СостояниеПросмотраКонтекстноеМеню + 32 + true + + ViewStatusAddition + ШтрихКоды1 + + true + + + + ШтрихКоды1УправлениеПоиском + 34 + + ШтрихКоды1УправлениеПоискомРасширеннаяПодсказка + 36 + Label + true + true + + Left + + + + ШтрихКоды1УправлениеПоискомКонтекстноеМеню + 35 + true + + SearchControlAddition + ШтрихКоды1 + + true + + + + ШтрихКоды1РасширеннаяПодсказка + 27 + Label + true + true + + Left + + + + ШтрихКоды1КонтекстноеМеню + 25 + true + + HierarchicalList + true + true + true + true + true + MultiRow +
true
+ 1 + 1 + AutoUse + AutoUse + true + true + true + Auto + Auto + true + true + true + AsFileRef + + ШтрихКоды.DefaultPicture + + + 60 + + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + true + true + +
+ true + true + + true + + + <key>ru</key> + <value>Штрих коды</value> + + + ru + Штрих коды + + + ШтрихКодыРасширеннаяПодсказка + 23 + Label + true + true + + Left + + + Page + + Vertical + true + +
+ true + true + + true + + + ru + Страницы + + + СтраницыРасширеннаяПодсказка + 19 + Label + true + true + + Left + + + Pages + + TabsOnTop + Auto + +
+ + ДобавитьШтрихКод + 48 + true + true + + true + + + ДобавитьШтрихКодРасширеннаяПодсказка + 49 + Label + true + true + + Left + + + UsualButton + Form.Command.ДобавитьШтрихКод + Auto + true + 1 + true + true + Center + UserCmds + Auto + + + ФормаКоманднаяПанель + -1 + Left + true + + + ChoiceProcessing + ОбработкаВыбора + + + OnOpen + ПриОткрытии + + + BeforeClose + ПередЗакрытием + + + OnCreateAtServer + ПриСозданииНаСервере + + + OnClose + ПриЗакрытии + + LockOwnerWindow + true + true + true + Vertical + true + true + true + true + true + + Объект + 1 + + CatalogObject.Номенклатура + + + true + + + true + +
true
+ true +
+ + ШтрихКоды + + <key>ru</key> + <value>Штрих коды</value> + + 2 + + DynamicList + + + true + + + true + + + InformationRegister.ШтрихКоды + true + true + true + true + + + + ДобавитьШтрихКод + + <key>ru</key> + <value>Добавить штрих код</value> + + 1 + + ru + Добавить штрих код + + + true + + + CommonPicture.ШтрихКод + + + + ДобавитьШтрихКод + + + TextPicture + Auto + + + + + + +
diff --git a/Проект_деньги/src/Catalogs/Номенклатура/Forms/ФормаЭлемента/Module.bsl b/Проект_деньги/src/Catalogs/Номенклатура/Forms/ФормаЭлемента/Module.bsl new file mode 100644 index 0000000..4e98930 --- /dev/null +++ b/Проект_деньги/src/Catalogs/Номенклатура/Forms/ФормаЭлемента/Module.bsl @@ -0,0 +1,105 @@ + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + ВидЕдИзм = ВидимостьЕденицаИзмерения(Объект.ВидНоменклатуры); + Если ВидЕдИзм Тогда + Элементы.ЕдиницаИзмерения.Видимость = Истина; + Иначе + Элементы.ЕдиницаИзмерения.Видимость = Ложь; + КонецЕсли; + + Отбор = ШтрихКоды.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + Отбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Владелец"); + Отбор.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + Отбор.Использование = Истина; + Отбор.ПравоеЗначение = Объект.Ссылка; + +КонецПроцедуры + +&НаСервереБезКонтекста +Функция ВидимостьЕденицаИзмерения(ВидНоменклатуры) + + Если ВидНоменклатуры = Перечисления.ВидыНоменклатуры.Услуга Тогда + Возврат Ложь; + Иначе + Возврат Истина; + КонецЕсли; + +КонецФункции // ВидимостьЕденицаИзмерения() + +&НаКлиенте +Процедура ДобавитьШтрихКод(Команда) + + #Если МобильноеПриложениеКлиент Тогда + + Если СредстваМультимедиа.ПоддерживаетсяСканированиеШтрихКодов() Тогда + ОбработчикСканирования = Новый ОписаниеОповещения ("ОбработчикСканирования", ЭтотОбъект); + СредстваМультимедиа.ПоказатьСканированиеШтрихКодов("Отсканируйте штрих-код", ОбработчикСканирования,,); + СредстваМультимедиа.ЗакрытьСканированиеШтрихКодов(); + Иначе + Сообщение = Новый СообщениеПользователю; + Сообщение.Текст = "На данном устройстве не поддерживается сканирование штрих-кода"; + Сообщение.Сообщить(); + КонецЕсли; + + #КонецЕсли + +КонецПроцедуры + +&НаКлиенте +Процедура ОбработчикСканирования(ШтрихКод, Результат, Сообщение, ДополнительныеПараметры) Экспорт + +#Если МобильноеПриложениеКлиент Тогда + Если Результат Тогда + + СоздатьЗаписьВРегистр(Объект.Ссылка, ШтрихКод); + ЭтотОбъект.ОбновитьОтображениеДанных(); + СредстваМультимедиа.ЗакрытьСканированиеШтрихКодов(); + + КонецЕсли; +#КонецЕсли + +КонецПроцедуры // Обработчик сканирования(ШтрихКод, Результат, Сообщение) + +&НаСервереБезКонтекста +Процедура СоздатьЗаписьВРегистр(Ссылка, ШтрихКод) + + НаборЗаписей = РегистрыСведений.ШтрихКоды.СоздатьМенеджерЗаписи(); + НаборЗаписей.Владелец = Ссылка; + НаборЗаписей.ШтрихКод = ШтрихКод; + НаборЗаписей.Записать(); + +КонецПроцедуры // () + +&НаКлиенте +Процедура ВидНоменклатурыПриИзменении(Элемент) + + ВидЕдИзм = ВидимостьЕденицаИзмерения(Объект.ВидНоменклатуры); + Если ВидЕдИзм Тогда + Элементы.ЕдиницаИзмерения.Видимость = Истина; + Иначе + Элементы.ЕдиницаИзмерения.Видимость = Ложь; + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.Свойство("мПараметров") Тогда + мПараметров = Параметры.мПараметров; + Объект.Наименование = мПараметров.Номенклатура; + Объект.Родитель = мПараметров.Группа; + Объект.ЕдиницаИзмерения = мПараметров.ЕдИзм; + Объект.ВидНоменклатуры = Перечисления.ВидыНоменклатуры.Товар; + КонецЕсли; + +КонецПроцедуры + + + + + + + \ No newline at end of file diff --git a/Проект_деньги/src/Catalogs/Номенклатура/ObjectModule.bsl b/Проект_деньги/src/Catalogs/Номенклатура/ObjectModule.bsl new file mode 100644 index 0000000..4898069 --- /dev/null +++ b/Проект_деньги/src/Catalogs/Номенклатура/ObjectModule.bsl @@ -0,0 +1,6 @@ + +Процедура ПриУстановкеНовогоКода(СтандартнаяОбработка, Префикс) + + Префикс = Обмен.ПолучитьПрефиксНомера(); + +КонецПроцедуры diff --git a/Проект_деньги/src/Catalogs/Номенклатура/Номенклатура.mdo b/Проект_деньги/src/Catalogs/Номенклатура/Номенклатура.mdo new file mode 100644 index 0000000..63cceb5 --- /dev/null +++ b/Проект_деньги/src/Catalogs/Номенклатура/Номенклатура.mdo @@ -0,0 +1,95 @@ + + + + + + + + + + Номенклатура + + ru + Номенклатура + + true + Catalog.Номенклатура.StandardAttribute.Description + Catalog.Номенклатура.StandardAttribute.Code + DontUse + Use + Managed + Use + true + 2 + true + 9 + 150 + String + Variable + true + true + AsDescription + InDialog + BothWays + Catalog.Номенклатура.Form.ФормаЭлемента + Catalog.Номенклатура.Form.ФормаСписка + Catalog.Номенклатура.Form.ФормаВыбора + + ЕдиницаИзмерения + + ru + Единица измерения + + + CatalogRef.ЕдиницыИзмерений + + + + + Use + Use + + + ВидНоменклатуры + + ru + Вид номенклатуры + + + EnumRef.ВидыНоменклатуры + + + + ShowError + + Use + Use + + + ФормаЭлемента + + ru + Форма элемента + + PersonalComputer + MobileDevice + + + ФормаСписка + + ru + Форма списка + + PersonalComputer + MobileDevice + + + ФормаВыбора + + ru + Форма выбора + + PersonalComputer + MobileDevice + + diff --git a/Проект_деньги/src/Catalogs/Пользователи/ObjectModule.bsl b/Проект_деньги/src/Catalogs/Пользователи/ObjectModule.bsl new file mode 100644 index 0000000..42b5ab2 --- /dev/null +++ b/Проект_деньги/src/Catalogs/Пользователи/ObjectModule.bsl @@ -0,0 +1,6 @@ + +Процедура ПриУстановкеНовогоКода(СтандартнаяОбработка, Префикс) + + Префикс = Обмен.ПолучитьПрефиксНомера(); + +КонецПроцедуры diff --git a/Проект_деньги/src/Catalogs/Пользователи/Пользователи.mdo b/Проект_деньги/src/Catalogs/Пользователи/Пользователи.mdo new file mode 100644 index 0000000..58c5af5 --- /dev/null +++ b/Проект_деньги/src/Catalogs/Пользователи/Пользователи.mdo @@ -0,0 +1,33 @@ + + + + + + + + + + Пользователи + + ru + Пользователи + + true + Catalog.Пользователи.StandardAttribute.Description + Catalog.Пользователи.StandardAttribute.Code + DontUse + Use + Managed + Use + 2 + true + 9 + 150 + String + Variable + true + true + AsDescription + InDialog + BothWays + diff --git a/Проект_деньги/src/Catalogs/Счета/Forms/ФормаВыбора/Attributes/Список/ExtInfo/ListSettings.dcss b/Проект_деньги/src/Catalogs/Счета/Forms/ФормаВыбора/Attributes/Список/ExtInfo/ListSettings.dcss new file mode 100644 index 0000000..9b5b065 --- /dev/null +++ b/Проект_деньги/src/Catalogs/Счета/Forms/ФормаВыбора/Attributes/Список/ExtInfo/ListSettings.dcss @@ -0,0 +1,17 @@ + + + + Normal + dfcece9d-5077-440b-b6b3-45a5cb4538eb + + + Normal + 88619765-ccb3-46c6-ac52-38e9c992ebd4 + + + Normal + b75fecce-942b-4aed-abc9-e6a02e460fb3 + + Normal + 911b6018-f537-43e8-a417-da56b22f9aec + diff --git a/Проект_деньги/src/Catalogs/Счета/Forms/ФормаВыбора/Form.form b/Проект_деньги/src/Catalogs/Счета/Forms/ФормаВыбора/Form.form new file mode 100644 index 0000000..1fcdf95 --- /dev/null +++ b/Проект_деньги/src/Catalogs/Счета/Forms/ФормаВыбора/Form.form @@ -0,0 +1,262 @@ + + + + СписокКомпоновщикНастроекПользовательскиеНастройки + 1 + true + true + + true + + + <key>ru</key> + <value>Группа пользовательских настроек</value> + + false + + СписокКомпоновщикНастроекПользовательскиеНастройкиРасширеннаяПодсказка + 2 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + WeakSeparation + true + true + Auto + Auto + + + + Список + 3 + true + true + + true + + + Список + + true + None + + Наименование + 16 + true + true + + true + + + Список.Description + + true + + НаименованиеРасширеннаяПодсказка + 18 + Label + true + true + + Left + + + + НаименованиеКонтекстноеМеню + 17 + true + + LabelField + Enter + true + Left + true + + true + true + + + None + + СписокКоманднаяПанель + 5 + Left + + + СписокСтрокаПоиска + 7 + + СписокСтрокаПоискаРасширеннаяПодсказка + 9 + Label + true + true + + Left + + + + СписокСтрокаПоискаКонтекстноеМеню + 8 + true + + Список + + true + + + + СписокСостояниеПросмотра + 10 + + СписокСостояниеПросмотраРасширеннаяПодсказка + 12 + Label + true + true + + Left + + + + СписокСостояниеПросмотраКонтекстноеМеню + 11 + true + + ViewStatusAddition + Список + + true + + + + СписокУправлениеПоиском + 13 + + СписокУправлениеПоискомРасширеннаяПодсказка + 15 + Label + true + true + + Left + + + + СписокУправлениеПоискомКонтекстноеМеню + 14 + true + + SearchControlAddition + Список + + true + + + + СписокРасширеннаяПодсказка + 6 + Label + true + true + + Left + + + + СписокКонтекстноеМеню + 4 + true + + true + true + true + true + true + true + MultiRow +
true
+ 1 + 1 + AutoUse + AutoUse + true + true + true + Auto + Auto + ExpandTopLevel + true + true + true + AsFileRef + + Список.DefaultPicture + + + 60 + + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + true + true + СписокКомпоновщикНастроекПользовательскиеНастройки + +
+ + ФормаКоманднаяПанель + -1 + Left + true + + + OnCreateAtServer + ПриСозданииНаСервере + + LockOwnerWindow + true + true + true + Vertical + true + true + true + true + true + + Список + 1 + + DynamicList + + + true + + + true + +
true
+ + Catalog.Счета + true + true + true + true + +
+ + + + + +
diff --git a/Проект_деньги/src/Catalogs/Счета/Forms/ФормаВыбора/Module.bsl b/Проект_деньги/src/Catalogs/Счета/Forms/ФормаВыбора/Module.bsl new file mode 100644 index 0000000..8d7b5b2 --- /dev/null +++ b/Проект_деньги/src/Catalogs/Счета/Forms/ФормаВыбора/Module.bsl @@ -0,0 +1,27 @@ + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.Свойство("Заголовок") Тогда + АвтоЗаголовок = Ложь; + Заголовок = Параметры.Заголовок; + КонецЕсли; + + Если Параметры.Свойство("СчетС") Тогда + Отбор = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + Отбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Ссылка"); + Отбор.ВидСравнения = ВидСравненияКомпоновкиДанных.НеРавно; + Отбор.Использование = Истина; + Отбор.ПравоеЗначение = Параметры.СчетС; + КонецЕсли; + + Если Параметры.Свойство("ПометкаУдаления") Тогда + Отбор = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + Отбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Ссылка.ПометкаУдаления"); + Отбор.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + Отбор.Использование = Истина; + Отбор.ПравоеЗначение = Параметры.ПометкаУдаления; + КонецЕсли; + +КонецПроцедуры + diff --git a/Проект_деньги/src/Catalogs/Счета/Forms/ФормаЭлемента/Form.form b/Проект_деньги/src/Catalogs/Счета/Forms/ФормаЭлемента/Form.form new file mode 100644 index 0000000..974ce95 --- /dev/null +++ b/Проект_деньги/src/Catalogs/Счета/Forms/ФормаЭлемента/Form.form @@ -0,0 +1,311 @@ + + + + Группа1 + 16 + + Код + 1 + true + true + + true + + + Объект.Code + + + КодРасширеннаяПодсказка + 3 + Label + true + true + + Left + + + + КодКонтекстноеМеню + 2 + true + + InputField + EnterOnInput + true + Left + true + + true + true + true + true + true + true + + + + Наименование + 4 + true + true + + true + + + Объект.Description + + + НаименованиеРасширеннаяПодсказка + 6 + Label + true + true + + Left + + + + НаименованиеКонтекстноеМеню + 5 + true + + InputField + EnterOnInput + true + Left + true + + true + true + true + true + true + true + + + + Безналичный + 13 + true + true + + true + + + Объект.Безналичный + + + OnChange + БезналичныйПриИзменении + + + БезналичныйРасширеннаяПодсказка + 15 + Label + true + true + + Left + + + + БезналичныйКонтекстноеМеню + 14 + true + + CheckBoxField + EnterOnInput + true + Left + true + + + true + true + + true + + + Группа1РасширеннаяПодсказка + 17 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + Банк + 7 + true + true + + true + + + Объект.Банк + + + БанкРасширеннаяПодсказка + 9 + Label + true + true + + Left + + + + БанкКонтекстноеМеню + 8 + true + + InputField + EnterOnInput + true + Left + true + + true + true + true + true + true + true + + + + НомерКарты + 10 + true + true + + true + + + Объект.НомерКарты + + + НомерКартыРасширеннаяПодсказка + 12 + Label + true + true + + Left + + + + НомерКартыКонтекстноеМеню + 11 + true + + InputField + EnterOnInput + true + Left + true + + true + true + true + true + true + true + + + + Валюта + 18 + true + true + + true + + + Объект.Валюта + + + ВалютаРасширеннаяПодсказка + 20 + Label + true + true + + Left + + + + ВалютаКонтекстноеМеню + 19 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + + + + ФормаКоманднаяПанель + -1 + Left + true + + + OnOpen + ПриОткрытии + + + OnCreateAtServer + ПриСозданииНаСервере + + LockOwnerWindow + true + true + true + Vertical + true + true + true + true + true + + Объект + 1 + + CatalogObject.Счета + + + true + + + true + +
true
+ true +
+ + + + + +
diff --git a/Проект_деньги/src/Catalogs/Счета/Forms/ФормаЭлемента/Module.bsl b/Проект_деньги/src/Catalogs/Счета/Forms/ФормаЭлемента/Module.bsl new file mode 100644 index 0000000..d61823e --- /dev/null +++ b/Проект_деньги/src/Catalogs/Счета/Forms/ФормаЭлемента/Module.bsl @@ -0,0 +1,48 @@ + +# Область СлужебныеПроцедурыИФункции + +Процедура ОтобразитьБанк() + + Если Объект.Безналичный = Истина Тогда + + Элементы.Банк.Видимость = Истина; + Элементы.НомерКарты.Видимость = Истина; + Иначе + Элементы.Банк.Видимость = Ложь; + Элементы.НомерКарты.Видимость = Ложь; + + КонецЕсли; + +КонецПроцедуры // ОтобразитьБанк() + + +# КонецОбласти + +# Область ОбработчикиМодуля + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + ОтобразитьБанк(); + +КонецПроцедуры + +# КонецОбласти + +# Область ОбработчикиСобытий + +&НаКлиенте +Процедура БезналичныйПриИзменении(Элемент) + ОтобразитьБанк() +КонецПроцедуры + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + //Если НЕ ЗначениеЗаполнено(Объект.Валюта) Тогда + // Объект.Валюта = Справочники.Валюты.RUB; + //КонецЕсли; + +КонецПроцедуры + +# КонецОбласти \ No newline at end of file diff --git a/Проект_деньги/src/Catalogs/Счета/ObjectModule.bsl b/Проект_деньги/src/Catalogs/Счета/ObjectModule.bsl new file mode 100644 index 0000000..42b5ab2 --- /dev/null +++ b/Проект_деньги/src/Catalogs/Счета/ObjectModule.bsl @@ -0,0 +1,6 @@ + +Процедура ПриУстановкеНовогоКода(СтандартнаяОбработка, Префикс) + + Префикс = Обмен.ПолучитьПрефиксНомера(); + +КонецПроцедуры diff --git a/Проект_деньги/src/Catalogs/Счета/Счета.mdo b/Проект_деньги/src/Catalogs/Счета/Счета.mdo new file mode 100644 index 0000000..ec726e2 --- /dev/null +++ b/Проект_деньги/src/Catalogs/Счета/Счета.mdo @@ -0,0 +1,141 @@ + + + + + + + + + + Счета + + ru + Счета + + true + Catalog.Счета.StandardAttribute.Description + Catalog.Счета.StandardAttribute.Code + DontUse + Use + Managed + Use + + ru + Счет + + + ru + Счета + + 2 + true + 9 + 150 + String + Variable + true + true + AsDescription + + + Наличные + Наличные + + 000000001 + + + + БанковскаяКарта + Банковская карта + + 000000002 + + + + InDialog + BothWays + Catalog.Счета.Form.ФормаЭлемента + Catalog.Счета.Form.ФормаВыбора + + Банк + + ru + Банк + + + CatalogRef.Банки + + + + + Use + Use + + + НомерКарты + + ru + Номер карты + + + Number + + 18 + + + + + + Use + Use + + + Безналичный + + ru + Безналичный + + + Boolean + + + + + Use + Use + + + Валюта + + ru + Валюта + + + CatalogRef.Валюты + + + + ShowError + + Use + Use + + + ФормаЭлемента + + ru + Форма элемента + + PersonalComputer + MobileDevice + + + ФормаВыбора + + ru + Форма выбора + + PersonalComputer + MobileDevice + + diff --git a/Проект_деньги/src/CommandGroups/Документы/Документы.mdo b/Проект_деньги/src/CommandGroups/Документы/Документы.mdo new file mode 100644 index 0000000..e052fed --- /dev/null +++ b/Проект_деньги/src/CommandGroups/Документы/Документы.mdo @@ -0,0 +1,9 @@ + + + Документы + + ru + Документы + + Auto + diff --git a/Проект_деньги/src/CommandGroups/ЖурналыДокументов/ЖурналыДокументов.mdo b/Проект_деньги/src/CommandGroups/ЖурналыДокументов/ЖурналыДокументов.mdo new file mode 100644 index 0000000..debff83 --- /dev/null +++ b/Проект_деньги/src/CommandGroups/ЖурналыДокументов/ЖурналыДокументов.mdo @@ -0,0 +1,9 @@ + + + ЖурналыДокументов + + ru + Журналы документов + + Auto + diff --git a/Проект_деньги/src/CommandGroups/Константы/Константы.mdo b/Проект_деньги/src/CommandGroups/Константы/Константы.mdo new file mode 100644 index 0000000..6a80d79 --- /dev/null +++ b/Проект_деньги/src/CommandGroups/Константы/Константы.mdo @@ -0,0 +1,9 @@ + + + Константы + + ru + Константы + + Auto + diff --git a/Проект_деньги/src/CommandGroups/Обработки/Обработки.mdo b/Проект_деньги/src/CommandGroups/Обработки/Обработки.mdo new file mode 100644 index 0000000..d3a9768 --- /dev/null +++ b/Проект_деньги/src/CommandGroups/Обработки/Обработки.mdo @@ -0,0 +1,9 @@ + + + Обработки + + ru + Обработки + + Auto + diff --git a/Проект_деньги/src/CommandGroups/Отчеты/Отчеты.mdo b/Проект_деньги/src/CommandGroups/Отчеты/Отчеты.mdo new file mode 100644 index 0000000..b1c3d40 --- /dev/null +++ b/Проект_деньги/src/CommandGroups/Отчеты/Отчеты.mdo @@ -0,0 +1,9 @@ + + + Отчеты + + ru + Отчеты + + Auto + diff --git a/Проект_деньги/src/CommandGroups/ПВХ/ПВХ.mdo b/Проект_деньги/src/CommandGroups/ПВХ/ПВХ.mdo new file mode 100644 index 0000000..178fc2a --- /dev/null +++ b/Проект_деньги/src/CommandGroups/ПВХ/ПВХ.mdo @@ -0,0 +1,9 @@ + + + ПВХ + + ru + Планы видов характеристик + + Auto + diff --git a/Проект_деньги/src/CommandGroups/РегистрыНакопления/РегистрыНакопления.mdo b/Проект_деньги/src/CommandGroups/РегистрыНакопления/РегистрыНакопления.mdo new file mode 100644 index 0000000..4dd3d5c --- /dev/null +++ b/Проект_деньги/src/CommandGroups/РегистрыНакопления/РегистрыНакопления.mdo @@ -0,0 +1,9 @@ + + + РегистрыНакопления + + ru + Регистры накопления + + Auto + diff --git a/Проект_деньги/src/CommandGroups/РегистрыСведений/РегистрыСведений.mdo b/Проект_деньги/src/CommandGroups/РегистрыСведений/РегистрыСведений.mdo new file mode 100644 index 0000000..6753bea --- /dev/null +++ b/Проект_деньги/src/CommandGroups/РегистрыСведений/РегистрыСведений.mdo @@ -0,0 +1,9 @@ + + + РегистрыСведений + + ru + Регистры сведений + + Auto + diff --git a/Проект_деньги/src/CommandGroups/Справочники/Справочники.mdo b/Проект_деньги/src/CommandGroups/Справочники/Справочники.mdo new file mode 100644 index 0000000..b90a0b3 --- /dev/null +++ b/Проект_деньги/src/CommandGroups/Справочники/Справочники.mdo @@ -0,0 +1,9 @@ + + + Справочники + + ru + Справочники + + Auto + diff --git a/Проект_деньги/src/CommonForms/МобильныйРабСтол/Form.form b/Проект_деньги/src/CommonForms/МобильныйРабСтол/Form.form new file mode 100644 index 0000000..1a97833 --- /dev/null +++ b/Проект_деньги/src/CommonForms/МобильныйРабСтол/Form.form @@ -0,0 +1,630 @@ + + + + Группа1 + 1 + + Группа2 + 15 + + СписокЖеланий + 7 + + <key>ru</key> + <value>Желания</value> + + true + true + + true + + + СписокЖеланийРасширеннаяПодсказка + 8 + Label + true + true + + Left + + + UsualButton + Form.Command.СписокЖеланий + Auto + true + 2 + true + true + true + Center + UserCmds + + 9.0 + + Auto + + + СоздатьПокупку + 5 + true + true + + true + + + СоздатьПокупкуРасширеннаяПодсказка + 6 + Label + true + true + + Left + + + UsualButton + Form.Command.СоздатьПокупку + Auto + true + 2 + true + true + true + Center + UserCmds + + 9.0 + + Auto + + true + true + + true + + + Группа2РасширеннаяПодсказка + 16 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Auto + true + true + Auto + Auto + + + + Группа4 + 19 + + СоздатьПродажу + 23 + true + true + + true + + + СоздатьПродажуРасширеннаяПодсказка + 24 + Label + true + true + + Left + + + UsualButton + Form.Command.СоздатьПродажу + Auto + true + 2 + true + true + true + Center + UserCmds + + 9.0 + + Auto + + + СоздатьДоход + 13 + true + true + + true + + + СоздатьДоходРасширеннаяПодсказка + 14 + Label + true + true + + Left + + + UsualButton + Form.Command.СоздатьДоход + Auto + true + 2 + true + true + true + Center + UserCmds + + 9.0 + + Auto + + true + true + + true + + + Группа4РасширеннаяПодсказка + 20 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Auto + true + true + Auto + Auto + + + + Группа5 + 25 + + СоздатьКомПлатежи + 21 + true + true + + true + + + СоздатьКомПлатежиРасширеннаяПодсказка + 22 + Label + true + true + + Left + + + UsualButton + Form.Command.СоздатьКомПлатежи + Auto + true + 2 + true + true + true + Center + UserCmds + + 9.0 + + Auto + + + ФормаПереводыМеждуСчетами + 11 + true + true + + true + + + ФормаПереводыМеждуСчетамиРасширеннаяПодсказка + 12 + Label + true + true + + Left + + + UsualButton + Form.Command.ПереводыМеждуСчетами + Auto + true + 2 + true + true + true + Center + UserCmds + + 9.0 + + Auto + + true + true + + true + + + Группа5РасширеннаяПодсказка + 26 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Auto + true + true + Auto + Auto + + + + Группа3 + 17 + + ОткрытьОстатки + 3 + true + true + + true + + + ОткрытьОстаткиРасширеннаяПодсказка + 4 + Label + true + true + + Left + + + UsualButton + Form.Command.ОткрытьОстатки + Auto + true + 2 + true + true + true + Center + UserCmds + + 9.0 + + Auto + + + Отчеты + 9 + true + true + + true + + + ОтчетыРасширеннаяПодсказка + 10 + Label + true + true + + Left + + + UsualButton + Form.Command.Отчеты + Auto + true + 2 + true + true + true + Center + UserCmds + + 9.0 + + Auto + + true + true + + true + + + Группа3РасширеннаяПодсказка + 18 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Auto + true + true + Auto + Auto + + + true + true + + true + + + Группа1РасширеннаяПодсказка + 2 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + ФормаКоманднаяПанель + -1 + Left + true + + true + true + true + Vertical + true + true + true + true + true + + ОткрытьОстатки + + <key>ru</key> + <value>Счета</value> + + 1 + + ru + Показать остатки денежных средств + + + true + + + CommonPicture.Деньги + + + + ОткрытьОстатки + + + TextPicture + Auto + + + СоздатьПокупку + + <key>ru</key> + <value>Расход</value> + + 2 + + ru + Создать покупку + + + true + + + CommonPicture.Покупка + + + + СоздатьПокупку + + + TextPicture + Auto + + + СписокЖеланий + + <key>ru</key> + <value>Желания</value> + + 3 + + ru + Список желаний + + + true + + + CommonPicture.Желания + + + + СписокЖеланий + + + TextPicture + Auto + + + Отчеты + + <key>ru</key> + <value>Отчеты</value> + + 4 + + ru + Отчеты + + + true + + + CommonPicture.Отчеты + + + + Отчеты + + + TextPicture + Auto + + + ПереводыМеждуСчетами + + <key>ru</key> + <value>Перевод</value> + + 5 + + ru + Переводы между счетами + + + true + + + CommonPicture.Перевод + + + + ПереводыМеждуСчетами + + + TextPicture + Auto + + + СоздатьДоход + + <key>ru</key> + <value>Доход</value> + + 6 + + ru + Создать доход + + + true + + + CommonPicture.Бабки + + + + СоздатьДоход + + + TextPicture + Auto + + + СоздатьКомПлатежи + + <key>ru</key> + <value>Ком. платеж</value> + + 7 + + ru + Создать ком платеж + + + true + + + CommonPicture.КомПлатежи + + + + СоздатьКомПлатежи + + + TextPicture + Auto + + + СоздатьПродажу + + <key>ru</key> + <value>Продажа</value> + + 8 + + ru + Создать продажу + + + true + + + CommonPicture.Продажи + + + + СоздатьПродажу + + + TextPicture + Auto + + + + + + diff --git a/Проект_деньги/src/CommonForms/МобильныйРабСтол/Module.bsl b/Проект_деньги/src/CommonForms/МобильныйРабСтол/Module.bsl new file mode 100644 index 0000000..ae931d5 --- /dev/null +++ b/Проект_деньги/src/CommonForms/МобильныйРабСтол/Module.bsl @@ -0,0 +1,121 @@ + +&НаКлиенте +Процедура СписокЖеланий(Команда) + + ОткрытьФорму("Документ.Желания.ФормаСписка"); + +КонецПроцедуры + +&НаКлиенте +Процедура СоздатьПокупку(Команда) + + ОдинДокумент = ОбщегоНазначенияКлиентСервер.ОдинДокумент(); + + Если ОдинДокумент Тогда + СписокЗначений = Общий_ПД_Сервер.ЗаполнитьСписокАктивныхСчетов(); + Если СписокЗначений[0].Значение = "Нет денег на счетах" Тогда + ПоказатьПредупреждение(,"Нет денег на счетах"); + Возврат; + Иначе + Оповещение = Новый ОписаниеОповещения("ПослеВыбораЭлемента",ЭтотОбъект); + СписокЗначений.ПоказатьВыборЭлемента(Оповещение, "Выберите счет"); + КонецЕсли; + Иначе + ОткрытьФорму("Документ.Покупки.ФормаОбъекта"); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПослеВыбораЭлемента(ВыбранныйЭлемент, СписокПараметров) Экспорт + + Если ВыбранныйЭлемент = Неопределено Тогда + Предупреждение("Операция отменена!",1); + Закрыть(); + Возврат; + Иначе + ВыбранноеЗначение = ВыбранныйЭлемент.Значение; + Док = ПолучитьАктуальныйДок(ВыбранноеЗначение); + Если ЗначениеЗаполнено(Док) Тогда + П = Новый Структура("Ключ, Счет", Док, ВыбранноеЗначение); + ОткрытьФорму("Документ.Покупки.Форма.ФормаДокумента", П); + Иначе + П = Новый Структура("Счет", ВыбранноеЗначение); + ОткрытьФорму("Документ.Покупки.ФормаОбъекта", П); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры // () + +&НаСервереБезКонтекста +Функция ПолучитьАктуальныйДок(Счет) + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | Покупки.Ссылка КАК Ссылка + |ИЗ + | Документ.Покупки КАК Покупки + |ГДЕ + | НАЧАЛОПЕРИОДА(Покупки.Дата, ДЕНЬ) = &Дата + | И Покупки.Счет = &Счет + | И НЕ Покупки.ПометкаУдаления + | И Покупки.Проведен"; + + Запрос.УстановитьПараметр("Счет", Счет); + Запрос.УстановитьПараметр("Дата", НачалоДня(ТекущаяДатаСеанса())); + + РезультатЗапроса = Запрос.Выполнить(); + + Если РезультатЗапроса.Пустой() Тогда + Возврат Неопределено; + КонецЕсли; + + Выборка = РезультатЗапроса.Выбрать(); + Выборка.Следующий(); + Док = Выборка.Ссылка; + Возврат Док; + +КонецФункции + +&НаКлиенте +Процедура ПереводыМеждуСчетами(Команда) + + ОткрытьФорму("Документ.ПеремещениеСнятиеДенежныхСредств.ФормаОбъекта", Интерфейс.ЗапускСРабСтола()); + +КонецПроцедуры + +&НаКлиенте +Процедура Отчеты(Команда) + + ОткрытьФорму("Обработка.Отчеты.Форма"); + +КонецПроцедуры + +&НаКлиенте +Процедура ОткрытьОстатки(Команда) + + ОткрытьФорму("РегистрНакопления.ДенежныеСредства.Форма.ФормаОстатков"); + +КонецПроцедуры + +&НаКлиенте +Процедура СоздатьДоход(Команда) + + ОткрытьФорму("Документ.Доходы.ФормаОбъекта", Интерфейс.ЗапускСРабСтола()); + +КонецПроцедуры + +&НаКлиенте +Процедура СоздатьКомПлатежи(Команда) + + ОткрытьФорму("Документ.КоммунальныеПлатежи.Форма.ФормаДокумента", Интерфейс.ЗапускСРабСтола()); + +КонецПроцедуры + +&НаКлиенте +Процедура СоздатьПродажу(Команда) + + ОткрытьФорму("Документ.Продажи.Форма.ФормаДокумента", Интерфейс.ЗапускСРабСтола()); + +КонецПроцедуры diff --git a/Проект_деньги/src/CommonForms/МобильныйРабСтол/МобильныйРабСтол.mdo b/Проект_деньги/src/CommonForms/МобильныйРабСтол/МобильныйРабСтол.mdo new file mode 100644 index 0000000..3d4a588 --- /dev/null +++ b/Проект_деньги/src/CommonForms/МобильныйРабСтол/МобильныйРабСтол.mdo @@ -0,0 +1,10 @@ + + + МобильныйРабСтол + + ru + Рабочий стол + + PersonalComputer + MobileDevice + diff --git a/Проект_деньги/src/CommonForms/ТекущийПользователь/Form.form b/Проект_деньги/src/CommonForms/ТекущийПользователь/Form.form new file mode 100644 index 0000000..c37c3cb --- /dev/null +++ b/Проект_деньги/src/CommonForms/ТекущийПользователь/Form.form @@ -0,0 +1,105 @@ + + + + ТекущийПользователь + 1 + true + true + + true + + + НаборКонстант.ТекущийПользователь + + + ТекущийПользовательРасширеннаяПодсказка + 3 + Label + true + true + + Left + + + + ТекущийПользовательКонтекстноеМеню + 2 + true + + InputField + EnterOnInput + true + Left + true + + true + true + true + true + true + true + + + + ЗаписатьИЗакрыть + 4 + true + true + + true + + + ЗаписатьИЗакрытьРасширеннаяПодсказка + 5 + Label + true + true + + Left + + + UsualButton + Form.StandardCommand.WriteAndClose + Auto + true + true + UserCmds + Auto + + + ФормаКоманднаяПанель + -1 + Left + true + + LockOwnerWindow + true + true + true + Vertical + true + true + true + true + true + + НаборКонстант + 1 + + ConstantsSet + + + true + + + true + +
true
+ true +
+ + + + + +
diff --git a/Проект_деньги/src/CommonForms/ТекущийПользователь/ТекущийПользователь.mdo b/Проект_деньги/src/CommonForms/ТекущийПользователь/ТекущийПользователь.mdo new file mode 100644 index 0000000..9a0b39c --- /dev/null +++ b/Проект_деньги/src/CommonForms/ТекущийПользователь/ТекущийПользователь.mdo @@ -0,0 +1,11 @@ + + + ТекущийПользователь + + ru + Текущий пользователь + + PersonalComputer + MobileDevice + true + diff --git a/Проект_деньги/src/CommonForms/ФормаЗагрузкиЧековИзФНС/Form.form b/Проект_деньги/src/CommonForms/ФормаЗагрузкиЧековИзФНС/Form.form new file mode 100644 index 0000000..cd12c95 --- /dev/null +++ b/Проект_деньги/src/CommonForms/ФормаЗагрузкиЧековИзФНС/Form.form @@ -0,0 +1,126 @@ + + + + ЗагрузитьЧекиИзФайла + 1 + true + true + + true + + + ЗагрузитьЧекиИзФайлаРасширеннаяПодсказка + 2 + Label + true + true + + Left + + + UsualButton + Form.Command.ЗагрузитьЧекиИзФайла + Auto + true + true + UserCmds + Auto + + + Счет + 3 + true + true + + true + + + Счет + + + СчетРасширеннаяПодсказка + 5 + Label + true + true + + Left + + + + СчетКонтекстноеМеню + 4 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + + + + ФормаКоманднаяПанель + -1 + Left + true + + true + true + true + Vertical + true + true + true + true + true + + Счет + + <key>ru</key> + <value>Счет</value> + + 1 + + CatalogRef.Счета + + + true + + + true + + + + ЗагрузитьЧекиИзФайла + + <key>ru</key> + <value>Загрузить чеки из файла</value> + + 1 + + ru + Загрузить чеки из файла + + + true + + + + ЗагрузитьЧекиИзФайла + + + Auto + + + + + + diff --git a/Проект_деньги/src/CommonForms/ФормаЗагрузкиЧековИзФНС/Module.bsl b/Проект_деньги/src/CommonForms/ФормаЗагрузкиЧековИзФНС/Module.bsl new file mode 100644 index 0000000..a485c0f --- /dev/null +++ b/Проект_деньги/src/CommonForms/ФормаЗагрузкиЧековИзФНС/Module.bsl @@ -0,0 +1,106 @@ + +&НаСервереБезКонтекста +Процедура ЗагрузитьЧекиИзФайлаНаСервере(ПолноеИмяФайла, Счет) + + ЧтениеJson = Новый ЧтениеJSON; + + ЧтениеJson.ОткрытьФайл(ПолноеИмяФайла); + ДанныеСоответствие = ПрочитатьJSON(ЧтениеJson); + + ОтветНаВопросНоменклатура = Новый СписокЗначений; + ОтветНаВопросНоменклатура.Добавить("Создать"); + ОтветНаВопросНоменклатура.Добавить("Соответствие", "Установить соответствие"); + + Ответственный = Константы.ТекущийПользователь.Получить(); + + ТЗНоменклатура = Новый ТаблицаЗначений; + ТЗНоменклатура.Колонки.Добавить("Номенклатура", Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(150))); + ТЗНоменклатура.Колонки.Добавить("Количество", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15,3))); + ТЗНоменклатура.Колонки.Добавить("Сумма", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15,2))); + ТЗНоменклатура.Колонки.Добавить("Цена", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15,2))); + + Для каждого СтрокаМассива Из ДанныеСоответствие Цикл + Дата = ВернутьДату(СтрокаМассива.ticket.document.receipt.dateTime); + ТЗНоменклатура.Очистить(); + Для каждого СтрокаТаблицы Из СтрокаМассива.ticket.document.receipt.items Цикл + СтрокаТЗ = ТЗНоменклатура.Добавить(); + СтрокаТЗ.Номенклатура = СтрокаТаблицы.name; + СтрокаТЗ.Количество = СтрокаТаблицы.quantity; + СтрокаТЗ.Сумма = СтрокаТаблицы.sum /100; + СтрокаТЗ.Цена = СтрокаТЗ.Сумма/СтрокаТЗ.Количество; + КонецЦикла; + Покупка = Документы.Покупки.СоздатьДокумент(); + Покупка.Дата = Дата; + Покупка.Ответственный = Ответственный; + Покупка.Счет = Счет; + + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ТЗ.Номенклатура КАК ТЗНоменклатура, + | ТЗ.Количество КАК Количество, + | ТЗ.Цена КАК Цена, + | ТЗ.Сумма КАК Сумма + |ПОМЕСТИТЬ ТЗ + |ИЗ + | &ТЗ КАК ТЗ + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ЕСТЬNULL(Номенклатура.Ссылка, ТЗ.ТЗНоменклатура) КАК Номенклатура, + | ТЗ.Количество КАК Количество, + | ТЗ.Цена КАК Цена, + | ТЗ.Сумма КАК Сумма + |ИЗ + | ТЗ КАК ТЗ + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Номенклатура + | ПО ТЗ.ТЗНоменклатура = Номенклатура.Наименование"; + + Запрос.УстановитьПараметр("ТЗ", ТЗНоменклатура); + РезультатЗапроса = Запрос.Выполнить(); + + Выборка = РезультатЗапроса.Выбрать(); + + Пока Выборка.Следующий() Цикл + Если ТипЗнч(Выборка.Номенклатура) = Тип("Строка") Тогда + СпрНоменклатура = Справочники.Номенклатура.СоздатьЭлемент(); + СпрНоменклатура.Наименование = Выборка.Номенклатура; + ФормаНоменклатуры = СпрНоменклатура.ПолучитьФорму("ФормаЭлемента"); + ФормаНоменклатуры.ОткрытьМодально(); + КонецЕсли; + КонецЦикла; + + Для каждого СтрокаТЗ Из ТЗНоменклатура Цикл + + КонецЦикла; + КонецЦикла; + + //РазобратьСтруктуруСоздатьПокупки(ДанныеСоответствие); + +КонецПроцедуры + +&НаКлиенте +Процедура ЗагрузитьЧекиИзФайла(Команда) + + Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие); + Диалог.Заголовок = "Укажите файл для загрузки в формате ison:"; + + Если Диалог.Выбрать() Тогда + ЗагрузитьЧекиИзФайлаНаСервере(Диалог.ПолноеИмяФайла, Счет); + КонецЕсли; + +КонецПроцедуры + +&НаСервереБезКонтекста +Функция ВернутьДату(Строка) + + Строка = СтрЗаменить(Строка, "-", ""); + Строка = СтрЗаменить(Строка, "T", ""); + Строка = СтрЗаменить(Строка, ":", ""); + + Возврат Дата(Строка); + +КонецФункции + \ No newline at end of file diff --git a/Проект_деньги/src/CommonForms/ФормаЗагрузкиЧековИзФНС/ФормаЗагрузкиЧековИзФНС.mdo b/Проект_деньги/src/CommonForms/ФормаЗагрузкиЧековИзФНС/ФормаЗагрузкиЧековИзФНС.mdo new file mode 100644 index 0000000..3c17d5a --- /dev/null +++ b/Проект_деньги/src/CommonForms/ФормаЗагрузкиЧековИзФНС/ФормаЗагрузкиЧековИзФНС.mdo @@ -0,0 +1,10 @@ + + + ФормаЗагрузкиЧековИзФНС + + ru + Форма загрузки чеков из ФНС + + PersonalComputer + MobileDevice + diff --git a/Проект_деньги/src/CommonForms/ФормаКонстант/Form.form b/Проект_деньги/src/CommonForms/ФормаКонстант/Form.form new file mode 100644 index 0000000..4bb41f7 --- /dev/null +++ b/Проект_деньги/src/CommonForms/ФормаКонстант/Form.form @@ -0,0 +1,238 @@ + + + + ТекущийПользователь + 1 + true + true + + true + + + НаборКонстант.ТекущийПользователь + + + ТекущийПользовательРасширеннаяПодсказка + 3 + Label + true + true + + Left + + + + ТекущийПользовательКонтекстноеМеню + 2 + true + + InputField + EnterOnInput + true + Left + true + + true + true + true + true + true + true + + + + ВыводитьДиалогиВвода + 4 + true + true + + true + + + НаборКонстант.ВыводитьДиалогиВвода + + + ru + Выводятся диалоги при создании документов + + + ВыводитьДиалогиВводаРасширеннаяПодсказка + 6 + Label + true + true + + Left + + + + ВыводитьДиалогиВводаКонтекстноеМеню + 5 + true + + CheckBoxField + EnterOnInput + true + Left + true + + + + ОдинДокументРасходов + 10 + + <key>ru</key> + <value>Один документ расходов в день</value> + + true + true + + true + + + НаборКонстант.ОдинДокументРасходов + + + ОдинДокументРасходовРасширеннаяПодсказка + 12 + Label + true + true + + Left + + + + ОдинДокументРасходовКонтекстноеМеню + 11 + true + + CheckBoxField + Enter + true + Left + true + + + + ПерсональныйТокенQR + 7 + true + true + + true + + + НаборКонстант.ПерсональныйТокенQR + + + ru + https://proverkacheka.com + + + ПерсональныйТокенQRРасширеннаяПодсказка + 9 + Label + true + true + + Left + + + + ПерсональныйТокенQRКонтекстноеМеню + 8 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + + + + СерверАдрес + 13 + true + true + + true + + + НаборКонстант.СерверАдрес + + + СерверАдресРасширеннаяПодсказка + 15 + Label + true + true + + Left + + + + СерверАдресКонтекстноеМеню + 14 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + true + + + + ФормаКоманднаяПанель + -1 + Left + true + + LockOwnerWindow + true + true + true + Vertical + true + true + true + true + true + + НаборКонстант + 1 + + ConstantsSet + + + true + + + true + +
true
+ true +
+ + + + + +
diff --git a/Проект_деньги/src/CommonForms/ФормаКонстант/ФормаКонстант.mdo b/Проект_деньги/src/CommonForms/ФормаКонстант/ФормаКонстант.mdo new file mode 100644 index 0000000..1bfc2bc --- /dev/null +++ b/Проект_деньги/src/CommonForms/ФормаКонстант/ФормаКонстант.mdo @@ -0,0 +1,11 @@ + + + ФормаКонстант + + ru + Общие настройки + + PersonalComputer + MobileDevice + true + diff --git a/Проект_деньги/src/CommonForms/ФормаОтчета/Form.form b/Проект_деньги/src/CommonForms/ФормаОтчета/Form.form new file mode 100644 index 0000000..9366959 --- /dev/null +++ b/Проект_деньги/src/CommonForms/ФормаОтчета/Form.form @@ -0,0 +1,479 @@ + + + + Параметры + 12 + + Период + 30 + true + true + + true + + + Период + + + ПериодРасширеннаяПодсказка + 32 + Label + true + true + + Left + + + + ПериодКонтекстноеМеню + 31 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + + + true + true + + true + + + <key>ru</key> + <value>Параметры</value> + + + ru + Параметры + + + ПараметрыРасширеннаяПодсказка + 13 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Auto + true + true + Auto + Auto + + + + Отбор + 14 + true + true + + true + + + Отбор + + None + + ОтборОтборКомпоновкиДанных + 27 + + <key>ru</key> + <value>Отбор</value> + + true + true + + true + + + Отбор.ОтборКомпоновкиДанных + + + ОтборОтборКомпоновкиДанныхРасширеннаяПодсказка + 29 + Label + true + true + + Left + + + + ОтборОтборКомпоновкиДанныхКонтекстноеМеню + 28 + true + + InputField + EnterOnInput + true + Left + true + + true + true + true + true + true + true + + + + ОтборКоманднаяПанель + 16 + Left + + + ОтборСтрокаПоиска + 18 + + ОтборСтрокаПоискаРасширеннаяПодсказка + 20 + Label + true + true + + Left + + + + ОтборСтрокаПоискаКонтекстноеМеню + 19 + true + + Отбор + + true + + + + ОтборСостояниеПросмотра + 21 + + ОтборСостояниеПросмотраРасширеннаяПодсказка + 23 + Label + true + true + + Left + + + + ОтборСостояниеПросмотраКонтекстноеМеню + 22 + true + + ViewStatusAddition + Отбор + + true + + + + ОтборУправлениеПоиском + 24 + + ОтборУправлениеПоискомРасширеннаяПодсказка + 26 + Label + true + true + + Left + + + + ОтборУправлениеПоискомКонтекстноеМеню + 25 + true + + SearchControlAddition + Отбор + + true + + + + ОтборРасширеннаяПодсказка + 17 + Label + true + true + + Left + + + + ОтборКонтекстноеМеню + 15 + true + + true + true + true + true + true + MultiRow +
true
+ 1 + 1 + AutoUse + AutoUse + true + true + true + Auto + Auto + true + true + true + true + AsFileRef + +
+ + Резутьтат + 1 + true + true + + true + + + Резутьтат + + None + + РезутьтатРасширеннаяПодсказка + 3 + Label + true + true + + Left + + + + РезутьтатКонтекстноеМеню + 2 + true + + SpreadsheetDocumentField + Enter + true + Left + true + + 50 + true + 10 + true + true + true + Special + ScrollAuto + ScrollAuto + Always + Auto + true + true + true + + + + ФормаКоманднаяПанель + -1 + + ФормаСформировать + 4 + true + true + + true + + + ФормаСформироватьРасширеннаяПодсказка + 5 + Label + true + true + + Left + + + Form.Command.Сформировать + Auto + true + true + UserCmds + Auto + + Left + true + + + OnCreateAtServer + ПриСозданииНаСервере + + + BeforeLoadDataFromSettingsAtServer + ПередЗагрузкойДанныхИзНастроекНаСервере + + true + true + true + Vertical + true + true + true + true + true + + Резутьтат + + <key>ru</key> + <value>Резутьтат</value> + + 1 + + SpreadsheetDocument + + + true + + + true + + + + + ИмяМакета + + <key>ru</key> + <value>Имя макета</value> + + 4 + + String + + + + true + + + true + + + + Отбор + + <key>ru</key> + <value>Отбор</value> + + 5 + + ValueTable + + + true + + + true + + + Отбор.ОтборКомпоновкиДанных.Application + + + Отбор.ОтборКомпоновкиДанных.Date + + + Отбор.ОтборКомпоновкиДанных.GroupType + + + Отбор.ОтборКомпоновкиДанных.LeftValuePicture + + + Отбор.ОтборКомпоновкиДанных.Presentation + + + Отбор.ОтборКомпоновкиДанных.RightValuePicture + + + Отбор.ОтборКомпоновкиДанных.ViewMode + + + ОтборКомпоновкиДанных + + <key>ru</key> + <value>Отбор компоновки данных</value> + + 1 + + DataCompositionFilter + + + true + + + true + + + + + Период + + <key>ru</key> + <value>Период</value> + + 6 + + StandardPeriod + + + true + + + true + + + + Сформировать + + <key>ru</key> + <value>Сформировать</value> + + 1 + + ru + Сформировать + + + true + + + + Сформировать + + + Auto + + + + + +
diff --git a/Проект_деньги/src/CommonForms/ФормаОтчета/Module.bsl b/Проект_деньги/src/CommonForms/ФормаОтчета/Module.bsl new file mode 100644 index 0000000..b12c6b8 --- /dev/null +++ b/Проект_деньги/src/CommonForms/ФормаОтчета/Module.bsl @@ -0,0 +1,93 @@ + +&НаСервере +Процедура СформироватьОтчетНаСервере(ТаблДок) + + //ОбъектОтчет = РеквизитФормыВЗначение("Отчет"); + + ОСКД = ПолучитьОбщийМакет(ИмяМакета); + НастройкиОСКД = ОСКД.НастройкиПоУмолчанию; + ЭлементыОтбора = Отбор[0].ОтборКомпоновкиДанных.Элементы; + Для й=0 По ЭлементыОтбора.Количество()-1 Цикл + + Попытка + ЭлементСКД = НастройкиОСКД.Отбор.Элементы[й]; + Исключение + ЭлементСКД = НастройкиОСКД.Отбор.Элементы.Добавить(); + КонецПопытки; + + ЭлементСКД.Использование = ЭлементыОтбора[й].Использование; + ЭлементСКД.ЛевоеЗначение = ЭлементыОтбора[й].ЛевоеЗначение; + ЭлементСКД.ВидСравнения = ЭлементыОтбора[й].ВидСравнения; + ЭлементСКД.ПравоеЗначение = ЭлементыОтбора[й].ПравоеЗначение; + КонецЦикла; + //НастройкиОСКД.Отбор = Отбор; + //Если Отбор.Количество() > 0 Тогда + // Для й=0 По Отбор.Количество()-1 Цикл + // НастройкиОСКД.Отбор.Элементы[й].Использование = Отбор[й].Использование; + // НастройкиОСКД.Отбор.Элементы[й].ЛевоеЗначение = Отбор[й].ЛевоеЗначение; + // НастройкиОСКД.Отбор.Элементы[й].ВидСравнения = Отбор[й].ВидСравнения; + // НастройкиОСКД.Отбор.Элементы[й].ПравоеЗначение = Отбор[й].ПравоеЗначение; + // КонецЦикла; + //КонецЕсли; + //НастройкиОСКД = КомпоновщикНастроек.ПолучитьНастройкиОСКД(); + + ПараметрыДанныхОСКД = НастройкиОСКД.ПараметрыДанных.Элементы; + + ЭлементНачалоПериода = ПараметрыДанныхОСКД.Найти("Период"); + ЭлементНачалоПериода.Использование = Истина; + ЭлементНачалоПериода.Значение = Период; + + //ЭлементКонецПериода = ПараметрыДанныхОСКД.Найти("КонецПериода"); + //ЭлементКонецПериода.Использование = Истина; + //ЭлементКонецПериода.Значение = КонецПериода; + + //ЭлементСчет = ПараметрыДанныхОСКД.Найти("Счет"); + //ЭлементСчет.Использование = Истина; + //ЭлементСчет.Значение = ПланыСчетов.Хозрасчетный.ТоварыНаСкладах; + + //КомпоновщикНастроекДанных = Новый КомпоновщикНастроекКомпоновкиДанных; + //КомпоновщикНастроекДанных.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(ОСКД)); + //КомпоновщикНастроекДанных.ЗагрузитьНастройкиОСКД(ОСКД.НастройкиОСКДПоУмолчанию); + //КомпоновщикНастроекДанных.ЗагрузитьПользовательскиеНастройкиОСКД(Отчет.КомпоновщикНастроек.ПользовательскиеНастройкиОСКД); + + КомпоновщикМакетаОСКД = Новый КомпоновщикМакетаКомпоновкиДанных; + //Макет = КомпоновщикМакетаОСКД.Выполнить(ОСКД, КомпоновщикНастроекДанных.ПолучитьНастройкиОСКД()); + Макет = КомпоновщикМакетаОСКД.Выполнить(ОСКД, НастройкиОСКД); + + ПроцессорКомпоновкиОСКД = Новый ПроцессорКомпоновкиДанных; + ПроцессорКомпоновкиОСКД.Инициализировать(Макет); + + ТаблДок.Очистить(); + + ПроцессорВыводаОСКД = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент; + ПроцессорВыводаОСКД.УстановитьДокумент(ТаблДок); + ПроцессорВыводаОСКД.Вывести(ПроцессорКомпоновкиОСКД); + +КонецПроцедуры + +&НаКлиенте +Процедура Сформировать(Команда) + + СформироватьОтчетНаСервере(Резутьтат); + //Масштаб = 50; + Резутьтат.Рисунки[0].Ширина = 70; + Резутьтат.Рисунки[0].Высота = 60; + Резутьтат.ПоказатьУровеньГруппировокСтрок(1); + Резутьтат.ПоказатьУровеньГруппировокСтрок(0); + +КонецПроцедуры + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + ИмяМакета = Параметры.ИмяМакета; + ОСКД = ПолучитьОбщийМакет(ИмяМакета); + ОтборСКД = ОСКД.НастройкиПоУмолчанию.Отбор; + + ДобавитьОтбор = Отбор.Добавить(); + ДобавитьОтбор.ОтборКомпоновкиДанных = ОтборСКД; + + Период.ДатаНачала = НачалоМесяца(ТекущаяДата()); + Период.ДатаОкончания = КонецМесяца(ТекущаяДата()); + +КонецПроцедуры diff --git a/Проект_деньги/src/CommonForms/ФормаОтчета/ФормаОтчета.mdo b/Проект_деньги/src/CommonForms/ФормаОтчета/ФормаОтчета.mdo new file mode 100644 index 0000000..7e279b2 --- /dev/null +++ b/Проект_деньги/src/CommonForms/ФормаОтчета/ФормаОтчета.mdo @@ -0,0 +1,10 @@ + + + ФормаОтчета + + ru + Форма отчета + + PersonalComputer + MobileDevice + diff --git a/Проект_деньги/src/CommonModules/Диалоги/Module.bsl b/Проект_деньги/src/CommonModules/Диалоги/Module.bsl new file mode 100644 index 0000000..e69de29 diff --git a/Проект_деньги/src/CommonModules/Диалоги/Диалоги.mdo b/Проект_деньги/src/CommonModules/Диалоги/Диалоги.mdo new file mode 100644 index 0000000..6fbb0d2 --- /dev/null +++ b/Проект_деньги/src/CommonModules/Диалоги/Диалоги.mdo @@ -0,0 +1,11 @@ + + + Диалоги + + ru + Диалоги + + true + true + true + diff --git a/Проект_деньги/src/CommonModules/Интерфейс/Module.bsl b/Проект_деньги/src/CommonModules/Интерфейс/Module.bsl new file mode 100644 index 0000000..b901fef --- /dev/null +++ b/Проект_деньги/src/CommonModules/Интерфейс/Module.bsl @@ -0,0 +1,5 @@ +Функция ЗапускСРабСтола() Экспорт + + Возврат Новый Структура("ЗапускСРабСтола", Истина); + +КонецФункции diff --git a/Проект_деньги/src/CommonModules/Интерфейс/Интерфейс.mdo b/Проект_деньги/src/CommonModules/Интерфейс/Интерфейс.mdo new file mode 100644 index 0000000..7e05a94 --- /dev/null +++ b/Проект_деньги/src/CommonModules/Интерфейс/Интерфейс.mdo @@ -0,0 +1,9 @@ + + + Интерфейс + + ru + Интерфейс + + true + diff --git a/Проект_деньги/src/CommonModules/КоннекторHTTP/Module.bsl b/Проект_деньги/src/CommonModules/КоннекторHTTP/Module.bsl new file mode 100644 index 0000000..d281512 --- /dev/null +++ b/Проект_деньги/src/CommonModules/КоннекторHTTP/Module.bsl @@ -0,0 +1,3475 @@ +// Коннектор: удобный HTTP-клиент для 1С:Предприятие 8 +// +// Copyright 2017-2023 Vladimir Bondarevskiy +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// URL: https://github.com/vbondarevsky/Connector +// e-mail: vbondarevsky@gmail.com +// Версия: 2.6.0 +// +// Требования: платформа 1С версии 8.3.10 и выше + +#Область ПрограммныйИнтерфейс + +#Область МетодыHTTP + +#Область МетодыОбщегоНазначения + +// Отправляет GET запрос +// +// Параметры: +// URL - Строка - URL ресурса, к которому будет отправлен запрос. +// ПараметрыЗапроса - Структура, Соответствие - параметры, которые будут отправлены в URL (часть после ?): +// * Ключ - Строка - ключ параметра в URL. +// * Значение - Строка - значение параметра URL +// - Массив - сформирует строку из нескольких параметров: key=value1&key=value2 и т.д. +// ДополнительныеПараметры - См. НовыеПараметры +// Сессия - См. СоздатьСессию +// +// Возвращаемое значение: +// См. ВызватьМетод +// +Функция Get(URL, ПараметрыЗапроса = Неопределено, ДополнительныеПараметры = Неопределено, Сессия = Неопределено) Экспорт + + ТекущаяСессия = ТекущаяСессия(Сессия); + + Параметры = НовыеПараметры(); + Дополнить(Параметры, ДополнительныеПараметры); + Дополнить(Параметры, ПараметрыИзАргументов(ПараметрыЗапроса, Неопределено, Неопределено)); + + Возврат ВызватьHTTPМетод(ТекущаяСессия, "GET", URL, Параметры); + +КонецФункции + +// Отправляет OPTIONS запрос +// +// Параметры: +// URL - Строка - URL ресурса, к которому будет отправлен запрос. +// ДополнительныеПараметры - См. НовыеПараметры +// Сессия - См. СоздатьСессию +// +// Возвращаемое значение: +// См. ВызватьМетод +// +Функция Options(URL, ДополнительныеПараметры = Неопределено, Сессия = Неопределено) Экспорт + + ТекущаяСессия = ТекущаяСессия(Сессия); + + Параметры = НовыеПараметры(); + Дополнить(Параметры, ДополнительныеПараметры); + Дополнить(Параметры, ПараметрыИзАргументов(Неопределено, Неопределено, Неопределено)); + + Возврат ВызватьHTTPМетод(ТекущаяСессия, "OPTIONS", URL, Параметры); + +КонецФункции + +// Отправляет HEAD запрос +// +// Параметры: +// URL - Строка - URL ресурса, к которому будет отправлен запрос. +// ДополнительныеПараметры - См. НовыеПараметры +// Сессия - См. СоздатьСессию +// +// Возвращаемое значение: +// См. ВызватьМетод +// +Функция Head(URL, ДополнительныеПараметры = Неопределено, Сессия = Неопределено) Экспорт + + ТекущаяСессия = ТекущаяСессия(Сессия); + + Параметры = НовыеПараметры(); + Дополнить(Параметры, ДополнительныеПараметры); + Дополнить(Параметры, ПараметрыИзАргументов(Неопределено, Неопределено, Неопределено)); + + Возврат ВызватьHTTPМетод(ТекущаяСессия, "HEAD", URL, Параметры); + +КонецФункции + +// Отправляет POST запрос +// +// Параметры: +// URL - Строка - URL ресурса, к которому будет отправлен запрос. +// Данные - Структура, Соответствие, Строка, ДвоичныеДанные - см. описание ДополнительныеПараметры.Данные. +// ДополнительныеПараметры - См. НовыеПараметры +// Сессия - См. СоздатьСессию +// +// Возвращаемое значение: +// См. ВызватьМетод +// +Функция Post(URL, Данные = Неопределено, ДополнительныеПараметры = Неопределено, Сессия = Неопределено) Экспорт + + ТекущаяСессия = ТекущаяСессия(Сессия); + + Параметры = НовыеПараметры(); + Дополнить(Параметры, ДополнительныеПараметры); + Дополнить(Параметры, ПараметрыИзАргументов(Неопределено, Данные, Неопределено)); + + Возврат ВызватьHTTPМетод(ТекущаяСессия, "POST", URL, Параметры); + +КонецФункции + +// Отправляет PUT запрос +// +// Параметры: +// URL - Строка - URL ресурса, к которому будет отправлен запрос. +// Данные - Структура, Соответствие, Строка, ДвоичныеДанные - см. описание ДополнительныеПараметры.Данные. +// ДополнительныеПараметры - См. НовыеПараметры +// Сессия - См. СоздатьСессию +// +// Возвращаемое значение: +// См. ВызватьМетод +// +Функция Put(URL, Данные = Неопределено, ДополнительныеПараметры = Неопределено, Сессия = Неопределено) Экспорт + + ТекущаяСессия = ТекущаяСессия(Сессия); + + Параметры = НовыеПараметры(); + Дополнить(Параметры, ДополнительныеПараметры); + Дополнить(Параметры, ПараметрыИзАргументов(Неопределено, Данные, Неопределено)); + + Возврат ВызватьHTTPМетод(ТекущаяСессия, "PUT", URL, Параметры); + +КонецФункции + +// Отправляет PATCH запрос +// +// Параметры: +// URL - Строка - URL ресурса, к которому будет отправлен запрос. +// Данные - Структура, Соответствие, Строка, ДвоичныеДанные - см. описание ДополнительныеПараметры.Данные. +// ДополнительныеПараметры - См. НовыеПараметры +// Сессия - См. СоздатьСессию +// +// Возвращаемое значение: +// См. ВызватьМетод +// +Функция Patch(URL, Данные = Неопределено, ДополнительныеПараметры = Неопределено, Сессия = Неопределено) Экспорт + + ТекущаяСессия = ТекущаяСессия(Сессия); + + Параметры = НовыеПараметры(); + Дополнить(Параметры, ДополнительныеПараметры); + Дополнить(Параметры, ПараметрыИзАргументов(Неопределено, Данные, Неопределено)); + + Возврат ВызватьHTTPМетод(ТекущаяСессия, "PATCH", URL, Параметры); + +КонецФункции + +// Отправляет DELETE запрос +// +// Параметры: +// URL - Строка - URL ресурса, к которому будет отправлен запрос. +// Данные - Структура, Соответствие, Строка, ДвоичныеДанные - см. описание ДополнительныеПараметры.Данные. +// ДополнительныеПараметры - См. НовыеПараметры +// Сессия - См. СоздатьСессию +// +// Возвращаемое значение: +// См. ВызватьМетод +// +Функция Delete(URL, Данные = Неопределено, ДополнительныеПараметры = Неопределено, Сессия = Неопределено) Экспорт + + ТекущаяСессия = ТекущаяСессия(Сессия); + + Параметры = НовыеПараметры(); + Дополнить(Параметры, ДополнительныеПараметры); + Дополнить(Параметры, ПараметрыИзАргументов(Неопределено, Данные, Неопределено)); + + Возврат ВызватьHTTPМетод(ТекущаяСессия, "DELETE", URL, Параметры); + +КонецФункции + +// Отправляет MKCOL запрос +// +// Параметры: +// URL - Строка - URL ресурса, к которому будет отправлен запрос. +// ДополнительныеПараметры - См. НовыеПараметры +// Сессия - См. СоздатьСессию +// +// Возвращаемое значение: +// См. ВызватьМетод +// +Функция Mkcol(URL, Данные = Неопределено, ДополнительныеПараметры = Неопределено, Сессия = Неопределено) Экспорт + + ТекущаяСессия = ТекущаяСессия(Сессия); + + Параметры = НовыеПараметры(); + Дополнить(Параметры, ДополнительныеПараметры); + Дополнить(Параметры, ПараметрыИзАргументов(Неопределено, Данные, Неопределено)); + + Возврат ВызватьHTTPМетод(ТекущаяСессия, "MKCOL", URL, Параметры); + +КонецФункции + +// Отправляет данные на указанный адрес для обработки с использованием указанного HTTP-метода. +// +// Параметры: +// Метод - Строка - имя HTTP-метода для запроса. +// URL - Строка - URL ресурса, к которому будет отправлен запрос. +// ДополнительныеПараметры - См. НовыеПараметры +// Сессия - См. СоздатьСессию +// +// Возвращаемое значение: +// Структура - ответ на выполненный запрос: +// * ВремяВыполнения - Число - время выполнения запроса в миллисекундах. +// * Cookies - Соответствие - cookies полученные с сервера. +// * Заголовки - Соответствие - HTTP заголовки ответа. +// * ЭтоПостоянныйРедирект - Булево - признак постоянного редиректа. +// * ЭтоРедирект - Булево - признак редиректа. +// * Кодировка - Строка - кодировка текста ответа. +// * Тело - ДвоичныеДанные - тело ответа. +// * КодСостояния - Число - код состояния ответа. +// * URL - Строка - итоговый URL, по которому был выполнен запрос. +// +Функция ВызватьМетод(Метод, URL, ДополнительныеПараметры = Неопределено, Сессия = Неопределено) Экспорт + + ТекущаяСессия = ТекущаяСессия(Сессия); + + Параметры = НовыеПараметры(); + Дополнить(Параметры, ПараметрыИзАргументов(Неопределено, Неопределено, Неопределено)); + Дополнить(Параметры, ДополнительныеПараметры); + + Возврат ВызватьHTTPМетод(ТекущаяСессия, Метод, URL, Параметры); + +КонецФункции + +#КонецОбласти + +#Область УпрощенныеМетодыДляРаботыСЗапросамиВФорматеJSON + +// Отправляет GET запрос +// +// Параметры: +// URL - Строка - URL ресурса, к которому будет отправлен запрос. +// ПараметрыЗапроса - Структура, Соответствие - параметры, которые будут отправлены в URL (часть после ?). +// См. описание Сессия.ПараметрыЗапроса. +// ДополнительныеПараметры - См. НовыеПараметры +// Сессия - См. СоздатьСессию +// +// Возвращаемое значение: +// Соответствие, Структура - ответ, десериализованный из JSON. +// Параметры преобразования см. ДополнительныеПараметры.ПараметрыПреобразованияJSON. +// +Функция GetJson(URL, + ПараметрыЗапроса = Неопределено, + ДополнительныеПараметры = Неопределено, + Сессия = Неопределено) Экспорт + + ТекущаяСессия = ТекущаяСессия(Сессия); + + Параметры = НовыеПараметры(); + Дополнить(Параметры, ДополнительныеПараметры); + Дополнить(Параметры, ПараметрыИзАргументов(ПараметрыЗапроса, Неопределено, Неопределено)); + + ПараметрыПреобразованияJSON = + ВыбратьЗначение(Неопределено, Параметры, "ПараметрыПреобразованияJSON", Неопределено); + + Возврат КакJson(ВызватьHTTPМетод(ТекущаяСессия, "GET", URL, Параметры), ПараметрыПреобразованияJSON); + +КонецФункции + +// Отправляет POST запрос +// +// Параметры: +// URL - Строка - URL ресурса, к которому будет отправлен запрос. +// Json - Структура, Соответствие - данные, которые необходимо сериализовать в JSON. +// ДополнительныеПараметры - См. НовыеПараметры +// Сессия - См. СоздатьСессию +// +// Возвращаемое значение: +// Соответствие, Структура - ответ, десериализованный из JSON. +// Параметры преобразования см. ДополнительныеПараметры.ПараметрыПреобразованияJSON +// +Функция PostJson(URL, Json, ДополнительныеПараметры = Неопределено, Сессия = Неопределено) Экспорт + + ТекущаяСессия = ТекущаяСессия(Сессия); + + Параметры = НовыеПараметры(); + Дополнить(Параметры, ДополнительныеПараметры); + Дополнить(Параметры, ПараметрыИзАргументов(Неопределено, Неопределено, Json)); + + ПараметрыПреобразованияJSON = + ВыбратьЗначение(Неопределено, Параметры, "ПараметрыПреобразованияJSON", Неопределено); + + Возврат КакJson(ВызватьHTTPМетод(ТекущаяСессия, "POST", URL, Параметры), ПараметрыПреобразованияJSON); + +КонецФункции + +// Отправляет PUT запрос +// +// Параметры: +// URL - Строка - URL ресурса, к которому будет отправлен запрос. +// Json - Структура, Соответствие - данные, которые необходимо сериализовать в JSON. +// ДополнительныеПараметры - См. НовыеПараметры +// Сессия - См. СоздатьСессию +// +// Возвращаемое значение: +// Соответствие, Структура - ответ, десериализованный из JSON. +// Параметры преобразования см. ДополнительныеПараметры.ПараметрыПреобразованияJSON +// +Функция PutJson(URL, Json, ДополнительныеПараметры = Неопределено, Сессия = Неопределено) Экспорт + + ТекущаяСессия = ТекущаяСессия(Сессия); + + Параметры = НовыеПараметры(); + Дополнить(Параметры, ДополнительныеПараметры); + Дополнить(Параметры, ПараметрыИзАргументов(Неопределено, Неопределено, Json)); + + ПараметрыПреобразованияJSON = + ВыбратьЗначение(Неопределено, Параметры, "ПараметрыПреобразованияJSON", Неопределено); + Возврат КакJson(ВызватьHTTPМетод(ТекущаяСессия, "PUT", URL, Параметры), ПараметрыПреобразованияJSON); + +КонецФункции + +// Отправляет DELETE запрос +// +// Параметры: +// URL - Строка - URL ресурса, к которому будет отправлен запрос. +// Json - Структура, Соответствие - данные, которые необходимо сериализовать в JSON. +// ДополнительныеПараметры - См. НовыеПараметры +// Сессия - См. СоздатьСессию +// +// Возвращаемое значение: +// Соответствие, Структура - ответ, десериализованный из JSON. +// Параметры преобразования см. ДополнительныеПараметры.ПараметрыПреобразованияJSON +// +Функция DeleteJson(URL, Json, ДополнительныеПараметры = Неопределено, Сессия = Неопределено) Экспорт + + ТекущаяСессия = ТекущаяСессия(Сессия); + + Параметры = НовыеПараметры(); + Дополнить(Параметры, ДополнительныеПараметры); + Дополнить(Параметры, ПараметрыИзАргументов(Неопределено, Неопределено, Json)); + + ПараметрыПреобразованияJSON = + ВыбратьЗначение(Неопределено, Параметры, "ПараметрыПреобразованияJSON", Неопределено); + Возврат КакJson(ВызватьHTTPМетод(ТекущаяСессия, "DELETE", URL, Параметры), ПараметрыПреобразованияJSON); + +КонецФункции + +#КонецОбласти + +#Область Конструкторы + +// Конструктор дополнительных параметров +// +// Возвращаемое значение: +// Структура - позволяет задать дополнительные параметры: +// * Заголовки - Соответствие - см. описание Сессия.Заголовки. +// * Аутентификация - Структура - см. описание Сессия.Аутентификация +// * Прокси - ИнтернетПрокси - см. описание Сессия.Прокси. +// * ПараметрыЗапроса - Структура, Соответствие - см. описание Сессия.ПараметрыЗапроса. +// * ПроверятьSSL - Булево - см. описание Сессия.ПроверятьSSL. +// * КлиентскийСертификатSSL - СертификатКлиентаФайл, СертификатКлиентаWindows - Значение по умолчанию: Неопределено. +// * Cookies - Массив - см. описание Сессия.Cookies. +// * Таймаут - Число - время ожидания осуществляемого соединения и операций, в секундах. +// Значение по умолчанию - 30 сек. +// * РазрешитьПеренаправление - Булево - Истина - редиректы будут автоматически разрешены. +// Ложь - будет выполнен только один запрос к серверу. +// * Json - Структура, Соответствие - данные, которые необходимо сериализовать в JSON. +// * ПараметрыПреобразованияJSON - Структура - задает параметры преобразования JSON: +// ** ПрочитатьВСоответствие - Булево - Если Истина, чтение объекта JSON будет выполнено в Соответствие. +// Если Ложь, объекты будут считываться в объект типа Структура. +// ** ФорматДатыJSON - ФорматДатыJSON - формат, в котором представлена дата в строке, +// подлежащей преобразованию. +// ** ИменаСвойствСоЗначениямиДата - Строка, Массив Из Строка - имена свойств JSON, +// для которых нужно вызывать восстановление даты из строки. +// ** ИмяФункцииВосстановления - Строка - определяет имя функции, которая будет вызывается при чтении +// каждого свойства и должна иметь следующие параметры: +// ** Свойство - Строка - указывается только при чтении объектов JSON +// ** Значение - Произвольный - значение допустимого для сериализации типа +// ** ДополнительныеПараметры - Произвольный +// Возвращаемое значение: +// Произвольный - значение, десериализованное из JSON. +// ** МодульФункцииВосстановления - Произвольный - определяет модуль, процедура которого будет использована для +// восстановления значения. +// ** ДополнительныеПараметрыФункцииВосстановления - Произвольный - определяет дополнительные параметры, которые +// будут переданы в функцию восстановления значений. +// ** ИменаСвойствДляОбработкиВосстановления - Массив - определяет массив имен свойств JSON, для которых +// будет вызвана функция восстановления. +// ** МаксимальнаяВложенность - Число - определяет максимальный уровень вложенности объекта JSON. +// * ПараметрыЗаписиJSON - ПараметрыЗаписиJSON - используемые при записи объекта JSON. +// * Данные - Строка, ДвоичныеДанные - произвольные данные, которые необходимо отправить в запросе. +// - Структура, Соответствие - поля формы, которые необходимо отправить в запрос: +// ** Ключ - Строка - имя поля. +// ** Значение - Строка - значение поля. +// * Файлы - См. НовыйОтправляемыйФайл, Массив Из См. НовыйОтправляемыйФайл - файлы, к отправке +// * МаксимальноеКоличествоПовторов - Число - количество повторных попыток соединения/отправки запроса. +// Между попытками выполняется задержка, растущая по экспоненте. +// Но если код состояния один из 413, 429, 503 +// и в ответе есть заголовок Retry-After, +// то время задержки формируется из значения этого заголовка +// Значение по умолчанию: 0 - повторы не выполняются. +// * МаксимальноеВремяПовторов - Число - максимальное общее время (в секундах) отправки запроса с учетом повторов. +// Значение по умолчанию: 600. +// * КоэффициентЭкспоненциальнойЗадержки - Число - коэффициент изменения экспоненциальной задержки. +// 1 формирует последовательность задержек: 1, 2, 4, 8 и т.д. +// 2 формируется последовательность задержек: 2, 4, 8, 16 и т.д. +// ... +// Значение по умолчанию: 1. +// * ПовторятьДляКодовСостояний - Неопределено - повторы будут выполняться для кодов состояний >= 500. +// - Массив - повторы будут выполняться для конкретных кодов состояний. +// Значение по умолчанию: Неопределено. +// +Функция НовыеПараметры() Экспорт + + Параметры = Новый Структура; + Параметры.Вставить("Заголовки", Новый Соответствие); + Параметры.Вставить("Аутентификация", Неопределено); + Параметры.Вставить("Прокси", Неопределено); + Параметры.Вставить("ПараметрыЗапроса", Неопределено); + Параметры.Вставить("ПроверятьSSL", Истина); + Параметры.Вставить("КлиентскийСертификатSSL", Неопределено); + Параметры.Вставить("Cookies", Новый Соответствие); + Параметры.Вставить("Таймаут", СтандартныйТаймаут()); + Параметры.Вставить("РазрешитьПеренаправление", Истина); + Параметры.Вставить("Json", Неопределено); + Параметры.Вставить("ПараметрыПреобразованияJSON", ПараметрыПреобразованияJSONПоУмолчанию()); + Параметры.Вставить("Данные", Неопределено); + Параметры.Вставить("Файлы", Новый Массив); + Параметры.Вставить("МаксимальноеКоличествоПовторов", 0); + Параметры.Вставить("МаксимальноеВремяПовторов", 600); + Параметры.Вставить("КоэффициентЭкспоненциальнойЗадержки", 1); + Параметры.Вставить("ПовторятьДляКодовСостояний", Неопределено); + + Возврат Параметры; + +КонецФункции + +// Конструктор описания отправляемого файла. +// +// Параметры: +// Имя - Строка - имя поля формы. +// ИмяФайла - Строка - имя файла. +// Данные - ДвоичныеДанные - двоичные данные файла. +// Тип - Строка - MIME-тип файла +// +// Возвращаемое значение: +// Структура: +// * Имя - Строка - имя поля формы. +// * ИмяФайла - Строка - имя файла. +// * Данные - ДвоичныеДанные - двоичные данные файла. +// * Тип - Строка - MIME-тип файла. +// * Заголовки - Соответствие - HTTP заголовки запроса. +// +Функция НовыйОтправляемыйФайл(Имя, ИмяФайла, Данные = Неопределено, Тип = Неопределено) Экспорт + + Файл = Новый Структура; + Файл.Вставить("Имя", Имя); + Файл.Вставить("ИмяФайла", ИмяФайла); + Файл.Вставить("Данные", ?(Данные = Неопределено, Base64Значение(""), Данные)); + Файл.Вставить("Тип", Тип); + Файл.Вставить("Заголовки", Новый Соответствие); + + Возврат Файл; + +КонецФункции + +// Создает объект для хранения параметров сессии. +// +// Возвращаемое значение: +// Структура - параметры сессии: +// * Заголовки - Соответствие - HTTP заголовки запроса. +// * Аутентификация - Структура - параметры аутентификации запроса. +// ** ИспользоватьАутентификациюОС - Булево - включает использование аутентификации NTLM или Negotiate. +// Значение по умолчанию: Ложь. +// ** Тип - Строка - тип аутентификации. Для Basic Тип можно не указывать. +// Если Тип = Digest или Basic: +// ** Пользователь - Строка - имя пользователя. +// ** Пароль - Строка - пароль пользователя. +// Если Тип = Bearer: +// ** Токен - Строка - токен. +// Если Тип = AWS4-HMAC-SHA256: +// ** ИдентификаторКлючаДоступа - Строка - идентификатор ключа доступа. +// ** СекретныйКлюч - Строка - секретный ключ. +// ** Сервис - Строка - сервис, к которому выполняется подключение. +// ** Регион - Строка - регион, к которому выполняется подключение. +// * Прокси - ИнтернетПрокси - параметры прокси, которые будут использованы при отправке запроса. +// Значение по умолчанию: Неопределено. При этом если в конфигурации используется БСП, +// то значения прокси будет взято из БСП. +// * ПараметрыЗапроса - Структура, Соответствие - параметры, которые будут отправлены в URL (часть после ?): +// * Ключ - Строка - ключ параметра в URL. +// * Значение - Строка - значение параметра URL +// - Массив - сформирует строку из нескольких параметров: key=value1&key=value2 и т.д. +// * ПроверятьSSL - Булево - Ложь - проверка сертификата сервера не выполняется. +// - Истина - используется значение СертификатыУдостоверяющихЦентровОС. +// - СертификатыУдостоверяющихЦентровФайл - См. СертификатыУдостоверяющихЦентровФайл. +// Значение по умолчанию: Истина. +// * КлиентскийСертификатSSL - СертификатКлиентаФайл, СертификатКлиентаWindows - Значение по умолчанию: Неопределено. +// * МаксимальноеКоличествоПеренаправлений - Число - максимальное количество редиректов. Защита от зацикливания. +// Значение по умолчанию: 30 +// * Cookies - Соответствие - хранилище cookies. +// +Функция СоздатьСессию() Экспорт + + Сессия = Новый Структура; + Сессия.Вставить("Заголовки", ЗаголовкиПоУмолчанию()); + Сессия.Вставить("Аутентификация", Неопределено); + Сессия.Вставить("Прокси", Неопределено); + Сессия.Вставить("ПараметрыЗапроса", Новый Соответствие); + Сессия.Вставить("ПроверятьSSL", Истина); + Сессия.Вставить("КлиентскийСертификатSSL", Неопределено); + Сессия.Вставить("МаксимальноеКоличествоПеренаправлений", МаксимальноеКоличествоПеренаправлений()); + Сессия.Вставить("Cookies", Новый Соответствие); + Сессия.Вставить("СлужебныеДанные", Новый Структура("ПараметрыDigest")); + + Возврат Сессия; + +КонецФункции + +// Пакет ответа результата вызова метода HTTP. +// +// Возвращаемое значение: +// * Метод - Строка - имя HTTP-метода запроса +// * URL - Строка - итоговый URL, по которому был выполнен запрос. +// * КодСостояния - Число - Код состояния ответа.. +// * Заголовки - Соответствие - Заголовки ответа. +// * Тело - ДвоичныеДанные - Тело ответа. +// * Кодировка - Строка - код кодировки ответа. +// * ВремяВыполнения - Число - время выполнения запроса в миллисекундах. +// * ЭтоПостоянныйРедирект - Булево - указывает что это постоянный редирект. +// * ЭтоРедирект - Булево - указывает что это редирект. +// * Cookies - Соответствие - хранилище cookies. +// * Ошибки - Массив Из Строка - Список ошибок возникших в ходе выполнения запроса. +// +Функция НовыйОтвет() Экспорт + + Результат = Новый Структура; + Результат.Вставить("Метод", "GET"); + Результат.Вставить("URL", ""); + Результат.Вставить("КодСостояния", 600); // Сетевая ошибка (>500) + Результат.Вставить("Заголовки", Новый Соответствие); + Результат.Вставить("Тело", Base64Значение("")); + Результат.Вставить("Кодировка", "utf-8"); + Результат.Вставить("ВремяВыполнения", Неопределено); + Результат.Вставить("ЭтоПостоянныйРедирект", Ложь); + Результат.Вставить("ЭтоРедирект", Ложь); + Результат.Вставить("Cookies", Новый Соответствие); + Результат.Вставить("Ошибки", Новый Массив); + + Возврат Результат; + +КонецФункции + + +// Конструктор аутентификации операционной системы +// +// Возвращаемое значение: +// Структура: +// * ИспользоватьАутентификациюОС - Строка - включает использование аутентификации NTLM или Negotiate. +// +Функция НоваяАутентификацияОС() Экспорт + + Результат = Новый Структура; + Результат.Вставить("ИспользоватьАутентификациюОС", Истина); + + Возврат Результат; + +КонецФункции + + +// Конструктор аутентификации Basic +// +// Возвращаемое значение: +// Структура: +// * Пользователь - Строка - имя пользователя. +// * Пароль - Строка - пароль пользователя. +// +Функция НоваяАутентификацияBasic(Пользователь = "", Пароль = "") Экспорт + + Результат = Новый Структура; + Результат.Вставить("Тип", "Basic"); + Результат.Вставить("Пользователь", Пользователь); + Результат.Вставить("Пароль", Пароль); + + Возврат Результат; + +КонецФункции + +// Конструктор аутентификации Digest +// +// Возвращаемое значение: +// Структура: +// * Тип - Строка - Код типа аутентификации. Всегда "Digest". +// * Пользователь - Строка - имя пользователя. +// * Пароль - Строка - пароль пользователя. +// +Функция НоваяАутентификацияDigest(Пользователь = "", Пароль = "") Экспорт + + Результат = Новый Структура; + Результат.Вставить("Тип", "Digest"); + Результат.Вставить("Пользователь", Пользователь); + Результат.Вставить("Пароль", Пароль); + + Возврат Результат; + +КонецФункции + +// Конструктор аутентификации Bearer +// +// Возвращаемое значение: +// Структура: +// * Тип - Строка - Код типа аутентификации. Всегда "Bearer". +// * Токен - Строка - Bearer-токен. +// +Функция НоваяАутентификацияBearer(Токен = "") Экспорт + + Результат = Новый Структура; + Результат.Вставить("Тип", "Bearer"); + Результат.Вставить("Токен", Токен); + + Возврат Результат; + +КонецФункции + +// Конструктор аутентификации AWS4-HMAC-SHA256 +// +// Возвращаемое значение: +// Структура: +// * Тип - Строка - Код типа аутентификации. Всегда "AWS4-HMAC-SHA256". +// * ИдентификаторКлючаДоступа - Строка - идентификатор ключа доступа (AccessKey). +// * СекретныйКлюч - Строка - секретный ключ (SecretKey). +// * Сервис - Строка - сервис, к которому выполняется подключение. +// * Регион - Строка - регион, к которому выполняется подключение. +// +Функция НоваяАутентификацияAWS4(КлючДоступа = "", СекретныйКлюч = "", Сервис = "", Регион = "") Экспорт + + Результат = Новый Структура; + Результат.Вставить("Тип", "AWS4-HMAC-SHA256"); + Результат.Вставить("ИдентификаторКлючаДоступа", КлючДоступа); + Результат.Вставить("СекретныйКлюч", СекретныйКлюч); + Результат.Вставить("Сервис", Сервис); + Результат.Вставить("Регион", Регион); + + Возврат Результат; + +КонецФункции + +#КонецОбласти + +#КонецОбласти + +#Область ФорматыОтветов + +// Возвращает ответ сервера в виде десериализованного значения JSON. +// +// Параметры: +// Ответ - См. НовыйОтвет +// ПараметрыПреобразованияJSON - Структура - задает параметры преобразования JSON. +// * ПрочитатьВСоответствие - Булево - Если Истина, чтение объекта JSON будет выполнено в Соответствие. +// Если Ложь, объекты будут считываться в объект типа Структура. +// * ФорматДатыJSON - ФорматДатыJSON - формат, в котором представлена дата в строке, подлежащей преобразованию. +// * ИменаСвойствСоЗначениямиДата - Массив, Строка - имена свойств JSON, +// для которых нужно вызывать восстановление даты из строки. +// * ИмяФункцииВосстановления - Строка - определяет имя функции, которая будет вызывается при чтении +// каждого свойства и должна иметь следующие параметры: +// ** Свойство - Строка - указывается только при чтении объектов JSON +// ** Значение - Произвольный - значение допустимого для сериализации типа +// ** ДополнительныеПараметры - Произвольный +// Возвращаемое значение: +// Произвольный - значение, десериализованное из JSON. +// * МодульФункцииВосстановления - Произвольный - определяет модуль, процедура которого будет использована для +// восстановления значения. +// * ДополнительныеПараметрыФункцииВосстановления - Произвольный - определяет дополнительные параметры, которые +// будут переданы в функцию восстановления значений. +// * ИменаСвойствДляОбработкиВосстановления - Массив - определяет массив имен свойств JSON, для которых +// будет вызвана функция восстановления. +// * МаксимальнаяВложенность - Число - определяет максимальный уровень вложенности объекта JSON. +// +// Возвращаемое значение: +// Соответствие - ответ сервера в виде десериализованного значения JSON. +// Если ПараметрыПреобразования.ПрочитатьВСоответствие = Истина (по умолчанию). +// Структура - если ПараметрыПреобразования.ПрочитатьВСоответствие = Ложь. +// +Функция КакJson(Ответ, ПараметрыПреобразованияJSON = Неопределено) Экспорт + + Попытка + Возврат JsonВОбъект(РаспаковатьОтвет(Ответ), Ответ.Кодировка, ПараметрыПреобразованияJSON); + Исключение + ВызватьИсключение КакИсключение(Ответ, НСтр("ru = 'Ошибка при десериализации JSON.'")); + КонецПопытки; + +КонецФункции + +// Возвращает ответ сервера в виде текста. +// +// Параметры: +// Ответ - См. НовыйОтвет +// Кодировка - Строка, КодировкаТекста - определяет кодировку текста. +// Если значение не задано, то кодировка извлекается из Ответ.Кодировка. +// +// Возвращаемое значение: +// Строка - ответ сервера в виде текста. +// +Функция КакТекст(Ответ, Кодировка = Неопределено) Экспорт + + Если Не ЗначениеЗаполнено(Кодировка) Тогда + Кодировка = Ответ.Кодировка; + КонецЕсли; + + ЧтениеТекста = Новый ЧтениеТекста(РаспаковатьОтвет(Ответ).ОткрытьПотокДляЧтения(), Кодировка); + Текст = ЧтениеТекста.Прочитать(); + ЧтениеТекста.Закрыть(); + + Если Текст = Неопределено Тогда + Текст = ""; + КонецЕсли; + + Возврат Текст; + +КонецФункции + +// Возвращает ответ сервера в двоичных данных. +// +// Параметры: +// Ответ - См. НовыйОтвет +// +// Возвращаемое значение: +// Строка - ответ сервера в виде двоичных данных. +// +Функция КакДвоичныеДанные(Ответ) Экспорт + + Возврат РаспаковатьОтвет(Ответ); + +КонецФункции + +// Возвращает ответ сервера в XDTO. +// +// Параметры: +// Ответ - См. НовыйОтвет +// ПараметрыЧтенияXML - ПараметрыЧтенияXML - Параметры чтения, которые будут использованы при чтении данных XML +// Подробнее см. в синтакс помощнике метод ЧтениеXML.ОткрытьПоток +// НаборСхемXML - НаборСхемXML - Набор схем XML, используемых при проверке читаемого документа XML. +// Если набор схем указан, но не проверен и включена проверка документа XML, +// то будет выполнена проверка набора схем +// Подробнее см. в синтакс помощнике метод ЧтениеXML.ОткрытьПоток +// Кодировка - Строка, КодировкаТекста - Позволяет задать кодировку. +// Подробнее см. в синтакс помощнике метод ЧтениеXML.ОткрытьПоток +// +// Возвращаемое значение: +// ОбъектXDTO, СписокXDTO - тип возвращаемого значения может быть любым из поддерживаемых сериализацию в XDTO. +// +Функция КакXDTO(Ответ, + ПараметрыЧтенияXML = Неопределено, + НаборСхемXML = Неопределено, + Кодировка = Неопределено) Экспорт + + Попытка + ДвоичныеДанные = РаспаковатьОтвет(Ответ); + + ПотокДляЧтения = ДвоичныеДанные.ОткрытьПотокДляЧтения(); + + Если Не ЗначениеЗаполнено(Кодировка) Тогда + Кодировка = Ответ.Кодировка; + КонецЕсли; + + ЧтениеXML = Новый ЧтениеXML; + ЧтениеXML.ОткрытьПоток(ПотокДляЧтения, ПараметрыЧтенияXML, НаборСхемXML, Кодировка); + + ОбъектXDTO = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML); + Исключение + ВызватьИсключение КакИсключение(Ответ, НСтр("ru = 'Ошибка при десериализации XDTO.'")); + КонецПопытки; + + Возврат ОбъектXDTO; + +КонецФункции + +// Возвращает ответ сервера в виде текста предназначенного для использования в ВызватьИсключение. +// +// Параметры: +// Ответ - См. НовыйОтвет. +// ТекстДляПользователя - Строка - Текст пояснения причины для пользователя. +// +// Возвращаемое значение: +// Строка - ответ сервера в виде текста исключения. +// +Функция КакИсключение(Ответ, Знач ТекстДляПользователя = Неопределено) Экспорт + + ТекстИсключения = СтрШаблон( + НСтр("ru = 'HTTP %1 %2 + |%3'"), + Ответ.Метод, + Ответ.URL, + ПредставлениеКодаСостоянияHTTP(Ответ.КодСостояния) + ); + + ТелоОтвета = ВырезатьТекст(КакТекст(Ответ)); + + Если Не ПустаяСтрока(ТелоОтвета) Тогда + ТекстИсключения = ТекстИсключения + Символы.ПС + СтрШаблон( + НСтр("ru = 'Тело ответа: + |%1'"), + ТелоОтвета); + КонецЕсли; + + Если Ответ.Ошибки.Количество() Тогда + ТекстИсключения = ТекстИсключения + Символы.ПС + Символы.ПС + + СтрСоединить(Ответ.Ошибки, Символы.ПС + Символы.ПС); + КонецЕсли; + + Если Не ПустаяСтрока(ТекстДляПользователя) Тогда + ТекстИсключения = ТекстДляПользователя + Символы.ПС + Символы.ПС + ТекстИсключения; + КонецЕсли; + + Возврат ТекстИсключения; + +КонецФункции + +#КонецОбласти + +#Область ВспомогательныеФункции + +// Возвращает структурированное представление URL. +// +// Параметры: +// URL - Строка - URL ресурса, к которому будет отправлен запрос. +// +// Возвращаемое значение: +// Структура - структура URL: +// * Схема - Строка - схема обращения к серверу (http, https). +// * Аутентификация - Структура - параметры аутентификации: +// ** Пользователь - Строка - имя пользователя. +// ** Пароль - Строка - пароль пользователя. +// * Сервер - Строка - адрес сервера. +// * Порт - Число - порт сервера. +// * Путь - Строка - адрес ресурса на сервере. +// * ПараметрыЗапроса - Соответствие - параметры запроса передаваемые на сервер в URL (часть после ?): +// ** Ключ - Строка - ключ параметра в URL. +// ** Значение - Строка - значение параметра URL; +// - Массив - значения параметра (key=value1&key=value2). +// * Фрагмент - Строка - часть URL после #. +// +Функция РазобратьURL(Знач URL) Экспорт + + Схема = ""; + Путь = ""; + Аутентификация = Новый Структура("Пользователь, Пароль", "", ""); + Сервер = ""; + Порт = ""; + Фрагмент = ""; + + ДопустимыеСхемы = СтрРазделить("http,https", ","); + + URLБезСхемы = URL; + РазбитьСтрокуПоРазделителю(Схема, URLБезСхемы, "://"); + Если ДопустимыеСхемы.Найти(НРег(Схема)) <> Неопределено Тогда + URL = URLБезСхемы; + Иначе + Схема = ""; + КонецЕсли; + + Результат = РазделитьПоПервомуНайденномуРазделителю(URL, СтрРазделить("/,?,#", ",")); + URL = Результат[0]; + Если ЗначениеЗаполнено(Результат[2]) Тогда + Путь = Результат[2] + Результат[1]; + КонецЕсли; + + АутентификацияСтрока = ""; + РазбитьСтрокуПоРазделителю(АутентификацияСтрока, URL, "@"); + Если ЗначениеЗаполнено(АутентификацияСтрока) Тогда + АутентификацияЧасти = СтрРазделить(АутентификацияСтрока, ":"); + Аутентификация.Пользователь = АутентификацияЧасти[0]; + Если АутентификацияЧасти.Количество() > 1 Тогда + Аутентификация.Пароль = АутентификацияЧасти[1]; + КонецЕсли; + КонецЕсли; + + // IPv6 + РазбитьСтрокуПоРазделителю(Сервер, URL, "]"); + Если ЗначениеЗаполнено(Сервер) Тогда + Сервер = Сервер + "]"; + КонецЕсли; + + URL = СтрЗаменить(URL, "/", ""); + + РазбитьСтрокуПоРазделителю(Порт, URL, ":", Истина); + + Если Не ЗначениеЗаполнено(Сервер) Тогда + Сервер = URL; + КонецЕсли; + + Если ЗначениеЗаполнено(Порт) Тогда + Порт = Число(Порт); + Иначе + Порт = 0; + КонецЕсли; + + РазбитьСтрокуПоРазделителю(Фрагмент, Путь, "#", Истина); + + ПараметрыЗапроса = ЗаполнитьПараметрыЗапроса(Путь); + + Если Не ЗначениеЗаполнено(Схема) Тогда + Схема = "http"; + КонецЕсли; + + Если Не ЗначениеЗаполнено(Путь) Тогда + Путь = "/"; + КонецЕсли; + + Результат = Новый Структура; + Результат.Вставить("Схема", Схема); + Результат.Вставить("Аутентификация", Аутентификация); + Результат.Вставить("Сервер", Сервер); + Результат.Вставить("Порт", Порт); + Результат.Вставить("Путь", Путь); + Результат.Вставить("ПараметрыЗапроса", ПараметрыЗапроса); + Результат.Вставить("Фрагмент", Фрагмент); + + Возврат Результат; + +КонецФункции + +// Преобразование Объекта в JSON. +// +// Параметры: +// Объект - Произвольный - данные, которые необходимо преобразовать в JSON. +// ПараметрыПреобразования - Структура - кодировка текста JSON. Значение по умолчанию - utf-8. +// * ФорматДатыJSON - ФорматДатыJSON - определяет формат сериализации дат JSON-объектов. +// * ВариантЗаписиДатыJSON - ВариантЗаписиДатыJSON - определяет вариант записи даты в формате JSON. +// * ИмяФункцииПреобразования - Строка - функция, которая вызывается для всех свойств, +// тип которых не поддерживает автоматическую сериализацию в JSON. +// Функция должна быть экспортируемая и иметь следующие параметры: +// ** Свойство - Строка - свойство структуры данных, которое не может быть +// автоматически сериализовано в JSON. +// ** Значение - Строка - значение свойства структуры данных, которое +// не может быть автоматически сериализовано в JSON. +// ** ДополнительныеПараметры - Произвольный - в этом параметре будет передан +// ДополнительныеПараметрыФункцииПреобразования. +// ** Отказ - Булево - отменяет операцию записи свойства. +// Возвращаемое значение функции: +// Произвольный - результат преобразования. +// * МодульФункцииПреобразования - Произвольный - модуль, в котором определена функция ИмяФункцииПреобразования. +// * ДополнительныеПараметрыФункцииПреобразования - Произвольный - параметры, которые будут переданы +// в функцию ИмяФункцииПреобразования. +// ПараметрыЗаписи - Структура - параметры преобразования JSON: +// * ПереносСтрок - ПереносСтрокJSON - определяет способ переноса строк, +// который будет использован при записи данных JSON. +// * СимволыОтступа - Строка - определяет символы отступа, используемые при записи данных JSON. +// * ИспользоватьДвойныеКавычки - Булево - определяет, будут ли при записи имена свойств JSON +// записываться в двойных кавычках. +// * ЭкранированиеСимволов - ЭкранированиеСимволовJSON - определяет используемый способ экранирования (замены) +// символов при записи данных JSON. +// * ЭкранироватьУгловыеСкобки - Булево - определяет, будут ли при записи экранироваться символы "<" и ">". +// * ЭкранироватьРазделителиСтрок - Булево - определяет, будут ли экранироваться разделители строк +// U+2028 (line-separator) и U+2029 (page-separator). +// * ЭкранироватьАмперсанд - Булево - определяет, будет ли при записи экранироваться символ амперсанда "&". +// * ЭкранироватьОдинарныеКавычки - Булево - определяет, будут ли экранироваться одинарные кавычки. +// * ЭкранироватьСлеш - Булево - определяет, будет ли экранироваться слеш (косая черта) при записи значения. +// +// Возвращаемое значение: +// Строка - объект в формате JSON. +// +Функция ОбъектВJson(Объект, Знач ПараметрыПреобразования = Неопределено, Знач ПараметрыЗаписи = Неопределено) Экспорт + + ПараметрыПреобразованияJSON = Объединить(ПараметрыПреобразованияJSONПоУмолчанию(), ПараметрыПреобразования); + + НастройкиСериализации = Новый НастройкиСериализацииJSON; + НастройкиСериализации.ФорматСериализацииДаты = ПараметрыПреобразованияJSON.ФорматДатыJSON; + НастройкиСериализации.ВариантЗаписиДаты = ПараметрыПреобразованияJSON.ВариантЗаписиДатыJSON; + + ПараметрыЗаписи = Объединить(ПараметрыЗаписиJSONПоУмолчанию(), ПараметрыЗаписи); + + ПараметрыЗаписиJSON = Новый ПараметрыЗаписиJSON( + ПараметрыЗаписи.ПереносСтрок, + ПараметрыЗаписи.СимволыОтступа, + ПараметрыЗаписи.ИспользоватьДвойныеКавычки, + ПараметрыЗаписи.ЭкранированиеСимволов, + ПараметрыЗаписи.ЭкранироватьУгловыеСкобки, + ПараметрыЗаписи.ЭкранироватьРазделителиСтрок, + ПараметрыЗаписи.ЭкранироватьАмперсанд, + ПараметрыЗаписи.ЭкранироватьОдинарныеКавычки, + ПараметрыЗаписи.ЭкранироватьСлеш); + + ЗаписьJSON = Новый ЗаписьJSON; + ЗаписьJSON.УстановитьСтроку(ПараметрыЗаписиJSON); + + Если ПараметрыПреобразованияJSON.ИмяФункцииПреобразования <> Неопределено + И ПараметрыПреобразованияJSON.МодульФункцииПреобразования <> Неопределено Тогда + ЗаписатьJSON(ЗаписьJSON, Объект, НастройкиСериализации, + ПараметрыПреобразованияJSON.ИмяФункцииПреобразования, + ПараметрыПреобразованияJSON.МодульФункцииПреобразования, + ПараметрыПреобразованияJSON.ДополнительныеПараметрыФункцииПреобразования); + Иначе + ЗаписатьJSON(ЗаписьJSON, Объект, НастройкиСериализации); + КонецЕсли; + + Возврат ЗаписьJSON.Закрыть(); + +КонецФункции + +// Преобразование JSON в Объект. +// +// Параметры: +// Json - Поток, ДвоичныеДанные, Строка - данные в формате JSON. +// Кодировка - Строка - кодировка текста JSON. Значение по умолчанию - utf-8. +// ПараметрыПреобразования - Структура - параметры преобразования JSON: +// * ПрочитатьВСоответствие - Булево - если Истина, чтение объекта JSON будет выполнено в Соответствие, +// иначе в Структура. +// * ИменаСвойствСоЗначениямиДата - Массив, Строка, ФиксированныйМассив - имена свойств JSON, +// для которых нужно вызывать восстановление даты из строки. +// * ФорматДатыJSON - ФорматДатыJSON - определяет формат десериализации дат JSON-объектов. +// * ИмяФункцииВосстановления - Строка - определяет имя функции, которая будет вызывается при чтении +// каждого свойства и должна иметь следующие параметры: +// ** Свойство - Строка - указывается только при чтении объектов JSON +// ** Значение - Произвольный - значение допустимого для сериализации типа +// ** ДополнительныеПараметры - Произвольный +// Возвращаемое значение: +// Произвольный - значение, десериализованное из JSON. +// * МодульФункцииВосстановления - Произвольный - определяет модуль, процедура которого будет использована для +// восстановления значения. +// * ДополнительныеПараметрыФункцииВосстановления - Произвольный - определяет дополнительные параметры, которые +// будут переданы в функцию восстановления значений. +// * ИменаСвойствДляОбработкиВосстановления - Массив - определяет массив имен свойств JSON, для которых +// будет вызвана функция восстановления. +// * МаксимальнаяВложенность - Число - определяет максимальный уровень вложенности объекта JSON. +// +// Возвращаемое значение: +// Произвольный - значение, десериализованное из JSON. +// +Функция JsonВОбъект(Json, Кодировка = "utf-8", ПараметрыПреобразования = Неопределено) Экспорт + + ПараметрыПреобразованияJSON = Объединить(ПараметрыПреобразованияJSONПоУмолчанию(), ПараметрыПреобразования); + + ЧтениеJSON = Новый ЧтениеJSON; + Если ТипЗнч(Json) = Тип("ДвоичныеДанные") Тогда + ЧтениеJSON.ОткрытьПоток(Json.ОткрытьПотокДляЧтения(), Кодировка); + ИначеЕсли ТипЗнч(Json) = Тип("Строка") Тогда + ЧтениеJSON.УстановитьСтроку(Json); + Иначе + ЧтениеJSON.ОткрытьПоток(Json, Кодировка); + КонецЕсли; + Объект = ПрочитатьJSON( + ЧтениеJSON, + ПараметрыПреобразованияJSON.ПрочитатьВСоответствие, + ПараметрыПреобразованияJSON.ИменаСвойствСоЗначениямиДата, + ПараметрыПреобразованияJSON.ФорматДатыJSON, + ПараметрыПреобразованияJSON.ИмяФункцииВосстановления, + ПараметрыПреобразованияJSON.МодульФункцииВосстановления, + ПараметрыПреобразованияJSON.ДополнительныеПараметрыФункцииВосстановления, + ПараметрыПреобразованияJSON.ИменаСвойствДляОбработкиВосстановления, + ПараметрыПреобразованияJSON.МаксимальнаяВложенность); + ЧтениеJSON.Закрыть(); + + Возврат Объект; + +КонецФункции + +// Вычисляет HMAC (hash-based message authentication code). +// +// Параметры: +// Ключ - ДвоичныеДанные - секретный ключ. +// Данные - ДвоичныеДанные - данные, для которых нужно посчитать HMAC. +// Алгоритм - ХешФункция - алгоритм, используемый для вычисления хеша. +// +// Возвращаемое значение: +// ДвоичныеДанные - вычисленное значение HMAC. +// +Функция HMAC(Ключ, Данные, Алгоритм) Экспорт + + ДлинаБлока = 64; + + Если Ключ.Размер() > ДлинаБлока Тогда + Хеширование = Новый ХешированиеДанных(Алгоритм); + Хеширование.Добавить(Ключ); + + КлючБуфер = ПолучитьБуферДвоичныхДанныхИзДвоичныхДанных(Хеширование.ХешСумма); + Иначе + КлючБуфер = ПолучитьБуферДвоичныхДанныхИзДвоичныхДанных(Ключ); + КонецЕсли; + + ИзмененныйКлюч = Новый БуферДвоичныхДанных(ДлинаБлока); + ИзмененныйКлюч.Записать(0, КлючБуфер); + + ВнутреннийКлюч = ИзмененныйКлюч.Скопировать(); + ВнешнийКлюч = ИзмененныйКлюч; + + ВнутреннееВыравнивание = Новый БуферДвоичныхДанных(ДлинаБлока); + ВнешнееВыравнивание = Новый БуферДвоичныхДанных(ДлинаБлока); + Для Индекс = 0 По ДлинаБлока - 1 Цикл + ВнутреннееВыравнивание.Установить(Индекс, 54); + ВнешнееВыравнивание.Установить(Индекс, 92); + КонецЦикла; + + ВнутреннееХеширование = Новый ХешированиеДанных(Алгоритм); + ВнешнееХеширование = Новый ХешированиеДанных(Алгоритм); + + ВнутреннийКлюч.ЗаписатьПобитовоеИсключительноеИли(0, ВнутреннееВыравнивание); + ВнешнийКлюч.ЗаписатьПобитовоеИсключительноеИли(0, ВнешнееВыравнивание); + + ВнешнееХеширование.Добавить(ПолучитьДвоичныеДанныеИзБуфераДвоичныхДанных(ВнешнийКлюч)); + ВнутреннееХеширование.Добавить(ПолучитьДвоичныеДанныеИзБуфераДвоичныхДанных(ВнутреннийКлюч)); + + Если ЗначениеЗаполнено(Данные) Тогда + ВнутреннееХеширование.Добавить(Данные); + КонецЕсли; + + ВнешнееХеширование.Добавить(ВнутреннееХеширование.ХешСумма); + + Возврат ВнешнееХеширование.ХешСумма; + +КонецФункции + +// Возвращает структуру именованных кодов состояний HTTP. +// +// Возвращаемое значение: +// Структура - именованные коды состояний HTTP. +// +Функция КодыСостоянияHTTP() Экспорт + + КодыСостояния = Новый Структура; + Для Каждого Описание Из ОписанияКодовСостоянийHTTP() Цикл + КодыСостояния.Вставить(Описание.Ключ, Описание.Код); + КонецЦикла; + + Возврат КодыСостояния; + +КонецФункции + +// Возвращает текстовое представление переданного кода состояния HTTP. +// +// Параметры: +// КодСостояния - Число - код состояния HTTP, для которого нужно получить текстовое представление. +// +// Возвращаемое значение: +// Строка - текстовое представление кода состояния HTTP. +// +Функция ПредставлениеКодаСостоянияHTTP(КодСостояния) Экспорт + + ОписаниеКодаСостояния = Неопределено; + Для Каждого Описание Из ОписанияКодовСостоянийHTTP() Цикл + Если Описание.Код = КодСостояния Тогда + ОписаниеКодаСостояния = Описание; + Прервать; + КонецЕсли; + КонецЦикла; + + Если ОписаниеКодаСостояния = Неопределено Тогда + Возврат СтрШаблон(НСтр("ru = '%1: Неизвестный код состояния HTTP'"), КодСостояния); + Иначе + Возврат СтрШаблон("%1: %2", ОписаниеКодаСостояния.Код, ОписаниеКодаСостояния.Описание); + КонецЕсли; + +КонецФункции + +// Выполняет чтение данных из архива GZip. +// +// Параметры: +// СжатыеДанные - ДвоичныеДанные - данные упакованные GZip. +// +// Возвращаемое значение: +// ДвоичныеДанные - распакованные данные. +// +Функция ПрочитатьGZip(СжатыеДанные) Экспорт + + РазмерПрефиксаGZip = 10; + РазмерПостфиксаGZip = 8; + + ЧтениеДанных = Новый ЧтениеДанных(СжатыеДанные); + ЧтениеДанных.Пропустить(РазмерПрефиксаGZip); + РазмерСжатыхДанных = ЧтениеДанных.ИсходныйПоток().Размер() - РазмерПрефиксаGZip - РазмерПостфиксаGZip; + + ПотокZip = Новый ПотокВПамяти(ZipРазмерLFH() + РазмерСжатыхДанных + ZipРазмерDD() + ZipРазмерCDH() + ZipРазмерEOCD()); + ЗаписьДанных = Новый ЗаписьДанных(ПотокZip); + ЗаписьДанных.ЗаписатьБуферДвоичныхДанных(ZipLFH()); + ЧтениеДанных.КопироватьВ(ЗаписьДанных, РазмерСжатыхДанных); + + ЗаписьДанных.Закрыть(); + ЗаписьДанных = Новый ЗаписьДанных(ПотокZip); + + CRC32 = ЧтениеДанных.ПрочитатьЦелое32(); + РазмерНесжатыхДанных = ЧтениеДанных.ПрочитатьЦелое32(); + ЧтениеДанных.Закрыть(); + + ЗаписьДанных.ЗаписатьБуферДвоичныхДанных(ZipDD(CRC32, РазмерСжатыхДанных, РазмерНесжатыхДанных)); + ЗаписьДанных.ЗаписатьБуферДвоичныхДанных(ZipCDH(CRC32, РазмерСжатыхДанных, РазмерНесжатыхДанных)); + ЗаписьДанных.ЗаписатьБуферДвоичныхДанных(ZipEOCD(РазмерСжатыхДанных)); + ЗаписьДанных.Закрыть(); + + Возврат ПрочитатьZip(ПотокZip); + +КонецФункции + +// Выполняет запись данных в архив GZip. +// +// Параметры: +// Данные - ДвоичныеДанные - исходные данные. +// +// Возвращаемое значение: +// ДвоичныеДанные - данные упакованные GZip. +// +Функция ЗаписатьGZip(Данные) Экспорт + + ЧтениеДанных = Новый ЧтениеДанных(ЗаписатьZip(Данные)); + + НачальноеСмещение = 14; + ЧтениеДанных.Пропустить(НачальноеСмещение); + CRC32 = ЧтениеДанных.ПрочитатьЦелое32(); + + РазмерСжатыхДанных = ЧтениеДанных.ПрочитатьЦелое32(); + РазмерИсходныхДанных = ЧтениеДанных.ПрочитатьЦелое32(); + + РазмерИмениФайла = ЧтениеДанных.ПрочитатьЦелое16(); + РазмерДополнительногоПоля = ЧтениеДанных.ПрочитатьЦелое16(); + ЧтениеДанных.Пропустить(РазмерИмениФайла + РазмерДополнительногоПоля); + + ПотокGZip = Новый ПотокВПамяти; + ЗаписьДанных = Новый ЗаписьДанных(ПотокGZip); + ЗаписьДанных.ЗаписатьБуферДвоичныхДанных(GZipHeader()); + ЧтениеДанных.КопироватьВ(ЗаписьДанных, РазмерСжатыхДанных); + ЗаписьДанных.Закрыть(); + ЗаписьДанных = Новый ЗаписьДанных(ПотокGZip); + + ЗаписьДанных.ЗаписатьБуферДвоичныхДанных(GZipFooter(CRC32, РазмерИсходныхДанных)); + + Возврат ПотокGZip.ЗакрытьИПолучитьДвоичныеДанные(); + +КонецФункции + +#КонецОбласти + +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс + +Функция ПодготовитьЗапрос(Сессия, Метод, URL, ДополнительныеПараметры) Экспорт + + Cookies = ВыбратьЗначение(Неопределено, ДополнительныеПараметры, "Cookies", Новый Массив); + Cookies = ОбъединитьCookies(ДозаполнитьCookie(Сессия.Cookies, URL), ДозаполнитьCookie(Cookies, URL)); + + АутентификацияИзДополнительныхПараметров = + ВыбратьЗначение(Неопределено, ДополнительныеПараметры, "Аутентификация", Новый Структура); + ПараметрыЗапросаИзДополнительныхПараметров = + ВыбратьЗначение(Неопределено, ДополнительныеПараметры, "ПараметрыЗапроса", Новый Соответствие); + ЗаголовкиИзДополнительныхПараметров = + ВыбратьЗначение(Неопределено, ДополнительныеПараметры, "Заголовки", Новый Соответствие); + + Аутентификация = Объединить(Скопировать(АутентификацияИзДополнительныхПараметров), Сессия.Аутентификация); + ПараметрыЗапроса = Объединить(Скопировать(ПараметрыЗапросаИзДополнительныхПараметров), Сессия.ПараметрыЗапроса); + Заголовки = Объединить(Скопировать(ЗаголовкиИзДополнительныхПараметров), Сессия.Заголовки); + ПараметрыПреобразованияJSON = + ВыбратьЗначение(Неопределено, ДополнительныеПараметры, "ПараметрыПреобразованияJSON", Неопределено); + + ПодготовленныйЗапрос = Новый Структура; + ПодготовленныйЗапрос.Вставить("Cookies", Cookies); + ПодготовленныйЗапрос.Вставить("Аутентификация", Аутентификация); + ПодготовленныйЗапрос.Вставить("Метод", Метод); + ПодготовленныйЗапрос.Вставить("Заголовки", Заголовки); + ПодготовленныйЗапрос.Вставить("ПараметрыЗапроса", ПараметрыЗапроса); + ПодготовленныйЗапрос.Вставить("URL", ПодготовитьURL(URL, ПараметрыЗапроса)); + ПодготовленныйЗапрос.Вставить("ПараметрыПреобразованияJSON", ПараметрыПреобразованияJSON); + + ПодготовитьCookies(ПодготовленныйЗапрос); + + Данные = ВыбратьЗначение(Неопределено, ДополнительныеПараметры, "Данные", Новый Структура); + Файлы = ВыбратьЗначение(Неопределено, ДополнительныеПараметры, "Файлы", Новый Массив); + Json = ВыбратьЗначение(Неопределено, ДополнительныеПараметры, "Json", Неопределено); + ПараметрыЗаписиJSON = ВыбратьЗначение(Неопределено, ДополнительныеПараметры, "ПараметрыЗаписиJSON", Неопределено); + + ПодготовитьТелоЗапроса(ПодготовленныйЗапрос, Данные, Файлы, Json, ПараметрыЗаписиJSON); + ПодготовитьАутентификацию(ПодготовленныйЗапрос); + + Возврат ПодготовленныйЗапрос; + +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +#Область РаботаСHTTPЗапросами + +Функция ПараметрыИзАргументов(ПараметрыЗапроса, Данные, Json) + + Результат = Новый Структура; + Результат.Вставить("ПараметрыЗапроса", ПараметрыЗапроса); + Результат.Вставить("Данные", Данные); + Результат.Вставить("Json", Json); + + Возврат Результат; + +КонецФункции + +Функция ВызватьHTTPМетод(Сессия, Метод, URL, ДополнительныеПараметры) + + ПодготовленныйЗапрос = ПодготовитьЗапрос(Сессия, Метод, URL, ДополнительныеПараметры); + + НастройкиПодключения = НастройкиПодключения(Метод, URL, ДополнительныеПараметры); + + Ответ = ОтправитьЗапрос(Сессия, ПодготовленныйЗапрос, НастройкиПодключения); + + Если НастройкиПодключения.РазрешитьПеренаправление И Ответ.ЭтоРедирект Тогда + // INFO: по хорошему аутентификацию нужно привести к новых параметрам, но пока будем игнорировать. + Ответ = ПеренаправитьЗапрос(Сессия, НастройкиПодключения, ПодготовленныйЗапрос, Ответ); + КонецЕсли; + + Возврат Ответ; + +КонецФункции + +Функция ПеренаправитьЗапрос(Сессия, НастройкиПодключения, ПодготовленныйЗапрос, ПеренаправленныйОтвет) + + Перенаправление = 0; + + Пока ПеренаправленныйОтвет.ЭтоРедирект Цикл + + ПодготовитьЗапросДляРедиректа(Сессия, ПодготовленныйЗапрос, ПеренаправленныйОтвет); + + ПеренаправленныйОтвет = ОтправитьЗапрос(Сессия, ПодготовленныйЗапрос, НастройкиПодключения); + + Перенаправление = Перенаправление + 1; + + Если Перенаправление > Сессия.МаксимальноеКоличествоПеренаправлений Тогда + ВызватьИсключение("СлишкомМногоПеренаправлений"); + КонецЕсли; + + КонецЦикла; + + Возврат ПеренаправленныйОтвет; + +КонецФункции + +Процедура ПодготовитьЗапросДляРедиректа(Сессия, ПодготовленныйЗапрос, ПеренаправленныйОтвет) + + КодыСостоянияHTTP = КодыСостоянияHTTP(); + + НовыйURL = СформироватьНовыйURLПриПеренаправлении(ПеренаправленныйОтвет); + + ПодготовленныйЗапрос.URL = КодироватьСтроку(НовыйURL, СпособКодированияСтроки.URLВКодировкеURL); + НовыйHTTPЗапрос = Новый HTTPЗапрос(СобратьАдресРесурса(РазобратьURL(НовыйURL), Новый Соответствие)); + ПереопределитьМетод(ПодготовленныйЗапрос, ПеренаправленныйОтвет); + + Если ПеренаправленныйОтвет.КодСостояния <> КодыСостоянияHTTP.ВременноеПеренаправление_307 + И ПеренаправленныйОтвет.КодСостояния <> КодыСостоянияHTTP.ПостоянноеПеренаправление_308 Тогда + УдалитьЗаголовки(ПодготовленныйЗапрос.Заголовки, "content-length,content-type,transfer-encoding"); + НовыйHTTPЗапрос.Заголовки = ПодготовленныйЗапрос.Заголовки; + Иначе + ИсходныйПоток = ПодготовленныйЗапрос.HTTPЗапрос.ПолучитьТелоКакПоток(); + ИсходныйПоток.КопироватьВ(НовыйHTTPЗапрос.ПолучитьТелоКакПоток()); + КонецЕсли; + + ПодготовленныйЗапрос.HTTPЗапрос = НовыйHTTPЗапрос; + УдалитьЗаголовки(ПодготовленныйЗапрос.Заголовки, "cookies"); + + ПодготовленныйЗапрос.Cookies = ОбъединитьCookies(ПодготовленныйЗапрос.Cookies, Сессия.Cookies); + ПодготовитьCookies(ПодготовленныйЗапрос); + +КонецПроцедуры + +Процедура ПодготовитьАутентификацию(ПодготовленныйЗапрос) + + ПодготовленныйЗапрос.Вставить("СобытияНаОтвет", Новый Массив); + Если Не ЗначениеЗаполнено(ПодготовленныйЗапрос.Аутентификация) Тогда + СтруктураURL = РазобратьURL(ПодготовленныйЗапрос.URL); + Если ЗначениеЗаполнено(СтруктураURL.Аутентификация) Тогда + ПодготовленныйЗапрос.Аутентификация = СтруктураURL.Аутентификация; + КонецЕсли; + КонецЕсли; + + Если ЗначениеЗаполнено(ПодготовленныйЗапрос.Аутентификация) Тогда + Если ПодготовленныйЗапрос.Аутентификация.Свойство("Тип") Тогда + ТипАутентификации = НРег(ПодготовленныйЗапрос.Аутентификация.Тип); + Если ТипАутентификации = "digest" Тогда + ПодготовленныйЗапрос.СобытияНаОтвет.Добавить("ОбработкаОтветаСКодом401"); + КонецЕсли; + Если ТипАутентификации = "aws4-hmac-sha256" Тогда + ПодготовитьАутентификациюAWS4(ПодготовленныйЗапрос); + КонецЕсли; + Если ТипАутентификации = "bearer" Тогда + ПодготовитьАутентификациюBearer(ПодготовленныйЗапрос); + КонецЕсли; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +Процедура ПодготовитьТелоЗапроса(ПодготовленныйЗапрос, Данные, Файлы, Json, ПараметрыЗаписиJSON) + + СтруктураURL = РазобратьURL(ПодготовленныйЗапрос.URL); + + HTTPЗапрос = Новый HTTPЗапрос; + HTTPЗапрос.АдресРесурса = СобратьАдресРесурса(СтруктураURL, ПодготовленныйЗапрос.ПараметрыЗапроса); + Если ЗначениеЗаполнено(Файлы) Тогда + ContentType = ЗакодироватьФайлы(HTTPЗапрос, Файлы, Данные); + ИначеЕсли ЗначениеЗаполнено(Данные) Тогда + ContentType = "application/x-www-form-urlencoded"; + Если ТипЗнч(Данные) = Тип("ДвоичныеДанные") Тогда + HTTPЗапрос.УстановитьТелоИзДвоичныхДанных(Данные); + Иначе + Если ТипЗнч(Данные) = Тип("Строка") Тогда + Тело = Данные; + Иначе + Тело = КодироватьПараметрыЗапроса(Данные); + КонецЕсли; + ContentType = "application/x-www-form-urlencoded; charset=utf-8"; + HTTPЗапрос.УстановитьТелоИзСтроки(Тело, КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать); + КонецЕсли; + ИначеЕсли Json <> Неопределено Тогда + ContentType = "application/json; charset=utf-8"; + СтрокаJson = ОбъектВJson(Json, ПодготовленныйЗапрос.ПараметрыПреобразованияJSON, ПараметрыЗаписиJSON); + HTTPЗапрос.УстановитьТелоИзСтроки(СтрокаJson, КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать); + Иначе + ContentType = Неопределено; + КонецЕсли; + ЗначениеЗаголовка = ЗначениеЗаголовка("content-type", ПодготовленныйЗапрос.Заголовки); + Если ЗначениеЗаголовка = Ложь И ЗначениеЗаполнено(ContentType) Тогда + ПодготовленныйЗапрос.Заголовки.Вставить("Content-Type", ContentType); + КонецЕсли; + + HTTPЗапрос.Заголовки = ПодготовленныйЗапрос.Заголовки; + + УпаковатьЗапрос(HTTPЗапрос); + + ПодготовленныйЗапрос.Вставить("HTTPЗапрос", HTTPЗапрос); + +КонецПроцедуры + +Функция ЗакодироватьФайлы(HTTPЗапрос, Файлы, Данные) + + Части = Новый Массив; + Если ЗначениеЗаполнено(Данные) Тогда + Для Каждого Поле Из Данные Цикл + Части.Добавить(СоздатьПолеФормы(Новый Структура("Имя,Данные", Поле.Ключ, Поле.Значение))); + КонецЦикла; + КонецЕсли; + Если ТипЗнч(Файлы) = Тип("Массив") Тогда + Для Каждого Файл Из Файлы Цикл + Части.Добавить(СоздатьПолеФормы(Файл)); + КонецЦикла; + Иначе + Части.Добавить(СоздатьПолеФормы(Файлы)); + КонецЕсли; + + Разделитель = СтрЗаменить(Новый УникальныйИдентификатор, "-", ""); + РазделительСтрок = Символы.ВК + Символы.ПС; + + ТелоЗапроса = HTTPЗапрос.ПолучитьТелоКакПоток(); + ЗаписьДанных = Новый ЗаписьДанных(ТелоЗапроса, КодировкаТекста.UTF8, ПорядокБайтов.LittleEndian, "", "", Ложь); + Для Каждого Часть Из Части Цикл + ЗаписьДанных.ЗаписатьСтроку("--" + Разделитель + РазделительСтрок); + ЗаписьДанных.ЗаписатьСтроку(ЗаголовкиВСтроку(Часть.Заголовки)); + Если ТипЗнч(Часть.Данные) = Тип("ДвоичныеДанные") Тогда + ЗаписьДанных.Записать(Часть.Данные); + Иначе + ЗаписьДанных.ЗаписатьСтроку(Часть.Данные); + КонецЕсли; + ЗаписьДанных.ЗаписатьСтроку(РазделительСтрок); + КонецЦикла; + ЗаписьДанных.ЗаписатьСтроку("--" + Разделитель + "--" + РазделительСтрок); + ЗаписьДанных.Закрыть(); + + Возврат СтрШаблон("multipart/form-data; boundary=%1", Разделитель); + +КонецФункции + +Функция СоздатьПолеФормы(ИсходныеПараметры) + + Поле = Новый Структура("Имя,ИмяФайла,Данные,Тип,Заголовки"); + Поле.Имя = ИсходныеПараметры.Имя; + Поле.Данные = ИсходныеПараметры.Данные; + + Поле.Тип = ЗначениеПоКлючу(ИсходныеПараметры, "Тип"); + Поле.Заголовки = ЗначениеПоКлючу(ИсходныеПараметры, "Заголовки", Новый Соответствие); + Поле.ИмяФайла = ЗначениеПоКлючу(ИсходныеПараметры, "ИмяФайла"); + + Ключ = "Content-Disposition"; + Если ЗначениеЗаголовка("content-disposition", Поле.Заголовки, Ключ) = Ложь Тогда + Поле.Заголовки.Вставить("Content-Disposition", "form-data"); + КонецЕсли; + + Части = Новый Массив; + Части.Добавить(Поле.Заголовки[Ключ]); + Части.Добавить(СтрШаблон("name=""%1""", Поле.Имя)); + Если ЗначениеЗаполнено(Поле.ИмяФайла) Тогда + Части.Добавить(СтрШаблон("filename=""%1""", Поле.ИмяФайла)); + КонецЕсли; + + Поле.Заголовки[Ключ] = СтрСоединить(Части, "; "); + Поле.Заголовки["Content-Type"] = Поле.Тип; + + Возврат Поле; + +КонецФункции + +Функция ЗаполнитьПараметрыЗапроса(Путь) + + ПараметрыЗапроса = Новый Соответствие; + + Запрос = ""; + РазбитьСтрокуПоРазделителю(Запрос, Путь, "?", Истина); + Для Каждого СтрокаКлючРавноПараметр Из СтрРазделить(Запрос, "&", Ложь) Цикл + СтрокаКлючРавноПараметр = РаскодироватьСтроку( + СтрокаКлючРавноПараметр, СпособКодированияСтроки.URLВКодировкеURL); + + ПозицияРавно = СтрНайти(СтрокаКлючРавноПараметр, "="); + Если ПозицияРавно = 0 Тогда + Ключ = СтрокаКлючРавноПараметр; + Значение = Неопределено; + Иначе + Ключ = Лев(СтрокаКлючРавноПараметр, ПозицияРавно - 1); + Значение = Сред(СтрокаКлючРавноПараметр, ПозицияРавно + 1); + КонецЕсли; + + Если ПараметрыЗапроса.Получить(Ключ) <> Неопределено Тогда + Если ТипЗнч(ПараметрыЗапроса[Ключ]) = Тип("Массив") Тогда + ПараметрыЗапроса[Ключ].Добавить(Значение); + Иначе + Значения = Новый Массив; + Значения.Добавить(ПараметрыЗапроса[Ключ]); + Значения.Добавить(Значение); + ПараметрыЗапроса[Ключ] = Значения; + КонецЕсли; + Иначе + ПараметрыЗапроса.Вставить(Ключ, Значение); + КонецЕсли; + + КонецЦикла; + + Возврат ПараметрыЗапроса; + +КонецФункции + +Функция КодироватьПараметрыЗапроса(ПараметрыЗапроса) + + ЧастиПараметрыЗапроса = Новый Массив; + Для Каждого Параметр Из ПараметрыЗапроса Цикл + Если ТипЗнч(Параметр.Значение) = Тип("Массив") Тогда + Значения = Параметр.Значение; + Иначе + Значения = Новый Массив; + Значения.Добавить(Параметр.Значение); + КонецЕсли; + + Если Параметр.Значение = Неопределено Тогда + ЧастиПараметрыЗапроса.Добавить(Параметр.Ключ); + Иначе + Для Каждого Значение Из Значения Цикл + ЗначениеПараметра = КодироватьСтроку(Значение, СпособКодированияСтроки.КодировкаURL); + ЧастиПараметрыЗапроса.Добавить(СтрШаблон("%1=%2", Параметр.Ключ, ЗначениеПараметра)); + КонецЦикла; + КонецЕсли; + КонецЦикла; + + Возврат СтрСоединить(ЧастиПараметрыЗапроса, "&"); + +КонецФункции + +Процедура ПереопределитьМетод(ПодготовленныйЗапрос, Ответ) + + КодыСостоянияHTTP = КодыСостоянияHTTP(); + + Метод = ПодготовленныйЗапрос.Метод; + + // http://tools.ietf.org/html/rfc7231#section-6.4.4 + Если Ответ.КодСостояния = КодыСостоянияHTTP.СмотретьДругое_303 И Метод <> "HEAD" Тогда + Метод = "GET"; + КонецЕсли; + + // Поведение браузеров + Если Ответ.КодСостояния = КодыСостоянияHTTP.ПеремещеноВременно_302 И Метод <> "HEAD" Тогда + Метод = "GET"; + КонецЕсли; + + ПодготовленныйЗапрос.Метод = Метод; + +КонецПроцедуры + +Функция ОтправитьЗапрос(Сессия, ПодготовленныйЗапрос, Настройки) + + Начало = ТекущаяУниверсальнаяДатаВМиллисекундах(); + МиллисекундВСекунде = 1000; + + Повтор = 0; + Длительность = 0; + Ошибки = Новый Массив; + + Пока Истина Цикл + Попытка + Ответ = ОтправитьHTTPЗапрос(Сессия, ПодготовленныйЗапрос, Настройки); + ОшибкаВыполненияЗапроса = Неопределено; + Исключение + Ответ = Неопределено; + ОшибкаВыполненияЗапроса = ИнформацияОбОшибке(); + + ТекстОшибки = СтрШаблон( + НСтр("ru = 'HTTP %1 %2 + |Network error: + |%3'"), + ПодготовленныйЗапрос.Метод, + ПодготовленныйЗапрос.URL, + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) + ); + Ошибки.Добавить(ТекстОшибки); + КонецПопытки; + + Повтор = Повтор + 1; + Длительность = (ТекущаяУниверсальнаяДатаВМиллисекундах() - Начало) / МиллисекундВСекунде; + + Если Не НеобходимоПовторитьЗапрос(Ответ, Настройки, ОшибкаВыполненияЗапроса) Тогда + Прервать; + КонецЕсли; + + Если Повтор > Настройки.МаксимальноеКоличествоПовторов + ИЛИ Длительность > Настройки.МаксимальноеВремяПовторов Тогда + Прервать; + КонецЕсли; + + Если ОшибкаВыполненияЗапроса <> Неопределено + ИЛИ НЕ ЭтоКодСостоянияПриКоторомНужноУчитыватьЗаголовокRetryAfter(Ответ.КодСостояния) Тогда + ЗаголовокRetryAfter = Ложь; + Иначе + ЗаголовокRetryAfter = ЗначениеЗаголовка("retry-after", Ответ.Заголовки); + КонецЕсли; + + ДлительностьПриостановки = РассчитатьДлительностьПриостановки( + Повтор, + Настройки.КоэффициентЭкспоненциальнойЗадержки, + ЗаголовокRetryAfter, + Настройки.МаксимальноеВремяПовторов - Длительность); + Приостановить(ДлительностьПриостановки); + КонецЦикла; + + Если ОшибкаВыполненияЗапроса <> Неопределено Тогда + ВызватьИсключение(ПодробноеПредставлениеОшибки(ОшибкаВыполненияЗапроса)); + КонецЕсли; + + ЗаголовокContentType = ЗначениеЗаголовка("content-type", Ответ.Заголовки); + Если ЗаголовокContentType = Ложь Тогда + ЗаголовокContentType = ""; + КонецЕсли; + + ПодготовленныйОтвет = НовыйОтвет(); + ПодготовленныйОтвет.Метод = ПодготовленныйЗапрос.Метод; + ПодготовленныйОтвет.URL = ПодготовленныйЗапрос.URL; + ПодготовленныйОтвет.КодСостояния = Ответ.КодСостояния; + ПодготовленныйОтвет.Заголовки = Ответ.Заголовки; + ПодготовленныйОтвет.Тело = Ответ.ПолучитьТелоКакДвоичныеДанные(); + ПодготовленныйОтвет.Кодировка = КодировкаИзЗаголовка(ЗаголовокContentType); + ПодготовленныйОтвет.ВремяВыполнения = ТекущаяУниверсальнаяДатаВМиллисекундах() - Начало; + ПодготовленныйОтвет.ЭтоПостоянныйРедирект = ЭтоПостоянныйРедирект(Ответ.КодСостояния, Ответ.Заголовки); + ПодготовленныйОтвет.ЭтоРедирект = ЭтоРедирект(Ответ.КодСостояния, Ответ.Заголовки); + ПодготовленныйОтвет.Cookies = ИзвлечьCookies(Ответ.Заголовки, ПодготовленныйЗапрос.URL); + + Сессия.Cookies = ОбъединитьCookies(Сессия.Cookies, ПодготовленныйОтвет.Cookies); + + Возврат ПодготовленныйОтвет; + +КонецФункции + +Функция ОтправитьHTTPЗапрос(Сессия, ПодготовленныйЗапрос, Настройки) + + СтруктураURL = РазобратьURL(ПодготовленныйЗапрос.URL); + Соединение = Соединение(СтруктураURL, ПодготовленныйЗапрос.Аутентификация, Настройки, Сессия); + Ответ = Соединение.ВызватьHTTPМетод(ПодготовленныйЗапрос.Метод, ПодготовленныйЗапрос.HTTPЗапрос); + + Для Каждого Обработчик Из ПодготовленныйЗапрос.СобытияНаОтвет Цикл + Если Обработчик = "ОбработкаОтветаСКодом401" Тогда + ОбработкаОтветаСКодом401(Сессия, ПодготовленныйЗапрос, Настройки, Ответ); + КонецЕсли; + КонецЦикла; + + Возврат Ответ; + +КонецФункции + +Функция НеобходимоПовторитьЗапрос(Ответ, Настройки, ОшибкаВыполненияЗапроса) + + Если Настройки.МаксимальноеКоличествоПовторов < 1 Тогда + ПовторитьЗапрос = Ложь; + ИначеЕсли ОшибкаВыполненияЗапроса <> Неопределено ИЛИ ПовторятьПриКодеСостояния(Ответ.КодСостояния, Настройки) Тогда + ПовторитьЗапрос = Истина; + Иначе + ЗаголовокRetryAfter = ЗначениеЗаголовка("retry-after", Ответ.Заголовки); + ПовторитьЗапрос = ЗаголовокRetryAfter <> Ложь + И ЭтоКодСостоянияПриКоторомНужноУчитыватьЗаголовокRetryAfter(Ответ.КодСостояния); + КонецЕсли; + + Возврат ПовторитьЗапрос; + +КонецФункции + +Функция ПовторятьПриКодеСостояния(КодСостояния, Настройки) + + ПовторПриЛюбомКодеСостоянияБольшеИлиРавным500 = Настройки.ПовторятьДляКодовСостояний = Неопределено + И КодСостояния >= КодыСостоянияHTTP().ВнутренняяОшибкаСервера_500; + КодСостоянияСоответствуетКодуСостоянияПовтора = ТипЗнч(Настройки.ПовторятьДляКодовСостояний) = Тип("Массив") + И Настройки.ПовторятьДляКодовСостояний.Найти(КодСостояния) <> Неопределено; + Возврат ПовторПриЛюбомКодеСостоянияБольшеИлиРавным500 ИЛИ КодСостоянияСоответствуетКодуСостоянияПовтора; + +КонецФункции + +Функция ЭтоПостоянныйРедирект(КодСостояния, Заголовки) + + КодыСостоянияHTTP = КодыСостоянияHTTP(); + + Возврат ЕстьЗаголовокLocation(Заголовки) + И (КодСостояния = КодыСостоянияHTTP.ПеремещеноНавсегда_301 + ИЛИ КодСостояния = КодыСостоянияHTTP.ПостоянноеПеренаправление_308); + +КонецФункции + +Функция ЭтоРедирект(КодСостояния, Заголовки) + + КодыСостоянияHTTP = КодыСостоянияHTTP(); + + СостоянияРедиректа = Новый Массив; + СостоянияРедиректа.Добавить(КодыСостоянияHTTP.ПеремещеноНавсегда_301); + СостоянияРедиректа.Добавить(КодыСостоянияHTTP.ПеремещеноВременно_302); + СостоянияРедиректа.Добавить(КодыСостоянияHTTP.СмотретьДругое_303); + СостоянияРедиректа.Добавить(КодыСостоянияHTTP.ВременноеПеренаправление_307); + СостоянияРедиректа.Добавить(КодыСостоянияHTTP.ПостоянноеПеренаправление_308); + + Возврат ЕстьЗаголовокLocation(Заголовки) И СостоянияРедиректа.Найти(КодСостояния) <> Неопределено; + +КонецФункции + +Процедура УпаковатьЗапрос(Запрос) + + Заголовок = ЗначениеЗаголовка("content-encoding", Запрос.Заголовки); + Если Заголовок <> Ложь Тогда + Если НРег(Заголовок) = "gzip" Тогда + Запрос.УстановитьТелоИзДвоичныхДанных(ЗаписатьGZip(Запрос.ПолучитьТелоКакДвоичныеДанные())); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +Функция РаспаковатьОтвет(Ответ) + + Заголовок = ЗначениеЗаголовка("content-encoding", Ответ.Заголовки); + Если Заголовок <> Ложь Тогда + Если НРег(Заголовок) = "gzip" Тогда + Возврат ПрочитатьGZip(Ответ.Тело); + КонецЕсли; + КонецЕсли; + + Возврат Ответ.Тело; + +КонецФункции + +#КонецОбласти + +#Область ОбработчикиСобытий + +Процедура ОбработкаОтветаСКодом401(Сессия, ПодготовленныйЗапрос, Настройки, Ответ) + + Если ЭтоРедирект(Ответ.КодСостояния, Ответ.Заголовки) Тогда + Возврат; + КонецЕсли; + + КодыСостоянияHTTP = КодыСостоянияHTTP(); + Если Ответ.КодСостояния < КодыСостоянияHTTP.НеверныйЗапрос_400 + ИЛИ Ответ.КодСостояния >= КодыСостоянияHTTP.ВнутренняяОшибкаСервера_500 Тогда + Возврат; + КонецЕсли; + + Значение = ЗначениеЗаголовка("www-authenticate", Ответ.Заголовки); + Если Значение <> Ложь И СтрНайти(НРег(Значение), "digest") Тогда + Позиция = СтрНайти(НРег(Значение), "digest"); + Значение = Сред(Значение, Позиция + СтрДлина("digest") + 1); + Значение = СтрЗаменить(Значение, """", ""); + Значение = СтрЗаменить(Значение, Символы.ПС, ""); + + ПараметрыDigest = Новый Структура("algorithm,realm,nonce,qop,opaque"); + Для Каждого Часть Из РазбитьСтрокуПоСтроке(Значение, ", ") Цикл + КлючЗначение = СтрРазделить(Часть, "="); + ПараметрыDigest.Вставить(КлючЗначение[0], КлючЗначение[1]); + КонецЦикла; + + Сессия.СлужебныеДанные.ПараметрыDigest = ПараметрыDigest; + + ПодготовленныйЗапрос.Заголовки.Вставить("Authorization", ПодготовитьЗаголовокDigest(Сессия, ПодготовленныйЗапрос)); + ПодготовленныйЗапрос.HTTPЗапрос.Заголовки = ПодготовленныйЗапрос.Заголовки; + + Ответ = ОтправитьHTTPЗапрос(Сессия, ПодготовленныйЗапрос, Настройки); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область URL + +Функция ПодготовитьURL(Знач URL, ПараметрыЗапроса = Неопределено) + + URL = СокрЛ(URL); + + СтруктураURL = РазобратьURL(URL); + + ПодготовленныйURL = СтруктураURL.Схема + "://"; + Если ЗначениеЗаполнено(СтруктураURL.Аутентификация.Пользователь) Тогда + ПодготовленныйURL = ПодготовленныйURL + + СтруктураURL.Аутентификация.Пользователь + ":" + + СтруктураURL.Аутентификация.Пароль + "@"; + КонецЕсли; + ПодготовленныйURL = ПодготовленныйURL + СтруктураURL.Сервер; + Если ЗначениеЗаполнено(СтруктураURL.Порт) Тогда + ПодготовленныйURL = ПодготовленныйURL + ":" + Формат(СтруктураURL.Порт, "ЧРГ=; ЧГ="); + КонецЕсли; + + ПодготовленныйURL = ПодготовленныйURL + СобратьАдресРесурса(СтруктураURL, ПараметрыЗапроса); + + Возврат ПодготовленныйURL; + +КонецФункции + +Функция СобратьАдресРесурса(СтруктураURL, ПараметрыЗапроса) + + АдресРесурса = СтруктураURL.Путь; + + ОбъединенныеПараметрыЗапроса = Объединить(Скопировать(ПараметрыЗапроса), СтруктураURL.ПараметрыЗапроса); + Если ЗначениеЗаполнено(ОбъединенныеПараметрыЗапроса) Тогда + АдресРесурса = АдресРесурса + "?" + КодироватьПараметрыЗапроса(ОбъединенныеПараметрыЗапроса); + КонецЕсли; + Если ЗначениеЗаполнено(СтруктураURL.Фрагмент) Тогда + АдресРесурса = АдресРесурса + "#" + СтруктураURL.Фрагмент; + КонецЕсли; + + Возврат АдресРесурса; + +КонецФункции + +Функция СформироватьНовыйURLПриПеренаправлении(Ответ) + + НовыйURL = ЗначениеЗаголовка("location", Ответ.Заголовки); + НовыйURL = РаскодироватьСтроку(НовыйURL, СпособКодированияСтроки.URLВКодировкеURL); + + // Редирект без схемы + Если СтрНачинаетсяС(НовыйURL, "//") Тогда + СтруктураURL = РазобратьURL(Ответ.URL); + НовыйURL = СтруктураURL.Схема + ":" + НовыйURL; + КонецЕсли; + + СтруктураURL = РазобратьURL(НовыйURL); + Если РазбитьСтрокуПоСтроке(НовыйURL, "://").Количество() < 2 Тогда + СтруктураURLОтвета = РазобратьURL(Ответ.URL); + БазовыйURL = СтрШаблон("%1://%2", СтруктураURLОтвета.Схема, СтруктураURLОтвета.Сервер); + Если ЗначениеЗаполнено(СтруктураURLОтвета.Порт) Тогда + БазовыйURL = БазовыйURL + ":" + Формат(СтруктураURLОтвета.Порт, "ЧРГ=; ЧГ="); + КонецЕсли; + Если СтрНачинаетсяС(НовыйURL, "/") Тогда + НовыйURL = БазовыйURL + НовыйURL; + Иначе + ИндексПоследнегоСлеша = СтрНайти(СтруктураURLОтвета.Путь, "/", НаправлениеПоиска.СКонца); + РодительскаяДиректория = Лев(СтруктураURLОтвета.Путь, ИндексПоследнегоСлеша); + НовыйURL = БазовыйURL + РодительскаяДиректория + НовыйURL; + КонецЕсли; + КонецЕсли; + + Возврат НовыйURL; + +КонецФункции + +Функция ЭтоСтандартныйПорт(СтруктураURL) + + СтандартныйПортHTTP = 80; + СтандартныйПортHTTPS = 443; + + Возврат (СтруктураURL.Схема = "http" И СтруктураURL.Порт = СтандартныйПортHTTP) + ИЛИ (СтруктураURL.Схема = "https" И СтруктураURL.Порт = СтандартныйПортHTTPS); + +КонецФункции + +#КонецОбласти + +#Область РаботаССоединением + +Функция НастройкиПодключения(Метод, URL, ДополнительныеПараметры) + + РазрешитьПеренаправление = + ЗначениеПоКлючу(ДополнительныеПараметры, "РазрешитьПеренаправление", ВРег(Метод) <> "HEAD"); + ПроверятьSSL = ЗначениеПоКлючу(ДополнительныеПараметры, "ПроверятьSSL", Истина); + КлиентскийСертификатSSL = ЗначениеПоКлючу(ДополнительныеПараметры, "КлиентскийСертификатSSL"); + Прокси = ЗначениеПоКлючу(ДополнительныеПараметры, "Прокси", ПроксиПоУмолчанию(URL)); + МаксимальноеКоличествоПовторов = ЗначениеПоКлючу(ДополнительныеПараметры, "МаксимальноеКоличествоПовторов", 0); + ПовторятьДляКодовСостояний = + ЗначениеПоКлючу(ДополнительныеПараметры, "ПовторятьДляКодовСостояний", Неопределено); + КоэффициентЭкспоненциальнойЗадержки = + ЗначениеПоКлючу(ДополнительныеПараметры, "КоэффициентЭкспоненциальнойЗадержки", 1); + МаксимальноеВремяПовторов = ЗначениеПоКлючу(ДополнительныеПараметры, "МаксимальноеВремяПовторов", 600); + + Настройки = Новый Структура; + Настройки.Вставить("Таймаут", Таймаут(ДополнительныеПараметры)); + Настройки.Вставить("РазрешитьПеренаправление", РазрешитьПеренаправление); + Настройки.Вставить("ПроверятьSSL", ПроверятьSSL); + Настройки.Вставить("КлиентскийСертификатSSL", КлиентскийСертификатSSL); + Настройки.Вставить("Прокси", Прокси); + Настройки.Вставить("МаксимальноеКоличествоПовторов", МаксимальноеКоличествоПовторов); + Настройки.Вставить("ПовторятьДляКодовСостояний", ПовторятьДляКодовСостояний); + Настройки.Вставить("КоэффициентЭкспоненциальнойЗадержки", КоэффициентЭкспоненциальнойЗадержки); + Настройки.Вставить("МаксимальноеВремяПовторов", МаксимальноеВремяПовторов); + + Возврат Настройки; + +КонецФункции + +Функция Соединение(ПараметрыСоединения, Аутентификация, ДополнительныеПараметры, Сессия) + + Если Не ЗначениеЗаполнено(ПараметрыСоединения.Порт) Тогда + Если ПараметрыСоединения.Схема = "https" Тогда + ПараметрыСоединения.Порт = 443; + Иначе + ПараметрыСоединения.Порт = 80; + КонецЕсли; + КонецЕсли; + + ЗащищенноеСоединение = Неопределено; + Если ПараметрыСоединения.Схема = "https" Тогда + ЗащищенноеСоединение = ОбъектЗащищенногоСоединения(ДополнительныеПараметры); + КонецЕсли; + + Пользователь = ""; + Пароль = ""; + Если ЗначениеЗаполнено(Аутентификация) Тогда + Если Аутентификация.Свойство("Пользователь") И Аутентификация.Свойство("Пароль") Тогда + Пользователь = Аутентификация.Пользователь; + Пароль = Аутентификация.Пароль; + КонецЕсли; + КонецЕсли; + + ИспользоватьАутентификациюОС = Аутентификация.Свойство("ИспользоватьАутентификациюОС") + И Аутентификация.ИспользоватьАутентификациюОС = Истина; + + ПараметрыДляРасчетаИдентификатора = Новый Массив; + ПараметрыДляРасчетаИдентификатора.Добавить(ПараметрыСоединения.Сервер); + ПараметрыДляРасчетаИдентификатора.Добавить(ПараметрыСоединения.Порт); + ПараметрыДляРасчетаИдентификатора.Добавить(Пользователь); + ПараметрыДляРасчетаИдентификатора.Добавить(Пароль); + ПараметрыДляРасчетаИдентификатора.Добавить(ДополнительныеПараметры.Таймаут); + ПараметрыДляРасчетаИдентификатора.Добавить(ИспользоватьАутентификациюОС); + ПараметрыДляРасчетаИдентификатора.Добавить(ЗащищенноеСоединение); + ПараметрыДляРасчетаИдентификатора.Добавить(ДополнительныеПараметры.Прокси); + + Если Не Сессия.Свойство("СлужебныеДанные") ИЛИ ТипЗнч(Сессия.СлужебныеДанные) <> Тип("Структура") Тогда + Сессия.Вставить("СлужебныеДанные", Новый Структура); + КонецЕсли; + Если Не Сессия.СлужебныеДанные.Свойство("ПулСоединений") Тогда + Сессия.СлужебныеДанные.Вставить("ПулСоединений", Новый Соответствие); + КонецЕсли; + ПулСоединений = Сессия.СлужебныеДанные.ПулСоединений; + + ИдентификаторСоединения = ИдентификаторСоединения(ПараметрыДляРасчетаИдентификатора); + + Если ПулСоединений.Получить(ИдентификаторСоединения) = Неопределено Тогда + НовоеСоединение = Новый HTTPСоединение( + ПараметрыСоединения.Сервер, + ПараметрыСоединения.Порт, + Пользователь, Пароль, + ДополнительныеПараметры.Прокси, + ДополнительныеПараметры.Таймаут, + ЗащищенноеСоединение, + ИспользоватьАутентификациюОС); + ПулСоединений.Вставить(ИдентификаторСоединения, НовоеСоединение); + КонецЕсли; + + Возврат ПулСоединений[ИдентификаторСоединения]; + +КонецФункции + +Функция ИдентификаторСоединения(ПараметрыСоединения) + + ПараметрыДляРасчетаИдентификатора = Новый Массив; + + Для Каждого Элемент Из ПараметрыСоединения Цикл + ТипЭлемента = ТипЗнч(Элемент); + Если ТипЭлемента = Тип("ИнтернетПрокси") Тогда + ПараметрыДляРасчетаИдентификатора.Добавить(СтрСоединить(Элемент.НеИспользоватьПроксиДляАдресов, "")); + ПараметрыДляРасчетаИдентификатора.Добавить(XMLСтрока(Элемент.НеИспользоватьПроксиДляЛокальныхАдресов)); + ПараметрыДляРасчетаИдентификатора.Добавить(Элемент.Пользователь); + ПараметрыДляРасчетаИдентификатора.Добавить(Элемент.Пароль); + ИначеЕсли ТипЭлемента = Тип("ЗащищенноеСоединениеOpenSSL") Тогда + // Для упрощения будет считать, что сертификаты в рамках сессии не меняются + Если Элемент.СертификатКлиента = Неопределено Тогда + ПараметрыДляРасчетаИдентификатора.Добавить(""); + Иначе + ПараметрыДляРасчетаИдентификатора.Добавить(Строка(ТипЗнч(Элемент.СертификатКлиента))); + КонецЕсли; + Если Элемент.СертификатыУдостоверяющихЦентров = Неопределено Тогда + ПараметрыДляРасчетаИдентификатора.Добавить(""); + Иначе + ПараметрыДляРасчетаИдентификатора.Добавить(Строка(ТипЗнч(Элемент.СертификатыУдостоверяющихЦентров))); + КонецЕсли; + Иначе + ПараметрыДляРасчетаИдентификатора.Добавить(XMLСтрока(Элемент)); + КонецЕсли; + КонецЦикла; + + Возврат ХешированиеДанных(ХешФункция.MD5, СтрСоединить(ПараметрыДляРасчетаИдентификатора, "")); + +КонецФункции + +Функция ОбъектЗащищенногоСоединения(ДополнительныеПараметры) + + Если ДополнительныеПараметры.ПроверятьSSL = Ложь Тогда + СертификатыУЦ = Неопределено; + ИначеЕсли ТипЗнч(ДополнительныеПараметры.ПроверятьSSL) = Тип("СертификатыУдостоверяющихЦентровФайл") Тогда + СертификатыУЦ = ДополнительныеПараметры.ПроверятьSSL; + Иначе + СертификатыУЦ = Новый СертификатыУдостоверяющихЦентровОС; + КонецЕсли; + КлиентскийСертификат = Неопределено; + Если ТипЗнч(ДополнительныеПараметры.КлиентскийСертификатSSL) = Тип("СертификатКлиентаФайл") + ИЛИ ТипЗнч(ДополнительныеПараметры.КлиентскийСертификатSSL) = Тип("СертификатКлиентаWindows") Тогда + КлиентскийСертификат = ДополнительныеПараметры.КлиентскийСертификатSSL; + КонецЕсли; + + Возврат Новый ЗащищенноеСоединениеOpenSSL(КлиентскийСертификат, СертификатыУЦ); + +КонецФункции + +Функция Таймаут(ДополнительныеПараметры) + + Если ДополнительныеПараметры.Свойство("Таймаут") И ДополнительныеПараметры.Таймаут <> Неопределено Тогда + Таймаут = ДополнительныеПараметры.Таймаут; + Иначе + Таймаут = СтандартныйТаймаут(); + КонецЕсли; + + Возврат Таймаут; + +КонецФункции + +Функция ПроксиПоУмолчанию(URL) + + ПроксиПоУмолчанию = Новый ИнтернетПрокси; + // BSLLS:ExecuteExternalCodeInCommonModule-off + ИмяОМПолученияФайловБСП = "ПолучениеФайловИзИнтернета"; + Если Метаданные.ОбщиеМодули.Найти(ИмяОМПолученияФайловБСП) <> Неопределено Тогда + СтруктураURL = РазобратьURL(URL); + Модуль = Вычислить(ИмяОМПолученияФайловБСП); + ПроксиПоУмолчанию = Модуль.ПолучитьПрокси(СтруктураURL.Схема); + КонецЕсли; + // BSLLS:ExecuteExternalCodeInCommonModule-on + + Возврат ПроксиПоУмолчанию; + +КонецФункции + +Функция ТекущаяСессия(Сессия) + + Если Сессия = Неопределено Тогда + Сессия = СоздатьСессию(); + КонецЕсли; + + Возврат Сессия; + +КонецФункции + +#КонецОбласти + +#Область Заголовки + +Функция ЗаголовкиВСтроку(Заголовки) + + РазделительСтрок = Символы.ВК + Символы.ПС; + Строки = Новый Массив; + + СортированныеЗаголовки = "Content-Disposition,Content-Type,Content-Location"; + Для Каждого Ключ Из СтрРазделить(СортированныеЗаголовки, ",") Цикл + Значение = ЗначениеЗаголовка(Ключ, Заголовки); + Если Значение <> Ложь И ЗначениеЗаполнено(Значение) Тогда + Строки.Добавить(СтрШаблон("%1: %2", Ключ, Значение)); + КонецЕсли; + КонецЦикла; + + Ключи = СтрРазделить(ВРег(СортированныеЗаголовки), ","); + Для Каждого Заголовок Из Заголовки Цикл + Если Ключи.Найти(ВРег(Заголовок.Ключ)) = Неопределено Тогда + Строки.Добавить(СтрШаблон("%1: %2", Заголовок.Ключ, Заголовок.Значение)); + КонецЕсли; + КонецЦикла; + Строки.Добавить(РазделительСтрок); + + Возврат СтрСоединить(Строки, РазделительСтрок); + +КонецФункции + +Процедура УдалитьЗаголовки(Заголовки, СписокЗаголовковСтрокой) + + ЗаголовкиДляУдаления = Новый Массив; + СписокЗаголовков = СтрРазделить(СписокЗаголовковСтрокой, ",", Ложь); + Для Каждого Заголовок Из Заголовки Цикл + Если СписокЗаголовков.Найти(НРег(Заголовок.Ключ)) <> Неопределено Тогда + ЗаголовкиДляУдаления.Добавить(Заголовок.Ключ); + КонецЕсли; + КонецЦикла; + Для Каждого ЗаголовокДляУдаления Из ЗаголовкиДляУдаления Цикл + Заголовки.Удалить(ЗаголовокДляУдаления); + КонецЦикла; + +КонецПроцедуры + +Функция ЕстьЗаголовокLocation(Заголовки) + + Возврат ЗначениеЗаголовка("location", Заголовки) <> Ложь; + +КонецФункции + +Функция КодировкаИзЗаголовка(Знач Заголовок) + + Кодировка = Неопределено; + + Заголовок = НРег(СокрЛП(Заголовок)); + ИндексРазделителя = СтрНайти(Заголовок, ";"); + Если ИндексРазделителя Тогда + ТипСодержимого = СокрЛП(Лев(Заголовок, ИндексРазделителя - 1)); + КлючКодировки = "charset="; + ИндексКодировки = СтрНайти(Заголовок, КлючКодировки); + Если ИндексКодировки Тогда + ИндексРазделителя = СтрНайти(Заголовок, ";", НаправлениеПоиска.СНачала, ИндексКодировки); + НачальнаяПозиция = ИндексКодировки + СтрДлина(КлючКодировки); + Если ИндексРазделителя Тогда + ДлинаКодировки = ИндексРазделителя - НачальнаяПозиция; + Иначе + ДлинаКодировки = СтрДлина(Заголовок); + КонецЕсли; + Кодировка = Сред(Заголовок, НачальнаяПозиция, ДлинаКодировки); + Кодировка = СтрЗаменить(Кодировка, """", ""); + Кодировка = СтрЗаменить(Кодировка, "'", ""); + КонецЕсли; + Иначе + ТипСодержимого = Заголовок; + КонецЕсли; + + Если Кодировка = Неопределено И СтрНайти(ТипСодержимого, "text") Тогда + Кодировка = "iso-8859-1"; + КонецЕсли; + + Возврат Кодировка; + +КонецФункции + +Функция ЗначениеЗаголовка(Заголовок, ВсеЗаголовки, Ключ = Неопределено) + + Для Каждого ОчереднойЗаголовок Из ВсеЗаголовки Цикл + Если НРег(ОчереднойЗаголовок.Ключ) = НРег(Заголовок) Тогда + Ключ = ОчереднойЗаголовок.Ключ; + Возврат ОчереднойЗаголовок.Значение; + КонецЕсли; + КонецЦикла; + + Возврат Ложь; + +КонецФункции + +Функция СформироватьЗначениеЗаголовкаHost(СтруктураURL) + + Host = СтруктураURL.Сервер; + Если ЗначениеЗаполнено(СтруктураURL.Порт) И НЕ ЭтоСтандартныйПорт(СтруктураURL) Тогда + Host = Host + ":" + Формат(СтруктураURL.Порт, "ЧРГ=; ЧГ="); + КонецЕсли; + + Возврат Host; + +КонецФункции + +Функция ПодготовитьЗаголовокDigest(Сессия, ПодготовленныйЗапрос) + + ПараметрыDigest = Сессия.СлужебныеДанные.ПараметрыDigest; + + Алгоритм = ОпределитьХешФункцию(ПараметрыDigest.algorithm); + АлгоритмСтрокой = ВРег(ПараметрыDigest.algorithm); + Если Алгоритм = Неопределено Тогда + Возврат Неопределено; + КонецЕсли; + + СтруктураURL = РазобратьURL(ПодготовленныйЗапрос.URL); + Путь = СтруктураURL.Путь; + Если ЗначениеЗаполнено(СтруктураURL.ПараметрыЗапроса) Тогда + Путь = Путь + "?" + КодироватьПараметрыЗапроса(СтруктураURL.ПараметрыЗапроса); + КонецЕсли; + + A1 = СтрШаблон("%1:%2:%3", + ПодготовленныйЗапрос.Аутентификация.Пользователь, + ПараметрыDigest.realm, + ПодготовленныйЗапрос.Аутентификация.Пароль); + A2 = СтрШаблон("%1:%2", ПодготовленныйЗапрос.Метод, Путь); + + HA1 = ХешированиеДанных(Алгоритм, A1); + HA2 = ХешированиеДанных(Алгоритм, A2); + + Если Не ПараметрыDigest.Свойство("last_nonce") Тогда + ПараметрыDigest.Вставить("last_nonce"); + КонецЕсли; + + Если ПараметрыDigest.nonce = ПараметрыDigest.last_nonce Тогда + ПараметрыDigest.nonce_count = ПараметрыDigest.nonce_count + 1; + Иначе + ПараметрыDigest.Вставить("nonce_count", 1); + КонецЕсли; + + ЗначениеNC = Формат(ПараметрыDigest.nonce_count, "ЧЦ=8; ЧВН=; ЧГ="); + ЗначениеNonce = Лев(СтрЗаменить(НРег(Новый УникальныйИдентификатор), "-", ""), 16); + + Если АлгоритмСтрокой = "MD5-SESS" Тогда + HA1 = ХешированиеДанных(Алгоритм, СтрШаблон("%1:%2:%3", HA1, ПараметрыDigest.nonce, ЗначениеNonce)); + КонецЕсли; + + Если Не ЗначениеЗаполнено(ПараметрыDigest.qop) Тогда + ЗначениеResponse = ХешированиеДанных(Алгоритм, СтрШаблон("%1:%2:%3", HA1, ПараметрыDigest.nonce, HA2)); + ИначеЕсли ПараметрыDigest.qop = "auth" + ИЛИ СтрРазделить(ПараметрыDigest.qop, ",", Ложь).Найти("auth") <> Неопределено Тогда + ЗначениеNonceBit = СтрШаблон("%1:%2:%3:%4:%5", ПараметрыDigest.nonce, ЗначениеNC, ЗначениеNonce, "auth", HA2); + ЗначениеResponse = ХешированиеДанных(Алгоритм, СтрШаблон("%1:%2", HA1, ЗначениеNonceBit)); + Иначе + // INFO: auth-int не реализовано + Возврат Неопределено; + КонецЕсли; + + ПараметрыDigest.last_nonce = ПараметрыDigest.nonce; + + База = СтрШаблон("username=""%1"", realm=""%2"", nonce=""%3"", uri=""%4"", response=""%5""", + ПодготовленныйЗапрос.Аутентификация.Пользователь, + ПараметрыDigest.realm, + ПараметрыDigest.nonce, + Путь, + ЗначениеResponse); + Строки = Новый Массив; + Строки.Добавить(База); + + Если ЗначениеЗаполнено(ПараметрыDigest.opaque) Тогда + Строки.Добавить(СтрШаблон(", opaque=""%1""", ПараметрыDigest.opaque)); + КонецЕсли; + Если ЗначениеЗаполнено(ПараметрыDigest.algorithm) Тогда + Строки.Добавить(СтрШаблон(", algorithm=""%1""", ПараметрыDigest.algorithm)); + КонецЕсли; + Если ЗначениеЗаполнено(ПараметрыDigest.qop) Тогда + Строки.Добавить(СтрШаблон(", qop=""auth"", nc=%1, cnonce=""%2""", ЗначениеNC, ЗначениеNonce)); + КонецЕсли; + + Возврат СтрШаблон("Digest %1", СтрСоединить(Строки, "")); + +КонецФункции + +#КонецОбласти + +#Область Cookies + +Процедура ПодготовитьCookies(ПодготовленныйЗапрос) + + ЗаголовокCookie = ПодготовитьЗаголовокCookie(ПодготовленныйЗапрос); + Если ЗначениеЗаполнено(ЗаголовокCookie) Тогда + ПодготовленныйЗапрос.Заголовки["Cookie"] = ЗаголовокCookie; + КонецЕсли; + +КонецПроцедуры + +Функция ПодготовитьЗаголовокCookie(ПодготовленныйЗапрос) + + СтруктураURL = РазобратьURL(ПодготовленныйЗапрос.URL); + + Cookies = Новый Массив; + Для Каждого Cookie Из ОтобратьCookiesДляЗапроса(СтруктураURL, ПодготовленныйЗапрос.Cookies) Цикл + Cookies.Добавить(СтрШаблон("%1=%2", Cookie.Наименование, Cookie.Значение)); + КонецЦикла; + + Возврат СтрСоединить(Cookies, "; "); + +КонецФункции + +Функция ОбъединитьCookies(ГлавныйИсточник, ДополнительныйИсточник) + + Cookies = Новый Соответствие; + Для Каждого Cookie Из ПреобразоватьХранилищеCookiesВМассивCookies(ГлавныйИсточник) Цикл + ДобавитьCookieВХранилище(Cookies, Cookie, Истина); + КонецЦикла; + Для Каждого Cookie Из ПреобразоватьХранилищеCookiesВМассивCookies(ДополнительныйИсточник) Цикл + ДобавитьCookieВХранилище(Cookies, Cookie, Истина); + КонецЦикла; + + Возврат Cookies; + +КонецФункции + +Функция ПреобразоватьХранилищеCookiesВМассивCookies(ХранилищеCookies) + + Cookies = Новый Массив; + Если ТипЗнч(ХранилищеCookies) = Тип("Массив") Тогда + Для Каждого Cookie Из ХранилищеCookies Цикл + НоваяCookie = КонструкторCookie(); + ЗаполнитьЗначенияСвойств(НоваяCookie, Cookie); + Cookies.Добавить(НоваяCookie); + КонецЦикла; + + Возврат Cookies; + КонецЕсли; + + Для Каждого Домен Из ХранилищеCookies Цикл + Для Каждого Путь Из Домен.Значение Цикл + Для Каждого Наименование Из Путь.Значение Цикл + Cookies.Добавить(Наименование.Значение); + КонецЦикла; + КонецЦикла; + КонецЦикла; + + Возврат Cookies; + +КонецФункции + +Функция ОтобратьCookiesДляЗапроса(СтруктураURL, Cookies) + + СерверВЗапросе = ДобавитьЛидирующуюТочку(СтруктураURL.Сервер); + + Результат = Новый Массив; + Для Каждого Домен Из Cookies Цикл + Если Не СтрЗаканчиваетсяНа(СерверВЗапросе, Домен.Ключ) Тогда + Продолжить; + КонецЕсли; + Для Каждого Путь Из Домен.Значение Цикл + Если Не СтрНачинаетсяС(СтруктураURL.Путь, Путь.Ключ) Тогда + Продолжить; + КонецЕсли; + ЗаполнитьСписокОтфильтрованнымиCookies(Путь.Значение, СтруктураURL, Результат); + КонецЦикла; + КонецЦикла; + + Возврат Результат; + +КонецФункции + +Процедура ЗаполнитьСписокОтфильтрованнымиCookies(Cookies, СтруктураURL, Список) + + Для Каждого Cookie Из Cookies Цикл + Если Cookie.Значение.ТолькоБезопасноеСоединение = Истина И СтруктураURL.Схема <> "https" Тогда + Продолжить; + КонецЕсли; + // INFO: проверка срока действия игнорируется (Cookie.Значение.СрокДействия) + // INFO: проверка порта игнорируется + + Список.Добавить(Cookie.Значение); + КонецЦикла; + +КонецПроцедуры + +Функция ДозаполнитьCookie(Cookies, URL) + + СтруктураURL = РазобратьURL(URL); + НовыеCookies = Новый Массив; + Если ТипЗнч(Cookies) = Тип("Массив") Тогда + Для Каждого Cookie Из Cookies Цикл + НовыйCookie = КонструкторCookie(Cookie.Наименование, Cookie.Значение); + ЗаполнитьЗначенияСвойств(НовыйCookie, Cookie); + + Если Не ЗначениеЗаполнено(НовыйCookie.Домен) Тогда + НовыйCookie.Домен = СтруктураURL.Сервер; + КонецЕсли; + Если Не ЗначениеЗаполнено(НовыйCookie.Путь) Тогда + НовыйCookie.Путь = "/"; + КонецЕсли; + + НовыеCookies.Добавить(НовыйCookie); + КонецЦикла; + + Возврат НовыеCookies; + КонецЕсли; + + Возврат Cookies; + +КонецФункции + +Функция ИзвлечьCookies(Заголовки, URL) + + ТекущееВремя = ТекущаяУниверсальнаяДата(); + Cookies = Новый Соответствие; + Для Каждого ОчереднойЗаголовок Из Заголовки Цикл + Если НРег(ОчереднойЗаголовок.Ключ) = "set-cookie" Тогда + Для Каждого ЗаголовокCookie Из РазбитьНаОтдельныеЗаголовкиCookies(ОчереднойЗаголовок.Значение) Цикл + Cookie = РаспарситьCookie(ЗаголовокCookie, URL, ТекущееВремя); + Если Cookie = Неопределено Тогда + Продолжить; + КонецЕсли; + Если Cookie.СрокДействия <= ТекущееВремя Тогда + УдалитьCookieИзХранилища(Cookies, Cookie); + Иначе + ДобавитьCookieВХранилище(Cookies, Cookie); + КонецЕсли; + КонецЦикла; + КонецЕсли; + КонецЦикла; + + Возврат Cookies; + +КонецФункции + +Функция РазбитьНаОтдельныеЗаголовкиCookies(Знач Заголовок) + + Заголовки = Новый Массив; + + Если Не ЗначениеЗаполнено(Заголовок) Тогда + Возврат Заголовки; + КонецЕсли; + + ЗапчастиЗаголовков = СтрРазделить(Заголовок, ",", Ложь); + + ОтдельныйЗаголовок = ЗапчастиЗаголовков[0]; + Для Индекс = 1 По ЗапчастиЗаголовков.ВГраница() Цикл + ТочкаСЗапятой = СтрНайти(ЗапчастиЗаголовков[Индекс], ";"); + Равно = СтрНайти(ЗапчастиЗаголовков[Индекс], "="); + Если ТочкаСЗапятой И Равно И Равно < ТочкаСЗапятой Тогда + Заголовки.Добавить(ОтдельныйЗаголовок); + ОтдельныйЗаголовок = ЗапчастиЗаголовков[Индекс]; + Иначе + ОтдельныйЗаголовок = ОтдельныйЗаголовок + ЗапчастиЗаголовков[Индекс]; + КонецЕсли; + КонецЦикла; + Заголовки.Добавить(ОтдельныйЗаголовок); + + Возврат Заголовки; + +КонецФункции + +Процедура ДобавитьCookieВХранилище(ХранилищеCookies, Cookie, Замещать = Ложь) + + Если ХранилищеCookies.Получить(Cookie.Домен) = Неопределено Тогда + ХранилищеCookies[Cookie.Домен] = Новый Соответствие; + КонецЕсли; + Если ХранилищеCookies[Cookie.Домен].Получить(Cookie.Путь) = Неопределено Тогда + ХранилищеCookies[Cookie.Домен][Cookie.Путь] = Новый Соответствие; + КонецЕсли; + Если ХранилищеCookies[Cookie.Домен][Cookie.Путь].Получить(Cookie.Наименование) = Неопределено ИЛИ Замещать Тогда + ХранилищеCookies[Cookie.Домен][Cookie.Путь][Cookie.Наименование] = Cookie; + КонецЕсли; + +КонецПроцедуры + +Процедура УдалитьCookieИзХранилища(ХранилищеCookies, Cookie) + + Если ХранилищеCookies.Получить(Cookie.Домен) <> Неопределено + И ХранилищеCookies[Cookie.Домен].Получить(Cookie.Путь) <> Неопределено + И ХранилищеCookies[Cookie.Домен][Cookie.Путь].Получить(Cookie.Наименование) <> Неопределено Тогда + ХранилищеCookies[Cookie.Домен][Cookie.Путь].Удалить(Cookie.Наименование); + КонецЕсли; + +КонецПроцедуры + +Функция РаспарситьCookie(Заголовок, URL, ТекущееВремя) + + Cookie = Неопределено; + Индекс = 0; + + Для Каждого Параметр Из СтрРазделить(Заголовок, ";", Ложь) Цикл + Индекс = Индекс + 1; + Параметр = СокрЛП(Параметр); + + Если Индекс = 1 Тогда + Cookie = СоздатьCookieИЗаполнитьОсновныеПараметры(Параметр); + Продолжить; + КонецЕсли; + + Части = СтрРазделить(Параметр, "=", Ложь); + Ключ = НРег(Части[0]); + Если Части.Количество() > 1 Тогда + Значение = Части[1]; + КонецЕсли; + + Если Ключ = "domain" Тогда + Cookie.Домен = Значение; + ИначеЕсли Ключ = "path" Тогда + Cookie.Путь = Значение; + ИначеЕсли Ключ = "secure" Тогда + Cookie.ТолькоБезопасноеСоединение = Истина; + ИначеЕсли Ключ = "max-age" Тогда + СрокДействияMaxAge = ТекущееВремя + ЧислоИзСтроки(Значение); + ИначеЕсли Ключ = "expires" Тогда + Cookie.СрокДействия = ДатаИзСтрокиRFC7231(Значение); + Иначе + Продолжить; + КонецЕсли; + КонецЦикла; + Если ЗначениеЗаполнено(Cookie) И ЗначениеЗаполнено(СрокДействияMaxAge) Тогда + Cookie.СрокДействия = СрокДействияMaxAge; + КонецЕсли; + + ДозаполнитьCookieНеявнымиЗначениями(Cookie, URL); + + Возврат Cookie; + +КонецФункции + +Функция СоздатьCookieИЗаполнитьОсновныеПараметры(Параметр) + + Части = СтрРазделить(Параметр, "=", Ложь); + Наименование = Части[0]; + Если Части.Количество() > 1 Тогда + Значение = Сред(Параметр, СтрДлина(Наименование) + 2); + КонецЕсли; + + Возврат КонструкторCookie(Наименование, Значение); + +КонецФункции + +Процедура ДозаполнитьCookieНеявнымиЗначениями(Cookie, URL) + + Если Cookie = Неопределено Тогда + Возврат; + КонецЕсли; + + СтруктураURL = РазобратьURL(URL); + Если Не ЗначениеЗаполнено(Cookie.Домен) Тогда + Cookie.Домен = СтруктураURL.Сервер; + КонецЕсли; + Если Не ЗначениеЗаполнено(Cookie.Порт) И ЗначениеЗаполнено(СтруктураURL.Порт) Тогда + Cookie.Порт = СтруктураURL.Порт; + КонецЕсли; + Если Не ЗначениеЗаполнено(Cookie.Путь) Тогда + ПозицияПоследнегоСлеша = СтрНайти(СтруктураURL.Путь, "/", НаправлениеПоиска.СКонца); + Если ПозицияПоследнегоСлеша <= 1 Тогда + Cookie.Путь = "/"; + Иначе + Cookie.Путь = Лев(СтруктураURL.Путь, ПозицияПоследнегоСлеша - 1); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +Функция КонструкторCookie(Наименование = "", Значение = Неопределено) + + НовыйCookie = Новый Структура; + НовыйCookie.Вставить("Наименование", Наименование); + НовыйCookie.Вставить("Значение", Значение); + НовыйCookie.Вставить("Домен", ""); + НовыйCookie.Вставить("Путь", ""); + НовыйCookie.Вставить("Порт"); + НовыйCookie.Вставить("СрокДействия", '39990101'); + НовыйCookie.Вставить("ТолькоБезопасноеСоединение"); + + Возврат НовыйCookie; + +КонецФункции + +#КонецОбласти + +#Область ПараметрыРаботыСJSON + +// Преобразует значение типа к типу, сериализация которого поддерживается. +// +// Параметры: +// Свойство - Строка - имя свойства, если выполняется запись структуры или соответствия. +// Значение - Произвольный - исходное значение. +// ДополнительныеПараметры - Произвольный - дополнительные параметры, которые указаны в вызове метода ЗаписатьJSON. +// Отказ - Булево - отказ от записи свойства. +// +// Возвращаемое значение: +// Произвольный - см. типы ЗаписатьJSON. +// +Функция ПреобразованиеJson(Свойство, Значение, ДополнительныеПараметры, Отказ) Экспорт + + Если ТипЗнч(Значение) = Тип("УникальныйИдентификатор") Тогда + Возврат Строка(Значение); + ИначеЕсли ТипЗнч(Значение) = Тип("ДвоичныеДанные") Тогда + Возврат ПолучитьBase64СтрокуИзДвоичныхДанных(Значение); + Иначе + // Если значение не поддерживает сериализацию в JSON, то будет выброшено исключение + Возврат Значение; + КонецЕсли; + +КонецФункции + +// Восстанавливает значение типа, десериализация которого не поддерживается. +// +// Параметры: +// Свойство - Строка - имя свойства, значение которого нужно восстановить. +// Значение - Строка - значение, которое нужно восстановить. +// ТипыСвойств - Соответствие - типы свойств, которые нужно восстановить. +// * Ключ - Строка - имя свойства. Равно значению параметра Свойство. +// * Значение - Тип - исходный тип значения. +// +// Возвращаемое значение: +// Произвольный - восстановленное значение. +// +Функция ВосстановлениеJson(Свойство, Значение, ТипыСвойств) Экспорт + + ТипСвойства = ТипыСвойств.Получить(Свойство); + Если ТипСвойства = Тип("УникальныйИдентификатор") Тогда + Возврат Новый УникальныйИдентификатор(Значение); + ИначеЕсли ТипСвойства = Тип("ДвоичныеДанные") Тогда + Возврат ПолучитьДвоичныеДанныеИзBase64Строки(Значение); + Иначе + Возврат Значение; + КонецЕсли; + +КонецФункции + +#КонецОбласти + +#Область АутентификацияAWS4 + +Функция КлючПодписиAWS4(СекретныйКлюч, Дата, Регион, Сервис) + + КлючДата = ПодписатьСообщениеHMAC("AWS4" + СекретныйКлюч, Дата); + КлючРегион = ПодписатьСообщениеHMAC(КлючДата, Регион); + КлючСервис = ПодписатьСообщениеHMAC(КлючРегион, Сервис); + + Возврат ПодписатьСообщениеHMAC(КлючСервис, "aws4_request"); + +КонецФункции + +Функция ПодписатьСообщениеHMAC(Знач Ключ, Знач Сообщение, Знач Алгоритм = Неопределено) + + Если Алгоритм = Неопределено Тогда + Алгоритм = ХешФункция.SHA256; + КонецЕсли; + + Если ТипЗнч(Ключ) = Тип("Строка") Тогда + Ключ = ПолучитьДвоичныеДанныеИзСтроки(Ключ, КодировкаТекста.UTF8, Ложь); + КонецЕсли; + Если ТипЗнч(Сообщение) = Тип("Строка") Тогда + Сообщение = ПолучитьДвоичныеДанныеИзСтроки(Сообщение, КодировкаТекста.UTF8, Ложь); + КонецЕсли; + + Возврат HMAC(Ключ, Сообщение, Алгоритм); + +КонецФункции + +Процедура ПодготовитьАутентификациюAWS4(ПодготовленныйЗапрос) + + ЗначениеЗаголовка = ЗначениеЗаголовка("x-amz-date", ПодготовленныйЗапрос.Заголовки); + Если ЗначениеЗаголовка <> Ложь Тогда + ТекущееВремя = Дата(СтрЗаменить(СтрЗаменить(ЗначениеЗаголовка, "T", ""), "Z", "")); + Иначе + ТекущееВремя = ТекущаяУниверсальнаяДата(); + КонецЕсли; + ПодготовленныйЗапрос.Заголовки["x-amz-date"] = Формат(ТекущееВремя, "ДФ=yyyyMMddTHHmmssZ"); + ОбластьДействияДата = Формат(ТекущееВремя, "ДФ=yyyyMMdd"); + + ПодготовленныйЗапрос.Заголовки["x-amz-content-sha256"] = + ХешированиеДанных(ХешФункция.SHA256, ПодготовленныйЗапрос.HTTPЗапрос.ПолучитьТелоКакПоток()); + + СтруктураURL = РазобратьURL(ПодготовленныйЗапрос.URL); + + КаноническиеЗаголовки = КаноническиеЗаголовкиAWS4(ПодготовленныйЗапрос.Заголовки, СтруктураURL); + + КаноническийПуть = СтруктураURL.Путь; + КаноническиеПараметрыЗапроса = КаноническиеПараметрыЗапросаAWS4(СтруктураURL.ПараметрыЗапроса); + + ЧастиЗапроса = Новый Массив; + ЧастиЗапроса.Добавить(ПодготовленныйЗапрос.Метод); + ЧастиЗапроса.Добавить(КаноническийПуть); + ЧастиЗапроса.Добавить(КаноническиеПараметрыЗапроса); + ЧастиЗапроса.Добавить(КаноническиеЗаголовки.КаноническиеЗаголовки); + ЧастиЗапроса.Добавить(КаноническиеЗаголовки.ПодписываемыеЗаголовки); + ЧастиЗапроса.Добавить(ПодготовленныйЗапрос.Заголовки["x-amz-content-sha256"]); + КаноническийЗапрос = СтрСоединить(ЧастиЗапроса, Символы.ПС); + + ЧастиОбластиДействия = Новый Массив; + ЧастиОбластиДействия.Добавить(ОбластьДействияДата); + ЧастиОбластиДействия.Добавить(ПодготовленныйЗапрос.Аутентификация.Регион); + ЧастиОбластиДействия.Добавить(ПодготовленныйЗапрос.Аутентификация.Сервис); + ЧастиОбластиДействия.Добавить("aws4_request"); + ОбластьДействия = СтрСоединить(ЧастиОбластиДействия, "/"); + + ЧастиСтрокиДляПодписи = Новый Массив; + ЧастиСтрокиДляПодписи.Добавить(ПодготовленныйЗапрос.Аутентификация.Тип); + ЧастиСтрокиДляПодписи.Добавить(ПодготовленныйЗапрос.Заголовки["x-amz-date"]); + ЧастиСтрокиДляПодписи.Добавить(ОбластьДействия); + ЧастиСтрокиДляПодписи.Добавить(ХешированиеДанных(ХешФункция.SHA256, КаноническийЗапрос)); + СтрокаДляПодписи = СтрСоединить(ЧастиСтрокиДляПодписи, Символы.ПС); + + Ключ = КлючПодписиAWS4( + ПодготовленныйЗапрос.Аутентификация.СекретныйКлюч, + ОбластьДействияДата, + ПодготовленныйЗапрос.Аутентификация.Регион, + ПодготовленныйЗапрос.Аутентификация.Сервис); + Подпись = НРег(ПолучитьHexСтрокуИзДвоичныхДанных(ПодписатьСообщениеHMAC(Ключ, СтрокаДляПодписи))); + + ПодготовленныйЗапрос.Заголовки["Authorization"] = СтрШаблон( + "%1 Credential=%2/%3, SignedHeaders=%4, Signature=%5", + ПодготовленныйЗапрос.Аутентификация.Тип, + ПодготовленныйЗапрос.Аутентификация.ИдентификаторКлючаДоступа, + ОбластьДействия, + КаноническиеЗаголовки.ПодписываемыеЗаголовки, + Подпись); + + ПодготовленныйЗапрос.HTTPЗапрос.Заголовки = ПодготовленныйЗапрос.Заголовки; + +КонецПроцедуры + +Функция КаноническиеЗаголовкиAWS4(Заголовки, СтруктураURL) + + Список = Новый СписокЗначений; + + ЗаголовокHostЕстьВЗапросе = Ложь; + ЗаголовкиПоУмолчанию = ЗаголовкиПоУмолчаниюAWS4(); + Для Каждого ОчереднойЗаголовок Из Заголовки Цикл + Заголовок = НРег(ОчереднойЗаголовок.Ключ); + Если ЗаголовкиПоУмолчанию.Исключения.Найти(Заголовок) <> Неопределено Тогда + Продолжить; + КонецЕсли; + ЗаголовокHostЕстьВЗапросе = Макс(ЗаголовокHostЕстьВЗапросе, Заголовок = "host"); + + Если ЗаголовкиПоУмолчанию.Равно.Найти(Заголовок) <> Неопределено Тогда + Список.Добавить(Заголовок, СокрЛП(ОчереднойЗаголовок.Значение)); + Иначе + Для Каждого Префикс Из ЗаголовкиПоУмолчанию.НачинаетсяС Цикл + Если СтрНачинаетсяС(Заголовок, Префикс) Тогда + Список.Добавить(Заголовок, СокрЛП(ОчереднойЗаголовок.Значение)); + Прервать; + КонецЕсли; + КонецЦикла; + КонецЕсли; + КонецЦикла; + + Если Не ЗаголовокHostЕстьВЗапросе Тогда + Список.Добавить("host", СформироватьЗначениеЗаголовкаHost(СтруктураURL)); + КонецЕсли; + + Список.СортироватьПоЗначению(НаправлениеСортировки.Возр); + + КаноническиеЗаголовки = Новый Массив; + ПодписываемыеЗаголовки = Новый Массив; + Для Каждого ЭлементСписка Из Список Цикл + КаноническиеЗаголовки.Добавить(ЭлементСписка.Значение + ":" + ЭлементСписка.Представление); + ПодписываемыеЗаголовки.Добавить(ЭлементСписка.Значение); + КонецЦикла; + КаноническиеЗаголовки.Добавить(""); + + КаноническиеЗаголовки = СтрСоединить(КаноническиеЗаголовки, Символы.ПС); + ПодписываемыеЗаголовки = СтрСоединить(ПодписываемыеЗаголовки, ";"); + Возврат Новый Структура( + "КаноническиеЗаголовки, ПодписываемыеЗаголовки", + КаноническиеЗаголовки, ПодписываемыеЗаголовки); + +КонецФункции + +Функция КаноническиеПараметрыЗапросаAWS4(ПараметрыЗапроса) + + Список = Новый СписокЗначений; + Для Каждого ОчереднойПараметрЗапроса Из ПараметрыЗапроса Цикл + Список.Добавить(ОчереднойПараметрЗапроса.Ключ, СокрЛП(ОчереднойПараметрЗапроса.Значение)); + КонецЦикла; + Список.СортироватьПоЗначению(НаправлениеСортировки.Возр); + + КаноническиеПараметры = Новый Массив; + Для Каждого ЭлементСписка Из Список Цикл + ЗначениеПараметра = КодироватьСтроку(ЭлементСписка.Представление, СпособКодированияСтроки.КодировкаURL); + КаноническиеПараметры.Добавить(ЭлементСписка.Значение + "=" + ЗначениеПараметра); + КонецЦикла; + + Возврат СтрСоединить(КаноническиеПараметры, "&"); + +КонецФункции + +Функция ЗаголовкиПоУмолчаниюAWS4() + + Заголовки = Новый Структура; + Заголовки.Вставить("Равно", СтрРазделить("host,content-type,date", ",")); + Заголовки.Вставить("НачинаетсяС", СтрРазделить("x-amz-", ",")); + Заголовки.Вставить("Исключения", СтрРазделить("x-amz-client-context", ",")); + + Возврат Заголовки; + +КонецФункции + +#КонецОбласти + +Процедура ПодготовитьАутентификациюBearer(ПодготовленныйЗапрос) + + Если Не ПодготовленныйЗапрос.Аутентификация.Свойство("Токен") или не ЗначениеЗаполнено(ПодготовленныйЗапрос.Аутентификация.Токен) Тогда + // Токен не заполнен. + Возврат; + КонецЕсли; + + ПодготовленныйЗапрос.Заголовки.Вставить("Authorization", СтрШаблон("Bearer %1", ПодготовленныйЗапрос.Аутентификация.Токен)); + +КонецПроцедуры + + +#Область КодированиеДекодированиеДанных + +#Область СлужебныеСтруктурыZip + +// Описание структур см. здесь https://pkware.cachefly.net/webdocs/casestudies/APPNOTE.TXT + +Функция ZipРазмерLFH() + + Возврат 34; + +КонецФункции + +Функция ZipРазмерDD() + + Возврат 16; + +КонецФункции + +Функция ZipРазмерCDH() + + Возврат 50; + +КонецФункции + +Функция ZipРазмерEOCD() + + Возврат 22; + +КонецФункции + +Функция ZipLFH() + + // Local file header + Буфер = Новый БуферДвоичныхДанных(ZipРазмерLFH()); + Буфер.ЗаписатьЦелое32(0, 67324752); // signature 0x04034b50 + Буфер.ЗаписатьЦелое16(4, 20); // version + Буфер.ЗаписатьЦелое16(6, 10); // bit flags + Буфер.ЗаписатьЦелое16(8, 8); // compression method + Буфер.ЗаписатьЦелое16(10, 0); // time + Буфер.ЗаписатьЦелое16(12, 0); // date + Буфер.ЗаписатьЦелое32(14, 0); // crc-32 + Буфер.ЗаписатьЦелое32(18, 0); // compressed size + Буфер.ЗаписатьЦелое32(22, 0); // uncompressed size + Буфер.ЗаписатьЦелое16(26, 4); // filename legth - "data" + Буфер.ЗаписатьЦелое16(28, 0); // extra field length + Буфер.Записать(30, ПолучитьБуферДвоичныхДанныхИзСтроки("data", "ascii", Ложь)); + + Возврат Буфер; + +КонецФункции + +Функция ZipDD(CRC32, РазмерСжатыхДанных, РазмерНесжатыхДанных) + + // Data descriptor + Буфер = Новый БуферДвоичныхДанных(ZipРазмерDD()); + Буфер.ЗаписатьЦелое32(0, 134695760); + Буфер.ЗаписатьЦелое32(4, CRC32); + Буфер.ЗаписатьЦелое32(8, РазмерСжатыхДанных); + Буфер.ЗаписатьЦелое32(12, РазмерНесжатыхДанных); + + Возврат Буфер; + +КонецФункции + +Функция ZipCDH(CRC32, РазмерСжатыхДанных, РазмерНесжатыхДанных) + + // Central directory header + Буфер = Новый БуферДвоичныхДанных(ZipРазмерCDH()); + Буфер.ЗаписатьЦелое32(0, 33639248); // signature 0x02014b50 + Буфер.ЗаписатьЦелое16(4, 798); // version made by + Буфер.ЗаписатьЦелое16(6, 20); // version needed to extract + Буфер.ЗаписатьЦелое16(8, 10); // bit flags + Буфер.ЗаписатьЦелое16(10, 8); // compression method + Буфер.ЗаписатьЦелое16(12, 0); // time + Буфер.ЗаписатьЦелое16(14, 0); // date + Буфер.ЗаписатьЦелое32(16, CRC32); // crc-32 + Буфер.ЗаписатьЦелое32(20, РазмерСжатыхДанных); // compressed size + Буфер.ЗаписатьЦелое32(24, РазмерНесжатыхДанных); // uncompressed size + Буфер.ЗаписатьЦелое16(28, 4); // file name length + Буфер.ЗаписатьЦелое16(30, 0); // extra field length + Буфер.ЗаписатьЦелое16(32, 0); // file comment length + Буфер.ЗаписатьЦелое16(34, 0); // disk number start + Буфер.ЗаписатьЦелое16(36, 0); // internal file attributes + Буфер.ЗаписатьЦелое32(38, 2176057344); // external file attributes + Буфер.ЗаписатьЦелое32(42, 0); // relative offset of local header + Буфер.Записать(46, ПолучитьБуферДвоичныхДанныхИзСтроки("data", "ascii", Ложь)); + + Возврат Буфер; + +КонецФункции + +Функция ZipEOCD(РазмерСжатыхДанных) + + // End of central directory + РазмерCDH = 50; + Буфер = Новый БуферДвоичныхДанных(ZipРазмерEOCD()); + Буфер.ЗаписатьЦелое32(0, 101010256); // signature 0x06054b50 + Буфер.ЗаписатьЦелое16(4, 0); // number of this disk + Буфер.ЗаписатьЦелое16(6, 0); // number of the disk with the start of the central directory + Буфер.ЗаписатьЦелое16(8, 1); // total number of entries in the central directory on this disk + Буфер.ЗаписатьЦелое16(10, 1); // total number of entries in the central directory + Буфер.ЗаписатьЦелое32(12, РазмерCDH); // size of the central directory + // offset of start of central directory with respect to the starting disk number + Буфер.ЗаписатьЦелое32(16, ZipРазмерLFH() + РазмерСжатыхДанных + ZipРазмерDD()); + Буфер.ЗаписатьЦелое16(20, 0); // the starting disk number + + Возврат Буфер; + +КонецФункции + +#КонецОбласти + +#Область СлужебныеСтруктурыGZip + +// Описание структур см. здесь https://www.ietf.org/rfc/rfc1952.txt + +Функция GZipРазмерHeader() + + Возврат 10; + +КонецФункции + +Функция GZipРазмерFooter() + + Возврат 8; + +КонецФункции + +Функция GZipHeader() + + Буфер = Новый БуферДвоичныхДанных(GZipРазмерHeader()); + Буфер[0] = 31; // ID1 0x1f + Буфер[1] = 139; // ID2 0x8b + Буфер[2] = 8; // compression method (08 for DEFLATE) + Буфер[3] = 0; // header flags + Буфер.ЗаписатьЦелое32(4, 0); // timestamp + Буфер[8] = 0; // compression flags + Буфер[9] = 255; // operating system ID + + Возврат Буфер; + +КонецФункции + +Функция GZipFooter(CRC32, РазмерИсходныхДанных) + + Буфер = Новый БуферДвоичныхДанных(GZipРазмерFooter()); + Буфер.ЗаписатьЦелое32(0, CRC32); + Буфер.ЗаписатьЦелое32(4, РазмерИсходныхДанных); + + Возврат Буфер; + +КонецФункции + +#КонецОбласти + +Функция ПрочитатьZip(СжатыеДанные, ТекстОшибки = Неопределено) + +#Если МобильноеПриложениеСервер Тогда + ВызватьИсключение(НСтр("ru = 'Работа с Zip-файлами в мобильной платформе не поддерживается'")); +#Иначе + Каталог = ПолучитьИмяВременногоФайла(); + ЧтениеZip = Новый ЧтениеZipФайла(СжатыеДанные); + ИмяФайла = ЧтениеZip.Элементы[0].Имя; + Попытка + ЧтениеZip.Извлечь(ЧтениеZip.Элементы[0], Каталог, РежимВосстановленияПутейФайловZIP.НеВосстанавливать); + Исключение + // Игнорируем проверку целостности архива, просто читаем результат + ТекстОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + КонецПопытки; + ЧтениеZip.Закрыть(); + + Результат = Новый ДвоичныеДанные(Каталог + ПолучитьРазделительПути() + ИмяФайла); + УдалитьФайлы(Каталог); + + Возврат Результат; +#КонецЕсли + +КонецФункции + +Функция ЗаписатьZip(Данные) + +#Если МобильноеПриложениеСервер Тогда + ВызватьИсключение(НСтр("ru = 'Работа с Zip-файлами в мобильной платформе не поддерживается'")); +#Иначе + ВременныйФайл = ПолучитьИмяВременногоФайла(".bin"); + Данные.Записать(ВременныйФайл); + ПотокZip = Новый ПотокВПамяти; + ЗаписьZip = Новый ЗаписьZipФайла(ПотокZip); + ЗаписьZip.Добавить(ВременныйФайл); + ЗаписьZip.Записать(); + УдалитьФайлы(ВременныйФайл); + + Возврат ПотокZip.ЗакрытьИПолучитьДвоичныеДанные(); +#КонецЕсли + +КонецФункции + +#КонецОбласти + +#Область ПараметрыПоУмолчанию + +Функция ЗаголовкиПоУмолчанию() + + Заголовки = Новый Соответствие; +#Если МобильноеПриложениеСервер Тогда + Заголовки.Вставить("Accept-Encoding", "identity"); +#Иначе + Заголовки.Вставить("Accept-Encoding", "gzip"); +#КонецЕсли + Заголовки.Вставить("Accept", "*/*"); + Заголовки.Вставить("Connection", "keep-alive"); + + Возврат Заголовки; + +КонецФункции + +Функция МаксимальноеКоличествоПеренаправлений() + + Возврат 30; + +КонецФункции + +Функция СтандартныйТаймаут() + + Возврат 30; + +КонецФункции + +Функция ПараметрыПреобразованияJSONПоУмолчанию() + + ПараметрыПреобразованияПоУмолчанию = Новый Структура; + ПараметрыПреобразованияПоУмолчанию.Вставить("ПрочитатьВСоответствие", Истина); + ПараметрыПреобразованияПоУмолчанию.Вставить("ФорматДатыJSON", ФорматДатыJSON.ISO); + ПараметрыПреобразованияПоУмолчанию.Вставить("ИменаСвойствСоЗначениямиДата", Неопределено); + ПараметрыПреобразованияПоУмолчанию.Вставить("ВариантЗаписиДатыJSON", ВариантЗаписиДатыJSON.ЛокальнаяДата); + ПараметрыПреобразованияПоУмолчанию.Вставить("ИмяФункцииПреобразования", Неопределено); + ПараметрыПреобразованияПоУмолчанию.Вставить("МодульФункцииПреобразования", Неопределено); + ПараметрыПреобразованияПоУмолчанию.Вставить("ДополнительныеПараметрыФункцииПреобразования", Неопределено); + ПараметрыПреобразованияПоУмолчанию.Вставить("ИмяФункцииВосстановления", Неопределено); + ПараметрыПреобразованияПоУмолчанию.Вставить("МодульФункцииВосстановления", Неопределено); + ПараметрыПреобразованияПоУмолчанию.Вставить("ДополнительныеПараметрыФункцииВосстановления", Неопределено); + ПараметрыПреобразованияПоУмолчанию.Вставить("ИменаСвойствДляОбработкиВосстановления", Неопределено); + ПараметрыПреобразованияПоУмолчанию.Вставить("МаксимальнаяВложенность", 500); + + Возврат ПараметрыПреобразованияПоУмолчанию; + +КонецФункции + +Функция ПараметрыЗаписиJSONПоУмолчанию() + + ПараметрыЗаписиJSONПоУмолчанию = Новый Структура; + ПараметрыЗаписиJSONПоУмолчанию.Вставить("ПереносСтрок", ПереносСтрокJSON.Авто); + ПараметрыЗаписиJSONПоУмолчанию.Вставить("СимволыОтступа", " "); + ПараметрыЗаписиJSONПоУмолчанию.Вставить("ИспользоватьДвойныеКавычки", Истина); + ПараметрыЗаписиJSONПоУмолчанию.Вставить("ЭкранированиеСимволов", ЭкранированиеСимволовJSON.Нет); + ПараметрыЗаписиJSONПоУмолчанию.Вставить("ЭкранироватьУгловыеСкобки", Ложь); + ПараметрыЗаписиJSONПоУмолчанию.Вставить("ЭкранироватьРазделителиСтрок", Истина); + ПараметрыЗаписиJSONПоУмолчанию.Вставить("ЭкранироватьАмперсанд", Ложь); + ПараметрыЗаписиJSONПоУмолчанию.Вставить("ЭкранироватьОдинарныеКавычки", Ложь); + ПараметрыЗаписиJSONПоУмолчанию.Вставить("ЭкранироватьСлеш", Ложь); + + Возврат ПараметрыЗаписиJSONПоУмолчанию; + +КонецФункции + +#КонецОбласти + +#Область КодыСостояний + +Функция ОписанияКодовСостоянийHTTP() + + Коды = Новый Массив; + Коды.Добавить(НовыйКодHTTP(100, "Продолжай_100", "Continue")); + Коды.Добавить(НовыйКодHTTP(101, "ПереключениеПротокола_101", "Switching Protocols")); + Коды.Добавить(НовыйКодHTTP(102, "ИдетОбработка_102", "Processing")); + Коды.Добавить(НовыйКодHTTP(103, "РанняяМетаинформация_103", "Early Hints")); + + Коды.Добавить(НовыйКодHTTP(200, "ОК_200", "OK")); + Коды.Добавить(НовыйКодHTTP(201, "Создано_201", "Created")); + Коды.Добавить(НовыйКодHTTP(202, "Принято_202", "Accepted")); + Коды.Добавить(НовыйКодHTTP(203, "ИнформацияНеАвторитетна_203", "Non-Authoritative Information")); + Коды.Добавить(НовыйКодHTTP(204, "НетСодержимого_204", "No Content")); + Коды.Добавить(НовыйКодHTTP(205, "СброситьСодержимое_205", "Reset Content")); + Коды.Добавить(НовыйКодHTTP(206, "ЧастичноеСодержимое_206", "Partial Content")); + Коды.Добавить(НовыйКодHTTP(207, "Многостатусный_207", "Multi-Status")); + Коды.Добавить(НовыйКодHTTP(208, "УжеСообщалось_208", "Already Reported")); + Коды.Добавить(НовыйКодHTTP(226, "ИспользованоIM_226", "IM Used")); + + Коды.Добавить(НовыйКодHTTP(300, "МножествоВыборов_300", "Multiple Choices")); + Коды.Добавить(НовыйКодHTTP(301, "ПеремещеноНавсегда_301", "Moved Permanently")); + Коды.Добавить(НовыйКодHTTP(302, "ПеремещеноВременно_302", "Moved Temporarily")); + Коды.Добавить(НовыйКодHTTP(303, "СмотретьДругое_303", "See Other")); + Коды.Добавить(НовыйКодHTTP(304, "НеИзменялось_304", "Not Modified")); + Коды.Добавить(НовыйКодHTTP(305, "ИспользоватьПрокси_305", "Use Proxy")); + Коды.Добавить(НовыйКодHTTP(307, "ВременноеПеренаправление_307", "Temporary Redirect")); + Коды.Добавить(НовыйКодHTTP(308, "ПостоянноеПеренаправление_308", "Permanent Redirect")); + + Коды.Добавить(НовыйКодHTTP(400, "НеверныйЗапрос_400", "Bad Request")); + Коды.Добавить(НовыйКодHTTP(401, "НеАвторизован_401", "Unauthorized")); + Коды.Добавить(НовыйКодHTTP(402, "НеобходимаОплата_402", "Payment Required")); + Коды.Добавить(НовыйКодHTTP(403, "Запрещено_403", "Forbidden")); + Коды.Добавить(НовыйКодHTTP(404, "НеНайдено_404", "Not Found")); + Коды.Добавить(НовыйКодHTTP(405, "МетодНеПоддерживается_405", "Method Not Allowed")); + Коды.Добавить(НовыйКодHTTP(406, "Неприемлемо_406", "Not Acceptable")); + Коды.Добавить(НовыйКодHTTP(407, "НеобходимаАутентификацияПрокси_407", "Proxy Authentication Required")); + Коды.Добавить(НовыйКодHTTP(408, "ИстеклоВремяОжидания_408", "Request Timeout")); + Коды.Добавить(НовыйКодHTTP(409, "Конфликт_409", "Conflict")); + Коды.Добавить(НовыйКодHTTP(410, "Удален_410", "Gone")); + Коды.Добавить(НовыйКодHTTP(411, "НеобходимаДлина_411", "Length Required")); + Коды.Добавить(НовыйКодHTTP(412, "УсловиеЛожно_412", "Precondition Failed")); + Коды.Добавить(НовыйКодHTTP(413, "ПолезнаяНагрузкаСлишкомВелика_413", "Payload Too Large")); + Коды.Добавить(НовыйКодHTTP(414, "СлишкомДлинныйURI_414", "URI Too Long")); + Коды.Добавить(НовыйКодHTTP(415, "НеподдерживаемыйТипДанных_415", "Unsupported Media Type")); + Коды.Добавить(НовыйКодHTTP(416, "ДиапазонНеДостижим_416", "Range Not Satisfiable")); + Коды.Добавить(НовыйКодHTTP(417, "ОжиданиеНеУдалось_417", "Expectation Failed")); + Коды.Добавить(НовыйКодHTTP(419, "ОшибкаПроверкиCSRF_419", "Authentication Timeout")); + Коды.Добавить(НовыйКодHTTP(421, "НеправильноНаправленныйЗапрос_421", "Misdirected Request")); + Коды.Добавить(НовыйКодHTTP(422, "НеобрабатываемыйЭкземпляр_422", "Unprocessable Entity")); + Коды.Добавить(НовыйКодHTTP(423, "Заблокировано_423", "Locked")); + Коды.Добавить(НовыйКодHTTP(424, "НевыполненнаяЗависимость_424", "Failed Dependency")); + Коды.Добавить(НовыйКодHTTP(425, "СлишкомРано_425", "Too Early")); + Коды.Добавить(НовыйКодHTTP(426, "НеобходимоОбновление_426", "Upgrade Required")); + Коды.Добавить(НовыйКодHTTP(428, "НеобходимоПредусловие_428", "Precondition Required")); + Коды.Добавить(НовыйКодHTTP(429, "СлишкомМногоЗапросов_429", "Too Many Requests")); + Коды.Добавить(НовыйКодHTTP(431, "ПоляЗаголовкаЗапросаСлишкомБольшие_431", "Request Header Fields Too Large")); + Коды.Добавить(НовыйКодHTTP(449, "ПовторитьС_449", "Retry With")); + Коды.Добавить(НовыйКодHTTP(451, "НедоступноПоЮридическимПричинам_451", "Unavailable For Legal Reasons")); + Коды.Добавить(НовыйКодHTTP(499, "КлиентЗакрылСоединение_499", "Client Closed Request")); + + Коды.Добавить(НовыйКодHTTP(500, "ВнутренняяОшибкаСервера_500", "Internal Server Error")); + Коды.Добавить(НовыйКодHTTP(501, "НеРеализовано_501", "Not Implemented")); + Коды.Добавить(НовыйКодHTTP(502, "ОшибочныйШлюз_502", "Bad Gateway")); + Коды.Добавить(НовыйКодHTTP(503, "СервисНедоступен_503", "Service Unavailable")); + Коды.Добавить(НовыйКодHTTP(504, "ШлюзНеОтвечает_504", "Gateway Timeout")); + Коды.Добавить(НовыйКодHTTP(505, "ВерсияHTTPНеПоддерживается_505", "HTTP Version Not Supported")); + Коды.Добавить(НовыйКодHTTP(506, "ВариантТожеПроводитСогласование_506", "Variant Also Negotiates")); + Коды.Добавить(НовыйКодHTTP(507, "ПереполнениеХранилища_507", "Insufficient Storage")); + Коды.Добавить(НовыйКодHTTP(508, "ОбнаруженоБесконечноеПеренаправление_508", "Loop Detected")); + Коды.Добавить(НовыйКодHTTP(509, "ИсчерпанаПропускнаяШиринаКанала_509", "Bandwidth Limit Exceeded")); + Коды.Добавить(НовыйКодHTTP(510, "НеРасширено_510", "Not Extended")); + Коды.Добавить(НовыйКодHTTP(511, "ТребуетсяСетеваяАутентификация_511", "Network Authentication Required")); + Коды.Добавить(НовыйКодHTTP(520, "НеизвестнаяОшибка_520", "Unknown Error")); + Коды.Добавить(НовыйКодHTTP(521, "ВебСерверНеРаботает_521", "Web Server Is Down")); + Коды.Добавить(НовыйКодHTTP(522, "СоединениеНеОтвечает_522", "Connection Timed Out")); + Коды.Добавить(НовыйКодHTTP(523, "ИсточникНедоступен_523", "Origin Is Unreachable")); + Коды.Добавить(НовыйКодHTTP(524, "ВремяОжиданияИстекло_524", "A Timeout Occurred")); + Коды.Добавить(НовыйКодHTTP(525, "КвитированиеSSНеУдалось_525", "SSL Handshake Failed")); + Коды.Добавить(НовыйКодHTTP(526, "НедействительныйСертификатSSL_526", "Invalid SSL Certificate")); + + Возврат Коды; + +КонецФункции + +Функция НовыйКодHTTP(Код, Ключ, Описание) + + Возврат Новый Структура("Код, Ключ, Описание", Код, Ключ, Описание); + +КонецФункции + +Функция ЭтоКодСостоянияПриКоторомНужноУчитыватьЗаголовокRetryAfter(КодСостояния) + + Коды = КодыСостоянияHTTP(); + Возврат КодСостояния = Коды.ПолезнаяНагрузкаСлишкомВелика_413 + ИЛИ КодСостояния = Коды.СлишкомМногоЗапросов_429 + ИЛИ КодСостояния = Коды.СервисНедоступен_503; + +КонецФункции + +#КонецОбласти + +#Область Прочие + +Функция ОпределитьХешФункцию(Знач Алгоритм) + + Алгоритм = ВРег(Алгоритм); + Если Не ЗначениеЗаполнено(Алгоритм) ИЛИ Алгоритм = "MD5" ИЛИ Алгоритм = "MD5-SESS" Тогда + АлгоритмХеширования = ХешФункция.MD5; + ИначеЕсли Алгоритм = "SHA" Тогда + АлгоритмХеширования = ХешФункция.SHA1; + ИначеЕсли Алгоритм = "SHA-256" Тогда + АлгоритмХеширования = ХешФункция.SHA256; + Иначе + АлгоритмХеширования = Неопределено; + КонецЕсли; + + Возврат АлгоритмХеширования; + +КонецФункции + +Функция ХешированиеДанных(Знач Алгоритм, Знач Данные) + + Если ТипЗнч(Данные) = Тип("Строка") Тогда + Данные = ПолучитьДвоичныеДанныеИзСтроки(Данные, КодировкаТекста.UTF8, Ложь); + КонецЕсли; + + Хеширование = Новый ХешированиеДанных(Алгоритм); + Хеширование.Добавить(Данные); + + Возврат НРег(ПолучитьHexСтрокуИзДвоичныхДанных(Хеширование.ХешСумма)); + +КонецФункции + +Процедура Приостановить(ДлительностьОстановкиВСекундах) + + // Когда-нибудь в платформе сделают паузу и это можно будет выкинуть + + Если ДлительностьОстановкиВСекундах < 1 Тогда + Возврат; + КонецЕсли; + + ТекущаяДата = ТекущаяУниверсальнаяДата(); + ЖдатьДо = ТекущаяДата + ДлительностьОстановкиВСекундах; + + // BSLLS:UsingHardcodeNetworkAddress-off + ЛокальныйХост = "127.0.0.0"; + КакойНибудьСвободныйПорт = 56476; + // BSLLS:UsingHardcodeNetworkAddress-on + Пока ТекущаяДата < ЖдатьДо Цикл + Таймаут = ЖдатьДо - ТекущаяДата; + Начало = ТекущаяУниверсальнаяДатаВМиллисекундах(); + Попытка + Соединение = Новый HTTPСоединение( + ЛокальныйХост, КакойНибудьСвободныйПорт, Неопределено, Неопределено, Новый ИнтернетПрокси(Ложь), Таймаут); + Соединение.Получить(Новый HTTPЗапрос("/does_not_matter")); + Исключение + РеальныйТаймаут = ТекущаяУниверсальнаяДатаВМиллисекундах() - Начало; + КонецПопытки; + МинимальныйТаймаутВМиллисекундах = 1000; + Если РеальныйТаймаут < МинимальныйТаймаутВМиллисекундах Тогда + ВызватьИсключение(НСтр("ru = 'Процедура Приостановить не работает должным образом'")); + КонецЕсли; + ТекущаяДата = ТекущаяУниверсальнаяДата(); + КонецЦикла; + +КонецПроцедуры + +Функция РассчитатьДлительностьПриостановки(Повтор, КоэффициентЭкспоненциальнойЗадержки, ЗаголовокRetryAfter, Остаток) + + Если ЗаголовокRetryAfter <> Ложь Тогда + Длительность = ЧислоИзСтроки(ЗаголовокRetryAfter); + + Если Длительность = 0 Тогда + Дата = ДатаИзСтрокиRFC7231(ЗаголовокRetryAfter); + Если ЗначениеЗаполнено(Дата) Тогда + Длительность = Дата - ТекущаяУниверсальнаяДата(); + КонецЕсли; + + Если Длительность <= 0 Тогда + Длительность = 1; + КонецЕсли + КонецЕсли; + Иначе + Длительность = КоэффициентЭкспоненциальнойЗадержки * Pow(2, Повтор - 1); + КонецЕсли; + + Длительность = Мин(Длительность, Остаток); + + Если Длительность < 0 Тогда + Длительность = 0; + КонецЕсли; + + Возврат Длительность; + +КонецФункции + +#КонецОбласти + +#Область УниверсальныеСтруктурыДанных + +Функция ВыбратьЗначение(ОсновноеЗначение, ДополнительныеЗначения, Ключ, ЗначениеПоУмолчанию) + + Если ОсновноеЗначение <> Неопределено Тогда + Возврат ОсновноеЗначение; + КонецЕсли; + + Значение = ЗначениеПоКлючу(ДополнительныеЗначения, Ключ); + Если Значение <> Неопределено Тогда + Возврат Значение; + КонецЕсли; + + Возврат ЗначениеПоУмолчанию; + +КонецФункции + +Функция ЗначениеПоКлючу(Структура, Ключ, ЗначениеПоУмолчанию = Неопределено) + + Если ТипЗнч(Структура) = Тип("Структура") И Структура.Свойство(Ключ) Тогда + Значение = Структура[Ключ]; + ИначеЕсли ТипЗнч(Структура) = Тип("Соответствие") И Структура.Получить(Ключ) <> Неопределено Тогда + Значение = Структура.Получить(Ключ); + Иначе + Значение = ЗначениеПоУмолчанию; + КонецЕсли; + + Возврат Значение; + +КонецФункции + +#КонецОбласти + +#Область РаботаСоСтроками + +Функция ЧислоИзСтроки(Знач Строка) Экспорт + + ОписаниеТипа = Новый ОписаниеТипов("Число"); + Возврат ОписаниеТипа.ПривестиЗначение(Строка); + +КонецФункции + +Функция ДатаИзСтроки(Знач Строка) Экспорт + + КвалификаторДаты = Новый КвалификаторыДаты(ЧастиДаты.ДатаВремя); + ОписаниеТипа = Новый ОписаниеТипов("Дата", Неопределено, Неопределено, КвалификаторДаты); + Возврат ОписаниеТипа.ПривестиЗначение(Строка); + +КонецФункции + +Функция ДатаИзСтрокиRFC7231(Знач Строка) Экспорт + + Разделители = ",-:/\."; + Для Индекс = 1 По СтрДлина(Разделители) Цикл + Разделитель = Сред(Разделители, Индекс, 1); + Строка = СтрЗаменить(Строка, Разделитель, " "); + КонецЦикла; + Строка = СтрЗаменить(Строка, " ", " "); + СоставляющиеДаты = СтрРазделить(Строка, " "); + + Если СоставляющиеДаты.Количество() < 7 Тогда + Возврат '00010101'; + КонецЕсли; + + МесяцСтр = СоставляющиеДаты[2]; + + Месяцы = СтрРазделить("Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec", ","); + Месяц = Месяцы.Найти(МесяцСтр); + Если Месяц = Неопределено Тогда + Возврат '00010101'; + КонецЕсли; + + Дата = СоставляющиеДаты[3] + Формат(Месяц + 1, "ЧЦ=2; ЧВН=;") + СоставляющиеДаты[1]; + Время = СоставляющиеДаты[4] + СоставляющиеДаты[5] + СоставляющиеДаты[6]; + + Возврат ДатаИзСтроки(Дата + Время); + +КонецФункции + +Процедура РазбитьСтрокуПоРазделителю(ИзвлекаемаяЧасть, ОстальнаяЧасть, Разделитель, Инверсия = Ложь) + + Индекс = СтрНайти(ОстальнаяЧасть, Разделитель); + Если Индекс Тогда + ИзвлекаемаяЧасть = Лев(ОстальнаяЧасть, Индекс - 1); + ОстальнаяЧасть = Сред(ОстальнаяЧасть, Индекс + СтрДлина(Разделитель)); + Если Инверсия Тогда + ДляОбмена = ИзвлекаемаяЧасть; + ИзвлекаемаяЧасть = ОстальнаяЧасть; + ОстальнаяЧасть = ДляОбмена; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +Функция РазделитьПоПервомуНайденномуРазделителю(Строка, Разделители) + + МинимальныйИндекс = СтрДлина(Строка); + ПервыйРазделитель = ""; + + Для Каждого Разделитель Из Разделители Цикл + Индекс = СтрНайти(Строка, Разделитель); + Если Индекс = 0 Тогда + Продолжить; + КонецЕсли; + Если Индекс < МинимальныйИндекс Тогда + МинимальныйИндекс = Индекс; + ПервыйРазделитель = Разделитель; + КонецЕсли; + КонецЦикла; + + Результат = Новый Массив; + Если ЗначениеЗаполнено(ПервыйРазделитель) Тогда + Результат.Добавить(Лев(Строка, МинимальныйИндекс - 1)); + Результат.Добавить(Сред(Строка, МинимальныйИндекс + СтрДлина(ПервыйРазделитель))); + Результат.Добавить(ПервыйРазделитель); + Иначе + Результат.Добавить(Строка); + Результат.Добавить(""); + Результат.Добавить(Неопределено); + КонецЕсли; + + Возврат Результат; + +КонецФункции + +Функция РазбитьСтрокуПоСтроке(Знач Строка, Разделитель) + + Результат = Новый Массив; + Пока Истина Цикл + Позиция = СтрНайти(Строка, Разделитель); + Если Позиция = 0 И ЗначениеЗаполнено(Строка) Тогда + Результат.Добавить(Строка); + Прервать; + КонецЕсли; + + ПерваяЧасть = Лев(Строка, Позиция - СтрДлина(Разделитель) + 1); + Результат.Добавить(ПерваяЧасть); + Строка = Сред(Строка, Позиция + СтрДлина(Разделитель)); + КонецЦикла; + + Возврат Результат; + +КонецФункции + +Функция ДобавитьЛидирующуюТочку(Знач Домен) + + Если Не СтрНачинаетсяС(Домен, ".") Тогда + Домен = "." + Домен; + КонецЕсли; + + Возврат Домен; + +КонецФункции + +Функция ВырезатьТекст(Текст, МаксимальнаяДлинаТекста = 1000) + + Если НайтиНедопустимыеСимволыXML(Текст) Тогда + Возврат НСтр("ru ='<Данные>'"); + КонецЕсли; + + Если СтрДлина(Текст) <= МаксимальнаяДлинаТекста Тогда + Результат = Текст; + Иначе + ПоловинаМаксимальнойДлиныТекста = МаксимальнаяДлинаТекста / 2; + Результат = Лев(Текст, ПоловинаМаксимальнойДлиныТекста); + Результат = Результат + Символы.ПС + "..." + Символы.ПС; + Результат = Результат + Прав(Текст, ПоловинаМаксимальнойДлиныТекста); + КонецЕсли; + + Возврат Результат; + +КонецФункции + +Функция Объединить(ГлавныйИсточник, ДополнительныйИсточник) + + Результат = ГлавныйИсточник; + Дополнить(ГлавныйИсточник, ДополнительныйИсточник); + Возврат Результат; + +КонецФункции + +Функция Скопировать(Источник) + + #Если МобильноеПриложениеСервер Тогда + ПараметрыПреобразования = Неопределено; + Если ТипЗнч(Источник) = Тип("Структура") Тогда + ПараметрыПреобразования = Новый Структура("ПрочитатьВСоответствие", Ложь); + КонецЕсли; + Возврат JsonВОбъект(ОбъектВJson(Источник),, ПараметрыПреобразования); + #Иначе + Возврат ЗначениеИзСтрокиВнутр(ЗначениеВСтрокуВнутр(Источник)); + #КонецЕсли + +КонецФункции + +Процедура Дополнить(Приемник, Источник) + + Если Источник = Неопределено Тогда + Возврат; + КонецЕсли; + + Для Каждого ЭлементИсточника Из Источник Цикл + ПараметрНайден = Ложь; + + Если ТипЗнч(Приемник) = Тип("Соответствие") Тогда + ПараметрНайден = Приемник.Получить(ЭлементИсточника.Ключ) <> Неопределено; + КонецЕсли; + + Если ТипЗнч(Приемник) = Тип("Структура") Тогда + ПараметрНайден = Приемник.Свойство(ЭлементИсточника.Ключ); + КонецЕсли; + + Если Не ПараметрНайден ИЛИ ПараметрНайден И ЭлементИсточника.Значение <> Неопределено Тогда + Приемник.Вставить(ЭлементИсточника.Ключ, ЭлементИсточника.Значение); + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +#КонецОбласти + +#КонецОбласти diff --git a/Проект_деньги/src/CommonModules/КоннекторHTTP/КоннекторHTTP.mdo b/Проект_деньги/src/CommonModules/КоннекторHTTP/КоннекторHTTP.mdo new file mode 100644 index 0000000..eb40a46 --- /dev/null +++ b/Проект_деньги/src/CommonModules/КоннекторHTTP/КоннекторHTTP.mdo @@ -0,0 +1,11 @@ + + + КоннекторHTTP + + ru + Коннектор: удобный HTTP-клиент для 1С:Предприятие 8 + + true + true + true + diff --git a/Проект_деньги/src/CommonModules/Обмен/Module.bsl b/Проект_деньги/src/CommonModules/Обмен/Module.bsl new file mode 100644 index 0000000..f990b9c --- /dev/null +++ b/Проект_деньги/src/CommonModules/Обмен/Module.bsl @@ -0,0 +1,297 @@ + +#Область ПрограммныйИнтерфейс + +// Получить префикс номера. +// +// Возвращаемое значение: +// Строка - Получить префикс номера +Функция ПолучитьПрефиксНомера() Экспорт + + //@skip-check reading-attribute-from-database + Если ПланыОбмена.Мобильные.ЭтотУзел().Код = "" Тогда + Возврат ""; + Иначе + Возврат ПланыОбмена.Мобильные.ЭтотУзел().Код + "-"; + КонецЕсли; + +КонецФункции + +// Регистрация изменений. +//@skip-check module-empty-method +Процедура РегистрацияИзменений() Экспорт + + + +КонецПроцедуры + +// Обмен зарегистрировать изменения. +// +// Параметры: +// Источник - СправочникОбъект.ЕдиницыИзмерений, СправочникОбъект.Пользователи, СправочникОбъект.Валюты, СправочникОбъект.Счета, СправочникОбъект.ВидыДоходов, СправочникОбъект.Банки, СправочникОбъект.Номенклатура - Источник +// Отказ - Булево - Отказ +Процедура ОбменЗарегистрироватьИзменения(Источник, Отказ) Экспорт + + ЗарегистрироватьИзменения(Источник); + +КонецПроцедуры + +// Зарегистрировать изменения. +// +// Параметры: +// Источник - ДокументОбъект.Вложения, ДокументОбъект.Доходы, ДокументОбъект.Продажи, ДокументОбъект.Покупки, ДокументОбъект.СоответствиеНоменклатуры, ДокументОбъект.ПланированиеБюджета, ДокументОбъект.ВводНачальныхОстатков, ДокументОбъект.КоммунальныеПлатежи, ДокументОбъект.ПеремещениеСнятиеДенежныхСредств, ДокументОбъект.Желания, СправочникОбъект.ЕдиницыИзмерений, СправочникОбъект.Пользователи, СправочникОбъект.Валюты, СправочникОбъект.Счета, СправочникОбъект.ВидыДоходов, СправочникОбъект.Банки, СправочникОбъект.Номенклатура - Источник +Процедура ЗарегистрироватьИзменения(Источник) Экспорт + + Если Источник.ОбменДанными.Загрузка Тогда + Возврат + КонецЕсли; + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ РАЗЛИЧНЫЕ + | Мобильные.Ссылка КАК Ссылка + |ИЗ + | ПланОбмена.Мобильные КАК Мобильные + |ГДЕ + | Мобильные.Ссылка <> &ЭтотУзел"; + + Запрос.УстановитьПараметр("ЭтотУзел", ПланыОбмена.Мобильные.ЭтотУзел()); + + РезультатЗапроса = Запрос.Выполнить(); + + Выборка = РезультатЗапроса.Выбрать(); + + Пока Выборка.Следующий() Цикл + Источник.ОбменДанными.Получатели.Добавить(Выборка.Ссылка); + КонецЦикла; + +КонецПроцедуры + +// Обмен зарегистрировать изменения документа. +// +// Параметры: +// Источник - ДокументОбъект.Вложения, ДокументОбъект.Доходы, ДокументОбъект.Продажи, ДокументОбъект.Покупки, ДокументОбъект.СоответствиеНоменклатуры, ДокументОбъект.ПланированиеБюджета, ДокументОбъект.ВводНачальныхОстатков, ДокументОбъект.КоммунальныеПлатежи, ДокументОбъект.ПеремещениеСнятиеДенежныхСредств, ДокументОбъект.Желания - Источник +// Отказ - Булево - Отказ +// РежимЗаписи - РежимЗаписиДокумента - Режим записи +// РежимПроведения - РежимПроведенияДокумента - Режим проведения +Процедура ОбменЗарегистрироватьИзмененияДокумента(Источник, Отказ, РежимЗаписи, РежимПроведения) Экспорт + + Если Источник.ДополнительныеСвойства.Свойство("НеРегистрировать") Тогда + Возврат; + КонецЕсли; + + ЗарегистрироватьИзменения(Источник); + +КонецПроцедуры + +// Зарегистрировать все объекты. +// +// Параметры: +// Узел - ПланОбменаСсылка +Процедура ЗарегистрироватьВсеОбъекты(Узел) Экспорт + + //зарегистрируем все справочники + Для каждого Справочник Из Метаданные.Справочники Цикл + //@skip-check query-in-loop + ДанныеСправочников = ВернутьДанные(Справочник.ПолноеИмя(), Истина); + Если ЗначениеЗаполнено(ДанныеСправочников) Тогда + Данные = Новый Массив(); + Для каждого Элемент Из ДанныеСправочников Цикл + Данные.Добавить(Элемент); + КонецЦикла; + ПланыОбмена.ЗарегистрироватьИзменения(Узел, Данные); + КонецЕсли; + КонецЦикла; + + //зарегистируем все документы + Для каждого Документ Из Метаданные.Документы Цикл + //@skip-check query-in-loop + ДанныеДокументов = ВернутьДанные(Документ.ПолноеИмя(), Ложь); + Если ЗначениеЗаполнено(ДанныеДокументов) Тогда + Данные = Новый Массив(); + Для каждого Элемент Из ДанныеДокументов Цикл + Данные.Добавить(Элемент); + КонецЦикла; + ПланыОбмена.ЗарегистрироватьИзменения(Узел, Данные); + КонецЕсли; + КонецЦикла; + + //зарегистрируем все регистры + Для каждого Регистр Из Метаданные.РегистрыСведений Цикл + ПланыОбмена.ЗарегистрироватьИзменения(Узел, Регистр); + КонецЦикла; + +КонецПроцедуры + +Функция requstGET(Запрос) Экспорт + + Возврат ДанныеДляМобильногоПриложения(Запрос); + +КонецФункции + +Функция requstPOST(Запрос) Экспорт + + Возврат ЗаписатьОбменМобильноеСервер(Запрос); + +КонецФункции + +Функция ПараметрыСоединения() Экспорт + + Результат = Новый Структура; + Результат.Вставить("Сервер", "192.168.31.221"); + Результат.Вставить("Порт", 81); + Результат.Вставить("Пользователь", ""); + Результат.Вставить("Пароль", ""); + Результат.Вставить("Таймаут", 60); + Результат.Вставить("АдресРезурса", "ut/hs"); + +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Функция ВернутьДанные(ИмяМетаданных, ЭтоСправочник) + + Данные = Новый Массив; + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | Данные.Ссылка КАК Ссылка + |ИЗ + | "+ ИмяМетаданных+" КАК Данные"; + + Если ЭтоСправочник Тогда + Запрос.Текст = Запрос.Текст + " ГДЕ НЕ Данные.Предопределенный"; + КонецЕсли; + + РезультатЗапроса = Запрос.Выполнить(); + + Если РезультатЗапроса.Пустой() Тогда + Возврат Данные; + КонецЕсли; + + Выборка = РезультатЗапроса.Выбрать(); + + Пока Выборка.Следующий() Цикл + Данные.Добавить(Выборка.Ссылка); + КонецЦикла; + + Возврат Данные; + +КонецФункции + +Функция ДанныеДляМобильногоПриложения(Запрос) + + Результат = ПараметрыОтвета(); + КодСостаяния = 200; + + Попытка + + УзелКод = Запрос["ПараметрыЗапроса"].Получить("node"); + Узел = ПланыОбмена.Мобильные.НайтиПоКоду(УзелКод); + + Если ЗначениеЗаполнено(Узел) Тогда + УзелОбъект = Узел.ПолучитьОбъект(); + ФайлОбмена = ПолучитьИмяВременногоФайла("xml"); + УзелОбъект.ЗаписатьСообщениеСИзменениямиВФайл(ФайлОбмена); + ДД = Новый ДвоичныеДанные(ФайлОбмена); + УдалитьФайлы(ФайлОбмена); + XMLВBase64 = Base64Строка(ДД); + Результат.data = XMLВBase64; + Иначе + КодСостаяния = 400; + Результат.error.Добавить(СтрШаблон("Не удалость найти узел ""%1""", УзелКод)); + КонецЕсли; + + Исключение + КодСостаяния = 500; + Результат.error.Добавить(ОписаниеОшибки()); + КонецПопытки; + + Ответ = СформироватьОтвет(Результат, КодСостаяния); + + Возврат Ответ; + +КонецФункции + +Функция ЗаписатьОбменМобильноеСервер(Запрос) + + Результат = ПараметрыОтвета(); + КодСостаяния = 200; + + Попытка + + УзелКод = Запрос["ПараметрыЗапроса"].Получить("node"); + Узел = ПланыОбмена.Мобильные.НайтиПоКоду(УзелКод); + + Если ЗначениеЗаполнено(Узел) Тогда + УзелОбъект = Узел.ПолучитьОбъект(); + ФайлОбмена = ПолучитьИмяВременногоФайла("xml"); + + ТелоЗапроса = Запрос.ПолучитьТелоКакСтроку(); + ПараметрыПреобразования = Новый Структура("ПрочитатьВСоответствие", Ложь); + ПараметрыЗапроса = КоннекторHTTP.JsonВОбъект(ТелоЗапроса,, ПараметрыПреобразования); + + Если ЗначениеЗаполнено(ПараметрыЗапроса.data) Тогда + ДД = Base64Значение(ПараметрыЗапроса.data); + ДД.Записать(ФайлОбмена); + ДанныеЗаписи = УзелОбъект.ПрочитатьСообщениеСИзменениямиФайл(ФайлОбмена, Новый Массив, Истина); + + Для каждого Элем Из ДанныеЗаписи.МассивДокументов Цикл + + ДоступностьПроведения = СокрЛП(Элем.Метаданные().Проведение); + + Если ДоступностьПроведения = "Запретить" Тогда + Продолжить; + КонецЕсли; + + Если Не Элем.ПометкаУдаления Тогда + Объект = Элем.ПолучитьОбъект(); + Объект.Записать(РежимЗаписиДокумента.Проведение); + КонецЕсли; + КонецЦикла; + + Результат.data = СтрШаблон("Отправлено %1 документ(ов)", ДанныеЗаписи.МассивДокументов.Количество()); + Иначе + КодСостаяния = 400; + Результат.error.Добавить("Не верный формат запроса"); + КонецЕсли; + Иначе + КодСостаяния = 400; + Результат.error.Добавить(СтрШаблон("Не удалость найти узел ""%1""", УзелКод)); + КонецЕсли; + + Исключение + КодСостаяния = 500; + Результат.error.Добавить(ОписаниеОшибки()); + КонецПопытки; + + Ответ = СформироватьОтвет(Результат, КодСостаяния); + + Возврат Ответ; + +КонецФункции + +Функция ПараметрыОтвета() + + Возврат Новый Структура("data, error", "", Новый Массив); + +КонецФункции + +Функция СформироватьОтвет(Данные, КодСостояния = 200) + + #Если МобильноеПриложениеСервер Тогда + HTTPОтвет = Неопределено; + #Иначе + HTTPОтвет = Новый HTTPСервисОтвет(КодСостояния); + HTTPОтвет.УстановитьТелоИзСтроки(КоннекторHTTP.ОбъектВJson(Данные)); + #КонецЕсли + + Возврат HTTPОтвет; + +КонецФункции + +#КонецОбласти + + diff --git a/Проект_деньги/src/CommonModules/Обмен/Обмен.mdo b/Проект_деньги/src/CommonModules/Обмен/Обмен.mdo new file mode 100644 index 0000000..0a2a939 --- /dev/null +++ b/Проект_деньги/src/CommonModules/Обмен/Обмен.mdo @@ -0,0 +1,10 @@ + + + Обмен + + ru + Обмен + + true + true + diff --git a/Проект_деньги/src/CommonModules/ОбработчикиОбновления/Module.bsl b/Проект_деньги/src/CommonModules/ОбработчикиОбновления/Module.bsl new file mode 100644 index 0000000..52c841c --- /dev/null +++ b/Проект_деньги/src/CommonModules/ОбработчикиОбновления/Module.bsl @@ -0,0 +1,32 @@ +#Область ПрограммныйИнтерфейс + +Процедура ПроверкаВерсии() Экспорт + + Если НЕ Метаданные.Версия = Константы.ВерияКонфигурации.Получить() Тогда + //ЗаполнитьВалютыВСчетах(); + Константы.ВерияКонфигурации.Установить(Метаданные.Версия); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Процедура ЗаполнитьВалютыВСчетах() + + Выборка = Справочники.Счета.Выбрать(); + Валюта = Справочники.Валюты.RUB; + + Пока Выборка.Следующий() Цикл + Если НЕ ЗначениеЗаполнено(Выборка.Валюта) Тогда + Объект = Выборка.ПолучитьОбъект(); + Объект.Валюта = Валюта; + Объект.ОбменДанными.Загрузка = Истина; + Объект.Записать(); + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/Проект_деньги/src/CommonModules/ОбработчикиОбновления/ОбработчикиОбновления.mdo b/Проект_деньги/src/CommonModules/ОбработчикиОбновления/ОбработчикиОбновления.mdo new file mode 100644 index 0000000..46fce4b --- /dev/null +++ b/Проект_деньги/src/CommonModules/ОбработчикиОбновления/ОбработчикиОбновления.mdo @@ -0,0 +1,10 @@ + + + ОбработчикиОбновления + + ru + Обработчики обновления + + true + true + diff --git a/Проект_деньги/src/CommonModules/ОбщегоНазначенияКлиентСервер/Module.bsl b/Проект_деньги/src/CommonModules/ОбщегоНазначенияКлиентСервер/Module.bsl new file mode 100644 index 0000000..b60972a --- /dev/null +++ b/Проект_деньги/src/CommonModules/ОбщегоНазначенияКлиентСервер/Module.bsl @@ -0,0 +1,428 @@ +#Область ПрограммныйИнтерфейс + +// Получить пользователя. +// +// Возвращаемое значение: +// СправочникСсылка.Пользователи - Получить пользователя +Функция ПолучитьПользователя() Экспорт + + Возврат ЗначениеКонстанты("ТекущийПользователь"); + +КонецФункции + +// Значение ко константы. +// +// Параметры: +// ИмяКонстанты - Строка - Имя константы +// +// Возвращаемое значение: +// Произвольный - Значение ко константы +Функция ЗначениеКонстанты(ИмяКонстанты) Экспорт + + Возврат Константы[ИмяКонстанты].Получить(); + +КонецФункции + +// Выводить диалоги. +// +// Возвращаемое значение: +// Булево - Выводить диалоги +Функция ВыводитьДиалоги() Экспорт + + ВыводитьДиалогиВвода = ЗначениеКонстанты("ВыводитьДиалогиВвода"); + Выводить = ?(ЗначениеЗаполнено(ВыводитьДиалогиВвода), ВыводитьДиалогиВвода, Ложь); + Возврат Выводить; + +КонецФункции + +// Один документ. +// +// Возвращаемое значение: +// Булево - Один документ +Функция ОдинДокумент() Экспорт + + ОдинДокумент = ЗначениеКонстанты("ОдинДокументРасходов"); + ОдинДокумент = ?(ЗначениеЗаполнено(ОдинДокумент), ОдинДокумент, Ложь); + Возврат ОдинДокумент; + +КонецФункции + +// Заполнить ответственного. +// +// Параметры: +// Источник - ДокументОбъект.Продажи, ДокументОбъект.КоммунальныеПлатежи, ДокументОбъект.Доходы, ДокументОбъект.Покупки, ДокументОбъект.Желания, ДокументОбъект.ПеремещениеСнятиеДенежныхСредств - Источник +// Отказ - Булево - Отказ +// РежимЗаписи - РежимЗаписиДокумента - Режим записи +// РежимПроведения - РежимПроведенияДокумента - Режим проведения +Процедура ЗаполнитьОтветственного(Источник, Отказ, РежимЗаписи, РежимПроведения) Экспорт + + Пользователь = ПолучитьПользователя(); + + Если ЗначениеЗаполнено(Пользователь) И НЕ ЗначениеЗаполнено(Источник.Ответственный) Тогда + Источник.Ответственный = Пользователь; + КонецЕсли; + +КонецПроцедуры + +// Формирует и выводит сообщение, которое может быть связано с элементом управления формы. +// +// В фоновом задании длительной операции, если вызов выполнен вне транзакции, +// сообщение записывается в служебный регистр и отправляется сразу на клиент, +// если подключена система взаимодействия. +// В конце фонового задания длительной операции, а также при отправке прогресса, +// все сообщения извлекаются из очереди сообщений фонового задания, +// записываются в служебный регистр и отправляются сразу на клиент, +// если подключена система взаимодействия. +// +// АПК:142-выкл 4 необязательных параметра для совместимости +// с устаревшей процедурой ОбщегоНазначенияКлиентСервер.СообщитьПользователю. +// +// Параметры: +// ТекстСообщенияПользователю - Строка - текст сообщения. +// КлючДанных - ЛюбаяСсылка - объект или ключ записи информационной базы, к которому это сообщение относится. +// Поле - Строка - наименование реквизита формы. +// ПутьКДанным - Строка - путь к данным (путь к реквизиту формы). +// Отказ - Булево - выходной параметр, всегда устанавливается в значение Истина. +// +// Пример: +// +// 1. Для вывода сообщения у поля управляемой формы, связанного с реквизитом объекта: +// ОбщегоНазначения.СообщитьПользователю( +// НСтр("ru = 'Сообщение об ошибке.'"), , +// "ПолеВРеквизитеФормыОбъект", +// "Объект"); +// +// Альтернативный вариант использования в форме объекта: +// ОбщегоНазначения.СообщитьПользователю( +// НСтр("ru = 'Сообщение об ошибке.'"), , +// "Объект.ПолеВРеквизитеФормыОбъект"); +// +// 2. Для вывода сообщения рядом с полем управляемой формы, связанным с реквизитом формы: +// ОбщегоНазначения.СообщитьПользователю( +// НСтр("ru = 'Сообщение об ошибке.'"), , +// "ИмяРеквизитаФормы"); +// +// 3. Для вывода сообщения связанного с объектом информационной базы: +// ОбщегоНазначения.СообщитьПользователю( +// НСтр("ru = 'Сообщение об ошибке.'"), ОбъектИнформационнойБазы, "Ответственный",,Отказ); +// +// 4. Для вывода сообщения по ссылке на объект информационной базы: +// ОбщегоНазначения.СообщитьПользователю( +// НСтр("ru = 'Сообщение об ошибке.'"), Ссылка, , , Отказ); +// +// Случаи некорректного использования: +// 1. Передача одновременно параметров КлючДанных и ПутьКДанным. +// 2. Передача в параметре КлючДанных значения типа отличного от допустимого. +// 3. Установка ссылки без установки поля (и/или пути к данным). +// +//@skip-check method-too-many-params +Процедура СообщитьПользователю(Знач ТекстСообщенияПользователю, Знач КлючДанных = Неопределено, Знач Поле = "", + Знач ПутьКДанным = "", Отказ = Ложь) Экспорт + + ЭтоОбъект = Ложь; + + Если КлючДанных <> Неопределено + И XMLТипЗнч(КлючДанных) <> Неопределено Тогда + + ТипЗначенияСтрокой = XMLТипЗнч(КлючДанных).ИмяТипа; + ЭтоОбъект = СтрНайти(ТипЗначенияСтрокой, "Object.") > 0; + КонецЕсли; + + Сообщение = СообщениеПользователю(ТекстСообщенияПользователю, + КлючДанных, Поле, ПутьКДанным, Отказ, ЭтоОбъект); + + Сообщение.Сообщить(); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +// Добавить или заменить существующий элемент отбора динамического списка. +// +// Параметры: +// ДинамическийСписок - ДинамическийСписок - Список, в котором требуется установить отбор. +// ИмяПоля - Строка - Поле, по которому необходимо установить отбор. +// ПравоеЗначение - Произвольный - Значение отбора. +// Необязательный. Значение по умолчанию: Неопределено. +// Внимание! Если передать Неопределено, то значение не будет изменено. +// ВидСравнения - ВидСравненияКомпоновкиДанных - Условие отбора. +// Представление - Строка - Представление элемента компоновки данных. +// Необязательный. Значение по умолчанию: Неопределено. +// Если указано, то выводится только флажок использования с указанным представлением (значение не выводится). +// Для очистки (чтобы значение снова выводилось) следует передать пустую строку. +// Использование - Булево - Флажок использования этого отбора. +// Необязательный. Значение по умолчанию: Неопределено. +// РежимОтображения - РежимОтображенияЭлементаНастройкиКомпоновкиДанных - Способ отображения этого отбора +// пользователю. +// * РежимОтображенияЭлементаНастройкиКомпоновкиДанных.БыстрыйДоступ - В группе быстрых настроек над списком. +// * РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Обычный - В настройка списка (в подменю Еще). +// * РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный - Запретить пользователю менять этот отбор. +// ИдентификаторПользовательскойНастройки - Строка - Уникальный идентификатор этого отбора. +// Используется для связи с пользовательскими настройками. +// +//@skip-check method-too-many-params +Процедура УстановитьЭлементОтбораДинамическогоСписка(ДинамическийСписок, ИмяПоля, + ПравоеЗначение = Неопределено, + ВидСравнения = Неопределено, + Представление = Неопределено, + Использование = Неопределено, + РежимОтображения = Неопределено, + ИдентификаторПользовательскойНастройки = Неопределено) Экспорт + + Если РежимОтображения = Неопределено Тогда + РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный; + КонецЕсли; + + Если РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный Тогда + ОтборДинамическогоСписка = ДинамическийСписок.КомпоновщикНастроек.ФиксированныеНастройки.Отбор; + Иначе + ОтборДинамическогоСписка = ДинамическийСписок.КомпоновщикНастроек.Настройки.Отбор; + КонецЕсли; + + УстановитьЭлементОтбора( + ОтборДинамическогоСписка, + ИмяПоля, + ПравоеЗначение, + ВидСравнения, + Представление, + Использование, + РежимОтображения, + ИдентификаторПользовательскойНастройки); + + КонецПроцедуры + + // Добавить или заменить существующий элемент отбора. +// +// Параметры: +// ОбластьПоискаДобавления - КоллекцияЭлементовОтбораКомпоновкиДанных - контейнер с элементами и группами отбора, +// например, Список.Отбор или группа в отборе. +// ИмяПоля - Строка - имя поля компоновки данных (заполняется всегда). +// ПравоеЗначение - произвольный - сравниваемое значение. +// ВидСравнения - ВидСравненияКомпоновкиДанных - вид сравнения. +// Представление - Строка - представление элемента компоновки данных. +// Использование - Булево - использование элемента. +// РежимОтображения - РежимОтображенияЭлементаНастройкиКомпоновкиДанных - режим отображения. +// ИдентификаторПользовательскойНастройки - Строка - см. ОтборКомпоновкиДанных.ИдентификаторПользовательскойНастройки +// в синтакс-помощнике. +// +//@skip-check method-too-many-params +Процедура УстановитьЭлементОтбора(ОбластьПоискаДобавления, + Знач ИмяПоля, + Знач ПравоеЗначение = Неопределено, + Знач ВидСравнения = Неопределено, + Знач Представление = Неопределено, + Знач Использование = Неопределено, + Знач РежимОтображения = Неопределено, + Знач ИдентификаторПользовательскойНастройки = Неопределено) Экспорт + + ЧислоИзмененных = ИзменитьЭлементыОтбора(ОбластьПоискаДобавления, ИмяПоля, Представление, + ПравоеЗначение, ВидСравнения, Использование, РежимОтображения, ИдентификаторПользовательскойНастройки); + + Если ЧислоИзмененных = 0 Тогда + Если ВидСравнения = Неопределено Тогда + Если ТипЗнч(ПравоеЗначение) = Тип("Массив") + Или ТипЗнч(ПравоеЗначение) = Тип("ФиксированныйМассив") + Или ТипЗнч(ПравоеЗначение) = Тип("СписокЗначений") Тогда + ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке; + Иначе + ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + КонецЕсли; + КонецЕсли; + Если РежимОтображения = Неопределено Тогда + РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный; + КонецЕсли; + ДобавитьЭлементКомпоновки(ОбластьПоискаДобавления, ИмяПоля, ВидСравнения, + ПравоеЗначение, Представление, Использование, РежимОтображения, ИдентификаторПользовательскойНастройки); + КонецЕсли; + +КонецПроцедуры + +// Изменить элемент отбора с заданным именем поля или представлением. +// +// Параметры: +// ОбластьПоиска - КоллекцияЭлементовОтбораКомпоновкиДанных - контейнер с элементами и группами отбора, +// например, Список.Отбор или группа в отборе. +// ИмяПоля - Строка - имя поля компоновки данных (заполняется всегда). +// Представление - Строка - представление элемента компоновки данных. +// ПравоеЗначение - Произвольный - сравниваемое значение. +// ВидСравнения - ВидСравненияКомпоновкиДанных - вид сравнения. +// Использование - Булево - использование элемента. +// РежимОтображения - РежимОтображенияЭлементаНастройкиКомпоновкиДанных - режим отображения. +// ИдентификаторПользовательскойНастройки - Строка - см. ОтборКомпоновкиДанных.ИдентификаторПользовательскойНастройки +// в синтакс-помощнике. +// +// Возвращаемое значение: +// Число - количество измененных элементов. +// +//@skip-check method-too-many-params +Функция ИзменитьЭлементыОтбора(ОбластьПоиска, + Знач ИмяПоля = Неопределено, + Знач Представление = Неопределено, + Знач ПравоеЗначение = Неопределено, + Знач ВидСравнения = Неопределено, + Знач Использование = Неопределено, + Знач РежимОтображения = Неопределено, + Знач ИдентификаторПользовательскойНастройки = Неопределено) Экспорт + + Если ЗначениеЗаполнено(ИмяПоля) Тогда + ЗначениеПоиска = Новый ПолеКомпоновкиДанных(ИмяПоля); + СпособПоиска = 1; + Иначе + СпособПоиска = 2; + ЗначениеПоиска = Представление; + КонецЕсли; + + МассивЭлементов = Новый Массив; + + НайтиРекурсивно(ОбластьПоиска.Элементы, МассивЭлементов, СпособПоиска, ЗначениеПоиска); + + Для Каждого Элемент Из МассивЭлементов Цикл + Если ИмяПоля <> Неопределено Тогда + Элемент.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(ИмяПоля); + КонецЕсли; + Если Представление <> Неопределено Тогда + Элемент.Представление = Представление; + КонецЕсли; + Если Использование <> Неопределено Тогда + Элемент.Использование = Использование; + КонецЕсли; + Если ВидСравнения <> Неопределено Тогда + Элемент.ВидСравнения = ВидСравнения; + КонецЕсли; + Если ПравоеЗначение <> Неопределено Тогда + Элемент.ПравоеЗначение = ПравоеЗначение; + КонецЕсли; + Если РежимОтображения <> Неопределено Тогда + Элемент.РежимОтображения = РежимОтображения; + КонецЕсли; + Если ИдентификаторПользовательскойНастройки <> Неопределено Тогда + Элемент.ИдентификаторПользовательскойНастройки = ИдентификаторПользовательскойНастройки; + КонецЕсли; + КонецЦикла; + + Возврат МассивЭлементов.Количество(); + +КонецФункции + +Процедура НайтиРекурсивно(КоллекцияЭлементов, МассивЭлементов, СпособПоиска, ЗначениеПоиска) + + Для каждого ЭлементОтбора Из КоллекцияЭлементов Цикл + + Если ТипЗнч(ЭлементОтбора) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда + + Если СпособПоиска = 1 Тогда + Если ЭлементОтбора.ЛевоеЗначение = ЗначениеПоиска Тогда + МассивЭлементов.Добавить(ЭлементОтбора); + КонецЕсли; + ИначеЕсли СпособПоиска = 2 Тогда + Если ЭлементОтбора.Представление = ЗначениеПоиска Тогда + МассивЭлементов.Добавить(ЭлементОтбора); + КонецЕсли; + КонецЕсли; + Иначе + + НайтиРекурсивно(ЭлементОтбора.Элементы, МассивЭлементов, СпособПоиска, ЗначениеПоиска); + + Если СпособПоиска = 2 И ЭлементОтбора.Представление = ЗначениеПоиска Тогда + МассивЭлементов.Добавить(ЭлементОтбора); + КонецЕсли; + + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +// Добавить элемент компоновки в контейнер элементов компоновки. +// +// Параметры: +// ОбластьДобавления - КоллекцияЭлементовОтбораКомпоновкиДанных - контейнер с элементами и группами отбора, +// например, Список.Отбор или группа в отборе. +// ИмяПоля - Строка - имя поля компоновки данных (заполняется всегда). +// ПравоеЗначение - Произвольный - сравниваемое значение. +// ВидСравнения - ВидСравненияКомпоновкиДанных - вид сравнения. +// Представление - Строка - представление элемента компоновки данных. +// Использование - Булево - использование элемента. +// РежимОтображения - РежимОтображенияЭлементаНастройкиКомпоновкиДанных - режим отображения. +// ИдентификаторПользовательскойНастройки - Строка - см. ОтборКомпоновкиДанных.ИдентификаторПользовательскойНастройки +// в синтакс-помощнике. +// Возвращаемое значение: +// ЭлементОтбораКомпоновкиДанных - элемент компоновки. +// +//@skip-check method-too-many-params +Функция ДобавитьЭлементКомпоновки(ОбластьДобавления, + Знач ИмяПоля, + Знач ВидСравнения, + Знач ПравоеЗначение = Неопределено, + Знач Представление = Неопределено, + Знач Использование = Неопределено, + знач РежимОтображения = Неопределено, + знач ИдентификаторПользовательскойНастройки = Неопределено) Экспорт + + Элемент = ОбластьДобавления.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + Элемент.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(ИмяПоля); + Элемент.ВидСравнения = ВидСравнения; + + Если РежимОтображения = Неопределено Тогда + Элемент.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный; + Иначе + Элемент.РежимОтображения = РежимОтображения; + КонецЕсли; + + Если ПравоеЗначение <> Неопределено Тогда + Элемент.ПравоеЗначение = ПравоеЗначение; + КонецЕсли; + + Если Представление <> Неопределено Тогда + Элемент.Представление = Представление; + КонецЕсли; + + Если Использование <> Неопределено Тогда + Элемент.Использование = Использование; + КонецЕсли; + + // Важно: установка идентификатора должна выполняться + // в конце настройки элемента, иначе он будет скопирован + // в пользовательские настройки частично заполненным. + Если ИдентификаторПользовательскойНастройки <> Неопределено Тогда + Элемент.ИдентификаторПользовательскойНастройки = ИдентификаторПользовательскойНастройки; + ИначеЕсли Элемент.РежимОтображения <> РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный Тогда + Элемент.ИдентификаторПользовательскойНастройки = ИмяПоля; + КонецЕсли; + + Возврат Элемент; + +КонецФункции + +Функция СообщениеПользователю( + Знач ТекстСообщенияПользователю, + Знач КлючДанных, + Знач Поле, + Знач ПутьКДанным = "", + Отказ = Ложь, + ЭтоОбъект = Ложь) Экспорт + + Сообщение = Новый СообщениеПользователю; + Сообщение.Текст = ТекстСообщенияПользователю; + Сообщение.Поле = Поле; + + Если ЭтоОбъект Тогда + Сообщение.УстановитьДанные(КлючДанных); + Иначе + Сообщение.КлючДанных = КлючДанных; + КонецЕсли; + + Если НЕ ПустаяСтрока(ПутьКДанным) Тогда + Сообщение.ПутьКДанным = ПутьКДанным; + КонецЕсли; + + Отказ = Истина; + + Возврат Сообщение; + +КонецФункции + +#КонецОбласти + diff --git a/Проект_деньги/src/CommonModules/ОбщегоНазначенияКлиентСервер/ОбщегоНазначенияКлиентСервер.mdo b/Проект_деньги/src/CommonModules/ОбщегоНазначенияКлиентСервер/ОбщегоНазначенияКлиентСервер.mdo new file mode 100644 index 0000000..31f225e --- /dev/null +++ b/Проект_деньги/src/CommonModules/ОбщегоНазначенияКлиентСервер/ОбщегоНазначенияКлиентСервер.mdo @@ -0,0 +1,10 @@ + + + ОбщегоНазначенияКлиентСервер + + ru + Общего назначения клиент сервер + + true + true + diff --git a/Проект_деньги/src/CommonModules/Общий_ПД_Сервер/Module.bsl b/Проект_деньги/src/CommonModules/Общий_ПД_Сервер/Module.bsl new file mode 100644 index 0000000..0ab147e --- /dev/null +++ b/Проект_деньги/src/CommonModules/Общий_ПД_Сервер/Module.bsl @@ -0,0 +1,187 @@ +#Область ПрограммныйИнтерфейс + +// Получить единицу измерения. +// +// Параметры: +// Номенклатура - СправочникСсылка.Номенклатура +// +// Возвращаемое значение: +// СправочникСсылка.ЕдиницыИзмерений +Функция ПолучитьЕдиницуИзмерения(Номенклатура) Экспорт + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | Номенклатура.ЕдиницаИзмерения КАК ЕдиницаИзмерения + |ИЗ + | Справочник.Номенклатура КАК Номенклатура + |ГДЕ + | Номенклатура.Ссылка = &Ссылка"; + + Запрос.УстановитьПараметр("Ссылка", Номенклатура); + РезультатЗапроса = Запрос.Выполнить(); + Выборка = РезультатЗапроса.Выбрать(); + Выборка.Следующий(); + Возврат Выборка.ЕдиницаИзмерения; + +КонецФункции + +// Рассчет суммы ТЧ. +// +// Параметры: +// ТабЧасть - ТабличнаяЧасть +// +// Возвращаемое значение: +// Число - Рассчет суммы ТЧ +Функция РассчетСуммыТЧ(ТабЧасть) Экспорт + + Сумма = 0; + Для каждого Строка Из ТабЧасть Цикл + Сумма = Сумма + Строка.Сумма; + КонецЦикла; + Возврат Сумма; + +КонецФункции // РассчетСуммыТЧ() + +// Заполнить список активных счетов. +// +// Возвращаемое значение: +// СписокЗначений - Заполненый список активных счетов +// @skip-check doc-comment-collection-item-type +Функция ЗаполнитьСписокАктивныхСчетов() Экспорт + + СписокЗначений = Новый СписокЗначений; + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ДенежныеСредстваОстатки.Счет КАК Ссылка + |ИЗ + | РегистрНакопления.ДенежныеСредства.Остатки КАК ДенежныеСредстваОстатки + | + |СГРУППИРОВАТЬ ПО + | ДенежныеСредстваОстатки.Счет + | + |УПОРЯДОЧИТЬ ПО + | ДенежныеСредстваОстатки.Счет.Наименование"; + + РезультатЗапроса = Запрос.Выполнить(); + Если РезультатЗапроса.Пустой() Тогда + СписокЗначений.Добавить("Нет денег на счетах"); + Возврат СписокЗначений; + КонецЕсли; + Выборка = РезультатЗапроса.Выбрать(); + Пока Выборка.Следующий() Цикл + СписокЗначений.Добавить(Выборка.Ссылка); + КонецЦикла; + Возврат СписокЗначений; + +КонецФункции // ЗаполнитьСписокЗначений() + +// Получить цену комм услуги. +// +// Параметры: +// Период - Дата +// Номенклатура - СправочникСсылка.Номенклатура +// +// Возвращаемое значение: +// Число - Получить цену комм услуги +Функция ПолучитьЦенуКоммУслуги(Период, Номенклатура) Экспорт + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ЦеныКоммунальныхПлатежейСрезПоследних.Цена КАК Цена + |ИЗ + | РегистрСведений.ЦеныКоммунальныхПлатежей.СрезПоследних(&Период, Номенклатура = &Номенклатура) КАК ЦеныКоммунальныхПлатежейСрезПоследних"; + + Запрос.УстановитьПараметр("Номенклатура", Номенклатура); + Запрос.УстановитьПараметр("Период", Период); + + РезультатЗапроса = Запрос.Выполнить(); + Если РезультатЗапроса.Пустой() Тогда + Возврат 0; + Иначе + Выборка = РезультатЗапроса.Выбрать(); + Выборка.Следующий(); + Возврат Выборка.Цена; + КонецЕсли; + +КонецФункции // ПолучитьЦенуКоммУслуги() + +// Вернуть число месяца. +// +// Параметры: +// Месяц - Строка +// +// Возвращаемое значение: +// Произвольный - Вернуть число месяца +Функция ВернутьЧислоМесяца(Месяц) Экспорт + + Месяцы = Новый Структура; + Месяцы.Вставить("Январь", 1); + Месяцы.Вставить("Февраль", 2); + Месяцы.Вставить("Март", 3); + Месяцы.Вставить("Апрель", 4); + Месяцы.Вставить("Май", 5); + Месяцы.Вставить("Июнь", 6); + Месяцы.Вставить("Июль", 7); + Месяцы.Вставить("Август", 8); + Месяцы.Вставить("Сентябрь", 9); + Месяцы.Вставить("Октябрь", 10); + Месяцы.Вставить("Ноябрь", 11); + Месяцы.Вставить("Декабрь", 12); + Для каждого Элементы Из Месяцы Цикл + Если Элементы.Ключ = Строка(Месяц) Тогда + Возврат Элементы.Значение; + КонецЕсли; + КонецЦикла; + +КонецФункции // ВернутьЧислоМесяца() + +// Заполнить список счетов. +// +// Возвращаемое значение: +// СписокЗначений - Заполнить список счетов +//@skip-check doc-comment-collection-item-type +Функция ЗаполнитьСписокСчетов() Экспорт + + СписокЗначений = Новый СписокЗначений; + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | Счета.Ссылка КАК Ссылка + |ИЗ + | Справочник.Счета КАК Счета + |ГДЕ + | НЕ Счета.ПометкаУдаления"; + + РезультатЗапроса = Запрос.Выполнить(); + Выборка = РезультатЗапроса.Выбрать(); + Пока Выборка.Следующий() Цикл + СписокЗначений.Добавить(Выборка.Ссылка); + КонецЦикла; + Возврат СписокЗначений; + +КонецФункции + +// Добавить запись в регистр цен ком услуг. +// +// Параметры: +// Период - Дата +// Номенклатура - СправочникСсылка.Номенклатура +// Цена - Число +Процедура ДобавитьЗаписьВРегистрЦенКомУслуг(Период, Номенклатура, Цена) Экспорт + + НаборЗаписей = РегистрыСведений.ЦеныКоммунальныхПлатежей.СоздатьНаборЗаписей(); + НаборЗаписей.Отбор.Период.Установить(Период); + НаборЗаписей.Отбор.Номенклатура.Установить(Номенклатура); + Запись = НаборЗаписей.Добавить(); + Запись.Период = НачалоМесяца(Период); + Запись.Номенклатура = Номенклатура; + Запись.Цена = Цена; + + НаборЗаписей.Записать(Истина); + +КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/Проект_деньги/src/CommonModules/Общий_ПД_Сервер/Общий_ПД_Сервер.mdo b/Проект_деньги/src/CommonModules/Общий_ПД_Сервер/Общий_ПД_Сервер.mdo new file mode 100644 index 0000000..9a875c8 --- /dev/null +++ b/Проект_деньги/src/CommonModules/Общий_ПД_Сервер/Общий_ПД_Сервер.mdo @@ -0,0 +1,10 @@ + + + Общий_ПД_Сервер + + ru + Общий п д сервер + + true + true + diff --git a/Проект_деньги/src/CommonPictures/Бабки/Picture.png b/Проект_деньги/src/CommonPictures/Бабки/Picture.png new file mode 100644 index 0000000..bec721b Binary files /dev/null and b/Проект_деньги/src/CommonPictures/Бабки/Picture.png differ diff --git a/Проект_деньги/src/CommonPictures/Бабки/Бабки.mdo b/Проект_деньги/src/CommonPictures/Бабки/Бабки.mdo new file mode 100644 index 0000000..6de94d7 --- /dev/null +++ b/Проект_деньги/src/CommonPictures/Бабки/Бабки.mdo @@ -0,0 +1,8 @@ + + + Бабки + + ru + Бабки + + diff --git a/Проект_деньги/src/CommonPictures/Деньги/Picture.png b/Проект_деньги/src/CommonPictures/Деньги/Picture.png new file mode 100644 index 0000000..a2833f6 Binary files /dev/null and b/Проект_деньги/src/CommonPictures/Деньги/Picture.png differ diff --git a/Проект_деньги/src/CommonPictures/Деньги/Деньги.mdo b/Проект_деньги/src/CommonPictures/Деньги/Деньги.mdo new file mode 100644 index 0000000..1147ecc --- /dev/null +++ b/Проект_деньги/src/CommonPictures/Деньги/Деньги.mdo @@ -0,0 +1,8 @@ + + + Деньги + + ru + Деньги + + diff --git a/Проект_деньги/src/CommonPictures/Доходы/Picture.png b/Проект_деньги/src/CommonPictures/Доходы/Picture.png new file mode 100644 index 0000000..8cb34fc Binary files /dev/null and b/Проект_деньги/src/CommonPictures/Доходы/Picture.png differ diff --git a/Проект_деньги/src/CommonPictures/Доходы/Доходы.mdo b/Проект_деньги/src/CommonPictures/Доходы/Доходы.mdo new file mode 100644 index 0000000..82d1288 --- /dev/null +++ b/Проект_деньги/src/CommonPictures/Доходы/Доходы.mdo @@ -0,0 +1,8 @@ + + + Доходы + + ru + Доходы + + diff --git a/Проект_деньги/src/CommonPictures/ДоходыРасходы/Picture.png b/Проект_деньги/src/CommonPictures/ДоходыРасходы/Picture.png new file mode 100644 index 0000000..1fcf2b5 Binary files /dev/null and b/Проект_деньги/src/CommonPictures/ДоходыРасходы/Picture.png differ diff --git a/Проект_деньги/src/CommonPictures/ДоходыРасходы/ДоходыРасходы.mdo b/Проект_деньги/src/CommonPictures/ДоходыРасходы/ДоходыРасходы.mdo new file mode 100644 index 0000000..af82d7f --- /dev/null +++ b/Проект_деньги/src/CommonPictures/ДоходыРасходы/ДоходыРасходы.mdo @@ -0,0 +1,8 @@ + + + ДоходыРасходы + + ru + Доходы расходы + + diff --git a/Проект_деньги/src/CommonPictures/Желания/Picture.png b/Проект_деньги/src/CommonPictures/Желания/Picture.png new file mode 100644 index 0000000..06deeca Binary files /dev/null and b/Проект_деньги/src/CommonPictures/Желания/Picture.png differ diff --git a/Проект_деньги/src/CommonPictures/Желания/Желания.mdo b/Проект_деньги/src/CommonPictures/Желания/Желания.mdo new file mode 100644 index 0000000..225d8b9 --- /dev/null +++ b/Проект_деньги/src/CommonPictures/Желания/Желания.mdo @@ -0,0 +1,8 @@ + + + Желания + + ru + Желания + + diff --git a/Проект_деньги/src/CommonPictures/ИконкаДокументов/Picture.png b/Проект_деньги/src/CommonPictures/ИконкаДокументов/Picture.png new file mode 100644 index 0000000..953edff Binary files /dev/null and b/Проект_деньги/src/CommonPictures/ИконкаДокументов/Picture.png differ diff --git a/Проект_деньги/src/CommonPictures/ИконкаДокументов/ИконкаДокументов.mdo b/Проект_деньги/src/CommonPictures/ИконкаДокументов/ИконкаДокументов.mdo new file mode 100644 index 0000000..30a8072 --- /dev/null +++ b/Проект_деньги/src/CommonPictures/ИконкаДокументов/ИконкаДокументов.mdo @@ -0,0 +1,8 @@ + + + ИконкаДокументов + + ru + Иконка документов + + diff --git a/Проект_деньги/src/CommonPictures/ИконкаСправочники/Picture.png b/Проект_деньги/src/CommonPictures/ИконкаСправочники/Picture.png new file mode 100644 index 0000000..9a234c4 Binary files /dev/null and b/Проект_деньги/src/CommonPictures/ИконкаСправочники/Picture.png differ diff --git a/Проект_деньги/src/CommonPictures/ИконкаСправочники/ИконкаСправочники.mdo b/Проект_деньги/src/CommonPictures/ИконкаСправочники/ИконкаСправочники.mdo new file mode 100644 index 0000000..b46ce45 --- /dev/null +++ b/Проект_деньги/src/CommonPictures/ИконкаСправочники/ИконкаСправочники.mdo @@ -0,0 +1,8 @@ + + + ИконкаСправочники + + ru + Иконка справочники + + diff --git a/Проект_деньги/src/CommonPictures/КомПлатежи/Picture.png b/Проект_деньги/src/CommonPictures/КомПлатежи/Picture.png new file mode 100644 index 0000000..a07bb70 Binary files /dev/null and b/Проект_деньги/src/CommonPictures/КомПлатежи/Picture.png differ diff --git a/Проект_деньги/src/CommonPictures/КомПлатежи/КомПлатежи.mdo b/Проект_деньги/src/CommonPictures/КомПлатежи/КомПлатежи.mdo new file mode 100644 index 0000000..f69d4ae --- /dev/null +++ b/Проект_деньги/src/CommonPictures/КомПлатежи/КомПлатежи.mdo @@ -0,0 +1,8 @@ + + + КомПлатежи + + ru + Ком платежи + + diff --git a/Проект_деньги/src/CommonPictures/Отчеты/Picture.png b/Проект_деньги/src/CommonPictures/Отчеты/Picture.png new file mode 100644 index 0000000..63fc935 Binary files /dev/null and b/Проект_деньги/src/CommonPictures/Отчеты/Picture.png differ diff --git a/Проект_деньги/src/CommonPictures/Отчеты/Отчеты.mdo b/Проект_деньги/src/CommonPictures/Отчеты/Отчеты.mdo new file mode 100644 index 0000000..34a3c8e --- /dev/null +++ b/Проект_деньги/src/CommonPictures/Отчеты/Отчеты.mdo @@ -0,0 +1,8 @@ + + + Отчеты + + ru + Отчеты + + diff --git a/Проект_деньги/src/CommonPictures/Перевод/Picture.png b/Проект_деньги/src/CommonPictures/Перевод/Picture.png new file mode 100644 index 0000000..512229c Binary files /dev/null and b/Проект_деньги/src/CommonPictures/Перевод/Picture.png differ diff --git a/Проект_деньги/src/CommonPictures/Перевод/Перевод.mdo b/Проект_деньги/src/CommonPictures/Перевод/Перевод.mdo new file mode 100644 index 0000000..db40258 --- /dev/null +++ b/Проект_деньги/src/CommonPictures/Перевод/Перевод.mdo @@ -0,0 +1,8 @@ + + + Перевод + + ru + Перевод + + diff --git a/Проект_деньги/src/CommonPictures/Покупка/Picture.png b/Проект_деньги/src/CommonPictures/Покупка/Picture.png new file mode 100644 index 0000000..bb9f7df Binary files /dev/null and b/Проект_деньги/src/CommonPictures/Покупка/Picture.png differ diff --git a/Проект_деньги/src/CommonPictures/Покупка/Покупка.mdo b/Проект_деньги/src/CommonPictures/Покупка/Покупка.mdo new file mode 100644 index 0000000..cc116b8 --- /dev/null +++ b/Проект_деньги/src/CommonPictures/Покупка/Покупка.mdo @@ -0,0 +1,8 @@ + + + Покупка + + ru + Покупка + + diff --git a/Проект_деньги/src/CommonPictures/Продажи/Picture.png b/Проект_деньги/src/CommonPictures/Продажи/Picture.png new file mode 100644 index 0000000..aa2cbff Binary files /dev/null and b/Проект_деньги/src/CommonPictures/Продажи/Picture.png differ diff --git a/Проект_деньги/src/CommonPictures/Продажи/Продажи.mdo b/Проект_деньги/src/CommonPictures/Продажи/Продажи.mdo new file mode 100644 index 0000000..822fdac --- /dev/null +++ b/Проект_деньги/src/CommonPictures/Продажи/Продажи.mdo @@ -0,0 +1,8 @@ + + + Продажи + + ru + Продажи + + diff --git a/Проект_деньги/src/CommonPictures/Расходы/Picture.png b/Проект_деньги/src/CommonPictures/Расходы/Picture.png new file mode 100644 index 0000000..5e783ed Binary files /dev/null and b/Проект_деньги/src/CommonPictures/Расходы/Picture.png differ diff --git a/Проект_деньги/src/CommonPictures/Расходы/Расходы.mdo b/Проект_деньги/src/CommonPictures/Расходы/Расходы.mdo new file mode 100644 index 0000000..0cd51c6 --- /dev/null +++ b/Проект_деньги/src/CommonPictures/Расходы/Расходы.mdo @@ -0,0 +1,8 @@ + + + Расходы + + ru + Расходы + + diff --git a/Проект_деньги/src/CommonPictures/СканШтрихКода/Picture.jpg b/Проект_деньги/src/CommonPictures/СканШтрихКода/Picture.jpg new file mode 100644 index 0000000..59bf497 Binary files /dev/null and b/Проект_деньги/src/CommonPictures/СканШтрихКода/Picture.jpg differ diff --git a/Проект_деньги/src/CommonPictures/СканШтрихКода/СканШтрихКода.mdo b/Проект_деньги/src/CommonPictures/СканШтрихКода/СканШтрихКода.mdo new file mode 100644 index 0000000..c4bd56f --- /dev/null +++ b/Проект_деньги/src/CommonPictures/СканШтрихКода/СканШтрихКода.mdo @@ -0,0 +1,8 @@ + + + СканШтрихКода + + ru + Скан штрих кода + + diff --git a/Проект_деньги/src/CommonPictures/ШтрихКод/Picture.png b/Проект_деньги/src/CommonPictures/ШтрихКод/Picture.png new file mode 100644 index 0000000..19c1bc9 Binary files /dev/null and b/Проект_деньги/src/CommonPictures/ШтрихКод/Picture.png differ diff --git a/Проект_деньги/src/CommonPictures/ШтрихКод/ШтрихКод.mdo b/Проект_деньги/src/CommonPictures/ШтрихКод/ШтрихКод.mdo new file mode 100644 index 0000000..d0ab3cf --- /dev/null +++ b/Проект_деньги/src/CommonPictures/ШтрихКод/ШтрихКод.mdo @@ -0,0 +1,8 @@ + + + ШтрихКод + + ru + Штрих код + + diff --git a/Проект_деньги/src/CommonTemplates/ОтчетПоДаходам/Template.dcs b/Проект_деньги/src/CommonTemplates/ОтчетПоДаходам/Template.dcs new file mode 100644 index 0000000..ffaa813 --- /dev/null +++ b/Проект_деньги/src/CommonTemplates/ОтчетПоДаходам/Template.dcs @@ -0,0 +1,282 @@ + + + + ИсточникДанных1 + Local + + + НаборДанных1 + + Номенклатура + Номенклатура + + true + + + + Количество + Количество + + <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> + + + 1 + Main + + + + Формат + + + ru + ДФ=dd.MM.yy + + + + + + + Пользователь + Пользователь + + ИсточникДанных1 + ВЫБРАТЬ + ДоходыОбороты.Номенклатура КАК Номенклатура, + ДоходыОбороты.КоличествоОборот КАК Количество, + ДоходыОбороты.СуммаОборот КАК Сумма, + ДоходыОбороты.Период КАК Период +ИЗ + РегистрНакопления.Доходы.Обороты(, , День, ) КАК ДоходыОбороты + + + Количество + Сумма(Количество) + + + Сумма + Сумма(Сумма) + + + НачалоПериода + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Начало периода</v8:content> + </v8:item> + + + xs:dateTime + + DateTime + + + 0001-01-01T00:00:00 + true + &Период.ДатаНачала + + + КонецПериода + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Конец периода</v8:content> + </v8:item> + + + xs:dateTime + + DateTime + + + 0001-01-01T00:00:00 + true + &Период.ДатаОкончания + + + Период + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Период</v8:content> + </v8:item> + + + v8:StandardPeriod + + + false + + + Основной + Основной + + + + Количество + + + Сумма + + + + + false + Номенклатура + InList + + + -1 + + + + false + Пользователь + Equal + + + + + false + НачалоПериода + + Custom + 2019-01-01T00:00:00 + + c8f2193f-00e8-48df-831c-52b83fbf24d6 + + + false + КонецПериода + + Custom + 2019-02-01T00:00:00 + + 982d88ab-7f8b-4437-9250-f408f0675b72 + + + Период + + ThisMonth + + c4baa55c-78c9-4cca-bec2-ae318d722781 + + + + + Номенклатура + Asc + + + + + + + Номенклатура + + + + + + МаксимальнаяШирина + 25 + + + + + + + МакетОформления + Море + + + ВыводитьПараметрыДанных + DontOutput + + + ВыводитьОтбор + DontOutput + + + + + + Номенклатура + Items + None + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + + + + + + + + + + + Период + Items + None + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + + + + + + + + + + + + + + + + + + + + + + ТипДиаграммы + Pie + + ТипДиаграммы.ВидПодписей + Percent + + + + + + + \ No newline at end of file diff --git a/Проект_деньги/src/CommonTemplates/ОтчетПоДаходам/ОтчетПоДаходам.mdo b/Проект_деньги/src/CommonTemplates/ОтчетПоДаходам/ОтчетПоДаходам.mdo new file mode 100644 index 0000000..c3cc45b --- /dev/null +++ b/Проект_деньги/src/CommonTemplates/ОтчетПоДаходам/ОтчетПоДаходам.mdo @@ -0,0 +1,9 @@ + + + ОтчетПоДаходам + + ru + Отчет по даходам + + DataCompositionSchema + diff --git a/Проект_деньги/src/CommonTemplates/ОтчетПоДоходамИРасходам/Template.dcs b/Проект_деньги/src/CommonTemplates/ОтчетПоДоходамИРасходам/Template.dcs new file mode 100644 index 0000000..dcd592b --- /dev/null +++ b/Проект_деньги/src/CommonTemplates/ОтчетПоДоходамИРасходам/Template.dcs @@ -0,0 +1,314 @@ + + + + ИсточникДанных1 + Local + + + НаборДанных1 + + Номенклатура + Номенклатура + + + Период + Период + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Дата</v8:content> + </v8:item> + + + 1 + Main + + Формат(Период, "ДФ=MMММ") + + + Формат + + + ru + ДФ=dd.MM.yy + + + + + + + Пользователь + Пользователь + + + СуммаДоход + СуммаДоход + + <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> + + + ИсточникДанных1 + ВЫБРАТЬ + ДоходыОбороты.СуммаОборот КАК СуммаДоход, + ДоходыОбороты.Период КАК ПериодДохода +ПОМЕСТИТЬ Доходы +ИЗ + РегистрНакопления.Доходы.Обороты(, , Месяц, ) КАК ДоходыОбороты +; + +//////////////////////////////////////////////////////////////////////////////// +ВЫБРАТЬ + РасходыОбороты.Период КАК ПериодРасход, + РасходыОбороты.СуммаОборот КАК СуммаРасход +ПОМЕСТИТЬ Расходы +ИЗ + РегистрНакопления.Расходы.Обороты(, , Месяц, ) КАК РасходыОбороты +; + +//////////////////////////////////////////////////////////////////////////////// +ВЫБРАТЬ + Расходы.ПериодРасход КАК Период, + СУММА(Доходы.СуммаДоход) КАК СуммаДоход, + СУММА(Расходы.СуммаРасход) КАК СуммаРасход, + Доходы.СуммаДоход - ЕСТЬNULL(Расходы.СуммаРасход, 0) КАК Разница +ИЗ + Расходы КАК Расходы + ЛЕВОЕ СОЕДИНЕНИЕ Доходы КАК Доходы + ПО Расходы.ПериодРасход = Доходы.ПериодДохода + +СГРУППИРОВАТЬ ПО + Расходы.ПериодРасход, + Доходы.СуммаДоход - ЕСТЬNULL(Расходы.СуммаРасход, 0) + +УПОРЯДОЧИТЬ ПО + Период + + + Разница + Сумма(Разница) + + + СуммаДоход + Сумма(СуммаДоход) + + + СуммаРасход + Сумма(СуммаРасход) + + + НачалоПериода + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Начало периода</v8:content> + </v8:item> + + + xs:dateTime + + DateTime + + + 0001-01-01T00:00:00 + true + &Период.ДатаНачала + + + КонецПериода + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Конец периода</v8:content> + </v8:item> + + + xs:dateTime + + DateTime + + + 0001-01-01T00:00:00 + true + &Период.ДатаОкончания + + + Период + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Период</v8:content> + </v8:item> + + + v8:StandardPeriod + + + Month + + false + + + Основной + + + ru + Отчет по доходам/расходам + + + + + + Период + + + СуммаДоход + + + СуммаРасход + + + Разница + + + + + false + Номенклатура + InList + + + -1 + + + + false + Пользователь + Equal + + + + + false + НачалоПериода + + Custom + 2019-01-01T00:00:00 + + c8f2193f-00e8-48df-831c-52b83fbf24d6 + + + false + КонецПериода + + Custom + 2019-02-01T00:00:00 + + 982d88ab-7f8b-4437-9250-f408f0675b72 + + + Период + + Month + + c4baa55c-78c9-4cca-bec2-ae318d722781 + + + + + Номенклатура + Asc + + + + + + + Номенклатура + + + + + + МаксимальнаяШирина + 25 + + + + + + + МакетОформления + Море + + + ВыводитьПараметрыДанных + DontOutput + + + ВыводитьОтбор + DontOutput + + + + + + Период + Items + None + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + + + + + + + + + + + СуммаДоход + + + СуммаРасход + + + + + ТипДиаграммы + Pie + + ТипДиаграммы.ВидПодписей + Percent + + + + + + + \ No newline at end of file diff --git a/Проект_деньги/src/CommonTemplates/ОтчетПоДоходамИРасходам/ОтчетПоДоходамИРасходам.mdo b/Проект_деньги/src/CommonTemplates/ОтчетПоДоходамИРасходам/ОтчетПоДоходамИРасходам.mdo new file mode 100644 index 0000000..2773ba7 --- /dev/null +++ b/Проект_деньги/src/CommonTemplates/ОтчетПоДоходамИРасходам/ОтчетПоДоходамИРасходам.mdo @@ -0,0 +1,9 @@ + + + ОтчетПоДоходамИРасходам + + ru + Отчет по доходам и расходам + + DataCompositionSchema + diff --git a/Проект_деньги/src/CommonTemplates/ОтчетПоРасходам/Template.dcs b/Проект_деньги/src/CommonTemplates/ОтчетПоРасходам/Template.dcs new file mode 100644 index 0000000..014575f --- /dev/null +++ b/Проект_деньги/src/CommonTemplates/ОтчетПоРасходам/Template.dcs @@ -0,0 +1,431 @@ + + + + ИсточникДанных1 + Local + + + НаборДанных1 + + Номенклатура + Номенклатура + + true + + + + Назначение + Назначение + + <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> + + + 1 + Main + + + + Формат + + + ru + ДФ=dd.MM.yy + + + + + + + Пользователь + Пользователь + + + НоменклатураВидНоменклатуры + НоменклатураВидНоменклатуры + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Вид</v8:content> + </v8:item> + + + ИсточникДанных1 + ВЫБРАТЬ + РасходыОбороты.Номенклатура КАК Номенклатура, + РасходыОбороты.СуммаОборот КАК Сумма, + РасходыОбороты.Период КАК Период, + РасходыОбороты.Номенклатура.Родитель КАК Назначение, + РасходыОбороты.Номенклатура.ВидНоменклатуры КАК НоменклатураВидНоменклатуры +ИЗ + РегистрНакопления.Расходы.Обороты(&НачалоПериода, &КонецПериода, День, ) КАК РасходыОбороты + + + Сумма + Сумма(Сумма) + + + НачалоПериода + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Начало периода</v8:content> + </v8:item> + + + xs:dateTime + + DateTime + + + 0001-01-01T00:00:00 + true + &Период.ДатаНачала + + + КонецПериода + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Конец периода</v8:content> + </v8:item> + + + xs:dateTime + + DateTime + + + 0001-01-01T00:00:00 + true + &Период.ДатаОкончания + + + Период + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Период</v8:content> + </v8:item> + + + v8:StandardPeriod + + + Custom + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + false + + + Основной + Основной + + + + Назначение + + + Номенклатура + + + Сумма + + + НоменклатураВидНоменклатуры + + + + + false + Номенклатура + InHierarchy + Справочник.Номенклатура.ПустаяСсылка + 11df2d63-899a-4d74-95e9-d7f7ba792b11 + + + false + Пользователь + Equal + Справочник.Пользователи.ПустаяСсылка + ea7f5a06-55da-4923-ac25-7a14ed1371e2 + + + + + false + НачалоПериода + + Custom + 2019-01-01T00:00:00 + + c8f2193f-00e8-48df-831c-52b83fbf24d6 + + + false + КонецПериода + + Custom + 2019-02-01T00:00:00 + + 982d88ab-7f8b-4437-9250-f408f0675b72 + + + Период + + ThisMonth + + e9e61907-c95e-47c5-ad1e-3501210b194f + + + + + + + Номенклатура + + + + + + МаксимальнаяШирина + 25 + + + + + + + МакетОформления + Море + + + ВыводитьПараметрыДанных + DontOutput + + + ВыводитьОтбор + DontOutput + + + + + + НоменклатураВидНоменклатуры + Items + None + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + + + Сумма + Asc + + + + + + + + + Назначение + Items + None + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + + + Сумма + Asc + + + + + + + + + Номенклатура + Items + None + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + + + + + + + + + + + + + Период + Items + None + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + + + + + + + + + + НоменклатураВидНоменклатуры + Items + None + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + + + + + + + + + + Назначение + Items + None + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + + + + + + + + + + Номенклатура + Items + None + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + + + + + + + + + + + + + + + НоменклатураВидНоменклатуры + Items + None + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + + + Сумма + Asc + + + + + + + + + + + + ТипДиаграммы + Pie + + ТипДиаграммы.ВидПодписей + Percent + + + + + + + + + Назначение + Items + None + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + + + Сумма + Asc + + + + + + + + + + + + ТипДиаграммы + Pie + + ТипДиаграммы.ВидПодписей + Percent + + + + + + + \ No newline at end of file diff --git a/Проект_деньги/src/CommonTemplates/ОтчетПоРасходам/ОтчетПоРасходам.mdo b/Проект_деньги/src/CommonTemplates/ОтчетПоРасходам/ОтчетПоРасходам.mdo new file mode 100644 index 0000000..562c202 --- /dev/null +++ b/Проект_деньги/src/CommonTemplates/ОтчетПоРасходам/ОтчетПоРасходам.mdo @@ -0,0 +1,9 @@ + + + ОтчетПоРасходам + + ru + Отчет по расходам + + DataCompositionSchema + diff --git a/Проект_деньги/src/Configuration/CommandInterface.cmi b/Проект_деньги/src/Configuration/CommandInterface.cmi new file mode 100644 index 0000000..446f8c0 --- /dev/null +++ b/Проект_деньги/src/Configuration/CommandInterface.cmi @@ -0,0 +1,10 @@ + + + + Subsystem.НачальныеДанные + Subsystem.Покупки + Subsystem.Продажи + Subsystem.Сервис + Subsystem.Настройки + + diff --git a/Проект_деньги/src/Configuration/Configuration.mdo b/Проект_деньги/src/Configuration/Configuration.mdo new file mode 100644 index 0000000..1d85711 --- /dev/null +++ b/Проект_деньги/src/Configuration/Configuration.mdo @@ -0,0 +1,197 @@ + + + ПроектДеньги + + ru + Проект деньги + + + + + + + + + 8.3.27 + ManagedApplication + PersonalComputer + MobileDevice + Russian + Role.ПолныеПрава + Сердюк Николай Александрович + 1.9.6 + + + true + + + Location + true + + + PersonalComputerFileExchange + true + + + Camera + true + + + Microphone + true + + + MusicLibrary + true + + + PictureAndVideoLibraries + true + + + AudioPlaybackAndVibration + true + + + InstallPackages + true + + + OSBackup + true + + + AllFilesAccess + true + + + DocumentScanning + true + + + Role.ПолныеПрава + Language.Русский + + ru + Проект деньги 1.9 + + + ru + Данная конфигурация находится на бета-тестировании + + + ru + Сердюк Николай Александрович + + + ru + ЧП Сердюк Н.А. + + Managed + NotAutoFree + 8.3.25 + + Русский + + ru + Русский + + ru + + Subsystem.НачальныеДанные + Subsystem.Покупки + Subsystem.Продажи + Subsystem.Сервис + Subsystem.Настройки + CommonPicture.ИконкаДокументов + CommonPicture.ИконкаСправочники + CommonPicture.Деньги + CommonPicture.Покупка + CommonPicture.Желания + CommonPicture.Отчеты + CommonPicture.Перевод + CommonPicture.Доходы + CommonPicture.Расходы + CommonPicture.ШтрихКод + CommonPicture.СканШтрихКода + CommonPicture.Бабки + CommonPicture.КомПлатежи + CommonPicture.Продажи + CommonPicture.ДоходыРасходы + Role.ПолныеПрава + CommonTemplate.ОтчетПоРасходам + CommonTemplate.ОтчетПоДаходам + CommonTemplate.ОтчетПоДоходамИРасходам + CommonModule.Общий_ПД_Сервер + CommonModule.ОбщегоНазначенияКлиентСервер + CommonModule.Обмен + CommonModule.Диалоги + CommonModule.ОбработчикиОбновления + CommonModule.Интерфейс + CommonModule.КоннекторHTTP + ExchangePlan.Мобильные + HTTPService.requst + EventSubscription.ОбменЗарегистрироватьИзменения + EventSubscription.ОбменЗарегистрироватьИзмененияДокумента + EventSubscription.ПередЗаписьюДокумента + CommandGroup.Константы + CommandGroup.Справочники + CommandGroup.Документы + CommandGroup.ЖурналыДокументов + CommandGroup.Отчеты + CommandGroup.Обработки + CommandGroup.ПВХ + CommandGroup.РегистрыСведений + CommandGroup.РегистрыНакопления + Constant.ТекущийПользователь + Constant.ВыводитьДиалогиВвода + Constant.ПерсональныйТокенQR + Constant.ОдинДокументРасходов + Constant.ВерияКонфигурации + Constant.СерверАдрес + CommonForm.МобильныйРабСтол + CommonForm.ФормаОтчета + CommonForm.ТекущийПользователь + CommonForm.ФормаКонстант + CommonForm.ФормаЗагрузкиЧековИзФНС + Catalog.Счета + Catalog.Банки + Catalog.Номенклатура + Catalog.ЕдиницыИзмерений + Catalog.Пользователи + Catalog.ВидыДоходов + Catalog.Валюты + Document.ВводНачальныхОстатков + Document.Вложения + Document.Доходы + Document.Желания + Document.КоммунальныеПлатежи + Document.ПеремещениеСнятиеДенежныхСредств + Document.ПланированиеБюджета + Document.Покупки + Document.Продажи + Document.СоответствиеНоменклатуры + Enum.Месяцы + Enum.ПериодыПланирования + Enum.ТипыПлатежей + Enum.ВидыНоменклатуры + DataProcessor.КонкуляторДоходности + DataProcessor.КонкуляторБанковскогоЗайма + DataProcessor.Отчеты + DataProcessor.ОбменДанными + DataProcessor.РегистрацияИзмененийДляОбменаДанными + DataProcessor.ВыполнитьОбработчикиОбновления + DataProcessor.ПровестиВсеДокументы + DataProcessor.ОчиститьДанные + InformationRegister.ПланированиеБюджетаНаМесяц + InformationRegister.ПланированиеБюджетаНаГод + InformationRegister.ШтрихКоды + InformationRegister.ЦеныКоммунальныхПлатежей + InformationRegister.СоответствиеНоменклатуры + InformationRegister.КурсыВалют + InformationRegister.КлючевыеСлова + AccumulationRegister.ДенежныеСредства + AccumulationRegister.Доходы + AccumulationRegister.Продажи + AccumulationRegister.Расходы + diff --git a/Проект_деньги/src/Configuration/HomePageWorkArea.hpwa b/Проект_деньги/src/Configuration/HomePageWorkArea.hpwa new file mode 100644 index 0000000..36b0d6f --- /dev/null +++ b/Проект_деньги/src/Configuration/HomePageWorkArea.hpwa @@ -0,0 +1,14 @@ + + + TwoColumnsEqualWidth + + +
CommonForm.МобильныйРабСтол
+ 10 + + true + +
+
+ +
diff --git a/Проект_деньги/src/Configuration/MainSectionCommandInterface.cmi b/Проект_деньги/src/Configuration/MainSectionCommandInterface.cmi new file mode 100644 index 0000000..e875eae --- /dev/null +++ b/Проект_деньги/src/Configuration/MainSectionCommandInterface.cmi @@ -0,0 +1,87 @@ + + + + + Document.Желания.StandardCommand.OpenList + + true + + + + Document.ПланированиеБюджета.StandardCommand.OpenList + + true + + + + Document.Покупки.StandardCommand.Create + + true + + + + Document.Доходы.StandardCommand.Create + + true + + + + Document.Продажи.StandardCommand.Create + + true + + + + Document.ПеремещениеСнятиеДенежныхСредств.StandardCommand.Create + + true + + + + Document.КоммунальныеПлатежи.StandardCommand.Create + + true + + + + DataProcessor.Отчеты.StandardCommand.Open + + true + + + + + + NavigationPanelOrdinary + Document.Желания.StandardCommand.OpenList + Document.ПланированиеБюджета.StandardCommand.OpenList + + + ActionsPanelCreate + Document.Покупки.StandardCommand.Create + Document.Доходы.StandardCommand.Create + Document.Продажи.StandardCommand.Create + Document.ПеремещениеСнятиеДенежныхСредств.StandardCommand.Create + Document.КоммунальныеПлатежи.StandardCommand.Create + + + ActionsPanelTools + DataProcessor.Отчеты.StandardCommand.Open + + + + + NavigationPanelOrdinary + Document.Желания.StandardCommand.OpenList + Document.ПланированиеБюджета.StandardCommand.OpenList + + + ActionsPanelCreate + Document.Покупки.StandardCommand.Create + Document.Доходы.StandardCommand.Create + Document.Продажи.StandardCommand.Create + Document.ПеремещениеСнятиеДенежныхСредств.StandardCommand.Create + Document.КоммунальныеПлатежи.StandardCommand.Create + + + diff --git a/Проект_деньги/src/Configuration/ManagedApplicationModule.bsl b/Проект_деньги/src/Configuration/ManagedApplicationModule.bsl new file mode 100644 index 0000000..8f9ce48 --- /dev/null +++ b/Проект_деньги/src/Configuration/ManagedApplicationModule.bsl @@ -0,0 +1,32 @@ +#Область ОбработчикиСобытий + +Процедура ПриНачалеРаботыСистемы() + + ТекущийПользователь = ОбщегоНазначенияКлиентСервер.ПолучитьПользователя(); + + Если НЕ ЗначениеЗаполнено(ТекущийПользователь) Тогда +// Предупреждение("В приложении не задан пользователь!"); +// ОткрытьФорму("ОбщаяФорма.ТекущийПользователь"); + НеЗаданПользователь(); + КонецЕсли; + + ОбработчикиОбновления.ПроверкаВерсии(); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Асинх Процедура НеЗаданПользователь() + + Текст = Нстр("ru='В приложении не задан пользователь!'"); + + Обещание = ПредупреждениеАсинх(Текст); + Ждать Обещание; + + ОткрытьФорму("ОбщаяФорма.ТекущийПользователь"); + +КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/Проект_деньги/src/Configuration/SessionModule.bsl b/Проект_деньги/src/Configuration/SessionModule.bsl new file mode 100644 index 0000000..e69de29 diff --git a/Проект_деньги/src/Constants/ВерияКонфигурации/ВерияКонфигурации.mdo b/Проект_деньги/src/Constants/ВерияКонфигурации/ВерияКонфигурации.mdo new file mode 100644 index 0000000..fee78cd --- /dev/null +++ b/Проект_деньги/src/Constants/ВерияКонфигурации/ВерияКонфигурации.mdo @@ -0,0 +1,23 @@ + + + + + + + + ВерияКонфигурации + + ru + Верия конфигурации + + + String + + 10 + + + true + + + Managed + diff --git a/Проект_деньги/src/Constants/ВыводитьДиалогиВвода/ВыводитьДиалогиВвода.mdo b/Проект_деньги/src/Constants/ВыводитьДиалогиВвода/ВыводитьДиалогиВвода.mdo new file mode 100644 index 0000000..410a81f --- /dev/null +++ b/Проект_деньги/src/Constants/ВыводитьДиалогиВвода/ВыводитьДиалогиВвода.mdo @@ -0,0 +1,21 @@ + + + + + + + + ВыводитьДиалогиВвода + + ru + Выводить диалоги ввода + + + Boolean + + true + CommonForm.ФормаКонстант + + + Managed + diff --git a/Проект_деньги/src/Constants/ОдинДокументРасходов/ОдинДокументРасходов.mdo b/Проект_деньги/src/Constants/ОдинДокументРасходов/ОдинДокументРасходов.mdo new file mode 100644 index 0000000..4c71caf --- /dev/null +++ b/Проект_деньги/src/Constants/ОдинДокументРасходов/ОдинДокументРасходов.mdo @@ -0,0 +1,21 @@ + + + + + + + + ОдинДокументРасходов + + ru + Один документ расходов на день + + + Boolean + + true + CommonForm.ФормаКонстант + + + Managed + diff --git a/Проект_деньги/src/Constants/ПерсональныйТокенQR/ПерсональныйТокенQR.mdo b/Проект_деньги/src/Constants/ПерсональныйТокенQR/ПерсональныйТокенQR.mdo new file mode 100644 index 0000000..e75af07 --- /dev/null +++ b/Проект_деньги/src/Constants/ПерсональныйТокенQR/ПерсональныйТокенQR.mdo @@ -0,0 +1,24 @@ + + + + + + + + ПерсональныйТокенQR + + ru + Персональный токен для проверки чеков + + + String + + 100 + + + true + CommonForm.ФормаКонстант + + + Managed + diff --git a/Проект_деньги/src/Constants/СерверАдрес/СерверАдрес.mdo b/Проект_деньги/src/Constants/СерверАдрес/СерверАдрес.mdo new file mode 100644 index 0000000..c496475 --- /dev/null +++ b/Проект_деньги/src/Constants/СерверАдрес/СерверАдрес.mdo @@ -0,0 +1,23 @@ + + + + + + + + СерверАдрес + + ru + Сервер-адрес + + + String + + 250 + + + true + + + Managed + diff --git a/Проект_деньги/src/Constants/ТекущийПользователь/ТекущийПользователь.mdo b/Проект_деньги/src/Constants/ТекущийПользователь/ТекущийПользователь.mdo new file mode 100644 index 0000000..2d53329 --- /dev/null +++ b/Проект_деньги/src/Constants/ТекущийПользователь/ТекущийПользователь.mdo @@ -0,0 +1,21 @@ + + + + + + + + ТекущийПользователь + + ru + Текущий пользователь + + + CatalogRef.Пользователи + + true + CommonForm.ФормаКонстант + + + Managed + diff --git a/Проект_деньги/src/DataProcessors/ВыполнитьОбработчикиОбновления/Forms/Форма/Form.form b/Проект_деньги/src/DataProcessors/ВыполнитьОбработчикиОбновления/Forms/Форма/Form.form new file mode 100644 index 0000000..f100250 --- /dev/null +++ b/Проект_деньги/src/DataProcessors/ВыполнитьОбработчикиОбновления/Forms/Форма/Form.form @@ -0,0 +1,84 @@ + + + + Выполнить + 1 + true + true + + true + + + ВыполнитьРасширеннаяПодсказка + 2 + Label + true + true + + Left + + + UsualButton + Form.Command.Выполнить + Auto + true + true + UserCmds + Auto + + + ФормаКоманднаяПанель + -1 + Left + true + + true + true + true + Vertical + true + true + true + true + true + + Объект + 1 + + DataProcessorObject.ВыполнитьОбработчикиОбновления + + + true + + + true + +
true
+
+ + Выполнить + + <key>ru</key> + <value>Выполнить</value> + + 1 + + ru + Выполнить + + + true + + + + ВыполнитьОбработчик + + + Auto + + + + + + +
diff --git a/Проект_деньги/src/DataProcessors/ВыполнитьОбработчикиОбновления/Forms/Форма/Module.bsl b/Проект_деньги/src/DataProcessors/ВыполнитьОбработчикиОбновления/Forms/Форма/Module.bsl new file mode 100644 index 0000000..1f3cef2 --- /dev/null +++ b/Проект_деньги/src/DataProcessors/ВыполнитьОбработчикиОбновления/Forms/Форма/Module.bsl @@ -0,0 +1,54 @@ + +&НаСервереБезКонтекста +Процедура ВыполнитьНаСервере() + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | Номенклатура.Ссылка КАК Ссылка, + | Номенклатура.Услуга КАК Услуга, + | Номенклатура.Родитель.Наименование КАК Родитель + |ИЗ + | Справочник.Номенклатура КАК Номенклатура + |ГДЕ + | Номенклатура.ВидНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ВидыНоменклатуры.ПустаяСсылка)"; + Запрос.УстановитьПараметр("", Перечисления.ВидыНоменклатуры.ПустаяСсылка()); + РезультатЗапроса = Запрос.Выполнить(); + + Если РезультатЗапроса.Пустой() Тогда + Возврат; + КонецЕсли; + + ПТовар = Перечисления.ВидыНоменклатуры.Товар; + ПУслуга = Перечисления.ВидыНоменклатуры.Услуга; + ПКУ = Перечисления.ВидыНоменклатуры.КУ; + + Выборка = РезультатЗапроса.Выбрать(); + Пока Выборка.Следующий() Цикл + СправочникОбъект = Выборка.Ссылка.ПолучитьОбъект(); + Родитель = Выборка.Родитель; + Услуга = Выборка.Услуга; + + Если Услуга Тогда + СправочникОбъект.ВидНоменклатуры = ПУслуга; + ИначеЕсли Родитель = "Коммунальные платежи" Тогда + СправочникОбъект.ВидНоменклатуры = ПКУ; + Иначе + СправочникОбъект.ВидНоменклатуры = ПТовар; + КонецЕсли; + + Если ЗначениеЗаполнено(СправочникОбъект.ВидНоменклатуры) Тогда + СправочникОбъект.Записать(); + Иначе + Сообщение = Новый СообщениеПользователю; + Сообщение.Текст = "Для номенклатуры: """+СправочникОбъект.Наименование+""" не нашли правильный вид номенклатуры!"; + Сообщение.Сообщить(); + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +&НаКлиенте +Процедура ВыполнитьОбработчик(Команда) + ВыполнитьНаСервере(); +КонецПроцедуры diff --git a/Проект_деньги/src/DataProcessors/ВыполнитьОбработчикиОбновления/ВыполнитьОбработчикиОбновления.mdo b/Проект_деньги/src/DataProcessors/ВыполнитьОбработчикиОбновления/ВыполнитьОбработчикиОбновления.mdo new file mode 100644 index 0000000..fd58b1b --- /dev/null +++ b/Проект_деньги/src/DataProcessors/ВыполнитьОбработчикиОбновления/ВыполнитьОбработчикиОбновления.mdo @@ -0,0 +1,23 @@ + + + + + + + ВыполнитьОбработчикиОбновления + + ru + Выполнить обработчики обновления + + true + DataProcessor.ВыполнитьОбработчикиОбновления.Form.Форма + + Форма + + ru + Форма + + PersonalComputer + MobileDevice + + diff --git a/Проект_деньги/src/DataProcessors/КонкуляторБанковскогоЗайма/Forms/Форма/Form.form b/Проект_деньги/src/DataProcessors/КонкуляторБанковскогоЗайма/Forms/Форма/Form.form new file mode 100644 index 0000000..f801479 --- /dev/null +++ b/Проект_деньги/src/DataProcessors/КонкуляторБанковскогоЗайма/Forms/Форма/Form.form @@ -0,0 +1,1280 @@ + + + + Группа3 + 68 + + ТипПлатежей + 1 + true + true + + true + + + Объект.ТипПлатежей + + + ТипПлатежейРасширеннаяПодсказка + 3 + Label + true + true + + Left + + + + ТипПлатежейКонтекстноеМеню + 2 + true + + InputField + EnterOnInput + true + Left + true + + true + true + true + true + true + true + + + + СложныйРасчет + 65 + true + true + + true + + + Объект.СложныйРасчет + + + OnChange + СложныйРасчетПриИзменении + + + СложныйРасчетРасширеннаяПодсказка + 67 + Label + true + true + + Left + + + + СложныйРасчетКонтекстноеМеню + 66 + true + + CheckBoxField + Enter + true + Left + true + + + true + true + + true + + + Группа3РасширеннаяПодсказка + 69 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + СтраницыФ + 28 + + Рассчет + 30 + + Группа1 + 24 + + ПСК + 7 + true + true + + true + + + Объект.ПСК + + + ПСКРасширеннаяПодсказка + 9 + Label + true + true + + Left + + + + ПСККонтекстноеМеню + 8 + true + + InputField + EnterOnInput + true + Left + true + + true + true + true + true + true + true + + + + ГПС + 10 + true + true + + true + + + Объект.ГПС + + + ГПСРасширеннаяПодсказка + 12 + Label + true + true + + Left + + + + ГПСКонтекстноеМеню + 11 + true + + InputField + EnterOnInput + true + Left + true + + true + true + true + true + true + true + + + + КП + 13 + true + true + + true + + + Объект.КП + + + КПРасширеннаяПодсказка + 15 + Label + true + true + + Left + + + + КПКонтекстноеМеню + 14 + true + + InputField + EnterOnInput + true + Left + true + + true + true + true + true + true + true + + + true + true + + true + + + Группа1РасширеннаяПодсказка + 25 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Auto + true + true + Auto + Auto + + + + Группа2 + 26 + + СуммаВыплаты + 18 + true + true + + true + + + СуммаВыплаты + + + СуммаВыплатыРасширеннаяПодсказка + 20 + Label + true + true + + Left + + + + СуммаВыплатыКонтекстноеМеню + 19 + true + + InputField + true + Enter + true + Left + true + + true + true + true + true + true + true + + + + СуммаПереплаты + 21 + true + true + + true + + + СуммаПереплаты + + + СуммаПереплатыРасширеннаяПодсказка + 23 + Label + true + true + + Left + + + + СуммаПереплатыКонтекстноеМеню + 22 + true + + InputField + true + Enter + true + Left + true + + true + true + true + true + true + true + + + + СЕП + 4 + true + true + + true + + + Объект.СЕП + + + СЕПРасширеннаяПодсказка + 6 + Label + true + true + + Left + + + + СЕПКонтекстноеМеню + 5 + true + + InputField + true + EnterOnInput + true + Left + true + + true + true + true + true + true + true + + + true + true + + true + + + Группа2РасширеннаяПодсказка + 27 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Auto + true + true + Auto + Auto + + + + ФормаРассчитать + 16 + true + true + + true + + + ФормаРассчитатьРасширеннаяПодсказка + 17 + Label + true + true + + Left + + + UsualButton + Form.Command.Рассчитать + Auto + true + true + UserCmds + Auto + + + ДанныеРасчета + 70 + true + + true + + + Объект.ДанныеРасчета + + None + + ДанныеРасчетаНомерСтроки + 83 + true + true + + true + + + Объект.ДанныеРасчета.LineNumber + + + ДанныеРасчетаНомерСтрокиРасширеннаяПодсказка + 85 + Label + true + true + + Left + + + + ДанныеРасчетаНомерСтрокиКонтекстноеМеню + 84 + true + + LabelField + EnterOnInput + true + Left + true + + true + true + + + + ДанныеРасчетаПериодДней + 86 + true + true + + true + + + Объект.ДанныеРасчета.ПериодДней + + + ДанныеРасчетаПериодДнейРасширеннаяПодсказка + 88 + Label + true + true + + Left + + + + ДанныеРасчетаПериодДнейКонтекстноеМеню + 87 + true + + InputField + EnterOnInput + true + Left + true + + true + true + true + true + true + true + + + + ДанныеРасчетаПериодЛет + 89 + true + true + + true + + + Объект.ДанныеРасчета.ПериодЛет + + + ДанныеРасчетаПериодЛетРасширеннаяПодсказка + 91 + Label + true + true + + Left + + + + ДанныеРасчетаПериодЛетКонтекстноеМеню + 90 + true + + InputField + EnterOnInput + true + Left + true + + true + true + true + true + true + true + + + + ДанныеРасчетаПроцентЗаПериод + 92 + true + true + + true + + + Объект.ДанныеРасчета.ПроцентЗаПериод + + + ДанныеРасчетаПроцентЗаПериодРасширеннаяПодсказка + 94 + Label + true + true + + Left + + + + ДанныеРасчетаПроцентЗаПериодКонтекстноеМеню + 93 + true + + InputField + EnterOnInput + true + Left + true + + true + true + true + true + true + true + + + + ДанныеРасчетаВыплаты + 95 + true + true + + true + + + Объект.ДанныеРасчета.Выплаты + + + ДанныеРасчетаВыплатыРасширеннаяПодсказка + 97 + Label + true + true + + Left + + + + ДанныеРасчетаВыплатыКонтекстноеМеню + 96 + true + + InputField + EnterOnInput + true + Left + true + + true + true + true + true + true + true + + + + ДанныеРасчетаКоманднаяПанель + 72 + Left + true + + + ДанныеРасчетаСтрокаПоиска + 74 + + ДанныеРасчетаСтрокаПоискаРасширеннаяПодсказка + 76 + Label + true + true + + Left + + + + ДанныеРасчетаСтрокаПоискаКонтекстноеМеню + 75 + true + + ДанныеРасчета + + true + + + + ДанныеРасчетаСостояниеПросмотра + 77 + + ДанныеРасчетаСостояниеПросмотраРасширеннаяПодсказка + 79 + Label + true + true + + Left + + + + ДанныеРасчетаСостояниеПросмотраКонтекстноеМеню + 78 + true + + ViewStatusAddition + ДанныеРасчета + + true + + + + ДанныеРасчетаУправлениеПоиском + 80 + + ДанныеРасчетаУправлениеПоискомРасширеннаяПодсказка + 82 + Label + true + true + + Left + + + + ДанныеРасчетаУправлениеПоискомКонтекстноеМеню + 81 + true + + SearchControlAddition + ДанныеРасчета + + true + + + + ДанныеРасчетаРасширеннаяПодсказка + 73 + Label + true + true + + Left + + + + ДанныеРасчетаКонтекстноеМеню + 71 + true + + HierarchicalList + true + true + true + true + true + MultiRow +
true
+ 1 + 1 + AutoUse + AutoUse + true + true + true + Auto + Auto + true + true + true + true + +
+ true + true + + true + + + <key>ru</key> + <value>Рассчет</value> + + + ru + Рассчет + + + РассчетРасширеннаяПодсказка + 31 + Label + true + true + + Left + + + Page + + Vertical + true + +
+ + ГруппаГрафикПлатежей + 32 + + ГрафикПлатежей + 34 + true + true + + true + + + Объект.ГрафикПлатежей + + None + + ГрафикПлатежейНомерПлатежа + 50 + true + true + + true + + + Объект.ГрафикПлатежей.НомерПлатежа + + + ГрафикПлатежейНомерПлатежаРасширеннаяПодсказка + 52 + Label + true + true + + Left + + + + ГрафикПлатежейНомерПлатежаКонтекстноеМеню + 51 + true + + InputField + true + EnterOnInput + true + Left + true + + true + true + true + true + true + true + + + + ГрафикПлатежейСуммаВыплаты + 53 + true + true + + true + + + Объект.ГрафикПлатежей.СуммаВыплаты + + + ГрафикПлатежейСуммаВыплатыРасширеннаяПодсказка + 55 + Label + true + true + + Left + + + + ГрафикПлатежейСуммаВыплатыКонтекстноеМеню + 54 + true + + InputField + EnterOnInput + true + Left + true + + true + true + true + true + true + true + + + + ГрафикПлатежейВыплатыТела + 56 + true + true + + true + + + Объект.ГрафикПлатежей.ВыплатыТела + + + ГрафикПлатежейВыплатыТелаРасширеннаяПодсказка + 58 + Label + true + true + + Left + + + + ГрафикПлатежейВыплатыТелаКонтекстноеМеню + 57 + true + + InputField + EnterOnInput + true + Left + true + + true + true + true + true + true + true + + + + ГрафикПлатежейВыплатыПроцентов + 59 + true + true + + true + + + Объект.ГрафикПлатежей.ВыплатыПроцентов + + + ГрафикПлатежейВыплатыПроцентовРасширеннаяПодсказка + 61 + Label + true + true + + Left + + + + ГрафикПлатежейВыплатыПроцентовКонтекстноеМеню + 60 + true + + InputField + EnterOnInput + true + Left + true + + true + true + true + true + true + true + + + + ГрафикПлатежейОстатокЗайма + 62 + true + true + + true + + + Объект.ГрафикПлатежей.ОстатокЗайма + + + ГрафикПлатежейОстатокЗаймаРасширеннаяПодсказка + 64 + Label + true + true + + Left + + + + ГрафикПлатежейОстатокЗаймаКонтекстноеМеню + 63 + true + + InputField + EnterOnInput + true + Left + true + + true + true + true + true + true + true + + + + ГрафикПлатежейКоманднаяПанель + 36 + Left + true + + + ГрафикПлатежейСтрокаПоиска + 38 + + ГрафикПлатежейСтрокаПоискаРасширеннаяПодсказка + 40 + Label + true + true + + Left + + + + ГрафикПлатежейСтрокаПоискаКонтекстноеМеню + 39 + true + + ГрафикПлатежей + + true + + + + ГрафикПлатежейСостояниеПросмотра + 41 + + ГрафикПлатежейСостояниеПросмотраРасширеннаяПодсказка + 43 + Label + true + true + + Left + + + + ГрафикПлатежейСостояниеПросмотраКонтекстноеМеню + 42 + true + + ViewStatusAddition + ГрафикПлатежей + + true + + + + ГрафикПлатежейУправлениеПоиском + 44 + + ГрафикПлатежейУправлениеПоискомРасширеннаяПодсказка + 46 + Label + true + true + + Left + + + + ГрафикПлатежейУправлениеПоискомКонтекстноеМеню + 45 + true + + SearchControlAddition + ГрафикПлатежей + + true + + + + ГрафикПлатежейРасширеннаяПодсказка + 37 + Label + true + true + + Left + + + + ГрафикПлатежейКонтекстноеМеню + 35 + true + + HierarchicalList + true + true + true + true + true + true + MultiRow +
true
+ 1 + 1 + AutoUse + AutoUse + true + true + true + Auto + Auto + true + true + true + true + +
+ true + true + + true + + + <key>ru</key> + <value>График платежей</value> + + + ru + Группа график платежей + + + ГруппаГрафикПлатежейРасширеннаяПодсказка + 33 + Label + true + true + + Left + + + Page + + Vertical + true + +
+ true + true + + true + + + <key>ru</key> + <value>Страницы Ф</value> + + + ru + Страницы Ф + + + СтраницыФРасширеннаяПодсказка + 29 + Label + true + true + + Left + + + Pages + + TabsOnTop + Auto + +
+ + ФормаКоманднаяПанель + -1 + Left + true + + + OnOpen + ПриОткрытии + + true + true + true + Vertical + true + true + true + true + true + + Объект + 1 + + DataProcessorObject.КонкуляторБанковскогоЗайма + + + true + + + true + +
true
+
+ + СуммаВыплаты + + <key>ru</key> + <value>Сумма выплаты</value> + + 2 + + Number + + 15 + 2 + + + + true + + + true + + + + СуммаПереплаты + + <key>ru</key> + <value>Сумма переплаты</value> + + 3 + + Number + + 15 + 2 + + + + true + + + true + + + + Рассчитать + + <key>ru</key> + <value>Рассчитать</value> + + 1 + + ru + Рассчитать + + + true + + + + Рассчитать + + + DontUse + + + + + + +
diff --git a/Проект_деньги/src/DataProcessors/КонкуляторБанковскогоЗайма/Forms/Форма/Module.bsl b/Проект_деньги/src/DataProcessors/КонкуляторБанковскогоЗайма/Forms/Форма/Module.bsl new file mode 100644 index 0000000..63d06bc --- /dev/null +++ b/Проект_деньги/src/DataProcessors/КонкуляторБанковскогоЗайма/Forms/Форма/Module.bsl @@ -0,0 +1,95 @@ + +&НаКлиенте +Процедура Рассчитать(Команда) + + Если Объект.ТипПлатежей.Пустая() Тогда + Сообщение = Новый СообщениеПользователю; + Сообщение.Текст = "Заполните тип платежа"; + Сообщение.Сообщить(); + Возврат; + КонецЕсли; + + Если Объект.ТипПлатежей = ТипПлатежаА() Тогда + ПСК = Объект.ПСК; + ГПС = Объект.ГПС/100; + КП = Объект.КП; + СЕП = (ПСК * ГПС / 12) / (1 - Pow(1 /(1 + ГПС / 12),КП-1)); + Объект.СЕП = СЕП; + СуммаВыплаты = СЕП * КП; + СуммаПереплаты = СуммаВыплаты - ПСК; + ЗаполнитьГрафикПлатежей(ПСК, КП, СЕП, ГПС); + Иначе + КП = Объект.КП; + ПСК = Объект.ПСК; + ОП = Объект.ПСК / КП; + ГПС = Объект.ГПС/100; + ЗаполнитьДиф(КП, ПСК, ОП, ГПС); + Объект.СЕП = Объект.ГрафикПлатежей.Итог("СуммаВыплаты") / КП; + СуммаВыплаты = Объект.ГрафикПлатежей.Итог("СуммаВыплаты"); + СуммаПереплаты = Объект.ГрафикПлатежей.Итог("СуммаВыплаты") - ПСК; + КонецЕсли; + +КонецПроцедуры + +&НаСервереБезКонтекста +Функция ТипПлатежаА() + + Возврат Перечисления.ТипыПлатежей.Аннуететный; + +КонецФункции // ТипПлатежа() + +&НаКлиенте +Процедура ЗаполнитьГрафикПлатежей(ПСК, КП, СЕП, ГПС) + + Объект.ГрафикПлатежей.Очистить(); + ОстатокЗайма = ПСК; + Сч = 0; + Пока Сч < КП Цикл + ТЧ = Объект.ГрафикПлатежей.Добавить(); + ТЧ.СуммаВыплаты = СЕП; + ТЧ.ВыплатыПроцентов = ОстатокЗайма * (ГПС/12); + ТЧ.ВыплатыТела = СЕП - ТЧ.ВыплатыПроцентов; + ТЧ.НомерПлатежа = Сч + 1; + ТЧ.ОстатокЗайма = ОстатокЗайма; + ОстатокЗайма = ОстатокЗайма - ТЧ.ВыплатыТела; + Сч = Сч + 1; + КонецЦикла; + +КонецПроцедуры // ЗаполнитьГрафикПлатежей() + +&НаКлиенте +Процедура ЗаполнитьДиф(КП, ПСК, ОП, ГПС) + + Объект.ГрафикПлатежей.Очистить(); + ТЧ = Объект.ГрафикПлатежей.Добавить(); + ТЧ.НомерПлатежа = 0; + ТЧ.ОстатокЗайма = ПСК; + ОстатокЗайма = ПСК; + Сч = 0; + Пока Сч < КП Цикл + + ТЧ = Объект.ГрафикПлатежей.Добавить(); + ТЧ.СуммаВыплаты = ОП + (ПСК - (ОП * Сч))*ГПС/12; + ТЧ.ВыплатыПроцентов = (ПСК - (ОП * Сч))*ГПС/12; + ТЧ.ВыплатыТела = ОП; + ОстатокЗайма = ОстатокЗайма - ТЧ.ВыплатыТела; + ТЧ.ОстатокЗайма = ОстатокЗайма; + ТЧ.НомерПлатежа = Сч + 1; + Сч = Сч + 1; + + КонецЦикла; + +КонецПроцедуры + + +&НаКлиенте +Процедура СложныйРасчетПриИзменении(Элемент) + + Если Объект.СложныйРасчет = Истина Тогда + Элементы.ДанныеРасчета.Видимость = Истина; + Иначе + Элементы.ДанныеРасчета.Видимость = Ложь; + КонецЕсли; + +КонецПроцедуры + diff --git a/Проект_деньги/src/DataProcessors/КонкуляторБанковскогоЗайма/КонкуляторБанковскогоЗайма.mdo b/Проект_деньги/src/DataProcessors/КонкуляторБанковскогоЗайма/КонкуляторБанковскогоЗайма.mdo new file mode 100644 index 0000000..12061da --- /dev/null +++ b/Проект_деньги/src/DataProcessors/КонкуляторБанковскогоЗайма/КонкуляторБанковскогоЗайма.mdo @@ -0,0 +1,304 @@ + + + + + + + КонкуляторБанковскогоЗайма + + ru + Конкулятор банковского займа + + true + DataProcessor.КонкуляторБанковскогоЗайма.Form.Форма + + ТипПлатежей + + ru + Тип платежей + + + EnumRef.ТипыПлатежей + + + ru + Тип платежа + + + + ShowError + + + СЕП + + ru + Сумма ежемесячного платежа + + + Number + + 15 + 2 + + + + + + + ПСК + + ru + Первичная сумма кредита + + + Number + + 15 + 2 + + + + + + + ГПС + + ru + Годовая процентная ставка + + + Number + + 5 + 2 + + + + + + + КП + + ru + Количество платежей + + + Number + + 5 + + + + + + + СложныйРасчет + + ru + Сложный расчет + + + Boolean + + + + + + + + + + ДанныеРасчета + + ru + Данные расчета + + + Use + LineNumber + + Use + + + + + ПериодДней + + ru + Период (дней) + + + Number + + 5 + + + + + + + + ПериодЛет + + ru + Период (лет) + + + Number + + 5 + 2 + + + + + + + + ПроцентЗаПериод + + ru + Процент за период + + + Number + + 5 + 2 + + + + + + + + Выплаты + + ru + Выплаты + + + Number + + 15 + 2 + + + + + + + + + + + + + ГрафикПлатежей + + ru + График платежей + + + Use + LineNumber + + Use + + + + + НомерПлатежа + + ru + № платежа + + + Number + + 5 + + + + + + + + СуммаВыплаты + + ru + Сумма выплаты + + + Number + + 15 + 2 + + + + + + + + ВыплатыТела + + ru + Выплаты тела + + + Number + + 15 + 2 + + + + + + + + ВыплатыПроцентов + + ru + Выплаты процентов + + + Number + + 15 + 2 + + + + + + + + ОстатокЗайма + + ru + Остаток займа + + + Number + + 15 + 2 + + + + + + + + + Форма + + ru + Форма + + PersonalComputer + MobileDevice + + diff --git a/Проект_деньги/src/DataProcessors/КонкуляторДоходности/Forms/Форма/Form.form b/Проект_деньги/src/DataProcessors/КонкуляторДоходности/Forms/Форма/Form.form new file mode 100644 index 0000000..cb85fd6 --- /dev/null +++ b/Проект_деньги/src/DataProcessors/КонкуляторДоходности/Forms/Форма/Form.form @@ -0,0 +1,833 @@ + + + + Группа1 + 10 + + СуммаВклада + 1 + true + true + + true + + + Объект.СуммаВклада + + + OnChange + СуммаВкладаПриИзменении + + + СуммаВкладаРасширеннаяПодсказка + 3 + Label + true + true + + Left + + + + СуммаВкладаКонтекстноеМеню + 2 + true + + InputField + EnterOnInput + true + Left + true + + true + true + true + true + true + true + + + + ПроцентВклада + 4 + true + true + + true + + + Объект.ПроцентВклада + + + OnChange + ПроцентВкладаПриИзменении + + + ПроцентВкладаРасширеннаяПодсказка + 6 + Label + true + true + + Left + + + + ПроцентВкладаКонтекстноеМеню + 5 + true + + InputField + EnterOnInput + true + Left + true + + true + true + true + true + true + true + + + + СрокВкладаДней + 7 + + <key>ru</key> + <value>Срок вклада (дней)</value> + + true + true + + true + + + Объект.СрокВкладаДней + + + OnChange + СрокВкладаПриИзменении + + + СрокВкладаДнейРасширеннаяПодсказка + 9 + Label + true + true + + Left + + + + СрокВкладаДнейКонтекстноеМеню + 8 + true + + InputField + EnterOnInput + true + Left + true + + true + true + true + true + true + true + + + + СрокВкладаЛет + 23 + true + true + + true + + + Объект.СрокВкладаЛет + + + OnChange + СрокВкладаЛетПриИзменении + + + СрокВкладаЛетРасширеннаяПодсказка + 25 + Label + true + true + + Left + + + + СрокВкладаЛетКонтекстноеМеню + 24 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + + + true + true + + true + + + Группа1РасширеннаяПодсказка + 11 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + Группа2 + 12 + + ДоходВГод + 14 + true + true + + true + + + ДоходВГод + + + ДоходВГодРасширеннаяПодсказка + 16 + Label + true + true + + Left + + + + ДоходВГодКонтекстноеМеню + 15 + true + + InputField + true + Enter + true + Left + true + + true + true + true + true + true + true + + + + ДоходВМесяц + 17 + true + true + + true + + + ДоходВМесяц + + + ДоходВМесяцРасширеннаяПодсказка + 19 + Label + true + true + + Left + + + + ДоходВМесяцКонтекстноеМеню + 18 + true + + InputField + true + Enter + true + Left + true + + true + true + true + true + true + true + + + + ДоходЗаВесьСрок + 20 + true + true + + true + + + ДоходЗаВесьСрок + + + ДоходЗаВесьСрокРасширеннаяПодсказка + 22 + Label + true + true + + Left + + + + ДоходЗаВесьСрокКонтекстноеМеню + 21 + true + + InputField + true + Enter + true + Left + true + + true + true + true + true + true + true + + + true + true + + true + + + Группа2РасширеннаяПодсказка + 13 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + СложныйРасчет + 54 + true + true + + true + + + Объект.СложныйРасчет + + + OnChange + СложныйРасчетПриИзменении + + + СложныйРасчетРасширеннаяПодсказка + 56 + Label + true + true + + Left + + + + СложныйРасчетКонтекстноеМеню + 55 + true + + CheckBoxField + Enter + true + Left + true + + + + ДанныеРасчета + 26 + true + true + + true + + + Объект.ДанныеРасчета + + None + + ДанныеРасчетаНомерСтроки + 39 + true + true + + true + + + Объект.ДанныеРасчета.LineNumber + + + ДанныеРасчетаНомерСтрокиРасширеннаяПодсказка + 41 + Label + true + true + + Left + + + + ДанныеРасчетаНомерСтрокиКонтекстноеМеню + 40 + true + + LabelField + EnterOnInput + true + Left + true + + true + true + + + + ДанныеРасчетаПериодДней + 42 + true + true + + true + + + Объект.ДанныеРасчета.ПериодДней + + + OnChange + ДанныеРасчетаПериодДнейПриИзменении + + + ДанныеРасчетаПериодДнейРасширеннаяПодсказка + 44 + Label + true + true + + Left + + + + ДанныеРасчетаПериодДнейКонтекстноеМеню + 43 + true + + InputField + EnterOnInput + true + Left + true + + true + true + true + true + true + true + + + + ДанныеРасчетаПериодЛет + 45 + true + true + + true + + + Объект.ДанныеРасчета.ПериодЛет + + + OnChange + ДанныеРасчетаПериодЛетПриИзменении + + + ДанныеРасчетаПериодЛетРасширеннаяПодсказка + 47 + Label + true + true + + Left + + + + ДанныеРасчетаПериодЛетКонтекстноеМеню + 46 + true + + InputField + EnterOnInput + true + Left + true + + true + true + true + true + true + true + + + + ДанныеРасчетаПроцентЗаПериод + 48 + true + true + + true + + + Объект.ДанныеРасчета.ПроцентЗаПериод + + + OnChange + ДанныеРасчетаПроцентЗаПериодПриИзменении + + + ДанныеРасчетаПроцентЗаПериодРасширеннаяПодсказка + 50 + Label + true + true + + Left + + + + ДанныеРасчетаПроцентЗаПериодКонтекстноеМеню + 49 + true + + InputField + EnterOnInput + true + Left + true + + true + true + true + true + true + true + + + + ДанныеРасчетаДоход + 51 + true + false + + true + + + Объект.ДанныеРасчета.Доход + + + ДанныеРасчетаДоходРасширеннаяПодсказка + 53 + Label + true + true + + Left + + + + ДанныеРасчетаДоходКонтекстноеМеню + 52 + true + + InputField + EnterOnInput + true + Left + true + + true + true + true + true + true + true + + + + ДанныеРасчетаКоманднаяПанель + 28 + Left + true + + + ДанныеРасчетаСтрокаПоиска + 30 + + ДанныеРасчетаСтрокаПоискаРасширеннаяПодсказка + 32 + Label + true + true + + Left + + + + ДанныеРасчетаСтрокаПоискаКонтекстноеМеню + 31 + true + + ДанныеРасчета + + true + + + + ДанныеРасчетаСостояниеПросмотра + 33 + + ДанныеРасчетаСостояниеПросмотраРасширеннаяПодсказка + 35 + Label + true + true + + Left + + + + ДанныеРасчетаСостояниеПросмотраКонтекстноеМеню + 34 + true + + ViewStatusAddition + ДанныеРасчета + + true + + + + ДанныеРасчетаУправлениеПоиском + 36 + + ДанныеРасчетаУправлениеПоискомРасширеннаяПодсказка + 38 + Label + true + true + + Left + + + + ДанныеРасчетаУправлениеПоискомКонтекстноеМеню + 37 + true + + SearchControlAddition + ДанныеРасчета + + true + + + + ДанныеРасчетаРасширеннаяПодсказка + 29 + Label + true + true + + Left + + + + ДанныеРасчетаКонтекстноеМеню + 27 + true + + HierarchicalList + true + true + true + true + true + MultiRow +
true
+ 1 + 1 + AutoUse + AutoUse + true + true + true + Auto + Auto + true + true + true + true + +
+ + ФормаКоманднаяПанель + -1 + Left + true + + + OnOpen + ПриОткрытии + + true + true + true + Vertical + true + true + true + true + true + + Объект + 1 + + DataProcessorObject.КонкуляторДоходности + + + true + + + true + +
true
+
+ + ДоходВГод + + <key>ru</key> + <value>Доход в год</value> + + 2 + + Number + + 15 + 2 + + + + true + + + true + + + + ДоходВМесяц + + <key>ru</key> + <value>Доход в месяц</value> + + 3 + + Number + + 15 + 2 + + + + true + + + true + + + + ДоходЗаВесьСрок + + <key>ru</key> + <value>Доход за весь срок</value> + + 4 + + Number + + 15 + 2 + + + + true + + + true + + + + + + + +
diff --git a/Проект_деньги/src/DataProcessors/КонкуляторДоходности/Forms/Форма/Module.bsl b/Проект_деньги/src/DataProcessors/КонкуляторДоходности/Forms/Форма/Module.bsl new file mode 100644 index 0000000..999dad2 --- /dev/null +++ b/Проект_деньги/src/DataProcessors/КонкуляторДоходности/Forms/Форма/Module.bsl @@ -0,0 +1,160 @@ + +&НаКлиенте +Функция ДоходВГод() + + ДоходВГод = Объект.СуммаВклада * (Объект.ПроцентВклада/100); + Возврат ДоходВГод; + +КонецФункции // ДоходВГод() + +&НаКлиенте +Функция ДоходВМесяц() + + ДоходВМесяц = ДоходВГод()/12; + Возврат ДоходВМесяц; + +КонецФункции // ДоходВМесяц() + + &НаКлиенте + Функция ДоходЗаПериод() + + ПроцентВДень = (Объект.ПроцентВклада/100) / 365; + ДоходЗаВесьСрок = Объект.СуммаВклада * ПроцентВДень * Объект.СрокВкладаДней; + Возврат ДоходЗаВесьСрок; + + КонецФункции // ДоходЗаПериод() + +&НаКлиенте +Процедура Вычисления() + + Если Объект.СрокВкладаДней <> 0 И Объект.СрокВкладаДней <> 0 И Объект.ПроцентВклада <> 0 Тогда + ДоходВГод = ДоходВГод(); + ДоходВМесяц = ДоходВМесяц(); + ДоходЗаВесьСрок = ДоходЗаПериод(); + КонецЕсли; + +КонецПроцедуры // Вычисления() + +&НаКлиенте +Процедура СложныеВычисления() + + Если Объект.ДанныеРасчета.Количество() = 0 Тогда + Возврат; + КонецЕсли; + СуммаВклада = Объект.СуммаВклада; + ИтогПроцентЗаПериод = 0; + ИтогПериодДней = 0; + ИтогПериодЛет = 0; + ИтогДоход = 0; + Для каждого Строка Из Объект.ДанныеРасчета Цикл + Если Строка.ПериодДней <> 0 И Строка.ПроцентЗаПериод <> 0 И СуммаВклада <> 0 Тогда + Строка.Доход = СуммаВклада * ((Строка.ПроцентЗаПериод / 36500) * Строка.ПериодДней); + ИтогПроцентЗаПериод = (ИтогПроцентЗаПериод + Строка.ПроцентЗаПериод) / Строка.НомерСтроки; + ИтогПериодДней = ИтогПериодДней + Строка.ПериодДней; + ИтогПериодЛет = ИтогПериодЛет + Строка.ПериодЛет; + ИтогДоход = ИтогДоход + Строка.Доход; + Иначе + Возврат; + КонецЕсли; + КонецЦикла; + Объект.ПроцентВклада = ИтогПроцентЗаПериод; + Объект.СрокВкладаДней = ИтогПериодДней; + Объект.СрокВкладаЛет = ИтогПериодЛет; + ДоходЗаВесьСрок = ИтогДоход; + ДоходВМесяц = ИтогДоход / ИтогПериодДней * 30; + +КонецПроцедуры // СложныеВычисления() + +&НаКлиенте +Процедура СуммаВкладаПриИзменении(Элемент) + + Если Объект.СложныйРасчет = Ложь Тогда + Вычисления(); + Иначе + СложныеВычисления(); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПроцентВкладаПриИзменении(Элемент) + + Вычисления(); + +КонецПроцедуры + +&НаКлиенте +Процедура СрокВкладаПриИзменении(Элемент) + + Объект.СрокВкладаЛет = Объект.СрокВкладаДней / 365; + Вычисления(); + +КонецПроцедуры + +&НаКлиенте +Процедура СрокВкладаЛетПриИзменении(Элемент) + + Объект.СрокВкладаДней = Объект.СрокВкладаЛет * 365; + Вычисления(); + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + Элементы.ДанныеРасчета.Видимость = Ложь; + +КонецПроцедуры + +&НаКлиенте +Процедура СложныйРасчетПриИзменении(Элемент) + + ПроцентВклада = Элементы.ПроцентВклада; + СрокВкладаДней = Элементы.СрокВкладаДней; + СрокВкладаЛет = Элементы.СрокВкладаЛет; + _ДоходВГод = Элементы.ДоходВГод; + _ДоходВМесяц = Элементы.ДоходВМесяц; + Если Объект.СложныйРасчет = Истина Тогда + Элементы.ДанныеРасчета.Видимость = Истина; + ПроцентВклада.ТолькоПросмотр = Истина; + ПроцентВклада.Заголовок = "Ср. процент за период"; + СрокВкладаДней.ТолькоПросмотр = Истина; + СрокВкладаЛет.ТолькоПросмотр = Истина; + _ДоходВГод.Видимость = Ложь; + _ДоходВМесяц.Заголовок = "Ср. доход в месяц"; + Иначе + Элементы.ДанныеРасчета.Видимость = Ложь; + ПроцентВклада.ТолькоПросмотр = Ложь; + ПроцентВклада.Заголовок = "Процент вклада"; + СрокВкладаДней.ТолькоПросмотр = Ложь; + СрокВкладаЛет.ТолькоПросмотр = Ложь; + _ДоходВГод.Видимость = Истина; + _ДоходВМесяц.Заголовок = "Доход в месяц"; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ДанныеРасчетаПериодДнейПриИзменении(Элемент) + + Элемент = Элементы.ДанныеРасчета.ТекущиеДанные; + Элемент.ПериодЛет = Элемент.ПериодДней / 365; + СложныеВычисления(); + +КонецПроцедуры + +&НаКлиенте +Процедура ДанныеРасчетаПериодЛетПриИзменении(Элемент) + + Элемент = Элементы.ДанныеРасчета.ТекущиеДанные; + Элемент.ПериодДней = Элемент.ПериодЛет * 365; + СложныеВычисления(); + +КонецПроцедуры + +&НаКлиенте +Процедура ДанныеРасчетаПроцентЗаПериодПриИзменении(Элемент) + + СложныеВычисления(); + +КонецПроцедуры diff --git a/Проект_деньги/src/DataProcessors/КонкуляторДоходности/КонкуляторДоходности.mdo b/Проект_деньги/src/DataProcessors/КонкуляторДоходности/КонкуляторДоходности.mdo new file mode 100644 index 0000000..def1ee4 --- /dev/null +++ b/Проект_деньги/src/DataProcessors/КонкуляторДоходности/КонкуляторДоходности.mdo @@ -0,0 +1,179 @@ + + + + + + + КонкуляторДоходности + + ru + Конкулятор доходности + + true + DataProcessor.КонкуляторДоходности.Form.Форма + + СуммаВклада + + ru + Сумма вклада + + + Number + + 15 + 2 + + + + + ShowError + + + ПроцентВклада + + ru + Процент вклада + + + Number + + 5 + 2 + + + + + ShowError + + + СрокВкладаДней + + ru + Срок вклада (дней) + + + Number + + 5 + + + + + ShowError + + + СрокВкладаЛет + + ru + Срок вклада (лет) + + + Number + + 5 + 2 + + + + + + + СложныйРасчет + + ru + Сложный расчет + + + Boolean + + + + + + + + + + ДанныеРасчета + + ru + Данные расчета + + + ПериодДней + + ru + Период (дней) + + + Number + + 5 + + + + + + + + ПериодЛет + + ru + Период (лет) + + + Number + + 5 + 2 + + + + + + + + ПроцентЗаПериод + + ru + Процент за период + + + Number + + 5 + 2 + + + + + + + + Доход + + ru + Доход + + + Number + + 15 + 2 + + + + + + + + + Форма + + ru + Форма + + PersonalComputer + MobileDevice + + diff --git a/Проект_деньги/src/DataProcessors/ОбменДанными/Forms/Форма/Form.form b/Проект_деньги/src/DataProcessors/ОбменДанными/Forms/Форма/Form.form new file mode 100644 index 0000000..c79ca79 --- /dev/null +++ b/Проект_деньги/src/DataProcessors/ОбменДанными/Forms/Форма/Form.form @@ -0,0 +1,331 @@ + + + + УзелОбмена + 1 + true + true + + true + + + УзелОбмена + + + OnChange + УзелОбменаПриИзменении + + + УзелОбменаРасширеннаяПодсказка + 3 + Label + true + true + + Left + + + + УзелОбменаКонтекстноеМеню + 2 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + + + + ЗарегистрироватьИзменения + 4 + true + false + + true + + + ЗарегистрироватьИзмененияРасширеннаяПодсказка + 5 + Label + true + true + + Left + + + UsualButton + Form.Command.ЗарегистрироватьИзменения + Auto + true + true + UserCmds + Auto + + + ВыгрузитьДанные + 6 + true + false + + true + + + ВыгрузитьДанныеРасширеннаяПодсказка + 7 + Label + true + true + + Left + + + UsualButton + Form.Command.ВыгрузитьДанные + Auto + true + true + UserCmds + Auto + + + ЗагрузитьДанные + 8 + true + false + + true + + + ЗагрузитьДанныеРасширеннаяПодсказка + 9 + Label + true + true + + Left + + + UsualButton + Form.Command.ЗагрузитьДанные + Auto + true + true + UserCmds + Auto + + + HTTP_Сервис + 12 + true + true + + true + + + HTTP_Сервис + + + HTTP_СервисРасширеннаяПодсказка + 14 + Label + true + true + + Left + + + + HTTP_СервисКонтекстноеМеню + 13 + true + + CheckBoxField + Enter + true + Left + true + + + + ФормаКоманднаяПанель + -1 + + ФормаПроверитьСоединение + 10 + true + true + + true + + + ФормаПроверитьСоединениеРасширеннаяПодсказка + 11 + Label + true + true + + Left + + + Form.Command.ПроверитьСоединение + Auto + true + true + UserCmds + Auto + + Left + true + + true + true + true + Vertical + true + true + true + true + true + + Объект + 1 + + DataProcessorObject.ОбменДанными + + + true + + + true + +
true
+
+ + УзелОбмена + + <key>ru</key> + <value>Узел обмена</value> + + 2 + + ExchangePlanRef.Мобильные + + + true + + + true + + + + HTTP_Сервис + + <key>ru</key> + <value>HTTP сервис</value> + + 3 + + Boolean + + + true + + + true + + + + ВыгрузитьДанные + + <key>ru</key> + <value>Выгрузить данные</value> + + 1 + + ru + Выгрузить данные + + + true + + + + ВыгрузитьДанные + + + Auto + + + ЗагрузитьДанные + + <key>ru</key> + <value>Загрузить данные</value> + + 2 + + ru + Загрузить данные + + + true + + + + ЗагрузитьДанные + + + Auto + + + ЗарегистрироватьИзменения + + <key>ru</key> + <value>Зарегистрировать изменения</value> + + 3 + + ru + Зарегистрировать изменения + + + true + + + + ЗарегистрироватьИзменения + + + Auto + + + ПроверитьСоединение + + <key>ru</key> + <value>Проверить соединение</value> + + 4 + + true + + + + ПроверитьСоединение + + + Auto + + + + + + +
diff --git a/Проект_деньги/src/DataProcessors/ОбменДанными/Forms/Форма/Module.bsl b/Проект_деньги/src/DataProcessors/ОбменДанными/Forms/Форма/Module.bsl new file mode 100644 index 0000000..021d41d --- /dev/null +++ b/Проект_деньги/src/DataProcessors/ОбменДанными/Forms/Форма/Module.bsl @@ -0,0 +1,219 @@ + +&НаКлиенте +Процедура ПроверитьСоединение(Команда) + + Текст = ?(ПроверитьСоединениеНаСервере(),"Установлено", "Нет связи"); + + Сообщение = Новый СообщениеПользователю(); + Сообщение.Текст = Текст; + Сообщение.Сообщить(); + +КонецПроцедуры + +&НаСервереБезКонтекста +Функция ПроверитьСоединениеНаСервере() + + Результат = Ложь; + Ответ = КоннекторHTTP.Get("http://192.168.31.221:81/mobile/hs/mobile/ping"); + Если Ответ.КодСостояния = 200 Тогда + Результат = Истина; + КонецЕсли; + + Возврат Результат; + +КонецФункции + +&НаКлиенте +Процедура УзелОбменаПриИзменении(Элемент) + + Если НЕ УзелОбмена.Пустая() И НЕ ПредопределенныйУзел(УзелОбмена) Тогда + Элементы.ВыгрузитьДанные.Доступность = Истина; + Элементы.ЗагрузитьДанные.Доступность = Истина; + Элементы.ЗарегистрироватьИзменения.Доступность = Истина; + Иначе + Элементы.ВыгрузитьДанные.Доступность = Ложь; + Элементы.ЗагрузитьДанные.Доступность = Ложь; + Элементы.ЗарегистрироватьИзменения.Доступность = Ложь; + КонецЕсли; + +КонецПроцедуры + +&НаСервереБезКонтекста +Процедура ВыгрузитьДанныеНаСервере(Узел, Каталог, HTTP_Сервис = Ложь) + + Если HTTP_Сервис Тогда + //ПараметрыСоединения = Обмен.ПараметрыСоединения(); + + ДанныеОтправки = Новый Структура("data", ""); + СерверАдрес = Константы.СерверАдрес.Получить() + "/exchange/requst"; + КодЭтогоУзла = ПланыОбмена.Мобильные.ЭтотУзел().Код; + + УзелОбъект = Узел.ПолучитьОбъект(); + ФайлОбмена = ПолучитьИмяВременногоФайла("xml"); + УзелОбъект.ЗаписатьСообщениеСИзменениямиВФайл(ФайлОбмена); + ДД = Новый ДвоичныеДанные(ФайлОбмена); + УдалитьФайлы(ФайлОбмена); + XMLВBase64 = Base64Строка(ДД); + ДанныеОтправки.data = XMLВBase64; + + ДопПараметры = КоннекторHTTP.НовыеПараметры(); + ДопПараметры.ПараметрыПреобразованияJSON.ПрочитатьВСоответствие = Ложь; + ДопПараметры.Таймаут = 300; + УРЛ = СтрШаблон("%1?%2=%3", СерверАдрес, "node", КодЭтогоУзла); + Ответ = КоннекторHTTP.PostJson(УРЛ, ДанныеОтправки, ДопПараметры); + + Сообщение = Новый СообщениеПользователю; + Если ТипЗнч(Ответ) = Тип("Строка") Тогда + Сообщение.Текст = Ответ; + Сообщение.Сообщить(); + ИначеЕсли ЗначениеЗаполнено(Ответ.error) Тогда + Для каждого Элем Из Ответ.error Цикл + Сообщение.Текст = Элем; + Сообщение.Сообщить(); + КонецЦикла; + Иначе + Сообщение.Текст = Ответ.data; + Сообщение.Сообщить(); + КонецЕсли; + Иначе + УзелОбъект = Узел.ПолучитьОбъект(); + УзелОбъект.ЗаписатьСообщениеСИзменениями(Каталог); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ВыгрузитьДанные(Команда) + + #Если МобильноеПриложениеКлиент Тогда + ВыгрузитьДанныеНаСервере(УзелОбмена, "/storage/emulated/0/DCIM/files", HTTP_Сервис); + #Иначе + Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.ВыборКаталога); + Диалог.Заголовок = "Укажите каталог информационной базы:"; + + Если Диалог.Выбрать() Тогда + ВыгрузитьДанныеНаСервере(УзелОбмена, Диалог.Каталог, HTTP_Сервис); + КонецЕсли; + #КонецЕсли + +КонецПроцедуры + +&НаСервереБезКонтекста +Процедура ЗагрузитьДанныеНаСервере(Узел, Каталог, HTTP_Сервис = Ложь) + + Если HTTP_Сервис Тогда + + КодЭтогоУзла = ПланыОбмена.Мобильные.ЭтотУзел().Код; + + СерверАдрес = Константы.СерверАдрес.Получить() + "/exchange/requst"; + ПараметрыЗапроса = Новый Структура("node", КодЭтогоУзла); + ДопПараметры = КоннекторHTTP.НовыеПараметры(); + ДопПараметры.Таймаут = 300; + ДопПараметры.ПараметрыПреобразованияJSON.ПрочитатьВСоответствие = Ложь; + + Ответ = КоннекторHTTP.GetJson(СерверАдрес, ПараметрыЗапроса, ДопПараметры); + + Сообщение = Новый СообщениеПользователю; + Если ТипЗнч(Ответ) = Тип("Строка") Тогда + Сообщение.Текст = Ответ; + Сообщение.Сообщить(); + Возврат; + ИначеЕсли ЗначениеЗаполнено(Ответ.error) Тогда + Для каждого Элем Из Ответ.error Цикл + Сообщение.Текст = Элем; + Сообщение.Сообщить(); + КонецЦикла; + Возврат; + КонецЕсли; + + ИмяФайла = ПолучитьИмяВременногоФайла("xml"); + ДД = Base64Значение(Ответ.data); + ДД.Записать(ИмяФайла); + + УзелОбъект = Узел.ПолучитьОбъект(); + Сообщения = Новый Массив; + Результат = УзелОбъект.ПрочитатьСообщениеСИзменениямиФайл(ИмяФайла, Сообщения, Истина); + + Для каждого Элемент Из Результат.МассивДокументов Цикл + + ДоступностьПроведения = СокрЛП(Элемент.Метаданные().Проведение); + + Если ДоступностьПроведения = "Запретить" Тогда + Продолжить; + КонецЕсли; + + Если Не Элемент.ПометкаУдаления Тогда + ЭлементОбъект = Элемент.ПолучитьОбъект(); + ЭлементОбъект.ДополнительныеСвойства.Вставить("НеРегистрировать"); + ЭлементОбъект.Записать(РежимЗаписиДокумента.Проведение); + КонецЕсли; + + КонецЦикла; + + Для каждого Элем Из Сообщения Цикл + Сообщение.Текст = Элем; + Сообщение.Сообщить(); + КонецЦикла; + + Сообщение.Текст = "Данные успешно получены"; + Сообщение.Сообщить(); + + Иначе + УзелОбъект = Узел.ПолучитьОбъект(); + Результат = УзелОбъект.ПрочитатьСообщениеСИзменениями(Каталог); + + Для каждого Элемент Из Результат.МассивДокументов Цикл + + ДоступностьПроведения = СокрЛП(Элемент.Метаданные().Проведение); + + Если ДоступностьПроведения = "Запретить" Тогда + Продолжить; + КонецЕсли; + + Если Не Элемент.ПометкаУдаления Тогда + ЭлементОбъект = Элемент.ПолучитьОбъект(); + ЭлементОбъект.Записать(РежимЗаписиДокумента.Проведение); + КонецЕсли; + + КонецЦикла; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ЗагрузитьДанные(Команда) + + #Если МобильноеПриложениеКлиент Тогда + ЗагрузитьДанныеНаСервере(УзелОбмена, "/storage/emulated/0/DCIM/files", HTTP_Сервис); + #Иначе + Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.ВыборКаталога); + Диалог.Заголовок = "Укажите каталог информационной базы:"; + + Если Диалог.Выбрать() Тогда + ЗагрузитьДанныеНаСервере(УзелОбмена, Диалог.Каталог, HTTP_Сервис); + КонецЕсли; + #КонецЕсли + +КонецПроцедуры + +&НаСервереБезКонтекста +Процедура ЗарегистрироватьИзмененияНаСервере(Узел) + + Обмен.ЗарегистрироватьВсеОбъекты(Узел); + +КонецПроцедуры + +&НаКлиенте +Процедура ЗарегистрироватьИзменения(Команда) + + ЗарегистрироватьИзмененияНаСервере(УзелОбмена); + +КонецПроцедуры + +&НаСервереБезКонтекста +Функция ПредопределенныйУзел(Узел) + + Возврат Узел = ПланыОбмена.Мобильные.ЭтотУзел(); + +КонецФункции // ПредопределенныйУзел() + \ No newline at end of file diff --git a/Проект_деньги/src/DataProcessors/ОбменДанными/ОбменДанными.mdo b/Проект_деньги/src/DataProcessors/ОбменДанными/ОбменДанными.mdo new file mode 100644 index 0000000..58b9548 --- /dev/null +++ b/Проект_деньги/src/DataProcessors/ОбменДанными/ОбменДанными.mdo @@ -0,0 +1,23 @@ + + + + + + + ОбменДанными + + ru + Обмен данными + + true + DataProcessor.ОбменДанными.Form.Форма + + Форма + + ru + Форма + + PersonalComputer + MobileDevice + + diff --git a/Проект_деньги/src/DataProcessors/Отчеты/Forms/Форма/Form.form b/Проект_деньги/src/DataProcessors/Отчеты/Forms/Форма/Form.form new file mode 100644 index 0000000..baf1ac1 --- /dev/null +++ b/Проект_деньги/src/DataProcessors/Отчеты/Forms/Форма/Form.form @@ -0,0 +1,248 @@ + + + + Группа1 + 43 + + ВыводДоходы + 45 + true + true + + true + + + ВыводДоходыРасширеннаяПодсказка + 46 + Label + true + true + + Left + + + UsualButton + Form.Command.ВыводДоходы + Auto + true + true + UserCmds + Auto + + + ВыводРасходы + 47 + true + true + + true + + + ВыводРасходыРасширеннаяПодсказка + 48 + Label + true + true + + Left + + + UsualButton + Form.Command.ВыводРасходы + Auto + true + true + UserCmds + Auto + + + ВыводДоходыРасходы + 49 + true + true + + true + + + ВыводДоходыРасходыРасширеннаяПодсказка + 50 + Label + true + true + + Left + + + UsualButton + Form.Command.ВыводДоходыРасходы + Auto + true + true + UserCmds + Auto + + + ФормаЗакрыть + 41 + true + true + + true + + + ФормаЗакрытьРасширеннаяПодсказка + 42 + Label + true + true + + Left + + + UsualButton + Form.StandardCommand.Close + Auto + true + true + UserCmds + Auto + + true + true + + true + + + Группа1РасширеннаяПодсказка + 44 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + ФормаКоманднаяПанель + -1 + Left + true + + + OnOpen + ПриОткрытии + + true + true + true + Vertical + true + true + true + true + true + + Объект + 1 + + DataProcessorObject.Отчеты + + + true + + + true + +
true
+
+ + ВыводДоходы + + <key>ru</key> + <value>Отчет по доходам</value> + + 2 + + ru + Вывод доходы + + + true + + + CommonPicture.Доходы + + + + ВыводДоходы + + + TextPicture + DontUse + + + ВыводРасходы + + <key>ru</key> + <value>Отчет по расходам</value> + + 3 + + ru + Вывод расходы + + + true + + + CommonPicture.Расходы + + + + ВыводРасходы + + + TextPicture + DontUse + + + ВыводДоходыРасходы + + <key>ru</key> + <value>Вывод доходы расходы</value> + + 1 + + ru + Вывод доходы расходы + + + true + + + CommonPicture.ДоходыРасходы + + + + ВыводДоходыРасходы + + + TextPicture + DontUse + + + + + + +
diff --git a/Проект_деньги/src/DataProcessors/Отчеты/Forms/Форма/Module.bsl b/Проект_деньги/src/DataProcessors/Отчеты/Forms/Форма/Module.bsl new file mode 100644 index 0000000..e357057 --- /dev/null +++ b/Проект_деньги/src/DataProcessors/Отчеты/Forms/Форма/Module.bsl @@ -0,0 +1,35 @@ + +&НаКлиенте +Процедура ВыводДоходы(Команда) + + ВыводОтчета("ОтчетПоДаходам"); + +КонецПроцедуры + +&НаКлиенте +Процедура ВыводРасходы(Команда) + + ВыводОтчета("ОтчетПоРасходам"); + +КонецПроцедуры + +&НаКлиенте +Процедура ВыводДоходыРасходы(Команда) + + ВыводОтчета("ОтчетПоДоходамИРасходам"); + +КонецПроцедуры + +&НаКлиенте +Процедура ВыводОтчета(ИмяМакета) + + ПараметрыОтчета = Новый Структура; + ПараметрыОтчета.Вставить("ИмяМакета", ИмяМакета); + ФормаОтчета = ПолучитьФорму("ОбщаяФорма.ФормаОтчета",ПараметрыОтчета); + Если ФормаОтчета.Открыта() Тогда + ФормаОтчета.Закрыть(); + КонецЕсли; + ФормаОтчета.Открыть(); + +КонецПроцедуры + diff --git a/Проект_деньги/src/DataProcessors/Отчеты/Отчеты.mdo b/Проект_деньги/src/DataProcessors/Отчеты/Отчеты.mdo new file mode 100644 index 0000000..2b7bab8 --- /dev/null +++ b/Проект_деньги/src/DataProcessors/Отчеты/Отчеты.mdo @@ -0,0 +1,23 @@ + + + + + + + Отчеты + + ru + Отчеты + + true + DataProcessor.Отчеты.Form.Форма + + Форма + + ru + Форма + + PersonalComputer + MobileDevice + + diff --git a/Проект_деньги/src/DataProcessors/ОчиститьДанные/Forms/Форма/Form.form b/Проект_деньги/src/DataProcessors/ОчиститьДанные/Forms/Форма/Form.form new file mode 100644 index 0000000..4269bd2 --- /dev/null +++ b/Проект_деньги/src/DataProcessors/ОчиститьДанные/Forms/Форма/Form.form @@ -0,0 +1,184 @@ + + + + ОчиститьДокументы + 1 + true + true + + true + + + Документы + + + ОчиститьДокументыРасширеннаяПодсказка + 3 + Label + true + true + + Left + + + + ОчиститьДокументыКонтекстноеМеню + 2 + true + + CheckBoxField + Enter + true + Left + true + + Switcher + + + + ОчиститьСправочники + 4 + true + true + + true + + + Справочники + + + ОчиститьСправочникиРасширеннаяПодсказка + 6 + Label + true + true + + Left + + + + ОчиститьСправочникиКонтекстноеМеню + 5 + true + + CheckBoxField + Enter + true + Left + true + + Switcher + + + + ФормаКоманднаяПанель + -1 + + ФормаОчистить + 7 + true + true + + true + + + ФормаОчиститьРасширеннаяПодсказка + 8 + Label + true + true + + Left + + + Form.Command.Очистить + Auto + true + true + true + UserCmds + Auto + + Left + true + + true + true + true + Vertical + true + true + true + true + true + + Объект + 1 + + DataProcessorObject.ОчиститьДанные + + + true + + + true + +
true
+
+ + Документы + + <key>ru</key> + <value>Документы</value> + + 2 + + Boolean + + + true + + + true + + + + Справочники + + <key>ru</key> + <value>Справочники</value> + + 3 + + Boolean + + + true + + + true + + + + Очистить + + <key>ru</key> + <value>Очистить</value> + + 1 + + true + + + + Очистить + + + Auto + + + + + + +
diff --git a/Проект_деньги/src/DataProcessors/ОчиститьДанные/Forms/Форма/Module.bsl b/Проект_деньги/src/DataProcessors/ОчиститьДанные/Forms/Форма/Module.bsl new file mode 100644 index 0000000..ff8b1b8 --- /dev/null +++ b/Проект_деньги/src/DataProcessors/ОчиститьДанные/Forms/Форма/Module.bsl @@ -0,0 +1,55 @@ + +#Область ОбработчикиКомандФормы + +//@skip-check module-structure-form-event-regions +&НаКлиенте +Процедура Очистить(Команда) + + ПараметрыВыполнения = ПараметрыВыполнения(); + ЗаполнитьЗначенияСвойств(ПараметрыВыполнения, ЭтотОбъект); + ОчиститьНаСервере(ПараметрыВыполнения); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервере +Функция ПараметрыВыполнения() + ПолучитьРеквизиты(); + Возврат Новый Структура("Документы, Справочники"); + +КонецФункции + +&НаСервереБезКонтекста +Процедура ОчиститьНаСервере(ПараметрыВыполнения) + + Сообщение = Новый СообщениеПользователю(); + + Для Каждого Элемент Из ПараметрыВыполнения Цикл + Если Элемент.Значение Тогда + //@skip-check module-unused-local-variable + Для Каждого ЭлементМетаданных Из Метаданные[Элемент.Ключ] Цикл + Выборка = Неопределено; + ТекстВыполнения = " + | Выборка = " + Элемент.Ключ + "." + ЭлементМетаданных.Имя+ ".Выбрать();"; + //@skip-check server-execution-safe-mode + Выполнить ТекстВыполнения; + + Пока Выборка.Следующий() Цикл + Попытка + Объект = Выборка.ПолучитьОбъект(); + Объект.Удалить(); + Исключение + Сообщение.Текст = ОписаниеОшибки(); + Сообщение.Сообщить(); + КонецПопытки; + КонецЦикла; + КонецЦикла; + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/Проект_деньги/src/DataProcessors/ОчиститьДанные/ОчиститьДанные.mdo b/Проект_деньги/src/DataProcessors/ОчиститьДанные/ОчиститьДанные.mdo new file mode 100644 index 0000000..2121bac --- /dev/null +++ b/Проект_деньги/src/DataProcessors/ОчиститьДанные/ОчиститьДанные.mdo @@ -0,0 +1,23 @@ + + + + + + + ОчиститьДанные + + ru + Очистить данные + + true + DataProcessor.ОчиститьДанные.Form.Форма + + Форма + + ru + Форма + + PersonalComputer + MobileDevice + + diff --git a/Проект_деньги/src/DataProcessors/ПровестиВсеДокументы/Forms/Форма/Form.form b/Проект_деньги/src/DataProcessors/ПровестиВсеДокументы/Forms/Форма/Form.form new file mode 100644 index 0000000..92827c3 --- /dev/null +++ b/Проект_деньги/src/DataProcessors/ПровестиВсеДокументы/Forms/Форма/Form.form @@ -0,0 +1,168 @@ + + + + ДатаНачала + 1 + true + true + + true + + + Объект.ДатаНачала + + + ДатаНачалаРасширеннаяПодсказка + 3 + Label + true + true + + Left + + + + ДатаНачалаКонтекстноеМеню + 2 + true + + InputField + EnterOnInput + true + Left + true + + true + true + true + true + true + true + + + + ДатаОкончания + 4 + true + true + + true + + + Объект.ДатаОкончания + + + ДатаОкончанияРасширеннаяПодсказка + 6 + Label + true + true + + Left + + + + ДатаОкончанияКонтекстноеМеню + 5 + true + + InputField + EnterOnInput + true + Left + true + + true + true + true + true + true + true + + + + Провести + 10 + true + true + + true + + + ПровестиРасширеннаяПодсказка + 11 + Label + true + true + + Left + + + UsualButton + Form.Command.Провести + Auto + true + true + UserCmds + Auto + + + ФормаКоманднаяПанель + -1 + Left + true + + + OnOpen + ПриОткрытии + + true + true + true + Vertical + true + true + true + true + true + + Объект + 1 + + DataProcessorObject.ПровестиВсеДокументы + + + true + + + true + +
true
+
+ + Провести + + <key>ru</key> + <value>Провести</value> + + 1 + + ru + Провести + + + true + + + + Провести + + + Auto + + + + + + +
diff --git a/Проект_деньги/src/DataProcessors/ПровестиВсеДокументы/Forms/Форма/Module.bsl b/Проект_деньги/src/DataProcessors/ПровестиВсеДокументы/Forms/Форма/Module.bsl new file mode 100644 index 0000000..56e95e4 --- /dev/null +++ b/Проект_деньги/src/DataProcessors/ПровестиВсеДокументы/Forms/Форма/Module.bsl @@ -0,0 +1,37 @@ + +&НаСервереБезКонтекста +Процедура ПровестиНаСервере(ДатаНачала, ДатаОкончания) + + + Для каждого ДокументМенеджер Из Документы Цикл + Выборка = ДокументМенеджер.Выбрать(НачалоДня(ДатаНачала), КонецДня(ДатаОкончания)); + Пока Выборка.Следующий() Цикл + Если Выборка.ПометкаУдаления Тогда + Продолжить; + КонецЕсли; + Попытка + ДокументОбъект = Выборка.ПолучитьОбъект(); + Если НЕ ДокументОбъект.Движения.Количество() = 0 Тогда + ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение); + КонецЕсли; + Исключение + Сообщить(ОписаниеОшибки()); + КонецПопытки; + + КонецЦикла; + КонецЦикла; + +КонецПроцедуры + +&НаКлиенте +Процедура Провести(Команда) + ПровестиНаСервере(Объект.ДатаНачала, Объект.ДатаОкончания); +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + Объект.ДатаНачала = НачалоГода(ТекущаяДата()); + Объект.ДатаОкончания = КонецГода(ТекущаяДата()); + +КонецПроцедуры diff --git a/Проект_деньги/src/DataProcessors/ПровестиВсеДокументы/ПровестиВсеДокументы.mdo b/Проект_деньги/src/DataProcessors/ПровестиВсеДокументы/ПровестиВсеДокументы.mdo new file mode 100644 index 0000000..a5e7ba7 --- /dev/null +++ b/Проект_деньги/src/DataProcessors/ПровестиВсеДокументы/ПровестиВсеДокументы.mdo @@ -0,0 +1,69 @@ + + + + + + + ПровестиВсеДокументы + + ru + Провести все документы + + true + DataProcessor.ПровестиВсеДокументы.Form.Форма + + ДатаНачала + + ru + Дата начала + + + Date + + Date + + + + ru + ДФ=dd.MM.yyyy + + + ru + ДФ=dd.MM.yyyy + + + + + + ДатаОкончания + + ru + Дата окончания + + + Date + + Date + + + + ru + ДФ=dd.MM.yyyy + + + ru + ДФ=dd.MM.yyyy + + + + + + Форма + + ru + Форма + + PersonalComputer + MobileDevice + + diff --git a/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборКонстанты/Form.form b/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборКонстанты/Form.form new file mode 100644 index 0000000..b625764 --- /dev/null +++ b/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборКонстанты/Form.form @@ -0,0 +1,740 @@ + + + + <key>ru</key> + <value>Выбор константы</value> + + + СписокКонстант + 4 + true + true + + true + + + СписокКонстант + + Add + Change + Copy + Delete + EndEdit + MoveDown + MoveUp + SortListAsc + SortListDesc + + СписокКонстантНаименование + 12 + + <key>ru</key> + <value>Константа</value> + + true + true + + true + + + СписокКонстант.Наименование + + + СписокКонстантНаименованиеExtendedTooltip + 37 + Label + true + true + + Left + + + + СписокКонстантНаименованиеКонтекстноеМеню + 13 + true + + InputField + EnterOnInput + true + Left + true + + true + true + true + true + true + true + + + + СписокКонстантИндексКартинкиАвторегистрация + 14 + + <key>ru</key> + <value>Авторегистрация</value> + + true + true + + + СписокКонстант.ИндексКартинкиАвторегистрация + + None + + СписокКонстантИндексКартинкиАвторегистрацияExtendedTooltip + 38 + Label + true + true + + Left + + + + СписокКонстантИндексКартинкиАвторегистрацияКонтекстноеМеню + 15 + true + + PictureField + EnterOnInput + true + + Left + true + + true + true + true + true + + + + 1 + + + + None + + СписокКонстантКоманднаяПанель + 6 + Left + true + + + Selection + СписокКонстантВыбор + + + СписокКонстантСтрокаПоиска + 42 + + СписокКонстантСтрокаПоискаРасширеннаяПодсказка + 44 + Label + true + true + + Left + + + + СписокКонстантСтрокаПоискаКонтекстноеМеню + 43 + true + + СписокКонстант + + true + + + + СписокКонстантСостояниеПросмотра + 45 + + СписокКонстантСостояниеПросмотраРасширеннаяПодсказка + 47 + Label + true + true + + Left + + + + СписокКонстантСостояниеПросмотраКонтекстноеМеню + 46 + true + + ViewStatusAddition + СписокКонстант + + true + + + + СписокКонстантУправлениеПоиском + 48 + + СписокКонстантУправлениеПоискомРасширеннаяПодсказка + 50 + Label + true + true + + Left + + + + СписокКонстантУправлениеПоискомКонтекстноеМеню + 49 + true + + SearchControlAddition + СписокКонстант + + true + + + + СписокКонстантExtendedTooltip + 36 + Label + true + true + + Left + + + + СписокКонстантКонтекстноеМеню + 5 + + СписокКонстантКонтекстноеМенюВыбратьКонстанту + 16 + + <key>ru</key> + <value>Выбрать</value> + + true + true + + true + + + СписокКонстантКонтекстноеМенюВыбратьКонстантуExtendedTooltip + 29 + Label + true + true + + Left + + + Form.Command.ВыбратьКонстанту + Auto + true + true + UserCmds + Auto + + + СписокКонстантКонтекстноеМенюГруппа1 + 17 + + СписокКонстантКонтекстноеМенюНайти + 18 + true + true + + true + + + СписокКонстантКонтекстноеМенюНайтиExtendedTooltip + 31 + Label + true + true + + Left + + + Form.Item.СписокКонстант.StandardCommand.Find + Auto + true + true + UserCmds + Auto + + + СписокКонстантКонтекстноеМенюВыделитьВсе + 19 + true + true + + true + + + СписокКонстантКонтекстноеМенюВыделитьВсеExtendedTooltip + 32 + Label + true + true + + Left + + + Form.Item.СписокКонстант.StandardCommand.SelectAll + Auto + true + true + UserCmds + Auto + + + СписокКонстантКонтекстноеМенюОтменитьПоиск + 20 + true + true + + true + + + СписокКонстантКонтекстноеМенюОтменитьПоискExtendedTooltip + 33 + Label + true + true + + Left + + + Form.Item.СписокКонстант.StandardCommand.CancelSearch + Auto + true + true + UserCmds + Auto + + + СписокКонстантКонтекстноеМенюВывестиСписок + 21 + true + true + + true + + + СписокКонстантКонтекстноеМенюВывестиСписокExtendedTooltip + 34 + Label + true + true + + Left + + + Form.Item.СписокКонстант.StandardCommand.OutputList + Auto + true + true + UserCmds + Auto + + + СписокКонстантКонтекстноеМенюКопироватьВБуферОбмена + 22 + true + true + + true + + + СписокКонстантКонтекстноеМенюКопироватьВБуферОбменаExtendedTooltip + 35 + Label + true + true + + Left + + + Form.Item.СписокКонстант.StandardCommand.CopyToClipboard + Auto + true + true + UserCmds + Auto + + true + true + + true + + + СписокКонстантКонтекстноеМенюГруппа1ExtendedTooltip + 30 + Label + true + true + + Left + + + + + + true + true + true + true + true + MultiRow +
true
+ 1 + 1 + AutoUse + AutoUse + true + Auto + Auto + true + true + true + true + + СписокКонстант.ИндексКартинки + + + None + None + None + +
+ + Группа1 + 23 + + Декорация1 + 24 + + <key>ru</key> + <value>Картинка авторегистрации</value> + + true + true + + true + + + Декорация1ExtendedTooltip + 40 + Label + true + true + + Left + + + + Декорация1КонтекстноеМеню + 25 + true + + 2 + true + 1 + true + false + false + + + + + + ДекорацияАвторегистрация + 26 + + <key>ru</key> + <value>Авторегистрация для узла</value> + + true + true + + true + + + ДекорацияАвторегистрацияExtendedTooltip + 41 + Label + true + true + + Left + + + + ДекорацияАвторегистрацияКонтекстноеМеню + 27 + true + + Label + true + true + true + false + + Left + Top + + + true + true + + + <key>ru</key> + <value>Легенда</value> + + true + false + + Группа1ExtendedTooltip + 39 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + ФормаКоманднаяПанель + -1 + + ФормаВыбратьКонстанту + 9 + true + true + + true + + + ФормаВыбратьКонстантуExtendedTooltip + 28 + Label + true + true + + Left + + + Form.Command.ВыбратьКонстанту + PictureAndText + true + true + true + UserCmds + Auto + + Left + true + + + OnOpen + ПриОткрытии + + + OnReopen + ПриПовторномОткрытии + + + OnCreateAtServer + ПриСозданииНаСервере + + LockOwnerWindow + true + true + Vertical + true + true + true + UseIfNecessary + true + true + + Объект + 1 + + DataProcessorObject.РегистрацияИзмененийДляОбменаДанными + + + true + + + true + +
true
+
+ + СписокКонстант + + <key>ru</key> + <value>Список констант</value> + + 2 + + ValueTable + + + true + + + true + + + СписокКонстант.Наименование + + + МетаПолноеИмя + + <key>ru</key> + <value>Мета полное имя</value> + + 1 + + String + + + + true + + + true + + + + Наименование + + <key>ru</key> + <value>Наименование</value> + + 2 + + String + + + + true + + + true + + + + ИндексКартинки + + <key>ru</key> + <value>Индекс картинки</value> + + 3 + + Number + + 10 + + + + true + + + true + + + + ИндексКартинкиАвторегистрация + + <key>ru</key> + <value>Индекс картинки авторегистрация</value> + + 4 + + Number + + 10 + + + + true + + + true + + + + + ВыбратьКонстанту + + <key>ru</key> + <value>Выбрать</value> + + 1 + + ru + Выбрать константу + + + true + + + StdPicture.ChooseValue + + + + ВыбратьКонстанту + + + DontUse + + + НачальноеЗначениеВыбора + + String + + + true + + + МассивИменМетаданных + + + + МассивПредставлений + + + + МассивАвторегистрации + + + + УзелОбмена + + ExchangePlanRef + + true + + + + + + +
diff --git a/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборКонстанты/Items/Декорация1/Picture.png b/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборКонстанты/Items/Декорация1/Picture.png new file mode 100644 index 0000000..91d113a Binary files /dev/null and b/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборКонстанты/Items/Декорация1/Picture.png differ diff --git a/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборКонстанты/Items/СписокКонстант/RowsPicture.png b/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборКонстанты/Items/СписокКонстант/RowsPicture.png new file mode 100644 index 0000000..d36e47e Binary files /dev/null and b/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборКонстанты/Items/СписокКонстант/RowsPicture.png differ diff --git a/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборКонстанты/Items/СписокКонстантИндексКартинкиАвторегистрация/HeaderPicture.png b/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборКонстанты/Items/СписокКонстантИндексКартинкиАвторегистрация/HeaderPicture.png new file mode 100644 index 0000000..91d113a Binary files /dev/null and b/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборКонстанты/Items/СписокКонстантИндексКартинкиАвторегистрация/HeaderPicture.png differ diff --git a/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборКонстанты/Items/СписокКонстантИндексКартинкиАвторегистрация/ValuesPicture.png b/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборКонстанты/Items/СписокКонстантИндексКартинкиАвторегистрация/ValuesPicture.png new file mode 100644 index 0000000..d7cc10f Binary files /dev/null and b/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборКонстанты/Items/СписокКонстантИндексКартинкиАвторегистрация/ValuesPicture.png differ diff --git a/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборКонстанты/Module.bsl b/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборКонстанты/Module.bsl new file mode 100644 index 0000000..17d2bd5 --- /dev/null +++ b/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборКонстанты/Module.bsl @@ -0,0 +1,102 @@ + +#Область ОбработчикиСобытийФормы +// + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + //ВыполнитьПроверкуПравДоступа("Администрирование", Метаданные); + + Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. + Возврат; + КонецЕсли; + + СписокКонстант.Очистить(); + Для ТекИнд = 0 По Параметры.МассивИменМетаданных.ВГраница() Цикл + Строка = СписокКонстант.Добавить(); + Строка.ИндексКартинкиАвторегистрация = Параметры.МассивАвторегистрации[ТекИнд]; + Строка.ИндексКартинки = 2; + Строка.МетаПолноеИмя = Параметры.МассивИменМетаданных[ТекИнд]; + Строка.Наименование = Параметры.МассивПредставлений[ТекИнд]; + КонецЦикла; + + ЗаголовокАвторегистрации = НСтр("ru = 'Авторегистрация для узла ""%1""'"); + + Элементы.ДекорацияАвторегистрация.Заголовок = СтрЗаменить(ЗаголовокАвторегистрации, "%1", Параметры.УзелОбмена); +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + ТекПараметры = УстановитьПараметрыФормы(); + Элементы.СписокКонстант.ТекущаяСтрока = ТекПараметры.ТекущаяСтрока; +КонецПроцедуры + +&НаКлиенте +Процедура ПриПовторномОткрытии() + ТекПараметры = УстановитьПараметрыФормы(); + Элементы.СписокКонстант.ТекущаяСтрока = ТекПараметры.ТекущаяСтрока; +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыСписокКонстант +// + +&НаКлиенте +Процедура СписокКонстантВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) + + ПроизвестиВыборКонстанты(); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы +// + +// Производит выбор константы +// +&НаКлиенте +Процедура ВыбратьКонстанту(Команда) + + ПроизвестиВыборКонстанты(); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции +// + +// Производит выбор и оповещает о нем +// +&НаКлиенте +Процедура ПроизвестиВыборКонстанты() + Данные = Новый Массив; + Для Каждого ТекЭл Из Элементы.СписокКонстант.ВыделенныеСтроки Цикл + ТекСтрока = СписокКонстант.НайтиПоИдентификатору(ТекЭл); + Данные.Добавить(ТекСтрока.МетаПолноеИмя); + КонецЦикла; + ОповеститьОВыборе(Данные); +КонецПроцедуры + +&НаСервере +Функция УстановитьПараметрыФормы() + Результат = Новый Структура("ТекущаяСтрока"); + Если Параметры.НачальноеЗначениеВыбора <> Неопределено Тогда + Результат.ТекущаяСтрока = ИдентификаторСтрокиПоМетаИмени(Параметры.НачальноеЗначениеВыбора); + КонецЕсли; + Возврат Результат; +КонецФункции + +&НаСервере +Функция ИдентификаторСтрокиПоМетаИмени(ПолноеИмяМетаданных) + Данные = РеквизитФормыВЗначение("СписокКонстант"); + ТекСтрока = Данные.Найти(ПолноеИмяМетаданных, "МетаПолноеИмя"); + Если ТекСтрока <> Неопределено Тогда + Возврат ТекСтрока.ПолучитьИдентификатор(); + КонецЕсли; + Возврат Неопределено; +КонецФункции + +#КонецОбласти diff --git a/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборОбъектовОтбором/Attributes/СписокДанных/ExtInfo/ListSettings.dcss b/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборОбъектовОтбором/Attributes/СписокДанных/ExtInfo/ListSettings.dcss new file mode 100644 index 0000000..9b5b065 --- /dev/null +++ b/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборОбъектовОтбором/Attributes/СписокДанных/ExtInfo/ListSettings.dcss @@ -0,0 +1,17 @@ + + + + Normal + dfcece9d-5077-440b-b6b3-45a5cb4538eb + + + Normal + 88619765-ccb3-46c6-ac52-38e9c992ebd4 + + + Normal + b75fecce-942b-4aed-abc9-e6a02e460fb3 + + Normal + 911b6018-f537-43e8-a417-da56b22f9aec + diff --git a/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборОбъектовОтбором/Form.form b/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборОбъектовОтбором/Form.form new file mode 100644 index 0000000..504385e --- /dev/null +++ b/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборОбъектовОтбором/Form.form @@ -0,0 +1,1052 @@ + + + + <key>ru</key> + <value>Выбор объектов отбором</value> + + + Группа1 + 18 + + Отбор + 15 + true + true + + true + + + СписокДанных.SettingsComposer.Settings.Filter + + None + HierarchicalList + List + Tree + + ОтборКоманднаяПанель + 17 + + ОтборДобавитьЭлементОтбора + 33 + true + true + + true + + + ОтборДобавитьЭлементОтбораExtendedTooltip + 41 + Label + true + true + + Left + + + Form.Item.Отбор.StandardCommand.AddFilterItem + Auto + true + true + UserCmds + Auto + + + ОтборСгруппироватьЭлементыОтбора + 34 + true + true + + true + + + ОтборСгруппироватьЭлементыОтбораExtendedTooltip + 42 + Label + true + true + + Left + + + Form.Item.Отбор.StandardCommand.GroupFilterItems + Auto + true + true + UserCmds + Auto + + + ОтборУдалить + 35 + true + true + + true + + + ОтборУдалитьExtendedTooltip + 43 + Label + true + true + + Left + + + Form.Item.Отбор.StandardCommand.Delete + Auto + true + true + UserCmds + Auto + + + ОтборПереместитьВниз + 36 + true + true + + true + + + ОтборПереместитьВнизExtendedTooltip + 44 + Label + true + true + + Left + + + Form.Item.Отбор.StandardCommand.MoveDown + Auto + true + true + UserCmds + Auto + + + ОтборПереместитьВверх + 37 + true + true + + true + + + ОтборПереместитьВверхExtendedTooltip + 45 + Label + true + true + + Left + + + Form.Item.Отбор.StandardCommand.MoveUp + Auto + true + true + UserCmds + Auto + + + ОтборГруппа1 + 38 + true + true + + true + + + <key>ru</key> + <value>Действия отбора</value> + + + ОтборГруппа1ExtendedTooltip + 46 + Label + true + true + + Left + + + + Item.Отбор + + + + ОтборГруппа2 + 39 + true + true + + true + + + <key>ru</key> + <value>Действия формы</value> + + + ОтборГруппа2ExtendedTooltip + 47 + Label + true + true + + Left + + + + Form + + + Left + + + OnChange + ОтборПриИзменении + + + ОтборСтрокаПоиска + 65 + + ОтборСтрокаПоискаРасширеннаяПодсказка + 67 + Label + true + true + + Left + + + + ОтборСтрокаПоискаКонтекстноеМеню + 66 + true + + Отбор + + true + + + + ОтборСостояниеПросмотра + 68 + + ОтборСостояниеПросмотраРасширеннаяПодсказка + 70 + Label + true + true + + Left + + + + ОтборСостояниеПросмотраКонтекстноеМеню + 69 + true + + ViewStatusAddition + Отбор + + true + + + + ОтборУправлениеПоиском + 71 + + ОтборУправлениеПоискомРасширеннаяПодсказка + 73 + Label + true + true + + Left + + + + ОтборУправлениеПоискомКонтекстноеМеню + 72 + true + + SearchControlAddition + Отбор + + true + + + + ОтборExtendedTooltip + 48 + Label + true + true + + Left + + + + ОтборКонтекстноеМеню + 16 + true + + Tree + true + true + true + true + 6 + true + true + MultiRow +
true
+ 1 + 1 + AutoUse + AutoUse + true + true + Auto + Auto + ExpandAllLevels + true + true + true + true + None + None + None + All + false +
+ true + true + + true + + + <key>ru</key> + <value>Элементы отбора</value> + + + Группа1ExtendedTooltip + 40 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + NormalSeparation + true + true + true + Auto + Auto + +
+ + ГруппаПользовательскихНастроек + 63 + true + true + + true + + + <key>ru</key> + <value>Группа пользовательских настроек</value> + + + ru + Группа пользовательских настроек + + + ГруппаПользовательскихНастроекРасширеннаяПодсказка + 64 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + СписокДанных + 10 + true + true + + true + + + СписокДанных + + Bottom + + СписокДанныхКоманднаяПанель + 12 + + СписокДанныхВыбратьОтобранныеЗначения + 22 + + <key>ru</key> + <value>Выбрать все</value> + + true + true + + true + + + СписокДанныхВыбратьОтобранныеЗначенияExtendedTooltip + 59 + Label + true + true + + Left + + + Form.Command.ВыбратьОтобранныеЗначения + PictureAndText + true + true + true + UserCmds + + StdPicture.ChooseValue + + Auto + + + СписокДанныхВыбратьТекущуюСтроку + 21 + + <key>ru</key> + <value>Выбрать</value> + + true + true + + true + + + СписокДанныхВыбратьТекущуюСтрокуExtendedTooltip + 60 + Label + true + true + + Left + + + Form.Command.ВыбратьТекущуюСтроку + true + true + UserCmds + + StdPicture.ChooseValue + + Auto + + + СписокДанныхЗакрыть + 20 + + <key>ru</key> + <value>Закрыть</value> + + true + true + + true + + + СписокДанныхЗакрытьExtendedTooltip + 61 + Label + true + true + + Left + + + Form.StandardCommand.Close + true + true + UserCmds + Auto + + Right + + + Selection + СписокДанныхВыбор + + + СписокДанныхСтрокаПоиска + 74 + + СписокДанныхСтрокаПоискаРасширеннаяПодсказка + 76 + Label + true + true + + Left + + + + СписокДанныхСтрокаПоискаКонтекстноеМеню + 75 + true + + СписокДанных + + true + + + + СписокДанныхСостояниеПросмотра + 77 + + СписокДанныхСостояниеПросмотраРасширеннаяПодсказка + 79 + Label + true + true + + Left + + + + СписокДанныхСостояниеПросмотраКонтекстноеМеню + 78 + true + + ViewStatusAddition + СписокДанных + + true + + + + СписокДанныхУправлениеПоиском + 80 + + СписокДанныхУправлениеПоискомРасширеннаяПодсказка + 82 + Label + true + true + + Left + + + + СписокДанныхУправлениеПоискомКонтекстноеМеню + 81 + true + + SearchControlAddition + СписокДанных + + true + + + + СписокДанныхExtendedTooltip + 62 + Label + true + true + + Left + + + + СписокДанныхКонтекстноеМеню + 11 + + СписокДанныхКонтекстноеМенюВыбратьОтобранныеЗначения + 23 + + <key>ru</key> + <value>Выбрать все отобранные</value> + + true + true + + true + + + СписокДанныхКонтекстноеМенюВыбратьОтобранныеЗначенияExtendedTooltip + 49 + Label + true + true + + Left + + + Form.Command.ВыбратьОтобранныеЗначения + Auto + true + true + UserCmds + + StdPicture.ChooseValue + + Auto + + + СписокДанныхКонтекстноеМенюВыбратьТекущуюСтроку + 24 + + <key>ru</key> + <value>Выбрать текущие данные</value> + + true + true + + true + + + СписокДанныхКонтекстноеМенюВыбратьТекущуюСтрокуExtendedTooltip + 50 + Label + true + true + + Left + + + Form.Command.ВыбратьТекущуюСтроку + true + true + UserCmds + Auto + + + СписокДанныхКонтекстноеМенюГруппа2 + 31 + + СписокДанныхКонтекстноеМенюОткрытьТекущийОбъект + 32 + + <key>ru</key> + <value>Открыть форму текущего объекта</value> + + true + true + + true + + + СписокДанныхКонтекстноеМенюОткрытьТекущийОбъектExtendedTooltip + 52 + Label + true + true + + Left + + + Form.Command.ОткрытьТекущийОбъект + Auto + true + true + UserCmds + + StdPicture.Form + + Auto + + true + true + + true + + + СписокДанныхКонтекстноеМенюГруппа2ExtendedTooltip + 51 + Label + true + true + + Left + + + + + + СписокДанныхКонтекстноеМенюГруппа1 + 25 + + СписокДанныхКонтекстноеМенюНайти + 26 + true + true + + true + + + СписокДанныхКонтекстноеМенюНайтиExtendedTooltip + 54 + Label + true + true + + Left + + + Form.Item.СписокДанных.StandardCommand.Find + Auto + true + true + UserCmds + Auto + + + СписокДанныхКонтекстноеМенюОбновить + 27 + true + true + + true + + + СписокДанныхКонтекстноеМенюОбновитьExtendedTooltip + 55 + Label + true + true + + Left + + + Form.Item.СписокДанных.StandardCommand.Refresh + Auto + true + true + UserCmds + Auto + + + СписокДанныхКонтекстноеМенюОтменитьПоиск + 28 + true + true + + true + + + СписокДанныхКонтекстноеМенюОтменитьПоискExtendedTooltip + 56 + Label + true + true + + Left + + + Form.Item.СписокДанных.StandardCommand.CancelSearch + Auto + true + true + UserCmds + Auto + + + СписокДанныхКонтекстноеМенюНастройкаСписка + 29 + true + true + + true + + + СписокДанныхКонтекстноеМенюНастройкаСпискаExtendedTooltip + 57 + Label + true + true + + Left + + + Form.Item.СписокДанных.StandardCommand.ListSettings + Auto + true + true + UserCmds + Auto + + + СписокДанныхКонтекстноеМенюВывестиСписок + 30 + true + true + + true + + + СписокДанныхКонтекстноеМенюВывестиСписокExtendedTooltip + 58 + Label + true + true + + Left + + + Form.Item.СписокДанных.StandardCommand.OutputList + Auto + true + true + UserCmds + Auto + + true + true + + true + + + СписокДанныхКонтекстноеМенюГруппа1ExtendedTooltip + 53 + Label + true + true + + Left + + + + + + true + 5 + true + true + MultiRow +
true
+ 1 + 1 + AutoUse + AutoUse + true + true + true + Auto + Auto + true + true + true + + СписокДанных.DefaultPicture + + None + None + None + + 60 + + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + true + true + ГруппаПользовательскихНастроек + +
+ None + + ФормаКоманднаяПанель + -1 + Left + true + + + OnCreateAtServer + ПриСозданииНаСервере + + LockOwnerWindow + true + true + Vertical + true + true + true + UseIfNecessary + true + true + + Объект + 1 + + DataProcessorObject.РегистрацияИзмененийДляОбменаДанными + + + true + + + true + +
true
+
+ + СписокДанных + + <key>ru</key> + <value>Список данных</value> + + 2 + + DynamicList + + + true + + + true + + + ВЫБРАТЬ + NULL КАК Ссылка + true + true + true + true + + + + СтруктураДанных + + <key>ru</key> + <value>Структура данных</value> + + 3 + + + true + + + true + + + + КлючФормыДанных + + <key>ru</key> + <value>Ключ формы данных</value> + + 5 + + + true + + + true + + + + ВыбратьОтобранныеЗначения + + <key>ru</key> + <value>Выбрать</value> + + 1 + + ru + Выбрать отобранные значения + + + true + + + + ВыбратьОтобранныеЗначения + + + DontUse + + + ВыбратьТекущуюСтроку + + <key>ru</key> + <value>Выбрать</value> + + 2 + + ru + Выбрать текущую строку + + + true + + + + ВыбратьТекущуюСтроку + + + DontUse + + + ОткрытьТекущийОбъект + + <key>ru</key> + <value>Открыть</value> + + 3 + + ru + Открыть текущий объект + + + true + + + + ОткрытьТекущийОбъект + + + DontUse + + + ИмяТаблицы + + true + + + ДействиеВыбора + + true + + + + + + +
diff --git a/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборОбъектовОтбором/Module.bsl b/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборОбъектовОтбором/Module.bsl new file mode 100644 index 0000000..1957917 --- /dev/null +++ b/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборОбъектовОтбором/Module.bsl @@ -0,0 +1,213 @@ + +#Область ОбработчикиСобытийФормы +// + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + //ВыполнитьПроверкуПравДоступа("Администрирование", Метаданные); + + Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. + Возврат; + КонецЕсли; + + ИмяТаблицыДанных = Параметры.ИмяТаблицы; + ТекущийОбъект = ЭтотОбъект(); + ЗаголовокТаблицы = ""; + + // Определяемся, что за таблица к нам пришла + Описание = ТекущийОбъект.ХарактеристикиПоМетаданным(ИмяТаблицыДанных); + МетаИнфо = Описание.Метаданные; + Заголовок = МетаИнфо.Представление(); + + // Список и колонки + СтруктураДанных = ""; + Если Описание.ЭтоСсылка Тогда + ЗаголовокТаблицы = МетаИнфо.ПредставлениеОбъекта; + Если ПустаяСтрока(ЗаголовокТаблицы) Тогда + ЗаголовокТаблицы = Заголовок; + КонецЕсли; + + СписокДанных.ПроизвольныйЗапрос = Ложь; + СписокДанных.ОсновнаяТаблица = ИмяТаблицыДанных; + + Поле = СписокДанных.Отбор.ДоступныеПоляОтбора.Элементы.Найти(Новый ПолеКомпоновкиДанных("Ссылка")); + ТаблицаКолонок = Новый ТаблицаЗначений; + Колонки = ТаблицаКолонок.Колонки; + Колонки.Добавить("Ссылка", Поле.ТипЗначения, ЗаголовокТаблицы); + СтруктураДанных = "Ссылка"; + + КлючФормыДанных = "Ссылка"; + + ИначеЕсли Описание.ЭтоНабор Тогда + Колонки = ТекущийОбъект.ИзмеренияНабораЗаписей(МетаИнфо); + Для Каждого ТекЭл Из Колонки Цикл + СтруктураДанных = СтруктураДанных + "," + ТекЭл.Имя; + КонецЦикла; + СтруктураДанных = Сред(СтруктураДанных, 2); + + СписокДанных.ПроизвольныйЗапрос = Истина; + СписокДанных.ТекстЗапроса = "ВЫБРАТЬ РАЗЛИЧНЫЕ " + СтруктураДанных + " ИЗ " + ИмяТаблицыДанных; + + Если Описание.ЭтоПоследовательность Тогда + КлючФормыДанных = "Регистратор"; + Иначе + КлючФормыДанных = Новый Структура(СтруктураДанных); + КонецЕсли; + + Иначе + // Без колонок??? + Возврат; + КонецЕсли; + СписокДанных.ДинамическоеСчитываниеДанных = Истина; + + ТекущийОбъект.ДобавитьКолонкиВТаблицуФормы( + Элементы.СписокДанных, + "Порядок, Отбор, Группировка, СтандартнаяКартинка, Параметры, УсловноеОформление", + Колонки); +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы +// + +&НаКлиенте +Процедура ОтборПриИзменении(Элемент) + + Элементы.СписокДанных.Обновить(); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыСписокДанных +// + +&НаКлиенте +Процедура СписокДанныхВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) + СтандартнаяОбработка = Ложь; + ОткрытьФормуТекущегоОбъекта(); +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы +// + +&НаКлиенте +Процедура ОткрытьТекущийОбъект(Команда) + ОткрытьФормуТекущегоОбъекта(); +КонецПроцедуры + +&НаКлиенте +Процедура ВыбратьОтобранныеЗначения(Команда) + ПроизвестиВыбор(Истина); +КонецПроцедуры + +&НаКлиенте +Процедура ВыбратьТекущуюСтроку(Команда) + ПроизвестиВыбор(Ложь); +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаКлиенте +Процедура ОткрытьФормуТекущегоОбъекта() + ТекПараметры = ПараметрыФормыТекущегоОбъекта(Элементы.СписокДанных.ТекущиеДанные); + Если ТекПараметры <> Неопределено Тогда + ОткрытьФорму(ТекПараметры.ИмяФормы, ТекПараметры.Ключ); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ПроизвестиВыбор(ВесьРезультатОтбора = Истина) + + Если ВесьРезультатОтбора Тогда + Данные = ВсеВыбранныеЭлементы(); + Иначе + Данные = Новый Массив; + Для Каждого ТекСтрока Из Элементы.СписокДанных.ВыделенныеСтроки Цикл + Элемент = Новый Структура(СтруктураДанных); + ЗаполнитьЗначенияСвойств(Элемент, Элементы.СписокДанных.ДанныеСтроки(ТекСтрока)); + Данные.Добавить(Элемент); + КонецЦикла; + КонецЕсли; + + ОповеститьОВыборе(Новый Структура("ИмяТаблицы, ДанныеВыбора, ДействиеВыбора, СтруктураПолей", + Параметры.ИмяТаблицы, + Данные, + Параметры.ДействиеВыбора, + СтруктураДанных)); +КонецПроцедуры + +&НаСервере +Функция ЭтотОбъект(ТекущийОбъект = Неопределено) + Если ТекущийОбъект = Неопределено Тогда + Возврат РеквизитФормыВЗначение("Объект"); + КонецЕсли; + ЗначениеВРеквизитФормы(ТекущийОбъект, "Объект"); + Возврат Неопределено; +КонецФункции + +&НаСервере +Функция ПараметрыФормыТекущегоОбъекта(Знач Данные) + + Если Данные = Неопределено Тогда + Возврат Неопределено; + КонецЕсли; + + Если ТипЗнч(КлючФормыДанных) = Тип("Строка") Тогда + Значение = Данные[КлючФормыДанных]; + ТекИмяФормы = ЭтотОбъект().ПолучитьИмяФормы(Значение) + ".ФормаОбъекта"; + Иначе + // Там структура с именами измерений + ТекИмяФормы = ""; + ЗаполнитьЗначенияСвойств(КлючФормыДанных, Данные); + ТекПараметры = Новый Массив; + ТекПараметры.Добавить(КлючФормыДанных); + Попытка + Значение = Новый(СтрЗаменить(Параметры.ИмяТаблицы, ".", "КлючЗаписи."), ТекПараметры); + ТекИмяФормы = Параметры.ИмяТаблицы + ".ФормаЗаписи"; + Исключение + // Обработка не требуется + ; + КонецПопытки; + + Если ПустаяСтрока(ТекИмяФормы) Тогда + // Набор без ключей записи, типа оборотного регистра + Если Данные.Свойство("Регистратор") Тогда + Значение = Данные.Регистратор; + Иначе + Для Каждого КлючЗначение Из КлючФормыДанных Цикл + Значение = Данные[КлючЗначение.Ключ]; + Прервать; + КонецЦикла; + КонецЕсли; + ТекИмяФормы = ЭтотОбъект().ПолучитьИмяФормы(Значение) + ".ФормаОбъекта"; + КонецЕсли; + КонецЕсли; + + Возврат Новый Структура("ИмяФормы, Ключ", + ТекИмяФормы, + Новый Структура("Ключ", Значение)); +КонецФункции + +&НаСервере +Функция ВсеВыбранныеЭлементы() + + Данные = ЭтотОбъект().ТекущиеДанныеДинамическогоСписка(СписокДанных); + + Результат = Новый Массив(); + Для Каждого ТекСтрока Из Данные Цикл + Элемент = Новый Структура(СтруктураДанных); + ЗаполнитьЗначенияСвойств(Элемент, ТекСтрока); + Результат.Добавить(Элемент); + КонецЦикла; + + Возврат Результат; +КонецФункции + +#КонецОбласти diff --git a/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборУзлаПланаОбмена/Form.form b/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборУзлаПланаОбмена/Form.form new file mode 100644 index 0000000..1ce4a26 --- /dev/null +++ b/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборУзлаПланаОбмена/Form.form @@ -0,0 +1,729 @@ + + + + <key>ru</key> + <value>Выбор узла плана обмена</value> + + + ДеревоУзловОбмена + 1 + + <key>ru</key> + <value>Узлы обмена</value> + + true + true + + true + + + ДеревоУзловОбмена + + true + None + Add + Change + Copy + Delete + EndEdit + HierarchicalList + List + MoveDown + MoveUp + SortListAsc + SortListDesc + Tree + + ДеревоУзловОбменаПометкаНаименование + 14 + + ДеревоУзловОбменаПометка + 12 + true + true + + true + + + ДеревоУзловОбмена.Пометка + + None + + OnChange + ДеревоУзловОбменаПометкаПриИзменении + + + ДеревоУзловОбменаПометкаExtendedTooltip + 45 + Label + true + true + + Left + + + + ДеревоУзловОбменаПометкаКонтекстноеМеню + 13 + true + + CheckBoxField + EnterOnInput + true + Left + true + + true + + + + ДеревоУзловОбменаНаименование + 4 + + <key>ru</key> + <value>Узел</value> + + true + true + + true + + + ДеревоУзловОбмена.Наименование + + + ДеревоУзловОбменаНаименованиеExtendedTooltip + 46 + Label + true + true + + Left + + + + ДеревоУзловОбменаНаименованиеКонтекстноеМеню + 5 + true + + LabelField + true + EnterOnInput + true + Left + true + + true + true + + + true + true + + true + + + <key>ru</key> + <value>Описание узла</value> + + + ru + Описание узла + + + ДеревоУзловОбменаПометкаНаименованиеExtendedTooltip + 44 + Label + true + true + + Left + + + ColumnGroup + + InCell + true + + + + ДеревоУзловОбменаКод + 31 + + <key>ru</key> + <value>Код</value> + + true + true + + true + + + ДеревоУзловОбмена.Код + + + ДеревоУзловОбменаКодExtendedTooltip + 47 + Label + true + true + + Left + + + + ДеревоУзловОбменаКодКонтекстноеМеню + 32 + true + + LabelField + EnterOnInput + true + Left + true + + true + true + + + None + + ДеревоУзловОбменаКоманднаяПанель + 3 + Left + + + Selection + ДеревоУзловОбменаВыбор + + + ДеревоУзловОбменаСтрокаПоиска + 48 + + ДеревоУзловОбменаСтрокаПоискаРасширеннаяПодсказка + 50 + Label + true + true + + Left + + + + ДеревоУзловОбменаСтрокаПоискаКонтекстноеМеню + 49 + true + + ДеревоУзловОбмена + + true + + + + ДеревоУзловОбменаСостояниеПросмотра + 51 + + ДеревоУзловОбменаСостояниеПросмотраРасширеннаяПодсказка + 53 + Label + true + true + + Left + + + + ДеревоУзловОбменаСостояниеПросмотраКонтекстноеМеню + 52 + true + + ViewStatusAddition + ДеревоУзловОбмена + + true + + + + ДеревоУзловОбменаУправлениеПоиском + 54 + + ДеревоУзловОбменаУправлениеПоискомРасширеннаяПодсказка + 56 + Label + true + true + + Left + + + + ДеревоУзловОбменаУправлениеПоискомКонтекстноеМеню + 55 + true + + SearchControlAddition + ДеревоУзловОбмена + + true + + + + ДеревоУзловОбменаExtendedTooltip + 43 + Label + true + true + + Left + + + + ДеревоУзловОбменаКонтекстноеМеню + 2 + + ДеревоУзловОбменаКонтекстноеМенюВыбратьУзел + 27 + + <key>ru</key> + <value>Выбрать узел</value> + + true + true + + true + + + ДеревоУзловОбменаКонтекстноеМенюВыбратьУзелExtendedTooltip + 38 + Label + true + true + + Left + + + Form.Command.ВыбратьУзел + Auto + true + true + UserCmds + + StdPicture.ChooseValue + + Auto + + + ДеревоУзловОбменаКонтекстноеМенюИзменитьУзел + 28 + + <key>ru</key> + <value>Изменить узел</value> + + true + true + + true + + + ДеревоУзловОбменаКонтекстноеМенюИзменитьУзелExtendedTooltip + 39 + Label + true + true + + Left + + + Form.Command.ИзменитьУзел + Auto + true + true + UserCmds + + StdPicture.Change + + Auto + + + ДеревоУзловОбменаКонтекстноеМенюГруппа1 + 33 + + ДеревоУзловОбменаКонтекстноеМенюВывестиСписок + 34 + true + true + + true + + + ДеревоУзловОбменаКонтекстноеМенюВывестиСписокExtendedTooltip + 41 + Label + true + true + + Left + + + Form.Item.ДеревоУзловОбмена.StandardCommand.OutputList + Auto + true + true + UserCmds + Auto + + + ДеревоУзловОбменаКонтекстноеМенюКопироватьВБуферОбмена + 35 + true + true + + true + + + ДеревоУзловОбменаКонтекстноеМенюКопироватьВБуферОбменаExtendedTooltip + 42 + Label + true + true + + Left + + + Form.Item.ДеревоУзловОбмена.StandardCommand.CopyToClipboard + Auto + true + true + UserCmds + Auto + + true + true + + true + + + ДеревоУзловОбменаКонтекстноеМенюГруппа1ExtendedTooltip + 40 + Label + true + true + + Left + + + + + + Tree + true + true + true +
true
+ 1 + 1 + AutoUse + AutoUse + true + Auto + Auto + ExpandAllLevels + true + true + + ДеревоУзловОбмена.ИндексКартинки + + + None + None + None +
+ + ФормаКоманднаяПанель + -1 + + ФормаВыбратьУзел + 29 + + <key>ru</key> + <value>Выбрать</value> + + true + true + + true + + + ФормаВыбратьУзелExtendedTooltip + 36 + Label + true + true + + Left + + + Form.Command.ВыбратьУзел + PictureAndText + true + true + true + UserCmds + Auto + + + ФормаИзменитьУзел + 30 + + <key>ru</key> + <value>Изменить</value> + + true + true + + true + + + ФормаИзменитьУзелExtendedTooltip + 37 + Label + true + true + + Left + + + Form.Command.ИзменитьУзел + Auto + true + true + UserCmds + Auto + + Left + true + + + OnOpen + ПриОткрытии + + + OnReopen + ПриПовторномОткрытии + + + OnCreateAtServer + ПриСозданииНаСервере + + LockOwnerWindow + true + true + Vertical + true + true + true + UseIfNecessary + true + true + + Объект + 1 + + DataProcessorObject.РегистрацияИзмененийДляОбменаДанными + + + true + + + true + +
true
+
+ + ДеревоУзловОбмена + + <key>ru</key> + <value>Дерево узлов обмена</value> + + 2 + + ValueTree + + + true + + + true + + + Наименование + + <key>ru</key> + <value>Узел обмена</value> + + 1 + + String + + + + true + + + true + + + + ИндексКартинки + + <key>ru</key> + <value>Индекс картинки</value> + + 8 + + Number + + + + true + + + true + + + + Пометка + 3 + + Number + + 10 + + + + true + + + true + + + + Ссылка + + <key>ru</key> + <value>Ссылка</value> + + 4 + + ExchangePlanRef + + + true + + + true + + + + Код + + <key>ru</key> + <value>Код</value> + + 2 + + String + + + + true + + + true + + + + + МножественныйВыбор + + <key>ru</key> + <value>Множественный выбор</value> + + 3 + + Boolean + + + true + + + true + + + + ВыбратьУзел + + <key>ru</key> + <value>Выбрать</value> + + 1 + + ru + Выбрать узел + + + true + + + StdPicture.ChooseValue + + + + ВыбратьУзел + + + DontUse + + + ИзменитьУзел + + <key>ru</key> + <value>Изменить</value> + + 2 + + ru + Изменить узел + + + true + + F2 + + StdPicture.Change + + + + ИзменитьУзел + + + DontUse + + + МножественныйВыбор + + Boolean + + true + + + НачальноеЗначениеВыбора + + true + + + + + + +
diff --git a/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборУзлаПланаОбмена/Items/ДеревоУзловОбмена/RowsPicture.png b/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборУзлаПланаОбмена/Items/ДеревоУзловОбмена/RowsPicture.png new file mode 100644 index 0000000..3285ca4 Binary files /dev/null and b/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборУзлаПланаОбмена/Items/ДеревоУзловОбмена/RowsPicture.png differ diff --git a/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборУзлаПланаОбмена/Module.bsl b/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборУзлаПланаОбмена/Module.bsl new file mode 100644 index 0000000..ea6b9ba --- /dev/null +++ b/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборУзлаПланаОбмена/Module.bsl @@ -0,0 +1,234 @@ + +#Область ОбработчикиСобытийФормы +// + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + УстановитьУсловноеОформление(); + + //ВыполнитьПроверкуПравДоступа("Администрирование", Метаданные); + + Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. + Возврат; + КонецЕсли; + + МножественныйВыбор = Ложь; + ПрочитатьДеревоУзловОбмена(); + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + ТекПараметры = УстановитьПараметрыФормы(); + РазвернутьУзлы(ТекПараметры.Отмеченные); + Элементы.ДеревоУзловОбмена.ТекущаяСтрока = ТекПараметры.ТекущаяСтрока; +КонецПроцедуры + +&НаКлиенте +Процедура ПриПовторномОткрытии() + ТекПараметры = УстановитьПараметрыФормы(); + РазвернутьУзлы(ТекПараметры.Отмеченные); + Элементы.ДеревоУзловОбмена.ТекущаяСтрока = ТекПараметры.ТекущаяСтрока; +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыДеревоУзлов +// + +&НаКлиенте +Процедура ДеревоУзловОбменаВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) + ПроизвестиВыборУзлов(Ложь); +КонецПроцедуры + +&НаКлиенте +Процедура ДеревоУзловОбменаПометкаПриИзменении(Элемент) + ИзменениеПометки(Элементы.ДеревоУзловОбмена.ТекущаяСтрока); +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы +// + +// Выбирает узел и передает выбранные значения в вызывающую форму. +&НаКлиенте +Процедура ВыбратьУзел(Команда) + ПроизвестиВыборУзлов(МножественныйВыбор); +КонецПроцедуры + +// Открывает форму узла, заданную в конфигурации. +&НаКлиенте +Процедура ИзменитьУзел(Команда) + КлючСсылка = Элементы.ДеревоУзловОбмена.ТекущиеДанные.Ссылка; + Если КлючСсылка <> Неопределено Тогда + ОткрытьФорму(ПолучитьИмяФормы(КлючСсылка) + "ФормаОбъекта", Новый Структура("Ключ", КлючСсылка)); + КонецЕсли; +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервере +Процедура УстановитьУсловноеОформление() + + УсловноеОформление.Элементы.Очистить(); + + // + + Элемент = УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ДеревоУзловОбменаКод.Имя); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ДеревоУзловОбмена.Ссылка"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено; + Элемент.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь); + Элемент.Оформление.УстановитьЗначениеПараметра("Отображать", Ложь); + +КонецПроцедуры +// + +&НаКлиенте +Процедура РазвернутьУзлы(Отмеченные) + Если Отмеченные <> Неопределено Тогда + Для Каждого ТекИд Из Отмеченные Цикл + ТекСтрока = ДеревоУзловОбмена.НайтиПоИдентификатору(ТекИд); + ТекРодитель = ТекСтрока.ПолучитьРодителя(); + Если ТекРодитель <> Неопределено Тогда + Элементы.ДеревоУзловОбмена.Развернуть(ТекРодитель.ПолучитьИдентификатор()); + КонецЕсли; + КонецЦикла; + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ПроизвестиВыборУзлов(ЭтоМножественныйВыбор) + + Если ЭтоМножественныйВыбор Тогда + Данные = ВыбранныеУзлы(); + Если Данные.Количество() > 0 Тогда + ОповеститьОВыборе(Данные); + КонецЕсли; + Возврат; + КонецЕсли; + + Данные = Элементы.ДеревоУзловОбмена.ТекущиеДанные; + Если Данные <> Неопределено И Данные.Ссылка <> Неопределено Тогда + ОповеститьОВыборе(Данные.Ссылка); + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Функция ВыбранныеУзлы(НовыеДанные = Неопределено) + + Если НовыеДанные <> Неопределено Тогда + // Установка + Отмеченные = Новый Массив; + ВнутрУстановитьВыбранныеУзлы(ЭтотОбъект(), ДеревоУзловОбмена, НовыеДанные, Отмеченные); + Возврат Отмеченные; + КонецЕсли; + + // Получение + Результат = Новый Массив; + Для Каждого ТекПлан Из ДеревоУзловОбмена.ПолучитьЭлементы() Цикл + Для Каждого ТекСтрока Из ТекПлан.ПолучитьЭлементы() Цикл + Если ТекСтрока.Пометка И ТекСтрока.Ссылка <> Неопределено Тогда + Результат.Добавить(ТекСтрока.Ссылка); + КонецЕсли; + КонецЦикла; + КонецЦикла; + + Возврат Результат; +КонецФункции + +&НаСервере +Процедура ВнутрУстановитьВыбранныеУзлы(ТекущийОбъект, Данные, НовыеДанные, Отмеченные) + Для Каждого ТекСтрока Из Данные.ПолучитьЭлементы() Цикл + Если НовыеДанные.Найти(ТекСтрока.Ссылка) <> Неопределено Тогда + ТекСтрока.Пометка = Истина; + ТекущийОбъект.ПроставитьПометкиВверх(ТекСтрока); + Отмеченные.Добавить(ТекСтрока.ПолучитьИдентификатор()); + КонецЕсли; + ВнутрУстановитьВыбранныеУзлы(ТекущийОбъект, ТекСтрока, НовыеДанные, Отмеченные); + КонецЦикла; +КонецПроцедуры + +Функция ЭтотОбъект(ТекущийОбъект = Неопределено) + Если ТекущийОбъект = Неопределено Тогда + Возврат РеквизитФормыВЗначение("Объект"); + КонецЕсли; + ЗначениеВРеквизитФормы(ТекущийОбъект, "Объект"); + Возврат Неопределено; +КонецФункции + +&НаСервере +Функция ПолучитьИмяФормы(ТекущийОбъект = Неопределено) + Возврат ЭтотОбъект().ПолучитьИмяФормы(ТекущийОбъект); +КонецФункции + +&НаСервере +Процедура ПрочитатьДеревоУзловОбмена() + Дерево = ЭтотОбъект().СформироватьДеревоУзлов(); + ЗначениеВРеквизитФормы(Дерево, "ДеревоУзловОбмена"); +КонецПроцедуры + +&НаСервере +Процедура ИзменениеПометки(СтрокаДанных) + ЭлементДанных = ДеревоУзловОбмена.НайтиПоИдентификатору(СтрокаДанных); + ЭтотОбъект().ИзменениеПометки(ЭлементДанных); +КонецПроцедуры + +&НаСервере +Функция УстановитьПараметрыФормы() + + Результат = Новый Структура("ТекущаяСтрока, Отмеченные"); + + // Множественный выбор + Элементы.ДеревоУзловОбменаПометка.Видимость = Параметры.МножественныйВыбор; + // Сбрасываем пометки только если выбор изменился + Если Параметры.МножественныйВыбор <> МножественныйВыбор Тогда + ТекущийОбъект = ЭтотОбъект(); + Для Каждого ТекСтрока Из ДеревоУзловОбмена.ПолучитьЭлементы() Цикл + ТекСтрока.Пометка = Ложь; + ТекущийОбъект.ПроставитьПометкиВниз(ТекСтрока); + КонецЦикла; + КонецЕсли; + МножественныйВыбор = Параметры.МножественныйВыбор; + + // Позиционирование + Если МножественныйВыбор И ТипЗнч(Параметры.НачальноеЗначениеВыбора) = Тип("Массив") Тогда + Отмеченные = ВыбранныеУзлы(Параметры.НачальноеЗначениеВыбора); + Результат.Отмеченные = Отмеченные; + Если Отмеченные.Количество() > 0 Тогда + Результат.ТекущаяСтрока = Отмеченные[0]; + КонецЕсли; + + ИначеЕсли Параметры.НачальноеЗначениеВыбора <> Неопределено Тогда + // Одиночный вариант + Результат.ТекущаяСтрока = ИдентификаторСтрокиПоУзлу(ДеревоУзловОбмена, Параметры.НачальноеЗначениеВыбора); + + КонецЕсли; + + Возврат Результат; +КонецФункции + +&НаСервере +Функция ИдентификаторСтрокиПоУзлу(Данные, Ссылка) + Для Каждого ТекСтрока Из Данные.ПолучитьЭлементы() Цикл + Если ТекСтрока.Ссылка = Ссылка Тогда + Возврат ТекСтрока.ПолучитьИдентификатор(); + КонецЕсли; + Результат = ИдентификаторСтрокиПоУзлу(ТекСтрока, Ссылка); + Если Результат <> Неопределено Тогда + Возврат Результат; + КонецЕсли; + КонецЦикла; + Возврат Неопределено; +КонецФункции + +#КонецОбласти diff --git a/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Настройки/Form.form b/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Настройки/Form.form new file mode 100644 index 0000000..d82db45 --- /dev/null +++ b/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Настройки/Form.form @@ -0,0 +1,796 @@ + + + + <key>ru</key> + <value>Настройки</value> + + + Группа8 + 32 + + Группа1 + 5 + + Декорация1 + 13 + true + true + + true + + + Декорация1ExtendedTooltip + 37 + Label + true + true + + Left + + + + Декорация1КонтекстноеМеню + 14 + true + + Label + 1 + true + true + + Left + + + + Группа4 + 12 + + АвторегистрацияДвижений + 1 + + <key>ru</key> + <value>Движений вместе с документами</value> + + true + true + + true + + + Объект.НастройкаАвторегистрацияДвижений + + Right + + АвторегистрацияДвиженийExtendedTooltip + 39 + Label + true + true + + Left + + + + АвторегистрацияДвиженийКонтекстноеМеню + 2 + true + + CheckBoxField + Enter + true + Left + true + + + + АвторегистрацияПоследовательностей + 3 + + <key>ru</key> + <value>Последовательностей вместе с документами</value> + + true + true + + true + + + Объект.НастройкаАвторегистрацияПоследовательностей + + Right + + АвторегистрацияПоследовательностейExtendedTooltip + 40 + Label + true + true + + Left + + + + АвторегистрацияПоследовательностейКонтекстноеМеню + 4 + true + + CheckBoxField + Enter + true + Left + true + + + true + true + + true + + + Группа4ExtendedTooltip + 38 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Авторегистрация</value> + + true + + Группа1ExtendedTooltip + 36 + Label + true + true + + Left + + + UsualGroup + + Auto + WeakSeparation + true + true + true + Auto + Auto + + + + Группа7 + 29 + + НомераСообщенийРегистрации + 30 + true + true + + true + + + Объект.НастройкаВариантНомераСообщения + + None + + НомераСообщенийРегистрацииExtendedTooltip + 42 + Label + true + true + + Left + + + + НомераСообщенийРегистрацииКонтекстноеМеню + 31 + true + + RadioButtonField + Enter + true + Left + true + + 1 + + + ru + Регистрировать как не отправленные + + + 0 + + + + + ru + Использовать номер сообщения узла обмена + + + 1 + + + + + true + true + + true + + + <key>ru</key> + <value>Установка номера сообщения при регистрации</value> + + + Группа7ExtendedTooltip + 41 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + WeakSeparation + true + true + true + Auto + Auto + + + true + true + + true + + + Группа8ExtendedTooltip + 35 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + Группа2 + 8 + + Декорация2 + 16 + true + true + + true + + + Декорация2ExtendedTooltip + 44 + Label + true + true + + Left + + + + Декорация2КонтекстноеМеню + 17 + true + + Label + 1 + true + true + + Left + + + + Группа3 + 15 + + Группа5 + 24 + + ОбработкаЗапросаВнешняя + 9 + + <key>ru</key> + <value>Вспомогательная обработка для работы с результатами запроса</value> + + true + true + + true + + + ВариантИспользованияКонсолиЗапросов + + None + + ОбработкаЗапросаВнешняяExtendedTooltip + 47 + Label + true + true + + Left + + + + ОбработкаЗапросаВнешняяКонтекстноеМеню + 10 + true + + RadioButtonField + Enter + true + Left + true + + 1 + + + ru + В каталоге сервера: + + + 2 + + + + + ru + В составе конфигурации + + + 1 + + + + + ru + Не использовать + + + 0 + + + + + true + true + + true + + + Группа5ExtendedTooltip + 46 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + Группа6 + 25 + + ОбработкаЗапросаПуть + 22 + true + true + + true + + + Объект.НастройкаАдресВнешнейОбработкиЗапросов + + None + + OnChange + ОбработкаЗапросаПутьПриИзменении + + + ОбработкаЗапросаПутьExtendedTooltip + 49 + Label + true + true + + Left + + + + ОбработкаЗапросаПутьКонтекстноеМеню + 23 + true + + InputField + Enter + true + Left + true + + + StartChoice + ОбработкаЗапросаПутьНачалоВыбора + + 50 + true + true + true + true + true + true + true + + + true + true + + true + + + Группа6ExtendedTooltip + 48 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + true + + Группа3ExtendedTooltip + 45 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Консоль запросов</value> + + true + + Группа2ExtendedTooltip + 43 + Label + true + true + + Left + + + UsualGroup + + Auto + WeakSeparation + true + true + true + Auto + Auto + + + + ГруппаБСП + 26 + + НастройкаКонтрольВыгрузкиОбъектов + 27 + + <key>ru</key> + <value>Использовать при регистрации изменений объектов ограничения миграции данных</value> + + true + true + + true + + + Объект.НастройкаКонтрольВыгрузкиОбъектов + + Right + + НастройкаКонтрольВыгрузкиОбъектовExtendedTooltip + 51 + Label + true + true + + Left + + + + НастройкаКонтрольВыгрузкиОбъектовКонтекстноеМеню + 28 + true + + CheckBoxField + Enter + true + Left + true + + + true + true + + true + + + <key>ru</key> + <value>Библиотека стандартных подсистем</value> + + + ru + Группа БСП + + true + + ГруппаБСПExtendedTooltip + 50 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + WeakSeparation + true + true + true + Auto + Auto + + + Bottom + + ФормаКоманднаяПанель + -1 + + ФормаОК + 18 + + <key>ru</key> + <value>Записать</value> + + true + true + + true + + true + + ФормаОКExtendedTooltip + 33 + Label + true + true + + Left + + + Form.Command.ПодтвердитьВыбор + PictureAndText + true + true + true + UserCmds + + StdPicture.WriteAndClose + + Auto + + + ФормаОтмена + 19 + true + true + + true + + + ФормаОтменаExtendedTooltip + 34 + Label + true + true + + Left + + + Form.StandardCommand.Close + true + true + UserCmds + + StdPicture.Close + + Auto + + Right + + + OnCreateAtServer + ПриСозданииНаСервере + + LockOwnerWindow + true + true + Vertical + true + true + UseIfNecessary + true + true + + Объект + 1 + + DataProcessorObject.РегистрацияИзмененийДляОбменаДанными + + + true + + + true + +
true
+
+ + ВариантИспользованияКонсолиЗапросов + + <key>ru</key> + <value>Вариант использования консоли запросов</value> + + 5 + + Number + + 10 + + + + true + + + true + + + + ИдентификаторКонсолиЗапросов + + <key>ru</key> + <value>Идентификатор консоли запросов</value> + + 2 + + String + + + + true + + + true + + + + ПодтвердитьВыбор + + <key>ru</key> + <value>ОК</value> + + 1 + + ru + Подтвердить выбор + + + true + + + StdPicture.WriteAndClose + + + + ПодтвердитьВыбор + + + DontUse + + + + + + +
diff --git a/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Настройки/Module.bsl b/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Настройки/Module.bsl new file mode 100644 index 0000000..268c14d --- /dev/null +++ b/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Настройки/Module.bsl @@ -0,0 +1,179 @@ + +#Область ОбработчикиСобытийФормы +// + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + //ВыполнитьПроверкуПравДоступа("Администрирование", Метаданные); + + Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. + Возврат; + КонецЕсли; + + ИдентификаторКонсолиЗапросов = "КонсольЗапросов"; + + ТекущийОбъект = ЭтотОбъект(); + ТекущийОбъект.ПрочитатьНастройки(); + ТекущийОбъект.ПрочитатьПризнакиПоддержкиБСП(); + + Строка = СокрЛП(ТекущийОбъект.НастройкаАдресВнешнейОбработкиЗапросов); + Если НРег(Прав(Строка, 4)) = ".epf" Тогда + ВариантИспользованияКонсолиЗапросов = 2; + ИначеЕсли Метаданные.Обработки.Найти(Строка) <> Неопределено Тогда + ВариантИспользованияКонсолиЗапросов = 1; + Строка = ""; + Иначе + ВариантИспользованияКонсолиЗапросов = 0; + Строка = ""; + КонецЕсли; + ТекущийОбъект.НастройкаАдресВнешнейОбработкиЗапросов = Строка; + + ЭтотОбъект(ТекущийОбъект); + + СписокВыбора = Элементы.ОбработкаЗапросаВнешняя.СписокВыбора; + + // В составе метаданных разрешаем, только если есть предопределенное + Если Метаданные.Обработки.Найти(ИдентификаторКонсолиЗапросов) = Неопределено Тогда + ТекЭлемент = СписокВыбора.НайтиПоЗначению(1); + Если ТекЭлемент <> Неопределено Тогда + СписокВыбора.Удалить(ТекЭлемент); + КонецЕсли; + КонецЕсли; + + // Строка опции из файла + Если ТекущийОбъект.ЭтоФайловаяБаза() Тогда + ТекЭлемент = СписокВыбора.НайтиПоЗначению(2); + Если ТекЭлемент <> Неопределено Тогда + ТекЭлемент.Представление = НСтр("ru = 'В каталоге:'"); + КонецЕсли; + КонецЕсли; + + // БСП разрешаем только если она есть и нужной версии + Элементы.ГруппаБСП.Видимость = ТекущийОбъект.КонфигурацияПоддерживаетБСП + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы +// + +&НаКлиенте +Процедура ОбработкаЗапросаПутьПриИзменении(Элемент) + ВариантИспользованияКонсолиЗапросов = 2; +КонецПроцедуры + +&НаКлиенте +Процедура ОбработкаЗапросаПутьНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + СтандартнаяОбработка = Ложь; + Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие); + Диалог.ПроверятьСуществованиеФайла = Истина; + Диалог.Фильтр = НСтр("ru = 'Внешние обработки (*.epf)|*.epf'"); + Если Диалог.Выбрать() Тогда + ВариантИспользованияКонсолиЗапросов = 2; + УстановитьНастройкуАдресВнешнейОбработкиЗапросов(Диалог.ПолноеИмяФайла); + КонецЕсли; +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы +// + +&НаКлиенте +Процедура ПодтвердитьВыбор(Команда) + + Проверка = ПроверитьНастройки(); + Если Проверка.ЕстьОшибки Тогда + // Сообщаем об ошибках + Если Проверка.НастройкаАдресВнешнейОбработкиЗапросов <> Неопределено Тогда + СообщитьОбОшибке(Проверка.НастройкаАдресВнешнейОбработкиЗапросов, "Объект.НастройкаАдресВнешнейОбработкиЗапросов"); + Возврат; + КонецЕсли; + КонецЕсли; + + // Все успешно + СохранитьНастройки(); + Закрыть(); +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции +// + +&НаКлиенте +Процедура СообщитьОбОшибке(Текст, ИмяРеквизита = Неопределено) + + Если ИмяРеквизита = Неопределено Тогда + ЗаголовокОшибки = НСтр("ru = 'Ошибка'"); + ПоказатьПредупреждение(, Текст, , ЗаголовокОшибки); + Возврат; + КонецЕсли; + + Сообщение = Новый СообщениеПользователю(); + Сообщение.Текст = Текст; + Сообщение.Поле = ИмяРеквизита; + Сообщение.УстановитьДанные(ЭтотОбъект); + Сообщение.Сообщить(); +КонецПроцедуры + +&НаСервере +Функция ЭтотОбъект(ТекущийОбъект = Неопределено) + Если ТекущийОбъект = Неопределено Тогда + Возврат РеквизитФормыВЗначение("Объект"); + КонецЕсли; + ЗначениеВРеквизитФормы(ТекущийОбъект, "Объект"); + Возврат Неопределено; +КонецФункции + +&НаСервере +Функция ПроверитьНастройки() + ТекущийОбъект = ЭтотОбъект(); + + Если ВариантИспользованияКонсолиЗапросов = 2 Тогда + + ТекущийОбъект.НастройкаАдресВнешнейОбработкиЗапросов = СокрЛП(ТекущийОбъект.НастройкаАдресВнешнейОбработкиЗапросов); + Если Лев(ТекущийОбъект.НастройкаАдресВнешнейОбработкиЗапросов, 1) = """" + И Прав(ТекущийОбъект.НастройкаАдресВнешнейОбработкиЗапросов, 1) = """" + Тогда + ТекущийОбъект.НастройкаАдресВнешнейОбработкиЗапросов = Сред(ТекущийОбъект.НастройкаАдресВнешнейОбработкиЗапросов, + 2, СтрДлина(ТекущийОбъект.НастройкаАдресВнешнейОбработкиЗапросов) - 2); + КонецЕсли; + + Если НРег(Прав(СокрЛП(ТекущийОбъект.НастройкаАдресВнешнейОбработкиЗапросов), 4)) <> ".epf" Тогда + ТекущийОбъект.НастройкаАдресВнешнейОбработкиЗапросов = СокрЛП(ТекущийОбъект.НастройкаАдресВнешнейОбработкиЗапросов) + ".epf"; + КонецЕсли; + + ИначеЕсли ВариантИспользованияКонсолиЗапросов = 0 Тогда + ТекущийОбъект.НастройкаАдресВнешнейОбработкиЗапросов = ""; + + КонецЕсли; + + Результат = ТекущийОбъект.ПроверитьКорректностьНастроек(); + ЭтотОбъект(ТекущийОбъект); + + Возврат Результат; +КонецФункции + +&НаСервере +Процедура СохранитьНастройки() + ТекущийОбъект = ЭтотОбъект(); + Если ВариантИспользованияКонсолиЗапросов = 0 Тогда + ТекущийОбъект.НастройкаАдресВнешнейОбработкиЗапросов = ""; + ИначеЕсли ВариантИспользованияКонсолиЗапросов = 1 Тогда + ТекущийОбъект.НастройкаАдресВнешнейОбработкиЗапросов = ИдентификаторКонсолиЗапросов ; + КонецЕсли; + ТекущийОбъект.СохранитьНастройки(); + ЭтотОбъект(ТекущийОбъект); +КонецПроцедуры + +&НаСервере +Процедура УстановитьНастройкуАдресВнешнейОбработкиЗапросов(ПутьКФайлу) + ТекущийОбъект = ЭтотОбъект(); + ТекущийОбъект.НастройкаАдресВнешнейОбработкиЗапросов = ПутьКФайлу; + ЭтотОбъект(ТекущийОбъект); +КонецПроцедуры + +#КонецОбласти diff --git a/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/НомераСообщенийУзлаПланаОбмена/Form.form b/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/НомераСообщенийУзлаПланаОбмена/Form.form new file mode 100644 index 0000000..d5a50fc --- /dev/null +++ b/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/НомераСообщенийУзлаПланаОбмена/Form.form @@ -0,0 +1,367 @@ + + + + <key>ru</key> + <value>Номера сообщений узла плана обмена</value> + + + Группа3 + 6 + + НомерОтправленного + 7 + + <key>ru</key> + <value>Отправленного</value> + + true + true + + true + + + НомерОтправленного + + + НомерОтправленногоExtendedTooltip + 16 + Label + true + true + + Left + + + + НомерОтправленногоКонтекстноеМеню + 8 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + + + + НомерПринятого + 9 + + <key>ru</key> + <value>Принятого</value> + + true + true + + true + + + НомерПринятого + + + НомерПринятогоExtendedTooltip + 17 + Label + true + true + + Left + + + + НомерПринятогоКонтекстноеМеню + 10 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + + + true + true + + true + + + <key>ru</key> + <value>Номера сообщений</value> + + true + true + + Группа3ExtendedTooltip + 15 + Label + true + true + + Left + + + UsualGroup + + Auto + NormalSeparation + true + true + true + Auto + Auto + + + + Группа4 + 11 + + ЗаписатьИзмененияУзла + 14 + + <key>ru</key> + <value>Записать</value> + + true + true + + true + + + ЗаписатьИзмененияУзлаExtendedTooltip + 19 + Label + true + true + + Left + + + Form.Command.ЗаписатьИзмененияУзла + Auto + true + true + true + UserCmds + Auto + + + Отмена + 13 + + <key>ru</key> + <value>Закрыть</value> + + true + true + + true + + + ОтменаExtendedTooltip + 20 + Label + true + true + + Left + + + Form.StandardCommand.Cancel + Auto + true + true + UserCmds + Auto + + true + true + + true + + + Группа4ExtendedTooltip + 18 + Label + true + true + + Left + + + CommandBar + + Right + + + None + + ФормаКоманднаяПанель + -1 + Left + true + + + OnOpen + ПриОткрытии + + + OnCreateAtServer + ПриСозданииНаСервере + + LockOwnerWindow + true + true + Vertical + true + true + true + UseIfNecessary + true + true + + Объект + 1 + + DataProcessorObject.РегистрацияИзмененийДляОбменаДанными + + + true + + + true + +
true
+
+ + УзелОбменаСсылка + + <key>ru</key> + <value>Узел обмена</value> + + 2 + + ExchangePlanRef + + + true + + + true + + + УзелОбменаСсылка + + true + + + НомерОтправленного + + <key>ru</key> + <value>Номер отправленного</value> + + 3 + + Number + + 10 + true + + + + true + + + true + + true + + + НомерПринятого + + <key>ru</key> + <value>Номер принятого</value> + + 4 + + Number + + 10 + true + + + + true + + + true + + true + + + ВерсияДанных + + <key>ru</key> + <value>Версия данных</value> + + 5 + + String + + + + true + + + true + + + + ЗаписатьИзмененияУзла + + <key>ru</key> + <value>Записать изменения узла</value> + + 1 + + ru + Записать изменения узла + + + true + + + + ЗаписатьИзмененияУзла + + + DontUse + + + УзелОбменаСсылка + + ExchangePlanRef + + true + + + + + + +
diff --git a/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/НомераСообщенийУзлаПланаОбмена/Module.bsl b/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/НомераСообщенийУзлаПланаОбмена/Module.bsl new file mode 100644 index 0000000..e6f0dee --- /dev/null +++ b/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/НомераСообщенийУзлаПланаОбмена/Module.bsl @@ -0,0 +1,71 @@ + +#Область ОбработчикиСобытийФормы +// + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + //ВыполнитьПроверкуПравДоступа("Администрирование", Метаданные); + + Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. + Возврат; + КонецЕсли; + + УзелОбменаСсылка = Параметры.УзелОбменаСсылка; + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + ПрочитатьНомераСообщений(); + Заголовок = УзелОбменаСсылка; +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы +// + +// Производит запись измененных данных и закрывает форму. +&НаКлиенте +Процедура ЗаписатьИзмененияУзла(Команда) + ЗаписатьНомераСообщений(); + Оповестить("ИзменениеДанныхУзлаОбмена", УзелОбменаСсылка, ЭтотОбъект); + Закрыть(); +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции +// + +&НаСервере +Функция ЭтотОбъект(ТекущийОбъект = Неопределено) + Если ТекущийОбъект = Неопределено Тогда + Возврат РеквизитФормыВЗначение("Объект"); + КонецЕсли; + ЗначениеВРеквизитФормы(ТекущийОбъект, "Объект"); + Возврат Неопределено; +КонецФункции + +&НаСервере +Процедура ПрочитатьНомераСообщений() + Данные = ЭтотОбъект().ПолучитьПараметрыУзлаОбмена(УзелОбменаСсылка, "НомерОтправленного, НомерПринятого, ВерсияДанных"); + Если Данные=Неопределено Тогда + НомерОтправленного = Неопределено; + НомерПринятого = Неопределено; + ВерсияДанных = Неопределено; + Иначе + НомерОтправленного = Данные.НомерОтправленного; + НомерПринятого = Данные.НомерПринятого; + ВерсияДанных = Данные.ВерсияДанных; + КонецЕсли; +КонецПроцедуры + +&НаСервере +Процедура ЗаписатьНомераСообщений() + Данные = Новый Структура("НомерОтправленного, НомерПринятого", НомерОтправленного, НомерПринятого); + ЭтотОбъект().УстановитьПараметрыУзлаОбмена(УзелОбменаСсылка, Данные); +КонецПроцедуры + +#КонецОбласти diff --git a/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/УзлыРегистрацииОбъекта/Form.form b/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/УзлыРегистрацииОбъекта/Form.form new file mode 100644 index 0000000..a54acc3 --- /dev/null +++ b/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/УзлыРегистрацииОбъекта/Form.form @@ -0,0 +1,1320 @@ + + + + <key>ru</key> + <value>Узлы регистрации объекта</value> + + + ДеревоУзловОбмена + 1 + + <key>ru</key> + <value>Узлы обмена</value> + + true + true + + true + + + ДеревоУзловОбмена + + true + None + Add + Change + Copy + Delete + EndEdit + HierarchicalList + List + MoveDown + MoveUp + SortListAsc + SortListDesc + Tree + + ДеревоУзловОбменаПометкаНаименование + 14 + + ДеревоУзловОбменаПометка + 12 + true + true + + true + + + ДеревоУзловОбмена.Пометка + + None + + OnChange + ДеревоУзловОбменаПометкаПриИзменении + + + ДеревоУзловОбменаПометкаExtendedTooltip + 75 + Label + true + true + + Left + + + + ДеревоУзловОбменаПометкаКонтекстноеМеню + 13 + true + + CheckBoxField + EnterOnInput + true + Left + true + + true + + + + ДеревоУзловОбменаНаименование + 4 + + <key>ru</key> + <value>Узел</value> + + true + true + + true + + + ДеревоУзловОбмена.Наименование + + + ДеревоУзловОбменаНаименованиеExtendedTooltip + 76 + Label + true + true + + Left + + + + ДеревоУзловОбменаНаименованиеКонтекстноеМеню + 5 + true + + LabelField + true + Left + true + + true + true + + + true + true + + true + + + <key>ru</key> + <value>Описание узла</value> + + + ru + Описание узла + + + ДеревоУзловОбменаПометкаНаименованиеExtendedTooltip + 74 + Label + true + true + + Left + + + ColumnGroup + + InCell + true + + + + ДеревоУзловОбменаКод + 31 + + <key>ru</key> + <value>Код</value> + + true + true + + true + + + ДеревоУзловОбмена.Код + + + ДеревоУзловОбменаКодExtendedTooltip + 77 + Label + true + true + + Left + + + + ДеревоУзловОбменаКодКонтекстноеМеню + 32 + true + + LabelField + EnterOnInput + true + Left + true + + true + true + + + + ДеревоУзловОбменаГруппа1 + 53 + + ДеревоУзловОбменаАвторегистрация + 34 + + <key>ru</key> + <value>Авторегистрация</value> + + true + true + + + ДеревоУзловОбмена.ИндексКартинкиАвторегистрация + + None + + ДеревоУзловОбменаАвторегистрацияExtendedTooltip + 79 + Label + true + true + + Left + + + + ДеревоУзловОбменаАвторегистрацияКонтекстноеМеню + 35 + true + + PictureField + EnterOnInput + true + Left + true + + true + true + true + true + + + + 1 + + + + + ДеревоУзловОбменаНомерСообщения + 54 + + <key>ru</key> + <value>Номер сообщения</value> + + true + true + + true + + + ДеревоУзловОбмена.НомерСообщения + + + ДеревоУзловОбменаНомерСообщенияExtendedTooltip + 80 + Label + true + true + + Left + + + + ДеревоУзловОбменаНомерСообщенияКонтекстноеМеню + 55 + true + + InputField + EnterOnInput + true + Left + true + + true + true + true + true + true + true + + + true + true + + true + + + <key>ru</key> + <value>Описание регистрации</value> + + + ДеревоУзловОбменаГруппа1ExtendedTooltip + 78 + Label + true + true + + Left + + + ColumnGroup + + InCell + true + + + None + + ДеревоУзловОбменаКоманднаяПанель + 3 + Left + + + Selection + ДеревоУзловОбменаВыбор + + + ДеревоУзловОбменаСтрокаПоиска + 83 + + ДеревоУзловОбменаСтрокаПоискаРасширеннаяПодсказка + 85 + Label + true + true + + Left + + + + ДеревоУзловОбменаСтрокаПоискаКонтекстноеМеню + 84 + true + + ДеревоУзловОбмена + + true + + + + ДеревоУзловОбменаСостояниеПросмотра + 86 + + ДеревоУзловОбменаСостояниеПросмотраРасширеннаяПодсказка + 88 + Label + true + true + + Left + + + + ДеревоУзловОбменаСостояниеПросмотраКонтекстноеМеню + 87 + true + + ViewStatusAddition + ДеревоУзловОбмена + + true + + + + ДеревоУзловОбменаУправлениеПоиском + 89 + + ДеревоУзловОбменаУправлениеПоискомРасширеннаяПодсказка + 91 + Label + true + true + + Left + + + + ДеревоУзловОбменаУправлениеПоискомКонтекстноеМеню + 90 + true + + SearchControlAddition + ДеревоУзловОбмена + + true + + + + ДеревоУзловОбменаExtendedTooltip + 73 + Label + true + true + + Left + + + + ДеревоУзловОбменаКонтекстноеМеню + 2 + + ДеревоУзловОбменаКонтекстноеМенюГруппа1 + 40 + + ДеревоУзловОбменаКонтекстноеМенюПометитьВсеУзлы + 41 + true + true + + true + + + ДеревоУзловОбменаКонтекстноеМенюПометитьВсеУзлыExtendedTooltip + 66 + Label + true + true + + Left + + + Form.Command.ПометитьВсеУзлы + Auto + true + true + UserCmds + + StdPicture.CheckAll + + Auto + + + ДеревоУзловОбменаКонтекстноеМенюСнятьПометкуВсемУзлам + 42 + true + true + + true + + + ДеревоУзловОбменаКонтекстноеМенюСнятьПометкуВсемУзламExtendedTooltip + 67 + Label + true + true + + Left + + + Form.Command.СнятьПометкуВсемУзлам + Auto + true + true + UserCmds + + StdPicture.UncheckAll + + Auto + + + ДеревоУзловОбменаКонтекстноеМенюИнвертироватьПометкуВсемУзлам + 43 + true + true + + true + + + ДеревоУзловОбменаКонтекстноеМенюИнвертироватьПометкуВсемУзламExtendedTooltip + 68 + Label + true + true + + Left + + + Form.Command.ИнвертироватьПометкуВсемУзлам + Auto + true + true + UserCmds + + Auto + + true + true + + true + + + ДеревоУзловОбменаКонтекстноеМенюГруппа1ExtendedTooltip + 65 + Label + true + true + + Left + + + + + + ДеревоУзловОбменаКонтекстноеМенюОткрытьФормуРедактированияОтУзла + 47 + + <key>ru</key> + <value>Регистрация других объектов узла</value> + + true + true + + true + + + ДеревоУзловОбменаКонтекстноеМенюОткрытьФормуРедактированияОтУзлаExtendedTooltip + 69 + Label + true + true + + Left + + + Form.Command.ОткрытьФормуРедактированияОтУзла + Auto + true + true + UserCmds + Auto + + + ДеревоУзловОбменаКонтекстноеМенюГруппа2 + 44 + + ДеревоУзловОбменаКонтекстноеМенюВывестиСписок + 45 + true + true + + true + + + ДеревоУзловОбменаКонтекстноеМенюВывестиСписокExtendedTooltip + 71 + Label + true + true + + Left + + + Form.Item.ДеревоУзловОбмена.StandardCommand.OutputList + Auto + true + true + UserCmds + Auto + + + ДеревоУзловОбменаКонтекстноеМенюКопироватьВБуферОбмена + 46 + true + true + + true + + + ДеревоУзловОбменаКонтекстноеМенюКопироватьВБуферОбменаExtendedTooltip + 72 + Label + true + true + + Left + + + Form.Item.ДеревоУзловОбмена.StandardCommand.CopyToClipboard + Auto + true + true + UserCmds + Auto + + true + true + + true + + + ДеревоУзловОбменаКонтекстноеМенюГруппа2ExtendedTooltip + 70 + Label + true + true + + Left + + + + + true + + Tree + true + true + true +
true
+ 1 + 1 + AutoUse + AutoUse + true + Auto + ExpandAllLevels + true + true + + ДеревоУзловОбмена.ИндексКартинки + + + None + None + None +
+ + ГруппаСкрытыхДанных + 50 + + СкрытаяКартинкаИнформация32 + 51 + + <key>ru</key> + <value>Скрытая картинка информация32</value> + + true + true + + true + + + СкрытаяКартинкаИнформация32ExtendedTooltip + 82 + Label + true + true + + Left + + + + СкрытаяКартинкаИнформация32КонтекстноеМеню + 52 + true + + true + true + + + + + false + + true + + + <key>ru</key> + <value>Группа скрытых данных</value> + + + ru + Группа скрытых данных + + true + + ГруппаСкрытыхДанныхExtendedTooltip + 81 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + true + Auto + Auto + + + + ФормаКоманднаяПанель + -1 + + ДеревоУзловОбменаИзменитьРегистрацию + 33 + true + true + + true + + + ДеревоУзловОбменаИзменитьРегистрациюExtendedTooltip + 58 + Label + true + true + + Left + + + Form.Command.ИзменитьРегистрацию + PictureAndText + true + true + true + UserCmds + + StdPicture.Write + + Auto + + + Группа1 + 48 + + ФормаУстановитьПометкуВсемУзлам + 36 + true + true + + true + + + ФормаУстановитьПометкуВсемУзламExtendedTooltip + 60 + Label + true + true + + Left + + + Form.Command.ПометитьВсеУзлы + Auto + true + true + UserCmds + Auto + + + ФормаСнятьПометкуВсемУзлам + 37 + true + true + + true + + + ФормаСнятьПометкуВсемУзламExtendedTooltip + 61 + Label + true + true + + Left + + + Form.Command.СнятьПометкуВсемУзлам + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Переключение пометок</value> + + + Группа1ExtendedTooltip + 59 + Label + true + true + + Left + + + + + + Группа2 + 56 + + ФормаПеречитатьДеревоУзлов + 49 + + <key>ru</key> + <value>Обновить</value> + + true + true + + true + + + ФормаПеречитатьДеревоУзловExtendedTooltip + 63 + Label + true + true + + Left + + + Form.Command.ПеречитатьДеревоУзлов + PictureAndText + true + true + UserCmds + + StdPicture.Refresh + + Auto + + + ФормаОткрытьФормуНастроек + 57 + true + true + + true + + + ФормаОткрытьФормуНастроекExtendedTooltip + 64 + Label + true + true + + Left + + + Form.Command.ОткрытьФормуНастроек + PictureAndText + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Дополнительно</value> + + + ru + Группа2 + + + Группа2ExtendedTooltip + 62 + Label + true + true + + Left + + + + + Left + true + + + OnOpen + ПриОткрытии + + + OnCreateAtServer + ПриСозданииНаСервере + + true + true + Vertical + true + true + true + UseIfNecessary + true + true + + Объект + 1 + + DataProcessorObject.РегистрацияИзмененийДляОбменаДанными + + + true + + + true + +
true
+
+ + ДеревоУзловОбмена + + <key>ru</key> + <value>Дерево узлов обмена</value> + + 2 + + ValueTree + + + true + + + true + + + Наименование + + <key>ru</key> + <value>Узел обмена</value> + + 1 + + String + + + + true + + + true + + + + ИндексКартинки + + <key>ru</key> + <value>Индекс картинки</value> + + 8 + + Number + + + + true + + + true + + + + Пометка + 3 + + Number + + 10 + + + + true + + + true + + + + Ссылка + + <key>ru</key> + <value>Ссылка</value> + + 4 + + ExchangePlanRef + + + true + + + true + + + + Код + + <key>ru</key> + <value>Код</value> + + 2 + + String + + + + true + + + true + + + + ИндексКартинкиАвторегистрация + + <key>ru</key> + <value>Индекс картинки авторегистрация</value> + + 5 + + Number + + 10 + + + + true + + + true + + + + ИсходнаяПометка + + <key>ru</key> + <value>Исходная пометка</value> + + 6 + + Number + + 10 + + + + true + + + true + + + + НомерСообщения + + <key>ru</key> + <value>Номер сообщения</value> + + 7 + + Number + + 10 + + + + true + + + true + + + + НеВыгружалось + + <key>ru</key> + <value>Не выгружалось</value> + + 9 + + Boolean + + + true + + + true + + + + + ОбъектРегистрации + + <key>ru</key> + <value>Объект регистрации</value> + + 3 + + + true + + + true + + + + ТаблицаРегистрации + + <key>ru</key> + <value>Таблица регистрации</value> + + 4 + + String + + + + true + + + true + + + + ИзменитьРегистрацию + + <key>ru</key> + <value>Изменить регистрацию</value> + + 1 + + ru + Изменить регистрацию + + + true + + + StdPicture.Write + + + + ИзменитьРегистрацию + + + DontUse + + + ПометитьВсеУзлы + + <key>ru</key> + <value>Пометить все узлы</value> + + 2 + + ru + Пометить все узлы + + + true + + + StdPicture.CheckAll + + + + ПометитьВсеУзлы + + + DontUse + + + СнятьПометкуВсемУзлам + + <key>ru</key> + <value>Снять пометку у всех узлов</value> + + 3 + + ru + Снять пометку всем узлам + + + true + + + StdPicture.UncheckAll + + + + СнятьПометкуВсемУзлам + + + DontUse + + + ИнвертироватьПометкуВсемУзлам + + <key>ru</key> + <value>Изменить пометку всех узлов</value> + + 4 + + ru + Изменить пометку всех узлов + + + true + + + + ИнвертироватьПометкуВсемУзлам + + + DontUse + + + ОткрытьФормуРедактированияОтУзла + + <key>ru</key> + <value>Открыть форму редактирования от узла</value> + + 5 + + ru + Открыть форму редактирования от узла + + + true + + + + ОткрытьФормуРедактированияОтУзла + + + DontUse + + + ПеречитатьДеревоУзлов + + <key>ru</key> + <value>Перечитать дерево узлов</value> + + 6 + + ru + Перечитать дерево узлов + + + true + + + StdPicture.Reread + + + + ПеречитатьДеревоУзлов + + + DontUse + + + ОткрытьФормуНастроек + + <key>ru</key> + <value>Настройки</value> + + 7 + + ru + Открыть форму настроек + + + true + + + StdPicture.ReportSettings + + + + ОткрытьФормуНастроек + + + DontUse + + + ОбъектРегистрации + + true + + + ТаблицаРегистрации + + String + + + true + + + ОповещатьОбИзменениях + + Boolean + + true + + + + + + +
diff --git a/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/УзлыРегистрацииОбъекта/Items/ДеревоУзловОбмена/RowsPicture.png b/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/УзлыРегистрацииОбъекта/Items/ДеревоУзловОбмена/RowsPicture.png new file mode 100644 index 0000000..3285ca4 Binary files /dev/null and b/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/УзлыРегистрацииОбъекта/Items/ДеревоУзловОбмена/RowsPicture.png differ diff --git a/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/УзлыРегистрацииОбъекта/Items/ДеревоУзловОбменаАвторегистрация/ValuesPicture.png b/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/УзлыРегистрацииОбъекта/Items/ДеревоУзловОбменаАвторегистрация/ValuesPicture.png new file mode 100644 index 0000000..d7cc10f Binary files /dev/null and b/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/УзлыРегистрацииОбъекта/Items/ДеревоУзловОбменаАвторегистрация/ValuesPicture.png differ diff --git a/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/УзлыРегистрацииОбъекта/Items/ДеревоУзловОбменаКонтекстноеМенюИнвертироватьПометкуВсемУзлам/Picture.png b/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/УзлыРегистрацииОбъекта/Items/ДеревоУзловОбменаКонтекстноеМенюИнвертироватьПометкуВсемУзлам/Picture.png new file mode 100644 index 0000000..89c8178 Binary files /dev/null and b/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/УзлыРегистрацииОбъекта/Items/ДеревоУзловОбменаКонтекстноеМенюИнвертироватьПометкуВсемУзлам/Picture.png differ diff --git a/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/УзлыРегистрацииОбъекта/Items/СкрытаяКартинкаИнформация32/Picture.png b/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/УзлыРегистрацииОбъекта/Items/СкрытаяКартинкаИнформация32/Picture.png new file mode 100644 index 0000000..dd7660e Binary files /dev/null and b/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/УзлыРегистрацииОбъекта/Items/СкрытаяКартинкаИнформация32/Picture.png differ diff --git a/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/УзлыРегистрацииОбъекта/Module.bsl b/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/УзлыРегистрацииОбъекта/Module.bsl new file mode 100644 index 0000000..c8be20d --- /dev/null +++ b/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/УзлыРегистрацииОбъекта/Module.bsl @@ -0,0 +1,365 @@ + +#Область ОбработчикиСобытийФормы +// + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + УстановитьУсловноеОформление(); + + //ВыполнитьПроверкуПравДоступа("Администрирование", Метаданные); + + Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. + Возврат; + КонецЕсли; + + ТекущийОбъект = ЭтотОбъект(); + ТекущийОбъект.ПрочитатьНастройки(); + ТекущийОбъект.ПрочитатьПризнакиПоддержкиБСП(); + ЭтотОбъект(ТекущийОбъект); + + ОбъектРегистрации = Параметры.ОбъектРегистрации; + Расшифровка = ""; + + Если ТипЗнч(ОбъектРегистрации) = Тип("Структура") Тогда + ТаблицаРегистрации = Параметры.ТаблицаРегистрации; + ОбъектСтрокой = ТаблицаРегистрации; + Для Каждого КлючЗначение Из ОбъектРегистрации Цикл + Расшифровка = Расшифровка + "," + КлючЗначение.Значение; + КонецЦикла; + Расшифровка = " (" + Сред(Расшифровка,2) + ")"; + Иначе + ТаблицаРегистрации = ""; + ОбъектСтрокой = ОбъектРегистрации; + КонецЕсли; + Заголовок = "Регистрация " + ТекущийОбъект.ПредставлениеСсылки(ОбъектСтрокой) + Расшифровка; + + ПрочитатьУзлыОбмена(); +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + РазвернутьВсеУзлы(); +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыДеревоУзловОбмена +// + +&НаКлиенте +Процедура ДеревоУзловОбменаВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) + СтандартнаяОбработка = Ложь; + Если Поле = Элементы.ДеревоУзловОбменаНаименование Или Поле = Элементы.ДеревоУзловОбменаКод Тогда + ОткрытьФормуРедактированияДругихОбъектов(); + Возврат; + ИначеЕсли Поле <> Элементы.ДеревоУзловОбменаНомерСообщения Тогда + Возврат; + КонецЕсли; + + ТекущиеДаные = Элементы.ДеревоУзловОбмена.ТекущиеДанные; + Оповещение = Новый ОписаниеОповещения("ДеревоУзловОбменаВыборЗавершение", ЭтотОбъект, Новый Структура); + Оповещение.ДополнительныеПараметры.Вставить("Узел", ТекущиеДаные.Ссылка); + + Подсказка = НСтр("ru = 'Номер отправленного'"); + ПоказатьВводЧисла(Оповещение, ТекущиеДаные.НомерСообщения, Подсказка); +КонецПроцедуры + +&НаКлиенте +Процедура ДеревоУзловОбменаПометкаПриИзменении(Элемент) + ИзменениеПометки(Элементы.ДеревоУзловОбмена.ТекущаяСтрока); +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы +// + +&НаКлиенте +Процедура ПеречитатьДеревоУзлов(Команда) + ТекущийУзел = ТекущийВыбранныйУзел(); + ПрочитатьУзлыОбмена(); + РазвернутьВсеУзлы(ТекущийУзел); +КонецПроцедуры + +&НаКлиенте +Процедура ОткрытьФормуРедактированияОтУзла(Команда) + ОткрытьФормуРедактированияДругихОбъектов(); +КонецПроцедуры + +&НаКлиенте +Процедура ПометитьВсеУзлы(Команда) + Для Каждого СтрокаПлана Из ДеревоУзловОбмена.ПолучитьЭлементы() Цикл + СтрокаПлана.Пометка = Истина; + ИзменениеПометки(СтрокаПлана.ПолучитьИдентификатор()) + КонецЦикла; +КонецПроцедуры + +&НаКлиенте +Процедура СнятьПометкуВсемУзлам(Команда) + Для Каждого СтрокаПлана Из ДеревоУзловОбмена.ПолучитьЭлементы() Цикл + СтрокаПлана.Пометка = Ложь; + ИзменениеПометки(СтрокаПлана.ПолучитьИдентификатор()) + КонецЦикла; +КонецПроцедуры + +&НаКлиенте +Процедура ИнвертироватьПометкуВсемУзлам(Команда) + Для Каждого СтрокаПлана Из ДеревоУзловОбмена.ПолучитьЭлементы() Цикл + Для Каждого СтрокаУзла Из СтрокаПлана.ПолучитьЭлементы() Цикл + СтрокаУзла.Пометка = Не СтрокаУзла.Пометка; + ИзменениеПометки(СтрокаУзла.ПолучитьИдентификатор()) + КонецЦикла; + КонецЦикла; +КонецПроцедуры + +&НаКлиенте +Процедура ИзменитьРегистрацию(Команда) + + ЗаголовокВопроса = НСтр("ru = 'Подтверждение'"); + Текст = НСтр("ru = 'Изменить регистрацию ""%1"" + |на узлах?'"); + + Текст = СтрЗаменить(Текст, "%1", ОбъектРегистрации); + + Оповещение = Новый ОписаниеОповещения("ИзменитьРегистрациюЗавершение", ЭтотОбъект); + + ПоказатьВопрос(Оповещение, Текст, РежимДиалогаВопрос.ДаНет, , ,ЗаголовокВопроса); +КонецПроцедуры + +&НаКлиенте +Процедура ИзменитьРегистрациюЗавершение(Знач РезультатВопроса, Знач ДополнительныеПараметры) Экспорт + Если РезультатВопроса <> КодВозвратаДиалога.Да Тогда + Возврат; + КонецЕсли; + + Колво = ИзменениеРегистрацииПоУзлам(ДеревоУзловОбмена); + Если Колво > 0 Тогда + Текст = НСтр("ru = 'Регистрация %1 была изменена на %2 узлах'"); + ЗаголовокОповещения = НСтр("ru = 'Изменение регистрации:'"); + + Текст = СтрЗаменить(Текст, "%1", ОбъектРегистрации); + Текст = СтрЗаменить(Текст, "%2", Колво); + + //ПоказатьОповещениеПользователя(ЗаголовокОповещения, + // ПолучитьНавигационнуюСсылку(ОбъектРегистрации), + // Текст, + // Элементы.СкрытаяКартинкаИнформация32.Картинка); + + Если Параметры.ОповещатьОбИзменениях Тогда + Оповестить("ИзменениеРегистрацииОбменаДаннымиОбъекта", + Новый Структура("ОбъектРегистрации, ТаблицаРегистрации", ОбъектРегистрации, ТаблицаРегистрации), + ЭтотОбъект); + КонецЕсли; + КонецЕсли; + + ТекущийУзел = ТекущийВыбранныйУзел(); + ПрочитатьУзлыОбмена(Истина); + РазвернутьВсеУзлы(ТекущийУзел); +КонецПроцедуры + +&НаКлиенте +Процедура ОткрытьФормуНастроек(Команда) + ОткрытьФормуНастроекОбработки(); +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервере +Процедура УстановитьУсловноеОформление() + + УсловноеОформление.Элементы.Очистить(); + + // + + Элемент = УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ДеревоУзловОбменаНомерСообщения.Имя); + + ГруппаОтбора1 = Элемент.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных")); + ГруппаОтбора1.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИли; + + ОтборЭлемента = ГруппаОтбора1.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ДеревоУзловОбмена.Ссылка"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено; + + ОтборЭлемента = ГруппаОтбора1.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ДеревоУзловОбмена.Пометка"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = 0; + + Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = 'ДеревоУзловОбменаНомерСообщения'")); + Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = 'Не выгружалось'")); + + // + + Элемент = УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ДеревоУзловОбменаКод.Имя); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ДеревоУзловОбменаАвторегистрация.Имя); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ДеревоУзловОбменаНомерСообщения.Имя); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ДеревоУзловОбмена.Ссылка"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено; + Элемент.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь); + Элемент.Оформление.УстановитьЗначениеПараметра("Отображать", Ложь); + +КонецПроцедуры +// + +&НаКлиенте +Процедура ДеревоУзловОбменаВыборЗавершение(Знач Число, Знач ДополнительныеПараметры) Экспорт + Если Число = Неопределено Тогда + // Отказ от ввода + Возврат; + КонецЕсли; + + ИзменитьНомерСообщенияНаСервере(ДополнительныеПараметры.Узел, Число, ОбъектРегистрации, ТаблицаРегистрации); + + ТекущийУзел = ТекущийВыбранныйУзел(); + ПрочитатьУзлыОбмена(Истина); + РазвернутьВсеУзлы(ТекущийУзел); + + Если Параметры.ОповещатьОбИзменениях Тогда + Оповестить("ИзменениеРегистрацииОбменаДаннымиОбъекта", + Новый Структура("ОбъектРегистрации, ТаблицаРегистрации", ОбъектРегистрации, ТаблицаРегистрации), + ЭтотОбъект); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Функция ТекущийВыбранныйУзел() + ТекущиеДанные = Элементы.ДеревоУзловОбмена.ТекущиеДанные; + Если ТекущиеДанные = Неопределено Тогда + Возврат Неопределено; + КонецЕсли; + Возврат Новый Структура("Наименование, Ссылка", ТекущиеДанные.Наименование, ТекущиеДанные.Ссылка); +КонецФункции + +&НаКлиенте +Процедура ОткрытьФормуНастроекОбработки() + ТекИмяФормы = ПолучитьИмяФормы() + "Форма.Настройки"; + ОткрытьФорму(ТекИмяФормы, , ЭтотОбъект); +КонецПроцедуры + +&НаКлиенте +Процедура ОткрытьФормуРедактированияДругихОбъектов() + ТекИмяФормы = ПолучитьИмяФормы() + "Форма.Форма"; + Данные = Элементы.ДеревоУзловОбмена.ТекущиеДанные; + Если Данные <> Неопределено И Данные.Ссылка <> Неопределено Тогда + ТекПараметры = Новый Структура("УзелОбмена, ИдентификаторКоманды, ОбъектыНазначения", Данные.Ссылка); + ОткрытьФорму(ТекИмяФормы, ТекПараметры, ЭтотОбъект); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура РазвернутьВсеУзлы(УзелФокуса = Неопределено) + НайденныйУзел = Неопределено; + + Для Каждого Строка Из ДеревоУзловОбмена.ПолучитьЭлементы() Цикл + Идентификатор = Строка.ПолучитьИдентификатор(); + Элементы.ДеревоУзловОбмена.Развернуть(Идентификатор, Истина); + + Если УзелФокуса <> Неопределено И НайденныйУзел = Неопределено Тогда + Если Строка.Наименование = УзелФокуса.Наименование И Строка.Ссылка = УзелФокуса.Ссылка Тогда + НайденныйУзел = Идентификатор; + Иначе + Для Каждого Подстрока Из Строка.ПолучитьЭлементы() Цикл + Если Подстрока.Наименование = УзелФокуса.Наименование И Подстрока.Ссылка = УзелФокуса.Ссылка Тогда + НайденныйУзел = Подстрока.ПолучитьИдентификатор(); + КонецЕсли; + КонецЦикла; + КонецЕсли; + КонецЕсли; + + КонецЦикла; + + Если УзелФокуса <> Неопределено И НайденныйУзел <> Неопределено Тогда + Элементы.ДеревоУзловОбмена.ТекущаяСтрока = НайденныйУзел; + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Функция ИзменениеРегистрацииПоУзлам(Знач Данные) + ТекущийОбъект = ЭтотОбъект(); + КолвоУзлов = 0; + Для Каждого Строка Из Данные.ПолучитьЭлементы() Цикл + Если Строка.Ссылка <> Неопределено Тогда + УжеЗарегистрировано = ТекущийОбъект.ОбъектЗарегистрированНаУзле(Строка.Ссылка, ОбъектРегистрации, ТаблицаРегистрации); + Если Строка.Пометка = 0 И УжеЗарегистрировано Тогда + Результат = ТекущийОбъект.ИзменитьРегистрациюНаСервере(Ложь, Истина, Строка.Ссылка, ОбъектРегистрации, ТаблицаРегистрации); + КолвоУзлов = КолвоУзлов + Результат.Успешно; + ИначеЕсли Строка.Пометка = 1 И (Не УжеЗарегистрировано) Тогда + Результат = ТекущийОбъект.ИзменитьРегистрациюНаСервере(Истина, Истина, Строка.Ссылка, ОбъектРегистрации, ТаблицаРегистрации); + КолвоУзлов = КолвоУзлов + Результат.Успешно; + КонецЕсли; + КонецЕсли; + КолвоУзлов = КолвоУзлов + ИзменениеРегистрацииПоУзлам(Строка); + КонецЦикла; + Возврат КолвоУзлов; +КонецФункции + +&НаСервере +Функция ИзменитьНомерСообщенияНаСервере(Узел, НомерСообщения, Данные, ИмяТаблицы = Неопределено) + Возврат ЭтотОбъект().ИзменитьРегистрациюНаСервере(НомерСообщения, Истина, Узел, Данные, ИмяТаблицы); +КонецФункции + +&НаСервере +Функция ЭтотОбъект(ТекущийОбъект = Неопределено) + Если ТекущийОбъект = Неопределено Тогда + Возврат РеквизитФормыВЗначение("Объект"); + КонецЕсли; + ЗначениеВРеквизитФормы(ТекущийОбъект, "Объект"); + Возврат Неопределено; +КонецФункции + +&НаСервере +Функция ПолучитьИмяФормы(ТекущийОбъект = Неопределено) + Возврат ЭтотОбъект().ПолучитьИмяФормы(ТекущийОбъект); +КонецФункции + +&НаСервере +Процедура ИзменениеПометки(Строка) + ЭлементДанных = ДеревоУзловОбмена.НайтиПоИдентификатору(Строка); + ЭтотОбъект().ИзменениеПометки(ЭлементДанных); +КонецПроцедуры + +&НаСервере +Процедура ПрочитатьУзлыОбмена(ТолькоОбновить = Ложь) + ТекущийОбъект = ЭтотОбъект(); + Дерево = ТекущийОбъект.СформироватьДеревоУзлов(ОбъектРегистрации, ТаблицаРегистрации); + + Если ТолькоОбновить Тогда + // Обновляем некоторые поля текущим данным + Для Каждого СтрокаПлана Из ДеревоУзловОбмена.ПолучитьЭлементы() Цикл + Для Каждого СтрокаУзла Из СтрокаПлана.ПолучитьЭлементы() Цикл + СтрокаДерева = Дерево.Строки.Найти(СтрокаУзла.Ссылка, "Ссылка", Истина); + Если СтрокаДерева <> Неопределено Тогда + ЗаполнитьЗначенияСвойств(СтрокаУзла, СтрокаДерева, "Пометка, ИсходнаяПометка, НомерСообщения, НеВыгружалось"); + КонецЕсли; + КонецЦикла; + КонецЦикла; + Иначе + // Переформируем полностью + ЗначениеВРеквизитФормы(Дерево, "ДеревоУзловОбмена"); + КонецЕсли; + + Для Каждого СтрокаПлана Из ДеревоУзловОбмена.ПолучитьЭлементы() Цикл + Для Каждого СтрокаУзла Из СтрокаПлана.ПолучитьЭлементы() Цикл + ТекущийОбъект.ИзменениеПометки(СтрокаУзла); + КонецЦикла; + КонецЦикла; + +КонецПроцедуры + +#КонецОбласти diff --git a/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Attributes/СписокКонстант/ExtInfo/ListSettings.dcss b/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Attributes/СписокКонстант/ExtInfo/ListSettings.dcss new file mode 100644 index 0000000..9b5b065 --- /dev/null +++ b/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Attributes/СписокКонстант/ExtInfo/ListSettings.dcss @@ -0,0 +1,17 @@ + + + + Normal + dfcece9d-5077-440b-b6b3-45a5cb4538eb + + + Normal + 88619765-ccb3-46c6-ac52-38e9c992ebd4 + + + Normal + b75fecce-942b-4aed-abc9-e6a02e460fb3 + + Normal + 911b6018-f537-43e8-a417-da56b22f9aec + diff --git a/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Attributes/СписокНаборовЗаписей/ExtInfo/ListSettings.dcss b/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Attributes/СписокНаборовЗаписей/ExtInfo/ListSettings.dcss new file mode 100644 index 0000000..9b5b065 --- /dev/null +++ b/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Attributes/СписокНаборовЗаписей/ExtInfo/ListSettings.dcss @@ -0,0 +1,17 @@ + + + + Normal + dfcece9d-5077-440b-b6b3-45a5cb4538eb + + + Normal + 88619765-ccb3-46c6-ac52-38e9c992ebd4 + + + Normal + b75fecce-942b-4aed-abc9-e6a02e460fb3 + + Normal + 911b6018-f537-43e8-a417-da56b22f9aec + diff --git a/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Attributes/СписокСсылок/ExtInfo/ListSettings.dcss b/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Attributes/СписокСсылок/ExtInfo/ListSettings.dcss new file mode 100644 index 0000000..9afd8c0 --- /dev/null +++ b/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Attributes/СписокСсылок/ExtInfo/ListSettings.dcss @@ -0,0 +1,41 @@ + + + + Normal + dfcece9d-5077-440b-b6b3-45a5cb4538eb + + + Normal + 88619765-ccb3-46c6-ac52-38e9c992ebd4 + + + + + + НомерСообщения + + + + + НеВыгружалось + Equal + true + + + + + ЦветТекста + web:LightGray + + + Текст + Не выгружалось + + + + Normal + b75fecce-942b-4aed-abc9-e6a02e460fb3 + + Normal + 911b6018-f537-43e8-a417-da56b22f9aec + diff --git a/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Form.form b/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Form.form new file mode 100644 index 0000000..b52dbda --- /dev/null +++ b/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Form.form @@ -0,0 +1,5276 @@ + + + + <key>ru</key> + <value>Регистрация изменений для обмена данными</value> + + + Группа2 + 35 + + УзелОбменаСсылка + 1 + true + true + + true + + + УзелОбменаСсылка + + + OnChange + УзелОбменаСсылкаПриИзменении + + + УзелОбменаСсылкаExtendedTooltip + 201 + Label + true + true + + Left + + + + УзелОбменаСсылкаКонтекстноеМеню + 2 + true + + InputField + Enter + true + Left + true + + + StartChoice + УзелОбменаСсылкаНачалоВыбора + + + Clearing + УзелОбменаСсылкаОчистка + + + ChoiceProcessing + УзелОбменаСсылкаОбработкаВыбора + + true + true + false + true + false + true + ShowInInputField + false + false + false + false + true + true + true + + + + ФормаРедактироватьНомераСообщений + 85 + + <key>ru</key> + <value>Отпр. <нет>, прин. <нет></value> + + true + true + + true + + + ФормаРедактироватьНомераСообщенийExtendedTooltip + 202 + Label + true + true + + Left + + + Hyperlink + Form.Command.РедактироватьНомераСообщений + Auto + true + true + UserCmds + Auto + + + ВариантОтбораПоНомеруСообщения + 172 + + <key>ru</key> + <value>Отображать</value> + + true + true + + true + + + ВариантОтбораПоНомеруСообщения + + + OnChange + ВариантОтбораПоНомеруСообщенияПриИзменении + + + ВариантОтбораПоНомеруСообщенияExtendedTooltip + 203 + Label + true + true + + Left + + + + ВариантОтбораПоНомеруСообщенияКонтекстноеМеню + 173 + true + + InputField + Enter + true + Left + true + + 18 + true + true + true + true + true + + + ru + Все + + + 0 + + + + + ru + Только выгруженные + + + 1 + + + + + ru + Только невыгруженные + + + 2 + + + + + true + true + + true + + + <key>ru</key> + <value>Быстрые отборы</value> + + true + + Группа2ExtendedTooltip + 200 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + Группа1 + 5 + + КоманднаяПанельОбщая + 95 + + ДеревоМетаданныхГруппаДобавить + 39 + + ДеревоМетаданныхДобавитьРегистрациюВсехОбъектов + 40 + + <key>ru</key> + <value>Все объекты выбранных типов</value> + + true + true + + true + + + ДеревоМетаданныхДобавитьРегистрациюВсехОбъектовExtendedTooltip + 207 + Label + true + true + + Left + + + Form.Command.ДобавитьРегистрациюВсехОбъектов + Auto + true + true + UserCmds + Auto + + + ДеревоМетаданныхДобавитьРегистрациюАвтоОбъектов + 41 + + <key>ru</key> + <value>Объекты выбранных типов с авторегистрацией</value> + + true + true + + true + + + ДеревоМетаданныхДобавитьРегистрациюАвтоОбъектовExtendedTooltip + 208 + Label + true + true + + Left + + + Form.Command.ДобавитьРегистрациюАвтоОбъектов + Auto + true + true + UserCmds + Auto + + + ГруппаКомандДобавить + 183 + + ФормаДобавитьРегистрациюОдногоОбъекта + 184 + + <key>ru</key> + <value>Одиночный объект</value> + + true + true + + true + + + ФормаДобавитьРегистрациюОдногоОбъектаExtendedTooltip + 210 + Label + true + true + + Left + + + Form.Command.ДобавитьРегистрациюОдногоОбъекта + Auto + true + true + UserCmds + + StdPicture.CreateListItem + + Auto + + + ФормаДобавитьРегистрациюОтбор + 185 + + <key>ru</key> + <value>Объекты при помощи отбора</value> + + true + true + + true + + + ФормаДобавитьРегистрациюОтборExtendedTooltip + 211 + Label + true + true + + Left + + + Form.Command.ДобавитьРегистрациюОтбор + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Регистрация</value> + + + ru + Группа команд добавить + + + ГруппаКомандДобавитьExtendedTooltip + 209 + Label + true + true + + Left + + + + + + ДеревоМетаданныхГруппа3 + 60 + + ДеревоМетаданныхДобавитьРегистрациюРезультатаЗапроса + 59 + + <key>ru</key> + <value>Результаты запроса</value> + + true + true + + true + + + ДеревоМетаданныхДобавитьРегистрациюРезультатаЗапросаExtendedTooltip + 213 + Label + true + true + + Left + + + Form.Command.ДобавитьРегистрациюРезультатаЗапроса + Auto + true + true + UserCmds + + Auto + + true + true + + true + + + <key>ru</key> + <value>Регистрация результатов запроса</value> + + + ДеревоМетаданныхГруппа3ExtendedTooltip + 212 + Label + true + true + + Left + + + + + true + true + + true + + + <key>ru</key> + <value>Зарегистрировать</value> + + + ru + Зарегистрировать объекты выбранных типов + + + ДеревоМетаданныхГруппаДобавитьExtendedTooltip + 206 + Label + true + true + + Left + + + Popup + + + StdPicture.CreateListItem + + Auto + + + + ДеревоМетаданныхГруппаУдалить + 42 + + ДеревоМетаданныхУдалитьРегистрациюВсехОбъектов + 43 + + <key>ru</key> + <value>Всех объектов выбранных типов</value> + + true + true + + true + + + ДеревоМетаданныхУдалитьРегистрациюВсехОбъектовExtendedTooltip + 215 + Label + true + true + + Left + + + Form.Command.УдалитьРегистрациюВсехОбъектов + Auto + true + true + UserCmds + Auto + + + ДеревоМетаданныхУдалитьРегистрациюАвтоОбъектов + 44 + + <key>ru</key> + <value>Объектов выбранных типов с авторегистрацией</value> + + true + true + + true + + + ДеревоМетаданныхУдалитьРегистрациюАвтоОбъектовExtendedTooltip + 216 + Label + true + true + + Left + + + Form.Command.УдалитьРегистрациюАвтоОбъектов + Auto + true + true + UserCmds + Auto + + + ГруппаКомандУдалить + 186 + + ФормаУдалитьРегистрациюОдногоОбъекта + 187 + + <key>ru</key> + <value>Одиночного объекта</value> + + true + true + + true + + + ФормаУдалитьРегистрациюОдногоОбъектаExtendedTooltip + 218 + Label + true + true + + Left + + + Form.Command.УдалитьРегистрациюОдногоОбъекта + Auto + true + true + UserCmds + + StdPicture.DeleteDirectly + + Auto + + + ФормаУдалитьРегистрациюОтбор + 188 + + <key>ru</key> + <value>Объектов при помощи отбора</value> + + true + true + + true + + + ФормаУдалитьРегистрациюОтборExtendedTooltip + 219 + Label + true + true + + Left + + + Form.Command.УдалитьРегистрациюОтбор + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Отмена регистрации</value> + + + ru + Группа команд удалить + + + ГруппаКомандУдалитьExtendedTooltip + 217 + Label + true + true + + Left + + + + + + ДеревоМетаданныхГруппа4 + 61 + + ДеревоМетаданныхУдалитьРегистрациюРезультатаЗапроса + 62 + + <key>ru</key> + <value>Результатов запроса</value> + + true + true + + true + + + ДеревоМетаданныхУдалитьРегистрациюРезультатаЗапросаExtendedTooltip + 221 + Label + true + true + + Left + + + Form.Command.УдалитьРегистрациюРезультатаЗапроса + Auto + true + true + UserCmds + + Auto + + true + true + + true + + + <key>ru</key> + <value>Отмена регистрации результатов запроса</value> + + + ДеревоМетаданныхГруппа4ExtendedTooltip + 220 + Label + true + true + + Left + + + + + true + true + + true + + + <key>ru</key> + <value>Отменить регистрацию</value> + + + ru + Отменить регистрацию объектов выбранных типов + + + ДеревоМетаданныхГруппаУдалитьExtendedTooltip + 214 + Label + true + true + + Left + + + Popup + + + StdPicture.DeleteDirectly + + Auto + + + + ОбновитьВсеДанные + 97 + + <key>ru</key> + <value>Обновить</value> + + true + true + + true + + + ОбновитьВсеДанныеExtendedTooltip + 222 + Label + true + true + + Left + + + Form.Command.ОбновитьВсеДанные + PictureAndText + true + true + UserCmds + Auto + + + ФормаОткрытьФормуНастроек + 145 + + <key>ru</key> + <value>Настройки</value> + + true + true + + true + + + ФормаОткрытьФормуНастроекExtendedTooltip + 223 + Label + true + true + + Left + + + Form.Command.ОткрытьФормуНастроек + PictureAndText + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ФормаОткрытьФормуРегистрацииНаУзлах + 182 + + <key>ru</key> + <value>Регистрация объекта на всех узлах</value> + + true + true + + true + + + ФормаОткрытьФормуРегистрацииНаУзлахExtendedTooltip + 225 + Label + true + true + + Left + + + Form.Command.ОткрытьФормуРегистрацииНаУзлах + Picture + true + true + UserCmds + + StdPicture.ExchangePlan + + Auto + InAdditionalSubmenu + + + ФормаГруппаКнопокРИБ + 316 + + ПоказатьРезультатВыгрузки + 133 + true + true + + true + + + ПоказатьРезультатВыгрузкиExtendedTooltip + 224 + Label + true + true + + Left + + + Form.Command.ПоказатьРезультатВыгрузки + Auto + true + true + UserCmds + + Auto + + + ФормаЗарегистрироватьИОМИПредопределенные + 314 + true + true + + true + + + ФормаЗарегистрироватьИОМИПредопределенныеРасширеннаяПодсказка + 315 + Label + true + true + + Left + + + Form.Command.ЗарегистрироватьИОМИПредопределенные + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + true + true + + true + + + <key>ru</key> + <value>Форма группа кнопок РИБ</value> + + + ru + Группа кнопок РИБ + + + ФормаГруппаКнопокРИБРасширеннаяПодсказка + 317 + Label + true + true + + Left + + + + + true + true + + true + + + <key>ru</key> + <value>Командная панель </value> + + + ru + Общая командная панель + + + КоманднаяПанельОбщаяExtendedTooltip + 205 + Label + true + true + + Left + + + CommandBar + + Left + Form + + + + Группа5 + 96 + + ДеревоМетаданных + 6 + + <key>ru</key> + <value>Виды объектов регистрации</value> + + true + true + + true + + + ДеревоМетаданных + + None + Add + Change + Copy + Delete + EndEdit + HierarchicalList + List + MoveDown + MoveUp + SortListAsc + SortListDesc + Tree + + ДеревоМетаданныхГруппа1 + 9 + + ДеревоМетаданныхПометка + 16 + true + true + + true + + + ДеревоМетаданных.Пометка + + None + + OnChange + ДеревоМетаданныхПометкаПриИзменении + + + ДеревоМетаданныхПометкаExtendedTooltip + 244 + Label + true + true + + Left + + + + ДеревоМетаданныхПометкаКонтекстноеМеню + 17 + true + + CheckBoxField + true + Left + true + + true + + + + ДеревоМетаданныхНаименование + 10 + + <key>ru</key> + <value>Объект конфигурации</value> + + true + true + + true + + + ДеревоМетаданных.Наименование + + + ДеревоМетаданныхНаименованиеExtendedTooltip + 245 + Label + true + true + + Left + + + + ДеревоМетаданныхНаименованиеКонтекстноеМеню + 11 + true + + LabelField + true + EnterOnInput + true + Left + true + + 17 + true + true + + + true + true + + true + + + <key>ru</key> + <value>Объекты регистрации</value> + + true + + ДеревоМетаданныхГруппа1ExtendedTooltip + 243 + Label + true + true + + Left + + + ColumnGroup + + InCell + true + + + + ДеревоМетаданныхГруппа2 + 26 + + ДеревоМетаданныхАвторегистрация + 27 + + <key>ru</key> + <value>Авторегистрация</value> + + true + true + + + ДеревоМетаданных.Авторегистрация + + None + + ДеревоМетаданныхАвторегистрацияExtendedTooltip + 247 + Label + true + true + + Left + + + + ДеревоМетаданныхАвторегистрацияКонтекстноеМеню + 28 + true + + PictureField + true + Left + EnterOnInput + true + Left + true + + 2 + true + true + + + + 1 + + + + + ДеревоМетаданныхКоличествоИзмененийСтрокой + 29 + + <key>ru</key> + <value>Количество</value> + + true + true + + true + + + ДеревоМетаданных.КоличествоИзмененийСтрокой + + + ru + Зарегистрировано / не выгружено + + + ДеревоМетаданныхКоличествоИзмененийСтрокойExtendedTooltip + 248 + Label + true + true + + Left + + + + ДеревоМетаданныхКоличествоИзмененийСтрокойКонтекстноеМеню + 30 + true + + LabelField + true + Left + EnterOnInput + true + Left + true + + 10 + true + 1 + true + false + + + true + true + + true + + + <key>ru</key> + <value>Информация о регистрации</value> + + true + + ДеревоМетаданныхГруппа2ExtendedTooltip + 246 + Label + true + true + + Left + + + ColumnGroup + + InCell + true + + + + ДеревоМетаданныхКоманднаяПанель + 8 + Left + + + OnActivateRow + ДеревоМетаданныхПриАктивизацииСтроки + + + ДеревоМетаданныхСтрокаПоиска + 326 + + ДеревоМетаданныхСтрокаПоискаРасширеннаяПодсказка + 328 + Label + true + true + + Left + + + + ДеревоМетаданныхСтрокаПоискаКонтекстноеМеню + 327 + true + + ДеревоМетаданных + + true + + + + ДеревоМетаданныхСостояниеПросмотра + 329 + + ДеревоМетаданныхСостояниеПросмотраРасширеннаяПодсказка + 331 + Label + true + true + + Left + + + + ДеревоМетаданныхСостояниеПросмотраКонтекстноеМеню + 330 + true + + ViewStatusAddition + ДеревоМетаданных + + true + + + + ДеревоМетаданныхУправлениеПоиском + 332 + + ДеревоМетаданныхУправлениеПоискомРасширеннаяПодсказка + 334 + Label + true + true + + Left + + + + ДеревоМетаданныхУправлениеПоискомКонтекстноеМеню + 333 + true + + SearchControlAddition + ДеревоМетаданных + + true + + + + ДеревоМетаданныхExtendedTooltip + 242 + Label + true + true + + Left + + + + ДеревоМетаданныхКонтекстноеМеню + 7 + + ДеревоМетаданныхКонтекстноеМенюГруппа1 + 114 + + ДеревоМетаданныхКонтекстноеМенюДобавитьРегистрациюВсехОбъектов + 115 + + <key>ru</key> + <value>Зарегистрировать изменения всех объектов выбранных типов</value> + + true + true + + true + + + ДеревоМетаданныхКонтекстноеМенюДобавитьРегистрациюВсехОбъектовExtendedTooltip + 228 + Label + true + true + + Left + + + Form.Command.ДобавитьРегистрациюВсехОбъектов + Auto + true + true + UserCmds + + StdPicture.CreateListItem + + Auto + + + ДеревоМетаданныхКонтекстноеМенюДобавитьРегистрациюАвтоОбъектов + 116 + + <key>ru</key> + <value>Зарегистрировать изменения объектов выбранных типов с авторегистрацией</value> + + true + true + + true + + + ДеревоМетаданныхКонтекстноеМенюДобавитьРегистрациюАвтоОбъектовExtendedTooltip + 229 + Label + true + true + + Left + + + Form.Command.ДобавитьРегистрациюАвтоОбъектов + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Добавление по виду объектов</value> + + + ДеревоМетаданныхКонтекстноеМенюГруппа1ExtendedTooltip + 227 + Label + true + true + + Left + + + + + + ГруппаКомандДобавить1 + 190 + + ДеревоМетаданныхКонтекстноеМенюДобавитьРегистрациюОдногоОбъекта + 191 + + <key>ru</key> + <value>Зарегистрировать изменения одиночного объекта</value> + + true + true + + true + + + ДеревоМетаданныхКонтекстноеМенюДобавитьРегистрациюОдногоОбъектаExtendedTooltip + 231 + Label + true + true + + Left + + + Form.Command.ДобавитьРегистрациюОдногоОбъекта + Auto + true + true + UserCmds + + StdPicture.CreateListItem + + Auto + + + ДеревоМетаданныхКонтекстноеМенюДобавитьРегистрациюОтбор + 192 + + <key>ru</key> + <value>Зарегистрировать изменения объектов при помощи отбора</value> + + true + true + + true + + + ДеревоМетаданныхКонтекстноеМенюДобавитьРегистрациюОтборExtendedTooltip + 232 + Label + true + true + + Left + + + Form.Command.ДобавитьРегистрациюОтбор + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Добавление объектов</value> + + + ru + Группа команд добавить + + + ГруппаКомандДобавить1ExtendedTooltip + 230 + Label + true + true + + Left + + + + + + ДеревоМетаданныхКонтекстноеМенюГруппа2 + 142 + + ДеревоМетаданныхКонтекстноеМенюУдалитьРегистрациюВсехОбъектов + 143 + + <key>ru</key> + <value>Отменить регистрацию изменений всех объектов выбранных типов</value> + + true + true + + true + + + ДеревоМетаданныхКонтекстноеМенюУдалитьРегистрациюВсехОбъектовExtendedTooltip + 234 + Label + true + true + + Left + + + Form.Command.УдалитьРегистрациюВсехОбъектов + Auto + true + true + UserCmds + + StdPicture.DeleteDirectly + + Auto + + + ДеревоМетаданныхКонтекстноеМенюУдалитьРегистрациюАвтоОбъектов + 144 + + <key>ru</key> + <value>Отменить регистрацию изменений объектов выбранных типов с авторегистрацией</value> + + true + true + + true + + + ДеревоМетаданныхКонтекстноеМенюУдалитьРегистрациюАвтоОбъектовExtendedTooltip + 235 + Label + true + true + + Left + + + Form.Command.УдалитьРегистрациюАвтоОбъектов + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Отмена регистрации по виду объектов</value> + + + ДеревоМетаданныхКонтекстноеМенюГруппа2ExtendedTooltip + 233 + Label + true + true + + Left + + + + + + ГруппаКомандУдалить1 + 193 + + ДеревоМетаданныхКонтекстноеМенюУдалитьРегистрациюОдногоОбъекта + 194 + + <key>ru</key> + <value>Отменить регистрацию изменений одиночного объекта</value> + + true + true + + true + + + ДеревоМетаданныхКонтекстноеМенюУдалитьРегистрациюОдногоОбъектаExtendedTooltip + 237 + Label + true + true + + Left + + + Form.Command.УдалитьРегистрациюОдногоОбъекта + Auto + true + true + UserCmds + + StdPicture.DeleteDirectly + + Auto + + + ДеревоМетаданныхКонтекстноеМенюУдалитьРегистрациюОтбор + 195 + + <key>ru</key> + <value>Отменить регистрацию изменений объектов при помощи отбора</value> + + true + true + + true + + + ДеревоМетаданныхКонтекстноеМенюУдалитьРегистрациюОтборExtendedTooltip + 238 + Label + true + true + + Left + + + Form.Command.УдалитьРегистрациюОтбор + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Отмена регистрации</value> + + + ru + Группа команд удалить + + + ГруппаКомандУдалить1ExtendedTooltip + 236 + Label + true + true + + Left + + + + + + ДеревоМетаданныхКонтекстноеМенюГруппа3 + 149 + + ДеревоМетаданныхКонтекстноеМенюВывестиСписок + 150 + true + true + + true + + + ДеревоМетаданныхКонтекстноеМенюВывестиСписокExtendedTooltip + 240 + Label + true + true + + Left + + + Form.Item.ДеревоМетаданных.StandardCommand.OutputList + Auto + true + true + UserCmds + Auto + + + ДеревоМетаданныхКонтекстноеМенюКопироватьВБуферОбмена + 151 + true + true + + true + + + ДеревоМетаданныхКонтекстноеМенюКопироватьВБуферОбменаExtendedTooltip + 241 + Label + true + true + + Left + + + Form.Item.ДеревоМетаданных.StandardCommand.CopyToClipboard + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Системное меню</value> + + + ДеревоМетаданныхКонтекстноеМенюГруппа3ExtendedTooltip + 239 + Label + true + true + + Left + + + + + + ФормаОткрытьФормуРегистрацииНаУзлахКонтекст + 324 + + <key>ru</key> + <value>Регистрация объекта на всех узлах</value> + + true + true + + true + + + ФормаОткрытьФормуРегистрацииНаУзлахКонтекстРасширеннаяПодсказка + 325 + Label + true + true + + Left + + + Form.Command.ОткрытьФормуРегистрацииНаУзлах + Picture + true + true + UserCmds + + StdPicture.ExchangePlan + + Auto + InAdditionalSubmenu + + true + + Tree + 32 + true + true + true +
true
+ 1 + 1 + AutoUse + AutoUse + Auto + Auto + ExpandTopLevel + true + true + + ДеревоМетаданных.ИндексКартинки + + + None + None + None +
+ + ВариантыСпискаОбъектов + 45 + + СтраницаКонстанты + 49 + + ГруппаПользовательскихНастроекКонстанты + 318 + true + true + + true + + + <key>ru</key> + <value>Группа пользовательских настроек константы</value> + + + ru + Группа пользовательских настроек константы + + + ГруппаПользовательскихНастроекКонстантыРасширеннаяПодсказка + 319 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + СписокКонстант + 63 + + <key>ru</key> + <value>Список констант</value> + + true + true + + true + + + СписокКонстант + + None + + СписокКонстантНаименование + 66 + + <key>ru</key> + <value>Константа</value> + + true + true + + true + + + СписокКонстант.Наименование + + + СписокКонстантНаименованиеExtendedTooltip + 265 + Label + true + true + + Left + + + + СписокКонстантНаименованиеКонтекстноеМеню + 67 + true + + LabelField + Enter + true + Left + true + + true + true + true + + + + СписокКонстантГруппа1 + 148 + + СписокКонстантАвторегистрация + 146 + + <key>ru</key> + <value>Авторегистрация</value> + + true + true + + + СписокКонстант.ИндексКартинкиАвторегистрация + + None + + СписокКонстантАвторегистрацияExtendedTooltip + 267 + Label + true + true + + Left + + + + СписокКонстантАвторегистрацияКонтекстноеМеню + 147 + true + + PictureField + true + true + Left + true + + true + true + true + true + + + + 1 + + + + + СписокКонстантНомерСообщения + 68 + + <key>ru</key> + <value>№ отпр.</value> + + true + true + + true + + + СписокКонстант.НомерСообщения + + + СписокКонстантНомерСообщенияExtendedTooltip + 268 + Label + true + true + + Left + + + + СписокКонстантНомерСообщенияКонтекстноеМеню + 69 + true + + LabelField + Left + true + Left + true + + 7 + true + true + false + + + true + true + + true + + + <key>ru</key> + <value>Информация о регистрации</value> + + + СписокКонстантГруппа1ExtendedTooltip + 266 + Label + true + true + + Left + + + ColumnGroup + + InCell + true + + + + СписокКонстантКоманднаяПанель + 65 + Left + + + ChoiceProcessing + СписокКонстантОбработкаВыбора + + + СписокКонстантСтрокаПоиска + 335 + + СписокКонстантСтрокаПоискаРасширеннаяПодсказка + 337 + Label + true + true + + Left + + + + СписокКонстантСтрокаПоискаКонтекстноеМеню + 336 + true + + СписокКонстант + + true + + + + СписокКонстантСостояниеПросмотра + 338 + + СписокКонстантСостояниеПросмотраРасширеннаяПодсказка + 340 + Label + true + true + + Left + + + + СписокКонстантСостояниеПросмотраКонтекстноеМеню + 339 + true + + ViewStatusAddition + СписокКонстант + + true + + + + СписокКонстантУправлениеПоиском + 341 + + СписокКонстантУправлениеПоискомРасширеннаяПодсказка + 343 + Label + true + true + + Left + + + + СписокКонстантУправлениеПоискомКонтекстноеМеню + 342 + true + + SearchControlAddition + СписокКонстант + + true + + + + СписокКонстантExtendedTooltip + 264 + Label + true + true + + Left + + + + СписокКонстантКонтекстноеМеню + 64 + + СписокКонстантКонтекстноеМенюГруппа1 + 101 + + СписокКонстантКонтекстноеМенюДобавитьРегистрациюКонстанты + 98 + + <key>ru</key> + <value>Зарегистрировать изменение константы</value> + + true + true + + true + + + СписокКонстантКонтекстноеМенюДобавитьРегистрациюКонстантыExtendedTooltip + 252 + Label + true + true + + Left + + + Form.Command.ДобавитьРегистрациюКонстанты + Auto + true + true + UserCmds + + StdPicture.CreateListItem + + Auto + + + СписокКонстантКонтекстноеМенюУдалитьРегистрациюКонстанты + 99 + + <key>ru</key> + <value>Отменить регистрацию изменений константы</value> + + true + true + + true + + + СписокКонстантКонтекстноеМенюУдалитьРегистрациюКонстантыExtendedTooltip + 253 + Label + true + true + + Left + + + Form.Command.УдалитьРегистрациюКонстанты + Auto + true + true + UserCmds + + StdPicture.DeleteDirectly + + Auto + + true + true + + true + + true + + СписокКонстантКонтекстноеМенюГруппа1ExtendedTooltip + 251 + Label + true + true + + Left + + + + + + СписокКонстантКонтекстноеМенюГруппа3 + 177 + + СписокКонстантКонтекстноеМенюПоказатьРезультатВыгрузки + 100 + + <key>ru</key> + <value>Результат стандартной выгрузки (РИБ)</value> + + true + true + + true + + + СписокКонстантКонтекстноеМенюПоказатьРезультатВыгрузкиExtendedTooltip + 255 + Label + true + true + + Left + + + Form.Command.ПоказатьРезультатВыгрузки + Auto + true + true + UserCmds + + Auto + + + СписокКонстантКонтекстноеМенюОткрытьФормуРегистрацииНаУзлах + 178 + true + true + + true + + + СписокКонстантКонтекстноеМенюОткрытьФормуРегистрацииНаУзлахExtendedTooltip + 256 + Label + true + true + + Left + + + Form.Command.ОткрытьФормуРегистрацииНаУзлах + Auto + true + true + UserCmds + + StdPicture.ExchangePlan + + Auto + + + СписокКонстантКонтекстноеМенюРедактироватьНомерСообщенияОбъекта + 197 + true + true + + true + + + СписокКонстантКонтекстноеМенюРедактироватьНомерСообщенияОбъектаExtendedTooltip + 257 + Label + true + true + + Left + + + Form.Command.РедактироватьНомерСообщенияОбъекта + Auto + true + true + UserCmds + Auto + + true + true + + true + + + СписокКонстантКонтекстноеМенюГруппа3ExtendedTooltip + 254 + Label + true + true + + Left + + + + + + СписокКонстантКонтекстноеМенюГруппа2 + 152 + + СписокКонстантКонтекстноеМенюНайти + 153 + true + true + + true + + + СписокКонстантКонтекстноеМенюНайтиExtendedTooltip + 259 + Label + true + true + + Left + + + Form.Item.СписокКонстант.StandardCommand.Find + Auto + true + true + UserCmds + Auto + + + СписокКонстантКонтекстноеМенюОтменитьПоиск + 154 + true + true + + true + + + СписокКонстантКонтекстноеМенюОтменитьПоискExtendedTooltip + 260 + Label + true + true + + Left + + + Form.Item.СписокКонстант.StandardCommand.CancelSearch + Auto + true + true + UserCmds + Auto + + + СписокКонстантКонтекстноеМенюНастройкаСписка + 155 + true + true + + true + + + СписокКонстантКонтекстноеМенюНастройкаСпискаExtendedTooltip + 261 + Label + true + true + + Left + + + Form.Item.СписокКонстант.StandardCommand.ListSettings + Auto + true + true + UserCmds + Auto + + + СписокКонстантКонтекстноеМенюВывестиСписок + 156 + true + true + + true + + + СписокКонстантКонтекстноеМенюВывестиСписокExtendedTooltip + 262 + Label + true + true + + Left + + + Form.Item.СписокКонстант.StandardCommand.OutputList + Auto + true + true + UserCmds + Auto + + + СписокКонстантКонтекстноеМенюОбновить + 157 + true + true + + true + + + СписокКонстантКонтекстноеМенюОбновитьExtendedTooltip + 263 + Label + true + true + + Left + + + Form.Item.СписокКонстант.StandardCommand.Refresh + Auto + true + true + UserCmds + Auto + + true + true + + true + + + СписокКонстантКонтекстноеМенюГруппа2ExtendedTooltip + 258 + Label + true + true + + Left + + + + + + true + true + true + MultiRow +
true
+ 1 + 1 + AutoUse + AutoUse + true + Auto + true + true + true + + СписокКонстант.ИндексКартинки + + + None + None + None + + 60 + + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + true + true + ГруппаПользовательскихНастроекКонстанты + +
+ true + true + + true + + + <key>ru</key> + <value>Константы</value> + + + ru + Страница константы + + + СтраницаКонстантыExtendedTooltip + 250 + Label + true + true + + Left + + + Page + + Vertical + true + +
+ + СтраницаСписокСсылок + 48 + + ГруппаПользовательскихНастроекСсылки + 320 + true + true + + true + + + <key>ru</key> + <value>Группа пользовательских настроек ссылки</value> + + + ru + Группа пользовательских настроек константы + + + ГруппаПользовательскихНастроекСсылкиРасширеннаяПодсказка + 321 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + СписокСсылок + 18 + + <key>ru</key> + <value>Список ссылок</value> + + true + true + + true + + + СписокСсылок + + + СписокСсылокСсылкаПредставление + 21 + true + true + + true + + + СписокСсылок.Ссылка + + + СписокСсылокСсылкаПредставлениеExtendedTooltip + 288 + Label + true + true + + Left + + + + СписокСсылокСсылкаПредставлениеКонтекстноеМеню + 22 + true + + LabelField + Enter + true + Left + true + + true + true + true + + + + СписокСсылокНомерСообщения + 52 + + <key>ru</key> + <value>№ отпр.</value> + + true + true + + true + + + СписокСсылок.НомерСообщения + + + СписокСсылокНомерСообщенияExtendedTooltip + 289 + Label + true + true + + Left + + + + СписокСсылокНомерСообщенияКонтекстноеМеню + 53 + true + + LabelField + Enter + true + Left + true + + 7 + true + true + false + + + + СписокСсылокКоманднаяПанель + 20 + Left + + + ChoiceProcessing + СписокСсылокОбработкаВыбора + + + СписокСсылокСтрокаПоиска + 344 + + СписокСсылокСтрокаПоискаРасширеннаяПодсказка + 346 + Label + true + true + + Left + + + + СписокСсылокСтрокаПоискаКонтекстноеМеню + 345 + true + + СписокСсылок + + true + + + + СписокСсылокСостояниеПросмотра + 347 + + СписокСсылокСостояниеПросмотраРасширеннаяПодсказка + 349 + Label + true + true + + Left + + + + СписокСсылокСостояниеПросмотраКонтекстноеМеню + 348 + true + + ViewStatusAddition + СписокСсылок + + true + + + + СписокСсылокУправлениеПоиском + 350 + + СписокСсылокУправлениеПоискомРасширеннаяПодсказка + 352 + Label + true + true + + Left + + + + СписокСсылокУправлениеПоискомКонтекстноеМеню + 351 + true + + SearchControlAddition + СписокСсылок + + true + + + + СписокСсылокExtendedTooltip + 287 + Label + true + true + + Left + + + + СписокСсылокКонтекстноеМеню + 19 + + СписокСсылокКонтекстноеМенюГруппа1 + 102 + + СписокСсылокКонтекстноеМенюДобавитьРегистрациюСсылкиПодбор + 134 + + <key>ru</key> + <value>Зарегистрировать изменение объекта</value> + + true + true + + true + + + СписокСсылокКонтекстноеМенюДобавитьРегистрациюСсылкиПодборExtendedTooltip + 271 + Label + true + true + + Left + + + Form.Command.ДобавитьРегистрациюСсылкиПодбор + Auto + true + true + UserCmds + + StdPicture.CreateListItem + + Auto + + + СписокСсылокКонтекстноеМенюДобавитьРегистрациюСсылкиОтбор + 135 + + <key>ru</key> + <value>Зарегистрировать изменения объектов при помощи отбора</value> + + true + true + + true + + + СписокСсылокКонтекстноеМенюДобавитьРегистрациюСсылкиОтборExtendedTooltip + 272 + Label + true + true + + Left + + + Form.Command.ДобавитьРегистрациюСсылкиОтбор + Auto + true + true + UserCmds + Auto + + + СписокСсылокКонтекстноеМенюДобавитьРегистрациюУдаленияОбъекта + 196 + + <key>ru</key> + <value>Зарегистрировать удаление объекта</value> + + true + true + + true + + + СписокСсылокКонтекстноеМенюДобавитьРегистрациюУдаленияОбъектаExtendedTooltip + 273 + Label + true + true + + Left + + + Form.Command.ДобавитьРегистрациюУдаленияОбъекта + Auto + true + true + UserCmds + Auto + + true + true + + true + + true + + СписокСсылокКонтекстноеМенюГруппа1ExtendedTooltip + 270 + Label + true + true + + Left + + + + + + СписокСсылокКонтекстноеМенюГруппа3 + 158 + + СписокСсылокКонтекстноеМенюУдалитьРегистрациюСсылки + 105 + + <key>ru</key> + <value>Отменить регистрацию изменений объекта</value> + + true + true + + true + + + СписокСсылокКонтекстноеМенюУдалитьРегистрациюСсылкиExtendedTooltip + 275 + Label + true + true + + Left + + + Form.Command.УдалитьРегистрациюСсылки + Auto + true + true + UserCmds + + StdPicture.DeleteDirectly + + Auto + + + СписокСсылокКонтекстноеМенюУдалитьРегистрациюСсылкиОтбор + 189 + + <key>ru</key> + <value>Отменить регистрацию изменения объектов при помощи отбора</value> + + true + true + + true + + + СписокСсылокКонтекстноеМенюУдалитьРегистрациюСсылкиОтборExtendedTooltip + 276 + Label + true + true + + Left + + + Form.Command.УдалитьРегистрациюСсылкиОтбор + Auto + true + true + UserCmds + Auto + + true + true + + true + + + СписокСсылокКонтекстноеМенюГруппа3ExtendedTooltip + 274 + Label + true + true + + Left + + + + + + СписокСсылокКонтекстноеМенюГруппа4 + 181 + + СписокСсылокКонтекстноеМенюПоказатьРезультатВыгрузки + 106 + + <key>ru</key> + <value>Показать результат выгрузки</value> + + true + true + + true + + + СписокСсылокКонтекстноеМенюПоказатьРезультатВыгрузкиExtendedTooltip + 278 + Label + true + true + + Left + + + Form.Command.ПоказатьРезультатВыгрузки + Auto + true + true + UserCmds + + Auto + + + СписокСсылокКонтекстноеМенюОткрытьФормуРегистрацииНаУзлах + 137 + + <key>ru</key> + <value>Регистрация на других узлах</value> + + true + true + + true + + + СписокСсылокКонтекстноеМенюОткрытьФормуРегистрацииНаУзлахExtendedTooltip + 279 + Label + true + true + + Left + + + Form.Command.ОткрытьФормуРегистрацииНаУзлах + Auto + true + true + UserCmds + + StdPicture.ExchangePlan + + Auto + + + СписокСсылокКонтекстноеМенюРедактироватьНомерСообщенияОбъекта + 198 + true + true + + true + + + СписокСсылокКонтекстноеМенюРедактироватьНомерСообщенияОбъектаExtendedTooltip + 280 + Label + true + true + + Left + + + Form.Command.РедактироватьНомерСообщенияОбъекта + Auto + true + true + UserCmds + Auto + + true + true + + true + + + СписокСсылокКонтекстноеМенюГруппа4ExtendedTooltip + 277 + Label + true + true + + Left + + + + + + СписокСсылокКонтекстноеМенюГруппа2 + 136 + + СписокСсылокКонтекстноеМенюНайти + 159 + true + true + + true + + + СписокСсылокКонтекстноеМенюНайтиExtendedTooltip + 282 + Label + true + true + + Left + + + Form.Item.СписокСсылок.StandardCommand.Find + Auto + true + true + UserCmds + Auto + + + СписокСсылокКонтекстноеМенюОтменитьПоиск + 160 + true + true + + true + + + СписокСсылокКонтекстноеМенюОтменитьПоискExtendedTooltip + 283 + Label + true + true + + Left + + + Form.Item.СписокСсылок.StandardCommand.CancelSearch + Auto + true + true + UserCmds + Auto + + + СписокСсылокКонтекстноеМенюНастройкаСписка + 161 + true + true + + true + + + СписокСсылокКонтекстноеМенюНастройкаСпискаExtendedTooltip + 284 + Label + true + true + + Left + + + Form.Item.СписокСсылок.StandardCommand.ListSettings + Auto + true + true + UserCmds + Auto + + + СписокСсылокКонтекстноеМенюВывестиСписок + 162 + true + true + + true + + + СписокСсылокКонтекстноеМенюВывестиСписокExtendedTooltip + 285 + Label + true + true + + Left + + + Form.Item.СписокСсылок.StandardCommand.OutputList + Auto + true + true + UserCmds + Auto + + + СписокСсылокКонтекстноеМенюОбновить + 163 + true + true + + true + + + СписокСсылокКонтекстноеМенюОбновитьExtendedTooltip + 286 + Label + true + true + + Left + + + Form.Item.СписокСсылок.StandardCommand.Refresh + Auto + true + true + UserCmds + Auto + + true + true + + true + + true + + СписокСсылокКонтекстноеМенюГруппа2ExtendedTooltip + 281 + Label + true + true + + Left + + + + + + true + true + true + true + MultiRow +
true
+ 1 + 1 + AutoUse + AutoUse + true + true + true + Auto + true + true + true + + СписокСсылок.DefaultPicture + + None + None + None + + 60 + + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + true + + true + true + ГруппаПользовательскихНастроекСсылки + +
+ true + true + + true + + + <key>ru</key> + <value>Ссылки</value> + + + ru + Страница списка ссылок + + + СтраницаСписокСсылокExtendedTooltip + 269 + Label + true + true + + Left + + + Page + + Vertical + true + +
+ + СтраницаНаборЗаписей + 50 + + ГруппаПользовательскихНастроекНаборЗаписей + 322 + true + true + + true + + + <key>ru</key> + <value>Группа пользовательских настроек набор записей</value> + + + ru + Группа пользовательских настроек константы + + + ГруппаПользовательскихНастроекНаборЗаписейРасширеннаяПодсказка + 323 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + СписокНаборовЗаписей + 78 + + <key>ru</key> + <value>Набор записей</value> + + true + true + + true + + + СписокНаборовЗаписей + + None + + СписокНаборовЗаписейГруппаИзмерений + 86 + true + true + + true + + + <key>ru</key> + <value>Измерения</value> + + + ru + Измерения набора записей + + + СписокНаборовЗаписейГруппаИзмеренийExtendedTooltip + 307 + Label + true + true + + Left + + + ColumnGroup + + InCell + true + + + + СписокНаборовЗаписейНомерСообщения + 83 + + <key>ru</key> + <value>№ отпр.</value> + + true + true + + true + + + СписокНаборовЗаписей.НомерСообщения + + + СписокНаборовЗаписейНомерСообщенияExtendedTooltip + 308 + Label + true + true + + Left + + + + СписокНаборовЗаписейНомерСообщенияКонтекстноеМеню + 84 + true + + LabelField + Enter + true + Left + true + + 7 + true + true + false + + + + СписокНаборовЗаписейКоманднаяПанель + 80 + Left + + + Selection + СписокНаборовЗаписейВыбор + + + ChoiceProcessing + СписокНаборовЗаписейОбработкаВыбора + + + СписокНаборовЗаписейСтрокаПоиска + 353 + + СписокНаборовЗаписейСтрокаПоискаРасширеннаяПодсказка + 355 + Label + true + true + + Left + + + + СписокНаборовЗаписейСтрокаПоискаКонтекстноеМеню + 354 + true + + СписокНаборовЗаписей + + true + + + + СписокНаборовЗаписейСостояниеПросмотра + 356 + + СписокНаборовЗаписейСостояниеПросмотраРасширеннаяПодсказка + 358 + Label + true + true + + Left + + + + СписокНаборовЗаписейСостояниеПросмотраКонтекстноеМеню + 357 + true + + ViewStatusAddition + СписокНаборовЗаписей + + true + + + + СписокНаборовЗаписейУправлениеПоиском + 359 + + СписокНаборовЗаписейУправлениеПоискомРасширеннаяПодсказка + 361 + Label + true + true + + Left + + + + СписокНаборовЗаписейУправлениеПоискомКонтекстноеМеню + 360 + true + + SearchControlAddition + СписокНаборовЗаписей + + true + + + + СписокНаборовЗаписейExtendedTooltip + 306 + Label + true + true + + Left + + + + СписокНаборовЗаписейКонтекстноеМеню + 79 + + СписокНаборовЗаписейКонтекстноеМенюГруппа1 + 164 + + СписокНаборовЗаписейКонтекстноеМенюДобавитьРегистрациюНабораЗаписейОтбор + 138 + + <key>ru</key> + <value>Зарегистрировать изменения набора записей</value> + + true + true + + true + + + СписокНаборовЗаписейКонтекстноеМенюДобавитьРегистрациюНабораЗаписейОтборExtendedTooltip + 292 + Label + true + true + + Left + + + Form.Command.ДобавитьРегистрациюНабораЗаписейОтбор + Auto + true + true + UserCmds + + StdPicture.CreateListItem + + Auto + + true + true + + true + + + СписокНаборовЗаписейКонтекстноеМенюГруппа1ExtendedTooltip + 291 + Label + true + true + + Left + + + + + + СписокНаборовЗаписейКонтекстноеМенюГруппа2 + 165 + + СписокНаборовЗаписейКонтекстноеМенюУдалитьРегистрациюНабораЗаписей + 139 + + <key>ru</key> + <value>Отменить регистрацию изменений текущей строки</value> + + true + true + + true + + + СписокНаборовЗаписейКонтекстноеМенюУдалитьРегистрациюНабораЗаписейExtendedTooltip + 294 + Label + true + true + + Left + + + Form.Command.УдалитьРегистрациюНабораЗаписей + Auto + true + true + UserCmds + + StdPicture.DeleteDirectly + + Auto + + + СписокНаборовЗаписейКонтекстноеМенюУдалитьРегистрациюНабораЗаписейОтбор + 140 + + <key>ru</key> + <value>Отменить регистрацию изменений при помощи отбора</value> + + true + true + + true + + + СписокНаборовЗаписейКонтекстноеМенюУдалитьРегистрациюНабораЗаписейОтборExtendedTooltip + 295 + Label + true + true + + Left + + + Form.Command.УдалитьРегистрациюНабораЗаписейОтбор + Auto + true + true + UserCmds + Auto + + true + true + + true + + + СписокНаборовЗаписейКонтекстноеМенюГруппа2ExtendedTooltip + 293 + Label + true + true + + Left + + + + + + СписокНаборовЗаписейКонтекстноеМенюГруппа4 + 179 + + СписокНаборовЗаписейКонтекстноеМенюПоказатьРезультатВыгрузки + 141 + + <key>ru</key> + <value>Показать результат выгрузки</value> + + true + true + + true + + + СписокНаборовЗаписейКонтекстноеМенюПоказатьРезультатВыгрузкиExtendedTooltip + 297 + Label + true + true + + Left + + + Form.Command.ПоказатьРезультатВыгрузки + Auto + true + true + UserCmds + + Auto + + + СписокНаборовЗаписейКонтекстноеМенюОткрытьФормуРегистрацииНаУзлах + 180 + true + true + + true + + + СписокНаборовЗаписейКонтекстноеМенюОткрытьФормуРегистрацииНаУзлахExtendedTooltip + 298 + Label + true + true + + Left + + + Form.Command.ОткрытьФормуРегистрацииНаУзлах + Auto + true + true + UserCmds + + StdPicture.ExchangePlan + + Auto + + + СписокНаборовЗаписейКонтекстноеМенюРедактироватьНомерСообщенияОбъекта + 199 + true + true + + true + + + СписокНаборовЗаписейКонтекстноеМенюРедактироватьНомерСообщенияОбъектаExtendedTooltip + 299 + Label + true + true + + Left + + + Form.Command.РедактироватьНомерСообщенияОбъекта + Auto + true + true + UserCmds + Auto + + true + true + + true + + + СписокНаборовЗаписейКонтекстноеМенюГруппа4ExtendedTooltip + 296 + Label + true + true + + Left + + + + + + СписокНаборовЗаписейКонтекстноеМенюГруппа3 + 166 + + СписокНаборовЗаписейКонтекстноеМенюНайти + 167 + true + true + + true + + + СписокНаборовЗаписейКонтекстноеМенюНайтиExtendedTooltip + 301 + Label + true + true + + Left + + + Form.Item.СписокНаборовЗаписей.StandardCommand.Find + Auto + true + true + UserCmds + Auto + + + СписокНаборовЗаписейКонтекстноеМенюОбновить + 168 + true + true + + true + + + СписокНаборовЗаписейКонтекстноеМенюОбновитьExtendedTooltip + 302 + Label + true + true + + Left + + + Form.Item.СписокНаборовЗаписей.StandardCommand.Refresh + Auto + true + true + UserCmds + Auto + + + СписокНаборовЗаписейКонтекстноеМенюОтменитьПоиск + 169 + true + true + + true + + + СписокНаборовЗаписейКонтекстноеМенюОтменитьПоискExtendedTooltip + 303 + Label + true + true + + Left + + + Form.Item.СписокНаборовЗаписей.StandardCommand.CancelSearch + Auto + true + true + UserCmds + Auto + + + СписокНаборовЗаписейКонтекстноеМенюНастройкаСписка + 170 + true + true + + true + + + СписокНаборовЗаписейКонтекстноеМенюНастройкаСпискаExtendedTooltip + 304 + Label + true + true + + Left + + + Form.Item.СписокНаборовЗаписей.StandardCommand.ListSettings + Auto + true + true + UserCmds + Auto + + + СписокНаборовЗаписейКонтекстноеМенюВывестиСписок + 171 + true + true + + true + + + СписокНаборовЗаписейКонтекстноеМенюВывестиСписокExtendedTooltip + 305 + Label + true + true + + Left + + + Form.Item.СписокНаборовЗаписей.StandardCommand.OutputList + Auto + true + true + UserCmds + Auto + + true + true + + true + + + СписокНаборовЗаписейКонтекстноеМенюГруппа3ExtendedTooltip + 300 + Label + true + true + + Left + + + + + + HierarchicalList + true + true + true + true + true + AfterCurrentRow + MultiRow +
true
+ 1 + 1 + AutoUse + AutoUse + true + true + Auto + true + true + true + None + None + None + + 60 + + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + true + + true + true + ГруппаПользовательскихНастроекНаборЗаписей + +
+ true + true + + true + + + <key>ru</key> + <value>Наборы записей</value> + + + ru + Страница набора записей + + + СтраницаНаборЗаписейExtendedTooltip + 290 + Label + true + true + + Left + + + Page + + Vertical + true + +
+ + СтраницаПустая + 74 + + Группа4 + 77 + + ДекорацияПустаяСтраница + 75 + true + true + + true + + + ДекорацияПустаяСтраницаExtendedTooltip + 311 + Label + true + true + + Left + + + + ДекорацияПустаяСтраницаКонтекстноеМеню + 76 + true + + Label + true + true + true + true + + Left + Top + + + true + true + + true + + + <key>ru</key> + <value>Описание</value> + + true + + Группа4ExtendedTooltip + 310 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + NormalSeparation + true + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Итоги по виду объекта</value> + + + ru + Страница итогов + + true + + СтраницаПустаяExtendedTooltip + 309 + Label + true + true + + Left + + + Page + + Vertical + true + + + true + true + + true + + + <key>ru</key> + <value>Регистрация объектов</value> + + + ru + Варианты списка объектов + + + ВариантыСпискаОбъектовExtendedTooltip + 249 + Label + true + true + + Left + + + Pages + + + OnCurrentPageChange + ВариантыСпискаОбъектовПриСменеСтраницы + + Auto + +
+ true + true + + true + + + <key>ru</key> + <value>Регистрируемые объекты</value> + + 10 + + Группа5ExtendedTooltip + 226 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + +
+ true + true + + true + + + <key>ru</key> + <value>Данные регистрации</value> + + true + true + + Группа1ExtendedTooltip + 204 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + +
+ + ГруппаСкрытыхДанных + 174 + + СкрытаяКартинкаИнформация32 + 175 + + <key>ru</key> + <value>Скрытая картинка информация32</value> + + true + true + + true + + + СкрытаяКартинкаИнформация32ExtendedTooltip + 313 + Label + true + true + + Left + + + + СкрытаяКартинкаИнформация32КонтекстноеМеню + 176 + true + + true + true + + + + + false + + true + + + <key>ru</key> + <value>Группа скрытых данных</value> + + + ru + Группа скрытых данных + + true + + ГруппаСкрытыхДанныхExtendedTooltip + 312 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + true + Auto + Auto + + + None + + ФормаКоманднаяПанель + -1 + Left + true + + + OnSaveDataInSettingsAtServer + ПриСохраненииДанныхВНастройкахНаСервере + + + ChoiceProcessing + ОбработкаВыбора + + + NotificationProcessing + ОбработкаОповещения + + + OnLoadDataFromSettingsAtServer + ПриЗагрузкеДанныхИзНастроекНаСервере + + + OnCreateAtServer + ПриСозданииНаСервере + + + OnClose + ПриЗакрытии + + Use + UseList + true + true + Vertical + true + true + true + UseIfNecessary + true + true + + Объект + 1 + + DataProcessorObject.РегистрацияИзмененийДляОбменаДанными + + + true + + + true + +
true
+
+ + УзелОбменаСсылка + + <key>ru</key> + <value>Узел обмена</value> + + 2 + + ExchangePlanRef + + + true + + + true + + + УзелОбменаСсылка + + + + ДеревоМетаданных + + <key>ru</key> + <value>Метаданные</value> + + 3 + + ValueTree + + + true + + + true + + + Наименование + + <key>ru</key> + <value>Наименование</value> + + 1 + + String + + + + true + + + true + + + + МетаПолноеИмя + + <key>ru</key> + <value>Мета полное имя</value> + + 2 + + String + + + + true + + + true + + + + ИндексКартинки + + <key>ru</key> + <value>Индекс картинки</value> + + 3 + + Number + + 10 + + + + true + + + true + + + + Пометка + + <key>ru</key> + <value>Пометка</value> + + 4 + + Number + + 10 + + + + true + + + true + + + + Авторегистрация + + <key>ru</key> + <value>Авторегистрация</value> + + 5 + + Number + + 1 + + + + true + + + true + + + + КоличествоИзменений + + <key>ru</key> + <value>Количество изменений</value> + + 6 + + Number + + 10 + + + + true + + + true + + + + КоличествоВыгруженных + + <key>ru</key> + <value>Количество выгруженных</value> + + 7 + + Number + + 10 + + + + true + + + true + + + + КоличествоНевыгруженных + + <key>ru</key> + <value>Количество невыгруженных</value> + + 8 + + Number + + 10 + + + + true + + + true + + + + КоличествоИзмененийСтрокой + + <key>ru</key> + <value>Количество изменений строкой</value> + + 9 + + String + + + + true + + + true + + + + + СписокСсылок + + <key>ru</key> + <value>Список ссылок</value> + + 4 + + DynamicList + + + true + + + true + + + СписокСсылок.ИндексКартинки + + + СписокСсылок.СсылкаПредставление + + + СписокСсылок.Узел + + + СписокСсылок.НеВыгружалось + + + СписокСсылок.НомерСообщения + + + СписокСсылок.Ссылка + + + ВЫБРАТЬ + NULL КАК Ссылка, + NULL КАК НомерСообщения, + ЛОЖЬ КАК НеВыгружалось + true + true + true + true + + + + СписокКонстант + + <key>ru</key> + <value>Список констант</value> + + 5 + + DynamicList + + + true + + + true + + + СписокКонстант.ИндексКартинки + + + СписокКонстант.ИндексКартинкиАвторегистрация + + + СписокКонстант.Зарегистрировано + + + СписокКонстант.МетаПолноеИмя + + + СписокКонстант.Наименование + + + СписокКонстант.НеВыгружалось + + + СписокКонстант.НомерСообщения + + + ВЫБРАТЬ + NULL КАК Наименование, + NULL КАК МетаПолноеИмя, + NULL КАК НомерСообщения, + ЛОЖЬ КАК НеВыгружалось, + ЛОЖЬ КАК Зарегистрировано + true + true + true + true + + + + СтруктураИменМетаданных + + <key>ru</key> + <value>Структура имен метаданных</value> + + 6 + + + true + + + true + + + + СтруктураПредставленийМетаданных + + <key>ru</key> + <value>Структура представлений метаданных</value> + + 7 + + + true + + + true + + + + СписокНаборовЗаписей + + <key>ru</key> + <value>Список наборов записей</value> + + 8 + + DynamicList + + + true + + + true + + + СписокНаборовЗаписей.НеВыгружалось + + + СписокНаборовЗаписей.НомерСообщения + + + ВЫБРАТЬ + NULL КАК НомерСообщения, + ЛОЖЬ КАК НеВыгружалось + true + true + true + true + + + + СписокНаборовЗаписейИмяТаблицы + + <key>ru</key> + <value>Список наборов записей имя таблицы</value> + + 9 + + String + + + + true + + + true + + + + СтруктураАвторегистрацииМетаданных + + <key>ru</key> + <value>Структура авторегистрации метаданных</value> + + 11 + + + true + + + true + + + + ВариантОтбораПоНомеруСообщения + + <key>ru</key> + <value>Вариант отбора по номеру сообщения</value> + + 12 + + Number + + 10 + + + + true + + + true + + + ВариантОтбораПоНомеруСообщения + + + + ПараметрОбъектРегистрации + + <key>ru</key> + <value>Параметр объект регистрации</value> + + 10 + + + true + + + true + + + + ПараметрТаблицаРегистрации + + <key>ru</key> + <value>Параметр таблица регистрации</value> + + 13 + + + true + + + true + + + + ЗапрещеноВыбиратьУзелОбмена + + <key>ru</key> + <value>Запрещено выбирать узел обмена</value> + + 14 + + Boolean + + + true + + + true + + + + ИменаСкрываемыхМетаданных + + <key>ru</key> + <value>Имена скрываемых метаданных</value> + + 15 + + ValueList + + + true + + + true + + + + + + + ДобавитьРегистрациюСсылки + + <key>ru</key> + <value>Добавить регистрацию</value> + + 1 + + ru + Добавить регистрацию + + + true + + + StdPicture.CreateListItem + + + + ДобавитьРегистрациюСсылки + + + DontUse + + + УдалитьРегистрациюСсылки + + <key>ru</key> + <value>Удалить</value> + + 2 + + ru + Удалить регистрацию ссылки + + + true + + + + УдалитьРегистрациюСсылки + + + DontUse + + + ОбновитьВсеДанные + + <key>ru</key> + <value>Обновить все данные</value> + + 3 + + ru + Обновить все данные + + + true + + + StdPicture.Refresh + + + + ОбновитьВсеДанные + + + DontUse + + + ДобавитьРегистрациюВсехОбъектов + + <key>ru</key> + <value>Зарегистрировать все объекты выбранных типов</value> + + 4 + + ru + Зарегистрировать все объекты выбранных типов + + + true + + + + ДобавитьРегистрациюВсехОбъектов + + + DontUse + + + ДобавитьРегистрациюАвтоОбъектов + + <key>ru</key> + <value>Зарегистрировать только авторегистрируемые объекты выбранных типов</value> + + 5 + + ru + Зарегистрировать только авторегистрируемые объекты выбранных типов + + + true + + + + ДобавитьРегистрациюАвтоОбъектов + + + DontUse + + + УдалитьРегистрациюВсехОбъектов + + <key>ru</key> + <value>Удалить регистрацию всех объектов выбранных типов</value> + + 6 + + ru + Удалить регистрацию всех объектов + + + true + + + + УдалитьРегистрациюВсехОбъектов + + + DontUse + + + УдалитьРегистрациюАвтоОбъектов + + <key>ru</key> + <value>Удалить регистрацию только авторегиструемых объектов выбранных типов</value> + + 7 + + ru + Удалить регистрацию авто объектов + + + true + + + + УдалитьРегистрациюАвтоОбъектов + + + DontUse + + + ДобавитьРегистрациюСсылкиПодбор + + <key>ru</key> + <value>Добавить регистрацию результата подбора</value> + + 8 + + ru + Добавить регистрацию результата подбора + + + true + + + + ДобавитьРегистрациюСсылкиПодбор + + + DontUse + + + ДобавитьРегистрациюРезультатаЗапроса + + <key>ru</key> + <value>Добавить по результату запроса</value> + + 9 + + ru + Добавить по результату запроса + + + true + + + + ДобавитьРегистрациюРезультатаЗапроса + + + DontUse + + + УдалитьРегистрациюРезультатаЗапроса + + <key>ru</key> + <value>Удалить по результату запроса</value> + + 10 + + ru + Удалить по результату запроса + + + true + + + + УдалитьРегистрациюРезультатаЗапроса + + + DontUse + + + ДобавитьРегистрациюКонстанты + + <key>ru</key> + <value>Добавить регистрацию константы</value> + + 11 + + ru + Добавить регистрацию константы + + + true + + + + ДобавитьРегистрациюКонстанты + + + DontUse + + + УдалитьРегистрациюКонстанты + + <key>ru</key> + <value>Удалить регистрацию константы</value> + + 12 + + ru + Удалить регистрацию константы + + + true + + + + УдалитьРегистрациюКонстанты + + + DontUse + + + РедактироватьНомераСообщений + + <key>ru</key> + <value>Редактировать номера сообщений</value> + + 13 + + ru + Редактировать номера сообщений + + + true + + + + РедактироватьНомераСообщений + + + DontUse + + + ПоказатьРезультатВыгрузки + + <key>ru</key> + <value>Результат стандартной выгрузки (РИБ)</value> + + 14 + + ru + Показать результат выгрузки + + + true + + + + ПоказатьРезультатВыгрузки + + + DontUse + + + ДобавитьРегистрациюСсылкиОтбор + + <key>ru</key> + <value>Добавить регистрацию результата отбора</value> + + 15 + + ru + Добавить регистрацию результата отбора + + + true + + + + ДобавитьРегистрациюСсылкиОтбор + + + DontUse + + + УдалитьРегистрациюСсылкиОтбор + + <key>ru</key> + <value>Удалить регистрацию результата отбора</value> + + 16 + + ru + Удалить регистрацию результата отбора + + + true + + + + УдалитьРегистрациюСсылкиОтбор + + + DontUse + + + ДобавитьРегистрациюНабораЗаписейОтбор + + <key>ru</key> + <value>Добавить регистрацию результата отбора</value> + + 17 + + ru + Добавить регистрацию результата отбора + + + true + + + + ДобавитьРегистрациюНабораЗаписейОтбор + + + DontUse + + + УдалитьРегистрациюНабораЗаписейОтбор + + <key>ru</key> + <value>Удалить регистрацию по отбору</value> + + 18 + + ru + Удалить регистрацию набора записей отбор + + + true + + + + УдалитьРегистрациюНабораЗаписейОтбор + + + DontUse + + + УдалитьРегистрациюНабораЗаписей + + <key>ru</key> + <value>Удалить регистрацию набора записей</value> + + 19 + + ru + Удалить регистрацию набора записей + + + true + + + + УдалитьРегистрациюНабораЗаписей + + + DontUse + + + ОткрытьФормуРегистрацииНаУзлах + + <key>ru</key> + <value>Открыть форму регистрации на узлах</value> + + 20 + + ru + Регистрация объекта на всех узлах + + + true + + + + ОткрытьФормуРегистрацииНаУзлах + + + DontUse + + + ОткрытьФормуНастроек + + <key>ru</key> + <value>Настройки</value> + + 21 + + ru + Открыть форму настроек + + + true + + + StdPicture.ReportSettings + + + + ОткрытьФормуНастроек + + + DontUse + + + ДобавитьРегистрациюОдногоОбъекта + + <key>ru</key> + <value>Добавить регистрацию одного объекта</value> + + 22 + + ru + Добавить регистрацию одного объекта + + + true + + + + ДобавитьРегистрациюОдногоОбъекта + + + DontUse + + + ДобавитьРегистрациюОтбор + + <key>ru</key> + <value>Добавить регистрацию отбор</value> + + 23 + + ru + Добавить регистрацию отбор + + + true + + + + ДобавитьРегистрациюОтбор + + + DontUse + + + УдалитьРегистрациюОдногоОбъекта + + <key>ru</key> + <value>Удалить регистрацию одного объекта</value> + + 24 + + ru + Удалить регистрацию одного объекта + + + true + + + + УдалитьРегистрациюОдногоОбъекта + + + DontUse + + + УдалитьРегистрациюОтбор + + <key>ru</key> + <value>Удалить регистрацию отбор</value> + + 25 + + ru + Удалить регистрацию отбор + + + true + + + + УдалитьРегистрациюОтбор + + + DontUse + + + ДобавитьРегистрациюУдаленияОбъекта + + <key>ru</key> + <value>Добавить регистрацию удаления объекта</value> + + 26 + + ru + Добавить регистрацию удаления объекта + + + true + + + + ДобавитьРегистрациюУдаленияОбъекта + + + DontUse + + + РедактироватьНомерСообщенияОбъекта + + <key>ru</key> + <value>Редактировать номер сообщения объекта</value> + + 27 + + ru + Редактировать номер сообщения объекта + + + true + + + StdPicture.Change + + + + РедактироватьНомерСообщенияОбъекта + + + DontUse + + + ЗарегистрироватьИОМИПредопределенные + + <key>ru</key> + <value>Зарегистрировать данные для восстановления подчиненного узла РИБ</value> + + 28 + + ru + Зарегистрировать данные для восстановления подчиненного узла РИБ + + + true + + + + ЗарегистрироватьИОМИПредопределенные + + + DontUse + + + ДополнительнаяОбработкаСсылка + + true + + + ОбъектыНазначения + + true + + + УзелОбмена + + ExchangePlanRef + + true + + + ЗапрещеноВыбиратьУзелОбмена + + Boolean + + true + + + + + + +
diff --git a/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Items/ДеревоМетаданных/RowsPicture.png b/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Items/ДеревоМетаданных/RowsPicture.png new file mode 100644 index 0000000..e97da27 Binary files /dev/null and b/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Items/ДеревоМетаданных/RowsPicture.png differ diff --git a/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Items/ДеревоМетаданныхАвторегистрация/ValuesPicture.png b/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Items/ДеревоМетаданныхАвторегистрация/ValuesPicture.png new file mode 100644 index 0000000..d7cc10f Binary files /dev/null and b/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Items/ДеревоМетаданныхАвторегистрация/ValuesPicture.png differ diff --git a/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Items/ДеревоМетаданныхДобавитьРегистрациюРезультатаЗапроса/Picture.png b/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Items/ДеревоМетаданныхДобавитьРегистрациюРезультатаЗапроса/Picture.png new file mode 100644 index 0000000..9270d02 Binary files /dev/null and b/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Items/ДеревоМетаданныхДобавитьРегистрациюРезультатаЗапроса/Picture.png differ diff --git a/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Items/ДеревоМетаданныхУдалитьРегистрациюРезультатаЗапроса/Picture.png b/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Items/ДеревоМетаданныхУдалитьРегистрациюРезультатаЗапроса/Picture.png new file mode 100644 index 0000000..9270d02 Binary files /dev/null and b/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Items/ДеревоМетаданныхУдалитьРегистрациюРезультатаЗапроса/Picture.png differ diff --git a/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Items/ПоказатьРезультатВыгрузки/Picture.png b/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Items/ПоказатьРезультатВыгрузки/Picture.png new file mode 100644 index 0000000..519885b Binary files /dev/null and b/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Items/ПоказатьРезультатВыгрузки/Picture.png differ diff --git a/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Items/СкрытаяКартинкаИнформация32/Picture.png b/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Items/СкрытаяКартинкаИнформация32/Picture.png new file mode 100644 index 0000000..dd7660e Binary files /dev/null and b/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Items/СкрытаяКартинкаИнформация32/Picture.png differ diff --git a/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Items/СписокКонстант/RowsPicture.png b/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Items/СписокКонстант/RowsPicture.png new file mode 100644 index 0000000..d36e47e Binary files /dev/null and b/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Items/СписокКонстант/RowsPicture.png differ diff --git a/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Items/СписокКонстантАвторегистрация/ValuesPicture.png b/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Items/СписокКонстантАвторегистрация/ValuesPicture.png new file mode 100644 index 0000000..d7cc10f Binary files /dev/null and b/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Items/СписокКонстантАвторегистрация/ValuesPicture.png differ diff --git a/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Items/СписокКонстантКонтекстноеМенюПоказатьРезультатВыгрузки/Picture.png b/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Items/СписокКонстантКонтекстноеМенюПоказатьРезультатВыгрузки/Picture.png new file mode 100644 index 0000000..519885b Binary files /dev/null and b/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Items/СписокКонстантКонтекстноеМенюПоказатьРезультатВыгрузки/Picture.png differ diff --git a/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Items/СписокНаборовЗаписейКонтекстноеМенюПоказатьРезультатВыгрузки/Picture.png b/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Items/СписокНаборовЗаписейКонтекстноеМенюПоказатьРезультатВыгрузки/Picture.png new file mode 100644 index 0000000..519885b Binary files /dev/null and b/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Items/СписокНаборовЗаписейКонтекстноеМенюПоказатьРезультатВыгрузки/Picture.png differ diff --git a/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Items/СписокСсылокКонтекстноеМенюПоказатьРезультатВыгрузки/Picture.png b/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Items/СписокСсылокКонтекстноеМенюПоказатьРезультатВыгрузки/Picture.png new file mode 100644 index 0000000..519885b Binary files /dev/null and b/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Items/СписокСсылокКонтекстноеМенюПоказатьРезультатВыгрузки/Picture.png differ diff --git a/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Module.bsl b/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Module.bsl new file mode 100644 index 0000000..71927c0 --- /dev/null +++ b/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Module.bsl @@ -0,0 +1,2279 @@ +// Форма редактирования регистрации изменений обмена объектов на указанном узле. +// Может быть открыта со следующими параметрами: +// +// УзелОбмена - ПланОбменаСсылка - Ссылка на узел обмена для оперирования. +// ЗапрещеноВыбиратьУзелОбмена - Булево - Флаг того, что пользователю запрещено изменять указанный узел. +// Параметр УзелОбмена должен быть задан +// ИменаСкрываемыхМетаданных - СписокЗначений - Содержит имена метаданных, которые будут исключены из дерева регистрации. +// +// При работе с подсистемой дополнительных отчетов и обработок используются дополнительные параметры: +// +// ДополнительнаяОбработкаСсылка - Произвольный - Ссылка на элемент справочника дополнительных отчетов и обработок, вызывающий форму. +// При использовании должен быть заполнен параметр "ОбъектыНазначения" +// ОбъектыНазначения - Массив - Объекты для обработки. Будет использован первый элемент для открытия формы регистрации +// объекта на узлах. При использовании должен быть заполнен параметр "ИдентификаторКоманды" +// + +&НаКлиенте +Перем ТекущаяСтрокаМетаданных; + +#Область ОбработчикиСобытийФормы +// + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + УстановитьУсловноеОформление(); + + //ВыполнитьПроверкуПравДоступа("Администрирование", Метаданные); + + Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. + Возврат; + КонецЕсли; + + ПараметрТаблицаРегистрации = Неопределено; + ПараметрОбъектРегистрации = Неопределено; + + ОткрытиеСУзломПараметром = Ложь; + ТекущийОбъект = ЭтотОбъект(); + + // Определяем что создают + Если Параметры.ДополнительнаяОбработкаСсылка = Неопределено Тогда + // Запуск автономно, возможно с параметром-узлом + УзелОбменаСсылка = Параметры.УзелОбмена; + Параметры.Свойство("ЗапрещеноВыбиратьУзелОбмена", ЗапрещеноВыбиратьУзелОбмена); + ОткрытиеСУзломПараметром = Истина; + + Иначе + // Вызов из подсистемы дополнительных отчетов и обработок + Если ТипЗнч(Параметры.ОбъектыНазначения) = Тип("Массив") И Параметры.ОбъектыНазначения.Количество() > 0 Тогда + + // Нас открывают с указанием объекта + ОбъектНазначения = Параметры.ОбъектыНазначения[0]; + Тип = ТипЗнч(ОбъектНазначения); + + Если ПланыОбмена.ТипВсеСсылки().СодержитТип(Тип) Тогда + УзелОбменаСсылка = ОбъектНазначения; + ОткрытиеСУзломПараметром = Истина; + Иначе + // Преобразуем в два внутренних параметра + Описание = ТекущийОбъект.ХарактеристикиПоМетаданным(ОбъектНазначения.Метаданные()); + Если Описание.ЭтоСсылка Тогда + ПараметрОбъектРегистрации = ОбъектНазначения; + + ИначеЕсли Описание.ЭтоНабор Тогда + // Структура и имя таблицы + ПараметрТаблицаРегистрации = Описание.ИмяТаблицы; + ПараметрОбъектРегистрации = Новый Структура; + Для Каждого Измерение Из ТекущийОбъект.ИзмеренияНабораЗаписей(ПараметрТаблицаРегистрации) Цикл + ТекИмя = Измерение.Имя; + ПараметрОбъектРегистрации.Вставить(ТекИмя, ОбъектНазначения.Отбор[ТекИмя].Значение); + КонецЦикла; + + КонецЕсли; + КонецЕсли; + + Иначе + ВызватьИсключение СтрЗаменить( + НСтр("ru = 'Некорректные параметры объектов назначения открытия команды ""%1""'"), + "%1", Параметры.ИдентификаторКоманды); + КонецЕсли; + + КонецЕсли; + + // Настройки объекта инициализируем всегда + ТекущийОбъект.ПрочитатьНастройки(); + ТекущийОбъект.ПрочитатьПризнакиПоддержкиБСП(); + ЭтотОбъект(ТекущийОбъект); + + // Остальное инициализируем, только если будем открывать эту форму, + Если ПараметрОбъектРегистрации <> Неопределено Тогда + Возврат; + КонецЕсли; + + // Список запретных объектов метаданных из параметров + Параметры.Свойство("ИменаСкрываемыхМетаданных", ИменаСкрываемыхМетаданных); + + ТекущаяСтрокаМетаданных = Неопределено; + Элементы.ВариантыСпискаОбъектов.ТекущаяСтраница = Элементы.СтраницаПустая; + Параметры.Свойство("ЗапрещеноВыбиратьУзелОбмена", ЗапрещеноВыбиратьУзелОбмена); + + //Если Не ПроконтролироватьНастройки() И ОткрытиеСУзломПараметром Тогда + // ВызватьИсключение СтрЗаменить( + // НСтр("ru = 'Для ""%1"" редактирование регистрации объектов недоступно.'"), + // "%1", УзелОбменаСсылка); + //КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПриЗакрытии() + // Автосохранение настроек + СохраняемыеВНастройкахДанныеМодифицированы = Истина; +КонецПроцедуры + +&НаКлиенте +Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора) + + // Результат выбора запроса, ожидаем структуру + Если ТипЗнч(ВыбранноеЗначение) <> Тип("Структура") + Или (Не ВыбранноеЗначение.Свойство("ДействиеВыбора")) + Или (Не ВыбранноеЗначение.Свойство("ДанныеВыбора")) + Или ТипЗнч(ВыбранноеЗначение.ДействиеВыбора) <> Тип("Булево") + Или ТипЗнч(ВыбранноеЗначение.ДанныеВыбора) <> Тип("Строка") + Тогда + Ошибка = НСтр("ru = 'Неожиданный результат выбора из консоли запросов'"); + Иначе + Ошибка = КонтрольСсылокДляВыбораЗапросом(ВыбранноеЗначение.ДанныеВыбора); + КонецЕсли; + + Если Ошибка <> "" Тогда + ПоказатьПредупреждение(,Ошибка); + Возврат; + КонецЕсли; + + Если ВыбранноеЗначение.ДействиеВыбора Тогда + Текст = НСтр("ru = 'Зарегистрировать результат запроса + |на узле ""%1""?'"); + Иначе + Текст = НСтр("ru = 'Отменить регистрацию результата запроса + |на узле ""%1""?'"); + КонецЕсли; + Текст = СтрЗаменить(Текст, "%1", Строка(УзелОбменаСсылка)); + + ЗаголовокВопроса = НСтр("ru = 'Подтверждение'"); + + Оповещение = Новый ОписаниеОповещения("ОбработкаВыбораЗавершение", ЭтотОбъект, Новый Структура); + Оповещение.ДополнительныеПараметры.Вставить("ВыбранноеЗначение", ВыбранноеЗначение); + ПоказатьВопрос(Оповещение, Текст, РежимДиалогаВопрос.ДаНет, , , ЗаголовокВопроса); + +КонецПроцедуры + +Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) + + Если ИмяСобытия = "ИзменениеРегистрацииОбменаДаннымиОбъекта" Тогда + ЗаполнитьКоличествоРегистрацийВДереве(); + ОбновитьСодержимоеСтраницы(); + + ИначеЕсли ИмяСобытия = "ИзменениеДанныхУзлаОбмена" И УзелОбменаСсылка = Параметр Тогда + УстановитьЗаголовокНомеровСообщений(); + + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ПриСохраненииДанныхВНастройкахНаСервере(Настройки) + // Автоматические настройки + //ТекущийОбъект = ЭтотОбъект(); + //ТекущийОбъект.СохранитьНастройки(); + //ЭтотОбъект(ТекущийОбъект); +КонецПроцедуры + +&НаСервере +Процедура ПриЗагрузкеДанныхИзНастроекНаСервере(Настройки) + + Если ПараметрОбъектРегистрации <> Неопределено Тогда + // Будет работа с другой формой + Возврат; + КонецЕсли; + + Если ЗначениеЗаполнено(Параметры.УзелОбмена) Тогда + УзелОбменаСсылка = Параметры.УзелОбмена; + Иначе + УзелОбменаСсылка = Настройки["УзелОбменаСсылка"]; + // Если восстановленный узел обмена был удален, то очищаем его + Если УзелОбменаСсылка <> Неопределено + И ПланыОбмена.ТипВсеСсылки().СодержитТип(ТипЗнч(УзелОбменаСсылка)) + И ПустаяСтрока(УзелОбменаСсылка.ВерсияДанных) + Тогда + УзелОбменаСсылка = Неопределено; + КонецЕсли; + КонецЕсли; + + ПроконтролироватьНастройки(); +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы +// + +&НаКлиенте +Процедура УзелОбменаСсылкаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + СтандартнаяОбработка = Ложь; + ТекИмяФормы = ПолучитьИмяФормы() + "Форма.ВыборУзлаПланаОбмена"; + ТекПараметры = Новый Структура("МножественныйВыбор, НачальноеЗначениеВыбора", Ложь, УзелОбменаСсылка); + ОткрытьФорму(ТекИмяФормы, ТекПараметры, Элемент); +КонецПроцедуры + +&НаКлиенте +Процедура УзелОбменаСсылкаОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) + Если УзелОбменаСсылка <> ВыбранноеЗначение Тогда + УзелОбменаСсылка = ВыбранноеЗначение; + ОбработкаВыбораУзлаОбмена(); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура УзелОбменаСсылкаПриИзменении(Элемент) + ОбработкаВыбораУзлаОбмена(); + РазвернутьДеревоМетаданных(); + ОбновитьСодержимоеСтраницы(); +КонецПроцедуры + +&НаКлиенте +Процедура УзелОбменаСсылкаОчистка(Элемент, СтандартнаяОбработка) + СтандартнаяОбработка = Ложь; +КонецПроцедуры + +&НаКлиенте +Процедура ВариантОтбораПоНомеруСообщенияПриИзменении(Элемент) + УстановитьОтборПоНомеруСообщения(СписокКонстант, ВариантОтбораПоНомеруСообщения); + УстановитьОтборПоНомеруСообщения(СписокСсылок, ВариантОтбораПоНомеруСообщения); + УстановитьОтборПоНомеруСообщения(СписокНаборовЗаписей, ВариантОтбораПоНомеруСообщения); + ОбновитьСодержимоеСтраницы(); +КонецПроцедуры + +&НаКлиенте +Процедура ВариантыСпискаОбъектовПриСменеСтраницы(Элемент, ТекущаяСтраница) + ОбновитьСодержимоеСтраницы(ТекущаяСтраница); +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыДеревоМетаданных +// + +&НаКлиенте +Процедура ДеревоМетаданныхПометкаПриИзменении(Элемент) + ИзменениеПометки(Элементы.ДеревоМетаданных.ТекущаяСтрока); +КонецПроцедуры + +&НаКлиенте +Процедура ДеревоМетаданныхПриАктивизацииСтроки(Элемент) + Если Элементы.ДеревоМетаданных.ТекущаяСтрока <> ТекущаяСтрокаМетаданных Тогда + ТекущаяСтрокаМетаданных = Элементы.ДеревоМетаданных.ТекущаяСтрока; + ПодключитьОбработчикОжидания("НастроитьРедактированиеИзменений", 0.0000001, Истина); + КонецЕсли; +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыСписокКонстант +// + +&НаКлиенте +Процедура СписокКонстантОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) + + Результат = ДобавитьРегистрациюНаСервере(Истина, УзелОбменаСсылка, ВыбранноеЗначение); + Элементы.СписокКонстант.Обновить(); + ЗаполнитьКоличествоРегистрацийВДереве(); + СообщитьОРезультатахРегистрации(Истина, Результат); + + Если ТипЗнч(ВыбранноеЗначение) = Тип("Массив") И ВыбранноеЗначение.Количество() > 0 Тогда + Элемент.ТекущаяСтрока = ВыбранноеЗначение[0]; + Иначе + Элемент.ТекущаяСтрока = ВыбранноеЗначение; + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыСписокСсылок +// + +&НаКлиенте +Процедура СписокСсылокОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) + ОбработкаВыбораДанных(Элемент, ВыбранноеЗначение); +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыСписокНаборовЗаписей +// + +&НаКлиенте +Процедура СписокНаборовЗаписейВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) + СтандартнаяОбработка = Ложь; + + ПараметрыЗаписи = СтруктураКлючаНабораЗаписей(Элемент.ТекущиеДанные); + Если ПараметрыЗаписи <> Неопределено Тогда + ОткрытьФорму(ПараметрыЗаписи.ИмяФормы, Новый Структура(ПараметрыЗаписи.Параметр, ПараметрыЗаписи.Значение)); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура СписокНаборовЗаписейОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) + ОбработкаВыбораДанных(Элемент, ВыбранноеЗначение); +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы +// + +&НаКлиенте +Процедура ДобавитьРегистрациюОдногоОбъекта(Команда) + + Если Не ЗначениеЗаполнено(УзелОбменаСсылка) Тогда + Возврат; + КонецЕсли; + + ТекСтр = Элементы.ВариантыСпискаОбъектов.ТекущаяСтраница; + Если ТекСтр = Элементы.СтраницаКонстанты Тогда + ДобавитьРегистрациюКонстантыВСписке(); + + ИначеЕсли ТекСтр = Элементы.СтраницаСписокСсылок Тогда + ДобавитьРегистрациюВСписокСсылок(); + + ИначеЕсли ТекСтр = Элементы.СтраницаНаборЗаписей Тогда + ДобавитьРегистрациюВНаборЗаписейОтбор(); + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура УдалитьРегистрациюОдногоОбъекта(Команда) + + Если Не ЗначениеЗаполнено(УзелОбменаСсылка) Тогда + Возврат; + КонецЕсли; + + ТекСтр = Элементы.ВариантыСпискаОбъектов.ТекущаяСтраница; + Если ТекСтр = Элементы.СтраницаКонстанты Тогда + УдалитьРегистрациюКонстантыВСписке(); + + ИначеЕсли ТекСтр = Элементы.СтраницаСписокСсылок Тогда + УдалитьРегистрациюИзСпискаСсылок(); + + ИначеЕсли ТекСтр = Элементы.СтраницаНаборЗаписей Тогда + УдалитьРегистрациюВНабореЗаписей(); + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ДобавитьРегистрациюОтбор(Команда) + + Если Не ЗначениеЗаполнено(УзелОбменаСсылка) Тогда + Возврат; + КонецЕсли; + + ТекСтр = Элементы.ВариантыСпискаОбъектов.ТекущаяСтраница; + Если ТекСтр = Элементы.СтраницаСписокСсылок Тогда + ДобавитьРегистрациюВСписокОтбор(); + + ИначеЕсли ТекСтр = Элементы.СтраницаНаборЗаписей Тогда + ДобавитьРегистрациюВНаборЗаписейОтбор(); + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура УдалитьРегистрациюОтбор(Команда) + + Если Не ЗначениеЗаполнено(УзелОбменаСсылка) Тогда + Возврат; + КонецЕсли; + + ТекСтр = Элементы.ВариантыСпискаОбъектов.ТекущаяСтраница; + Если ТекСтр = Элементы.СтраницаСписокСсылок Тогда + УдалитьРегистрациюВСпискеОтбор(); + + ИначеЕсли ТекСтр = Элементы.СтраницаНаборЗаписей Тогда + УдалитьРегистрациюВНабореЗаписейОтбор(); + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ОткрытьФормуРегистрацииНаУзлах(Команда) + + Если ЗапрещеноВыбиратьУзелОбмена Тогда + Возврат; + КонецЕсли; + + Данные = ПолучитьТекущийОбъектРедактирования(); + Если Данные <> Неопределено Тогда + ТаблицаРегистрации = ?(ТипЗнч(Данные) = Тип("Структура"), СписокНаборовЗаписейИмяТаблицы, ""); + ОткрытьФорму(ПолучитьИмяФормы() + "Форма.УзлыРегистрацииОбъекта", + Новый Структура("ОбъектРегистрации, ТаблицаРегистрации, ОповещатьОбИзменениях", + Данные, ТаблицаРегистрации, Истина + ), + ЭтотОбъект); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПоказатьРезультатВыгрузки(Команда) + + ТекСтраница = Элементы.ВариантыСпискаОбъектов.ТекущаяСтраница; + Сериализация = Новый Массив; + + Если ТекСтраница = Элементы.СтраницаКонстанты Тогда + ЭлементФормы = Элементы.СписокКонстант; + Для Каждого Строка Из ЭлементФормы.ВыделенныеСтроки Цикл + ТекДанные = ЭлементФормы.ДанныеСтроки(Строка); + Сериализация.Добавить(Новый Структура("ФлагТипа, Данные", 1, ТекДанные.МетаПолноеИмя)); + КонецЦикла; + + ИначеЕсли ТекСтраница = Элементы.СтраницаНаборЗаписей Тогда + СписокИзмерений = МассивИменКлючейНабораЗаписей(СписокНаборовЗаписейИмяТаблицы); + ЭлементФормы = Элементы.СписокНаборовЗаписей; + Префикс = "СписокНаборовЗаписей"; + Для Каждого Элемент Из ЭлементФормы.ВыделенныеСтроки Цикл + ТекДанные = Новый Структура(); + Данные = ЭлементФормы.ДанныеСтроки(Элемент); + Для Каждого Имя Из СписокИзмерений Цикл + ТекДанные.Вставить(Имя, Данные[Префикс + Имя]); + КонецЦикла; + Сериализация.Добавить(Новый Структура("ФлагТипа, Данные", 2, ТекДанные)); + КонецЦикла; + + ИначеЕсли ТекСтраница = Элементы.СтраницаСписокСсылок Тогда + ЭлементФормы = Элементы.СписокСсылок; + Для Каждого Элемент Из ЭлементФормы.ВыделенныеСтроки Цикл + ТекДанные = ЭлементФормы.ДанныеСтроки(Элемент); + Сериализация.Добавить(Новый Структура("ФлагТипа, Данные", 3, ТекДанные.Ссылка)); + КонецЦикла; + + Иначе + Возврат; + + КонецЕсли; + + Если Сериализация.Количество() > 0 Тогда + //Текст = ТекстСериализации(Сериализация); + ЗаголовокТекста = НСтр("ru = 'Результат стандартной выгрузки (РИБ)'"); + //Текст.Показать(ЗаголовокТекста); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура РедактироватьНомераСообщений(Команда) + Если ЗначениеЗаполнено(УзелОбменаСсылка) Тогда + ТекИмяФормы = ПолучитьИмяФормы() + "Форма.НомераСообщенийУзлаПланаОбмена"; + ТекПараметры = Новый Структура("УзелОбменаСсылка", УзелОбменаСсылка); + ОткрытьФорму(ТекИмяФормы, ТекПараметры); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ДобавитьРегистрациюКонстанты(Команда) + Если ЗначениеЗаполнено(УзелОбменаСсылка) Тогда + ДобавитьРегистрациюКонстантыВСписке(); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура УдалитьРегистрациюКонстанты(Команда) + Если ЗначениеЗаполнено(УзелОбменаСсылка) Тогда + УдалитьРегистрациюКонстантыВСписке(); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ДобавитьРегистрациюСсылки(Команда) + Если ЗначениеЗаполнено(УзелОбменаСсылка) Тогда + ДобавитьРегистрациюВСписокСсылок(); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ДобавитьРегистрациюУдаленияОбъекта(Команда) + Если ЗначениеЗаполнено(УзелОбменаСсылка) Тогда + ДобавитьРегистрациюУдаленияОбъектаВСписокСсылок(); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура УдалитьРегистрациюСсылки(Команда) + Если ЗначениеЗаполнено(УзелОбменаСсылка) Тогда + УдалитьРегистрациюИзСпискаСсылок(); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ДобавитьРегистрациюСсылкиПодбор(Команда) + Если ЗначениеЗаполнено(УзелОбменаСсылка) Тогда + ДобавитьРегистрациюВСписокСсылок(Истина); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ДобавитьРегистрациюСсылкиОтбор(Команда) + Если ЗначениеЗаполнено(УзелОбменаСсылка) Тогда + ДобавитьРегистрациюВСписокОтбор(); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура УдалитьРегистрациюСсылкиОтбор(Команда) + Если ЗначениеЗаполнено(УзелОбменаСсылка) Тогда + УдалитьРегистрациюВСпискеОтбор(); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ДобавитьРегистрациюАвтоОбъектов(Команда) + Если ЗначениеЗаполнено(УзелОбменаСсылка) Тогда + ДобавитьРегистрациюВыделенныхОбъектов(Ложь); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура УдалитьРегистрациюАвтоОбъектов(Команда) + Если ЗначениеЗаполнено(УзелОбменаСсылка) Тогда + УдалитьРегистрациюВыделенныхОбъектов(Ложь); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ДобавитьРегистрациюВсехОбъектов(Команда) + Если ЗначениеЗаполнено(УзелОбменаСсылка) Тогда + ДобавитьРегистрациюВыделенныхОбъектов(); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура УдалитьРегистрациюВсехОбъектов(Команда) + Если ЗначениеЗаполнено(УзелОбменаСсылка) Тогда + УдалитьРегистрациюВыделенныхОбъектов(); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ДобавитьРегистрациюНабораЗаписейОтбор(Команда) + Если ЗначениеЗаполнено(УзелОбменаСсылка) Тогда + ДобавитьРегистрациюВНаборЗаписейОтбор(); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура УдалитьРегистрациюНабораЗаписей(Команда) + Если ЗначениеЗаполнено(УзелОбменаСсылка) Тогда + УдалитьРегистрациюВНабореЗаписей(); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура УдалитьРегистрациюНабораЗаписейОтбор(Команда) + Если ЗначениеЗаполнено(УзелОбменаСсылка) Тогда + УдалитьРегистрациюВНабореЗаписейОтбор(); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ОбновитьВсеДанные(Команда) + ЗаполнитьКоличествоРегистрацийВДереве(); + ОбновитьСодержимоеСтраницы(); +КонецПроцедуры + +&НаКлиенте +Процедура ДобавитьРегистрациюРезультатаЗапроса(Команда) + Если ЗначениеЗаполнено(УзелОбменаСсылка) Тогда + ОперацияСРезультатамиЗапроса(Истина); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура УдалитьРегистрациюРезультатаЗапроса(Команда) + Если ЗначениеЗаполнено(УзелОбменаСсылка) Тогда + ОперацияСРезультатамиЗапроса(Ложь); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ОткрытьФормуНастроек(Команда) + ОткрытьФормуНастроекОбработки(); +КонецПроцедуры + +&НаКлиенте +Процедура РедактироватьНомерСообщенияОбъекта(Команда) + + Если Элементы.ВариантыСпискаОбъектов.ТекущаяСтраница = Элементы.СтраницаКонстанты Тогда + РедактироватьНомерСообщенияКонстанты(); + + ИначеЕсли Элементы.ВариантыСпискаОбъектов.ТекущаяСтраница = Элементы.СтраницаСписокСсылок Тогда + РедактироватьНомерСообщенияСсылки(); + + ИначеЕсли Элементы.ВариантыСпискаОбъектов.ТекущаяСтраница = Элементы.СтраницаНаборЗаписей Тогда + РедактироватьНомерСообщенияСписокНаборов() + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ЗарегистрироватьИОМИПредопределенные(Команда) + + ЗаголовокВопроса = НСтр("ru = 'Подтверждение'"); + ТекстВопроса = СтрЗаменить( + НСтр("ru = 'Зарегистрировать данные для восстановления подчиненного узла РИБ + |на узле ""%1""?'"), + "%1", УзелОбменаСсылка + ); + + Оповещение = Новый ОписаниеОповещения("ЗарегистрироватьИОМЗавершение", ЭтотОбъект); + ПоказатьВопрос(Оповещение, ТекстВопроса, РежимДиалогаВопрос.ДаНет, , , ЗаголовокВопроса); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервере +Процедура УстановитьУсловноеОформление() + + УсловноеОформление.Элементы.Очистить(); + + // + + Элемент = УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.СписокСсылокНомерСообщения.Имя); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("СписокСсылок.НеВыгружалось"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Истина; + + Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", WebЦвета.СветлоСерый); + Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = 'Не выгружалось'")); + + // + + Элемент = УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.СписокКонстантНомерСообщения.Имя); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("СписокКонстант.НеВыгружалось"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Истина; + + Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", WebЦвета.СветлоСерый); + Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = 'Не выгружалось'")); + + // + + Элемент = УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.СписокНаборовЗаписейНомерСообщения.Имя); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("СписокНаборовЗаписей.НеВыгружалось"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Истина; + + Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", WebЦвета.СветлоСерый); + Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = 'Не выгружалось'")); + + // + + Элемент = УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ДеревоМетаданныхКоличествоИзмененийСтрокой.Имя); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ДеревоМетаданных.КоличествоИзменений"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = 0; + + Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", WebЦвета.ТемноСерый); + Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = 'Нет изменений'")); + +КонецПроцедуры +// + +// Экспортный обработчик команд для подсистемы дополнительных отчетов и обработок +// +// Параметры: +// ИдентификаторКоманды - Строка - Идентификатор команды для выполнения. +// ОбъектыНазначения - Массив - Ссылки для обработки. Здесь не используется, ожидается, что аналогичный параметр +// был передан и обработан при создании формы. +// СозданныеОбъекты - Массив - Возвращаемый массив ссылок на созданные объекты. +// В данной обработке не используется. +// +&НаКлиенте +Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначения, СозданныеОбъекты) Экспорт + + Если ИдентификаторКоманды = "ОткрытьФормуРедактированияРегистрации" Тогда + + Если ПараметрОбъектРегистрации <> Неопределено Тогда + // Используем параметры, полученные при создании на сервере + + ПараметрыФормыРегистрации = Новый Структура; + ПараметрыФормыРегистрации.Вставить("ОбъектРегистрации", ПараметрОбъектРегистрации); + ПараметрыФормыРегистрации.Вставить("ТаблицаРегистрации", ПараметрТаблицаРегистрации); + + ОткрытьФорму(ПолучитьИмяФормы() + "Форма.УзлыРегистрацииОбъекта", ПараметрыФормыРегистрации); + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +// Обработчик оповещения продолжения диалога +&НаКлиенте +Процедура ЗарегистрироватьИОМЗавершение(Знач РезультатВопроса, Знач ДополнительныеПараметры) Экспорт + + Если РезультатВопроса <> КодВозвратаДиалога.Да Тогда + Возврат; + КонецЕсли; + + СообщитьОРезультатахРегистрации(Истина, ЗарегистрироватьИОМИПредопределенныеНаСервере() ); + + ЗаполнитьКоличествоРегистрацийВДереве(); + ОбновитьСодержимоеСтраницы(); +КонецПроцедуры + +// Обработчик оповещения продолжения диалога +&НаКлиенте +Процедура ОбработкаВыбораЗавершение(Знач РезультатВопроса, Знач ДополнительныеПараметры) Экспорт + Если РезультатВопроса <> КодВозвратаДиалога.Да Тогда + Возврат + КонецЕсли; + ВыбранноеЗначение = ДополнительныеПараметры.ВыбранноеЗначение; + + СообщитьОРезультатахРегистрации(ВыбранноеЗначение.ДействиеВыбора, + ИзменитьРегистрациюРезультатаЗапросаСервер(ВыбранноеЗначение.ДействиеВыбора, ВыбранноеЗначение.ДанныеВыбора)); + + ЗаполнитьКоличествоРегистрацийВДереве(); + ОбновитьСодержимоеСтраницы(); +КонецПроцедуры + +&НаКлиенте +Процедура РедактироватьНомерСообщенияКонстанты() + ТекДанные = Элементы.СписокКонстант.ТекущиеДанные; + Если ТекДанные = Неопределено Тогда + Возврат; + КонецЕсли; + + Оповещение = Новый ОписаниеОповещения("РедактироватьНомерСообщенияКонстантыЗавершение", ЭтотОбъект, Новый Структура); + Оповещение.ДополнительныеПараметры.Вставить("МетаПолноеИмя", ТекДанные.МетаПолноеИмя); + + НомерСообщения = ТекДанные.НомерСообщения; + Подсказка = НСтр("ru = 'Номер отправленного'"); + + ПоказатьВводЧисла(Оповещение, НомерСообщения, Подсказка); +КонецПроцедуры + +// Обработчик оповещения продолжения диалога +&НаКлиенте +Процедура РедактироватьНомерСообщенияКонстантыЗавершение(Знач НомерСообщения, Знач ДополнительныеПараметры) Экспорт + Если НомерСообщения = Неопределено Тогда + // Отказ от ввода + Возврат; + КонецЕсли; + + СообщитьОРезультатахРегистрации(НомерСообщения, + ИзменитьНомерСообщенияНаСервере(УзелОбменаСсылка, НомерСообщения, ДополнительныеПараметры.МетаПолноеИмя)); + + Элементы.СписокКонстант.Обновить(); + ЗаполнитьКоличествоРегистрацийВДереве(); +КонецПроцедуры + +&НаКлиенте +Процедура РедактироватьНомерСообщенияСсылки() + ТекДанные = Элементы.СписокСсылок.ТекущиеДанные; + Если ТекДанные = Неопределено Тогда + Возврат; + КонецЕсли; + + Оповещение = Новый ОписаниеОповещения("РедактироватьНомерСообщенияСсылкиЗавершение", ЭтотОбъект, Новый Структура); + Оповещение.ДополнительныеПараметры.Вставить("Ссылка", ТекДанные.Ссылка); + + НомерСообщения = ТекДанные.НомерСообщения; + Подсказка = НСтр("ru = 'Номер отправленного'"); + + ПоказатьВводЧисла(Оповещение, НомерСообщения, Подсказка); +КонецПроцедуры + +// Обработчик оповещения продолжения диалога +&НаКлиенте +Процедура РедактироватьНомерСообщенияСсылкиЗавершение(Знач НомерСообщения, Знач ДополнительныеПараметры) Экспорт + Если НомерСообщения = Неопределено Тогда + // Отказ от ввода + Возврат; + КонецЕсли; + + СообщитьОРезультатахРегистрации(НомерСообщения, + ИзменитьНомерСообщенияНаСервере(УзелОбменаСсылка, НомерСообщения, ДополнительныеПараметры.Ссылка)); + + Элементы.СписокСсылок.Обновить(); + ЗаполнитьКоличествоРегистрацийВДереве(); +КонецПроцедуры + +&НаКлиенте +Процедура РедактироватьНомерСообщенияСписокНаборов() + ТекДанные = Элементы.СписокНаборовЗаписей.ТекущиеДанные; + Если ТекДанные = Неопределено Тогда + Возврат; + КонецЕсли; + + Оповещение = Новый ОписаниеОповещения("РедактироватьНомерСообщенияСписокНаборовЗавершение", ЭтотОбъект, Новый Структура); + + ДанныеСтроки = Новый Структура; + ИменаКлючей = МассивИменКлючейНабораЗаписей(СписокНаборовЗаписейИмяТаблицы); + Для Каждого Имя Из ИменаКлючей Цикл + ДанныеСтроки.Вставить(Имя, ТекДанные["СписокНаборовЗаписей" + Имя]); + КонецЦикла; + + Оповещение.ДополнительныеПараметры.Вставить("ДанныеСтроки", ДанныеСтроки); + + НомерСообщения = ТекДанные.НомерСообщения; + Подсказка = НСтр("ru = 'Номер отправленного'"); + + ПоказатьВводЧисла(Оповещение, НомерСообщения, Подсказка); +КонецПроцедуры + +// Обработчик оповещения продолжения диалога +&НаКлиенте +Процедура РедактироватьНомерСообщенияСписокНаборовЗавершение(Знач НомерСообщения, Знач ДополнительныеПараметры) Экспорт + Если НомерСообщения = Неопределено Тогда + // Отказ от ввода + Возврат; + КонецЕсли; + + СообщитьОРезультатахРегистрации(НомерСообщения, ИзменитьНомерСообщенияНаСервере( + УзелОбменаСсылка, НомерСообщения, ДополнительныеПараметры.ДанныеСтроки, СписокНаборовЗаписейИмяТаблицы)); + + Элементы.СписокНаборовЗаписей.Обновить(); + ЗаполнитьКоличествоРегистрацийВДереве(); +КонецПроцедуры + +&НаКлиенте +Процедура НастроитьРедактированиеИзменений() + НастроитьРедактированиеИзмененийСервер(ТекущаяСтрокаМетаданных); +КонецПроцедуры + +&НаКлиенте +Процедура РазвернутьДеревоМетаданных() + Для Каждого Строка Из ДеревоМетаданных.ПолучитьЭлементы() Цикл + Элементы.ДеревоМетаданных.Развернуть( Строка.ПолучитьИдентификатор() ); + КонецЦикла; +КонецПроцедуры + +&НаСервере +Процедура УстановитьЗаголовокНомеровСообщений() + + Текст = НСтр("ru = 'Отпр. %1, прин. %2'"); + + Данные = ПрочитатьНомераСообщений(); + Текст = СтрЗаменить(Текст, "%1", Формат(Данные.НомерОтправленного, "ЧДЦ=0; ЧН=")); + Текст = СтрЗаменить(Текст, "%2", Формат(Данные.НомерПринятого, "ЧДЦ=0; ЧН=")); + + Элементы.ФормаРедактироватьНомераСообщений.Заголовок = Текст; +КонецПроцедуры + +&НаСервере +Процедура ОбработкаВыбораУзлаОбмена() + + // Изменяем номера узлов в гиперссылке по редактированию + УстановитьЗаголовокНомеровСообщений(); + + // Обновляем дерево метаданных + ПрочитатьДеревоМетаданных(); + ЗаполнитьКоличествоРегистрацийВДереве(); + + // Обновляем активную страницу + ПоследняяАктивнаяКолонкаМетаданных = Неопределено; + ПоследняяАктивнаяСтрокаМетаданных = Неопределено; + Элементы.ВариантыСпискаОбъектов.ТекущаяСтраница = Элементы.СтраницаПустая; + + // Обновляем команды, зависящие от узла + + МетаПланОбменаУзла = УзелОбменаСсылка.Метаданные(); + + Если Объект.ДоступнаРаботаРИБ // Доступна работа с ИОМ по версии БСП + И (ПланыОбмена.ГлавныйУзел() = Неопределено) // Текущая база - главный узел + И МетаПланОбменаУзла.РаспределеннаяИнформационнаяБаза // Текущий узел - РИБ + Тогда + Элементы.ФормаЗарегистрироватьИОМИПредопределенные.Видимость = Истина; + Иначе + Элементы.ФормаЗарегистрироватьИОМИПредопределенные.Видимость = Ложь; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура СообщитьОРезультатахРегистрации(Команда, Результаты) + + Если ТипЗнч(Команда) = Тип("Булево") ТОгда + Если Команда Тогда + ЗаголовокПредупреждения = НСтр("ru = 'Регистрация изменений:'"); + ТекстПредупреждения = НСтр("ru = 'Зарегистрировано %1 изменений из %2 + |на узле ""%0""'"); + Иначе + ЗаголовокПредупреждения = НСтр("ru = 'Отмена регистрации:'"); + ТекстПредупреждения = НСтр("ru = 'Отменена регистрация %1 изменений + |на узле ""%0"".'"); + КонецЕсли; + Иначе + ЗаголовокПредупреждения = НСтр("ru = 'Изменение номера сообщения:'"); + ТекстПредупреждения = НСтр("ru = 'Номер сообщения изменен на %3 + |у %1 объекта(ов)'"); + КонецЕсли; + + ТекстПредупреждения = СтрЗаменить(ТекстПредупреждения, "%0", УзелОбменаСсылка); + ТекстПредупреждения = СтрЗаменить(ТекстПредупреждения, "%1", Формат(Результаты.Успешно, "ЧН=")); + ТекстПредупреждения = СтрЗаменить(ТекстПредупреждения, "%2", Формат(Результаты.Всего, "ЧН=")); + ТекстПредупреждения = СтрЗаменить(ТекстПредупреждения, "%3", Команда); + + Предупреждением = Результаты.Всего <> Результаты.Успешно; + Если Предупреждением Тогда + ОбновитьОтображениеДанных(); + ПоказатьПредупреждение(, ТекстПредупреждения, , ЗаголовокПредупреждения); + Иначе + //ПоказатьОповещениеПользователя(ЗаголовокПредупреждения, + //ПолучитьНавигационнуюСсылку(УзелОбменаСсылка), + //ТекстПредупреждения, + //Элементы.СкрытаяКартинкаИнформация32.Картинка); + КонецЕсли; +КонецПроцедуры + +&НаСервере +Функция ПолучитьФормуВыбораРезультатаЗапроса() + + ТекущийОбъект = ЭтотОбъект(); + ТекущийОбъект.ПрочитатьНастройки(); + ЭтотОбъект(ТекущийОбъект); + + Проверка = ТекущийОбъект.ПроверитьКорректностьНастроек(); + ЭтотОбъект(ТекущийОбъект); + + Если Проверка.НастройкаАдресВнешнейОбработкиЗапросов <> Неопределено Тогда + Возврат Неопределено; + + ИначеЕсли ПустаяСтрока(ТекущийОбъект.НастройкаАдресВнешнейОбработкиЗапросов) Тогда + Возврат Неопределено; + + ИначеЕсли НРег(Прав(СокрЛП(ТекущийОбъект.НастройкаАдресВнешнейОбработкиЗапросов), 4)) = ".epf" Тогда + //Обработка = ВнешниеОбработки.Создать(ТекущийОбъект.НастройкаАдресВнешнейОбработкиЗапросов); + //ИдентификаторФормы = ".ФормаОбъекта"; + + Иначе + Обработка = Обработки[ТекущийОбъект.НастройкаАдресВнешнейОбработкиЗапросов].Создать(); + ИдентификаторФормы = ".Форма"; + + КонецЕсли; + + Возврат Обработка.Метаданные().ПолноеИмя() + ИдентификаторФормы; +КонецФункции + +&НаКлиенте +Процедура ДобавитьРегистрациюКонстантыВСписке() + ТекИмяФормы = ПолучитьИмяФормы() + "Форма.ВыборКонстанты"; + ТекПараметры = Новый Структура("УзелОбмена, МассивИменМетаданных, МассивПредставлений, МассивАвторегистрации", + УзелОбменаСсылка, + СтруктураИменМетаданных.Константы, + СтруктураПредставленийМетаданных.Константы, + СтруктураАвторегистрацииМетаданных.Константы); + ОткрытьФорму(ТекИмяФормы, ТекПараметры, Элементы.СписокКонстант); +КонецПроцедуры + +&НаКлиенте +Процедура УдалитьРегистрациюКонстантыВСписке() + + Элемент = Элементы.СписокКонстант; + + СписокПредставлений = Новый Массив; + СписокИмен = Новый Массив; + Для Каждого Строка Из Элемент.ВыделенныеСтроки Цикл + Данные = Элемент.ДанныеСтроки(Строка); + СписокПредставлений.Добавить(Данные.Наименование); + СписокИмен.Добавить(Данные.МетаПолноеИмя); + КонецЦикла; + + Колво = СписокИмен.Количество(); + Если Колво = 0 Тогда + Возврат; + ИначеЕсли Колво = 1 Тогда + Текст = НСтр("ru = 'Отменить регистрацию ""%2"" + |на узле ""%1""?'"); + Иначе + Текст = НСтр("ru = 'Отменить регистрацию выбранных констант + |на узле ""%1""?'"); + КонецЕсли; + Текст = СтрЗаменить(Текст, "%1", УзелОбменаСсылка); + Текст = СтрЗаменить(Текст, "%2", СписокПредставлений[0]); + + ЗаголовокВопроса = НСтр("ru = 'Подтверждение'"); + + Оповещение = Новый ОписаниеОповещения("УдалитьРегистрациюКонстантыВСпискеЗавершение", ЭтотОбъект, Новый Структура); + Оповещение.ДополнительныеПараметры.Вставить("СписокИмен", СписокИмен); + + ПоказатьВопрос(Оповещение, Текст, РежимДиалогаВопрос.ДаНет, , ,ЗаголовокВопроса); +КонецПроцедуры + +// Обработчик оповещения продолжения диалога +&НаКлиенте +Процедура УдалитьРегистрациюКонстантыВСпискеЗавершение(Знач РезультатВопроса, Знач ДополнительныеПараметры) Экспорт + Если РезультатВопроса <> КодВозвратаДиалога.Да Тогда + Возврат; + КонецЕсли; + + СообщитьОРезультатахРегистрации(Ложь, + УдалитьРегистрациюНаСервере(Истина, УзелОбменаСсылка, ДополнительныеПараметры.СписокИмен)); + + Элементы.СписокКонстант.Обновить(); + ЗаполнитьКоличествоРегистрацийВДереве(); +КонецПроцедуры + +&НаКлиенте +Процедура ДобавитьРегистрациюВСписокСсылок(ЭтоПодбор = Ложь) + //ТекИмяФормы = ПолучитьИмяФормы(СписокСсылок) + "ФормаВыбора"; + ТекИмяФормы = ЭтотОбъект.ТекущийЭлемент.ТекущиеДанные.МетаПолноеИмя + ".ФормаВыбора"; + ТекПараметры = Новый Структура("РежимВыбора, МножественныйВыбор, ЗакрыватьПриВыборе, ВыборГруппИЭлементов", + Истина, Истина, ЭтоПодбор, ИспользованиеГруппИЭлементов.ГруппыИЭлементы); + ОткрытьФорму(ТекИмяФормы, ТекПараметры, Элементы.СписокСсылок); +КонецПроцедуры + +&НаКлиенте +Процедура ДобавитьРегистрациюУдаленияОбъектаВСписокСсылок() + Ссылка = СсылкаДляУдаленияОбъекта(); + ОбработкаВыбораДанных(Элементы.СписокСсылок, Ссылка); +КонецПроцедуры + +&НаСервере +Функция СсылкаДляУдаленияОбъекта(Знач УникальныйИдентификатор = Неопределено) + Описание = ЭтотОбъект().ХарактеристикиПоМетаданным(СписокСсылок.ОсновнаяТаблица); + Если УникальныйИдентификатор = Неопределено Тогда + Возврат Описание.Менеджер.ПолучитьСсылку(); + КонецЕсли; + Возврат Описание.Менеджер.ПолучитьСсылку(УникальныйИдентификатор); +КонецФункции + +&НаКлиенте +Процедура ДобавитьРегистрациюВСписокОтбор() + ТекИмяФормы = ПолучитьИмяФормы() + "Форма.ВыборОбъектовОтбором"; + ТекПараметры = Новый Структура("ДействиеВыбора, ИмяТаблицы", + Истина, + ОсновнаяТаблицаДинамическогоСписка(СписокСсылок)); + ОткрытьФорму(ТекИмяФормы, ТекПараметры, Элементы.СписокСсылок); +КонецПроцедуры + +&НаКлиенте +Процедура УдалитьРегистрациюВСпискеОтбор() + ТекИмяФормы = ПолучитьИмяФормы() + "Форма.ВыборОбъектовОтбором"; + ТекПараметры = Новый Структура("ДействиеВыбора, ИмяТаблицы", + Ложь, + ОсновнаяТаблицаДинамическогоСписка(СписокСсылок)); + ОткрытьФорму(ТекИмяФормы, ТекПараметры, Элементы.СписокСсылок); +КонецПроцедуры + +&НаКлиенте +Процедура УдалитьРегистрациюИзСпискаСсылок() + + Элемент = Элементы.СписокСсылок; + + СписокУдаления = Новый Массив; + Для Каждого Строка Из Элемент.ВыделенныеСтроки Цикл + Данные = Элемент.ДанныеСтроки(Строка); + СписокУдаления.Добавить(Данные.Ссылка); + КонецЦикла; + + Колво = СписокУдаления.Количество(); + Если Колво = 0 Тогда + Возврат; + ИначеЕсли Колво = 1 Тогда + Текст = НСтр("ru = 'Отменить регистрацию ""%2"" + |на узле ""%1""?'"); + Иначе + Текст = НСтр("ru = 'Отменить регистрацию выбранных объектов + |на узле ""%1""?'"); + КонецЕсли; + Текст = СтрЗаменить(Текст, "%1", УзелОбменаСсылка); + Текст = СтрЗаменить(Текст, "%2", СписокУдаления[0]); + + ЗаголовокВопроса = НСтр("ru = 'Подтверждение'"); + + Оповещение = Новый ОписаниеОповещения("УдалитьРегистрациюИзСпискаСсылокЗавершение", ЭтотОбъект, Новый Структура); + Оповещение.ДополнительныеПараметры.Вставить("СписокУдаления", СписокУдаления); + + ПоказатьВопрос(Оповещение, Текст, РежимДиалогаВопрос.ДаНет, , , ЗаголовокВопроса); +КонецПроцедуры + +// Обработчик оповещения продолжения диалога +&НаКлиенте +Процедура УдалитьРегистрациюИзСпискаСсылокЗавершение(Знач РезультатВопроса, Знач ДополнительныеПараметры) Экспорт + Если РезультатВопроса <> КодВозвратаДиалога.Да Тогда + Возврат; + КонецЕсли; + + СообщитьОРезультатахРегистрации(Ложь, + УдалитьРегистрациюНаСервере(Истина, УзелОбменаСсылка, ДополнительныеПараметры.СписокУдаления)); + + Элементы.СписокСсылок.Обновить(); + ЗаполнитьКоличествоРегистрацийВДереве(); +КонецПроцедуры + +&НаКлиенте +Процедура ДобавитьРегистрациюВНаборЗаписейОтбор() + ТекИмяФормы = ПолучитьИмяФормы() + "Форма.ВыборОбъектовОтбором"; + ТекПараметры = Новый Структура("ДействиеВыбора, ИмяТаблицы", + Истина, + СписокНаборовЗаписейИмяТаблицы); + ОткрытьФорму(ТекИмяФормы, ТекПараметры, Элементы.СписокНаборовЗаписей); +КонецПроцедуры + +&НаКлиенте +Процедура УдалитьРегистрациюВНабореЗаписей() + + СтруктураДанных = ""; + ИменаКлючей = МассивИменКлючейНабораЗаписей(СписокНаборовЗаписейИмяТаблицы); + Для Каждого Имя Из ИменаКлючей Цикл + СтруктураДанных = СтруктураДанных + "," + Имя; + КонецЦикла; + СтруктураДанных = Сред(СтруктураДанных, 2); + + Данные = Новый Массив; + Элемент = Элементы.СписокНаборовЗаписей; + Для Каждого Строка Из Элемент.ВыделенныеСтроки Цикл + ТекДанные = Элемент.ДанныеСтроки(Строка); + ДанныеСтроки = Новый Структура; + Для Каждого Имя Из ИменаКлючей Цикл + ДанныеСтроки.Вставить(Имя, ТекДанные["СписокНаборовЗаписей" + Имя]); + КонецЦикла; + Данные.Добавить(ДанныеСтроки); + КонецЦикла; + + Если Данные.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + Выбор = Новый Структура("ИмяТаблицы, ДанныеВыбора, ДействиеВыбора, СтруктураПолей", + СписокНаборовЗаписейИмяТаблицы, + Данные, + Ложь, + СтруктураДанных); + + ОбработкаВыбораДанных(Элементы.СписокНаборовЗаписей, Выбор); +КонецПроцедуры + +&НаКлиенте +Процедура УдалитьРегистрациюВНабореЗаписейОтбор() + ТекИмяФормы = ПолучитьИмяФормы() + "Форма.ВыборОбъектовОтбором"; + ТекПараметры = Новый Структура("ДействиеВыбора, ИмяТаблицы", + Ложь, + СписокНаборовЗаписейИмяТаблицы); + ОткрытьФорму(ТекИмяФормы, ТекПараметры, Элементы.СписокНаборовЗаписей); +КонецПроцедуры + +&НаКлиенте +Процедура ДобавитьРегистрациюВыделенныхОбъектов(БезУчетаАвторегистрации = Истина) + + Данные = ПолучитьВыбранныеИменаМетаданных(БезУчетаАвторегистрации); + Колво = Данные.МетаИмена.Количество(); + Если Колво = 0 Тогда + // Текущая строка + Данные = ПолучитьИменаМетаданныхТекущейСтроки(БезУчетаАвторегистрации); + КонецЕсли; + + Текст = НСтр("ru = 'Зарегистрировать %1 для выгрузки на узле ""%2""? + | + |Изменение регистрации большого количества объектов может занять продолжительное время!'"); + + Текст = СтрЗаменить(Текст, "%1", Данные.Описание); + Текст = СтрЗаменить(Текст, "%2", УзелОбменаСсылка); + + ЗаголовокВопроса = НСтр("ru = 'Подтверждение'"); + + Оповещение = Новый ОписаниеОповещения("ДобавитьРегистрациюВыделенныхОбъектовЗавершение", ЭтотОбъект, Новый Структура); + Оповещение.ДополнительныеПараметры.Вставить("МетаИмена", Данные.МетаИмена); + Оповещение.ДополнительныеПараметры.Вставить("БезУчетаАвторегистрации", БезУчетаАвторегистрации); + + ПоказатьВопрос(Оповещение, Текст, РежимДиалогаВопрос.ДаНет, , , ЗаголовокВопроса); +КонецПроцедуры + +// Обработчик оповещения продолжения диалога +&НаКлиенте +Процедура ДобавитьРегистрациюВыделенныхОбъектовЗавершение(Знач РезультатВопроса, Знач ДополнительныеПараметры) Экспорт + Если РезультатВопроса <> КодВозвратаДиалога.Да Тогда + Возврат; + КонецЕсли; + + Результат = ДобавитьРегистрациюНаСервере(ДополнительныеПараметры.БезУчетаАвторегистрации, + УзелОбменаСсылка, ДополнительныеПараметры.МетаИмена); + + ЗаполнитьКоличествоРегистрацийВДереве(); + ОбновитьСодержимоеСтраницы(); + СообщитьОРезультатахРегистрации(Истина, Результат); +КонецПроцедуры + +&НаКлиенте +Процедура УдалитьРегистрациюВыделенныхОбъектов(БезУчетаАвторегистрации = Истина) + + Данные = ПолучитьВыбранныеИменаМетаданных(БезУчетаАвторегистрации); + Колво = Данные.МетаИмена.Количество(); + Если Колво = 0 Тогда + Данные = ПолучитьИменаМетаданныхТекущейСтроки(БезУчетаАвторегистрации); + КонецЕсли; + + Текст = НСтр("ru = 'Отменить регистрацию %1 для выгрузки на узле ""%2""? + | + |Изменение регистрации большого количества объектов может занять продолжительное время!'"); + + ЗаголовокВопроса = НСтр("ru = 'Подтверждение'"); + + Текст = СтрЗаменить(Текст, "%1", Данные.Описание); + Текст = СтрЗаменить(Текст, "%2", УзелОбменаСсылка); + + Оповещение = Новый ОписаниеОповещения("УдалитьРегистрациюВыделенныхОбъектовЗавершение", ЭтотОбъект, Новый Структура); + Оповещение.ДополнительныеПараметры.Вставить("МетаИмена", Данные.МетаИмена); + Оповещение.ДополнительныеПараметры.Вставить("БезУчетаАвторегистрации", БезУчетаАвторегистрации); + + ПоказатьВопрос(Оповещение, Текст, РежимДиалогаВопрос.ДаНет, , , ЗаголовокВопроса); +КонецПроцедуры + +// Обработчик оповещения продолжения диалога +&НаКлиенте +Процедура УдалитьРегистрациюВыделенныхОбъектовЗавершение(Знач РезультатВопроса, Знач ДополнительныеПараметры) Экспорт + Если РезультатВопроса <> КодВозвратаДиалога.Да Тогда + Возврат; + КонецЕсли; + + СообщитьОРезультатахРегистрации(Ложь, + УдалитьРегистрациюНаСервере(ДополнительныеПараметры.БезУчетаАвторегистрации, + УзелОбменаСсылка, ДополнительныеПараметры.МетаИмена)); + + ЗаполнитьКоличествоРегистрацийВДереве(); + ОбновитьСодержимоеСтраницы(); +КонецПроцедуры + +&НаКлиенте +Процедура ОбработкаВыбораДанных(ТаблицаФормы, ВыбранноеЗначение) + + Ссылка = Неопределено; + Тип = ТипЗнч(ВыбранноеЗначение); + + Если Тип = Тип("Структура") Тогда + ИмяТаблицы = ВыбранноеЗначение.ИмяТаблицы; + Действие = ВыбранноеЗначение.ДействиеВыбора; + Данные = ВыбранноеЗначение.ДанныеВыбора; + Иначе + ИмяТаблицы = Неопределено; + Действие = Истина; + Если Тип = Тип("Массив") Тогда + Данные = ВыбранноеЗначение; + Иначе + Данные = Новый Массив; + Данные.Добавить(ВыбранноеЗначение); + КонецЕсли; + + Если Данные.Количество() = 1 Тогда + Ссылка = Данные[0]; + КонецЕсли; + КонецЕсли; + + Если Действие Тогда + Результат = ДобавитьРегистрациюНаСервере(Истина, УзелОбменаСсылка, Данные, ИмяТаблицы); + + ТаблицаФормы.Обновить(); + ЗаполнитьКоличествоРегистрацийВДереве(); + СообщитьОРезультатахРегистрации(Действие, Результат); + + ТаблицаФормы.ТекущаяСтрока = Ссылка; + Возврат; + КонецЕсли; + + Если Ссылка = Неопределено Тогда + Текст = НСтр("ru = 'Отменить регистрацию выбранных объектов + |на узле ""%1?'"); + Иначе + Текст = НСтр("ru = 'Отменить регистрацию ""%2"" + |на узле ""%1?'"); + КонецЕсли; + + Текст = СтрЗаменить(Текст, "%1", УзелОбменаСсылка); + Текст = СтрЗаменить(Текст, "%2", Ссылка); + + ЗаголовокВопроса = НСтр("ru = 'Подтверждение'"); + + Оповещение = Новый ОписаниеОповещения("ОбработкаВыбораДанныхЗавершение", ЭтотОбъект, Новый Структура); + Оповещение.ДополнительныеПараметры.Вставить("Действие", Действие); + Оповещение.ДополнительныеПараметры.Вставить("ТаблицаФормы", ТаблицаФормы); + Оповещение.ДополнительныеПараметры.Вставить("Данные", Данные); + Оповещение.ДополнительныеПараметры.Вставить("ИмяТаблицы", ИмяТаблицы); + Оповещение.ДополнительныеПараметры.Вставить("Ссылка", Ссылка); + + ПоказатьВопрос(Оповещение, Текст, РежимДиалогаВопрос.ДаНет, , ,ЗаголовокВопроса); +КонецПроцедуры + +// Обработчик оповещения продолжения диалога +&НаКлиенте +Процедура ОбработкаВыбораДанныхЗавершение(Знач РезультатВопроса, Знач ДополнительныеПараметры) Экспорт + Если РезультатВопроса <> КодВозвратаДиалога.Да Тогда + Возврат; + КонецЕсли; + + Результат = УдалитьРегистрациюНаСервере(Истина, УзелОбменаСсылка, ДополнительныеПараметры.Данные, ДополнительныеПараметры.ИмяТаблицы); + + ДополнительныеПараметры.ТаблицаФормы.Обновить(); + ЗаполнитьКоличествоРегистрацийВДереве(); + СообщитьОРезультатахРегистрации(ДополнительныеПараметры.Действие, Результат); + + ДополнительныеПараметры.ТаблицаФормы.ТекущаяСтрока = ДополнительныеПараметры.Ссылка; +КонецПроцедуры + +&НаСервере +Процедура ОбновитьСодержимоеСтраницы(Страница = Неопределено) + ТекСтр = ?(Страница = Неопределено, Элементы.ВариантыСпискаОбъектов.ТекущаяСтраница, Страница); + + Если ТекСтр = Элементы.СтраницаСписокСсылок Тогда + Элементы.СписокСсылок.Обновить(); + + ИначеЕсли ТекСтр = Элементы.СтраницаКонстанты Тогда + Элементы.СписокКонстант.Обновить(); + + ИначеЕсли ТекСтр = Элементы.СтраницаНаборЗаписей Тогда + Элементы.СписокНаборовЗаписей.Обновить(); + + ИначеЕсли ТекСтр = Элементы.СтраницаПустая Тогда + Строка = Элементы.ДеревоМетаданных.ТекущаяСтрока; + Если Строка <> Неопределено Тогда + Данные = ДеревоМетаданных.НайтиПоИдентификатору(Строка); + Если Данные <> Неопределено Тогда + НастроитьПустуюСтраницу(Данные.Наименование, Данные.МетаПолноеИмя); + КонецЕсли; + КонецЕсли; + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Функция ПолучитьТекущийОбъектРедактирования() + + ТекСтр = Элементы.ВариантыСпискаОбъектов.ТекущаяСтраница; + + Если ТекСтр = Элементы.СтраницаСписокСсылок Тогда + Данные = Элементы.СписокСсылок.ТекущиеДанные; + Если Данные <> Неопределено Тогда + Возврат Данные.Ссылка; + КонецЕсли; + + ИначеЕсли ТекСтр = Элементы.СтраницаКонстанты Тогда + Данные = Элементы.СписокКонстант.ТекущиеДанные; + Если Данные <> Неопределено Тогда + Возврат Данные.МетаПолноеИмя; + КонецЕсли; + + ИначеЕсли ТекСтр = Элементы.СтраницаНаборЗаписей Тогда + Данные = Элементы.СписокНаборовЗаписей.ТекущиеДанные; + Если Данные <> Неопределено Тогда + Результат = Новый Структура; + Измерения = МассивИменКлючейНабораЗаписей(СписокНаборовЗаписейИмяТаблицы); + Для Каждого Имя Из Измерения Цикл + Результат.Вставить(Имя, Данные["СписокНаборовЗаписей" + Имя]); + КонецЦикла; + КонецЕсли; + Возврат Результат; + + КонецЕсли; + + Возврат Неопределено; + +КонецФункции + +&НаКлиенте +Процедура ОткрытьФормуНастроекОбработки() + ТекИмяФормы = ПолучитьИмяФормы() + "Форма.Настройки"; + ОткрытьФорму(ТекИмяФормы, , ЭтотОбъект); +КонецПроцедуры + +&НаКлиенте +Процедура ОперацияСРезультатамиЗапроса(КомандаОперации) + + ТекИмяФормы = ПолучитьФормуВыбораРезультатаЗапроса(); + Если ТекИмяФормы <> Неопределено Тогда + // Открываем + Если КомандаОперации Тогда + Текст = НСтр("ru = 'Регистрация изменений результата запроса'"); + Иначе + Текст = НСтр("ru = 'Отмена регистрации изменений результата запроса'"); + КонецЕсли; + ОткрытьФорму(ТекИмяФормы, + Новый Структура("Заголовок, ДействиеВыбора, РежимВыбора, ЗакрыватьПриВыборе, ", + Текст, КомандаОперации, Истина, Ложь + ), ЭтотОбъект); + Возврат; + КонецЕсли; + + // Не настроено или что-то поломано, предлагаем выбрать + ТекстВопроса = НСтр("ru = 'В настройках не указана обработка для выполнения запросов. + |Настроить сейчас?'"); + + ЗаголовокВопроса = НСтр("ru = 'Настройки'"); + + Оповещение = Новый ОписаниеОповещения("ОперацияСРезультатамиЗапросаЗавершение", ЭтотОбъект); + ПоказатьВопрос(Оповещение, Текст, РежимДиалогаВопрос.ДаНет, , , ЗаголовокВопроса); +КонецПроцедуры + +// Обработчик оповещения продолжения диалога +&НаКлиенте +Процедура ОперацияСРезультатамиЗапросаЗавершение(Знач РезультатВопроса, Знач ДополнительныеПараметры) Экспорт + Если РезультатВопроса <> КодВозвратаДиалога.Да Тогда + Возврат; + КонецЕсли; + + ОткрытьФормуНастроекОбработки(); +КонецПроцедуры + +&НаСервере +Функция ЗакавычитьСтроку(Строка) + Возврат СтрЗаменить(Строка, """", """"""); +КонецФункции + +&НаСервере +Функция ЭтотОбъект(ТекущийОбъект = Неопределено) + Если ТекущийОбъект = Неопределено Тогда + Возврат РеквизитФормыВЗначение("Объект"); + КонецЕсли; + ЗначениеВРеквизитФормы(ТекущийОбъект, "Объект"); + Возврат Неопределено; +КонецФункции + +&НаСервере +Функция ПолучитьИмяФормы(ТекущийОбъект = Неопределено) + Возврат ЭтотОбъект().ПолучитьИмяФормы(ТекущийОбъект); +КонецФункции + +&НаСервере +Функция ОсновнаяТаблицаДинамическогоСписка(РеквизитФормы) + Возврат РеквизитФормы.ОсновнаяТаблица; +КонецФункции + +&НаСервере +Процедура ИзменениеПометки(Строка) + ЭлементДанных = ДеревоМетаданных.НайтиПоИдентификатору(Строка); + ЭтотОбъект().ИзменениеПометки(ЭлементДанных); +КонецПроцедуры + +&НаСервере +Процедура ПрочитатьДеревоМетаданных() + Данные = ЭтотОбъект().СформироватьСтруктуруМетаданных(УзелОбменаСсылка); + + // Удаляем строки, которые нельзя редактировать + МетаДерево = Данные.Дерево; + Для Каждого ЭлементСписка Из ИменаСкрываемыхМетаданных Цикл + УдалитьСтрокиДереваЗначенийМетаданных(ЭлементСписка.Значение, МетаДерево.Строки); + КонецЦикла; + + ЗначениеВРеквизитФормы(МетаДерево, "ДеревоМетаданных"); + СтруктураАвторегистрацииМетаданных = Данные.СтруктураАвторегистрации; + СтруктураПредставленийМетаданных = Данные.СтруктураПредставлений; + СтруктураИменМетаданных = Данные.СтруктураИмен; +КонецПроцедуры + +&НаСервере +Процедура УдалитьСтрокиДереваЗначенийМетаданных(Знач МетаПолноеИмя, СтрокиДерева) + Если ПустаяСтрока(МетаПолноеИмя) Тогда + Возврат; + КонецЕсли; + + // В текущем наборе + Фильтр = Новый Структура("МетаПолноеИмя", МетаПолноеИмя); + Для Каждого СтрокаУдаления Из СтрокиДерева.НайтиСтроки(Фильтр, Ложь) Цикл + СтрокиДерева.Удалить(СтрокаУдаления); + // Если это был последний потомок, то удаляем и родителя + Если СтрокиДерева.Количество() = 0 Тогда + РодительскаяСтрока = СтрокиДерева.Родитель; + Если РодительскаяСтрока.Родитель <> Неопределено Тогда + РодительскаяСтрока.Родитель.Строки.Удалить(РодительскаяСтрока); + // И иерархически вниз уже не ходим + Возврат; + КонецЕсли; + КонецЕсли; + КонецЦикла; + + // Удаляем из оставшихся подчиненных + Для Каждого СтрокаДерева Из СтрокиДерева Цикл + УдалитьСтрокиДереваЗначенийМетаданных(МетаПолноеИмя, СтрокаДерева.Строки); + КонецЦикла; +КонецПроцедуры + +&НаСервере +Процедура ФорматироватьКоличествоИзменений(Строка) + Строка.КоличествоИзмененийСтрокой = Формат(Строка.КоличествоИзменений, "ЧН=") + " / " + Формат(Строка.КоличествоНеВыгруженных, "ЧН="); +КонецПроцедуры + +&НаСервере +Процедура ЗаполнитьКоличествоРегистрацийВДереве() + + Данные = ЭтотОбъект().ПолучитьКоличествоИзменений(СтруктураИменМетаданных, УзелОбменаСсылка); + + // Проставляем в дерево + Фильтр = Новый Структура("МетаПолноеИмя, УзелОбмена", Неопределено, УзелОбменаСсылка); + Нули = Новый Структура("КоличествоИзменений, КоличествоВыгруженных, КоличествоНеВыгруженных", 0,0,0); + + Для Каждого Корень Из ДеревоМетаданных.ПолучитьЭлементы() Цикл + СуммаКорень = Новый Структура("КоличествоИзменений, КоличествоВыгруженных, КоличествоНеВыгруженных", 0,0,0); + + Для Каждого Группа Из Корень.ПолучитьЭлементы() Цикл + СуммаГруппа = Новый Структура("КоличествоИзменений, КоличествоВыгруженных, КоличествоНеВыгруженных", 0,0,0); + + СписокУзлов = Группа.ПолучитьЭлементы(); + Если СписокУзлов.Количество() = 0 И СтруктураИменМетаданных.Свойство(Группа.МетаПолноеИмя) Тогда + // Коллекция узлов без узлов, просуммируем руками, авторегистрацию возьмем из структуры + Для Каждого МетаИмя Из СтруктураИменМетаданных[Группа.МетаПолноеИмя] Цикл + Фильтр.МетаПолноеИмя = МетаИмя; + Найдено = Данные.НайтиСтроки(Фильтр); + Если Найдено.Количество() > 0 Тогда + Строка = Найдено[0]; + СуммаГруппа.КоличествоИзменений = СуммаГруппа.КоличествоИзменений + Строка.КоличествоИзменений; + СуммаГруппа.КоличествоВыгруженных = СуммаГруппа.КоличествоВыгруженных + Строка.КоличествоВыгруженных; + СуммаГруппа.КоличествоНеВыгруженных = СуммаГруппа.КоличествоНеВыгруженных + Строка.КоличествоНеВыгруженных; + КонецЕсли; + КонецЦикла; + + Иначе + // Считаем по каждому узлу + Для Каждого Узел Из СписокУзлов Цикл + Фильтр.МетаПолноеИмя = Узел.МетаПолноеИмя; + Найдено = Данные.НайтиСтроки(Фильтр); + Если Найдено.Количество() > 0 Тогда + Строка = Найдено[0]; + ЗаполнитьЗначенияСвойств(Узел, Строка, "КоличествоИзменений, КоличествоВыгруженных, КоличествоНеВыгруженных"); + СуммаГруппа.КоличествоИзменений = СуммаГруппа.КоличествоИзменений + Строка.КоличествоИзменений; + СуммаГруппа.КоличествоВыгруженных = СуммаГруппа.КоличествоВыгруженных + Строка.КоличествоВыгруженных; + СуммаГруппа.КоличествоНеВыгруженных = СуммаГруппа.КоличествоНеВыгруженных + Строка.КоличествоНеВыгруженных; + Иначе + ЗаполнитьЗначенияСвойств(Узел, Нули); + КонецЕсли; + + ФорматироватьКоличествоИзменений(Узел); + КонецЦикла; + + КонецЕсли; + ЗаполнитьЗначенияСвойств(Группа, СуммаГруппа); + + СуммаКорень.КоличествоИзменений = СуммаКорень.КоличествоИзменений + Группа.КоличествоИзменений; + СуммаКорень.КоличествоВыгруженных = СуммаКорень.КоличествоВыгруженных + Группа.КоличествоВыгруженных; + СуммаКорень.КоличествоНеВыгруженных = СуммаКорень.КоличествоНеВыгруженных + Группа.КоличествоНеВыгруженных; + + ФорматироватьКоличествоИзменений(Группа); + КонецЦикла; + + ЗаполнитьЗначенияСвойств(Корень, СуммаКорень); + + ФорматироватьКоличествоИзменений(Корень); + КонецЦикла; + +КонецПроцедуры + +&НаСервере +Функция ИзменитьРегистрациюРезультатаЗапросаСервер(Команда, Адрес) + + Результат = ПолучитьИзВременногоХранилища(Адрес); + Результат= Результат[Результат.ВГраница()]; + Данные = Результат.Выгрузить().ВыгрузитьКолонку("Ссылка"); + + Если Команда Тогда + Возврат ДобавитьРегистрациюНаСервере(Истина, УзелОбменаСсылка, Данные); + КонецЕсли; + + Возврат УдалитьРегистрациюНаСервере(Истина, УзелОбменаСсылка, Данные); +КонецФункции + +&НаСервере +Функция КонтрольСсылокДляВыбораЗапросом(Адрес) + + Результат = ?(Адрес = Неопределено, Неопределено, ПолучитьИзВременногоХранилища(Адрес)); + Если ТипЗнч(Результат) = Тип("Массив") Тогда + Результат = Результат[Результат.ВГраница()]; + Если Результат.Колонки.Найти("Ссылка") = Неопределено Тогда + Возврат НСтр("ru = 'В последнем результате запроса отсутствует колонка ""Ссылка""'"); + КонецЕсли; + Иначе + Возврат НСтр("ru = 'Ошибка получения данных результата запроса'"); + КонецЕсли; + + Возврат ""; +КонецФункции + +&НаСервере +Процедура НастроитьРедактированиеИзмененийСервер(ТекущаяСтрока) + + Данные = ДеревоМетаданных.НайтиПоИдентификатору(ТекущаяСтрока); + Если Данные = Неопределено Тогда + Возврат; + КонецЕсли; + + ИмяТаблицы = Данные.МетаПолноеИмя; + Наименование = Данные.Наименование; + ТекущийОбъект = ЭтотОбъект(); + + Если ПустаяСтрока(ИмяТаблицы) Тогда + Мета = Неопределено; + Иначе + Мета = ТекущийОбъект.МетаданныеПоПолномуИмени(ИмяТаблицы); + КонецЕсли; + + Если Мета = Неопределено Тогда + НастроитьПустуюСтраницу(Наименование, ИмяТаблицы); + НовСтраница = Элементы.СтраницаПустая; + + ИначеЕсли Мета = Метаданные.Константы Тогда + // Все константы системы + НастроитьСписокКонстант(); + НовСтраница = Элементы.СтраницаКонстанты; + + ИначеЕсли ТипЗнч(Мета) = Тип("КоллекцияОбъектовМетаданных") Тогда + // Все справочники, документы, и т.п. + НастроитьПустуюСтраницу(Наименование, ИмяТаблицы); + НовСтраница = Элементы.СтраницаПустая; + + ИначеЕсли Метаданные.Константы.Содержит(Мета) Тогда + // Одиночная константа + НастроитьСписокКонстант(ИмяТаблицы, Наименование); + НовСтраница = Элементы.СтраницаКонстанты; + + ИначеЕсли Метаданные.Справочники.Содержит(Мета) + Или Метаданные.Документы.Содержит(Мета) + Или Метаданные.ПланыВидовХарактеристик.Содержит(Мета) + Или Метаданные.ПланыСчетов.Содержит(Мета) + Или Метаданные.ПланыВидовРасчета.Содержит(Мета) + Или Метаданные.БизнесПроцессы.Содержит(Мета) + Или Метаданные.Задачи.Содержит(Мета) + Тогда + // Ссылочный тип + НастроитьСписокСсылок(ИмяТаблицы, Наименование); + НовСтраница = Элементы.СтраницаСписокСсылок; + + Иначе + // Проверим на набор записей + Измерения = ТекущийОбъект.ИзмеренияНабораЗаписей(ИмяТаблицы); + Если Измерения <> Неопределено Тогда + НастроитьНаборЗаписей(ИмяТаблицы, Измерения, Наименование); + НовСтраница = Элементы.СтраницаНаборЗаписей; + Иначе + НастроитьПустуюСтраницу(Наименование, ИмяТаблицы); + НовСтраница = Элементы.СтраницаПустая; + КонецЕсли; + + КонецЕсли; + + Элементы.СтраницаКонстанты.Видимость = Ложь; + Элементы.СтраницаСписокСсылок.Видимость = Ложь; + Элементы.СтраницаНаборЗаписей.Видимость = Ложь; + Элементы.СтраницаПустая.Видимость = Ложь; + + Элементы.ВариантыСпискаОбъектов.ТекущаяСтраница = НовСтраница; + НовСтраница.Видимость = Истина; + + НастроитьВидимостьКомандОбщегоМеню(); +КонецПроцедуры + +// Вывод изменений для ссылочного типа (справочник, документ, план видов характеристик, +// план счетов, вид расчета, бизнес-процессы, задачи) +// +&НаСервере +Процедура НастроитьСписокСсылок(ИмяТаблицы, Наименование) + + СписокСсылок.ТекстЗапроса = " + |ВЫБРАТЬ + | ТаблицаИзменений.Ссылка КАК Ссылка, + | ТаблицаИзменений.НомерСообщения КАК НомерСообщения, + | ВЫБОР + | КОГДА ТаблицаИзменений.НомерСообщения ЕСТЬ NULL ТОГДА ИСТИНА ИНАЧЕ ЛОЖЬ + | КОНЕЦ КАК НеВыгружалось, + | + | ОсновнаяТаблица.Ссылка КАК СсылкаОбъекта + |ИЗ + | " + ИмяТаблицы + " КАК ОсновнаяТаблица + |ПРАВОЕ СОЕДИНЕНИЕ + | " + ИмяТаблицы + ".Изменения КАК ТаблицаИзменений + |ПО + | ОсновнаяТаблица.Ссылка = ТаблицаИзменений.Ссылка + |ГДЕ + | ТаблицаИзменений.Узел = &ВыбранныйУзел + |"; + + СписокСсылок.Параметры.УстановитьЗначениеПараметра("ВыбранныйУзел", УзелОбменаСсылка); + СписокСсылок.ОсновнаяТаблица = ИмяТаблицы; + СписокСсылок.ДинамическоеСчитываниеДанных = Истина; + + // Представление объекта + Мета = ЭтотОбъект().МетаданныеПоПолномуИмени(ИмяТаблицы); + ТекЗаголовок = Мета.ПредставлениеОбъекта; + Если ПустаяСтрока(ТекЗаголовок) Тогда + ТекЗаголовок = Наименование; + КонецЕсли; + Элементы.СписокСсылокСсылкаПредставление.Заголовок = ТекЗаголовок; +КонецПроцедуры + +// Вывод изменений для констант +// +&НаСервере +Процедура НастроитьСписокКонстант(ИмяТаблицы = Неопределено, Наименование = "") + + Если ИмяТаблицы = Неопределено Тогда + // Все константы + Имена = СтруктураИменМетаданных.Константы; + Представления = СтруктураПредставленийМетаданных.Константы; + Авторегистрация = СтруктураАвторегистрацииМетаданных.Константы; + Иначе + Имена = Новый Массив; + Имена.Добавить(ИмяТаблицы); + Представления = Новый Массив; + Представления.Добавить(Наименование); + Индекс = СтруктураИменМетаданных.Константы.Найти(ИмяТаблицы); + Авторегистрация = Новый Массив; + Авторегистрация.Добавить(СтруктураАвторегистрацииМетаданных.Константы[Индекс]); + КонецЕсли; + + // И помнить про ограничение на количество таблиц + Текст = ""; + Для Индекс = 0 По Имена.ВГраница() Цикл + Имя = Имена[Индекс]; + Текст = Текст + ?(Текст = "", "ВЫБРАТЬ", "ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ") + " + | " + Формат(Авторегистрация[Индекс], "ЧН=; ЧГ=") + " КАК ИндексКартинкиАвторегистрация, + | 2 КАК ИндексКартинки, + | + | """ + ЗакавычитьСтроку(Представления[Индекс]) + """ КАК Наименование, + | """ + Имя + """ КАК МетаПолноеИмя, + | + | ТаблицаИзменений.НомерСообщения КАК НомерСообщения, + | ВЫБОР + | КОГДА ТаблицаИзменений.НомерСообщения ЕСТЬ NULL ТОГДА ИСТИНА ИНАЧЕ ЛОЖЬ + | КОНЕЦ КАК НеВыгружалось + |ИЗ + | " + Имя + ".Изменения КАК ТаблицаИзменений + |ГДЕ + | ТаблицаИзменений.Узел = &ВыбранныйУзел + |"; + КонецЦикла; + + СписокКонстант.ТекстЗапроса = " + |ВЫБРАТЬ + | ИндексКартинкиАвторегистрация, ИндексКартинки, МетаПолноеИмя, НеВыгружалось, + | Наименование, НомерСообщения + | + |{ВЫБРАТЬ + | ИндексКартинкиАвторегистрация, ИндексКартинки, + | Наименование, МетаПолноеИмя, + | НомерСообщения, НеВыгружалось + |} + | + |ИЗ (" + Текст + ") Данные + | + |{ГДЕ + | Наименование, НомерСообщения, НеВыгружалось + |} + |"; + + ЭлементыСписка = СписокКонстант.Порядок.Элементы; + Если ЭлементыСписка.Количество() = 0 Тогда + Элемент = ЭлементыСписка.Добавить(Тип("ЭлементПорядкаКомпоновкиДанных")); + Элемент.Поле = Новый ПолеКомпоновкиДанных("Наименование"); + Элемент.Использование = Истина; + КонецЕсли; + + СписокКонстант.Параметры.УстановитьЗначениеПараметра("ВыбранныйУзел", УзелОбменаСсылка); + СписокКонстант.ДинамическоеСчитываниеДанных = Истина; +КонецПроцедуры + +// Вывод заглушки с пустой страницей. +&НаСервере +Процедура НастроитьПустуюСтраницу(Наименование, ИмяТаблицы = Неопределено) + + Если ИмяТаблицы = Неопределено Тогда + ТекстКоличеств = ""; + Иначе + Дерево = РеквизитФормыВЗначение("ДеревоМетаданных"); + Строка = Дерево.Строки.Найти(ИмяТаблицы, "МетаПолноеИмя", Истина); + Если Строка <> Неопределено Тогда + ТекстКоличеств = НСтр("ru = 'Зарегистрировано объектов: %1 + |Выгружено объектов: %2 + |Не выгружено объектов: %3 + |'"); + + ТекстКоличеств = СтрЗаменить(ТекстКоличеств, "%1", Формат(Строка.КоличествоИзменений, "ЧДЦ=0; ЧН=")); + ТекстКоличеств = СтрЗаменить(ТекстКоличеств, "%2", Формат(Строка.КоличествоВыгруженных, "ЧДЦ=0; ЧН=")); + ТекстКоличеств = СтрЗаменить(ТекстКоличеств, "%3", Формат(Строка.КоличествоНевыгруженных, "ЧДЦ=0; ЧН=")); + КонецЕсли; + КонецЕсли; + + Текст = НСтр("ru = '%1. + | + |%2 + |Для регистрации или отмены регистрации обмена данными на узле + |""%3"" + |выберите тип объекта слева в дереве метаданных и воспользуйтесь + |командами ""Зарегистрировать"" или ""Отменить регистрацию""'"); + + Текст = СтрЗаменить(Текст, "%1", Наименование); + Текст = СтрЗаменить(Текст, "%2", ТекстКоличеств); + Текст = СтрЗаменить(Текст, "%3", УзелОбменаСсылка); + Элементы.ДекорацияПустаяСтраница.Заголовок = Текст; +КонецПроцедуры + +// Вывод изменений для наборов записей +// +&НаСервере +Процедура НастроитьНаборЗаписей(ИмяТаблицы, Измерения, Наименование) + + ТекстВыбора = ""; + Префикс = "СписокНаборовЗаписей"; + Для Каждого Строка Из Измерения Цикл + Имя = Строка.Имя; + ТекстВыбора = ТекстВыбора + ",ТаблицаИзменений." + Имя + " КАК " + Префикс + Имя + Символы.ПС; + // Чтобы не наступить на измерение "НомерСообщения" или "НеВыгружалось" + Строка.Имя = Префикс + Имя; + КонецЦикла; + + СписокНаборовЗаписей.ТекстЗапроса = " + |ВЫБРАТЬ РАЗРЕШЕННЫЕ + | ТаблицаИзменений.НомерСообщения КАК НомерСообщения, + | ВЫБОР + | КОГДА ТаблицаИзменений.НомерСообщения ЕСТЬ NULL ТОГДА ИСТИНА ИНАЧЕ ЛОЖЬ + | КОНЕЦ КАК НеВыгружалось + | + | " + ТекстВыбора + " + |ИЗ + | " + ИмяТаблицы + ".Изменения КАК ТаблицаИзменений + |ГДЕ + | ТаблицаИзменений.Узел = &ВыбранныйУзел + |"; + СписокНаборовЗаписей.Параметры.УстановитьЗначениеПараметра("ВыбранныйУзел", УзелОбменаСсылка); + + // Добавляем в группу измерений + ЭтотОбъект().ДобавитьКолонкиВТаблицуФормы( + Элементы.СписокНаборовЗаписей, + "НомерСообщения, НеВыгружалось, + |Порядок, Отбор, Группировка, СтандартнаяКартинка, Параметры, УсловноеОформление", + Измерения, + Элементы.СписокНаборовЗаписейГруппаИзмерений); + СписокНаборовЗаписей.ДинамическоеСчитываниеДанных = Истина; + СписокНаборовЗаписейИмяТаблицы = ИмяТаблицы; +КонецПроцедуры + +// Общий отбор по полю "НомерСообщения" +// +&НаСервере +Процедура УстановитьОтборПоНомеруСообщения(ДинамоСписок, Вариант) + + Поле = Новый ПолеКомпоновкиДанных("НеВыгружалось"); + // Ищем свое поле, попутно отключаем все по нему + ЭлементыСписка = ДинамоСписок.Отбор.Элементы; + Индекс = ЭлементыСписка.Количество(); + Пока Индекс > 0 Цикл + Индекс = Индекс - 1; + Элемент = ЭлементыСписка[Индекс]; + Если Элемент.ЛевоеЗначение = Поле Тогда + ЭлементыСписка.Удалить(Элемент); + КонецЕсли; + КонецЦикла; + + ЭлементОтбора = ЭлементыСписка.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ЭлементОтбора.ЛевоеЗначение = Поле; + ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ЭлементОтбора.Использование = Ложь; + ЭлементОтбора.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный; + + Если Вариант = 1 Тогда // Выгруженные + ЭлементОтбора.ПравоеЗначение = Ложь; + ЭлементОтбора.Использование = Истина; + + ИначеЕсли Вариант = 2 Тогда // Не выгруженные + ЭлементОтбора.ПравоеЗначение = Истина; + ЭлементОтбора.Использование = Истина; + + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура НастроитьВидимостьКомандОбщегоМеню() + + ТекСтр = Элементы.ВариантыСпискаОбъектов.ТекущаяСтраница; + + Если ТекСтр = Элементы.СтраницаКонстанты Тогда + Элементы.ФормаДобавитьРегистрациюОдногоОбъекта.Доступность = Истина; + Элементы.ФормаДобавитьРегистрациюОтбор.Доступность = Ложь; + Элементы.ФормаУдалитьРегистрациюОдногоОбъекта.Доступность = Истина; + Элементы.ФормаУдалитьРегистрациюОтбор.Доступность = Ложь; + + ИначеЕсли ТекСтр = Элементы.СтраницаСписокСсылок Тогда + Элементы.ФормаДобавитьРегистрациюОдногоОбъекта.Доступность = Истина; + Элементы.ФормаДобавитьРегистрациюОтбор.Доступность = Истина; + Элементы.ФормаУдалитьРегистрациюОдногоОбъекта.Доступность = Истина; + Элементы.ФормаУдалитьРегистрациюОтбор.Доступность = Истина; + + ИначеЕсли ТекСтр = Элементы.СтраницаНаборЗаписей Тогда + Элементы.ФормаДобавитьРегистрациюОдногоОбъекта.Доступность = Истина; + Элементы.ФормаДобавитьРегистрациюОтбор.Доступность = Ложь; + Элементы.ФормаУдалитьРегистрациюОдногоОбъекта.Доступность = Истина; + Элементы.ФормаУдалитьРегистрациюОтбор.Доступность = Ложь; + + Иначе + Элементы.ФормаДобавитьРегистрациюОдногоОбъекта.Доступность = Ложь; + Элементы.ФормаДобавитьРегистрациюОтбор.Доступность = Ложь; + Элементы.ФормаУдалитьРегистрациюОдногоОбъекта.Доступность = Ложь; + Элементы.ФормаУдалитьРегистрациюОтбор.Доступность = Ложь; + + КонецЕсли; +КонецПроцедуры + +&НаСервере +Функция МассивИменКлючейНабораЗаписей(ИмяТаблицы, ПрефиксИмен = "") + Результат = Новый Массив; + Измерения = ЭтотОбъект().ИзмеренияНабораЗаписей(ИмяТаблицы); + Если Измерения <> Неопределено Тогда + Для Каждого Строка Из Измерения Цикл + Результат.Добавить(ПрефиксИмен + Строка.Имя); + КонецЦикла; + КонецЕсли; + Возврат Результат; +КонецФункции + +&НаСервере +Функция МенеджерПоМетаданным(ИмяТаблицы) + Описание = ЭтотОбъект().ХарактеристикиПоМетаданным(ИмяТаблицы); + Если Описание <> Неопределено Тогда + Возврат Описание.Менеджер; + КонецЕсли; + Возврат Неопределено; +КонецФункции + +//&НаСервере +//Функция ТекстСериализации(Сериализация) +// +// //Текст = Новый ТекстовыйДокумент; +// +// Запись = Новый ЗаписьXML; +// Для Каждого Элемент Из Сериализация Цикл +// Запись.УстановитьСтроку("UTF-16"); +// Значение = Неопределено; +// +// Если Элемент.ФлагТипа = 1 Тогда +// // Метаданные +// Менеджер = МенеджерПоМетаданным(Элемент.Данные); +// Значение = Менеджер.СоздатьМенеджерЗначения(); +// +// ИначеЕсли Элемент.ФлагТипа = 2 Тогда +// // Набор данных с отбором +// Менеджер = МенеджерПоМетаданным(СписокНаборовЗаписейИмяТаблицы); +// Значение = Менеджер.СоздатьНаборЗаписей(); +// Отбор = Значение.Отбор; +// Для Каждого ИмяЗначение Из Элемент.Данные Цикл +// Отбор[ИмяЗначение.Ключ].Установить(ИмяЗначение.Значение); +// КонецЦикла; +// Значение.Прочитать(); +// +// ИначеЕсли Элемент.ФлагТипа = 3 Тогда +// // Ссылка +// Значение = Элемент.Данные.ПолучитьОбъект(); +// Если Значение = Неопределено Тогда +// Значение = Новый УдалениеОбъекта(Элемент.Данные); +// КонецЕсли; +// КонецЕсли; +// +// ЗаписатьXML(Запись, Значение); +// //Текст.ДобавитьСтроку(Запись.Закрыть()); +// КонецЦикла; +// +// Возврат Текст; +//КонецФункции + +&НаСервере +Функция УдалитьРегистрациюНаСервере(БезУчетаАвторегистрации, Узел, Удаляемые, ИмяТаблицы = Неопределено) + Возврат ЭтотОбъект().ИзменитьРегистрациюНаСервере(Ложь, БезУчетаАвторегистрации, Узел, Удаляемые, ИмяТаблицы); +КонецФункции + +&НаСервере +Функция ДобавитьРегистрациюНаСервере(БезУчетаАвторегистрации, Узел, Добавляемые, ИмяТаблицы = Неопределено) + Возврат ЭтотОбъект().ИзменитьРегистрациюНаСервере(Истина, БезУчетаАвторегистрации, Узел, Добавляемые, ИмяТаблицы); +КонецФункции + +&НаСервере +Функция ИзменитьНомерСообщенияНаСервере(Узел, НомерСообщения, Данные, ИмяТаблицы = Неопределено) + Возврат ЭтотОбъект().ИзменитьРегистрациюНаСервере(НомерСообщения, Истина, Узел, Данные, ИмяТаблицы); +КонецФункции + +&НаСервере +Функция ПолучитьОписаниеВыбранныхМетаданных(БезУчетаАвторегистрации, МетаИмяГруппа = Неопределено, МетаИмяУзел = Неопределено) + + Если МетаИмяГруппа = Неопределено И МетаИмяУзел = Неопределено Тогда + // Не указано ничего + Текст = НСтр("ru = 'все объекты %1 по выбранной иерархии вида'"); + + ИначеЕсли МетаИмяГруппа <> Неопределено И МетаИмяУзел = Неопределено Тогда + // Указана только группа, рассматриваем ее как наименование группы + Текст = "%2 %1"; + + ИначеЕсли МетаИмяГруппа = Неопределено И МетаИмяУзел <> Неопределено Тогда + // Указан только узел, рассматриваем как много выделенных объектов + Текст = НСтр("ru = 'все объекты %1 по выбранной иерархии вида'"); + + Иначе + // Указаны и группа и узел, рассматриваем как имена метаданных + Текст = НСтр("ru = 'все объекты типа ""%3"" %1'"); + + КонецЕсли; + + Если БезУчетаАвторегистрации Тогда + ТекстФлага = ""; + Иначе + ТекстФлага = НСтр("ru = 'с признаком авторегистрации'"); + КонецЕсли; + + Представление = ""; + Для Каждого КлючЗначение Из СтруктураПредставленийМетаданных Цикл + Если КлючЗначение.Ключ = МетаИмяГруппа Тогда + Индекс = СтруктураИменМетаданных[МетаИмяГруппа].Найти(МетаИмяУзел); + Представление = ?(Индекс = Неопределено, "", КлючЗначение.Значение[Индекс]); + Прервать; + КонецЕсли; + КонецЦикла; + + Текст = СтрЗаменить(Текст, "%1", ТекстФлага); + Текст = СтрЗаменить(Текст, "%2", НРег(МетаИмяГруппа)); + Текст = СтрЗаменить(Текст, "%3", Представление); + + Возврат СокрЛП(Текст); +КонецФункции + +&НаСервере +Функция ПолучитьИменаМетаданныхТекущейСтроки(БезУчетаАвторегистрации) + + Строка = ДеревоМетаданных.НайтиПоИдентификатору(Элементы.ДеревоМетаданных.ТекущаяСтрока); + Если Строка = Неопределено Тогда + Возврат Неопределено; + КонецЕсли; + + Результат = Новый Структура("МетаИмена, Описание", + Новый Массив, ПолучитьОписаниеВыбранныхМетаданных(БезУчетаАвторегистрации)); + МетаИмя = Строка.МетаПолноеИмя; + Если ПустаяСтрока(МетаИмя) Тогда + Результат.МетаИмена.Добавить(Неопределено); + Иначе + Результат.МетаИмена.Добавить(МетаИмя); + + Родитель = Строка.ПолучитьРодителя(); + МетаРодительИмя = Родитель.МетаПолноеИмя; + Если ПустаяСтрока(МетаРодительИмя) Тогда + Результат.Описание = ПолучитьОписаниеВыбранныхМетаданных(БезУчетаАвторегистрации, Строка.Наименование); + Иначе + Результат.Описание = ПолучитьОписаниеВыбранныхМетаданных(БезУчетаАвторегистрации, МетаРодительИмя, МетаИмя); + КонецЕсли; + КонецЕсли; + + Возврат Результат; +КонецФункции + +&НаСервере +Функция ПолучитьВыбранныеИменаМетаданных(БезУчетаАвторегистрации) + + Результат = Новый Структура("МетаИмена, Описание", + Новый Массив, ПолучитьОписаниеВыбранныхМетаданных(БезУчетаАвторегистрации)); + + Для Каждого Корень Из ДеревоМетаданных.ПолучитьЭлементы() Цикл + + Если Корень.Пометка = 1 Тогда + Результат.МетаИмена.Добавить(Неопределено); + Возврат Результат; + КонецЕсли; + + КолвоЧастичных = 0; + КолвоГрупп = 0; + КолвоУзлов = 0; + Для Каждого Группа Из Корень.ПолучитьЭлементы() Цикл + + Если Группа.Пометка = 0 Тогда + Продолжить; + ИначеЕсли Группа.Пометка = 1 Тогда + // Весь группа целиком, смотрим откуда выбирать значения + КолвоГрупп = КолвоГрупп + 1; + ОписаниеГруппы = ПолучитьОписаниеВыбранныхМетаданных(БезУчетаАвторегистрации, Группа.Наименование); + + Если Группа.ПолучитьЭлементы().Количество() = 0 Тогда + // Пробуем из структуры имен метаданных, считаем все отмеченными + МассивПредставлений = СтруктураПредставленийМетаданных[Группа.МетаПолноеИмя]; + МассивАвто = СтруктураАвторегистрацииМетаданных[Группа.МетаПолноеИмя]; + МассивИмен = СтруктураИменМетаданных[Группа.МетаПолноеИмя]; + Для Индекс = 0 По МассивИмен.ВГраница() Цикл + Если БезУчетаАвторегистрации Или МассивАвто[Индекс] = 2 Тогда + Результат.МетаИмена.Добавить(МассивИмен[Индекс]); + ОписаниеУзла = ПолучитьОписаниеВыбранныхМетаданных(БезУчетаАвторегистрации, Группа.МетаПолноеИмя, МассивИмен[Индекс]); + КонецЕсли; + КонецЦикла; + + Продолжить; + КонецЕсли; + + Иначе + КолвоЧастичных = КолвоЧастичных + 1; + КонецЕсли; + + Для Каждого Узел Из Группа.ПолучитьЭлементы() Цикл + Если Узел.Пометка = 1 Тогда + // Узел.Авторегистрация = 2 -> разрешена + Если БезУчетаАвторегистрации Или Узел.Авторегистрация = 2 Тогда + Результат.МетаИмена.Добавить(Узел.МетаПолноеИмя); + ОписаниеУзла = ПолучитьОписаниеВыбранныхМетаданных(БезУчетаАвторегистрации, Группа.МетаПолноеИмя, Узел.МетаПолноеИмя); + КолвоУзлов = КолвоУзлов + 1; + КонецЕсли; + КонецЕсли + КонецЦикла; + + КонецЦикла; + + Если КолвоГрупп = 1 И КолвоЧастичных = 0 Тогда + Результат.Описание = ОписаниеГруппы; + ИначеЕсли КолвоГрупп = 0 И КолвоУзлов = 1 Тогда + Результат.Описание = ОписаниеУзла; + КонецЕсли; + + КонецЦикла; + + Возврат Результат; +КонецФункции + +&НаСервере +Функция ПрочитатьНомераСообщений() + РеквизитыЗапроса = "НомерОтправленного, НомерПринятого"; + Данные = ЭтотОбъект().ПолучитьПараметрыУзлаОбмена(УзелОбменаСсылка, РеквизитыЗапроса); + Если Данные = Неопределено Тогда + Возврат Новый Структура(РеквизитыЗапроса) + КонецЕсли; + Возврат Данные; +КонецФункции + +&НаСервере +Процедура ОбработатьЗапретИзмененияУзла() + ОперацииРазрешены = Не ЗапрещеноВыбиратьУзелОбмена; + + Если ОперацииРазрешены Тогда + Элементы.УзелОбменаСсылка.Видимость = Истина; + Заголовок = НСтр("ru = 'Регистрация изменений для обмена данными'"); + Иначе + Элементы.УзелОбменаСсылка.Видимость = Ложь; + Заголовок = СтрЗаменить(НСтр("ru = 'Регистрация изменений для обмена с ""%1""'"), "%1", Строка(УзелОбменаСсылка)); + КонецЕсли; + + Элементы.ФормаОткрытьФормуРегистрацииНаУзлах.Видимость = ОперацииРазрешены; + + Элементы.СписокКонстантКонтекстноеМенюОткрытьФормуРегистрацииНаУзлах.Видимость = ОперацииРазрешены; + Элементы.СписокСсылокКонтекстноеМенюОткрытьФормуРегистрацииНаУзлах.Видимость = ОперацииРазрешены; + Элементы.СписокНаборовЗаписейКонтекстноеМенюОткрытьФормуРегистрацииНаУзлах.Видимость = ОперацииРазрешены; +КонецПроцедуры + +&НаСервере +Функция ПроконтролироватьНастройки() + Результат = Истина; + + // Проверим на допустимость узла пришедшего из параметра или настроек + ТекущийОбъект = ЭтотОбъект(); + Если УзелОбменаСсылка <> Неопределено И ПланыОбмена.ТипВсеСсылки().СодержитТип(ТипЗнч(УзелОбменаСсылка)) Тогда + ДопустимыеУзлыОбмена = ТекущийОбъект.СформироватьДеревоУзлов(); + ИмяПлана = УзелОбменаСсылка.Метаданные().Имя; + Если ДопустимыеУзлыОбмена.Строки.Найти(ИмяПлана, "ПланОбменаИмя", Истина) = Неопределено Тогда + // Узел неверного плана обмена + УзелОбменаСсылка = Неопределено; + Результат = Ложь; + ИначеЕсли УзелОбменаСсылка = ПланыОбмена[ИмяПлана].ЭтотУзел() Тогда + // Этот узел + УзелОбменаСсылка = Неопределено; + Результат = Ложь; + КонецЕсли; + КонецЕсли; + + Если ЗначениеЗаполнено(УзелОбменаСсылка) Тогда + ОбработкаВыбораУзлаОбмена(); + КонецЕсли; + ОбработатьЗапретИзмененияУзла(); + + // Зависимость настроек + УстановитьОтборПоНомеруСообщения(СписокКонстант, ВариантОтбораПоНомеруСообщения); + УстановитьОтборПоНомеруСообщения(СписокСсылок, ВариантОтбораПоНомеруСообщения); + УстановитьОтборПоНомеруСообщения(СписокНаборовЗаписей, ВариантОтбораПоНомеруСообщения); + + Возврат Результат; +КонецФункции + +&НаСервере +Функция СтруктураКлючаНабораЗаписей(Знач ТекущиеДанные) + + Описание = ЭтотОбъект().ХарактеристикиПоМетаданным(СписокНаборовЗаписейИмяТаблицы); + + Если Описание = Неопределено Тогда + // Неизвестный источник + Возврат Неопределено; + КонецЕсли; + + Результат = Новый Структура("ИмяФормы, Параметр, Значение"); + + Измерения = Новый Структура; + ИменаКлючей = МассивИменКлючейНабораЗаписей(СписокНаборовЗаписейИмяТаблицы); + Для Каждого Имя Из ИменаКлючей Цикл + Измерения.Вставить(Имя, ТекущиеДанные["СписокНаборовЗаписей" + Имя]); + КонецЦикла; + + Если Измерения.Свойство("Регистратор") Тогда + МетаРегистратора = Метаданные.НайтиПоТипу(ТипЗнч(Измерения.Регистратор)); + Если МетаРегистратора = Неопределено Тогда + Результат = Неопределено; + Иначе + Результат.ИмяФормы = МетаРегистратора.ПолноеИмя() + ".ФормаОбъекта"; + Результат.Параметр = "Ключ"; + Результат.Значение = Измерения.Регистратор; + КонецЕсли; + + ИначеЕсли Измерения.Количество() = 0 Тогда + // Вырожденный набор записей + Результат.ИмяФормы = СписокНаборовЗаписейИмяТаблицы + ".ФормаСписка"; + + Иначе + Набор = Описание.Менеджер.СоздатьНаборЗаписей(); + Для Каждого КлючЗначение Из Измерения Цикл + Набор.Отбор[КлючЗначение.Ключ].Установить(КлючЗначение.Значение); + КонецЦикла; + Набор.Прочитать(); + Если Набор.Количество() = 1 Тогда + // Одиночный элемент + Результат.ИмяФормы = СписокНаборовЗаписейИмяТаблицы + ".ФормаЗаписи"; + Результат.Параметр = "Ключ"; + + Ключ = Новый Структура; + Для Каждого КолонкаНабора Из Набор.Выгрузить().Колонки Цикл + ИмяКолонки = КолонкаНабора.Имя; + Ключ.Вставить(ИмяКолонки, Набор[0][ИмяКолонки]); + КонецЦикла; + Результат.Значение = Описание.Менеджер.СоздатьКлючЗаписи(Ключ); + Иначе + // Список + Результат.ИмяФормы = СписокНаборовЗаписейИмяТаблицы + ".ФормаСписка"; + Результат.Параметр = "Отбор"; + Результат.Значение = Измерения; + КонецЕсли; + + КонецЕсли; + + Возврат Результат; +КонецФункции + +&НаСервере +Функция ЗарегистрироватьИОМИПредопределенныеНаСервере() + + ТекущийОбъект = ЭтотОбъект(); + Возврат ТекущийОбъект.БСП_ОбновитьИЗарегистрироватьИОМГлавногоУзла(УзелОбменаСсылка); + +КонецФункции + + +#КонецОбласти diff --git a/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Help/ru.html b/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Help/ru.html new file mode 100644 index 0000000..266f406 --- /dev/null +++ b/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Help/ru.html @@ -0,0 +1,24 @@ + +

Предназначена для регистрации изменений данных в программе. Это необходимо для последующей отправки данных при синхронизации в другие программы.

+

Список можно открыть по команде Все действия - Состав отправляемых данных из списка Синхронизации данных.

+

Ведется регистрация номеров сообщений. Нажмите на гиперссылку с номерами сообщений, чтобы просмотреть их или исправить.

+

Возможен отбор изменений - выберите из списка:

+

Список состоит из двух частей:

+

Регистрация изменений и отмена регистрации

+

Измененные и вновь вводимые объекты программа регистрирует автоматически. Для ручной регистрации объектов выберите объект в дереве с помощью флажков, нажмите Зарегистрировать изменения

+

Для того чтобы отменить отправку всех данных, приготовленных для других программ, в дереве объектов выделите корень (информационную базу) и нажмите Отменить регистрацию изменений - Всех объектов выбранных типов) - все настройки аналогичны предыдущим.

+

Другие возможные действия:

+ \ No newline at end of file diff --git a/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/ObjectModule.bsl b/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/ObjectModule.bsl new file mode 100644 index 0000000..79206e9 --- /dev/null +++ b/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/ObjectModule.bsl @@ -0,0 +1,1912 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ПрограммныйИнтерфейс + +// Возвращает дерево значений, заполненное данными для выбора узла обмена. В дереве 2 уровня: +// план обмена -> узлы обмена. Служебные узлы выброшены. +// +// Параметры: +// ОбъектДанных - ЛюбаяСсылка, Структура - Ссылка или структура со значениями измерений набор записей. Для этих данных +// которых анализируются узлы обмена. Если не указано, то для всех +// ИмяТаблицы - Строка - Если ОбъектДанных - структура, то имя таблицы для набора записей +// +// Возвращаемое значение: +// ДеревоЗначений - данные с колонками: +// * Наименование - Строка - Представление плана обмена или узла обмена +// * ИндексКартинки - Число - 1 = план обмена, 2 = узел , 3 = помеченный для удаления узел +// * ИндексКартинкиАвторегистрация - Число - Если не указан параметр ОбъектДанных, то Неопределено +// Иначе: 0 = нет, 1 = запрещена, 2 = разрешена, Неопределено для плана обмена +// * ПланОбменаИмя - Строка - Имя плана обмена узла +// * Ссылка - ПланОбменаСсылка - Ссылка узла, Неопределено для плана обмена +// * Код - Число, Строка - Код узла, Неопределено для плана обмена +// * НомерОтправленного - Число - Данные узла +// * НомерПринятого - Число - Данные узла +// * НомерСообщения - Число, NULL - Если указан объект, то номер сообщения для него, иначе NULL +// * НеВыгружалось - Булево, NULL - Если указан объект, то флаг выгрузки, иначе NULL +// * Пометка - Булево - Если указан объект, то 0 = нет регистрации, 1 - есть, иначе всегда 0 +// * ИсходнаяПометка - Булево - аналогично колонке "Пометка" +// * ИдентификаторСтроки - Число - Индекс добавленной строки (обход дерева сверху вниз слева направо) +// +Функция СформироватьДеревоУзлов(ОбъектДанных = Неопределено, ИмяТаблицы = Неопределено) Экспорт + + Дерево = Новый ДеревоЗначений; + Колонки = Дерево.Колонки; + Строки = Дерево.Строки; + + Колонки.Добавить("Наименование"); + Колонки.Добавить("ИндексКартинки"); + Колонки.Добавить("ИндексКартинкиАвторегистрация"); + Колонки.Добавить("ПланОбменаИмя"); + Колонки.Добавить("Ссылка"); + Колонки.Добавить("Код"); + Колонки.Добавить("НомерОтправленного"); + Колонки.Добавить("НомерПринятого"); + Колонки.Добавить("НомерСообщения"); + Колонки.Добавить("НеВыгружалось"); + Колонки.Добавить("Пометка"); + Колонки.Добавить("ИсходнаяПометка"); + Колонки.Добавить("ИдентификаторСтроки"); + + Запрос = Новый Запрос; + Если ОбъектДанных = Неопределено Тогда + МетаОбъект = Неопределено; + ТекстЗапроса = " + |ВЫБРАТЬ + | ПРЕДСТАВЛЕНИЕССЫЛКИ(Ссылка) КАК Наименование, + | ВЫБОР + | КОГДА ПометкаУдаления ТОГДА 2 ИНАЧЕ 1 + | КОНЕЦ КАК ИндексКартинки, + | + | ""{0}"" КАК ПланОбменаИмя, + | Код КАК Код, + | Ссылка КАК Ссылка, + | НомерОтправленного КАК НомерОтправленного, + | НомерПринятого КАК НомерПринятого, + | NULL КАК НомерСообщения, + | NULL КАК НеВыгружалось, + | 0 КАК КоличествоИзмененийНаУзле + |ИЗ + | ПланОбмена.{0} КАК ПланОбмена + |ГДЕ + | ПланОбмена.Ссылка <> &ФильтрУзлов + |"; + + Иначе + Если ТипЗнч(ОбъектДанных) = Тип("Структура") Тогда + ТекстЗапроса = ""; + Для Каждого КлючЗначение Из ОбъектДанных Цикл + ТекИмя = КлючЗначение.Ключ; + ТекстЗапроса = ТекстЗапроса + " + |И ТаблицаИзменений." + ТекИмя + " = &" + ТекИмя; + Запрос.УстановитьПараметр(ТекИмя, ОбъектДанных[ТекИмя]); + КонецЦикла; + ТекИмяТаблицы = ИмяТаблицы; + МетаОбъект = МетаданныеПоПолномуИмени(ИмяТаблицы); + + ИначеЕсли ТипЗнч(ОбъектДанных) = Тип("Строка") Тогда + ТекстЗапроса = ""; + ТекИмяТаблицы = ОбъектДанных; + МетаОбъект = МетаданныеПоПолномуИмени(ОбъектДанных); + + Иначе + ТекстЗапроса = " + |И ТаблицаИзменений.Ссылка = &ОбъектРегистрации"; + Запрос.УстановитьПараметр("ОбъектРегистрации", ОбъектДанных); + + МетаОбъект = ОбъектДанных.Метаданные(); + ТекИмяТаблицы = МетаОбъект.ПолноеИмя(); + КонецЕсли; + + ТекстЗапроса = " + |ВЫБРАТЬ + | ПРЕДСТАВЛЕНИЕССЫЛКИ(ПланОбмена.Ссылка) КАК Наименование, + | ВЫБОР + | КОГДА ПланОбмена.ПометкаУдаления ТОГДА 2 ИНАЧЕ 1 + | КОНЕЦ КАК ИндексКартинки, + | + | ""{0}"" КАК ПланОбменаИмя, + | ПланОбмена.Код КАК Код, + | ПланОбмена.Ссылка КАК Ссылка, + | ПланОбмена.НомерОтправленного КАК НомерОтправленного, + | ПланОбмена.НомерПринятого КАК НомерПринятого, + | ТаблицаИзменений.НомерСообщения КАК НомерСообщения, + | ВЫБОР + | КОГДА ТаблицаИзменений.НомерСообщения ЕСТЬ NULL + | ТОГДА ИСТИНА + | ИНАЧЕ ЛОЖЬ + | КОНЕЦ КАК НеВыгружалось, + | КОЛИЧЕСТВО(ТаблицаИзменений.Узел) КАК КоличествоИзмененийНаУзле + |ИЗ + | ПланОбмена.{0} КАК ПланОбмена + |ЛЕВОЕ СОЕДИНЕНИЕ + | " + ТекИмяТаблицы + ".Изменения КАК ТаблицаИзменений + |ПО + | ТаблицаИзменений.Узел = ПланОбмена.Ссылка + | " + ТекстЗапроса + " + |ГДЕ + | ПланОбмена.Ссылка <> &ФильтрУзлов + |СГРУППИРОВАТЬ ПО + | ПланОбмена.Ссылка, + | ТаблицаИзменений.НомерСообщения + |"; + КонецЕсли; + + ТекНомерСтроки = 0; + Для Каждого Мета Из Метаданные.ПланыОбмена Цикл + + ИмяПлана = Мета.Имя; + Попытка + ЭтотУзелПланаОбмена = ПланыОбмена[ИмяПлана].ЭтотУзел(); + Исключение + // Разделенный режим, пропускаем узел + Продолжить; + КонецПопытки; + + Авторегистрация = Неопределено; + Если МетаОбъект <> Неопределено Тогда + ЭлементСостава = Мета.Состав.Найти(МетаОбъект); + Если ЭлементСостава = Неопределено Тогда + // Не входит в текущий план обмена + Продолжить; + КонецЕсли; + Авторегистрация = ?(ЭлементСостава.Авторегистрация = АвтоРегистрацияИзменений.Запретить, 1, 2); + КонецЕсли; + + ИмяПлана = Мета.Имя; + Запрос.Текст = СтрЗаменить(ТекстЗапроса, "{0}", ИмяПлана); + Запрос.УстановитьПараметр("ФильтрУзлов", ЭтотУзелПланаОбмена); + Результат = Запрос.Выполнить(); + + Если Не Результат.Пустой() Тогда + СтрокаПлана = Строки.Добавить(); + СтрокаПлана.Наименование = Мета.Представление(); + СтрокаПлана.ИндексКартинки = 0; + СтрокаПлана.ПланОбменаИмя = ИмяПлана; + + СтрокаПлана.ИдентификаторСтроки = ТекНомерСтроки; + ТекНомерСтроки = ТекНомерСтроки + 1; + + // Сортировка по представлению, в запросе нельзя + ВременнаяТаблица = Результат.Выгрузить(); + ВременнаяТаблица.Сортировать("Наименование"); + Для Каждого СтрокаУзла Из ВременнаяТаблица Цикл; + НоваяСтрока = СтрокаПлана.Строки.Добавить(); + ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаУзла); + + НоваяСтрока.ИсходнаяПометка = ?(СтрокаУзла.КоличествоИзмененийНаУзле > 0, 1, 0); + НоваяСтрока.Пометка = НоваяСтрока.ИсходнаяПометка; + + НоваяСтрока.ИндексКартинкиАвторегистрация = Авторегистрация; + + НоваяСтрока.ИдентификаторСтроки = ТекНомерСтроки; + ТекНомерСтроки = ТекНомерСтроки + 1; + КонецЦикла; + КонецЕсли; + + КонецЦикла; + + Возврат Дерево; +КонецФункции + +// Возвращает структуру, описывающую метаданные для плана обмена. +// Объекты, не входящие в состав плана обмена, выбрасываются. +// +// Параметры: +// ИмяПланаОбмена - Строка - имя метаданных плана обмена, для которого строится дерево конфигурации. +// - ПланОбменаСсылка - дерево конфигурации строится для его плана обмена. +// - Неопределено - строится дерево всей конфигурации. +// +// Возвращаемое значение: +// Структура - описание метаданных. Поля: +// * СтруктураИмен - Структура - Ключ - группа метаданных (константы, справочники и т.п.), значение - массив полных имен. +// * СтруктураПредставлений - Структура - Ключ - группа метаданных (константы, справочники и т.п.), значение - массив полных имен. +// * СтруктураАвторегистрации - Структура - Ключ - группа метаданных (константы, справочники и т.п.), значение - массив флагов авторегистрации на узле. +// * КоличествоИзменений - Неопределено - нужно для дальнейшего расчета +// * КоличествоВыгруженных - Неопределено - нужно для дальнейшего расчета +// * КоличествоНевыгруженных - Неопределено - нужно для дальнейшего расчета +// * КоличествоИзмененийСтрокой - Неопределено - нужно для дальнейшего расчета +// * Дерево - ДеревоЗначений - содержит колонки: +// ** Наименование - Строка - Представление вида объекта метаданных +// ** МетаПолноеИмя - Строка - Полное имя объекта метаданных +// ** ИндексКартинки - Число - Зависит от метаданных +// ** Пометка - Неопределено +// ** ИдентификаторСтроки - Число - Индекс добавленной строки (обход дерева сверху вниз слева направо) +// ** Авторегистрация - Булево - Если указан ИмяПланаОбмена, то для листьев: 1-разрешена, 2-запрещена. Иначе Неопределено +// +Функция СформироватьСтруктуруМетаданных(ИмяПланаОбмена = Неопределено) Экспорт + + Дерево = Новый ДеревоЗначений; + Колонки = Дерево.Колонки; + Колонки.Добавить("Наименование"); + Колонки.Добавить("МетаПолноеИмя"); + Колонки.Добавить("ИндексКартинки"); + Колонки.Добавить("Пометка"); + Колонки.Добавить("ИдентификаторСтроки"); + + Колонки.Добавить("Авторегистрация"); + Колонки.Добавить("КоличествоИзменений"); + Колонки.Добавить("КоличествоВыгруженных"); + Колонки.Добавить("КоличествоНевыгруженных"); + Колонки.Добавить("КоличествоИзмененийСтрокой"); + + // Корень + СтрокаКорень = Дерево.Строки.Добавить(); + СтрокаКорень.Наименование = Метаданные.Представление(); + СтрокаКорень.ИндексКартинки = 0; + СтрокаКорень.ИдентификаторСтроки = 0; + + // Параметры + ТекПараметры = Новый Структура("СтруктураИмен, СтруктураПредставлений, СтруктураАвторегистрации, Строки", + Новый Структура, Новый Структура, Новый Структура, СтрокаКорень.Строки); + + Если ИмяПланаОбмена = Неопределено Тогда + ПланОбмена = Неопределено; + ИначеЕсли ТипЗнч(ИмяПланаОбмена) = Тип("Строка") Тогда + ПланОбмена = Метаданные.ПланыОбмена[ИмяПланаОбмена]; + Иначе + ПланОбмена = ИмяПланаОбмена.Метаданные(); + КонецЕсли; + ТекПараметры.Вставить("ПланОбмена", ПланОбмена); + + Результат = Новый Структура("Дерево, СтруктураИмен, СтруктураПредставлений, СтруктураАвторегистрации", + Дерево, ТекПараметры.СтруктураИмен, ТекПараметры.СтруктураПредставлений, ТекПараметры.СтруктураАвторегистрации); + + ТекНомерСтроки = 1; + СформироватьУровеньМетаданных(ТекНомерСтроки, ТекПараметры, 1, 2, Ложь, "Константы", НСтр("ru = 'Константы'")); + СформироватьУровеньМетаданных(ТекНомерСтроки, ТекПараметры, 3, 4, Истина, "Справочники", НСтр("ru = 'Справочники'")); + СформироватьУровеньМетаданных(ТекНомерСтроки, ТекПараметры, 5, 6, Истина, "Последовательности", НСтр("ru = 'Последовательности'")); + СформироватьУровеньМетаданных(ТекНомерСтроки, ТекПараметры, 7, 8, Истина, "Документы", НСтр("ru = 'Документы'")); + //СформироватьУровеньМетаданных(ТекНомерСтроки, ТекПараметры, 9, 10, Истина, "ПланыВидовХарактеристик", НСтр("ru = 'Планы видов характеристик'")); + //СформироватьУровеньМетаданных(ТекНомерСтроки, ТекПараметры, 11, 12, Истина, "ПланыСчетов", НСтр("ru = 'Планы счетов'")); + //СформироватьУровеньМетаданных(ТекНомерСтроки, ТекПараметры, 13, 14, Истина, "ПланыВидовРасчета", НСтр("ru = 'Планы видов расчета'")); + СформироватьУровеньМетаданных(ТекНомерСтроки, ТекПараметры, 15, 16, Истина, "РегистрыСведений", НСтр("ru = 'Регистры сведений'")); + СформироватьУровеньМетаданных(ТекНомерСтроки, ТекПараметры, 17, 18, Истина, "РегистрыНакопления", НСтр("ru = 'Регистры накопления'")); + //СформироватьУровеньМетаданных(ТекНомерСтроки, ТекПараметры, 19, 20, Истина, "РегистрыБухгалтерии", НСтр("ru = 'Регистры бухгалтерии'")); + //СформироватьУровеньМетаданных(ТекНомерСтроки, ТекПараметры, 21, 22, Истина, "РегистрыРасчета", НСтр("ru = 'Регистры расчета'")); + //СформироватьУровеньМетаданных(ТекНомерСтроки, ТекПараметры, 23, 24, Истина, "БизнесПроцессы", НСтр("ru = 'Бизнес-процессы'")); + //СформироватьУровеньМетаданных(ТекНомерСтроки, ТекПараметры, 25, 26, Истина, "Задачи", НСтр("ru = 'Задачи'")); + + Возврат Результат; +КонецФункции + +// Вычисляет количества изменений для объектов метаданных для узлов обмена. +// +// Параметры: +// СписокТаблиц - Массив - имена. Может быть коллекцией"ключ/значение" где "значение" - массивы имен +// СписокУзлов - ПланОбменаСсылка, Массив - узлы +// +// Возвращаемое значение: +// ТаблицаЗначений - колонки: +// * МетаПолноеИмя - Строка - Полное имя метаданных, для которых рассчитываем количество +// * УзелОбмена - ПланОбменаСсылка - Ссылка на узел обмена, для которого рассчитываем количество +// * КоличествоИзменений - Число +// * КоличествоВыгруженных - Число +// * КоличествоНеВыгруженных - Число +// +Функция ПолучитьКоличествоИзменений(СписокТаблиц, СписокУзлов) Экспорт + + Результат = Новый ТаблицаЗначений; + Колонки = Результат.Колонки; + Колонки.Добавить("МетаПолноеИмя"); + Колонки.Добавить("УзелОбмена"); + Колонки.Добавить("КоличествоИзменений"); + Колонки.Добавить("КоличествоВыгруженных"); + Колонки.Добавить("КоличествоНеВыгруженных"); + + Результат.Индексы.Добавить("МетаПолноеИмя"); + Результат.Индексы.Добавить("УзелОбмена"); + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("СписокУзлов", СписокУзлов); + + // На входе или массив или структура/соответствие со многими массивами + Если СписокТаблиц = Неопределено Тогда + Возврат Результат; + ИначеЕсли ТипЗнч(СписокТаблиц) = Тип("Массив") Тогда + Источник = Новый Структура("_", СписокТаблиц); + Иначе + Источник = СписокТаблиц; + КонецЕсли; + + // Пачками по 200 таблиц в запросе + Текст = ""; + Номер = 0; + Для Каждого КлючЗначение Из Источник Цикл + Если ТипЗнч(КлючЗначение.Значение) <> Тип("Массив") Тогда + Продолжить; + КонецЕсли; + + Для Каждого Элемент Из КлючЗначение.Значение Цикл + Если ПустаяСтрока(Элемент) Тогда + Продолжить; + КонецЕсли; + + Текст = Текст + ?(Текст = "", "", "ОБЪЕДИНИТЬ ВСЕ") + " + |ВЫБРАТЬ + | """ + Элемент + """ КАК МетаПолноеИмя, + | Узел КАК УзелОбмена, + | КОЛИЧЕСТВО(*) КАК КоличествоИзменений, + | КОЛИЧЕСТВО(НомерСообщения) КАК КоличествоВыгруженных, + | КОЛИЧЕСТВО(*) - КОЛИЧЕСТВО(НомерСообщения) КАК КоличествоНеВыгруженных + |ИЗ + | " + Элемент + ".Изменения + |ГДЕ + | Узел В (&СписокУзлов) + |СГРУППИРОВАТЬ ПО + | Узел + |"; + + Номер = Номер + 1; + Если Номер = 200 Тогда + Запрос.Текст = Текст; + Выборка = Запрос.Выполнить().Выбрать(); + Пока Выборка.Следующий() Цикл + ЗаполнитьЗначенияСвойств(Результат.Добавить(), Выборка); + КонецЦикла; + Текст = ""; + Номер = 0; + КонецЕсли; + + КонецЦикла; + КонецЦикла; + + // Дочитываем хвосты + Если Текст <> "" Тогда + Запрос.Текст = Текст; + Выборка = Запрос.Выполнить().Выбрать(); + Пока Выборка.Следующий() Цикл + ЗаполнитьЗначенияСвойств(Результат.Добавить(), Выборка); + КонецЦикла; + КонецЕсли; + + Возврат Результат; +КонецФункции + +// Возвращает объект метаданных по его полному имени. Пустая строка обозначает конфигурацию. +// +// Параметры: +// ИмяМетаданных - Строка - Имя объекта метаданных, например "Справочник.Валюты" или "Константы" +// +// Возвращаемое значение: +// ОБъектМетаданных - +// +Функция МетаданныеПоПолномуИмени(ИмяМетаданных) Экспорт + + Если ПустаяСтрока(ИмяМетаданных) Тогда + // Вся конфигурация + Возврат Метаданные; + КонецЕсли; + + Значение = Метаданные.НайтиПоПолномуИмени(ИмяМетаданных); + Если Значение = Неопределено Тогда + Значение = Метаданные[ИмяМетаданных]; + КонецЕсли; + + Возврат Значение; +КонецФункции + +// Возвращает флаг регистрации объекта на узле +// +// Параметры: +// Узел - ПланОбменаСсылка - Узел плана обмена для которого получаем информацию, +// ОбъектРегистрации - Строка, ЛюбаяСсылка, Структура - объект, для которого получаем информацию. +// Структура хранит значения изменений набора записей +// ИмяТаблицы - Строка - Если ОбъектРегистрации - структура, то содержит имя таблицы для набора измерений +// +// Возвращаемое значение: +// Булево - результат регистрации +// +Функция ОбъектЗарегистрированНаУзле(Узел, ОбъектРегистрации, ИмяТаблицы = Неопределено) Экспорт + ТипПараметра = ТипЗнч(ОбъектРегистрации); + Если ТипПараметра = Тип("Строка") Тогда + // Константа как метаданные + Описание = ХарактеристикиПоМетаданным(ОбъектРегистрации); + ТекущийОбъект = Описание.Менеджер.СоздатьМенеджерЗначения(); + + ИначеЕсли ТипПараметра = Тип("Структура") Тогда + // Набор измерений, ИмяТаблицы - чего + Описание = ХарактеристикиПоМетаданным(ИмяТаблицы); + ТекущийОбъект = Описание.Менеджер.СоздатьНаборЗаписей(); + Для Каждого КлючЗначение Из ОбъектРегистрации Цикл + ТекущийОбъект.Отбор[КлючЗначение.Ключ].Установить(КлючЗначение.Значение); + КонецЦикла; + + Иначе + ТекущийОбъект = ОбъектРегистрации; + КонецЕсли; + + Возврат ПланыОбмена.ИзменениеЗарегистрировано(Узел, ТекущийОбъект); +КонецФункции + +// Изменяет регистрацию переданного. +// +// Параметры: +// Команда - Булево - Истина, если надо добавлять, Ложь, если удалять +// БезУчетаАвторегистрации - Булево - Истина, если не надо анализировать флаг авторегистрации +// Узел - ПланОбменаСсылка - Ссылка на узел плана обмена +// Данные - ЛюбаяСсылка, Строка, Структура - данные или массив таких данных. +// ИмяТаблицы - Строка - Если Данные является структурой, то содержит имя таблицы +// +// Возвращаемое значение: +// Структура - результат операции: +// * Всего - Число - общее число объектов +// * Успешно - Число - числом успешно обработанных объектов +// +Функция ИзменитьРегистрациюНаСервере(Команда, БезУчетаАвторегистрации, Узел, Данные, ИмяТаблицы = Неопределено) Экспорт + + ПрочитатьНастройки(); + Результат = Новый Структура("Всего, Успешно", 0, 0); + + // Только при добавлении и работе в составе БСП + НадоФильтрБСП = ТипЗнч(Команда) = Тип("Булево") И Команда И КонфигурацияПоддерживаетБСП И НастройкаКонтрольВыгрузкиОбъектов; + + Если ТипЗнч(Данные) = Тип("Массив") Тогда + ДанныеРегистрации = Данные; + Иначе + ДанныеРегистрации = Новый Массив; + ДанныеРегистрации.Добавить(Данные); + КонецЕсли; + + Для Каждого Элемент Из ДанныеРегистрации Цикл + + Тип = ТипЗнч(Элемент); + Значения = Новый Массив; + + Если Элемент = Неопределено Тогда + // Вся конфигурация + + Если ТипЗнч(Команда) = Тип("Булево") И Команда Тогда + // Добавляем регистрацию по частям + ДобавитьРезультаты(Результат, ИзменитьРегистрациюНаСервере(Команда, БезУчетаАвторегистрации, Узел, "Константы", ИмяТаблицы) ); + ДобавитьРезультаты(Результат, ИзменитьРегистрациюНаСервере(Команда, БезУчетаАвторегистрации, Узел, "Справочники", ИмяТаблицы) ); + ДобавитьРезультаты(Результат, ИзменитьРегистрациюНаСервере(Команда, БезУчетаАвторегистрации, Узел, "Документы", ИмяТаблицы) ); + ДобавитьРезультаты(Результат, ИзменитьРегистрациюНаСервере(Команда, БезУчетаАвторегистрации, Узел, "Последовательности", ИмяТаблицы) ); + ДобавитьРезультаты(Результат, ИзменитьРегистрациюНаСервере(Команда, БезУчетаАвторегистрации, Узел, "ПланыВидовХарактеристик", ИмяТаблицы) ); + ДобавитьРезультаты(Результат, ИзменитьРегистрациюНаСервере(Команда, БезУчетаАвторегистрации, Узел, "ПланыСчетов", ИмяТаблицы) ); + ДобавитьРезультаты(Результат, ИзменитьРегистрациюНаСервере(Команда, БезУчетаАвторегистрации, Узел, "ПланыВидовРасчета", ИмяТаблицы) ); + ДобавитьРезультаты(Результат, ИзменитьРегистрациюНаСервере(Команда, БезУчетаАвторегистрации, Узел, "РегистрыСведений", ИмяТаблицы) ); + ДобавитьРезультаты(Результат, ИзменитьРегистрациюНаСервере(Команда, БезУчетаАвторегистрации, Узел, "РегистрыНакопления", ИмяТаблицы) ); + ДобавитьРезультаты(Результат, ИзменитьРегистрациюНаСервере(Команда, БезУчетаАвторегистрации, Узел, "РегистрыБухгалтерии", ИмяТаблицы) ); + ДобавитьРезультаты(Результат, ИзменитьРегистрациюНаСервере(Команда, БезУчетаАвторегистрации, Узел, "РегистрыРасчета", ИмяТаблицы) ); + ДобавитьРезультаты(Результат, ИзменитьРегистрациюНаСервере(Команда, БезУчетаАвторегистрации, Узел, "БизнесПроцессы", ИмяТаблицы) ); + ДобавитьРезультаты(Результат, ИзменитьРегистрациюНаСервере(Команда, БезУчетаАвторегистрации, Узел, "Задачи", ИмяТаблицы) ); + Продолжить; + КонецЕсли; + + // Удаление регистрации - платформенным методом + Значения.Добавить(Неопределено); + + ИначеЕсли Тип = Тип("Строка") Тогда + // Метаданные, возможно как коллекция, так и конкретный вид, на авторегистрацию смотрим + Описание = ХарактеристикиПоМетаданным(Элемент); + Если НадоФильтрБСП Тогда + ДобавитьРезультаты(Результат, БСП_РегистрацияИзмененийМетаданных(Узел, Описание, БезУчетаАвторегистрации) ); + Продолжить; + + ИначеЕсли БезУчетаАвторегистрации Тогда + Если Описание.ЭтоКоллекция Тогда + Для Каждого Мета Из Описание.Метаданные Цикл + ДобавитьРезультаты(Результат, ИзменитьРегистрациюНаСервере(Команда, БезУчетаАвторегистрации, Узел, Мета.ПолноеИмя(), ИмяТаблицы) ); + КонецЦикла; + Продолжить; + Иначе + Мета = Описание.Метаданные; + ЭлементСостава = Узел.Метаданные().Состав.Найти(Мета); + Если ЭлементСостава = Неопределено Тогда + Продолжить; + КонецЕсли; + // Константа? + Значения.Добавить(Описание.Метаданные); + КонецЕсли; + + Иначе + // Отсеиваем неподходящие по авторегистрации + Если Описание.ЭтоКоллекция Тогда + // Регистрируем поодиночке + Для Каждого Мета Из Описание.Метаданные Цикл + ДобавитьРезультаты(Результат, ИзменитьРегистрациюНаСервере(Команда, БезУчетаАвторегистрации, Узел, Мета.ПолноеИмя(), ИмяТаблицы) ); + КонецЦикла; + Продолжить; + Иначе + Мета = Описание.Метаданные; + ЭлементСостава = Узел.Метаданные().Состав.Найти(Мета); + Если ЭлементСостава = Неопределено Или ЭлементСостава.Авторегистрация <> АвтоРегистрацияИзменений.Разрешить Тогда + Продолжить; + КонецЕсли; + // Константа? + Значения.Добавить(Описание.Метаданные); + КонецЕсли; + КонецЕсли; + + // Смотрим опциональные варианты, Значения[0] - метаданные конкретного вида с именем "Элемент" + Для Каждого ТекЭлемент Из ПолучитьДополнительныеОбъектыРегистрации(Элемент, Узел, БезУчетаАвторегистрации) Цикл + Значения.Добавить(ТекЭлемент); + КонецЦикла; + + ИначеЕсли Тип = Тип("Структура") Тогда + // Это или конкретный набор записей, или результат выбора ссылочного типа отбором + Описание = ХарактеристикиПоМетаданным(ИмяТаблицы); + Если Описание.ЭтоСсылка Тогда + ДобавитьРезультаты(Результат, ИзменитьРегистрациюНаСервере(Команда, БезУчетаАвторегистрации, Узел, Элемент.Ссылка) ); + Продолжить; + КонецЕсли; + // Конкретный набор записей, на авторегистрацию уже не смотрим + Если НадоФильтрБСП Тогда + ДобавитьРезультаты(Результат, БСП_РегистрацияИзмененийНабора(Узел, Элемент, Описание) ); + Продолжить; + КонецЕсли; + + Набор = Описание.Менеджер.СоздатьНаборЗаписей(); + Для Каждого КлючЗначение Из Элемент Цикл + Набор.Отбор[КлючЗначение.Ключ].Установить(КлючЗначение.Значение); + КонецЦикла; + Значения.Добавить(Набор); + // Смотрим опциональные варианты + Для Каждого ТекЭлемент Из ПолучитьДополнительныеОбъектыРегистрации(Элемент, Узел, БезУчетаАвторегистрации, ИмяТаблицы) Цикл + Значения.Добавить(ТекЭлемент); + КонецЦикла; + + Иначе + // Конкретная ссылка, на авторегистрацию уже не смотрим + Если НадоФильтрБСП Тогда + ДобавитьРезультаты(Результат, БСП_РегистрацияИзмененийСсылки(Узел, Элемент) ); + Продолжить; + + КонецЕсли; + Значения.Добавить(Элемент); + // Смотрим опциональные варианты + Для Каждого ТекЭлемент Из ПолучитьДополнительныеОбъектыРегистрации(Элемент, Узел, БезУчетаАвторегистрации) Цикл + Значения.Добавить(ТекЭлемент); + КонецЦикла; + + КонецЕсли; + + // Собственно регистрация, уже без фильтра + Для Каждого ТекЗначение Из Значения Цикл + ВыполнитьКомандуРегистрацииОбъекта(Команда, Узел, ТекЗначение); + Результат.Успешно = Результат.Успешно + 1; + Результат.Всего = Результат.Всего + 1; + КонецЦикла; + + КонецЦикла; // Перебор объектов в массиве данных для регистрации + + Возврат Результат; +КонецФункции + +// Возвращает начало полного имени формы для открытия по переданному объекту +// +Функция ПолучитьИмяФормы(ТекущийОбъект = Неопределено) Экспорт + + Тип = ТипЗнч(ТекущийОбъект); + Если Тип = Тип("ДинамическийСписок") Тогда + Возврат ТекущийОбъект.ОсновнаяТаблица + "."; + ИначеЕсли Тип = Тип("Строка") Тогда + Возврат ТекущийОбъект + "."; + КонецЕсли; + + Мета = ?(ТекущийОбъект = Неопределено, Метаданные(), ТекущийОбъект.Метаданные()); + Возврат Мета.ПолноеИмя() + "."; +КонецФункции + +// Рекурсивное обслуживание иерархических пометок с тремя состояниями в дереве. +// +// Параметры: +// ДанныеСтроки - ДанныеФормыЭлементДерева - Пометка хранится в числовой колонке "Пометка" +// +Процедура ИзменениеПометки(ДанныеСтроки) Экспорт + ДанныеСтроки.Пометка = ДанныеСтроки.Пометка % 2; + ПроставитьПометкиВниз(ДанныеСтроки); + ПроставитьПометкиВверх(ДанныеСтроки); +КонецПроцедуры + +// Рекурсивное обслуживание иерархических пометок с тремя состояниями в дереве. +// +// Параметры: +// ДанныеСтроки - ДанныеФормыЭлементДерева - Пометка хранится в числовой колонке "Пометка" +// +Процедура ПроставитьПометкиВниз(ДанныеСтроки) Экспорт + Значение = ДанныеСтроки.Пометка; + Для Каждого Потомок Из ДанныеСтроки.ПолучитьЭлементы() Цикл + Потомок.Пометка = Значение; + ПроставитьПометкиВниз(Потомок); + КонецЦикла; +КонецПроцедуры + +// Рекурсивное обслуживание иерархических пометок с тремя состояниями в дереве. +// +// Параметры: +// ДанныеСтроки - ДанныеФормыЭлементДерева - Пометка хранится в числовой колонке "Пометка" +// +Процедура ПроставитьПометкиВверх(ДанныеСтроки) Экспорт + РодительСтроки = ДанныеСтроки.ПолучитьРодителя(); + Если РодительСтроки <> Неопределено Тогда + ВсеИстина = Истина; + НеВсеЛожь = Ложь; + Для Каждого Потомок Из РодительСтроки.ПолучитьЭлементы() Цикл + ВсеИстина = ВсеИстина И (Потомок.Пометка = 1); + НеВсеЛожь = НеВсеЛожь Или Булево(Потомок.Пометка); + КонецЦикла; + Если ВсеИстина Тогда + РодительСтроки.Пометка = 1; + ИначеЕсли НеВсеЛожь Тогда + РодительСтроки.Пометка = 2; + Иначе + РодительСтроки.Пометка = 0; + КонецЕсли; + ПроставитьПометкиВверх(РодительСтроки); + КонецЕсли; +КонецПроцедуры + +// Чтение реквизитов узла обмена. +// +// Параметры: +// Ссылка - ПланОбменаСсылка - Ссылка на узел обмена +// Данные - Строка - Список имен реквизитов для чтения через запятую +// +// Возвращаемое значение: +// Структура - считанные данные +// Неопределено - если нет данных по переданной ссылке +// +Функция ПолучитьПараметрыУзлаОбмена(Ссылка, Данные) Экспорт + Запрос = Новый Запрос(" + |ВЫБРАТЬ " + Данные + " ИЗ " + Ссылка.Метаданные().ПолноеИмя() + " + |ГДЕ Ссылка = &Ссылка + |"); + Запрос.УстановитьПараметр("Ссылка", Ссылка); + Времянка = Запрос.Выполнить().Выгрузить(); + Если Времянка.Количество() = 0 Тогда + Возврат Неопределено; + КонецЕсли; + + Результат = Новый Структура(Данные); + ЗаполнитьЗначенияСвойств(Результат, Времянка[0]); + Возврат Результат; +КонецФункции + +// Запись реквизитов узла обмена. +// +// Параметры: +// Ссылка - ПланОбменаСсылка - Ссылка на узел обмена +// Данные - Строка - Список имен реквизитов для чтения через запятую +// +Процедура УстановитьПараметрыУзлаОбмена(Ссылка, Данные) Экспорт + + ОбъектУзла = Ссылка.ПолучитьОбъект(); + Если ОбъектУзла = Неопределено Тогда + // Ссылка на удаленный объект + Возврат; + КонецЕсли; + + Изменен = Ложь; + Для Каждого Элемент Из Данные Цикл + Если ОбъектУзла[Элемент.Ключ] <> Элемент.Значение Тогда + Изменен = Истина; + Прервать; + КонецЕсли; + КонецЦикла; + + Если Изменен Тогда + ЗаполнитьЗначенияСвойств(ОбъектУзла, Данные); + ОбъектУзла.Записать(); + КонецЕсли; +КонецПроцедуры + +// Возвращает описание данных по имени таблицы/полному имени метаданных или метаданным +// +// Параметры: +// - ИмяТаблицы - Строка - Имя таблицы, например "Справочник.Валюты" +// +Функция ХарактеристикиПоМетаданным(ИмяТаблицыМетаданных) Экспорт + + ЭтоПоследовательность = Ложь; + ЭтоКоллекция = Ложь; + ЭтоКонстанта = Ложь; + ЭтоСсылка = Ложь; + ЭтоНабор = Ложь; + Менеджер = Неопределено; + ИмяТаблицы = ""; + + Если ТипЗнч(ИмяТаблицыМетаданных) = Тип("Строка") Тогда + Мета = МетаданныеПоПолномуИмени(ИмяТаблицыМетаданных); + ИмяТаблицы = ИмяТаблицыМетаданных; + ИначеЕсли ТипЗнч(ИмяТаблицыМетаданных) = Тип("Тип") Тогда + Мета = Метаданные.НайтиПоТипу(ИмяТаблицыМетаданных); + ИмяТаблицы = Мета.ПолноеИмя(); + Иначе + Мета = ИмяТаблицыМетаданных; + ИмяТаблицы = Мета.ПолноеИмя(); + КонецЕсли; + + Если Мета = Метаданные.Константы Тогда + ЭтоКоллекция = Истина; + ЭтоКонстанта = Истина; + Менеджер = Константы; + + ИначеЕсли Мета = Метаданные.Справочники Тогда + ЭтоКоллекция = Истина; + ЭтоСсылка = Истина; + Менеджер = Справочники; + + ИначеЕсли Мета = Метаданные.Документы Тогда + ЭтоКоллекция = Истина; + ЭтоСсылка = Истина; + Менеджер = Документы; + + ИначеЕсли Мета = Метаданные.Перечисления Тогда + ЭтоКоллекция = Истина; + ЭтоСсылка = Истина; + Менеджер = Перечисления; + + ИначеЕсли Мета = Метаданные.Последовательности Тогда + ЭтоНабор = Истина; + ЭтоПоследовательность = Истина; + ЭтоКоллекция = Истина; + Менеджер = Последовательности; + + ИначеЕсли Мета = Метаданные.РегистрыСведений Тогда + ЭтоКоллекция = Истина; + ЭтоНабор = Истина; + Менеджер = РегистрыСведений; + + ИначеЕсли Мета = Метаданные.РегистрыНакопления Тогда + ЭтоКоллекция = Истина; + ЭтоНабор = Истина; + Менеджер = РегистрыНакопления; + + ИначеЕсли Метаданные.Константы.Содержит(Мета) Тогда + ЭтоКонстанта = Истина; + Менеджер = Константы[Мета.Имя]; + + ИначеЕсли Метаданные.Справочники.Содержит(Мета) Тогда + ЭтоСсылка = Истина; + Менеджер = Справочники[Мета.Имя]; + + ИначеЕсли Метаданные.Документы.Содержит(Мета) Тогда + ЭтоСсылка = Истина; + Менеджер = Документы[Мета.Имя]; + + ИначеЕсли Метаданные.Последовательности.Содержит(Мета) Тогда + ЭтоНабор = Истина; + ЭтоПоследовательность = Истина; + Менеджер = Последовательности[Мета.Имя]; + + ИначеЕсли Метаданные.Перечисления.Содержит(Мета) Тогда + ЭтоСсылка = Истина; + Менеджер = Перечисления[Мета.Имя]; + + ИначеЕсли Метаданные.РегистрыСведений.Содержит(Мета) Тогда + ЭтоНабор = Истина; + Менеджер = РегистрыСведений[Мета.Имя]; + + ИначеЕсли Метаданные.РегистрыНакопления.Содержит(Мета) Тогда + ЭтоНабор = Истина; + Менеджер = РегистрыНакопления[Мета.Имя]; + + КонецЕсли; + + Возврат Новый Структура("ИмяТаблицы, Метаданные, Менеджер, ЭтоНабор, ЭтоСсылка, ЭтоКонстанта, ЭтоПоследовательность, ЭтоКоллекция", + ИмяТаблицы, Мета, Менеджер, + ЭтоНабор, ЭтоСсылка, ЭтоКонстанта, ЭтоПоследовательность, ЭтоКоллекция); + +КонецФункции + +// Возвращает таблицу, описывающую измерения для регистрации изменений набора данных +// +// Параметры: +// ИмяТаблицы - Строка - Имя таблицы, например "РегистрСведений.КурсыВалют" +// ВсеИзмерения - Булево - Флаг того, что для регистра сведений получаем все измерения, а не +// только основные и ведущие +// +// Возвращаемое значение: +// ТаблицаЗначений - колонки: +// * Имя - Строка - имя измерения +// * ТипЗначения - ОписаниеТипов - типы +// * Заголовок - Строка - Представление для измерения +// +Функция ИзмеренияНабораЗаписей(ИмяТаблицы, ВсеИзмерения = Ложь) Экспорт + + Если ТипЗнч(ИмяТаблицы) = Тип("Строка") Тогда + Мета = МетаданныеПоПолномуИмени(ИмяТаблицы); + Иначе + Мета = ИмяТаблицы; + КонецЕсли; + + // Определяем ключевые поля + Измерения = Новый ТаблицаЗначений; + Колонки = Измерения.Колонки; + Колонки.Добавить("Имя"); + Колонки.Добавить("ТипЗначения"); + Колонки.Добавить("Заголовок"); + + Если Не ВсеИзмерения Тогда + // Что-то регистрируемое + НеУчитывать = "НомерСообщения,Узел,"; + Для Каждого МетаОбщий Из Метаданные.ОбщиеРеквизиты Цикл + НеУчитывать = НеУчитывать + МетаОбщий.Имя + "," ; + КонецЦикла; + + Запрос = Новый Запрос("ВЫБРАТЬ * ИЗ " + Мета.ПолноеИмя() + ".Изменения ГДЕ ЛОЖЬ"); + ПустойРезультат = Запрос.Выполнить(); + Для Каждого КолонкаРезультата Из ПустойРезультат.Колонки Цикл + ИмяКолонки = КолонкаРезультата.Имя; + Если Найти(НеУчитывать, ИмяКолонки + ",") = 0 Тогда + Строка = Измерения.Добавить(); + Строка.Имя = ИмяКолонки; + Строка.ТипЗначения = КолонкаРезультата.ТипЗначения; + + МетаИзм = Мета.Измерения.Найти(ИмяКолонки); + Строка.Заголовок = ?(МетаИзм = Неопределено, ИмяКолонки, МетаИзм.Представление()); + КонецЕсли; + КонецЦикла; + + Возврат Измерения; + КонецЕсли; + + // Все измерения + + ЭтоРегистрСведений = Метаданные.РегистрыСведений.Содержит(Мета); + + // Регистратор + Если Метаданные.РегистрыНакопления.Содержит(Мета) + Или Метаданные.РегистрыБухгалтерии.Содержит(Мета) + Или Метаданные.РегистрыРасчета.Содержит(Мета) + Или (ЭтоРегистрСведений И Мета.РежимЗаписи = Метаданные.СвойстваОбъектов.РежимЗаписиРегистра.ПодчинениеРегистратору) + Или Метаданные.Последовательности.Содержит(Мета) + Тогда + Строка = Измерения.Добавить(); + Строка.Имя = "Регистратор"; + Строка.ТипЗначения = Документы.ТипВсеСсылки(); + Строка.Заголовок = НСтр("ru = 'Регистратор'"); + КонецЕсли; + + // Период + Если ЭтоРегистрСведений И Мета.ОсновнойОтборПоПериоду Тогда + Строка = Измерения.Добавить(); + Строка.Имя = "Период"; + Строка.ТипЗначения = Новый ОписаниеТипов("Дата"); + Строка.Заголовок = НСтр("ru = 'Период'"); + КонецЕсли; + + // Измерения + Если ЭтоРегистрСведений Тогда + Для Каждого МетаИзм Из Мета.Измерения Цикл + Строка = Измерения.Добавить(); + Строка.Имя = МетаИзм.Имя; + Строка.ТипЗначения = МетаИзм.Тип; + Строка.Заголовок = МетаИзм.Представление(); + КонецЦикла; + КонецЕсли; + + // Перерасчет + Если Метаданные.РегистрыРасчета.Содержит(Мета.Родитель()) Тогда + Строка = Измерения.Добавить(); + Строка.Имя = "ОбъектПерерасчета"; + Строка.ТипЗначения = Документы.ТипВсеСсылки(); + Строка.Заголовок = НСтр("ru = 'Объект перерасчета'"); + КонецЕсли; + + Возврат Измерения; +КонецФункции + +// Модифицирует таблицу формы, добавляя туда колонки +// +// Параметры: +// ТаблицаФормы - ЭлементФормы - Элемент, связанный с данными, в который будут добавлены колонки данных +// СохранятьИмена - Строка - Список имен колонок, которые будут сохранены, через запятую. +// Добавлять - Массив - Структуры с описанием добавляемых колонок с атрибутами Имя, ТипЗначения, Заголовок +// ГруппаКолонок - ЭлементФормы - Группа колонок, в которую происходит добавление +// +Процедура ДобавитьКолонкиВТаблицуФормы(ТаблицаФормы, СохранятьИмена, Добавлять, ГруппаКолонок = Неопределено) Экспорт + + Форма = ФормаЭлементаФормы(ТаблицаФормы); + ЭлементыФормы = Форма.Элементы; + ИмяРеквизитаТаблицы = ТаблицаФормы.ПутьКДанным; + + Сохраняемые = Новый Структура(СохранятьИмена); + СохраняемыеПутиДанных = Новый Соответствие; + Для Каждого Элемент Из Сохраняемые Цикл + СохраняемыеПутиДанных.Вставить(ИмяРеквизитаТаблицы + "." + Элемент.Ключ, Истина); + КонецЦикла; + + ЭтоДинамическийСписок = Ложь; + Для Каждого Реквизит Из Форма.ПолучитьРеквизиты() Цикл + Если Реквизит.Имя = ИмяРеквизитаТаблицы И Реквизит.ТипЗначения.СодержитТип(Тип("ДинамическийСписок")) Тогда + ЭтоДинамическийСписок = Истина; + Прервать; + КонецЕсли; + КонецЦикла; + + // Динамический пересоздает реквизиты сам + Если Не ЭтоДинамическийСписок Тогда + УдаляемыеИмена = Новый Массив; + + // Удаляем все реквизиты, которые не перечислены в СохранятьИмена + Для Каждого Реквизит Из Форма.ПолучитьРеквизиты(ИмяРеквизитаТаблицы) Цикл + ТекИмя = Реквизит.Имя; + Если Не Сохраняемые.Свойство(ТекИмя) Тогда + УдаляемыеИмена.Добавить(Реквизит.Путь + "." + ТекИмя); + КонецЕсли; + КонецЦикла; + + Добавляемые = Новый Массив; + Для Каждого Колонка Из Добавлять Цикл + ТекИмя = Колонка.Имя; + Если Не Сохраняемые.Свойство(ТекИмя) Тогда + Добавляемые.Добавить( Новый РеквизитФормы(ТекИмя, Колонка.ТипЗначения, ИмяРеквизитаТаблицы, Колонка.Заголовок) ); + КонецЕсли; + КонецЦикла; + + Форма.ИзменитьРеквизиты(Добавляемые, УдаляемыеИмена); + КонецЕсли; + + // Удаляем элементы + Родитель = ?(ГруппаКолонок = Неопределено, ТаблицаФормы, ГруппаКолонок); + + Удалять = Новый Массив; + Для Каждого Элемент Из Родитель.ПодчиненныеЭлементы Цикл + Удалять.Добавить(Элемент); + КонецЦикла; + Для Каждого Элемент Из Удалять Цикл + Если ТипЗнч(Элемент) <> Тип("ГруппаФормы") И СохраняемыеПутиДанных[Элемент.ПутьКДанным] = Неопределено Тогда + ЭлементыФормы.Удалить(Элемент); + КонецЕсли; + КонецЦикла; + + // Создаем элементы + Префикс = ТаблицаФормы.Имя; + Для Каждого Колонка Из Добавлять Цикл + ТекИмя = Колонка.Имя; + ЭлФормы = ЭлементыФормы.Вставить(Префикс + ТекИмя, Тип("ПолеФормы"), Родитель); + ЭлФормы.Вид = ВидПоляФормы.ПолеВвода; + ЭлФормы.ПутьКДанным = ИмяРеквизитаТаблицы + "." + ТекИмя; + ЭлФормы.Заголовок = Колонка.Заголовок; + КонецЦикла; + +КонецПроцедуры + +// Возвращает подробное представление объекта. +// +// Параметры: +// - ОбъектПредставления - ЛюбаяСсылка - представление которого получаем +// +Функция ПредставлениеСсылки(ОбъектПредставления) Экспорт + + Если ТипЗнч(ОбъектПредставления) = Тип("Строка") Тогда + // Метаданные + Мета = Метаданные.НайтиПоПолномуИмени(ОбъектПредставления); + Результат = Мета.Представление(); + Если Метаданные.Константы.Содержит(Мета) Тогда + Результат = Результат + " (константа)"; + КонецЕсли; + Возврат Результат; + КонецЕсли; + + // Ссылка + Результат = ""; + МодульОбщегоНазначения = ОбщегоНазначенияОбщийМодуль("ОбщегоНазначения"); + Если МодульОбщегоНазначения <> Неопределено Тогда + Попытка + Результат = МодульОбщегоНазначения.ПредметСтрокой(ОбъектПредставления); + Исключение + // Нет или поломан метод получения предмета + КонецПопытки; + КонецЕсли; + + Если ПустаяСтрока(Результат) И ОбъектПредставления <> Неопределено И Не ОбъектПредставления.Пустая() Тогда + Мета = ОбъектПредставления.Метаданные(); + Если Метаданные.Документы.Содержит(Мета) Тогда + Результат = Строка(ОбъектПредставления); + Иначе + Представление = Мета.ПредставлениеОбъекта; + Если ПустаяСтрока(Представление) Тогда + Представление = Мета.Представление(); + КонецЕсли; + Результат = Строка(ОбъектПредставления); + Если Не ПустаяСтрока(Представление) Тогда + Результат = Результат + " (" + Представление + ")"; + КонецЕсли; + КонецЕсли; + КонецЕсли; + + Если ПустаяСтрока(Результат) Тогда + Результат = НСтр("ru = 'не задано'"); + КонецЕсли; + + Возврат Результат; +КонецФункции + +// Возвращает флаг того, что работа происходит в файловой базе +// +//Функция ЭтоФайловаяБаза() Экспорт +// Возврат Найти(СтрокаСоединенияИнформационнойБазы(), "File=") > 0; +//КонецФункции + +// Читает текущие данные из динамического списка по его настройкам и возвращает в виде таблицы значений +// +// Параметры: +// - ИсточникДанных - ДинамическийСписок - реквизит формы +// +Функция ТекущиеДанныеДинамическогоСписка(ИсточникДанных) Экспорт + + СхемаКомпоновки = Новый СхемаКомпоновкиДанных; + + Источник = СхемаКомпоновки.ИсточникиДанных.Добавить(); + Источник.Имя = "Источник"; + Источник.ТипИсточникаДанных = "local"; + + Набор = СхемаКомпоновки.НаборыДанных.Добавить(Тип("НаборДанныхЗапросСхемыКомпоновкиДанных")); + Набор.Запрос = ИсточникДанных.ТекстЗапроса; + Набор.АвтоЗаполнениеДоступныхПолей = Истина; + Набор.ИсточникДанных = Источник.Имя; + Набор.Имя = Источник.Имя; + + ИсточникНастроек = Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновки); + Компоновщик = Новый КомпоновщикНастроекКомпоновкиДанных; + Компоновщик.Инициализировать(ИсточникНастроек); + + ТекНастройки = Компоновщик.Настройки; + + // Выбранные поля + Для Каждого Элемент из ТекНастройки.Выбор.ДоступныеПоляВыбора.Элементы Цикл + Если Не Элемент.Папка Тогда + Поле = ТекНастройки.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных")); + Поле.Использование = Истина; + Поле.Поле = Элемент.Поле; + КонецЕсли; + КонецЦикла; + Группа = ТекНастройки.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных")); + Группа.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных")); + + // Отбор + СкопироватьОтборКомпоновкиДанных(ТекНастройки.Отбор, ИсточникДанных.Отбор); + СкопироватьОтборКомпоновкиДанных(ТекНастройки.Отбор, ИсточникДанных.КомпоновщикНастроек.ПолучитьНастройки().Отбор); + + // Выводим + КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; + Макет = КомпоновщикМакета.Выполнить(СхемаКомпоновки, ТекНастройки, , , Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений")); + Процессор = Новый ПроцессорКомпоновкиДанных; + Процессор.Инициализировать(Макет); + Вывод = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений; + + Результат = Новый ТаблицаЗначений; + Вывод.УстановитьОбъект(Результат); + Вывод.Вывести(Процессор); + + Возврат Результат; +КонецФункции + +// Читаем настройки из общего хранилища +// +Процедура ПрочитатьНастройки(КлючНастройки = "") Экспорт + + КлючОбъекта = Метаданные().ПолноеИмя() + ".Форма.Форма"; + + ТекущиеНастройки = Неопределено; + Если ТипЗнч(ТекущиеНастройки) <> Тип("Соответствие") Тогда + // Умолчания + ТекущиеНастройки = Новый Соответствие; + ТекущиеНастройки.Вставить("НастройкаАвторегистрацияДвижений", Ложь); + ТекущиеНастройки.Вставить("НастройкаАвторегистрацияПоследовательностей", Ложь); + ТекущиеНастройки.Вставить("НастройкаАдресВнешнейОбработкиЗапросов", ""); + ТекущиеНастройки.Вставить("НастройкаКонтрольВыгрузкиОбъектов", Истина); // Проверять через БСП + ТекущиеНастройки.Вставить("НастройкаВариантНомераСообщения", 0); // Регистрировать как новое + КонецЕсли; + + НастройкаАвторегистрацияДвижений = ТекущиеНастройки["НастройкаАвторегистрацияДвижений"]; + НастройкаАвторегистрацияПоследовательностей = ТекущиеНастройки["НастройкаАвторегистрацияПоследовательностей"]; + НастройкаАдресВнешнейОбработкиЗапросов = ТекущиеНастройки["НастройкаАдресВнешнейОбработкиЗапросов"]; + НастройкаКонтрольВыгрузкиОбъектов = ТекущиеНастройки["НастройкаКонтрольВыгрузкиОбъектов"]; + НастройкаВариантНомераСообщения = ТекущиеНастройки["НастройкаВариантНомераСообщения"]; + + ПроверитьКорректностьНастроек(КлючНастройки); +КонецПроцедуры + +// Устанавливаем флаги поддержки БСП +// +Процедура ПрочитатьПризнакиПоддержкиБСП() Экспорт + КонфигурацияПоддерживаетБСП = БСП_ДоступнаТребуемаяВерсия(); + + Если КонфигурацияПоддерживаетБСП Тогда + // Используем внешний интерфейс регистрации + ДоступнаРегистрацияСредствамиБСП = БСП_ДоступнаТребуемаяВерсия("2.1.5.11"); + ДоступнаРаботаРИБ = БСП_ДоступнаТребуемаяВерсия("2.1.3.25"); + Иначе + ДоступнаРегистрацияСредствамиБСП = Ложь; + ДоступнаРаботаРИБ = Ложь; + КонецЕсли; +КонецПроцедуры + +// Пишем настройки в общее хранилище +// +//Процедура СохранитьНастройки(КлючНастройки = "") Экспорт +// +// КлючОбъекта = Метаданные().ПолноеИмя() + ".Форма.Форма"; +// +// ТекущиеНастройки = Новый Соответствие; +// ТекущиеНастройки.Вставить("НастройкаАвторегистрацияДвижений", НастройкаАвторегистрацияДвижений); +// ТекущиеНастройки.Вставить("НастройкаАвторегистрацияПоследовательностей", НастройкаАвторегистрацияПоследовательностей); +// ТекущиеНастройки.Вставить("НастройкаАдресВнешнейОбработкиЗапросов", НастройкаАдресВнешнейОбработкиЗапросов); +// ТекущиеНастройки.Вставить("НастройкаКонтрольВыгрузкиОбъектов", НастройкаКонтрольВыгрузкиОбъектов); +// ТекущиеНастройки.Вставить("НастройкаВариантНомераСообщения", НастройкаВариантНомераСообщения); +// +// ХранилищеОбщихНастроек.Сохранить(КлючОбъекта, "", ТекущиеНастройки) +//КонецПроцедуры + +// Проверяем настройки на корректность, сбрасываем в случае нарушения. +// +// Возвращаемое значение: +// Структура - ключ - имя настройки, значением содержит описанием ошибки или Неопределено +// при отсутствии ошибки для данного параметра +// +Функция ПроверитьКорректностьНастроек(КлючНастройки = "") Экспорт + + Результат = Новый Структура("ЕстьОшибки, + |НастройкаАвторегистрацияДвижений, НастройкаАвторегистрацияПоследовательностей, + |НастройкаАдресВнешнейОбработкиЗапросов, НастройкаКонтрольВыгрузкиОбъектов, + |НастройкаВариантНомераСообщения", + Ложь); + + // Доступность внешней обработки + Если ПустаяСтрока(НастройкаАдресВнешнейОбработкиЗапросов) Тогда + // Убираем возможные пробелы, вариант отключен + НастройкаАдресВнешнейОбработкиЗапросов = ""; + + ИначеЕсли НРег(Прав(СокрЛП(НастройкаАдресВнешнейОбработкиЗапросов), 4)) = ".epf" Тогда + // Файл обработки + Файл = Новый Файл(НастройкаАдресВнешнейОбработкиЗапросов); + //Попытка + // Если Файл.Существует() Тогда + // //ВнешниеОбработки.Создать(НастройкаАдресВнешнейОбработкиЗапросов); + // Иначе + // Если ЭтоФайловаяБаза() Тогда + // Текст = НСтр("ru = 'Файл ""%1"" не доступен'"); + // Иначе + // Текст = НСтр("ru = 'Файл ""%1"" не доступен на сервере'"); + // КонецЕсли; + // Результат.НастройкаАдресВнешнейОбработкиЗапросов = СтрЗаменить(Текст, "%1", НастройкаАдресВнешнейОбработкиЗапросов);; + // Результат.ЕстьОшибки = Истина; + // КонецЕсли; + //Исключение + // // Некорректный файл или запрет профилями безопасности + // Информация = ИнформацияОбОшибке(); + // Результат.НастройкаАдресВнешнейОбработкиЗапросов = КраткоеПредставлениеОшибки(Информация); + // + // Результат.ЕстьОшибки = Истина; + //КонецПопытки; + + Иначе + // В составе конфигурации + Если Метаданные.Обработки.Найти(НастройкаАдресВнешнейОбработкиЗапросов) = Неопределено Тогда + Текст = НСтр("ru = 'Обработка ""%1"" не найдена в составе конфигурации'"); + Результат.НастройкаАдресВнешнейОбработкиЗапросов = СтрЗаменить(Текст, "%1", НастройкаАдресВнешнейОбработкиЗапросов); + + Результат.ЕстьОшибки = Истина; + КонецЕсли; + + КонецЕсли; + + Возврат Результат; +КонецФункции + +// Служебное для регистрации в подключаемых обработках +// +Функция СведенияОВнешнейОбработке() Экспорт + + Инфо = Новый Структура; + + Инфо.Вставить("Вид", "СозданиеСвязанныхОбъектов"); + Инфо.Вставить("Команды", Новый ТаблицаЗначений); + Инфо.Вставить("БезопасныйРежим", Истина); + Инфо.Вставить("Назначение", Новый Массив); + + Инфо.Вставить("Наименование", НСтр("ru = 'Регистрация изменений для обмена данными'")); + Инфо.Вставить("Версия", "1.0"); + Инфо.Вставить("ВерсияБСП", "1.2.1.4"); + Инфо.Вставить("Информация", НСтр("ru = 'Обработка для управления регистрацией объектов на узлах обмена до формирования выгрузки. При работе в составе конфигурации с БСП версии 2.1.2.0 и старше производит контроль ограничений миграции данных для узлов обмена.'")); + + Инфо.Назначение.Добавить("ПланыОбмена.*"); + Инфо.Назначение.Добавить("Константы.*"); + Инфо.Назначение.Добавить("Справочники.*"); + Инфо.Назначение.Добавить("Документы.*"); + Инфо.Назначение.Добавить("Последовательности.*"); + Инфо.Назначение.Добавить("ПланыВидовХарактеристик.*"); + Инфо.Назначение.Добавить("ПланыСчетов.*"); + Инфо.Назначение.Добавить("ПланыВидовРасчета.*"); + Инфо.Назначение.Добавить("РегистрыСведений.*"); + Инфо.Назначение.Добавить("РегистрыНакопления.*"); + Инфо.Назначение.Добавить("РегистрыБухгалтерии.*"); + Инфо.Назначение.Добавить("РегистрыРасчета.*"); + Инфо.Назначение.Добавить("БизнесПроцессы.*"); + Инфо.Назначение.Добавить("Задачи.*"); + + Колонки = Инфо.Команды.Колонки; + ТипСтрока = Новый ОписаниеТипов("Строка"); + Колонки.Добавить("Представление", ТипСтрока); + Колонки.Добавить("Идентификатор", ТипСтрока); + Колонки.Добавить("Использование", ТипСтрока); + Колонки.Добавить("Модификатор", ТипСтрока); + Колонки.Добавить("ПоказыватьОповещение", Новый ОписаниеТипов("Булево")); + + // Единственная команда, что делать - определяем по типу переданного + Команда = Инфо.Команды.Добавить(); + Команда.Представление = НСтр("ru = 'Редактирование регистрации изменений объекта'"); + Команда.Идентификатор = "ОткрытьФормуРедактированияРегистрации"; + Команда.Использование = "ВызовКлиентскогоМетода"; + + Возврат Инфо; +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции +// + +// +// Копирует отбор компоновки данных добавлением к существующим +// +Процедура СкопироватьОтборКомпоновкиДанных(ГруппаПриемник, ГруппаИсточник) + + КоллекцияИсточник = ГруппаИсточник.Элементы; + КоллекцияПриемник = ГруппаПриемник.Элементы; + Для Каждого Элемент Из КоллекцияИсточник Цикл + ТипЭлемента = ТипЗнч(Элемент); + НовыйЭлемент = КоллекцияПриемник.Добавить(ТипЭлемента); + + ЗаполнитьЗначенияСвойств(НовыйЭлемент, Элемент); + Если ТипЭлемента = Тип("ГруппаЭлементовОтбораКомпоновкиДанных") Тогда + СкопироватьОтборКомпоновкиДанных(НовыйЭлемент, Элемент) + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +// Выполняет непосредственное действие с конечным объектом +// +Процедура ВыполнитьКомандуРегистрацииОбъекта(Знач Команда, Знач Узел, Знач ОбъектРегистрации) + + Если ТипЗнч(Команда) = Тип("Булево") Тогда + Если Команда Тогда + // Регистрация + Если НастройкаВариантНомераСообщения = 1 Тогда + // Как отправленного + Команда = 1 + Узел.НомерОтправленного; + Иначе + // Как нового + ЗарегистрироватьИзменения(Узел, ОбъектРегистрации); + КонецЕсли; + Иначе + // Отмена регистрации + ПланыОбмена.УдалитьРегистрациюИзменений(Узел, ОбъектРегистрации); + КонецЕсли; + КонецЕсли; + + Если ТипЗнч(Команда) = Тип("Число") Тогда + // Одиночная регистрация с указанным номером сообщения + Если Команда = 0 Тогда + // Аналогично регистрации нового + ЗарегистрироватьИзменения(Узел, ОбъектРегистрации) + Иначе + // Изменение номера регистрации, БСП не проверяем + ПланыОбмена.ЗарегистрироватьИзменения(Узел, ОбъектРегистрации); + Выборка = ПланыОбмена.ВыбратьИзменения(Узел, Команда, ОбъектРегистрации); + Пока Выборка.Следующий() Цикл + // Выбираем изменения для простановки номера сообщения обмена данными + КонецЦикла; + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +Процедура ЗарегистрироватьИзменения(Знач Узел, Знач ОбъектРегистрации) + + Если Не ДоступнаРегистрацияСредствамиБСП Тогда + ПланыОбмена.ЗарегистрироватьИзменения(Узел, ОбъектРегистрации); + Возврат; + КонецЕсли; + + // Заводим на регистрацию в БСП всегда, необходимы дополнительные действия. + МодульОбменДаннымиСобытия = ОбщегоНазначенияОбщийМодуль("ОбменДаннымиСобытия"); + + // На входе или объект метаданных или непосредственно объект + Если ТипЗнч(ОбъектРегистрации) = Тип("ОбъектМетаданных") Тогда + Характеристики = ХарактеристикиПоМетаданным(ОбъектРегистрации); + Если Характеристики.ЭтоСсылка Тогда + + Выборка = Характеристики.Менеджер.Выбрать(); + Пока Выборка.Следующий() Цикл + МодульОбменДаннымиСобытия.ЗарегистрироватьИзмененияДанных(Узел, Выборка.Ссылка, ЭтотОбъект.НастройкаКонтрольВыгрузкиОбъектов); + КонецЦикла; + + Возврат; + КонецЕсли; + КонецЕсли; + + // Обычный объект + МодульОбменДаннымиСобытия.ЗарегистрироватьИзмененияДанных(Узел, ОбъектРегистрации, ЭтотОбъект.НастройкаКонтрольВыгрузкиОбъектов); +КонецПроцедуры + +// Возвращает управляемую форму, которой принадлежит элемент +// +Функция ФормаЭлементаФормы(ЭлементФормы) + Результат = ЭлементФормы; + ТипыФормы = Новый ОписаниеТипов("УправляемаяФорма"); + Пока Не ТипыФормы.СодержитТип(ТипЗнч(Результат)) Цикл + Результат = Результат.Родитель; + КонецЦикла; + Возврат Результат; +КонецФункции + +// Внутренняя для формирования группы метаданных (например справочников) в дереве метаданных +// +Процедура СформироватьУровеньМетаданных(ТекущийНомерСтроки, Параметры, ИндексКартинки, ИндексКартинкиУзлов, ДобавлятьПодчиненные, ИмяМета, ПредставлениеМета) + + ПредставленияУровня = Новый Массив; + Авторегистрации = Новый Массив; + ИменаУровня = Новый Массив; + + ВсеСтроки = Параметры.Строки; + МетаПлан = Параметры.ПланОбмена; + + СтрокаГруппа = ВсеСтроки.Добавить(); + СтрокаГруппа.ИдентификаторСтроки = ТекущийНомерСтроки; + + СтрокаГруппа.МетаПолноеИмя = ИмяМета; + СтрокаГруппа.Наименование = ПредставлениеМета; + СтрокаГруппа.ИндексКартинки = ИндексКартинки; + + Строки = СтрокаГруппа.Строки; + БылиПодчиненные = Ложь; + + Для Каждого Мета Из Метаданные[ИмяМета] Цикл + + Если МетаПлан = Неопределено Тогда + // Без учета плана обмена + БылиПодчиненные = Истина; + МетаПолноеИмя = Мета.ПолноеИмя(); + Наименование = Мета.Представление(); + Если ДобавлятьПодчиненные Тогда + НовСтрока = Строки.Добавить(); + НовСтрока.МетаПолноеИмя = МетаПолноеИмя; + НовСтрока.Наименование = Наименование ; + НовСтрока.ИндексКартинки = ИндексКартинкиУзлов; + + ТекущийНомерСтроки = ТекущийНомерСтроки + 1; + НовСтрока.ИдентификаторСтроки = ТекущийНомерСтроки; + КонецЕсли; + ИменаУровня.Добавить(МетаПолноеИмя); + ПредставленияУровня.Добавить(Наименование); + + Иначе + Элемент = МетаПлан.Состав.Найти(Мета); + Если Элемент <> Неопределено Тогда + БылиПодчиненные = Истина; + МетаПолноеИмя = Мета.ПолноеИмя(); + Наименование = Мета.Представление(); + Авторегистрация = ?(Элемент.Авторегистрация = АвтоРегистрацияИзменений.Запретить, 1, 2); + Если ДобавлятьПодчиненные Тогда + НовСтрока = Строки.Добавить(); + НовСтрока.МетаПолноеИмя = МетаПолноеИмя; + НовСтрока.Наименование = Наименование ; + НовСтрока.ИндексКартинки = ИндексКартинкиУзлов; + НовСтрока.Авторегистрация = Авторегистрация; + + ТекущийНомерСтроки = ТекущийНомерСтроки + 1; + НовСтрока.ИдентификаторСтроки = ТекущийНомерСтроки; + КонецЕсли; + ИменаУровня.Добавить(МетаПолноеИмя); + ПредставленияУровня.Добавить(Наименование); + Авторегистрации.Добавить(Авторегистрация); + КонецЕсли; + КонецЕсли; + + КонецЦикла; + + Если БылиПодчиненные Тогда + Строки.Сортировать("Наименование"); + Параметры.СтруктураИмен.Вставить(ИмяМета, ИменаУровня); + Параметры.СтруктураПредставлений.Вставить(ИмяМета, ПредставленияУровня); + Если Не ДобавлятьПодчиненные Тогда + Параметры.СтруктураАвторегистрации.Вставить(ИмяМета, Авторегистрации); + КонецЕсли; + Иначе + // Виды объектов без регистрации не вставляем + ВсеСтроки.Удалить(СтрокаГруппа); + КонецЕсли; + +КонецПроцедуры + +// Накапливаем результаты регистраций +// +Процедура ДобавитьРезультаты(Приемник, Источник) + Приемник.Успешно = Приемник.Успешно + Источник.Успешно; + Приемник.Всего = Приемник.Всего + Источник.Всего; +КонецПроцедуры + +// Возвращает массив дополнительно регистрируемых объектов согласно флагам +// +Функция ПолучитьДополнительныеОбъектыРегистрации(ОбъектРегистрации, УзелКонтроляАвторегистрации, БезАвторегистрации, ИмяТаблицы = Неопределено) + Результат = Новый Массив; + + // Смотрим на глобальные параметры + Если (Не НастройкаАвторегистрацияДвижений) И (Не НастройкаАвторегистрацияПоследовательностей) Тогда + Возврат Результат; + КонецЕсли; + + ТипЗначения = ТипЗнч(ОбъектРегистрации); + НаВходеИмя = ТипЗначения = Тип("Строка"); + Если НаВходеИмя Тогда + Описание = ХарактеристикиПоМетаданным(ОбъектРегистрации); + ИначеЕсли ТипЗначения = Тип("Структура") Тогда + Описание = ХарактеристикиПоМетаданным(ИмяТаблицы); + Если Описание.ЭтоПоследовательность Тогда + Возврат Результат; + КонецЕсли; + Иначе + Описание = ХарактеристикиПоМетаданным(ОбъектРегистрации.Метаданные()); + КонецЕсли; + + МетаОбъект = Описание.Метаданные; + + // Коллекцию рекурсивно + Если Описание.ЭтоКоллекция Тогда + Для Каждого Мета Из МетаОбъект Цикл + ДополнительныйНабор = ПолучитьДополнительныеОбъектыРегистрации(Мета.ПолноеИмя(), УзелКонтроляАвторегистрации, БезАвторегистрации, ИмяТаблицы); + Для Каждого Элемент Из ДополнительныйНабор Цикл + Результат.Добавить(Элемент); + КонецЦикла; + КонецЦикла; + Возврат Результат; + КонецЕсли; + + // Одиночное + СоставУзла = УзелКонтроляАвторегистрации.Метаданные().Состав; + + // Документы. Могут влиять на последовательности и движения + Если Метаданные.Документы.Содержит(МетаОбъект) Тогда + + Если НастройкаАвторегистрацияДвижений Тогда + Для Каждого Мета Из МетаОбъект.Движения Цикл + + ЭлементСостава = СоставУзла.Найти(Мета); + Если ЭлементСостава <> Неопределено И (БезАвторегистрации Или ЭлементСостава.Авторегистрация = АвтоРегистрацияИзменений.Разрешить) Тогда + Если НаВходеИмя Тогда + Результат.Добавить(Мета); + Иначе + Описание = ХарактеристикиПоМетаданным(Мета); + Набор = Описание.Менеджер.СоздатьНаборЗаписей(); + Набор.Отбор.Регистратор.Установить(ОбъектРегистрации); + Набор.Прочитать(); + Результат.Добавить(Набор); + // И проверим полученный набор рекурсивно + ДополнительныйНабор = ПолучитьДополнительныеОбъектыРегистрации(Набор, УзелКонтроляАвторегистрации, БезАвторегистрации, ИмяТаблицы); + Для Каждого Элемент Из ДополнительныйНабор Цикл + Результат.Добавить(Элемент); + КонецЦикла; + КонецЕсли; + КонецЕсли; + + КонецЦикла; + КонецЕсли; + + Если НастройкаАвторегистрацияПоследовательностей Тогда + Для Каждого Мета Из Метаданные.Последовательности Цикл + + Описание = ХарактеристикиПоМетаданным(Мета); + Если Мета.Документы.Содержит(МетаОбъект) Тогда + // Последовательность регистрируется для данного документа + ЭлементСостава = СоставУзла.Найти(Мета); + Если ЭлементСостава <> Неопределено И (БезАвторегистрации Или ЭлементСостава.Авторегистрация = АвтоРегистрацияИзменений.Разрешить) Тогда + // Регистрируется на этом узле + Если НаВходеИмя Тогда + Результат.Добавить(Мета); + Иначе + Набор = Описание.Менеджер.СоздатьНаборЗаписей(); + Набор.Отбор.Регистратор.Установить(ОбъектРегистрации); + Набор.Прочитать(); + Результат.Добавить(Набор); + КонецЕсли; + КонецЕсли; + КонецЕсли; + + КонецЦикла; + + КонецЕсли; + + // Записи регистров. Могут влиять на последовательности + ИначеЕсли НастройкаАвторегистрацияПоследовательностей И ( + Метаданные.РегистрыСведений.Содержит(МетаОбъект) + Или Метаданные.РегистрыНакопления.Содержит(МетаОбъект) + Или Метаданные.РегистрыБухгалтерии.Содержит(МетаОбъект) + Или Метаданные.РегистрыРасчета.Содержит(МетаОбъект) + ) Тогда + Для Каждого Мета Из Метаданные.Последовательности Цикл + Если Мета.Движения.Содержит(МетаОбъект) Тогда + // Последовательность регистрируется для набора записей + ЭлементСостава = СоставУзла.Найти(Мета); + Если ЭлементСостава <> Неопределено И (БезАвторегистрации Или ЭлементСостава.Авторегистрация = АвтоРегистрацияИзменений.Разрешить) Тогда + Результат.Добавить(Мета); + КонецЕсли; + КонецЕсли; + КонецЦикла; + + КонецЕсли; + + Возврат Результат; +КонецФункции + +// Преобразует строку в число +// +// Параметры: +// Текст - Строка - строковое представление числа +// +// Возвращаемое значение: +// Число - преобразованная строка +// Неопределено - если строка не может быть преобразована +// +Функция СтрокаВЧисло(Знач Текст) + ТекстЧисла = СокрЛП(СтрЗаменить(Текст, Символы.НПП, "")); + + Если ПустаяСтрока(ТекстЧисла) Тогда + Возврат 0; + КонецЕсли; + + // Ведущие нули + Позиция = 1; + Пока Сред(ТекстЧисла, Позиция, 1) = "0" Цикл + Позиция = Позиция + 1; + КонецЦикла; + ТекстЧисла = Сред(ТекстЧисла, Позиция); + + // Проверяем на результат по умолчанию + Если ТекстЧисла = "0" Тогда + Результат = 0; + Иначе + ТипЧисло = Новый ОписаниеТипов("Число"); + Результат = ТипЧисло.ПривестиЗначение(ТекстЧисла); + Если Результат = 0 Тогда + // Результат по умолчанию обработан выше, это ошибка преобразования + Результат = Неопределено; + КонецЕсли; + КонецЕсли; + + Возврат Результат; +КонецФункции + +// Возвращает общий модуль или Неопределено, если нет такого +// +Функция ОбщегоНазначенияОбщийМодуль(Знач ИмяМодуля) + + Если Метаданные.ОбщиеМодули.Найти(ИмяМодуля) = Неопределено Тогда + Возврат Неопределено; + КонецЕсли; + + //УстановитьБезопасныйРежим(Истина); + Результат = Вычислить(ИмяМодуля); + //УстановитьБезопасныйРежим(Ложь); + + Возврат Результат; +КонецФункции + +// Возвращает флаг того, что БСП в текущей конфигурации обеспечивает функционал +// +Функция БСП_ДоступнаТребуемаяВерсия(Знач Версия = Неопределено) Экспорт + + ТекущаяВерсия = Неопределено; + МодульСтандартныеПодсистемыСервер = ОбщегоНазначенияОбщийМодуль("СтандартныеПодсистемыСервер"); + Если МодульСтандартныеПодсистемыСервер <> Неопределено Тогда + Попытка + ТекущаяВерсия = МодульСтандартныеПодсистемыСервер.ВерсияБиблиотеки(); + Исключение + ТекущаяВерсия = Неопределено; + КонецПопытки; + КонецЕсли; + + Если ТекущаяВерсия = Неопределено Тогда + // Отсутствует или поломан метод определения версии, считаем БСП недоступной + Возврат Ложь + КонецЕсли; + ТекущаяВерсия = СтрЗаменить(ТекущаяВерсия, ".", Символы.ПС); + + НужнаяВерсия = СтрЗаменить(?(Версия = Неопределено, "2.1.2", Версия), ".", Символы.ПС); + + Для Индекс = 1 По СтрЧислоСтрок(НужнаяВерсия) Цикл + + ЧастьТекущейВерсии = СтрокаВЧисло(СтрПолучитьСтроку(ТекущаяВерсия, Индекс)); + ЧастьНужнойВерсии = СтрокаВЧисло(СтрПолучитьСтроку(НужнаяВерсия, Индекс)); + + Если ЧастьТекущейВерсии = Неопределено Тогда + Возврат Ложь; + + ИначеЕсли ЧастьТекущейВерсии > ЧастьНужнойВерсии Тогда + Возврат Истина; + + ИначеЕсли ЧастьТекущейВерсии < ЧастьНужнойВерсии Тогда + Возврат Ложь; + + КонецЕсли; + КонецЦикла; + + Возврат Истина; +КонецФункции + +// Возвращает флаг контроля объекта в БСП +// +Функция БСП_КонтрольВыгрузкиОбъекта(Узел, ОбъектРегистрации) + + //Отправка = ОтправкаЭлементаДанных.Авто; + //МодульОбменДаннымиСобытия = ОбщегоНазначенияОбщийМодуль("ОбменДаннымиСобытия"); + //Если МодульОбменДаннымиСобытия <> Неопределено Тогда + // МодульОбменДаннымиСобытия.ПриОтправкеДанныхКорреспонденту(ОбъектРегистрации, Отправка, , Узел); + // Возврат Отправка = ОтправкаЭлементаДанных.Авто; + //КонецЕсли; + + // Неизвестная версия БСП + Возврат Истина; +КонецФункции + +// Проверяет ссылку на возможность регистрации изменения в БСП. +// Возвращает структуру с полями "Всего" и "Успешно", описывающей количества регистраций +// +Функция БСП_РегистрацияИзмененийСсылки(Узел, Ссылка, БезУчетаАвторегистрации = Истина) + + Результат = Новый Структура("Всего, Успешно", 0, 0); + + Если БезУчетаАвторегистрации Тогда + СоставУзла = Неопределено; + Иначе + СоставУзла = Узел.Метаданные().Состав; + КонецЕсли; + + ЭлементСостава = ?(СоставУзла = Неопределено, Неопределено, СоставУзла.Найти(Ссылка.Метаданные())); + Если ЭлементСостава = Неопределено Или ЭлементСостава.Авторегистрация = АвтоРегистрацияИзменений.Разрешить Тогда + // Сам объект + Результат.Всего = 1; + ОбъектРегистрации = Ссылка.ПолучитьОбъект(); + // Для битых ссылок ОбъектРегистрации будет Неопределено + Если ОбъектРегистрации = Неопределено Или БСП_КонтрольВыгрузкиОбъекта(Узел, ОбъектРегистрации) Тогда + ВыполнитьКомандуРегистрацииОбъекта(Истина, Узел, Ссылка); + Результат.Успешно = 1; + КонецЕсли; + ОбъектРегистрации = Неопределено; + КонецЕсли; + + // Смотрим опциональные варианты + Если Результат.Успешно > 0 Тогда + Для Каждого Элемент Из ПолучитьДополнительныеОбъектыРегистрации(Ссылка, Узел, БезУчетаАвторегистрации) Цикл + Результат.Всего = Результат.Всего + 1; + Если БСП_КонтрольВыгрузкиОбъекта(Узел, Элемент) Тогда + ВыполнитьКомандуРегистрацииОбъекта(Истина, Узел, Элемент); + Результат.Успешно = Результат.Успешно + 1; + КонецЕсли; + КонецЦикла; + КонецЕсли; + + Возврат Результат; +КонецФункции + +// Проверяет набор значений на возможность регистрации изменения в БСП. +// Возвращает структуру с полями "Всего" и "Успешно", описывающей количества регистраций +// +Функция БСП_РегистрацияИзмененийНабора(Узел, СтруктураПолей, Описание, БезУчетаАвторегистрации = Истина) + + Результат = Новый Структура("Всего, Успешно", 0, 0); + + Если БезУчетаАвторегистрации Тогда + СоставУзла = Неопределено; + Иначе + СоставУзла = Узел.Метаданные().Состав; + КонецЕсли; + + ЭлементСостава = ?(СоставУзла = Неопределено, Неопределено, СоставУзла.Найти(Описание.Метаданные)); + Если ЭлементСостава = Неопределено Или ЭлементСостава.Авторегистрация = АвтоРегистрацияИзменений.Разрешить Тогда + Результат.Всего = 1; + + Набор = Описание.Менеджер.СоздатьНаборЗаписей(); + Для Каждого КлючЗначение Из СтруктураПолей Цикл + Набор.Отбор[КлючЗначение.Ключ].Установить(КлючЗначение.Значение); + КонецЦикла; + Набор.Прочитать(); + + Если БСП_КонтрольВыгрузкиОбъекта(Узел, Набор) Тогда + ВыполнитьКомандуРегистрацииОбъекта(Истина, Узел, Набор); + Результат.Успешно = 1; + КонецЕсли; + + КонецЕсли; + + // Смотрим опциональные варианты + Если Результат.Успешно > 0 Тогда + Для Каждого Элемент Из ПолучитьДополнительныеОбъектыРегистрации(Набор, Узел, БезУчетаАвторегистрации) Цикл + Результат.Всего = Результат.Всего + 1; + Если БСП_КонтрольВыгрузкиОбъекта(Узел, Элемент) Тогда + ВыполнитьКомандуРегистрацииОбъекта(Истина, Узел, Элемент); + Результат.Успешно = Результат.Успешно + 1; + КонецЕсли; + КонецЦикла; + КонецЕсли; + + Возврат Результат; +КонецФункции + +// Проверяет константу на возможность регистрации изменения в БСП. +// Возвращает структуру с полями "Всего" и "Успешно", описывающей количества регистраций +// +Функция БСП_РегистрацияИзмененийКонстанты(Узел, Описание, БезУчетаАвторегистрации = Истина) + + Результат = Новый Структура("Всего, Успешно", 0, 0); + + Если БезУчетаАвторегистрации Тогда + СоставУзла = Неопределено; + Иначе + СоставУзла = Узел.Метаданные().Состав; + КонецЕсли; + + ЭлементСостава = ?(СоставУзла = Неопределено, Неопределено, СоставУзла.Найти(Описание.Метаданные)); + Если ЭлементСостава = Неопределено Или ЭлементСостава.Авторегистрация = АвтоРегистрацияИзменений.Разрешить Тогда + Результат.Всего = 1; + + ОбъектРегистрации = Описание.Менеджер.СоздатьМенеджерЗначения(); + + Если БСП_КонтрольВыгрузкиОбъекта(Узел, ОбъектРегистрации) Тогда + ВыполнитьКомандуРегистрацииОбъекта(Истина, Узел, ОбъектРегистрации); + Результат.Успешно = 1; + КонецЕсли; + + КонецЕсли; + + Возврат Результат; +КонецФункции + +// Проверяет набор метаданных на возможность регистрации изменения в БСП. +// Возвращает структуру с полями "Всего" и "Успешно", описывающей количества регистраций +// +Функция БСП_РегистрацияИзмененийМетаданных(Узел, Описание, БезУчетаАвторегистрации) + + Результат = Новый Структура("Всего, Успешно", 0, 0); + + Если Описание.ЭтоКоллекция Тогда + Для Каждого МетаВид Из Описание.Метаданные Цикл + ТекОписание = ХарактеристикиПоМетаданным(МетаВид); + ДобавитьРезультаты(Результат, БСП_РегистрацияИзмененийМетаданных(Узел, ТекОписание, БезУчетаАвторегистрации) ); + КонецЦикла; + Иначе; + ДобавитьРезультаты(Результат, БСП_РегистрацияИзмененийОбъектаМетаданных(Узел, Описание, БезУчетаАвторегистрации) ); + КонецЕсли; + + Возврат Результат; +КонецФункции + +// Проверяет объект метаданных на возможность регистрации изменения в БСП. +// Возвращает структуру с полями "Всего" и "Успешно", описывающей количества регистраций +// +Функция БСП_РегистрацияИзмененийОбъектаМетаданных(Узел, Описание, БезУчетаАвторегистрации) + + Результат = Новый Структура("Всего, Успешно", 0, 0); + + ЭлементСостава = Узел.Метаданные().Состав.Найти(Описание.Метаданные); + Если ЭлементСостава = Неопределено Тогда + // Вообще не регистрируется + Возврат Результат; + КонецЕсли; + + Если (Не БезУчетаАвторегистрации) И ЭлементСостава.Авторегистрация <> АвтоРегистрацияИзменений.Разрешить Тогда + // Отсечение по авторегистрации + Возврат Результат; + КонецЕсли; + + ТекИмяТаблицы = Описание.ИмяТаблицы; + Если Описание.ЭтоКонстанта Тогда + ДобавитьРезультаты(Результат, БСП_РегистрацияИзмененийКонстанты(Узел, Описание) ); + Возврат Результат; + + ИначеЕсли Описание.ЭтоСсылка Тогда + ПоляИзмерений = "Ссылка"; + + ИначеЕсли Описание.ЭтоНабор Тогда + ПоляИзмерений = ""; + Для Каждого Строка Из ИзмеренияНабораЗаписей(ТекИмяТаблицы) Цикл + ПоляИзмерений = ПоляИзмерений + "," + Строка.Имя + КонецЦикла; + ПоляИзмерений = Сред(ПоляИзмерений, 2); + + Иначе + Возврат Результат; + КонецЕсли; + + Запрос = Новый Запрос(" + |ВЫБРАТЬ РАЗЛИЧНЫЕ + | " + ?(ПустаяСтрока(ПоляИзмерений), "*", ПоляИзмерений) + " + |ИЗ + | " + ТекИмяТаблицы + " + |"); + Выборка = Запрос.Выполнить().Выбрать(); + Пока Выборка.Следующий() Цикл + Если Описание.ЭтоНабор Тогда + Данные = Новый Структура(ПоляИзмерений); + ЗаполнитьЗначенияСвойств(Данные, Выборка); + ДобавитьРезультаты(Результат, БСП_РегистрацияИзмененийНабора(Узел, Данные, Описание) ); + ИначеЕсли Описание.ЭтоСсылка Тогда + ДобавитьРезультаты(Результат, БСП_РегистрацияИзмененийСсылки(Узел, Выборка.Ссылка, БезУчетаАвторегистрации) ); + КонецЕсли; + КонецЦикла; + + Возврат Результат; +КонецФункции + +// Обновляет данные ИОМ и регистрируем на переданном узле +// +Функция БСП_ОбновитьИЗарегистрироватьИОМГлавногоУзла(Знач Узел) Экспорт + + Результат = Новый Структура("Всего, Успешно", 0 , 0); + + МетаПланОбменаУзла = Узел.Метаданные(); + + Если (Не ДоступнаРаботаРИБ) // Недоступна работа с ИОМ из-за версии БСП + Или (ПланыОбмена.ГлавныйУзел() <> Неопределено) // Текущая база - подчиненный узел + Или (Не МетаПланОбменаУзла.РаспределеннаяИнформационнаяБаза) // Узел-параметр не РИБ + Тогда + Возврат Результат; + КонецЕсли; + + // Актуализируем + МодульСтандартныеПодсистемыСервер = ОбщегоНазначенияОбщийМодуль("СтандартныеПодсистемыСервер"); + МодульСтандартныеПодсистемыСервер.ОбновитьПараметрыРаботыПрограммы(); + + // Для РИБ все регистрируем без контроля правил БСП + + // Сам справочник + МетаСправочник = Метаданные.Справочники["ИдентификаторыОбъектовМетаданных"]; + Если МетаПланОбменаУзла.Состав.Содержит(МетаСправочник) Тогда + ПланыОбмена.ЗарегистрироватьИзменения(Узел, МетаСправочник); + + Запрос = Новый Запрос("ВЫБРАТЬ КОЛИЧЕСТВО(Ссылка) КАК КоличествоЭлементов ИЗ Справочник.ИдентификаторыОбъектовМетаданных"); + Результат.Успешно = Запрос.Выполнить().Выгрузить()[0].КоличествоЭлементов; + КонецЕсли; + + // Предопределенные элементы + Результат.Успешно = Результат.Успешно + + ЗарегистрироватьИзменениеПредопределенныхДляУзла(Узел, Метаданные.Справочники) + + ЗарегистрироватьИзменениеПредопределенныхДляУзла(Узел, Метаданные.ПланыВидовХарактеристик) + + ЗарегистрироватьИзменениеПредопределенныхДляУзла(Узел, Метаданные.ПланыСчетов) + + ЗарегистрироватьИзменениеПредопределенныхДляУзла(Узел, Метаданные.ПланыВидовРасчета); + + Результат.Всего = Результат.Успешно; + Возврат Результат; +КонецФункции + +Функция ЗарегистрироватьИзменениеПредопределенныхДляУзла(Знач Узел, Знач КоллекцияМетаданных) + + СоставУзла = Узел.Метаданные().Состав; + Результат = 0; + Запрос = Новый Запрос; + + Для Каждого ОбъектМетаданных Из КоллекцияМетаданных Цикл + Если СоставУзла.Содержит(ОбъектМетаданных) Тогда + + Запрос.Текст = " + |ВЫБРАТЬ + | Ссылка + |ИЗ + | " + ОбъектМетаданных.ПолноеИмя() + " + |ГДЕ + | Предопределенный"; + Выборка = Запрос.Выполнить().Выбрать(); + + Результат = Результат + Выборка.Количество(); + + // Для РИБ регистрируем без контроля правил БСП + Пока Выборка.Следующий() Цикл + ПланыОбмена.ЗарегистрироватьИзменения(Узел, Выборка.Ссылка); + КонецЦикла; + + КонецЕсли; + КонецЦикла; + + Возврат Результат; +КонецФункции + +#КонецОбласти + +#КонецЕсли diff --git a/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/РегистрацияИзмененийДляОбменаДанными.mdo b/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/РегистрацияИзмененийДляОбменаДанными.mdo new file mode 100644 index 0000000..d0f6494 --- /dev/null +++ b/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/РегистрацияИзмененийДляОбменаДанными.mdo @@ -0,0 +1,196 @@ + + + + + + + РегистрацияИзмененийДляОбменаДанными + + ru + Регистрация изменений для обмена данными + + true + DataProcessor.РегистрацияИзмененийДляОбменаДанными.Form.Форма + + + ru + + + + НастройкаАвторегистрацияПоследовательностей + + ru + Авторегистрация последовательностей + + + Boolean + + + ru + Авторегистрация последовательностей + + + + + + НастройкаАвторегистрацияДвижений + + ru + Авторегистрация движений + + + Boolean + + + ru + Авторегистрация движений + + + + + + НастройкаАдресВнешнейОбработкиЗапросов + + ru + Адрес внешней обработки запросов + + + String + + + + ru + Адрес внешней обработки запросов + + + + + + НастройкаВариантНомераСообщения + + ru + Настройка вариант номера сообщения + + + Number + + 10 + + + + + + + НастройкаКонтрольВыгрузкиОбъектов + + ru + Конфигурация может контролировать выгрузку объектов + + При использовании в составе БСП 2.1.2 и старше + + Boolean + + + + + + КонфигурацияПоддерживаетБСП + + ru + Конфигурация поддерживает БСП + + Вычисляется при чтении настроек, ограничивает варианты настроек + + Boolean + + + + + + ДоступнаРегистрацияСредствамиБСП + + ru + Доступна регистрация средствами БСП + + + Boolean + + + + + + ДоступнаРаботаРИБ + + ru + Доступна работа РИБ + + + Boolean + + + + + + ВыборУзлаПланаОбмена + + ru + Выбор узла плана обмена + + PersonalComputer + MobileDevice + + + Форма + + ru + Регистрация изменений для обмена данными + + PersonalComputer + MobileDevice + + + НомераСообщенийУзлаПланаОбмена + + ru + Номера сообщений узла плана обмена + + PersonalComputer + MobileDevice + + + ВыборКонстанты + + ru + Выбор константы + + PersonalComputer + MobileDevice + + + ВыборОбъектовОтбором + + ru + Выбор объектов отбором + + PersonalComputer + MobileDevice + + + УзлыРегистрацииОбъекта + + ru + Узлы регистрации объекта + + PersonalComputer + MobileDevice + + + Настройки + + ru + Настройки + + PersonalComputer + MobileDevice + + diff --git a/Проект_деньги/src/Documents/ВводНачальныхОстатков/Forms/ФормаДокумента/Form.form b/Проект_деньги/src/Documents/ВводНачальныхОстатков/Forms/ФормаДокумента/Form.form new file mode 100644 index 0000000..0f1a5cd --- /dev/null +++ b/Проект_деньги/src/Documents/ВводНачальныхОстатков/Forms/ФормаДокумента/Form.form @@ -0,0 +1,375 @@ + + + + Дата + 25 + true + true + + true + + + Объект.Date + + + ДатаРасширеннаяПодсказка + 27 + Label + true + true + + Left + + + + ДатаКонтекстноеМеню + 26 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + + + + ТЧ + 1 + true + true + + true + + + Объект.ТЧ + + None + + ТЧНомерСтроки + 14 + true + true + + true + + + Объект.ТЧ.LineNumber + + + ТЧНомерСтрокиРасширеннаяПодсказка + 16 + Label + true + true + + Left + + + + ТЧНомерСтрокиКонтекстноеМеню + 15 + true + + LabelField + EnterOnInput + true + Left + true + + true + true + + + + ТЧСчет + 17 + true + true + + true + + + Объект.ТЧ.Счет + + + ТЧСчетРасширеннаяПодсказка + 19 + Label + true + true + + Left + + + + ТЧСчетКонтекстноеМеню + 18 + true + + InputField + EnterOnInput + true + Left + true + + true + true + true + true + true + true + + + + ТЧСумма + 20 + true + true + + true + + + Объект.ТЧ.Сумма + + + ТЧСуммаРасширеннаяПодсказка + 22 + Label + true + true + + Left + + + + ТЧСуммаКонтекстноеМеню + 21 + true + + InputField + EnterOnInput + true + Left + true + + true + true + true + true + true + true + + + + ТЧКоманднаяПанель + 3 + Left + true + + + ТЧСтрокаПоиска + 5 + + ТЧСтрокаПоискаРасширеннаяПодсказка + 7 + Label + true + true + + Left + + + + ТЧСтрокаПоискаКонтекстноеМеню + 6 + true + + ТЧ + + true + + + + ТЧСостояниеПросмотра + 8 + + ТЧСостояниеПросмотраРасширеннаяПодсказка + 10 + Label + true + true + + Left + + + + ТЧСостояниеПросмотраКонтекстноеМеню + 9 + true + + ViewStatusAddition + ТЧ + + true + + + + ТЧУправлениеПоиском + 11 + + ТЧУправлениеПоискомРасширеннаяПодсказка + 13 + Label + true + true + + Left + + + + ТЧУправлениеПоискомКонтекстноеМеню + 12 + true + + SearchControlAddition + ТЧ + + true + + + + ТЧРасширеннаяПодсказка + 4 + Label + true + true + + Left + + + + ТЧКонтекстноеМеню + 2 + true + + true + true + true + true + true + MultiRow +
true
+ 1 + 1 + AutoUse + AutoUse + true + true + true + Auto + Auto + true + true + true + true + AsFileRef + +
+ + ЗакрытьСчета + 23 + true + true + + true + + + ЗакрытьСчетаРасширеннаяПодсказка + 24 + Label + true + true + + Left + + + UsualButton + Form.Command.ЗакрытьСчета + Auto + true + true + true + Center + UserCmds + Auto + + + ФормаКоманднаяПанель + -1 + Left + true + + true + true + true + Vertical + true + true + true + true + true + + Объект + 1 + + DocumentObject.ВводНачальныхОстатков + + + true + + + true + + + Объект.RegisterRecords + +
true
+ true +
+ + ЗакрытьСчета + + <key>ru</key> + <value>Закрыть счета</value> + + 1 + + ru + Закрыть счета + + + true + + + + ЗакрытьСчета + + + Auto + + + + + + + true + +
diff --git a/Проект_деньги/src/Documents/ВводНачальныхОстатков/Forms/ФормаДокумента/Module.bsl b/Проект_деньги/src/Documents/ВводНачальныхОстатков/Forms/ФормаДокумента/Module.bsl new file mode 100644 index 0000000..afe80a9 --- /dev/null +++ b/Проект_деньги/src/Documents/ВводНачальныхОстатков/Forms/ФормаДокумента/Module.bsl @@ -0,0 +1,36 @@ + +&НаСервере +Процедура ЗакрытьСчетаНаСервере() + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ДенежныеСредстваОстатки.Счет КАК Счет, + | ДенежныеСредстваОстатки.СуммаОстаток КАК СуммаОстаток + |ИЗ + | РегистрНакопления.ДенежныеСредства.Остатки КАК ДенежныеСредстваОстатки"; + + РезультатЗапроса = Запрос.Выполнить(); + + Если РезультатЗапроса.Пустой() Тогда + Сообщение = Новый СообщениеПользователю; + Сообщение.Текст = "Нет средств на счетах"; + Сообщение.Сообщить(); + Возврат; + КонецЕсли; + + Выборка = РезультатЗапроса.Выбрать(); + Объект.ТЧ.Очистить(); + + Пока Выборка.Следующий() Цикл + ДобавитьТЧ = Объект.ТЧ.Добавить(); + ДобавитьТЧ.Счет = Выборка.Счет; + ДобавитьТЧ.Сумма = - Выборка.СуммаОстаток; + КонецЦикла; + +КонецПроцедуры + +&НаКлиенте +Процедура ЗакрытьСчета(Команда) + ЗакрытьСчетаНаСервере(); +КонецПроцедуры diff --git a/Проект_деньги/src/Documents/ВводНачальныхОстатков/ObjectModule.bsl b/Проект_деньги/src/Documents/ВводНачальныхОстатков/ObjectModule.bsl new file mode 100644 index 0000000..5810844 --- /dev/null +++ b/Проект_деньги/src/Documents/ВводНачальныхОстатков/ObjectModule.bsl @@ -0,0 +1,25 @@ + +Процедура ОбработкаПроведения(Отказ, Режим) + //{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ + // Данный фрагмент построен конструктором. + // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!! + + // регистр ДенежныеСредства Приход + Движения.ДенежныеСредства.Записывать = Истина; + Для Каждого ТекСтрокаТЧ Из ТЧ Цикл + Движение = Движения.ДенежныеСредства.Добавить(); + Движение.ВидДвижения = ВидДвиженияНакопления.Приход; + Движение.Пользователь = ОбщегоНазначенияКлиентСервер.ПолучитьПользователя(); + Движение.Период = Дата; + Движение.Счет = ТекСтрокаТЧ.Счет; + Движение.Сумма = ТекСтрокаТЧ.Сумма; + КонецЦикла; + + //}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ +КонецПроцедуры + +Процедура ПриУстановкеНовогоНомера(СтандартнаяОбработка, Префикс) + + Префикс = Обмен.ПолучитьПрефиксНомера(); + +КонецПроцедуры diff --git a/Проект_деньги/src/Documents/ВводНачальныхОстатков/ВводНачальныхОстатков.mdo b/Проект_деньги/src/Documents/ВводНачальныхОстатков/ВводНачальныхОстатков.mdo new file mode 100644 index 0000000..0a85105 --- /dev/null +++ b/Проект_деньги/src/Documents/ВводНачальныхОстатков/ВводНачальныхОстатков.mdo @@ -0,0 +1,83 @@ + + + + + + + + + + ВводНачальныхОстатков + + ru + Ввод начальных остатков + + true + Document.ВводНачальныхОстатков.StandardAttribute.Number + DontUse + Use + Managed + Use + String + 9 + Variable + true + true + Document.ВводНачальныхОстатков.Form.ФормаДокумента + AccumulationRegister.ДенежныеСредства + true + true + + ФормаДокумента + + ru + Форма документа + + PersonalComputer + MobileDevice + + + + + + + ТЧ + + ru + ТЧ + + + Счет + + ru + Счет + + + CatalogRef.Счета + + + + ShowError + Use + Use + + + Сумма + + ru + Сумма + + + Number + + 15 + 2 + + + + + Use + Use + + + diff --git a/Проект_деньги/src/Documents/Вложения/Forms/ФормаДокумента/Form.form b/Проект_деньги/src/Documents/Вложения/Forms/ФормаДокумента/Form.form new file mode 100644 index 0000000..f60de7b --- /dev/null +++ b/Проект_деньги/src/Documents/Вложения/Forms/ФормаДокумента/Form.form @@ -0,0 +1,616 @@ + + + + ВкладОткрыт + 4 + true + true + + true + + + Объект.ВкладОткрыт + + + ВкладОткрытРасширеннаяПодсказка + 6 + Label + true + true + + Left + + + + ВкладОткрытКонтекстноеМеню + 5 + true + + CheckBoxField + EnterOnInput + true + Left + true + + + + Группа1 + 22 + + ДатаВклада + 19 + true + true + + true + + + Объект.ДатаВклада + + + OnChange + ДатаВкладаПриИзменении + + + ДатаВкладаРасширеннаяПодсказка + 21 + Label + true + true + + Left + + + + ДатаВкладаКонтекстноеМеню + 20 + true + + InputField + EnterOnInput + true + Left + true + + true + true + true + true + true + true + + + + ДатаВыплаты + 24 + true + true + + true + + + Объект.ДатаВыплаты + + + OnChange + ДатаВыплатыПриИзменении + + + ДатаВыплатыРасширеннаяПодсказка + 26 + Label + true + true + + Left + + + + ДатаВыплатыКонтекстноеМеню + 25 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + + + true + true + + true + + + Группа1РасширеннаяПодсказка + 23 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Auto + true + true + Auto + Auto + + + + Счет + 1 + true + true + + true + + + Объект.Счет + + + СчетРасширеннаяПодсказка + 3 + Label + true + true + + Left + + + + СчетКонтекстноеМеню + 2 + true + + InputField + EnterOnInput + true + Left + true + + true + true + true + true + true + true + + + + Группа4 + 37 + + СуммаВклада + 7 + true + true + + true + + + Объект.СуммаВклада + + + OnChange + СуммаВкладаПриИзменении + + + СуммаВкладаРасширеннаяПодсказка + 9 + Label + true + true + + Left + + + + СуммаВкладаКонтекстноеМеню + 8 + true + + InputField + EnterOnInput + true + Left + true + + true + true + true + true + true + true + + + + Процент + 10 + true + true + + true + + + Объект.Процент + + + OnChange + ПроцентПриИзменении + + + ПроцентРасширеннаяПодсказка + 12 + Label + true + true + + Left + + + + ПроцентКонтекстноеМеню + 11 + true + + InputField + EnterOnInput + true + Left + true + + true + true + true + true + true + true + + + true + true + + true + + + Группа4РасширеннаяПодсказка + 38 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Auto + true + true + Auto + Auto + + + + Группа2 + 27 + + ПрибыльНаСегодня + 13 + true + true + + true + + + Объект.ПрибыльНаСегодня + + + ПрибыльНаСегодняРасширеннаяПодсказка + 15 + Label + true + true + + Left + + + + ПрибыльНаСегодняКонтекстноеМеню + 14 + true + + InputField + true + EnterOnInput + true + Left + true + + true + true + true + true + true + true + + + + ПрибыльПоОкончанию + 29 + true + true + + true + + + Объект.ПрибыльПоОкончанию + + + ПрибыльПоОкончаниюРасширеннаяПодсказка + 31 + Label + true + true + + Left + + + + ПрибыльПоОкончаниюКонтекстноеМеню + 30 + true + + InputField + true + Enter + true + Left + true + + true + true + true + true + true + true + + + true + true + + true + + + Группа2РасширеннаяПодсказка + 28 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Auto + true + true + Auto + Auto + + + + Группа3 + 32 + + СуммаСПрибылью + 16 + true + true + + true + + + Объект.СуммаСПрибылью + + + СуммаСПрибыльюРасширеннаяПодсказка + 18 + Label + true + true + + Left + + + + СуммаСПрибыльюКонтекстноеМеню + 17 + true + + InputField + true + EnterOnInput + true + Left + true + + true + true + true + true + true + true + + + + СуммаПоОкончанию + 34 + true + true + + true + + + Объект.СуммаПоОкончанию + + + СуммаПоОкончаниюРасширеннаяПодсказка + 36 + Label + true + true + + Left + + + + СуммаПоОкончаниюКонтекстноеМеню + 35 + true + + InputField + true + Enter + true + Left + true + + true + true + true + true + true + true + + + true + true + + true + + + Группа3РасширеннаяПодсказка + 33 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Auto + true + true + Auto + Auto + + + + Коммисия + 39 + true + true + + true + + + Объект.Коммисия + + + OnChange + КоммисияПриИзменении + + + КоммисияРасширеннаяПодсказка + 41 + Label + true + true + + Left + + + + КоммисияКонтекстноеМеню + 40 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + + + + ФормаКоманднаяПанель + -1 + Left + true + + + OnOpen + ПриОткрытии + + true + true + true + Vertical + true + true + true + true + true + + Объект + 1 + + DocumentObject.Вложения + + + true + + + true + + + Объект.RegisterRecords + +
true
+ true +
+ + + + + + true + +
diff --git a/Проект_деньги/src/Documents/Вложения/Forms/ФормаДокумента/Module.bsl b/Проект_деньги/src/Documents/Вложения/Forms/ФормаДокумента/Module.bsl new file mode 100644 index 0000000..c288843 --- /dev/null +++ b/Проект_деньги/src/Documents/Вложения/Forms/ФормаДокумента/Module.bsl @@ -0,0 +1,71 @@ + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + Если НЕ Объект.Ссылка.Пустая() И Объект.ВкладОткрыт Тогда + + РасчетДоходаНаСегодня(); + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура РасчетДоходаНаСегодня() + + ДатаВклада = Объект.ДатаВклада; + ДатаВыплаты = Объект.ДатаВыплаты; + СуммаВклада = Объект.СуммаВклада; + ГодовойПроцент = Объект.Процент/100; + ПроцентЗаДень = ГодовойПроцент/365; + Если ТекущаяДата() < ДатаВыплаты Тогда + КоличествоДней = (НачалоДня(ТекущаяДата()) - НачалоДня(ДатаВклада))/86400; + Иначе + КоличествоДней = (НачалоДня(ДатаВыплаты) - НачалоДня(ДатаВклада))/86400; + КонецЕсли; + ПрибыльНаСегодня = СуммаВклада * (ПроцентЗаДень * КоличествоДней) - Объект.Коммисия; + Объект.ПрибыльНаСегодня = ПрибыльНаСегодня; + Объект.СуммаСПрибылью = Объект.СуммаВклада + ПрибыльНаСегодня; + +КонецПроцедуры // РасчетДохода() + + +&НаКлиенте +Процедура СуммаВкладаПриИзменении(Элемент) + + РасчетДоходаНаСегодня(); + +КонецПроцедуры + + +&НаКлиенте +Процедура ПроцентПриИзменении(Элемент) + + РасчетДоходаНаСегодня(); + +КонецПроцедуры + + +&НаКлиенте +Процедура КоммисияПриИзменении(Элемент) + + РасчетДоходаНаСегодня(); + +КонецПроцедуры + + +&НаКлиенте +Процедура ДатаВкладаПриИзменении(Элемент) + + РасчетДоходаНаСегодня(); + +КонецПроцедуры + + +&НаКлиенте +Процедура ДатаВыплатыПриИзменении(Элемент) + + РасчетДоходаНаСегодня(); + +КонецПроцедуры + \ No newline at end of file diff --git a/Проект_деньги/src/Documents/Вложения/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss b/Проект_деньги/src/Documents/Вложения/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss new file mode 100644 index 0000000..9b5b065 --- /dev/null +++ b/Проект_деньги/src/Documents/Вложения/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss @@ -0,0 +1,17 @@ + + + + Normal + dfcece9d-5077-440b-b6b3-45a5cb4538eb + + + Normal + 88619765-ccb3-46c6-ac52-38e9c992ebd4 + + + Normal + b75fecce-942b-4aed-abc9-e6a02e460fb3 + + Normal + 911b6018-f537-43e8-a417-da56b22f9aec + diff --git a/Проект_деньги/src/Documents/Вложения/Forms/ФормаСписка/Form.form b/Проект_деньги/src/Documents/Вложения/Forms/ФормаСписка/Form.form new file mode 100644 index 0000000..200d872 --- /dev/null +++ b/Проект_деньги/src/Documents/Вложения/Forms/ФормаСписка/Form.form @@ -0,0 +1,378 @@ + + + + СписокКомпоновщикНастроекПользовательскиеНастройки + 1 + true + true + + true + + + <key>ru</key> + <value>Группа пользовательских настроек</value> + + false + + СписокКомпоновщикНастроекПользовательскиеНастройкиРасширеннаяПодсказка + 2 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + WeakSeparation + true + true + Auto + Auto + + + + Список + 3 + true + true + + true + + + Список + + true + None + + ДатаВклада + 22 + true + true + + true + + + Список.ДатаВклада + + true + + ДатаВкладаРасширеннаяПодсказка + 24 + Label + true + true + + Left + + + + ДатаВкладаКонтекстноеМеню + 23 + true + + LabelField + Enter + true + Left + true + + true + true + + + + СуммаВклада + 19 + true + true + + true + + + Список.СуммаВклада + + true + + СуммаВкладаРасширеннаяПодсказка + 21 + Label + true + true + + Left + + + + СуммаВкладаКонтекстноеМеню + 20 + true + + LabelField + Enter + true + Left + true + + true + true + + + + ВкладОткрыт + 16 + true + true + + true + + + Список.ВкладОткрыт + + true + + ВкладОткрытРасширеннаяПодсказка + 18 + Label + true + true + + Left + + + + ВкладОткрытКонтекстноеМеню + 17 + true + + CheckBoxField + Enter + true + Left + true + + + None + + СписокКоманднаяПанель + 5 + Left + + + СписокСтрокаПоиска + 7 + + СписокСтрокаПоискаРасширеннаяПодсказка + 9 + Label + true + true + + Left + + + + СписокСтрокаПоискаКонтекстноеМеню + 8 + true + + Список + + true + + + + СписокСостояниеПросмотра + 10 + + СписокСостояниеПросмотраРасширеннаяПодсказка + 12 + Label + true + true + + Left + + + + СписокСостояниеПросмотраКонтекстноеМеню + 11 + true + + ViewStatusAddition + Список + + true + + + + СписокУправлениеПоиском + 13 + + СписокУправлениеПоискомРасширеннаяПодсказка + 15 + Label + true + true + + Left + + + + СписокУправлениеПоискомКонтекстноеМеню + 14 + true + + SearchControlAddition + Список + + true + + + + СписокРасширеннаяПодсказка + 6 + Label + true + true + + Left + + + + СписокКонтекстноеМеню + 4 + true + + true + true + true + true + true + MultiRow +
true
+ 1 + 1 + AutoUse + AutoUse + true + true + true + Auto + Auto + ExpandTopLevel + true + true + true + AsFileRef + + Список.DefaultPicture + + + 60 + + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + true + true + СписокКомпоновщикНастроекПользовательскиеНастройки + +
+ + Закрытые + 25 + true + true + + true + + + ЗакрытыеРасширеннаяПодсказка + 26 + Label + true + true + + Left + + + UsualButton + Form.Command.Закрытые + Auto + true + true + UserCmds + Auto + + + ФормаКоманднаяПанель + -1 + Left + true + + + OnOpen + ПриОткрытии + + true + true + true + Vertical + true + true + true + true + true + + Список + 1 + + DynamicList + + + true + + + true + +
true
+ + Document.Вложения + true + true + true + true + +
+ + Закрытые + + <key>ru</key> + <value>Закрытые</value> + + 1 + + ru + Закрытые + + + true + + + + ОтобразитьЗакрытые + + + Auto + + + + + + +
diff --git a/Проект_деньги/src/Documents/Вложения/Forms/ФормаСписка/Module.bsl b/Проект_деньги/src/Documents/Вложения/Forms/ФормаСписка/Module.bsl new file mode 100644 index 0000000..bb5cf63 --- /dev/null +++ b/Проект_деньги/src/Documents/Вложения/Forms/ФормаСписка/Module.bsl @@ -0,0 +1,48 @@ + +&НаКлиенте +Процедура ОтобразитьЗакрытые(Команда) + + Если Список.Отбор.Элементы[0].ПравоеЗначение Тогда + + Список.Отбор.Элементы[0].ПравоеЗначение = Ложь; + УстановитьЦвет(Ложь); + Иначе + Список.Отбор.Элементы[0].ПравоеЗначение = Истина; + УстановитьЦвет(Истина); + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + УстановитьЦвет(Истина); + НовЭлементОтбора = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + НовЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ВкладОткрыт"); + НовЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + НовЭлементОтбора.ПравоеЗначение = Истина; + НовЭлементОтбора.Использование = Истина; + +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьЦвет(Цвет) + + Если Цвет Тогда + + ЦветКнопки = Новый Цвет(50,50,255); + ЦветТекста = Новый Цвет(255,255,255); + Элементы.Закрытые.ЦветФона = ЦветКнопки; + Элементы.Закрытые.Заголовок = "Закрытые"; + Элементы.Закрытые.ЦветТекста = ЦветТекста; + Иначе + ЦветКнопки = Новый Цвет(50,255,50); + ЦветТекста = Новый Цвет(0,0,0); + Элементы.Закрытые.ЦветФона = ЦветКнопки; + Элементы.Закрытые.Заголовок = "Открытые"; + Элементы.Закрытые.ЦветТекста = ЦветТекста; + КонецЕсли; + +КонецПроцедуры // УстановитьЦвет() + \ No newline at end of file diff --git a/Проект_деньги/src/Documents/Вложения/ObjectModule.bsl b/Проект_деньги/src/Documents/Вложения/ObjectModule.bsl new file mode 100644 index 0000000..bb94c57 --- /dev/null +++ b/Проект_деньги/src/Documents/Вложения/ObjectModule.bsl @@ -0,0 +1,52 @@ +#Область ОбработчикиСобытий + +Процедура ОбработкаПроведения(Отказ, Режим) + + ТекДата = ТекущаяДатаСеанса(); + + // регистр Доходы + Движения.Доходы.Записывать = Истина; + Движение = Движения.Доходы.Добавить(); + Движение.Период = ТекДата; + Движение.Пользователь = ОбщегоНазначенияКлиентСервер.ПолучитьПользователя(); + // временно + Движение.Номенклатура = Справочники.ВидыДоходов.НайтиПоНаименованию("Вложения"); + Движение.Количество = 1; + Движение.Сумма = ПрибыльНаСегодня; + + // регистр ДенежныеСредства Приход + Движения.ДенежныеСредства.Записывать = Истина; + Движение = Движения.ДенежныеСредства.Добавить(); + Движение.ВидДвижения = ВидДвиженияНакопления.Приход; + Движение.Период = ТекДата; + Движение.Пользователь = ОбщегоНазначенияКлиентСервер.ПолучитьПользователя(); + Движение.Счет = Счет; + Движение.Сумма = ПрибыльНаСегодня; + +КонецПроцедуры + +Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения) + + Если ОбменДанными.Загрузка = Истина Тогда + Возврат; + КонецЕсли; + + ГодовойПроцент = Процент/100; + ПроцентЗаДень = ГодовойПроцент/365; + + ТекДата = ТекущаяДатаСеанса(); + + Если ТекДата < ДатаВыплаты Тогда + КоличествоДней = (НачалоДня(ТекДата) - НачалоДня(ДатаВклада))/86400; + Иначе + КоличествоДней = (НачалоДня(ДатаВыплаты) - НачалоДня(ДатаВклада))/86400; + КонецЕсли; + ИтогоДней = (НачалоДня(ДатаВыплаты) - НачалоДня(ДатаВклада))/86400; + ПрибыльНаСегодня = СуммаВклада * (ПроцентЗаДень * КоличествоДней) - Коммисия; + ПрибыльПоОкончанию = СуммаВклада * (ПроцентЗаДень * ИтогоДней); + СуммаСПрибылью = СуммаВклада + ПрибыльНаСегодня; + СуммаПоОкончанию = СуммаВклада + ПрибыльПоОкончанию; + +КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/Проект_деньги/src/Documents/Вложения/Вложения.mdo b/Проект_деньги/src/Documents/Вложения/Вложения.mdo new file mode 100644 index 0000000..dc9cfcc --- /dev/null +++ b/Проект_деньги/src/Documents/Вложения/Вложения.mdo @@ -0,0 +1,258 @@ + + + + + + + + + + Вложения + + ru + Вложения + + true + Document.Вложения.StandardAttribute.Number + DontUse + Use + Managed + Use + + ru + Вложение + + String + 9 + Variable + true + true + Document.Вложения.Form.ФормаДокумента + Document.Вложения.Form.ФормаСписка + AccumulationRegister.ДенежныеСредства + AccumulationRegister.Доходы + true + true + + Счет + + ru + Счет + + + CatalogRef.Счета + + + + ShowError + + Use + Use + + + ВкладОткрыт + + ru + Вклад открыт + + + Boolean + + + + + Use + Use + + + СуммаВклада + + ru + Сумма вклада + + + Number + + 15 + 2 + + + + + ShowError + + Use + Use + + + Процент + + ru + Процент + + + Number + + 5 + 2 + + + + + ShowError + + Use + Use + + + ПрибыльНаСегодня + + ru + Прибыль на сегодня + + + Number + + 15 + 2 + + + + + + Use + Use + + + СуммаСПрибылью + + ru + Сумма с прибылью + + + Number + + 15 + 2 + + + + + + Use + Use + + + ДатаВклада + + ru + Дата вклада + + + Date + + Date + + + + + ShowError + + Use + Use + + + ДатаВыплаты + + ru + Дата выплаты + + + Date + + Date + + + + + ShowError + + Use + Use + + + ПрибыльПоОкончанию + + ru + Прибыль по окончанию + + + Number + + 15 + 2 + + + + + + Use + Use + + + СуммаПоОкончанию + + ru + Сумма по окончанию + + + Number + + 15 + 2 + + + + + + Use + Use + + + Коммисия + + ru + Коммисия + + + Number + + 15 + 2 + + + + + + Use + Use + + + ФормаДокумента + + ru + Форма документа + + PersonalComputer + MobileDevice + + + ФормаСписка + + ru + Форма списка + + PersonalComputer + MobileDevice + + diff --git a/Проект_деньги/src/Documents/Доходы/Forms/ФормаДокумента/Form.form b/Проект_деньги/src/Documents/Доходы/Forms/ФормаДокумента/Form.form new file mode 100644 index 0000000..09ffb29 --- /dev/null +++ b/Проект_деньги/src/Documents/Доходы/Forms/ФормаДокумента/Form.form @@ -0,0 +1,395 @@ + + + + Группа1 + 22 + + Дата + 4 + true + true + + true + + + Объект.Date + + + ДатаРасширеннаяПодсказка + 6 + Label + true + true + + Left + + + + ДатаКонтекстноеМеню + 5 + true + + InputField + EnterOnInput + true + Left + true + + true + true + true + true + true + true + + + true + true + + true + + + Группа1РасширеннаяПодсказка + 23 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + Группа3 + 26 + + Счет + 7 + true + true + + true + + + Объект.Счет + + + СчетРасширеннаяПодсказка + 9 + Label + true + true + + Left + + + + СчетКонтекстноеМеню + 8 + true + + InputField + EnterOnInput + true + Left + true + + true + true + true + true + true + true + + + + ВидДохода + 10 + true + true + + true + + + Объект.ВидДохода + + + OnChange + ВидДоходаПриИзменении + + + ВидДоходаРасширеннаяПодсказка + 12 + Label + true + true + + Left + + + + ВидДоходаКонтекстноеМеню + 11 + true + + InputField + EnterOnInput + true + Left + true + + true + true + true + true + true + true + + + true + true + + true + + + Группа3РасширеннаяПодсказка + 27 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + Группа2 + 24 + + Количество + 13 + true + true + + true + + + OnChange + КоличествоПриИзменении + + + КоличествоРасширеннаяПодсказка + 15 + Label + true + true + + Left + + + + КоличествоКонтекстноеМеню + 14 + true + + InputField + EnterOnInput + true + Left + true + + true + true + true + true + true + true + + + + Цена + 16 + true + true + + true + + + OnChange + ЦенаПриИзменении + + + ЦенаРасширеннаяПодсказка + 18 + Label + true + true + + Left + + + + ЦенаКонтекстноеМеню + 17 + true + + InputField + EnterOnInput + true + Left + true + + true + true + true + true + true + true + + + + Сумма + 19 + true + true + + true + + + Объект.Сумма + + + СуммаРасширеннаяПодсказка + 21 + Label + true + true + + Left + + + + СуммаКонтекстноеМеню + 20 + true + + InputField + EnterOnInput + true + Left + true + + true + true + true + true + true + true + + + true + true + + true + + + Группа2РасширеннаяПодсказка + 25 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + ФормаКоманднаяПанель + -1 + Left + true + + + OnOpen + ПриОткрытии + + + OnCreateAtServer + ПриСозданииНаСервере + + true + true + true + Vertical + true + true + true + true + true + + Объект + 1 + + DocumentObject.Доходы + + + true + + + true + + + Объект.RegisterRecords + +
true
+ true +
+ + ЗапускСРабСтола + + <key>ru</key> + <value>Запуск с раб стола</value> + + 2 + + Boolean + + + true + + + true + + + + + + + + true + +
diff --git a/Проект_деньги/src/Documents/Доходы/Forms/ФормаДокумента/Module.bsl b/Проект_деньги/src/Documents/Доходы/Forms/ФормаДокумента/Module.bsl new file mode 100644 index 0000000..bc338ab --- /dev/null +++ b/Проект_деньги/src/Documents/Доходы/Forms/ФормаДокумента/Module.bsl @@ -0,0 +1,51 @@ + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + ВыводитьДиалоги = ОбщегоНазначенияКлиентСервер.ВыводитьДиалоги(); + + Если Объект.Ссылка.Пустая() И ВыводитьДиалоги И ЗапускСРабСтола Тогда + ВывестиДиалогБыстрогоВыбора(); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ВывестиДиалогБыстрогоВыбора() + + Счет = ОткрытьФормуМодально("Справочник.Счета.Форма.ФормаВыбора", Новый Структура("Заголовок", "Выберите счет!")); + Объект.Счет = Счет; + Если Не ЗначениеЗаполнено(Объект.Счет) Тогда + Предупреждение("Операция отменена!",1); + Закрыть(); + Возврат; + КонецЕсли; + ВидДохода = ОткрытьФормуМодально("Справочник.ВидыДоходов.Форма.ФормаВыбора"); + Объект.ВидДохода = ВидДохода; + Если Не ЗначениеЗаполнено(Объект.ВидДохода) Тогда + Предупреждение("Операция отменена!",1); + Закрыть(); + Возврат; + КонецЕсли; + Сумма = 0; + ВвестиЧисло(Сумма, "Введите сумму!", 15, 2); + Объект.Сумма = Сумма; + Если Не ЗначениеЗаполнено(Объект.Сумма) Тогда + Предупреждение("Операция отменена!",1); + Закрыть(); + Возврат; + КонецЕсли; + Записать(Новый Структура("РежимЗаписи", РежимЗаписиДокумента.Проведение)); + Предупреждение("Выполнено!",1); + Закрыть(); + +КонецПроцедуры + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + ЗапускСРабСтола = Параметры.Свойство("ЗапускСРабСтола"); + +КонецПроцедуры + + diff --git a/Проект_деньги/src/Documents/Доходы/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss b/Проект_деньги/src/Documents/Доходы/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss new file mode 100644 index 0000000..9b5b065 --- /dev/null +++ b/Проект_деньги/src/Documents/Доходы/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss @@ -0,0 +1,17 @@ + + + + Normal + dfcece9d-5077-440b-b6b3-45a5cb4538eb + + + Normal + 88619765-ccb3-46c6-ac52-38e9c992ebd4 + + + Normal + b75fecce-942b-4aed-abc9-e6a02e460fb3 + + Normal + 911b6018-f537-43e8-a417-da56b22f9aec + diff --git a/Проект_деньги/src/Documents/Доходы/Forms/ФормаСписка/Form.form b/Проект_деньги/src/Documents/Доходы/Forms/ФормаСписка/Form.form new file mode 100644 index 0000000..eafafa8 --- /dev/null +++ b/Проект_деньги/src/Documents/Доходы/Forms/ФормаСписка/Form.form @@ -0,0 +1,421 @@ + + + + СписокКомпоновщикНастроекПользовательскиеНастройки + 1 + true + true + + true + + + <key>ru</key> + <value>Группа пользовательских настроек</value> + + false + + СписокКомпоновщикНастроекПользовательскиеНастройкиРасширеннаяПодсказка + 2 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + WeakSeparation + true + true + Auto + Auto + + + + Список + 3 + true + true + + true + + + Список + + true + None + + Дата + 16 + true + true + + true + + + Список.Date + + true + + ДатаРасширеннаяПодсказка + 18 + Label + true + true + + Left + + + + ДатаКонтекстноеМеню + 17 + true + + LabelField + Enter + true + Left + true + + true + true + + ru + ДФ=dd.MM.yyyy + + + + + Счет + 30 + true + true + + true + + + Список.Счет + + + СчетРасширеннаяПодсказка + 32 + Label + true + true + + Left + + + + СчетКонтекстноеМеню + 31 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + + + + ВидДохода + 25 + true + true + + true + + + Список.ВидДохода + + + ВидДоходаРасширеннаяПодсказка + 27 + Label + true + true + + Left + + + + ВидДоходаКонтекстноеМеню + 26 + true + + LabelField + Enter + true + Left + true + + true + true + + + + Сумма + 22 + true + true + + true + + + Список.Сумма + + + СуммаРасширеннаяПодсказка + 24 + Label + true + true + + Left + + + + СуммаКонтекстноеМеню + 23 + true + + LabelField + Enter + true + Left + true + + true + true + + + None + + СписокКоманднаяПанель + 5 + Left + + + СписокСтрокаПоиска + 7 + + СписокСтрокаПоискаРасширеннаяПодсказка + 9 + Label + true + true + + Left + + + + СписокСтрокаПоискаКонтекстноеМеню + 8 + true + + Список + + true + + + + СписокСостояниеПросмотра + 10 + + СписокСостояниеПросмотраРасширеннаяПодсказка + 12 + Label + true + true + + Left + + + + СписокСостояниеПросмотраКонтекстноеМеню + 11 + true + + ViewStatusAddition + Список + + true + + + + СписокУправлениеПоиском + 13 + + СписокУправлениеПоискомРасширеннаяПодсказка + 15 + Label + true + true + + Left + + + + СписокУправлениеПоискомКонтекстноеМеню + 14 + true + + SearchControlAddition + Список + + true + + + + СписокРасширеннаяПодсказка + 6 + Label + true + true + + Left + + + + СписокКонтекстноеМеню + 4 + true + + true + true + true + true + true + MultiRow +
true
+ 1 + 1 + AutoUse + AutoUse + true + true + true + Auto + Auto + ExpandTopLevel + true + true + true + + Список.DefaultPicture + + + 60 + + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + true + true + СписокКомпоновщикНастроекПользовательскиеНастройки + +
+ + ФормаКоманднаяПанель + -1 + + ВывестиОтчет + 28 + + <key>ru</key> + <value>Вывести отчет</value> + + true + true + + true + + + ВывестиОтчетРасширеннаяПодсказка + 29 + Label + true + true + + Left + + + Form.Command.ВывестиОтчет + Auto + true + true + UserCmds + Auto + + Left + true + + true + true + true + Vertical + true + true + true + true + true + + Список + 1 + + DynamicList + + + true + + + true + +
true
+ + Document.Доходы + true + true + true + true + +
+ + ВывестиОтчет + + <key>ru</key> + <value>Вывести отчет</value> + + 1 + + ru + Вывести отчет + + + true + + + + ВывестиОтчет + + + Auto + + + + + + +
diff --git a/Проект_деньги/src/Documents/Доходы/Forms/ФормаСписка/Module.bsl b/Проект_деньги/src/Documents/Доходы/Forms/ФормаСписка/Module.bsl new file mode 100644 index 0000000..7b0cd64 --- /dev/null +++ b/Проект_деньги/src/Documents/Доходы/Forms/ФормаСписка/Module.bsl @@ -0,0 +1,15 @@ + +&НаКлиенте +Процедура ВывестиОтчет(Команда) + + ПараметрыОтчета = Новый Структура; + ПараметрыОтчета.Вставить("ИмяМакета", "ОтчетПоДаходам"); + ФормаОтчета = ПолучитьФорму("ОбщаяФорма.ФормаОтчета",ПараметрыОтчета); + Если ФормаОтчета.Открыта() Тогда + ФормаОтчета.Закрыть(); + КонецЕсли; + ФормаОтчета.Открыть(); + +КонецПроцедуры + + \ No newline at end of file diff --git a/Проект_деньги/src/Documents/Доходы/ObjectModule.bsl b/Проект_деньги/src/Documents/Доходы/ObjectModule.bsl new file mode 100644 index 0000000..b22b34b --- /dev/null +++ b/Проект_деньги/src/Documents/Доходы/ObjectModule.bsl @@ -0,0 +1,33 @@ + +Процедура ОбработкаПроведения(Отказ, Режим) + //{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ + // Данный фрагмент построен конструктором. + // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!! + + // регистр ДенежныеСредства Приход + Движения.ДенежныеСредства.Записывать = Истина; + Движение = Движения.ДенежныеСредства.Добавить(); + Движение.ВидДвижения = ВидДвиженияНакопления.Приход; + Движение.Период = Дата; + Движение.Пользователь = ОбщегоНазначенияКлиентСервер.ПолучитьПользователя(); + Движение.Счет = Счет; + Движение.Сумма = Сумма; + + // регистр Доходы + Движения.Доходы.Записывать = Истина; + Движение = Движения.Доходы.Добавить(); + Движение.Период = Дата; + Движение.Номенклатура = ВидДохода; + Движение.Пользователь = ОбщегоНазначенияКлиентСервер.ПолучитьПользователя(); + Движение.Количество = 1; + Движение.Сумма = Сумма; + + //}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ +КонецПроцедуры + +Процедура ПриУстановкеНовогоНомера(СтандартнаяОбработка, Префикс) + + Префикс = Обмен.ПолучитьПрефиксНомера(); + +КонецПроцедуры + diff --git a/Проект_деньги/src/Documents/Доходы/Доходы.mdo b/Проект_деньги/src/Documents/Доходы/Доходы.mdo new file mode 100644 index 0000000..2aedc70 --- /dev/null +++ b/Проект_деньги/src/Documents/Доходы/Доходы.mdo @@ -0,0 +1,120 @@ + + + + + + + + + + Доходы + + ru + Доходы + + true + Document.Доходы.StandardAttribute.Number + DontUse + Use + Managed + Use + + ru + Доход + + String + 9 + Variable + true + true + Document.Доходы.Form.ФормаДокумента + Document.Доходы.Form.ФормаСписка + AccumulationRegister.ДенежныеСредства + AccumulationRegister.Доходы + true + true + + Счет + + ru + Счет + + + CatalogRef.Счета + + + + ShowError + + Use + Use + + + ВидДохода + + ru + Вид дохода + + + CatalogRef.ВидыДоходов + + + + ShowError + + Use + Use + + + Сумма + + ru + Сумма + + + Number + + 15 + 2 + + + + + + Use + Use + + + Ответственный + + ru + Ответственный + + + CatalogRef.Пользователи + + + + + Use + Use + + + ФормаДокумента + + ru + Форма документа + + PersonalComputer + MobileDevice + + + ФормаСписка + + ru + Форма списка + + PersonalComputer + MobileDevice + + diff --git a/Проект_деньги/src/Documents/Желания/Forms/ФормаДокумента/Form.form b/Проект_деньги/src/Documents/Желания/Forms/ФормаДокумента/Form.form new file mode 100644 index 0000000..9d88c40 --- /dev/null +++ b/Проект_деньги/src/Documents/Желания/Forms/ФормаДокумента/Form.form @@ -0,0 +1,588 @@ + + + + Группа2 + 43 + + НаименованиеЖелания + 37 + true + true + + true + + + Объект.НаименованиеЖелания + + + НаименованиеЖеланияРасширеннаяПодсказка + 39 + Label + true + true + + Left + + + + НаименованиеЖеланияКонтекстноеМеню + 38 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + + + + Выполнено + 40 + true + true + + true + + + Объект.Выполнено + + + ВыполненоРасширеннаяПодсказка + 42 + Label + true + true + + Left + + + + ВыполненоКонтекстноеМеню + 41 + true + + CheckBoxField + Enter + true + Left + true + + + true + true + + true + + + Группа2РасширеннаяПодсказка + 44 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + Группа1 + 32 + + Номер + 1 + true + true + + true + + + Объект.Number + + + НомерРасширеннаяПодсказка + 3 + Label + true + true + + Left + + + + НомерКонтекстноеМеню + 2 + true + + InputField + EnterOnInput + true + Left + true + + true + true + true + true + true + true + + + + Дата + 4 + true + true + + true + + + Объект.Date + + + ДатаРасширеннаяПодсказка + 6 + Label + true + true + + Left + + + + ДатаКонтекстноеМеню + 5 + true + + InputField + EnterOnInput + true + Left + true + + true + true + true + true + true + true + + + true + true + + true + + + Группа1РасширеннаяПодсказка + 33 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + ТЧ + 7 + true + true + + true + + + Объект.ТЧ + + None + + ТЧНомерСтроки + 20 + true + true + + true + + + Объект.ТЧ.LineNumber + + + ТЧНомерСтрокиРасширеннаяПодсказка + 22 + Label + true + true + + Left + + + + ТЧНомерСтрокиКонтекстноеМеню + 21 + true + + LabelField + EnterOnInput + true + Left + true + + true + true + + + + ТЧНоменклатура + 23 + true + true + + true + + + Объект.ТЧ.Номенклатура + + + OnChange + ТЧНоменклатураПриИзменении + + + ТЧНоменклатураРасширеннаяПодсказка + 25 + Label + true + true + + Left + + + + ТЧНоменклатураКонтекстноеМеню + 24 + true + + InputField + EnterOnInput + true + Left + true + + true + true + true + true + true + true + + + + ТЧЕдиницаИзмерения + 26 + true + true + + true + + + Объект.ТЧ.ЕдиницаИзмерения + + + ТЧЕдиницаИзмеренияРасширеннаяПодсказка + 28 + Label + true + true + + Left + + + + ТЧЕдиницаИзмеренияКонтекстноеМеню + 27 + true + + LabelField + EnterOnInput + true + Left + true + + true + true + + + + ТЧКоличество + 29 + true + true + + true + + + Объект.ТЧ.Количество + + + ТЧКоличествоРасширеннаяПодсказка + 31 + Label + true + true + + Left + + + + ТЧКоличествоКонтекстноеМеню + 30 + true + + InputField + EnterOnInput + true + Left + true + + true + true + true + true + true + true + + + + ТЧКоманднаяПанель + 9 + Left + true + + + ТЧСтрокаПоиска + 11 + + ТЧСтрокаПоискаРасширеннаяПодсказка + 13 + Label + true + true + + Left + + + + ТЧСтрокаПоискаКонтекстноеМеню + 12 + true + + ТЧ + + true + + + + ТЧСостояниеПросмотра + 14 + + ТЧСостояниеПросмотраРасширеннаяПодсказка + 16 + Label + true + true + + Left + + + + ТЧСостояниеПросмотраКонтекстноеМеню + 15 + true + + ViewStatusAddition + ТЧ + + true + + + + ТЧУправлениеПоиском + 17 + + ТЧУправлениеПоискомРасширеннаяПодсказка + 19 + Label + true + true + + Left + + + + ТЧУправлениеПоискомКонтекстноеМеню + 18 + true + + SearchControlAddition + ТЧ + + true + + + + ТЧРасширеннаяПодсказка + 10 + Label + true + true + + Left + + + + ТЧКонтекстноеМеню + 8 + true + + true + true + true + true + true + MultiRow +
true
+ 1 + 1 + AutoUse + AutoUse + true + true + true + Auto + Auto + true + true + true + true + +
+ + Комментарий + 34 + true + true + + true + + + Объект.Комментарий + + + КомментарийРасширеннаяПодсказка + 36 + Label + true + true + + Left + + + + КомментарийКонтекстноеМеню + 35 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + + + + ФормаКоманднаяПанель + -1 + Left + true + + + OnOpen + ПриОткрытии + + true + true + true + Vertical + true + true + true + true + true + + Объект + 1 + + DocumentObject.Желания + + + true + + + true + + + Объект.RegisterRecords + +
true
+ true +
+ + + + + + + AfterWrite + ПослеЗаписи + + + BeforeWrite + ПередЗаписью + + + BeforeWriteAtServer + ПередЗаписьюНаСервере + + true + +
diff --git a/Проект_деньги/src/Documents/Желания/Forms/ФормаДокумента/Module.bsl b/Проект_деньги/src/Documents/Желания/Forms/ФормаДокумента/Module.bsl new file mode 100644 index 0000000..783e915 --- /dev/null +++ b/Проект_деньги/src/Documents/Желания/Forms/ФормаДокумента/Module.bsl @@ -0,0 +1,126 @@ + +#Область ОбработчикиСобытийФормы + + +&НаСервереБезКонтекста +Функция ПередЗаписьюНаСервере(Создан) + + Если Создан = Справочники.Пользователи.ПустаяСсылка() Тогда + ТекПользователь = ПользователиИнформационнойБазы.ТекущийПользователь(); + ТекущийПользователь = Справочники.Пользователи.НайтиПоНаименованию(ТекПользователь); + Создан = ТекущийПользователь; + КонецЕсли; + Возврат Создан; + +КонецФункции + +&НаКлиенте +Процедура ПередЗаписью(Отказ, ПараметрыЗаписи) + + Объект.Создан = ПередЗаписьюНаСервере(Объект.Создан); + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + ВыводитьДиалоги = ОбщегоНазначенияКлиентСервер.ВыводитьДиалоги(); + + Если НЕ ЗначениеЗаполнено(Объект.Ссылка) И ВыводитьДиалоги Тогда + Оповещение = Новый ОписаниеОповещения("ПослеВводаНаименованияПокупки", ЭтотОбъект); + ПоказатьВводСтроки(Оповещение, "", "Введите наименование покупки!", 150); + КонецЕсли; + +КонецПроцедуры + +//@skip-check module-structure-form-event-regions +&НаКлиенте +Функция ВыборНоменклатуры() + + Номенклатура = ОткрытьФормуМодально("Справочник.Номенклатура.Форма.ФормаВыбора", Новый Структура("Товар", "Товар") ); + + Если Номенклатура <> Неопределено Тогда + Возврат Номенклатура; + КонецЕсли; + +КонецФункции // ВыборНоменклатуры() + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыТЧ + +&НаКлиенте +Процедура ТЧНоменклатураПриИзменении(Элемент) + + Элемент = Элементы.ТЧ.ТекущиеДанные; + Элемент.ЕдиницаИзмерения = Общий_ПД_Сервер.ПолучитьЕдиницуИзмерения(Элемент.Номенклатура); + Если Элемент.Количество = 0 Тогда + Элемент.Количество = 1; + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаКлиенте +Процедура ПослеВводаНаименованияПокупки(Результат, ДопПараметры) Экспорт + + Если НЕ ЗначениеЗаполнено(Результат) Тогда + Предупреждение("Операция отменена!", 1); + Закрыть(); + Возврат; + Иначе + Объект.НаименованиеЖелания = Результат; + КонецЕсли; + + ВвыестиПокупку(); + +КонецПроцедуры + +&НаКлиенте +Процедура ВвыестиПокупку() + + СтрДобавить = Объект.ТЧ.Добавить(); + Номенклатура = ВыборНоменклатуры(); + Если Номенклатура = Неопределено Тогда + Предупреждение("Операция отменена!", 1); + Закрыть(); + Возврат; + КонецЕсли; + СтрДобавить.Номенклатура = Номенклатура; + СтрДобавить.ЕдиницаИзмерения = Общий_ПД_Сервер.ПолучитьЕдиницуИзмерения(Номенклатура); + + Оповещение = Новый ОписаниеОповещения("ПослеВводаКоличество", ЭтотОбъект, Новый Структура("СтрокаТЧ", СтрДобавить)); + ПоказатьВводЧисла(Оповещение, 1, "Введите количество!", 15, 3); + +КонецПроцедуры + +&НаКлиенте +Процедура ПослеВводаКоличество(Количество, ДопПараметры) Экспорт + + Если НЕ ЗначениеЗаполнено(Количество) Тогда + Предупреждение("Операция отменена!", 1); + Закрыть(); + Возврат; + КонецЕсли; + + ДопПараметры.СтрокаТЧ.Количество = Количество; + + Оповещение = Новый ОписаниеОповещения("ПослеОтветаНаВопрос", ЭтотОбъект, ); + ПоказатьВопрос(Оповещение, "Ввести ещё одну покупку?", РежимДиалогаВопрос.ДаНет); + +КонецПроцедуры + +&НаКлиенте +Процедура ПослеОтветаНаВопрос(Результат, ДопПараметры) Экспорт + + Если Результат = КодВозвратаДиалога.Да Тогда + ВвыестиПокупку(); + КонецЕсли; + +КонецПроцедуры + + +#КонецОбласти diff --git a/Проект_деньги/src/Documents/Желания/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss b/Проект_деньги/src/Documents/Желания/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss new file mode 100644 index 0000000..9b5b065 --- /dev/null +++ b/Проект_деньги/src/Documents/Желания/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss @@ -0,0 +1,17 @@ + + + + Normal + dfcece9d-5077-440b-b6b3-45a5cb4538eb + + + Normal + 88619765-ccb3-46c6-ac52-38e9c992ebd4 + + + Normal + b75fecce-942b-4aed-abc9-e6a02e460fb3 + + Normal + 911b6018-f537-43e8-a417-da56b22f9aec + diff --git a/Проект_деньги/src/Documents/Желания/Forms/ФормаСписка/Form.form b/Проект_деньги/src/Documents/Желания/Forms/ФормаСписка/Form.form new file mode 100644 index 0000000..a026daf --- /dev/null +++ b/Проект_деньги/src/Documents/Желания/Forms/ФормаСписка/Form.form @@ -0,0 +1,386 @@ + + + + СписокКомпоновщикНастроекПользовательскиеНастройки + 1 + true + true + + true + + + <key>ru</key> + <value>Группа пользовательских настроек</value> + + false + + СписокКомпоновщикНастроекПользовательскиеНастройкиРасширеннаяПодсказка + 2 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + WeakSeparation + true + true + Auto + Auto + + + + Список + 3 + true + true + + true + + + Список + + true + None + + Дата + 25 + true + true + + true + + + Список.Date + + + ДатаРасширеннаяПодсказка + 27 + Label + true + true + + Left + + + + ДатаКонтекстноеМеню + 26 + true + + LabelField + Enter + true + Left + true + + true + true + + ru + ДФ=dd.MM.yyyy + + + + + НаименованиеЖелания + 19 + + <key>ru</key> + <value>Желание</value> + + true + true + + true + + + Список.НаименованиеЖелания + + + НаименованиеЖеланияРасширеннаяПодсказка + 21 + Label + true + true + + Left + + + + НаименованиеЖеланияКонтекстноеМеню + 20 + true + + LabelField + Enter + true + Left + true + + true + true + + + + Выполнено + 22 + true + true + + true + + + Список.Выполнено + + + ВыполненоРасширеннаяПодсказка + 24 + Label + true + true + + Left + + + + ВыполненоКонтекстноеМеню + 23 + true + + CheckBoxField + Enter + true + Left + true + + + None + + СписокКоманднаяПанель + 5 + Left + + + OnActivateRow + СписокПриАктивизацииСтроки + + + СписокСтрокаПоиска + 7 + + СписокСтрокаПоискаРасширеннаяПодсказка + 9 + Label + true + true + + Left + + + + СписокСтрокаПоискаКонтекстноеМеню + 8 + true + + Список + + true + + + + СписокСостояниеПросмотра + 10 + + СписокСостояниеПросмотраРасширеннаяПодсказка + 12 + Label + true + true + + Left + + + + СписокСостояниеПросмотраКонтекстноеМеню + 11 + true + + ViewStatusAddition + Список + + true + + + + СписокУправлениеПоиском + 13 + + СписокУправлениеПоискомРасширеннаяПодсказка + 15 + Label + true + true + + Left + + + + СписокУправлениеПоискомКонтекстноеМеню + 14 + true + + SearchControlAddition + Список + + true + + + + СписокРасширеннаяПодсказка + 6 + Label + true + true + + Left + + + + СписокКонтекстноеМеню + 4 + true + + true + true + true + true + true + MultiRow +
true
+ 1 + 1 + AutoUse + AutoUse + true + true + true + Auto + Auto + ExpandTopLevel + true + true + true + AsFileRef + + Список.DefaultPicture + + + 60 + + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + true + true + СписокКомпоновщикНастроекПользовательскиеНастройки + +
+ + СписокВыполнено + 28 + true + true + + true + + + СписокВыполненоРасширеннаяПодсказка + 29 + Label + true + true + + Left + + + UsualButton + Form.Command.Выполнено + Auto + true + 2 + true + true + Center + UserCmds + Auto + + + ФормаКоманднаяПанель + -1 + Left + true + + true + true + true + Vertical + true + true + true + true + true + + Список + 1 + + DynamicList + + + true + + + true + +
true
+ + Document.Желания + true + true + true + true + +
+ + Выполнено + + <key>ru</key> + <value>Выполнено</value> + + 1 + + ru + Выполнено + + + true + + + + Выполнено + + + Auto + + + + + + +
diff --git a/Проект_деньги/src/Documents/Желания/Forms/ФормаСписка/Module.bsl b/Проект_деньги/src/Documents/Желания/Forms/ФормаСписка/Module.bsl new file mode 100644 index 0000000..e33b73f --- /dev/null +++ b/Проект_деньги/src/Documents/Желания/Forms/ФормаСписка/Module.bsl @@ -0,0 +1,33 @@ + +&НаКлиенте +Процедура Выполнено(Команда) + + Элемент = Элементы.Список.ТекущаяСтрока; + Если Не Элемент = Неопределено Тогда + УстановитьВыполнено(Элемент); + ОбновитьИнтерфейс(); + КонецЕсли; + +КонецПроцедуры + +&НаСервереБезКонтекста +Процедура УстановитьВыполнено(Док) + + ДокОбъект = Док.ПолучитьОбъект(); + ДокОбъект.Выполнено = ?(ДокОбъект.Выполнено, Ложь, Истина); + ДокОбъект.Записать(); + +КонецПроцедуры + +&НаКлиенте +Процедура СписокПриАктивизацииСтроки(Элемент) + + Если Элемент.ТекущиеДанные.Выполнено Тогда + СВЗаголовок = "Отменить выполнение" + Иначе + СВЗаголовок = "Выполнено" + КонецЕсли; + + Элементы.СписокВыполнено.Заголовок = СВЗаголовок; + +КонецПроцедуры diff --git a/Проект_деньги/src/Documents/Желания/ObjectModule.bsl b/Проект_деньги/src/Documents/Желания/ObjectModule.bsl new file mode 100644 index 0000000..b1b8d2b --- /dev/null +++ b/Проект_деньги/src/Documents/Желания/ObjectModule.bsl @@ -0,0 +1,19 @@ +#Область ОбработчикиСобытий + +Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения) + + Если ОбменДанными.Загрузка = Истина Тогда + Возврат; + КонецЕсли; + + Ответственный = ОбщегоНазначенияКлиентСервер.ПолучитьПользователя(); + +КонецПроцедуры + +Процедура ПриУстановкеНовогоНомера(СтандартнаяОбработка, Префикс) + + Префикс = Обмен.ПолучитьПрефиксНомера(); + +КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/Проект_деньги/src/Documents/Желания/Желания.mdo b/Проект_деньги/src/Documents/Желания/Желания.mdo new file mode 100644 index 0000000..b179b8f --- /dev/null +++ b/Проект_деньги/src/Documents/Желания/Желания.mdo @@ -0,0 +1,193 @@ + + + + + + + + + + Желания + + ru + Планируемые покупки + + true + Document.Желания.StandardAttribute.Number + DontUse + Use + Managed + Use + + ru + Планируемая покупка + + String + 9 + Variable + true + true + Document.Желания.Form.ФормаДокумента + Document.Желания.Form.ФормаСписка + Deny + true + true + + Комментарий + + ru + Комментарий + + + String + + 150 + + + + + + Use + Use + + + НаименованиеЖелания + + ru + Наименование желания + + + String + + 150 + + + + + ShowError + + Use + Use + + + Выполнено + + ru + Выполнено + + + Boolean + + + + + Use + Use + + + Ответственный + + ru + Ответственный + + + CatalogRef.Пользователи + + + + + Use + Use + + + Создан + + ru + Создан + + + CatalogRef.Пользователи + + + + + Use + Use + + + ФормаДокумента + + ru + Форма документа + + PersonalComputer + MobileDevice + + + ФормаСписка + + ru + Форма списка + + PersonalComputer + MobileDevice + + + + + + + ТЧ + + ru + ТЧ + + + Номенклатура + + ru + Номенклатура + + + CatalogRef.Номенклатура + + + + ShowError + Use + Use + + + ЕдиницаИзмерения + + ru + Ед. измер. + + + CatalogRef.ЕдиницыИзмерений + + + + Use + Use + + + Количество + + ru + Количество + + + Number + + 12 + 3 + + + + + Use + Use + + + diff --git a/Проект_деньги/src/Documents/КоммунальныеПлатежи/Forms/ФормаДокумента/Form.form b/Проект_деньги/src/Documents/КоммунальныеПлатежи/Forms/ФормаДокумента/Form.form new file mode 100644 index 0000000..d91b0e6 --- /dev/null +++ b/Проект_деньги/src/Documents/КоммунальныеПлатежи/Forms/ФормаДокумента/Form.form @@ -0,0 +1,701 @@ + + + + Группа1 + 47 + + Номер + 1 + true + true + + true + + + Объект.Number + + + НомерРасширеннаяПодсказка + 3 + Label + true + true + + Left + + + + НомерКонтекстноеМеню + 2 + true + + InputField + EnterOnInput + true + Left + true + + true + true + true + true + true + true + + + + Дата + 4 + true + true + + true + + + Объект.Date + + + ДатаРасширеннаяПодсказка + 6 + Label + true + true + + Left + + + + ДатаКонтекстноеМеню + 5 + true + + InputField + true + EnterOnInput + true + Left + true + + true + true + true + true + true + true + + + + Месяц + 7 + true + true + + true + + + Объект.Месяц + + + МесяцРасширеннаяПодсказка + 9 + Label + true + true + + Left + + + + МесяцКонтекстноеМеню + 8 + true + + InputField + EnterOnInput + true + Left + true + + true + true + true + + ru + ДФ=MM; ДЛФ=DD + + true + true + true + + + true + true + + true + + + Группа1РасширеннаяПодсказка + 48 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Auto + true + true + Auto + Auto + + + + Группа2 + 49 + + Счет + 10 + true + true + + true + + + Объект.Счет + + + OnChange + СчетПриИзменении + + + СчетРасширеннаяПодсказка + 12 + Label + true + true + + Left + + + + СчетКонтекстноеМеню + 11 + true + + InputField + EnterOnInput + true + Left + true + + true + true + true + true + true + true + + + + СуммаПлатежа + 13 + true + true + + true + + + Объект.СуммаПлатежа + + + СуммаПлатежаРасширеннаяПодсказка + 15 + Label + true + true + + Left + + + + СуммаПлатежаКонтекстноеМеню + 14 + true + + LabelField + EnterOnInput + true + Left + true + + true + true + + + true + true + + true + + + Группа2РасширеннаяПодсказка + 50 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Auto + true + true + Auto + Auto + + + + КомПлатежи + 16 + true + true + + true + + + Объект.КомПлатежи + + None + + КомПлатежиНомерСтроки + 29 + true + true + + true + + + Объект.КомПлатежи.LineNumber + + + КомПлатежиНомерСтрокиРасширеннаяПодсказка + 31 + Label + true + true + + Left + + + + КомПлатежиНомерСтрокиКонтекстноеМеню + 30 + true + + LabelField + EnterOnInput + true + Left + true + + true + true + + + + КомПлатежиНоменклатура + 32 + true + true + + true + + + Объект.КомПлатежи.Номенклатура + + + OnChange + КомПлатежиНоменклатураПриИзменении + + + КомПлатежиНоменклатураРасширеннаяПодсказка + 34 + Label + true + true + + Left + + + + КомПлатежиНоменклатураКонтекстноеМеню + 33 + true + + InputField + EnterOnInput + true + Left + true + + true + true + true + true + true + true + + Отбор.Родитель + + + + + + + + КомПлатежиЕдиницаИзмерения + 35 + true + true + + true + + + Объект.КомПлатежи.ЕдиницаИзмерения + + + КомПлатежиЕдиницаИзмеренияРасширеннаяПодсказка + 37 + Label + true + true + + Left + + + + КомПлатежиЕдиницаИзмеренияКонтекстноеМеню + 36 + true + + LabelField + EnterOnInput + true + Left + true + + true + true + + + + КомПлатежиКоличество + 38 + true + true + + true + + + Объект.КомПлатежи.Количество + + + OnChange + КомПлатежиКоличествоПриИзменении + + + КомПлатежиКоличествоРасширеннаяПодсказка + 40 + Label + true + true + + Left + + + + КомПлатежиКоличествоКонтекстноеМеню + 39 + true + + InputField + EnterOnInput + true + Left + true + + true + true + true + true + true + true + + + + КомПлатежиЦена + 41 + true + true + + true + + + Объект.КомПлатежи.Цена + + + OnChange + КомПлатежиЦенаПриИзменении + + + КомПлатежиЦенаРасширеннаяПодсказка + 43 + Label + true + true + + Left + + + + КомПлатежиЦенаКонтекстноеМеню + 42 + true + + InputField + EnterOnInput + true + Left + true + + true + true + true + true + true + true + + + + КомПлатежиСумма + 44 + true + true + + true + + + Объект.КомПлатежи.Сумма + + + КомПлатежиСуммаРасширеннаяПодсказка + 46 + Label + true + true + + Left + + + + КомПлатежиСуммаКонтекстноеМеню + 45 + true + + LabelField + EnterOnInput + true + Left + true + + true + true + + + + КомПлатежиКоманднаяПанель + 18 + Left + true + + + КомПлатежиСтрокаПоиска + 20 + + КомПлатежиСтрокаПоискаРасширеннаяПодсказка + 22 + Label + true + true + + Left + + + + КомПлатежиСтрокаПоискаКонтекстноеМеню + 21 + true + + КомПлатежи + + true + + + + КомПлатежиСостояниеПросмотра + 23 + + КомПлатежиСостояниеПросмотраРасширеннаяПодсказка + 25 + Label + true + true + + Left + + + + КомПлатежиСостояниеПросмотраКонтекстноеМеню + 24 + true + + ViewStatusAddition + КомПлатежи + + true + + + + КомПлатежиУправлениеПоиском + 26 + + КомПлатежиУправлениеПоискомРасширеннаяПодсказка + 28 + Label + true + true + + Left + + + + КомПлатежиУправлениеПоискомКонтекстноеМеню + 27 + true + + SearchControlAddition + КомПлатежи + + true + + + + КомПлатежиРасширеннаяПодсказка + 19 + Label + true + true + + Left + + + + КомПлатежиКонтекстноеМеню + 17 + true + + true + true + true + true + true + MultiRow +
true
+ 1 + 1 + AutoUse + AutoUse + true + true + true + Auto + Auto + true + true + true + true + +
+ + ФормаКоманднаяПанель + -1 + Left + true + + + OnOpen + ПриОткрытии + + + OnCreateAtServer + ПриСозданииНаСервере + + true + true + true + Vertical + true + true + true + true + true + + Объект + 1 + + DocumentObject.КоммунальныеПлатежи + + + true + + + true + + + Объект.RegisterRecords + +
true
+ true +
+ + ЗапускСРабСтола + + <key>ru</key> + <value>Запуск с раб стола</value> + + 2 + + Boolean + + + true + + + true + + + + + + + + true + +
diff --git a/Проект_деньги/src/Documents/КоммунальныеПлатежи/Forms/ФормаДокумента/Module.bsl b/Проект_деньги/src/Documents/КоммунальныеПлатежи/Forms/ФормаДокумента/Module.bsl new file mode 100644 index 0000000..6d89c51 --- /dev/null +++ b/Проект_деньги/src/Documents/КоммунальныеПлатежи/Forms/ФормаДокумента/Module.bsl @@ -0,0 +1,206 @@ + +&НаКлиенте +Процедура КомПлатежиНоменклатураПриИзменении(Элемент) + + Элемент = Элементы.КомПлатежи.ТекущиеДанные; + Номенклатура = Элемент.Номенклатура; + Элемент.ЕдиницаИзмерения = Общий_ПД_Сервер.ПолучитьЕдиницуИзмерения(Номенклатура); + Цена = Общий_ПД_Сервер.ПолучитьЦенуКоммУслуги(Объект.Дата, Номенклатура); + Если Цена = 0 Тогда + Режим = РежимДиалогаВопрос.ДаНет; + Ответ = Вопрос("Цена данной услуги не заполнена! + |Хотите заполнить для дальнейшего автоматического заполнения цены?", Режим, 0); + Если Ответ = КодВозвратаДиалога.Да Тогда + Дата = Дата(Год(Объект.Дата),Общий_ПД_Сервер.ВернутьЧислоМесяца(Объект.Месяц),1); + П = Новый Структура; + П.Вставить("Период", Дата); + П.Вставить("Номенклатура", Номенклатура); + ФормаЗаписи = ПолучитьФорму("РегистрСведений.ЦеныКоммунальныхПлатежей.Форма.ФормаЗаписи", П); + ФормаЗаписи.ОткрытьМодально(); + Элемент.Цена = Общий_ПД_Сервер.ПолучитьЦенуКоммУслуги(Объект.Дата, Номенклатура); + Иначе + Элемент.Цена = Цена; + КонецЕсли; + Иначе + Элемент.Цена = Цена; + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ЗаполнитьСумму() + + Объект.СуммаПлатежа = Общий_ПД_Сервер.РассчетСуммыТЧ(Объект.КомПлатежи); + +КонецПроцедуры // () + +&НаКлиенте +Процедура РассчитатьСумму() + + Элемент = Элементы.КомПлатежи.ТекущиеДанные; + Элемент.Сумма = Элемент.Количество * Элемент.Цена; + ЗаполнитьСумму(); + +КонецПроцедуры // РассчитатьСумму() + +&НаКлиенте +Процедура КомПлатежиКоличествоПриИзменении(Элемент) + + РассчитатьСумму(); + +КонецПроцедуры + +&НаКлиенте +Процедура КомПлатежиЦенаПриИзменении(Элемент) + + РассчитатьСумму(); + ЭлементТЧ = Элементы.КомПлатежи.ТекущиеДанные; + Дата = Дата(Год(Объект.Дата),Общий_ПД_Сервер.ВернутьЧислоМесяца(Объект.Месяц),1); + Если ЭлементТЧ.Цена <> Общий_ПД_Сервер.ПолучитьЦенуКоммУслуги(Дата, ЭлементТЧ.Номенклатура) Тогда + Режим = РежимДиалогаВопрос.ДаНет; + Ответ = Вопрос("Хотите записать изменение цены для позиции: """ + ЭлементТЧ.Номенклатура + """?", Режим, 0); + Если Ответ = КодВозвратаДиалога.Да Тогда + СоздатьНаборЗаписейЦены(Дата, ЭлементТЧ.Номенклатура, ЭлементТЧ.Цена); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +&НаСервереБезКонтекста +Процедура СоздатьНаборЗаписейЦены(Дата, Номенклатура, Цена) + + Запись = РегистрыСведений.ЦеныКоммунальныхПлатежей.СоздатьМенеджерЗаписи(); + Запись.Период = Дата; + Запись.Номенклатура = Номенклатура; + Запись.Цена = Цена; + Запись.Записать(); + +КонецПроцедуры // СоздатьНаборЗаписейЦены() + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + ВыводитьДиалоги = ОбщегоНазначенияКлиентСервер.ВыводитьДиалоги(); + + Если Объект.Ссылка.Пустая() Тогда + СписокЗначенийСчет = Общий_ПД_Сервер.ЗаполнитьСписокАктивныхСчетов(); + Если СписокЗначенийСчет[0].Значение = "Нет денег на счетах" Тогда + ПоказатьПредупреждение(,"Нет денег на счетах"); + Возврат; + КонецЕсли; + Если ВыводитьДиалоги И ЗапускСРабСтола Тогда + Оповещение = Новый ОписаниеОповещения("ПослеВыбораЭлементаСчет",ЭтотОбъект); + СписокЗначенийСчет.ПоказатьВыборЭлемента(Оповещение, "Выберите счет"); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПослеВыбораЭлементаСчет(ВыбранныйЭлемент, СписокПараметров) Экспорт + + СписокЗначенийМесяц = Новый СписокЗначений; + СписокЗначенийМесяц = ЗаполнитьСписокЗначенийМесяц(СписокЗначенийМесяц); + Оповещение = Новый ОписаниеОповещения("ПослеВыбораЭлементаМесяц",ЭтотОбъект); + Если ВыбранныйЭлемент = Неопределено Тогда + Предупреждение("Операция отменена!",1); + Закрыть(); + Возврат; + Иначе + ВыбранноеЗначение = ВыбранныйЭлемент.Значение; + Объект.Счет = ВыбранноеЗначение; + СписокЗначенийМесяц.ПоказатьВыборЭлемента(Оповещение, "Выберите месяц"); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПослеВыбораЭлементаМесяц(ВыбранныйЭлемент, СписокПараметров) Экспорт + + Если ВыбранныйЭлемент = Неопределено Тогда + Предупреждение("Операция отменена!",1); + Закрыть(); + Возврат; + Иначе + ВыбранноеЗначение = ВыбранныйЭлемент.Значение; + Объект.Месяц = ВыбранноеЗначение; + ЗаполнитьТЧКомПлатежи(); + КонецЕсли; + +КонецПроцедуры // () + +&НаКлиенте +Процедура ЗаполнитьТЧКомПлатежи() + + Номенклатура = ОткрытьФормуМодально("Справочник.Номенклатура.Форма.ФормаВыбора", Новый Структура("КомПлатежи", "Выберите коммунальную услугу!")); + Если ЗначениеЗаполнено(Номенклатура) Тогда + ТЧ = Объект.КомПлатежи.Добавить(); + ТЧ.Номенклатура = Номенклатура; + ТЧ.ЕдиницаИзмерения = Общий_ПД_Сервер.ПолучитьЕдиницуИзмерения(Номенклатура); + Цена = Общий_ПД_Сервер.ПолучитьЦенуКоммУслуги(Объект.Дата, Номенклатура); + ЦенаВведенная = Цена; + Количество = 1; + ВвелиКоличество = ВвестиЧисло(Количество, "Введите количество!", 15, 2); + Если НЕ ВвелиКоличество Тогда + Предупреждение("Операция отменена!", 1); + Закрыть(); + Возврат; + КонецЕсли; + ТЧ.Количество = Количество; + ТЧ.Сумма = ЦенаВведенная * Количество; + ВвелиЦену = ВвестиЧисло(ЦенаВведенная, "Введите цену!", 15, 2); + Если НЕ ВвелиЦену Тогда + Предупреждение("Операция отменена!", 1); + Закрыть(); + Возврат; + КонецЕсли; + Если ЦенаВведенная <> Цена Тогда + Дата = Дата(Год(Объект.Дата),Общий_ПД_Сервер.ВернутьЧислоМесяца(Объект.Месяц),1); + Общий_ПД_Сервер.ДобавитьЗаписьВРегистрЦенКомУслуг(Дата, Номенклатура, ЦенаВведенная); + ТЧ.Цена = Общий_ПД_Сервер.ПолучитьЦенуКоммУслуги(Объект.Дата, Номенклатура); + КонецЕсли; + ЗаполнитьСумму(); + Режим = РежимДиалогаВопрос.ДаНетОтмена; + Ответ = Вопрос("Хотите добавить ещё ком. услугу?", Режим); + Если Ответ = КодВозвратаДиалога.Да Тогда + ЗаполнитьТЧКомПлатежи(); + ИначеЕсли Ответ = КодВозвратаДиалога.Нет Тогда + Записать(Новый Структура("РежимЗаписи", РежимЗаписиДокумента.Проведение)); + Предупреждение("Выполнено!",1); + Закрыть(); + Иначе + Возврат; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры // ЗаполнитьТЧКомПлатежи() + + +&НаСервереБезКонтекста +Функция ЗаполнитьСписокЗначенийМесяц(СписокЗначений) + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | Месяцы.Ссылка КАК Ссылка + |ИЗ + | Перечисление.Месяцы КАК Месяцы + | + |УПОРЯДОЧИТЬ ПО + | Порядок"; + + РезультатЗапроса = Запрос.Выполнить(); + Выборка = РезультатЗапроса.Выбрать(); + Пока Выборка.Следующий() Цикл + СписокЗначений.Добавить(Выборка.Ссылка); + КонецЦикла; + Возврат СписокЗначений; + +КонецФункции // Заполнить() + + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + ЗапускСРабСтола = Параметры.Свойство("ЗапускСРабСтола"); +КонецПроцедуры + diff --git a/Проект_деньги/src/Documents/КоммунальныеПлатежи/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss b/Проект_деньги/src/Documents/КоммунальныеПлатежи/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss new file mode 100644 index 0000000..9b5b065 --- /dev/null +++ b/Проект_деньги/src/Documents/КоммунальныеПлатежи/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss @@ -0,0 +1,17 @@ + + + + Normal + dfcece9d-5077-440b-b6b3-45a5cb4538eb + + + Normal + 88619765-ccb3-46c6-ac52-38e9c992ebd4 + + + Normal + b75fecce-942b-4aed-abc9-e6a02e460fb3 + + Normal + 911b6018-f537-43e8-a417-da56b22f9aec + diff --git a/Проект_деньги/src/Documents/КоммунальныеПлатежи/Forms/ФормаСписка/Form.form b/Проект_деньги/src/Documents/КоммунальныеПлатежи/Forms/ФормаСписка/Form.form new file mode 100644 index 0000000..c101d5e --- /dev/null +++ b/Проект_деньги/src/Documents/КоммунальныеПлатежи/Forms/ФормаСписка/Form.form @@ -0,0 +1,382 @@ + + + + СписокКомпоновщикНастроекПользовательскиеНастройки + 1 + true + true + + true + + + <key>ru</key> + <value>Группа пользовательских настроек</value> + + false + + СписокКомпоновщикНастроекПользовательскиеНастройкиРасширеннаяПодсказка + 2 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + WeakSeparation + true + true + Auto + Auto + + + + Список + 3 + true + true + + true + + + Список + + true + None + + Дата + 16 + true + true + + true + + + Список.Date + + true + + ДатаРасширеннаяПодсказка + 18 + Label + true + true + + Left + + + + ДатаКонтекстноеМеню + 17 + true + + LabelField + Enter + true + Left + true + + true + true + + ru + ДФ=dd.MM.yyyy + + + + + Месяц + 19 + true + true + + true + + + Список.Месяц + + + МесяцРасширеннаяПодсказка + 21 + Label + true + true + + Left + + + + МесяцКонтекстноеМеню + 20 + true + + LabelField + Enter + true + Left + true + + true + true + + + + СуммаПлатежа + 22 + + <key>ru</key> + <value>Сумма</value> + + true + true + + true + + + Список.СуммаПлатежа + + + СуммаПлатежаРасширеннаяПодсказка + 24 + Label + true + true + + Left + + + + СуммаПлатежаКонтекстноеМеню + 23 + true + + LabelField + Enter + true + Left + true + + true + true + + + None + + СписокКоманднаяПанель + 5 + Left + + + СписокСтрокаПоиска + 7 + + СписокСтрокаПоискаРасширеннаяПодсказка + 9 + Label + true + true + + Left + + + + СписокСтрокаПоискаКонтекстноеМеню + 8 + true + + Список + + true + + + + СписокСостояниеПросмотра + 10 + + СписокСостояниеПросмотраРасширеннаяПодсказка + 12 + Label + true + true + + Left + + + + СписокСостояниеПросмотраКонтекстноеМеню + 11 + true + + ViewStatusAddition + Список + + true + + + + СписокУправлениеПоиском + 13 + + СписокУправлениеПоискомРасширеннаяПодсказка + 15 + Label + true + true + + Left + + + + СписокУправлениеПоискомКонтекстноеМеню + 14 + true + + SearchControlAddition + Список + + true + + + + СписокРасширеннаяПодсказка + 6 + Label + true + true + + Left + + + + СписокКонтекстноеМеню + 4 + true + + true + true + true + true + true + MultiRow +
true
+ 1 + 1 + AutoUse + AutoUse + true + true + true + Auto + Auto + ExpandTopLevel + true + true + true + AsFileRef + + Список.DefaultPicture + + + 60 + + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + true + true + СписокКомпоновщикНастроекПользовательскиеНастройки + +
+ + ФормаКоманднаяПанель + -1 + + ФормаВывестиОтчет + 25 + true + true + + true + + + ФормаВывестиОтчетРасширеннаяПодсказка + 26 + Label + true + true + + Left + + + Form.Command.ВывестиОтчет + Auto + true + true + UserCmds + Auto + + Left + true + + true + true + true + Vertical + true + true + true + true + true + + Список + 1 + + DynamicList + + + true + + + true + +
true
+ + Document.КоммунальныеПлатежи + true + true + true + true + +
+ + ВывестиОтчет + + <key>ru</key> + <value>Вывести отчет</value> + + 1 + + ru + Вывести отчет + + + true + + + + ВывестиОтчет + + + Auto + + + + + + +
diff --git a/Проект_деньги/src/Documents/КоммунальныеПлатежи/Forms/ФормаСписка/Module.bsl b/Проект_деньги/src/Documents/КоммунальныеПлатежи/Forms/ФормаСписка/Module.bsl new file mode 100644 index 0000000..c8f7b52 --- /dev/null +++ b/Проект_деньги/src/Documents/КоммунальныеПлатежи/Forms/ФормаСписка/Module.bsl @@ -0,0 +1,9 @@ + +&НаКлиенте +Процедура ВывестиОтчет(Команда) + + ПараметрыОтчета = Новый Структура; + ПараметрыОтчета.Вставить("ИмяМакета", "ОтчетПоРасходам"); + ОткрытьФорму("ОбщаяФорма.ФормаОтчета", ПараметрыОтчета,, ); + +КонецПроцедуры diff --git a/Проект_деньги/src/Documents/КоммунальныеПлатежи/ObjectModule.bsl b/Проект_деньги/src/Documents/КоммунальныеПлатежи/ObjectModule.bsl new file mode 100644 index 0000000..bded32f --- /dev/null +++ b/Проект_деньги/src/Documents/КоммунальныеПлатежи/ObjectModule.bsl @@ -0,0 +1,64 @@ +#Область ОбработчикиСобытий + +Процедура ОбработкаПроведения(Отказ, Режим) + //{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ + // Данный фрагмент построен конструктором. + // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!! + + // регистр ДенежныеСредства Расход + Движения.ДенежныеСредства.Записывать = Истина; + Для Каждого ТекСтрокаКомПлатежи Из КомПлатежи Цикл + Движение = Движения.ДенежныеСредства.Добавить(); + Движение.ВидДвижения = ВидДвиженияНакопления.Расход; + Движение.Пользователь = ОбщегоНазначенияКлиентСервер.ПолучитьПользователя(); + Движение.Период = Дата; + Движение.Счет = Счет; + Движение.Сумма = ТекСтрокаКомПлатежи.Сумма; + КонецЦикла; + + // регистр Расходы + Движения.Расходы.Записывать = Истина; + Для Каждого ТекСтрокаКомПлатежи Из КомПлатежи Цикл + Движение = Движения.Расходы.Добавить(); + Движение.Период = Дата; + Движение.Пользователь = ОбщегоНазначенияКлиентСервер.ПолучитьПользователя(); + Движение.Номенклатура = ТекСтрокаКомПлатежи.Номенклатура; + Движение.Количество = ТекСтрокаКомПлатежи.Количество; + Движение.Сумма = ТекСтрокаКомПлатежи.Сумма; + КонецЦикла; + + //}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ +КонецПроцедуры + +Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения) + + Если ОбменДанными.Загрузка = Истина Тогда + Возврат; + КонецЕсли; + Ответственный = ОбщегоНазначенияКлиентСервер.ПолучитьПользователя(); + +КонецПроцедуры + +Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка) + //{{__КОНСТРУКТОР_ВВОД_НА_ОСНОВАНИИ + // Данный фрагмент построен конструктором. + // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!! + Если ТипЗнч(ДанныеЗаполнения) = Тип("ДокументСсылка.Желания") Тогда + // Заполнение шапки + Для Каждого ТекСтрокаТЧ Из ДанныеЗаполнения.ТЧ Цикл + НоваяСтрока = КомПлатежи.Добавить(); + НоваяСтрока.ЕдиницаИзмерения = ТекСтрокаТЧ.ЕдиницаИзмерения; + НоваяСтрока.Количество = ТекСтрокаТЧ.Количество; + НоваяСтрока.Номенклатура = ТекСтрокаТЧ.Номенклатура; + КонецЦикла; + КонецЕсли; + //}}__КОНСТРУКТОР_ВВОД_НА_ОСНОВАНИИ +КонецПроцедуры + +Процедура ПриУстановкеНовогоНомера(СтандартнаяОбработка, Префикс) + + Префикс = Обмен.ПолучитьПрефиксНомера(); + +КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/Проект_деньги/src/Documents/КоммунальныеПлатежи/КоммунальныеПлатежи.mdo b/Проект_деньги/src/Documents/КоммунальныеПлатежи/КоммунальныеПлатежи.mdo new file mode 100644 index 0000000..3e5e391 --- /dev/null +++ b/Проект_деньги/src/Documents/КоммунальныеПлатежи/КоммунальныеПлатежи.mdo @@ -0,0 +1,224 @@ + + + + + + + + + + КоммунальныеПлатежи + + ru + Коммунальные платежи + + true + Document.КоммунальныеПлатежи.StandardAttribute.Number + DontUse + Use + Managed + Use + String + 9 + Variable + true + true + Document.КоммунальныеПлатежи.Form.ФормаДокумента + Document.КоммунальныеПлатежи.Form.ФормаСписка + AccumulationRegister.ДенежныеСредства + AccumulationRegister.Расходы + true + true + + Месяц + + ru + Месяц + + + EnumRef.Месяцы + + + ru + ДФ=MM; ДЛФ=DD + + + ru + ДФ=MM; ДЛФ=DD + + + + ShowError + + Use + Use + + + Счет + + ru + Счет + + + CatalogRef.Счета + + + + ShowError + + Use + Use + + + СуммаПлатежа + + ru + Сумма платежа + + + Number + + 15 + 2 + + + + + + Use + Use + + + Ответственный + + ru + Ответственный + + + CatalogRef.Пользователи + + + + + Use + Use + + + ФормаДокумента + + ru + Форма документа + + PersonalComputer + MobileDevice + + + ФормаСписка + + ru + Форма списка + + PersonalComputer + MobileDevice + + + + + + + КомПлатежи + + ru + Ком платежи + + + Номенклатура + + ru + Номенклатура + + + CatalogRef.Номенклатура + + + + ShowError + + Отбор.ВидНоменклатуры + + Enum.ВидыНоменклатуры.EnumValue.КУ + + + Use + Use + + + ЕдиницаИзмерения + + ru + Ед.измер. + + + CatalogRef.ЕдиницыИзмерений + + + + Use + Use + + + Количество + + ru + Количество + + + Number + + 12 + 3 + + + + + Use + Use + + + Цена + + ru + Цена + + + Number + + 15 + 2 + + + + + Use + Use + + + Сумма + + ru + Сумма + + + Number + + 15 + 2 + + + + + Use + Use + + + diff --git a/Проект_деньги/src/Documents/ПеремещениеСнятиеДенежныхСредств/Forms/ФормаДокумента/Form.form b/Проект_деньги/src/Documents/ПеремещениеСнятиеДенежныхСредств/Forms/ФормаДокумента/Form.form new file mode 100644 index 0000000..92b9363 --- /dev/null +++ b/Проект_деньги/src/Documents/ПеремещениеСнятиеДенежныхСредств/Forms/ФормаДокумента/Form.form @@ -0,0 +1,228 @@ + + + + Дата + 4 + true + true + + true + + + Объект.Date + + + ДатаРасширеннаяПодсказка + 6 + Label + true + true + + Left + + + + ДатаКонтекстноеМеню + 5 + true + + InputField + EnterOnInput + true + Left + true + + true + true + true + true + true + true + + + + СчетС + 7 + true + true + + true + + + Объект.СчетС + + + СчетСРасширеннаяПодсказка + 9 + Label + true + true + + Left + + + + СчетСКонтекстноеМеню + 8 + true + + InputField + EnterOnInput + true + Left + true + + true + true + true + true + true + true + + + + СчетНа + 10 + true + true + + true + + + Объект.СчетНа + + + СчетНаРасширеннаяПодсказка + 12 + Label + true + true + + Left + + + + СчетНаКонтекстноеМеню + 11 + true + + InputField + EnterOnInput + true + Left + true + + true + true + true + true + true + true + + + + Сумма + 13 + true + true + + true + + + Объект.Сумма + + + СуммаРасширеннаяПодсказка + 15 + Label + true + true + + Left + + + + СуммаКонтекстноеМеню + 14 + true + + InputField + EnterOnInput + true + Left + true + + true + true + true + true + true + true + + + + ФормаКоманднаяПанель + -1 + Left + true + + + OnOpen + ПриОткрытии + + + OnCreateAtServer + ПриСозданииНаСервере + + true + true + true + Vertical + true + true + true + true + true + + Объект + 1 + + DocumentObject.ПеремещениеСнятиеДенежныхСредств + + + true + + + true + + + Объект.RegisterRecords + +
true
+ true +
+ + ЗапускСРабСтола + + <key>ru</key> + <value>Запуск с раб стола</value> + + 2 + + Boolean + + + true + + + true + + + + + + + + true + +
diff --git a/Проект_деньги/src/Documents/ПеремещениеСнятиеДенежныхСредств/Forms/ФормаДокумента/Module.bsl b/Проект_деньги/src/Documents/ПеремещениеСнятиеДенежныхСредств/Forms/ФормаДокумента/Module.bsl new file mode 100644 index 0000000..974c799 --- /dev/null +++ b/Проект_деньги/src/Documents/ПеремещениеСнятиеДенежныхСредств/Forms/ФормаДокумента/Module.bsl @@ -0,0 +1,69 @@ + +&НаКлиенте +Процедура ПриОткрытии() + + ВыводитьДиалоги = ОбщегоНазначенияКлиентСервер.ВыводитьДиалоги(); + + Если Объект.Ссылка.Пустая() Тогда + СписокЗначений = Общий_ПД_Сервер.ЗаполнитьСписокАктивныхСчетов(); + Если СписокЗначений[0].Значение = "Нет денег на счетах" Тогда + ПоказатьПредупреждение(,"Нет денег на счетах"); + Возврат; + КонецЕсли; + Если ВыводитьДиалоги И ЗапускСРабСтола Тогда + Оповещение = Новый ОписаниеОповещения("ПослеВыбораЭлемента",ЭтотОбъект); + СписокЗначений.ПоказатьВыборЭлемента(Оповещение, "Выберите счет с которого переводите!"); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПослеВыбораЭлемента(ВыбранныйЭлемент, СписокПараметров) Экспорт + + Если ВыбранныйЭлемент = Неопределено Тогда + Предупреждение("Операция отменена!",1); + Закрыть(); + Возврат; + Иначе + ВыбранноеЗначение = ВыбранныйЭлемент.Значение; + Объект.СчетС = ВыбранноеЗначение; + ПеревестиНаСчет(); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПеревестиНаСчет() + + Отбор = Новый Структура; + Отбор.Вставить("Заголовок", "Выберите счет на который переводите!"); + Отбор.Вставить("СчетС", Объект.СчетС); + Отбор.Вставить("ПометкаУдаления", Ложь); + Счет = ОткрытьФормуМодально("Справочник.Счета.Форма.ФормаВыбора", Отбор); + Объект.СчетНа = Счет; + Если НЕ ЗначениеЗаполнено(Объект.СчетНа) Тогда + Предупреждение("Операция отменена!",1); + Закрыть(); + Возврат; + КонецЕсли; + Сумма = 0; + ВвестиЧисло(Сумма, "Введите сумму!", 15, 2); + Объект.Сумма = Сумма; + Если НЕ ЗначениеЗаполнено(Объект.Сумма) Тогда + Предупреждение("Операция отменена!",1); + Закрыть(); + Возврат; + КонецЕсли; + + Записать(Новый Структура("РежимЗаписи", РежимЗаписиДокумента.Проведение)); + Предупреждение("Выполнено!",1); + Закрыть(); + +КонецПроцедуры // () + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + ЗапускСРабСтола = Параметры.Свойство("ЗапускСРабСтола"); +КонецПроцедуры + diff --git a/Проект_деньги/src/Documents/ПеремещениеСнятиеДенежныхСредств/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss b/Проект_деньги/src/Documents/ПеремещениеСнятиеДенежныхСредств/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss new file mode 100644 index 0000000..9b5b065 --- /dev/null +++ b/Проект_деньги/src/Documents/ПеремещениеСнятиеДенежныхСредств/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss @@ -0,0 +1,17 @@ + + + + Normal + dfcece9d-5077-440b-b6b3-45a5cb4538eb + + + Normal + 88619765-ccb3-46c6-ac52-38e9c992ebd4 + + + Normal + b75fecce-942b-4aed-abc9-e6a02e460fb3 + + Normal + 911b6018-f537-43e8-a417-da56b22f9aec + diff --git a/Проект_деньги/src/Documents/ПеремещениеСнятиеДенежныхСредств/Forms/ФормаСписка/Form.form b/Проект_деньги/src/Documents/ПеремещениеСнятиеДенежныхСредств/Forms/ФормаСписка/Form.form new file mode 100644 index 0000000..a2cad0a --- /dev/null +++ b/Проект_деньги/src/Documents/ПеремещениеСнятиеДенежныхСредств/Forms/ФормаСписка/Form.form @@ -0,0 +1,368 @@ + + + + СписокКомпоновщикНастроекПользовательскиеНастройки + 1 + true + true + + true + + + <key>ru</key> + <value>Группа пользовательских настроек</value> + + false + + СписокКомпоновщикНастроекПользовательскиеНастройкиРасширеннаяПодсказка + 2 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + WeakSeparation + true + true + Auto + Auto + + + + Список + 3 + true + true + + true + + + Список + + true + None + + Дата + 16 + true + true + + true + + + Список.Date + + true + + ДатаРасширеннаяПодсказка + 18 + Label + true + true + + Left + + + + ДатаКонтекстноеМеню + 17 + true + + LabelField + Enter + true + Left + true + + true + true + + ru + ДФ=dd.MM.yyyy + + + + + СчетС + 19 + true + true + + true + + + Список.СчетС + + + СчетСРасширеннаяПодсказка + 21 + Label + true + true + + Left + + + + СчетСКонтекстноеМеню + 20 + true + + LabelField + Enter + true + Left + true + + true + true + + + + СчетНа + 22 + true + true + + true + + + Список.СчетНа + + + СчетНаРасширеннаяПодсказка + 24 + Label + true + true + + Left + + + + СчетНаКонтекстноеМеню + 23 + true + + LabelField + Enter + true + Left + true + + true + true + + + + Сумма + 25 + true + true + + true + + + Список.Сумма + + + СуммаРасширеннаяПодсказка + 27 + Label + true + true + + Left + + + + СуммаКонтекстноеМеню + 26 + true + + LabelField + Enter + true + Left + true + + true + true + + + None + + СписокКоманднаяПанель + 5 + Left + + + СписокСтрокаПоиска + 7 + + СписокСтрокаПоискаРасширеннаяПодсказка + 9 + Label + true + true + + Left + + + + СписокСтрокаПоискаКонтекстноеМеню + 8 + true + + Список + + true + + + + СписокСостояниеПросмотра + 10 + + СписокСостояниеПросмотраРасширеннаяПодсказка + 12 + Label + true + true + + Left + + + + СписокСостояниеПросмотраКонтекстноеМеню + 11 + true + + ViewStatusAddition + Список + + true + + + + СписокУправлениеПоиском + 13 + + СписокУправлениеПоискомРасширеннаяПодсказка + 15 + Label + true + true + + Left + + + + СписокУправлениеПоискомКонтекстноеМеню + 14 + true + + SearchControlAddition + Список + + true + + + + СписокРасширеннаяПодсказка + 6 + Label + true + true + + Left + + + + СписокКонтекстноеМеню + 4 + true + + true + true + true + true + true + MultiRow +
true
+ 1 + 1 + AutoUse + AutoUse + true + true + true + Auto + Auto + ExpandTopLevel + true + true + true + AsFileRef + + Список.DefaultPicture + + + 60 + + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + true + true + СписокКомпоновщикНастроекПользовательскиеНастройки + +
+ + ФормаКоманднаяПанель + -1 + Left + true + + true + true + true + Vertical + true + true + true + true + true + + Список + 1 + + DynamicList + + + true + + + true + +
true
+ + Document.ПеремещениеСнятиеДенежныхСредств + true + true + true + true + +
+ + + + + +
diff --git a/Проект_деньги/src/Documents/ПеремещениеСнятиеДенежныхСредств/ObjectModule.bsl b/Проект_деньги/src/Documents/ПеремещениеСнятиеДенежныхСредств/ObjectModule.bsl new file mode 100644 index 0000000..a9d15e6 --- /dev/null +++ b/Проект_деньги/src/Documents/ПеремещениеСнятиеДенежныхСредств/ObjectModule.bsl @@ -0,0 +1,44 @@ +#Область ОбработчикиСобытий + +Процедура ОбработкаПроведения(Отказ, Режим) + //{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ + // Данный фрагмент построен конструктором. + // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!! + + // регистр ДенежныеСредства Приход + Движения.ДенежныеСредства.Записывать = Истина; + Движение = Движения.ДенежныеСредства.Добавить(); + Движение.ВидДвижения = ВидДвиженияНакопления.Приход; + Движение.Период = Дата; + Движение.Пользователь = ОбщегоНазначенияКлиентСервер.ПолучитьПользователя(); + Движение.Счет = СчетНа; + Движение.Сумма = Сумма; + + // регистр ДенежныеСредства Расход + Движения.ДенежныеСредства.Записывать = Истина; + Движение = Движения.ДенежныеСредства.Добавить(); + Движение.ВидДвижения = ВидДвиженияНакопления.Расход; + Движение.Период = Дата; + Движение.Пользователь = ОбщегоНазначенияКлиентСервер.ПолучитьПользователя(); + Движение.Счет = СчетС; + Движение.Сумма = Сумма; + + //}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ +КонецПроцедуры + +Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения) + + Если ОбменДанными.Загрузка = Истина Тогда + Возврат; + КонецЕсли; + Ответственный = ОбщегоНазначенияКлиентСервер.ПолучитьПользователя(); + +КонецПроцедуры + +Процедура ПриУстановкеНовогоНомера(СтандартнаяОбработка, Префикс) + + Префикс = Обмен.ПолучитьПрефиксНомера(); + +КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/Проект_деньги/src/Documents/ПеремещениеСнятиеДенежныхСредств/ПеремещениеСнятиеДенежныхСредств.mdo b/Проект_деньги/src/Documents/ПеремещениеСнятиеДенежныхСредств/ПеремещениеСнятиеДенежныхСредств.mdo new file mode 100644 index 0000000..1ec7861 --- /dev/null +++ b/Проект_деньги/src/Documents/ПеремещениеСнятиеДенежныхСредств/ПеремещениеСнятиеДенежныхСредств.mdo @@ -0,0 +1,115 @@ + + + + + + + + + + ПеремещениеСнятиеДенежныхСредств + + ru + Перемещение/снятие денежных средств + + true + Document.ПеремещениеСнятиеДенежныхСредств.StandardAttribute.Number + DontUse + Use + Managed + Use + String + 9 + Variable + true + true + Document.ПеремещениеСнятиеДенежныхСредств.Form.ФормаДокумента + Document.ПеремещениеСнятиеДенежныхСредств.Form.ФормаСписка + AccumulationRegister.ДенежныеСредства + true + true + + СчетС + + ru + Счет с которого снимаем + + + CatalogRef.Счета + + + + ShowError + + Use + Use + + + СчетНа + + ru + Счет который пополняем + + + CatalogRef.Счета + + + + ShowError + + Use + Use + + + Сумма + + ru + Сумма + + + Number + + 15 + 2 + + + + + + Use + Use + + + Ответственный + + ru + Ответственный + + + CatalogRef.Пользователи + + + + + Use + Use + + + ФормаДокумента + + ru + Форма документа + + PersonalComputer + MobileDevice + + + ФормаСписка + + ru + Форма списка + + PersonalComputer + MobileDevice + + diff --git a/Проект_деньги/src/Documents/ПланированиеБюджета/Forms/ФормаДокумента/Form.form b/Проект_деньги/src/Documents/ПланированиеБюджета/Forms/ФормаДокумента/Form.form new file mode 100644 index 0000000..0a64c42 --- /dev/null +++ b/Проект_деньги/src/Documents/ПланированиеБюджета/Forms/ФормаДокумента/Form.form @@ -0,0 +1,446 @@ + + + + Номер + 1 + true + true + + true + + + Объект.Number + + + НомерРасширеннаяПодсказка + 3 + Label + true + true + + Left + + + + НомерКонтекстноеМеню + 2 + true + + InputField + EnterOnInput + true + Left + true + + true + true + true + true + true + true + + + + Дата + 4 + true + true + + true + + + Объект.Date + + + ДатаРасширеннаяПодсказка + 6 + Label + true + true + + Left + + + + ДатаКонтекстноеМеню + 5 + true + + InputField + EnterOnInput + true + Left + true + + true + true + true + true + true + true + + + + ПериодПланирования + 7 + true + true + + true + + + Объект.ПериодПланирования + + + ПериодПланированияРасширеннаяПодсказка + 9 + Label + true + true + + Left + + + + ПериодПланированияКонтекстноеМеню + 8 + true + + InputField + EnterOnInput + true + Left + true + + true + true + true + true + true + true + + + + СуммаДокумента + 10 + true + true + + true + + + Объект.СуммаДокумента + + + СуммаДокументаРасширеннаяПодсказка + 12 + Label + true + true + + Left + + + + СуммаДокументаКонтекстноеМеню + 11 + true + + InputField + EnterOnInput + true + Left + true + + true + true + true + true + true + true + + + + СтатьиРасходов + 13 + true + true + + true + + + Объект.СтатьиРасходов + + None + + СтатьиРасходовНомерСтроки + 26 + true + true + + true + + + Объект.СтатьиРасходов.LineNumber + + + СтатьиРасходовНомерСтрокиРасширеннаяПодсказка + 28 + Label + true + true + + Left + + + + СтатьиРасходовНомерСтрокиКонтекстноеМеню + 27 + true + + LabelField + EnterOnInput + true + Left + true + + true + true + + + + СтатьиРасходовСтатья + 29 + true + true + + true + + + Объект.СтатьиРасходов.Статья + + + СтатьиРасходовСтатьяРасширеннаяПодсказка + 31 + Label + true + true + + Left + + + + СтатьиРасходовСтатьяКонтекстноеМеню + 30 + true + + InputField + EnterOnInput + true + Left + true + + true + true + true + true + true + true + + + + СтатьиРасходовСумма + 32 + true + true + + true + + + Объект.СтатьиРасходов.Сумма + + + СтатьиРасходовСуммаРасширеннаяПодсказка + 34 + Label + true + true + + Left + + + + СтатьиРасходовСуммаКонтекстноеМеню + 33 + true + + InputField + EnterOnInput + true + Left + true + + true + true + true + true + true + true + + + + СтатьиРасходовКоманднаяПанель + 15 + Left + true + + + СтатьиРасходовСтрокаПоиска + 17 + + СтатьиРасходовСтрокаПоискаРасширеннаяПодсказка + 19 + Label + true + true + + Left + + + + СтатьиРасходовСтрокаПоискаКонтекстноеМеню + 18 + true + + СтатьиРасходов + + true + + + + СтатьиРасходовСостояниеПросмотра + 20 + + СтатьиРасходовСостояниеПросмотраРасширеннаяПодсказка + 22 + Label + true + true + + Left + + + + СтатьиРасходовСостояниеПросмотраКонтекстноеМеню + 21 + true + + ViewStatusAddition + СтатьиРасходов + + true + + + + СтатьиРасходовУправлениеПоиском + 23 + + СтатьиРасходовУправлениеПоискомРасширеннаяПодсказка + 25 + Label + true + true + + Left + + + + СтатьиРасходовУправлениеПоискомКонтекстноеМеню + 24 + true + + SearchControlAddition + СтатьиРасходов + + true + + + + СтатьиРасходовРасширеннаяПодсказка + 16 + Label + true + true + + Left + + + + СтатьиРасходовКонтекстноеМеню + 14 + true + + true + true + true + true + true + MultiRow +
true
+ 1 + 1 + AutoUse + AutoUse + true + true + true + Auto + Auto + true + true + true + true + AsFileRef + +
+ + FormCommandBar + -1 + Left + true + + true + true + true + Vertical + true + true + true + true + true + + Объект + 1 + + DocumentObject.ПланированиеБюджета + + + true + + + true + + + Объект.RegisterRecords + +
true
+ true +
+ + + + + + true + +
diff --git a/Проект_деньги/src/Documents/ПланированиеБюджета/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss b/Проект_деньги/src/Documents/ПланированиеБюджета/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss new file mode 100644 index 0000000..9b5b065 --- /dev/null +++ b/Проект_деньги/src/Documents/ПланированиеБюджета/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss @@ -0,0 +1,17 @@ + + + + Normal + dfcece9d-5077-440b-b6b3-45a5cb4538eb + + + Normal + 88619765-ccb3-46c6-ac52-38e9c992ebd4 + + + Normal + b75fecce-942b-4aed-abc9-e6a02e460fb3 + + Normal + 911b6018-f537-43e8-a417-da56b22f9aec + diff --git a/Проект_деньги/src/Documents/ПланированиеБюджета/Forms/ФормаСписка/Form.form b/Проект_деньги/src/Documents/ПланированиеБюджета/Forms/ФормаСписка/Form.form new file mode 100644 index 0000000..4374e62 --- /dev/null +++ b/Проект_деньги/src/Documents/ПланированиеБюджета/Forms/ФормаСписка/Form.form @@ -0,0 +1,340 @@ + + + + СписокКомпоновщикНастроекПользовательскиеНастройки + 1 + true + true + + true + + + <key>ru</key> + <value>Группа пользовательских настроек</value> + + false + + СписокКомпоновщикНастроекПользовательскиеНастройкиРасширеннаяПодсказка + 2 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + WeakSeparation + true + true + Auto + Auto + + + + Список + 3 + true + true + + true + + + Список + + true + None + + Дата + 16 + true + true + + true + + + Список.Date + + true + + ДатаРасширеннаяПодсказка + 18 + Label + true + true + + Left + + + + ДатаКонтекстноеМеню + 17 + true + + LabelField + Enter + true + Left + true + + true + true + + ru + ДФ=dd.MM.yyyy + + + + + ПериодПланирования + 19 + + <key>ru</key> + <value>Период</value> + + true + true + + true + + + Список.ПериодПланирования + + + ПериодПланированияРасширеннаяПодсказка + 21 + Label + true + true + + Left + + + + ПериодПланированияКонтекстноеМеню + 20 + true + + LabelField + Enter + true + Left + true + + true + true + + + + СуммаДокумента + 22 + + <key>ru</key> + <value>Сумма</value> + + true + true + + true + + + Список.СуммаДокумента + + + СуммаДокументаРасширеннаяПодсказка + 24 + Label + true + true + + Left + + + + СуммаДокументаКонтекстноеМеню + 23 + true + + LabelField + Enter + true + Left + true + + true + true + + + None + + СписокКоманднаяПанель + 5 + Left + + + СписокСтрокаПоиска + 7 + + СписокСтрокаПоискаРасширеннаяПодсказка + 9 + Label + true + true + + Left + + + + СписокСтрокаПоискаКонтекстноеМеню + 8 + true + + Список + + true + + + + СписокСостояниеПросмотра + 10 + + СписокСостояниеПросмотраРасширеннаяПодсказка + 12 + Label + true + true + + Left + + + + СписокСостояниеПросмотраКонтекстноеМеню + 11 + true + + ViewStatusAddition + Список + + true + + + + СписокУправлениеПоиском + 13 + + СписокУправлениеПоискомРасширеннаяПодсказка + 15 + Label + true + true + + Left + + + + СписокУправлениеПоискомКонтекстноеМеню + 14 + true + + SearchControlAddition + Список + + true + + + + СписокРасширеннаяПодсказка + 6 + Label + true + true + + Left + + + + СписокКонтекстноеМеню + 4 + true + + true + true + true + true + true + MultiRow +
true
+ 1 + 1 + AutoUse + AutoUse + true + true + true + Auto + Auto + ExpandTopLevel + true + true + true + AsFileRef + + Список.DefaultPicture + + + 60 + + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + true + true + СписокКомпоновщикНастроекПользовательскиеНастройки + +
+ + ФормаКоманднаяПанель + -1 + Left + true + + true + true + true + Vertical + true + true + true + true + true + + Список + 1 + + DynamicList + + + true + + + true + +
true
+ + Document.ПланированиеБюджета + true + true + true + true + +
+ + + + + +
diff --git a/Проект_деньги/src/Documents/ПланированиеБюджета/ObjectModule.bsl b/Проект_деньги/src/Documents/ПланированиеБюджета/ObjectModule.bsl new file mode 100644 index 0000000..db73784 --- /dev/null +++ b/Проект_деньги/src/Documents/ПланированиеБюджета/ObjectModule.bsl @@ -0,0 +1,42 @@ +#Область ОбработчикиСобытий + +Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения) + + Если ОбменДанными.Загрузка = Истина Тогда + Возврат; + КонецЕсли; + СуммаДокумента = СтатьиРасходов.Итог("Сумма"); + +КонецПроцедуры + +Процедура ОбработкаПроведения(Отказ, Режим) + + Если ПериодПланирования = Перечисления.ПериодыПланирования.НаМесяц Тогда + // регистр ПланированиеБюджетаНаМесяц + Движения.ПланированиеБюджетаНаМесяц.Записывать = Истина; + Для Каждого ТекСтрокаСтатьиРасходов Из СтатьиРасходов Цикл + Движение = Движения.ПланированиеБюджетаНаМесяц.Добавить(); + Движение.Период = Дата; + Движение.СтатьиРасходов = ТекСтрокаСтатьиРасходов.Статья; + Движение.Сумма = ТекСтрокаСтатьиРасходов.Сумма; + КонецЦикла; + Иначе + // регистр ПланированиеБюджетаНаГод + Движения.ПланированиеБюджетаНаГод.Записывать = Истина; + Для Каждого ТекСтрокаСтатьиРасходов Из СтатьиРасходов Цикл + Движение = Движения.ПланированиеБюджетаНаГод.Добавить(); + Движение.Период = Дата; + Движение.СтатьиРасходов = ТекСтрокаСтатьиРасходов.Статья; + Движение.Сумма = ТекСтрокаСтатьиРасходов.Сумма; + КонецЦикла; + КонецЕсли; + +КонецПроцедуры + +Процедура ПриУстановкеНовогоНомера(СтандартнаяОбработка, Префикс) + + Префикс = Обмен.ПолучитьПрефиксНомера(); + +КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/Проект_деньги/src/Documents/ПланированиеБюджета/ПланированиеБюджета.mdo b/Проект_деньги/src/Documents/ПланированиеБюджета/ПланированиеБюджета.mdo new file mode 100644 index 0000000..dfe92ca --- /dev/null +++ b/Проект_деньги/src/Documents/ПланированиеБюджета/ПланированиеБюджета.mdo @@ -0,0 +1,130 @@ + + + + + + + + + + ПланированиеБюджета + + ru + Планирование бюджета + + true + Document.ПланированиеБюджета.StandardAttribute.Number + DontUse + Use + Managed + Use + String + 9 + Variable + true + true + Document.ПланированиеБюджета.Form.ФормаДокумента + Document.ПланированиеБюджета.Form.ФормаСписка + Deny + InformationRegister.ПланированиеБюджетаНаМесяц + InformationRegister.ПланированиеБюджетаНаГод + true + true + + ПериодПланирования + + ru + Период планирования + + + EnumRef.ПериодыПланирования + + + + ShowError + + Use + Use + + + СуммаДокумента + + ru + Сумма документа + + + Number + + 15 + 2 + + + + + + Use + Use + + + ФормаДокумента + + ru + Форма документа + + PersonalComputer + MobileDevice + + + ФормаСписка + + ru + Форма списка + + PersonalComputer + MobileDevice + + + + + + + СтатьиРасходов + + ru + Статьи расходов + + + Статья + + ru + Статья + + + CatalogRef.Номенклатура + + + + Folders + Use + Use + + + Сумма + + ru + Сумма + + + Number + + 15 + 2 + + + + + Use + Use + + + diff --git a/Проект_деньги/src/Documents/Покупки/Forms/ФормаДокумента/Form.form b/Проект_деньги/src/Documents/Покупки/Forms/ФормаДокумента/Form.form new file mode 100644 index 0000000..c526369 --- /dev/null +++ b/Проект_деньги/src/Documents/Покупки/Forms/ФормаДокумента/Form.form @@ -0,0 +1,1208 @@ + + + + Группа1 + 81 + + Дата + 4 + true + true + + true + + + Объект.Date + + + ДатаРасширеннаяПодсказка + 6 + Label + true + true + + Left + + + + ДатаКонтекстноеМеню + 5 + true + + InputField + EnterOnInput + true + Left + true + + true + true + true + true + true + true + + + + СуммаПокупок + 10 + true + true + + true + + + Объект.СуммаПокупок + + + СуммаПокупокРасширеннаяПодсказка + 12 + Label + true + true + + Left + + + + СуммаПокупокКонтекстноеМеню + 11 + true + + LabelField + EnterOnInput + true + Left + true + + true + true + + + true + true + + true + + + Группа1РасширеннаяПодсказка + 82 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + Счет + 7 + true + true + + true + + + Объект.Счет + + + СчетРасширеннаяПодсказка + 9 + Label + true + true + + Left + + + + СчетКонтекстноеМеню + 8 + true + + InputField + EnterOnInput + true + Left + true + + true + true + true + true + true + true + + + + Страницы + 13 + + ГруппаТовары + 15 + + Товары + 17 + true + true + + true + + + Объект.Товары + + None + + ТоварыНомерСтроки + 30 + true + true + + true + + + Объект.Товары.LineNumber + + + ТоварыНомерСтрокиРасширеннаяПодсказка + 32 + Label + true + true + + Left + + + + ТоварыНомерСтрокиКонтекстноеМеню + 31 + true + + LabelField + EnterOnInput + true + Left + true + + true + true + + + + ТоварыНазначение + 33 + true + true + + true + + + ТоварыНазначениеРасширеннаяПодсказка + 35 + Label + true + true + + Left + + + + ТоварыНазначениеКонтекстноеМеню + 34 + true + + InputField + EnterOnInput + true + Left + true + + true + true + true + true + true + true + + + + ТоварыНоменклатура + 36 + true + true + + true + + + Объект.Товары.Номенклатура + + + OnChange + ТоварыНоменклатураПриИзменении + + + ТоварыНоменклатураРасширеннаяПодсказка + 38 + Label + true + true + + Left + + + + ТоварыНоменклатураКонтекстноеМеню + 37 + true + + InputField + EnterOnInput + true + Left + true + + true + true + true + true + true + true + + Отбор.Услуга + + + + + + + + ТоварыЕдиницаИзмерения + 39 + true + true + + true + + + Объект.Товары.ЕдиницаИзмерения + + + ТоварыЕдиницаИзмеренияРасширеннаяПодсказка + 41 + Label + true + true + + Left + + + + ТоварыЕдиницаИзмеренияКонтекстноеМеню + 40 + true + + LabelField + EnterOnInput + true + Left + true + + true + true + + + + ТоварыКоличество + 42 + true + true + + true + + + Объект.Товары.Количество + + + OnChange + ТоварыКоличествоПриИзменении + + + ТоварыКоличествоРасширеннаяПодсказка + 44 + Label + true + true + + Left + + + + ТоварыКоличествоКонтекстноеМеню + 43 + true + + InputField + EnterOnInput + true + Left + true + + true + true + true + true + true + true + + + + ТоварыЦена + 45 + true + true + + true + + + Объект.Товары.Цена + + + OnChange + ТоварыЦенаПриИзменении + + + ТоварыЦенаРасширеннаяПодсказка + 47 + Label + true + true + + Left + + + + ТоварыЦенаКонтекстноеМеню + 46 + true + + InputField + EnterOnInput + true + Left + true + + true + true + true + true + true + true + + + + ТоварыСумма + 48 + true + true + + true + + + Объект.Товары.Сумма + + + ТоварыСуммаРасширеннаяПодсказка + 50 + Label + true + true + + Left + + + + ТоварыСуммаКонтекстноеМеню + 49 + true + + LabelField + EnterOnInput + true + Left + true + + true + true + + + + ТоварыКоманднаяПанель + 19 + Left + true + + + BeforeAddRow + ТоварыПередНачаломДобавления + + + OnActivateField + ТоварыПриАктивизацииПоля + + + ТоварыСтрокаПоиска + 21 + + ТоварыСтрокаПоискаРасширеннаяПодсказка + 23 + Label + true + true + + Left + + + + ТоварыСтрокаПоискаКонтекстноеМеню + 22 + true + + Товары + + true + + + + ТоварыСостояниеПросмотра + 24 + + ТоварыСостояниеПросмотраРасширеннаяПодсказка + 26 + Label + true + true + + Left + + + + ТоварыСостояниеПросмотраКонтекстноеМеню + 25 + true + + ViewStatusAddition + Товары + + true + + + + ТоварыУправлениеПоиском + 27 + + ТоварыУправлениеПоискомРасширеннаяПодсказка + 29 + Label + true + true + + Left + + + + ТоварыУправлениеПоискомКонтекстноеМеню + 28 + true + + SearchControlAddition + Товары + + true + + + + ТоварыРасширеннаяПодсказка + 20 + Label + true + true + + Left + + + + ТоварыКонтекстноеМеню + 18 + true + + true + true + true + true + true + MultiRow +
true
+ 1 + 1 + AutoUse + AutoUse + true + true + true + Auto + Auto + true + true + true + true + +
+ true + true + + true + + + <key>ru</key> + <value>Товары</value> + + + ГруппаТоварыРасширеннаяПодсказка + 16 + Label + true + true + + Left + + + Page + + Vertical + true + +
+ + ГруппаУслуги + 51 + + Услуги + 53 + true + true + + true + + + Объект.Услуги + + None + + УслугиНомерСтроки + 66 + true + true + + true + + + Объект.Услуги.LineNumber + + + УслугиНомерСтрокиРасширеннаяПодсказка + 68 + Label + true + true + + Left + + + + УслугиНомерСтрокиКонтекстноеМеню + 67 + true + + LabelField + EnterOnInput + true + Left + true + + true + true + + + + УслугиНоменклатура + 69 + true + true + + true + + + Объект.Услуги.Номенклатура + + + OnChange + УслугиНоменклатураПриИзменении + + + УслугиНоменклатураРасширеннаяПодсказка + 71 + Label + true + true + + Left + + + + УслугиНоменклатураКонтекстноеМеню + 70 + true + + InputField + EnterOnInput + true + Left + true + + true + true + true + true + true + true + + Отбор.Услуга + + + true + + + + + + + УслугиКоличество + 72 + true + true + + true + + + Объект.Услуги.Количество + + + OnChange + УслугиКоличествоПриИзменении + + + УслугиКоличествоРасширеннаяПодсказка + 74 + Label + true + true + + Left + + + + УслугиКоличествоКонтекстноеМеню + 73 + true + + InputField + EnterOnInput + true + Left + true + + true + true + true + true + true + true + + + + УслугиЦена + 75 + true + true + + true + + + Объект.Услуги.Цена + + + OnChange + УслугиЦенаПриИзменении + + + УслугиЦенаРасширеннаяПодсказка + 77 + Label + true + true + + Left + + + + УслугиЦенаКонтекстноеМеню + 76 + true + + InputField + EnterOnInput + true + Left + true + + true + true + true + true + true + true + + + + УслугиСумма + 78 + true + true + + true + + + Объект.Услуги.Сумма + + + УслугиСуммаРасширеннаяПодсказка + 80 + Label + true + true + + Left + + + + УслугиСуммаКонтекстноеМеню + 79 + true + + LabelField + EnterOnInput + true + Left + true + + true + true + + + + УслугиКоманднаяПанель + 55 + Left + true + + + УслугиСтрокаПоиска + 57 + + УслугиСтрокаПоискаРасширеннаяПодсказка + 59 + Label + true + true + + Left + + + + УслугиСтрокаПоискаКонтекстноеМеню + 58 + true + + Услуги + + true + + + + УслугиСостояниеПросмотра + 60 + + УслугиСостояниеПросмотраРасширеннаяПодсказка + 62 + Label + true + true + + Left + + + + УслугиСостояниеПросмотраКонтекстноеМеню + 61 + true + + ViewStatusAddition + Услуги + + true + + + + УслугиУправлениеПоиском + 63 + + УслугиУправлениеПоискомРасширеннаяПодсказка + 65 + Label + true + true + + Left + + + + УслугиУправлениеПоискомКонтекстноеМеню + 64 + true + + SearchControlAddition + Услуги + + true + + + + УслугиРасширеннаяПодсказка + 56 + Label + true + true + + Left + + + + УслугиКонтекстноеМеню + 54 + true + + true + true + true + true + true + MultiRow +
true
+ 1 + 1 + AutoUse + AutoUse + true + true + true + Auto + Auto + true + true + true + true + +
+ true + true + + true + + + <key>ru</key> + <value>Услуги</value> + + + ГруппаУслугиРасширеннаяПодсказка + 52 + Label + true + true + + Left + + + Page + + Vertical + true + +
+ true + true + + true + + + <key>ru</key> + <value>Страницы</value> + + + СтраницыРасширеннаяПодсказка + 14 + Label + true + true + + Left + + + Pages + + TabsOnTop + Auto + +
+ + СканироватьQR + 89 + + <key>ru</key> + <value>Сканировать qr-код чека</value> + + true + true + + true + + + СканироватьQRРасширеннаяПодсказка + 90 + Label + true + true + + Left + + + UsualButton + Form.Command.СканироватьQR + Auto + true + 1 + true + true + Center + UserCmds + Auto + + + ТоварыСканироватьШтрихКод + 85 + true + true + + true + + + ТоварыСканироватьШтрихКодРасширеннаяПодсказка + 86 + Label + true + true + + Left + + + UsualButton + Form.Command.СканироватьШтрихКод + Auto + true + 1 + true + true + Center + UserCmds + Auto + + + ФормаКоманднаяПанель + -1 + + ФормаСканироватьШтрихКод + 83 + true + true + + true + + + ФормаСканироватьШтрихКодРасширеннаяПодсказка + 84 + Label + true + true + + Left + + + Form.Command.СканироватьШтрихКод + Auto + true + true + UserCmds + Auto + + + ФормаСканироватьQR + 87 + true + true + + true + + + ФормаСканироватьQRРасширеннаяПодсказка + 88 + Label + true + true + + Left + + + Form.Command.СканироватьQR + Auto + true + true + UserCmds + Auto + + Left + true + + + OnOpen + ПриОткрытии + + + OnCreateAtServer + ПриСозданииНаСервере + + true + true + true + Vertical + true + true + true + true + true + + Объект + 1 + + DocumentObject.Покупки + + + true + + + true + + + Объект.RegisterRecords + +
true
+ true +
+ + ЗапускСРабСтола + + <key>ru</key> + <value>Запуск с раб стола</value> + + 2 + + Boolean + + + true + + + true + + + + СканироватьШтрихКод + + <key>ru</key> + <value>Сканировать штрих код</value> + + 1 + + ru + Сканировать штрих код + + + true + + + CommonPicture.СканШтрихКода + + + + СканироватьШтрихКод + + + TextPicture + Auto + + + СканироватьQR + + <key>ru</key> + <value>Сканировать QR-код</value> + + 2 + + ru + Сканировать QR + + + true + + + + СканироватьQR + + + Auto + + + + + + + true + +
diff --git a/Проект_деньги/src/Documents/Покупки/Forms/ФормаДокумента/Module.bsl b/Проект_деньги/src/Documents/Покупки/Forms/ФормаДокумента/Module.bsl new file mode 100644 index 0000000..5ab92b9 --- /dev/null +++ b/Проект_деньги/src/Documents/Покупки/Forms/ФормаДокумента/Module.bsl @@ -0,0 +1,818 @@ + +&НаКлиенте +Процедура РассчитатьСуммуТовары() + + Элемент = Элементы.Товары.ТекущиеДанные; + Элемент.Сумма = Элемент.Количество * Элемент.Цена; + ЗаполнитьСумму(); + +КонецПроцедуры // РассчитатьСуммуТовары() + +&НаКлиенте +Процедура РассчитатьСуммуУслуги() + + Элемент = Элементы.Услуги.ТекущиеДанные; + Элемент.Сумма = Элемент.Количество * Элемент.Цена; + ЗаполнитьСумму(); + +КонецПроцедуры // РассчитатьСуммуУслуги() + +&НаСервере +Процедура ЗаполнитьСумму() + + Объект.СуммаПокупок = Общий_ПД_Сервер.РассчетСуммыТЧ(Объект.Товары) + Общий_ПД_Сервер.РассчетСуммыТЧ(Объект.Услуги); + +КонецПроцедуры // () + +&НаКлиенте +Процедура ТоварыНоменклатураПриИзменении(Элемент) + + Элемент = Элементы.Товары.ТекущиеДанные; + Номенклатура = Элемент.Номенклатура; + ПроверкаУслуги = ПроверитьСвойствоУслуга(Номенклатура); + Если ПроверкаУслуги Тогда + Предупреждение("Данная номенклатура является услугой, а не товаром",,"Ошибка заполнения"); + Возврат; + КонецЕсли; + Элемент.ЕдиницаИзмерения = Общий_ПД_Сервер.ПолучитьЕдиницуИзмерения(Номенклатура); + Если Элемент.Количество = 0 Тогда + Элемент.Количество = 1; + КонецЕсли; + +КонецПроцедуры + +&НаСервереБезКонтекста +Функция ПроверитьСвойствоУслуга(Номенклатура) + + Если Номенклатура.ВидНоменклатуры = Перечисления.ВидыНоменклатуры.Услуга Тогда + Возврат Истина; + Иначе + Возврат Ложь; + КонецЕсли; + +КонецФункции // ПроверитьСвойствоУслуга(Номенклатура) + +&НаКлиенте +Процедура ТоварыКоличествоПриИзменении(Элемент) + + РассчитатьСуммуТовары(); + +КонецПроцедуры + +&НаКлиенте +Процедура ТоварыЦенаПриИзменении(Элемент) + + РассчитатьСуммуТовары(); + +КонецПроцедуры + +&НаКлиенте +Процедура УслугиКоличествоПриИзменении(Элемент) + + РассчитатьСуммуУслуги(); + +КонецПроцедуры + +&НаКлиенте +Процедура УслугиЦенаПриИзменении(Элемент) + + РассчитатьСуммуУслуги(); + +КонецПроцедуры + +&НаКлиенте +Процедура СканироватьШтрихКод(Команда) + + #Если МобильноеПриложениеКлиент Тогда + + Если СредстваМультимедиа.ПоддерживаетсяСканированиеШтрихКодов() Тогда + ОповещениеСканирования = Новый ОписаниеОповещения("ОбработкаОтсканированногоШтрихКода", ЭтотОбъект); + СредстваМультимедиа.ПоказатьСканированиеШтрихКодов("Сканирование штриш-кода",ОповещениеСканирования,, ТипШтрихКода.Все); + Иначе + ОбщегоНазначенияКлиентСервер.СообщитьПользователю("Не поддерживается сканирование штрих-кодов на данном устройстве"); + КонецЕсли; + + #КонецЕсли + +КонецПроцедуры + +&НаКлиенте +Процедура ОбработкаОтсканированногоШтрихКода(ШтрихКод, Результат, Сообщение, ДопПараметры) Экспорт + + Если Результат И ЗначениеЗаполнено(ШтрихКод) Тогда + Номенклатура = НайтиНоменклатуруПоШтрихКоду(ШтрихКод); + Если Номенклатура = Неопределено Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю("Штрих-код не найден"); + Иначе + ЗаполнитьТЧ(Номенклатура); + КонецЕсли; + Иначе + ОбщегоНазначенияКлиентСервер.СообщитьПользователю("Ошибка сканирования"); + КонецЕсли; + +КонецПроцедуры + +&НаСервереБезКонтекста +Функция НайтиНоменклатуруПоШтрихКоду(ШтрихКод) + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ШтрихКоды.Владелец.Ссылка КАК Владелец + |ИЗ + | РегистрСведений.ШтрихКоды КАК ШтрихКоды + |ГДЕ + | ШтрихКоды.ШтрихКод = &ШтрихКод + | + |СГРУППИРОВАТЬ ПО + | ШтрихКоды.Владелец.Ссылка"; + + Запрос.УстановитьПараметр("ШтрихКод", ШтрихКод); + РезультатЗапроса = Запрос.Выполнить(); + Выборка = РезультатЗапроса.Выбрать(); + Если РезультатЗапроса.Пустой() Тогда + Возврат Неопределено; + Иначе + Выборка.Следующий(); + Возврат Выборка.Владелец; + КонецЕсли; + +КонецФункции // () + +&НаСервере +Процедура ЗаполнитьТЧ(Номенклатура) + + ДанныеЗаполнились = Ложь; + Если Номенклатура.ВидНоменклатуры = Перечисления.ВидыНоменклатуры.Услуга Тогда + Для каждого СтрокаТЧ Из Объект.Услуги Цикл + Если СтрокаТЧ.Номенклатура = Номенклатура Тогда + СтрокаТЧ.Количество = СтрокаТЧ.Количество + 1; + ДанныеЗаполнились = Истина; + КонецЕсли + КонецЦикла; + Если НЕ ДанныеЗаполнились Тогда + СтрТЧ = Объект.Услуги.Добавить(); + СтрТЧ.Номенклатура = Номенклатура; + СтрТЧ.Количество = 1; + КонецЕсли; + Иначе + Для каждого СтрокаТЧ Из Объект.Товары Цикл + Если СтрокаТЧ.Номенклатура = Номенклатура Тогда + СтрокаТЧ.Количество = СтрокаТЧ.Количество + 1; + ДанныеЗаполнились = Истина; + КонецЕсли + КонецЦикла; + Если НЕ ДанныеЗаполнились Тогда + СтрТЧ = Объект.Товары.Добавить(); + СтрТЧ.Номенклатура = Номенклатура; + СтрТЧ.ЕдиницаИзмерения = Общий_ПД_Сервер.ПолучитьЕдиницуИзмерения(Номенклатура); + СтрТЧ.Количество = 1; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры // ЗаполнитьТЧ() + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + СписокЗначений = Общий_ПД_Сервер.ЗаполнитьСписокАктивныхСчетов(); + + //проверка активных счетов + Если Объект.Ссылка.Пустая() Тогда + Если СписокЗначений[0].Значение = "Нет денег на счетах" Тогда + ПоказатьПредупреждение(,"Нет денег на счетах"); + Возврат; + КонецЕсли; + КонецЕсли; + + ВыводитьДиалоги = ОбщегоНазначенияКлиентСервер.ВыводитьДиалоги(); + + Если ЗапускСРабСтола Тогда + Если ВыводитьДиалоги Тогда + Если ЗначениеЗаполнено(Объект.Счет) Тогда + ДиалоговыйВывод(); + Иначе + Оповещение = Новый ОписаниеОповещения("ПослеВыбораЭлемента",ЭтотОбъект); + СписокЗначений.ПоказатьВыборЭлемента(Оповещение, "Выберите счет"); + КонецЕсли; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПослеВыбораЭлемента(ВыбранныйЭлемент, СписокПараметров) Экспорт + + Если ВыбранныйЭлемент = Неопределено Тогда + Предупреждение("Операция отменена!",1); + Закрыть(); + Возврат; + Иначе + ВыбранноеЗначение = ВыбранныйЭлемент.Значение; + Объект.Счет = ВыбранноеЗначение; + ДиалоговыйВывод(); + КонецЕсли; + +КонецПроцедуры // () + +&НаКлиенте +Процедура ДиалоговыйВывод() + + Если Объект.Товары.Количество() <> 0 Тогда + ЗаполнитьЦены(); + КонецЕсли; + ВыборТоварУслуга = ВыборТоварУслуга(); + Если ВыборТоварУслуга = Неопределено Тогда + Предупреждение("Операция отменена!",1); + Закрыть(); + Возврат; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура УслугиНоменклатураПриИзменении(Элемент) + + Элемент = Элементы.Услуги.ТекущиеДанные; + Если Элемент.Количество = 0 Тогда + Элемент.Количество = 1; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Функция ВыборТоварУслуга() + + СписокЗначений = Новый СписокЗначений; + СписокЗначений.Добавить("Отмена"); + СписокЗначений.Добавить("Услуга"); + СписокЗначений.Добавить("Товар"); + СписокЗначений.Добавить("QRКод", "qr-код"); + Ответ = Вопрос("Это товар или услуга?", СписокЗначений, 0); + Выполнено = ЗаполнитьТабЧасть(Ответ); + + Если Выполнено = Неопределено Тогда + Возврат Выполнено; + КонецЕсли; + + Если НЕ Выполнено Тогда + Возврат Неопределено; + КонецЕсли; + + Режим = РежимДиалогаВопрос.ДаНетОтмена; + ЕщеПокупка = КодВозвратаДиалога.Да; + Пока ЕщеПокупка = КодВозвратаДиалога.Да Цикл + ЕщеПокупка = Вопрос("Внести еще одну покупку?", Режим, 0); + Если ЕщеПокупка = КодВозвратаДиалога.Да Тогда + Ответ = Вопрос("Это товар или услуга?", СписокЗначений, 0); + Выполнено = ЗаполнитьТабЧасть(Ответ); + ИначеЕсли ЕщеПокупка = КодВозвратаДиалога.Нет Тогда + Записать(Новый Структура("РежимЗаписи", РежимЗаписиДокумента.Проведение)); + ПоказатьПредупреждение(, "Сумма покупок " + Объект.СуммаПокупок, 1); + Закрыть(); + Возврат Истина; + Иначе + Продолжить; + КонецЕсли; + КонецЦикла; + + +КонецФункции // ВыборТоварУслуга() + +&НаКлиенте +Функция ЗаполнитьТабЧасть(Ответ) + + Если Ответ = "Товар" Тогда + Отбор = Новый Структура("Товар", "Товар"); + Номенклатура = ОткрытьФормуМодально("Справочник.Номенклатура.ФормаВыбора", Отбор); + Если НЕ ЗначениеЗаполнено(Номенклатура) Тогда + Возврат Ложь; + КонецЕсли; + Количество = 1; + Цена = 0; + ВыбраноЧисло = ВвестиЧисло(Количество, "Введите количество!", 12, 3); + Если НЕ ВыбраноЧисло Тогда + Возврат Ложь; + КонецЕсли; + ВведеноЧисло = ВвестиЧисло(Цена, "Введите цену!", 15, 2); + Если НЕ ВведеноЧисло Тогда + Возврат Ложь; + КонецЕсли; + Товар = Объект.Товары.Добавить(); + Товар.Номенклатура = Номенклатура; + Товар.ЕдиницаИзмерения = Общий_ПД_Сервер.ПолучитьЕдиницуИзмерения(Номенклатура); + Товар.Количество = Количество; + Товар.Цена = Цена; + Товар.Сумма = Количество * Цена; + ЗаполнитьСумму(); + Возврат Истина; + ИначеЕсли Ответ = "Услуга" Тогда + Отбор = Новый Структура("Услуга", "Услуга"); + Номенклатура = ОткрытьФормуМодально("Справочник.Номенклатура.ФормаВыбора",Отбор); + Если НЕ ЗначениеЗаполнено(Номенклатура) Тогда + Возврат Ложь; + КонецЕсли; + Количество = 1; + Цена = 0; + ВыбраноЧисло = ВвестиЧисло(Количество, "Введите количество!", 12, 3); + Если НЕ ВыбраноЧисло Тогда + Возврат Ложь; + КонецЕсли; + ВведеноЧисло = ВвестиЧисло(Цена, "Введите цену!", 15, 2); + Если НЕ ВведеноЧисло Тогда + Возврат Ложь; + КонецЕсли; + Товар = Объект.Услуги.Добавить(); + Товар.Номенклатура = Номенклатура; + //Товар.ЕдиницаИзмерения = Общий_ПД_Сервер.ПолучитьЕдиницуИзмерения(Номенклатура); + Товар.Количество = Количество; + Товар.Цена = Цена; + Товар.Сумма = Количество * Цена; + ЗаполнитьСумму(); + Возврат Истина; + ИначеЕсли Ответ = "QRКод" Тогда + СканироватьQR(Неопределено); + Возврат Истина; + ИначеЕсли Ответ = "Отмена" Тогда + Возврат Ложь; + КонецЕсли; + +КонецФункции // ЗаполнитьТабЧасть() + +&НаКлиенте +Процедура ЗаполнитьЦены() + + Товары = Объект.Товары; + + Для каждого Строка Из Товары Цикл + + Если Строка.Цена > 0 Тогда + Продолжить; + КонецЕсли; + + Цена = 0; + ВвелиЦену = ВвестиЧисло(Цена, "Введите цену: """ + Строка.Номенклатура + """!", 15, 2); + Если НЕ ВвелиЦену Тогда + Предупреждение("Опрация отменена!"); + ЭтаФорма.Закрыть(); + Возврат; + Иначе + Строка.Цена = Цена; + Строка.Сумма = Строка.Количество * Цена; + КонецЕсли; + + КонецЦикла; + ЗаполнитьСумму(); + +КонецПроцедуры + +&НаСервере +Функция СканироватьQRНаСервере(QRКод) + + Результат = Неопределено; + + СтруктураКода = РазложитьQRкодВСтруктуру(QRКод); + + Если СтруктураКода = Неопределено Тогда + Возврат Неопределено; + КонецЕсли; + + URL = "https://proverkacheka.com/api/v1/check/get"; + Заголовки = Новый Соответствие(); + Заголовки.Вставить("Content-Type", "application/x-www-form-urlencoded"); + + HTTPОтвет = КоннекторHTTP.Post(URL, СтруктураКода, Новый Структура("Заголовки", Заголовки)); + ТекстОшибки = ""; + + Если HTTPОтвет.КодСостояния=200 Тогда + Данные = КоннекторHTTP.КакJson(HTTPОтвет, Новый Структура("ПрочитатьВСоответствие", Ложь)); + Если Данные.code = 3 ИЛИ Данные.code = 401 ИЛИ Данные.code = 4 Тогда + ТекстОшибки = Данные.data; + КонецЕсли; + Иначе + ТекстОшибки = "Код ответа:"+HTTPОтвет.КодСостояния; + КонецЕсли; + + Если НЕ ЗначениеЗаполнено(ТекстОшибки) Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки); + Результат = Данные; + КонецЕсли; + + Возврат Результат; + +КонецФункции + +&НаКлиенте +Процедура СканироватьQR(Команда) + +#Если МобильноеПриложениеКлиент Тогда + Если СредстваМультимедиа.ПоддерживаетсяСканированиеШтрихКодов() Тогда + ОписаниеОповещения = Новый ОписаниеОповещения("ОбработкаСканированногоQR", ЭтотОбъект); + СредстваМультимедиа.ПоказатьСканированиеШтрихКодов("Сканировать QR-код", ОписаниеОповещения,, ТипШтрихКода.Двухмерный); + Иначе + ОбщегоНазначенияКлиентСервер.СообщитьПользователю("На данном устройстве не поддерживается сканирование штрих-кода!"); + КонецЕсли; +#Иначе + QR = ""; + Если ВвестиЗначение(QR, "Введите данные QR-кода!") Тогда + СтруктураОтвета = СканироватьQRНаСервере(QR); + СозданаНоменклатура = РазобратьДанныеНаКлиенте(СтруктураОтвета); + Если СозданаНоменклатура = Неопределено Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю("Номенклатура не создана!"); + КонецЕсли; + РазобратьДанныеНаСервере(СтруктураОтвета); + КонецЕсли; +#КонецЕсли + +КонецПроцедуры + +&НаКлиенте +Процедура ОбработкаСканированногоQR(ШтрихКод, Результат, Сообщение, ДопПараметры) Экспорт + +#Если МобильноеПриложениеКлиент Тогда + СредстваМультимедиа.ЗакрытьСканированиеШтрихКодов(); + Если Результат И ЗначениеЗаполнено(ШтрихКод) Тогда + СтруктураОтвета = СканироватьQRНаСервере(ШтрихКод); + + СозданаНоменклатура = РазобратьДанныеНаКлиенте(СтруктураОтвета); + Если СозданаНоменклатура = Неопределено Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю("Номенклатура не создана!"); + КонецЕсли; + + РазобратьДанныеНаСервере(СтруктураОтвета); + Иначе + ОбщегоНазначенияКлиентСервер.СообщитьПользователю("Ошибка сканирования"); + КонецЕсли; +#КонецЕсли + +КонецПроцедуры + +&НаСервереБезКонтекста +Функция РазложитьQRкодВСтруктуру(QRКод) + + Результат = Новый Структура("qrraw, token", QRКод, ""); + + token = Константы.ПерсональныйТокенQR.Получить(); + + //проверка заполненности настроек токена для чеков + Если НЕ ЗначениеЗаполнено(token) Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю("Заполните персональный токен для проверки чеков!"); + Возврат Неопределено; + КонецЕсли; + + Результат.token = token; + + Возврат Результат; + +КонецФункции + +&НаКлиенте +Функция РазобратьДанныеНаКлиенте(Структура) + + Если НЕ ЗначениеЗаполнено(Структура) Тогда + Возврат Неопределено; + КонецЕсли; + + Дата = Структура.data.json.dateTime; + Дата = СтрЗаменить(Дата, "T", ""); + Дата = СтрЗаменить(Дата, "-", ""); + Дата = СтрЗаменить(Дата, ":", ""); + Дата = Дата(Дата); + + Объект.Дата = Дата; + + МассивНоменклатуры = Структура.data.json.items; + + мНоменклатура = РазобратьДанныеНаСервере1(МассивНоменклатуры); + + Если ЗначениеЗаполнено(мНоменклатура) Тогда + Для каждого мЭлемент Из мНоменклатура Цикл + П = Новый Структура("мПараметров", мЭлемент); + ФормаНоменклатуры = ПолучитьФорму("Справочник.Номенклатура.Форма.ФормаЭлемента", П); + Создана = ФормаНоменклатуры.ОткрытьМодально(); + + Если ФормаНоменклатуры.Объект.Ссылка.Пустая() Тогда + Возврат Неопределено; + КонецЕсли; + + КонецЦикла; + Возврат "ОК"; + Иначе + Возврат "ОК"; + КонецЕсли; + +КонецФункции + +&НаСервереБезКонтекста +Функция РазобратьДанныеНаСервере1(МассивНоменклатуры) + + + ТЗ = Новый ТаблицаЗначений; + ТЗ.Колонки.Добавить("Наименование", Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(250))); + ТЗ.Колонки.Добавить("Количество", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15, 3))); + ТЗ.Колонки.Добавить("Цена", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15, 2))); + ТЗ.Колонки.Добавить("Сумма", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15, 2))); + + Для каждого СтрокаМассива Из МассивНоменклатуры Цикл + СтрокаТЗ = ТЗ.Добавить(); + СтрокаТЗ.Наименование = СтрокаМассива.name; + СтрокаТЗ.Количество = СтрокаМассива.quantity; + СтрокаТЗ.Цена = СтрокаМассива.price/100; + СтрокаТЗ.Сумма = СтрокаМассива.sum/100; + КонецЦикла; + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ТЗ.Наименование КАК Наименование, + | ТЗ.Количество КАК Количество, + | ТЗ.Цена КАК Цена, + | ТЗ.Сумма КАК Сумма + |ПОМЕСТИТЬ ТЗ + |ИЗ + | &ТЗ КАК ТЗ + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ТЗ.Наименование, + | СУММА(ТЗ.Количество) КАК Количество, + | СУММА(ТЗ.Цена) КАК Цена, + | СУММА(ТЗ.Сумма) КАК Сумма + |ПОМЕСТИТЬ ВТ_ТЗ_Групп + |ИЗ + | ТЗ КАК ТЗ + |СГРУППИРОВАТЬ ПО + | ТЗ.Наименование + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | Номенклатура.Ссылка КАК Номенклатура, + | Номенклатура.Наименование КАК Наименование + |ПОМЕСТИТЬ ВТ_Номенклатура + |ИЗ + | Справочник.Номенклатура КАК Номенклатура + |ГДЕ + | НЕ Номенклатура.ПометкаУдаления + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | КлючевыеСлова.КлючевоеСлово КАК КлючевоеСлово, + | КлючевыеСлова.Номенклатура КАК Номенклатура + |ПОМЕСТИТЬ ВТ_КлючевыеСлова + |ИЗ + | РегистрСведений.КлючевыеСлова КАК КлючевыеСлова + |ГДЕ + | НЕ КлючевыеСлова.Номенклатура.ПометкаУдаления + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ВЫБОР + | КОГДА ВТ_Номенклатура.Номенклатура ЕСТЬ NULL + | ТОГДА ЕСТЬNULL(ВТ_КлючевыеСлова.Номенклатура, ТЗ.Наименование) + | ИНАЧЕ ВТ_Номенклатура.Номенклатура + | КОНЕЦ КАК Номенклатура, + | СУММА(ТЗ.Количество) КАК Количество, + | МАКСИМУМ(ТЗ.Цена) КАК Цена, + | ВЫБОР + | КОГДА ВТ_Номенклатура.Номенклатура ЕСТЬ NULL + | ТОГДА ВТ_КлючевыеСлова.Номенклатура.ВидНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ВидыНоменклатуры.Услуга) + | ИНАЧЕ ЕСТЬNULL(ВТ_Номенклатура.Номенклатура.ВидНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ВидыНоменклатуры.Услуга), + | НЕОПРЕДЕЛЕНО) + | КОНЕЦ КАК ЭтоУслуга, + | ТЗ.Наименование КАК Наименование, + | СУММА(ТЗ.Сумма) КАК Сумма + |ПОМЕСТИТЬ ВТ_Итог + |ИЗ + | ВТ_ТЗ_Групп КАК ТЗ + | ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Номенклатура КАК ВТ_Номенклатура + | ПО ТЗ.Наименование = ВТ_Номенклатура.Наименование + | ЛЕВОЕ СОЕДИНЕНИЕ ВТ_КлючевыеСлова КАК ВТ_КлючевыеСлова + | ПО ТЗ.Наименование ПОДОБНО ""%"" + ВТ_КлючевыеСлова.КлючевоеСлово + ""%"" + |СГРУППИРОВАТЬ ПО + | ТЗ.Наименование, + | ВЫБОР + | КОГДА ВТ_Номенклатура.Номенклатура ЕСТЬ NULL + | ТОГДА ЕСТЬNULL(ВТ_КлючевыеСлова.Номенклатура, ТЗ.Наименование) + | ИНАЧЕ ВТ_Номенклатура.Номенклатура + | КОНЕЦ, + | ВЫБОР + | КОГДА ВТ_Номенклатура.Номенклатура ЕСТЬ NULL + | ТОГДА ВТ_КлючевыеСлова.Номенклатура.ВидНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ВидыНоменклатуры.Услуга) + | ИНАЧЕ ЕСТЬNULL(ВТ_Номенклатура.Номенклатура.ВидНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ВидыНоменклатуры.Услуга), + | НЕОПРЕДЕЛЕНО) + | КОНЕЦ + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ВТ_Итог.Номенклатура КАК Номенклатура, + | ВТ_Итог.Количество КАК Количество, + | ВТ_Итог.Сумма КАК Сумма, + | ВТ_Итог.ЭтоУслуга КАК ЭтоУслуга, + | ВТ_Итог.Цена КАК Цена + |ИЗ + | ВТ_Итог КАК ВТ_Итог"; + + Запрос.УстановитьПараметр("ТЗ", ТЗ); + РезультатЗапроса = Запрос.Выполнить(); + + Если РезультатЗапроса.Пустой() Тогда + Возврат Неопределено; + КонецЕсли; + + Выборка = РезультатЗапроса.Выбрать(); + + ПапкаТовары = Справочники.Номенклатура.НайтиПоНаименованию("Товары"); + Если НЕ ЗначениеЗаполнено(ПапкаТовары) И НЕ ПапкаТовары.ЭтоГруппа Тогда + нПапкаТовары = Справочники.Номенклатура.СоздатьГруппу(); + нПапкаТовары.Наименование = "Товары"; + ПапкаТовары = нПапкаТовары.Ссылка; + нПапкаТовары.Записать(); + КонецЕсли; + ЕдИзм = Справочники.ЕдиницыИзмерений.НайтиПоНаименованию("шт"); + Если НЕ ЗначениеЗаполнено(ЕдИзм) Тогда + эЕдИзм = Справочники.ЕдиницыИзмерений.СоздатьЭлемент(); + эЕдИзм.Наименование = "шт"; + ЕдИзм = эЕдИзм.Ссылка; + эЕдИзм.Записать(); + КонецЕсли; + ВидНоменклатуры = Перечисления.ВидыНоменклатуры.Товар; + + мНоменклатура = Новый Массив; + + Пока Выборка.Следующий() Цикл + Если НЕ ТипЗнч(Выборка.Номенклатура) = Тип("СправочникСсылка.Номенклатура") Тогда + НоменклатураСтруктура = Новый Структура("Номенклатура, Группа, ЕдИзм", Выборка.Номенклатура, ПапкаТовары, ЕдИзм); + мНоменклатура.Добавить(НоменклатураСтруктура); + КонецЕсли; + КонецЦикла; + + Возврат мНоменклатура; + +КонецФункции + +&НаСервере +Процедура РазобратьДанныеНаСервере(Структура) + + //Дата = Структура.data.json.dateTime; + //Дата = СтрЗаменить(Дата, "T", ""); + //Дата = СтрЗаменить(Дата, "-", ""); + //Дата = СтрЗаменить(Дата, ":", ""); + //Дата = Дата(Дата); + // + //Объект.Дата = Дата; + + Если НЕ ЗначениеЗаполнено(Структура) Тогда + Возврат; + КонецЕсли; + + МассивНоменклатуры = Структура.data.json.items; + + ТЗ = Новый ТаблицаЗначений; + ТЗ.Колонки.Добавить("Наименование", Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(250))); + ТЗ.Колонки.Добавить("Количество", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15, 3))); + ТЗ.Колонки.Добавить("Цена", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15, 2))); + ТЗ.Колонки.Добавить("Сумма", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15, 2))); + + Для каждого СтрокаМассива Из МассивНоменклатуры Цикл + СтрокаТЗ = ТЗ.Добавить(); + СтрокаТЗ.Наименование = СтрокаМассива.name; + СтрокаТЗ.Количество = СтрокаМассива.quantity; + СтрокаТЗ.Цена = СтрокаМассива.price/100; + СтрокаТЗ.Сумма = СтрокаМассива.sum/100; + КонецЦикла; + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ТЗ.Наименование КАК Наименование, + | ТЗ.Количество КАК Количество, + | ТЗ.Цена КАК Цена, + | ТЗ.Сумма КАК Сумма + |ПОМЕСТИТЬ ТЗ + |ИЗ + | &ТЗ КАК ТЗ + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | КлючевыеСлова.КлючевоеСлово КАК КлючевоеСлово, + | КлючевыеСлова.Номенклатура КАК Номенклатура + |ПОМЕСТИТЬ ВТ_КлючевыеСлова + |ИЗ + | РегистрСведений.КлючевыеСлова КАК КлючевыеСлова + |ГДЕ + | НЕ КлючевыеСлова.Номенклатура.ПометкаУдаления + | + |ИНДЕКСИРОВАТЬ ПО + | КлючевоеСлово + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | Номенклатура.Ссылка КАК Номенклатура, + | Номенклатура.Наименование КАК Наименование + |ПОМЕСТИТЬ ВТ_Номенклатура + |ИЗ + | Справочник.Номенклатура КАК Номенклатура + |ГДЕ + | НЕ Номенклатура.ПометкаУдаления + | + |ИНДЕКСИРОВАТЬ ПО + | Наименование + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ВЫБОР + | КОГДА ВТ_Номенклатура.Номенклатура ЕСТЬ NULL + | ТОГДА ЕСТЬNULL(ВТ_КлючевыеСлова.Номенклатура, ТЗ.Наименование) + | ИНАЧЕ ВТ_Номенклатура.Номенклатура + | КОНЕЦ КАК Номенклатура, + | СУММА(ТЗ.Количество) КАК Количество, + | МАКСИМУМ(ТЗ.Цена) КАК Цена, + | ВЫБОР + | КОГДА ВТ_Номенклатура.Номенклатура ЕСТЬ NULL + | ТОГДА ЕСТЬNULL(ВТ_КлючевыеСлова.Номенклатура.ВидНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ВидыНоменклатуры.Услуга), ЛОЖЬ) + | ИНАЧЕ ЕСТЬNULL(ВТ_Номенклатура.Номенклатура.ВидНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ВидыНоменклатуры.Услуга), ЛОЖЬ) + | КОНЕЦ КАК ЭтоУслуга, + | ЕСТЬNULL(ВТ_Номенклатура.Номенклатура.ЕдиницаИзмерения, ВТ_КлючевыеСлова.Номенклатура.ЕдиницаИзмерения) КАК ЕдиницаИзмерения, + | СУММА(ТЗ.Сумма) КАК Сумма + |ИЗ + | ТЗ КАК ТЗ + | ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Номенклатура КАК ВТ_Номенклатура + | ПО ТЗ.Наименование = ВТ_Номенклатура.Наименование + | ЛЕВОЕ СОЕДИНЕНИЕ ВТ_КлючевыеСлова КАК ВТ_КлючевыеСлова + | ПО (ТЗ.Наименование ПОДОБНО ""%"" + ВТ_КлючевыеСлова.КлючевоеСлово + ""%"") + | + |СГРУППИРОВАТЬ ПО + | ВЫБОР + | КОГДА ВТ_Номенклатура.Номенклатура ЕСТЬ NULL + | ТОГДА ЕСТЬNULL(ВТ_КлючевыеСлова.Номенклатура, ТЗ.Наименование) + | ИНАЧЕ ВТ_Номенклатура.Номенклатура + | КОНЕЦ, + | ВЫБОР + | КОГДА ВТ_Номенклатура.Номенклатура ЕСТЬ NULL + | ТОГДА ЕСТЬNULL(ВТ_КлючевыеСлова.Номенклатура.ВидНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ВидыНоменклатуры.Услуга), ЛОЖЬ) + | ИНАЧЕ ЕСТЬNULL(ВТ_Номенклатура.Номенклатура.ВидНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ВидыНоменклатуры.Услуга), ЛОЖЬ) + | КОНЕЦ, + | ЕСТЬNULL(ВТ_Номенклатура.Номенклатура.ЕдиницаИзмерения, ВТ_КлючевыеСлова.Номенклатура.ЕдиницаИзмерения)"; + + Запрос.УстановитьПараметр("ТЗ", ТЗ); + РезультатЗапроса = Запрос.Выполнить(); + + Выборка = РезультатЗапроса.Выбрать(); + + //ПапкаТовары = Справочники.Номенклатура.Товары; + //ЕдИзм = Справочники.ЕдиницыИзмерений.шт; + //ВидНоменклатуры = Перечисления.ВидыНоменклатуры.Товар; + + Пока Выборка.Следующий() Цикл + //Если ТипЗнч(Выборка.Номенклатура) = Тип("СправочникСсылка.Номенклатура") Тогда + // Номенклатура = Выборка.Номенклатура; + //Иначе + // НоваяНоменклатура = Справочники.Номенклатура.СоздатьЭлемент(); + // НоваяНоменклатура.Родитель = ПапкаТовары; + // НоваяНоменклатура.Наименование = Выборка.Номенклатура; + // НоваяНоменклатура.ЕдиницаИзмерения = ЕдИзм; + // НоваяНоменклатура.ВидНоменклатуры = ВидНоменклатуры; + // НоваяНоменклатура.Записать(); + // + // Номенклатура = НоваяНоменклатура.Ссылка; + //КонецЕсли; + + СтрокаТЧ = ?(Выборка.ЭтоУслуга, Объект.Услуги.Добавить(), Объект.Товары.Добавить()); + СтрокаТЧ.Номенклатура = Выборка.Номенклатура; + + Если НЕ Выборка.ЭтоУслуга Тогда + СтрокаТЧ.ЕдиницаИзмерения = Выборка.ЕдиницаИзмерения; + КонецЕсли; + + СтрокаТЧ.Количество = Выборка.Количество; + СтрокаТЧ.Цена = Выборка.Цена; + СтрокаТЧ.Сумма = Выборка.Сумма; + КонецЦикла; + +КонецПроцедуры + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + ЗапускСРабСтола = Параметры.Свойство("Счет"); + + Если ЗапускСРабСтола Тогда + Объект.Счет = Параметры.Счет; + КонецЕсли; + + Если Параметры.Свойство("Основание") Тогда + Если ЗначениеЗаполнено(Параметры.Основание) И ТипЗнч(Параметры.Основание) = Тип("ДокументСсылка.Желания") Тогда + Отказ = Параметры.Основание.Выполнено; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + diff --git a/Проект_деньги/src/Documents/Покупки/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss b/Проект_деньги/src/Documents/Покупки/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss new file mode 100644 index 0000000..9b5b065 --- /dev/null +++ b/Проект_деньги/src/Documents/Покупки/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss @@ -0,0 +1,17 @@ + + + + Normal + dfcece9d-5077-440b-b6b3-45a5cb4538eb + + + Normal + 88619765-ccb3-46c6-ac52-38e9c992ebd4 + + + Normal + b75fecce-942b-4aed-abc9-e6a02e460fb3 + + Normal + 911b6018-f537-43e8-a417-da56b22f9aec + diff --git a/Проект_деньги/src/Documents/Покупки/Forms/ФормаСписка/Form.form b/Проект_деньги/src/Documents/Покупки/Forms/ФормаСписка/Form.form new file mode 100644 index 0000000..9943ec3 --- /dev/null +++ b/Проект_деньги/src/Documents/Покупки/Forms/ФормаСписка/Form.form @@ -0,0 +1,428 @@ + + + + СписокКомпоновщикНастроекПользовательскиеНастройки + 1 + true + true + + true + + + <key>ru</key> + <value>Группа пользовательских настроек</value> + + false + + СписокКомпоновщикНастроекПользовательскиеНастройкиРасширеннаяПодсказка + 2 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + WeakSeparation + true + true + Auto + Auto + + + + Список + 3 + true + true + + true + + + Список + + true + None + + Дата + 16 + true + true + + true + + + Список.Date + + true + + ДатаРасширеннаяПодсказка + 18 + Label + true + true + + Left + + + + ДатаКонтекстноеМеню + 17 + true + + LabelField + Enter + true + Left + true + + true + true + + ru + ДФ=dd.MM.yyyy + + + + + Счет + 19 + true + true + + true + + + Список.Счет + + + СчетРасширеннаяПодсказка + 21 + Label + true + true + + Left + + + + СчетКонтекстноеМеню + 20 + true + + LabelField + Enter + true + Left + true + + true + true + + + + СуммаПокупок + 22 + + <key>ru</key> + <value>Сумма</value> + + true + true + + true + + + Список.СуммаПокупок + + + СуммаПокупокРасширеннаяПодсказка + 24 + Label + true + true + + Left + + + + СуммаПокупокКонтекстноеМеню + 23 + true + + LabelField + Enter + true + Left + true + + true + true + + + None + + СписокКоманднаяПанель + 5 + Left + + + СписокСтрокаПоиска + 7 + + СписокСтрокаПоискаРасширеннаяПодсказка + 9 + Label + true + true + + Left + + + + СписокСтрокаПоискаКонтекстноеМеню + 8 + true + + Список + + true + + + + СписокСостояниеПросмотра + 10 + + СписокСостояниеПросмотраРасширеннаяПодсказка + 12 + Label + true + true + + Left + + + + СписокСостояниеПросмотраКонтекстноеМеню + 11 + true + + ViewStatusAddition + Список + + true + + + + СписокУправлениеПоиском + 13 + + СписокУправлениеПоискомРасширеннаяПодсказка + 15 + Label + true + true + + Left + + + + СписокУправлениеПоискомКонтекстноеМеню + 14 + true + + SearchControlAddition + Список + + true + + + + СписокРасширеннаяПодсказка + 6 + Label + true + true + + Left + + + + СписокКонтекстноеМеню + 4 + true + + true + true + true + true + true + MultiRow +
true
+ 1 + 1 + AutoUse + AutoUse + true + true + true + Auto + Auto + ExpandTopLevel + true + true + true + AsFileRef + + Список.DefaultPicture + + + 60 + + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + true + true + СписокКомпоновщикНастроекПользовательскиеНастройки + +
+ + ФормаКоманднаяПанель + -1 + + ФормаВывестиОтчет + 25 + true + true + + true + + + ФормаВывестиОтчетРасширеннаяПодсказка + 26 + Label + true + true + + Left + + + Form.Command.ВывестиОтчет + Auto + true + true + UserCmds + Auto + + + ФормаЗагрузитьЧеки + 27 + true + true + + true + + + ФормаЗагрузитьЧекиРасширеннаяПодсказка + 28 + Label + true + true + + Left + + + Form.Command.ЗагрузитьЧеки + Auto + true + true + UserCmds + Auto + + Left + true + + true + true + true + Vertical + true + true + true + true + true + + Список + 1 + + DynamicList + + + true + + + true + +
true
+ + Document.Покупки + true + true + true + true + +
+ + ВывестиОтчет + + <key>ru</key> + <value>Вывести отчет</value> + + 1 + + ru + Вывести отчет + + + true + + + + ВывестиОтчет + + + Auto + + + ЗагрузитьЧеки + + <key>ru</key> + <value>Загрузить чеки</value> + + 2 + + ru + Загрузить чеки + + + true + + + + ЗагрузитьЧеки + + + Auto + + + + + + +
diff --git a/Проект_деньги/src/Documents/Покупки/Forms/ФормаСписка/Module.bsl b/Проект_деньги/src/Documents/Покупки/Forms/ФормаСписка/Module.bsl new file mode 100644 index 0000000..30c12d4 --- /dev/null +++ b/Проект_деньги/src/Documents/Покупки/Forms/ФормаСписка/Module.bsl @@ -0,0 +1,16 @@ + +&НаКлиенте +Процедура ВывестиОтчет(Команда) + + ПараметрыОтчета = Новый Структура; + ПараметрыОтчета.Вставить("ИмяМакета", "ОтчетПоРасходам"); + ОткрытьФорму("ОбщаяФорма.ФормаОтчета", ПараметрыОтчета,, ); + +КонецПроцедуры + +&НаКлиенте +Процедура ЗагрузитьЧеки(Команда) + + ОткрытьФорму("ОбщаяФорма.ФормаЗагрузкиЧековИзФНС"); + +КонецПроцедуры diff --git a/Проект_деньги/src/Documents/Покупки/ObjectModule.bsl b/Проект_деньги/src/Documents/Покупки/ObjectModule.bsl new file mode 100644 index 0000000..d4ccc05 --- /dev/null +++ b/Проект_деньги/src/Documents/Покупки/ObjectModule.bsl @@ -0,0 +1,104 @@ +#Область ОбработчикиСобытий + +Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения) + + Если ОбменДанными.Загрузка = Истина Тогда + Возврат; + КонецЕсли; + + СуммаПокупок = Товары.Итог("Сумма") + Услуги.Итог("Сумма"); + Ответственный = ОбщегоНазначенияКлиентСервер.ПолучитьПользователя(); + +КонецПроцедуры + +Процедура ОбработкаПроведения(Отказ, Режим) + //{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ + // Данный фрагмент построен конструктором. + // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!! + + // регистр ДенежныеСредства Расход + Движения.ДенежныеСредства.Записывать = Истина; + Для Каждого ТекСтрокаТовары Из Товары Цикл + Движение = Движения.ДенежныеСредства.Добавить(); + Движение.ВидДвижения = ВидДвиженияНакопления.Расход; + Движение.Период = Дата; + Движение.Пользователь = ОбщегоНазначенияКлиентСервер.ПолучитьПользователя(); + Движение.Счет = Счет; + Движение.Сумма = ТекСтрокаТовары.Сумма; + КонецЦикла; + + // регистр ДенежныеСредства Расход + Движения.ДенежныеСредства.Записывать = Истина; + Для Каждого ТекСтрокаУслуги Из Услуги Цикл + Движение = Движения.ДенежныеСредства.Добавить(); + Движение.ВидДвижения = ВидДвиженияНакопления.Расход; + Движение.Период = Дата; + Движение.Пользователь = ОбщегоНазначенияКлиентСервер.ПолучитьПользователя(); + Движение.Счет = Счет; + Движение.Сумма = ТекСтрокаУслуги.Сумма; + КонецЦикла; + + // регистр Расходы + Движения.Расходы.Записывать = Истина; + Для Каждого ТекСтрокаТовары Из Товары Цикл + Движение = Движения.Расходы.Добавить(); + Движение.Период = Дата; + Движение.Пользователь = ОбщегоНазначенияКлиентСервер.ПолучитьПользователя(); + Движение.Номенклатура = ТекСтрокаТовары.Номенклатура; + Движение.Количество = ТекСтрокаТовары.Количество; + Движение.Сумма = ТекСтрокаТовары.Сумма; + КонецЦикла; + + // регистр Расходы + Движения.Расходы.Записывать = Истина; + Для Каждого ТекСтрокаУслуги Из Услуги Цикл + Движение = Движения.Расходы.Добавить(); + Движение.Период = Дата; + Движение.Пользователь = ОбщегоНазначенияКлиентСервер.ПолучитьПользователя(); + Движение.Номенклатура = ТекСтрокаУслуги.Номенклатура; + Движение.Количество = ТекСтрокаУслуги.Количество; + Движение.Сумма = ТекСтрокаУслуги.Сумма; + КонецЦикла; + + //}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ +КонецПроцедуры + +Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка) + + Если ТипЗнч(ДанныеЗаполнения) = Тип("ДокументСсылка.Желания") Тогда + Если ДанныеЗаполнения.Выполнено Тогда + СтандартнаяОбработка = Ложь; + Сообщение = Новый СообщениеПользователю; + Сообщение.Текст = """" + ДанныеЗаполнения.НаименованиеЖелания + """ - покупка выполнена ранее!"; + Сообщение.Сообщить(); + Возврат; + КонецЕсли; + // Заполнение шапки + Ответственный = ДанныеЗаполнения.Ответственный; + Для Каждого ТекСтрокаТЧ Из ДанныеЗаполнения.ТЧ Цикл + Если ТекСтрокаТЧ.Номенклатура.ВидНоменклатуры = Перечисления.ВидыНоменклатуры.Товар Тогда + НоваяСтрока = Товары.Добавить(); + ИначеЕсли ТекСтрокаТЧ.Номенклатура.ВидНоменклатуры = Перечисления.ВидыНоменклатуры.Услуга Тогда + НоваяСтрока = Услуги.Добавить(); + Иначе + Продолжить; + КонецЕсли; + + НоваяСтрока.ЕдиницаИзмерения = ТекСтрокаТЧ.ЕдиницаИзмерения; + НоваяСтрока.Количество = ТекСтрокаТЧ.Количество; + НоваяСтрока.Номенклатура = ТекСтрокаТЧ.Номенклатура; + КонецЦикла; + Желание = ДанныеЗаполнения.ПолучитьОбъект(); + Желание.Выполнено = Истина; + Желание.Записать(); + КонецЕсли; + +КонецПроцедуры + +Процедура ПриУстановкеНовогоНомера(СтандартнаяОбработка, Префикс) + + Префикс = Обмен.ПолучитьПрефиксНомера(); + +КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/Проект_деньги/src/Documents/Покупки/Покупки.mdo b/Проект_деньги/src/Documents/Покупки/Покупки.mdo new file mode 100644 index 0000000..cd1dbcf --- /dev/null +++ b/Проект_деньги/src/Documents/Покупки/Покупки.mdo @@ -0,0 +1,290 @@ + + + + + + + + + + Покупки + + ru + Расходы/Покупки + + true + Document.Покупки.StandardAttribute.Number + DontUse + Document.Желания + Use + Managed + Use + + ru + Расход/Покупку + + String + 9 + Variable + true + true + Document.Покупки.Form.ФормаДокумента + Document.Покупки.Form.ФормаСписка + AccumulationRegister.ДенежныеСредства + AccumulationRegister.Расходы + true + true + + Счет + + ru + Счет + + + CatalogRef.Счета + + + + ShowError + + Use + Use + + + СуммаПокупок + + ru + Сумма покупок + + + String + + 10 + + + + + + Use + Use + + + Ответственный + + ru + Ответственный + + + CatalogRef.Пользователи + + + + + Use + Use + + + ФормаДокумента + + ru + Форма документа + + PersonalComputer + MobileDevice + + + ФормаСписка + + ru + Форма списка + + PersonalComputer + MobileDevice + + + + + + + Товары + + ru + Товары + + + Номенклатура + + ru + Номенклатура + + + CatalogRef.Номенклатура + + + + ShowError + + Отбор.ВидНоменклатуры + + Enum.ВидыНоменклатуры.EnumValue.Товар + + + Use + Use + + + ЕдиницаИзмерения + + ru + Ед. измер. + + + CatalogRef.ЕдиницыИзмерений + + + + Use + Use + + + Количество + + ru + Количество + + + Number + + 12 + 3 + + + + + Use + Use + + + Цена + + ru + Цена + + + Number + + 15 + 2 + + + + + Use + Use + + + Сумма + + ru + Сумма + + + Number + + 15 + 2 + + + + + Use + Use + + + + + + + + Услуги + + ru + Услуги + + + Номенклатура + + ru + Номенклатура + + + CatalogRef.Номенклатура + + + + ShowError + + Отбор.ВидНоменклатуры + + Enum.ВидыНоменклатуры.EnumValue.Услуга + + + Use + Use + + + Количество + + ru + Количество + + + Number + + 12 + 3 + + + + + Use + Use + + + Цена + + ru + Цена + + + Number + + 15 + 2 + + + + + Use + Use + + + Сумма + + ru + Сумма + + + Number + + 15 + 2 + + + + + Use + Use + + + diff --git a/Проект_деньги/src/Documents/Продажи/Forms/ФормаДокумента/Form.form b/Проект_деньги/src/Documents/Продажи/Forms/ФормаДокумента/Form.form new file mode 100644 index 0000000..58e3c01 --- /dev/null +++ b/Проект_деньги/src/Documents/Продажи/Forms/ФормаДокумента/Form.form @@ -0,0 +1,1047 @@ + + + + Группа1 + 81 + + Номер + 1 + true + true + + true + + + Объект.Number + + + НомерРасширеннаяПодсказка + 3 + Label + true + true + + Left + + + + НомерКонтекстноеМеню + 2 + true + + InputField + EnterOnInput + true + Left + true + + true + true + true + true + true + true + + + + Дата + 4 + true + true + + true + + + Объект.Date + + + ДатаРасширеннаяПодсказка + 6 + Label + true + true + + Left + + + + ДатаКонтекстноеМеню + 5 + true + + InputField + EnterOnInput + true + Left + true + + true + true + true + true + true + true + + + + СуммаПокупок + 10 + true + true + + true + + + Объект.СуммаПродажи + + + СуммаПокупокРасширеннаяПодсказка + 12 + Label + true + true + + Left + + + + СуммаПокупокКонтекстноеМеню + 11 + true + + LabelField + EnterOnInput + true + Left + true + + true + true + + + true + true + + true + + + Группа1РасширеннаяПодсказка + 82 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + Счет + 7 + true + true + + true + + + Объект.Счет + + + СчетРасширеннаяПодсказка + 9 + Label + true + true + + Left + + + + СчетКонтекстноеМеню + 8 + true + + InputField + EnterOnInput + true + Left + true + + true + true + true + true + true + true + + + + Страницы + 13 + + ГруппаТовары + 15 + + Товары + 17 + true + true + + true + + + Объект.Товары + + None + + ТоварыНомерСтроки + 30 + true + true + + true + + + Объект.Товары.LineNumber + + + ТоварыНомерСтрокиРасширеннаяПодсказка + 32 + Label + true + true + + Left + + + + ТоварыНомерСтрокиКонтекстноеМеню + 31 + true + + LabelField + EnterOnInput + true + Left + true + + true + true + + + + ТоварыНоменклатура + 36 + true + true + + true + + + Объект.Товары.Номенклатура + + + OnChange + ТоварыНоменклатураПриИзменении + + + ТоварыНоменклатураРасширеннаяПодсказка + 38 + Label + true + true + + Left + + + + ТоварыНоменклатураКонтекстноеМеню + 37 + true + + InputField + EnterOnInput + true + Left + true + + true + true + true + true + true + true + + Отбор.Услуга + + + + + + + + ТоварыЕдиницаИзмерения + 39 + true + true + + true + + + Объект.Товары.ЕдиницаИзмерения + + + ТоварыЕдиницаИзмеренияРасширеннаяПодсказка + 41 + Label + true + true + + Left + + + + ТоварыЕдиницаИзмеренияКонтекстноеМеню + 40 + true + + LabelField + EnterOnInput + true + Left + true + + true + true + + + + ТоварыКоличество + 42 + true + true + + true + + + Объект.Товары.Количество + + + OnChange + ТоварыКоличествоПриИзменении + + + ТоварыКоличествоРасширеннаяПодсказка + 44 + Label + true + true + + Left + + + + ТоварыКоличествоКонтекстноеМеню + 43 + true + + InputField + EnterOnInput + true + Left + true + + true + true + true + true + true + true + + + + ТоварыЦена + 45 + true + true + + true + + + Объект.Товары.Цена + + + OnChange + ТоварыЦенаПриИзменении + + + ТоварыЦенаРасширеннаяПодсказка + 47 + Label + true + true + + Left + + + + ТоварыЦенаКонтекстноеМеню + 46 + true + + InputField + EnterOnInput + true + Left + true + + true + true + true + true + true + true + + + + ТоварыСумма + 48 + true + true + + true + + + Объект.Товары.Сумма + + + ТоварыСуммаРасширеннаяПодсказка + 50 + Label + true + true + + Left + + + + ТоварыСуммаКонтекстноеМеню + 49 + true + + LabelField + true + EnterOnInput + true + Left + true + + true + true + + + + ТоварыКоманднаяПанель + 19 + Left + true + + + ТоварыСтрокаПоиска + 21 + + ТоварыСтрокаПоискаРасширеннаяПодсказка + 23 + Label + true + true + + Left + + + + ТоварыСтрокаПоискаКонтекстноеМеню + 22 + true + + Товары + + true + + + + ТоварыСостояниеПросмотра + 24 + + ТоварыСостояниеПросмотраРасширеннаяПодсказка + 26 + Label + true + true + + Left + + + + ТоварыСостояниеПросмотраКонтекстноеМеню + 25 + true + + ViewStatusAddition + Товары + + true + + + + ТоварыУправлениеПоиском + 27 + + ТоварыУправлениеПоискомРасширеннаяПодсказка + 29 + Label + true + true + + Left + + + + ТоварыУправлениеПоискомКонтекстноеМеню + 28 + true + + SearchControlAddition + Товары + + true + + + + ТоварыРасширеннаяПодсказка + 20 + Label + true + true + + Left + + + + ТоварыКонтекстноеМеню + 18 + true + + true + true + true + true + true + MultiRow +
true
+ 1 + 1 + AutoUse + AutoUse + true + true + true + Auto + Auto + true + true + true + true + +
+ true + true + + true + + + <key>ru</key> + <value>Товары</value> + + + ГруппаТоварыРасширеннаяПодсказка + 16 + Label + true + true + + Left + + + Page + + Vertical + true + +
+ + ГруппаУслуги + 51 + + Услуги + 53 + true + true + + true + + + Объект.Услуги + + None + + УслугиНомерСтроки + 66 + true + true + + true + + + Объект.Услуги.LineNumber + + + УслугиНомерСтрокиРасширеннаяПодсказка + 68 + Label + true + true + + Left + + + + УслугиНомерСтрокиКонтекстноеМеню + 67 + true + + LabelField + EnterOnInput + true + Left + true + + true + true + + + + УслугиНоменклатура + 69 + true + true + + true + + + Объект.Услуги.Номенклатура + + + OnChange + УслугиНоменклатураПриИзменении + + + УслугиНоменклатураРасширеннаяПодсказка + 71 + Label + true + true + + Left + + + + УслугиНоменклатураКонтекстноеМеню + 70 + true + + InputField + EnterOnInput + true + Left + true + + true + true + true + true + true + true + + Отбор.Услуга + + + true + + + + + + + УслугиКоличество + 72 + true + true + + true + + + Объект.Услуги.Количество + + + OnChange + УслугиКоличествоПриИзменении + + + УслугиКоличествоРасширеннаяПодсказка + 74 + Label + true + true + + Left + + + + УслугиКоличествоКонтекстноеМеню + 73 + true + + InputField + EnterOnInput + true + Left + true + + true + true + true + true + true + true + + + + УслугиЦена + 75 + true + true + + true + + + Объект.Услуги.Цена + + + OnChange + УслугиЦенаПриИзменении + + + УслугиЦенаРасширеннаяПодсказка + 77 + Label + true + true + + Left + + + + УслугиЦенаКонтекстноеМеню + 76 + true + + InputField + EnterOnInput + true + Left + true + + true + true + true + true + true + true + + + + УслугиСумма + 78 + true + true + + true + + + Объект.Услуги.Сумма + + + УслугиСуммаРасширеннаяПодсказка + 80 + Label + true + true + + Left + + + + УслугиСуммаКонтекстноеМеню + 79 + true + + LabelField + true + EnterOnInput + true + Left + true + + true + true + + + + УслугиКоманднаяПанель + 55 + Left + true + + + УслугиСтрокаПоиска + 57 + + УслугиСтрокаПоискаРасширеннаяПодсказка + 59 + Label + true + true + + Left + + + + УслугиСтрокаПоискаКонтекстноеМеню + 58 + true + + Услуги + + true + + + + УслугиСостояниеПросмотра + 60 + + УслугиСостояниеПросмотраРасширеннаяПодсказка + 62 + Label + true + true + + Left + + + + УслугиСостояниеПросмотраКонтекстноеМеню + 61 + true + + ViewStatusAddition + Услуги + + true + + + + УслугиУправлениеПоиском + 63 + + УслугиУправлениеПоискомРасширеннаяПодсказка + 65 + Label + true + true + + Left + + + + УслугиУправлениеПоискомКонтекстноеМеню + 64 + true + + SearchControlAddition + Услуги + + true + + + + УслугиРасширеннаяПодсказка + 56 + Label + true + true + + Left + + + + УслугиКонтекстноеМеню + 54 + true + + true + true + true + true + true + MultiRow +
true
+ 1 + 1 + AutoUse + AutoUse + true + true + true + Auto + Auto + true + true + true + true + +
+ true + true + + true + + + <key>ru</key> + <value>Услуги</value> + + + ГруппаУслугиРасширеннаяПодсказка + 52 + Label + true + true + + Left + + + Page + + Vertical + true + +
+ true + true + + true + + + <key>ru</key> + <value>Страницы</value> + + + СтраницыРасширеннаяПодсказка + 14 + Label + true + true + + Left + + + Pages + + TabsOnTop + Auto + +
+ + ФормаКоманднаяПанель + -1 + Left + true + + + OnOpen + ПриОткрытии + + + OnCreateAtServer + ПриСозданииНаСервере + + true + true + true + Vertical + true + true + true + true + true + + Объект + 1 + + DocumentObject.Продажи + + + true + + + true + + + Объект.RegisterRecords + +
true
+ true +
+ + ЗапускСРабСтола + + <key>ru</key> + <value>Запуск с раб стола</value> + + 2 + + Boolean + + + true + + + true + + + + + + + + true + +
diff --git a/Проект_деньги/src/Documents/Продажи/Forms/ФормаДокумента/Module.bsl b/Проект_деньги/src/Documents/Продажи/Forms/ФормаДокумента/Module.bsl new file mode 100644 index 0000000..ed38ec5 --- /dev/null +++ b/Проект_деньги/src/Documents/Продажи/Forms/ФормаДокумента/Module.bsl @@ -0,0 +1,226 @@ + +&НаСервереБезКонтекста +Функция ПолучитьЕдиницуИзмерения(Номенклатура) + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | Номенклатура.ЕдиницаИзмерения КАК ЕдиницаИзмерения + |ИЗ + | Справочник.Номенклатура КАК Номенклатура + |ГДЕ + | Номенклатура.Ссылка = &Ссылка"; + + Запрос.УстановитьПараметр("Ссылка", Номенклатура); + РезультатЗапроса = Запрос.Выполнить(); + Выборка = РезультатЗапроса.Выбрать(); + Выборка.Следующий(); + Возврат Выборка.ЕдиницаИзмерения + +КонецФункции + +&НаКлиенте +Процедура РассчитатьСуммуТовары() + + Элемент = Элементы.Товары.ТекущиеДанные; + Элемент.Сумма = Элемент.Количество * Элемент.Цена; + ЗаполнитьСумму(); + +КонецПроцедуры // РассчитатьСуммуТовары() + +&НаКлиенте +Процедура РассчитатьСуммуУслуги() + + Элемент = Элементы.Услуги.ТекущиеДанные; + Элемент.Сумма = Элемент.Количество * Элемент.Цена; + ЗаполнитьСумму(); + +КонецПроцедуры // РассчитатьСуммуУслуги() + +&НаСервере +Процедура ЗаполнитьСумму() + + Объект.СуммаПродажи = Общий_ПД_Сервер.РассчетСуммыТЧ(Объект.Товары) + Общий_ПД_Сервер.РассчетСуммыТЧ(Объект.Услуги); + +КонецПроцедуры // () + +&НаКлиенте +Процедура ТоварыНоменклатураПриИзменении(Элемент) + + Элемент = Элементы.Товары.ТекущиеДанные; + Элемент.ЕдиницаИзмерения = ПолучитьЕдиницуИзмерения(Элемент.Номенклатура); + Если Элемент.Количество = 0 Тогда + Элемент.Количество = 1; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ТоварыКоличествоПриИзменении(Элемент) + + РассчитатьСуммуТовары(); + +КонецПроцедуры + +&НаКлиенте +Процедура ТоварыЦенаПриИзменении(Элемент) + + РассчитатьСуммуТовары(); + +КонецПроцедуры + +&НаКлиенте +Процедура УслугиКоличествоПриИзменении(Элемент) + + РассчитатьСуммуУслуги(); + +КонецПроцедуры + +&НаКлиенте +Процедура УслугиЦенаПриИзменении(Элемент) + + РассчитатьСуммуУслуги(); + +КонецПроцедуры + +&НаКлиенте +Процедура УслугиНоменклатураПриИзменении(Элемент) + + Элемент = Элементы.Услуги.ТекущиеДанные; + Если Элемент.Количество = 0 Тогда + Элемент.Количество = 1; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + ВыводитьДиалоги = ОбщегоНазначенияКлиентСервер.ВыводитьДиалоги(); + + Если Объект.Ссылка.Пустая() И ВыводитьДиалоги И ЗапускСРабСтола Тогда + Счет = ОткрытьФормуМодально("Справочник.Счета.Форма.ФормаВыбора", Новый Структура("Заголовок", "Выберите счет!")); + Объект.Счет = Счет; + Если Не ЗначениеЗаполнено(Объект.Счет) Тогда + Предупреждение("Операция отменена!",1); + Закрыть(); + Возврат; + КонецЕсли; + ВыборТоварУслуга = ВыборТоварУслуга(); + Если ВыборТоварУслуга = Неопределено Тогда + Предупреждение("Операция отменена!",1); + Закрыть(); + Возврат; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Функция ВыборТоварУслуга() + + СписокЗначений = Новый СписокЗначений; + СписокЗначений.Добавить("Отмена"); + СписокЗначений.Добавить("Услуга"); + СписокЗначений.Добавить("Товар"); + Ответ = Вопрос("Это товар или услуга?", СписокЗначений, 0); + Выполнено = ЗаполнитьТабЧасть(Ответ); + Если НЕ Выполнено Тогда + Возврат Неопределено; + КонецЕсли; + Режим = РежимДиалогаВопрос.ДаНетОтмена; + ЕщеПокупка = КодВозвратаДиалога.Да; + Пока ЕщеПокупка = КодВозвратаДиалога.Да Цикл + ЕщеПокупка = Вопрос("Внести еще одну покупку?", Режим, 0); + Если ЕщеПокупка = КодВозвратаДиалога.Да Тогда + Ответ = Вопрос("Это товар или услуга?", СписокЗначений, 0); + Выполнено = ЗаполнитьТабЧасть(Ответ); + ИначеЕсли ЕщеПокупка = КодВозвратаДиалога.Нет Тогда + Записать(Новый Структура("РежимЗаписи", РежимЗаписиДокумента.Проведение)); + Закрыть(); + Возврат Истина; + Иначе + Продолжить; + КонецЕсли; + КонецЦикла; + +КонецФункции // ВыборТоварУслуга() + +&НаКлиенте +Функция ЗаполнитьТабЧасть(Ответ) + + Если Ответ = "Товар" Тогда + Отбор = Новый Структура("Товар", "Товар"); + Номенклатура = ОткрытьФормуМодально("Справочник.Номенклатура.ФормаВыбора", Отбор); + Если НЕ ЗначениеЗаполнено(Номенклатура) Тогда + Возврат Ложь; + КонецЕсли; + Количество = 1; + Цена = 0; + ВыбраноЧисло = ВвестиЧисло(Количество, "Введите количество!", 12, 3); + Если НЕ ВыбраноЧисло Тогда + Возврат Ложь; + КонецЕсли; + ВведеноЧисло = ВвестиЧисло(Цена, "Введите цену!", 15, 2); + Если НЕ ВведеноЧисло Тогда + Возврат Ложь; + КонецЕсли; + Товар = Объект.Товары.Добавить(); + Товар.Номенклатура = Номенклатура; + Товар.ЕдиницаИзмерения = Общий_ПД_Сервер.ПолучитьЕдиницуИзмерения(Номенклатура); + Товар.Количество = Количество; + Товар.Цена = Цена; + Товар.Сумма = Количество * Цена; + ЗаполнитьСумму(); + Возврат Истина; + ИначеЕсли Ответ = "Услуга" Тогда + Отбор = Новый Структура("Услуга", "Услуга"); + Номенклатура = ОткрытьФормуМодально("Справочник.Номенклатура.ФормаВыбора",Отбор); + Если НЕ ЗначениеЗаполнено(Номенклатура) Тогда + Возврат Ложь; + КонецЕсли; + Количество = 1; + Цена = 0; + ВыбраноЧисло = ВвестиЧисло(Количество, "Введите количество!", 12, 3); + Если НЕ ВыбраноЧисло Тогда + Возврат Ложь; + КонецЕсли; + ВведеноЧисло = ВвестиЧисло(Цена, "Введите цену!", 15, 2); + Если НЕ ВведеноЧисло Тогда + Возврат Ложь; + КонецЕсли; + Товар = Объект.Услуги.Добавить(); + Товар.Номенклатура = Номенклатура; + //Товар.ЕдиницаИзмерения = Общий_ПД_Сервер.ПолучитьЕдиницуИзмерения(Номенклатура); + Товар.Количество = Количество; + Товар.Цена = Цена; + Товар.Сумма = Количество * Цена; + ЗаполнитьСумму(); + Возврат Истина; + ИначеЕсли Ответ = "Отмена" Тогда + Возврат Ложь; + КонецЕсли; + +КонецФункции // ЗаполнитьТабЧасть() + +&НаКлиенте +Процедура ПослеВыбораЭлемента(ВыбранныйЭлемент, СписокПараметров) Экспорт + + Если ВыбранныйЭлемент = Неопределено Тогда + Сообщение = Новый СообщениеПользователю; + Сообщение.Текст = "Счет не выбран"; + Сообщение.Сообщить(); + Иначе + ВыбранноеЗначение = ВыбранныйЭлемент.Значение; + Объект.Счет = ВыбранноеЗначение; + КонецЕсли; + +КонецПроцедуры // () + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + ЗапускСРабСтола = Параметры.Свойство("ЗапускСРабСтола"); +КонецПроцедуры + + + diff --git a/Проект_деньги/src/Documents/Продажи/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss b/Проект_деньги/src/Documents/Продажи/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss new file mode 100644 index 0000000..9b5b065 --- /dev/null +++ b/Проект_деньги/src/Documents/Продажи/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss @@ -0,0 +1,17 @@ + + + + Normal + dfcece9d-5077-440b-b6b3-45a5cb4538eb + + + Normal + 88619765-ccb3-46c6-ac52-38e9c992ebd4 + + + Normal + b75fecce-942b-4aed-abc9-e6a02e460fb3 + + Normal + 911b6018-f537-43e8-a417-da56b22f9aec + diff --git a/Проект_деньги/src/Documents/Продажи/Forms/ФормаСписка/Form.form b/Проект_деньги/src/Documents/Продажи/Forms/ФормаСписка/Form.form new file mode 100644 index 0000000..e364742 --- /dev/null +++ b/Проект_деньги/src/Documents/Продажи/Forms/ФормаСписка/Form.form @@ -0,0 +1,336 @@ + + + + СписокКомпоновщикНастроекПользовательскиеНастройки + 1 + true + true + + true + + + <key>ru</key> + <value>Группа пользовательских настроек</value> + + false + + СписокКомпоновщикНастроекПользовательскиеНастройкиРасширеннаяПодсказка + 2 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + WeakSeparation + true + true + Auto + Auto + + + + Список + 3 + true + true + + true + + + Список + + true + None + + Дата + 16 + true + true + + true + + + Список.Date + + true + + ДатаРасширеннаяПодсказка + 18 + Label + true + true + + Left + + + + ДатаКонтекстноеМеню + 17 + true + + LabelField + Enter + true + Left + true + + true + true + + ru + ДФ=dd.MM.yyyy + + + + + Счет + 19 + true + true + + true + + + Список.Счет + + + СчетРасширеннаяПодсказка + 21 + Label + true + true + + Left + + + + СчетКонтекстноеМеню + 20 + true + + LabelField + Enter + true + Left + true + + true + true + + + + СуммаПродажи + 22 + + <key>ru</key> + <value>Сумма</value> + + true + true + + true + + + Список.СуммаПродажи + + + СуммаПродажиРасширеннаяПодсказка + 24 + Label + true + true + + Left + + + + СуммаПродажиКонтекстноеМеню + 23 + true + + LabelField + Enter + true + Left + true + + true + true + + + None + + СписокКоманднаяПанель + 5 + Left + + + СписокСтрокаПоиска + 7 + + СписокСтрокаПоискаРасширеннаяПодсказка + 9 + Label + true + true + + Left + + + + СписокСтрокаПоискаКонтекстноеМеню + 8 + true + + Список + + true + + + + СписокСостояниеПросмотра + 10 + + СписокСостояниеПросмотраРасширеннаяПодсказка + 12 + Label + true + true + + Left + + + + СписокСостояниеПросмотраКонтекстноеМеню + 11 + true + + ViewStatusAddition + Список + + true + + + + СписокУправлениеПоиском + 13 + + СписокУправлениеПоискомРасширеннаяПодсказка + 15 + Label + true + true + + Left + + + + СписокУправлениеПоискомКонтекстноеМеню + 14 + true + + SearchControlAddition + Список + + true + + + + СписокРасширеннаяПодсказка + 6 + Label + true + true + + Left + + + + СписокКонтекстноеМеню + 4 + true + + true + true + true + true + true + MultiRow +
true
+ 1 + 1 + AutoUse + AutoUse + true + true + true + Auto + Auto + ExpandTopLevel + true + true + true + AsFileRef + + Список.DefaultPicture + + + 60 + + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + true + true + СписокКомпоновщикНастроекПользовательскиеНастройки + +
+ + ФормаКоманднаяПанель + -1 + Left + true + + true + true + true + Vertical + true + true + true + true + true + + Список + 1 + + DynamicList + + + true + + + true + +
true
+ + Document.Продажи + true + true + true + true + +
+ + + + + +
diff --git a/Проект_деньги/src/Documents/Продажи/ObjectModule.bsl b/Проект_деньги/src/Documents/Продажи/ObjectModule.bsl new file mode 100644 index 0000000..d0e4533 --- /dev/null +++ b/Проект_деньги/src/Documents/Продажи/ObjectModule.bsl @@ -0,0 +1,95 @@ +#Область ОбработчикиСобытий + +Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения) + + Если ОбменДанными.Загрузка = Истина Тогда + Возврат; + КонецЕсли; + + СуммаПродажи = Товары.Итог("Сумма") + Услуги.Итог("Сумма"); + Ответственный = ОбщегоНазначенияКлиентСервер.ПолучитьПользователя(); + +КонецПроцедуры + +Процедура ОбработкаПроведения(Отказ, Режим) + //{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ + // Данный фрагмент построен конструктором. + // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!! + + // регистр ДенежныеСредства Приход + Движения.ДенежныеСредства.Записывать = Истина; + Для Каждого ТекСтрокаТовары Из Товары Цикл + Движение = Движения.ДенежныеСредства.Добавить(); + Движение.ВидДвижения = ВидДвиженияНакопления.Приход; + Движение.Период = Дата; + Движение.Пользователь = ОбщегоНазначенияКлиентСервер.ПолучитьПользователя(); + Движение.Счет = Счет; + Движение.Сумма = ТекСтрокаТовары.Сумма; + КонецЦикла; + + // регистр ДенежныеСредства Приход + Движения.ДенежныеСредства.Записывать = Истина; + Для Каждого ТекСтрокаУслуги Из Услуги Цикл + Движение = Движения.ДенежныеСредства.Добавить(); + Движение.ВидДвижения = ВидДвиженияНакопления.Приход; + Движение.Период = Дата; + Движение.Пользователь = ОбщегоНазначенияКлиентСервер.ПолучитьПользователя(); + Движение.Счет = Счет; + Движение.Сумма = ТекСтрокаУслуги.Сумма; + КонецЦикла; + + // регистр Доходы + Движения.Доходы.Записывать = Истина; + Для Каждого ТекСтрокаТовары Из Товары Цикл + Движение = Движения.Доходы.Добавить(); + Движение.Период = Дата; + Движение.Пользователь = ОбщегоНазначенияКлиентСервер.ПолучитьПользователя(); + Движение.Номенклатура = ТекСтрокаТовары.Номенклатура; + Движение.Количество = ТекСтрокаТовары.Количество; + Движение.Сумма = ТекСтрокаТовары.Сумма; + КонецЦикла; + + // регистр Доходы + Движения.Доходы.Записывать = Истина; + Для Каждого ТекСтрокаУслуги Из Услуги Цикл + Движение = Движения.Доходы.Добавить(); + Движение.Период = Дата; + Движение.Пользователь = ОбщегоНазначенияКлиентСервер.ПолучитьПользователя(); + Движение.Номенклатура = ТекСтрокаУслуги.Номенклатура; + Движение.Количество = ТекСтрокаУслуги.Количество; + Движение.Сумма = ТекСтрокаУслуги.Сумма; + КонецЦикла; + + // регистр Продажи + Движения.Продажи.Записывать = Истина; + Для Каждого ТекСтрокаТовары Из Товары Цикл + Движение = Движения.Продажи.Добавить(); + Движение.Период = Дата; + Движение.Пользователь = ОбщегоНазначенияКлиентСервер.ПолучитьПользователя(); + Движение.Номенклатура = ТекСтрокаТовары.Номенклатура; + Движение.Количество = ТекСтрокаТовары.Количество; + Движение.Сумма = ТекСтрокаТовары.Сумма; + КонецЦикла; + + // регистр Продажи + Движения.Продажи.Записывать = Истина; + Для Каждого ТекСтрокаУслуги Из Услуги Цикл + Движение = Движения.Продажи.Добавить(); + Движение.Период = Дата; + Движение.Пользователь = ОбщегоНазначенияКлиентСервер.ПолучитьПользователя(); + Движение.Номенклатура = ТекСтрокаУслуги.Номенклатура; + Движение.Количество = ТекСтрокаУслуги.Количество; + Движение.Сумма = ТекСтрокаУслуги.Сумма; + КонецЦикла; + + //}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ +КонецПроцедуры + + +Процедура ПриУстановкеНовогоНомера(СтандартнаяОбработка, Префикс) + + Префикс = Обмен.ПолучитьПрефиксНомера(); + +КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/Проект_деньги/src/Documents/Продажи/Продажи.mdo b/Проект_деньги/src/Documents/Продажи/Продажи.mdo new file mode 100644 index 0000000..e8f9457 --- /dev/null +++ b/Проект_деньги/src/Documents/Продажи/Продажи.mdo @@ -0,0 +1,354 @@ + + + + + + + + + + Продажи + + ru + Продажи + + true + Document.Продажи.StandardAttribute.Number + DontUse + + Use + Posted + + Use + + + + + Use + Ref + + Use + + + + + Use + DeletionMark + + Use + + + + + Use + Date + + ShowError + Use + + + + + Use + Number + + Use + + + + Use + Managed + Use + + ru + Продажу + + String + 9 + Variable + true + true + Document.Продажи.Form.ФормаДокумента + Document.Продажи.Form.ФормаСписка + AccumulationRegister.ДенежныеСредства + AccumulationRegister.Доходы + AccumulationRegister.Продажи + true + true + + Счет + + ru + Счет + + + CatalogRef.Счета + + + + ShowError + + Use + Use + + + СуммаПродажи + + ru + Сумма продажи + + + String + + 10 + + + + + + Use + Use + + + Ответственный + + ru + Ответственный + + + CatalogRef.Пользователи + + + + + Use + Use + + + ФормаДокумента + + ru + Форма документа + + PersonalComputer + MobileDevice + + + ФормаСписка + + ru + Форма списка + + PersonalComputer + MobileDevice + + + + + + + Товары + + ru + Товары + + + Use + LineNumber + + Use + + + + + Номенклатура + + ru + Номенклатура + + + CatalogRef.Номенклатура + + + + ShowError + + Отбор.ВидНоменклатуры + + Enum.ВидыНоменклатуры.EnumValue.Товар + + + Use + Use + + + ЕдиницаИзмерения + + ru + Ед. измер. + + + CatalogRef.ЕдиницыИзмерений + + + + ShowError + Use + Use + + + Количество + + ru + Количество + + + Number + + 12 + 3 + + + + + ShowError + Use + Use + + + Цена + + ru + Цена + + + Number + + 15 + 2 + + + + + ShowError + Use + Use + + + Сумма + + ru + Сумма + + + Number + + 15 + 2 + + + + + ShowError + Use + Use + + + + + + + + Услуги + + ru + Услуги + + + Use + LineNumber + + Use + + + + + Номенклатура + + ru + Номенклатура + + + CatalogRef.Номенклатура + + + + ShowError + + Отбор.ВидНоменклатуры + + Enum.ВидыНоменклатуры.EnumValue.Услуга + + + Use + Use + + + Количество + + ru + Количество + + + Number + + 12 + 3 + + + + + ShowError + Use + Use + + + Цена + + ru + Цена + + + Number + + 15 + 2 + + + + + ShowError + Use + Use + + + Сумма + + ru + Сумма + + + Number + + 15 + 2 + + + + + ShowError + Use + Use + + + diff --git a/Проект_деньги/src/Documents/СоответствиеНоменклатуры/ObjectModule.bsl b/Проект_деньги/src/Documents/СоответствиеНоменклатуры/ObjectModule.bsl new file mode 100644 index 0000000..1c7649e --- /dev/null +++ b/Проект_деньги/src/Documents/СоответствиеНоменклатуры/ObjectModule.bsl @@ -0,0 +1,6 @@ +Процедура ПриУстановкеНовогоНомера(СтандартнаяОбработка, Префикс) + + Префикс = Обмен.ПолучитьПрефиксНомера(); + +КонецПроцедуры + diff --git a/Проект_деньги/src/Documents/СоответствиеНоменклатуры/СоответствиеНоменклатуры.mdo b/Проект_деньги/src/Documents/СоответствиеНоменклатуры/СоответствиеНоменклатуры.mdo new file mode 100644 index 0000000..c924921 --- /dev/null +++ b/Проект_деньги/src/Documents/СоответствиеНоменклатуры/СоответствиеНоменклатуры.mdo @@ -0,0 +1,72 @@ + + + + + + + + + + СоответствиеНоменклатуры + + ru + Соответствие номенклатуры + + true + Document.СоответствиеНоменклатуры.StandardAttribute.Number + DontUse + Use + Managed + Use + String + 9 + Variable + true + true + true + true + + + + + + ТоварыУслуги + + ru + Товары/услуги + + + НоменклатураСтрока + + ru + Номенклатура строка + + + String + + 250 + + + + + ShowError + Use + Use + + + Номенклатура + + ru + Номенклатура + + + CatalogRef.Номенклатура + + + + ShowError + Use + Use + + + diff --git a/Проект_деньги/src/Enums/ВидыНоменклатуры/ВидыНоменклатуры.mdo b/Проект_деньги/src/Enums/ВидыНоменклатуры/ВидыНоменклатуры.mdo new file mode 100644 index 0000000..4b10509 --- /dev/null +++ b/Проект_деньги/src/Enums/ВидыНоменклатуры/ВидыНоменклатуры.mdo @@ -0,0 +1,36 @@ + + + + + + + + ВидыНоменклатуры + + ru + Виды номенклатуры + + true + BothWays + + Товар + + ru + Товар + + + + Услуга + + ru + Услуга + + + + КУ + + ru + К/у + + + diff --git a/Проект_деньги/src/Enums/Месяцы/Месяцы.mdo b/Проект_деньги/src/Enums/Месяцы/Месяцы.mdo new file mode 100644 index 0000000..d5c2b75 --- /dev/null +++ b/Проект_деньги/src/Enums/Месяцы/Месяцы.mdo @@ -0,0 +1,115 @@ + + + + + + + + Месяцы + + ru + Месяцы + + + Use + Order + + Use + + + + + Use + Ref + + Use + + + + true + BothWays + + Январь + + ru + Январь + + + + Февраль + + ru + Февраль + + + + Март + + ru + Март + + + + Апрель + + ru + Апрель + + + + Май + + ru + Май + + + + Июнь + + ru + Июнь + + + + Июль + + ru + Июль + + + + Август + + ru + Август + + + + Сентябрь + + ru + Сентябрь + + + + Октябрь + + ru + Октябрь + + + + Ноябрь + + ru + Ноябрь + + + + Декабрь + + ru + Декабрь + + + diff --git a/Проект_деньги/src/Enums/ПериодыПланирования/ПериодыПланирования.mdo b/Проект_деньги/src/Enums/ПериодыПланирования/ПериодыПланирования.mdo new file mode 100644 index 0000000..2c94477 --- /dev/null +++ b/Проект_деньги/src/Enums/ПериодыПланирования/ПериодыПланирования.mdo @@ -0,0 +1,29 @@ + + + + + + + + ПериодыПланирования + + ru + Периоды планирования + + true + BothWays + + НаМесяц + + ru + На месяц + + + + НаГод + + ru + На год + + + diff --git a/Проект_деньги/src/Enums/ТипыПлатежей/ТипыПлатежей.mdo b/Проект_деньги/src/Enums/ТипыПлатежей/ТипыПлатежей.mdo new file mode 100644 index 0000000..5b56dbc --- /dev/null +++ b/Проект_деньги/src/Enums/ТипыПлатежей/ТипыПлатежей.mdo @@ -0,0 +1,29 @@ + + + + + + + + ТипыПлатежей + + ru + Типы платежей + + true + BothWays + + Аннуететный + + ru + Аннуететный + + + + Дифференцируемый + + ru + Дифференцируемый + + + diff --git a/Проект_деньги/src/EventSubscriptions/ОбменЗарегистрироватьИзменения/ОбменЗарегистрироватьИзменения.mdo b/Проект_деньги/src/EventSubscriptions/ОбменЗарегистрироватьИзменения/ОбменЗарегистрироватьИзменения.mdo new file mode 100644 index 0000000..82ea9c9 --- /dev/null +++ b/Проект_деньги/src/EventSubscriptions/ОбменЗарегистрироватьИзменения/ОбменЗарегистрироватьИзменения.mdo @@ -0,0 +1,19 @@ + + + ОбменЗарегистрироватьИзменения + + ru + Обмен зарегистрировать изменения + + + CatalogObject.Счета + CatalogObject.ЕдиницыИзмерений + CatalogObject.Банки + CatalogObject.Номенклатура + CatalogObject.Пользователи + CatalogObject.ВидыДоходов + CatalogObject.Валюты + + BeforeWrite + CommonModule.Обмен.ОбменЗарегистрироватьИзменения + diff --git a/Проект_деньги/src/EventSubscriptions/ОбменЗарегистрироватьИзмененияДокумента/ОбменЗарегистрироватьИзмененияДокумента.mdo b/Проект_деньги/src/EventSubscriptions/ОбменЗарегистрироватьИзмененияДокумента/ОбменЗарегистрироватьИзмененияДокумента.mdo new file mode 100644 index 0000000..eb16afa --- /dev/null +++ b/Проект_деньги/src/EventSubscriptions/ОбменЗарегистрироватьИзмененияДокумента/ОбменЗарегистрироватьИзмененияДокумента.mdo @@ -0,0 +1,22 @@ + + + ОбменЗарегистрироватьИзмененияДокумента + + ru + Обмен зарегистрировать изменения документа + + + DocumentObject.ВводНачальныхОстатков + DocumentObject.Продажи + DocumentObject.Покупки + DocumentObject.КоммунальныеПлатежи + DocumentObject.Желания + DocumentObject.ПеремещениеСнятиеДенежныхСредств + DocumentObject.Доходы + DocumentObject.Вложения + DocumentObject.СоответствиеНоменклатуры + DocumentObject.ПланированиеБюджета + + BeforeWrite + CommonModule.Обмен.ОбменЗарегистрироватьИзмененияДокумента + diff --git a/Проект_деньги/src/EventSubscriptions/ПередЗаписьюДокумента/ПередЗаписьюДокумента.mdo b/Проект_деньги/src/EventSubscriptions/ПередЗаписьюДокумента/ПередЗаписьюДокумента.mdo new file mode 100644 index 0000000..ce737a7 --- /dev/null +++ b/Проект_деньги/src/EventSubscriptions/ПередЗаписьюДокумента/ПередЗаписьюДокумента.mdo @@ -0,0 +1,18 @@ + + + ПередЗаписьюДокумента + + ru + Перед записью документа + + + DocumentObject.Продажи + DocumentObject.Покупки + DocumentObject.КоммунальныеПлатежи + DocumentObject.Желания + DocumentObject.ПеремещениеСнятиеДенежныхСредств + DocumentObject.Доходы + + BeforeWrite + CommonModule.ОбщегоНазначенияКлиентСервер.ЗаполнитьОтветственного + diff --git a/Проект_деньги/src/ExchangePlans/Мобильные/Forms/ФормаУзла/Form.form b/Проект_деньги/src/ExchangePlans/Мобильные/Forms/ФормаУзла/Form.form new file mode 100644 index 0000000..1b78245 --- /dev/null +++ b/Проект_деньги/src/ExchangePlans/Мобильные/Forms/ФормаУзла/Form.form @@ -0,0 +1,272 @@ + + + + Код + 1 + true + true + + true + + + Объект.Code + + + КодРасширеннаяПодсказка + 3 + Label + true + true + + Left + + + + КодКонтекстноеМеню + 2 + true + + InputField + EnterOnInput + true + Left + true + + true + true + true + true + true + true + + + + Наименование + 4 + true + true + + true + + + Объект.Description + + + НаименованиеРасширеннаяПодсказка + 6 + Label + true + true + + Left + + + + НаименованиеКонтекстноеМеню + 5 + true + + InputField + EnterOnInput + true + Left + true + + true + true + true + true + true + true + + + + ЭтотУзел + 7 + true + true + + true + + + Объект.ThisNode + + + ЭтотУзелРасширеннаяПодсказка + 9 + Label + true + true + + Left + + + + ЭтотУзелКонтекстноеМеню + 8 + true + + CheckBoxField + EnterOnInput + true + Left + true + + + + НомерОтправленного + 10 + true + true + + true + + + Объект.SentNo + + + НомерОтправленногоРасширеннаяПодсказка + 12 + Label + true + true + + Left + + + + НомерОтправленногоКонтекстноеМеню + 11 + true + + InputField + EnterOnInput + true + Left + true + + true + true + true + true + true + true + + + + НомерПринятого + 13 + true + true + + true + + + Объект.ReceivedNo + + + НомерПринятогоРасширеннаяПодсказка + 15 + Label + true + true + + Left + + + + НомерПринятогоКонтекстноеМеню + 14 + true + + InputField + EnterOnInput + true + Left + true + + true + true + true + true + true + true + + + + Пользователь + 16 + true + true + + true + + + Объект.Пользователь + + + ПользовательРасширеннаяПодсказка + 18 + Label + true + true + + Left + + + + ПользовательКонтекстноеМеню + 17 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + + + + ФормаКоманднаяПанель + -1 + Left + true + + LockOwnerWindow + true + true + true + Vertical + true + true + true + true + true + + Объект + 1 + + ExchangePlanObject.Мобильные + + + true + + + true + +
true
+ true +
+ + + + + +
diff --git a/Проект_деньги/src/ExchangePlans/Мобильные/ObjectModule.bsl b/Проект_деньги/src/ExchangePlans/Мобильные/ObjectModule.bsl new file mode 100644 index 0000000..45616d6 --- /dev/null +++ b/Проект_деньги/src/ExchangePlans/Мобильные/ObjectModule.bsl @@ -0,0 +1,204 @@ +Процедура ЗаписатьСообщениеСИзменениями(Каталог) Экспорт + + Сообщение = Новый СообщениеПользователю; + Сообщение.Текст = "-------- Выгрузка в узел " + Строка(ЭтотОбъект) + " ------------"; + Сообщение.Сообщить(); + + // Сформировать имя временного файла. + #Если МобильноеПриложениеКлиент Тогда + ИмяФайла = Каталог + "Message" + СокрЛП(ПланыОбмена.Мобильные.ЭтотУзел().Код) + "_" + СокрЛП(Ссылка.Код) + ".xml"; + #Иначе + ИмяФайла = Каталог + ?(Прав(Каталог, 1) = "\", "", "\") + "Message" + СокрЛП(ПланыОбмена.Мобильные.ЭтотУзел().Код) + "_" + СокрЛП(Ссылка.Код) + ".xml"; + #КонецЕсли + + ЗаписатьСообщениеСИзменениямиВФайл(ИмяФайла); + + Сообщение.Текст = "-------- Конец выгрузки ------------"; + Сообщение.Сообщить(); + +КонецПроцедуры + +Процедура ЗаписатьСообщениеСИзменениямиВФайл(ИмяФайла) Экспорт + + // Создать объект записи XML + // *** ЗаписьXML-документов. + ЗаписьXML = Новый ЗаписьXML; + ЗаписьXML.ОткрытьФайл(ИмяФайла); + ЗаписьXML.ЗаписатьОбъявлениеXML(); + + // *** Инфраструктура сообщений. + ЗаписьСообщения = ПланыОбмена.СоздатьЗаписьСообщения(); + ЗаписьСообщения.НачатьЗапись(ЗаписьXML, Ссылка); + Сообщение = Новый СообщениеПользователю; + Сообщение.Текст = " Номер сообщения: " + ЗаписьСообщения.НомерСообщения; + Сообщение.Сообщить(); + + // Получить выборку измененных данных + // *** Механизм регистрации изменений. + ВыборкаИзменений = ПланыОбмена.ВыбратьИзменения(ЗаписьСообщения.Получатель,ЗаписьСообщения.НомерСообщения); + Пока ВыборкаИзменений.Следующий() Цикл + Данные = ВыборкаИзменений.Получить(); + + // Записать данные в сообщение *** XML-сериализация. + ЗаписатьXML(ЗаписьXML, Данные); + КонецЦикла; + + ЗаписьСообщения.ЗакончитьЗапись(); + ЗаписьXML.Закрыть(); + +КонецПроцедуры + +Функция ПрочитатьСообщениеСИзменениями(Каталог) Экспорт + + // Сформировать имя файла. + #Если МобильноеПриложениеКлиент Тогда + ИмяФайла = Каталог + "Message" + СокрЛП(Ссылка.Код) + "_" + СокрЛП(ПланыОбмена.Мобильные.ЭтотУзел().Код) + ".xml"; + #Иначе + ИмяФайла = Каталог + ?(Прав(Каталог, 1) = "\", "", "\") + "Message" + СокрЛП(Ссылка.Код) + "_" + СокрЛП(ПланыОбмена.Мобильные.ЭтотУзел().Код) + ".xml"; + #КонецЕсли + + МассивСообщений = Новый Массив; + + Результат = ПрочитатьСообщениеСИзменениямиФайл(ИмяФайла, МассивСообщений); + + Сообщение = Новый СообщениеПользователю; + Для каждого Текст Из МассивСообщений Цикл + Сообщение.Текст = Текст; + Сообщение.Сообщить(); + КонецЦикла; + + + Возврат Результат; + +КонецФункции + +Функция ПрочитатьСообщениеСИзменениямиФайл(ИмяФайла, Сообщения, УдалитьФайлы = Ложь) Экспорт + + //Инициализируем результат + Результат = Новый Структура("МассивДокументов", Новый Массив); + МассивДокументов = Новый Массив; + + Файл = Новый Файл(ИмяФайла); + Если Не Файл.Существует() Тогда + Возврат Результат; + КонецЕсли; + + // *** Чтение документов XML + // Попытаться открыть файл. + ЧтениеXML = Новый ЧтениеXML; + Попытка + ЧтениеXML.ОткрытьФайл(ИмяФайла); + Исключение + Сообщения.Добавить("Невозможно открыть файл обмена данными."); + Возврат Результат; + КонецПопытки; + + Сообщения.Добавить("-------- Загрузка из " + Строка(ЭтотОбъект) + " ------------"); + Сообщения.Добавить(" – Считывается файл " + ИмяФайла); + + // Загрузить из найденного файла + // *** Инфраструктура сообщений. + ЧтениеСообщения = ПланыОбмена.СоздатьЧтениеСообщения(); + + // Читать заголовок сообщения обмена данными – файла XML. + ЧтениеСообщения.НачатьЧтение(ЧтениеXML); + + // Сообщение предназначено не для этого узла. + Если ЧтениеСообщения.Отправитель <> Ссылка Тогда + ВызватьИсключение "Неверный узел"; + КонецЕсли; + + // Удаляем регистрацию изменений для узла отправителя сообщения. + // *** Служба регистрации изменений. + ПланыОбмена.УдалитьРегистрациюИзменений(ЧтениеСообщения.Отправитель, ЧтениеСообщения.НомерПринятого); + + // + // Читаем данные из сообщения *** XML-сериализация. + Пока ВозможностьЧтенияXML(ЧтениеXML) Цикл + + // Читаем очередное значение. + Данные = ПрочитатьXML(ЧтениеXML); + + Попытка //временное решение + ТипМетаданных = СправочникИлиДокумент(Данные.Метаданные().ПолноеИмя()); + Исключение + Продолжить; + КонецПопытки; + + //Записать полученные данные. + Данные.ОбменДанными.Отправитель = ЧтениеСообщения.Отправитель; + Данные.ОбменДанными.Загрузка = Истина; + Данные.Записать(); + Если ТипМетаданных.Документ Тогда + Результат.МассивДокументов.Добавить(Данные.Ссылка); + КонецЕсли; + КонецЦикла; + + ЧтениеСообщения.ЗакончитьЧтение(); + ЧтениеXML.Закрыть(); + + Если УдалитьФайлы Тогда + УдалитьФайлы(ИмяФайла); + КонецЕсли; + + Сообщения.Добавить("-------- Конец загрузки ------------"); + + Возврат Результат; + +КонецФункции + +Функция СправочникИлиДокумент(ИмяМетаданных) + + МассивИмен = СтрРазделить(ИмяМетаданных, "."); + + Результат = Новый Структура("Документ, Справочник", МассивИмен[0] = "Документ", МассивИмен[0] = "Справочник"); + + Возврат Результат; + +КонецФункции + +Процедура ОбработатьСправочникНоменклатуры(Данные) + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | Номенклатура.Ссылка КАК Ссылка, + | Номенклатура.ВерсияДанных КАК ВерсияДанных, + | Номенклатура.ПометкаУдаления КАК ПометкаУдаления, + | Номенклатура.Родитель КАК Родитель, + | Номенклатура.ЭтоГруппа КАК ЭтоГруппа, + | Номенклатура.Код КАК Код, + | Номенклатура.Наименование КАК Наименование, + | Номенклатура.ЕдиницаИзмерения КАК ЕдиницаИзмерения, + | Номенклатура.ВидНоменклатуры КАК ВидНоменклатуры, + | Номенклатура.Предопределенный КАК Предопределенный, + | Номенклатура.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных + |ИЗ + | Справочник.Номенклатура КАК Номенклатура + |ГДЕ + | Номенклатура.Код = &Код"; + + Запрос.УстановитьПараметр("Код", Данные.Код); + РезультатЗапроса = Запрос.Выполнить(); + Если РезультатЗапроса.Пустой() Тогда + Возврат; + КонецЕсли; + Выборка= РезультатЗапроса.Выбрать(); + + Пока Выборка.Следующий() Цикл + // Вставить обработку выборки ВыборкаДетальныеЗаписи + КонецЦикла; + + +КонецПроцедуры + +Процедура ОбработатьСправочникПредопределенные(Данные) + +КонецПроцедуры + +Процедура ОбработатьДокументы(Данные) + + + +КонецПроцедуры + diff --git a/Проект_деньги/src/ExchangePlans/Мобильные/Мобильные.mdo b/Проект_деньги/src/ExchangePlans/Мобильные/Мобильные.mdo new file mode 100644 index 0000000..7facf7f --- /dev/null +++ b/Проект_деньги/src/ExchangePlans/Мобильные/Мобильные.mdo @@ -0,0 +1,183 @@ + + + + + + + + + + Мобильные + + ru + Мобильные устройства + + true + ExchangePlan.Мобильные.StandardAttribute.Description + ExchangePlan.Мобильные.StandardAttribute.Code + DontUse + + Use + ThisNode + + Use + + + + + Use + ReceivedNo + + Use + + + + + Use + SentNo + + Use + + + + + Use + Ref + + Use + + + + + Use + DeletionMark + + Use + + + + + Use + Description + + ShowError + Use + + + + + Use + Code + + ShowError + Use + + + + DontUse + Managed + Use + 9 + Variable + 40 + + Document.Продажи + + + Catalog.Счета + + + Catalog.ВидыДоходов + + + Document.КоммунальныеПлатежи + + + InformationRegister.КлючевыеСлова + + + InformationRegister.КурсыВалют + + + InformationRegister.ЦеныКоммунальныхПлатежей + + + Catalog.Номенклатура + + + Document.Доходы + + + Catalog.ЕдиницыИзмерений + + + Document.Вложения + + + InformationRegister.ШтрихКоды + + + Catalog.Банки + + + Document.ПланированиеБюджета + + + InformationRegister.ПланированиеБюджетаНаМесяц + + + Document.Покупки + + + Catalog.Валюты + + + Document.ВводНачальныхОстатков + + + Document.Желания + + + Document.СоответствиеНоменклатуры + + + Document.ПеремещениеСнятиеДенежныхСредств + + + InformationRegister.ПланированиеБюджетаНаГод + + + InformationRegister.СоответствиеНоменклатуры + + + Catalog.Пользователи + + AsDescription + InDialog + BothWays + ExchangePlan.Мобильные.Form.ФормаУзла + + Пользователь + + ru + Пользователь + + + CatalogRef.Пользователи + + + + + Use + Use + + + ФормаУзла + + ru + Форма узла + + PersonalComputer + MobileDevice + + diff --git a/Проект_деньги/src/HTTPServices/requst/Module.bsl b/Проект_деньги/src/HTTPServices/requst/Module.bsl new file mode 100644 index 0000000..7c3826e --- /dev/null +++ b/Проект_деньги/src/HTTPServices/requst/Module.bsl @@ -0,0 +1,12 @@ + +Функция requstGET(Запрос) + + Возврат Обмен.requstGET(Запрос); + +КонецФункции + +Функция requstPOST(Запрос) + + Возврат Обмен.requstPOST(Запрос); + +КонецФункции diff --git a/Проект_деньги/src/HTTPServices/requst/requst.mdo b/Проект_деньги/src/HTTPServices/requst/requst.mdo new file mode 100644 index 0000000..b6a05c2 --- /dev/null +++ b/Проект_деньги/src/HTTPServices/requst/requst.mdo @@ -0,0 +1,36 @@ + + + requst + + ru + Requst + + exchange + AutoUse + 20 + + requst + + ru + Requst + + + + GET + + ru + GET + + requstGET + + + POST + + ru + POST + + POST + requstPOST + + + diff --git a/Проект_деньги/src/InformationRegisters/КлючевыеСлова/КлючевыеСлова.mdo b/Проект_деньги/src/InformationRegisters/КлючевыеСлова/КлючевыеСлова.mdo new file mode 100644 index 0000000..8add0f3 --- /dev/null +++ b/Проект_деньги/src/InformationRegisters/КлючевыеСлова/КлючевыеСлова.mdo @@ -0,0 +1,59 @@ + + + + + + + + + + + + КлючевыеСлова + + ru + Ключевые слова + + true + InDialog + Managed + + Номенклатура + + ru + Номенклатура + + + CatalogRef.Номенклатура + + + + ShowError + Use + Use + true + + + + КлючевоеСлово + + ru + Ключевое слово + + + String + + 250 + + + + + ShowError + Use + Use + true + + true + true + + diff --git a/Проект_деньги/src/InformationRegisters/КурсыВалют/КурсыВалют.mdo b/Проект_деньги/src/InformationRegisters/КурсыВалют/КурсыВалют.mdo new file mode 100644 index 0000000..34067fb --- /dev/null +++ b/Проект_деньги/src/InformationRegisters/КурсыВалют/КурсыВалют.mdo @@ -0,0 +1,75 @@ + + + + + + + + + + + + КурсыВалют + + ru + Курсы валют + + true + InDialog + Day + true + Managed + + Курс + + ru + Курс + + + Number + + 10 + 4 + + + + + Use + Use + + + + Кратность + + ru + Кратность + + + Number + + 10 + + + + + Use + Use + + + + Валюта + + ru + Валюта + + + CatalogRef.Валюты + + + + Use + Use + + true + + diff --git a/Проект_деньги/src/InformationRegisters/ПланированиеБюджетаНаГод/ПланированиеБюджетаНаГод.mdo b/Проект_деньги/src/InformationRegisters/ПланированиеБюджетаНаГод/ПланированиеБюджетаНаГод.mdo new file mode 100644 index 0000000..2183191 --- /dev/null +++ b/Проект_деньги/src/InformationRegisters/ПланированиеБюджетаНаГод/ПланированиеБюджетаНаГод.mdo @@ -0,0 +1,91 @@ + + + + + + + + + + + + ПланированиеБюджетаНаГод + + ru + Планирование бюджета на год + + true + InDialog + + Use + Active + + Use + + + + + Use + LineNumber + + Use + + + + + Use + Recorder + + Use + + + + + Use + Period + + ShowError + Use + + + + Year + RecorderSubordinate + Managed + + Сумма + + ru + Сумма + + + Number + + 15 + 2 + + + + + Use + Use + + + + СтатьиРасходов + + ru + Статьи расходов + + + CatalogRef.Номенклатура + + + + Folders + Use + Use + + true + + diff --git a/Проект_деньги/src/InformationRegisters/ПланированиеБюджетаНаМесяц/ПланированиеБюджетаНаМесяц.mdo b/Проект_деньги/src/InformationRegisters/ПланированиеБюджетаНаМесяц/ПланированиеБюджетаНаМесяц.mdo new file mode 100644 index 0000000..2cd0197 --- /dev/null +++ b/Проект_деньги/src/InformationRegisters/ПланированиеБюджетаНаМесяц/ПланированиеБюджетаНаМесяц.mdo @@ -0,0 +1,58 @@ + + + + + + + + + + + + ПланированиеБюджетаНаМесяц + + ru + Планирование бюджета на месяц + + true + InDialog + Month + RecorderSubordinate + Managed + + Сумма + + ru + Сумма + + + Number + + 15 + 2 + + + + + Use + Use + + + + СтатьиРасходов + + ru + Статьи расходов + + + CatalogRef.Номенклатура + + + + Folders + Use + Use + + true + + diff --git a/Проект_деньги/src/InformationRegisters/СоответствиеНоменклатуры/СоответствиеНоменклатуры.mdo b/Проект_деньги/src/InformationRegisters/СоответствиеНоменклатуры/СоответствиеНоменклатуры.mdo new file mode 100644 index 0000000..0e16592 --- /dev/null +++ b/Проект_деньги/src/InformationRegisters/СоответствиеНоменклатуры/СоответствиеНоменклатуры.mdo @@ -0,0 +1,54 @@ + + + + + + + + + + + + СоответствиеНоменклатуры + + ru + Соответствие номенклатуры + + true + InDialog + Managed + + Номенклатура + + ru + Номенклатура + + + CatalogRef.Номенклатура + + + + Use + Use + + + + НоменклатураСтрока + + ru + Номенклатура строка + + + String + + 150 + + + + + Use + Use + + true + + diff --git a/Проект_деньги/src/InformationRegisters/ЦеныКоммунальныхПлатежей/Forms/ФормаЗаписи/Form.form b/Проект_деньги/src/InformationRegisters/ЦеныКоммунальныхПлатежей/Forms/ФормаЗаписи/Form.form new file mode 100644 index 0000000..f20ef34 --- /dev/null +++ b/Проект_деньги/src/InformationRegisters/ЦеныКоммунальныхПлатежей/Forms/ФормаЗаписи/Form.form @@ -0,0 +1,163 @@ + + + + Период + 1 + true + true + + true + + + Запись.Period + + + ПериодРасширеннаяПодсказка + 3 + Label + true + true + + Left + + + + ПериодКонтекстноеМеню + 2 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + + + + Номенклатура + 4 + true + true + + true + + + Запись.Номенклатура + + + НоменклатураРасширеннаяПодсказка + 6 + Label + true + true + + Left + + + + НоменклатураКонтекстноеМеню + 5 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + + + + Цена + 7 + true + true + + true + + + Запись.Цена + + + ЦенаРасширеннаяПодсказка + 9 + Label + true + true + + Left + + + + ЦенаКонтекстноеМеню + 8 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + + + + ФормаКоманднаяПанель + -1 + Left + true + + + OnCreateAtServer + ПриСозданииНаСервере + + LockOwnerWindow + true + true + true + Vertical + true + true + true + true + true + + Запись + 1 + + InformationRegisterRecordManager.ЦеныКоммунальныхПлатежей + + + true + + + true + +
true
+ true +
+ + + + + +
diff --git a/Проект_деньги/src/InformationRegisters/ЦеныКоммунальныхПлатежей/Forms/ФормаЗаписи/Module.bsl b/Проект_деньги/src/InformationRegisters/ЦеныКоммунальныхПлатежей/Forms/ФормаЗаписи/Module.bsl new file mode 100644 index 0000000..c264008 --- /dev/null +++ b/Проект_деньги/src/InformationRegisters/ЦеныКоммунальныхПлатежей/Forms/ФормаЗаписи/Module.bsl @@ -0,0 +1,13 @@ + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.Свойство("Период") Тогда + Элементы.Номенклатура.Доступность = Ложь; + Элементы.Период.Доступность = Ложь; + Запись.Период = НачалоМесяца(Параметры.Период); + Запись.Номенклатура = Параметры.Номенклатура; + Запись.Цена = Параметры.Цена; + КонецЕсли; + +КонецПроцедуры diff --git a/Проект_деньги/src/InformationRegisters/ЦеныКоммунальныхПлатежей/RecordSetModule.bsl b/Проект_деньги/src/InformationRegisters/ЦеныКоммунальныхПлатежей/RecordSetModule.bsl new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/Проект_деньги/src/InformationRegisters/ЦеныКоммунальныхПлатежей/RecordSetModule.bsl @@ -0,0 +1 @@ + diff --git a/Проект_деньги/src/InformationRegisters/ЦеныКоммунальныхПлатежей/ЦеныКоммунальныхПлатежей.mdo b/Проект_деньги/src/InformationRegisters/ЦеныКоммунальныхПлатежей/ЦеныКоммунальныхПлатежей.mdo new file mode 100644 index 0000000..5fd0bb1 --- /dev/null +++ b/Проект_деньги/src/InformationRegisters/ЦеныКоммунальныхПлатежей/ЦеныКоммунальныхПлатежей.mdo @@ -0,0 +1,69 @@ + + + + + + + + + + + + ЦеныКоммунальныхПлатежей + + ru + Цены коммунальных платежей + + true + InDialog + InformationRegister.ЦеныКоммунальныхПлатежей.Form.ФормаЗаписи + Month + true + Managed + + Цена + + ru + Цена + + + Number + + 15 + 2 + + + + + Use + Use + + + + Номенклатура + + ru + Номенклатура + + + CatalogRef.Номенклатура + + + + Use + Use + true + + true + true + + + ФормаЗаписи + + ru + Форма записи + + PersonalComputer + MobileDevice + + diff --git a/Проект_деньги/src/InformationRegisters/ШтрихКоды/ШтрихКоды.mdo b/Проект_деньги/src/InformationRegisters/ШтрихКоды/ШтрихКоды.mdo new file mode 100644 index 0000000..b3ed9c2 --- /dev/null +++ b/Проект_деньги/src/InformationRegisters/ШтрихКоды/ШтрихКоды.mdo @@ -0,0 +1,56 @@ + + + + + + + + + + + + ШтрихКоды + + ru + Штрих коды + + true + InDialog + Managed + + Владелец + + ru + Владелец + + + CatalogRef.Номенклатура + + + + ShowError + Use + Use + + + + ШтрихКод + + ru + Штрих код + + + String + + 200 + + + + + ShowError + Use + Use + + true + + diff --git a/Проект_деньги/src/Roles/ПолныеПрава/Rights.rights b/Проект_деньги/src/Roles/ПолныеПрава/Rights.rights new file mode 100644 index 0000000..11a60b5 --- /dev/null +++ b/Проект_деньги/src/Roles/ПолныеПрава/Rights.rights @@ -0,0 +1,6 @@ + + + true + true + false + diff --git a/Проект_деньги/src/Roles/ПолныеПрава/ПолныеПрава.mdo b/Проект_деньги/src/Roles/ПолныеПрава/ПолныеПрава.mdo new file mode 100644 index 0000000..06e3556 --- /dev/null +++ b/Проект_деньги/src/Roles/ПолныеПрава/ПолныеПрава.mdo @@ -0,0 +1,8 @@ + + + ПолныеПрава + + ru + Полные права + + diff --git a/Проект_деньги/src/Subsystems/Настройки/CommandInterface.cmi b/Проект_деньги/src/Subsystems/Настройки/CommandInterface.cmi new file mode 100644 index 0000000..f3965f7 --- /dev/null +++ b/Проект_деньги/src/Subsystems/Настройки/CommandInterface.cmi @@ -0,0 +1,39 @@ + + + + + InformationRegister.КлючевыеСлова.StandardCommand.OpenList + + true + + + + Constant.ВыводитьДиалогиВвода.StandardCommand.Open + + + + Constant.ОдинДокументРасходов.StandardCommand.Open + + + + Constant.ПерсональныйТокенQR.StandardCommand.Open + + + + Constant.ТекущийПользователь.StandardCommand.Open + + + + + + CommandGroup.РегистрыСведений + InformationRegister.КлючевыеСлова.StandardCommand.OpenList + + + + + CommandGroup.РегистрыСведений + InformationRegister.КлючевыеСлова.StandardCommand.OpenList + + + diff --git a/Проект_деньги/src/Subsystems/Настройки/Настройки.mdo b/Проект_деньги/src/Subsystems/Настройки/Настройки.mdo new file mode 100644 index 0000000..fbdd8a5 --- /dev/null +++ b/Проект_деньги/src/Subsystems/Настройки/Настройки.mdo @@ -0,0 +1,17 @@ + + + Настройки + + ru + Настройки + + true + true + Constant.ТекущийПользователь + Constant.ВыводитьДиалогиВвода + CommonForm.ФормаКонстант + Constant.ПерсональныйТокенQR + Constant.ОдинДокументРасходов + InformationRegister.КлючевыеСлова + Constant.СерверАдрес + diff --git a/Проект_деньги/src/Subsystems/НачальныеДанные/CommandInterface.cmi b/Проект_деньги/src/Subsystems/НачальныеДанные/CommandInterface.cmi new file mode 100644 index 0000000..bf3d38d --- /dev/null +++ b/Проект_деньги/src/Subsystems/НачальныеДанные/CommandInterface.cmi @@ -0,0 +1,129 @@ + + + + + Catalog.Банки.StandardCommand.OpenList + + true + + + + Catalog.Валюты.StandardCommand.OpenList + + true + + + + Catalog.ВидыДоходов.StandardCommand.OpenList + + true + + + + Catalog.ЕдиницыИзмерений.StandardCommand.OpenList + + true + + + + Catalog.Номенклатура.StandardCommand.OpenList + + true + + + + Catalog.Пользователи.StandardCommand.OpenList + + true + + + + Catalog.Счета.StandardCommand.OpenList + + true + + + + Document.ВводНачальныхОстатков.StandardCommand.OpenList + + true + + + + InformationRegister.КлючевыеСлова.StandardCommand.OpenList + + true + + + + InformationRegister.ЦеныКоммунальныхПлатежей.StandardCommand.OpenList + + true + + + + InformationRegister.ШтрихКоды.StandardCommand.OpenList + + true + + + + AccumulationRegister.ДенежныеСредства.StandardCommand.OpenList + + true + + + + + + CommandGroup.Справочники + Catalog.Банки.StandardCommand.OpenList + Catalog.Валюты.StandardCommand.OpenList + Catalog.ВидыДоходов.StandardCommand.OpenList + Catalog.ЕдиницыИзмерений.StandardCommand.OpenList + Catalog.Номенклатура.StandardCommand.OpenList + Catalog.Пользователи.StandardCommand.OpenList + Catalog.Счета.StandardCommand.OpenList + + + CommandGroup.Документы + Document.ВводНачальныхОстатков.StandardCommand.OpenList + + + CommandGroup.РегистрыСведений + InformationRegister.КлючевыеСлова.StandardCommand.OpenList + InformationRegister.ЦеныКоммунальныхПлатежей.StandardCommand.OpenList + InformationRegister.ШтрихКоды.StandardCommand.OpenList + + + CommandGroup.РегистрыНакопления + AccumulationRegister.ДенежныеСредства.StandardCommand.OpenList + + + + + CommandGroup.Справочники + Catalog.Банки.StandardCommand.OpenList + Catalog.Валюты.StandardCommand.OpenList + Catalog.ВидыДоходов.StandardCommand.OpenList + Catalog.ЕдиницыИзмерений.StandardCommand.OpenList + Catalog.Номенклатура.StandardCommand.OpenList + Catalog.Пользователи.StandardCommand.OpenList + Catalog.Счета.StandardCommand.OpenList + + + CommandGroup.Документы + Document.ВводНачальныхОстатков.StandardCommand.OpenList + + + CommandGroup.РегистрыСведений + InformationRegister.КлючевыеСлова.StandardCommand.OpenList + InformationRegister.ЦеныКоммунальныхПлатежей.StandardCommand.OpenList + InformationRegister.ШтрихКоды.StandardCommand.OpenList + + + CommandGroup.РегистрыНакопления + AccumulationRegister.ДенежныеСредства.StandardCommand.OpenList + + + diff --git a/Проект_деньги/src/Subsystems/НачальныеДанные/НачальныеДанные.mdo b/Проект_деньги/src/Subsystems/НачальныеДанные/НачальныеДанные.mdo new file mode 100644 index 0000000..4c9da04 --- /dev/null +++ b/Проект_деньги/src/Subsystems/НачальныеДанные/НачальныеДанные.mdo @@ -0,0 +1,28 @@ + + + НачальныеДанные + + ru + Начальные данные + + true + true + + CommonPicture.ИконкаДокументов + + CommonPicture.ИконкаДокументов + Document.ВводНачальныхОстатков + Catalog.Номенклатура + Catalog.Счета + Catalog.Банки + Catalog.ЕдиницыИзмерений + Catalog.Пользователи + Catalog.ВидыДоходов + Catalog.Валюты + Constant.ТекущийПользователь + Constant.ПерсональныйТокенQR + InformationRegister.ШтрихКоды + InformationRegister.ЦеныКоммунальныхПлатежей + InformationRegister.КлючевыеСлова + AccumulationRegister.ДенежныеСредства + diff --git a/Проект_деньги/src/Subsystems/Покупки/CommandInterface.cmi b/Проект_деньги/src/Subsystems/Покупки/CommandInterface.cmi new file mode 100644 index 0000000..f243c40 --- /dev/null +++ b/Проект_деньги/src/Subsystems/Покупки/CommandInterface.cmi @@ -0,0 +1,197 @@ + + + + + Catalog.Банки.StandardCommand.OpenList + + true + + + + Catalog.Валюты.StandardCommand.OpenList + + true + + + + Catalog.ВидыДоходов.StandardCommand.OpenList + + true + + + + Catalog.ЕдиницыИзмерений.StandardCommand.OpenList + + true + + + + Catalog.Номенклатура.StandardCommand.OpenList + + true + + + + Catalog.Счета.StandardCommand.OpenList + + true + + + + Document.Вложения.StandardCommand.OpenList + + true + + + + Document.Доходы.StandardCommand.OpenList + + true + + + + Document.КоммунальныеПлатежи.StandardCommand.OpenList + + true + + + + Document.ПеремещениеСнятиеДенежныхСредств.StandardCommand.OpenList + + true + + + + Document.Желания.StandardCommand.OpenList + + true + + + + Document.Покупки.StandardCommand.OpenList + + true + + + + InformationRegister.КлючевыеСлова.StandardCommand.OpenList + + true + + + + InformationRegister.КурсыВалют.StandardCommand.OpenList + + true + + + + InformationRegister.СоответствиеНоменклатуры.StandardCommand.OpenList + + true + + + + InformationRegister.ЦеныКоммунальныхПлатежей.StandardCommand.OpenList + + true + + + + InformationRegister.ШтрихКоды.StandardCommand.OpenList + + true + + + + AccumulationRegister.ДенежныеСредства.StandardCommand.OpenList + + true + + + + AccumulationRegister.Доходы.StandardCommand.OpenList + + true + + + + AccumulationRegister.Расходы.StandardCommand.OpenList + + true + + + + + + CommandGroup.Справочники + Catalog.Банки.StandardCommand.OpenList + Catalog.Валюты.StandardCommand.OpenList + Catalog.ВидыДоходов.StandardCommand.OpenList + Catalog.ЕдиницыИзмерений.StandardCommand.OpenList + Catalog.Номенклатура.StandardCommand.OpenList + Catalog.Счета.StandardCommand.OpenList + + + CommandGroup.Документы + Document.Вложения.StandardCommand.OpenList + Document.Доходы.StandardCommand.OpenList + Document.КоммунальныеПлатежи.StandardCommand.OpenList + Document.ПеремещениеСнятиеДенежныхСредств.StandardCommand.OpenList + Document.Желания.StandardCommand.OpenList + Document.Покупки.StandardCommand.OpenList + + + CommandGroup.РегистрыСведений + InformationRegister.КлючевыеСлова.StandardCommand.OpenList + InformationRegister.КурсыВалют.StandardCommand.OpenList + InformationRegister.СоответствиеНоменклатуры.StandardCommand.OpenList + InformationRegister.ЦеныКоммунальныхПлатежей.StandardCommand.OpenList + InformationRegister.ШтрихКоды.StandardCommand.OpenList + + + CommandGroup.РегистрыНакопления + AccumulationRegister.ДенежныеСредства.StandardCommand.OpenList + AccumulationRegister.Доходы.StandardCommand.OpenList + AccumulationRegister.Расходы.StandardCommand.OpenList + + + + + CommandGroup.Справочники + Catalog.Банки.StandardCommand.OpenList + Catalog.Валюты.StandardCommand.OpenList + Catalog.ВидыДоходов.StandardCommand.OpenList + Catalog.ЕдиницыИзмерений.StandardCommand.OpenList + Catalog.Номенклатура.StandardCommand.OpenList + Catalog.Счета.StandardCommand.OpenList + + + CommandGroup.Документы + Document.Вложения.StandardCommand.OpenList + Document.Доходы.StandardCommand.OpenList + Document.КоммунальныеПлатежи.StandardCommand.OpenList + Document.ПеремещениеСнятиеДенежныхСредств.StandardCommand.OpenList + Document.Желания.StandardCommand.OpenList + Document.Покупки.StandardCommand.OpenList + + + CommandGroup.РегистрыСведений + InformationRegister.КлючевыеСлова.StandardCommand.OpenList + InformationRegister.КурсыВалют.StandardCommand.OpenList + InformationRegister.СоответствиеНоменклатуры.StandardCommand.OpenList + InformationRegister.ЦеныКоммунальныхПлатежей.StandardCommand.OpenList + InformationRegister.ШтрихКоды.StandardCommand.OpenList + + + CommandGroup.РегистрыНакопления + AccumulationRegister.ДенежныеСредства.StandardCommand.OpenList + AccumulationRegister.Доходы.StandardCommand.OpenList + AccumulationRegister.Расходы.StandardCommand.OpenList + + + ActionsPanelTools + Constant.ТекущийПользователь.StandardCommand.Open + + + diff --git a/Проект_деньги/src/Subsystems/Покупки/Покупки.mdo b/Проект_деньги/src/Subsystems/Покупки/Покупки.mdo new file mode 100644 index 0000000..d4d6d8e --- /dev/null +++ b/Проект_деньги/src/Subsystems/Покупки/Покупки.mdo @@ -0,0 +1,35 @@ + + + Покупки + + ru + Покупки + + true + true + + CommonPicture.ИконкаСправочники + + Catalog.Счета + Catalog.Банки + Catalog.Номенклатура + Catalog.ЕдиницыИзмерений + Catalog.ВидыДоходов + CommonPicture.ИконкаСправочники + InformationRegister.ШтрихКоды + Constant.ТекущийПользователь + InformationRegister.СоответствиеНоменклатуры + Catalog.Валюты + InformationRegister.КурсыВалют + Document.Вложения + Document.Покупки + Document.КоммунальныеПлатежи + Document.ПеремещениеСнятиеДенежныхСредств + Document.Доходы + Document.Желания + AccumulationRegister.ДенежныеСредства + AccumulationRegister.Доходы + AccumulationRegister.Расходы + InformationRegister.ЦеныКоммунальныхПлатежей + InformationRegister.КлючевыеСлова + diff --git a/Проект_деньги/src/Subsystems/Продажи/CommandInterface.cmi b/Проект_деньги/src/Subsystems/Продажи/CommandInterface.cmi new file mode 100644 index 0000000..6596a2a --- /dev/null +++ b/Проект_деньги/src/Subsystems/Продажи/CommandInterface.cmi @@ -0,0 +1,97 @@ + + + + + Catalog.Банки.StandardCommand.OpenList + + true + + + + Catalog.Валюты.StandardCommand.OpenList + + true + + + + Catalog.ЕдиницыИзмерений.StandardCommand.OpenList + + true + + + + Catalog.Номенклатура.StandardCommand.OpenList + + true + + + + Catalog.Счета.StandardCommand.OpenList + + true + + + + Document.Продажи.StandardCommand.OpenList + + true + + + + InformationRegister.КлючевыеСлова.StandardCommand.OpenList + + true + + + + AccumulationRegister.Продажи.StandardCommand.OpenList + + true + + + + + + CommandGroup.Справочники + Catalog.Банки.StandardCommand.OpenList + Catalog.Валюты.StandardCommand.OpenList + Catalog.ЕдиницыИзмерений.StandardCommand.OpenList + Catalog.Номенклатура.StandardCommand.OpenList + Catalog.Счета.StandardCommand.OpenList + + + CommandGroup.Документы + Document.Продажи.StandardCommand.OpenList + + + CommandGroup.РегистрыСведений + InformationRegister.КлючевыеСлова.StandardCommand.OpenList + + + CommandGroup.РегистрыНакопления + AccumulationRegister.Продажи.StandardCommand.OpenList + + + + + CommandGroup.Справочники + Catalog.Банки.StandardCommand.OpenList + Catalog.Валюты.StandardCommand.OpenList + Catalog.ЕдиницыИзмерений.StandardCommand.OpenList + Catalog.Номенклатура.StandardCommand.OpenList + Catalog.Счета.StandardCommand.OpenList + + + CommandGroup.Документы + Document.Продажи.StandardCommand.OpenList + + + CommandGroup.РегистрыСведений + InformationRegister.КлючевыеСлова.StandardCommand.OpenList + + + CommandGroup.РегистрыНакопления + AccumulationRegister.Продажи.StandardCommand.OpenList + + + diff --git a/Проект_деньги/src/Subsystems/Продажи/Продажи.mdo b/Проект_деньги/src/Subsystems/Продажи/Продажи.mdo new file mode 100644 index 0000000..7a5db93 --- /dev/null +++ b/Проект_деньги/src/Subsystems/Продажи/Продажи.mdo @@ -0,0 +1,18 @@ + + + Продажи + + ru + Продажи + + true + true + Catalog.Номенклатура + Catalog.Банки + Catalog.Счета + Catalog.ЕдиницыИзмерений + Catalog.Валюты + Document.Продажи + InformationRegister.КлючевыеСлова + AccumulationRegister.Продажи + diff --git a/Проект_деньги/src/Subsystems/Сервис/Сервис.mdo b/Проект_деньги/src/Subsystems/Сервис/Сервис.mdo new file mode 100644 index 0000000..15a9ccc --- /dev/null +++ b/Проект_деньги/src/Subsystems/Сервис/Сервис.mdo @@ -0,0 +1,20 @@ + + + Сервис + + ru + Сервис + + true + true + ExchangePlan.Мобильные + DataProcessor.РегистрацияИзмененийДляОбменаДанными + DataProcessor.ПровестиВсеДокументы + DataProcessor.ВыполнитьОбработчикиОбновления + DataProcessor.ОбменДанными + DataProcessor.Отчеты + DataProcessor.КонкуляторБанковскогоЗайма + DataProcessor.КонкуляторДоходности + DataProcessor.ОчиститьДанные + HTTPService.requst +