Закрывается программа при закрытии обработки

Новая тема
Показывать по 10 20 40 сообщений
Самописная конфигурация на 8.1. Из формы обработки вызывается еще одна форма - ФормаПодбора, в ней по строке подбирается номенклатура по коду. Если подходящих позиций несколько то ВыбратьСтроку() . После выбора номенклатуры ФормаПодбора закрывается и передает выбранную номенклатуру в параметр обработки.
Вот в момент передачи этого параметра происходит сбой - программа закрывается по ошибке. Причем не на любой номенклатуре, а на некоторых. И именно если первоначально было несколько и выбирали. Пробовала и внешней обработкой и в составе конфигурации - ну никак. Подскажите, у кого какие мысли есть...
Есть мысль пройтись отладчиком по коду этого подбора и найти место, на котором программа "падает".
Нашла, вот тут падает.

ОбработкаОбъект.Номенклатура = НоменклатураДляПодбора

Типы проверила,одинаковые. Обработка в большинстве случаев работает. Каким то образом связано с номенклатурой, полученной выбором из списка. Ума не приложу чем она может отличаться от номенклатуры найденной сразу, если тип одинаковый.
"Процедура ПолеПодбораОкончаниеВводаТекста(Элемент, Текст, Значение, СтандартнаяОбработка)

  Элемент.Значение = СтрЗаменить(СокрЛП(ОчиститьСтроку(Текст))," ",""""); //тут удаляет лишние символы, оставляет только цифры и буквы

  Запрос = Новый Запрос;

  Запрос.Текст =   "ВЫБРАТЬ

  | Номенклатура.Ссылка Как Ном
  |ИЗ
  | Справочник.Номенклатура КАК Номенклатура
  |ГДЕ
  | Номенклатура.СтрокаДляПоиска = &СтрокаДляПоиска";

  Запрос.УстановитьПараметр("СтрокаДляПоиска",Элемент.Значение);

  Результат = Запрос.Выполнить();

  ТаблицаПоиска = Результат.Выгрузить();

  Если ТаблицаПоиска.Количество()> 1 Тогда

    НоменклатураДляПодбора = ТаблицаПоиска.ВыбратьСтроку("Найдено несколько значений").Ном;

   Иначе

    НоменклатураДляПодбора = Справочники.Номенклатура.НайтиПоРеквизиту("СтрокаДляПоиска",Элемент.Значение);

  КонецЕсли;

Если НЕ НоменклатураДляПодбора.Пустая() Тогда

Запрос = Новый Запрос; Запрос.Текст =//тут получаем остатки по номенклатуре, там еще записи по регистру есть

  ЭтаФорма.Закрыть();  

Иначе

  НаименованиеНоменклатуры = "Ничего не найдено";

КонецЕсли;


Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка)

  ОбработкаОбъект.Номенклатура = НоменклатураДляПодбора; //вот тут падает, пробовала в предыдущую процедуру вставить, перед ЭтаФорма.Закрыть() - не помогло

КонецПроцедуры"
Бррр... какой ужас.
Где проверка на то, что запрос ничего не нашел? Где проверка, что могли и не выбрать строку из множества значений? Какое значение принимает переменная "НоменклатураДляПодбора" перед "падением"? Какой тип у реквизита обработки "Номенклатура"?
Спасибо за замечания, учту. Особенно на проверку что могли и не выбрать - не подумала как то...  НоменклатураДляПодбора перед падением - СправочникСсылка.Номенклатура. У реквизита обработки такой же.
"В принципе это место даже проходит, возвращается вот сюда, в основную форму. И в конце процедуры падает. Но если заремарить  заполнение реквизита в подборе тогда все норм.

Процедура ДействияФормыПодобрать(Кнопка)

 Форма = ЭтотОбъект.ПолучитьФорму("ФормаПодбораНоменклатуры");
 Форма.ОткрытьМодально();

КонецПроцедуры"
А это идет подбор куда? Странно видеть реквизит "Номенклатура" не привязанным к табличной части. Видеть бы ваш cf, да по рукам бы надавать. :)
"Это заказ на доработку очень своеобразной конфигурации, написанной разными людьми и в разное время. Короче, "письмо из простоквашино". Сама обработка уже была. Задача - изменить форму подбора чтобы при попытке выбора номенклатуры с нулевым остатком программа это регистрировала как упущенную продажу. Плюс поиск без учета символов - только буквы и цифры. Вот есть в ней такой реквизит, и надо заполнить... В основной форме есть табличное поле СписокНоменклатуры. И текущая строка определяется по данному реквизиту.
Похоже вот тут собака порылась:

Процедура СписокНоменклатурыПриПолученииДанных(Элемент, ОформленияСтрок)

 Элемент.ТекущаяСтрока = ЭтотОбъект.Номенклатура;

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

При получении данных эта процедура выполняется много-много раз, видимо по количеству номенклатуры. А как по другому передать данные в текущую строку придумать не могу."
> Сама обработка уже была.

И все работало без "падений"?

> программа это регистрировала как упущенную продажу.

Как задумано это регистрировать? Для чего это нужно регистрировать? Если регистрировать нужно для последующего анализа, то как реализован этот анализ?

> поиск без учета символов - только буквы и цифры

Чё? Буквы и цифры это и есть символы...

> Вот есть в ней такой реквизит, и надо заполнить...

Что за реквизит? Куда и каким боком он?

P.S. Видимо не видя cf сложно Вас понять мисс "Лада-НТ".
Читают тему
(гостей: 1)

Быстрый переход