Перейти к содержимому

Фотография

строки в справочнике контрагенты удвоилиськак избавиться??? оч срочно!!!


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 16

#1
alina_r

alina_r
  • Частый гость
  • 52 сообщений
у кого нить есть обработка по удалению сдублированых строк справочника??? вернее пометку на удаление нуно сделать, а то они фигурируют еще и в документах, их тоже прийдется перебирать...
  • 0

#2
olege

olege
  • Завсегдатай
  • 139 сообщений
Самый простейший вариант:
Процедура ДубльСтрок()
Спр=создатьОбъект("Справочник.Номенклатура");	
Спис=СоздатьОбъект("СписокЗначений");
Спр.ВыбратьЭлементы();
пока Спр.ПолучитьЭлемент()=1 Цикл
	если Спр.ЭтоГруппа()=1 тогда продолжить; КонецЕсли; 
	Если Спис.НайтиЗначение(спр.Код)<>0 Тогда
		
		Спр.Удалить(0);
		Иначе
	Спис.ДобавитьЗначение(Спр.Код);
	КонецЕсли;
	КонецЦикла;
	КонецПроцедуры


  • 0

#3
olege

olege
  • Завсегдатай
  • 139 сообщений
При написании вчера кода, увы мне не учел, что в таких случаях просто на код ориентироваться нельзя, лучше будет все таки так:
Процедура ДубльСтрок()
Спр=создатьОбъект("Справочник.Номенклатура");	
Спис=СоздатьОбъект("СписокЗначений");
Спр.ВыбратьЭлементы();
пока Спр.ПолучитьЭлемент()=1 Цикл
	если Спр.ЭтоГруппа()=1 тогда продолжить; КонецЕсли;
	КодСпр=""+Спр.ПолныйКод()+","+Спр.ПолноеНаименование();
	Если Спис.НайтиЗначение(КодСпр)<>0 Тогда
		
		Спр.Удалить(0);
		Иначе
	Спис.ДобавитьЗначение(КодСпр);
	КонецЕсли;
	КонецЦикла;
	КонецПроцедуры
Таким образом Вы пометите на удаление все задвоенные элементы в нужном справочнике.
  • 0

#4
Обработка

Обработка
  • Свой человек
  • 567 сообщений
Я бы сначала выяснил как удвоились? Один к одному? Коды совпадаают? Названия совпадают? Обработеа сама должна перебирать или только пользователь определить что на что задвоился...
  • 0

#5
alina_r

alina_r
  • Частый гость
  • 52 сообщений
они удвоились оч оригинально! в бух справке, которой вносили остатки ссылка на 1 наименование, а в документах, причем не во всех, на второе...строки идентичны, практически, поэтому нуно избавиться от любого из экземпляров, и в бухсправке, или опять же в документах, и затем сослаться уже на непомеченый на удаление
коряво вносили данные, без мысли о сослуживцах...
  • 0

#6
Обработка

Обработка
  • Свой человек
  • 567 сообщений
Удвоились значит не программно? Т.е. например есть контрагент ТОО Альфа с кодом 00001 также есть Альфа с кодом 99999. Но у них есть РНН они наверно одинаковые.
Предлагаю поменять поиском и сравнением по РНН. Потом чтобы поменять в доках надо через ссылки. Если задвоенных контрагентов не много и доки не много тогда вручную сделайте а ак обработку написать пол часа.
  • 0

#7
alina_r

alina_r
  • Частый гость
  • 52 сообщений
строк около 100 а вот документов оч много, и тут неизвестно какие куда ссылаются...я строки пометила на удаление, по порядку вышло что большая часть помеченых оказалась со ссылкой на начальные остатки, вот теперь моно подсказку? мне как то нужно обратиться к справочнику и выбрать только непомеченые на удаление строки, есть такой оператор? я чот никак не нахожу подходящее ничо
  • 0

#8
Z_Andrey

Z_Andrey
  • Гость
  • 43 сообщений
Ну и в чем именно проблема? Тебя удовлетворяет удаление которое проедложил Olege? Если да, то потом пробегаешься по всем документам, по их табличным частям. Выбираешь элемент справочника и если он помечен на удаление, то находишь его двойника и подставляешь в табличную часть...
Если все еще есть проблема с нахождением двойников, то надо более конкретно описать что за двойники, что у них общего (наименование, код или еще что...).
  • 0

#9
Арстан

Арстан
  • Постоялец
  • 480 сообщений
Спр.выбратьЭлементы()...
Пока...Цикл
Если Спр.пометкаУдаления()=1 Тогда
//помечен
КонецЕсли;
....
  • 0

#10
Арстан

Арстан
  • Постоялец
  • 480 сообщений
Вообще я бы решал т.о.:
Вывел всех двойников
Выделил главного
Пробежался по документам и поставил везде этот элемент
записал, провел (здесь острожнее).

Пометка, Удаление помеченных
  • 0

#11
alina_r

alina_r
  • Частый гость
  • 52 сообщений
[ Выбираешь элемент справочника и если он помечен на удаление, то находишь его двойника и подставляешь в табличную часть...
[/quote]

ну стопор у меня тут, ну что поделаешь, перебираю я таким манером, а вот на двойника как перейти?
понимаю что мелочь, для некоторых, а я вот застряла

Пока Док.ПолучитьДокумент() = 1 Цикл
ДокДвижения = Док.ТекущийДокумент();
Контрагент = ДокДвижения.Контрагент;
Спр.НайтиЭлемент(Контрагент);
Если Спр.ПометкаУдаления() = 1 Тогда
??? вот тут чо нуно написать???
Док.Контрагент = Спр.ТекущийЭлемент();
Док.записать();
КонецЕсли;
КонецЦикла;
  • 0

#12
Обработка

Обработка
  • Свой человек
  • 567 сообщений
есть обработка replval.ert кажется он тебе поможет точно
  • 0

#13
Обработка

Обработка
  • Свой человек
  • 567 сообщений
Если в оработку не заложешь логику подстановки дубликата придется все делать вручную. Зацепиться можно по РНН. Находим элемент с пометкой на удаления далее ищем его двойника но не помеченного по РНН. Допустим в переменной контр1 помечен на удаление в переменной контр2 тот который дожен остатся. далее ищем по ссылке их в объектах метаданных справочники и документы. меняем записываем и проводим. если не писать через метаданные тогда придеться писать через явно указанные объекты.Но обработок будет много на каждый вид документа и справочника.
  • 0

#14
alina_r

alina_r
  • Частый гость
  • 52 сообщений
справочник 1, я изначально об етом в теме написала- Контрагенты. Документов пока тоже вид 1, по крайней мере так пользователи говорят.
РНН у контаргентов ясно дело совпадают...а где берут обработку replval.ert?
вот я вывесила кусочек модуля, кто нить подскажите, что поставить на место моих вопросиков?
  • 0

#15
Обработка

Обработка
  • Свой человек
  • 567 сообщений
Пока Док.ПолучитьДокумент() = 1 Цикл
ДокДвижения = Док.ТекущийДокумент();
Контрагент = ДокДвижения.Контрагент;
Спр.НайтиЭлемент(Контрагент);
Если Спр.ПометкаУдаления() = 1 Тогда
Помеченный = Спр.ТекущийЭлемент();
Если Спр.НайтиПоРеквизиту(Контрагент.РНН) = 1 Тогда
Если Помеченный <> Спр.ТекущийЭлемент() Тогда
ДляЗамены = Спр.ТекущийЭлемент();
КонецЕсли;
КонецЕсли;
Док.Контрагент = ДляЗамены;
Док.записать();
КонецЕсли;
КонецЦикла;

Куда скинуть replval.ert???
  • 0

#16
alina_r

alina_r
  • Частый гость
  • 52 сообщений
Alina_v_r@mail.ru
  • 0

#17
Z_Andrey

Z_Andrey
  • Гость
  • 43 сообщений
>>Если Спр.НайтиПоРеквизиту(Контрагент.РНН) = 1 Тогда
>>Если Помеченный <> Спр.ТекущийЭлемент() Тогда
>>ДляЗамены = Спр.ТекущийЭлемент();
>>КонецЕсли;

Толко не Спр.НайтиПоРеквизиту(Контрагент.РНН), а так

Если Спр.ВыбратьЭлементыПоРеквизиту("РНН", Контрагент.РНН) = 1 Тогда
Пока Спр.ПолучитьЭлемент() = 1 Цикл
Если Спр.ПометкаУдаления() = 1 Тогда
Продолжить;
Иначе
ДляЗамены = Спр.ТекущийЭлемент();
Прервать;
КонецЕсли;
КонецЦикла;
Иначе
Сообщить("Что-нидудь сообщаем :smoke: ")
Продолжить; // Переходим к другому документу
КонецЕсли;

Ну естественно проверяем на то, что у нас ДляЗамены - не пустой, что мы нашли нужного контрагента...
  • 0


Количество пользователей, читающих эту тему: 1

пользователей: 0, неизвестных прохожих: 1, скрытых пользователей: 0

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

© 2011-2022 vse.kz. При любом использовании материалов Форума ссылка на vse.kz обязательна.