Сергей Ж
Оптимизация запроса с помощью псевдоключа сформированного функцией АВТОНОМЕРЗАПИСИ()
Сергей Ж
Недавно на проекте делал оптимизацию в запросе, где пришлось соединить большую таблицу саму с собой. Соединение было почти по всем полям, на 30 000 строк уходило ориентировочно 40 секунд. Для ускорения придумал механизм установки на одинаковые поля временного ключа с помощью функции "АВТОНОМЕРЗАПИСИ()" — в статье расскажу про этот способ, будет полезно для всех разработчиков владеющих языком запросов.
Установка штампа в файл PDF средствами платформы 1С без применения ImageMagick
Сергей Ж
На проекте столкнулся с PDF файлами, объем которых в десятки страниц. Их конвертация доходила до получаса. После оптимизации, которая описана в данной статье, обработка файлов ускорились до 2 минут. Так появилась идея статьи. Рассмотрим редактирование файла PDF: вставим в PDF картинку со штампом. И немного помучаем ImageMagick. Будет полезно для программистов любого уровня.
Как установить ограничения доступа на дополнительные реквизиты 1С без RLS
Сергей Ж
Вот уже 20 лет в 1С я сталкиваюсь со странными ситуациями, каждый раз находится логическое объяснение. Магии не существует, но я впервые решил задачу по дополнительным реквизитам 1С и не понимаю, как это работает. Спойлер: недокументированные возможности платформы, не «магия».
Обход дерева без рекурсии
Сергей Ж
В очередной раз увидел, как обход дерева рекурсией приводит к бесконечной вложенности и завершению работы по ошибке. Поэтому предлагаю шпаргалку для отказа от рекурсии за счет циклов. Если дерево замкнуто, то и в моем алгоритме тоже может возникнуть бесконечный цикл. Как от него избавляться каждый решает самостоятельно: проверка уровня вложенности, проверка всех узлов на зацикленность или что-то еще.
Чтобы отказаться от рекурсии важно обходить дерево в ширину, плоско по уровням:
Например, у нас есть дерево, где одному руководителю назначается несколько сотрудников, а в результате мы хотим получить плоскую таблицу, в которой будут: Руководитель, его Сотрудник, Уровень руководителя и Уровень сотрудника. В этом случае код будет следующий:
В сети много подобных описаний, но хочется все иметь в оном месте, поэтому добавляю данную статью в нашу библиотеку разработчика.
Управляемые формы: не срабатывает оповещение о закрытии формы
Сергей Ж
После появления управляемых форм и отключения в них модального режима какие-то данные из формы разработчики стали получать через описание оповещения, а точнее через параметр "ОписаниеОповещенияОЗакрытии" при открытии формы. Для того чтобы процедура, прописанная в этом параметре, получила необходимые данные важно принудительно закрыть форму, передавая туда данные.
В коде это обычно выглядит:
Далее создаем функцию, в которую будет возвращаться информация из формы:
Добавляем код в самой форме:
Все это писали, всё это хорошо работает, но у вендора есть сюрприз. При принудительном закрытии формы из события "ПриОткрытии" оповещение о закрытии не срабатывает. И что же делать? Я знаю два пути обхода, один я нашел, второй придумал.
Зачем нужно свойство РежимКомпоновкиДанных у объекта СхемаЗапроса на примере динамического списка
Сергей Ж
В последнее время при изменении динамического списка, я использую объект "СхемаЗапроса". Это работает это так:
Расширение функционала общей формы «ФормаОтчета» для работы с новыми элементами формы
Сергей Ж
Задача: отобразить на форме отчета период отчета, как в типовых документах. В виде месяца с возможностью регулировать и выбирать конкретный месяц.
Ошибка лишней видимости объектов при включенном RLS
Сергей Ж
Статья имеет формат инструкции для тех, кто настраивает RLS и получает ошибку видимости объектов, которых не должно быть видно при правильных настройках.
Использование типового механизма многопоточности БСП
Сергей Ж
В продолжении статьи «Ускорение обработки данных в 1С» возникла мысль описать как многопоточное выполнение реализовано в текущей версии БСП.
БСП развивается, постоянно меняется. На данный момент я реализовывал многопоточный функционал на базе БСП 3.1.9. Предыдущая версия отличается по параметрам рассматриваемых функций. Статья будет полезна как начинающим разработчикам, так и продвинутым разработчикам, которых эта тема еще не коснулась.
Расширение механизма представлений под универсальный вывод иерархии подразделений
Сергей Ж
Кому полезно: любому, кто пишет отчеты в ЗУП 3.1
На данный момент веду разработку в ЗУП 3.1. В последнее время при разработке часто стал сталкиваться с необходимостью вывести в отчет или обработку иерархию подразделений в виде таблицы.
Чтобы не писать каждый раз новый запрос я решил расширить механизм представлений, с которым сталкивается каждый, кто пишет отчеты в ЗУП 3. Провел анализ кода и появилось понимание, что механизм представлений очень легко расширяется.
Механизм представлений запускается функцией: ЗарплатаКадрыОбщиеНаборыДанных.ЗаполнитьОбщиеИсточникиДанныхОтчета(Объект, ДополнительныеПоляПредставлений = Неопределено, ТолькоРазрешенные = Истина), где Объект – наш отчет.
Представления заменяются конкретными запросами в функции «ПолучитьЗапросПоПредставлению» модуля «ЗарплатаКадрыОбщиеНаборыДанныхРасширенный», ее то я и доработал.
Функция обрабатывает имена временных таблиц представлений и возвращает запрос с текстом и параметрами. На данный момент существуют следующие ключевые слова используемые в механизме представлений:
- ШтатноеРасписание. Пример применения: отчет «ИзменениеШтатногоРасписания».
- ТекущаяКадроваяРасстановка. Пример применения: отчет «ОрганизационнаяСтруктура».
- ФункциональныеОпцииОрганизаций.
- ФактическиеОтпускаСотрудников. Пример применения: отчет «ФактическиеОтпускаСотрудников».
- ПлановыеНачисленияСотрудников. Пример применения: отчет «КадроваяИсторияСотрудников».
- ПлановыеУдержанияСотрудников. Пример применения: отчет «ПлановыеУдержанияСотрудников».
- СтажиСотрудников. Пример применения: отчет «СтажиСотрудников».
- СвойстваСтатейФинансирования. Пример применения: отчет «СтатистикаПерсонала».
- БухучетЗарплатыСотрудников. Пример применения: отчет «НастройкиБухучета».
- ДанныеУчетаРабочегоВремениСотрудников.
- ДанныеУчетаВремениИСостоянийСотрудников. Пример применения: отчет «УнифицированнаяФормаТ13».
- ПлановоеВремя. Пример применения: отчет «СостоянияСотрудников».
- КадровыеДанныеФизическихЛиц. Пример применения: отчет «АнализВзносовВФонды».
- КадровыеДанныеСотрудников. Пример применения: отчет «КадроваяИсторияСотрудников».
- СотрудникиОрганизации. Пример применения: отчет «НастройкиБухучета».
- НачисленныеДоходыНДФЛ. Пример применения: отчет «НачисленныеДоходыВОтчетахПоНДФЛ».
- ТаблицаРегистра, СрезПоследних, СрезПервых. Пример применения: отчет «КадроваяИсторияСотрудников»
В нашем случае параметры будут "Только разрешенные" и "Уровень". Свою временную таблицу я решил назвать «Представления_ИерархияПодразделений». Добавляем формирование запроса внутрь проверок:
Чтобы получить динамически количество колонок, не прописывая в тексте запроса СКД каждую, в функции «ЗарплатаКадрыОбщиеНаборыДанных.ЗаменитьЗапросыКПредставлениямВиртуальныхТаблиц» добавляем код:
После выполнения процедуры:
В модуле же «ПР_ОбщегоНазначенияСервер» прописал следующие процедуры и функции:
Использование менеджера временных таблиц в СКД
Сергей Ж
Рассмотрим еще не получивший широкого распространения способ работы с внешними данным в СКД.
В процессе обсуждения работы с СКД выяснилось, что многие не знакомы со способом помещения туда временной таблицы, полученной предварительно.
Статья будет полезна разработчикам, знакомым с программным созданием СКД.
Внутренний механизм работы шаблонов ролей в производительном методе RLS
Сергей Ж
При разработке нужно стараться спроектировать архитектуру так, чтобы количество ключей было минимальным.
Разработчик 1С
Пользуясь нашим сайтом, вы даёте согласие на использование cookies. Подробнее про политику конфиденциальности.