В начало

Не заполняется реквизит формы Читатель

           

Есть документ «Выдача книг», у которого имеется реквизит «Читатель» и я его очень хочу заполнить программно.

Рис. Только что созданный документ «Выдача книг»

Рис. Только что созданный документ «Выдача книг»

 

Рис. Справочник «Читатели» до кучи

 

            Как вариант пытаюсь заполнить реквизит «Читатель» из модуля формы. Результат – никакой.

 

Листинг. Процедура и функция «При открытии» в модуле формы

&НаКлиенте

Процедура ПриОткрытии(Отказ)

      //Читатель="Молдавский АФ"; //Вариант 1.Так НЕ присваивается

      //Читатель=ПриОткрытииНаСервере("Молдавский"); //Вариант 2.Так тоже:(

      //Объект.Читатель="Молдавский АФ"; //Вариант 3. Опять хрень

      Объект.Читатель=ПриОткрытииНаСервере("Молдавский"); //4. Ура! Заработало!

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

 

 

&НаСервере

Функция ПриОткрытииНаСервере(СтрЧит) 

      СсылЧит = Справочники.Читатели.НайтиПоНаименованию(СтрЧит);

      Возврат СсылЧит;

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

 

Компилятор ошибок не выдает, при выполнении ошибки не вылетают. В самом листинге все 4 варианта, а при тестировании необходимо раскомментировать только один из вариантов, остальные загонять под двойной слэш.

            Далее показан положительный результат мучений – вариант № 4.

Рис. Документ «Выдача книг» с присвоенным читателем

Рис. Документ «Выдача книг» с присвоенным читателем

 

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

            Также нужно настроить свойство «Значение заполнения» в свойствах реквизита как показано ниже.

Рис. Свойство «Значение заполнения» реквизита «Читатель»

Рис. Свойство «Значение заполнения» реквизита «Читатель»

 

            Далее проверяем в режиме «1С:Предприятие».

Рис. Проверка заполнения документа «Выдача книг» предопределенным элементом

Рис. Проверка заполнения документа «Выдача книг» предопределенным элементом

 

            Кроме того, можно заполнить реквизит данными заполнения, предварительно присвоив значения в режиме «1С:Предприятие».

Рис. Настройка списка данными заполнения

 

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

Рис. Свойство «Заполнять из данных заполнения» реквизита «Читатель»

Рис. Свойство «Заполнять из данных заполнения» реквизита «Читатель»

 

            Результат проверки показан далее.

Рис. Результат заполнения реквизита «Читатель» данными заполнения

Рис. Результат заполнения реквизита «Читатель» данными заполнения

 

Можно еще попытать удачу с «Обработкой заполнения» в модуле объекта. Итак, заходим в модуль объекта и документа «Выдача книг» и юзаем «Обработку заполнения».

Или же переходим в свойствах документа в раздел «Ввод на основании» и запускаем конструктор.

Рис. Ввод на основании в документе «Выдача книг»

Рис. Ввод на основании в документе «Выдача книг»

 

Листинг. Обработка заполнения

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

Если ТипЗнч(ДанныеЗаполнения) = Тип("СправочникСсылка.Читатели") Тогда

//Читатель = ДанныеЗаполнения.Ссылка; //Вариант 1. От конструктора

//Читатель = "Латышенко КП"; //Вариант 2. Не присваивается

Читатель = Справочники.Читатели.НайтиПоНаименованию("Латышенко"); //Вариант 3. Работает

КонецЕсли;

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

 

            Затем нужно перейти в режим «1С:Предприятие», найти справочник «Читатели» и нажать на кнопку

Рис. Справочник «Читатели»

Рис. Справочник «Читатели»

 

            Варианты 1 и 3 работают, но не при создании документа с нуля, а только при создании на основании, т.е. из справочника «Читатели».

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

 

Листинг. Процедура «Обработка заполнения»

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

      Читатель= Справочники.Читатели.НайтиПоНаименованию("Латышенко"); //Работает

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

 

Рис. Результат

 

            ПРИМЕЧАНИЕ: танцы с бубнами выполнялись на версии 8.3 управляемого приложения с интерфейсом «Такси».

            РЕЗЮМЕ: было проверены 4 в модуле формы 4 варианта в модуле объекта цыганочки с выходом.