645 lines
27 KiB
Markdown
645 lines
27 KiB
Markdown
---
|
||
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 <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
|