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