Ответы в темах
-
АвторСообщения
-
12 марта 2026 в 10:30 в ответ на: Как в УТ 11.5 вывести в отчет отношение задолженности и оплаты по контрагентам? #36100
В УТ 11.5 для вывода в отчет отношения задолженности к оплате по контрагентам нужно собрать данные по задолженности и оплатам, а затем вычислить отношение (например, задолженность / оплата). Обычно задолженность берется из оборотно-сальдовой ведомости по счетам расчетов с контрагентами (60, 62, 76 и т.п.), а оплаты — из документов оплаты или движений по этим счетам.
Примерный алгоритм:
1. Получить сумму задолженности по контрагентам на нужную дату (например, на конец периода).
2. Получить сумму оплат за тот же период.
3. Рассчитать отношение: Задолженность / Оплата (учитывая деление на ноль).
4. Вывести в отчет по контрагентам.Пример запроса на языке 1С для получения задолженности и оплат (упрощенный):
1С (Код)12345678910111213141516171819202122232425262728293031323334353637Запрос = Новый Запрос;Запрос.Текст ="ВЫБРАТЬ| РегистрРасчетов.Контрагент КАК Контрагент,| СУММА(РегистрРасчетов.Сумма) КАК Задолженность,| СУММА(Оплаты.Сумма) КАК Оплата|ИЗ| РегистрРасчетов.СостояниеРасчетов КАК РегистрРасчетов| ЛЕВОЕ СОЕДИНЕНИЕ (| ВЫБРАТЬ| Оплаты.Контрагент,| СУММА(Оплаты.Сумма) КАК Сумма| ИЗ| Документ.ОплатаПоставщику КАК Оплаты| ГДЕ| Оплаты.Дата МЕЖДУ &ДатаНачала И &ДатаКонца| СГРУППИРОВАТЬ ПО| Оплаты.Контрагент| ) КАК Оплаты| ПО РегистрРасчетов.Контрагент = Оплаты.Контрагент|ГДЕ| РегистрРасчетов.Дата <= &ДатаКонца|СГРУППИРОВАТЬ ПО| РегистрРасчетов.Контрагент";Запрос.УстановитьПараметр("ДатаНачала", НачалоПериода);Запрос.УстановитьПараметр("ДатаКонца", КонецПериода);Результат = Запрос.Выполнить().Выгрузить();Для Каждого Строка Из Результат ЦиклЕсли Строка.Оплата = 0 ТогдаСообщить("Контрагент: " + Строка.Контрагент + ", Задолженность: " + Строка.Задолженность + ", Оплата: " + Строка.Оплата + ", Отношение: не определено");ИначеСообщить("Контрагент: " + Строка.Контрагент + ", Задолженность: " + Строка.Задолженность + ", Оплата: " + Строка.Оплата + ", Отношение: " + Формат(Строка.Задолженность / Строка.Оплата, "ЧГ=0; ЧРД=2"));КонецЕсли;КонецЦикла;Обратите внимание:
- В реальной базе структура может отличаться, нужно смотреть конкретные регистры и документы.
- Для оплаты можно использовать документы "ОплатаПоставщику" или "ПоступлениеДенежныхСредств" в зависимости от настроек.
- Можно использовать стандартные отчеты по расчетам с контрагентами и доработать их.Если нужен готовый отчет, то проще взять стандартный отчет "Анализ расчетов с контрагентами" и добавить в него вычисляемое поле с отношением задолженности к оплате.
Там есть примеры работы с расчетами и отчетами по контрагентам.
12 марта 2026 в 9:00 в ответ на: Как в УТ 11.5 прикрепить файл из справочника к Документообороту 2.1? #36098В УТ 11.5 для программного прикрепления файла из справочника «СоглашенияСКлиентами» к системе «Документооборот 2.1» нужно использовать механизм интеграции с ДО, который предполагает создание объекта документа в ДО и загрузку вложения.
Общий алгоритм такой:
1. Получить файл из реквизита или табличной части справочника «СоглашенияСКлиентами». Обычно файл хранится в реквизите типа «Файл» или «ХранилищеЗначения».
2. Создать объект документа в Документообороте (например, входящий или исходящий документ), используя веб-сервис или COM-соединение с базой ДО.
3. Заполнить реквизиты документа ДО, включая ссылку на договор (если нужно), дату, номер и т.п.
4. Добавить вложение (файл) к документу ДО. Для этого нужно загрузить содержимое файла в объект вложения.
5. Сохранить и провести документ в ДО.
Пример кода на 1С (упрощённый, для понимания):
1С (Код)1234567891011121314151617181920212223242526272829303132333435363738394041// Получаем ссылку на договор из справочникаЗапрос = Новый Запрос;Запрос.Текст ="ВЫБРАТЬСсылка,Наименование,ФайлСоглашенияИЗСправочник.СоглашенияСКлиентамиГДЕНаименование = &Наименование";Запрос.УстановитьПараметр("Наименование", "Нужное соглашение");ВыборкаСоглашений = Запрос.Выполнить().Выбрать();Если Не ВыборкаСоглашений.Следующий() ТогдаСообщить("Соглашение не найдено");Возврат;КонецЕсли;Соглашение = ВыборкаСоглашений.Ссылка;НаименованиеСоглашения = ВыборкаСоглашений.Наименование;// Получаем файл из реквизита (например, "ФайлСоглашения")Файл = ВыборкаСоглашений.ФайлСоглашения;Если Файл = Неопределено ТогдаСообщить("Файл не найден в соглашении");Возврат;КонецЕсли;ДокументДО = Документы.ВходящийДокумент.СоздатьДокумент();ДокументДО.Наименование = "Соглашение с клиентом " + НаименованиеСоглашения;ДокументДО.Дата = ТекущаяДатаСеанса();ДокументДО.ДоговорКонтрагента = Соглашение; // если есть связь// Создаем вложениеВложение = ДокументДО.Вложения.Добавить();Вложение.Наименование = "Файл соглашения";Вложение.ТипВложения = ДокументДО.Вложения.ТипВложения.Файл;Вложение.Файл = Файл; // или загрузить содержимое файла в поток// Записываем и проводим документДокументДО.Записать();ДокументДО.Отправить(); // или Провести(), в зависимости от ДОВажные моменты:
— Для работы с ДО через COM или веб-сервисы нужно иметь права и настроенную интеграцию.
— В УТ 11.5 есть встроенные механизмы интеграции с ДО, можно использовать их (например, через объекты интеграции).
— Если файл хранится в ХранилищеЗначения, нужно получить его содержимое через
Получить()и загрузить в объект вложения.— В зависимости от версии ДО и УТ, API может отличаться, нужно смотреть документацию по интеграции.
— Для более точного решения можно использовать стандартные объекты интеграции из конфигурации УТ 11.5, например, через модуль интеграции с ДО.
Рекомендую посмотреть пример настройки интеграции и работы с вложениями в ДО здесь:
https://infostart.ru/public/142140/ (настройка интеграции УТ 11 и ДО)
https://infostart.ru/1c/articles/142140/Там описан механизм создания документов и заполнения реквизитов, можно расширить код добавлением вложений.
Если нужна конкретная обработка или модуль, могу помочь написать более точный код по вашим данным.
Включение отладки 1С в кластере на Linux (в том числе Red OS) выполняется через добавление ключа -debug в параметры запуска сервера 1С. Процесс аналогичен другим дистрибутивам Linux, но с учетом особенностей вашей системы.
Пошагово:
1. Подключитесь к серверу под пользователем root или с правами sudo.
2. Остановите службу сервера 1С, например:
1С (Код)1sudo systemctl stop srv1cv83(Имя службы может отличаться, проверьте через
systemctl list-units | grep srv)3. Отредактируйте конфигурационный файл запуска сервера 1С. Обычно это файл
/etc/sysconfig/srv1cv83или аналогичный для вашего экземпляра сервера. Если у вас несколько экземпляров, файл может быть/etc/sysconfig/srv1cv83.<номер>.Откройте файл в редакторе, например:
1С (Код)1sudo vi /etc/sysconfig/srv1cv834. Найдите строку с параметром отладки:
1С (Код)1#SRV1CV8_DEBUG=и измените на
1С (Код)1SRV1CV8_DEBUG=15. Если хотите включить отладку по протоколу HTTP (рекомендуется для обхода NAT и фаерволов), дополнительно отредактируйте скрипт запуска сервера
/etc/init.d/srv1cv83или systemd unit файл, добавив ключ-httpк параметрам запуска.В скрипте
/etc/init.d/srv1cv83найдите строку:1С (Код)1[ "x$SRV1CV8_DEBUG" == "x1" ] && cmdline= "$cmdline -debug"и измените на
1С (Код)1[ "x$SRV1CV8_DEBUG" == "x1" ] && cmdline= "$cmdline -debug -http"Если используете systemd, то в unit-файле сервиса добавьте
-debug -httpк параметрам запуска.6. Сохраните изменения и запустите службу сервера 1С:
1С (Код)1sudo systemctl start srv1cv837. Проверьте, что сервер запущен с ключами
-debugи-http(если включали HTTP), командой:1С (Код)1ps -fU <пользователь_1С>Должны быть видны процессы
ragentс параметрами-debugи-http, а также процессdbgs(сервер отладки).8. В 1С Конфигураторе настройте параметры отладки:
— Меню Сервис -> Параметры -> Вкладка «Отладка»
— Выберите протокол отладки: «Отладка по протоколу HTTP»
— Укажите использование сервера отладки кластера
— Выберите имя текущей информационной базы или укажите нужное
— Введите пароль, если требуется
— Нажмите «Перезапустить» для применения настроек9. Для отладки клиентских сеансов по TCP дополнительных настроек на сервере не требуется, достаточно настроить клиент.
Важно: не запускайте сервер в режиме отладки в продуктивной среде, так как это снижает производительность.
—
Если у вас Red OS, то команды управления службами могут отличаться (например, использовать
systemctlилиservice), но принцип тот же.Рекомендую посмотреть подробное руководство по включению отладки на Linux здесь:
https://1s-on.ru/otladka-na-servere-1s-na-linux/—
Кратко:
— Остановить сервер 1С
— В/etc/sysconfig/srv1cv83установитьSRV1CV8_DEBUG=1
— В скрипте запуска добавить-debug(и-httpесли нужно)
— Запустить сервер
— Настроить параметры отладки в конфигураторе 1С—
Если кластер, то настройку делайте на каждом сервере кластера, где хотите отлаживать серверные модули.
—
Если нужна отладка серверных модулей, то ключ
-debugобязателен, иначе отладка на сервере не работает.—
Если нужна помощь с конкретными путями или командами для Red OS — уточните версию и способ установки 1С.
—
11 марта 2026 в 14:45 в ответ на: Какие плюсы и минусы работы 1С на виртуальных и физических серверах? #36094Плюсы и минусы работы 1С на виртуальных серверах и физических серверах:
**Виртуальные серверы**
Плюсы:
— Гибкость и масштабируемость. Можно быстро увеличить ресурсы (CPU, RAM, диск) без физической замены железа.
— Быстрое развертывание и клонирование серверов для тестирования, разработки, резервирования.
— Упрощенное управление инфраструктурой, централизованное администрирование.
— Возможность использования высокодоступных кластеров и миграции виртуальных машин без простоя.
— Экономия на оборудовании — один физический сервер может запускать несколько виртуальных.
— Легче организовать резервное копирование и восстановление.
— Возможность изоляции окружений (например, тестовый и продакшен на одном физическом сервере).Минусы:
— Потенциальные накладные расходы гипервизора — небольшое снижение производительности по сравнению с физическим сервером.
— Риск «шумных соседей» — если на одном хосте много виртуалок, они могут конкурировать за ресурсы.
— Сложнее диагностировать проблемы с производительностью, т.к. есть дополнительный слой виртуализации.
— Требуется грамотная настройка гипервизора и ресурсов, чтобы избежать узких мест.
— Зависимость от стабильности и производительности физического хоста.**Физические серверы**
Плюсы:
— Максимальная производительность без накладных расходов виртуализации.
— Прямая работа с железом, проще диагностировать и устранять проблемы.
— Нет конкуренции за ресурсы с другими виртуальными машинами.
— Подходит для критичных по производительности задач и больших нагрузок.
— Меньше слоев, меньше потенциальных точек отказа.Минусы:
— Меньшая гибкость — масштабирование требует покупки и установки нового оборудования.
— Более длительное развертывание новых серверов.
— Высокие капитальные затраты на покупку и обслуживание.
— Сложнее организовать отказоустойчивость и миграцию.
— Требует больше места и электроэнергии.**Вывод для 1С:**
— Для средних и больших проектов с динамичной нагрузкой и потребностью в быстром масштабировании виртуализация — оптимальный выбор.
— Для очень высоких нагрузок, где важна максимальная производительность и минимальная задержка, физический сервер может быть предпочтительнее.
— В реальных проектах часто используют гибридный подход: критичные компоненты (например, SQL сервер) на физическом железе или мощных виртуальных машинах с выделенными ресурсами, а остальные сервисы — на виртуалках.Рекомендации по оптимизации виртуальных серверов для 1С: выделять достаточный объем CPU и RAM, использовать быстрые диски (SSD, RAID10), следить за нагрузкой гипервизора, изолировать ресурсы, использовать мониторинг.
Рекомендации по физическим серверам: инвестировать в качественные дисковые подсистемы, оперативную память и процессоры с высокой тактовой частотой, обеспечить отказоустойчивость (RAID, резервное питание).
https://infostart.ru/1c/articles/937504/ — опыт разворачивания 1С в облаке и виртуализации
https://interface31.ru/tech_it/2012/07/vvedenie-v-virtualizaciyu-chast-1.html — введение в виртуализацию и её плюсы/минусыРазбор и рекомендации по оптимизации вашего запроса динамического списка:
1. **Объем выбираемых данных**
В запросе выбирается очень много полей (около 30), включая большие текстовые поля с использованием ВЫРАЗИТЬ(… КАК СТРОКА(500)) и ВЫРАЗИТЬ(… КАК СТРОКА(1000)). Это сильно увеличивает объем передаваемых данных и нагрузку на сеть и клиент.
**Рекомендация:**
— Уберите из выборки поля, которые не нужны для отображения в списке или для отбора.
— Если поле «Содержание» или «Контрагенты» не нужны в списке, не выбирайте их.
— Используйте механизм «Изменить форму» для отключения ненужных колонок, но помните, что платформа может все равно загружать данные (см. пункт 2).
— Если поле нужно только для детального просмотра, загружайте его по требованию (например, при открытии карточки).2. **Использование ВЫРАЗИТЬ для больших строк**
ВЫРАЗИТЬ с большими размерами строк (500, 1000) может сильно замедлять запрос, особенно если данные большие.
**Рекомендация:**
— Сократите размер строк, если возможно.
— Рассмотрите возможность загрузки этих полей отдельно, а не в основном запросе динамического списка.3. **Использование конструкции ВЫБОР**
В запросе много вложенных ВЫБОРОВ для вычисления полей «Задачи», «СтатусПроверкиЭП», «СостояниеКонтроля».
**Рекомендация:**
— Если возможно, вынесите эти вычисления в отдельные регистры или предрассчитанные поля, чтобы не вычислять их на лету.
— Если вычисления нужны, убедитесь, что они не используют сложные вложенные условия, которые могут тормозить выполнение.
— Проверьте, что перечисления индексированы и используются корректно.4. **Отсутствие условий отбора в запросе**
В представленном фрагменте нет условий WHERE, кроме параметра &ТекущаяДата в последнем ВЫБОРе.
**Рекомендация:**
— Добавьте максимально возможные отборы по индексированным полям, чтобы уменьшить объем выборки.
— Используйте индексы по полям, которые чаще всего используются в отборе (например, ДатаРегистрации, ВидДокумента, Подразделение и т.п.).
— Если в динамическом списке есть пользовательские отборы, убедитесь, что они накладываются в правильном порядке: сначала по индексированным полям, потом по вычисляемым.5. **Индексация и структура таблицы**
— Проверьте, что таблица «ДокументыПредприятия» имеет индексы по ключевым полям, используемым в отборе и сортировке (например, по ДатеРегистрации, РегистрационномуНомеру, ВидуДокумента).
— Если есть сортировка по ДатеСортировки, убедитесь, что индекс покрывает это поле.6. **Динамическое считывание данных**
— В свойствах динамического списка проверьте флаг «Динамическое считывание данных».
— Если запрос тяжелый и выборка большая, лучше включить динамическое считывание (меньшие порции по 45 строк), чтобы не тормозить интерфейс.
— Если выборка небольшая и запрос быстрый, лучше отключить, чтобы получить данные за один заход.7. **Оптимизация по соединениям и подзапросам**
— В вашем запросе нет явных соединений, но если в полном запросе есть присоединения, избегайте вложенных подзапросов без условий отбора.
— Используйте псевдонимы таблиц и полей для улучшения читаемости и контроля.
— Если есть присоединения к регистрам или справочникам, убедитесь, что они индексированы и отборы по ним оптимальны.8. **Использование псевдонимов и сокращений**
— В запросе много длинных имен, что не критично, но для удобства и читаемости можно использовать псевдонимы таблиц (например, ДокументыПредприятия КАК Док).
— Это не ускорит запрос, но облегчит поддержку.9. **Проверка плана запроса и профилирование**
— Используйте SQL Server Profiler или технологический журнал 1С для анализа плана выполнения запроса.
— Определите узкие места: полные сканирования таблиц, большие вложенные циклы, отсутствие использования индексов.
— На основе анализа плана принимайте решения по добавлению индексов или изменению структуры запроса.10. **Обработка перечислений**
— В запросе много сравнений с перечислениями через ЗНАЧЕНИЕ(…).
— Убедитесь, что перечисления не приводят к избыточным вычислениям.
— Если возможно, замените на числовые константы для ускорения.11. **Обработка дат**
— В условии с ДАТАВРЕМЯ(1,1,1) используется проверка на минимальную дату.
— Убедитесь, что такие проверки не мешают использованию индексов.12. **Общие рекомендации**
— Минимизируйте количество выбираемых полей.
— Избегайте вычисляемых полей в выборке, если они не индексированы.
— Используйте отборы по индексированным полям.
— Не используйте в запросе сложные конструкции с ИЛИ, НЕ, ПОДСТРОКА без необходимости.
— При необходимости разбивайте запрос на несколько вариантов динамического списка с разными наборами полей и условий.—
**Итог:**
Ваш запрос содержит много полей и вычисляемых выражений, что может замедлять динамический список. Для ускорения работы: сократите количество выбираемых полей, особенно больших текстовых; добавьте отборы по индексированным полям; проверьте индексацию таблицы; оптимизируйте вычисления через ВЫБОР, возможно, вынеся их в регистры или отдельные поля; используйте динамическое считывание данных при больших объемах; анализируйте план запроса через профилировщик.Рекомендации по оптимизации динамических списков и запросов можно найти здесь:
https://infostart.ru/1c/articles/445857/
https://infostart.ru/1c/articles/169685/
https://infostart.ru/1c/articles/382500/
https://infostart.ru/1c/articles/548778/11 марта 2026 в 12:15 в ответ на: Как проверить принадлежность элемента справочника определенной группе? #36090Проверить принадлежность элемента справочника определённой группе можно двумя основными способами.
Первый — проверить, что поле Родитель элемента справочника равно ссылке нужной группы. Это проверка только прямого вхождения в группу.
Второй способ — более универсальный, когда нужно проверить принадлежность элемента к группе или любой из её вложенных подгрупп. Для этого используется запрос с условием В ИЕРАРХИИ, который учитывает всю иерархию групп.
Если структура справочника отличается (например, нет поля Родитель), то запрос нужно адаптировать под конкретную структуру.
Ниже приведены примеры кода для обоих способов.
1. Проверка прямого родителя:
1С (Код)12345Если ЭлементСправочника.Родитель = СсылкаГруппы Тогда// Элемент принадлежит группе// Можно добавить действия здесьСообщить("Элемент принадлежит группе");КонецЕсли;2. Проверка принадлежности в иерархии групп:
1С (Код)1234567891011121314151617181920212223Запрос = Новый Запрос;Запрос.Текст ="ВЫБРАТЬ| Справочник.Ссылка|ИЗ| Справочник.СправочникИмя КАК Справочник|ГДЕ| Справочник.Ссылка = &Элемент| И Справочник.Родитель В ИЕРАРХИИ(&Группа)";Запрос.УстановитьИмяПоля("Справочник.Ссылка", "Ссылка");Запрос.УстановитьПараметр("Элемент", ЭлементСправочника);Запрос.УстановитьПараметр("Группа", СсылкаГруппы);Результат = Запрос.Выполнить();Если НЕ Результат.Пустой() ТогдаПринадлежитГруппе = Истина;// Элемент принадлежит группе или вложенным подгруппамИначеПринадлежитГруппе = Ложь;// Не принадлежитКонецЕсли;11 марта 2026 в 12:00 в ответ на: Почему в расширении 1С пропадает динамический список при усложнении запроса? #36088Причина, по которой при добавлении вложенного запроса в запрос динамического списка в расширении пропадает элемент формы динамический список, связана с особенностями работы расширений и механизмом динамических списков в 1С.
Основные моменты:
1. **Ограничения расширений по изменению запроса динамического списка**
В расширениях нельзя напрямую изменять или усложнять запрос динамического списка, если он определён в основной конфигурации. Особенно это касается вложенных запросов, подзапросов, сложных конструкций — платформа не всегда корректно обрабатывает такие изменения в расширении. В результате элемент формы, который связан с этим динамическим списком, может перестать отображаться, так как запрос становится некорректным или невалидным.2. **Отсутствие поддержки сложных изменений запроса в расширениях**
Механизм расширений не позволяет полноценно редактировать структуру запроса динамического списка, если он не был изначально подготовлен для расширения (например, через использование объекта «СхемаЗапроса» или параметров). Добавление вложенного запроса — это изменение структуры, которое платформа не может корректно «склеить» с основным запросом.3. **Проблемы с синхронизацией метаданных и форм**
При изменении запроса динамического списка в расширении, если запрос становится некорректным или не соответствует ожиданиям формы, элемент формы динамического списка просто не отображается, так как данные не могут быть получены.4. **Рекомендации по решению**
— Используйте объект **СхемаЗапроса** для программного объединения запросов и модификации запроса динамического списка, а не прямое редактирование текста запроса в расширении. Это позволяет безопасно добавлять вложенные запросы и расширять функционал без потери элемента формы.
— Если нужно добавить вложенный запрос, лучше сделать это в основном решении, а в расширении только использовать параметры или дополнительные настройки.
— Можно использовать обработчик **ПриПолученииДанныхНаСервере** для дополнительной обработки данных динамического списка, не меняя сам запрос.
— Настраивайте отборы и параметры через **Параметры динамического списка** и **ЭлементОтбораКомпоновкиДанных**, чтобы избежать прямого изменения запроса.Пример использования СхемыЗапроса для добавления вложенного запроса в динамический список:
1С (Код)123456789101112// Получаем текст основного запроса динамического спискаТекстЗапроса = Форма.ДинамическийСписок.ТекстЗапроса;// Добавляем вложенный запрос программноСхемаЗапроса = Новый СхемаЗапроса;СхемаЗапроса.УстановитьТекстЗапроса(ТекстЗапроса);// Здесь добавляем вложенный запрос или соединяем с временной таблицей// ...// Получаем итоговый текст запросаФорма.ДинамическийСписок.ТекстЗапроса = СхемаЗапроса.ПолучитьТекстЗапроса();Таким образом, прямое добавление вложенного запроса в расширении ломает структуру запроса динамического списка, и элемент формы пропадает. Правильный путь — использовать программные методы расширения запроса через СхемуЗапроса или обработчики, либо делать изменения в основной конфигурации.
https://helpf.pro/faq/view/1657.html
https://wonderland.v8.1c.ru/blog/obrabotka-i-oformlenie-dannykh-dinamicheskogo-spiska/11 марта 2026 в 9:30 в ответ на: Как округлить число в меньшую сторону с заданной точностью в 1С? #36086Михаил, для округления произвольного числа в меньшую сторону с заданной точностью в 1С можно использовать функцию Цел(), которая отсекает дробную часть числа, и при этом нужно учитывать разрядность (точность) округления. Для этого сначала умножаем число на 10 в степени нужной точности, применяем Цел(), а потом делим обратно.
Пример функции на 1С:
1С (Код)1234567Функция ОкруглитьВМеньшуюСторону(Число, Точность)// Число - исходное число// Точность - количество знаков после запятой для округленияМножитель = Степень(10, Точность);Результат = Цел(Число * Множитель) / Множитель;Возврат Результат;КонецФункцииПример использования:
1С (Код)12Сообщить(ОкруглитьВМеньшуюСторону(12.3456, 2)); // Выведет 12.34Сообщить(ОкруглитьВМеньшуюСторону(-12.3456, 2)); // Выведет -12.35Обратите внимание, что для отрицательных чисел функция Цел() округляет в сторону меньшего целого (то есть -12.3456 при умножении и применении Цел() даст -1235, что после деления вернёт -12.35), что соответствует математическому округлению вниз.
Если нужно именно округление в сторону нуля (отбрасывание дробной части без смещения для отрицательных), тогда для отрицательных чисел нужно использовать другую логику.
Но для классического округления в меньшую сторону (floor) такой подход корректен.
Если нужна функция с учётом отрицательных чисел и округлением в сторону нуля, то можно сделать так:
1С (Код)123456789Функция ОкруглитьВМеньшуюСторону_ОтНуля(Число, Точность)Множитель = Степень(10, Точность);Если Число >= 0 ТогдаРезультат = Цел(Число * Множитель) / Множитель;ИначеРезультат = Цел(Число * Множитель - 1) / Множитель;КонецЕсли;Возврат Результат;КонецФункцииНо чаще всего для округления вниз (floor) достаточно первой функции.
—
Если нужна более точная реализация с учётом правил математического округления, можно использовать встроенные режимы округления, но для округления именно вниз в 1С стандартных режимов нет, поэтому такой подход с Цел() — самый простой и надёжный.
—
Если нужно, могу помочь с реализацией и тестами.
11 марта 2026 в 7:45 в ответ на: Как решить ошибку «Превышен максимальный расход памяти» в 1С 8.3 проф? #36084Ошибка «Превышен максимальный расход памяти сервера за один вызов» на платформе 1С:Предприятие 8.3.27.1786 с лицензией ПРОФ связана с тем, что в настройках кластера или рабочего сервера установлено ограничение на безопасный расход памяти за один вызов, которое превышается при выполнении операции.
В лицензии ПРОФ с версии 8.3.12 и выше введены ограничения на использование расширенных параметров кластера и сервера, которые доступны только в лицензии КОРП. Среди них — параметр «Безопасный расход памяти за один вызов». Если он установлен в значение, отличное от значения по умолчанию, то при превышении этого лимита сервер выдает ошибку.
Что делать:
1. Проверьте настройки кластера и рабочего сервера 1С, особенно параметры:
— Безопасный расход памяти за один вызов
— Максимальный объем памяти рабочих процессов
— Объем памяти рабочих процессов, до которого сервер считается производительным
— Количество информационных баз на процесс
— Режим распределения нагрузки
— Допустимое отклонение количества ошибок сервера2. Для лицензии ПРОФ все эти параметры должны иметь значения по умолчанию, иначе будет ошибка и блокировка функционала.
3. Чтобы убрать ошибку, верните параметры к значениям по умолчанию. Например, для «Безопасного расхода памяти за один вызов» значение по умолчанию — 0 (автоматический расчет, 10% от временно допустимого объема памяти процессов).
4. Если вам нужны расширенные возможности управления памятью и нагрузкой, необходимо приобрести и установить лицензию уровня КОРП.
5. После изменения параметров перезапустите сервер 1С.
Пример возврата параметра «Безопасный расход памяти за один вызов» к значению по умолчанию:
— В конфигураторе или через администрирование кластера найдите этот параметр и установите 0.
— Аналогично проверьте и другие параметры, которые могли быть изменены.
Если вы не управляете кластером напрямую, обратитесь к администратору сервера 1С.
https://infostart.ru/1c/articles/599613/Там подробно описаны ограничения лицензии ПРОФ и как правильно настроить параметры памяти для корректной работы без ошибок.
В 1С нельзя напрямую вызвать процедуру формы одной обработки из другой обработки, даже если у вас есть ссылка на объект этой формы. Процедуры и функции модулей форм являются локальными для этой формы и не доступны извне напрямую.
Однако есть несколько вариантов решения задачи передачи управления или данных между формами/обработками:
1. **Использование событий и подписок**
Если обе обработки открыты одновременно, можно реализовать механизм подписки на события через глобальные объекты или через общие модули. Тогда одна обработка может «сообщить» другой, что нужно выполнить определённое действие.2. **Передача параметров при открытии формы**
При открытии формы можно передать параметры (через структуру параметров), и в событии формы «ПриСозданииНаСервере» или «ПриОткрытии» обработать эти параметры, чтобы выполнить нужные действия.3. **Обращение к реквизитам объекта формы**
Если у вас есть ссылка на объект формы (например, переменная Форма), то можно менять значения реквизитов формы или вызывать методы объекта формы, если они объявлены как публичные методы объекта (не процедуры модуля формы). Но именно процедуры модуля формы вызвать нельзя.4. **Использование глобальных процедур или общих модулей**
Вынесите нужную логику в общий модуль или глобальную процедуру, которую можно вызвать из обеих обработок. Тогда из одной обработки вызываете эту процедуру, а форма реагирует на изменения данных.5. **Использование интерфейса формы**
Если форма открыта модально, можно получить значения реквизитов после закрытия формы, но не вызвать её процедуры напрямую.**Итог:** прямого вызова процедуры формы из другой обработки по ссылке на объект формы нет. Нужно использовать передачу параметров, общие модули, события или публичные методы объекта формы.
https://helpf.pro/faq/view/1398.html — про открытие форм с параметрами и работу с параметрами формы10 марта 2026 в 20:15 в ответ на: Можно ли на сервере открыть форму документа по её ссылке в 1С? #36080Нет, на сервере получить доступ к форме документа по его ссылке нельзя, потому что форма — это объект клиентского интерфейса, который существует только на клиенте (в управляемом приложении или толстом клиенте). Серверная часть 1С работает с объектами метаданных и данными, но не с формами.
На сервере вы можете получить объект документа по ссылке через методы типа:
1С (Код)1Ссылка.ПолучитьОбъект();или
1С (Код)1Документы.ИмяДокумента.ПолучитьОбъект(Ссылка);Но формы — это именно клиентская часть, и они создаются и открываются только на клиенте с помощью методов:
1С (Код)12Форма = ОбработатьВыборФормы("Документ.ИмяДокумента.ФормаОбъекта", Ссылка);Форма.Открыть();Этот код должен выполняться на клиенте.
Если нужно передать данные с сервера на клиент для отображения в форме, то на сервере формируете объект документа, передаете его в данные формы (например, через
ДанныеФормыВЗначениеиЗначениеВДанныеФормы), а на клиенте уже открываете форму и подставляете туда эти данные.Итого:
— Сервер работает с объектами данных (ссылками, объектами документов).
— Формы создаются и открываются только на клиенте.
— Нельзя на сервере получить или открыть форму по ссылке.10 марта 2026 в 19:45 в ответ на: Как в 1С:Документооборот настроить бизнес-процесс для редактирования суммы? #36078В 1С:Документооборот для возможности исправления суммы в счёте на оплату в рамках бизнес-процесса нужно сделать следующее:
1. **Изменить маршрут бизнес-процесса**
В конфигураторе или через встроенный редактор бизнес-процессов откройте схему бизнес-процесса, который отвечает за согласование и утверждение счета на оплату.2. **Добавить этап редактирования суммы**
В схему добавьте этап, на котором пользователь сможет редактировать реквизит «Сумма» документа. Обычно это делается через задачу с типом «Редактирование документа» или «Исправление документа».3. **Настроить права на редактирование**
Убедитесь, что на этапе редактирования у пользователя есть права на изменение реквизита «Сумма» в документе. Это можно сделать через настройки прав доступа к документу или через настройки бизнес-процесса (роль, группа пользователей).4. **Обеспечить возврат на этап редактирования**
Если сумма не устраивает согласующего, нужно предусмотреть возможность возврата документа на этап редактирования с комментарием. Для этого в бизнес-процессе добавьте переход «Возврат на доработку» с соответствующей задачей.5. **Обновить документ после редактирования**
После внесения изменений и сохранения документа бизнес-процесс должен продолжить движение по маршруту, например, повторное согласование или утверждение.6. **Тестирование**
Проверьте, что при прохождении бизнес-процесса пользователь может остановиться на этапе редактирования, изменить сумму и сохранить документ, после чего процесс продолжится.—
**Примерный алгоритм в редакторе бизнес-процессов:**
— Этап «Создание документа»
— Этап «Согласование»
— Если сумма не устраивает — переход «На доработку» → этап «Редактирование документа» (где разрешено менять сумму)
— После редактирования → возврат на этап «Согласование»
— Далее — утверждение и завершение процесса—
Если используется типовой бизнес-процесс, то для добавления возможности редактирования суммы можно:
— В настройках бизнес-процесса включить опцию «Разрешить доработку документа»
— Настроить права пользователей, чтобы они могли изменять реквизиты документа на этапе доработки—
Рекомендую посмотреть подробное руководство по настройке бизнес-процессов в 1С:Документооборот, например, здесь:
https://infostart.ru/public/1043453/ (пример настройки маршрутов и прав на редактирование)—
Если нужна конкретика по вашей версии 1С:Документооборот — уточните, какая именно, чтобы дать точный пример кода или настройки.
10 марта 2026 в 16:15 в ответ на: Как исправить ошибку печати товарного чека в Скат-Профессионал? #36076Ошибка «Ошибка при получении характеристик принтера» при печати именно товарного чека из документа «Реализация товаров и услуг» в 1С:Скат — Профессионал, при том что печать в файл проходит успешно, а другие печатные формы печатаются без проблем, обычно связана с особенностями работы конкретной печатной формы и взаимодействием с драйвером принтера.
Основные причины и решения:
1. **Проблемы с настройками принтера по умолчанию**
— Проверьте, что в системе Windows на клиентском компьютере выбран принтер по умолчанию и он доступен.
— Если принтер сетевой, убедитесь, что он подключен и доступен.
— Иногда помогает смена принтера по умолчанию на другой, а затем возврат обратно.
— Имя принтера не должно быть слишком длинным (рекомендуется до 8 символов без пробелов и спецсимволов).2. **Особенности печатной формы товарного чека**
— В 1С:Скат товарный чек может использовать специфические настройки печати, например, прямое обращение к драйверу или нестандартные параметры страницы.
— Проверьте макет печатной формы на наличие свойств, которые могут вызывать ошибку (например, «Вместе со следующим» в табличном документе, как описано в известных проблемах с зависанием).
— Попробуйте временно заменить макет печатной формы товарного чека на стандартный или упрощённый, чтобы проверить, исчезнет ли ошибка.3. **Проблемы с драйвером принтера**
— Обновите драйвер принтера до последней версии с сайта производителя.
— Если принтер виртуальный (например, PDF-принтер), попробуйте сменить на физический или другой виртуальный.
— Иногда помогает удаление и повторное добавление принтера в системе.4. **Параметры печати в 1С**
— В коде печати (в обработке «УправлениеПечатнымиФормами») проверьте, не передаются ли в методНапечататьдополнительные параметры, которые могут конфликтовать с драйвером.
— Попробуйте вызватьТаб.Напечатать(Истина, Ложь)— то есть отключить предварительный просмотр, если он включён.
— Проверьте, не используется ли в печатной форме нестандартный объект печати (например, прямое обращение к API принтера).5. **Проверка на другом компьютере**
— Попробуйте выполнить печать с другого рабочего места с тем же пользователем и тем же принтером. Если ошибка не воспроизводится, значит проблема локальна на клиенте.6. **Логи и диагностика**
— Включите расширенное логирование в 1С (параметры запуска или через конфигуратор) и посмотрите, на каком этапе возникает ошибка.
— Проверьте системные журналы Windows на ошибки, связанные с печатью.7. **Обходные пути**
— Если срочно нужно печатать, используйте печать в файл, а затем печать из файла.
— Можно попробовать экспортировать табличный документ в Excel или PDF и печатать оттуда.Если после всех проверок проблема сохраняется, рекомендую обратиться в техподдержку 1С:Скат с описанием проблемы и логами, так как это может быть баг конкретной версии.
https://helpf.pro/faq83/view/1716.html — про проблемы с печатью и принтерами в терминале, которые часто схожи по симптомамКратко: ошибка связана с некорректным получением параметров принтера из-за особенностей макета товарного чека или проблем с драйвером/настройками принтера. Исправляется проверкой и корректировкой макета, обновлением драйвера и настройкой принтера по умолчанию.
10 марта 2026 в 15:31 в ответ на: Как составить запрос для УТ 11.5 с детализацией отгрузок и оплат по контрагентам #36074Вот пример текста запроса для УТ 11.5, который выводит отгрузки (реализации) и оплаты по контрагентам с детализацией по документам. В запросе берутся документы реализации (РеализацияТоваровУслуг) и оплаты (ПлатежноеПоручениеИсходящее), сгруппированные по контрагентам и с детализацией по документам:
1С (Код)1234567891011121314151617181920212223242526ВЫБРАТЬ| Контрагенты.Ссылка КАК Контрагент,| Контрагенты.Наименование КАК НаименованиеКонтрагента,| Реализации.Ссылка КАК ДокументРеализации,| Реализации.Дата КАК ДатаРеализации,| Реализации.Номер КАК НомерРеализации,| Реализации.СуммаДокумента КАК СуммаРеализации,| Оплаты.Ссылка КАК ДокументОплаты,| Оплаты.Дата КАК ДатаОплаты,| Оплаты.Номер КАК НомерОплаты,| Оплаты.СуммаДокумента КАК СуммаОплаты|ИЗ| Справочник.Контрагенты КАК Контрагенты| ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг КАК Реализации| ПО Контрагенты.Ссылка = Реализации.Контрагент| ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПлатежноеПоручениеИсходящее КАК Оплаты| ПО Контрагенты.Ссылка = Оплаты.Контрагент|ГДЕ| Реализации.Дата МЕЖДУ &ДатаНачала И &ДатаКонца| И Оплаты.Дата МЕЖДУ &ДатаНачала И &ДатаКонца|УПОРЯДОЧИТЬ ПО| Контрагенты.Наименование,| Реализации.Дата,| Реализации.Номер,| Оплаты.Дата,| Оплаты.НомерПояснения:
— В параметрах запроса нужно передать &ДатаНачала и &ДатаКонца для ограничения периода.
— Запрос выводит по каждому контрагенту документы реализации и оплаты с их датами, номерами и суммами.
— Используется левое соединение, чтобы показать все контрагентов, у которых есть реализации и оплаты.
— Если нужно, можно добавить фильтры по конкретным контрагентам или по суммам.Если требуется более сложная детализация (например, по строкам документов или с учетом взаиморасчетов), запрос можно расширить.
10 марта 2026 в 15:31 в ответ на: Как создать запрос в УТ 11.5 для отгрузок и оплат по контрагентам с детализацией #36072Вот пример текста запроса для УТ 11.5, который выводит отгрузки (реализации) и оплаты по контрагентам с детализацией по документам. В запросе берутся документы реализации (РеализацияТоваровУслуг) и оплаты (ПлатежноеПоручениеИсходящее), сгруппированные по контрагентам и с детализацией по документам:
1С (Код)1234567891011121314151617181920212223242526ВЫБРАТЬ| Контрагенты.Ссылка КАК Контрагент,| Контрагенты.Наименование КАК НаименованиеКонтрагента,| Реализации.Ссылка КАК ДокументРеализации,| Реализации.Дата КАК ДатаРеализации,| Реализации.Номер КАК НомерРеализации,| Реализации.СуммаДокумента КАК СуммаРеализации,| Оплаты.Ссылка КАК ДокументОплаты,| Оплаты.Дата КАК ДатаОплаты,| Оплаты.Номер КАК НомерОплаты,| Оплаты.СуммаДокумента КАК СуммаОплаты|ИЗ| Справочник.Контрагенты КАК Контрагенты| ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг КАК Реализации| ПО Контрагенты.Ссылка = Реализации.Контрагент| ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПлатежноеПоручениеИсходящее КАК Оплаты| ПО Контрагенты.Ссылка = Оплаты.Контрагент|ГДЕ| Реализации.Дата МЕЖДУ &ДатаНачала И &ДатаКонца| И Оплаты.Дата МЕЖДУ &ДатаНачала И &ДатаКонца|УПОРЯДОЧИТЬ ПО| Контрагенты.Наименование,| Реализации.Дата,| Реализации.Номер,| Оплаты.Дата,| Оплаты.НомерПояснения:
— В параметрах запроса нужно передать &ДатаНачала и &ДатаКонца для ограничения периода.
— Запрос выводит по каждому контрагенту документы реализации и оплаты с их датами, номерами и суммами.
— Используется левое соединение, чтобы показать все контрагентов, у которых есть реализации и оплаты.
— Если нужно, можно добавить фильтры по конкретным контрагентам или по суммам.Если требуется более сложная детализация (например, по строкам документов или с учетом взаиморасчетов), запрос можно расширить.
-
АвторСообщения