Здравствуйте, суть проблемы в следующем. База стала избыточной и тянет за собой кучу устаревших и снятых с производства позиций. Нужно ее почистить, как вариант я предполагаю только отобрать из базы по заданным критериям устаревшие позиции и удалить. Из атрибутов есть артикул код позиции (S*******), код группы товаров (S*******) или ее название и дата создания позиции в справочнике "Прайсы поставщиков".
На псевдокоде представляю примерно так:
ВЫБРАТЬ ИЗ Справочник.Номенклатура ГДЕ
Группа такая-то && ДатаСоздания.Справочник.Пр айсы Поставщиков < Даты такой то
ИЛИ Группа такая-то и свои условия
Дать команду на удаление
Или в цикле по коду перебрать все позиции и по условию удалять или оставлять.
Сильно не бейте, человек я вообще далекий от 1С но задание дали, подскажите хотя бы в каком направление копать
arccos6pi
08.05.2014, 22:58
если на эти позиции есть ссылки,то вы их не удалите
koka278
09.05.2014, 16:49
Цель - пометить позиции на удаление, и потом стандартной обработкой с проверкой целостности базы удалить
arccos6pi
09.05.2014, 19:54
Цель - пометить позиции на удаление, и потом стандартной обработкой с проверкой целостности базы удалитьтогда мой совет - помечайте всю номенклатуру и удаляйте стандартной обработкой
Выборка = Справочники.Номенклатура.В ыбрать();
Пока Выборка.Следующий() Цикл
Ном = Выборка.ПолучитьОбъект();
Ном.ПометкаУдаления = Истина
Попытка
Ном.Записать();
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
КонецЦикла;как-то так..
arccos6pi
09.05.2014, 22:21
пардон,это 7.7..,а я для 8.Х написал
хотя я думаю смысл понятен
koka278
13.05.2014, 08:22
Примерно так получилось, только не срабатывает условие из запроса о дате создания, т.е. выбираются позиции не младше определенной даты, а все позиции. Подскажите как решить
//Перебор элементов группы
Спр.НайтиПоКоду("a0000001");
a0000001=Спр.ТекущийЭлемент();
Спр.ИспользоватьРодителя(a0 000001);
Спр.ВыбратьЭлементы();
Пока Спр.ПолучитьЭлемент()=1 Цикл
Если Спр.ЭтоГруппа()=1 Тогда
Продолжить;
КонецЕсли;
Спр.Удалить(1);
КонецЦикла;
КонецПроцедуры
Alex_7_7_7
13.05.2014, 11:54
Проще перебрать в цикле все элементы справочника с проверкой условия. Если условие выполняется - удалить.
koka278
13.05.2014, 12:40
Проще перебрать в цикле все элементы справочника с проверкой условия. Если условие выполняется - удалить.
Дело в том, что удалить нужно по полю ДатаСоздания, а его нет в Номенклатуре, поэтому запрос приходится делать
Alex_7_7_7
13.05.2014, 12:47
Свяжи со справочником, где это поле есть и перебирай.
koka278
13.05.2014, 12:50
Свяжи со справочником, где это поле есть и перебирай.
Еще загвоздка, что дата не одна, а для разных групп своя. Есть такой вариант, но он игнорирует дату и удаляет всю группу
Если Спр.НайтиЭлемент(Запрос.Но� �енклатура)=1 Тогда
Если Спр.ПринадлежитГруппе(выбР одитель)=1 Тогда
Спр.Удалить(0);
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Alex_7_7_7
13.05.2014, 13:08
1. Какая у Вас версия базы? (DBF или SQL)?
2. Как у Вас связаны номенклатура и поле ДатаСоздания?