Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
14 дек 2024, 09:11

Ошибка в процедуре обработки

Автор proofet, 22 фев 2011, 21:35

0 Пользователей и 1 гость просматривают эту тему.

proofet

Помогите разобраться, в чем ошибка. Вроде все должно работать след. образом: в поле выбора выбирается контрагент. У каждого контрагента есть ТЧ, в которой есть реквизит "ТорговыеТочки". После нажатия на кнопку табличная часть контрагента должна "очиститься". И при этом пользователю должно выводиться сообщение какие именно Торговые точки у выбранного контрагента были удалены...Не получается правильно ссылаться на них..Пожалуйста укажите ошибку в процедуре.


Процедура КнопкаВыполнитьНажатие(Кнопка)
   Если Контрагенты.ПустаяСсылка() Тогда
   КонтрагентТТ=ЭлементыФормы.Контрагенты.Значение.ПолучитьОбъект();


Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
  |    ТорговыеТочки
  |ИЗ
  |    Справочник.Контрагенты.ТорговыеТочки,
  |ГДЕ
  |    Ссылка = &парамКонтрагент";
   
Запрос.УстановитьПараметр("парамКонтрагент", Контрагенты);


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

Если Результат.Пустой() Тогда

Возврат;

КонецЕсли;

Выборка = Результат.Выбрать();

Пока Выборка.Следующий() Цикл

Сообщить("Будут удалены следующие ТТ: "+Выборка.ТорговыеТочки);

КонецЦикла;
КонтрагентТТ.ТорговыеТочки.Очистить();
КонтрагентТТ.Записать();
КонецЕсли;

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

(процедура в обработке, поле выбора и кнопка на форме обработки).


Выдает ошибку:
{Обработка.УдалитьТТ.Форма.Форма(21)}: Метод объекта не обнаружен (ПустаяСсылка)
      Если Контрагенты.ПустаяСсылка() Тогда    :dfbsdfbsdf:

Klyacksa

Что у тебя такое "Контрагенты"?
xxx: Спасибо! Я бы загуглил, но ты интересней. Материшься. Злишься. Послать можешь...

Мысль - это оргазм мозга. Кто способен его испытать - получают истинное наслаждение, остальным приходится имитировать

Klyacksa

Ладна, буду догадываться. "Контрагенты" - это ПолеВвода типа СправочникСсылка.Контрагенты.
Тогда нужно проверять на заполненность следующим образом:
Если ЗначениеЗаполнено(ЭлементыФормы.Контрагенты.Значение) Тогда
И еще, при пустой таб.части ТорговыеТочки, чтобы понятно было, что по нажатию на кнопку процедура отработала, я бы добавила сообщение:
Если Результат.Пустой() Тогда
    Сообщить("У выбранного Контрагента нет торговых точек.");
    Возврат;
КонецЕсли;
xxx: Спасибо! Я бы загуглил, но ты интересней. Материшься. Злишься. Послать можешь...

Мысль - это оргазм мозга. Кто способен его испытать - получают истинное наслаждение, остальным приходится имитировать

cska-fanat-kz

"Метод объекта не обнаружен" выдается если Контрагенты = Неопределено.

Еще вопрос: почему КонтрагентЫ?
Может имеем дело со списком?
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

proofet

Контрагенты -  ПолеВыбора на форме.
Klyacksa - спасибо большое за поправки, внесу изменения... Но суть вопроса не в том...У меня именно не получается выводить список удаляемых из ТЧ ТорговыхТочек...не правильно ссылаюсь похоже на них...

cska-fanat-kz

Да все на первый взгляд правильно...

Файл выгрузки базы - в студию!
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

Klyacksa

Вы писали, что ругается на вторую приведенную строчку. Я написала, как поправить. На что ругается теперь? :)
xxx: Спасибо! Я бы загуглил, но ты интересней. Материшься. Злишься. Послать можешь...

Мысль - это оргазм мозга. Кто способен его испытать - получают истинное наслаждение, остальным приходится имитировать

cska-fanat-kz

Вот как-то так должно быть:

Процедура КнопкаВыполнитьНажатие(Кнопка)
   
   Контрагенты = ЭлементыФормы.Контрагенты.Значение;
   
   Если ЗначениеЗаполнено(Контрагенты) Тогда
      КонтрагентОбъект = Контрагенты.ПолучитьОбъект();
      
      Запрос = Новый Запрос;
      Запрос.Текст = "ВЫБРАТЬ
                     |   КонтрагентыТорговыеТочки.ТорговыеТочки
                     |ИЗ
                     |   Справочник.Контрагенты.ТорговыеТочки КАК КонтрагентыТорговыеТочки
                     |ГДЕ
                     |   КонтрагентыТорговыеТочки.Ссылка = &парамКонтрагент";
      
      Запрос.УстановитьПараметр("парамКонтрагент", Контрагенты);
      
      
      Результат = Запрос.Выполнить();
      
      Если Результат.Пустой() Тогда
         
         Сообщить("Торговые точки отсутствуют");
         Возврат;
         
      КонецЕсли;
      
      Выборка = Результат.Выбрать();
      
      Сообщить("Удаляются торговые точки контрагента "+Контрагенты+":");
      
      Пока Выборка.Следующий() Цикл
         
         Сообщить("- "+Выборка.ТорговыеТочки);
         
      КонецЦикла;
      КонтрагентОбъект.ТорговыеТочки.Очистить();
      КонтрагентОбъект.Записать();
      
      Сообщить("Торговые точки успешно удалены.");
      
   Иначе
      
      Сообщить("Не выбран контрагент!");
      
   КонецЕсли;
           
КонецПроцедуры
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

cska-fanat-kz

Запрос в ПриОткрытии переделайте так:

Процедура ПриОткрытии()
   Запрос=Новый Запрос;
    Запрос.Текст="ВЫБРАТЬ
                 |   Контрагенты.Ссылка
                 |ИЗ
                 |   Справочник.Контрагенты КАК Контрагенты
                 |ГДЕ
                 |   Контрагенты.ЭтоГруппа = ЛОЖЬ
                 |АВТОУПОРЯДОЧИВАНИЕ";
   
    масКонтрагенты=Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка");
    ЭлементыФормы.Контрагенты.СписокВыбора.ЗагрузитьЗначения(масКонтрагенты);
КонецПроцедуры
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

proofet

Оо..всё таки запрос был не правильный....Спасибо большое за помощь!

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск