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

Поиск по табличной части справочника

Я
   Vladal

16.06.10 — 09:53

Есть строка, которая содержит наименование элемента табличной части спраовчника.

Как найти этот элемент?

Сам элемент справочника я нашел:

Контрагент = Справочники.Контрагенты.НайтиПоНаименованию(Фамилия, Ложь, ГруппаКонтрагентов);

А вот как теперь найти реквизит табличной части Сведения по его наименованию?

  

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

   XLife

1 — 16.06.10 — 09:55

запросом

   Alex375

2 — 16.06.10 — 09:55

поиск в ТЧ элемента/документа можно выполнить с помощью «Найти». А так же можно запросом воспользоваться

   Vladal

3 — 16.06.10 — 09:56

(1) и (2) Есть пример?

   Vladal

4 — 16.06.10 — 10:18

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

//ТабЧасть = Контрагент.ЗатратыНаСвязь;

ТабЧасть = Контрагент.ЗатратыНаСвязь;

НомерСтрокиКонтрагента = ТабЧасть.Найти(НомерАбонента);

Если НомерСтрокиКонтрагента=0 Тогда

   // Нет такого номера, создадим

   НоваяСтрока = Контрагент.ЗатратыНаСвязь.Добавить();

   НоваяСтрока.НомерАбонента = НомерАбонента;

   НоваяСтрока.ТарифныйПлан = ТарифныйПлан;

   НоваяСтрока.Лимит = Лимит;

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

КонецЕсли;

Не работает.

   Vladal

5 — 16.06.10 — 10:27

А не работает, потому что Найти возвращает Неопределено!

Правильно:

НомерСтрокиКонтрагента = ТабЧасть.Найти(НомерАбонента);

Если НомерСтрокиКонтрагента=Неопределено Тогда

   // Нет такого номера, создадим

   hhhh

6 — 16.06.10 — 10:30

(5) а тебе не приходило в голову глянуть в синтакс-помощнике, как правильно обратиться к методу Найти() ??

   Vladal

7 — 16.06.10 — 11:10

(6) А что, помогает?

   Vladal

8 — 16.06.10 — 11:11

(6) Если про результат — то привычка семерочная.

   Ненавижу 1С

9 — 16.06.10 — 11:11

(7) да, но не всем

   Vladal

10 — 16.06.10 — 18:21

Сделал запросом:

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

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

«ВЫБРАТЬ

|    Контрагенты.Ссылка КАК Контрагент,

|    Контрагенты.ЗатратыНаСвязь.(

|        Ссылка,

|        НомерСтроки,

|        НомерАбонента,

|        СвойЧужой,

|        ДополнительныйТариф,

|        ТарифныйПлан,

|        Лимит

|    )

|ИЗ

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

|ГДЕ

|    Контрагенты.ЗатратыНаСвязь.НомерАбонента = &НомерАбонента»;

Запрос.УстановитьПараметр(«НомерАбонента», НомерАбонента);

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

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

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

   Контрагент = Выборка.Контрагент;

   СвойЧужой = Выборка.СвойЧужой; // Вот тут и спотыкается — поле объекта не обнаружено, говорит…

   ДополнительныйТариф = Выборка.ДополнительныйТариф;

   ТарифныйПлан = Выборка.ТарифныйПлан;

   Лимит = Выборка.Лимит;

Иначе

   Сообщить(«Не найден контрагент по номеру «+НомерАбонента+» на сумму «+Начислено);

   Продолжить;

КонецЕсли;

  

Vladal

11 — 16.06.10 — 18:29

(9) и (6) Ответ был дан в духе вопроса.

Я же не спросил, давайте пиписками меряться, кто больше знает, потому и посыл к синтакс-помощнику был неуместен.

Компьютер — устройство разработанное для ускорения и автоматизации человеческих ошибок.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Собственно Есть справочник «Пилоты», в нём табличная часть «Магазины» где одна колонка «Клиенты» — по ней надо провести поиск, найти если есть совпадающего с тем что в определённом реквизите на форме дока «Обращение» и получить ссылку на справочник.
И потом из этого справочника дёрнуть на форму в виде выпадающего списка значения другой табличной части — Ответственные.

Я так понимаю, мне нужен цикл который пробежится по всем справочникам, а внутри чтоб пробегался по строкам табицы (Найти?), чтобы найти подходящего Клиента. Потом получаю ссылку на справочник (через НайтиПоРеквизиту?) и получаю строки табчасти Ответственные (через НайтиСТроки?..)
Через какие методы это делать? А то ничего не подгружается через . и всё крашится

Без части «вывести табчасть найденного справочника на форму» чёт как-то так О_о

1C
1
2
3
4
5
6
7
8
    СписокПилотов = Новый СписокЗначений;
    Для каждого Спр из Справочники.ПилотныеПроекты
        ИскомыйСпр = Спр.Магазины.НайтиПоРеквезиту("Клиент",Элементы.Клиент));
        Если ИскомыйСпр<>Справочники.ПилотныеПроекты.ПустаяСсылка() Тогда
            СписокПилотов.Добавить(ИскомыйСпр);
        КонецЕсли;
    конеццикла;       
    Элементы.Пилоты = СписокПилотов;

Платформа 8.3, УФ .-.

  • АКТУАЛЬНЫЕ РЕЛИЗЫ 1С
  • ПРИМЕРЫ КОДА НА ПЛАТФОРМЕ 1С
Справочники в 1С 8.x
  • Как создать элемент (группу) справочника?
  • Как найти элемент справочника?
  • Как удалить элемент справочника?
  • Как перебрать элементы справочника?
  • Как выбрать все элементы из определенной группы?
  • Как перебрать элементы подчиненного справочника с помощью запроса?
  • Как перебрать элементы подчиненного справочника с помощью выборки справочника?
  • Как открыть форму списка (элемента) справочника?
  • Как добавить запись в табличную часть элемента справочника?
  • Как удалить строки из табличной части справочника?
  • Как перебрать строки табличной части справочника?
  • Как создать элемент в нужной группе?
  • Как узнать, есть ли у текущего элемента подчиненные?
  • Как узнать количество подчиненных элементов у выбранного элемента справочника?
  • Как узнать количество подчиненных элементов у выбранного элемента справочника, если количество подчиненных справочников больше чем один?
  • Как получить всех родителей выбранного элемента справочника?
  • Как получить запросом «полный» код элементов справочника, если тип кода — Строка?
  • Как получить все элементы справочника, содержащие в наименовании определенную подстроку, со всей иерархией, в которую они входят?
  • Как найти все элементы справочника, в которых не заполнен строковый реквизит?
  • Как перенести все элементы справочника «Контрагенты» из одной группы в другую?
  • Как организовать программный выбор элемента справочника?
  • Как сохранить фотографию сотрудника в справочнике «Сотрудники»?

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

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

// Установить другие реквизиты.  
....

НовыйЭлемент.Записать(); 

НовыйЭлемент = Справочники.Банки.СоздатьЭлемент(); 

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

НовыйЭлемент.Наименование = "АКБ"; 
НовыйЭлемент.Код = "000000011"; 
НовыйЭлемент.Родитель = Родитель; 

// Установить другие реквизиты.  
....

НовыйЭлемент.Записать(); 

НоваяГруппа = Справочники.Номенклатура.СоздатьГруппу(); 

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

НоваяГруппа.Наименование = "Модельная обувь"; 
НоваяГруппа.Родитель = Родитель; 

// Установить другие реквизиты.  
....

НоваяГруппа.Записать(); 


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

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

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

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

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

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

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

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

УдаляемыйЭлемент.УстановитьПометкуУдаления(Истина);         
Как перебрать элементы справочника?

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

	// Обращение к другим данным справочника. 
КонецЦикла; 

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

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

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

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

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

Запрос.УстановитьПараметр("Родитель", ПолеВводаРодитель); 

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

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

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


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

Запрос.УстановитьПараметр("Родитель", ПолеВводаРодитель); 

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

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

Процедура ПереборПодчиненыхЭлементов(Контрагент) 

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

	Запрос.УстановитьПараметр("Владелец", Контрагент); 

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

	Пока Выборка.Следующий() Цикл 
		ОчереднойПодчиненый = Выборка.Ссылка; 
	КонецЦикла; 

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

Процедура ПереборПодчиненыхЭлементов(Контрагент) 

	// Получить выборку по указанному контрагенту. 
	Выборка = Справочники.КонтактныеЛица.Выбрать( , Контрагент); 

	Пока Выборка.Следующий() Цикл 
		ОчереднойПодчиненый = Выборка.Ссылка; 
	КонецЦикла; 

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

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

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

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

// Заполнить реквизиты. 
НоваяСтрока.ВидДеятельности = ПолеВводаВидДеятельности; 

ЭлементОбъект.Записать();          
Как удалить строки из табличной части справочника?

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


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

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

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

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

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

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

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

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

	Группа.Код = КодГруппы; 
	Группа.Наименование = "Загруженные"; 
	Группа.Записать(); 

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

	// Предусмотреть прерывание алгоритма.

КонецЕсли; 

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

// Реквизиты заполняются в соответствии с задачей.  

Спр.Родитель = Группа.Ссылка; 
Спр.Записать(); 


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


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

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

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

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

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

Спр.Родитель = Родитель.Ссылка; 
Спр.Записать();          
Как узнать, есть ли у текущего элемента подчиненные?

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


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

Запрос.УстановитьПараметр("Владелец", Владелец); 

Если НЕ Запрос.Выполнить().Пустой() Тогда 
	// Есть подчиненные элементы!
КонецЕсли;           
Как узнать количество подчиненных элементов у выбранного элемента справочника?

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


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

Запрос.УстановитьПараметр("Владелец", Владелец); 

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

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

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

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

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

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

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


Для Каждого ТекущийРодитель Из МассивРодителей Цикл 
	// Работа с текущим родителем. 
КонецЦикла;


ВЫБРАТЬ 
	Номенклатура.Ссылка КАК Ссылка 
ИЗ 
	Справочник.Номенклатура КАК Номенклатура 
ГДЕ 
	Номенклатура.Ссылка = &Ссылка 
ИТОГИ ПО 
	Ссылка ТОЛЬКО ИЕРАРХИЯ 




ТекущийЭлементНоменклатуры = ЭлементНоменклатура; 

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

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

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

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

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

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

Запрос.УстановитьПараметр("ЧастьНаименования", "%" + ПолеВводаПодстрока + "%");          
Как найти все элементы справочника, в которых не заполнен строковый реквизит?

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


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

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

Запрос.УстановитьПараметр("СтарыйРодитель", СтарыйРодитель); 

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


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

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

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


Процедура ОбработкаВыбора(ЗначениеВыбора, Источник) 

	ПолученноеЗначение = ЗначениеВыбора; 
	// Дальнейшая обработка значения.  

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


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


Процедура ПолеВводаНачалоВыбора(Элемент, СтандартнаяОбработка) 

	// Запретить стандартную обработку. 
	СтандартнаяОбработка = Ложь; 

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

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

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


Процедура ПолеВводаОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) 

	// Отключить стандартную обработку (при необходимости). 
	СтандартнаяОбработка = Ложь; 

	ПолученноеЗначение = ВыбранноеЗначение; 
	// Дальнейшая обработка значения.  

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

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

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

Задайте вопрос программисту 1С

 +9 

   

Распечатать

Найти строку в табличной части документа

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

Код 1C v 8.2 УП

 &НаСервере
Процедура НайтиТовар(СправочникНоменклатураСсылка)

Перем Отбор, НайденноеЗначение, Сч;

Отбор = Новый Структура();
Отбор.Вставить("Номенклатура", СправочникНоменклатураСсылка);
НайденноеЗначение = Объект["ТЧНоменклатура"].НайтиСтроки(Отбор);

Если НайденноеЗначение.Количество() > 0 Тогда

Сч = 1;
Пока НайденноеЗначение.Количество() >= Сч Цикл
Сообщить(НайденноеЗначение[0].Наименование);
Сч = Сч + 1;
КонецЦикла;

КонецЕсли;

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


Код 1C v 8.х

  // найти строку в ТЧ Документа
Отбор = Новый Структура();
Отбор.Вставить("Номенклатура", СправочникНоменклатураСсылка);
НайденноеЗначение = ТЧНоменклатура.НайтиСтроки(Отбор);

// Необходимо найти МассивСтрок, состоящий из строк табличной части документа по 2 значениям.
СтруктураДляПоиска = Новый Структура;
структураДляПоиска.Вставить("Артикул",Артикул);
структураДляПоиска.Вставить("КодПартии",СтруктураПараметров.КодПартии);

МассивСтрок = ДокументДляДополнения.Товары.НайтиСтроки(структураДляПоиска);


Выгружаем колонку

Код 1C v 7.x

 ВыгрузитьТабличнуюЧасть("Товар")

Далее через НайтиЗначение ищем необходимую строку

Функция позволяет найти ссылку на объект любого типа в конфигурации ERP2.0 (либо любой другой построенной на БСП).
Поиск может выполняться по реквизитам основной таблицы, значениям дополнительных реквизитов по табличной части «Дополнительные реквизиты», значениям доп. сведений (регистр сведений «ДополнительныеСведения»).

Используется объектная модель работы с запросом (СхемаЗапроса). Поддерживается в версиях платформы: 8.3.5 и выше.
Параметры:

Имя параметра Тип Описание
ИмяТаблицы Строка Имя таблицы, по которой осуществляется поиск. Пример: «Справочник.Номенклатура»
СтруктураРеквизитов Структура В качестве ключа передается имя реквизита основной таблицы, в качестве значения — значение реквизита
СоответствиеДопРеквизитов Соответствие В качестве ключа передается ссылка на доп. реквизит — элемент плана вида характеристик «ДополнительныеРеквизитыИСведения», в качестве значения — значение реквизита
СоответствиеДопСведений Соответствие В качестве ключа передается ссылка на доп. сведение — элемент плана вида характеристик «ДополнительныеРеквизитыИСведения», в качестве значения — значение доп. сведения

Имя параметра Тип Описание
ИмяТаблицы Строка Имя таблицы, по которой осуществляется поиск. Пример: «Справочник.Номенклатура»
СтруктураРеквизитов Структура В качестве ключа передается имя реквизита основной таблицы, в качестве значения — значение реквизита
СоответствиеДопРеквизитов Соответствие В качестве ключа передается ссылка на доп. реквизит — элемент плана вида характеристик «ДополнительныеРеквизитыИСведения», в качестве значения — значение реквизита
СоответствиеДопСведений Соответствие В качестве ключа передается ссылка на доп. сведение — элемент плана вида характеристик «ДополнительныеРеквизитыИСведения», в качестве значения — значение доп. сведения
Функция СсылкаНаОбъектПоРеквизитам(ИмяТаблицы, СтруктураРеквизитов = Неопределено, СоответствиеДопРеквизитов = Неопределено, СоответствиеДопСведений = Неопределено)
 
    ИмяТаблицыВЗапросе = СтрЗаменить(ИмяТаблицы, ".", "");
 
    СхемаЗапроса = Новый СхемаЗапроса;
 
    ЗапросПакета    = СхемаЗапроса.ПакетЗапросов[0];
    ОператорВыбора    = ЗапросПакета.Операторы[0];
 
    Если СтруктураРеквизитов <> Неопределено Тогда
 
        ИсточникСправочник    = ОператорВыбора.Источники.Добавить(ИмяТаблицы, ИмяТаблицыВЗапросе);
 
        ОператорВыбора.ВыбираемыеПоля.Добавить(ИмяТаблицыВЗапросе + ".Ссылка");
 
        Для Каждого КлючИЗначение Из СтруктураРеквизитов Цикл
            ОператорВыбора.Отбор.Добавить(ИмяТаблицыВЗапросе + "." + КлючИЗначение.Ключ + " = &" + КлючИЗначение.Ключ);
        КонецЦикла;
 
        Если СоответствиеДопРеквизитов <> Неопределено
            ИЛИ СоответствиеДопСведений <> Неопределено Тогда
 
            ЗапросПакета.ТаблицаДляПомещения = "ОсновнаяТаблица";
 
            ЗапросПакета    = СхемаЗапроса.ПакетЗапросов.Добавить(Тип("ЗапросВыбораСхемыЗапроса"));
            ОператорВыбора    = ЗапросПакета.Операторы[0];
 
        КонецЕсли;
 
    КонецЕсли;
 
    Если СоответствиеДопРеквизитов <> Неопределено Тогда
 
        Для Сч = 0 По СоответствиеДопРеквизитов.Количество()-1 Цикл
 
            ИсточникСправочник    = ОператорВыбора.Источники.Добавить(ИмяТаблицы + ".ДополнительныеРеквизиты", ИмяТаблицыВЗапросе + "ДополнительныеРеквизиты");
 
            ОператорВыбора.ВыбираемыеПоля.Добавить(ИмяТаблицыВЗапросе + "ДополнительныеРеквизиты.Ссылка");
 
            ОператорВыбора.Отбор.Добавить(ИмяТаблицыВЗапросе + "ДополнительныеРеквизиты.Свойство = &Свойство" + Формат(Сч+1, "ЧГ=0"));
            ОператорВыбора.Отбор.Добавить(ИмяТаблицыВЗапросе + "ДополнительныеРеквизиты.Значение = &Значение" + Формат(Сч+1, "ЧГ=0"));
 
            Если СтруктураРеквизитов <> Неопределено Тогда
 
                ИсточникОсновнаяТаблица = ОператорВыбора.Источники.Добавить("ОсновнаяТаблица", "ОсновнаяТаблица");
 
                Соединение = ИсточникОсновнаяТаблица.Соединения.Добавить(ИсточникСправочник);
                ИсточникОсновнаяТаблица.Соединения[0].ТипСоединения = ТипСоединенияСхемыЗапроса.Внутреннее;
 
            КонецЕсли;
 
            Если СоответствиеДопРеквизитов.Количество()> 1
                ИЛИ СоответствиеДопСведений <> Неопределено Тогда
 
                ЗапросПакета.ТаблицаДляПомещения = "ДопРеквизит" + Формат(Сч+1, "ЧГ=0");
 
                ЗапросПакета    = СхемаЗапроса.ПакетЗапросов.Добавить(Тип("ЗапросВыбораСхемыЗапроса"));
                ОператорВыбора    = ЗапросПакета.Операторы[0];
 
            КонецЕсли;
 
        КонецЦикла;
 
    КонецЕсли;
 
    Если СоответствиеДопСведений <> Неопределено Тогда
 
        Для Сч = 0 По СоответствиеДопСведений.Количество()-1 Цикл
 
            ИсточникРегистр    = ОператорВыбора.Источники.Добавить("РегистрСведений.ДополнительныеСведения", "ДополнительныеСведения");
 
            ОператорВыбора.ВыбираемыеПоля.Добавить("ДополнительныеСведения.Объект");
            ЗапросПакета.Колонки[0].Псевдоним = "Ссылка";
 
            ОператорВыбора.Отбор.Добавить("ДополнительныеСведения.Свойство = &Сведение" + Формат(Сч+1, "ЧГ=0"));
            ОператорВыбора.Отбор.Добавить("ДополнительныеСведения.Значение = &ЗначениеСведения" + Формат(Сч+1, "ЧГ=0"));
 
            Если СтруктураРеквизитов <> Неопределено Тогда
 
                ИсточникОсновнаяТаблица = ОператорВыбора.Источники.Добавить("ОсновнаяТаблица", "ОсновнаяТаблица");
 
                Соединение = ИсточникОсновнаяТаблица.Соединения.Добавить(ИсточникРегистр, "ОсновнаяТаблица.Ссылка = ДополнительныеСведения.Объект");
                ИсточникОсновнаяТаблица.Соединения[0].ТипСоединения = ТипСоединенияСхемыЗапроса.Внутреннее;
 
            КонецЕсли;
 
            Если СоответствиеДопСведений.Количество()> 1
                ИЛИ СоответствиеДопРеквизитов <> Неопределено Тогда
 
                ЗапросПакета.ТаблицаДляПомещения = "ДопСведение" + Формат(Сч+1, "ЧГ=0");
 
                ЗапросПакета    = СхемаЗапроса.ПакетЗапросов.Добавить(Тип("ЗапросВыбораСхемыЗапроса"));
                ОператорВыбора    = ЗапросПакета.Операторы[0];
 
            КонецЕсли;
 
        КонецЦикла;
 
    КонецЕсли;
 
    Если СоответствиеДопРеквизитов <> Неопределено
        И (СоответствиеДопРеквизитов.Количество() <> 1 ИЛИ СоответствиеДопСведений <> Неопределено) Тогда
 
        ИсточникВТ1 = ОператорВыбора.Источники.Добавить("ДопРеквизит1", "ДопРеквизит1");
 
        ОператорВыбора.ВыбираемыеПоля.Добавить("ДопРеквизит1.Ссылка");
 
        Для Сч = 1 По СоответствиеДопРеквизитов.Количество()-1 Цикл
 
            СчСтрока = Формат(Сч+1, "ЧГ=0");
 
            ИсточникВТ = ОператорВыбора.Источники.Добавить("ДопРеквизит" + СчСтрока, "ДопРеквизит" + СчСтрока);
            Соединение = ИсточникВТ1.Соединения.Добавить(ИсточникВТ, "ДопРеквизит1.Ссылка = ДопРеквизит" + СчСтрока + ".Ссылка");
            ИсточникВТ1.Соединения[ИсточникВТ1.Соединения.Количество()-1].ТипСоединения = ТипСоединенияСхемыЗапроса.Внутреннее;
 
        КонецЦикла;
 
    КонецЕсли;
 
    Если СоответствиеДопСведений <> Неопределено
        И (СоответствиеДопСведений.Количество()> 1 ИЛИ СоответствиеДопРеквизитов <> Неопределено) Тогда
 
        Если СоответствиеДопРеквизитов = Неопределено Тогда
 
            ИсточникВТ1 = ОператорВыбора.Источники.Добавить("ДопСведение1", "ДопСведение1");
 
            ОператорВыбора.ВыбираемыеПоля.Добавить("ДопСведение1.Ссылка");
 
            СтартовыйИндекс        = 1;
            ИмяПервойТаблицы    = "ДопСведение1";
 
        Иначе
 
            СтартовыйИндекс        = 0;
            ИмяПервойТаблицы    = "ДопРеквизит1";
 
        КонецЕсли;
 
        Для Сч = СтартовыйИндекс По СоответствиеДопСведений.Количество()-1 Цикл
 
            СчСтрока = Формат(Сч+1, "ЧГ=0");
 
            ИсточникВТ = ОператорВыбора.Источники.Добавить("ДопСведение" + СчСтрока, "ДопСведение" + СчСтрока);
            Соединение = ИсточникВТ1.Соединения.Добавить(ИсточникВТ, ИмяПервойТаблицы + ".Ссылка = ДопСведение" + СчСтрока + ".Ссылка");
            ИсточникВТ1.Соединения[ИсточникВТ1.Соединения.Количество()-1].ТипСоединения = ТипСоединенияСхемыЗапроса.Внутреннее;
 
        КонецЦикла;
 
    КонецЕсли;
 
    Запрос = Новый Запрос;
 
    Запрос.Текст = СхемаЗапроса.ПолучитьТекстЗапроса();
 
    Если СтруктураРеквизитов <> Неопределено Тогда
 
        Для Каждого КлючИЗначение Из СтруктураРеквизитов Цикл
            Запрос.УстановитьПараметр(КлючИЗначение.Ключ, КлючИЗначение.Значение);
        КонецЦикла;
 
    КонецЕсли;
 
    Если СоответствиеДопРеквизитов <> Неопределено Тогда
 
        Сч = 1;
 
        Для Каждого КлючИЗначение Из СоответствиеДопРеквизитов Цикл
 
            СчСтрока = Формат(Сч, "ЧГ=0");
 
            Запрос.УстановитьПараметр("Свойство" + СчСтрока, КлючИЗначение.Ключ);
            Запрос.УстановитьПараметр("Значение" + СчСтрока, КлючИЗначение.Значение);
 
            Сч = Сч + 1;
 
        КонецЦикла;
 
    КонецЕсли;
 
    Если СоответствиеДопСведений <> Неопределено Тогда
 
        Сч = 1;
 
        Для Каждого КлючИЗначение Из СоответствиеДопСведений Цикл
 
            СчСтрока = Формат(Сч, "ЧГ=0");
 
            Запрос.УстановитьПараметр("Сведение" + СчСтрока, КлючИЗначение.Ключ);
            Запрос.УстановитьПараметр("ЗначениеСведения" + СчСтрока, КлючИЗначение.Значение);
 
            Сч = Сч + 1;
 
        КонецЦикла;
 
    КонецЕсли;
 
    РезультатЗапроса = Запрос.Выполнить();
 
    Если РезультатЗапроса.Пустой() Тогда
        Возврат Неопределено;
    КонецЕсли;
 
    Выборка = РезультатЗапроса.Выбрать(); Выборка.Следующий();
 
    Возврат Выборка.Ссылка;
 
КонецФункции

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

Найти строку по заданным параметрам

Для решения задачи поиска строк в ТЧ будем использовать функцию НайтиСтроки.

Синтаксис: НайтиСтроки(<ПараметрыОтбора>)
Параметры: <ПараметрыОтбора> (обязательный)
Тип: Структура. Задает условия поиска: ключ структуры определяет имя колонки, по которой будет осуществляться поиск, а значение структуры – искомое значение.
Возвращаемое значение: Массив из строк табличной части, соответствующих заданному условию поиска.
Замечание! Массив хранит ссылки на строки табличной части, то есть при изменении строки в табличной части, значение в массиве тоже будет изменено.
Описание: Осуществляет поиск строк табличной части, соответствующих заданному условию поиска.

Первый вариант, который встречается в работе найти строки с определенным значением в колонке.

Найти все строки ТЧ с определенным значением задачи.

  1. Создадим структуру отбор и установим значение задачи
  2. Применим функцию НайтиСтроки к нужной табличной части
  3. В переменной МассивНайденныхСтрок будут ссылки на строки таблицы которые содержат нужную нам задачу
Отбор = Новый Структура("Задача",ДокументСсылкаЗадача);
МассивНайденныхСтрок = ТЧПодзадачи.НайтиСтроки(Отбор);

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

Найти все строки ТЧ с определенным значением номенклатуры и количества

  1. Создаем структуру для отбора
  2. Устанавливаем два параметра поиска (если параметров больше устанавливаем столько, сколько надо)
  3. Ищем в таблице нужные строки
  4. Получаем переменную МассивНайденныхСтрок с нужными данными
Отбор = Новый Структура;
Отбор.Вставить("Номенклатура",СправочникНоменклатураСсылка);
Отбор.Вставить("Количество",ИскомоеКоличество);

МассивНайденныхСтрок = РеализацияТовароУслуг.Товары.НайтиСтроки(Отбор);   

В примере номер три реализуем процедуру которая сообщит все цены номенклатуры в определенном документе.

Реализовать процедуру которая сообщит цену на товар в поступлениях, реализациях и счетах на выбор пользователя.

Порядок действий будет похож на прошлые два примера:

  1. Создаем отбор и устанавливаем значения поиска
  2. Ищем в табличной части
  3. Сообщаем все цены которые нашли
&НаСервере
Процедура НайтиЦеныНаТовар(Документ,СправочникНоменклатураСсылка)
	Отбор = Новый Структура("Номенклатура", СправочникНоменклатураСсылка);
	МассивНайденныхСтрок = Документ["Товары"].НайтиСтроки(Отбор);
	Для Каждого ЭлМас Из  МассивНайденныхСтрок Цикл
		Сообщить(ЭлМас.Цена);
	КонецЦикла;
КонецПроцедуры   

В 1с существует метод Найти(), это устаревший метод для его не стоит использовать.

Дополнительные материалы по теме:

  1. Заметки и учебные примеры по программированию у меня на сайте ищите – тут
  2. Интересная статья про НайтиСтроки – тут

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