Главная » 1С Предприятие » СПИСОК ЗНАЧЕНИЙ

0

3.2.1.   СТРУКТУРА  СПИСКА ЗНАЧЕНИЙ

Объекты типа СписокЗначений  хранят  таблицы  с  тремя   столбцами  (колонками), имеющими  следующий  смысл:

•   значение;  данные   заносимые  в   этот  столбец,   могут  быть  любого,   в   том   числе  и агрегатного типа;

•   представление  значения   описание  значения,  или   его   смысл,  или   комментарий, или второе значение; данные этого столбца должны быть символьного типа;  если это не  так,  то  представление значения автоматически  преобразовывается в  символьный тип;

•    пометка.

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

В последний  столбец  для каждого  значения  заносится  число 1 или 0. В первом случае  значение  считается  помеченным, во  втором  нет.  По  умолчанию  все  заносимые  в список значения  не помечены.

Замечания:

1.       В дальнейшем  каждую строку  хранимой в  списке значений таблицы будем  назы вать элементом  списка.

2.        В  качестве значения  элемента  списка значений  может  выступать другой  список значений (пример см. в разд. 2.8.5.5).

3.2.2. ПРИМЕР СПИСКА ЗНАЧЕНИЙ

Создадим для примера список значений, содержащий представленные в  табл.  3.2.

данные, отражающие  некоторые  сведения о подразделениях предприятия.

Состав списка значений

Таблица 3.2

Код подразделения (значение элемента списка)

Подразделение (представление элемента списка)

099

Отдел кадров

100

Бухгалтерия

111

Снабжение и сбыт

001

Цех 1

002

Цех 2

011

Цех 11

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

1.       Занесем  исходные данные  в  массивы кодПодр и  имяПодр, а затем переместим  их, используя  метод  ДобавитьЗначение,  в  список  значений.   Код  подразделения  используем для  определения столбца значение,  а название  подразделения для  определения  столбца   представление  значения   формируемого   списка  значений.   Эти действия произведем в процедуре Выполнить  обработки Проба.

2.       Для  контроля   выведем элементы  списка в  окно  сообщений.  Вывод  осуществим в процедуре Контроль,  в которой  для определения числа элементов списка применяется метод  РазмерСписка, а  для  доступа  к  элементу списка  метод  ПолучитьЗначение.

3.        Отсортируем  (метод   Сортировать)  список  значений   по   кодам   подразделений и вновь выполним вывод результата.

4.        Вставим после 3-й позиции  списка новый элемент  (088, Цех 88), удалим предпослед ний элемент  списка и изменим  имя подразделения, код которого равен 111, на новое имя, предварительно проверив, есть ли в списке элемент с таким кодом, сдвинем измененный  элемент  на одну позицию  вверх и выведем модифицированный список. Для выполнения намеченных   действий используем  методы  ВставитьЗначение, УдалитьЗначение, НайтиЗначение, УстановитьЗначение и СдвинутьЗначение.

5.       Вновь  отсортируем  список, но  теперь  уже  по  именам  подразделений (метод  СортироватьПоПредставлению) и  выполним вывод результата.

6.        Выведем,  вызывая метод  ВыбратьЗначение,  диалог со  списком  имен   подразделе ний  и  выберем  в  нем  Цех  88.  Возвращенные методом  значения  (код  цеха  и  его  номер в  списке значений) выведем в  окно  сообщений.

7.       Преобразуем, используя метод ВСтрокуСРазделителями,  итоговый список в  текст.

// Предварительное описание процедуры Контроль процедура Контроль(сЗнач, этап) далее

процедура  Выполнить() перем сЗнач, ин, поз;

перем  кодПодр[20], подр[20];       //    Векторы для  имен подразделений и  их кодов перем  код, нПодр;                //           Код подразделения и его номер

перем  числоПодр;                 //           Число подразделений

перем стр;                         //                Строка,  в  которую выгружается список значений

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

[     числоПодр = 6;

кодПодр[1]  = "099";                      подр[1] =  "Отдел кадров"; кодПодр[2]  = "100";                      подр[2] =  "Бухгалтерия"; кодПодр[3] = "111";                       подр[3] = "Снабжение  и сбыт";  кодПодр[4] = "001";                        подр[4]  = "Цех  1";

кодПодр[5] = "002";                        подр[5] = "Цех 2"; кодПодр[6] = "011";                        подр[6] = "Цех  11";

// сЗнач переменная (объект) типа СписокЗначений сЗнач = СоздатьОбъект("СписокЗначений");

для ин = 1 по числоПодр цикл

// Добавляем  значение  и его представление

// (код подразделения и его название) в список значений сЗнач

сЗнач.ДобавитьЗначение(кодПодр[ин], подр[ин]);  конецЦикла; // для

Контроль(сЗнач, "Контрольный вывод начального списка.");

// Сортировка списка по возрастанию значений имен подразделений сЗнач.Сортировать();

Контроль(сЗнач, "Контрольный вывод отсортированного начального списка.");

// Вставка элемента (кода подразделения и его названия) после 3-го элемента списка сЗнач.ВставитьЗначение(4, "088",  "Цех  88");

// Удаляем предпоследний элемент списка. Его номер равен сЗнач.РазмерСписка() 1 сЗнач.УдалитьЗначение(сЗнач.РазмерСписка() 1);

// Изменяем имя подразделения с кодом  111 на новое,

// если элемент с таком кодом присутствует в списке поз = сЗнач.НайтиЗначение("111");

если  поз  > 0 тогда                     //             Если элемент найден сЗнач.УстановитьЗначение(поз, "111", "Отдел снабжения и сбыта");

// Переместим измененный элемент на одну позицию вверх

сЗнач.СдвинутьЗначение(-1, поз);  иначе

Предупреждение("Подразделение с кодом  111 не найдено.");

конецЕсли;

Контроль(сЗнач, "Контрольный вывод измененного списка.");

// Сортировка списка по возрастанию имен подразделений сЗнач.СортироватьПоПредставлению();

Контроль(сЗнач, "Контрольный  вывод итогового отсортированного списка.");

// Окно выбора подразделения по его имени см. на рис. 3.1

// Установим курсор на строку,  соответствующую подразделению Цех 1

// Для этого в переменную код установим код первого цеха код = "001";

флаг = сЗнач.ВыбратьЗначение(код, "Выбор подразделения", нПодр);

Сообщить(РазделительСтрок + "Выбрано подразделение с кодом  " + код + ". нПодр = " + нПодр);

стр = сЗнач.ВстрокуСРазделителями(); Сообщить(РазделительСтрок +

"Значения  элементов списка в виде строк  с разделителем:"  + стр);  конецПроцедуры // Выполнить

процедура Контроль(сЗнач, этап)                 //           Выводит список в окно сообщений перем числоПодр;                          //                 Число подразделений

перем имяПодр, кодПодр;                   //            Имя  подразделения и его код

// Контрольный вывод списка сЗнач

Сообщить(РазделительСтрок + этап);

числоПодр = сЗнач.РазмерСписка();        //     Метод, возвращающий размер списка для ин = 1 по числоПодр цикл

// Метод  ПолучитьЗначение вернет код подразделения с номером ин

// и через  параметр имяПодр  имя подразделения кодПодр = сЗнач.ПолучитьЗначение(ин, имяПодр);

// Тип параметра  процедуры Сообщить всегда будет символьным, поскольку

// выражение, задающее значение параметра,  начинается с пустой строки Сообщить("" + кодПодр + " " + имяПодр);

конецЦикла; // для конецПроцедуры // Контроль

Рис.  3.1.  Диалог выбора  значения списка по  его  представлению

После   последнего   контрольного   вывода в   окно   сообщений  добавится  следующий текст:

Контрольный вывод итогового отсортированного списка.

099 Отдел кадров

111 Отдел снабжения и сбыта 001 Цех 1

011 Цех  11

002 Цех 2

088 Цех  88

Выбрано подразделение с кодом 088; нПодр = 6

Значения   элементов  списка  в  виде строк  с  разделителем:   "099","111","001","011","002","088"

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

Число   создаваемых  в   программе  списков   значений  произвольно.  Конечно,   они должны иметь  разные имена  (по  крайней мере в  одной и  той  же  области  видимости). Для указания списка, с  которым используется тот  или иной метод, имя  метода предваряется именем  списка  и разделяющей точкой, например

сЗнач.РазмерСписка()

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

По теме:

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