1с 77 таблица значений найти значение
Таблица значений часто применяется при программировании на 1С, потому что имеет множество полезных возможностей и работает очень быстро. Таблица значений создается в памяти и не сохраняется в базе данных, т.е. это временный набор данных.
//можно указать тип данных каждой колонки
//если тип данных колонки не указан, то можно хранить данные любого типа
Синтаксис: НоваяКолонка(, , , , , , , )
Добавление строк в таблицу значений
Перебор строк таблицы значений
Сортировка таблицы значений
Поиск в таблице значений
Синтаксис: НайтиЗначение(,,)
Возвращает число: 0 - значение не найдено; 1 - значение найдено
Если указан параметр , то поиск производится только по заданной строке
Если указан параметр , то поиск производится только по заданной колонке
Итоги и группировка таблицы значений
//часто требуется группировать строки и подсчитывать итоги по группам,
//в этом случае применяется метод Свернуть
Удаление строк и колонок из таблицы значений
ВНИМАНИЕ
Часто требуется удалить строки, удовлетворяющие определенному условию.
Так как при удалении строки из таблицы значений следующая строка становится текущей,
то указанная ниже программа может удалить НЕ ВСЕ необходимые строки.
В этом случае я рекомендую использовать следующий прием:
А вот еще один правильный алгоритм, предложенный Wlad:
Замечание(Туц). Предыдущий вариант не совсем правильный. Случай, когда последняя строка попадает под условие и в условии идёт обращение к строке таблицы, приводит к ошибке. Т.е. происходит попытка чтения для строки 0.
И ещё вариант, предложенный Туц:
Замечание (vligm). А я использую такой алгоритм (это, собственно говоря, шаблон):
Таблица значений как элемент диалога
Таблица значений может использоваться в экранных формах как элемент диалога с пользователем.
Методы УстановитьЗначение и ПолучитьЗначение
Эти методы позволяют обращаться к данным в таблице значений для чтения и записи.
Они могут пригодиться в особых случаях при написании универсальных программ (мастеры отчетов и т.д.).
ТаблицаЗначений — это программный объект встроенного языка, позволяющий хранить произвольные данные в табличном виде. Таблицы состоят из строк и колонок. Строки располагаются вниз по вертикали, а колонки — вправо по горизонтали.
Строки и колонки имеют последовательную целочисленную нумерацию. Кроме этого, колонкам можно присваивать строковые идентификаторы, удовлетворяющие требованиям, выдвигаемым к идентификаторам языка. Пересечения строк и колонок образуют ячейки, в которых содержатся значения. Тип значения определяется типом колонки. Если тип не задан, в ячейке можно хранить значения произвольного типа.
Таблица значений является полностью динамическим объектом, т.к. Вы можете манипулировать не только строками таблицы, добавляя и\или удаляя их, но и колонками.
Таблица значений используется в двух случаях:
- При работе с формами: при размещении на форме элемент управления типа ТаблицаЗначений , он автоматически связывается с одноименным объектом встроенного языка ТаблицаЗначений ;
- При работе с кодом: для хранения каких-либо многострочных списочных данных вы создаете нужное количество объектов типа ТаблицаЗначений ;
Создание таблицы значений
Как и все объекты агрегатного типа, таблица значений создается с помощью функции СоздатьОбъект() встроенного языка:
Инициализация таблицы значений
Инициализация объекта выполняется в три этапа:
- Добавление колонок
- Добавление строки
- Установка значений ячеек
Итак, прежде, чем начать работать с объектом ТаблицаЗначений , необходимо настроить колонки (задать имя и тип). Делается это с помощью метода НоваяКолонка() следующим образом:
Как Вы успели заметить, вместе с названием колонки задается и тип значений.
После того, как Вы добавили колонки, можно добавлять строки. Делается это с помощью метода НоваяСтрока():
Теперь переменная тз спозиционирована на добавленную строку и мы можем приступить к заполнению ячеек:
Как видите, имена ячеек текущей строки имеют то же название, что и колонки. Это делает использование объекта элементарным: достаточно указать через точку после имени объекта имя колонки.
Манипуляция значениями строк таблицы
Для получения значений, содержащихся в строках, необходимо перво-наперво спозиционировать объект на интересующей Вас строке. Для этого используются такие методы как: ПолучитьСтрокуПоНомеру() и ПолучитьСтроку():
Перебор строк таблицы значений
Для последовательного перебора (обхода) всех строк таблицы значений обычно используются методы ВыбратьСтроки() и ПолучитьСтроку() объекта:
Также можно организовать перебор с помощью оператора цикла Для, где в качестве ограничителя цикла используется количество строк таблицы, возвращаемое методом КоличествоСтрок():
Атрибуты объекта ТаблицаЗначений
НомерСтроки | атрибут содержит номер текущей строки таблицы |
атрибут содержит значение текущей ячейки таблицы |
Методы объекта ТаблицаЗначений
НоваяКолонка() | метод добавляет новую колонку в конец таблицы |
ВставитьКолонку() | метод вставляет новую колонку в указанное место в таблице |
УдалитьКолонку() | метод удаляет указанную колонку из таблицы |
КоличествоКолонок() | метод возвращает количество колонок в таблице |
НоваяСтрока() | метод добавляет новую строку в конец таблицы |
ВставитьСтроку() | метод вставляет новую строку в указанное место в таблице |
УдалитьСтроку() | метод удаляет указанную строку из таблицы |
КоличествоСтрок() | метод возвращает количество строк в таблице |
НайтиЗначение() | метод выполняет поиск значения в ячейках таблицы |
ВыбратьСтроки() | метод формирует последовательную выборку строк таблицы значений |
ПолучитьСтроку() | метод получает следующую строку из ранее сформированной выборки |
ПолучитьСтрокуПоНомеру() | метод позиционирует объект на указанной строке |
* — в таблице перечислены не все методы таблицы значений. |
Хочется отметить, что объекты типа ТаблицаЗначений не хранятся в информационной базе.
Форум
Создание таблицы значений
Таблица значений - это двумерный массив в 1С, который предназначен для хранения и обработки промежуточных данных, возникающих в процессе работы программы. Таблица значений часто применяется при программировании на 1С, потому что имеет множество полезных возможностей и работает очень быстро. Таблица значений создается в памяти и не сохраняется в базе данных, т.е. это временный набор данных.
ТабЗнач.НоваяКолонка("Номер");
ТабЗнач.НоваяКолонка("Сотрудник");
ТабЗнач.НоваяКолонка("Должность");
ТабЗнач.НоваяКолонка("Оклад");
//можно указать тип данных каждой колонки
//если тип данных колонки не указан, то можно хранить данные любого типа
Синтаксис: НоваяКолонка(, , , , , , , )
ТабЗнач.НоваяКолонка("Номер","Число",10,0);
ТабЗнач.НоваяКолонка("Сотрудник","Справочник.Сотрудники");
ТабЗнач.НоваяКолонка("Должность","Справочник.Должности");
ТабЗнач.НоваяКолонка("Оклад","Число",10,2);
Добавление строк в таблицу значений
ТабЗнач.НоваяСтрока();
ТабЗнач.Номер = 1;
ТабЗнач.Сотрудник = "Иванов Иван Иванович"; //следите за типом колонки!
ТабЗнач.Должность = "Программист";
ТабЗнач.Оклад = 20000;
ТабЗнач.НоваяСтрока();
ТабЗнач.Номер = 2;
ТабЗнач.Сотрудник = "Петров Петр Петрович";
ТабЗнач.Должность = "Бухгалтер";
ТабЗнач.Оклад = 10000;
//обычно строки добавляются в цикле
СпрСотр = СоздатьОбъект("Справочник.Сотрудники");
СпрСотр.ВыбратьЭлементы();
Пока СпрСотр.ПолучитьЭлемент()=1 Цикл
. ТабЗнач.НоваяСтрока();
. ТабЗнач.Номер = СпрСотр.Код;
. ТабЗнач.Сотрудник = СпрСотр.ТекущийЭлемент(); //следите за типом колонки!
. ТабЗнач.Должность = СпрСотр.Должность;
. ТабЗнач.Оклад = СпрСотр.Оклад;
КонецЦикла;
Перебор строк таблицы значений
ТабЗнач.ВыбратьСтроки();
Пока ТабЗнач.ПолучитьСтроку()=1 Цикл
. Сообщить(ТабЗнач.Сотрудник);
КонецЦикла;
2-й способ.
Для НомерСтроки = 1 По ТабЗнач.КоличествоСтрок() Цикл
. ТабЗнач.ПолучитьСтрокуПоНомеру(НомерСтроки);
. Сообщить(ТабЗнач.Сотрудник);
КонецЦикла;
Сортировка таблицы значений
//сортировать по должности по возрастанию
ТабЗнач.Сортировать("Должность+");
//сортировать по должности по возрастанию, а внутри должности по убыванию оклада
ТабЗнач.Сортировать("Должность+,Оклад-");
Поиск в таблице значений
Синтаксис: НайтиЗначение(,,)
Возвращает число: 0 - значение не найдено; 1 - значение найдено
Если указан параметр , то поиск производится только по заданной строке
Если указан параметр , то поиск производится только по заданной колонке
номстр = 0;
Если ТабЗнач.НайтиЗначение (10000, номстр, "Оклад") = 1 Тогда
. ТабЗнач.ПолучитьСтрокуПоНомеру(номстр);
. Сообщить(ТабЗнач.Сотрудник);
КонецЕсли;
Итоги и группировка таблицы значений
//получить итог по колонке можно методом Итог
ВсеОклады = ТабЗнач.Итог("Оклад")
//часто требуется группировать строки и подсчитывать итоги по группам,
//в этом случае применяется метод Свернуть
//проссумировать оклады по каждой должности
ТабЗнач.Свернуть("Должность","Оклад");
//Можно группировать и суммировать сразу по нескольким колонкам
ТабЗнач.Свернуть("Категория, Должность","Оклад,Налог");
Удаление строк и колонок из таблицы значений
ТабЗнач.Очистить(); //очистить таблицу значений и удалить колонки
ТабЗнач.УдалитьСтроки(); //удаляет все строки (колонки сохраняются)
ТабЗнач.УдалитьСтроку(); //удаляет текущую строку
ТабЗнач.УдалитьСтроку(3); //удаляет 3-ю строку
ТабЗнач.УдалитьКолонку("Оклад"); //удаляет колонку Оклад
ТабЗнач.УдалитьКолонку(2); //удаляет 2-ю колонку
ВНИМАНИЕ
Часто требуется удалить строки, удовлетворяющие определенному условию.
Так как при удалении строки из таблицы значений следующая строка становится текущей,
то указанная ниже программа может удалить НЕ ВСЕ необходимые строки.
//ЭТА ПРОГРАММА НЕПРАВИЛЬНАЯ .
ТабЗнач.ВыбратьСтроки();
Пока ТабЗнач.ПолучитьСтроку()=1 Цикл
. Если Тогда
. ТабЗнач.УдалитьСтроку(); //следующая строка стала текущей,
. КонецЕсли;
КонецЦикла;
В этом случае я рекомендую использовать следующий прием:
ТабЗнач.ВыбратьСтроки();
Пока ТабЗнач.ПолучитьСтроку()=1 Цикл
~начало:
. Если Тогда
. ТабЗнач.УдалитьСтроку(); //следующая строка стала текущей
. Если ТабЗнач.НомерСтроки<>0 Тогда
. Перейти ~начало;
. КонецЕсли;
. КонецЕсли;
КонецЦикла;
А вот еще один правильный алгоритм, предложенный Wlad:
ТабЗнач.выбратьстроки();
Пока ТабЗнач.ПолучитьСтроку()=1 Цикл
. Пока () и (ТабЗнач.НомерСтроки<>0) Цикл
. ТабЗнач.УдалитьСтроку(); //следующая строка стала текущей
. КонецЦикла;
КонецЦикла;
Таблица значений как элемент диалога
Таблица значений может использоваться в экранных формах как элемент диалога с пользователем.
//установить курсор на указанную колонку или можно узнать, где находится курсор
ТабЗнач.ТекущаяКолонка(НоваяКолонка,ТекКолонка);
//установить курсор на указанную строку или можно узнать, где находится курсор.
ТекСтрока = ТабЗнач.ТекущаяСтрока(НовСтрока);
ТабЗнач.ВидимостьКолонки("Оклад",0); //скрыть колонку Оклад
ТабЗнач.ВидимостьКолонки("Должность, Сотрудник",1); //показать колонки Должность и Сотрудник
ТабЗнач.ВидимостьКолонки("Оклад",1,1); //показать колонку Оклад в 1-й позиции
//можно зафиксировать верхние строки и левые колонки для удобства прокрутки таблицы значений в диалоге
ТабЗнач.Фиксировать(КолСтрок,КолКолонок);
Методы УстановитьЗначение и ПолучитьЗначение
Эти методы позволяют обращаться к данным в таблице значений для чтения и записи.
Они могут пригодиться в особых случаях при написании универсальных программ (мастеры отчетов и т.д.).
ТабЗнач.НоваяСтрока();
ТабЗнач.УстановитьЗначение(1,"Номер",100);
ТабЗнач.УстановитьЗначение(1,"Сотрудник","Иванов Иван Иванович");
ТабЗнач.УстановитьЗначение(1,3,10000); //обращение к 1-й строке и 3-й колонке ("Оклад")
Номер = ТабЗнач.ПолучитьЗначение(1,"Номер");
ФИО = ТабЗнач.ПолучитьЗначение(1,"Сотрудник");
Оклад = ТабЗнач.ПолучитьЗначение(1,3); //обращение к 1-й строке и 3-й колонке "Оклад"
Выгрузка таблицы значений
//выгрузить 10 сотрудников с наибольшими окладами в новую таблицу значений
ТабЗнач.Сортировать("Оклад-");
ТабЗнач.Выгрузить(НоваяТабЗнач,1,10,"Сотрудник,Оклад");
Как заполнить табличную часть формы программно? 8
Нужно по кнопке Заполнить - сформировать данные для заполнения табличных частей и заполнить их. Форма имеет вид: Рядом с кнопкой Записать и закрыть добавлена кнопка Заполнить документ , код ее команды: // Код заполнения ТЧ НаСервере П 1C и Google Maps 21
была поставлена задача отображения на географической карте медицинских учреждений. После обзора предлагаемых решений был выбран сервис google. Но так же подобного рода подход будет работать и с картами сервиса yandex. Во время решения задачи было реш 1C: Enterprise Development Tools 50
И вот случилось долгожданное: Вышел 1C: Enterprise Development Tools - это среда для разработки конфигурации в IDE Eclipse. С сайта 1С: « 1C:Enterprise Development Tools » – это инструмент нового поколения для разработчиков бизнес-приложений систем 1С Предприятие что это? 12
Что такое 1С? 1С — это фирма , у которой одно из направлений деятельности — разработка программного обеспечения для автоматизации бизнес-процессов предприятий. « 1С:Предприятие » - конкретный продукт, который выпускает компания 1С . Что такое Cклонения по падежам 6
НаКлиенте Процедура Команда1(Команда) ФИО = " Иванов Иван Иванович" ; Падеж = 2; Пол = 1; Результат = СклонениеФИО(ФИО, Падеж, пол); Сообщить(Результат); КонецПроцедуры НаСервере Функция СклонениеФИО(ФИО, Падеж, пол) Результат = " " ; Посмотреть все результаты поиска похожих
Еще в этой же категории
Как быстро вывести таблицу значений в табличный документ? 96
ТекстЗапроса = " ВЫБРАТЬ * ИЗ Справочник.Пользователи" ; ЗапросаДанных = Новый Запрос(ТекстЗапроса); РезЗапроса = ЗапросаДанных.Выполнить().Выгрузить(); ТабДокумент = Новый ТабличныйДокумент; Построитель = Новый Построит Создание Таблицы значений и описание типов значений ее колонок 29
ТаблицаПериодов = Новый ТаблицаЗначений; ТаблицаПериодов.Колонки.Добавить("НомерСтроки", Новый ОписаниеТипов("Число")); ТаблицаПериодов.Колонки.Добавить("Сотрудник", Новый ОписаниеТипов("СправочникСсылка.СотрудникиОрганизаций")); ТаблицаП Удаление строк Таблицы Значений 27
// 1. Удаление строк согласно условию НулевыеСтроки = ТаблицаПослеПодмен.НайтиСтроки(Новый Структура(" Сумма" ,0)); Для каждого СтрокаТаблицы Из НулевыеСтроки Цикл ТаблицаПослеПодмен.Удалить(СтрокаТаблицы) КонецЦикла; // Нужно оставить стр Как скопировать, выгрузить данные из одной таблицы значений в другую? 11
Как скопировать или выгрузить данные из одной таблицы значений в другую таблицу значений? 1. Добавление, копирование строк из одной таблицы значений в другую таблицу значений: Для каждого СтрокаТЗ Из Таблица1 Цикл ЗаполнитьЗначенияСвойств(Таблица Объединение 2 таблиц значений 11
// Объединить 2 таблицы значения // тзОсновная - таблица к которой будут изменяться данные // тзПрисоединяемая - таблица из которой будут браться данные // стОтборОдинаковых - стурктура со списком полей по которым определяеться одинаковость запис Посмотреть все в категории Работа с Таблицей Значений
ZIP-архив Создание 0
Для того чтобы записать файлы в ZIP-архив необходимо выполнить несколько простых действий: * Создать архив с необходимыми параметрами, в который будут помещаться файлы. * Поместить в архив необходимые файлы. * Записать архив. Создание объекта За ZIP-архив Чтение 0
Для того чтобы прочитать файлы из ZIP-архива необходимо выполнить несколько простых действий: - Открыть необходимый архив - Распаковать файлы Создание объекта ЧтениеZIPФайла можно осуществить двумя путями - создать инициализированный объект или Автоматизация обмена данных используя обработку "Универсальный обмен данными в формате XML" 10
Автоматизация обмена между базами используя обработку " Универсальный обмен данными в формате XML" В основу данной публикации положены найденные мною материалы по cозданию обмена между двумя базами с использованием обработки " Универсальный обме Журнал транзакций для базы данных "db_buh" переполнен. Причина: "LOG_BACKUP". HRESULT=80040E14 30
При обновлении бухгалтерии, на этапе сохранения, получил следующую ошибку: Каталог не обнаружен v8srvr://sql/acc_main/configsave/e0666db2-45d6-49b4-a200-061c6ba7d569.6b9d6525-ee94-4e13-b73d-82d3e8e8441d по причине: Каталог не обнаружен Confi Журнал транзакций заполнен. HRESULT=80040E14 0
Ошибка СУБД: Microsoft OLE DB Provider for SQL Server: Журнал транзакций для базы данных " zup" заполнен. Чтобы обнаружить причину, по которой место в журнале не может быть повторно использовано, обратитесь к столбцу log_reuse_wait_desc таблицы s Посмотреть все результаты поиска похожих
Еще в этой же категории
Как быстро вывести таблицу значений в табличный документ? 96
ТекстЗапроса = " ВЫБРАТЬ * ИЗ Справочник.Пользователи" ; ЗапросаДанных = Новый Запрос(ТекстЗапроса); РезЗапроса = ЗапросаДанных.Выполнить().Выгрузить(); ТабДокумент = Новый ТабличныйДокумент; Построитель = Новый Построит Создание Таблицы значений и описание типов значений ее колонок 29
ТаблицаПериодов = Новый ТаблицаЗначений; ТаблицаПериодов.Колонки.Добавить("НомерСтроки", Новый ОписаниеТипов("Число")); ТаблицаПериодов.Колонки.Добавить("Сотрудник", Новый ОписаниеТипов("СправочникСсылка.СотрудникиОрганизаций")); ТаблицаП Удаление строк Таблицы Значений 27
// 1. Удаление строк согласно условию НулевыеСтроки = ТаблицаПослеПодмен.НайтиСтроки(Новый Структура(" Сумма" ,0)); Для каждого СтрокаТаблицы Из НулевыеСтроки Цикл ТаблицаПослеПодмен.Удалить(СтрокаТаблицы) КонецЦикла; // Нужно оставить стр Как скопировать, выгрузить данные из одной таблицы значений в другую? 11
Как скопировать или выгрузить данные из одной таблицы значений в другую таблицу значений? 1. Добавление, копирование строк из одной таблицы значений в другую таблицу значений: Для каждого СтрокаТЗ Из Таблица1 Цикл ЗаполнитьЗначенияСвойств(Таблица Объединение 2 таблиц значений 11
// Объединить 2 таблицы значения // тзОсновная - таблица к которой будут изменяться данные // тзПрисоединяемая - таблица из которой будут браться данные // стОтборОдинаковых - стурктура со списком полей по которым определяеться одинаковость запис Посмотреть все в категории Работа с Таблицей Значений
Читайте также: