Имя: Пароль:
1C
1C 7.7
v7: ИспользоватьСУбконто() Можно ли указать два списка субконто?
0 CepeLLlka
 
02.09.11
13:15
Дело вот в чём.. просто мне кажется что так нельзя в принципе.. а я мучаюсь.. вот..

Итак.. вот код.. смотрите пока.. а внизу я распишу всё..


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



Мне нужно получить итоги по определённому кол-ву контрагентов, а у одного из этих контрагентов нужно получить итоги ещё в разрезе второго  субконто -Договоры, но не все договоры нужны.. а только две группы договоров..  и вот как только я передаю в Итоги.ИспользоватьСубконто(ВидыСубконто.Договоры,СписокДоговоров,1,1);
Этот списокДоговоров то у меня сразу слетает первая выборка.. и в ней остаётся только контрагент кому принадлежат эти договоры.. что я не так делаю и как мне выполнить мою задачу?
1 zak555
 
02.09.11
13:16
это я удачно защёл
2 zak555
 
02.09.11
13:16
что в
СписокКонтрагентов
СписокДоговоров

???
3 CepeLLlka
 
02.09.11
13:17
(2) Там списки же :)

Там ссылки на элементы справочников..
4 zak555
 
02.09.11
13:18
> Если Итоги.Субконто(1).Код = "00003670" Тогда


это на куя ?
5 CepeLLlka
 
02.09.11
13:20
Я же написал в (0) Что по одному из контрагентов мне нужно получить ещё данные в разрезе договоров..
6 zak555
 
02.09.11
13:21
(5) а по другим контрам не надо ?
7 CepeLLlka
 
02.09.11
13:22
(6) Да.. по другим не надо..
8 zak555
 
02.09.11
13:23
в СписокДоговоров этот договор ?
9 CepeLLlka
 
02.09.11
13:23
Поэтому в СписокДоговоров я передаю ссылки на две группы договоров контрагента 00003670

Списки получаю вот так.. но дело не в них 100%
Функция ЗаполнитьСпискиДоговора(Список)
       СпрКонтрагенты = СоздатьОбъект("Справочник.Контрагенты");
       СпрКонтрагенты.НайтиПоКоду("00003670");
       СпрДоговора = СоздатьОбъект("Справочник.Договоры");
       СпрДоговора.ИспользоватьВладельца(СпрКонтрагенты.ТекущийЭлемент());
       СписокДоговоров = СоздатьОбъект("СписокЗначений");
       Для н = 1 По Список.РазмерСписка() Цикл
           СпрДоговора.НайтиПоКоду(Список.ПолучитьЗначение(н),1);
           СписокДоговоров.ДобавитьЗначение(СпрДоговора.ТекущийЭлемент());
       КонецЦикла;
       
   Возврат СписокДоговоров;    
КонецФункции
10 VladZ
 
02.09.11
13:23
(0)  За такое могут и поколотить:
Если Итоги.Субконто(1).Код = "00003670" Тогда

Сделай список контрагентов, которых нужно развернуть по договорам.
11 Рэйв
 
02.09.11
13:25
(0)Не фильтруй договоры по спискам вообще. Просто у нужных контров выбирай второе субконто и проверяй на вхождение в нужный список есл тебе не все договоры нужны
12 zak555
 
02.09.11
13:26
Итоги = СоздатьОбъект("БухгалтерскиеИтоги");
   Итоги.ИспользоватьСубконто(ВидыСубконто.Контрагенты,СписокКонтрагентов,1,0);
   Итоги.ИспользоватьСубконто(ВидыСубконто.Договоры,,1,0);
   Итоги.ВыполнитьЗапрос(ДатаОтчета,ДатаОтчета,Счет);
   Итоги.ВыбратьСубконто(1);
       Пока Итоги.ПолучитьСубконто(1) = 1 Цикл  
           
           Если Итоги.Субконто(1) = СпрКонтрагентыПоКотромуНужноРазвернуть Тогда
               Итоги.ВыбратьСубконто(2);
               Пока Итоги.ПолучитьСубконто(2) = 1 Цикл
                   //Проверка на просроченность..

                   Сообщить(Строка(Итоги.СКД(2))+"   "+Итоги.Субконто(2).Наименование+"   "+Итоги.Субконто(2).Код+"ОЛололо это НИва в разрезе договоров");
               КонецЦикла;
           КонецЕсли;
           
           Сообщить(Строка(Итоги.СКД(1))+"   "+Итоги.Субконто(1).Наименование+"   "+Итоги.Субконто(1).Код);
       КонецЦикла;
13 CepeLLlka
 
02.09.11
13:28
(11)Да, но тогда у меня будут выбирать лишние данные из базы.. разве это правильно?
14 CepeLLlka
 
02.09.11
13:33
(11) То есть вот так?

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


                   Сообщить(Строка(Итоги.СКД(2))+"   "+Итоги.Субконто(2).Наименование+"   "+Итоги.Субконто(2).Код+"ОЛололо это НИва в разрезе договоров");
                    КонецЕсли;
               КонецЦикла;
           КонецЕсли;
           
           Сообщить(Строка(Итоги.СКД(1))+"   "+Итоги.Субконто(1).Наименование+"   "+Итоги.Субконто(1).Код);
       КонецЦикла;
15 zak555
 
02.09.11
13:34
CepeLLlka ты в упор не видишь (12) ?
16 CepeLLlka
 
02.09.11
13:40
А что в (12) Ты изменил проверку на нужного контрагента из проверки по коду, на проверку по ссылке, и больше ничего..
В твоём варианте у меня на экран вылезут все договора, а мне нужны только группы..

И ещё.. хотелось бы узнать почему по Коду то нельзя?
Сообщаю что у меня каждый контрагент и каждый договор в этой обработке отбирается только по коду.. так как я не знаю как мне открыть форму подбора из базы подключённой по OLE
17 Рэйв
 
02.09.11
13:43
(13)Ну не мильён же договоров у тебя на каждом контре?:) Вроде не 80-е прошлого века чтобы каждый байт памяти экономить.
18 CepeLLlka
 
02.09.11
13:47
Ну а так-то.. значит я был прав, да? Так нельзя организовать выборку как я захотел, да?
19 Рэйв
 
02.09.11
13:49
(18)Можно. Вбей в один список все договора. При выборе второго субконто лишние, которые не относятся к текущему контру, отсеятся
20 zak555
 
02.09.11
13:49
повторяю вопрос : что в (2) ?!"
21 CepeLLlka
 
02.09.11
13:49
А никто не может показать рабочий код по отрытию формы подбора из базы подключённой по OLE?
22 CepeLLlka
 
02.09.11
13:50
(20)
Там два объекта типа - СписокЗначений в которых перечислены контрагенты и договоры..
23 CepeLLlka
 
02.09.11
13:50
Всем большое спасибо.. я пошёл кушать и на курсы.. скоро покажу сертификат вам :)
24 Рэйв
 
02.09.11
13:50
(21) Формы не ходют по оле.

Можешь заполнить ТЗ и попытаться через нее организовать подбор
25 zak555
 
02.09.11
13:52
(22) там элементы или группы ?
26 zzerro
 
02.09.11
13:55
(0) Так в чем пробелма то?
Создай еще один объект бухитоги для того контрагента с отбором по субконто1 и разворачиванием по субконто2
27 zak555
 
02.09.11
14:00
(26) не учи плохому
28 CepeLLlka
 
02.09.11
22:25
(27) Это не плохое.. мне кажется, что это лучше чем выбирать ненужные данные из базы.. ведь таким запросом я выбираю договора всех контрагентов указанных в ИспользоватьСубконто1
29 CepeLLlka
 
02.09.11
22:26
Спокойной ночи.. я спатки.
30 zak555
 
03.09.11
08:30
(28) всё делается ОДНИМ запросом
31 CepeLLlka
 
03.09.11
08:38
Эээм... так одним мы лишние данные будем выбирать.. или я чего-то не понимаю? :(
32 zak555
 
03.09.11
08:46
напиши нормально :
1. исходные полные данные
2. что нужно получить
33 CepeLLlka
 
03.09.11
08:51
В (0) Всё написано.. могу дать ещё саму обработку.

http://files.mail.ru/YRFT9W

Но тут я по OLE подключаюсь к базе..
34 zak555
 
03.09.11
08:58
заново : в СписокДоговоров группы договоров ? о_О
35 CepeLLlka
 
03.09.11
08:58
(34) Да.. что такого?
36 zak555
 
03.09.11
08:59
но тебе нужно эти договора развернуть ?
37 CepeLLlka
 
03.09.11
08:59
(36) Нет не нужно.. мне нужно у одного контрагента получить данные по этим двум группам..
38 zak555
 
03.09.11
09:00
т.е. СписокДоговоров только группы ?
39 CepeLLlka
 
03.09.11
09:00
Но так нельзя.. потому что (19) Он сказал что отсеятся..
40 CepeLLlka
 
03.09.11
09:01
(38) лол.. смотри (35) Ты издеваешься?

Там ссылки на две группы договоров..
41 zak555
 
03.09.11
09:01
что за счёт ?
42 CepeLLlka
 
03.09.11
09:05
(41) 76,5
43 zak555
 
03.09.11
09:06
Итоги = СоздатьОбъект("БухгалтерскиеИтоги");
   Итоги.ИспользоватьСубконто(ВидыСубконто.Контрагенты,СписокКонтрагентов,1,0);
   Итоги.ИспользоватьСубконто(ВидыСубконто.Договоры,,1,1);
   Итоги.ВыполнитьЗапрос(ДатаОтчета,ДатаОтчета,Счет,,,1,,5);
   
   Итоги.ВыбратьСубконто(1);    
   Пока Итоги.ПолучитьСубконто(1) = 1 Цикл  
       
       Если Итоги.Субконто(1) = СпрКонтрагентыПоКотромуНужноРазвернуть Тогда
           Для н = 1 по СписокДоговоров.РазмерСписка() Цикл
               Если Итоги.ПолучитьСубконто(2,,СписокДоговоров.ПолучитьЗначение(н)) = 0 Цикл
                   Сообщить("что-то с группой");
                   Продолжить;
               КонецЕсли;

               Сообщить(Строка(Итоги.СКД(2))+"   "+Итоги.Субконто(2).Наименование+"   "+Итоги.Субконто(2).Код+"ОЛололо это НИва в разрезе договоров");
           КонецЦикла;
       КонецЕсли;
       
       Сообщить(Строка(Итоги.СКД(1))+"   "+Итоги.Субконто(1).Наименование+"   "+Итоги.Субконто(1).Код);
   КонецЦикла;
44 Banned
 
03.09.11
09:10
facepalm.png
45 CepeLLlka
 
03.09.11
09:13
(43) Чем в 14 тебя не устроило?

Ты понимашь что таким образом мы выбираем из базы договора всех контрагентов...
А если будет два запроса.. то мы выбереём только контрагентов в одно случае.. а в другом только одного контрагента и все его договора..
46 zak555
 
03.09.11
09:21
теперь пошло : тогда да - два запроса =)

   Поз = СписокКонтрагентов.НайтиЗначение(СпрКонтрагентыПоКотромуНужноРазвернутьДоговоры);
   Если Поз > 0 Тогда
       СписокКонтрагентов.УдалитьЗначение(Поз);
   КонецЕсли;
   
   Итоги = СоздатьОбъект("БухгалтерскиеИтоги");
   Итоги.ИспользоватьСубконто(ВидыСубконто.Контрагенты,СписокКонтрагентов,2,0);        
   Итоги.ВыбратьСубконто(1);    
   Пока Итоги.ПолучитьСубконто(1) = 1 Цикл  
       Сообщить(Строка(Итоги.СКД(1))+"   "+Итоги.Субконто(1).Наименование+"   "+Итоги.Субконто(1).Код);        
   КонецЦикла;
   
   Итоги.ИспользоватьСубконто(ВидыСубконто.Договоры,СписокДоговоров,2,0);
   Итоги.ВыполнитьЗапрос(ДатаОтчета,ДатаОтчета,Счет,,,1,,5);
   Итоги.ВыбратьСубконто(1);    
   Пока Итоги.ПолучитьСубконто(1) = 1 Цикл
       Сообщить(Строка(Итоги.СКД(2))+"   "+Итоги.Субконто(2).Наименование+"   "+Итоги.Субконто(2).Код+"ОЛололо это НИва в разрезе договоров");    
   КонецЦикла;
47 zak555
 
03.09.11
09:23
кстати, скд у АП - свернутое сальдо
48 Cthulhu
 
03.09.11
14:20
(47): даладно?.. )))
Независимо от того, куда вы едете — это в гору и против ветра!