Ответы в темах
-
АвторСообщения
-
Переиндексация файловой базы 1С (7.7 или 8.x в файловом варианте) делается так:
1. Закройте 1С, если она запущена.
2. Удалите все индексные файлы с расширением *.cdx из каталога базы данных. Это можно сделать вручную через Проводник или через командную строку (bat-файл):
1С (Код)1del "Путь_к_каталогу_базы*.cdx" /Q3. Запустите 1С в монопольном режиме (только для 1С 7.7):
— Пуск → Программы → 1С:Предприятие 7.7 → 1С:Предприятие Монопольно
Для 1С 8.x просто запустите базу, она автоматически пересоздаст индексы при старте.
4. При запуске базы 1С автоматически создаст новые индексные файлы.
Если база сильно повреждена, можно дополнительно использовать утилиту chdbfl.exe (для 1С 8.x) с опцией исправления ошибок и перестроения индексов.
Пример bat-файла для автоматизации удаления индексов перед запуском 1С:
1С (Код)1234@echo offset db=D:PathToBasedel "%db%*.cdx" /Qstart "" "C:Program Files1cv8bin1cv8.exe" ENTERPRISE "%db%"Рекомендую посмотреть здесь:
https://helpf.pro/faq/view/8.html
https://infostart.ru/1c/articles/151410/В 1С:Розница (например, редакция 3.0) настройка, чтобы по умолчанию НДС был включен в сумму документа (например, в приходной накладной), делается не так, как в 1С:Бухгалтерия.
В 1С:Розница нет отдельной глобальной настройки «НДС в сумме» для документов поступления, как в БП. Управление этим параметром происходит на уровне настроек самой конфигурации и конкретных документов.
Чтобы сделать НДС по умолчанию включенным в сумму в приходной накладной в 1С:Розница, нужно:
1. Проверить настройки учетной политики в разделе Администрирование – Настройки учета (или аналогичный раздел в вашей версии). Там может быть параметр, связанный с учетом НДС, например, «НДС включен в цену» или «Цены с НДС».
2. В карточке номенклатуры (товара) проверьте, что у товаров стоит ставка НДС и что цены указываются с учетом НДС.
3. В документе «Приходная накладная» в табличной части при вводе цены проверьте, что цена вводится с учетом НДС. Если в документе есть переключатель «НДС сверху» (как на вашем скриншоте), то его нужно по умолчанию отключить, чтобы НДС был включен в сумму.
4. Чтобы переключатель «НДС сверху» был по умолчанию выключен, можно сделать следующее:
— В конфигураторе (если есть доступ) или через расширение/обработку можно установить значение этого реквизита по умолчанию при создании документа.
— Если конфигурация стандартная и не позволяет менять это в настройках, можно написать небольшой обработчик на событие создания документа, который будет устанавливать
НДС сверху = Ложь.Пример кода для обработки события создания документа (в модуле объекта приходной накладной):
1С (Код)123Процедура ПриСозданииНаСервере(Отказ)ЭтотОбъект.НДССверху = Ложь;КонецПроцедуры5. Если у вас нет доступа к конфигуратору, можно проверить, нет ли в настройках пользователя или в настройках интерфейса параметра, отвечающего за этот переключатель.
6. Также обратите внимание, что в 1С:Розница цены часто вводятся с учетом НДС, и при проведении документов система сама рассчитывает НДС. Если у вас цены вводятся без НДС, то переключатель «НДС сверху» будет включен.
Если в вашей версии 1С:Розница нет возможности менять это через настройки, то единственный вариант — доработать конфигурацию, чтобы при создании приходной накладной переключатель «НДС сверху» был выключен по умолчанию.
Рекомендую проверить настройки учетной политики и настройки номенклатуры, а также возможность доработки через обработчик создания документа.
Если нужна помощь с конкретным кодом или настройками — уточните версию 1С:Розница и релиз, чтобы дать точный пример.
6 мая 2026 в 20:30 в ответ на: Как составить код отчёта в УТ 11.5 для списка клиентов по менеджерам и их статус #36996Вот пример кода отчёта для 1С:Управление торговлей 11.5, который выводит список клиентов (контрагентов) с основным менеджером и отметкой, подключён ли клиент к ЭДО.
Отчёт построен на запросе к справочнику Контрагенты и регистру сведений, где хранится информация об ЭДО (в типовых конфигурациях 1С:УТ 11 ЭДО обычно хранится в регистре сведений «ОбменЭДО» или в реквизите карточки контрагента, но для универсальности возьмём регистр сведений).
—
### Код отчёта (модуль объекта):
1С (Код)123456789101112131415161718192021222324252627282930313233343536373839404142434445Процедура СформироватьОтчет(Отчет)Запрос = Новый Запрос;Запрос.Текст ="ВЫБРАТЬ| Контрагенты.Ссылка КАК Контрагент,| Контрагенты.Наименование КАК Наименование,| Контрагенты.ИНН КАК ИНН,| Контрагенты.ОсновнойМенеджер КАК Менеджер,| ВЫБОР| КОГДА ЭДО.Ссылка ЕСТЬ NULL ТОГДА ЛОЖЬ| ИНАЧЕ ИСТИНА| КОНЕЦ КАК ПодключенКЭДО|ИЗ| Справочник.Контрагенты КАК Контрагенты| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ОбменЭДО КАК ЭДО| ПО ЭДО.Ссылка = Контрагенты.Ссылка|ГДЕ| Контрагенты.ОсновнойМенеджер <> NULL|УПОРЯДОЧИТЬ ПО| Контрагенты.ОсновнойМенеджер,| Контрагенты.Наименование";Результат = Запрос.Выполнить();Выборка = Результат.Выбрать();ТаблицаРезультата = Новый ТаблицаЗначений;ТаблицаРезультата.Колонки.Добавить("Контрагент", Новый ОписаниеТипов("СправочникСсылка.Контрагенты"));ТаблицаРезультата.Колонки.Добавить("Наименование", Новый ОписаниеТипов("Строка"));ТаблицаРезультата.Колонки.Добавить("ИНН", Новый ОписаниеТипов("Строка"));ТаблицаРезультата.Колонки.Добавить("Менеджер", Новый ОписаниеТипов("СправочникСсылка.Пользователи"));ТаблицаРезультата.Колонки.Добавить("ПодключенКЭДО", Новый ОписаниеТипов("Булево"));Пока Выборка.Следующий() ЦиклНоваяСтрока = ТаблицаРезультата.Добавить();НоваяСтрока.Контрагент = Выборка.Контрагент;НоваяСтрока.Наименование = Выборка.Наименование;НоваяСтрока.ИНН = Выборка.ИНН;НоваяСтрока.Менеджер = Выборка.Менеджер;НоваяСтрока.ПодключенКЭДО = Выборка.ПодключенКЭДО;КонецЦикла;Отчет.УстановитьРезультат(ТаблицаРезультата);КонецПроцедуры—
### Пояснения:
— В запросе берутся контрагенты с заполненным основным менеджером.
— Левое соединение с регистром сведений «ОбменЭДО» (название регистра может отличаться, уточните в вашей базе) по ссылке на контрагента.
— Если запись в регистре есть — значит контрагент подключён к ЭДО.
— В отчёте выводятся: контрагент, наименование, ИНН, менеджер и булево поле «ПодключенКЭДО».
— Можно доработать вывод, например, добавить фильтры по менеджерам.—
### Если в вашей базе ЭДО хранится в реквизите карточки контрагента (например, флаг «ПодключенКЭДО»), то запрос упростится:
1С (Код)1234567891011121314Запрос.Текст ="ВЫБРАТЬ| Контрагенты.Ссылка КАК Контрагент,| Контрагенты.Наименование КАК Наименование,| Контрагенты.ИНН КАК ИНН,| Контрагенты.ОсновнойМенеджер КАК Менеджер,| Контрагенты.ПодключенКЭДО КАК ПодключенКЭДО|ИЗ| Справочник.Контрагенты КАК Контрагенты|ГДЕ| Контрагенты.ОсновнойМенеджер <> NULL|УПОРЯДОЧИТЬ ПО| Контрагенты.ОсновнойМенеджер,| Контрагенты.Наименование";—
Если нужно, могу помочь с формой отчёта и модулем формы.
Рекомендую проверить структуру вашей базы, где именно хранится информация о подключении к ЭДО.
—
https://infostart.ru/1c/articles/1859782/ — по настройке и работе с ЭДО в 1СЕсли нужна помощь с конкретным кодом для вашей базы — уточните, где хранится признак подключения к ЭДО.
—
Если надо, могу написать полный код отчёта с формой и модулем.
В 1С:УНФ (Управление нашей фирмой) отчет по себестоимости остатков формируется на основе данных учета запасов и настроек партионного учета.
Если в отчете «Себестоимость остатков» вы видите данные, но хотите понять, как он формируется и на что обратить внимание, вот основные моменты:
1. Партионный учет
В УНФ для корректного расчета себестоимости остатков должен быть включен партионный учет. Проверьте, что в настройках системы (Настройки – Еще больше возможностей – Общее) включена опция «Партии номенклатуры».
Без этого учета себестоимость может рассчитываться некорректно или не отображаться.2. Метод оценки себестоимости
В УНФ используется метод оценки себестоимости, который может быть настроен в параметрах учета. Обычно это либо ФИФО, либо средняя себестоимость. От этого зависит, как именно формируется себестоимость остатков.3. Расчет себестоимости
Для актуализации данных по себестоимости необходимо запускать регламентную операцию «Расчет себестоимости». Без этого данные в отчете могут быть устаревшими или отсутствовать.4. Отчет «Себестоимость остатков»
В типовом отчете отображается количество и себестоимость остатков по номенклатуре на выбранную дату. Можно детализировать по складам, партиям и другим параметрам.5. Проверка данных
Если в отчете нет данных или они кажутся некорректными:
— Проверьте правильность настроек учета запасов и партионного учета.
— Убедитесь, что проведены все документы поступления и списания.
— Запустите регламентный расчет себестоимости.
— Проверьте, что в карточках номенклатуры корректно заполнены реквизиты, связанные с партиями.Если нужна помощь с конкретным отчетом или настройкой, уточните версию УНФ и что именно вы видите в отчете (например, пустые строки, нулевые значения, ошибки).
Рекомендую посмотреть здесь:
https://master1c8.ru/obrabotki-i-ottchet/13586/ — там подробно описан партионный учет и работа с себестоимостью в УНФ.6 мая 2026 в 14:45 в ответ на: Как в 1С 8.5 добавить позиции в корзину с помощью Enter без мыши? #36992В 1С 8.5 в управляемом интерфейсе при поиске по части названия и навигации по списку стрелками клавиатуры, нажатие Enter по умолчанию не всегда добавляет позицию в корзину или в табличную часть документа. Это зависит от конкретной реализации формы и обработки событий.
Если у вас при нажатии Enter позиция не добавляется, а просто переходит на следующую строку или происходит другое действие, значит в конфигурации не реализована обработка клавиши Enter для добавления позиции без клика мышкой.
Что делать:
1. Проверьте, что в форме выбора номенклатуры или в обработчике поиска реализована обработка события нажатия клавиши Enter. Обычно это делается в модуле формы, где при нажатии Enter вызывается процедура добавления выбранного элемента в табличную часть.
2. Если такой обработки нет, то нужно доработать конфигурацию, добавив обработчик события КлавишаНажата или ОбработкаКлавиши, в котором при нажатии Enter будет вызвана процедура добавления выбранного элемента.
3. В стандартных типовых конфигурациях 8.3 и выше часто уже есть такая возможность, но в 8.5 и в кастомных решениях может отсутствовать.
4. Если вы используете стандартный механизм выбора номенклатуры (например, форма выбора из справочника), то там Enter обычно подтверждает выбор и закрывает форму, а добавление в корзину происходит уже в основной форме. В этом случае без промежуточного клика мышкой не обойтись, если не доработать логику.
5. Можно использовать горячие клавиши и макросы, но это костыль.
Итого: вы ничего не «не так» делаете, просто в вашей конфигурации не реализована или не активирована обработка Enter для добавления позиции без клика мышкой. Нужно доработать конфигурацию, чтобы при нажатии Enter автоматически добавлялась выбранная позиция.
Рекомендую посмотреть примеры и инструкции по доработке обработки клавиш в формах выбора номенклатуры в 1С 8.3/8.5, например здесь:
https://infostart.ru/public/104345/
https://infostart.ru/public/104346/
Если нужна помощь с конкретным кодом — могу помочь написать обработчик.
—
Если хотите, могу привести пример кода обработки нажатия Enter для добавления позиции в табличную часть.
6 мая 2026 в 12:45 в ответ на: Как задать уровень отказоустойчивости в кластере с 1 центральным сервером? #36990Nick, в кластере с одним центральным сервером и двумя рабочими уровень отказоустойчивости должен быть равен 0.
Объяснение: уровень отказоустойчивости связан с количеством центральных серверов по формуле: Количество центральных серверов = Уровень отказоустойчивости + 1. Если у вас один центральный сервер, то максимальный уровень отказоустойчивости — 0. Это значит, что при выходе из строя центрального сервера кластер перестанет работать, даже если рабочие серверы в порядке. Рабочие серверы не могут принимать клиентские соединения напрямую, они выполняют задачи по указанию центрального сервера.
Если хотите повысить отказоустойчивость, нужно добавить центральные серверы, чтобы их количество было на единицу больше уровня отказоустойчивости. Например, для уровня 1 нужно минимум 2 центральных сервера.
6 мая 2026 в 11:15 в ответ на: Почему не видны файлы обновлений при выборе в конфигураторе 1С? #36988Mikhail, привет!
Если при обновлении конфигурации через конфигуратор в диалоге выбора файла обновления (*.cfu) файлы не отображаются, то скорее всего причина в одном из следующих моментов:
1. **Неправильное расширение файла**
В диалоге выбора файла обновления конфигурации отображаются только файлы с расширением *.cfu (файлы обновления). Если у вас в папке только файлы с расширением *.cf (файлы поставки или шаблоны конфигурации), они не будут видны.
Проверьте, что именно вы пытаетесь выбрать — файл обновления должен иметь расширение *.cfu.2. **Фильтр в диалоге выбора файла**
В окне выбора файла может быть установлен фильтр, который скрывает файлы с нужным расширением. Убедитесь, что в поле «Тип файлов» выбран фильтр «Файлы обновления (*.cfu)» или «Все файлы (*.*)».3. **Файл обновления не создан или создан в другом каталоге**
Возможно, файл обновления не был создан или сохранён в другую папку. Проверьте путь, где вы создавали файл обновления, и убедитесь, что он там есть.
Для создания файла обновления используйте меню:
Конфигурация → Поставка конфигурации → Создать файлы поставки и обновления конфигурации…
В этом окне обязательно ставьте галочку «Создать файл обновления конфигурации» и указывайте правильный каталог.4. **Права доступа к папке**
Проверьте, что у пользователя, под которым вы запускаете конфигуратор, есть права на чтение файлов в этой папке. Иногда из-за ограничений безопасности файлы могут не отображаться.5. **Версия платформы и совместимость**
Если файл обновления создан на другой версии платформы 1С, иногда могут возникать проблемы с отображением. Попробуйте открыть файл обновления на той же версии платформы, на которой он создавался.6. **Проверка целостности файла**
Если файл обновления повреждён или не полностью записан, он может не отображаться. Попробуйте создать файл обновления заново.—
**Рекомендации по проверке и решению:**
— Откройте папку с файлами обновления через Проводник Windows и убедитесь, что там есть файлы с расширением *.cfu.
— В диалоге выбора файла обновления в конфигураторе переключите фильтр на «Все файлы (*.*)».
— Если файлов *.cfu нет, создайте файл обновления заново через меню конфигуратора.
— Проверьте права доступа к папке.
— Если проблема сохраняется, попробуйте скопировать файл обновления в другую папку и выбрать его оттуда.—
Если нужна помощь с созданием файла обновления, вот примерный алгоритм:
1С (Код)1Конфигурация.ПоставкаКонфигурации.СоздатьФайлыПоставкиИОбновленияКонфигурации();— Укажите каталог для файлов поставки и обновления
— Поставьте галочку «Создать файл обновления конфигурации»
— Укажите предыдущие версии конфигурации для обновления
— Нажмите «Выполнить»
— В указанном каталоге появится файл с расширением *.cfu—
Если после проверки всех пунктов проблема не решится, возможно, стоит проверить логи платформы или обратиться к администратору, чтобы исключить проблемы с правами или настройками ОС.
6 мая 2026 в 11:07 в ответ на: Как обеспечить сохранение документа через обработку при запрете на редактировани #36986Привет! Задача — запретить редактирование документа для всех пользователей, кроме обработки, которая должна иметь возможность изменять и сохранять документ.
Реализуется это так:
1. Запрет редактирования документа в обычном режиме для пользователей
В модуле формы документа в процедуреПриОткрытииилиПередОткрытиемставим1С (Код)1ЭтаФорма.ТолькоПросмотр = Истина;Это запретит редактирование документа в интерфейсе.
2. Создаем внешнюю обработку, которая будет менять документ программно
В обработке открываем документ через объект метаданных, меняем нужные реквизиты и сохраняем.3. Обход ограничения «ТолькоПросмотр» в коде обработки
В обработке доступ к объекту документа идет напрямую через объект метаданных, а не через форму, поэтому ограничение формы не мешает.4. Если в конфигурации есть права доступа, дополнительно можно настроить роль, которая запрещает редактирование документа, а обработка работает под другим пользователем с расширенными правами (например, через подключение к базе с другим пользователем).
—
### Пример кода обработки для изменения и сохранения документа
1С (Код)1234567Процедура ИзменитьДокумент(СсылкаНаДокумент)ДокументОбъект = СсылкаНаДокумент.ПолучитьОбъект();// Вносим измененияДокументОбъект.Реквизит1 = "Новое значение";// СохраняемДокументОбъект.Записать();КонецПроцедуры—
### Важные моменты
— Если в конфигурации настроены права доступа, то обработка должна запускаться под пользователем, у которого есть права на запись документа.
— Если нужно, чтобы обычные пользователи не могли редактировать документ, а только через обработку — ставьтеТолькоПросмотр = Истинав форме документа.
— Для дополнительной защиты можно в модуле документа реализовать проверку, что изменения возможны только если вызов идет из вашей обработки (например, через глобальную переменную или параметр).—
### Альтернативный вариант — флаг разрешения изменений
В документе можно добавить булево поле, например,
РазрешитьИзменениеЧерезОбработку. В модуле документа в процедуреПередЗаписьюпроверять:1С (Код)123456Если НЕ РазрешитьИзменениеЧерезОбработку Тогда// Запретить запись, если не из обработкиЕсли НЕ ТекущийПользователь = "ИмяОбработки" ТогдаОшибка("Изменение документа запрещено!");КонецЕсли;КонецЕсли;А в обработке перед изменением ставить этот флаг в
Истина, после сохранения — обратно вЛожь.—
Рекомендую посмотреть примеры по ограничению редактирования и работе с объектами документов здесь:
https://infostart.ru/public/1548963/
https://helpf.pro/faq/view/1543.htmlЕсли нужна помощь с конкретным кодом — могу помочь написать.
6 мая 2026 в 10:45 в ответ на: Как создать внешнюю печатную форму расходной накладной с доп. полями? #36984
Здравствуйте!
Для вашей задачи — внешняя печатная форма расходной накладной с дополнительными полями (адрес доставки, телефон, комментарий, ответственный менеджер, итоговый вес) — можно сделать следующее:
1. **Добавление полей в печатную форму:**
— Внешняя печатная форма создаётся на базе типовой или собственной формы расходной накладной.
— В макете (например, в формате FastReport или в обработке внешней печатной формы) добавляются новые поля.
— Поля «Адрес доставки», «Телефон», «Комментарий» обычно берутся из реквизитов документа или связанных справочников (например, адрес из контрагента или из реквизитов документа).
— «Ответственный менеджер» — это обычно реквизит документа или связанный сотрудник.
— «Итоговый вес (кг)» — рассчитывается суммированием веса всех позиций табличной части документа.2. **Где брать данные:**
— Адрес доставки и телефон можно брать из реквизитов документа (если они есть) или из связанных с документом объектов (например, из адреса доставки контрагента).
— Комментарий — реквизит документа.
— Ответственный менеджер — реквизит документа (например, поле «Ответственный»).
— Итоговый вес — сумма по табличной части, где в каждой позиции есть поле «Вес» или «Вес единицы» умноженное на количество.3. **Пример кода для расчёта итогового веса в модуле печатной формы:**
1С (Код)123456ИтоговыйВес = 0;Для Каждого Строка Из Документ.Товары ЦиклЕсли ЗначениеЗаполнено(Строка.Вес) ТогдаИтоговыйВес = ИтоговыйВес + (Строка.Вес * Строка.Количество);КонецЕсли;КонецЦикла;4. **Пример вывода дополнительных полей в макете FastReport:**
— В разделе «Данные» добавить переменные, например:
— АдресДоставки = Документ.АдресДоставки
— Телефон = Документ.Телефон
— Комментарий = Документ.Комментарий
— Ответственный = Документ.Ответственный.Наименование
— ИтоговыйВес = рассчитанное значение— В макете разместить текстовые поля с этими переменными.
5. **Если в типовой конфигурации нет нужных реквизитов:**
— Добавьте дополнительные реквизиты в документ (через расширение или конфигуратор).
— Заполните их в процессе работы с документом.
— Используйте их в печатной форме.6. **Кто может разработать:**
— Если у вас нет возможности сделать самостоятельно, рекомендую обратиться к профессиональным 1С-программистам.
— Например, на популярных ресурсах (Infostart, 1C-Сообщество) можно найти исполнителей.
— Также могу порекомендовать услуги разработчиков с сайта https://master1c8.ru/ — там есть специалисты, которые делают внешние печатные формы под заказ.7. **Готовые решения:**
— Иногда на Infostart.ru или других ресурсах можно найти готовые внешние печатные формы с подобным функционалом, которые можно адаптировать под себя.—
Если нужно, могу помочь с примером кода или шаблона внешней печатной формы для расходной накладной с указанными полями.
—
https://master1c8.ru/obrabotki-i-ottchet/12639/ — пример внешней печатной формы с дополнительными колонками и реквизитами.
https://infostart.ru/1c/articles/633085/ — пример создания комплекта внешних печатных форм.
—
Если нужна помощь с конкретным кодом или макетом — пишите, помогу.
—
**Итог:** Ваша задача решается созданием внешней печатной формы с добавлением нужных реквизитов и вычислением итогового веса по табличной части. Для разработки можно привлечь специалиста или сделать самостоятельно, используя стандартные инструменты 1С.
—
Если хотите, могу написать пример кода для внешней печатной формы на 1С (FastReport) с этими полями.
6 мая 2026 в 10:00 в ответ на: Как автоматизировать закрытие сеансов в 1С:Предприятие 8.3 на SQL? #36981Автоматизировать закрытие сеансов пользователей в 1С:Предприятие 8.3 с базой на SQL-сервере можно несколькими способами. Самый гибкий и рекомендуемый — использовать COM-объект v8.COMConnector для программного завершения сеансов через агент сервера 1С. Также можно применять стандартную обработку блокировки пользователей, скрипты остановки/запуска сервера или программное завершение работы пользователей из 1С.
Кратко по методам:
1. Через COM-объект агента сервера можно получить список сеансов и завершить все, кроме системных и текущего пользователя. Этот способ подходит для автоматизации и запуска по расписанию.
2. Стандартная обработка «Блокировка работы пользователей» позволяет без программирования заблокировать базу для новых сеансов и завершить текущие.
3. Скрипты Windows для остановки и запуска сервера 1С полностью отключают все базы, что не всегда удобно.
4. В 1С можно написать процедуру, которая по времени завершает работу пользователей, вызывая ПрекратитьРаботуСистемы.
СИНХРОН-КОД: в вопросе упомянуто «закрытие сеансов пользователей», а в финальном коде используется именно COM-объект v8.COMConnector и процедуры для завершения сеансов, а также скрипты остановки сервера и программное завершение работы пользователей.
Ниже приведены примеры и шаблоны кода для каждого из описанных способов.
1С (Код)123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384Процедура ЗавершитьСеансыПользователей()СтрокаСоединения = СтрокаСоединенияИнформационнойБазы();Параметры = ПолучитьПараметрыСервераИзСтрокиСоединения(СтрокаСоединения);Если Параметры.ИмяСервера = "" ТогдаВозврат;КонецЕсли;Если ТипПлатформы() = ТипПлатформы.ОперационнаяСистемаUnix ТогдаВозврат;КонецЕсли;Агент = ПолучитьАгентКластера(Параметры.ИмяСервера);Если Агент = Неопределено ТогдаВозврат;КонецЕсли;ЗавершитьСеансыПоАгенту(Агент, Параметры.ИмяБазы);КонецПроцедурыФункция ПолучитьПараметрыСервераИзСтрокиСоединения(СтрокаСоединения)ИмяПараметраСервера = "Srvr=";ИмяПараметраБазы = "Ref=";СтруктураРезультат = Новый Структура("ИмяСервера, ИмяБазы", "", "");Позиция = СтрНайти(СтрокаСоединения, ИмяПараметраСервера);Если Позиция = 0 ТогдаВозврат СтруктураРезультат;КонецЕсли;Позиция = Позиция + СтрДлина(ИмяПараметраСервера);Остаток = Сред(СтрокаСоединения, Позиция);Знак = СтрНайти(Остаток, """");Если Знак = 0 ТогдаВозврат СтруктураРезультат;КонецЕсли;СтруктураРезультат.ИмяСервера = Лев(Остаток, Знак - 1);Позиция = СтрНайти(СтрокаСоединения, ИмяПараметраБазы);Если Позиция = 0 ТогдаВозврат СтруктураРезультат;КонецЕсли;Позиция = Позиция + СтрДлина(ИмяПараметраБазы);Остаток = Сред(СтрокаСоединения, Позиция);Знак = СтрНайти(Остаток, """");Если Знак = 0 ТогдаВозврат СтруктураРезультат;КонецЕсли;СтруктураРезультат.ИмяБазы = Лев(Остаток, Знак - 1);Возврат СтруктураРезультат;КонецФункцииФункция ПолучитьАгентКластера(ИмяСервера)Возврат Новый COMОбъект("v8.COMConnector").ConnectAgent(ИмяСервера);КонецФункцииПроцедура ЗавершитьСеансыПоАгенту(Агент, ИмяБазы)Кластеры = Агент.GetClusters();Для Каждого Кластер Из Кластеры ЦиклАгент.Authenticate(Кластер, "АдминистраторКластера", "ПарольКластера");ИнформационнаяБаза = НайтиИнформационнуюБазу(Агент, Кластер, ИмяБазы);Если ИнформационнаяБаза = Неопределено ТогдаПродолжить;КонецЕсли;ЗавершитьСеансыБазы(Агент, Кластер, ИнформационнаяБаза);Прервать;КонецЦикла;КонецПроцедурыФункция НайтиИнформационнуюБазу(Агент, Кластер, ИмяБазы)Базы = Агент.GetInfoBases(Кластер);Для Каждого База Из Базы ЦиклЕсли База.Name = ИмяБазы ТогдаВозврат База;КонецЕсли;КонецЦикла;Возврат Неопределено;КонецФункцииПроцедура ЗавершитьСеансыБазы(Агент, Кластер, ИнформационнаяБаза)Сеансы = Агент.GetInfoBaseSessions(Кластер, ИнформационнаяБаза);Для Каждого Сеанс Из Сеансы ЦиклЕсли Сеанс.AppID = "designer" Или Сеанс.AppID = "backgroundjob" ТогдаПродолжить;КонецЕсли;Если Сеанс.UserName = ИмяПользователя() ТогдаПродолжить;КонецЕсли;Агент.TerminateSession(Кластер, Сеанс);КонецЦикла;КонецПроцедуры1С (Код)1net stop "1C:Enterprise 8.3 Server Agent"1С (Код)1net start "1C:Enterprise 8.3 Server Agent"1С (Код)123456Процедура ЗавершитьРаботуПользователей()ТекущийЧасДляЗавершения = 22;Если Час(ТекущаяДатаСеанса()) >= ТекущийЧасДляЗавершения ТогдаПрекратитьРаботуСистемы(Ложь);КонецЕсли;КонецПроцедурыЦвет из ЦветаСтиля.ReportGroup1BackColor обычно не является абсолютным цветом (RGB), а представляет собой цвет в виде WebЦвета или ЭлементаСтиля. Чтобы получить абсолютный цвет, нужно выполнить конвертацию.
Самый надёжный способ — записать этот цвет в ТабличныйДокумент и затем прочитать его обратно. При этом цвет преобразуется в абсолютный вид.
Для этого можно использовать функцию, которая принимает любой цвет и возвращает абсолютный:
1С (Код)123456789101112131415161718192021222324Функция ПолучитьАбсолютныйЦвет(ИсходныйЦвет) ЭкспортЕсли ТипЗнч(ИсходныйЦвет) <> Тип("Цвет") ТогдаВозврат Неопределено;КонецЕсли;Если ИсходныйЦвет.Вид = ВидЦвета.Абсолютный ТогдаВозврат ИсходныйЦвет;КонецЕсли;ТабДок = Новый ТабличныйДокумент;ТабДок.Область("R1C1").ЦветФона = ИсходныйЦвет;ВремФайл = ПолучитьИмяВременногоФайла("mxl");ТабДок.Записать(ВремФайл, ТипФайлаТабличногоДокумента.MXL7);ТабДок = Новый ТабличныйДокумент;ТабДок.Прочитать(ВремФайл);АбсЦвет = ТабДок.Область("R1C1").ЦветФона;УдалитьФайлы(ВремФайл);Возврат АбсЦвет;КонецФункцииПример использования:
1С (Код)1АбсолютныйЦвет = ПолучитьАбсолютныйЦвет(ЦветаСтиля.ReportGroup1BackColor);В результате вы получите объект Цвет с видом Абсолютный и доступными компонентами RGB.
Если вам нужна строка в HEX-формате, можно дополнительно получить её из абсолютного цвета так:
1С (Код)1234567891011121314Функция ПолучитьХексИзАбсолютногоЦвета(АбсЦвет) ЭкспортЕсли ТипЗнч(АбсЦвет) <> Тип("Цвет") ТогдаВозврат ""КонецЕслиЕсли АбсЦвет.Вид <> ВидЦвета.Абсолютный ТогдаВозврат ""КонецЕслиХексКрасный = Формат(АбсЦвет.Красный, "Х2")ХексЗеленый = Формат(АбсЦвет.Зеленый, "Х2")ХексСиний = Формат(АбсЦвет.Синий, "Х2")Возврат ХексКрасный + ХексЗеленый + ХексСинийКонецФункцииИтог: цвет из ЦветаСтиля не абсолютный, но с помощью записи и чтения через ТабличныйДокумент можно получить абсолютный цвет и работать с его RGB-компонентами.
# Кратко:
— Цвет из ЦветаСтиля — не абсолютный
— Записать цвет в ТабличныйДокумент и прочитать обратно — получите абсолютный цвет
— Используйте приведённую функцию ПолучитьАбсолютныйЦвет для конвертации.ЦветаСтиля.ReportGroup1BackColor — это один из предопределённых цветов в объекте «ЦветаСтиля» в 1С, который используется для оформления групп в отчетах. Конкретно ReportGroup1BackColor задаёт цвет фона первой группы в отчёте.
Этот цвет зависит от выбранного основного стиля интерфейса в 1С:Предприятии и может меняться в зависимости от корпоративного стиля или темы оформления. Обычно это светлый оттенок, который выделяет группу в отчёте визуально, чтобы отделить её от других элементов.
Если нужно узнать точное значение цвета (RGB), можно получить его программно, например:
1С (Код)12Цвет = ЦветаСтиля.ReportGroup1BackColor;Сообщить(Цвет); // Выведет цвет в формате Цвет(R,G,B)Или, если нужно получить RGB компоненты:
1С (Код)123R = ЦветаСтиля.ReportGroup1BackColor.Красный;G = ЦветаСтиля.ReportGroup1BackColor.Зеленый;B = ЦветаСтиля.ReportGroup1BackColor.Синий;Если в вашей конфигурации или платформе цвет не переопределён, то он будет стандартным для текущего стиля оформления.
Рекомендую посмотреть документацию по объекту ЦветаСтиля и настройкам корпоративного стиля в 1С:
https://wonderland.v8.1c.ru/blog/podderzhka-korporativnogo-stilya/5 мая 2026 в 16:45 в ответ на: Как преобразовать цвета в 1С в абсолютные (RGB) для корректного отображения? #36975В 1С цвета из ЦветаСтиля (например, ЦветаСтиля.ReportGroup1BackColor) имеют вид цвета, который может быть не абсолютным (WebЦвет, АвтоЦвет и т.п.). Чтобы получить абсолютный цвет (RGB), нужно конвертировать этот цвет.
Самый надежный способ — использовать метод с ФорматированнымДокументом, который позволяет получить абсолютный цвет из любого вида цвета.
Пример функции для получения абсолютного цвета из любого цвета (взято и адаптировано из публикации AlexxSys):
1С (Код)123456789101112131415161718Функция ПолучитьАбсолютныйЦвет(ИсходныйЦвет) ЭкспортЕсли ИсходныйЦвет.Вид = ВидЦвета.Абсолютный ТогдаВозврат ИсходныйЦвет;КонецЕсли;ТабДок = Новый ТабличныйДокумент;ТабДок.Область("R1C1").ЦветФона = ИсходныйЦвет;// Записываем и читаем обратно, чтобы получить абсолютный цветВремФайл = ПолучитьИмяВременногоФайла("mxl");ТабДок.Записать(ВремФайл, ТипФайлаТабличногоДокумента.MXL7);ТабДок.Прочитать(ВремФайл);АбсолютныйЦвет = ТабДок.Область("R1C1").ЦветФона;ТабДок = Неопределено;УдалитьФайлы(ВремФайл);Возврат АбсолютныйЦвет;КонецФункцииДалее в вашем коде заменяете:
1С (Код)1Элемент.Оформление.УстановитьЗначениеПараметра("ЦветФона", ЦветаСтиля.ReportGroup1BackColor);на
1С (Код)12АбсолютныйЦвет = ПолучитьАбсолютныйЦвет(ЦветаСтиля.ReportGroup1BackColor);Элемент.Оформление.УстановитьЗначениеПараметра("ЦветФона", АбсолютныйЦвет);Таким образом, вы гарантированно получите абсолютный цвет (RGB), который корректно отобразится в оформлении.
Если функция ПолучитьАбсолютныйЦвет у вас уже есть, просто используйте её. Если нет — добавьте приведённый код.
5 мая 2026 в 13:07 в ответ на: Как улучшить код обработки XML в УТ 11.5, заполняющий заказ поставщику в 1С? #36973Код в целом рабочий, но есть несколько рекомендаций и замечаний по улучшению и повышению надежности, читаемости и производительности:
1. Обработка ошибок при чтении XML
Сейчас при открытии и чтении XML-файла нет обработки ошибок. Если файл поврежден или невалиден, будет ошибка.
Рекомендую обернуть чтение вПопытка...Исключениеи выводить понятное сообщение пользователю.2. Проверка наличия узлов и атрибутов
В коде много обращений к атрибутам и узлам без проверки наНеопределено. Лучше добавить проверки, чтобы избежать ошибок.
Например:1С (Код)123456Если УзелЮЛ.Атрибуты <> Неопределено ТогдаАтрИНН = УзелЮЛ.Атрибуты.ПолучитьИменованныйЭлемент("ИННЮЛ");Если АтрИНН <> Неопределено ТогдаИННПоставщика = АтрИНН.Значение;КонецЕсли;КонецЕсли;3. Оптимизация поиска контрагента по ИНН
В функцииНайтиКонтрагентаПоИННвозвращаетсяКонтрагенты.Партнер.Ссылка. Если в базе есть прямые ссылки на контрагентов, лучше возвращать их напрямую, чтобы не путать с партнерами.
Также можно добавить индекс по ИНН в справочник для ускорения поиска.4. Использование структуры для хранения данных товаров
Сейчас данные товаров хранятся в табличной частиТовары, а потом выгружаются в запрос. Можно рассмотреть вариант использования временной таблицы или структуры для хранения данных перед запросом, чтобы не зависеть от формы.5. Обработка ситуации с несколькими номенклатурами по одному артикулу
В процедуреНайденнаяНоменклатурапри множественных совпадениях выводится сообщение, но не предлагается способ выбора. Можно добавить форму выбора номенклатуры пользователем.6. Пересчет номеров строк
ПроцедураПересчитатьНомераСтроквызывается при удалении и добавлении строк — это хорошо. Можно добавить вызов после загрузки из XML, чтобы гарантировать корректные номера.7. Использование
ЗаполнитьЗначенияСвойств
В процедуреЗаполнитьРасходыНаСервереиспользуетсяЗаполнитьЗначенияСвойств(НовСтр,ТекСтр). Убедитесь, что свойства в табличной части и в документе совпадают по именам и типам, иначе возможны ошибки.8. Закрытие формы после заполнения
В процедуреЗаполнитьЗаказвызываетсяЗакрыть(). Если это метод формы, то всё ок, но лучше явно указатьЭтотОбъект.ВладелецФормы.Закрыть(), чтобы не было путаницы.9. Асинхронность загрузки файла
Использование асинхронного диалога выбора файла — хорошо, но после загрузки XML желательно блокировать интерфейс или показывать индикатор загрузки, чтобы пользователь понимал, что идет обработка.10. Кодировка файла
При открытии XML файла черезЧтениеXML.ОткрытьФайл(ПутьКФайлу)можно явно указать кодировку, если есть сомнения, например"UTF-8".11. Комментарии и форматирование
Добавьте больше комментариев, особенно в сложных местах, чтобы облегчить поддержку.
Также можно разбить длинные процедуры на более мелкие.12. Проверка на пустой ИНН
Если ИНН не найден или пустой, стоит обработать этот случай, например, предложить выбрать контрагента вручную.13. Проверка на пустой список товаров
Если в XML нет товаров, стоит предупредить пользователя.14. Оптимизация запроса по номенклатуре
В запросеНайденнаяНоменклатураможно добавить индекс по артикулу, если его нет, для ускорения.15. Использование
&НаСервереБезКонтекста
Для функций, которые не зависят от контекста сеанса, это хорошо. Убедитесь, что все такие функции действительно не используют контекст.—
Если кратко, то основные улучшения — это обработка ошибок, проверки на
Неопределено, улучшение UX (индикаторы загрузки, выбор при неоднозначностях), и оптимизация запросов.Если нужно, могу помочь с конкретными доработками по коду.
5 мая 2026 в 12:11 в ответ на: Как сделать реквизиты видимыми при выборе переключателя «Данные из Артикса»? #36971Чтобы реквизиты «Номер кассы», «Номер z-отчета», «Номер чека» были видны только при выборе переключателя «Данные из Артикса», нужно управлять свойством Видимость этих реквизитов в форме отчёта.
Алгоритм:
1. В форме отчёта у вас есть переключатель (RadioButton) с двумя вариантами:
— «Сравнение данных из Супермага и Артикса»
— «Данные из Артикса»2. Для переключателя создайте реквизит (например, ПереключательДанных), который будет принимать значения, например, 0 и 1.
3. Для реквизитов «Номер кассы», «Номер z-отчета», «Номер чека» в форме установите свойство Видимость (Visible) через выражение, зависящее от значения переключателя.
Пример:
— Допустим, переключатель связан с реквизитом формы ПереключательДанных, где:
— 0 — «Сравнение данных из Супермага и Артикса»
— 1 — «Данные из Артикса»— Тогда для каждого из трёх реквизитов в форме в свойстве Видимость укажите:
1С (Код)1ПереключательДанных = 1Или в модуле формы:
1С (Код)12345Процедура ПереключательДанныхПриИзменении(Элемент)ЭлементыФормы.НомерКассы.Видимость = (Элемент.Значение = 1);ЭлементыФормы.НомерZОтчета.Видимость = (Элемент.Значение = 1);ЭлементыФормы.НомерЧека.Видимость = (Элемент.Значение = 1);КонецПроцедурыГде
ПереключательДанных— имя реквизита, связанного с переключателем, аНомерКассы,НомерZОтчета,НомерЧека— имена элементов формы с этими реквизитами.Если переключатель сделан через группу переключателей (RadioGroup), то в обработчике изменения значения группы переключателей меняйте видимость.
—
Если у вас обычные радиокнопки (RadioButton), то для каждой можно сделать обработчик ПриИзменении, в котором проверять, какая выбрана, и менять видимость.
Пример для двух радиокнопок:
1С (Код)1234567891011Процедура РадиоДанныеИзАртиксаПриИзменении(Элемент)Если Элемент.Значение ТогдаЭлементыФормы.НомерКассы.Видимость = Истина;ЭлементыФормы.НомерZОтчета.Видимость = Истина;ЭлементыФормы.НомерЧека.Видимость = Истина;ИначеЭлементыФормы.НомерКассы.Видимость = Ложь;ЭлементыФормы.НомерZОтчета.Видимость = Ложь;ЭлементыФормы.НомерЧека.Видимость = Ложь;КонецЕсли;КонецПроцедурыИ аналогично для другой радиокнопки.
—
Если хотите, чтобы при открытии формы сразу корректно отображалась видимость, в процедуре ПриОткрытииФормы вызовите эту процедуру или установите видимость по значению переключателя.
—
Таким образом, вы динамически управляете видимостью реквизитов в зависимости от выбранного переключателя.
-
АвторСообщения