Как с помощью отладки и глобального поиска 1С выяснить причину сообщения "Для склада не используется справочное деление на складские ячейки" и решить проблемы с производительностью?

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

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

Отличие "ошибки" от "предупреждающего сообщения"

Первое, что нам необходимо понять, это разница между настоящей ошибкой и предупреждающим сообщением. Классическая ошибка, как правило, приводит к исключению и остановке выполнения кода, и именно на такие события настроена стандартная "Остановка по ошибке" в отладчике. Однако многие сообщения, выдаваемые программой (например, "Для склада не используется справочное деление на складские ячейки, поэтому невозможно указать ячейки для размещения"), являются именно предупреждениями, а не критическими ошибками.

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

Поиск источника сообщения с помощью глобального поиска в конфигураторе

Если мы знаем точный текст сообщения, которое нас беспокоит, самым первым и эффективным шагом будет использование глобального поиска в конфигураторе 1С. Это позволит нам быстро найти все места в коде, где это сообщение формируется или используется.

  1. Откроем конфигуратор 1С.
  2. Перейдем в меню "Правка" и выберем пункт "Глобальный поиск" (или нажмем Ctrl+Shift+F).
  3. В поле "Искать" введем полный или частичный текст сообщения, например: Для склада не используется справочное деление на складские ячейки.
  4. Обязательно установим флажок "Только на Модули", чтобы ограничить поиск программным кодом, где формируются сообщения.
  5. Нажмем кнопку "Искать".

После выполнения поиска мы получим список всех модулей и строк, где встречается указанный текст. Если список очень большой (как было в нашем случае с 286 упоминаниями), нам необходимо сузить круг поиска, опираясь на контекст возникновения сообщения. В нашем примере сообщение "Для склада не используется справочное деление на складские ячейки, поэтому невозможно указать ячейки для размещения" возникало в документе "Переход на использование адресного хранения остатков" при создании документа "Размещение номенклатуры по ячейкам". Это очень важная подсказка, указывающая на конкретные модули или процедуры, которые следует исследовать в первую очередь.

Диагностика и отладка программного кода

После того как мы нашли потенциальные места возникновения сообщения с помощью глобального поиска, следующим шагом будет использование отладчика 1С. Отладчик – это наш основной инструмент для пошагового выполнения кода и анализа его работы.

  1. Откроем один из модулей, найденных глобальным поиском, который, по нашему мнению, наиболее соответствует контексту возникновения сообщения (например, модуль объекта или модуль формы документа "Размещение номенклатуры по ячейкам", или связанный с ним общий модуль).
  2. Установим точку останова (F9) на строку кода, откуда, как мы предполагаем, начинается проверка условий или где формируется сообщение. Если мы не уверены в конкретной строке, можно поставить точку останова в начале процедуры или функции, где происходит соответствующая логика.
  3. Запустим программу в режиме отладки (F5).
  4. Воспроизведем действия пользователя, которые приводили к появлению сообщения (например, откроем документ "Переход на использование адресного хранения остатков" и попробуем создать на его основании "Размещение номенклатуры по ячейкам").
  5. Как только выполнение программы достигнет нашей точки останова, оно прервется, и управление перейдет в отладчик.
  6. Далее будем пошагово выполнять код, используя кнопки:
    • F10 (Шагнуть через): выполняет текущую строку и переходит к следующей. Если строка содержит вызов процедуры/функции, она будет выполнена полностью.
    • F11 (Шагнуть в): "проваливается" внутрь вызываемой процедуры/функции, позволяя нам отследить ее логику.
    • Shift+F11 (Шагнуть из): продолжает выполнение до выхода из текущей процедуры/функции.
    • F5 (Продолжить): продолжает выполнение до следующей точки останова или до завершения работы.
  7. Во время отладки будем активно использовать окна "Табло" (Ctrl+Alt+W) и "Переменные" (Ctrl+Alt+V) для просмотра значений переменных, участвующих в проверках. Это поможет нам понять, какие условия не выполняются.
  8. Окно "Стек вызовов" (Ctrl+Alt+C) также окажется полезным для отслеживания последовательности процедур и функций, приведших к текущей точке выполнения.

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

Решение проблемы "Для склада не используется справочное деление на складские ячейки, поэтому невозможно указать ячейки для размещения"

На основе анализа темы и общей информации по 1С, данное сообщение не является ошибкой в ее строгом понимании. Это, скорее, предупреждение о том, что для выбранного склада не активирован или некорректно настроен функционал адресного хранения, позволяющий учитывать остатки номенклатуры в разрезе ячеек. Если нам нужен именно полноценный учет остатков по ячейкам (режим "использовать Ячейки для хранения остатков номенклатуры"), нам необходимо выполнить следующие шаги:

  1. Включение функциональной опции адресного хранения:

    В конфигурации "Управление торговлей" (например, УТ 11) необходимо убедиться, что включена основная функциональная опция для адресного хранения. Перейдем в раздел "НСИ и администрирование" -> "Настройка разделов" -> "Склад и доставка" -> "Обеспечение и хранение запасов". Здесь нам нужно убедиться, что установлен флажок "Использовать адресное хранение остатков (складские ячейки)". Возможно, потребуется также включить опции "Использовать складские ячейки при отгрузке" или "Использовать складские ячейки при приемке", в зависимости от требуемой детализации учета.

  2. Настройка режима использования складских ячеек для конкретного склада:

    Для склада, в котором возникает проблема, необходимо установить правильный режим работы с ячейками. Перейдем в "НСИ и администрирование" -> "Склады и магазины", откроем карточку нужного склада. В ней необходимо выбрать режим использования складских ячеек: "Использовать для хранения остатков номенклатуры". Этот режим отличается от "Использовать для справочного размещения номенклатуры", при котором ячейки служат лишь справочной информацией.

  3. Создание структуры склада (складских ячеек):

    После включения функциональной опции и настройки склада, убедимся, что для этого склада созданы и настроены сами складские ячейки. Для этого зайдем в "Склад и доставка" -> "Настройки и справочники" -> "Структура склада" -> "Складские ячейки".

  4. Корректное проведение документа "Переход на использование адресного хранения остатков":

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

Оптимизация производительности в 1С

Помимо решения конкретных функциональных сообщений, нам часто приходится сталкиваться с проблемой низкой производительности системы. Давайте рассмотрим комплексные подходы к оптимизации работы 1С:Предприятия.

  1. Анализ производительности кода:

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

  2. Обслуживание СУБД (для SQL Server):

    Если база данных работает на SQL Server, крайне важно настроить регулярное обслуживание базы данных. Это включает:

    • Перестроение индексов: Помогает устранить фрагментацию индексов, значительно ускоряя выполнение запросов.
    • Обновление статистики: Позволяет оптимизатору запросов SQL Server выбирать наиболее эффективные планы выполнения.
    • Проверка целостности базы данных: Выявляет и устраняет повреждения данных на уровне СУБД.

    Кроме того, часто рекомендуется для 1С установить значение параметра Max Degree of Parallelism (MAXDOP) в настройках SQL Server на 1. Это может предотвратить блокировки и неоптимальное распределение ресурсов при параллельном выполнении запросов.

  3. Тестирование и исправление информационной базы:

    В самой 1С существует встроенный механизм тестирования и исправления. Периодическое выполнение этой процедуры помогает обнаружить и устранить логические ошибки в данных. Запустим его через "Конфигуратор" -> "Администрирование" -> "Тестирование и исправление". Учтем, что для больших баз данных эта процедура может занимать значительное время (дни или даже недели).

  4. Выгрузка/загрузка информационной базы:

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

  5. Оптимизация программного кода:

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

  6. Аппаратные ресурсы сервера и сетевое взаимодействие:

    Недостаток оперативной памяти (ОЗУ), медленные диски (особенно если это HDD вместо SSD/NVMe) или слабый процессор могут быть причиной низкой производительности, даже при идеально оптимизированном коде. Для 1С крайне важен быстрый дисковый ввод/вывод. Для удаленных пользователей медленное сетевое соединение также значительно влияет на воспринимаемую скорость работы.

  7. Технологический журнал 1С:

    Для детального анализа производительности используем Технологический журнал 1С. Он позволяет получить подробную информацию о времени выполнения различных операций, запросах к БД, работе с блокировками. Анализ данных технологического журнала с помощью специализированных утилит поможет выявить точные причины замедления.

  8. Консоль запросов:

    Используем Консоль запросов для выполнения и анализа отдельных SQL-запросов, оценки их производительности и плана выполнения. Это позволяет точечно оптимизировать сложные запросы.

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

← На главную