Первый способ
страницаПервый способ
Первый способ — найти нужный раздел в содержании и спускаться вниз по дереву, раскрывая нужные подразделы, свойства, ссылки и т. п.
Итак, перед нами первая строка нашего обработчика (листинг 5.19).
Листинг 5.19. Процедура «МатериалыКоличествоПриИзменении» (первая строка)
СтрокаТабличнойЧасти = Элементы.Материалы.ТекущиеДанные;
Чтобы понять этот код, нужно прежде всего понимать, в каком контексте он исполняется. Программный контекст зависит от того, в каком модуле располагается код. В данном случае процедура обработчика находится в модуле формы, следовательно, мы находимся в контексте модуля формы.
Будем изучать нашу строку последовательно слева направо. Что такое СтрокаТабличнойЧасти? Слева от оператора присваивания (=) находится либо какое-то свойство, доступное нам непосредственно в этом контексте, либо переменная.
Согласно алгоритму, изложенному в предыдущем разделе, мы должны проверить:
- Объявлена ли в модуле формы переменная СтрокаТабличнойЧасти? Откроем модуль формы (о том, как это сделать, рассказано здесь). Мы не видим здесь строки описания переменной (Перем СтрокаТабличнойЧасти;), значит это не переменная модуля формы.
- Есть ли у формы реквизит СтрокаТабличнойЧасти? Откроем форму документа
ПриходнаяНакладнаяи перейдем в окно реквизитов формы, расположенное справа вверху редактора форм (рис. 5.21).

Рис. 5.21. Список реквизитов формы документа «Приходная накладная»
Мы видим, что у формы один основной (он выделен жирным шрифтом) реквизит Объект. Значит, реквизита СтрокаТабличнойЧасти у формы нет.
- Есть ли у объекта УправляемаяФорма свойство СтрокаТабличнойЧасти? Посмотрим в синтакс-помощнике свойства управляемой формы. Откроем синтакс-помощник на закладке
Содержание. Управляемая форма — это объект интерфейса управляемого приложения, поэтому раскроем разделИнтерфейс (управляемый) > Управляемая форма. Затем раскроем объектУправляемаяФормаи егоСвойства(рис. 5.22).

Рис. 5.22. Список свойств объекта «УправляемаяФорма» в синтакс-помощнике
Свойства расположены в алфавитном порядке. Мы видим, что среди них нет свойства СтрокаТабличнойЧасти.
- Есть ли у расширения формы свойство СтрокаТабличнойЧасти? Мы знаем, что основной реквизит формы содержит данные объекта ДокументОбъект.ПриходнаяНакладная (см. рис. 5.21). Следовательно, в модуле формы становятся доступны свойства, методы объекта встроенного языка Расширение управляемой формы для документа (синтакс-помощник —
Интерфейс (управляемый) > Управляемая форма > Расширение документа). Посмотрим на них (рис. 5.23).

Рис. 5.23. Список свойств объекта «Расширение управляемой формы для документа» в синтакс-помощнике
Мы видим, что среди них нет свойства СтрокаТабличнойЧасти.
- Есть ли свойство глобального контекста СтрокаТабличнойЧасти? Откроем в синтакс-помощнике свойства глобального контекста (рис. 5.24).

Рис. 5.24. Список свойств глобального контекста в синтакс-помощнике
Мы видим, что среди них нет свойства СтрокаТабличнойЧасти. Выражение СтрокаТабличнойЧасти также не может быть именем неглобального общего модуля, так как к его процедурам следует обращаться через точку (СтрокаТабличнойЧасти.). Также это выражение не может быть экспортируемой процедурой глобального общего модуля, так как в этом случае мы могли бы только вызвать эту процедуру как СтрокаТабличнойЧасти (), а не присваивать ей что-то.
- Есть ли в модуле управляемого приложения экспортная переменная СтрокаТабличнойЧасти? Откроем модуль управляемого приложения (о том, как это сделать, рассказано здесь). Мы не видим здесь строки описания переменных (Перем СтрокаТабличнойЧасти Экспорт;), значит, это не переменная модуля управляемого приложения.
Таким образом, понятно, что выражение СтрокаТабличнойЧасти — это локальная переменная процедуры МатериалыКоличествоПриИзменении. В процессе выполнения программы ей присваивается какое-то значение. Переменные во встроенном языке не типизированные, поэтому в любой момент ей можно присвоить значение любого типа. Если переменная локальная, то есть используется только в контексте данной процедуры, то не требуется и ее явного объявления. Она объявляется в момент первого ее использования.
Справа от оператора присваивания находится выражение Элементы.Материалы.ТекущиеДанные. Чтобы понять, что такое Элементы, пройдемся еще раз по тому же алгоритму, что и в случае с локальной переменной СтрокаТабличнойЧасти.
- Объявлена ли в модуле формы переменная Элементы? Нет.
- Есть ли у формы реквизит Элементы? Нет.
- Есть ли у объекта УправляемаяФорма свойство Элементы? Посмотрим еще раз на список свойств объекта УправляемаяФорма. Найдем в нем строку
Элементы, значит это одно из свойств управляемой формы. Чтобы узнать, что это такое, дважды щелкнем мышью на этой строке (рис. 5.25).

Рис. 5.25. Описание свойства «Элементы» объекта «УправляемаяФорма» в синтакс-помощнике
В нижней части окна синтакс-помощника появится описание выделенного нами свойства. Из этого описания следует, что, используя свойство Элементы, мы получаем объект ВсеЭлементыФормы, который содержит коллекцию всех элементов формы. Чтобы узнать, что это такое, нажмем на соответствующую ссылку. Откроется описание коллекции ВсеЭлементыФормы (рис. 5.26).

Рис. 5.26. Описание коллекции «ВсеЭлементыФормы» в синтакс-помощнике
ПРИМЕЧАНИЕ
При этом дерево синтакс-помощника, отображаемое вверху, не изменилось. Если вы хотите найти, в какой ветке дерева находится открытое сейчас описание, нужно нажать кнопку Найти текущий элемент в дереве
, находящуюся над окном описания объектов синтакс-помощника.
Эта коллекция содержит элементы управляемой формы, размещенные на форме. Доступ к элементу осуществляется по имени.
Итак, что такое Элементы, мы знаем. Дальше через точку от этого объекта у нас написано: Элементы.Материалы. У коллекции есть такое свойство — <имя элемента управления>. Материалы — это имя некоторого элемента формы. Посмотрим на структуру элементов формы. Откроем форму документа ПриходнаяНакладная и перейдем в окно элементов формы, расположенное слева вверху редактора форм (рис. 5.27).

Рис. 5.27. Структура элементов формы документа «Приходная накладная»
В структуре элементов формы мы видим таблицу — Материалы. Открыв палитру свойств этой таблицы, в заголовке мы видим — Свойства: Таблица (рис. 5.28).

Рис. 5.28. Палитра свойств элемента формы — таблица
Значит, этот элемент формы является таблицей, и, следовательно, нам нужен объект коллекции элементов формы ТаблицаФормы. Чтобы узнать, что это такое, нажмем на соответствующую ссылку (см. рис. 5.26). Мы увидим список свойств объекта ТаблицаФормы. Свойства расположены в алфавитном порядке (рис. 5.29).

Рис. 5.29. Список свойств объекта «ТаблицаФормы» в синтакс-помощнике
Итак, что такое Элементы.Материалы, мы знаем. Дальше через точку от этого объекта у нас написано: Элементы.Материалы.ТекущиеДанные. Прокрутив список свойств таблицы управляемой формы вниз, мы видим свойство ТекущиеДанные. Значит, это одно из свойств объекта ТаблицаФормы. Чтобы узнать, что это такое, дважды щелкнем мышью на этой строке (рис. 5.30).

Рис. 5.30. Описание свойства «Текущие Данные» объекта «ТаблицаФормы» в синтакс-помощнике
В нижней части окна синтакс-помощника появится описание выделенного нами свойства. Из этого описания следует, что, используя свойство ТекущиеДанные, мы получаем объект ДанныеФормыСтруктура, который содержит данные, находящиеся в текущей строке таблицы.
Значит, в результате выполнения первой строки обработчика СтрокаТабличнойЧасти = Элементы.Материалы.ТекущиеДанные в переменной СтрокаТабличнойЧасти у нас окажется объект типа ДанныеФормыСтруктура.
Теперь посмотрим на следующую строку обработчика (листинг 5.20).
Листинг 5.20. Процедура «МатериалыКоличествоПриИзменении» (вторая строка)
СтрокаТабличнойЧасти.Сумма = СтрокаТабличнойЧасти.Количество * СтрокаТабличнойЧасти.Цена;
Логично предположить, что Сумма, Количество и Цена — это какие-то свойства объекта ДанныеФормыСтруктура, который после выполнения первой строки находится в переменной СтрокаТабличнойЧасти. Чтобы узнать, что это такое, нажмем на соответствующую ссылку (см. рис. 5.30, 5.31).

Рис. 5.31. Описание объекта «ДанныеФормыСтруктура» в синтакс-помощнике
Из описания этого объекта следует, что, используя объект ДанныеФормыСтруктура, мы можем обратиться к данным конкретной колонки табличной части, указав имя колонки в качестве свойства объекта. То есть, используя выражение СтрокаТабличнойЧасти.Сумма, мы обращаемся к данным, которые находятся в колонке Сумма текущей строки таблицы. И в них помещается произведение данных, содержащихся в колонке Количество, на данные в колонке Цена.