-
09.06.2019, 15:59
#1
Гость форума
Получение значения реквизита табличной части. 1С:Предприятие 8.3
Здравствуйте! Подскажите, пожалуйста, как получить значение реквизита табличной части (в справочнике)? У меня есть таб.часть «Образование», в ней есть реквизит «ВидОбразования» (ссылается на перечисление видов образования). Как получить значение данного реквизита?
-
06.07.2019, 20:53
#2
Гость форума
Re: Получение значения реквизита табличной части. 1С:Предприятие 8.3
Не силен в 1С, но вижу, что за месяц не ответил никто. Если правильно понял, то:
Получить табличную часть можно так:// Пусть СсылкаНаТЗ это ссылка на владельца ТЧ Образование
ТаблОбразование = СсылкаНаТЗ.Образование.Выг рузить(); // это таблица значений
Для Каждого Обр из ТаблОбразование Цикл
Сообщить(Обр.ВидОбразовани я);
КонецЦикла;// Или
Номер = 0;
Пока Номер < ТаблОбразование.Количеств� �() Цикл
Сообщить(ТаблОбразование[Номер].ВидОбразования);
Номер = Номер + 1;
КонецЦикла;
-
06.07.2019, 20:59
#3
Гость форума
Re: Получение значения реквизита табличной части. 1С:Предприятие 8.3
Какая-то ерунда с сообщением — половина стерлась через несколько минут.
И как отредактировать не понимаю…Не силен в 1С, но вижу, что за месяц не ответил никто. Если правильно понял, то:
Получить табличную часть можно так:// Пусть СсылкаНаТЗ это ссылка на владельца ТЧ Образование
ТаблОбразование = СсылкаНаТЗ.Образование.Выр узить(); // это таблица значений
Для Каждого Обр из ТаблОбразование Цикл
Сообщить(Обр.ВидОбразовани я);
КонецЦикла;// Или
Номер = 0;
Пока Номер < ТаблОбразование.Количеств� �() Цикл
Сообщить(ТаблОбразование[Номер].ВидОбразования);
Номер = Номер + 1;
КонецЦикла;
-
06.07.2019, 21:02
#4
Гость форума
Re: Получение значения реквизита табличной части. 1С:Предприятие 8.3
Попытка 3. Расширенный режим. Почему сообщения так корежит?
Какая-то ерунда с сообщением — половина стерлась через несколько минут.
И как отредактировать не понимаю…Не силен в 1С, но вижу, что за месяц не ответил никто. Если правильно понял, то:
Получить табличную часть можно так:// Пусть СсылкаНаТЗ это ссылка на владельца ТЧ Образование
ТаблОбразование = СсылкаНаТЗ.Образование.Выг рузить(); // это таблица значений
Для Каждого Обр из ТаблОбразование Цикл
Сообщить(Обр.ВидОбразовани я);
КонецЦикла;// Или
Номер = 0;
Пока Номер < ТаблОбразование.Количеств� �() Цикл
Сообщить(ТаблОбразование[Номер].ВидОбразования);
Номер = Номер + 1;
КонецЦикла;
-
06.07.2019, 21:05
#5
Гость форума
Re: Получение значения реквизита табличной части. 1С:Предприятие 8.3
Попробую картинкой
Screenshot_1.jpg
-
09.07.2019, 11:44
#6
Гордость форума PRO
Re: Получение значения реквизита табличной части. 1С:Предприятие 8.3
Сообщение от iLex
Не силен в 1С, но вижу, что за месяц не ответил никто. Если правильно понял, то:
Получить табличную часть можно так:Никто не ответил потому как вопрос дурацкий.
табличная часть она потому и табличная, что в ней (по умолчанию) много в строк и в каждой строке значение данного реквизита возможно разное.
если знаешь номер строки (например первая) то обращение будет Образование[0].ВидОбразования
Получить значение из табличной части |
Я |
13.08.12 — 09:49
Добрый день!У меня появилась задача для реквизита формы справочника, получить значение должности из табличной части другого справочника. Я пытаюсь вытащить из табличной части справочника значение поля роль контактного лица. Текст запроса пока выглядит так
Запрос = Новый Запрос;
Запрос.Текст =
«ВЫБРАТЬ
| ДоговорыКонтрагентов.а_ВЛице,
| КонтактныеЛицаПартнеров.РолиКонтактногоЛица.(
| РольКонтактногоЛица
| )
|ИЗ
| Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
| ПОЛНОЕ СОЕДИНЕНИЕ Справочник.КонтактныеЛицаПартнеров КАК КонтактныеЛицаПартнеров
| ПО ДоговорыКонтрагентов.а_ВЛице = КонтактныеЛицаПартнеров.Ссылка»;
Результат = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = Результат.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
// Вставить обработку выборки ВыборкаДетальныеЗаписи
КонецЦикла;
По сути я пытаюсь при выборе контактного лица достать его должность и передать ее в реквизит формы,подскажите пожалуйста как мне обработать результат запроса, и правильно ли я его описала?
1 — 13.08.12 — 09:53
Как я понимаю в конструкторе запросов во вкладке условия надо сделать запись, а вот какую, я пока не могу разобраться
2 — 13.08.12 — 10:05
Или есть второй вариант сделать пока так
Спр=Справочники.КонтактныеЛицаПартнеров.Выбрать(Объект.Лицо.РолиКонтактногоЛица);
ТП=Спр.РолиКонтактногоЛица.Выгрузить();
спис=Новый СписокЗначений;
Для Каждого ТП Из Спр.РолиКонтактногоЛица Цикл
спис.Добавить(ТП.РольКонтактногоЛица);
КонецЦикла;
3 — 13.08.12 — 10:05
Но он пока выдает ошибку
4 — 13.08.12 — 10:10
(0) используй соединение для выборки ТЧ (по Спр.Ссылка=ТЧ.Ссылка)
используй в выборке сразу нужное тебе поле — должность, чтобы не тянуть потом объект снова из БД.
используй параметр запроса, чтобы получить сразу должность на того человека, который тебе нужен
5 — 13.08.12 — 10:36
А если я все же решила иным способом, почему он у меня ругается на строку
ТП=Спр.РолиКонтактногоЛица.Выгрузить();
пишет
{Форма.Форма.Форма(19)}: Значение не является значением объектного типа (Выгрузить)
ТП=Спр.РолиКонтактногоЛица.Выгрузить();
6 — 13.08.12 — 10:40
слово «решила» подразумевает собой некое законченное действие. а у тебя ошибки
7 — 13.08.12 — 10:41
(6)Перефразирую, если я хочу попробовать
8 — 13.08.12 — 10:42
Просто тем способом, который предложили мне Вы, я похоже совсем не справлюсь, с запросами совсем не лажу((
9 — 13.08.12 — 10:44
Я еще совсем в 1 с новичок, месяц всего лишь
10 — 13.08.12 — 10:58
11 — 13.08.12 — 11:19
(8) лучше сразу учиться по-нормальному, а то потом переделывать и переделываться будет очень сложно.
итак, для начала: возьми в руки консоль запросов, и отладь там запрос на тестовом значении параметра, убедись, что он выдаст тебе то, что нужно.
и только потом можно приступать к кодингу
12 — 13.08.12 — 11:37
(11)Сделала
Вот так выполняет как надо, находит контактному лицу должность
ВЫБРАТЬ
ДоговорыКонтрагентов.Контрагент,
КонтактныеЛицаПартнеровРолиКонтактногоЛица.Ссылка,
КонтактныеЛицаПартнеровРолиКонтактногоЛица.НомерСтроки,
КонтактныеЛицаПартнеровРолиКонтактногоЛица.РольКонтактногоЛица,
КонтактныеЛицаПартнеров.ФизЛицо
ИЗ
Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.КонтактныеЛицаПартнеров КАК КонтактныеЛицаПартнеров
ПО ДоговорыКонтрагентов.а_ВЛице = КонтактныеЛицаПартнеров.Ссылка,
Справочник.КонтактныеЛицаПартнеров.РолиКонтактногоЛица КАК КонтактныеЛицаПартнеровРолиКонтактногоЛица
13 — 13.08.12 — 11:42
Как мне теперь сделать обход результата?
14 — 13.08.12 — 11:48
Пока он тянет всех контактных лиц из запроса, где мне лучше установить отбор по конктретному контактному лицу, там же?
15 — 13.08.12 — 11:49
(0) «для реквизита формы справочника, получить значение должности»
т.е. сам контрагент (ссылка) известен заранее ?
16 — 13.08.12 — 11:53
Ну да, я это значение записываю в реквизит а_ВЛице
17 — 13.08.12 — 11:54
Я пытаюсь во вкладке условия наложить на него условие, чтобы по нему отбиралось, но пока не выходит
18 — 13.08.12 — 11:56
(16) ну пиши вручную в запросе
ИЗ
Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
…
ГДЕ
ДоговорыКонтрагентов.Контрагент = &Контрагент
19 — 13.08.12 — 12:00
задала, так ничего не выдает
20 — 13.08.12 — 12:15
а все вышло, теперь буду адаптировать под свой случай)
21 — 13.08.12 — 13:11
А вот такой вопрос, если я в реквизите Лицо указываю собственно ФИО лица и по нему у меня должна проставляться должность, я описала запрос
Запрос = Новый Запрос;
Запрос.Текст =
«ВЫБРАТЬ
| ДоговорыКонтрагентов.Контрагент,
| КонтактныеЛицаПартнеровРолиКонтактногоЛица.Ссылка,
| КонтактныеЛицаПартнеровРолиКонтактногоЛица.РольКонтактногоЛица
|ИЗ
| Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.КонтактныеЛицаПартнеров КАК КонтактныеЛицаПартнеров
| ПО ДоговорыКонтрагентов.а_ВЛице = КонтактныеЛицаПартнеров.Ссылка,
| Справочник.КонтактныеЛицаПартнеров.РолиКонтактногоЛица КАК КонтактныеЛицаПартнеровРолиКонтактногоЛица
|ГДЕ
| ДоговорыКонтрагентов.Ссылка = &Ссылка
|
|СГРУППИРОВАТЬ ПО
| ДоговорыКонтрагентов.Контрагент,
| КонтактныеЛицаПартнеровРолиКонтактногоЛица.Ссылка,
| КонтактныеЛицаПартнеровРолиКонтактногоЛица.РольКонтактногоЛица»;
Запрос.УстановитьПараметр(«Ссылка», Объект.Лицо);
Результат = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = Результат.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
// Вставить обработку выборки ВыборкаДетальныеЗаписи
КонецЦикла;
//}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
КонецФункции
Но пока естественно при вводе лица у меня ничего не выходит
22 — 13.08.12 — 13:17
наверное не фио, а ссылку?
23 — 13.08.12 — 13:18
должность это роль контактного лица?
24 — 13.08.12 — 13:22
да
25 — 13.08.12 — 14:20
Вот так пока сделала, но так он мне находит всех контактных лиц и все должности и выдает последнюю найденную должность, а как мне сделать, чтобы он отобрал именно по тому лицу которое я задала
Запрос = Новый Запрос;
Запрос.Текст =
«ВЫБРАТЬ
| КонтактныеЛицаПартнеровРолиКонтактногоЛица.Ссылка,
| КонтактныеЛицаПартнеровРолиКонтактногоЛица.РольКонтактногоЛица КАК Должность
|ИЗ
| Справочник.КонтактныеЛицаПартнеров.РолиКонтактногоЛица КАК КонтактныеЛицаПартнеровРолиКонтактногоЛица,
| Справочник.КонтактныеЛицаПартнеров КАК КонтактныеЛицаПартнеров
|ГДЕ
| КонтактныеЛицаПартнеров.Ссылка = &Ссылка»;
Запрос.УстановитьПараметр(«Ссылка», Объект.Лицо);
Результат = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = Результат.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Должность=ВыборкаДетальныеЗаписи.Должность;
КонецЦикла;
//}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
Возврат Должность;
26 — 13.08.12 — 14:33
Может мне надо именно после запроса устанавливать условия?
Карась
27 — 13.08.12 — 15:30
Заработало, вот так
Запрос = Новый Запрос;
Запрос.Текст =
«ВЫБРАТЬ
| КонтактныеЛицаПартнеровРолиКонтактногоЛица.РольКонтактногоЛица КАК Должность
|ИЗ
| Справочник.КонтактныеЛицаПартнеров.РолиКонтактногоЛица КАК КонтактныеЛицаПартнеровРолиКонтактногоЛица
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.КонтактныеЛицаПартнеров КАК КонтактныеЛицаПартнеров
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Партнеры КАК Партнеры
| ПО КонтактныеЛицаПартнеров.Владелец = Партнеры.Ссылка
| ПО КонтактныеЛицаПартнеровРолиКонтактногоЛица.Ссылка = КонтактныеЛицаПартнеров.Ссылка
|ГДЕ
| КонтактныеЛицаПартнеровРолиКонтактногоЛица.Ссылка = &КонтактноеЛицо»;
Запрос.УстановитьПараметр(«КонтактноеЛицо», Объект.Лицо);
Результат = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = Результат.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Должность=ВыборкаДетальныеЗаписи.Должность;
КонецЦикла;
//}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
Возврат Должность;
Иногда возникает необходимость вывода в табличное поле документа (или любого другого объекта, имеющего табличную часть) дополнительных колонок с данными, которые не содержатся непосредственно в табличной части. Реализовать это на платформе 1С: Предприятие 8.1 или 8.2 в режиме обычного приложения (без использования управляемых форм) было достаточно просто, чего не скажешь об управляемых формах в 1С 8.2.
Реализация на платформе 1С: Предприятие 8.1 (или в обычном приложении)
В начале коротко о том, как добавить дополнительную колонку в табличное поле на платформе 1С 8.1.
Предположим, что у нас есть некий документ с табличной частью «Товары» (с колонками «Номенклатура» и «Количество») и нам нужно вывести дополнительную колонку «Цена», которая бы содержала данные реквизита «Цена» элементов справочника «Номенклатура», выбранных в строках табличной части.
Для этого нам достаточно добавить в форме документа новую колонку «Цена» в табличное поле, содержащее данные табличной части документа и написать следующий код в обработчике события «ПриПолученииДанных» этого табличного поля:
// обработчик события «ПриПолученииДанных» табличного поля «Товары»
Процедура ТоварыПриПолученииДанных(Элемент, ОформленияСтрок)
Для Каждого ОформлениеСтроки Из ОформленияСтрок Цикл
Номенклатура = ОформлениеСтроки.ДанныеСтроки.Номенклатура;
Если ЗначениеЗаполнено(Номенклатура) Тогда
ОформлениеСтроки.Ячейки.Цена.ОтображатьТекст = Истина;
ОформлениеСтроки.Ячейки.Цена.Текст = Формат(Номенклатура.Цена,«ЧЦ=15; ЧДЦ=2»);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Хочу обратить внимание на то, что строки табличного поля обрабатываются порциями, по мере прокрутки списка.
Реализация на платформе 1С: Предприятие 8.2 (8.3 управляемое приложение)
На платформе 8.2 с использованием управляемых форм решение данной задачи потребует бóльших усилий. Это связано с тем, что за счет своей клиент-серверной ориентированности в платформе 8.2 в управляемом режиме отсутствуют некоторые привычные возможности — например, у табличного поля отсутствуют обработчики событий «ПриПолученииДанных» и «ПриВыводеСтроки», которые мы могли бы использовать для этих целей в 1С 8.1 или 8.2 в обычных формах.
Пусть в нашей конфигурации есть документ «ВводОстатковДолга» с табличной частью «Контрагенты» (с колонками «Контрагент» и «Сумма»). В свою очередь у справочника «Контрагенты» есть реквизит «ИНН», значение которого необходимо выводить в строках табличного поля.
[qu_spoiler title=»Примечание от ‘Капитально:» open=»yes» icon=»chevron-circle»]в статье взят неудачный пример т.к. реквизиты вынести можно получить гораздо проще, но тем не менее статья полезна для рассмотрения в учебных целях[/qu_spoiler]
Откроем управляемую форму документа, добавим новую колонку «ИНН» реквизита «Контрагенты» и перенесём её на закладку «Элементы» (для отображения в форме).
Откроем палитру свойств поля «КонтрагентыКонтрагент» и добавим обработчик события «ПриИзменении»
// служебная функция получения значения реквизита объекта (выполняется на сервере)
&НаСервере
Функция ЗначениеРеквизита(Объект,ИмяРеквизита);
Возврат Объект[ИмяРеквизита];
КонецФункции
// обработчик события «ПриИзменении» поля «Контрагент» в табличном поле «Контрагенты»
&НаКлиенте
Процедура КонтрагентыКонтрагентПриИзменении(Элемент)
ТекДанные = Элементы.Контрагенты.ТекущиеДанные;
ТекДанные.ИНН = ЗначениеРеквизита(ТекДанные.Контрагент,«ИНН»);
КонецПроцедуры
Это обеспечит нам изменение значения поля «ИНН» при выборе контрагента в строке табличного поля.
Теперь необходимо предусмотреть заполнение колонки «ИНН» при открытии формы документа, а так же после записи и при чтении на сервере.
Обновление данных после записи и при чтении на сервере необходимо в связи с тем, что иначе значения колонки «ИНН» будут очищаться каждый раз при возникновении этих событий. Для заполнения колонки «ИНН» опишем в модуле формы служебную серверную процедуру:
// служебная процедура для заполнения колонки «ИНН» табличного поля «Контрагенты»
&НаСервере
Процедура ОбновитьДанныеКолонкиИНН()
Запрос = Новый Запрос(
«ВЫБРАТЬ РАЗРЕШЕННЫЕ
| Контрагенты.Ссылка КАК Контрагент,
| Контрагенты.ИНН
|ИЗ
| Справочник.Контрагенты КАК Контрагенты
|ГДЕ
| Контрагенты.Ссылка В(&СписокКонтрагентов)»
);
Запрос.УстановитьПараметр(«СписокКонтрагентов»,Объект.Контрагенты.Выгрузить().ВыгрузитьКолонку(«Контрагент»));
Выборка = Запрос.Выполнить().Выбрать();
Для Каждого Стр Из Объект.Контрагенты Цикл
Если Выборка.НайтиСледующий(Стр.Контрагент,«Контрагент») Тогда
Стр.ИНН = Выборка.ИНН;
Иначе
Стр.ИНН = «»;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Затем добавим в модуль формы документа обработчики событий «ПриОткрытии», «ПриЧтенииНаСервере» и «ПослеЗаписиНаСервере», в каждой из которых будем вызвать описанную ранее служебную процедуру «ОбновитьДанныеКолонкиИНН»
&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)
ОбновитьДанныеКолонкиИНН();
КонецПроцедуры
&НаСервере
Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи)
ОбновитьДанныеКолонкиИНН();
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии(Отказ)
ОбновитьДанныеКолонкиИНН();
КонецПроцедуры
Всё готово. Можно посмотреть на результат.
Статья найдена на просторах интернета
Как добавить реквизит объекта в таблицу формы
Любые издержки на рекламную кампанию:
— больше, чем может позволить себе клиент;
— меньше, чем ожидали люди из творческого отдела;
— примерно такие, которых с ужасом опасались бухгалтеры.
Почему я просил подсказать метод. через который следует решаить это дело, потому как опыту — пару книжек … и всё, а как дело дошло до боевой эксплуатации — …(
Первый вариант:
&НаСервереБезКонтекста
Функция ПолучитьРеквизитВыбранногоЗначения(ВыбранноеЗначение)
Возврат ВыбранноеЗначение.Изделия;
КонецФункции
&НаКлиенте
Процедура ИзделиеОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
Изделия = ПолучитьРеквизитВыбранногоЗначения(ВыбранноеЗначение);
КонецПроцедуры
И получил сообщение следуюющего содержания:
{Документ.Акт.Форма.ФормаАкта.Форма(43)}: Ошибка при вызове метода контекста (ПолучитьРеквизитВыбранногоЗначения)
Изделия = ПолучитьРеквизитВыбранногоЗначения(ВыбранноеЗначение);
по причине:
Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа.
по причине:
Ошибка преобразования данных XDTO:
Запись значения свойства ‘ret’:
форма: Элемент
имя: {http://v8.1c.ru/8.2/managed-application/modules}ret
по причине:
Ошибка отображения типов:
Отсутствует отображение для типа ‘СправочникТабличнаяЧасть.ПроизводственныеЗаказы.Изделия’
По этой ошибке ничего найти не смог, хотя пти все верные
За тем попытался через запрос:
Функция ОпределитьНаименованиеИзделия(ОбознИзд)
Запрос = Новый Запрос;
Запрос.Текст =
«ВЫБРАТЬ
| ПроизводственныеЗаказы.Ссылка,
| ПроизводственныеЗаказы.Наименование,
| ПроизводственныеЗаказы.Изделия.(
| ОбознИзд),
|ИЗ
| Справочник.ПроизводственныеЗаказы КАК ПроизводственныеЗаказы
|ГДЕ
| (ПроизводственныеЗаказы.Наименование = &Наименование)
| И (НазваниеСправочника.Изделия = &Изделия)
|
|СГРУППИРОВАТЬ ПО
| ПроизводственныеЗаказы.Ссылка,
| ПроизводственныеЗаказы.Наименование,
| ПроизводственныеЗаказы.Изделия.(
| ОбознИзд),
|»;
Запрос=Новый Запрос(Запрос.Текст);
Запрос.Параметры.Вставить(«ОбознИзд», ОбознИзд);
Выборка=Запрос.Выполнить().Выбрать();
КонецФункции
&НаКлиенте
Процедура ИзделиеПриИзменении(Элемент)
ОбознИзд = ОпределитьНаименованиеИзделия(ОбознИзд)
КонецПроцедуры
И получил ошибку
{Документ.Акт.Форма.ФормаАкта.Форма(57)}: Ошибка при вызове метода контекста (Выполнить): {(6, 1)}: Синтаксическая ошибка «ИЗ»
<<?>>ИЗ
Выборка=Запрос.Выполнить().Выбрать();
по причине:
{(6, 1)}: Синтаксическая ошибка «ИЗ»
<<?>>ИЗ
Ещё пытался через динамический Список — и там не смог получить доступа до табличной части справочника.
В аттачах — form.png — форма документа АКТ. form_pr_zak.png — форма справочника «ПроизводственныеЗаказы» — основа для получения значений Полей «Номер производственного заказа» заполняется из справочника производственных заказов реквизит «Наименование», а поле изделие … по идее должно получаться из справочника «ПроизводственныеЗаказы», но из табличного поля (изделия) колонки «Обозначение Изделия» (ОбознИзд). Вот в почледний пункт — мне его и не получить.
Для примера, рассмотрим ситуацию, когда требуется получить все номенклатурные позиции, указанные в табличной части Товары документов РеализацияТоваровУслуг.
Для этого можно воспользоваться запросом со следующим текстом:
ВЫБРАТЬ РАЗЛИЧНЫЕ РеализацияТоваровУслугТовары.Номенклатура КАК Номенклатура ИЗ Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
В качестве источника указываем табличную часть документов — таблицу Документ.РеализацияТоваровУслуг.Товары. Выходным полем объявляем поле Номенклатура, входящее в состав таблицы источника. Кроме этого, поскольку одна и та же товарная позиция, естественно, могла присутствовать и не один раз в документах, применяем РАЗЛИЧНЫЕ для получения только различных строк в выходной таблице запроса.
Для примера создадим обработку СписокТоваров, где выбирается документ РеализацияТоваровУслуг, и нажатием на соответствующую кнопку в окно сообщений выводится список неповторяющихся позиций номенклатуры, содержащейся в табличной части этого документа.
Для того, чтобы ограничить выборку номеклатуры только номенклатурой из табличной части конкретного документа используем параметр Ссылка в условии в запросе (ГДЕ …):
ВЫБРАТЬ РАЗЛИЧНЫЕ РеализацияТоваровУслугТовары.Номенклатура КАК Номенклатура ИЗ Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары ГДЕ РеализацияТоваровУслугТовары.Ссылка = &Ссылка
0 / 0 / 0 Регистрация: 29.05.2014 Сообщений: 3 |
|
1 |
|
1C 8.x (тонкий) Получение значения реквизита справочника в документ29.05.2014, 12:17. Показов 64939. Ответов 22
Добрый день, есть вопрос Есть справочник Сотрудники, реквизиты «Должность», «Дата рождения» Есть документ в нем табличная часть «Налоги» и его реквизиты «ФИО» «Должность» «ДатаРождения» если просто ссылаться через форму на значения справочника то в документе выводится визуально и ДатаРождения, и Должность, но на печати эти поля пустые и при установке условий они ни как не считываются, а как будто пустые Прошу в поиск не посылать, т.к. пробывал уже много вариантов в т.ч. программно через функции платформа 8.2
0 |
GreenkA 3051 / 1998 / 524 Регистрация: 25.06.2009 Сообщений: 6,964 |
||||
29.05.2014, 12:34 |
2 |
|||
Mujinin, пропишите заполнение этих полей при изменении ФИО. Какая форма? Если управляемая, то значения получать придется на клиенте. Иначе — можно все в одной процедуре.
2 |
Mujinin 0 / 0 / 0 Регистрация: 29.05.2014 Сообщений: 3 |
||||
29.05.2014, 12:41 [ТС] |
3 |
|||
о мой спаситель….почему мне раньше этого никто не мог подсказать….я начал пол года назад и все время обходил это автозаполнение. делал все тоже самое только «ФИО» в
не выставлял
0 |
Anmut 0 / 0 / 0 Регистрация: 27.08.2015 Сообщений: 12 |
||||
27.08.2015, 09:09 |
4 |
|||
Не подскажите, а как сделать все тоже самое, но только у меня это не строки в ТЧ а реквизиты дока.
0 |
SonicQ 286 / 186 / 18 Регистрация: 20.02.2012 Сообщений: 925 |
||||
27.08.2015, 10:12 |
5 |
|||
Anmut, я бы лучше изменял реквизиты объекта на сервере. Думаю так будет правильнее
1 |
340 / 315 / 43 Регистрация: 20.08.2014 Сообщений: 1,242 Записей в блоге: 1 |
|
27.08.2015, 15:06 |
6 |
Думаю так будет правильнее нет не правильнее и ведет к снижению производительности. Вы туда сю форму спакуете и отправите, добавите и потом все это полетит назад по сети. Лучше серверный вызов делать в один раз, получать маленькие данные и заполнить на клиенте. Т.к. объет на форме уже заблокирован вами.
0 |
286 / 186 / 18 Регистрация: 20.02.2012 Сообщений: 925 |
|
27.08.2015, 17:28 |
7 |
1c-k,
0 |
286 / 186 / 18 Регистрация: 20.02.2012 Сообщений: 925 |
|
27.08.2015, 17:41 |
8 |
1c-k, бесспорно, вариант с объект.Реквизит = на клиенте быстрее…. Миниатюры
1 |
1c-k 340 / 315 / 43 Регистрация: 20.08.2014 Сообщений: 1,242 Записей в блоге: 1 |
||||
27.08.2015, 17:43 |
9 |
|||
SonicQ, это с чего такие выводы?
Добавлено через 1 минуту
Но зачастую нужно не просто изменить один объект… за код ниже от меня программеры получают нагоняй.
1 |
286 / 186 / 18 Регистрация: 20.02.2012 Сообщений: 925 |
|
27.08.2015, 17:45 |
10 |
1c-k, а клиент при этом плачет, что при заполнении одного реквизита все остальные не заполнились автоматом…
1 |
340 / 315 / 43 Регистрация: 20.08.2014 Сообщений: 1,242 Записей в блоге: 1 |
|
27.08.2015, 17:47 |
11 |
SonicQ, ахахаха. Срочно учить матчасть вызовов в управляемом приложении и что и как там происходит с контекстами. Добавлено через 1 минуту
1 |
286 / 186 / 18 Регистрация: 20.02.2012 Сообщений: 925 |
|
27.08.2015, 17:48 |
12 |
1c-k, я специально для примера так сделал
1 |
340 / 315 / 43 Регистрация: 20.08.2014 Сообщений: 1,242 Записей в блоге: 1 |
|
27.08.2015, 17:50 |
13 |
SonicQ, этот пример как грится делают все программеры которые переходят с обычного приложения в управляемое.
1 |
SonicQ 286 / 186 / 18 Регистрация: 20.02.2012 Сообщений: 925 |
||||||||
27.08.2015, 17:58 |
14 |
|||||||
1c-k, однако именно
реализовано в типовых конфигурациях, только там продолжения типа
1 |
340 / 315 / 43 Регистрация: 20.08.2014 Сообщений: 1,242 Записей в блоге: 1 |
|
27.08.2015, 18:05 |
15 |
SonicQ, однако надо давать себе отчёт, почему и что в типовых конфигурациях сделано. Добавлено через 45 секунд
1 |
286 / 186 / 18 Регистрация: 20.02.2012 Сообщений: 925 |
|
27.08.2015, 18:09 |
16 |
1c-k, палка двух концов =)
1 |
340 / 315 / 43 Регистрация: 20.08.2014 Сообщений: 1,242 Записей в блоге: 1 |
|
27.08.2015, 18:19 |
17 |
SonicQ, нет. Тут надо подходить из разумности вызовов, дёрганья сервера, и т.п.
1 |
0 / 0 / 0 Регистрация: 27.08.2015 Сообщений: 12 |
|
28.08.2015, 11:32 |
18 |
Читаю переписку «ассов» и чувствую себя полнейшим дураком в этих вопросах))). Я в програмировании 1с еще, если можно так сказать, новорожденный. Делаю себе индивидуальную конфу «с нуля» и понимаю, если бы вы ее увидели, то сто пудов я бы выслушал кучу слов не входящих в словарь русского языка.)))).
0 |
1c-k 340 / 315 / 43 Регистрация: 20.08.2014 Сообщений: 1,242 Записей в блоге: 1 |
||||
28.08.2015, 11:34 |
19 |
|||
Подскажите, пожалуйста, так правильно будет?
Это как вариант. Увидел бы написал как надо.
1 |
Anmut 0 / 0 / 0 Регистрация: 27.08.2015 Сообщений: 12 |
||||
28.08.2015, 11:44 |
20 |
|||
Спасибо огромное!!! сделал!!!
Добавлено через 2 минуты
0 |
Табличные части существуют у многих объектов в 1С:
- Справочники
- Документы
- Отчеты и обработки
- Планы счетов
- Планы видов характеристик
- Планы видов расчета
- Бизнес-процессы и задачи
Табличные части позволяют хранить неограниченное количество структурированной информации, принадлежащей одному объекту.
Рассмотрим некоторые приемы работы с табличными частями.
Как обойти табличную часть
Для обхода табличной части можно использовать цикл Для каждого
Для каждого Строка из ТабличнаяЧасть Цикл
Сообщить(Строка.РеквизитТабличнойЧасти);
КонецЦикла;
На каждой итерации в переменную Строка передается очередная строка табличной части. Значения реквизитов строки можно получить выражением Строка.ИмяРеквизита.
Как получить и обойти выделенные строки табличной части
Для вывода информации из табличной части объекта служит элемент формы Табличное поле. Для включения возможности выделения нескольких строк на табличном поле нужно установить значение Множественный у его свойства Режим выделения.
Для получения перечня выделенных строк используется следующий код:
ВыделенныеСтроки=ЭлементыФормы.ИмяТабличногоПоля.ВыделенныеСтроки;
Для того чтобы обойти выделенные строки используется цикл Для каждого:
ВыделенныеСтроки=ЭлементыФормы.ИмяТабличногоПоля.ВыделенныеСтроки;
Для каждого Строка из ВыделенныеСтроки Цикл
//содержимое цикла
КонецЦикла;
Как программно выделить строки табличной части (табличного поля) и снять выделение
Чтобы программно снять выделение строк табличного поля:
ЭлементыФормы.ИмяТабличногоПоля.ВыделенныйСтроки.Очистить();
Чтобы программно выделить все строки табличного поля:
Для каждого ТекущаяСтрока Из ТабличнаяЧасть Цикл
ЭлементыФормы.ИмяТабличногоПоля.ВыделенныеСтроки.Добавить(ТекущаяСтрока);
КонецЦикла;
Как очистить табличную часть
ТабличнаяЧасть.Очистить();
Как получить текущую строку табличной части
Текущая строка — это срока, в которой у пользователя в данный момент находится курсор. Чтобы ее получить, нужно обратиться к элементу управления на форме, который связан с табличной частью.
Для обычных форм код будет выглядеть так:
ЭлементыФормы.ИмяТабличногоПоля.ТекущиеДанные;
Для управляемых форм:
Элементы.ИмяТабличногоПоля.ТекущиеДанные;
Как добавить новую строку в табличную часть
Добавление новой строки в конец табличной части:
НоваяСтрока=ТабличнаяЧасть.Добавить();
НоваяСтрока.Реквизит1=«Значение»;
Добавление новой строки в любое место табличной части (последующие строки будут сдвинуты):
НоваяСтрока=ТабличнаяЧасть.Вставить(Индекс)
//Индекс — номер добавляемой строки. Нумерация строк начинается с нуля.
НоваяСтрока.Реквизит1=«Значение»;
Как программно заполнить реквизиты строки табличной части
Если нужно программно заполнить реквизиты строки табличной части, которую добавляет пользователь, необходимо использовать обработчик события табличной части ПриНачалеРедактирования.
Создаваемая обработчиком процедура имеет три параметра:
- Элемент — содержит элемент управления ТабличноеПоле.
- НоваяСтрока — булево. Содержит значение Истина, если добавляется новая строка табличной части, и Ложь, если пользователь начал редактировать уже существующую строку.
- Копирование — булево. Содержит значение Истина, если пользователь копирует строку, и Ложь в остальных случаях.
Рассмотрим пример. Допустим, нам нужно заполнить реквизит табличной части СчетУчета, в случае, когда добавляется новая строка. При редактировании существующей строки изменять счет учета не нужно.
Процедура ТабличнаяЧастьПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование)
//Если пользователь редактирует существующую строку, то ничего не делаем
Если НЕ НоваяСтрока Тогда
Возврат;
КонецЕсли;
//Если же строка новая, устанавливаем счет учета
ТекСтрока = Элемент.ТекущиеДанные; //Получили текущую строку табличной части
ТекСтрока.СчетУчета = ПланыСчетов.Хозрасчетый.НужныйСчетУчета;
КонецПроцедуры