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

Не так давно у со мной произошел довольно-таки интересный инцидент, в котором был замешан один из преподавателей одного колледжа информатики.
Разговор о программировании под Linux медленно перешел к тому, что этот человек стал утверждать, что сложность системного программирования на самом деле сильно преувеличена. Что язык Си прост как спичка, собственно как и ядро Linux (с его слов).
У меня был с собой ноутбук с Linux, на котором присутствовал джентльменский набор утилит для разработки на языке Си (gcc, vim, make, valgrind, gdb). Я уже не помню, какую цель мы тогда перед собой поставили, но через пару минут мой оппонент оказался за этим ноутбуком, полностью готовый решать задачу.
И буквально на первых же строках он допустил серьезную ошибку при аллоцировании памяти под… строку.
char *str = (char *)malloc(sizeof(char) * strlen(buffer));
buffer — стековая переменная, в которую заносились данные с клавиатуры.
Я думаю, определенно найдутся люди, которые спросят: «Разве что-то тут может быть не так?».
Поверьте, может.
А что именно — читайте по катом.
Немного теории — своеобразный ЛикБез.
Если знаете — листайте до следующего хэдера.
Строка в C — это массив символов, который по-хорошему всегда должен заканчиваться ‘\0’ — символом конца строки. Строки на стеке (статичные) объявляются вот так:
char str[n] = < 0 >;
n — размер массива символов, то же, что и длина строки.
Присваивание < 0 >— «зануление» строки (опционально, объявлять можно и без него). Результат такой же, как у выполнения функций memset(str, 0, sizeof(str)) и bzero(str, sizeof(str)). Используется, чтобы в неинициализированных переменных не валялся мусор.
Так же на стеке можно сразу проинициализировать строку:
char buf[BUFSIZE] = "default buffer text\n";
Помимо этого строку можно объявить указателем и выделить под нее память на куче (heap):
char *str = malloc(size);
size — количество байт, которые мы выделяем под строку. Такие строки называются динамическими (вследствие того, что нужный размер вычисляется динамически + выделенный размер памяти можно в любой момент увеличить с помощью функции realloc() ).
В случае со стековой переменной, для определения размера массива я использовал обозначение n, в случае с переменной на куче — я использовал обозначение size. И это прекрасно отражает истинную суть отличия объявления на стеке от объявление с аллоцированием памяти на куче, ведь n как правило используется тогда, когда говорят о количестве элементов. А size — это уже совсем другая история…
Думаю. пока хватит. Идем дальше.
Нам поможет valgrind
В своей предыдущей статье я также упоминал о нем. Valgrind (раз — вики-статья, два — небольшой how-to) — очень полезная программа, которая помогает программисту отслеживать утечки памяти и ошибки контекста — как раз те вещи, которые чаще всего всплывают при работе со строками.
Давайте рассмотрим небольшой листинг, в котором реализовано что-то похожее на упомянутую мной программу, и прогоним ее через valgrind:
#include #include #include #define HELLO_STRING "Hello, Habr!\n" void main() < char *str = malloc(sizeof(char) * strlen(HELLO_STRING)); strcpy(str, HELLO_STRING); printf("->\t%s", str); free(str); >
И, собственно, результат работы программы:
[indever@localhost public]$ gcc main.c [indever@localhost public]$ ./a.out -> Hello, Habr!
Пока ничего необычного. А теперь давайте запустим эту программу с valgrind!
[indever@localhost public]$ valgrind --tool=memcheck ./a.out ==3892== Memcheck, a memory error detector ==3892== Copyright (C) 2002-2015, and GNU GPL'd, by Julian Seward et al. ==3892== Using Valgrind-3.12.0 and LibVEX; rerun with -h for copyright info ==3892== Command: ./a.out ==3892== ==3892== Invalid write of size 2 ==3892== at 0x4005B4: main (in /home/indever/prg/C/public/a.out) ==3892== Address 0x520004c is 12 bytes inside a block of size 13 alloc'd ==3892== at 0x4C2DB9D: malloc (vg_replace_malloc.c:299) ==3892== by 0x400597: main (in /home/indever/prg/C/public/a.out) ==3892== ==3892== Invalid read of size 1 ==3892== at 0x4C30BC4: strlen (vg_replace_strmem.c:454) ==3892== by 0x4E89AD0: vfprintf (in /usr/lib64/libc-2.24.so) ==3892== by 0x4E90718: printf (in /usr/lib64/libc-2.24.so) ==3892== by 0x4005CF: main (in /home/indever/prg/C/public/a.out) ==3892== Address 0x520004d is 0 bytes after a block of size 13 alloc'd ==3892== at 0x4C2DB9D: malloc (vg_replace_malloc.c:299) ==3892== by 0x400597: main (in /home/indever/prg/C/public/a.out) ==3892== -> Hello, Habr! ==3892== ==3892== HEAP SUMMARY: ==3892== in use at exit: 0 bytes in 0 blocks ==3892== total heap usage: 2 allocs, 2 frees, 1,037 bytes allocated ==3892== ==3892== All heap blocks were freed -- no leaks are possible ==3892== ==3892== For counts of detected and suppressed errors, rerun with: -v ==3892== ERROR SUMMARY: 3 errors from 2 contexts (suppressed: 0 from 0)
==3892== All heap blocks were freed — no leaks are possible — утечек нет, и это радует. Но стоит опустить глаза чуть пониже (хотя, хочу заметить, это лишь итог, основная информация немного в другом месте):
==3892== ERROR SUMMARY: 3 errors from 2 contexts (suppressed: 0 from 0)
3 ошибки. В 2х контекстах. В такой простой программе. Как!?
Да очень просто. Весь «прикол» в том, что функция strlen не учитывает символ конца строки — ‘\0’. Даже если его явно указать во входящей строке (#define HELLO_STRING «Hello, Habr!\n\0»), он будет проигнорирован.
Чуть выше результата исполнения программы, строки -> Hello, Habr! есть подробный отчет, что и где не понравилось нашему драгоценному valgrind. Предлагаю самостоятельно посмотреть эти строчки и сделать выводы.
Собственно, правильная версия программы будет выглядеть так:
#include #include #include #define HELLO_STRING "Hello, Habr!\n" void main() < char *str = malloc(sizeof(char) * (strlen(HELLO_STRING) + 1)); strcpy(str, HELLO_STRING); printf("->\t%s", str); free(str); >
Пропускаем через valgrind:
[indever@localhost public]$ valgrind --tool=memcheck ./a.out -> Hello, Habr! ==3435== ==3435== HEAP SUMMARY: ==3435== in use at exit: 0 bytes in 0 blocks ==3435== total heap usage: 2 allocs, 2 frees, 1,038 bytes allocated ==3435== ==3435== All heap blocks were freed -- no leaks are possible ==3435== ==3435== For counts of detected and suppressed errors, rerun with: -v ==3435== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
Отлично. Ошибок нет, +1 байт выделяемой памяти помог решить проблему.
Что интересно, в большинстве случаев и первая и вторая программа будут работать одинаково, но если память, выделенная под строку, в которую не влез символ окончания, не была занулена, то функция printf(), при выводе такой строки, выведет и весь мусор после этой строки — будет выведено все, пока на пути printf() не встанет символ окончания строки.
Однако, знаете, (strlen(str) + 1) — такое себе решение. Перед нами встают 2 проблемы:
- А если нам надо выделить память под формируемую с помощью, например, s(n)printf(..) строку? Аргументы мы не поддерживаем.
- Внешний вид. Строка с объявлением переменной выглядит просто ужасно. Некоторые ребята к malloc еще и (char *) умудряются прикручивать, будто под плюсами пишут. В программе где регулярно требуется обрабатывать строки есть смысл найти более изящное решение.
snprintf()
int snprintf(char *str, size_t size, const char *format, . ); — функция — расширение sprintf, которая форматирует строку и записывает ее по указателю, переданному в качестве первого аргумента. От sprintf() она отличается тем, что в str не будет записано байт больше, чем указано в size.
Функция имеет одну интересную особенность — она в любом случае возвращает размер формируемой строки (без учета символа конца строки). Если строка пустая, то возвращается 0.
Одна из описанных мною проблем использования strlen связана с функциями sprintf() и snprintf(). Предположим, что нам надо что-то записать в строку str. Конечная строка содержит значения других переменных. Наша запись должна быть примерно такой:
char * str = /* тут аллоцируем память */; sprintf(str, "Hello, %s\n", "Habr!");
Встает вопрос: как определить, сколько памяти надо выделить под строку str?
char * str = malloc(sizeof(char) * (strlen(str, "Hello, %s\n", "Habr!") + 1));
— не прокатит. Прототип функции strlen() выглядит так:
#include size_t strlen(const char *s);
const char *s не подразумевает, что передаваемая в s строка может быть строкой формата с переменным количеством аргументов.
Тут нам поможет то полезное свойство функции snprintf(), о котором я говорил выше. Давайте посмотрим на код следующей программы:
#include #include #include void main() < /* Т.к. snprintf() не учитывает символ конца строки, прибавляем его размер к результату */ size_t needed_mem = snprintf(NULL, 0, "Hello, %s!\n", "Habr") + sizeof('\0'); char *str = malloc(needed_mem); snprintf(str, needed_mem, "Hello, %s!\n", "Habr"); printf("->\t%s", str); free(str); >
Запускаем программу в valgrind:
[indever@localhost public]$ valgrind --tool=memcheck ./a.out -> Hello, Habr! ==4132== ==4132== HEAP SUMMARY: ==4132== in use at exit: 0 bytes in 0 blocks ==4132== total heap usage: 2 allocs, 2 frees, 1,041 bytes allocated ==4132== ==4132== All heap blocks were freed -- no leaks are possible ==4132== ==4132== For counts of detected and suppressed errors, rerun with: -v ==4132== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0) [indever@localhost public]$
Отлично. Поддержка аргументов у нас есть. Благодаря тому, что мы в качестве второго аргумента в функцию snprintf() передаем ноль, запись по нулевому указателю никогда не приведет к Seagfault. Однако, несмотря на это функция все равно вернет необходимый под строку размер.
Но с другой стороны, нам пришлось завести дополнительную переменную, да и конструкция
size_t needed_mem = snprintf(NULL, 0, "Hello, %s!\n", "Habr") + sizeof('\0');
выглядит еще хуже, чем в случае с strlen().
Вообще, + sizeof(‘\0’) можно убрать, если в конце строки формата явно указать ‘\0’ (size_t needed_mem = snprintf(NULL, 0, «Hello, %s!\n\0», «Habr»);), но это возможно отнюдь не всегда (в зависимости от механизма обработки строк мы можем выделить лишний байт).
Надо что-то сделать. Я немного подумал и решил, что сейчас настал час воззвать к мудрости древних. Опишем макрофункцию, которая будет вызывать snprintf() с нулевым указателем в качестве первого аргумента, и нулем, в качестве второго. Да и про конец строки не забудем!
#define strsize(args. ) snprintf(NULL, 0, args) + sizeof('\0')
Да, возможно, для кого-то будет новостью, но макросы в си поддерживают переменное количество аргументов, и троеточие говорит препроцессору о том, что указанному аргументу макрофункции (в нашем случае это args) соответствует несколько реальных аргументов.
Проверим наше решение на практике:
#include #include #include #define strsize(args. ) snprintf(NULL, 0, args) + sizeof('\0') void main() < char *str = malloc(strsize("Hello, %s\n", "Habr!")); sprintf(str, "Hello, %s\n", "Habr!"); printf("->\t%s", str); free(str); >
Запускаем с valgrund:
[indever@localhost public]$ valgrind --tool=memcheck ./a.out -> Hello, Habr! ==6432== ==6432== HEAP SUMMARY: ==6432== in use at exit: 0 bytes in 0 blocks ==6432== total heap usage: 2 allocs, 2 frees, 1,041 bytes allocated ==6432== ==6432== All heap blocks were freed -- no leaks are possible ==6432== ==6432== For counts of detected and suppressed errors, rerun with: -v ==6432== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
Да, ошибок нет. Все корректно. И valgrind доволен, и программист наконец может пойти поспать.
Но, напоследок, скажу еще кое-что. В случае, если нам надо выделить память под какую-либо строку (даже с аргументами) есть уже полностью рабочее готовое решение.
Речь идет о функции asprintf:
#define _GNU_SOURCE /* See feature_test_macros(7) */ #include int asprintf(char **strp, const char *fmt, . );
В качестве первого аргумента она принимает указатель на строку (**strp) и аллоцирует память по разыменованному указателю.
Наша программа, написанная с использованием asprintf() будет выглядеть так:
#include #include #include void main() < char *str; asprintf(&str, "Hello, %s!\n", "Habr"); printf("->\t%s", str); free(str); >
И, собственно, в valgrind:
[indever@localhost public]$ valgrind --tool=memcheck ./a.out -> Hello, Habr! ==6674== ==6674== HEAP SUMMARY: ==6674== in use at exit: 0 bytes in 0 blocks ==6674== total heap usage: 3 allocs, 3 frees, 1,138 bytes allocated ==6674== ==6674== All heap blocks were freed -- no leaks are possible ==6674== ==6674== For counts of detected and suppressed errors, rerun with: -v ==6674== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
Все отлично, но, как видите, памяти всего было выделено больше, да и alloc’ов теперь три, а не два. На слабых встраиваемых системах использование это функции нежелательно.
К тому же, если мы напишем в консоли man asprintf, то увидим:
CONFORMING TO These functions are GNU extensions, not in C or POSIX. They are also available under *BSD. The FreeBSD implementation sets strp to NULL on error.
Отсюда ясно, что данная функция доступна только в исходниках GNU.
Заключение
В заключение я хочу сказать, что работа со строками в C — это очень сложная тема, которая имеет ряд нюансов. Например, для написания «безопасного» кода при динамическом выделении памяти рекомендуется все же использовать функцию calloc() вместо malloc() — calloc забивает выделяемую память нулями. Ну или после выделения памяти использовать функцию memset(). Иначе мусор, который изначально лежал на выделяемом участке памяти, может вызвать вопросы при дебаге, а иногда и при работе со строкой.
Больше половины моих знакомых си-программистов (большинство из них — начинающие), решивших по моей просьбе задачу с выделением памяти под строки, сделали это так, что в конечном итоге это привело к ошибкам контекста. В одном случае — даже к утечке памяти (ну, забыл человек сделать free(str), с кем не бывает). Собственно говоря, это и сподвигло меня на создание сего творения, которое вы только что прочитали.
Я надеюсь, кому-то эта статья будет полезной. К чему я это все городил — никакой язык не бывает прост. Везде есть свои тонкости. И чем больше тонкостей языка вы знаете, тем лучше ваш код.
Я верю, что после прочтения этой статьи ваш код станет чуточку лучше 🙂
Удачи, Хабр!
Памятка/шпаргалка по SQL
Изучение настоящей шпаргалки не сделает вас мастером SQL, но позволит получить общее представление об этом языке программирования и возможностях, которые он предоставляет. Рассматриваемые в шпаргалке возможности являются общими для всех или большинства диалектов SQL.
Для более полного погружения в SQL рекомендую изучить эти руководства по MySQL и PostgreSQL от Метанита. Они хороши тем, что просты в изучении и позволяют быстро начать работу с названными СУБД.
При обнаружении ошибок, опечаток и неточностей, не стесняйтесь писать мне в личку.
Что такое SQL?
SQL — это язык структурированных запросов (Structured Query Language), позволяющий хранить, манипулировать и извлекать данные из реляционных баз данных (далее — РБД, БД).
Почему SQL?
- получать доступ к данным в системах управления РБД
- описывать данные (их структуру)
- определять данные в БД и управлять ими
- взаимодействовать с другими языками через модули SQL, библиотеки и предваритальные компиляторы
- создавать и удалять БД и таблицы
- создавать представления, хранимые процедуры (stored procedures) и функции в БД
- устанавливать разрешения на доступ к таблицам, процедурам и представлениям
Процесс SQL
При выполнении любой SQL-команды в любой RDBMS (Relational Database Management System — система управления РБД, СУБД, например, PostgreSQL, MySQL, MSSQL, SQLite и др.) система определяет наилучший способ выполнения запроса, а движок SQL определяет способ интерпретации задачи.
В данном процессе участвует несколького компонентов:
- диспетчер запросов (Query Dispatcher)
- движок оптимизации (Optimization Engines)
- классический движок запросов (Classic Query Engine)
- движок запросов SQL (SQL Query Engine) и т.д.
Классический движок обрабатывает все не-SQL-запросы, а движок SQL-запросов не обрабатывает логические файлы.
Команды SQL
Стандартными командами для взаимодействия с РБД являются CREATE , SELECT , INSERT , UPDATE , DELETE и DROP . Эти команды могут быть классифицированы следующим образом:
- DDL — язык определения данных (Data Definition Language)
| N | Команда | Описание |
|---|---|---|
| 1 | CREATE | Создает новую таблицу, представление таблицы или другой объект в БД |
| 2 | ALTER | Модифицирует существующий в БД объект, такой как таблица |
| 3 | DROP | Удаляет существующую таблицу, представление таблицы или другой объект в БД |
- DML — язык изменения данных (Data Manipulation Language)
| N | Команда | Описание |
|---|---|---|
| 1 | SELECT | Извлекает записи из одной или нескольких таблиц |
| 2 | INSERT | Создает записи |
| 3 | UPDATE | Модифицирует записи |
| 4 | DELETE | Удаляет записи |
- DCL — язык управления данными (Data Control Language)
| N | Команда | Описание |
|---|---|---|
| 1 | GRANT | Наделяет пользователя правами |
| 1 | REVOKE | Отменяет права пользователя |
Обратите внимание: использование верхнего регистра в названиях команд SQL — это всего лишь соглашение, большинство СУБД нечувствительны к регистру. Тем не менее, форма записи инструкций, когда названия команд пишутся большими буквами, а названия таблиц, колонок и др. — маленькими, позволяет быстро определять назначение производимой с данными операции.
Что такое таблица?
Данные в СУБД хранятся в объектах БД, называемых таблицами (tables). Таблица, как правило, представляет собой коллекцию связанных между собой данных и состоит из определенного количества колонок и строк.
Таблица — это самая распространенная и простая форма хранения данных в РБД. Вот пример таблицы с пользователями (users):
| userId | userName | age | city | status |
|---|---|---|---|---|
| 1 | Igor | 25 | Moscow | active |
| 2 | Vika | 26 | Ekaterinburg | inactive |
| 3 | Elena | 27 | Ekaterinburg | active |
| 4 | Oleg | 28 | Moscow | inactive |
Что такое поле?
Каждая таблица состоит из небольших частей — полей (fields). Полями в таблице users являются userId, userName, age, city и status. Поле — это колонка таблицы, предназначенная для хранения определенной информации о каждой записи в таблице.
Обратите внимание: вместо userId и userName можно было бы использовать id и name , соответственно. Но при работе с несколькими объектами, содержащими свойство id , бывает сложно понять, какому объекту принадлежит идентификатор, особенно, если вы, как и я, часто прибегаете к деструктуризации. Что касается слова name , то оно часто оказывается зарезервизованным, т.е. уже используется в среде, в которой выполняется код, поэтому я стараюсь его не использовать.
Что такое запись или строка?
Запись или строка (record/row) — это любое единичное вхождение (entry), существующее в таблице. В таблице users 5 записей. Проще говоря, запись — это горизонтальное вхождение в таблице.
Что такое колонка?
Колонка (column) — это вертикальное вхождение в таблице, содержащее всю информацию, связанную с определенным полем. В таблице users одной из колонок является city , которая содержит названия городов, в которых проживают пользователи.
Что такое нулевое значение?
Нулевое значение (NULL) — это значение поля, которое является пустым, т.е. нулевое значение — это значение поля, не имеющего значения. Важно понимать, что нулевое значение отличается от значения 0 и от значения поля, содержащего пробелы ( `). Поле с нулевым значением — это такое поля, которое осталось пустым при создании записи. Также, следует учитывать, что в некоторых СУБД пустая строка ( » ) — это NULL`, а в некоторых — это разные значения.
Ограничения
Ограничения (constraints) — это правила, применяемые к данным. Они используются для ограничения данных, которые могут быть записаны в таблицу. Это обеспечивает точность и достоверность данных в БД.
Ограничения могут устанавливаться как на уровне колонки, так и на уровне таблицы.
Среди наиболее распространенных ограничений можно назвать следующие:
- NOT NULL — колонка не может иметь нулевое значение
- DEFAULT — значение колонки по умолчанию
- UNIQUE — все значения колонки должны быть уникальными
- PRIMARY KEY — первичный или основной ключ, уникальный идентификатор записи в текущей таблице
- FOREIGN KEY — внешний ключ, уникальный идентификатор записи в другой таблице (таблице, связанной с текущей)
- CHECK — все значения в колонке должны удовлетворять определенному условию
- INDEX — быстрая запись и извлечение данных
Любое ограничение может быть удалено с помощью команды ALTER TABLE и DROP CONSTRAINT + название ограничения. Некоторые реализации предоставляют сокращения для удаления ограничений и возможность отключать ограничения вместо их удаления.
Целостность данных
В каждой СУБД существуют следующие категории целостности данных:
- целостность объекта (Entity Integrity) — в таблице не должно быть дубликатов (двух и более строк с одинаковыми значениями)
- целостность домена (Domain Integrity) — фильтрация значений по типу, формату или диапазону
- целостность ссылок (Referential integrity) — строки, используемые другими записями (строки, на которые в других записях имеются ссылки), не могут быть удалены
- целостность, определенная пользователем (User-Defined Integrity) — дополнительные правила
Нормализация БД
Нормализация — это процесс эффективной организации данных в БД. Существует две главных причины, обуславливающих необходимость нормализации:
- предотвращение записи в БД лишних данных, например, хранения одинаковых данных в разных таблицах
- обеспечение «оправданной» связи между данными
Нормализация предполагает соблюдение нескольких форм. Форма — это формат структурирования БД. Существует три главных формы: первая, вторая и, соответственно, третья. Я не буду вдаваться в подробности об этих формах, при желании, вы без труда найдете необходимую информацию.
Синтаксис SQL
Синтаксис — это уникальный набор правил и рекомендаций. Все инструкции SQL должны начинаться с ключевого слова, такого как SELECT , INSERT , UPDATE , DELETE , ALTER , DROP , CREATE , USE , SHOW и т.п. и заканчиваться точкой с запятой ( ; ) (точка с запятой не входит в синтаксис SQL , но ее наличия, как правило, требуют консольные клиенты СУБД для обозначения окончания ввода команды). SQL не чувствителен к регистру, т.е. SELECT , select и SeLeCt являются идентичными инструкицями. Исключением из этого правила является MySQL , где учитывается регистр в названии таблицы.
Примеры синтаксиса
-- выборка SELECT col1, col2, . colN FROM tableName; SELECT DISTINCT col1, col2, . colN FROM tableName; SELECT col1, col2, . colN FROM tableName WHERE condition; SELECT col1, col2, . colN FROM tableName WHERE condition1 AND|OR condition2; SELECT col2, col2, . colN FROM tableName WHERE colName IN (val1, val2, . valN); SELECT col1, col2, . colN FROM tableName WHERE colName BETWEEN val1 AND val2; SELECT col1, col2, . colN FROM tableName WHERE colName LIKE pattern; SELECT col1, col2, . colN FROM tableName WHERE condition ORDER BY colName [ASC|DESC]; SELECT SUM(colName) FROM tableName WHERE condition GROUP BY colName; SELECT COUNT(colName) FROM tableName WHERE condition; SELECT SUM(colName) FROM tableName WHERE condition GROUP BY colName HAVING (function condition); -- создание таблицы CREATE TABLE tableName ( col1 datatype, col2 datatype, . colN datatype, PRIMARY KEY (одна или более колонка) ); -- удаление таблицы DROP TABLE tableName; -- создание индекса CREATE UNIQUE INDEX indexName ON tableName (col1, col2, . colN); -- удаление индекса ALTER TABLE tableName DROP INDEX indexName; -- получение описания структуры таблицы DESC tableName; -- очистка таблицы TRUNCATE TABLE tableName; -- добавление/удаление/модификация колонок ALTER TABLE tableName ADD|DROP|MODIFY colName [datatype]; -- переименование таблицы ALTER TABLE tableName RENAME TO newTableName; -- вставка значений INSERT INTO tableName (col1, col2, . colN) VALUES (val1, val2, . valN) -- обновление записей UPDATE tableName SET col1 = val1, col2 = val2, . colN = valN [WHERE condition]; -- удаление записей DELETE FROM tableName WHERE condition; -- создание БД CREATE DATABASE [IF NOT EXISTS] dbName; -- удаление БД DROP DATABASE [IF EXISTS] dbName; -- выбор БД USE dbName; -- завершения транзакции COMMIT; -- отмена изменений ROLLBACK;
Типы данных
Каждая колонка, переменная и выражение в SQL имеют определенный тип данных (data type). Основные категории типов данных:
Точные числовые
| Тип данных | От | До |
|---|---|---|
| bigint | -9,223,372,036,854,775,808 | 9,223,372,036,854,775,807 |
| int | -2,147,483,648 | 2,147,483,647 |
| smallint | -32,768 | 32,767 |
| tinyint | 0 | 255 |
| bit | 0 | 1 |
| decimal | -10^38 +1 | 10^38 -1 |
| numeric | -10^38 +1 | 10^38 -1 |
| money | -922,337,203,685,477.5808 | +922,337,203,685,477.5807 |
| smallmoney | -214,748.3648 | +214,748.3647 |
Приблизительные числовые
| Тип данных | От | До |
|---|---|---|
| float | -1.79E + 308 | 1.79E + 308 |
| real | -3.40E + 38 | 3.40E + 38 |
Дата и время
| Тип данных | От | До |
|---|---|---|
| datetime | Jan 1, 1753 | Dec 31, 9999 |
| smalldatetime | Jan 1, 1900 | Jun 6, 2079 |
| date | Дата сохраняется в виде June 30, 1991 | |
| time | Время сохраняется в виде 12:30 P.M. |
Строковые символьные
| N | Тип данных | Описание |
|---|---|---|
| 1 | char | Строка длиной до 8,000 символов (не-юникод символы, фиксированной длины) |
| 2 | varchar | Строка длиной до 8,000 символов (не-юникод символы, переменной длины) |
| 3 | text | Не-юникод данные переменной длины, длиной до 2,147,483,647 символов |
Строковые символьные (юникод)
| N | Тип данных | Описание |
|---|---|---|
| 1 | nchar | Строка длиной до 4,000 символов (юникод символы, фиксированной длины) |
| 2 | nvarchar | Строка длиной до 4,000 символов (юникод символы, переменной длины) |
| 3 | ntext | Юникод данные переменной длины, длиной до 1,073,741,823 символов |
Бинарные
| N | Тип данных | Описание |
|---|---|---|
| 1 | binary | Данные размером до 8,000 байт (фиксированной длины) |
| 2 | varbinary | Данные размером до 8,000 байт (переменной длины) |
| 3 | image | Данные размером до 2,147,483,647 байт (переменной длины) |
Смешанные
| N | Тип данных | Описание |
|---|---|---|
| 1 | timestamp | Уникальные числа, обновляющиеся при каждом изменении строки |
| 2 | uniqueidentifier | Глобально-уникальный идентификатор (GUID) |
| 3 | cursor | Объект курсора |
| 4 | table | Промежуточный результат, предназначенный для дальнейшей обработки |
Операторы
Оператор (operators) — это ключевое слово или символ, которые, в основном, используются в инструкциях WHERE для выполнения каких-либо операций. Они используются как для определения условий, так и для объединения нескольких условий в инструкции.
В дальнейших примерах мы будем исходить из предположения, что переменная a имеет значение 10 , а b — 20 .
Арифметические
| Оператор | Описание | Пример |
|---|---|---|
| + (сложение) | Сложение значений | a + b = 30 |
| — (вычитание) | Вычитание правого операнда из левого | b — a = 10 |
| * (умножение) | Умножение значений | a * b = 200 |
| / (деление) | Деление левого операнда на правый | b / a = 2 |
| % (деление с остатком/по модулю) | Деление левого операнда на правый с остатком (возвращается остаток) | b % a = 0 |
Операторы сравнения
| Оператор | Описание | Пример |
|---|---|---|
| = | Определяет равенство значений | a = b -> false |
| != | Определяет НЕравенство значений | a != b -> true |
| <> | Определяет НЕравенство значений | a <> b -> true |
| > | Значение левого операнда больше значения правого операнда? | a > b -> false |
| Значение левого операнда меньше значения правого операнда? | a < b ->true | |
| >= | Значение левого операнда больше или равно значению правого операнда? | a >= b -> false |
| Значение левого операнда меньше или равно значению правого операнда? | a true | |
| ! | Значение левого операнда НЕ меньше значения правого операнда? | a ! < b ->false |
| !> | Значение левого операнда НЕ больше значения правого операнда? | a !> b -> true |
Логические операторы
| N | Оператор | Описание |
|---|---|---|
| 1 | ALL | Сравнивает все значения |
| 2 | AND | Объединяет условия (все условия должны совпадать) |
| 3 | ANY | Сравнивает одно значение с другим, если последнее совпадает с условием |
| 4 | BETWEEN | Проверяет вхождение значения в диапазон от минимального до максимального |
| 5 | EXISTS | Определяет наличие строки, соответствующей определенному критерию |
| 6 | IN | Выполняет поиск значения в списке значений |
| 7 | LIKE | Сравнивает значение с похожими с помощью операторов подстановки |
| 8 | NOT | Инвертирует (меняет на противоположное) смысл других логических операторов, например, NOT EXISTS, NOT IN и т.д. |
| 9 | OR | Комбинирует условия (одно из условий должно совпадать) |
| 10 | IS NULL | Определяет, является ли значение нулевым |
| 11 | UNIQUE | Определяет уникальность строки |
Выражения
Выражение (expression) — это комбинация значений, операторов и функций для оценки (вычисления) значения. Выражения похожи на формулы, написанные на языке запросов. Они могут использоваться для извлечения из БД определенного набора данных.
Базовый синтаксис выражения выглядит так:
SELECT col1, col2, . colN FROM tableName WHERE [condition|expression];
Существуют различные типы выражений: логические, числовые и выражения для работы с датами.
Логические
Логические выражения извлекают данные на основе совпадения с единичным значением.
SELECT col1, col2, . colN FROM tableName WHERE выражение для поиска совпадения с единичным значением;
Предположим, что в таблице users имеются следующие записи:
| userId | userName | age | city | status |
|---|---|---|---|---|
| 1 | Igor | 25 | Moscow | active |
| 2 | Vika | 26 | Ekaterinburg | inactive |
| 3 | Elena | 27 | Ekaterinburg | active |
| 4 | Oleg | 28 | Moscow | inactive |
Выполняем поиск активных пользователей:
SELECT * FROM users WHERE status = active;
| userId | userName | age | city | status |
|---|---|---|---|---|
| 1 | Igor | 25 | Moscow | active |
| 3 | Elena | 27 | Ekaterinburg | active |
Числовые
Используются для выполнения арифметических операций в запросе.
SELECT numericalExpression as operationName [FROM tableName WHERE condition];
Простой пример использования числового выражения:
SELECT (10 + 5) AS addition;
| addition |
|---|
| 15 |
Существует несколько встроенных функций, таких как count() , sum() , avg() , min() , max() и др. для выполнения так называемых агрегирующих вычислений данных таблицы или колонки.
SELECT COUNT(*) AS records FROM users;
| records |
|---|
| 4 |
- AVG — вычисляет среднее значение
- SUM — вычисляет сумму значений
- MIN — вычисляет наименьшее значение
- MAX — вычисляет наибольшее значение
- COUNT — вычисляет количество записей в таблице
Также существует несколько встроенных функций для работы со строками:
- CONCAT — объединение строк
- LENGTH — возвращает количество символов в строке
- TRIM — удаляет пробелы в начале и конце строки
- SUBSTRING — извлекает подстроку из строки
- REPLACE — заменяет подстроку в строке
- LOWER — переводит символы строки в нижний регистр
- UPPER — переводит символы строки в верхний регистр и т.д.
- ROUND — округляет число
- TRUNCATE — обрезает дробное число до указанного количества знаков после запятой
- CEILING — возвращает наименьшее целое число, которое больше или равно текущему значению
- FLOOR — возвращает наибольшее целое число, которое меньше или равно текущему значению
- POWER — возводит число в указанную степень
- SQRT — возвращает квадратный корень числа
- RAND — генерирует случайное число с плавающей точкой в диапазоне от 0 до 1
Выражения для работы с датами
Эти выражения, как правило, возвращают текущую дату и время.
SELECT CURRENT_TIMESTAMP;
| Current_Timestamp |
|---|
| 2021-06-20 12:45:00 |
CURRENT_TIMESTAMP — это и выражение, и функция ( CURRENT_TIMESTAMP() ). Другая функция для получения текущей даты и времени — NOW() .
Другие функции для получения текущей даты и времени:
- CURDATE / CURRENT_DATE — возвращает текущую дату
- CURTIME / CURRENT_TIME — возвращает текущее время и т.д.
Функции для разбора даты и времени:
- DAYOFMONTH(date) — возвращает день месяца в виде числа
- DAYOFWEEK(date) — возвращает день недели в виде числа
- DAYOFYEAR(date) — возвращает номер дня в году
- MONTH(date) — возвращает месяц
- YEAR(date) — возвращает год
- LAST_DAY(date) — возвращает последний день месяца в виде даты
- HOUR(time) — возвращает час
- MINUTE(time) — возвращает минуты
- SECOND(time) — возвращает секунды и др.
Функции для манипулирования датами:
- DATE_ADD(date, interval) — выполняет сложение даты и определенного временного интервала
- DATE_SUB(date, interval) — выполняет вычитание из даты определенного временного интервала
- DATEDIFF(date1, date2) — возвращает разницу в днях между двумя датами
- TO_DAYS(date) — возвращает количество дней с 0-го дня года
- TIME_TO_SEC(time) — возвращает количество секунд с полуночи и др.
Для форматирования даты и времени используются функции DATE_FORMAT(date, format) и TIME_FORMAT(date, format) , соответственно.
Создание БД
Для создания БД используется инструкция CREATE DATABASE .
CREATE DATABASE dbName; -- или CREATE DATABASE IF NOT EXISTS dbName;
Условие IF NOT EXISTS позволяет избежать получения ошибки при попытке создания БД, которая уже существует.
Название БД должно быть уникальным в пределах СУБД.
Создаем БД testDB :
CREATE DATABASE testDB;
Получаем список БД:
SHOW DATABASES;
| Database |
|---|
| information_schema |
| postgres |
| testDB |
Удаление БД
Для удаления БД используется инструкция DROP DATABASE .
DROP DATABASE dbName; -- или DROP DATABASE IF EXISTS dbName;
Условие IF EXISTS позволяет избежать получения ошибки при попытке удаления несуществующей БД.
DROP DATABASE testDB;
Обратите внимание: при удалении БД уничтожаются все данные, которые в ней хранятся, так что будьте предельно внимательны при использовании данной команды.
Проверяем, что БД удалена:
SHOW DATABASES;
Для получения списка таблиц используется инструкция SHOW TABLES .
| Database |
|---|
| information_schema |
| postgres |
Выбор БД
При наличии нескольких БД, перед выполнением каких-либо операций, необходимо выбрать БД. Для этого используется инструкция USE .
USE dbName;
Предположим, что мы не удаляли testDB . Тогда мы можем выбрать ее так:
USE testDB;
Создание таблицы
Создание таблицы предполагает указание названия таблицы и определение колонок таблицы и их типов данных. Для создания таблицы используется инструкция CREATE TABLE .
CREATE TABLE tableName ( col1 datatype, col2 datatype, . colN datatype, PRIMARY KEY (хотя бы одна колонка) );
Для создания таблицы путем копирования другой таблицы используется сочетание CREATE TABLE и SELECT .
Пример создания таблицы users , где первичным ключом являются идентификаторы пользователей, а поля для имени и возраста пользователя не могут быть нулевыми:
CREATE TABLE users ( userId INT, userName VARCHAR(20) NOT NULL, age INT NOT NULL, city VARCHAR(20), status VARCHAR(8), PRIMARY KEY (id) );
Проверяем, что таблица была создана:
DESC users;
| Field | Type | Null | Key | Default | Extra |
|---|---|---|---|---|---|
| userId | int(11) | NO | PRI | ||
| userName | varchar(20) | NO | |||
| age | int(11) | NO | |||
| city | varchar(20) | NO | |||
| status | varchar(8) | YES | NULL |
Удаление таблицы
Для удаления таблицы используется инструкция DROP TABLE .
Обратите внимание: при удалении таблицы, навсегда удаляются все хранящиеся в ней данные, индексы, триггеры, ограничения и разрешения, так что будьте предельно внимательны при использовании данной команды.
Удаляем таблицу users :
DROP TABLE users;
Теперь, если мы попытаемся получить описание users , то получим ошибку:
DESC users; -- ERROR 1146 (42S02): Table 'testDB.users' doesn't exist
Добавление колонок
Для добавления в таблицу колонок используется инструкция INSERT INTO .
INSERT INTO tableName (col1, col2, . colN) VALUES (val1, val2, . valN);
Названия колонок можно не указывать, однако, в этом случае значения должны перечисляться в правильном порядке.
INSERT INTO tableName VALUES (val1, val2, . valN);
Во избежание ошибок, рекомендуется всегда перечислять названия колонок.
Предположим, что мы не удаляли таблицу users . Заполним ее пользователями:
INSERT INTO users (userId, userName, age, city, status) VALUES (1, 'Igor', 25, 'Moscow', 'active'); INSERT INTO users (userId, userName, age, city, status) VALUES (2, 'Vika', 26, 'Ekaterinburg', 'inactive'); INSERT INTO users (userId, userName, age, city, status) VALUES (3, 'Elena', 27, 'Ekaterinburg', 'active');
В таблицу можно добавлять несколько строк за один раз.
INSERT INTO users (userId, userName, age, city, status) VALUES (1, 'Igor', 25, 'Moscow', 'active'), (2, 'Vika', 26, 'Ekaterinburg', 'inactive'), (3, 'Elena', 27, 'Ekaterinburg', 'active');
Также, как было отмечено, при добавлении строки названия полей можно опускать:
INSERT INTO users VALUES (4, 'Oleg', 28, 'Moscow', 'inactive');
| userId | userName | age | city | status |
|---|---|---|---|---|
| 1 | Igor | 25 | Moscow | active |
| 2 | Vika | 26 | Ekaterinburg | inactive |
| 3 | Elena | 27 | Ekaterinburg | active |
| 4 | Oleg | 28 | Moscow | inactive |
Заполнение таблицы с помощью другой таблицы
INSERT INTO tableName [(col1, col2, . colN)] SELECT col1, col2, . colN FROM anotherTable [WHERE condition];
Выборка полей
Для выборки полей из таблицы используется инструкция SELECT . Она возвращает данные в виде результирующей таблицы (результирующего набора, result-set).
SELECT col1, col2, . colN FROM tableName;
Для выборки всех полей используется такой синтаксис:
SELECT * FROM tableName;
Произведем выборку полей userId , userName и age из таблицы users :
SELECT userId, userName, age FROM users;
| userId | userName | age |
|---|---|---|
| 1 | Igor | 25 |
| 2 | Vika | 26 |
| 3 | Elena | 27 |
| 4 | Oleg | 28 |
Предложение WHERE
Предложение WHERE используется для фильтрации возвращаемых данных. Оно используется совместно с SELECT , UPDATE , DELETE и другими инструкциями.
SELECT col1, col2, . col2 FROM tableName WHERE condition;
Условие (condition), которому должны удовлетворять возвращаемые записи, определяется с помощью операторов сравнения или логических операторов типа > , < , = , NOT , LIKE и т.д.
Сделаем выборку полей userId , userName и age активных пользователей:
SELECT userId, userName, age FROM users WHERE status = 'active';
| userId | userName | age |
|---|---|---|
| 1 | Igor | 25 |
| 3 | Elena | 27 |
Сделаем выборку полей userId , age и city пользователя с именем Vika .
SELECT userId, age, city FROM users WHERE userName = 'Vika';
| userId | age | city |
|---|---|---|
| 2 | 26 | Ekaterinburg |
Обратите внимание: строки в предложении WHERE должны быть обернуты в одинарные кавычки ( » ), а числа, напротив, указываются как есть.
Операторы AND и OR
Конъюнктивный оператор AND и дизъюнктивный оператор OR используются для соединения нескольких условий при фильтрации данных.
AND
SELECT col1, col2, . colN FROM tableName WHERE condition1 AND condition2 . AND conditionN;
Возвращаемые записи должны удовлетворять всем указанным условиям.
Сделаем выборку полей userId , userName и age активных пользователей старше 26 лет:
SELECT userId, userName, age FROM users WHERE status = active AND age > 26;
| userId | userName | AGE |
|---|---|---|
| 3 | Elena | 27 |
OR
SELECT col1, col2, . colN FROM tableName WHERE condition1 OR condition2 . OR conditionN;
Возвращаемые записи должны удовлетворять хотя бы одному условию.
Сделаем выборку тех же полей неактивных пользователей или пользователей, младше 27 лет:
SELECT userId, userName, age FROM users WHERE status = inactive OR age < 27;
| userId | userName | age |
|---|---|---|
| 1 | Igor | 25 |
| 2 | Vika | 26 |
Обновление полей
Для обновления полей используется инструкция UPDATE . SET . Эта инструкция, обычно, используется в сочетании с предложением WHERE .
UPDATE tableName SET col1 = val1, col2 = val2, . colN = valN [WHERE condition];
Обновим возраст пользователя с именем Igor :
UPDATE users SET age = 30 WHERE username = 'Igor';
Если в данном случае опустить WHERE , то будет обновлен возраст всех пользователей.
Удаление записей
Для удаления записей используется инструкция DELETE . Эта инструкция также, как правило, используется в сочетании с предложением WHERE .
DELETE FROM tableName [WHERE condition];
Удалим неактивных пользователей:
DELETE FROM users WHERE status = 'inactive';
Если в данном случае опустить WHERE , то из таблицы users будут удалены все записи.
Предложения LIKE и REGEX
LIKE
Предложение LIKE используется для сравнения значений с помощью операторов с подстановочными знаками. Существует два вида таких операторов:
- проценты ( % )
- нижнее подчеркивание ( _ )
% означает 0, 1 или более символов. _ означает точно 1 символ.
SELECT col1, col2, . colN FROM tableName WHERE col LIKE 'xxx%' -- или WHERE col LIKE '%xxx%' -- или WHERE col LIKE '%xxx' -- или WHERE col LIKE 'xxx_' -- и т.д.
| N | Инструкция | Результат |
|---|---|---|
| 1 | WHERE col LIKE 'foo%' | Любые значения, начинающиеся с foo |
| 2 | WHERE col LIKE '%foo%' | Любые значения, содержащие foo |
| 3 | WHERE col LIKE '_oo%' | Любые значения, содержащие oo на второй и третьей позициях |
| 4 | WHERE col LIKE 'f%%' | Любые значения, начинающиеся с f и состоящие как минимум из 1 символа |
| 5 | WHERE col LIKE '%oo' | Любые значения, оканчивающиеся на oo |
| 6 | WHERE col LIKE '_o%o' | Любые значения, содержащие o на второй позиции и оканчивающиеся на o |
| 7 | WHERE col LIKE 'f_o' | Любые значения, содержащие f и o на первой и третьей позициях, соответственно, и состоящие из трех символов |
Сделаем выборку неактивных пользователей:
SELECT * FROM users WHERE status LIKE 'in%';
| userId | userName | age | city | status |
|---|---|---|---|---|
| 2 | Vika | 26 | Ekaterinburg | inactive |
| 4 | Oleg | 28 | Moscow | inactive |
Сделаем выборку пользователей 30 лет и старше:
SELECT * FROM users WHERE age LIKE '3_';
| userId | userName | age | city | status |
|---|---|---|---|---|
| 1 | Igor | 30 | Moscow | active |
REGEX
Предложение REGEX позволяет определять регулярное выражение, которому должна соответствовать запись.
SELECT col1, col2, . colN FROM tableName WHERE colName REGEXP регулярное выражение;
В регулярное выражении могут использоваться следующие специальные символы:
- ^ — начало строки
- $ — конец строки
- . — любой символ
- [символы] — любой из указанных в скобках символов
- [начало-конец] — любой символ из диапазона
- | — разделяет шаблоны
Сделаем выборку пользователей с именами Igor и Vika :
SELECT * FROM users WHERE userName REGEXP 'Igor|Vika';
| userId | userName | age | city | status |
|---|---|---|---|---|
| 1 | Igor | 30 | Moscow | active |
| 2 | Vika | 26 | Ekaterinburg | inactive |
Предложение TOP / LIMIT / ROWNUM
Данные предложения позволяют извлекать указанное количество или процент записей с начала таблицы. Разные СУБД поддерживают разные предложения.
SELECT TOP number|percent col1, col2, . colN FROM tableName [WHERE condition];
Сделаем выборку первых трех пользователей:
SELECT TOP 3 * FROM users;
| userId | userName | age | city | status |
|---|---|---|---|---|
| 1 | Igor | 30 | Moscow | active |
| 2 | Vika | 26 | Ekaterinburg | inactive |
| 3 | Elena | 27 | Ekaterinburg | active |
SELECT * FROM users LIMIT 3, [offset];
Параметр offset (смещение) определяет количество пропускаемых записей. Например, так можно извлечь первых двух пользователей, начиная с третьего:
SELECT * FROM users LIMIT 2, 2;
SELECT * FROM users WHERE ROWNUM
Предложения ORDER BY и GROUP BY
ORDER BY
Предложение ORDER BY используется для сортировки данных по возрастанию ( ASC ) или убыванию ( DESC ). Многие СУБД по умолчанию выполняют сортировку по возрастанию.
SELECT col1, col2, . colN FROM tableName [WHERE condition] [ORDER BY col1, col2, . colN] [ASC | DESC];
Обратите внимание: колонки для сортировки должны быть указаны в списке колонок для выборки.
Сделаем выборку пользователей, отсортировав их по городу и возрасту:
SELECT * FROM users ORDER BY city, age;
| userId | userName | age | city | status |
|---|---|---|---|---|
| 2 | Vika | 26 | Ekaterinburg | inactive |
| 3 | Elena | 27 | Ekaterinburg | active |
| 1 | Igor | 25 | Moscow | active |
| 4 | Oleg | 28 | Moscow | inactive |
Теперь выполним сортировку по убыванию:
SELECT * FROM users ORDER BY city, age DESC;
Определим собственный порядок сортировки по убыванию:
SELECT * FROM users ORDER BY (CASE city WHEN 'Ekaterinburg' THEN 1 WHEN 'Moscow' THEN 2 ELSE 100 END) ASC, city DESC;
GROUP BY
Предложение GROUP BY используется совместно с инструкцией SELECT для группировки записей. Оно указывается после WHERE и перед ORDER BY .
SELECT col1, col2, . colN FROM tableName WHERE condition GROUP BY col1, col2, . colN ORDER BY col1, col2, . colN;
Сгруппируем активных пользователей по городам:
SELECT city, COUNT(city) AS amount FROM users WHERE status = active GROUP BY city ORDER BY city;
| city | amount |
|---|---|
| Ekaterinburg | 2 |
| Moscow | 2 |
Ключевое слово DISTINCT
Ключевое слово DISTINCT используется совместно с инструкцией SELECT для возврата только уникальных записей (без дубликатов).
SELECT DISTINCT col1, col2, . colN FROM tableName [WHERE condition];
Сделаем выборку городов проживания пользователей:
SELECT DISTINCT city FROM users;
| city |
|---|
| Ekaterinburg |
| Moscow |
Соединения
Соединения (joins) используются для комбинации записей двух и более таблиц.
Предположим, что кроме users , у нас имеется таблица orders с заказами пользователей следующего содержания:
| orderId | date | userId | amount |
|---|---|---|---|
| 101 | 2021-06-21 00:00:00 | 2 | 3000 |
| 102 | 2021-06-20 00:00:00 | 2 | 1500 |
| 103 | 2021-06-19 00:00:00 | 3 | 2000 |
| 104 | 2021-06-18 00:00:00 | 3 | 1000 |
Сделаем выборку полей userId , userName , age и amount из наших таблиц посредством их соединения:
SELECT userId, userName, age, amount FROM users, orders WHERE users.userId = orders.userId;
| userId | userName | age | amount |
|---|---|---|---|
| 2 | Vika | 26 | 3000 |
| 2 | Vika | 26 | 1500 |
| 3 | Elena | 27 | 2000 |
| 3 | Elena | 27 | 1000 |
При соединении таблиц могут использоваться такие операторы, как = , < , >, <> , = , != , BETWEEN , LIKE и NOT , однако наиболее распространенным является = .
Существуют разные типы объединений:
- INNER JOIN — возвращает записи, имеющиеся в обеих таблицах
- LEFT JOIN — возвращает записи из левой таблицы, даже если такие записи отсутствуют в правой таблице
- RIGHT JOIN — возвращает записи из правой таблицы, даже если такие записи отсутствуют в левой таблице
- FULL JOIN — возвращает все записи объединяемых таблиц
- CROSS JOIN — возвращает все возможные комбинации строк обеих таблиц
- SELF JOIN — используется для объединения таблицы с самой собой
Предложение UNION
Предложение/оператор UNION используется для комбинации результатов двух и более инструкций SELECT . При этом, возвращаются только уникальные записи.
В случае с UNION , каждая инструкция SELECT должна иметь:
- одинаковый набор колонок для выборки
- одинаковое количество выражений
- одинаковые типы данных колонок и
- одинаковый порядок колонок
Однако, они могут быть разной длины.
SELECT col1, col2, . colN FROM table1 [WHERE condition] UNION SELECT col1, col2, . colN FROM table2 [WHERE condition];
Объединим наши таблицы users и orders :
SELECT userId, userName, amount, date FROM users LEFT JOIN orders ON users.useId = orders.userId UNION SELECT userId, userName, amount, date FROM users RIGHT JOIN orders ON users.userId = orders.userId;
| userId | userName | amount | date |
|---|---|---|---|
| 1 | Igor | NULL | NULL |
| 2 | Vika | 3000 | 2021-06-21 00:00:00 |
| 2 | Vika | 1500 | 2021-06-20 00:00:00 |
| 3 | Elena | 2000 | 2021-06-19 00:00:00 |
| 3 | Elena | 1000 | 2021-06-18 00:00:00 |
| 4 | Alex | NULL | NULL |
Предложение UNION ALL
Предложение UNION ALL также используется для объединения результатов двух и более инструкций SELECT . При этом, возвращаются все записи, включая дубликаты.
SELECT col1, col2, . colN FROM table1 [WHERE condition] UNION ALL SELECT col1, col2, . colN FROM table2 [WHERE condition];
Существует еще два предложения, похожих на UNION :
- INTERSECT — используется для комбинации результатов двух и более SELECT , но возвращаются только строки из первого SELECT , совпадающие со строками из второго SELECT
- EXCEPT|MINUS — возвращаются только строки из первого SELECT , отсутствующие во втором SELECT
Синонимы
Синонимы (aliases) позволяют временно изменять названия таблиц и колонок. "Временно" означает, что новое название используется только в текущем запросе, в БД название остается прежним.
Синтаксис синонима таблицы:
SELECT col1, col2, . colN FROM tableName AS aliasName [WHERE condition];
Синтаксис синонима колонки:
SELECT colName AS aliasName FROM tableName [WHERE condition];
Пример использования синонимов таблиц:
SELECT U.userId, U.userName, U.age, O.amount FROM users AS U, orders AS O WHERE U.userId = O.userId;
| userId | userName | age | amount |
|---|---|---|---|
| 2 | Vika | 26 | 3000 |
| 2 | Vika | 26 | 1500 |
| 3 | Elena | 27 | 2000 |
| 3 | Elena | 27 | 1000 |
Пример использования синонимов колонок:
SELECT userId AS user_id, userName AS user_name, age AS user_age FROM users WHERE status = active;
| user_id | user_name | user_age |
|---|---|---|
| 1 | Igor | 30 |
| 3 | Elena | 27 |
Индексы
Создание индексов
Индексы — это специальные поисковые таблицы (lookup tables), которые используются движком БД в целях более быстрого извлечения данных. Проще говоря, индекс — это указатель или ссылка на данные в таблице.
Индексы ускоряют работу инструкции SELECT и предложения WHERE , но замедляют работу инструкций UPDATE и INSERT . Индексы могут создаваться и удаляться, не оказывая никакого влияния на данные.
Для создания индекса используется инструкция CREATE INDEX , позволяющая определять название индекса, индексируемые колонки и порядок индексации (по возрастанию или по убыванию).
К индексам можно применять ограничение UNIQUE для того, чтобы обеспечить их уникальность.
Синтаксис создания индекса:
CREATE INDEX indexName ON tableName;
Синтаксис создания индекса для одной колонки:
CREATE INDEX indexName ON tableName (colName);
Синтакис создания уникальных индексов (такие индексы используются не только для повышения производительности, но и для обеспечения согласованности данных):
CREATE UNIQUE INDEX indexName ON tableName (colName);
Синтаксис создания индексов для нескольких колонок (композиционный индекс):
CREATE INDEX indexName ON tableName (col1, col2, . colN);
Решение о создании индексов для одной или нескольких колонок следует принимать на основе того, какие колонки будут часто использоваться в запросе WHERE в качестве условия для сортировки строк.
Для ограничений PRIMARY KEY и UNIQUE автоматически создаются неявные индексы.
Удаление индексов
Для удаления индексов используется инструкция DROP INDEX :
DROP INDEX indexName;
Несмотря на то, что индексы предназначены для повышения производительности БД, существуют ситуации, в которых их использования лучше избегать.
К таким ситуациям относится следующее:
- индексы не должны использоваться в маленьких таблицах
- в таблицах, которые часто и в большом объеме обновляются или перезаписываются
- в колонках, которые содержат большое количество нулевых значений
- в колонках, над которыми часто выполняются операции
Обновление таблицы
Команда ALTER TABLE используется для добавления, удаления и модификации колонок существующей таблицы. Также эта команда используется для добавления и удаления ограничений.
-- добавление новой колонки ALTER TABLE tableName ADD colName datatype; -- удаление колонки ALTER TABLE tableName DROP COLUMN colName; -- изменение типа данных колонки ALTER TABLE tableName MODIFY COLUMN colName newDatatype; -- добавление ограничения `NOT NULL` ALTER TABLE tableName MODIFY colName datatype NOT NULL; -- добавление ограничения `UNIQUE` ALTER TABLE tableName ADD CONSTRAINT myUniqueConstraint UNIQUE (col1, col2, . colN); -- добавление ограничения `CHECK` ALTER TABLE tableName ADD CONSTRAINT myUniqueConstraint CHECK (condition); -- добавление первичного ключа ALTER TABLE tableName ADD CONSTRAINT myPrimaryKey PRIMARY KEY (col1, col2, . colN); -- удаление ограничения ALTER TABLE tableName DROP CONSTRAINT myUniqueContsraint; -- mysql ALTER TABLE tableName DROP INDEX myUniqueContsraint; -- удаление первичного ключа ALTER TABLE tableName DROP CONSTRAINT myPrimaryKey; -- mysql ALTER TABLE tableName DROP PRIMARY KEY;
Добавляем в таблицу users новую колонку — пол пользователя:
ALTER TABLE users ADD sex char(1);
Удаляем эту колонку:
ALTER TABLE users DROP sex;
Очистка таблицы
Команда TRUNCATE TABLE используется для очистки таблицы. Ее отличие от DROP TABLE состоит в том, что сохраняется структура таблицы ( DROP TABLE полностью удаляет таблицу и все ее данные).
TRUNCATE TABLE tableName;
Очищаем таблицу users :
TRUNCATE TABLE users;
Проверяем, что users пустая:
SELECT * FROM users; -- Empty set (0.00 sec)
Представления
Представление (view) — это не что иное, как инструкция, записанная в БД под определенным названием. Другими словами, представление — это композиция таблицы в форме предварительно определенного запроса.
Представления могут содержать все или только некоторые строки таблицы. Представление может быть создано на основе одной или нескольких таблиц (это зависит от запроса для создания представления).
Представления — это виртутальные таблицы, позволяющие делать следующее:
- структурировать данные способом, который пользователи находят наиболее естественным или интуитивно понятным
- ограничивать доступ к данным таким образом, что пользователь может просматривать и (иногда) модифицировать только то, что ему нужно и ничего более
- объединять данные из нескольких таблиц для формирования отчетов
Создание представления
Для создания представления используется инструкция CREATE VIEW . Как было отмечено, представления могут создаваться на основе одной или нескольких таблиц, и даже на основе другого представления.
CREATE VIEW viewName AS SELECT col1, col2, . colN FROM tableName [WHERE condition];
Создаем представление для имен и возраста пользователей:
CREATE VIEW usersView AS SELECT userName, age FROM users;
Получаем данные с помощью представления:
SELECT * FROM usersView;
| userName | age |
|---|---|
| Igor | 30 |
| Vika | 26 |
| Elena | 27 |
| Oleg | 28 |
WITH CHECK OPTION
WITH CHECK OPTION — это настройка инструкции CREATE VIEW . Она позволяет обеспечить соответствие всех UPDATE и INSERT условию, определенном в представлении.
Если условие не удовлетворяется, выбрасывается исключение.
CREATE VIEW usersView AS SELECT userName, age FROM users WHERE age IS NOT NULL WITH CHECK OPTION;
Обновление представления
Представление может быть обновлено при соблюдении следующих условий:
- SELECT не содержит ключевого слова DISTINCT
- SELECT не содержит агрегирующих функций
- SELECT не содержит функций установки значений
- SELECT не содержит операций установки значений
- SELECT не содержит предложения ORDER BY
- FROM не содержит больше одной таблицы
- WHERE не содержит подзапросы
- запрос не содержит GROUP BY или HAVING
- вычисляемые колонки не обновляются
- все ненулевые колонки из базовой таблицы включены в представление в том же порядке, в каком они указаны в запросе INSERT
Пример обновления возраста пользователя с именем Igor в представлении:
UPDATE usersView SET age = 31 WHERE userName = 'Igor';
Обратите внимание: обновление строки в представлении приводит к ее обновлению в базовой таблице.
В представление могут добавляться новые строки с помощью команды INSERT . При выполнении этой команды должны соблюдаться те же правила, что и при выполнении команды UPDATE .
С помощью команды DELETE можно удалять строки из представления.
Удаляем из представления пользователя, возраст которого составляет 26 лет:
DELETE FROM usersView WHERE age = 26;
Обратите внимание: удаление строки в представлении приводит к ее удалению в базовой таблице.
Удаление представления
Для удаления представления используется инструкция DROP VIEW :
DROP VIEW viewName;
Удаляем представление usersView :
DROP VIEW usersView;
HAVING
Предложение HAVING используется для фильтрации результатов группировки. WHERE используется для применения условий к колонкам, а HAVING — к группам, созданным с помощью GROUP BY .
HAVING должно указываться после GROUP BY , но перед ORDER BY (при наличии).
SELECT col1, col2, . colN FROM table1, table2, . tableN [WHERE condition] GROUP BY col1, col2, . colN HAVING condition ORDER BY col1, col2, . colN;
Транзакции
Транзакция — это единица работы или операции, выполняемой над БД. Это последовательность операций, выполняемых в логическом порядке. Эти операции могут запускаться как пользователем, так и какой-либо программой, функционирующей в БД.
Транзакция — это применение одного или более изменения к БД. Например, при создании/обновлении/удалении записи мы выполняем транзакцию. Важно контролировать выполнение таких операций в целях обеспечения согласованности данных и обработки возможных ошибок.
На практике, запросы, как правило, не отправляются в БД по одному, они группируются и выполняются как часть транзакции.
Свойства транзакции
Транзакции имеют 4 стандартных свойства (ACID):
- атомарность (atomicity) — все операции транзакции должны быть успешно завершены. В противном случае, транзакция прерывается, а все изменения отменяются (происходит откат к предыдущему состоянию)
- согласованность (consistency) — состояние должно изменться в полном соответствии с операциями транзакции
- изоляция или автономность (isolation) — транзакции не зависят друг от друга и не оказывают друг на друга никакого влияния
- долговечность (durability) — результат звершенной транзакции должен сохраняться при поломке системы
Управление транзакцией
Для управления транзакцией используются следующие команды:
- BEGIN|START TRANSACTION — запуск транзакции
- COMMIT — сохранение изменений
- ROLLBACK — отмена изменений
- SAVEPOINT — контрольная точка для отмены изменений
- SET TRANSACTION — установка характеристик текущей транзакции
Команды для управления транзакцией могут использоваться только совместно с такими запросами как INSERT , UPDATE и DELETE . Они не могут использоваться во время создания и удаления таблиц, поскольку эти операции автоматически отправляются в БД.
Удаляем пользователя, возраст которого составляет 26 лет, и отправляем изменения в БД:
BEGIN TRANSACTION DELETE FROM users WHERE age = 26; COMMIT;
Удаляем пользователя с именем Oleg и отменяем эту операцию:
BEGIN DELETE FROM users WHERE username = 'Oleg'; ROLLBACK;
Контрольные точки создаются с помощью такого синтаксиса:
SAVEPOINT savepointName;
Возврат к контрольной точке выполняется так:
ROLLBACK TO savepointName;
Выполняем три запроса на удаление данных из users , создавая контрольные точки перед каждый удалением:
START TRANSACTION SAVEPOINT sp1; DELETE FROM users WHERE age = 26; SAVEPOINT sp2; DELETE FROM users WHERE userName = 'Oleg'; SAVEPOINT sp3; DELETE FROM users WHERE status = 'inactive';
Отменяем два последних удаления, возвращаясь к контрльной точке sp2 , созданной после первого удаления:
ROLLBACK TO sp2;
Делаем выборку пользователей:
SELECT * FROM users;
| userId | userName | age | city | status |
|---|---|---|---|---|
| 1 | Igor | 31 | Moscow | active |
| 3 | Elena | 27 | Ekaterinburg | active |
| 4 | Oleg | 28 | Moscow | inactive |
Как видим, из таблицы был удален только пользователь с возрастом 26 лет.
Для удаление контрольной точки используется команда RELEASE SAVEPOINT . Естественно, после удаления контрольной точки, к ней нельзя будет вернуться с помощью ROLLBACK TO .
Команда SET TRANSACTION используется для инициализации транзакции, т.е. начала ее выполнения. При этом, можно определять некоторые характеристики транзакции. Например, так можно определить уровень доступа транзакции (доступна только для чтения или для записи тоже):
SET TRANSACTION [READ WRITE | READ ONLY];
Временные таблицы
Некоторые СУБД поддерживают так называемые временные таблицы (temporary tables). Такие таблицы позволяют хранить и обрабатывать промежуточные результаты с помощью таких же запросов, как и при работе с обычными таблицами.
Временные таблицы могут быть очень полезными при необходимости хранения временных данных. Одной из главных особенностей таких таблиц является то, что они удаляются по завершении текущей сессии. При запуске скрипта временная таблица удаляется после завершения выполнения этого скрипта. При доступе к БД с помощью клиентской программы, такая таблица будет удалена после закрытия этой программы.
Временная таблица создается с помощью инструкции CREATE TEMPORARY TABLE , в остальном синтаксис создания таких таблиц идентичен синтаксису создания обычных таблиц.
Временная таблица удаляется точно также, как и обычная таблица, с помощью инструкции DROP TABLE .
Клонирование таблицы
Может возникнуть ситуация, когда потребуется получить точную копию существующей таблицы, а CREATE TABLE или SELECT окажется недостаточно в силу того, что мы хотим получить не только идентичную структуру, но также индексы, значения по умолчанию и т.д. копируемой таблицы.
В mysql , например, это можно сделать так:
- вызываем команду SHOW CREATE TABLE для получения инструкции, выполненной при создании таблицы, включая индексы и прочее
- меняем название таблицы и выполняем запрос. Получаем точную копию таблицы
- опционально: если требуется содержимое копируемой таблицы, можно также использовать инструкции INSERT INTO или SELECT
Подзапросы
Подзапрос — это внутренний (вложенный) запрос другого запроса, встроенный (вставленный) с помощью WHERE или других инструкций.
Подзапрос используется для получения данных, которые будут использованы основным запросом в качестве условия для фильтрации возвращаемых записей.
Подзапросы могут использоваться в инструкциях SELECT , INSERT , UPDATE и DELETE , а также с операторами = , < , >, >= ,
Правила использования подзапросов:
- они должны быть обернуты в круглые скобки
- подзапрос должен содержать только одну колонку для выборки, если основной запрос не содержит несколько таких колонок, которые сравниваются в подзапросе
- в подзапросе нельзя использовать команду ORDER BY , это можно сделать в основном запросе. В подзапросе для замены ORDER BY можно использовать GROUP BY
- подзапросы, возвращающие несколько значений, могут использоваться только с операторами, которые работают с наборами значений, такими как IN
- список SELECT не может содержать ссылки на значения, которые оцениваются (вычисляются) как BLOB , ARRAY , CLOB или NCLOB
- подзапрос не может быть сразу передан в функцию для установки значений
- команду BETWEEN нельзя использовать совместно с подзапросом. Тем не менее, в самомподзапросе указанную команду использовать можно
Подзапросы, обычно, используются в инструкции SELECT .
SELECT col1, col2, . colN FROM table1, table2, . tableN WHERE colName operator (SELECT col1, col2, . colN FROM table1, table2, tableN [WHERE condition]);
SELECT * FROM users WHERE userId IN ( SELECT userId FROM users WHERE status = 'active' );
| userId | userName | age | city | status |
|---|---|---|---|---|
| 1 | Igor | 30 | Moscow | active |
| 3 | Elena | 27 | Ekaterinburg | active |
Подзапросы могут использоваться в инструкции INSERT . Эта инструкция добавляет в таблицу данные, возвращаемые подзапросом. При этом, данные, возвращаемые подзапросом, могут быть модифицированы любыми способами.
INSERT INTO tableName col1, col2, . colN SELECT col1, col2, . colN FROM table1, table2, . tableN [WHERE operator [value]];
Подзапросы могут использоваться в инструкции UPDATE . При этом, данные из подзапроса могут использоваться для обновления любого количества колонок.
UPDATE tableName SET col = newVal [WHERE operator [value] ( SELECT colName FROM tableName [WHERE condition] ) ];
Данные, возвращаемые подзапросом, могут использоваться и для удаления записей.
DELETE FROM tableName [WHERE operator [value] ( SELECT colName FROM tableName [WHERE condition] ) ];
Последовательности
Последовательность — это набор целых чисел (1, 2, 3 и т.д.), генерируемых автоматически. Последовательности часто используются в БД, поскольку многие приложения нуждаются в уникальных значениях, используемых для идентификации строк.
Приведенные ниже примеры рассчитаны на mysql .
Простейшим способом определения последовательности является использование AUTO_INCREMENT при создании таблицы:
CREATE TABLE tableName ( id INT UNSIGNED NOT NULL AUTO_INCREMENT, PRIMARY KEY (id), -- другие строки );
Для того, чтобы заново пронумеровать строки с помощью автоматически генерируемых значений (например, при удалении большого количества строк), можно удалить колонку, содержащую такие значения и создать ее заново. Обратите внимание: такая таблица не должна быть частью объединения.
ALTER TABLE tableName DROP id; ALTER TABLE tableName ADD id INT UNSIGNED NOT NULL AUTO_INCREMENT FIRST, ADD PRIMARY KEY (id);
По умолчанию значения, генерируемые с помощью AUTO_INCREMENT , начинаются с 1. Для того, чтобы установить другое начальное значение достаточно указать, например, AUTO_INCREMENT = 100 — в этом случае нумерация строк начнется со 100.
- Веб-разработка
- Программирование
- SQL
Параметры командной строки запуска "1С:Предприятия"
Параметры командной строки запуска «1С:Предприятия»
Общая информация об интерфейсе командной строки системы 1С:Предприятие
Программные продукты системы «1С:Предприятие» предоставляют возможность выполнять определенные действия с помощью интерфейса командной строки. Некоторые приложения предоставляют интерфейс командной строки как дополнительный инструмент к графическому интерфейсу, например, интерактивная программа запуска. Некоторые приложения управляются только с помощью интерфейса командной строки. Такими приложениями являются, например, не интерактивная программа запуска или сервер «1С:Предприятия».
В общем случае интерфейс командной строки «1С:Предприятие» выглядит следующим образом:
Приложение|URL [Режим] [Команда1 [Команда2 […]]]
- Приложение ‑ это имя используемого приложения. Необходимость указания полного пути к запускаемому приложению, регистр используемых символов и прочие особенности зависят от того, в какой операционной системе или среде используется приложение. Для запуска веб-клиента в качестве имени приложения будет выступать URL информационной базы, опубликованной на веб-сервере.
- Режим ‑ необязательный параметр запуска некоторых приложений.
- Команда1, Команда 2, . ‑ одна или несколько команд, которые должно выполнить приложение (включая уточняющие параметры команды). Команда ‑ это какое-либо определенное действие. Каждая команда, в общем случае, обладает обязательными и необязательными параметрами, а также некоторым необязательным значением. Возможность комбинации нескольких команд в одной командной строке зависит от запускаемого приложения, режима запуска (если есть) и самих команд. Возможна ситуация, когда некоторые команды являются взаимоисключающими, т. е. можно использовать только одну команду из определенного перечня.
- Символ " " (пробел) ‑ таким символом разделяются все элементы интерфейса командной строки запуска.
- Указание команд и параметров может выполняться несколькими разными способами:
- 1-й способ:
- Символ "/" (прямой слэш) ‑ таким символом начинается каждая команда. Исключение составляет веб-клиент, где команда не предваряется таким символом. Команды веб-клиента разделяются символом "&".
- Символ "-" (тире) ‑ таким символом предваряется параметр команды.
- По такой схеме указываются параметры, например, при запуске сервера «1С:Предприятия» (ragent) или в случае пакетного запуска конфигуратора (1cv8).
- Команда указывается без указания каких-либо предваряющих символов. Параметр начинается с символа "--" (двойное тире) в случае указания полного имени параметра или "-" (тире) в случае указания сокращенного имени параметра.
- По такой схеме указываются параметры, например, при использовании утилиты ring.
- Команда предваряется символом "--" (двойное тире) в случае полного указания имени команды и символом "-" (тире) если указывается сокращенное имя команды.
- По такой схеме указываются параметры, например, утилита cnvdbfl.
Если у Вас используется лицензионная программа 1С версии ПРОФ или КОРП, но закончилась подписка ИТС, то для получения доступа к дистрибутивам Вы можете оформить договор ИТС напрямую в нашей компании, даже если приобретали программу и раньше оформляли подписку в другом месте. Минимальный вариант подписки ИТС при непрерывном продлении на 1 месяц - 5232 руб., а на 3 месяца - 11309 руб. Если же после окончания предыдущего договора ИТС прошло более месяца, то возобновление будет стоить немного дороже: на 1 месяц - 6278 руб, а на 3 месяца 13569 руб. При оформлении договора ИТС через нашу компанию Вы получите доступ к дистрибутивам уже через несколько часов после оплаты.
Описание команд интерфейса командной строки запуска системы "1С:Предприятие".
- Normal ‑ обычная скорость соединения (значение по умолчанию);
- Low ‑ низкая скорость соединения.
- -None ‑ сжатие отключено.
- -Deflate ‑ используется стандартное (для протокола HTTP) сжатие трафика по алгоритму deflate.
- -SDC ‑ используется собственный алгоритм сжатия (используется по умолчанию).
- 0 ‑ незащищенное соединение;
- 1 ‑ защищенное соединение только в процессе выполнения аутентификации;
- 2 ‑ защищенное соединение в течение всего сеанса.
- "+" ‑ установка обязательного применения аутентификации операционной системы при старте «1С:Предприятие».
- "–" ‑ запрет применения аутентификации операционной системы при старте «1С:Предприятия».
- + ‑ принудительное выполнение аутентификации средствами операционной системы на веб-сервере (по умолчанию).
- – ‑ запрет применения аутентификации средствами операционной системы на веб-сервере.
Если OpenID-провайдер требует интерактивной аутентификации (происходит первое обращение или истекло время жизни признака аутентифицированности), клиент отображает диалог для ввода имени и пароля пользователя.
Аутентификация происходит по списку пользователей информационной базы OpenID-провайдера.
Аутентифицируемый пользователь информационной базы, использующих OpenID-аутентификацию, должен соответствовать по имени пользователю информационной базы OpenID-провайдера.
- + ‑ использовать OpenID-аутентификацию (по умолчанию).
- – ‑ не использовать OpenID-аутентификацию.
- "+" ‑ выполнять подбор версий при запуске (значение по умолчанию).
- "–" ‑ не выполнять подбор версий при запуске.
- Выбирать автоматически ‑ запускается тонкий клиент;
- Тонкий клиент ‑ запускается тонкий клиент;
- Веб-клиент ‑ запускается веб-клиент;
- Толстый клиент ‑ запускается толстый клиент в режиме управляемого приложения.
- x86 ‑ использовать только 32-разрядные версии.
- x86_prt ‑ использовать преимущественно 32-разрядные версии.
- x86_64 ‑ использовать только 64-разрядные версии.
- x86_64_prt ‑ использовать преимущественно 64-разрядные версии.
- -Normal ‑ обычный режим запуска.
- -Workplace ‑ режим рабочего места.
- -EmbeddedWorkplace ‑ режим встроенного рабочего места (для встраивания веб-клиента в сторонний сайт).
- -FullscreenWorkplace ‑ режим полноэкранного рабочего места.
- -Kiosk ‑ режим киоск.
- -windows ‑ указывает, что при соединении нужно использовать клиентский сертификат из системного хранилища сертификатов ОС Windows. Данный параметр игнорируется, если указан хотя бы один из следующих параметров команды: -file или -none.
- -linux ‑ указывает, что при соединении необходимо использовать сертификат из специального каталога ОС Linux, в котором хранятся сертификаты. Подробнее см. здесь. Данный параметр игнорируется, если указан хотя бы один из следующих параметров команды: -file или -none.
- -macos ‑ указывает, что при соединении нужно использовать клиентский сертификат из системного хранилища сертификатов ОС macOS. Данный параметр игнорируется, если указан хотя бы один из следующих параметров команды: -file или -none.
- -recent ‑ выбирать или использовать ранее выбранный клиентский системный сертификат при работе в ОС Windows или macOS.
Данный способ выбора клиентского сертификата выбран по умолчанию для параметра команд –windows и -macos, если параметры -auto и -choose не указаны.
- -auto ‑ использовать автоматически выбранный клиентский сертификат из установленных в системном хранилище сертификатов ОС Windows или macOS. Данный параметр игнорируется, если у команды отсутствует параметр –windows или –macos (соответственно).
- -choose ‑ всегда выбирать используемый клиентский сертификат ОС Windows или macOS.
- -file ‑ указывает, что необходимо использовать клиентский сертификат и приватный ключ из указанного файла. Данный параметр игнорируется, если у команды установлен параметр -none.
- -pwd ‑ указывает пароль файла, содержащего клиентский сертификат и его приватный ключ. Если сервер требует предоставления клиентского сертификата и файл сертификата защищен паролем, то соединение возможно только при правильно указанном пароле. Данный параметр игнорируется, если у данной команды не указан параметр -file.
- -none ‑ указывает, что клиентский сертификат не используется. Соединение возможно только с серверами, не требующими проверки клиентского сертификата.
- -windows ‑ указывает, что для проверки сертификата сервера при соединении нужно использовать сертификаты удостоверяющих центров из системного хранилища сертификатов ОС Windows. Данный параметр игнорируется, если установлен хотя бы один из параметров команды -file или -none.
- -linux ‑ указывает, что для проверки сертификата сервера при соединении необходимо использовать сертификаты удостоверяющих центров из специального каталога ОС Linux, в котором хранятся сертификаты. Подробнее см. здесь. Данный параметр игнорируется, если указан хотя бы один из следующих параметров команды: -file или -none.
- -macos ‑ указывает, что для проверки сертификата сервера при соединении нужно использовать сертификаты удостоверяющих центров из системного хранилища сертификатов ОС macOS. Данный параметр игнорируется, если указан хотя бы один из следующих параметров команды: -file или -none.
- -file ‑ указывает, что для проверки сертификата сервера при соединении нужно использовать сертификаты удостоверяющих центров, загружаемые из указанного файла. Данный параметр игнорируется, если установлен параметр команды -none.
- -pwd ‑ пароль файла, содержащего корневые сертификаты. Если файл сертификата защищен паролем, то соединение возможно только при правильно указанном пароле. Данный параметр игнорируется, если у данной команды не указан параметр -file.
- -none ‑ указывает, что корневые сертификаты не используются, и сертификат сервера не проверяется.
- -tcp ‑ для отладки используется протокол TCP/IP;
- -http ‑ для отладки используется протокол HTTP.
- -Call ‑ указывает величину задержки при вызове сервера в секундах. Если параметр не указан, то значение задержки принимается равной 1.45 секунды.
- -Send ‑ указывает величину задержки в секундах в расчете на каждые 1 Кбайт данных, отправляемых на сервер. Если параметр не указан, то значение задержки принимается равной 0.45 секунды.
- -Recevie ‑ указывает величину задержки в секундах в расчете на каждые 1 Кбайт данных, принятых с сервера. Если параметр не указан, то значение задержки принимается равной 0,15 секунды.
- -TPort ‑ указывает номер сетевого порта для взаимодействия клиента и менеджера тестирования. По умолчанию используется порт 1538. Не используется при запуске в мобильном клиенте.
- -TestClientID ‑ указывает уникальный идентификатор тестируемого клиентского приложения. Параметр используется для веб-клиента или мобильного клиента. Параметр используется в том случае, когда необходимо различить несколько различных клиентов тестирования, одновременно используемых через одно приложение менеджера тестирования. Значение по умолчанию для параметра отсутствует.
- -TURL= ‑ позволяет указать адрес публикации информационной базы для случая запуска клиента тестирования в приложении на мобильной платформе.
- -TPort ‑ указывает номер сетевого порта для взаимодействия клиента и менеджера тестирования. По умолчанию используется порт 1538. Не используется при запуске в мобильном клиенте.
- -File ‑ имя файла, в который будет сохраняться журнал действий пользователя после завершения записи, если к клиенту не подключён менеджер тестирования.
- + ‑ установка новых версий включена.
- – ‑ установка новых версий выключена.
- Если указана внешняя ссылка ‑ выполняется поиск запущенного клиентского приложения с той же строкой соединения, которая указана в параметре. В найденном клиентском приложении не должно быть открыто модальное или блокирующее окно. После этого выполняется попытка перехода по локальной ссылке из исходной навигационной ссылки и активизируется основное окно приложения. В случае неудачи клиентское приложение продолжает работу. Если исходная навигационная ссылка не содержит локальной ссылки (содержит только адрес информационной базы), то попытка перехода не выполняется, активируется основное окно найденного клиентского приложения.
- Если подходящего клиентского приложения не найдено, строка соединения определяется из параметра командной строки /URL.
- Если указана локальная ссылка ‑ клиентское приложение запускается в общем порядке. После запуска выполнится попытка перехода по переданной локальной ссылке.
Во время обработки командной строки, содержимое файла полностью заменит собой командную строку запускаемого приложения. Из этого следует два вывода:
Во время исполнения пакетных команд файл сообщений можно открыть для просмотра. В пакетном режиме запуска запись сообщений в файл не буферизуется (сообщения записываются сразу).
- Конфигурация базы данных не соответствует сохраненной конфигурации. Продолжить?;
- Возможностей Вашего компьютера недостаточно для редактирования справки по конфигурации. Для редактирования справки необходимо установить Microsoft Internet Explorer версии 7.0 или выше.;
- Возможностей Вашего компьютера недостаточно для редактирования html-документов, в том числе разделов справки. Для редактирования html-документов необходимо установить Microsoft Internet Explorer версии 7.0 или выше. В данном запуске редактирование html-документов будет недоступно..
- Если командной строки недостаточно для выбора информационной базы или определения режима запуска.
- Если командной строки недостаточно для авторизации пользователя в информационной базе.
- Если в командной строке ошибочная авторизация в хранилище конфигурации.
- Выполняется попытка создания информационной базы (CREATEINFOBASE), но для кластера серверов задан администратор.
- Если в командной строке отсутствует авторизация в хранилище конфигурации, конфигуратор запускается без связи с хранилищем.
- Окно об ошибке показано не будет.
- При аварийном завершении дамп сформируется в соответствии с настройками в файле logcfg.xml (в ОС Windows) или настройками операционной системы (в ОС Linux и macOS).
- Отчет об ошибке будет отправлен, если настроена автоматическая отправка отчета об ошибке и размер отчета не превышает ограничение на отправку без вопроса о большом размере отчета (5 Мбайт).
- Приложение будет завершено с кодом возврата, отличным от нуля.
- + ‑ поиск ключа защиты выполняется.
- – ‑ поиск ключа защиты не выполняется.
- -JobsCount ‑ количество системных фоновых заданий, используемых для загрузки информационной базы. Значение по умолчанию ‑ 0. В этом случае используется столько фоновых заданий, сколько процессоров на компьютере, выполняющем загрузку информационной базы.
- При расположении кластера серверов системы «1С:Предприятие» и сервера СУБД на одном компьютере.
- Компьютер сервера СУБД и кластера серверов «1С:Предприятие» связан каналом связи с высокой пропускной способностью (1 Гбит и более).
- Восстановление информационной базы не требуется. Это означает, что структура информационной базы не нарушена. Код возврата в этом случае равен 0.
- Информационная база успешно восстановлена. Это означает, что структура информационной базы успешно восстановлена. Код возврата в этом случае равен 0.
- Если в процессе попытки восстановления произошла любая ошибка ‑ текст ошибки будет помещен в файл и код возврата в этом случае равен 1.
- ‑ имя файла с объединяемой конфигурацией (cf-файл) или расширением (cfe-файл).
- -Settings ‑ позволяет указать имя файла с настройками объединения конфигураций. Формат и описание файла настроек объединения см. здесь.
- -EnableSupport ‑ поставить конфигурацию на поддержку, если есть возможность объединить с постановкой на поддержку. Правила поддержки в этом случае должны быть указаны в файле настроек.
- -DisableSupport ‑ не выполнять постановку на поддержку, даже если есть такая возможность.
- -IncludeObjectsByUnresolvedRefs ‑ если в настройках объединения есть объекты, не включенные в список объединяемых и отсутствующие в основной конфигурации, но на которые есть ссылки из объектов, включенных в список, то такие объекты также помечаются для объединения, и выполняется попытка продолжить объединение. Попытки выполняются, пока не останется объектов со ссылками на не включенные объекты, либо пока не выберется вся конфигурация. Аналогично кнопке Пометить все для объединения в окне с неразрешенными ссылками, только с повторением попыток (подробнее см. здесь).
- -ClearUnresolvedRefs ‑ ссылки на объекты, которые не включены в список объединяемых объектов, будут очищены. Аналогично кнопке Продолжить в окне с неразрешенными ссылками (подробнее см. здесь).
- -Extension ‑ имя расширения, с которым будет выполняться объединение.
- -force ‑ проводить объединение в случае наличия:
- предупреждений об удаляемых объектов, на которые есть ссылки в объектах, не участвующих в объединении (такие объекты будут исключены из объединения);
- предупреждений о применении настроек.
Если одновременно указан какой-либо из параметров -EnableSupport или -DisableSupport и параметр -Extension, то объединение будет прервано с ошибкой. Если есть возможность поставить конфигурацию на поддержку, и не указан параметр -EnableSupport или -DisableSupport, то объединение будет прервано с ошибкой. Если возможности поставить конфигурацию на поддержку нет, но указан параметр -EnableSupport или -DisableSupport, то объединение также будет прервано с ошибкой.
- Новые объекты поставщика:
- Объекты с правилом поставщика Изменения разрешены ‑ устанавливается правило поддержки Объект поставщика не редактируется.
- Объекты с правилом поставщика Изменения не рекомендуются ‑ устанавливается правило поддержки Объект поставщика не редактируется.
- Объекты с правилом поставщика Изменения разрешены ‑ устанавливается правило поддержки Объект поставщика не редактируется.
- Объекты с правилом поставщика Изменения не рекомендуются ‑ устанавливается правило поддержки Объект поставщика не редактируется.
- Объекты с правилом поставщика Изменения разрешены ‑ устанавливается правило поддержки Объект редактируется с сохранением поддержки.
- Объекты с правилом поставщика Изменения не рекомендуются ‑ устанавливается правило поддержки Объект редактируется с сохранением поддержки.
- –FirstConfigurationType ‑ тип первой конфигурации для сравнения. Параметр может принимать следующие значения:
- MainConfiguration ‑ основная конфигурация;
- DBConfiguration ‑ конфигурация базы данных;
- VendorConfiguration ‑ конфигурация поставщика;
- ExtensionConfiguration ‑ расширение конфигурации;
- ExtensionDBConfiguration ‑ расширение конфигурации из база данных;
- ConfigurationRepository ‑ конфигурация из хранилища конфигурации;
- ExtensionConfigurationRepository ‑ расширение конфигурации из хранилища конфигурации;
- File ‑ файл конфигурации/расширения конфигурации.
Для остальных значение параметра /FirstConfigurationType данный параметр не применим.
- ByObjectName ‑ по именам объектов. Используется по умолчанию.
- ByObjectIDs ‑ по внутренним идентификаторам.
- Brief ‑ краткий отчет;
- Full ‑ полный отчет.
- txt ‑ текстовый документ;
- mxl ‑ табличный документ.
Следует понимать, что механизм фонового обновления не связан с выбором механизма реструктуризации. Если указано выполнение фонового обновления, то выбор варианта механизма реструктуризации (-v1|-v2) будет проигнорировано.
Допустимо использовать следующих параметров:
- -Dynamic ‑ признак использования динамического обновления. Режим может принимать следующие значения:
- – ‑ явно запрещает динамическое обновление.
- + ‑ разрешает динамическое обновление. Вначале выполняется попытка выполнить обычное обновление, если попытка не удалась ‑ происходит попытка выполнить динамическое обновление. Динамическое обновление будет разрешено также без указания параметра –Dynamic+ или при использовании параметра -Dynamic без указания режима.
- Фаза актуализации всегда выполняется на сервере.
- Фаза обработки и фаза принятия изменений могут выполняться как на клиенте, так и на сервере.
- Допускается запуск фонового обновления на стороне клиента, а завершение на стороне сервера (как и наоборот).
- Не используется оптимизированный механизм реструктуризации (игнорируется команда -v2, если таковая указана).
- disable ‑ не использовать принудительное завершение сеансов. Значение по умолчанию.
- force ‑ принудительно завершать сеансы.
- Если в командной строке стоит явное указание на используемый механизм реструктуризации ‑ будет использован указанный механизм.
- Если в командной строке отсутствует указание на используемый механизм реструктуризации ‑ будет использован механизм реструктуризации, заданный параметром UpdateDBCfg файла conf.cfg (на стороне клиентского приложения).
- В любом случае команда –Server указывает, что реструктуризация будет выполняться на сервере. Эта команда не оказывает влияния на выбор используемого механизма реструктуризации.
- /LoadCfg;
- /UpdateCfg;
- /ConfigurationRepositoryUpdateCfg;
- /LoadConfigFiles;
- /LoadConfigFromFiles;
- /MobileAppUpdatePublication;
- /MobileAppWriteFile;
- /MobileClientDigiSign;
- /MobileClientWriteFile.
- -Extension ‑ выводит имя указанного расширения.
- -AllExtensions ‑ выводит имена всех расширений.
- ‑ каталог расположения файлов свойств;
- -Module ‑ признак необходимости выгрузки модулей;
- -Template ‑ признак необходимости выгрузки макетов;
- -Help ‑ признак необходимости выгрузки справочной информации;
- -AllWritable ‑ признак выгрузки свойств только доступных для записи объектов;
- -Picture ‑ признак выгрузки общих картинок;
- -Right ‑ признак выгрузки прав.
- -Extension ‑ выгрузка будет выполнена для указанного расширения.
- ‑ каталог расположения файлов свойств;
- -Module ‑ признак необходимости загрузки модулей;
- -Template ‑ признак необходимости загрузки макетов;
- -Help ‑ признак необходимости загрузки справочной информации;
- -AllWritable ‑ признак загрузки свойств только доступных для записи объектов;
- -Picture ‑ признак загрузки общих картинок;
- -Right ‑ признак загрузки прав.
- -Extension ‑ загрузка будет выполнена в указанное расширение. Если расширение подключено к хранилищу, то загружаемые объекты должны быть захвачены в хранилище.
- -Format ‑ определяет формат выгрузки конфигурации в файлы:
- Plain ‑ плоский формат;
- Hierarchical ‑ иерархический формат (подробнее см. здесь). Используется по умолчанию.
- -force ‑ если текущая версия формата выгрузки не совпадает с версией формата в файле версий, будет выполнена полная выгрузка.
- -configDumpInfoForChanges ‑ если текущий каталог выгрузки перед началом работы не пустой, будет сгенерирована ошибка. Соответствие текущей версии формата выгрузки и версии формата выгрузки в файле версий не проверяется. При выгрузке генерируется новый файл версий. Файл, указанный в параметре -configDumpInfoForChanges не изменяется.
- -force ‑ выполнить полную выгрузку в том случае, если при попытке обновления выгрузки было обнаружено, что текущая версия формата выгрузки не совпадает с версией формата, записанной в файл версий (ConfigDumpInfo.xml). Используется только совместно с параметром -update. В остальных случаях игнорируется.
- -getChanges ‑ в указанном файле будет сформирован список изменений текущей конфигурации относительно выгрузки и, соответственно, файла версий, каталог которой указан параметром команды /DumpConfigToFiles. Для данного параметра имя файла является обязательным.
- -configDumpInfoForChanges ‑ указывает файл версий (ConfigDumpInfo.xml), который будет использован для сравнения изменений. Для данного параметра указание полного имени файла версий является обязательным.
Данный параметр используется только совместно с параметрами -update и -getChanges. - -listFile ‑ указывает файл со списком объектов, которые будут выгружены независимо от того, были ли они изменены или нет. Для данного параметра имя файла является обязательным.
Если объект из списка имеет подчиненные объекты, не являющиеся отдельными объектами разработки, но имеющие внешние свойства, то внешние свойства таких объектов также будут выгружены.
В файле, содержащем имена объектов для выгрузки, можно указать идентификатор Configuration, являющийся эквивалентом корня конфигурации. Если в файле присутствует идентификатор Configuration, за которым не следует имя корневого объекта конфигурации, то при выгрузке этот идентификатор будет эквивалентен полному имени корневого объекта конфигурации, т. е. запись вида Configuration.Help эквивалентна записи Configuration.ИмяКонфигурации.Help.
- Configuration.Help
- Configuration.ИмяКонфигурации.Splash
- -configDumpInfoOnly ‑ указанием данного параметра приводит к тому, что при выгрузке формируется только файл версий (ConfigDumpInfo.xml). Если в командной строке будет указан параметр -format, то файл версии будет сформирован для указанного формата выгрузки. По умолчанию файл версий формируется для иерархического формата выгрузки.
-
-Server ‑ указывает на необходимость выполнить выгрузку конфигурации в файлы на стороне сервера «1С:Предприятия». В этом случае выгрузка будет выполняться в многопоточном режиме (и будет выполняться быстрее). Для данной команды есть необязательный параметр:
- -Archive ‑ позволяет выполнить выгрузку конфигурации в файл zip-архива. Этот параметр может использоваться для полной выгрузки, частичной выгрузки, выгрузке только файла текущего состояния (указан параметр -configDumpInfoOnly), выгрузки всех расширений конфигурации (указан параметр –AllExtensions).
- -ignoreUnresolvedReferences ‑ в выгрузке конфигурации не выгружаются ссылки к недостижимым объектам, т. е. к таким объектам, которые были удалены в одной из предыдущих версий конфигурации.
- Недостижимые ссылки на команды в управляемых формах заменяются на ссылку по умолчанию.
- Недостижимые ссылки на группы команд в управляемых формах не выгружаются.
- Недостижимые пути к данным в формах не выгружаются.
- Недостижимые ссылки на предопределенные элементы не выгружаются.
- Недостижимые ссылки в связях параметров выбора объектов метаданных не выгружаются.
- Недостижимые ссылки в связях по типу объектов метаданных не выгружаются.
- Недостижимые ссылки на команды в командном интерфейсе подсистем не выгружаются.
- Недостижимые ссылки на группы команд в командном интерфейсе подсистем заменяются на ПанельНавигацииОбычное.
- -Extension ‑ выполняется загрузка указанного расширения. Если расширения нет ‑ оно создается. Если расширение подключено к хранилищу, то полная загрузка для такого расширения не поддерживается. Возможна частичная загрузка, если загружаемые объекты захвачены в хранилище конфигурации расширения.
- -AllExtensions ‑ выполняется загрузка расширений из файлов. Каждый подкаталог в указанном каталоге считается расширением. Параметр несовместим с параметрами –files или -listFile.
- -files ‑ указывает, какие файлы должны быть загружены при частичной загрузке конфигурации из файлов. Каждый файл может быть указан как с полным путем, так и с путем, указанным относительно каталога загрузки. Список файлов должен быть указан в кавычках, файлы перечисляются через запятую. Параметр не совместим с параметром –AllExtensions.
- -listFile ‑ описывает файл, который содержит список загружаемых файлов. Файлы в списке перечисляются по одному имени файла на строку, каждое имя может быть как полным (с указанием полного пути к файлу), так и с указанием пути относительно каталога загрузки. Строки должны разделяться переводом строки. Перевод строки поддерживается как в варианте Windows, так и в варианте Linux. Файл ожидается в кодировке UTF-8. Пустые строки не поддерживаются. Строка может быть пропущена, если начинается с REM. Параметр не совместим с параметром –AllExtensions.
- -Format ‑ определяет формат выгрузки конфигурации в файлы:
- Plain ‑ плоский формат;
- Hierarchical ‑ иерархический формат (подробнее см. здесь). Используется по умолчанию.
Параметр используется только в сочетании с параметрами -files или -listFile.
Для получения идентификатора следует обязательно указывать команду /Out командной строки запуска конфигуратора. Идентификатор будет иметь следующий вид: 4d8d1d994cd4534c9accd32a5b44b35300000000. Для пустой информационной базы идентификатор будет иметь следующий вид: 0000000000000000000000000000000000000000.
- –Extension ‑ выполняется получение идентификатора метаданных указанного расширения. Если параметр не указан ‑ идентификатор получается для основной конфигурации.
- -ThinClient ‑ проверка в режиме работы тонкого клиента;
- -WebClient ‑ проверка в режиме работы веб-клиента;
- -MobileClient ‑ проверка в режиме работы мобильного клиента;
- -MobileAppClient ‑ проверка в режиме работы клиента мобильного приложения;
- -MobileClientStandalone ‑ проверка в режиме работы мобильного клиента, работающего в автономном режиме.
- -Server ‑ проверка в режиме работы сервера «1С:Предприятия»;
- -MobileAppServer ‑ проверка в режиме работы сервера мобильного приложения;
- -ExternalConnection ‑ проверка в режиме работы внешнего соединения;
- -ThickClientOrdinaryApplication ‑ проверка в режиме работы клиентского приложения;
- -ExtendedModulesCheck ‑ проверка обращений к методам и свойствам объектов «через точку» (для ограниченного набора типов); проверка правильности строковых литералов ‑ параметров некоторых функций, таких как ПолучитьФорму().
- -Extension ‑ выполнить заданные проверки для указанного расширения.
- -AllExtensions ‑ выполнить заданные проверки для всех расширений.
- -ConfigLogIntegrity ‑ проверка логической целостности конфигурации. Стандартная проверка, обычно выполняемая перед обновлением базы данных;
- -IncorrectReferences ‑ поиск некорректных ссылок. Поиск ссылок на удаленные объекты. Выполняется по всей конфигурации, включая права, формы, макеты, интерфейсы и т. д. Также осуществляется поиск логически неправильных ссылок;
- -ThinClient ‑ синтаксический контроль модулей для режима эмуляции среды управляемого приложения (тонкий клиент), выполняемого в файловом режиме;
- -WebClient ‑ синтаксический контроль модулей в режиме эмуляции среды веб-клиента;
- -MobileClient ‑ синтаксический контроль модулей в режиме эмуляции среды мобильного клиента;
- -MobileClientStandalone ‑ синтаксический контроль модулей в режиме эмуляции среды мобильного клиента, работающего в автономном режиме;
- -Server ‑ синтаксический контроль модулей в режиме эмуляции среды сервера «1С:Предприятия»;
- -ExternalConnection ‑ синтаксический контроль модулей в режиме эмуляции среды внешнего соединения, выполняемого в файловом режиме;
- -ExternalConnectionServer ‑ синтаксический контроль модулей в режиме эмуляции среды внешнего соединения, выполняемого в клиент-серверном режиме;
- -MobileAppClient ‑ синтаксический контроль модулей в режиме эмуляции среды мобильной платформы, выполняемой в клиентском режиме запуска;
- -MobileAppServer ‑ синтаксический контроль модулей в режиме эмуляции среды мобильной платформы, выполняемой в серверном режиме запуска;
- -ThickClientManagedApplication ‑ синтаксический контроль модулей в режиме эмуляции среды управляемого приложения (толстый клиент), выполняемого в файловом режиме;
- -ThickClientServerManagedApplication ‑ синтаксический контроль модулей в режиме эмуляции среды управляемого приложения (толстый клиент), выполняемого в клиент-серверном режиме;
- -ThickClientOrdinaryApplication ‑ синтаксический контроль модулей в режиме эмуляции среды обычного приложения (толстый клиент), выполняемого в файловом режиме;
- -ThickClientServerOrdinaryApplication ‑ синтаксический контроль модулей в режиме эмуляции среды обычного приложения (толстый клиент), выполняемого в клиент-серверном режиме;
- -DistributiveModules ‑ поставка модулей без исходных текстов. В случае если в настройках поставки конфигурации для некоторых модулей указана поставка без исходных текстов, проверяется возможность генерации образов этих модулей;
- -UnreferenceProcedures ‑ поиск неиспользуемых процедур и функций. Поиск локальных (не экспортных) процедур и функций, на которые отсутствуют ссылки. В том числе осуществляется поиск неиспользуемых обработчиков событий;
- -HandlersExistence ‑ проверка существования назначенных обработчиков. Проверка существования обработчиков событий интерфейсов, форм и элементов управления;
- -EmptyHandlers ‑ поиск пустых обработчиков. Поиск назначенных обработчиков событий, в которых не выполняется никаких действий. Существование таких обработчиков может привести к снижению производительности системы;
- -ExtendedModulesCheck ‑ проверка обращений к методам и свойствам объектов «через точку» (для ограниченного набора типов); проверка правильности строковых литералов ‑ параметров некоторых функций, таких как ПолучитьФорму();
- -CheckUseModality ‑ режим поиска использования в модулях методов, связанных с модальностью. Параметр используется только вместе с параметром -ExtendedModulesCheck.
- -CheckUseSynchronousCalls ‑ режим поиска использования в модулях синхронных методов. Параметр используется только вместе с параметром -ExtendedModulesCheck.
- -UnsupportedFunctional ‑ выполняется поиск функциональности, которая не может быть выполнена в приложении для мобильного устройства. Проверка в этом режиме показывает:
- наличие в конфигурации метаданных, классы которых не реализованы на мобильной платформе;
- наличие в конфигурации планов обмена, у которых установлено свойство Распределенная информационная база;
- использование типов, которые не реализованы на мобильной платформе:
- в свойствах Тип реквизитов метаданных, констант, параметров сеанса;
- в свойстве Тип параметра команды объекта конфигурации Команда;
- в свойстве Тип реквизитов и колонок реквизита формы;
- наличие форм с типом формы Обычная;
- наличие в форме элементов управления, которые не реализованы на мобильной платформе. Проверка не выполняется для форм, у которых свойство Назначения использования не предполагает использование на мобильном устройстве;
- сложный состав рабочего стола (использование более чем одной формы).
Допустимо использовать следующие параметры:
- -Extension ‑ выполнить проверку для указанного расширения с учетом всех ранее загружаемых расширений. Если имя расширения не указано, то проверяются все расширения в порядке загрузки.
- -AllZones ‑ необходимо проверить расширение во всех областях данных текущей информационной базы.
- Не поддерживается совместное использование параметров -Extension и –AllZones, а также –Z и –AllZones.
- Результат проверки применимости расширений для каждой области предваряется выводом -Z с указанием значений разделителей для проверяемой области.
- -ReIndex ‑ реиндексация таблиц.
- -LogIntegrity ‑ проверка логической целостности. Если параметр указан без значений, то выполняется проверка логической целостности всех таблиц информационной базы. Имеется возможность выбрать проверяемые таблиц, указав их (через запятую) в качестве значения параметра. Список проверяемых таблиц приводится далее в тексте.
- -LogAndRefsIntegrity ‑ проверка логической и ссылочной целостности. Если параметр указан без значений, то выполняется проверка логической и ссылочной целостности всех таблиц информационной базы. Имеется возможность выбрать проверяемые таблиц, указав их (через запятую) в качестве значения параметра. Список проверяемых таблиц приводится далее в тексте.
- -RecalcTotals ‑ пересчет итогов.
- -IBCompression ‑ сжатие таблиц. Для файлового варианта также выполняется специальная оптимизация, описание которой см. здесь.
- -Rebuild ‑ реструктуризация таблиц информационной базы.
- -RebuildStandaloneCfg ‑ пересоздать конфигурацию, предназначенную для работы в мобильном клиенте с автономным режимом.
- -TestOnly ‑ выполнять только тестирование информационной базы. В том случае, если выполняется тестирование и исправление информационной базы (отсутствует параметр –TestOnly), можно указывать следующие параметры:
- -BadRefCreate ‑ создавать объекты;
- -BadRefClear ‑ очищать объекты;
- -BadRefNone ‑ не изменять при частичной потере объектов.
При частичной потере информации об объектах:
- -BadDataCreate ‑ создавать объекты;
- -BadDataDelete ‑ удалять объекты.
- Бизнес-процессы - BusinessProcesses
- Документы - Documents
- Другие объекты - Other
- Журнал документов - DocumentJournals
- Задачи - Tasks
- Константы - Constants
- Планы видов расчета - ChartsOfCalculationTypes
- Планы видов характеристик - ChartsOfCharacteristicTypes
- Планы обмена - ExchangePlans
- Планы счетов - ChartsOfAccounts
- Регистры бухгалтерии - AccountingRegisters
- Регистры накопления - AccumulationRegisters
- Регистры расчета - CalculationRegisters
- Регистры сведений - InformationRegisters
- Справочники - Catalogs
- ‑ имя файла с объединяемой конфигурацией (.cf-файл) или с файлом обновления конфигурации (.cfu-файл).
- -Settings ‑ позволяет указать имя файла с настройками объединения конфигураций.
- -IncludeObjectsByUnresolvedRefs ‑ если в настройках объединения есть объекты, не включенные в список объединяемых и отсутствующие в основной конфигурации, но на которые есть ссылки из объектов, включенных в список, то такие объекты также помечаются для объединения, и выполняется попытка продолжить объединение. Попытки выполняются, пока не останется объектов со ссылками на не включенные объекты, либо пока не выберется вся конфигурация. Аналогично кнопке Пометить все для объединения в окне с неразрешенными ссылками, только с повторением попыток.
- -ClearUnresolvedRefs ‑ ссылки на объекты, не включенные в список объединяемых объектов, очищаются. Аналогично кнопке Продолжить в окне с неразрешенными ссылками.
- -DumpListOfTwiceChangedProperties ‑ вывести список всех дважды измененных свойств в файл для вывода служебных сообщений.
- -force ‑ проводить объединение в случае наличия:
- предупреждений об удаляемых объектах, на которые есть ссылки в объектах, не участвующих в объединении (такие объекты будут исключены из объединения).
- предупреждений о наличии дважды измененных свойств, для которых не был выбран режим объединения (такие свойства будут объединены с настройками по умолчанию).
- объектов, изменение которых запрещено правилами поддержки (такие объекты будут исключены из объединения).
- предупреждений о применении настроек.
- -disableSupport ‑ указывает на необходимость снятия конфигурации с поддержки. При отсутствии параметра генерируется ошибка.
- -force ‑ выполнить снятие конфигурации с поддержки даже в том случае, если в конфигурации запрещены изменения. При отсутствии параметра будет сгенерирована ошибка, если попытка снятия с поддержки будет выполняться для конфигурации, для которой в интерактивном режиме управления поддержкой запрещены изменения.
- ‑ имя файла списка шаблонов конфигураций. Если не указано, создается в заданном каталоге с именем по умолчанию, если указано только имя создается с указанным именем в заданном каталоге. При указании полного пути используется данный путь;
- -TemplatesSourcePath ‑ путь для поиска файлов шаблонов конфигураций. Если не задан, берется путь, установленный в системе в диалоге настройке при запуске.
- ‑ указание каталога создания комплекта поставки или файлов комплекта поставки.
- -File ‑ указание файла описания комплекта поставки.
- -PackageFileName ‑ имя файла с zip-архивом комплекта поставки. Архив будет создан в . Используется только совместно с параметром -MakeSetup. Если переданное имя файла не имеет расширения «.zip», то оно будет добавлено автоматически. Если параметр не указан, то будет использоваться имя по умолчанию: updsetup.zip.
- -Option ‑ создать вариант поставки из описания комплекта поставки. По умолчанию используется вариант поставки Полный.
- -MakeSetup ‑ создавать комплект поставки.
- -MakeFiles ‑ создавать файлы комплекта поставки.
- -digisign ‑ указание параметров лицензирования рабочего места пользователя.
- -WarningAsError ‑ при указании данного параметра несоответствие цифровой подписи мобильного клиента текущим метаданным трактуется как ошибка с прерыванием процесса. Если параметр не задан ‑ несоответствие подписи и конфигурации не считается ошибкой и процесс не прерывается.
- -cffile ‑ указание создать файл поставки;
- -cfufile ‑ указание создать файл обновления;
- -f ‑ дистрибутив, включаемый в обновление, задан именем;
- -v ‑ дистрибутив, включаемый в обновление, задан версией;
- -digisign ‑ указание параметров лицензирования рабочего места пользователя.
- -WarningAsError ‑ при указании данного параметра несоответствие цифровой подписи мобильного клиента текущим метаданным трактуется как ошибка с прерыванием процесса. Если параметр не задан ‑ несоответствие подписи и конфигурации не считается ошибкой и процесс не прерывается.
Выполнить создание комплектов поставки и файлов комплектов поставки по готовому описанию комплекта поставки. В том случае, если для конфигурации задана подпись мобильного клиента, то перед выполнением команды выполняется проверка того, что установленная подпись соответствует текущим метаданным конфигурации. Если подпись конфигурации не соответствует конфигурации, то формируется диагностическое сообщение, а дальнейшее поведение системы определяется наличием параметра -WarningAsError.
- ‑ указание каталога создания комплекта поставки или файлов комплекта поставки;
- -File ‑ указание файла описания комплекта поставки;
- -Option ‑ создать вариант поставки из описания комплекта поставки. По умолчанию используется вариант поставки Полный;
- -MakeSetup ‑ создавать комплект поставки;
- -MakeFiles ‑ создавать файлы комплекта поставки;
- -digisign ‑ указание параметров лицензирования рабочего места пользователя.
- -WarningAsError ‑ при указании данного параметра несоответствие цифровой подписи мобильного клиента текущим метаданным трактуется как ошибка с прерыванием процесса. Если параметр не задан ‑ несоответствие подписи и конфигурации не считается ошибкой и процесс не прерывается.
Допустимо указывать следующие каталоги и использовать следующие параметры:
- -ConfigurationType ‑ местоположение подписываемого расширения конфигурации. Параметр может принимать следующие значения:
- ExtensionConfiguration ‑ расширение конфигурации.
- ExtensionDBConfiguration ‑ расширение конфигурации, расположенное в базе данных.
- ExtensionConfigurationRepository ‑ расширение конфигурации, расположенное в хранилище расширения конфигурации.
- File ‑ файл расширения конфигурации.
- ‑ содержит полный путь к корневому каталогу выгрузки. Обязательный параметр.
- ‑ полный путь к внешней обработке (отчету) в формате .epf (.erf).
- -Format ‑ указывает формат выгрузки:
- Plain ‑ линейный формат;
- Hierarchical ‑ иерархический формат (по умолчанию).
- ‑ содержит полный путь к корневому каталогу, который содержит внешнюю обработку (отчет) в файлах формата XML. Обязательный параметр.
- ‑ полный путь к внешней обработке (отчету) в формате .epf (.erf), которая получится в результате загрузки. Расширение результирующего файла будет определено автоматически, на основании XML-файлов. Если в командной строке расширение указано неверно ‑ оно будет автоматически заменено на нужное расширение.
- Date ‑ новая граница журнала регистраций в формате ГГГГ-ММ-ДД;
- -saveAs ‑ параметр для сохранения копии выгружаемых записей;
- -KeepSplitting ‑ требуется сохранить разделение на файлы по периодам.
- -Auto ‑ фактическое значение вычисляется автоматически (значение по умолчанию). Для главного узла информационной базы ‑ значение будет равно -UpdateAutomatically, для периферийного узла информационной базы будет равно -DoNotUpdateAutomatically.
- -UpdateAutomatically ‑ при реструктуризации информационной базы будет выполняться автоматическое создание предопределенных элементов и обновление существующих значений.
- -DoNotUpdateAutomatically ‑ при реструктуризации информационной базы не будет выполняться автоматическое создание новых предопределенных элементов и обновление их значений.
- -AllowConfigurationChanges ‑ если конфигурация находится на поддержке без возможности изменения, будет включена возможность изменения.
- -ChangesAllowedRule ‑ устанавливает правило поддержки для объектов, для которых изменения разрешены поставщиком. Может быть установлено одно из следующих правил:
- ObjectNotEditable ‑ объект поставщика не редактируется,
- ObjectIsEditableSupportEnabled ‑ объект поставщика редактируется с сохранением поддержки,
- ObjectNotSupported ‑ объект поставщика снят с поддержки.
- ObjectNotEditable ‑ Объект поставщика не редактируется,
- ObjectIsEditableSupportEnabled ‑ Объект поставщика редактируется с сохранением поддержки,
- ObjectNotSupported ‑ Объект поставщика снят с поддержки.
- -User ‑ имя создаваемого пользователя.
- -Pwd ‑ пароль создаваемого пользователя.
- -Rights ‑ права пользователя. Возможные значения:
- ReadOnly ‑ право на просмотр,
- LockObjects ‑ право на захват объектов,
- ManageConfigurationVersions ‑ право на изменение состава версий,
- Administration ‑ право на административные функции.
- -Path ‑ путь к хранилищу, из которого выполняется копирование пользователей.
- -User ‑ имя пользователя хранилища, из которого выполняется копирование пользователей.
- -Pwd ‑ пароль пользователя хранилища, из которого выполняется копирование пользователей.
- -RestoreDeletedUser ‑ если обнаружен удаленный пользователь с таким же именем, он будет восстановлен.
- -Extension ‑ позволяет указать имя расширения, с хранилищем которого будет выполняться команда. Если параметр не указан ‑ операция будет выполняться с хранилищем основной конфигурации.
- -Objects ‑ путь к файлу со списком объектов, которые будут участвовать в операции. Если файл указан ‑ в операции участвуют только указанные в файле объекты, в противном случае участвует вся конфигурация. Описание формата файла см. здесь.
- -revised ‑ получать захваченные объекты, если потребуется.
- -Extension ‑ позволяет указать имя расширения, с хранилищем которого будет выполняться команда. Если параметр не указан ‑ операция будет выполняться с хранилищем основной конфигурации.
- 0 ‑ нет ошибок.
- 1 ‑ есть ошибки. Текст ошибки выводится в файл служебных сообщений.
- -Objects ‑ путь к файлу со списком объектов, которые будут участвовать в операции. Если файл указан ‑ в операции участвуют только указанные в файле объекты, в противном случае участвует вся конфигурация. Описание формата файла см. здесь.
- -force ‑ описывает поведение с локально измененными объектами:
- Параметр указан ‑ локально измененные объекты будут получены из хранилища. Изменения будут потеряны.
- Параметр не указан ‑ при наличии локально измененных объектов будет выдана ошибка, и операция будет отменена целиком, для всех объектов, участвующих в операции.
- 0 ‑ нет ошибок.
- 1 ‑ есть ошибки. Текст ошибки выводится в файл служебных сообщений.
Допустимо использовать следующие параметры:
- -Objects ‑ путь к файлу со списком объектов, которые будут участвовать в операции. Если файл указан ‑ в операции участвуют только указанные в файле объекты, в противном случае участвует вся конфигурация. Описание формата файла см. здесь.
- -comment ‑ текст комментария к помещаемым объектам. Должен быть в двойных кавычках. Для задания многострочного комментария, каждая строка должна задаваться с помощью своего параметра -comment.
- -keepLocked ‑ оставлять помещенные объекты захваченными. Если не указан, то после помещения изменений будет отменен захват для объектов, участвующих в операции.
- -force ‑ описывает поведение при обнаружении ссылок на удаленные объекты:
- Параметр указан ‑ будет выполнена попытка очистки ссылок.
- Параметр не указан ‑ будет выдана ошибка.
- 0 ‑ нет ошибок.
- 1 ‑ есть ошибки. Текст ошибки выводится в файл служебных сообщений.
- -forceBindAlreadyBindedUser ‑ выполняет подключение даже в том случае, если для данного пользователя уже есть конфигурация, связанная с данным хранилищем.
- -forceReplaceCfg ‑ если конфигурация непустая, данный параметр подтверждает замену конфигурации на конфигурацию из хранилища.
- -Extension ‑ позволяет указать имя расширения, с хранилищем которого будет выполняться команда. Если параметр не указан ‑ операция будет выполняться с хранилищем основной конфигурации.
- -force ‑ параметр предназначен для пропуска диалога аутентификации (если не указаны параметры пользователя хранилища), а также для игнорирования наличия захваченных и измененных объектов.
- -Extension ‑ параметр позволяет указать имя расширения, с хранилищем которого будет выполняться команда. Если параметр не указан ‑ операция будет выполняться с хранилищем основной конфигурации.
- -v ‑ номер версии, если номер версии не указан, или равен -1, будет сохранена последняя версия.
- -Extension ‑ позволяет указать имя расширения, с хранилищем которого будет выполняться команда. Если параметр не указан ‑ операция будет выполняться с хранилищем основной конфигурации.
- -v ‑ номер версии в хранилище конфигурации. В том случае, если конфигурация подключена к хранилищу, то номер версии (если он указан) игнорируется и будет получена актуальная версия конфигурации хранилища. Если конфигурация не подключена к хранилищу, то выполняется получение указанной версии, а если версия не указана (или значение равно -1) ‑ будет получена актуальная версия конфигурации;
- -revised ‑ получать захваченные объекты, если потребуется. Если конфигурация не подключена к хранилищу, то параметр игнорируется;
- -force ‑ если при пакетном обновлении конфигурации из хранилища должны быть получены новые объекты конфигурации или удалиться существующие, указание этого параметра свидетельствует о подтверждении пользователем описанных выше операций. Если параметр не указан ‑ действия выполнены не будут.
- -Objects ‑ путь к файлу со списком объектов, которые будут участвовать в операции. Если файл указан ‑ в операции участвуют только указанные в файле объекты, в противном случае участвует вся конфигурация. Описание формата файла см. здесь.
- -Extension ‑ позволяет указать имя расширения, с хранилищем которого будет выполняться команда. Если параметр не указан ‑ операция будет выполняться с хранилищем основной конфигурации.
- -v ‑ номер версии хранилища, для которого устанавливается метка. Если версия не указана, метка ставится для самой последнее версии хранилища. Если указана несуществующая версия, выдается ошибка.
- -name ‑ текст метки в двойных кавычках.
- -comment ‑ текст комментария к устанавливаемой метки. Должен быть в двойных кавычках. Для задания многострочного комментария, каждая строка должна задаваться с помощью своего параметра -comment.
- -Extension ‑ позволяет указать имя расширения, с хранилищем которого будет выполняться команда. Если параметр не указан ‑ операция будет выполняться с хранилищем основной конфигурации.
- 0 ‑ нет ошибок.
- 1 ‑ есть ошибки. Текст ошибки выводится в файл служебных сообщений.
- ‑ имя файла, в который выводится отчет.
- -NBegin ‑ номер сохраненной версии, от которой начинается строиться отчет. Если значение параметра равно -1, то отчет строится для последней версии в хранилище.
- -NEnd ‑ номер сохраненной версии, по которую строится отчет.
- -DateBegin ‑ дата, начиная с которой формируется отчет по хранилищу. Для формирования даты используется синтаксис строки, передаваемой конструктору типа Дата встроенного языка.
- -DateEnd ‑ дата, по которую формируется отчет по хранилищу. Для формирования даты используется синтаксис строки, передаваемой конструктору типа Дата встроенного языка.
- -GroupByObject ‑ признак формирования отчета по версиям с группировкой по объектам.
- -GroupByComment ‑ признак формирования отчета по версиям с группировкой по комментарию.
- -DoNotIncludeVersionsWithLabels ‑ позволяет не включать в отчет версии хранилища, с установленными метками.
- -IncludeOnlyVersionsWithLabels ‑ позволяет включать в отчет только версии хранилища, с установленными метками. Данный параметр игнорируется, если в командной строке указан параметр -DoNotIncludeVersionsWithLabels.
- -IncludeCommentLinesWithDoubleSlash ‑ включает в отчет строки комментариев (начинающиеся с символов «//»).
- -ConfigurationVersion ‑ позволяет указать версию конфигурации, для которой формируется отчет по хранилищу.
- -ReportFormat
‑ задает формат файла с отчетом: тестовый файл (txt) или табличный документ «1С:Предприятие» (mxl). По умолчанию используется формат MXL. - -Extension ‑ позволяет указать имя расширения, с хранилищем которого будет выполняться команда. Если параметр не указан ‑ операция будет выполняться с хранилищем основной конфигурации.
- Для ОС Windows: %LOCALAPPDATA%\1C\1cv8\host_id.
- Для ОС Linux: ~/.1cv8/1C/1cv8/host_id.
- Для ОС macOS: ~/.1cv8/1C/1cv8/host_id.
Если задан каталог, осуществляется конвертация всех доступных документов в указанном каталоге и вложенных каталогах. Для успешной конвертации файлы должны быть доступны для записи. Если указанный в качестве параметра файл недоступен для записи, выдается сообщение об ошибке.
В случае режима работы с каталогом, недоступные для записи файлы пропускаются без выдачи сообщений об ошибке.
- -AllUsers ‑ выполняется регистрация для всех пользователей компьютера. Если прав для такой регистрации у пользователя недостаточно, то сообщается об ошибке. Если указан параметр /Out , сообщение выводится в файл, в противном случае ‑ на экран пользователю.
- -CurrentUser ‑ выполняется регистрация для текущего пользователя.
- -Auto ‑ выполняется регистрация для всех пользователей компьютера, если есть права и для текущего пользователя, если прав нет, без диалогов.
- есть привилегии на регистрацию для всего компьютера ‑ объект регистрируется для компьютера;
- недостаточно привилегий на регистрацию для всего компьютера ‑ задается вопрос о необходимости выполнении регистрации для текущего пользователя.
- Имя параметра ‑ имя параметра;
- Значение ‑ его значение.
- Y ‑ получать клиентскую лицензию через сервер «1С:Предприятия». Если клиентское приложение не получило программную лицензию или аппаратную лицензию из локального ключа HASP или из сетевого ключа HASP, то производится попытка получения клиентской лицензии через сервер 1С:Предприятия.
- N ‑ не получать клиентскую лицензию через сервер 1С:Предприятия. Значение по умолчанию.
- ‑ не обязателен, поддерживается только протокол TCP,
- ‑ имя сервера или IP-адрес сервера в форматах IPv4 или IPv6,
- ‑ не обязателен, порт главного менеджера кластера, по умолчанию равен 1541.
- server ‑ указано имя сервера, остальные параметры используются по умолчанию;
- tcp://server:1641 ‑ указан протокол, имя сервера и сетевой порт;
- 127.0.0.1:1541 ‑ указан IP-адрес сервера (в формате IPv4) и порт;
- [fe10::c47b:90b7:fa32:a2fa%12] ‑ указан IP-адрес сервера (в формате IPv6), при этом протокол и порт принимают значения по умолчанию.
- Значением параметра Srvr может быть список адресов кластера через запятую. Пробелы в данном списке недопустимы.
- В диалоге добавления информационной базы в клиентском приложении значением свойства Кластер серверов 1С:Предприятия может быть список адресов кластера через запятую.
- MSSQLServer ‑ Microsoft SQL Server;
- PostgreSQL ‑ PostgreSQL;
- IBMDB2 ‑ IBM Db2;
- OracleDatabase ‑ Oracle Database.
- Y ‑ создавать базу данных в случае отсутствия.
- N ‑ не создавать. Значение по умолчанию.
- Y ‑ блокировка регламентных заданий включена;
- N ‑ блокировка регламентных заданий выключена. Значение по умолчанию.
- "–" ‑ запрет применения аутентификации операционной системы при старте «1С:Предприятия».
- "+" ‑ установка обязательного применения аутентификации операционной системы при старте «1С:Предприятие».
Если OpenID-провайдер требует интерактивной аутентификации (происходит первое обращение или истекло время жизни аутентификационных данных), клиент отображает диалог для ввода имени и пароля пользователя.
Аутентификация происходит по списку пользователей информационной базы OpenID-провайдера.
Аутентифицируемый пользователь информационной базы, использующих OpenID-аутентификацию, должен соответствовать по имени пользователю информационной базы OpenID-провайдера.
- "+" ‑ использовать OpenID-аутентификацию (по умолчанию).
- "–" ‑ не использовать OpenID-аутентификацию.
- Normal ‑ обычная,
- Low ‑ низкая скорость соединения.
- Окно об ошибке показано не будет.
- Отчет об ошибке будет отправлен, если настроена автоматическая отправка и размер отчета не превышает ограничение на отправку без вопроса о большом размере отчета (5 Мбайт).
- Вкладка браузера перейдет на пустую страницу (about:blank).
- Normal ‑ обычный режим запуска.
- Workplace ‑ режим рабочего места.
- EmbeddedWorkplace ‑ режим встроенного рабочего места (для встраивания веб-клиента в сторонний сайт).
- FullscreenWorkplace ‑ режим полноэкранного рабочего места.
- Kiosk ‑ режим киоск.
Навигационная ссылка следующего формата #e1cib/system/, указанная в URL запуска веб-клиента, приведет к открытию формы указанной стандартной функции. Данная возможность доступна только при запуске веб-клиента. URL запуска в этом случае может выглядеть следующим образом:
http://localhost/InfoBase/?mainWindowMode=
Workplace&DisableHomePageForms#
e1cib/system/AnalyticsSystemManagementПоддерживается использование следующих стандартных функций:
- ActiveUsers - Активные пользователи
- AdditionalAuthenticationSettings - Дополнительные настройки аутентификации
- AnalyticsSystemManagement - Управление системой аналитики
- AuthenticationLocks - Блокировка аутентификации
- ConfigurationLicense - Лицензирование конфигураций
- DataBaseCopiesManagement - Управление копиями базы данных
- DataChangeHistory - История изменения данных
- DeleteMarkedObjects - Удаление помеченных объектов
- DocumentsPosting - Проведение документов
- CollaborationSystemManagement - Управление системой взаимодействия
- ErrorProcessingSettings - Управление настройками обработки ошибок
- EventLog - Журнал регистрации
- EventLogSettings - Настройка журнала регистрации
- ConfigurationExtensionsManagement - Управление расширениями конфигурации
- ExternalDataSourcesManagement - Управление внешними источниками данных
- FindByReference - Поиск ссылок на объекты
- FullTextSearchManagement - Управление полнотекстовым поиском
- InfobaseParameters - Параметры информационной базы
- IntegrationServicesManagment - Управление сервисами интеграции
- LicenseAcquisition - Получение лицензии
- MobileAppBuildService - Сервис сборки мобильных приложений
- MobileAppBuilderServiceLoader - Загрузчик сервиса сборки мобильных приложений
- InfobaseRegionalSettings - Региональные установки информационной базы
- TotalsManagement - Управление итогами
- UserList - Пользователи
- ServersManagement - Управление серверами
- /N, /P, /WSN, /WSP, /WSA, /OIDA, /Authoff, /UsePrivilegedMode, /Z, /O: описание см. здесь.
- /HttpsForceSSLv3, /HttpsForceTLS1_0: описание см. здесь.
- /L, /VL: описание см. здесь.
- /ClearCache, /C, /URL: описание см. здесь.
- /DisableStartupMessages: описание см. здесь.
- /TestClient, /UILogRecorder: описание см. здесь.
Мобильная версия «1С:Предприятие» поддерживает указание некоторых команд и параметров, которые можно указать в командной строке запуска клиентских приложений для персонального компьютера.
Далее приведены поддерживаемые команды (список) с указанием того, в каких разделах описываются соответствующие параметры командной строки клиентских приложений для персонального компьютера.- /N, /P, /WSN, /WSP, /WSA, /OIDA, /Authoff, /UsePrivilegedMode, /Z, /O: описание см. здесь.
- /HttpsForceSSLv3, /HttpsForceTLS1_0: описание см. здесь.
- /L, /VL: описание см. здесь.
- /ClearCache, /C, /URL: описание см. здесь.
- /DisableStartupMessages: описание см. здесь.
- /TestClient, /UILogRecorder: описание см. здесь.
Частые вопросы
Откройте Панель управления - Настройки - Настройки продукта - Почтовые события; выберите событие.
На первой закладке, должны стоять галочки возле используемых на Вашем сайте кодов языка. На закладке "шаблоны" должна стоять галочка возле имени Вашего сайта, хотя бы у одного шаблона (обычно он там как раз один). Также, в настройках выбранного почтового шаблона (можно перейти прямо по ссылке со страницы "шаблоны", не забудьте только перед этим нажать "применить", если были сделаны какие-то настройки), должна стоять галочка "активен", и также должен быть выбран Ваш сайт. Также должны быть корректно заполнены поля "от кого" и "кому" (значения по-умолчанию #DEFAULT_EMAIL_FROM# и #EMAIL#, соответственно).
2. Если все эти настройки соответствуют истине, то в настройках модуля веб-формы отключите флаг "использовать упрощенный режим", перейдите в настройки соответсвующей формы, вкладка дополнительно, убедитесь, что флаг привязки к почтовому шаблону проставлен. Если и здесь все в порядке, то перейдите, пожалуйста, в Настройки-Инструменты-SQL-запрос и выполните такой запрос:
select * from b_event where event_name like '%form%' order by date_insert desc Найдите событие заполнения формы, смотрите в поле SUCCESS_EXEC:
стоит Y - письмо из продукта ушло, дальнейшую его судьбу попросите отследить администратора хостинга
стоит N - зайдите в файл /bitrix/php_interface/dbconn.php и проверьте не определены ли у Вас константы
BX_CRONTAB и BX_CRONTAB_SUPPORT, если да - убрать их определение вообще из этого файла. Если после этого SUCCESS_EXEC также N, то необходимо перейти в папку /bitrix/managed_cache/ и попытаться удалить содержимое (обязательно через модуль управления структурой, а не через FTP), если получите ошибку - значит необходимо исправить проблему с доступом продукта к папкам, чтобы Вы могли удалить файлы и папки из кеша.
Стоит F - функция mail() по какой-то причине вернула False при отправке. Наиболее типичные проблемы:1. Не настроена функция mail() на хостинге. Решается с хостером.
2. Почтовый сервер не поддерживает формат письма. Пробовать изменять настройки отправки, убирать поле ВСС, убирать галочку "Дублировать email адрес в заголовке", ставить "Конвертировать 8-битные заголовки". Не помогает - запросить логи у администратора почтового сервера, чтобы посмотреть, в чем конкретно ошибка при отправке.
Стоит 0 (ноль) - значит, что-то неверно в настройках из пп.1-2 - проверьте еще раз.
Общее требование : обязательно должно присутствовать свойство заказа типа LOCATION, которое используется как местоназначение доставки.
Создать свойство можно из списка свойств заказа:
Рабочий стол->Магазин->Настройки магазина->Свойства заказа->Список свойств
При создании свойства взвести флаг "Использовать как местоположение".
В случае отсутствия подобного свойства шаг выбора доставки будет всегда пропускаться.
Требования СПСР-Экспресс:1. Работает на основе тарифного калькулятора службы. Необходима установка адреса магазина в настройках модуля. Ограничения обработчика: только Россия.
2. Заполнение индексов местоположений не требуется, т.к. тарифному калькулятору требуется корректно указанный город России. Примечание: если в адресе будет указано, например "Россия - Москва и Мо" или пунктом назначения будет "Россия - Москва и Мо", то стоимость калькулятор не рассчитает - города "Москва и Мо" не существует.
3. На сервере в обязательном порядке должна корректно работать функция strtoupper() (в том числе и с кириллицей), которая осуществляет перевод символов строки в верхний регистр. Это момент очень важен при определении корректности адреса магазина (должен быть в Москве, см. п.1). Чтобы проверить работоспособность функции strtoupper() в PHP-строке нужно выполнить следующий код:
echo strtoupper('мОсКвА'); Если результат выполнения кода не "МОСКВА", то функция strtoupper() работает некорректно.
В случае, если функция работает некорректно, то можно попробовать в файле /bitrix/php_interface/dbconn.php добавить следующие строки:
setlocale(LC_ALL, 'ru_RU.CP1251'); setlocale(LC_NUMERIC,'C'); Если это не решает проблемы, то нужно обратиться к администратору хостинга.
Требования "Почта России":1. Доставка осуществляется только из Москвы, поэтому в адресе магазина, в настройках модуля интернет-магазина, должно быть указано "Москва" или "Moscow". Это не ограничение, конкретно обработчика нашего продукта, это ограничение тарифного калькулятора службы, об этом можно узнать на официальном сайте Почты России
2. Обязательно(!) заполнение индексов местоположений, т.к. тарифный калькулятор требует указания индекса местоположения. Альтернативным вариантом может быть создание свойства заказа типа "строка", у которого нужно взвести флаг "Использовать как почтовый индекс". В этом случае, покупателю в процессе оформления заказа будет предложено ввести индекс самостоятельно.
3. На сервере в обязательном порядке должна корректно работать функция strtoupper() (в том числе и с кириллицей), которая осуществляет перевод символов строки в верхний регистр.
Требования "EMS Почта России":
1. Адрес магазина должен быть в городе, который входит в список тарифного калькулятора
2. Доставка только из России, в города, которые есть в списке тарифного калькулятора.3. Заполнение индексов местоположений не требуется, т.к. тарифному калькулятору требуется корректно указанный город России.
4. На сервере в обязательном порядке должна корректно работать функция strtoupper() (в том числе и с кириллицей), которая осуществляет перевод символов строки в верхний регистр. Это момент очень важен при определении корректности адреса магазина и места доставки.
Требования "DHL":
1. Доставка осуществляется только из США, поэтому в качестве адреса магазина должен быть указан город Соединенных Штатов Америки. Это ограничение тарифного калькулятора доставки
2. Обязательно(!) заполнение индексов местоположений, т.к. тарифный калькулятор требует указания индекса местоположения. Альтернативным вариантом может быть создание свойства заказа типа "строка", у которого нужно взвести флаг "Использовать как почтовый индекс". В этом случае, покупателю в процессе оформления заказа будет предложено ввести индекс самостоятельно.
Требования к настраиваемым службам доставки:
1. Должна быть создана хотя бы одна группа местоположений, в настройках службы должны быть выбраны те местоположения и группы местоположений, при выборе которых в процессе оформления заказа будет предложена эта доставка.
Создание групп местоположений:
Рабочий стол->Магазин->Настройки магазина->Местоположения->Группы местоположений2. При желании можно выставить ограничения по сумме заказа и общему весу товаров в заказе. В случае, если доставка не появляется, значит, данные заказа не удовлетворяют настройкам службы - пункт назначения, вес или стоимость заказа.
2. Если перенос осуществлялся простым копированием файлов (FTP/SSH),мог не скопироваться файл /.access.
В данном файле хранятся права групп пользователей к сайту, если данного файла нет, то для всех пользователей устанавливается право "Запрещено".Проблема решается одним из способов:
А. Вам надо зайти через файловый менеджер продукта в свойства корневой папки сайта и на вкладке "Доступ" установить для группы "Неавторизованные пользователи" право "Чтение".Б. В корень сайта положить файл .access с содержимым:
Дело в том, что у tar есть несколько диалектов. Мы пакуем в формате GNU tar, как это делает по умолчанию tar в linux. WinRar понимает tar, но конкретно этот диалект поддерживает не полностью.
Решение:
Вам надо создать новый уровень доступа к Главному модулю (Файл/Папка):
"Настройки"-> "Пользователи"-> "Уровни доступа".
http://dev.1c-bitrix.ru/learning/course/lesson.php?COURSE_ID=6&ID=1223В созданном уровне доступа выберите флажок "Загрузка файла на сервер (fm_upload_file)", сохраните.
Затем Вам надо данный уровень доступа установить на корневую папку сайта, для требуемой группы пользователей.Это должно решить проблему.
1."YML не принят: Фид не разобран до конца - ошибка парсера XML (Error parsing XML feed) (line: 81 column: 5): Unterminated entity declaration, 'ContentType'"
Проблема в том, что по умолчанию в папке /upload не выполняются php скрипты.
Для решения проблемы вам следует перенести файл экспорта в другую папку, отличную от /upload, и в папке разрешить выполнение php скриптов в файле .htaccess при помощи директивы AddType
Можно прямо в папке /upload создать директории, переместить туда файл yandex.php, создать в этой директории файл .htaccess и переопределить в нём AddType:2. "Notice : Undefined index: referer1 in /var/www/alexey/data/www/telecamera.ru/upload/yandex.php on line 1"
В файле .htaccess, папки в которой находится файл экспорта, вам следует отключить отображение замечаний(NOTICE).
Уровень вывода ошибок задаётся директивой php_value error_reporting.
Данную директиву можно определить также в настройках PHP.
Например уровень:
error_reporting = E_ALL & ~E_NOTICEпозволяет выводить все ошибки, за исключением замечаний.
Если используется компонент рассылки версии 1.0:
$SUBSCRIBE_TEMPLATE_RESULT это глобальная переменная, её значение определяется внутри компонента.
Поэтому в шаблоне рассылке достаточно просто вызвать компонент для определения значения $SUBSCRIBE_TEMPLATE_RESULT.
Если используется компонент рассылки версии 2.0:
$SUBSCRIBE_TEMPLATE_RESULT не является глобальной, поэтому просто вызвать компонент для определения значения этой переменной недостаточно(как это было с компонентом версии 1.0):
IncludeComponent(
"bitrix:subscribe.news",
"",
Array(
"SITE_ID" => "s1",
"IBLOCK_TYPE" => "news",
"ID" => "",
"SORT_BY" => "ACTIVE_FROM",
"SORT_ORDER" => "DESC"
)
);?>Сам компонент возвращает количество элементов, которые попадают в следующий выпуск рассылки, соответственно переменной $SUBSCRIBE_TEMPLATE_RESULT следует присвоит значение, возвращаемое компонентом bitrix:subscribe.news:
IncludeComponent(
"bitrix:subscribe.news",
"",
Array(
"SITE_ID" => "s1",
"IBLOCK_TYPE" => "news",
"ID" => "",
"SORT_BY" => "ACTIVE_FROM",
"SORT_ORDER" => "DESC"
)
);?>В этом случае $SUBSCRIBE_TEMPLATE_RESULT будет определена и выпуск будет сформирован по расписанию.
В данном режиме происходит обратный отсчёт страниц (последняя страница считается первой).
Данный механизм используют, если при добавлении элемента инфоблока, он всегда попадает наверх списка (отсортированы по дате добавления сообщения по убыванию). Таким образом, меняется лишь последняя страница. Все предыдущие можно надолго закешировать.
При данном типе постраничной навигации разбиение на страницы произойдёт, если остаток при делении количества сообщений на первой странице на число, указанное в настройках компонента, будет больше или равно двум.
Например, если всего 170 сообщений в форуме, и в настройках компонента указано число сообщении на странице равное 20, будет образовано 8 страниц, на первой - 30 сообщений, на остальных - 20. При данных настройках в случае достижении количества сообщений равным 180, будут образованы 9 страниц по 20 сообщений.
При обратной страничной навигации количество сообщений на странице либо равно числу, указанному в настройках компонента, либо больше его.
Тут важно знать 2 аспекта:
a. Кодировка дампа устанавливается в зависимости от содержимого файла /bitrix/php_interface/after_connect.php, например:
$DB->Query("SET NAMES 'utf8'");
?>т.е дамп будет создаваться в кодировке "utf8".
b. Кодировку сервера баз данных можно увидеть в параметре "character_set_server" после выполнения SQL-запроса:
show variables where Variable_name = 'character_set_server'; Ошибка происходит если данные кодировки (п.1 и п.2) различаются.
Обойти или устранить эту ошибку можно двумя способами:
1. В настройках сервера изменить кодировку в параметре "character_set_server" (b) на ту, в которой сделан дамп (a).
Важно: данную операцию делаете или Вы или администратор сервера в зависимости от прав, которыми Вы обладаете.
2. Можно открыть дамп в текстовом редакторе и в самое начало вставить строку:
SET NAMES `utf8`; Кодировка выбирается в зависимости от кодировки, в которой сделан дамп (a).
Важно: Данный способ работает только на небольшие дампы (которые успевают импортировать за один шаг)
1. В большинстве случаев данная ошибка наблюдается из-за того, что дистрибутив продукта (архив) был не до конца скачан с нашего сайта.
2. Также проблема может быть из-за большой разности времени, которое установлено, на веб-сервере и времени на сервере базы. Т.е. Пробная версии создалась для одной даты, а при сравнении с базой данных, дата уже совсем другая. Если это так, то время надо синхронизировать.
3. Возможно база данных, в которую выполняется установка продукта, не пуста и время действия продукта берётся со старой установки.
Ниже приведены рекомендации, при выполнении которых данная ошибка точно не появится:
1. Перед установкой продукта очистите корневую папку сайта от всех файлов (оставить надо только файлы, относящиеся к данной установке продукта).
2. Выполняйте установку только в пустую базу данных или создавайте её нашим мастером установки (можно также воспользоваться и phpMyAdmin).
3. Настоятельно рекомендуем пользоваться специальным скриптом bitrixsetup.php для скачивания и установки дистрибутива последней версии:
4. Во время установки никогда не нажимайте кнопку F5 в браузере, для навигации по мастеру установки существуют специальные кнопки на странице.
5. Также возможно, что в процессе распаковки дистрибутива произошёл сбой и не все файлы распаковались. Рекомендуем повторно распаковать продукт.
Скачать скрипт можно здесь:
Инструкция по установке продукта:
Учебный курс по установке продукта:
Например, группе пользователей дано право "Изменение" для определённого инфоблока. Компоненты для работы с инфоблоками добавляют кнопки только на вкладку "Редактирование", поэтому вкладка "Просмотр" не доступна пользователям с данными правами.
Если вам необходимо вывести панель в обязательном порядке, воспользуйтесь одним из следующих вариантов решения:
1. Дать группе пользователей право на управление кешем страницы (данная возможность появится на вкладке "Просмотр").
Для этого создайте новый уровень доступа для Главного модуля с привязкой "Модуль", и доступной операцией "Управление кешем (cache_control)" (подробнее об уровнях доступа в учебном курсе "Администрирование системы":
В настройках группы пользователей, для которой требуется вывод панели, в качестве доступа к Главному модулю укажите созданный уровень.
2. Выводить панель программно для определённой группы пользователей.
Для этого в шаблон сайта вставьте проверку:
$arGroups = $USER->GetUserGroupArray();
if (in_array(, $arGroups ))
$APPLICATION->ShowPanel = true;
?>где номер_группы - ID группы, для которой требуется вывод панели.
Фактически это возможность разработчикам задать правила кеширования ресурсоемких частей страниц. Результаты кеширования сохраняются в виде файлов в каталоге /bitrix/cache/. Если время кеширования не истекло, то вместо ресурсоемкого кода будет подключён предварительно созданный файл кеша.
Более подробней на странице:
Кеширование называется неуправляемым, поскольку кеш не перестраивается автоматически после модификации исходных данных, а действует указанное время после создания. Часто такая схема является оптимальной.
Мы встречались с ситуацией, когда при создании файлов кэша им присваиваются такие права, которые являются недостаточными для последующего изменения или удаления этих файлов процессом веб-сервера. Таким образом, создаваемым файлам и папкам кеша должны присваиваться такие права, которые бы позволяли затем изменить удалить удалить их процессу веб-сервера.
При назначении прав на файлы и папки используются значения констант
BX_FILE_PERMISSIONS и BX_DIR_PERMISSIONS из /bitrix/php_interface/dbconn.php, но часто срабатывает маска прав на сервере и чтобы избежать этого необходимо прописать в этом же скрипте:
umask(000);
@umask(~BX_DIR_PERMISSIONS);Есть ли подобные строки у Вас в файле /bitrix/php_interface/dbconn.php? Если нет - добавьте их, пожалуйста.
Для экономии места на диске Вы можете очистить папки /bitrix/managed_cache/ /bitrix/cache/.
Возможно в папках /bitrix/cache/ и /bitrix/managed_cache/ где из-за некорректно выставленных прав может приходить накапливание данных кеша.
Дополнительную информацию про права Вы найдёте в нашем FAQ:
Также Вы можете почистить файлы кеша из административного раздела на странице
"Рабочий стол->Настройки->Настройки продукта->Автокеширование"
Перейдя во вкладку "Очистка файлов кеша" и очистить "все".
Тем самым Вы можете освободить дисковое пространство от файлов кэша.
1. Создать группу пользователей.
а) В настройках доступа модуля "Управление структурой" установить "Редактирование файлов и папок" (новое название уровня доступа с 8.5.0).
б) Для этой группы пользователей установить право "Чтение" на папку /bitrix/admin/ (чтобы отображались административные страницы)
в) Если пользователь создан для редактирования инфоблоков, то в настройках доступа инфоблока надо ему дать право "Запись", при доступе "Чтение" инфоблок просто не будет отображаться.
2. Добавить во вновь созданную группу пользователя или пользователей.
Это вставка в код страницы сайта определенного зашифрованного JavaScript-кода, при выполнении которого формируется так называемый iframe (HTML-элемент, позволяющий включить при отображении содержимое одной страницы в другую). Вставленный iframe указывает, как правило, на зараженную страницу, которая уже содержит более «тяжелый» код, использующий различные уязвимости браузеров (в основном Internet Explorer'а) для загрузки и запуска исполняемых файлов вирусов.
Механизм заражения
Механизм заражения сайтов в подавляющем числе случаев одинаков: вирус попадает на компьютер, с которого выполнялся вход на данный сайт по протоколу FTP, после чего получает реквизиты доступа к адресам, для которых в программе FTP-клиенте была выбрана опция «запомнить логин/пароль». Получив реквизиты доступа, вирус отсылает их на компьютеры злоумышленников, где уже и расположены программы-роботы, выполняющие «грязную» работу. Эти роботы выполняют подключение к FTP-адресам с полученными реквизитами, затем сканируют каталоги сайта в поисках файлов с определенными именами: чаще всего это корневые файлы — те, к которым в первую очередь выполняется обращение при входе на сайт. Обнаружив такой файл, робот скачивает его, добавляет в конец скачанного файла вредоносный код, и закачивает этот файл обратно на FTP-сервер, заменяя оригинал.
С точки зрения сервера это выглядит как обыкновенная активность пользователя: выполняется подключение авторизованного пользователя, скачивание и закачивание файлов — фактически именно то, что выполняется при обыкновенном обновлении сайта разработчиком по FTP.
Устранение заражения
Первое, что необходимо сделать при обнаружении подобного заражения — это не дать вирусу повторно заразить сайт. Для этого достаточно сменить пароль доступа на FTP через панель управления, а также проверить все компьютеры, с которых выполнялось подключение к сайту по FTP на вирусы, используя антивирусы со свежими базами обновлений.
Также, Вы можете запросить у администратора хостинга все возможные логи (логи ftp, логи веб-сервера, ssh логи). Полученные логи от администратора необходимо проанализировать на предмет времени модификации файлов и способа доступа к ним, а также IP-адресов, с которых производилось изменение, что позволить сузить круз проблемных ПК, а также определить способ доступа к файлам и их заражение.
Так как код сайта, по сути, представляет собой обыкновенные текстовые файлы, для удаления вредоносного кода достаточно открыть зараженный файл, найти необходимый участок кода, удалить его и сохранить файл. В особо сложных ситуациях может случиться так, что над зараженным сайтом «поработали» несколько различных вирусов — файлы сайта будут содержать несколько вставок различного вредоносного кода. Реже встречаются случаи, когда содержимое сайта может быть повреждено достаточно сильно, в таком случае целесообразнее восстановить данные из резервной копии, чем заниматься лечением каждого файла вручную.
Предотвращение заражения
Для того, чтобы не повторять чужих ошибок и уберечься от повреждения сайта, достаточно следовать простым рекомендациям:
- не использовать возможности FTP-клиентов по сохранению паролей;
- периодически выполнять смену паролей доступа к FTP;
- при необходимости, ограничить адреса компьютеров, с которых разрешено подключаться по FTP;
- использовать для доступа по FTP только «надежные» компьютеры — те, на которых установлены антивирусы с актуальными базами обновлений.
Этот URL используется при формировании страницы результатов поиска - соответственно, если URL(проставленный в настройках инфоблока) указывает на несуществующую страницу, то по ссылке пользователь попадёт не на страницу детального просмотра найденного элемента, а на 404-ю.
Также похожая ситуация возникает, если компонент работает в режиме ЧПУ, а URL не в ЧПУ - в этом случае следует указать URL по правилами ЧПУ.
Проблема может возникать и ссылками на страницы форума.
В этом случае следует проверить корректность шаблона пути к сообщению форума.
Настройки инфоблока:
Контент -> Информ. блоки -> Типы информ. блоков -> ->
Настройки форума:
"Рабочий стол"-> "Сервисы"-> "Форумы"-> "Список форумов"->
Настройки блога:
"Настройки"-> "Настройки продукта"-> "Настройки модулей"-> "Блоги".
''>=DATE_ACTIVE_FROM'= т.е. выбираются элементы, поле DATE_ACTIVE_FROM которых находится между предыдущим и текущим запуском рассылки.
Возможна следующая ситуация:
Пусть текущий запуск - >DD<.>MM<.>YYYY< 12:00:00
предыдущий - >DD-1<.>MM<.>YYYY< 12:00:00Возможные варианты решения:
1. Создавая элемент, указывайте дату его активности следующим днем
2. Создавая элемент, указывайте дату его активности сегодняшним днем, но с точным временем, чтобы оно не было равно 00:00:00
3. Измените шаблон генерации выпуска так, чтобы проверялось не поле DATE_ACTIVE_FROM, а DATE_CREATE - дата создания элемента.
4. Устанавливайте генерацию выпусков на время, незадолго перед полуночью (например - 23:30), чтобы все созданные за день элементы (с датой активности с 00:00:00, но созданные в течение дня) попали в выпуск.
5. В настройках инфоблока, используемого в рассылке, поле Начало активности должно иметь значение по умолчанию Текущие дата и время.
Для решения проблемы и получения возможности загрузки и установки обновлений, Вам необходимо зарегистрировать в системе хотя бы 1 сайт или активировать существующий из раздела:
Рабочий стол/Настройки/Настройки продукта/Сайты/Список сайтов
Причины могут быть следующие:
- не доступны функции работы с сокетами, в частности, fsockopen();
- на сервере запрещены исходящие соединения к 80 порту;
- проблема в работе сети.
Вам необходимо обратиться к администратору хостинга, предоставив описание ошибки.
ShowHeadStrings();?>
ShowHeadScripts();?>либо, начиная с 7й версии
Для параметров -LogIntegrity, -LogAndRefsIntegrity и -BinaryDataStorageIntegrity допускается указание списка обрабатываемых таблиц (в качестве значения параметра, через запятую, если таблиц несколько) из следующего списка:
Выполнить объединение текущей конфигурации с файлом (с использованием файла настроек).
-
-JobsCount ‑ позволяет указать, какое количество одновременно работающих фоновых заданий будет использоваться для выгрузки конфигурации в файлы на стороне сервера.
- 1-й способ: