Чистка справочника "Номенклатура"
X

Привет дорогой друг

Наш сайт существует и развиваетется за счет рекламы. Пожалуйста, отключите блокировку рекламы AdBlock или подобное, для нашего сайта. Спасибо!
Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 11
  1. #1
    Гость форума

    Регистрация
    31.03.2014
    Сообщений
    6
    Сказал(а) спасибо
    0
    Поблагодарили 0 раз(а) в 0 сообщениях

    По умолчанию Чистка справочника "Номенклатура"

    Здравствуйте, суть проблемы в следующем. База стала избыточной и тянет за собой кучу устаревших и снятых с производства позиций. Нужно ее почистить, как вариант я предполагаю только отобрать из базы по заданным критериям устаревшие позиции и удалить. Из атрибутов есть артикул код позиции (S*******), код группы товаров (S*******) или ее название и дата создания позиции в справочнике "Прайсы поставщиков".
    На псевдокоде представляю примерно так:

    ВЫБРАТЬ ИЗ Справочник.Номенклатура ГДЕ
    Группа такая-то && ДатаСоздания.Справочник.Пр айсы Поставщиков < Даты такой то
    ИЛИ Группа такая-то и свои условия
    Дать команду на удаление


    Или в цикле по коду перебрать все позиции и по условию удалять или оставлять.


    Сильно не бейте, человек я вообще далекий от 1С но задание дали, подскажите хотя бы в каком направление копать

  2. #2
    Спец PRO
    Аватар для arccos6pi
    Регистрация
    13.12.2010
    Адрес
    Тамбов
    Сообщений
    366
    Сказал(а) спасибо
    22
    Поблагодарили 1066 раз(а) в 244 сообщениях

    По умолчанию

    если на эти позиции есть ссылки,то вы их не удалите

  3. #3
    Гость форума

    Регистрация
    31.03.2014
    Сообщений
    6
    Сказал(а) спасибо
    0
    Поблагодарили 0 раз(а) в 0 сообщениях

    По умолчанию

    Цель - пометить позиции на удаление, и потом стандартной обработкой с проверкой целостности базы удалить

  4. #4
    Спец PRO
    Аватар для arccos6pi
    Регистрация
    13.12.2010
    Адрес
    Тамбов
    Сообщений
    366
    Сказал(а) спасибо
    22
    Поблагодарили 1066 раз(а) в 244 сообщениях

    По умолчанию

    Цитата Сообщение от koka278 Посмотреть сообщение
    Цель - пометить позиции на удаление, и потом стандартной обработкой с проверкой целостности базы удалить
    тогда мой совет - помечайте всю номенклатуру и удаляйте стандартной обработкой
    Код:
    Выборка = Справочники.Номенклатура.Выбрать();
    Пока Выборка.Следующий() Цикл
    	Ном = Выборка.ПолучитьОбъект();
    	Ном.ПометкаУдаления = Истина
    	Попытка
    		Ном.Записать();
    	Исключение
    		Сообщить(ОписаниеОшибки());
    	КонецПопытки;
    КонецЦикла;
    как-то так..

  5. #5
    Спец PRO
    Аватар для arccos6pi
    Регистрация
    13.12.2010
    Адрес
    Тамбов
    Сообщений
    366
    Сказал(а) спасибо
    22
    Поблагодарили 1066 раз(а) в 244 сообщениях

    По умолчанию

    пардон,это 7.7..,а я для 8.Х написал
    хотя я думаю смысл понятен

  6. #6
    Гость форума

    Регистрация
    31.03.2014
    Сообщений
    6
    Сказал(а) спасибо
    0
    Поблагодарили 0 раз(а) в 0 сообщениях

    По умолчанию

    Примерно так получилось, только не срабатывает условие из запроса о дате создания, т.е. выбираются позиции не младше определенной даты, а все позиции. Подскажите как решить
    Код:
    //*******************************************
    Процедура Сформировать() 
    
       Запрос = СоздатьОбъект("Запрос");
    
       ТекстЗапроса = 
       "//{{ЗАПРОС(Сформировать)
       |Номенклатура = Справочник.Связи.Владелец;
       |ТекущийЭлемент = Справочник.Связи.ТекущийЭлемент;
       |ДатаСоздания = Справочник.Связи.ДатаСоздания;
       |Группировка Номенклатура;
       |Группировка ТекущийЭлемент;
       |Группировка ДатаСоздания;
       |Условие(ДатаСоздания<ВыбДатаСоздания);
       |"//}}ЗАПРОС
       ;
    // Если ошибка в запросе, то выход из процедуры
    
       Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
          Возврат;
       КонецЕсли; 
    
    
    
    // Подготовка к заполнению выходных форм данными запроса
    
       Таб = СоздатьОбъект("ТаблицаЗначений");
       Запрос.Выгрузить(Таб);
    
       Спр=СоздатьОбъект("Справочник.Номенклатура");
    
    //Перебор элементов группы
       Спр.НайтиПоКоду("a0000001");
       a0000001=Спр.ТекущийЭлемент();
       Спр.ИспользоватьРодителя(a0000001);
       Спр.ВыбратьЭлементы();
    
    
       Пока Спр.ПолучитьЭлемент()=1 Цикл
          Если Спр.ЭтоГруппа()=1 Тогда
             Продолжить;
          КонецЕсли;
    
         Спр.Удалить(1);
       КонецЦикла; 
    
    КонецПроцедуры

  7. #7
    Помогает людям

    Регистрация
    08.02.2010
    Адрес
    Рассея
    Сообщений
    140
    Сказал(а) спасибо
    1
    Поблагодарили 55 раз(а) в 53 сообщениях

    По умолчанию

    Проще перебрать в цикле все элементы справочника с проверкой условия. Если условие выполняется - удалить.

  8. #8
    Гость форума

    Регистрация
    31.03.2014
    Сообщений
    6
    Сказал(а) спасибо
    0
    Поблагодарили 0 раз(а) в 0 сообщениях

    По умолчанию

    Цитата Сообщение от Alex_7_7_7 Посмотреть сообщение
    Проще перебрать в цикле все элементы справочника с проверкой условия. Если условие выполняется - удалить.
    Дело в том, что удалить нужно по полю ДатаСоздания, а его нет в Номенклатуре, поэтому запрос приходится делать

  9. #9
    Помогает людям

    Регистрация
    08.02.2010
    Адрес
    Рассея
    Сообщений
    140
    Сказал(а) спасибо
    1
    Поблагодарили 55 раз(а) в 53 сообщениях

    По умолчанию

    Свяжи со справочником, где это поле есть и перебирай.

  10. #10
    Гость форума

    Регистрация
    31.03.2014
    Сообщений
    6
    Сказал(а) спасибо
    0
    Поблагодарили 0 раз(а) в 0 сообщениях

    По умолчанию

    Цитата Сообщение от Alex_7_7_7 Посмотреть сообщение
    Свяжи со справочником, где это поле есть и перебирай.
    Еще загвоздка, что дата не одна, а для разных групп своя. Есть такой вариант, но он игнорирует дату и удаляет всю группу
    Код:
    Процедура Сформировать()
    
       Запрос = СоздатьОбъект("Запрос");
    
       ТекстЗапроса =
       "//{{ЗАПРОС(Сформировать)
       |Номенклатура= Справочник.Связи.Владелец;
       |ДатаСоздания = Справочник.Связи.ДатаСоздания;
       |Группировка Номенклатура;
       |Условие(ДатаСоздания<ВыбДатаСоздания);
       |Без Итогов;
       |";
       Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
          Возврат;
        КонецЕсли;
       Спр = СоздатьОбъект("Справочник.Номенклатура"); 
       
       Пока Запрос.Группировка()=1 Цикл  
    
            Если Спр.НайтиЭлемент(Запрос.Номенклатура)=1 Тогда
                Если Спр.ПринадлежитГруппе(выбРодитель)=1 Тогда 
                  Спр.Удалить(0);
                КонецЕсли;
            КонецЕсли;
       КонецЦикла;
    КонецПроцедуры

Страница 1 из 2 12 ПоследняяПоследняя

Похожие темы

  1. Чистка справочника "Номенклатура"
    от koka278 в разделе 1С - Предприятие 7.7
    Ответов: 1
    Последнее сообщение: 05.05.2014, 16:47

Социальные закладки

Социальные закладки

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •