Загрузка данных
Решения всех 10 задач на 1С
Ниже — готовые примеры кода. Вставляйте их в модуль формы обработки (в процедуру нажатия кнопки «Выполнить») или разбирайте по одной.
---
Задача 1. Адрес из четырёх частей
```1С
Город = "";
Улица = "";
Дом = "";
Квартира = "";
ВвестиСтроку(Город, "Введите город", 50);
ВвестиСтроку(Улица, "Введите улицу", 50);
ВвестиСтроку(Дом, "Введите дом", 10);
ВвестиСтроку(Квартира, "Введите квартиру", 10);
Адрес = "г. " + СокрЛП(Город) + ", ул. " + СокрЛП(Улица)
+ ", д. " + СокрЛП(Дом) + ", кв. " + СокрЛП(Квартира);
Сообщить(Адрес);
```
Результат: г. Москва, ул. Гагарина, д. 98, кв. 34
---
Задача 2. Разбить текст на предложения
```1С
Текст = "";
ВвестиСтроку(Текст, "Введите текст", 0, Истина);
// Заменяем точки на перенос строки
Текст = СтрЗаменить(Текст, ".", Символы.ПС);
// Выводим каждую непустую строку
Для Сч = 1 По СтрЧислоСтрок(Текст) Цикл
Стр = СокрЛП(СтрПолучитьСтроку(Текст, Сч));
Если НЕ ПустаяСтрока(Стр) Тогда
Сообщить(Стр);
КонецЕсли;
КонецЦикла;
```
---
Задача 3. Разбор автомобильного номера
Формат: хн344яRU63 (2 буквы, 3 цифры, 1 буква, 2 буквы, 2 цифры)
```1С
Номер = "";
ВвестиСтроку(Номер, "Введите номер", 20);
Номер = СокрЛП(Номер);
ПервБуквы = Лев(Номер, 2); // хн
Цифры = Сред(Номер, 3, 3); // 344
ПослБуква = Сред(Номер, 6, 1); // я
КодРегиона = Прав(Номер, 2); // 63
Сообщить("Номер " + Номер + ", состоит:");
Сообщить("Первые буквы - " + ПервБуквы);
Сообщить("Цифры - " + Цифры);
Сообщить("Последняя буква - " + ПослБуква);
Сообщить("Код региона - " + КодРегиона);
```
---
Задача 4. Извлечь домен из URL
```1С
URL = "";
ВвестиСтроку(URL, "Введите адрес", 100);
URL = СокрЛП(URL);
// Убираем протокол
Поз = Найти(URL, "://");
Если Поз > 0 Тогда
URL = Сред(URL, Поз + 3, СтрДлина(URL) - Поз - 2);
КонецЕсли;
// Убираем www.
Если Лев(URL, 4) = "www." Тогда
URL = Сред(URL, 5, СтрДлина(URL) - 4);
КонецЕсли;
// Отсекаем всё после первого /
Поз = Найти(URL, "/");
Если Поз > 0 Тогда
Домен = Лев(URL, Поз - 1);
Иначе
Домен = URL;
КонецЕсли;
Сообщить("Домен: " + Домен);
```
Результат: lenta.ru
---
Задача 5. Разбор даты «21.04.1988 г.»
```1С
ДатаСтр = "";
ВвестиСтроку(ДатаСтр, "Введите дату", 30);
ДатаСтр = СокрЛП(ДатаСтр);
// Убираем " г."
ДатаСтр = СтрЗаменить(ДатаСтр, " г.", "");
Точка1 = Найти(ДатаСтр, ".");
Точка2 = Найти(ДатаСтр, ".", Точка1 + 1);
День = Лев(ДатаСтр, Точка1 - 1);
Месяц = Сред(ДатаСтр, Точка1 + 1, Точка2 - Точка1 - 1);
Год = Сред(ДатаСтр, Точка2 + 1, СтрДлина(ДатаСтр) - Точка2);
Сообщить("День - " + День);
Сообщить("Месяц - " + Месяц);
Сообщить("Год - " + Год);
```
---
Задача 6. Разбор названия товара
Формат: 12321 Карандаш серый, шт
Артикул — 5 символов, единица измерения после последней запятой и пробела.
```1С
Товар = "12321 Карандаш серый, шт";
// Товар = "23444 Тетрадь в клетку, 12 листов, шт"; // для проверки
Артикул = Лев(Товар, 5);
// Ищем последнюю запятую с пробелом
ПослЗапятая = 0;
Для Сч = 1 По СтрДлина(Товар) Цикл
Если Сред(Товар, Сч, 2) = ", " Тогда
ПослЗапятая = Сч;
КонецЕсли;
КонецЦикла;
ЕдИзм = Сред(Товар, ПослЗапятая + 2, СтрДлина(Товар) - ПослЗапятая - 1);
Название = СокрЛП(Сред(Товар, 6, ПослЗапятая - 6));
Сообщить("Артикул: " + Артикул);
Сообщить("Название: " + Название);
Сообщить("Ед. изм.: " + ЕдИзм);
```
---
Задача 7. Разбор ФИО с приведением к виду «Иванов»
```1С
ФИО = "";
ВвестиСтроку(ФИО, "Введите ФИО", 100);
ФИО = СокрЛП(ФИО);
// Убираем возможные лишние пробелы (сжимаем)
Пока Найти(ФИО, " ") > 0 Цикл
ФИО = СтрЗаменить(ФИО, " ", " ");
КонецЦикла;
Поз1 = Найти(ФИО, " ");
Фамилия = Лев(ФИО, Поз1 - 1);
Остаток = Сред(ФИО, Поз1 + 1, СтрДлина(ФИО) - Поз1);
Поз2 = Найти(Остаток, " ");
Имя = Лев(Остаток, Поз2 - 1);
Отчество = Сред(Остаток, Поз2 + 1, СтрДлина(Остаток) - Поз2);
// Приводим к титульному регистру и добиваемся вида "Иванов"
Фамилия = ТРег(НРег(Фамилия));
Имя = ТРег(НРег(Имя));
Отчество = ТРег(НРег(Отчество));
Сообщить("Фамилия: " + Фамилия);
Сообщить("Имя: " + Имя);
Сообщить("Отчество: " + Отчество);
```
---
Задача 8. Извлечь имя файла из полного пути
```1С
Путь = "";
ВвестиСтроку(Путь, "Введите путь к файлу", 200);
Путь = СокрЛП(Путь);
ПослСлэш = 0;
Для Сч = 1 По СтрДлина(Путь) Цикл
Если Сред(Путь, Сч, 1) = "\" Тогда
ПослСлэш = Сч;
КонецЕсли;
КонецЦикла;
ИмяФайла = Сред(Путь, ПослСлэш + 1, СтрДлина(Путь) - ПослСлэш);
Сообщить("Имя файла: " + ИмяФайла);
```
Результат: Readme.html
---
Задача 9. Разбор названия организации и ИНН
```1С
Строка = "ЗАО ""Торговый дом Комплексный"", ИНН 7705260699";
// ИНН — всегда после "ИНН " и до конца строки
ПозИНН = Найти(Строка, "ИНН ");
ИНН = СокрЛП(Сред(Строка, ПозИНН + 4, СтрДлина(Строка) - ПозИНН - 3));
// Название — всё до ", ИНН"
ПозЗапятой = Найти(Строка, ", ИНН");
Название = СокрЛП(Лев(Строка, ПозЗапятой - 1));
Сообщить("Название: " + Название);
Сообщить("ИНН: " + ИНН);
```
---
Задача 10. Извлечь артикулы разной длины
Артикул стоит в начале строки до первого пробела.
```1С
Номенклатура1 = "В-987 Вентилятор JIPONIC (Тайв.), напольный";
Номенклатура2 = "ВН-900 Вентилятор настольный";
// Функция извлечения артикула — первый пробел
Для Каждого Стр Из Новый Массив(Номенклатура1, Номенклатура2) Цикл
Поз = Найти(Стр, " ");
Артикул = Лев(Стр, Поз - 1);
Сообщить("Артикул: " + Артикул);
КонецЦикла;
```
Результат: В-987, ВН-900
---
Что общего во всех задачах
1. ВвестиСтроку — интерактивный ввод
2. СокрЛП — очистка от пробелов
3. Найти — поиск разделителей (пробел, точка, запятая, /, \)
4. Лев, Сред, Прав — извлечение фрагментов
5. СтрДлина — расчёт длины остатка
6. СтрЗаменить — нормализация строки
Главный навык: сначала найти позицию разделителя через Найти, потом вырезать части через Лев / Сред / Прав, помня, что нумерация символов начинается с 1.