Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
14 дек 2024, 16:34

В подборе выбрана единица другого элемента справочника

Автор xDee, 26 окт 2011, 10:54

0 Пользователей и 1 гость просматривают эту тему.

xDee

Доброго времени суток всем! Непонятная ситуация у меня получилась, сформировал в старой базе ТиС 9.2 остатки номенклатуры и выгрузил их в excel, после чего загрузил в чистую ТиС остатки, присвоил штрих коды, проверил все нормально. Начали работать и теперь при создании документа реализации по кнопке "подбор" выдает следующее :
"В подборе выбрана единица другого элемента справочника Номенклатура.
Проверьте правильность указания базовой и основной единицы для элемента
"Silicon Power Ultima 150 <SP016GBUF2150V1U> USB2.0", а также правильность указания единиц измерения
в справочниках единиц и цен для данной позиции номенклатуры.""
Причем ,если добавить номенклатуру без кнопки подбор то не ругается и это только по позициям которые были добавлены обработкой и не по всем позициям вываливается такое сообщение. Подскажите пожалуйста как вычислить те позиции номенклатуры у которой не правильно записалась единица. Я могу конечно переназначить всей номенклатуре единицы, но тогда у меня слетят все штрихкоды, а это совсем не айс, т.к. в прайсе порядка 20 000 позиций, а остатки были загружены по 1380 позициям.

sergejK74

Как вариант попробуй в цикле по номенклатуре проверить на равенство саму номенклатуру, владельца базовой единицы, владельца основной единицы.
Кнопочка Спасибо - слева!

xDee

Прогнал отладчиком это сообщение и вот что получил :
Номенклатура.Наименование = "18.5" MONITOR Acer eMachines <ET.XE0HE.001> E190HQ"
Номенклатура.Артикул = "111116                   "
Единица.Владелец.Наименование = "19"    MONITOR Acer <ET.CV3RE.D30> V193 DObmd  <Bl"
Единица.Владелец.Артикул = "105878   
Почему так могло произойти ? ведь не у каждой номенклатуры из загрузки остатков такое, я бы на код обработки тогда бы грешил, а тут выборочно как то, причем никаких совпадений по коду и артикулу нет.

xDee


sergejK74

Создаем объект Справочник.Единицы (как то так). В нем находим нужный элемент (единица с неправильным владельцем), присваиваем ей правильного владельца. Записываем. Проверяем.
Все, как обычно, делаем на копии базы.
Кнопочка Спасибо - слева!

xDee

Присваиваем ей правильного владельца, вот тут у меня и засада никак не могу понять как его найти ? Создать новый?

sergejK74

Правильный владелец - элемент справочника Номенклатура, реквизит Единица которого мы искали в справочники Единицы.
Т.е. Запускаем цикл по справочнику Номенклатура. Группы пропускаем. Для тех элементов у которых владелец реквизита БазоваяЕдиница не равен Текущему элементу справочника Номенклатура, мы присваиваем Владельцу значение текущего элемента номенклатуры.
Кнопочка Спасибо - слева!

xDee

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

Где я делаю неправильно ? подскажите пожалуйста.   

sergejK74

В СпрЕдиница нужно найти СпрНоменклатура.ОсновнаяЕдиница, сделать ее владельцем СпрНоменклатура.ТекущийЭлемент() и записать.
Т.е. не хватает СпрЕдиница.НайтиЭлемент(ТекЕдиница)
Кнопочка Спасибо - слева!

sergejK74

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

основнаяЕдиница = СпрНоменклатура.основнаяЕдиница;

если ПустоеЗначение(основнаяЕдиница) = 1 Тогда
продолжить;
КонецЕсли;

    ТекущийЭлемент = СпрНоменклатура.ТекущийЭлемент();

  Если (ТекущийЭлемент<>основнаяЕдиница.Владелец) Тогда 
 
  Если СпрЕдиница.НайтиЭлемент(основнаяЕдиница) = 1 Тогда
  СпрЕдиница.Владелец = ТекущийЭлемент;
  СпрЕдиница.Записать();
  КонецЕсли;
    КонецЕсли;


Тоже и для базовой Единицы наверное надо сделать
Кнопочка Спасибо - слева!

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск