A1sCode библиотека 1С

Идея дня

Базовые вызовы


Метка = "Day21";

// Информационные события
A1sLog.Info(Метка, "Импорт прайса начат");

// Отладочные детали (шумные — включайте по необходимости)
A1sLog.Debug(Метка, "Параметры", Новый Структура("Источник,Лимит", "File.csv", 100));

// Предупреждение о некритичной проблеме
A1sLog.Warn(Метка, "Некоторые строки пропущены из-за пустых артикулов");

// Ошибка с контекстом
A1sLog.Error(Метка, "Не удалось записать документ", Новый Структура("Номер", "000123"));
      

Формат вызова держим единым по проекту: Уровень(Тег, Сообщение[, Данные]).

Логирование шагов операции


Процедура ИмпортНоменклатуры(ПутьКФайлу) Экспорт
    Тег = "ИмпортНом";
    A1sLog.Info(Tег, "Старт", Новый Структура("Файл", ПутьКФайлу));

    Таб = ПрочитатьCSV(ПутьКФайлу); // ваша реализация
    Если A1sO.Empty(Таб) Тогда
        A1sLog.Warn(Tег, "Файл пустой или не разобран");
        Возврат;
    КонецЕсли;

    Всего = Таб.Количество();
    Ok = 0; Bad = 0;

    Для каждого Стр Из Таб Цикл
        Код = A1sS.AsString(Стр.Код);
        Имя = A1sS.AsString(Стр.Наименование);

        Если A1sO.Empty(Имя) Тогда
            Bad = Bad + 1;
            A1sLog.Debug(Tег, "Пропуск: пустое наименование", Стр);
            Продолжить;
        КонецЕсли;

        Попытка
            Эл = Справочники.Номенклатура.НайтиПоКоду(Код);
            Если A1sO.Empty(Эл) Тогда
                Э = Справочники.Номенклатура.СоздатьЭлемент();
            Иначе
                Э = Эл.ПолучитьОбъект();
            КонецЕсли;

            Данные = Новый Структура("Код,Наименование", Код, Имя);
            A1sO.FillObject(Э, Данные); // День 14
            Э.Записать();

            Ok = Ok + 1;
        Исключение
            Bad = Bad + 1;
            A1sLog.Error(Tег, "Ошибка записи элемента", Данные);
        КонецПопытки;
    КонецЦикла;

    A1sLog.Info(Tег, "Готово", Новый Структура("Всего,Успешно,Ошибок", Всего, Ok, Bad));
КонецПроцедуры
      

Данные передаём структурой/массивом — так их легко сериализовать и искать в логах.

Логирование запросов (A1sQ)


Функция НайтиПоМаске(Маска, Лимит = 20) Экспорт
    Тег = "ПоискНом";
    Если A1sO.Empty(Маска) Тогда
        A1sLog.Warn(Tег, "Пустая маска — ранний выход");
        Возврат Новый ТаблицаЗначений;
    КонецЕсли;

    ТекстQ = "
    |ВЫБРАТЬ ПЕРВЫЕ &Лимит
    |    Ном.Ссылка       КАК ID,
    |    Ном.Наименование КАК Name
    |ИЗ Справочник.Номенклатура КАК Ном
    |ГДЕ Ном.Наименование ПОДОБНО &Маска
    |УПОРЯДОЧИТЬ ПО Name
    ";

    A1sLog.Debug(Tег, "Запрос", Новый Структура("Лимит,Маска", Лимит, Маска));
    Рез = A1sQ.Unload(ТекстQ, Лимит, Маска); // позиционные параметры
    A1sLog.Info(Tег, "Найдено", Новый Структура("Строк", Рез.Количество()));

    Возврат Рез;
КонецФункции
      

Не логируем весь текст запроса на проде (шум), достаточно ключевых параметров и итогов.

Соглашения по тегам и сообщениям

Анти-паттерны

Практика (15–30 минут)

  1. Определите теги операций вашего модуля (3–5 штук) и замените «размытые» метки.
  2. Внедрите логирование шагов в одной длительной процедуре: старт → ключевые этапы → итоги.
  3. Добавьте структурные данные к 2–3 сообщениям (Новый Структура(...)), уберите лишний шум из Info.
  4. В функциях с ранним выходом (guard) пишите причину в Warn.

Что дальше

День 22: A1sJ — Работа с JSON — сериализация/десериализация и конвейеры подготовки данных.

Примечание

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