Группа: Пользователи
Сообщений: 231
Из: Київ
Спасибо сказали: 5 раз
Рейтинг: 0
Здравствуйте. У меня есть созданный АктПриема, в котором есть реквизиты , куда вносятся данные клиента - фамилия, телефон и пр. Поле Клиент имеет тип СправочникКонтрагенты. Для того, чтобы выписать АктПриема новому клиенту, вначале вызывается справочник и там все вписывается. Затем из справочника уже выбирается вновь созданный клиент и заполняется сама форма документа. Это не всегда удобно. Вопрос следующий. Можно ли заполнить соответствующие поля документа, а при проведении документа автоматически создать новый элемент справочника Контрагенты? То есть, занести в справочник данные о новом клиенте? И можно ли при этом сохранить возможность вносить в документ данные клиента из справочника? Спасибо!
Группа: Пользователи
Сообщений: 460
Из: Казахстан
Спасибо сказали: 45 раз
Рейтинг: 45
ZUBR @ Сегодня, 5:12
,
Цитата(ZUBR @ 03.11.19, 5:12)
а при проведении документа автоматически создать новый элемент справочника Контрагенты
Доброе утро ! Можно.Код такой примерно :
Клиент=СоздатьОбъект("Спрвочник.Контрагенты"); Клиент.Новый(); //создается новая запись в справочнике контрагентов Клиент.Наименование=Наименование //ф.и.о из документа накладная Клиент.Телефон=Телефон //№ телефона из документа накладная Клиент.Записать(); //записываем новую запись в справочник Контрагенты.
Можно еще продумать проверку на поиск уже существующего клиента в справочнике Контрагентов. Т.е. новую запись добавлять , только если такого клиента нет в справочнике.
Клиент=СоздатьОбъект("Спрвочник.Контрагенты"); Поиск=Клиент.НайтиПоНаименованию(НовыйКлиент,,1); //поиск на точное соответствие Если Поиск=0 тогда Клиент.Новый(); //создается новая запись в справочнике контрагентов Клиент.Наименование=Наименование //ф.и.о из документа накладная Клиент.Телефон=Телефон //№ телефона из документа накладная Клиент.Записать(); //записываем новую запись в справочник Контрагенты. КонецЕсли;
Только необходимо учесть, что любая ошибка или неправильное правописание приведет к созданию нового клиента в дополнение к уже существующему. Получите двойников со всеми вытекающими обстоятельствами.
Группа: Пользователи
Сообщений: 231
Из: Київ
Спасибо сказали: 5 раз
Рейтинг: 0
Pepe @ Сегодня, 11:42
, Для минимизации таких случаев можно осуществлять поиск по номеру телефона. Попутный вопрос - а можно ли сделать так, чтобы по окончании ввода, скажем, телефона, автоматически включался поиск и при нахождении клиента в справочнике автоматически подставлял в поля документа его данные, а при ненахождении создавалась бы новая запись в справочнике? Есть в языке подходящий оператор? Или нужно создавать отдельную кнопку с нужной процедурой?
ZUBR @ Сегодня, 12:40
, да, еще, чуть не забыл. Как прописать поиск по номеру телефона? ПоНаименованию - это имя, фамилия. Имена могут быть одинаковые, фамилии тоже, да и не каждый хочет сообщать фамилию. А номер телефона почти уникален .
Группа: Пользователи
Сообщений: 460
Из: Казахстан
Спасибо сказали: 45 раз
Рейтинг: 45
ZUBR @ Сегодня, 15:52
,
НайтиПоРеквизиту(<?>,,); Синтаксис: НайтиПоРеквизиту(<ИмяРеквизита>,<Значение>,<ФлагГлобальногоПоиска>) Назначение: Найти элемент справочника по значению реквизита. Возвращает: 1 - если действие выполнено; 0 - если действие не выполнено (элемент не найден). Параметры: <ИмяРеквизита> - строка с наименованием реквизита; <Значение> - значение реквизита для поиска; <ФлагГлобальногоПоиска> - флаг поиска: 0 - поиск выполняется в пределах подчинения справочника, 1 - поиск выполняется по всему справочнику. Замечание: Метод можно использовать только для реквизитов с установленным признаком ''Сортировка''. Метод можно использовать только для объектов, созданных функцией СоздатьОбъект.
Если Поиск=0 Тогда //Добавляется запись в справочник Контрагенты КонецЕсли;
Цитата(ZUBR @ 03.11.19, 15:52)
Попутный вопрос - а можно ли сделать так, чтобы по окончании ввода, скажем, телефона, автоматически включался поиск и при нахождении клиента в справочнике автоматически подставлял в поля документа его данные, а при ненахождении создавалась бы новая запись в справочнике?
Можно.На свойствах поля ввода номера телефона (на форме) найдите вкладку Дополнительно.В поле "Формула" пропишите имя процедуры (имя придумайте сами).и в модуле пропишите заготовку процедуры с таким же именем.Подставте в текст процедуры вышеуказанные примеры поиска.
Если Поиск=0 Тогда //Добавляется запись в справочник Контрагенты КонецЕсли;
Спасибо, в принципе, все получается. В приведенном Вами коде есть одна техническая неточность - первый параметр должен быть взят в кавычки. То есть, строка будет выглядеть
Это я уточнил для тех, кто, как и я, пока мелко плавает в этом деле. Спасибо.
Как я уже написал ранее, все получилось. Или почти все. Есть еще одна небольшая, но надоедливая проблемка. У меня в акте приема реквизит Клиент имеет тип Справочник.Контрагенты. С кнопкой для выбора клиента из справочника. Можно ли, сохраняя возможность выбора клиента из справочника, получить возможность заполнять непосредственно поле реквизита Клиент на форме? Если я меняю тип на строку, тогда теряется возможность выбирать клиентов из справочника. И появляются еще кое-какие проблемы, в которых я еще не разобрался. Например, в ранее созданных актах приема вместо имен клиентов появляются двузначные числа. А если я оставляю тип реквизита Клиент - Справочник.Контрагенты, тогда я не могу вводить непосредственно имя клиента в поле на форме... Если эта проблема решаема, подскажите, пожалуйста. Не хочется вводить дополнительное поле ввода. Спасибо.
Не хочется вводить дополнительное поле ввода. Спасибо.
В 1С7 нема так як в 1С8 "Составной тип реквизита". Еякщо дуже хочеться і вибір з справочника и ручне введення, то в всеодно прийдеться вводити два реквізита. Можна зробити ще так: ці два реквізита розмістити один над одним (один реквізит закриває інший) і по умові керувати видимістю потрібного реквізиту. Саму умову реалізувати у вигляді флажка, або переключателя (по замовчуванню поставити значення те яке частіше використовується).
volodya1122 @ Сегодня, 9:47
, тогда уж условие видимости лучше менять после поиска: нашелся клиент по номеру - подставили значение в реквизит и сделали видимым, если нет - видимое текстовое поле. И тоже прописать при открытии
Группа: Пользователи
Сообщений: 231
Из: Київ
Спасибо сказали: 5 раз
Рейтинг: 0
Возник еще один вопрос. При автоматической записи в Справочник.Контрагенты все клиенты заносятся в корневой каталог. Но там есть папка Покупатели. Как сделать, чтобы клиенты заносились туда?Я пробовал прописать СоздатьОбъект("Справочник.Контрагенты.Покупатели") , но это не работает. Для меня сейчас это не критично, но не хочется потом переносить и сортировать по папкам. Спасибо!
Группа: Пользователи
Сообщений: 231
Из: Київ
Спасибо сказали: 5 раз
Рейтинг: 0
Макс1С @ 20.11.19, 22:44
, не получилось. Я не очень понял, куда тулить родителя. записывает в корень. Привожу часть кода, понимаю, что не правильный, совсем неправильный. Исправьте, пожалуйста. Для того, чтобы сделать, надо понимать. Мне не понятно. Спасибо.
Если Кл=0 Тогда Мистер = СоздатьОбъект("Справочник.Контрагенты"); Родитель=СоздатьОбъект("Справочник.Контрагенты"); Родитель.НайтиПоНаименованию("Покупатели");
Мистер.Новый(); Мистер.Наименование=Клиент; Мистер.ПолнНаименование=Клиент; //ф.и.о из документа накладная Мистер.Телефоны=Телефон; //№ телефона из документа накладная Мистер.ПочтовыйАдрес=Адрес; Мистер.ВидКонтрагента = Перечисление.ВидыКонтрагентов.ЧастноеЛицо; Мистер.ВалютаВзаиморасчетов = Константа.БазоваяВалюта; Мистер.ВалютаКредита = Константа.БазоваяВалюта; Мистер.ВалютаКредитаПоставщика = Константа.БазоваяВалюта; Если ПустаяСтрока(Телефон)=0 Тогда Мистер.Записать(); //записываем новую запись в справочник Контрагенты. Контрагент = Родитель.ТекущийЭлемент(); КонецЕсли; КонецЕсли;
Группа: Пользователи
Сообщений: 460
Из: Казахстан
Спасибо сказали: 45 раз
Рейтинг: 45
Мистер = СоздатьОбъект("Справочник.Контрагенты"); Мистер.НайтиПоНаименованию("Покупатели"); Род=Мистер.ТекущийЭлемент(); //получаем ссылку на запись Группы
Мистер.Новый(); Мистер.Родитель=Род; //при записи в справочник сопоставляем со ссылкой на Группу
Не понял , что за условие выполняется для переменной Кл ?
Группа: Пользователи
Сообщений: 231
Из: Київ
Спасибо сказали: 5 раз
Рейтинг: 0
andrew76 @ Сегодня, 6:01
, andrew76 @ Сегодня, 6:01
, у меня в модуле формы введена переменная Кл. При введении в акт приема телефона клиента осуществляется поиск его по справочнику Контрагенты. Если такой телефон уже есть, тогда в документ автоматически подставляется клиент из справочника и переменной Кл присваивается 1. Если же такого телефона в справочнике нет, тогда переменной Кл присваивается 0 и при проведении документа в справочник заносятся данные нового клиента из документа АктПриема. После чего Кл присваивается 1. Переменная введена для того, чтобы не записывать в справочник одинаковых клиентов каждый раз при проведении документа.
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!