Прошу помощи с написанием внешней обработки на обычной форме.
Уровень написания - начинающий.
Есть справочник - CMS1C_Номенклатура
Есть реквизит - URL
Необходимо: форма с выбором конечной группы номенклатуры (CMS1C_Номенклатура), с товаром в ней и подпапках (если есть).
На товарах в этом справочнике есть реквизит - URL.
Форму создал, процедуру частично написал.
Как в цикле сделать перезапись реквизита URL, перезапись будет выглядеть так:
(Через универсальную обработку с возможностью выполнения своего алгоритма, с отобранными элементами я делаю след. образом)
Объект.URL = "";
Объект.Записать();
И после все отобранные элементы, обновляют свой реквизит исходя из наименования, так нужно, когда в 1С поменяли наименование товара, а URL его остаётся старый. Делать через универсальную обработку каждый раз сложновато.
Итог, создал внешнюю обработку, на обычной форме, добавил реквизит (поле выбора группы) и кнопку выполнения функции.

```1c
    &НаСервере
    Процедура ВыполнитьНажатие(Элемент)
    Запрос = Новый Запрос();
    Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 5
    | CMS1C_Номенклатура.url
    | ИЗ
    | Справочник.CMS1C_Номенклатура КАК CMS1C_Номенклатура";

    РезультатЗапроса = Запрос.Выполнить();
    Выборка = РезультатЗапроса.Выбрать();
    Пока Выборка.Следующий() Цикл
    Сообщить(Выборка.url);

    КонецЦикла;
    КонецПроцедуры
```

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

```1c
    "ВЫБРАТЬ
    | Номенклатура.Ссылка КАК Ссылка,
    | Номенклатура.Наименование КАК Наименование
    |ИЗ
    | Справочник.CMS1C_Номенклатура КАК Номенклатура
    |ГДЕ
    | Номенклатура.Владелец В ИЕРАРХИИ(&ГруппаНоменклатуры)";
```
---
Выгрузить это метод
правильно будет
РезультатЗапроса = Запрос.Выполнить().Выгрузить();

хоть СП читайте...не все же за вас делать то...
---
Спасибо БОЛЬШОЕ, всё работает.

ВОЛШЕБНЫЙ КОД
```1c
    &НаСервере
    Процедура ВыполнитьНажатие(Элемент)
    Запрос = Новый Запрос();
    Запрос.УстановитьПараметр("ГруппаНоменклатуры", ГруппаНоменклатуры);
    Запрос.Текст =
    "ВЫБРАТЬ
    | Номенклатура.Ссылка КАК Ссылка,
    | Номенклатура.Наименование КАК Наименование
    |ИЗ
    | Справочник.CMS1C_Номенклатура КАК Номенклатура
    |ГДЕ
    | Номенклатура.Владелец В ИЕРАРХИИ(&ГруппаНоменклатуры)";

    РезультатЗапроса = Запрос.Выполнить().Выгрузить();
    Для Каждого элементСсылка Из РезультатЗапроса Цикл
    элементОбъект = элементСсылка.Ссылка.ПолучитьОбъект();
    Сообщить(элементОбъект.url);
    элементОбъект.url = ";
    элементОбъект.Записать();
    КонецЦикла;
    КонецПроцедуры
```
---
что должно быть в URL ?
---
Реквизит URL, формируется автоматически исходя из наименования, например:
Есть товар, его наименование = Радиатор стальной трубчатый Параллели В 1-300-3
Реквизит URL в справочнике CMS1C_Номенклатура, формируется автоматически исходя
из наименования = radiator-stalnoj-trubchatyj-paralleli-v-1-300-3.
Т.е чтобы реквизит URL, обновился, достаточно его перезаписать на ничего - Объект.URL = "";
---
просто очистить url при измерении наименования?
---
как-то не понятно задача описана
в Группа номенклатуры что выбирается?
а url откуда берется?
приведенный запрос что делает, почему именно 5 первых?

по хорошему надо отобрать ЧТО переписывать и выбрать НА ЧТО переписывать, уже потом жмакать Выполнить
а пока не понятно, что к чему
---
В группе номенклатуры, выбирается группа номенклатуры, условно папка с товаром в ней.
Товар имеет наименование, а из наименования формируется реквизит URL.
Формирует его 1С автоматически при создании товара.
Если наименование товара было изменено, нужно менять и URL (нужно для выгрузки на сайт).
Приведенный запрос должен отбирать элементы с определенной группы, которая выбирается в диалоговом окне.
Далее с отобранными элементами нужно произвести процедуру перезаписи реквизита URL.
Перезапись выглядит просто, нужно уже существующий реквизит, перезаписать на "НИЧЕГО", т.е. Объект.URL = "";
---
по идее тогда должна быть связь между Спр.Номенклатура и Спр.CMS1C_Номенклатура
или это один и тот же справочник?
---
Разные справочники, но они между собой синхронизируются.
Т.е. если создается элемент в Номенклатуре, то он автоматически создается в CMS1C_Номенклатура.
---
Ну так и посмотрите есть ли в CMS1C_Номенклатура ссылка на элемент справочника Номенклатура
---
Задача не ясна)
---
объясните какую задачу обработка должна решать. а то сколько не перечитываю ни как не пойму цель этой обработки...
---
Должно быть диалоговое окно с выбором группы с товаром (папка с товаром).
В отобранном товаре, есть реквизит URL, его надо перезаписать на "НИЧЕГО".
Всё.
---
оо ... не обновились данные
ну вот, так понятнее стало

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

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

    РезультатЗапроса = Запрос.Выполнить().Выгрузить;
    Для Каждого элементСсылка Из РезультатЗапроса Цикл
    элементОбъект = элементСсылка.Ссылка.ПолучитьОбъект();
    Сообщить(элементОбъект.url);
    элементОбъект.url = ";
    элементОбъект.Записать();
    КонецЦикла;
    КонецПроцедуры
```

Ошибка{ВнешняяОбработка.URL.Форма.Форма.Форма(12)}: Поле объекта не обнаружено (Выгрузить)
РезультатЗапроса = Запрос.Выполнить().Выгрузить;
---
Использовать ПолучитьОбъект пробовали?
---
В запросе на вкладке условия добавьте условие
CMS1C_Номенклатура.Ссылка ВИерархии &ГруппаФормы

Запрос будет выглядеть примерно так

```1c
    "ВЫБРАТЬ
    | CMS1C_Номенклатура..Ссылка КАК Ссылка,
    | CMS1C_Номенклатура.url
    |ИЗ
    | Справочник.CMS1C_Номенклатура КАК CMS1C_Номенклатура
    |ГДЕ
    | CMS1C_Номенклатура.Ссылка В ИЕРАРХИИ(&ГруппаСФормы)"
```
---
Ну а далее уже циклом перезаполняйте url

```1c
    Запрос.УстановитьПараметр("ГруппаСФормы",<РеквизитФормыСГруппой>)
    РезультатЗапроса = Запрос.Выполнить();
    Выборка = РезультатЗапроса.Выбрать();
    Пока Выборка.Следующий() Цикл
    НомОбъект=Выборка.Ссылка.ПолучитьОбъект()
    НомОбъект.url=";
    НомОбъект.Записать();
    КонецЦикла;
    КонецПроцедуры
```

(10) ГруппаСФормы
---
Немного непонятна эта строка:
Запрос.УстановитьПараметр("ГруппаСФормы",)
Что такое ГруппаСФормы и РеквизитФормыСГруппой?
---
```1c
    Запрос = Новый Запрос();
    //тут указываем имя реквизита группы номенклатуры
    Запрос.УстановитьПараметр("ГруппаНоменклатуры", ГруппаНоменклатуры);
    ТекстЗапроса =
    "ВЫБРАТЬ
    | Номенклатура.Ссылка КАК Ссылка,
    | Номенклатура.Наименование КАК Наименование
    |ИЗ
    | Справочник.CMS1C_Номенклатура КАК Номенклатура
    |ГДЕ
    | Номенклатура.Ссылка В ИЕРАРХИИ(&ГруппаНоменклатуры)
    | И НЕ Номенклатура.ЭтоГруппа
    | И НЕ Номенклатура.ПометкаУдаления";

    Выборка = Запрос.Выполнить().Выбрать();

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

    ЭлементОбъект = Выборка.Ссылка.ПолучитьОбъект();
    ЭлементОбъект.url = ";
    ЭлементОбъект.Записать();

    КонецЦикла;
```
---
{ВнешняяОбработка.URL.Форма.Форма.Форма(17)}: Ошибка при вызове метода контекста (Выполнить)
    Выборка = Запрос.Выполнить().Выбрать();
по причине:
{(1, 1)}: Ожидается выражение "ВЫБРАТЬ"
---
вот люди...
за них все сделали, код написали, в обработку оформили, даже подумать не хотите найти ошибку самому...

"ТекстЗапроса =" заменить на "Запрос.Текст = "
---
Извиняюсь, я в этом полный 0. :)
---
Выбрал группу, нажал кнопку - ничего не происходит.

```1c
    &НаСервере
    Процедура ВыполнитьНажатие(Элемент)
    Запрос = Новый Запрос();
    //тут указываем имя реквизита группы номенклатуры
    Запрос.УстановитьПараметр("ГруппаНоменклатуры", ГруппаНоменклатуры);
    Запрос.Текст =
    "ВЫБРАТЬ
    | Номенклатура.Ссылка КАК Ссылка,
    | Номенклатура.Наименование КАК Наименование
    |ИЗ
    | Справочник.CMS1C_Номенклатура КАК Номенклатура
    |ГДЕ
    | Номенклатура.Ссылка В ИЕРАРХИИ(&ГруппаНоменклатуры)";

    Выборка = Запрос.Выполнить().Выбрать();

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

    ЭлементОбъект = Выборка.Ссылка.ПолучитьОбъект();
    Сообщить(ЭлементОбъект.url);
    ЭлементОбъект.url = ";
    ЭлементОбъект.Записать();

    КонецЦикла;
    КонецПроцедуры
```
---
ответ в (13)
справочники разные, НО не связанные между собой
запрос надо модифицировать
как-то так
точнее уже в конструкторе запроса в конфе

```1c
    Запрос.УстановитьПараметр("ГруппаНоменклатуры", ГруппаНоменклатуры);
    Запрос.Текст =
    "ВЫБРАТЬ
    | Номенклатура.Наименование КАК НоменклатураНаименование
    |ПОМЕСТИТЬ втНомеклатура
    |ИЗ
    | Справочник.Номенклатура КАК Номенклатура
    |ГДЕ
    | Номенклатура.Ссылка В ИЕРАРХИИ(&ГруппаНоменклатуры)
    | И НЕ Номенклатура.ЭтоГруппа
    |;
    |ВЫБРАТЬ
    | CMS1C_Номенклатура.Ссылка КАК Ссылка
    | CMS1C_Номенклатура.Наименование КАК Наименование
    |ИЗ
    | втНомеклатура КАК втНомеклатура
    | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.CMS1C_Номенклатура КАК CMS1C_Номенклатура
    | ПО CMS1C_Номенклатура.Наименование = втНомеклатура.НоменклатураНаименование
    |ГДЕ
    | НЕ CMS1C_Номенклатура.Ссылка ЕСТЬ NULL
    ";
```
---
Спасибо за ответ, но зачем подключать обычную номенклатуру?
В запросе достаточно использовать только CMS1C_Номенклатура, чтобы изменить URL.
Изменение этого реквизита, никак не касается обычного справочника Номенклатура.
Этот реквизит есть только в справочнике CMS1C_Номенклатура.
И Ваш вариант выдал следующее:
{ВнешняяОбработка.URL.Форма.Форма.Форма(25)}: Ошибка при вызове метода контекста (Выполнить)
РезультатЗапроса = Запрос.Выполнить().Выгрузить;
по причине:
{(12, 5)}: Синтаксическая ошибка "CMS1C_Номенклатура.Наименование"
<<?>>CMS1C_Номенклатура.Наименование КАК Наименование
---
а же пишу, это примерно как должен выглядеть запрос, не готовое решение
у меня нет вашей конфигурации, чтобы его написать правильно
ошибка показывает, что у CMS1C_Номенклатура нет реквизита Наименование

а зачем подключать обычную Номенклатуру? так затем чтобы найти наименования товаров для изменения url, которые в CMS1C_Номенклатура, который никак с Номенклатурой не связан (я так понимаю), кроме как по наименованиям
но, возможно я ошибаюсь и связь таки есть, но только вы сами тогда сможете ее определить, т.к. увидите ее в конфигурации и тогда достаточно подменить в запросе условие соединения на верную связь
---
В конструкторе есть такой реквизит.
---
а Владелец это что?
не Номенклатура случаем?
---
Возможно.
В месте ошибки подставил CMS1C_Номенклатура.Владелец.Наименование
И CMS1C_Номенклатура.Владелец, та же ошибка.
---
так ткните во владельца, что у него за тип?
если владелец, это Спр.Номенклатура, все упростится до

```1c
    "ВЫБРАТЬ
    | Номенклатура.Ссылка КАК Ссылка,
    | Номенклатура.Наименование КАК Наименование
    |ИЗ
    | Справочник.CMS1C_Номенклатура КАК Номенклатура
    |ГДЕ
    | Номенклатура.Владелец В ИЕРАРХИИ(&ГруппаНоменклатуры)";
```
---
Владелец - это спр.Номенклатура.
Упростил по вашему примеру:

```1c
    {ВнешняяОбработка.URL.Форма.Форма.Форма(14)}: Поле объекта не обнаружено (Выгрузить)
    РезультатЗапроса = Запрос.Выполнить().Выгрузить;
```
---
Выгрузить это метод
правильно будет
РезультатЗапроса = Запрос.Выполнить().Выгрузить();

хоть СП читайте...не все же за вас делать то...
---
Спасибо БОЛЬШОЕ, всё работает.

ВОЛШЕБНЫЙ КОД
```1c
    &НаСервере
    Процедура ВыполнитьНажатие(Элемент)
    Запрос = Новый Запрос();
    Запрос.УстановитьПараметр("ГруппаНоменклатуры", ГруппаНоменклатуры);
    Запрос.Текст =
    "ВЫБРАТЬ
    | Номенклатура.Ссылка КАК Ссылка,
    | Номенклатура.Наименование КАК Наименование
    |ИЗ
    | Справочник.CMS1C_Номенклатура КАК Номенклатура
    |ГДЕ
    | Номенклатура.Владелец В ИЕРАРХИИ(&ГруппаНоменклатуры)";

    РезультатЗапроса = Запрос.Выполнить().Выгрузить();
    Для Каждого элементСсылка Из РезультатЗапроса Цикл
    элементОбъект = элементСсылка.Ссылка.ПолучитьОбъект();
    Сообщить(элементОбъект.url);
    элементОбъект.url = ";
    элементОбъект.Записать();
    КонецЦикла;
    КонецПроцедуры
```