8.х Как должен правильно выглядеть запрос

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем proofet, 20 фев 2011.

  1. TopicStarter Overlay
    proofet
    Offline

    proofet

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

    Суть в следующем: Существует Справочник Контрагенты который имеет ТЧ Торговые точки, которая в свою очередь имеет реквизит с тем же названием, т.е. ТорговыеТочки. Требуется созать процедуру при нажатии кнопки на форме, (в справочнике ТорговыеТочки) которая бы удаляла выбранную ТорговуюТочку (с текущей строки) у всех контрагентов.....
  2. Itsys
    Offline

    Itsys Опытный в 1С

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

    shurikvz Модераторы Команда форума Модератор

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

    mialord Модераторы Команда форума Модератор

    Регистрация:
    31 июл 2009
    Сообщения:
    5.398
    Симпатии:
    40
    Баллы:
    54
    Добавлю.
    Если Вы отбираете данные запросом для дальнейшего изменения, используйте ДЛЯ ИЗМЕНЕНИЯ в запросе.

Поделиться этой страницей