Как включить суммовой учет по складам для счета 10 в 1С:Комплексная автоматизация 2.4 без конфигуратора?

Программист 1С v8.3 (Управляемые формы) 1С:Комплексная автоматизация Бухгалтерский учет
← На главную

При работе в 1С:Комплексной автоматизации 2.4 (КА 2.4) пользователи часто сталкиваются с необходимостью включить ведение суммового учета для субконто "Склад" на счете 10 "Материалы". Это стандартная практика для корректного отражения себестоимости материалов в разрезе складов. Однако, в отличие от 1С:Бухгалтерии, где такая настройка доступна напрямую через пользовательский интерфейс, в КА 2.4 прямой и очевидной опции для этого нет. Рассмотрим, почему это так и какие существуют способы решения этой задачи.

В типовых конфигурациях 1С:Комплексная автоматизация и 1С:ERP аналитика по предопределенным счетам, таким как счет 10, часто жестко задана разработчиками. Это сделано для обеспечения корректной работы сложных механизмов учета затрат, себестоимости, партионного учета и т.д. Попытка изменить признаки учета субконто для таких счетов через стандартный интерфейс может быть заблокирована системой с сообщением о том, что "Состав видов субконто на этом счете определяется настройкой параметров учета." Это указывает на то, что параметры учета субконто могут быть установлены на более низком уровне, возможно, при первичном запуске, обновлении информационной базы или являются частью внутренней логики программы, не доступной для прямого редактирования пользователем.

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

Метод 1: Временная модификация формы счета в режиме конфигуратора для установки признака

Этот метод подразумевает прямое изменение кода формы счета в режиме "Конфигуратор" на короткий период, чтобы обойти встроенные проверки платформы и установить нужный признак. Мы настоятельно не рекомендуем этот подход для постоянного использования, так как он требует прямого изменения типовой конфигурации, что может усложнить дальнейшие обновления. Однако, как временное решение, он может быть использован для быстрого восстановления работоспособности.

  1. Создание резервной копии: Прежде чем приступать к любым изменениям в конфигурации, обязательно сделайте полную резервную копию вашей информационной базы. Это критически важный шаг для предотвращения потери данных.
  2. Открытие конфигуратора: Запустите 1С:Предприятие в режиме "Конфигуратор".
  3. Навигация к форме плана счетов: В дереве метаданных найдите "Планы счетов" -> "Хозрасчетный" -> "Формы" -> "ФормаСчета". Откройте эту форму.
  4. Поиск и комментирование проверки: В модуле формы найдите процедуру &НаКлиенте Процедура ВидыСубконтоПередНачаломИзменения(Элемент, Отказ). Внутри этой процедуры обычно присутствует проверка, которая блокирует изменение видов субконто для определенных счетов. Мы обнаруживаем, что код, отвечающий за эту блокировку, выглядит примерно так:
    
    //Если ЗапрещенныйСчет Тогда
    // ПредупреждениеОНевозможностиИзмененияСоставаВидовСубконто(Отказ);
    //КонецЕсли;
    
    Временно закомментируйте эти строки, как показано выше, добавив // в начале каждой строки. Это отключит проверку на момент нашего редактирования.
  5. Обновление конфигурации базы данных: После комментирования кода сохраните изменения и обновите конфигурацию базы данных (меню "Конфигурация" -> "Обновить конфигурацию базы данных" или F7).
  6. Запуск 1С:Предприятия в пользовательском режиме: Откройте базу в режиме пользователя.
  7. Переход в План счетов: Зайдите в раздел "План счетов" (обычно доступен через "Главное" или "Все функции" -> "Стандартные" -> "Планы счетов").
  8. Редактирование счета 10: Откройте счет 10 "Материалы" для редактирования.
  9. Установка признака "Суммовой": Перейдите к настройкам субконто для счета 10. Теперь, когда проверка отключена, вы сможете установить галку "Суммовой" для субконто "Склады".
  10. Запись счета: После установки галки запишите изменения в счете.
  11. Возврат изменений в конфигураторе: Обязательно вернитесь в "Конфигуратор" и раскомментируйте ранее закомментированные строки в процедуре ВидыСубконтоПередНачаломИзменения. Обновите конфигурацию базы данных. Это необходимо для восстановления типового поведения системы и предотвращения несанкционированных изменений в будущем.

Этот метод позволяет добиться желаемого результата, но он требует осторожности и четкого выполнения шагов по возвращению конфигурации к исходному состоянию.

Метод 2: Использование расширения конфигурации (рекомендуемый подход)

Использование расширений — это наиболее современный и рекомендуемый способ внесения изменений в типовые конфигурации 1С без снятия их с поддержки. Мы можем создать расширение, которое перехватит вызов функции или процедуры, блокирующей изменение, и позволит нам выполнить необходимое действие.

  1. Создание расширения:
    • Запустите 1С:Предприятие в режиме "Конфигуратор".
    • Откройте меню "Конфигурация" -> "Расширения конфигурации".
    • Нажмите "Добавить" для создания нового расширения. Дайте ему осмысленное имя, например, "ИсправлениеУчетаСкладов".
  2. Добавление объекта "План счетов Хозрасчетный" в расширение:
    • В дереве объектов конфигурации найдите "Планы счетов" -> "Хозрасчетный".
    • Кликните по нему правой кнопкой мыши и выберите "Добавить в расширение".
    • Аналогично добавьте форму "ФормаСчета" для "Плана счетов Хозрасчетный" в расширение.
  3. Перехват процедур и функций:
    • В расширении откройте форму "ФормаСчета".
    • В модуле формы расширения мы можем перехватить процедуру ВидыСубконтоПередНачаломИзменения. Для этого в модуле формы расширения создайте свою версию этой процедуры с директивой &Перед или &Вместо.
      
      &Вместо Процедура ВидыСубконтоПередНачаломИзменения(Элемент, Отказ)
          // В этом месте мы можем пропустить оригинальную проверку, если это необходимо
          // или добавить свою логику.
          // Если мы хотим разрешить изменение для счета 10, мы можем просто ничего не делать
          // или установить Отказ = Ложь
          // Пример:
          // Если Элемент.ТекущиеДанные.Ссылка = ПланыСчетов.Хозрасчетный.Материалы Тогда
          //     Отказ = Ложь; // Разрешаем изменение для счета 10
          // Иначе
          //     // Вызываем оригинальную процедуру, если нужно сохранить стандартное поведение для других счетов
          //     ВызовОригинальнойПроцедуры(Элемент, Отказ);
          // КонецЕсли;
      
          // В данном случае, чтобы полностью отключить запрет для счета 10,
          // мы можем просто не выполнять никакой блокировки для него.
          // Или, как вариант, можно переопределить функцию ПолучитьЗапрещенныеСчета
          // В модуле формы, который мы добавили в расширение, найдите функцию:
          // &ИзменениеФункции ПолучитьЗапрещенныеСчета()
          // ЗапрещенныеСчета = Новый СписокЗначений;
          // // Добавляем только те счета, которые мы действительно хотим запретить
          // // Например, все, кроме счета 10
          // Для каждого СчетЗапрета Из ОригинальныеЗапрещенныеСчета() Цикл
          //     Если СчетЗапрета <> ПланыСчетов.Хозрасчетный.Материалы Тогда
          //         ЗапрещенныеСчета.Добавить(СчетЗапрета);
          //     КонецЕсли;
          // КонецЦикла;
          // Возврат ЗапрещенныеСчета;
      
          // Самый простой способ: если текущий счет - Материалы, разрешаем редактирование.
          Если Элемент.ТекущиеДанные.Ссылка = ПланыСчетов.Хозрасчетный.Материалы Тогда
              Отказ = Ложь; // Позволяем редактировать субконто для счета 10
          Иначе
              // Для других счетов сохраняем типовое поведение.
              // Здесь потребуется вызов оригинальной процедуры, если она есть и содержит нужную логику.
              // Но так как наша цель - только для счета 10, мы можем просто пропустить вызов для него.
              // Для остальных можно оставить вызов или позволить работать оригинальному коду без &Вместо.
              // Более правильный подход - использование &Перед и изменение параметра Отказ.
              Если Элемент.ТекущиеДанные.Предопределенное Тогда
                  Отказ = Истина;
              КонецЕсли;
          КонецЕсли;
      КонецПроцедуры
      

      Мы предлагаем перехватить процедуру ВидыСубконтоПередНачаломИзменения с помощью директивы &Вместо и явно установить Отказ = Ложь для счета 10. Это даст нам контроль над поведением формы для конкретного счета. Также можно перехватить функцию ПолучитьЗапрещенныеСчета (если она используется в модуле формы) и исключить из списка запрещенных счет 10:

      
      &ИзменениеФункции ПолучитьЗапрещенныеСчета()
          ЗапрещенныеСчета = Новый СписокЗначений;
          ОригинальныеЗапрещенныеСчета = ОригинальноеВыполнениеФункции(); // Вызов оригинальной функции
          Для каждого Счет Из ОригинальныеЗапрещенныеСчета Цикл
              Если Счет.Значение <> ПланыСчетов.Хозрасчетный.Материалы Тогда // Исключаем счет 10
                  ЗапрещенныеСчета.Добавить(Счет.Значение);
              КонецЕсли;
          КонецЦикла;
          Возврат ЗапрещенныеСчета;
      КонецФункции
      

      Важно: Директива &ИзменениеФункции позволяет изменить существующую функцию. После перехвата, сохраните расширение, включите его в режиме предприятия, и затем вы сможете изменить настройки счета 10 через пользовательский интерфейс, как описано в шагах 6-9 для Метода 1.

    • После установки всех необходимых флагов в пользовательском режиме, вы можете отключить расширение или удалить его, если изменения были успешно сохранены на уровне объекта "План счетов". Однако, для обеспечения стабильности и возможности дальнейших изменений, рекомендуется оставлять расширение активным.

Метод 3: Анализ внутренних механизмов и попытка программного изменения

В ходе обсуждения на форуме мы обнаруживаем упоминание о функции ОпределитьПараметрыУчета, которая, по-видимому, устанавливает флаг ВестиСуммовойУчетПоСкладам = Истина. Однако отмечается, что к этой функции ничего не обращается из пользовательского интерфейса, и она служит для определения текущих параметров, а не их установки. Тем не менее, это дает нам понимание того, как система internally определяет эти параметры:


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

Эта функция лишь читает текущее состояние настройки. Чтобы изменить его, нам необходимо напрямую обратиться к объекту "План счетов" и его свойствам. Хотя в обсуждении упоминается, что "универсальной обработкой редактирования объектов" получилось отключить учет, но включить назад было сложно, это не исключает возможность, что прямая модификация объекта "ПланСчетов" может быть сделана, если обойти все платформенные и конфигурационные запреты. Такой подход будет выглядеть следующим образом:

  1. Создание внешней обработки: Разработаем внешнюю обработку в конфигураторе.
  2. Получение объекта счета: В коде обработки мы получим объект счета 10 "Материалы" и его виды субконто.
    
    Счет10 = ПланыСчетов.Хозрасчетный.Материалы.ПолучитьОбъект();
    Если Счет10 <> Неопределено Тогда
        ВидСубконтоСклад = Счет10.ВидыСубконто.Найти(ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Склады, "ВидСубконто");
        Если ВидСубконтоСклад <> Неопределено Тогда
            Если Не ВидСубконтоСклад.Суммовой Тогда
                Попытка
                    Счет10.ВидыСубконто.Загрузить(ВидСубконтоСклад); // Загружаем текущий элемент, чтобы изменить его
                    ВидСубконтоСклад.Суммовой = Истина;
                    // Может потребоваться удаление старого элемента и добавление нового
                    // Если прямое изменение свойства не работает
                    // Счет10.ВидыСубконто.Удалить(ВидСубконтоСклад);
                    // ВидСубконтоСкладНовый = Счет10.ВидыСубконто.Добавить();
                    // ЗаполнитьЗначенияСвойств(ВидСубконтоСкладНовый, ВидСубконтоСклад);
                    // ВидСубконтоСкладНовый.Суммовой = Истина;
    
                    Счет10.Записать(); // Записываем изменения
                    Сообщить("Суммовой учет по субконто 'Склады' для счета 10 успешно включен.");
                Исключение
                    Сообщить("Ошибка при записи счета: " + ОписаниеОшибки());
                    Сообщить("Возможно, необходимо временно отключить проверки в модуле формы или использовать расширение.");
                КонецПопытки;
            Иначе
                Сообщить("Суммовой учет по субконто 'Склады' для счета 10 уже включен.");
            КонецЕсли;
        Иначе
            Сообщить("Субконто 'Склады' не найдено для счета 10.");
        КонецЕсли;
    Иначе
        Сообщить("Счет 10 'Материалы' не найден.");
    КонецЕсли;
    
  3. Запуск обработки: Запустите эту обработку в режиме "1С:Предприятие".

Мы должны понимать, что прямая программная модификация предопределенных объектов, даже если она технически возможна, может быть рискованной из-за скрытых проверок или жесткой логики платформы, которая не позволит записать изменения. Часто сообщения о "запрещенных счетах" указывают на такие блокировки. Поэтому этот метод может потребовать комбинации с Методом 1 или 2, где мы временно ослабляем контроль над объектом для его изменения.

Метод 4: Создание нового счета как обходное решение

Если все вышеперечисленные методы кажутся слишком сложными или рискованными, мы можем рассмотреть обходное решение — создание нового, непредопределенного счета, для которого мы сможем настроить аналитику по нашему усмотрению.

  1. Создание нового счета:
    • В Плане счетов создайте новый счет, например, 10.01.1 "Материалы (суммовой по складам)".
    • При создании счета для него можно будет свободно установить необходимые виды субконто, включая "Склады", и для этого субконто установить признак "Суммовой".
  2. Настройка проводок:
    • После создания счета, мы должны будем перенастроить правила отражения документов в регламентированном учете так, чтобы поступления, перемещения и списание материалов, для которых требуется суммовой учет по складам, относились на новый счет 10.01.1.
    • Это может потребовать настройки правил в разделе "Финансовый результат и контроллинг", "Настройка отражения документов в регламентированном учете" или аналогичных механизмах, зависящих от конкретных документов и видов операций.

Преимущества: Этот метод позволяет избежать изменения типовой конфигурации и не требует использования конфигуратора или расширений для основной задачи. Недостатки: Он требует дополнительных усилий по настройке проводок и, возможно, переносу остатков с существующего счета 10.01 на новый. Кроме того, это может усложнить типовую отчетность, поскольку придется агрегировать данные с двух разных счетов.

Дополнительный контекст и отвергнутые подходы

В ходе поиска решения на форуме были предложены и другие варианты, которые, однако, не подходят для КА 2.4, но дают понимание общей картины:

Эти примеры показывают, что в более ранних версиях и в других конфигурациях 1С такие настройки были доступны, но в КА 2.4 разработчики приняли решение о более жестком управлении предопределенными счетами.

Заключение

Мы выяснили, что прямого и простого пользовательского способа включить суммовой учет для субконто "Склады" на счете 10 в 1С:Комплексная автоматизация 2.4 нет. Однако мы рассмотрели несколько эффективных, хотя и более сложных, подходов:

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

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

← На главную