Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Неназначенных незавершенных заказов: 4
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )

> Как создать новый элемент справочника из документа? 1с 7.7 конф 7.7.003          
ZUBR Подменю пользователя
сообщение 03.11.19, 2:12
Сообщение #1

Завсегдатай
****
Группа: Пользователи
Сообщений: 144
Из: Київ
Спасибо сказали: 4 раз
Рейтинг: 3

Здравствуйте. У меня есть созданный АктПриема, в котором есть реквизиты , куда вносятся данные клиента - фамилия, телефон и пр. Поле Клиент имеет тип СправочникКонтрагенты. Для того, чтобы выписать АктПриема новому клиенту, вначале вызывается справочник и там все вписывается. Затем из справочника уже выбирается вновь созданный клиент и заполняется сама форма документа. Это не всегда удобно. Вопрос следующий. Можно ли заполнить соответствующие поля документа, а при проведении документа автоматически создать новый элемент справочника Контрагенты? То есть, занести в справочник данные о новом клиенте? И можно ли при этом сохранить возможность вносить в документ данные клиента из справочника? Спасибо!

andrew76 Подменю пользователя
сообщение 03.11.19, 4:47
Сообщение #2

Оратор
*****
Группа: Пользователи
Сообщений: 299
Из: Узбекистан
Спасибо сказали: 18 раз
Рейтинг: 18

ZUBR @ Сегодня, 5:12 * ,
Цитата(ZUBR @ 03.11.19, 5:12) *
а при проведении документа автоматически создать новый элемент справочника Контрагенты


Доброе утро !
Можно.Код такой примерно :

Клиент=СоздатьОбъект("Спрвочник.Контрагенты");
Клиент.Новый();  //создается новая запись в справочнике контрагентов
Клиент.Наименование=Наименование //ф.и.о из документа накладная
Клиент.Телефон=Телефон //№ телефона из документа накладная
Клиент.Записать();   //записываем новую запись в справочник Контрагенты.


Можно еще продумать проверку на поиск уже существующего клиента в справочнике Контрагентов.
Т.е. новую запись добавлять , только если такого клиента нет в справочнике.

Клиент=СоздатьОбъект("Спрвочник.Контрагенты");
Поиск=Клиент.НайтиПоНаименованию(НовыйКлиент,,1);   //поиск на точное соответствие
Если Поиск=0 тогда
       Клиент.Новый();  //создается новая запись в справочнике контрагентов
       Клиент.Наименование=Наименование //ф.и.о из документа накладная
       Клиент.Телефон=Телефон //№ телефона из документа накладная
       Клиент.Записать();   //записываем новую запись в справочник Контрагенты.
КонецЕсли;

Спасибо сказали: ZUBR,

Pepe Подменю пользователя
сообщение 03.11.19, 11:42
Сообщение #3

Почти крутой
Иконка группы
Группа: Местный
Сообщений: 1396
Из: Ужгород
Спасибо сказали: 747 раз
Рейтинг: 217.7

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

Спасибо сказали: ZUBR,

ZUBR Подменю пользователя
сообщение 03.11.19, 12:52
Сообщение #4

Завсегдатай
****
Группа: Пользователи
Сообщений: 144
Из: Київ
Спасибо сказали: 4 раз
Рейтинг: 3

Pepe @ Сегодня, 11:42 * ,
Для минимизации таких случаев можно осуществлять поиск по номеру телефона. Попутный вопрос - а можно ли сделать так, чтобы по окончании ввода, скажем, телефона, автоматически включался поиск и при нахождении клиента в справочнике автоматически подставлял в поля документа его данные, а при ненахождении создавалась бы новая запись в справочнике? Есть в языке подходящий оператор? Или нужно создавать отдельную кнопку с нужной процедурой?


ZUBR @ Сегодня, 12:40 * , да, еще, чуть не забыл. Как прописать поиск по номеру телефона? ПоНаименованию - это имя, фамилия. Имена могут быть одинаковые, фамилии тоже, да и не каждый хочет сообщать фамилию. А номер телефона почти уникален .

andrew76 Подменю пользователя
сообщение 03.11.19, 13:45
Сообщение #5

Оратор
*****
Группа: Пользователи
Сообщений: 299
Из: Узбекистан
Спасибо сказали: 18 раз
Рейтинг: 18

ZUBR @ Сегодня, 15:52 * ,


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


Клиент=СоздатьОбъект("Спрвочник.Контрагенты");
Поиск=Клиент.НайтиПоПоРеквизиту(Телефон,НомерТелефонаИЗАктаПриема,1);

Если Поиск=0 Тогда
       //Добавляется запись в справочник Контрагенты
КонецЕсли;


Цитата(ZUBR @ 03.11.19, 15:52) *
Попутный вопрос - а можно ли сделать так, чтобы по окончании ввода, скажем, телефона, автоматически включался поиск и при нахождении клиента в справочнике автоматически подставлял в поля документа его данные, а при ненахождении создавалась бы новая запись в справочнике?


Можно.На свойствах поля ввода номера телефона (на форме) найдите вкладку Дополнительно.В поле "Формула" пропишите имя процедуры (имя придумайте сами).и в модуле пропишите заготовку процедуры с таким же именем.Подставте в текст процедуры вышеуказанные примеры поиска.

Спасибо сказали: ZUBR,

Pepe Подменю пользователя
сообщение 03.11.19, 15:10
Сообщение #6

Почти крутой
Иконка группы
Группа: Местный
Сообщений: 1396
Из: Ужгород
Спасибо сказали: 747 раз
Рейтинг: 217.7

Цитата(ZUBR @ 03.11.19, 13:52) *
А номер телефона почти уникален

Необходим шаблон для ввода. Можно автоматически подставлять "+38" или вводить без кода страны с кодом оператора. Тогда будет уникальность.

Спасибо сказали: ZUBR,

andrew76 Подменю пользователя
сообщение 03.11.19, 16:21
Сообщение #7

Оратор
*****
Группа: Пользователи
Сообщений: 299
Из: Узбекистан
Спасибо сказали: 18 раз
Рейтинг: 18

andrew76 @ Сегодня, 16:45 * ,

Вдогонку : На вкладке Формула указывайте имя процедуры со скобками.Например: ПроверкаКонтрагентов()

Спасибо сказали: ZUBR,

ZUBR Подменю пользователя
сообщение 03.11.19, 17:11
Сообщение #8

Завсегдатай
****
Группа: Пользователи
Сообщений: 144
Из: Київ
Спасибо сказали: 4 раз
Рейтинг: 3

Господа, спасибо за ответы. Они очень ценны для меня. Теперь мне нужно над этим поработать. О результатах отпишусь. Спасибо, что вы есть! 32000000.gif icon_beer17.gif

ZUBR Подменю пользователя
сообщение 03.11.19, 21:36
Сообщение #9

Завсегдатай
****
Группа: Пользователи
Сообщений: 144
Из: Київ
Спасибо сказали: 4 раз
Рейтинг: 3

Цитата(Pepe @ 03.11.19, 15:10) *
Клиент=СоздатьОбъект("Спрвочник.Контрагенты");
Поиск=Клиент.НайтиПоПоРеквизиту(Телефон,НомерТелефонаИЗАктаПриема,1);

Если Поиск=0 Тогда
       //Добавляется запись в справочник Контрагенты
КонецЕсли;

Спасибо, в принципе, все получается. В приведенном Вами коде есть одна техническая неточность - первый параметр должен быть взят в кавычки. То есть, строка будет выглядеть
Поиск=Клиент.НайтиПоРеквизиту("Телефон",НомерТелефонаИЗАктаПриема,1);

Это я уточнил для тех, кто, как и я, пока мелко плавает в этом деле. Спасибо.


Как я уже написал ранее, все получилось. Или почти все. Есть еще одна небольшая, но надоедливая проблемка. У меня в акте приема реквизит Клиент имеет тип Справочник.Контрагенты. С кнопкой для выбора клиента из справочника. Можно ли, сохраняя возможность выбора клиента из справочника, получить возможность заполнять непосредственно поле реквизита Клиент на форме? Если я меняю тип на строку, тогда теряется возможность выбирать клиентов из справочника. И появляются еще кое-какие проблемы, в которых я еще не разобрался. Например, в ранее созданных актах приема вместо имен клиентов появляются двузначные числа.
А если я оставляю тип реквизита Клиент - Справочник.Контрагенты, тогда я не могу вводить непосредственно имя клиента в поле на форме... Если эта проблема решаема, подскажите, пожалуйста. Не хочется вводить дополнительное поле ввода. Спасибо.

andrew76 Подменю пользователя
сообщение 04.11.19, 2:52
Сообщение #10

Оратор
*****
Группа: Пользователи
Сообщений: 299
Из: Узбекистан
Спасибо сказали: 18 раз
Рейтинг: 18

ZUBR @ Сегодня, 0:36 * ,
Цитата(ZUBR @ 04.11.19, 0:36) *
Не хочется вводить дополнительное поле ввода

Скорее всего без этого не обойтись.Дополнительное текстовое поле -Ф.И.О. для поиска клиента в справочнике.
Поиск по телефону или по фамилии будет ?

volodya1122 Подменю пользователя
сообщение 04.11.19, 9:47
Сообщение #11

Завсегдатай
Иконка группы
Группа: Местный
Сообщений: 219
Из: Тернопіль
Спасибо сказали: 76 раз
Рейтинг: 77.8

Цитата(andrew76 @ 04.11.19, 2:52) *
Не хочется вводить дополнительное поле ввода. Спасибо.


В 1С7 нема так як в 1С8 "Составной тип реквизита". Еякщо дуже хочеться і вибір з справочника и ручне введення, то в всеодно прийдеться вводити два реквізита. Можна зробити ще так: ці два реквізита розмістити один над одним (один реквізит закриває інший) і по умові керувати видимістю потрібного реквізиту. Саму умову реалізувати у вигляді флажка, або переключателя (по замовчуванню поставити значення те яке частіше використовується).

Спасибо сказали: ZUBR,

Макс1С Подменю пользователя
сообщение 04.11.19, 10:14
Сообщение #12

Говорящий
***
Группа: Пользователи
Сообщений: 78
Из: Днепр
Спасибо сказали: 24 раз
Рейтинг: 22

volodya1122 @ Сегодня, 9:47 * ,
тогда уж условие видимости лучше менять после поиска: нашелся клиент по номеру - подставили значение в реквизит и сделали видимым, если нет - видимое текстовое поле. И тоже прописать при открытии

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 18.11.19, 8:35
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!