- Что именно можно открывать при старте 1С
- Вариант 1. Назначить АРМ по умолчанию (без кода)
- Вариант 2. Программно открыть форму при старте через ПриНачалеРаботыСистемы
- Вариант 3. Открыть форму списка с заранее заданным отбором (данные + отбор)
- Типовые ошибки при “настройках открытия форм” и как их избежать
- Практическая схема под вашу задачу (коротко)
- Нормативная база по методу открытия форм
Если вы ищете, как сделать так, чтобы при старте 1С автоматически открывалась нужная форма (например, АРМ заказ-наряды) или форма списка с готовым отбором, то базовая идея одна: в управляемом приложении это делается через модуль управляемого приложения и/или настройки функциональных панелей, а внутри самой формы - через механизм отборов динамического списка.
Ниже разложу по полочкам рабочие варианты, чтобы вы не тратили время на “переменная не определена” и на ситуации, когда платформа “не видит” нужный объект.
Что именно можно открывать при старте 1С
Обычно хотят одно из двух:
| Задача | Что открывают | Где настраивается |
|---|---|---|
| “У пользователя при запуске открывается нужный АРМ/рабочее место” | функциональная панель + закрепленное АРМ | настройки функциональных панелей (звездочка - назначить АРМ по умолчанию) |
| “При старте сразу показать форму/список с отбором” | конкретная управляемая форма (форма списка, форма выбора) | программно - через ПриНачалеРаботыСистемы() в модуле управляемого приложения, либо через открытие формы из клиентского контекста, если нужно учитывать доступность |
Вариант 1. Назначить АРМ по умолчанию (без кода)
Это самый “правильный” и быстрый путь, когда вам нужно именно при входе открыть нужное рабочее место.
Логика простая: в настройке функциональной панели у каждого пользователя (или роли) можно назначить АРМ по умолчанию.
Что делают обычно:
- открывают настройку функциональной панели;
- выбирают нужное АРМ;
- нажимают на звездочку “Назначить АРМ по умолчанию”;
- при запуске функциональная панель стартует с нужным АРМ.
Это встречается и в реальных кейсах пользователей: в демо базе, где у администратора открывается несколько разделов сразу, аналогично можно закреплять один АРМ для конкретного сценария.
Вариант 2. Программно открыть форму при старте через ПриНачалеРаботыСистемы
Когда нужна не просто “панель”, а именно открытие произвольной формы/списка/обработки сразу после старта, в управляемом приложении используйте модуль управляемого приложения.
Куда писать код
В модуле управляемого приложения (не в обычном модуле):
ПриНачалеРаботыСистемы()ПередНачаломРаботыСистемы()
И важно: в управляемом приложении эти точки живут в контексте, где корректно использовать доступные механизмы платформы.
Встречающаяся ошибка “переменная не определена (Обработки)” появляется, когда пытаются обратиться к объектам метаданных из места, где нет нужного контекста (например, на сервере в момент, когда ожидается клиентская переменная/контекст).
Правильный подход: открывать через имя формы (управляемая форма)
В управляемом приложении для открытия формы обычно используют вызов вида ОткрытьФорму(...) (в нужном контексте). Ключевые моменты:
- имя формы должно быть составлено корректно;
- работать нужно с управляемыми формами;
- иногда “из сервера” удобнее инициировать открытие так, чтобы реальное открытие шло из подходящего клиентского контекста (зависит от платформы/версии конфигурации).
Пример концепции (упрощенно):
&НаКлиенте
Процедура ОткрытьНужнуюФорму()
ОткрытьФорму("ИмяФормы");
КонецПроцедуры
&НаСервере
Процедура ПриНачалеРаботыСистемы(Отказ, СтандартнаяОбработка)
// Здесь логика подготовки. Открытие - через клиентский вызов.
// Конкретный способ инициирования зависит от вашей платформы/обработчика.
КонецПроцедуры
Как понять, почему “ничего не видит”
Чаще всего причины такие:
- форма не управляемая или задано не то имя стандартной формы;
- указали имя в стиле, который подходит не для вашего типа (внешняя/внутренняя обработка);
- открытие выполняется там, где нет клиентского контекста (типичная причина того, что на сервере “нет Обработки....”);
- неправильная строка пути к форме: платформа строго требует корректный путь по метаданным.
Для метода ОткрытьФорму важно, что при открытии по имени используется полный путь к форме метаданных и параметры (если нужно). Это описано в справке по ОткрытьФорму (метод глобального контекста).
Источник: документация 1С по ОткрытьФорму (Global context.OpenForm / ОткрытьФорму).
https://its.1c.ru/db/content/v8std/src/1%C2%A0200/700/i8100404.htm
Вариант 3. Открыть форму списка с заранее заданным отбором (данные + отбор)
Самая частая прикладная история: “хочу, чтобы пользователю открывался список, но сразу отфильтрованный”. В управляемом интерфейсе это делается через отбор динамического списка.
Ключевой момент: отбор работает нормально там, где основной реквизит формы - Динамический список.
Способ первый: передать отбор параметром при открытии формы
Это самый простой сценарий, когда отбор задается “по полю = значение”.
&НаКлиенте
Процедура ОткрытьСписокПоставщиков(Команда)
ЗначениеОтбора = Новый Структура("ЭтоПоставщик", Истина);
ПараметрыФормы = Новый Структура("Отбор", ЗначениеОтбора);
ОткрытьФорму("Справочник.Контрагенты.ФормаСписка", ПараметрыФормы);
КонецПроцедуры
Если нужно несколько условий:
&НаКлиенте
Процедура ОткрытьСписокМосковскихПоставщиков(Команда)
ЗначениеОтбора = Новый Структура;
ЗначениеОтбора.Вставить("ЭтоПоставщик", Истина);
ЗначениеОтбора.Вставить("Город", "Москва");
ПараметрыФормы = Новый Структура("Отбор", ЗначениеОтбора);
ОткрытьФорму("Справочник.Контрагенты.ФормаСписка", ПараметрыФормы);
КонецПроцедуры
Что важно проверить:
- имя поля в структуре должно совпадать с полем динамического списка;
- условия зависят от того, что именно умеет поддерживать конкретный тип отбора;
- регистр/точность имени могут критично сказаться.
Способ второй: фиксировать отбор через настройки компоновки данных
Если простого “равно” мало, вы формируете НастройкиКомпоновкиДанных и отдаете их форме через параметры (часто используют ключ ФиксированныеНастройки).
Конструкция обычно такая:
- собираете элементы отбора компоновки данных;
- указываете Использование = Истина;
- можете ограничить изменение пользователем (например, сделать недоступным);
- передаете в форму фиксированные настройки.
Логика по смыслу хорошо описана в практических материалах по “программному открытию форм списка с отбором” (например, публикации, где разбираются способы через параметр “Отбор”, через элементы компоновки и через ПриСозданииНаСервере).
Одна из таких статей:
https://moscowsoft.com/statii/programmirovanie_na_1s_predpriyatie/otkryt_formu_spiska_1s_programmno_s_otborom/
Способ третий: проставить отбор внутри формы в ПриСозданииНаСервере
Когда вы не хотите (или не можете) навязывать настройки при открытии, отбор можно применить уже внутри формы.
Схема:
- при открытии передаете параметр (например, ОтборПоСтатусу);
- внутри формы в ПриСозданииНаСервере проверяете параметр;
- добавляете элемент отбора в Список.Отбор.Элементы.
Этим способом удобно, когда формат отбора сложнее и хочется держать логику ближе к форме.
Типовые ошибки при “настройках открытия форм” и как их избежать
| Проблема | Почему так происходит | Как исправить |
|---|---|---|
“переменная не определена (Обработки)” при попытке открыть обработку/форму в ПриНачалеРаботыСистемы |
нет нужного контекста (сервер/клиент), неверный способ доступа к объекту | открывать управляемую форму корректным способом через ОткрытьФорму и правильное имя; если нужно - разделить серверную “инициацию” и клиентское “открытие” |
| Форма открывается, но “всё пусто” или отбор не применяется | имя поля отбора не совпало с полем динамического списка; ключ параметров отборов неверный | проверить имена полей, ключи параметров (например, “Отбор” или “ФиксированныеНастройки”), убедиться, что основа формы - Динамический список |
| Пользователь может поменять отбор (или наоборот, ему недоступно то, что нужно) | режим отображения/доступности элемента отбора настроен неверно | задавать нужный режим отображения (например, если цель - фиксировать отбор) |
“ничего не видит” нужную форму после ОткрытьФорму("Обработки...") |
указано не то имя/путь, или форма не управляемая/не соответствует формату имени | использовать корректный путь к метаданным формы и стандартные имена форм; свериться с формальными правилами для ОткрытьФорму |
Практическая схема под вашу задачу (коротко)
| Что вы хотите получить | Самый простой рабочий вариант |
|---|---|
| Пользователь при старте открывает нужный АРМ (заказ-наряды) | назначить АРМ по умолчанию на функциональной панели (звездочка) |
| При старте открывается конкретный список, сразу с фильтром | открыть форму списка и передать отбор параметром “Отбор” (если подходит), либо ФиксированныеНастройки |
| При старте нужно “рандомно” открыть форму/обработку | через ПриНачалеРаботыСистемы, но открытие делать корректно для управляемых форм и подходящего контекста (и не пытаться обращаться к объектам, которых в данном контексте нет) |
Нормативная база по методу открытия форм
Для программного открытия управляемых форм ключевой ориентир - описание метода ОткрытьФорму в документации 1С (глобальный контекст, синтаксис “по названию”, требования к имени и поведению).
https://its.1c.ru/db/content/v8std/src/1%C2%A0200/700/i8100404.htm
Если резюмировать одним предложением: АРМ на старте закрепляйте настройками функциональной панели, а “отбор при открытии” задавайте через параметры динамического списка (данные + отбор), либо применяйте фиксированные настройки компоновки, а программное открытие формы запускайте из правильного контекста через точки модуля управляемого приложения.