Показано с 1 по 10 из 11
-
08.05.2014, 09:13 #1
- Регистрация
- 31.03.2014
- Сообщений
- 6
- Сказал(а) спасибо
- 0
- Поблагодарили 0 раз(а) в 0 сообщениях
Чистка справочника "Номенклатура"
Здравствуйте, суть проблемы в следующем. База стала избыточной и тянет за собой кучу устаревших и снятых с производства позиций. Нужно ее почистить, как вариант я предполагаю только отобрать из базы по заданным критериям устаревшие позиции и удалить. Из атрибутов есть артикул код позиции (S*******), код группы товаров (S*******) или ее название и дата создания позиции в справочнике "Прайсы поставщиков".
На псевдокоде представляю примерно так:
ВЫБРАТЬ ИЗ Справочник.Номенклатура ГДЕ
Группа такая-то && ДатаСоздания.Справочник.Пр айсы Поставщиков < Даты такой то
ИЛИ Группа такая-то и свои условия
Дать команду на удаление
Или в цикле по коду перебрать все позиции и по условию удалять или оставлять.
Сильно не бейте, человек я вообще далекий от 1С но задание дали, подскажите хотя бы в каком направление копать
-
08.05.2014, 22:58 #2
- Регистрация
- 13.12.2010
- Адрес
- Тамбов
- Сообщений
- 366
- Сказал(а) спасибо
- 22
- Поблагодарили 1066 раз(а) в 244 сообщениях
если на эти позиции есть ссылки,то вы их не удалите
-
09.05.2014, 16:49 #3
- Регистрация
- 31.03.2014
- Сообщений
- 6
- Сказал(а) спасибо
- 0
- Поблагодарили 0 раз(а) в 0 сообщениях
Цель - пометить позиции на удаление, и потом стандартной обработкой с проверкой целостности базы удалить
-
09.05.2014, 19:54 #4
- Регистрация
- 13.12.2010
- Адрес
- Тамбов
- Сообщений
- 366
- Сказал(а) спасибо
- 22
- Поблагодарили 1066 раз(а) в 244 сообщениях
тогда мой совет - помечайте всю номенклатуру и удаляйте стандартной обработкой
Код:Выборка = Справочники.Номенклатура.Выбрать(); Пока Выборка.Следующий() Цикл Ном = Выборка.ПолучитьОбъект(); Ном.ПометкаУдаления = Истина Попытка Ном.Записать(); Исключение Сообщить(ОписаниеОшибки()); КонецПопытки; КонецЦикла;
-
09.05.2014, 22:21 #5
- Регистрация
- 13.12.2010
- Адрес
- Тамбов
- Сообщений
- 366
- Сказал(а) спасибо
- 22
- Поблагодарили 1066 раз(а) в 244 сообщениях
пардон,это 7.7..,а я для 8.Х написал
хотя я думаю смысл понятен
-
13.05.2014, 08:22 #6
- Регистрация
- 31.03.2014
- Сообщений
- 6
- Сказал(а) спасибо
- 0
- Поблагодарили 0 раз(а) в 0 сообщениях
Примерно так получилось, только не срабатывает условие из запроса о дате создания, т.е. выбираются позиции не младше определенной даты, а все позиции. Подскажите как решить
Код://******************************************* Процедура Сформировать() Запрос = СоздатьОбъект("Запрос"); ТекстЗапроса = "//{{ЗАПРОС(Сформировать) |Номенклатура = Справочник.Связи.Владелец; |ТекущийЭлемент = Справочник.Связи.ТекущийЭлемент; |ДатаСоздания = Справочник.Связи.ДатаСоздания; |Группировка Номенклатура; |Группировка ТекущийЭлемент; |Группировка ДатаСоздания; |Условие(ДатаСоздания<ВыбДатаСоздания); |"//}}ЗАПРОС ; // Если ошибка в запросе, то выход из процедуры Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда Возврат; КонецЕсли; // Подготовка к заполнению выходных форм данными запроса Таб = СоздатьОбъект("ТаблицаЗначений"); Запрос.Выгрузить(Таб); Спр=СоздатьОбъект("Справочник.Номенклатура"); //Перебор элементов группы Спр.НайтиПоКоду("a0000001"); a0000001=Спр.ТекущийЭлемент(); Спр.ИспользоватьРодителя(a0000001); Спр.ВыбратьЭлементы(); Пока Спр.ПолучитьЭлемент()=1 Цикл Если Спр.ЭтоГруппа()=1 Тогда Продолжить; КонецЕсли; Спр.Удалить(1); КонецЦикла; КонецПроцедуры
-
13.05.2014, 11:54 #7
- Регистрация
- 08.02.2010
- Адрес
- Рассея
- Сообщений
- 140
- Сказал(а) спасибо
- 1
- Поблагодарили 55 раз(а) в 53 сообщениях
Проще перебрать в цикле все элементы справочника с проверкой условия. Если условие выполняется - удалить.
-
13.05.2014, 12:40 #8
- Регистрация
- 31.03.2014
- Сообщений
- 6
- Сказал(а) спасибо
- 0
- Поблагодарили 0 раз(а) в 0 сообщениях
-
13.05.2014, 12:47 #9
- Регистрация
- 08.02.2010
- Адрес
- Рассея
- Сообщений
- 140
- Сказал(а) спасибо
- 1
- Поблагодарили 55 раз(а) в 53 сообщениях
Свяжи со справочником, где это поле есть и перебирай.
-
-
13.05.2014, 12:50 #10
- Регистрация
- 31.03.2014
- Сообщений
- 6
- Сказал(а) спасибо
- 0
- Поблагодарили 0 раз(а) в 0 сообщениях
Еще загвоздка, что дата не одна, а для разных групп своя. Есть такой вариант, но он игнорирует дату и удаляет всю группу
Код:Процедура Сформировать() Запрос = СоздатьОбъект("Запрос"); ТекстЗапроса = "//{{ЗАПРОС(Сформировать) |Номенклатура= Справочник.Связи.Владелец; |ДатаСоздания = Справочник.Связи.ДатаСоздания; |Группировка Номенклатура; |Условие(ДатаСоздания<ВыбДатаСоздания); |Без Итогов; |"; Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда Возврат; КонецЕсли; Спр = СоздатьОбъект("Справочник.Номенклатура"); Пока Запрос.Группировка()=1 Цикл Если Спр.НайтиЭлемент(Запрос.Номенклатура)=1 Тогда Если Спр.ПринадлежитГруппе(выбРодитель)=1 Тогда Спр.Удалить(0); КонецЕсли; КонецЕсли; КонецЦикла; КонецПроцедуры
Похожие темы
-
Чистка справочника "Номенклатура"
от koka278 в разделе 1С - Предприятие 7.7Ответов: 1Последнее сообщение: 05.05.2014, 16:47
Социальные закладки