Реклама на этом месте
Форум 1С
Форум 1С
Программистам. Бухгалтерам. Администраторам. Пользователям
Задай вопрос - получи решение проблемы. Без троллинга и флуда.
21 Июл 2017, 15:43
МультиВход
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?
 
collapse

Автор Тема: Автозаполение реквизитов формы из справочника  (Прочитано 905 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн sas_255

  • *
  • Сообщений: 10
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2015-12-15
  • Сайт: 
  • Профессия: Ученик 1С
Добрый день.
У меня 1С 8.2
Ситуация такая. Есть справочник контрагентов. И документ ЗаявкаНаОбслуживание.
По факту нужно, чтобы при выборе в документе Контрагента (он там идентифицируется по номеру мобильного телефона)в поля адрес, имя и т.д вписывались данные из справочника.
Пытался сделать функцию на сервере, но при передаче данных происходит ошибка.
Сейчас пытаюсь сделать с помощью процедуры на сервере, но ни как не могу понять как заполнить форму на сервере и отправить ее на клиент. Может я конечно иду не тем путем, но опыта у меня нет. Подскажите, кто знает.


&НаКлиенте
Процедура КонтрагентПриИзменении(Элемент)

ЗаполнитьРеквизиы(Объект.Контрагент);
ОбновитьОтображениеДанных();

КонецПроцедуры

&НаСервере
Процедура ЗаполнитьРеквизиы(Наименование)

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Контрагенты.Имя,
| Контрагенты.Район,
| Контрагенты.Улица,
| Контрагенты.Дом,
| Контрагенты.Квартира,
| Контрагенты.Подъезд,
| Контрагенты.Этаж
|ИЗ
| Справочник.Контрагенты КАК Контрагенты
|ГДЕ
| Контрагенты.Наименование = &Наименование";

Запрос.УстановитьПараметр("Наименование", Наименование);

Результат = Запрос.Выполнить();

Выборка = Результат.Выбрать();


//Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
// // Вставить обработку выборки ВыборкаДетальныеЗаписи
//КонецЦикла;
//
КонецПроцедуры


Оффлайн vitasw

  • *****
  • Сообщений: 2546
  • РЕПУТАЦИЯ: 309
  • КПД: 12%
  • Регистрация: 2015-02-10
  • Сайт: 
  • Профессия: Программист 1С
 |    Справочник.Контрагенты КАК Контрагенты
        |ГДЕ
        |    Контрагенты.Ссылка = &Наименование";
...
 Выборка = Результат.Выбрать();
Выборка.Следующий();
    Объект.Улица=Выборка.Улица;
...

Оффлайн sas_255

  • *
  • Сообщений: 10
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2015-12-15
  • Сайт: 
  • Профессия: Ученик 1С
|    Справочник.Контрагенты КАК Контрагенты
        |ГДЕ
        |    Контрагенты.Ссылка = &Наименование";
...
 Выборка = Результат.Выбрать();
Выборка.Следующий();
    Объект.Улица=Выборка.Улица;
...

Спасибо. Все заработало.
Только если не сложно поясните почему нужно писать именно Контрагенты.Ссылка и Выборка.Следующий();
Для понимания ситуации. Просто оно то заработало, за что вам большое спасибо. Но я не понял почему заработало. Прокомментируйте если не сложно.

Оффлайн vitasw

  • *****
  • Сообщений: 2546
  • РЕПУТАЦИЯ: 309
  • КПД: 12%
  • Регистрация: 2015-02-10
  • Сайт: 
  • Профессия: Программист 1С
Контрагент - это элемент справочника, т.е. имеет ссылочный тип. Контрагент.Наименование - это строка.
В вашем условие "Где" было обязательное условие: где строка = СправочникСсылка - естественно получали пустой набор.
РезультатЗапроса.Выбрать() - грубо говоря, команда вида "Подготовиться к разгрузке вагона". А "Следующий()" - это собственно сам процесс перемещения мешка из вагона на склад. Команда и процесс = разные вещи.

Оффлайн AIFrame

  • ***
  • Сообщений: 148
  • РЕПУТАЦИЯ: 10
  • КПД: 7%
  • Регистрация: 2015-07-22
  • Сайт: 
  • Профессия: Ученик 1С
sas_255,
Контрагент.Наименование - тип данных Строка.
ЗаполнитьРеквизиы(Объект.Контрагент); - Объект.Контрагент - это ссылка на объект. Нельзя сравнивать строку и объект.
При сравнении по наименованию параметр запроса должен выглядеть так:
Запрос.УстановитьПараметр("Наименование", Справочники.Контрагенты.НайтиПоИмени(Наименование));

Про Выборка.Следующий() - это перебор данных массива. Если массив результата выборки всегда возвращает одно значение - эта команда позволит получить строку выборки и работать с ней. Аналогично:
Пока Выборка.Следующий() Цикл
 Имя = Выборка.Имя;
 Район = Выборка.Район;
// и т.д.
 ДанныеФормыУлица = Улица;
// и т.п.
КонецЦикла;

Оффлайн cska-fanat-kz

  • 1С:Специалист
  • Глобальный модератор
  • *****
  • Сообщений: 5745
  • РЕПУТАЦИЯ: 1097
  • КПД: 19%
  • Красная армия всех сильней!
  • Регистрация: 2010-11-06
    • Skype: cska-fanat-kz81
  • Сайт: cska-fanat-kz.ucoz.kz
  • Профессия: Разработчик 1С
Про Выборка.Следующий() - это перебор данных массива

этот метод...
Цитировать
Получает следующую запись из результата запроса. Для обхода результата запроса нужно после получения выборки вызвать данный метод для позиционирования на первый элемент и далее вызывать до тех пор, пока не будет возвращено значение Ложь.

Если массив результата выборки всегда возвращает одно значение - эта команда позволит получить строку выборки и работать с ней

это ваще на каком языке? :kmtu:
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

Оффлайн AIFrame

  • ***
  • Сообщений: 148
  • РЕПУТАЦИЯ: 10
  • КПД: 7%
  • Регистрация: 2015-07-22
  • Сайт: 
  • Профессия: Ученик 1С
Про Выборка.Следующий() - это перебор данных массива

этот метод...
Цитировать
Получает следующую запись из результата запроса. Для обхода результата запроса нужно после получения выборки вызвать данный метод для позиционирования на первый элемент и далее вызывать до тех пор, пока не будет возвращено значение Ложь.

Именно это и сказал. Я надеюсь, спорить о том, что результат запроса - суть массив данных, мы не будем.
Если массив результата выборки всегда возвращает одно значение - эта команда позволит получить строку выборки и работать с ней

это ваще на каком языке? :kmtu:
Ищем запросом контрагента. Мы предполагаем, что по заданной в запросе логике, значение всегда будет одно (Аналогично ВЫБРАТЬ 1). Поэтому мы уверены, что Выборка.Следующий() вернет нам нужный объект, а повторный вызов этой функции вернет Ложь, т.к. это будет конец массива. Поэтому же запускать Цикл будет лишним. Так понятнее?

Оффлайн vitasw

  • *****
  • Сообщений: 2546
  • РЕПУТАЦИЯ: 309
  • КПД: 12%
  • Регистрация: 2015-02-10
  • Сайт: 
  • Профессия: Программист 1С
cska-fanat-kz, только не размазывайте его тонким слоем. Что с него взять, молодо-зелено.

Оффлайн cska-fanat-kz

  • 1С:Специалист
  • Глобальный модератор
  • *****
  • Сообщений: 5745
  • РЕПУТАЦИЯ: 1097
  • КПД: 19%
  • Красная армия всех сильней!
  • Регистрация: 2010-11-06
    • Skype: cska-fanat-kz81
  • Сайт: cska-fanat-kz.ucoz.kz
  • Профессия: Разработчик 1С
cska-fanat-kz, только не размазывайте его тонким слоем. Что с него взять, молодо-зелено.

никогда не увлекался "давлением авторитетом, опытом и т.п."
ибо не считаю себя таким уж гуру.

Именно это и сказал. Я надеюсь, спорить о том, что результат запроса - суть массив данных, мы не будем.

вы правы, но я всего лишь хотел обратить внимание, что помимо "массива данных" в 1С существует и непосредственно "Массив" как один из видов коллекций значений. поэтому у ТС'а могло возникнуть разночтение.
причем если мы говорим именно о выборке из результата запроса, то это достаточно своеобразный массив данных - несколько отличается от вышеупомянутого классического массива. например нельзя обойти циклом "Для каждого" и обходить записи можно только последовательно либо через поиск, но никак не по индексу.

Ищем запросом контрагента. Мы предполагаем, что по заданной в запросе логике, значение всегда будет одно (Аналогично ВЫБРАТЬ 1). Поэтому мы уверены, что Выборка.Следующий() вернет нам нужный объект, а повторный вызов этой функции вернет Ложь, т.к. это будет конец массива. Поэтому же запускать Цикл будет лишним. Так понятнее?

всему свое время )
пусть приучается обходить выборку циклом, даже возвращающую в итоге всего одну строку.
так даже конструктор запроса с обработкой результата делает ;)
в целом не страшно что цикл выполнится один раз.
а до конструкций типа
    Выборка = РезультатЗапроса.Выбрать();
    Выборка.Следующий();
    ...
сам потом дойдет )
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.


Теги:
 

Как вызвать "Анализ субконто" из справочника "Контрагенты"

Автор EnigManРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 1
Просмотров: 6051
Последний ответ 06 Фев 2012, 10:46
от cska-fanat-kz
Заполнение поля табличной части документа из табличной части справочника.

Автор Kurt_WagnerРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 3
Просмотров: 3758
Последний ответ 06 Апр 2015, 20:08
от Kurt_Wagner
Заполнение табличной части документа реквизитами табличной части справочника

Автор kaf_infoРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 1
Просмотров: 283
Последний ответ 10 Май 2017, 20:44
от ilnur75
Как сделать, чтобы поле в документе имело тип "ссылка на поле справочника"?

Автор друганРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 5
Просмотров: 1669
Последний ответ 05 Мар 2017, 14:36
от Igor100500
Редактирование формы "Настройки пользователя".

Автор t955938Раздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 2
Просмотров: 4446
Последний ответ 03 Авг 2011, 11:45
от t955938

* Живое общение

Не устроил ответ?

Зарегистрируйся и задай свой вопрос. Живое общение приносит результат намного быстрее.


Зарегистрироваться

* Реклама

* Поиск

* Последние задачи на разработку (фриланс)

* Реклама

* Последние вакансии

* Топ 10 авторов за месяц

oleg-x
122 Сообщений
alex0402
106 Сообщений
Геннадий ОбьГЭС Геннадий ОбьГЭС
73 Сообщений
ilyay ilyay
50 Сообщений
Golickoff Golickoff
49 Сообщений
AIFrame
47 Сообщений
ab30ru
38 Сообщений
wise wise
36 Сообщений
Амал
32 Сообщений
Dethmontt Dethmontt
25 Сообщений

* Кто онлайн

  • Точка Гостей: 792
  • Точка Скрытых: 0
  • Точка Пользователей: 15
  • Точка Сейчас на форуме:

* Облако тэгов

* Форум 1С с мобильного

* Инструменты

* Дополнительно

Поиск

 
SimplePortal 2.3.5 © 2008-2012, SimplePortal