Хочу в таб. части обработки прикрутить рекв-т типа «ТаблицаЗначений». Я многого хочу? |
Я |
16.09.09 — 19:25
Доброго времени суток. С одной стороны, хочу юзать типовой отбор, а не мудиться с таблицами значений, с другой — прям ужас как надо держать в реквизите табличку значений.
Ну для понимания, в табличке есть заказы, и данные по ним — это хочется отбирать. А есть табличные части заказов, причем обработанные и динамически показываемые во второй табличке, в зависимости от активной строки в первой таблицы.
Вариант с оперативным формированием отпадает — слишком тягомотное дело при каждой смене строки обрбатывать вспомогательную табличку…
Думаю, если таки нельзя такой реквизит прикрутить, попробовать эти данные во второй табличнойчасти обработки держать и запросами при смене строчки подтягивать…
Таки, внимание, вопрос:
«Хочу в таб. части обработки прикрутить рекв-т типа «ТаблицаЗначений». Есть варианты? » 
1 — 16.09.09 — 19:25
2 — 16.09.09 — 19:27
(0) Ну и прикрути
3 — 16.09.09 — 19:29
(2) Прикрутить — прикрутил. Как заполнить? 
4 — 16.09.09 — 19:31
(3) неправильный вариант — хранилище значения
5 — 16.09.09 — 19:32
(3) Табличная чать не может, а элемент управления — может.
6 — 16.09.09 — 19:32
(4) Витя, к чему такие сложности?
7 — 16.09.09 — 19:32
есть реквизит — ТЗ, у ЭУ данные вяжем к этому реквизиту и всё
8 — 16.09.09 — 19:33
правильный вариант: 2 таб.части и два дополнительных поля типа ИдСтрокиОсновнойТабЧасти. По нему ставится отбор неизменяемый пользователем во второй таб.части.
9 — 16.09.09 — 19:34
(7) пропустил, что у него обработка. тогда да
10 — 16.09.09 — 19:35
только такой вариант (ТЗ в реквизите) обрабатывать труднее, имхо
11 — 16.09.09 — 19:43
(4) Задумалсо 
(5) Для ламеров просьба поподробней.
Грубо говоря, действующие лица:
ТЧ- табличная часть обработки с неким набором реквизитов. Пусть это будет «Заказ» и «Клиент» для простоты ради.
На форме создан элемент ТабТЧ с источником данных — ТЧ. Тип ставится оболочкой и недоступен для изменения — «внешняяобработка.табличнаячасть».
Данный код позволяет создать колонку на элементе управления:
ТЧ.Колонки.Создать(«Состав»,Новый ОписаниеТипов(«ТаблицаЗначений»));
ЭлементыФормы.ТабТЧ.СоздатьКолонки();
Но как эту колонку заполнить, имея таблицу значений с реквизитами: «Клиент», «Заказ», «Состав». «Состав» — реквизит типа таблицазначений.
Чем бы эту колонку «Состав» из таблицы значений запихать в колонку «Состав» элемента управления? о_О
12 — 16.09.09 — 19:46
+(11) Попутал малость, код такой:
ЭлементыФормы.ТабТЧ.Колонки.Добавить(«Состав»,Новый ОписаниеТипов(«ТаблицаЗначений»));
13 — 16.09.09 — 19:47
ну и, собственно, визуально колонку-то наблюдаю, а как туда данные запихать — представляю себе плохо.
14 — 16.09.09 — 19:53
Выгрузи Табличную часть в ТЗ , в тз прикрути полеТЗ , при записи выгружай из Тз в табличную часть.
Прикрути его как табличное поле
например v8: два разных отбора
15 — 16.09.09 — 19:53
(7) Данные можно привязать только из реквизитов табличной части. А табличная часть реквизита с типом «таблицазначений» создать не дает.
16 — 16.09.09 — 19:57
(14) бесполезно, если я правильно понял мысль. Вариант:
ТЧ_Обработки.Загрузить(ТаблицаЗначений_С_Нужным_Реквизитом_Типа_ТаблицаЗначений);
Загрузит только тех, кто указан в реквизитах табличнойчасти обработки.
17 — 16.09.09 — 20:05
Загрузить (Load)
Синтаксис:
Загрузить(<Таблица>)
Параметры:
<Таблица> (обязательный)
Тип: ТаблицаЗначений. Таблица значений, откуда загружается табличная часть. Колонки таблиц совмещаются по именам.
Описание:
Загружает табличную часть из таблицы значений. При этом все прежние строки табличной части удаляются. При загрузке значения в колонках табличной части заполняются значениями из колонок таблицы значений с совпадающими именами.
Примечание:
Использование метода допустимо только в том случае, если табличная часть получена из свойства объекта. Если табличная часть получена из свойства ссылки (или выборки), то использование этого метода будет вызывать ошибку выполнения.
Пример:
Состав.Загрузить(ТаблицаСостава);
18 — 16.09.09 — 20:06
А что мешает в ТЧ_Обработки добавить это поле?
19 — 16.09.09 — 20:08
(17) Ключевая фраза: » Колонки таблиц совмещаются по именам». Если такого совпадения нет — эта колонка просто игнорируется, к сожалению.
(18) Тип «ТаблицаЗначений» отсутствует, возможно выбрать только ссылочные типы вроде Справочников, документов, ну и число, строка, дата…
20 — 16.09.09 — 20:09
Да я понял. Сейчас посмотрю. в 7 все на ура идет.
21 — 16.09.09 — 20:10
Я вот лелеял смутную надежду, что можно както через ЭлементыФормы.ТабличноеПоле запихать этот реквизит, но как-то все это очень-очень зыбко…
22 — 16.09.09 — 20:22
Процедура Кнопка1Нажатие(Элемент)
// Вставить содержимое обработчика.
Запрос= Новый Запрос;
Запрос.Текст=»ВЫБРАТЬ
чего то там»;
Запр=Запрос.Выполнить().Выгрузить();
Запр.Колонки.Добавить(«Состав»,Новый ОписаниеТипов(«ТаблицаЗначений»)); // Добавили колонку
Для каждого Стр Из Запр Цикл
стр.Состав=Запр.Скопировать(); // Установили значение
КонецЦикла;
ТабПоле= ЭлементыФормы.ТабличноеПоле1;
ТабПоле.Данные=»Запр»;
ТабПоле.СоздатьКолонки();
КонецПроцедуры
Процедура ТабличноеПоле1Выбор(Элемент, ВыбраннаяСтрока, Колонка, СтандартнаяОбработка)
// Вставить содержимое обработчика.
ТекДок=ЭлементыФормы.ТабличноеПоле1.ТекущаяСтрока.Состав.ВыбратьСтроку();
ТекДок=ЭлементыФормы.ТабличноеПоле1.ТекущаяСтрока.ссылка;
Форма=ТекДок.ПолучитьФорму();
Форма.Открыть();
КонецПроцедуры
23 — 16.09.09 — 20:26
(22) По-моему, отбор после таких махинаций
ТабПоле.Данные=»Запр»;
перестает работать? По крайней мере в интерактиве точно перестает… Но попробую, спасибо
24 — 16.09.09 — 20:27
А у меня все работает. Только Запр это реквизит формы.
25 — 16.09.09 — 20:30
Реквизит фвормы это тот который на вкладке реквизиты с типом таблицаЗначений
26 — 16.09.09 — 20:31
«Шайтан, как ты это сделал!» 

27 — 16.09.09 — 20:33
На здоровье. Просто Табличное поле это всего навсего отобразитель данных.
А вот в сами данные и нужно что то добавлять
28 — 16.09.09 — 20:33
(24) можно без реквизита формы: табПоле.значение = запр;
29 — 16.09.09 — 20:33
(28) Спасибо буду знать.
30 — 16.09.09 — 20:47
(27) Ложка дегтя, я так спешил обрадоваться, что не обратил внимание на привязанную командную панель, в ней значок фильтра стал недоступен. Что я сделал не так? 
(28) Не заполняет вроде тоже.
Или я туплю не подетски, или отбор не работает…
31 — 16.09.09 — 20:57
+(30) Точно, смотрю в отладчике, у ЭлементыФормы.ТабличноеПоле1 пропадает свойство «ОТборСтрок» после выполнения
ТабПоле.Данные=»Запр»;
(
32 — 16.09.09 — 20:59
А к чему Командная панель привязана?
33 — 16.09.09 — 21:01
К ЭлементыФормы.ТабличноеПоле1
34 — 16.09.09 — 21:02
(31) для ТЗ нет отбора
35 — 16.09.09 — 21:05
(34) Так ради отбора и вся каша затеяна с табличнойчастью обработки. Стало быть, динамический отбор и реквизит типа «таблицазначений» — детальки из разных конструкторов?
36 — 16.09.09 — 21:08
(35) Впринципе то несложно и свой отбор для Тз написать
37 — 16.09.09 — 21:13
(35) если ТЗ нужна для ускорения отображения, то можно держать ее в кеше, например в соответствии, где ключом будет строкаТЧ, а значением нужная ТЗ.
38 — 16.09.09 — 21:18
(36) Судя по всему, у меня по-любому без вариантов. 
(36),(37) Спасибо за помощь. Отрицательный результут — тоже результат. Буду шаманить с таблицамизначений.
Serginio1
39 — 16.09.09 — 21:20
Ну удачи тебе. Тоже многое для себя уяснил.
Для того, чтобы учитывать деньги и товары, в бизнесе широко используют разные таблицы. Почти каждый документ – это таблица.
В одной таблице перечислены товары к отгрузке со склада. В другой таблице – обязательства по оплате этих товаров.
Поэтому в 1С видное место занимает работа с таблицами.
Таблицы в 1С также называют «табличные части». Они есть у справочников, документов и других объектов конфигурации 1С.
В языке 1С таблицы называют «таблица значений».
Сегодня мы поговорим про работу в 1С с таблицами.
Что такое таблица 1С
Самое наглядное представление электронное таблицы можно посмотреть в Excel.
Таблица – это колонки, у которых есть имя. В большинстве случаев колонки имеют тип (типизированы). Это значит, что значения в этих колонках будут одного типа (строка или число или дата).
Строки пронумерованы и содержат значения в разрезе колонок.
На следующем скриншоте изображена таблица «Товары» из документа 1С. Таблицу документа называют «табличная часть». Она тоже имеет колонки, которые типизированы, и строчки, которые пронумерованы.
Над таблицей обычно расположена «командная панель» — группа кнопок для управления таблицей.
Другое «представление» таблиц в 1С – это таблица значений, которую программист использует в языке 1С. Таблицу значений можно вывести на экран с помощью метода ВыбратьСтроку().
И снова Вы видите те же колонки, пронумерованные строки. В таблице значений колонки могут быть как типизированны, так и нет. В последнем случае это значит, что в одной и той же колонке, в разных строчках будут совершенно разные значения.
Табличные части Объектов 1С
Итак, раскрыв в дереве объектов конфигурации любой справочник или документ Вы увидите ветку «Табличные части». С помощью нее можно добавить таблицу.
Такая таблица будет частью документа и будет сохраняться вместе с ним.
С точки зрения базы SQL – документ теперь будет хранится в двух таблицах, первая из которых будет хранить шапку документа и его идентификатор (одна строка на документ). Вторая таблица будет хранить табличные части с указанием идентификатора документа и номера строки (несколько строк на документ).
После добавления табличной части, в нее можно добавить реквизиты, также как и в шапку документа. Реквизиты табличной части – это ее колонки.
Так как для каждого реквизита необходимо указывать тип, то значения в этих колонках можно будет указать строго определенного типа.
Добавление строчек в такую таблицу проводится пользователем, в режиме Предприятие. Пользователь работает с формой документа, поэтому таблицу необходимо поместить на форму.
Таблицы в языке 1С
В языке 1С есть возможность создавать таблицы не привязанные к справочнику или документу.
//таблица
Таблица = Новый ТаблицаЗначений(); // создаем таблицу
//колонки
Таблица.Колонки.Добавить(«Наименование»); //добавляем нетипизированную колонку
Таблица.Колонки.Добавить(«Товар», Новый ОписаниеТипов(«СправочникСсылка.Номенклатура»)); //добавляем колонку со строгим указанием типа
//строчки
Строка = Таблица.Добавить();
Строка.Наименование = «Лопата»; //указываем произвольное значение
Строка.Товар = Справочники.Номенклатура.НайтиПоНаименованию(«Лопата»); //указываем значение со строго определенным типом
//обход всей таблицы
Для каждого Строка из Таблица Цикл
Сообщить(Строка.Наименование);
КонецЦикла;
Таблица как результат запроса
В предыдущих уроках мы обсуждали с Вами язык запросов 1С и возможность получения данных из базы 1С с помощью запросов 1С.
Запрос в результате своего выполнения возвращает таблицу, доступ к которой возможно получить двумя разными способами.
Первый – более быстрый – выборка, получение строк из нее возможен только по порядку. Второй – выгрузка результата запроса в таблицу значений и далее произвольный доступ к ней.
//Вариант 1 – последовательный доступ к результатам запроса
Запрос = Новый Запрос(«ВЫБРАТЬ Наименование ИЗ Справочник.Номенклатура»);
//получение таблицы
Выборка = Запрос.Выполнить().Выбрать();
//по порядку обходим все строки результата запроса
Пока Выборка.Следующий() Цикл
Сообщить(Выборка.Наименование);
КонецЦикла;
//Вариант 2 – выгрузка в таблицу значений
Запрос = Новый Запрос(«ВЫБРАТЬ Наименование ИЗ Справочник.Номенклатура»);
//получение таблицы
Таблица = Запрос.Выполнить().Выгрузить().
//далее можем также обойти все строки
Для каждого Строка из Таблица Цикл
Сообщить(Строка.Наименование);
КонецЦикла;
//или произвольно обращаться к строкам
Строка = Таблица.Найти(«Лопата», «Наименование»);
Важная особенность – в таблице, которая получена из результата запроса, все колонки будут строго типизированы. Это значит, что запросив поле Наименование из справочника Номенклатура, Вы получите колонку вида Строка с допустимой длиной не более N символов.
Таблица на форме (толстый клиент)
Пользователь работает с таблицей, когда она размещена на форме.
Базовые принципы работы с формами мы с Вами обсуждали в уроке по формам толстого клиента и в уроке по управляемым формам
Итак, разместим таблицу на форме. Для этого можно перетащить таблицу с панели элементов управления. Аналогично можно выбрать в меню Форма/Вставить элемент управления.
Далее необходимо зайти в свойства таблицы. Самое важное свойство для таблицы – Данные. В нем указывается связь таблицы на форме с хранением данных.
Данные могут храниться в конфигурации – тогда нужно выбрать существующую (ранее добавленную) табличную часть того объекта конфигурации, форму которого Вы редактируете.
Нажмите кнопку «…» в свойстве Данные. Для того, чтобы увидеть список табличных частей, нужно раскрыть ветку Объект.
При выборе табличной части 1С сама добавит колонки у таблицы на форме. Строки введенные пользователем в такую таблицу будут сохраняться автоматически вместе со справочником/документом.
В этом же свойстве Данные Вы можете ввести произвольное имя и выбрать тип ТаблицаЗначений.
Это значит, что выбрана произвольная таблица значений. Она не добавит автоматически колонки, не будет автоматически сохраняться, но и делать с ней можно все, что угодно.
Нажав правой кнопкой на таблице Вы можете добавить колонку. В свойствах колонки можно указать его имя (для обращения в коде 1С), заголовок колонки на форме, связь с реквизитом табличной части (последнее – если выбрана не произвольная таблица, а табличная часть).
В свойствах таблицы на форме Вы можете указать – доступно ли пользователю добавлять/удалять строки. Более продвинутая форма – галочка ТолькоПросмотр. Эти свойства удобно использовать для организации таблиц предназначенных для вывода информации, но не редактирования.
Чтобы управлять таблицей, нужно вывести на форму командную панель. Выберите пункт меню Форма/Вставить элемент управления/Командная панель.
В свойствах командной панели выберите галочку Автозаполнение, чтобы кнопки на панели появились автоматически.
Таблица на форме (тонкий/управляемый клиент)
На управляемой форме указанные действия выглядят немного по другому. Если Вам нужно разместить на форме табличную часть – раскройте ветку Объект и перетащите одну из табличных частей влево. И все!
Если нужно разместить таблицу значений, добавьте новый реквизит формы и в его свойствах укажите тип – таблица значений.
Чтобы добавить колонки, используйте меню по правой кнопке мыши на этом реквизите формы, пункт Добавить колонку реквизита.
После чего также перетащите таблицу влево.
Чтобы у таблицы появилась командная панель, в свойствах таблицы выберите значения в секции Использование – Положение командной панели.
Выгрузка таблицы в Excel
Любую таблицу 1С, расположенную на форме, можно распечатать или выгрузить в Excel.
Для этого щелкните правой кнопкой мыши на свободном месте в таблице и выберите пункт Вывести список.
В управляемом (тонком) клиент аналогичные действия можно выполнить с помощью пункта меню Все действия/Вывести список.
Список в табличном документе можно сохранить в Excel с помощью пункта меню Файл/Сохранить как с выбранным типом Excel.
Загрузка…
Таблица значений в табличной части
Автор joiner, 24 июн 2016, 15:00
0 Пользователей и 1 гость просматривают эту тему.
Добрый день, возникла необходимость в добавления в табличную часть таблицы значений,
на форме это сделать получается, добавлением колонки реквизита к табличной части и установкой его типа в качестве ТаблицаЗначений;
это позволяет добавлять на форму 2 таблицы, в которых одной записи в первой таблице соответствует несколько записей из второй.
Однако данное решение не позволяет работать с данными второй таблицы из Модуля объекта (при проведении например). Содержать все необходимые для проведения данные в первой таблице как-то нелогично и некрасиво.
Можно ли как-то добавить таблицу значений к табличной части, чтобы это было видно в Модуле объекта?
Спасибо.
Нет, нельзя. ТЗ — это чисто интерфейсное решение, данные в ТЗ не сохраняются.
Хотите красивостей, добавляйте еще одну табличную часть и настраивайте отборы, по аналогии работы документа Начисление ЗП в бух2.0
Либо делайте 2 ТЧ, но не выводите их в форму, и работайте с ними. А пользователю показывайте, что то общее.
К примеру как контактная информация контрагентов или организаций реализована в новых конфах.
ТЧ Контактная информация в справочниках есть. Но пользователю показываются только определенные представления из её строк.
Теги:
- Форум 1С
-
►
Форум 1С — ПРЕДПРИЯТИЕ 8.0 8.1 8.2 8.3 8.4 -
►
Конфигурирование, программирование в 1С Предприятие 8 -
►
Таблица значений в табличной части
Похожие темы (5)
Поиск
Многие объекты метаданных в 1С могут иметь табличную часть. У одного объекта может быть создано неограниченное количество табличных частей.
Табличная часть может быть создана только как подчиненный объект у какого-либо объекта метаданных, например у справочника или у документа.
Строка табличной части не является отдельным объектом. К строке можно обратиться только по индексу строки в табличной части.
Программно нельзя создать табличную часть через конструктор. Можно только получить к ней доступ через основной объект:
//создаем объект НовыйДок = Документы.РасходТовара.СоздатьДокумент(); //через объект получаем доступ к табличной части СписокУслуг ТабЧастьДока = НовыйДок.СписокУслуг;
Строка табличной части
Добавить новую строку табличной части можно с помощью методов Добавить и Вставить. Через точку от строки табличной части можно обращаться к реквизитам строки:
//добавление строки табличной части СтрокаТабличнойЧасти = НовыйДок.СписокУслуг.Добавить(); СтрокаТабличнойЧасти.Услуга = СсылкаНаУслугу; СтрокаТабличнойЧасти.СуммаУслуги = 900; //для метода Вставить нужно указать индекс строки СтрокаТабличнойЧасти = НовыйДок.СписокУслуг.Вставить(1); СтрокаТабличнойЧасти.Услуга = СсылкаНаУслугу; СтрокаТабличнойЧасти.СуммаУслуги = 800; //у строки есть предопределенная колонка НомерСтроки Сообщить(СтрокаТабличнойЧасти.НомерСтроки); //2 //в отличии от индексов номера строк начинаются с 1
Заполнение табличной части
Заполнить табличную часть можно по одной строке с помощью методов Добавить и Вставить, а также с помощью методов Загрузить и ЗагрузитьКолонку для массового заполнения табличной части:
//создаем таблицу значений
ТЗТаблЧасть = Новый ТаблицаЗначений;
ТЗТаблЧасть.Колонки.Добавить("Услуга");
ТЗТаблЧасть.Колонки.Добавить("СуммаУслуги");
СтрокаТЗ = ТЗТаблЧасть.Вставить(1);
СтрокаТЗ.Услуга = СсылкаНаУслугу;
СтрокаТЗ.СуммаУслуги = 800;
СтрокаТЗ = ТЗТаблЧасть.Вставить(1);
СтрокаТЗ.Услуга = СсылкаНаУслугу;
СтрокаТЗ.СуммаУслуги = 900;
//создаем документ
НовыйДок = Документы.РасходТовара.СоздатьДокумент();
//заполнение табличной части из таблицы значений
//имена колонок должны совпадать
//все прежние строки будут удалены из табличной части
НовыйДок.СписокУслуг.Загрузить(ТЗТаблЧасть);
МассивТаблЧасть = Новый Массив;
МассивТаблЧасть.Добавить(500);
МассивТаблЧасть.Добавить(600);
//заполнение одной колонки табличной части
//все значения из массива будут загружены в колонку СуммаУслуги
НовыйДок.СписокУслуг.ЗагрузитьКолонку(МассивТаблЧасть, "СуммаУслуги");
Перебор табличной части
Перебрать табличную часть можно в цикле:
//из ссылки получаем объект ДокОбъект = СсылкаНаДок.ПолучитьОбъект(); //обход табличной части через цикл Для Каждого Для Каждого СтрокаТабличнойЧасти Из ДокОбъект.СписокУслуг Цикл Сообщить(СтрокаТабличнойЧасти.НомерСтроки); КонецЦикла; //количество строк табличной части КолвоСтрок = ДокОбъект.СписокУслуг.Количество(); //Перебор табличной части через цикл Для Для ё = 0 По КолвоСтрок Цикл //строку можно получить через квадратные скобки СтрокаТабличнойЧасти = ДокОбъект.СписокУслуг[ё]; Сообщить(СтрокаТабличнойЧасти.НомерСтроки); //или методом Получить СтрокаТабличнойЧасти = ДокОбъект.СписокУслуг.Получить(ё); Сообщить(СтрокаТабличнойЧасти.НомерСтроки); КонецЦикла; //через цикл Пока можно перебрать табличную часть с конца ИндСтр = КолвоСтрок; Пока ИндСтр > 0 Цикл //строку можно получить через квадратные скобки СтрокаТабличнойЧасти = ДокОбъект.СписокУслуг[ИндСтр]; Сообщить(СтрокаТабличнойЧасти.НомерСтроки); ИндСтр = ИндСтр - 1; КонецЦикла;
Удаление строк табличной части
Удалить одну строку табличной части можно с помощью метода Удалить. Для удаления всех строк применяется метод Очистить.
//из ссылки получаем объект ДокОбъект = СсылкаНаДок.ПолучитьОбъект(); //удалить строку табличной части по индексу //удалит вторую строку ДокОбъект.СписокУслуг.Удалить(1); //удалить все строки табличной части ДокОбъект.СписокУслуг.Очистить(); //можно так Для Каждого СтрТаблЧасть Из ДокОбъект.СписокУслуг Цикл ДокОбъект.СписокУслуг.Удалить(СтрТаблЧасть); КонецЦикла; //удалить строки табличной части по условию //строки перебираем с конца ИндСтр = ДокОбъект.СписокУслуг.Количество() - 1; Пока ИндСтр >= 0 Цикл //по индексу получаем строку СтрокаТабличнойЧасти = ДокОбъект.СписокУслуг.Получить(ИндСтр); //удаляем все строки, где СуммаУслуги < 500 Если СтрокаТабличнойЧасти.СуммаУслуги < 500 Тогда ДокОбъект.СписокУслуг.Удалить(СтрокаТабличнойЧасти); КонецЕсли; //уменьшаем индекс ИндСтр = ИндСтр - 1; КонецЦикла; //после удаления строк нужно записать объект ДокОбъект.Записать();
Как выгрузить табличную часть
Табличную часть можно выгрузить в таблицу значений методом Выгрузить. Также можно выгрузить в массив все значения одной колонки методом ВыгрузитьКолонку:
//из ссылки получаем объект
ДокОбъект = СсылкаНаДок.ПолучитьОбъект();
//выгрузить табличную часть в таблицу значений
//в таблице значений будут такие же колонки,
//как в табличной части + колонка НомерСтроки
ТЗТаблЧасть = ДокОбъект.СписокУслуг.Выгрузить();
//можно указать какие колонки выгружать
ТЗТаблЧасть = ДокОбъект.СписокУслуг.Выгрузить(, "Услуга");
//можно указать отбор строк табличной части
ОтборСтрокТаблЧасти = Новый Структура;
ОтборСтрокТаблЧасти.Вставить("Услуга", СсылкаНаУслугу);
ТЗТаблЧасть = ДокОбъект.СписокУслуг.Выгрузить(ОтборСтрокТаблЧасти);
//можно выгрузить в массив
МассивУслуг = ДокОбъект.СписокУслуг.ВыгрузитьКолонку("Услуга");
Методом ВыгрузитьКолонки можно создать пустую таблицу значений с такими же колонками, как у табличной части:
//все колонки
ПустаяТЗ = ДокОбъект.СписокУслуг.ВыгрузитьКолонки();
//можно указать список колонок
ПустаяТЗ = ДокОбъект.СписокУслуг.ВыгрузитьКолонки("Услуга");
Итог по табличной части
Для получения итога по числовой колонке табличной части можно воспользоваться методом Итог:
//из ссылки получаем объект
ДокОбъект = СсылкаНаДок.ПолучитьОбъект();
//параметром указывается имя колонки
СуммаВсего = ДокОбъект.СписокУслуг.Итог("СуммаУслуги");
Свернуть табличную часть
Чтобы свернуть табличную часть можно воспользоваться методом Свернуть. Первым параметром указывается список колонок группировки, вторым колонки суммирования. Все колонки табличной части должны быть указаны или в первом или во втором параметре.
//из ссылки получаем объект
ДокОбъект = СсылкаНаДок.ПолучитьОбъект();
//сворачиваем табличную часть
ДокОбъект.СписокУслуг.Свернуть("Услуга", "СуммаУслуги");
//записываем
ДокОбъект.Записать();
Сортировка табличной части
Для сортировки табличной части используется метод Сортировать:
//из ссылки получаем объект
ДокОбъект = СсылкаНаДок.ПолучитьОбъект();
//сортировка табличной части по возрастанию сумму
ДокОбъект.СписокУслуг.Сортировать("СуммаУслуги");
//сортировка табличной части по убыванию сумму
ДокОбъект.СписокУслуг.Сортировать("СуммаУслуги Убыв");
//записываем
ДокОбъект.Записать();
Поиск в табличной части
Чтобы найти строку в табличной части можно воспользоваться методами Найти и НайтиСтроки. Метод Найти позволяет найти одну (первую попавшуюся) строку по значению. Метод НайтиСтроки позволяет найти несколько строк, подходящих под условие:
//из ссылки получаем объект
ДокОбъект = СсылкаНаДок.ПолучитьОбъект();
//найти строку с суммой равно 500
СтрокаТабличнойЧасти = ДокОбъект.СписокУслуг.Найти(500, "СуммаУслуги");
Если Не СтрокаТабличнойЧасти = Неопределено Тогда
//нашли
КонецЕсли;
//найти все строки с суммой равной 500
СтрПоискаСтрок = Новый Структура;
СтрПоискаСтрок.Вставить("СуммаУслуги", 500);
МассивСтрокТаблЧасти = ДокОбъект.СписокУслуг.НайтиСтроки(СтрПоискаСтрок);
Для Каждого СтрокаТабличнойЧасти Цикл
Сообщить(СтрокаТабличнойЧасти.НомерСтроки);
КонецЦикла;
ОЧИСТКА ТАБЛИЧНОЙ ЧАСТИ ДОКУМЕНТА
Каждый раз при выполнении кода могут добавляться новые строки, а вполне возможно, что пользователю старые строки не нужны. Поэтому, чтобы очищать имеющиеся строки, перед добавлением новых строк можно воспользоваться методом Очистить объекта СписокТоваров, который имеет тип ДанныйФормыКоллекция.
Объект.СписокТоваров.Очистить();
После выполнения этого метода вся табличная часть будет очищена.
ТЕКУЩАЯ СТРОКА ТАБЛИЧНОЙ ЧАСТИ
В процессе работы может возникнуть необходимость отработать текущую строку табличной части, т.е. ту строку, которая в данный момент выделена.
Например, может возникать ситуация, что мы редактируем какое-нибудь поле текущей строки таблицы на форме, и нам нужно, чтобы было пересчитано другое поле (или несколько полей) этой текущей строки. Например, мы изменяем цену (или количество) нашей табличной части, и необходимо, чтобы сумма автоматически была пересчитана.
Для решения данной задачи нужно воспользоваться свойством ТекущиеДанные элемента с типом ТаблицаФормы, который соответствует нужной табличной части. Свойство ТекущиеДанные возвращает значение полей текущей строки.
Для того, чтобы отработать изменение текущего поля цены, создадим обработчик события ПриИзменении этого поля.
В этом обработчике напишем код, который будет пересчитывать значения полей текущей строки табличной части.
&НаКлиенте Процедура СписокТоваровЦенаПриИзменении(Элемент) ТекДанные = Элементы.СписокТоваров.ТекущиеДанные; Если ТекДанные = Неопределено Тогда Возврат; //если пустая таблица КонецЕсли; ТекДанные.Сумма = ТекДанные.Количество * ТекДанные.Цена; КонецПроцедуры
Ещё пример: я создал команду, которая должна увеличивать количество в текущий строке табличной части в два раза и пересчитывать сумму. Эта команда размещена в командной панели таблицы и имеет следующий код:
&НаКлиенте
Процедура УмножитьНа2(Команда)
ТекДанные = Элементы.СписокТоваров.ТекущиеДанные;
Если ТекДанные = Неопределено Тогда
Возврат; //если пустая таблица
КонецЕсли;
ТекДанные.Количество = ТекДанные.Количество * 2;
ТекДанные.Сумма = ТекДанные.Количество * ТекДанные.Цена;
КонецПроцедуры
Теперь доработаем этот пример: после увеличения текущей строки будем сдвигать текущую строку на строку вниз. Для этого допишем предыдущий код:
Идентификтор = Элементы.СписокТоваров.ТекущаяСтрока;
ИдентификторСлед = Идентификтор + 1;
Если ИдентификторСлед < Объект.СписокТоваров.Количество() Тогда
Элементы.СписокТоваров.ТекущаяСтрока = ИдентификторСлед;
КонецЕсли;
В этом коде мы получаем идентификатор текущий строки при помощи свойства таблицы управляемой формы ТекущаяСтрока, и если мы не выходим за приделы таблицы, то сдвигаем нашу текущую строку на один шаг вниз.
Также при помощи текущей строки можно находить аналогичную строку в соответствующей табличной части основного реквизита формы Объект, которую также можно изменять (строка на форме тоже изменится автоматически). Мы ранее сделали пересчет суммы при изменении цены, теперь сделаем пересчет суммы при изменении количества, но напрямую через реквизит Объект.
&НаКлиенте
Процедура СписокТоваровКоличествоПриИзменении(Элемент)
Идентификтор = Элементы.СписокТоваров.ТекущаяСтрока;
Если Идентификтор = Неопределено Тогда
Возврат;
КонецЕсли;
ТекСтрока = Объект.СписокТоваров.НайтиПоИдентификатору(Идентификтор);
Если ТекСтрока = Неопределено Тогда
Возврат;
КонецЕсли;
ТекСтрока.Сумма = ТекСтрока.Цена * ТекСтрока.Количество;
КонецПроцедуры
В этом коде мы используем метод НайтиПоИдентификатору переменной Объект.СписокТоваров, которая имеет типа ДанныйФормыКоллекция, этот метод получает элемент коллекции по указанному идентификатору. Если этот элемент найден, то мы можем с ними работать, причем данные на форме изменяться автоматически.
Смотрите также:
Электронный учебник по программированию в 1С
Рекомендации по изучению программирования 1С с нуля
Игра «Кто хочет стать миллионером?» с вопросами на определенную тематику (язык программирования JavaScript, английские, немецкие, французские, испанские, португальские, нидерландские, итальянские слова, электробезопасность, промышленная безопасность, бокс и т.п.), написанная на 1С
Программирование в 1С 8.3 с нуля — краткий самоучитель
Комплексная подготовка программистов 1С:Предприятие 8.2
Сайты с уроками программирования и со справочниками
Youtube-каналы с уроками программирования
Сайты для обучения программированию
Лекции и уроки
Таблицы 1С
Для того, чтобы учитывать деньги и товары, в бизнесе широко используют разные таблицы. Почти каждый документ – это таблица.
В одной таблице перечислены товары к отгрузке со склада. В другой таблице – обязательства по оплате этих товаров.
Поэтому в 1С видное место занимает работа с таблицами.
Таблицы в 1С также называют «табличные части». Они есть у справочников, документов и других объектов конфигурации 1С.
В языке 1С таблицы называют «таблица значений».
Сегодня мы поговорим про работу в 1С с таблицами.
Что такое таблица 1С
Самое наглядное представление электронное таблицы можно посмотреть в Excel.
Таблица – это колонки, у которых есть имя. В большинстве случаев колонки имеют тип (типизированы). Это значит, что значения в этих колонках будут одного типа (строка или число или дата).
Строки пронумерованы и содержат значения в разрезе колонок.
На следующем скриншоте изображена таблица «Товары» из документа 1С. Таблицу документа называют «табличная часть». Она тоже имеет колонки, которые типизированы, и строчки, которые пронумерованы.
Над таблицей обычно расположена «командная панель» — группа кнопок для управления таблицей.
Другое «представление» таблиц в 1С – это таблица значений, которую программист использует в языке 1С. Таблицу значений можно вывести на экран с помощью метода ВыбратьСтроку().
И снова Вы видите те же колонки, пронумерованные строки. В таблице значений колонки могут быть как типизированны, так и нет. В последнем случае это значит, что в одной и той же колонке, в разных строчках будут совершенно разные значения.
Табличные части Объектов 1С
Итак, раскрыв в дереве объектов конфигурации любой справочник или документ Вы увидите ветку «Табличные части». С помощью нее можно добавить таблицу.
Такая таблица будет частью документа и будет сохраняться вместе с ним.
С точки зрения базы SQL – документ теперь будет хранится в двух таблицах, первая из которых будет хранить шапку документа и его идентификатор (одна строка на документ). Вторая таблица будет хранить табличные части с указанием идентификатора документа и номера строки (несколько строк на документ).
После добавления табличной части, в нее можно добавить реквизиты, также как и в шапку документа. Реквизиты табличной части – это ее колонки.
Так как для каждого реквизита необходимо указывать тип, то значения в этих колонках можно будет указать строго определенного типа.
Добавление строчек в такую таблицу проводится пользователем, в режиме Предприятие. Пользователь работает с формой документа, поэтому таблицу необходимо поместить на форму.
Таблицы в языке 1С
В языке 1С есть возможность создавать таблицы не привязанные к справочнику или документу.
//таблица
Таблица = Новый ТаблицаЗначений(); // создаем таблицу
//колонки Таблица.Колонки.Добавить(«Наименование»); //добавляем нетипизированную колонку
Таблица.Колонки.Добавить(«Товар», Новый ОписаниеТипов(«СправочникСсылка.Номенклатура»)); //добавляем колонку со строгим указанием типа
//строчки Строка = Таблица.Добавить(); Строка.Наименование = «Лопата»; //указываем произвольное значение
Строка.Товар = Справочники.Номенклатура.НайтиПоНаименованию(«Лопата»); //указываем значение со строго определенным типом
//обход всей таблицы Для каждого Строка из Таблица Цикл Сообщить(Строка.Наименование); КонецЦикла;
Таблица как результат запроса
В предыдущих уроках мы обсуждали с Вами язык запросов 1С и возможность получения данных из базы 1С с помощью запросов 1С.
Запрос в результате своего выполнения возвращает таблицу, доступ к которой возможно получить двумя разными способами.
Первый – более быстрый – выборка, получение строк из нее возможен только по порядку. Второй – выгрузка результата запроса в таблицу значений и далее произвольный доступ к ней.
//Вариант 1 – последовательный доступ к результатам запроса Запрос = Новый Запрос(«ВЫБРАТЬ Наименование ИЗ Справочник.Номенклатура»); //получение таблицы Выборка = Запрос.Выполнить().Выбрать(); //по порядку обходим все строки результата запроса Пока Выборка.Следующий() Цикл Сообщить(Выборка.Наименование);
КонецЦикла;
//Вариант 2 – выгрузка в таблицу значений Запрос = Новый Запрос(«ВЫБРАТЬ Наименование ИЗ Справочник.Номенклатура»); //получение таблицы Таблица = Запрос.Выполнить().Выгрузить(). //далее можем также обойти все строки Для каждого Строка из Таблица Цикл Сообщить(Строка.Наименование); КонецЦикла; //или произвольно обращаться к строкам Строка = Таблица.Найти(«Лопата», «Наименование»);
Важная особенность – в таблице, которая получена из результата запроса, все колонки будут строго типизированы. Это значит, что запросив поле Наименование из справочника Номенклатура, Вы получите колонку вида Строка с допустимой длиной не более N символов.
Таблица на форме (толстый клиент)
Пользователь работает с таблицей, когда она размещена на форме.
Базовые принципы работы с формами мы с Вами обсуждали в уроке по формам толстого клиента и в уроке по управляемым формам
Итак, разместим таблицу на форме. Для этого можно перетащить таблицу с панели элементов управления. Аналогично можно выбрать в меню Форма/Вставить элемент управления.
Далее необходимо зайти в свойства таблицы. Самое важное свойство для таблицы – Данные. В нем указывается связь таблицы на форме с хранением данных.
Данные могут храниться в конфигурации – тогда нужно выбрать существующую (ранее добавленную) табличную часть того объекта конфигурации, форму которого Вы редактируете.
Нажмите кнопку «…» в свойстве Данные. Для того, чтобы увидеть список табличных частей, нужно раскрыть ветку Объект.
При выборе табличной части 1С сама добавит колонки у таблицы на форме. Строки введенные пользователем в такую таблицу будут сохраняться автоматически вместе со справочником/документом.
В этом же свойстве Данные Вы можете ввести произвольное имя и выбрать тип ТаблицаЗначений.
Это значит, что выбрана произвольная таблица значений. Она не добавит автоматически колонки, не будет автоматически сохраняться, но и делать с ней можно все, что угодно.
Нажав правой кнопкой на таблице Вы можете добавить колонку. В свойствах колонки можно указать его имя (для обращения в коде 1С), заголовок колонки на форме, связь с реквизитом табличной части (последнее – если выбрана не произвольная таблица, а табличная часть).
В свойствах таблицы на форме Вы можете указать – доступно ли пользователю добавлять/удалять строки. Более продвинутая форма – галочка ТолькоПросмотр. Эти свойства удобно использовать для организации таблиц предназначенных для вывода информации, но не редактирования.
Чтобы управлять таблицей, нужно вывести на форму командную панель. Выберите пункт меню Форма/Вставить элемент управления/Командная панель.
В свойствах командной панели выберите галочку Автозаполнение, чтобы кнопки на панели появились автоматически.
Таблица на форме (тонкий/управляемый клиент)
На управляемой форме указанные действия выглядят немного по другому. Если Вам нужно разместить на форме табличную часть – раскройте ветку Объект и перетащите одну из табличных частей влево. И все!
Если нужно разместить таблицу значений, добавьте новый реквизит формы и в его свойствах укажите тип – таблица значений.
Чтобы добавить колонки, используйте меню по правой кнопке мыши на этом реквизите формы, пункт Добавить колонку реквизита.
После чего также перетащите таблицу влево.
Чтобы у таблицы появилась командная панель, в свойствах таблицы выберите значения в секции Использование – Положение командной панели.
Выгрузка таблицы в Excel
Любую таблицу 1С, расположенную на форме, можно распечатать или выгрузить в Excel.
Для этого щелкните правой кнопкой мыши на свободном месте в таблице и выберите пункт Вывести список.
В управляемом (тонком) клиент аналогичные действия можно выполнить с помощью пункта меню Все действия/Вывести список.
Список в табличном документе можно сохранить в Excel с помощью пункта меню Файл/Сохранить как с выбранным типом Excel.
howknow1c.ru
Таблица значений в 1С 8.3 (8.2)
Таблица значений в платформе 1С 8.3 (8.2) это универсальная коллекция значений, которую разработчик может использовать при программной разработке для реализации своих алгоритмов. По сути, таблица значений 1С представляет собой динамический набор значений, имеющих колонки и столбцы.
Работая в конфигураторе 1С, программист может создать таблицу значений, как при помощи кода, так и интерактивно на форме.
Таблица значений 1С на управляемой форме
На любой управляемой форме 1С 8.3 разработчик может разместить таблицу значений в виде реквизита формы. Для этого нужно создать новый реквизит и задать ему тип «Таблица значений».
Таблица значений на форме размещается в виде элемента формы Таблица. Это элемент будет создан автоматически, если мы перетащим мышкой реквизит с типом таблица значений в дерево элементов.
Но если у Вас нет задачи, чтобы пользователь как-то интерактивно работал с таблицей значений на форме, то совсем необязательно создавать реквизит формы с типом таблица значений. Разработчик может работать с таблицей значений из встроенного языка программирования 1С.
Программное создание таблицы значений 1С
Вы можете создать таблицу значений в любом программном модуле при помощи оператора Новый.
ТЗ = Новый ТаблицаЗначений;
Эта таблица значений будет существовать в том контексте, в котором Вы её создали: если Вы создали её в процедуре или функции, то она будет существовать до того момента пока выполняется эта процедура или функция. Если Вы её создали в программном модуле объекта, то таблица значений будет существовать пока выполняется обращение к этому объекту.
Но имейте в виду, что если вы создали таблицу значений в процедуре или функции программного модуля управляемой формы 1С 8.3, то на клиенте (под директивой &НаКлиенте) код будет выполняться только в толстом клиенте. В тонком клиенте и на веб-клиенте нельзя работать с таблицей значений. Возникнет ошибка!
Но, на тонком и веб-клиенте нельзя работать только с таблицей значений 1С, которая создана программно (с помощью оператора Новый). Если же таблица значений создана на форме в виде реквизита, то обращаться к этому реквизиту можно в любом контексте, платформа преобразует её в объект ДанныеФормыКоллекция.
Как я уже говорил, вся информация в таблице значений в платформе 1С 8.3 разбита на колонки и на строки, причем каждая колонка таблицы должна иметь свое уникальное название. В том случае, если таблица выводится на форму посредством элемента Таблица, то у данного элемента могут быть все колонки, которые имеются у соответствующего реквизита с типом таблица значений с соответствующими именами. Причем количество колонок в Таблице на форме может быть меньше, чем непосредственно в таблице значений, то есть не все колонки из таблицы значений нужно отображать в таблице.
Нет никаких ограничений на количество колонок. Количество колонок, как правило, всегда фиксировано и задается разработчиком на этапе создания нужного функционала, а количество строк переменно.
У таблиц значений есть ряд полезных методов, которые позволяют сортировать таблицу по определенным колонкам, сворачивать, получать итог по конкретной колонке, осуществлять выборку части строк по определенным параметрам и многое другое.
О работе с колонками и строками в таблицах значений 1С читайте в статьях по ссылкам:
Колонки таблицы значений в 1С 8.3 (8.2) Строки таблицы значений в 1С 8.3 (8.2) Методы таблиц значений 1С 8.3. Часть 1. Поиск и копирование Методы таблиц значений 1С 8.3. Часть 2. Сортировка, итоги и свертка.
Статьи о других универсальных коллекциях значений в 1С
Соответствия в 1С
Массивы в 1С
Список значений в 1С
Структура в 1С
Более подробно о работе с таблицами значений и другими интересными объектами языка программирования в 1С читайте в моей книге «Программировать в 1С за 11 шагов»

Изучайте программирование в 1С в месте с моей книги «Программировать в 1С за 11 шагов»
- Книга написана понятным и простым языком — для новичка.
- Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
- Научитесь понимать архитектуру 1С;
- Станете писать код на языке 1С;
- Освоите основные приемы программирования;
- Закрепите полученные знания при помощи задачника;
Книга «Основы разработки в 1С: Такси»
Отличное пособие по разработке в управляемом приложении 1С, как для начинающих разработчиков, так и для опытных программистов.
- Очень доступный и понятный язык изложения
- Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
- Поймете идеологию управляемого приложения 1С
- Узнаете, как разрабатывать управляемое приложение;
- Научитесь разрабатывать управляемые формы 1С;
- Сможете работать с основными и нужными элементами управляемых форм
- Программирование под управляемым приложением станет понятным
Промо-код на скидку в 15% — 48PVXHeYu
Если Вам помог этот урок решить какую-нибудь проблему, понравился или оказался полезен, то Вы можете поддержать мой проект, перечислив любую сумму:
можно оплатить вручную:
Яндекс.Деньги — 410012882996301 Web Money — R955262494655
Вступайте в мои группы:
Вконтакте: https://vk.com/1c_prosto Фейсбуке: https://www.facebook.com/groups/922972144448119/ ОК: http://ok.ru/group/52970839015518 Твиттер: https://twitter.com/signum2009
www.1s-up.ru
Таблица значений 1С
admin ОШИБКИ В 1С, ФУНКЦИИ
Таблица значений выступает в программе 1C основным средством хранения и последующей обработки информации. Зачастую программисты пользуются данной таблицы для организации временных хранилищ определенного набора данных.
Таблицы значений сформированы из набора строк и столбцов. Для каждой из строк характерно наличие собственного индекса, обязательно начинающегося с нуля. Сама таблица значений может иметь различный размер с варьированием количества строк и столбцов. Соответственно по строке можно вести поиск информации или осуществлять выборку необходимых данных по критериям отбора. Допускается функционалом применение сортировки, удаление строк и другие возможности.
Ниже представлены ответы на основные вопросы, связанные с использованием таблиц значений.
Создание новой таблицы значений
По результатам данной команды будет создана таблица, в которой имеется три столбца (колонки).
Добавление колонок
Данная команда предполагает создание нового столбца, обладающего размерностью в 9 символов (точность 2 символа).
Добавление новых строк
Данная команда позволяет выбрать данные по номенклатуре и провести их добавление в таблицу значений.
Выгрузка данных запроса в табличном виде
По результатам применения команды, запрашиваемые данные будут сформированы в таблицу с единственной колонкой (столбцом).
Выборка строк (может быть проведена двумя способами)
или
Представленная команда позволяет провести построчную выборку данных, причем во втором случае выборка производится на основе индексов строк.
Выборка строк с отбором
В данном случае будет осуществлена выборка, критерием отбора в которой станет «Номенклатура».
Сортировка
Данная команда предполагает введение разнонаправленной сортировки для двух значений.
Определение итогов в колонке
Команда проводит расчет выбранного показателя с последующей записью в переменную.
Копирование таблицы
Данная команда позволяет создать полноценную копию таблицы.
Свернуть таблицу по значению и провести суммирование результатов
По выбранной колонке таблица сворачивается с одновременным расчетом суммы по другой колонке.
Поиск нужной строки по значению
Команда позволяет найти необходимую строку с данными.
Удаление строк или очистка всей таблицы
Установка и получение значений
Команда позволяет получить строку на основе ее индекса.
Вставка значений
Команда позволяет на основе индекса вставить строку и провести ее заполнение.
Дополнительный функционал для упрощения работы
usersv81c.ru
Методы таблиц значений 1С 8.3. Часть 1. Поиск и копирование
Продолжаем изучать программную работу с таблицей значений в 1С. В прошлых статьях мы научились создавать таблицу значений (как программно, так и на управляемой форме), добавлять колонки и строки таблицы значений. Осталось научиться работать с самой таблицей значений. В первой части мы узнаем, как находить строки по нужному отбору, и научимся копировать таблицу значений с нужным отбором.
Поиск в таблице значений 1С 8.3
Поиск в таблице значений можно осуществить с помощью двух методов: Найти и НайтиСтроки. Метод Найти является функцией, которая вернёт первую строку, где встречается искомое значение. Рекомендуется метод применять для поиска уникальных значений, т.к. при наличии нескольких строк с искомым значением, будет возвращена только одна. Если же нам нужно найти все строки, где встречается искомое значение, то необходимо использовать метод НайтиСтроки, который возвращает массив строк с нужным значением.
Разберем оба этих метода на примере.
Метод Найти таблицы значений 1С 8.3
Этот метод является функцией, которая возвращает строку, если искомое значение найдено, и Неопределено, если нет. При помощи этого метода можно найти любое значение, которое имеется в таблице значений. Причем, не обязательно знать колонку, где это значение может содержаться.
Данная функция имеет следующий синтаксис:
Найти(Значение, Колонки)
Где:
Значение – то значение, которое мы ищем в таблице.
Колонки – колонки таблицы значений, по которым осуществляется поиск (необязательный параметр, можно осуществлять поиск по всем колонкам таблицы значений).
Работа этого метода показана на следующем примере:
ТЗ = Новый ТаблицаЗначений; ТЗ.Колонки.Добавить(«ФИО»); ТЗ.Колонки.Добавить(«ДатаРождения»); //первая строка НСтр = ТЗ.Добавить(); НСтр.ФИО = «Иванов И.И»; НСтр.ДатаРождения = Дата(1981,1,15); //вторая строка НСтр = ТЗ.Добавить(); НСтр.ФИО = «Петров П.С»; НСтр.ДатаРождения = Дата(1984,5,25); //третья строка НСтр = ТЗ.Добавить(); НСтр.ФИО = «Тарасов К.В»; НСтр.ДатаРождения = Дата(1987,6,11); //первая строка стрТарасов = ТЗ.Найти(«Тарасов К.В»,«ФИО»);
Если мы посмотрим на значение переменной стрТарасов в отладке, то увидим ссылку на конкретную строку таблицы значений.
Точно такой же результат будет, если мы очистим второй параметр.
Если же мы сделаем поиск по второй колонке, то результат будет Неопределено.
Такой же результат Неопределено будет и при поиске несуществующего значения.
Метод НайтиСтроки таблицы значений 1С 8.3
Если метод Найти возвращает конкретную строку таблицы значений, то метод НайтиСтроки, возвращает массив строк, которые соответствуют нужному условию. Данный метод имеет следующий синтаксис
НайтиСтроки(СтруктураПоиска)
У этого метода один параметр — структура, где в качестве ключей задаются названия колонок, по которым будет вестись поиск, а в качестве значений – те значения, по которым должен осуществляться поиск. Таким образом, если в методе Найти мы могли вести поиск только по одному значению, то при помощи метода НайтиСтроки можно осуществлять поиск по комбинации значений в разных колонках.
Переделаем предыдущую таблицу значений:
ТЗ = Новый ТаблицаЗначений; ТЗ.Колонки.Добавить(«Фамилия»); ТЗ.Колонки.Добавить(«Имя»); ТЗ.Колонки.Добавить(«ДатаРождения»); //первая строка НСтр = ТЗ.Добавить(); НСтр.Фамилия = «Иванов»; НСтр.Имя = «Петр»; НСтр.ДатаРождения = Дата(1981,1,15); //вторая строка НСтр = ТЗ.Добавить(); НСтр.Фамилия = «Иванов»; НСтр.Имя = «Алексей»; НСтр.ДатаРождения = Дата(1981,1,25); //третья строка НСтр = ТЗ.Добавить(); НСтр.Фамилия = «Григорьев»; НСтр.Имя = «Петр»; НСтр.ДатаРождения = Дата(1987,6,11);
Теперь найдем все строки таблицы значений, где встречается имя Петр
МассивСтрок = ТЗ.НайтиСтроки(Новый Структура(«Имя»,«Петр»));
Посмотрим на результат.
Или найдем всех Петров, родившихся 11.06.1987 года.
ПараметрыПоиска = Новый Структура(«Имя,ДатаРождения»,«Петр»,Дата(1987,6,11)); МассивСтрок = ТЗ.НайтиСтроки(ПараметрыПоиска);
В этот раз найденных строк будет меньше.
Если же мы зададим имя, которого нет в нашей таблице, то получим пустой массив.
Причем обратите внимание, в массиве содержится ссылка на строку таблицы значений. Это значит, что если Вы измените строку в массиве, то также изменится строка в таблице значений.
Скопировать таблицу значений 1С
В языке разработке 1С можно одну таблицу значений скопировать в другую. Причем можно просто скопировать структуру таблицы значений, т.е. создать точно такую же таблицу значений, с тем же набором колонок, но без строк. Такое копирование осуществляется при помощи метода СкопироватьКолонки. А также скопировать одну таблицу в другую с различными отборами, это можно сделать, используя метод Скопировать. Разберем оба этих метода.
Метод СкопироватьКолонки таблицы значений 1С 8.3
Данный метод является функцией, которая возвращает пустую таблицу значений, с набором колонок, как у изначальной. У этого метода следующий синтаксис:
СкопироватьКолонки(СписокКолонок)
Где, параметр СписокКолонок необязательный параметр, в нем должны быть перечислены имена колонок, которые присутствуют в изначальной таблице, и которые должны быть в новой. Если он не указан, то в новой таблице значений будут такие же колонки, что и в изначальной.
ТЗ = Новый ТаблицаЗначений; ТЗ.Колонки.Добавить(«Фамилия»); ТЗ.Колонки.Добавить(«Имя»); ТЗ.Колонки.Добавить(«ДатаРождения»); //новые таблицы НовТЗ1 = ТЗ.СкопироватьКолонки(); НовТЗ2 = ТЗ.СкопироватьКолонки(«Фамилия,Имя»);
В примере выше, в таблице НовТЗ1 будет тот же набор колонок, что и в таблице ТЗ, а в таблице НовТЗ2 будут только колонки Фамилия и Имя.
Метод Скопировать таблицы значений 1С 8.3
Научимся копировать одну таблицу значений в другую, а в этом нам поможет метод Скопировать. Этот метод является функцией, которая возвращает новую таблицу значений. У него имеется два синтаксиса
Скопировать(Строки,Колонки)
Где:
Строки – массив строк таблицы значений, которые должны будут присутствовать в новой таблице. Необязательный параметр, если он пуст, то копируются все строки.
Колонки – строка имен колонок, которые перечислены через запятую. Также необязательный параметр, если он пуст, то в новой таблице будут все колонки.
Второй вариант синтаксиса
Скопировать(ПараметрыОтбора, Колонки).
Где:
ПараметрыОтбора – структура, при помощи которой мы отберем нужные строки в новую таблицу значений. В качестве ключей структуры должны быть перечислены названия колонок, по которым будет вестись отбор, а в качестве значений – те значения, по которым должны отобраться нужные строки.
Рассмотрим примеры с обоими вариантами параметров. Будем использовать ту же таблицу, что и в предыдущих примерах, но отберем только те строки, у которых год рождения 1981.
ТЗ = Новый ТаблицаЗначений; ТЗ.Колонки.Добавить(«Фамилия»); ТЗ.Колонки.Добавить(«Имя»); ТЗ.Колонки.Добавить(«ДатаРождения»); //первая строка НСтр = ТЗ.Добавить(); НСтр.Фамилия = «Иванов»; НСтр.Имя = «Петр»; НСтр.ДатаРождения = Дата(1981,1,15); //вторая строка НСтр = ТЗ.Добавить(); НСтр.Фамилия = «Иванов»; НСтр.Имя = «Алексей»; НСтр.ДатаРождения = Дата(1981,1,25); //третья строка НСтр = ТЗ.Добавить(); НСтр.Фамилия = «Григорьев»; НСтр.Имя = «Петр»; НСтр.ДатаРождения = Дата(1987,6,11); //формируем новый массив МассивДляОтбора = Новый Массив; Для Каждого стрТЗ из ТЗ Цикл Если Год(стрТЗ.ДатаРождения) = 1981 Тогда МассивДляОтбора.Добавить(стрТЗ); КонецЕсли; КонецЦикла;//новая таблица значений НовТЗ = ТЗ.Скопировать(МассивДляОтбора,«Имя,ДатаРождения»);
Посмотрим на результат работы этой функции
Теперь скопируем таблицу значений, так, чтобы в новую таблицу вошли только те строки, где есть имя Петр и дата рождения равна 15.01.1981.
ТЗ = Новый ТаблицаЗначений; ТЗ.Колонки.Добавить(«Фамилия»); ТЗ.Колонки.Добавить(«Имя»); ТЗ.Колонки.Добавить(«ДатаРождения»); //первая строка НСтр = ТЗ.Добавить(); НСтр.Фамилия = «Иванов»; НСтр.Имя = «Петр»; НСтр.ДатаРождения = Дата(1981,1,15); //вторая строка НСтр = ТЗ.Добавить(); НСтр.Фамилия = «Иванов»; НСтр.Имя = «Алексей»; НСтр.ДатаРождения = Дата(1981,1,25); //третья строка НСтр = ТЗ.Добавить(); НСтр.Фамилия = «Григорьев»; НСтр.Имя = «Петр»; НСтр.ДатаРождения = Дата(1987,6,11); //отбор ПараметрыОтбора = Новый Структура(«Имя,ДатаРождения»,«Петр»,Дата(1981,1,15)); //новая таблица значений НовТЗ = ТЗ.Скопировать(ПараметрыОтбора,«Имя,Фамилия»);
В этот раз будет следующий результат.
Методы таблиц значений 1С 8.3. Часть 2. Сортировка, итоги и свертка.
Если Вам помог этот урок решить какую-нибудь проблему, понравился или оказался полезен, то Вы можете поддержать мой проект.
Более подробно и основательно работа с таблицей значений в дается в моей книге:

Изучайте программирование в 1С в месте с моей книги «Программировать в 1С за 11 шагов»
- Книга написана понятным и простым языком — для новичка.
- Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
- Научитесь понимать архитектуру 1С;
- Станете писать код на языке 1С;
- Освоите основные приемы программирования;
- Закрепите полученные знания при помощи задачника;
О том как разрабатывать под управляемым приложением 1С, читайте в книге Книга «Основы разработки в 1С: Такси»
Отличное пособие по разработке в управляемом приложении 1С, как для начинающих разработчиков, так и для опытных программистов.
- Очень доступный и понятный язык изложения
- Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
- Поймете идеологию управляемого приложения 1С
- Узнаете, как разрабатывать управляемое приложение;
- Научитесь разрабатывать управляемые формы 1С;
- Сможете работать с основными и нужными элементами управляемых форм
- Программирование под управляемым приложением станет понятным
Промо-код на скидку в 15% — 48PVXHeYu
Вступайте в мои группы:
Вконтакте: https://vk.com/1c_prosto Фейсбуке: https://www.facebook.com/groups/922972144448119/ ОК: http://ok.ru/group/52970839015518 Твиттер: https://twitter.com/signum2009
www.1s-up.ru
Смотрите также

















































