От оператора базы до разработчика: что на деле дают годы в 1С

· 9 мин

Содержание

Работа в 1С почти у всех начинается одинаково: сначала вы вводите документы как пользователь, потом начинаете понимать, откуда берутся цифры в отчётах, и только потом открываете Конфигуратор. Опыт программиста 1С растёт из опыта пользователя, а не вместо него. Тот, кто сам проводил реализации и закрывал месяц, пишет код, который не ломает учёт.

Путь от пользователя до разработчика проходит одни и те же ступени: интерфейс, метаданные, запросы, клиент-сервер, отладка, обновления. На каждой есть свои грабли и приёмы, которые отличают практика от новичка. Речь о платформе 8.3 с интерфейсом «Такси».

Рабочее место пользователя 1С: с чего начинается опыт

Первые недели в 1С уходят не на учёт, а на привыкание к интерфейсу. Типовые конфигурации (Бухгалтерия 3.0, ЗУП 3.1, УТ 11) построены одинаково: слева панель разделов, в разделе — списки документов, справочников и отчётов.

Что стоит настроить сразу:

  • ⭐ Избранное. Звёздочка в заголовке формы добавляет документ или отчёт в избранное. Пять-шесть ежедневных форм под рукой экономят десятки кликов.
  • 🗂 Панели. Расположение панелей меняется через Главное меню → Вид → Настройка панелей. Многие убирают панель открытых окон и оставляют только разделы.
  • 🔎 Поиск в списке. Ctrl+F в любом списке ищет по видимым колонкам. Отбор по колонке задаётся через контекстное меню ячейки.
  • 🧰 Команда «Все функции». Включается флажком в Главное меню → Сервис → Параметры. Через неё открывается любой объект базы, даже если его нет в разделах. Для пользователя это окно в «внутренности» базы и первый шаг к пониманию метаданных.

Настройки форм (колонки, отборы, сортировки) хранятся для каждого пользователя отдельно. Если форма «сломалась», в меню «Ещё» этой формы откройте её изменение и верните стандартные настройки. Данные при этом не меняются.

Что даёт пользовательский этап программисту

Пользователь понимает, как связаны документы: заказ → реализация → счёт-фактура → оплата. Он видит, что документ может быть записан, но не проведён, и чем это грозит отчётам. Он знает, что бухгалтер закрывает месяц и не любит, когда «плывут» прошлые периоды.

Без этого опыта программист делает формально правильные доработки, которые неудобны в работе.

Объекты метаданных: как устроена любая конфигурация 1С

Второй этап — понять, из чего состоит база. Откройте Конфигуратор (1cv8.exe с режимом «Конфигуратор» в окне запуска) и разверните дерево конфигурации. Там одни и те же виды объектов в любой типовой.

ОбъектЗачем нуженПример из типовой
СправочникСписки, которые редко меняютсяНоменклатура, Контрагенты
ДокументФакт хозяйственной операции, формирует движенияРеализация товаров и услуг
Регистр сведенийЗначения во времени или по набору измеренийКурсы валют, цены
Регистр накопленияОстатки и обороты количественного и суммового учётаТовары на складах
Регистр бухгалтерииПроводки по плану счетовХозрасчётный
ПеречислениеФиксированный список значенийВиды операций, ставки
План видов характеристикДополнительные свойства «на лету»Дополнительные реквизиты
Отчёт / обработкаЧтение и массовое изменение данныхОборотно-сальдовая ведомость
Общий модульПереиспользуемый кодМодули БСП
РольПрава доступаБухгалтер, Кладовщик

Ключевая мысль, которая приходит не сразу: документ сам по себе в отчётах не участвует. Отчёты читают регистры. Документ при проведении записывает в них движения. Поэтому вопрос «почему документ не попал в отчёт» почти всегда сводится к вопросу «какие движения он сделал».

Движения любого проведённого документа видно из его формы: в Бухгалтерии 3.0 это кнопка «Дт/Кт» в командной панели документа, в других конфигурациях — отчёт о движениях документа в той же панели. Это главный инструмент разбора расхождений и для пользователя, и для программиста.

Подсистемы, роли и БСП

Подсистемы задают разделы интерфейса, роли — права. Все типовые построены на БСП — Библиотеке стандартных подсистем. Из неё приходят печатные формы, дополнительные реквизиты, права доступа , обновление версий. Разработчику полезно знать её общие модули: многие задачи решаются вызовом готовой функции, а не своим кодом.

Язык запросов 1С: откуда берутся данные для отчётов

Язык запросов — главный навык разработчика 1С. Он похож на SQL, но работает с объектами метаданных, а не с таблицами СУБД напрямую. Начинать удобно с конструктора запросов (в модуле — контекстное меню, «Конструктор запроса») и консоли запросов из обработок.

Простой пример — остатки товаров на дату по складу:

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

Имя регистра в примере условное: в каждой конфигурации своё, смотрите в дереве метаданных.

Три вещи, которые отличают опытного разработчика:

  1. Условие в параметрах виртуальной таблицы, а не в ГДЕ. Остатки(&Дата, Склад = &Склад) отбирает данные до расчёта остатков. Тот же отбор в ГДЕ заставит платформу сначала посчитать всё, потом отбросить лишнее.
  2. Никаких запросов в цикле. Сто вызовов по одному товару медленнее одного запроса со списком через В (&СписокТоваров) или через временную таблицу (ПОМЕСТИТЬ).
  3. Осторожно с разыменованием. Обращение Номенклатура.Родитель.Наименование в запросе порождает соединения. Для составных типов их может быть много, и запрос резко тяжелеет. Тип уточняют через ВЫРАЗИТЬ.

Система компоновки данных

Отчёты в типовых сделаны на СКД. Запрос в ней — только источник; группировки, отборы и оформление пользователь настраивает сам. Освоить СКД — значит перестать писать «отчёты под каждую просьбу»: часто достаточно дать пользователю вариант отчёта с нужными полями.

Программирование в 1С: клиент, сервер и директивы компиляции

В управляемых формах код делится на клиентский и серверный. Это главный барьер для тех, кто пришёл из 7.7 или обычных форм 8.2.

ДирективаГде выполняетсяДоступ к данным формы
&НаКлиентена клиентеда
&НаСерверена сервереда, форма передаётся на сервер
&НаСервереБезКонтекстана серверенет, только параметры
&НаКлиентеНаСервереБезКонтекстатам, откуда вызвалинет

Практические правила:

  • 🚀 Каждый вызов сервера с клиента — это обмен по сети. Пять вызовов подряд при открытии формы заметны пользователю на удалённой базе. Собирайте нужное в один серверный вызов.
  • 📦 Если серверу не нужны данные формы, пишите &НаСервереБезКонтекста. Форма не передаётся целиком, вызов легче.
  • 🔒 На клиенте нельзя читать реквизиты ссылок через точку (Контрагент.ИНН). Значение получают серверной функцией.
  • 🧩 Общие модули настраиваются флажками «Клиент», «Сервер», «Вызов сервера», «Привилегированный». Без флажка «Вызов сервера» серверную функцию общего модуля с клиента не вызвать.
Проверьте себя
Процедура должна получить ИНН контрагента по ссылке, данные формы ей не нужны. Какую директиву выбрать?
Где лучше задать отбор по складу при чтении остатков?
Документ записан, но не проведён. Попадёт ли он в оборотно-сальдовую ведомость?

Транзакции и блокировки

В типовых используется управляемый режим блокировок. При записи движений в рабочей базе важно ставить управляемую блокировку на читаемые остатки (Новый БлокировкаДанных). Без неё два пользователя одновременно спишут один и тот же товар, и остаток уйдёт в минус.

Отладка и типичные ошибки разработчика 1С

Отладка — то, что новички осваивают последней, хотя нужна она с первого дня.

Инструменты отладки

  • 🐞 Отладчик Конфигуратора. Отладка → Начать отладку (F5), точка останова — F9, вычисление выражения — Shift+F9. В «Табло» держат переменные, которые смотрят постоянно.
  • ⏱ Замер производительности. Включается в меню «Отладка» во время сеанса отладки. Показывает, на какие строки ушло время. Сначала замер, потом оптимизация, не наоборот.
  • 📜 Технологический журнал. Настраивается файлом logcfg.xml в каталоге настроек платформы. Нужен, когда ошибка воспроизводится только на сервере или у одного пользователя.
  • 🖥 Отладка на сервере. В клиент-серверном варианте серверный код отлаживают, если служба агента запущена с ключом -debug.

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

Ошибки, которые совершает почти каждый

Диагностика: выберите симптом

Ещё одна частая беда — ловить исключения и молча их глотать. Попытка … Исключение КонецПопытки без записи в журнал регистрации прячет ошибку, и найти её потом почти невозможно. Пишите хотя бы ЗаписьЖурналаРегистрации с текстом ОписаниеОшибки().

Обновление и поддержка доработанных конфигураций

Любой практикующий программист 1С рано или поздно получает базу, которую «доработали так, что не обновить». Это следствие решений, принятых в начале.

Типовая конфигурация стоит на поддержке поставщика. Варианты работы с ней:

РежимЧто можноЦена при обновлении
На поддержке, изменения запрещеныТолько расширенияОбновление в один шаг
Изменения разрешены, поддержка сохраненаПравить типовые объектыСравнение-объединение при каждом релизе
Снята с поддержкиВсёРучной перенос каждого релиза

Порядок обновления типовой с доработками:

  1. Сделайте выгрузку базы в .dt или резервную копию СУБД.
  2. Загрузите файл обновления (.cfu) в конфигурацию поставщика.
  3. В окне сравнения-объединения разберите конфликты по объектам, которые меняли и вы, и поставщик.
  4. Выполните «Обновить конфигурацию базы данных» (F7). Для изменения структуры нужен монопольный доступ: пользователи должны выйти.
  5. Запустите базу в режиме предприятия: обработчики обновления БСП доделают перенос данных.

Не снимайте типовую с поддержки ради одной доработки — вы потеряете автоматическое обновление на все следующие годы.

Расширения конфигурации

Расширения появились в платформе 8.3.6 и стали основным способом доработки типовых. Расширение подключается поверх конфигурации, может перехватывать процедуры (&Перед, &После, &Вместо) и добавлять свои объекты. При обновлении основной конфигурации расширение остаётся на месте; проверить нужно только то, что перехваченные процедуры не переименовали.

Перед тем как дорабатывать типовую
Выполнено: 0 / 5

Как вырасти из пользователя в программиста 1С

Путь, который проходят большинство разработчиков, укладывается в несколько ступеней:

  1. Уверенный пользователь. Ввод документов, отчёты, команда «Все функции», движения документов.
  2. Администратор базы. Пользователи и права, резервные копии, обновления без доработок, загрузка и выгрузка .dt.
  3. Внедренец. Внешние печатные формы и отчёты на СКД, дополнительные реквизиты, настройка обменов.
  4. Разработчик. Запросы, управляемые формы, расширения, отладка и оптимизация.
  5. Эксперт по производительности. Технологический журнал, блокировки, работа с СУБД.

Учиться удобно на учебной версии платформы: она бесплатная, с ограничениями на объём данных и без клиент-серверного режима. Для подтверждения квалификации фирма 1С проводит экзамены «1С:Профессионал» и «1С:Специалист». Работодатели их спрашивают, но живые примеры решённых задач часто весят больше.

Частые вопросы

Нужно ли быть бухгалтером, чтобы программировать в 1С?
Нет, но понимать учёт нужно. Хотя бы знать, что такое проводка, остаток, закрытие месяца и почему нельзя менять закрытые периоды.
Сколько времени уходит на путь от пользователя до программиста?
Сроки индивидуальны. На практике первые самостоятельные доработки появляются после нескольких месяцев регулярной работы с запросами и формами.
Можно ли учиться на рабочей базе компании?
Нет. Учитесь на копии или на демобазе. Ошибка в коде проведения в рабочей базе испортит учёт за период.
Чем расширение лучше внешней обработки?
Внешняя обработка живёт отдельно и не меняет поведение типовых объектов. Расширение встраивается в конфигурацию и может перехватывать её процедуры, при этом не мешая обновлению.
Что изучать после языка запросов?
СКД и управляемые формы, затем расширения и механизм блокировок. Это покрывает большинство задач на поддержке типовых.