Ок. Понятно. Гляну, спасибо. Сегодня мучался с процедурой своей.
В табличном поле на полевода колонки ГосНомер1 вешаю событие “ОбработкаВыбора”. Тип реквизита ГосНомер1 – СправочникСсылка.ГаражныеНомера.
Тут есть также две колонки НР1См и КР1См. Создаю таблицу значений с такими же колонками. И обрабатываю 3 ситуации поиска в ТЗ:
1. Когда в ТЗ не найдено ВыбранноеЗначение и найдено ТекущееЗначение ячейки.
2. Когда не найдено ни то ни другое
3. Когда не найдено ТекущееЗначение (пустая ячейка) и найдено ВыбранноеЗначение
Всё работает отлично, только не знаю как обработать ситуацию, когда мы в табличном поле, в ячейке, где стоит какое-то значение жмём Очистить (крестик). Стертое значение ячейки остается в ТЗ, и при последующем выборе этого значения в табличном поле выдаёт мою ошибку: "Ошибка! Автобус: " + НайденныйГосНомер + " участвует в пересекающихся маршрутах."
Как запихнуть сюда событие Очистить вообще не представляю. Или как-то по-другому можно сделать?
[codebox]Процедура ПроверкаГосНомеров(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
Если ТЗ = Неопределено Тогда
ТабЗнач = Новый ТаблицаЗначений;
ТабЗнач.Колонки.Добавить("НР1См");
ТабЗнач.Колонки.Добавить("КР1См");
ТабЗнач.Колонки.Добавить("ГосНомер1");
СтрокаТабЗнач = ТабЗнач.Добавить();
СтрокаТабЗнач.ГосНомер1 = ВыбранноеЗначение;
СтрокаТабЗнач.НР1См = ЭлементыФормы.СписокОбслужМаршрутов.ТекущиеДанные.Маршрут.НР1См;
СтрокаТабЗнач.КР1См = ЭлементыФормы.СписокОбслужМаршрутов.ТекущиеДанные.Маршрут.КР1См;
ТЗ = ТабЗнач;
Иначе
ТекЗначениеГосНомер1 = ЭлементыФормы.СписокОбслужМаршрутов.ТекущиеДанные.ГосНомер1;
ТекЗначениеНР1См = ЭлементыФормы.СписокОбслужМаршрутов.ТекущиеДанные.Маршрут.НР1См;
ТекЗначениеКР1См = ЭлементыФормы.СписокОбслужМаршрутов.ТекущиеДанные.Маршрут.КР1См;
//проверка изменения существующего значения в ячейке колонки ГосНомер1
//если текущее значение ячейки найдено в ТЗ и текущие значения НР1См и КР1См совпадают
//c соответствующими значениями в ТЗ, то тогда меняем это значение в ТЗ на выбранное значение
СтрокаТЗТекГосНом = ТЗ.Найти(ТекЗначениеГосНомер1, "ГосНомер1");
СтрокаТЗВыбГосНом = ТЗ.Найти(ВыбранноеЗначение, "ГосНомер1");
Если (СтрокаТЗВыбГосНом = Неопределено) И (СтрокаТЗТекГосНом <> Неопределено) Тогда
ИндСтрТЗТекГосНом = ТЗ.Индекс(СтрокаТЗТекГосНом);
ГосНомер1 = ТЗ[ИндСтрТЗТекГосНом].ГосНомер1;
НР1См = ТЗ[ИндСтрТЗТекГосНом].НР1См;
КР1См = ТЗ[ИндСтрТЗТекГосНом].КР1СМ;
Если (ТекЗначениеГосНомер1 = ГосНомер1) И (ТекЗначениеНР1См = НР1См) И (ТекЗначениеКР1См = КР1См) Тогда
ТЗ[ИндСтрТЗТекГосНом].ГосНомер1 = ВыбранноеЗначение;
КонецЕсли;
//если не найден выбранный и не найден текущий, тогда добавляем новую строку в ТЗ
ИначеЕсли (СтрокаТЗВыбГосНом = Неопределено) И (СтрокаТЗТекГосНом = Неопределено) Тогда
СтрокаТабЗнач = ТЗ.Добавить();
СтрокаТабЗнач.ГосНомер1 = ВыбранноеЗначение;
СтрокаТабЗнач.НР1См = ЭлементыФормы.СписокОбслужМаршрутов.ТекущиеДанные.Маршрут.НР1См;
СтрокаТабЗнач.КР1См = ЭлементыФормы.СписокОбслужМаршрутов.ТекущиеДанные.Маршрут.КР1См;
Иначе ИндексНайденнойСтрокиТЗ = ТЗ.Индекс(СтрокаТЗВыбГосНом);
НайденныйГосНомер = ТЗ[ИндексНайденнойСтрокиТЗ].ГосНомер1;
НР1См = ТЗ[ИндексНайденнойСтрокиТЗ].НР1См;
КР1См = ТЗ[ИндексНайденнойСтрокиТЗ].КР1См;
Если ВыбранноеЗначение = НайденныйГосНомер Тогда
Если ((НР1См > ТекЗначениеНР1См) И (НР1См < ТекЗначениеКР1См)) ИЛИ
((НР1См < ТекЗначениеНР1См) И (КР1См > ТекЗначениеНР1См)) Тогда
Сообщить ("Ошибка! Автобус: " + НайденныйГосНомер + " участвует в пересекающихся маршрутах.",СтатусСообщения.Внимание);
СтандартнаяОбработка = Ложь;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецПроцедуры[/codebox]
И объясните вот что. Пустые ячейки табличного поля хранят ПустыеСсылки. Как будет выглядеть пустаяссылка для моих пустых ячеек? (У меня документ Разнарядка, табличная часть СписокОбслужМаршрутов, реквизит ГосНомер1).
Спасибо.