Как удалить доп. реквизит в карточке номенклатуры?
Делаю внешнюю обработку, которая при выборе доп. реквизита (например: цвет) должна очистить его значение (например: черный) во всех карточках номенклатуры. Разобрался как удалить сам реквизит и само значение реквизита из плана вида характеристик. Но нужно чтобы при выборе доп. реквизита удалялся не сам реквизит, а только строка в карточке номенклатуры, т.е. допустим присваивалось пустое значение. Не знаю как это сделать. Прошу помощи!
Прикрепленные файлы:


По теме из базы знаний
- Номенклатура (расширение формы списка и выбора) для УТ, КА, ERP, Розница
- Пример переноса справочников, документов и движений через Эксель и "Конвертацию данных 2" из оптовой учетной системы 1С 7.7 Комплексной 4.2 и розничной учетной системы Рарус Торговый комплекс -> в 1С 8.3 ЕРП 2.4 (расширение и дополнительные реквизиты)
- Интеграция с маркетплейсами МегаМаркет, Wildberries, OZON, ЯндексМаркет, VK, Avito, Леруа Мерлен, Aliexpress, КУПЕР, Dostavista
- Объединение значений нескольких дополнительных реквизитов в один дополнительный реквизит
- Множественные дополнительные реквизиты в УТ 11.5 (11.4)
Найденные решения
(3)
Процедура ВыбратьНаСервере()
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| НоменклатураДополнительныеРеквизиты.Ссылка КАК НоменклатураСсылка
|ИЗ
| Справочник.Номенклатура.ДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизиты
|ГДЕ
| НоменклатураДополнительныеРеквизиты.Значение = &Значение";
Запрос.УстановитьПараметр("Значение", Объект.ДопРеквизит);
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий()Тогда
НоменклатураОбъект = Выборка.Ссылка.ПолучитьОбъект();
МассивДР = НоменклатураОбъект.ДополнительныеРеквизиты.НайтиСтроки(Новый Структура("Значение", Объект.ДопРеквизит)); //можно просто Найти использовать или в цикле перебрать, тут уж как удобнее
стрДР = МассивДР[0]; //Исходим из того, что строка одна
СтрДР.Удалить(); //Если надо удалить всю строку с ДР
//СтрДР.Значение = ""; //если просто очистить значение
КонецЕсли;
КонецПроцедуры
ПоказатьОстальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
В запросе первой строкой получить ссылку на элемент справочника Номенклатура - в результах запроса получить объект надо именно этой ссылки, потом найти в табличной части ДополнительныеРеквизиты строку с нужным доп. рекизитом, и или удалить её или очистить значение, после чего записать номенклатуру (если бы код был представлен в виде текста, а не картинки, показал бы код, а набирать всё честно говоря лень)
Процедура ВыбратьНаСервере()
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| НоменклатураДополнительныеРеквизиты.Значение.Наименование КАК ЗначениеНаименование
|ИЗ
| Справочник.Номенклатура.ДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизиты
|ГДЕ
| НоменклатураДополнительныеРеквизиты.Значение = &Значение";
Запрос.УстановитьПараметр("Значение", Объект.ДопРеквизит);
РезультатЗапроса = Запрос.Выполнить();
Если Не РезультатЗапроса.Пустой() Тогда
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
Реквизит = Выборка.Ссылка.ПолучитьОбъект();
Реквизит.Удалить();
КонецЦикла;
КонецЕсли;
КонецПроцедуры
ПоказатьВот код) помогите разобраться пожалуйста
(5) Тогда расскажи нам - зачем тут ПолучитьОбъект()? И тут же его весь удалить...
Прав был Николай Морилов (зам из кировского Коммунэнерго), когда на мою просьбу поднять зарплату, сказал: "Все умные из Кирова давно уехали, а дуракам платить никто не собирается".
Через 3 недели я работал на швейцарском заводе в Костромской области. С повышением ЗП почти в 3 раза.
Прав был Николай Морилов (зам из кировского Коммунэнерго), когда на мою просьбу поднять зарплату, сказал: "Все умные из Кирова давно уехали, а дуракам платить никто не собирается".
Через 3 недели я работал на швейцарском заводе в Костромской области. С повышением ЗП почти в 3 раза.
(3)
Процедура ВыбратьНаСервере()
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| НоменклатураДополнительныеРеквизиты.Ссылка КАК НоменклатураСсылка
|ИЗ
| Справочник.Номенклатура.ДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизиты
|ГДЕ
| НоменклатураДополнительныеРеквизиты.Значение = &Значение";
Запрос.УстановитьПараметр("Значение", Объект.ДопРеквизит);
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий()Тогда
НоменклатураОбъект = Выборка.Ссылка.ПолучитьОбъект();
МассивДР = НоменклатураОбъект.ДополнительныеРеквизиты.НайтиСтроки(Новый Структура("Значение", Объект.ДопРеквизит)); //можно просто Найти использовать или в цикле перебрать, тут уж как удобнее
стрДР = МассивДР[0]; //Исходим из того, что строка одна
СтрДР.Удалить(); //Если надо удалить всю строку с ДР
//СтрДР.Значение = ""; //если просто очистить значение
КонецЕсли;
КонецПроцедуры
Показать
(8)
В запросе свойство тоже надо описывать в "Где"
- Добавить в запрос ещё одно условие для отбора конкретного свойства можно, почему нет? Но, стесняюсь спросить, а кому это "надо"? Вы считаете табличной части "Дополнительные реквизиты" могут быть повторяющиеся значения разных свойств? Нет, я конечно понимаю, что может быть несколько разных дополнительных реквизитов типа "Цвет утром", "Цвет вечером" и "Ещё какой то цвет" и все они будут иметь одно значение "Черный"...вот только утилитарная ценность таких данных вызывает некоторое сомнение.
лучше обойти их с конца вперёд в цикле
- а вот тут налицо непонимание процесса удаления - обход с конца необходим только в случае перебора табличной части (таблицы значений, массива итп) только в том случае, когда удаляем строки из этого же объекта (количество строк цикла будет уменьшаться, и при "прямом" обходе получим ошибку) - а тут получаем массив строк к удалению, и просто удаляем их из ТЧ - ничего не рушится, потому что нет перебора строк - удаляется конкретная строка(и)...
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот