Table of Contents
Данный материал является заметками которые я делаю чтобы запомнить как решать задачи. Для конкретной ситуации нужно делать по заданию.
Задания
1 смена
Сформировать алгоритм подсистемы для работы с материалом на складе. Разработать алгоритм функции расчета требуемого количества материала исходя из продукции, в производстве которой используется указанный материал.
Требуемое количество материала рассчитывается на основании данных об использовании указанного материала при изготовлении продукции: суммируется необходимое количество материала, используемого в производстве различных продуктов.
Требуемое количество материала может включать два знака после запятой.
Пример
"Требуемое количество" - (наверное) Сумма количества материала используемого в каждом продукте
В Справочник
"Продукция" добавить Табличная часть
"Материалы" с реквезитами "Материал" и "Количество".
В Справочник
"Материалы" добавить Форма
Форма списка справочника
- Далее в произвольном запросе нужно выбрать
Справочник
"Продажи" -> "Материалы" -> Количество - В конструкторе запроса открыть вкладку
Группировка
- "Количество" выбрать в
Суммируемое поле
с функцией сумма - ok, нарисовать форму по требованию
Оценка
Импортирование данных. Создание скрипта БД
- 0 - Данные объектов не загружены
- 1 - Часть данных объектов загружена верно и в правильном формате
- 2 - Все данные объектов загружены верно и в правильном формате
2 смена
Сформировать алгоритм подсистемы для работы с продукцией компании. Разработать алгоритм функции расчета стоимости продукции исходя из используемых материалов.
Стоимость продукта должна быть рассчитана исходя из используемых материалов.
Стоимость продукта записывается с точностью до сотых, и не может быть отрицательной.
Оценка
Использование комментариев по коду:
- 0 - Комментарии отсутствуют
- 1 - Комментарии дают минимальное понимание кода
- 2 - Комментарии дают полное и очевидное понимание кода
Справочник
Нарисовать форму для элементов
Нужно:
Справочник
: "Партнеты", "Товары"Документ
: "УстановкаЦенТоваров" (Партнер, Товар, Цена)Регистр сведений
: "ЦеныТоваров" (Партнер, Товар, Цена)
"УстановкаЦенТоваров" связать с "ЦеныТоваров"
В Справочник
"Партнеты":
Справочник -> Формы
-> Форма списка справочника
Список(на форме, с права) в свойствах -> Произвольный запрос
, галочку поставить -> Настройка списка
открыть
Настроить расчет скидки из регистра в Конструктор запроса
Указать основную таблицу из которой изначально выбераем, например справочник "Партнеры" а не регистр
Если сразу запрос сделать весь нажать ок он закроет запрос этот и в Основная таблица
выберет регистр, надо будет снова открыть и выбрать справочник
Разделитель добавить в запрос:
Список
-> Настройка списка
-> Вычисляемые поля
добавить "Разделитель"(без кавычек), Выражение
"|"(с кавычками)
Для вычесления скидки добавить в запрос:
ВЫБОР
КОГДА ПродажиОбороты.СуммаОборот > 300000 ТОГДА 15
КОГДА ПродажиОбороты.СуммаОборот > 50000 ТОГДА 10
КОГДА ПродажиОбороты.СуммаОборот > 50000 ТОГДА 5
ИНАЧЕ 0
КОНЕЦ КАК Скида
Нарисовать нужную форму с помощью "Группа - Группа колонок"
В реквезитах Рейтинг и Скидка -> Формат
-> Представление нуля
, галочку поставить
Также в формате для Скидки поставить %, для Рейтинга написать "Рейтинг : Ч"
У Рейтинг сделать ГоризонтальноеПоложение
левто
Форма -> Шапка
убрать галочку
Импорт файлов
Обработки
-> Добавить "ИмпортФайловЭксель"
Добавить форму
На форме добавить в Команды
фкнкцию для нужного файла например "ИмпортТоваров", перетащить ее на форму
В команде написать код:
1 вариант
В данном случае надо сделать 1 функцию "ПолучитьПутьКФайлу", и к каждому типу файла который надо импортировать надо делть 2 функции.
Если надо импортировать 5 файлов то это будет 5 * 2 = 10 + 1
&НаКлиенте
Асинх Функция ПолучитьПутьКФайлу()
Режим = РежимДиалогаВыбораФайла.Открытие;
Диалог = Новый ДиалогВыбораФайла(Режим);
Диалог.Фильтр = "Табличный Документ(*.xlsx)|.xlsx";
ВыбранныеФайлы = Ждать Диалог.ВыбратьАсинх();
Если ВыбранныеФайлы <> Неопределено Тогда
Возврат ВыбранныеФайлы[0];
КонецЕсли;
ВызыватьИсключение "Файл не выбран";
КонецФункции
&НаСервере
Процедура ЗагрузитьТоварыНаСервере(ПутьКФайлу)
Тд = Новый ТабличныйДокумент;
Тд.Прочитать(ПутьКФайлу);
Для Сч = 2 по Тд.ВысотаТаблицы Цикл
ТоварНазвание = Тд.Облать(Сч, 1, Сч, 1).Текст;
ТоварЦена = Тд.Облать(Сч, 2, Сч, 2).Текст;
ТоварЦена = Число(ТоварЦена);
Товар = Справочники.Товары.СоздатьЭлемент();
// Если товара нету в справочнике, добавить его
Если Справочники.Товары.НайтиПоНаименованию(ТоварНазвание) = Справочники.Товары.ПустаяСсылка() Тогда
Товар.Наименование = ТоварНазвание;
Товар.Запись();
Иначе
Товар = Справочники.Товары.НайтиПоНаименованию(ТоварНазвание);
КонецЕсли;
НовыйТоварДокументЦена = Документы.УстановкаЦен.СоздатьДокумент();
НовыйТоварДокументЦена.Дата = ТекущаяДата();
НовыйТоварДокументЦена.Товар = Товар.Ссылка;
НовыйТоварДокументЦена.Цена = ТоварЦена;
НовыйТоварДокументЦена.Записать(РежимЗаписиДокумента.Проведение, РежимПроведенияДокумента.Неоперативный);
КонецЦикла;
Сообщить("Данные загружены");
КонецПроцедуры
&НаКлиенте
Асинх Процедура ЗагрузитьТовары(Команда)
ПутьКФайлу = Ждать ПолучитьПутьКФайлу();
ЗагрузитьТоварыНаСервере(ПутьКФайлу);
КонецПроцедуры
2 вариант
Тут надо создать 3 функции "ПолучитьПутьКФайлу", "ЗагрузкаДанныхНаСервере", "ЗагрузкаДанных"
Если надо импортировать 5 файлов то это будет 3 + 5 = 8
&НаКлиенте
Асинх Функция ПолучитьПутьКФайлу()
Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
ВыбранныеФайлы = Ждать Диалог.ВыбратьАсинх();
Если ВыбранныеФайлы <> Неопределено Тогда
Возврат ВыбранныеФайлы[0];
КонецЕсли;
ВызватьИсключение "Файл не выбран";
КонецФункции
&НаСервере
Процедура ЗагрузкаДанныхНаСервере(ПутьКФайлу, Имя)
Тд = Новый ТабличныйДокумент;
Тд.Прочитать(ПутьКФайлу);
Для Сч = 2 по Тд.ВысотаТаблицы Цикл
Выполнить (Имя + "НаСервере(Тд, Сч)");
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Асинх Процедура ЗагрузкаДанных(Команда)
ПутьКФайлу = Ждать ПолучитьПутьКФайлу();
ЗагрузкаДанныхНаСервере(ПутьКФайлу, Команда.Имя);
Сообщить("Данные Загружены");
КонецПроцедуры
&НаСервере
Процедура ИмпортТиповМатериаловНаСервере(Тд, Сч)
ТипНазвание = Тд.Область(Сч, 1, Сч, 1).Текст;
ТипКоэфицент = Тд.Область(Сч, 2, Сч, 2).Текст;
// если "%" есть
ТипКоэфицент = Число(Сред(ТипКоэфицент, 1, СтрДлина(ТипКоэфицент)-1));
// если нету "%"
ТипКоэфицент = Число(ТипКоэфицент);
ТипМатериала = Справочники.ТипМатериала.НайтиПоНаименованию(ТипНазвание);
Если ТипМатериала = Справочники.ТипМатериала.ПустаяСсылка() Тогда
ТипМатериала = Справочники.ТипМатериала.СоздатьЭлемент();
ТипМатериала.Наименование = ТипНазвание;
Иначе
Возврат
КонецЕсли;
ТипМатериала.ПроцентБрака = ТипКоэфицент;
ТипМатериала.Записать();
КонецПроцедуры
&НаСервере
Процедура ИмпортПартнеровНаСервере(Тд, Сч)
ПартнерТип = Тд.Область(Сч, 1, Сч, 1).Текст;
ПартнерНаименование = Тд.Область(Сч, 2, Сч, 2).Текст;
Партнер = Справочники.Партнеры.НайтиПоНаименованию(ПартнерНаименование);
Если Партнер = Справочники.Партнеры.ПустаяСсылка() Тогда
Партнер = Справочники.Партнеры.СоздатьЭлемент();
Иначе
Возврат
КонецЕсли;
ТипПартнера = Справочники.ТипПартнера.НайтиПоНаименованию(ПартнерТип);
Если ТипПартнера = Справочники.ТипПартнера.ПустаяСсылка() Тогда
ТипПартнера = Справочники.ТипПартнера.СоздатьЭлемент();
ТипПартнера.Наименование = ПартнерТип;
ТипПартнера.Записать();
КонецЕсли;
Партнер.Наименование = ПартнерНаименование;
Партнер.Тип = ТипПартнера.Ссылка;
Партнер.ФИОДиректора = Тд.Область(Сч, 3, Сч, 3).Текст;
Партнер.Почта = Тд.Область(Сч, 4, Сч, 4).Текст;
// 1 вариант
// если нету маски на поле
Партнер.Телефон = Тд.Область(Сч, 5, Сч, 5).Текст
// 2 вариант
// сделать если есть маска на поле
ТелРаздельно = СтрРазделить(Тд.Область(Сч, 5, Сч, 5).Текст, " ", Ложь);
// шаблон делать под маску
Партнер.Телефон = СтрШаблон("+7 %1 %2 %3 %4", ТелРаздельно[0], ТелРаздельно[1], ТелРаздельно[2], ТелРаздельно[3]);
Партнер.ЮредическийАдрес = Тд.Область(Сч, 6, Сч, 6).Текст;
Партнер.Инн = Тд.Область(Сч, 7, Сч, 7).Текст;
Партнер.Рейтинг = Число(Тд.Область(Сч, 8, Сч, 8).Текст);
Партнер.Записать();
КонецПроцедуры
Документ
Установка цены товара в табличной части
Цену товара можно устанавливать в документе например "УстановкаЦен" чтобы он сам заносил его в регистр сведений
Для подстановки цены товара надо для "Товара" и "Количество" добавить функции ПриИзменении
:
&НаКлиенте
Функция ЦенаТовара(Товар)
// 1 вариант
Отбор = Новый Структура("Товар", Товар);
Запись = РегистрыСведений.ЦеныПродукции.ПолучитьПоследнее(Объект.Дата, Отбор);
Возврат ?(Запись.Цена, Запись.Цена, 0)
// 2 вариант
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| ЦеныПродукцииСрезПоследних.Цена как Цена
| Из
| РегистрСведений.ЦеныПродукции.СрезПоследних(&Дата, Товар = &Товар) КАК ЦеныПродукцииСрезПоследних";
Запрос.УстановитьПараметр("Дата", Объект.Дата);
Запрос.УстановитьПараметр("Товар", Товар);
Выборка = Запрос.Выполнить();
Результат = Выборка.Выбрать();
Возврат ?(Выборка.Следующий(), Выбор.Цена, 0);
КонецФункции
&НаКлиенте
Процедура ТоварыТоварПриИзменении(Элемент)
Строка = Элементы.Товары.ТекущиеДанные;
Строка.Сумма = Строка.Количество * Строка.Цена
КонецПроцедуры
&НаКлиенте
Процедура ТоварыКоличествоПриИзменении(Элемент)
Строка = Элементы.Товары.ТекущиеДанные;
Строка.Цена = ЦенаТовара(Строка.Товар);
КонецПроцедуры
Фото
Сделать справочник "Фото"
Добавить реквезит "Значение" тип ХранилищеЗначения
Добавить форму:
Наименование
->ТолькоПросмотр
-> поставить галочку- В
Реквезиты
на форме добавить "Значение" - На форме добавить функции
ПриЧтенииНаСервере
,ПередЗаписьюНаСервере
: - В
Команды
добваить "ЗагрузитьФото", "СкачатьФото", помесить их в группу с наименованием
Добавить новое поле на форму:
Имя
-> "Фото"Заголовок
-> "Превью"ПутьКданным
-> "Значение"Вид
->Поле картинки
РазмерКартинки
->Пропорционально
Написать код для функций:
&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)
Данные = ТекущийОбъект.Значение.Получить();
Значение = ПоместитьВоВременноеХранилище(Данные, УникальныйИдентификатор);
КонецПроцедуры
&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
Если ЭтоАдресВременногоХранилища(Значение) Тогда
Данные = ПолучитьИзВременногоХранилища(Значение);
ТекущийОбъект.Значение = Новый ХранилищеЗначения(Данные, Новый СжатиеДанных(9));
Иначе
Отказ = Истина;
Сообщить("Файл не выбран");
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура СкачатьФото(Команда)
ПараметрыДиалога = Новый ПараметрыДиалогаПолученияФайлов("Сохраните файл");
НачатьПолучениеФайлаССервера(Значение, Объект.Наименование, ПараметрыДиалога);
КонецПроцедуры
&НаКлиенте
Асинх Процедура ЗагрузитьФото(Команда)
ПараметрыДиалога = Новый ПараметрыДиалогаПомещенияФайлов("Загрузка фото");
//ПараметрыДиалога.Фильтр = "Картинка(*.png;*.jpg;*.jpeg)|*.png;*.jpg;*.jpeg";
ОписаниеФайла = Ждать ПоместитьФайлНаСерверАсинх(,,, ПараметрыДиалога, УникальныйИдентификатор);
Если ОписаниеФайла <> Неопределено Тогда
Значение = ОписаниеФайла.Адрес;
Файл = ОписаниеФайла.СсылкаНаФайл;
Объект.Наименование = Файл.Имя;
Иначе
Сообщить("файл не выбран");
КонецЕсли;
КонецПроцедуры
Свойства программы
Конфигурация -> Имя
"Мастер пол"
Конфигурация -> Заставка
Выбрать фото
Конфигурация -> Логотип
Выбрать фото
Подсистемы
Добавить в главную подсистему чтобы небыло пусто:
Конфигурация -> Открыть командный интерфейс основного раздела
Добавить все справочники, документы, отчеты и тд кроме регистров
Цвета Интерфейса
Общее -> Добавить стиль
Конфигурация -> Основной стиль -> выбрать стиль
Пользователи и Роли
Роль -> добавить "админ", действия -> Установить все права
Администрирование -> Пользователи -> Добавить
Регистры
Сведений
Использовать для изменения свойтва объекта, например цена товара обновляется каждый день
Накопления
Использовать для расчета общей суммы по параметрам
Например:
- Измерения - Партнер, Товар
- Ресурсы - Цена, Колличество, Сумма
Отчет
Схема компоновки данных:
- В конструкторе запроса выбрать только нужные поля, остальные вкладки не трогать
- Ресурсы: можно выбрать поля для вычесления например Сумма, Колличество, Мин, Макс и тд
- Настройки: Добавить групировку, в нее добавить нужные для отображения поля
Инвентаризация
документ: инвентаризация Таблица Товар УчетноеКолличество ФактическоеКоличество Отколнение= ФактическоеКоличество - УчетноеКолличество УчетноеКолличество из РегистрНакопления: остатки или 0 Заполняет только ФактическоеКоличество
документы: Списание Таблица Товар Количество=Отколнение Добавить если ФактическоеКоличество < УчетноеКолличество
документы: Приход Таблица Товар Количество=Отколнение Добавить если ФактическоеКоличество > УчетноеКолличество
регистр накопления: остатки
Оформление проекта
Администриование -> Выгрузить информационную базу (как .dt)
ERD
Ссылка как primary key
Свойства из реквезитов переписать с их типами
Табличные части делать как отдельная таблица многие ко многим
Нужно показать:
- Справочники
- Документы
- Перечесление
readme:
Описание какую систему сделал зачем:
Данная система сделана для организации "Мастер пол" для учета партнеров, продаж, материалов ....
Данная система сделана в 1с, нужно создать новую конфигурацию, загрузить ее через Администрирование
-> Загрузить информационную базу
-> выбрать файл "<ИмяФайла>.dt"
Далее необходимо запустить конфигурацию
git
Если попросят загрузить проект на git репозиторий, для этого нужно открыть терминал в папке проекта, выполнить команды:
git init
git add .
git commit -m "init"
git remote add origin <link>
# Если нужен логин пароль
git remote add origin https://<user>:<password>@<link>
Вопросы
-
Разные варианты будут или один
-
Как будут оценивать
-
Сколько модулей, 3 или 4
-
Что будет в 4 модуле
-
Какие задания будут
- Фото
- Импорт файлов
- Открытие дверей
- Доступ сотрудников
- Менеджер составляет заявки
- Резервирование материалов
-
Надо ли делать импорт файлов как функция, или просто переписать данные
-
Надо ли делать отчеты и какие
pro tips
Конфигуратор
- Если написать "Процедура",
Ctrl
+q
- быстрое создание процедуры Ctrl
+Пробел
- авто подстановка переменных, функций, значений и тд
Рабочий режим
Insert
- добавить новую записьShift
+F9
- копировать записть
time
150 минут (2.5 часа):
- 10 прочитать, понять че делать
- 90 программа
- 10 padding (проверка выполненой работы)
- 20 erd
- 10 readme
- 10 padding (проверить несколько раз что сделал)
Оценки
Всего 50 балов:
- 10 баллов - 3
- 20 баллов - 4
- 35 и больше - 5
Waves
Turn it up!
Step up in this bitch like (Turn it up!)
I'm the one your bitch like
Yeah, I'm the one your bitch like (Turn it up!)
And I be talkin' shit like
I ain't scared to lose a fistfight (Turn it up!)
And she grabbin' on my, like
She wanna see if it'll fit right
That's just the wave (Turn it up!)
(Yeah) Waves don't die
Let me crash here for the moment, yeah
I don't need to own it
No lie
Waves don't die, baby
Let me crash here for a moment (Yeah, yeah, yeah, yeah)
Baby, I don't, I don't need to own you (Turn it up!)
Sun don't shine in the shade, ugh (Turn it up!)
Bird can't fly in a cage, ugh (Turn it up!)
Even when somebody go away (Turn it up!)
The feelings don't really go away
That's just the wave
(Yeah) Waves don't die
Let me crash here for the moment
I don't need to own it
No lie
Waves don't die, baby
Let me crash here for a moment (Yeah, yeah, yeah, yeah)
Baby, I don't, I don't need to own you
No lie
No lie
No lie
You set the night on fire
I'm still gon' be here in the morning
No lie
No lie (Yeah)
Ooh, babe, ooh, baby, oh, yeah
You set the night on fire
I'm still gon' be here in the morning
No lie
by Kanye West