Работа с отладчиком в процессе изучения встроенного языка «1С:Предприятие 8» (составил (Москва))

Отладчик – это удобный инструмент, помогающий облегчить разработку программных модулей системы «1С:Предприятие 8». В настоящей заметке мы обратим особое внимание на использовании отладчика для изучения встроенного языка.

При изучении работы отладчика мы будем использовать материалы учебного курса «Основы конфигурирования в системе "1С:Предприятие 8.0"», разработанного Интернет-университетом информационных технологий (http://www. *****/department/office/intro1c/­5/intro1c_5.html).

Как мы отмечали в наших заметках «Учебные комментарии к программам на встроенном языке «1С:Предприятие 8»» (см. http://*****/files/­Radchenko_Programmy. zip), особую сложность, на наш взгляд, имеют элементы второго типа - объектно-ориентированные, и, в частности, данные агрегатного типа[1]. Для исследования и анализа этих переменных можно использовать возможности отладчика.

Постараемся рассмотреть деятельность отладчика более подробно.

Важное предварительное замечание. Настоящие заметки предназначены для начинающих программистов в системе «1С:Предприятие 8» и являются своего рода дневником в процессе изучения программирования. Поэтому мы просим не судить их слишком строго и сообщить нам о наличии ошибок и неточностей по электронному адресу <*****@***ru>. В то же время мы надеемся, что наши заметки принесут некоторую пользу другим изучающим платформу «1С:Предприятие 8». Поэтому мы рискнули поместить данный текст в интернете, в открытом доступе.

НЕ нашли? Не то? Что вы ищете?

Отладчик предоставляет программисту большие дополнительные возможности. Нас же, в первую очередь, будут интересовать а) пошаговое выполнение модуля; б) расстановка точек останова; в) просмотр динамики свойств объектов и значений переменных агрегатного типа в процессе отладки и др.

Для того, чтобы использовать отладчик необходимо, чтобы одновременно с конфигуратором была запущена отлаживаемая конфигурация в режиме "1С:Предприятие".

Меню отладчика «Отладка» в конфигураторе имеет следующие опции:

1) Начать отладку (F5).

2) Останавливаться по ошибке.

3) Подключиться.

4) Отключиться.

5) Точка останова (F9).

6) Точка останова с условием...

7) Отключить точку останова (Ctrl + Shift + F9).

8) Убрать все точки останова.

9) Отключить все точки останова.

10) Список точек останова (Alt + F9).

11) Замер производительности.

Для использования отладчика необходимо выполнить следующие действия:

1. Запускаем конфигуратор.

2. Открываем модуль, предназначенный для отладки.

В качестве примера мы разберем следующую процедуру в форме документа «ОказаниеУслуги» из книги «1С:Предприятие 8.0: Практическое пособие разработчика: Примеры и типовые приемы» (М.: 1С-Паблишинг, 2006. С. 126-128). Эта процедура активизируется при изменении параметра «Номенклатура» табличной части «ПереченьНоменклатуры» указанного документа.

Процедура ПереченьНоменклатурыНоменклатураПриИзменении(Элемент)[2]

//получить текущую строку табличной части

СтрокаТабличнойЧасти = ЭлементыФормы. ПереченьНоменклатуры. Теку­щиеДанные;

//установить цену

СтрокаТабличнойЧасти. Цена = РозничнаяЦена(Дата, Элемент. Значение);

//пересчитать сумму строки

РассчитатьСумму(СтрокаТабличнойЧасти);

//установить вид номенклатуры

СтрокаТабличнойЧасти. ВидНоменклатуры = Элемент. Значение. ВидНомен­клатуры;

КонецПроцедуры

3. Расставляем точку останова.

Для этого подведем курсор к первому оператору процедуры:

СтрокаТабличнойЧасти = ЭлементыФормы. ПереченьНоменклатуры. Теку­щиеДанные;

и выберем опцию Отладка - Точка останова (F9).

Слева от оператора появился значок (большая красная точка).

4. Запускаем режим «1С:Предприятие» для выбранной конфигурации, а если режим уже был запущен, то выполним команду "Отладка - Подключиться".

5. Выполним действия, которые вызовут исполнение отлаживаемого модуля (в данном случае, откроем один из документов «Оказание услуги» (Операции – Документы - Оказание услуги) и изменим одно из значений параметра «Номенклатура» в табличной части документа).

Откроется конфигуратор, и в значке первой точки останова появится желтая стрелочка.

При этом количество опций в меню «Отладка» увеличится:

1) Продолжить отладку (F5).

2) Перезапустить (Ctrl + Shift + F5).

3) Прекратить (Shift + F5).

4) Остановить.

5) Останавливаться по ошибке.

6) Подключиться.

7) Отключиться.

8) Шагнуть в (F11).

9) Шагнуть через (F10).

10) Шагнуть из (Shift + F11).

11) Идти до курсора (Shift + F10).

12) Текущая строка.

13) Точка останова (F9).

14) Точка останова с условием...

15) Отключить точку останова (Ctrl + Shift + F9).

16) Убрать все точки останова.

17) Отключить все точки останова.

18) Список точек останова (Alt + F9).

19) Вычислить выражение (Shift + F9).

20) Табло (Ctrl + Alt + W).

21) Стек вызовов (Ctrl + Alt + C).

22) Замер производительности.

6. Проведем пошаговое выполнение модуля.

Для этого выберем опцию «Отладка - Шагнуть через» или F10. Желтая стрелочка переместилась на следующую строку.

Действие пошаговой отладки можно повторять.

Теперь попробуем рассмотреть текущие свойства используемых объектов и параметры переменных. Это поможет нам лучше понять их структуру и логику.

Вначале рассмотрим свойства наиболее сложного из объектов (в данном случае) – объекта «Элемент», передаваемого процедуре.

Для этого подведем курсор в модуле формы документа к имени этого объекта в выражении:

Процедура ПереченьНоменклатурыНоменклатураПриИзменении(Элемент)

и нажмем на правую кнопку мыши.

Выберем опцию «Вычислить выражение» (вместо этого можно нажать клавиши Shift + F9).

Появится окно «Выражение» для объекта «Элемент».

Нажмем на кнопку «Включить в табло» в правой части окна.

В нижней части экрана откроется табло с колонками «Выражение», «Значение» и «Тип».

Раскроем свойства объекта «Элемент» нажатием на знак «+» слева от слова «Элемент» в колонке «Выражение».

Отладчик позволяет выделение необходимой части табло клавишами Shift + Стрелочка и его копирования стандартным сочетанием клавишам Ctrl + C и Ctrl + V.

Выражение

Значение

Тип

Элемент

ПолеВвода

ПолеВвода

АвтоВыборНезаполненного

ложь

Булево

АвтоОтметкаНезаполненного

ложь

Булево

АвтоПереносСтрок

истина

Булево

БыстрыйВыбор

ложь

Булево

ВертикальнаяПолосаПрокрутки

Не использовать

ИспользованиеПоло-
сыПрокрутки

ВертикальноеПоложение

Прижать вверх

ВертикальноеПоложение

ВыбиратьТип

истина

Булево

ВыборГруппИЭлементов

Группы и элементы

ИспользованиеГрупп-
ИЭлементов

ВыборНезаполненного

ложь

Булево

ВыборПоВладельцу

Неопределено

ВыделенныйТекст

"Ремонт отечественного телевизора"

Строка

ВыделятьОтрицательные

ложь

Булево

ВысотаСпискаВыбора

0

Число

ГоризонтальнаяПолосаПрокрутки

Не использовать

ИспользованиеПолосыПро-
крутки

ГоризонтальноеПоложение

Автоматически

ГоризонтальноеПоложе-
ние

Доступность

истина

Булево

Значение

Ремонт отечественного телевизора

СправочникСсылка. Но-
менклатура

ВидНоменклатуры

Услуга

ПеречислениеСсыл-
ка. ВидыНоменклатуры

Владелец

Неопределено

Код

10

Число

Наименование

"Ремонт отечественного телевизора"

Строка

ПометкаУдаления

ложь

Булево

Предопределенный

ложь

Булево

Родитель

Телевизоры

СправочникСсылка. Но-
менклатура

Ссылка

Ремонт отечественного телевизора

СправочникСсылка. Но-
менклатура

ЭтоГруппа

ложь

Булево

Картинка

Картинка

Картинка

Вид

Пустая

ВидКартинки

КартинкаКнопкиВыбора

Картинка

Картинка

Вид

Пустая

ВидКартинки

КнопкаВыбора

истина

Булево

КнопкаОткрытия

ложь

Булево

КнопкаОчистки

истина

Булево

КнопкаРегулирования

ложь

Булево

КнопкаСпискаВыбора

ложь

Булево

ОграничениеТипа

ОписаниеТипов

КвалификаторыДаты

КвалификаторыДаты

КвалификаторыДаты

КвалификаторыСтроки

КвалификаторыСтроки

КвалификаторыСтроки

КвалификаторыЧисла

КвалификаторыЧисла

КвалификаторыЧисла

ОтметкаНезаполненного

ложь

Булево

Подсказка

""

Строка

ПрозрачныйФон

ложь

Булево

Рамка

Рамка

Рамка

Вид

Абсолютная

ВидРамки

ТипРамки

Неопределено

Толщина

0

Число

РедактированиеТекста

истина

Булево

РежимВыбораИзСписка

ложь

Булево

РежимВыбораНезаполненного

При нажатии Enter

РежимВыбораНезапол-
ненного

СочетаниеКлавиш

СочетаниеКлавиш

СочетаниеКлавиш

Alt

ложь

Булево

Ctrl

ложь

Булево

Shift

ложь

Булево

Клавиша

Нет

Клавиша

СписокВыбора

СписокЗначений

ТипЗначения

Справочник ссылка: Номенклатура

ОписаниеТипов

КвалификаторыДаты

КвалификаторыДаты

КвалификаторыДаты

КвалификаторыСтроки

КвалификаторыСтроки

КвалификаторыСтроки

КвалификаторыЧисла

КвалификаторыЧисла

КвалификаторыЧисла

ТолькоПросмотр

ложь

Булево

Формат

""

Строка

ЦветРамки

стиль: Рамка

Цвет

ЦветТекста

Авто

Цвет

ЦветТекстаКнопки

стиль: Текст кнопки

Цвет

ЦветТекстаПоля

Авто

Цвет

ЦветФона

255, 255, 255

Цвет

ЦветФонаКнопки

стиль: Фон кнопки

Цвет

ЦветФонаПоля

Авто

Цвет

ШиринаСпискаВыбора

0

Число

Шрифт

Авто

Шрифт

ЭлементСвязиПоТипу

1

Число

Свойства объекта «Элемент» в табло упорядочены по алфавиту.

В числе ключевых свойств можно упомянуть следующие:

Выражение

Значение

Тип

Элемент

ПолеВвода

ПолеВвода

Значение

Ремонт отечественного телевизора

СправочникСсылка. Но-
менклатура

ВидНоменклатуры

Услуга

ПеречислениеСсыл-
ка. ВидыНоменклатуры

Код

10

Число

Нетрудно видеть, что в процессе пошагового выполнения процедуры значения свойств объекта «Элемент» не изменяются.

В процессе отладки объект «Элемент» можно удалить из табло клавишей «Delete».

Соответственно ключевые параметры свойства «ЭлементыФормы», используемого для доступа к элементам управления, расположенным на форме, следующие:

Выражение

Значение

Тип

ЭлементыФормы

ЭлементыФормы

ЭлементыФормы

Дата

ПолеВвода

ПолеВвода

Значение

15.06.2007 8:02:10

Дата

Клиент

ПолеВвода

ПолеВвода

Значение

СправочникСсылка. Клиенты

Код

1

Число

Ссылка

СправочникСсылка. Клиенты

Мастер

ПолеВвода

ПолеВвода

Значение

СправочникСсылка. Сотрудники

Код

2

Число

Ссылка

СправочникСсылка. Сотрудники

Номер

ПолеВвода

ПолеВвода

Значение

4

Число

ПереченьНоменкла-
туры

ТабличноеПоле

ТабличноеПоле

Значение

ДокументТаблич-
наяЧасть. Оказа-
ниеУслуги. Пере-
ченьНоменклатуры

ДокументТабличнаяЧасть. Оказа-
ниеУслуги. ПереченьНоменклатуры

ТекущиеДанные

ДокументТаблич-
наяЧастьСтрока. Ока-
заниеУслуги. Пере-
ченьНоменклатуры

ДокументТабличнаяЧастьСтро-
ка. ОказаниеУслуги. ПереченьНо-
менклатуры

ВидНоменклатуры

Услуга

ПеречислениеСсылка. Ви-
дыНоменклатуры

Количество

1

Число

Номенклатура

Ремонт отечественного телевизора

СправочникСсылка. Номен-
клатура

НомерСтроки

3

Число

Стоимость

600

Число

Сумма

800

Число

Цена

800

Число

Склад

ПолеВвода

ПолеВвода

Значение

Основной

СправочникСсылка. Склады

Код

1

Число

Ссылка

Основной

СправочникСсылка. Склады

Параметры «ЭлементыФормы. ПереченьНоменклатуры. ТекущиеДанные. Сумма» и «ЭлементыФормы. ПереченьНоменклатуры. ТекущиеДанные. Цена» (а, в общем случае, «ЭлементыФормы. ПереченьНоменклатуры. ТекущиеДанные. ВидНоменклатуры») изменяются в процессе выполнения процедуры.

Рассмотрим изменения значения переменной «СтрокаТабличнойЧасти» при изменении номенклатуры «Ремонт импортного телевизора» на «Ремонт отечественного телевизора».

Поместим эту переменную в табло аналогичным образом (подведем курсор в модуле формы документа к имени этой переменной в первом операторе процедуры, нажмем на правую кнопку мыши, выберем опцию «Вычислить выражение» (или нажмем на клавиши Shift + F9) и нажмем на кнопку «Включить в табло» в правой части появившегося окна).

После останова на первом операторе в табло появится следующая таблица:

Выражение

Значение

Тип

СтрокаТабличнойЧасти

Неопределено

Это правильно, так как к этому моменту переменная «СтрокаТабличнойЧасти» еще не определена и, соответственно, никакого значения у нее еще нет.

При нажатии на клавишу F10 и переходе к следующему оператору:

СтрокаТабличнойЧасти. Цена = РозничнаяЦена(Дата, Элемент. Значение);

Выполнился оператор получения текущей строки табличной части:

СтрокаТабличнойЧасти = ЭлементыФормы. ПереченьНоменклатуры. Теку­щиеДанные;

Таблица в табло меняется:

Выражение

Значение

Тип

СтрокаТабличнойЧасти

ДокументТабличнаяЧастьСтро-
ка. ОказаниеУслуги. Пере-
ченьНоменклатуры

ДокументТабличнаяЧастьСтро-
ка. ОказаниеУслуги. ПереченьНо-
менклатуры

ВидНоменклатуры

Услуга

ПеречислениеСсылка. ВидыНо-
менклатуры

Количество

1

Число

Номенклатура

Ремонт отечественного телевизора

СправочникСсылка. Номенкла-
тура

ВидНоменклатуры

Услуга

ПеречислениеСсылка. Ви-
дыНоменклатуры

Владелец

Неопределено

Код

10

Число

Наименование

"Ремонт отечественного телевизора"

Строка

ПометкаУдаления

ложь

Булево

Предопределенный

ложь

Булево

Родитель

Телевизоры

СправочникСсылка. Номен-
клатура

Ссылка

Ремонт отечественного телевизора

СправочникСсылка. Номен-
клатура

ВидНоменклатуры

Услуга

ПеречислениеСсылка. Ви-
дыНоменклатуры

Владелец

Неопределено

Код

10

Число

Наименование

"Ремонт отечественного телевизора"

Строка

ПометкаУдаления

ложь

Булево

Предопределенный

ложь

Булево

Родитель

Телевизоры

СправочникСсылка. Номен-
клатура

Ссылка

Ремонт отечественного телевизора

СправочникСсылка. Номен-
клатура

ЭтоГруппа

ложь

Булево

ЭтоГруппа

ложь

Булево

НомерСтроки

3

Число

Стоимость

600

Число

Сумма

800

Число

Цена

800

Число

Снова нажали F10 и перешли на строчку:

РассчитатьСумму(СтрокаТабличнойЧасти);

Выполнился оператор установления цены:

СтрокаТабличнойЧасти. Цена = РозничнаяЦена(Дата, Элемент. Значение);

В результате цена изменилась с 800 руб. до 600 руб. (напоминаем, что производится изменения номенклатуры «Ремонт импортного телевизора» на «Ремонт отечественного телевизора»):

Выражение

Значение

Тип

СтрокаТабличнойЧасти

ДокументТабличнаяЧастьСтро-
ка. ОказаниеУслуги. Пере-
ченьНоменклатуры

ДокументТабличнаяЧастьСтро-
ка. ОказаниеУслуги. ПереченьНо-
менклатуры

(...)

(...)

(...)

Стоимость

600

Число

Сумма

800

Число

Цена

600

Число

Еще раз нажали F10 и перешли на строчку:

СтрокаТабличнойЧасти. ВидНоменклатуры = Элемент. Значение. ВидНомен­клатуры;

Выполнился оператор пересчета суммы строки:

РассчитатьСумму(СтрокаТабличнойЧасти);

В результате сумма изменилась с 800 руб. до 600 руб.

Выражение

Значение

Тип

СтрокаТабличнойЧасти

ДокументТабличнаяЧастьСтро-
ка. ОказаниеУслуги. Пере-
ченьНоменклатуры

ДокументТабличнаяЧастьСтро-
ка. ОказаниеУслуги. ПереченьНо-
менклатуры

(...)

(...)

(...)

Стоимость

600

Число

Сумма

600

Число

Цена

600

Число

Еще раз нажали F10 и перешли на строчку:

КонецПроцедуры

Выполнился оператор установления вида номенклатуры:

СтрокаТабличнойЧасти. ВидНоменклатуры = Элемент. Значение. ВидНомен­клатуры;

В данном случае вид номенклатуры не изменился, так как и «Ремонт отечественного телевизора», и «Ремонт импортного телевизора» имеют значения вида номенклатуры «Услуга».

В заключение необходимо отметить, что, по нашему мнению, для закрепления понимания структуры объектов и переменных в системе «1С:Предприятие 8» начинающему программисту будет чрезвычайно полезно рассмотреть динамику свойств объектов и значений переменных агрегатного типа в процессе отладки еще в нескольких учебных процедурах (например, содержащих запросы, вывод различных печатных форм и др.).

[1] Подробнее о данных агрегатного типа см., например: 1С:Предприятие: программирование для всех. Базовые объекты и расчеты на одной дискете. - М.: Диалог-МИФИ, 2005; Михайлов как дважды два. – СПб.: Тритон, 2005 и др.

[2] Здесь и далее тексты программ выделены цветом, а примечания (им предшествует знак //) – курсивом.