Имя: Пароль:
1C
1C 7.7
v7: Не могу назначить тип
,
0 Melcor
 
18.10.11
20:56
Пытаюсь создать документ ПоступлениеПрочее внешней обработкой. Когда назначаю тип реквизиту счет - Док.НазначитьТип("Счет", "Счет");
Реквизит остается пустым и вследствие выдает ошибку - Док.НазначитьТип("Субконто1", Док.Счет.ВидСубконто(1));
Значение не представляет агрегатный объект (ВидСубконто)
1 Melcor
 
18.10.11
20:56
конфа - Комплексная 7.7
2 Азат
 
18.10.11
21:00
Док.НазначитьТип("Субконто1", Док.Счет.ВидСубконто(1).ТипСубконто());

прокатывает?
3 Melcor
 
18.10.11
21:03
Неа, так не прокатывает( блин, ужо мозги закипят скоро, а сегодня надо все добить(
4 Азат
 
18.10.11
21:04
Док.Счет - чему равно?
сколько субконто у счета?
5 Начинающий Программер
 
18.10.11
21:04
Попробовать Строка(Док.Счет.ВидСубконто(1)) ?
6 Melcor
 
18.10.11
21:05
ИначеЕсли строка(СчетПоКоду(СокрЛП(Докум.Счет.Код))) = "26" тогда    
           //глУстановитьТипВидРеквизита(Док,"Счет","Счет");
           Док.НазначитьТип("Счет", "Счет");
           Док.Счет = СчетПоКоду(СокрЛП(Докум.Счет.Код));
           Док.НазначитьТип("Субконто1", Док.Счет.ВидСубконто(1));
           Док.Субконто1 = ЗагрузитьСтатьиОбщепроизводственныхЗатрат(Докум.Субконто1);
       КонецЕсли;
7 Vol71
 
18.10.11
21:06
Док.Счет - неопределенный тип?
8 Melcor
 
18.10.11
21:06
Док.Счет не устанавливается, пустота, в этом и проблема
9 Melcor
 
18.10.11
21:06
да, неопределенный
10 Азат
 
18.10.11
21:06
(6) ты долбаешься? такую херню написал
11 Kreont
 
18.10.11
21:06
Док.НазначитьТип("Счет", СчетПоКоду("36.1"));
12 Азат
 
18.10.11
21:06
Док.НазначитьТип("Счет", "Счет.Основной"); - если плансчетов Основной
13 Melcor
 
18.10.11
21:08
не один из вариантов не сработал(
14 Vol71
 
18.10.11
21:09
а если поремить
Док.НазначитьТип("Счет", "Счет");
15 Melcor
 
18.10.11
21:10
так и было изначально, почему это не работает ума не приложу
16 Азат
 
18.10.11
21:11
вот я одного не пойму:

ИначеЕсли строка(СчетПоКоду(СокрЛП(Докум.Счет.Код))) = "26" тогда    
           //глУстановитьТипВидРеквизита(Док,"Счет","Счет");

           Док.НазначитьТип("Счет", "Счет");
           Док.Счет = СчетПоКоду(СокрЛП(Докум.Счет.Код));
           Док.НазначитьТип("Субконто1", Док.Счет.ВидСубконто(1));
           Док.Субконто1 = ЗагрузитьСтатьиОбщепроизводственныхЗатрат(Докум.Субконто1);
       КонецЕсли;

Если в иначе если уже заполнен док.счет, то нафига его снова переприсваивать?
17 Vol71
 
18.10.11
21:11
(15)Не понимаю, почему Док.Счет - неопределенный тип
18 Melcor
 
18.10.11
21:12
если внимательно присмотреться, можно заметить, что в иначе Докум, а не Док
19 Melcor
 
18.10.11
21:12
Потому как в конфе у Документа ПоступлениеПрочие Счет - неопределенный
20 Vol71
 
18.10.11
21:15
а если поремить
Док.НазначитьТип("Счет", "Счет");
и написать
Док.Счет = Строка(СокрЛП(СчетПоКоду(СокрЛП(Докум.Счет.Код))));
21 Melcor
 
18.10.11
21:18
да нет уж, тип реквизиту Счет от этого не назначится
22 Kreont
 
18.10.11
21:19
(12) <- точно не работает, а как план счетов именуется?
23 Melcor
 
18.10.11
21:19
Точно, Основной именуется
24 Vol71
 
18.10.11
21:19
(21)Извини, согласен, пиво дает себя знать
Счет-агрегатный тип объекта?
25 Melcor
 
18.10.11
21:20
да, агрегатный - это реквизит документа
26 Ёпрст
 
18.10.11
21:21
(0) назначать тип нужно для каждой строки документа
27 Melcor
 
18.10.11
21:22
Вот вся процедура, я может просто туплю отчаянно уже, Докум - это OLE объект из идентичной конфы, мне необходимо грубо говоря скопировать сюда этот документ


Процедура ЗагрузитьПоступлениеПрочее(Докум);  
   Док = СоздатьОбъект("Документ.ПоступлениеПрочее");

   Новый = 0;
   //Номер = НомерНаПечать(Докум);
   Если Док.НайтиПоНомеру(Докум.НомерДок, Докум.ДатаДок) =  0 Тогда
       Новый = 1;
       Док.Новый();
       Док.ДатаДок = Докум.ДатаДок;
       Док.НомерДок = Докум.НомерДок;
   КонецЕсли;
   СпрФ = СоздатьОбъект("Справочник.Фирмы");
   СпрФ.НайтиПоКоду(Докум.Фирма.Код,0);
   Док.Фирма        = СпрФ.ТекущийЭлемент();
   Док.Контрагент   = ЗагрузитьКонтрагента(Докум.Контрагент, Докум);
   Док.Договор      = ЗагрузитьДоговор(Докум.Договор, Док.Контрагент, Докум);
   Док.Валюта       = ЗагрузитьВалюту(Докум.Валюта,Докум);
   Док.УчитыватьНДС = Докум.УчитыватьНДС;
   Док.Курс           = Докум.Курс;
   Док.Кратность       = Докум.Кратность;
   Док.СуммаВклНДС  = Докум.СуммаВклНДС;
   Док.СуммаВзаиморасчетов  = Докум.СуммаВзаиморасчетов;
   Док.ДатаОплаты           = Докум.ДатаОплаты;  
   Док.НомерДокВходящий     = Докум.НомерДокВходящий;
   Док.ДатаДокВходящий      = Докум.ДатаДокВходящий;
   Док.НеВыгружать           = Докум.НеВыгружать;
   Док.Записать();
   Док.УдалитьСтроки();
   Докум.ВыбратьСтроки();
   Пока Докум.ПолучитьСтроку() = 1 Цикл
       Док.Содержание   = Докум.Содержание;
       Док.Количество   = Докум.Количество;
       Док.Цена         = Докум.Цена;
       Док.Сумма         = Докум.Сумма;
       Док.СуммаНДС     = Докум.СуммаНДС;
       Если Докум.СтавкаНДС.Идентификатор() = "БезНДС" Тогда
           Док.СтавкаНДС = перечисление.СтавкиНДС.БезНДС;
       ИначеЕсли Докум.СтавкаНДС.Идентификатор() = "НДС10" Тогда    
           Док.СтавкаНДС = перечисление.СтавкиНДС.НДС10;
       ИначеЕсли Докум.СтавкаНДС.Идентификатор() = "НДС20" Тогда    
           Док.СтавкаНДС = перечисление.СтавкиНДС.НДС20;
       ИначеЕсли Докум.СтавкаНДС.Идентификатор() = "НДС9_09" Тогда    
           Док.СтавкаНДС = перечисление.СтавкиНДС.НДС9_09;
       ИначеЕсли Докум.СтавкаНДС.Идентификатор() = "НДС16_67" Тогда    
           Док.СтавкаНДС = перечисление.СтавкиНДС.НДС16_67;
       ИначеЕсли Докум.СтавкаНДС.Идентификатор() = "НДС20_120" Тогда    
           Док.СтавкаНДС = перечисление.СтавкиНДС.НДС20_120;
       ИначеЕсли Докум.СтавкаНДС.Идентификатор() = "НДС10_110" Тогда    
           Док.СтавкаНДС = перечисление.СтавкиНДС.НДС10_110;
       ИначеЕсли Докум.СтавкаНДС.Идентификатор() = "НДС18" Тогда    
           Док.СтавкаНДС = перечисление.СтавкиНДС.НДС18;
       ИначеЕсли Докум.СтавкаНДС.Идентификатор() = "НДС18_118" Тогда    
           Док.СтавкаНДС = перечисление.СтавкиНДС.НДС18_118;
       КонецЕсли;
       
       Если строка(СчетПоКоду(СокрЛП(Докум.Счет.Код))) = "44.1.1" тогда
           Док.Счет = СчетПоКоду(СокрЛП(Докум.Счет.Код));
           Док.НазначитьТип("Субконто1", Док.Счет.ВидСубконто(1));
           Док.Субконто1 = ЗагрузитьИздержкиОбращения(Докум.Субконто1);
       ИначеЕсли строка(СчетПоКоду(СокрЛП(Докум.Счет.Код))) = "26" тогда    
           //глУстановитьТипВидРеквизита(Док,"Счет","Счет");
           Док.НазначитьТип("Счет", "Счет");
           //Док.Счет = СчетПоКоду(СокрЛП(Докум.Счет.Код));
           Док.Счет = Строка(СокрЛП(СчетПоКоду(СокрЛП(Докум.Счет.Код))));
           Док.НазначитьТип("Субконто1", Док.Счет.ВидСубконто(1));
           Док.Субконто1 = ЗагрузитьСтатьиОбщепроизводственныхЗатрат(Докум.Субконто1);
       КонецЕсли;
       
   КонецЦикла;
   
   Док.Записать();
   Если Докум.Проведен()=1 тогда
       Док.Провести();              
   КонецЕсли;
   Сообщить(?(Новый = 1, "Создан и записан документ: "+Док.ТекущийДокумент(), "Найден и изменен документ: "+Док.ТекущийДокумент()));

КонецПроцедуры
28 Melcor
 
18.10.11
21:23
Блин))) Простите, к вечеру бошка не варит уже, забыл новая строка вставить)
29 Melcor
 
18.10.11
21:24
фиг бы заметил если бы сюда код не скинул)
30 Kreont
 
18.10.11
21:24
Пока Докум.ПолучитьСтроку() = 1 Цикл
НоваяСтрока!!!
       Док.Содержание   = Докум.Содержание;
31 Злопчинский
 
18.10.11
21:24
После назначения типа "счет2 неплохо бы в поле/реквизит с типом "счет" присвоить что нибудь...
32 Kreont
 
18.10.11
21:24
(29) Мисталадчик рулит :)
33 Vol71
 
18.10.11
21:29
(29)Молодец, и решил сам, и мы узнали что речь шла о табличной части :))
34 1Сергей
 
19.10.11
10:04
(33) Почему это сам? а (26)?