Привет, друзья!
В этой серии из 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
migratedev— выполняет миграцию для разработки:--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,hashetc. — названия полей (колонок таблицы);@mapпривязывает поле схемы (hash) к указанной колонке таблицы (password_hash).@mapне меняет название колонки в БД и поля в генерируемом клиенте. ДляMongoDBиспользование@mapдля@idявляется обязательным:id String @default(auto()) @map("_id") @db.ObjectId;String,Int,DateTimeetc. — типы данных (см. ниже);@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-отчет
- Отмена привилегированной операции
- Просмотр суммы в денежном ящике
- Печать копии чека
- Не найден товар по штрих-коду




























