Нумеруем небольшой текстовый пакет и отличаем пустую строку внутри от завершающего перевода строки.
Где и как запускать
Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.
Подготовка
Все исходные строки заданы прямо в примере; товары, файлы и настройки рабочих конфигураций не нужны.
Выполняйте на сервере учебной базы. Особенно важно для встроенных функций регулярных выражений.
Текст = "A-01;3" + Символы.ПС + "" + Символы.ПС + "B-02;1" + Символы.ПС;
Количество = СтрЧислоСтрок(Текст);
Сообщить(Количество);
Для Номер = 1 По Количество Цикл
Содержимое = СтрПолучитьСтроку(Текст, Номер);
Если ПустаяСтрока(Содержимое) Тогда
Сообщить(СтрШаблон("Строка %1 пропущена: пустая", Номер));
Иначе
Сообщить(СтрШаблон("Строка %1: [%2]", Номер, Содержимое));
КонецЕсли;
КонецЦикла;Разбор по шагам
Символы.ПС создаёт многострочный текст; внутренняя пустая строка находится между двумя переводами.
СтрЧислоСтрок считает строки, не добавляя отдельную строку из одного финального перевода.
СтрПолучитьСтроку получает номер с 1. Сохраняем исходные номера даже при пропуске пустой строки.
Этот предварительный просмотр помогает указывать пользователю место ошибки импорта.
Как проверить результат
Количество строк 3: первая A-01;3, вторая пустая, третья B-02;1.
Удалите последний Символы.ПС: количество останется 3.
Добавьте ещё одну непустую строку C-03;2 после перевода: количество станет 4.
Ожидаемый результат
Текстовый пакет показан с исходными номерами строк и явным сообщением для пустой строки.
На что обратить внимание
Это не полноценный CSV: поле в кавычках само может содержать перевод строки.
Для входящего CRLF при дальнейшей обработке полей проверяйте и нормализуйте разделители согласно формату.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.