Если в регистре сведений задвоились строки, что с ними можно сделать?

1. user1194102 10.03.20 16:54 Сейчас в теме
Строки в регистре создаются не сами, а через другие объекты документы или обработки. Причем две полностью одинаковые строки по принципу работы регистров не могут быть созданы с одинаковыми измерениями. Но в УПП измерения километровые, если например одно из измерений это ссылка на разные документы. Каким образом понять в чем отличие в двойных строках (измерениях) и какую из них нужно удалить. И можно ли удалять? Как определить какая из них рабочая, какая нет? Разработка ведется разными программистами и в разное время и понять причинно следственную связь бывает трудно. Как можно поступить в данной ситуации более универсально? Пометить на удаление каждую попеременно и посмотреть какая из них будет работать или так может не получиться в рабочей базе? Как бы не порушить что нибудь? Или просить у администратора развернуть архив и на копии проверить/потыкать?
Найденные решения
2. RustamZz 10.03.20 17:02 Сейчас в теме
(1) Пробовать все на копии, обязательно. Если в РС записи делает документ, то трогать эти записи нельзя. Есть служебные РС в них можно менять/удалять записи обдумано. Записи в РС нельзя пометить на удаление они сразу удаляются.
user1194102; alex-l19041; +2 Ответить
28. user1194102 11.03.20 16:40 Сейчас в теме
Вот нашелся добрый человек и написал код, как изменить запись в регистре и удалить, это я.
Процедура МенеджерЗаписиВРегистрНажатие(Элемент)
	
	НаборПлан=РегистрыСведений.Поооооооооооооо.СоздатьНаборЗаписей();
	НаборПлан.Отбор.Заооооооооо.Установить(Зооооооооо);
	Если ЗначениеЗаполнено(Маоооо) Тогда
		НаборПлан.Отбор.Мооооо.Установить(Мооооо);
	КонецЕсли;

	Если Ноооооо>0 Тогда
		НаборПлан.Отбор.НомерВОчереди.Установить(Нооооооо);
	КонецЕсли;
	НаборПлан.Прочитать();
	
	Для каждого ЗаписьНабора Из НаборПлан Цикл
		
		Запись=РегистрыСведений.Поооооооооооо.СоздатьМенеджерЗаписи();
		ЗаполнитьЗначенияСвойств(Запись,ЗаписьНабора);
		Если СнятьАктивность Тогда
			Запись.Активность=Ложь;
		КонецЕсли;
		Если Нооооооо>0 Тогда
			Запись.Ноооооооооо=Ноооооо;
		КонецЕсли;
		Запись.Записать();
		
	КонецЦикла;
		НаборПлан.Очистить();
	 	НаборПлан.Записать();
		
КонецПроцедуры   
Показать

код рабочий, проверено.
finist7490; +1 1 Ответить
Остальные ответы
Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
2. RustamZz 10.03.20 17:02 Сейчас в теме
(1) Пробовать все на копии, обязательно. Если в РС записи делает документ, то трогать эти записи нельзя. Есть служебные РС в них можно менять/удалять записи обдумано. Записи в РС нельзя пометить на удаление они сразу удаляются.
user1194102; alex-l19041; +2 Ответить
11. user1194102 10.03.20 22:30 Сейчас в теме
(2) Спасибо Рустам за помощь! Да пометить на удаление нельзя, но можно сделать не активными, это в ручную можно сделать? Регистр заполняется из обработки планирования, видимо попали разные измерения. У двух одинаковых строк могут быть разные ключи записи? (правда не очень пока понимаю, что такое ключи записи регистров)
6. alex-l19041 8 10.03.20 18:55 Сейчас в теме
(1)
измерения километровые
- это в каком смысле???
7. user1194102 10.03.20 22:18 Сейчас в теме
(6)Смотрю иногда курсы Павла Белоусова по платформе, там говорится, что измерение бывает одно например номенклатура и период (регистратор) и для детализации возможно еще какое-то измерение, а тут в регистрах в упп порядка 10 измерений, причем регистратор например ЗаказНаПроизводство, у которого своих[ реквизитов около 30 и ТЧ около 5. Ресурсов тоже около 5 и более и еще реквизитов более 30. Как в таком случае определить в чем отличие в двух "одинаковых" строках регистра, которые "задвоились", они же не могут задвоиться по определению.
14. AlexO 135 11.03.20 11:55 Сейчас в теме
(1)
Если в регистре сведений задвоились строки

Но в УПП измерения километровые, если например одно из измерений это ссылка на разные документы.
так они задвоились или нет?
Каким образом понять в чем отличие в двойных строках (измерениях)
Напишите обработку по сравнению строк, если вручную затрудняетесь.
А что вообще не устраивает? РС типовой? Пишут типовые документы? Тогда не делайте ничего, если проблем нет.
3. VmvLer 10.03.20 17:05 Сейчас в теме
Первое - привести в порядок мысли и получить ответ хотя бы на один из поставленных вопросов.

Пока ваши задачи похожи на взбесившиеся приборы самолета, который попал в аномальную зону.
Я предлагаю делегировать миссию решения ваших задач Рен-Тв. Пишите туда.
8. user1194102 10.03.20 22:18 Сейчас в теме
(3)Плохое решение, не конструктивное, не годится
4. TonyaKhomich 5 10.03.20 17:22 Сейчас в теме
Вряд ли Вам кто-то ответит на эти вопросы. Но если пишут несколько программистов, возможно есть какое-то техническое задание, где написано, что документы должны делать движения по этому регистру. Наверняка это техническое задание писал аналитик, у него и спросить, верно ли делаются движения. Если не верно, то понять какой документ делает не верно движение и кто писал этот код, и попросить исправить код и перепровести документы по этому регистру.
А вообще в коде желательно всегда писать комментарии, зачем этот код написан, кем этот код написан и когда.
5. VmvLer 10.03.20 17:31 Сейчас в теме
(4) закирпичить и поставить пароль чтобы не было стыдно!
9. user1194102 10.03.20 22:20 Сейчас в теме
(4)в том то и дело не кого спросить, кто в командировке, кто в отпуске, вот решил к специалистам обратиться.
И кстати мне на вопрос уже ответили во (2) ответе, возможно пока этого достаточно для решения задачи.
10. user1194102 10.03.20 22:23 Сейчас в теме
Может можно как-то снять Активность в одной строке регистра? (если например допустить, что одна строка лишняя)
12. user1194102 11.03.20 09:05 Сейчас в теме
Или лучше все изменения в регистре делать менеджером регистра например из внешней обработки, нашел вот такой пример кода.
//Выберем всех регистраторов регистра
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ
        | УчетНоменклатуры.Регистратор
        |ИЗ
        | РегистрНакопления.УчетНоменклатуры КАК УчетНоменклатуры";
    Результат = Запрос.Выполнить();
    Выборка = Результат.Выбрать();
    //Обойдем регистраторов
    Пока Выборка.Следующий() Цикл
        Сообщить("Изменение записей по регистратору: " + Выборка.Регистратор);
        //Для каждого регистратора выполним изменение набора записей
        НаборЗаписей = РегистрыНакопления.УчетНоменклатуры.СоздатьНаборЗаписей(); 
        НаборЗаписей.Отбор.Регистратор.Значение = Выборка.Регистратор;
        НаборЗаписей.Прочитать();
        Для каждого Запись Из НаборЗаписей Цикл
            Запись.Реквизит1 = "Тест";
        КонецЦикла;
        НаборЗаписей.Записать();
    КонецЦикла;  
Показать

Для регистра сведений эта методика/способ тоже подойдет?

Мне в набор наверно нужно будет добавить еще одну строку
НаборЗаписей.Отбор.Активный = Истина;
13. AlexO 135 11.03.20 11:52 Сейчас в теме
(12)
Или лучше все изменения в регистре делать менеджером регистра
Какие "все изменения регистра"?
Вы удалить программно можете только через Менеджер, и никак более.
user1194102; +1 Ответить
15. user1194102 11.03.20 12:02 Сейчас в теме
(13) ну да наверно лучше менеджером, хотя вот пример с сайта 1С можно без всякого менеджера видимо
...
НаборЗаписей = РегистрыНакопления.УчетНоменклатуры.СоздатьНаборЗаписей(); 
        НаборЗаписей.Отбор.Регистратор.Значение = Выборка.Регистратор;
        НаборЗаписей.Прочитать();
        Для каждого Запись Из НаборЗаписей Цикл
            Запись.Реквизит1 = "Тест";
        КонецЦикла;
        НаборЗаписей.Записать();
...
Показать
16. AlexO 135 11.03.20 12:53 Сейчас в теме
(15)
хотя вот пример с сайта 1С можно без всякого менеджера видимо
В смысле, без менеджера?! А кто тут, по-вашему, менеджер тогда? Или где он тут отсутствует?
18. user1194102 11.03.20 14:26 Сейчас в теме
(16)
А кто тут, по-вашему, менеджер тогда?

вот это менеджер
...
Запись=РегистрыСведений.Поооооооооооооооо.СоздатьМенеджерЗаписи();
		ЗаполнитьЗначенияСвойств(Запись,ЗаписьНабора);
		Если СнятьАктивность Тогда
			Запись.Активность=Ложь;
		КонецЕсли;
		Если НомерВОчередиДляЗамены>0 Тогда
			Запись.Номер=НомерЗамены;
		КонецЕсли;
		Запись.Записать();
		...
Показать

уже часть обработки написал по замене все работает, осталось еще дописать по удалению через менеджер тоже, так надежнее
21. AlexO 135 11.03.20 14:40 Сейчас в теме
(18)
вот это менеджер
Ну, поздравляю вас, вы познакомились с 1С-тупизмом в терминологии.
"СоздатьМенеджерЗаписи()" - изменяет ОДНУ, и только одну запись. И то в независимых РС.
"СоздатьНаборЗаписей()" - тот же менеджер, только для набора из более чем одной записи. И применяется везде, где более одной записи. А также - строго во всех подчиненных РС, без разницы сколько в нем записей.
А все отчего? А от отсутствия понимания, что такое "ООП", и острого нежелания "видеть" его слабенькие отблески в своей поделке, отчего и избегают даже говорить об ООП, не говоря уже - внедрить его в 1С наконец полностью и к всеобщему удовлетворению (ну, за исключением ортодоксальных 1С-ников, им вообще ничего не светит).
17. AlexO 135 11.03.20 12:56 Сейчас в теме
(15)
(13) А что мне мешает зайти форму списка регистра и удалить любую запись, кнопка удаления там есть
Ну так, а кнопка удаления как работает? С помощью силы джедая?)
19. user1194102 11.03.20 14:30 Сейчас в теме
(17) вот даже писать не хочется, по этой теме только один человек написал по честному (2) без подъездов (ебoв). Остальные просто поиздевались. И так во всех темах, 10% нормальных ответов, остальное все вода, причем грязная. Что это зависть или отсутствие ума не буду судить, могу только пожалеть.
20. RustamZz 11.03.20 14:33 Сейчас в теме
(19) Так это же известный тролль этого форума. У него цель из любой темы где отметился срач устроить.
22. AlexO 135 11.03.20 14:43 Сейчас в теме
(20)если ты известный тролль - так и пиши, не скрывайся под третьим лицом.
А то неясно выражаешься.
23. AlexO 135 11.03.20 14:51 Сейчас в теме
(19)
вот даже писать не хочется, по этой теме только один человек написал по честному (2)
Давай разберем, что тебе тут твой "т-ль"? - да нет, просто студент-неуч, написал:
Пробовать все на копии, обязательно. Если в РС записи делает документ, то трогать эти записи нельзя. Есть служебные РС в них можно менять/удалять записи обдумано. Записи в РС нельзя пометить на удаление они сразу удаляются.
"Если в РС записи делает документ, то трогать эти записи нельзя." - в 1с БОЛЬШИНСТВО регистров- подчиненные. Ты вопрос задавал про что - как задвоение убрать в регистре, или так, погулять пришел?
Есть служебные РС в них можно менять/удалять записи обдумано
К служебным регистрам нет доступа на запись/изменение ни у тебя, ни у твоего студента. Их вообще в конфигурации нет. Все остальные регистры - рабочие, и в любом записи нужно удалять обдуманно. Или не лезьть туда со студентом.
"Записи в РС нельзя пометить на удаление они сразу удаляются" - введи поле-ресурс "ПометкаНаУдаление", и будет тебе пометка на удаление. Да, у 1С не предусмотрено это визуально или в виде служебного поля, как в остальных объектах - 1С считает, что тут "сразу голая таблица", без ссылок и прочего "объективизма", поэтому можно и удалять сразу.
Единственно, что верно - "Пробовать все на копии", но это, видимо, заучил. Троечка.
24. user1194102 11.03.20 15:15 Сейчас в теме
(23)
просто студент-неуч
Ты брат ошибся по крупному, ну все держись. Я правда ответчика (2) немного перепутал с другим своим знакомым тоже Рустам, но это не важно.
25. user1194102 11.03.20 15:18 Сейчас в теме
(23) Ну подскажите тогда как можно и нужно правильно удалять записи из регистра? Код в студию.
26. RustamZz 11.03.20 15:45 Сейчас в теме
(25) Не надейся. Не было такого и не будет. :)
27. user1194102 11.03.20 16:02 Сейчас в теме
(26) Чего не было и чего не будет? Спорим что будет? уже 5% нормальных ответов с помощью.
28. user1194102 11.03.20 16:40 Сейчас в теме
Вот нашелся добрый человек и написал код, как изменить запись в регистре и удалить, это я.
Процедура МенеджерЗаписиВРегистрНажатие(Элемент)
	
	НаборПлан=РегистрыСведений.Поооооооооооооо.СоздатьНаборЗаписей();
	НаборПлан.Отбор.Заооооооооо.Установить(Зооооооооо);
	Если ЗначениеЗаполнено(Маоооо) Тогда
		НаборПлан.Отбор.Мооооо.Установить(Мооооо);
	КонецЕсли;

	Если Ноооооо>0 Тогда
		НаборПлан.Отбор.НомерВОчереди.Установить(Нооооооо);
	КонецЕсли;
	НаборПлан.Прочитать();
	
	Для каждого ЗаписьНабора Из НаборПлан Цикл
		
		Запись=РегистрыСведений.Поооооооооооо.СоздатьМенеджерЗаписи();
		ЗаполнитьЗначенияСвойств(Запись,ЗаписьНабора);
		Если СнятьАктивность Тогда
			Запись.Активность=Ложь;
		КонецЕсли;
		Если Нооооооо>0 Тогда
			Запись.Ноооооооооо=Ноооооо;
		КонецЕсли;
		Запись.Записать();
		
	КонецЦикла;
		НаборПлан.Очистить();
	 	НаборПлан.Записать();
		
КонецПроцедуры   
Показать

код рабочий, проверено.
finist7490; +1 1 Ответить
29. user774630 11.03.20 16:55 Сейчас в теме
(28)
Поооооооооооооо

Что это за "Поооооооооооооо", "Нооооооо" и прочее в коде?
30. AlexO 135 11.03.20 17:23 Сейчас в теме
(29)
Что это за "Поооооооооооооо", "Нооооооо" и прочее в коде?
Это он весь регистр тренируется очищать по "вааааау!".
31. AlexO 135 11.03.20 17:25 Сейчас в теме
(28)ага, так всегда и пиши. Еще дружи с неучами - больше неучей будет, быстрее накроетесь.
32. user1194102 11.03.20 18:58 Сейчас в теме
(31) этот пользователь, которого вы назвали неучем, а вернее оскорбили, руководит проектами, подозреваю как раз такими как вы). А Пооо и прочее в коде это сокрытие информации, суть видна. Все тему можно закрыть, спасибо всем за косвенную помощь.
33. karpik666 3774 11.03.20 19:13 Сейчас в теме
(28) ужасная реализация поставленной задачи.
(32) руководители проектов тоже бывают разные, но благо нормальному руководителю проектов и не нужно знать программирование в 1С и учить кого-то писать код.
34. user1194102 11.03.20 21:40 Сейчас в теме
(33) вас то кто в тему позвал, все уже закрыто, опоздали. Легче всего написать и облить, а доказательства где, только голословные заявления, честно неприятно даже читать (карпик, даже не карп).
35. karpik666 3774 11.03.20 22:19 Сейчас в теме
(34) я смотрю грубить вы научились, и даже переходите на личности, хотя здесь был прокомментирован именно код-пример. Видать вы "крутой" программист, но только среди своих одноклассников.
1. Вы написали в общедоступном форуме, а не в своем личном бложике, так что где хочу, там и пишу.
2. Чтобы называть код гавном не нужно доказательств, если всем итак ясно. Можно убедиться по ссылке https://www.govnokod.ru/1c , как раз найдете там такие же примеры творчества, как и у вас.
3. Лучше бы потраченное время уделили книжкам по программированию, почитали, что такое менеджер записи и набор записей регистра, а не огрызались. По факту думать не хотим, ждем чтобы разжевали и в рот положили.
4. Есть стандарты разработки 1С https://its.1c.ru/db/v8std , и для кода, что в (28) другого названия и не подобрать, кроме как говнокод.
37. user1194102 12.03.20 10:01 Сейчас в теме
(35) я не крутой, я начинающий, но хамство тоже не люблю и не вижу смысла в голословных утверждениях и уж тем более когда тема закрыта автором. Извините если обидел не хотел, исправлюсь.
38. user1194102 12.03.20 10:03 Сейчас в теме
(35)
прокомментирован именно код-пример
где был код прокомментирован и в чем, что все плохо, так это я и сам знаю что не очень хорошо, хорошо приходит с опытом, а опыта пока нет. И какой смысл в таких комментариях?
39. user1194102 12.03.20 10:05 Сейчас в теме
(35)
Вы написали в общедоступном форуме
это форум, где задаются вопросы, причем конкретные, если вам хочется поговорить не о чем , пишите в личку, я пойму что вам нужно выговориться, понимаю время сейчас нервное, нужно скинуть негативную энергетику
40. user1194102 12.03.20 10:07 Сейчас в теме
(35)
если всем итак ясно
не существует такого понятия ВСЕМ, всем это значит никому, пройдите просто мимо темы, которая не подходит вашему настроению, гениями не рождаются он проходят путь от новичка до специалиста и дальше
41. user1194102 12.03.20 10:08 Сейчас в теме
(35)
потраченное время уделили книжкам по программированию,
книги и курсы я читаю и смотрю постоянно, но дома, на работе на это нет времени
42. user1194102 12.03.20 10:10 Сейчас в теме
(35)
Есть стандарты разработки
вам нужно было всего навсего предложить эту ссылку, а не устраивать спектакль, хотя еще не смотрел, что это за ссылка, вряд ли вы способны дать что то конкретное и полезное.
36. FIGOR 12.03.20 09:58 Сейчас в теме
Может нужно для начала определиться по измерениям, которые способствовали "задвоению".

То-есть запросом на группировку выбрать Количество( Измерение), по которому есть сомнения и если таковая строка найдется в виде 2 штук, то уже предметно с этим документом - измерением ли или еще чем и разбираться.
user1194102; +1 Ответить
43. user1194102 12.03.20 10:19 Сейчас в теме
(36) Да я так и сделал, только записи регистра создаются не документом, а обработкой планирования и действительно попали двойные измерения. Сами измерения испрвлять уже поздно , очень много данных завязано на этот регистр. А вот предупредить такие задвоения конечно имеет смысл на будущее.Пока решил проблему задвоения строк регистра следующим образом, делаю отбор в регистре по определенным параметра и создаю Менеджером новую строку в регистре с правильными параметрами. А все строки в наборе отбора удаляю. И второй режим сделал в обработке, если одна из строк правильная, а вторая неврная копия, то удаляю только эту строку. Аналогичным способом, тоже делаю отбор именно по этой строке и удаляю эту строку в наборе. Другого решения пока не нашел. В чем код плохой не понял. И при чем тут код? Хотелось бы знать мнение специалистов, правильный ли выбран алгоритм решения проблемы?
44. FIGOR 12.03.20 10:45 Сейчас в теме
(43) Можно проверять записи регистра перед записью в регистр в модуле набора записей регистра.

Чисто как пример из рабочего варианта

Процедура ПередЗаписью(Отказ, Замещение)

	Набор = ЭтотОбъект;
		
	для каждого ряд из Набор Цикл
                
                   ПредыдущееЗначенияЗаписи = ПолучитьПредыдущееЗначениеЗаписи(ряд);
                             
                   ЕсльДубликаты= ПроверитьДуликаты(ряд);
                 
                   Если ряд.ДатаОбработки = ПредыдущееЗначенияЗаписи.ДатаОбработки тогда
                          ряд.ДатаОбработки = ТекущаяДата();
                  Конецесли;

                  Если ЕстьДубликаты тогда
                      ВызватьИсключение  "Дубикат записи в измерениях для " + ряд.Документ ;
                  Конецесли;  
          
        конеццикла;

КонецПроцедуры;
 
функция ПолучитьПредыдущееЗначениеЗаписи(ряд)

Запрос = Новый Запрос;
// тут запрос к данному регистру с параметрами из ряд
//......


КонецФункции;

функция ПроверитьДубликаты(ряд)

Запрос = Новый Запрос;
// тут запрос к данному регистру  на проверку дубликатов измерений с параметрами из ряд
//......

КонецФункции;
                 
Показать
user1194102; +1 Ответить
45. user1194102 12.03.20 11:01 Сейчас в теме
Спасибо большое, посмотрю когда будет время)
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот