Имя: Пароль:
1C
1C 7.7
v7: Помогите передать список субконто в ИспользоватьСубконто по ОЛЕ
0 CepeLLlka
 
29.08.11
23:08
Парни.. подскажите пожалуйста как мне получить правильный список субконто?

У меня так сделано -
Процедура ПолучитьИтогиПОП(ВидСубконто,СписокКонтрагентов,Счет)
   ИтогиПОП = БазаОле.CreateObject("БухгалтерскиеИтоги");
   ИтогиПОП.ИспользоватьСубконто(ВидСубконто,СписокКонтрагентов,1);
   ИтогиПОП.ВыполнитьЗапрос(ДатаОтчета,ДатаОтчета,Счет,,,1,,"С");
   ИтогиПОП.ВыбратьСубконто(1);
       Пока ИтогиПОП.ПолучитьСубконто(1) = 1 Цикл
       
       Сообщить(Строка(ИтогиПОП.СКД())+ИтогиПОП.Субконто().Наименование);
       //Сообщить(Ит.СКД());
   КонецЦикла;



А список я получаю вот так - нахожу их по коду типа.. и как в мануале делаю..

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


Но пишет - ИтогиПОП.ИспользоватьСубконто(ВидСубконто,СписокКонтрагентов,1);
Плохой тип переменной
1 CepeLLlka
 
29.08.11
23:09
Если убираю СписокКонтрагентов, то всё ок..

Но мне же нужно отбирать только нужные мне.. как получить список нужных мне значений? Помогите пожалуйста.. я уже много сам гуглил и мистил.. честно честно..
2 smaharbA
 
29.08.11
23:09
ОЛЕ ОЛЕво
3 CepeLLlka
 
29.08.11
23:10
(2) :) о_О Пивко каждый вечер? Или чё за веселье?

Я кстати сёдня был на первых 4ёх часах по 8.2
ппц.. у меня ведёт не классная тётка с большими сиськами, а какой-то паренёк..
4 smaharbA
 
29.08.11
23:10
Спр = БазаОле.CreateObject("Справочник.Контрагенты");
СписокКонтрагентов = БазаОле.CreateObject("СписокЗначений");
Для н = 1 По Список.РазмерСписка() Цикл
       Спр.НайтиПоКоду(Список.ПолучитьЗначение(н));
   СписокКонтрагентов.ДобавитьЗначение(Спр.ТекущийЭлемент());
КонецЦикла;
5 smaharbA
 
29.08.11
23:11
(3) не пью
6 CepeLLlka
 
29.08.11
23:11
Я так хотел попробовать.. но мне показалось это глупым.. ща сек.. проверю...
7 CepeLLlka
 
29.08.11
23:11
И я не пью :) Редко очень..
8 smaharbA
 
29.08.11
23:11
(6) глупость в (0)
9 CepeLLlka
 
29.08.11
23:12
(8) Пчму? Чё глупо то? :(
Так учит миста.. я сам в панике..

http://mista.ru/articles1c/ole.htm
10 smaharbA
 
29.08.11
23:12
+ и Счет тоже ОЛЕ
11 CepeLLlka
 
29.08.11
23:15
(10) Неенененее.. я же ему строкой передаю.. вроде всё ок..
У меня счёт получается так -

ПолучитьИтогиПОП(ВидСубконтоКонрагентыПОП,СписокСубконтоКонтрагентыПОП,"76.5");
12 CepeLLlka
 
29.08.11
23:15
Спасибо тебе большое.. вроде всё прокатило.. ща сверю только..
13 CepeLLlka
 
29.08.11
23:17
Кстати.. ты не знаешь что мне дадут после курсов?
Справку? Я хочу хотя бы профессионала сдать.. трудно это, да?
14 CepeLLlka
 
29.08.11
23:26
Беда.. отладчиком проверяю.. добавляет в список мне элементы те что я хочу.. а итоги выводит по другим.. вот чудеса то..
15 smaharbA
 
30.08.11
06:45
ВидСубконто = БазаОле.ВидыСубконто.Контрагенты;

и желательно

ИтогиПОП.ИспользоватьСубконто(ВидСубконто,СписокКонтрагентов,1,0);
ИтогиПОП.ВыполнитьЗапрос(ДатаОтчета,ДатаОтчета,Счет,ПолучитьПустоеЗначение(),ПолучитьПустоеЗначение(),1,ПолучитьПустоеЗначение(),"С");
16 CepeLLlka
 
30.08.11
06:46
хМм... ща попробую..
17 CepeLLlka
 
30.08.11
06:46
Лол :) Будто бы и не ложились нифига :)
18 smaharbA
 
30.08.11
06:56
+
ВыбратьСубконто(1,0,0,0,0,ПолучитьПустоеЗначение(),0)
ПолучитьСубконто(1,ПолучитьПустоеЗначение(),ПолучитьПустоеЗначение())
СКД(1)

хотя может и не повлияет, но по оле нужно привыкнуть передавать все параметры
19 CepeLLlka
 
30.08.11
07:01
(18) :( Пичальки..  всё ввёл.. но всё равно выбирает не пойми как... кстати пока спал приснилось что так криво выбирает потому что есть ещё субконто договора что ли..  уже снится этот 1С :)

Лан.. наработе догуглю чай.
20 CepeLLlka
 
30.08.11
11:02
(18) Всё у меня норм оказывается.. просто это я фишара глупый..

А не подскажете следующий момент..

По группе если делаешь отчёт.. то ведь он итог по группе получает тем что просто складывает все субконто, да?

То есть если я в список субконто добавлю группу.. у меня итог по группе не отработает ведь, да?
21 ЧеловекДуши
 
30.08.11
11:04
ОЛЕ Зло, бросай заниматься этим :)
22 CepeLLlka
 
30.08.11
11:18
(21) Дак я то бы бросил.. просто сказали сделать.. вот и делаю..

А ты знаешь ответ на (20)? Итог по группе самому формировать, да? Он в базе сам отдельно не хранится? Или всё же можно как-то его получить?
23 CepeLLlka
 
30.08.11
11:50
Такой я фиш.. ппц.. нужно было поставить флаг ПоГруппам = 1
24 CepeLLlka
 
01.09.11
12:58
Всё же никак не могу доделать то что начал..
У меня трабла такая.. получаю черел ОЛЕ остатки.. и вот по 1му субконто всё норм.. а когда начинаю делать выборку по второму.. у меня вобще даже первых получает только одно из списка.. никак не пойму почему..

Вот это работает

роцедура ПолучитьИтогиПОП(ВидСубконто,СписокКонтрагентов,СписокДоговоров,Счет)
   //Для н = 1 По СписокКонтрагентов.РазмерСписка() Цикл
   //    Сообщить(Строка(СписокКонтрагентов.ПолучитьЗначение(н)));
   //КонецЦикла;
   ИтогиПОП = БазаОле.CreateObject("БухгалтерскиеИтоги");
   ИтогиПОП.ИспользоватьСубконто(ВидСубконто,СписокКонтрагентов,2,1);
   //ИтогиПОП.ИспользоватьСубконто(БазаОле.ВидыСубконто.Договоры,,2,1);
   ИтогиПОП.ВыполнитьЗапрос(ДатаОтчета,ДатаОтчета,Счет,1,"С");
   ИтогиПОП.ВыбратьСубконто(1);
   Пока ИтогиПОП.ПолучитьСубконто(1) = 1 Цикл
           //Если ИтогиПОП.Субконто(1).Код = "00003670"     Тогда
           //    ИтогиПОП.ВыбратьСубконто(2);
           //    Пока ИтогиПОП.ПолучитьСубконто(2) = 1 Цикл
           //        Сообщить(Строка(ИтогиПОП.СКД(2))+ИтогиПОП.Субконто(2).Наименование+ИтогиПОП.Субконто(2).Код+"ОЛололо это НИва в разрезе договоров");    
           //    КонецЦикла;
           //КонецЕсли;
       
       Сообщить(Строка(ИтогиПОП.СКД(1))+ИтогиПОП.Субконто(1).Наименование+ИтогиПОП.Субконто(1).Код);
       //Сообщить(Ит.СКД());
   КонецЦикла;


А вот это не работает



Процедура ПолучитьИтогиПОП(ВидСубконто,СписокКонтрагентов,СписокДоговоров,Счет)
   //Для н = 1 По СписокКонтрагентов.РазмерСписка() Цикл
   //    Сообщить(Строка(СписокКонтрагентов.ПолучитьЗначение(н)));
   //КонецЦикла;
   ИтогиПОП = БазаОле.CreateObject("БухгалтерскиеИтоги");
   ИтогиПОП.ИспользоватьСубконто(ВидСубконто,СписокКонтрагентов,2,1);
   ИтогиПОП.ИспользоватьСубконто(БазаОле.ВидыСубконто.Договоры,,2,1);
   ИтогиПОП.ВыполнитьЗапрос(ДатаОтчета,ДатаОтчета,Счет,1,"С");
   ИтогиПОП.ВыбратьСубконто(1);
   Пока ИтогиПОП.ПолучитьСубконто(1) = 1 Цикл
           //Если ИтогиПОП.Субконто(1).Код = "00003670"     Тогда
           //    ИтогиПОП.ВыбратьСубконто(2);
           //    Пока ИтогиПОП.ПолучитьСубконто(2) = 1 Цикл
           //        Сообщить(Строка(ИтогиПОП.СКД(2))+ИтогиПОП.Субконто(2).Наименование+ИтогиПОП.Субконто(2).Код+"ОЛололо это НИва в разрезе договоров");    
           //    КонецЦикла;
           //КонецЕсли;
       
       Сообщить(Строка(ИтогиПОП.СКД(1))+ИтогиПОП.Субконто(1).Наименование+ИтогиПОП.Субконто(1).Код);
       //Сообщить(Ит.СКД());
   КонецЦикла;

Всего лишь начинаю выбирать ещё одно субконто.. и всё..
25 Ёпрст
 
01.09.11
13:01
(24) И чего, есть с пустым субконто Договоры у тебя ?
26 CepeLLlka
 
01.09.11
13:06
(25) С пустым? В смысле?

Вобщем я убрал Фильтр по группам в

ИтогиПОП.ИспользоватьСубконто(БазаОле.ВидыСубконто.Договоры,,2,1);

И всё сейчас заработало.
Вобщем я привёл эту строку вот этому значению.

ИтогиПОП.ИспользоватьСубконто(БазаОле.ВидыСубконто.Договоры,,1);

И заработало.. но выводятся все субконто.. а мне нужно чтобы выводил только те что в списке я ему передал бы..
Но как только я подставляю список.. снова всё перестаёт работать..
27 CepeLLlka
 
01.09.11
13:12
(25) Ёпрст3... ты же умный.. подскажи мне что не так.. я уверен, ты точно знаешь..
28 Ёпрст
 
01.09.11
13:20
(27) я не вижу конкретного субконто в строке
ИспользоватьСубконто(БазаОле.ВидыСубконто.Договоры,,1);

вот и спрашиваю, у тебя с пустым субконто проводки лепятся ?
29 Ёпрст
 
01.09.11
13:23
+28 это при флаге 2, если че..
30 CepeLLlka
 
01.09.11
13:30
Ну да.. флаг 2 я убрал..

А конкретное субконто есть..
Просто то, что я напишу тебе в это поле переменную ничего не даст..
31 CepeLLlka
 
01.09.11
13:30
ВОт как я получаю список нужных мне субконто
32 CepeLLlka
 
01.09.11
13:31
//Коды групп договоров ООО Нива - Монолит


КодыДоговорыПОПНива = СоздатьОбъект("СписокЗначений");
       КодыДоговорыПОПНива.ДобавитьЗначение("000024");
       КодыДоговорыПОПНива.ДобавитьЗначение("000025");



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


И вызываю её

СписокСубконтоДоговораПОП = ЗаполнитьСпискиПОПДоговора(КодыДоговорыПОПНива);
33 CepeLLlka
 
01.09.11
13:34
Я когда просто указываю этот список в ИспользоватьСубконто()

То у меня по первому субконто почему то начинает получать только одно субконто.. а у меня их там ололол
34 CepeLLlka
 
01.09.11
13:40
хМм... нашёл в чём дело то вроде.. у меня пчму то не находит он договора по этим кодам.. вот в этом месте..

СпрОле.НайтиПоКоду(Список.ПолучитьЗначение(н));
35 Ёпрст
 
01.09.11
13:44
(34) флаг поставь, чтоб искал во всем справочнике, а не в пределах подчинения. (если конечно, нумерация не в пределах подчинения)
36 CepeLLlka
 
01.09.11
13:49
Спасибо огромное.. ты мой бог..

Вроде отбирает.. вечером доделаю.. поехал на учёбу 8.2 в НН
Курс от Раруса :)
37 CepeLLlka
 
02.09.11
10:13
Снова вернулся к своим баранам.. что-то нифига так и не получилось.. сейчас у меня такой код-


роцедура ПолучитьИтогиПОП(ВидСубконто,СписокКонтрагентов,СписокДоговоров,Счет)
   //Для н = 1 По СписокКонтрагентов.РазмерСписка() Цикл
   //    Сообщить(Строка(СписокКонтрагентов.ПолучитьЗначение(н)));
   //КонецЦикла;
   ИтогиПОП = БазаОле.CreateObject("БухгалтерскиеИтоги");
   ИтогиПОП.ИспользоватьСубконто(ВидСубконто,СписокКонтрагентов,1,1);
   ИтогиПОП.ИспользоватьСубконто(БазаОле.ВидыСубконто.Договоры,СписокДоговоров,1,1);
   ИтогиПОП.ВыполнитьЗапрос(ДатаОтчета,ДатаОтчета,Счет,1,"С");
   ИтогиПОП.ВыбратьСубконто(1);
   Пока ИтогиПОП.ПолучитьСубконто(1) = 1 Цикл
           Если ИтогиПОП.Субконто(1).Код = "00003670"     Тогда
               ИтогиПОП.ВыбратьСубконто(2);
               Пока ИтогиПОП.ПолучитьСубконто(2) = 1 Цикл
                   Сообщить(Строка(ИтогиПОП.СКД(2))+"   "+ИтогиПОП.Субконто(2).Наименование+"   "+ИтогиПОП.Субконто(2).Код+"ОЛололо это НИва в разрезе договоров");    
               КонецЦикла;
           КонецЕсли;
       
       Сообщить(Строка(ИтогиПОП.СКД(1))+"   "+ИтогиПОП.Субконто(1).Наименование+"   "+ИтогиПОП.Субконто(1).Код);
       //Сообщить(Ит.СКД());
   КонецЦикла;


И выводится только почему-то разрез одного контрагента - "00003670"

Не могу понять почему :(
38 CepeLLlka
 
02.09.11
11:04
Вот так всё работает

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


А если подставляю свой список значений во втором случае ИспользоватьСубконто, то в выборке первого субконто у меня остаётся только "00003670"... пчму так?
39 CepeLLlka
 
02.09.11
11:41
Попробовал локально из базы такие итоги получить.. и ничё не получилось.. а я думал проблема в OLE

А проблема в моей голове наверное..
40 CepeLLlka
 
02.09.11
11:51
Ну подскажите же кто-нибудь...

ВОт как я стал делать..

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

И тоже самое.. как только список сую этот.. так сразу первая выборка работать не хочет..
41 CepeLLlka
 
02.09.11
12:32
Будьте добры, покажите пример когда где в БухгалтерскиеИтоги используются два субконто и оба они отбираются по спискам, а не все..
42 CepeLLlka
 
02.09.11
12:43
Никто не дружит уже со мной :(
43 CepeLLlka
 
02.09.11
12:53
Ок.. создам новую тему.. может кто отпишет..
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс