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

 +9 

   

Распечатать

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

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

Код 1C v 8.2 УП

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

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

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

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

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

КонецЕсли;

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


Код 1C v 8.х

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

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

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


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

Код 1C v 7.x

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

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

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

Код 1C v 8.2 УП

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

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

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

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

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

КонецЕсли;

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


Код 1C v 8.х

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

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

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


Купон на ОЗОН за покупку программ 1С


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

Код 1C v 7.x

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

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

Информация взята с сайта http://helpf.pro

Подпишитесь на нашу рассылку новостей

Хотите узнать больше по этому вопросу?

Подпишитесь на нашу рассылку новостей

Подписаться

Чтобы задать вопрос или предложить тему статьи, нажмите на кнопку ниже:

Предложить статью

Как найти документ по нужному товару в его табличной части? Строка в ТЧ одна.

Автор ToryFree, 20 июл 2020, 12:06

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

Вопрос от новичка в 8.3).
Как правильно написать запрос, чтобы найти документ определенного вида (Розница 3.2, документ УстановкаЦенНоменклатуры), в табличной части которого есть единственная строка с установкой розничной цены нужного товара?


не надо искать документ Установка цены! (а если он помечен на удаление, или не проведен, или их несколько, или еще чего)
установленную этим документом цену, надо брать из Регистра Цены номенклатуры (как он там у вас называется)!

используйте правильный подход к применению механизмов 1С!!! 

если помогло нажмите: Спасибо!


Цитата: LexaK от 20 июл 2020, 13:53
не надо искать документ Установка цены! (а если он помечен на удаление, или не проведен, или их несколько, или еще чего)
установленную этим документом цену, надо брать из Регистра Цены номенклатуры (как он там у вас называется)!

используйте правильный подход к применению механизмов 1С!!!

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

Для справки: общая задача — программно пометить на удаление программно же созданный товар-комплект и убрать все, к нему относящееся,тоже созданное программно).
Это:
пометить на удаление документы СборкаТоваров для этого товара-комплекта и УстановкаЦенНоменклатуры (в нем устанавливается розничная цена только этого товара — комплекта);
удалить запись по штрихкоду этого товара в регистре сведений Штрихкоды (один штрихкод),
удалить записи по комплектующим этого товара-комплекта в регистре сведений КомплектующиеНоменклатуры.

Сборку найти легко, в ней товар-комплект в шапке.

А Установку цен мне пока непонятно, как искать, в ней товар-комплект (Номенклатура) в табличной части Товары. Значит, нужен запрос или пакет запросов, чтобы найти в табличных частях Установки цен нужный товар, и получить ссылку на сам документ, чтобы пометить его на удаление. Документов таких море. Нужные созданы программно, у них в комментарии стоит «Создан обработкой такой-то».

Еще путь — делать эти документы на основании Сборки, это поиск упростит. Но пытаюсь максимально щадить текущую структуру базы).
Как написать запрос?


запрос к табличной части, примерно так

//Запрос - шаблон
лкЗапрос = Новый Запрос;
лкЗапрос.Текст = "
    |Выбрать Различные
| Док.Ссылка как УстановкаЦен
|из
Документ.УстановкаЦенНоменклатуры Док //сам документ
|Левое соединение
Документ.УстановкаЦенНоменклатуры.Товары ДокТЧ //его ТЧ
| по Док.Ссылка = ДокТЧ.Ссыдка
|Где
| Не Док.ПометкаУдаления //кроме помеченных на удаление
ДокТЧ.Номенклатура = &Ссылка
|";
лкЗапрос.УстановитьПараметр("Ссылка", ВашаНоменклатура);

лкВыборка = лкЗапрос.Выполнить().Выбрать();
Пока лкВыборка.Следующий() Цикл
//лкВыборка.УстановкаЦен - ссылка на документ
КонецЦикла;

если помогло нажмите: Спасибо!


Цитата: LexaK от 20 июл 2020, 18:38
запрос к табличной части, примерно так

//Запрос - шаблон
лкЗапрос = Новый Запрос;
лкЗапрос.Текст = "
    |Выбрать Различные
| Док.Ссылка как УстановкаЦен
|из
Документ.УстановкаЦенНоменклатуры Док //сам документ
|Левое соединение
Документ.УстановкаЦенНоменклатуры.Товары ДокТЧ //его ТЧ
| по Док.Ссылка = ДокТЧ.Ссыдка
|Где
| Не Док.ПометкаУдаления //кроме помеченных на удаление
ДокТЧ.Номенклатура = &Ссылка
|";
лкЗапрос.УстановитьПараметр("Ссылка", ВашаНоменклатура);

лкВыборка = лкЗапрос.Выполнить().Выбрать();
Пока лкВыборка.Следующий() Цикл
//лкВыборка.УстановкаЦен - ссылка на документ
КонецЦикла;

Вот теперь то, что надо!) Спасибо большое!))) Я уже начала подбираться, но конструктор сделал левое соединение в обратную сторону).
Учусь быстро, но изучить надо очень много, поэтому порой торможу на том, что для сегодняшнего программиста — ученический уровень). Еще раз — большое спасибо за помощь!!!)


А как найти документы с любым товаром, но обязательно с серией (серия любая, лишь бы была заполнена). Тип документа любой: Поступление, Реализация, Перемещение…


Для того чтобы найти строки таблицы значений, в 1с 8 используется два метода: Найти и НайтиСтроки. Первый предназначен для поиска одной строки, содержащей указанное значение. Второй для поиска всех строк, соответствующих указанному отбору. Разберем оба метода подробнее.

Метод Найти

Метод таблицы значений Найти, предназначен для поиска строки таблицы, содержащей указанное значение. Если строк содержащих значение будет несколько, будет найдена только первая из них. Эту особенность надо учитывать. Поиск осуществляется только на «равно». Синтаксис метода:

Таблица.Найти(<Значение>, <Колонки>)

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

Рассмотрим простой пример. У нас есть таблица значений с колонками: Номенклатура, Количество, Цена, Сумма. Найдем строку, содержащую значение 2 в колонке Количество или в колонке Цена.

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

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

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

Метод НайтиСтроки

Метод НайтиСтроки предназначен для поиска всех строк таблицы значений, соответствующих указанному отбору. Синтаксис метода:

Таблица.НайтиСтроки(<ПараметрыОтбора>)

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

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

Отбор = Новый Структура;
Отбор.Вставить("Наименование", "Сапоги");
Отбор.Вставить("Код", "000000111");

НайденныеСтроки = Таблица.НайтиСтроки(Отбор);

Для Каждого СтрокаТаблицы из НайденныеСтроки Цикл
    //Ваш код для обработки найденной строки таблицы значений
КонецЦикла;

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

Другие способы найти строки таблицы значений

У рассмотренных методов есть свои недостатки. Основной, поиск только на равенство. Если вам необходимо использовать более сложные конструкции отбора строк, то можно обойти таблицу значений циклом, или передать ее в запрос.

Пример 3. Воспользуемся таблицей из самого первого примера. Обработаем строки, цена в которых находится в интервале от 100 до 1000.

Для Каждого СтрокаТаблицы Из ТаблицаТоваров Цикл
		
    Если СтрокаТаблицы.Цена >= 100
        И СтрокаТаблицы.Цена <= 1000 Тогда
			
	//Код по обработке найденной строки
			
    КонецЕсли;
		
КонецЦикла;

Пример 4. Сделаем тоже самое при помощи запроса.

Запрос = Новый Запрос;
Запрос.УстановитьПараметр("ТаблицаТоваров", ТаблицаТоваров);

Запрос.Текст = 
"ВЫБРАТЬ
|    ТаблицаТоваров.Номенклатура КАК Номенклатура,
|    ТаблицаТоваров.Количество КАК Количество,
|    ТаблицаТоваров.Цена КАК Цена
|ПОМЕСТИТЬ ТаблицаТоваров
|ИЗ
|    &ТаблицаТоваров КАК ТаблицаТоваров
|;
|/////////////////////////////////////////////////
|ВЫБРАТЬ
|    ТаблицаТоваров.Номенклатура КАК Номенклатура,
|    ТаблицаТоваров.Количество КАК Количество,
|    ТаблицаТоваров.Цена КАК Цена
|ИЗ
|    ТаблицаТоваров КАК ТаблицаТоваров
|ГДЕ
|    ТаблицаТоваров.Цена МЕЖДУ 100 И 1000";

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

КонецЕсли; 

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

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

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


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


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

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

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

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

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

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

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


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

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

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

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


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

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

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

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

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

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

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

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

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


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


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




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

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

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

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

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

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

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

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

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


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

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

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

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


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

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

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


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

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

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


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


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

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

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

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

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


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

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

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

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

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

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

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

Понравилась статья? Поделить с друзьями:
  • Как составить заявление на инвалидность
  • D sub как это исправить
  • Как найти коэффициент растяжения пружины
  • Как найти сумму ввозной таможенной пошлины
  • Mtv как найти песню