В работе начинающего разработчика 1С, особенно при столкновении с такими сложными и объемными конфигурациями, как 1С:Управление производственным предприятием (УПП), часто возникают ситуации, когда стандартные действия приводят к непонятным системным сообщениям. Одной из таких классических проблем является отказ системы проводить документ с формулировкой: «Документ должен принадлежать хотя бы одному из видов учета: Управленческий и (или) Бухгалтерский». В этой статье мы подробно разберем техническую сторону этого вопроса, а также составим план обучения для тех, кто только делает первые шаги в разработке на платформе 1С.
Для начала проанализируем ситуацию. Конфигурация УПП 1.3 построена на принципах многоцелевого учета. Это означает, что один и тот же документ может делать движения (записи) сразу в нескольких регистрах: управленческих, бухгалтерских и налоговых. Чтобы система понимала, по каким «рельсам» пускать данные, в каждом документе, влияющем на учет, предусмотрены специальные реквизиты типа Булево (Истина/Ложь).
Рассмотрим эти реквизиты подробнее:
Если при попытке проведения ни один из этих флагов не установлен, система выдает ошибку, так как документ фактически не выполняет никакой полезной работы в базе данных. Чтобы исправить ситуацию программно или через интерфейс, нам необходимо гарантировать, что хотя бы один из этих реквизитов равен Истина.
Выясним, где именно в коде происходит проверка и как ее обеспечить программно. В типовых решениях на базе УПП проверка заполнения этих реквизитов обычно вынесена в общий модуль (например, ОбщегоНазначения) или выполняется непосредственно в модуле объекта документа в процедуре ПередЗаписью или ОбработкаПроверкиЗаполнения.
Если нам нужно, чтобы при программном создании документа эти флаги проставлялись автоматически, мы должны явно указать это в коде. Разберем пример создания документа «Реализация товаров и услуг»:
НовыйДокумент = Документы.РеализацияТоваровУслуг.СоздатьДокумент();
НовыйДокумент.Дата = ТекущаяДата();
// Устанавливаем признаки принадлежности к видам учета
НовыйДокумент.ОтражатьВУправленческомУчете = Истина;
НовыйДокумент.ОтражатьВБухгалтерскомУчете = Истина;
// Заполнение остальных обязательных реквизитов
// ...
НовыйДокумент.Записать(РежимЗаписиДокумента.Проведение);
Однако стоит помнить, что в УПП существует механизм настроек пользователя. Рассмотрим ситуацию: если у пользователя в интерфейсе при создании новых документов флаги не проставляются автоматически, это чаще всего означает, что не заполнены «Настройки пользователя». Пройдите в меню Сервис — Настройки пользователя и проверьте значения по умолчанию для отражения в различных видах учета. Это позволит избежать лишнего написания кода там, где достаточно административной настройки.
Важно понимать, что УПП 1.3 — это конфигурация, работающая на обычных формах (толстый клиент). Проанализируем, почему это важно. Большинство современных обучающих материалов, включая популярное пособие М.Г. Радченко, ориентированы на управляемые формы и версию платформы 8.3. В УПП многие механизмы работают иначе:
ДвиженияПоРегистрам, которые вызываются из модуля объекта.Чтобы эффективно работать с УПП, мы рекомендуем использовать отладчик. Поставьте точку останова в процедуре ОбработкаПроведения и пройдите по шагам (клавиша F11), наблюдая, как система проверяет заполнение видов учета и в какой момент формируется текст ошибки.
Если вы чувствуете, что курсов «для галочки» было недостаточно, и теория кажется оторванной от практики, разберем последовательный план развития специалиста.
Начните с книги М.Г. Радченко, Е.Ю. Хрусталева «1C:Предприятие 8.3. Практическое пособие разработчика». Даже если вы работаете в старой УПП, эта книга даст вам фундаментальное понимание того, как устроены объекты метаданных: справочники, документы, регистры накопления и регистры сведений. Без понимания физики хранения данных в 1С приступать к коду бессмысленно.
Если база кажется слишком сложной, можно предварительно ознакомиться с книгой «1С:Программирование для начинающих» (под авторством того же Радченко), которая написана максимально простым языком. Она поможет преодолеть страх перед программным кодом.
Многие коллеги на форумах советуют «учиться на практике». Разберем, что это значит на самом деле. Не пытайтесь сразу переписать всю конфигурацию. Попробуйте выполнить следующие задачи:
Ситуация, когда на работе «бросают в воду» без обучения, типична. Если коллеги мешают учить теорию, попробуйте совмещать: используйте рабочие задачи как повод для изучения теории. Вам дали задачу по УПП? Откройте синтакс-помощник (Ctrl+F1) и изучите свойства объекта, с которым работаете. Читайте не просто код, а описание методов Записать(), Выбрать(), ПолучитьОбъект().
Помните, что теория без практики мертва, а практика без теории слепа. Вы не сможете написать качественный код, не понимая, как работают транзакции или блокировки данных, даже если «нагуглите» готовый кусок текста.
Подведем итог нашему разбору. Ошибка с видами учета в УПП — это всего лишь следствие незаполненных флагов ОтражатьВУправленческомУчете и ОтражатьВБухгалтерскомУчете. Исправить это можно либо в настройках пользователя, либо прямой установкой свойств объекта в коде.
Для профессионального роста мы советуем не ограничиваться текущей задачей. Проанализируйте структуру документа через «Конфигуратор», посмотрите на вкладку «Данные», увидьте эти реквизиты своими глазами. Постепенно переходите от простых правок к пониманию архитектуры всей системы. УПП — сложная школа, но пройдя её, вы станете специалистом, способным разобраться в любой другой конфигурации 1С, включая современные ERP-системы.