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

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

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

Оффлайн sas_255

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


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

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

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

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

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

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

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

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


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

Смотрите бесплатно более 300 видеоуроков по работе в 1С:Бухгалтерия 8 и 1C:ЗУП 8 ред. 3.0

СМОТРЕТЬ >>


Оффлайн 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

  • ***
  • Сообщений: 101
  • РЕПУТАЦИЯ: 7
  • КПД: 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

  • ***
  • Сообщений: 101
  • РЕПУТАЦИЯ: 7
  • КПД: 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
Просмотров: 5866
Последний ответ 06 Фев 2012, 10:46
от cska-fanat-kz
Заполнение поля табличной части документа из табличной части справочника.

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

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

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

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

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

Ответов: 5
Просмотров: 1556
Последний ответ 05 Мар 2017, 14:36
от Igor100500
Работа с формой Справочника "Физ.Лица" в ЗУП 2.5

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

Ответов: 3
Просмотров: 3405
Последний ответ 15 Дек 2011, 00:04
от Vit1501

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

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

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


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

* Реклама

* Поиск

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

* Реклама

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

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

Геннадий ОбьГЭС Геннадий ОбьГЭС
96 Сообщений
Dethmontt Dethmontt
71 Сообщений
alex0402
63 Сообщений
MuI_I_Ika MuI_I_Ika
61 Сообщений
wise wise
50 Сообщений
ilyay ilyay
39 Сообщений
Сергей Федоров Сергей Федоров
36 Сообщений
ilnur75
21 Сообщений
BuhRust
21 Сообщений
magnifico61
20 Сообщений

* Кто онлайн

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

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

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

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

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

Поиск

 
SimplePortal 2.3.5 © 2008-2012, SimplePortal