1с очистить реквизиты документа программно

Очистить реквизит формы

Я
   rowvg

16.03.20 — 09:50

У формы есть реквизит, с типом СправочникСсылка. Подскажите, пжл, как его программно очистить? Формы управляемые.

  

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

   Ц_У

1 — 16.03.20 — 09:51

очистить в где?

   rowvg

2 — 16.03.20 — 09:57

На форме есть элемент управления, связанный с этим реквизитом. Когда пользователь выполнит определенные действия нужно в этом элементе управления его очистить.

   Михаил Михайлович

3 — 16.03.20 — 09:58

(2) в чем вопрос?

   rowvg

4 — 16.03.20 — 10:00

как это сделать? На клиенте справочники недоступны, есл реквизиту присвоить пустое значение на сервере, то на клиента это никак не влияет, при возращении на клиента реквизит остается заполненным

   Ц_У

5 — 16.03.20 — 10:02

(4) ты определись или реквизит формы или поле объекта

если реквизит формы, то на клиенте, если объекта то на сервере

от этого и пляши

   rowvg

6 — 16.03.20 — 10:03

4+ То есть на клиенте

ЭтотОбъект.Элементы.Собственник = Справочники.Контрагенты.ПустаяСсылка(); выполнить нельзя

на сервере такое присваивание срабатывает, но при возращении в клиентскую процедуру ЭтотОбъект.Элементы.Собственник снова заполнен.

   rowvg

7 — 16.03.20 — 10:04

5+ я однозначно в теме написал — реквизит формы

   Михаил Михайлович

8 — 16.03.20 — 10:05

(6) врешь, наверное или не правильно написал

   sqr4

9 — 16.03.20 — 10:05

.Собственник = Справочники.Контрагенты.ПустаяСсылка();

   sqr4

10 — 16.03.20 — 10:06

без точки

   sqr4

11 — 16.03.20 — 10:07

(6) Срочно книжки читать по управляемому интерфейсу и не трепать форум

   rowvg

12 — 16.03.20 — 10:14

(11) Спасибо, получилось

Почему вот так нельзя ЭтотОбъект.Собственник = Справочники.Контрагенты.ПустаяСсылка();  ?

   hhhh

13 — 16.03.20 — 10:19

(12) так можно

   Ц_У

14 — 16.03.20 — 10:19

(12)



Процедура Сменить()

    СменитьНаСервере()

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



СменитьНаСервере()

   ЭтотОбъект.Собственник = Справочники.Контрагенты.ПустаяСсылка()

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

   rowvg

15 — 16.03.20 — 10:23

(14)

&НаСервере

Процедура ДобавитьСобственникаНаСервере()

    
    ЭтотОбъект.Собственник = Справочники.Контрагенты.ПустаяСсылка();

    Собственник = Справочники.Контрагенты.ПустаяСсылка();

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

Верхняя строчка не срабатывает…

   Александр Б

16 — 16.03.20 — 10:26

Можешь на клиенте сделать

Объект.Собственник = Неопределено

   Ц_У

17 — 16.03.20 — 10:27

   Александр Б

18 — 16.03.20 — 10:29

(14) Реквизит формы можно очистить и без вызова сервера.

   rowvg

19 — 16.03.20 — 10:31

15+  Вернее не срабатывает вот такой вызов

&НаКлиенте

Процедура ДобавитьСобственника(Команда)

    ДобавитьСобственникаНаСервере(ЭтотОбъект.Собственник);

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

&НаСервере

Процедура ДобавитьСобственникаНаСервере(Собственник)

    ЭтотОбъект.Собственник = Справочники.Контрагенты.ПустаяСсылка();

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

   rowvg

20 — 16.03.20 — 10:32

(16)  Александр Б, у меня реквизит формы, а не объекта

   rowvg

21 — 16.03.20 — 10:33

19+ А вот так все прекрасненько срабатывает!

15+  Вернее не срабатывает вот такой вызов

&НаКлиенте

Процедура ДобавитьСобственника(Команда)

    ДобавитьСобственникаНаСервере();

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

&НаСервере

Процедура ДобавитьСобственникаНаСервере()

    ЭтотОбъект.Собственник = Справочники.Контрагенты.ПустаяСсылка();

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

Это что за фокусы?

   Александр Б

22 — 16.03.20 — 10:33

(20) Тогда просто на клиенте делаешь Собственник = ПредопределенноеЗначение(«Справочник.Контрагенты.ПустаяСсылка»);

   Александр Б

23 — 16.03.20 — 10:34

(21) Реквизит формы находится в контексте формы. Тебе не нужно обращаться к форме через ЭтотОБъект. Можно сразу обращаться к реквизиту.

   rowvg

24 — 16.03.20 — 10:35

22 Спасибо, не знал

   rowvg

25 — 16.03.20 — 10:36

23 Это я для читабельности. Меня интересует почему если я реквизит формы передал аргументом на сервер, то ЭтотОбъект.Собственник = Справочники.Контрагенты.ПустаяСсылка(); не срабатывает?

   ptiz

26 — 16.03.20 — 10:37

Вы тут прикалываетесь, что-ли?

Реквизит1 = Неопределено;

и всё

   Александр Б

27 — 16.03.20 — 10:38

(25) Не думай об этом. Два глупых и бесполезных действия одновременно

   Ц_У

28 — 16.03.20 — 10:39

(26) не ломай кайф

   rowvg

29 — 16.03.20 — 10:41

(27) Вопрос уже не об очистке реквизита, что меняется от вызова с параметром и без него?

   Жан Пердежон

30 — 16.03.20 — 10:41

(25) почитай что-нибудь про формальные и фактические параметры, как они работают при клиент-серверных вызовах, заодно и этот пример проверишь:

&НаСервере

Процедура ДобавитьСобственникаНаСервере(ЗНАЧ Собственник)

    ЭтотОбъект.Собственник = Справочники.Контрагенты.ПустаяСсылка();

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

   Александр Б

31 — 16.03.20 — 10:43

(25) Вообще тебе на заметку. Реквизиты формы существуют одновременно и на клиенте и на сервере. Если ты вызываешь процедуры &НаСервере или &НаКлиенте.

Реквизит формы с клиента на сервер имеет смысл передавать только тогда, когда ты делаешь безконтекстный вызов &НаСервереБезКонтекста. Тогда в этом методе форма и её реквизиты не будут видны, кроме того, что ты передашь в параметрах.

   rowvg

32 — 16.03.20 — 11:02

(30) Все, спасибо, разобрался. Оказывается 1С для того чтобы уменьшить трафик не передает параметр, который передавался по значению, обратно на клиента. Хотя как можно передавать по значению ссылочный объект?

   Жан Пердежон

33 — 18.03.20 — 13:41

(32) нет, не для этого. И ссылка — это ещё не весь объект.

   DrZombi

34 — 18.03.20 — 13:49

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

  

DrZombi

35 — 18.03.20 — 13:49

(30) Можно просто:

Объект.Собственник = Неопределено;

184 / 101 / 8

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

Сообщений: 782

1

Очищение всех реквизитов документа

10.03.2018, 18:34. Показов 10389. Ответов 1


Добрый день.
Подскажите, пожалуйста, как можно программно и разом почистить все реквизиты на форме. ТО есть у документа есть на УФ выведенные реквизиты и надо при нажатии на кнопку, что бы они все очистились.



0



GreenkA

Эксперт 1С

3051 / 1998 / 524

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

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

10.03.2018, 19:20

2

ПростоЯ, универсальный код для любого объекта конфигурации(и не только документа):

1C
1
2
3
4
5
6
7
8
9
10
11
&НаКлиенте
Процедура ОчиститьРеквизиты(Команда)
    ОчиститьРеквизитыНаСервере();
КонецПроцедуры
 
&НаСервере
Процедура ОчиститьРеквизитыНаСервере()
    Для Каждого ТекРеквизит Из Объект.Ссылка.Метаданные().Реквизиты Цикл
        Объект[ТекРеквизит.Имя] = Неопределено;
    КонецЦикла;   
КонецПроцедуры



1



Как очистить все реквизиты и табличные части документа

Бывает необходимо программно очистить все  табличные части и реквизиты документа.
Ниже приведена процедура очистки любого документа

Процедура ОчиститьДокумент(Документ)
    Для Каждого
Рек Из Документ.Метаданные().Реквизиты Цикл
       
Документ[Рек.Имя]=Неопределено;
    КонецЦикла;
    Для Каждого
Тч Из Документ.Метаданные().ТабличныеЧасти Цикл
       
Документ[Тч.Имя].Очистить();
    КонецЦикла;
КонецПроцедуры

17 правил для составления оптимального ЗАПРОСа к данным базы 1С 47
Для формирования и выполнения запросов к таблицам базы данных в платформе 1С используется специальный объект языка программирования Запрос . Создается этот объект вызовом конструкции Новый Запрос . Запрос удобно использовать, когда требуется получ


1C и Google Maps 21
была поставлена задача отображения на географической карте медицинских учреждений. После обзора предлагаемых решений был выбран сервис google. Но так же подобного рода подход будет работать и с картами сервиса yandex. Во время решения задачи было реш


1С Предприятие что это? 12
Что такое 1С?
1С — это фирма , у которой одно из направлений деятельности — разработка программного обеспечения для автоматизации бизнес-процессов предприятий. « 1С:Предприятие » — конкретный продукт, который выпускает компания 1С .
Что такое


COM-подключение к базе 7.7 из 8.2 1С 6
Если код выполняется на стороне клиента, то необходимо наличие базы 7.7 на локальной машине.
Пример (На форме объекта присутствует реквизит Таблица(ТаблицаЗначений)):
НаКлиенте
Процедура Загрузки()
ПутьКБазе=» D:ВашаБаза1с77″ ;
Пользователь=


Excel файл как Внешний источник данных 16
Подключимся и загрузим из файла Excel данные в таблицу значений 1С. Сделать теперь это очень просто.
1. В конфигурации добавляет новый объект метаданных типа » Внешние источники данных» и назовем его просто » Excel» .
https://helpf.pro/uploads/img


Посмотреть все результаты поиска похожих

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

Поэтому необходим был механизм, который позволил бы получить полный список реквизитов и табличных частей. Для этого у объектов 1С существует встроенная функция Метаданные().

Эта функция возвращает значение особого типа — ОбъектМетаданных. В нем содержатся практически все свойства объекта. Например для элемента справочника это будут: длина наименования и кода, автонумерация, основные формы, вообще все существующие формы, представление объекта, иерархичность, макеты и многое другое.

В нашем случае потребуются Реквизиты и Табличные части. Эти компоненты метаданных содержат значение КоллекцияОбъектовМетаданных, которую можно обойти в цикле Для каждого.

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

В итоге модуль, очищающий реквизиты и табличные части, выглядит так:

Контрагент=КонтрагентСсылка.ПолучитьОбъект();
//Переменная КонтрагентСсылка должна содержать ссылку на элемент</p>
Для Каждого Реквизит Из Контрагент.Метаданные().Реквизиты Цикл
Контрагент[Реквизит.Имя] = Неопределено;
КонецЦикла;

Для Каждого ТаблЧасть Из Контрагент.Метаданные().ТабличныеЧасти Цикл
Контрагент[ТаблЧасть.Имя].Очистить();
КонецЦикла;

Контрагент.Записать();

Функция Метаданные() применяется как для самого объекта, так и для ссылки на него. В нашем случае необходимо было изменить значения реквизитов, поэтому объект нужно было получить. Данная функция работает не только для справочников, но и для других объектов конфигурации 1С, но состав свойств будет иным.

Приведенный в заметке пример — это только один из многочисленных способов применения функции Метаданные(). Другие варианты и проблемы с использованием метаданных готов обсудить в комментариях.

You are here:

You are here

Home » Blogs » Nicholas’s blog

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

27 May

Published by Nicholas

Например, реквизит объекта «Состояние» имеет тип «СправочникСсылка.Состояния», в этом случае, чтобы программно его очистить &НаКлиенте необходимо выполнить следующий код:

Объект.Состояние = ПредопределенноеЗначение("Справочник.Состояния.ПустаяСсылка");

Тэги 


1С 8

  • Nicholas’s blog
  • Add new comment

Comments

Никита's picture

Никита (not verified)Wed, 02/03/22

Спасибо


Спасибо

  • reply

Add new comment

Your name

Comment *

More information about text formats

Plain text

  • No HTML tags allowed.
  • Lines and paragraphs break automatically.

CAPTCHA

Are you a human visitor or automated spam submissions?

Drag or click the correct shape to the grey «drop area».

Target Image

Понравилась статья? Поделить с друзьями:
  • 3 карточки с реквизитами любых организаций
  • 1с получить значение реквизита объекта бсп
  • 3 работа за 3 часа собирают 10 компьютеров
  • 1с получить значения всех реквизитов формы
  • 300 000 от государства на открытие бизнеса