1с справочник найти по нескольким реквизитам

Стояла задача найти Конрагента в справочнике по ИНН и КПП (кто знает, что такое обособленное подразделение, поймет). Логика проста — найти по ИНН, сверить КПП, если нет добавить.

Найдено=Справочники.Контрагенты.НайтиПоРеквезиту(«ИНН»,ИскомыйИНН);
Если Найден=Справочники.Контрагенты.ПустаяСсылка() Тогда

//СОЗДАТЬ КОНТРАГЕНТА
Иначе
Если Найдено.КПП=ИскомыйКПП Тогда
Сообщить(«Найден филиал контрагента»);
Иначе
//СОЗДАТЬ ФИЛИАЛ КОНТРАГЕНТА
КонецЕсли;
КонецЕсли;

И тут фэйл, мои дорогие, если в справочнике существует и филиал и ГО, то он кого-то по-любому не найдет. А все кроется в:

Возвращаемое
значение:

Тип: СправочникСсылка.
Ссылка на найденный элемент справочника. Если не существует ни одного
элемента с требуемым значением реквизита, то будет возвращена пустая ссылка.  

Если найдено более одного, функция вернет только первое вхождение…неприятно, однако…

Пошел искать другие пути и набрел на два варианта:
Выборка()

ПараметрПоискаИННОтбор=Новый Структура;ПараметрПоискаИННОтбор.Вставить(«ИНН»,ИскомыйИНН);
Выборка=справочники.контрагенты.Выбрать(,,ПараметрПоискаИННОтбор);
Пока Выборка.Следующий() Цикл
КППНайден=Ложь; 
Если Выборка.КПП=ИскомыйКПП Тогда
Сообщить(«Найден филиал контрагента»);
КППНайден=Истина; 
Прервать;
//Мне дальше не нужно    
КонецЕсли;
КонецЦикла;
Если КППНайден=Ложь Тогда   
 //СОЗДАТЬ ФИЛИАЛ КОНТРАГЕНТА
КонецЕсли;
И второй
Новый Запрос
ЗапросПоискИНН=Новый Запрос(«ЗапросПоискИНН»);ЗапросПоискИНН.Текст=«ВЫБРАТЬ
        |Контрагенты.Ссылка
        |ИЗ
        |Справочник.Контрагенты КАК Контрагенты
        |ГДЕ
        |Контрагенты.ИНН = &ИНН»;
ЗапросПоискИНН.Параметры.Вставить(«ИНН»,ИскомыйКПП);
Выборка=ЗапросПоискИНН.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл     
КППНайден=Ложь;    
Если Выборка.КПП=ИскомыйКПП Тогда     
Сообщить(«Найден филиал контрагента»);     
КППНайден=Истина;     
Прервать;
//Мне дальше не нужно    
КонецЕсли;
КонецЦикла;
Если КППНайден=Ложь Тогда   
//СОЗДАТЬ ФИЛИАЛ КОНТРАГЕНТА
КонецЕсли;
В Запросе можно добавить еще один параметр, чего не сделаешь в Выборке.
Но, у обоих вариантов есть минус, а именно:
Если Выборка.Следующий()=Справочники.Контрагенты.ПустаяСсылка() Тогда
//ЧЕГО ТО ТАМ;
КонецЕсли;
А дальше цикл ПокаЦикл. Блок «если», в этом случае, съест первую итерацию, и потом может кого-то обломать.

Короче, вся эта фигня к тому, что не надо использовать Выборка.Следующий() как условие, можно проверить по Выборка.Количество() или Выборка.Пустой().

поиск по нескольким реквизитам

Я
   Vasus55

30.12.11 — 10:52

как можно осущиствить поиск справочника по нескольким реквизитам(3) и открыть его

  

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

   ZanderZ

1 — 30.12.11 — 10:54

запросом

   Vasus55

2 — 30.12.11 — 10:56

а как именно?

   ZanderZ

3 — 30.12.11 — 10:58

(2) написать запрос

   FIXXXL

4 — 30.12.11 — 10:58

(2) ну запросом же

   Vasus55

5 — 30.12.11 — 10:59

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

   Gesperid

6 — 30.12.11 — 10:59

(5) хы

   ZanderZ

7 — 30.12.11 — 11:00

(5) зачем тебе тогда искать если ты его передавать собрался ?

   FIXXXL

8 — 30.12.11 — 11:00

(5) как твоей душеньке угодно будет

запрос штука такая: хош на этот, хош на тот

   Vasus55

9 — 30.12.11 — 11:00

или все данные справочника?

   FIXXXL

10 — 30.12.11 — 11:00

PS че-нить да выдаст

   NcSteel

11 — 30.12.11 — 11:01

Select RRef From Catalog2345 Where //Твое условие.

   Gesperid

12 — 30.12.11 — 11:03

ВЫБРАТЬ
  Партии.Ссылка КАК Ссылка
Из Справочник.Партии КАК Партии
ГДЕ
  Партии.Жуликов И Партии.Воров
   Vasus55

13 — 30.12.11 — 11:05

вот так накидал

форма=Справочники.КонтакныеЛица.ПолучитьФорму(«ФормаЭлемента»);

организация=ЭлементыФормы.ТабличноеПоле1.ТекущиеДанные.Организация;

ФИО=ЭлементыФормы.ТабличноеПоле3.ТекущиеДанные.ФИО;

Должность=ЭлементыФормы.ТабличноеПоле3.ТекущиеДанные.Должность;

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

Запрос.Текст= «ВЫБРАТЬ

             |    КонтакныеЛица.Код,

             |    КонтакныеЛица.Наименование,

             |    КонтакныеЛица.ФИО,

             |    КонтакныеЛица.Должность,

             |    КонтакныеЛица.ТелефонРабочий,

             |    КонтакныеЛица.ТелефонСотовый,

             |    КонтакныеЛица.EMail,

             |    КонтакныеЛица.Комментарий

             |ИЗ

             |    Справочник.КонтакныеЛица КАК КонтакныеЛица

             |ГДЕ

             |    КонтакныеЛица.Наименование = &Наименование

             |    И КонтакныеЛица.ФИО ПОДОБНО &ФИО

             |    И КонтакныеЛица.Должность = &Должность» ;

запрос.УстановитьПараметр(«Наименование»,организация);

запрос.УстановитьПараметр(«ФИО»,ФИО);

запрос.УстановитьПараметр(«Должность»,Должность);

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

а вот дальше как открыть этот справочник?

   Gesperid

14 — 30.12.11 — 11:06

мля, ты человеческим языком объясни, что тебе сделать-то надо?

   Gesperid

15 — 30.12.11 — 11:07

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

   Vasus55

16 — 30.12.11 — 11:08

ой не то сделал

во так форма=Справочники.КонтакныеЛица.ПолучитьФорму(«ФормаЭлемента»);

организация=ЭлементыФормы.ТабличноеПоле1.ТекущиеДанные.Организация;

ФИО=ЭлементыФормы.ТабличноеПоле3.ТекущиеДанные.ФИО;

Должность=ЭлементыФормы.ТабличноеПоле3.ТекущиеДанные.Должность;

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

Запрос.Текст= «ВЫБРАТЬ

             |    КонтакныеЛица.Ссылка КАК Ссылка

             |ИЗ

             |    Справочник.КонтакныеЛица КАК КонтакныеЛица

             |ГДЕ

             |    КонтакныеЛица.Наименование = &Наименование

             |    И КонтакныеЛица.ФИО ПОДОБНО &ФИО

             |    И КонтакныеЛица.Должность = &Должность» ;

запрос.УстановитьПараметр(«Наименование»,организация);

запрос.УстановитьПараметр(«ФИО»,ФИО);

запрос.УстановитьПараметр(«Должность»,Должность);

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

   Vasus55

17 — 30.12.11 — 11:09

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

   Wobland

18 — 30.12.11 — 11:09

(16) опять не то

   Wobland

19 — 30.12.11 — 11:10

параметры откуда получать надо?

   0xFFFFFF

20 — 30.12.11 — 11:11

(16)

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

Пока Выборка.Следующий() Цикл

Выборка.Ссылка.ПолучитьФорму().Открыть();

прервать;/предполагаем что элемент один

КонецЦикла;

   Wobland

21 — 30.12.11 — 11:12

(20) это что за народное творчество? ;)

Если Выборка.Следующий()

   marvak

22 — 30.12.11 — 11:12

(16)

Тебе надо текущее значение контактного лица в списке справочника получить что ли?

Тогда это будет:

ТекКонтактноеЛицо = ЭлементыФормы.ТабличноеПоле1.ТекущиеДанные;

   Wobland

23 — 30.12.11 — 11:12

+(21) а вообще, предполагать в таком случае плохо

   NcSteel

24 — 30.12.11 — 11:12

форма=Справочники.КонтакныеЛица.ПолучитьФорму(«ФормаЭлемента»); — Что ты хочешь этим сделать ?

И задачу давай описывай полностью.

   0xFFFFFF

25 — 30.12.11 — 11:13

(21) это ты где это прочитал?

   Vasus55

26 — 30.12.11 — 11:14

Поле объекта не обнаружено (Выполнить)

   0xFFFFFF

27 — 30.12.11 — 11:14

(23) может у автора контроль по наименованию и ФИО на уникальность при записи.

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

   0xFFFFFF

28 — 30.12.11 — 11:15

(26) ну Выполнить() конечно же

   0xFFFFFF

29 — 30.12.11 — 11:15

(21) а ну или так

   NcSteel

30 — 30.12.11 — 11:16

(27) Почитай его пример . Он получает форму , потом считывает элементы с формы и пытается найти КонтактноеЛицо. Тебе не кажется что это бред ?

   Vasus55

31 — 30.12.11 — 11:18

в общем сутьь такая есть общая форма  на ней два ТП

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

есть кнопка

по этим трем параметрам мне нужно найти справочник при нажатии кнопки и открыть его,

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

суть понятна?

   NcSteel

32 — 30.12.11 — 11:19

(31) Дай обработку на почту.

   GROOVY

33 — 30.12.11 — 11:21

(31) Значит так:

Пишем запрос:

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

Запрос.текст = «ВЫБРАТЬ Ссылка ИЗ Справочник.НАЗВАНИЕСПРАВОЧНИКА ГДЕ РЕКВИЗИТ1 = &Реквизит1 И РЕКВИЗИТ2 = &Реквизит2 (повторять…)»;

Запрос.Установитьпараметр(«Реквизит1», ЗНАЧЕНИЕ);

Запрос.Установитьпараметр(«Реквизит2», ЗНАЧЕНИЕ);

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

Если Не Результат.Пустой() Тогда

Выборка = Результат.Выбрать(); Выборка.Следующий();

ОткрытьЗначение(Выборка.Ссылка);

КонецЕсли;

  

Vasus55

34 — 30.12.11 — 11:28

заработаааааааааааааааааааааааааало!!!

Всех с НОВЫМ ГОДОМ!!!!

ВСЕГО ВАМ САМОГО НАИЛУЧШЕГО!!!

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

Автор Keen Gaff, 20 окт 2020, 19:32

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

Доброго дня.
Платформа 8.3.16, конфигурация самописная + БСП 3.
Пытаюсь найти запись в справочнике запросом по нескольким реквизитам.

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

Результат пустой… не находит (хотя точно есть)).
Консоль запросов тоже не находит.
В чем может быть беда?


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

Использую учебную платформу 1С:Предприятие 8.3


Цитата: Keen Gaff от 20 окт 2020, 19:32
Доброго дня.
Платформа 8.3.16, конфигурация самописная + БСП 3.
Пытаюсь найти запись в справочнике запросом по нескольким реквизитам.
Запрос1.Текст =
"ВЫБРАТЬ
| Показатели.Ссылка КАК Ссылка
|ИЗ
| Справочник.Показатели КАК Показатели
|ГДЕ
| Показатели.Наименование = &Наименование
| И Показатели.ДопустимыйУровень = &ДопустимыйУровень
| И Показатели.НДНаИзмерения = &НДНаИзмерения
| И Показатели.ГруппаОбразцов = &ГруппаОбразцов";
Запрос1.УстановитьПараметр("Наименование", Показатель); //строка
Запрос1.УстановитьПараметр("ДопустимыйУровень", ДопУровень); //строка
Запрос1.УстановитьПараметр("НДНаИзмерения", НДНаИзмерения); //справочник.ссылка
Запрос1.УстановитьПараметр("ГруппаОбразцов", ГруппаОбразца); //справочник.ссылка

Результат пустой… не находит (хотя точно есть)).
Консоль запросов тоже не находит.
В чем может быть беда?

Показатель.Наименование = &Наименование — это очень скользкий параметр. Ошибетесь в немного и ни чего уже не найдено, используйте уж тогда ПОДОБНО. Так же и с Показатели.ДопустимыйУровень = &ДопустимыйУровень.


Спасибо, попробовал.
в консоли находит по трем (если не использовать параметр «НДНаИзмерения»)
по  одному параметру «НДНаИзмерения» тоже не находит… буду смотреть что с ним не так…

Добавлено: 20 окт 2020, 22:34


Цитата: DmitriyF от 20 окт 2020, 19:41
Показатель.Наименование = &Наименование — это очень скользкий параметр…

дублирование убрал… не помогло
выяснилось (через консоль запросов)  странно работает условие по реквизиту ссылочного типа НДНаИзмерение,
выбираю одну запись справочника, запрос срабатывает, если другую то пусто… как так?


При работе с таблицами справочника есть методы НайтиПоРеквизиту и НайтиПоКоду в итоге получаем найденную запись и делаем с ней что хотим. Вопрос как найти получить запись поиском по нескольким реквизитам? Т.е. сделать не Выборку, а именно установить курсор на найденной по нескольким реквизитам записи?

1С 8.2 Мне Запрос не нужен. Необходимо получить для редактирования искомую строку.

по идейным соображениям запрос не нужен?

+4 разрешаю искать перебором, раз запрос не нужен

ну так получи. В чём вопрос то? Есть такой метод… НайтиСтроки…

самое оптимальное запрос с параметром подобно

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

подобно — ни разу не отпимально

ещё в ТЗ. пробегись по выборке, засунь всё в ТЗ, потом ищи строки. раз уж религия такая

а… в справочнике… Запрос. Или в лес. Ну или на Привоз

сам запутался в своём СП. Какая ирония :)

Запросом можно искать, но много писанины (создать запрос, по том перебирать и искать по коду). Этоже самое к примеру в Фоксе можно сделать одной командой (типа Locate for)

зато работает как надо. купи гуся

Выборка конечно лучше получая все поля объекта и помещая в ОЗУ. А запрсом получаем нужные поля. Если поиск по нескольким реквизитам и по трем набранным буквам сделать поиск с помощью объектной модели как то затруднительно.

зачем искать по коду? достаточно правильно создать запрос, тем более текст запроса достаточно «накликать» в конструкторе запросов

потом перебирать? срочно дружись с запросами, у тебя пусто в голове

если ты не любишь Запросы, ты не можешь называть себя одинесником

я! я не люблю! семёрочные. у меня от них начинает кружиться голова и возникает необъяснимое чувство тревоги и страха

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

если ты боишься запросов, выпей 50 грамм. Алкоголь притупляет чувство страха

500 будет в самый раз для притупления. только я ж работать не смогу

а ты ещё и работаешь? О_о

поработаешь тут с вами. я в отпуске загораю

бить надо за найтипоКоду и поРеквизиту. Больше ими не пользуйся

Я может чёт не понимаю. После запроса пишем: Выборка=РезультатЗапроса.Выбрать; Выборка — это же виртуальная таблица, а как мне получить реальную запись справочника, не используя Справочник.НайтиПоКоду(Выборка.Код)

Выборка это скорее курсор SQL (ближе к нему) Выборка.Ссылка — если есть конечно поле такое в запросе, дает ссылку на запись справочника

За Выборка.Ссылка спасибо,это понятно. Я не очень 1С — ник. Так что плаваю в структуре языка. А ППЦ в голове у Defender aka

Тэги: 1С 8

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

  1. Уважаемые Гуру 1С 8.1!

    В 1С второй день.

    Для меня все понятно, когда используется поиск только по одному реквизиту (полю) справочника.
    Пример:

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

    А каков самый оптимальный способ поиска например по 2,3-м полям?

    Ведь для справочника Договоров Контрагентов важно как минимум поставить условие по
    1)Организация
    2)Владелец — контрагент

    плиз хелп…
    неужели SQL запрос? или все намного проще?


  2. tirk

    Offline

    tirk
    Опытный в 1С

    Регистрация:
    1 сен 2008
    Сообщения:
    1.142
    Симпатии:
    0
    Баллы:
    26

    Если чего то не знаешь пользуйся встроенной справкой — Ну ОЧЕНЬ полезная чтука…
    а пообще тебе поможет
    Отбор = Новый Структура;

    Или SQL зарпос… очень простой кстати ) Так что выбирайте путь и пробуйте….
    для просто ты написания запроса.. (кстати там есть встроенные уже примеры по справочникам и докам)… скачай обработку «Консоль отчетов»..

    Вложения:


  3. BabySG

    Offline

    BabySG
    Администраторы
    Команда форума
    Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    18
    Баллы:
    29

    Настойчиво рекомендую пользоваться запросом. а не объектной моделью.

    Разница в скорости и удобстве — на порядок. И это даже не вникая в тонкости работы клиент-сервера :)


  4. Эмин

    Offline

    Эмин
    Руководитель проектов

    Регистрация:
    25 май 2007
    Сообщения:
    1.178
    Симпатии:
    1
    Баллы:
    29

    Только запрос, конструктором строится вместе с написанием нужных условий за 30 секунд.


1C-pro.ru - форум по 1С:Предприятию 7.7, 8.0, 8.1, 8.2, 8.3

262 / 218 / 94

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

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

1

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

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


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

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

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

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

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

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

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



0



1505 / 948 / 364

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

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

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



1505 / 948 / 364

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

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

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,159

Записей в блоге: 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,159

Записей в блоге: 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,159

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

23.09.2021, 13:15

11

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



0



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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Понравилась статья? Поделить с друзьями:
  • 1с справочник поиск по нескольким реквизитам
  • Яндекс такси бизнес класс отзывы пассажиров
  • Boxberry время работы в новогодние праздники
  • 1с только просмотр для формы кроме реквизита
  • Яндекс такси подключиться к бизнес аккаунту