Изменение реквизита справочника номенклатуры
Прошу помощи с написанием внешней обработки на обычной форме.
Уровень написания - начинающий.
Есть справочник - CMS1C_Номенклатура
Есть реквизит - URL
Необходимо: форма с выбором конечной группы номенклатуры (CMS1C_Номенклатура), с товаром в ней и подпапках (если есть).
На товарах в этом справочнике есть реквизит - URL.
Форму создал, процедуру частично написал.
Как в цикле сделать перезапись реквизита URL, перезапись будет выглядеть так:
(Через универсальную обработку с возможностью выполнения своего алгоритма, с отобранными элементами я делаю след. образом)
Объект.URL = "";
Объект.Записать();
И после все отобранные элементы, обновляют свой реквизит исходя из наименования, так нужно, когда в 1С поменяли наименование товара, а URL его остаётся старый. Делать через универсальную обработку каждый раз сложновато.
Итог, создал внешнюю обработку, на обычной форме, добавил реквизит (поле выбора группы) и кнопку выполнения функции.
Пока что добился только того, что могу вывести реквизит 5-ых пяти элементов номенклатуры в "Сообщить".
Необходимо, в запрос добавить, чтобы группа подставлялась из реквизита формы, т.е. допустим, необходимо обновить URL товаров группы - унитазы, в форме я выбираю эту группу и нажимаю выполнить, после в цикле идёт перезапись реквизита URL.
Сколько я не пытался использовать уже введенные данные - пока ничего не выходит.
Уровень написания - начинающий.
Есть справочник - CMS1C_Номенклатура
Есть реквизит - URL
Необходимо: форма с выбором конечной группы номенклатуры (CMS1C_Номенклатура), с товаром в ней и подпапках (если есть).
На товарах в этом справочнике есть реквизит - URL.
Форму создал, процедуру частично написал.
Как в цикле сделать перезапись реквизита URL, перезапись будет выглядеть так:
(Через универсальную обработку с возможностью выполнения своего алгоритма, с отобранными элементами я делаю след. образом)
Объект.URL = "";
Объект.Записать();
И после все отобранные элементы, обновляют свой реквизит исходя из наименования, так нужно, когда в 1С поменяли наименование товара, а URL его остаётся старый. Делать через универсальную обработку каждый раз сложновато.
Итог, создал внешнюю обработку, на обычной форме, добавил реквизит (поле выбора группы) и кнопку выполнения функции.
&НаСервере
Процедура ВыполнитьНажатие(Элемент)
Запрос = Новый Запрос();
Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 5
| CMS1C_Номенклатура.url
| ИЗ
| Справочник.CMS1C_Номенклатура КАК CMS1C_Номенклатура";
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
Сообщить(Выборка.url);
КонецЦикла;
КонецПроцедуры
ПоказатьПока что добился только того, что могу вывести реквизит 5-ых пяти элементов номенклатуры в "Сообщить".
Необходимо, в запрос добавить, чтобы группа подставлялась из реквизита формы, т.е. допустим, необходимо обновить URL товаров группы - унитазы, в форме я выбираю эту группу и нажимаю выполнить, после в цикле идёт перезапись реквизита URL.
Сколько я не пытался использовать уже введенные данные - пока ничего не выходит.
Прикрепленные файлы:
По теме из базы знаний
- Простой способ регистрации изменений реквизитов объектов в 1С Предприятии 8.X (делюсь опытом)
- Контроль заполнения "алкогольных" реквизитов справочника Номенклатура
- Перенос значений реквизитов справочника номенклатуры между разными базами 1С:7.7
- Групповое изменение реквизитов с доступом к нередактируемым реквизитам
- Копирование реквизита справочника Номенклатура в дополнительный реквизит и обрезка длины артикула
Найденные решения
(29) так ткните во владельца, что у него за тип?
если владелец, это Спр.Номенклатура, все упростится до
если владелец, это Спр.Номенклатура, все упростится до
"ВЫБРАТЬ
| Номенклатура.Ссылка КАК Ссылка,
| Номенклатура.Наименование КАК Наименование
|ИЗ
| Справочник.CMS1C_Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура.Владелец В ИЕРАРХИИ(&ГруппаНоменклатуры)";
(32) Спасибо БОЛЬШОЕ, всё работает.
ВОЛШЕБНЫЙ КОД |
---|
&НаСервере
Процедура ВыполнитьНажатие(Элемент)
Запрос = Новый Запрос();
Запрос.УстановитьПараметр("ГруппаНоменклатуры", ГруппаНоменклатуры);
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Ссылка КАК Ссылка,
| Номенклатура.Наименование КАК Наименование
|ИЗ
| Справочник.CMS1C_Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура.Владелец В ИЕРАРХИИ(&ГруппаНоменклатуры)";
РезультатЗапроса = Запрос.Выполнить().Выгрузить();
Для Каждого элементСсылка Из РезультатЗапроса Цикл
элементОбъект = элементСсылка.Ссылка.ПолучитьОбъект();
Сообщить(элементОбъект.url);
элементОбъект.url = "";
элементОбъект.Записать();
КонецЦикла;
КонецПроцедуры Показать |
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Реквизит URL, формируется автоматически исходя из наименования, например:
Есть товар, его наименование = Радиатор стальной трубчатый Параллели В 1-300-3
Реквизит URL в справочнике CMS1C_Номенклатура, формируется автоматически исходя
из наименования = radiator-stalnoj-trubchatyj-paralleli-v-1-300-3.
Т.е чтобы реквизит URL, обновился, достаточно его перезаписать на ничего - Объект.URL = "";
Есть товар, его наименование = Радиатор стальной трубчатый Параллели В 1-300-3
Реквизит URL в справочнике CMS1C_Номенклатура, формируется автоматически исходя
из наименования = radiator-stalnoj-trubchatyj-paralleli-v-1-300-3.
Т.е чтобы реквизит URL, обновился, достаточно его перезаписать на ничего - Объект.URL = "";
как-то не понятно задача описана
в Группа номенклатуры что выбирается?
а url откуда берется?
приведенный запрос что делает, почему именно 5 первых?
по хорошему надо отобрать ЧТО переписывать и выбрать НА ЧТО переписывать, уже потом жмакать Выполнить
а пока не понятно, что к чему
в Группа номенклатуры что выбирается?
а url откуда берется?
приведенный запрос что делает, почему именно 5 первых?
по хорошему надо отобрать ЧТО переписывать и выбрать НА ЧТО переписывать, уже потом жмакать Выполнить
а пока не понятно, что к чему
В группе номенклатуры, выбирается группа номенклатуры, условно папка с товаром в ней.
Товар имеет наименование, а из наименования формируется реквизит URL.
Формирует его 1С автоматически при создании товара.
Если наименование товара было изменено, нужно менять и URL (нужно для выгрузки на сайт).
Приведенный запрос должен отбирать элементы с определенной группы, которая выбирается в диалоговом окне.
Далее с отобранными элементами нужно произвести процедуру перезаписи реквизита URL.
Перезапись выглядит просто, нужно уже существующий реквизит, перезаписать на "НИЧЕГО", т.е. Объект.URL = "";
Товар имеет наименование, а из наименования формируется реквизит URL.
Формирует его 1С автоматически при создании товара.
Если наименование товара было изменено, нужно менять и URL (нужно для выгрузки на сайт).
Приведенный запрос должен отбирать элементы с определенной группы, которая выбирается в диалоговом окне.
Далее с отобранными элементами нужно произвести процедуру перезаписи реквизита URL.
Перезапись выглядит просто, нужно уже существующий реквизит, перезаписать на "НИЧЕГО", т.е. Объект.URL = "";
(11) оо ... не обновились данные
ну вот, так понятнее стало
ну вот, так понятнее стало
Запрос = Новый Запрос();
Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 5
| CMS1C_Номенклатура.Ссылка
| ИЗ
| Справочник.CMS1C_Номенклатура КАК CMS1C_Номенклатура
|ГДЕ
| CMS1C_Номенклатура.Ссылка В ИЕРАРХИИ (&ДанныеРеквизитаСформы) ";
Запрос.УстановитьПараметр("ДанныеРеквизитаСформы", ГруппаНоменклатуры);
РезультатЗапроса = Запрос.Выполнить().Выгрузить;
Для Каждого элементСсылка Из РезультатЗапроса Цикл
элементОбъект = элементСсылка.Ссылка.ПолучитьОбъект();
элементОбъект.url = "";
элементОбъект.Записать();
КонецЦикла;
Показать
Попробовал так, как Вы написали, итог:
Код |
---|
&НаСервере
Процедура ВыполнитьНажатие(Элемент)
Запрос = Новый Запрос();
Запрос.Текст = "ВЫБРАТЬ
| CMS1C_Номенклатура.Ссылка
| ИЗ
| Справочник.CMS1C_Номенклатура КАК CMS1C_Номенклатура
|ГДЕ
| CMS1C_Номенклатура.Ссылка В ИЕРАРХИИ (&ГруппаНоменклатуры) ";
Запрос.УстановитьПараметр("ГруппаНоменклатуры", ГруппаНоменклатуры);
РезультатЗапроса = Запрос.Выполнить().Выгрузить;
Для Каждого элементСсылка Из РезультатЗапроса Цикл
элементОбъект = элементСсылка.Ссылка.ПолучитьОбъект();
Сообщить(элементОбъект.url);
элементОбъект.url = "";
элементОбъект.Записать();
КонецЦикла;
КонецПроцедуры
Показать |
Ошибка |
---|
{ВнешняяОбработка.URL.Форма.Форма.Форма(12)}: Поле объекта не обнаружено (Выгрузить)
РезультатЗапроса = Запрос.Выполнить().Выгрузить; |
В запросе на вкладке условия добавьте условие
CMS1C_Номенклатура.Ссылка ВИерархии &ГруппаФормы
Запрос будет выглядеть примерно так
CMS1C_Номенклатура.Ссылка ВИерархии &ГруппаФормы
Запрос будет выглядеть примерно так
"ВЫБРАТЬ
| CMS1C_Номенклатура..Ссылка КАК Ссылка,
| CMS1C_Номенклатура.url
|ИЗ
| Справочник.CMS1C_Номенклатура КАК CMS1C_Номенклатура
|ГДЕ
| CMS1C_Номенклатура.Ссылка В ИЕРАРХИИ(&ГруппаСФормы)"
Ну а далее уже циклом перезаполняйте url
(10)
Запрос.УстановитьПараметр("ГруппаСФормы",<РеквизитФормыСГруппой>)
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
НомОбъект=Выборка.Ссылка.ПолучитьОбъект()
НомОбъект.url="";
НомОбъект.Записать();
КонецЦикла;
КонецПроцедуры
Показать(10)
ГруппаСФормы
Запрос = Новый Запрос();
//тут указываем имя реквизита группы номенклатуры
Запрос.УстановитьПараметр("ГруппаНоменклатуры", ГруппаНоменклатуры);
ТекстЗапроса =
"ВЫБРАТЬ
| Номенклатура.Ссылка КАК Ссылка,
| Номенклатура.Наименование КАК Наименование
|ИЗ
| Справочник.CMS1C_Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура.Ссылка В ИЕРАРХИИ(&ГруппаНоменклатуры)
| И НЕ Номенклатура.ЭтоГруппа
| И НЕ Номенклатура.ПометкаУдаления";
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
ЭлементОбъект = Выборка.Ссылка.ПолучитьОбъект();
ЭлементОбъект.url = "";
ЭлементОбъект.Записать();
КонецЦикла;
ПоказатьПрикрепленные файлы:
(19) Выбрал группу, нажал кнопку - ничего не происходит.
&НаСервере
Процедура ВыполнитьНажатие(Элемент)
Запрос = Новый Запрос();
//тут указываем имя реквизита группы номенклатуры
Запрос.УстановитьПараметр("ГруппаНоменклатуры", ГруппаНоменклатуры);
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Ссылка КАК Ссылка,
| Номенклатура.Наименование КАК Наименование
|ИЗ
| Справочник.CMS1C_Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура.Ссылка В ИЕРАРХИИ(&ГруппаНоменклатуры)";
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
ЭлементОбъект = Выборка.Ссылка.ПолучитьОбъект();
Сообщить(ЭлементОбъект.url);
ЭлементОбъект.url = "";
ЭлементОбъект.Записать();
КонецЦикла;
КонецПроцедуры
Показать
(21) ответ в (13)
справочники разные, НО не связанные между собой
запрос надо модифицировать
как-то так
точнее уже в конструкторе запроса в конфе
справочники разные, НО не связанные между собой
запрос надо модифицировать
как-то так
точнее уже в конструкторе запроса в конфе
Запрос.УстановитьПараметр("ГруппаНоменклатуры", ГруппаНоменклатуры);
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Наименование КАК НоменклатураНаименование
|ПОМЕСТИТЬ втНомеклатура
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура.Ссылка В ИЕРАРХИИ(&ГруппаНоменклатуры)
| И НЕ Номенклатура.ЭтоГруппа
|;
|ВЫБРАТЬ
| CMS1C_Номенклатура.Ссылка КАК Ссылка
| CMS1C_Номенклатура.Наименование КАК Наименование
|ИЗ
| втНомеклатура КАК втНомеклатура
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.CMS1C_Номенклатура КАК CMS1C_Номенклатура
| ПО CMS1C_Номенклатура.Наименование = втНомеклатура.НоменклатураНаименование
|ГДЕ
| НЕ CMS1C_Номенклатура.Ссылка ЕСТЬ NULL
";
Показать
Спасибо за ответ, но зачем подключать обычную номенклатуру?
В запросе достаточно использовать только CMS1C_Номенклатура, чтобы изменить URL.
Изменение этого реквизита, никак не касается обычного справочника Номенклатура.
Этот реквизит есть только в справочнике CMS1C_Номенклатура.
И Ваш вариант выдал следующее:
{ВнешняяОбработка.URL.Форма.Форма.Форма(25)}: Ошибка при вызове метода контекста (Выполнить)
РезультатЗапроса = Запрос.Выполнить().Выгрузить;
по причине:
{(12, 5)}: Синтаксическая ошибка "CMS1C_Номенклатура.Наименование"
<<?>>CMS1C_Номенклатура.Наименование КАК Наименование
В запросе достаточно использовать только CMS1C_Номенклатура, чтобы изменить URL.
Изменение этого реквизита, никак не касается обычного справочника Номенклатура.
Этот реквизит есть только в справочнике CMS1C_Номенклатура.
И Ваш вариант выдал следующее:
{ВнешняяОбработка.URL.Форма.Форма.Форма(25)}: Ошибка при вызове метода контекста (Выполнить)
РезультатЗапроса = Запрос.Выполнить().Выгрузить;
по причине:
{(12, 5)}: Синтаксическая ошибка "CMS1C_Номенклатура.Наименование"
<<?>>CMS1C_Номенклатура.Наименование КАК Наименование
(24) а же пишу, это примерно как должен выглядеть запрос, не готовое решение
у меня нет вашей конфигурации, чтобы его написать правильно
ошибка показывает, что у CMS1C_Номенклатура нет реквизита Наименование
а зачем подключать обычную Номенклатуру? так затем чтобы найти наименования товаров для изменения url, которые в CMS1C_Номенклатура, который никак с Номенклатурой не связан (я так понимаю), кроме как по наименованиям
но, возможно я ошибаюсь и связь таки есть, но только вы сами тогда сможете ее определить, т.к. увидите ее в конфигурации и тогда достаточно подменить в запросе условие соединения на верную связь
у меня нет вашей конфигурации, чтобы его написать правильно
ошибка показывает, что у CMS1C_Номенклатура нет реквизита Наименование
а зачем подключать обычную Номенклатуру? так затем чтобы найти наименования товаров для изменения url, которые в CMS1C_Номенклатура, который никак с Номенклатурой не связан (я так понимаю), кроме как по наименованиям
но, возможно я ошибаюсь и связь таки есть, но только вы сами тогда сможете ее определить, т.к. увидите ее в конфигурации и тогда достаточно подменить в запросе условие соединения на верную связь
(29) так ткните во владельца, что у него за тип?
если владелец, это Спр.Номенклатура, все упростится до
если владелец, это Спр.Номенклатура, все упростится до
"ВЫБРАТЬ
| Номенклатура.Ссылка КАК Ссылка,
| Номенклатура.Наименование КАК Наименование
|ИЗ
| Справочник.CMS1C_Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура.Владелец В ИЕРАРХИИ(&ГруппаНоменклатуры)";
(32) Спасибо БОЛЬШОЕ, всё работает.
ВОЛШЕБНЫЙ КОД |
---|
&НаСервере
Процедура ВыполнитьНажатие(Элемент)
Запрос = Новый Запрос();
Запрос.УстановитьПараметр("ГруппаНоменклатуры", ГруппаНоменклатуры);
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Ссылка КАК Ссылка,
| Номенклатура.Наименование КАК Наименование
|ИЗ
| Справочник.CMS1C_Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура.Владелец В ИЕРАРХИИ(&ГруппаНоменклатуры)";
РезультатЗапроса = Запрос.Выполнить().Выгрузить();
Для Каждого элементСсылка Из РезультатЗапроса Цикл
элементОбъект = элементСсылка.Ссылка.ПолучитьОбъект();
Сообщить(элементОбъект.url);
элементОбъект.url = "";
элементОбъект.Записать();
КонецЦикла;
КонецПроцедуры Показать |
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот