Загрузка данных


Решения всех 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.