Загрузка данных
ФИНАЛЬНЫЙ ГАЙД: КОНФИГУРАЦИЯ 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