commit d9254a0a765395a873ea1832ddc583e67bb21a41
Author: relaxed <>
Date: Thu May 29 06:54:12 2025 +0500
init
diff --git a/one.jpg b/one.jpg
new file mode 100644
index 0000000..2d09705
Binary files /dev/null and b/one.jpg differ
diff --git a/push.sh b/push.sh
new file mode 100755
index 0000000..ee2ce13
--- /dev/null
+++ b/push.sh
@@ -0,0 +1,4 @@
+git add .
+git commit -m "update"
+git reset $(git commit-tree "HEAD^{tree}" -m "init")
+git push origin master -f
diff --git a/readme.md b/readme.md
new file mode 100644
index 0000000..aaa5983
--- /dev/null
+++ b/readme.md
@@ -0,0 +1,644 @@
+---
+gitea: none
+include_toc: true
+---
+
+Данный материал является заметками которые я делаю чтобы запомнить как решать задачи. Для конкретной ситуации нужно делать по заданию.
+
+# Задания
+
+## 1 смена
+
+
+
+Сформировать алгоритм подсистемы для работы с материалом на складе. Разработать алгоритм функции расчета требуемого количества материала исходя из продукции, в производстве которой используется указанный материал.
+
+Требуемое количество материала рассчитывается на основании данных об использовании указанного материала при изготовлении продукции: суммируется необходимое количество материала, используемого в производстве различных продуктов.
+
+Требуемое количество материала может включать два знака после запятой.
+
+### Пример
+
+"Требуемое количество" - (наверное) Сумма количества материала используемого в каждом продукте
+
+В `Справочник` "Продукция" добавить `Табличная часть` "Материалы" с реквезитами "Материал" и "Количество".
+
+В `Справочник` "Материалы" добавить `Форма` `Форма списка справочника`
+
+- Далее в произвольном запросе нужно выбрать `Справочник` "Продажи" -> "Материалы" -> Количество
+- В конструкторе запроса открыть вкладку `Группировка`
+- "Количество" выбрать в `Суммируемое поле` с функцией сумма
+- ok, нарисовать форму по требованию
+
+### Оценка
+
+Импортирование данных. Создание скрипта БД
+- 0 - Данные объектов не загружены
+- 1 - Часть данных объектов загружена верно и в правильном формате
+- 2 - Все данные объектов загружены верно и в правильном формате
+
+
+## 2 смена
+
+
+
+Сформировать алгоритм подсистемы для работы с продукцией компании. Разработать алгоритм функции расчета стоимости продукции исходя из используемых материалов.
+
+Стоимость продукта должна быть рассчитана исходя из используемых материалов.
+
+Стоимость продукта записывается с точностью до сотых, и не может быть отрицательной.
+
+### Оценка
+
+Использование комментариев по коду:
+- 0 - Комментарии отсутствуют
+- 1 - Комментарии дают минимальное понимание кода
+- 2 - Комментарии дают полное и очевидное понимание кода
+
+
+# Справочник
+
+## Нарисовать форму для элементов
+
+Нужно:
+- `Справочник`: "Партнеты", "Товары"
+- `Документ`: "УстановкаЦенТоваров" (Партнер, Товар, Цена)
+- `Регистр сведений`: "ЦеныТоваров" (Партнер, Товар, Цена)
+
+"УстановкаЦенТоваров" связать с "ЦеныТоваров"
+
+В `Справочник` "Партнеты":
+
+Справочник -> `Формы` -> `Форма списка справочника`
+
+Список(на форме, с права) в свойствах -> `Произвольный запрос`, галочку поставить -> `Настройка списка` открыть
+
+Настроить расчет скидки из регистра в `Конструктор запроса`
+
+Указать основную таблицу из которой изначально выбераем, например справочник "Партнеры" а не регистр
+
+Если сразу запрос сделать весь нажать ок он закроет запрос этот и в `Основная таблица` выберет регистр, надо будет снова открыть и выбрать справочник
+
+Разделитель добавить в запрос:
+`Список` -> `Настройка списка` -> `Вычисляемые поля` добавить "Разделитель"(без кавычек), `Выражение` "|"(с кавычками)
+
+Для вычесления скидки добавить в запрос:
+```1с
+ВЫБОР
+ КОГДА ПродажиОбороты.СуммаОборот > 300000 ТОГДА 15
+ КОГДА ПродажиОбороты.СуммаОборот > 50000 ТОГДА 10
+ КОГДА ПродажиОбороты.СуммаОборот > 50000 ТОГДА 5
+ ИНАЧЕ 0
+КОНЕЦ КАК Скида
+```
+
+Нарисовать нужную форму с помощью "Группа - Группа колонок"
+
+В реквезитах Рейтинг и Скидка -> `Формат` -> `Представление нуля`, галочку поставить
+Также в формате для Скидки поставить %, для Рейтинга написать "Рейтинг : Ч"
+У Рейтинг сделать `ГоризонтальноеПоложение` левто
+
+Форма -> `Шапка` убрать галочку
+
+
+# Импорт файлов
+
+`Обработки` -> Добавить "ИмпортФайловЭксель"
+
+Добавить форму
+
+На форме добавить в `Команды` фкнкцию для нужного файла например "ИмпортТоваров", перетащить ее на форму
+
+В команде написать код:
+
+## 1 вариант
+
+В данном случае надо сделать 1 функцию "ПолучитьПутьКФайлу", и к каждому типу файла который надо импортировать надо делть 2 функции.
+
+Если надо импортировать 5 файлов то это будет 5 * 2 = 10 + 1
+
+```1с
+&НаКлиенте
+ Асинх Функция ПолучитьПутьКФайлу()
+ Режим = РежимДиалогаВыбораФайла.Открытие;
+ Диалог = Новый ДиалогВыбораФайла(Режим);
+ Диалог.Фильтр = "Табличный Документ(*.xlsx)|.xlsx";
+ ВыбранныеФайлы = Ждать Диалог.ВыбратьАсинх();
+
+ Если ВыбранныеФайлы <> Неопределено Тогда
+ Возврат ВыбранныеФайлы[0];
+ КонецЕсли;
+
+ ВызыватьИсключение "Файл не выбран";
+КонецФункции
+
+&НаСервере
+Процедура ЗагрузитьТоварыНаСервере(ПутьКФайлу)
+ Тд = Новый ТабличныйДокумент;
+ Тд.Прочитать(ПутьКФайлу);
+
+ Для Сч = 2 по Тд.ВысотаТаблицы Цикл
+ ТоварНазвание = Тд.Облать(Сч, 1, Сч, 1).Текст;
+
+ ТоварЦена = Тд.Облать(Сч, 2, Сч, 2).Текст;
+ ТоварЦена = Число(ТоварЦена);
+
+ Товар = Справочники.Товары.СоздатьЭлемент();
+
+ // Если товара нету в справочнике, добавить его
+ Если Справочники.Товары.НайтиПоНаименованию(ТоварНазвание) = Справочники.Товары.ПустаяСсылка() Тогда
+ Товар.Наименование = ТоварНазвание;
+ Товар.Запись();
+ Иначе
+ Товар = Справочники.Товары.НайтиПоНаименованию(ТоварНазвание);
+ КонецЕсли;
+
+ НовыйТоварДокументЦена = Документы.УстановкаЦен.СоздатьДокумент();
+ НовыйТоварДокументЦена.Дата = ТекущаяДата();
+ НовыйТоварДокументЦена.Товар = Товар.Ссылка;
+ НовыйТоварДокументЦена.Цена = ТоварЦена;
+ НовыйТоварДокументЦена.Записать(РежимЗаписиДокумента.Проведение, РежимПроведенияДокумента.Неоперативный);
+ КонецЦикла;
+
+ Сообщить("Данные загружены");
+КонецПроцедуры
+
+&НаКлиенте
+Асинх Процедура ЗагрузитьТовары(Команда)
+ ПутьКФайлу = Ждать ПолучитьПутьКФайлу();
+ ЗагрузитьТоварыНаСервере(ПутьКФайлу);
+КонецПроцедуры
+```
+
+## 2 вариант
+
+Тут надо создать 3 функции "ПолучитьПутьКФайлу", "ЗагрузкаДанныхНаСервере", "ЗагрузкаДанных"
+
+Если надо импортировать 5 файлов то это будет 3 + 5 = 8
+
+```1с
+&НаКлиенте
+Асинх Функция ПолучитьПутьКФайлу()
+ Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
+ ВыбранныеФайлы = Ждать Диалог.ВыбратьАсинх();
+
+ Если ВыбранныеФайлы <> Неопределено Тогда
+ Возврат ВыбранныеФайлы[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с
+&НаКлиенте
+Функция ЦенаТовара(Товар)
+ // 1 вариант
+ Отбор = Новый Структура("Товар", Товар);
+ Запись = РегистрыСведений.ЦеныПродукции.ПолучитьПоследнее(Объект.Дата, Отбор);
+ Возврат ?(Запись.Цена, Запись.Цена, 0)
+
+ // 2 вариант
+ Запрос = Новый Запрос;
+ Запрос.Текст = "ВЫБРАТЬ
+ | ЦеныПродукцииСрезПоследних.Цена как Цена
+ | Из
+ | РегистрСведений.ЦеныПродукции.СрезПоследних(&Дата, Товар = &Товар) КАК ЦеныПродукцииСрезПоследних";
+ Запрос.УстановитьПараметр("Дата", Объект.Дата);
+ Запрос.УстановитьПараметр("Товар", Товар);
+ Выборка = Запрос.Выполнить();
+ Результат = Выборка.Выбрать();
+ Возврат ?(Выборка.Следующий(), Выбор.Цена, 0);
+КонецФункции
+
+&НаКлиенте
+Процедура ТоварыТоварПриИзменении(Элемент)
+ Строка = Элементы.Товары.ТекущиеДанные;
+ Строка.Сумма = Строка.Количество * Строка.Цена
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ТоварыКоличествоПриИзменении(Элемент)
+ Строка = Элементы.Товары.ТекущиеДанные;
+ Строка.Цена = ЦенаТовара(Строка.Товар);
+КонецПроцедуры
+```
+
+
+# Фото
+
+Сделать справочник "Фото"
+
+Добавить реквезит "Значение" тип `ХранилищеЗначения`
+
+Добавить форму:
+- `Наименование` -> `ТолькоПросмотр` -> поставить галочку
+- В `Реквезиты` на форме добавить "Значение"
+- На форме добавить функции `ПриЧтенииНаСервере`, `ПередЗаписьюНаСервере`:
+- В `Команды` добваить "ЗагрузитьФото", "СкачатьФото", помесить их в группу с наименованием
+
+Добавить новое поле на форму:
+- `Имя` -> "Фото"
+- `Заголовок` -> "Превью"
+- `ПутьКданным` -> "Значение"
+- `Вид` -> `Поле картинки`
+- `РазмерКартинки` -> `Пропорционально`
+
+Написать код для функций:
+
+```1с
+&НаСервере
+Процедура ПриЧтенииНаСервере(ТекущийОбъект)
+ Данные = ТекущийОбъект.Значение.Получить();
+ Значение = ПоместитьВоВременноеХранилище(Данные, УникальныйИдентификатор);
+КонецПроцедуры
+
+&НаСервере
+Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
+ Если ЭтоАдресВременногоХранилища(Значение) Тогда
+ Данные = ПолучитьИзВременногоХранилища(Значение);
+ ТекущийОбъект.Значение = Новый ХранилищеЗначения(Данные, Новый СжатиеДанных(9));
+ Иначе
+ Отказ = Истина;
+ Сообщить("Файл не выбран");
+ КонецЕсли;
+КонецПроцедуры
+
+
+&НаКлиенте
+Процедура СкачатьФото(Команда)
+ ПараметрыДиалога = Новый ПараметрыДиалогаПолученияФайлов("Сохраните файл");
+ НачатьПолучениеФайлаССервера(Значение, Объект.Наименование, ПараметрыДиалога);
+КонецПроцедуры
+
+&НаКлиенте
+Асинх Процедура ЗагрузитьФото(Команда)
+ ПараметрыДиалога = Новый ПараметрыДиалогаПомещенияФайлов("Загрузка фото");
+ //ПараметрыДиалога.Фильтр = "Картинка(*.png;*.jpg;*.jpeg)|*.png;*.jpg;*.jpeg";
+ ОписаниеФайла = Ждать ПоместитьФайлНаСерверАсинх(,,, ПараметрыДиалога, УникальныйИдентификатор);
+
+ Если ОписаниеФайла <> Неопределено Тогда
+ Значение = ОписаниеФайла.Адрес;
+ Файл = ОписаниеФайла.СсылкаНаФайл;
+ Объект.Наименование = Файл.Имя;
+ Иначе
+ Сообщить("файл не выбран");
+ КонецЕсли;
+КонецПроцедуры
+```
+
+
+# Свойства программы
+
+Конфигурация -> `Имя` "Мастер пол"
+
+Конфигурация -> `Заставка` Выбрать фото
+
+Конфигурация -> `Логотип` Выбрать фото
+
+
+# Подсистемы
+
+Добавить в главную подсистему чтобы небыло пусто:
+
+Конфигурация -> Открыть командный интерфейс основного раздела
+
+Добавить все справочники, документы, отчеты и тд кроме регистров
+
+
+# Цвета Интерфейса
+
+Общее -> Добавить стиль
+
+Конфигурация -> Основной стиль -> выбрать стиль
+
+
+# Пользователи и Роли
+
+Роль -> добавить "админ", действия -> Установить все права
+
+Администрирование -> Пользователи -> Добавить
+
+
+# Регистры
+
+## Сведений
+
+Использовать для изменения свойтва объекта, например цена товара обновляется каждый день
+
+## Накопления
+
+Использовать для расчета общей суммы по параметрам
+
+Например:
+- Измерения - Партнер, Товар
+- Ресурсы - Цена, Колличество, Сумма
+
+# Отчет
+
+Схема компоновки данных:
+- В конструкторе запроса выбрать только нужные поля, остальные вкладки не трогать
+- Ресурсы: можно выбрать поля для вычесления например Сумма, Колличество, Мин, Макс и тд
+- Настройки: Добавить групировку, в нее добавить нужные для отображения поля
+
+
+# Инвентаризация
+
+документ: инвентаризация
+Таблица
+Товар УчетноеКолличество ФактическоеКоличество Отколнение= ФактическоеКоличество - УчетноеКолличество
+УчетноеКолличество из РегистрНакопления: остатки или 0
+Заполняет только ФактическоеКоличество
+
+документы: Списание
+Таблица
+Товар Количество=Отколнение
+Добавить если ФактическоеКоличество < УчетноеКолличество
+
+документы: Приход
+Таблица
+Товар Количество=Отколнение
+Добавить если ФактическоеКоличество > УчетноеКолличество
+
+регистр накопления: остатки
+
+
+# Оформление проекта
+
+Администриование -> Выгрузить информационную базу (как .dt)
+
+## ERD
+
+Ссылка как primary key
+
+Свойства из реквезитов переписать с их типами
+
+Табличные части делать как отдельная таблица многие ко многим
+
+Нужно показать:
+- Справочники
+- Документы
+- Перечесление
+
+## readme:
+
+Описание какую систему сделал зачем:
+
+Данная система сделана для организации "Мастер пол" для учета партнеров, продаж, материалов ....
+
+Данная система сделана в 1с, нужно создать новую конфигурацию, загрузить ее через `Администрирование` -> `Загрузить информационную базу` -> выбрать файл "<ИмяФайла>.dt"
+
+Далее необходимо запустить конфигурацию
+
+## git
+
+Если попросят загрузить проект на git репозиторий, для этого нужно открыть терминал в папке проекта, выполнить команды:
+
+```bash
+git init
+git add .
+git commit -m "init"
+git remote add origin
+
+# Если нужен логин пароль
+git remote add origin https://:@
+```
+
+
+# Вопросы
+
+- Разные варианты будут или один
+
+- Как будут оценивать
+
+- Сколько модулей, 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
diff --git a/two.jpg b/two.jpg
new file mode 100644
index 0000000..f81a743
Binary files /dev/null and b/two.jpg differ