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

Получить значение реквизита справочника

Автор ab30ru, 27 июл 2017, 19:08

0 Пользователей и 1 гость просматривают эту тему.

Здравствуйте. Есть справочник Книги. В нем реквизит ИнвентарныйНомер. Есть документ ВыдачаКниг реквизит Книга ссылка на справочник Книги. Нужно чтобы при выборе книги в переменную НомерКниги записывался инвентарный номер из справочника. Помогите пожалуйста с кодом


Цитата: ab30ru от 27 июл 2017, 19:08Нужно чтобы при выборе книги в переменную НомерКниги записывался инвентарный номер из справочника

Я правильно понял? В форме документа?

&НаКлиенте
Процедура КнигаПриИзменении(Элемент)
    НомерКниги = ПолучитьНомер(Объект.Книга);
КонецПроцедуры

&НаСервере
Функция ПолучитьНомер(Книга)
    Возврат Книга.ИнвентарныйНомер
КонецФункции

Спасибо за Сказать спасибо


Цитата: ab30ru от 27 июл 2017, 19:08
Здравствуйте. Есть справочник Книги. В нем реквизит ИнвентарныйНомер. Есть документ ВыдачаКниг реквизит Книга ссылка на справочник Книги. Нужно чтобы при выборе книги в переменную НомерКниги записывался инвентарный номер из справочника. Помогите пожалуйста с кодом

Если ЗначениеЗаполнено(Объект.ВыдачаКниг) Тогда
    Объект.НомерКниги = Объект.ВыдачаКниг.ИнвентарныйНомер;
Иначе
Объект.НомерКниги = "";
КонецЕсли;

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

Помог, нажми спасибо. Не помог, нажми спасибо :-)
Если у Вас есть проблема, то её уже кто то решил @Yandex, @Google


Все верно, только проверь на

ЗначениеЗаполнено(Объект.Книга), и функцию выполняй

&НаСервереБезКонтекста _))


0 / 0 / 0

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

Сообщений: 3

1

1C 8.x (тонкий)

Получение значения реквизита справочника в документ

29.05.2014, 12:17. Показов 64908. Ответов 22


Добрый день, есть вопрос
Как сделать чтобы реквизит табличной части документа получал данные из реквизита справочника.
Т.е. при изменении «ФИО» в табличной части документа подставлялись значения (ДатаРождения, Должность)из справочника (Сотрудники)

Есть справочник Сотрудники, реквизиты «Должность», «Дата рождения»

Есть документ в нем табличная часть «Налоги» и его реквизиты «ФИО» «Должность» «ДатаРождения»

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

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

платформа 8.2



0



GreenkA

Эксперт 1С

3051 / 1998 / 524

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

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

29.05.2014, 12:34

2

Mujinin, пропишите заполнение этих полей при изменении ФИО. Какая форма? Если управляемая, то значения получать придется на клиенте. Иначе — можно все в одной процедуре.
Пример для управляемой:

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



2



Mujinin

0 / 0 / 0

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

Сообщений: 3

29.05.2014, 12:41

 [ТС]

3

о мой спаситель….почему мне раньше этого никто не мог подсказать….я начал пол года назад и все время обходил это автозаполнение.

делал все тоже самое только «ФИО» в

1C
1
ТекСтрока.Должность = ПолучитьЗначениеРеквизитаНаСервере(ТекСтрока.ФИО,"Должность");

не выставлял



0



Anmut

0 / 0 / 0

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

Сообщений: 12

27.08.2015, 09:09

4

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

1C
1
2
3
4
5
6
7
&НаКлиенте
Процедура ФИОПриИзменении(Элемент)
    \ Что тут надо прописать?
  Объект.Подразделение = ПолучитьЗначениеРеквизитаНаСервере(ТекСтрока.ФИО,"Подразделение");
  Объект.Должность = ПолучитьЗначениеРеквизитаНаСервере(ТекСтрока.ФИО,"Должность");
    
КонецПроцедуры



0



SonicQ

286 / 186 / 18

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

Сообщений: 925

27.08.2015, 10:12

5

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

1C
1
2
3
4
5
6
7
8
9
&НаКлиенте
Процедура ФИОПриИзменении(Элемент)
   ФИОПриИзмененииНаСервере();
КонецПроцедуры
 
&НаСервере
Процедура ФИОПриИзмененииНаСервере()
    Объект.Должность = ТутЧтоХотитеПолучайте_ЭтоСервер;
КонецПроцедуры



1



340 / 315 / 43

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

Сообщений: 1,242

Записей в блоге: 1

27.08.2015, 15:06

6

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

Думаю так будет правильнее

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

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



0



286 / 186 / 18

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

Сообщений: 925

27.08.2015, 17:28

7

1c-k,
чтобы потом получить надпись вида «Данный элемент заблокирован пользователем»
после чего данные не получить и форма просто висит



0



286 / 186 / 18

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

Сообщений: 925

27.08.2015, 17:41

8

1c-k, бесспорно, вариант с объект.Реквизит = на клиенте быстрее….
Но зачастую нужно не просто изменить один объект…

Миниатюры

Получение значения реквизита справочника в документ
 



1



1c-k

340 / 315 / 43

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

Сообщений: 1,242

Записей в блоге: 1

27.08.2015, 17:43

9

SonicQ, это с чего такие выводы?
Например на сервер ссылка слетала и оттуда ссылка пришла — 50байт.
А если перекидку на сервер, сколько слетало данных?

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

Добавлено через 1 минуту

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

Но зачастую нужно не просто изменить один объект…

за код ниже от меня программеры получают нагоняй.



1



286 / 186 / 18

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

Сообщений: 925

27.08.2015, 17:45

10

1c-k, а клиент при этом плачет, что при заполнении одного реквизита все остальные не заполнились автоматом…



1



340 / 315 / 43

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

Сообщений: 1,242

Записей в блоге: 1

27.08.2015, 17:47

11

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

Добавлено через 1 минуту
SonicQ, ах да, в фрагменте кода на картинке там два раза дёргается сервер, вероятно туда обрабно большие объемы данных гонять это нормально.
А соединить в один серверный вызов никак нельзя?)



1



286 / 186 / 18

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

Сообщений: 925

27.08.2015, 17:48

12

1c-k, я специально для примера так сделал



1



340 / 315 / 43

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

Сообщений: 1,242

Записей в блоге: 1

27.08.2015, 17:50

13

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



1



SonicQ

286 / 186 / 18

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

Сообщений: 925

27.08.2015, 17:58

14

1c-k, однако именно

1C
1
2
3
4
5
6
7
8
9
&НаКлиенте
Процедура ФИОПриИзменении(Элемент)
   ФИОПриИзмененииНаСервере();
КонецПроцедуры
 
&НаСервере
Процедура ФИОПриИзмененииНаСервере()
    Объект.Должность = ТутЧтоХотитеПолучайте_ЭтоСервер;
КонецПроцедуры

реализовано в типовых конфигурациях, только там продолжения типа

1C
1
ПродажиСервер.ЗаполнитьБанковскиеСчетаПоДоговору(Объект.Договор, Объект.БанковскийСчетОрганизации, Объект.БанковскийСчетКонтрагента);



1



340 / 315 / 43

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

Сообщений: 1,242

Записей в блоге: 1

27.08.2015, 18:05

15

SonicQ, однако надо давать себе отчёт, почему и что в типовых конфигурациях сделано.
Партионный учёт УТ 10.3 например глючит и тормозит, а ведь изменения, которые надо сделать в двух местах — нагрузку снимает со всего сервера. Так что же, надо делать, как в типовой?

Добавлено через 45 секунд
SonicQ, а то что сделано в типовых, это проблемы типовых.
И к сожалению эти проблемы из-за вот таких вещей, становятся проблемами владельцев при больших объемах БД.



1



286 / 186 / 18

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

Сообщений: 925

27.08.2015, 18:09

16

1c-k, палка двух концов =)



1



340 / 315 / 43

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

Сообщений: 1,242

Записей в блоге: 1

27.08.2015, 18:19

17

SonicQ, нет. Тут надо подходить из разумности вызовов, дёрганья сервера, и т.п.
В данном случае всё банально и просто, как я выше писал и не надо гонять форму на сервер.
А есть случаи когда для расчетов уходит только таблица и возвращается только таблица. Был у меня документ, который именно так и работает. Потому как программеры писали &НаСервере всегда и везде не думая, что в итоге будет. А в документе 12+ табличных частей и около 6 из них под 100к записей имели да еще по 10-12 колонок.
Так, что к решаемой задаче надо подходить зная, как ведет себя платформа в разных контекстах и что происходит с этим.



1



0 / 0 / 0

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

Сообщений: 12

28.08.2015, 11:32

18

Читаю переписку «ассов» и чувствую себя полнейшим дураком в этих вопросах))). Я в програмировании 1с еще, если можно так сказать, новорожденный. Делаю себе индивидуальную конфу «с нуля» и понимаю, если бы вы ее увидели, то сто пудов я бы выслушал кучу слов не входящих в словарь русского языка.)))).
Спс за помощь, сейчас буду пытаться что-нибудь делать дальше, хотя еще не совсем понимаю что там надо дальше прописывать(((



0



1c-k

340 / 315 / 43

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

Сообщений: 1,242

Записей в блоге: 1

28.08.2015, 11:34

19

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

Подскажите, пожалуйста, так правильно будет?

1C
1
2
3
4
5
6
&НаКлиенте
Процедура ФИОПриИзменении(Элемент)
  Объект.Должность = ПолучитьЗначениеРеквизитаНаСервере(Объект.ФИО,"Должность");
  Объект.Подразделение = ПолучитьЗначениеРеквизитаНаСервере(Объект.ФИО,"Подразделение");
  ОбновитьОтображениеДанных();
КонецПроцедуры

Это как вариант. Увидел бы написал как надо.



1



Anmut

0 / 0 / 0

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

Сообщений: 12

28.08.2015, 11:44

20

Спасибо огромное!!! сделал!!!

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
&НаСервереБезКонтекста
Функция ПолучитьЗначениеРеквизитаНаСервере(ИмяОбъекта, ИмяРеквизита)
  Возврат ИмяОбъекта[ИмяРеквизита];
КонецФункции
 
&НаКлиенте
Процедура МатериалыМатериалПриИзменении(Элемент)
    СтрокаТабличнойЧасти=Элементы.Материалы.ТекущиеДанные;
    СтрокаТабличнойЧасти.ЕдиницыИзмерения=ПолучитьЗначениеРеквизитаНаСервере(СтрокаТабличнойЧасти.Материал,"ЕдиницыИзмерения");
КонецПроцедуры
 
&НаКлиенте
Процедура ФИОПриИзменении(Элемент)
    Объект.Должность = ПолучитьЗначениеРеквизитаНаСервере(Объект.ФИО,"Должность");
Объект.Подразделение = ПолучитьЗначениеРеквизитаНаСервере(Объект.ФИО,"Подразделение");
КонецПроцедуры

Добавлено через 2 минуты
Не подскажешь? Сделал конструктором печати форму, все нормально работало. Сейчас решил переделать, кнопка в форме стоит в конфе, а запускаю 1с ее нет в доке..



0



Получение значений реквизита формы справочника

Я
   yalanton

01.09.16 — 09:02

Добрый день . Может кто подскажет . Есть справочник например сотрудники в ЗУП 8.3.  форма управляемая . У этого справочника есть «формаэлемента»  Например на «формеэлемента» есть не основной реквизит формы «датаприема»(тип дата)  Как получить значение реквизита формы справочника для конкретного элемента справочника и как записать в него значение ? Спасибо

  

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

   zak555

1 — 01.09.16 — 09:04

Объект.ДатаПриема =

   lubitelxml

2 — 01.09.16 — 09:04

Объект

   Defender aka LINN

3 — 01.09.16 — 09:47

(0) Посмотреть, откуда форма его заполняет при чтении данных. Вангую, что из какого-то регистра

   yalanton

4 — 01.09.16 — 11:12

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

в модуле формы

&НаСервере

Процедура А4()

    
Справочники.Сотрудники.НайтиПоНаименованию(«Иванов»);

об= спр.ПолучитьОбъект();

об.Датаприема;

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

Ругается  — я так понимаю что «датаприема» это реквизит конкретной формы (ФормаЭлемента) ,а форм у справочника сотрудникимного разных, т.е. вначале наверное надо получить именно «формуэлемента» ?

   lodger

5 — 01.09.16 — 11:14

открой формуэлемента и поищи в модуле формы датаприема.

ищи что-то вида датаприема = получитьдатуприема(четотам) или заполнитьреквизитыформы(этаформа)

   yalanton

6 — 01.09.16 — 11:15

спр= Справочники.Сотрудники.НайтиПоНаименованию(«Цюкало»);

об= спр.ПолучитьОбъект();

ф=об.ПолучитьФорму(«ФормаЭлемента»)  ;

ф.датаприема;

все равно ругается на датаприема

   lodger

7 — 01.09.16 — 11:20

(6) открой формуэлемента ручками в конфигураторе.

   yalanton

8 — 01.09.16 — 11:21

открыл  форму элемента

   lodger

9 — 01.09.16 — 11:22

(8) поищи в модуле формы датаприема

   yalanton

10 — 01.09.16 — 11:22

&НаСервере

Процедура А4()

    
    
спр= Справочники.Сотрудники.НайтиПоНаименованию(«Цюкало»);

об= спр.ПолучитьОбъект();

ф=об.ПолучитьФорму(«ФормаЭлемента»)  ;

дд=ф.РеквизитФормыВЗначение(«датаприема»);

пишет интерактивные операции не доступны

   lubitelxml

11 — 01.09.16 — 11:23

(10) на сервере не доступны

   программистище

12 — 01.09.16 — 11:25

сложно посмотреть модуль и узнать как реквизит заполняется на этой форме

   yalanton

13 — 01.09.16 — 11:25

&НаКлиенте

Процедура ВидЗанятостиПриИзменении(Элемент)

    СотрудникиКлиент.ПроверитьКонфликтыВидаЗанятостиССуществующимиСотрудниками(Сотрудник.Ссылка, Сотрудник.ФизическоеЛицо, ТекущаяОрганизация, Сотрудник.ВидЗанятости, ДатаПриема);

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

поискал дата приема в модуле формы элемента -вот единственное место где есть «датаприема»

   yalanton

14 — 01.09.16 — 11:26

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

   программистище

15 — 01.09.16 — 11:26

Копай При создании, при чтении, при открытии

может через общий модуль заполняется

   lodger

16 — 01.09.16 — 11:26

(13) явно не первое место где он используется.

ищи что-то вида датаприема = получитьдатуприема(четотам) или заполнитьреквизитыформы(этаформа)

(14) когда поймешь, тогда и решение само собой придет.

   программистище

17 — 01.09.16 — 11:28

точку останова

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

   Buster007

18 — 01.09.16 — 11:28

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

   yalanton

19 — 01.09.16 — 11:32

(18) а почему я не могу получить значение реквизита из формы ? я как раз так бы и хотел а не искать каждый раз место и алгоритм его заполнения ?

или 1с так не позволяет ?

   lera01

20 — 01.09.16 — 11:36

(19) Как ты на сервере к форме обратишься? Ты вот свои усы же не в зеркале бреешь!

   Defender aka LINN

21 — 01.09.16 — 11:43

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

   yalanton

22 — 01.09.16 — 11:47

и я не сдамся   :)

   Горогуля

23 — 01.09.16 — 11:48

говорят, скоро 1С выпустит новое революционное решение для мобильных девайсов СГК — система генерации кода. там можно будет по аналогии с СКД просто натыкивать на экране нужные места со словами «вот это хочу. и ещё вот здесь», а код обработки система сгенерирует сама.

   Неверный Параметр И

24 — 01.09.16 — 11:49

(23) Интеграцию с какими платежными системами обещают?

   Горогуля

25 — 01.09.16 — 11:49

(24) какими ещё системами? ты не понял. скоро для программирования не то, что клавиатура, мышь не понадобится

   Альбатрос

26 — 01.09.16 — 11:49

(23) :)

   Альбатрос

27 — 01.09.16 — 11:50

(23) Такая система уже есть, но она работает только во время действия эффекта ЛСД

   Горогуля

28 — 01.09.16 — 11:50

+(25) а мозгов и так ни у кого нет

   Неверный Параметр И

29 — 01.09.16 — 11:51

(25) Чо, даже карточку привязывать не надо будет?

   Неверный Параметр И

30 — 01.09.16 — 11:55

(25) В линуксе заработало USB–устройство для ввода текста при помощи мыслей!

Комментарий:

Ура, товарищи! Наконец–то можно выкинуть клавиасиськи сиськи сиськи сисечки сисищи мягкие теплые сочные сисяндры сисяндрищи сисюльки сиськи сиськи блд палюсьь

   Менталист

31 — 01.09.16 — 11:56

(0)Реквизит формы рождается и живет ровно столько и форма. И если заполняется при открытии, значит есть какой-то источник заполнения(РС например или еще что-то)

   yalanton

32 — 01.09.16 — 12:02

а т.е. я не могу из формы получить реквизит формы ? я могу только посмотреть алгоритм заполнения и получить реквизит по этому алгоритму так чтоли ?

   yalanton

33 — 01.09.16 — 12:03

(31) ?

   Горогуля

34 — 01.09.16 — 12:08

(32) следи внимательно за руками. есть вопрос: Как получить значение реквизита формы справочника для конкретного элемента справочника и как записать в него значение ? в этом вопросе ни разу нет слова «форма», это ты молодец. проходит ничтожное по историческим меркам время, и у автора вопроса появляется слово «форма». автор — приматЮ, автор ращмышляет, эволюционирует. это нормально. но почему он эволюционирует в обратную сторону?

   Горогуля

35 — 01.09.16 — 12:08

мда, с «ни разу нет» я несколько перегнул ;)

   lera01

36 — 01.09.16 — 12:11

(32) Конечно, можешь из формы получить ее реквизит. Вот прям хоть сейчас. Только форму ты на сервере не видишь, но это просто досадное недоразумение. Но ты пытайся, не сдавайся!

   Fish

37 — 01.09.16 — 12:13

(32) Ты лучше спроси себя, куда ты хочешь записать это новое значение? Подсказка — данные не хранятся в форме.

   yalanton

38 — 01.09.16 — 12:13

то что на сервере не вижу форму я понял , но вот как точно получить реквизит формы на клиенте пока до конца не понял

   Горогуля

39 — 01.09.16 — 12:14

ещё раз подсказка: тебе не нужна форма

   Fish

40 — 01.09.16 — 12:15

(38) Посмотреть, из каких данных значение попадает в реквизит формы и взять оттуда. Новое значение записывать туда же. Форма для этого тебе не нужна, от слова совсем.

   yalanton

41 — 01.09.16 — 12:16

(37) сначала хочу хоть получить значения реквизитов формы , а записать хм сам не знаю куда записать если например  у реквизита датаприема -тип дата ? , вот если регистр тип у рекв то наверное просто в этот регистр

   Fish

42 — 01.09.16 — 12:18

(41) Вот когда ты узнаешь, куда записать, то сразу поймёшь откуда брать :)

   yalanton

43 — 01.09.16 — 12:49

(41)у формысписка справ-ка сотрудники есть  основной реквизит «список » в его св-х есть настройка списка там я вижу такой текст запроса

ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ТекущиеКадровыеДанныеСотрудников КАК ТекущиеКадровыеДанные ПО ДанныеДляПодбораСотрудников.ФизическоеЛицо = ТекущиеКадровыеДанные.ФизическоеЛицо И ДанныеДляПодбораСотрудников.Сотрудник = ТекущиеКадровыеДанные.Сотрудник

я так понял что по такому условию инфа попадает в форму справочника т.е. из регистра ТекущиеКадровыеДанныеСотрудников  а в тексте запроса дальше есть ТекущиеКадровыеДанные.ДатаПриема,

сам реквизит формы датаприема это рекв типа «дата»

   yalanton

44 — 01.09.16 — 12:50

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

   Горогуля

45 — 01.09.16 — 13:12

превращение дятла в орла. первые секунды волшебства

  

yalanton

46 — 01.09.16 — 13:19

:) пока я вроде вижу что в реквизите формы  действительно нет значения  

например в справочнике в иодуле элемента формы я пишу код

&НаСервере

Процедура А()

  Сообщить( РеквизитФормыВЗначение(«ГражданствоФизическихЛиц»));

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

ГражданствоФизическихЛиц-это реквизит формы типа регистр

процедура после выполнения сообщить пишет :РегистрСведенийМенеджерЗаписи.ГражданствоФизическихЛиц

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

я только что то не пойму- что для получения значений реквизита формы каждый раз надо искать как этот реквизит заполняется -проще нельзя чтоли ?

Тема: Получение значения реквизита элемента из справочника в документ

  1. 17.05.2019, 09:54


    #1

    MasterLoma вне форума


    Гость форума


    Question Получение значения реквизита элемента из справочника в документ

    Доброго времени суток! У меня возникли некоторые трудности с получением значения реквизита из справочника в документ. Мне нужно, чтобы когда я в табличной части (документа) в реквизите «Номенклатура» выбирал какую-то номенклатуру, то в реквизит «Цена» табличной части, записывалась её цена из справочника. Для того, чтобы получить значение из справочника, как я понял, нужно создать функцию….А вот как прописать в функции то, что она должна возвращать цену какой-то номенклатуры?
    В справочнике «Номенклатура» у меня хранятся книги. Через предопределённые данные я создал группы (Жанры книг) и в каждом из жанров находятся элементы (книги) с информацией об авторе и тд.


  2. 17.05.2019, 10:38


    #2

    Margofs вне форума


    Пришел за помощью


    По умолчанию Re: Получение значения реквизита элемента из справочника в документ

    Какая конфигурация? на какой платформе?


  3. 17.05.2019, 10:54


    #3

    По умолчанию Re: Получение значения реквизита элемента из справочника в документ

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

    Доброго времени суток! У меня возникли некоторые трудности с получением значения реквизита из справочника в документ. Мне нужно, чтобы когда я в табличной части (документа) в реквизите «Номенклатура» выбирал какую-то номенклатуру, то в реквизит «Цена» табличной части, записывалась её цена из справочника. Для того, чтобы получить значение из справочника, как я понял, нужно создать функцию….А вот как прописать в функции то, что она должна возвращать цену какой-то номенклатуры?
    В справочнике «Номенклатура» у меня хранятся книги. Через предопределённые данные я создал группы (Жанры книг) и в каждом из жанров находятся элементы (книги) с информацией об авторе и тд.

    Цена — это реквизит справочника «Номенклатура»?
    Тогда можно обращаться без функции: Цена=Номенклатура.Цена;
    Это должно быть прописано в процедуре «ПриВыбореНоменклатуры», которая назначается колонке «Номенклатура»вашей табличной части


  4. 17.05.2019, 11:07


    #4

    Margofs вне форума


    Пришел за помощью


    По умолчанию Re: Получение значения реквизита элемента из справочника в документ

    на клиенте он заполняет табличную часть….. не обратиться он объектно!


  5. 17.05.2019, 11:10


    #5

    Margofs вне форума


    Пришел за помощью


    По умолчанию Re: Получение значения реквизита элемента из справочника в документ

    &НаКлиенте
    **************
    Для каждого стр из Объект.Товары Цикл /// к примеру, либо получать текущую строку табличной части
    Цена =ВернутьЦену(стр.Номенклат� �ра);
    **************************

    &НаСервере
    Функция ВернутьЦену(Товар)
    Если Не ЗНачениеЗаполнено(Товар) Тогда
    Возврат 0;
    КонецЕсли;

    Возврат Товар.Цена;
    КонецФункции


  6. Пользователь сказал cпасибо:


  7. 17.05.2019, 11:20


    #6

    Margofs вне форума


    Пришел за помощью


    По умолчанию Re: Получение значения реквизита элемента из справочника в документ

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

    &НаКлиенте
    **************
    Для каждого стр из Объект.Товары Цикл /// к примеру, либо получать текущую строку табличной части
    Цена =ВернутьЦену(стр.Номенклат� �ра);
    **************************

    &НаСервере
    Функция ВернутьЦену(Товар)
    Если Не ЗНачениеЗаполнено(Товар) Тогда
    Возврат 0;
    КонецЕсли;

    Возврат Товар.Цена;
    КонецФункции

    часть


  8. 17.05.2019, 12:23


    #7

    По умолчанию Re: Получение значения реквизита элемента из справочника в документ

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

    &НаКлиенте
    **************
    Для каждого стр из Объект.Товары Цикл /// к примеру, либо получать текущую строку табличной части
    Цена =ВернутьЦену(стр.Номенклат� �ра);
    **************************

    &НаСервере
    Функция ВернутьЦену(Товар)
    Если Не ЗНачениеЗаполнено(Товар) Тогда
    Возврат 0;
    КонецЕсли;

    Возврат Товар.Цена;
    КонецФункции

    Можно так:
    &НаКлиенте
    Процедура ТабличнаяЧасть1Номенклату� �аПриИзменении(Элемент)
    ТекущиеДанные = Элементы.ТабличнаяЧасть1.Т� �кущиеДанные;
    УИ=ТекущиеДанные.Номенклат ура.УникальныйИдентификат� �р();
    ТекущиеДанные.Цена=НайтиЦе ну(УИ);
    КонецПроцедуры
    &Насервере
    Функция НайтиЦену(Реквизит)
    ТекН=Справочники.Номенклат ура.ПолучитьСсылку(Реквизи т);
    Возврат ТекН.Цена;

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


  9. Пользователь сказал cпасибо:


  10. 17.05.2019, 14:03


    #8

    MasterLoma вне форума


    Гость форума


    По умолчанию Re: Получение значения реквизита элемента из справочника в документ

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

    Какая конфигурация? на какой платформе?

    1С:Предприятие 8.3, учебная версия (8.3.6.2014)


  11. 17.05.2019, 14:04


    #9

    MasterLoma вне форума


    Гость форума


    По умолчанию Re: Получение значения реквизита элемента из справочника в документ

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

    &НаКлиенте
    **************
    Для каждого стр из Объект.Товары Цикл /// к примеру, либо получать текущую строку табличной части
    Цена =ВернутьЦену(стр.Номенклат� �ра);
    **************************

    &НаСервере
    Функция ВернутьЦену(Товар)
    Если Не ЗНачениеЗаполнено(Товар) Тогда
    Возврат 0;
    КонецЕсли;

    Возврат Товар.Цена;
    КонецФункции

    Спасибо попозже попробую таким образом сделать.


Похожие темы

  1. Ответов: 16

    Последнее сообщение: 24.03.2017, 10:41

  2. Ответов: 0

    Последнее сообщение: 14.01.2014, 12:53

  3. Ответов: 1

    Последнее сообщение: 24.04.2012, 13:36

  4. Ответов: 0

    Последнее сообщение: 28.01.2012, 12:20

  5. Ответов: 4

    Последнее сообщение: 11.11.2011, 08:35

Социальные закладки

Социальные закладки


Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •  
  • BB коды Вкл.
  • Смайлы Вкл.
  • [IMG] код Вкл.
  • [VIDEO] код Вкл.
  • HTML код Выкл.

Правила форума

Имеется справочник «Контрагенты» и документ «ЗаписьНаТестДрайв».
«Контрагенты» имеет реквизиты: ФИО, «Паспортные данные», мобильный телефон.
Как мне при выборе клиента на форме документа «ЗаписьНаТестДрайв» заполнить автоматически поля ФИО, «Паспортные данные», мобильный телефон?
Я смог поставить ссылку на справочник, но как оттуда взять все данные, а не только имя?справочник и форма

задан 2 мая 2017 в 19:41

kot_mapku3's user avatar

kot_mapku3kot_mapku3

1,1751 золотой знак13 серебряных знаков32 бронзовых знака

Двойной щелчок по полю ФИО (то, что выделено сейчас на скриншоте), откроется панель свойств, внизу ищем событие ПриИзменении, нажимаем на увеличительное стекло справа. Откроется модуль формы с заготовкой процедуры. Нам нужно написать в ней код, который заполнит нам нужные поля. Т.к. событие выполняется на клиенте, реквизиты других объектов (в данном случае элемента спр-ка Контрагенты) нам недоступны, поэтому мы должны написать функцию, выполняющуюся на сервере и вызвать её. В итоге будет вот так:

&НаКлиенте
Процедура ФИОПриИзменении(Элемент)

    ЗаполнитьДанныеКонтрагентаНаСервере();

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

&НаСервере
Процедура ЗаполнитьДанныеКонтрагентаНаСервере()

    Объект.СерияПаспорта = Объект.ФИО.СерияПаспорта;
    Объект.НомерПаспорта = Объект.ФИО.НомерПаспорта;
    // и так далее, все нужные поля

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

ответ дан 4 мая 2017 в 12:28

Mikhail Sibirev's user avatar

&НаСервере
Процедура СозданиеИИзменениеЭлементовИГруппСправочникаНаСервере()
 
    /// Как создать новый элемент справочника в 1с 8.3, 8.2
 
    // создадим новый элемент справочника Города
    // с именем Владивосток
    Владивосток = Справочники.Города.СоздатьЭлемент();
    Владивосток.Наименование = "Владивосток";
    Владивосток.Записать();
 
    /// Как создать новую группу справочника в 1с 8.3, 8.2
 
    // создадим новую группу справочника Города
    ГородаУМоря = Справочники.Города.СоздатьГруппу();
    ГородаУМоря.Наименование = "Города у моря";
    ГородаУМоря.Записать();
 
    /// Как перенести элемент справочника в другую группу в 1с 8.3, 8.2
 
    // перенесём созданный Владивосток в группу "Города у моря"
    Владивосток.Родитель = ГородаУМоря.Ссылка;
    Владивосток.Записать();
 
    /// Как внести изменения в элемент справочника по ссылке 
    /// в 1с 8.3, 8.2
 
    // найдём город Калькутта
    КалькуттаСсылка = Справочники.Города.НайтиПоНаименованию("Калькутта");
    Если Не КалькуттаСсылка.Пустая() Тогда
        // изменим и запишем численность жителей в городе
        Калькутта = КалькуттаСсылка.ПолучитьОбъект();
        Калькутта.Численность = 1000000;
        Калькутта.Записать();
    КонецЕсли;
 
    /// Как получить и проверить пустую ссылку типа справочник в 1с 8.3, 8.2
 
    ПустаяСсылка = Справочники.Города.ПустаяСсылка();
    Если ПустаяСсылка.Пустая() Тогда
        Сообщить("Ссылка действительно пустая.");
    КонецЕсли;
 
    /// Как узнать принадлежность элемента справочника группе
    /// с учетом уровней иерархии в 1с 8.3, 8.2
 
    ПермьСсылка = Справочники.Города.НайтиПоНаименованию("Пермь");
    РоссияСсылка = Справочники.Города.НайтиПоНаименованию("Россия");
 
    // проверим принадлежит ли город Пермь группе Россия
 
    Если ПермьСсылка.ПринадлежитЭлементу(РоссияСсылка) Тогда
        Сообщить("Элемент Пермь находится в группе Россия.");
    КонецЕсли;
 
    /// Как скопировать существующий элемент справочника в 1с 8.3, 8.2
 
    // скопируем элемент Пермь
 
    КопияПерми = ПермьСсылка.Скопировать();
    КопияПерми.Наименование = КопияПерми.Наименование + " КОПИЯ";
    КопияПерми.УстановитьНовыйКод();
    КопияПерми.Записать();
 
    /// Как выяснить уровень вложенности элемента справочника 
    /// в 1с 8.3, 8.2
 
    Сообщить(КопияПерми.Уровень()); // 1
 
    /// Как заблокировать элемент справочника перед изменениями 
    /// в 1с 8.3, 8.2
 
    // выполним блокировку элемента справочника
    // от изменения другими режимами или пользователями
 
    Пермь = ПермьСсылка.ПолучитьОбъект();
    Если Не Пермь.Заблокирован() Тогда
        Пермь.Заблокировать();
        // тут идёт какой-то долгий алгоритм
        // в результате которого мы меняем
        // заблокированный элемент
        Пермь.Численность = 5000;
        Пермь.Записать();
        // и только потом освобождаем его
        // для других режимов и пользователей
        Пермь.Разблокировать();
    КонецЕсли;
 
    /// Как заполнить новый элемент справочника на основании 
    /// в 1с 8.3, 8.2
 
    // в модуле справочника Города я определил процедуру
    // ОбработкаЗаполнения, которая обрабатывает ситуации
    // когда мы заполняем один элемент на основании
    // данных другого (см. в базе для скачивания)
 
    Хабаровск = Справочники.Города.СоздатьЭлемент();
    Хабаровск.Заполнить(
        Справочники.Города.НайтиПоНаименованию("Рио-де-Жанейро")
    );
    Хабаровск.Наименование = "Хабаровск";
    Хабаровск.Записать();
 
    /// Как пометить на удаление элемент справочника в 1с 8.3, 8.2
 
    // пометим на удаление только что созданный Хабаровск
    Хабаровск.УстановитьПометкуУдаления(
        Истина, // пометка удаления
        Ложь // включая подчиненные (если речь о группе справочника)
    );
    // метод Записать вызывать не нужно
 
КонецПроцедуры
 
&НаСервереБезКонтекста
Функция ПолучитьКлиентаПоИмени(Имя)
    Возврат Справочники.Клиенты.НайтиПоНаименованию(Имя);
КонецФункции
 
/// Как открыть форму существующего элемента справочника 
/// по ссылке в 1с 8.3, 8.2
 
&НаКлиенте
Процедура КакОткрытьФормуСуществующегоЭлементаСправочника(Команда)
 
    СсылкаНаЭлемент = ПолучитьКлиентаПоИмени("Андрей");
 
    ПараметрыФормы = Новый Структура("Ключ", СсылкаНаЭлемент);
 
    ОткрытьФорму(
        "Справочник.Клиенты.ФормаОбъекта", // имя формы
        ПараметрыФормы // параметры для формы
    );
 
КонецПроцедуры
 
/// Как открыть форму существующей группы справочника 
/// по ссылке в 1с 8.3, 8.2
 
&НаКлиенте
Процедура КакОткрытьФормуСуществующейГруппыСправочника(Команда)
 
    СсылкаНаГруппу = ПолучитьКлиентаПоИмени("Vip");
 
    ПараметрыФормы = Новый Структура("Ключ", СсылкаНаГруппу);
 
    ОткрытьФорму(
        "Справочник.Клиенты.ФормаГруппы", // имя формы
        ПараметрыФормы // параметры для формы
    );
 
КонецПроцедуры
 
/// Как открыть форму выбора элемента справочника и
/// отследить её закрытие в 1с 8.3, 8.2
 
&НаКлиенте
Процедура КакОткрытьФормуВыбораЭлементаСправочника(Команда)
 
    ОповещениеОЗакрытии = Новый ОписаниеОповещения("ПослеВыбораЭлемента",
        ЭтотОбъект);
 
    ОткрытьФорму(
        "Справочник.Клиенты.ФормаВыбора",,,,,,ОповещениеОЗакрытии        
    );
 
КонецПроцедуры
 
&НаКлиенте
Процедура ПослеВыбораЭлемента(Результат, Параметры) Экспорт
 
    Если Результат <> Неопределено Тогда
        Сообщить("Был выбран элемент " + Результат);
    КонецЕсли;	
 
КонецПроцедуры
 
/// Как открыть форму выбора группы справочника и
/// отследить её закрытие в 1с 8.3, 8.2
 
&НаКлиенте
Процедура КакОткрытьФормуВыбораГруппыСправочника(Команда)
 
    ОповещениеОЗакрытии = Новый ОписаниеОповещения("ПослеВыбораГруппы",
        ЭтотОбъект);
 
    ОткрытьФорму(
        "Справочник.Клиенты.ФормаВыбораГруппы",,,,,,ОповещениеОЗакрытии        
    );
 
КонецПроцедуры
 
&НаКлиенте
Процедура ПослеВыбораГруппы(Результат, Параметры) Экспорт
 
    Если Результат <> Неопределено Тогда
        Сообщить("Была выбрана группа " + Результат);
    КонецЕсли;	
 
КонецПроцедуры
 
/// Как открыть форму списка справочника и
/// установить отбор по реквизиту в 1с 8.3, 8.2
 
&НаКлиенте
Процедура КакОткрытьФормаСпискаСправочникаСОтбором(Команда)
 
    // откроем список клиентов, оставив
    // только мужчин
 
    ПараметрыОтбора = Новый Структура;
    ПараметрыОтбора.Вставить("Пол", ПолучитьПеречислениеМужской());
 
    ПараметрыФормы = Новый Структура;
    ПараметрыФормы.Вставить("Отбор", ПараметрыОтбора);
 
    ОткрытьФорму(
        "Справочник.Клиенты.ФормаСписка",
        ПараметрыФормы
    );
 
КонецПроцедуры
 
&НаСервереБезКонтекста
Функция ПолучитьПеречислениеМужской()
    Возврат Перечисления.Пол.Мужской;
КонецФункции
 
/// Как открыть форму списка справочника с нужным отображением
/// в 1с 8.3, 8.2
 
&НаКлиенте
Процедура КакОткрытьФормуСпискаСправочникаСНужнымОтображением(Команда)
 
    // откроем список клиентов с отображением "Список"
 
    ФормаСписка = ПолучитьФорму("Справочник.Клиенты.ФормаСписка");    
    ФормаСписка.Открыть();
    ФормаСписка.Элементы.Список.Отображение = ОтображениеТаблицы.Список;
 
КонецПроцедуры
 
/// Как открыть форму только что созданного, но ещё
/// не записанного элемента справочника в 1с 8.3, 8.2
 
&НаКлиенте
Процедура КакОткрытьФормуНовогоНеЗаписанногоСправочника(Команда)
 
    // получаем форму нового справочника
    ФормаНовогоСправочника = ПолучитьФорму(
        "Справочник.Еда.ФормаОбъекта",,, Истина); 
 
    // делаем копию её данных (так как напрямую их менять
    // нельзя)
    КопияДанныхФормы = ФормаНовогоСправочника.Объект;
 
    // заполняем эти данные на сервере
    ЗаполнитьДанныеФормыНаСервере(КопияДанныхФормы);
 
    // копируем заполненные данные в исходную форму
    КопироватьДанныеФормы(КопияДанныхФормы,
        ФормаНовогоСправочника.Объект);
 
    // показываем форму нового заполненного
    // элемента справочника пользователю
    ФормаНовогоСправочника.Открыть();
 
КонецПроцедуры
 
&НаСервере
Процедура ЗаполнитьДанныеФормыНаСервере(ДанныеФормы)
 
    // преобразуем данные формы в документ
    Еда = ДанныеФормыВЗначение(ДанныеФормы,
        Тип("СправочникОбъект.Еда")); 
 
    Еда.Наименование = "Груша";
    Еда.Калорийность = 500;
 
    // преобразуем документа обратно в данные формы
    ЗначениеВДанныеФормы(Еда, ДанныеФормы);
 
КонецПроцедуры
 
/// Скачать и выполнить эти примеры на компьютере
  • Как создать элемент (группу) справочника?
  • Как найти элемент справочника?
  • Как удалить элемент справочника?
  • Как перебрать элементы справочника?
  • Как выбрать все элементы из определенной группы?
  • Как перебрать элементы подчиненного справочника с помощью запроса?
  • Как перебрать элементы подчиненного справочника с помощью выборки справочника?
  • Как открыть форму списка (элемента) справочника?
  • Как добавить запись в табличную часть элемента справочника?
  • Как удалить строки из табличной части справочника?
  • Как перебрать строки табличной части справочника?
  • Как создать элемент в нужной группе?
  • Как узнать, есть ли у текущего элемента подчиненные?
  • Как узнать количество подчиненных элементов у выбранного элемента справочника?
  • Как узнать количество подчиненных элементов у выбранного элемента справочника, если подчиненных справочников нексолько?
  • Как получить всех родителей выбранного элемента справочника?
  • Как получить запросом «полный» код элементов справочника, если тип кода — Строка?
  • Как получить все элементы справочника, содержащие в наименовании определенную подстроку, со всей иерархией, в которую они входят?
  • Как найти все элементы справочника, в которых не заполнен строковый реквизит?
  • Как перенести все элементы справочника «Контрагенты» из одной группы в другую?
  • Как организовать программный выбор элемента справочника?
  • Как сохранить фотографию сотрудника в справочнике «Сотрудники»?

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

НовыйЭлемент = Справочники.ДокументыУдостоверяющиеЛичность.СоздатьЭлемент();
НовыйЭлемент.Наименование = "военный билет"; 
// Установить другие реквизиты.  
// .....
НовыйЭлемент.Записать(); 

НовыйЭлемент = Справочники.Банки.СоздатьЭлемент(); 
// Получить ссылку на группу, в которой будет находиться новый элемент
Родитель = Справочники.Банки.НайтиПоКоду("000000001"); 
НовыйЭлемент.Наименование = "АКБ"; 
НовыйЭлемент.Код = "000000011"; 
НовыйЭлемент.Родитель = Родитель; 
// Установить другие реквизиты 
// .....
НовыйЭлемент.Записать(); 

НоваяГруппа = Справочники.Номенклатура.СоздатьГруппу(); 
// Получить ссылку на группу, в которой должна находиться создаваемая группа
Родитель = Справочники.Номенклатура.НайтиПоНаименованию("Обувь", Истина); 
НоваяГруппа.Наименование = "Модельная обувь"; 
НоваяГруппа.Родитель = Родитель; 
// Установить другие реквизиты  
// .....
НоваяГруппа.Записать(); 

// Создать новый элемент в корне справочника
НовыйЭлемент = Справочники.Подразделения.СоздатьЭлемент(); 
НовыйЭлемент.Наименование = "IT отдел";  
НовыйЭлемент.Записать(); 

// Получить ссылку на родителя для добавляемых элементов
Родитель = НовыйЭлемент.Ссылка; 
// Создать дочерний элемент. 
НовыйЭлемент = Справочники.Подразделения.СоздатьЭлемент(); 
НовыйЭлемент.Наименование = "Группа разработки"; 
НовыйЭлемент.Родитель = Родитель;  
НовыйЭлемент.Записать();

Как найти элемент справочника?

// Поиск по коду
РезультатПоиска = Справочники.Номенклатура.НайтиПоКоду("00030"); 
Если РезультатПоиска.Пустая() Тогда 
    // Выполнить действия, предусмотренные в случае, когда элемент не найден.  
КонецЕсли; 

// Поиск по наименованию
РезультатПоиска = Справочники.Номенклатура.НайтиПоНаименованию("Кроссовки"); 

// Поиск по реквизиту
РезультатПоиска = Справочники.Номенклатура.НайтиПоРеквизиту("Артикул", "К-120002");

Как удалить элемент справочника?

// Найти ссылки на удаляемый элемент. 
МассивСсылок = Новый Массив; 
МассивСсылок.Добавить(СсылкаНаУдаляемыйЭлемент); 
НайденныеСсылки = НайтиПоСсылкам(МассивСсылок); 

Если НайденныеСсылки.Количество() > 0 Тогда 
    Сообщить("Нельзя удалять элемент, на него имеются ссылки"); 
Иначе 
    УдаляемыйЭлемент = СсылкаНаУдаляемыйЭлемент.ПолучитьОбъект(); 
    УдаляемыйЭлемент.Удалить(); 
КонецЕсли; 

УдаляемыйЭлемент.УстановитьПометкуУдаления(Истина);

Как перебрать элементы справочника?

Выборка = Справочники.Номенклатура.ВыбратьИерархически(); 
Пока Выборка.Следующий() Цикл 
    Наименование = Выборка.Наименование; 
    // Обращение к другим данным справочника
    // .....
КонецЦикла; 

Запрос = Новый Запрос(
    "ВЫБРАТЬ 
    |    Ссылка, 
    |    Наименование 
    |ИЗ 
    |    Справочник.Номенклатура 
    |АВТОУПОРЯДОЧИВАНИЕ"
); 
Результат = Запрос.Выполнить().Выбрать(); 
Пока Результат.Следующий() Цикл 
    Наименование = Результат.Наименование;  
КонецЦикла;

Как выбрать все элементы из определенной группы?

Выборка = Справочники.Номенклатура.Выбрать(ПолеВводаРодитель); 
Пока Выборка.Следующий() Цикл 
    Наименование = Выборка.Наименование;
КонецЦикла; 

Запрос = Новый Запрос(
    "ВЫБРАТЬ 
    |    Ссылка, 
    |    Наименование 
    |ИЗ 
    |    Справочник.Номенклатура 
    |ГДЕ 
    |    Родитель = &Родитель 
    |АВТОУПОРЯДОЧИВАНИЕ"
); 
Запрос.УстановитьПараметр("Родитель", ПолеВводаРодитель); 
Результат = Запрос.Выполнить().Выбрать(); 
Пока Результат.Следующий() Цикл 
    Наименование = Результат.Наименование;  
КонецЦикла; 

Выборка=Справочники.Номенклатура.ВыбратьИерархически(ПолеВводаРодитель); 
Пока Выборка.Следующий() Цикл 
    Наименование = Выборка.Наименование;  
КонецЦикла; 

Запрос = Новый Запрос(
    "ВЫБРАТЬ 
    |    Ссылка, 
    |    Наименование 
    |ИЗ 
    |    Справочник.Номенклатура 
    |ГДЕ 
    |    Родитель В ИЕРАРХИИ(&Родитель) 
    |АВТОУПОРЯДОЧИВАНИЕ"
); 
Запрос.УстановитьПараметр("Родитель", ПолеВводаРодитель); 
Результат = Запрос.Выполнить().Выбрать(); 
Пока Результат.Следующий() Цикл 
    Наименование = Результат.Наименование;  
КонецЦикла;

Как перебрать элементы подчиненного справочника с помощью запроса?

Процедура ПереборПодчиненыхЭлементов(Контрагент) 
    Запрос = Новый Запрос(); 
    Запрос.Текст =
    "ВЫБРАТЬ 
    |    КонтактныеЛица.Ссылка 
    |ИЗ 
    |    Справочник.КонтактныеЛица КАК КонтактныеЛица 
    |ГДЕ 
    |    КонтактныеЛица.Владелец = &Владелец"; 
    Запрос.УстановитьПараметр("Владелец", Контрагент); 
    Результат = Запрос.Выполнить(); 
    Выборка = Результат.Выбрать(); 
    Пока Выборка.Следующий() Цикл 
        ОчереднойПодчиненый = Выборка.Ссылка; 
    КонецЦикла; 
КонецПроцедуры

Как перебрать элементы подчиненного справочника с помощью выборки справочника?

Процедура ПереборПодчиненыхЭлементов(Контрагент) 
    // Получить выборку по указанному контрагенту
    Выборка = Справочники.КонтактныеЛица.Выбрать( , Контрагент); 
    Пока Выборка.Следующий() Цикл 
        ОчереднойПодчиненый = Выборка.Ссылка; 
    КонецЦикла; 
КонецПроцедуры

Как открыть форму списка (элемента) справочника?

Форма = Справочники.Номенклатура.ПолучитьФормуСписка(); 
Форма.Открыть();

Элемент = Справочники.Номенклатура.НайтиПоКоду("00070"); 
Форма = Элемент.ПолучитьФорму(); 
Форма.Открыть();

Как добавить запись в табличную часть элемента справочника?

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

Как удалить строки из табличной части справочника?

ЭлементСправочника = Справочники.Контрагенты.НайтиПоКоду("Ю0006"); 
ОбъектСправочника = ЭлементСправочника.ПолучитьОбъект(); 
ОбъектСправочника.ВидыДеятельности.Очистить(); 
ОбъектСправочника.Записать(); 

ОбъектСправочника = ВыбранныйЭлемент.ПолучитьОбъект(); 

// Создать структуру для отбора удаляемых строк
СтруктураОтбора = Новый Структура("ВидДеятельности", ВыбранныйВидДеятельности); 

// Получить массив удаляемых строк
ПодходящиеСтроки = ОбъектСправочника.ВидыДеятельности.НайтиСтроки(СтруктураОтбора); 

// Удалить строки
Для Каждого ОчереднаяСтрока Из ПодходящиеСтроки Цикл 
    ОбъектСправочника.ВидыДеятельности.Удалить(ОчереднаяСтрока); 
КонецЦикла; 

ОбъектСправочника.Записать();

Как перебрать строки табличной части справочника?

ЭлементСправочника = Справочники.Контрагенты.НайтиПоКоду("Ю0006"); 
Для Каждого ТекущаяСтрока Из ЭлементСправочника.ВидыДеятельности Цикл 
    Сообщить(ТекущаяСтрока.ВидДеятельности); 
КонецЦикла;

Как создать элемент в нужной группе?

КодГруппы = "330100"; 
ПоискПоПолномуКоду = Ложь; // значение по умолчанию 
Группа = Справочники.Номенклатура.НайтиПоКоду(КодГруппы, ПоискПоПолномуКоду); 

Если Группа.Пустая() Тогда 
    Группа = Справочники.Номенклатура.СоздатьГруппу(); 
    Группа.Код = КодГруппы; 
    Группа.Наименование = "Загруженные"; 
    Группа.Записать(); 
ИначеЕсли НЕ Группа.ЭтоГруппа Тогда 
    Сообщить("Найден элемент справочника с указанным кодом!"); 
    // Предусмотреть прерывание алгоритма...
КонецЕсли; 

Спр = Справочники.Номенклатура.СоздатьЭлемент(); 
Спр.Наименование = "Программно созданный"; 
// Реквизиты заполняются в соответствии с задачей
// .....
Спр.Родитель = Группа.Ссылка; 
Спр.Записать(); 

Группа = Справочники.Номенклатура.Загруженные; 

КодЭлемента = "330100"; 
ПоискПоПолномуКоду = Ложь; // Значение по умолчанию 
Родитель = Справочники.Номенклатура.НайтиПоКоду(КодЭлемента, ПоискПоПолномуКоду); 

Если Родитель.Пустая() Тогда 
Родитель = Справочники.Номенклатура.СоздатьЭлемент(); 

Родитель.Код = КодЭлемента; 
Родитель.Наименование = "Загруженные"; 

Родитель.Записать(); 
КонецЕсли; 

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

Как узнать, есть ли у текущего элемента подчиненные?

Выборка = Справочники.Номенклатура.Выбрать( , Владелец); 
Если Выборка.Следующий() = Истина Тогда 
    // Есть подчиненные элементы.
КонецЕсли;

Запрос = Новый Запрос(); 
Запрос.Текст =
    "ВЫБРАТЬ ПЕРВЫЕ 1 
    |    ЕдиницыИзмерения.Ссылка 
    |ИЗ 
    |    Справочник.ЕдиницыИзмерения КАК ЕдиницыИзмерения 
    |ГДЕ 
    |    ЕдиницыИзмерения.Владелец = &Владелец"; 
Запрос.УстановитьПараметр("Владелец", Владелец); 
Если НЕ Запрос.Выполнить().Пустой() Тогда 
    // Есть подчиненные элементы!
КонецЕсли;

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

Выборка = Справочники.ЕдиницыИзмерения.Выбрать( , Владелец); 
КоличествоЭлементов = 0; 
Пока Выборка.Следующий() Цикл 
    КоличествоЭлементов = КоличествоЭлементов + 1; 
КонецЦикла; 

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

Если Выборка.Следующий() Тогда 
    КоличествоЗаписей = Выборка.КоличествоЗаписей; 
КонецЕсли;

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

ВЫБРАТЬ
    СУММА(КоличествоПодчиненных) КАК КоличествоПодчиненныхЭлементов 
ИЗ 
    (ВЫБРАТЬ 
        КОЛИЧЕСТВО(*) КАК КоличествоПодчиненных 
    ИЗ 
        Справочник.ЕдиницыИзмерения КАК ЕдиницыИзмерения 
    ГДЕ
        ЕдиницыИзмерения.Владелец = &Владелец 

    ОБЪЕДИНИТЬ ВСЕ 

    ВЫБРАТЬ 
        КОЛИЧЕСТВО(*) 
    ИЗ 
        Справочник.СерииНоменклатуры КАК СерииНоменклатуры 
    ГДЕ
        СерииНоменклатуры.Владелец = &Владелец
    ) КАК ВложенныйЗапрос

Как получить всех родителей выбранного элемента справочника?

МассивРодителей = Новый Массив; 
Родитель = СсылкаНаЭлемент.Родитель; 

Пока НЕ Родитель.Пустая() Цикл
    МассивРодителей.Добавить(Родитель);
    Родитель = Родитель.Родитель; 
КонецЦикла; 

Для Каждого ТекущийРодитель Из МассивРодителей Цикл
    // Работа с текущим родителем
КонецЦикла;
ВЫБРАТЬ 
    Номенклатура.Ссылка КАК Ссылка 
ИЗ 
    Справочник.Номенклатура КАК Номенклатура 
ГДЕ 
    Номенклатура.Ссылка = &Ссылка 
ИТОГИ ПО 
    Ссылка ТОЛЬКО ИЕРАРХИЯ 
ТекущийЭлементНоменклатуры = ЭлементНоменклатура; 

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

Пока Истина Цикл 
    Запрос.УстановитьПараметр("ТекущийЭлементНоменклатуры", ТекущийЭлементНоменклатуры); 
    Результат = Запрос.Выполнить(); 
    Если Результат.Пустой() Тогда 
        Прервать; 
    КонецЕсли; 
    Выборка = Результат.Выбрать(); 
    Выборка.Следующий(); 

    Для НомерКолонки = 0 По Результат.Колонки.Количество() - 1 Цикл 
        ТекущийЭлементНоменклатуры = Выборка[НомерКолонки]; 
        Если ТекущийЭлементНоменклатуры = Справочники.Номенклатура.ПустаяСсылка() Тогда 
            Прервать; 
        Иначе 
            Сообщить(ТекущийЭлементНоменклатуры); 
        КонецЕсли; 
    КонецЦикла; 

    Если ТекущийЭлементНоменклатуры = Справочники.Номенклатура.ПустаяСсылка() Тогда 
        Прервать;
    КонецЕсли; 
КонецЦикла;

Как получить запросом «полный» код элементов справочника, если тип кода — Строка?

ВЫБРАТЬ 
    Контрагенты.Ссылка, 
    ВЫБОР 
        КОГДА (Контрагенты.Родитель.Код ЕСТЬ NULL ) ТОГДА Контрагенты.Код 
        КОГДА (Контрагенты.Родитель.Родитель.Код ЕСТЬ NULL ) ТОГДА 
            Контрагенты.Родитель.Код + "/" + Контрагенты.Код 
        ИНАЧЕ Контрагенты.Родитель.Родитель.Код + "/" + Контрагенты.Родитель.Код + 
            "/" + Контрагенты.Код 
    КОНЕЦ КАК ПолныйКод 
ИЗ 
    Справочник.Контрагенты КАК Контрагенты

Как получить все элементы справочника, содержащие в наименовании определенную подстроку, со всей иерархией, в которую они входят?

Запрос = Новый Запрос(
    "ВЫБРАТЬ 
    |    Контрагенты.Ссылка КАК Ссылка 
    |ИЗ 
    |    Справочник.Контрагенты КАК Контрагенты 
    |ГДЕ 
    |    (Контрагенты.Наименование ПОДОБНО &ЧастьНаименования) И (НЕ Контрагенты.ЭтоГруппа) 
    |ИТОГИ ПО 
    |    Ссылка ТОЛЬКО ИЕРАРХИЯ"
); 
Запрос.УстановитьПараметр("ЧастьНаименования", "%" + ПолеВводаПодстрока + "%");

Как найти все элементы справочника, в которых не заполнен строковый реквизит?

ВЫБРАТЬ 
    ФизическиеЛица.Ссылка 
ИЗ 
    Справочник.ФизическиеЛица КАК ФизическиеЛица 
ГДЕ 
    (ФизическиеЛица.ИНН = "") 

ВЫБРАТЬ 
    ФизическиеЛица.Ссылка 
ИЗ 
    Справочник.ФизическиеЛица КАК ФизическиеЛица 
ГДЕ 
    (ФизическиеЛица.СтраховойНомерПФР = "") ИЛИ (ФизическиеЛица.СтраховойНомерПФР = " - -")

Как перенести все элементы справочника «Контрагенты» из одной группы в другую?

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

Выборка = Результат.Выбрать(); 
Пока Выборка.Следующий() Цикл 
    Контрагент = Выборка.Ссылка.ПолучитьОбъект(); 
    Контрагент.Родитель = НовыйРодитель; 
    Контрагент.Записать(); 
КонецЦикла;

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

// Получить форму выбора справочника как подчиненную форме документа 
ФормаВыбора = Справочники.Номенклатура.ПолучитьФормуВыбора( , ЭтаФорма); 

// Открыть полученную форму 
ФормаВыбора.Открыть(); 

Процедура ОбработкаВыбора(ЗначениеВыбора, Источник) 
    ПолученноеЗначение = ЗначениеВыбора; 
    // Дальнейшая обработка значения...
КонецПроцедуры 

ФормаВыбора = Справочники.Номенклатура.ПолучитьФормуВыбора( , ЭтаФорма); 
Выбрано = ФормаВыбора.ОткрытьМодально(); 

Процедура ПолеВводаНачалоВыбора(Элемент, СтандартнаяОбработка) 
    // Запретить стандартную обработку. 
    СтандартнаяОбработка = Ложь; 
    // Получить форму выбора справочника как подчиненную полю ввода
    ФормаВыбора = Справочники.Номенклатура.ПолучитьФормуВыбора( , Элемент); 
    // Открыть полученную форму 
    ФормаВыбора.Открыть(); 
КонецПроцедуры 

Процедура ПолеВводаОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) 
    // Отключить стандартную обработку (при необходимости)
    СтандартнаяОбработка = Ложь; 
    ПолученноеЗначение = ВыбранноеЗначение; 
    // Дальнейшая обработка значения...
КонецПроцедуры

Как сохранить фотографию сотрудника в справочнике «Сотрудники»?

Процедура ЗагрузитьФотографию(Элемент)
    Режим = РежимДиалогаВыбораФайла.Открытие;
    ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(Режим);
    ДиалогОткрытияФайла.ПолноеИмяФайла = "";
    Фильтр = "Текст (*,*)|*.*";
    ДиалогОткрытияФайла.Фильтр = Фильтр;
    ДиалогОткрытияФайла.МножественныйВыбор = Ложь;
    ДиалогОткрытияФайла.Заголовок = "Выберите картинку";
    Если ДиалогОткрытияФайла.Выбрать() Тогда 
        ВыбраннаяКартинка = Новый Картинка(ДиалогОткрытияФайла.ПолноеИмяФайла);
        ЭлементХранилища = Новый ХранилищеЗначения(ВыбраннаяКартинка);
        Фотография = ЭлементХранилища;
    КонецЕсли;
КонецПроцедуры

ВыбФайл = Новый ДвоичныеДанные(ДиалогОткрытияФайла.ПолноеИмяФайла);
элХранилища = Новый ХранилищеЗначения(ВыбФайл);
Фотография = элХранилища;

Понравилась статья? Поделить с друзьями:
  • Как получить денег на бизнес от государства
  • Как получить карту в бизнес зал в аэропорту
  • Как получить реквизит документа в его форме
  • Как получить реквизиты банка россельхозбанк
  • Как получить реквизиты банка через терминал