Главная » 1С Предприятие » РЕДАКТИРОВАНИЕ ТАБЛИЦЫ ЗНАЧЕНИЙ В ДИАЛОГЕ

0

Создадим  в  обработке Проба  диалог,  содержащий   таблицу значений, дав  ей  имя тЗнач  (рис. 3.8), и  свяжем  с таблицей  процедуру Изменить, задав  ее  имя на  закладке Дополнительно в  поле  Формула, в котором имя процедуры указывается  с с охранением  круглых  скобок Изменить().

Рис. 3.8. Диалог для вывода списка подразделений в таблицу значений тЗнач

Напишем  код  процедуры Изменить, позволяющий  редактировать значение ячейки таблицы  тЗнач,  после  двойного  удара  мышью  по  этой  ячейке  или после  выбора ячейки и нажатия на клавишу Enter.  Таблицу тЗнач  заполним  данными из табл.  3.4.

Алгоритм  процедуры  Изменить:

1.      Определить,  вызывая  методы   ТекущаяСтрока  и   ТекущаяКолонка,  номер  строки номСтроки    и  номер   столбца   номСтолбца,  на  пересечении  которых  находится  редактируемая  ячейка.

2.       Используя  метод   ПолучитьПараметрыКолонки,  определить   тип  данных   столбца, с  номером  номСтолбца.

3.       Вызвать   диалог   ввода  данных    найденного   в    п.   2   типа,   используя   функцию ВвестиЗначение,  и  задать   в  нем  новое  значение  ячейки.  При  открытии  диалога передать  в  него  старое  значение ячейки.

4.       Записать,  применив  метод  УстановитьЗначение,  в  редактируемую  ячейку  введен ное в п. 3 значение.

Также   в   модуль   обработки   войдут  создающая  таблицу  процедура  ПриОткрытии и инициализирующая   таблицу    процедура    Заполнить,    которую     мы     заимствуем из разд.  3.4.1.  В  процедуре  Выполнить  мы  будем  обращаться к  процедуре Заполнить с тем, чтобы  восстанавливать первоначальный вид таблицы  значений.

процедура Изменить()

перем номСтроки, номСтолбца;

перем  типДан, флаг;                        //              Тип редактируемых  данных

перем  значен;                        //                          Значение  редактируемой ячейки номСтроки = тЗнач.ТекущаяСтрока();

тЗнач.ТекущаяКолонка(, номСтолбца);

тЗнач.ПолучитьПараметрыКолонки(номСтолбца,  типДан); значен = тЗнач.ПолучитьЗначение(номСтроки, номСтолбца);

// Передаем диалогу старое  значение ячейки

флаг = ВвестиЗначение(значен, "Введите новое значение ячейки", типДан); если флаг = 1 тогда

тЗнач.УстановитьЗначение(номСтроки, номСтолбца,  значен);

конецЕсли; конецПроцедуры // Изменить

процедура Заполнить()                   //             Инициализирует таблицу значений

// Берется из разд. 3.4.1

конецПроцедуры // Заполнить

процедура ПриОткрытии()                 //           Формирует  таблицу значений

// Формируем столоцы таблицы значений. Опуская имена необязательных  параметров,

// сохраняем разделяющие  их запятые

тЗнач.НоваяКолонка("Код",  "Строка",,,,  10);   //10    ширина первого столбца тЗнач.НоваяКолонка("Имя", "Строка",,,,  20); тЗнач.НоваяКолонка("Количество", "Число",,,, 15);

конецПроцедуры  // ПриОткрытии

процедура Выполнить()                   //             Восстанавливает таблицу значений

// Перед  каждым запуском  процедуры Выполнить будем очищать окно сообщений ОчиститьОкноСообщений();

тЗнач.УдалитьСтроки();              //          Удаляем все строки таблицы значений тЗнач

Заполнить();

// Заполняем ячейки таблицы значениями

// Диалог формы обработки Проба после ее загрузки приведен на рис. 3.9 конецПроцедуры

Диалог формы  обработки  Проба  после  ее загрузки  приведен на рис. 3.9.

Рис.  3.9.  Таблица значений  после загрузки  обработки Проба

Замечание.  Ясно,   что  похожий механизм  мы  могли  бы  применить и   для  редактирования элементов  списка значений, рассмотренного  в  разд.  3.3.2.

3.4.2.  ТЕКУЩАЯ СТРОКА ТАБЛИЦЫ ЗНАЧЕНИЙ

При  работе  с таблицей  значений  мы, обращаясь к идентификаторам  столбцов,  редактируем или читаем значения  ячеек  текущей  строки. Так, если  мы работаем с вышерассмотренной таблицей значений, то исполнение оператора

т.Знач.Код = "092";

приведет к изменению значения  столбца  под  именем Код в  текущей  строке таблицы.

Номер текущей   строки  содержит  атрибут  номерСтроки.  После   создания  таблицы номерСтроки  = 0  в  таблице  просто   нет  строк.   Однако такое  же  значение  атрибут номерСтроки  получит и  при  наличии   в таблице  значений  строк  после  выполнения  метода ВыбратьСтроки. В этом  случае  мы будем говорить:  таблица значений  позиционир ована до  первой  строки.  Чтобы   перейти  на  первую  строку, достаточно вызвать метод ПолучитьСтроку, который,  если  не  достигнута  последняя  строка, увеличивает  номер  текущей   строки  на  единицу.  Если  же  метод  ПолучитьСтроку применяется,  когда  текущей  является  последняя строка, то таблица позиционируется вслед за ней, в  атрибут номерСтроки  устанавливается значение  0.  Таким  образом, по  этому  атрибуту,  если  он равен нулю, нельзя  узнать, где мы  находимся  до первой строки таблицы  значений  или вслед за последней строкой. Приведенные  сведения,  иллюстрируются процедурой В ывестиНомСтроки,   выводящей   в    окно    сообщений    значение   атрибута   номерСтроки. В процедуре  переменная  тЗнач   это  любая   таблица  значений,  например   созданная и заполненная в разд.  3.4.2.

процедура ВывестиНомСтроки()

// тЗнач переменная модуля, поэтому доступна в процедуре ВывестиНомСтроки

// Позиционируемся перед первой строкой таблицы значений тЗнач

тЗнач.ВыбратьСтроки();

// Напечатает 0, так как таблица позиционирована до первой строки Сообщить(тЗнач.НомерСтроки);

// Перебор строк таблицы значений начинается с ее первой строки

пока тЗнач.ПолучитьСтроку() = 1 цикл Сообщить(тЗнач.НомерСтроки);

конецЦикла // пока

// Вновь напечатает 0, хотя таблица позиционирована вслед за последней строкой Сообщить(тЗнач.НомерСтроки);

конецПроцедуры // ВывестиНомСтроки

Атрибут  номерСтроки   является   ненадежным  для   определения    номера   текущей  строки и в более широком смысле. Так, присваивание

тЗнач.номерСтроки = значение;

изменит значение  атрибута,  но  не изменит номера  текущей  строки.

Кроме  методов  ВыбратьСтроки  и  ПолучитьСтроку, текущую  строку  изменяют  методы  ПолучитьСтрокуПоНомеру,  НоваяСтрока и  Сортировать.  Метод  СдвинутьСтр оку  меняет   текущую   строку,  если  сдвигается текущая  строка.   В  противном  случае  текущая   строка   сохраняется.  Также   текущая   строка   меняется  при   переносе  курсора  по  строкам в элементе диалога Таблица значений.

Текущая  строка становится неопределенной, когда:

•   методы  КоличествоСтрок или Свернуть уменьшают  число   строк до  величины,  меньшей чем  значение (до применения метода) атрибута номерСтроки;

•   метод   УдалитьСтроку  удаляет   строку,   номер    которой    меньше,    чем     значение (до  применения метода) атрибута  номерСтроки или равен ему.

Текущая   строка  становится равной  нулю   после  выполнения  методов   ВыбратьСтроки и Очистить.

Источник: Бартеньев О. В. 1С:Предприятие:  программирование для  всех.  Базовые объекты и расчеты на одной дискете. М.: Диалог-МИФИ, 2005. 464 с.

По теме:

  • Комментарии