Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
19 мар 2024, 09:44

Заполнение в табличную часть документа из справочника по определенному реквизиту

Автор witch_n, 18 авг 2016, 07:57

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

witch_n

В табличную часть документ Заполнениеданныхсрц, подбираю по реквизиту ЛицевойсчетСРЦ из справочника КарточкаАбонента Абонентов. В табличную чать Абоненты не выходят, но когда вызываю метоб Сообщить(стр.Абонент); они отображаются. Помогите разобраться пожалуйста!




Запрос=Новый Запрос;
Запрос.Текст="ВЫБРАТЬ
|   ЗаполнениеДанныхСРЦСРЦ.ЛицевойсчетСРЦ,
|   ЗаполнениеДанныхСРЦСРЦ.Лицсчет,
|   ЗаполнениеДанныхСРЦСРЦ.Абонент,
|   ЗаполнениеДанныхСРЦСРЦ.Сумма,
|   ЗаполнениеДанныхСРЦ.Ссылка
|ПОМЕСТИТЬ ВТ_Док
|ИЗ
|   Документ.ЗаполнениеДанныхСРЦ.СРЦ КАК ЗаполнениеДанныхСРЦСРЦ
|   ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаполнениеДанныхСРЦ КАК ЗаполнениеДанныхСРЦ
|   ПО ЗаполнениеДанныхСРЦСРЦ.Ссылка = ЗаполнениеДанныхСРЦ.Ссылка
|;
|
|////////////////////////////////////////////////////////////­////////////////////
|ВЫБРАТЬ
|   КарточкаАбонента.ЛицСчет,
|   КарточкаАбонента.Ссылка
|ПОМЕСТИТЬ ВТ_Справочн
|ИЗ
|   Справочник.КарточкаАбонента КАК КарточкаАбонента
|;
|
|////////////////////////////////////////////////////////////­////////////////////
|ВЫБРАТЬ
|   ВТ_Справочн.ЛицСчет,
|   ВТ_Док.ЛицевойсчетСРЦ,
|   ВТ_Док.Лицсчет КАК Лицсчет1,
|   ВТ_Док.Абонент,
|   ВТ_Справочн.Ссылка,
|   ВТ_Док.Сумма
|ИЗ
|   ВТ_Док КАК ВТ_Док,
|   ВТ_Справочн КАК ВТ_Справочн
|ГДЕ
|   ВТ_Док.ЛицевойсчетСРЦ = ВТ_Справочн.ЛицСчет
|   И ВТ_Док.Ссылка = &Ссылка
|
|СГРУППИРОВАТЬ ПО
|   ВТ_Справочн.ЛицСчет,
|   ВТ_Док.ЛицевойсчетСРЦ,
|   ВТ_Док.Лицсчет,
|   ВТ_Док.Абонент,
|   ВТ_Справочн.Ссылка,
|   ВТ_Док.Сумма";
Запрос.УстановитьПараметр("ССылка",ЭтотОбъект.Ссылка);


Выборка=Запрос.Выполнить().Выгрузить();
Для Каждого Стр Из Выборка Цикл
Выборка1=Справочники.КарточкаАбонента.НайтиПоРеквизиту("ЛицСчет",Стр.ЛицСчет,,);
Выборка2=Выборка1.ПолучитьОбъект();
стр.Абонент=Выборка2.ссылка;

Сообщить(стр.Абонент);
КонецЦикла;

SGIRG

Для чего все это?
Для Каждого Стр Из Выборка Цикл
Выборка1=Справочники.КарточкаАбонента.НайтиПоРеквизиту("ЛицСчет",Стр.ЛицСчет,,);
Выборка2=Выборка1.ПолучитьОбъект();
стр.Абонент=Выборка2.ссылка;

Сообщить(стр.Абонент);
КонецЦикла;


У Вас же в запросе уже есть ссылка на карточку абонента:
|   ВТ_Справочн.Ссылка,
Ничего не знаю, но иногда могу произнести праведную чушь)

witch_n


SGIRG

У Вас и Запрос то весь написан как-то необдуманно и криво.
Опишите, что конкретно и куда должно заполняться и на основе чего
Ничего не знаю, но иногда могу произнести праведную чушь)

witch_n

В документе у меня есть поле лицевыесчетаСРЦ, я обращаюсь к справочнику карточкаАбонента в нем есть поле Лицсчет и сравнивая эти два поля вывожу в табличную часть документа справочник Карточка Абонента

SGIRG

Цитата: witch_n от 18 авг 2016, 10:32В документе у меня есть поле лицевыесчетаСРЦ
Это строковое поле?
1. А почему бы не ссылка на справочник КарточкаАбонента???? Судя по всему в карточке, поле Личевой счет уникально, а это значит, что можно в свойствах справочника поставить ввод по строке по полю Лицевой счет. И тогда при наборе счета в документе будет подтягиваться ссылка на карточку абонента.
2. В событиях при изменении поля лицевыесчетаСРЦ сделать заполнение ТЧ из уже заполненной способом выше ссылки.

Либо в первом способе оставляете строку, а в событиях "ПриИзменеии" Ищете ссылку на элемент справочника и так же на основе неё заполняете ТЧ.

не нужно делать запросы к самому документу.
Ничего не знаю, но иногда могу произнести праведную чушь)

witch_n

Это число, Покажите на коде пожалуйста, так мне сложновато очень

SGIRG

Цитата: witch_n от 18 авг 2016, 10:58Это число
Эм... это самописный справочник или типовой? Крайне не логично номер лицевого счета делать числом это всегда должна быть строка, т.к. личевые счета часто могут начинаться на некоторое количество нулей.

вот пример, если ЛицевойсчетСРЦ не ссылка:
1. Необходимо объявить событие элемента формы ПриИзменении
2. В созданную процедуру запихать след. код.
&НаКлиенте
Процедура ЛицевойсчетСРЦПриИзменении(Элемент)
    ЗаполнитьТЧНаОсновеЛицевогоСчета();
КонецПроцедуры

&НаСервере
Процедура ЗаполнитьТЧНаОсновеЛицевогоСчета()
    Запрос = Новый Запрос;
    Запрос.Текст = "
        |ВЫБРАТЬ
        |    КарточкаАбонента.Ссылка
        |ИЗ
        |    Справочник.КарточкаАбонента КАК КарточкаАбонента
        |ГДЕ
        |    КарточкаАбонента.ЛицевойСчет = &ЛицевойСчет;
    Запрос.УстановитьПараметр("ЛицевойСчет", Объект.ЛицевойсчетСРЦ);
    Результат = Запрос.Выполнить()
    Если Результат.Пустой()
        Возврат;
    КонецЕсли;
   
    Выборка = Результат.Выбрать();
    Выборка.Следцющий();
    КарточкаАбонента = Выборка.Ссылка;
   
    // Далее заполняешь куда угодно информацию из карточки абонента
КонецПроцедуры


Это при условии, что ЛицевойсчетСРЦ находится в реквизитах документа.

Сложно написать конкретный код, если не известны метаданные справочника и документа
Ничего не знаю, но иногда могу произнести праведную чушь)

witch_n


SGIRG

Ничего не знаю, но иногда могу произнести праведную чушь)

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск