|
|||
Kashton
13.07.11 — 10:00 |
Как программно получить список реквизитов справочника? Платформа 8.2 |
||
Ёпрст
1 — 13.07.11 — 10:01 |
метаданные |
||
Kashton
2 — 13.07.11 — 10:12 |
(1) Пример есть? |
||
Ненавижу 1С
3 — 13.07.11 — 10:13 |
(2) СП украли? |
||
butterbean
4 — 13.07.11 — 10:13 |
(2) ё…, уже простой цикл нарисовать не могут |
||
Ненавижу 1С
5 — 13.07.11 — 10:15 |
Для каждого Реквизит из Метаданные.Справочники.ТвойИдентификатор.Реквизиты Цикл |
||
СвинТуз
6 — 13.07.11 — 10:16 |
4 года это уже срок |
||
Kashton
7 — 13.07.11 — 10:20 |
(5) спс. а я зачемто после Реквизит кавычки ставлю )))) |
||
Kashton
8 — 13.07.11 — 10:20 |
(6) и че? |
||
Ненавижу 1С
9 — 13.07.11 — 10:20 |
(7) кавычки или скобки? ))) а посмотреть в СП, что это свойство? |
||
Kashton
10 — 13.07.11 — 10:21 |
(9) Вообще гоню. В отпуск пора |
||
СвинТуз
11 — 13.07.11 — 10:22 |
нажми наконец Ctrl+F1. Нажми не мучай себя брат. |
||
Kashton
12 — 13.07.11 — 10:23 |
(11) ценный совет. я и не знал |
||
Gars 13 — 13.07.11 — 11:49 |
(11) Среда, но пятнично… |
TurboConf — расширение возможностей Конфигуратора 1С
&НаСервере Процедура СозданиеИИзменениеЭлементовИГруппСправочникаНаСервере() /// Как создать новый элемент справочника в 1с 8.3, 8.2 // создадим новый элемент справочника Города // с именем Владивосток Владивосток = Справочники.Города.СоздатьЭлемент(); Владивосток.Наименование = "Владивосток"; Владивосток.Записать(); /// Как создать новую группу справочника в 1с 8.3, 8.2 // создадим новую группу справочника Города ГородаУМоря = Справочники.Города.СоздатьГруппу(); ГородаУМоря.Наименование = "Города у моря"; ГородаУМоря.Записать(); /// Как перенести элемент справочника в другую группу в 1с 8.3, 8.2 // перенесём созданный Владивосток в группу "Города у моря" Владивосток.Родитель = ГородаУМоря.Ссылка; Владивосток.Записать(); /// Как внести изменения в элемент справочника по ссылке /// в 1с 8.3, 8.2 // найдём город Калькутта КалькуттаСсылка = Справочники.Города.НайтиПоНаименованию("Калькутта"); Если Не КалькуттаСсылка.Пустая() Тогда // изменим и запишем численность жителей в городе Калькутта = КалькуттаСсылка.ПолучитьОбъект(); Калькутта.Численность = 1000000; Калькутта.Записать(); КонецЕсли; /// Как получить и проверить пустую ссылку типа справочник в 1с 8.3, 8.2 ПустаяСсылка = Справочники.Города.ПустаяСсылка(); Если ПустаяСсылка.Пустая() Тогда Сообщить("Ссылка действительно пустая."); КонецЕсли; /// Как узнать принадлежность элемента справочника группе /// с учетом уровней иерархии в 1с 8.3, 8.2 ПермьСсылка = Справочники.Города.НайтиПоНаименованию("Пермь"); РоссияСсылка = Справочники.Города.НайтиПоНаименованию("Россия"); // проверим принадлежит ли город Пермь группе Россия Если ПермьСсылка.ПринадлежитЭлементу(РоссияСсылка) Тогда Сообщить("Элемент Пермь находится в группе Россия."); КонецЕсли; /// Как скопировать существующий элемент справочника в 1с 8.3, 8.2 // скопируем элемент Пермь КопияПерми = ПермьСсылка.Скопировать(); КопияПерми.Наименование = КопияПерми.Наименование + " КОПИЯ"; КопияПерми.УстановитьНовыйКод(); КопияПерми.Записать(); /// Как выяснить уровень вложенности элемента справочника /// в 1с 8.3, 8.2 Сообщить(КопияПерми.Уровень()); // 1 /// Как заблокировать элемент справочника перед изменениями /// в 1с 8.3, 8.2 // выполним блокировку элемента справочника // от изменения другими режимами или пользователями Пермь = ПермьСсылка.ПолучитьОбъект(); Если Не Пермь.Заблокирован() Тогда Пермь.Заблокировать(); // тут идёт какой-то долгий алгоритм // в результате которого мы меняем // заблокированный элемент Пермь.Численность = 5000; Пермь.Записать(); // и только потом освобождаем его // для других режимов и пользователей Пермь.Разблокировать(); КонецЕсли; /// Как заполнить новый элемент справочника на основании /// в 1с 8.3, 8.2 // в модуле справочника Города я определил процедуру // ОбработкаЗаполнения, которая обрабатывает ситуации // когда мы заполняем один элемент на основании // данных другого (см. в базе для скачивания) Хабаровск = Справочники.Города.СоздатьЭлемент(); Хабаровск.Заполнить( Справочники.Города.НайтиПоНаименованию("Рио-де-Жанейро") ); Хабаровск.Наименование = "Хабаровск"; Хабаровск.Записать(); /// Как пометить на удаление элемент справочника в 1с 8.3, 8.2 // пометим на удаление только что созданный Хабаровск Хабаровск.УстановитьПометкуУдаления( Истина, // пометка удаления Ложь // включая подчиненные (если речь о группе справочника) ); // метод Записать вызывать не нужно КонецПроцедуры &НаСервереБезКонтекста Функция ПолучитьКлиентаПоИмени(Имя) Возврат Справочники.Клиенты.НайтиПоНаименованию(Имя); КонецФункции /// Как открыть форму существующего элемента справочника /// по ссылке в 1с 8.3, 8.2 &НаКлиенте Процедура КакОткрытьФормуСуществующегоЭлементаСправочника(Команда) СсылкаНаЭлемент = ПолучитьКлиентаПоИмени("Андрей"); ПараметрыФормы = Новый Структура("Ключ", СсылкаНаЭлемент); ОткрытьФорму( "Справочник.Клиенты.ФормаОбъекта", // имя формы ПараметрыФормы // параметры для формы ); КонецПроцедуры /// Как открыть форму существующей группы справочника /// по ссылке в 1с 8.3, 8.2 &НаКлиенте Процедура КакОткрытьФормуСуществующейГруппыСправочника(Команда) СсылкаНаГруппу = ПолучитьКлиентаПоИмени("Vip"); ПараметрыФормы = Новый Структура("Ключ", СсылкаНаГруппу); ОткрытьФорму( "Справочник.Клиенты.ФормаГруппы", // имя формы ПараметрыФормы // параметры для формы ); КонецПроцедуры /// Как открыть форму выбора элемента справочника и /// отследить её закрытие в 1с 8.3, 8.2 &НаКлиенте Процедура КакОткрытьФормуВыбораЭлементаСправочника(Команда) ОповещениеОЗакрытии = Новый ОписаниеОповещения("ПослеВыбораЭлемента", ЭтотОбъект); ОткрытьФорму( "Справочник.Клиенты.ФормаВыбора",,,,,,ОповещениеОЗакрытии ); КонецПроцедуры &НаКлиенте Процедура ПослеВыбораЭлемента(Результат, Параметры) Экспорт Если Результат <> Неопределено Тогда Сообщить("Был выбран элемент " + Результат); КонецЕсли; КонецПроцедуры /// Как открыть форму выбора группы справочника и /// отследить её закрытие в 1с 8.3, 8.2 &НаКлиенте Процедура КакОткрытьФормуВыбораГруппыСправочника(Команда) ОповещениеОЗакрытии = Новый ОписаниеОповещения("ПослеВыбораГруппы", ЭтотОбъект); ОткрытьФорму( "Справочник.Клиенты.ФормаВыбораГруппы",,,,,,ОповещениеОЗакрытии ); КонецПроцедуры &НаКлиенте Процедура ПослеВыбораГруппы(Результат, Параметры) Экспорт Если Результат <> Неопределено Тогда Сообщить("Была выбрана группа " + Результат); КонецЕсли; КонецПроцедуры /// Как открыть форму списка справочника и /// установить отбор по реквизиту в 1с 8.3, 8.2 &НаКлиенте Процедура КакОткрытьФормаСпискаСправочникаСОтбором(Команда) // откроем список клиентов, оставив // только мужчин ПараметрыОтбора = Новый Структура; ПараметрыОтбора.Вставить("Пол", ПолучитьПеречислениеМужской()); ПараметрыФормы = Новый Структура; ПараметрыФормы.Вставить("Отбор", ПараметрыОтбора); ОткрытьФорму( "Справочник.Клиенты.ФормаСписка", ПараметрыФормы ); КонецПроцедуры &НаСервереБезКонтекста Функция ПолучитьПеречислениеМужской() Возврат Перечисления.Пол.Мужской; КонецФункции /// Как открыть форму списка справочника с нужным отображением /// в 1с 8.3, 8.2 &НаКлиенте Процедура КакОткрытьФормуСпискаСправочникаСНужнымОтображением(Команда) // откроем список клиентов с отображением "Список" ФормаСписка = ПолучитьФорму("Справочник.Клиенты.ФормаСписка"); ФормаСписка.Открыть(); ФормаСписка.Элементы.Список.Отображение = ОтображениеТаблицы.Список; КонецПроцедуры /// Как открыть форму только что созданного, но ещё /// не записанного элемента справочника в 1с 8.3, 8.2 &НаКлиенте Процедура КакОткрытьФормуНовогоНеЗаписанногоСправочника(Команда) // получаем форму нового справочника ФормаНовогоСправочника = ПолучитьФорму( "Справочник.Еда.ФормаОбъекта",,, Истина); // делаем копию её данных (так как напрямую их менять // нельзя) КопияДанныхФормы = ФормаНовогоСправочника.Объект; // заполняем эти данные на сервере ЗаполнитьДанныеФормыНаСервере(КопияДанныхФормы); // копируем заполненные данные в исходную форму КопироватьДанныеФормы(КопияДанныхФормы, ФормаНовогоСправочника.Объект); // показываем форму нового заполненного // элемента справочника пользователю ФормаНовогоСправочника.Открыть(); КонецПроцедуры &НаСервере Процедура ЗаполнитьДанныеФормыНаСервере(ДанныеФормы) // преобразуем данные формы в документ Еда = ДанныеФормыВЗначение(ДанныеФормы, Тип("СправочникОбъект.Еда")); Еда.Наименование = "Груша"; Еда.Калорийность = 500; // преобразуем документа обратно в данные формы ЗначениеВДанныеФормы(Еда, ДанныеФормы); КонецПроцедуры /// Скачать и выполнить эти примеры на компьютере
Дополнительные реквизиты в 1с 8 представляют из себя специальную табличную часть у некоторых документов и справочников. В ней хранятся дополнительные данные, касающиеся данного объекта метаданных. Данный механизм реализован только в конфигурация работающих на управляемом приложении. По своему назначению дополнительные реквизиты напоминают дополнительные сведения, разница в том, что доп. сведения хранятся в отдельном регистре, это их плюс, но зато доп. реквизиты автоматически выводятся на форму объекта. В этой статье будет рассказано, как получать и записывать дополнительные реквизиты программно.
Получить дополнительные реквизиты программно
Функция получает значение дополнительного реквизита объекта по ссылке и свойству.
- Ссылка. Тип: Любая ссылка. Ссылка на искомый объект;
- Свойство. Тип: План видов характеристик ДополнительныеРеквизитыИСведения. Дополнительное свойство.
Код:
Функция ПолучитьЗначениеДопРеквизита(Ссылка, Свойство) Экспорт
ПараметрыОтбора = Новый Структура;
ПараметрыОтбора.Вставить("Свойство",Свойство);
Массив = Ссылка.ДополнительныеРеквизиты.НайтиСтроки(ПараметрыОтбора);
Если Массив.Количество() = 0 Тогда
Возврат Неопределено;
Иначе
Возврат Массив[0].Значение;
КонецЕсли;
КонецФункции
Записать дополнительные реквизиты программно
Функция записывает значение доп. реквизита объекта по ссылке и свойству.
- Ссылка. Тип: Любая ссылка. Ссылка на искомый объект;
- Свойство. Тип: План видов характеристик ДополнительныеРеквизитыИСведения. Дополнительное свойство;
- Значение. Тип: заданный для данного свойства.
Функция ЗаписатьЗначениеДопРеквизита(Ссылка, Свойство, Значение)
Попытка
ОбъектСсылки = Ссылка.ПолучитьОбъект();
ПараметрыОтбора = Новый Структура;
ПараметрыОтбора.Вставить("Свойство",Свойство);
Массив = ОбъектСсылки.ДополнительныеРеквизиты.НайтиСтроки(ПараметрыОтбора);
Если Массив.Количество() = 0 Тогда
НовоеСвойство = ОбъектСсылки.ДополнительныеРеквизиты.Добавить();
НовоеСвойство.Свойство = Свойство;
НовоеСвойство.Значение = Значение;
Иначе
Массив[0].Значение = Значение;
КонецЕсли;
ОбъектСсылки.Записать();
Исключение
Возврат Ложь;
КонецПопытки
КонецФункции
Если вы еще не знаете, как правильно работать с механизмом дополнительных сведений в 1с 8, то прочтите об этом в статье 1С дополнительные сведения запись и получение.
20 / 19 / 1 Регистрация: 13.08.2012 Сообщений: 779 |
|
1 |
|
Доступ к реквизиту справочника26.10.2013, 18:55. Показов 26057. Ответов 12
Извиняюсь за дурацкий вопрос, но я что-то не могу понять как получить доступ к реквизиту существующего справочника из модуля обработки события «ПриИзменении» элемента формы документа, подскажите как правильно это сделать? Добавлено через 6 минут
0 |
Модератор 3708 / 2905 / 572 Регистрация: 10.03.2011 Сообщений: 11,442 Записей в блоге: 1 |
|
26.10.2013, 19:01 |
2 |
Из обработки или документа?
0 |
856 / 655 / 111 Регистрация: 01.11.2012 Сообщений: 2,410 |
|
26.10.2013, 19:10 |
3 |
Обычное или управляемое приложение?
0 |
20 / 19 / 1 Регистрация: 13.08.2012 Сообщений: 779 |
|
26.10.2013, 19:56 [ТС] |
4 |
честно говоря не знаю обычное оно или управляемое, ну в документе есть табличная часть, в этой табличной части есть реквизит и вот модуль вызывается при изменении реквизита табличной части документа, необходимо реализовать что-то типо авто рассчета…
0 |
856 / 655 / 111 Регистрация: 01.11.2012 Сообщений: 2,410 |
|
26.10.2013, 19:58 |
5 |
Код выкладывай процедуры
0 |
NEvOl 20 / 19 / 1 Регистрация: 13.08.2012 Сообщений: 779 |
||||
26.10.2013, 20:12 [ТС] |
6 |
|||
Вот код
говорит необъявленная переменная «Справочники»
0 |
856 / 655 / 111 Регистрация: 01.11.2012 Сообщений: 2,410 |
|
26.10.2013, 20:24 |
7 |
К данным нельзя обращаться на клиенте, перенеси процедуру получения реквизита на сервер
0 |
NEvOl 20 / 19 / 1 Регистрация: 13.08.2012 Сообщений: 779 |
||||||||||||
26.10.2013, 21:04 [ТС] |
8 |
|||||||||||
переделал так:
теперь не работает, не заполняет поле Сумма, но ошибки не выдает Добавлено через 17 минут
Создал общий модуль
при изменении количество часов выпригивает ошибка » Метод объекта не обнаружен (ПолучитьРеквизит)» что я напортачил ?
0 |
Dethmontt Модератор 3708 / 2905 / 572 Регистрация: 10.03.2011 Сообщений: 11,442 Записей в блоге: 1 |
||||
26.10.2013, 21:52 |
9 |
|||
Каша у вас в голове (в коде)
» Метод объекта не обнаружен (ПолучитьРеквизит)» что я напортачил ? Это потому что ты галочку у модуля не поставил (вызов сервера) Добавлено через 28 секунд Не по теме: То что у вас написано вряд ли вообще работать будет… Добавлено через 8 минут
1 |
20 / 19 / 1 Регистрация: 13.08.2012 Сообщений: 779 |
|
26.10.2013, 21:59 [ТС] |
10 |
а что делает функция Сообщить ? зачем она ? и в качестве форматного параметра можно передовать строковую константу если мне всегда необходимо для 1 сотрудника рассчитывать ? Добавлено через 48 секунд
0 |
duk337 |
26.10.2013, 22:05
|
Не по теме: а что делает функция Сообщить ? вот единственно: на сервере не работает. А так: сообщает. Синт.пом глядим, да?
0 |
20 / 19 / 1 Регистрация: 13.08.2012 Сообщений: 779 |
|
26.10.2013, 22:19 [ТС] |
12 |
и почему пропущено имя справочника ? при получении ссылки Добавлено через 10 минут
0 |
0 / 0 / 0 Регистрация: 17.12.2015 Сообщений: 1 |
|
17.12.2015, 19:37 |
13 |
СПАСИБО!
0 |
Как обратиться к реквизитам справочника из модуля формы
Автор Andrepan, 23 янв 2017, 11:06
0 Пользователей и 1 гость просматривают эту тему.
Здравствуйте! Подскажите пожалуйста, как обратиться к реквизитам справочника из модуля формы документа. Есть табличная часть документа, в которой производится отбор номенклатуры товара по поставщикам из справочника НоменклатураПоставщиков. Нужно, чтобы при записи номенклатуры в документе, из соответствующих реквизитов Справочника поставщиков переносились в ячейки таблицы Документа характеристики товаров.
Делаю ПриИзменении (для записи Номенклатуры в документе) и объявляю переменную
СтрокаТабличнойЧасти = Элементы.ПриложениеКЗаявлению.ТекущиеДанные;
СтрокаТабличнойЧасти.ТНВД = ??
Если долго всматриваться в учебник…то в голову может прийти мысль его открыть!
Цитата: Andrepan от 23 янв 2017, 13:06Объект — Имя справочника справочника, реквизит — необходимый реквизит??
В данном случае Объект — это текущий документ, а если нужны значения реквизитов справочника, то только через сервер.
Спасибо за Сказать спасибо
...
СтрокаТабличнойЧасти = Элементы.ПриложениеКЗаявлению.ТекущиеДанные;
СтруктураРеквизитов = ПолучитьСтруктуруРеквизитов(СтрокаТабличнойЧасти.Номенклатура);
СтрокаТабличнойЧасти.ТНВД = СтруктураРеквизитов.ТНВД;
СтрокаТабличнойЧасти.ЛюбойРеквизитНоменклатуры = СтруктураРеквизитов.ЛюбойРеквизитНоменклатуры;
...
&НаСервере
Функция ПолучитьСтруктуруРеквизитов(НоменклатураСсылка)
СтруктураРеквизитов = Новый Структура;
СтруктураРеквизитов.Вставить("ТНВД", НоменклатураСсылка.ТНВД);
СтруктураРеквизитов.Вставить("ЛюбойРеквизитНоменклатуры", НоменклатураСсылка.ЛюбойРеквизитНоменклатуры);
Возврат СтруктураРеквизитов;
КонецФункции
Правило поведения на форуме №6: Не следует пытаться привлечь внимание к своему сообщению … рассылкой персональных сообщений и/или электронных писем отдельным участникам форума с просьбой ответить в теме.
Цитата: Golickoff от 24 янв 2017, 05:01
...
СтрокаТабличнойЧасти = Элементы.ПриложениеКЗаявлению.ТекущиеДанные;
СтруктураРеквизитов = ПолучитьСтруктуруРеквизитов(СтрокаТабличнойЧасти.Номенклатура);
СтрокаТабличнойЧасти.ТНВД = СтруктураРеквизитов.ТНВД;
СтрокаТабличнойЧасти.ЛюбойРеквизитНоменклатуры = СтруктураРеквизитов.ЛюбойРеквизитНоменклатуры;
...&НаСервере
Функция ПолучитьСтруктуруРеквизитов(НоменклатураСсылка)
СтруктураРеквизитов = Новый Структура;
СтруктураРеквизитов.Вставить("ТНВД", НоменклатураСсылка.ТНВД);
СтруктураРеквизитов.Вставить("ЛюбойРеквизитНоменклатуры", НоменклатураСсылка.ЛюбойРеквизитНоменклатуры);
Возврат СтруктураРеквизитов;
КонецФункции
Спасибо большое! Все получилось.
С обращением к табличной части справочника все понял. Подскажите пожалуйста, а как обратиться для другой колонки табличной части этой же строки документа НоменклатураТовара, уже к реквизитам другого справочника. То есть, есть справочник ТНВД (в котором сам ТНВД код прописан в Наименовании в стандартных реквизитах) реквизитами этого справочника являются ставки: обеспечения, таможенных платежей и акцизов. Необходимо вытащить эти реквизиты и поместить в табличную часть документа
ПолучениеСправочника = Справочники.НужныСправочник.НайтиПоНаименованию(«наименование»).ПолучитьОбъект;
И Потом ПолучениеСправочника.НужныйВамРеквизит;
Но такой скрипт выполняется только на стороне сервера
То есть, я из процедуры модуля формы:
Процедура ПриложениеКЗаявлениюНоменклатураТоваровПриИзменении(Элемент)
Должен вызвать Функцию на сервере в которой будет выполняться данный скрипт?
Опубликовано в Статьи по 1С 27.10.2018
В библиотеке стандартных подсистем 1С дополнительные реквизиты и сведения включены и активно применяются. Эти механизмы позволяют добавить дополнительный реквизит к объекту метаданных без изменения типовой конфигурации. Принцип работы дополнительных реквизитов и сведений, их добавление и получение значений.
Отличие дополнительного реквизита от дополнительного сведения в том, что
- Дополнительные реквизиты – список реквизитов, доступных в форме документа или справочника; причем эти реквизиты хранятся в табличной части объекта, к которому они добавлены;
- Дополнительные сведения – список значений доступных по дополнительной кнопке; причем доп. сведения хранятся в отдельном регистре.
После ввода дополнительного реквизита или сведения 1С, можно создать подключаемую обработку, где считать введенные дополнительные данные и задать необходимую логику обработки данных, в которой использовать этот реквизит или сведение.
Как получить 1С дополнительные реквизиты и сведения программно:
Для получения дополнительных данных используем запрос, в котором получим значение дополнительных реквизитов и сведений:
////
Запрос = Новый Запрос;
Запрос.Текст =
«ВЫБРАТЬ РАЗРЕШЕННЫЕ
| ДополнительныеСведения.Свойство,
| ДополнительныеСведения.Значение
|ИЗ
| РегистрСведений.ДополнительныеСведения КАК ДополнительныеСведения
|ГДЕ
| ДополнительныеСведения.Объект = &Объект»;
Запрос.УстановитьПараметр(«Объект», СсылкаДокумент);
////
Для получения дополнительного реквизита использую код вида:
////
Запрос = Новый Запрос;
Запрос.Текст =
«ВЫБРАТЬ
| НоменклатураДополнительныеРеквизиты.Свойство,
| НоменклатураДополнительныеРеквизиты.Значение
|ИЗ
| Справочник.Номенклатура.ДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизиты
|ГДЕ
| НоменклатураДополнительныеРеквизиты.Свойство = &Свойство
| И НоменклатураДополнительныеРеквизиты.Ссылка = &Ссылка»;
Запрос.УстановитьПараметр(«Ссылка», СсылкаДокумент);
Запрос.УстановитьПараметр(«Свойство», ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию(«Коэффициент бруто»));
////
Теперь вы без труда сможете добавить и получить необходимые дополнительные 1С данные без снятия конфигурации 1С с поддержки и изменения типовой конфигурации. Без сомнения, такой инструмент должен быть в арсенале 1С программиста и активно использоваться в работе.