![]() |
![]() |
![]() |
|
Расширение, перед, изменение параметра процедуры | ☑ | ||
---|---|---|---|---|
0
YaFedor
11.07.25
✎
14:57
|
Имеем процедуру:
ИзменитьДанные(ПараметрСтруктура) Экспорт в общем модуле. Берем этот модуль в расширение и делаем процедуру расширенную: &Перед("ИзменитьДанные") ИзменитьДанные(ПараметрСтруктура) Экспорт в которой ПараметрСтруктура.ОбрабатыватьДанные = Ложь; Предполагалось, что вставив процедуру перед вызовом, мы изменим параметр, чтобы вызываемая процедура отработала как надо. В итоге, в отладчике вижу, что по окончанию расширенной процедуры параметр изменен, в начале расширяемой процедуры параметр исходный. Т.е. нельзя расширением перед поменять параметры процедуры? |
|||
1
Ненавижу 1С
гуру
11.07.25
✎
15:03
|
(0) можно, но угадать, что ты там делаешь, без кода нельзя
|
|||
2
YaFedor
11.07.25
✎
15:09
|
(1) Вот код процедуры "Перед"
Процедура DO00001_ВставитьШтрихкодПродолжение_Расширенная_Перед(НастройкиПоложенияШК, Параметры) Экспорт Перем лРазрешеноВставлятьШтрихКодВручную; Перем лЭтоАвтоматическаяВставка; Перем лФайлРедактируется; ТекущиеДанные = Параметры.ТекущиеДанные; ТекущийФайл = Параметры.ТекущийФайл; ДанныеОШтрихкодеФайла = Параметры.ДанныеОШтрихкодеФайла; лРазрешеноВставлятьШтрихКодВручную = DO00001_ШтрихКодированиеСервер.РазрешеноВставлятьШтрихКодВручнуюВФайл(ТекущийФайл); лЭтоАвтоматическаяВставка = DO00001_ШтрихКодированиеСервер.ЭтоАвтоматическаяВставка(ДанныеОШтрихкодеФайла); // Если ручная вставка и запрещено, то просто укажем, что файл редактируется. Если лЭтоАвтоматическаяВставка Тогда Иначе Если лРазрешеноВставлятьШтрихКодВручную Тогда Иначе ДанныеОШтрихкодеФайла.ФайлРедактируется = Истина; КонецЕсли; КонецЕсли; КонецПроцедуры |
|||
3
YaFedor
11.07.25
✎
15:10
|
+
Исходный код процедуры: Процедура ВставитьШтрихкодПродолжение(НастройкиПоложенияШК, Параметры) Экспорт ТекущиеДанные = Параметры.ТекущиеДанные; ТекущийФайл = Параметры.ТекущийФайл; ДанныеОШтрихкодеФайла = Параметры.ДанныеОШтрихкодеФайла; Если НастройкиПоложенияШК = Неопределено Тогда Возврат; КонецЕсли; Если ТекущиеДанные.Расширение = "doc" Тогда #Если НЕ ВебКлиент Тогда Если ДанныеОШтрихкодеФайла <> Неопределено И ДанныеОШтрихкодеФайла.Свойство("ДвоичныеДанныеФайла") И (НастройкиПоложенияШК.ВысотаШК <> ДанныеОШтрихкодеФайла.НастройкиШтрихкода.ВысотаШК ИЛИ НастройкиПоложенияШК.ПоказыватьЦифры <> ДанныеОШтрихкодеФайла.НастройкиШтрихкода.ПоказыватьЦифры) Тогда ДанныеОШтрихкодеФайла.ДвоичныеДанныеИзображения = ШтрихкодированиеСервер.ПолучитьКартинкуШтрихкода(ДанныеОШтрихкодеФайла.Штрихкод,, НастройкиПоложенияШК.ВысотаШК, НастройкиПоложенияШК.ПоказыватьЦифры).ПолучитьДвоичныеДанные(); КонецЕсли; Состояние(НСтр("ru = 'Выполняется вставка штрихкода в файл. |Пожалуйста, подождите...'")); Если ДанныеОШтрихкодеФайла <> Неопределено И ДанныеОШтрихкодеФайла.Свойство("ДвоичныеДанныеФайла") Тогда Результат = ШтрихкодированиеКлиентСервер.ВставитьШтрихкодСИспользованиемНастроек(ТекущийФайл, НастройкиПоложенияШК, Истина, ДанныеОШтрихкодеФайла.ДвоичныеДанныеИзображения, ДанныеОШтрихкодеФайла.ДвоичныеДанныеФайла, ДанныеОШтрихкодеФайла.Расширение, ДанныеОШтрихкодеФайла.ФайлРедактируется, ДанныеОШтрихкодеФайла.ИзменениеФайловMSWordТолькоНаСервере); Иначе Результат = Ложь; КонецЕсли; Если НЕ Результат Тогда Результат = ШтрихкодированиеСервер.ВставитьШтрихкод(ТекущийФайл, ДанныеОШтрихкодеФайла); КонецЕсли; Состояние(); #Иначе Состояние(НСтр("ru = 'Выполняется вставка штрихкода в файл. |Пожалуйста, подождите...'")); Результат = ШтрихкодированиеСервер.ВставитьШтрихкод(ТекущийФайл, ДанныеОШтрихкодеФайла); Состояние(); #КонецЕсли Иначе Результат = ШтрихкодированиеСервер.ВставитьШтрихкод(ТекущийФайл, ДанныеОШтрихкодеФайла); КонецЕсли; Если Результат Тогда Текст = НСтр("ru = 'Изображение штрихкода успешно вставлено в файл!'"); ФайлСсылка = ТекущийФайл; Оповестить( "Запись_Файл", Новый Структура("Событие, Файл, Владелец, ЕстьЗашифрованныеИлиЗанятыеФайлы, ИдентификаторРодительскойФормы", "ДанныеФайлаИзменены", ФайлСсылка, Неопределено, Неопределено, Неопределено), ФайлСсылка); Иначе Текст = НСтр("ru = 'Не удалось вставить изображение штрихкода в файл'"); КонецЕсли; ПоказатьПредупреждение(, Текст); КонецПроцедуры |
|||
4
maxab72
11.07.25
✎
15:27
|
(2) ДанныеОШтрихкодеФайла - это локальная переменная?
|
|||
5
YaFedor
11.07.25
✎
15:44
|
(4) Да, локальная переменная процедуры
Параметры - это структура, ДанныеОШтрихкодеФайла - тоже структура |
|||
6
maxab72
11.07.25
✎
15:53
|
(5) и как тогда процедура ВставитьШтрихкодПродолжение узнает, что там что-то поменяли?
|
|||
7
YaFedor
11.07.25
✎
15:56
|
Вечер пятницы - это не время для работы.
Я тупанул, структура это же не таблица значений и присваивание - это не ссылка. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |