Проверка на наличие данные в Табличной части справочника упр приложение
управляемое приложение, самописная конфа. Есть справочник контрагенты, у него есть ТП - транспортные средства, и нужно, чтобы при добавлении нового транспортного средства, если такое уже есть у контрагента, вылезала ошибка, в обычном приложении можно было просто циклом пройтись по строкам это ТЧ и условие прописать, а как в управляемом приложении сделать это?
По теме из базы знаний
- Удаление данных с отбором и построением дерева ссылок в базах 1С 8.1-8.3 УТ 10.3./11, БП 2/3, ЗУП 2.5/3, КА 1.1/2, УНФ 1.6/3.0
- Загрузка номенклатуры c картинками (несколько потоков одновременно) и сопутствующими данными в базу и любые документы из yml, xls, xlsx, xlsm, ods, ots, csv для УТ 10.3, УТ 11 (все), БП 3, КА 2, ERP 2, УНФ 1.6/3.0, Розница 2/3.0
- Загрузка чеков в 1С из ФНС в документы БП, УНФ, ERP, КА и УТ
- Решение задач на Управляемые формы из Сборника задач для подготовки к экзамену 1С:Специалист по платформе
- Интеграция Честный Знак и 1C: обмен и синхронизация с маркировками для УТ11,УНФ,КА2,ERP,Розница:Расширение для работы с СУЗ,ГИСМТ,СБИС,Эдо-Лайт
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
я не могу придумать как условие сделать, вот я получил мою ТЧ:
ДобавляемоеТС = Элементы.ТранспортныеСредства.ТекущиеДанные;
точнее текущую строку в табличной части, а как потом сделать проверку, есть ли в ТЧ уже записи с такими данными или нет?
ДобавляемоеТС = Элементы.ТранспортныеСредства.ТекущиеДанные;
точнее текущую строку в табличной части, а как потом сделать проверку, есть ли в ТЧ уже записи с такими данными или нет?
&НаКлиенте
Процедура ТранспортныеСредстваПриИзменении(Элемент)
ДобавляемоеТС = Элементы.ТранспортныеСредства.ТекущиеДанные;
Для каждого строка из Объект.ТранспортныеСредства Цикл
Если НЕ строка.ТранспортноеСредство = ДобавляемоеТС.ТранспортноеСредство Тогда
Сообщить("Такое ТС уже есть в базе");
КонецЕсли;
КонецЦикла;
КонецПроцедуры
но такое условие выдает мне постоянно что такое ТС есть, мне же нужно, что если уже введено такое ТС, то ошибка летит, иначе нет
Процедура ТранспортныеСредстваПриИзменении(Элемент)
ДобавляемоеТС = Элементы.ТранспортныеСредства.ТекущиеДанные;
Для каждого строка из Объект.ТранспортныеСредства Цикл
Если НЕ строка.ТранспортноеСредство = ДобавляемоеТС.ТранспортноеСредство Тогда
Сообщить("Такое ТС уже есть в базе");
КонецЕсли;
КонецЦикла;
КонецПроцедуры
но такое условие выдает мне постоянно что такое ТС есть, мне же нужно, что если уже введено такое ТС, то ошибка летит, иначе нет
делал так:
ТекДанные = Элементы.ТранспортныеСредства.ТекущиеДанные;
ПараметрыОтбора = Новый Структура;
ПараметрыОтбора.Вставить("ТранспортноеСредство", ТекДанные);
НайденныеСтроки = Объект.ТранспортныеСредства.НайтиСтроки(ПараметрыОтбора);
не получается
ТекДанные = Элементы.ТранспортныеСредства.ТекущиеДанные;
ПараметрыОтбора = Новый Структура;
ПараметрыОтбора.Вставить("ТранспортноеСредство", ТекДанные);
НайденныеСтроки = Объект.ТранспортныеСредства.НайтиСтроки(ПараметрыОтбора);
не получается
&НаКлиенте
Процедура ТранспортныеСредстваПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа)
ТекДанные = Элементы.ТранспортныеСредства.ТекущиеДанные;
Если ТекДанные = Неопределено Тогда
Возврат
КонецЕсли;
ПараметрыОтбора = Новый Структура;
ПараметрыОтбора.Вставить("ТранспортноеСредство", ТекДанные.ТранспортноеСредство);
НайденныеСтроки = Объект.ТранспортныеСредства.НайтиСтроки(ПараметрыОтбора);
Для каждого строка из НайденныеСтроки Цикл
Если строка.ТранспортноеСредство = ТекДанные.ТранспортноеСредство Тогда
Сообщить("такая запись уже есть");
КонецЕсли;
КонецЦикла;
КонецПроцедуры
При добавлении второй строки, даже до выбора ТС летит ошибка что такое ТС уже есть
Процедура ТранспортныеСредстваПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа)
ТекДанные = Элементы.ТранспортныеСредства.ТекущиеДанные;
Если ТекДанные = Неопределено Тогда
Возврат
КонецЕсли;
ПараметрыОтбора = Новый Структура;
ПараметрыОтбора.Вставить("ТранспортноеСредство", ТекДанные.ТранспортноеСредство);
НайденныеСтроки = Объект.ТранспортныеСредства.НайтиСтроки(ПараметрыОтбора);
Для каждого строка из НайденныеСтроки Цикл
Если строка.ТранспортноеСредство = ТекДанные.ТранспортноеСредство Тогда
Сообщить("такая запись уже есть");
КонецЕсли;
КонецЦикла;
КонецПроцедуры
При добавлении второй строки, даже до выбора ТС летит ошибка что такое ТС уже есть
Жуткий код получается... Но как-то так:
&НаКлиенте
Процедура ТранспортныеСредстваПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа)
ТекДанные = Элементы.ТранспортныеСредства.ТекущиеДанные;
Если ТекДанные = Неопределено Тогда
Возврат
КонецЕсли;
ПараметрыОтбора = Новый Структура("ТранспортноеСредство", ТекДанные.ТранспортноеСредство);
НайденныеСтроки = Объект.ТранспортныеСредства.НайтиСтроки(ПараметрыОтбора);
Для каждого строка из НайденныеСтроки Цикл
Если строка.Номер <> ТекДанные.Номер Тогда
Сообщить("такая запись уже есть");
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Показать
Так же должен работать код
&НаКлиенте
Процедура ТранспортныеСредстваПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа)
ТекДанные = Элементы.ТранспортныеСредства.ТекущиеДанные;
Если ТекДанные = Неопределено Тогда
Возврат
КонецЕсли;
Для каждого Строка из Объект.ТранспортныеСредства Цикл
Если Строка.ТранспортноеСредство = ТекДанные.ТранспортноеСредство
И Строка.Номер <> ТекДанные.Номер Тогда
Сообщить("такая запись уже есть");
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Показать
ПРоцедура "ПриИзменении" на элементе ТЧ
Дальше через найтиСтроки()
Всё...
Дальше через найтиСтроки()
ТекДанные = Элементы.ТранспортныеСредства.ТекущиеДанные;
ПараметрыОтбора = Новый Структура("ТранспортноеСредство", ТекДанные.ТранспортноеСредство);
//Или ПараметрыОтбора = Новый Структура("ТранспортноеСредство", Элемент.Значение);
НайденныеСтроки = Объект.ТранспортныеСредства.НайтиСтроки(ПараметрыОтбора);
Если НайденныеСтроки.Количество() > 1 Тогда
Сообщить("Уже есть");
КонецЕсли;
Всё...
Вот рабочий код по поиску дублей номенклатуры в ТЧ - Товары. В процедуре "При окончании редактирования" Табличной части
Процедура ТоварыПриОкончанииРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования)
Попытка
СтрокаТабличнойЧасти = ЭлементыФормы.Товары.ТекущаяСтрока;
Номенклатура = СтрокаТабличнойЧасти.Номенклатура;
СтруктураДляПоиска = Новый Структура;
структураДляПоиска.Вставить("Номенклатура",Номенклатура);
МассивСтрок = Товары.НайтиСтроки(структураДляПоиска);
Если МассивСтрок.Количество()>1 Тогда
Сообщить("Уже есть такой товар"+ строка(Номенклатура));
ЭтотОбъект.Товары.Удалить(СтрокаТабличнойЧасти);
возврат;
КонецЕсли;
Исключение
КонецПопытки;
КонецПроцедуры
Показать
(38) Sevens, вот что получилось:
&НаКлиенте
Процедура ТранспортныеСредстваПриОкончанииРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования)
ТекДанные = Элементы.ТранспортныеСредства.ТекущиеДанные;
СтрокаТабличнойЧасти = Элементы.ТранспортныеСредства.ТекущаяСтрока;
ПараметрыОтбора = Новый Структура("ТранспортноеСредство", ТекДанные.ТранспортноеСредство);
НайденныеСтроки = Объект.ТранспортныеСредства.НайтиСтроки(ПараметрыОтбора);
Если НайденныеСтроки.Количество() > 1 Тогда
Сообщить("Вводимое ТС уже есть у данного контрагента");
Объект.ТранспортныеСредства.Удалить(СтрокаТабличнойЧасти);
Возврат
КонецЕсли;
КонецПроцедуры
и летит ошибка:
{Справочник.Контрагенты.Форма.ФормаЭлемента.Форма(275)}: Ошибка при вызове метода контекста (Удалить)
Объект.ТранспортныеСредства.Удалить(СтрокаТабличнойЧасти);
по причине:
Недопустимое значение параметра (параметр номер '1')
&НаКлиенте
Процедура ТранспортныеСредстваПриОкончанииРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования)
ТекДанные = Элементы.ТранспортныеСредства.ТекущиеДанные;
СтрокаТабличнойЧасти = Элементы.ТранспортныеСредства.ТекущаяСтрока;
ПараметрыОтбора = Новый Структура("ТранспортноеСредство", ТекДанные.ТранспортноеСредство);
НайденныеСтроки = Объект.ТранспортныеСредства.НайтиСтроки(ПараметрыОтбора);
Если НайденныеСтроки.Количество() > 1 Тогда
Сообщить("Вводимое ТС уже есть у данного контрагента");
Объект.ТранспортныеСредства.Удалить(СтрокаТабличнойЧасти);
Возврат
КонецЕсли;
КонецПроцедуры
и летит ошибка:
{Справочник.Контрагенты.Форма.ФормаЭлемента.Форма(275)}: Ошибка при вызове метода контекста (Удалить)
Объект.ТранспортныеСредства.Удалить(СтрокаТабличнойЧасти);
по причине:
Недопустимое значение параметра (параметр номер '1')
&НаКлиенте
Процедура ТранспортныеСредстваПриОкончанииРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования)
СтрокаТабличнойЧасти = Элементы.ТранспортныеСредства.ТекущаяСтрока;
ПараметрыОтбора = Новый Структура("ТранспортноеСредство", СтрокаТабличнойЧасти.ТранспортноеСредство);
НайденныеСтроки = Объект.ТранспортныеСредства.НайтиСтроки(ПараметрыОтбора);
Если НайденныеСтроки.Количество() > 1 Тогда
Сообщить("Вводимое ТС уже есть у данного контрагента");
УдалитьСтроку(СтрокаТабличнойЧасти);
Возврат
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура УдалитьСтроку(СтрокаТЧ)
Объект.ТранспортныеСредства.Удалить(СтрокаТЧ);
КонецПроцедуры
ПоказатьПоидее должно работать) Не проверял. Только ещё в попытку оберни код "При окончании". Зачем делал не вспомню... но раз делал значит надо было)
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот