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

0

Сообщить(тЗнач.Код);

конецЦикла; // пока конецПроцедуры // Вывести

Пример  2.  В  окно  сообщений  выводятся начиная  с третьей  строки  значения  первого столбца таблицы значений, заданной в табл. 3.4.

процедура  Вывести2()

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

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

тЗнач.ПолучитьСтрокуПоНомеру(2);

// Перебор строк таблицы значений начинается с ее третьей строки пока тЗнач.ПолучитьСтроку() = 1 цикл

Сообщить(тЗнач.Код);

конецЦикла; // пока конецПроцедуры // Вывести2

Пример  3.  Сортировка таблицы  значений  по трем  столбцам. Первоначально  создается   и   заполняется  данными  таблица  значений,  имеющая  столбцы  КодПоставщика, Материал  и  Количество.  Затем  выполняется  сортировка  по  строке  "КодПоставщика,

+Материал, -3",  означающей,  что  прежде   данные упорядочиваются   по  возрастанию названий поставщиков,  затем  в  пределах  одинаковых поставщиков  данные упорядочиваются  (так  же  по  возрастанию)  по  названию материалов  и,  наконец, в  пределах  одинакового  поставщика и  одинакового  материала данные  упорядочиваются  по убыванию по  количеству.

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

перем  тЗнач;

перем  пост[20],  мат[20], колВо[20],  ост[20];

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

тЗнач  =  СоздатьОбъект("ТаблицаЗначений"); числоЗап = 9;

// Содержание  таблицы значений

пост[1]=1;

мат[1]  = "Сталь  45";

колВо[1]=10;

ост[1]  = 5;

пост[2]  = 2;

мат[2]  = "Чугун";

колВо[2] = 20;

ост[2]  = 10;

пост[3] =  1;

мат[3] = "Сталь 45";

колВо[3] = 90;

ост[3] = 40;

пост[4] = 3;

мат[4] = "Свинец";

колВо[4] = 55;

ост[4] = 25;

пост[5] =  1;

мат[5] = "Сталь 45";

колВо[5] =  150;

ост[5] = 65;

пост[6] = 4;

мат[6] = "Олово";

колВо[6] = 70;

ост[6] = 30;

пост[7]  = 3;

мат[7]  = "Свинец";

колВо[7] = 100;

ост[7]  = 70;

пост[8] = 4;

пост[9] =  1;

мат[8] = "Олово";

мат[9] = "Олово";

колВо[8] =  180;

колВо[9] = 200;

ост[8] =  100;

ост[9] =  120;

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

// сохраняем разделяющие  их запятые тЗнач.НоваяКолонка("КодПоставщика", "Число",,, , 10);

тЗнач.НоваяКолонка("Материал",  "Строка",,,,  10);        //     10 ширина второго столбца тЗнач.НоваяКолонка("Количество", "Число",,, , 8);

тЗнач.НоваяКолонка("Остаток", "Число",,, , 8);

для ин = 1 по числоЗап цикл

тЗнач.НоваяСтрока( );           //      Добавляем  новую строку

// Определяем, используя  атрибут идентификатор столбца, ячейки новой строки тЗнач.Материал = мат[ин];

тЗнач.КодПоставщика = пост[ин]; тЗнач.Количество = колВо[ин];  тЗнач.Остаток = ост[ин];

конецЦикла; // для

// Покажем таблицу значений  до сортировки тЗнач.ВыбратьСтроку(1,  "До  сортировки");

// Строка "1 , +2, -Количество" обеспечит тот же результат  сортировки, что и строка

// "КодПоставщика, +Материал, -3" тЗнач.Сортировать("КодПоставщика, +Материал, -3"); тЗнач.ВыбратьСтроку(1, "После  сортировки");

Сообщить(тЗнач.Итог("Количество"));                   //                    Напечатает 875 конецПроцедуры

Результат  приведен на рис. 3.10.

Рис.  3.10.   Таблица значений: а до сортировки;

б после сортировки по правилу  "КодПоставщика,  +Материал, -3"

Пример  4.  Если  до  метода Сортировать  в  процедуру  Выполнить примера  3  добавить код

а)

тЗнач.Свернуть("1", "3");

тЗнач.ВыбратьСтроку(1, "После  сворачивания 4, а"); б)

тЗнач.Свернуть("1, 2", "3");

тЗнач.ВыбратьСтроку(1, "После  сворачивания 4, б"); в)

тЗнач.Свернуть("1, 2", "3,4");

тЗнач.ВыбратьСтроку(1, "После  сворачивания 4, в");

то получим приведенный  на рис. 3.11  и 3.12 результат.

Рис. 3.11. Таблица значений: адо сворачивания; б после сворачивания 4, а

Рис. 3.12. Таблица значений: а после сворачивания 4, б; б после сворачивания 4, в Пример  5.  Если  до  метода Сортировать  в  процедуру Выполнить примера  3 доба-

вить код

сЗнач  =  СоздатьОбъект("СписокЗначений"); тЗнач.Выгрузить(сЗнач, 1, 4, "1, 2, 3");

сЗнач.ВыбратьЗначение(1, "Данные перенесены из таблицы тЗнач");

то получим приведенный  на рис. 3.13 результат.

Рис. 3.13. Таблица и список значений: а фрагмент таблицы,

из которой копируются данные; б список значений после переноса в него данных

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

тЗнач.ВыбратьСтроку(1, "Исходное представление таблицы значений");  тЗнач.ВидимостьКолонки("2", 0);

тЗнач.ВидимостьКолонки("3", 1, 2);

тЗнач.ВыбратьСтроку(1, "После  двукратного употребления  метода ВидимостьКолонки");

добавленный  до  метода   Сортировать  в   процедуру  Выполнить   примера  3,   приведет к тому, что  вместо трех  столбцов  метод  ВыбратьСтроку отобразит  два столбца табли цы  значений  (рис. 3.14, б)

а                                                                                 б

Рис. 3.14. Таблица значений: а до скрытия столбцов;  б с неверным числом отображаемых столбцов

Замечание.   С  элементом диалога Таблица  значений  метод  ВидимостьКолонки  работает  корректно.

Пример  7. Отображение  таблицы значений, приведенной  на рис. 3.9, после применения метода  Фиксировать. Недоступные ячейки выводятся на сером  фоне (рис. 3.15).

тЗнач.Фиксировать(2, 1);

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

Предупреждение("Данные в  помеченной на  удаление строке  не  редактируются."); возврат;

// Запрет на редактирование количества

иначеЕсли тЗнач.Состояние = 2 тогда Предупреждение("Редактирование   запрещено."); возврат;

иначе                                 //                      Редактирование возможно

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

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

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

// Если  новое количество отлично от старого  если  значен  о  тЗнач.Количество  тогда

тЗнач.УстановитьЗначение(номСтроки, номСтолбца,  значен); тЗнач.Состояние = 3;         //      Пиктограмма 3  из табл. 3.8

// Храним данные о столбце Состояние в списке сЗнач

сЗнач.УстановитьЗначение(номСтроки, 3,  "Да"); конецЕсли; // значен <> тЗнач.Количество

конецЕсли; // флаг = 1

конецЕсли; // тЗнач.Состояние =  4

иначе                                      //                         Выбран столбец 3  (Состояние)

// Есть  пометка об удалении. Снимаем  пометку заносим  в ячейку

// данные из списка сЗнач

если тЗнач.Состояние = 4 тогда

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

если пред =  "Да" тогда               //          Можно  редактировать количество тЗнач. Состояние = значен;

иначе                                //                    Количество редактировать  нельзя тЗнач. Состояние = 2;

конецЕсли // пред = "Да"

иначе                                    //                      Строка не  помечена на удаление тЗнач.Состояние = 4;         //      Выполняем  пометку столбца пиктограммой 4

конецЕсли // тЗнач.Сосотяние = 4

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

процедура       Заполните(      )      //    Добавляет в таблицу значений строки и заполняет перем ин, номСтроки;           //их           данными из векторов кодПодр, подр и колВо;

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

перем  числоПодр; числоПодр = 6;

// Число подразделений

кодПодр[1] = "099"; кодПодр[2]  =  "100"; кодПодр[3] = "111"; кодПодр[4] = "001"; кодПодр[5]  = "002"; кодПодр[6] = "011";

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

тЗнач.НоваяСтрока();

подр[1]  = "Отдел  кадров";

подр[2] =  "Бухгалтерия"; подр[3] = "Снабжение и сбыт";  подр[4] = "Цех 1";

подр[5] =  "Цех 2";

подр[6]  = "Цех 11" ;

// Добавляем новую строку

колВо[1]=10

колВо[2]=15 колВо[3] = 20 колВо[4]=100; колВо[5]=150; колВо[6] = 200;

// Определяем, используя  атрибут идентификатор столбца, ячейки новой строки тЗнач.Код = кодПодр[ин];

тЗнач.Имя = подр[ин];

тЗнач.Состояние =1 ;            //        Будет отображаться  пиктограмма 1 из табл. 3.8 тЗнач.Количество = колВо[ин];

// Первоначально разрешено редактировать количество в таблице значений  сЗнач.ДобавитьЗначение( 1, "Да");

конецЦикла; // для

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

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

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

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

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

Заполнить();                               //                    Заполняем таблицу значений данными

// Столбцы Код и Имя  недоступны для редактирования тЗнач.Фиксировать(0,2);                                                                  ,

// Выводим пиктограммы в столбце Состояние

тЗнач.ВыводитьПиктограммы("Состояние",  1); конецПроцедуры // ПриОткрытии

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

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

тЗнач.УдалитьСтроки();

//

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

.

сЗнач.УдалитьВсе();

//

Очищаем  список значений  сЗнач

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

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

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

// Оператор основной программы  модуля

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

Диалог   формы   обработки   Проба    после    некоторых   манипуляций   с   таблицей и кнопкой Запретить показан на рис. 3.17.

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

3.5. ВЫВОДЫ

1.     Агрегатные  типы  данных   предназначены  для  создания  моделей  функционирования предприятия и его подразделений; создание агрегатных типов данных, помимо встроенных  в  1С, невозможно.

2.      Агрегатные типы разделены на  две группы    специального и  общего  назначения.

Объекты первой группы  описаны в конфигурации, второй нет.

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

4.       Список  значений  с  пометками  удобен  для  создания  интерфейсов.  В таком  списке каждый  его элемент можно  рассматривать как  флажок.

5.      Таблица значений  может  содержать произвольное число столбцов, с которыми можно  связать идентификаторы. Значение  ячейки таблицы можно  менять, модифицируя зн ачение идентификатора соответствующего  столбца, например  в  результате  выполнения оператора присваивания или вызывая метод УстановитьЗначение.

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

7.       Методы   КоличествоСтрок,  УдалитьСтроку   и   Свернуть   могут  сделать   неопределенным значение текущей  строки таблицы значений.

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

9.       С  каждым  полем  диалога можно  связать  формулу, имя которой это  имя процедуры, (функции)  в  модуле  диалога или  глобальном  модуле.   Запуск  этой  процедуры (функции) возможен  как  из  модуля, так  и  в  результате  воздействия на  соответст вующий элемент диалога.

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

4. ПЕРЕЧИСЛЕНИЯ

4.1.        ПЕРЕЧИСЛЕНИЯ 1С

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

// Процедура вывода списка имеющихся в конфигурации перечислений

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

перем  ин, всегоПереч;             //        всегоПереч число перечислений в конфигурации ОчиститьОкноСообщений();

всегоПереч  = Метаданные.Перечисление();

для ин = 1 по всегоПереч цикл Сообщить(Метаданные.Перечисление(ин));

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

Результат:

ВидЗаписи ВидыПлатежа ВидыПовышКвалиф Годность

ДаНет ДопСведИТС ИнтервалСведений Категории ПФР Образование ОснованияВЛ ОснованияИТС ОснованияУвольнения ОсобыеУсловияТруда

ОтношениеКВоинскойОбязанности ПериодичностьСкидки

Пол ПричинаОтсутствия РасходыНаАвторские РезультатыАттестации СемейноеПоложение СпособПеречислПоИспЛисту СтепениРодства Территориальные  условия ТипБЛ

ТипБолезни

ТипНалоговойЛьготы

ТипПланаСчетов ТипПлатежа ТипРасчетаБольничного ТипРасчетаОтпуска ТипРасчетаПремии ТипСотрудника ТипФормы ТипыПособий ТипыУсловийТруда Упорядочить формыДоковПерсУчета формыОбучения ФормыТруда ХарактерДоплаты ХарактерСкидки Характеру держания ЦелиПеречисления

ОснованияОплатыПоСреднему ВидСтрокиСреднегоЗаработка Характер  работы

ТипыЧасов БухгалтерскиеКонфигурации ПричинаПростоя

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

По теме:

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