Ссылка на реквизит табличной части |
Я |
02.03.16 — 19:52
Всем привет!
Скажите, как выполнить для реквизита ссылку на реквизит табличной части документа?
Спасибо за ответы.
1 — 02.03.16 — 20:03
что значит выражение «выполнить ссылку»??
2 — 02.03.16 — 20:06
Рома колись че хотел
3 — 02.03.16 — 20:07
(0) Спасибо за вопрос. Наконец узнаем как выполнять ссылки.
4 — 02.03.16 — 20:15
(1)В свойствах, я не нашел тип ссылку на реквизит табличной части.
5 — 02.03.16 — 20:17
ТЧ[0].Ссылка.Выполнить()
6 — 02.03.16 — 20:19
(5) А куда вставить данный код?
7 — 02.03.16 — 20:23
(2) Хотел в свойстве(тип) реквизита документа указать тип ссылку на реквизит табличной части.
8 — 02.03.16 — 20:24
(6) Как куда? в попу
9 — 02.03.16 — 20:26
Ссылка на рэквизит нэ бываит.
10 — 02.03.16 — 20:27
(7) переформулируй по русски. Типа в документ заказ в табличную часть товары добавить реквизит номенклатура.
11 — 02.03.16 — 20:27
(8) ….
12 — 02.03.16 — 20:28
(11) ты по русски скажи что ты сделать хочешь?
13 — 02.03.16 — 20:34
(10) Вопрос был задан на русском языке.
Еще раз. У меня есть документ. У него есть реквизит Номенклатура и табличная часть с реквизитом Номенклатура.
Далее, заходим в св-ва реквизита Номенклатура, находим тип и выбираем. Мне нужно выбрать ссылку на реквизит Номенклатура табличной части.
14 — 02.03.16 — 20:35
СправочникСсылка.Номенклатура ?
15 — 02.03.16 — 20:37
(14) Нет, на реквизит табличной части
16 — 02.03.16 — 20:39
(13)Пишешь по-русски, а изъясняешься как иностранец. Кое-как написал, что надо. Но совершенно неясно в чём цель сих манипуляций.
17 — 02.03.16 — 20:39
(12) «Ёлки-палки», пишу на русском и вроде без ошибок!
)))
18 — 02.03.16 — 20:40
(17) Давай так, у тебя есть документ, у документа табличная часть. Так?
19 — 02.03.16 — 20:41
(18) Да
20 — 02.03.16 — 20:42
Как разместить картинку?
21 — 02.03.16 — 20:44
(18)ОФФ: у этого партизана и за сотку постов не вытащишь клещами нужную инфу.
22 — 02.03.16 — 20:44
(19) Сначала обращаешься к документу. СсылкаНаДокумент.ИмяТабличнойЧасти, потом обращаешься к строке табличной части:
СсылкаНаДокумент.ИмяТабличнойЧасти[0].Номенклатура
Или через цикл:
Для каждого стр из СсылкаНаДокумент.ИмяТабличнойЧасти Цикл
стр.Номенклатура = что-то;
КонецЦикла;
23 — 02.03.16 — 20:46
(21) Ну счас попробуем вразумить, а нет оставим с конфигуратором наедине. Конфигуратор не позволит расслабиться данном индивиду.
24 — 02.03.16 — 20:52
(22) Как выбрать это в св-вах?
25 — 02.03.16 — 20:53
(24) ты лучше картинками из конфигуратора, понятней будет
26 — 02.03.16 — 20:53
(25) Как разместить картинку?
27 — 02.03.16 — 20:54
(23) )))
28 — 02.03.16 — 20:55
Ты не можешь в тие реквизита выбрать реквизит табличной части. Если я все правильно понял.
29 — 02.03.16 — 20:58
(28) Да, правильно
30 — 02.03.16 — 20:59
(29) тогда облом. Но для закрепления лучше объяснить какую задачу хотел решить.
31 — 02.03.16 — 21:00
Модераторы, подскажите как разместить рисунок?
32 — 02.03.16 — 21:02
(30) Хочу показать на рисунках
33 — 02.03.16 — 21:04
(32) лучше задачу исходную объясни. она явно не таким способом решается.
34 — 02.03.16 — 21:07
(33) Как разместить рисунок?
35 — 02.03.16 — 21:09
размести на помойке и кинь ссылку
36 — 02.03.16 — 21:10
(35) )))
37 — 02.03.16 — 21:11
Надо искать строку
Функция ААА(Форма, ВыбранноеЗначение, ИмяТаблицы)
Для каждого СтрокаНоменклатуры Из ТаблицаНоменклатуры Цикл
СтруктураОтбора = Новый Структура(«Номенклатура», СтрокаНоменклатуры.Номенклатура);
СтрокаТабличнойЧасти = НайтиСтрокуТабличнойЧасти(Форма, ИмяТаблицы, СтруктураОтбора);
КонецЦикла
КонецФункции
Функция НайтиСтрокуТабличнойЧасти(Форма, ИмяТабличнойЧасти, СтруктураОтбора)
Объект = Форма.Объект;
СтрокаТабличнойЧасти = Неопределено;
МассивНайденныхСтрок = Объект[ИмяТабличнойЧасти].НайтиСтроки(СтруктураОтбора);
Если МассивНайденныхСтрок.Количество() > 0 Тогда
// Нашли. Вернем первую найденную строку.
СтрокаТабличнойЧасти = МассивНайденныхСтрок[0];
КонецЕсли;
Возврат СтрокаТабличнойЧасти;
КонецФункции
38 — 02.03.16 — 21:13
(37) В каком модуле?
39 — 02.03.16 — 21:13
Я обычно ставлю все это в модуле менеджера
40 — 02.03.16 — 21:17
(39) Спасибо, буду разбираться.
41 — 02.03.16 — 21:49
(40) ага, пора разобраться
42 — 03.03.16 — 09:35
43 — 03.03.16 — 09:43
(0) На строку ТЧ ссылаться в других реквизитах нельзя, поскольку строка ТЧ не объектный тип.
Если нужно сослаться на конкретную строку ТЧ конкретного документа, то ссылка на док + номер строки. А если все-таки нужно одной ссылкой, то нужно использовать ссылку на справочник. (И следить, чтобы они нигде не задвоились).
44 — 03.03.16 — 09:50
(43) СПС
45 — 03.03.16 — 09:54
46 — 03.03.16 — 09:57
(45)
ИмяТабличнойЧасти[0].ИмяРеквизита
но на кой это надо? А если в табличной части 100 строк, то что у тебя там должно быть?
47 — 03.03.16 — 10:00
48 — 03.03.16 — 10:00
(47) Нормальное изображение
49 — 03.03.16 — 10:04
(47) Мда. А если там карандаш в первой строке и ручка во второй, то что?
50 — 03.03.16 — 10:05
Да, интересный вопрос!
)))
51 — 03.03.16 — 10:06
Задачка — не решаемая
52 — 03.03.16 — 10:07
(51) Это условие задачи не составлено.
53 — 03.03.16 — 10:07
Спасибо, всем!
Тему можно закрывать.
)))
54 — 03.03.16 — 10:09
(51) Так задача у тебя -показать инфу из ТЧ в списке? В типовых посмотри, бедняга.
Хотя, если ты букварь не читал про объектные типы, то вряд ли полезешь в типовые.
55 — 03.03.16 — 10:11
(51) почему не решаем? Решаема, только получается что-то из цикла: «Как разместить лом в центре окна» вроде как теоретически можно, но зачем — одному автору известно
56 — 03.03.16 — 10:11
(49) Спасибо Drac0, Ты меня навёл на правильную мысль.
ROMA1927
57 — 03.03.16 — 10:16
Спасибо, всем!
Сори, что вопрос был глупый.
Я только учусь.
)))
60 / 30 / 5 Регистрация: 22.05.2012 Сообщений: 102 |
|
1 |
|
1C 8.x (тонкий) Создание ссылки на реквизит в табличной части12.05.2014, 23:58. Показов 9449. Ответов 23
Такая беда есть справочник Дисциплины в котором есть табличная часть Темы и Реквизит НаименованиеТемы. есть документ Текущая успеваемость студентов, в нем нужно сделать ссылку на справочник ДисциплиныТабличная часть и собственно этот реквизит. прикрепляю базу, помогите плиз
0 |
2954 / 1766 / 82 Регистрация: 03.11.2011 Сообщений: 8,280 |
|
13.05.2014, 00:51 |
2 |
Фига се рэп… Тимоти обзавидовался бы… По крайней мере так же непонятна цель. Надо вытащить ТЧ справочника в док?
и собственно этот реквизит он как-то отдельно? Добавлено через 9 минут
1 |
60 / 30 / 5 Регистрация: 22.05.2012 Сообщений: 102 |
|
13.05.2014, 14:05 [ТС] |
3 |
Путь устраивает вполне, только вот я не могу понять куда его вписать???
0 |
SPR1TE89 21 / 21 / 3 Регистрация: 22.04.2014 Сообщений: 112 |
||||
13.05.2014, 14:51 |
4 |
|||
irifka2012, Что — то как — то не понятно… Вам нужно вытащить из справочника Дисциплины ТЧ — и куда его поместить??? На форму документа??? или какой — то конкретный реквизит из тч вывести на форму??? У вас в объекте есть уже ссылка на справочник дисциплины.
1 |
206 / 180 / 31 Регистрация: 24.10.2011 Сообщений: 738 |
|
13.05.2014, 15:17 |
5 |
Я бы подменил событие выбора темы, вставил бы туда выбор из списка заполненного темами выбранной дисциплины.
1 |
60 / 30 / 5 Регистрация: 22.05.2012 Сообщений: 102 |
|
13.05.2014, 18:05 [ТС] |
6 |
В общем все что мне точно нужно описано в картинке, я не совсем понимаю как это правильно реализовать Миниатюры
0 |
60 / 30 / 5 Регистрация: 22.05.2012 Сообщений: 102 |
|
13.05.2014, 18:22 [ТС] |
7 |
так не выбирается почему то Добавлено через 4 минуты
0 |
206 / 180 / 31 Регистрация: 24.10.2011 Сообщений: 738 |
|
13.05.2014, 19:00 |
8 |
Обработчики событий элементов формы, где находятся вы в курсе?
0 |
60 / 30 / 5 Регистрация: 22.05.2012 Сообщений: 102 |
|
13.05.2014, 23:11 [ТС] |
9 |
да в курсе
Обработчики событий элементов формы, где находятся вы в курсе?
0 |
Volexovich 206 / 180 / 31 Регистрация: 24.10.2011 Сообщений: 738 |
||||
14.05.2014, 10:59 |
10 |
|||
РешениеВот пример выбора из списка наименования темы: Кликните здесь для просмотра всего текста
А вообще у Вас неудобно реализовано сопряжение дисциплин и тем, я бы создал их различными справочниками и темы бы выбирал в табличной части дисциплин. Тогда бы и не было танцев с бубнами. Сейчас, в случае анализа документов успеваемости по теме вы получите жесткий геморрой при сопряжении тем и дисциплин, потому что придется «вручную» искать тему в дисциплине (по ссылке получить не удастся потому что темы тупо таблица со строковыми параметрами).
1 |
60 / 30 / 5 Регистрация: 22.05.2012 Сообщений: 102 |
|
29.05.2014, 14:51 [ТС] |
11 |
Есть справочник Студенты, в котором хранятся данные о студентах различных групп, В документ нужно вывести студентов только выбранной в нем группы, как это можно сделать подскажите с синтаксисом запроса Миниатюры
0 |
3051 / 1998 / 524 Регистрация: 25.06.2009 Сообщений: 6,964 |
|
29.05.2014, 14:53 |
12 |
irifka2012, Группа — это справочник? Как он связан со справочником Студенты?
0 |
60 / 30 / 5 Регистрация: 22.05.2012 Сообщений: 102 |
|
29.05.2014, 15:32 [ТС] |
13 |
нет группа это реквизит в справочнике студенты
0 |
GreenkA 3051 / 1998 / 524 Регистрация: 25.06.2009 Сообщений: 6,964 |
||||
29.05.2014, 15:35 |
14 |
|||
0 |
irifka2012 60 / 30 / 5 Регистрация: 22.05.2012 Сообщений: 102 |
||||
29.05.2014, 16:17 [ТС] |
15 |
|||
можно ли переделать этот запрос, на событие при изменении?????
0 |
3051 / 1998 / 524 Регистрация: 25.06.2009 Сообщений: 6,964 |
|
29.05.2014, 16:22 |
16 |
irifka2012, с запросом все нормально. Вам при печати надо получать студентов?
на событие при изменении????? Изменение чего?
0 |
irifka2012 60 / 30 / 5 Регистрация: 22.05.2012 Сообщений: 102 |
||||
29.05.2014, 16:30 [ТС] |
17 |
|||
Только он не работает, смысл в том чтобы обработчик просматривал справочник студенты и вписывал в табл часть только студентов выбранной группы, или это бред??
0 |
GreenkA 3051 / 1998 / 524 Регистрация: 25.06.2009 Сообщений: 6,964 |
||||
29.05.2014, 16:38 |
18 |
|||
irifka2012, у вас на скрине — табличный документ. А по коду — заполнение табличной части. Поясняйте, что вам нужно-таки.
Добавлено через 52 секунды
А и еще я сделала группы как перечисления чтоб было легче и в чем легче стало??
0 |
60 / 30 / 5 Регистрация: 22.05.2012 Сообщений: 102 |
|
29.05.2014, 16:49 [ТС] |
19 |
нужно заполнение табличной части в документе, не в печати Добавлено через 4 минуты
0 |
3051 / 1998 / 524 Регистрация: 25.06.2009 Сообщений: 6,964 |
|
29.05.2014, 16:51 |
20 |
irifka2012, базу?
1 |
В этой статье мы научимся конфигурировать табличные части объектов метаданных в 1С 8.3 (справочники, документы и т.д.). Для чего вообще нужны табличные части? Очень часто бывает, что объект метаданных должен хранить некий список однотипной информации, размер которой изначально может быть не известен. Например, у справочника «Контрагенты» это может быть список ответственных лиц контрагента, а у документа «Приход товара» это список товаров, который поступили в организацию. Для того, чтобы осуществить учет однотипной информации и необходимы табличный части.
Табличная часть документа в 1С 8.3
Наиболее часто перечисление какой-то однотипной информации реализуется в документах. Например, у нас может быть приход различного товара на склады, или продажа разного товара контрагентам. Создать табличную часть документа можно двумя способами. Первый, в конструкторе документа: на закладке данные, во втором окне для табличных частей, где и нужно добавлять новую табличную часть при помощи кнопки «Добавить табличную часть».
Второй способ: непосредственно в окне редактирования метаданных. Для этого нужно мышкой выделить ветвь дерева документа, вызвать контекстное меню и выполнить единственную команду «Добавить»
Табличная часть справочника 1С 8.3
У справочников 1С также могут существовать табличные части, механизм создания которых, аналогичен механизму создания табличных частей документов (используя конструктор справочника и через окно дерева метаданных).
Колонки табличной части 1С
Само по себе создание табличной части не имеет смысла, поскольку информация должна храниться в разрезе колонок. Создать колонку можно двумя способами (как в случае справочников, так и в случае документов). Первый способ, используя конструктор документа.
Второй способ, посредством окна метаданных (нужно выделить мышкой табличную часть).
После добавления, откроется палитра свойств, где можно выбрать нужный тип реквизита табличной части 1С (по умолчанию реквизиту присваивается тип строка).
Количество колонок вы можете создавать практически неограниченное количество, в зависимости от вашей прикладной задачи.
Табличная часть 1С 8.3 на управляемой форме
Рассмотрим, как добавлять табличную часть на управляемую форму 1С. Если вы создаете новую форму, то у конструктора формы нужного объекта Вам необходимо поставить флажки у ветке дерева реквизитов объекта, которое соответствует нужной табличной части.
Если же вы уже создали форму документа, а потом в конфигураторе сделали табличную часть (или забыли добавить табличную часть в конструкторе), то вам нужно в форме перетащить мышкой табличную часть из дерева объекта в дерево элементов.
При переносе на вопрос «Добавить колонки», отвечаем «Да» (иначе придется добавлять колонки вручную, о чем мы поговорим ниже).
После этого табличная часть со всеми колонками будет добавлена на форму.
Если мы откажемся от автоматического добавления колонок, то мы можем перенести нужные колонки вручную. Для этого необходимо раскрыть ветку нужной табличной части и перетащить мышкой необходимые колонки.
У ветки табличной части в дереве Объекты управляемой формы имеются также элементы, которые не соответствуют текущим реквизитам. Как привило, это итог по суммовым полям табличной части. Эти поля можно разместить на форме.
Также эти поля можно использовать в подвале таблицы на форме.
Для этого в палитре свойств таблицы формы необходимо установить признак Подвал.
После этого в палитре свойств нужного поля табличной части, в свойстве ПутьКДаннымПодвала указать нужное суммовое поле табличной части.
После этих настроек, в подвале нужной колонки будет сумма значений это колонки.
Продолжение статьи: программная работа с табличными частями на управляемой форме
Остальные статьи по теме конфигурирования в 1С:
Справочники в 1С 8.3
Документы в 1С 8.3
Предопределенные элементы справочников 1С
Формы справочников в 1С 8.3
Общие реквизиты в 1С
Более подробно и основательно конфигурирование в 1С дается в моей книге:
Книга «Программировать в 1С за 11 шагов»
Изучайте программирование в 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
Как получить доступ к реквизитам формы?
Если реквизит объекта «вытащен» на форму, то реквизит формы можно получить через объект ЭлементыФормы, который содержит коллекцию элементов формы, сканируя ее в цикле:
ДокСсылка = СсылкаНаДокумент(ТипДокумента, НомерДок); ДокОбъект = ДокСсылка.ПолучитьОбъект(); ФормаОбъекта = ДокОбъект.ПолучитьФорму(); Для Каждого Элемент Из ФормаОбъекта.ЭлементыФормы Цикл Сообщить(Элемент); КонецЦикла;
Этот цикл позволяет просмотреть имена а так же типы всех реквизитов формы, в том числе такие реквизиты как надписи, командные панели и тд.
Реквизиты формы могут быть различных типов. Поставив фильтр в виде типа реквизита мы можем просмотреть реквизиты определенного типа.
Если реквизит формы имеет тип «ТабличноеПоле», то можно такой элемент просканировать во вложенном цикле и узнать имена колонок таблицы:
Для Каждого Элемент Из ФормаОбъекта.ЭлементыФормы Цикл Сообщить(Элемент.Имя); Если Тип(Элемент) = Тип("ТабличноеПоле") Тогда Сообщить(" Это табличное поле! " + Элемент.Имя ); Для Каждого Колонка Из Элемент.Колонки Цикл ИмяКолонки = Колонка.Имя; Сообщить(ИмяКолонки); КонецЦикла; КонецЕсли; КонецЦикла;
Как получить значение отдельного реквизита формы?
Чаще требуется получать не массив реквизитов формы, а значение отдельных конкретных реквизитов формы. Например реквизиты «Шапки» или «Подвала» формы документа.
Пример:
ФормаОбъекта = ДокОбъект.ПолучитьФорму("ФормаДокумента"); Поставщик = ФормаОбъекта.ЭлементыФормы.Поставщик; Поставщик = ФормаОбъекта.ЭлементыФормы.Получатель; Сообщить(ФормаОбъекта.ЭлементыФормы.ТаблПоле.Колонки.Количество());
Реквизиты шапки могут иметь различные типы: Дата, СправочникСсылка, ЧекБокс, элемент раскрывающегося списка и др.
Как получить значение элементов табличной части формы?
Доступ к табличной части формы через объект
Доступ к табличной части формы (например: Товары) можно получить через объект:
ДокОбъект = Док.ПолучитьОбъект(); //здесь Док - ссылка на объект //просканируем построчно таб часть документа Для Каждого Стр из ДокОбъект.Товары Цикл Номенклатура = Стр.Номенклатура; Стр.Коэффициент = 1; КонецЦикла;
Здесь ДокОбъект.Товары — это табличная часть «Товары» объекта. Далее в цикле табличная часть построчно сканируется!
В каждой итерации цикла можно получить доступ к любому полю строки указав через точку имя этого поля:
Номенклатура = Стр.Номенклатура;
Доступ к табличной части формы через ЭлементыФормы
Табличная часть объекта и табличная часть формы объекта — это не одно и то же!
Для того, чтобы код работал правильно, надо чтобы колонка формы табчасти объекта в свойстве данные ссылалась на реквизит табличной части объекта. Этим определяется тип колонки таб части формы.
То есть должна быть установлена связь между реквизитом табчасти объекта и реквизитом табчасти формы. Форм у объекта метаданных может быть много мы знаем. Табличную часть формы объекта можно получить через объект ЭлементыФормы:
Объект ЭлементыФормы используется для доступа к элементам управления, расположенным на форме, в частности к таб части документа.
ДокСсылка = СсылкаНаДокумент(ТипДокумента, НомерДок); ДокОбъект = ДокСсылка.ПолучитьОбъект(); ФормаОбъекта = ДокОбъект.ПолучитьФорму(); Для Каждого Элемент Из ФормаОбъекта.ЭлементыФормы Цикл Если Тип(Элемент) = Тип("ТабличноеПоле") Тогда //элемент формы - табличное поле Если Элемент.Имя = "Товары" Тогда Сообщить("Это табличное поле!! " + Элемент.Имя ); //ТабПоле = ФормаОбъекта.ЭлементыФормы.Товары.Значение; ТабПоле = Элемент.Значение; Колво = ТабПоле.Количество(); Сообщить("Количество строк: " + Колво); Для Каждого ТекущаяСтрока Из ТабПоле Цикл Имя = ТекущаяСтрока.Номенклатура; Сообщить(Имя); КонецЦикла; КонецЕсли; КонецЕсли; КонецЦикла;
Результат для документа Авансовый отчет:
Это табличное поле!! Товары
Количество строк: 4
Женские ботфорты коричневые
Ботинки женские демисезонные
Ботинки женские натуральная кожа
Женские босоножки
Если надо получить значение всех колонок всех строк, то организуем дважды вложенный цикл:
Во внешнем цикле сканируются строки, во внутреннем — колонки:
ДокСсылка = СсылкаНаДокумент(ТипДокумента, НомерДок); ДокОбъект = ДокСсылка.ПолучитьОбъект(); ФормаОбъекта = ДокОбъект.ПолучитьФорму("ФормаДокумента"); Для Каждого Элемент Из ФормаОбъекта.ЭлементыФормы Цикл Если Тип(Элемент) = Тип("ТабличноеПоле") Тогда Если Элемент.Имя = "ВыданныеАвансы" Тогда //таб часть объекта Сообщить(" Это табличное поле!! " + Элемент.Имя ); ТабПоле = Элемент.Значение; Индекс = 0; Для Каждого ТекущаяСтрока Из ТабПоле Цикл Сообщить("======================="); Для Каждого Колонка Из Элемент.Колонки Цикл ИмяКолонки = Строка(Колонка.Имя); Сообщить(ИмяКолонки); Имя = ТекущаяСтрока[ИмяКолонки];//сработает только если есть такое поле таб части объекта Сообщить("=== " + Имя); КонецЦикла; Индекс = Индекс + 1; Если Индекс > 0 Тогда break КонецЕсли; //только первая строка КонецЦикла; КонецЕсли; КонецЕсли; КонецЦикла;
Результат для документа Авансовый отчет:
Это табличное поле!! ВыданныеАвансы
=======================
НомерСтроки 1
ДокументАванса Расходный кассовый ордер ТК000000004 от 15.02.2007 19:24:03
СуммаДокументаАванса 300
ВалютаДокументаАванса USD
Выдано 300
Сумма 174
Такое двойное сканирование удобно использовать для быстрой проверки того, что все колонки таб части формы имеют связь с реквизитами таб части объекта. Если такой связи у какой-либо колонки нет, система сгенерирует ошибку.
Табличные части существуют у многих объектов в 1С:
- Справочники
- Документы
- Отчеты и обработки
- Планы счетов
- Планы видов характеристик
- Планы видов расчета
- Бизнес-процессы и задачи
Табличные части позволяют хранить неограниченное количество структурированной информации, принадлежащей одному объекту.
Рассмотрим некоторые приемы работы с табличными частями.
Как обойти табличную часть
Для обхода табличной части можно использовать цикл Для каждого
Для каждого Строка из ТабличнаяЧасть Цикл
Сообщить(Строка.РеквизитТабличнойЧасти);
КонецЦикла;
На каждой итерации в переменную Строка передается очередная строка табличной части. Значения реквизитов строки можно получить выражением Строка.ИмяРеквизита.
Как получить и обойти выделенные строки табличной части
Для вывода информации из табличной части объекта служит элемент формы Табличное поле. Для включения возможности выделения нескольких строк на табличном поле нужно установить значение Множественный у его свойства Режим выделения.
Для получения перечня выделенных строк используется следующий код:
ВыделенныеСтроки=ЭлементыФормы.ИмяТабличногоПоля.ВыделенныеСтроки;
Для того чтобы обойти выделенные строки используется цикл Для каждого:
ВыделенныеСтроки=ЭлементыФормы.ИмяТабличногоПоля.ВыделенныеСтроки;
Для каждого Строка из ВыделенныеСтроки Цикл
//содержимое цикла
КонецЦикла;
Как программно выделить строки табличной части (табличного поля) и снять выделение
Чтобы программно снять выделение строк табличного поля:
ЭлементыФормы.ИмяТабличногоПоля.ВыделенныйСтроки.Очистить();
Чтобы программно выделить все строки табличного поля:
Для каждого ТекущаяСтрока Из ТабличнаяЧасть Цикл
ЭлементыФормы.ИмяТабличногоПоля.ВыделенныеСтроки.Добавить(ТекущаяСтрока);
КонецЦикла;
Как очистить табличную часть
ТабличнаяЧасть.Очистить();
Как получить текущую строку табличной части
Текущая строка — это срока, в которой у пользователя в данный момент находится курсор. Чтобы ее получить, нужно обратиться к элементу управления на форме, который связан с табличной частью.
Для обычных форм код будет выглядеть так:
ЭлементыФормы.ИмяТабличногоПоля.ТекущиеДанные;
Для управляемых форм:
Элементы.ИмяТабличногоПоля.ТекущиеДанные;
Как добавить новую строку в табличную часть
Добавление новой строки в конец табличной части:
НоваяСтрока=ТабличнаяЧасть.Добавить();
НоваяСтрока.Реквизит1=«Значение»;
Добавление новой строки в любое место табличной части (последующие строки будут сдвинуты):
НоваяСтрока=ТабличнаяЧасть.Вставить(Индекс)
//Индекс — номер добавляемой строки. Нумерация строк начинается с нуля.
НоваяСтрока.Реквизит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.
Загрузка…
Обращение к табличной части как вложенной таблице
В этом случае поле результата запроса будет иметь тип РезультатЗапроса, то есть содержать вложенный результат запроса, сформированный на основе табличной части.
// получение табличной части как вложенной таблицы
// результата запроса
ВЫБРАТЬ Номер, Дата, Товары
ИЗ Документ.АвансовыйОтчет
// получение нескольких колонок табличной части
// как вложенной таблицы
ВЫБРАТЬ Номер, Дата, Товары.(Номенклатура, Количество)
ИЗ Документ.АвансовыйОтчет
Обратите внимание, что если выполнить следующий запрос, то в результате запроса будет две вложенные таблицы: в первой — одна колонка Номенклатура, а во второй — колонка Количество:
ВЫБРАТЬ Номер, Дата, Товары.Номенклатура, Товары.Количество
ИЗ Документ.АвансовыйОтчет
Обращение к табличной части как таблице-источнику
При таком способе обращения имя вложенной таблицы фигурирует в имени таблицы-источника (предложение ИЗ или полные имена полей) и в результате запроса нет вложенных таблиц.
//выборка всех полей из табличной части
ВЫБРАТЬ * ИЗ Документ.АвансовыйОтчет.Товары
// выборка определенных полей из табличной части
ВЫБРАТЬ Номенклатура, Количество, Цена, Сумма
ИЗ Документ.АвансовыйОтчет.Товары
// задание псевдонимов для полей табличной части
ВЫБРАТЬ Документ.АвансовыйОтчет.Товары.(Номенклатура, Сумма КАК СуммаПоСтроке)
// обращение к реквизитам документа и реквизитам
// табличной части (поле Ссылка)
ВЫБРАТЬ
// реквизиты документа
Ссылка.Номер,
Ссылка.Дата,
Ссылка.Ответственный,
//реквизиты табличной части
Номенклатура,
Количество,
Цена,
Сумма
ИЗ Документ.АвансовыйОтчет.Товары