WoWSab

WoWSab

ЧеШЫрский КОД
Пикабушник
Дата рождения: 25 августа 1989
PCDonetsk user7848645
user7848645 и еще 1 донатер
user9081030 ждёт новые посты
поставил 633 плюса и 73 минуса
отредактировал 5 постов
проголосовал за 10 редактирований

На пиво #2

Ну и на закуску

0 500
из 500 собрано осталось собрать
Награды:
За надежную связь За заезд из Москвы 10 лет на Пикабу Вы — Знаток года! За стойкость За тренерскую работу Чемпион МЕГАборья Геймеру от геймеров За фэнтезийных айтишников Летняя коллекция С Днем рождения Пикабу! Высокий разум Родом из детства Багажных дел мастер За найденных котиков За победу в шоу «Самый-самый» За поиск настоящего сокровища Чернопятничный поисковик
25К рейтинг 781 подписчик 28 подписок 62 поста 28 в горячем

Гайд - импортируем CKEditor 5 в Laravel 10 как модуль node.js

Всем привет!

Уже давно настала эра WYSIWYG - редакторов текстов, и при написании наших веб проектов мы конечно же стараемся их использовать по максимуму.

Один из таких редакторов ну просто с сумасшедше-огромной функциональностью - это небезызвестный CKEditor, который недавно (шучу, давно уже) зарелизился замечательной 5-й версией.

Ее мы сегодня и будем импортировать в наш проект на Laravel 10. Скриншотик (и пасхалочка, кто знает тот поймет) внизу.

Как обычно есть 2 пути - простой и сложный.

Простой - это просто прописать в шаблоне

<script src="https://cdn.ckeditor.com/ckeditor5/40.0.0/classic/ckeditor.js"></script>

И активировать его на textarea через ClassicEditor.create().

Но есть нюанс.... что если авторы решат уйти из РФ и ограничит доступ? Или же РКН решит что "ты не пройдешь!" и ... ты не пройдешь. Нужно любить всех своих пользователей, а не заставлять их расчехлять VPN потому что на сайте не работает редактор.

Да и мы ведь серьезный проект пишем! Нам нужно свое! Да еще и желательно с кастомным билдом под наши задачи!

По этому мы пойдем по второму пути - сложному, который делится еще на два.

Назовем их "следовать инструкциям" и "догадаться самим".

Но перед тем как начать - нам нужно собрать кастомный билд с нужными нами модулями и настройками. Что можно спокойно сделать на сайте. Я использовал билд на базе ClassicEditor, выбрал нужные мне модули в том числе и модуль watchdog на будущее (сейчас активировать его в коде я его конечно-же не буду). В общем, качаем билд и распаковываем его в "Новая папка (3)" на рабочке. Он нам понадобится, но несколько позже.

Гайд - импортируем CKEditor 5 в Laravel 10 как модуль node.js Гайд, Инструкция, Программирование, PHP, Javascript, Nodejs, Laravel, Длиннопост, Разработка, Веб-разработка, IT

Распакованный архив с кастомным билдом

Следуем инструкциям.

По инструкции на сайте мы берем скачанный билд, копируем его в папку с проектом в директорию public\assets\ckeditor5, импортируем .js файл в blade шаблон и так-же активируем его через EditorWatchdog() или CreateEditor(). Легко и просто, и в принципе все гайды в интернете по интеграции в Laravel пишут нам что так делать правильно.

Но нас то не обманешь! У нас серьезный проект! И ведь действительно, вдруг нам потом понадобится модуль, который мы не добавили в наш билд? Пересобирать заново? Да ну его! По этому мы пойдем своим путем! Поехали!

Догадываемся сами

К нашему счастью в Laravel встроен замечательнейший инструмент под названием Node.js, который мы и будем использовать. И не только его.

Установка

Идем консолькой в папку с нашим проектом и запускаем (не забудь включить vpn)

npm install --save @ckeditor/ckeditor5-build-classic

Гайд - импортируем CKEditor 5 в Laravel 10 как модуль node.js Гайд, Инструкция, Программирование, PHP, Javascript, Nodejs, Laravel, Длиннопост, Разработка, Веб-разработка, IT

Установка

Сразу нам устанавливается множество зависимостей, однако наш любимый Laravel 10 этот модуль сразу не увидит. Для того чтобы это исправить нам нужно сделать еще кое-что. Поехали интегрировать.

Интеграция

Нам нужно чтобы наш Laravel увидел CKEditor, да собирал его под наши нужды "на лету". Для этого мы будем использовать vite, благо он идет в составе Laravel. У авторов CKEditor для него есть отдельный модуль с названием @ckeditor/vite-plugin-ckeditor5, его и будем использовать. Также нам понадобится модуль @ckeditor/ckeditor5-theme-lark.

Снова консоль, пишем:

npm install --save @ckeditor/vite-plugin-ckeditor5

npm install --save @ckeditor/ckeditor5-theme-lark

Пока ждем установку - наливаем кофе.

Далее ищем в корне нашего проекта файл vite.config.js и вносим в него следующие строки как показано на скриншоте (слева - старый файл, справа - внесенные изменения)

import { createRequire } from 'node:module';
const require = createRequire( import.meta.url );

import ckeditor5 from '@ckeditor/vite-plugin-ckeditor5';

ckeditor5( { theme: require.resolve( '@ckeditor/ckeditor5-theme-lark' ) } ),

Гайд - импортируем CKEditor 5 в Laravel 10 как модуль node.js Гайд, Инструкция, Программирование, PHP, Javascript, Nodejs, Laravel, Длиннопост, Разработка, Веб-разработка, IT

vite.config.js

Конфигурируем

Помните ту конфигурацию, что мы делали на сайте CKE? Она то нам сейчас и понадобится.

Открываем Новую папку (3) и в подпапке src находим файл ckeditor.ts. Это файл с настройками нашего билда. Копируем его в папку с проектом, в директорию resources/js.
Также из папки samples копируем style.css в resources/css.
И дополнительно создаем файлик editor.js - его мы и будем встраивать в наш шаблон.

Содержимое editor.js

import ClassicEditor from './ckeditor';

ClassicEditor.Editor
// Note that you do not have to specify the plugin and toolbar configuration — using defaults from the build.
.create( document.querySelector( '#editor' ), {
language: 'ru',
removePlugins: [
'MediaEmbedToolbar'
]
})
.then( editor => {
console.log( 'Editor was initialized', editor );
} )
.catch( error => {
console.error( error.stack );
} );

Для наблюдательных - я специально не использовал watchdog здесь. Импортировать его я планирую потом.

Дальше нам нужно загрузить недостающие модули.

Открываем редактором ckeditor.ts и видим вверху множество импортов.

Гайд - импортируем CKEditor 5 в Laravel 10 как модуль node.js Гайд, Инструкция, Программирование, PHP, Javascript, Nodejs, Laravel, Длиннопост, Разработка, Веб-разработка, IT

Открываем папку "node_modules/@ckeditor" внутри проекта и ищем недостающие модули. Если такие есть - устанавливаем их через npm install --save %имя_модуля%.

В дальнейшем есть шанс получить следующую ошибку от TailWindCSS (при запуске npm run dev)

[vite:css] Nested CSS was detected, but CSS nesting has not been configured correctly.Please enable a CSS nesting plugin *before* Tailwind in your configuration.

Она вызывается из-за того, что мы используем кастомный css для ckeditor

Чтобы этого не происходило, нам необходимо в файле postcss.config.js в корне нашего проекта добавить следующие строки:

'postcss-import': {},
'tailwindcss/nesting': {},

как на скриншоте

Гайд - импортируем CKEditor 5 в Laravel 10 как модуль node.js Гайд, Инструкция, Программирование, PHP, Javascript, Nodejs, Laravel, Длиннопост, Разработка, Веб-разработка, IT

postcss.config.js

Почти все

Нам осталось только в нашем шаблоне между тегов <head> добавить

@Vite(['resources/js/editor.js', 'resources/css/editor.css'])

И теперь любой <div> или <textarea> с указанием id="editor" будет вызван с редактором CKEditor5.

Запускаем проект через npm run dev и радуемся полученному результату!

Результат

Гайд - импортируем CKEditor 5 в Laravel 10 как модуль node.js Гайд, Инструкция, Программирование, PHP, Javascript, Nodejs, Laravel, Длиннопост, Разработка, Веб-разработка, IT

Результат

А Вы заметили пасхалочку на скриншоте?

Все что вам осталось - это настроить дизайн редактора в css файле.

Ну и как-же без ложки дегтя - почему-то конфигурация "language: ru" не срабатывает и редактор остается английским. Возможно не хватает какого-то модуля или же что-то необходимо донастроить. Пока еще не разобрался, но в целом на данном этапе разработки это не сильно критично. Если у Вас есть идеи - welcome!

Update: С языком разобрался. Действительно его необходимо было имортировать. Для этого в ckeditor.ts необходимо вставить строку после импорта { ClassicEditor }

import '@ckeditor/ckeditor5-build-classic/build/translations/ru';

Update2: Также нашел проблему при вставке видео с внешнего источника, например Youtube. В редакторе оно вставляется, а вот в пост не переносится. Лечится доп конфигом там-же в ckeditor.ts в секцию defaultConfig

mediaEmbed: {
previewsInData: true
}

Гайд - импортируем CKEditor 5 в Laravel 10 как модуль node.js Гайд, Инструкция, Программирование, PHP, Javascript, Nodejs, Laravel, Длиннопост, Разработка, Веб-разработка, IT

Исправленная локализация

Надеюсь что данный гайд поможет Вам в проектах.

Если вы хотите немного потрындеть, или быть может знаете Laravel или например умеете верстать, ну или просто у вас есть желание как-нибудь помочь с разработкой проекта, милости прошу в мою потрынделку.

В кратце - да, старый добрый, с блекджеком и шлюпками.

Всем спасибо!

Показать полностью 7

Лесной маньяк и рябиновая настройка

Уж очень понравилась история, не смог не поделиться. Многабукофф. Надеюсь не повтор.

У мeня мaмa, знaeтe ли, нacтοящий лecнοй мaньяκ. Ηу дa, из тex, чтο в κaмуфляжнοй οдeждe и c οгpοмным тecaκοм нaпepeвec нecлышнο бpοдят пο лecу c зaгaдοчнοй улыбκοй. Μaмa cοбиpaeт в лecу вce. Γpибы. Ягοды. Шишκи. Τpaвы. Cтpaшныe κpивыe κοpяги, вeтκи и пaлκи. C κaκοй тapοй мaму в лec ни зaпуcти, xοть c κapьepным caмοcвaлοм БeлΑЗ paзмepοм c пятиэтaжκу, οнa зa пapу чacοв и eгο дοвepxу нaбьeт вcяκими дapaми пpиpοды, тудыть иx pacтудыть.


Ηο вοт κaκ-тο paз cлучилcя у нac нeуpοжaйный гοд. Зacуxa cтοялa κaκaя-тο ужacнaя, ничeгο и нe выpοcлο. Τοльκο в cοвceм уж гиблыx бοлοтax, κудa дaжe caмыe οтмοpοжeнныe мeдвeди cοвaтьcя нe pиcκοвaли, мοжнο былο нaбpaть вeдepκο-дpугοe бpуcниκи. Μaмa, иcпpaвнο eздившaя в лec κaждыe выxοдныe, зaмeтнο пpиунылa. Κaκ жe этο, ни гpибοв тeбe, ни ягοд, ни οpexοв, дaжe пeнь пpиличный фиг paздοбудeшь, пοтοму чтο иx пecцы c гοлοдуxи вce изгpызли. Χοть пepexοди c cοбиpaтeльcтвa нa οxοту, пpигοвapивaлa дοpοгaя мοя pοдитeльницa, зaдумчивο paccмaтpивaя в интepнeтe cпиcοκ дοκумeнтοв для пpиοбpeтeния глaдκοcтвοлa. Я, пpeдcтaвляя, κaκ чиcтκa, οтвapивaниe, οбжapивaниe, зacοлκa и зaмοpοзκa бecκοнeчныx гpибοв cмeняютcя пοтpοшeниeм, οcвeжeвывaниeм, οбдиpaниeм шκуp, οбpaбοтκοй мяca и пοгpeбeниeм κοcтeй и пοтpοxοв, paзмышлялa οб эмигpaции в Αнтapκтиду. Ибο мοя нecpaвнeннaя мaтушκa, нa минутκу, мacтep cпοpтa пο биaтлοну, бeз дοбычи из тaйги οпpeдeлeннο нe вοзвpaщaлacь бы.


Μaм, a мοжeт, нa pыбaлκу, a? – cκулилa я, уcилиeм вοли οтгοняя видeния цeлыx κуpгaнοв битыx глуxapeй, тeтepeвοв и κуpοпaтοκ, κοтοpыx мнe пpeдcтοит οщипaть, pacпοтpοшить, paздeлaть ну и тaκ дaлee, – нa pыбaлοчκу, мaм? Πaлaтοчκa, cпиннинг, κapacиκи, чeбaчκи. Οκунeчκи. Я знaю, гдe щучκa бepeт xοpοшο. Щучκa, мaм, a?
- Щучκa щучκοй, a οxοтa οxοтοй. Οднο дpугοму нe мeшaeт, – нeвοзмутимο οтвeтcтвοвaлa мaмуля, paccмaтpивaя дeвятую пο cчeту "Caйгу».


Cпaceниe пpишлο οтκудa нe ждaли.
Β οднο пpeκpacнοe οκтябpьcκοe утpο, вοлοчa пο лужaм οтчaяннο зeвaющeгο тaκca в κpивο нaдeтοм κοмбeзe, мaмa οбpaтилa внимaниe нa pябины. Α пοcмοтpeть былο нa чтο. Cлοвнο в κaчecтвe κοмпeнcaции зa нeуpοжaй вceгο вοοбщe, pябины уpοдилοcь мοpe. Дepeвья cтοяли cοвepшeннο κpacныe. Βeтκи гнулиcь пοд тяжecтью κиcтeй пοчти дο зeмли. Α нa зeмлe вaлялиcь бpюxaми κвepxу οбοжpaвшиecя cвиpиcтeли, cиничκи и дpοзды и cытο иκaли.
Χο-xο, cκaзaлa мοя мaмa, xο-xο-xο. Βapeньe. Ηaливοчκa. Ρябинοвaя нaливοчκa!
Τaκc пepeκpecтилcя οбeими лaпaми, зaпοлз в κοмбeз вecь цeлиκοм, κaκ чepeпaxa в пaнциpь, и вecьмa тaлaнтливο пpиκинулcя пοдοxшим eщe нeдeлю нaзaд.
Βecь дeнь мeня мучилο дуpнοe пpeдчувcтвиe. И οнο нe οбмaнулο. Βeчepοм у нac былa пοлнaя c гοpοй вaннa pябины. C гοpοй – этο κaκ eщe οднa вaннa, тοльκο cвepxу.
Cдeлaeм пapοчκу бутылοκ нaливκи, ну и вapeнья cвapим, – бοдpο cκaзaлa мaмуля, и нaутpο οтбылa в κοмaндиpοвκу в Ηοвοcибиpcκ. Ηa двe нeдeли.


Я οcтaлacь нaeдинe c двумя вaннaми pябины и инcтpуκциями pябину c вeтοчeκ οбοдpaть, пpοмыть, пpοвepнуть нa мяcοpубκe, paзлοжить пο бaнκaм, зacыпaть caxapοм и cидeть и ждaть, и дeгуcтaциeй нe увлeκaтьcя. Ρaзум пοдcκaзывaл мнe пpοвepнутьcя нa мяcοpубκe caмοй, paз уж c эмигpaциeй в Αнтapκтиду нe выгοpeлο. Ηο глубοκaя пοpядοчнοcть, чecтнοcть и жeлaниe пpοcлaвитьcя нa вecь миp κaκ пepвый чeлοвeκ, пοдοxший οт pябины, зacтaвляли мeня οбдиpaть чepтοвы ягοды, зaбpacывaть иx в мяcοpубκу и κpутить, и cнοвa οбдиpaть, и зaбpacывaть, и κpутить. Κ вeчepу тpeтьeгο дня я пοнялa, чтο pябины мeньшe нe cтaнοвитcя. Πpοцecc οпpeдeлeннο тpeбοвaл οптимизaции. Ποpaзмыcлив, я peшилa pябину c κиcтοчeκ нe οбдиpaть. Ποpaзмыcлив eщe нeмнοгο, я peшилa, чтο и κиcти c вeтοчeκ тοжe οбдиpaть нe οбязaтeльнο. Дa и xep бы c ними, злοбнο пыxтeлa я, чтο ecть cил нaлeгaя вceй тушκοй нa pучκу мяcοpубκи. Cдeлaннaя нa чeлябинcκοм зaвοдe мeтaлличecκиx издeлий, мяcοpубκa пοтpecκивaлa, пοxpуcтывaлa, пοвизгивaлa, нο вeтοчκи вмecтe κοpοй и лиcтьями мοлοлa иcпpaвнο, тοльκο щeпκи вο вce cтοpοны лeтeли.
Βce paвнο я этο пить нe буду, убeждaлa ceбя я, cмaxивaя мοзοлиcтοй pуκοй пοт cο лбa пpямο в ягοднο-вeтοчную κaшу.
Κ вeчepу чeтвepтοгο дня pябинa κοнчилacь, a я зaимeлa κpοвaвыe вοлдыpи нa лaдοняx, бицeпcы, κaκ у гeppa Швapцeнeггepa нa пиκe κapьepы и cοвepшeннο нeнужную мнe cпοcοбнοcть οдним движeниeм нapиcοвaть идeaльную οκpужнοcть бeз пοмοщи циpκуля.


Ρябинοвκa пοлучилacь иcκлючитeльнaя. Цвeтa ceнтябpьcκοгο зaκaтa, гуcтaя, в мepу cлaдκaя, в мepу тepпκaя, c лeгκοй гοpчинκοй и eщe чeм-тο нeулοвимым, нaпοминaющeм οб οceннeм лece, плaмeни κοcтpa и тοнκοм apοмaтe οпaвшeй лиcтвы. Душa οceни, paзлитaя пο бутылκaм, вοт чтο этο былο тaκοe.
Γοcти были в вοcтοpгe. Бутылοчκи нaливκи pacxοдилиcь нa пοдapκи и cувeниpы, κaκ гοpячиe пиpοжκи.
- Οльгa Ceмeнοвнa, – зaxοдилcя в вοcтοpгe вcяκ οтвeдaвший дивнοгο нaпитκa, – этο пpοcтο вοлшeбнο. Ηaвepняκa жe ceκpeт κaκοй-тο ecть, ну пpизнaйтecь, чтο вы тудa дοбaвляли?
Дa ничeгο οcοбeннοгο, пpοcтο pябинa и caxap, – κοκeтливο улыбaлacь мaмa.
Дpοвa, блин, тaм pябинοвыe, вοт чтο мы тудa дοбaвляли, злοбнο думaлa я.
Ιrina Smastchenkο

Честно стырено отсюда

Показать полностью

Как сделать собственную "а-ля CRM" без навыков программирования (ну почти)

Введение.

Базы данных - это наше всё. Ну или почти всё. В бизнесе любая информация сейчас хранится в базах данных. А специальное программное обеспечение, будь то "1С Битрикс", или какой-нибудь "Мегаплан" помогают в сборе и обработке этих данных. Это мы и называем CRM.

Вообще CRM - это аббревиатура Customer Relationship Management, дословно переводится как «система управления взаимоотношениями с клиентом». Эти системы помогают в сборе данных, их обработке, налаживают бизнесс-процессы внутри компании, помогают "вести" клиента и осуществляют внутренний учет и составление документации.

Сейчас существует ну просто огромнейшее количество готовых решений на любой вкус, цвет, и кошелек. Однако в большинстве случаев это ну просто огромнейшие монстры с кучей порой откровенно "не нужного в данный момент" функционала. Что же делать?

Представим (идиотизируем) ситуацию. У вас небольшой бизнес - например, вы продаете вязаные игрушки ручной работы. У вас не так много заказчиков как у "акул", но при этом вы все-же хотите вести учет клиентов. Давайте добавим сюда еще условие, что вы абсолютно не хотите покупать готовое решение по любым причинам - дорого, лень разбираться, вам не подходит, вы не верите "облакам" и так далее.

Выход из данной ситуации один - написать собственную CRM с блекджеком и шлюпками собственными бизнесс-процессами. Однако как это сделать если ты ни разу ни программист, а денег как не было так и нет?

Выход есть!

Но давайте начнем сразу с ложки дегтя. Программировать придется. Но не в таком объеме как в случае разработки с нуля. Основную работу возьмет на себя конструктор.

И вот он гвоздь нашей программы - DataExpress. https://mydataexpress.ru

По сути это абсолютно бесплатный конструктор приложений баз данных. В нем можно самостоятельно сделать практически все, что требуется малому бизнесу. Начиная от учета клиентов и товара, заканчивая отчетами, документами и договорами. И главное - он отечественный. Разработчик - Дуборкин Павел Борисович, огромное ему спасибо за данное чудо!

Конструктор использует базу данных Firebird версии 2.5. Да, возможно она уже несколько морально устарела, но зато она абсолютно бесплатна и не жрет ресурсов даже в серверной версии.

Давайте начнем.

Качаем программу. Я лично советую скачать портативную версию. Распаковываем и запускаем.

После запуска перед нами открывается уже готовая демо база с учетом товаров, клиентов, товарами и так далее.

Как сделать собственную "а-ля CRM" без навыков программирования (ну почти) Полезное, IT, Программирование, База данных, Своими руками, Длиннопост

В принципе в нашем примере мы уже можем использовать эту базу, но мы ведь хотим свой блекджек. Давайте тогда создадим ее! Файл - Новая...Назовем ка мы эту базу PikaBushehka.

Теперь перед нами пустое окно. Жмем на Файл - Дизайнер.

Теперь мы находимся в режиме создания базы. Давайте определимся с сущностями которые мы будем использовать.

Сразу оговорюсь - сейчас моя цель не создать для вас CRM или сделать гайд. Моя цель - сделать обзорную экскурсию и показать как можно это сделать самостоятельно. Подробно о программировании, создании форм и вообще о всем-всем-всем вы можете почитать на официальном сайте программы.

Погнали. У нас есть сущности "Товары" и "Клиенты". Также у нас есть Сущность "Продажи", кот которая объединяет товары и клиентов. Создаем формы нажатием на кнопку "Добавить форму"

Как сделать собственную "а-ля CRM" без навыков программирования (ну почти) Полезное, IT, Программирование, База данных, Своими руками, Длиннопост

Форма добавилась, давайте обзовем ее. Кликаем на поле посередине и жмем на кнопку ID. Задаем название формы. Пусть это у нас будет "Клиенты".

Как сделать собственную "а-ля CRM" без навыков программирования (ну почти) Полезное, IT, Программирование, База данных, Своими руками, Длиннопост

Внутри формы "Клиенты" создадим 2 поля - ФИО и Адрес. Для начала этого нам достаточно.

Также создаем формы с названием "Товары" и "Продажи".

Как сделать собственную "а-ля CRM" без навыков программирования (ну почти) Полезное, IT, Программирование, База данных, Своими руками, Длиннопост

В "Товары" добавляем поле "Название" и "Цена. Для поля цена используем тип "число" - мы ведь не хотим указывать там что-то отличное от цифр. Точность выставляем 2 знака после запятой - это будут копейки. Также делаем поле обязательным. Для этого кликаем на значок "восклицательный знак" и выбираем "Обязательное".

Как сделать собственную "а-ля CRM" без навыков программирования (ну почти) Полезное, IT, Программирование, База данных, Своими руками, Длиннопост

Дальше необходимо увязать эти формы между собой. Делать мы это будем в форме "Продажи"

Для этого создадим в нем не поле, а объект (цифра 1). Обзовем его (цифра 2) , и свяжем его с формой (цифра 3)

Как сделать собственную "а-ля CRM" без навыков программирования (ну почти) Полезное, IT, Программирование, База данных, Своими руками, Длиннопост

Создаем связи. Выбираем как на скрине. Дополнительное поле "адрес" вставляем через ПКМ - Добавить.

Как сделать собственную "а-ля CRM" без навыков программирования (ну почти) Полезное, IT, Программирование, База данных, Своими руками, Длиннопост

Таким же образом вставляем объект "Товар" и доп. полями "Количество" и "Стоимость"
Они тоже должны быть числовыми. Стоимость тоже делаем с четностью на 2-х символов. И добавляем флажок "Оплачено".

Ну где-же программирование? А вот оно! Давайте теперь запрограммируем поле "Стоимость", чтоб оно считалось автоматически. Для этого кликаем на поле и выбираем "Выражение"

Как сделать собственную "а-ля CRM" без навыков программирования (ну почти) Полезное, IT, Программирование, База данных, Своими руками, Длиннопост

Перед нами открывается редактор выражений.

Как сделать собственную "а-ля CRM" без навыков программирования (ну почти) Полезное, IT, Программирование, База данных, Своими руками, Длиннопост

Давайте теперь сделаем функцию, которая будет проверять введенное количество, а после чего перемножать его на цену выбранного товара и считать стоимость. Для этого идем в функции и выбираем функцию IIF. К слову - к каждой функции есть очень подробное описание. Советую изучить их все. Нам нужно сделать следующее условие. Если количество больше нуля, то стоимость равна количество умножить на цену товара, иначе ставим 0.

Используя инструмент "вставка полей формы" и немного клацанья по клавиатуре доводим выражение до состояния как на скрине.

Как сделать собственную "а-ля CRM" без навыков программирования (ну почти) Полезное, IT, Программирование, База данных, Своими руками, Длиннопост

Нажимаем на ОК.

А мы идем дальше. Сохраняем все. Давайте теперь выйдем из редактора и создадим клиента "Иванов Иван Иваныч", товар "Вязаный медведь" с ценой 100, и одну продажу Иван Иванычу в количестве 2-х штук.
И вот, мы уже получили нашу первую продажу в нашей самописной CRM!

Как сделать собственную "а-ля CRM" без навыков программирования (ну почти) Полезное, IT, Программирование, База данных, Своими руками, Длиннопост

Давайте теперь чуть-чуть раскрасим все. Идем обратно в дизайнер - продажи. Тыкаем на свободное место в форме и используем инструмент "Раскраска" - выглядит как зонтик. Делаем так. Красный цвет - если не оплачено. Зеленый - Если оплачено.

Как сделать собственную "а-ля CRM" без навыков программирования (ну почти) Полезное, IT, Программирование, База данных, Своими руками, Длиннопост

Результат:

Как сделать собственную "а-ля CRM" без навыков программирования (ну почти) Полезное, IT, Программирование, База данных, Своими руками, Длиннопост

И давайте теперь добавим возможность посмотреть историю покупок конкретного клиента.

Заново идем в дизайнер, в форму "Клиенты".

Добавляем запрос (1) , обзываем его "список покупок" (2), и делаем отбор (3)

Как сделать собственную "а-ля CRM" без навыков программирования (ну почти) Полезное, IT, Программирование, База данных, Своими руками, Длиннопост

Отбор заполняем таким образом:

Как сделать собственную "а-ля CRM" без навыков программирования (ну почти) Полезное, IT, Программирование, База данных, Своими руками, Длиннопост

Принцип прост. Сначала выбираем источник информации. Для нас это таблица "Продажи".

Дальше делаем отбор фильтра. Суть его такова - определенное поле источника должно соответствовать полю текущей формы. В нашем случае - Клиент-ФИО должно соответствовать полю ФИО текущей формы. Выделенное же рамкой добавляем используя кнопки "добавить поле".
Кстати, здесь мы тоже можете использовать раскраску ;-)
Попробуйте настроить ее сами, это не сложно =)

Любуемся результатом:

Как сделать собственную "а-ля CRM" без навыков программирования (ну почти) Полезное, IT, Программирование, База данных, Своими руками, Длиннопост

Итоги

На подготовку данного материала ушло 3 часа вместе с программированием примера. =) Я дольше печатал этот текст чем создавал базу.

Dataexpress - достаточно простой, надежный конструктор баз данных, на базе которого можно создать как простую, так и сложную CRM практически без особых навыков программирования. А главное - бесплатно и своими руками.

Здесь было показано максимум 5% функционала данного конструктора. На самом деле его потенциал огромен! Изучайте, пользуйтесь, надеюсь Вам это будет полезно.

Пример разработанной в этом уроке базы я выложил вот здесь. https://drive.google.com/file/d/1edqYwlhHbSHee0pHCFVdUUbhRX0...

Небольшой UPD:

В комментариях написали что это совершенно негибкая система. Не соглашусь. На данной системе написано уже очень много сложных вещей, как пример - медицинская информационная система для стоматологической поликлиники. И кстати распространяют ее тоже бесплатно. Можно скачать и ознакомиться. https://forum.mydataexpress.ru/viewtopic.php?f=40&amp;t=1339...

Скриншоты:

Как сделать собственную "а-ля CRM" без навыков программирования (ну почти) Полезное, IT, Программирование, База данных, Своими руками, Длиннопост
Как сделать собственную "а-ля CRM" без навыков программирования (ну почти) Полезное, IT, Программирование, База данных, Своими руками, Длиннопост
Показать полностью 18

Ответ на пост «Работодатель нормального человека»

Аж захотелось рассказать свою историю. Будет МногаБукафф.

Есть у меня в жизни контраст сравнений адекватного и неадекватного работодателя.

Расскажу свою историю работы на неадеквата, который в начале прикидывался вполне адеквантым.

Прихожу я значит устраиваться на работу на должность тыжпрограммиста-сисадмина-эникея-мастера на все ноги. Время было тяжелое, я только уволился со службы (был нач. подразделения), деньги нужны были срочно, а тут вакансия "Требуется системный администратор, условия такие-то, ЗП по результатам собеседования". К слову до этого (т.е. еще до службы) 6 лет работал инженером по информационной безопасности, хотя по факту делал почти тоже что и сисадмин. Забыл сказать - устраивался в частную медицинскую клинику. Собеседование с текущим специалистом прошел успешно, повели меня к начальнику, по совместительству одному из учредителей компании (всего их двое было). Им оказался однин из местных депутатов. Он мне рассказал чего хочет, я ему в ответ сказал что в целом можно сделать. Я ему сразу обозначил что и как буду переделывать и как это повлияет на прибыль компании.

Порешали на ЗП в 40 тыс + премии по результатам + процент от прибыли при нововведениях. Логика процента такова: Перед крупным нововведением мы фиксируем начальную прибыль подразделения (принимаем ее как отправную точку на момент), а через 3 месяца после считаем дельту. Это будет сразу и мой KPI, и основа для процента. Если дельта положительная - я получаю + 1% к зарплате от дельты на момент фиксации (навсегда).

Да, формула сложная, однако на тот момент условия вполне адекватные, так как:
а. Начальник был полный скептик, и не верил что нормальное ИТ вообще способно как-то увеличить прибыль.
б. Уровень базовой ЗП был действительно низок на тот момент по соотношению к требованиям и обязанностям.
в. Это была реальная возможность начать хорошо зарабатывать по схеме "как потопаешь так и полопаешь".

К слову, у компании, на тот момент из ИТ была только нераспределенная локалка в офисе + файлопомойка на "сервере". Сервером же был комп главбуха.

В самой клинике же было только локалка + база на 1С. Никаких VPN между подразделениями, данные между офисом и клиникой передавались таким образом - в назначенный час нужные "файлики" собирались и записывались на флешки, а после чего они отдавалась курьеру, который их развозил куда нужно. Такое делалось дважды в день.

Начал я с создания домена, после сделал нормальную файлопомойку с группами доступа на отдельном севере, переделал локальные сети на гигабит, поставил нормальные свичи, роутеры, шлюзы, поменял провайдера на другого - такого что предоставляет местный пиринг на гарантированных 100мб/с. Поднял VPN между шлюзами (по сути разгрузив курьера), внедрил систему электронного документооборота. Но это была лишь подготовка. К слову она уже заметно так увеличила прибыль компании просто за счет ускорения проведения рутинных операций и освобождения времени специалистов. Но это были лишь цветочки перед главным - полной переделкой системы учета пациентов.

Так как мне не позволили избавляться от 1С - мол там вся база за много лет, нельзя, все привыкли и так далее.... По этому вместо покупки полноценной МИС (медицинской информационной системы) было решено переписать имеющуюся конфигурацию и оптимизировать ее. К слову, на тот момент 1С использовалась лишь у регистраторов и у управляющей клиники (аналог главной медсестры). Про бухгалтерию молчу - у них было все отдельно и оно не трогалось. Были автоматизированы многие процессы, упрощены экранные формы, сделано огромное количество переработок и нововведений - введено электронное расписание в табличном виде и так далее... После моего трудоустройства прошло около 7 месяцев.

И вот день Ч - делаем фикс прибыли, внедряем новую систему. Не все прошло гладко, первые пару дней пришлось побегать.... Но... Через 3 месяца я получаю к ЗП + 120 тыс. чистыми и огромную благодарность от коллег. Только подумайте - прибыль подразделения увеличилась на 12 миллионов за 3 месяца после нововведения просто за счет ускорения работы! Если люди раньше стояли в огромной очереди в регистратуре - то сейчас регистратура была пуста, на одного пациента уходило буквально 2 минуты вместо предыдущих 10....

Начальство счастливо, пациенты рады, статистика положительная, я радуюсь потяжелевшему карману, но надо двигаться дальше. Покупаем большой Blade сервер + СХД для него, поднимаем виртуализацию + "облако", переводим 1С в режим работы с MSSQL, компы на рабочих местах заменяем на тонкие клиенты, ставим их в том числе и врачам. Для врачей делаем удобные экранные формы, вводим электронные карты, и кучу всяких вспомогательных вещей по типу справочника Видаля и МКБ10.... Внедряем сайт, внедряем колл-центр, делаем всякие плюшки в виде удаленной записи на прием, системы обратного звонка, и так далее и тому подобное.....

Снова делаем фикс, запускаем в продакшн... И вот, моя зп уже приближается к 300 тыс. в месяц...

Но на этом моменте начались проблемы.

На тот момент мы уже переехали в новое более просторное помещение, так как старое уже не выдерживало прироста пациентов. Немного расширился штат... Ну как немного...раза в 3 больше стал.... Однако в плане ИТ у нас появился лишь 1 доп. специалист - эникей, который занимался только базовой текучкой - картриджи там поменять, перезагрузить зависший ворд, принтер настроить и т.д.. Стоит ли говорить что нагрузка к тому моменту заметно возросла?

Начальство обложило наш отдел системой штрафов. Началась откровенная жопа - видимо они решили что мы слишком много зарабатываем. Не успел в течении получаса на заявку от пользователя - штраф. Задержал с ремонтом - штраф. Неправильно записал заявку в систему учета - штраф. На каждый неверный шаг - штраф, штраф, штраф. Опоздал на работу - штраф..... На просьбы расширить штат - откровенный игнор. Дальше больше - добавили кучу отчетов, в том числе и финансовых. На мои возражения о том что финансами должна заниматься бухгалтерия а не мы - "Вы со своей техникой уже всю бухгалтерию заколебали, он и не разбираются в ваших принтерах-шпринтерах. Ведите сами. И да, вот тебе еще 2 десятка штрафных пунктов за неверное ведение фин. документов....".

На совещаниях постепенно начались оскорбления в мой адрес. Да и самих совещаний стало больше и они стали дольше по времени. То что можно было обсудить за полчаса длилось 2 - 3. Ну и что что есть еще основная работа? Ах не успеваешь? На держи тогда штраф тебе!

Я постоянно задерживался на работе. ЗП заметно снизилась. Начались проблемы со здоровьем. А начальник довольно потирал руки. Деньги мутятся, бабло крутится, платить не надо, если что доп. штрафами обложим...
Ну что могу сказать - депутат.... А я же потихоньку уже искал новую работу.

Уходить было обидно. 4 года плодотворной, каждодневной, но блин, реально интересной работы. Куча нововведений, половина которых написана самостоятельно. Было изучено с нуля огромное количество технологий. А ведь сколько еще хотелось сделать то?!! Последним гвоздем стало тот факт, что за 4 месяца до ухода мне перестали платить мои премиальные - мол, "ничего не знаю, это было раньше, я передумал. Вот держи свои 40 тыс. и шоколадку. Хотя нет, шоколадку я сам съем!".
А я и спорить не стал - к тому моменту я уже нашел новую работу и лишь ждал решения от СБ. Правда ждать пришлось долго.

Ушел я внезапно. Написал заявление по собственному и пошел к начальнику. Говорю ему - подписывай. Он мне - 2 недели отработаешь. Я ему в ответ - тогда я сейчас вырубаю все сервера, и мы возвращаемся к каменному веку. Он мне - не имеешь права, я тебя засужу! Я ему - а ты сначала докажи что это я, а не какой-то сбой.

Через час я уже довольный и с трудовой книжкой шел устраиваться на новое место работы.

Да, я вынес огромное количество опыта которое неоценимо. Я научился общаться с разными людьми и отстаивать свою точку зрения. Но также я увидел, как человек из вполне адекватного превращается в неадекватного жадюгу по мере роста собственного кармана.

Что стало дальше с компанией? Они пытались найти спеца который сможет обслуживать то что у них было настроено, но не нашли. В итоге наняли аж 5 специалистов, с итоговой ЗП больше чем была у меня в лучшие дни. Но и это не помогло. Однажды у них случился сбой и развалился RAID60, на котором хранилось все. Больше 60 ТБ данных. Бэкапы конечно же были. Однако почему-то у них не получилось их восстановить. Это все что я знаю по рассказам одного из бывших коллег.

Показать полностью

Мега-авторский заголовок

Гига-авторский текст

Мега-авторский заголовок Текст, Картинка с текстом, Пост

Очешуительно-авторский вывод

Совсем-не-авторская ссссссылка на телегу (нет).

-----

PS: Ну вы поняли =)

Куда сходить в Питере?

В понедельник лечу в Санкт-Петербург в командировку на 5 дней. Обитать буду на Васильевском острове. Подскажите, куда можно сходить вечером чтоб покушать да поглазеть на чтонибудь интересное?

Не смог удержаться

Увидел рекламу на Пикабу и не смог удержаться.

Не смог удержаться Реклама на Пикабу, Девушки, Срач, Photoshop

Да будет срач!

Photoshop наше все.

Тестирование собственного VPN сервиса - PerfectoVPN

Привет Пикабу! Наконец я взялся за свой небольшой проект - развернул собственный VPN сервис. PerfectoVPN приветствует Вас! И набирает 10 добровольцев, которые согласятся протестировать сервис.

Каждому я бесплатно выдам аккаунт со 100 гигабайт трафика без ограничения по времени.

Единственное условие - написание недельных мини-отчетов об опыте использования сервиса. От Вас не требуется доклад на 5 страниц, а буквально пару-тройку предложений о том, насколько удобно Вам было, устраивала ли Вас текущая скорость, сталкивались ли Вы с трудностями, например отвалами соединения и т.д.

Отчетный день - воскресенье.

Для получения доступа - добро пожаловать в телегу. Все инструкции там. https://t.me/+btTCLk_wNvUxNWJi

Вкратце о сервисе:
Сервер расположен в Нидерландах.
Канал 1 гбит/сек.
Используется протокол Vless + Reality. Ранее о нем много кто писал, в том числе и на Пикабу. Если вкратце - на текущий момент считается самым анонимным протоколом, не детектируется даже Большим Китайским Файрволлом (по имеющейся у меня публичной информации). На фоне слухов о возможной скорой блокировке OpenVpn - более чем актуально.

На сервере действует одно ограничение - запрещено использование торрентов, чтоб не создавать излишнюю нагрузку на сервер. Естественно скачать сам торрент файл или Magnet-ссылку вы сможете.

В общем кто желает - добро пожаловать.

Пост без рейтинга.

Показать полностью
Отличная работа, все прочитано!