04.07.11 — 11:54
Как в реквизите документа хранить список значений?
1 — 04.07.11 — 11:55
таб часть сделай
2 — 04.07.11 — 11:56
не катит, нужно реквизит
3 — 04.07.11 — 11:58
Хранилище значений
4 — 04.07.11 — 11:58
Через точку с запятой, либо какой-то другой спецсимвол.
Встречный вопрос: а зачем?
5 — 04.07.11 — 12:05
Затем, чтобы можно было указать в Инвентаризации несколько контрагентов
6 — 04.07.11 — 12:06
Как можно хранилище значений здесь заюзать*
7 — 04.07.11 — 12:08
(5) Типовой документ? Переделывать под ТЧ неохота?
8 — 04.07.11 — 12:10
Документ нетиповой, просто там очень много табличных частей и еще делать несколько нет желания(еще есть для организаций ,складов и еще могут кучу придумать).
9 — 04.07.11 — 12:10
(5) Только ТЧ
10 — 04.07.11 — 12:10
(4) через хранилище все хранится.
Или через ЗначениеВСтрокуВнутр и ЗначениеИзСтрокиВнутр
11 — 04.07.11 — 12:11
(6) Хранилище в данном случае нельзя использовать.
Контроль целостности данных в хранилище при удалении данных не производится.
12 — 04.07.11 — 12:11
(8) Почему нет желания?
13 — 04.07.11 — 12:11
Потому что там очень много табличных частей и еще делать несколько нет желания(еще есть для организаций ,складов и еще могут кучу придумать).
14 — 04.07.11 — 12:12
(6) делаешь реквизит, тип — ХранилищеЗначений
15 — 04.07.11 — 12:12
(2) Здесь как раз только ТЧ и катит.
А уж как ты эту табличную часть нарисуешь на форме — твое личное дело — хоть в виде одного поля вводы, хоть в виде списка, хоть в виде текстовой строки.
16 — 04.07.11 — 12:12
(11) а зачем ссылочная целостность для справочных данных??
17 — 04.07.11 — 12:13
Если взять тип значения реквизита ЛюбаяСсылка, то не прокатит?
18 — 04.07.11 — 12:13
(13) Дык, ТЧ как раз для того и придумана, чтобы хранить список значений.
19 — 04.07.11 — 12:13
(16) Удалили элемент справочника Контрагенты, ссылка на который присутствовала в этом списке. И что?
В результате имеем битую ссылку в документе.
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 такое в жизни бы не позволил.
23 — 04.07.11 — 12:15
(17) Нет.
(18) Ну ломает его отдельная табличка в базе. Хотяя, я его понимаю.
Автор, прикрути отдельный регистр сведений.
Пусть твой последователь ококует, когда увидит зоопарк ТЧ и отдельно регистр.
Удивляй!
24 — 04.07.11 — 12:16
(20) ну если нельзя хранить в «суперской среде разработки» список — то куда деваться? ))
25 — 04.07.11 — 12:16
(22) Это если foreign key. Но они — тормознутые (говорят).
26 — 04.07.11 — 12:16
(21) Супер. И если нет, то что? Выдавать ссобщение пользователю, что он дятел и профигачил при удалении информацию о контрагенте, который фигурировал когда-то раньше в это документе?
27 — 04.07.11 — 12:18
(26) пупер ))
>>»ну если нельзя хранить в «суперской среде разработки» список — то куда деваться?
28 — 04.07.11 — 12:20
(27) Писец.
Рекомендую почитать книгу «Практическое пособие разработчика 1С» и посмотреть на SQL вариант 1С базы данных и узнать про структуру таблиц.
29 — 04.07.11 — 12:20
(13) а что за конфа? секретная разработка? ))
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 хранимую процедурку, которой даешь ссылку, она удаляет все связанные записи (и все записи, связанные со связанными записями и т.д. рекурсивно), а потом удаляет указанную запись.
33 — 04.07.11 — 12:22
Это обычная торговля, документа инвентаризация, но очень сильно переделаннаяя, от нее осталась только суть.
34 — 04.07.11 — 12:22
(30) именно что нужен объект «Список», а не ТЧ.
А делать попу через две других попы — для 1С это нормальное состояние ))
35 — 04.07.11 — 12:23
(33) так если у вас там ТЧ даже на склады есть — почему нет отдельного регистра сведений под это дело?
36 — 04.07.11 — 12:24
(34) Как бы вы сделали, будь на месте 1С?
37 — 04.07.11 — 12:25
На склады нет ТЧ, есть уже других 5 штук, если сделать контрагнетов, организации и склады, то будет 8 ТЧ
38 — 04.07.11 — 12:26
(36) хранить списки как набор значений…
а как еще? )
39 — 04.07.11 — 12:26
(36) Не обращая внимания. Он чиста так — потроллить. Всё равно толкового решения не родит, но какашками 1С закидает.
40 — 04.07.11 — 12:27
(37) так сделайте одну на все три измерения ))
41 — 04.07.11 — 12:27
(37) Отдельный регистр
42 — 04.07.11 — 12:28
(40) Вот он истый дятлоизм.
43 — 04.07.11 — 12:28
(38) Физически, с т.з. SQL — как?
44 — 04.07.11 — 12:29
(39) да уж, куда толковее: чуть что — делать виртуальную ТЧ и держать её в уме.
«Делать по-уму и правильно изгаляться — разные состояния».
Можете цитировать ))
45 — 04.07.11 — 12:29
(37) Все еще упорствуешь?
46 — 04.07.11 — 12:29
(37) лучше 8 ТЧ чем список в реквизите. это вообще бред полный
47 — 04.07.11 — 12:29
Думаю может использовать СохранитьЗначение и Восстановитьзначение, хотя это тоже самое, что и использовать ХранилищеЗначения
48 — 04.07.11 — 12:30
(43) сделать одну таблицу под данные «Список» и писать новое значение списка в новое поле «ИндексN».
Нет?
49 — 04.07.11 — 12:31
(47) как потом запросом документ получить по нужному контрагенту?
50 — 04.07.11 — 12:31
(48) При добавлении нового значения новая колонка в таблице появляется?
51 — 04.07.11 — 12:32
Вообще ответ в (1).
Можно так же сделать реквизит шапки, чтобы в него писать представление табличной части, если нужно видеть его в списке документов или отчете.
52 — 04.07.11 — 12:33
как потом запросом документ получить по нужному контрагенту?
— согласен, не подойдет СохранитьЗначение
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-м измерениям любой протяженности в одну ТЧ ))
56 — 04.07.11 — 12:34
< Можно так же сделать реквизит шапки, чтобы в него писать представление табличной части, если нужно видеть его в списке документов или отчете. — Можно поподробнее?
57 — 04.07.11 — 12:35
(51) >>реквизит шапки, чтобы в него писать представление табличной части, если нужно видеть его в списке документов
— это как? вы в представлении ТЧ будете перечислять содержимое всего списка?
58 — 04.07.11 — 12:35
(56) Смотри как в ЗиУПе сделано в кадровых документах, реквизит «Состав»
59 — 04.07.11 — 12:36
(0) Если неудобно, что будет лишняя ТЧ на форме, так может на форме юзать список значений, который при записи попадать будет в ТЧ. А так, имхо, ТЧ однозначно, чего велосипеды изобретать.
60 — 04.07.11 — 12:37
(48) Это как минимум 4 поля отводить под кластерный индекс для ключа и докуа полей под данные (если хотим контроллировать их целостность), либо одно поле под хранилище (image) если на целостность пофиг.
Накуа?
61 — 04.07.11 — 12:37
(56)
ТЧ
Вася
Петя
Коля
Реквизит шапки
«Вася, Петя, Коля»
62 — 04.07.11 — 12:37
(58) по-моему, это уже попа через три попы…
прогресс, однако… ))
63 — 04.07.11 — 12:37
(57) Почему нет?
64 — 04.07.11 — 12:37
(55) Избыточность. При условии, что это документ, а не справочник — избыточная избыточность.
65 — 04.07.11 — 12:38
Представляю уже инновационный подход к программированию в 1с — конфа на регистрах сведений! Документ и справочник не нужны — берем два регистра сведений под шапку и табличную часть. Полный контроль.
66 — 04.07.11 — 12:38
(62) Это удобство.
67 — 04.07.11 — 12:39
(61) Нет.
Данное ТипДанного
Контур Контрагент
Сигма Контрагент
Оптовый Склад
Тип данного — не строка, а число
68 — 04.07.11 — 12:39
69 — 04.07.11 — 12:39
(64) а списки складов, контрагентов, Васей и организаций в одном документе — это тогда как назвать? ))
70 — 04.07.11 — 12:40
(69) Криволобая постановка задачи скорее всего
71 — 04.07.11 — 12:42
(70) в объективности вам не откажешь ))
72 — 04.07.11 — 12:43
(65) шапка — где?
ТЧ — в чем?
Документ же отменили ))
73 — 04.07.11 — 12:43
Криволобая постановка задачи скорее всего — Скорее всего ты не значешь зачем они нужны.
74 — 04.07.11 — 12:45
(60) а остальные типы в 1С разве не так? ))
75 — 04.07.11 — 12:45
Так чем вариант (67) не катит? Всего 1 тч на сколько хочешь доп реквизитов без избыточности
76 — 04.07.11 — 12:46
(74) Что значит остальные типы?
77 — 04.07.11 — 12:47
(63) потому что представление показать — это одно, а данные сначала пихать в представление, потом показывать, потом обратно разбирать и получить одно нужное значение — это прогресс из (62)

78 — 04.07.11 — 12:49
(74) любой тип данных сложнее примитивного в 1С:
>>Это как минимум 4 поля отводить под кластерный индекс для ключа и докуа полей под данные
79 — 04.07.11 — 12:49
(72) Ты не понял — подход подразумевает, что новатор нарисует форму, которая подтянет данные из регистров сведений. Документ готов.
80 — 04.07.11 — 12:49
Amra
58 — 04.07.11 — 12:35 (56) Смотри как в ЗиУПе сделано в кадровых документах, реквизит «Состав»
Не увидел в приеме на рабоут реквизита состав. Где можно посмотреть? В каком конкретном доке?
81 — 04.07.11 — 12:51
регулярно на мисте пытаются классическую мастер-деталь реализовать через попу, мдя
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) убил
86 — 04.07.11 — 12:53
(84) Как ты его будешь хранить в базе данных?
87 — 04.07.11 — 12:54
(82) Дружище, не пытайся что-то объяснить г-ну Лагранжу, тем паче не пытайся понять его. Это программа-бот. Она думать не умеет.
89 — 04.07.11 — 12:55
По теме — ответ в (1). БЕЗ вариантов.
90 — 04.07.11 — 12:56
(81) ну если поп-классика не устраивает — то да ))
(85) ну хочет человек списать результаты на того, кто «потянет» ))
а заранее не знает, кто….
(86) как и остальные — записью
91 — 04.07.11 — 12:57
(90)
как и остальные — записью
В какой таблице?
92 — 04.07.11 — 13:00
(91) сложно организовать отдельную таблицу?
93 — 04.07.11 — 13:01
(83) Конечно будет) Вообще речь про то что не нужно изобретать велосипеды, подменяя те средства, которые есть в платформе.
94 — 04.07.11 — 13:02
(92) Отдельную таблицу для конкретного документа, либо отдельную таблицу для всех всех документов (типа глобальный общий список) ?
95 — 04.07.11 — 13:03
(10)(3)база должна быть целостной ссылочной структурой, а не помойкой нашпигованной шаманизмом, если этот список только на время существования формы — не зачем его в базе хранить, а если для отчетности ещё понадобиться потом — шаманизмы будут ли наращиваться как снежный ком и тормозить, либо придется переносить таки инфу оотуда в структуры данных 1С
96 — 04.07.11 — 13:05
(94) отдельную таблицу под тип данных «Список»
значения списка — пишутся в поля.
Переменной присваивается уникальный ссылка (как любят в 1С).
97 — 04.07.11 — 13:06
(96) Структуру такой таблицы рассказать сможете?
98 — 04.07.11 — 13:12
(97)нет, не буду.
как-то не интересно ковырять «представления» 1С о «правильной» структуре базы, каковая потом тормозит при поиске и периодически вываливается с ошибкой SDBL.
Сколько надо, столько пусть и пишут полей — индексы, ссылки, что там еще они считают «новаторским» — в результате все равно это будет работать как и все остальное.
99 — 04.07.11 — 13:16
(98) Типичный подход дятла.
Grusswelle
100 — 04.07.11 — 13:17
Сто!
Есть некий документ. На форме у него есть элемент — ОтобранныеВидыРасчетов- тип СписокЗначений. Есть реквизит документа — «СписокРасчетов» — тип — ХранилищеЗначений. Как при записи и при открытии документа записать в хранилище и считать из хранилища? Сделал так: и чет нифига… ругается на ошибку потока » {Документ.Расчеты.Форма.ФормаДокумента.Форма}: Ошибка при вызове метода контекста (Получить) ОтобранныеВидыРасчетов=СписокРасчетов.Получить; по причине: Ошибка формата потока » Научите неумеху…
И чегось? типа так никто не делал чтоли?
Да че тут делать-то? Ты смотри, что ты в ХЗ сохраняешь-то! Смотри-смотри… Увидел? Нет? Ну как нет, когда вот, что ты пишешь: «Новый ХранилищеЗначения(ЭлементыФормы.ОтобранныеВидыРасчетов)» — ты сохранил в ХЗ не список значений, а элемент формы… У элемента формы есть данные (реквизит формы или реквизит объекта) вот эти данные и сохраняй. А вообще, отладчик бы тебе ответил на эти вопросы в течении пары минут…
Тэги: 1С 8
Комментарии доступны только авторизированным пользователям
Записать выбранное из списка значение в реквизит
Автор JohnDoe144, 06 июн 2016, 16:18
0 Пользователей и 1 гость просматривают эту тему.
Цитата: Rasty от 06 июн 2016, 17:26
код
Код — первоначальный. Прошу Вас, исправьте непосредственно в нем.
Процедура СтранаПроизводстваНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
СписокСтран = ПолучитьСписокСтран(Объект.Производитель);
Элементы.СтранаПроизводства.СписокВыбора.ЗагрузитьЗначения(СписокСтран);
КонецПроцедуры
&НаСервере
Функция ПолучитьСписокСтран(Производитель)
СписокСтран = Новый СписокЗначений;
Запрос = Новый Запрос;
Запрос.Текст = «ВЫБРАТЬ РАЗЛИЧНЫЕ
| ЗаводыИзготовители.СтранаПроисхождения
|ИЗ
| Справочник.ЗаводыИзготовители КАК ЗаводыИзготовители
|ГДЕ
| ЗаводыИзготовители.Владелец = &Владелец»;
Запрос.УстановитьПараметр(«Владелец», Производитель);
Выборка = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку(«СтранаПроисхождения»);
Возврат Выборка;
КонецФункции
Цитата: JohnDoe144 от 06 июн 2016, 17:32Процедура СтранаПроизводстваНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
СписокСтран = ПолучитьСписокСтран(Объект.Производитель);
Для каждого страна из списокстран цикл
Элементы.СтранаПроизводства.СписокВыбора.Добвить(страна,страна) ;
конеццикла
КонецПроцедуры&НаСервере
Функция ПолучитьСписокСтран(Производитель)
СписокСтран = Новый СписокЗначений;
Запрос = Новый Запрос;
Запрос.Текст = «ВЫБРАТЬ РАЗЛИЧНЫЕ
| ЗаводыИзготовители.СтранаПроисхождения
|ИЗ
| Справочник.ЗаводыИзготовители КАК ЗаводыИзготовители
|ГДЕ
| ЗаводыИзготовители.Владелец = &Владелец»;
Запрос.УстановитьПараметр(«Владелец», Производитель);
Выборка = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку(«СтранаПроисхождения»);
Возврат Выборка;
КонецФункции
книгу радченко читайте
Помогли — Скажи спасибо! Решил сам — поделись решением!
Вставил Ваш исправленный код.
Теперь при выборе элемента из списка:
1. Значение также не сохраняется в реквизите
2. Список выбора «растет» пропорционально количеству найденных в запросе стран. Т.е. один раз нажал на список — 2 страны, второй раз — уже 4, еще раз — 8 и т.д.
я же говорил вам что надо при открытии формы делать, вы как мой клиент один, ему говоришь, что надо делать он делает по своему и говорит что не работает, логика….
Помогли — Скажи спасибо! Решил сам — поделись решением!
Я никак не могу понять, почему:
1. Список формируется нормально, однако 2. При выборе значения из списка, оно не остается в реквизите. Т.е. поле остается незаполненным??

Добавлено: 06 июн 2016, 18:04
страна не имеет тип Строка, он у вас с типом ссылка, выбирайте наименование в запросе и еще раз ЧИТАЙТЕ РАДЧЕНКО!!!!!!!!!!!!!!!!!!!
Помогли — Скажи спасибо! Решил сам — поделись решением!
Ок, спасибо… ушел читать Радченко
Добавлено: 06 июн 2016, 18:46
Простите, это снова я…
Вопрос: Почему не работает даже такой код?
Процедура СтранаПроизводстваНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Элементы.СтранаПроизводства.СписокВыбора.Добавить(«А», «А»);
Элементы.СтранаПроизводства.СписокВыбора.Добавить(«Б», «Б»);
Элементы.СтранаПроизводства.СписокВыбора.Добавить(«В», «В»);
КонецПроцедуры
Т.е. СписокВыбора формируется, но значение не запоминается??
Цитата: JohnDoe144 от 06 июн 2016, 16:18
Добрый день, прошу подсказать, что не так сделал и как поправить, чтобы заработало «как надо».Исходные данные:
1. Самописная конфигурация
2. Реквизит на форме с типом «Строка»Необходимо:
1. Сформировать список выбора из значений из справочника
2. Записать выбранное значение из списка выбора в реквизитЧто сделано:
Процедура СтранаПроизводстваНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
СписокСтран = ПолучитьСписокСтран(Объект.Производитель);
Элементы.СтранаПроизводства.СписокВыбора.ЗагрузитьЗначения(СписокСтран);
КонецПроцедуры&НаСервере
Функция ПолучитьСписокСтран(Производитель)
СписокСтран = Новый СписокЗначений;
Запрос = Новый Запрос;
Запрос.Текст = «ВЫБРАТЬ РАЗЛИЧНЫЕ
| ЗаводыИзготовители.СтранаПроисхождения
|ИЗ
| Справочник.ЗаводыИзготовители КАК ЗаводыИзготовители
|ГДЕ
| ЗаводыИзготовители.Владелец = &Владелец»;
Запрос.УстановитьПараметр(«Владелец», Производитель);
Выборка = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку(«СтранаПроисхождения»);
Возврат Выборка;
КонецФункцииКак работает сейчас:
Список формирует, но после выбора значения поле остается пустым.Заранее благодарю за оперативный и продуктивный ответ.
Попробуйте изменить запрос. Вы получаете элементы справочника, а реквизит строка. Другой вариант: измените тип реквизита.
Запрос.Текст = «ВЫБРАТЬ РАЗЛИЧНЫЕ
| ЗаводыИзготовители.СтранаПроисхождения.Представление
|ИЗ
| Справочник.ЗаводыИзготовители КАК ЗаводыИзготовители
|ГДЕ
| ЗаводыИзготовители.Владелец = &Владелец»;
а вы не СписокВыбора у элемента формируйте, а параметр события «ДанныеВыбора».
открою тайну — это тоже список значений )
«<ДанныеВыбора>
Тип: СписокЗначений.
В обработчике можно сформировать и передать в этом параметре данные для выбора. При этом параметр <СтандартнаяОбработка> должен быть установлен в Ложь. »
Получил помощь — скажи СПАСИБО.
Разобрался сам — расскажи другим.
Что-то все-таки не то… Давайте разберемся…
Я уже кучу всего перепробовал, ничего не помогает. Уже и изменил тип реквизита
1. 1с — 8.3
2. СтранаПроизводства — тип реквизита СправочникСсылка.Страны
3. Новый код:
&НаКлиенте
Процедура СтранаПроизводстваНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
ДанныеВыбора = Новый СписокЗначений();
ДанныеВыбора.ЗагрузитьЗначения(ПолучитьСписокСтран(Объект.Производитель));
СтандартнаяОбработка = Ложь;
КонецПроцедуры
4. Из Функции «ПолучитьСписокСтран» получаю Массив и загружаю значения из него в ДанныеВыбора
5. ДанныеВыбора — следующие (см. скриншот во вложении).
6. Может быть дело в том, что «Представление» — пусто? А как добавить Представление для каждого Значения?
Добавлено: 07 июн 2016, 13:50
Всё, разобрался.
Всем спасибо.
Все оказывается работало. Просто при открытии формы из-за того, что для поля установлен режим выбора из списка, сохраненное в реквизите значение не отображалось (хоть и наличествовало).
0
1С 8.3 : Реквизит ~ Как сохранять и восстанавливать значения Объектов и Реквизитов на форме УП?
У управляемой формы реквизиты заведенные как реквизиты формы, при закрытии и открытии ее заново могут сохраняться и восстанавливаться, достаточно только поставить напротив галочку сохранять и в свойствах формы выбрать «АвтоматическоеСохранениеДанныхВНастройках» — Использовать.

Подробнее в этой статье Как сохранять и восстанавливать значения реквизитов на форме? и там же пример для обычных форм.
А что же делать с реквизитами, которые выступают в роли реквизитов объектов ?
у них такой настройки нет 
Код 1C v 8.3
&НаСервере
Процедура ВосстановитьНастройки()
КлючОбъекта = "ЗагрузкаИЗPDF_All4CF.ru";
КлючНастроек = "ЗагрузкаИЗPDF_All4CF.ru";
ОписаниеНастроек = "ЗагрузкаИЗPDF_All4CF.ru";
ИмяПользователя = "";
ЗначениеНастроек = ХранилищеОбщихНастроек.Загрузить(КлючОбъекта, КлючНастроек, ОписаниеНастроек, ИмяПользователя);
Если ТипЗнч(ЗначениеНастроек) = Тип("Соответствие") Тогда
Объект.Склад = ЗначениеНастроек.Получить("Склад");
Объект.Организация = ЗначениеНастроек.Получить("Организация");
Объект.ПутьКPDF2TXT = ЗначениеНастроек.Получить("ПутьКPDF2TXT");
Объект.ПутьКPDF = ЗначениеНастроек.Получить("ПутьКPDF");
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии(Отказ)
ВосстановитьНастройки();
КонецПроцедуры
&НаСервере
Процедура СохранитьНастройки()
КлючОбъекта = "ЗагрузкаИЗPDF_All4CF.ru";
КлючНастроек = "ЗагрузкаИЗPDF_All4CF.ru";
ОписаниеНастроек = "ЗагрузкаИЗPDF_All4CF.ru";
ИмяПользователя = "";
Настройки = Новый Соответствие;
Настройки.Вставить("ПутьКPDF2TXT", Объект.ПутьКPDF2TXT);
Настройки.Вставить("ПутьКPDF", Объект.ПутьКPDF);
Настройки.Вставить("Склад", Объект.Склад);
Настройки.Вставить("Организация", Объект.Организация);
ХранилищеОбщихНастроек.Сохранить(КлючОбъекта, КлючНастроек, Настройки, ОписаниеНастроек, ИмяПользователя);
КонецПроцедуры
&НаКлиенте
Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка)
СохранитьНастройки();
КонецПроцедуры
Открыв обработку и заполним поля закрываем ее, при следующем открытии все поля заполнены из сохраненных настроек:
В этой статье разберем, как работать с сохранением данных на форме в 1С 8.3.
Сохраняемые данные формы 1С
У любой управляемой формы можно настроить сохранение данных реквизитов формы. Это значит, что форма сохранит данные введенные в поля, которые соответствуют реквизитам, при закрытии формы, а при последующем открытии формы информация в этих полях восстановятся автоматически.
Например, у меня на форме обработки имеются поля, данные в которых сохраняются при закрытии формы и восстанавливаются при последующем открытии.

Это поля Контрагент и Цена.
Для того, чтобы на управляемой форме данные из соответствующих реквизитов сохранялись, необходимо выполнить следующие действия.
Первое. У свойства формы «Автоматическое сохранение данных в настройках» установить значение «Использовать».

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

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

А потом, у нужных реквизитов формы следует установить флаг у свойства «Сохраняемые данные».

После таких изменений, у формы в группе Ещё появятся команды «Сохранить параметры» и «Восстановить параметры».

Теперь мы можем сохранить любую комбинацию реквизитов Контрагент – Цена.


И можем восстановить нужную комбинацию в любой момент работы с формой, а не только при открытии.


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

Книга написана понятным и простым языком — для новичка.
- Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
- Научитесь понимать архитектуру 1С;
- Станете писать код на языке 1С;
- Освоите основные приемы программирования;
- Закрепите полученные знания при помощи задачника.
О том как разрабатывать под управляемым приложением 1С, читайте в книге Книга «Основы разработки в 1С: Такси»
Отличное пособие по разработке в управляемом приложении 1С, как для начинающих разработчиков, так и для опытных программистов.

- Очень доступный и понятный язык изложения
- Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
- Поймете идеологию управляемого приложения 1С
- Узнаете, как разрабатывать управляемое приложение;
- Научитесь разрабатывать управляемые формы 1С;
- Сможете работать с основными и нужными элементами управляемых форм
- Программирование под управляемым приложением станет понятным
Промо-код на скидку в 15% — 48PVXHeYu
Эти книги, плюс книга по программированию оперативного учета имеются в едином комплекте: комплект книг по разработке в 1С.
Только для читателей моего блога,
промо-код на скидку в 300 рублей на весь комплект: blog
Если Вам понравился этот урок, был полезен или помог решить какую-нибудь проблему, то Вы можете поддержать мой проект, перечислив любую сумму.
можно оплатить вручную:
Яндекс.Деньги — 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С 8.3 это объект, который позволяет хранить в сериализованном виде почти любые типы данных (включая двоичные). Хранение происходит в самой базе данных (файле 1Cv8.1CD или на SQL-сервере в таблицах). Соответственно при выгрузки конфигурации, данные используемые хранилищем значений будут включены в архив базы (резервную копию). С помощью этого объекта можно хранить такие данные как: файлы, картинки (фотографии), внешние обработки, таблицы значений, структуры… Важно понимать, что хранение данных в таком виде будет существенно замедлять работу базы данных. Поэтому данную технологию хранения рекомендуется использовать в крайних случаях, если отсутствует альтернатива решения для имеющейся задачи.
Оглавление:
Сохранение в Хранилище Значений в 1С 8.3:
&НаСервере
Процедура СохранениеВХранилищеЗначений();
// *** 1.Пример (Таблица значений):
ЗначенияТЗ = Новый ТаблицаЗначений(); // Создание значения «ТЗ»
// Вставка в хранилище значений
Хранилище_Зн = Новый ХранилищеЗначения(ЗначенияТЗ, Новый СжатиеДанных(9));// «9» — макс.степень сжатия
// Сохранение значения в реквизит объекта конфигурации (тип: ХранилищеЗначения)
СправочникСтранаСсылка = Справочники.Страны.НайтиПоНаименованию(«Испания»);
Если Не СправочникСтранаСсылка.Пустая() Тогда
// Изменим и запишем численность жителей в стране
СтранаИспания = СправочникСтранаСсылка.ПолучитьОбъект();
СтранаИспания.ХранилищеЗначения = Хранилище_Зн;
СтранаИспания.Записать();
КонецЕсли;
// *** 2.Пример (Табличный документ):
ЗначенияТабДок=Новый ТабличныйДокумент;
ЗначенияТабДок.Вывести(ЭлементыФормы.ПолеТабличногоДокумента1);
Хранилище_ТабДок=Новый ХранилищеЗначения(ЗначенияТабДок);
// *** 3.Пример (Структура):
ЗначенияСтр = Новый Структура(); // Создание значения «Структура»
ЗначенияСтр.Вставить(«Код», «34»);
ЗначенияСтр.Вставить(«Наименование», «Испания»);
ЗначенияСтр.Вставить(«Описание», «Европейская страна, расположенная на Пиренейском полуострове»);
ЗначенияСтр.Вставить(«Население», 46600000);
// Вставка в хранилище значений
Хранилище_Стр = Новый ХранилищеЗначения(ЗначенияСтр, Новый СжатиеДанных(9));// «9» — макс.степень сжатия
ЗначениеВФайл(«D:import», Хранилище_Стр); // Сохранение значения в файл
// *** 4.Пример (Любой файл) :
ФайлДвоичныеДанные = Новый ДвоичныеДанные(«D:importКлиентБанк_РБ.exe»);
Хранилище_Файл = Новый ХранилищеЗначения(ФайлДвоичныеДанные, Новый СжатиеДанных(0));// «0» — без сжатия
// *** 5.Пример (Файл картинка) :
ФайлФото = Новый Картинка(«D:importФотоСотрудника.png»);
Хранилище_Фото = Новый ХранилищеЗначения(ФайлФото, Новый СжатиеДанных(5));// «5» — средн.степень сжатия
// *** 6.Пример (Текстовый файл) :
ФайлТекст = Новый ЧтениеТекста(«D:importВойна_и_мир.txt»);
ТекстИзФайла = ФайлТекст.Прочитать();
Хранилище_Текст = Новый ХранилищеЗначения(ТекстИзФайла, Новый СжатиеДанных(1));// «1» — мин.степень сжатия
// *** 7.Пример (Отчет/обработка 1С) :
Хранилище_Epf = Новый ХранилищеЗначения(Новый ДвоичныеДанные(«D:importOtchet_realizacija_2020.epf», СтепеньСжатия));
КонецПроцедуры
Восстановление из Хранилище Значений в 1С 8.3:
&НаСервере
Процедура ВосстановлениеИзХранилищеЗначений();ИмяФайла = «D:importВойна_и_мир.txt»;// Двоичные данные можно восстановить из хранилища значения методом Получить и записать в файл методом Записать()
Если ТипЗнч(РеквизитХранилище) = Тип(«ДвоичныеДанные») Тогда// Хранилище.Получить()<>Неопределено Тогда // Процедура извлекает данные из хранилища (требует времени)
// Для больших объемов данных рекомендуется использовать доп.реквизит (Например: Булево) Содержит данные — Истина
ДанныеХранилища = РеквизитХранилище.Получить();
Если ДанныеХранилища = Неопределено Тогда
Сообщить(«Ошибка получения данных из хранилища значений 1С»);
КонецЕсли;
ДанныеХранилища.Записать(ИмяФайла); // Записываем восстановленые данные в файл
// Восстановление Табличного документа
ЭлементыФормы.ПолеТабличногоДокумента1.Вывести(ДанныеХранилища);// Восстановление и запуск Отчета/обработки 1С
ИмяФайла_Epf = «D:importOtchet_realizacija_2020.epf»;
ДвоичныеДанные = РеквизитХранилище.Получить();
ДвоичныеДанные.Записать(ИмяФайла_Epf);
Epf = ВнешниеОбработки.Создать(ИмяФайла_Epf);
Epf.ПолучитьФорму().Открыть();
Иначе
ДанныеХранилища = РеквизитХранилище;
КонецЕсли;// Файлы зарегистрированного типа (doc, xls, pdf, jpg, txt, exe…)
ЗапуститьПриложение(ИмяФайла);
КонецПроцедуры
Очистка реквизита Хранилище Значений в 1С 8.3:
&НаКлиенте
Процедура ОчисткаРеквизитаХранилищеЗначений();РеквизитХранилище = Неопределено;
КонецПроцедуры
Проверка значения Хранилище Значений в 1С 8.3:
&НаКлиенте
Процедура ПроверкаЗначенияХранилищеЗначений();Значение = РеквизитХранилище.Получить();
Если Значение <> Неопределено Тогда
Если ТипЗнч(Значение) = Тип(«Строка») Тогда
Сообщить(«Это строка»);
ИначеЕсли ТипЗнч(Значение) = Тип(«Картинка») Тогда
Сообщить(«Это фотография (картинка)»);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
💡 Шаблоны (готовые модели) кода 1С 8.3 с тегом «Хранилище значений» 1С:
Copyright©, «Программист 1С в г.Минске», 22.09.2020
Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник
Для сохранения значений реквизитов управляемой формы в 1С нужно включить свойство управляемой формы СохранениеДанныхВНастройках. После этого в окне реквизитов формы появится дополнительная колонка Сохранять данные в настройках. В этой колонке нужно поставить флаг у тех реквизитов, значения которых нужно сохранять.
После этого на форме появятся стандартные кнопки Сохранить параметры и Восстановить параметры (возможно, они будут скрыты под кнопкой Еще).
Однако, автоматическое сохранение значений доступно только для реквизитов формы. Для табличных частей флаг Сохранять данные в настройках не предусмотрен. Однако, табличные части можно преобразовать, например, в массивы и уже их сохранить в настройках формы.
Рассмотрим эту процедуру на примере формы с двумя табличными частями: ТипыЦен и ГруппыНоменклатуры. В каждой табличной части по одной колонке.
Для сохранения значений табличной части управляемой формы нам потребуется создать процедуру для события формы ПриСохраненииДанныхВНастройкахНаСервере. Как следует из названия, это событие возникает при сохранении значений реквизитов формы. И тут то мы и сможем добавить к реквизитам нашу табличную часть, предварительно преобразованную в массив.
Процедура ПриСохраненииДанныхВНастройкахНаСервере(Настройки)
//Создаем массивы из табличных частей
МассивГрупп=новый массив;
Для каждого Строка из Объект.Группы Цикл
МассивГрупп.Добавить(Строка.Группа);
КонецЦикла;
МассивЦен=новый массив;
Для каждого Строка из Объект.ТипыЦен Цикл
МассивЦен.Добавить(Строка.ТипЦены);
КонецЦикла;
//Добавляем полученные массивы в сохраняемые настройки с соответствующими именами
Настройки.Вставить(«Группа», МассивГрупп);
Настройки.Вставить(«ТипыЦен», МассивЦен);
КонецПроцедуры
Теперь осталось восстановить табличные части из массивов при загрузке настроек управляемой формы. Для этого нам потребуется процедура для события ПриЗагрузкеДанныхИзНастроекНаСервере.
Процедура ПриЗагрузкеДанныхИзНастроекНаСервере(Настройки)
//Очищаем табличные части, чтобы избежать дублей
Объект.Группы.Очистить();
Объект.ТипыЦен.Очистить();
//Получаем массивы из настроек по тому имени, по которому сохраняли и заносим в табличные части
Для каждого Строка из Настройки.Получить(«Группа») Цикл
НС=Объект.Группы.Добавить();
НС.Группа=Строка;
КонецЦикла;
Для каждого Строка из Настройки.Получить(«ТипыЦен») Цикл
НС=Объект.ТипыЦен.Добавить();
НС.ТипЦены=Строка;
КонецЦикла;
КонецПроцедуры











