Проблема при сравнении табличных частей в запросе
Здравствуйте! Подскажите, пожалуйста, в таком вопросе. В справочнике есть табличная часть с реквизитом1, например. При записи нового элемента справочника, я хочу проверить, есть ли такая же табличная часть у существующего элемента справочника. Порядок следования не важен. Т.е. если есть таб.часть со значениями знч1, знч2, знч3, а мы занесли новый элемент с табличной частью знч2, знч1, знч3, то мне это надо вывести в ошибку. Я хочу это сделать в запросе, пока не пойму как и можно ли вообще это сделать запросом.?
По теме из базы знаний
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
там не все так просто.. сначала левым соединением определяю, что совпало (ставлю 1), а где null (ставлю 0), учитывая ссылки конечно, потом считаю количество единиц по каждой ссылке (т.е. по каждой табличной части) и сравниваю, чтоб совпадало. Пока работает!)
(6) Я вот такое для сравнения двух тз делал
Функция СравнитьДвеТЗ(ТЗ1, ТЗ2) Экспорт
Если НЕ ТипЗнч(ТЗ1) = Тип("ТаблицаЗначений") Тогда
Возврат Ложь;
КонецЕсли;
Если НЕ ТипЗнч(ТЗ2) = Тип("ТаблицаЗначений") Тогда
Возврат Ложь;
КонецЕсли;
//Количество строк в ТЗ
Если ТЗ1.Количество() <> ТЗ2.Количество() Тогда
Возврат Ложь;
КонецЕсли;
//Количество колонок в ТЗ
Если ТЗ1.Колонки.Количество() <> ТЗ2.Колонки.Количество() Тогда
Возврат Ложь;
КонецЕсли;
//Удаляем номер строки т.к. сортировка может отличаться
Если Не ТЗ1.Колонки.Найти("НомерСтроки") = Неопределено Тогда
ТЗ1.Колонки.Удалить("НомерСтроки");
КонецЕсли;
Если Не ТЗ2.Колонки.Найти("НомерСтроки") = Неопределено Тогда
ТЗ2.Колонки.Удалить("НомерСтроки");
КонецЕсли;
Для Каждого Колонка Из ТЗ1.Колонки Цикл
КолонкиТЗ1 = ?(ЗначениеЗаполнено(КолонкиТЗ1), КолонкиТЗ1 + ", " +"ТЗ_1."+Колонка.Имя, "ТЗ_1."+Колонка.Имя);
КолонкиЗапросУсловие = ?(ЗначениеЗаполнено(КолонкиЗапросУсловие), КолонкиЗапросУсловие + " И ТЗ_1."+Колонка.Имя + "= ТЗ_2."+ Колонка.Имя, "ТЗ_1."+Колонка.Имя + "= ТЗ_2."+ Колонка.Имя);
КонецЦикла;
Для Каждого Колонка Из ТЗ2.Колонки Цикл
КолонкиТЗ2 = ?(ЗначениеЗаполнено(КолонкиТЗ2), КолонкиТЗ2 + ", " +"ТЗ_2."+Колонка.Имя, "ТЗ_2."+Колонка.Имя);
КонецЦикла;
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("ТЗ1", ТЗ1);
Запрос.УстановитьПараметр("ТЗ2", ТЗ2);
Запрос.Текст = "ВЫБРАТЬ
|*
|ПОМЕСТИТЬ ТЗ_1
|ИЗ
| &ТЗ1 КАК ТЗ1
|;
|
|//////////////////////////////////////////////////////////// ////////////////////
|ВЫБРАТЬ
|*
|ПОМЕСТИТЬ ТЗ_2
|ИЗ
| &ТЗ2 КАК ТЗ2
|
|;
|//////////////////////////////////////////////////////////// ////////////////////
|ВЫБРАТЬ " + КолонкиТЗ1 + ", " + КолонкиТЗ2 + " ИЗ ТЗ_1 ПОЛНОЕ СОЕДИНЕНИЕ ТЗ_2 ПО " + КолонкиЗапросУсловие;
Результат = Запрос.Выполнить().Выгрузить();
Если Результат.Количество() <> ТЗ1.Количество() Тогда
Возврат Ложь;
Иначе
Возврат Истина;
КонецЕсли;
КонецФункции
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот