База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как программно заполнить документы в 1С:СКАТ с частичным автозаполнением?
- В этой теме 1 ответ, 2 участника, последнее обновление 3 месяца, 2 недели назад сделано
Odin — Одинэсник.
-
АвторСообщения
-
-
3 сентября 2025 в 11:30 #33314
1с скат професионал
при создании программно документа , к примеру определенные поля записывать, а другие как в ручном создании документа не заполнять программно, а они сами подтягивались при заполнении определенных полей, . программно при создании документа также может? Просто не хочу каждое поле находить (для него условие прописывать), если это в ручном создании предусмотренно
-
3 сентября 2025 в 11:30 #33315
Да, в 1С:СКАТ Профессионал при программном создании документа можно заполнить только необходимые реквизиты, а остальные поля оставить пустыми, чтобы они заполнялись автоматически системой, так же как при ручном вводе.
Объяснение:
1. В 1С объекты документов имеют встроенную логику заполнения реквизитов, которая срабатывает при изменении определённых полей (например, при выборе контрагента подтягиваются реквизиты, при выборе номенклатуры — цены и т.п.).
2. При программном создании документа вы можете задать только те реквизиты, которые хотите заполнить явно, а остальные оставить неустановленными.
3. Чтобы система выполнила автоматическое заполнение зависимых реквизитов, необходимо вызвать обработчики событий объекта документа, которые срабатывают при изменении реквизитов. Обычно это делается через вызов процедуры `ОбработкаИзмененияРеквизита` или аналогичных, либо через вызов метода `Обновить()` или `ОбновитьДанные()` формы документа.
4. Если вы создаёте документ в коде без формы (например, через объект `Документы.ИмяДокумента.Создать()`), то автоматическое заполнение не происходит само по себе, так как обработчики событий формы не вызываются. В этом случае можно вручную вызвать методы объекта документа, которые отвечают за заполнение зависимых реквизитов, если такие предусмотрены в конфигурации.
5. В некоторых конфигурациях предусмотрены специальные методы или процедуры для программного заполнения зависимых реквизитов (например, `ЗаполнитьПоКонтрагенту()`, `ЗаполнитьПоНоменклатуре()` и т.п.). Их можно использовать для автоматизации.
6. Если таких методов нет, то можно имитировать поведение формы, программно вызывая обработчики изменения реквизитов, либо реализовать собственную логику заполнения.
Пример кода (упрощённый):
1C Док = Документы.ПриходнаяНакладная.Создать(); Док.Контрагент = Справочники.Контрагенты.НайтиПоНаименованию("ООО Ромашка"); // Вызов процедуры, которая в конфигурации отвечает за заполнение зависимых реквизитов Док.ОбработкаИзмененияРеквизита("Контрагент"); // Теперь можно заполнить другие реквизиты, если нужно Док.Записать();Если метод `ОбработкаИзмененияРеквизита` отсутствует, то нужно смотреть в конфигурации, как реализована логика заполнения реквизитов при изменении полей, и вызывать соответствующие процедуры.
Итог: программно можно заполнить только нужные поля, а остальные пусть заполняются системой, но для этого нужно либо вызвать соответствующие методы объекта документа, либо реализовать логику заполнения самостоятельно.
Рекомендую посмотреть здесь:
https://infostart.ru/public/1882883/ (по работе с документами и заполнению реквизитов)
https://infostart.ru/public/1175136/ (пример добавления и работы с реквизитами и состояниями)
-
-
АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.