• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Дубликаты контрагентов, замена ссылок на контрагентов в документах

  • Автор темы Истребитель
  • Дата начала
И

Истребитель

Добрый день!

Стоит задача поправить в базе контрагентов. По различным причинам (импорт из 7.7, обмен данными с другой базой 8.1) в базе образовались дубликаты одного и того-же контрагента.
Нужно сделать так, чтобы остался только один.

При этом если скажем на обоих контрагентов есть счёт или реализация товаров и услуг - нужно поменять там ссылки на того, который остаётся.

Я планирую написать обработку, которая позволит выбирать из пар дубликатов того, который остаётся, а для того, который удаляется, сделает поиск по базе, и для каждой найденной ссылки заменит её на того, который остаётся, сохранит, а затем когда всё обойдёт, проведёт всё, что заменялось и было проводимым.

Вопрос первый - правильно ли я мыслю? Так ли стоит делать? Быть может есть ошибка, или есть какой-то известный способ сделать проще, или готовая обработка?

Вопрос второй - как получить список всего, что ссылается на объект? Как например при удалении обработка показывает - какие есть ссылки, как мне сделать такой запрос? Конкретно - мне нужны все ссылки на контрагента, но ведь удалялка 1С для любых объектов показывает это, интересно, как это делается?

Спасибо!
 
K

KiR

логика у тебя верная, ИМХО. тебе поможет
НайтиСсылки(<?>,);
Синтаксис:
НайтиСсылки(<Объекты>,<Ссылки>)
Назначение:
Находит ссылки на объекты, переданные в списке значений.
Параметры:
<Объекты> - конкретное значение искомого объекта или значение типа ''СписокЗначений'', в котором данной процедуре передаются объекты, по которым надо найти ссылки.
<Ссылки> - идентификатор объекта типа ''ТаблицаЗначений'', в который данная процедура помещает найденные ссылки на объекты. Таблица значений состоит из 3 колонок: 1. объект на который ссылаются; 2. объект, который содержит ссылку; 3. комментарий к ссылке.
 
И

Истребитель

Спасибо, видимо это то, что нужно.

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


Добавлено: Эмм, функции "НайтиСсылки" нет.
У меня восьмерка, а не семерка...
 
И

Истребитель

Разобрался, называется немного иначе и работает немного иначе но всё равно работает :)

Как и подозревал, есть дубликаты, участвующие аж во вводе начальных остатков. Вопрос - нормально ли их трясти? (т.е. заменять контрагента в документе ввод начальных остатков и перепроводить документ, по сути, задним числом)?
 
U

unknown181538

Вы ребята молодцы, что готовы это писать! Но не надо)
Гуглите "Поиск и замена значений". Можно на ИТС.
И перепроводить не надо ничего.
 
И

Истребитель

Благодарю! Именно это, вероятно, и искал. Но как же не перепроводить?

Допустим есть документ - продажа товара. Он делает проводку - вешает "долг" на покупателя и в плюс пишет сумму проданного.
Если я сменю покупателя - как же я могу не перепровести документ, ведь пока я не перепровёл, проводка останется на того, предыдущего контрагента?
Или я не прав?
 
P

puh14

Гуглите "Поиск и замена значений". Можно на ИТС.
Пасиб - мне тож пригодится. Хотя лично мне дописывать однозначно придется - у меня часть данных хранится в списочке свернутом в строку в элементе справочника.
 
U

unknown181538

Благодарю! Именно это, вероятно, и искал. Но как же не перепроводить?

Допустим есть документ - продажа товара. Он делает проводку - вешает "долг" на покупателя и в плюс пишет сумму проданного.
Если я сменю покупателя - как же я могу не перепровести документ, ведь пока я не перепровёл, проводка останется на того, предыдущего контрагента?
Или я не прав?
Замена ссылок происходит в том, числе и наборах записей.
Но если, например, аванс висел на одном, реализация на другом, то зачет аванса надо перерассчитывать... ну вы поняли.
 
Д

Дайнеко

Перепроведение - это смерть.
Обработка "Поиск и замена значений" может заменить Клиента в регистрах и проводках.
 
K

KiR

а обработка меняет только контрагента или же договор тоже? в смысле можно такой обработкой воспользоваться если мне нужно не контрагента поменять а один договор на другой?
 
И

Истребитель

То есть если у меня есть контрагент, на него документы - счет на оплату, реализация товаров и услуг, договор, счет в банке, и их записи в регистрах, то эта обработка заменит всё везде одновременно, счет перейдет на другого контрагента, договор тоже, и записи в регистрах. Как она это сделает в обход функций "при записи" и без отмены проведения документа, разве в 1С не автоматически документ при записи отменяет проведение?
 
U

unknown181538

. Как она это сделает в обход функций "при записи" и без отмены проведения документа, разве в 1С не автоматически документ при записи отменяет проведение?
Через набор записей. Документ может иметь проводки и без проведения вообще.
 
K

KiR

а от какого числа на диске ИТС есть эта обработка? или ее на сайте можно скачать?
 
K

KiR

ой, и в правду есть. вот только стоит пользоваться виндовым поиском вместо итс!
Дайнеко, пасиба агромное! :)
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!