Шеф-повар Петрович о сортировке продуктов на кухне данных
🏷️ ЧТО ТАКОЕ ТИП ДАННЫХ?
"Марковка! Представь: у тебя на кухне есть разные полки:
- Холодильник — для скоропортящегося (даты)
- Стеллаж — для бакалеи (числа, строки)
- Сейф — для документов (ссылки)
- Доска — для записок (булевы значения)
Тип данных — это как решить, на какую полку положить продукт. Нельзя молоко хранить на полке для круп — испортится!"
📦 ОСНОВНЫЕ "ПОЛКИ" (ТИПЫ) В 1С
1. ЧИСЛО (Number) — "ВЕСЫ И МЕРНЫЕ СТАКАНЫ"
plaintext
ЧТО ЭТО: Цифры для вычислений
ПРИМЕРЫ: 100, 15.5, -3.14, 0
КАК В ЖИЗНИ: Вес муки (500г), цена (150.50 руб), температура (-5°C)
ХРАНИМ: На полке "Вычисления"
МОЖНО: Складывать, вычитать, умножать, делить
НЕЛЬЗЯ: Складывать с текстом (500 + "грамм" = ошибка!)
Совет шефа: "Числа — как соль: точное количество. Не 'немного', а '5 грамм'. Для денег используй Число(15, 2) — 15 рублей 00 копеек."
2. СТРОКА (String) — "ЭТИКЕТКИ И НАКЛЕЙКИ"
plaintext
ЧТО ЭТО: Текст в кавычках
ПРИМЕРЫ: "Мука", "ИП Петров", "ул. Ленина, 15"
КАК В ЖИЗНИ: Названия, адреса, комментарии
ХРАНИМ: На полке "Тексты"
МОЖНО: Соединять ("Мука" + " высший сорт" = "Мука высший сорт")
НЕЛЬЗЯ: Делить или умножать
Совет шефа: "Строки — как названия блюд. 'Борщ' и 'борщ' — это разные строки (регистр важен!). Для поиска используй ВРЕГ() — сделает нечувствительным к регистру."
3. ДАТА (Date) — "КАЛЕНДАРЬ КУХНИ"
plaintext
ЧТО ЭТО: Дата и время
ПРИМЕРЫ: '2024.01.15', '15.01.2024 14:30:00'
КАК В ЖИЗНИ: Срок годности, дата заказа, время доставки
ХРАНИМ: В "холодильнике времени"
МОЖНО: Сравнивать (раньше/позже), добавлять дни
НЕЛЬЗЯ: Умножать даты
Совет шефа: "Даты — как сроки годности. '01.01.2024' и '2024-01-01' — это одно и то же, но форматы разные. Всегда используй ТекущаяДата() для сегодняшней даты."
4. БУЛЕВО (Boolean) — "ВКЛ/ВЫКЛ"
plaintext
ЧТО ЭТО: Логическое значение
ПРИМЕРЫ: Истина, Ложь
КАК В ЖИЗНИ: Проведён документ или нет, товар в наличии или нет
ХРАНИМ: На полке "Переключатели"
МОЖНО: Использовать в условиях (ЕСЛИ ... ТОГДА)
НЕЛЬЗЯ: Складывать с числами
Совет шефа: "Булевы значения — как выключатель света. Или горит (Истина), или не горит (Ложь). Не 'немного горит' — только два состояния."
5. ССЫЛКА (Reference) — "ЯРЛЫК НА ПОЛКУ"
plaintext
ЧТО ЭТО: Ссылка на объект в базе
ПРИМЕРЫ: Справочник.Товары.НайтиПоКоду("000001")
КАК В ЖИЗНИ: Накладная №123, товар "Мука", контрагент "ИП Иванов"
ХРАНИМ: В "сейфе ссылок"
МОЖНО: Получить свойства объекта (Ссылка.Наименование)
НЕЛЬЗЯ: Использовать как число или строку напрямую
Совет шефа: "Ссылка — как номер столика в ресторане. Не сам клиент, а указатель на него. По номеру столика 5 можешь найти, кто там сидит и что заказал."
⚠️ 5 ГЛАВНЫХ ПУТАНИЦ НОВИЧКОВ
ПУТАНИЦА 1: ЧИСЛО vs СТРОКА С ЦИФРАМИ
plaintext
ПРАВИЛЬНО (Число):
Цена = 100; // Можно: Цена * 2 = 200
Количество = 5; // Можно: Цена * Количество
НЕПРАВИЛЬНО (Строка):
Цена = "100"; // Нельзя: "100" * 2 = ошибка!
Количество = "5"; // Нельзя: "100" * "5" = ошибка!
ИСПРАВЛЕНИЕ:
Цена = Число("100"); // Преобразовали строку в число
Аналогия: "100 грамм муки" (строка) vs 100 (число) грамм. На весы можно положить только число!"
ПУТАНИЦА 2: ПУСТОТА vs НОЛЬ vs ПУСТАЯ СТРОКА
plaintext
НЕОПРЕДЕЛЕНО → Ничего нет (пустая коробка)
0 → Есть, но ноль (пустая пачка соли)
"" → Пустая строка (этикетка без текста)
ПРИМЕР:
Если Контрагент = Неопределено Тогда // Клиента ещё нет
Если Сумма = 0 Тогда // Заказ на 0 рублей
Если Комментарий = "" Тогда // Комментарий пустой
Анализируй: "Неопределено — продукта нет в поставке. 0 — продукт есть, но закончился. "" — продукт есть, но без названия."
ПУТАНИЦА 3: ДАТА vs СТРОКА С ДАТОЙ
plaintext
ДАТА (можно вычислять):
Дата1 = '2024.01.15';
Дата2 = Дата1 + 7; // Добавили 7 дней = '2024.01.22'
СТРОКА (нельзя вычислять):
Дата1 = "15.01.2024";
Дата2 = Дата1 + 7; // ОШИБКА! Нельзя сложить строку и число
Аналогия: "Календарь на стене (дата) vs фотография календаря (строка). На календаре можно отметить дни, на фотографии — нет."
ПУТАНИЦА 4: ССЫЛКА vs НАИМЕНОВАНИЕ
plaintext
ССЫЛКА (объект):
Товар = Справочник.Товары.НайтиПоКоду("000001");
Сообщить(Товар.Цена); // Можно получить все свойства
СТРОКА (только имя):
Товар = "Мука";
Сообщить(Товар.Цена); // ОШИБКА! У строки нет цены
Аналогия: "Повар Петя (ссылка) vs слово 'Петя' (строка). У повара Пети можно спросить рецепт, у слова 'Петя' — нет."
ПУТАНИЦА 5: МАССИВ vs ОДИНОЧНОЕ ЗНАЧЕНИЕ
plaintext
ОДИНОЧНОЕ (один товар):
Товар = Справочник.Товары.НайтиПоКоду("000001");
МАССИВ (несколько товаров):
Товары = Справочник.Товары.Выбрать(); // Много товаров
Для Каждого Т Из Товары Цикл // Перебираем каждый
Сообщить(Т.Наименование);
КонецЦикла;
Аналогия: "Одно яблоко vs корзина яблок. С одним яблоком работаешь напрямую, с корзиной — перебираешь по одному."
🛠️ ПРАКТИЧЕСКАЯ ЛАБОРАТОРИЯ: "РАСПРЕДЕЛЯЕМ ПРОДУКТЫ"
Задание 1: Создаём реквизиты для товара
plaintext
"Мука высший сорт"
1. Наименование = "Мука высший сорт" // Строка
2. Цена = 85.50 // Число (деньги)
3. Вес = 1000 // Число (граммы)
4. ЕстьВНаличии = Истина // Булево
5. ДатаПоступления = '2024.01.15' // Дата
6. Поставщик = СсылкаНаКонтрагента // Ссылка
Задание 2: Правильные сравнения
plaintext
ЕСЛИ Товар.Цена > 100 ТОГДА // Число с числом ✓
ЕСЛИ Товар.Наименование = "Мука" ТОГДА // Строка со строкой ✓
ЕСЛИ Товар.ДатаПоступления < ТекущаяДата() ТОГДА // Дата с датой ✓
ЕСЛИ Товар.ЕстьВНаличии ТОГДА // Булево проверяется просто ✓
// НЕПРАВИЛЬНО:
ЕСЛИ Товар.Цена > "100" ТОГДА // Число со строкой ✗
ЕСЛИ Товар.Наименование = 123 ТОГДА // Строка с числом ✗
Задание 3: Преобразования типов
plaintext
// Из строки в число:
Сумма = Число("150.50"); // "150.50" → 150.50
// Из числа в строку:
Текст = Строка(150.50) + " руб."; // 150.50 → "150.50 руб."
// Из строки в дату:
Дата = Дата("15.01.2024"); // "15.01.2024" → дата
// Из даты в строку:
ТекстДата = Формат(Дата, "ДФ=dd.MM.yyyy"); // Дата → "15.01.2024"
🔍 ДИАГНОСТИКА: "ПОЧЕМУ НЕ РАБОТАЕТ?"
Симптом: "Неверный тип данных"
plaintext
СИМПТОМ: Ошибка при выполнении кода
ПРИЧИНЫ:
1. Сравниваете число со строкой
2. Передаёте строку вместо числа в вычисления
3. Используете дату как строку
4. Работаете с ссылкой как с примитивом
ДИАГНОСТИКА:
Сообщить(ТипЗнч(Переменная)); // Покажет тип
// Возвращает: Тип("Число"), Тип("Строка") и т.д.
Симптом: "Неожиданный результат"
plaintext
ПРИМЕР:
А = "10"; Б = "5";
Результат = А + Б; // "105" (конкатенация строк), а не 15!
ИСПРАВЛЕНИЕ:
Результат = Число(А) + Число(Б); // 15
Симптом: "Пустое значение"
plaintext
ПРОВЕРКИ:
Если Переменная = Неопределено Тогда
Если ЗначениеЗаполнено(Переменная) Тогда
Если Не ПустаяСтрока(Переменная) Тогда // Для строк
🎯 ТРЕНИРОВОЧНЫЕ УПРАЖНЕНИЯ
Упражнение 1: "Угадай тип"
plaintext
1. "2024" // ? (Строка)
2. 2024 // ? (Число)
3. '2024.01.01' // ? (Дата)
4. Истина // ? (Булево)
5. Справочник.Товары // ? (Ссылка)
6. "" // ? (Строка)
7. 0 // ? (Число)
8. Неопределено // ? (Неопределено)
Упражнение 2: "Исправь ошибки"
plaintext
// Ошибочный код:
Цена = "150";
Количество = "3";
Итог = Цена * Количество; // Ошибка!
// Правильный код:
Цена = Число("150");
Количество = Число("3");
Итог = Цена * Количество; // 450
Упражнение 3: "Создай структуру"
plaintext
// Создай реквизиты для заказа:
Заказ = Новый Структура;
Заказ.Вставить("Номер", "000001"); // ?
Заказ.Вставить("Дата", ТекущаяДата()); // ?
Заказ.Вставить("Сумма", 1500.50); // ?
Заказ.Вставить("Оплачен", Истина); // ?
Заказ.Вставить("Клиент", СсылкаНаКлиента);// ?
🏁 ЗАКЛЮЧЕНИЕ ОТ ШЕФА ПЕТРОВИЧА:
"Марковка, запомни золотые правила типов данных:
1. КАЖДЫЙ ИНГРЕДИЕНТ — НА СВОЮ ПОЛКУ
- Числа — для вычислений
- Строки — для текста
- Даты — для времени
- Булево — для да/нет
- Ссылки — для объектов
2. НЕ СМЕШИВАЙ РАЗНЫЕ ТИПЫ
- Яблоки + апельсины ≠ фруктовый салат (в вычислениях)
- Преобразуй явно: Число(), Строка(), Дата()
3. ПРОВЕРЯЙ ТИП, ЕСЛИ НЕ УВЕРЕН
- ТипЗнч() — твой детектор
- ЗначениеЗаполнено() — проверка на пустоту
4. НАЧИНАЙ С ПРОСТОГО
- Сначала освой Число и Строку
- Потом Булево и Дату
- Потом Ссылки
- Потом сложные типы (Массивы, Структуры, Таблицы значений)
5. ОШИБКИ С ТИПАМИ — САМЫЕ ЧАСТЫЕ
- 80% ошибок новичков — из-за путаницы типов
- Компилятор часто подсказывает: 'Ожидался тип X, получен Y'
И главное — не бойся экспериментировать!
Создай тестовую базу и пробуй:
plaintext
А = 5;
Б = "5";
Сообщить(А + Б); // Ошибка
Сообщить(А + Число(Б)); // Работает
Сообщить(Строка(А) + Б); // "55"
Типы данных — как специи на кухне:
- Соль (Число) — для точности
- Названия (Строка) — для идентификации
- Сроки (Дата) — для своевременности
- Флаги (Булево) — для состояний
- Связи (Ссылки) — для отношений
Научись их различать — и твой код станет вкусным и полезным, как идеально приготовленное блюдо!
А теперь — иди создавать свою первую структуру данных!
Начни с рецепта: название (строка), время приготовления (число), сложность (булево), дата создания (дата).
Удачи! И помни: даже лучшие программисты когда-то складывали строки вместо чисел!" 🧮📝
📌 ШПАРГАЛКА-НАПОМИНАЛКА:
plaintext
ЧИСЛО: Для вычислений, денег, количеств
СТРОКА: Для текста, названий, кодов
ДАТА: Для дат, времени, сроков
БУЛЕВО: Для флагов, состояний (Истина/Ложь)
ССЫЛКА: Для объектов базы данных
НЕОПРЕДЕЛЕНО: Для пустых значений
МАССИВ: Для наборов значений
СТРУКТУРА: Для наборов "ключ-значение"
ТАБЛИЦА ЗНАЧЕНИЙ: Для табличных данных
ПРЕОБРАЗОВАНИЯ:
Число("100") → 100
Строка(100) → "100"
Дата("15.01.2024") → дата
Формат(Дата, "ДФ=dd.MM.yyyy") → "15.01.2024"
ПРОВЕРКИ:
ТипЗнч(Переменная) // Узнать тип
ЗначениеЗаполнено(Переменная) // Не пусто?
ПустаяСтрока(Переменная) // Пустая строка?
P.S. Когда код не работает — первым делом спроси: 'А типы данных правильные?' Это как в кулинарии: сначала проверь, мука ли у тебя в руках, а не сахарная пудра! 🧁🔍