Всем доброго дня.
Прошу помощи.
Конфигурация - Бухгалтерия для Беларуси, редакция 2.1 Локализация для Республики Беларусь (2.1.41.3)
Есть задача - ограничить
База на MSQL Server.
Само ограничение не работает просто если включить "Ограничить
Затем включить "Ограничить
Проблема в том, что, если ограничить для пользователя какую-либо организацию - он всё равно будет видеть её в списках. При этом документы этой организации для пользователя видны не будут.
Подскажите пожалуйста, как сделать так, чтобы сама организация тоже не была видна.
Бывают случаи когда нужно восстановить
Пункт 1. Открываем Microsoft Management Studios, выбираем нужную базу, нажимаем правой кнопкой мыши, выбираем Новый запрос (New Query)
Пункт 2. Вставляем запрос, который указан ниже
EXEC sp_rename 'v8users', 'v8users_passwords_data'GOUPDATE ParamsSET FileName = 'users.usr_pd'WHERE FileName = 'users.usr'GO
DROP TABLE v8usersGO
create table v8users(ID binary(16) NOT NULL,Name nvarchar(64) NOT NULL,Descr nvarchar(128) NOT NULL,OSName nvarchar(128) NULL,Changed datetime2(0) NOT NULL,RolesID numeric(10,0) NOT NULL,Show binary(1) NOT NULL,Data varbinary(max) NOT NULL,EAuth binary(1) NULL,AdmRole binary(1) NULL,UsSprH numeric(10,0) NULL,PRIMARY KEY (ID));
Пункт 3. Открываем конфигуратор 1С (откроется сразу, без пароля и логина), не закрывая конфигуратор выполняем пункт 1 снова и вставляем запрос ниже:
DROP TABLE v8usersGOEXEC sp_rename 'v8users_passwords_data', 'v8users'GOUPDATE ParamsSET FileName = 'users.usr'WHERE FileName = 'users.usr_pd'GO
Пункт 4. Открываем в конфигураторе список пользователей (Администрирование - пользователи) и меняем пароль нужного пользователя. Закрываем конфигуратор и запускаем 1С, теперь пароль изменен.
Всем известно, для большей гарантии восстановления важных данных, необходимо копировать архивы в несколько мест хранения. Отдельный диск может помочь в случае порчи основного, но в случае если устройство будет потеряно или украдено, он будет так же утрачен.
На сегодня облачные хранилища часто заменяют физические носители информации. Как правило, облачные хранилища предоставляют бесплатно от 2 до 15 ГБ дискового пространства, кому-то этого будет вполне достаточно.
ПО Effector Saver позволяет настроить периодичное резервное копирование информационной базы 1С в облако. И задать количество хранения файлов резервной копии, отдельно для каждого хранилища.
Таким образом, вы можете установить удобное время для бэкапа и управлять количеством копий базы данных.
Далее в статье рассмотрим как с помощью Effector Saver настроить бэкап информационной базы 1С:Предприятия в облако Яндекс.Диск.
На компьютере где производится настройка, должна быть установлена программа 1С:Предприятие и подключена необходимая база данных.
Скачиваем программу с оф. сайта Скачать Effector Saver
Запускаем файл инсталляции Мастера установки. На последнем этапе Мастера установки, соглашаемся с запуском программы и нажимаем «Завершить».
На панели инструментов нажимаем «Задачи» «Добавить задачу».
Выбираем тип новой задачи «Резервное копирование 1С:Предприятие 8», нажмите «Создать».
Во вкладке «Подключение к 1С» нажимаем «Выбрать базу 1С:Предприятия из списка и заполнить основные параметры».
В открывшемся окне «Выбор базы 1С:Предприятия» указываем необходимую базу и нажимаем «Выбрать».
Поля «Наименование:», «Исполняемый файл:», «Вариант базы:» и «Каталог базы:» автоматически заполнятся в соответствии с выбранной базой.
Необходимо только заполнить имя и пароль пользователя указанной базы, под которым будет запускаться резервное копирование средствами Конфигуратора 1С:Предприятия.
Если используете программную лицензию 1С, то установите флаг «Использовать программную лицензию 1С».
На вкладке «Отключение пользователей», устанавливаем флаг «Завершить работу пользователей 1С:Предприятия».
В Effector Saver
- если у вас файловой база выберите «Вызвать штатное завершение работы пользователей»;
- если у вас клиент-серверная база выберите «Завершить сеансы на сервер 1С:Предприятие». Если в кластере 1С:Предприятия создан пользователь «администратор кластера», установите флажок «Кластер требует авторизации». Заполните поля: «Имя администратора кластера:» и «Пароль администратора кластера:». Если порт подключения к Агенту сервера отличный от стандартного, установите флажок «Используется нестандартный порт агента сервера». Заполните поле «Порт агента сервера:» (по умолчанию 1540).
На следующей вкладке «Хранилище архивов» указываем, где следует хранить создаваемые архивы.
Для добавления нового хранилища архива, нажимаем на кнопку «+». В открывшемся окне, нажимаем «Создать новое хранилище».
Из выпадающего списка, выберите, «Яндекс.Диск». Доступны и другие варианты: Локальная/сетевая папка, FTP/FTPS, WebDAV, Google Диск, Dropbox, OneDrive, Облако Mail.Ru.
Поле «Название:», оставим как есть. Нажимаем «Авторизация».
Откроется окно браузера, в котором необходимо ввести логин и пароль для
Далее укажем папку для хранения бэкапа базы 1С, нажимаем на кнопку с тремя точками и выбираем папку, (если папки нет, создайте ее).
Для управления количеством копий базы данных, устанавливаем флаг «Автоматически удалять устаревшие резервные копии», и заполняем параметр «Хранить количество копий», например 3. Нажимаем «ОК».
На следующей вкладке назначим расписание. В поле «Назначить задание:», выберите нужный интервал времении заполните параметр «Время начала:».
В верхней части окна настройки устанавливаем флажок «Выполнять задачу по расписанию» и нажимаем кнопку «Сохранить».
Резервное копирование информационной базы 1С на Яндекс.Диск будет осуществляться автоматически в соответствии с установленным расписанием.
Всем известно, для большей гарантии восстановления важных данных, необходимо копировать архивы в несколько мест хранения. Отдельный диск может помочь в случае порчи основного, но в случае если устройство будет потеряно или украдено, он будет так же утрачен.
На сегодня облачные хранилища часто заменяют физические носители информации. Как правило, облачные хранилища предоставляют бесплатно от 2 до 15 ГБ дискового пространства, кому-то этого будет вполне достаточно.
ПО Effector Saver позволяет настроить периодичное резервное копирование информационной базы 1С в облако. И задать количество хранения файлов резервной копии, отдельно для каждого хранилища.
Таким образом, вы можете установить удобное время для бэкапа и управлять количеством копий базы данных.
Далее в статье рассмотрим как с помощью Effector Saver настроить бэкап информационной базы 1С:Предприятия в облако Яндекс.Диск.
На компьютере где производится настройка, должна быть установлена программа 1С:Предприятие и подключена необходимая база данных.
Скачиваем программу с оф. сайта Скачать Effector Saver
Запускаем файл инсталляции Мастера установки. На последнем этапе Мастера установки, соглашаемся с запуском программы и нажимаем «Завершить».
На панели инструментов нажимаем «Задачи» & «Добавить задачу».
Выбираем тип новой задачи «Резервное копирование 1С:Предприятие 8», нажмите «Создать».
Во вкладке «Подключение к 1С» нажимаем «Выбрать базу 1С:Предприятия из списка и заполнить основные параметры».
В открывшемся окне «Выбор базы 1С:Предприятия» указываем необходимую базу и нажимаем «Выбрать».
Поля «Наименование:», «Исполняемый файл:», «Вариант базы:» и «Каталог базы:» автоматически заполнятся в соответствии с выбранной базой.
Необходимо только заполнить имя и пароль пользователя указанной базы, под которым будет запускаться резервное копирование средствами Конфигуратора 1С:Предприятия.
Если используете программную лицензию 1С, то установите флаг «Использовать программную лицензию 1С».
На вкладке «Отключение пользователей», устанавливаем флаг «Завершить работу пользователей 1С:Предприятия».
В Effector Saver
- если у вас файловой база выберите «Вызвать штатное завершение работы пользователей»;
- если у вас клиент-серверная база выберите «Завершить сеансы на сервер 1С:Предприятие». Если в кластере 1С:Предприятия создан пользователь «администратор кластера», установите флажок «Кластер требует авторизации». Заполните поля: «Имя администратора кластера:» и «Пароль администратора кластера:». Если порт подключения к Агенту сервера отличный от стандартного, установите флажок «Используется нестандартный порт агента сервера». Заполните поле «Порт агента сервера:» (по умолчанию 1540).
На следующей вкладке «Хранилище архивов» указываем, где следует хранить создаваемые архивы.
Для добавления нового хранилища архива, нажимаем на кнопку «+». В открывшемся окне, нажимаем «Создать новое хранилище».
Из выпадающего списка, выберите, «Яндекс.Диск». Доступны и другие варианты: Локальная/сетевая папка, FTP/FTPS, WebDAV, Google Диск, Dropbox, OneDrive, Облако Mail.Ru.
Поле «Название:», оставим как есть. Нажимаем «Авторизация».
Откроется окно браузера, в котором необходимо ввести логин и пароль для
Далее укажем папку для хранения бэкапа базы 1С, нажимаем на кнопку с тремя точками и выбираем папку, (если папки нет, создайте ее).
Для управления количеством копий базы данных, устанавливаем флаг «Автоматически удалять устаревшие резервные копии», и заполняем параметр «Хранить количество копий», например 3. Нажимаем «ОК».
На следующей вкладке назначим расписание. В поле «Назначить задание:», выберите нужный интервал времени и заполните параметр «Время начала:».
В верхней части окна настройки устанавливаем флажок «Выполнять задачу по расписанию» и нажимаем кнопку «Сохранить».
Резервное копирование информационной базы 1С на Яндекс.Диск будет осуществляться автоматически в соответствии с установленным расписанием.
Нужно чтобы пользователи не могли менять настроенный для них интерфейс!
Решение:
Для отключения нужно в правах
Отключатся настройка панелей и пункт меню "Вид" (всё что в нём находится тоже)
Меню станет таким:
Устанавливаем на сервер лицензию на 20 раб. мест, проходит все этапы и пишет что лицензия получена.
Но в программу 1С не заходит, выдает что как-будто изменилась конфигурация компьютера: Ошибка программного лицензирования. Ошибка привязки программной лицензии к компьютеру
Точно ни кто и ничего не менял в компьютере, пробовал удалять лицензию и делать восстановление - опять просит лицензию
Подробное описание ошибки:
Решение:
Удалите на компьютере все файлы 1cv8conn.pfl
Если после этого лицензия не найдена - восстановите ее по активному пин-коду.
После удачного входа, увидеть лицензию можно здесь:
Периодически возникает сообщение "Обнаружено неправомерное использование данного программного продукта". Что делать и как убрать это сообщение?
Сообщение о неправомерном использовании появляется в конфигурации, если при подключении к интернет-поддержке указан логин, у которого не выполняются условия
Способы решения:
На портале 1С:ИТС у вас должна быть зарегистрирована текущая программа 1C (в коробке с программой белый конверт с пин-кодом для регистрации) и оформлен договор ИТС (Проф или Техно)
Далее по пунктам:
1. Для проверки регистрации программы на Портале 1С:ИТС, перейдите по пунктам меню "Администрирование->Интернет поддержка пользователей" В секции "Настройки Интернет-поддержки пользователей" будет виден логин на сайте ИТС
2. Если нажать на Логин, то откроется Портал 1С:ИТС, страница личного кабинета, где можно увидеть список зарегистрированных программных продуктов 1С. Если он пуст, тогда, возможно, ваши программы 1С зарегистрированы на другой логин или еще не зарегистрированы!
Для проверки регистрации договора ИТС можно нажать на ссылку "Договоры" на той же странице слева сверху в меню.
Если зарегистрированный договор ИТС есть, то он должен отображаться под надписью "Действующие и будущие договоры 1С:ИТС", например так:
Если список договоров пуст, то наиболее вероятной причиной надписи "У Вас нет действующих или будущих договоров 1С:ИТС" является использование учетной записи, в которой не зарегистрированы программы 1С, включенные в договор 1С:ИТС. Зарегистрируйте договор ИТС через партнера 1С или подключите интернет поддержку с действующим договором:
Для входа в программе под другой учетной записью, нужно отключиться от текущей интернет-поддержки, нажав кнопку "Отключить":
После этого нажмите кнопку "Подключить" и в появившемся окне введите логин и пароль от правильной учетной записи. После данных действий сообщение "Обнаружено неправомерное использование данного программного продукта" должно перестать появляться.
Если проблема не ушла, обращайтесь, мы обязательно Вам поможем! - Наши услуги по обслуживанию 1С
Открыли документ Счет, в поле Контрагент набираете первую букву & поиск осуществляется, набираете вторую (третью) букву и список становится пустым - это слетел индекс полнотекстового поиска, его нужно обновить:
- Главное меню - Все функции - Стандартные - Управление полнотекстовым поиском
Если Пункт меню Все функции не
или такой вариант:
Меню - Администрирование - Поддержка и обслуживание - Регламентные операции - Полнотекстовый поиск данных - Настроить - Очистить индекс - Обновить индекс
Внезапно 1С перестала видеть программные лицензии выдавая ошибку:
Не найдена лицензия. Не обнаружен ключ защиты программы или полученная программная лицензия!по причине:
Поиск лицензии на клиенте:
локальный ключ не
Ошибка программного лицензирования. Неверный формат файла программного лицензирования: file://C:/ProgramData/1C/licenses/file0.lic
Решение:
Сообщение "Неверный формат файла программного лицензирования" обычно говорит о том, что лицензия автоматически заблокировалась из-за того, что продолжает использоваться на другом компьютере, либо на данном компьютере в этом же или в другом каталоге присутствует другой файл, также содержащий эту же самую работоспособную лицензию.
Файл лицензии на компьютере должен быть один.
Файл лицензии можно перемещать, но нельзя копировать.
Для решения проблемы следует на всех компьютерах, где ранее ставилась эта лицензия, найти и удалить все файлы 2*.lic и все файлы conn8211.pfl (или 1cv8conn.pfl, если версия 8.3)
Если используется клиент-серверный вариант работы, то перестартуйте службу агента сервера.
Затем на данном компьютере выполните обновление (восстановление) всех ранее установленных на нем лицензий по последнему использованному пин-коду.
Если при этом появится сообщение "Пинкод уже активирован. Повторная активация этого пинкода на другой компьютер запрещена", значит у компьютера изменились ключевые параметры. В таком случае произведите повторное получение лицензии, используя резервный пин-код. Не используйте резервный пин-код, если такого сообщения не получено.
Способ №1 На сервере: удалить conn8211.pfl или 1cv8conn.pfl
Способ №2 Перегенерация ключей в 1С удалить старые ключи: *.lic
И перегенируем ключи используя скан лицензии и те данные которые вводились изначально(на кого активировалась лицензия)
Если лицензия по прежнему не обнаруживается:
1. Убедитесь, что используется версия платформы не ниже 8.2.15. Если ниже - скачайте с пользовательского сайта.
2. В окне с перечнем информационных баз нажмите "Настройка" и поставьте галочку "Использовать аппаратную лицензию...", если она не стоит.
3. При появлении сообщения об отсутствии лицензии откажитесь получать лицензию и нажмите кнопку "Подробно" и прислать в 1С текст появившегося Журнала поиска ключа.
в Windows файлы lic и pfl обычно находятся в:
\ProgramData\1С\conf\;
\Program Files (x86)\1cv8\conf;
%ИмяПользователя%\AppData\Local\1C.
в Linux файлы lic и pfl обычно находятся в:
/home/usr1cv82/.1cv82/1C/1Cv82/conf
/home/usr1cv8/.1cv8/1C/conf
и /opt/1C/v8.2/x86_64/conf/
Строка для удаления rm /home/usr1cv82/.1cv82/1C/1Cv82/conn8211.pfl& /etc/init.d/srv1cv82 restart
Чтобы шрифт не казался крупным, и формы помещались на экране, можно уменьшить масштаб
Для этого нужно воспользоваться Меню «Вид – Изменить масштаб».
Чтобы быстро найти нужный пункт меню, можно воспользоваться поиском меню
Найти окно поиска меню на любой панели. В верхнем правом углу написать ключевое слово для поиска.
Так же используя поиск можно быстро искать необходимые документы или элементы справочника
Чтобы на форме помещалось больше информации, можно сократить панель разделов
Вызвать настройку панели разделов, для этого нужно воспользоваться Меню «Вид – Настройка панели разделов». Убрать надписи с панели разделов и оставить только картинку в окне «Показывать».
Чтобы на форме были видны нужные колонки и не видны ненужные, можно настроить форму
Открыть форму и воспользоваться кнопкой «Еще». В верхней правой части формы снять флажки с ненужных колонок, а нужные колонки передвинуть вперед.
Чтобы добавить журналы документов покупателей и поставщиков, можно настроить панели «Продажи» и «Покупки»
Нажать меню «Продажи». В правом верхнем углу нажать на серую шестеренку «Настройки». Выбрать меню «Настройка навигации». В списке слева щелкнуть два раза на «Документы покупателей».
Фильтры / отборы в журнале
Нажать на меню «Операции». Открыть «Журнал операций». В левом верхнем углу в поле «Контрагент» указать покупателя.
Все функции и стандартные операции
Откройте Меню-Сервис-Параметры, установите галку Отображать команду Все функции и нажмите ОК
Стандартные
Внизу раздел Стандартные:
Как вернуть стандартную настроку списка документов или справочника
Избранное - быстрый
Для добавления в избранное нажмите на значек звездочки в открытом списке
или в меню раздела
Для быстрого
при разработке на обычных формах было удобно выводить результат запроса используя метод СоздатьКолоки():
В управляемом приложении метод СоздатьКолоки() не
Пример формы:
Код вывода результата запроса на управляемую форму:
Циклы применяются для выполнения каких либо повторяющихся действий, возможные варианты перебора в цикле:
Перебираем строки с помощью цикла Для каждого
Перебираем строки с помощью цикла Пока
Перебираем строки с помощью цикла Для
Еще вариант, но советую его использовать только в без выходных ситуациях, Если
Итак, я нашел пять способов, как можно организовать цикл средствами 1С.
Первый вид цикла, назовем его условно «Для По» выглядит так:
Второй вид «Для Каждого»:
Третий «Пока»:
Далее вспомнил ассемблерную молодость & цикл «Если»:
Ну и напоследок «Рекурсия»
Естественно, что относить рекурсию к циклам не совсем корректно, но тем ни менее с её помощью можно добиться похожих результатов. Сразу оговорюсь, что в дальнейшем тестировании рекурсия не участвовала. Во первых все тесты проводились при 1 000 000 итераций, а рекурсия выпадает уже при 2 000. Во вторых скорость рекурсии в десятки раз меньше, чем скорость остальных циклов.
Последнее отступление. Одним из условий было выполнение в цикле каких-либо действий. Во первых пустой цикл используется очень редко. Во вторых цикл «ДляКаждого» используется для какой-либо коллекции, а значит и остальные циклы должны работать с коллекцией, чтобы тестирование проходило в одинаковых условиях.
Ну что ж, поехали. В качестве тела цикла использовалось чтение из заранее заполненного массива.
или, при использовании цикла «Для Каждого»
Тестирование проводилось на платформе 8.3.5.1231 для трех видов интерфейса (Обычное приложение, Управляемое приложение и Такси).
Интерфейс | ДляПо | ДляКаждого | Пока | Если |
Обычное приложение | 5734,2 | 4680,4 | 7235,4 | 7263,0 |
Управляемое приложение | 5962,4 | 4882,6 | 7497,4 | 7553,6 |
Такси | 5937,2 | 4854,6 | 7500,8 | 7513,0 |
Числа это время в миллисекундах полученное с помощью функции ТекущаяУниверсальнаяДатаВМиллисекундах(), которую я вызывал до цикла и после его завершения. Числа дробные, потому что я использовал среднее арифметическое пяти замеров. Почему я не использовал Замер производительности? У меня не было цели замерить скорость каждой строчки кода, только скорость циклов с одинаковым результатом работы.
Казалось бы и все, но & тестировать так тестировать!
Интерфейс | ДляПо | ДляКаждого | Пока | Если |
Обычное приложение | 4411,8 | 3497,2 | 5432,0 | 5454,0 |
Управляемое приложение | 4470,8 | 3584,8 | 5522,6 | 5541,0 |
В среднем платформа 8.2 на 25% быстрее, чем 8.3. Я немножко не ожидал такой разницы и решил провести тест на другой машине. Скажу только, что там 8.2 была быстрее процентов на 20.
Почему? Не знаю, дезасемблировать ядро в мои планы не входило, но в замер производительности я все же заглянул. Оказалось, что сами циклические операции в 8.3 проходят несколько быстрее, чем в 8.2. Но на строке
то есть при считывании элемента коллекции в переменную происходит значительное снижение производительность.
Для себя я сделал несколько выводов:
1. Если есть возможность использовать специализированный цикл & «Для Каждого», то лучше использовать его. Кстати, сам по себе он отрабатывает дольше чем другие циклы, но скорость
2. Если заранее знаешь количество итераций & используй «Для По». «Пока» отработает медленнее.
3. Если использовать цикл «Если» & другие программисты тебя явно не поймут.
В версии 8.3.9.2170 была усилена безопасность - теперь система запрашивает подтверждение на запуск внешних обработок, расширений и прочее. Видимо после трояна: Внимание! Первый троян для 1С -запускающий шифровальщика-вымогателя
Реализован механизм защиты от опасных действий. При выполнении потенциально опасного действия система выдает предупреждение, содержащее информацию о выполняемом действии и потенциальной опасности этого действия. К потенциально опасным действиям относятся:
Пользователь имеет возможность разрешить или отклонить потенциально опасное действие. Если действие разрешено, в ряде случаев может потребоваться повторно выполнить разрешенное действие.
Сообщение выглядит так:
Предупреждение безопасности
Открывается "" из файла " C:\.......epf". Рекомендуется обращать внимание на источник, из которого был получен данный файл. Если с источником нет договоренности о разработке дополнительных модулей, или есть сомнения в содержимом файла, то его не рекомендуется открывать, поскольку это может нанести вред компьютеру и данным. Разрешить открывать данный файл. ДА, НЕТ
Решение:
В конфигураторе в свойствах пользователя ИБ убрать флажок "Защита от опасных действий".
Из документации: Отключение механизма защиты от опасных действий
В ряде случае необходимо отключить механизм защиты от опасных действий. Для этого можно воспользоваться следующими возможностями:
1. Выключить флажок Защита от опасных действий (ЗащитаОтОпасныхДействий) в свойствах конкретного пользователя. Это отключит защиту для этого пользователя.
2. Воспользоваться параметром ЗащитаОтОпасныхДействий методов Подключить() менеджеров внешних обработок (отчетов). В этом случае имеется возможность загрузить внешнюю обработку (отчет) без запросов пользователя.
3. Воспользоваться свойством ЗащитаОтОпасныхДействий объекта РасширениеКонфигурации перед вызовом метода Записать() этого объекта.
4. Воспользоваться параметром DisableUnsafeActionProtection файла conf.cfg. В этом случае механизм защиты от опасных действий будет отключаться для всех пользователей информационных баз, строки соединения которых удовлетворяют указанным маскам.
Отключение защиты от опасных действий выполняется по следующим правилам (в указанном порядке):
1. Защита считается отключенной, если у текущего пользователя сброшен флажок Защита от опасных действий.
2. Защита считается отключенной, если строка соединения с информационной базой удовлетворяет одному из шаблонов, указанных в параметре DisableUnsafeActionProtection файла conf.cfg.
3. Если внешняя обработка (отчет) подключается с явным образом отключенной защитой с помощью параметра ЗащитаОтОпасныхДействий.
4. Если защита явным образом отключена с помощью свойства расширения ЗащитаОтОпасныхДействий.
Для добавления отчета или обработки нужно в модуле добавить Функцию СведенияОВнешнейОбработке()
После сохранения приступим к добавлению в программу:
Ставим галку Дополнительные отчеты и обработки
Открываем дополнительные отчеты и обработки и жмем создать, появляется окно выбора файла, после выбора:
Укажите Размещение (в каком разделе отображать данный отчет/обработку) и в списке в колонке Быстрый
Если при добавлении вы получаете ошибку:
{ОбщийМодуль.ДополнительныеОтчетыИОбработки.Модуль(2621)}: Поле объекта не обнаружено (ХранилищеВариантов)
Если ВнешнийОбъектМетаданные.ХранилищеВариантов <> Неопределено Тогда
То нужно заменить в модуле объекта, в функции СведенияОВнешнейОбработке():
Для формирования и выполнения запросов к таблицам базы данных в платформе 1С используется специальный объект языка программирования Запрос. Создается этот объект вызовом конструкции Новый Запрос. Запрос удобно использовать, когда требуется получить сложную выборку данных, сгруппированную и отсортированную необходимым образом. Классический пример применения запроса - получение сводки по состоянию регистра накопления на определенный момент времени. Так же, механизм запросов позволяет легко получать информацию в различных временных разрезах.
Текст запроса – это инструкция, в соответствии с которой должен быть выполнен запрос. В тексте запроса описывается:
Инструкция составляется на специальном языке – языке запросов и состоит из отдельных частей – секций, предложений, ключевых слов, функций, арифметических и логических операторов, комментариев, констант и параметров.
Язык запросов платформы 1С очень похож на синтаксис других SQL-языков, но имеются отличия. Основными преимуществами встроенного языка запросов являются: разыменование полей, наличие виртуальных таблиц, удобная работа с итогами, нетипизированные поля в запросах.
1) Текст запроса может содержать предопределенные данные конфигурации, такие как:
Также текст запроса может содержать значения системных перечислений, которые могут быть присвоены полям в таблицах базы данных: ВидДвиженияНакопления, ВидСчета и ВидДвиженияБухгалтерии. Обращение в запросах к предопределенным данным конфигурации и значениям системных перечислений осуществляется с помощью литерала функционального типа ЗНАЧЕНИЕ. Данный литерал позволяет повысить удобочитаемость запроса и уменьшить количество параметров запроса.
Пример использования литерала ЗНАЧЕНИЕ:
2) Использование инструкции АВТОУПОРЯДОЧИВАНИЕ в запросе может сильно время выполнения запроса, поэтому, если сортировка не требуется, то лучше вообще ее не использовать. Во большинстве случаях лучше всего применять сортировку с помощью инструкции УПОРЯДОЧИТЬ ПО.
Автоупорядочивание работает по следующим принципам:
3) Что бы избежать повторного запроса к базе данных при выводе результата запроса пользователю (например, построение запроса или отображение результата запроса с помощью табличного документа) полезно использовать инструкцию ПРЕДСТАВЛЕНИЕССЫЛКИ, которая позволяет получать представление ссылочного значения. Пример:
Так же возможно использование инструкции ПРЕДСТАВЛЕНИЕ - предназначена для получения строкового представления значения произвольного типа. Отличие этих инструкций в том, что в первом случае, если инструкции передать ссылку, результатом будет строка, В остальных случаях результатом будет значение переданного параметра. Во втором случае, результатом инструкции всегда будет строка!
4) Если в запросе имеется поле с составным типом, то для таких полей возникает необходимость привести значения поля к какому-либо определенному типу с помощью инструкции ВЫРАЗИТЬ, что позволит убрать лишние таблицы из левого соединения с полем составного типа данных и ускорить выполнение запроса. Пример:
Имеется регистра накопления ОстаткиТоваров, у которого поле Регистратор имеет составной тип. В запросе выбираются Дата и Номер документов ПоступлениеТоваров, при этом при обращении к реквизитам документа через поле Регистратор не происходит множество левых соединений таблицы регистра накопления с таблицами документов-регистраторов.
Если приведение типа считается не осуществимым, то результатом приведения типа будет значение NULL.
5) Не стоит забывать про инструкцию РАЗРЕШЕННЫЕ, которая означает, что запрос выберет только те записи, на которые у текущего пользователя есть права. Если данное слово не указать, то в случае, когда запрос выберет записи, на которые у пользователя нет прав, запрос отработает с ошибкой.
6) В случае, если в запросе используется объединение, и в некоторых частях объединения присутствуют вложенные таблицы (документ с табличной частью), а в некоторых нет, возникает необходимость дополнения списка выборки полями – пустыми вложенными таблицами. Делается это при помощи ключевого слова ПУСТАЯТАБЛИЦА, после которого в скобках указываются псевдонимы полей, из которых будет состоять вложенная таблица. Пример:
7) Что бы в результат запроса не попали повторяющиеся строки, следует использовать инструкцию РАЗЛИЧНЫЕ, потому что так нагляднее и понятнее, а инструкция СГРУППИРОВАТЬ ПО применяется для группировки с помощью агрегатных функций. Ксати, при использовании агрегатных функций предложение СГРУППИРОВАТЬ ПО может быть и не указано совсем, при этом все результаты запроса будут сгруппированы в одну единственную строку. Пример:
8) Инструкция СГРУППИРОВАТЬ ПО позволяет обращаться к полям верхнего уровня, без группировки результатов по этим полям, если агрегатные функции применены к полям вложенной таблицы. Хотя в справке 1С написано, при группировке результатов запроса в списке полей выборки обязательно должны быть указаны агрегатные функции, а помимо агрегатных функций в списке полей выборки допускается указывать только поля, по которым осуществляется группировка. Пример:
9) Инструкция ЕСТЬNULL предназначена для замены значения NULL на другое значение, но не забываем, что второй параметр будет преобразован к типу первого в случае, если тип первого параметра является строкой или числом.
10) При обращении к главной таблице можно в условии обратиться к данным подчиненной таблицы. Такая возможность называется разыменование полей подчиненной таблицы.
Пример (поиск документов, содержащих в табличной части определенный товар):
Преимущество этого запроса перед запросом к подчиненной таблице Приходная.Товары в том, что если есть дубли в документах, результат запроса вернет только уникальные документы без использования ключевого слова РАЗЛИЧНЫЕ.
11) Интересный вариант оператора В - это проверка вхождения упорядоченного набора в множество таких наборов (Поле1, Поле2, ... , ПолеN) В (Поле1, Поле2, ... , ПолеN).
Пример:
12) При любой возможности используйте виртуальные таблицы запросов. При создании запроса система предоставляет в качестве источников данных некоторое количество виртуальных таблиц - это таблицы, которые так же являются результатом запроса, который система формирует в момент выполнения соответствующего участка кода.
Разработчик может самостоятельно получить те же самые данные, которые система предоставляет ему в качестве виртуальных таблиц, однако алгоритм получения этих данных не будет оптимизирован, так как:
Все виртуальные таблицы параметризованы, т. е. разработчику предоставляется возможность задать некоторые параметры, которые система будет использовать при формировании запроса создания виртуальной таблицы. В зависимости от того, какие параметры виртуальной таблицы указаны разработчиком, система может формировать РАЗЛИЧНЫЕ запросы для получения одной и той же виртуальной таблицы, причем они будут оптимизированы с точки зрения переданных параметров.
Не всегда разработчик имеет возможность получить
13) В клиент-серверном варианте работы функция ПОДСТРОКА() реализуется при помощи функции SUBSTRING() соответствующего оператора SQL, передаваемого серверу баз данных SQL Server, который вычисляет тип результата функции SUBSTRING() по сложным правилам в зависимости от типа и значений ее параметров, а так же в зависимости от контекста, в котором она используется. В большинстве случаев эти правила не оказывают влияния на выполнение запроса, но бывают случаи, когда для выполнения запроса существенна максимальная длина строки результата, вычисленная SQL Server. Важно иметь в виду, что в некоторых контекстах использования функции ПОДСТРОКА() максимальная длина ее результата может оказаться равной максимальной длине строки ограниченной длины, которая в SQL Server равна 4000 символам. Это может привести к неожиданному аварийному завершению выполнения запроса:
Microsoft OLE DB Provider for SQL Server: Warning: The query processor could not produce a query plan from the optimizer because the total length of all the columns in the GROUP BY or ORDER BY clause exceeds 8000 bytes.
HRESULT=80040E14, SQLSTATE=42000, native=8618
Чтобы избежать такой ошибки, не рекомендуют использовать функцию ПОДСТРОКА() с целью приведения строк неограниченной длины к строкам ограниченной длины. Вместо нее лучше использовать операцию приведения типа ВЫРАЗИТЬ().
14) С осторожностью используйте ИЛИ в конструкции ГДЕ, так как использование условия с ИЛИ может значительно "утяжелить" запрос. Решить проблему можно конструкцией ОБЪЕДИНИТЬ ВСЕ. Пример:
15) Условие НЕ В в конструкции ГДЕ увеличивает время исполнения запроса, так как это своего рода НЕ (ИЛИ1 ИЛИ2 ... ИЛИn), поэтому для больших таблиц старайтесь использовать ЛЕВОЕ СОЕДИНЕНИЕ с условием ЕСТЬ NULL. Пример:
16) При использовании Временных таблиц нужно индексировать поля условий и соединений в этих таблицах, НО, при использовании индексов запрос может выполняться еще медленнее. Поэтому необходимо анализировать каждый запрос с применением индекса и без, замерять скорость выполнения запроса и принимать окончательное решение.
Если вы помещаете во временную таблицу данные, которые изначально индексированы по некоторым полям, то во временной таблице индекса по этим полям уже не будет.
17) Если вы не используете Менеджер временных таблиц, то явно удалять временную таблицу не требуется, она будет удалена после завершения выполнения пакетного запроса, иначе следует удалить временную таблицу одним из способов: командой УНИЧТОЖИТЬ в запросе, вызвать метод МенеджерВременныхТаблиц.Закрыть().