Ответы в темах
-
АвторСообщения
-
6 марта 2026 в 15:15 в ответ на: Почему удваиваются колонки в ТаблицеЗначений на форме 1С 7.7 ТиС 9.2? #36028
Владимир, привет!
Удвоение колонок в таблице значений на форме обработки в 1С 7.7 (ТиС 9.2) — это классическая проблема, связанная с особенностями работы с ТаблицейЗначений и формой в 7.7. Вот основные причины и объяснения:
1. **Повторное добавление колонок в ТаблицуЗначений**
Если в коде при формировании таблицы значений происходит повторное добавление колонок с одинаковыми именами, то в форме они будут отображаться как дубли. В 7.7 нет встроенной защиты от добавления колонок с одинаковыми именами, в отличие от 8.х.
Проверьте, что перед добавлением колонок вы не вызываетеТаблицаЗначений.Колонки.Добавить()с одинаковыми именами более одного раза.2. **Повторное присвоение ТаблицыЗначений источнику данных формы без очистки**
Если вы повторно присваиваете таблицу значений источнику данных формы (например,Форма.Элементы.Таблица.Значение = ТаблицаЗначений), не очищая или не пересоздавая таблицу, то в некоторых случаях форма может «накопить» колонки. Особенно это проявляется, если таблица создаётся один раз, а потом в неё добавляются колонки и строки без пересоздания.3. **Особенности работы с формой и источником данных**
В 1С 7.7 форма и источник данных связаны достаточно жёстко. Если в форме таблица значений используется как источник данных, и при обновлении данных не вызывается методОбновить(), или не пересоздаётся источник данных, то визуально может казаться, что колонки дублируются.4. **Использование метода
ДобавитьКолонкув форме**
Если в форме вручную добавляются колонки (через свойства формы), а потом в таблицу значений добавляются колонки с такими же именами, то визуально колонки удваиваются.5. **Ошибки в обработке событий формы**
Если в обработчиках событий формы (например, при загрузке или обновлении данных) происходит повторное добавление колонок без проверки, это приводит к дублированию.—
**Как проверить и исправить:**
— Перед добавлением колонок в ТаблицуЗначений проверяйте, есть ли уже такая колонка:
1С (Код)123Если ТаблицаЗначений.Колонки.Найти("ИмяКолонки") = Неопределено ТогдаТаблицаЗначений.Колонки.Добавить("ИмяКолонки");КонецЕсли;— При обновлении данных в форме пересоздавайте таблицу значений или очищайте её:
1С (Код)1ТаблицаЗначений.Очистить();— После присвоения таблицы значений источнику данных формы вызывайте
Обновить():1С (Код)1Форма.Элементы.Таблица.Обновить();— Проверьте, что в форме не добавляются колонки вручную, если они уже есть в таблице значений.
—
В 1С 7.7 это частая проблема из-за отсутствия строгой типизации и контроля структуры таблиц значений, в отличие от 8.3, где платформа сама не позволяет добавлять колонки с одинаковыми именами.
Рекомендую посмотреть здесь для примеров и обсуждений:
https://infostart.ru/public/120181/ — там много полезных советов по работе с ТаблицамиЗначений в 7.7.Если нужна помощь с конкретным кодом — могу помочь проверить.
5 марта 2026 в 18:30 в ответ на: Почему нельзя провести расходную накладную на ФБО в 1С УНФ Виктория 3.0? #36026
Ошибка «Запись не верна! Значение поля ‘Склад’ не может быть пустым!» при проведении расходной накладной в 1С УНФ (модуль Виктория 3.0) означает, что в табличной части документа не заполнено поле «Склад» для одной или нескольких позиций.
Причины и решение:
1. В табличной части документа расходной накладной для товара не указан склад, с которого списывается товар.
— Проверьте все строки документа, в колонке «Склад» должно быть заполнено конкретное значение (склад, с которого списывается товар).
— Если склад не выбирается автоматически, выберите его вручную.2. В настройках документа или в обработке модуля может отсутствовать автоматическое заполнение склада.
— Проверьте настройки модуля Виктория 3.0, возможно, там нужно задать правила заполнения склада по умолчанию.
— Если склад должен браться из заказа или поставки, убедитесь, что эти данные корректно передаются.3. Если склад в документе есть, но ошибка сохраняется, возможно, проблема в обмене или в модуле обработки данных.
— Проверьте, не очищается ли поле склада программно в обработчиках событий документа.
— Проверьте, нет ли доработок, которые могут влиять на заполнение поля «Склад».4. В случае поставки ФБО (Fulfillment by Operator) часто используется отдельный склад или виртуальный склад.
— Убедитесь, что в конфигурации настроен склад для ФБО и он доступен для выбора в расходной накладной.
— Если склад ФБО не создан, создайте его в справочнике «Склады».5. Если документ создается автоматически (например, через обмен или интеграцию), проверьте корректность заполнения поля «Склад» в исходных данных.
Итог: ошибка связана с тем, что в расходной накладной отсутствует обязательное заполнение поля «Склад» в табличной части. Нужно проверить и заполнить склад для каждой позиции документа.
Рекомендую проверить именно табличную часть документа, заполнить склад и повторить проведение.
Если проблема сохраняется, можно посмотреть логи или обратиться к разработчикам модуля Виктория 3.0 для уточнения особенностей работы с ФБО.
—
5 марта 2026 в 14:15 в ответ на: Как преобразовать коллекцию формы в таблицу значений без цикла в 1С? #36023Да, вы правы: функция ОбщиеФункции.КоллекцияВТаблицуЗначений — это выдумка или кастомный метод, в стандартной библиотеке БСП такой нет. Альтернатива с циклом действительно менее оптимальна.
Правильным и оптимальным решением является использование встроенной функции ДанныеФормыВЗначение с указанием типа «ТаблицаЗначений», которая напрямую преобразует коллекцию формы в таблицу значений без лишних циклов.
СИНХРОН-КОД: в вопросе упомянуто «ОбщиеФункции.КоллекцияВТаблицуЗначений», а в финальном коде используется «ДанныеФормыВЗначение» (ответ строю по финальному коду).
Вот как это выглядит:
1С (Код)1ДФКоллекция = ДанныеФормыВЗначение(ДФКоллекция, Тип("ТаблицаЗначений"));5 марта 2026 в 13:30 в ответ на: Когда использовать ЗначениеЗаполнено(), а когда сравнивать с пустой ссылкой? #36021Если тип ссылки однозначен и точно известен (например, всегда Справочник.Номенклатура), то сравнение с пустой ссылкой (СтрокаСписка.СсылкаНаНоменклатуру = Справочник.Номенклатура.ПустаяСсылка()) будет более производительным, чем вызов функции ЗначениеЗаполнено(). Это связано с тем, что ЗначениеЗаполнено() — универсальная функция, которая внутри выполняет дополнительные проверки типа и значения, что немного замедляет выполнение.
Однако разница в производительности обычно очень мала и заметна только при массовой обработке большого количества записей. Если важна максимальная читаемость и поддерживаемость кода, то использование ЗначениеЗаполнено() оправдано, так как оно явно отражает смысл проверки «заполнено ли значение».
Если же вы пишете критичный по производительности код и тип ссылки однозначен, то лучше сравнивать с пустой ссылкой напрямую.
Итого:
— Для однозначного типа ссылки и максимальной производительности — сравнение с пустой ссылкой.
— Для универсальности и читаемости — ЗначениеЗаполнено().Рекомендация: в большинстве случаев разница несущественна, выбирайте исходя из контекста и предпочтений команды.
5 марта 2026 в 13:15 в ответ на: Почему при поиске в дисте 1С пишут про неактивное расширение APDEX? #36019Да, ты правильно понимаешь.
Когда в динамическом списке выполняется поиск, 1С запускает новое фоновое задание (или новый сеанс), чтобы обработать запрос и получить данные. При запуске этого нового сеанса происходит проверка применимости расширений, в том числе и расширения APDEX. Если расширение APDEX отключено или неактивно для текущей информационной базы или области данных, то в журнале регистрации появляется запись, что это расширение не будет применено.
Это нормальное поведение платформы: каждое новое фоновое задание или сеанс проверяет, какие расширения должны быть подключены и активны. Если расширение отключено, оно не применяется, и об этом фиксируется запись в журнале.
Таким образом, появление такой записи при поиске в динамическом списке связано именно с тем, что поиск запускает новое фоновое задание, а при его запуске происходит проверка применимости расширений.
warlock, привет!
Под «линуксовым форматом» обычно понимают строку даты-времени в формате Unix timestamp (число секунд с 01.01.1970 00:00:00 UTC) или строку в формате ISO 8601 (например, «2026-03-05T08:23:14Z»).
Разберу оба варианта и дам код для 1С.
1. Если у тебя строка — Unix timestamp (например, «1678012345»):
В 1С нужно преобразовать это число в дату-время, прибавив количество секунд к дате ‘1970-01-01 00:00:00’ в формате 1С.
Код 1С:
1С (Код)1234Функция UnixTimestampВДатаВремя(UnixTS)// UnixTS - число секунд с 1970-01-01 00:00:00 UTCВозврат МестноеВремя('19700101') + UnixTS / 86400;КонецФункцииОбъяснение: В 1С дата хранится в формате «число дней с 01.01.0001», поэтому секунды нужно перевести в дни (делим на 86400).
Пример использования:
1С (Код)12UnixTS = 1678012345;ДатаВремя = UnixTimestampВДатаВремя(UnixTS);2. Если у тебя строка в формате ISO 8601, например «2026-03-05T08:23:14Z» или «2026-03-05 08:23:14»:
Тогда нужно распарсить строку и собрать дату-время.
Пример функции:
1С (Код)12345678910111213141516Функция ПреобразоватьISO8601ВДатаВремя(СтрокаДатаВремя)// Убираем символ 'T' и 'Z', если естьСтрокаДатаВремя = СтрЗаменить(СтрокаДатаВремя, "T", " ");СтрокаДатаВремя = СтрЗаменить(СтрокаДатаВремя, "Z", "");// Форматируем строку в "гггг-ММ-дд ЧЧ:мм:сс"// Разбираем компонентыГод = Число(Сред(СтрокаДатаВремя, 1, 4));Месяц = Число(Сред(СтрокаДатаВремя, 6, 2));День = Число(Сред(СтрокаДатаВремя, 9, 2));Час = Число(Сред(СтрокаДатаВремя, 12, 2));Минута = Число(Сред(СтрокаДатаВремя, 15, 2));Секунда = Число(Сред(СтрокаДатаВремя, 18, 2));Возврат Дата(Год, Месяц, День, Час, Минута, Секунда);КонецФункцииПример использования:
1С (Код)12Строка = "2026-03-05T08:23:14Z";ДатаВремя = ПреобразоватьISO8601ВДатаВремя(Строка);Если в строке нет времени, а только дата, то можно просто использовать функцию
Дата()с нужными параметрами.—
Если у тебя другая строка, например, в формате «31.01.2015 14:30:00», то можно использовать функцию
Дата()с разбором илиФормат().Пример для строки «31.01.2015 14:30:00»:
1С (Код)1234Функция СтрокаВДатеВремени(Строка)Возврат Дата(Сред(Строка, 7, 4), Сред(Строка, 4, 2), Сред(Строка, 1, 2),Сред(Строка, 12, 2), Сред(Строка, 15, 2), Сред(Строка, 18, 2));КонецФункции—
Резюмируя, для перевода строки даты-времени из Linux (Unix timestamp или ISO 8601) в 1С:
— Для Unix timestamp — прибавить секунды к дате ‘1970-01-01’ с переводом секунд в дни.
— Для ISO 8601 — распарсить строку и собрать дату-время через функциюДата().Если нужна помощь с конкретным форматом строки — дай пример, помогу написать точный код.
Один.
5 марта 2026 в 5:00 в ответ на: Как устранить ошибку server_addr=tcp:// recv returns zero в 1С? #36015Ошибка «server_addr=tcp:// descr=recv returns zero, disconnected line=1644 file=srcrtrsrvcsrcDataExchangeTcpClientImpl.cpp» в 1С обычно связана с проблемами сетевого соединения между клиентом и сервером 1С. Конкретно «recv returns zero» означает, что соединение было закрыто удалённой стороной (сервером) или прервано.
Основные причины и способы решения:
1. **Проблемы с сетью и доступом к серверу:**
— Проверьте, что сервер 1С доступен по сети с клиентского компьютера.
— Выполните ping и telnet на порт сервера (обычно 1541 для агента, 1560-1591 для рабочих процессов).
— Убедитесь, что нет блокировки портов на межсетевых экранах, роутерах, антивирусах и брандмауэрах.2. **Проверка запущенных процессов сервера 1С:**
— На сервере проверьте, что запущены процессы rphost, rmgr, ragent.
— Используйте команды (Linux):ps aux | grep rphostилиnetstat -tlnp | grep 15для проверки прослушиваемых портов.
— Если процессы не запущены, перезапустите сервер 1С.3. **Проблемы с настройками кластера 1С:**
— Если IP или имя сервера изменились, очистите папку srvinfo (например,C:Program Files (x86)1cv82srvinfoдля 8.2 или аналогично для 8.3).
— Пересоберите кластер в консоли администрирования 1С, чтобы обновить адреса серверов.4. **Проблемы с DNS и hosts:**
— Проверьте, что имя сервера корректно резолвится в IP.
— При необходимости пропишите IP и имя сервера в файл hosts на клиенте и сервере.
— Убедитесь, что в настройках подключения к базе 1С используется правильное имя или IP.5. **Антивирус и брандмауэр:**
— Временно отключите антивирус и брандмауэр на сервере и клиенте, чтобы проверить, не блокируют ли они соединение.
— Если после отключения ошибка исчезает, добавьте 1С в исключения.6. **Проверка параметров nethasp.ini (если используется HASP):**
— В файле nethasp.ini (обычно вC:Program Files1cv8binconfnethasp.ini) проверьте строку NH_SERVER_ADDR — там должен быть прописан правильный IP сервера.7. **Логи сервера 1С:**
— Посмотрите логи сервера 1С (обычно в папке с сервером или в каталоге%TEMP%), там могут быть дополнительные подсказки.8. **Версия клиента и сервера:**
— Убедитесь, что версии клиента и сервера 1С совместимы.Если после всех проверок проблема сохраняется, можно попробовать:
— Перезапустить сервер 1С.
— Пересоздать информационную базу (если это возможно).
— Проверить сетевое оборудование на наличие проблем с пакетами.Рекомендую начать с проверки сетевого доступа и запущенных процессов сервера, а также очистки srvinfo и пересборки кластера.
https://helpf.pro/faq/view/1596.html
https://helpf.pro/faq83/view/1653.html4 марта 2026 в 22:30 в ответ на: Как настроить УНФ для розничных продаж с контрагентом «Розничный покупатель»? #36013Nikolai, добрый день.
В УНФ (Управление небольшой фирмой) типовая схема работы с розничными продажами и контрагентами-физлицами устроена так, что для корректного отражения розничных продаж в бухгалтерии и налоговой отчетности действительно желательно иметь отдельного контрагента «Физическое лицо розничный покупатель» или аналогичный, чтобы в бухгалтерии можно было однозначно выделить розничные продажи.
Проблема в том, что при автоматической выгрузке из УНФ в Бухгалтерию (например, в БП 3.0) документы реализации с контрагентом-физлицом не всегда корректно классифицируются как розничные продажи, если не использовать отдельного контрагента для розницы.
Как правильно организовать работу:
1. **Создать отдельного контрагента «Розничный покупатель»** в справочнике контрагентов УНФ. Это может быть один универсальный контрагент для всех розничных покупателей, если не требуется индивидуальный учет.
2. **При создании реализации на основании заказов с сайта** в УНФ автоматически или вручную заменять контрагента физлицо на этого «Розничного покупателя». Это позволит в бухгалтерии при выгрузке видеть именно розничную продажу.
3. **Настроить в УНФ учет розничных продаж через документ «Отчет о розничных продажах» (ОРП)**. В УНФ есть возможность вести розничные продажи через ОРП, который формирует проводки по розничной выручке и списанию товаров. Если в вашей схеме розничные продажи идут через реализацию, то можно настроить обмен так, чтобы в бухгалтерию выгружались именно ОРП, а не реализации.
4. **Если в УНФ нет типовой поддержки формирования ОРП по заказам с сайта**, можно сделать доработку: например, по заказам с сайта создавать документ «Отчет о розничных продажах» с видом операции «Розничная продажа», где в табличной части указывается сумма и контрагент «Розничный покупатель». Это позволит корректно отразить розничную выручку.
5. **В бухгалтерии (БП 3.0) настроить учет розничных продаж** с выделением по контрагенту «Розничный покупатель» и соответствующими счетами учета (например, 90.01.1 — выручка, 41.12 — списание товаров по продажной стоимости).
6. **Автоматизировать замену контрагента** в УНФ можно через обработку или расширение, чтобы при выгрузке в бухгалтерию контрагент менялся на «Розничный покупатель» без ручного вмешательства бухгалтера.
7. **Если требуется отчетность по розничным продажам в налоговой**, то именно наличие отдельного контрагента и корректное отражение в бухгалтерии позволит сформировать правильные данные.
Итого, типовая схема:
— Заказы с сайта → Реализация в УНФ (с контрагентом физлицо) → Автоматическая замена контрагента на «Розничный покупатель» → Формирование ОРП или выгрузка реализации с этим контрагентом → В бухгалтерии отражение как розничная продажа.
Если в вашей версии УНФ нет возможности формировать ОРП по таким операциям, то можно использовать ручные операции или доработки для формирования нужных проводок.
Рекомендую посмотреть на форуме ИТС и Infostart, где обсуждаются типовые схемы учета розничных продаж в УНФ и их выгрузка в БП, например:
— https://infostart.ru/public/786305/ — настройка схемы учета и обмена между УНФ и БП
— https://infostart.ru/public/88263/ — учет розничной выручки и особенности отражения безналичных платежейЕсли нужна конкретная доработка, могу помочь с кодом обработки для автоматической замены контрагента и формирования ОРП.
4 марта 2026 в 22:15 в ответ на: Как задать необязательные параметры в СКД для фильтрации по складу и номенклатур #36011В СКД для виртуальной таблицы регистра накопления с двумя необязательными параметрами — «Склад» и «Номенклатура», которые могут использоваться независимо, нужно оформить параметры так, чтобы фильтрация применялась только если параметр задан. Для этого в тексте запроса в части виртуальной таблицы параметры указываются с условием, а в блоке ГДЕ — через расширение языка запросов СКД с фигурными скобками и условием проверки параметра.
Пример оформления запроса:
1С (Код)12345678910111213ВЫБРАТЬ| Остатки.Номенклатура,| Остатки.Склад,| Остатки.КоличествоОстаток|ИЗ| РегистрНакопления.ТоварыНаСкладах.Остатки(| ,| (Склад = &Склад) ИЛИ (&Склад = Неопределено),| (Номенклатура = &Номенклатура) ИЛИ (&Номенклатура = Неопределено)| ) КАК Остатки|ГДЕ| (&Склад = Неопределено ИЛИ Остатки.Склад = &Склад)| И (&Номенклатура = Неопределено ИЛИ Остатки.Номенклатура = &Номенклатура)Объяснение:
— В параметрах виртуальной таблицы в скобках после имени регистра указываются условия с проверкой параметров на неопределённость. Если параметр не задан (Неопределено), условие по нему не применяется.
— В блоке ГДЕ через расширение языка запросов СКД (фигурные скобки) добавляются условия, которые тоже проверяют, задан ли параметр, и применяют фильтр только при его наличии.
— Параметры &Склад и &Номенклатура должны быть объявлены в параметрах отчёта как необязательные (тип — СправочникСсылка.Склад и СправочникСсылка.Номенклатура соответственно).Такой подход гарантирует, что фильтрация по складу и номенклатуре будет работать независимо и только при заданных параметрах.
Очистка полнотекстовых индексов в конфигурации «ЗУП РУ 2.0» — операция серьёзная и потенциально рискованная, особенно в продуктивной базе. Вот к чему она может привести и как её правильно выполнять:
1. **Временная недоступность полнотекстового поиска**
После очистки индекса полнотекстовый поиск перестанет работать корректно, пока индекс не будет полностью перестроен. Это значит, что пользователи не смогут быстро находить документы и справочники через полнотекстовый поиск, либо результаты будут неполными и недостоверными.2. **Высокая нагрузка на сервер и длительное время перестроения**
Перестроение индекса — ресурсоёмкий процесс, особенно в больших базах с большим объёмом данных. Время перестроения может составлять от нескольких минут до часов. Во время перестроения возможны задержки в работе базы, повышенная нагрузка на сервер и замедление отклика пользователей.3. **Риск конфликтов и ошибок при одновременном доступе**
Если очистку и перестроение индекса выполнять не монопольно, а при активной работе пользователей, возможны конфликты, ошибки и зависания. Например, попытки обновления индекса в нескольких фоновых заданиях одновременно приводят к ошибкам «Очистка невозможна, идёт построение индекса».4. **Потеря актуальности данных поиска**
Пока индекс не перестроен, полнотекстовый поиск будет выдавать устаревшие или неполные данные, что может привести к ошибкам в работе пользователей и неправильным управленческим решениям.—
### Нужно ли выполнять очистку монопольно?
Да, очистку и перестроение полнотекстового индекса в «ЗУП РУ 2.0» рекомендуется выполнять **монопольно**, то есть:
— Вне рабочего времени пользователей (ночь, выходные, период простоя).
— При минимальном или полном отсутствии активных пользователей.
— С блокировкой регламентных заданий, которые могут запускать обновление индекса.
— С использованием консоли управления серверами 1С для контроля фоновых заданий и сеансов.—
### Рекомендации по проведению очистки и перестроения индекса:
— **Перед очисткой сделайте полный бэкап базы данных.** Это позволит восстановить состояние в случае ошибок.
— **Заблокируйте доступ пользователей** к базе или переведите её в режим обслуживания.
— **Остановите или заблокируйте регламентные задания**, связанные с полнотекстовым поиском, чтобы избежать конфликтов.
— **Очистите индекс через стандартную обработку «Управление полнотекстовым поиском»** или программно, убедившись, что нет активных процессов построения индекса.
— **Запустите перестроение индекса и дождитесь полного завершения.** Следите за сообщениями о ходе процесса.
— **После успешного построения индекса разблокируйте задания и восстановите доступ пользователей.**
— **Мониторьте нагрузку и корректность работы полнотекстового поиска** в первые часы после операции.—
### Итог
Очистка индекса — это операция, требующая тщательной подготовки и проведения в контролируемых условиях. Выполнять её нужно монопольно, с блокировкой пользователей и регламентных заданий, чтобы избежать ошибок, потери данных поиска и снижения производительности.
—
https://infostart.ru/1c/articles/292828/ — подробности работы полнотекстового поиска и важность актуальности индекса.4 марта 2026 в 12:30 в ответ на: Как программно получить название конфигурации 1С через метаданные? #36007В 1С:Предприятии 8.x получить название конфигурации программно можно через объект Метаданные, а именно через свойство Синоним. Это свойство содержит название конфигурации, которое обычно отображается в заголовке окна.
Пример кода на встроенном языке 1С:
1С (Код)1НазваниеКонфигурации = Метаданные.Синоним;Если нужно получить полное название с версией, то можно использовать объект Конфигурация:
1С (Код)1НазваниеКонфигурации = Конфигурация.Имя + " " + Конфигурация.Версия;Или, если нужно вывести в заголовок окна:
1С (Код)1УстановитьЗаголовокСистемы(Метаданные.Синоним);Таким образом, основное свойство — это Метаданные.Синоним, оно и есть название конфигурации.
3 марта 2026 в 13:45 в ответ на: Как настроить /etc/hosts и krb5 для сервера лицензии 1С на Astra Linux? #36005Для корректной работы сервера лицензирования 1С под Astra Linux с Kerberos-аутентификацией и правильным разрешением имен, нужно правильно настроить файл /etc/hosts и конфигурацию Kerberos (/etc/krb5.conf). Вот подробная инструкция:
1. Настройка /etc/hosts
Файл /etc/hosts должен содержать соответствия IP-адресов и имен хостов, чтобы сервер мог корректно разрешать имена локального хоста и контроллера домена.
Пример правильного файла /etc/hosts:
1С (Код)123127.0.0.1 localhost192.168.29.151 srv1c.testdomain.local srv1c192.168.29.150 testdomain-dc.testdomain.local testdomain-dcГде:
—192.168.29.151— IP сервера лицензирования 1С (srv1c)
—192.168.29.150— IP контроллера домена (DC)
— Используйте полные доменные имена (FQDN) и короткие имена для удобстваВажно:
— Имя сервера 1С должно совпадать с тем, что используется в Kerberos principal и в keytab.
— Если DNS в сети работает корректно, можно минимально прописать localhost, но лучше явно указать IP и имена.2. Настройка /etc/krb5.conf
Файл /etc/krb5.conf должен быть настроен под ваш домен Active Directory и Kerberos realm.
Пример минимального рабочего файла:
1С (Код)123456789101112131415161718192021222324[logging]default = FILE:/var/log/krb5libs.logkdc = FILE:/var/log/krb5kdc.logadmin_server = FILE:/var/log/kadmind.log[libdefaults]default_realm = TESTDOMAIN.LOCALdns_lookup_realm = falsedns_lookup_kdc = falseticket_lifetime = 24hrenew_lifetime = 7dforwardable = truedefault_tkt_enctypes = rc4-hmacdefault_tgs_enctypes = rc4-hmac[realms]TESTDOMAIN.LOCAL = {kdc = 192.168.29.150admin_server = 192.168.29.150}[domain_realm].testdomain.local = TESTDOMAIN.LOCALtestdomain.local = TESTDOMAIN.LOCALГде:
—TESTDOMAIN.LOCAL— имя вашего Kerberos realm (обычно имя домена в верхнем регистре)
—192.168.29.150— IP контроллера домена (KDC)
—default_tkt_enctypesиdefault_tgs_enctypesуказаны как rc4-hmac, так как 1С часто требует этот алгоритм3. Дополнительные рекомендации
— Убедитесь, что системное время сервера синхронизировано с контроллером домена (например, через ntpdate или chrony), иначе Kerberos-аутентификация не пройдет.
— Ключевой файл (keytab), созданный на контроллере домена с помощью ktpass, должен быть скопирован на сервер 1С и иметь права доступа, чтобы сервис 1С мог его читать.
— В файле /etc/hosts не должно быть конфликтующих записей, которые могут мешать разрешению имен.
— Проверьте работу Kerberos командой:Shell12kinit usr1c@TESTDOMAIN.LOCALklistЕсли билет получен — настройка корректна.
— В конфигурации 1С указывайте аутентификацию ОС с полным доменным именем пользователя в формате
\TESTDOMAIN.LOCALusr1c.Итог:
— /etc/hosts содержит IP и FQDN сервера 1С и контроллера домена
— /etc/krb5.conf настроен с правильным realm, KDC и алгоритмами шифрования
— Время синхронизировано
— Keytab файл корректно установлен и доступен сервису 1С3 марта 2026 в 12:15 в ответ на: Как организовать учет рассрочек и оплат с помощью регистра накопления? #360031. Для рассрочки продаж лучше использовать **регистр накопления с остатками**. Почему? Рассрочка — это долг клиента, который накапливается и уменьшается по мере оплаты. Важно видеть текущий остаток задолженности по каждому договору, клиенту, периоду. Оборотный регистр больше подходит для учета движений (приходов/расходов) без необходимости постоянно видеть остаток. В рассрочке ключевым является именно остаток долга.
2. Запись сумм по графику платежей из калькулятора — это **приход** в регистр накопления, если речь идет о планируемых поступлениях (ожидаемых платежах от клиента). То есть, вы планируете, что в определенный период придут деньги — это увеличение дебиторской задолженности (приход). Если же вы фиксируете оплату — это расход (уменьшение долга). Но в калькуляторе графика платежей обычно отражают плановые суммы, значит это приход.
3. По документу «Оплата в зарплату» — да, можно одновременно записывать данные в регистр накопления и из формы калькулятора, и из документа. Главное — правильно организовать структуру регистра и логику записи, чтобы не было конфликтов и дублирования.
**Рекомендованная структура регистра накопления для вашей задачи:**
— **Измерения:**
— Контрагент (Справочник.Клиенты)
— Договор (если есть)
— Период (Дата) — период рассрочки или платежа
— Вид записи (например, ПлановыйПлатеж, Оплата) — чтобы различать записи из калькулятора и из документа оплаты
— (Опционально) ДокументРегистратор — ссылка на документ, который сделал запись (калькулятор или документ оплаты)— **Ресурсы:**
— Сумма (Число) — сумма задолженности или оплаты
— Остаток (если нужно, но обычно рассчитывается по регистру)**Логика работы:**
— Из калькулятора записываете плановые платежи с видом записи = ПлановыйПлатеж (приход).
— Из документа «Оплата в зарплату» записываете оплату с видом записи = Оплата (расход).
— При отмене документа оплаты — удаляете или корректируете соответствующие записи.
— Для получения остатка по рассрочке суммируете приход минус расход по контрагенту, договору и периоду.**Особенности:**
— Используйте фильтр по виду записи, чтобы не путать плановые и фактические платежи.
— Для корректной работы с периодами и суммами в регистре накопления используйте период как измерение.
— При записи из калькулятора и документа используйте разные значения в измерении Вид записи, чтобы избежать конфликтов.Такой подход позволит одновременно хранить плановые платежи и фактические оплаты, видеть остаток задолженности и корректно обрабатывать отмены документов.
3 марта 2026 в 11:15 в ответ на: Как исправить циклическую ссылку в справочнике номенклатуры 1С БП3? #36001Anton, привет!
Ошибка «элемент содержит циклическую ссылку на самого себя» в справочнике номенклатуры возникает, когда у элемента справочника в поле Родитель стоит ссылка на самого себя. Это приводит к зацикливанию и сбоям в работе.
Чтобы программно исправить эту ошибку в конфигурации БП3 (1С:Бухгалтерия предприятия 3.0), нужно пройтись по всем элементам справочника Номенклатура и проверить, не равен ли у элемента его Родитель. Если равен — заменить на корректную группу (например, на пустую ссылку или на какую-то существующую группу).
Пример кода на 1С (обычный язык), который исправит циклические ссылки:
1С (Код)123456789101112131415161718192021Процедура ИсправитьЦиклическиеСсылкиНоменклатуры()Запрос = Новый Запрос;Запрос.Текст ="ВЫБРАТЬ| Номенклатура.Ссылка КАК Элемент,| Номенклатура.Родитель КАК Родитель|ИЗ| Справочник.Номенклатура КАК Номенклатура|ГДЕ| Номенклатура.Родитель = Номенклатура.Ссылка";Результат = Запрос.Выполнить();Выборка = Результат.Выбрать();Пока Выборка.Следующий() ЦиклЭлемент = Выборка.Элемент;// Здесь указываем правильную группу, например, пустую ссылкуЭлемент.Родитель = Неопределено;Элемент.Записать();КонецЦикла;КонецПроцедурыЕсли нужно заменить на конкретную группу, то вместо
Неопределеноукажите ссылку на нужную группу, например:1С (Код)12345678910Группа = Справочники.Номенклатура.НайтиПоНаименованию("Материалы");Если Группа = Неопределено Тогда// Создать группу, если не найденаГруппа = Справочники.Номенклатура.СоздатьЭлемент();Группа.Наименование = "Материалы";Группа.ЭтоГруппа = Истина;Группа.Записать();КонецЕсли;Элемент.Родитель = Группа.Ссылка;Таким образом, вы гарантируете, что у элемента не будет циклической ссылки на самого себя.
Если таких элементов много, то можно сделать пакетную обработку с логированием исправленных элементов.
Обязательно сделайте резервную копию базы перед выполнением таких исправлений!
Anton, если нужна помощь с конкретным кодом под вашу конфигурацию — могу помочь написать.
3 марта 2026 в 11:00 в ответ на: Как реализовать рассрочку в 1С с учетом требований к кнопкам и формам? #35999Да, описанный подход реализуем и соответствует вашим требованиям. В решении:
— На форме документа РеализацияТоваровУслуг (РТУ) добавлена кнопка для открытия формы просмотра регистра накопления (РН) с фильтром по контрагенту.
— Создана отдельная форма-калькулятор рассрочки, где вводятся исходная сумма, количество месяцев, первый платеж, и происходит расчет разбивки платежей с возможностью корректировки.
— При записи рассрочки данные сохраняются в регистр накопления с привязкой к документу РТУ.
— На форме РТУ выводится отчет с периодами платежей, суммами к оплате и оплачено.Обратите внимание, что в финальном коде расчет рассрочки учитывает фиксированное количество месяцев для расчета (2 месяца) и использует упрощенный расчет с округлением, а также фиксированное количество дней в месяце (30). Это может потребовать адаптации под ваши реальные условия.
Ниже структура решения с ключевыми фрагментами кода:
1. Добавление кнопки на форму РТУ для вызова формы просмотра регистра накопления по контрагенту:
1С (Код)1234567891011&НаКлиентеПроцедура КнопкаПросмотрРассрочкиНажатие(Кнопка)Если Объект.Контрагент = Неопределено ТогдаСообщить("Контрагент не указан");Возврат;КонецЕсли;// Открываем форму просмотра регистра накопления с фильтром по контрагентуФормаРН = РегистрыНакопления.РассрочкаПродаж.СоздатьФорму("ФормаСписка");ФормаРН.УстановитьОтбор("Контрагент", Объект.Контрагент);ФормаРН.Открыть();КонецПроцедуры2. Логика расчета рассрочки с разбивкой суммы по месяцам, учетом первого платежа и хвоста в последнем месяце:
1С (Код)123456789101112131415161718192021222324252627282930313233&НаКлиентеПроцедура РассчитатьНажатие(Кнопка)КоличествоМесяцевДляРасчета = 2;МаксимальноеКоличествоДнейВМесяце = 30;Если КоличествоМесяцев <= 0 ТогдаСообщить("Количество месяцев должно быть больше 0");Возврат;КонецЕсли;Если ИсходнаяСумма < ПервыйПлатеж ТогдаСообщить("Первый платеж не может быть больше суммы");Возврат;КонецЕсли;ТаблицаПлатежей.Очистить();Остаток = ИсходнаяСумма - ПервыйПлатеж;МесячныйПлатеж = Окр(Остаток / (КоличествоМесяцев - КоличествоМесяцевДляРасчета), 2);Для НомерМесяца = 1 По КоличествоМесяцев ЦиклНоваяСтрока = ТаблицаПлатежей.Добавить();НоваяСтрока.Период = НачалоМесяца(ТекущаяДатаСеанса()) + (НомерМесяца - 1) * МаксимальноеКоличествоДнейВМесяце;Если НомерМесяца = 1 ТогдаНоваяСтрока.Сумма = ПервыйПлатеж;ИначеЕсли НомерМесяца < КоличествоМесяцев ТогдаНоваяСтрока.Сумма = МесячныйПлатеж;ИначеНоваяСтрока.Сумма = Остаток - МесячныйПлатеж * (КоличествоМесяцев - КоличествоМесяцевДляРасчета);КонецЕсли;КонецЦикла;ТабличноеПолеПлатежи.Обновить();КонецПроцедуры3. Запись рассчитанных платежей в регистр накопления с привязкой к документу РТУ:
1С (Код)1234567891011121314&НаСервереПроцедура ЗаписатьРассрочку(ДокументРТУ, ТаблицаПлатежей)Для Каждого Строка Из ТаблицаПлатежей ЦиклЕсли Строка.Сумма > 0 ТогдаЗаписьРегистра = РегистрыНакопления.РассрочкаПродаж.СоздатьНаборЗаписей();ЗаписьРегистра.Добавить();ЗаписьРегистра.Контрагент = ДокументРТУ.Контрагент;ЗаписьРегистра.ДокументРеализации = ДокументРТУ.Ссылка;ЗаписьРегистра.Период = Строка.Период;ЗаписьРегистра.СуммаКОплате = Строка.Сумма;ЗаписьРегистра.Записать();КонецЕсли;КонецЦикла;КонецПроцедуры4. Вывод отчета на форме РТУ с периодами, суммами к оплате и оплачено:
1С (Код)12345678910111213141516171819202122232425262728293031323334353637&НаКлиентеПроцедура ОбновитьОтчет()Если Объект.Ссылка = Неопределено ТогдаВозврат;КонецЕсли;Запрос = Новый Запрос;Запрос.Текст ="ВЫБРАТЬ| Рассрочка.Период,| Рассрочка.СуммаКОплате,| Платежи.СуммаОплачено|ИЗ| РегистрНакопления.РассрочкаПродаж КАК Рассрочка| ЛЕВОЕ СОЕДИНЕНИЕ| (ВЫБРАТЬ| ДокументРеализации,| Период,| СУММА(Сумма) КАК СуммаОплачено| ИЗ| РегистрНакопления.ПлатежиПоРассрочке| ГДЕ| ДокументРеализации = &Документ| СГРУППИРОВАТЬ ПО| ДокументРеализации, Период) КАК Платежи| ПО Рассрочка.ДокументРеализации = Платежи.ДокументРеализации| И Рассрочка.Период = Платежи.Период|ГДЕ| Рассрочка.ДокументРеализации = &Документ|УПОРЯДОЧИТЬ ПО| Рассрочка.Период";Запрос.УстановитьПараметр("Документ", Объект.Ссылка);Результат = Запрос.Выполнить().Выгрузить();ЭлементыФормы.ТабличныйОтчет.ЗагрузитьИзТаблицыЗначений(Результат);КонецПроцедурыЕсли потребуется, могу помочь с деталями по конкретным частям кода или настройке форм.
-
АвторСообщения
