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


ФИНАЛЬНЫЙ ГАЙД: КОНФИГУРАЦИЯ 1С "КНИЖНЫЙ МАГАЗИН" НА 4

Делай строго по порядку.

==================================================
1. СТРУКТУРА КОНФИГУРАЦИИ
==================================================

ОБЩИЕ ОБЪЕКТЫ

Создать:

Язык: Русский
Код языка: ru

Стиль: Стиль

ОбщаяКартинка: ИзображениеПоУмолчанию

ПараметрСеанса: ТекущийПользователь
Тип: СправочникСсылка.Пользователи

ОбщаяФорма: ФормаАвторизации

Обработка: ЗагрузкаДанных
Основная форма: Форма

В свойствах конфигурации:

ОсновнойЯзык: Русский
ОсновнойСтиль: Стиль
ОсновнойРежимЗапуска: Управляемое приложение


==================================================
2. ПЕРЕЧИСЛЕНИЯ
==================================================

Перечисление: Роли

Значения:
Администратор
Менеджер
АвторизированныйКлиент

Перечисление: СтатусыЗаказов

Значения:
Новый
Завершен
Отменен


==================================================
3. СПРАВОЧНИКИ
==================================================

СПРАВОЧНИК: Пользователи

Код: Строка, длина 9
Наименование: Строка, длина 100
Синоним Наименования: ФИО

Реквизиты:
Логин — Строка 100
Пароль — Строка 100
РольСотрудника — ПеречислениеСсылка.Роли

Формы:
ФормаЭлемента
ФормаСписка


СПРАВОЧНИК: ПунктыВыдачи

Код: Число, длина 9
Наименование: Строка, длина 100
Синоним Наименования: Адрес

Формы:
ФормаЭлемента
ФормаСписка


СПРАВОЧНИК: ЕдиницыИзмерения

Код: Строка, длина 10
Наименование: Строка, длина 25

Формы:
ФормаЭлемента
ФормаСписка


СПРАВОЧНИК: Поставщики

Код: Строка, длина 9
Наименование: Строка, длина 100

Формы:
ФормаЭлемента
ФормаСписка


СПРАВОЧНИК: Производители

Код: Строка, длина 9
Наименование: Строка, длина 100

Формы:
ФормаЭлемента
ФормаСписка


СПРАВОЧНИК: КатегорииТоваров

Код: Строка, длина 9
Наименование: Строка, длина 100

Формы:
ФормаЭлемента
ФормаСписка


СПРАВОЧНИК: Товары

Код: Строка, длина 20
Синоним Кода: Артикул

Наименование: Строка, длина 149
Синоним Наименования: Описание товара

Реквизиты:
НаименованиеТовара — Строка 100
ЕдиницаИзмерения — СправочникСсылка.ЕдиницыИзмерения
Цена — Число 10,2, неотрицательное
Поставщик — СправочникСсылка.Поставщики
Производитель — СправочникСсылка.Производители
КатегорияТовара — СправочникСсылка.КатегорииТоваров
ДействующаяСкидка — Число 10,2
КоличествоНаСкладе — Число 10,0, неотрицательное
Фото — ХранилищеЗначения

Формы:
ФормаЭлемента
ФормаСписка

Назначить:
ОсновнаяФормаОбъекта: ФормаЭлемента
ОсновнаяФормаСписка: ФормаСписка


==================================================
4. ДОКУМЕНТ ЗАКАЗ
==================================================

Документ: Заказ

Номер: Строка, длина 9
Синоним Номера: НомерЗаказа

Дата
Синоним Даты: ДатаЗаказа

Реквизиты:
ДатаДоставки — Дата
АдресПунктаВыдачи — СправочникСсылка.ПунктыВыдачи
Клиент — СправочникСсылка.Пользователи
КодДляПолучения — Строка 100
СтатусЗаказа — ПеречислениеСсылка.СтатусыЗаказов

Табличная часть:
Товары

Реквизиты табличной части:
Товар — СправочникСсылка.Товары
Количество — Число 10,0, неотрицательное

Формы:
ФормаДокумента
ФормаСписка

Назначить:
ОсновнаяФормаОбъекта: ФормаДокумента
ОсновнаяФормаСписка: ФормаСписка


==================================================
5. ФОРМА АВТОРИЗАЦИИ
==================================================

Общие формы → ФормаАвторизации

Реквизиты формы:
Логин — Строка 100
Пароль — Строка 100
ТекущийПользователь — Строка 100

Команды:
Авторизация
ВойтиКакГость

Элементы на форме:
Логин
Пароль
Авторизация
ВойтиКакГость
ТекущийПользователь

У команд поставить действия:
Авторизация → Авторизация
ВойтиКакГость → ВойтиКакГость


==================================================
6. ФОРМА СПИСКА ТОВАРОВ
==================================================

Справочник Товары → ФормаСписка

Реквизиты формы:
ТекущийПользователь — Строка 100
ПоискТовара — Строка 100
ФильтрСкидки — Строка 50
Сортировка — Строка 50

Команды:
ОткрытьЗаказы
ДобавитьТовар
УдалитьТовар

Элементы:
ТекущийПользователь
ГруппаФункцийМенеджера
ГруппаФункцийАдминистратора
ГруппаПоискаИОтбора
Список

Внутри групп:

ГруппаФункцийМенеджера:
ОткрытьЗаказы

ГруппаФункцийАдминистратора:
ДобавитьТовар
УдалитьТовар

ГруппаПоискаИОтбора:
ПоискТовара
ФильтрСкидки
Сортировка

У команд поставить действия:
ОткрытьЗаказы → ОткрытьЗаказы
ДобавитьТовар → ДобавитьТовар
УдалитьТовар → УдалитьТовар

У формы обязательно привязать событие:
ПриСозданииНаСервере → ПриСозданииНаСервере


==================================================
7. ФОРМА ЭЛЕМЕНТА ТОВАРА
==================================================

Справочник Товары → ФормаЭлемента

Реквизит формы:
СсылкаНаФото — Строка 500

На форму вывести:
Код
НаименованиеТовара
Наименование
ЕдиницаИзмерения
Цена
Поставщик
Производитель
КатегорияТовара
ДействующаяСкидка
КоличествоНаСкладе
СсылкаНаФото


==================================================
8. ФОРМА ДОКУМЕНТА ЗАКАЗА
==================================================

Документ Заказ → ФормаДокумента

Вывести:
Номер
Дата
ДатаДоставки
АдресПунктаВыдачи
Клиент
КодДляПолучения
СтатусЗаказа
Товары

В таблице Товары:
Товар
Количество


==================================================
9. ФОРМА СПИСКА ЗАКАЗА
==================================================

Документ Заказ → ФормаСписка

Реквизит формы:
ТекущийПользователь — Строка 100

Вывести:
ТекущийПользователь
Список


==================================================
10. ОБРАБОТКА ЗАГРУЗКАДАННЫХ
==================================================

Обработка ЗагрузкаДанных → Форма

Реквизиты формы:
ПутьКФайлу — Строка 500
ПапкаСКартинками — Строка 500
ТабДок — ТабличныйДокумент

Команды:
ЗагрузитьПользователей
ЗагрузитьПунктыВыдачи
ЗагрузитьТовары
ЗагрузитьЗаказы

Вывести на форму:
ПутьКФайлу
ПапкаСКартинками
ТабДок
ЗагрузитьПользователей
ЗагрузитьПунктыВыдачи
ЗагрузитьТовары
ЗагрузитьЗаказы

У команд поставить действия:
ЗагрузитьПользователей → ЗагрузитьПользователей
ЗагрузитьПунктыВыдачи → ЗагрузитьПунктыВыдачи
ЗагрузитьТовары → ЗагрузитьТовары
ЗагрузитьЗаказы → ЗагрузитьЗаказы


==================================================
11. КОД МОДУЛЯ СЕАНСА
==================================================

Открыть:
Конфигурация → Открыть модуль сеанса

Вставить:

Процедура УстановкаПараметровСеанса(ТребуемыеПараметры)

	ПараметрыСеанса.ТекущийПользователь = Справочники.Пользователи.ПустаяСсылка();

КонецПроцедуры


==================================================
12. КОД МОДУЛЯ УПРАВЛЯЕМОГО ПРИЛОЖЕНИЯ
==================================================

Открыть:
Конфигурация → Открыть модуль управляемого приложения

Вставить:

&НаКлиенте
Процедура ПриНачалеРаботыСистемы()

	ОткрытьФорму("ОбщаяФорма.ФормаАвторизации");

КонецПроцедуры


==================================================
13. КОД ФОРМЫ АВТОРИЗАЦИИ
==================================================

Открыть:
Общие формы → ФормаАвторизации → Модуль

Вставить:

&НаСервере
Функция АвторизацияНаСервере()

	НайденныйПользователь = Справочники.Пользователи.НайтиПоРеквизиту("Логин", Логин);

	Если НайденныйПользователь <> Справочники.Пользователи.ПустаяСсылка()
		И НайденныйПользователь.Пароль = Пароль Тогда

		ПараметрыСеанса.ТекущийПользователь = НайденныйПользователь;
		ТекущийПользователь = Строка(НайденныйПользователь);

		Сообщить("Авторизация успешна. Добро пожаловать, " + Строка(НайденныйПользователь));

		Возврат Истина;

	Иначе

		ПараметрыСеанса.ТекущийПользователь = Справочники.Пользователи.ПустаяСсылка();
		ТекущийПользователь = "Гость";

		Сообщить("Введены неверные данные пользователя.");

		Возврат Ложь;

	КонецЕсли;

КонецФункции


&НаСервере
Процедура ВойтиКакГостьНаСервере()

	ПараметрыСеанса.ТекущийПользователь = Справочники.Пользователи.ПустаяСсылка();
	ТекущийПользователь = "Гость";

КонецПроцедуры


&НаКлиенте
Процедура Авторизация(Команда)

	Если АвторизацияНаСервере() Тогда
		ОткрытьФорму("Справочник.Товары.Форма.ФормаСписка");
	КонецЕсли;

КонецПроцедуры


&НаКлиенте
Процедура ВойтиКакГость(Команда)

	ВойтиКакГостьНаСервере();
	ОткрытьФорму("Справочник.Товары.Форма.ФормаСписка");

КонецПроцедуры


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

	ПараметрыСеанса.ТекущийПользователь = Справочники.Пользователи.ПустаяСсылка();
	ТекущийПользователь = "Гость";

КонецПроцедуры


==================================================
14. КОД ФОРМЫ СПИСКА ТОВАРОВ
==================================================

Открыть:
Справочники → Товары → Формы → ФормаСписка → Модуль

Вставить:

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

	НастроитьФормуПоРоли();

КонецПроцедуры


&НаСервере
Процедура НастроитьФормуПоРоли()

	Если ПараметрыСеанса.ТекущийПользователь = Справочники.Пользователи.ПустаяСсылка() Тогда

		ТекущийПользователь = "Гость";

		Если Элементы.Найти("Список") <> Неопределено Тогда
			Элементы.Список.ТолькоПросмотр = Истина;
		КонецЕсли;

		СкрытьЭлемент("ГруппаФункцийМенеджера");
		СкрытьЭлемент("ГруппаФункцийАдминистратора");
		СкрытьЭлемент("ГруппаПоискаИОтбора");

		Возврат;

	КонецЕсли;

	Пользователь = ПараметрыСеанса.ТекущийПользователь;
	ТекущийПользователь = Строка(Пользователь);

	Если Пользователь.РольСотрудника = Перечисления.Роли.Администратор Тогда

		Если Элементы.Найти("Список") <> Неопределено Тогда
			Элементы.Список.ТолькоПросмотр = Ложь;
		КонецЕсли;

		ПоказатьЭлемент("ГруппаФункцийМенеджера");
		ПоказатьЭлемент("ГруппаФункцийАдминистратора");
		ПоказатьЭлемент("ГруппаПоискаИОтбора");

	ИначеЕсли Пользователь.РольСотрудника = Перечисления.Роли.Менеджер Тогда

		Если Элементы.Найти("Список") <> Неопределено Тогда
			Элементы.Список.ТолькоПросмотр = Истина;
		КонецЕсли;

		ПоказатьЭлемент("ГруппаФункцийМенеджера");
		СкрытьЭлемент("ГруппаФункцийАдминистратора");
		ПоказатьЭлемент("ГруппаПоискаИОтбора");

	Иначе

		Если Элементы.Найти("Список") <> Неопределено Тогда
			Элементы.Список.ТолькоПросмотр = Истина;
		КонецЕсли;

		СкрытьЭлемент("ГруппаФункцийМенеджера");
		СкрытьЭлемент("ГруппаФункцийАдминистратора");
		СкрытьЭлемент("ГруппаПоискаИОтбора");

	КонецЕсли;

КонецПроцедуры


&НаСервере
Процедура ПоказатьЭлемент(ИмяЭлемента)

	Если Элементы.Найти(ИмяЭлемента) <> Неопределено Тогда
		Элементы[ИмяЭлемента].Видимость = Истина;
	КонецЕсли;

КонецПроцедуры


&НаСервере
Процедура СкрытьЭлемент(ИмяЭлемента)

	Если Элементы.Найти(ИмяЭлемента) <> Неопределено Тогда
		Элементы[ИмяЭлемента].Видимость = Ложь;
	КонецЕсли;

КонецПроцедуры


&НаКлиенте
Процедура ОткрытьЗаказы(Команда)

	ОткрытьФорму("Документ.Заказ.Форма.ФормаСписка");

КонецПроцедуры


&НаКлиенте
Процедура ДобавитьТовар(Команда)

	ОткрытьФорму("Справочник.Товары.Форма.ФормаЭлемента");

КонецПроцедуры


&НаКлиенте
Процедура УдалитьТовар(Команда)

	Если Элементы.Список.ТекущаяСтрока = Неопределено Тогда
		Сообщить("Выберите товар для удаления.");
		Возврат;
	КонецЕсли;

	УдалитьТоварНаСервере(Элементы.Список.ТекущаяСтрока);

КонецПроцедуры


&НаСервере
Процедура УдалитьТоварНаСервере(ТоварСсылка)

	Если ТоварСсылка = Справочники.Товары.ПустаяСсылка() Тогда
		Сообщить("Товар не выбран.");
		Возврат;
	КонецЕсли;

	Если ТоварИспользуетсяВЗаказах(ТоварСсылка) Тогда
		Сообщить("Нельзя удалить товар, так как он используется в заказах.");
		Возврат;
	КонецЕсли;

	Попытка

		ТоварОбъект = ТоварСсылка.ПолучитьОбъект();
		ТоварОбъект.Удалить();

		Сообщить("Товар удалён.");

	Исключение

		Сообщить("Не удалось удалить товар: " + ОписаниеОшибки());

	КонецПопытки;

КонецПроцедуры


&НаСервере
Функция ТоварИспользуетсяВЗаказах(ТоварСсылка)

	Запрос = Новый Запрос;
	Запрос.Текст =
	"ВЫБРАТЬ ПЕРВЫЕ 1
	|	ЗаказТовары.Ссылка КАК Ссылка
	|ИЗ
	|	Документ.Заказ.Товары КАК ЗаказТовары
	|ГДЕ
	|	ЗаказТовары.Товар = &Товар";

	Запрос.УстановитьПараметр("Товар", ТоварСсылка);

	Результат = Запрос.Выполнить();

	Возврат НЕ Результат.Пустой();

КонецФункции


==================================================
15. КОД ОБРАБОТКИ ЗАГРУЗКАДАННЫХ
==================================================

Открыть:
Обработки → ЗагрузкаДанных → Формы → Форма → Модуль

Вставить:

&НаКлиенте
Процедура ЗагрузитьПользователей(Команда)
	ЗагрузитьПользователейНаСервере();
КонецПроцедуры


&НаКлиенте
Процедура ЗагрузитьПунктыВыдачи(Команда)
	ЗагрузитьПунктыВыдачиНаСервере();
КонецПроцедуры


&НаКлиенте
Процедура ЗагрузитьТовары(Команда)
	ЗагрузитьТоварыНаСервере();
КонецПроцедуры


&НаКлиенте
Процедура ЗагрузитьЗаказы(Команда)
	ЗагрузитьЗаказыНаСервере();
КонецПроцедуры


&НаСервере
Процедура ЗагрузитьПользователейНаСервере()

	Если ПустаяСтрока(ПутьКФайлу) Тогда
		Сообщить("Укажите путь к файлу пользователей.");
		Возврат;
	КонецЕсли;

	Таблица = Новый ТабличныйДокумент;
	Таблица.Прочитать(ПутьКФайлу);

	Для НомерСтроки = 2 По Таблица.ВысотаТаблицы Цикл

		ФИО = СокрЛП(Таблица.Область(НомерСтроки, 1).Текст);
		ЛогинПользователя = СокрЛП(Таблица.Область(НомерСтроки, 2).Текст);
		ПарольПользователя = СокрЛП(Таблица.Область(НомерСтроки, 3).Текст);
		РольСтрокой = СокрЛП(Таблица.Область(НомерСтроки, 4).Текст);

		Если ПустаяСтрока(ФИО) Тогда
			Продолжить;
		КонецЕсли;

		Ссылка = Справочники.Пользователи.НайтиПоНаименованию(ФИО);

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

		НовыйОбъект.Наименование = ФИО;
		НовыйОбъект.Логин = ЛогинПользователя;
		НовыйОбъект.Пароль = ПарольПользователя;
		НовыйОбъект.РольСотрудника = ПолучитьРоль(РольСтрокой);

		НовыйОбъект.Записать();

	КонецЦикла;

	Сообщить("Пользователи загружены.");

КонецПроцедуры


&НаСервере
Процедура ЗагрузитьПунктыВыдачиНаСервере()

	Если ПустаяСтрока(ПутьКФайлу) Тогда
		Сообщить("Укажите путь к файлу пунктов выдачи.");
		Возврат;
	КонецЕсли;

	Таблица = Новый ТабличныйДокумент;
	Таблица.Прочитать(ПутьКФайлу);

	Для НомерСтроки = 2 По Таблица.ВысотаТаблицы Цикл

		КодПункта = СокрЛП(Таблица.Область(НомерСтроки, 1).Текст);
		Адрес = СокрЛП(Таблица.Область(НомерСтроки, 2).Текст);

		Если ПустаяСтрока(КодПункта) И ПустаяСтрока(Адрес) Тогда
			Продолжить;
		КонецЕсли;

		Ссылка = Справочники.ПунктыВыдачи.НайтиПоКоду(КодПункта);

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

		НовыйОбъект.Наименование = Адрес;
		НовыйОбъект.Записать();

	КонецЦикла;

	Сообщить("Пункты выдачи загружены.");

КонецПроцедуры


&НаСервере
Процедура ЗагрузитьТоварыНаСервере()

	Если ПустаяСтрока(ПутьКФайлу) Тогда
		Сообщить("Укажите путь к файлу товаров.");
		Возврат;
	КонецЕсли;

	Таблица = Новый ТабличныйДокумент;
	Таблица.Прочитать(ПутьКФайлу);

	Для НомерСтроки = 2 По Таблица.ВысотаТаблицы Цикл

		Артикул = СокрЛП(Таблица.Область(НомерСтроки, 1).Текст);
		НаименованиеТовара = СокрЛП(Таблица.Область(НомерСтроки, 2).Текст);
		ЕдиницаИзмерения = СокрЛП(Таблица.Область(НомерСтроки, 3).Текст);
		Цена = ЧислоИзСтроки(Таблица.Область(НомерСтроки, 4).Текст);
		Поставщик = СокрЛП(Таблица.Область(НомерСтроки, 5).Текст);
		Производитель = СокрЛП(Таблица.Область(НомерСтроки, 6).Текст);
		Категория = СокрЛП(Таблица.Область(НомерСтроки, 7).Текст);
		Скидка = ЧислоИзСтроки(Таблица.Область(НомерСтроки, 8).Текст);
		Количество = ЧислоИзСтроки(Таблица.Область(НомерСтроки, 9).Текст);
		Описание = СокрЛП(Таблица.Область(НомерСтроки, 10).Текст);

		ИмяФото = "";
		Если Таблица.ШиринаТаблицы >= 11 Тогда
			ИмяФото = СокрЛП(Таблица.Область(НомерСтроки, 11).Текст);
		КонецЕсли;

		Если ПустаяСтрока(Артикул) Тогда
			Продолжить;
		КонецЕсли;

		Ссылка = Справочники.Товары.НайтиПоКоду(Артикул);

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

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

		Если НЕ ПустаяСтрока(ИмяФото) И НЕ ПустаяСтрока(ПапкаСКартинками) Тогда

			ПолныйПутьКФото = ПапкаСКартинками + "\" + ИмяФото;
			ФайлФото = Новый Файл(ПолныйПутьКФото);

			Если ФайлФото.Существует() Тогда
				ДвоичныеДанныеФото = Новый ДвоичныеДанные(ПолныйПутьКФото);
				НовыйОбъект.Фото = Новый ХранилищеЗначения(ДвоичныеДанныеФото);
			КонецЕсли;

		КонецЕсли;

		НовыйОбъект.Записать();

	КонецЦикла;

	Сообщить("Товары загружены.");

КонецПроцедуры


&НаСервере
Процедура ЗагрузитьЗаказыНаСервере()

	Если ПустаяСтрока(ПутьКФайлу) Тогда
		Сообщить("Укажите путь к файлу заказов.");
		Возврат;
	КонецЕсли;

	Таблица = Новый ТабличныйДокумент;
	Таблица.Прочитать(ПутьКФайлу);

	ТекущийНомерЗаказа = "";
	ДокументЗаказ = Неопределено;

	Для НомерСтроки = 2 По Таблица.ВысотаТаблицы Цикл

		НомерЗаказа = СокрЛП(Таблица.Область(НомерСтроки, 1).Текст);
		ДатаЗаказа = ДатаИзСтроки(Таблица.Область(НомерСтроки, 2).Текст);
		ДатаДоставки = ДатаИзСтроки(Таблица.Область(НомерСтроки, 3).Текст);
		КодПункта = СокрЛП(Таблица.Область(НомерСтроки, 4).Текст);
		Клиент = СокрЛП(Таблица.Область(НомерСтроки, 5).Текст);
		КодПолучения = СокрЛП(Таблица.Область(НомерСтроки, 6).Текст);
		Статус = СокрЛП(Таблица.Область(НомерСтроки, 7).Текст);
		Артикул = СокрЛП(Таблица.Область(НомерСтроки, 8).Текст);
		Количество = ЧислоИзСтроки(Таблица.Область(НомерСтроки, 9).Текст);

		Если ПустаяСтрока(НомерЗаказа) Тогда
			Продолжить;
		КонецЕсли;

		Если ТекущийНомерЗаказа <> НомерЗаказа Тогда

			Если ДокументЗаказ <> Неопределено Тогда
				ДокументЗаказ.Записать();
			КонецЕсли;

			ТекущийНомерЗаказа = НомерЗаказа;

			ДокументЗаказ = Документы.Заказ.СоздатьДокумент();
			ДокументЗаказ.Номер = НомерЗаказа;
			ДокументЗаказ.Дата = ДатаЗаказа;
			ДокументЗаказ.ДатаДоставки = ДатаДоставки;
			ДокументЗаказ.АдресПунктаВыдачи = НайтиПунктВыдачиПоКоду(КодПункта);
			ДокументЗаказ.Клиент = НайтиПользователя(Клиент);
			ДокументЗаказ.КодДляПолучения = КодПолучения;
			ДокументЗаказ.СтатусЗаказа = ПолучитьСтатусЗаказа(Статус);

		КонецЕсли;

		Если ДокументЗаказ <> Неопределено Тогда

			ТоварСсылка = Справочники.Товары.НайтиПоКоду(Артикул);

			Если ТоварСсылка <> Справочники.Товары.ПустаяСсылка() Тогда
				НоваяСтрока = ДокументЗаказ.Товары.Добавить();
				НоваяСтрока.Товар = ТоварСсылка;
				НоваяСтрока.Количество = Количество;
			КонецЕсли;

		КонецЕсли;

	КонецЦикла;

	Если ДокументЗаказ <> Неопределено Тогда
		ДокументЗаказ.Записать();
	КонецЕсли;

	Сообщить("Заказы загружены.");

КонецПроцедуры


&НаСервере
Функция ЧислоИзСтроки(ЗначениеСтрокой)

	СтрокаЧисла = СокрЛП(Строка(ЗначениеСтрокой));
	СтрокаЧисла = СтрЗаменить(СтрокаЧисла, " ", "");
	СтрокаЧисла = СтрЗаменить(СтрокаЧисла, Символы.НПП, "");
	СтрокаЧисла = СтрЗаменить(СтрокаЧисла, "%", "");
	СтрокаЧисла = СтрЗаменить(СтрокаЧисла, ",", ".");

	Если ПустаяСтрока(СтрокаЧисла) Тогда
		Возврат 0;
	КонецЕсли;

	Попытка
		Возврат Число(СтрокаЧисла);
	Исключение
		Возврат 0;
	КонецПопытки;

КонецФункции


&НаСервере
Функция ДатаИзСтроки(ЗначениеСтрокой)

	СтрокаДаты = СокрЛП(Строка(ЗначениеСтрокой));

	Если ПустаяСтрока(СтрокаДаты) Тогда
		Возврат ТекущаяДата();
	КонецЕсли;

	Попытка
		Возврат Дата(СтрокаДаты);
	Исключение
		Возврат ТекущаяДата();
	КонецПопытки;

КонецФункции


&НаСервере
Функция ПолучитьРоль(РольСтрокой)

	РольСтрокой = НРег(СокрЛП(РольСтрокой));

	Если СтрНайти(РольСтрокой, "админ") > 0 Тогда
		Возврат Перечисления.Роли.Администратор;
	ИначеЕсли СтрНайти(РольСтрокой, "менедж") > 0 Тогда
		Возврат Перечисления.Роли.Менеджер;
	Иначе
		Возврат Перечисления.Роли.АвторизированныйКлиент;
	КонецЕсли;

КонецФункции


&НаСервере
Функция ПолучитьСтатусЗаказа(СтатусСтрокой)

	СтатусСтрокой = НРег(СокрЛП(СтатусСтрокой));

	Если СтрНайти(СтатусСтрокой, "заверш") > 0 Тогда
		Возврат Перечисления.СтатусыЗаказов.Завершен;
	ИначеЕсли СтрНайти(СтатусСтрокой, "отмен") > 0 Тогда
		Возврат Перечисления.СтатусыЗаказов.Отменен;
	Иначе
		Возврат Перечисления.СтатусыЗаказов.Новый;
	КонецЕсли;

КонецФункции


&НаСервере
Функция НайтиИлиСоздатьЕдиницуИзмерения(Наименование)

	Наименование = СокрЛП(Наименование);

	Если ПустаяСтрока(Наименование) Тогда
		Возврат Справочники.ЕдиницыИзмерения.ПустаяСсылка();
	КонецЕсли;

	Ссылка = Справочники.ЕдиницыИзмерения.НайтиПоНаименованию(Наименование);

	Если Ссылка <> Справочники.ЕдиницыИзмерения.ПустаяСсылка() Тогда
		Возврат Ссылка;
	КонецЕсли;

	НовыйОбъект = Справочники.ЕдиницыИзмерения.СоздатьЭлемент();
	НовыйОбъект.Наименование = Наименование;
	НовыйОбъект.Записать();

	Возврат НовыйОбъект.Ссылка;

КонецФункции


&НаСервере
Функция НайтиИлиСоздатьПоставщика(Наименование)

	Наименование = СокрЛП(Наименование);

	Если ПустаяСтрока(Наименование) Тогда
		Возврат Справочники.Поставщики.ПустаяСсылка();
	КонецЕсли;

	Ссылка = Справочники.Поставщики.НайтиПоНаименованию(Наименование);

	Если Ссылка <> Справочники.Поставщики.ПустаяСсылка() Тогда
		Возврат Ссылка;
	КонецЕсли;

	НовыйОбъект = Справочники.Поставщики.СоздатьЭлемент();
	НовыйОбъект.Наименование = Наименование;
	НовыйОбъект.Записать();

	Возврат НовыйОбъект.Ссылка;

КонецФункции


&НаСервере
Функция НайтиИлиСоздатьПроизводителя(Наименование)

	Наименование = СокрЛП(Наименование);

	Если ПустаяСтрока(Наименование) Тогда
		Возврат Справочники.Производители.ПустаяСсылка();
	КонецЕсли;

	Ссылка = Справочники.Производители.НайтиПоНаименованию(Наименование);

	Если Ссылка <> Справочники.Производители.ПустаяСсылка() Тогда
		Возврат Ссылка;
	КонецЕсли;

	НовыйОбъект = Справочники.Производители.СоздатьЭлемент();
	НовыйОбъект.Наименование = Наименование;
	НовыйОбъект.Записать();

	Возврат НовыйОбъект.Ссылка;

КонецФункции


&НаСервере
Функция НайтиИлиСоздатьКатегорию(Наименование)

	Наименование = СокрЛП(Наименование);

	Если ПустаяСтрока(Наименование) Тогда
		Возврат Справочники.КатегорииТоваров.ПустаяСсылка();
	КонецЕсли;

	Ссылка = Справочники.КатегорииТоваров.НайтиПоНаименованию(Наименование);

	Если Ссылка <> Справочники.КатегорииТоваров.ПустаяСсылка() Тогда
		Возврат Ссылка;
	КонецЕсли;

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

	Возврат НовыйОбъект.Ссылка;

КонецФункции


&НаСервере
Функция НайтиПунктВыдачиПоКоду(КодПункта)

	КодПункта = СокрЛП(КодПункта);

	Если ПустаяСтрока(КодПункта) Тогда
		Возврат Справочники.ПунктыВыдачи.ПустаяСсылка();
	КонецЕсли;

	Возврат Справочники.ПунктыВыдачи.НайтиПоКоду(КодПункта);

КонецФункции


&НаСервере
Функция НайтиПользователя(ФИО)

	ФИО = СокрЛП(ФИО);

	Если ПустаяСтрока(ФИО) Тогда
		Возврат Справочники.Пользователи.ПустаяСсылка();
	КонецЕсли;

	Ссылка = Справочники.Пользователи.НайтиПоНаименованию(ФИО);

	Если Ссылка <> Справочники.Пользователи.ПустаяСсылка() Тогда
		Возврат Ссылка;
	КонецЕсли;

	НовыйОбъект = Справочники.Пользователи.СоздатьЭлемент();
	НовыйОбъект.Наименование = ФИО;
	НовыйОбъект.Логин = ФИО;
	НовыйОбъект.Пароль = "123";
	НовыйОбъект.РольСотрудника = Перечисления.Роли.АвторизированныйКлиент;
	НовыйОбъект.Записать();

	Возврат НовыйОбъект.Ссылка;

КонецФункции


==================================================
16. ПОРЯДОК ПРОВЕРКИ
==================================================

После всех вставок:

1. Ctrl + F7
2. Если ошибок нет — F7
3. F5

Проверка авторизации:

Войти как гость → список товаров, кнопки скрыты

admin / admin → видит всё

manager / manager → видит открыть заказы и поиск, но не админские кнопки

client / client → видит только список товаров

Создать тестовых пользователей вручную или импортом:

ФИО: Администратор
Логин: admin
Пароль: admin
РольСотрудника: Администратор

ФИО: Менеджер
Логин: manager
Пароль: manager
РольСотрудника: Менеджер

ФИО: Клиент
Логин: client
Пароль: client
РольСотрудника: АвторизированныйКлиент


==================================================
17. ПОРЯДОК ИМПОРТА
==================================================

В обработке ЗагрузкаДанных:

1. В поле ПутьКФайлу вставить путь к Excel-файлу
2. Если грузишь товары с фото — заполнить ПапкаСКартинками
3. Нажать нужную кнопку

Порядок загрузки:

1. ЗагрузитьПользователей
2. ЗагрузитьПунктыВыдачи
3. ЗагрузитьТовары
4. ЗагрузитьЗаказы

Форматы файлов:

Пользователи:
1 ФИО
2 Логин
3 Пароль
4 Роль

ПунктыВыдачи:
1 Код
2 Адрес

Товары:
1 Артикул
2 Наименование товара
3 Единица измерения
4 Цена
5 Поставщик
6 Производитель
7 Категория
8 Скидка
9 Количество
10 Описание
11 Фото

Заказы:
1 Номер заказа
2 Дата заказа
3 Дата доставки
4 Код пункта выдачи
5 Клиент
6 Код для получения
7 Статус
8 Артикул товара
9 Количество


==================================================
18. ЧТО СДАВАТЬ ДОПОЛНИТЕЛЬНО
==================================================

К этой базе приложить:

ERD-диаграмму в PDF
Блок-схему авторизации в PDF
Скриншоты работающей программы
Файлы импорта
Конфигурацию/базу

Итог:
Структура + формы + авторизация + роли + импорт + ERD + блок-схема = 4