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

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

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

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


или

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

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

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

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

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

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

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


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