Добавить в корзинуПозвонить
Найти в Дзене
Владимир Жирицкий

1С. Удалить строку в табличной части, если имеется дубль или пустое значение колонки. Таблица здесь называется "Номенклатура" и колонка тоже

&НаКлиенте Процедура НоменклатураПриОкончанииРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования) // Получаем текущие данные через параметры события ТекущиеДанные = Элемент.ТекущиеДанные; Если ТекущиеДанные = Неопределено Тогда Возврат; КонецЕсли; Номенклатура = ТекущиеДанные.Номенклатура; ИдентификаторСтроки = ТекущиеДанные.ПолучитьИдентификатор(); Если Не ЗначениеЗаполнено(Номенклатура) Тогда // Удаляем пустую строку на сервере УдалитьСтрокуНаСервере(ИдентификаторСтроки); Возврат; КонецЕсли; // Проверяем дубликаты на сервере (исключая текущую строку) ЕстьДубликат = ПроверитьДубликатыНаСервере(ИдентификаторСтроки, Номенклатура); Если ЕстьДубликат Тогда УдалитьСтрокуНаСервере(ИдентификаторСтроки); КонецЕсли; КонецПроцедуры &НаСервере Процедура УдалитьСтрокуНаСервере(Идентификатор) Строка = Объект.Номенклатура.НайтиПоИдентификатору(Идентификатор); Если Строка <> Неопределено Тогда Объект.Номенклатура.Удалить(Строка); КонецЕсли; КонецПроцедуры &НаСервере Функция ПроверитьДубликатыН

&НаКлиенте

Процедура НоменклатураПриОкончанииРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования)

// Получаем текущие данные через параметры события

ТекущиеДанные = Элемент.ТекущиеДанные;

Если ТекущиеДанные = Неопределено Тогда

Возврат;

КонецЕсли;

Номенклатура = ТекущиеДанные.Номенклатура;

ИдентификаторСтроки = ТекущиеДанные.ПолучитьИдентификатор();

Если Не ЗначениеЗаполнено(Номенклатура) Тогда

// Удаляем пустую строку на сервере

УдалитьСтрокуНаСервере(ИдентификаторСтроки);

Возврат;

КонецЕсли;

// Проверяем дубликаты на сервере (исключая текущую строку)

ЕстьДубликат = ПроверитьДубликатыНаСервере(ИдентификаторСтроки, Номенклатура);

Если ЕстьДубликат Тогда

УдалитьСтрокуНаСервере(ИдентификаторСтроки);

КонецЕсли;

КонецПроцедуры

&НаСервере

Процедура УдалитьСтрокуНаСервере(Идентификатор)

Строка = Объект.Номенклатура.НайтиПоИдентификатору(Идентификатор);

Если Строка <> Неопределено Тогда

Объект.Номенклатура.Удалить(Строка);

КонецЕсли;

КонецПроцедуры

&НаСервере

Функция ПроверитьДубликатыНаСервере(Идентификатор, Номенклатура)

СтрокаДляПроверки = Объект.Номенклатура.НайтиПоИдентификатору(Идентификатор);

Если СтрокаДляПроверки = Неопределено Тогда

Возврат Ложь;

КонецЕсли;

Для каждого Строка Из Объект.Номенклатура Цикл

Если Строка = СтрокаДляПроверки Тогда

Продолжить;

КонецЕсли;

Если Строка.Номенклатура = Номенклатура Тогда

Возврат Истина;

КонецЕсли;

КонецЦикла;

Возврат Ложь;

КонецФункции