Привет, друзья!
В этой серии из 2 статей я хочу поделиться с вами своими заметками о Prisma
.
Prisma
— это современное (продвинутое) объектно-реляционное отображение (Object-Relational Mapping, ORM) для Node.js
и TypeScript
. Проще говоря, Prisma
— это инструмент, позволяющий работать с реляционными (PostgreSQL
, MySQL
, SQL Server
, SQLite
) и нереляционной (MongoDB
) базами данных с помощью JavaScript
или TypeScript
без использования SQL
(хотя такая возможность имеется).
Содержание этой части
- Инициализация проекта
- CLI
- Схема
- Типы данных
- Атрибуты
- Функции атрибутов
- Отношения
- Клиент
- Запросы
- findUnique
- findFirst
- findMany
- create
- update
- upsert
- delete
- createMany
- updateMany
- deleteMany
- count
- aggregate
- groupBy
Вторая часть.
Если вам это интересно, прошу под кат.
Инициализация проекта
Создаем директорию, переходим в нее и инициализируем Node.js-проект
:
mkdir prisma-test
cd prisma-test
yarn init -yp
# or
npm init -y
Устанавливаем Prisma
в качестве зависимости для разработки:
yarn add -D prisma
# or
npm i -D prisma
Инициализируем проект Prisma
:
npx prisma init
Это приводит к генерации файлов prisma/schema.prisma
и .env
.
В файле .env
содержится переменная DATABASE_URL
, значением которой является путь к (адрес) БД. Файл schema.prisma
мы рассмотрим позже.
CLI
Интерфейс командной строки (Command line interface, CLI) Prisma
предоставляет следующие основные возможности (команды):
init
— создает шаблонPrisma-проекта
:--datasource-provider
— провайдер для работы с БД:sqlite
,postgresql
,mysql
,sqlserver
илиmongodb
(перезаписываетdatasource
изschema.prisma
);--url
— адрес БД (перезаписываетDATABASE_URL
)
npx prisma init --datasource-provider mysql --url mysql://user:password@localhost:3306/mydb
generate
— генерирует клиентаPrisma
на основе схемы (schema.prisma
). КлиентPrisma
предоставляет программный интерфейс приложения (Application Programming Interface, API) для работы с моделями и типы дляTypeScript
npx prisma generate
db pull
— генерирует модели на основе существующей схемы БД
npx prisma db pull
db push
— синхронизирует состояние схемыPrisma
с БД без выполнения миграций. БД создается при отсутствии. Используется для прототипировании БД и в локальной разработке. Также может быть полезной в случае ограниченного доступа к БД, например, при использовании БД, предоставляемой облачными провайдерами, такими какElephantSQL
илиHeroku
npx prisma db push
seed
— выполняет скрипт для наполнения БД начальными (фиктивными) данными. Путь к соответствующему файлу определяется вpackage.json
"prisma": {
"seed": "node prisma/seed.js"
}
npx prisma seed
migrate
dev
— выполняет миграцию для разработки:--name
— название миграции
npx prisma migrate dev --name init
Это приводит к созданию БД при ее отсутствии, генерации файла prisma/migrations/migration_name.sql
, выполнению инструкции из этого файла (синхронизации БД со схемой) и генерации (регенерации) клиента (prisma generate
).
Данная команда должна выполняться после каждого изменения схемы.
reset
— удаляет и заново создает БД или выполняет «мягкий сброс», удаляя все данные, таблицы, индексы и другие артефакты
npx prisma migrate reset
deploy
— выполняет производственную миграцию
npx prisma migrate deploy
studio
— позволяет просматривать и управлять данными, хранящимися в БД, в интерактивном режиме:--browser
,-b
— название браузера (по умолчанию используется дефолтный браузер);--port
,-p
— номер порта (по умолчанию —5555
)
npx prisma studio
# без автоматического открытия вкладки браузера
npx prisma studio -b none
Подробнее о CLI
можно почитать здесь.
Схема
В файле schema.prisma
мы видим такие строки:
generator client {
provider = "prisma-client-js"
}
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}
datasource
— источник данных:provider
— название провайдера для доступа к БД:sqlite
,postgresql
,mysql
,sqlserver
илиmongodb
(по умолчанию —postgresql
);url
— адрес БД (по умолчанию — значение переменнойDATABASE_URL
);shadowDatabaseUrl
— адрес «теневой» БД (для БД, предоставляемых облачными провайдерами): используется для миграций для разработки (prisma migrate dev
);
generator
— генератор клиента на основе схемы:provider
— провайдер генератора (единственным доступным на сегодняшний день провайдером являетсяprisma-client-js
);binaryTargets
— определяет операционную систему для клиентаPrisma
. Значением по умолчанию являетсяnative
, но иногда это приходится указывать явно, например, при использовании клиента вDocker-контейнере
(в этом случае также приходится явно выполнятьprisma generate
)
generator client {
provider = "prisma-client-js"
binaryTargets = ["native"]
}
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
shadowDatabaseUrl = env("SHADOW_DATABASE_URL")
}
Для работы со схемой удобно пользоваться расширением Prisma
для VSCode
. Соответствующий раздел в файле settings.json
должен выглядеть так:
"[prisma]": {
"editor.defaultFormatter": "Prisma.prisma"
}
Определим в схеме модели для пользователя (User
) и поста (Post
):
model User {
id String @id @default(uuid()) @db.Uuid
email String @unique
hash String @map("password_hash")
first_name String?
last_name String?
age Int?
role Role @default(USER)
posts Post[]
created_at DateTime @default(now())
updated_at DateTime @updatedAt
@@map("users")
}
model Post {
id String @id @default(uuid())
title String
content String
published Boolean
author_id String
author User @relation(fields: [author_id], references: [id])
created_at DateTime @default(now())
updated_at DateTime @updatedAt
@@map("posts")
}
enum Role {
USER
ADMIN
}
Вот что мы здесь видим:
id
,email
,hash
etc. — названия полей (колонок таблицы);@map
привязывает поле схемы (hash
) к указанной колонке таблицы (password_hash
).@map
не меняет название колонки в БД и поля в генерируемом клиенте. ДляMongoDB
использование@map
для@id
является обязательным:id String @default(auto()) @map("_id") @db.ObjectId
;String
,Int
,DateTime
etc. — типы данных (см. ниже);@db.Uuid
— тип данных, специфичный для одной или нескольких БД (в данном случаеPostgreSQL
);- модификатор
?
после названия типа означает, что данное поле является опциональным (необязательным, может иметь значениеNULL
); - модификатор
[]
после названия типа означает, что значением данного поля является список (массив). Такое поле не может быть опциональным; - префикс
@
означает атрибут поля, а префикс@@
— атрибут блока (модели, таблицы). Некоторые атрибуты принимают параметры; - атрибут
@id
означает, что данное поле является первичным (основным) ключом таблицы (PRIMARY KEY
) (идентификатор модели). Такое поле не может быть опциональным; - атрибут
@default
присваивает полю указанное значение по умолчанию (при отсутствии значения поля) (DEFAULT
). Дефолтными могут быть статические значения (42
,hi
) или значения, генерируемые функциямиautoincrement
,dbgenerated
,cuid
,uuid
иnow
(функции атрибутов; см. ниже); - атрибут
@unique
означает, что значение поля должно быть уникальным в пределах таблицы (UNIQUE
). Таблица должна иметь хотя бы одно поле@id
или@unique
; - атрибут
@relation
указывает на существование отношений между таблицами. В данном случае между таблицамиusers
иposts
существуют отношения один-ко-многим (one-to-many, 1-n) — у одного пользователя может быть несколько постов (FOREIGN KEY / REFERENCES
) (об отношениях мы поговорим отдельно); - атрибут
@updatedAt
обновляет поле текущими датой и временем при любой модификации записи; - у нас имеется перечисление (enum), значения которого используются в качестве значений поля
role
моделиUser
(значением по умолчанию являетсяUSER
); - атрибут
@@map
привязывает название модели к названию таблицы в БД.@@map
не меняет название таблицы в БД и модели в генерируемом клиенте.
Типы данных
Допустимыми в названиях полей являются следующие символы: [A-Za-z][A-Za-z0-9_]*
.
String
— строка переменной длины (дляPostgreSQL
— это типtext
);Boolean
— логическое значение:true
илиfalse
(boolean
);Int
— целое число (integer
);BigInt
—BigInt
(integer
);Float
— число с плавающей точкой (запятой) (double precision
);Decimal
(decimal(65,30)
);DateTime
— дата и время в форматеISO 8601
;Json
— объект в форматеJSON
(jsonb
);Bytes
(bytea
).
Атрибут @db
позволяет использовать типы данных, специфичные для одной или нескольких БД.
Атрибуты
Кроме упомянутых выше, в схеме можно использовать следующие атрибуты:
@@id
— определяет составной (composite) первичный ключ таблицы, например,@@id[title, author]
(в данном случае соответствующее поле будет называтьсяtitle_author
— это можно изменить);@@unique
— определяет составное ограничение уникальности (unique constraint) для указанных полей (такие поля не могут быть опциональными), например,@@unique([title, author])
;@@index
— определяет индекс в БД (INDEX
), например,@@index([title, author])
;@ignore
,@@ignore
— используется для обозначения невалидных полей и моделей, соответственно.
Функции атрибутов
auto
— представляет дефолтные значения, генерируемые БД (только дляMongoDB
);autoincrement
— генерирует последовательные целые числа (SERIAL
вPostgreSQL
, не поддерживаетсяMongoDB
);cuid
— генерирует глобальный уникальный идентификатор на основе спецификацииcuid
;uuid
— генерирует глобальный уникальный идентификатор на основе спецификацииUUID
;now
— возвращает текущую отметку времени (timestamp) (CURRENT_TIMESTAMP
вPostgreSQL
);dbgenerated
— представляет дефолтные значения, которые не могут быть выражены в схеме (например,random()
).
Подробнее о схеме можно почитать здесь.
Отношения
Атрибут @relation
указывает на существование отношений между моделями (таблицами). Он принимает следующие параметры:
name?: string
— название отношения;fields?: [field1, field2, ...fieldN]
— список полей текущей модели (в нашем случае это[author_id]
моделиPost
); обратите внимание: само поле определяется отдельно);references: [field1, field2, ...fieldN]
— список полей другой модели (стороны отношений) (в нашем случае это[id]
моделиUser
).
В приведенной выше схеме полями, указывающими на существование отношений между моделями User
и Post
, являются поля posts
и author
. Эти поля существуют только на уровне Prisma
, в БД они не создаются. Скалярное поле author_id
также существует только на уровне Prisma
— это внешний ключ (FOREIGN KEY
), соединяющий Post
с User
.
Как известно, существует 3 вида отношений:
- один-к-одному (one-to-one, 1-1);
- один-ко-многим (one-to-many, 1-n);
- многие-ко-многим (many-to-many, m-n).
Атрибут @relation
является обязательным только для отношений 1-1
и 1-n
.
Предположим, что в нашей схеме имеются такие модели:
model User {
id Int @id @default(autoincrement())
posts Post[]
profile Profile?
}
model Profile {
id Int @id @default(autoincrement())
user User @relation(fields: [userId], references: [id])
userId Int
}
model Post {
id Int @id @default(autoincrement())
author User @relation(fields: [authorId], references: [id])
authorId Int
categories Category[]
}
model Category {
id Int @id @default(autoincrement())
posts Post[]
}
Вот что мы здесь видим:
- между моделями
User
иProfile
существуют отношения1-1
— у одного пользователя может быть только один профиль; - между моделями
User
иPost
существуют отношения1-n
— у одного пользователя может быть несколько постов; - между моделями
Post
иCategory
существуют отношенияm-n
— один пост может принадлежать к нескольким категориям, в одну категорию может входить несколько постов.
Подробнее об отношениях можно почитать здесь.
Клиент
Импортируем и создаем экземпляр клиента Prisma
:
import { PrismaClient } from '@prisma/client'
const prisma = new PrismaClient()
export default prisma
Иногда может потребоваться делать так:
const Prisma = require('prisma')
const prisma = new Prisma.PrismaClient()
module.exports = prisma
Запросы
findUnique
findUnique
позволяет извлекать единичные записи по идентификатору или уникальному полю.
Сигнатура
findUnique({
where: condition,
select?: fields,
include?: relations,
rejectOnNotFound?: boolean
})
Модификатор ?
означает, что поле является опциональным.
condition
— условие для выборки;fields
— поля для выборки;relations
— отношения (связанные поля) для выборки;rejectOnNotFound
— если имеет значениеtrue
, при отсутствии записи выбрасывается исключениеNotFoundError
. Если имеет значениеfalse
, при отсутствии записи возвращаетсяnull
.
Пример
async function getUserById(id) {
try {
const user = await prisma.user.findUnique({
where: {
id
}
})
return user
} catch(e) {
onError(e)
}
}
findFirst
findFirst
возвращает первую запись, соответствующую заданному критерию.
Сигнатура
findFirst({
where?: condition,
select?: fields,
include?: relations,
rejectOnNotFound?: boolean,
distinct?: field,
orderBy?: order,
cursor?: position,
skip?: number,
take?: number
})
distinct
— фильтрация по определенному полю;orderBy
— сортировка по определенному полю и в определенном порядке;cursor
— позиция начала списка (как правило,id
или другое уникальное значение);skip
— количество пропускаемых записей;take
— количество возвращаемых записей (в данном случае может иметь значение1
или-1
: во втором случае возвращается последняя запись.
Пример
async function getLastPostByAuthorId(author_id) {
try {
const post = await prisma.post.findFirst({
where: {
author_id
},
orderBy: {
created_at: 'asc'
},
take: -1
})
return post
} catch(e) {
onError(e)
}
}
findMany
findMany
возвращает все записи, соответствующие заданному критерию.
Сигнатура
findMany({
where?: condition,
select?: fields,
include?: relations,
rejectOnNotFound?: boolean,
distinct?: field,
orderBy?: order,
cursor?: position,
skip?: number,
take?: number
})
Пример
async function getAllPostsByAuthorId(author_id) {
try {
const posts = await prisma.post.findMany({
where: {
author_id
},
orderBy: {
updated_at: 'desc'
}
})
return posts
} catch(e) {
onError(e)
}
}
create
create
создает новую запись.
Сигнатура
create({
data: _data,
select?: fields,
include?: relations
})
_data
— данные создаваемой записи.
Пример
async function createUserWithProfile(data) {
const { email, password, firstName, lastName, age } = data
try {
const hash = await argon2.hash(password)
const user = await prisma.user.create({
data: {
email,
hash,
profile: {
create: {
first_name: firstName,
last_name: lastName,
age
}
}
},
select: {
email: true
},
include: {
profile: true
}
})
return user
} catch(e) {
onError(e)
}
}
update
update
обновляет существующую запись.
Сигнатура
update({
data: _data,
where: condition,
select?: fields,
include?: relations
})
Пример
async function updateUserById(id, changes) {
const { email, age } = changes
try {
const user = await prisma.user.update({
where: {
id
},
data: {
email,
profile: {
update: {
age
}
}
},
select: {
email: true
},
include: {
profile: true
}
})
return user
} catch(e) {
onError(e)
}
}
upsert
upsert
обновляет существующую или создает новую запись.
Сигнатура
upsert({
create: _data,
update: _data,
where: condition,
select?: fields,
include?: relations
})
Пример
async function updateOrCreateUser(data) {
const { userName, email, password } = data
try {
const hash = await argon2.hash(password)
const user = await prisma.user.create({
where: { user_name: userName },
update: {
email,
hash
},
create: {
email,
hash,
user_name: userName
},
select: { user_name: true, email: true }
})
return user
} catch(e) {
onError(e)
}
}
delete
delete
удаляет существующую запись по идентификатору или уникальному полю.
Сигнатура
delete({
where: condition,
select?: fields,
include?: relations
})
Пример
async function removeUserById(id) {
try {
await prisma.user.delete({
where: {
id
}
})
} catch(e) {
onError(e)
}
}
createMany
createMany
создает несколько записей с помощью одной транзакции (о транзакциях мы поговорим отдельно).
Пример
createMany({
data: _data[],
skipDuplicates?: boolean
})
_data[]
— данные для создаваемых записей в виде массива;skipDuplicates
— при значенииtrue
создаются только уникальные записи.
Пример
// предположим, что `users` - это массив объектов
async function createUsers(users) {
try {
const users = await prisma.user.createMany({
data: users
})
return users
} catch(e) {
onError(e)
}
}
updateMany
updateMany
обновляет несколько существующих записей за один раз и возвращает количество (sic) обновленных записей.
Сигнатура
updateMany({
data: _data[],
where?: condition
})
Пример
async function updateProductsByCategory(category, newDiscount) {
try {
const count = await prisma.product.updateMany({
where: {
category
},
data: {
discount: newDiscount
}
})
return count
} catch(e) {
onError(e)
}
}
deleteMany
deleteMany
удаляет несколько записей с помощью одной транзакции и возвращает количество удаленных записей.
Сигнатура
deleteMany({
where?: condition
})
Пример
async function removeAllPostsByUserId(author_id) {
try {
const count = await prisma.post.deleteMany({
where: {
author_id
}
})
return count
} catch(e) {
onError(e)
}
}
count
count
возвращает количество записей, соответствующих заданному критерию.
Сигнатура
count({
where?: condition,
select?: fields,
cursor?: position,
orderBy?: order,
skip?: number,
take?: number
})
Пример
async function countUsersWithPublishedPosts() {
try {
const count = await prisma.user.count({
where: {
post: {
some: {
published: true
}
}
}
})
return count
} catch(e) {
onError(e)
}
}
aggregate
aggregate
выполняет агрегирование полей.
Сигнатура
aggregate({
where?: condition,
select?: fields,
cursor?: position,
orderBy?: order,
skip?: number,
take?: number,
_count: count,
_avg: avg,
_sum: sum,
_min: min,
_max: max
})
_count
— возвращает количество совпадающих записей или неnull-полей
;_avg
— возвращает среднее значение определенного поля;_sum
— возвращает сумму значений определенного поля;_min
— возвращает наименьшее значение определенного поля;_max
— возвращает наибольшее значение определенного поля.
Пример
async function getAllUsersCountAndMinMaxProfileViews() {
try {
const result = await prisma.user.aggregate({
_count: {
_all: true
},
_max: {
profileViews: true
},
_min: {
profileViews: true
}
})
return result
} catch(e) {
onError(e)
}
}
groupBy
groupBy
выполняет группировку полей.
Сигнатура
groupBy({
by?: by,
having?: having,
where?: condition,
orderBy?: order,
skip?: number,
take?: number,
_count: count,
_avg: avg,
_sum: sum,
_min: min,
_max: max
})
by
— определяет поле или комбинацию полей для группировки записей;having
— позволяет фильтровать группы по агрегируемому значению.
Пример
В следующем примере мы выполняем группировку по country / city
, где среднее значение profileViews
превышает 100
, и возвращаем общее количество (_sum
) profileViews
для каждой группы. Запрос также возвращает количество всех (_all
) записей в каждой группе и все записи с не null
значениями поля city
в каждой группе:
async function getUsers() {
try {
const result = await prisma.user.groupBy({
by: ['country', 'city'],
_count: {
_all: true,
city: true
},
_sum: {
profileViews: true
},
orderBy: {
country: 'desc'
},
having: {
profileViews: {
_avg: {
gt: 100
}
}
}
})
return result
} catch(e) {
onError(e)
}
}
Пожалуй, это все, о чем я хотел рассказать вам в первой части.
Благодарю за внимание и happy coding!
- Каталог
-
GSM сигнализация
-
GSM-сигнализация с автономным питанием
-
Датчики для автономной GSM сигнализации
- Призма-С
Призма-С Радиоканальный комбинированный оповещатель (свет + сирена) для EXPRESS GSM вер.2.
1 год гарантии
- Производитель: Сибирский Арсенал
- Код товара: 406-348
1082 просмотра
2780.00 ₽
Рекомендованная цена
2 490 ₽
Спецпредложение до 28.09.2023
Ограничение заказа:
Для данного товара действуют ограничения: Общая сумма заказа должна быть более 3 т.р.
Наличие:
Наличие и срок поставки уточняйте у менеджеров
- Описание
- Доставка
- Документация
- Отзывы
- Тех. консультация
Радиоканальный комбинированный оповещатель (свет + сирена) для EXPRESS GSM вер.2.
Оповещатель комбинированный радиоканальный «Призма-С» (сирена) предназначен для тревожного оповещения в виде световых и звуковых сигналов.«Призма-С» работает с сигнализаторами «Express GSM» вар.2, «Photo Express GSM», «Photo Express SOLO», c серией приборов «Express Power» и др.«Призма-С» активируется при получении тревожного сигнала от сигнализатора, в котором она прописана и начинает подавать световую индикацию и издавать громкий звук. Выключится сирена автоматически через 1 минуту или как только сигнализатор будет снят с охраны.
Основные особенности Призма-С:
- Малогабаритный пластиковый корпус
- Беспроводное подключение
- Длительная автономная работа от батареи питания
- Мощная сирена и хорошая видимость светового сигнала в условиях засветки.
Технические характеристики:
Тип батареи питания |
литиевая батарея CR123A 3.0 В |
Уровень звукового давления (1±0.05), м |
85…95 дБ |
Время работы батареи питания |
12 месяцев |
Диапазон рабочих температур |
от -10 до 50 °C |
Габаритные размеры |
92х142х44 мм |
Вес |
0.1 кг |
* Срок доставки указан для товара в наличии на складе в Москве
Отзывы:
Ваш отзыв может быть первым!
С этим товаром часто покупают:
Свето-звуковой радиоканальный оповещатель «Призма-С» (беспроводная сирена) предназначен для тревожного оповещения в виде световых и звуковых сигналов.
«Призма-С» работает с сигнализаторами «Express GSM» версия2, «Express GSM mini», «Photo Express GSM», «Photo Express SOLO», c серией приборов «Express Power» и др.
«Призма-С» активируется при получении тревожного сигнала от сигнализатора, в котором она прописана и начинает подавать световую индикацию и издавать громкий звук. Выключится сирена автоматически через 1 минуту или как только сигнализатор будет снят с охраны.
- Малогабаритный пластиковый корпус
- Беспроводное подключение
- Длительная автономная работа от батареи питания
- Мощная сирена и хорошая видимость светового сигнала в условиях засветки.
Тип батареи питания | литиевая батарея CR123A 3,0 В |
Уровень звукового давления, не менее | 85 дБ |
Степень защиты, не менее | IP41 |
Диапазон рабочих температур | от -10 до 50 °C |
Габаритные размеры, не более | 142х92х44 мм |
Масса, не более | 0,2 кг |
Кабинет руководителя «ПРИЗМА ДИРЕКТ»
- Характеристики
- Базовый комплект
- Примеры планировок
Серия мебели
Призма Директ
Каркасы тумб и шкафов
32 мм
Направляющие ящиков
Роликовые
Кромка рабочих поверхностей
ABC 2 мм
Все характеристики
1
Стол руководителя 180/1metL вертик панель ДСП
79 280 ₽
2
Тумба приставная 207L
37 140 ₽
3
Шкаф закрытый для одежды 228/1од
39 140 ₽
4
Шкаф стеклянный для документов 224
92 100 ₽
5
Шкаф для документов с открытыми полками 231/1
28 130 ₽
Самовывоз: 25 сентября
Доставка и сборка
Перейти к прайс-листу
Онлайн-показ
Преимущества модели
Регулировка столов по высоте
Плита ЛДСП 25 мм
Программа «Склад»
Примеры планировок
Прайс-лист серии «ПРИЗМА ДИРЕКТ»
Описание
- Описание
- Характеристики
- Дизайн-проект
- Госзаказчикам
Четкие формы, прямые линии, фурнитура, выполненная в едином цвете с металлическим каркасом, подчеркивают стильный лаконичный дизайн кабинета руководителя PRIZMA DIRECT. Особая фактура покрытия с имитацией под натуральное дерево придадут вашему кабинету индивидуальность.
ПРЕИМУЩЕСТВА СЕРИИ PRIZMA DIRECT:
- единый стиль с серией PRIZMA для персонала;
- эксклюзивный металлический каркас;
- интерьер в стиле минимализм.
Материалы:
- рабочие поверхности – 32 мм ЛДСП;
- кромка рабочих поверхностей – 2 мм ABS;
- каркасы столов – металлические опоры прямоугольного сечения 70х20 в цвете «алюминий»;
- каркасы приставных тумб – 32 мм ЛДСП, фасад – 18 мм;
- топы приставных тумб – 32 мм ЛДСП;
- ручки – пластик цвета «алюминий»;
- направляющие ящиков – роликовые;
- соединительная фурнитура – 3-х компонентная эксцентриковая стяжка.
Столы
Столешницы рабочих и конференц-столов изготовлены из 32 мм ЛДСП в основном цвете с двухсторонним антибликовым фактурным покрытием и кромкой 2 мм ABS. Оригинальные металлические регулируемые по высоте опоры столов прямоугольного сечения, 70х20 мм, изготовлены в цвете «алюминий». Рамочная и угловая опоры столов соединены между собой с помощью траверса, изготовленного из металла 40х20 мм. Передние панели рабочих столов изготовлены из 0,6 мм перфорированного металла в цвете «алюминий» и крепятся к каркасу при помощи угловых металлических кронштейнов. Ручки пластиковые, цвета «алюминий».
В производстве всех элементов используется высококачественная ЛДСП производства Италии.
Тумбы
Топы приставных тумб изготовлены из 32 мм ЛДСП в основном цвете с двухсторонним антибликовым фактурным покрытием и кромкой 2 мм ABS. Каркасы тумб изготовлены из 32 мм ЛДСП в основном цвете с кромкой 2 мм ABS. Фасады тумб изготовлены из 18 мм ЛДСП в основном цвете. Опоры стационарных тумб регулируются по высоте с учетом неровностей пола. Ящики установлены на металлические направляющие полного выдвижения с нейлоновыми роликами, обеспечивающими плавный бесшумный ход. Мобильные тумбы имеют центральный замок для одновременного закрывания всех ящиков и установлены на роликовые опоры. Ключ имеет возможность складываться. Ручки пластиковые, цвета «алюминий». В производстве всех элементов используется высококачественная ЛДСП производства Италии.
Упаковка и сборка
Для соединения деталей используется особо прочная 3-х компонентная стяжка с эксцентриком. Вся мебель, кроме тумб, поставляется в разобранном виде, упакованная в гофрокартон и защитную термоусадочную пленку. Тумбы поставляются в собранном виде, упакованные в гофрокартон и защитную термоусадочную пленку.
Серия мебели
Призма Директ
Каркасы тумб и шкафов
32 мм
Направляющие ящиков
Роликовые
Кромка рабочих поверхностей
ABC 2 мм
Тон мебели
Светлый/темный
Как мы создаем ваш дизайн-проект
- Комплектуем. Подбираем офисную мебель (кабинеты для руководителей и оперативную мебель для персонала), металлическую мебель (шкафы, стеллажи, картотеки, сейфы), а так же мебель для баров и ресторанов.
- Проектируем. После беседы и уточнения всех деталей с клиентом, разрабатываем цветные, реалистичные 3D-визуализации и презентуем их Вам для внесения правок и дополнений.
- Присылаем готовый бесплатный дизайн-проект. В течение нескольких часов Вы получаете расстановку мебели в вашем офисе.
Мы имеем большой опыт и готовы реализовать проекты любой сложности, выполняем доставку и сборку мебели, обеспечиваем гарантию на свою работу. Кроме этого, условия сотрудничества максимально просты и прозрачны. Если есть вопросы или нужна квалифицированная помощь, то стоит обратиться к нашему сотруднику.
Наши работы вы можете найти на нашем сайте в разделе ПОРТФОЛИО
Остались вопросы? Напишите нам!
Мы на связи онлайн
с 9:00 до 18:00
Цель Контекс — экономия вашего времени и средств
Для достижения этих целей наши специалисты:
- помогут вам с выбором офисной мебели в соответствии с Вашими потребностями и бюджетом;
- проведут все необходимые замеры;
- разработают дизайн-проект расстановки мебели и оборудования;
- подготовят техническое задание (полное соответствие 44-ФЗ и 223-ФЗ);
- предоставят 3 коммерческих предложения от компаний партнёров.
Контекс имеет возможность выполнять весь комплекс работ по поставке мебели и оборудования:
- разработка дизайн-проекта расстановки мебели и оборудования;
- производство офисной мебели и кресел;
- производство нестандартной мебели;
- поставка мягкой мебели и металлической мебели производственно-технического назначения;
- доставка и сборка мебели на объекте «под ключ».
Посмотреть видео
1 мин 02 сек
Качество мебели Futura
Качество изготовления тумб
Все тумбы поставляются в собранном виде упакованные в гофрокартон и защитную термоусадочную пленку.
Чтобы избежать ошибок при сборке мебели вручную на месте, наши профессионалы собирают офисные тумбы (самое сложное изделие в сборке из всего комплекта офисной мебели) на фабрике, на современном деревообрабатывающем центре.
В процессе сборки все детали в местах соединения после крепления их крепежными элементами дополнительно проклеиваются, что гарантирует надежность соединения, точность установки выдвижных ящиков, а также их плавный ход в процессе эксплуатации потребителями.
Качество изготовления шкафов
Для соединения деталей используется особо прочная 3-х компонентная стяжка с эксцентриком. Вся мебель, кроме тумб, поставляется в разобранном виде, упакованная в гофрокартон и защитную термоусадочную пленку.
В шкафах и столах используются регулируемые по высоте опоры (до 2,5 см).
Задние стенки шкафов изготовлены из двухстороннего ЛДСП толщиной 8 мм, что придаёт дополнительную жесткость шкафам. Жесткость необходима, чтобы в процессе эксплуатации распашные двери не провисали и не бились друг об друга.
Все стеклянные двери изготовлены из каленого, противоударного, травмобезопасного стекла. На фасадах шкафов крепятся специальные «пыльники» (уплотнители).
Уникальный складной ключ выполнен в одном цвете с ручками изделия.
На стационарных полках шкафов крепится специальная прорезиненная кромка, которая смягчает удар дверей о полки и делает процесс закрывания дверей шкафов бесшумным.
Сертификат ISO 9001:2000 и ГОСТы
При изготовлении применяются только экологически чистые материалы и комплектующие (класс эмиссии Е1 – уровень выделения фенола и формальдегида не превышает 0,01 мг/м3). Вся мебель сертифицирована органами ГОССТАНДАРТА (ГОСТ 16371-93; ГОСТ 19917-93), а в мае 2008 производство получило сертификат ISO 9001:2000 в системе TUV.
Гарантия
В течение 3-лет с момента продажи компания «Контекс» готова выполнить гарантийные обязательства перед своими клиентами в кратчайшие сроки, при этом срок службы мебели равен не менее 8-15 лет. На отдельные виды продукции гарантия достигает 15 лет.
Ниже перечислены основные особенности мебели для офиса FUTURA
- Все торцовые части мебельных деталей отделываются только кромками ПВХ (от 0,6 мм до 3 мм).
- Используется высококачественная импортная фурнитура.
- В шкафах всех серий используется травмобезопасное тонированное или так называемое «сатиновое» стекло 5 мм.
- Задние стенки шкафов выполнены из двухстороннего ЛДСП толщиной 8 мм.
- На фасадах шкафов крепятся специальные «пыльники» (уплотнители).
- На стационарных полках шкафов крепится специальная прорезиненная кромка, которая смягчает удар дверей о полки и делает процесс закрывания дверей шкафов бесшумным.
- В столах, шкафах используются регулируемые по высоте опоры (до 2,5 см).
- Во всех сериях (кроме «Practic», «Economic») в тумбах устанавливается центральный замок, ящики тумб выполнены на основе мета-боксов, для устойчивости тумб два колеса из четырех комплектуются специальными фиксаторами.
- Шкафы во всех сериях можно изготавливать под единым топом (верхней крышкой).
Дно выдвижных ящиков в тумбах изготовлено из ЛДСП, вставленного в паз каркаса ящика, скреплено скобами и проклеено для того, чтобы в процессе эксплуатации оно не выпадало.
Качество ящика другого производителя.
В шкафах всех серий используется травмобезопасное тонированное или так называемое «сатиновое» стекло 5 мм
Шкаф другого производителя с дверцами из обычного стекла
Задние стенки шкафов выполнены из двухстороннего ЛДСП толщиной 8 мм, что придаёт дополнительную жесткость шкафам.
Задняя стенка шкафа альтернативного производителя
В тумбах устанавливается центральный замок.
Во всех элементах серии используется складной ключ. Данная функция позволяет сохранить целостность ключа и замка во время эксплуатации.
Все торцовые части мебельных деталей отделываются только кромками ПВХ (от 0,6 мм до 3 мм)
На фасадах шкафов крепятся специальные «пыльники» (уплотнители). А На стационарных полках шкафов крепится специальная прорезиненная кромка, которая смягчает удар дверей о полки и делает процесс закрывания дверей шкафов бесшумным.
В столах, шкафах используются регулируемые по высоте опоры (до 2,5 см), что дает возможность регулировать высоту мебели, в зависимости от неровностей пола.
Мебель FUTURA собирается из итальянских комплектующих по макетам итальянских дизайнеров и отвечает всем требованиям современной и модной офисной мебели.
О компании «Futura»
«Futura» — ведущий производитель качественной мебельной продукции и успешно работает на российском рынке уже более 25 лет. Предлагает большой ассортимент товара по выгодным ценам и готовы удовлетворить все Ваши желания.
Производственные мощности мебельной корпорации расположились на независимой экономической территории в Калининградской области. Общая площадь производства занимает более 4,5 тысяч квадратных метров.
Реализуемая фабрикой мебель производится из итальянской фурнитуры на современных деревообрабатывающих центрах HOMAG и четко соответствует знаменитым своим безупречным качеством итальянским аналогам, но имеет более привлекательную цену.
Система цифрового видеоконтроля кассовых операций «ПРИЗМА» (Set Prisma) – это система комплексного видеоконтроля торгового предприятия. В поле ее действия – все зоны, где магазину может быть причинен ущерб. Система помогает выявить дисциплинарные нарушения и злоупотребления кассиров и других сотрудников магазина, обнаруживает противоправные действия покупателей, служит наглядным основанием для разрешения конфликтов между торговым предприятием и клиентом. Система контроля кассовых операций ПРИЗМА помогает уменьшить потери на расчетном узле, связанные с недобросовестностью или невнимательностью кассиров.
На физическом уровне стыковка с системой видеоконтроля предполагает подключение к единой локальной сети как объекта-источника событий (касса), так и компьютера с серверной частью системы «ПРИЗМА». Логическая стыковка предполагает восприятие серверной частью системы «ПРИЗМА» данных, отправленных объектом-источником событий, обработку этих данных и сохранение их в базе данных для последующего использования.
Конфигурирование модуля
Для подключения модуля «Призма» необходимо в директории /linuxcash/cash/conf/plugins
создать файл с расширением .xml
, в котором требуется указать идентификатор модуля, размещение плагина и прочие параметры. Например, /linuxcash/cash/conf/plugins/prisma.xml
.
Чтобы проверить приходят ли сообщения на порт, необходимо в консоли выполнить команду:
Параметры модуля
Наименование | Тип данных | Возможные значения | Описание |
---|---|---|---|
id | строковый |
Prisma |
Уникальное наименование модуля |
host |
строковый | Имя хоста или сетевой адрес сервера | |
port |
целочисленный | Целое положительное число | Порт сервера |
<objects> <object id="Prisma" plugin="/linuxcash/cash/plugins/libPrisma.so"> <property name="host"> <value>127.0.0.1</value> </property> <property name="port"> <value>2000</value> </property> </object> </objects>
Поддерживаемые события
Общий перечень событий, фиксируемых системой «ПРИЗМА», составляет несколько сотен. Кассовое решение Artix передает только следующие события:
- Блокировка кассы
- Регистрация пользователя
- Открытие чека
- Загрытие чека
- Добавление товара
- Сторнирование товара
- Переход в режим подытог
- Добавление оплаты
- Сторно оплаты
- Сдача
- Применение скидки
- X-отчет ФР
- Программный X-отчет
- Z-отчет
- Отмена привилегированной операции
- Просмотр суммы в денежном ящике
- Печать копии чека
- Не найден товар по штрих-коду