Разное

1С количество строк в запросе: Как получить число строк табличной части через запрос (количество строк ТЧ документа)?

Содержание

Количество строк табл.частей документа в запросе УТ 10.2 (10.2.9.2) доработанная

Помогите в запросе подсчитать отдельно кол-во строк в табл.частях документа “ГотоваяПродукция”.В табл.части “Материалы”(назовем Кол1) и отдельно и в табл.части “Затраты” (назовем Кол2)отдельно!  В запросе “КолвоСтрокПродукции.КолвоСтрок” -это общее кол-во строк в док.ГотоваяПродукция(Кол1+Кол2). В тексте запроса “КоличествоПриход” будет рассчитываться в зависимости от Кол1 или Кол2.
Вот текст запроса:

ПродукцияИМатериалы.Склад КАК Склад,
ПродукцияИМатериалы.Регистратор КАК Регистратор,
ПродукцияИМатериалы.Номенклатура КАК Продукция,
ПродукцияИМатериалы.ХарактеристикаНоменклатуры КАК Характеристика,
ПродукцияИМатериалы.Материал.СтатьяЗатрат.ВидЗатрат КАК ВидЗатрат,

//****вот здесь условие будет строитья  с Кол1 или Кол2 

СУММА(ВЫБОР
КОГДА ПродукцияИМатериалы.КоличествоМат = 0
ТОГДА 0
КОГДА ПродукцияИМатериалы.КоличествоМат <> 0
И КолвоСтрокПродукции.КолвоСтрок = 1
ТОГДА ПродукцияИМатериалы.Количество / КолвоСтрокПродукции.КолвоСтрок
КОГДА ПродукцияИМатериалы.КоличествоМат <> 0
И КолвоСтрокПродукции.КолвоСтрок > 1
ТОГДА ПродукцияИМатериалы.Количество / (КолвоСтрокПродукции.КолвоСтрок – 1)
ИНАЧЕ ПродукцияИМатериалы.Количество / КолвоСтрокПродукции.КолвоСтрок
КОНЕЦ) КАК КоличествоПриход,

//**********
СУММА(ПродукцияИМатериалы.Стоимость / КолвоСтрокПродукции.КолвоСтрок) КАК СтоимостьПриход,
СУММА(ПродукцияИМатериалы.Стоимость / ПродукцияИМатериалы.Количество) КАК Себестоимость,
ПродукцияИМатериалы.Материал КАК Материал,
ПродукцияИМатериалы.ХарактеристикаМатериала КАК ХарактеристикаМат,
ПродукцияИМатериалы.Материал.БазоваяЕдиницаИзмерения КАК ЕдИзм,
СУММА(ПродукцияИМатериалы.КоличествоМат) КАК КоличествоМат,
СУММА(ПродукцияИМатериалы.СтоимостьМат) КАК СуммаМат,
СУММА(ВЫБОР
КОГДА ПродукцияИМатериалы.КоличествоМат > 0
ТОГДА ПродукцияИМатериалы.СтоимостьМат / ПродукцияИМатериалы.КоличествоМат
ИНАЧЕ ПродукцияИМатериалы.СтоимостьМат
КОНЕЦ) КАК ЦенаМат,
СУММА(ПродукцияИМатериалы.КоличествоМат / ПродукцияИМатериалы.Количество) КАК КолвоМатНаЕдиницу,
СУММА(ПродукцияИМатериалы.СтоимостьМат / ПродукцияИМатериалы.Количество) КАК СтоимМатНаЕдиницу,
СУММА(КолвоСтрокПродукции.КолвоСтрок) КАК КолвоСтрок
{ВЫБРАТЬ
Склад.*,
Регистратор.*,
Продукция.*,
Характеристика.*,
КоличествоПриход,
СтоимостьПриход,
Себестоимость,
Материал.*,
ХарактеристикаМат.*,
ЕдИзм.*,
КоличествоМат,
СуммаМат,
ЦенаМат,
КолвоМатНаЕдиницу,
СтоимМатНаЕдиницу}
ИЗ
(ВЫБРАТЬ
Продукция.Регистратор.СкладПолучатель КАК Склад,
Продукция.Номенклатура КАК Номенклатура,
Продукция.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
СУММА(Продукция.Количество) КАК Количество,
СУММА(Продукция.Стоимость) КАК Стоимость,
Материалы.Номенклатура КАК Материал,
Материалы.ХарактеристикаНоменклатуры КАК ХарактеристикаМатериала,
СУММА(Материалы.Количество) КАК КоличествоМат,
СУММА(Материалы.Стоимость) КАК СтоимостьМат,
Продукция.Регистратор КАК Регистратор
ИЗ
РегистрНакопления.ПартииТоваровНаСкладах КАК Продукция
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.ПартииТоваровНаСкладах КАК Материалы
ПО Продукция.Регистратор = Материалы.Регистратор
И Продукция.НомерСтроки = Материалы.НомерКорСтроки
ГДЕ
Продукция.Регистратор ССЫЛКА Документ.ГотоваяПродукция
И Продукция.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)
И Материалы.Регистратор ССЫЛКА Документ.ГотоваяПродукция
И Материалы.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход)
И Продукция.Регистратор.Дата МЕЖДУ &ДатаНачала И &ДатаКонца

СГРУППИРОВАТЬ ПО
Продукция.Регистратор.СкладПолучатель,
Продукция.Номенклатура,
Продукция.ХарактеристикаНоменклатуры,
Материалы.Номенклатура,
Материалы.ХарактеристикаНоменклатуры,
Продукция.Регистратор

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
Продукция.Регистратор.СкладПолучатель,
Продукция.Номенклатура,
Продукция.ХарактеристикаНоменклатуры,
СУММА(Продукция.Количество),
СУММА(Продукция.Стоимость),
Затраты.СтатьяЗатрат,
“(Затраты)”,
0,
СУММА(Затраты.Сумма),
Продукция.Регистратор
ИЗ
РегистрНакопления.ПартииТоваровНаСкладах КАК Продукция
ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
ГотоваяПродукцияЗатраты.Ссылка КАК Ссылка,
ГотоваяПродукцияЗатраты.СтатьяЗатрат КАК СтатьяЗатрат,
ГотоваяПродукцияЗатраты.Сумма КАК Сумма,
ГотоваяПродукцияПродукция.Номенклатура КАК Номенклатура,
ГотоваяПродукцияПродукция.ХарактеристикаПродукции КАК ХарактеристикаПродукции
ИЗ
Документ.ГотоваяПродукция.Продукция КАК ГотоваяПродукцияПродукция
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ГотоваяПродукция.Затраты КАК ГотоваяПродукцияЗатраты
ПО ГотоваяПродукцияПродукция.Ссылка = ГотоваяПродукцияЗатраты.Ссылка
И ГотоваяПродукцияПродукция.КлючСтроки = ГотоваяПродукцияЗатраты.КлючСтроки
ГДЕ
ГотоваяПродукцияПродукция.Ссылка.Дата МЕЖДУ &ДатаНачала И &ДатаКонца
И ГотоваяПродукцияПродукция.Ссылка.Проведен = ИСТИНА) КАК Затраты
ПО Продукция.Регистратор = Затраты.Ссылка
И Продукция.Номенклатура = Затраты.Номенклатура
И Продукция.ХарактеристикаНоменклатуры = Затраты.ХарактеристикаПродукции
ГДЕ
Продукция.Регистратор ССЫЛКА Документ.ГотоваяПродукция
И Продукция.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)

СГРУППИРОВАТЬ ПО
Продукция.Регистратор.СкладПолучатель,
Продукция.Номенклатура,
Продукция.ХарактеристикаНоменклатуры,
Затраты.СтатьяЗатрат,
Продукция.Регистратор) КАК ПродукцияИМатериалы
ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
КолвоСтрокМат.Продукция КАК Продукция,
КолвоСтрокМат.ХарактеристикаПродукции КАК ХарактеристикаПродукции,
СУММА(КолвоСтрокМат.КолвоСтрок) КАК КолвоСтрок,
КолвоСтрокМат.Регистратор КАК Регистратор
ИЗ
(ВЫБРАТЬ
Продукция.Номенклатура КАК Продукция,
Продукция.ХарактеристикаНоменклатуры КАК ХарактеристикаПродукции,
Материалы.Номенклатура КАК Номенклатура,
Материалы.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
1 КАК КолвоСтрок,
Продукция.Регистратор КАК Регистратор
ИЗ
РегистрНакопления.ПартииТоваровНаСкладах КАК Материалы
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.ПартииТоваровНаСкладах КАК Продукция
ПО Материалы.Регистратор = Продукция.Регистратор
И Материалы.НомерКорСтроки = Продукция.НомерСтроки
ГДЕ
Продукция.Регистратор ССЫЛКА Документ.ГотоваяПродукция
И Продукция.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)
И Материалы.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход)
И Продукция.Регистратор.ВидОперации = ЗНАЧЕНИЕ(Перечисление.ВидыОперацийГотоваяПродукция.Производство)
И Продукция.Регистратор.Дата МЕЖДУ &ДатаНачала И &ДатаКонца

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
ПартииТоваровНаСкладах.Номенклатура,
ПартииТоваровНаСкладах.ХарактеристикаНоменклатуры,
Затраты.СтатьяЗатрат,
“”,
1,
ПартииТоваровНаСкладах.Регистратор
ИЗ
РегистрНакопления.ПартииТоваровНаСкладах КАК ПартииТоваровНаСкладах
ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
ГотоваяПродукцияЗатраты.Ссылка КАК Ссылка,
ГотоваяПродукцияЗатраты.СтатьяЗатрат КАК СтатьяЗатрат,
ГотоваяПродукцияЗатраты.Сумма КАК Сумма,
ГотоваяПродукцияПродукция.Номенклатура КАК Номенклатура,
ГотоваяПродукцияПродукция.ХарактеристикаПродукции КАК ХарактеристикаПродукции
ИЗ
Документ.ГотоваяПродукция.Продукция КАК ГотоваяПродукцияПродукция
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ГотоваяПродукция.Затраты КАК ГотоваяПродукцияЗатраты
ПО ГотоваяПродукцияПродукция.Ссылка = ГотоваяПродукцияЗатраты.Ссылка
И ГотоваяПродукцияПродукция.КлючСтроки = ГотоваяПродукцияЗатраты.КлючСтроки
ГДЕ
ГотоваяПродукцияПродукция.Ссылка.Дата МЕЖДУ &ДатаНачала И &ДатаКонца
И ГотоваяПродукцияПродукция.Ссылка.Проведен = ИСТИНА) КАК Затраты
ПО ПартииТоваровНаСкладах.Регистратор = Затраты.Ссылка
И ПартииТоваровНаСкладах.Номенклатура = Затраты.Номенклатура
И ПартииТоваровНаСкладах.ХарактеристикаНоменклатуры = Затраты.ХарактеристикаПродукции
ГДЕ
ПартииТоваровНаСкладах.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)
И ПартииТоваровНаСкладах.Регистратор ССЫЛКА Документ.ГотоваяПродукция
И ПартииТоваровНаСкладах.Регистратор.ВидОперации = ЗНАЧЕНИЕ(Перечисление.ВидыОперацийГотоваяПродукция.Производство)
И ПартииТоваровНаСкладах.Регистратор.Дата МЕЖДУ &ДатаНачала И &ДатаКонца) КАК КолвоСтрокМат

СГРУППИРОВАТЬ ПО
КолвоСтрокМат.Продукция,
КолвоСтрокМат.ХарактеристикаПродукции,
КолвоСтрокМат.Регистратор) КАК КолвоСтрокПродукции
ПО ПродукцияИМатериалы.Регистратор = КолвоСтрокПродукции.Регистратор
И ПродукцияИМатериалы.Номенклатура = КолвоСтрокПродукции.Продукция
И ПродукцияИМатериалы.ХарактеристикаНоменклатуры = КолвоСтрокПродукции.ХарактеристикаПродукции
{ГДЕ
ПродукцияИМатериалы.Склад.*,
ПродукцияИМатериалы.Регистратор.*,
ПродукцияИМатериалы.Номенклатура.*,
ПродукцияИМатериалы.ХарактеристикаНоменклатуры.*,
ПродукцияИМатериалы.Материал.*}

СГРУППИРОВАТЬ ПО
ПродукцияИМатериалы.Материал,
ПродукцияИМатериалы.Регистратор,
ПродукцияИМатериалы.Номенклатура,
ПродукцияИМатериалы.ХарактеристикаНоменклатуры,
ПродукцияИМатериалы.ХарактеристикаМатериала,
ПродукцияИМатериалы.Склад,
ПродукцияИМатериалы.Материал.БазоваяЕдиницаИзмерения,
ПродукцияИМатериалы.Материал.СтатьяЗатрат.ВидЗатрат

УПОРЯДОЧИТЬ ПО
Склад,
Продукция,
Характеристика,
Регистратор
{УПОРЯДОЧИТЬ ПО
Склад,
Продукция,
Характеристика,
Регистратор,
Материал}
ИТОГИ
СУММА(КоличествоПриход),
СУММА(СтоимостьПриход),
СРЕДНЕЕ(Себестоимость),
СУММА(КоличествоМат),
СУММА(СуммаМат),
СУММА(ЦенаМат),
СУММА(КолвоМатНаЕдиницу),
СУММА(СтоимМатНаЕдиницу),
СУММА(КолвоСтрок)
ПО
ОБЩИЕ,
Склад,
Продукция,
Характеристика,
Регистратор
{ИТОГИ ПО
Склад,
Продукция,
Характеристика,
Регистратор,
Материал}

Язык запросов 1С 8.3 для начинающих программистов: группировка

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

Войдите на сайт как ученик

Войдите как ученик, чтобы получить доступ к материалам школы

Язык запросов 1С 8.3 для начинающих программистов: группировка

Автор уроков и преподаватель школы: Владимир Милькин

Группировка в запросах

Давайте запросим из таблицы Справочник.Еда следующие реквизиты: Наименование, Цвет и Калорийность:

ВЫБРАТЬ
	Наименование,
	Цвет,
	Калорийность
ИЗ
	Справочник.Еда

У вас другой порядок строк в результате?

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

Алгоритм для жёлтого цвета будет такой:

  1. Находим все строчки у которых в поле Цвет стоит Жёлтый.
  2. Это будут строчки №1, 6, 8 и 9.
  3. Суммируем поле Калорийность для каждой из этих строк: 89 + 31 + 340 + 536
  4. Получаем, что для жёлтого цвета суммарная калорийность равна 996.

И так для каждого цвета.

Описанный выше процесс называется группировкой. Таким образом, группировка — это «схлопывание» (свёртка) строчек таблицы по определенному признаку.

При группировке все поля делятся на две группы:

  • Группировочные — это как раз те поля, по которым идёт свёртка. В нашем случае таким полем является Цвет.
  • Группируемые — это те поля, которые сворачиваются (схлопываются, объединяются). В нашем случае таким полем является Калорийность.

Группируемые поля не могут быть сами по себе. К ним обязательно применяется одна из агрегатных функций: СУММА, СРЕДНЕЕ, МИНИМУМ, МАКСИМУМ, КОЛИЧЕСТВО, КОЛИЧЕСТВО РАЗЛИЧНЫЕ:

Агрегатная функция СУММА

Это как раз случай, который мы разбирали. Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь. Все строки группируются по группировочным полям (Цвет), а группируемые поля (Калорийность) суммируются:

ВЫБРАТЬ
	Цвет,
	СУММА(Калорийность)
ИЗ
	Справочник.Еда
СГРУППИРОВАТЬ ПО
	Цвет

У вас другой порядок строк в результате?

Агрегатная функция СРЕДНЕЕ

В этом случае все строки группируются по группировочным полям (Цвет), а среди группируемых полей (Калорийность) находится среднее значение:

ВЫБРАТЬ
	Цвет,
	СРЕДНЕЕ(Калорийность)
ИЗ
	Справочник.Еда
СГРУППИРОВАТЬ ПО
	Цвет

У вас другой порядок строк в результате?

Агрегатная функция МИНИМУМ

В этом случае все строки группируются по группировочным полям (Цвет), а среди группируемых полей (Калорийность) находится минимальное значение:

ВЫБРАТЬ
	Цвет,
	МИНИМУМ(Калорийность)
ИЗ
	Справочник.Еда
СГРУППИРОВАТЬ ПО
	Цвет

У вас другой порядок строк в результате?

Агрегатная функция МАКСИМУМ

В этом случае все строки группируются по группировочным полям (Цвет), а среди группируемых полей (Калорийность) находится максимальное значение:

ВЫБРАТЬ
	Цвет,
	МАКСИМУМ(Калорийность)
ИЗ
	Справочник.Еда
СГРУППИРОВАТЬ ПО
	Цвет

У вас другой порядок строк в результате?

Агрегатная функция КОЛИЧЕСТВО

В этом случае все строки группируются по группировочным полям (Цвет), а среди группируемых полей (Калорийность) находится их количество:

ВЫБРАТЬ
	Цвет,
	КОЛИЧЕСТВО(Калорийность)
ИЗ
	Справочник.Еда
СГРУППИРОВАТЬ ПО
	Цвет

У вас другой порядок строк в результате?

Агрегатная функция КОЛИЧЕСТВО РАЗЛИЧНЫЕ

В этом случае все строки группируются по группировочным полям (Цвет), а среди группируемых полей (Калорийность) находится количество элементов с различными значениями:

ВЫБРАТЬ
	Цвет,
	КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Калорийность)
ИЗ
	Справочник.Еда
СГРУППИРОВАТЬ ПО
	Цвет

У вас другой порядок строк в результате?

Функция КОЛИЧЕСТВО РАЗЛИЧНЫЕ требует пояснения, потому что на выбранном примере её результат совпадает с функцией КОЛИЧЕСТВО. Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь. Вот более показательный пример, который всё объясняет:

Группировка без группируемых полей и агрегатных функций

Использование агрегатных функций в запросе не требуется, если результатом запроса будут только группировочные поля:

К примеру, сделаем выборку всех вкусов, которые встречаются среди еды:

ВЫБРАТЬ
	Вкус
ИЗ
	Справочник.Еда

 

У вас другой порядок строк в результате?

Как видите вкусы повторяются — давайте их сгруппируем:

ВЫБРАТЬ
	Вкус
ИЗ
	Справочник.Еда
СГРУППИРОВАТЬ ПО
    Вкус

 

У вас другой порядок строк в результате?

Таким образом, мы сделали группировку только по группировочным полям (Вкус). Группируемые поля, а следовательно и агрегатные функции нам не понадобились.

Группировка без группировочных полей

Соответственно использование группировочных полей также не требуется, если результатом запроса будут только группируемые поля:

К примеру, получим результаты агрегатных функций применительно к полю Калорийность без группировочных полей (то есть по всей таблице):

ВЫБРАТЬ
	СУММА(Калорийность) КАК Сумма,
	СРЕДНЕЕ(Калорийность) КАК Среднее,
	МИНИМУМ(Калорийность) КАК Минимум,
	МАКСИМУМ(Калорийность) КАК Максимум,
	КОЛИЧЕСТВО(Калорийность) КАК Количество	
ИЗ
	Справочник.Еда

Группировка по нескольким полям

Группировочных (как впрочем и группируемых) полей может быть сколь угодно много. В запросе они перечисляются через запятую.

Пройдите тест

Начать тест

9. Есть список чисел 1, 1, 2, 2, 3, 4, 5, 5, 6. После группировки он примет вид

1, 2, 3, 4, 5, 6

1, 6

1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6

1, 2, 3, 3, 4, 4, 5, 6, 6

а) Напишите запрос, который группирует цвета, встречающиеся среди еды:

Запрос 1С ВЫРАЗИТЬ КАК СТРОКА

Данная конструкция в 1С используется в запросе для усечения длины строки,а также для приведения строки неограниченной длины к переменной строке с фиксированным ограничением.

Синтаксис функции

ВЫРАЗИТЬ (<СТРОКА-ИСТОЧНИК> КАК СТРОКА(<ДлинаРезультата>)

  • Если на входе строка больше указанной длины — она усекается.
  • Если меньше — остается неизменной.
  • При передаче строки неограниченной длины происходит тоже самое.

Никаких пробелов в конце короткой строки не добавляется.

Другие особенности использования ВЫРАЗИТЬ КАК СТРОКА

Передача NULL в качестве параметра не вызывает ошибки, но на выходе будет NULL (не строкой).
Передача для преобразования других типов вызывает ошибку «Несовместимые типы ВЫРАЗИТЬ».

Преобразовать число как строку в запросе или же ссылку как строку в данной функции (да и в любых других функциях запроса невозможно). Это отличает TSQL запрос select cast(‘321’ as numeric(10) от запроса в 1С.

Функция ПРЕДСТАВЛЕНИЕ(ЧИСЛО), может на выходе запроса выдать строку, но внутри запроса ее результат использовать невозможно даже в качестве параметра для ВЫРАЗИТЬ.

Конкантенация (сложение) строк допустима и с результатом ВЫРАЗИТЬ:

«321»+ ВЫРАЗИТЬ («Строка» КАК СТРОКА(100)) 

Идентификатор ссылочного объекта в запросе получить невозможно и ожидаемое многими начинающими программистами 1С в КАЧЕСТВЕ ВЫРАЗИТЬ(ССЫЛКА как СТРОКА()) не работает: ни наименования, ни кода, ни идентификатора не получится — будет ошибка несовместимости типов.

Вот такая простая функция без особых сюрпризов.

Возможно когда-нибудь в платформе 8.4 1С исправит ситуацию с преобразованиями типов в запрос, а может тут дело в поддержании совместимости всех баз данных.

Можно дурачить всех все время, — при условии, что реклама ведется правильно, а расходы на нее достаточно велики.

— Джозеф Левин

Запросы 1С:Предприятие 8. Итоги

Оглавление:

  1. Основы работы.
  2. Параметры и операторы сравнения.
  3. Условия отбора.
  4. Группировки.
  5. Итоги.
  6. Вложенные запросы.

Итоги в запросах 1С чем-то похожи на группировки. Они имеют ту же задачу — произвести математические или статистические операции над данными выборки. Но имеются и существенные различия:

  1. Итоги добавляют строки к данным выборки, в то время как группировки сворачивают выборку и строк становится меньше.
  2. Итоги можно рассчитывать по всем данным выборки или по отдельным полям, при этом, в отличие от группировок, могут оставаться поля, которые не являются ни итоговыми, ни группировочными.
  3. Итоги могут учитывать иерархию.

Для начала немного теории. Секция итогов в запросах 1С состоит из двух разделов.

Первый начинается с ключевого слова ИТОГИ и содержит итоговые поля с применяемой к ним агрегатной функцией. Этот раздел может оставаться пустым, тогда в результате запроса получится просто группировка по полям следующего раздела без подсчета итоговых данных.

Существует 6 видов агрегатных функций, применяемых при группировках:

  1. СУММА — суммирует значения группируемого столбца, применяется только для числовых значений.
  2. СРЕДНЕЕ — вычисляет среднее арифметическое из значений группируемого столбца, применяется только для числовых значений.
  3. МАКСИМУМ — может применяться для любых типов значений группируемого столбца, при этом возвращается максимальное значение из всех группируемых. Если значения не числовые, то возвращается последнее при сортировке по возрастанию.
  4. МИНИМУМ — может применяться для любых типов значений группируемого столбца, при этом возвращается минимальное значение из всех группируемых. Если значения не числовые, то возвращается первое при сортировке по возрастанию.
  5. КОЛИЧЕСТВО — возвращает количество значений в группируемом столбце, может использоваться для любых типов значений. В расчет не берутся значения типа NULL.
  6. КОЛИЧЕСТВО РАЗЛИЧНЫЕ — возвращает количество различных значений в группируемом столбце, может использоваться для любых типов значений. В расчет не берутся значения типа NULL.

Второй раздел начинается с ключевого слова ПО и содержит группировочные поля в разрезе которых будет подсчитываться результат по итоговым полям. И/или слово ОБЩИЕ, если нужно подсчитать итоги по всей выборке. Здесь важен порядок, в котором будут располагаться поля, это этого зависит и порядок подсчета итогов в результате запроса.

Если в группировочном поле находятся данные, имеющие иерархическую структуру (иерархический справочник), то можно подсчитать итоги по всей иерархической цепочке. Для этого используется ключевое слово ИЕРАРХИЯ после имени группировочного поля. Если же итоги нужно подсчитывать по всей иерархической цепочке, кроме самого группировочного поля, то используется ключевое слово ТОЛЬКО ИЕРАРХИЯ.

Рассмотрим в качестве примера таблицу поставок товаров.

Задача 1. Подсчет итогов по нескольким полям.

Необходимо узнать, сколько всего товаров поставлено и сколько столов и стульев.

Запрос.Текст=»ВЫБРАТЬ
Поставки.Товар КАК Товар,
Поставки.Поставщик КАК Поставщик,
Поставки.Количество КАК Количество,
ИЗ
Поставки КАК Поставки
ИТОГИ
СУММА(Количество)
ПО
ОБЩИЕ,
Товар»;

В результате получим следующую таблицу с итогами (итоговые строки выделены желтым).

Задача 2. Группировка записей по полю.

Необходимо сгруппировать записи таблицы по виду товара.

Запрос.Текст=»ВЫБРАТЬ
Поставки.Товар КАК Товар,
Поставки.Поставщик КАК Поставщик,
Поставки.Количество КАК Количество,
ИЗ
Поставки КАК Поставки
ИТОГИ

ПО
Товар»

;

В результате получим следующую таблицу.

Задача 3. Подсчет итогов по полю с учетом иерархии.

Необходимо подсчитать итоговое количество поставок по каждому поставщику и региону, в котором он находится. При этом оба поставщика находятся в иерархическом справочнике и подчинены группе «Челябинск».

Запрос.Текст=»ВЫБРАТЬ
Поставки.Товар КАК Товар,
Поставки.Поставщик КАК Поставщик,
Поставки.Количество КАК Количество,
ИЗ
Поставки КАК Поставки
ИТОГИ
СУММА(Количество)
ПО
Поставщик ИЕРАРХИЯ»;

В результате получим следующую таблицу.

Задача 4. Подсчет итогов только по иерархии.

Необходимо подсчитать итоговое количество поставок по региону, в котором находится поставщик. При этом оба поставщика находятся в иерархическом справочнике и подчинены группе «Челябинск».

Запрос.Текст=»ВЫБРАТЬ
Поставки.Товар КАК Товар,
Поставки.Поставщик КАК Поставщик,
Поставки.Количество КАК Количество,
ИЗ
Поставки КАК Поставки
ИТОГИ
СУММА(Количество)
ПО
Поставщик ТОЛЬКО ИЕРАРХИЯ»;

В результате получим следующую таблицу.

Как обойти результат запроса с итогами

Результат запроса с итогами можно обойти несколькими способами:

  1. Как обычный запрос. В этом случае будут последовательно выведены группировочные и детальные записи. Пример такого обхода приведен в статье Основы работы с запросами 1С.
  2. Отдельно обойти группировки и детальные записи.
    В качестве примера возьмем запрос из задачи 1. Но не будем учитывать общие итоги.

    ГруппировкиТовар = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, «Товар»);
    Пока ГруппировкиТовар.Следующий() Цикл
    //здесь обрабатываем группировочные строки результата запроса
    ДетальныеЗаписи = ГруппировкиТовар.Выбрать();
    Пока ДетальныеЗаписи.Следующий() Цикл
    //здесь обрабатываем строки детальных записей, принадлежащих группировкам
    КонецЦикла;
    КонецЦикла;

Получение ряда чисел от 1 до 1000 в запросе — pro1C8.ru

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

Решение 1

ВЫБРАТЬ 0 КАК Числа
ПОМЕСТИТЬ РядЧисел
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ 1
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ 2
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ 3
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ 4
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ 5
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ 6
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ 7
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ 8
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ 9
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    РядЧисел2.Числа * 100 + РядЧисел1.Числа * 10 + РядЧисел.Числа + 1 КАК Числа
ИЗ
    РядЧисел КАК РядЧисел,
    РядЧисел КАК РядЧисел1,
    РядЧисел КАК РядЧисел2
УПОРЯДОЧИТЬ ПО
    Числа

Небольшие комментарии. Первым делом формируется временная таблица с одной колонкой, в которой содержится числовой ряд от 0 до 9. Далее эта временная таблица соединяется сама с собой полным соединением, результатом чего будет декартово произведение. В итоговой таблице будет ровно 1000 строк (10*10*10). Значение единственной выходной колонки рассчитывается по формуле

ЧислоИзТаблицы1*N*N + ЧислоИзТаблицы2*N + ЧислоИзТаблицы3 + 1

где:

  • ЧислоИзТаблицы[1,2,3] — данные из первой, второй или третьей таблицы, участвующей в соединении;
  • N — количество элементов во временной таблице;
  • 1 — число, на которое необходимо сдвинуть значение наименьшего элемента в получившемся числовом ряде относительно наименьшего элемента во временной таблице. Т.е. если бы этого слагаемого не было, то получился бы числовой ряд от 0 до 999.

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

ГДЕ
    РядЧисел2.Числа * 100 + РядЧисел1.Числа * 10 + РядЧисел.Числа + 1 < 777

Решение 2

В данном решении используется факт, что все ссылки в 1С уникальны и их можно сравнивать друг с другом. Решение не универсально: в базе должна быть какая-то таблица ссылочного типа с необходимым количеством элементов.

ВЫБРАТЬ ПЕРВЫЕ 1000
    Номенклатура.Ссылка
ПОМЕСТИТЬ Спр
ИЗ
    Справочник.Номенклатура КАК Номенклатура
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВложенныйЗапрос.Количество КАК Числа
ИЗ
    (ВЫБРАТЬ
        Спр.Ссылка КАК Ссылка,
        КОЛИЧЕСТВО(Спр1.Ссылка) КАК Количество
    ИЗ
        Спр КАК Спр,
            ЛЕВОЕ СОЕДИНЕНИЕ Спр КАК Спр1
            ПО Спр.Ссылка >= Спр1.Ссылка
    СГРУППИРОВАТЬ ПО
    Спр.Ссылка) КАК ВложенныйЗапрос
УПОРЯДОЧИТЬ ПО
    Числа

Небольшие комментарии. Из любой таблицы ссылочного типа выбираются первые элементы в количестве, необходимом по условию задачи. Необходимо обращаться к таблице, в которой точно есть необходимое количество элементов. В данном примере запрос осуществляется к таблице справочника Номенклатура.

Далее во вложенном запросе полученная временная таблица соединяется сама с собой по ссылкам на условие «>=». Т.к. ссылки уникальны, для каждой строки из левой таблицы будет найдено от 1 до N строк из правой, где N — это общее количество строк временной таблицы. Далее производится группировка ссылок левой таблицы с определением количества сопоставленных ссылок правой таблицы. В поле «Количество» будет содержаться ряд чисел от 1 до 1000, что и требуется.

В заключение выводим и сортируем по возрастанию получившийся числовой ряд.

Если Вы знаете другое решение задачи, пишите в комментариях.

Другие задачи с собеседований:

Избавиться от условия в выражении
Поиск одинаковых табличных частей
Получение курсов валют для каждого документа

MYSQL используйте количество строк из одного запроса, чтобы ограничить результаты в секунду путем сравнения значений

Как вы сравниваете возвращаемые результаты в таблице 1 с квотой в таблице 2 с помощью подзапроса? Выходными данными должны быть все строки, которые не соответствуют квоте из таблицы 2.

table1
--------------------------
id | master | info | here
--------------------------
0  | a      | 1234 | abcd
1  | b      | 2345 | bcde
2  | a      | 3456 | cdef
3  | c      | 4567 | defg
4  | b      | 5678 | efgh
5  | b      | 6789 | fghi

table2
--------------------------
id | master | quota | info
--------------------------
0  | a      | 2     | abcd
1  | b      | 4     | bcde
2  | c      | 5     | cdef

Выходные данные должны возвращать строки таблицы 2 1 & 2; строка 0 удовлетворяется, потому что квота равна 2, и есть две строки с мастером а. Строка 1 просто пропустила квоту на 1, поэтому она должна быть возвращена вместе со строкой 2.

Вот ход моих мыслей:

(mysql повлиял на psuedo-код, само собой разумеется, что он не работает!) —

SELECT * FROM table2 
WHERE quota > COUNT(
    SELECT id FROM table1 
    WHERE table1.master = table2.master
)

mysql

Поделиться

Источник


user1145643    

17 февраля 2015 в 20:38

2 ответа


  • MySQL ограничить максимальное количество строк для одного и того же значения «user»

    Как я могу ограничить в MySQL максимальных строках одно и то же значение user? Например, у меня есть таблица со столбцами id | user | data и я хотел бы ограничить максимальное количество строк до 5 для каждого пользователя (одно и то же значение user). Моя идея состоит в том, чтобы использовать…

  • как ограничить количество локонов в секунду php

    Я хочу запустить telegram-бота на сервере. Я создал его с php, и он отправляет запросы на серверы telegram с curl. Бот telegram server предотвращает более 30 запросов в секунду, это означает, что я должен отправлять 30 запросов в секунду с curl, максимум. как я могу ограничить количество curl в…



2

Попробуйте использовать HAVING с соединением

SELECT * FROM table2
INNER JOIN table1 USING (master)
GROUP BY master HAVING COUNT(*) < quota

Поделиться


Austin    

17 февраля 2015 в 20:43



0

Можно внутреннее соединение из table2 с подзапросом таблицы и вернуться в случаях, когда квота прикинь

SELECT
    t2.id,
    t2.master,
    c.master_count,
    t2.quota,
    t2.info
FROM table2 AS t2
INNER JOIN (
    SELECT master, COUNT(id) AS master_count
    FROM table1
    GROUP BY master
    ) AS c
    ON t2.master = c.master
WHERE
    c.master_count >= t2.quota

Поделиться


Mike Brant    

17 февраля 2015 в 20:44


Похожие вопросы:

Обработка сравнения старых дат в новом MySQL

В руководстве по миграции для MySQL 5.0 говорится, что способ сравнения между DATEs и DATETIMEs изменился. Несовместимое изменение: начиная с MySQL 5.0.42, когда значение DATE сравнивается со…

MySQL-ограничить (принудительно) количество строк, возвращаемых для любого запроса

У меня есть особая потребность в безопасности с mysql. Мне нужно принудительно ограничить количество строк, возвращаемых запросом, выдав ошибку, если возвращенные строки будут закончены, скажем,…

Как ограничить результаты запроса SQL?

Я хочу ограничить результаты запроса в MySQL. Я хочу, чтобы запрос искал 5000 строк, но возвращал только 5 из 50 найденных. Как это можно сделать? Любая помощь будет оценена по достоинству.

MySQL ограничить максимальное количество строк для одного и того же значения «user»

Как я могу ограничить в MySQL максимальных строках одно и то же значение user? Например, у меня есть таблица со столбцами id | user | data и я хотел бы ограничить максимальное количество строк до 5…

как ограничить количество локонов в секунду php

Я хочу запустить telegram-бота на сервере. Я создал его с php, и он отправляет запросы на серверы telegram с curl. Бот telegram server предотвращает более 30 запросов в секунду, это означает, что я…

Ограничьте количество ячеек, возвращаемых из запроса Bigtable в Go

Можно ли ограничить количество ячеек (а не строк), возвращаемых из запроса Bigtable в Go? Я вижу RowFilter, чтобы ограничить количество строк, но не фактическое количество ячеек.

Ограничить количество строк

Как я могу ограничить количество строк, отображаемых в моем отчете? Я отображаю поле emp_desc с помощью этого запроса: select emp_desc from emp where emp_name in (‘roger’,’harper’,’john’). Вывод…

Как ограничить количество строк, которые можно хранить в таблице mysql?

Мне нужно ограничить количество строк, которые можно вставить в таблицу MySQL, только 10. Мне нужно реализовать это только из MySQL, то есть без использования какого-либо языка программирования. Я…

Как я могу принудительно ограничить количество строк, возвращаемых из запроса, для всех пользователей?

Мы хотим ограничить количество строк, возвращаемых, когда любой пользователь делает запрос SELECT из нашей базы данных. Конечно, вы можете вручную ограничить количество строк в возвращаемом запросе,…

Mysql — как ограничить количество транскрипций в секунду на столе

Как ограничить количество транскрипций в секунду на столе в Mysql? Например, чтобы предотвратить вход в систему грубой силы через API

Функции языка запросов 1С. Работа со строками

Функции работы со строками

Механизмов для работы со строками в запросах 1С мало. Во-первых, строки можно складывать. Во-вторых, от строки можно взять подстроку. В-третьих, строки можно сравнивать, в том числе по шаблону. Вот пожалуй и всё, что можно делать со строками.

Сложение строк

Для сложения строк в запросе используется операция «+». Складывать можно только строки ограниченной длины.

ВЫБРАТЬ
	"Наименование: " + Контрагенты.Наименование КАК Колонка1
ИЗ
	Справочник.Контрагенты КАК Контрагенты
ГДЕ
	Контрагенты.Ссылка = &Ссылка

Функция Подстрока

ПОДСТРОКА(<Строка>, <НачальнаяПозиция>, <Длина>)

Аналог функции Сред() из объектной модели. Функция Подстрока() может применяться к данным строкового типа и позволяет выделить фрагмент <Строки>, начинающийся с символа номер <НачальнаяПозиция> (символы в строке нумеруются с 1) и длиной <Длина> символов. Результат вычисления функции имеет строковый тип переменной длины, причем длина будет считаться неограниченной, если <Строка> имеет неограниченную длину и параметр <Длина> не является константой или превышает 1024.

Если длина строки меньше, чем указана во втором параметре, то функция вернет пустую строку.

Внимание! Использование функции ПОДСТРОКА() с целью приведения строк неограниченной длины к строкам ограниченной длины не рекомендуется. Вместо нее лучше использовать операцию приведения типа ВЫРАЗИТЬ().

Функция Подобно

Если нужно убедиться, что строковый реквизит соответствует определённым критериям мы его сравниваем:

ВЫБРАТЬ
	Контрагенты.Наименование КАК Колонка1
ИЗ
	Справочник.Контрагенты КАК Контрагенты
ГДЕ 
	Контрагенты.Наименование = "Газпром"

А что, если нужно более хитрое сравнение? Не просто на равенство или неравенство, а на подобие определенному шаблону? Вот как раз для этого и создана функция ПОДОБНО.

ПОДОБНО — Оператор проверки строки на подобие шаблону. Аналог LIKE в SQL.

Оператор ПОДОБНО позволяет сравнить значение выражения, указанного слева от него, со строкой шаблона, указанной справа.…] (в квадратных скобках значок отрицания, за которым следует один или несколько символов): любой одиночный символ, кроме тех, которые перечислены следом за значком отрицания.

Любой другой символ означает сам себя и не несет никакой дополнительной нагрузки. Если в качестве самого себя необходимо записать один из перечисленных символов, то ему должен предшествовать <Спецсимвол>. Сам <Спецсимвол> (любой подходящий символ) определяется в этом же операторе после ключевого слова СПЕЦСИМВОЛ.

ВЫБРАТЬ
	Контрагенты.Наименование КАК Колонка1
ИЗ
	Справочник.Контрагенты КАК Контрагенты
ГДЕ 
	Контрагенты.Наименование ПОДОБНО "[Г]%"

В данном примере мы получим всех контрагентов, наименование которых начинается на букву «Г»

Похожие записи

6 примеров команд WC для подсчета количества строк, слов и символов в Linux

Команда wc ( слов ) в операционных системах Unix / Linux используется для определения количества новых строк, , слов, , байтов и символов в файлах, заданных аргументами файла. Синтаксис команды wc показан ниже.

 # wc [параметры] имена файлов 

Ниже приведены параметры и способы использования, предоставляемые командой.

  wc -l : печатает количество строк в файле.
  wc -w : печатает количество слов в файле.
  wc -c : отображает количество байтов в файле.
  wc -m : печатает количество символов из файла.
  wc -L : печатает только длину самой длинной строки в файле. 

Итак, давайте посмотрим, как мы можем использовать команду « wc » с их немногими доступными аргументами и примерами в этой статье. Мы использовали « tecmint.txt ‘файл для тестирования команд. Давайте узнаем вывод файла с помощью команды cat, как показано ниже.

 [[адрес электронной почты защищен] ~] # cat tecmint.txt

Красная шляпа
CentOS
Fedora
Debian
Научный Linux
OpenSuse
Ubuntu
Xubuntu
Linux Mint
Жемчужина Linux
Slackware
Mandriva 

1. Базовый пример команды WC

Команда « wc » без передачи каких-либо параметров отобразит базовый результат « tecmint».txt ‘файл. Три числа, показанные ниже: 12 ( количество строк ), 16 ( количество слов ) и 112 ( количество байтов ) файла.

 [[адрес электронной почты защищен] ~] # wc tecmint.txt

  12   16   112  tecmint.txt 

2. Подсчитать количество строк

Для подсчета количества новых строк в файле используйте опцию « -l », которая печатает количество строк из данного файла.Скажем, следующая команда отобразит количество новых строк в файле. В выводе первое поле назначается как счетчик, а второе поле — это имя файла.

 [[электронная почта защищена] ~] # wc -l tecmint.txt

  12  tecmint.txt 

3. Отображение количества слов

Использование аргумента « -w » с командой « wc » позволяет распечатать количество слов в файле. Введите следующую команду для подсчета слов в файле.

 [[адрес электронной почты защищен] ~] # wc -w tecmint.текст

  16  tecmint.txt 

4. Подсчет количества байтов и символов

При использовании опций « -c » и « -m » с « wc » команда напечатает общее число байтов и символов соответственно в файле.

 [[электронная почта защищена] ~] # wc -c tecmint.txt

  112  tecmint.txt 
 [[адрес электронной почты защищен] ~] # wc -m tecmint.txt

  112  tecmint.txt 

5.Длина отображения самой длинной строки

Команда « wc » позволяет использовать аргумент « -L », его можно использовать для вывода длины самой длинной ( символов, ) строки в файле. Итак, у нас есть самая длинная символьная строка (« Scientific Linux ») в файле.

 [[адрес электронной почты защищен] ~] # wc -L tecmint.txt

16 tecmint.txt 

6. Проверьте дополнительные варианты туалета

Для получения дополнительной информации и помощи по команде wc просто запустите « wc –help » или « man wc » из командной строки.

 [[адрес электронной почты защищен] ~] # wc --help

Использование: wc [ОПЦИЯ] ... [ФАЙЛ] ...
  или: wc [ОПЦИЯ] ... --files0-from = F
Вывести счетчики новой строки, слова и байтов для каждого ФАЙЛА, а также итоговую строку, если
указано более одного ФАЙЛА. Без ФАЙЛА или когда ФАЙЛ равен -,
читать стандартный ввод.
  -c, --bytes вывести количество байтов
  -m, --chars вывести количество символов
  -l, --lines вывести количество символов новой строки
  -L, --max-line-length вывести длину самой длинной строки
  -w, --words вывести количество слов
      --help отобразить эту справку и выйти
      --version вывести информацию о версии и выйти

Сообщайте об ошибках в wc на [адрес электронной почты защищен]
Домашняя страница GNU coreutils: 
Общая справка по использованию программного обеспечения GNU: 
Для получения полной документации выполните: info coreutils 'wc invocation' 

Если вы цените то, что мы делаем здесь, на TecMint, вам следует принять во внимание:

TecMint — это самый быстрорастущий и пользующийся наибольшим доверием сайт сообщества, где можно найти любые статьи, руководства и книги по Linux в Интернете. Миллионы людей посещают TecMint! для поиска или просмотра тысяч опубликованных статей доступны БЕСПЛАТНО для всех.

Если вам нравится то, что вы читаете, пожалуйста, купите нам кофе (или 2) в знак признательности.

Мы благодарны за вашу бесконечную поддержку.

Что такое PRI? Руководство по интерфейсным схемам первичной скорости + 3 альтернативы

Что такое PRI? PRI — или интерфейс первичной скорости — представляет собой сквозное цифровое телекоммуникационное соединение, которое позволяет одновременно осуществлять 23 передачи голоса, данных или видеотрафика между сетью и пользователем.Линия или цепь PRI — это физическая часть оборудования.

и

Технология

PRI существует с 1980-х годов. Это была одна из наиболее широко используемых технологий для бизнес-коммуникаций, хотя использование этого типа системы сократилось в последние годы из-за растущей популярности VoIP.

Мы рассмотрим VoIP и другие альтернативы позже в этой статье. Чтобы перейти к этому или любому другому разделу статьи, просто нажмите на оглавление ниже.В противном случае продолжайте читать, чтобы точно узнать, что такое PRI.

Содержание

Характеристики линии PRI

Чтобы лучше понять, что делает PRI и как на самом деле работает, давайте начнем с рассмотрения некоторых из его ключевых функций:

  • Линия PRI состоит из двух пар медных проводов, соединяющих поставщика услуг (сеть) с заказчиком (бизнес-конечным пользователем).
  • PRI технически представляет собой одну линию, но он может одновременно передавать 23 отдельных сообщения (голос, данные или видео.Это означает, что до 23 человек в вашей компании могут одновременно разговаривать по телефону (отправлять мгновенные сообщения или общаться в видеочате).
  • Каждый из каналов PRI имеет пропускную способность 64 кбит / с для передачи данных.
  • Линии

  • PRI могут работать с аналоговой или смешанной системой EPABX, а также с системой IP PBX.
  • PRI может объединить две системы PBX вместе, увеличивая количество доступных каналов связи.

PRI T1 против E1

Схема PRI — фактический кабель, который физически соединяет вашу телекоммуникационную систему — доступен в двух вариантах: T1 и E1.Основное различие между двумя схемами PRI во многом связано с географическим положением, хотя есть некоторые технологические различия, о которых следует знать:

E1

Т1

Используется в Европе и Австралии Используется в Северной Америке и Азии
Обеспечивает 64 кбит / с для передачи данных Обеспечивает передачу данных 64 кбит / с
Скорость передачи и приема 2.048 Мбит / с Скорость передачи и приема 1,544 Мбит / с
Физически содержит две пары медных проводов Физически содержит две пары медных проводов
Всего 32 канала Всего каналов 24
30 каналов, используемых для голоса, данных и видео 23 канала для передачи голоса, данных, видео
2 канала для сигнализации 1 канал для сигнализации

Функциональность PRI

Если вы звонили в компанию в любое время за последнее десятилетие, велика вероятность, что у вас было какое-то взаимодействие с интерфейсом первичной ставки (PRI).Давайте сделаем шаг назад и посмотрим, как PRI работает в деловой среде.

Прямой входящий набор (DID)

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

Но каждый из этих индивидуальных телефонных номеров не означает, что к каждому человеку подключена буквально отдельная телефонная линия.Вовсе нет. И здесь на помощь приходит интерфейс первичной скорости.

Как вы помните, мы упоминали, что PRI может обрабатывать до 23 разговоров (IM, видео и т. Д.) Одновременно. Итак, идея состоит в том, чтобы настроить один PRI для 23 пользователей в компании. Однако малый и средний бизнес рассчитывает на то, что эти 23 человека вряд ли будут разговаривать (или общаться в чате, или что-то еще) одновременно.

Имея это в виду, обычно к одному PRI назначается до 50 пользователей.Это означает, что 50 разных телефонных номеров проходят через одну и ту же цепь PRI с возможностью одновременной связи 23.

Расширение

Теперь, когда бизнес растет и добавляется все больше пользователей, вероятность того, что одновременно будет происходить 23 или более сеансов связи, гораздо выше.

В этом случае можно приобрести дополнительную цепь PRI и добавить ее к существующей системе, открывая возможность для еще 23 каналов для передачи голоса, данных или видео.

Альтернативы PRI

Нельзя отрицать, что технология первичного интерфейса изменила способ общения компаний с клиентами… 30+ лет назад. Но с тех пор достижения в области телекоммуникационных технологий пролили довольно яркий свет на некоторые недостатки PRI.

(дюйм) гибкость

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

.

Рассмотрим малый бизнес. Компании из пяти или шести человек не нужны 23 канала коммуникации. В этом случае компания платит намного больше, чем им действительно нужно. Думайте об этом, как о покупке фургона с 15 пассажирами для семьи из четырех человек.

С другой стороны, средний бизнес или крупная корпорация сталкиваются с различными проблемами, связанными с PRI.Для добавления большого количества пользователей требуется покупка нескольких PRI (опять же, блоками по 23 канала). Настройка нескольких местоположений может быть головной болью. А удаленные работники? Забудь об этом.

Прочие опции

Все больше и больше предприятий ищут альтернативы PRI. Есть несколько вариантов, но не каждый вариант подходит для любого бизнеса. Вот некоторые другие решения.

Аналоговые линии POTS

POTS = Обычная старая телефонная связь.Мы говорим о старой школьной телефонной линии, которая соединяла каждый дом и каждый бизнес. У ваших бабушек и дедушек был такой. У ваших родителей был такой. Возможно, у вас дома даже есть горшки. В жилых помещениях POTS часто называют стационарной линией или PSTN.

POTS предоставляет услуги через единую аналоговую цепь, соединяющую поставщика услуг и пользователя. POTS поддерживает однократную связь. Это означает, что один телефонный звонок делает линию недоступной для чего-либо еще, например для доступа в Интернет через факс или модем.

В какой-то момент истории аналоговые линии POTS были способами, которыми люди общались по телефону. И сегодня он может работать как решение для малого бизнеса, если телефонный трафик минимален.

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

SIP-транкинг

Session Initiation Protocol — или SIP — это метод передачи голосовой связи по сети передачи данных.Вызов голосовой связи по IP (VoIP) является примером сеанса SIP.

SIP-транкинг — это что-то вроде POTS (помните, старая добрая телефонная связь). Но с SIP-транкингом повсюду не проходят телефонные линии. Вместо этого «линии» являются виртуальными, потому что телефонная система подключена к поставщику услуг через вашу сеть (ваше интернет-соединение).

В прошлом транкинг SIP часто использовался в качестве замены системам POTS или PRI. В зависимости от размера бизнеса это все еще может быть жизнеспособным вариантом.

Хостинг VoIP

Сегодня многие предприятия любого размера переходят на хостинговое решение VoIP. Хостинг VoIP — также известный как размещенная УАТС — просто означает, что все размещается за пределами площадки. Провайдер размещает службу, занимается серверами и программным обеспечением, а также занимается обслуживанием, обновлениями и устранением неполадок.

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

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

Сравнение: хостинг VoIP, PRI и SIP-транкинг

Давайте подробнее рассмотрим самые популярные телекоммуникационные решения, представленные сегодня на рынке: VoIP, PRI и SIP-транкинг.Как складываются три? Мы сравним каждого по этому критерию.

  • Начальные затраты
  • Текущие и эксплуатационные расходы
  • Возможности подключения
  • Резервное копирование и резервирование
  • Непрерывность бизнеса
  • Гибкость и масштабирование
  • Качество обслуживания

Начальные затраты

Вряд ли вы найдете телефонную систему, не требующую каких-либо предварительных вложений. Сумма этих инвестиций широко варьируется в зависимости от выбранной вами системы.

Хостинг VoIP

Вам понадобится несколько вещей, чтобы настроить и запустить размещенную систему VoIP — телефоны VoIP, маршрутизаторы и высокоскоростной широкополосный доступ в Интернет (бизнес-класса). Все остальное, например серверы и программное обеспечение, обрабатывается поставщиком услуг.

У большинства организаций уже есть широкополосные услуги бизнес-класса, поэтому им остается покупать IP-телефоны и маршрутизаторы. Это оборудование относительно доступно и в некоторых случаях может быть даже арендовано у провайдера.Этот вариант сэкономит вам еще больше денег.

Предварительные затраты на хостинг VoIP: Низкие

SIP-транкинг

Для транкинга

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

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

Первоначальные затраты на магистраль SIP

: Высокая

PRI

Цепи

PRI представляют собой физические соединения, что означает, что требуется установка на месте. Каждая группа из 23 необходимых каналов приведет к установке еще одной цепи PRI. Если вашему бизнесу требуется много каналов связи, это может привести к высоким затратам на установку.

Если телефонная система PRI будет использоваться с IP-УАТС, потребуется интерфейсная карта с первичным тарифом. Это может значительно увеличить первоначальные затраты.

Предварительные затраты на схему

PRI: от средних до высоких

Текущие расходы

Авансовые вложения — не единственные расходы, связанные с телефонной системой. Текущие расходы, будь то ежемесячная плата за обслуживание или обслуживание, могут быстро повлиять на рентабельность инвестиций.

Хостинг VoIP

Хостинговые системы VoIP обычно работают по модели ежемесячной абонентской платы.Это может быть плата за пользователя в месяц или за блок пользователей в месяц (например, 0-10 пользователей / xx долларов в месяц).

Стоимость

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

В некоторых случаях размещенная услуга VoIP также может взиматься по фиксированной поминутной ставке.

Для получения лучших тарифов в сочетании с лучшим решением ознакомьтесь с тремя пакетами коммерческих телефонных услуг Nextiva.

Текущие расходы на хостинг VoIP: Различаются; Низкая — средняя

SIP-транкинг

Стоимость транкинга SIP часто определяется для каждого канала, где один канал = один вызов.Это означает, что компании должны выяснить, сколько одновременных каналов им понадобится в данный момент времени. Если 25 человек потенциально могут разговаривать по телефону одновременно, им понадобится как минимум 25 каналов.

Плата за канал обычно является фиксированной ежемесячной ставкой. Актуальные цены можно найти здесь.

Давайте вернемся к предыдущей таблице цен и посмотрим, сколько разницы этот тип локальной системы будет стоить компании в течение пары лет.

Текущие расходы магистрали SIP: Разные; Средний — высокий

PRI

Цепи

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

Междугородные и международные звонки также относительно дороги с системой PRI. В зависимости от бизнеса это могут быть значительные расходы.

Текущие расходы PRI: Средние — высокие

Возможности подключения

Как мы показали, разные телекоммуникационные решения требуют разного оборудования и программного обеспечения.Таким образом, подключение каждой системы отличается от других.

Хостинг VoIP

Размещенное VoIP-соединение полностью виртуальное. Нет телефонных кабелей, соединяющих предприятие с поставщиком услуг или соединяющих предприятие с внешней телефонной линией. Само название объясняет все — передача голоса по IP (Интернет).

При размещении VoIP все провода, кабели и шнуры обрабатываются поставщиком услуг как хостом.

Хостинг VoIP-подключения: Виртуальный

SIP-транкинг

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

Подключение к магистрали SIP: Virtual

PRI

Цепи

PRI — это физические компоненты оборудования. Они требуют установки на месте, и, как вы помните, каждая цепь обеспечивает 23 канала. Если бизнесу нужно более 23 каналов, им нужно будет установить несколько каналов.

Подключение PRI: Физическое

Резервное копирование и резервирование

Думайте о резервном копировании и резервировании как о «том, что происходит в случае аварии».Будь то что-то простое, например отключение электроэнергии, или что-то катастрофическое, например, торнадо, предприятиям требуется система, которая сможет удовлетворить их потребности во время бедствия.

Хостинг VoIP

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

Поставщики услуг

VoIP также планируют аварии или простои, настраивая несколько хост-сайтов. Если один сайт не работает, обслуживание и хостинг можно легко перенести на другой сайт.

Давайте, например, посмотрим на историю подключений Nextiva. Ниже приведен журнал времени безотказной работы Nextiva за последние 90 дней. Чтобы увидеть эти данные в режиме реального времени, просто перейдите на status.nextiva.com.

Возможность резервного копирования через хостинг VoIP: Strong

SIP-транкинг

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

Возможность резервного копирования магистрали SIP: Strong

PRI

Цепи

PRI являются физическими, поэтому авария на месте может вызвать серьезные проблемы. Предприятия могут встраивать дополнительные схемы PRI для обеспечения избыточности, но это может иметь высокую цену.

Возможность резервного копирования PRI: Слабая

Непрерывность бизнеса

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

Хостинг VoIP

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

Уровень непрерывности хостинга VoIP: Очень высокий

SIP-транкинг

В случае возникновения чрезвычайной ситуации транкинг SIP поддерживает передачу вызовов, но только в заранее определенные места.

Уровень непрерывности магистрали SIP: Средний

PRI

Физическая природа цепей PRI не позволяет изменять маршрутизацию вызова в случае возникновения чрезвычайной ситуации.

Уровень непрерывности PRI: Низкий / отсутствует

Гибкость и масштабирование

Планирование будущего роста компании является обязательным условием при выборе телефонной системы. Решение должно соответствовать не только текущим потребностям бизнеса, но и его прогнозируемым целям и будущим потребностям. Возможность быстрого и простого масштабирования телефонной системы очень важна.

Хостинг VoIP

Когда дело доходит до гибкости и быстрого масштабирования, лучшей доступной системой является хостинг VoIP.Развертывание размещенного VoIP может произойти за несколько коротких дней.

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

Гибкость хостинга VoIP: очень высокая

SIP-транкинг

Расширение вашей системы с поддержкой SIP потребует от вашего поставщика услуг добавления дополнительных магистралей SIP. Хотя этот процесс относительно прост, скорость будет зависеть от реакции вашего поставщика услуг.Системы SIP могут масштабироваться несколькими или многими пользователями, поскольку каждая магистраль представляет собой отдельный канал связи.

Гибкость магистрали SIP: Высокая

PRI

Для масштабирования системы PRI требуется физическая установка дополнительных цепей PRI. Это может быть дорогостоящим в зависимости от объема работ. Масштабирование ограничено группами по 23 канала, поэтому, если вам нужно еще два или три пользователя, вам все равно потребуется добавить совершенно новый / дополнительный канал PRI.

Гибкость PRI: Низкая

Качество обслуживания

Самая дешевая и гибкая телефонная система не имеет значения, если качество телефонных звонков ужасное. Из-за различий в технологиях качество звонков и обслуживание могут сильно различаться между различными телефонными решениями.

Хостинг VoIP

Качество вызова

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

Сильное интернет-соединение, однако, как правило, обеспечивает отличное качество обслуживания HD для вызовов VoIP.

Качество размещенного VoIP: Высокое

SIP-транкинг

Системы

SIP могут страдать от тех же проблем, что и размещенный VoIP, например, дрожание или задержки. Точно так же надежное интернет-соединение может решить эти проблемы, обеспечивая отличное качество.

Качество магистрали SIP: Высокое

PRI

Звонки, передаваемые по цепи PRI, будут звучать так же, как звонки, сделанные по линии POTS.Диапазон частот, передаваемый цепями PRI, чрезвычайно ограничен по сравнению с аналогами VoIP и SIP, которые передают вызовы в HD.

Звонки, сделанные через PRI, могут звучать несколько приглушенно или отдаленно по сравнению с чистым, четким звуком, который слышен через размещенные на хосте VoIP или SIP-магистрали.

Качество PRI: Низкое

Заключительные мысли: лучший вариант

Мы ответили на вопрос: «Что такое PRI?» И мы немного знаем о том, как это работает, о его преимуществах и недостатках.Можем ли мы с уверенностью решить, что PRI — лучшее телефонное решение?

Наверное, нет.

SIP-транкинг

Транк SIP, безусловно, имеет преимущества перед PRI, хотя бы в простоте масштабируемости и качества связи. Установить магистраль SIP довольно просто (в зависимости от используемой АТС), и ваш бизнес не будет обременен тоннами телефонных проводов.

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

Хостинг VoIP

Еще лучше размещенная система VoIP.Стоимость, простота развертывания, масштабируемость и аварийное восстановление — все это на высоте этого решения.

Что еще делает хостинг VoIP таким замечательным? На самом деле, несколько вещей.

  • Управлять просто. Начать очень просто, а постоянное управление — легкий ветерок. Вам не нужно быть ИТ-специалистом, чтобы настраивать новых пользователей. Обычно все делается в простой приборной панели.
  • Вы можете добавлять или удалять функции . Хостинговые системы VoIP упрощают использование таких опций, как чат или видеоконференцсвязь.
  • Масштабируемость . Размещенную систему VoIP можно легко увеличить от одного пользователя до 500+. Это действительно так же просто, как добавить пользователей и обновить ежемесячный план. (Отлично для колл-центров!)
  • Это мобильный . Хостинговые системы VoIP поддерживают все виды мобильной связи. Это сокращает связь между вашим сотрудником и его столом.

Компания Nextiva, занимающая лидирующие позиции в области хостинга VoIP, предлагает одну из лучших в мире систем бизнес-коммуникации.Вот несколько продуктов, которые могут вывести ваш бизнес на новый уровень.

  • Nextiva Office — Свяжите своих сотрудников и клиентов в любом месте. Благодаря самой надежной в стране телефонной службе корпоративного уровня вы никогда не пропустите ни одного звонка, мгновенного обмена мгновенными сообщениями или видеоконференции.

  • Контактный центр Nextiva — Хотите вывести свой колл-центр на новый уровень? Дайте вашим агентам лучший шанс помочь вашим клиентам, установив решение для колл-центра Nextiva.В качестве платформы для многоканальных коммуникаций все, что нужно вашим агентам, всегда у них под рукой. Больше не нужно прокручивать страницы с информацией или переключаться между несколькими окнами. Ваши агенты могут сосредоточиться на самом важном — на вашем клиенте.
  • Nextiva SIP Trunking — Если вы предпочитаете использовать магистральный маршрут SIP — Nextiva также может помочь с этим. Nextiva SIP Trunking предлагает комплексные цены, поэтому вам не нужно беспокоиться о поминутной оплате. Вы знаете заранее, сколько стоит.

Попробуйте Nextiva

Дайте нам возможность показать вам, что на самом деле означает удивительный сервис. Свяжитесь с нами, чтобы узнать о любом из наших продуктов. Если вы не уверены, что вам нужно, все равно свяжитесь с нами! Мы хотели бы узнать о вашем бизнесе и о том, как мы можем вам помочь.

Кэмерон Джонсон — лидер сегмента рынка Nextiva. Помимо статей в блоге Nextiva, Кэмерон писал для различных изданий, включая Inc. и Business.com. Кэмерон недавно был признан маркетологом года в штате Юта.

Найти и заменить на vi — часть 1

Как это работает и как вы с этим работаете?

Резюме
Получаете ли вы максимальную отдачу от vi? Как только вы узнаете
синтаксис, мощные функции поиска и замены vi позволяют быстро
и точно изменять текст в ваших файлах. Здесь мы покажем вам
базовая структура команд поиска и замены и как сделать
большинство из этого. К концу столбца этого месяца вы должны
понимать значение таких команд, как % s @ / @ per @ g . (2700 слов)


Глобальный поиск и замена в любом редакторе
следует назвать глобальным поиском и уничтожением. Выполнение плохо сформированного
запрос поиска и замены уничтожит ваш текст быстрее, чем
ничего, кроме rm * . К счастью, в vi вы можете
отменить действие последней команды изменения, которая включает
эффекты поиска и замены. Действие отмены выполняется путем ввода
u (для отмены) в командном режиме. Это важная команда
чтобы знать, когда вы редактируете, особенно когда вы делаете глобальные
операции поиска и уничтожения.Это также очень удобно, когда вы
практика. Вы можете попробовать что-нибудь, а затем использовать u для
вернуть файл в предыдущее состояние.

Редактор vi загружает текстовый файл в буфер редактора. Когда ты
выполнять любое редактирование, включая операции поиска и замены, которые вы
фактически редактируют символы в буфере, а не в самом файле. я
в статье есть слова, строка, текст и файл, но
имейте в виду, что вы на самом деле редактируете текст, хранящийся в памяти
буфер, а не сам файл.Файл не изменяется до тех пор, пока
выполненное вами редактирование записывается обратно в файл.

Чтобы начать работу с vi, полезно подумать о поиске vi и
заменить команду как команду в пяти отдельных частях:

  1. Команда или символ, означающий, что выполняемая команда является командой поиска и замены.
  2. Диапазон строк в файле для обработки
  3. Текст для поиска
  4. Текст используется вместо
  5. Опции поиска и / или действия замены

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

Сначала мы рассмотрим первую часть, команду запуска поиска.
и заменить. Редактор vi сам по себе не является редактором — это
визуальная оболочка (vi для visual) вокруг однострочного редактора, называемого
«бывший.» Никто больше не пользуется однострочными редакторами — они тоже
примитивны и болезненны в использовании — но они были предшественниками
полноэкранные и многоэкранные редакторы на рынке. В
Интерфейс vi создает полноэкранную оболочку вокруг
ex однострочный редактор. Многие из команд vi
на самом деле команды ex и запускаются при первом вводе
бывший режим.Поиск и замена — одно из них. Чтобы войти в экс
режиме введите двоеточие (:) в командном режиме. Все
ароматы и примеры поиска и замены в этой статье начинаются
с символом двоеточия. Хотя это не рассматривается в этой статье,
команды, начинающиеся с двоеточия, например : q! бросить курить
являются бывшими командами. Разница между ex
команды и команды vi, которые были добавлены в
Обертка vi — это начальное двоеточие. Тебе не о чем беспокоиться
об этом, но исторически это объясняет, почему так много vi
команды начинаются таким образом.

Команда vi для поиска и замены: заменяет ,
который можно сократить до одного символа s . В
простейшая команда замены начинается с двоеточия, за которым следует
s как в:

: s 

После двоеточия и s (: s ) следует
текст поиска и текст замены. Разделитель, который обычно
косая черта (/) должна разделять эти две текстовые строки. В
следующая команда выполнит поиск «вверх» и заменит его на «право».»

: s / вверх / вправо /
 

В приведенной выше команде у нас есть первая часть
(сама команда — : s ), три (поисковый текст — вверх),
и четыре (текст замены — справа). А как насчет второй части,
диапазон строк, над которыми будет выполняться команда? По умолчанию
диапазон строк — это только текущая строка. Приведенная выше команда будет
найдите в строке, на которой в данный момент находится курсор, «вверх», и
замените его на «правильный», если он найден.

Когда диапазон строк, отличный от текущей строки по умолчанию, должен быть
указано, диапазон дается после двоеточия, но перед буквой «s»
заменяющая команда.

Начальная строка, запятая и конечная строка определяют диапазон
линий. Следующая команда выполняет поиск от первой строки до
10-я строка и выполняет поиск и замену.

: 1,10 с / вверх / вправо /
 

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

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

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

: 1, .s / вверх / вправо /
 

Последняя строка может быть указана как знак доллара ($). Искать и
заменить с текущей строки на последнюю строку, используйте
команда:

:., $ s / вверх / вправо /
 

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

: 1, $ s / вверх / вправо /
 

Поиск и замена по всем строкам файла достаточно распространены.
что сокращенная команда была разработана для обозначения «от первого до конца»
последний. «Знак процента (%) эквивалентен диапазону адресов 1, $.
Следующая команда — еще один способ обработки запросов из
с первой по последнюю строку и выполните поиск и замену.

:% s / вверх / вправо /
 

Начальная или конечная строка диапазона может быть задана как положительное значение.
или отрицательное количество строк смещено от текущей строки.Выполнить
поиск и замена в текущей строке и следующих пяти строках
использовать:

:., + 5s / вверх / вправо /
 

Чтобы выполнить поиск и заменить из пяти строк над текущим
строка через текущую строку используйте:

: -5, .s / вверх / вправо /
 

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

: -5, + 5сек / вверх / вправо /
 

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

: + 5, .s / вверх / вправо /
 

Расширяем поиск и уничтожаем
Теперь вы знаете, как указать адреса и диапазоны строк,
но в самом поиске и замене есть небольшая загвоздка. Все команды, описанные до сих пор, будут определять местонахождение только
первый экземпляр «вверх» и один раз замените его на «право» в
каждая строка в диапазоне адресов.Листинг 1 будет преобразован
в листинг 2 после выполнения следующей команды.

:% s / вверх / вправо /
 

Листинг 1

Переместите курсор вправо с помощью стрелок вверх, вверх, вверх
затем внесите исправления. Снова переместите курсор вверх, пока
вы дошли до конца очереди.
 

Листинг 2

Переместите курсор вправо, используя стрелки вправо, вверх, вверх
, затем внесите исправления. Снова переместите курсор вправо, пока
не дойдете до конца строки.

Чтобы исправить это, мы подошли к последней части команды — part
пять, варианты. Параметры позволяют указать, что поиск и
замена выполняется глобально в строке. Странно думать
поиска и замены в одной строке, как это происходит глобально на
эта строка, но это синтаксис, который использует vi. Глобальный для
Параметр строки — g в конце команды. В
следующая команда правильно преобразует листинг 1 в листинг 3.

:% s / вверх / вправо / g
 

Листинг 3

Переместите курсор вправо с помощью стрелок вправо, вправо, вправо
затем внесите исправления.Снова переместите курсор вправо, пока
вы дошли до конца очереди.
 

Еще одна полезная опция — флаг подтверждения, c at
конец команды. Флаг подтверждения отобразит строку, которую нужно
изменен указателем на текст, который нужно изменить, и будет ждать
вы должны нажать «y» или «n», чтобы указать, что вы хотите или не хотите идти
Впереди замена. Следующая команда запросит и
ждите своего ответа на каждую замену.

На иллюстрации в листинге 4 предполагается, что пользователь ответил «y».
к каждому запросу, кроме первого.

Листинг 5

Переместите курсор вправо с помощью стрелок вверх, вправо, вправо
затем внесите исправления. Снова переместите курсор вправо, пока
вы дошли до конца очереди.
 

Существует еще одна форма линейной адресации, называемая глобальной адресацией.
Он похож на адрес % (все строки), но позволяет
ограничить действие поиска и замены, указав определенные
текст, который должен появиться в строке перед действием поиска и замены
применяется к нему.Пример показан ниже. Синтаксис, показанный ниже
будет читать «для всех строк, содержащих` некоторый текст ‘, искать `поиск
text ‘и замените все экземпляры на `replace text.'»

: g / некоторый текст / s / текст поиска / текст замены /
 

По сути, вы запрашиваете две строки.
в строке, но только один из них подлежит замене. Это
наверное, проще разобраться на примере. В листинге 6
файл адресов содержит непротиворечивую ошибку. Мэриленд
почтовые индексы были неправильно введены как

, когда они
должно быть 01042.В листинге-образце адрес на
последняя строка содержит правильный почтовый индекс. В этом примере мы также
предположить, что файл слишком велик для редактирования
рука.

Первое очевидное решение — глобальный поиск всех
экземпляры

и замените их на 01042. Однако
есть несколько адресов в Калифорнии с правильным почтовым индексом
код

. Поиск и замена, заменившие все
экземпляры 1042 теперь будут приводить к адресам Калифорнии, которые
содержат неверные почтовые индексы 01042.

Листинг 6

Г-н А. CA 

Мисс B MD

Г-н C CA

Госпожа D MD

(другие адреса) Мистер X CA

Госпожа Y MD

Вместо этого необходим метод запуска поиска и
заменить для всего файла, но внутри всего файла только
в строках, содержащих MD в качестве состояния.

Следующая команда будет искать во всех строках файла
любая строка, содержащая MD. Когда такая линия будет найдена, она будет
применить правило подстановки изменения поиска для

и изменение любых найденных экземпляров на 01042.Команда
также дается окончательный вариант g , поэтому поиск и замена будут
должно выполняться для всех случаев появления

в каждой строке.

: г / MD / s / 

/01042 / г

Замены происходят только в линиях Мэриленда, как в листинге.
7.

Листинг 7

Г-н А. CA 

Мисс B MD 01042 Г-н C CA

Госпожа D MD 01042 (другие адреса) Мистер X CA

Госпожа Y MD 01042

Ограничивающие текстовые критерии в глобальной команде также могут быть инвертированы.Инвертированный критерий ограничивает поиск всеми строками, которые содержат , а не .
содержат определенную строку. Инвертированная глобальная команда начинается с
: г! или : v как в следующих двух командах
которые делают то же самое. Они оба ищут во всех строках строки,
не содержать «CA», а затем замените 01042 на

.

: г! / CA / s / 

/01042 / г : v / CA / s /

/01042 / г

Замены происходят только в тех строках, которые не содержат CA
в результате получился Листинг 8.Это тот же результат, что и в листинге 7.
но прибыл с противоположного направления.

Листинг 8

Г-н А. CA 

Мисс B MD 01042 Г-н C CA

Госпожа D MD 01042 (другие адреса) Мистер X CA

Госпожа Y MD 01042

Существует одна версия глобальной команды, которая обычно
используется, но требует пояснений. Сначала вернемся
на исходную заменяющую команду. В любом заменителе
можно оставить пустую строку поиска.Когда
строка поиска пуста, последняя использованная строка поиска
в поисковой команде используется по умолчанию для заполнения
отсутствует строка поиска в текущей команде. Следующее
поиск команд от первой до текущей строки
заменяя вверх на право, а затем искать от текущего
строку в конец файла, заменив верхнюю на левую. в
вторая команда, «вверх» не вводится, но по умолчанию
значение поиска в первой команде.

: 1, .с / вверх / вправо / г
:., $ s // left / g
 

При использовании глобальной команды использовался предыдущий поисковый текст.
в поисковой команде — это фактически искомый текст, использованный в
глобальная часть команды.В следующей команде все
строки файла ищутся «вверх». Для каждой строки
найдено, команда замены использует только что найденный текст —
который находится «вверху» — как поисковый текст, а затем заменяет его.

: г / вверх / с // вправо / г
 

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

:% s / вверх / вправо / g
 

Глобальная версия команды, начинающаяся с : g
ищет во всех строках строку «вверх».»Когда линия найдена,
к этой строке применяется команда замены. Заменяющая команда
имеет пустой поисковый текст, поэтому замена ищет последний поиск
текст, который был использован. Последний поисковый текст — это «вверх», используемый в
глобальная команда, поэтому это используется как текст. :% s
версия ищет во всех строках «вверх» и заменяет строку, когда она
находится. Обе команды выполняют общую функцию
поиск строки во всем файле и ее замена. Который
версия команды, которую вы используете, зависит от стиля, хотя некоторые
будет утверждать, что версия % s немного быстрее.

Последнее замечание, прежде чем мы рассмотрим остальные варианты на
заменяющая команда является предметом разделителя. Любой
символ может использоваться как разделитель, хотя вперед
косая черта стала общепринятым стандартным символом. В
все следующие команды делают одно и то же.

:% s / вверх / вправо / g
:% s $ вверх $ вправо $ g
:% s & вверх & вправо & g
 

Команда замены берет первый символ после
s и предполагает, что это разделитель, и использует его
через остальную часть команды.Персонаж, использованный как
разделитель не может появиться в поисковом тексте или
текст замены, как он будет виден заменяющему
команда в качестве разделителя. Вам следует использовать другой разделитель
когда вы действительно выполняете поиск, который включает в себя поиск
для символа-разделителя. Следующая команда заменяет
косая черта со словом «пер». Он использует at
знак (@) в качестве разделителя, поскольку косая черта является частью
поисковый текст.

:% s @ / @ на @g
 

До сих пор я использовал только простые поисковые запросы, но vi позволяет
поисковые строки, из которых должны состоять — барабанная дробь, пожалуйста —
обычные выражения.

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

Связаться
нам за бесплатную консультацию.

Сколько SIP-транков нужно моему малому бизнесу?

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

Если вы думаете об обновлении до SIP-транкинга, первый вопрос, который вы можете задать: «Сколько SIP-транков мне нужно?» Вопрос с подвохом. Продолжайте читать, чтобы узнать больше.

SIP-транки и каналы

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

Люди часто используют термины «магистраль SIP» и «канал SIP» как синонимы, но это не одно и то же.Магистраль SIP — это соединение между вашей телефонной системой (PBX) и коммутируемой телефонной сетью общего пользования (PSTN). Магистраль SIP похожа на коммуникационную магистраль. Канал SIP — это возможность поддерживать один входящий или исходящий вызов, поэтому каналы SIP подобны полосам на вашем шоссе. Каждый вызов занимает ровно одну полосу, независимо от того, является он входящим или исходящим.

Поскольку магистраль SIP может содержать неограниченное количество каналов, вам понадобится только одна магистраль SIP. Количество необходимых вам каналов будет зависеть от того, сколько одновременных звонков будет совершать ваша компания.Они похожи на использование традиционной телефонной линии.

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

Определение необходимого количества SIP-каналов

Большинство поставщиков могут посоветовать вам использовать это простое практическое правило при определении количества SIP-каналов: один канал на каждых трех сотрудников.

Однако это практическое правило не всегда дает ответ.Вместо этого вам следует сосредоточиться на основных принципах, таких как количество линий PRI / T-1 или POTS, которые у вас есть в настоящее время. Этот номер определяет количество путей вызова, которые вы можете установить между коммутируемой телефонной сетью общего пользования (PTSN) и вашей УАТС.

Для небольших компаний администратор вашей компании лучше знает, сколько звонков совершает ваша компания одновременно. Малые предприятия также могут настроить опрос, чтобы узнать, сколько сотрудников одновременно звонят.

После того, как вы определите, сколько звонков ваша компания делает одновременно, дайте этому номеру немного места, например, двадцать процентов на всякий случай, и это должно помочь вам определить, сколько каналов SIP вам нужно.

Количество одновременных звонков

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

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

Правило 3: 1 для крупных компаний

Для крупных компаний со 100 и более сотрудниками сложнее определить, как часто сотрудники пользуются телефоном. В этих случаях лучше всего использовать традиционное соотношение магистральных каналов SIP: три сотрудника на один канал SIP (3: 1).

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

Другими словами, даже в крупных компаниях редко когда все разговаривают по телефону одновременно, поэтому вы можете обойтись без более высокого соотношения между телефонными и SIP-каналами.

Небольшим компаниям нужен более низкий коэффициент

Если в вашей компании менее 50 сотрудников, соотношение телефона 3: 1 к соединительной линии SIP может не помочь вам определить, сколько соединительных линий SIP вам нужно.Это потому, что чем меньше офис, тем выше вероятность того, что все будут разговаривать по телефону.

Малые и средние предприятия

Если вы владеете малым и средним бизнесом (SMB), вы, вероятно, ищете гибкую телефонную систему, которая позволит вам развивать свой бизнес. В то же время вы, вероятно, будете сосредоточены на своем бюджете, а рост вашей компании может быть непредсказуемым. Ваша компания может вырасти в мгновение ока, а вы можете оставаться в одном размере годами.Вот почему важно найти поставщика магистрали SIP, который позволит вам заказывать или отменять каналы SIP по запросу.

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

Что делает транкинг SIP столь привлекательным для малого и среднего бизнеса, так это его гибкость.Обычно интерфейс первичной скорости (PRI) для стандартной 23-канальной схемы обычно превышает количество сотрудников SMB. Используя SIP-транки, вы можете получить и оплатить только то количество каналов, которое необходимо вашему бизнесу в любой момент времени.

Средний и крупный бизнес

Если у вас средняя или крупная компания, вы, вероятно, смотрите на свои телекоммуникационные решения с гораздо более широкой точки зрения. Вам могут понадобиться сотни или тысячи каналов, особенно если у вас есть предприятия по всему миру.

Ваши сотрудники, скорее всего, часто уезжают, приезжают и переезжают в новые места, поэтому вам понадобится телекоммуникационная система, которая может перемещаться так же быстро, как и ваша компания. Это означает, что вам нужно будет быстро добавлять новые функции и местоположения.

Ваш бюджет может быть не таким большим, как для малого и среднего бизнеса, но, конечно, вы все еще учитываете свой бюджет, как это делает каждый бизнес. Везде, где можно сэкономить деньги, важно.

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

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

Транкинг

SIP может автоматически перенаправлять ваши вызовы в другое место, даже если ваша система обработки вызовов отключена.Это делает ваше обслуживание клиентов эффективным и действенным.

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

Определите, сколько магистральных каналов SIP необходимо вашей компании

Теперь, когда вы видите, что на расчеты магистрали SIP влияют различные факторы, пришло время выяснить, сколько каналов SIP вам нужно.Этот номер зависит от размера вашей компании, количества звонков и характера вашего бизнеса. Существуют соотношения и расчеты, которые помогут вам определить это число, но если вы все еще не уверены, свяжитесь с нами, мы будем рады помочь.

О новой налоговой выписке: Часто задаваемые вопросы

О новой налоговой выписке и номер файла клиента

Теперь доступен новый формат стенограммы, чтобы лучше защитить вашу информацию от кражи личных данных. Эта новая стенограмма частично маскирует личную информацию всех, кто указан в налоговой декларации.Все финансовые записи останутся полностью видимыми, чтобы облегчить налоговую подготовку, представление налоговых данных и проверку доходов. Эти изменения касаются стенограмм как физических, так и коммерческих налогоплательщиков.

IRS предпринимает это действие для лучшей защиты данных налогоплательщиков. Из-за кражи данных за пределами налоговой системы киберпреступники часто пытаются выдать себя за налогоплательщиков и налоговых специалистов. Воры пытаются получить доступ к данным стенограммы, которые могут помочь им подать мошеннические налоговые декларации или украсть дополнительные данные других физических и юридических лиц, перечисленных в стенограмме.

Вот что видно в новой налоговой декларации:

  • Последние четыре цифры любого SSN, указанного в расшифровке: XXX-XX-1234
  • Последние четыре цифры любого EIN, указанного в расшифровке: XX-XXX1234
  • Последние четыре цифры любого счета или номера телефона
  • Первые четыре символа имени и первые четыре символа фамилии для любого лица (первые три символа, если имя состоит только из четырех букв)
  • Первые четыре символа любого имени в строке названия компании (первые три символа, если имя состоит только из четырех букв)
  • Первые шесть символов почтового адреса, включая пробелы
  • Все денежные суммы, включая заработную плату и доход, причитающийся остаток, проценты и штрафы

Отправка факсов и сторонняя рассылка

По соображениям безопасности IRS больше не предлагает услуги факсимильной связи для большинства типов стенограмм как налогоплательщикам, так и третьим лицам, в том числе стенограммы для серии 1040, серии 1120 и серии 94X.IRS также остановило свою стороннюю почтовую службу через формы 4506, 4506-T и 4506T-EZ.

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

Индивидуальные налогоплательщики могут использовать Get Transcript Online для немедленного просмотра замаскированной записи или заказать ее по почте для доставки на свой зарегистрированный адрес.Налогоплательщики могут запросить выписку о заработной плате и доходах без маскировки для налоговой подготовки. Расшифровка стенограммы будет отправлена ​​по почте на зарегистрированный адрес налогоплательщика.

Кредиторы и другие лица, использующие формы 4506 для получения выписок с целью проверки дохода, должны рассмотреть другие варианты, такие как участие в Экспресс-службе проверки дохода или попросить клиента предоставить расшифровку.

Номер дела клиента и форма 4506-T

Поскольку полный идентификационный номер налогоплательщика больше не отображается, IRS создала запись для номера файла клиента как для индивидуальных, так и для бизнес-выписок.Это необязательный 10-значный номер, который обычно может быть создан третьими сторонами, что позволяет им сопоставить расшифровку стенограммы с налогоплательщиком. Поле «Номер файла клиента» появится в протоколе, когда этот номер будет введен в строке 5 формы 4506-T, запроса на расшифровку налоговой декларации и формы 4506T-EZ или формы 4506-C, запроса IVES на расшифровку налоговой декларации.

Вот как это будет работать для налогоплательщика, стремящегося проверить доход кредитора: кредитор присвоит форме 4506-T 10-значный номер, например номер ссуды.Форма 4506-T может быть подписана и подана налогоплательщиком или, если кредитор является участником IVES, Форма 4506-C, Запрос IVES на налоговую распечатку, подписанная налогоплательщиком и представленная кредитором. Номер дела клиента, присвоенный отправителем запроса в форме 4506-T или форме 4506-C, будет указан в расшифровке стенограммы. Податель запроса может присвоить любой номер, кроме номера социального страхования налогоплательщика. После получения запрашивающей стороной номер файла клиента служит номером для отслеживания, чтобы сопоставить его с налогоплательщиком.

Получите стенограмму (налогоплательщики) и номер дела клиента

Только индивидуальные налогоплательщики могут использовать «Получить стенограмму онлайн» или «Получить стенограмму по почте». Многие налогоплательщики используют эту услугу для удовлетворения запросов на подтверждение дохода. Номер файла клиента доступен для пользователей Get Transcript. Налогоплательщики могут вручную ввести Номер файла клиента, присвоенный им, например, кредитором или финансовым офисом колледжа. Этот номер файла клиента будет отображаться в протоколе либо при его загрузке, либо при отправке налогоплательщику по почте.

Система доставки стенограммы (налоговые специалисты) и номер файла клиента

Система доставки стенограммы предназначена для использования только налоговыми специалистами с надлежащими полномочиями для доступа к стенограммам налогоплательщиков. Специалисты по налогам, которым разрешен доступ к стенограмме, могут ввести 10-значный номер файла клиента, который автоматически заменит в стенограмме, предоставленной через TDS. Этот процесс позволяет массовым пользователям сопоставлять расшифровку стенограммы с налогоплательщиком.

Информация о работодателе для составления индивидуальной налоговой декларации и подачи в электронном виде

Если вы являетесь индивидуальным налогоплательщиком, желающим подать налоговую декларацию за текущий или предыдущий год, или налоговым специалистом, готовящим налоговую декларацию за текущий или предыдущий год для клиента, помните, что все финансовые записи на всех типах стенограмм полностью видны.Если вы ищете недостающую информацию по форме W-2 или форме 1099, существует процесс получения этих документов текущего года.

Если для подготовки налоговой декларации и ее подачи в электронном виде необходима распечатка о заработной плате и доходе без маскировки, налоговый специалист может связаться с линией приоритетного обслуживания практикующего специалиста. В немаскированной стенограмме заработной платы и доходов будут полностью отображаться имена, адреса и идентификационные номера работодателей (EIN), необходимые для подготовки налогового программного обеспечения и для электронной подачи документов.Если налоговый специалист имеет надлежащее разрешение налогоплательщика, но его нет в файле, он может отправить разрешение по факсу ассистенту IRS, и незаметная стенограмма заработной платы и дохода будет отправлена ​​в Репозиторий защищенных объектов практикующего специалиста (SOR), доступный через электронные услуги. Налоговые специалисты должны иметь учетную запись электронных услуг и пройти аутентификацию Secure Access, чтобы использовать опцию SOR.

ОБРАТИТЕ ВНИМАНИЕ: Запрошенная стенограмма останется в SOR в течение ограниченного времени. Стенограмма автоматически удаляется из SOR через три дня после просмотра или через 30 дней, если она не просматривается.Распечатайте или сохраните стенограмму, если хотите сохранить копию.

Незащищенная стенограмма заработной платы и доходов также доступна тем налоговым специалистам, у которых есть учетные записи электронных услуг, утвержденная авторизация и доступ к Службе доставки стенограммы. Напоминание: Практики Циркуляра 230, то есть поверенные, сертифицированные общественные бухгалтеры и зарегистрированные агенты, могут создать учетную запись электронных услуг и получить доступ к TDS. Незарегистрированные практикующие должны либо быть ответственными сторонами, либо делегировать пользователей в приложении E-File.

В качестве альтернативы налогоплательщики или другие третьи стороны, которым требуется немаскированная стенограмма для подготовки или подачи налоговой декларации, могут связаться с IRS, предоставить надлежащую аутентификацию для подтверждения своей личности, и немаскированная стенограмма будет отправлена ​​по почте на зарегистрированный адрес налогоплательщика.

Часто задаваемые вопросы

Любой, кому это необходимо знать, сможет идентифицировать человека, связанного с расшифровкой стенограммы. SSN в расшифровке стенограммы будет содержать последние четыре цифры, индивидуальное имя — первые четыре буквы.

Новая стенограмма была доведена до сведения всех наших заинтересованных сторон, включая банковскую отрасль, которые требуют подтверждения дохода для целей, не связанных с налогами. Ваш банк должен принять новую расшифровку, чтобы подтвердить ваш доход.

Да, с 13 декабря 2020 года IRS применил маскировку к бизнес-стенограммам.

Студенты, использующие инструмент извлечения данных IRS через процесс Бесплатного заявления на получение федеральной помощи студентам (FAFSA), не затронуты.Вы должны следовать обычным инструкциям для помощи студентам.

Налоговые практики, которым нужна незаявленная выписка о заработной плате и доходах, могут позвонить на линию приоритетного обслуживания практикующих. Практикующие с активными учетными записями электронных услуг могут отправить авторизацию по факсу ассистенту IRS и могут потребовать, чтобы распечатанная выписка о заработной плате и доходе была отправлена ​​в почтовый ящик хранилища защищенных объектов. Налоговые специалисты с электронными учетными записями и утвержденными полномочиями также могут получить доступ к незаметным стенограммам заработной платы и доходов из Системы доставки стенограмм.Специалисты по налогам, у которых нет учетной записи E-Services, могут потребовать, чтобы на зарегистрированный адрес клиента была отправлена ​​распечатанная выписка о заработной плате и доходах.

Поскольку SSN частично замаскирован, номер файла клиента был создан, чтобы помочь многим пользователям или кредиторам связать расшифровку стенограммы с налогоплательщиком. Колледжи и университеты, а также кредиторы должны создать систему для присвоения студентам / клиентам 10-значных номеров файлов клиентов. Это могут быть любые 10-значные цифры, кроме SSN налогоплательщика.Номер файла клиента можно ввести в строке 5b формы 4506-T, и он автоматически заносится в расшифровку стенограммы при отправке налогоплательщику по почте. Кредиторы ипотечной отрасли, использующие налоговые отчеты для проверки дохода, также могут заключить договор с участниками или стать участниками Экспресс-службы проверки доходов.

MySQL :: Справочное руководство MySQL 8.0 :: 3.3.4.8 Подсчет строк

Базы данных часто используются для ответа на вопрос: «Каким образом
часто ли в таблице встречаются данные определенного типа? »
Например, вы можете узнать, сколько у вас домашних животных, или
сколько домашних животных есть у каждого владельца, или вы, возможно, захотите выполнить
различные виды переписных операций с вашими животными.

Подсчет общего количества животных у вас такой же
вопрос как «Сколько строк в
домашнее животное стол? » потому что есть один
запись на питомца. СЧЕТОВ (*) СЧЕТОВ
количество рядов, поэтому запрос для подсчета ваших животных выглядит
так:

  mysql> ВЫБРАТЬ СЧЕТЧИК (*) ИЗ питомца;
+ ---------- +
| СЧЁТ (*) |
+ ---------- +
| 9 |
+ ---------- +  

Ранее вы извлекали имена людей, у которых были домашние животные.Вы можете использовать COUNT () , если хотите
чтобы узнать, сколько домашних животных есть у каждого хозяина:

  mysql> SELECT owner, COUNT (*) FROM pet GROUP BY owner;
+ -------- + ---------- +
| владелец | СЧЁТ (*) |
+ -------- + ---------- +
| Бенни | 2 |
| Дайан | 2 |
| Гвен | 3 |
| Гарольд | 2 |
+ -------- + ---------- +  

Предыдущий запрос использует GROUP BY для группировки
все записи на каждого собственника .Использование
COUNT () вместе с
GROUP BY полезен для характеристики вашего
данные по различным группам. Следующие примеры показывают
различные способы проведения переписи животных.

Количество животных на вид:

  mysql> ВЫБРАТЬ виды, СЧЁТ (*) ИЗ ГРУППЫ домашних животных ПО видам;
+ --------- + ---------- +
| виды | СЧЁТ (*) |
+ --------- + ---------- +
| птица | 2 |
| кошка | 2 |
| собака | 3 |
| хомяк | 1 |
| змея | 1 |
+ --------- + ---------- +  

Количество животных по полу:

  mysql> ВЫБЕРИТЕ пол, СЧЕТЧИК (*) ИЗ ГРУППЫ домашних животных ПО полу;
+ ------ + ---------- +
| секс | СЧЁТ (*) |
+ ------ + ---------- +
| NULL | 1 |
| f | 4 |
| м | 4 |
+ ------ + ---------- +  

(В этом выводе NULL указывает, что
пол неизвестен.)

Количество животных в зависимости от вида и пола:

  mysql> ВЫБЕРИТЕ вид, пол, СЧЁТ (*) ИЗ ГРУППЫ домашних животных ПО видам, полу;
+ --------- + ------ + ---------- +
| виды | секс | СЧЁТ (*) |
+ --------- + ------ + ---------- +
| птица | NULL | 1 |
| птица | f | 1 |
| кошка | f | 1 |
| кошка | м | 1 |
| собака | f | 1 |
| собака | м | 2 |
| хомяк | f | 1 |
| змея | м | 1 |
+ --------- + ------ + ---------- +  

Вам не нужно извлекать всю таблицу, когда вы используете
СЧЕТЧИК () .Например,
предыдущий запрос, выполненный только с собаками и кошками, выглядит
так:

  mysql> ВЫБРАТЬ вид, пол, COUNT (*) FROM pet
       ГДЕ разновидности = 'собака' ИЛИ ​​разновидности = 'кошка'
       ГРУППА ПО ВИДУ, ПОЛУ;
+ --------- + ------ + ---------- +
| виды | секс | СЧЁТ (*) |
+ --------- + ------ + ---------- +
| кошка | f | 1 |
| кошка | м | 1 |
| собака | f | 1 |
| собака | м | 2 |
+ --------- + ------ + ---------- +  

Или, если вам нужно количество животных каждого пола только для
животные, пол которых известен:

  mysql> ВЫБРАТЬ вид, пол, COUNT (*) FROM pet
       ГДЕ секс НЕ ПУСТО
       ГРУППА ПО ВИДУ, ПОЛУ;
+ --------- + ------ + ---------- +
| виды | секс | СЧЁТ (*) |
+ --------- + ------ + ---------- +
| птица | f | 1 |
| кошка | f | 1 |
| кошка | м | 1 |
| собака | f | 1 |
| собака | м | 2 |
| хомяк | f | 1 |
| змея | м | 1 |
+ --------- + ------ + ---------- +  

Если вы называете столбцы для выбора в дополнение к
COUNT () значение , группа
BY
должен присутствовать пункт, который называет те же
столбцы.В противном случае произойдет следующее:

  • Если
    ONLY_FULL_GROUP_BY SQL
    включен режим, возникает ошибка:

      mysql> УСТАНОВИТЬ sql_mode = 'ONLY_FULL_GROUP_BY';
    Запрос в порядке, затронуто 0 строк (0,00 сек)
    
    mysql> ВЫБРАТЬ владельца, COUNT (*) FROM pet;
    ОШИБКА 1140 (42000): в агрегированном запросе без GROUP BY, выражение
    # 1 списка SELECT содержит неагрегированный столбец 'menagerie.pet.owner';
    это несовместимо с sql_mode = only_full_group_by  
  • Если ONLY_FULL_GROUP_BY равен
    не включен, запрос обрабатывается, обрабатывая все строки
    как единая группа, но значение, выбранное для каждого названного
    столбец недетерминированный.Сервер можно выбрать
    значение из любой строки:

      mysql> УСТАНОВИТЬ sql_mode = '';
    Запрос в порядке, затронуто 0 строк (0,00 сек)
    
    mysql> ВЫБРАТЬ владельца, COUNT (*) FROM pet;
    + -------- + ---------- +
    | владелец | СЧЁТ (*) |
    + -------- + ---------- +
    | Гарольд | 8 |
    + -------- + ---------- +
    1 ряд в комплекте (0,00 сек)  

См. Также Раздел 12.20.3, «Обработка MySQL GROUP BY». Видеть
Раздел 12.20.1, «Сводные описания функций» для получения информации о
COUNT ( expr )
поведение и связанные с ним оптимизации.

Базовая математика в JavaScript — числа и операторы — Изучение веб-разработки

На этом этапе курса мы обсуждаем математику в JavaScript — как мы можем использовать операторы и другие функции для успешного манипулирования числами для выполнения наших ставок.

Предварительные требования: Базовая компьютерная грамотность, базовое понимание HTML и CSS, понимание того, что такое JavaScript.
Цель: Для ознакомления с основами математики в JavaScript.

Ладно, может и нет. Некоторые из нас любят математику, некоторые из нас ненавидят математику с тех пор, как нам пришлось изучать таблицы умножения и деление в столбик в школе, а некоторые из нас сидят где-то посередине. Но никто из нас не может отрицать, что математика — это фундаментальная часть жизни, без которой мы далеко не продвинемся. Это особенно верно, когда мы учимся программировать JavaScript (или любой другой язык в этом отношении) — так много из того, что мы делаем, зависит от обработки числовых данных, вычисления новых значений и т. Д., Что вы не удивитесь, узнав этот JavaScript имеет полнофункциональный набор доступных математических функций.

В этой статье обсуждаются только основные части, которые вам сейчас необходимо знать.

Типы чисел

В программировании даже простая десятичная система счисления, которую мы все так хорошо знаем, сложнее, чем вы думаете. Мы используем разные термины для описания различных типов десятичных чисел, например:

  • Целые числа — целые числа, например 10, 400 или -5.
  • Числа с плавающей запятой (с плавающей запятой) имеют десятичные и десятичные разряды, например 12.5 и 56.7786543.
  • Двойные числа — это особый тип чисел с плавающей запятой, которые имеют большую точность, чем стандартные числа с плавающей запятой (что означает, что они точны до большего числа десятичных знаков).

У нас даже есть разные системы счисления! Десятичное число — это основание 10 (это означает, что в каждом столбце используется 0–9), но у нас также есть такие вещи, как:

  • Двоичный — язык самого низкого уровня компьютеров; 0 и 1.
  • Octal — База 8, использует 0–7 в каждом столбце.
  • Шестнадцатеричный — База 16, использует 0–9, а затем a – f в каждом столбце. Возможно, вы уже встречались с этими числами при настройке цветов в CSS.

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

Вторая хорошая новость заключается в том, что в отличие от некоторых других языков программирования, JavaScript имеет только один тип данных для чисел, как целых, так и десятичных знаков — как вы уже догадались, Number .Это означает, что с какими бы типами чисел вы ни работали в JavaScript, вы обрабатываете их точно так же.

Примечание : На самом деле в JavaScript есть второй числовой тип, BigInt, который используется для очень и очень больших целых чисел. Но для целей этого курса мы просто будем беспокоиться о значениях Number .

Для меня все числа

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

  1. Прежде всего, давайте объявим пару переменных и инициализируем их целым числом и числом с плавающей запятой, соответственно, затем снова введем имена переменных, чтобы убедиться, что все в порядке:
      пусть myInt = 5;
    пусть myFloat = 6,667;
    myInt;
    myFloat;  
  2. Числовые значения вводятся без кавычек — попробуйте объявить и инициализировать еще пару переменных, содержащих числа, прежде чем двигаться дальше.
  3. Теперь давайте проверим, что обе наши исходные переменные имеют один и тот же тип данных.В JavaScript есть оператор type of , который делает это. Введите следующие две строки, как показано:
      тип myInt;
    typeof myFloat;  

    Вы должны получить «число» , возвращенное в обоих случаях — это значительно упрощает нам задачу, чем если бы разные числа имели разные типы данных, и нам приходилось обращаться с ними по-разному. Уф!

Полезные числовые методы

Объект Number , экземпляр которого представляет все стандартные числа, которые вы будете использовать в своем JavaScript, имеет ряд полезных методов, доступных для вас, чтобы управлять числами.Мы не рассматриваем их подробно в этой статье, потому что мы хотели сохранить ее как простое введение, а пока охватить только самые основные основы; однако, прочитав этот модуль несколько раз, стоит перейти на страницы со ссылками на объекты и узнать больше о том, что доступно.

Например, чтобы округлить ваше число до фиксированного числа десятичных знаков, используйте метод toFixed () . Введите в консоль браузера следующие строки:

  пусть лотыOfDecimal = 1.766584958675746364;
lotOfDecimal;
let twoDecimalPlaces = lotOfDecimal.toFixed (2);
twoDecimalPlaces;  

Преобразование в числовые типы данных

Иногда может получиться число, которое хранится как строковый тип, что затрудняет выполнение вычислений с ним. Чаще всего это происходит, когда данные вводятся в форму ввода, а тип ввода — текст. Есть способ решить эту проблему — передать строковое значение в конструктор Number () , чтобы вернуть числовую версию того же значения.

Например, попробуйте ввести в консоль следующие строки:

  пусть myNumber = '74';
myNumber + 3;  

Вы получите результат 743, а не 77, потому что myNumber фактически определен как строка. Вы можете проверить это, набрав следующее:

  typeof myNumber;  

Исправить расчет можно так:

  Число (myNumber) + 3;  

Арифметические операторы — это основные операторы, которые мы используем для суммирования в JavaScript:

Оператор Имя Назначение Пример
+ Дополнение Складывает два числа. 6 + 9
- Вычитание Вычитает правое число из левого. 20-15
* Умножение Умножает два числа. 3 * 7
/ Дивизия Делит левое число на правое. 10/5
% Остаток (иногда называемый по модулю)

Возвращает остаток, оставшийся после того, как вы разделили левое число на количество целых частей, равное правому числу.

8% 3 (возвращает 2, так как тройка дважды переходит в 8, оставляя 2 слева).

** Показатель степени Возводит число с основанием в степень степени , то есть число с основанием , умноженное на себя, степень степени .Впервые он был представлен в EcmaScript 2016. 5 ** 2 (возвращает 25 , что совпадает с 5 * 5 ).

Примечание : Иногда в арифметических операциях можно встретить числа, называемые операндами.

Примечание : Иногда можно увидеть экспоненты, выраженные с помощью более старого метода Math.pow () , который работает очень похожим образом. Например, в Math.pow (7, 3) , 7 — основание, а 3 — показатель степени, поэтому результат выражения будет 343 . Math.pow (7, 3) эквивалентно 7 ** 3 .

Нам, вероятно, не нужно учить вас выполнять основы математики, но мы хотели бы проверить ваше понимание синтаксиса. Попробуйте ввести приведенные ниже примеры в консоль JavaScript инструментов разработчика, чтобы ознакомиться с синтаксисом.

  1. Сначала попробуйте ввести несколько собственных простых примеров, например
      10 + 7
    9 * 8
    60% 3  
  2. Вы также можете попробовать объявить и инициализировать некоторые числа внутри переменных и попытаться использовать их в суммах — переменные будут вести себя точно так же, как значения, которые они содержат для целей суммы.Например:
      пусть num1 = 10;
    пусть num2 = 50;
    9 * число1;
    num1 ** 3;
    num2 / num1;  
  3. Наконец, в этом разделе попробуйте ввести несколько более сложных выражений, например:
      5 + 10 * 3;
    число2% 9 * число1;
    число2 + число1 / 8 + 2;  

Некоторые из этих последних вычислений могут дать не совсем тот результат, которого вы ожидали; раздел ниже может дать ответ, почему.

Приоритет оператора

Давайте посмотрим на последний пример сверху, предполагая, что num2 содержит значение 50, а num1 содержит значение 10 (как первоначально указано выше):

  число2 + число1 / 8 + 2;  

Как человек, вы можете прочитать это как «50 плюс 10 равно 60» , затем «8 плюс 2 равно 10» и, наконец, «60, разделенное на 10, равно 6» .

Но браузер делает «10, разделенное на 8, равно 1,25» , затем «50 плюс 1,25 плюс 2 равняется 53,25» .

Это из-за приоритета операторов . — некоторые операторы применяются раньше других при вычислении результата вычисления (в программировании называется выражением ). Приоритет операторов в JavaScript такой же, как и на уроках математики в школе — сначала всегда выполняются умножение и деление, затем сложение и вычитание (вычисление всегда выполняется слева направо).

Если вы хотите переопределить приоритет операторов, вы можете заключить в круглые скобки те части, которые должны быть обработаны в первую очередь. Итак, чтобы получить результат 6, мы могли бы сделать это:

  (число2 + число1) / (8 + 2);  

Попробуйте и убедитесь.

Иногда вам нужно многократно прибавлять или вычитать единицу к значению числовой переменной или из него. Это удобно сделать с помощью операторов инкремента ( ++ ) и декремента (). Мы использовали ++ в нашей игре «Угадай число» еще в нашей первой заставке по JavaScript, когда мы добавили 1 к нашей переменной guessCount , чтобы отслеживать, сколько предположений пользователь оставил после каждого поворота.

  guessCount ++;  

Примечание : Эти операторы чаще всего используются в циклах, о которых вы узнаете позже в курсе. Например, вы хотите просмотреть список цен и добавить к каждой из них налог с продаж. Вы могли бы использовать цикл, чтобы просмотреть каждое значение по очереди и выполнить необходимые вычисления для добавления налога с продаж в каждом случае. Инкрементор используется для перехода к следующему значению, когда это необходимо. На самом деле мы предоставили простой пример, показывающий, как это делается — проверьте его вживую и посмотрите исходный код, чтобы увидеть, можете ли вы определить инкременторы! Мы подробно рассмотрим петли позже в этом курсе.

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

  3 ++;  

Итак, вы можете увеличивать только существующую переменную. Попробуйте это:

  пусть num1 = 4;
num1 ++;  

Ладно, странность номер 2! Когда вы это сделаете, вы увидите, что возвращается значение 4 — это потому, что браузер возвращает текущее значение, , затем увеличивает переменную.Вы можете увидеть, что он был увеличен, если вы снова вернете значение переменной:

  номер1;  

То же самое и с - : попробуйте следующий

  пусть num2 = 6;
num2--;
num2;  

Примечание : вы можете заставить браузер делать это наоборот — увеличивать / уменьшать переменную , затем возвращать значение — поместив оператор в начало переменной, а не в конец. Попробуйте еще раз приведенные выше примеры, но на этот раз используйте ++ num1 и --num2 .

Операторы присваивания — это операторы, которые присваивают значение переменной. Мы уже использовали самый простой, = , множество раз — он присваивает переменной слева значение, указанное справа:

  пусть x = 3;
пусть y = 4;
х = у;  

Но есть и более сложные типы, которые предоставляют полезные ярлыки, чтобы сделать ваш код более аккуратным и эффективным. Наиболее распространенные перечислены ниже:

Оператор Имя Назначение Пример Ярлык для
+ = Дополнительное задание Добавляет значение справа к значению переменной слева, затем возвращает новое значение переменной х + = 4; х = х + 4;
- = Присваивание вычитания Вычитает значение справа из значения переменной слева и возвращает новое значение переменной х - = 3; х = х - 3;
* = Назначение умножения Умножает значение переменной слева на значение справа и возвращает новое значение переменной х * = 3; х = х * 3;
/ = Назначение дивизии Делит значение переменной слева на значение справа и возвращает новое значение переменной х / = 5; х = х / 5;

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

Обратите внимание, что вы вполне можете использовать другие переменные в правой части каждого выражения, например:

  пусть x = 3;
пусть y = 4;
х * = у;  

В этом упражнении вы будете управлять некоторыми числами и операторами, чтобы изменить размер поля. Коробка рисуется с помощью API браузера, называемого Canvas API. Не нужно беспокоиться о том, как это работает — просто сконцентрируйтесь на математике.Ширина и высота прямоугольника (в пикселях) определяются переменными x и y , которым изначально присвоено значение 50.

Открыть в новом окне

В редактируемом поле кода выше есть две строки, отмеченные комментарием, который мы хотели бы, чтобы вы обновили, чтобы поле увеличивалось / уменьшалось до определенных размеров, используя определенные операторы и / или значения в каждом случае. Попробуем следующее:

  • Измените строку, в которой вычисляется x, чтобы поле оставалось шириной 50 пикселей, но 50 вычислялось с использованием чисел 43 и 7 и арифметического оператора.
  • Измените строку, которая вычисляет y, так, чтобы прямоугольник был высотой 75 пикселей, но 75 вычисляется с использованием чисел 25 и 3 и арифметического оператора.
  • Измените строку, в которой вычисляется x, чтобы поле было шириной 250 пикселей, но 250 вычисляется с использованием двух чисел и оператора остатка (по модулю).
  • Измените строку, вычисляющую y, так, чтобы прямоугольник был высотой 150 пикселей, но 150 вычисляется с использованием трех чисел и операторов вычитания и деления.
  • Измените строку, которая вычисляет x, так, чтобы поле было шириной 200 пикселей, но 200 вычисляется с использованием числа 4 и оператора присваивания.
  • Измените строку, в которой вычисляется y, так, чтобы поле было высотой 200 пикселей, но 200 вычисляется с использованием чисел 50 и 3, оператора умножения и оператора присваивания сложения.

Не волнуйтесь, если вы полностью испортили код. Вы всегда можете нажать кнопку «Сброс», чтобы все снова заработало. После того как вы правильно ответили на все вышеперечисленные вопросы, не стесняйтесь еще немного поиграть с кодом или создать свои собственные задачи.

Иногда нам нужно запустить тесты «правда / ложь», а затем действовать соответственно в зависимости от результата этого теста — для этого мы используем операторов сравнения .

Оператор Имя Назначение Пример
=== Строгое равенство Проверяет, идентичны ли значения left и right друг другу 5 === 2 + 4
! == Строгое неравенство Проверяет, совпадают ли значения левого и правого между собой 5! == 2 + 3
< Менее Проверяет, меньше ли левое значение правого. 10 <6
> Больше Проверяет, больше ли левое значение правого. 10> 20
<= Меньше или равно Проверяет, меньше ли левое значение правому или равно ему. 3 <= 2
> = Больше или равно Проверяет, больше ли левое значение правому или равно ему. 5> = 4

Примечание : Вы можете увидеть, как некоторые люди используют == и ! = в своих тестах на равенство и неравенство. Это допустимые операторы в JavaScript, но они отличаются от === /! == . В предыдущих версиях проверяется, совпадают ли значения, но не совпадают ли типы данных значений. Последние, строгие версии проверяют равенство как значений, так и их типов данных.Строгие версии, как правило, приводят к меньшему количеству ошибок, поэтому мы рекомендуем вам их использовать.

Если вы попытаетесь ввести некоторые из этих значений в консоли, вы увидите, что все они возвращают истинных / ложных значений - те логические значения, которые мы упоминали в прошлой статье. Они очень полезны, поскольку позволяют нам принимать решения в нашем коде, и используются каждый раз, когда мы хотим сделать какой-то выбор. Например, логические значения могут использоваться для:

  • Отображение правильной текстовой метки на кнопке в зависимости от того, включена функция или выключена
  • Отображать сообщение о завершении игры, если игра окончена, или сообщение о победе, если игра была выиграна
  • Отображать правильное сезонное приветствие в зависимости от сезона праздников
  • Увеличение или уменьшение масштаба карты в зависимости от выбранного уровня масштабирования

Мы рассмотрим, как кодировать такую ​​логику, когда рассмотрим условные операторы в будущей статье.А пока давайте посмотрим на быстрый пример:

  

Машина остановлена.

  const btn = document.querySelector ('кнопка');
const txt = document.querySelector ('p');

btn.addEventListener ('щелчок', updateBtn);

function updateBtn () {
  if (btn.textContent === 'Запустить машину') {
    btn.textContent = 'Остановить машину';
    txt.textContent = 'Машина запустилась!';
  } еще {
    btn.textContent = 'Запустить машину';
    текст.textContent = 'Машина остановлена.';
  }
}  

Открыть в новом окне

Вы можете увидеть, что оператор равенства используется внутри функции updateBtn () . В этом случае мы не проверяем, имеют ли два математических выражения одно и то же значение - мы проверяем, содержит ли текстовое содержимое кнопки определенную строку, - но действует тот же принцип. Если при нажатии кнопки в данный момент отображается «Запустить машину», мы меняем ее метку на «Остановить машину» и обновляем метку соответствующим образом.Если при нажатии кнопки в данный момент отображается сообщение «Остановить машину», мы снова меняем местами дисплей.

Примечание : такой элемент управления, который переключается между двумя состояниями, обычно называется переключателем . Он переключается между одним состоянием и другим - свет включен, свет выключен и т. Д.

Вы дошли до конца этой статьи, но можете ли вы вспомнить самую важную информацию? Вы можете найти дополнительные тесты, чтобы убедиться, что вы сохранили эту информацию, прежде чем двигаться дальше - см. Проверка своих навыков: математика.

В этой статье мы рассмотрели основную информацию, которую вам нужно знать о числах в JavaScript на данный момент. Вы будете видеть числа, используемые снова и снова, на протяжении всего изучения JavaScript, так что сейчас неплохо избавиться от этого. Если вы один из тех людей, которым не нравится математика, вас может утешить тот факт, что эта глава была довольно короткой.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

2021 © Все права защищены. Карта сайта