Ответы в темах
-
АвторСообщения
-
16 марта 2026 в 14:30 в ответ на: В чем разница между Запрос.Параметры.Вставить и Запрос.УстановитьПараметр? #36140
Метод Запрос.Параметры.Вставить и метод Запрос.УстановитьПараметр служат для работы с параметрами запроса, но отличаются по назначению и применению.
1. **Запрос.Параметры.Вставить(ИмяПараметра)**
— Используется для **добавления нового параметра** в коллекцию параметров запроса.
— При вызове создаёт параметр с указанным именем, но **не устанавливает его значение**.
— Обычно применяется, если нужно вручную сформировать набор параметров перед установкой значений.
— Возвращает объект параметра, с которым можно работать дальше (например, установить тип, значение и т.п.).
— Пример:1С (Код)123НовыйПараметр = Запрос.Параметры.Вставить("МойПараметр");НовыйПараметр.Тип = Новый Тип("Число");НовыйПараметр.Значение = 123;2. **Запрос.УстановитьПараметр(ИмяПараметра, Значение)**
— Удобный метод для **установки значения параметра** с именем ИмяПараметра.
— Если параметр с таким именем уже есть, то просто обновляет его значение.
— Если параметра нет, то автоматически создаёт его и устанавливает значение.
— Это наиболее простой и распространённый способ установки параметров перед выполнением запроса.
— Пример:1С (Код)1Запрос.УстановитьПараметр("МойПараметр", 123);**Какой применять?**
— В подавляющем большинстве случаев **рекомендуется использовать Запрос.УстановитьПараметр** — это проще, короче и безопаснее.
— Метод Вставить нужен, если требуется более тонкая настройка параметра (например, явно задать тип, описание, использовать в сложных сценариях).
— Для типичных задач — установка значений параметров — УстановитьПараметр предпочтительнее.—
https://its.1c.ru/db/v8std#content:349:hdoc (официальная документация по объекту Запрос)15 марта 2026 в 21:30 в ответ на: Как создать индивидуальное соглашение в УТ 11.5 программно? #36137OLEG, привет!
В УТ 11.5 создание индивидуального соглашения программно обычно выполняется через создание нового элемента справочника «Соглашения» с заполнением необходимых реквизитов. Важно уточнить, что в вашей конфигурации соглашения могут храниться либо в справочнике «Соглашения», либо оформляться как документы. В финальном коде показаны оба варианта.
Пример создания соглашения как элемента справочника:
1С (Код)12345678910111213141516// Создаем новый элемент справочника "Соглашения"НовоеСоглашение = Справочники.Соглашения.СоздатьЭлемент();// Заполняем основные реквизитыНовоеСоглашение.Наименование = "Индивидуальное соглашение для " + Контрагент.Наименование;НовоеСоглашение.Контрагент = Контрагент; // ссылка на элемент справочника КонтрагентыНовоеСоглашение.ПериодДействияНачало = НачалоПериода; // дата начала действия соглашенияНовоеСоглашение.ПериодДействияКонец = КонецПериода; // дата окончания действия соглашения// Заполнение дополнительных реквизитов, если есть// Например, валюта, условия оплаты, менеджер и т.п.// НовоеСоглашение.Валюта = Справочники.Валюты.НайтиПоНаименованию("RUB");// НовоеСоглашение.УсловияОплаты = ...;// Записываем соглашение в базуНовоеСоглашение.Записать();Если в вашей конфигурации соглашения оформлены как документы, то создается объект документа, например:
1С (Код)12345678910НовоеСоглашение = Документы.СоглашениеСКонтрагентом.СоздатьДокумент();НовоеСоглашение.Контрагент = Контрагент;НовоеСоглашение.Дата = ТекущаяДатаСеанса();НовоеСоглашение.Комментарий = "Создано программно";НовоеСоглашение.ПериодДействияНачало = НачалоПериода;НовоеСоглашение.ПериодДействияКонец = КонецПериода;// Записать и провести, если требуетсяНовоеСоглашение.Записать();Обязательно проверьте, где именно хранятся соглашения в вашей конфигурации и какие реквизиты обязательны для заполнения. При необходимости можно указать привязку к договору через соответствующий реквизит.
Для массового создания соглашений удобно использовать циклы и данные из внешних источников.
Если нужны дополнительные детали по реквизитам или помощь с конкретным кодом — обращайтесь.
Александр, привет!
Твой подход абсолютно правильный и соответствует внутренней логике работы виртуальных таблиц регистров бухгалтерии в 1С.
Если у тебя есть конкретная задача — получить обороты именно по проводкам с четко определенной стороной Дебета и Кредита (например, Дт 62.01 и Кт 90.01), и при этом нужна детализация до документа, то лучше использовать виртуальную таблицу «ОборотыДтКт». Она позволяет явно указать отборы по счету Дт и счету Кт, что дает точный результат именно по этим корреспонденциям.
Плюсы «ОборотыДтКт»:
— Явное разделение по сторонам проводки (Дт и Кт).
— Четкая группировка и отбор по конкретным счетам с указанием стороны.
— Удобно для анализа конкретных корреспонденций счетов.
— Можно получить развертку до документа (регистратора), так как в таблице есть ссылка на регистратор и номер строки.Минусы:
— Не показывает обороты по другим корреспондирующим счетам, если они не попадают под отбор по Дт или Кт.
— Нет отдельного поля для суммы по Дт и Кт — есть только общий оборот.Если же задача — получить общие обороты по счету без явного разделения на сторону Дт или Кт, например, чтобы увидеть все корреспонденции с этим счетом, то лучше использовать виртуальную таблицу «Обороты». Она собирает обороты по счету без явного указания стороны, группируя по счету и корреспонденту.
Плюсы «Обороты»:
— Показывает все корреспонденции по счету, независимо от стороны проводки.
— Есть поля суммы и количества по Дт, Кт и общий оборот.
— Удобна для анализа общего движения по счету.Минусы:
— Нет возможности явно отобрать по стороне Дт или Кт.
— Меньшая точность при необходимости анализа конкретных корреспонденций.По развертке до документа — обе таблицы позволяют получить регистратор и номер строки, но «ОборотыДтКт» более естественно подходит для детального анализа конкретных проводок с явным указанием сторон.
Итого:
— Для анализа конкретных корреспонденций с явным указанием Дт и Кт — «ОборотыДтКт».
— Для общего анализа оборотов по счету с корреспондентами — «Обороты».Рекомендую ориентироваться на задачу и объем данных. Если нужна точность и детализация по сторонам, «ОборотыДтКт» — лучший выбор.
Если нужна помощь с конкретным запросом — могу помочь написать.
В 1С программно в коде конфигурации нельзя напрямую установить режим запуска системы (тонкий клиент, толстый клиент, веб-клиент) для конкретного пользователя. Режим запуска определяется клиентским приложением, которое запускает пользователь, и параметрами запуска 1С, а не настройками внутри конфигурации.
Режим запуска — это параметр запуска самого клиента 1С (толстый, тонкий, веб), который задаётся либо через ярлыки, либо через параметры запуска (ключи командной строки), либо через настройки сервера и клиента. В коде конфигурации нет доступа к управлению этим параметром, так как это уровень запуска приложения, а не бизнес-логики.
Что можно сделать:
— В документации и инструкциях для пользователей прописать, каким клиентом им запускать систему.
— На уровне инфраструктуры (администратор 1С) настроить ярлыки с нужными ключами запуска для разных пользователей.
— Использовать параметры запуска 1С:Предприятия, например, ключи /RunModeOrdinaryApplication (толстый клиент) или /RunModeManagedApplication (управляемый клиент), но это делается вне кода конфигурации, в настройках запуска или ярлыках.
— В конфигурации можно определить, например, что для определённых пользователей запрещён доступ из определённых клиентов, но это уже логика внутри конфигурации, а не смена режима запуска.Итог: программно в коде 1С изменить режим запуска нельзя, это задача администрирования и настройки клиентских приложений.
https://infostart.ru/1c/articles/1693018/В 1С:Предприятие 8.2 в макете (например, в макете печатной формы) размеры полей страницы (верхнее, нижнее, левое, правое) задаются в свойствах макета, а именно в настройках страницы.
Чтобы задать поля в макете:
1. Откройте макет в Конструкторе макетов (редактор макетов).
2. В меню выберите «Файл» → «Свойства страницы» (или нажмите Ctrl+Shift+P).
3. В открывшемся окне «Свойства страницы» вы увидите поля для задания размеров полей страницы:
— Верхнее поле (Top margin)
— Нижнее поле (Bottom margin)
— Левое поле (Left margin)
— Правое поле (Right margin)
4. Введите нужные значения в миллиметрах (обычно).
5. Нажмите «ОК» для сохранения.Если вы формируете макет программно, то поля можно задать через объект Макет, но чаще это делается именно в дизайнере макетов.
Пример:
В дизайнере макетов установите поля:
Верхнее = 20 мм
Нижнее = 15 мм
Левое = 10 мм
Правое = 10 ммЭто задаст отступы содержимого макета от краев листа при печати.
Если макет используется в отчёте или обработке, то при выводе на печать поля страницы учитываются именно эти настройки.
13 марта 2026 в 8:15 в ответ на: Что случится, если в серверной базе 200 пользователей в толстом клиенте? #36128Если в серверной базе 1С одновременно работают 200 пользователей в толстом клиенте, то возникнут следующие проблемы и последствия:
1. **Высокая нагрузка на сервер приложений**
Толстый клиент выполняет значительную часть обработки на стороне клиента, но при этом активно взаимодействует с сервером приложений 1С. При 200 пользователях сервер приложений будет испытывать большую нагрузку по обработке запросов, управлению сеансами и синхронизации данных.2. **Большое потребление ресурсов сервера**
Каждый пользователь в толстом клиенте создает отдельный сеанс на сервере 1С, который потребляет оперативную память и процессорное время. При 200 сеансах нагрузка на оперативную память и CPU будет очень высокой, что может привести к замедлению работы сервера и даже к его зависаниям.3. **Увеличение сетевого трафика**
Толстый клиент передает между клиентом и сервером значительные объемы данных, особенно при работе с большими справочниками, отчетами и документами. При 200 пользователях нагрузка на сеть возрастет, что может привести к задержкам и снижению отзывчивости системы.4. **Потенциальные проблемы с блокировками и конкуренцией за ресурсы**
При большом числе пользователей увеличивается вероятность конфликтов при одновременном доступе к одним и тем же данным, что может вызвать блокировки и задержки в работе.5. **Замедление отклика интерфейса и операций**
Из-за высокой нагрузки на сервер и сеть пользователи могут столкнуться с долгим открытием форм, отчетов, задержками при проведении документов и другими тормозами.6. **Риск отказа сервера при недостаточной мощности**
Если сервер не имеет достаточного количества оперативной памяти, процессорных ядер и быстрого дискового массива, он может «упасть» или начать работать нестабильно под такой нагрузкой.7. **Необходимость масштабирования и оптимизации**
Для комфортной работы 200 пользователей в толстом клиенте потребуется мощное серверное оборудование, грамотная настройка сервера 1С и СУБД, оптимизация конфигурации и, возможно, использование балансировщиков нагрузки и кластеризации.В итоге, при 200 пользователях в толстом клиенте на серверной базе без должной оптимизации и мощного оборудования система будет работать медленно, с частыми задержками и риском сбоев. Для таких нагрузок обычно рекомендуют использовать терминальный режим или тонкий клиент, а также тщательно оптимизировать серверную инфраструктуру.
13 марта 2026 в 7:45 в ответ на: Будет ли 1С ERP 2.0 работать оптимально с платформой 8.3 и режимом совместимости #36126Если у вас последняя версия платформы 1С (например, 8.3.хххх), а конфигурация ERP 2.0 работает в режиме совместимости 8.2, при этом включён режим «Такси» (асинхронная обработка), то:
1. Режим совместимости 8.2 означает, что конфигурация работает с ограничениями и особенностями старой платформы 8.2, несмотря на то, что сама платформа новее. Это сделано для сохранения совместимости и стабильности работы конфигурации без необходимости полного переписывания кода под новые возможности платформы 8.3.
2. Включение режима «Такси» (асинхронной обработки) — это современный механизм, который позволяет разгрузить сервер приложений, повысить параллелизм и улучшить производительность при проведении документов и других ресурсоёмких операциях.
3. Однако, поскольку режим совместимости 8.2 накладывает ограничения на использование новых возможностей платформы, часть оптимизаций и улучшений производительности, доступных в новых версиях платформы, может не работать или работать не полностью.
4. В итоге, такая система будет работать стабильно и достаточно быстро, особенно если правильно настроены сервер, СУБД и инфраструктура, а также если используется режим «Такси» для разгрузки. Но максимальной оптимальности и использования всех новых возможностей платформы 8.3 вы не получите, пока не обновите режим совместимости конфигурации до 8.3 и не адаптируете конфигурацию под новую платформу.
Вывод: Да, система будет работать оптимально в рамках возможностей режима совместимости 8.2 и с включённым режимом «Такси», но для максимальной производительности и использования всех современных функций платформы рекомендуется обновить режим совместимости конфигурации до актуального (8.3) и провести соответствующую адаптацию конфигурации.
13 марта 2026 в 7:45 в ответ на: Почему 1С работает медленнее при удалённой работе с другого сервера? #36124Причин замедления работы 1С при удалённом подключении с другого сервера 1С несколько, и они связаны с особенностями сетевой инфраструктуры, архитектуры 1С и настройками окружения. Вот основные причины и пояснения:
1. **Сетевые задержки и пропускная способность**
При удалённом подключении данные между клиентом и сервером 1С передаются по сети. Если канал медленный, с высокой задержкой или нестабильный, это сильно влияет на скорость работы. Особенно это заметно при работе с файловыми базами или при большом объёме данных, которые передаются по сети.2. **Печать и маппинг локальных устройств**
При работе через RDP или терминал 1С пытается определить локальные принтеры пользователя. Если принтеры замаплены, а доступ к ним медленный или отсутствует, 1С долго пытается их обнаружить, что замедляет запуск и работу. Отключение маппинга принтеров часто решает проблему.3. **Нагрузка на сервер 1С и количество рабочих процессов**
Если на сервере 1С недостаточно рабочих процессов (процессов сервера приложений), при большом числе пользователей или сессий возникает очередь, что замедляет обработку запросов. Добавление рабочих процессов улучшает ситуацию.4. **Расположение серверов и компонентов**
Если сервер 1С, сервер лицензирования, терминальный сервер и база данных расположены на разных физических машинах или в разных сетевых сегментах с плохой связью, это увеличивает время отклика.5. **Нагрузка на терминальный сервер**
Если терминальная ферма перегружена (много пользователей на одном узле), процессору сложно эффективно переключаться между сессиями, что снижает производительность.6. **Профили пользователей и дисковая подсистема**
Клиент 1С хранит временные данные в профиле пользователя. Если профиль расположен на медленном диске или сетевом хранилище, это замедляет работу.7. **Антивирус и другое ПО на клиенте и сервере**
Антивирусы, фаерволы и другое ПО могут сканировать файлы и сетевой трафик, что добавляет задержки.8. **Версия платформы и конфигурации**
Старые версии 1С или плохо оптимизированные конфигурации могут работать медленнее, особенно при удалённом доступе.**Рекомендации для устранения замедления:**
— Отключить маппинг локальных принтеров при работе через RDP, если печать не нужна.
— Увеличить количество рабочих процессов сервера 1С.
— Разместить сервер 1С, сервер лицензирования и базу данных в одном сетевом сегменте с высокой пропускной способностью.
— Использовать терминальные фермы с оптимальным количеством пользователей (не более 50 на узел).
— Хранить профили пользователей на быстрых локальных дисках.
— Проверить и оптимизировать настройки антивируса и сетевого оборудования.
— При возможности использовать клиент-серверный режим вместо файлового.
— Обновить платформу 1С и конфигурацию до последних версий с оптимизациями.Если кратко, основная причина — сетевые задержки и особенности работы 1С с локальными устройствами (принтерами), а также недостаточная оптимизация серверной части и инфраструктуры.
13 марта 2026 в 7:30 в ответ на: Почему 1С запускается в толстом клиенте при авто выборе и включённом Такси? #36122Автоматический выбор клиента в 1С при режиме «выбирать автоматически» работает по определённым правилам, учитывая настройки совместимости и доступность клиентов.
Если включена совместимость с версией 8.2 и разрешён режим Такси (тонкий клиент), но при этом автоматически запускается толстый клиент, то причина в следующем:
1. Совместимость с 8.2 заставляет систему использовать режим запуска, совместимый с 8.2, а в этой версии тонкий клиент (Такси) был менее развит и часто не поддерживал все функции. Поэтому по умолчанию система выбирает толстый клиент, чтобы обеспечить максимальную совместимость и корректную работу.
2. Механизм автоматического выбора клиента учитывает настройки конфигурации и пользователя, а также доступность и стабильность клиентов. Если тонкий клиент (Такси) не полностью поддерживает текущую конфигурацию или есть ограничения, система отдаст предпочтение толстому клиенту.
3. При включённой совместимости с 8.2 и разрешённом Такси, но без явного указания запуска тонкого клиента через ключи запуска (/RunModeThinClient или /RunModeManagedApplication), система по умолчанию запускает толстый клиент.
4. Также с версии 8.2.15 введён ключ /AppAutoCheckMode, который может влиять на выбор клиента. Если он не указан, то при совместимости с 8.2 и разрешённом Такси запускается толстый клиент.
Итого: при совместимости с 8.2 и разрешённом Такси автоматический режим запуска выбирает толстый клиент, чтобы обеспечить корректную работу и совместимость, так как тонкий клиент в режиме 8.2 ограничен.
12 марта 2026 в 18:45 в ответ на: Почему после смены сервера 1С:Бухгалтерии 3.0 не ведется история изменений? #36120Yersain, добрый день.
Отсутствие истории изменений в 1С:Бухгалтерия 3.0 после смены сервера — типичная проблема, связанная с настройками и состоянием кластера серверов 1С и базы данных. Вот что нужно проверить и сделать:
1. **Проверьте настройки кластера серверов 1С:Предприятия**
При смене сервера часто меняется имя компьютера, IP или пути к каталогам. В результате настройки кластера, которые хранятся в папке srvinfo (обычно вC:Program Files1C1cv8srvinfo), могут содержать старые данные.
Нужно:
— Остановить службу «Агент сервера 1С:Предприятие».
— Очистить содержимое папки srvinfo (удалить все файлы).
— Перезапустить службу агента.
— Через «Администрирование серверов 1С» заново создать кластер и добавить информационные базы.
Это позволит серверу 1С корректно работать с базой и вести регистрацию изменений.2. **Проверьте права и настройки журнала регистрации изменений**
В конфигурации 1С (через конфигуратор) проверьте, что включена регистрация изменений (история изменений). Иногда при переносе базы или смене сервера настройки могут сброситься.
Также проверьте, что у пользователя, под которым работает сервер 1С, есть права на запись в каталог, где хранятся файлы истории изменений.3. **Проверьте состояние базы данных и логи SQL Server**
Если база на MS SQL, убедитесь, что нет проблем с журналом транзакций (переполнение лога может блокировать операции записи). Если есть подозрения, выполните очистку лога транзакций:MySQL1234USE [ИмяБазы]ALTER DATABASE [ИмяБазы] SET RECOVERY SIMPLEDBCC SHRINKFILE ([ИмяЛогическогоФайлаЛога], 50)ALTER DATABASE [ИмяБазы] SET RECOVERY FULLПосле этого перезапустите сервер 1С и попробуйте снова.
4. **Проверьте версию платформы 1С и обновления**
Иногда после смены сервера платформа 1С может быть другой версии или не обновлена. Обновите платформу 1С до рекомендованной версии для вашей конфигурации. Это важно для корректной работы механизма истории изменений.5. **Проверьте таблицы регистрации изменений в базе**
В SQL Server можно проверить таблицы_ConfigChngRи_ConfigChngR_ExtProps. Если они повреждены или переполнены, можно очистить их (сделать бэкап перед этим!):MySQL12DELETE FROM _ConfigChngRDELETE FROM _ConfigChngR_ExtPropsПосле очистки перезапустите сервер 1С.
6. **Проверьте логи сервера 1С**
В логах сервера 1С (обычно в папке srvinfo или в настройках кластера) могут быть ошибки, связанные с регистрацией изменений. Это поможет понять, почему история не ведется.Если после всех этих действий история изменений не появляется, возможно, база была восстановлена или перенесена некорректно, и часть данных истории утеряна. В таком случае можно попробовать восстановить историю из резервных копий.
Рекомендую посмотреть подробный разбор и решения по проблемам с историей изменений и сервером 1С здесь:
https://helpf.pro/faq83/view/1747.htmlТам подробно описаны причины и методы решения, включая работу с журналом транзакций SQL Server и настройками сервера 1С.
Если нужна помощь с конкретными командами или настройками — могу помочь с примерами и инструкциями.
12 марта 2026 в 18:30 в ответ на: Как в 1С:УТ 11.5 учесть продажи комитента в отчёте по валовой прибыли? #36118В 1С:Управление торговлей 11.5 в отчёте по валовой прибыли отсутствуют данные по продажам комитента — это типичная ситуация, связанная с особенностями учета комиссионной торговли и настройки отчёта.
Причины и решения:
1. **Отчет не учитывает комиссионные операции по умолчанию**
В типовой конфигурации УТ 11.5 отчёт по валовой прибыли строится на движениях регистров учета, которые могут не включать данные по комиссионной торговле, если не настроены соответствующие источники данных. Комиссионные продажи отражаются в отдельных регистрах и документах, и для их учета в отчёте нужно доработать запрос отчёта.2. **Неправильная настройка параметров отчёта**
В настройках отчёта по валовой прибыли проверьте, включены ли операции с комиссионным товаром. Иногда в фильтрах или параметрах отчёта нужно явно указать, что учитывать комиссионные продажи.3. **Отсутствие или некорректное заполнение цен комитента**
В УТ 11.5 цена комитента в документах поступления на комиссию может не попадать в отчёт, если цена берется не по фактическому поступлению, а последняя цена. Это влияет на расчет валовой прибыли. Нужно проверить, что в документах поступления и реализации корректно заполнены цены и суммы по комитенту.4. **Неучет комиссионных документов в движениях регистров**
Проверьте, что документы реализации комиссионного товара корректно отражаются в регистрах учета, которые используются в отчёте по валовой прибыли. Если документы комиссионной реализации не формируют движения в нужных регистрах, данные не попадут в отчёт.5. **Решение — доработка отчёта**
Для корректного отображения данных по комиссионной торговле в отчёте по валовой прибыли необходимо:
— В запрос отчёта добавить выборку по документам и движениям, связанным с комиссионной торговлей (например, по документам «Реализация товаров комитенту», «Поступление товаров на комиссию»).
— Использовать цены и суммы по фактическому поступлению, а не последнюю цену.
— Убедиться, что в запросе правильно связаны контрагенты (комитенты) и отражены все необходимые аналитики.6. **Проверка типовой обработки**
В типовой конфигурации УТ 11.5 есть стандартные отчёты по комиссионной торговле, которые можно использовать для контроля данных. Если требуется объединить данные с валовой прибылью, лучше сделать отдельный отчет или доработать существующий с привлечением программиста.7. **Обновление конфигурации**
Иногда подобные проблемы решаются обновлением конфигурации до последней версии, где исправлены ошибки учета комиссионной торговли.—
**Кратко:**
Отсутствие данных по продажам комитента в отчёте по валовой прибыли связано с тем, что типовой отчет не учитывает комиссионные операции или некорректно берет цены и суммы. Нужно доработать запрос отчёта, добавить выборку по документам комиссионной торговли и использовать цены по фактическому поступлению.—
https://infostart.ru/public/1712185/ (пример с распределением расходов и аналитикой)
https://infostart.ru/public/80399/ (особенности заполнения счетов учета в документах)wkhtmltopdf не умеет напрямую конвертировать файлы Word (.doc или .docx) в PDF, он работает только с HTML. Поэтому для преобразования Word в PDF с помощью wkhtmltopdf из 1С нужно сначала сохранить документ Word в формате HTML, а затем уже конвертировать этот HTML в PDF.
Вариант решения:
1. Через COM-объект Microsoft Word из 1С открыть файл Word и сохранить его как HTML:
1С (Код)123456789101112131415ПутьКФайлуWord = ПолучитьВременныйКаталог() + "file.docx";ПутьКФайлуHTML = ПолучитьВременныйКаталог() + "file.html";Если ТипПлатформы() = ТипПлатформы.ПредприятиеUnix Тогда// Аналог COMОбъекта для Unix не поддерживается, выбросим исключение или обработаем иначеОшибка("COMОбъект Word.Application не поддерживается в Unix-клиенте");ИначеWordApp = Новый COMОбъект("Word.Application");WordApp.Visible = Ложь;ФорматHTML = 8; // Константа для формата HTMLДокумент = WordApp.Documents.Open(ПутьКФайлуWord);Документ.SaveAs(ПутьКФайлуHTML, ФорматHTML);Документ.Close();WordApp.Quit();КонецЕсли;2. Запустить wkhtmltopdf из 1С, чтобы преобразовать полученный HTML в PDF:
1С (Код)123456789101112ВременнаяПапка = ПолучитьВременнуюПапку();ПутьКWkhtmltopdf = ВременнаяПапка + "wkhtmltopdf.exe";ПутьКHTML = ПутьКФайлуHTML;ПутьКPDF = ВременнаяПапка + "file.pdf";Команда = """" + ПутьКWkhtmltopdf + """ """ + ПутьКHTML + """ """ + ПутьКPDF + """";КодВозврата = 0;ЗапуститьПриложение(Команда, , Истина, КодВозврата);Если КодВозврата <> 0 ТогдаСообщить("Ошибка конвертации HTML в PDF через wkhtmltopdf");КонецЕсли;3. В итоге получите PDF-файл по указанному пути.
Обратите внимание, что при сохранении Word в HTML могут возникнуть проблемы с форматированием и изображениями. Если у вас установлен Microsoft Word, для более надежной конвертации лучше использовать его метод ExportAsFixedFormat, который сразу сохраняет Word в PDF:
1С (Код)12345678ПутьКPDF = ПолучитьВременныйКаталог() + "file.pdf";WordApp = Новый Объект("Word.Application");WordApp.Visible = Ложь;Документ = WordApp.Documents.Open(ПутьКФайлуWord);ФорматPDF = 17;Документ.ExportAsFixedFormat(ПутьКPDF, ФорматPDF);Документ.Close();WordApp.Quit();Если же принципиально нужно использовать именно wkhtmltopdf, то только через промежуточный HTML.
Преобразовать файл Word (.docx) в PDF средствами 1С можно через COM-объект Microsoft Word, если на сервере или клиенте установлен MS Office. В вашем случае можно использовать функцию, которая открывает документ Word и сохраняет его в формате PDF с помощью метода ExportAsFixedFormat. Важно, что в финальном коде используется именно COM-объект Word.Application, а не другие способы.
Вот пример функции для конвертации и пример использования этой функции:
1С (Код)123456789101112131415161718192021222324252627282930313233343536Функция КонвертироватьWordВPDF(ИмяФайлаDocx, ИмяФайлаPDF) ЭкспортПопыткаWordApp = Новый COMОбъект("Word.Application"); // В Unix-клиенте COM не доступен, заменить на подходящий методWordApp.Visible = Ложь;Документ = WordApp.Documents.Open(ИмяФайлаDocx);// Формат экспорта PDF - 17 (wdExportFormatPDF)CONST_WD_EXPORT_FORMAT_PDF = 17;UseISO19005_1 = Истина;Документ.ExportAsFixedFormat(ИмяФайлаPDF,CONST_WD_EXPORT_FORMAT_PDF, // wdExportFormatPDF0,0,0,0,0,0,1,0,1,0,UseISO19005_1);Документ.Close(0);WordApp.Quit();Возврат Истина;ИсключениеЕсли ЗначениеЗаполнено(WordApp) ТогдаWordApp.Quit();КонецЕсли;Возврат Ложь;КонецПопытки;КонецФункции1С (Код)12345678ПутьКИсходномуФайлу = ПолучитьРабочуюПапку() + "Документ.docx";ПутьКФайлуPDF = ПолучитьРабочуюПапку() + "Документ.pdf";Если КонвертироватьWordВPDF(ПутьКИсходномуФайлу, ПутьКФайлуPDF) ТогдаСообщить("Конвертация прошла успешно");ИначеСообщить("Ошибка конвертации");КонецЕсли;Обратите внимание, что для работы этого кода:
— На машине, где выполняется код, должен быть установлен Microsoft Word.
— Путь к исходному файлу и к файлу PDF должен быть корректным и доступным.
— В функции используется параметр UseISO19005_1 = Истина, что позволяет сохранять PDF в формате PDF/A.
— Если Microsoft Word отсутствует, то средствами 1С напрямую преобразовать Word в PDF нельзя, и нужно рассматривать альтернативные инструменты вне 1С (например, LibreOffice, wkhtmltopdf и т.п.).Таким образом, описанный способ — стандартный и надежный при наличии MS Word.
12 марта 2026 в 14:30 в ответ на: Как получить остатки в разрезе Контрагента и Документа на начало нового периода? #36112Да, получить остатки на начало нового периода рассрочки по регистру накопления РасрочкаПродаж в разрезе Контрагент и ДокументОснование можно с помощью запроса, который выбирает сумму ресурса Сумма по всем движениям с датой ПериодРассрочки меньше начала нового периода. При этом учитывается, что приход идет из документа РеализацияТоваровУслуг, а расход из документа ОплатаРассрочки.
В запросе фильтрация по дате ПериодРассрочки < &ДатаНачалаНовогоПериода позволяет получить состояние на начало нового периода. Группировка по Контрагенту и ДокументОснованию дает остатки именно в нужном разрезе. Фильтр по ДокументОснованию, ссылающемуся на РеализацияТоваровУслуг, ограничивает выборку приходными операциями. При этом ресурс Сумма учитывает и приход, и расход (расходы обычно отражаются отрицательными значениями). Если нужно явно выделить приход и расход по типу документа основания, можно добавить условие, которое проверяет, что приход связан с РеализацияТоваровУслуг и сумма положительна, а расход — с ОплатаРассрочки и сумма отрицательна. Но обычно в регистре накопления это уже отражено корректно. СИНХРОН-КОД: в вопросе упомянуто, что приход из документа РеализацияТоваровУслуг и расход из ОплатаРассрочки, и в финальном коде это учтено через фильтр по ДокументОснованию и условие по сумме. Ниже пример запроса и условие для фильтрации по типу документа движения:
1С (Код)123456789101112131415161718Запрос = Новый Запрос;Запрос.Текст =«ВЫБРАТЬ| РасрочкаПродаж.Контрагент КАК Контрагент,| РасрочкаПродаж.ДокументОснование КАК ДокументОснование,| СУММА(РасрочкаПродаж.Сумма) КАК Остаток|ИЗ| РегистрНакопления.РасрочкаПродаж КАК РасрочкаПродаж|ГДЕ| РасрочкаПродаж.ПериодРассрочки < &ДатаНачалаНовогоПериода| И РасрочкаПродаж.ДокументОснование.Ссылка В (| ВЫБРАТЬ Ссылка ИЗ Документ.РеализацияТоваровУслуг| )|СГРУППИРОВАТЬ ПО| РасрочкаПродаж.Контрагент,| РасрочкаПродаж.ДокументОснование";Запрос.УстановитьПараметр("ДатаНачалаНовогоПериода", НачалоДня(ДатаНовогоПериода));Запрос.Выполнить().Выгрузить();Объяснение:
— Параметр &ДатаНачалаНовогоПериода задается как начало дня даты нового периода рассрочки.
— В выборке берутся записи с ПериодРассрочки меньше этой даты, то есть остаток на начало нового периода.
— Группировка по Контрагенту и ДокументОснованию.
— Фильтр по ДокументОснованию ограничивает приходными операциями из РеализацияТоваровУслуг.Если нужно добавить явное разделение приходов и расходов по типу документа, можно использовать условие:
1С (Код)12345| (РасрочкаПродаж.ДокументОснование ССЫЛКА Документ.РеализацияТоваровУслуг| И РасрочкаПродаж.Сумма > 0)| ИЛИ| (РасрочкаПродаж.ДокументОснование ССЫЛКА Документ.ОплатаРассрочки| И РасрочкаПродаж.Сумма < 0)Таким образом, итоговый запрос даст корректные остатки на начало нового периода рассрочки в нужном разрезе.
12 марта 2026 в 14:15 в ответ на: Как исправить ошибку «Поле не входит в группу» в запросе 1С? #36110Ошибка «Поле не входит в группу» в 1С при построении запроса возникает, когда в разделе ВЫБРАТЬ (SELECT) у вас есть поля, которые не участвуют в группировке (GROUP BY) и при этом не используются в агрегатных функциях (например, СУММА, МАКСИМУМ, МИНИМУМ, СРЕДНЕЕ и т.п.).
В 1С запросах, если вы используете группировку, то все поля, которые не агрегируются, должны быть перечислены в операторе ГРУППИРОВКА (GROUP BY). Если этого не сделать, то платформа выдает ошибку «Поле не входит в группу».
Как исправить:
1. Проверьте текст запроса, найдите все поля в разделе ВЫБРАТЬ, которые не обернуты в агрегатные функции.
2. Добавьте эти поля в раздел ГРУППИРОВКА.
Пример:
Если у вас запрос:
1С (Код)1234567ВЫБРАТЬ| Документ.Дата,| Документ.СуммаИЗ| ДокументГРУППИРОВКА ПО| Документ.ДатаИ поле Документ.Сумма не агрегируется, то будет ошибка. Нужно либо агрегировать сумму:
1С (Код)1234567ВЫБРАТЬ| Документ.Дата,| СУММА(Документ.Сумма) КАК СуммаИЗ| ДокументГРУППИРОВКА ПО| Документ.ДатаЛибо добавить поле в группировку, если это логично.
3. Если вы используете подзапросы или таблицы значений, убедитесь, что там тоже корректно указаны группировки и агрегатные функции.
4. В некоторых случаях помогает явное указание псевдонимов и проверка, что поле действительно существует в источнике данных.
Итого: ошибка связана с нарушением правил группировки в запросе — все неагрегированные поля должны быть в ГРУППИРОВКА.
-
АвторСообщения