Закрывается программа при закрытии обработки
Показывать по
10
20
40
сообщений
- 1
- 2
09.01.2013
19:22
#1
Самописная конфигурация на 8.1. Из формы обработки вызывается еще одна форма - ФормаПодбора, в ней по строке подбирается номенклатура по коду. Если подходящих позиций несколько то ВыбратьСтроку() . После выбора номенклатуры ФормаПодбора закрывается и передает выбранную номенклатуру в параметр обработки.
Вот в момент передачи этого параметра происходит сбой - программа закрывается по ошибке. Причем не на любой номенклатуре, а на некоторых. И именно если первоначально было несколько и выбирали. Пробовала и внешней обработкой и в составе конфигурации - ну никак. Подскажите, у кого какие мысли есть...
Вот в момент передачи этого параметра происходит сбой - программа закрывается по ошибке. Причем не на любой номенклатуре, а на некоторых. И именно если первоначально было несколько и выбирали. Пробовала и внешней обработкой и в составе конфигурации - ну никак. Подскажите, у кого какие мысли есть...
09.01.2013
20:24
#2
Есть мысль пройтись отладчиком по коду этого подбора и найти место, на котором программа "падает".
09.01.2013
20:45
#3
Нашла, вот тут падает.
ОбработкаОбъект.Номенклатура = НоменклатураДляПодбора
Типы проверила,одинаковые. Обработка в большинстве случаев работает. Каким то образом связано с номенклатурой, полученной выбором из списка. Ума не приложу чем она может отличаться от номенклатуры найденной сразу, если тип одинаковый.
ОбработкаОбъект.Номенклатура = НоменклатураДляПодбора
Типы проверила,одинаковые. Обработка в большинстве случаев работает. Каким то образом связано с номенклатурой, полученной выбором из списка. Ума не приложу чем она может отличаться от номенклатуры найденной сразу, если тип одинаковый.
09.01.2013
20:53
#4
"Процедура ПолеПодбораОкончаниеВводаТекста(Элемент, Текст, Значение, СтандартнаяОбработка)
Элемент.Значение = СтрЗаменить(СокрЛП(ОчиститьСтроку(Текст))," ",""""); //тут удаляет лишние символы, оставляет только цифры и буквы
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| Номенклатура.Ссылка Как Ном
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура.СтрокаДляПоиска = &СтрокаДляПоиска";
Запрос.УстановитьПараметр("СтрокаДляПоиска",Элемент.Значение);
Результат = Запрос.Выполнить();
ТаблицаПоиска = Результат.Выгрузить();
Если ТаблицаПоиска.Количество()> 1 Тогда
НоменклатураДляПодбора = ТаблицаПоиска.ВыбратьСтроку("Найдено несколько значений").Ном;
Иначе
НоменклатураДляПодбора = Справочники.Номенклатура.НайтиПоРеквизиту("СтрокаДляПоиска",Элемент.Значение);
КонецЕсли;
Если НЕ НоменклатураДляПодбора.Пустая() Тогда
Запрос = Новый Запрос; Запрос.Текст =//тут получаем остатки по номенклатуре, там еще записи по регистру есть
ЭтаФорма.Закрыть();
Иначе
НаименованиеНоменклатуры = "Ничего не найдено";
КонецЕсли;
Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка)
ОбработкаОбъект.Номенклатура = НоменклатураДляПодбора; //вот тут падает, пробовала в предыдущую процедуру вставить, перед ЭтаФорма.Закрыть() - не помогло
КонецПроцедуры"
Элемент.Значение = СтрЗаменить(СокрЛП(ОчиститьСтроку(Текст))," ",""""); //тут удаляет лишние символы, оставляет только цифры и буквы
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| Номенклатура.Ссылка Как Ном
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура.СтрокаДляПоиска = &СтрокаДляПоиска";
Запрос.УстановитьПараметр("СтрокаДляПоиска",Элемент.Значение);
Результат = Запрос.Выполнить();
ТаблицаПоиска = Результат.Выгрузить();
Если ТаблицаПоиска.Количество()> 1 Тогда
НоменклатураДляПодбора = ТаблицаПоиска.ВыбратьСтроку("Найдено несколько значений").Ном;
Иначе
НоменклатураДляПодбора = Справочники.Номенклатура.НайтиПоРеквизиту("СтрокаДляПоиска",Элемент.Значение);
КонецЕсли;
Если НЕ НоменклатураДляПодбора.Пустая() Тогда
Запрос = Новый Запрос; Запрос.Текст =//тут получаем остатки по номенклатуре, там еще записи по регистру есть
ЭтаФорма.Закрыть();
Иначе
НаименованиеНоменклатуры = "Ничего не найдено";
КонецЕсли;
Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка)
ОбработкаОбъект.Номенклатура = НоменклатураДляПодбора; //вот тут падает, пробовала в предыдущую процедуру вставить, перед ЭтаФорма.Закрыть() - не помогло
КонецПроцедуры"
09.01.2013
21:16
#5
Бррр... какой ужас.
Где проверка на то, что запрос ничего не нашел? Где проверка, что могли и не выбрать строку из множества значений? Какое значение принимает переменная "НоменклатураДляПодбора" перед "падением"? Какой тип у реквизита обработки "Номенклатура"?
Где проверка на то, что запрос ничего не нашел? Где проверка, что могли и не выбрать строку из множества значений? Какое значение принимает переменная "НоменклатураДляПодбора" перед "падением"? Какой тип у реквизита обработки "Номенклатура"?
09.01.2013
21:26
#6
Спасибо за замечания, учту. Особенно на проверку что могли и не выбрать - не подумала как то... НоменклатураДляПодбора перед падением - СправочникСсылка.Номенклатура. У реквизита обработки такой же.
09.01.2013
21:36
#7
"В принципе это место даже проходит, возвращается вот сюда, в основную форму. И в конце процедуры падает. Но если заремарить заполнение реквизита в подборе тогда все норм.
Процедура ДействияФормыПодобрать(Кнопка)
Форма = ЭтотОбъект.ПолучитьФорму("ФормаПодбораНоменклатуры");
Форма.ОткрытьМодально();
КонецПроцедуры"
Процедура ДействияФормыПодобрать(Кнопка)
Форма = ЭтотОбъект.ПолучитьФорму("ФормаПодбораНоменклатуры");
Форма.ОткрытьМодально();
КонецПроцедуры"
09.01.2013
21:47
#8
А это идет подбор куда? Странно видеть реквизит "Номенклатура" не привязанным к табличной части. Видеть бы ваш cf, да по рукам бы надавать.
09.01.2013
22:10
#9
"Это заказ на доработку очень своеобразной конфигурации, написанной разными людьми и в разное время. Короче, "письмо из простоквашино". Сама обработка уже была. Задача - изменить форму подбора чтобы при попытке выбора номенклатуры с нулевым остатком программа это регистрировала как упущенную продажу. Плюс поиск без учета символов - только буквы и цифры. Вот есть в ней такой реквизит, и надо заполнить... В основной форме есть табличное поле СписокНоменклатуры. И текущая строка определяется по данному реквизиту.
Похоже вот тут собака порылась:
Процедура СписокНоменклатурыПриПолученииДанных(Элемент, ОформленияСтрок)
Элемент.ТекущаяСтрока = ЭтотОбъект.Номенклатура;
КонецПроцедуры
При получении данных эта процедура выполняется много-много раз, видимо по количеству номенклатуры. А как по другому передать данные в текущую строку придумать не могу."
Похоже вот тут собака порылась:
Процедура СписокНоменклатурыПриПолученииДанных(Элемент, ОформленияСтрок)
Элемент.ТекущаяСтрока = ЭтотОбъект.Номенклатура;
КонецПроцедуры
При получении данных эта процедура выполняется много-много раз, видимо по количеству номенклатуры. А как по другому передать данные в текущую строку придумать не могу."
09.01.2013
22:41
#10
> Сама обработка уже была.
И все работало без "падений"?
> программа это регистрировала как упущенную продажу.
Как задумано это регистрировать? Для чего это нужно регистрировать? Если регистрировать нужно для последующего анализа, то как реализован этот анализ?
> поиск без учета символов - только буквы и цифры
Чё? Буквы и цифры это и есть символы...
> Вот есть в ней такой реквизит, и надо заполнить...
Что за реквизит? Куда и каким боком он?
P.S. Видимо не видя cf сложно Вас понять мисс "Лада-НТ".
И все работало без "падений"?
> программа это регистрировала как упущенную продажу.
Как задумано это регистрировать? Для чего это нужно регистрировать? Если регистрировать нужно для последующего анализа, то как реализован этот анализ?
> поиск без учета символов - только буквы и цифры
Чё? Буквы и цифры это и есть символы...
> Вот есть в ней такой реквизит, и надо заполнить...
Что за реквизит? Куда и каким боком он?
P.S. Видимо не видя cf сложно Вас понять мисс "Лада-НТ".
- 1
- 2
Читают тему
(гостей: 1)