Как проверить есть ли лишние значения в тч?

1. arsen_botashev 18.04.19 12:53 Сейчас в теме
Как проверить есть ли лишние значения в тч помимо тех. которые нужны?
Допустим есть в тч строки и в них написано документ, документ1, документ2, и тд ., то условие не выполняется, а если там еще какой-то например Справчоник, то условие выполняется?
По теме из базы знаний
Ответы
Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
2. SedovSU@mail.ru 297 18.04.19 12:56 Сейчас в теме
Ну так вы обойдите табличную часть и сравните, на самом простом уровне даже. если тип значения - какой то справочник значит нужно условие выполнить
3. SedovSU@mail.ru 297 18.04.19 13:00 Сейчас в теме
То есть можно так сделать например

Для Каждого СтрокаТаблицы Из Таблица Цикл
Если Метаданные.Справочники.Содержит(СтрокаТаблицы.КакакоеТоПолеГдеИДокументыИСправочники.Метаданные()) Тогда
// это справочник
ИНаче
// это не справочник
Конецесли
Конеццикла
4. arsen_botashev 18.04.19 14:11 Сейчас в теме
(3)Кажется я не правильно поставил вопрос.


у меня есть колонка в тч: Вид передачи. тип СправчоникСсылка
Так вот, если Вид передачи в этой тч = паспорт, или визитка, или бумага(это примеры) то тогда надо скрывать элемент с формы.
Но, если помимо паспорта или визитки или бумаги, есть допустим Ваза, то надо показать элемент на форме.

то есть там может быть паспорт, тогда скрываем элемент, может быть паспорт и визитка, тогда тоже скрываем,
а может быть паспорт и Ваза допустим, тогда элемент показываем
примерно так
5. SedovSU@mail.ru 297 18.04.19 14:26 Сейчас в теме
(4) ну тогда совсем проще. То есть у вас есть какие значение справочника при которых какой то элемент должен показываться, а при каких то нет. Так вот можно так написать

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

НужноПоказатьЭлемент = Ложь;
Для Каждого ЭлементМассива Из Массив Цикл
Если Таблица.Найти(ЭлементМассива, "ВидПередачи") <> Неопрделено Тогда
НужноПоказатьЭлемент = Истина;
Прервать;
Конеццикла

Элемент.ИмяЭлемента.Видимость = НужноПоказатьЭлемент
Показать
6. arsen_botashev 18.04.19 15:57 Сейчас в теме
(5)Сделал так, почему - то не работает, ошибок никаких нет
	Массив = Новый Массив;   // те виды передачи для которых есть страховка
	Массив.Добавить(Справочники.ВидыПередачиДляКурьерскойСлужбы.НайтиПоНаименованию("Буклет"));
	Массив.Добавить(Справочники.ВидыПередачиДляКурьерскойСлужбы.НайтиПоНаименованию("Втулки"));
	Массив.Добавить(Справочники.ВидыПередачиДляКурьерскойСлужбы.НайтиПоНаименованию("Выставочный экспонат"));
	Массив.Добавить(Справочники.ВидыПередачиДляКурьерскойСлужбы.НайтиПоНаименованию("Каталог"));
	Массив.Добавить(Справочники.ВидыПередачиДляКурьерскойСлужбы.НайтиПоНаименованию("Листовки"));
	Массив.Добавить(Справочники.ВидыПередачиДляКурьерскойСлужбы.НайтиПоНаименованию("Материалы"));
	Массив.Добавить(Справочники.ВидыПередачиДляКурьерскойСлужбы.НайтиПоНаименованию("Образец продукции"));
	Массив.Добавить(Справочники.ВидыПередачиДляКурьерскойСлужбы.НайтиПоНаименованию("Печать"));
	Массив.Добавить(Справочники.ВидыПередачиДляКурьерскойСлужбы.НайтиПоНаименованию("Подарки"));
	Массив.Добавить(Справочники.ВидыПередачиДляКурьерскойСлужбы.НайтиПоНаименованию("Претензия"));
	Массив.Добавить(Справочники.ВидыПередачиДляКурьерскойСлужбы.НайтиПоНаименованию("Радиокомпоненты"));
	Массив.Добавить(Справочники.ВидыПередачиДляКурьерскойСлужбы.НайтиПоНаименованию("Рекламные материалы"));
	Массив.Добавить(Справочники.ВидыПередачиДляКурьерскойСлужбы.НайтиПоНаименованию("счетчик"));
	Массив.Добавить(Справочники.ВидыПередачиДляКурьерскойСлужбы.НайтиПоНаименованию("УСПД"));
	Массив.Добавить(Справочники.ВидыПередачиДляКурьерскойСлужбы.НайтиПоНаименованию("Экспозиция"));
	Массив.Добавить(Справочники.ВидыПередачиДляКурьерскойСлужбы.НайтиПоНаименованию("Электронные компоненты"));
	Массив.Добавить(Справочники.ВидыПередачиДляКурьерскойСлужбы.НайтиПоНаименованию("Электротехнич. продукция"));
	Элементы.ГруппаСтрахованиеОтправителя.Доступность = Ложь;
	Для Каждого ЭлементМассива Из Массив Цикл
		Отбор = новый Структура();
		Отбор.Вставить("ВидПередачи",ЭлементМассива); 
		Если Объект.СоставВложимого.НайтиСтроки(Отбор) <> Неопределено Тогда
			Элементы.ГруппаСтрахованиеОтправителя.Доступность = Истина;
			Прервать;
		КонецЕсли;		
	Конеццикла 
Показать
7. uk09 18.04.19 23:11 Сейчас в теме
(6)
Добрый день!

Сделал так, почему - то не работает, ошибок никаких нет

Никаких ошибок, а что на форме выходит ? Можете скриншот приложить? И в отладчике, посмотрели, что содержит отбор, когда цикл заканчивается ?
8. ben19791010 19.04.19 04:23 Сейчас в теме
(6)
почему - то не работает, ошибок никаких нет
форму обновляете? записываете?
11. arsen_botashev 19.04.19 09:07 Сейчас в теме
(8)Обновляю только отображение элементов
9. SedovSU@mail.ru 297 19.04.19 06:22 Сейчас в теме
(6) Вот тут нужно написать по другому

Вместо
Если Объект.СоставВложимого.НайтиСтроки(Отбор) <> Неопределено Тогда


Нужно (у вас в результате же массив вернется, он либо пустой либо заполненный, не может быть НЕопределено

Если Объект.СоставВложимого.НайтиСтроки(Отбор).Количество() <> 0 Тогда
10. arsen_botashev 19.04.19 09:07 Сейчас в теме
(9)Да, я так и сделал через количество, но проблема в том что он проверяет все элементы в массиве, и каждый раз возвращает массив(найтистроки). получается если в массиве в моем 10 элементов, он(Если Объект.СоставВложимого.НайтиСтроки(Отбор)) возвращает 10 массивов , с этим ничего не поделать да?
И еще он проверяет пустое значение и почему-то возвращает массив.количество 1)))
Вообще вся эта конструкция привязана к тч в событие при изменении.
12. arsen_botashev 19.04.19 09:19 Сейчас в теме
(9)Все разобрался, всем спасибо!
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот