Skip to content

4. Планирование отпусков и связанные метаданные#40

Open
Dinarhas wants to merge 4 commits into
developfrom
4-vacation-planning
Open

4. Планирование отпусков и связанные метаданные#40
Dinarhas wants to merge 4 commits into
developfrom
4-vacation-planning

Conversation

@Dinarhas

@Dinarhas Dinarhas commented Jul 18, 2025

Copy link
Copy Markdown
  • В подсистему учета отдела добавлен документ планирование отпуска
  • Добавлен регистр сведений отпуска сотрудников и отчет график отпусков

Summary by CodeRabbit

  • Новые возможности
    • Добавлен документ для планирования отпусков сотрудников с проверкой корректности дат и расчетом количества дней отпуска.
    • Внедрен отчет «График отпусков» с визуализацией отпусков сотрудников на диаграмме Ганта за выбранный период.
    • Создан регистр сведений для хранения информации об отпусках сотрудников.
    • Добавлены роли с правами просмотра и редактирования отпусков.
    • Все новые объекты интегрированы в подсистему учета проектных отделов.

@Dinarhas Dinarhas changed the title Планирование отпусков и связанные метаданные 4. Планирование отпусков и связанные метаданные Jul 18, 2025
@coderabbitai

coderabbitai Bot commented Jul 18, 2025

Copy link
Copy Markdown

Walkthrough

В систему добавлены новые объекты для управления отпусками сотрудников: документ «ПланированиеОтпуска», отчет «ГрафикОтпусков» и регистр сведений «ОтпускаСотрудников». Реализованы формы, модули обработки и визуализации, а также интеграция этих объектов в подсистему «УчетПроектныхОтделов». Добавлены роли и права доступа для просмотра и редактирования отпусков.

Changes

Файл(ы) Краткое описание изменений
src/cf/Configuration.xml, src/cf/Subsystems/УчетПроектныхОтделов.xml Добавлены ссылки на новые объекты: документ «ПланированиеОтпуска», отчет «ГрафикОтпусков», регистр сведений «ОтпускаСотрудников» в конфигурацию и подсистему.
src/cf/Documents/ПланированиеОтпуска.xml Описан новый документ «ПланированиеОтпуска» с реквизитами: сотрудник, дата начала, дата окончания; настройка нумерации, проведения, связи с регистром сведений.
src/cf/Documents/ПланированиеОтпуска/Ext/ManagerModule.bsl Реализован экспортируемый метод подготовки параметров проведения документа, генерация и выполнение запроса по реквизитам документа.
src/cf/Documents/ПланированиеОтпуска/Ext/ObjectModule.bsl Добавлены процедуры проверки заполнения (валидация дат) и проведения (запись движений в регистр сведений).
src/cf/Documents/ПланированиеОтпуска/Forms/ФормаДокумента.xml, src/cf/Documents/ПланированиеОтпуска/Forms/ФормаДокумента/Ext/Form.xml Добавлена управляемая форма документа с группами полей, обработчиками изменений и расчетом количества дней отпуска.
src/cf/Documents/ПланированиеОтпуска/Forms/ФормаДокумента/Ext/Form/Module.bsl Реализованы обработчики событий формы: пересчет количества дней отпуска, синхронизация дат отпуска.
src/cf/InformationRegisters/ОтпускаСотрудников.xml Добавлен регистр сведений с измерением «Сотрудник» и ресурсами «ДатаНачала», «ДатаОкончания» для хранения периодов отпусков сотрудников.
src/cf/Reports/ГрафикОтпусков.xml, src/cf/Reports/ГрафикОтпусков/Forms/Форма.xml, src/cf/Reports/ГрафикОтпусков/Forms/Форма/Ext/Form.xml Добавлен отчет «ГрафикОтпусков» с формой, содержащей командную панель, поля для выбора периода и диаграмму Ганта для визуализации отпусков.
src/cf/Reports/ГрафикОтпусков/Forms/Форма/Ext/Form/Module.bsl Реализованы процедуры формирования отчета: выборка данных по отпускам, построение диаграммы Ганта по выбранному периоду, обработка пользовательских команд.
src/cf/Roles/ПросмотрОтпусков.xml, src/cf/Roles/ПросмотрОтпусков/Ext/Rights.xml Добавлена роль «ПросмотрОтпусков» и права доступа для просмотра документов, регистров и отчетов, связанных с отпусками.
src/cf/Roles/РедактированиеОтпусков.xml, src/cf/Roles/РедактированиеОтпусков/Ext/Rights.xml Добавлена роль «РедактированиеОтпусков» с полными правами на документы, регистры, отчеты и подсистему, связанные с управлением отпусками.

Sequence Diagram(s)

sequenceDiagram
    participant Пользователь
    participant ФормаДокумента
    participant Документ.ПланированиеОтпуска
    participant Регистр.ОтпускаСотрудников

    Пользователь->>ФормаДокумента: Вводит сотрудника и даты отпуска
    ФормаДокумента->>ФормаДокумента: Пересчет количества дней отпуска при изменении дат
    Пользователь->>Документ.ПланированиеОтпуска: Проводит документ
    Документ.ПланированиеОтпуска->>Регистр.ОтпускаСотрудников: Записывает движение (даты, сотрудник)
Loading
sequenceDiagram
    participant Пользователь
    participant ФормаОтчета
    participant СерверОтчета
    participant Регистр.ОтпускаСотрудников
    participant ДиаграммаГанта

    Пользователь->>ФормаОтчета: Задает период и нажимает "Сформировать"
    ФормаОтчета->>СерверОтчета: Запрос на формирование отчета
    СерверОтчета->>Регистр.ОтпускаСотрудников: Запрашивает отпуска по периоду
    Регистр.ОтпускаСотрудников-->>СерверОтчета: Возвращает данные по отпускам
    СерверОтчета->>ДиаграммаГанта: Формирует и отображает диаграмму отпусков
Loading

Estimated code review effort

  • src/cf/Configuration.xml, src/cf/Subsystems/УчетПроектныхОтделов.xml — 1 (~5 минут)
  • src/cf/Documents/ПланированиеОтпуска.xml — 2 (10–30 минут)
  • src/cf/Documents/ПланированиеОтпуска/Ext/ManagerModule.bsl — 2 (10–30 минут)
  • src/cf/Documents/ПланированиеОтпуска/Ext/ObjectModule.bsl — 3 (30–60 минут)
  • src/cf/Documents/ПланированиеОтпуска/Forms/ФормаДокумента.xml, src/cf/Documents/ПланированиеОтпуска/Forms/ФормаДокумента/Ext/Form.xml — 2 (10–30 минут)
  • src/cf/Documents/ПланированиеОтпуска/Forms/ФормаДокумента/Ext/Form/Module.bsl — 2 (10–30 минут)
  • src/cf/InformationRegisters/ОтпускаСотрудников.xml — 2 (10–30 минут)
  • src/cf/Reports/ГрафикОтпусков.xml, src/cf/Reports/ГрафикОтпусков/Forms/Форма.xml, src/cf/Reports/ГрафикОтпусков/Forms/Форма/Ext/Form.xml — 2 (10–30 минут)
  • src/cf/Reports/ГрафикОтпусков/Forms/Форма/Ext/Form/Module.bsl — 3 (30–60 минут)
  • src/cf/Roles/ПросмотрОтпусков.xml, src/cf/Roles/ПросмотрОтпусков/Ext/Rights.xml — 1 (~5 минут)
  • src/cf/Roles/РедактированиеОтпусков.xml, src/cf/Roles/РедактированиеОтпусков/Ext/Rights.xml — 1 (~5 минут)

📜 Recent review details

Configuration used: .coderabbit.yaml
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 4556a09 and 4619d99.

📒 Files selected for processing (1)
  • src/cf/Documents/ПланированиеОтпуска/Ext/ManagerModule.bsl (1 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
  • src/cf/Documents/ПланированиеОтпуска/Ext/ManagerModule.bsl

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Explain this complex logic.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai explain this code block.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and explain its main purpose.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Support

Need help? Create a ticket on our support page for assistance with any issues or questions.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR.
  • @coderabbitai generate sequence diagram to generate a sequence diagram of the changes in this PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

🧹 Nitpick comments (11)
src/cf/Reports/ГрафикОтпусков/Forms/Форма.xml (2)

5-11: Добавить англоязычный синоним формы

В конфигурации присутствуют англоязычные локали. Чтобы не получать пустые подписи в интерфейсе при переключении языка, добавьте элемент <v8:item> c <v8:lang>en</v8:lang> и заполняйте <v8:content>Vacation schedule</v8:content>.


14-14: Рассмотрите возможность включить справку

<IncludeHelpInContents> установлен в false. Если отчёт будет использоваться конечными пользователями, короткое встроенное описание улучшит UX.

src/cf/Documents/ПланированиеОтпуска/Forms/ФормаДокумента.xml (1)

5-11: Нет англоязычного названия формы документа

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

src/cf/Reports/ГрафикОтпусков.xml (3)

15-21: Добавьте мультиязычные синонимы отчёта

Как минимум нужен английский <v8:item> для корректной локализации.


24-31: Отсутствует схема компоновки данных

Если отчёт строится только через управляемую форму (Gantt-чарт) — ок.
Если планируется выгрузка в табличные формы/печатные формы, добавьте DCS и форму настроек, иначе стандартные функции компоновки отчётов будут недоступны.


32-35: Подумайте о включении справки для отчёта

<IncludeHelpInContents> = false – мелочь, но поиск по справке облегчает поддержку.

src/cf/Documents/ПланированиеОтпуска/Forms/ФормаДокумента/Ext/Form/Module.bsl (1)

37-42: Рассмотрите использование константы вместо магического числа.

Использование числа 86400 (количество секунд в сутках) затрудняет понимание кода. Рекомендуется использовать именованную константу или встроенную функцию.

-КоличествоДнейОтпуска = 1 + (Объект.ДатаОкончания - Объект.ДатаНачала) / 86400;
+КоличествоДнейОтпуска = 1 + (Объект.ДатаОкончания - Объект.ДатаНачала) / (24 * 60 * 60); // секунд в сутках

Или еще лучше:

-КоличествоДнейОтпуска = 1 + (Объект.ДатаОкончания - Объект.ДатаНачала) / 86400;
+КоличествоДнейОтпуска = (КонецДня(Объект.ДатаОкончания) - НачалоДня(Объект.ДатаНачала)) / (24 * 60 * 60) + 1;
src/cf/Documents/ПланированиеОтпуска/Ext/ManagerModule.bsl (1)

3-25: Функция корректна, но можно улучшить обработку ошибок

Реализация следует стандартным паттернам 1C для подготовки параметров проведения документов. Логика построения запроса и извлечения данных выполнена правильно.

Рекомендуется добавить проверку корректности ссылки на документ:

 Функция ПодготовитьПараметрыПроведения(ДокументСсылка, Отказ) Экспорт
 	
+	Если НЕ ЗначениеЗаполнено(ДокументСсылка) Тогда
+		Отказ = Истина;
+		Возврат Неопределено;
+	КонецЕсли;
+	
 	ПараметрыПроведения = Новый Структура;
src/cf/InformationRegisters/ОтпускаСотрудников.xml (1)

67-150: Ресурсы дат настроены правильно

Ресурсы ДатаНачала и ДатаОкончания корректно определены как поля типа дата. Включены полнотекстовый поиск и история данных.

Рекомендуется рассмотреть добавление ограничений на даты для предотвращения логических ошибок:

<MinValue>01.01.1900</MinValue>
<MaxValue>31.12.2099</MaxValue>
src/cf/Documents/ПланированиеОтпуска.xml (2)

122-163: Атрибут ДатаНачала требует дополнительной настройки

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

Рекомендуется добавить ограничения на минимальную дату:

<MinValue>01.01.1900</MinValue>
<MaxValue>31.12.2099</MaxValue>

164-205: Атрибут ДатаОкончания требует дополнительной настройки

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

Применить такие же ограничения, как для ДатаНачала:

<MinValue>01.01.1900</MinValue>
<MaxValue>31.12.2099</MaxValue>
📜 Review details

Configuration used: .coderabbit.yaml
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between b73969c and 41ff567.

📒 Files selected for processing (13)
  • src/cf/Configuration.xml (3 hunks)
  • src/cf/Documents/ПланированиеОтпуска.xml (1 hunks)
  • src/cf/Documents/ПланированиеОтпуска/Ext/ManagerModule.bsl (1 hunks)
  • src/cf/Documents/ПланированиеОтпуска/Ext/ObjectModule.bsl (1 hunks)
  • src/cf/Documents/ПланированиеОтпуска/Forms/ФормаДокумента.xml (1 hunks)
  • src/cf/Documents/ПланированиеОтпуска/Forms/ФормаДокумента/Ext/Form.xml (1 hunks)
  • src/cf/Documents/ПланированиеОтпуска/Forms/ФормаДокумента/Ext/Form/Module.bsl (1 hunks)
  • src/cf/InformationRegisters/ОтпускаСотрудников.xml (1 hunks)
  • src/cf/Reports/ГрафикОтпусков.xml (1 hunks)
  • src/cf/Reports/ГрафикОтпусков/Forms/Форма.xml (1 hunks)
  • src/cf/Reports/ГрафикОтпусков/Forms/Форма/Ext/Form.xml (1 hunks)
  • src/cf/Reports/ГрафикОтпусков/Forms/Форма/Ext/Form/Module.bsl (1 hunks)
  • src/cf/Subsystems/УчетПроектныхОтделов.xml (1 hunks)
🧰 Additional context used
🧠 Learnings (1)
src/cf/Documents/ПланированиеОтпуска/Ext/ObjectModule.bsl (1)
Learnt from: ivanmolodec
PR: firstBitSportivnaya/PDM#36
File: src/cf/Documents/ПланированиеОтпуска/Ext/ObjectModule.bsl:2-16
Timestamp: 2025-07-14T11:38:59.877Z
Learning: В 1C:Enterprise валидацию данных следует выполнять либо на уровне настроек метаданных (настройка "Проверка заполнения"), либо в процедуре ОбработкаПроверкиЗаполнения. Процедура ОбработкаПроведения предназначена для записи движений в регистры, а не для валидации данных.
🔇 Additional comments (17)
src/cf/Reports/ГрафикОтпусков/Forms/Форма.xml (1)

14-18: Проверьте адаптацию формы для мобильной платформы

В <UsePurposes> указана мобильная платформа, однако сама форма пустая. Удостоверьтесь, что расширение формы (Ext) действительно содержит мобильный-френдли макет, иначе возможны проблемы отображения.

src/cf/Documents/ПланированиеОтпуска/Forms/ФормаДокумента.xml (1)

14-18: Мобильная цель использования требует проверки разметки

Проверьте наличие оптимизированного мобильного макета и событий в расширении формы, иначе при открытии из мобильного клиента возможны ошибки.

src/cf/Configuration.xml (1)

1653-1654: Обеспечьте сквозную интеграцию новых метаданных

Объекты зарегистрированы в конфигурации, но проверьте следующее:

  1. Включены ли они в план обмена (если используется распределённая ИБ).
  2. Есть ли правила полнотекстового поиска/ρерепроверка индексирования.
  3. Созданы ли права доступа по умолчанию («Полные права» их не покрывают для рядовых ролей).

Это лучше сделать до передачи конфигурации тестировщикам.

Also applies to: 1735-1735, 1874-1874

src/cf/Documents/ПланированиеОтпуска/Forms/ФормаДокумента/Ext/Form.xml (1)

1-127: Хорошо структурированная XML-форма документа.

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

src/cf/Documents/ПланированиеОтпуска/Forms/ФормаДокумента/Ext/Form/Module.bsl (2)

1-8: Корректная инициализация формы на сервере.

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


10-17: Корректная логика обновления даты окончания.

Процедура правильно рассчитывает дату окончания отпуска на основе количества дней и даты начала.

src/cf/Reports/ГрафикОтпусков/Forms/Форма/Ext/Form.xml (1)

1-388: Отлично настроенная форма отчета с диаграммой Ганта.

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

src/cf/Documents/ПланированиеОтпуска/Ext/ObjectModule.bsl (2)

4-16: Корректная реализация валидации данных.

Валидация правильно размещена в процедуре ОбработкаПроверкиЗаполнения согласно стандартам 1С:Предприятие. Проверка логической связи между датами начала и окончания отпуска реализована корректно с выводом понятного сообщения пользователю.


19-47: Правильная реализация проведения документа.

Процедура проведения корректно:

  • Получает параметры через менеджер документа
  • Проверяет корректность подготовки данных
  • Очищает предыдущие движения
  • Создает новые записи в регистре сведений
  • Активирует запись движений

Логика соответствует стандартам 1С:Предприятие.

src/cf/Reports/ГрафикОтпусков/Forms/Форма/Ext/Form/Module.bsl (2)

2-11: Корректная клиентская процедура формирования отчета.

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


13-52: Эффективная реализация построения диаграммы Ганта.

Серверная процедура корректно:

  • Выполняет запрос к регистру сведений с правильной логикой пересечения периодов
  • Настраивает диаграмму Ганта с отключением автоопределения интервала
  • Создает точки и интервалы для каждого отпуска
  • Использует КонецДня() для корректного отображения дат окончания

Логика построения отчета реализована профессионально.

src/cf/Documents/ПланированиеОтпуска/Ext/ManagerModule.bsl (1)

31-61: Построение запроса выполнено корректно

Функция правильно формирует текст запроса с использованием временной таблицы для получения реквизитов документа. Структура запроса соответствует стандартам 1C.

src/cf/InformationRegisters/ОтпускаСотрудников.xml (2)

3-65: Метаданные регистра настроены корректно

Конфигурация регистра сведений соответствует назначению хранения данных об отпусках сотрудников. Правильно настроены периодичность (RecorderPosition) и режим записи (RecorderSubordinate) для документооборота.


151-194: Измерение Сотрудник настроено оптимально

Правильно настроен тип ссылки на справочник Сотрудники, включен основной отбор (MainFilter) для повышения производительности запросов.

src/cf/Documents/ПланированиеОтпуска.xml (3)

3-81: Конфигурация документа выполнена корректно

Документ правильно настроен для планирования отпусков с поддержкой проведения и записи в регистр ОтпускаСотрудников. Основные свойства документа соответствуют стандартам 1C.


83-121: Атрибут Сотрудник настроен правильно

Корректно определен тип ссылки на справочник Сотрудники с обязательным заполнением (ShowError).


63-65: Правильная настройка связи с регистром

Корректно настроена запись в регистр ОтпускаСотрудников при проведении документа.

Comment on lines 69 to 71

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

Права и команды для новых объектов пока не добавлены

Документ, отчёт и регистр добавлены в подсистему, но в ролях, командном интерфейсе и рабочих местах они пока отсутствуют.
• Создайте роли «Чтение/Изменение ПланированияОтпуска» и «Просмотр ГрафикаОтпусков».
• Добавьте команды в интерфейс подсистемы, иначе элементы не будут видны пользователю.

🤖 Prompt for AI Agents
In src/cf/Subsystems/УчетПроектныхОтделов.xml around lines 69 to 71, the new
objects Document.ПланированиеОтпуска, Report.ГрафикОтпусков, and
InformationRegister.ОтпускаСотрудников are added but lack associated roles and
commands. Create roles named «Чтение/Изменение ПланированияОтпуска» and
«Просмотр ГрафикаОтпусков» to grant appropriate permissions. Then, add the
necessary commands for these objects in the subsystem's command interface to
ensure they are visible and accessible to users.

Comment on lines 19 to 26

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Исправьте вызов серверной процедуры с клиента.

В строке 23 происходит вызов процедуры РасчетКоличестваДнейОтпуска(), которая помечена как серверная (&НаСервере), из клиентской процедуры. Это приведет к ошибке выполнения.

-&НаКлиенте
-Процедура ДатаНачалаПриИзменении(Элемент)
-	
-	Если ЗначениеЗаполнено(Объект.ДатаОкончания) Тогда
-		РасчетКоличестваДнейОтпуска();
-	КонецЕсли
-	
-КонецПроцедуры
+&НаКлиенте
+Процедура ДатаНачалаПриИзменении(Элемент)
+	
+	Если ЗначениеЗаполнено(Объект.ДатаОкончания) Тогда
+		РасчетКоличестваДнейОтпускаНаСервере();
+	КонецЕсли
+	
+КонецПроцедуры

Добавьте обертку для вызова серверной процедуры:

+&НаСервере
+Процедура РасчетКоличестваДнейОтпускаНаСервере()
+	РасчетКоличестваДнейОтпуска();
+КонецПроцедуры
🤖 Prompt for AI Agents
In src/cf/Documents/ПланированиеОтпуска/Forms/ФормаДокумента/Ext/Form/Module.bsl
around lines 19 to 26, the client procedure ДатаНачалаПриИзменении calls the
server procedure РасчетКоличестваДнейОтпуска() directly, which causes a runtime
error. To fix this, create a client-side wrapper procedure marked with
&НаКлиенте that calls the server procedure asynchronously using
ВызватьПроцедуруСервера or equivalent remote call mechanism, then replace the
direct call in ДатаНачалаПриИзменении with a call to this client wrapper.

@ivanmolodec ivanmolodec self-requested a review July 22, 2025 09:44
@ivanmolodec ivanmolodec requested a review from Sidorovaa90 July 22, 2025 09:45
@ivanmolodec ivanmolodec added the Учет развития сотрудников Учет развития сотрудников label Jul 22, 2025
@ivanmolodec ivanmolodec added Учет проектных отделов Учет проектных отделов and removed Учет развития сотрудников Учет развития сотрудников labels Jul 22, 2025

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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

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

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Нет Смысла в серверной процедуре. Возвращай на клиент и вызывай при открытии а не при создании

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

♻️ Duplicate comments (1)
src/cf/Documents/ПланированиеОтпуска/Ext/ManagerModule.bsl (1)

3-19: Упростите структуру функции согласно замечанию предыдущего ревью

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

Рекомендую упростить функцию:

 Функция ПодготовитьПараметрыПроведения(ДокументСсылка, Отказ) Экспорт
 	
-	ПараметрыПроведения = Новый Структура;
-	
 	Запрос = Новый Запрос;
 	Запрос.УстановитьПараметр("Ссылка", ДокументСсылка);	
+	Запрос.Текст = ТекстЗапросаРеквизитыДокумента();
-	Запрос.Текст = ТекстЗапросаРеквизитыДокумента(ПараметрыПроведения);
 	Результат = Запрос.Выполнить();
 	
 	ТаблицаРеквизиты = Результат.Выгрузить();
+	Если ТаблицаРеквизиты.Количество() = 0 Тогда
+		Отказ = Истина;
+		Возврат Новый Структура;
+	КонецЕсли;
+	
 	Реквизиты        = ОбщегоНазначения.СтрокаТаблицыЗначенийВСтруктуру(ТаблицаРеквизиты[0]);
+	
+	ПараметрыПроведения = Новый Структура;
 	ПараметрыПроведения.Вставить("Реквизиты", Реквизиты);
 	
 	Возврат ПараметрыПроведения;
 	
 КонецФункции

И упростите вспомогательную функцию:

-Функция ТекстЗапросаРеквизитыДокумента(ПараметрыПроведения)
+Функция ТекстЗапросаРеквизитыДокумента()
 	
-	ПараметрыПроведения.Вставить("Реквизиты", ПараметрыПроведения.Количество());
-	
 	ТекстЗапроса =
 	"ВЫБРАТЬ
 	|	ПланированиеОтпуска.Ссылка КАК Ссылка,
📜 Review details

Configuration used: .coderabbit.yaml
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 81034ae and 4556a09.

📒 Files selected for processing (4)
  • src/cf/Documents/ПланированиеОтпуска/Ext/ManagerModule.bsl (1 hunks)
  • src/cf/Documents/ПланированиеОтпуска/Ext/ObjectModule.bsl (1 hunks)
  • src/cf/Documents/ПланированиеОтпуска/Forms/ФормаДокумента/Ext/Form.xml (1 hunks)
  • src/cf/Documents/ПланированиеОтпуска/Forms/ФормаДокумента/Ext/Form/Module.bsl (1 hunks)
✅ Files skipped from review due to trivial changes (1)
  • src/cf/Documents/ПланированиеОтпуска/Forms/ФормаДокумента/Ext/Form/Module.bsl
🚧 Files skipped from review as they are similar to previous changes (2)
  • src/cf/Documents/ПланированиеОтпуска/Forms/ФормаДокумента/Ext/Form.xml
  • src/cf/Documents/ПланированиеОтпуска/Ext/ObjectModule.bsl

Comment on lines 13 to 14

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Добавьте проверку наличия данных перед обращением к индексу массива

Отсутствует проверка того, что результат запроса содержит строки перед обращением к ТаблицаРеквизиты[0]. Это может привести к ошибке времени выполнения, если документ с указанной ссылкой не найден.

Примените этот diff для добавления проверки:

 ТаблицаРеквизиты = Результат.Выгрузить();
+Если ТаблицаРеквизиты.Количество() = 0 Тогда
+	Отказ = Истина;
+	Возврат ПараметрыПроведения;
+КонецЕсли;
+
 Реквизиты        = ОбщегоНазначения.СтрокаТаблицыЗначенийВСтруктуру(ТаблицаРеквизиты[0]);
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
ТаблицаРеквизиты = Результат.Выгрузить();
Реквизиты = ОбщегоНазначения.СтрокаТаблицыЗначенийВСтруктуру(ТаблицаРеквизиты[0]);
ТаблицаРеквизиты = Результат.Выгрузить();
Если ТаблицаРеквизиты.Количество() = 0 Тогда
Отказ = Истина;
Возврат ПараметрыПроведения;
КонецЕсли;
Реквизиты = ОбщегоНазначения.СтрокаТаблицыЗначенийВСтруктуру(ТаблицаРеквизиты[0]);
🤖 Prompt for AI Agents
In src/cf/Documents/ПланированиеОтпуска/Ext/ManagerModule.bsl around lines 13 to
14, add a check to ensure ТаблицаРеквизиты contains at least one row before
accessing ТаблицаРеквизиты[0]. Modify the code to verify that ТаблицаРеквизиты
is not empty, and only then convert the first row to a structure using
ОбщегоНазначения.СтрокаТаблицыЗначенийВСтруктуру to prevent runtime errors when
no data is returned.

Comment thread src/cf/Documents/ПланированиеОтпуска/Ext/ManagerModule.bsl Outdated
@ivanmolodec

Copy link
Copy Markdown
Member

Нужно доработать в соответствии со следующей логикой:
У документа планирования отпусков:
Реквизиты шапки:
Подразделение
Сотрудник (при изменении сотрудника автоматически заполнять текущим подразделением сотрудника)
Табличная часть План отпусков:
Дата начала
Дата окончания
Количество дней (расчет дата окончания - дата начала)

При проведении записывать в РС Планы отпусков по 1 записи на каждый день между всеми периодами

Соответственно в РС Планы отпусков
Структура:
Измерения:
Подразделение
Сотрудник
Дата

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Учет проектных отделов Учет проектных отделов

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Добавить в подсистему учета отдела документ Планирование отпуска

3 participants