Помогите с запросом… Доп реквизиты Номенклатуры |
Я |
29.06.21 — 13:11
Всем добрый день.
Подскажите в тупике.
1С Розница.
Справочник Номенклатура.
У номенклатуры 8 доп реквизитов. (Важно что их конечное число).
Хочу найти запросом все товары у которых 7 известных мне конкретных реквизитов совпадают. (допустим мне известен один товар — из него эти 7 доп.реквизитов беру).
Все доп.реквизиты обязательны к заполнению…
1 — 29.06.21 — 13:14
Верно понимаю что должно быть 7 уровней вложенных запросов.
Первым нахожу все товары у которых совпадает Доп.свойство 1
Второым нахожу все товары среди результатов 1 запроса у которых совпадает Доп.свойство 2
и т.д.
????
2 — 29.06.21 — 13:14
Че-то мне кажется какой-то огород горожу…
3 — 29.06.21 — 13:17
соединить по равенству свойств, а потом сгруппировать по ссылке. <!>Имеющие<!> 7 совпадений — искомые элементы
4 — 29.06.21 — 13:18
«ВЫБРАТЬ
| НоменклатураДополнительныеРеквизиты.Ссылка КАК Ссылка,
| МАКСИМУМ(ВЫБОР
| КОГДА НоменклатураДополнительныеРеквизиты.Свойство = &Реквизит1
| ТОГДА НоменклатураДополнительныеРеквизиты.Значение
| КОНЕЦ) КАК Реквизит1,
| МАКСИМУМ(ВЫБОР
| КОГДА НоменклатураДополнительныеРеквизиты.Свойство = &Реквизит2
| ТОГДА НоменклатураДополнительныеРеквизиты.Значение
| КОНЕЦ) КАК Реквизит2
|ПОМЕСТИТЬ Реквизиты
|ИЗ
| Справочник.Номенклатура.ДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизиты
|
|СГРУППИРОВАТЬ ПО
| НоменклатураДополнительныеРеквизиты.Ссылка
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| Реквизиты.Ссылка КАК Ссылка
|ИЗ
| Реквизиты КАК Реквизиты
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Реквизиты КАК Реквизиты1
| ПО Реквизиты.Реквизит1 = Реквизиты1.Реквизит1
| И Реквизиты.Реквизит2 = Реквизиты1.Реквизит2″
5 — 29.06.21 — 13:18
так решил…
ВЫБРАТЬ
ВложенныйЗапрос.Ссылка КАК Ссылка,
СУММА(ВложенныйЗапрос.Поле1) КАК Поле1
ИЗ
(ВЫБРАТЬ
НоменклатураДополнительныеРеквизиты.Ссылка КАК Ссылка,
1 КАК Поле1
ИЗ
Справочник.Номенклатура.ДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизиты
ГДЕ
НоменклатураДополнительныеРеквизиты.Значение = &ЗначениеТовар
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
НоменклатураДополнительныеРеквизиты.Ссылка,
1
ИЗ
Справочник.Номенклатура.ДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизиты
ГДЕ
НоменклатураДополнительныеРеквизиты.Значение = &ЗначениеБренд
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
НоменклатураДополнительныеРеквизиты.Ссылка,
1
ИЗ
Справочник.Номенклатура.ДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизиты
ГДЕ
НоменклатураДополнительныеРеквизиты.Значение = &ЗначениеБренд
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
НоменклатураДополнительныеРеквизиты.Ссылка,
1
ИЗ
Справочник.Номенклатура.ДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизиты
ГДЕ
НоменклатураДополнительныеРеквизиты.Значение = &ЗначениеСостав
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
НоменклатураДополнительныеРеквизиты.Ссылка,
1
ИЗ
Справочник.Номенклатура.ДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизиты
ГДЕ
НоменклатураДополнительныеРеквизиты.Значение = &ЗначениеЦвет
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
НоменклатураДополнительныеРеквизиты.Ссылка,
1
ИЗ
Справочник.Номенклатура.ДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизиты
ГДЕ
НоменклатураДополнительныеРеквизиты.Значение = &ЗначениеСостав
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
НоменклатураДополнительныеРеквизиты.Ссылка,
1
ИЗ
Справочник.Номенклатура.ДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизиты
ГДЕ
НоменклатураДополнительныеРеквизиты.Значение = &ЗначениеАртикул) КАК ВложенныйЗапрос
СГРУППИРОВАТЬ ПО
ВложенныйЗапрос.Ссылка
УПОРЯДОЧИТЬ ПО
Поле1 УБЫВ
6 — 29.06.21 — 13:19
Добавил доп поле = 1 в каждом.
Потом выбираю только те у которых Поле1 = 8
7 — 29.06.21 — 13:26
(4) с одной стороны прикольно, с другой стороны: почему тогда не просто 2 (или N) левых соединения? Вроде методически более верно и не сильно более громоздко
8 — 29.06.21 — 13:42
а так не правильно? (я плохо знаю запросы знаю mysql Но и там задумался (
Запрос = Новый Запрос;
Запрос.Текст =
«ВЫБРАТЬ
| Номенклатура.Ссылка
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура.Артикул = Номенклатура.Артикул
| И Номенклатура.АлкогольнаяПродукция = Номенклатура.АлкогольнаяПродукция
| И Номенклатура.Наименование = Номенклатура.Наименование»;
9 — 29.06.21 — 13:47
+(8) у меня сработало
Запрос = Новый Запрос;
Запрос.Текст =
«ВЫБРАТЬ
| Тест.Ссылка КАК Ссылка,
| Тест.ВерсияДанных КАК ВерсияДанных,
| Тест.ПометкаУдаления КАК ПометкаУдаления,
| Тест.Код КАК Код,
| Тест.Наименование КАК Наименование,
| Тест.А КАК А,
| Тест.Б КАК Б,
| Тест.С КАК С,
| Тест.Д КАК Д,
| Тест.Предопределенный КАК Предопределенный,
| Тест.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных
|ИЗ
| Справочник.Тест КАК Тест
|ГДЕ
| Тест.А = Тест.А
| И Тест.Б = Тест.А
| И Тест.С = Тест.А
| И Тест.Д = Тест.А»;
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
а = «»;
КонецЦикла;
10 — 29.06.21 — 13:48
(8) у тебя все условия заведомо Истина (для не групп)
11 — 29.06.21 — 13:48
+(9) выдало все элементы у которых в реквизитах
А, Б, С, Д одинаковые значения
12 — 29.06.21 — 13:51
(10) а что у меня не верно? то?
оно работает далее поместить результат в массив и соединением выдрать ссылки на владельца этих доп реквизитов?
13 — 29.06.21 — 13:53
ВЫБРАТЬ
СравниваемаяНоменклатура.Ссылка КАК Номенклатура
ПОМЕСТИТЬ НесовпадающиеНоменклатуры
ИЗ Справочник.Номенклатура.ДополнительныеРеквизиты КАК ОсновнаяНоменклатура
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК СравниваемаяНоменклатура
ПО ОсновнаяНоменклатура.Ссылка <> СравниваемаяНоменклатура.Ссылка
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура.ДополнительныеРеквизиты КАК ДанныеСравниваемойНоменклатуры
ПО СравниваемаяНоменклатура.Ссылка = ДанныеСравниваемойНоменклатуры.Ссылка
И ОсновнаяНоменклатура.Свойство = ДанныеСравниваемойНоменклатуры.Свойство
И ОсновнаяНоменклатура.Значение = ДанныеСравниваемойНоменклатуры.Значение
ГДЕ
ОсновнаяНоменклатура.Ссылка = &НашаНоменклатура
И ДанныеСравниваемойНоменклатуры.Ссылка ЕСТЬ NULL
;
ВЫБРАТЬ
СпрНоменклатура.Ссылка
ИЗ Справочник.Номенклатура КАК СпрНоменклатура
ЛЕВОЕ СОЕДИНЕНИЕ НесовпадающиеНоменклатуры КАК НесовпадающиеНоменклатуры
ПО СпрНоменклатура.Ссылка = НесовпадающиеНоменклатуры.Номенклатура
ГДЕ
НесовпадающиеНоменклатуры.Номенклатура ЕСТЬ NULL
14 — 29.06.21 — 13:53
(13)
Как-то так. Идея я думаю ясна
15 — 29.06.21 — 13:54
(5)
а если так?
ВЫБРАТЬ
НоменклатураДополнительныеРеквизиты.Ссылка КАК Ссылка,
СУММА(1) КАК Поле1
ИЗ
Справочник.Номенклатура.ДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизиты
ГДЕ
НоменклатураДополнительныеРеквизиты.Значение В (&СписокЗначений)
СГРУППИРОВАТЬ ПО
НоменклатураДополнительныеРеквизиты.Ссылка
ИМЕЮЩИЕ СУММА(1) = 8
16 — 29.06.21 — 13:54
(12) У ТСа совсем другая задача
17 — 29.06.21 — 13:55
(16) да я видимо не понял задачу
18 — 29.06.21 — 14:06
(13) возможно сработает.
Только есть нюансы:
1. прикладной: у ТСа свойств всего 8, а совпадать должно 7
2. более принципиальный: что будет если у элемента не будет допреквизита? Есть подозрение, что он попадёт в выборку
19 — 29.06.21 — 14:09
(18) 2) Будет. Заполнение доп.реквизита обязательно!
Сделал по своему…
Только долго работает запрос…
20 — 29.06.21 — 14:14
(18)
Как задача стоит?
Любые 7? Тогда да, мой подход неправильный. Но тогда (6) вообще непонятно к чему
Конкретные 7? Ставим отбор в первой таблице на свойство
У номенклатуры всего 7 из 8? Тогда все правильно.
Я думаю, что задача стоит получить все номенклатуры с такими же свойствами, как и у заданной. Такая задача логична. Единственный вопрос. Если у заданной будет 4 свойства, а у какой-то 5, эта какая-то должна в выборку попадать?
21 — 29.06.21 — 14:16
(19) Заполнение доп.реквизита обязательно!
Ага и у групп и услуг?
(20) Если у номенклатуры не будет ни одной записи ДР (например у групп) — она попадёт в твою выборку?
22 — 29.06.21 — 14:17
(21)
Нет, она попадет в первую таблицу
23 — 29.06.21 — 14:24
(22) ОК.
И даже 8 раз)) Имеет смысл «различные» добавить, а может и не повлияет ни на что.
24 — 29.06.21 — 14:27
(23)
Не повлияет. Во втором запросе проверка на нулл. Туда только те, что не в первой таблице.
Можно поставить конечно. Можно и на один запрос переписать, только тогда следующий программист вообще не поймет как это работает
25 — 29.06.21 — 14:37
(21) А причем тут Группы?
У них нет ТЧ «ДополнительныеРеквизиты».
Да и групп у меня нет и не будем в этой базе.. Все живет в доп.реквзитах замечтаельно. Еще и по группам их раскладывать???
(20) У доп.свойства в рознице есть признак обязательности заполнения. У меня все заполнены. 100%
Спасибо всем за помощь.
Процентов на 60% помогли. Самое важно — натолкнули на мысль! За это СПАСИБО!
26 — 29.06.21 — 14:45
(25)
Покажи, что налабал. А то терзают смутные сомнения
27 — 29.06.21 — 14:56
см (5)
через задницу… но
28 — 29.06.21 — 15:10
(27)
Это очень мягко сказано.
В общем случае, если типы свойств будут разные, то твой запрос будет выдавать непонятные значения
29 — 29.06.21 — 15:18
(28) Типы свойств всегда справочник «Дополнительные свойства».
Одно плохо = долго работает.
Несколько секунд (5-7) запрос выполняется.
потом переделаю…
30 — 29.06.21 — 15:41
(29)
Смотри, например у тебя есть свойства (условно) «длина» и «ширина»
У твоей номенклатуры длина 10, ширина 5
У другой номенклатуры ширина 10, длина 5
Что выдаст твой запрос?
31 — 29.06.21 — 16:22
(30) С ума сойти… Меня пытаетесь запутать? Зачем? Пишите правильно:
Ш10 Д5
Ш5 Д10
Прчием тут мой запрос. У меня в запросе строго будет
(ШИРИНА = &ВыбШИРИНА)
(ДЛИНА = &ВыбДлина)
И не важно в каком порядоке Вы их в своем вопросе написали :))))))
У меня строго 8 доп.реквизитов
У меня есть товар, в котором у меня все известно (БРЕНД,СОСТАВ,ТИПТОВАРА,ЦВЕТ, МОДЕЛЬ и т.д)
Восьмое свойство РАЗМЕР.
Я своим запросом зная, эти 7 доп.реквизитов (из одного товара) — нахожу все такие же товары всех размеров!
Задачу я решил.
32 — 29.06.21 — 16:36
наиболее логично сделать 7 внутренних соединений с основой таблицей номенклатур и далее на закладке отборов наложить фильтр на эти реквизиты
33 — 29.06.21 — 16:37
А если это не доп.реквизиты, а части одного реквизита, подстроки?
34 — 29.06.21 — 16:59
(30) там разные ссылки будут, так как (29)
(5) для общего случая — в каждый подзапрос отбор по свойству добавить (если не только доп.свойства),
если только допсвойства, то и (15) должно работать
и зачем у тебя сортировка вместо ИМЕЮЩИЕ СУММА(Поле1) = 7?
35 — 29.06.21 — 17:09
(31)
У тебя в (5) ничего такого не написано.
Решил, то и решил. Но я бы порекомендовал тебе проверить свое решение на вариантах, когда значения совпадают, но они не у тех свойств.
36 — 29.06.21 — 17:12
у допреквизитов поле имя есть по которому удобно в запросах
37 — 29.06.21 — 17:21
(34) Сортировка это пережиток КонсолиЗапросов (отладка) — так вывел себе наверх в результате наиболее часто встречающиеся. Попробовал на десятке разных наборов. Понял что работает… и переделал на ИМЕЮЩИЕ.
Тут поспешил…
38 — 29.06.21 — 17:22
(35) Так не может быть! так как (29)
m1_1976
39 — 29.06.21 — 17:23
Еще раз спасибо.
тему можно закрыть.
Опубликовано в Статьи по 1С 27.10.2018
В библиотеке стандартных подсистем 1С дополнительные реквизиты и сведения включены и активно применяются. Эти механизмы позволяют добавить дополнительный реквизит к объекту метаданных без изменения типовой конфигурации. Принцип работы дополнительных реквизитов и сведений, их добавление и получение значений.
Отличие дополнительного реквизита от дополнительного сведения в том, что
- Дополнительные реквизиты – список реквизитов, доступных в форме документа или справочника; причем эти реквизиты хранятся в табличной части объекта, к которому они добавлены;
- Дополнительные сведения – список значений доступных по дополнительной кнопке; причем доп. сведения хранятся в отдельном регистре.
После ввода дополнительного реквизита или сведения 1С, можно создать подключаемую обработку, где считать введенные дополнительные данные и задать необходимую логику обработки данных, в которой использовать этот реквизит или сведение.
Как получить 1С дополнительные реквизиты и сведения программно:
Для получения дополнительных данных используем запрос, в котором получим значение дополнительных реквизитов и сведений:
////
Запрос = Новый Запрос;
Запрос.Текст =
«ВЫБРАТЬ РАЗРЕШЕННЫЕ
| ДополнительныеСведения.Свойство,
| ДополнительныеСведения.Значение
|ИЗ
| РегистрСведений.ДополнительныеСведения КАК ДополнительныеСведения
|ГДЕ
| ДополнительныеСведения.Объект = &Объект»;
Запрос.УстановитьПараметр(«Объект», СсылкаДокумент);
////
Для получения дополнительного реквизита использую код вида:
////
Запрос = Новый Запрос;
Запрос.Текст =
«ВЫБРАТЬ
| НоменклатураДополнительныеРеквизиты.Свойство,
| НоменклатураДополнительныеРеквизиты.Значение
|ИЗ
| Справочник.Номенклатура.ДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизиты
|ГДЕ
| НоменклатураДополнительныеРеквизиты.Свойство = &Свойство
| И НоменклатураДополнительныеРеквизиты.Ссылка = &Ссылка»;
Запрос.УстановитьПараметр(«Ссылка», СсылкаДокумент);
Запрос.УстановитьПараметр(«Свойство», ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию(«Коэффициент бруто»));
////
Теперь вы без труда сможете добавить и получить необходимые дополнительные 1С данные без снятия конфигурации 1С с поддержки и изменения типовой конфигурации. Без сомнения, такой инструмент должен быть в арсенале 1С программиста и активно использоваться в работе.
Как редактировать доп реквизиты:
редактировать их состав можно тут:
хранятся они тут:
где типы реквизитов:
получить их в запросе можно так:
ВЫБРАТЬ ПЕРВЫЕ 100
НоменклатураДополнительныеРеквизиты.Ссылка КАК Ссылка,
НоменклатураДополнительныеРеквизиты.Ссылка.Код КАК Код,
НоменклатураДополнительныеРеквизиты.Свойство КАК Свойство,
НоменклатураДополнительныеРеквизиты.Значение КАК Значение
ИЗ
Справочник.Номенклатура.ДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизиты
Разберем что откуда берется.
Дополнительные реквизиты заводятся в «ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения» и там же указан тип значений допРеквизитов:
ВЫБРАТЬ
ДополнительныеРеквизитыИСведения.Ссылка КАК Ссылка,
ДополнительныеРеквизитыИСведения.ТипЗначения КАК ТипЗначения
ИЗ
ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения КАК ДополнительныеРеквизитыИСведения
Для справки: Кроме ссыка и типЗначения в «ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения» хранится куча свойств этих реквизитов
Если указан типЗначеня «ДополнительноеЗначение», то виды этих доп значений можем посмотреть тут:
ВЫБРАТЬ
ЗначенияСвойствОбъектов.Владелец КАК Владелец,
ЗначенияСвойствОбъектов.Ссылка КАК Ссылка,
ЗначенияСвойствОбъектов.Владелец.ТипЗначения КАК ВладелецТипЗначения
ИЗ
Справочник.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
а сами значения дополнительных реквизитов хранятся тут:
Получение дополнительных реквизитов справочника
Автор 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)
Поиск
Ном = Справочники.Номенклатура.НайтиПоРеквизиту("Гарантия", ЗначениеРеквизита);
Этот способ подходит для поиска по реквизитам справочника. И он ищет только первый элемент и не годится, если их несколько.
Но, поскольку вы пишете что вам нужно осуществить поиск по дополнительному реквизиту, то вам прийдеться писать запрос, и решение зависит от того, как в вашей конфигурации реализованы дополнительные реквизиты.
Например, в конфигурации УНФ, дополнительные реквизиты, это элементы табличной части справочника Номенклатура. При этом «свойство», т.е. имя реквизита, в вашем случае «Гарантия», это план видов характеристик ДополнительныеРеквизитыИСведения. Запрос будет выглядеть примерно так:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| НоменклатураДополнительныеРеквизиты.Ссылка КАК НоменклатураСсылка
|ИЗ
| Справочник.Номенклатура.ДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизиты
|ГДЕ
| НоменклатураДополнительныеРеквизиты.Свойство = &Свойство
| И НоменклатураДополнительныеРеквизиты.Значение = &Значение";
Запрос.УстановитьПараметр("Значение", ЗначениеГарантии);
Запрос.УстановитьПараметр("Свойство", СсылкаНаПВХ_Гарантия);
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
// Вставить обработку выборки ВыборкаДетальныеЗаписи
КонецЦикла;
В библиотеке стандартных подсистем 1С дополнительные реквизиты и сведения включены и активно применяются. Эти механизмы позволяют добавить дополнительный реквизит к объекту метаданных без изменения типовой конфигурации. В публикации хочу продемонстрировать работу дополнительных реквизитов и сведений, их добавление и получение значений.
Краткое описание механизма дополнительных реквизитов и сведений
Пример добавление дополнительного реквизита вручную вы можете посмотреть в публикации Брутто в ТОРГ12, где добавляется новый реквизит «Коэффициент брутто» в справочнике «Номенклатура». Таким образом можно добавлять реквизиты всех известных типов (число, строка, булево, список значений, ссылки на справочники и т.д.) к распространенным справочникам и документам 1С.
Отличие дополнительного реквизита от дополнительного сведения в том, что
- Дополнительные реквизиты – список реквизитов, доступных в форме документа или справочника; причем эти реквизиты хранятся в табличной части объекта, к которому они добавлены;
- Дополнительные сведения – список значений доступных по дополнительной кнопке; причем доп. сведения хранятся в отдельном регистре.
После ввода дополнительного реквизита или сведения 1С, можно создать подключаемую обработку, где считать введенные дополнительные данные и задать необходимую логику обработки данных, в которой использовать этот реквизит или сведение.
Для получения дополнительных данных приведу примеры запросов, в которых получу 1С дополнительные реквизиты и сведения.
Для получения дополнительного сведения использую запрос вида:
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ | ДополнительныеСведения.Свойство, | ДополнительныеСведения.Значение |ИЗ | РегистрСведений.ДополнительныеСведения КАК ДополнительныеСведения |ГДЕ | ДополнительныеСведения.Объект = &Объект"; Запрос.УстановитьПараметр("Объект", СсылкаДокумент);
Для получения дополнительного реквизита использую код вида (пример получения коэффициента брутто в ТОРГ12):
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | НоменклатураДополнительныеРеквизиты.Свойство, | НоменклатураДополнительныеРеквизиты.Значение |ИЗ | Справочник.Номенклатура.ДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизиты |ГДЕ | НоменклатураДополнительныеРеквизиты.Свойство = &Свойство | И НоменклатураДополнительныеРеквизиты.Ссылка = &Ссылка"; Запрос.УстановитьПараметр("Ссылка", СсылкаДокумент); Запрос.УстановитьПараметр("Свойство", ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Коэффициент бруто"));
Теперь вы без труда сможете добавить и получить необходимые дополнительные 1С данные без снятия конфигурации 1С с поддержки и изменения типовой конфигурации. Без сомнения, такой инструмент должен быть в арсенале 1С программиста и активно использоваться в работе.
На чтение 2 мин. Просмотров 635 Опубликовано 15.12.2019
Примеры работы с дополнительными реквизитами.
Как получить значение дополнительного реквизита:
Пример: мы делаем печатную форму документа «Заказ клиента» и хотим вывести на неё значение определённого дополнительного реквизита — «Должность покупателя».
Используем вложенный запрос, в котором соединяем левым соединением таблицу «Дополнительные реквизиты» документа «Заказ клиента» с Планом видов характеристик «Дополнительные реквизиты и сведения». Устанавливаем условие: заголовок дополнительного реквизита должен быть таким – «Должность покупателя». Таблицы соединяем по ссылке на «Заказ клиента».
Получается вот такой запрос:
Также можно использовать метод НайтиПоНаименованию ( «***» ) .
Переменная Ссылка – это ссылка на «Договор контрагента».
Проверка на предмет того, что дополнительный реквизит заполнен:
Как изменить значения дополнительных реквизитов:
Задействуем общий модуль УправлениеСвойствами , который входит в состав БСП.
Юзайте на здоровья!
3 thoughts on “Получить значение дополнительных реквизитов 1С 8”
Спасибо, очень помогло.
К сожалению, на строчке
Запрос.УстановитьПараметр(«Объект», Объект);
спотыкается и отказывается дальше работать
Как редактировать доп реквизиты:
редактировать их состав можно тут:
хранятся они тут:
где типы реквизитов:
получить их в запросе можно так:
НоменклатураДополнительныеРеквизиты.Ссылка КАК Ссылка,
НоменклатураДополнительныеРеквизиты.Ссылка.Код КАК Код,
НоменклатураДополнительныеРеквизиты.Свойство КАК Свойство,
НоменклатураДополнительныеРеквизиты.Значение КАК Значение
Справочник.Номенклатура.ДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизиты
Разберем что откуда берется.
Дополнительные реквизиты заводятся в «ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения» и там же указан тип значений допРеквизитов:
ДополнительныеРеквизитыИСведения.Ссылка КАК Ссылка,
ДополнительныеРеквизитыИСведения.ТипЗначения КАК ТипЗначения
ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения КАК ДополнительныеРеквизитыИСведения
Для справки: Кроме ссыка и типЗначения в «ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения» хранится куча свойств этих реквизитов
Если указан типЗначеня «ДополнительноеЗначение», то виды этих доп значений можем посмотреть тут:
ЗначенияСвойствОбъектов.Владелец КАК Владелец,
ЗначенияСвойствОбъектов.Ссылка КАК Ссылка,
ЗначенияСвойствОбъектов.Владелец.ТипЗначения КАК ВладелецТипЗначения
Справочник.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
а сами значения дополнительных реквизитов хранятся тут:
Google+