7.7 Очистка справочника номенклатура от неиспользуемых элементов

Тема в разделе "Отчеты и обработки для "1С:Предприятие 7.7"", создана пользователем GuitaristNSK, 13 дек 2011.

  1. TopicStarter Overlay
    GuitaristNSK
    Offline

    GuitaristNSK

    Регистрация:
    13 дек 2011
    Сообщения:
    7
    Симпатии:
    0
    Баллы:
    1
    Добрый день! Необходимо написать обработку: очистить справочник номенклатура, т.е. удалить те элементы, остатки которых на начало года и на конец года равны нулю. Помогите, пожалуйста, новичку...
  2. Requin
    Offline

    Requin Опытный в 1С

    Регистрация:
    10 май 2010
    Сообщения:
    1.911
    Симпатии:
    2
    Баллы:
    29
    А если по ним движение было в течении года (т.е. в документах есть ссылки на эти элементы)? Или в старых периодах есть ссылки?
    IMHO, надо удалять те элементы, на которые нет ссылок. Помечаете на удаление все элементы, проводите удаление помеченных штатными средствами (Операции - Удаление помеченных объектов), снимаете пометку удаления с оставшихся элементов. Если нужно сделайте "свертку" базы.
  3. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Если есть ссылки на эти элементы в документах (а они думаю есть) удалить документы из базы 1с не даст. Ваш отчет будет иметь смысл только если обрезать базу на начало года. Дальше продолжать?
  4. TopicStarter Overlay
    GuitaristNSK
    Offline

    GuitaristNSK

    Регистрация:
    13 дек 2011
    Сообщения:
    7
    Симпатии:
    0
    Баллы:
    1
    Да, продолжайте, пожалуйста. Я немного некорректно объяснил ситуацию. Необходимо удалить элементы, остатки которых равны нулю и в течении года по ним не было движений. Дело в том, что в офисе не ищут уже существующие элементы, а постоянно создают новые.
  5. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Повторюсь... Если у вас элемент справочника имеет ссылки (участвовал в документообороте) удалить его не получится! Даже если остатки на начало года =0 и в оборотах В ЭТОМ году он не участвовал...
    Но он ведь участвовал В ПРОШЫХ периодах... Если вы его удалите - получится "битая" ссылка. М.б. имеет все же смысл навести порядок в офисе?
  6. TopicStarter Overlay
    GuitaristNSK
    Offline

    GuitaristNSK

    Регистрация:
    13 дек 2011
    Сообщения:
    7
    Симпатии:
    0
    Баллы:
    1
    Это я понял. С офисом бесполезно, там люди непробиваемые. Если мы будем обрезать базу, то какую сделать обработку?
  7. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Конфигурация-то какая?
  8. TopicStarter Overlay
    GuitaristNSK
    Offline

    GuitaristNSK

    Регистрация:
    13 дек 2011
    Сообщения:
    7
    Симпатии:
    0
    Баллы:
    1
  9. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    За сколько лет данные в базе? Большая по размеру?
  10. TopicStarter Overlay
    GuitaristNSK
    Offline

    GuitaristNSK

    Регистрация:
    13 дек 2011
    Сообщения:
    7
    Симпатии:
    0
    Баллы:
    1
    За лет 5. Около 500 Мв.
  11. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Ну... Типовой сверткой вы долго будете делать....
    Проще удалить файлы документов/журналов/регистров (+ справочник партий). Тем самым получите пустую базу, содержащую только справочники. Останется только выгрузить/загрузить остатки... и можно работать дальше. Относительно обработки удаления неактуальных элементов справочника ТМЦ - сейчас выложу приблизительный код.
  12. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Вот приблизительный код

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

    GuitaristNSK

    Регистрация:
    13 дек 2011
    Сообщения:
    7
    Симпатии:
    0
    Баллы:
    1
    Именно это мне и нужно было. Спасибо. :angry:
  14. TopicStarter Overlay
    GuitaristNSK
    Offline

    GuitaristNSK

    Регистрация:
    13 дек 2011
    Сообщения:
    7
    Симпатии:
    0
    Баллы:
    1
    А если рассмотреть такой вариант: Удалить те элементы справочника Номенклатура, на которые нет ссылок. Пожалуйста, если кто знает, дайте код...
  15. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Метим ВСЕ элементы на удаление... Для этого обработку писать не обязательно (при отметке группы на удаление подчиненные элементы тоже помечаются)

    1с сама разберется что можно удалить, а что нельзя. После очистки снимаем метки
  16. Requin
    Offline

    Requin Опытный в 1С

    Регистрация:
    10 май 2010
    Сообщения:
    1.911
    Симпатии:
    2
    Баллы:
    29
    Только нюансы есть при наличии подчиненных справочников. Можно лишнего удалить.
  17. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Не согласен... Справочник-владелец на месте. Значит и подчиненные затронуты не будут
  18. Requin
    Offline

    Requin Опытный в 1С

    Регистрация:
    10 май 2010
    Сообщения:
    1.911
    Симпатии:
    2
    Баллы:
    29
    Проверено. Прекрасно удаляются, даже если владелец на месте (ну и нет конечно ссылок в базе на подчиненные элементы). Вот владелец не удалится, пока есть подчиненные.
  19. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Хм... Логично. Но тут спорный вопрос. Если подчиненный элемент до этого не использовался - он вряд ли понадобится.
  20. Requin
    Offline

    Requin Опытный в 1С

    Регистрация:
    10 май 2010
    Сообщения:
    1.911
    Симпатии:
    2
    Баллы:
    29
    Может быть. Смотря для чего подчиненный справочник используется. Поэтому и написал - есть нюансы. Тут уже творческий подход применять надо. :angry:

Поделиться этой страницей