- Как создать элемент (группу) справочника?
- Как найти элемент справочника?
- Как удалить элемент справочника?
- Как перебрать элементы справочника?
- Как выбрать все элементы из определенной группы?
- Как перебрать элементы подчиненного справочника с помощью запроса?
- Как перебрать элементы подчиненного справочника с помощью выборки справочника?
- Как открыть форму списка (элемента) справочника?
- Как добавить запись в табличную часть элемента справочника?
- Как удалить строки из табличной части справочника?
- Как перебрать строки табличной части справочника?
- Как создать элемент в нужной группе?
- Как узнать, есть ли у текущего элемента подчиненные?
- Как узнать количество подчиненных элементов у выбранного элемента справочника?
- Как узнать количество подчиненных элементов у выбранного элемента справочника, если подчиненных справочников нексолько?
- Как получить всех родителей выбранного элемента справочника?
- Как получить запросом «полный» код элементов справочника, если тип кода — Строка?
- Как получить все элементы справочника, содержащие в наименовании определенную подстроку, со всей иерархией, в которую они входят?
- Как найти все элементы справочника, в которых не заполнен строковый реквизит?
- Как перенести все элементы справочника «Контрагенты» из одной группы в другую?
- Как организовать программный выбор элемента справочника?
- Как сохранить фотографию сотрудника в справочнике «Сотрудники»?
Как создать элемент (группу) справочника?
НовыйЭлемент = Справочники.ДокументыУдостоверяющиеЛичность.СоздатьЭлемент(); НовыйЭлемент.Наименование = "военный билет"; // Установить другие реквизиты. // ..... НовыйЭлемент.Записать(); НовыйЭлемент = Справочники.Банки.СоздатьЭлемент(); // Получить ссылку на группу, в которой будет находиться новый элемент Родитель = Справочники.Банки.НайтиПоКоду("000000001"); НовыйЭлемент.Наименование = "АКБ"; НовыйЭлемент.Код = "000000011"; НовыйЭлемент.Родитель = Родитель; // Установить другие реквизиты // ..... НовыйЭлемент.Записать(); НоваяГруппа = Справочники.Номенклатура.СоздатьГруппу(); // Получить ссылку на группу, в которой должна находиться создаваемая группа Родитель = Справочники.Номенклатура.НайтиПоНаименованию("Обувь", Истина); НоваяГруппа.Наименование = "Модельная обувь"; НоваяГруппа.Родитель = Родитель; // Установить другие реквизиты // ..... НоваяГруппа.Записать(); // Создать новый элемент в корне справочника НовыйЭлемент = Справочники.Подразделения.СоздатьЭлемент(); НовыйЭлемент.Наименование = "IT отдел"; НовыйЭлемент.Записать(); // Получить ссылку на родителя для добавляемых элементов Родитель = НовыйЭлемент.Ссылка; // Создать дочерний элемент. НовыйЭлемент = Справочники.Подразделения.СоздатьЭлемент(); НовыйЭлемент.Наименование = "Группа разработки"; НовыйЭлемент.Родитель = Родитель; НовыйЭлемент.Записать();
Как найти элемент справочника?
// Поиск по коду РезультатПоиска = Справочники.Номенклатура.НайтиПоКоду("00030"); Если РезультатПоиска.Пустая() Тогда // Выполнить действия, предусмотренные в случае, когда элемент не найден. КонецЕсли; // Поиск по наименованию РезультатПоиска = Справочники.Номенклатура.НайтиПоНаименованию("Кроссовки"); // Поиск по реквизиту РезультатПоиска = Справочники.Номенклатура.НайтиПоРеквизиту("Артикул", "К-120002");
Как удалить элемент справочника?
// Найти ссылки на удаляемый элемент. МассивСсылок = Новый Массив; МассивСсылок.Добавить(СсылкаНаУдаляемыйЭлемент); НайденныеСсылки = НайтиПоСсылкам(МассивСсылок); Если НайденныеСсылки.Количество() > 0 Тогда Сообщить("Нельзя удалять элемент, на него имеются ссылки"); Иначе УдаляемыйЭлемент = СсылкаНаУдаляемыйЭлемент.ПолучитьОбъект(); УдаляемыйЭлемент.Удалить(); КонецЕсли; УдаляемыйЭлемент.УстановитьПометкуУдаления(Истина);
Как перебрать элементы справочника?
Выборка = Справочники.Номенклатура.ВыбратьИерархически(); Пока Выборка.Следующий() Цикл Наименование = Выборка.Наименование; // Обращение к другим данным справочника // ..... КонецЦикла; Запрос = Новый Запрос( "ВЫБРАТЬ | Ссылка, | Наименование |ИЗ | Справочник.Номенклатура |АВТОУПОРЯДОЧИВАНИЕ" ); Результат = Запрос.Выполнить().Выбрать(); Пока Результат.Следующий() Цикл Наименование = Результат.Наименование; КонецЦикла;
Как выбрать все элементы из определенной группы?
Выборка = Справочники.Номенклатура.Выбрать(ПолеВводаРодитель); Пока Выборка.Следующий() Цикл Наименование = Выборка.Наименование; КонецЦикла; Запрос = Новый Запрос( "ВЫБРАТЬ | Ссылка, | Наименование |ИЗ | Справочник.Номенклатура |ГДЕ | Родитель = &Родитель |АВТОУПОРЯДОЧИВАНИЕ" ); Запрос.УстановитьПараметр("Родитель", ПолеВводаРодитель); Результат = Запрос.Выполнить().Выбрать(); Пока Результат.Следующий() Цикл Наименование = Результат.Наименование; КонецЦикла; Выборка=Справочники.Номенклатура.ВыбратьИерархически(ПолеВводаРодитель); Пока Выборка.Следующий() Цикл Наименование = Выборка.Наименование; КонецЦикла; Запрос = Новый Запрос( "ВЫБРАТЬ | Ссылка, | Наименование |ИЗ | Справочник.Номенклатура |ГДЕ | Родитель В ИЕРАРХИИ(&Родитель) |АВТОУПОРЯДОЧИВАНИЕ" ); Запрос.УстановитьПараметр("Родитель", ПолеВводаРодитель); Результат = Запрос.Выполнить().Выбрать(); Пока Результат.Следующий() Цикл Наименование = Результат.Наименование; КонецЦикла;
Как перебрать элементы подчиненного справочника с помощью запроса?
Процедура ПереборПодчиненыхЭлементов(Контрагент) Запрос = Новый Запрос(); Запрос.Текст = "ВЫБРАТЬ | КонтактныеЛица.Ссылка |ИЗ | Справочник.КонтактныеЛица КАК КонтактныеЛица |ГДЕ | КонтактныеЛица.Владелец = &Владелец"; Запрос.УстановитьПараметр("Владелец", Контрагент); Результат = Запрос.Выполнить(); Выборка = Результат.Выбрать(); Пока Выборка.Следующий() Цикл ОчереднойПодчиненый = Выборка.Ссылка; КонецЦикла; КонецПроцедуры
Как перебрать элементы подчиненного справочника с помощью выборки справочника?
Процедура ПереборПодчиненыхЭлементов(Контрагент) // Получить выборку по указанному контрагенту Выборка = Справочники.КонтактныеЛица.Выбрать( , Контрагент); Пока Выборка.Следующий() Цикл ОчереднойПодчиненый = Выборка.Ссылка; КонецЦикла; КонецПроцедуры
Как открыть форму списка (элемента) справочника?
Форма = Справочники.Номенклатура.ПолучитьФормуСписка(); Форма.Открыть(); Элемент = Справочники.Номенклатура.НайтиПоКоду("00070"); Форма = Элемент.ПолучитьФорму(); Форма.Открыть();
Как добавить запись в табличную часть элемента справочника?
ЭлементОбъект = СсылкаКонтрагент.ПолучитьОбъект(); НоваяСтрока = ЭлементОбъект.ВидыДеятельности.Добавить(); // Заполнить реквизиты НоваяСтрока.ВидДеятельности = ПолеВводаВидДеятельности; // ..... ЭлементОбъект.Записать();
Как удалить строки из табличной части справочника?
ЭлементСправочника = Справочники.Контрагенты.НайтиПоКоду("Ю0006"); ОбъектСправочника = ЭлементСправочника.ПолучитьОбъект(); ОбъектСправочника.ВидыДеятельности.Очистить(); ОбъектСправочника.Записать(); ОбъектСправочника = ВыбранныйЭлемент.ПолучитьОбъект(); // Создать структуру для отбора удаляемых строк СтруктураОтбора = Новый Структура("ВидДеятельности", ВыбранныйВидДеятельности); // Получить массив удаляемых строк ПодходящиеСтроки = ОбъектСправочника.ВидыДеятельности.НайтиСтроки(СтруктураОтбора); // Удалить строки Для Каждого ОчереднаяСтрока Из ПодходящиеСтроки Цикл ОбъектСправочника.ВидыДеятельности.Удалить(ОчереднаяСтрока); КонецЦикла; ОбъектСправочника.Записать();
Как перебрать строки табличной части справочника?
ЭлементСправочника = Справочники.Контрагенты.НайтиПоКоду("Ю0006"); Для Каждого ТекущаяСтрока Из ЭлементСправочника.ВидыДеятельности Цикл Сообщить(ТекущаяСтрока.ВидДеятельности); КонецЦикла;
Как создать элемент в нужной группе?
КодГруппы = "330100"; ПоискПоПолномуКоду = Ложь; // значение по умолчанию Группа = Справочники.Номенклатура.НайтиПоКоду(КодГруппы, ПоискПоПолномуКоду); Если Группа.Пустая() Тогда Группа = Справочники.Номенклатура.СоздатьГруппу(); Группа.Код = КодГруппы; Группа.Наименование = "Загруженные"; Группа.Записать(); ИначеЕсли НЕ Группа.ЭтоГруппа Тогда Сообщить("Найден элемент справочника с указанным кодом!"); // Предусмотреть прерывание алгоритма... КонецЕсли; Спр = Справочники.Номенклатура.СоздатьЭлемент(); Спр.Наименование = "Программно созданный"; // Реквизиты заполняются в соответствии с задачей // ..... Спр.Родитель = Группа.Ссылка; Спр.Записать(); Группа = Справочники.Номенклатура.Загруженные; КодЭлемента = "330100"; ПоискПоПолномуКоду = Ложь; // Значение по умолчанию Родитель = Справочники.Номенклатура.НайтиПоКоду(КодЭлемента, ПоискПоПолномуКоду); Если Родитель.Пустая() Тогда Родитель = Справочники.Номенклатура.СоздатьЭлемент(); Родитель.Код = КодЭлемента; Родитель.Наименование = "Загруженные"; Родитель.Записать(); КонецЕсли; Спр = Справочники.Номенклатура.СоздатьЭлемент(); Спр.Наименование = "Программно созданный"; // Реквизиты заполняются в соответствии с задачей // ..... Спр.Родитель = Родитель.Ссылка; Спр.Записать();
Как узнать, есть ли у текущего элемента подчиненные?
Выборка = Справочники.Номенклатура.Выбрать( , Владелец); Если Выборка.Следующий() = Истина Тогда // Есть подчиненные элементы. КонецЕсли; Запрос = Новый Запрос(); Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1 | ЕдиницыИзмерения.Ссылка |ИЗ | Справочник.ЕдиницыИзмерения КАК ЕдиницыИзмерения |ГДЕ | ЕдиницыИзмерения.Владелец = &Владелец"; Запрос.УстановитьПараметр("Владелец", Владелец); Если НЕ Запрос.Выполнить().Пустой() Тогда // Есть подчиненные элементы! КонецЕсли;
Как узнать количество подчиненных элементов у выбранного элемента справочника?
Выборка = Справочники.ЕдиницыИзмерения.Выбрать( , Владелец); КоличествоЭлементов = 0; Пока Выборка.Следующий() Цикл КоличествоЭлементов = КоличествоЭлементов + 1; КонецЦикла; Запрос = Новый Запрос(); Запрос.Текст = "ВЫБРАТЬ | КОЛИЧЕСТВО(*) КАК КоличествоЗаписей |ИЗ | Справочник.ЕдиницыИзмерения КАК ЕдиницыИзмерения |ГДЕ | ЕдиницыИзмерения.Владелец = &Владелец"; Запрос.УстановитьПараметр("Владелец", Владелец); Выборка = Запрос.Выполнить().Выбрать(); Если Выборка.Следующий() Тогда КоличествоЗаписей = Выборка.КоличествоЗаписей; КонецЕсли;
Как узнать количество подчиненных элементов у выбранного элемента справочника, если подчиненных справочников несколько?
ВЫБРАТЬ СУММА(КоличествоПодчиненных) КАК КоличествоПодчиненныхЭлементов ИЗ (ВЫБРАТЬ КОЛИЧЕСТВО(*) КАК КоличествоПодчиненных ИЗ Справочник.ЕдиницыИзмерения КАК ЕдиницыИзмерения ГДЕ ЕдиницыИзмерения.Владелец = &Владелец ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ КОЛИЧЕСТВО(*) ИЗ Справочник.СерииНоменклатуры КАК СерииНоменклатуры ГДЕ СерииНоменклатуры.Владелец = &Владелец ) КАК ВложенныйЗапрос
Как получить всех родителей выбранного элемента справочника?
МассивРодителей = Новый Массив; Родитель = СсылкаНаЭлемент.Родитель; Пока НЕ Родитель.Пустая() Цикл МассивРодителей.Добавить(Родитель); Родитель = Родитель.Родитель; КонецЦикла; Для Каждого ТекущийРодитель Из МассивРодителей Цикл // Работа с текущим родителем КонецЦикла;
ВЫБРАТЬ Номенклатура.Ссылка КАК Ссылка ИЗ Справочник.Номенклатура КАК Номенклатура ГДЕ Номенклатура.Ссылка = &Ссылка ИТОГИ ПО Ссылка ТОЛЬКО ИЕРАРХИЯ
ТекущийЭлементНоменклатуры = ЭлементНоменклатура; Запрос = Новый Запрос( "ВЫБРАТЬ | Номенклатура.Родитель, | Номенклатура.Родитель.Родитель, | Номенклатура.Родитель.Родитель.Родитель, | Номенклатура.Родитель.Родитель.Родитель.Родитель, | Номенклатура.Родитель.Родитель.Родитель.Родитель.Родитель |ИЗ | Справочник.Номенклатура КАК Номенклатура |ГДЕ | Номенклатура.Ссылка = &ТекущийЭлементНоменклатуры"; Пока Истина Цикл Запрос.УстановитьПараметр("ТекущийЭлементНоменклатуры", ТекущийЭлементНоменклатуры); Результат = Запрос.Выполнить(); Если Результат.Пустой() Тогда Прервать; КонецЕсли; Выборка = Результат.Выбрать(); Выборка.Следующий(); Для НомерКолонки = 0 По Результат.Колонки.Количество() - 1 Цикл ТекущийЭлементНоменклатуры = Выборка[НомерКолонки]; Если ТекущийЭлементНоменклатуры = Справочники.Номенклатура.ПустаяСсылка() Тогда Прервать; Иначе Сообщить(ТекущийЭлементНоменклатуры); КонецЕсли; КонецЦикла; Если ТекущийЭлементНоменклатуры = Справочники.Номенклатура.ПустаяСсылка() Тогда Прервать; КонецЕсли; КонецЦикла;
Как получить запросом «полный» код элементов справочника, если тип кода — Строка?
ВЫБРАТЬ Контрагенты.Ссылка, ВЫБОР КОГДА (Контрагенты.Родитель.Код ЕСТЬ NULL ) ТОГДА Контрагенты.Код КОГДА (Контрагенты.Родитель.Родитель.Код ЕСТЬ NULL ) ТОГДА Контрагенты.Родитель.Код + "/" + Контрагенты.Код ИНАЧЕ Контрагенты.Родитель.Родитель.Код + "/" + Контрагенты.Родитель.Код + "/" + Контрагенты.Код КОНЕЦ КАК ПолныйКод ИЗ Справочник.Контрагенты КАК Контрагенты
Как получить все элементы справочника, содержащие в наименовании определенную подстроку, со всей иерархией, в которую они входят?
Запрос = Новый Запрос( "ВЫБРАТЬ | Контрагенты.Ссылка КАК Ссылка |ИЗ | Справочник.Контрагенты КАК Контрагенты |ГДЕ | (Контрагенты.Наименование ПОДОБНО &ЧастьНаименования) И (НЕ Контрагенты.ЭтоГруппа) |ИТОГИ ПО | Ссылка ТОЛЬКО ИЕРАРХИЯ" ); Запрос.УстановитьПараметр("ЧастьНаименования", "%" + ПолеВводаПодстрока + "%");
Как найти все элементы справочника, в которых не заполнен строковый реквизит?
ВЫБРАТЬ ФизическиеЛица.Ссылка ИЗ Справочник.ФизическиеЛица КАК ФизическиеЛица ГДЕ (ФизическиеЛица.ИНН = "") ВЫБРАТЬ ФизическиеЛица.Ссылка ИЗ Справочник.ФизическиеЛица КАК ФизическиеЛица ГДЕ (ФизическиеЛица.СтраховойНомерПФР = "") ИЛИ (ФизическиеЛица.СтраховойНомерПФР = " - -")
Как перенести все элементы справочника «Контрагенты» из одной группы в другую?
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Контрагенты.Ссылка |ИЗ | Справочник.Контрагенты КАК Контрагенты |ГДЕ | Контрагенты.Родитель = &СтарыйРодитель"; Запрос.УстановитьПараметр("СтарыйРодитель", СтарыйРодитель); Результат = Запрос.Выполнить(); Выборка = Результат.Выбрать(); Пока Выборка.Следующий() Цикл Контрагент = Выборка.Ссылка.ПолучитьОбъект(); Контрагент.Родитель = НовыйРодитель; Контрагент.Записать(); КонецЦикла;
Как организовать программный выбор элемента справочника?
// Получить форму выбора справочника как подчиненную форме документа ФормаВыбора = Справочники.Номенклатура.ПолучитьФормуВыбора( , ЭтаФорма); // Открыть полученную форму ФормаВыбора.Открыть(); Процедура ОбработкаВыбора(ЗначениеВыбора, Источник) ПолученноеЗначение = ЗначениеВыбора; // Дальнейшая обработка значения... КонецПроцедуры ФормаВыбора = Справочники.Номенклатура.ПолучитьФормуВыбора( , ЭтаФорма); Выбрано = ФормаВыбора.ОткрытьМодально(); Процедура ПолеВводаНачалоВыбора(Элемент, СтандартнаяОбработка) // Запретить стандартную обработку. СтандартнаяОбработка = Ложь; // Получить форму выбора справочника как подчиненную полю ввода ФормаВыбора = Справочники.Номенклатура.ПолучитьФормуВыбора( , Элемент); // Открыть полученную форму ФормаВыбора.Открыть(); КонецПроцедуры Процедура ПолеВводаОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) // Отключить стандартную обработку (при необходимости) СтандартнаяОбработка = Ложь; ПолученноеЗначение = ВыбранноеЗначение; // Дальнейшая обработка значения... КонецПроцедуры
Как сохранить фотографию сотрудника в справочнике «Сотрудники»?
Процедура ЗагрузитьФотографию(Элемент) Режим = РежимДиалогаВыбораФайла.Открытие; ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(Режим); ДиалогОткрытияФайла.ПолноеИмяФайла = ""; Фильтр = "Текст (*,*)|*.*"; ДиалогОткрытияФайла.Фильтр = Фильтр; ДиалогОткрытияФайла.МножественныйВыбор = Ложь; ДиалогОткрытияФайла.Заголовок = "Выберите картинку"; Если ДиалогОткрытияФайла.Выбрать() Тогда ВыбраннаяКартинка = Новый Картинка(ДиалогОткрытияФайла.ПолноеИмяФайла); ЭлементХранилища = Новый ХранилищеЗначения(ВыбраннаяКартинка); Фотография = ЭлементХранилища; КонецЕсли; КонецПроцедуры ВыбФайл = Новый ДвоичныеДанные(ДиалогОткрытияФайла.ПолноеИмяФайла); элХранилища = Новый ХранилищеЗначения(ВыбФайл); Фотография = элХранилища;
+6
1С 8.3 : Поиск элемента, найти элемент справочника
&НаКлиенте
Процедура ПоКнопкеНайти(Команда)
// Вставить содержимое обработчика.
Сообщить(НайтиКонтрагента("000000001"));
КонецПроцедуры
&НаСервере
Функция НайтиКонтрагента(КодКонтрагента)
Перем КонрагентДляПоиска, СсылкаНайденногоКонрагента;
КонрагентДляПоиска = Справочники.Контрагенты;
СсылкаНайденногоКонрагента = КонрагентДляПоиска.НайтиПоКоду(КодКонтрагента);
Если СсылкаНайденногоКонрагента = КонрагентДляПоиска.ПустаяСсылка() Тогда
Возврат "Контрагент не найден";
Иначе
Возврат СсылкаНайденногоКонрагента.Наименование;
КонецЕсли;
КонецФункции;
Код 1C v 8.х
// Ниже перечислены несколько способов поиска,если элемент найден, то он возвращается,
// иначе возвращается Неопределено
СпрСотр = Справочники.Сотрудники;
НайденныйСотр = СпрСотр.НайтиПоКоду(123);
НайденныйСотр = СпрСотр.НайтиПоНаименованию("Иванов Иван Иванович");
НайденныйСотр СпрСотр.НайтиПоРеквизиту("Оклад", 5000);
//далее нужно проверить найденное значение так:
РезультатПоиска = Справочники.Номенклатура.НайтиПоКоду("00030");
Если РезультатПоиска.Пустая() Тогда
// Выполнить действия, предусмотренные в случае, когда элемент не найден.
КонецЕсли;
// или так:
НайденныйСотр = СпрСотр.НайтиПоНаименованию("Иванов Иван Иванович");
Если НайденныйСотр = Неопределено Тогда
.....//элемент не найден
КонецЕсли;
Код 1C v 7.x
СпрСотр = СоздатьОбъект("Справочник.Сотрудники");
СпрСотр.НайтиЭлемент(Сотрудник);
СпрСотр.НайтиПоКоду(123);
СпрСотр.НайтиПоНаименованию("Иванов Иван Иванович");
СпрСотр.НайтиПоРеквизиту("Оклад", 5000);
//если элемент найден, он становится текущим и его можно прочитать так:
Если СпрСотр.НайтиПоНаименованию("Иванов Иван Иванович")=1 Тогда
........НайденныйСотр = СпрСотр.ТекущийЭлемент();
КонецЕсли;
//еще пример
спр=СоздатьОбъект("Справочник.Материалы");
Если спр.НайтиПоНаименованию("Пряжа шерстяная")=1 Тогда
Предупреждение("Найденный элемент справочника имеет код "+спр.ТекущийЭлемент().Код);
Иначе
Предупреждение("Элемент с заданным наименованием не найден");
КонецЕсли;
поиск всех элементов справочника с опред наименованием |
Я |
28.04.08 — 13:00
Приветствую всех читающих это.
Хочу найти все элементы справочника, имеющих одно и тоже наименование.
можно
Спр.ПорядокНаименований();
НайтиПоНаименованию(наим1,0,1);
Пусть нашли 1-й элемент, как теперь проверить следующие, такое же ли у них наименование?
Помогите добрым советом.
1 — 28.04.08 — 13:01
1. перебор справочника
2. запрос
2 — 28.04.08 — 13:02
3. поиск по наименованию с удалением в транзакции и отменой оной по завершению работы
3 — 28.04.08 — 13:03
(0) Делай в транзакции с удалением найденных элементов…
4 — 28.04.08 — 13:03
(0)
СЗ=СоздатьОбъект(«СписокЗначений»);
НачатьТранзакцию();
Пока Спр.НайтиПоНаименованию(наим1,0,1)=1 Цикл
СЗ.ДобавитьЗначение(Спр.ТекущийЭлемент());
Спр.Удалить();
КонецЦикла;
ОтменитьТранзакцию();
СЗ.ВыбратьЗначение(,);
Или запросом …
5 — 28.04.08 — 13:04
Процедура Сформировать()
Перем Запрос, ТекстЗапроса;
//Создание объекта типа Запрос
Запрос = СоздатьОбъект(«Запрос»);
ТекстЗапроса =
«//{{ЗАПРОС(Сформировать)
|ТекущийЭлемент = Справочник.Номенклатура.ТекущийЭлемент;
|Наименование = Справочник.Номенклатура.Наименование;
|Группировка ТекущийЭлемент;
|Условие(Наименование = ВыбНаименование);
|»//}}ЗАПРОС
;
// Если ошибка в запросе, то выход из процедуры
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
Возврат;
КонецЕсли;
// Подготовка к заполнению выходных форм данными запроса
// Заполнение полей «Заголовок»
Пока Запрос.Группировка(1) = 1 Цикл
// Заполнение полей ТекущийЭлемент
КонецЦикла;
// Вывод заполненной формы
КонецПроцедуры
6 — 28.04.08 — 13:04
1. Плохой вариант
начатьтранзакцию() пока спр.найтипонаименованию.. цикл сообщить(спр.текущийэлемент) спр.удалить(1) конеццикла отменитьтранзакцию
2. Правильный вариант
ТекстЗапроса = "
Эл = Спр. ...текущийэлемент
наим = спр...Наименование
Условие Найти(Наим, Искомое) > 0"
7 — 28.04.08 — 13:05
Можно легко через ТаблицуЗначений
8 — 28.04.08 — 13:07
В нее пихаешь наименования, в соседнюю колонку единички, потом ТЗ.Свернуть(«1″,»2»). В той строке, где не 1 будет стоять количество одинаковых наименований. ИМХО проще юзанья запросов и тем более транзакций.
9 — 28.04.08 — 13:08
(8) да конечно а как ты потом сам элемент то найдешь твоим то способом…
10 — 28.04.08 — 13:09
(8) И при большом количестве элементов ппц твоей ТЗ …
ЗЫ: Лучше всего Select …
11 — 28.04.08 — 13:20
(9) Тупо сортируешь по убыванию и вперед перебором. Неужто трудно?
(10) У меня на 200000 элементах все прекрасно работало, я помнится поиск ссылок на список из тысяч 100 элементов делал, с этой ТЗ все упомянутое работало. Более того, справочников с гораздо меньшим объемом подавляющее большинство, так что нарваться на сие маловероятно.
12 — 28.04.08 — 13:22
(11) А на формирование этой ТЗ сколько времени ушло?
хотя тоже вариант нормальный для некоторых ситуаций.
13 — 28.04.08 — 13:23
(11) тупое решение, во-первых — перебор всего справочника, во-вторых — тз.
И это никак не лучше мнимой транзакции, которая в разы быстрее, и ну никак не лучше запроса, ибо медленнее.
14 — 28.04.08 — 13:24
+13 Да еще и сортировка этой тз + перебор в этой тз …
15 — 28.04.08 — 13:25
+14 И хранение копии этой тз в несвёрнутом виде …
16 — 28.04.08 — 13:28
В моем варианте находятся все дубли наименований. Если знать наименование, то запрос ессно лучше полного перебора.
17 — 28.04.08 — 13:31
(14)(15) Что-то не пойму, чем тебе это не нравится? Очень часто пользовал, работает шустро.
18 — 28.04.08 — 13:31
(11) «Тупо сортируешь по убыванию и вперед перебором. Неужто трудно?
» че то не догнал а сами то как элементы найдешь опять по справочнику искать ??
если ты свернешь по наименованиям то у тебя и будут в таблице только наименования не сами элементы то ….
19 — 28.04.08 — 13:34
Спасибо
А что насчет select?
20 — 28.04.08 — 13:33
(17) Ложное заблуждение в (8).
21 — 28.04.08 — 13:37
(18) Ну если и такое надо рассказывать Сортировать по второй колонке, где количество документов дублей
И все верхние будут как раз дублями, пока в «2» единичку не встретишь.
22 — 28.04.08 — 13:37
(19) запрос или прямой запрос
23 — 28.04.08 — 13:38
(20) Почитай (16), а то прям расходился
24 — 28.04.08 — 13:38
(21) ты че то не догоняешь по моему….
25 — 28.04.08 — 13:39
+(24) извени (16) не увидел … только муторно и долго в начале в ТЗ потом запрос …
26 — 28.04.08 — 13:41
(25) Не, ты уж определись, либо ТЗ, либо Запрос. Просто я (0) несколько неправильно понял.
27 — 28.04.08 — 13:43
(26) ну так вот я тебя и спрашивал как из твоей Тз найти ССЫЛКИ на элементы, а если ты предлагаешь потом еще отдельно запрос делать для получения ссылок, то проще сразу запрос мутить с группировкой по Наименованию
28 — 28.04.08 — 13:49
(27) Нее, ты наверное не понял. В ТЗ справочник кидаешь, в этой же ТЗ делаешь еще колонку в которой ставишь 1, потом ТЗ.Свернуть(«1″,»2»), ТЗ.Сортировать(«2-«) потом перебор до тех пор, пока ТЗ.ПолучитьЗначение(НомерСтроки,2)<>1
29 — 28.04.08 — 13:50
А если ВыбратьЭлементыПоРеквизиту, где реквизит — наименование и перебрать элементы этой выборки?
30 — 28.04.08 — 13:50
Можно и во время перебора справочника поймать дубли в принципе, главное его сначала отсортировать по наименованию.
31 — 28.04.08 — 13:51
(29) А интересный вариант. Только вот не знаю, к Наименование его можно прикрутить или нет.
32 — 28.04.08 — 13:51
(28) как это ты в тз свернешь справочник то если там будут ЭЛЕМЕНТЫ ??????
ты понимаешь разницу м/у Наименованием справочника и Элемента справочника ….
33 — 28.04.08 — 13:51
(29) Наименование, как и Код — это «атрибуты» справочника, не совсем реквизиты его…и для них свои методы.
34 — 28.04.08 — 13:53
(29) не получится надо доп Реквизит делать с отбором в него писать наименования, а потом уже твое …
35 — 28.04.08 — 13:54
(32) Почитай внимательно (8). Неужто сам додумать не можешь, что в ТЗ можно и наименования пихать?
36 — 28.04.08 — 13:56
(35) ты че то гоняешь реально ты же свернешь по наименованию как ты потом элемент то получишь ????
у тебя будет в ТЗ
К1 К2
Наименование1 2
Наименование2 3
Наименование3 1
и дальше твои действия отобрал я 1-е и 2-е значени из тз и ????
37 — 28.04.08 — 13:59
(36) Как-как .. копию отсортированнной несвёрнутой ТЗ хранить надобно … в неё потом искать — перебирать ..
38 — 28.04.08 — 14:00
(0) самое оптимальное в (5) если надо найти все совпадения по всем то тогда маленько исправить
|ТекущийЭлемент = Справочник.Номенклатура.ТекущийЭлемент;
|Наименование = Справочник.Номенклатура.Наименование;
|Группировка Наименование ;
|Группировка ТекущийЭлемент без групп;
потом в обходе
Пока Запрос.Группировка(1) Цикл
Кол = 0;
Пока Запрос.Группировка(2) Цикл
сз.ДобавитьЗначений(Запрос.ТекущийЭлемент);
Кол = Кол +1;
КонецЦикла;
Если Кол = 1 тогда
сз.УдалитьЗначение();
КонецЕсли;
39 — 28.04.08 — 14:01
мне нужны некоторые реквизиты элементов с повторяющимися наименованиями, потому тз вряд ли поможет
(29) было бы идеальным, но (34)-верно, проверил.
40 — 28.04.08 — 14:01
(37) и в чем прикол то хранения ???
тогда уже после свертки заново переберать справочник и искать с сортировкой по наименованию…
41 — 28.04.08 — 14:07
(40) Это ты у автора поста спроси…
ЗЫ: Если нужны все несовпадения, то Запрос + 1 группировка + Функция Счётчик в запросе и привет, в обходе, там где значение функции >1 — и есть дубли.
Если нужна скорость, то select + like %%%(если по части наименования)…
42 — 28.04.08 — 14:10
(36) Ну сделай К3, где собственно элемент будешь хранить. И не надо ничего особо перебирать дополнительно. Или прям код расписать, чтобы такие вопросы за ненадобностью отвалились?
Omskdizel
43 — 28.04.08 — 14:35
(38) И чем это лучше перебора справочника? А если надо по Наименованию и Артикулу совпадения искать?
ТЗ=СоздатьОбъект("ТаблицаЗначений"); ТЗ.НоваяКолонка("Кол1"); ТЗ.НоваяКолонка("Кол2"); ... ТЗ.НоваяКолонка("КолN"); Спр=СоздатьОбъект("Справочник.Нужный"); Спр.ВыбратьЭлементы(); Пока Спр.ПолучитьЭлемент()=1 Цикл Если Спр.ЭтоГруппа()=1 Тогда Продолжить; КонецЕсли; ТЗ.НоваяСтрока(); ТЗ.Кол1=Спр.Реквизит1; ТЗ.Кол2=Спр.Реквизит2; ... ТЗ.КолN-1=Спр.ТекущийЭлемент(); ТЗ.КолN=1; КонецЦикла; ТЗ.Свернуть("1,2,...,N-1","N"); ТЗ.Сортировать("N-"); ТЗ.ВыбратьСтроки(); Пока ТЗ.ПолучитьСтроку()=1 Цикл Если ТЗ.КолN=1 Тогда Прервать; //Трындец, кончились дубли.... КонецЕсли; //Здесь поступаем по собственному хотению с дублями.... КонецЦикла;
Справочники
Как создать элемент (группу) справочника?
НовыйЭлемент = Справочники.ДокументыУдостоверяющиеЛичность.СоздатьЭлемент(); НовыйЭлемент.Наименование = "военный билет"; // Установить другие реквизиты. .... НовыйЭлемент.Записать(); НовыйЭлемент = Справочники.Банки.СоздатьЭлемент(); // Получить ссылку на группу, в которой будет находиться новый элемент. Родитель = Справочники.Банки.НайтиПоКоду("000000001"); НовыйЭлемент.Наименование = "АКБ"; НовыйЭлемент.Код = "000000011"; НовыйЭлемент.Родитель = Родитель; // Установить другие реквизиты. .... НовыйЭлемент.Записать(); НоваяГруппа = Справочники.Номенклатура.СоздатьГруппу(); // Получить ссылку на группу, в которой должна находиться создаваемая группа. Родитель = Справочники.Номенклатура.НайтиПоНаименованию("Обувь", Истина); НоваяГруппа.Наименование = "Модельная обувь"; НоваяГруппа.Родитель = Родитель; // Установить другие реквизиты. .... НоваяГруппа.Записать(); // Создать новый элемент в корне справочника. НовыйЭлемент = Справочники.Подразделения.СоздатьЭлемент(); НовыйЭлемент.Наименование = "IT отдел"; НовыйЭлемент.Записать(); // Получить ссылку на родителя добавляемых элементов. Родитель = НовыйЭлемент.Ссылка; // Создать дочерний элемент. НовыйЭлемент = Справочники.Подразделения.СоздатьЭлемент(); НовыйЭлемент.Наименование = "Группа разработки"; НовыйЭлемент.Родитель = Родитель; НовыйЭлемент.Записать();
Как найти элемент справочника?
// Найдем по коду РезультатПоиска = Справочники.Номенклатура.НайтиПоКоду("00030"); Если РезультатПоиска.Пустая() Тогда // Выполнить действия, предусмотренные в случае, когда элемент не найден. КонецЕсли; // Найдем по наименованию РезультатПоиска = Справочники.Номенклатура.НайтиПоНаименованию("Кроссовки"); // Найдем по реквизиту РезультатПоиска = Справочники.Номенклатура.НайтиПоРеквизиту("Артикул", "К-120002");
Как удалить элемент справочника?
// Найти ссылки на удаляемый элемент. МассивСсылок = Новый Массив; МассивСсылок.Добавить(СсылкаНаУдаляемыйЭлемент); НайденныеСсылки = НайтиПоСсылкам(МассивСсылок); Если НайденныеСсылки.Количество() > 0 Тогда Сообщить("Нельзя удалять элемент, на него имеются ссылки"); Иначе УдаляемыйЭлемент = СсылкаНаУдаляемыйЭлемент.ПолучитьОбъект(); УдаляемыйЭлемент.Удалить(); КонецЕсли; УдаляемыйЭлемент.УстановитьПометкуУдаления(Истина);
Как перебрать элементы справочника?
Выборка = Справочники.Номенклатура.ВыбратьИерархически(); Пока Выборка.Следующий() Цикл Наименование = Выборка.Наименование; // Обращение к другим данным справочника. КонецЦикла; Запрос = Новый Запрос(" |ВЫБРАТЬ | Ссылка, | Наименование |ИЗ | Справочник.Номенклатура |АВТОУПОРЯДОЧИВАНИЕ"); Результат = Запрос.Выполнить().Выбрать(); Пока Результат.Следующий() Цикл Наименование = Результат.Наименование; КонецЦикла;
Как выбрать все элементы из определенной группы?
Выборка = Справочники.Номенклатура.Выбрать(ПолеВводаРодитель); Пока Выборка.Следующий() Цикл Наименование = Выборка.Наименование; КонецЦикла; Запрос = Новый Запрос(" |ВЫБРАТЬ | Ссылка, | Наименование |ИЗ | Справочник.Номенклатура |ГДЕ | Родитель = &Родитель |АВТОУПОРЯДОЧИВАНИЕ"); Запрос.УстановитьПараметр("Родитель", ПолеВводаРодитель); Результат = Запрос.Выполнить().Выбрать(); Пока Результат.Следующий() Цикл Наименование = Результат.Наименование; КонецЦикла; Выборка=Справочники.Номенклатура.ВыбратьИерархически(ПолеВводаРодитель); Пока Выборка.Следующий() Цикл Наименование = Выборка.Наименование; КонецЦикла; Запрос = Новый Запрос(" |ВЫБРАТЬ | Ссылка, | Наименование |ИЗ | Справочник.Номенклатура |ГДЕ | Родитель В ИЕРАРХИИ(&Родитель) |АВТОУПОРЯДОЧИВАНИЕ"); Запрос.УстановитьПараметр("Родитель", ПолеВводаРодитель); Результат = Запрос.Выполнить().Выбрать(); Пока Результат.Следующий() Цикл Наименование = Результат.Наименование; КонецЦикла;
Как перебрать элементы подчиненного справочника с помощью запроса?
Процедура ПереборПодчиненыхЭлементов(Контрагент) Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | КонтактныеЛица.Ссылка |ИЗ | Справочник.КонтактныеЛица КАК КонтактныеЛица |ГДЕ | КонтактныеЛица.Владелец = &Владелец"; Запрос.УстановитьПараметр("Владелец", Контрагент); Результат = Запрос.Выполнить(); Выборка = Результат.Выбрать(); Пока Выборка.Следующий() Цикл ОчереднойПодчиненый = Выборка.Ссылка; КонецЦикла; КонецПроцедуры
Как перебрать элементы подчиненного справочника с помощью выборки справочника?
Процедура ПереборПодчиненыхЭлементов(Контрагент) // Получить выборку по указанному контрагенту. Выборка = Справочники.КонтактныеЛица.Выбрать( , Контрагент); Пока Выборка.Следующий() Цикл ОчереднойПодчиненый = Выборка.Ссылка; КонецЦикла; КонецПроцедуры
Как открыть форму списка (элемента) справочника?
Форма = Справочники.Номенклатура.ПолучитьФормуСписка(); Форма.Открыть(); Элемент = Справочники.Номенклатура.НайтиПоКоду("00070"); Форма = Элемент.ПолучитьФорму(); Форма.Открыть();
Как добавить запись в табличную часть элемента справочника?
ЭлементОбъект = СсылкаКонтрагент.ПолучитьОбъект(); НоваяСтрока = ЭлементОбъект.ВидыДеятельности.Добавить(); // Заполнить реквизиты. НоваяСтрока.ВидДеятельности = ПолеВводаВидДеятельности; ЭлементОбъект.Записать();
Как удалить строки из табличной части справочника?
ЭлементСправочника = Справочники.Контрагенты.НайтиПоКоду("Ю0006"); ОбъектСправочника = ЭлементСправочника.ПолучитьОбъект(); ОбъектСправочника.ВидыДеятельности.Очистить(); ОбъектСправочника.Записать(); ОбъектСправочника = ВыбранныйЭлемент.ПолучитьОбъект(); // Создать структуру для отбора удаляемых строк. СтруктураОтбора = Новый Структура("ВидДеятельности", ВыбранныйВидДеятельности); // Получить массив удаляемых строк. ПодходящиеСтроки = ОбъектСправочника.ВидыДеятельности.НайтиСтроки(СтруктураОтбора); // Удалить строки. Для Каждого ОчереднаяСтрока Из ПодходящиеСтроки Цикл ОбъектСправочника.ВидыДеятельности.Удалить(ОчереднаяСтрока); КонецЦикла; ОбъектСправочника.Записать();
Как перебрать строки табличной части справочника?
ЭлементСправочника = Справочники.Контрагенты.НайтиПоКоду("Ю0006"); Для Каждого ТекущаяСтрока Из ЭлементСправочника.ВидыДеятельности Цикл Сообщить(ТекущаяСтрока.ВидДеятельности); КонецЦикла;
Как создать элемент в нужной группе?
КодГруппы = "330100"; ПоискПоПолномуКоду = Ложь; // значение по умолчанию Группа = Справочники.Номенклатура.НайтиПоКоду(КодГруппы, ПоискПоПолномуКоду); Если Группа.Пустая() Тогда Группа = Справочники.Номенклатура.СоздатьГруппу(); Группа.Код = КодГруппы; Группа.Наименование = "Загруженные"; Группа.Записать(); ИначеЕсли Не Группа.ЭтоГруппа Тогда Сообщить("Найден элемент справочника с указанным кодом!"); // Предусмотреть прерывание алгоритма. КонецЕсли; Спр = Справочники.Номенклатура.СоздатьЭлемент(); Спр.Наименование = "Программно созданный"; // Реквизиты заполняются в соответствии с задачей. Спр.Родитель = Группа.Ссылка; Спр.Записать(); Группа = Справочники.Номенклатура.Загруженные; КодЭлемента = "330100"; ПоискПоПолномуКоду = Ложь; //Значение по умолчанию Родитель = Справочники.Номенклатура.НайтиПоКоду(КодЭлемента, ПоискПоПолномуКоду); Если Родитель.Пустая() Тогда Родитель = Справочники.Номенклатура.СоздатьЭлемент(); Родитель.Код = КодЭлемента; Родитель.Наименование = "Загруженные"; Родитель.Записать(); КонецЕсли; Спр = Справочники.Номенклатура.СоздатьЭлемент(); Спр.Наименование = "Программно созданный"; // Реквизиты заполняются в соотвествии с задачей. Спр.Родитель = Родитель.Ссылка; Спр.Записать();
Как узнать, есть ли у текущего элемента подчиненные?
Выборка = Справочники.Номенклатура.Выбрать( , Владелец); Если Выборка.Следующий() = Истина Тогда // Есть подчиненные элементы. КонецЕсли; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1 | ЕдиницыИзмерения.Ссылка |ИЗ | Справочник.ЕдиницыИзмерения КАК ЕдиницыИзмерения |ГДЕ | ЕдиницыИзмерения.Владелец = &Владелец"; Запрос.УстановитьПараметр("Владелец", Владелец); Если НЕ Запрос.Выполнить().Пустой() Тогда // Есть подчиненные элементы! КонецЕсли;
Как узнать количество подчиненных элементов у выбранного элемента справочника?
Выборка = Справочники.ЕдиницыИзмерения.Выбрать( , Владелец); КоличествоЭлементов = 0; Пока Выборка.Следующий() Цикл КоличествоЭлементов = КоличествоЭлементов + 1; КонецЦикла; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | КОЛИЧЕСТВО(*) КАК КоличествоЗаписей |ИЗ | Справочник.ЕдиницыИзмерения КАК ЕдиницыИзмерения |ГДЕ | ЕдиницыИзмерения.Владелец = &Владелец"; Запрос.УстановитьПараметр("Владелец", Владелец); Выборка = Запрос.Выполнить().Выбрать(); Если Выборка.Следующий() Тогда КоличествоЗаписей = Выборка.КоличествоЗаписей; КонецЕсли;
Как узнать количество подчиненных элементов у выбранного элемента справочника, если количество подчиненных справочников больше чем один?
ВЫБРАТЬ СУММА(КоличествоПодчиненных) КАК КоличествоПодчиненныхЭлементов ИЗ (ВЫБРАТЬ КОЛИЧЕСТВО(*) КАК КоличествоПодчиненных ИЗ Справочник.ЕдиницыИзмерения КАК ЕдиницыИзмерения ГДЕ ЕдиницыИзмерения.Владелец = &Владелец ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ КОЛИЧЕСТВО(*) ИЗ Справочник.СерииНоменклатуры КАК СерииНоменклатуры ГДЕ СерииНоменклатуры.Владелец = &Владелец ) КАК ВложенныйЗапрос
Как получить всех родителей выбранного элемента справочника?
МассивРодителей = Новый Массив; Родитель = СсылкаНаЭлемент.Родитель; Пока Не Родитель.Пустая() Цикл МассивРодителей.Добавить(Родитель); Родитель = Родитель.Родитель; КонецЦикла; Для Каждого ТекущийРодитель Из МассивРодителей Цикл // Работа с текущим родителем. КонецЦикла; //----------------------------------------------------------------------------------- ТекущийЭлементНоменклатуры = ЭлементНоменклатура; Запрос = Новый Запрос("ВЫБРАТЬ | Номенклатура.Родитель, | Номенклатура.Родитель.Родитель, | Номенклатура.Родитель.Родитель.Родитель, | Номенклатура.Родитель.Родитель.Родитель.Родитель, | Номенклатура.Родитель.Родитель.Родитель.Родитель.Родитель |ИЗ | Справочник.Номенклатура КАК Номенклатура |ГДЕ | Номенклатура.Ссылка = &ТекущийЭлементНоменклатуры"; Пока Истина Цикл Запрос.УстановитьПараметр("ТекущийЭлементНоменклатуры", ТекущийЭлементНоменклатуры); Результат = Запрос.Выполнить(); Если Результат.Пустой() Тогда Прервать; КонецЕсли; Выборка = Результат.Выбрать(); Выборка.Следующий(); Для НомерКолонки = 0 По Результат.Колонки.Количество() - 1 Цикл ТекущийЭлементНоменклатуры = Выборка[НомерКолонки]; Если ТекущийЭлементНоменклатуры = Справочники.Номенклатура.ПустаяСсылка() Тогда Прервать; Иначе Сообщить(ТекущийЭлементНоменклатуры); КонецЕсли; КонецЦикла; Если ТекущийЭлементНоменклатуры = Справочники.Номенклатура.ПустаяСсылка() Тогда Прервать; КонецЕсли; КонецЦикла;
ВЫБРАТЬ Номенклатура.Ссылка КАК Ссылка ИЗ Справочник.Номенклатура КАК Номенклатура ГДЕ Номенклатура.Ссылка = &Ссылка ИТОГИ ПО Ссылка ТОЛЬКО ИЕРАРХИЯ
Как получить запросом «полный» код элементов справочника, если тип кода — Строка?
ВЫБРАТЬ Контрагенты.Ссылка, ВЫБОР КОГДА (Контрагенты.Родитель.Код ЕСТЬ NULL ) ТОГДА Контрагенты.Код КОГДА (Контрагенты.Родитель.Родитель.Код ЕСТЬ NULL ) ТОГДА Контрагенты.Родитель.Код + "/" + Контрагенты.Код ИНАЧЕ Контрагенты.Родитель.Родитель.Код + "/" + Контрагенты.Родитель.Код + "/" + Контрагенты.Код КОНЕЦ КАК ПолныйКод ИЗ Справочник.Контрагенты КАК Контрагенты
Как получить все элементы справочника, содержащие в наименовании определенную подстроку, со всей иерархией, в которую они входят?
Запрос = Новый Запрос("ВЫБРАТЬ | Контрагенты.Ссылка КАК Ссылка |ИЗ | Справочник.Контрагенты КАК Контрагенты |ГДЕ | (Контрагенты.Наименование ПОДОБНО &ЧастьНаименования) И (НЕ Контрагенты.ЭтоГруппа) |ИТОГИ ПО | Ссылка ТОЛЬКО ИЕРАРХИЯ"); Запрос.УстановитьПараметр("ЧастьНаименования", "%" + ПолеВводаПодстрока + "%");
Как найти все элементы справочника, в которых не заполнен строковый реквизит?
ВЫБРАТЬ ФизическиеЛица.Ссылка ИЗ Справочник.ФизическиеЛица КАК ФизическиеЛица ГДЕ (ФизическиеЛица.ИНН = "") ВЫБРАТЬ ФизическиеЛица.Ссылка ИЗ Справочник.ФизическиеЛица КАК ФизическиеЛица ГДЕ (ФизическиеЛица.СтраховойНомерПФР = "") ИЛИ (ФизическиеЛица.СтраховойНомерПФР = " - -")
Как перенести все элементы справочника «Контрагенты» из одной группы в другую?
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Контрагенты.Ссылка |ИЗ | Справочник.Контрагенты КАК Контрагенты |ГДЕ | Контрагенты.Родитель = &СтарыйРодитель"; Запрос.УстановитьПараметр("СтарыйРодитель", СтарыйРодитель); Результат = Запрос.Выполнить(); Выборка = Результат.Выбрать(); Пока Выборка.Следующий() Цикл Контрагент = Выборка.Ссылка.ПолучитьОбъект(); Контрагент.Родитель = НовыйРодитель; Контрагент.Записать(); КонецЦикла;
Как организовать программный выбор элемента справочника?
// Получить форму выбора справочника как подчиненную // форме документа ФормаВыбора = Справочники.Номенклатура.ПолучитьФормуВыбора( , ЭтаФорма); // Открыть полученную форму ФормаВыбора.Открыть(); Процедура ОбработкаВыбора(ЗначениеВыбора, Источник) ПолученноеЗначение = ЗначениеВыбора; // Дальнейшая обработка значения. КонецПроцедуры ФормаВыбора = Справочники.Номенклатура.ПолучитьФормуВыбора( , ЭтаФорма); Выбрано = ФормаВыбора.ОткрытьМодально(); Процедура ПолеВводаНачалоВыбора(Элемент, СтандартнаяОбработка) // Запретить стандартную обработку. СтандартнаяОбработка = Ложь; // Получить форму выбора справочника как подчиненную полю ввода. ФормаВыбора = Справочники.Номенклатура.ПолучитьФормуВыбора( , Элемент); // Открыть полученную форму ФормаВыбора.Открыть(); КонецПроцедуры Процедура ПолеВводаОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) // Отключить стандартную обработку (при необходимости). СтандартнаяОбработка = Ложь; ПолученноеЗначение = ВыбранноеЗначение; // Дальнейшая обработка значения. КонецПроцедуры
Как сохранить фотографию сотрудника в справочнике «Сотрудники»?
Процедура ЗагрузитьФотографию(Элемент) Режим = РежимДиалогаВыбораФайла.Открытие; ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(Режим); ДиалогОткрытияФайла.ПолноеИмяФайла = ""; Фильтр = "Текст (*,*)|*.*"; ДиалогОткрытияФайла.Фильтр = Фильтр; ДиалогОткрытияФайла.МножественныйВыбор = Ложь; ДиалогОткрытияФайла.Заголовок = "Выберите картинку"; Если ДиалогОткрытияФайла.Выбрать() Тогда ВыбраннаяКартинка = Новый Картинка(ДиалогОткрытияФайла.ПолноеИмяФайла); ЭлементХранилища = Новый ХранилищеЗначения(ВыбраннаяКартинка); Фотография = ЭлементХранилища; КонецЕсли; КонецПроцедуры ВыбФайл = Новый ДвоичныеДанные(ДиалогОткрытияФайла.ПолноеИмяФайла); элХранилища = Новый ХранилищеЗначения(ВыбФайл); Фотография = элХранилища;
Как узнать, что справочник новый (УФ)?
ФлНовый = Параметры.Ключ.Пустая();
У справочников в 1С есть встроенные функции для поиска в них элементов, к ним относится НайтиПоКоду, НайтиПоНаименованию и НайтиПоРеквизиту;
В данном случае рассмотрим поиск по наименованию.
Синтаксис:
Справочники.<НазваниеСправочника>.НайтиПоНаименованию (<Значение>, <ПоискПоПолномуСоответсвию>, <Родитель>, <Владелец>)
Параметры:
НазваниеСправочника — наименование справочника, к примеру Сотрудники.
Значение— значение в реквизите Наименование.
ПоискПоПолномуСоответсвию — По умолчанию установлен в значении Ложь, т.е. ищется соответствие левой части (пример: ищем Алекс то найдем Алексей). Но если установить в истину то поиск будет вестись по полному значению, кроме пробелов в конце строки. (необязательный)
Родитель — Ссылка на родителя. Поиск будет вестись только по тем элементам где указан данный родитель. (необязательный)
Владелец — Ссылка на элемент владельца справочника, указанного на закладке Владельцы. (необязательный)
Результат:
Если элемент не найден возвращается ПустаяСсылка, иначе ссылка на элемент.
Если существует несколько элементов, возвращается только 1.
Пример:
НаименованиеЭлемента = "Иванов Иван Иванович"; ТекСправочник = Справочники.Преподаватели; РезультатПоискаПоНаименованию = ТекСправочник.НайтиПоНаименованию(НаименованиеЭлемента); Если РезультатПоискаПоНаименованию = ТекСправочник.ПустаяСсылка() Тогда Сообщить("Не найден"); Иначе Сообщить(РезультатПоискаПоНаименованию.код); КонецЕсли;
Поиск с учетом родителя:
Университет = Справочники.Университеты.НайтиПоНаименованию("МГИМО");
Преподователь = ТекСправочник.НайтиПоНаименованию("Иванов Иваон Иванович",,Университет);