Группа: Местный
Сообщений: 248
Из: Советский Союз
Спасибо сказали: 64 раз
Рейтинг: 0
Добрый день уважаемое сообщество. Никому не секрет, что новых контрагентов забивают все, кому не лень. Начиная с директора и заканчивая менеджерами. Бывает часто ситуация когда одного и того же клиента вбивают по 2-3 раза под разными именами, а также на эти имена делают движения... Разнообразные Отчеты в таких базах, мягко говоря, не имеют смысла. Вопрос состоит в том, чтобы свести эти 2-3 запи си в одну, и не нарушить при этом базу. Возможно кто-то сталкивался с этой проблемой, подскажите как Вы ее решили. У меня 1с7.7.
Короеды это не жуки. Это пользователи. Они едят кору головного мозга ...
Группа: Местный
Сообщений: 248
Из: Советский Союз
Спасибо сказали: 64 раз
Рейтинг: 0
Если при помощи обработки заставить в реквизите контрагент расходной накладной, поменять одного на другого и перепровести. Этим я не нарушу структуру данных?
Короеды это не жуки. Это пользователи. Они едят кору головного мозга ...
Группа: Основатель
Сообщений: 13958
Из: Киев
Спасибо сказали: 4524 раз
Рейтинг: 3647.7
Цитата
Если при помощи обработки заставить в реквизите контрагент расходной накладной, поменять одного на другого и перепровести. Этим я не нарушу структуру данных?
Причём здесь структура данных? Цифры могут "полезть". А вообще - берите копию и пробуйте.
Группа: Местный
Сообщений: 9564
Из: Kharkiv, UA
Спасибо сказали: 2536 раз
Рейтинг: 0
Цитата(Fynjy @ 07.09.11, 15:11)
repval.ert - решит все проблемы ... Или усугубит ...
Если в базе немного таких случаев, и это не затронет "товарную" часть, то решит, иначе усугубит. Корректировка долга более гуманный вариант, но в этом случае не удастся удалить не нужных контрагентов.
Личные бесплатные консультации не даю, для этого есть форум!
Я долго с этим боролся, пока где-то в инете не скачал доработку для семерки для контроля ввода повторных контрагентов. Встроил ее в свою конфу - стало значительно легче. Также на фирме приняли и административные меры: ввод новых контрагентов разрешили только юристам и администраторам 1С.
Добрый день уважаемое сообщество. Никому не секрет, что новых контрагентов забивают все, кому не лень. Начиная с директора и заканчивая менеджерами. Бывает часто ситуация когда одного и того же клиента вбивают по 2-3 раза под разными именами, а также на эти имена делают движения... Разнообразные Отчеты в таких базах, мягко говоря, не имеют смысла. Вопрос состоит в том, чтобы свести эти 2-3 запи си в одну, и не нарушить при этом базу. Возможно кто-то сталкивался с этой проблемой, подскажите как Вы ее решили. У меня 1с7.7.
Доп проверка на наличие по кодам ОКПО, ИНН и т.д.
Цитата(vadim007 @ 07.09.11, 15:51)
Также на фирме приняли и административные меры: ввод новых контрагентов разрешили только .... и администраторам 1С.
это круто....
Никогда не бойся делать то, что не умеешь, помни - Ноев ковчег был построен любителем, профессионалы построили Титаник. ЗиУП
Группа: Местный
Сообщений: 248
Из: Советский Союз
Спасибо сказали: 64 раз
Рейтинг: 0
Цитата(Vofka @ 07.09.11, 16:24)
А что там контролировать? Проверяем ИНН/ЕДРПОУ - вот и вся проверка.
Специфика нашей фирмы не позволяет заставлять клиентов давать свои ИН и плюс еще к тому что мы работаем с как правило не резидентами. У меня Идея проскочила, а что если делать клиентам контрольный вопрос? (Как зовут Вашего любимого папу? либо что-то в этом роде) а ответ и с ам вопрос вводить в форму... Ну а Всех кто вбивает инфу в 1с, строго настрого научить задавать клиенту правильные вопросы.
Короеды это не жуки. Это пользователи. Они едят кору головного мозга ...
Группа: Основатель
Сообщений: 13958
Из: Киев
Спасибо сказали: 4524 раз
Рейтинг: 3647.7
Цитата
У меня Идея проскочила, а что если делать клиентам контрольный вопрос? (Как зовут Вашего любимого папу? либо что-то в этом роде)
Т.е. ИНН вы потребовать не можете, а задавать "контрольные вопросы" можете? И вы думаете, что клиенты к этому нормально отнесутся? Мне кажется, что они помотают указательным пальцем у виска на вопрос "Имя домашнего животного?".
Цитата
Ну а Всех кто вбивает инфу в 1с, строго настрого научить задавать клиенту правильные вопросы.
Лучше их научить искать клиента в справочнике перед тем, как добавлять нового. Или же сделать ответственным за это 1 человека, тогда если будет каша в базе клиентов - нагибать будут его, соответственно в его интересах не дублировать записи.
Классная у вас Фирма! И Юристы есть и даже Администраторы 1С!!!11 А пару строк кода проверки дублей контрагентов написать некому Пичалька
Вот извлечение из глобального модуля для проверки ввода повторных контрагентов:
Перем ТаблКА Экспорт; Перем Хвосты;
Функция БезХвостов(Стр) Ст=СокрЛП(Стр); Для К=1 По Хвосты.РазмерСписка() Цикл Хвост=Хвосты.ПолучитьЗначение(К); П=Найти(Ст,Хвост); Если П>0 Тогда Ст=Лев(Ст,П-1)+Сред(Ст,П+СтрДлина(Хвост)); КонецЕсли; КонецЦикла; Возврат Ст; КонецФункции
Процедура ЗаменитьСимволы(Стр, Что, НаЧто) Пока Найти(Стр, Что) > 0 Цикл Стр = СтрЗаменить(Стр, Что, НаЧто); КонецЦикла; КонецПроцедуры
Функция Нормализация(Стр) Какашки="`~!@#$%^&*()_+|\/;:""№?{}[]-,"; // Уберем хвосты Ст=СокрЛП(БезХвостов(НРег(Стр))); // Уберем какашки Для Инд=1 По СтрДлина(Какашки) Цикл Какашка = Сред(Какашки, Инд, 1); ЗаменитьСимволы(Ст, Какашка, ""); КонецЦикла; // Оставим по одному пробелу между словами ЗаменитьСимволы(Ст, " ", " "); ЗаменитьСимволы(Ст, " .", "."); Возврат Ст; КонецФункции
Функция ПоСловам(Стр) Сп=СоздатьОбъект("СписокЗначений"); Слово=""; Для К=1 По СтрДлина(Стр) Цикл С=Сред(Стр,К,1); Если С=" " Тогда Сп.ДобавитьЗначение(Слово); Слово=""; Иначе Слово=Слово+С; КонецЕсли; КонецЦикла; Если Слово<>"" Тогда Сп.ДобавитьЗначение(Слово); КонецЕсли; Возврат Сп; КонецФункции //ПоСловам
Процедура глВнестиКонтрагента(Контр) Экспорт Назв=Нормализация(Контр.Наименование); Если Назв="" Тогда Возврат; КонецЕсли; П=0; Сп=ПоСловам(Назв); Если ТаблКА.НайтиЗначение(Контр,П,"Контрагент") = 1 Тогда ТаблКА.ПолучитьСтрокуПоНомеру(П); Сп.Выгрузить(ТаблКА.Список); Иначе ТаблКА.НоваяСтрока(); ТаблКА.Контрагент=Контр; ТаблКА.Список=Сп; КонецЕсли; ТаблКА.Краткое=Назв; КонецПроцедуры
Процедура ЗагрузитьКонтрагентов(Табл) Состояние("Загрузка справочника контрагентов..."); Контр= СоздатьОбъект("Справочник.Контрагенты"); Контр.ВыбратьЭлементы(); П=0; ПП=100; Пока Контр.ПолучитьЭлемент()=1 Цикл П=П+1; Если П>=ПП Тогда Состояние("Загрузка справочника контрагентов ("+Строка(ПП)+")..."); ПП=ПП+100; КонецЕсли; Если Контр.ЭтоГруппа()=1 Тогда Продолжить; КонецЕсли; Назв=Нормализация(Контр.Наименование); Если Назв="" Тогда Продолжить; КонецЕсли; Сп=ПоСловам(Назв); Табл.НоваяСтрока(); Табл.Контрагент=Контр.ТекущийЭлемент(); Табл.Краткое=Назв; Табл.Список=Сп; КонецЦикла; КонецПроцедуры
Функция СравнитьСписки(Наим1,Сп1,Наим2,Спп2,Т,Сп) Т.УдалитьСтроки(); Сп2=Спп2; Наим11=Наим1; Наим22=Наим2; Если ПустоеЗначение(Сп1)=0 Тогда Для К=1 По Сп1.РазмерСписка() Цикл Слово1=Сп1.ПолучитьЗначение(К); Слово=""; Дл=0; П=0; Дл1=СтрДлина(Слово1); Если ПустоеЗначение(Сп2)=0 Тогда Для Л=1 По Сп2.РазмерСписка() Цикл Слово2=Сп2.ПолучитьЗначение(Л); Дл2=СтрДлина(Слово2); Если СтрДлина(Слово1)<СтрДлина(Слово2) Тогда Если Лев(Слово2,Дл1)=Слово1 Тогда Если Дл<Дл1 Тогда Дл=Дл1; П=Л; Слово=Слово2; КонецЕсли; КонецЕсли; Иначе Если Лев(Слово1,Дл2)=Слово2 Тогда Если Дл<Дл2 Тогда Дл=Дл2; Слово=Слово2; П=Л; КонецЕсли; КонецЕсли; КонецЕсли; КонецЦикла; КонецЕсли; Если Дл>0 Тогда Т.НоваяСтрока(); Т.Слово1=Слово1; Т.Слово2=Слово; Т.Длина=Дл; КонецЕсли; КонецЦикла; КонецЕсли; Т.Сортировать("-Длина,+Слово1"); Сп.УдалитьВсе(); БылСлово=""; Т.ВыбратьСтроки(); Пока Т.ПолучитьСтроку()=1 Цикл Если Т.Слово1=БылСлово Тогда Продолжить; КонецЕсли; Если Сп.НайтиЗначение(Т.Слово2)>0 Тогда Продолжить; КонецЕсли; БылСлово=Т.Слово1; П=Найти(Наим11,Т.Слово1); Если П>0 Тогда Наим11=Лев(Наим11,П-1)+Сред(Наим11,П+СтрДлина(Т.Слово1)); КонецЕсли; П=Найти(Наим22,Т.Слово2); Если П>0 Тогда Наим22=Лев(Наим22,П-1)+Сред(Наим22,П+СтрДлина(Т.Слово2)); КонецЕсли; КонецЦикла; Кол=0; Для К=1 По СтрДлина(Наим11) Цикл С=Сред(Наим11,К,1); П=Найти(Наим22,С); Если П>0 Тогда Кол=Кол+1; Наим22=Лев(Наим22,П-1)+Сред(Наим22,П+1); КонецЕсли; КонецЦикла; Возврат Макс(СтрДлина(Наим11)-Кол,СтрДлина(Наим22)); КонецФункции
Функция глПоискПовторенийВСправочнике(Наим, Эл="") Экспорт Если ПустоеЗначение(ТаблКА)=1 Тогда ТаблКА.НоваяКолонка("Контрагент","Справочник.Контрагенты"); ТаблКА.НоваяКолонка("Краткое","Строка"); ТаблКА.НоваяКолонка("Список"); ЗагрузитьКонтрагентов(ТаблКА); КонецЕсли; Гран=0.005; //! Граница чуствительности числа одинаковых символов СпКА=СоздатьОбъект("СписокЗначений"); Назв=Нормализация(Наим); Сп1=ПоСловам(Назв); К=0; КК=50; ТТТ=СоздатьОбъект("ТаблицаЗначений"); ТТТ.НоваяКолонка("Слово1","Строка"); ТТТ.НоваяКолонка("Слово2","Строка"); ТТТ.НоваяКолонка("Длина","Число"); Спп=СоздатьОбъект("СписокЗначений"); Шаг=Окр(ТаблКА.КоличествоСтрок()/30,0,1); КК=Шаг; ТаблКА.ВыбратьСтроки(); Пока ТаблКА.ПолучитьСтроку()=1 Цикл К=К+1; Если К>=КК Тогда Состояние("Поиск "+КК+" из "+ТаблКА.КоличествоСтрок()+" ..."); КК=КК+Шаг; КонецЕсли; Если Эл<>"" Тогда Если Эл=ТаблКА.Контрагент Тогда Продолжить; КонецЕсли; КонецЕсли; Сп2=ТаблКА.Список; Р=СравнитьСписки(Назв,Сп1,ТаблКА.Краткое,Сп2,ТТТ,Спп); Если Р=0 Тогда В=1; Иначе М=Мин(СтрДлина(Назв),СтрДлина(ТаблКА.Краткое)); В=?(?(М=0,100,Р/М)<=Гран,1,0); КонецЕсли; Если В=1 Тогда СпКА.ДобавитьЗначение(ТаблКА.Контрагент); КонецЕсли; КонецЦикла; Если СпКА.РазмерСписка()>0 Тогда Сп=СоздатьОбъект("СписокЗначений"); Сп.ДобавитьЗначение(СпКА,"Список"); Сп.ДобавитьЗначение(Наим,"Наименование"); ОткрытьФормуМодально("Обработка.ПовторенияКонтрагентов",Сп); Если Число(Сп.Получить("Отменено"))=1 Тогда Возврат 0; КонецЕсли; КонецЕсли; Возврат 1; КонецФункции //ПоискПовторенийВСправочнике ... // В конце гл.модуля ТаблКА= СоздатьОбъект("ТаблицаЗначений"); Хвосты=СоздатьОбъект("СписокЗначений"); Хвосты.ДобавитьЗначение("ооо"); Хвосты.ДобавитьЗначение("аозт"); Хвосты.ДобавитьЗначение("гоао"); Хвосты.ДобавитьЗначение("чп"); Хвосты.ДобавитьЗначение("ч.п."); Хвосты.ДобавитьЗначение("муп"); Хвосты.ДобавитьЗначение("атп"); Хвосты.ДобавитьЗначение("оао"); Хвосты.ДобавитьЗначение("имнс"); Хвосты.ДобавитьЗначение("гни"); Хвосты.ДобавитьЗначение("пни"); Хвосты.ДобавитьЗначение("зао"); Хвосты.ДобавитьЗначение("ч/п"); Хвосты.ДобавитьЗначение("ч.п"); Хвосты.ДобавитьЗначение("предприниматель"); Хвосты.ДобавитьЗначение("предпринимат"); Хвосты.ДобавитьЗначение("предприн"); Хвосты.ДобавитьЗначение("предпр"); Хвосты.ДобавитьЗначение("предп");
В модуле формы справочника Контрагенты, в процедуре ПриЗаписи(), добавляем фрагмент:
Эл=?(Выбран()=1,ТекущийЭлемент(),""); Если глПоискПовторенийВСправочнике(Наименование, Эл)=0 Тогда СтатусВозврата(0); Возврат; КонецЕсли; Записать(); глВнестиКонтрагента(ТекущийЭлемент());
Вопрос состоит в том, чтобы свести эти 2-3 запи си в одну, и не нарушить при этом базу. Возможно кто-то сталкивался с этой проблемой, подскажите как Вы ее решили. У меня 1с7.7.
Вам самим нужно решить сначала две проблемы:
1. По какому признаку Вы будете определять одинаковых (от этого зависит метод их сворачивания) 2. По какому признаку Вы будете определять уникальность (от этого зависит метод её проверки)
Определитесь - тогда уже и совет не понадобится.
ИНН/номер налогового свидетельства/ЕДРПОУ они обязаны предоставить - это открытый и обязательный для расчетов реквизит, иначе как Вы с ними дела ведете? Для нерезидентов, цитирую, "вместо кода ЕГРПОУ указывается идентификационный код из торгового, судебного или банковского реестра страны, где официально зарегистрированный иностранный субъект хозяйственной деятельности"
Если стоит вопрос заменить ссылки нескольких контрагентов на 1 во всей базе, а после удалить этих лишних, когда ссылки перебиты на нужного, делал когдато такое, с ТМЦ, даже доки перепроводить ненужно, никаких движений незатронет. Недостаток - нужно по каждому контрагенту запускать эту обработку, тоесть выбираете несколько элементов в список, и выбираете одного, которого оставить. Делал для бухгалтерии, думаю можно и в тисе. Ну и конечно нужно решить вопрос, чтоб в дальнейшем такого непроисходило. Выше есть варианты. Если интересует, обращайтесь в стол заказов.
Группа: Местный
Сообщений: 248
Из: Советский Союз
Спасибо сказали: 64 раз
Рейтинг: 0
Спасибо огромное всем кто откликнулся. Проблему решил. Нописал обработку, котораая всех задвоеных удаляет и оставляет одного уникального. его-то и присваевает всем документам. А так же поднял вопрос перед руководством: Новых клиентов вводит только один человек. С него и спрос.
Короеды это не жуки. Это пользователи. Они едят кору головного мозга ...
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!