Вход | Регистрация

1С:Предприятие :: 1С:Предприятие 8 общая

Расширение: Использовать переменную заимствованного модуля

Расширение: Использовать переменную заимствованного модуля
Я
   moto77
 
18.07.18 - 14:50
Платформа 8.3.11.2924, БП 3.0.64.28
Задача: немного дополнить функцию общего модуля, в котором происходит создание заполнение таблицы значений, нужно просто добавить в эту таблицу строки.
Пытаюсь вот так:

&Вместо("ПолучитьТаблицуВидовАктивовИОбязательств")
Функция Расш_ПолучитьТаблицуВидовАктивовИОбязательств()
    // Вставить содержимое метода.

    Результат = ПродолжитьВызов();
    НоваяСтрока = ТаблицаВидовАктивовИОбязательств.Добавить();
    Возврат Результат;
КонецФункции

Выдает ошибку, что переменная не определена (ТаблицаВидовАктивовИОбязательств).
Есть ли возможность указать, что переменная уже объявлена в заимствованном модуле?
 
 
   Lamer1C
 
1 - 18.07.18 - 15:07
(0) Из-за того, что &Вместо таблица не создается, вероятно. Используйте &После и дополняйте.
   Salimbek
 
2 - 18.07.18 - 15:12
&(0) Если используешь Вместо, то надо полностью продублировать оригинальный код и в конце дописать нужное тебе. Но, судя по задаче, правильнее использовать &После как и говорит (1).
   Вафель
 
3 - 18.07.18 - 15:15
(1) а что разве После видит все переменные исходной процедуры?
   moto77
 
4 - 18.07.18 - 15:18
При создании расширения не дало использовать ничего, кроме &Вместо. Видимо, потому, что это функция, а не процедура.
Да в любом случае переменные расширяемого модуля не видны в Расширении.
Не хотелось ведь код дублировать ради маленькой вставки, ну ладно, придется.
   Aleksey
 
5 - 18.07.18 - 15:19
Потому что неправильный код. Нужно
или

  Результат = ПродолжитьВызов();
    НоваяСтрока = Результат.Добавить();
    Возврат Результат;


или

  ТаблицаВидовАктивовИОбязательств = ПродолжитьВызов();
    НоваяСтрока = ТаблицаВидовАктивовИОбязательств.Добавить();
    Возврат Результат;
   moto77
 
6 - 18.07.18 - 15:20
Я думал, может есть какая-то директива, указывающая на то, что переменная уже ранее объявлена.

Пригодилось бы не только для этой задачи, а вообще.
   Aleksey
 
7 - 18.07.18 - 15:20
(4) поправь код и ненужно дублировать

Только смысл в добавлении пустой строки в таблицу?
   Aleksey
 
8 - 18.07.18 - 15:21
(6) Ты о чем? Представь что ты вызываешь в своем коде функцию. Какую дерективу ты хочешь чтобы были доступны локальные переменные внутри функции? Или дублируй код функции или работай с результатом возвращаемый функцией, а не с локальными переменными
   Вафель
 
9 - 18.07.18 - 15:24
(8) а в других языках можно ...
   Aleksey
 
10 - 18.07.18 - 15:25
Например пример

Функция ИнициализироватьТЗ()
  Результат = новый ТаблицаЗначений;
  Результат.Колонки.Добавить("ПерваяКолонка");
  Возврат Результат;
КонецФункции

Процедура МояПроцедура()

  МояТЗ = инициализироватьТЗ();

Далее ты с этой тз как работаешь, как с переменной   Результат потому что так она внутри функции объявлена, или с переменной МояТЗ?
Т.е. если по ходу хочешь добавить колонки в процедура МояПроцедура ты как пишешь 
  Результат.Колонки.Добавить();
или 
  МояТЗ.Колонки.Добавить();
?


Так почему если тут нет вопросов, то аналогичный код в расширении у тебя вызывает недоумение?
 
 Рекламное место пустует
   moto77
 
11 - 18.07.18 - 15:26
(7) Как всё просто, спасибо!
   Aleksey
 
12 - 18.07.18 - 15:26
(9) Это как?
Т.е. используя внутри какой нибудь функции строку а:=0, я в любом месте кода в любой процедлуре могу обратиться к этой переменной а и там будет 0? Или он пошлет скажет что не объявлена переменная?

Список тем форума
Рекламное место пустует  Рекламное место пустует
2 + 2 = 3.9999999999999999999999999999999...
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует