УТ 10.3 Как изменить владельца в справочнике "Единицы измерения"?

1. pentanom 25 29.11.22 16:40 Сейчас в теме
Как-то получилось, что в Классификаторе единиц измерения появилось два элемента "шт" и теперь при записи некоторых элементов справочника "Номенклатура" выдается сообщение
Неверно указан владелец единицы хранения остатков!
Неверно указан владелец единицы для отчетов!
Один из элементов классификатора можно убрать обработкой "Поиск и замена значений", но запись элементов справочника "Номенклатура" все равно невозможна. Как же поменять владельца для этих единиц?
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. GeraltSnow 175 29.11.22 16:50 Сейчас в теме
Владелец единицы измерения - это номенклатура, а не единица по классификатору. Так что смотри в сторону того, что в карточке номенклатуры указана единица измерения от другой номенклатуры.
3. pentanom 25 29.11.22 17:09 Сейчас в теме
(2)
Владелец единицы измерения - это номенклатура, а не единица по классификатору. Так что смотри в сторону того, что в карточке номенклатуры указана единица измерения от другой номенклатуры.
Есть карточка товара и есть единицы измерения (см. рис). С виду все правильно - и единица по классификатору, и владелец. А при записи получается ошибка.
Прикрепленные файлы:
4. GeraltSnow 175 29.11.22 17:16 Сейчас в теме
(3) Проверь чтобы единица хранения остатков и единица для отчетов были той самой единицей, которая выводится в таблице единиц измерения этой номенклатуры
5. pentanom 25 29.11.22 17:23 Сейчас в теме
(4)Написал такое:
Процедура ОсновныеДействияФормыДействие(Кнопка)

	Выборка = Справочники.Номенклатура.Выбрать();
	Пока Выборка.Следующий() Цикл
		Если Выборка.ЭтоГруппа Тогда
			Продолжить;
		КонецЕсли;
		Если Выборка.ЕдиницаХраненияОстатков.Владелец<>Выборка.Ссылка Тогда
			//Сообщить("---   "+Выборка.ЕдиницаХраненияОстатков.Владелец);
			//Сообщить("===   "+Выборка.Ссылка);
			Объект = Выборка.ЕдиницаХраненияОстатков.ПолучитьОбъект();
			Объект.Владелец = Выборка.Ссылка;
			Объект.Записать();
		КонецЕсли;
	КонецЦикла;
	
КонецПроцедуры
Показать

Что не так?
6. GeraltSnow 175 29.11.22 17:46 Сейчас в теме
(5)
Этот код по сути миксером по единицам измерения проходится и перемешивает их владельцев.

Допустим есть номенклатура "Гвоздь" и "Шуруп"
Есть единица измерения "ШТ" с владельцем "Шуруп"
Эта единица указана в качестве единицы хранения и у номенклатуры "Гвоздь", и у номенклатуры "Шуруп"

Твой код, дойдя до номенклатуры "Гвоздь", заменит владельца указанной в ней единицы хранения на "Гвоздь". И с этого момента у номенклатуры "Шуруп" будет неверная единица хранения.

Если одна и та же единица указана у десяти номенклатур, тогда код последовательно сменит владельца этой единицы десять раз.
7. pentanom 25 29.11.22 18:02 Сейчас в теме
(6)Чувствую, что у меня какая-то ерунда получается, а ухватиться не могу. Я не с той стороны подхожу?
8. GeraltSnow 175 29.11.22 18:11 Сейчас в теме
(7) Сначала запросом определи список номенклатуры, у которой единицы хранения и остатков не являются единицами измерения этой номенклатуры. Потом для каждой такой номенклатуры попробуй найти в справочнике единиц измерения единицу, подходящую по владельцу и другим параметрам. Если нашлась - установи её в качестве единицы хранения/остатков. Если нет, то создай новую.
9. pentanom 25 29.11.22 19:55 Сейчас в теме
(8)Мне кажется, что я так и делаю (немного переписал процедуру):
	Выборка = Справочники.Номенклатура.Выбрать();
	Пока Выборка.Следующий() Цикл
		Если Выборка.ЭтоГруппа Тогда
			Продолжить;
		КонецЕсли;
		ОбъектНом = Выборка.ПолучитьОбъект();
		Если Выборка.ЕдиницаХраненияОстатков.Владелец<>Выборка.Ссылка Тогда
//Владелец Единицы хранения не совпадает с текущей номенклатурой 
			Объект = Выборка.ЕдиницаХраненияОстатков.ПолучитьОбъект();
			Объект.Владелец = Выборка.Ссылка;
			Объект.Записать();
//У Единицы хранения меняем владельца
			ОбъектНом.ЕдиницаХраненияОстатков = Объект.Ссылка;
			ОбъектНом.Записать();
//Запоминаем измененную Единицу хранения
		КонецЕсли;

//Повторяем для Единицы для отчетов
		Если Выборка.ЕдиницаДляОтчетов.Владелец<>Выборка.Ссылка Тогда
			//Сообщить("---   "+Выборка.ЕдиницаХраненияОстатков.Владелец);
			//Сообщить("===   "+Выборка.Ссылка);
			Объект = Выборка.ЕдиницаДляОтчетов.ПолучитьОбъект();
			Объект.Владелец = Выборка.Ссылка;
			Объект.Записать();
			ОбъектНом.ЕдиницаДляОтчетов = Объект.Ссылка;
			ОбъектНом.Записать();
		КонецЕсли;
	КонецЦикла;
Показать
10. GeraltSnow 175 30.11.22 11:30 Сейчас в теме
(9) Не нужно менять владельца у единицы измерения. Для каждой проблемной номенклатуры либо ищи существующую единицу с правильным владельцем, либо создавай новую.
11. pentanom 25 30.11.22 14:57 Сейчас в теме
(10)Кажется что-то получилось. Спасибо за помощь!
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот