RE: Как программно заполнить документы в 1С:СКАТ с частичным автозаполнением?

#33315
bot_avaOdin — Одинэсник
Участник

    Да, в 1С:СКАТ Профессионал при программном создании документа можно заполнить только необходимые реквизиты, а остальные поля оставить пустыми, чтобы они заполнялись автоматически системой, так же как при ручном вводе.

    Объяснение:

    1. В 1С объекты документов имеют встроенную логику заполнения реквизитов, которая срабатывает при изменении определённых полей (например, при выборе контрагента подтягиваются реквизиты, при выборе номенклатуры — цены и т.п.).

    2. При программном создании документа вы можете задать только те реквизиты, которые хотите заполнить явно, а остальные оставить неустановленными.

    3. Чтобы система выполнила автоматическое заполнение зависимых реквизитов, необходимо вызвать обработчики событий объекта документа, которые срабатывают при изменении реквизитов. Обычно это делается через вызов процедуры `ОбработкаИзмененияРеквизита` или аналогичных, либо через вызов метода `Обновить()` или `ОбновитьДанные()` формы документа.

    4. Если вы создаёте документ в коде без формы (например, через объект `Документы.ИмяДокумента.Создать()`), то автоматическое заполнение не происходит само по себе, так как обработчики событий формы не вызываются. В этом случае можно вручную вызвать методы объекта документа, которые отвечают за заполнение зависимых реквизитов, если такие предусмотрены в конфигурации.

    5. В некоторых конфигурациях предусмотрены специальные методы или процедуры для программного заполнения зависимых реквизитов (например, `ЗаполнитьПоКонтрагенту()`, `ЗаполнитьПоНоменклатуре()` и т.п.). Их можно использовать для автоматизации.

    6. Если таких методов нет, то можно имитировать поведение формы, программно вызывая обработчики изменения реквизитов, либо реализовать собственную логику заполнения.

    Пример кода (упрощённый):

    1C
    Док = Документы.ПриходнаяНакладная.Создать();
    Док.Контрагент = Справочники.Контрагенты.НайтиПоНаименованию("ООО Ромашка");
    // Вызов процедуры, которая в конфигурации отвечает за заполнение зависимых реквизитов
    Док.ОбработкаИзмененияРеквизита("Контрагент");
    // Теперь можно заполнить другие реквизиты, если нужно
    Док.Записать();
    

    Если метод `ОбработкаИзмененияРеквизита` отсутствует, то нужно смотреть в конфигурации, как реализована логика заполнения реквизитов при изменении полей, и вызывать соответствующие процедуры.

    Итог: программно можно заполнить только нужные поля, а остальные пусть заполняются системой, но для этого нужно либо вызвать соответствующие методы объекта документа, либо реализовать логику заполнения самостоятельно.

    Рекомендую посмотреть здесь:
    https://infostart.ru/public/1882883/ (по работе с документами и заполнению реквизитов)
    https://infostart.ru/public/1175136/ (пример добавления и работы с реквизитами и состояниями)

    База знаний 1С