Имя: Пароль:
1C
1C 7.7
v7: БухИтоги
,
0 st31
 
28.09.11
19:56
Вроде тема не нова,но неожиданно не получил желаемого результата. Надо выбрать все материалы по всем субсчетам счета 10, у которых есть сальдо на определенную дату и дальше полученные данные по определеному принципу представить в отчете.
Вариант решения с  использованием 2 матрицы: в одной заполнить все субсчета счета 10, а во второй сформировать все материалы, у которых ненулевое СКД() на конец конкретной даты. Тут же будет учитываться на каком субсчете хранится информация по материалам.
ТЗсч=СоздатьОбъект("ТаблицаЗначений");    
ТЗсч.НоваяКолонка("Счет","Строка");
ТЗсч.НоваяКолонка("Наименование","Строка");
Сч = СоздатьОбъект("Счет.Основной" );
БазовыйСчет = СчетПоКоду("10");
Если БазовыйСчет.ЭтоГруппа()=1 Тогда
 Сч.ИспользоватьРодителя(БазовыйСчет);
 Сч.ВыбратьСчета();
   Пока Сч.ПолучитьСчет()=1 Цикл
     Если Сч.ЭтоГруппа()=1 Тогда
   Продолжить;
     КонецЕсли;
     ТЗсч.НоваяСтрока();
     ТЗсч.Счет=Сч.ТекущийСчет().Код;
     ТЗсч.Наименование=Сч.ТекущийСчет().Наименование;
   КонецЦикла;
КонецЕсли;
   
   
Ит = СоздатьОбъект("БухгалтерскиеИтоги");
Ит.ВключатьСубсчета(1,0);
Ит.ИспользоватьСубконто(ВидыСубконто.Материалы,,1,0);
Ит.ИспользоватьСубконто(ВидыСубконто.МестаХранения,МестоХранения,2,0);
Ит.ИспользоватьСубконто(ВидыСубконто.Сотрудники,Сотрудник,2,0);
ТЗсч.ВыбратьСтроки();
Пока ТЗсч.ПолучитьСтроку()=1 Цикл
 Ит.ВыполнитьЗапрос(,ВыбКонПериода,ТЗсч.Счет,,,1,,5);
 Ит.ВыбратьСубконто(1);
    Пока Ит.ПолучитьСубконто(1)=1 Цикл
   ТЗ.НоваяСтрока();
   ТЗ.Материал=Ит.Субконто(1);
   ТЗ.Счет=Ит.счет;
   ТЗ.СчетСпр=ТЗ.Материал.СубСчет10;
   ТЗ.Количество=Ит.СКД(3);
   ТЗ.СуммаСНДС=Ит.СКД(1);
    КонецЦикла;
КонецЦикла;
При запуске выскакивает сообщение:
Ит.ВыбратьСубконто(1);
...(43)}: Данная операция допустима только в режиме запроса по аналитике !
Взглянув свежим взглядом подскажите,пжл, в чем у меня проблема.
1 2S
 
28.09.11
19:58
хрня какая-то

БазовыйСчет = СчетПоКоду("10");
Если БазовыйСчет.ЭтоГруппа()=1 Тогда

вообще тихий ужас
ТЗсч.ВыбратьСтроки();
Пока ТЗсч.ПолучитьСтроку()=1 Цикл
 Ит.ВыполнитьЗапрос(,ВыбКонПериода,ТЗсч.Счет,,,1,,5);
2 st31
 
28.09.11
20:05
(1)у меня это кусок кода, где часть информации берется с других мест. Поэтому есть такие вставки. Без них код был бы непонятным. материалы- часть поставленной задачи.
Что касается бухзапроса, то в приведенном коде по очереди выбираются субсчета счета 10 для запроса по поиску материалов. И в чем тут ужас?
3 st31
 
28.09.11
20:15
(1) В моем примере в матрице ТЗсч формируются все субсчета не только по счету 10, но и по счету 41 и др. Просто неудачно привел пример. Эта часть кода была нужна для второй половины прописанного кода и там все работает.
Меня же интересует именно вторая половина, в которой делается бухзапрос и в которой выскочило сообщение: "Ит.ВыбратьСубконто(1);
...(43)}: Данная операция допустима только в режиме запроса по аналитике !
Взглянув свежим взглядом подскажите,пжл, в чем у меня проблема именно в этом запросе.
4 Темный Эльф
 
28.09.11
20:17
Ит = СоздатьОбъект("БухгалтерскиеИтоги");
Ит.ВключатьСубсчета(-1,);
Ит.ИспользоватьСубконто(ВидыСубконто.Материалы,,1);
Ит.ИспользоватьСубконто(ВидыСубконто.МестаХранения,МестоХранения,2);
Ит.ИспользоватьСубконто(ВидыСубконто.Сотрудники,Сотрудник,2);
 Ит.ВыполнитьЗапрос(,ВыбКонПериода,"10");
 Ит.выбратьсчета();
 Пока Ит.ПолучитьСчет()=1 цикл
 Ит.ВыбратьСубконто(1);
 Пока Ит.ПолучитьСубконто(1)=1 Цикл
   ТЗ.НоваяСтрока();
   ТЗ.Материал=Ит.Субконто(1);
   ТЗ.Счет=Ит.счет;
   ТЗ.СчетСпр=ТЗ.Материал.СубСчет10;
   ТЗ.Количество=Ит.СКД(3);
 КонецЦикла;
 КонецЦикла;
5 Темный Эльф
 
28.09.11
20:22
(3)Ошибка возникает потому, что ты вызываешь в цикле только ВыполнитьЗапрос, а нужно повторить все, начиная с СоздатьОбъект. Кроме того, возможно и необходимо переписать код так, чтобы запрос выполнялся только один раз.
6 zak555
 
28.09.11
20:23
(0) что на 10 счёте делает сотрудник ?
7 st31
 
28.09.11
20:25
(4)Благодарю милого Эльфа за практическую подсказку.
Я пытался понять почему в моем случае я не получил нужный результат?
Ок, увидел ответ, сейчас попробую.
(6) специфика настройки для предприятий, с которыми работаю. Это МОЛ, третье субконто.
8 st31
 
28.09.11
20:38
(5) Кода поставил строки
ТЗсч.ВыбратьСтроки();
Пока ТЗсч.ПолучитьСтроку()=1 Цикл
перед
Ит = СоздатьОбъект("БухгалтерскиеИтоги"); -
все прошло нормально.
Если делать через один запрос то счета надо ввести в виде "СпискаЗначений" и после БухЗапроса выбирать значения из созданного "СпискаЗначений". Мне кажется, это не даст желаемого результата.

Тут уже чисто спортивный интерес. Как сделать так, чтобы запрос по счетам выполнялся не по всем субсчетам, а только по тем субсчетам,  которые были сформированы и занесены  в ТЗсч. И при этом было соблюдено условие, что запрос делается только один раз?
9 zak555
 
28.09.11
20:39
(7) учёт по молу сумовой и по количеству ?
10 miki
 
28.09.11
20:42
(8)
>>Тут уже чисто спортивный интереc

выгрузи ТЗ в СЗ, который передашь 3-им параметром в запрос.
11 st31
 
28.09.11
20:43
Ок
12 Cthulhu
 
28.09.11
20:45
(10): практика показывает, что лучше фильтр по счетам задать строкой, состоящей из кодов счетов, разделенных запятыми.
13 st31
 
28.09.11
20:46
(10) это в таком виде
Ит.ВыполнитьЗапрос(,ВыбКонПериода,СЗ,,,1,,5);
14 st31
 
28.09.11
20:49
(10,12) и перебирать значение списка в цикле перед
Ит.ВыбратьСубконто(1);
Пока Ит.ПолучитьСубконто(1)=1 Цикл
Я правильно понял?
15 miki
 
28.09.11
20:49
(12)хз, возможно.
Из списка сделать строку тоже не проблема.
16 st31
 
28.09.11
20:49
(9)Количественно-Суммовой учет
17 miki
 
28.09.11
20:51
(14)тебе же дали готовый код в (4).
Впиши список субсчетов (хоть в виде СЗ, хоть в виде строки) вместо "10".
18 zak555
 
28.09.11
21:00
(16) у местаХранения только сумовой ?
19 Cthulhu
 
28.09.11
21:04
(18): вообще-то обычно - только количественный. )))
20 Cthulhu
 
28.09.11
21:05
(17): ну и выбратьсчета+покаполучитьсчет...
21 zak555
 
28.09.11
21:07
(19) ну тогда
при использовании
ИспользоватьСубконто(ВидыСубконто.Материал)
ИспользоватьСубконто(ВидыСубконто.МХ)
ИспользоватьСубконто(ВидыСубконто.Сотрудник)

авто может забыть про сумму в принципе =)
22 st31
 
28.09.11
22:38
Всем спасибо