Имя: Пароль:
1C
1C 7.7
v7: Фильтрация результатов запроса. КАК?
,
0 IrinaBrik
 
12.10.11
09:34
здравствуйте!

работаю с бух.итогами в режиме запроса. необходимо: рассчитать показатели субсчетов 10го счета http://i.imgur.com/D7Sbn.png для каждого из контрагентов. использую субконто "Контрагенты"...

делаю:

БИ.ИспользоватьСубконто(ВидыСубконто.Контрагенты);
БИ.ВключатьСубсчета(1, 0);
БИ.ВыполнитьЗапрос(НачДата, КонДата, "10", "20, 23, 25, 26, 44, 91, 16",,1,,1);
БИ.ВыбратьСубконто(1);
Пока БИ.ПолучитьСубконто(1) = 1 Цикл
       ДО = БИ.ДО("10.1");    //к примеру
КонецЦикла;

дело в том, что БИ.ДО("10.1") и БИ.ДО() дают один и тот же результат, а мне надо получить сумму именно по субсчету(!!)
как быть?
1 Азат
 
12.10.11
09:35
может, в том, что в БИ.ДО() параметром будет тип суммы, а не счет?

Салаго, читай СП!
2 Азат
 
12.10.11
09:35
+ БИ.ВыбратьСчет() Пока БИ.ПолучитьСчет() = 1 Цикл
3 Chum
 
12.10.11
09:36
ВыбратьСчета, ВыбратьСубсчета и т.д.
4 Guk
 
12.10.11
09:36
во-первых, надо указать страну. например, в РФ не на всех субсчетах 10 есть контрагент. во-вторых, надо прочитать инструкцию по работе с бухзапросами...
5 Креатив
 
12.10.11
09:39
(4)+ Лучше сразу конфигурацию.
6 G-Re
 
12.10.11
09:40
БИ.ИспользоватьСубКонто(-1);

БИ.ВыбратьСчета();
Пока БИ.ПолучитьСчет()=1 Цикл

КонецЦикла;
7 zak555
 
12.10.11
09:41
8 chief accountant
 
12.10.11
10:22
(7) +1
9 IrinaBrik
 
12.10.11
10:22
(1) верно, мой косяк. сама помнила про это и все равно пишу :/

(4) все читала, должно работать. по-моему дело в запросе

(7) не баян, тот вариант не работает. пишу

   БИ = СоздатьОбъект("БухгалтерскиеИтоги");
   БИ.ИспользоватьСубконто(ВидыСубконто.Номенклатура,,1,0);
   БИ.ИспользоватьКорСубконто(,,1,0);

   БИ.ВключатьСубсчета(-1,0);  
   БИ.ВыполнитьЗапрос(НачДата, КонДата, "10.8", "60.1,20,23,25,26,44,91",,2,,1);
   БИ.ВыбратьСубконто(1);  
   Пока БИ.ПолучитьСубконто(1) = 1 Цикл  
       БИ.ВыбратьКорСубконто(1);  
       Пока БИ.ПолучитьКорСубконто(1) = 1 Цикл
               сообщить(БИ.ДО());
       КонецЦикла;
   КонецЦикла;

результата - ноль. тоже самое и без вложенного цикла по КорСубконто
10 Креатив
 
12.10.11
10:34
(9)Конфигурация какая? Ты уверена, что у тебя на 10.8 есть субконто номенклатура? Может там материалы?
11 IrinaBrik
 
12.10.11
10:42
(9)
на 10.8(и других нужных мне субсчетах) два субконто - "материалы" и "места хранения". я это уже исправила, использую нужные субконто, но все равно результат запроса пустой. вдобавок мне надо сперва отбирать по поставщикам и потом считать субсчета для каждой группы материалов
12 Креатив
 
12.10.11
11:08
(11)Ещё попробуй вместо строчек с кодами счетов передавать списки значений со счетами.
А в выполнитьзапрос в типе итогов вместо 2 поставь 3(про запас).
БИ.ИспользоватьКорСубконто(ВидыСубконто.Контрагенты,,1,0)
так понятней.
Кстати, на 20, 23, 25 и 26 субконто контрагенты обычно отсутствует.
13 IrinaBrik
 
12.10.11
11:09
(10)
поправила субконто в запросе (9) - работает!

НО - мне надо сперва группировать по контрагентам, а потом для каждого из них рассчитывать субчета. сейчас наоборот - сперва субсчета, а потом по разбивка по контрагентам.

должно получиться:
контрагент1    Группа_материалов1(счет 10.1)    345.56
контрагент1    Группа_материалов2(счет 10.3)    745.78
контрагент1    Группа_материалов3(счет 10.4)    798.6
контрагент2    Группа_материалов1(счет 10.1)    200.64
контрагент2    Группа_материалов2(счет 10.2)    212.46
...
и так далее

ума не приложу, как изменить тот запрос для такого..
14 zak555
 
12.10.11
11:44
(13) что ты поправила ?
15 IrinaBrik
 
12.10.11
12:29
(14)
полностью убрала субконто "Номенклатура"
+ не использую КорСубконто - заменила субконто Контрагентов на МестаХранения (отдельные циклы для установления соотвествия)

сейчас буду писать алгоритм для обхода субсчетов - или вручную или через большое условие
16 zak555
 
12.10.11
13:24
(9) вместо ДО использовать КорКО
17 IrinaBrik
 
12.10.11
13:46
(16)но мне необходимо из результатов такого запроса:
БИ.ВыполнитьЗапрос(НачДата, КонДата, "10.8, 16.1", "60.1,20,23,25,26,44,91",,2,,1);

получить сумму: Д10.8+16.1  К60.1

не пойму как...
18 zak555
 
12.10.11
14:46
(17) очень просто

для начала распиши ВСЕ возможные проводки
19 Креатив
 
12.10.11
17:33
(17)И каждый раз после изменения кода выкладывай его сюда. Потому как догадываться, что конкретно ты изменила сложно.
20 zak555
 
12.10.11
17:35
(19) это слишком просто будет
21 IrinaBrik
 
13.10.11
07:15
(18)

проводки:
1    Д10.8+16.1  К60.1
2    Д20,23,25 К 10.8
3    Д26 К 10.8
4    Д91 К 10.8
5    Д44 К 10.8


или вот в таблице http://i.imgur.com/D7Sbn.png

и например, текущий код запроса для проводки Д10.8+16.1  К60.1:

   БИ = СоздатьОбъект("БухгалтерскиеИтоги");
   ПроизвДО = 0;
   БИ.ИспользоватьСубконто(ВидыСубконто.МестаХранения);
   БИ.ВключатьСубсчета(-1,0);
   БИ.ВыполнитьЗапрос(НачДата, КонДата, "10.1, 16.1", "60.1,20,23,25,26,44,91",,2,,1);
   БИ.ВыбратьСубконто(1);  
   Пока БИ.ПолучитьСубконто(1) = 1 Цикл  
       БИ.ВыбратьСчета();
       БИ.ПолучитьСчет(,"10.1");
       БИ.ВыбратьКорСчета();
       БИ.ПолучитьКорСчет(,"60.1");
       ПроизвДО = ПроизвДО + БИ.КорДО(); //раз

       БИ.ВыбратьСчета();
       БИ.ПолучитьСчет(,"16.1");
       БИ.ВыбратьКорСчета();
       БИ.ПолучитьКорСчет(,"60.1");
       ПроизвДО = ПроизвДО + БИ.КорДО(); //два
       
       Сообщить(ПроизвДО);
   КонецЦикла


так считает! но получается мне так каждую проводку расписывать? у меня их много и такой расчет займет много времени..
22 IrinaBrik
 
13.10.11
07:18
(21)

там опечаталась, проводка не Д10.8+16.1  К60, а Д10.1+16.1  К60
23 G-Re
 
13.10.11
09:29
(22) Сделай ПолучитьСчет() и ПолучитьКорСчет(),
Внутри этого цикла сделай, например, ТЗ с реквизитами ДТ, КТ, Сумма.
Ну а дальше анализируй эту ТЗ.
(Можно ТЗ и не делать, а анализировать в цикле, счета ведь известны БИ.Счет, БИ.КорСчет).
Нужные тебе корреспонденции для суммирования куда-нибудь запиши, например, в справочную ТЗ, чтобы в тексте не было констант.
Убери также константы из запроса, но это уже макияж.
24 IrinaBrik
 
13.10.11
09:48
>корреспонденции для суммирования куда-нибудь запиши, например, в справочную ТЗ, чтобы в тексте не было констант

вот это интересно, но пока нужно чтобы работал, потом сделаю верно

а как убрать константы из запроса? заменить их на СЗ?
25 zak555
 
13.10.11
12:22
(21) другое дело

аналитика на счёте 16.1 какая ?
26 IrinaBrik
 
13.10.11
12:37
(25) субконто по группам материалов, но это не принципиально
27 zak555
 
13.10.11
13:10
(26) т.е. на твои 10.Х и 16.1 имеют только аналитику Материалы ?
28 IrinaBrik
 
13.10.11
14:04
(27) верно
29 zak555
 
13.10.11
14:13
(28) что такое группа материалов ?
30 zak555
 
13.10.11
15:27
что-то типа того :

СЗ_МатериалыГруппы = СоздатьОбъект("СписокЗначений");
//заполняем

БИ = СоздатьОбъект("БухгалтерскиеИтоги");
БИ.ИспользоватьСубконто(ВидыСубконто.Материалы,,1);
БИ.ВключатьСубсчета(-1,-1);
БИ.ВыполнитьЗапрос(НачДата, КонДата, "10.1, 16.1", "60.1,20,23,25,26,44,91",,2,,1);

ТЗ = СоздатьОбъект("ТаблицаЗначений");
ТЗ.НоваяКолонка("Аналитика", "Справочник.Материалы");
ТЗ.НоваяКолонка("ПолученоОтКомпаний", "Число", 15, 2);
ТЗ.НоваяКолонка("СписаноПроиводство", "Число", 15, 2);
ТЗ.НоваяКолонка("СписаноУправление", "Число", 15, 2);
ТЗ.НоваяКолонка("СписаноПрочие", "Число", 15, 2);
ТЗ.НоваяКолонка("СписаноКоммерческие", "Число", 15, 2);

БИ.ВыбратьСубконто(1);
СЗ_МатериалыГруппыРазмерСписка = СЗ_МатериалыГруппы.РазмерСписка();
Для н = 1 по СЗ_МатериалыГруппыРазмерСписка Цикл  
   
   Аналитика = СЗ_МатериалыГруппы.ПолучитьЗначение(н);
   ТЗ.НоваяСтрока();
   ТЗ.Аналитика = Аналитика;
   
   Если БИ.ПолучитьСубконто(1,, Аналитика) = 0 Тогда
       Продолжить;
   КонецЕсли;
   
   БИ.ВыбратьКорСчета();
   Пока БИ.ПолучитьКорСчет() = 1 Цикл
   
       Если БИ.КорСчет = СчетПоКоду("60.1") Тогда
           ТЗ.ПолученоОтКомпаний    = БИ.КорКО(1);
       
       //....
       
       КонецЕсли;
       
   КонецЦикла;
   
КонецЦикла;
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.