Заполняет поля вводимого документа. Каким образом она работает?
В первую очередь она пытается найти реквизиты с совпадающим именем, а затем с совпадающим типом данных (это не относится к числовым реквизитам). Реквизиты типа «Документ» заполняются ссылкой на документ основание.
Код процедуры:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
Процедура АвтоВводНаОсновании(Док,ДокОснование) Экспорт Перем ТаблОсн[100]; МетаДок=Метаданные.Документ(Док.Вид()); МетаОсн=Метаданные.Документ(ДокОснование.Вид()); Для инд=1 По МетаДанные.ОбщийРеквизитДокумента() Цикл Рекв=МетаДанные.ОбщийРеквизитДокумента(инд); Если Рекв.Тип="Документ" Тогда Док.УстановитьАтрибут(Рекв.Идентификатор,ДокОснование.ТекущийДокумент()); Иначе Док.УстановитьАтрибут(Рекв.Идентификатор,ДокОснование.ПолучитьАтрибут(Рекв.Идентификатор)); КонецЕсли; КонецЦикла; Для инд=1 По МетаДок.РеквизитШапки() Цикл Рекв=МетаДок.РеквизитШапки(инд); Если Рекв.Тип="Документ" Тогда Док.УстановитьАтрибут(Рекв.Идентификатор,ДокОснование.ТекущийДокумент()); Продолжить КонецЕсли; Рекв=Рекв.Идентификатор; Если МетаОсн.РеквизитШапки(Рекв).Выбран()=1 Тогда Док.УстановитьАтрибут(Рекв,ДокОснование.ПолучитьАтрибут(Рекв)); Иначе Тип=МетаДок.РеквизитШапки(инд).Тип; Вид=МетаДок.РеквизитШапки(инд).Вид; Если Тип="Число" Тогда Продолжить КонецЕсли; Для к=1 По МетаОсн.РеквизитШапки() Цикл Если (МетаОсн.РеквизитШапки(к).Тип=Тип) И (МетаОсн.РеквизитШапки(к).Вид=Вид) Тогда Док.УстановитьАтрибут(Рекв,ДокОснование.ПолучитьАтрибут(МетаОсн.РеквизитШапки(к).Идентификатор)); КонецЕсли; КонецЦикла; КонецЕсли; КонецЦикла; Для инд=1 По МетаДок.РеквизитТабличнойЧасти() Цикл Рекв=МетаДок.РеквизитТабличнойЧасти(инд).Идентификатор; ТаблОсн[инд]=""; Если МетаОсн.РеквизитТабличнойЧасти(Рекв).Выбран()=1 Тогда ТаблОсн[инд]=Рекв; Иначе Тип=МетаДок.РеквизитТабличнойЧасти(инд).Тип; Вид=МетаДок.РеквизитТабличнойЧасти(инд).Вид; Если Тип="Число" Тогда Продолжить КонецЕсли; Для к=1 По МетаОсн.РеквизитТабличнойЧасти() Цикл Если (МетаОсн.РеквизитТабличнойЧасти(к).Тип=Тип) И (МетаОсн.РеквизитТабличнойЧасти(к).Вид=Вид) Тогда ТаблОсн[инд]=МетаОсн.РеквизитТабличнойЧасти(к).Идентификатор КонецЕсли; КонецЦикла; КонецЕсли; КонецЦикла; ДокОснование.ВыбратьСтроки(); Пока ДокОснование.ПолучитьСтроку()=1 Цикл Док.НоваяСтрока(); Для инд=1 По МетаДок.РеквизитТабличнойЧасти() Цикл Если ПустоеЗначение(ТаблОсн[инд])=0 Тогда Док.УстановитьАтрибут(МетаДок.РеквизитТабличнойЧасти(инд).Идентификатор,ДокОснование.ПолучитьАтрибут(ТаблОсн[инд])) КонецЕсли; КонецЦикла; КонецЦикла; // здесь можно сделать что-нибудь вроде //Док.Автор=ПолноеИмяПользователя(); //УстановитьНомерДокумента(Док); КонецПроцедуры |