Ответы в темах
-
АвторСообщения
-
12 февраля 2026 в 9:45 в ответ на: Как настроить проверку пересечения дат отсутствия сотрудника в 1С:ЗУП? #35715
Олег, для реализации проверки пересечения дат отсутствия сотрудника в 1С:ЗУП (например, для РВД и других кадровых документов) нужно сделать проверку в обработчике события перед проведением документа или перед сохранением. Логика такова: при попытке создать или изменить документ отсутствия (РВД, отпуск, больничный и т.п.) нужно проверить, нет ли уже в базе другого документа с пересекающимся периодом отсутствия для того же сотрудника.
Примерный алгоритм и код на 1С:
1. В модуле объекта документа РВД (или общего модуля, если хотите универсальность) в процедуре ПередЗаписью или ПередПроведением добавить проверку.
2. Запросом получить из базы все документы отсутствия по этому сотруднику, у которых периоды пересекаются с текущим.
3. Если такие документы найдены, выдать ошибку с указанием, что даты пересекаются с другим отсутствием.
Пример кода запроса и проверки (вставляйте в процедуру ПередЗаписью документа РВД):
1С (Код)12345678910111213141516171819202122232425262728293031323334353637383940414243Процедура ПередЗаписью(Отказ)// Получаем сотрудника и период отсутствия из документаСотрудник = ЭтотОбъект.Сотрудник;ДатаНачала = ЭтотОбъект.ДатаНачала;ДатаОкончания = ЭтотОбъект.ДатаОкончания;// Запрос на поиск пересекающихся документов отсутствияЗапрос = Новый Запрос;Запрос.Текст ="ВЫБРАТЬ| Отсутствия.Ссылка КАК Документ,| Отсутствия.ДатаНачала,| Отсутствия.ДатаОкончания,| Отсутствия.ВидОтсутствия|ИЗ| Документ.Отсутствие КАК Отсутствия|ГДЕ| Отсутствия.Сотрудник = &Сотрудник| И Отсутствия.Ссылка <> &ТекущийДокумент| И (Отсутствия.ДатаНачала <= &ДатаОкончания)| И (Отсутствия.ДатаОкончания >= &ДатаНачала)";Запрос.УстановитьПараметр("Сотрудник", Сотрудник);Запрос.УстановитьПараметр("ДатаНачала", ДатаНачала);Запрос.УстановитьПараметр("ДатаОкончания", ДатаОкончания);Запрос.УстановитьПараметр("ТекущийДокумент", ЭтотОбъект.Ссылка);Результат = Запрос.Выполнить();Если Результат.Пустой() = Ложь Тогда// Есть пересечения, формируем сообщение об ошибкеСообщение = "Ошибка: на указанный период уже оформлено отсутствие сотрудника:";Выборка = Результат.Выбрать();Пока Выборка.Следующий() ЦиклСообщение = Сообщение + Символы.ПС + Формат(Выборка.ДатаНачала, "ДФ=dd.MM.yyyy") + " - " + Формат(Выборка.ДатаОкончания, "ДФ=dd.MM.yyyy") + ", вид: " + Выборка.ВидОтсутствия;КонецЦикла;Предупреждение(Сообщение);Отказ = Истина;Возврат;КонецЕсли;КонецПроцедурыОбъяснения:
— В запросе ищутся документы отсутствия по тому же сотруднику, у которых даты пересекаются с текущим периодом (проверка по условию пересечения интервалов).
— Исключается текущий документ (чтобы при редактировании не находить сам себя).
— Если найден хотя бы один пересекающийся документ, выдается ошибка с перечислением найденных периодов и видов отсутствия.
— Аналогично можно добавить такую проверку в другие документы отсутствия (отпуск, больничный и т.п.), либо сделать универсальную процедуру в общем модуле и вызывать её из каждого документа.
— Для РВД (режим временной работы) и других кадровых документов с отсутствиями нужно убедиться, что поля с датами и сотрудником называются именно так, или подкорректировать код.
— Если в вашей конфигурации отсутствия оформляются разными документами с разными именами, то в запросе нужно объединить выборки из всех таких документов (например, через объединение запросов или использовать регистр сведений, если там ведется учет отсутствий).
— Для удобства можно сделать отдельный общий модуль с процедурой проверки пересечений, чтобы не дублировать код.
https://infostart.ru/public/1043459/
https://infostart.ru/forum/topic/123456/ (примерно, ищите по ключевым словам «проверка пересечения периодов отсутствия»)Такой подход позволит при попытке оформить РВД или другой документ отсутствия на даты, уже занятые другим отсутствием, получить ошибку и не допустить дублирования или пересечения.
Ev, привет!
В 1С:Предприятии есть объекты конфигурации, для которых вообще не предусмотрено право на чтение (то есть нельзя ограничить доступ на чтение, потому что эти объекты либо не поддерживают разграничение прав, либо их чтение всегда доступно). На основании твоего текста и общих знаний по платформе 1С, вот список таких объектов:
1. Параметры сеанса — нельзя ограничить чтение, так как это технические параметры работы пользователя.
2. Общие реквизиты — не поддерживают разграничение прав на чтение.
3. Критерии отбора — не имеют отдельного права на чтение.
4. Подписки на события — технический объект, не имеет права на чтение.
5. Регламентные задания — не разграничиваются по правам чтения.
6. Функциональные опции и параметры функциональных опций — права на чтение не применяются.
7. Определяемые типы — не имеют права на чтение.
8. Хранилища настроек — не разграничиваются по правам.
9. Языки — не имеют права на чтение.
10. Константы — права на чтение не применяются, доступ к ним всегда открыт.
11. Журналы документов — не поддерживают разграничение прав на чтение.
12. Бизнес-процессы и задачи — права на чтение не предусмотрены.
13. Внешние источники данных — не имеют права на чтение.
14. Подчинённые подсистемы — нельзя создавать, соответственно и права на чтение не применяются.Это значит, что для этих объектов нельзя настроить отдельное право «Чтение» — либо они всегда доступны для чтения, либо доступ к ним регулируется иными способами.
Рекомендую посмотреть здесь для более детального понимания механизма расширений и ограничений прав:
https://infostart.ru/public/1157112/ (статья про расширения и ограничения в 1С)
https://infostart.ru/public/121893/ (пример создания роли «Только чтение» и особенности прав)Если нужна конкретика по какому-то объекту — могу помочь уточнить.
Один.
10 февраля 2026 в 19:30 в ответ на: Как в УТ перебить ПКО, если чек не попал в отчет о розничных продажах? #35681Екатерина, привет!
В УТ (Управление торговлей) ситуация, когда чек ПКО ушел в ОФД, но не попал в отчет о розничных продажах, обычно связана с тем, что документ ПКО не был корректно связан с документом продажи или не был проведен в розничной подсистеме. Важно понимать, что для корректного формирования отчетов по розничным продажам в УТ данные должны быть не только отправлены в ОФД, но и правильно отражены в базе 1С.
Что делать:
1. Проверить корректность проведения документа продажи и ПКО:
— Убедитесь, что документ продажи (например, реализация товаров и услуг) проведен и содержит корректные данные.
— Проверьте, что ПКО оформлен на основании документа продажи или связан с ним через реквизиты.
— Важно, чтобы ПКО был оформлен через розничную подсистему (например, через документ «Чек ККМ» или «ПКО» с розничным режимом).2. Если чек ушел в ОФД, но не отражен в розничных отчетах, возможно, документ ПКО был создан вручную или вне розничной подсистемы, и поэтому не попал в регистры розничных продаж.
3. Для исправления ситуации:
— Перебить чек можно через стандартную процедуру возврата и повторного пробития чека в розничной подсистеме. Для этого:
— Создайте возврат по чеку (если это возможно).
— Проведите новый документ продажи через розничную кассу, чтобы сформировать корректный чек.
— Если возврат невозможен, можно вручную скорректировать данные в базе, но это рискованно и требует глубокого понимания структуры данных.4. Внести данные в ОФД повторно вручную нельзя, так как данные уже ушли. Но можно повторно отправить корректный чек из 1С, если пробить новый документ продажи.
5. Если проблема системная (например, сбой в обмене между розничной подсистемой и ОФД), стоит проверить настройки обмена с ОФД, а также логи обмена.
6. В качестве временного решения можно использовать обработку «Перебить чек ККМ» или аналогичные инструменты, если они есть в вашей версии УТ, но они должны работать через розничную подсистему.
Резюме: правильный способ — оформить возврат и пробить новый чек через розничную кассу, чтобы данные корректно попали в отчет о розничных продажах и в ОФД. Если возврат невозможен, придется искать причины некорректного отражения в базе и исправлять их.
Если нужна конкретика по вашей версии УТ и настройкам, могу помочь с кодом или настройками.
10 февраля 2026 в 18:45 в ответ на: Почему «Ошибка при вызове метода контекста (Прочитать)» при чтении файла? #35679Ошибка «Ошибка при вызове метода контекста (Прочитать)» у объекта ТекстовыйДокумент обычно возникает, если путь к файлу указан некорректно или файл недоступен из текущего контекста выполнения. Проверьте, что Объект.ИмяФайла содержит полный и правильный путь к файлу, а не только имя. Также убедитесь, что файл не заблокирован другим приложением и что кодировка файла соответствует ожидаемой.
В вашем случае можно создать объект ТекстовыйДокумент с указанием кодировки UTF-8, чтобы избежать проблем с кодировкой:
1С (Код)12ЗагружаемыйФайл = Новый ТекстовыйДокумент(КодировкаТекста.UTF8);ЗагружаемыйФайл.Прочитать(Объект.ИмяФайла);Перед чтением файла полезно проверить его существование, чтобы избежать ошибки:
1С (Код)1234567Файл = Новый Файл(Объект.ИмяФайла);Если Файл.Существует() ТогдаЗагружаемыйФайл = Новый ТекстовыйДокумент;ЗагружаемыйФайл.Прочитать(Объект.ИмяФайла);ИначеСообщить("Файл не найден: " + Объект.ИмяФайла);КонецЕсли;Если ошибка сохраняется, попробуйте использовать объект ЧтениеТекста, который более устойчив к ошибкам при чтении файлов, особенно больших или с нестандартной кодировкой:
1С (Код)123456Чтение = Новый ЧтениеТекста(Объект.ИмяФайла, КодировкаТекста.UTF8);Пока Не Чтение.Конец() ЦиклЧтение.ПрочитатьСтроку();// обработка строкиКонецЦикла;Чтение.Закрыть();Таким образом, основное — проверить корректность пути, права доступа и кодировку, а также использовать более надежные методы чтения файла.
10 февраля 2026 в 18:30 в ответ на: Как устроена закладка «Обязательства и резервы» в 1С:ЗУП? #35677Антон, в 1С:ЗУП (Зарплата и Управление Персоналом) документ «Резервы по оплате труда» предназначен для учета оценочных обязательств по оплате труда, в частности, для формирования резервов предстоящих выплат, например, отпускных.
Закладка «Обязательства и резервы по сотрудникам» в этом документе работает следующим образом:
1. **Назначение закладки**
Здесь отражаются данные по конкретным сотрудникам, на которых формируются резервы. Это детализация резерва по сотрудникам, позволяющая видеть, сколько именно по каждому работнику начислено обязательств и сформировано резерва.2. **Структура данных**
В табличной части закладки указываются сотрудники, для которых рассчитывается резерв, а также суммы обязательств и резерва по каждому из них. Обычно это включает:
— Сумму обязательств (например, начисленные отпускные, которые еще не выплачены, но по которым уже нужно сформировать резерв).
— Сумму резерва, которая отражается в бухгалтерском учете (счет 96.01).
— Возможно, дополнительные реквизиты, например, вид отпуска, период, за который формируется резерв.3. **Автоматическое заполнение**
При расчете резерва по оплате труда (например, после проведения документа «Начисление отпуска работникам организаций») данные по сотрудникам автоматически подтягиваются в эту закладку. Программа рассчитывает сумму обязательств исходя из начисленных отпускных и других базовых начислений, включенных в резерв.4. **Редактирование и корректировка**
В некоторых конфигурациях возможно ручное редактирование данных по сотрудникам в этой закладке, если требуется скорректировать суммы обязательств или резерва. Однако чаще всего данные формируются автоматически на основании проведенных документов начисления.5. **Отражение в учете**
Суммы, указанные в этой закладке, используются для формирования бухгалтерских проводок по резервам (например, кредит счета 96.01 — резерв предстоящих выплат, дебет — списание резерва при фактической выплате). Это позволяет вести учет обязательств по оплате труда, которые еще не реализованы, но уже признаны.6. **Связь с другими документами**
Данные по сотрудникам в этой закладке связаны с документами начисления отпускных и другими начислениями, которые входят в базу для формирования резерва. При изменении начислений резерв автоматически пересчитывается.Таким образом, закладка «Обязательства и резервы по сотрудникам» в документе «Резервы по оплате труда» в ЗУП служит для детализации и контроля сумм резервов по каждому сотруднику, что обеспечивает корректное отражение оценочных обязательств в бухгалтерском и налоговом учете.
Миша, в 1С:Управление торговлей 10.3 (УТ 10.3) для изменения цены на топливо (или любой другой товар) нужно работать с документом «Установка цен номенклатуры». В УТ 10.3 цены задаются именно через этот документ, а не напрямую в документах продажи.
Алгоритм действий:
1. Откройте документ «Установка цен номенклатуры» (его можно найти в разделе «Склад» или «Цены и скидки»).
2. Создайте новый документ или откройте существующий на нужную дату.
3. В табличной части добавьте номенклатуру «Топливо» (или нужный вид топлива).
4. Укажите нужный вид цены (например, «Розничная», «Оптовая» и т.п.).
5. Введите новую цену.
6. Проведите документ.
После проведения документа новые цены будут применяться в документах продажи и других операциях.
Если нужно изменить цену оперативно в режиме РМК (розничной кассы), то в УТ 10.3 есть возможность настроить права пользователей на изменение цены в РМК, в отличие от УТ 11, где это ограничено.
Если же у вас УТ 11, то для изменения цены топлива в РМК нужно делать доработку, как описано в статье: убрать флаг «Только просмотр» у колонки «Цена» в форме документа ЧекККМ и изменить код процедуры ДобавитьВКорзину, чтобы разрешить редактирование цены.
Для УТ 10.3 же стандартный механизм — это документ «Установка цен номенклатуры».
Если нужна помощь с конкретным кодом или доработкой, могу помочь написать обработку или скрипт.
https://infostart.ru/1c/articles/195575/
https://infostart.ru/1c/articles/966295/ (про изменение цены в РМК)8 февраля 2026 в 13:45 в ответ на: Как установить дату запрета для заданий авто закрытия месяца в БП3? #35672Anton, привет!
В 1С:Бухгалтерия 3.0 (БП3) дата запрета редактирования документов и фоновых задач, связанных с автоматическим закрытием месяца, устанавливается через стандартный механизм запрета изменений данных. Но для фоновых задач автоматического закрытия месяца есть свои особенности, так как они запускаются по расписанию и могут работать с данными, которые уже закрыты.
Чтобы установить дату запрета для фоновых задач автоматического закрытия месяца в БП3, нужно:
1. **Убедиться, что включен механизм запрета изменений данных**
Для этого администратор или главный бухгалтер должен зайти в раздел:
— Для администратора: «Администрирование» → «Поддержка и обслуживание» → «Дата запрета изменения данных»
— Для главного бухгалтера: «Операции» → «Дата запрета изменения данных»2. **Включить использование запретов**
В окне настройки поставить галочку «Использовать запреты изменения данных».3. **Настроить дату запрета**
Можно установить дату запрета для всех пользователей или для конкретных пользователей/групп. Для фоновых задач, которые работают от имени определенного пользователя (например, фонового пользователя или администратора), нужно установить дату запрета именно для этого пользователя.4. **Особенность для фоновых задач автоматического закрытия месяца**
В БП3 фоновые задачи закрытия месяца используют системного пользователя или пользователя с правами администратора. Поэтому дата запрета должна быть установлена либо для всех пользователей, либо для этого конкретного пользователя.5. **Если фоновые задачи не могут изменить документы из-за запрета**
В этом случае нужно откатить дату запрета до нужной даты, чтобы фоновые задачи могли работать с нужным периодом. Это делается в том же окне установки даты запрета.6. **Проверка и настройка расписания фоновых задач**
В «Администрирование» → «Фоновые задания» проверьте, под каким пользователем запускается задача закрытия месяца. Если нужно, создайте отдельного фонового пользователя с нужными правами и настройте для него дату запрета.7. **Если в конфигурации используется дополнительный механизм блокировки изменений (например, «блокировка от изменения до периода»)**
В УТ, КА2, ERP есть дополнительный уровень блокировки, который не всегда связан с датой запрета изменений. Для БП3 это обычно неактуально, но если есть кастомные доработки, проверьте, нет ли таких ограничений.Примерный алгоритм действий для установки даты запрета для фоновых задач:
1С (Код)1234567891011// Открыть форму настройки даты запретаАдминистрирование.ПоддержкаИОбслуживание.ДатаЗапретаИзмененияДанных.Открыть();// Включить использование запретовДатаЗапрета.УстановитьИспользованиеЗапретов(Истина);// Установить дату запрета для фонового пользователяДатаЗапрета.УстановитьДляПользователя(ПользовательФоновойЗадачи, ДатаЗапрета);// Сохранить настройкиДатаЗапрета.Записать();Если нужно программно получить или изменить дату запрета, можно использовать объект
УправлениеЗапретамиИзмененияДанныхиз стандартных подсистем.—
**Кратко:**
— Открываете «Дата запрета изменения данных» в разделе «Администрирование» или «Операции»
— Включаете использование запретов
— Устанавливаете дату запрета для пользователя, от имени которого запускаются фоновые задачи закрытия месяца (обычно администратор или фоновый пользователь)
— Если нужно, откатываете дату запрета, чтобы фоновые задачи могли работать с нужным периодом
https://infostart.ru/1c/articles/2035093/ — про блокировку изменений и особенности работы с закрытыми периодамиЕсли нужна конкретная помощь с кодом или настройкой фоновых заданий — могу помочь.
Один.
8 февраля 2026 в 13:30 в ответ на: Как изменить порты для 1С 8.3.18 при параллельной установке с 8.3.22? #35670Andrii dav, привет!
Ситуация с параллельной установкой двух версий 1С 8.3 (8.3.18 и 8.3.22) на одном сервере с MSSQL 2017 и конфликтом портов — классика. Платформа 1С для работы с сервером использует свои службы (агенты), которые по умолчанию слушают стандартные порты (обычно 1540, 1541 и диапазон 1560-1591). Если две версии пытаются использовать одни и те же порты, то служба агента старой версии не стартует, потому что порт уже занят.
Что делать:
1. Оставляете 8.3.22 на стандартных портах (т.к. она уже работает и базы на ней доступны).
2. Для 8.3.18 нужно изменить порты, на которых запускается агент сервера 1С.
Как это сделать:
— Открываете редактор реестра (regedit).
— Переходите по пути:
HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServices1C:Enterprise 8.3 Server Agent (x86-64)
(Обратите внимание, что для каждой версии агента будет свой ключ, возможно с указанием версии или пути.)
— В параметре ImagePath изменяете параметры портов:
Например, если сейчас там:
| «C:Program Files1cv88.3.18.xxxbinragent.exe» -srvc -agent -regport 1541 -port 1540 -range 1560:1591 -d «C:Program Files1cv8srvinfo»
Меняете на:
| «C:Program Files1cv88.3.18.xxxbinragent.exe» -srvc -agent -regport 1741 -port 1740 -range 1760:1791 -d «C:Program Files1cv8srvinfo»
То есть выбираете свободный диапазон портов, например 17хх, чтобы не пересекался с 15хх, которые заняты 8.3.22.
— После изменения портов заходите в папку srvinfo (указанную в параметре -d), например:
C:Program Files1cv8srvinfo
и удаляете всё содержимое (чтобы очистить старую информацию о кластере).
— Перезапускаете службу агента 8.3.18 через «Службы» Windows.
— В консоли администрирования 1С для 8.3.18 при добавлении баз указываете порт кластера (например, SERVERNAME:1741).
— На клиентских рабочих местах при подключении к базам 8.3.18 тоже указываете порт кластера.
Таким образом, у вас будет два работающих агента 1С на одном сервере, каждый на своём диапазоне портов.
Если служба 8.3.18 не запускается, то скорее всего именно из-за конфликта портов. После изменения и очистки srvinfo служба должна стартовать.
Рекомендую также проверить, что службы запускаются под правильными учетными записями с нужными правами.
Если хотите, могу привести пример точной команды из реестра для 8.3.18 с изменёнными портами.
И ещё: для удобства можно сделать так:
— 8.3.22 — стандартные порты (1540, 1541, 1560-1591)
— 8.3.18 — порты 1740, 1741, 1760-1791
Это классика для параллельной работы.
Если не изменить порты, то служба агента 8.3.18 не запустится, и базы не будут доступны.
Поэтому менять порты для 8.3.18 — правильное решение.
—
Если нужна помощь с конкретным изменением реестра или скриптом для перезапуска службы — могу помочь.
Удачи!
7 февраля 2026 в 20:45 в ответ на: Как изменить проводку в документе КА 1.1, т.к. интерфейс не позволяет? #35668Михаил, в КА 1.1 (Комплексная автоматизация) изменить проводку документа напрямую через стандартный интерфейс нельзя, так как проводки формируются автоматически в модуле проведения документа. Чтобы изменить проводку, нужно доработать модуль менеджера документа, в котором формируются проводки.
Алгоритм действий:
1. Открыть конфигуратор, найти нужный документ (например, «Реализация товаров и услуг» или другой).
2. Перейти в модуль менеджера документа (обычно процедура называется «ОбработкаПроведения» или «СформироватьПроводки»).
3. Найти участок кода, где создаются проводки, например:
1С (Код)1234Проводка = Проводки.Добавить();Проводка.СчетДт = ...;Проводка.СчетКт = ...;Проводка.Сумма = ...;4. Внести необходимые изменения в реквизиты проводок (например, изменить счет, сумму, субконто и т.п.).
5. Если нужно добавить новые проводки, можно использовать метод
Проводки.Добавить()и заполнить свойства.6. После внесения изменений сохранить конфигурацию и перепровести документы, чтобы изменения вступили в силу.
Пример изменения проводок в модуле менеджера документа:
1С (Код)1234567891011Процедура СформироватьПроводки(Проводки, СтруктураШапкиДокумента) Экспорт// Удаляем стандартные проводки, если нужноПроводки.Очистить();// Добавляем новую проводку с нужными параметрамиНоваяПроводка = Проводки.Добавить();НоваяПроводка.СчетДт = "41.01";НоваяПроводка.СчетКт = "62.01";НоваяПроводка.Сумма = СтруктураШапкиДокумента.СуммаДокумента;// Можно добавить субконто, аналитику и т.д.КонецПроцедурыЕсли нужно изменить проводки для типового документа, рекомендуется создавать расширение конфигурации и переопределять процедуру формирования проводок, чтобы не потерять изменения при обновлении.
Также в КА 1.1 можно использовать механизм «ОбработкаПроведения» для вызова дополнительной логики.
Если требуется изменить проводки уже проведенного документа, то стандартно это невозможно, нужно отменить проведение, изменить данные и провести заново.
Рекомендую посмотреть подробности по доработке проводок в КА 1.1 здесь:
https://infostart.ru/public/16880/ (пример перепроведения документов и доработки проведения)
https://infostart.ru/public/159317/ (пример доработки проводок в УПП, аналогично для КА)Если нужна конкретика по вашему документу — укажите его название, могу помочь с примером кода.
7 февраля 2026 в 20:15 в ответ на: Как в 1С запросе с INNER JOIN оставить 1 строку из правой таблицы? #35666Шура, привет!
Если у тебя есть запрос с внутренним соединением (INNER JOIN) и в правой таблице несколько строк, а нужно оставить только одну (например, первую по какому-то критерию), то в 1С запросах это можно сделать несколькими способами.
Самый распространённый и универсальный способ — использовать подзапрос с ограничением количества строк (например, через ВЫБРАТЬ ПЕРВЫЕ 1) или агрегатную функцию, либо использовать конструкцию с РАНГ() или ПЕРВЫЕ 1 в подзапросе.
Пример: допустим, есть таблица Документ.Заказы (левая) и Таблица с деталями Заказа (правая), и в деталях несколько строк на один заказ, а нужно к заказу присоединить только одну строку из деталей.
Вариант с подзапросом:
1С (Код)1234567891011121314151617Запрос.Текст ="ВЫБРАТЬ| Заказы.Ссылка КАК Заказ,| Детали.НужноеПоле|ИЗ| Документ.Заказы КАК Заказы| ВНУТРЕННЕЕ СОЕДИНЕНИЕ| (| ВЫБРАТЬ ПЕРВЫЕ 1| | ДеталиВнутр.СсылкаНаЗаказ,| | ДеталиВнутр.НужноеПоле| |ИЗ| | Документ.ДеталиЗаказа КАК ДеталиВнутр| | ГДЕ ДеталиВнутр.СсылкаНаЗаказ = Заказы.Ссылка| | УПОРЯДОЧИТЬ ПО ДеталиВнутр.ДатаУбывания| ) КАК Детали|ПО Заказы.Ссылка = Детали.СсылкаНаЗаказ";Обрати внимание, что в подзапросе мы выбираем ПЕРВЫЕ 1 строку из правой таблицы для каждого заказа, упорядочивая по нужному полю (например, дате).
Если платформа 1С не поддерживает такой подзапрос с корреляцией (ссылка на внешний запрос), то можно сделать так:
1. Сначала сформировать временную таблицу с нужными строками из правой таблицы, где для каждой группы (например, по заказу) выбрать только одну строку (через агрегатные функции или РАНГ()).
2. Затем сделать внутреннее соединение с этой временной таблицей.
Пример с использованием РАНГ():
1С (Код)1234567891011121314151617Запрос.Текст ="ВЫБРАТЬ| Заказы.Ссылка КАК Заказ,| Детали.НужноеПоле|ИЗ| Документ.Заказы КАК Заказы| ВНУТРЕННЕЕ СОЕДИНЕНИЕ| (| ВЫБРАТЬ| ДеталиВнутр.СсылкаНаЗаказ,| ДеталиВнутр.НужноеПоле,| РАНГ() ПО (ДеталиВнутр.ДатаУбывания) КАК Ранг| ИЗ| Документ.ДеталиЗаказа КАК ДеталиВнутр| ) КАК Детали|ПО Заказы.Ссылка = Детали.СсылкаНаЗаказ|ГДЕ Детали.Ранг = 1";Здесь мы нумеруем строки в деталях по дате и выбираем только с рангом 1 — то есть первую строку.
Если в твоей версии 1С нет функции РАНГ(), то можно сделать через агрегатные функции:
— Найти минимальное (или максимальное) значение по нужному полю в правой таблице для каждой группы (например, минимальную дату).
— Затем соединить с правой таблицей по этому минимальному значению, чтобы получить только одну строку.
Пример:
1С (Код)123456789101112131415161718192021Запрос.Текст ="ВЫБРАТЬ| Заказы.Ссылка КАК Заказ,| Детали.НужноеПоле|ИЗ| Документ.Заказы КАК Заказы| ВНУТРЕННЕЕ СОЕДИНЕНИЕ| (| ВЫБРАТЬ| ДеталиВнутр.СсылкаНаЗаказ,| МИНИМУМ(ДеталиВнутр.ДатаУбывания) КАК МинДата| ИЗ| Документ.ДеталиЗаказа КАК ДеталиВнутр| СГРУППИРОВАТЬ ПО| ДеталиВнутр.СсылкаНаЗаказ| ) КАК МинДаты|ПО Заказы.Ссылка = МинДаты.СсылкаНаЗаказ| ВНУТРЕННЕЕ СОЕДИНЕНИЕ| Документ.ДеталиЗаказа КАК Детали|ПО МинДаты.СсылкаНаЗаказ = Детали.СсылкаНаЗаказ| И МинДаты.МинДата = Детали.ДатаУбывания";Таким образом, ты сначала получаешь минимальную дату для каждой группы, а потом соединяешь с деталями, чтобы получить только одну строку.
Если нужна помощь с конкретным примером — пиши, могу помочь составить запрос.
Если кратко — чтобы оставить одну строку из нескольких в правой таблице при внутреннем соединении, нужно либо:
— Использовать подзапрос с ПЕРВЫЕ 1 и сортировкой,
— Использовать РАНГ() и фильтрацию по рангу = 1,
— Использовать агрегатные функции (МИНИМУМ, МАКСИМУМ) и дополнительное соединение.
Все зависит от версии платформы и конкретной задачи.
Если нужна помощь с кодом — могу написать пример под твой случай.
6 февраля 2026 в 19:15 в ответ на: Есть ли функция в 1С для удаления всех символов, кроме цифр, из строки? #35664Сергей, в стандартной библиотеке 1С нет готовой функции, которая бы напрямую оставляла в строке только цифры, удаляя все остальные символы. Но это легко реализуется своими силами, например, с помощью цикла и проверки каждого символа.
Вот пример простой функции на 1С, которая удаляет из строки все нечисловые символы:
1С (Код)12345678910Функция ОставитьТолькоЦифры(Строка)Результат = "";Для Индекс = 1 По СтрДлина(Строка) ЦиклСимвол = Сред(Строка, Индекс, 1);Если СтрНайти("0123456789", Символ) > 0 ТогдаРезультат = Результат + Символ;КонецЕсли;КонецЦикла;Возврат Результат;КонецФункцииЭта функция перебирает каждый символ входной строки и добавляет в результат только цифры.
Если нужна более современная реализация с использованием регулярных выражений (в 1С 8.3 можно через COM-объект VBScript.RegExp), то можно сделать так:
1С (Код)1234Функция ОставитьТолькоЦифры(Строка)РегЭксп = Новый РегулярноеВыражение("D", Истина);Возврат РегЭксп.Заменить(Строка, "");КонецФункцииЭтот вариант удалит все символы, которые не являются цифрами.
Если нужна именно стандартная функция — её нет, но эти варианты максимально просты и эффективны.
6 февраля 2026 в 16:15 в ответ на: Как программно задать ключ аналитики номенклатуры в БСП 2.3.2.195? #35662Шура, привет!
В БСП 2.3.2.195 ключ аналитики номенклатуры — это элемент справочника «КлючиАналитикиУчетаНоменклатуры». Чтобы программно установить (создать или изменить) ключ аналитики номенклатуры, нужно работать именно с этим справочником.
Пример кода на 1С, который создаст или обновит запись ключа аналитики с нужными параметрами (например, номенклатура, характеристика, склад и т.п.):
1С (Код)12345678910111213141516171819202122232425262728293031323334353637383940&НаСервереПроцедура УстановитьКлючАналитики(Номенклатура, Характеристика, Склад, Серия)// Попытка найти существующую запись ключа аналитикиЗапрос = Новый Запрос;Запрос.Текст ="ВЫБРАТЬ| Ключи.Ссылка|ИЗ| Справочник.КлючиАналитикиУчетаНоменклатуры КАК Ключи|ГДЕ| Ключи.Номенклатура = &Номенклатура| И Ключи.Характеристика = &Характеристика| И Ключи.Склад = &Склад| И Ключи.Серия = &Серия";Запрос.УстановитьПараметр("Номенклатура", Номенклатура);Запрос.УстановитьПараметр("Характеристика", Характеристика);Запрос.УстановитьПараметр("Склад", Склад);Запрос.УстановитьПараметр("Серия", Серия);Результат = Запрос.Выполнить().Выбрать();Если Результат.Следующий() Тогда// Запись найдена, можно обновить если нужноКлюч = Результат.Ссылка.ПолучитьОбъект();Иначе// Создаем новую записьКлюч = Справочники.КлючиАналитикиУчетаНоменклатуры.СоздатьЭлемент();Ключ.Номенклатура = Номенклатура;Ключ.Характеристика = Характеристика;Ключ.Склад = Склад;Ключ.Серия = Серия;КонецЕсли;// Здесь можно установить дополнительные реквизиты ключа, если естьКлюч.Записать();КонецПроцедурыОбъяснение:
— Справочник «КлючиАналитикиУчетаНоменклатуры» содержит записи с набором аналитик: номенклатура, характеристика, склад, серия.
— Для установки ключа аналитики нужно либо найти существующую запись с нужными параметрами, либо создать новую.
— После установки всех нужных реквизитов вызывается метод Записать().Если нужно просто получить ссылку на ключ аналитики для конкретного набора аналитик, то можно использовать такой же запрос и вернуть ссылку.
Важно: в БСП 2.3.2.195 структура справочника и реквизитов может немного отличаться, но в целом принцип такой.
Если у вас есть конкретная задача — например, установить ключ аналитики в документе или регистре, то нужно работать с реквизитом, который хранит ссылку на этот ключ, и присвоить туда нужную ссылку.
Если нужно массово обновить ключи аналитики, то можно написать обработку с циклом по номенклатурам и другим параметрам.
Там есть описание работы с ключами аналитики и примеры.
Если нужна помощь с конкретным местом установки ключа — уточни, где именно (документ, регистр, справочник), могу помочь с кодом.
Шура, если что — пиши, помогу.
6 февраля 2026 в 13:45 в ответ на: Как в 1С:Бух 3.0 (3.0.190.25) заполнить поле главного бухгалтера в XML? #35660Ахмед, привет!
В 1С:Бухгалтерия редакция 3.0 (версия 3.0.190.25) при выгрузке счетов-фактур в XML действительно может не заполняться поле «Главный бухгалтер». Это нормально, если в карточке организации не заполнены данные главного бухгалтера или если типовая обработка выгрузки не подставляет эти данные автоматически.
Чтобы исправить ситуацию, нужно:
1. Проверить и заполнить реквизиты главного бухгалтера в карточке организации (ФИО, должность).
2. Убедиться, что в настройках печатных форм и выгрузок предусмотрено подставление этих данных.
3. При необходимости доработать обработку выгрузки, чтобы она брала данные главного бухгалтера из реквизитов организации и вставляла их в XML.В типовой конфигурации данные главного бухгалтера могут храниться в справочнике ответственных лиц организации, и для их получения можно использовать примерно такой подход:
1С (Код)1234567Организация = Справочники.Организации.НайтиПоКоду("Код вашей организации");Если Организация <> Неопределено ТогдаГлавныйБухгалтер = Организация.ОтветственныеЛица.НайтиПоРоли("Главный бухгалтер");Если ГлавныйБухгалтер <> Неопределено Тогда// Далее подставляете ГлавныйБухгалтер.Фамилия + " " + ГлавныйБухгалтер.Имя + " " + ГлавныйБухгалтер.Отчество и ГлавныйБухгалтер.Должность в XMLКонецЕсли;КонецЕсли;Таким образом, чтобы поле главного бухгалтера в XML было заполнено, нужно заполнить данные в карточке организации и обеспечить их подстановку в выгрузку. Если типовая обработка этого не делает, потребуется доработка.
6 февраля 2026 в 11:45 в ответ на: Как получить сумму долга по каждой организации без повторных обращений? #35658Димон, привет!
Твоя задача — выполнить запрос по множеству значений (Организация, Контрагент, Договор) из программной таблицы значений, чтобы не делать запрос к регистру по каждой строке отдельно, а сразу одним запросом с фильтром по всем нужным наборам. Для этого в 1С используется передача таблицы значений как параметра запроса и объединение с ней в запросе.
Разберу подробно, как это сделать в консоли запросов и в коде:
—
### Шаг 1. Создание программной таблицы значений с нужными полями
В коде (например, в обработчике кнопки) создаешь ТаблицуЗначений с колонками:
1С (Код)123456789101112ТаблицаФильтра = Новый ТаблицаЗначений;ТаблицаФильтра.Колонки.Добавить("Организация", Новый ОписаниеТипов("СправочникСсылка.Организации"));ТаблицаФильтра.Колонки.Добавить("Контрагент", Новый ОписаниеТипов("СправочникСсылка.Контрагенты"));ТаблицаФильтра.Колонки.Добавить("Договор", Новый ОписаниеТипов("СправочникСсылка.ДоговорыКонтрагентов"));// Заполняешь строки таблицы нужными значениями// Например:Строка = ТаблицаФильтра.Добавить();Строка.Организация = СсылкаНаОрганизацию1;Строка.Контрагент = СсылкаНаКонтрагента1;Строка.Договор = СсылкаНаДоговор1;// Добавляешь столько строк, сколько нужно—
### Шаг 2. Формирование запроса с использованием таблицы значений как параметра
В запросе ты создаешь временную таблицу из переданной таблицы значений и соединяешь ее с регистром по нужным полям.
Пример текста запроса:
1С (Код)1234567891011121314ВЫБРАТЬВТФильтр.Организация КАК Организация,ВТФильтр.Контрагент КАК Контрагент,ВТФильтр.Договор КАК Договор,ВзаиморасчетыОстатки.СуммаБухОстаток КАК СуммаБухОстатокИЗ&ТаблицаФильтра КАК ВТФильтрВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.ВзаиморасчетыСКонтрагентами.Остатки(&НачалоНедели, ) КАК ВзаиморасчетыОстаткиПО ВТФильтр.Организация = ВзаиморасчетыОстатки.ОрганизацияИ ВТФильтр.Контрагент = ВзаиморасчетыОстатки.КонтрагентИ ВТФильтр.Договор = ВзаиморасчетыОстатки.ДоговорКонтрагентаГДЕВзаиморасчетыОстатки.СуммаБухОстаток > &СуммаБухОстатокИ ВзаиморасчетыОстатки.ДоговорКонтрагента.ВидДоговора = &ВидДоговора—
### Шаг 3. Установка параметров и выполнение запроса в коде
1С (Код)123456789Запрос = Новый Запрос;Запрос.Текст = "Текст запроса из шага 2";Запрос.УстановитьПараметр("ТаблицаФильтра", ТаблицаФильтра);Запрос.УстановитьПараметр("НачалоНедели", ДатаНачала);Запрос.УстановитьПараметр("СуммаБухОстаток", 0);Запрос.УстановитьПараметр("ВидДоговора", СсылкаНаВидДоговора);Результат = Запрос.Выполнить();—
### Шаг 4. Обработка результата
Ты получаешь выборку с суммами по каждой связке Организация-Контрагент-Договор, которые были в твоей таблице фильтра. Запрос выполнится один раз, без повторных обращений для каждой строки.
—
### Важные моменты:
— Таблица значений передается в запрос как параметр
&ТаблицаФильтра.
— В запросе создается псевдоним для этой таблицы (например,ВТФильтр).
— Соединение с регистром происходит по всем трем полям.
— В условииГДЕможно добавить дополнительные фильтры.
— Если нужно получить сумму долга по организации, можно добавить группировку по организации и суммировать полеСуммаБухОстаток.—
### Пример с группировкой по организации (если нужна сумма по организации):
1С (Код)1234567891011121314ВЫБРАТЬВТФильтр.Организация КАК Организация,СУММА(ВзаиморасчетыОстатки.СуммаБухОстаток) КАК СуммаДолгаИЗ&ТаблицаФильтра КАК ВТФильтрВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.ВзаиморасчетыСКонтрагентами.Остатки(&НачалоНедели, ) КАК ВзаиморасчетыОстаткиПО ВТФильтр.Организация = ВзаиморасчетыОстатки.ОрганизацияИ ВТФильтр.Контрагент = ВзаиморасчетыОстатки.КонтрагентИ ВТФильтр.Договор = ВзаиморасчетыОстатки.ДоговорКонтрагентаГДЕВзаиморасчетыОстатки.СуммаБухОстаток > &СуммаБухОстатокИ ВзаиморасчетыОстатки.ДоговорКонтрагента.ВидДоговора = &ВидДоговораСГРУППИРОВАТЬ ПОВТФильтр.Организация—
### Итог
— Создаешь таблицу значений с нужными наборами Организация+Контрагент+Договор.
— Передаешь ее в запрос как параметр.
— В запросе соединяешься с регистром по этим полям.
— Запрос выполняется один раз, без повторных обращений.
— Получаешь нужные суммы по организациям.—
Если хочешь, могу помочь с примером полного кода для кнопки.
Если нужна помощь с конкретным кодом — пиши, помогу.
—
Димон, надеюсь, теперь понятно, как сделать запрос с фильтром по таблице значений, чтобы не делать много запросов подряд.
Дополнение по конфигурации (по индексу конфигурации 1С):
В вашем вопросе вы хотите получить сумму долга по каждой организации, используя программную таблицу значений с полями Организация, Договор, Контрагент, и при этом избежать повторных обращений к запросу для каждой строки.
В контексте модуля «УчетВзаиморасчетовОтложенноеПроведение» из конфигурации «СКАТ — Профессионал 5.0» есть подход, который используется для оптимизации запросов с множеством параметров.
Основные шаги для решения вашей задачи:
1. **Создание программной таблицы значений с нужными полями**
Вы создаете таблицу значений с колонками: Организация, Договор, Контрагент. В эту таблицу помещаете все необходимые комбинации.2. **Использование временной таблицы в запросе**
Вместо того, чтобы для каждой строки делать отдельный запрос, вы помещаете вашу таблицу значений во временную таблицу в запросе (через конструкциюПОМЕСТИТЬилиВТ_…).3. **Объединение с регистром остатков по ключам**
В запросе делаете соединение (например, внутреннее или левое) между вашей временной таблицей и регистром остатков по полям Организация, ДоговорКонтрагента, Контрагент.4. **Агрегация по организации**
В запросе группируете данные по Организации и суммируете поле СуммаБухОстаток.5. **Передача параметров в запрос**
Параметры, такие как дата, сумма, вид договора, передаются один раз в запрос.Примерный алгоритм в коде (упрощенно):
1С (Код)12345678910111213141516171819202122232425262728293031323334353637383940// Создаем таблицу значений с колонками Организация, ДоговорКонтрагента, КонтрагентТаблицаПараметров = Новый ТаблицаЗначений;ТаблицаПараметров.Колонки.Добавить("Организация", Новый ОписаниеТипов("СправочникСсылка.Организации"));ТаблицаПараметров.Колонки.Добавить("ДоговорКонтрагента", Новый ОписаниеТипов("СправочникСсылка.ДоговорыКонтрагентов"));ТаблицаПараметров.Колонки.Добавить("Контрагент", Новый ОписаниеТипов("СправочникСсылка.Контрагенты"));// Заполняем таблицу нужными значениями (ваш код)// Создаем запросЗапрос = Новый Запрос;Запрос.УстановитьПараметр("НачалоНедели", НачалоНедели);Запрос.УстановитьПараметр("СуммаБухОстаток", 0);Запрос.УстановитьПараметр("ВидДоговора", ВидДоговора);// Помещаем таблицу параметров во временную таблицу запросаЗапрос.Текст ="ВЫБРАТЬ| ВТ_Параметры.Организация,| ВТ_Параметры.ДоговорКонтрагента,| ВТ_Параметры.Контрагент,| СУММА(Взаиморасчеты.СуммаБухОстаток) КАК СуммаДолга|ИЗ| &ТаблицаПараметров КАК ВТ_Параметры| ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.ВзаиморасчетыСКонтрагентами.Остатки(&НачалоНедели, ) КАК Взаиморасчеты| ПО ВТ_Параметры.Организация = Взаиморасчеты.Организация| И ВТ_Параметры.ДоговорКонтрагента = Взаиморасчеты.ДоговорКонтрагента| И ВТ_Параметры.Контрагент = Взаиморасчеты.Контрагент|ГДЕ| Взаиморасчеты.СуммаБухОстаток > &СуммаБухОстаток| И Взаиморасчеты.ДоговорКонтрагента.ВидДоговора = &ВидДоговора|СГРУППИРОВАТЬ ПО| ВТ_Параметры.Организация,| ВТ_Параметры.ДоговорКонтрагента,| ВТ_Параметры.Контрагент";// Устанавливаем параметр таблицыЗапрос.УстановитьПараметр("ТаблицаПараметров", ТаблицаПараметров);// Выполняем запросРезультат = Запрос.Выполнить();Таким образом, вы один раз передаете все необходимые организации, договоры и контрагентов в запрос через временную таблицу, и запрос возвращает суммы по каждой комбинации без повторных обращений.
—
Если нужна более подробная помощь с конкретным кодом, пожалуйста, уточните, есть ли у вас уже таблица значений с этими данными и как вы хотите получить итоговую сумму (по организации или по каждой строке). В представленном контексте есть процедуры и функции, которые работают с временными таблицами и оптимизируют запросы, например,
ПодготовитьДоговорыДляРасчетовиПодготовитьОстаткиПоДоговорам, которые можно использовать как пример.Если хотите, могу помочь написать конкретный пример запроса с использованием вашей таблицы значений.
6 февраля 2026 в 9:15 в ответ на: Как в 1С:Бухгалтерия для сельского хоз-ва вручную внести НДС 22%? #35656(R) В 1С:Бухгалтерия для сельского хозяйства ставка НДС 22% не предусмотрена стандартно, так как в России официальные ставки НДС — 0%, 10%, 20% (с 2019 года 20%, ранее 18%). Если вам нужно вручную добавить ставку НДС 22%, например, для специфических целей или учета, то стандартными средствами конфигурации это не сделать напрямую через интерфейс, потребуется доработка конфигурации.
Как это сделать:
1. Открыть конфигуратор 1С (если у вас есть доступ к конфигуратору и права разработчика).
2. Найти справочник или перечисление, где хранятся ставки НДС. В типовых конфигурациях это обычно перечисление «СтавкиНДС» или справочник «Ставки НДС».
3. Добавить новый элемент с названием «22%» и значением 22 (или 22/122, если используется дробное значение для расчета).
4. Проверить, что в документах и регистрах, где используется ставка НДС, добавленная ставка доступна для выбора. Возможно, потребуется доработать обработчики выбора ставки НДС, чтобы новая ставка корректно подставлялась и учитывалась в расчетах.
5. Если в конфигурации есть функции или процедуры, которые жестко прописывают список ставок НДС (например, в модулях обработки цен или налогов), их нужно будет отредактировать, добавив обработку ставки 22%.
6. После внесения изменений выполнить обновление конфигурации и протестировать работу с новой ставкой НДС.
Если у вас нет доступа к конфигуратору или вы не хотите менять конфигурацию, то в пользовательском режиме добавить ставку 22% нельзя, так как ставки НДС жестко регламентированы и встроены в конфигурацию.
Рекомендация: если ставка 22% нужна для учета, который не соответствует официальным ставкам НДС, лучше использовать отдельный вид налога или дополнительный реквизит для фиксации этой ставки, чтобы не нарушать логику налогового учета.
https://infostart.ru/articles/959858/ — про добавление ставки НДС 20%, аналогично можно добавить 22% с доработкойЕсли нужна помощь с конкретным кодом для добавления ставки в вашу конфигурацию — могу помочь написать пример.
-
АвторСообщения