Имя: Пароль:
1C
1С v8
Как присвоить значение реквизиту документа Субконто1?
,
0 vit48
 
31.07.18
08:46
Бухгалтерия предприятия, редакция 3.0 (3.0.63.15)
1С:Предприятие 8.3 (8.3.10.2580)


Подскажите пожалуйста по сути вопроса. С БП редко приходится иметь дело.
Делаю стандартную внешнюю обработку для ввода на основании.

Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначенияМассив, СозданныеОбъекты) Экспорт
       ......
        СоздатьНовыйДокумент(Элемент, ДанныеФормы);
        КопироватьДанныеФормы(ДанныеФормы, ФормаДок.Объект);
        ФормаДок.Открыть();
        
    КонецЦикла;

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

&НаСервере
Процедура СоздатьНовыйДокумент(Элемент, НовыйОбъект)
    
    ДокументОбъект = ДанныеФормыВЗначение(НовыйОбъект, Тип("ДокументОбъект.ТребованиеНакладная"));
    
    ЗаполнитьПоЗаказу(Элемент.Ссылка, ДокументОбъект);
    
    ДокОснование = Элемент.Ссылка;

    ЗначениеВДанныеФормы(ДокументОбъект, НовыйОбъект);
    
КонецПроцедуры
    
&НаСервере
Процедура ЗаполнитьПоЗаказу(ДанныеЗаполнения, ДокументОбъект) Экспорт
    
    Если ТипЗнч(ДанныеЗаполнения) = Тип("ДокументСсылка.РеализацияТоваровУслуг") Тогда
        Основание = ДанныеЗаполнения;
    Иначе
        возврат;
    КонецЕсли;
    
    ДокументОбъект.Дата = ТекущаяДата();
    ДокументОбъект.Организация = Основание.Организация;
    ДокументОбъект.Склад = Справочники.Склады.НайтиПоКоду("000000001");
    ДокументОбъект.СчетЗатрат = ПланыСчетов.Хозрасчетный.ИздержкиОбращения;
    


    ДокументОбъект.Субконто1 = Справочники.СтатьиЗатрат.ПрочиеЗатраты;
    .......

все работает как всегда, кроме субконто1 (тип Характеристика.ВидыСубконтоХозрасчетные)
1 Мимохожий Однако
 
31.07.18
08:52
Отладчик что показывает в реквизите после присвоения? Это субконто1 соответствует или нет выбранному счету затрат?
2 Cyberhawk
 
31.07.18
09:03
Что-то ты ввод на основании совсем не по технологии БСП делаешь
3 vit48
 
31.07.18
09:20
да. на 44 счете первое субконто СтатьиЗатрат. так что должно вроде бы все нормально быть. смущает тип поля. может с ним как-то по другому надо?
4 vit48
 
31.07.18
09:25
(2) а где можно посмотреть как правильно по версии создателей БСП? вроде бы как по инструкциям

Функция СведенияОВнешнейОбработке() Экспорт
    
    ПараметрыРегистрации = Новый Структура;
    МассивНазначений = Новый Массив;
    МассивНазначений.Добавить("Документ.РеализацияТоваровУслуг");
    
    ПараметрыРегистрации.Вставить("Вид", "СозданиеСвязанныхОбъектов");
    ПараметрыРегистрации.Вставить("Назначение", МассивНазначений);
    ПараметрыРегистрации.Вставить("Наименование", """Требование-накладная"" на основании документа ""Реализация услуг""");
    ПараметрыРегистрации.Вставить("Версия", "1.0");
    ПараметрыРегистрации.Вставить("БезопасныйРежим", Истина);
    ПараметрыРегистрации.Вставить("Информация", "Дополнительная обработка к документу Реализация товаров и услуг");
    
    ТаблицаКоманд = ПолучитьТаблицуКоманд();
    
    ДобавитьКоманду(ТаблицаКоманд, "Требование-накладная (доп)", "Требование-накладная (доп)", "ВызовКлиентскогоМетода", Истина);
    
    ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);
    
    Возврат ПараметрыРегистрации;
КонецФункции
5 vit48
 
31.07.18
09:26
в форме

&НаКлиенте
Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначенияМассив, СозданныеОбъекты) Экспорт

    //Переберем все выбранные документы на основании, которых будет созданы другие новые документы
    //В нашем случае это всего один документ "уатДоверенность"
    Для каждого Элемент из ОбъектыНазначенияМассив Цикл

        //Получая форму объекта создаваемого документа, мы уже создаем этот объект
        ФормаДок = ПолучитьФорму("Документ.ТребованиеНакладная.ФормаОбъекта");

        //Далее мы получаем объект только, что созданной формы и помещаем её в переменную
        //В объекте содержатся все реквизиты (элементы) формы
        ДанныеФормы = ФормаДок.Объект;

        //Мы помещаем объект формы в переменную,
        //так как должны передать её в процедуру на сервере,
        //где нельзя изменять объект формы, зато можно править переменную содержащую его
        СоздатьНовыйДокумент(Элемент, ДанныеФормы);

        //После выполнения процедуры на сервере мы получаем изменную переменную ДанныеФормы,
        //которую необходимо передать в уже созданную нами форму
        КопироватьДанныеФормы(ДанныеФормы, ФормаДок.Объект);

    //ОписаниеТипа = Новый ОписаниеТипов("СправочникСсылка.СтатьиЗатрат"); // вместо СправочникСсылка.Контрагенты ваше значение
    //ФормаДок.Субконто1.ОграничениеТипа = ОписаниеТипа; //вместо ПолучательПСТретьеЛицо ваш реквизит
    //ФормаДок.Субконто1.Значение = ОписаниеТипа.ПривестиЗначение(ДанныеФормы.Субконто1);
    
        //Открываем результат выполнения обработки
        ФормаДок.Открыть();
        
    КонецЦикла;

КонецПроцедуры
6 vit48
 
31.07.18
09:28
Но такое ощущение что при открытии формы не отрабатывают обработчик ПриОткрытии (доступность элементов не пропадает например). А при повторном открытии все уже как должно быть. Но на проведении документа это не сказывается.
7 Радим1987
 
31.07.18
09:34
Если не ошибаюсь у реквизита Субконто1 тип Характеристика.ВидыСубконтоХозрасчетные, если так значит Субконто1[ПланыВидовХарактеристрик.ВидыСубконто.Чтотто] разве не так?
8 Cyberhawk
 
31.07.18
09:35
(4) На ИТС документация по подсистеме БСП "Дополнительные отчеты и обработки"
9 vit48
 
31.07.18
09:40
(7) пробовал
    //ДокументОбъект.Субконто1[ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.СтатьиЗатрат] = Справочники.СтатьиЗатрат.ПрочиеЗатраты;    

но почему-то не получилось
10 Радим1987
 
31.07.18
09:43
у ПланыСчетов.Хозрасчетный.ИздержкиОбращения есть такое субконто?
11 vit48
 
31.07.18
09:45
да
12 Мимохожий Однако
 
31.07.18
09:53
(9) Как-то ты загнул в одну строчку.
Проверь тип реквизита Субконто1 перед присвоением значения.
Почему делаешь заполнение из процедуры на клиенте, а не на сервере?
13 vit48
 
31.07.18
09:59
процедура на сервере. на клиенте просто получение и открытие формы.
14 vit48
 
31.07.18
10:31
Справочник.СтатьиЗатрат.ПрочиеЗатраты  Предопределенный элемент отсутствует в данных

ерунда какая-то, почему-то этот элемент не видится как предопределенный. Но он есть. и сам подбирается после точки. с любым другим все заработало. Спасибо за помощь.
15 vit48
 
31.07.18
10:32
(8) Спасибо. ИТСку почитаю сегодня.
Закон Брукера: Даже маленькая практика стоит большой теории.