1с заполнение реквизитов документа при создании

Частая задача — сделать так, чтобы форма нового объекта открывалась не «пустая», а уже заполненная некоторыми начальными данными.

Для самых простых случаев можно использовать свойство ЗначениеЗаполнения, которое есть у реквизитов объектов конфигурации (см. Как сделать, чтобы при создании новой накладной автоматически подставлялся главный склад?).

В более сложных случаях можно использовать данные заполнения (см. Как сделать, чтобы при вводе новой накладной в нее сразу же подставлялись те значения склада и поставщика, по которым отобран список накладных?).

Если ни тот, ни другой способы не подходят, на встроенном языке можно описать собственный алгоритм начального заполнения данных нового объекта. Для этого предназначено событие объекта ОбработкаЗаполнения.

Это событие можно обработать в модуле объекта в процедуре со стандартным именем ОбработкаЗаполнения.

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

Например:

Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)
   Если ДанныеЗаполнения = Неопределено Тогда 
      // "Простой" ввод нового объекта
   ИначеЕсли ТипЗнч(ДанныеЗаполнения) = Тип("СправочникСсылка.Поставщики") Тогда 
      // Новый объект вводится на основании другого объекта. 
      // В этом случае в данные заполнения передается ссылка на объект, являющийся основанием.
      // В данном случае обрабатывается ввод на основании элемента справочника Поставщики.
   ИначеЕсли ТипЗнч(ДанныеЗаполнения) = Тип("Структура") Тогда
      // Новый объект вводится командой из отобранного списка.
      // В данных заполнения будет структура, содержащая значения отбора. Например:
      // "Поставщик" - СсылкаНаПоставщика
      // "Склад" - СсылкаНаСклад
   КонецЕсли;
КонецПроцедуры 

Параметр СтандартнаяОбработка позволяет управлять дальнейшим развитием событий. Если ему присвоить значение Ложь, то никаких других действий по заполнению реквизитов формы платформа предпринимать не будет, а сразу создаст форму и вызовет ее серверное событие ПриСозданииНаСервере.

Если же не менять стандартное значение этого параметра, то после выхода из этого обработчика платформа попытается самостоятельно заполнить реквизиты объекта, подлежащие заполнению. Незаполненными она будет считать те реквизиты, которые имеют стандартное значение своего типа. Например, для типа Число это значение 0, для типа Строка — «», а для типа ссылки — пустая ссылка.

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


  • Реквизит заполнен — сразу будет вызван обработчик события ПриСозданииНаСервере.
  • Реквизит не заполнен — платформа попытается заполнить его из данных заполнения. После этого снова проверит, заполнен реквизит или нет:
    • Реквизит заполнен — сразу будет вызван обработчик события ПриСозданииНаСервере.
    • Реквизит не заполнен — платформа попытается заполнить его из значения заполнения. После этого будет вызван обработчик события ПриСозданииНаСервере.

Инициализация реквизитов при создании нового объекта

Один из методов упрощения работы пользователя — это заполнение реквизитов нового объекта (элемент справочник, документ) значениями по умолчанию. Реализовать заполнение реквизитов можно двумя способами:

  1. в обработчике события формы элемента — ПриСозданииНаСервере;
  2. в обработчике события объекта — ОбработкаЗаполнения.

Первый способ не рекомендуется использовать, но все-равно его рассмотрим. Создадим в модуле формы обработчик события ПриСозданииНаСервере. В обработчике проверим факт создания нового объекта, если объект новый, то произведем заполнение реквизитов.


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

// Если ссылка у объекта пустая, значит он еще не записан,
// а следовательно он является новым объектом.
ЭтоНовыйОбъект = Объект.Ссылка.Пустая();

// Если объект новый, то выполняем заполнение реквизитов.
Если ЭтоНовыйОбъект Тогда
Объект.Ответственный = Пользователи.ТекущийПользователь();
Объект.Комментарий = "Документ создан " + Формат(ТекущаяДата(), "ДФ=dd.MM.yyyy");
КонецЕсли;

КонецПроцедуры

Второй способ намного проще, т.к. он предусмотрен платформой и рекомендован к использованию. Создадим в модуле объекта обработчик события ОбработкаЗаполнения и напишем программный код по заполнению реквизитов объекта без каких-либо проверок, потому что данное событие возникает при интерактивном вводе нового объекта. Более подробное описание обработчика события см. в синтакс-помощнике.


Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)

ЭтотОбъект.Ответственный = Пользователи.ТекущийПользователь();
ЭтотОбъект.Комментарий = "Документ создан " + Формат(ТекущаяДата(), "ДФ=dd.MM.yyyy");

КонецПроцедуры

Пару слов из личного опыта: не стоит вешать тяжелые операции по инициализации реквизитов на события, которые вызываются при открытии объекта, так как они будут существенно увеличивать время открытия объекта. Предоставьте выполнение таких операций на выбор пользователю, создав команду формы.

Частая задача — сделать так, чтобы форма нового объекта открывалась не «пустая», а уже заполненная некоторыми начальными данными. Для самых простых случаев можно использовать свойство ЗначениеЗаполнения, которое есть у реквизитов объектов конфигурации. В более сложных случаях можно использовать свойство ЗаполнятьИзДанныхЗаполнения. Если ни тот, ни другой способы не подходят, на встроенном языке можно описать собственный алгоритм начального заполнения данных нового объекта.

Свойство ЗначениеЗаполнения

Например, есть документ Накладная с реквизитом Склад. В подавляющем большинстве случаев товары приходуются на главный склад, и лишь в отдельных редких случаях они могут приходоваться на другие склады. Чтобы облегчить работу оператора и не заставлять его каждый раз выбирать один и тот же склад в новых накладных, можно поступить следующим образом.

У реквизитов объектов конфигурации существует свойство ЗначениеЗаполнения. Реквизит Склад имеет тип ссылки на справочник Склады, а в справочнике Склады существует предопределенный элемент ГлавныйСклад. Тогда прямо в конфигураторе можно указать, что в новых документах реквизит Склад будет сразу же заполнен ссылкой на ГлавныйСклад:

Cвойство ЗаполнятьИзДанныхЗаполнения

Пусть у пользователя список накладных отобран по поставщику и по складу. Необходимо сделать так, чтобы при вводе новой накладной эти значения (поставщик и склад) сразу же подставлялись в нужные поля накладной. Для решения этой задачи достаточно открыть накладную в конфигураторе и для ее реквизитов Поставщик и Склад установить свойство ЗаполнятьИзДанныхЗаполнения:

Теперь будет происходить следующее. В режиме 1С:Предприятие пользователь отобрал список накладных по некоторому поставщику и некоторому складу. При вводе новой накладной с помощью команды «Создать» списка, поля Поставщик и Склад будут заполнены именно теми значениями, по которым отобран список накладных:

Собственный алгоритм заполнения реквизитов

Для этого предназначено событие объекта ОбработкаЗаполнения. Первым параметром процедуре ОбработкаЗаполнения() передаются ДанныеЗаполнения. Проанализировав их тип, можно определить, каким именно образом вводится новый объект, и выполнить соответствующий этому варианту алгоритм. Например:

Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)
                
     Если ДанныеЗаполнения = Неопределено Тогда 
          // «Простой» ввод нового объекта
                               
     ИначеЕсли ТипЗнч(ДанныеЗаполнения) = Тип("СправочникСсылка.Поставщики") Тогда 
          // Новый объект вводится на основании другого объекта. 
          // В этом случае в данные заполнения передается ссылка на объект, являющийся основанием.
          // В данном случае обрабатывается ввод на основании элемента справочника Поставщики.
                               
     ИначеЕсли ТипЗнч(ДанныеЗаполнения) = Тип("Структура") Тогда
          // Новый объект вводится командой из отобранного списка.
          // В данных заполнения будет структура, содержащая значения отбора:
          // «Поставщик» — СсылкаНаПоставщика
          // «Склад» — СсылкаНаСклад
                               
     КонецЕсли;
                               
КонецПроцедуры

Параметр СтандартнаяОбработка позволяет управлять дальнейшим развитием событий. Если ему присвоить значение Ложь, то никаких других действий по заполнению реквизитов формы платформа предпринимать не будет, а сразу создаст форму и вызовет ее серверное событие ПриСозданииНаСервере.

Если же не менять стандартное значение этого параметра, то после выхода из этого обработчика платформа попытается самостоятельно заполнить реквизиты объекта, подлежащие заполнению. Незаполненными она будет считать те реквизиты, которые имеют стандартное значение своего типа. Например, для типа Число это значение 0, для типа Строка — пустая строка, а для типа Ссылка — пустая ссылка.

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

  • Реквизит заполнен — сразу будет вызван обработчик события ПриСозданииНаСервере.
  • Реквизит не заполнен — платформа попытается заполнить его из ДанныеЗаполнения. После этого снова проверит, заполнен реквизит или нет:
    • Реквизит заполнен — сразу будет вызван обработчик события ПриСозданииНаСервере.
    • Реквизит не заполнен — платформа попытается заполнить его из ЗначениеЗаполнения. После этого будет вызван обработчик события ПриСозданииНаСервере.

Поиск:
1С:Предприятие • Документ • Заполнять из данных заполнения • Значение заполнения • Обработка заполнения

Здравствуйте, как автоматически заполнить реквизит формы при программном создании документа (У Т П, обычные формы)

Вот код для создания нового документа

Док = Документы.ПлатежноеПоручениеВходящее.СоздатьДокумент();

Док.Дата = ТекущаяДата() ;

……….

……….

……….

Док.Записать() ;

В этом документе есть реквизиты формы ссылочного типа — ссылаются на Перечисления в основном

Ставка НДС,

Счет расчетов,

Счет авансов,

Счет НДС (неподтвержденный)

КАК при создании документа заполнить значениями эти ЭлементыФормы

Вроде писал

ФормаДок = Док.ПолучитьФорму(Формы.ФормаДокумента) ;

выдает ошибку

{ВнешняяОбработка.СтворенняПП.Форма.Форма.Форма(42,25)}: Неопознанный оператор

ФормаДок.ЭлементыФормы <<?>>??? (Проверка: Толстый клиент (обычное приложение))

ФормаДок.ЭлементыФормы ??? — далее затрудняюсь

Подсобите пожалуйста, благодарю, удачи

  • 1 Как автоматизировать ввод основных значений в программах «1С Предприятие» и начать работать быстрее.
    • 1.1 Подстановка единственного значения на который у пользователя есть права.
    • 1.2 Подстановка значения по отбору, указанному в форме списка.
    • 1.3 Заполнение реквизитов по статистике.
    • 1.4 Подстановка значений по шаблону.
    • 1.5 Ввод нового документа копированием.
  • 2 Горячие клавиши в 1С Предприятие
  • 3 Ввод строк и значений в новый документ копированием.

Очень часто, во время работы в программе 1С, бывает нужно быстро ввести несколько документов или добавить новые объекты в справочники (вид номенклатуры, организация, склад, касса и т.д.). При этом не у всех есть понимание, того как можно автоматизировать ввод основных значений, так, чтобы при создании сразу подставлялись в поля нужные значения. О том, как это сделать я расскажу в этой статье.
В программе 1С существуют механизмы, которые позволяют быстро заполнить значения реквизитов в документах и справочниках. По действию их можно разделить на следующие виды:

  • Подстановка единственного значения
  • Подстановка значения по отбору
  • Заполнение реквизитов по статистике
  • Подстановка ранее введенных реквизитов
  • Подстановка значений по шаблону
  • Ввод нового документа копированием

Подстановка единственного значения на который у пользователя есть права.

Допустим, в вашей организации есть три склада, они введены в базу. При этом менеджеру разрешено продавать товар только с какого-то одного. При создании нового документа этот склад будет подставляться автоматически. Это работает на основе установленных прав доступа у пользователя. То есть, выключая права на объекты, с которыми пользователь не работает, можно автоматизировать ввод данных.

Подстановка значения по отбору, указанному в форме списка.

Если в списке установлен отбор по какому-то реквизиту (касса, банковский счет, склад), то этот реквизит будет автоматически заполнен в новом документе. Например, вы в форме списка документов РКО устанавливаете отбор по кассе. При оформлении нового платежного документа из списка будет автоматически взята информация о выбранной кассе. И так как, для кассы указана организация, то будет автоматически заполнена информация об организации. Использовать отборы можно в любом списке документов.

Заполнение реквизитов по статистике.

Программа 1С ведет статистику ввода основных значений по каждому пользователю. В случае, если вы два раза ввели при создании нового документа одинаковые организацию, подразделение, склад, хозяйственную операцию и т.д., программа будет анализировать последние введенные значения. Таким образом, алгоритм заполнения по статистике автоматически «подстраивается» под каждого пользователя.
Если пользователь нарушает в новом документе эту цепочку, то программа это поймет и начнет подставлять через некоторое время новые значения, но в первом таком документе значения подставлены не будут.
Заполнение ранее введенных реквизитов при выборе значения другого реквизита возможно в случае если выбирается, например торговое соглашение или договор, где заполнены все основные поля (склад, график оплаты, цены и т.д.). При указании соглашения или договора в документе реквизиты будут заполнены по следующим правилам:

будут заполнены все те данные, которые были определены в соглашении или договоре;

если в соглашении или договоре не было указано какое-либо значение (например, подразделение), то это значение будет заполнено в соответствии со статистикой. Если при вводе нового документа значения были заполнены в соответствии со статистикой, то они будут перезаполнены, если они определены в соглашении или договоре.

Подстановка значений по шаблону.

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

Ввод нового документа копированием.

Тут все просто. Если пользователь уже вводил похожий документ, то его можно скопировать и после этого поправить изменившиеся данные. Проверить все реквизиты, уделив особое внимание, такому реквизиту, как дата.

Горячие клавиши в 1С Предприятие

Открыть «Справку» системы F1
Создать новый документ Ctrl + N
Открыть существующий документ Ctrl + O
Получить ссылку Ctrl + F11
Перейти по ссылке Shift + F11
Добавить в «Избранное» Ctrl + D
Открыть «Избранное» Ctrl + Shift + B
Открыть «История» Ctrl + Shift + H
Открыть встроенный «Калькулятор» Ctrl + F2
Открыть «Свойства» Alt + Enter    или   Ctrl + E
Открыть / закрыть «Служебные сообщения» Ctrl + Shift + Z
Сохранить активный документ Ctrl + S
Печать активного документа Ctrl + P
Найти Ctrl + F
Найти следующий F3
Найти следующий выделенный Ctrl + F3
Найти предыдущий Shift + F3
Найти предыдущий выделенный Ctrl + Shift + F3
Развернуть (узел дерева, группу табличного документа) Ctrl + Num+
Свернуть (узел дерева, группу табличного документа) Ctrl + Num-
Развернуть (узел дерева, группу табличного документа) и все подчиненные Ctrl + Alt + Num+
Свернуть (узел дерева, группу табличного документа) и все подчиненные Ctrl + Alt + Num-

Ввод строк и значений в новый документ копированием.

Чтобы перенести строки из одного документа в другой их нужно выделить, нажимая левой кнопкой мыши с зажатой кнопкой Ctrl. Выделить все строки табличной части (ТЧ) можно нажав Ctrl + A. После этого, щелкнув правой кнопкой мыши по выделенному, мы открываем контекстное меню и выбираем пункт «Скопировать строки».

Ввод строк копи-пастом в 1С

После этого открываем новый документ или тот, куда хотим их скопировать и нажимаем в табличной части «Вставить строки». Так можно переносить позиции номенклатуры между документами в рамках одной базы.

Вот основные способы облегчить ввод однотипных документов и справочников и строк в их ТЧ. Обязательно используйте их в своей повседневной работе

Очень часто при создании различных документов отчетов требуется устанавливать для различных объектов значения по умолчанию. В первую очередь это требуется для ускорения заполнения документов и удобства пользователей. Например, если какой-то реквизит практически всегда должен иметь одно значение зачем его постоянно заполнять вручную. Установить значение по умолчанию можно разными способами, в сегодняшней статья рассмотрим реквизит с типом поле ввода, и посмотрим как для него можно установить какое либо значение по умолчанию. Все это делается достаточно просто, главное нужно знать где и как это делается.

Поле ввода как задать значение по умолчанию

И так для примера я сделал документ с одним реквизитом и типом поле ввода, допустим необходимо что-бы при создании документа данное поле заполнялось автоматически.

1C Значение по умолчанию

Сделать это можно двумя способами, первый, в свойствах реквизита нужно найти раздел «Представление» и пункт «Значение заполнения» вот в нем и необходимо указать значение которое будет подставляться по умолчанию.

Как в 1С установить значение по умолчанию для поле ввода

В результате при создании нового документа сразу будет заполняться поле установленным значением.

Как в 1С установить значение по умолчанию

В некоторых случаях первый вариант может не сработать, тогда необходимо открыть обработчик события «При Создании На Сервере».

установить значение по умолчанию для поле ввода

И написать в нем вот такую строчку кода.

Объект.ПолеВвода = "0001"
Как в  установить значение по умолчанию для поле ввода 1с

Результат будет тот же самый.

1С Поле ввода как установить значение по умолчанию

Как видите все достаточно просто. Вообще ситуации могут быть разные поэтому если что-то не получается обязательно напишите об этом.

 +5 

   

Распечатать

Создание нового документа

Для 8.2:

Открыть форму нового документа и предоставить пользователю самому интерактивно записать данные объекта в базу данных:

проще всего использовать метод глобального контекста ОткрытьФорму(). Это можно сделать на клиенте.

Код 1C v 8.2 УП

 ОткрытьФорму("Документ.ПриходнаяНакладная.ФормаОбъекта");   

При этом создается новый документ и открывается для редактирования основная форма этого документа.

Если нужно какое-то предварительное заполнение документа начальными данными, то это можно сделать либо с помощью свойств реквизитов документа ЗначениеЗаполнения, ЗаполнятьИзДанныхЗаполнения либо в обработчике события документа ОбработкаЗаполнения.

Создать новый документ программно, программно заполнить его данными и программно записать. Затем, если нужно, показать его пользователю:

можно программно создать документ на сервере, заполнить данными, если это нужно в обработчике события ОбработкаЗаполнения, записать, и передать ссылку на новый документ в метод глобального контекста ОткрытьЗначение(), который откроет форму этого документа. Например:

Код 1C v 8.2 УП

 &НаКлиенте
Процедура ПриходнаяНакладная(Команда)

СсылкаНаДокумент = СоздатьНовыйДокумент();
ОткрытьЗначение(СсылкаНаДокумент);

КонецПроцедуры

&НаСервере
Функция СоздатьНовыйДокумент()

НовыйДокумент = Документы.ПриходнаяНакладная.СоздатьДокумент();
НовыйДокумент.Номер = "111";
НовыйДокумент.Дата = ТекущаяДата();
НовыйДокумент.Записать();

Возврат НовыйДокумент.Ссылка;

КонецФункции

Подробнее об использовании методов ОткрытьЗначение() и ОткрытьФорму() можно прочитать в синтакс-помощнике: Глобальный контекст — Процедуры и функции для интерактивной работы

Код 1C v 8.2 УП

 // ЕЩЕ ПРИМЕР:
&НаКлиенте
Процедура СоздатьНовыйДокумент(Команда)

// Вставить содержимое обработчика.
Если СоздатьНовыйДокументНаСервере() = 0 Тогда
Сообщить("Не удалось создать новый документ");
КонецЕсли;

КонецПроцедуры

&НаСервере
Функция СоздатьНовыйДокументНаСервере()

Перем НоваяРасходнаяНакладная;
Перем СтрокаТЧ;

НоваяРасходнаяНакладная=ДокРасходнаяНакладная.СоздатьДокумент();

//Заполняем реквизиты шапки
НоваяРасходнаяНакладная.Дата= ТекущаяДата();
НоваяРасходнаяНакладная.Фирма =Справочники.Фирмы.ОсновнаяФирма;
НоваяРасходнаяНакладная.Контрагент=Справочники.Контрагенты.НайтиПоКоду("000000001");
НоваяРасходнаяНакладная.Склад=Справочники.Склады.ОсновнойСклад;

//Заполняем табличную часть
СтрокаТЧ=НоваяРасходнаяНакладная.ТЧТовары.Добавить();
СтрокаТЧ.Товар=Справочники.Номенклатура.НайтиПоКоду("000000002");
СтрокаТЧ.Цена=СтрокаТЧ.Товар.РозничнаяЦена;
СтрокаТЧ.Количество= 2;
СтрокаТЧ.Сумма=СтрокаТЧ.Цена*СтрокаТЧ.Количество;

Попытка
НоваяРасходнаяНакладная.Записать();
Возврат 1;
Исключение
Возврат 0;
КонецПопытки;

КонецФункции


Для 8.1:

Код 1C v 8.х

 
//Создаем документ Выплата, Документ будет создан и показан пользователю, Но НЕ ЗАПИСАН
НовДок = Документы.ЗарплатаКВыплатеОрганизаций.ПолучитьФормуНовогоДокумента();
НовДок.Дата=ТекущаяДата();
НовДок.Организация=Организация;
НовДок.ПериодРегистрации=ПериодРегистрации;
НовДок.ответственный= глЗначениеПеременной("глТекущийПользователь");
НовДок.Комментарий="Выплата за "+МесяцСтрока;
НовДок.ЭлементыФормы.Комментарий.Доступность=Ложь;
Для Каждого ТекущаяСтрока Из ТаблицыЗначений Цикл // заполним табличную часть документа, из ТаблицыЗначений
НС=НовДок.зарплата.добавить();
нс.Авторасчет=истина;
нс.Физлицо = ТекущаяСтрока.Физлицо;
нс.ВыплаченностьЗарплаты=Перечисления.ВыплаченностьЗарплаты.НеВыплачено;
нс.сумма=ТекущаяСтрока.Результат;
КонецЦикла;
НовДок.Открыть();

//Для создания и записи документа используется следующий код:
НовДок = Документы.РасходнаяНакладная.СоздатьДокумент();
НовДок.Дата=ТекущаяДата();
НовыйДок.УстановитьНовыйНомер();
НовДок.Организация=Организация;
НовДок.ПериодРегистрации=ПериодРегистрации;
НовДок.ответственный= глЗначениеПеременной("глТекущийПользователь");
НовДок.Комментарий="Выплата за "+МесяцСтрока;
НовДок.ЭлементыФормы.Комментарий.Доступность=Ложь;
Для Каждого ТекущаяСтрока Из ТаблицыЗначений Цикл // заполним табличную часть документа, из ТаблицыЗначений
НС=НовДок.зарплата.добавить();
нс.Авторасчет=истина;
нс.Физлицо = ТекущаяСтрока.Физлицо;
нс.ВыплаченностьЗарплаты=Перечисления.ВыплаченностьЗарплаты.НеВыплачено;
нс.сумма=ТекущаяСтрока.Результат;
КонецЦикла;
НовДок.Записать();

//Или так:
НовыйДок = Документы.ПеремещениеТоваров.СоздатьДокумент();
НовыйДок.Дата = ПолеВводаДаты;
НовыйДок.УстановитьВремя();
НовыйДок.УстановитьНовыйНомер();
// Формирование табличной части
Для Н=1 По N Цикл
НоваяСтрока = НовыйДок.Товары.Добавить();
НоваяСтрока.Номенклатура = СтрокаДанных.Номенклатура;
// формируются другие реквизиты табличной части
КонецЦикла;
НовыйДок.Записать();
СписокДокументов.Добавить(НовыйДок.Ссылка);

Понравилась статья? Поделить с друзьями:
  • 1с запрос проверка на пустое значение реквизита
  • Абн консалт оценочная компания официальный сайт
  • Акции какой компании купил форест гамп в фильме
  • Автомагазин на лещинского в минске время работы
  • 1с изменение реквизита документа при проведении