УТ 10.3 Как изменить владельца в справочнике "Единицы измерения"?
Как-то получилось, что в Классификаторе единиц измерения появилось два элемента "шт" и теперь при записи некоторых элементов справочника "Номенклатура" выдается сообщение
Неверно указан владелец единицы хранения остатков!
Неверно указан владелец единицы для отчетов!
Один из элементов классификатора можно убрать обработкой "Поиск и замена значений", но запись элементов справочника "Номенклатура" все равно невозможна. Как же поменять владельца для этих единиц?
Неверно указан владелец единицы для отчетов!
По теме из базы знаний
- Удаление данных с отбором и построением дерева ссылок в базах 1С 8.1-8.3 УТ 10.3./11, БП 2/3, ЗУП 2.5/3, КА 1.1/2, УНФ 1.6/3.0
- Ведение учета услуг в разрезе характеристик для УТ 10.3
- Перенос документов из УТ 10.3 в Бухгалтерию 3.0
- Загрузка номенклатуры c картинками (несколько потоков одновременно) и сопутствующими данными в базу и любые документы из yml, xls, xlsx, xlsm, ods, ots, csv для УТ 10.3, УТ 11 (все), БП 3, КА 2, ERP 2, УНФ 1.6/3.0, Розница 2/3.0
- История развития 1С:Торговли, что изменилось в архитектуре учета торговых и складских операций за 15 лет
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(2)
Владелец единицы измерения - это номенклатура, а не единица по классификатору. Так что смотри в сторону того, что в карточке номенклатуры указана единица измерения от другой номенклатуры.
Есть карточка товара и есть единицы измерения (см. рис). С виду все правильно - и единица по классификатору, и владелец. А при записи получается ошибка.
Прикрепленные файлы:
(4)Написал такое:
Что не так?
Процедура ОсновныеДействияФормыДействие(Кнопка)
Выборка = Справочники.Номенклатура.Выбрать();
Пока Выборка.Следующий() Цикл
Если Выборка.ЭтоГруппа Тогда
Продолжить;
КонецЕсли;
Если Выборка.ЕдиницаХраненияОстатков.Владелец<>Выборка.Ссылка Тогда
//Сообщить("--- "+Выборка.ЕдиницаХраненияОстатков.Владелец);
//Сообщить("=== "+Выборка.Ссылка);
Объект = Выборка.ЕдиницаХраненияОстатков.ПолучитьОбъект();
Объект.Владелец = Выборка.Ссылка;
Объект.Записать();
КонецЕсли;
КонецЦикла;
КонецПроцедуры
ПоказатьЧто не так?
(5)
Этот код по сути миксером по единицам измерения проходится и перемешивает их владельцев.
Допустим есть номенклатура "Гвоздь" и "Шуруп"
Есть единица измерения "ШТ" с владельцем "Шуруп"
Эта единица указана в качестве единицы хранения и у номенклатуры "Гвоздь", и у номенклатуры "Шуруп"
Твой код, дойдя до номенклатуры "Гвоздь", заменит владельца указанной в ней единицы хранения на "Гвоздь". И с этого момента у номенклатуры "Шуруп" будет неверная единица хранения.
Если одна и та же единица указана у десяти номенклатур, тогда код последовательно сменит владельца этой единицы десять раз.
Этот код по сути миксером по единицам измерения проходится и перемешивает их владельцев.
Допустим есть номенклатура "Гвоздь" и "Шуруп"
Есть единица измерения "ШТ" с владельцем "Шуруп"
Эта единица указана в качестве единицы хранения и у номенклатуры "Гвоздь", и у номенклатуры "Шуруп"
Твой код, дойдя до номенклатуры "Гвоздь", заменит владельца указанной в ней единицы хранения на "Гвоздь". И с этого момента у номенклатуры "Шуруп" будет неверная единица хранения.
Если одна и та же единица указана у десяти номенклатур, тогда код последовательно сменит владельца этой единицы десять раз.
(7) Сначала запросом определи список номенклатуры, у которой единицы хранения и остатков не являются единицами измерения этой номенклатуры. Потом для каждой такой номенклатуры попробуй найти в справочнике единиц измерения единицу, подходящую по владельцу и другим параметрам. Если нашлась - установи её в качестве единицы хранения/остатков. Если нет, то создай новую.
(8)Мне кажется, что я так и делаю (немного переписал процедуру):
Выборка = Справочники.Номенклатура.Выбрать();
Пока Выборка.Следующий() Цикл
Если Выборка.ЭтоГруппа Тогда
Продолжить;
КонецЕсли;
ОбъектНом = Выборка.ПолучитьОбъект();
Если Выборка.ЕдиницаХраненияОстатков.Владелец<>Выборка.Ссылка Тогда
//Владелец Единицы хранения не совпадает с текущей номенклатурой
Объект = Выборка.ЕдиницаХраненияОстатков.ПолучитьОбъект();
Объект.Владелец = Выборка.Ссылка;
Объект.Записать();
//У Единицы хранения меняем владельца
ОбъектНом.ЕдиницаХраненияОстатков = Объект.Ссылка;
ОбъектНом.Записать();
//Запоминаем измененную Единицу хранения
КонецЕсли;
//Повторяем для Единицы для отчетов
Если Выборка.ЕдиницаДляОтчетов.Владелец<>Выборка.Ссылка Тогда
//Сообщить("--- "+Выборка.ЕдиницаХраненияОстатков.Владелец);
//Сообщить("=== "+Выборка.Ссылка);
Объект = Выборка.ЕдиницаДляОтчетов.ПолучитьОбъект();
Объект.Владелец = Выборка.Ссылка;
Объект.Записать();
ОбъектНом.ЕдиницаДляОтчетов = Объект.Ссылка;
ОбъектНом.Записать();
КонецЕсли;
КонецЦикла;
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот