Реклама на этом месте
Форум 1С
Форум 1С
Программистам. Бухгалтерам. Администраторам. Пользователям
Задай вопрос - получи решение проблемы. Без троллинга и флуда.
23 Авг 2017, 05:08
МультиВход
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?
 
collapse

Автор Тема: Удаление дублирующихся записей в справочнике  (Прочитано 3300 раз)

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

Оффлайн Electron

  • *
  • Сообщений: 8
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2015-11-17
  • Сайт: 
Добрый день, помогите пожалуйста разобраться с задачей, а то мозгов уже не хватает))
В общем есть справочник Дисциплины, в котором уже имеются повторяющиеся по наименованию элементы, собственно нужно от них избавиться) Набросал такой код, где на входе формируется массив всех элементов "до", а на выходе получаем массив без лишних элементов "после", но это массивы, а как выбрать тот элемент справочника, который нужно удалить, или сделать сравнение готового массива со справочником - придумать не могу, сможете помочь? Заранее спасибо)

	МассивДисцилин = Новый Массив;
Выборка = Справочники.Дисциплины.Выбрать();
Пока Выборка.Следующий() = 1 Цикл
МассивДисцилин.Добавить(Выборка.Наименование);
КонецЦикла;

Для Каждого ЭлементМассива Из МассивДисцилин Цикл
Сообщить("До: " + ЭлементМассива);
КонецЦикла;

ТекущийИндекс = 0;
ВсегоЭлементов = МассивДисцилин.Количество();
Пока ТекущийИндекс < ВсегоЭлементов Цикл
НовыйИндекс = ТекущийИндекс + 1;
Пока НовыйИндекс < ВсегоЭлементов Цикл
Если МассивДисцилин[НовыйИндекс] = МассивДисцилин[ТекущийИндекс] Тогда
МассивДисцилин.Удалить(НовыйИндекс);
ВсегоЭлементов = ВсегоЭлементов - 1;
Иначе
НовыйИндекс = НовыйИндекс + 1;
КонецЕсли;
КонецЦикла;
ТекущийИндекс = ТекущийИндекс + 1;
КонецЦикла;

Для Каждого ЭлементМассива Из МассивДисцилин Цикл
Сообщить("После: " + ЭлементМассива);
КонецЦикла;

Нынешний результат отработки:

Последний раз редактировалось: Electron; 17 Ноя 2015, 13:48


Оффлайн vitasw

  • *****
  • Сообщений: 2546
  • РЕПУТАЦИЯ: 309
  • КПД: 12%
  • Регистрация: 2015-02-10
  • Сайт: 
  • Профессия: Программист 1С
коды в элементах отличаются?

Оффлайн Electron

  • *
  • Сообщений: 8
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2015-11-17
  • Сайт: 
коды в элементах отличаются?
vitasw, да - коды разные)

Онлайн Kironten

  • *****
  • Сообщений: 838
  • РЕПУТАЦИЯ: 179
  • КПД: 21%
  • Регистрация: 2013-08-12
  • Сайт: 
  • Профессия: Ученик 1С
коды в элементах отличаются?
vitasw, да - коды разные)
А как вы планируете определять, какие надо удалять, если наименования одинаковые, а коды разные?

Оффлайн vitasw

  • *****
  • Сообщений: 2546
  • РЕПУТАЦИЯ: 309
  • КПД: 12%
  • Регистрация: 2015-02-10
  • Сайт: 
  • Профессия: Программист 1С
В качестве примера:

	Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Клиенты.Ссылка,
| Клиенты.Наименование
|ПОМЕСТИТЬ втКлиенты
|ИЗ
| Справочник.Клиенты КАК Клиенты
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| внЗапрос.Наименование КАК Наименование,
| внЗапрос.СсылкаДубликат,
| внЗапрос.КоличествоСовпадений КАК КоличествоСовпадений
|ИЗ
| (ВЫБРАТЬ
| втКлиенты.Наименование КАК Наименование,
| втКлиенты1.Ссылка КАК СсылкаДубликат,
| КОЛИЧЕСТВО(РАЗЛИЧНЫЕ втКлиенты1.Ссылка) КАК КоличествоСовпадений
| ИЗ
| втКлиенты КАК втКлиенты
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ втКлиенты КАК втКлиенты1
| ПО втКлиенты.Наименование = втКлиенты1.Наименование
| И втКлиенты.Ссылка <> втКлиенты1.Ссылка
|
| СГРУППИРОВАТЬ ПО
| втКлиенты.Наименование,
| втКлиенты1.Ссылка) КАК внЗапрос
|ИТОГИ
| СУММА(КоличествоСовпадений)
|ПО
| Наименование";

РезультатЗапроса = Запрос.Выполнить();

Оффлайн spinnen.87

  • *
  • Сообщений: 15
  • РЕПУТАЦИЯ: 5
  • КПД: 33%
  • Регистрация: 2015-10-06
    • Skype: Spinnen.87
  • Сайт: 
  • Профессия: Ученик 1С
Если не подходят уже готовые обработки поиска и замены дублей, то почему не открыть ее в конфигураторе и не попробовать подправить под себя?
Получил помощь - скажи СПАСИБО.

Оффлайн Electron

  • *
  • Сообщений: 8
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2015-11-17
  • Сайт: 
А как вы планируете определять, какие надо удалять, если наименования одинаковые, а коды разные?
Ну так вот для этого и крутил массивы, правда дальше дело не пошло))

В качестве примера:
Завтра повникаю в ваш пример)

Если не подходят уже готовые обработки поиска и замены дублей, то почему не открыть ее в конфигураторе и не попробовать подправить под себя?
Готовые пробовал - слишком сложно что-либо понять, тем более новичку со стажем не более месяца))
Легче наверное по новому написать, но вот вроде суть проста, скорей всего отделаться можно парой строк, но не догоняю)

Оффлайн spinnen.87

  • *
  • Сообщений: 15
  • РЕПУТАЦИЯ: 5
  • КПД: 33%
  • Регистрация: 2015-10-06
    • Skype: Spinnen.87
  • Сайт: 
  • Профессия: Ученик 1С
Раз новичок как и я, то легче воспользоваться помощью знающих. Заплатить за разработку обработки.
Если я правильно понимаю, то на дубли могут ссылаться другие объекты и нужно еще заменить ссылки в этих объектах с удаленных на оставшиеся.

Как вариант. Не получал массив нужных элементов, а наоборот тех которые нужно удалить.
Затем прогнать справочник дисциплин, если нашел элемент с полученного массива, то пометить на удаление.
И в массив нужно записывать уникальный ваш код. они же у вас разные.
Получил помощь - скажи СПАСИБО.

Оффлайн Electron

  • *
  • Сообщений: 8
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2015-11-17
  • Сайт: 
Раз новичок как и я, то легче воспользоваться помощью знающих. Заплатить за разработку обработки.
Если я правильно понимаю, то на дубли могут ссылаться другие объекты и нужно еще заменить ссылки в этих объектах с удаленных на оставшиеся.

Как вариант. Не получал массив нужных элементов, а наоборот тех которые нужно удалить.
Затем прогнать справочник дисциплин, если нашел элемент с полученного массива, то пометить на удаление.
И в массив нужно записывать уникальный ваш код. они же у вас разные.
Что, платить за домашнее задание? Оо Не диплом, ни зачёт, просто одно из многих домашних заданий)))
Насчёт ссылок не думаю, в любом случае пока что нужно только удалить дублирующиеся записи)
Сейчас подумаю над вашими словами)
Добавлено: 18 Ноя 2015, 10:12

В общем покрутил предложенные выше варианты, но ничего не смог сделать...(
Добавлено: 18 Ноя 2015, 12:18

Может вообще всё это можно реализовать один небольшим запросом? Имеется справочник Дисциплины с двумя реквизитами: код и наименование, всё)

Последний раз редактировалось: Electron; 18 Ноя 2015, 12:18. Причина: Объединение сообщений

Оффлайн spinnen.87

  • *
  • Сообщений: 15
  • РЕПУТАЦИЯ: 5
  • КПД: 33%
  • Регистрация: 2015-10-06
    • Skype: Spinnen.87
  • Сайт: 
  • Профессия: Ученик 1С
Аааа... Раз домашнее задание, то конечно...
Добавлено: 18 Ноя 2015, 21:19

Не знаю может и ошибка в коде. Я только постигаю азы, как и Вы.

но типа этого, если сохраните артиклы совпадающих элементов в массив
Выборка2 = Справочники.Дисциплины.Выбрать();

Пока Выборка2.Следующий() Цикл
СправочникДисциплин=Выборка2.ПолучитьОбъект();

Для Каждого ЭлементМассива Из МассивДисцилинАртикул Цикл
Если  ЭлементМассива=СправочникДисциплин.артикул Тогда
СправочникДисциплин.ПометкаУдаления = Истина;
СправочникДисциплин.Записать();
КонецЕсли;

КонецЦикла;

Добавлено: 18 Ноя 2015, 21:30

Опять же незнаю верно или нет
	Выборка = Справочники.Дисциплины.Выбрать();

Пока Выборка.Следующий() Цикл
СправочникДисциплин=Выборка.ПолучитьОбъект();
Пока Выборка.Следующий()+1 Цикл
СправочникДисциплин2=Выборка.ПолучитьОбъект();
Если СправочникДисциплин.наименование=СправочникДисциплин2.наименование Тогда
СправочникДисциплин2.ПометкаУдаления = Истина;
СправочникДисциплин2.Записать();
                         Сообщить(СправочникДисциплин2.наименование+" Помечен на удаление.");
конецЕсли;
КонецЦикла;
КонецЦикла;

Получил помощь - скажи СПАСИБО.

Последний раз редактировалось: spinnen.87; 18 Ноя 2015, 21:30. Причина: Объединение сообщений


Теги:
 

Реквизит "ГоловнойКонтрагент" в справочнике "Контрагенты"

Автор SergWolf07Раздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 3
Просмотров: 6678
Последний ответ 28 Авг 2011, 19:12
от SergWolf07
Удаление помеченных объектов ("Не удалось записать "Контактная информация"")

Автор SnakeyРаздел Пользователям "1С - Предприятие 8"

Ответов: 5
Просмотров: 6376
Последний ответ 08 Янв 2015, 09:15
от Sanario
Удаление папки "Темп"

Автор TATIZРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 1
Просмотров: 1510
Последний ответ 11 Мар 2015, 13:45
от дфтын
Отсутствие документов помеченных на удаление в обработке удаления помеченных

Автор ak47Раздел Пользователям "1С - Предприятие 8"

Ответов: 1
Просмотров: 2425
Последний ответ 06 Июн 2013, 11:47
от Совёнок
Не могу найти "Удаление помеченных объектов"

Автор LeviathanРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 7
Просмотров: 4380
Последний ответ 14 Янв 2016, 06:03
от cska-fanat-kz

* Живое общение

Не устроил ответ?

Зарегистрируйся и задай свой вопрос. Живое общение приносит результат намного быстрее.


Зарегистрироваться

* Реклама

* Поиск

* Последние задачи на разработку (фриланс)

* Реклама

* Последние вакансии

* Топ 10 авторов за месяц

oleg-x
142 Сообщений
alex0402
57 Сообщений
MuI_I_Ika MuI_I_Ika
33 Сообщений
Геннадий ОбьГЭС Геннадий ОбьГЭС
32 Сообщений
AIFrame
30 Сообщений
Kironten
29 Сообщений
pavl_vs
26 Сообщений
AsadRoman
20 Сообщений
magnifico61
18 Сообщений
Александр Лахтин Александр Лахтин
18 Сообщений

* Кто онлайн

  • Точка Гостей: 284
  • Точка Скрытых: 0
  • Точка Пользователей: 2
  • Точка Сейчас на форуме:

* Облако тэгов

* Форум 1С с мобильного

* Инструменты

* Дополнительно

Поиск

 
SimplePortal 2.3.5 © 2008-2012, SimplePortal