diff --git "a/src/internal/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\321\215\321\210\320\270\321\200\321\203\320\265\320\274\321\213\320\265\320\224\320\260\320\275\320\275\321\213\320\265.os" "b/src/internal/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\321\215\321\210\320\270\321\200\321\203\320\265\320\274\321\213\320\265\320\224\320\260\320\275\320\275\321\213\320\265.os" index a2f0a03..52827a9 100644 --- "a/src/internal/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\321\215\321\210\320\270\321\200\321\203\320\265\320\274\321\213\320\265\320\224\320\260\320\275\320\275\321\213\320\265.os" +++ "b/src/internal/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\321\215\321\210\320\270\321\200\321\203\320\265\320\274\321\213\320\265\320\224\320\260\320\275\320\275\321\213\320\265.os" @@ -53,12 +53,7 @@ |{Функция} Декоратор_ИмяМетода(Декоратор_ОписаниеПараметровМетода) // {Экспорт} | | // {Декоратор_ПередСинхронизациейПолей} -| -| Если {Декоратор_ЭтоДекорируемыйМетод} Тогда -| ОбработкаДекоратора.СинхронизироватьПоля(ЭтотОбъект, Декоратор_ИсходныйОбъект); -| Иначе -| ОбработкаДекоратора.СинхронизироватьПоля(Декоратор_ИсходныйОбъект, ЭтотОбъект); -| КонецЕсли; +| // {Декоратор_СинхронизироватьПоляПеред} | | Декоратор_ВозвращаемоеИзМетодаЗначение = NULL; | @@ -70,11 +65,7 @@ | | Исключение | -| Если {Декоратор_ЭтоДекорируемыйМетод} Тогда -| ОбработкаДекоратора.СинхронизироватьПоля(Декоратор_ИсходныйОбъект, ЭтотОбъект); -| Иначе -| ОбработкаДекоратора.СинхронизироватьПоля(ЭтотОбъект, Декоратор_ИсходныйОбъект); -| КонецЕсли; +| // {Декоратор_СинхронизироватьПоляПосле} | | // {Декоратор_ПослеВызоваИсключения} | @@ -82,11 +73,7 @@ | | КонецПопытки; | -| Если {Декоратор_ЭтоДекорируемыйМетод} Тогда -| ОбработкаДекоратора.СинхронизироватьПоля(Декоратор_ИсходныйОбъект, ЭтотОбъект); -| Иначе -| ОбработкаДекоратора.СинхронизироватьПоля(ЭтотОбъект, Декоратор_ИсходныйОбъект); -| КонецЕсли; +| // {Декоратор_СинхронизироватьПоляПосле} | | Если Декоратор_ВозвращаемоеИзМетодаЗначение = Декоратор_ИсходныйОбъект Тогда | Декоратор_ВозвращаемоеИзМетодаЗначение = ЭтотОбъект; diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\275\321\201\321\202\321\200\321\203\320\272\321\202\320\276\321\200\320\224\320\265\320\272\320\276\321\200\320\260\321\202\320\276\321\200\320\260.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\275\321\201\321\202\321\200\321\203\320\272\321\202\320\276\321\200\320\224\320\265\320\272\320\276\321\200\320\260\321\202\320\276\321\200\320\260.os" index 4985986..f220b4b 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\275\321\201\321\202\321\200\321\203\320\272\321\202\320\276\321\200\320\224\320\265\320\272\320\276\321\200\320\260\321\202\320\276\321\200\320\260.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\275\321\201\321\202\321\200\321\203\320\272\321\202\320\276\321\200\320\224\320\265\320\272\320\276\321\200\320\260\321\202\320\276\321\200\320\260.os" @@ -438,9 +438,20 @@ НовыйМетод = СтрЗаменить(НовыйМетод, "// {Экспорт}", "Экспорт"); НовыйМетод = СтрЗаменить(НовыйМетод, "{Функция}", "Функция"); НовыйМетод = СтрЗаменить(НовыйМетод, "{КонецФункции}", "КонецФункции"); - НовыйМетод = СтрЗаменить(НовыйМетод, "{Декоратор_ЭтоДекорируемыйМетод}", "Истина"); НовыйМетод = СтрЗаменить(НовыйМетод, "// {Декоратор_ТекстМетода}", ТекстМетода); - + + НовыйМетод = СтрЗаменить( + НовыйМетод, + "// {Декоратор_СинхронизироватьПоляПеред}", + "ОбработкаДекоратора.СинхронизироватьПоля(ЭтотОбъект, Декоратор_ИсходныйОбъект);" + ); + + НовыйМетод = СтрЗаменить( + НовыйМетод, + "// {Декоратор_СинхронизироватьПоляПосле}", + "ОбработкаДекоратора.СинхронизироватьПоля(Декоратор_ИсходныйОбъект, ЭтотОбъект);" + ); + ДобавитьПерехватчикиМетода(ИмяМетода, НовыйМетод, Истина); НовыйМетод = НовыйМетод + Символы.ПС; @@ -473,10 +484,22 @@ НовыйМетод = СтрЗаменить(НовыйМетод, "// {Экспорт}", "Экспорт"); НовыйМетод = СтрЗаменить(НовыйМетод, "{Функция}", "Функция"); НовыйМетод = СтрЗаменить(НовыйМетод, "{КонецФункции}", "КонецФункции"); - НовыйМетод = СтрЗаменить(НовыйМетод, "{Декоратор_ЭтоДекорируемыйМетод}", "Ложь"); НовыйМетод = СтрЗаменить(НовыйМетод, "// {Декоратор_ВыполняемаяСтрока}", ВыполняемаяСтрока); НовыйМетод = СтрЗаменить(НовыйМетод, "// {Декоратор_ВозвращаемоеЗначение}", ВозвращаемоеЗначение); - + + // Для будущих археологов, если вы подумаете что нужно тут добавить + // ОбработкаДекоратора.СинхронизироватьПоля(Декоратор_ИсходныйОбъект, ЭтотОбъект); + // то проверьте что работает АктивнаяЗапись в библиотеки entity + // сейчас этого куска нет потому что при его наличии в декораторе задавятся поля + // декоратора которые были заполнены не через методы, а просто установкой свойств. + НовыйМетод = СтрЗаменить(НовыйМетод, "// {Декоратор_СинхронизироватьПоляПеред}", ""); + + НовыйМетод = СтрЗаменить( + НовыйМетод, + "// {Декоратор_СинхронизироватьПоляПосле}", + "ОбработкаДекоратора.СинхронизироватьПоля(ЭтотОбъект, Декоратор_ИсходныйОбъект);" + ); + ДобавитьПерехватчикиМетода(ИмяМетода, НовыйМетод); ОбластьМетодов = ОбластьМетодов + НовыйМетод; diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\276\321\201\321\202\321\200\320\276\320\270\321\202\320\265\320\273\321\214\320\224\320\265\320\272\320\276\321\200\320\260\321\202\320\276\321\200\320\260.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\276\321\201\321\202\321\200\320\276\320\270\321\202\320\265\320\273\321\214\320\224\320\265\320\272\320\276\321\200\320\260\321\202\320\276\321\200\320\260.os" index db8a70b..32de382 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\276\321\201\321\202\321\200\320\276\320\270\321\202\320\265\320\273\321\214\320\224\320\265\320\272\320\276\321\200\320\260\321\202\320\276\321\200\320\260.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\276\321\201\321\202\321\200\320\276\320\270\321\202\320\265\320\273\321\214\320\224\320\265\320\272\320\276\321\200\320\260\321\202\320\276\321\200\320\260.os" @@ -442,7 +442,17 @@ НовыйМетод = Метод.Описание(); - НовыйМетод = СтрЗаменить(НовыйМетод, "{Декоратор_ЭтоДекорируемыйМетод}", "Истина"); + НовыйМетод = СтрЗаменить( + НовыйМетод, + "// {Декоратор_СинхронизироватьПоляПеред}", + "ОбработкаДекоратора.СинхронизироватьПоля(ЭтотОбъект, Декоратор_ИсходныйОбъект);" + ); + + НовыйМетод = СтрЗаменить( + НовыйМетод, + "// {Декоратор_СинхронизироватьПоляПосле}", + "ОбработкаДекоратора.СинхронизироватьПоля(Декоратор_ИсходныйОбъект, ЭтотОбъект);" + ); ДобавитьПерехватчикиМетода(ИмяМетода, НовыйМетод); @@ -458,7 +468,18 @@ НовыйМетод = Метод.Описание(); - НовыйМетод = СтрЗаменить(НовыйМетод, "{Декоратор_ЭтоДекорируемыйМетод}", "Ложь"); + // Для будущих археологов, если вы подумаете что нужно тут добавить + // ОбработкаДекоратора.СинхронизироватьПоля(Декоратор_ИсходныйОбъект, ЭтотОбъект); + // то проверьте что работает АктивнаяЗапись в библиотеки entity + // сейчас этого куска нет потому что при его наличии в декораторе задавятся поля + // декоратора которые были заполнены не через методы, а просто установкой свойств. + НовыйМетод = СтрЗаменить(НовыйМетод, "// {Декоратор_СинхронизироватьПоляПеред}", ""); + + НовыйМетод = СтрЗаменить( + НовыйМетод, + "// {Декоратор_СинхронизироватьПоляПосле}", + "ОбработкаДекоратора.СинхронизироватьПоля(ЭтотОбъект, Декоратор_ИсходныйОбъект);" + ); ДобавитьПерехватчикиМетода(Метод.ИмяМетода(), НовыйМетод); diff --git "a/tests/\320\242\320\265\321\201\321\202\321\213_\320\237\320\276\321\201\321\202\321\200\320\276\320\270\321\202\320\265\320\273\321\214\320\224\320\265\320\272\320\276\321\200\320\260\321\202\320\276\321\200\320\260.os" "b/tests/\320\242\320\265\321\201\321\202\321\213_\320\237\320\276\321\201\321\202\321\200\320\276\320\270\321\202\320\265\320\273\321\214\320\224\320\265\320\272\320\276\321\200\320\260\321\202\320\276\321\200\320\260.os" index 66d70d6..0d59eaf 100644 --- "a/tests/\320\242\320\265\321\201\321\202\321\213_\320\237\320\276\321\201\321\202\321\200\320\276\320\270\321\202\320\265\320\273\321\214\320\224\320\265\320\272\320\276\321\200\320\260\321\202\320\276\321\200\320\260.os" +++ "b/tests/\320\242\320\265\321\201\321\202\321\213_\320\237\320\276\321\201\321\202\321\200\320\276\320\270\321\202\320\265\320\273\321\214\320\224\320\265\320\272\320\276\321\200\320\260\321\202\320\276\321\200\320\260.os" @@ -834,7 +834,7 @@ ПерехватчикПередСинхронизациейПолей = Новый Перехватчик("ВернутьСебя") .ТипПерехватчика(ТипыПерехватчиковМетода.ПередСинхронизациейПолей) - .Тело("Декоратор_ИсходныйОбъект.Поле = 124;"); + .Тело("Поле = 124;"); Декоратор = Новый ПостроительДекоратора(МойКласс) .Метод(НовыйМетод)