1с реквизит табличной части ссылка на табличная часть

Ссылка на реквизит табличной части

Я
   ROMA1927

02.03.16 — 19:52

Всем привет!

Скажите, как выполнить для реквизита ссылку на реквизит табличной части документа?

Спасибо за ответы.

  

Партнерская программа EFSOL Oblako

   hhhh

1 — 02.03.16 — 20:03

что значит выражение «выполнить ссылку»??

   saaken

2 — 02.03.16 — 20:06

Рома колись че хотел

   rs_trade

3 — 02.03.16 — 20:07

(0) Спасибо за вопрос. Наконец узнаем как выполнять ссылки.

   ROMA1927

4 — 02.03.16 — 20:15

(1)В свойствах, я не нашел тип ссылку на реквизит табличной части.

   Wirtuozzz

5 — 02.03.16 — 20:17

ТЧ[0].Ссылка.Выполнить()

   ROMA1927

6 — 02.03.16 — 20:19

(5) А куда вставить данный код?

   ROMA1927

7 — 02.03.16 — 20:23

(2) Хотел в свойстве(тип) реквизита документа указать тип ссылку на реквизит табличной части.

   Wirtuozzz

8 — 02.03.16 — 20:24

(6) Как куда? в попу :)

   etc

9 — 02.03.16 — 20:26

Ссылка на рэквизит нэ бываит.

   saaken

10 — 02.03.16 — 20:27

(7) переформулируй по русски. Типа в документ заказ в табличную часть товары добавить реквизит номенклатура.

   ROMA1927

11 — 02.03.16 — 20:27

(8) ….

   Wirtuozzz

12 — 02.03.16 — 20:28

(11) ты по русски скажи что ты сделать хочешь?

   ROMA1927

13 — 02.03.16 — 20:34

(10) Вопрос был задан на русском языке.

Еще раз. У меня есть документ. У него есть реквизит Номенклатура и табличная часть с реквизитом Номенклатура.

Далее, заходим в св-ва реквизита Номенклатура, находим тип и выбираем. Мне нужно выбрать ссылку на реквизит Номенклатура табличной части.

   MishaD

14 — 02.03.16 — 20:35

СправочникСсылка.Номенклатура ?

   ROMA1927

15 — 02.03.16 — 20:37

(14) Нет, на реквизит табличной части

   МимохожийОднако

16 — 02.03.16 — 20:39

(13)Пишешь по-русски, а изъясняешься как иностранец. Кое-как написал, что надо. Но совершенно неясно в чём цель сих манипуляций.

   ROMA1927

17 — 02.03.16 — 20:39

(12) «Ёлки-палки», пишу на русском и вроде без ошибок!

)))

   Wirtuozzz

18 — 02.03.16 — 20:40

(17) Давай так, у тебя есть документ, у документа табличная часть. Так?

   ROMA1927

19 — 02.03.16 — 20:41

(18) Да

   ROMA1927

20 — 02.03.16 — 20:42

Как разместить картинку?

   МимохожийОднако

21 — 02.03.16 — 20:44

(18)ОФФ: у этого партизана и за сотку постов не вытащишь клещами нужную инфу.

   Wirtuozzz

22 — 02.03.16 — 20:44

(19) Сначала обращаешься к документу. СсылкаНаДокумент.ИмяТабличнойЧасти, потом обращаешься к строке табличной части:

СсылкаНаДокумент.ИмяТабличнойЧасти[0].Номенклатура

Или через цикл:

Для каждого стр из СсылкаНаДокумент.ИмяТабличнойЧасти Цикл

стр.Номенклатура = что-то;

КонецЦикла;

   Wirtuozzz

23 — 02.03.16 — 20:46

(21) Ну счас попробуем вразумить, а нет оставим с конфигуратором наедине. Конфигуратор не позволит расслабиться данном индивиду.

   ROMA1927

24 — 02.03.16 — 20:52

(22) Как выбрать это в св-вах?

   MishaD

25 — 02.03.16 — 20:53

(24) ты лучше картинками из конфигуратора, понятней будет

   ROMA1927

26 — 02.03.16 — 20:53

(25) Как разместить картинку?

   ROMA1927

27 — 02.03.16 — 20:54

(23) )))

   rs_trade

28 — 02.03.16 — 20:55

Ты не можешь в тие реквизита выбрать реквизит табличной части. Если я все правильно понял.

   ROMA1927

29 — 02.03.16 — 20:58

(28) Да, правильно

   saaken

30 — 02.03.16 — 20:59

(29) тогда облом. Но для закрепления лучше объяснить какую задачу хотел решить.

   ROMA1927

31 — 02.03.16 — 21:00

Модераторы, подскажите как разместить рисунок?

   ROMA1927

32 — 02.03.16 — 21:02

(30) Хочу показать на рисунках

   rs_trade

33 — 02.03.16 — 21:04

(32) лучше задачу исходную объясни. она явно не таким способом решается.

   ROMA1927

34 — 02.03.16 — 21:07

(33) Как разместить рисунок?

   saaken

35 — 02.03.16 — 21:09

размести на помойке и кинь ссылку

   ROMA1927

36 — 02.03.16 — 21:10

(35) )))

   Начинающий_13

37 — 02.03.16 — 21:11

Надо искать строку

Функция ААА(Форма, ВыбранноеЗначение, ИмяТаблицы)

Для каждого СтрокаНоменклатуры Из ТаблицаНоменклатуры Цикл

СтруктураОтбора = Новый Структура(«Номенклатура», СтрокаНоменклатуры.Номенклатура);

СтрокаТабличнойЧасти = НайтиСтрокуТабличнойЧасти(Форма, ИмяТаблицы, СтруктураОтбора);

КонецЦикла

КонецФункции

Функция НайтиСтрокуТабличнойЧасти(Форма, ИмяТабличнойЧасти, СтруктураОтбора)

    
    Объект = Форма.Объект;

    
    СтрокаТабличнойЧасти = Неопределено;

    
    МассивНайденныхСтрок = Объект[ИмяТабличнойЧасти].НайтиСтроки(СтруктураОтбора);

    Если МассивНайденныхСтрок.Количество() > 0 Тогда

        // Нашли. Вернем первую найденную строку.

        СтрокаТабличнойЧасти = МассивНайденныхСтрок[0];

    КонецЕсли;

    
    Возврат СтрокаТабличнойЧасти;

    
КонецФункции

   ROMA1927

38 — 02.03.16 — 21:13

(37) В каком модуле?

   Начинающий_13

39 — 02.03.16 — 21:13

Я обычно ставлю все это в модуле менеджера

   ROMA1927

40 — 02.03.16 — 21:17

(39) Спасибо, буду разбираться.

   Wirtuozzz

41 — 02.03.16 — 21:49

(40) ага, пора разобраться

   ROMA1927

42 — 03.03.16 — 09:35

   mistеr

43 — 03.03.16 — 09:43

(0) На строку ТЧ ссылаться в других реквизитах нельзя, поскольку строка ТЧ не объектный тип.

Если нужно сослаться на конкретную строку ТЧ конкретного документа, то ссылка на док + номер строки. А если все-таки нужно одной ссылкой, то нужно использовать ссылку на справочник. (И следить, чтобы они нигде не задвоились).

   ROMA1927

44 — 03.03.16 — 09:50

(43) СПС

   ROMA1927

45 — 03.03.16 — 09:54

   zalexey

46 — 03.03.16 — 09:57

(45)

ИмяТабличнойЧасти[0].ИмяРеквизита

но на кой это надо? А если в табличной части 100 строк, то что у тебя там должно быть?

   ROMA1927

47 — 03.03.16 — 10:00

   ROMA1927

48 — 03.03.16 — 10:00

(47) Нормальное изображение

   Drac0

49 — 03.03.16 — 10:04

(47) Мда. А если там карандаш в первой строке и ручка во второй, то что?

   ROMA1927

50 — 03.03.16 — 10:05

Да, интересный вопрос!

)))

   ROMA1927

51 — 03.03.16 — 10:06

Задачка — не решаемая

   Irbis

52 — 03.03.16 — 10:07

(51) Это условие задачи не составлено.

   ROMA1927

53 — 03.03.16 — 10:07

Спасибо, всем!

Тему можно закрывать.

)))

   mistеr

54 — 03.03.16 — 10:09

(51) Так задача у тебя -показать инфу из ТЧ в списке? В типовых посмотри, бедняга.

Хотя, если ты букварь не читал про объектные типы, то вряд ли полезешь в типовые.

   zalexey

55 — 03.03.16 — 10:11

(51) почему не решаем? Решаема, только получается что-то из цикла: «Как разместить лом в центре окна» вроде как теоретически можно, но зачем — одному автору известно

   ROMA1927

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

Фига се рэп… Тимоти обзавидовался бы… По крайней мере так же непонятна цель. Надо вытащить ТЧ справочника в док?

Цитата
Сообщение от irifka2012
Посмотреть сообщение

и собственно этот реквизит

он как-то отдельно?

Добавлено через 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, Что — то как — то не понятно… Вам нужно вытащить из справочника Дисциплины ТЧ — и куда его поместить??? На форму документа??? или какой — то конкретный реквизит из тч вывести на форму???

У вас в объекте есть уже ссылка на справочник дисциплины.

1C
1
Объект.Дисциплины.Темы //  - вот она табличная часть



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

да в курсе

Цитата
Сообщение от Volexovich
Посмотреть сообщение

Обработчики событий элементов формы, где находятся вы в курсе?



0



Volexovich

206 / 180 / 31

Регистрация: 24.10.2011

Сообщений: 738

14.05.2014, 10:59

10

Лучший ответ Сообщение было отмечено irifka2012 как решение

Решение

Вот пример выбора из списка наименования темы:

Кликните здесь для просмотра всего текста

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
&НаКлиенте
Процедура ВедомостьТемаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
    СтандартнаяОбработка = Ложь;
    ВыбЗн = ЭтаФорма.ВыбратьИзМеню(ПолучитьСписокТем());
    Если ВыбЗн = неопределено Тогда
        Возврат; 
    КонецЕсли;
    // тут делаете с вашей выбранной темой что хотите
КонецПроцедуры
 
&НаСервере
Функция ПолучитьСписокТем()
    СписокТем = Новый СписокЗначений;
    Для каждого СтрокаТема из Объект.Дисциплина.Темы Цикл
        СписокТем.Добавить(СтрокаТема.НаименованиеТемы,СтрокаТема.НаименованиеТемы);
    КонецЦикла;
    Возврат СписокТем;
КонецФункции

А вообще у Вас неудобно реализовано сопряжение дисциплин и тем, я бы создал их различными справочниками и темы бы выбирал в табличной части дисциплин. Тогда бы и не было танцев с бубнами. Сейчас, в случае анализа документов успеваемости по теме вы получите жесткий геморрой при сопряжении тем и дисциплин, потому что придется «вручную» искать тему в дисциплине (по ссылке получить не удастся потому что темы тупо таблица со строковыми параметрами).



1



60 / 30 / 5

Регистрация: 22.05.2012

Сообщений: 102

29.05.2014, 14:51

 [ТС]

11

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

Миниатюры

Создание ссылки на реквизит в табличной части
 



0



Эксперт 1С

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

Эксперт 1С

3051 / 1998 / 524

Регистрация: 25.06.2009

Сообщений: 6,964

29.05.2014, 15:35

14

1C
1
2
3
4
5
6
7
Запрос = Новый Запрос("ВЫБРАТЬ
 |  Студенты.Ссылка
 |ИЗ
 |  Справочник.Студенты КАК Студенты
 |ГДЕ
 |      Студенты.Группа = &Группа");
Запрос.УстановитьПараметр("Группа",Объект.Группа);//поле из документа



0



irifka2012

60 / 30 / 5

Регистрация: 22.05.2012

Сообщений: 102

29.05.2014, 16:17

 [ТС]

15

можно ли переделать этот запрос, на событие при изменении?????

1C
1
2
3
4
5
6
7
Запрос = Новый Запрос("ВЫБРАТЬ
*|* Студенты.Ссылка
 |ИЗ
*|* Справочник.Студенты КАК Студенты
 |ГДЕ
 | * * *Студенты.Группа = &Группа");
Запрос.УстановитьПараметр("Группа",Объект.Группа)



0



Эксперт 1С

3051 / 1998 / 524

Регистрация: 25.06.2009

Сообщений: 6,964

29.05.2014, 16:22

16

irifka2012, с запросом все нормально. Вам при печати надо получать студентов?

Цитата
Сообщение от irifka2012
Посмотреть сообщение

на событие при изменении?????

Изменение чего?
Покажите ваш код.



0



irifka2012

60 / 30 / 5

Регистрация: 22.05.2012

Сообщений: 102

29.05.2014, 16:30

 [ТС]

17

1C
1
2
3
4
5
6
7
8
9
Процедура ГруппаПриИзменении(Элемент)
    //// Вставить содержимое обработчика.
     Пока Объект.Ведомость.Студенты <>0  Цикл
    Если Объект.Группа=Объект.Ведомость.Студенты.Группа тогда
        Объект.Ведомость.Вставить(Объект.Ведомость.Студенты) ;
        КонецЕсли
        конецЦикла
 
КонецПроцедуры

Только он не работает, смысл в том чтобы обработчик просматривал справочник студенты и вписывал в табл часть только студентов выбранной группы, или это бред??
А и еще я сделала группы как перечисления чтоб было легче



0



GreenkA

Эксперт 1С

3051 / 1998 / 524

Регистрация: 25.06.2009

Сообщений: 6,964

29.05.2014, 16:38

18

irifka2012, у вас на скрине — табличный документ. А по коду — заполнение табличной части. Поясняйте, что вам нужно-таки.

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
&НаКлиенте
Процедура ГруппаПриИзменении(Элемент)
    //// Вставить содержимое обработчика.
    ЗаполнитьТЧНаСервере(); 
КонецПроцедуры
 
&НаСервере
Процедура ЗаполнитьТЧНаСервере()
 Объект.Ведомость.Очистить();
 Запрос = Новый Запрос("ВЫБРАТЬ
 |  Студенты.Ссылка КАК Студенты
 |ИЗ
 |  Справочник.Студенты КАК Студенты
 |ГДЕ
 |      Студенты.Группа = &Группа");
 Запрос.УстановитьПараметр("Группа",Объект.Группа);
 Выборка = Запрос.Выполнить().Выбрать();
 Пока Выборка.Следующий() Цикл
    НовСтр = Объект.Ведомость.Добавить();
    НовСтр.Студенты = Выборка.Студенты;
 КонецЦикла;
КонецПроцедуры

Добавлено через 52 секунды

Цитата
Сообщение от irifka2012
Посмотреть сообщение

А и еще я сделала группы как перечисления чтоб было легче

и в чем легче стало??



0



60 / 30 / 5

Регистрация: 22.05.2012

Сообщений: 102

29.05.2014, 16:49

 [ТС]

19

нужно заполнение табличной части в документе, не в печати

Добавлено через 4 минуты
К сожалению, при выполнении этого события табличная часть не заполняется



0



Эксперт 1С

3051 / 1998 / 524

Регистрация: 25.06.2009

Сообщений: 6,964

29.05.2014, 16:51

20

irifka2012, базу?



1



В этой статье мы научимся конфигурировать табличные части объектов метаданных в 1С 8.3 (справочники, документы и т.д.). Для чего вообще нужны табличные части? Очень часто бывает, что объект метаданных должен хранить некий список однотипной информации, размер которой изначально может быть не известен. Например, у справочника «Контрагенты» это может быть список ответственных лиц контрагента, а у документа «Приход товара» это список товаров, который поступили в организацию. Для того, чтобы осуществить учет однотипной информации и необходимы табличный части.

Табличная часть документа в 1С 8.3

Наиболее часто перечисление какой-то однотипной информации реализуется в документах. Например, у нас может быть приход различного товара на склады, или продажа разного товара контрагентам.  Создать табличную часть документа можно двумя способами. Первый, в конструкторе документа: на закладке данные, во втором окне для табличных частей, где и нужно добавлять новую табличную часть при помощи кнопки «Добавить табличную часть».

Добавление табличной части документа 1С

Добавление табличной части документа 1С

Второй способ: непосредственно в окне редактирования метаданных. Для этого нужно мышкой выделить ветвь дерева документа, вызвать контекстное меню и выполнить единственную команду «Добавить»

Добавление табличной части документа 1С Добавление табличной части документа 1С

Табличная часть справочника 1С 8.3

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

Колонки табличной части 1С

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

Добавление колонки табличной части 1С

Добавление колонки табличной части 1С

Второй способ, посредством окна метаданных (нужно выделить мышкой табличную часть).

Добавление колонки табличной части 1С

После добавления, откроется палитра свойств, где можно выбрать нужный тип реквизита табличной части 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 шагов»

  1. Книга написана понятным и простым языком — для новичка.
  2. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
  3. Научитесь понимать архитектуру 1С;
  4. Станете писать код на языке 1С;
  5. Освоите основные приемы программирования;
  6. Закрепите полученные знания при помощи задачника;

О том как разрабатывать под управляемым приложением 1С, читайте в книге Книга «Основы разработки в 1С: Такси»

Отличное пособие по разработке в управляемом приложении 1С, как для начинающих разработчиков, так и для опытных программистов.

  1. Очень доступный и понятный язык изложения
  2. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
  3. Поймете идеологию управляемого приложения 1С
  4. Узнаете, как разрабатывать управляемое приложение;
  5. Научитесь разрабатывать управляемые формы 1С;
  6. Сможете работать с основными и нужными элементами управляемых форм
  7. Программирование под управляемым приложением станет понятным

Промо-код на скидку в 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С с таблицами.

Что такое таблица 1С

Самое наглядное представление электронное таблицы можно посмотреть в Excel.

Таблица – это колонки, у которых есть имя. В большинстве случаев колонки имеют тип (типизированы). Это значит, что значения в этих колонках будут одного типа (строка или число или дата).

Строки пронумерованы и содержат значения в разрезе колонок.

На следующем скриншоте изображена таблица «Товары» из документа 1С. Таблицу документа называют «табличная часть». Она тоже имеет колонки, которые типизированы, и строчки, которые пронумерованы.

Над таблицей обычно расположена «командная панель» — группа кнопок для управления таблицей.

Другое «представление» таблиц в 1С – это таблица значений, которую программист использует в языке 1С. Таблицу значений можно вывести на экран с помощью метода ВыбратьСтроку().

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

Табличные части Объектов 1С

Итак, раскрыв в дереве объектов конфигурации любой справочник или документ Вы увидите ветку «Табличные части». С помощью нее можно добавить таблицу.

Такая таблица будет частью документа и будет сохраняться вместе с ним.

С точки зрения базы SQL – документ теперь будет хранится в двух таблицах, первая из которых будет хранить шапку документа и его идентификатор (одна строка на документ). Вторая таблица будет хранить табличные части с указанием идентификатора документа и номера строки (несколько строк на документ).

После добавления табличной части, в нее можно добавить реквизиты, также как и в шапку документа. Реквизиты табличной части – это ее колонки.

Так как для каждого реквизита необходимо указывать тип, то значения в этих колонках можно будет указать строго определенного типа.

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

Таблицы в языке 1С

В языке 1С есть возможность создавать таблицы не привязанные к справочнику или документу.


//таблица
Таблица = Новый ТаблицаЗначений(); // создаем таблицу

//колонки
Таблица.Колонки.Добавить(«Наименование»); //добавляем нетипизированную колонку
Таблица.Колонки.Добавить(«Товар», Новый ОписаниеТипов(«СправочникСсылка.Номенклатура»)); //добавляем колонку со строгим указанием типа

//строчки
Строка = Таблица.Добавить();
Строка.Наименование = «Лопата»; //указываем произвольное значение
Строка.Товар = Справочники.Номенклатура.НайтиПоНаименованию(«Лопата»); //указываем значение со строго определенным типом

//обход всей таблицы
Для каждого Строка из Таблица Цикл
     Сообщить(Строка.Наименование);
КонецЦикла;

Таблица как результат запроса

В предыдущих уроках мы обсуждали с Вами язык запросов 1С и возможность получения данных из базы 1С с помощью запросов 1С.

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

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


//Вариант 1 – последовательный доступ к результатам запроса
Запрос = Новый Запрос(«ВЫБРАТЬ Наименование ИЗ Справочник.Номенклатура»);
//получение таблицы
Выборка = Запрос.Выполнить().Выбрать();
//по порядку обходим все строки результата запроса
Пока Выборка.Следующий() Цикл
     Сообщить(Выборка.Наименование);
КонецЦикла;

//Вариант 2 – выгрузка в таблицу значений
Запрос = Новый Запрос(«ВЫБРАТЬ Наименование ИЗ Справочник.Номенклатура»);
//получение таблицы
Таблица = Запрос.Выполнить().Выгрузить().
//далее можем также обойти все строки
Для каждого Строка из Таблица Цикл
     Сообщить(Строка.Наименование);
КонецЦикла;
//или произвольно обращаться к строкам
Строка = Таблица.Найти(«Лопата», «Наименование»);

Важная особенность – в таблице, которая получена из результата запроса, все колонки будут строго типизированы. Это значит, что запросив поле Наименование из справочника Номенклатура, Вы получите колонку вида Строка с допустимой длиной не более N символов.

Таблица на форме (толстый клиент)

Пользователь работает с таблицей, когда она размещена на форме.

Базовые принципы работы с формами мы с Вами обсуждали в уроке по формам толстого клиента и в уроке по управляемым формам

Итак, разместим таблицу на форме. Для этого можно перетащить таблицу с панели элементов управления. Аналогично можно выбрать в меню Форма/Вставить элемент управления.

Далее необходимо зайти в свойства таблицы. Самое важное свойство для таблицы – Данные. В нем указывается связь таблицы на форме с хранением данных.

Данные могут храниться в конфигурации – тогда нужно выбрать существующую (ранее добавленную) табличную часть того объекта конфигурации, форму которого Вы редактируете.

Нажмите кнопку «…» в свойстве Данные. Для того, чтобы увидеть список табличных частей, нужно раскрыть ветку Объект.

При выборе табличной части 1С сама добавит колонки у таблицы на форме. Строки введенные пользователем в такую таблицу будут сохраняться автоматически вместе со справочником/документом.

В этом же свойстве Данные Вы можете ввести произвольное имя и выбрать тип ТаблицаЗначений.

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

Нажав правой кнопкой на таблице Вы можете добавить колонку. В свойствах колонки можно указать его имя (для обращения в коде 1С), заголовок колонки на форме, связь с реквизитом табличной части (последнее – если выбрана не произвольная таблица, а табличная часть).

В свойствах таблицы на форме Вы можете указать – доступно ли пользователю добавлять/удалять строки. Более продвинутая форма – галочка ТолькоПросмотр. Эти свойства удобно использовать для организации таблиц предназначенных для вывода информации, но не редактирования.

Чтобы управлять таблицей, нужно вывести на форму командную панель. Выберите пункт меню Форма/Вставить элемент управления/Командная панель.

В свойствах командной панели выберите галочку Автозаполнение, чтобы кнопки на панели появились автоматически.

Таблица на форме (тонкий/управляемый клиент)

На управляемой форме указанные действия выглядят немного по другому. Если Вам нужно разместить на форме табличную часть – раскройте ветку Объект и перетащите одну из табличных частей влево. И все!

Если нужно разместить таблицу значений, добавьте новый реквизит формы и в его свойствах укажите тип – таблица значений.

Чтобы добавить колонки, используйте меню по правой кнопке мыши на этом реквизите формы, пункт Добавить колонку реквизита.

После чего также перетащите таблицу влево.

Чтобы у таблицы появилась командная панель, в свойствах таблицы выберите значения в секции Использование – Положение командной панели.

Выгрузка таблицы в Excel

Любую таблицу 1С, расположенную на форме, можно распечатать или выгрузить в Excel.

Для этого щелкните правой кнопкой мыши на свободном месте в таблице и выберите пункт Вывести список.

В управляемом (тонком) клиент аналогичные действия можно выполнить с помощью пункта меню Все действия/Вывести список.

Список в табличном документе можно сохранить в Excel с помощью пункта меню Файл/Сохранить как с выбранным типом Excel.

Загрузка…

Обращение к табличной части как вложенной таблице

В этом случае поле результата запроса будет иметь тип РезультатЗапроса, то есть содержать вложенный результат запроса, сформированный на основе табличной части.

// получение табличной части как вложенной таблицы

// результата запроса

ВЫБРАТЬ Номер, Дата, Товары

ИЗ Документ.АвансовыйОтчет

// получение нескольких колонок табличной части

// как вложенной таблицы

ВЫБРАТЬ Номер, Дата, Товары.(Номенклатура, Количество)

ИЗ Документ.АвансовыйОтчет

Обратите внимание, что если выполнить следующий запрос, то в результате запроса будет две вложенные таблицы: в первой — одна колонка Номенклатура, а во второй — колонка Количество:

ВЫБРАТЬ Номер, Дата, Товары.Номенклатура, Товары.Количество

ИЗ Документ.АвансовыйОтчет

Обращение к табличной части как таблице-источнику

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

//выборка всех полей из табличной части

ВЫБРАТЬ * ИЗ Документ.АвансовыйОтчет.Товары

// выборка определенных полей из табличной части

ВЫБРАТЬ Номенклатура, Количество, Цена, Сумма

ИЗ Документ.АвансовыйОтчет.Товары

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

ВЫБРАТЬ Документ.АвансовыйОтчет.Товары.(Номенклатура, Сумма КАК СуммаПоСтроке)

// обращение к реквизитам документа и реквизитам

// табличной части (поле Ссылка)

ВЫБРАТЬ

// реквизиты документа

Ссылка.Номер,

Ссылка.Дата,

Ссылка.Ответственный,

//реквизиты табличной части

Номенклатура,

Количество,

Цена,

Сумма

ИЗ Документ.АвансовыйОтчет.Товары

Понравилась статья? Поделить с друзьями:

Другие крутые статьи на нашем сайте:

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии