Уникальность полей в одной строке табличной части документа.
Доброго времени суток, есть табличная часть документа с реквизитами ВидТовара1, ВидТовара2, ВидТовара3, ВидТовара4, ВидТовара5. Как реализовать уникальность этих полей? Таким образом если в ВидТовара1 выбран товар Машина то этот же товар при проведении не должен присутствовать в остальных видах товара.
По теме из базы знаний
- Программное добавление кнопок копирования табличных частей во все документы с минимальными изменениями конфигурации (или вообще без изменения)
- Выгрузка и загрузка данных из файла Excel с поиском по любым полям (есть поиск по ссылке, всего три итерации поиска. Управляемые формы или "Такси")
- Функция ВыгрузитьПоПравилу - мощный инструмент расширения возможностей ваших правил конвертации. Конвертация данных 2.1
- Доработка функции ОбщегоНазначения.ЗаменитьСсылки для автоматической чистки или свёртки табличных частей
- Обзор полезных методов БСП 3.1.4
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
как вариант: на форме для каждого реквизита ТЧ указать процедуру ПриИзменении, а в ней проверять
Для ВидТовара1 это будет вроде:
Если ВидТовара1 = ВидТовара2 или ВидТовара1 = ВидТовара3 или ВидТовара4 = ВидТовара5 тогда
ВидТовара1 = неопределено
КонецЕсли;
Для ВидТовара1 это будет вроде:
Если ВидТовара1 = ВидТовара2 или ВидТовара1 = ВидТовара3 или ВидТовара4 = ВидТовара5 тогда
ВидТовара1 = неопределено
КонецЕсли;
А на каком этапе возникла проблема?
Хоть при вводе проверяй, хоть при проведении.
Идеальный вариант проверки при вводе - вообще не отображать в форме выбора уже выбранные в этой строке виды.
Если постфактум проверять, то самый простой и универсальный вариант, который приходит в голову: добавлять виды в массив с проверкой на наличие в этом массиве такого элемента через Найти.
Хоть при вводе проверяй, хоть при проведении.
Идеальный вариант проверки при вводе - вообще не отображать в форме выбора уже выбранные в этой строке виды.
Если постфактум проверять, то самый простой и универсальный вариант, который приходит в голову: добавлять виды в массив с проверкой на наличие в этом массиве такого элемента через Найти.
(26) Очень редко работаю с таким режимом. Кажись для начала нужно установить галку "Режим выбора из списка". После этого можно и ловить НачалоВыбораИзСписка и программно заполнять свойство СписокВыбора. Вернее не заполнять это свойство, а через него программно изменять список выбора.
ЗЫ. Но там еще пару каких-то приседаний нужно было сделать, чтобы корректно все работало. Лучше загуглить пример работы.
ЗЫ. Но там еще пару каких-то приседаний нужно было сделать, чтобы корректно все работало. Лучше загуглить пример работы.
(25) На практике такую архитектуру никто в здравом уме не нарисует. Задача теоретическая, и у автора ясно указано, что контролировать необходимо при проведении. Впрочем, как и делается во всех нормальных решениях - черновики не проверяются.
А если контролировать в момент ввода, то есть еще одна неприятная штука - для того, например, чтобы в одной строке поменять местами значения "ВидТовара1" и "ВидТовара2" - вам придется сначала их оба полностью очистить.
А если контролировать в момент ввода, то есть еще одна неприятная штука - для того, например, чтобы в одной строке поменять местами значения "ВидТовара1" и "ВидТовара2" - вам придется сначала их оба полностью очистить.
(28) Ок. Без доп. инфы по задаче не вижу предмета для спора.
Да. Но только в случае когда порядок "тегов" имеет значение.
А если порядок "тегов" имеет значение, то это уже никакие не теги, а самая настоящая иерархия.
например, чтобы в одной строке поменять местами значения "ВидТовара1" и "ВидТовара2" - вам придется сначала их оба полностью очистить.
Да. Но только в случае когда порядок "тегов" имеет значение.
А если порядок "тегов" имеет значение, то это уже никакие не теги, а самая настоящая иерархия.
(29) Нет, вне зависимости от порядка. У вас есть ВидТовара2 - Машина, ВидТовара5 - Кресло. Вам их надо поменять местами. В этом случае в ВидТовара2 вам в списке не отобразится кресло, а в ВидТовара5 не отобразится Машина.
Ну если мы идем по пути ограничения списка выбора (исключая из него уже введенные значения во ВСЕЙ этой строке).
Ну если мы идем по пути ограничения списка выбора (исключая из него уже введенные значения во ВСЕЙ этой строке).
(14) Либо чисто теоретическая задача. Да, теперь понял.
Задача стоит контролировать именно при проведении, что более верно, чем контролировать при вводе. Потому как ТЧ как и сам документ целиком могут быть загружены на форму из внешних источников, и тогда контроль доступен только при записи.
Задача стоит контролировать именно при проведении, что более верно, чем контролировать при вводе. Потому как ТЧ как и сам документ целиком могут быть загружены на форму из внешних источников, и тогда контроль доступен только при записи.
МассивИменРеквизитов = Новый Массив;
МассивИменРеквизитов.Добавить("ВидТовара1");
МассивИменРеквизитов.Добавить("ВидТовара2");
МассивИменРеквизитов.Добавить("ВидТовара3");
МассивИменРеквизитов.Добавить("ВидТовара4");
МассивИменРеквизитов.Добавить("ВидТовара5");
Для Каждого СтрокаТЧ из ТЧ Цикл
МассивЗначений = Новый Массив;
Для Каждого ИмяРеквизита Из МассивИменРеквизитов Цикл
Если МассивЗначений.Найти(СтрокаТЧ[ИмяРеквизита]) = Неопределено Тогда
МассивЗначений.Добавить(СтрокаТЧ[ИмяРеквизита]);
Иначе
Сообщить("Алярм! Алярм!");
КонецЕсли;
КонецЦикла;
КонецЦикла;
ПоказатьТЗ = Новый ТаблицаЗначений;
ТЗ.Колонки.Добавить("Колонка1");
Для Каждого СтрокаТЧ ИЗ Объект.ТабличнаяЧасть1 Цикл
СтрокаТЗ = ТЗ.Добавить();
СтрокаТЗ.Колонка1 = СтрокаТЧ.Реквизит1;
СтрокаТЗ = ТЗ.Добавить();
СтрокаТЗ.Колонка1 = СтрокаТЧ.Реквизит2;
СтрокаТЗ = ТЗ.Добавить();
СтрокаТЗ.Колонка1 = СтрокаТЧ.Реквизит3;
СтрокаТЗ = ТЗ.Добавить();
СтрокаТЗ.Колонка1 = СтрокаТЧ.Реквизит4;
СтрокаТЗ = ТЗ.Добавить();
СтрокаТЗ.Колонка1 = СтрокаТЧ.Реквизит5;
ТЗ.Свернуть("Колонка1");
Если ТЗ.Количество() < 5 Тогда
Сообщить("КУКУ");
КонецЕсли;
ТЗ.Очистить();
КонецЦикла;
Показать
Кажись для начала нужно установить галку "Режим выбора из списка". После этого можно и ловить НачалоВыбораИзСписка и программно заполнять свойство СписокВыбора. Вернее не заполнять это свойство, а через него программно изменять список выбора. Но там еще пару каких-то приседаний нужно было сделать, чтобы корректно все работало.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот