From 1afb299d68f6d5e8b357343ae79a3fcb62d6871d Mon Sep 17 00:00:00 2001 From: NikDizell Date: Sat, 4 Apr 2026 08:41:14 +0300 Subject: [PATCH] =?UTF-8?q?=D0=98=D0=BD=D0=B8=D1=86=D0=B8=D0=B0=D0=BB?= =?UTF-8?q?=D0=B8=D0=B7=D0=B0=D1=86=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Проект_деньги/.project | 18 + .../.settings/org.eclipse.core.resources.prefs | 2 + Проект_деньги/DT-INF/PROJECT.PMF | 2 + .../Forms/ФормаОстатков/Attributes/Объект/ExtInfo/ListSettings.dcss | 16 + .../ДенежныеСредства/Forms/ФормаОстатков/Form.form | 436 ++ .../ДенежныеСредства/Forms/ФормаОстатков/Module.bsl | 87 + .../ДенежныеСредства/ДенежныеСредства.mdo | 75 + .../src/AccumulationRegisters/Доходы/Доходы.mdo | 86 + .../src/AccumulationRegisters/Продажи/Продажи.mdo | 85 + .../src/AccumulationRegisters/Расходы/Расходы.mdo | 85 + .../src/Catalogs/Банки/ObjectModule.bsl | 6 + Проект_деньги/src/Catalogs/Банки/Банки.mdo | 37 + Проект_деньги/src/Catalogs/Валюты/Валюты.mdo | 41 + .../Forms/ФормаВыбора/Attributes/Список/ExtInfo/ListSettings.dcss | 17 + .../src/Catalogs/ВидыДоходов/Forms/ФормаВыбора/Form.form | 258 + .../src/Catalogs/ВидыДоходов/ObjectModule.bsl | 6 + .../src/Catalogs/ВидыДоходов/ВидыДоходов.mdo | 43 + .../src/Catalogs/ЕдиницыИзмерений/ObjectModule.bsl | 6 + .../src/Catalogs/ЕдиницыИзмерений/ЕдиницыИзмерений.mdo | 33 + .../Forms/ФормаВыбора/Attributes/Список/ExtInfo/ListSettings.dcss | 17 + .../src/Catalogs/Номенклатура/Forms/ФормаВыбора/Form.form | 264 + .../Catalogs/Номенклатура/Forms/ФормаВыбора/Module.bsl | 44 + .../Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss | 23 + .../src/Catalogs/Номенклатура/Forms/ФормаСписка/Form.form | 315 + .../Catalogs/Номенклатура/Forms/ФормаСписка/Module.bsl | 78 + .../ФормаЭлемента/Attributes/ШтрихКоды/ExtInfo/ListSettings.dcss | 17 + .../Catalogs/Номенклатура/Forms/ФормаЭлемента/Form.form | 663 +++ .../Catalogs/Номенклатура/Forms/ФормаЭлемента/Module.bsl | 105 + .../src/Catalogs/Номенклатура/ObjectModule.bsl | 6 + .../src/Catalogs/Номенклатура/Номенклатура.mdo | 95 + .../src/Catalogs/Пользователи/ObjectModule.bsl | 6 + .../src/Catalogs/Пользователи/Пользователи.mdo | 33 + .../ФормаВыбора/Attributes/Список/ExtInfo/ListSettings.dcss | 17 + .../src/Catalogs/Счета/Forms/ФормаВыбора/Form.form | 262 + .../src/Catalogs/Счета/Forms/ФормаВыбора/Module.bsl | 27 + .../src/Catalogs/Счета/Forms/ФормаЭлемента/Form.form | 311 + .../src/Catalogs/Счета/Forms/ФормаЭлемента/Module.bsl | 48 + .../src/Catalogs/Счета/ObjectModule.bsl | 6 + Проект_деньги/src/Catalogs/Счета/Счета.mdo | 141 + .../src/CommandGroups/Документы/Документы.mdo | 9 + .../CommandGroups/ЖурналыДокументов/ЖурналыДокументов.mdo | 9 + .../src/CommandGroups/Константы/Константы.mdo | 9 + .../src/CommandGroups/Обработки/Обработки.mdo | 9 + .../src/CommandGroups/Отчеты/Отчеты.mdo | 9 + Проект_деньги/src/CommandGroups/ПВХ/ПВХ.mdo | 9 + .../РегистрыНакопления/РегистрыНакопления.mdo | 9 + .../CommandGroups/РегистрыСведений/РегистрыСведений.mdo | 9 + .../src/CommandGroups/Справочники/Справочники.mdo | 9 + .../src/CommonForms/МобильныйРабСтол/Form.form | 630 ++ .../src/CommonForms/МобильныйРабСтол/Module.bsl | 121 + .../src/CommonForms/МобильныйРабСтол/МобильныйРабСтол.mdo | 10 + .../src/CommonForms/ТекущийПользователь/Form.form | 105 + .../ТекущийПользователь/ТекущийПользователь.mdo | 11 + .../src/CommonForms/ФормаЗагрузкиЧековИзФНС/Form.form | 126 + .../src/CommonForms/ФормаЗагрузкиЧековИзФНС/Module.bsl | 106 + .../ФормаЗагрузкиЧековИзФНС/ФормаЗагрузкиЧековИзФНС.mdo | 10 + .../src/CommonForms/ФормаКонстант/Form.form | 238 + .../src/CommonForms/ФормаКонстант/ФормаКонстант.mdo | 11 + .../src/CommonForms/ФормаОтчета/Form.form | 479 ++ .../src/CommonForms/ФормаОтчета/Module.bsl | 93 + .../src/CommonForms/ФормаОтчета/ФормаОтчета.mdo | 10 + .../src/CommonModules/Диалоги/Module.bsl | 0 .../src/CommonModules/Диалоги/Диалоги.mdo | 11 + .../src/CommonModules/Интерфейс/Module.bsl | 5 + .../src/CommonModules/Интерфейс/Интерфейс.mdo | 9 + .../src/CommonModules/КоннекторHTTP/Module.bsl | 3475 +++++++++++ .../src/CommonModules/КоннекторHTTP/КоннекторHTTP.mdo | 11 + .../src/CommonModules/Обмен/Module.bsl | 297 + .../src/CommonModules/Обмен/Обмен.mdo | 10 + .../src/CommonModules/ОбработчикиОбновления/Module.bsl | 32 + .../ОбработчикиОбновления/ОбработчикиОбновления.mdo | 10 + .../CommonModules/ОбщегоНазначенияКлиентСервер/Module.bsl | 428 ++ .../ОбщегоНазначенияКлиентСервер.mdo | 10 + .../src/CommonModules/Общий_ПД_Сервер/Module.bsl | 187 + .../src/CommonModules/Общий_ПД_Сервер/Общий_ПД_Сервер.mdo | 10 + .../src/CommonPictures/Бабки/Picture.png | Bin 0 -> 2573 bytes .../src/CommonPictures/Бабки/Бабки.mdo | 8 + .../src/CommonPictures/Деньги/Picture.png | Bin 0 -> 10324 bytes .../src/CommonPictures/Деньги/Деньги.mdo | 8 + .../src/CommonPictures/Доходы/Picture.png | Bin 0 -> 6300 bytes .../src/CommonPictures/Доходы/Доходы.mdo | 8 + .../src/CommonPictures/ДоходыРасходы/Picture.png | Bin 0 -> 3369 bytes .../src/CommonPictures/ДоходыРасходы/ДоходыРасходы.mdo | 8 + .../src/CommonPictures/Желания/Picture.png | Bin 0 -> 1323 bytes .../src/CommonPictures/Желания/Желания.mdo | 8 + .../src/CommonPictures/ИконкаДокументов/Picture.png | Bin 0 -> 4360 bytes .../CommonPictures/ИконкаДокументов/ИконкаДокументов.mdo | 8 + .../src/CommonPictures/ИконкаСправочники/Picture.png | Bin 0 -> 6478 bytes .../ИконкаСправочники/ИконкаСправочники.mdo | 8 + .../src/CommonPictures/КомПлатежи/Picture.png | Bin 0 -> 3211 bytes .../src/CommonPictures/КомПлатежи/КомПлатежи.mdo | 8 + .../src/CommonPictures/Отчеты/Picture.png | Bin 0 -> 675 bytes .../src/CommonPictures/Отчеты/Отчеты.mdo | 8 + .../src/CommonPictures/Перевод/Picture.png | Bin 0 -> 2681 bytes .../src/CommonPictures/Перевод/Перевод.mdo | 8 + .../src/CommonPictures/Покупка/Picture.png | Bin 0 -> 2063 bytes .../src/CommonPictures/Покупка/Покупка.mdo | 8 + .../src/CommonPictures/Продажи/Picture.png | Bin 0 -> 5338 bytes .../src/CommonPictures/Продажи/Продажи.mdo | 8 + .../src/CommonPictures/Расходы/Picture.png | Bin 0 -> 5729 bytes .../src/CommonPictures/Расходы/Расходы.mdo | 8 + .../src/CommonPictures/СканШтрихКода/Picture.jpg | Bin 0 -> 3721 bytes .../src/CommonPictures/СканШтрихКода/СканШтрихКода.mdo | 8 + .../src/CommonPictures/ШтрихКод/Picture.png | Bin 0 -> 1199 bytes .../src/CommonPictures/ШтрихКод/ШтрихКод.mdo | 8 + .../src/CommonTemplates/ОтчетПоДаходам/Template.dcs | 282 + .../src/CommonTemplates/ОтчетПоДаходам/ОтчетПоДаходам.mdo | 9 + .../CommonTemplates/ОтчетПоДоходамИРасходам/Template.dcs | 314 + .../ОтчетПоДоходамИРасходам/ОтчетПоДоходамИРасходам.mdo | 9 + .../src/CommonTemplates/ОтчетПоРасходам/Template.dcs | 431 ++ .../CommonTemplates/ОтчетПоРасходам/ОтчетПоРасходам.mdo | 9 + .../src/Configuration/CommandInterface.cmi | 10 + .../src/Configuration/Configuration.mdo | 197 + .../src/Configuration/HomePageWorkArea.hpwa | 14 + .../src/Configuration/MainSectionCommandInterface.cmi | 87 + .../src/Configuration/ManagedApplicationModule.bsl | 32 + .../src/Configuration/SessionModule.bsl | 0 .../src/Constants/ВерияКонфигурации/ВерияКонфигурации.mdo | 23 + .../ВыводитьДиалогиВвода/ВыводитьДиалогиВвода.mdo | 21 + .../ОдинДокументРасходов/ОдинДокументРасходов.mdo | 21 + .../Constants/ПерсональныйТокенQR/ПерсональныйТокенQR.mdo | 24 + .../src/Constants/СерверАдрес/СерверАдрес.mdo | 23 + .../Constants/ТекущийПользователь/ТекущийПользователь.mdo | 21 + .../ВыполнитьОбработчикиОбновления/Forms/Форма/Form.form | 84 + .../ВыполнитьОбработчикиОбновления/Forms/Форма/Module.bsl | 54 + .../ВыполнитьОбработчикиОбновления.mdo | 23 + .../КонкуляторБанковскогоЗайма/Forms/Форма/Form.form | 1280 ++++ .../КонкуляторБанковскогоЗайма/Forms/Форма/Module.bsl | 95 + .../КонкуляторБанковскогоЗайма.mdo | 304 + .../КонкуляторДоходности/Forms/Форма/Form.form | 833 +++ .../КонкуляторДоходности/Forms/Форма/Module.bsl | 160 + .../КонкуляторДоходности/КонкуляторДоходности.mdo | 179 + .../src/DataProcessors/ОбменДанными/Forms/Форма/Form.form | 331 ++ .../DataProcessors/ОбменДанными/Forms/Форма/Module.bsl | 219 + .../src/DataProcessors/ОбменДанными/ОбменДанными.mdo | 23 + .../src/DataProcessors/Отчеты/Forms/Форма/Form.form | 248 + .../src/DataProcessors/Отчеты/Forms/Форма/Module.bsl | 35 + .../src/DataProcessors/Отчеты/Отчеты.mdo | 23 + .../DataProcessors/ОчиститьДанные/Forms/Форма/Form.form | 184 + .../DataProcessors/ОчиститьДанные/Forms/Форма/Module.bsl | 55 + .../src/DataProcessors/ОчиститьДанные/ОчиститьДанные.mdo | 23 + .../ПровестиВсеДокументы/Forms/Форма/Form.form | 168 + .../ПровестиВсеДокументы/Forms/Форма/Module.bsl | 37 + .../ПровестиВсеДокументы/ПровестиВсеДокументы.mdo | 69 + .../Forms/ВыборКонстанты/Form.form | 740 +++ .../Forms/ВыборКонстанты/Items/Декорация1/Picture.png | Bin 0 -> 355 bytes .../Forms/ВыборКонстанты/Items/СписокКонстант/RowsPicture.png | Bin 0 -> 5137 bytes .../Forms/ВыборКонстанты/Items/СписокКонстантИндексКартинкиАвторегистрация/HeaderPicture.png | Bin 0 -> 355 bytes .../Forms/ВыборКонстанты/Items/СписокКонстантИндексКартинкиАвторегистрация/ValuesPicture.png | Bin 0 -> 778 bytes .../Forms/ВыборКонстанты/Module.bsl | 102 + .../Forms/ВыборОбъектовОтбором/Attributes/СписокДанных/ExtInfo/ListSettings.dcss | 17 + .../Forms/ВыборОбъектовОтбором/Form.form | 1052 ++++ .../Forms/ВыборОбъектовОтбором/Module.bsl | 213 + .../Forms/ВыборУзлаПланаОбмена/Form.form | 729 +++ .../Forms/ВыборУзлаПланаОбмена/Items/ДеревоУзловОбмена/RowsPicture.png | Bin 0 -> 1455 bytes .../Forms/ВыборУзлаПланаОбмена/Module.bsl | 234 + .../Forms/Настройки/Form.form | 796 +++ .../Forms/Настройки/Module.bsl | 179 + .../Forms/НомераСообщенийУзлаПланаОбмена/Form.form | 367 ++ .../Forms/НомераСообщенийУзлаПланаОбмена/Module.bsl | 71 + .../Forms/УзлыРегистрацииОбъекта/Form.form | 1320 +++++ .../Forms/УзлыРегистрацииОбъекта/Items/ДеревоУзловОбмена/RowsPicture.png | Bin 0 -> 1455 bytes .../Forms/УзлыРегистрацииОбъекта/Items/ДеревоУзловОбменаАвторегистрация/ValuesPicture.png | Bin 0 -> 778 bytes .../Items/ДеревоУзловОбменаКонтекстноеМенюИнвертироватьПометкуВсемУзлам/Picture.png | Bin 0 -> 517 bytes .../Forms/УзлыРегистрацииОбъекта/Items/СкрытаяКартинкаИнформация32/Picture.png | Bin 0 -> 784 bytes .../Forms/УзлыРегистрацииОбъекта/Module.bsl | 365 ++ .../Forms/Форма/Attributes/СписокКонстант/ExtInfo/ListSettings.dcss | 17 + .../Forms/Форма/Attributes/СписокНаборовЗаписей/ExtInfo/ListSettings.dcss | 17 + .../Forms/Форма/Attributes/СписокСсылок/ExtInfo/ListSettings.dcss | 41 + .../Forms/Форма/Form.form | 5276 +++++++++++++++++ .../Forms/Форма/Items/ДеревоМетаданных/RowsPicture.png | Bin 0 -> 6074 bytes .../Forms/Форма/Items/ДеревоМетаданныхАвторегистрация/ValuesPicture.png | Bin 0 -> 778 bytes .../Forms/Форма/Items/ДеревоМетаданныхДобавитьРегистрациюРезультатаЗапроса/Picture.png | Bin 0 -> 738 bytes .../Forms/Форма/Items/ДеревоМетаданныхУдалитьРегистрациюРезультатаЗапроса/Picture.png | Bin 0 -> 738 bytes .../Forms/Форма/Items/ПоказатьРезультатВыгрузки/Picture.png | Bin 0 -> 1563 bytes .../Forms/Форма/Items/СкрытаяКартинкаИнформация32/Picture.png | Bin 0 -> 784 bytes .../Forms/Форма/Items/СписокКонстант/RowsPicture.png | Bin 0 -> 5137 bytes .../Forms/Форма/Items/СписокКонстантАвторегистрация/ValuesPicture.png | Bin 0 -> 778 bytes .../Forms/Форма/Items/СписокКонстантКонтекстноеМенюПоказатьРезультатВыгрузки/Picture.png | Bin 0 -> 1563 bytes .../Форма/Items/СписокНаборовЗаписейКонтекстноеМенюПоказатьРезультатВыгрузки/Picture.png | Bin 0 -> 1563 bytes .../Forms/Форма/Items/СписокСсылокКонтекстноеМенюПоказатьРезультатВыгрузки/Picture.png | Bin 0 -> 1563 bytes .../Forms/Форма/Module.bsl | 2279 +++++++ .../РегистрацияИзмененийДляОбменаДанными/Help/ru.html | 24 + .../РегистрацияИзмененийДляОбменаДанными/ObjectModule.bsl | 1912 ++++++ .../РегистрацияИзмененийДляОбменаДанными.mdo | 196 + .../ВводНачальныхОстатков/Forms/ФормаДокумента/Form.form | 375 ++ .../ВводНачальныхОстатков/Forms/ФормаДокумента/Module.bsl | 36 + .../src/Documents/ВводНачальныхОстатков/ObjectModule.bsl | 25 + .../ВводНачальныхОстатков/ВводНачальныхОстатков.mdo | 83 + .../src/Documents/Вложения/Forms/ФормаДокумента/Form.form | 616 ++ .../Documents/Вложения/Forms/ФормаДокумента/Module.bsl | 71 + .../Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss | 17 + .../src/Documents/Вложения/Forms/ФормаСписка/Form.form | 378 ++ .../src/Documents/Вложения/Forms/ФормаСписка/Module.bsl | 48 + .../src/Documents/Вложения/ObjectModule.bsl | 52 + .../src/Documents/Вложения/Вложения.mdo | 258 + .../src/Documents/Доходы/Forms/ФормаДокумента/Form.form | 395 ++ .../src/Documents/Доходы/Forms/ФормаДокумента/Module.bsl | 51 + .../ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss | 17 + .../src/Documents/Доходы/Forms/ФормаСписка/Form.form | 421 ++ .../src/Documents/Доходы/Forms/ФормаСписка/Module.bsl | 15 + .../src/Documents/Доходы/ObjectModule.bsl | 33 + Проект_деньги/src/Documents/Доходы/Доходы.mdo | 120 + .../src/Documents/Желания/Forms/ФормаДокумента/Form.form | 588 ++ .../src/Documents/Желания/Forms/ФормаДокумента/Module.bsl | 126 + .../ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss | 17 + .../src/Documents/Желания/Forms/ФормаСписка/Form.form | 386 ++ .../src/Documents/Желания/Forms/ФормаСписка/Module.bsl | 33 + .../src/Documents/Желания/ObjectModule.bsl | 19 + .../src/Documents/Желания/Желания.mdo | 193 + .../КоммунальныеПлатежи/Forms/ФормаДокумента/Form.form | 701 +++ .../КоммунальныеПлатежи/Forms/ФормаДокумента/Module.bsl | 206 + .../Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss | 17 + .../КоммунальныеПлатежи/Forms/ФормаСписка/Form.form | 382 ++ .../КоммунальныеПлатежи/Forms/ФормаСписка/Module.bsl | 9 + .../src/Documents/КоммунальныеПлатежи/ObjectModule.bsl | 64 + .../Documents/КоммунальныеПлатежи/КоммунальныеПлатежи.mdo | 224 + .../Forms/ФормаДокумента/Form.form | 228 + .../Forms/ФормаДокумента/Module.bsl | 69 + .../Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss | 17 + .../Forms/ФормаСписка/Form.form | 368 ++ .../ПеремещениеСнятиеДенежныхСредств/ObjectModule.bsl | 44 + .../ПеремещениеСнятиеДенежныхСредств.mdo | 115 + .../ПланированиеБюджета/Forms/ФормаДокумента/Form.form | 446 ++ .../Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss | 17 + .../ПланированиеБюджета/Forms/ФормаСписка/Form.form | 340 ++ .../src/Documents/ПланированиеБюджета/ObjectModule.bsl | 42 + .../Documents/ПланированиеБюджета/ПланированиеБюджета.mdo | 130 + .../src/Documents/Покупки/Forms/ФормаДокумента/Form.form | 1208 ++++ .../src/Documents/Покупки/Forms/ФормаДокумента/Module.bsl | 818 +++ .../ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss | 17 + .../src/Documents/Покупки/Forms/ФормаСписка/Form.form | 428 ++ .../src/Documents/Покупки/Forms/ФормаСписка/Module.bsl | 16 + .../src/Documents/Покупки/ObjectModule.bsl | 104 + .../src/Documents/Покупки/Покупки.mdo | 290 + .../src/Documents/Продажи/Forms/ФормаДокумента/Form.form | 1047 ++++ .../src/Documents/Продажи/Forms/ФормаДокумента/Module.bsl | 226 + .../ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss | 17 + .../src/Documents/Продажи/Forms/ФормаСписка/Form.form | 336 ++ .../src/Documents/Продажи/ObjectModule.bsl | 95 + .../src/Documents/Продажи/Продажи.mdo | 354 ++ .../Documents/СоответствиеНоменклатуры/ObjectModule.bsl | 6 + .../СоответствиеНоменклатуры/СоответствиеНоменклатуры.mdo | 72 + .../src/Enums/ВидыНоменклатуры/ВидыНоменклатуры.mdo | 36 + Проект_деньги/src/Enums/Месяцы/Месяцы.mdo | 115 + .../src/Enums/ПериодыПланирования/ПериодыПланирования.mdo | 29 + .../src/Enums/ТипыПлатежей/ТипыПлатежей.mdo | 29 + .../ОбменЗарегистрироватьИзменения.mdo | 19 + .../ОбменЗарегистрироватьИзмененияДокумента.mdo | 22 + .../ПередЗаписьюДокумента/ПередЗаписьюДокумента.mdo | 18 + .../src/ExchangePlans/Мобильные/Forms/ФормаУзла/Form.form | 272 + .../src/ExchangePlans/Мобильные/ObjectModule.bsl | 204 + .../src/ExchangePlans/Мобильные/Мобильные.mdo | 183 + .../src/HTTPServices/requst/Module.bsl | 12 + .../src/HTTPServices/requst/requst.mdo | 36 + .../InformationRegisters/КлючевыеСлова/КлючевыеСлова.mdo | 59 + .../src/InformationRegisters/КурсыВалют/КурсыВалют.mdo | 75 + .../ПланированиеБюджетаНаГод/ПланированиеБюджетаНаГод.mdo | 91 + .../ПланированиеБюджетаНаМесяц.mdo | 58 + .../СоответствиеНоменклатуры/СоответствиеНоменклатуры.mdo | 54 + .../ЦеныКоммунальныхПлатежей/Forms/ФормаЗаписи/Form.form | 163 + .../ЦеныКоммунальныхПлатежей/Forms/ФормаЗаписи/Module.bsl | 13 + .../ЦеныКоммунальныхПлатежей/RecordSetModule.bsl | 1 + .../ЦеныКоммунальныхПлатежей/ЦеныКоммунальныхПлатежей.mdo | 69 + .../src/InformationRegisters/ШтрихКоды/ШтрихКоды.mdo | 56 + .../src/Roles/ПолныеПрава/Rights.rights | 6 + .../src/Roles/ПолныеПрава/ПолныеПрава.mdo | 8 + .../src/Subsystems/Настройки/CommandInterface.cmi | 39 + .../src/Subsystems/Настройки/Настройки.mdo | 17 + .../src/Subsystems/НачальныеДанные/CommandInterface.cmi | 129 + .../src/Subsystems/НачальныеДанные/НачальныеДанные.mdo | 28 + .../src/Subsystems/Покупки/CommandInterface.cmi | 197 + .../src/Subsystems/Покупки/Покупки.mdo | 35 + .../src/Subsystems/Продажи/CommandInterface.cmi | 97 + .../src/Subsystems/Продажи/Продажи.mdo | 18 + .../src/Subsystems/Сервис/Сервис.mdo | 20 + 276 files changed, 47398 insertions(+) create mode 100644 Проект_деньги/.project create mode 100644 Проект_деньги/.settings/org.eclipse.core.resources.prefs create mode 100644 Проект_деньги/DT-INF/PROJECT.PMF create mode 100644 Проект_деньги/src/AccumulationRegisters/ДенежныеСредства/Forms/ФормаОстатков/Attributes/Объект/ExtInfo/ListSettings.dcss create mode 100644 Проект_деньги/src/AccumulationRegisters/ДенежныеСредства/Forms/ФормаОстатков/Form.form create mode 100644 Проект_деньги/src/AccumulationRegisters/ДенежныеСредства/Forms/ФормаОстатков/Module.bsl create mode 100644 Проект_деньги/src/AccumulationRegisters/ДенежныеСредства/ДенежныеСредства.mdo create mode 100644 Проект_деньги/src/AccumulationRegisters/Доходы/Доходы.mdo create mode 100644 Проект_деньги/src/AccumulationRegisters/Продажи/Продажи.mdo create mode 100644 Проект_деньги/src/AccumulationRegisters/Расходы/Расходы.mdo create mode 100644 Проект_деньги/src/Catalogs/Банки/ObjectModule.bsl create mode 100644 Проект_деньги/src/Catalogs/Банки/Банки.mdo create mode 100644 Проект_деньги/src/Catalogs/Валюты/Валюты.mdo create mode 100644 Проект_деньги/src/Catalogs/ВидыДоходов/Forms/ФормаВыбора/Attributes/Список/ExtInfo/ListSettings.dcss create mode 100644 Проект_деньги/src/Catalogs/ВидыДоходов/Forms/ФормаВыбора/Form.form create mode 100644 Проект_деньги/src/Catalogs/ВидыДоходов/ObjectModule.bsl create mode 100644 Проект_деньги/src/Catalogs/ВидыДоходов/ВидыДоходов.mdo create mode 100644 Проект_деньги/src/Catalogs/ЕдиницыИзмерений/ObjectModule.bsl create mode 100644 Проект_деньги/src/Catalogs/ЕдиницыИзмерений/ЕдиницыИзмерений.mdo create mode 100644 Проект_деньги/src/Catalogs/Номенклатура/Forms/ФормаВыбора/Attributes/Список/ExtInfo/ListSettings.dcss create mode 100644 Проект_деньги/src/Catalogs/Номенклатура/Forms/ФормаВыбора/Form.form create mode 100644 Проект_деньги/src/Catalogs/Номенклатура/Forms/ФормаВыбора/Module.bsl create mode 100644 Проект_деньги/src/Catalogs/Номенклатура/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss create mode 100644 Проект_деньги/src/Catalogs/Номенклатура/Forms/ФормаСписка/Form.form create mode 100644 Проект_деньги/src/Catalogs/Номенклатура/Forms/ФормаСписка/Module.bsl create mode 100644 Проект_деньги/src/Catalogs/Номенклатура/Forms/ФормаЭлемента/Attributes/ШтрихКоды/ExtInfo/ListSettings.dcss create mode 100644 Проект_деньги/src/Catalogs/Номенклатура/Forms/ФормаЭлемента/Form.form create mode 100644 Проект_деньги/src/Catalogs/Номенклатура/Forms/ФормаЭлемента/Module.bsl create mode 100644 Проект_деньги/src/Catalogs/Номенклатура/ObjectModule.bsl create mode 100644 Проект_деньги/src/Catalogs/Номенклатура/Номенклатура.mdo create mode 100644 Проект_деньги/src/Catalogs/Пользователи/ObjectModule.bsl create mode 100644 Проект_деньги/src/Catalogs/Пользователи/Пользователи.mdo create mode 100644 Проект_деньги/src/Catalogs/Счета/Forms/ФормаВыбора/Attributes/Список/ExtInfo/ListSettings.dcss create mode 100644 Проект_деньги/src/Catalogs/Счета/Forms/ФормаВыбора/Form.form create mode 100644 Проект_деньги/src/Catalogs/Счета/Forms/ФормаВыбора/Module.bsl create mode 100644 Проект_деньги/src/Catalogs/Счета/Forms/ФормаЭлемента/Form.form create mode 100644 Проект_деньги/src/Catalogs/Счета/Forms/ФормаЭлемента/Module.bsl create mode 100644 Проект_деньги/src/Catalogs/Счета/ObjectModule.bsl create mode 100644 Проект_деньги/src/Catalogs/Счета/Счета.mdo create mode 100644 Проект_деньги/src/CommandGroups/Документы/Документы.mdo create mode 100644 Проект_деньги/src/CommandGroups/ЖурналыДокументов/ЖурналыДокументов.mdo create mode 100644 Проект_деньги/src/CommandGroups/Константы/Константы.mdo create mode 100644 Проект_деньги/src/CommandGroups/Обработки/Обработки.mdo create mode 100644 Проект_деньги/src/CommandGroups/Отчеты/Отчеты.mdo create mode 100644 Проект_деньги/src/CommandGroups/ПВХ/ПВХ.mdo create mode 100644 Проект_деньги/src/CommandGroups/РегистрыНакопления/РегистрыНакопления.mdo create mode 100644 Проект_деньги/src/CommandGroups/РегистрыСведений/РегистрыСведений.mdo create mode 100644 Проект_деньги/src/CommandGroups/Справочники/Справочники.mdo create mode 100644 Проект_деньги/src/CommonForms/МобильныйРабСтол/Form.form create mode 100644 Проект_деньги/src/CommonForms/МобильныйРабСтол/Module.bsl create mode 100644 Проект_деньги/src/CommonForms/МобильныйРабСтол/МобильныйРабСтол.mdo create mode 100644 Проект_деньги/src/CommonForms/ТекущийПользователь/Form.form create mode 100644 Проект_деньги/src/CommonForms/ТекущийПользователь/ТекущийПользователь.mdo create mode 100644 Проект_деньги/src/CommonForms/ФормаЗагрузкиЧековИзФНС/Form.form create mode 100644 Проект_деньги/src/CommonForms/ФормаЗагрузкиЧековИзФНС/Module.bsl create mode 100644 Проект_деньги/src/CommonForms/ФормаЗагрузкиЧековИзФНС/ФормаЗагрузкиЧековИзФНС.mdo create mode 100644 Проект_деньги/src/CommonForms/ФормаКонстант/Form.form create mode 100644 Проект_деньги/src/CommonForms/ФормаКонстант/ФормаКонстант.mdo create mode 100644 Проект_деньги/src/CommonForms/ФормаОтчета/Form.form create mode 100644 Проект_деньги/src/CommonForms/ФормаОтчета/Module.bsl create mode 100644 Проект_деньги/src/CommonForms/ФормаОтчета/ФормаОтчета.mdo create mode 100644 Проект_деньги/src/CommonModules/Диалоги/Module.bsl create mode 100644 Проект_деньги/src/CommonModules/Диалоги/Диалоги.mdo create mode 100644 Проект_деньги/src/CommonModules/Интерфейс/Module.bsl create mode 100644 Проект_деньги/src/CommonModules/Интерфейс/Интерфейс.mdo create mode 100644 Проект_деньги/src/CommonModules/КоннекторHTTP/Module.bsl create mode 100644 Проект_деньги/src/CommonModules/КоннекторHTTP/КоннекторHTTP.mdo create mode 100644 Проект_деньги/src/CommonModules/Обмен/Module.bsl create mode 100644 Проект_деньги/src/CommonModules/Обмен/Обмен.mdo create mode 100644 Проект_деньги/src/CommonModules/ОбработчикиОбновления/Module.bsl create mode 100644 Проект_деньги/src/CommonModules/ОбработчикиОбновления/ОбработчикиОбновления.mdo create mode 100644 Проект_деньги/src/CommonModules/ОбщегоНазначенияКлиентСервер/Module.bsl create mode 100644 Проект_деньги/src/CommonModules/ОбщегоНазначенияКлиентСервер/ОбщегоНазначенияКлиентСервер.mdo create mode 100644 Проект_деньги/src/CommonModules/Общий_ПД_Сервер/Module.bsl create mode 100644 Проект_деньги/src/CommonModules/Общий_ПД_Сервер/Общий_ПД_Сервер.mdo create mode 100644 Проект_деньги/src/CommonPictures/Бабки/Picture.png create mode 100644 Проект_деньги/src/CommonPictures/Бабки/Бабки.mdo create mode 100644 Проект_деньги/src/CommonPictures/Деньги/Picture.png create mode 100644 Проект_деньги/src/CommonPictures/Деньги/Деньги.mdo create mode 100644 Проект_деньги/src/CommonPictures/Доходы/Picture.png create mode 100644 Проект_деньги/src/CommonPictures/Доходы/Доходы.mdo create mode 100644 Проект_деньги/src/CommonPictures/ДоходыРасходы/Picture.png create mode 100644 Проект_деньги/src/CommonPictures/ДоходыРасходы/ДоходыРасходы.mdo create mode 100644 Проект_деньги/src/CommonPictures/Желания/Picture.png create mode 100644 Проект_деньги/src/CommonPictures/Желания/Желания.mdo create mode 100644 Проект_деньги/src/CommonPictures/ИконкаДокументов/Picture.png create mode 100644 Проект_деньги/src/CommonPictures/ИконкаДокументов/ИконкаДокументов.mdo create mode 100644 Проект_деньги/src/CommonPictures/ИконкаСправочники/Picture.png create mode 100644 Проект_деньги/src/CommonPictures/ИконкаСправочники/ИконкаСправочники.mdo create mode 100644 Проект_деньги/src/CommonPictures/КомПлатежи/Picture.png create mode 100644 Проект_деньги/src/CommonPictures/КомПлатежи/КомПлатежи.mdo create mode 100644 Проект_деньги/src/CommonPictures/Отчеты/Picture.png create mode 100644 Проект_деньги/src/CommonPictures/Отчеты/Отчеты.mdo create mode 100644 Проект_деньги/src/CommonPictures/Перевод/Picture.png create mode 100644 Проект_деньги/src/CommonPictures/Перевод/Перевод.mdo create mode 100644 Проект_деньги/src/CommonPictures/Покупка/Picture.png create mode 100644 Проект_деньги/src/CommonPictures/Покупка/Покупка.mdo create mode 100644 Проект_деньги/src/CommonPictures/Продажи/Picture.png create mode 100644 Проект_деньги/src/CommonPictures/Продажи/Продажи.mdo create mode 100644 Проект_деньги/src/CommonPictures/Расходы/Picture.png create mode 100644 Проект_деньги/src/CommonPictures/Расходы/Расходы.mdo create mode 100644 Проект_деньги/src/CommonPictures/СканШтрихКода/Picture.jpg create mode 100644 Проект_деньги/src/CommonPictures/СканШтрихКода/СканШтрихКода.mdo create mode 100644 Проект_деньги/src/CommonPictures/ШтрихКод/Picture.png create mode 100644 Проект_деньги/src/CommonPictures/ШтрихКод/ШтрихКод.mdo create mode 100644 Проект_деньги/src/CommonTemplates/ОтчетПоДаходам/Template.dcs create mode 100644 Проект_деньги/src/CommonTemplates/ОтчетПоДаходам/ОтчетПоДаходам.mdo create mode 100644 Проект_деньги/src/CommonTemplates/ОтчетПоДоходамИРасходам/Template.dcs create mode 100644 Проект_деньги/src/CommonTemplates/ОтчетПоДоходамИРасходам/ОтчетПоДоходамИРасходам.mdo create mode 100644 Проект_деньги/src/CommonTemplates/ОтчетПоРасходам/Template.dcs create mode 100644 Проект_деньги/src/CommonTemplates/ОтчетПоРасходам/ОтчетПоРасходам.mdo create mode 100644 Проект_деньги/src/Configuration/CommandInterface.cmi create mode 100644 Проект_деньги/src/Configuration/Configuration.mdo create mode 100644 Проект_деньги/src/Configuration/HomePageWorkArea.hpwa create mode 100644 Проект_деньги/src/Configuration/MainSectionCommandInterface.cmi create mode 100644 Проект_деньги/src/Configuration/ManagedApplicationModule.bsl create mode 100644 Проект_деньги/src/Configuration/SessionModule.bsl create mode 100644 Проект_деньги/src/Constants/ВерияКонфигурации/ВерияКонфигурации.mdo create mode 100644 Проект_деньги/src/Constants/ВыводитьДиалогиВвода/ВыводитьДиалогиВвода.mdo create mode 100644 Проект_деньги/src/Constants/ОдинДокументРасходов/ОдинДокументРасходов.mdo create mode 100644 Проект_деньги/src/Constants/ПерсональныйТокенQR/ПерсональныйТокенQR.mdo create mode 100644 Проект_деньги/src/Constants/СерверАдрес/СерверАдрес.mdo create mode 100644 Проект_деньги/src/Constants/ТекущийПользователь/ТекущийПользователь.mdo create mode 100644 Проект_деньги/src/DataProcessors/ВыполнитьОбработчикиОбновления/Forms/Форма/Form.form create mode 100644 Проект_деньги/src/DataProcessors/ВыполнитьОбработчикиОбновления/Forms/Форма/Module.bsl create mode 100644 Проект_деньги/src/DataProcessors/ВыполнитьОбработчикиОбновления/ВыполнитьОбработчикиОбновления.mdo create mode 100644 Проект_деньги/src/DataProcessors/КонкуляторБанковскогоЗайма/Forms/Форма/Form.form create mode 100644 Проект_деньги/src/DataProcessors/КонкуляторБанковскогоЗайма/Forms/Форма/Module.bsl create mode 100644 Проект_деньги/src/DataProcessors/КонкуляторБанковскогоЗайма/КонкуляторБанковскогоЗайма.mdo create mode 100644 Проект_деньги/src/DataProcessors/КонкуляторДоходности/Forms/Форма/Form.form create mode 100644 Проект_деньги/src/DataProcessors/КонкуляторДоходности/Forms/Форма/Module.bsl create mode 100644 Проект_деньги/src/DataProcessors/КонкуляторДоходности/КонкуляторДоходности.mdo create mode 100644 Проект_деньги/src/DataProcessors/ОбменДанными/Forms/Форма/Form.form create mode 100644 Проект_деньги/src/DataProcessors/ОбменДанными/Forms/Форма/Module.bsl create mode 100644 Проект_деньги/src/DataProcessors/ОбменДанными/ОбменДанными.mdo create mode 100644 Проект_деньги/src/DataProcessors/Отчеты/Forms/Форма/Form.form create mode 100644 Проект_деньги/src/DataProcessors/Отчеты/Forms/Форма/Module.bsl create mode 100644 Проект_деньги/src/DataProcessors/Отчеты/Отчеты.mdo create mode 100644 Проект_деньги/src/DataProcessors/ОчиститьДанные/Forms/Форма/Form.form create mode 100644 Проект_деньги/src/DataProcessors/ОчиститьДанные/Forms/Форма/Module.bsl create mode 100644 Проект_деньги/src/DataProcessors/ОчиститьДанные/ОчиститьДанные.mdo create mode 100644 Проект_деньги/src/DataProcessors/ПровестиВсеДокументы/Forms/Форма/Form.form create mode 100644 Проект_деньги/src/DataProcessors/ПровестиВсеДокументы/Forms/Форма/Module.bsl create mode 100644 Проект_деньги/src/DataProcessors/ПровестиВсеДокументы/ПровестиВсеДокументы.mdo create mode 100644 Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборКонстанты/Form.form create mode 100644 Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборКонстанты/Items/Декорация1/Picture.png create mode 100644 Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборКонстанты/Items/СписокКонстант/RowsPicture.png create mode 100644 Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборКонстанты/Items/СписокКонстантИндексКартинкиАвторегистрация/HeaderPicture.png create mode 100644 Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборКонстанты/Items/СписокКонстантИндексКартинкиАвторегистрация/ValuesPicture.png create mode 100644 Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборКонстанты/Module.bsl create mode 100644 Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборОбъектовОтбором/Attributes/СписокДанных/ExtInfo/ListSettings.dcss create mode 100644 Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборОбъектовОтбором/Form.form create mode 100644 Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборОбъектовОтбором/Module.bsl create mode 100644 Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборУзлаПланаОбмена/Form.form create mode 100644 Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборУзлаПланаОбмена/Items/ДеревоУзловОбмена/RowsPicture.png create mode 100644 Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборУзлаПланаОбмена/Module.bsl create mode 100644 Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Настройки/Form.form create mode 100644 Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Настройки/Module.bsl create mode 100644 Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/НомераСообщенийУзлаПланаОбмена/Form.form create mode 100644 Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/НомераСообщенийУзлаПланаОбмена/Module.bsl create mode 100644 Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/УзлыРегистрацииОбъекта/Form.form create mode 100644 Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/УзлыРегистрацииОбъекта/Items/ДеревоУзловОбмена/RowsPicture.png create mode 100644 Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/УзлыРегистрацииОбъекта/Items/ДеревоУзловОбменаАвторегистрация/ValuesPicture.png create mode 100644 Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/УзлыРегистрацииОбъекта/Items/ДеревоУзловОбменаКонтекстноеМенюИнвертироватьПометкуВсемУзлам/Picture.png create mode 100644 Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/УзлыРегистрацииОбъекта/Items/СкрытаяКартинкаИнформация32/Picture.png create mode 100644 Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/УзлыРегистрацииОбъекта/Module.bsl create mode 100644 Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Attributes/СписокКонстант/ExtInfo/ListSettings.dcss create mode 100644 Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Attributes/СписокНаборовЗаписей/ExtInfo/ListSettings.dcss create mode 100644 Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Attributes/СписокСсылок/ExtInfo/ListSettings.dcss create mode 100644 Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Form.form create mode 100644 Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Items/ДеревоМетаданных/RowsPicture.png create mode 100644 Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Items/ДеревоМетаданныхАвторегистрация/ValuesPicture.png create mode 100644 Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Items/ДеревоМетаданныхДобавитьРегистрациюРезультатаЗапроса/Picture.png create mode 100644 Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Items/ДеревоМетаданныхУдалитьРегистрациюРезультатаЗапроса/Picture.png create mode 100644 Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Items/ПоказатьРезультатВыгрузки/Picture.png create mode 100644 Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Items/СкрытаяКартинкаИнформация32/Picture.png create mode 100644 Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Items/СписокКонстант/RowsPicture.png create mode 100644 Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Items/СписокКонстантАвторегистрация/ValuesPicture.png create mode 100644 Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Items/СписокКонстантКонтекстноеМенюПоказатьРезультатВыгрузки/Picture.png create mode 100644 Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Items/СписокНаборовЗаписейКонтекстноеМенюПоказатьРезультатВыгрузки/Picture.png create mode 100644 Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Items/СписокСсылокКонтекстноеМенюПоказатьРезультатВыгрузки/Picture.png create mode 100644 Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Module.bsl create mode 100644 Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Help/ru.html create mode 100644 Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/ObjectModule.bsl create mode 100644 Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/РегистрацияИзмененийДляОбменаДанными.mdo create mode 100644 Проект_деньги/src/Documents/ВводНачальныхОстатков/Forms/ФормаДокумента/Form.form create mode 100644 Проект_деньги/src/Documents/ВводНачальныхОстатков/Forms/ФормаДокумента/Module.bsl create mode 100644 Проект_деньги/src/Documents/ВводНачальныхОстатков/ObjectModule.bsl create mode 100644 Проект_деньги/src/Documents/ВводНачальныхОстатков/ВводНачальныхОстатков.mdo create mode 100644 Проект_деньги/src/Documents/Вложения/Forms/ФормаДокумента/Form.form create mode 100644 Проект_деньги/src/Documents/Вложения/Forms/ФормаДокумента/Module.bsl create mode 100644 Проект_деньги/src/Documents/Вложения/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss create mode 100644 Проект_деньги/src/Documents/Вложения/Forms/ФормаСписка/Form.form create mode 100644 Проект_деньги/src/Documents/Вложения/Forms/ФормаСписка/Module.bsl create mode 100644 Проект_деньги/src/Documents/Вложения/ObjectModule.bsl create mode 100644 Проект_деньги/src/Documents/Вложения/Вложения.mdo create mode 100644 Проект_деньги/src/Documents/Доходы/Forms/ФормаДокумента/Form.form create mode 100644 Проект_деньги/src/Documents/Доходы/Forms/ФормаДокумента/Module.bsl create mode 100644 Проект_деньги/src/Documents/Доходы/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss create mode 100644 Проект_деньги/src/Documents/Доходы/Forms/ФормаСписка/Form.form create mode 100644 Проект_деньги/src/Documents/Доходы/Forms/ФормаСписка/Module.bsl create mode 100644 Проект_деньги/src/Documents/Доходы/ObjectModule.bsl create mode 100644 Проект_деньги/src/Documents/Доходы/Доходы.mdo create mode 100644 Проект_деньги/src/Documents/Желания/Forms/ФормаДокумента/Form.form create mode 100644 Проект_деньги/src/Documents/Желания/Forms/ФормаДокумента/Module.bsl create mode 100644 Проект_деньги/src/Documents/Желания/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss create mode 100644 Проект_деньги/src/Documents/Желания/Forms/ФормаСписка/Form.form create mode 100644 Проект_деньги/src/Documents/Желания/Forms/ФормаСписка/Module.bsl create mode 100644 Проект_деньги/src/Documents/Желания/ObjectModule.bsl create mode 100644 Проект_деньги/src/Documents/Желания/Желания.mdo create mode 100644 Проект_деньги/src/Documents/КоммунальныеПлатежи/Forms/ФормаДокумента/Form.form create mode 100644 Проект_деньги/src/Documents/КоммунальныеПлатежи/Forms/ФормаДокумента/Module.bsl create mode 100644 Проект_деньги/src/Documents/КоммунальныеПлатежи/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss create mode 100644 Проект_деньги/src/Documents/КоммунальныеПлатежи/Forms/ФормаСписка/Form.form create mode 100644 Проект_деньги/src/Documents/КоммунальныеПлатежи/Forms/ФормаСписка/Module.bsl create mode 100644 Проект_деньги/src/Documents/КоммунальныеПлатежи/ObjectModule.bsl create mode 100644 Проект_деньги/src/Documents/КоммунальныеПлатежи/КоммунальныеПлатежи.mdo create mode 100644 Проект_деньги/src/Documents/ПеремещениеСнятиеДенежныхСредств/Forms/ФормаДокумента/Form.form create mode 100644 Проект_деньги/src/Documents/ПеремещениеСнятиеДенежныхСредств/Forms/ФормаДокумента/Module.bsl create mode 100644 Проект_деньги/src/Documents/ПеремещениеСнятиеДенежныхСредств/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss create mode 100644 Проект_деньги/src/Documents/ПеремещениеСнятиеДенежныхСредств/Forms/ФормаСписка/Form.form create mode 100644 Проект_деньги/src/Documents/ПеремещениеСнятиеДенежныхСредств/ObjectModule.bsl create mode 100644 Проект_деньги/src/Documents/ПеремещениеСнятиеДенежныхСредств/ПеремещениеСнятиеДенежныхСредств.mdo create mode 100644 Проект_деньги/src/Documents/ПланированиеБюджета/Forms/ФормаДокумента/Form.form create mode 100644 Проект_деньги/src/Documents/ПланированиеБюджета/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss create mode 100644 Проект_деньги/src/Documents/ПланированиеБюджета/Forms/ФормаСписка/Form.form create mode 100644 Проект_деньги/src/Documents/ПланированиеБюджета/ObjectModule.bsl create mode 100644 Проект_деньги/src/Documents/ПланированиеБюджета/ПланированиеБюджета.mdo create mode 100644 Проект_деньги/src/Documents/Покупки/Forms/ФормаДокумента/Form.form create mode 100644 Проект_деньги/src/Documents/Покупки/Forms/ФормаДокумента/Module.bsl create mode 100644 Проект_деньги/src/Documents/Покупки/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss create mode 100644 Проект_деньги/src/Documents/Покупки/Forms/ФормаСписка/Form.form create mode 100644 Проект_деньги/src/Documents/Покупки/Forms/ФормаСписка/Module.bsl create mode 100644 Проект_деньги/src/Documents/Покупки/ObjectModule.bsl create mode 100644 Проект_деньги/src/Documents/Покупки/Покупки.mdo create mode 100644 Проект_деньги/src/Documents/Продажи/Forms/ФормаДокумента/Form.form create mode 100644 Проект_деньги/src/Documents/Продажи/Forms/ФормаДокумента/Module.bsl create mode 100644 Проект_деньги/src/Documents/Продажи/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss create mode 100644 Проект_деньги/src/Documents/Продажи/Forms/ФормаСписка/Form.form create mode 100644 Проект_деньги/src/Documents/Продажи/ObjectModule.bsl create mode 100644 Проект_деньги/src/Documents/Продажи/Продажи.mdo create mode 100644 Проект_деньги/src/Documents/СоответствиеНоменклатуры/ObjectModule.bsl create mode 100644 Проект_деньги/src/Documents/СоответствиеНоменклатуры/СоответствиеНоменклатуры.mdo create mode 100644 Проект_деньги/src/Enums/ВидыНоменклатуры/ВидыНоменклатуры.mdo create mode 100644 Проект_деньги/src/Enums/Месяцы/Месяцы.mdo create mode 100644 Проект_деньги/src/Enums/ПериодыПланирования/ПериодыПланирования.mdo create mode 100644 Проект_деньги/src/Enums/ТипыПлатежей/ТипыПлатежей.mdo create mode 100644 Проект_деньги/src/EventSubscriptions/ОбменЗарегистрироватьИзменения/ОбменЗарегистрироватьИзменения.mdo create mode 100644 Проект_деньги/src/EventSubscriptions/ОбменЗарегистрироватьИзмененияДокумента/ОбменЗарегистрироватьИзмененияДокумента.mdo create mode 100644 Проект_деньги/src/EventSubscriptions/ПередЗаписьюДокумента/ПередЗаписьюДокумента.mdo create mode 100644 Проект_деньги/src/ExchangePlans/Мобильные/Forms/ФормаУзла/Form.form create mode 100644 Проект_деньги/src/ExchangePlans/Мобильные/ObjectModule.bsl create mode 100644 Проект_деньги/src/ExchangePlans/Мобильные/Мобильные.mdo create mode 100644 Проект_деньги/src/HTTPServices/requst/Module.bsl create mode 100644 Проект_деньги/src/HTTPServices/requst/requst.mdo create mode 100644 Проект_деньги/src/InformationRegisters/КлючевыеСлова/КлючевыеСлова.mdo create mode 100644 Проект_деньги/src/InformationRegisters/КурсыВалют/КурсыВалют.mdo create mode 100644 Проект_деньги/src/InformationRegisters/ПланированиеБюджетаНаГод/ПланированиеБюджетаНаГод.mdo create mode 100644 Проект_деньги/src/InformationRegisters/ПланированиеБюджетаНаМесяц/ПланированиеБюджетаНаМесяц.mdo create mode 100644 Проект_деньги/src/InformationRegisters/СоответствиеНоменклатуры/СоответствиеНоменклатуры.mdo create mode 100644 Проект_деньги/src/InformationRegisters/ЦеныКоммунальныхПлатежей/Forms/ФормаЗаписи/Form.form create mode 100644 Проект_деньги/src/InformationRegisters/ЦеныКоммунальныхПлатежей/Forms/ФормаЗаписи/Module.bsl create mode 100644 Проект_деньги/src/InformationRegisters/ЦеныКоммунальныхПлатежей/RecordSetModule.bsl create mode 100644 Проект_деньги/src/InformationRegisters/ЦеныКоммунальныхПлатежей/ЦеныКоммунальныхПлатежей.mdo create mode 100644 Проект_деньги/src/InformationRegisters/ШтрихКоды/ШтрихКоды.mdo create mode 100644 Проект_деньги/src/Roles/ПолныеПрава/Rights.rights create mode 100644 Проект_деньги/src/Roles/ПолныеПрава/ПолныеПрава.mdo create mode 100644 Проект_деньги/src/Subsystems/Настройки/CommandInterface.cmi create mode 100644 Проект_деньги/src/Subsystems/Настройки/Настройки.mdo create mode 100644 Проект_деньги/src/Subsystems/НачальныеДанные/CommandInterface.cmi create mode 100644 Проект_деньги/src/Subsystems/НачальныеДанные/НачальныеДанные.mdo create mode 100644 Проект_деньги/src/Subsystems/Покупки/CommandInterface.cmi create mode 100644 Проект_деньги/src/Subsystems/Покупки/Покупки.mdo create mode 100644 Проект_деньги/src/Subsystems/Продажи/CommandInterface.cmi create mode 100644 Проект_деньги/src/Subsystems/Продажи/Продажи.mdo create mode 100644 Проект_деньги/src/Subsystems/Сервис/Сервис.mdo 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 0000000000000000000000000000000000000000..bec721b62035542cc44399e2e96cb070c284f180 GIT binary patch literal 2573 zcmV+o3i9=dP)C)BqSkD8<^6BLVym_ z7U;C4bf%>6Dje49smU4^LQlk*u!VfdZqPjEoCR*8u3z; zsfcAIU{>)`l%a@aBVbPPQk0p9Wg%eR;-x4f5hWM!uEk4HCL&5I;MW!}MHz@FnSce0 zmqKC@B@uAL#7iNeh$Rk%%P~uxR3?kU+$e30QRTQj}Ok$-|gT^c^{JOccfE zR$mhY;k}-dC!d$fr)-pMHs)TTB4B}31T2t>fCW+!us|vT7Dz?F0!hb#KYjC+=LCdf zQaW?5AR<2h*O&hI9#nc@!Bl6u*r3y+Qq-2(m$D`li8AY3SaUt2fZN-wSS^i3cj{ik z;dXImc&&hyAzUCCd!SUrmzVMQym$ivg5d~D@g)G{)p9gS1qMwWX1#%`s`6=f$psV< znVy^DhSSO9>m(8hCOmE? zJZ|cBb?oolPD7o(h+eLbBmyQ9B7?VXU~|}ERflUfSa`6lo9^aq=v8$X)j9y?7kzja z{ftbFG2pNdsYhAuNTH=DlJ*|>!t?thZ4 z=C+J=nsg?bbS8Fe+RC&09%pRE!Lj~cMqSAUxH5Kwgl@;0zLZQrhug)?DJKBx zS|zVO@k`o_O$9%aXU`WOu^61my!q=UygI>`n9A%LB`9E{)9%| z#)TkFIukEH`eS55@^uDojFJ!&8}|J5D2afh6Hda>C;*Ri?q_Fn`-a=t)zZPC_Pqf3 zLm|c{CpX+iCWs-p8n^mIE*{etU>iEb?B3y#YVAaXW7B zJkg~kG)g6HmL_&st!bw-;a>0(ibeo9xOESDRq+np8&oa=PKwwJLVCbfg!ygeY>}HjFnI$Z0R<5Vnom)8hSL?|1m_ z?r$R?uow;V`X_(kx_caNz>jm*L#xTWroMkM1SI3W>Z;<$?eeN>jA}h@|1AE{V#YEP zo|&{bosC=g&5@s>u2mu;^5NzG@czIjBt(&saXa7KdH=fha`r%%cOFRgyp(v5jOAW9 z_)NN-dwxD+{b)P}P}I5aP7EuyqDxB|@4LNU4eb{WK7+b88AA#PJhSI8mbzq5bY*#` z)#MZ~7LNnapfRrbST}2p>E9`#?j(^&4sC_JbXx?wNvl+4te^V0_lJWyo!KaSE4Hd-nWqf3;wxXT zI&a)|Z!sFeK05(`MybqcE2n^MD|;i0(GYK(d>hBy6yaEei}oSjIrjmOY_(RiC1ZW% z%I4HU*q_sxjl#R=zs>fYSk312XnOnH`&_gS5spQ0%uVt7CvT@aNq#`6Eq#H}8R%a|@(ALr3 z+`{$A2?CKt{`BeJ*Obw!RBX3y&S@`a53H${b9m1_4BEAefPg?pOB?$-JG0g|tpu{7 zD00~`lGC9=8Titc4yi19W7cx}y1M9SZq1m4HEQcPyk}oJ99oaO;tGvY$&(ND;GCVo z<@FMc#n7r$Sj~;-HJWwnw$z&#U=$IN3-%$t)pZ~rlV6*D`w)<9+!m85YdM)9UPh+IxHf%@ zuBQ9$>KXYmGIf)Ysha?p4SLjy+>3xgqs{xXEfXcl#&mDqlK%Z}|HoOsS_&Z{CV031 zqg6JG(@1wx5&@eVOf(vk^U*EO1jjD*Zn%wO{k@FOCR12V#`=^#)X3!=*k1gkMT(LMs8y+Wc-I5SWXak2t<%Rj*58X*K+;Y` zP}J0N&NfVZd6~~0HU^!e9PaAjk$^Z`^Qgo)JsjA_Fc-+J{uM4knB;mG4fce0%M+sPBj9|FhU z`NeC`-Fd$kzKos?@<|W zdiY9u4623_qT8;62;+m71NipAry(`T{dq4XMGD9|6cb0oyrg{keoeG jL@c}i@T)?F3Mu{v4H&|s$;4vg00000NkvXXu0mjf)Gz}c literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..a2833f6d6c29a399a2dd7fd0c36f630fa3657211 GIT binary patch literal 10324 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 P{2)k9N?EcJVjS{6526B= literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..8cb34fc0e0cc1da966c165f2e8f3435b60edf89e GIT binary patch literal 6300 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 SQF%820000 + + Доходы + + ru + Доходы + + diff --git a/Проект_деньги/src/CommonPictures/ДоходыРасходы/Picture.png b/Проект_деньги/src/CommonPictures/ДоходыРасходы/Picture.png new file mode 100644 index 0000000000000000000000000000000000000000..1fcf2b5fa51fb328adc13cb3db8361e4f13170da GIT binary patch literal 3369 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 NCp#jc-X`$MzX1=6)#v~K literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..06deecac4c7660465afee05030174ef2625d84f1 GIT binary patch literal 1323 zcmZ{keKgYx7{`Az+j=qcvNEKtU0oxub#s%Y#V?X#3AfI?EYU%hIwh~Mp)Hb^b}KI< z_ev_ENn+~`$(>GKmY0U4*3!t>PwX}d*S+WT&pqd!=kq+@zrN@D{PoSGdV8SPn5+Q+ z0PVRC^j%TM91xW_M^H^mEzpoQba%RUSF z_0fFBu&y-BXm3O0v8gN7bXv6=>M*-Aancs+T%}`Us%fQA?J^pauF899gbqDWZ*L*| zjr8KWW6>2+kBJr41M0S6NloPbZh8B9MlX-Yo4XY=%2mV-h!kB(!As3#)$^nss|l;p zzH?FgXl%s7{FoRmAut6t1wJm@+B}+%GOuzxqXk)bjF}lDqc5OtXiV*x6ayw!8W(F>gWs4GR2q1O@So9&j5Ob7w2M5BfS#0Ith`Dv3Q9+v;cF=wu5P| z<~qEj2gRt?p10a#)q>>HmI;CS@kW+UQ9$T)(e#8Nw68n&3`oG z{3ImDMHG)GK8P9{zKBJY)8!LxUuld*-oaKCd@Ck(*Rvb0s*rEO=(lchCco3mXP+-J zjGJfWSU-e0H%J4t^g9l{NvSlb)5VkMFjmvUqij6qE~8GEp!htWKE%dg#|?g6bl%M( zF}-(Y-ETt$ehZX*v}=q!W1ien;gx4AgWF>BUO;Fo#0DMw=|W~8XZOgQF;53iVqSj0 zmG!(LZ|Xq|wN5~1Stk+WdM@vLVS)@yBbDjB;xsIyX_%L_$8j$23}6B_rjf$zmcfhG zN_HhvW_G^t9%i8Rm@oj_M2t0OWB1u>UsbZ}QY}Yibxd|H*2+q+UzI zsUwj840Anx;#%G>GPocBI3s2|PVVmzLa?%ZYVEq;i2YFOsL&`~bQPU@CF#(i4{ccv zY*Li;ks@5fysh=bxd_>vqntaZTwFU=!AEnr<{uauCfiGrWbx(Eh|bq6v7$lN?o;g0 z94O!)PIj`Ytm=?MFf_vY{&lkH@@w!Z4u@wonX1E4vrfsBwi4*T;EmI;;Giv8CC2yg zDHHiGVK`0BPNIAnf8~^VF1q}USn`9%#$f11b=MSBo1(JIO-WXEo!ot|l>5C`(#)0+ Yvv=&(^}(2#mG%QX_j-dhuJp9O0pECKdH?_b literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..953edffca37e4bc8f278fb65ecaf8663674f7bb1 GIT binary patch literal 4360 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 ZIH8)~(WJGjzIqhkje@Ftm8|*4{{x + + ИконкаДокументов + + ru + Иконка документов + + diff --git a/Проект_деньги/src/CommonPictures/ИконкаСправочники/Picture.png b/Проект_деньги/src/CommonPictures/ИконкаСправочники/Picture.png new file mode 100644 index 0000000000000000000000000000000000000000..9a234c45042d9f6092f1ee45b953065b33b4463b GIT binary patch literal 6478 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 + + ИконкаСправочники + + ru + Иконка справочники + + diff --git a/Проект_деньги/src/CommonPictures/КомПлатежи/Picture.png b/Проект_деньги/src/CommonPictures/КомПлатежи/Picture.png new file mode 100644 index 0000000000000000000000000000000000000000..a07bb703d84669b6510d3cd9776c6c25174aa3d7 GIT binary patch literal 3211 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 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..63fc9354826448bf37538265b01228f10bcd82b0 GIT binary patch literal 675 zcmeAS@N?(olHy`uVBq!ia0vp^0U*r51|<6gKdl8)Y)RhkE)4%caKYZ?lNlJ8B0OCj zLn`LHy}j4(c7VjOkI&auc~7lkoEp_5rFLZ@hgC^ZVn(Q=(Q(&Mpl0EKmA;hVOGDmA%cIWoGA} zchZ@)^d!rM^NQEvDT#P=Tx?HRN?3>!D6+3l&)t(hR zdA-Bwvrxg&m8aTYTKtSG-~00V*<|_SqRg@rYHx0n72WXuBZJa{N462#3m*LqwqEc^ zca>$a=*U{VSh;ef)vDQ{S$7vu3m5 zgYNa!ku};r51xLUE#3Tg#_wylc5BrJd|EhZXXY!uZEe>J3V!=m-`w`H(~DjGre{-=?;Nq7QugXfuGs%(rb!|bmNclas%R>BGJ0}(1UUq4kk*;K ztNPJwwFx4B?5ED!24 + + Отчеты + + ru + Отчеты + + diff --git a/Проект_деньги/src/CommonPictures/Перевод/Picture.png b/Проект_деньги/src/CommonPictures/Перевод/Picture.png new file mode 100644 index 0000000000000000000000000000000000000000..512229c9aa7aa8072f410f44aafc20e547302e9e GIT binary patch literal 2681 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 hO_2X5qKrq(kK6PJT&%!A+EIrH) literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..bb9f7df1155e06c77bfc5a762d8d6d5c179489f7 GIT binary patch literal 2063 zcmV+q2=MobP)F9@VVrUp@cqosdJ@M9&HQ!E>*i)1>?v60Pcjz?QcC(^p@3_CiRZc@hab0F|fD zzI;wdp2zziRtO=!cH+yA>WOPtuXQ`NTJ%g0JahKqNeO=dgb;A(;6V-@JOIGWk8bhd z&09`Gi4=mzE?s!$kKskTPEYi}vb^5`5h38{(IXuG%zZ?oQKHc(vDg^dY>r$$4*~)5 zTPMEq=)V%zuKqjh*tNz@I!jsJ6(H)$JM`%To7#=XV#?n{RKk@rXD^=YTA(!uRiGko zpq@N{e6djZxjgR-^n%3D1hyhCo5^zP)@=YHT7=j{4B=P|U1BH#TauT}F%wT|dJ<__-fSFQHvkyjG0IrX>3u^(Lui^tp-=$lJx+#^Sh^~(6?vI# zj_b1tMcxjk_Ds3G4saw!B2fy3JUH+2*zrfcabxapSO3}RcX8>O!1m4j&02wVcNEt@<4xkIV6=6R2uJ4czAm~`jKh>+sVr_R0nc<^twPRI7bLC8CQ z{=BnxL5io(zVd6}41gBV*uQT-gM-^V@0UuYSzJsaB>B`R)frV0u+oe({0c~aaL)a%(d*Sb0o_-h1{iH9X0&@dt^B;LZ#z zrz@Sw$d4NDs@JLnzV`j|CEy)k$c4AReX*!s z+mwZcaK?BxUqCmEKmzC#Uh-UaZQIF%u?KuVLpKdF#k}*p4Z|0_moe7?B$AbE?+)X7 z@&I(p;6~~L-_Kc2r=eUim1Q?7n*>^{TVCqXd9WFIiN$$xy8o4gnm~jdY1{+feDcK` zz$(B>CK!R52yVUJNScF1)|-`sOziND#B`FH8JY{G(cw6O+gJ?CvAJ z?&E~kxaY-_!O4?IKF(&`htD`}s`2g`q}xc zhpkJlP^47(lDIj6Kn;OvV|5N_1y!C)yAs2Y2e7n0e6gk7yg*IUD%qyp9m$bhhpXhd z>>Jt3k==)zzE8L3Je3vo-Ax(yYU3&Jw@+SJ0&YV40^d)4K+ec}UOO$F+iLmYx@C|^&XcbpvC(i2YuLJ2w#{lefrxUE z#fzE(-O7wDZB{ecwt~0WU!^Xf|jidR4X$pKK8}Br8AeD zr)YX-^NkXllGnju>$04wU4c=lDNwDK=%_529 zJZqNsy@m(8Pk41}*t!(;HF71#S*-=MOQTJyvK|a(UtBPY#Q#@Y;zqhTY+ck5=T(7G zsVh*e%mguvT?%G_L~Ad%@!Vg(J zM^^PwrL=a@?_P%sLi%7f~;zE%ZBrJ=y;%1q}< z{24vV-~T%ksywJpAhjwmDh&lzRb~Rr#9sKVeh0x)xs%kZz^F9!vBIs)q?GyLlZa`V zWXkh=y$XyGV7p zCdy`^ZUsiA>0?Z%E>F(_C)$W>%OQoFedF{?Uu>pr(_g&Z%FNwBGYe>!rjIXKw)j&- th>7+>+FDpr{yFRz`t<43r_Wu${{e9+JD_OvwfX=6002ovPDHLkV1hf%0@VNj literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..aa2cbff37fa56b0616d6f9e256f6e1b75116b134 GIT binary patch literal 5338 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 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..5e783ed0983c68a9bf17b75015a7ebccd033eb4b GIT binary patch literal 5729 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 TT`p9=00000NkvXXu0mjfe31f5 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..59bf4976917d3c782ae3c601b55a38c7545ca6ff GIT binary patch literal 3721 zcmY*c2|SeR_kYJ2Yi6-;*+vL6_Qoz@kc95FWXrxQOBid244H-z+1HA)MV1JKY=u(U znHxf~t2<-wKkmK1`~UsU`+3j%ocEm1dCqyC^ZlIj{+jsp1%O|~8e;(v2mnB|3-~n+ zBmm3|jBE%v6wXE?IFyOT;BclB3Ce}w=H^0haEVJPi||S)NOEwX6h$ReWaQM*Ji^Px~O7#R!(BZI=o$Y4&`$t{CIp)iUvC^YTei6C=g zb+VxGU#|fK6VMOzgF#{d9RdVKfPTFJ1W!VQoP_!>F@nJK5C%FXn)U)50MP?rFf%

8Mg${E`< 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 Ee}o^JdH?_b literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..19c1bc9d5d90e1a46ac5d9937ef750fcf57c55c3 GIT binary patch literal 1199 zcmeAS@N?(olHy`uVBq!ia0vp^CqS5k2}mkgS)K$^Y)RhkE)4%caKYZ?lNlITQaoK8 zLn`LHy?b%pD-8yRz_~yE?|)O{Fk8~;Mu7jdsy&urz1Au*UX}Ix?~AYbR=GFs{rBGw z)Mse_{xx&`b;+NzcYe3ZeiAM7-}k@ek8ghx4=E|?2!VP4_W-&O)OKYM;+YItn=^UE&h*R9*v6XAkz{Js0{%b#byzk50M+`OdwYnjXZPe>Z> z^~yd152-^+A1mM1&O3STZtm)^zt7g~$r8I(+g)<>atAyFT3nM#)_!;s`N}#y!g~GY z%g?@sDT{F?P85I;oj*TwmEXHrQD*<(+|MgFg+;~B{Y4GI`HsK-)YcT2oqO*#XKrkt z#Gg`>Fnaf1Vec(V?|f~(8y-o<>B+4ftJ=^@cQ+d5q zV!YycC3sM5{3P-_bocFb^UCHOz5LF4uT@=88%k84ihOwXs{HP;yx!o zA-ErY>^T*A{+zJhvwOC-oAXar_s*!^_d@F$*G+eLR3_B{L%{3K=kGl8_I_GbzJ2|K zbV0a&3EQLpo=tuI&McGHRUbCTl~|A-^P=VIhT{c{_v(#xgF%2(eCKXI88o(OB$ z{=a(@b>s56RTZ})Kc}Z(L$$Od%p&QtZP&%s&r05xeiQNd%~dIeF!yI|t8=*huae7i z%ibNilliL}C0%ZLE_yC + + ШтрихКод + + 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 0000000000000000000000000000000000000000..91d113a1c75bc860b847867c120956a6950e3387 GIT binary patch literal 355 zcmV-p0i6DcP)Sfq|8P9;@4P3o@`8z`(#De0y%eWPG|+lP4TN=3{u_ z$FDzF@x+bC8GiiwgJB?s0sk2o7-noc#qjsvKRBMT?G(f26E_*K#TU9482O+QTCw&GMCPu;reEI&1!9-1(Vb=CD3>WUbU^sR234?>4 zB143|F2gr0UcfNm^Y>p2-ezhH&)$A!IC0}KgN24HL#(qt!>bQp7)1EE2pjO@_aBBY z-+wVgI_NU|`TLh4(m|Ku%lBUl3=9kmKYtV90%b`d23b*l1_lNO25W736gf5)W(F>X zAHw(y(ACSFvIfe=2y||S?^0|Ge`Juw7>9ml0su#%ctvttjTHa@002ovPDHLkV1jim Bmp}jj literal 0 HcmV?d00001 diff --git a/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборКонстанты/Items/СписокКонстант/RowsPicture.png b/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборКонстанты/Items/СписокКонстант/RowsPicture.png new file mode 100644 index 0000000000000000000000000000000000000000..d36e47e45b5f522755658b18272e10673e165fff GIT binary patch literal 5137 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 Bmp}jj literal 0 HcmV?d00001 diff --git a/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборКонстанты/Items/СписокКонстантИндексКартинкиАвторегистрация/ValuesPicture.png b/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборКонстанты/Items/СписокКонстантИндексКартинкиАвторегистрация/ValuesPicture.png new file mode 100644 index 0000000000000000000000000000000000000000..d7cc10f56a78f5bdb6165e754e42904fa52f1f99 GIT binary patch literal 778 zcmV+l1NHogP)! zTS${(9L9h9+(vD=i8G^v(;0>tCWJ*4k(7xLOYlmm!0@KBs0#}cx-|%5MmL>=uA&13 zF(|qVIt>dkXyu`Xu993hQg{50U6``w`pQ(S2i}YK{l7f#^Stl#@&63W5t^pWm10g1 z7WMRbz#khJJm2(Bnl;R3^WeD#q3FylHFYgDLQhs0aJDuHXj;1%3cJOT(P9Aeirj!X z&*lZSE$F$W?ik4&yOQRPM!@tN8QTUrPad9{7n>9wky7XJef7YvcpL+rCok!pQPSM;ICZWYi&XJ{1Wju< z=496uoH&4eTLmV&1yi;eqs>J0?FX`!2z4mQc0G!OC}$iO@4p}+$}{%QYp%sm*lpWf z4rrhxL5UH4(@XHeO`OMSu~!x#hQe+=4h^{cpbJG+r^n?7U3h(cWD1^cgl27EWVF~) zS_n!4lq6AqKS9rJoGrCjU3Mg!gc$l(tjD3MDqde7lB{y5W)r8bKjNu>i2b`NFbXq2 z*?BcEdGiU7HKP7Lf}T4#TWYWt+dz&^)-?T8M&crs>sE91;VXIqU+C)lMAb$Y4Li$; zWr)zc8ZhVE12KPpnbBq>=(&rtWe--D9i%8INn!)TnDZi2mqp(V;XJY%tLw+jt4UBL#(O?vc38Z690^G#5*KN# zDo0in8mr2Q#6W z&8OGMt^m1H)ai9A@l__|H7`5Q7A=T@#lT07*qo IM6N<$f-rMyjQ{`u literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..3285ca4d3abba0a15c9615e4cab4d85dc75dc2dc GIT binary patch literal 1455 zcmV;g1yK5lP)3k?=HC^WN zAqyqv+{(9moP+pYG;TiYykR;%rV-DWvfaiFM_|CuNQ722V(pTC>;Y)*7+ zJSrjSaNHSDR#`VKUgazRk_REj|5TI{3KOKWRpPQrjE7o;5F)3}p`eub-^cf0;T4)h@oIO6T(6GrIZOn; z;-pW(!j0bo5S^;nC%qV4*4_;O_~7;F3o=K~xB+#Ki__qN7|7-7)fH9)k29@S^s;)I*zJ7y-`UcuNod|aq09lI@ zWcjxHeg+e-EZuT5!@n3Q<*Bw?w{jS%@6oxPw*h%7ROf?@QFufIn#f2rQPD)k=-Ikt z3WlV+KEsq$^@op$h(N22B6^4poqiZwmrQyn{6ORPVF8Dw{k^jC3wgCQ)jc%mu-Z;Y zm-ASt251t+t9Ne5_0g${eSV$nb%P8^dL|SmV6XMg)g%hzK=2E*htuVZ!>bt0@L26b z;|CI78OZyph{(F?tELlno2Agl`?*VtveVPXjgn3kZo+e_yrCY{>|)_lUEgbi4QQLwmZx6D7E9x1_~B0Pi0^efUrS_OCgP2*aRIik|oiAMZ=N zUAtrS?1BN~cb#bjU}(un8f~34wsvB1cJuTfWqp|FLGjZ^#BkAem{k2sydO7N(PBOl zQ@zPDyQcwxysy#;65~fCTulG8J&3Tz2<9C_6emnZJ zF;^YtqOGzEjZXa&fHD~G?_7M58dGCq`S#{KfTN{V=CqN?NjAR?yuaPxQHjIpI)mFg zslaqi04%CDiITJwX>)sOAI6Vbs6VPWt0AR6dZK2`?IYC1eg>cnX9+gCCBc7XQtaJG5=3X@geFGjO)^XNT6f+}G|1bCRtKdxi>!1Jt002ov JPDHLkV1iHf)4c!y literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..3285ca4d3abba0a15c9615e4cab4d85dc75dc2dc GIT binary patch literal 1455 zcmV;g1yK5lP)3k?=HC^WN zAqyqv+{(9moP+pYG;TiYykR;%rV-DWvfaiFM_|CuNQ722V(pTC>;Y)*7+ zJSrjSaNHSDR#`VKUgazRk_REj|5TI{3KOKWRpPQrjE7o;5F)3}p`eub-^cf0;T4)h@oIO6T(6GrIZOn; z;-pW(!j0bo5S^;nC%qV4*4_;O_~7;F3o=K~xB+#Ki__qN7|7-7)fH9)k29@S^s;)I*zJ7y-`UcuNod|aq09lI@ zWcjxHeg+e-EZuT5!@n3Q<*Bw?w{jS%@6oxPw*h%7ROf?@QFufIn#f2rQPD)k=-Ikt z3WlV+KEsq$^@op$h(N22B6^4poqiZwmrQyn{6ORPVF8Dw{k^jC3wgCQ)jc%mu-Z;Y zm-ASt251t+t9Ne5_0g${eSV$nb%P8^dL|SmV6XMg)g%hzK=2E*htuVZ!>bt0@L26b z;|CI78OZyph{(F?tELlno2Agl`?*VtveVPXjgn3kZo+e_yrCY{>|)_lUEgbi4QQLwmZx6D7E9x1_~B0Pi0^efUrS_OCgP2*aRIik|oiAMZ=N zUAtrS?1BN~cb#bjU}(un8f~34wsvB1cJuTfWqp|FLGjZ^#BkAem{k2sydO7N(PBOl zQ@zPDyQcwxysy#;65~fCTulG8J&3Tz2<9C_6emnZJ zF;^YtqOGzEjZXa&fHD~G?_7M58dGCq`S#{KfTN{V=CqN?NjAR?yuaPxQHjIpI)mFg zslaqi04%CDiITJwX>)sOAI6Vbs6VPWt0AR6dZK2`?IYC1eg>cnX9+gCCBc7XQtaJG5=3X@geFGjO)^XNT6f+}G|1bCRtKdxi>!1Jt002ov JPDHLkV1iHf)4c!y literal 0 HcmV?d00001 diff --git a/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/УзлыРегистрацииОбъекта/Items/ДеревоУзловОбменаАвторегистрация/ValuesPicture.png b/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/УзлыРегистрацииОбъекта/Items/ДеревоУзловОбменаАвторегистрация/ValuesPicture.png new file mode 100644 index 0000000000000000000000000000000000000000..d7cc10f56a78f5bdb6165e754e42904fa52f1f99 GIT binary patch literal 778 zcmV+l1NHogP)! zTS${(9L9h9+(vD=i8G^v(;0>tCWJ*4k(7xLOYlmm!0@KBs0#}cx-|%5MmL>=uA&13 zF(|qVIt>dkXyu`Xu993hQg{50U6``w`pQ(S2i}YK{l7f#^Stl#@&63W5t^pWm10g1 z7WMRbz#khJJm2(Bnl;R3^WeD#q3FylHFYgDLQhs0aJDuHXj;1%3cJOT(P9Aeirj!X z&*lZSE$F$W?ik4&yOQRPM!@tN8QTUrPad9{7n>9wky7XJef7YvcpL+rCok!pQPSM;ICZWYi&XJ{1Wju< z=496uoH&4eTLmV&1yi;eqs>J0?FX`!2z4mQc0G!OC}$iO@4p}+$}{%QYp%sm*lpWf z4rrhxL5UH4(@XHeO`OMSu~!x#hQe+=4h^{cpbJG+r^n?7U3h(cWD1^cgl27EWVF~) zS_n!4lq6AqKS9rJoGrCjU3Mg!gc$l(tjD3MDqde7lB{y5W)r8bKjNu>i2b`NFbXq2 z*?BcEdGiU7HKP7Lf}T4#TWYWt+dz&^)-?T8M&crs>sE91;VXIqU+C)lMAb$Y4Li$; zWr)zc8ZhVE12KPpnbBq>=(&rtWe--D9i%8INn!)TnDZi2mqp(V;XJY%tLw+jt4UBL#(O?vc38Z690^G#5*KN# zDo0in8mr2Q#6W z&8OGMt^m1H)ai9A@l__|H7`5Q7A=T@#lT07*qo IM6N<$f-rMyjQ{`u literal 0 HcmV?d00001 diff --git a/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/УзлыРегистрацииОбъекта/Items/ДеревоУзловОбменаКонтекстноеМенюИнвертироватьПометкуВсемУзлам/Picture.png b/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/УзлыРегистрацииОбъекта/Items/ДеревоУзловОбменаКонтекстноеМенюИнвертироватьПометкуВсемУзлам/Picture.png new file mode 100644 index 0000000000000000000000000000000000000000..89c8178eadfb014c8701699239c0ba23b649f0a2 GIT binary patch literal 517 zcmV+g0{Z=lP)(;6179( zUX0GIa@r+bsiX#~LTh(>KpGWiFf@opYOOvbuGZ@8|BMD?XG+$2 zG6Nq|ELGV1@r|e*vfqj59~})Egmd6~lsEn(0OMIK!@zTa zVv74d@E7QGcU1( zjq~@@Awvh8G6j^u{xz1ICGZ%D)`*-cItUO7ur=}z0e1Zxfv|}@P9DzY!=J!b;hl_oxcOI3=YLy6&-1Gy!eGy(UWcRj@PLLdHj*sNQ||FHi^y z9?Gfi_oxDZI#*0LH?1Tjxi%A=E2toY~nVv-oNbss3W^N8RnMg@u35FNb zJWi?0O#%b#atR4?_ZAyJP4zmq$n^90-pO-;o`ioh$kn?rx+&FpC%^zotl9n5)`g=0 O0000 Элементы.ДеревоУзловОбменаНомерСообщения Тогда + Возврат; + КонецЕсли; + + ТекущиеДаные = Элементы.ДеревоУзловОбмена.ТекущиеДанные; + Оповещение = Новый ОписаниеОповещения("ДеревоУзловОбменаВыборЗавершение", ЭтотОбъект, Новый Структура); + Оповещение.ДополнительныеПараметры.Вставить("Узел", ТекущиеДаные.Ссылка); + + Подсказка = НСтр("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 0000000000000000000000000000000000000000..e97da27eeb5573d8d4612128a3bb7234932c77a3 GIT binary patch literal 6074 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 AuK)l5 literal 0 HcmV?d00001 diff --git a/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Items/ДеревоМетаданныхАвторегистрация/ValuesPicture.png b/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Items/ДеревоМетаданныхАвторегистрация/ValuesPicture.png new file mode 100644 index 0000000000000000000000000000000000000000..d7cc10f56a78f5bdb6165e754e42904fa52f1f99 GIT binary patch literal 778 zcmV+l1NHogP)! zTS${(9L9h9+(vD=i8G^v(;0>tCWJ*4k(7xLOYlmm!0@KBs0#}cx-|%5MmL>=uA&13 zF(|qVIt>dkXyu`Xu993hQg{50U6``w`pQ(S2i}YK{l7f#^Stl#@&63W5t^pWm10g1 z7WMRbz#khJJm2(Bnl;R3^WeD#q3FylHFYgDLQhs0aJDuHXj;1%3cJOT(P9Aeirj!X z&*lZSE$F$W?ik4&yOQRPM!@tN8QTUrPad9{7n>9wky7XJef7YvcpL+rCok!pQPSM;ICZWYi&XJ{1Wju< z=496uoH&4eTLmV&1yi;eqs>J0?FX`!2z4mQc0G!OC}$iO@4p}+$}{%QYp%sm*lpWf z4rrhxL5UH4(@XHeO`OMSu~!x#hQe+=4h^{cpbJG+r^n?7U3h(cWD1^cgl27EWVF~) zS_n!4lq6AqKS9rJoGrCjU3Mg!gc$l(tjD3MDqde7lB{y5W)r8bKjNu>i2b`NFbXq2 z*?BcEdGiU7HKP7Lf}T4#TWYWt+dz&^)-?T8M&crs>sE91;VXIqU+C)lMAb$Y4Li$; zWr)zc8ZhVE12KPpnbBq>=(&rtWe--D9i%8INn!)TnDZi2mqp(V;XJY%tLw+jt4UBL#(O?vc38Z690^G#5*KN# zDo0in8mr2Q#6W z&8OGMt^m1H)ai9A@l__|H7`5Q7A=T@#lT07*qo IM6N<$f-rMyjQ{`u literal 0 HcmV?d00001 diff --git a/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Items/ДеревоМетаданныхДобавитьРегистрациюРезультатаЗапроса/Picture.png b/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Items/ДеревоМетаданныхДобавитьРегистрациюРезультатаЗапроса/Picture.png new file mode 100644 index 0000000000000000000000000000000000000000..9270d02ef401ee94873abf06c4baaeec706b3743 GIT binary patch literal 738 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 O0000 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 IM6N<$f-rMyjQ{`u literal 0 HcmV?d00001 diff --git a/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Items/СписокКонстантКонтекстноеМенюПоказатьРезультатВыгрузки/Picture.png b/Проект_деньги/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Items/СписокКонстантКонтекстноеМенюПоказатьРезультатВыгрузки/Picture.png new file mode 100644 index 0000000000000000000000000000000000000000..519885bb6259a925f156039cbe4b67b492f0cdab GIT binary patch literal 1563 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 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 +