Проверка контрагента по номеру телефона перед записью

29.06.18

Задачи пользователя - Адаптация типовых решений

Проверка контрагента перед записью на номер телефона, чтобы не было дублей.

Код писался на УНФ 1.6.12.4. Но подойдет и для любой другой. Чуток подправить под конфу, если надо и все.

1) Создать серверный общий модуль.

2) Создать подписку на событие объекта справочника. Указать в ней следующую процедуру:

Ну и весь код общего модуля. При желании можно добавить еще какую-нибудь проверку.

#Область ПодпискиНаСобытия

Процедура aspect_ПередЗаписьюСправочникаПередЗаписью(Источник, Отказ) Экспорт
	
	Если ТипЗнч(Источник) = Тип("СправочникОбъект.Контрагенты") Тогда
		Если НЕ ЗначениеЗаполнено(Источник.Ссылка) Тогда
			Если ЗначениеЗаполнено(Источник.НомерТелефона) Тогда
				// необходимо произвести поиск по этому номеру телефона, предварительно обработав его
				// т.к. номер может быть введен по-разному
				ТаблицаСообщений = Новый ТаблицаЗначений;
				ТаблицаСообщений.Колонки.Добавить("ТекстСообщения", Новый ОписаниеТипов("Строка"));
				ТаблицаСообщений.Колонки.Добавить("Контрагент"    , Новый ОписаниеТипов("СправочникСсылка.Контрагенты"));
				НомерТелефонаДляПроверки = ПреобразоватьНомерТелефонаДляПроверки(Источник.НомерТелефона);
				Запрос = Новый Запрос;
				Запрос.Текст =
				"ВЫБРАТЬ
				|	Контрагенты.Ссылка КАК Ссылка,
				|	Контрагенты.НомерТелефона КАК НомерТелефона
				|ИЗ
				|	Справочник.Контрагенты КАК Контрагенты
				|ГДЕ
				|	НЕ Контрагенты.ЭтоГруппа
				|	И НЕ Контрагенты.НомерТелефона = &ПустойНомерТелефона";
				Запрос.УстановитьПараметр("ПустойНомерТелефона", "");
				РезультатЗапроса = Запрос.Выполнить();
				Если НЕ РезультатЗапроса.Пустой() Тогда
					ВыборкаЗапроса = РезультатЗапроса.Выбрать();
					Пока ВыборкаЗапроса.Следующий() Цикл
						ТекущийНомерТелефона = ПреобразоватьНомерТелефонаДляПроверки(ВыборкаЗапроса.НомерТелефона);
						Для i=1 По СтрЧислоСтрок(ТекущийНомерТелефона) Цикл
							Для m=1 По СтрЧислоСтрок(НомерТелефонаДляПроверки) Цикл
								Если СтрПолучитьСтроку(ТекущийНомерТелефона, i) = СтрПолучитьСтроку(НомерТелефонаДляПроверки, m) Тогда
									ТекстСообщения = "Номер телефона: '" + СтрПолучитьСтроку(НомерТелефонаДляПроверки, m) + "' уже привязан к контрагенту: '" + Строка(ВыборкаЗапроса.Ссылка) + "'";
									НоваяСтрока = ТаблицаСообщений.Добавить();
									НоваяСтрока.ТекстСообщения = ТекстСообщения;
									НоваяСтрока.Контрагент     = ВыборкаЗапроса.Ссылка;
									Отказ = Истина;
								КонецЕсли;
							КонецЦикла;
						КонецЦикла;
					КонецЦикла;
				КонецЕсли;
				
				Если ТаблицаСообщений.Количество() > 0 Тогда
					ТекстСообщения = "Открыть контрагента можно двойным нажатием ЛКМ";
					ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения);
					Для каждого СтрокаСообщения Из ТаблицаСообщений Цикл
						ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СтрокаСообщения.ТекстСообщения, СтрокаСообщения.Контрагент, , , );
					КонецЦикла;
				КонецЕсли;
			КонецЕсли;
		КонецЕсли;
	КонецЕсли;
	
КонецПроцедуры

#КонецОбласти

Функция ПреобразоватьНомерТелефонаДляПроверки(НомерТелефона)
	
	НомерТелефонаДляПроверки = НомерТелефона;
	
	НомерТелефонаДляПроверки = СтрЗаменить(НомерТелефонаДляПроверки, " ", "");
	НомерТелефонаДляПроверки = СтрЗаменить(НомерТелефонаДляПроверки, "+", "");
	НомерТелефонаДляПроверки = СтрЗаменить(НомерТелефонаДляПроверки, "(", "");
	НомерТелефонаДляПроверки = СтрЗаменить(НомерТелефонаДляПроверки, ")", "");
	НомерТелефонаДляПроверки = СтрЗаменить(НомерТелефонаДляПроверки, "-", "");
	НомерТелефонаДляПроверки = СтрЗаменить(НомерТелефонаДляПроверки, ",", Символы.ПС);
	
	Возврат НомерТелефонаДляПроверки;
	
КонецФункции

 

Вступайте в нашу телеграмм-группу Инфостарт

Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

См. также

Разработка Адаптация типовых решений Производство готовой продукции (работ, услуг) Розничная торговля 1С:Управление торговлей 10 Россия Платные (руб)

Доработка для 1С:Управление торговлей 10.3 (релиз 10.3.88.3) добавляет поддержку маркировки новых категорий товаров согласно постановлениям Правительства РФ 2025–2026 гг. Конфигурация УТ 10.3 снята с поддержки — новые маркируемые категории в типовую поставку больше не попадают. Доработка закрывает этот пробел: новые виды номенклатуры, обмен с ГИС МТ «Честный Знак». Поставляется в виде файла .cf

14640 руб.

23.04.2026    1564    12    13    

16

Адаптация типовых решений БСП (Библиотека стандартных подсистем) Кадровый учет ЭДО и ОФД 1C:Бухгалтерия 1С:Зарплата и кадры 7.7 1C:ERP 1С:ЗУП 1С:УТ 1С:ДО Платные (руб)

Наше расширение 1С Госключ обеспечивает интеграцию любой конфигурации 1С на базе БСП с мобильным приложением «Госключ», позволяя сотрудникам подписывать кадровые документы (КЭДО) и документы материальной ответственности (МОЛ, ПБ) усиленной электронной подписью прямо со смартфона. Решение автоматизирует формирование и отправку документов на подпись, отслеживает статусы подписания и хранит подписанные файлы непосредственно в базе 1С

25000 руб.

06.03.2026    1379    4    0    

3

Печатные формы Адаптация типовых решений Бухгалтер Пользователь 1С:Предприятие 8 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Платные (руб)

Расширение позволяет вывести в табличном документе факсимиле печати и подписей и/или вывести произвольную картинку из прикреплённых файлов организации для 1С УТ 11.5, КА 2.5, ERP 2.5, УНФ 3, Розница 3. Вывод факсимиле возможен в табличные документы УПД, УКД, Счёт-фактура, ТОРГ-12 и другие. Возможно настроить вывод для любых типовых макетов (Акт сверки, М-15, ТТН), для этого потребуется отредактировать макет и разместить на нём картинки с соответствующими именами, при выводе на печать в размещённые картинки будут выводиться факсимиле из прикреплённых рисунков. Редактирование осуществляется через типовой механизм в пользовательском интерфейсе.

6000 руб.

07.02.2023    13625    120    25    

76

Адаптация типовых решений 1С:Предприятие 8 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Платные (руб)

Расширение для вывода информации об остатках и ценах номенклатуры в форме списка и выбора номенклатуры. (УТ 11, КА 2, ERP). Позволяет получать информацию о ценах, остатках и доступности в разрезе складов и характеристик номенклатуры, информацию по документам резерва.

7930 руб.

16.10.2025    1547    2    0    

2

Логистика, склад и ТМЦ Адаптация типовых решений Пользователь 1С:Предприятие 8 1С:Управление нашей фирмой 1.6 1С:Управление нашей фирмой 3.0 Россия Управленческий учет Платные (руб)

Чтобы не допустить путаницы с обещаниями клиентам и для четкого контроля исполнения заказов мы используем резервирование товаров. Расширение для УНФ, чтобы автоматически отменять старые резервы и не мешалть эффективно продавать.

9150 руб.

02.08.2023    8441    26    5    

41

Адаптация типовых решений 1С 8.3 1С:Бухгалтерия 3.0 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Беларусь Россия Платные (руб)

Расширение "Дополнительные документы" предназначено для создания дополнительных документов различного назначения, как форм для внесения данных так и печатных форм в расширяемой конфигурации пользовательскими средствами, без работы в конфигураторе и внесения изменений в структуру данных. Тестировалось для "1С:БП", "1С:УНФ","1С:КА"

21859 руб.

29.12.2025    1592    1    8    

2
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. пользователь 15.05.18 05:49
Сообщение было скрыто модератором.
...
2. veyron21 138 16.05.18 17:46 Сейчас в теме
А чем связка ИНН/КПП не устраивает? Или в вашей базе много физиков?
6. pyrkin_vanya 504 29.06.18 20:11 Сейчас в теме
(2)В моей базе одни физики)))
3. dachnik 27 16.05.18 18:03 Сейчас в теме
Событием перед записью элемента справочника
Ссыль = Справочники.Контрагенты.НайтиПоРеквизиту("ТелНомер", Значение);
если ЗначениеЗаполнено(Ссыль) тогда Отказ=истина КонецЕсли;
Свойство, содержащее номер телефона должно быть индексируемым.
Если Номер телефона в ригистре контактнаяинформация, то ищем по номеру телефона в регистре, можно запросом, если находим, проверяем, не связан ли контакт с текущим объектом, если не связан Отказ=истина.
4. Trancer64 17.05.18 15:29 Сейчас в теме
Имхо, гораздо лучшим решением было бы выполнять указанные преобразования при записи телефонов в базу, тогда и искать потом можно обычным равенством.
5. ЧерныйКот 17.05.18 15:59 Сейчас в теме
Бред.
Во первых производить какие то преобразования номера перед поиском, во вторых оптимальность поиска под вопросом, и в третьих сам алгоритм косячный.

Вопрос к автору : А что будет с номерами вида "+7 911 111 11 11" и "8 911 111 11 11"?, "8 812 454 78 64 доб. 123" ? или с номером вида "8 911 456 76 56, звонить после 20-00, бухгалтер Нюра" ?

ЗЫ, сам реализовал такой механизм для УТ11, но одной подпиской и простенькой функцией тут не обойдешься.
Для отправки сообщения требуется регистрация/авторизация