1С открыть форму списка справочника

Содержание

Учебный курс: Подготовка на 1С:Специалист по платформе 1С:Предприятие 8.3

При совместной работе нескольких пользователей в базе периодически возникает потребность указать другому пользователю конкретный объект в базе. Например, отправить письмо, что в определенном документе реализации нужно перезаполнить цены или назначить скидку. Как описать в письме конкретный объект? Для документа можно указать его номер и дату. Но тогда другому пользователю придется искать в списке документ по номеру, что не всегда быстро.

Существует другой вариант – можно отправить пользователю ссылку на документ, перейдя по которой сразу откроется форма этого документа. Таким образом, не нужно будет тратить время на поиск объекта в базе, что ускорит процесс обработки информации.

В платформе «1С:Предприятие» существует возможность получить ссылку на конкретный объект информационной базы (элемент справочника, документ, запись регистра сведений, отчет, обработку и так далее).

Для этого в окне соответствующего объекта нужно нажать кнопку «Получить ссылку»:

Рисунок 1 – Кнопка «Получить ссылку»

Окно получение ссылки выглядит следующим образом:

Рисунок 2 – Ссылка на элемент справочника «Номенклатура»

Ссылки системы «1С:Предприятие» начинаются с символов «e1c», что позволяет отличить их от других ссылок (например, от ссылок на веб-страницы, начинающихся с http, ссылок на FTP-сервера, начинающихся с ftp).

Ссылки в платформе «1С:Предприятие» бывают разных типов:

  • Ссылка на список, например, e1cib/list/Справочник.Номенклатура
  • Ссылка на объект базы, например, e1cib/data/Справочник.Номенклатура?ref=ba5694de806096e911e720efee9ad069
  • Ссылка на отчет, например, e1cib/app/Отчет.ТоварыНаСкладах
  • Ссылка на обработку, например, e1cib/app/Обработка.КонсольЗапросов
  • Некоторые другие (ссылка на реквизит объекта, ссылка на запись регистра, ссылка на временное хранилище и т.д.).

Полученную ссылку можно скопировать в буфер обмена, отправить другому пользователю по почте. Чтобы открыть объект по ссылке, нужно в области системных команд главного окна (справа) «1С:Предприятие» нажать на кнопку Перейти по ссылке:

Рисунок 3 – Кнопка «Перейти по ссылке»

В открывшемся окне можно вставить ссылку из буфера обмена или скопировать ее из почтового сообщения. При нажатии на кнопку Перейти система выполнит переход по введенной ссылке:

Рисунок 4 – Переход по ссылке

Более подробно работа с навигационными ссылками рассматривается в курсе Профессиональная разработка интерфейсов и форм в 1С:Предприятие 8.3 (см. Занятие 24).

Умение работать со ссылками в системе «1С:Предприятие» проверяется на экзамене. Ниже рассматривается пример подобной задачи:

В документе РасходнаяНакладная присутствует реквизит Комментарий, где пользователь может сохранить произвольные заметки по документу. В комментарии может содержаться навигационная ссылка на документ информационной базы. Например, это может быть ссылка на документ Счет на оплату, по которому была оформлена отгрузка.

Навигационная ссылка в комментарии может быть только одна. При нажатии на кнопку открытия комментария система должна выполнять переход по навигационной ссылке, содержащейся в поле Комментарий:

Рисунок 5 – Использование навигационной ссылки в комментарии

Рассмотрим, как решить поставленную задачу. Предварительно создадим в каркасной конфигурации недостающий документ СчетНаОплату.

К сожалению, у Вас недостаточно прав для дальнейшего просмотра.

Если Вы приобрели курс, но еще не активировали токен — пожалуйста, активируйте доступ по инструкциям, высланным на Ваш email после покупки.

Если Вы не залогинены на сайте — залогиньтесь, вернитесь на эту страницу и обновите ее.

Если Вы залогинены, у Вас активирован токен доступа, но Вы все равно видите эту запись — напишите нам на e-mail поддержки.

Доступ к макету из серверной функции

&НаСервере
Функция ПечатьТаблицы(ТЗ)
Перем ТабДокумент, КоличествоЭкземпляров, НаПринтер, Представление, НепосредственнаяПечать;
ТабДокумент = Новый ТабличныйДокумент;
ТабДокумент.ИмяПараметровПечати = «ПАРАМЕТРЫ_ПЕЧАТИ_Амортизация_Адреса»;
Макет =РеквизитФормыВЗначение(«Объект»).ПолучитьМакет(«Таблица»);
Возврат ТабДокумент;КонецФункции

Доступ к другой форме внешней обработки

&НаКлиенте
Процедура Сформировать()
СформироватьОтчетНаСервере();
ПараметрыОтчета = Новый Структура(«ТабДок,», СформироватьОтчетНаСервере() );
ПараметрыОтчета.Вставить(«ИмяПараметровПечати»,»ПАРАМЕТРЫ_ПЕЧАТИ_Амортизация_Адреса»);
ПараметрыОтчета.Вставить(«КоличествоЭкземпляров», 1);
ПараметрыОтчета.Вставить(«Представление»,»Данные по амортизации по адресам»);
ПараметрыОтчета.Вставить(«НепосредственнаяПечать»,Ложь);
ОткрытьФорму(«ВнешняяОбработка.АмортизацияОСпоАдресам.Форма.ФормаРезультата»,ПараметрыОтчета,ЭтаФорма);
КонецПроцедуры

Как не открывая форму внешней обработки выполнить ее процедуру для определенного объекта?

Обработка = ВнешниеОбработки.Создать(ИмяФайла);
Обработка.Печать(Ссылка);

Как открыть форму внешней обработки?

Обработка = ВнешниеОбработки.ПолучитьФорму(ИмяФайла); Обработка.Открыть();

Как открыть форму?

ФормаДокумента = СсылкаНаДокумент.ПолучитьФорму(); ФормаДокумента.Открыть(); Обработка = ВнешниеОбработки.ПолучитьФорму(«C:\Внешние\СпецОтчет.epf», ИмяФормы, , Ключ); Обработка.Открыть();

Как отрыть форму отчета так, чтобы она не перекрывала собой ту форму, из которой она открыта?

Форма = Отчеты.ОтчетДиаграмма.ПолучитьФорму(«ФормаОсновная», ЭтаФорма); Форма.ПоложениеОкна = ВариантПоложенияОкна.НеПерекрыватьВладельца; Форма.Открыть();

Как открыть форму отчета на весь экран?

СпособОтображенияОкна = ВариантСпособаОтображенияОкна.Максимизированное; ИзмененятьСпособОтображенияОкна = ИзменениеСпособаОтображенияОкна.Запретить;

Как из формы документа открыть форму списка данного документа, спозиционировавшись на нем же?

ФормаСписка = Документы.ПолучитьФормуСписка(); ФормаСписка.ПараметрТекущаяСтрока = Ссылка; ФормаСписка.Открыть(); ФормаСписка = Документы.ПолучитьФормуСписка( , , Новый УникальныйИдентификатор());

В документе есть реквизит «Контрагент». Как открыть форму подчиненного ему справочника «ДоговорыКонтрагентов»?

Если Не Контрагент.Пустая() Тогда ФормаПодчиненныхДоговоров = Справочники.ДоговорыКонтрагентов.ПолучитьФормуСписка(); ФормаПодчиненныхДоговоров.ПараметрОтборПоВладельцу = Контрагент; ФормаПодчиненныхДоговоров.Открыть(); КонецЕсли;

Как в форме отобразить картинку, сохраненную в реквизите справочника?

// Значение, сохраненное в реквизите справочника, имеющем тип // ХранилищеЗначения, можно только получить. СохраненнаяКартинка = Фотография.Получить(); Если СохраненнаяКартинка <> Неопределено Тогда // Если в хранилище было что-нибудь заранее записано… ЭлементыФормы.Фото.Картинка = СохраненнаяКартинка; КонецЕсли;

Как в журнале документов «УчетКадров» отобрать только документы «ПриемНаРаботу»?

ЖурналДокументовСписок.Отбор.ВидДокумента.Установить(Метаданные.Документы.ПриемНаРаботу);

Как узнать интервал дат в открытом текущем журнале?

Если ЖурналДокументовСписок.Отбор.Дата.Использование Тогда Сообщить(ЖурналДокументовСписок.Отбор.Дата); Иначе Сообщить(«Без ограничения по датам»); КонецЕсли;

Как при открытии справочника сделать отбор по контрагентам, входящим в список?

Процедура ПриОткрытии() СправочникСписок.Отбор.Ссылка.ВидСравнения = ВидСравнения.ВСписке; СправочникСписок.Отбор.Ссылка.Значение = СписокКонтрагентов; СправочникСписок.Отбор.Ссылка.Использование = Истина; КонецПроцедуры

Как обеспечить, чтобы для выбора значения покупателя в расходной накладной справочник контрагенты открывался сразу с открытой группой «Покупатели»?

Процедура КонтрагентНачалоВыбора(Элемент, СтандартнаяОбработка) Если Элемент.Значение.Пустая() Тогда СтандартнаяОбработка = Ложь; ФормаВыбора = Справочники.Контрагенты.ПолучитьФормуВыбора( , Элемент); ФормаВыбора.ВыборПокупателя = Истина; ФормаВыбора.Открыть(); КонецЕсли; КонецПроцедуры Если ВыборПокупателя Тогда ЭлементыФормы.СправочникСписок.ИерархическийПросмотр = Истина; ЭлементыФормы.СправочникСписок.ТекущийРодитель = Константы.ГруппаПокупатели.Получить(); КонецЕсли; Если ВыборПокупателя Тогда ЭлементыФормы.СправочникСписок.ИерархическийПросмотр = Истина; ЭлементыФормы.СправочникСписок.ТекущийРодитель = Справочники.Контрагенты.Покупатели; КонецЕсли;

Как в форме обеспечить выбор реквизита, подчиненного Владельцу?

// При начале выбора реквизита Помещение вызывается процедура: Процедура ПомещениеНачалоВыбора(Элемент, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; ФормаВыбора = Справочники.ПереченьПомещенийОбъекта.ПолучитьФормуВыбора( , Элемент); ФормаВыбора.СправочникСписок.Отбор.Владелец.ВидСравнения = ВидСравнения.Равно; ФормаВыбора.СправочникСписок.Отбор.Владелец.Использование = Истина; ФормаВыбора.СправочникСписок.Отбор.Владелец.Значение = Владелец; Помещение = ФормаВыбора.ОткрытьМодально(); Если Помещение <> неопределено Тогда ЭлементыФормы.Помещения.ТекущаяСтрока.Помещение = Помещение; КонецЕсли; КонецПроцедуры

Незакрывающая форма при выборе

Форма = ОткрытьФорму(«Справочник.ФизическиеЛица.ФормаВыбора»,Новый Структура(«РежимВыбора, ЗакрыватьПриВыборе», Истина, Ложь), ЭтаФорма);

Сохранение и восстановление пользовательских настроек формы

&НаСервере
Процедура ПриСохраненииПользовательскихНастроекНаСервере(Настройки)
БухгалтерскиеОтчетыВызовСервера.ПриСохраненииПользовательскихНастроекНаСервере(ЭтаФорма, Настройки);
КонецПроцедуры
&НаСервере
Процедура ПриЗагрузкеПользовательскихНастроекНаСервере(Настройки)
БухгалтерскиеОтчетыВызовСервера.ПриЗагрузкеПользовательскихНастроекНаСервере(ЭтаФорма, Настройки);
КонецПроцедуры

Как подготовить список выбора элемента формы

&НаКлиенте
Процедура АналитикаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
СтандартнаяОбработка = ложь;
ДанныеВыбора = ПолучитьСписокВидовДопаналитики(); // ПолучитьСписокВидовДопаналитики формирует по запросу и возвращает список
КонецПроцедуры

Вызов обработки, её инициализация, и запуск её процедур модуля объекта из других объектов по аналогии работы как с документом

Загрузчик = Обработки.СборДанных.Создать();
Загрузчик.Конфигурация = Конфигурация;
Загрузчик.КаталогКонфигурации = КаталогКонфигурации;
Загрузчик.Пользователь = Пользователь;
Загрузчик.Пароль = Пароль;
Сообщить(«Начало сбора сведений о структуре метаданных конфигурации»);
Результат = Загрузчик.ЗаполнитьСтруктуруКонфигурации();

Открытие форм через сведения метаданных

— При не управляемых формах

//ТипМетаданных = {«Справочники», «Документы», «Отчеты», …} ТипМетаданных = «Документы»;
// ТекОбъект = {«АвансовыйОтчет», «РКО», …} ТекОбъект = «АвансовыйОтчет»;
ТекстКода = ТипМетаданных + «.ПолучитьФорму(ФормаОбъекта).Открыть();»;
Выполнить(ТекстКода);
— При управляемых формах
//ТипМетаданных = {«Справочники», «Документы», «Отчеты», …} ТипМетаданных = «Документы»;
// ТекОбъект = {«АвансовыйОтчет», «РКО», …} ТекОбъект = «АвансовыйОтчет»;
Если ТипМетаданных = «Справочники» Тогда
ПутьКФорме = «Справочник.» +ТекОбъект+».Форма.»+ФормаОбъекта;
ИначеЕсли ТипМетаданных = «Документы» Тогда
ПутьКФорме = «Документ.» +ТекОбъект+».Форма.»+ФормаОбъекта;
ИначеЕсли ТипМетаданных = «ЖурналыДокументов» Тогда
ПутьКФорме = «ЖурналДокументов.» +ТекОбъект+».Форма.»+ФормаОбъекта;
ИначеЕсли ТипМетаданных = «Перечисления» Тогда
ПутьКФорме = «Перечисление.» +ТекОбъект+».Форма.»+ФормаОбъекта;
ИначеЕсли ТипМетаданных = «Отчеты» Тогда
ПутьКФорме = «Отчет.» +ТекОбъект+».Форма.»+ФормаОбъекта;
ИначеЕсли ТипМетаданных = «Обработки» Тогда
ПутьКФорме = «Обработка.» +ТекОбъект+».Форма.»+ФормаОбъекта;
ИначеЕсли ТипМетаданных = «ПланыВидовХарактеристик» Тогда
ПутьКФорме = «ПланВидовХарактеристик.» +ТекОбъект+».Форма.»+ФормаОбъекта;
ИначеЕсли ТипМетаданных = «ПланыСчетов» Тогда
ПутьКФорме = «ПланСчетов.» +ТекОбъект+».Форма.»+ФормаОбъекта;
ИначеЕсли ТипМетаданных = «ПланыВидовРасчета» Тогда
ПутьКФорме = «ПланВидовРасчета.» +ТекОбъект+».Форма.»+ФормаОбъекта;
ИначеЕсли ТипМетаданных = «РегистрыСведений» Тогда
ПутьКФорме = «РегистрСведений.» +ТекОбъект+».Форма.»+ФормаОбъекта;
ИначеЕсли ТипМетаданных = «РегистрыНакопления» Тогда

ПутьКФорме = «РегистрНакопления.» +ТекОбъект+».Форма.»+ФормаОбъекта;
ИначеЕсли ТипМетаданных = «РегистрыБухгалтерии» Тогда
ПутьКФорме = «РегистрБухгалтерии.» +ТекОбъект+».Форма.»+ФормаОбъекта;
ИначеЕсли ТипМетаданных = «РегистрыРасчета» Тогда
ПутьКФорме = «РегистрРасчета.» +ТекОбъект+».Форма.»+ФормаОбъекта;
ИначеЕсли ТипМетаданных = «БизнесПроцессы» Тогда
ПутьКФорме = «БизнесПроцесс.» +ТекОбъект+».Форма.»+ФормаОбъекта;
ИначеЕсли ТипМетаданных = «Задачи» Тогда
ПутьКФорме = «Задача.» +ТекОбъект+».Форма.»+ФормаОбъекта;
Иначе
Возврат;
КонецЕсли;
ОткрытьФорму(ПутьКФорме,,ЭтаФорма);

Получение списка форм

//ТипМетаданных = {«Справочники», «Документы», «Отчеты», …} ТипМетаданных = «Документы»;
// ТекОбъект = {«АвансовыйОтчет», «РКО», …} ТекОбъект = «АвансовыйОтчет»;
ТипОбъектов = Метаданные;
Для Каждого ИмяФормы Из ТипОбъектов.Формы Цикл
ЭлементыФормы.СписокФормОбъекта.СписокВыбора.Добавить(ИмяФормы.Имя);
КонецЦикла;

Переопределить событие формы

Форма.УстановитьДействие(«ПередЗаписью», «МП_ПередЗаписью»);

Печать (Ctrl+P)

Стандартные реквизиты

Для того чтобы на уровне конфигурации переопределять некоторые интерфейсные свойства (такие как синоним, проверка заполнения и т. д.) стандартных реквизитов (например, Код, Наименование, Родитель) и стандартных табличных частей (например, ВидыСубконто, БазовыеВидыРасчета) прикладных объектов, существует возможность настройки этих свойств.

Стандартные реквизиты

Для этого в палитре свойств ряда объектов существуют команды, открывающие списки стандартных реквизитов и стандартных табличных частей . Такие команды доступны для тех объектов, у которых имеются стандартные реквизиты и стандартные табличные части.
С помощью палитры свойств можно переопределять некоторые свойства стандартных реквизитов таким образом, чтобы они более полно соответствовали требованиям решаемой прикладной задачи. Например, для свойства Владелец справочника РасчетныеСчета можно задать синоним Контрагент. Тогда во всех формах представление этого реквизита (Владелец) по умолчанию будет выглядеть как «Контрагент:».
В том случае если свойства стандартного реквизита (или стандартной табличной части) не заданы, будут использованы свойства стандартных реквизитов по умолчанию.
По своему набору свойств стандартный реквизит практически ничем не отличается от любого другого реквизита, за исключением того, что нельзя изменить:
● имя стандартного реквизита,
● тип стандартного реквизита,
● имя стандартной табличной части,
● индексирование стандартного реквизита.
ВНИМАНИЕ! Наличие описания стандартного реквизита не меняет его имени, то есть все обращения к реквизиту во встроенном языке и в языке запросов остаются неизменными.

1С:Предприятие 8.2 /
Разработчикам /
Создание и изменение объектов метаданных

См. также

1.1. Для реквизитов строкового типа следует использовать переменную длину строки (свойство Допустимая длина = Переменная) и при этом указывать максимально допустимую длину строки. Свойство Допустимая длина может принимать значение Фиксированная только в тех случаях, когда при манипуляции этими данными действительно необходимо иметь гарантию, что строка имеет определенную длину (за счет автоматического дополнения концевыми пробелами).

1.2 В тех случаях, когда максимальная длина строки заранее известна (например, она регламентирована), следует указывать ее в свойстве Длина (или Длина наименования для стандартного реквизита Наименование). Например, длина строкового реквизита ИНН справочника ФизическиеЛица должна составлять 12 символов.

1.3. Если строка является конкатенацией других строк, то ее длина может быть определена как сумма длин исходных строк. Например, длина представления адреса должно равняться сумме длин полей, в которых хранятся части адреса.

1.4 Если длина строки не регламентирована, то рекомендуется выбирать такую длину, которой достаточно для хранения данных в большинстве случаев. Например, для хранения полного наименования контрагента в подавляющем большинстве случаев достаточно 250 символов, максимальная длина имени файла в большинстве файловых системах – 260, полное имя физического лица – 100 и т.п.

2. В отдельных случаях, допускается использование строк неограниченной длины:

2.1. Предполагается, что в реквизит строкового типа может быть помещен пользовательский текст, объем которого может быть значительным. Как правило, это многострочные поля на форме . Например, в поле Дополнительное описание в заказе клиента менеджер может поместить всю историю переписки с клиентом, в поле Комментарий – пользователь может ввести произвольный многострочный текст и т.п.

2.2. В строковом реквизите хранится различная техническая информация, которая генерируется программами и, чаще всего, не предназначена для чтения пользователем, а используется в различных алгоритмах обработки информации. Например, xml-документы, заголовки почтовых сообщений и т.п.

3. В случае использования строковых реквизитов неограниченной длины следует иметь в виду возникающие при этом ограничения в языке запросов:

3.1 При необходимости сравнения значений, группировки и получения различных, такие реквизиты необходимо выражать как строку определенной длины, такой, чтобы выражение было вычислено верно.

Для этих целей в запросе рекомендуется использовать конструкцию

ВЫРАЗИТЬ КАК СТРОКА(1000)

3.2. В отчетах СКД для таких полей следует, вместо этого, задавать параметр Типзначения поля (на закладке Наборы данных).

Следует иметь в виду, что частое приведение неограниченной строки к определенной длине в запросах и отчетах СКД может быть признаком неправильного проектного решения и служить сигналом для пересмотра типа строковго реквизита в пользу ограниченной длины строки.

3.3. В остальных случаях, урезать строку в запросах не требуется.

4.1. Если в печатных формах предусмотрено отображение строкового поля, то независимо от того, какая назначена длина строки, необходимо обеспечить вывод таких строк полностью, без обрезания части строки. В противном случае, может быть утеряна значимая часть информации. Например, номер дома и квартиры в поле с адресом доставки товара в печатной форме.

См. также

  • Для быстрого выявления в конфигурации всех строковых реквизитов неограниченной длины можно воспользоваться приложенной обработкой СтрокиНеограниченнойДлины.erf
  • Формирование печатных форм
  • Ограничение на использование конструкции » ОБЪЕДИНИТЬ ВСЕ » в запросах

Другие материалы по теме:
объединить все, объединить, комментарий, произвольный, отображение, группировки, формирование, строка, реквизиты, строки, буфер обмена, копировать, пользователь, использование, информация, справочника, наименование, конфигурирование, реквизит, пример, на закладке, контрагент, справочник, отчет, конфигурации

Во встроенном языке 1С:Предприятие 8 есть два способа программного копирования объектов информационной базы (элементов справочников, документов и т.п.):

Если не требуется открывать форму нового объекта

У каждого объекта или ссылки на объект есть метод Скопировать(), который возвращает копию объекта:

НовыйОбъект = СсылкаНаОбъект.Скопировать(); НовыйОбъект.Записать();

Обратите внимание, что создаваемая копия объекта на момент завершения метода еще не записана в базу.

Если требуется открыть форму нового объекта

Если необходимо скопировать и открыть форму нового объекта, предыдущий метод будет некорректным, т.к. пользователь должен иметь возможность отказаться от сохранения объекта. В таком случае нужно воспользоваться параметром ЗначениеКопирования формы объекта:

ПараметрыФормы = Новый Структура(«ЗначениеКопирования», СсылкаНаОбъект); ОткрытьФорму(«Справочник.Номенклатура.ФормаОбъекта», ПараметрыФормы);

При необходимости, пользователь сможет сохранить новый объект или отказать от его сохранения

Указанные решения справедливы при копировании элементов справочников, документов, а также других объектов ссылочного типа