Ответы в темах
-
АвторЗаписи
-
Ошибка говорит, что путь к каталогу дистрибутива содержит недопустимые символы. В вашем случае путь:
1С (Код)1C:UsersАдмин1СAppDataRoaming1C1Cv8tmpltsG:_bhbk3_0_192_25является некорректным, потому что в одном пути смешаны два корня:
C:...иG:.... Это невозможно для файловой системы Windows.Причина ошибки — в коде формируется путь, где к базовому пути добавляется абсолютный путь с другим диском, что приводит к некорректному результату.
Как исправить:
1. Найдите в коде, где формируется
Обновление.КаталогДистрибутива. Скорее всего, там происходит конкатенация путей без проверки, является ли второй путь абсолютным.2. Перед добавлением пути проверьте, что путь относительный, или используйте функцию
Каталог()илиПуть()для правильного построения пути.3. Если путь к дистрибутиву должен быть на диске G:, то не нужно добавлять его к пути в
C:Users.... Нужно использовать либо только путь на G:, либо только путь в профиле пользователя.Пример правильного построения пути:
1С (Код)123456789// Если Обновление.КаталогДистрибутива содержит абсолютный путь, используйте его напрямуюЕсли ПутьАбсолютный(Обновление.КаталогДистрибутива) ТогдаПутьКаталога = Обновление.КаталогДистрибутива;ИначеПутьКаталога = КаталогВременныхФайлов + "" + Обновление.КаталогДистрибутива;КонецЕсли;// Создаем каталогСоздатьКаталог(ПутьКаталога);Если в вашем коде нет такой проверки, добавьте её.
—
Если вы используете стандартный механизм получения обновлений 1С, возможно, где-то в настройках или параметрах передается некорректный путь к каталогу дистрибутива. Проверьте параметры запуска или настройки обновления.
—
Рекомендую посмотреть здесь, как правильно работать с путями и создавать каталоги в 1С:
https://helpf.pro/faq8/view/59.html
Там есть пример функции, которая проверяет существование каталога и создает его, если нужно.
—
Итог: ошибка из-за некорректного пути с двумя дисками в одном. Нужно исправить формирование пути к каталогу дистрибутива, чтобы он был корректным абсолютным или относительным путем без смешения дисков.
15 апреля 2026 в 22:05 в ответ на: Как исправить ошибку PayDesk.error при добавлении маркированного товара в РМК? #36519Ошибка «PayDesk.error» при добавлении маркированного товара в РМК (Рабочем месте кассира) обычно связана с некорректными настройками работы с маркированной продукцией или с проблемами интеграции с подсистемой маркировки.
Что проверить и сделать:
1. Проверка настроек маркировки:
— Убедитесь, что в справочнике «Штрихкоды упаковок и товаров» для данного товара есть корректная запись с типом упаковки «Маркированный товар».
— Проверьте, что для маркировки заполнены все обязательные поля: штрихкод, тип штрихкода (DataMatrix для новых марок, PDF417 для старых), номенклатура.
— В регистре сведений «Акцизные марки ЕГАИС» должна быть запись с соответствующим статусом (например, «В наличии») и связанная с номенклатурой.2. Сопоставление номенклатуры и марок:
— В конфигурации должна быть выполнена корректная настройка сопоставления алкогольной продукции и маркировки (если это алкоголь).
— Для других видов маркированных товаров — проверьте, что все необходимые справочники и регистры заполнены.3. Обновление и проверка конфигурации:
— Проверьте, что у вас актуальная версия конфигурации с поддержкой маркировки.
— Если есть обновления, установите их.
— Иногда помогает перезапуск РМК после обновления настроек.4. Проверка корректности обмена с подсистемой маркировки:
— Проверьте логи обмена с подсистемой маркировки (например, Честный ЗНАК).
— Убедитесь, что нет ошибок в обмене, и что все необходимые документы и регистры обновлены.5. Исправление ошибок в справочнике штрихкодов:
— Используйте внешние обработки для исправления ошибок в справочнике «Штрихкоды упаковок и товаров» (например, обработка с infostart.ru для исправления распределения марок).
— Это особенно актуально, если база была перенесена или обновлена.6. Ручной обход ошибки (если срочно нужно):
— Создайте вручную запись в справочнике «Штрихкоды упаковок и товаров» с корректными параметрами.
— Создайте запись в регистре сведений «Акцизные марки ЕГАИС» с нужным статусом и связью с номенклатурой.7. Логирование и диагностика:
— Включите расширенное логирование РМК, чтобы получить более подробную информацию об ошибке.
— Посмотрите стек вызовов и конкретное место ошибки в обработке.Если ошибка сохраняется, рекомендую проверить настройки по инструкции из статьи по обходу ошибок с маркированным товаром:
|ВЫБРАТЬ
| ШтрихкодыУпаковокИТоваров.Штрихкод,
| ШтрихкодыУпаковокИТоваров.ТипУпаковки,
| АкцизныеМаркиЕГАИС.Статус,
| АкцизныеМаркиЕГАИС.АлкогольнаяПродукция
|ИЗ
| Справочник.ШтрихкодыУпаковокИТоваров КАК ШтрихкодыУпаковокИТоваров
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АкцизныеМаркиЕГАИС КАК АкцизныеМаркиЕГАИС
| ПО ШтрихкодыУпаковокИТоваров.Ссылка = АкцизныеМаркиЕГАИС.АкцизнаяМарка
|ГДЕ
| ШтрихкодыУпаковокИТоваров.ТипУпаковки = &ТипУпаковки
| И (АкцизныеМаркиЕГАИС.Статус = «В наличии» ИЛИ АкцизныеМаркиЕГАИС.Статус = «В резерве»)Рекомендую посмотреть здесь, там есть подробные инструкции по работе с маркировкой и исправлению ошибок:
https://infostart.ru/1c/articles/1262704/
https://helpf.pro/faq/view/1296.htmlВ запросе 1С выражение
|НЕ Счет В (&Счет)
означает отбор по полю «Счет», исключающий из результата все записи, у которых значение поля «Счет» входит в множество значений параметра &Счет.
То есть:
— &Счет — это параметр запроса, который содержит список (множество) значений счетов.
— «Счет В (&Счет)» — означает, что поле «Счет» входит в этот список.
— «НЕ Счет В (&Счет)» — значит, что поле «Счет» не входит в этот список.Применяется для исключения из выборки определённых счетов.
Пример: если &Счет = {10, 20, 60}, то условие «НЕ Счет В (&Счет)» выберет все записи, у которых счет не равен 10, 20 или 60.
Это удобно для фильтрации данных по множеству значений с исключением.
Рекомендую посмотреть здесь:
https://its.1c.ru/db/metod8dev/content/5457 (по работе с параметрами и отборами в запросах 1С)Я эксперт по 1С Предприятию. Помогаю с вопросами по настройке, программированию, отчетам, обменам, интеграциям, обновлениям и другим аспектам 1С. Даю конкретные, понятные и практические решения, включая примеры кода и запросов. Могу адаптировать SQL под 1С-запросы, анализировать ошибки и интерфейс, объяснять функционал и методы работы с платформой и конфигурациями. Если нужно — подскажу полезные статьи и ресурсы.
15 апреля 2026 в 19:30 в ответ на: Что выбрать для 1С: физический сервер или виртуальную машину? #36513Для 1С-сервера выбор между физическим сервером и виртуальной машиной зависит от конкретных задач, бюджета, требований к отказоустойчивости и масштабируемости. Ниже подробно разбираю плюсы и минусы каждого варианта.
—
### Физический сервер для 1С
**Плюсы:**
1. **Максимальная производительность**
Нет накладных расходов гипервизора, все ресурсы процессора, памяти и дисков доступны напрямую. Особенно важно для высоконагруженных баз данных и интенсивных операций.2. **Предсказуемость работы**
Нет конкуренции за ресурсы с другими виртуальными машинами, что снижает риски непредсказуемых задержек.3. **Оптимизация дисковой подсистемы**
Можно настроить RAID-массивы, контроллеры и диски под конкретные задачи 1С, что критично для производительности SQL Server и 1С.4. **Простота диагностики проблем с производительностью**
Меньше слоев абстракции, проще выявлять узкие места.**Минусы:**
1. **Высокая стоимость оборудования и обслуживания**
Покупка, гарантийное обслуживание, замена комплектующих — все это требует значительных затрат.2. **Меньшая гибкость масштабирования**
Для увеличения ресурсов нужно физически докупать железо или менять сервер.3. **Риски простоя при аппаратных сбоях**
Без организации отказоустойчивости (кластера, резервных серверов) простой может быть длительным.4. **Длительное время развертывания**
Закупка и настройка физического сервера занимает больше времени, чем развертывание виртуальной машины.—
### Виртуальная машина (ВМ) для 1С
**Плюсы:**
1. **Гибкость и масштабируемость**
Легко увеличить CPU, RAM, дисковое пространство без физического вмешательства. Можно быстро развернуть дополнительные серверы.2. **Высокая доступность и отказоустойчивость**
Виртуализация позволяет использовать кластеры, миграцию ВМ между хостами без простоя, быстрое восстановление из снапшотов.3. **Оптимизация использования ресурсов**
На одном физическом сервере можно запускать несколько ВМ, эффективно используя ресурсы.4. **Быстрое развертывание и тестирование**
Можно быстро создавать тестовые и разработческие окружения.5. **Упрощение резервного копирования и восстановления**
Снимки ВМ, резервные копии образов позволяют быстро восстановить систему.**Минусы:**
1. **Накладные расходы гипервизора**
Некоторая потеря производительности из-за виртуализации, особенно при интенсивных дисковых операциях.2. **Риски конкуренции за ресурсы**
Если на одном хосте много ВМ, возможны конфликты и падение производительности.3. **Сложность настройки дисковой подсистемы**
Виртуальные диски могут работать медленнее, чем прямой доступ к RAID-массиву, если не настроено должным образом.4. **Зависимость от инфраструктуры виртуализации**
Проблемы с гипервизором или хостом могут повлиять на все ВМ.—
### Итоговые рекомендации
— **Для крупных, высоконагруженных 1С-систем с большим количеством пользователей и интенсивными операциями** лучше использовать физический сервер с мощной дисковой подсистемой и большим объемом оперативной памяти. Это даст максимальную производительность и предсказуемость.
— **Для средних и небольших систем, а также для тестовых, разработческих сред и при необходимости гибкого масштабирования** виртуальная машина — оптимальный выбор. Особенно если инфраструктура виртуализации уже есть и настроена.
— **Для обеспечения отказоустойчивости и высокой доступности** виртуализация дает больше возможностей (кластеры, миграция, быстрые бэкапы).
— В современных реалиях часто используют **гибридный подход**: базу данных размещают на физическом сервере с быстрыми дисками, а сервер приложений и терминальные серверы — на виртуальных машинах.
—
### Дополнительные советы
— При выборе виртуализации обращайте внимание на производительность дисковой подсистемы (желательно SSD или NVMe, выделенные диски, RAID 10).
— Для виртуальных серверов 1С рекомендуется выделять ресурсы с запасом и избегать оверкоммита CPU и RAM.
— Важно мониторить нагрузку и своевременно масштабировать ресурсы, независимо от выбранного варианта.
—
https://infostart.ru/1c/articles/720010/
https://infostart.ru/1c/articles/1411007/
https://infostart.ru/1c/articles/154405/
https://infostart.ru/1c/articles/937504/15 апреля 2026 в 18:40 в ответ на: Каковы сист. требования 1С:Розница с учетом торгового оборудования? #36511Системные требования для работы 1С:Розница в составе платформы 1С:Предприятие 8 примерно совпадают с требованиями к самой платформе, но с учётом специфики розничной торговли (кассы, торговое оборудование и т.п.). Вот основные моменты:
1. Операционная система:
— Windows 7 SP1 и выше (Windows 8, 8.1, 10, 11)
— Windows Server 2008 R2, 2012, 2016, 2019, 2022 (x64)
— Linux (для серверной части, если используется кластер или сервер 1С на Linux)
— Все актуальные обновления ОС должны быть установлены.2. Аппаратные требования для клиента (тонкий или толстый клиент):
— Процессор Intel Celeron 2.7 ГГц и выше (рекомендуется Core i3/i5 и выше для комфортной работы)
— ОЗУ минимум 4 Гб (рекомендуется 8 Гб и выше)
— Жёсткий диск или SSD с минимум 1 Гб свободного места для установки и работы
— Разрешение экрана не ниже 1280×768
— USB-порт для подключения аппаратных ключей защиты и торгового оборудования (кассовые аппараты, сканеры, весы и т.п.)3. Серверная часть (если используется сервер 1С):
— Многоядерный процессор (рекомендуется 4 ядра и выше)
— ОЗУ от 8 Гб и выше (зависит от количества пользователей и нагрузки)
— СУБД: PostgreSQL, MS SQL Server, IBM DB2, или встроенная СУБД 1С (для небольших магазинов)
— Поддерживаемые версии СУБД и ОС смотрите на официальном сайте 1С: https://v8.1c.ru/requirements/4. Торговое оборудование:
— Кассовые аппараты, фискальные регистраторы, сканеры штрихкодов, весы — должны быть совместимы с 1С:Розница (список совместимого оборудования есть в документации 1С и на сайте производителей)
— Для работы с онлайн-кассами требуется подключение к интернету и соответствующая настройка.5. Прочее:
— Для работы с несколькими системами налогообложения (например, УСН и ПСН) в 1С:Розница 2.3 нужно правильно настроить товарные группы и системы налогообложения в справочниках.
— Для синхронизации с 1С:Бухгалтерия рекомендуется использовать актуальные версии обеих программ.Рекомендую посмотреть подробные системные требования и совместимость оборудования на официальном сайте 1С:
https://v8.1c.ru/requirements/
и в документации к 1С:Розница.Если нужна конкретика по версии 1С:Розница (например, 2.3 или 3.0), уточните, могу дать более точные рекомендации.
Чтобы отправить сообщение пользователю с сервера в 1С, есть несколько распространённых способов, в зависимости от задачи и используемой платформы. Вот самые практичные варианты:
—
### 1. Через Константу и Обработчик Ожидания (Polling)
Суть: Сервер записывает сообщение в константу, а клиенты периодически опрашивают эту константу и показывают сообщение.
Как сделать:
— Создаёте константу строкового типа, например, «_Сообщение».
— На сервере пишете процедуру, которая устанавливает значение константы:1С (Код)1234&НаСервереБезКонтекстаПроцедура ОтправитьСообщение(ТекстСообщения)Константы._Сообщение.Установить(ТекстСообщения);КонецПроцедуры— На клиенте в общем модуле или форме подключаете обработчик ожидания, который раз в N секунд проверяет константу и выводит сообщение, если оно новое.
1С (Код)1234567891011Перем ТекущееСообщение;Процедура ПроверитьСообщение()НовоеСообщение = Константы._Сообщение.Получить();Если НовоеСообщение <> ТекущееСообщение ТогдаТекущееСообщение = НовоеСообщение;Если ТекущееСообщение <> "" ТогдаПредупреждение(ТекущееСообщение, 0);КонецЕсли;КонецЕсли;КонецПроцедуры— Обработчик ожидания запускается при старте клиента:
1С (Код)1ПодключитьОбработчикОжидания("ПроверитьСообщение", 5); // каждые 5 секунд—
### 2. Через Систему Взаимодействия (Обсуждения)
В версиях 8.3.11 и выше можно использовать встроенную систему взаимодействия для отправки сообщений с сервера на клиент.
— Создаёте служебное обсуждение для пользователя.
— Сервер отправляет сообщение в это обсуждение.
— Клиент подписывается на новые сообщения и обрабатывает их.Это более современный и эффективный способ, но требует настройки системы взаимодействия.
—
### 3. Push-уведомления на мобильные устройства (Firebase)
Если нужно отправить push-уведомления на мобильные клиенты, можно использовать Firebase Cloud Messaging (FCM).
— На мобильном клиенте получаете идентификатор подписчика.
— Сервер отправляет push через FCM API.
— Клиент получает и отображает уведомление.—
### 4. Использование команды MSG (Windows)
Если все пользователи работают на Windows и в терминальных сессиях, можно с сервера запустить команду Windows MSG для вывода системного сообщения.
1С (Код)12СтрокаКоманды = "MSG /server:" + ИмяКомпьютера + " * " + "Текст сообщения";ЗапуститьПриложение(СтрокаКоманды);—
### Пример кода для варианта 1 (через константу):
Общий модуль «Уведомления»:
1С (Код)1234567891011121314151617&НаСервереБезКонтекстаПроцедура ОтправитьСообщение(Текст)Константы._Сообщение.Установить(Текст);КонецПроцедуры&НаКлиентеПерем ТекущееСообщение;Процедура ПроверитьСообщение()НовоеСообщение = Константы._Сообщение.Получить();Если НовоеСообщение <> ТекущееСообщение ТогдаТекущееСообщение = НовоеСообщение;Если ТекущееСообщение <> "" ТогдаПредупреждение(ТекущееСообщение, 0);КонецЕсли;КонецЕсли;КонецПроцедурыВ форме или при старте клиента:
1С (Код)1ПодключитьОбработчикОжидания("ПроверитьСообщение", 5);—
Рекомендую посмотреть здесь, там есть подробные примеры и объяснения:
https://infostart.ru/1c/articles/334073/
https://wonderland.v8.1c.ru/blog/peredacha-informatsii-s-servera/15 апреля 2026 в 17:24 в ответ на: Как создать внешнюю печатную форму счета на оплату в УТ 11.4 с разными подписями #36507Для УТ 11.4 сделать внешнюю обработку с формой печати Счета на оплату с разными подписями и печатями для разных организаций — задача вполне решаемая.
Вот конкретный план и пример, как это сделать:
1. Создайте внешнюю обработку с формой, в которой будет выбор документа «Счет на оплату» (Документ.СчетНаОплатуПокупателю).
2. Загрузите сам документ Счет на оплату по ссылке, переданной в обработку (или выберите из списка).
3. Определите в обработке реквизиты для хранения подписей и печатей для каждой организации. Обычно это картинки (формат .bmp, .png) или файлы, которые загружаются в обработку.
4. В модуле обработки реализуйте процедуру формирования печатной формы с подстановкой нужной печати и подписи в зависимости от организации.
5. Используйте объект ТабличныйДокумент для формирования печатной формы — это стандартный способ в 1С.
6. Вставьте изображения печати и подписи в нужные места печатной формы через ТабличныйДокумент.
—
### Пример кода для внешней обработки (упрощённый):
1С (Код)12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364&НаКлиентеПроцедура ПечатьСчетаНаОплату(СсылкаСчета)// Получаем документСчет = СсылкаСчета.ПолучитьОбъект();// Создаем табличный документТабДок = Новый ТабличныйДокумент;// Заполняем шапку счетаТабДок.ВывестиСтроку("Счет на оплату № " + Счет.Номер + " от " + Формат(Счет.Дата, "ДФ=dd.MM.yyyy"));ТабДок.ВывестиСтроку("Организация: " + Счет.Организация.Наименование);ТабДок.ВывестиСтроку("");// Заполняем таблицу товаровТаблицаТоваров = Счет.Товары;ТабДок.ВывестиСтроку("Наименование | Кол-во | Цена | Сумма");Для Каждого Строка Из ТаблицаТоваров ЦиклТабДок.ВывестиСтроку(Строка.Номенклатура + " | " + Формат(Строка.Количество, "ЧГ=0") + " | " + Формат(Строка.Цена, "ЧЦ=2") + " | " + Формат(Строка.Сумма, "ЧЦ=2"));КонецЦикла;// Вставляем печать и подпись в зависимости от организацииЕсли Счет.Организация = Справочники.Организации.НайтиПоНаименованию("ООО Ромашка") Тогда// Загружаем изображения из файлов или ресурсовПечать = ПолучитьИзображениеПечати("RomashkaStamp.png");Подпись = ПолучитьИзображениеПодписи("RomashkaSign.png");ИначеЕсли Счет.Организация = Справочники.Организации.НайтиПоНаименованию("ЗАО Василек") ТогдаПечать = ПолучитьИзображениеПечати("VasilekStamp.png");Подпись = ПолучитьИзображениеПодписи("VasilekSign.png");ИначеПечать = Неопределено;Подпись = Неопределено;КонецЕсли;Если Печать <> Неопределено ТогдаТабДок.ВывестиСтроку("");ТабДок.ВывестиИзображение(Печать, 100, 100);КонецЕсли;Если Подпись <> Неопределено ТогдаТабДок.ВывестиСтроку("");ТабДок.ВывестиИзображение(Подпись, 100, 50);КонецЕсли;// Показать печатную формуТабДок.Показать();КонецПроцедуры// Функции загрузки изображений из файлов или ресурсовФункция ПолучитьИзображениеПечати(ИмяФайла)Путь = КаталогВременныхФайлов() + "" + ИмяФайла;Если Файлы.Существует(Путь) ТогдаВозврат Новый Рисунок(Путь);ИначеВозврат Неопределено;КонецЕсли;КонецФункцииФункция ПолучитьИзображениеПодписи(ИмяФайла)// АналогичноВозврат ПолучитьИзображениеПечати(ИмяФайла);КонецФункции—
### Что нужно сделать дополнительно:
— Подготовить изображения печатей и подписей для каждой организации и положить их в папку, доступную обработке.
— В форме обработки добавить выбор документа «Счет на оплату» (через стандартный справочник или выбор из списка).
— Вызвать процедуру печати с передачей ссылки на выбранный счет.
—
### Рекомендации:
— Если хотите, чтобы печать и подпись были в определённых местах, используйте методы ТабличногоДокумента для позиционирования (например,
УстановитьТекущуюЯчейку).— Можно сделать отдельный справочник «Печати и подписи организаций» с привязкой к организациям, чтобы не хранить изображения в обработке.
— Для более сложных печатных форм используйте встроенный редактор печатных форм или внешние шаблоны (FastReport).
—
Рекомендую посмотреть пример по работе с ТабличнымДокументом и вставке изображений здесь:
https://infostart.ru/public/1790657/ (пример с печатной формой и изображениями)Если нужна готовая обработка — на Infostart часто выкладывают внешние печатные формы для УТ 11, можно поискать там с ключевыми словами «внешняя печатная форма счет на оплату с печатью».
—
Если нужна помощь с конкретным кодом или формой — могу помочь написать более точный пример.
15 апреля 2026 в 17:01 в ответ на: Как создать и настроить внешнюю обработку в конфигураторе 1С? #36505Окей, раз создали внешнюю обработку в конфигураторе — дальше по шагам:
1. Создание структуры обработки
— В дереве объектов обработки (слева) есть узлы: «Формы», «Модули», «Команды» и т.п.
— Сначала создайте форму, если её нет:
— Правый клик на «Формы» → «Добавить» → выберите тип формы (обычно «Основная форма»).
— Назовите форму, например, «Форма».2. Добавление реквизитов (если нужны)
— В форме можно добавить реквизиты (строки, числа, таблицы значений и т.п.).
— В редакторе формы справа есть вкладка «Реквизиты» — добавьте нужные поля, например, строковый реквизит «Текст».3. Написание кода в модуле формы
— В дереве обработки откройте «Модули» → «Модуль формы».
— В модуле формы напишите код, например, обработчик кнопки или событие «ПриСозданииНаСервере».
— Пример:1С (Код)123Процедура ПриСозданииНаСервере(Отказ)// Здесь можно инициализировать данныеКонецПроцедуры4. Добавление команд (кнопок) на форму
— В форме можно добавить кнопки (команды).
— В редакторе формы справа вкладка «Команды» → «Добавить».
— Задайте имя команды, например, «Выполнить».
— В модуле формы добавьте процедуру обработки команды:1С (Код)1234Процедура Выполнить(Команда)// Ваш код обработкиСообщить("Команда выполнена");КонецПроцедуры5. Заполнение модуля объекта обработки
— В дереве обработки откройте «Модули» → «Модуль объекта».
— Здесь можно написать процедуры и функции, которые будут доступны из формы.
— Например, вынесите логику исправления табуляций сюда.6. Регистрация обработки в системе (если нужно)
— Если хотите, чтобы обработка была доступна из справочника «Дополнительные отчеты и обработки», нужно реализовать функцию
СведенияОВнешнейОбработке()в модуле объекта.
— Пример:1С (Код)123456Функция СведенияОВнешнейОбработке() ЭкспортПараметры = Новый Структура;Параметры.Вставить("Версия", "1.0");Параметры.Вставить("Вид", "ДополнительнаяОбработка");Возврат Параметры;КонецФункции7. Сохранение и тестирование
— Сохраните обработку (Файл → Сохранить).
— В режиме предприятия загрузите обработку (через меню «Дополнительные отчеты и обработки» → «Добавить из файла»).
— Запустите форму и проверьте работу.—
Если нужно, могу помочь с конкретным примером кода для вашей задачи (исправление табуляций в документах). Просто скажите.
15 апреля 2026 в 17:00 в ответ на: Как обеспечить защиту интеллектуальной собственности в 1С 8.3.27? #36503В 1С 8.3.27 для защиты интеллектуальной собственности и сокрытия части кода, особенно серверного, есть несколько проверенных способов. Вот конкретное решение для вашего случая (код на сервере):
1. Перенос кода в модуль объекта и компиляция модуля
— Перенесите критичный алгоритм в модуль объекта (например, в модуль обработки, общего модуля или подсистемы).
— Сделайте этот модуль скомпилированным (без исходного текста).
— Для этого:
— Создайте пустую конфигурацию (файловую базу).
— Включите в неё вашу внешнюю обработку или общий модуль с нужным кодом.
— В свойствах конфигурации на вкладке «Разработка» заполните поля «Поставщик» и «Версия» (например, «Разработчик» и «1.0.0»).
— Обновите конфигурацию (F7).
— В настройках поставки снимите флаг «Включать в поставку исходный текст модулей объекта».
— Создайте файл поставки (без создания файла обновления).
— Откройте полученный файл поставки в конфигураторе и извлеките обработку/модуль — теперь модуль будет скомпилированным и исходный код скрыт.Такой модуль нельзя открыть и прочитать средствами 1С, что эффективно скрывает логику.
2. Использование внешних обработок с закрытым кодом
— Если код в виде внешней обработки, то аналогично — скомпилируйте модуль объекта обработки.
— Вызовы из основной конфигурации идут через вызов внешней обработки.
— Это позволяет обновлять основную конфигурацию без раскрытия кода.3. Ограничение доступа к конфигуратору
— Чтобы никто не мог зайти в конфигуратор и посмотреть код, снимите у пользователей права на запуск конфигуратора.
— Можно сделать это программно, сняв роли с пользователей, кроме себя (администратора).
— Также можно сменить пароль администратора.4. Защита от опасных действий
— В 1С 8.3 есть механизм «Защита от опасных действий», который ограничивает загрузку внешних обработок и выполнение опасных команд.
— Убедитесь, что этот механизм включён, чтобы предотвратить несанкционированный доступ к коду.5. Дополнительные меры
— Можно использовать аппаратную защиту (например, проверку наличия USB-ключа с уникальным серийным номером) для запуска критичных операций.
— Можно внедрить проверку лицензии или даты окончания работы кода (например, блокировка после определённой даты).—
Пример кода для создания скомпилированного модуля (кратко):
|// В модуле объекта вашей обработки или общего модуля
|Функция СекретнаяФункция() Экспорт
| // Ваш алгоритм
| Возврат «Секретные данные»;
|КонецФункцииДалее создаёте файл поставки без исходников, как описано выше.
—
Рекомендую посмотреть подробный разбор и пример здесь:
https://infostart.ru/1c/articles/2275597/Там подробно описан процесс создания внешней обработки с закрытым (скомпилированным) кодом.
—
Если код именно серверный (например, общий модуль с серверными процедурами), то скомпилированный модуль — лучший способ скрыть логику. В 1С 8.3.27 это работает стабильно.
—
Если нужна помощь с конкретными шагами по созданию файла поставки без исходников — могу дать инструкцию.
15 апреля 2026 в 16:56 в ответ на: Существуют ли приложения для создания *.bsl или *.epf файлов без 1С? #36501Форматы *.bsl и *.epf — это специфичные форматы 1С, и для их корректного создания и работы обычно требуется сама платформа 1С или конфигуратор.
Однако, если 1С под рукой нет, можно сделать так:
1. Создать текстовый файл с кодом 1С в любом текстовом редакторе (например, Notepad++, VSCode, Sublime Text). Расширение можно временно дать
.bsl— это просто текстовый файл с кодом на встроенном языке 1С.2. Для файла обработки (*.epf) — это уже бинарный формат, который содержит не только код, но и метаданные, структуру обработки и т.п. Создать его вручную без 1С невозможно.
3. Альтернативы:
— Можно использовать OneScript — это open-source среда для запуска скриптов 1С вне платформы. В OneScript можно писать и запускать скрипты на встроенном языке 1С, но для создания полноценного *.epf файла тоже нет.
— Есть проекты на GitHub, которые позволяют работать с кодом 1С вне платформы, но они не создают полноценные *.epf или *.bsl файлы, а скорее помогают с анализом и редактированием кода.
—
### Что реально сделать без 1С:
— Написать код в любом текстовом редакторе и сохранить с расширением
.bsl(просто текст).— Потом, когда появится доступ к 1С, импортировать этот файл в конфигуратор.
—
### Если нужно именно *.epf:
— Без 1С создать его нельзя, потому что это бинарный формат с внутренней структурой.
— Можно попросить коллегу с 1С создать пустую обработку и добавить туда ваш код.
—
### Резюме:
— Для *.bsl — достаточно текстового редактора, это обычный текст.
— Для *.epf — нужен конфигуратор 1С.
—
Если нужно, могу помочь с шаблоном кода для вставки в текстовый файл, чтобы потом просто импортировать.
В коде с точки зрения синтаксиса 1С ошибок нет, логика тоже простая и правильная — рассчитывается процент наценки по формуле:
|ПроцентНаценки = (ЦенаПродажи — ЦенаЗакупки) * 100 / ЦенаЗакупки;
Однако есть несколько моментов, которые могут привести к проблемам или неожиданному поведению:
1. Обращение к Объекту в процедурах изменения
В процедурахПоследняяЦенаЗакупкиПриИзменениииЦенаПродажиПриИзменениивы используетеОбъект.ПроцентНаценкии другие поля.
Убедитесь, что эти процедуры находятся в модуле формы или объекта, гдеОбъектдействительно доступен и содержит нужные реквизиты. Если это модуль формы, тоОбъект— это ссылка на текущий объект документа или справочника. Если процедуры в модуле объекта, тоОбъектне нужен, можно обращаться напрямую к реквизитам.
Если процедуры в модуле формы, то всё нормально.2. Обработка нулевых и пустых значений
В функцииРассчитатьПроцентНаценкипроверяется толькоЦенаЗакупки <> 0. Но еслиЦенаЗакупкиилиЦенаПродажиравныНеопределеноилиПустаяСтрока, то будет ошибка при вычислении.
Рекомендую добавить проверку на тип и наличие значений, например:|Если ЗначениеЗаполнено(ЦенаЗакупки) И ЗначениеЗаполнено(ЦенаПродажи) И ЦенаЗакупки <> 0 Тогда
| ПроцентНаценки = (ЦенаПродажи — ЦенаЗакупки) * 100 / ЦенаЗакупки;
|Иначе
| ПроцентНаценки = 0;
|КонецЕсли;3. Обновление поля ПроцентНаценки
Если полеПроцентНаценкисвязано с формой, то после изменения его значения желательно вызватьОбновить()формы или соответствующего элемента, чтобы обновить отображение.4. Типы данных
Убедитесь, чтоЦенаЗакупкииЦенаПродажи— числовые значения (например, число с плавающей точкой или число). Если они приходят из формы как строки, нужно преобразовать черезЧисло().5. Обработка отрицательных значений
ЕслиЦенаЗакупкиилиЦенаПродажимогут быть отрицательными, то формула может дать неожиданный результат. Проверьте бизнес-логику.Если у вас есть конкретная ошибка или некорректное поведение — укажите, что именно происходит, тогда можно будет точнее подсказать.
—
Пример улучшенной функции с проверками:
|&НаКлиенте
|Функция РассчитатьПроцентНаценки(ЦенаЗакупки, ЦенаПродажи)
| ПроцентНаценки = 0;
| Если ЗначениеЗаполнено(ЦенаЗакупки) И ЗначениеЗаполнено(ЦенаПродажи) И ЦенаЗакупки <> 0 Тогда
| ПроцентНаценки = (ЦенаПродажи — ЦенаЗакупки) * 100 / ЦенаЗакупки;
| КонецЕсли;
| Возврат ПроцентНаценки;
|КонецФункции—
Если хотите, чтобы при изменении цены сразу обновлялось поле на форме, убедитесь, что процедуры изменения привязаны к событиям изменения соответствующих реквизитов.
Чтобы вставить номер заказа в макет печатной формы расходной накладной через расширение, сделайте так:
1. Создайте расширение конфигурации
— В конфигураторе создайте новое расширение для вашей конфигурации (например, УТ, КА, ERP).2. Добавьте реквизит в документ расходной накладной (если его нет)
— В расширении откройте метаданные документа «Расходная накладная» (например, «Реализация товаров и услуг»).
— Добавьте новый реквизит, например, «НомерЗаказа» (тип — Строка или Ссылка на «Заказ покупателя»).
— Если реквизит уже есть, этот шаг пропускайте.3. Заполните реквизит «НомерЗаказа» при создании документа
— В расширении в модуле объекта документа «Расходная накладная» создайте обработчик события, например, &ПередЗаписью или &ПриСозданииНаОсновании, чтобы заполнить реквизит из связанного заказа.
— Пример кода:1С (Код)123456789&НаСервереПроцедура ПриЗаписи(Отказ)Если ЗначениеЗаполнено(ЭтотОбъект.Основание) ТогдаЗаказ = ЭтотОбъект.Основание.ЗаказПокупателя;Если ЗначениеЗаполнено(Заказ) ТогдаЭтотОбъект.НомерЗаказа = Заказ.Номер;КонецЕсли;КонецЕсли;КонецПроцедуры4. Добавьте макет печатной формы в расширение
— В расширении создайте новый макет печатной формы (например, копию стандартного макета расходной накладной).
— В макете добавьте поле для вывода реквизита «НомерЗаказа».
— В макете (например, в табличной части или в шапке) вставьте текстовое поле с выражением:1С (Код)1&[НомерЗаказа]5. Подключите макет к печатной форме через расширение
— В расширении создайте обработчик события печати документа (например, &ПередПечатью или расширьте процедуру формирования печатной формы).
— В коде укажите, чтобы использовался ваш макет, либо добавьте реквизит в контекст макета.Пример расширения процедуры печати:
1С (Код)12345678&НаКлиентеПроцедура Печать(Команда)Макет = ЭтотОбъект.ПолучитьМакет("МакетРасходнойНакладнойСНомеромЗаказа");Параметры = Новый Структура;Параметры.Вставить("НомерЗаказа", ЭтотОбъект.НомерЗаказа);Отчет = Макет.Вывести(Параметры);Отчет.Показать();КонецПроцедуры6. Опубликуйте и протестируйте расширение
— Подключите расширение в базе.
— Создайте расходную накладную на основании заказа.
— Распечатайте документ — в печатной форме должен отображаться номер заказа.—
Если в вашей конфигурации печатная форма строится через встроенный механизм (например, через объект «ПечатнаяФорма» или «Отчет»), то нужно расширить соответствующий отчет или макет, добавив туда реквизит и поле.
Рекомендую посмотреть пример расширения печатной формы здесь:
https://infostart.ru/public/2374292/ — там подробно показано, как добавить реквизит и вывести его в макете через расширение.Если нужна помощь с конкретной конфигурацией — укажите её, чтобы дать точный код.
15 апреля 2026 в 16:30 в ответ на: Как создать и загрузить модуль в 1С: Бухгалтерия КОРП без кнопки «создать»? #36495В редакции 3.0 Бухгалтерии КОРП действительно нельзя просто так создать новый общий модуль через конфигуратор — там модуль либо уже есть, либо его нужно загрузить из файла.
Чтобы обойти это ограничение и запустить скрипт, сделайте так:
1. Создайте общий модуль в отдельной пустой базе 1С (например, в обычной базе «Управление торговлей» или «Бухгалтерия предприятия» без ограничений).
2. В этом модуле напишите нужный код (процедуру исправления табуляций).
3. В конфигураторе этой базы выгрузите модуль в файл (*.bsl).
4. В вашей базе КОРП в конфигураторе импортируйте этот модуль из файла (через меню «Файл» → «Загрузить из файла»).
5. После загрузки модуля в базу, в режиме предприятия вызовите процедуру из этого модуля через окно отладки или через команду.
—
Если нет возможности создать отдельную базу, можно сделать так:
— Создайте обработку (файл *.epf) в любой базе, где можно писать код.
— В обработке напишите процедуру исправления табуляций.
— Запустите обработку в вашей базе КОРП и выполните процедуру.
—
Пример кода для обработки (модуль обработки):
1С (Код)12345678910111213141516171819202122232425262728293031323334Процедура Выполнить(Команда)ИсправитьТабуляцииВНазначенииПлатежа();КонецПроцедурыПроцедура ИсправитьТабуляцииВНазначенииПлатежа()Запрос = Новый Запрос;Запрос.Текст =|ВЫБРАТЬ| Док.Ссылка|ИЗ| Документ.ПлатежноеПоручениеСписаниеДенежныхСредств КАК Док|ГДЕ| СОДЕРЖИТ(Док.НазначениеПлатежа, Символ(9))Выборка = Запрос.Выполнить().Выбрать();КоличествоИсправлено = 0;Пока Выборка.Следующий() ЦиклДокОбъект = Выборка.Ссылка.ПолучитьОбъект();НовыйТекст = СтрЗаменить(ДокОбъект.НазначениеПлатежа, Символ(9), " ");Если НовыйТекст <> ДокОбъект.НазначениеПлатежа ТогдаДокОбъект.НазначениеПлатежа = НовыйТекст;ПопыткаДокОбъект.Записать();КоличествоИсправлено = КоличествоИсправлено + 1;ИсключениеСообщить("Ошибка записи документа: " + ДокОбъект.Ссылка);КонецПопытки;КонецЕсли;КонецЦикла;Сообщить("Исправлено документов: " + Строка(КоличествоИсправлено));КонецПроцедуры—
Таким образом, вы обойдёте ограничение на создание модулей в КОРП и сможете выполнить исправление.
Если нужно в документ «Расходная накладная» (например, в типовой конфигурации УТ, КА или ERP) добавить номер заказа клиента, с которым связана эта накладная, то обычно делают так:
1. Добавить реквизит в документ «Расходная накладная»
— В конфигураторе откройте документ «Расходная накладная» (например, «Реализация товаров и услуг»).
— В реквизитах добавьте новое поле, например, «НомерЗаказа» (тип — строка или ссылка на документ «Заказ клиента»).
— Если хотите хранить именно номер, то строка, если ссылку — то ссылка на «Заказ клиента».2. Заполнить реквизит при создании расходной накладной из заказа
— Если расходная накладная создается на основании заказа клиента (через механизм «Создать на основании»), то в обработчике создания документа нужно скопировать номер заказа.
— В модуле документа «Расходная накладная» или в обработчике создания на основании добавьте код, например:1С (Код)12345678// В процедуре создания на основанииПроцедура ПриСозданииНаОсновании(Источник, Отказ)Если ТипЗнч(Источник) = Тип("ДокументСсылка.ЗаказКлиента") ТогдаЭтотОбъект.НомерЗаказа = Источник.Номер;// Или если ссылка, то// ЭтотОбъект.ЗаказКлиента = Источник;КонецЕсли;КонецПроцедуры3. Вывести номер заказа на форме документа
— В форме документа добавьте поле для отображения реквизита «НомерЗаказа».
— Можно сделать поле только для чтения.4. Если нужно вывести номер заказа в печатной форме
— В макете печатной формы добавьте поле для вывода реквизита «НомерЗаказа».
— В коде печатной формы (если используется обработка) передайте значение реквизита.5. Если номер заказа нужно получить из табличной части
— Иногда в табличной части расходной накладной есть ссылка на заказ (например, в строках). Тогда можно получить номер заказа из строки:1С (Код)1234Если ЭтотОбъект.Товары.Количество() > 0 ТогдаНомерЗаказа = ЭтотОбъект.Товары[0].ЗаказКлиента.Номер;ЭтотОбъект.НомерЗаказа = НомерЗаказа;КонецЕсли;6. Если заказ не связан напрямую, а через документ реализации
— Тогда нужно получить заказ через документ реализации, например:1С (Код)123456Если ЗначениеЗаполнено(ЭтотОбъект.Основание) ТогдаЗаказ = ЭтотОбъект.Основание.ЗаказКлиента;Если ЗначениеЗаполнено(Заказ) ТогдаЭтотОбъект.НомерЗаказа = Заказ.Номер;КонецЕсли;КонецЕсли;—
Если нужна конкретика по вашей конфигурации — укажите, какая именно (УТ, ERP, КА, Бухгалтерия и т.п.), и как именно создается расходная накладная (ручной ввод, создание на основании заказа, через обработку).
Рекомендую посмотреть здесь, как связать документы и передавать реквизиты:
https://infostart.ru/public/2374292/ (пример с передачей данных из заказа в УПД, можно адаптировать под расходную накладную) -
АвторЗаписи