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

Помогите с запросом… Доп реквизиты Номенклатуры

Я
   m1_1976

29.06.21 — 13:11

Всем добрый день.

Подскажите в тупике.

1С Розница.

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

У номенклатуры 8 доп реквизитов. (Важно что их конечное число).

Хочу найти запросом все товары у которых 7 известных мне конкретных реквизитов совпадают. (допустим мне известен один товар — из него эти 7 доп.реквизитов беру).

Все доп.реквизиты  обязательны к заполнению…

  

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

   m1_1976

1 — 29.06.21 — 13:14

Верно понимаю что должно быть 7 уровней вложенных запросов.

Первым нахожу все товары у которых совпадает Доп.свойство 1

Второым нахожу все товары среди результатов 1 запроса у которых совпадает Доп.свойство 2

и т.д.

????

   m1_1976

2 — 29.06.21 — 13:14

Че-то мне кажется какой-то огород горожу…

   RomanYS

3 — 29.06.21 — 13:17

соединить по равенству свойств, а потом сгруппировать по ссылке. <!>Имеющие<!> 7 совпадений — искомые элементы

   H A D G E H O G s

4 — 29.06.21 — 13:18

«ВЫБРАТЬ

|    НоменклатураДополнительныеРеквизиты.Ссылка КАК Ссылка,

|    МАКСИМУМ(ВЫБОР

|            КОГДА НоменклатураДополнительныеРеквизиты.Свойство = &Реквизит1

|                ТОГДА НоменклатураДополнительныеРеквизиты.Значение

|        КОНЕЦ) КАК Реквизит1,

|    МАКСИМУМ(ВЫБОР

|            КОГДА НоменклатураДополнительныеРеквизиты.Свойство = &Реквизит2

|                ТОГДА НоменклатураДополнительныеРеквизиты.Значение

|        КОНЕЦ) КАК Реквизит2

|ПОМЕСТИТЬ Реквизиты

|ИЗ

|    Справочник.Номенклатура.ДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизиты

|

|СГРУППИРОВАТЬ ПО

|    НоменклатураДополнительныеРеквизиты.Ссылка

|;

|

|////////////////////////////////////////////////////////////////////////////////

|ВЫБРАТЬ РАЗЛИЧНЫЕ

|    Реквизиты.Ссылка КАК Ссылка

|ИЗ

|    Реквизиты КАК Реквизиты

|        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Реквизиты КАК Реквизиты1

|        ПО Реквизиты.Реквизит1 = Реквизиты1.Реквизит1

|            И Реквизиты.Реквизит2 = Реквизиты1.Реквизит2″

   m1_1976

5 — 29.06.21 — 13:18

так решил…

ВЫБРАТЬ

    ВложенныйЗапрос.Ссылка КАК Ссылка,

    СУММА(ВложенныйЗапрос.Поле1) КАК Поле1

ИЗ

    (ВЫБРАТЬ

        НоменклатураДополнительныеРеквизиты.Ссылка КАК Ссылка,

        1 КАК Поле1

    ИЗ

        Справочник.Номенклатура.ДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизиты

    ГДЕ

        НоменклатураДополнительныеРеквизиты.Значение = &ЗначениеТовар

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

    
    ВЫБРАТЬ

        НоменклатураДополнительныеРеквизиты.Ссылка,

        1

    ИЗ

        Справочник.Номенклатура.ДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизиты

    ГДЕ

        НоменклатураДополнительныеРеквизиты.Значение = &ЗначениеБренд

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

    
    ВЫБРАТЬ

        НоменклатураДополнительныеРеквизиты.Ссылка,

        1

    ИЗ

        Справочник.Номенклатура.ДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизиты

    ГДЕ

        НоменклатураДополнительныеРеквизиты.Значение = &ЗначениеБренд

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

    
    ВЫБРАТЬ

        НоменклатураДополнительныеРеквизиты.Ссылка,

        1

    ИЗ

        Справочник.Номенклатура.ДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизиты

    ГДЕ

        НоменклатураДополнительныеРеквизиты.Значение = &ЗначениеСостав

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

    
    ВЫБРАТЬ

        НоменклатураДополнительныеРеквизиты.Ссылка,

        1

    ИЗ

        Справочник.Номенклатура.ДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизиты

    ГДЕ

        НоменклатураДополнительныеРеквизиты.Значение = &ЗначениеЦвет

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

    
    ВЫБРАТЬ

        НоменклатураДополнительныеРеквизиты.Ссылка,

        1

    ИЗ

        Справочник.Номенклатура.ДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизиты

    ГДЕ

        НоменклатураДополнительныеРеквизиты.Значение = &ЗначениеСостав

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

    
    ВЫБРАТЬ

        НоменклатураДополнительныеРеквизиты.Ссылка,

        1

    ИЗ

        Справочник.Номенклатура.ДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизиты

    ГДЕ

        НоменклатураДополнительныеРеквизиты.Значение = &ЗначениеАртикул) КАК ВложенныйЗапрос

СГРУППИРОВАТЬ ПО

    ВложенныйЗапрос.Ссылка

УПОРЯДОЧИТЬ ПО

    Поле1 УБЫВ

   m1_1976

6 — 29.06.21 — 13:19

Добавил доп поле = 1 в каждом.

Потом выбираю только те у которых Поле1 = 8

   RomanYS

7 — 29.06.21 — 13:26

(4) с одной стороны прикольно, с другой стороны: почему тогда не просто 2 (или N) левых соединения? Вроде методически более верно и не сильно более громоздко

   apdate by

8 — 29.06.21 — 13:42

а так не правильно? (я плохо знаю запросы знаю mysql Но и там задумался (

Запрос = Новый Запрос;

    Запрос.Текст =

        «ВЫБРАТЬ

        |    Номенклатура.Ссылка

        |ИЗ

        |    Справочник.Номенклатура КАК Номенклатура

        |ГДЕ

        |    Номенклатура.Артикул = Номенклатура.Артикул

        |    И Номенклатура.АлкогольнаяПродукция = Номенклатура.АлкогольнаяПродукция

        |    И Номенклатура.Наименование = Номенклатура.Наименование»;

   apdate by

9 — 29.06.21 — 13:47

+(8) у меня сработало

Запрос = Новый Запрос;

    Запрос.Текст =

        «ВЫБРАТЬ

        |    Тест.Ссылка КАК Ссылка,

        |    Тест.ВерсияДанных КАК ВерсияДанных,

        |    Тест.ПометкаУдаления КАК ПометкаУдаления,

        |    Тест.Код КАК Код,

        |    Тест.Наименование КАК Наименование,

        |    Тест.А КАК А,

        |    Тест.Б КАК Б,

        |    Тест.С КАК С,

        |    Тест.Д КАК Д,

        |    Тест.Предопределенный КАК Предопределенный,

        |    Тест.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных

        |ИЗ

        |    Справочник.Тест КАК Тест

        |ГДЕ

        |    Тест.А = Тест.А

        |    И Тест.Б = Тест.А

        |    И Тест.С = Тест.А

        |    И Тест.Д = Тест.А»;

    
    РезультатЗапроса = Запрос.Выполнить();

    
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

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

        а = «»;

    КонецЦикла;

   RomanYS

10 — 29.06.21 — 13:48

(8) у тебя все условия заведомо Истина (для не групп)

   apdate by

11 — 29.06.21 — 13:48

+(9) выдало все элементы у которых в реквизитах

А, Б, С, Д одинаковые значения

   apdate by

12 — 29.06.21 — 13:51

(10) а что у меня не верно? то?

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

   Classic

13 — 29.06.21 — 13:53

ВЫБРАТЬ

     СравниваемаяНоменклатура.Ссылка КАК Номенклатура

ПОМЕСТИТЬ НесовпадающиеНоменклатуры    

ИЗ Справочник.Номенклатура.ДополнительныеРеквизиты КАК ОсновнаяНоменклатура

    ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК СравниваемаяНоменклатура

    ПО ОсновнаяНоменклатура.Ссылка <> СравниваемаяНоменклатура.Ссылка

    ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура.ДополнительныеРеквизиты КАК ДанныеСравниваемойНоменклатуры

    ПО СравниваемаяНоменклатура.Ссылка = ДанныеСравниваемойНоменклатуры.Ссылка

       И ОсновнаяНоменклатура.Свойство = ДанныеСравниваемойНоменклатуры.Свойство

       И ОсновнаяНоменклатура.Значение = ДанныеСравниваемойНоменклатуры.Значение

ГДЕ

   ОсновнаяНоменклатура.Ссылка = &НашаНоменклатура

   И ДанныеСравниваемойНоменклатуры.Ссылка ЕСТЬ NULL

;

ВЫБРАТЬ

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

ИЗ Справочник.Номенклатура КАК СпрНоменклатура

   ЛЕВОЕ СОЕДИНЕНИЕ НесовпадающиеНоменклатуры  КАК НесовпадающиеНоменклатуры

   ПО СпрНоменклатура.Ссылка = НесовпадающиеНоменклатуры.Номенклатура

ГДЕ

  НесовпадающиеНоменклатуры.Номенклатура ЕСТЬ NULL

   Classic

14 — 29.06.21 — 13:53

(13)

Как-то так. Идея я думаю ясна

   lodger

15 — 29.06.21 — 13:54

(5)

а если так?

ВЫБРАТЬ

        НоменклатураДополнительныеРеквизиты.Ссылка КАК Ссылка,

        СУММА(1) КАК Поле1

    ИЗ

        Справочник.Номенклатура.ДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизиты

    ГДЕ

        НоменклатураДополнительныеРеквизиты.Значение В (&СписокЗначений)

СГРУППИРОВАТЬ ПО

    НоменклатураДополнительныеРеквизиты.Ссылка

ИМЕЮЩИЕ СУММА(1) = 8

   RomanYS

16 — 29.06.21 — 13:54

(12) У ТСа совсем другая задача

   apdate by

17 — 29.06.21 — 13:55

(16) да я видимо не понял задачу :-(

   RomanYS

18 — 29.06.21 — 14:06

(13) возможно сработает.

Только есть нюансы:

1. прикладной: у ТСа свойств всего 8, а совпадать должно 7

2. более принципиальный: что будет если у элемента не будет допреквизита? Есть подозрение, что он попадёт в выборку

   m1_1976

19 — 29.06.21 — 14:09

(18) 2) Будет. Заполнение доп.реквизита обязательно!

Сделал по своему…

Только долго работает запрос…

   Classic

20 — 29.06.21 — 14:14

(18)

Как задача стоит?

Любые 7? Тогда да, мой подход неправильный. Но тогда (6) вообще непонятно к чему

Конкретные 7? Ставим отбор в первой таблице на свойство

У номенклатуры всего 7 из 8? Тогда все правильно.

Я думаю, что задача стоит получить все номенклатуры с такими же свойствами, как и у заданной. Такая задача логична. Единственный вопрос. Если у заданной будет 4 свойства, а у какой-то 5, эта какая-то должна в выборку попадать?

   RomanYS

21 — 29.06.21 — 14:16

(19) Заполнение доп.реквизита обязательно!

Ага и у групп и услуг?

(20) Если у номенклатуры не будет ни одной записи ДР (например у групп) — она попадёт в твою выборку?

   Classic

22 — 29.06.21 — 14:17

(21)

Нет, она попадет в первую таблицу

   RomanYS

23 — 29.06.21 — 14:24

(22) ОК.

И даже 8 раз)) Имеет смысл «различные» добавить, а может и не повлияет ни на что.

   Classic

24 — 29.06.21 — 14:27

(23)

Не повлияет. Во втором запросе проверка на нулл. Туда только те, что не в первой таблице.

Можно поставить конечно. Можно и на один запрос переписать, только тогда следующий программист вообще не поймет как это работает :)

   m1_1976

25 — 29.06.21 — 14:37

(21) А причем тут Группы?

У них нет ТЧ «ДополнительныеРеквизиты».

Да и групп у меня нет и не будем в этой базе.. Все живет в доп.реквзитах замечтаельно. Еще и по группам их раскладывать??? :)

(20) У доп.свойства в рознице есть признак обязательности заполнения. У меня все заполнены. 100%

Спасибо всем за помощь.

Процентов на 60% помогли.  Самое важно — натолкнули на мысль! За это СПАСИБО!

   Classic

26 — 29.06.21 — 14:45

(25)

Покажи, что налабал. А то терзают смутные сомнения

   m1_1976

27 — 29.06.21 — 14:56

см (5)

через задницу… но

   Classic

28 — 29.06.21 — 15:10

(27)

Это очень мягко сказано.

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

   m1_1976

29 — 29.06.21 — 15:18

(28) Типы свойств всегда справочник «Дополнительные свойства».

Одно плохо = долго работает.

Несколько секунд (5-7) запрос выполняется.

потом переделаю…

   Classic

30 — 29.06.21 — 15:41

(29)

Смотри, например у тебя есть свойства (условно) «длина» и «ширина»

У твоей номенклатуры длина 10, ширина 5

У другой номенклатуры ширина 10, длина 5

Что выдаст твой запрос?

   m1_1976

31 — 29.06.21 — 16:22

(30) С ума сойти…  Меня пытаетесь запутать? Зачем? Пишите правильно:

Ш10 Д5

Ш5 Д10

Прчием тут мой запрос. У меня в запросе строго будет

(ШИРИНА = &ВыбШИРИНА)

(ДЛИНА = &ВыбДлина)

И не важно в каком порядоке Вы их в своем вопросе написали :))))))

У меня строго 8 доп.реквизитов

У меня есть товар, в котором у меня все известно (БРЕНД,СОСТАВ,ТИПТОВАРА,ЦВЕТ, МОДЕЛЬ и т.д)

Восьмое свойство РАЗМЕР.

Я своим запросом зная, эти 7 доп.реквизитов (из одного товара) — нахожу все такие же товары всех размеров!

Задачу я решил.

   Eiffil123

32 — 29.06.21 — 16:36

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

   acanta

33 — 29.06.21 — 16:37

А если это не доп.реквизиты, а части одного реквизита, подстроки?

   Жан Пердежон

34 — 29.06.21 — 16:59

(30) там разные ссылки будут, так как (29)

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

если только допсвойства, то и (15) должно работать

и зачем у тебя сортировка вместо  ИМЕЮЩИЕ СУММА(Поле1) = 7?

   Classic

35 — 29.06.21 — 17:09

(31)

У тебя в (5) ничего такого не написано.

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

   Garykom

36 — 29.06.21 — 17:12

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

   m1_1976

37 — 29.06.21 — 17:21

(34) Сортировка это пережиток КонсолиЗапросов (отладка) — так вывел себе наверх в результате наиболее часто встречающиеся. Попробовал на десятке разных наборов. Понял что работает… и переделал на ИМЕЮЩИЕ.

Тут поспешил…

   m1_1976

38 — 29.06.21 — 17:22

(35) Так не может быть! так как (29)

  

m1_1976

39 — 29.06.21 — 17:23

Еще раз спасибо.

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

Ном = Справочники.Номенклатура.НайтиПоРеквизиту("Гарантия", ЗначениеРеквизита);

Этот способ подходит для поиска по реквизитам справочника. И он ищет только первый элемент и не годится, если их несколько.
Но, поскольку вы пишете что вам нужно осуществить поиск по дополнительному реквизиту, то вам прийдеться писать запрос, и решение зависит от того, как в вашей конфигурации реализованы дополнительные реквизиты.
Например, в конфигурации УНФ, дополнительные реквизиты, это элементы табличной части справочника Номенклатура. При этом «свойство», т.е. имя реквизита, в вашем случае «Гарантия», это план видов характеристик ДополнительныеРеквизитыИСведения. Запрос будет выглядеть примерно так:

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

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

Автор bony_ann, 08 авг 2018, 12:50

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

В отчёте (отдельными колонками) нужно вывести номенклатуру и её дополнительные реквизиты, введённые пользователем в режиме предприятия.
Не понятно каким образом получить доп реквизиты.
Не судите строго, студентка, только начала работать с 1с. 


Цитата: bony_ann от 08 авг 2018, 12:50
В отчёте (отдельными колонками) нужно вывести номенклатуру и её дополнительные реквизиты, введённые пользователем в режиме предприятия.
Не понятно каким образом получить доп реквизиты.
Не судите строго, студентка, только начала работать с 1с.

Дополнительные реквизиты — это табличная часть справочника Номенклатура?
Сделайте цикл по строкам этой табличной части.


Примерно так можно получить:


Свойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("ИмяРеквизита", Истина);

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


Цитата: ДмитрийФ от 08 авг 2018, 13:29
Примерно так можно получить:

Свойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("ИмяРеквизита", Истина);

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

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


Надо не таблицу выбирать из Справочник.Номенклатура, а сразу запрос делать к Справочник.Номенклатура.ДополнительныеРеквизиты.
При этом можно сделать разные свойства в разных колонках, если знать заранее все свойства, через ВЫБОР получится.
Но если нужно автоматически, то через СКД в виде таблицы выводить.


Теги:

  • Форум 1С

  • Форум 1С — ПРЕДПРИЯТИЕ 8.0 8.1 8.2 8.3 8.4

  • Конфигурирование, программирование в 1С Предприятие 8

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

Похожие темы (5)

Рейтинг@Mail.ru

Rambler's Top100

Поиск

Опубликовано в Статьи по 1С 27.10.2018

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

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

  • Дополнительные реквизиты – список реквизитов, доступных в форме документа или справочника; причем эти реквизиты хранятся в табличной части объекта, к которому они добавлены;
  • Дополнительные сведения – список значений доступных по дополнительной кнопке; причем доп. сведения  хранятся в  отдельном регистре.

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

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

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

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

Для получения дополнительного реквизита использую код вида:

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

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

1с дополнительные реквизиты и сведения

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

Краткое описание механизма дополнительных реквизитов и сведений

Пример добавление дополнительного реквизита вручную вы можете посмотреть в публикации Брутто в ТОРГ12, где добавляется новый реквизит «Коэффициент брутто» в справочнике «Номенклатура». Таким образом можно добавлять реквизиты всех известных типов (число, строка, булево, список значений, ссылки на справочники и т.д.) к распространенным справочникам и документам 1С.

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

  • Дополнительные реквизиты – список реквизитов, доступных в форме документа или справочника; причем эти реквизиты хранятся в табличной части объекта, к которому они добавлены;
  • Дополнительные сведения – список значений доступных по дополнительной кнопке; причем доп. сведения  хранятся в  отдельном регистре.

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

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

Для получения дополнительного сведения использую запрос вида:

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

Для получения дополнительного реквизита использую код вида (пример получения коэффициента брутто в ТОРГ12):

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

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

На чтение 2 мин. Просмотров 635 Опубликовано 15.12.2019

Примеры работы с дополнительными реквизитами.

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

Пример: мы делаем печатную форму документа «Заказ клиента» и хотим вывести на неё значение определённого дополнительного реквизита — «Должность покупателя».

Используем вложенный запрос, в котором соединяем левым соединением таблицу «Дополнительные реквизиты» документа «Заказ клиента» с Планом видов характеристик «Дополнительные реквизиты и сведения». Устанавливаем условие: заголовок дополнительного реквизита должен быть таким – «Должность покупателя». Таблицы соединяем по ссылке на «Заказ клиента».

Получается вот такой запрос:

Также можно использовать метод НайтиПоНаименованию ( «***» ) .

Переменная Ссылка – это ссылка на «Договор контрагента».

Проверка на предмет того, что дополнительный реквизит заполнен:

Как изменить значения дополнительных реквизитов:

Задействуем общий модуль УправлениеСвойствами , который входит в состав БСП.

Юзайте на здоровья!

3 thoughts on “Получить значение дополнительных реквизитов 1С 8”

Спасибо, очень помогло.

К сожалению, на строчке
Запрос.УстановитьПараметр(«Объект», Объект);
спотыкается и отказывается дальше работать

Как редактировать доп реквизиты:

редактировать их состав можно тут:

хранятся они тут:

где типы реквизитов:

получить их в запросе можно так:

НоменклатураДополнительныеРеквизиты.Ссылка КАК Ссылка,

НоменклатураДополнительныеРеквизиты.Ссылка.Код КАК Код,

НоменклатураДополнительныеРеквизиты.Свойство КАК Свойство,

НоменклатураДополнительныеРеквизиты.Значение КАК Значение

Справочник.Номенклатура.ДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизиты

Разберем что откуда берется.

Дополнительные реквизиты заводятся в «ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения» и там же указан тип значений допРеквизитов:

ДополнительныеРеквизитыИСведения.Ссылка КАК Ссылка,

ДополнительныеРеквизитыИСведения.ТипЗначения КАК ТипЗначения

ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения КАК ДополнительныеРеквизитыИСведения

Для справки: Кроме ссыка и типЗначения в «ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения» хранится куча свойств этих реквизитов

Если указан типЗначеня «ДополнительноеЗначение», то виды этих доп значений можем посмотреть тут:

ЗначенияСвойствОбъектов.Владелец КАК Владелец,

ЗначенияСвойствОбъектов.Ссылка КАК Ссылка,

ЗначенияСвойствОбъектов.Владелец.ТипЗначения КАК ВладелецТипЗначения

Справочник.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов

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

Google+

  • © 2019 Услуги 1С программиста. Доработка и обслуживание 1С. Удаленное программирование по всей России. Платформы 7.7 8.2 8.3 , битрикс.
  • 262 / 218 / 94

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

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

    1

    Получение данных по нескольким доп.реквизитам

    22.09.2021, 16:08. Показов 1780. Ответов 10


    Всем доброго времени суток.
    Вопрос таков…

    Есть некий Эксель, в котором содержится текстовая информация.
    Ну пусть строки «к1,к2,к3»

    И таких в Экселе строк энное количество будет.

    Есть номенклатура в бд,в которой добавлены доп.реквизиты в которых содержатся те же самые текстовые значения, что и в Экселе.
    То есть в карточке номенклатуры в доп.реквизите 1 указано «к1″,в доп.реквизите 2″к2» и тд.

    Вот как мне получить ОДНИМ запросом всю номенклатуру справочника у которой совпали ВСЕ 3 параметра?

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

    Вот какое должно быть условие в соединении чтобы получить и ссылку и значения этих доп.реквизитов???
    ПО И канает только для 1 доп.значения.ПО ИЛИ вернёт номенклатуру где только 1 из значений совпадает.
    Значения нужны чтобы потом в таблице значений из Экселя заполнить ссылки на товары.



    0



    1506 / 949 / 364

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

    Сообщений: 3,340

    22.09.2021, 16:40

    2

    А чего ПО И канает только для 1 доп.значения?
    Номенклатура.ДопРекв1=ВТ.ДопРекв1 И Номенклатура.ДопРекв2=ВТ.ДопРекв2 и т.д. хоть 100 И , если 1С не загнется ))



    0



    OverDozero

    262 / 218 / 94

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

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

    22.09.2021, 17:03

     [ТС]

    3

    ВТ.ДопРекв1, ВТ.ДопРекв2 так в ВТ то все 3 доп.реквизита в 1 колонке.

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

    Где мСвойств это массив со свойствами.

    А вот в значении как раз те показатели по которым надо связать 3 значения из экселя.
    Разделял каждое отдельно свойство и его значения, но результат не тот который нужен.Он вернет 3 номенклатуры где хоть 1 значение совпадает.
    А объединение не проходит так как значения разные.



    0



    1506 / 949 / 364

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

    Сообщений: 3,340

    22.09.2021, 17:54

    4

    понял, А программно ту экселевскую табличку преобразовать, получив времянку где эти 3 строки в 3 колонки перешли? Ну а дальше запросом



    0



    OverDozero

    262 / 218 / 94

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

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

    22.09.2021, 18:18

     [ТС]

    5

    Ну такое схлопывание и написал..но интересно же сделать запросом)

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

    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
    30
    31
    
    ВЫБРАТЬ
        ВЫРАЗИТЬ(ДанныеТаблицы.ДиапазонРасцветок КАК СТРОКА(1024)) КАК ДиапазонРасцветок,
        ВЫРАЗИТЬ(ДанныеТаблицы.ДлинаПорога КАК СТРОКА(1024)) КАК ДлинаПорога,
        ВЫРАЗИТЬ(ДанныеТаблицы.ШиринаПорога КАК СТРОКА(1024)) КАК ШиринаПорога
    ПОМЕСТИТЬ ДанныеТаблицыЗначений
    ИЗ
        &Таблица КАК ДанныеТаблицы
    ;
     
    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ
        НоменклатураДополнительныеРеквизиты.Ссылка КАК НоменклатураСсылка,
        НоменклатураДополнительныеРеквизиты.Свойство КАК Свойство,
        НоменклатураДополнительныеРеквизиты.Значение КАК Значение
    ПОМЕСТИТЬ ДанныеНоменклатуры
    ИЗ
        Справочник.Номенклатура.ДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизиты
    ГДЕ
        НоменклатураДополнительныеРеквизиты.Свойство В(&мСвойств)
    ;
     
    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ
        ДанныеТаблицыЗначений.ДиапазонРасцветок КАК ДиапазонРасцветок,
        ДанныеТаблицыЗначений.ДлинаПорога КАК ДлинаПорога,
        ДанныеТаблицыЗначений.ШиринаПорога КАК ШиринаПорога,
        ДанныеНоменклатуры.НоменклатураСсылка КАК НоменклатураСсылка
    ИЗ
        ДанныеТаблицыЗначений КАК ДанныеТаблицыЗначений
            ЛЕВОЕ СОЕДИНЕНИЕ ДанныеНоменклатуры КАК ДанныеНоменклатуры
            ПО (ДанныеТаблицыЗначений.ДиапазонРасцветок = ДанныеНоменклатуры.Значение.Наименование)

    Вот так возвращает позиции где есть доп.реквизит.
    Второй и третий осталось сюда прикрутить



    0



    1142 / 689 / 203

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

    Сообщений: 5,160

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

    22.09.2021, 21:33

    6

    раз 7 перечитал условие задачи но так и не понял
    где в екселе привязка к номенклатуре, если там строки (какие там строки? так и не понял. к1,к2,к3,к4,к5,…..к998,к999,… ?)



    0



    262 / 218 / 94

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

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

    22.09.2021, 21:47

     [ТС]

    7

    Шо непонятного то?)
    Есть табличная часть обработки в которой инфа о номенклатуре(это справочник номенклатуры), и 3 поля , пусть, этодлина,ширина,высота.Строковый тип.

    Вот из экселя заполнились длина,ширина и высота.
    Теперь в эту ТЧ надо подобрать номенклатуру по этим 3 параметрам.То есть найти ссылку на номенклатуру у которой в доп.реквизитах совпали по значениям поля длина,ширина и высота.По всем 3 сразу

    P.S.Решение было найдено левым соединением по каждому свойству в отдельности.
    Можно сделать это вроде объединением, но я хз как)



    0



    Yulunga

    1142 / 689 / 203

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

    Сообщений: 5,160

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

    22.09.2021, 22:19

    8

    ну в смысле

    1C
    1
    2
    3
    4
    5
    6
    7
    
    выбрать 
    допрек.значение как длина, 0 как высота, 0 как ширина
    где допрек.свойство = "имядлины"
     
    объединть все
    выбрать 0, допрек.значение, 0
    где допрек.свойство = "имявысоты

    «

    проширину также

    это ты спрашивал?



    1



    Dethmontt

    23.09.2021, 03:59

    Не по теме:

    Учимся разворачивать таблицу на колонки в запросе…



    0



    OverDozero

    262 / 218 / 94

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

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

    23.09.2021, 10:24

     [ТС]

    10

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

    ну в смысле

    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
    30
    
    ВЫБРАТЬ
            Длина.Значение.Наименование КАК Длина,
            "" КАК Ширина,
            "" КАК Цвет
        ИЗ
            ВТ_НоменклатураПоСвойствам КАК Длина
        ГДЕ
            Длина.Свойство = &СвойствоДлина
        
        ОБЪЕДИНИТЬ
        
        ВЫБРАТЬ
            "",
            Ширина.Значение.Наименование,
            ""
        ИЗ
            ВТ_НоменклатураПоСвойствам КАК Ширина
        ГДЕ
            Ширина.Свойство = &СвойствоШирина
        
        ОБЪЕДИНИТЬ
        
        ВЫБРАТЬ
            "",
            "",
            Цвет.Значение.Наименование
        ИЗ
            ВТ_НоменклатураПоСвойствам КАК Цвет
        ГДЕ
            Цвет.Свойство = &СвойствоЦвет

    Вытаскивает он таблицу вида

    Длина1 Ширина1 Цвет1
    100 «» «»
    «» 900 «»
    «» 1000 «»
    «» «» Красный
    «» «» Белый

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

    Я за это топлю.

    Добавлено через 49 минут
    Собственно решение как это работает сейчас

    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    
    ВЫБРАТЬ
        ВЫРАЗИТЬ(ДанныеТаблицы.ДиапазонРасцветок КАК СТРОКА(1024)) КАК ДиапазонРасцветок,
        ВЫРАЗИТЬ(ДанныеТаблицы.ДлинаПорога КАК СТРОКА(1024)) КАК ДлинаПорог,
        ВЫРАЗИТЬ(ДанныеТаблицы.ШиринаПорога КАК СТРОКА(1024)) КАК ШиринаПорога
    ПОМЕСТИТЬ ДанныеТаблицыЗначений
    ИЗ
        &Таблица КАК ДанныеТаблицы
    ;
     
    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ
        НоменклатураДополнительныеРеквизиты.Ссылка КАК Ссылка,
        НоменклатураДополнительныеРеквизиты.Свойство КАК Свойство,
        НоменклатураДополнительныеРеквизиты.Значение КАК Значение
    ПОМЕСТИТЬ ВТ_НоменклатураПоСвойствам
    ИЗ
        Справочник.Номенклатура.ДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизиты
    ГДЕ
        НоменклатураДополнительныеРеквизиты.Свойство В(&мСвойств)
    ;
     
    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ
        ВТ_НоменклатураПоСвойствам.Ссылка КАК Ссылка,
        Длина.Значение.Наименование КАК Длина,
        Цвет.Значение.Наименование КАК Цвет,
        Ширина.Значение.Наименование КАК Ширина
    ИЗ
        ВТ_НоменклатураПоСвойствам КАК ВТ_НоменклатураПоСвойствам
            ЛЕВОЕ СОЕДИНЕНИЕ ВТ_НоменклатураПоСвойствам КАК Длина
            ПО (ВТ_НоменклатураПоСвойствам.Ссылка = Длина.Ссылка)
            ЛЕВОЕ СОЕДИНЕНИЕ ВТ_НоменклатураПоСвойствам КАК Цвет
            ПО (ВТ_НоменклатураПоСвойствам.Ссылка = Цвет.Ссылка)
            ЛЕВОЕ СОЕДИНЕНИЕ ВТ_НоменклатураПоСвойствам КАК Ширина
            ПО (ВТ_НоменклатураПоСвойствам.Ссылка = Ширина.Ссылка)
    ГДЕ
        Длина.Свойство = &СвойствоДлина
        И Цвет.Свойство = &СвойствоЦвет
        И Ширина.Свойство = &СвойствоШирина
     
    СГРУППИРОВАТЬ ПО
        ВТ_НоменклатураПоСвойствам.Ссылка,
        Длина.Значение.Наименование,
        Цвет.Значение.Наименование,
        Ширина.Значение.Наименование



    0



    1142 / 689 / 203

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

    Сообщений: 5,160

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

    23.09.2021, 13:15

    11

    ну там нулл должен быть а не «»
    но я не уверен. но вроде так надо делать



    0



    Понравилась статья? Поделить с друзьями:
  • 1с изменить тип значения дополнительного реквизита
  • 1с как добавить все реквизиты объекта в расширение
  • 1с как добавить дополнительный реквизит в документ
  • 1с как проверить существование реквизита у объекта
  • 1с как программно изменить дополнительный реквизит