Реквизит документа может быть списком значений 1с

   DenSpb

04.07.11 — 11:54

Как в реквизите документа хранить список значений?

  

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

   butterbean

1 — 04.07.11 — 11:55

таб часть сделай

   DenSpb

2 — 04.07.11 — 11:56

не катит, нужно реквизит

   H A D G E H O G s

3 — 04.07.11 — 11:58

Хранилище значений

   Сергей Д

4 — 04.07.11 — 11:58

Через точку с запятой, либо какой-то другой спецсимвол.

Встречный вопрос: а зачем?

   DenSpb

5 — 04.07.11 — 12:05

Затем, чтобы можно было указать в Инвентаризации несколько контрагентов

   DenSpb

6 — 04.07.11 — 12:06

Как можно хранилище значений здесь заюзать*

   Сергей Д

7 — 04.07.11 — 12:08

(5) Типовой документ? Переделывать под ТЧ неохота?

   DenSpb

8 — 04.07.11 — 12:10

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

   guitar_player

9 — 04.07.11 — 12:10

(5) Только ТЧ

   МишельЛагранж

10 — 04.07.11 — 12:10

(4) через хранилище все хранится.

Или через ЗначениеВСтрокуВнутр и ЗначениеИзСтрокиВнутр

   unregistered

11 — 04.07.11 — 12:11

(6) Хранилище в данном случае нельзя использовать.

Контроль целостности данных в хранилище при удалении данных не производится.

   H A D G E H O G s

12 — 04.07.11 — 12:11

(8) Почему нет желания?

   DenSpb

13 — 04.07.11 — 12:11

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

   МишельЛагранж

14 — 04.07.11 — 12:12

(6) делаешь реквизит, тип — ХранилищеЗначений

   unregistered

15 — 04.07.11 — 12:12

(2) Здесь как раз только ТЧ и катит.

А уж как ты эту табличную часть нарисуешь на форме — твое личное дело — хоть в виде одного поля вводы, хоть в виде списка, хоть в виде текстовой строки.

   МишельЛагранж

16 — 04.07.11 — 12:12

(11) а зачем ссылочная целостность для справочных данных??

   DenSpb

17 — 04.07.11 — 12:13

Если взять тип значения реквизита ЛюбаяСсылка, то не прокатит?

   Сергей Д

18 — 04.07.11 — 12:13

(13) Дык, ТЧ как раз для того и придумана, чтобы хранить список значений.

   unregistered

19 — 04.07.11 — 12:13

(16) Удалили элемент справочника Контрагенты, ссылка на который присутствовала в этом списке. И что?

В результате имеем битую ссылку в документе.

   H A D G E H O G s

20 — 04.07.11 — 12:13

(16) Дествительно. Глупостей какихто наговорили…

   МишельЛагранж

21 — 04.07.11 — 12:14

(11) ставишь при чтении проверку на «существует контрагент? — ДаНет»

   Сергей Д

22 — 04.07.11 — 12:15

(20) Кстати, всегда удивлялся 1С-у после SQL Server-а. Можно (если хватит прав, конечно) удалить элемент справочника, на который есть ссылки… SQL Server такое в жизни бы не позволил.

   H A D G E H O G s

23 — 04.07.11 — 12:15

(17) Нет.

(18) Ну ломает его отдельная табличка в базе. Хотяя, я его понимаю.

Автор, прикрути отдельный регистр сведений.

Пусть твой последователь ококует, когда увидит зоопарк ТЧ и отдельно регистр.

Удивляй!

   МишельЛагранж

24 — 04.07.11 — 12:16

(20) ну если нельзя хранить в «суперской среде разработки» список — то куда деваться? ))

   H A D G E H O G s

25 — 04.07.11 — 12:16

(22) Это если foreign key. Но они — тормознутые (говорят).

   unregistered

26 — 04.07.11 — 12:16

(21) Супер. И если нет, то что? Выдавать ссобщение пользователю, что он дятел и профигачил при удалении информацию о контрагенте, который фигурировал когда-то раньше в это документе?

   МишельЛагранж

27 — 04.07.11 — 12:18

(26) пупер ))

>>»ну если нельзя хранить в «суперской среде разработки» список — то куда деваться?

   H A D G E H O G s

28 — 04.07.11 — 12:20

(27) Писец.

Рекомендую почитать книгу «Практическое пособие разработчика 1С» и посмотреть на SQL вариант 1С базы данных и узнать про структуру таблиц.

   МишельЛагранж

29 — 04.07.11 — 12:20

(13) а что за конфа? секретная разработка? ))

   unregistered

30 — 04.07.11 — 12:20

(27) >> ну если нельзя….

Ну конечно надо выбрать самое дебильное решение совершенно не гарантирующее целостность данных. Это же очевидно!

Особенно, когда задача решается одной элементарной табличной частью.

   МишельЛагранж

31 — 04.07.11 — 12:21

(28) и давно вы напрямую в SQL из 8-ки пишете? )

   Сергей Д

32 — 04.07.11 — 12:22

(25) Ну зато уж точно ничего лишнего не удалишь.

Помнится писали для SQL Server 7 хранимую процедурку, которой даешь ссылку, она удаляет все связанные записи (и все записи, связанные со связанными записями и т.д. рекурсивно), а потом удаляет указанную запись.

   DenSpb

33 — 04.07.11 — 12:22

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

   МишельЛагранж

34 — 04.07.11 — 12:22

(30) именно что нужен объект «Список», а не ТЧ.

А делать попу через две других попы — для 1С это нормальное состояние ))

   МишельЛагранж

35 — 04.07.11 — 12:23

(33) так если у вас там ТЧ даже на склады есть — почему нет отдельного регистра сведений под это дело?

   H A D G E H O G s

36 — 04.07.11 — 12:24

(34) Как бы вы сделали, будь на месте 1С?

   DenSpb

37 — 04.07.11 — 12:25

На склады нет ТЧ, есть уже других 5 штук, если сделать контрагнетов, организации и склады, то будет 8 ТЧ

   МишельЛагранж

38 — 04.07.11 — 12:26

(36) хранить списки как набор значений…

а как еще? )

   unregistered

39 — 04.07.11 — 12:26

(36)  Не обращая внимания. Он чиста так — потроллить. Всё равно толкового решения не родит, но какашками 1С закидает.

   МишельЛагранж

40 — 04.07.11 — 12:27

(37) так сделайте одну на все три измерения ))

   H A D G E H O G s

41 — 04.07.11 — 12:27

(37) Отдельный регистр

   H A D G E H O G s

42 — 04.07.11 — 12:28

(40) Вот он истый дятлоизм.

   H A D G E H O G s

43 — 04.07.11 — 12:28

(38) Физически, с т.з. SQL — как?

   МишельЛагранж

44 — 04.07.11 — 12:29

(39) да уж, куда толковее: чуть что — делать виртуальную ТЧ и держать её в уме.

«Делать по-уму и правильно изгаляться — разные состояния».

Можете цитировать ))

   YF

45 — 04.07.11 — 12:29

(37) Все еще упорствуешь?

   rs_trade

46 — 04.07.11 — 12:29

(37) лучше 8 ТЧ чем список в реквизите. это вообще бред полный

   DenSpb

47 — 04.07.11 — 12:29

Думаю может использовать СохранитьЗначение и Восстановитьзначение, хотя это тоже самое, что и использовать ХранилищеЗначения

   МишельЛагранж

48 — 04.07.11 — 12:30

(43) сделать одну таблицу под данные «Список» и писать новое значение списка в новое поле «ИндексN».

Нет?

   rs_trade

49 — 04.07.11 — 12:31

(47) как потом запросом документ получить по нужному контрагенту?

   YF

50 — 04.07.11 — 12:31

(48) При добавлении нового значения новая колонка в таблице появляется?

   PR

51 — 04.07.11 — 12:32

Вообще ответ в (1).

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

   DenSpb

52 — 04.07.11 — 12:33

как потом запросом документ получить по нужному контрагенту?

— согласен, не подойдет СохранитьЗначение

   DenSpb

53 — 04.07.11 — 12:33

как потом запросом документ получить по нужному контрагенту?

— можно поподробнее?

   Сергей Д

54 — 04.07.11 — 12:33

(52) А что (по-вашему) подойдет?

   МишельЛагранж

55 — 04.07.11 — 12:34

(42) вы уже потеряли нюх с этой 1С ))

вот:

  Контрагент     Организации     Склады

1

2

3

4

5



n

— пишите списки по 3-м измерениям любой протяженности в одну ТЧ ))

   DenSpb

56 — 04.07.11 — 12:34

< Можно так же сделать реквизит шапки, чтобы в него писать представление табличной части, если нужно видеть его в списке документов или отчете. — Можно поподробнее?

   МишельЛагранж

57 — 04.07.11 — 12:35

(51) >>реквизит шапки, чтобы в него писать представление табличной части, если нужно видеть его в списке документов

— это как? вы в представлении ТЧ будете перечислять содержимое всего списка?

   Amra

58 — 04.07.11 — 12:35

(56) Смотри как в ЗиУПе сделано в кадровых документах, реквизит «Состав»

   fimanich

59 — 04.07.11 — 12:36

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

   H A D G E H O G s

60 — 04.07.11 — 12:37

(48) Это как минимум 4 поля отводить под кластерный индекс для ключа и докуа полей под данные (если хотим контроллировать их целостность), либо одно поле под хранилище (image) если на целостность пофиг.

Накуа?

   PR

61 — 04.07.11 — 12:37

(56)

ТЧ

Вася

Петя

Коля

Реквизит шапки

«Вася, Петя, Коля»

   МишельЛагранж

62 — 04.07.11 — 12:37

(58) по-моему, это уже попа через три попы…

прогресс, однако… ))

   PR

63 — 04.07.11 — 12:37

(57) Почему нет?

   H A D G E H O G s

64 — 04.07.11 — 12:37

(55) Избыточность. При условии, что это документ, а не справочник — избыточная избыточность.

   ssh2006

65 — 04.07.11 — 12:38

Представляю уже инновационный подход к программированию в 1с — конфа на регистрах сведений! Документ и справочник не нужны — берем два регистра сведений под шапку и табличную часть. Полный контроль.

   PR

66 — 04.07.11 — 12:38

(62) Это удобство.

   H A D G E H O G s

67 — 04.07.11 — 12:39

(61) Нет.

Данное    ТипДанного

Контур    Контрагент

Сигма     Контрагент

Оптовый   Склад

Тип данного — не строка, а число

   Сергей Д

68 — 04.07.11 — 12:39

»    МишельЛагранж

69 — 04.07.11 — 12:39

(64) а списки складов, контрагентов, Васей и организаций в одном документе — это тогда как назвать? ))

   H A D G E H O G s

70 — 04.07.11 — 12:40

(69) Криволобая постановка задачи скорее всего

   МишельЛагранж

71 — 04.07.11 — 12:42

(70) в объективности вам не откажешь ))

   МишельЛагранж

72 — 04.07.11 — 12:43

(65) шапка — где?

ТЧ — в чем?

Документ же отменили ))

   DenSpb

73 — 04.07.11 — 12:43

Криволобая постановка задачи скорее всего — Скорее всего ты не значешь зачем они нужны.

   МишельЛагранж

74 — 04.07.11 — 12:45

(60) а остальные типы в 1С разве не так? ))

   H A D G E H O G s

75 — 04.07.11 — 12:45

Так чем вариант (67) не катит? Всего 1 тч на сколько хочешь доп реквизитов без избыточности

   H A D G E H O G s

76 — 04.07.11 — 12:46

(74) Что значит остальные типы?

   МишельЛагранж

77 — 04.07.11 — 12:47

(63) потому что представление показать — это одно, а данные сначала пихать в представление, потом показывать, потом обратно разбирать и получить одно нужное значение — это прогресс из (62)

:)

   МишельЛагранж

78 — 04.07.11 — 12:49

(74) любой тип данных сложнее примитивного в 1С:

>>Это как минимум 4 поля отводить под кластерный индекс для ключа и докуа полей под данные

   ssh2006

79 — 04.07.11 — 12:49

(72) Ты не понял — подход подразумевает, что новатор нарисует форму, которая подтянет данные из регистров сведений. Документ готов.

   DenSpb

80 — 04.07.11 — 12:49

Amra

58 — 04.07.11 — 12:35 (56) Смотри как в ЗиУПе сделано в кадровых документах, реквизит «Состав»

Не увидел в приеме на рабоут реквизита состав. Где можно посмотреть? В каком конкретном доке?

   vmv

81 — 04.07.11 — 12:51

регулярно на мисте пытаются классическую мастер-деталь реализовать через попу, мдя

   H A D G E H O G s

82 — 04.07.11 — 12:51

(78) Еще раз.

Медленно.

Что тебе непонятно с типами?

   МишельЛагранж

83 — 04.07.11 — 12:51

(79) ага, т.е. документ хотя бы в виде отдельной формы — будет?

также, как и возможность получить доступ и сохранить её…

   МишельЛагранж

84 — 04.07.11 — 12:52

(82) мне-то все понятно, я предлагаю вести еще один — список называется ))

   Жан Пердежон

85 — 04.07.11 — 12:53

аргумент в (5) убил

   H A D G E H O G s

86 — 04.07.11 — 12:53

(84) Как ты его будешь хранить в базе данных?

   Reset

87 — 04.07.11 — 12:54

(82) Дружище, не пытайся что-то объяснить г-ну Лагранжу, тем паче не пытайся понять его. Это программа-бот. Она думать не умеет.

   Reset

89 — 04.07.11 — 12:55

По теме — ответ в (1). БЕЗ вариантов.

   МишельЛагранж

90 — 04.07.11 — 12:56

(81) ну если поп-классика не устраивает — то да ))

(85) ну хочет человек списать результаты на того, кто «потянет» ))

а заранее не знает, кто….

(86) как и остальные — записью

   H A D G E H O G s

91 — 04.07.11 — 12:57

(90)

как и остальные — записью

В какой таблице?

   МишельЛагранж

92 — 04.07.11 — 13:00

(91) сложно организовать отдельную таблицу?

   ssh2006

93 — 04.07.11 — 13:01

(83) Конечно будет) Вообще речь про то что не нужно изобретать велосипеды, подменяя те средства, которые есть в платформе.

   H A D G E H O G s

94 — 04.07.11 — 13:02

(92) Отдельную таблицу для конкретного документа, либо отдельную таблицу для всех всех документов (типа глобальный общий список) ?

   GoldenDawn

95 — 04.07.11 — 13:03

(10)(3)база должна быть целостной ссылочной структурой, а не помойкой нашпигованной шаманизмом, если этот список только на время существования формы — не зачем его в базе хранить, а если для отчетности ещё понадобиться потом — шаманизмы будут ли наращиваться как снежный ком и тормозить, либо придется переносить таки инфу оотуда в структуры данных 1С

   МишельЛагранж

96 — 04.07.11 — 13:05

(94) отдельную таблицу под тип данных «Список»

значения списка — пишутся в поля.

Переменной присваивается уникальный ссылка (как любят в 1С).

   H A D G E H O G s

97 — 04.07.11 — 13:06

(96) Структуру такой таблицы рассказать сможете?

   МишельЛагранж

98 — 04.07.11 — 13:12

(97)нет, не буду.

как-то не интересно ковырять «представления» 1С о «правильной» структуре базы, каковая потом тормозит при поиске и периодически вываливается с ошибкой SDBL.

Сколько надо, столько пусть и пишут полей — индексы, ссылки, что там еще они считают «новаторским» — в результате все равно это будет работать как и все остальное.

   H A D G E H O G s

99 — 04.07.11 — 13:16

(98) Типичный подход дятла.

  

Grusswelle

100 — 04.07.11 — 13:17

Сто!

24 / 24 / 1

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

Сообщений: 541

1

Реквизит документа с типом «СписокЗначений»

17.10.2013, 14:23. Показов 19195. Ответов 11


В документе мне необходим реквизит «Поразделения» составного типа: справочник — Подразделения и Список значений, несколько подразделений, чтоб указать.
Но у реквизита документа нет типа «СписокЗначений» (((((
Как можно выйти из ситуации???



0



856 / 655 / 111

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

Сообщений: 2,410

17.10.2013, 14:38

2

Используйте табличную часть документа. Каждой строке своё подразделение



0



24 / 24 / 1

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

Сообщений: 541

17.10.2013, 15:07

 [ТС]

3

не вариант, ТЧ заполняется по подразделениям или подразделению



0



900 / 877 / 8

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

Сообщений: 2,680

17.10.2013, 15:12

4

Цитата
Сообщение от Оленька
Посмотреть сообщение

не вариант

Почему?



0



24 / 24 / 1

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

Сообщений: 541

17.10.2013, 15:14

 [ТС]

5

ТЧ заполняется по подразделениям или подразделению
как я буду заполнять ТЧ, не зная по какому или каким подразделениям?



0



856 / 655 / 111

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

Сообщений: 2,410

17.10.2013, 15:23

6

Логику документа объясните тогда, что он делает?



0



900 / 877 / 8

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

Сообщений: 2,680

17.10.2013, 15:38

7

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



0



856 / 655 / 111

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

Сообщений: 2,410

17.10.2013, 15:44

8

А вдруг это 7.7?



0



24 / 24 / 1

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

Сообщений: 541

18.10.2013, 06:45

 [ТС]

9

1С 8.2
Документ «Инвентаризация товаров», т.е. в шапке необходимо указать подразделение/подразделения и уже по ним заполняю ТЧ остатками, которые есть в данном подразделении или подразделениях по кнопке «Заполнить».
Если вы мне предлагаете перетащить подразделения в ТЧ, как мне ее потом заполнять? по строчке чтоли?



0



900 / 877 / 8

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

Сообщений: 2,680

18.10.2013, 08:56

10

Цитата
Сообщение от Оленька
Посмотреть сообщение

Если вы мне предлагаете перетащить подразделения в ТЧ

Нет. Мы предлагаем создать дополнительную таб. часть «Подразделения». В ней можно будет указать как одно подразделение, так и несколько.



0



24 / 24 / 1

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

Сообщений: 541

18.10.2013, 09:08

 [ТС]

11

т.е. в шапке вместо поля подразделение делать ТЧ?
а нельзя в одно поле запихнуть и сделать составной тип как элемент справочника и как список значений? сделать как в отчетах: подразделение равно/в списке и уже в зависимости от выбора выдавать либо справочник либо список значений.



0



856 / 655 / 111

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

Сообщений: 2,410

18.10.2013, 10:20

12

Можно запихнуть с помощью ЗначениеВСтрокуВнутр() ЗначениеИзСтрокиВнутр(), но вам надо самой будет делать интерфейс добавления и редактирования списка подразделений. Поэтому не страдайте фигнёй и сделайте ТЧ, это не сложно

Цитата
Сообщение от Оленька
Посмотреть сообщение

т.е. в шапке вместо поля подразделение делать ТЧ?

Да, именно так.



1



Содержание:

  1. Использование палитры свойств реквизита формы типа «Список значений»
  2. Программная установка допустимого типа в свойстве «Тип значения» реквизита формы типа «Список значений»

При разработке интерфейсов 1С на платформе 1С:Предприятие 8 нередки ситуации, когда требуется ограничить допустимые для ввода списки значений для реквизита формы с типом «Список значений». Это можно выполнить несколькими способами.  

1.   Использование палитры свойств реквизита формы типа «Список значений»

Первый способ: установка допустимого типа в свойстве «Тип значения» в палитре свойств реквизита формы типа «Список значений».

 

Рис. 1 Редактирование типа значения в палитре свойств реквизита

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

По умолчанию при создании основного реквизита формы с типом «Список значений» платформа 1С устанавливает данному свойству тип значения «Произвольный».  

2.   Программная установка допустимого типа в свойстве «Тип значения» реквизита формы типа «Список значений»

Второй способ: программная установка допустимого типа в свойстве «Тип значения» реквизита формы типа «Список значений».

Сделать это можно, например, в обработчике события 1С формы «ПриСозданииНаСервере»:

&НаСервере

Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

            МассивДопустимыхТиповЗначенийСпискаСкладовПолучателей = Новый Массив;

           МассивДопустимыхТиповЗначенийСпискаСкладовПолучателей.Добавить(Тип(«СправочникСсылка.Склады»));

            СпискокСкладовПолучателей.ТипЗначения = Новый ОписаниеТипов(МассивДопустимыхТиповЗначенийСпискаСкладовПолучателей);

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

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

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

&НаСервере

Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

            МассивДопустимыхТиповЗначенийСпискаСкладовПолучателей = Новый Массив;

           МассивДопустимыхТиповЗначенийСпискаСкладовПолучателей.Добавить(Тип(«СправочникСсылка.Склады»));

           МассивДопустимыхТиповЗначенийСпискаСкладовПолучателей.Добавить(Тип(«СправочникСсылка.ПодразделенияОрганизаций»));

            СпискокСкладовПолучателей.ТипЗначения = Новый ОписаниеТипов(МассивДопустимыхТиповЗначенийСпискаСкладовПолучателей);

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

Таким образом, во втором случае для реквизита «Список складов-получателей» к возможности добавления/изменения элементов списка с типом «СправочникСсылка.Склады» мы добавили аналогичную возможность для типа «СправочникСсылка.ПодразделенияОрганизаций».

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

&НаКлиенте

Процедура ТаблицаПолучателейМатериаловСпискокСкладовПолучателейНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)

            МассивДопустимыхТиповЗначенийСпискаСкладовПолучателей = Новый Массив;

            МассивДопустимыхТиповЗначенийСпискаСкладовПолучателей.Добавить(Тип(«СправочникСсылка.Склады»));

            Элементы.ТаблицаПолучателейМатериалов.ТекущиеДанные.СпискокСкладовПолучателей.ТипЗначения = Новый ОписаниеТипов(МассивДопустимыхТиповЗначенийСпискаСкладовПолучателей);

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

В данном случае для колонки «СпискокСкладовПолучателей» (с типом «Список значений») реквизита формы «ТаблицаПолучателейМатериалов» мы ограничили возможность добавления/изменения элементов списка значений типом «СправочникСсылка.Склады».

  Специалист компании «Кодерлайн»

Аскер Жансуев

Задание типа значения для реквизита с типом СписокЗначений в управляемых формах

В управляемых формах невозможно задать тип значения для реквизита, который имеет тип СписокЗначений, хотя в обычных формах такая возможность есть. Если реквизит с типом СписокЗначений является реквизитом формы, то здесь особых сложностей нету, достаточно в обработчике события формы ПриСозданииНаСервере написать код по установке типа для значения списка:


ТипыСписка = "Строка";
ДоступныеТипы = Новый ОписаниеТипов(ТипыСписка);
ЭтаФорма.РеквизитСписокЗначений.ТипЗначения = ДоступныеТипы;

Как видно из примера, тип значения устанавливается через свойство списка значений ТипЗначения, которое имеет тип ОписаниеТипов.

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

1. Реквизит ТЧ с типом СписокЗначений

Для этого напишем код по установке типа значения в обработчике события элемента формы НачалоВыбора:


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

ТипыСписка = "Строка";
ДоступныеТипы = Новый ОписаниеТипов(ТипыСписка);
Элемент.Родитель.ТекущиеДанные.РеквизитСписокЗначений.ТипЗначения = ДоступныеТипы;

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

Что бы для типа значения задать составной тип, необходимо в конструктор объекта ОписаниеТипов передать первым параметром массив типов:


ТипыСписка = Массив;
ТипыСписка.Добавить(Тип("Строка"));
ТипыСписка.Добавить(Тип("Число"));
ДоступныеТипы = Новый ОписаниеТипов(ТипыСписка);
ЭтаФорма.РеквизитСписокЗначений.ТипЗначения = ДоступныеТипы;

Единственный минус составного типа в списке значений — это отсутствие множественного выбора (кнопки Подбор), придется добавлять по одному значению в список. а это просто печалит.

В предыдущей статье «Изучаем список значений 1С» я показал, каким образом можно программного работать со списком значений. Мы научились добавлять, вставлять и загружать нужные элементы в список. Но со списком значений можно работать на управляемой форме 1С, когда он используется в качестве реквизита этой формы. В этой статье мы разберем вопросы работы со списком значений на форме.

На управляемой форме 1С список значений можно разместить в качестве реквизита управляемой формы.

Список значений 1С на форме

Мы уже знаем, что каждый элемент списка значений содержит значения типа Элемент списка значений, но можно задать тип данных, которые будут содержаться в этом элементе. Делается это при помощи свойства реквизита – тип значения. В этом случае, все элементы заданного списка значений будут одного типа.

Свойство тип значения списка значений 1С на форме

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

Размещения списка значений на управляемой форме

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

Выбор типа нового элемента

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

Размещение свойства списка в качестве колонки таблицы

Размещение свойства списка в качестве колонки таблицы

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

Работа со списком значений 1С на форме

С реквизитом формы мы можем работать как с обычным списком значений. Например, заполним созданный нами список всеми складами, которые можно использовать.

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
                   |    Склады.Ссылка КАК Ссылка,
                   |    Склады.Представление КАК Представление
                   |ИЗ
                   |    Справочник.Склады КАК Склады
                   |ГДЕ
                   |    НЕ Склады.НеИспользовать";
    Выборка = Запрос.Выполнить().Выбрать();

    Пока Выборка.Следующий() Цикл
        Список.Добавить(Выборка.Ссылка,Выборка.Представление);
    КонецЦикла;

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

В этом случае, список заполнится сразу при открытии формы.

Заполненный список значения 1С


Более подробно о работе со списками значений и другими интересными объектами языка программирования в 1С читайте в моей книге «Программировать в 1С за 11 шагов»

Книга «Программировать в 1С за 11 шагов»

Изучайте программирование в 1С в месте с моей книги «Программировать в 1С за 11 шагов»

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

Книга «Основы разработки в 1С: Такси»

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

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

Промо-код на скидку в 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

Список значений на форме 1С для выбора пользователем значения можно расположить непосредственно на форме обработки/документа. Тогда пользователь сможет выбирать несколько значений из списка (зажав CTRL или SHIFT).

Список значений на форме 1С — в толстом клиенте просто размещаем на форме элемент списка, указываем название связанного реквизита формы.

Список значений на форме 1С — в тонком клиенте добавим реквизит формы, у которого выберем тип Список значений. При перетаскивании реквизита на форму, 1С спросит в каком виде мы хотели бы отображать его – чтобы он отображался аналогично толстому клиенту – выберите «Таблица».

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

Работа со списком значений на форме 1С из программного кода ведется по имени реквизита формы, который в толстом клиенте автоматически добавила система, а в тонком – вручную добавили мы самостоятельно. В примере (на картинках) имя реквизита формы – «ВыберитеЗначение».

В обработчике события формы ПриОткрытии() заполним значения списка, чтобы пользователю было из чего выбирать:
&НаКлиенте
Процедура ПриОткрытии(Отказ)

     
     ВыберитеЗначение.Добавить(0, "Создать документ"); //первый параметр – значение, второй параметр – представление значение, представление может отличаться от значения как угодно
     ВыберитеЗначение.Добавить(1, "Редактировать документ");
     ВыберитеЗначение.Добавить(2, "Удалить документ");

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

В обработчике нашего нужного события (например, кнопка выполнения действий) мы можем проверить, что там понавыбирал наш пользователь. Доступ к результату производится также по имени, но через элемент на форме, поэтому перед именем добавляем ЭлементыФормы (для толстого клиента) или Элемент (для тонкого клиента). Также – условие Если/Иначе уже не пойдет – так как могут быть выбраны несколько значений:

Проголосовать за этот пост:

Загрузка…

Posted in Язык 1С

 

Сегодня сложный урок, но тема очень
интересная. Сегодняшняя рассылка посвящена
объекту «СписокЗначений«. Можно сказать,
что это объект-ветеран: он существует с самого
начала существования платформы v7.х. и помогает
решить огромное количество задач:
выгрузка/загрузка данных, закладки в форме,
обработка данных, сервис в форме и т.д.

Назначение объекта Список Значений:

  1. Формирование списков для возможности выбора
    пользователем одного или нескольких значений.
  2. Формирование списков значений и использование
    их в качестве параметров при вызове методов,
    процедур и функций.
  3. Позволяет создавать динамические списки для
    обработки.

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

Методы объекта «СписокЗначений» — можно
применять к

  1. Переменным созданным с помощью команды
    СоздатьОбъект();
  2. Реквизитам формы: список и поле со списком. В
    этом случае реквизиту необходимо присвоить
    идентификатор. И только к идентификатору
    реквизита можно будет применять методы объекта
    Список Значений.

Объект Список Значений имеет только методы и не
имеет атрибутов. Чтобы применить метод
используется следующая конструкция: ИмяОбъекта.Метод(Параметр,,,);
  где

  • имяОбъекта — имя переменной полученной с
    помощью конструкции ИмяОбъекта=СоздатьОбъект(«СписокЗначений»);
    или ИмяОбъекта — это идентификатор реквизита
    список или поле со списком в форме.
  • Метод — имя метода.
  • Параметры — некоторые методы в качестве
    параметров могут принимать значения различных
    типов.

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

В колонке «значение» — хранятся
непосредственно значения, которые необходимы
для обработки в тексте модуля. В колонке
«Представление»   — указывается
символьное представление значения, которое и
будет доступно пользователю в процессе работы с
программой. Для чего это сделано — некоторые
значения в системе — не имеют «хорошего»
представления для пользователя или являются
служебными, которые пользователю совершенно не
обязательно видеть. И по этому для более удобной
работы используется представление значения. Это
можно продемонстрировать на примере физических
констант. Многие физические константы имеют
название или символьное представление, но их
значения не совсем приятны для чтения и
произношения. Тоже самое творится и внутри 1С.:))

Значение

Представление

3.14 Число Пи
2.7 Экспонета

По этой причине при добавлении новых
строк  в таблицу значений вы указываете два
параметра: значение и представление.

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

сз.ДобавитьЗначение(3.14,
«Число ПИ»);

сз.ДобавитьЗначение(2.7,
«Экспонента»);

……..

В некоторых случаях, когда значение и
представление этого значения одинаковы, или
список используется для хранения динамических
данный — используют упрощенную конструкцию:   сз.ДобавитьЗначение(2.7);
— в этом случае и в значение и в представление
будет добавлено 2.7.

В качестве значения в списке значений можно
хранить объекты. Например, какой-нибудь
конкретный документ, или элемент справочника,
или другой список значений (кто придумает или
встретит  хороший пример, когда список
значений хранится в списке значений — сообщите,
буду очень благодарен).

Не много о реквизитах формы: СПИСОК и
ПОЛЕсоСПИСКОМ.

Основное назначение элементов диалога этих
двух типов — визуализация Списока Значений .
Все действия по управлению списком значений
(добавление значения в список, удаление значения
из списка, сортировка списка и другие)
выполняются только средствами встроенного
языка.

Установка свойств элементов диалога
производится в палитре свойств «Свойства…»,
которую можно вызвать на экран двойным щелчком
мыши на нужном элементе диалога. Палитра свойств,
используемая при редактировании свойств
элементов диалога, по порядку использования
аналогична той, которая применяется при
редактировании свойств объектов
метаданных.  

Закладка «Общие».
Идентификатор
. Поле «Идентификатор» может
содержать условное имя элемента диалога.
Идентификатор представляет собой строку длиной
не более 128 символов, состоящую из букв, цифр и
.таков подчеркивания. Идентификатор не должен
содержать пробелов и начинаться с цифры.
Идентификатор используется для обращения к
элементам диалога из встроенного языка системы
1С:Предприятие.
Сделать недоступным
. Если флажок установлен,
элемент диалога будет недоступен при
использовании диалога. Недоступные элементы
будут выводиться «серым» цветом.  Управление
этим свойством доступно из встроенного языка
системы 1С:Предприятие, что позволяет
динамически устанавливать для элемента диалога
атрибут «Сделать недоступным».
Сделать невидимым
. Если флажок установлен,
элемент не будет отображаться при использовании
диалога. Управление этим свойством доступно из
встроенного языка системы 1С:Предприятие, что
позволяет динамически управлять видимостью
элемента диалога.
Сохранять при сохранении настройки
. Этот
флажок появляется в палитре свойств при
редактировании форм объектов метаданных типа
«Отчет» («Обработка») и внешних отчетов
(обработок). Если флажок установлен, значение
элемента диалога будет сохраняться при
сохранении настройки. Сохранение настройки —
запоминание текущих значений реквизитов диалога
отчета при работе с отчетом в режиме запуска
«1С:Предприятие».

Закладка «Дополнительно»
Формула
.  Здесь Вы можете задать имя
процедуры или функции, которая будет выполняться
при щелчке мышью на элементе диалога или при
переходе к следующему элементу диалога клавишей
Tab или Enter. Свойства формулы элемента диалога типа
«Список» совпадают со свойствами формулы
элемента диалога типа «Кнопка»): например, наряду
с вызовом процедур на встроенном языке системы
1С:Предприятие, в поле «Формула» элемента типа
«Список» можно указывать имена системных
процедур Записать, Провести и Закрыть.  При
использовании элементов диалога типа «Список»
необходимо иметь в виду, что формула, заданная
для этого элемента, выполняется при двойном
щелчке мышью на строке списка.

Внимание
. В выражениях формул элементов
диалога не допускается вызов процедур (функций),
открывающих или активизирующих другие окна
(ОткрытьФорму, ОткрытьПодбор и подобные.), а также
процедур, осуществляющих выбор активных строк
или элементов диалога (Активизировать,
АктивизироватьОбъект). Такие процедуры и функции
следует использовать в предопределенных
процедурах или в процедурах, вызываемых по
кнопке формы.
Список с пометками
. Если этот флажок
установлен, при показе списка значений слева от
каждого элемента списка будет добавлена рамка, в
которой щелчком мыши можно ставить или снимать
отметку .
Расставляя отметки, можно выбрать несколько
элементов списка для последующей обработки.

Примеры использования  списка значений.

Указание: Все примеры в этом разделе можно
попробовать в работе. Для этого:
1. создайте в форме реквизит «Список».
Задайте ему идентификатор СЗ.
2. создайте в форме кнопку и в свойствах этой
кнопки — пропишите имя вызываемой процедуры

В некоторых примерах показано несколько
вариантов решения. Они приведены только для того,
чтобы показать возможности встроенного языка и
продемонстрировать методику работы с объектом
список значений. Наиболее оптимальные варианты
решения задач (с моей точки зрения) — помечены *.

Как заполнить список значений

Процедура Заполнить()
сз.ДобавитьЗначение(«01.01.01″,»1 квартал 2001
г.»);
сз.ДобавитьЗначение(«01.04.01″,»2 квартал 2001
г.»);
сз.ДобавитьЗначение(«01.07.01″,»3 квартал 2001
г.»);
сз.ДобавитьЗначение(«01.010.01″,»4 квартал 2001
г.»);
КонецПроцедуры
Процедура заполняет список
названиями кварталов. В качестве значений
используется первая дата в квартале.

Как перебрать значения в списке и
получать значения и их представления

Процедура Перебор()
Перем зн, предст;
Строк=сз.РазмерСписка();
для к=1 по Строк цикл
зн=сз.ПолучитьЗначение(к, предст);
Сообщить(строка(зн)+»__»+предст);
конецЦикла;
КонецПроцедуры
Смотрим размер списка и
открываем цикл по строкам. В цикле
последовательно получаем значение в строках и
выводим значения и их представления с помощью
команды «сообщить»

Как определить текущую строку в форме
(которую пользователь выбрал)

Процедура ТекСтрок()
Перем зн, пред;
текСтр=сз.ТекущаяСтрока();
Если текстр=0 тогда
сообщить(«Строка не выбрана»);
возврат;
конецЕсли;
зн=сз.ПолучитьЗначение(текСтр,пред);
Сообщить(«Выбрана строка «+текСтр);
сообщить(«Значение в строке «+зн);
сообщить(«Представление в строке «+пред);
конецПроцедуры
Получаем номер текущей строки.
Если он равен нулю — значит строка не выбрана —
сообщаем об этом и уходим. Если строка выбрана, то
получаем значение и представление в этой строке
и сообщаем номер строки, значение и
представление.

Как удалить текущую строку

Процедура УдалитьТекСтрок()
Перем зн, пред;
текСтр=сз.ТекущаяСтрока();
Если текстр=0 тогда
сообщить(«Строка не выбрана»);
возврат;
конецЕсли;
сз.удалитьЗначение(текСтр, 1);
КонецПроцедуры
Получаем номер текущей строки.
Если он равен нулю — значит строка не выбрана —
сообщаем об этом и уходим. Если строка выбрана, то
удаляем ее.

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

1 способ.*

Процедура ЕстьЗначение()
перем дат;
ВвестиДату(дат,»Укажите любую дату»);
Если сз.НайтиЗначение(дат)=0 тогда
сообщить(«Нет такой даты»);
Иначе
сообщить(«Значение найдено в списке»);
конецЕсли;
КонецПроцедуры
В списке СЗ, находятся первые
дни каждого квартала. Просим пользователя ввести
любую дату и смотрим нет ли ее в списке.
Используем метод НАЙТИ(). Позволяет точно найти
позицию значения.

2 способ

Процедура ЕстьЗначение2()
Перем дат;
ВвестиДату(дат, «Укажите любую дату»);
Если сз.Принадлежит(дат)=1 тогда
сообщить(«есть значение»);
Иначе
сообщить(«Нет значения»);
конецЕсли;
конецПроцедуры
Тоже самое, что и в предыдущем
случае, но используется метод ПРИНАДЛЕЖИТ()

3 способ.

Процедура ЕстьЗначение3()
Перем дат;
ВвестиДату(дат, «Укажите любую дату»);
для к=1 по сз.РазмерСписка() цикла
зн=сз.ПолучитьЗначение(к);
если зн=дат тогда
сообщить(«есть значение в строке «+к);
конецЕсли;
конецЦикла;
КонецПроцедуры
Снова просим ввести
произвольную дату, после этого перебираем все
значения в списке и сравниваем. Долгий способ, но
позволяет найти все строки, где есть нужное
значение. Плохой способ.

Как полностью очистить список от
существующих значений

1 способ *

Процедура УдалялкаВсего()
сз.УдалитьВсе();
конецПроцедуры
Ну тут комментарии излишни

2 способ.

Процедура УдалялкаВсего2()
РазмСп=сз.РазмерСписка();
для к=1 по РазмСп цикл
сз.УдалитьЗначение(1,1);
конецЦикла;
конецПроцедуры
Смотрим сколько строк в списке и
столько раз удаляем первую строку. Нельзя в цикле
удалять строку К, так как скоро строк станет
значительно меньше, чем изначально определенное
К. Плохой способ, но надо разобраться как
работает процедура.

3 способ.

Процедура УдалялкаВсего3()
сз.УдалитьЗначение(1,сз.РазмерСписка());
конецПроцедуры
Одной командой удаляем все
значения с первого, до последнего. Самый
«некрасивый» способ. Хотя работать будет

Как получить все значения, которые
помечены пользователем (список с пометками).

Процедура УдалялкаВсего2()
Перем зн,предст;
РазмСп=сз.РазмерСписка();
для к=1 по РазмСп цикл
Если сз.Пометка(к)=1 тогда
зн=сз.ПолучитьЗначение(к,предст);
сообщить(«Пометка в строке «+к);
Сообщить(«Значение =»+зн);
Сообщить(«Представление =»+предст);
конецЕсли;
конецЦикла;
конецПроцедуры
Перебираем строки документа. В
каждой строке смотрим не стоит ли пометка. Если
пометка стоит — тогда получаем значение и
представление. Потом выводим полученные
значения и представления.

Это были основные методы, которые
встречаются в процессе конфигурирования. 

Домашнее задание: разобраться с примерами и
проверить их работоспособность. К понедельнику
приготовиться к самостоятельной работе по теме
«Использование списка значений» — будет
большой урок по самостоятельному решению задач.

Понравилась статья? Поделить с друзьями:
  • Реквизит документа это в делопроизводстве понятие
  • Реквизиты на уплату фиксированного платежа для ип
  • Реквизит заголовок к тексту правильно оформленный
  • Реквизиты налога на землю в ленинградской области
  • Реквизит заголовок официального документа который