Имя: Пароль:
1C
1C 7.7
v7: Начинающий. Как в "Выполнить.запрос(...)" учитывать корреспондирующий счет?
0 natriy85
 
09.04.13
16:20
Доброе время суток!
Предыстория такая. В конфигурацию УСН 1.3(7.70.207) в документ "ПоступлениеМПЗ" были внесены изменения, а именно: в части, где формируется проводка на дебет по счетам "МХ.1, МХ.2, МХ.3 или МХ.4" был добавлен кредит по некоему счету "ФСК" (создан вручную, забалансовый, количественный учет, пассивный, субконто1-Контрагенты, субконто2-Номенклатура).
Теперь нужно сделать отчет - сколько чего на каком складе лежит. Но потому как документы "Поступление МПЗ", введенные ранее, создавали проводку "только дебет по счету МХ.?", а теперь этот документ создает проводку "дебет по счету МХ.? - кредит по счету ФСК", то хотелось бы в отчете иметь возможность получать и общие итоги по счету "МХ.1" (пока интересует только он), и итоги в корреспонденции со счетом "ФСК".
За основу был взят стандартный отчет "ОстаткиВПродЦенах". В форму добавлен чекбокс "СУчетомФСК".

Процедура Сформировать()
   
   Если ПустоеЗначение(ВыбДата)=1 Тогда
       Предупреждение("Не указана дата формирования отчета");
       Возврат;
   КонецЕсли;
   
   Таб = СоздатьОбъект("Таблица");
   Таб.ИсходнаяТаблица("Таблица");
   
   СписокСчетов = "МХ.1";
   СписокКоррСчетов = "ФСК";
   БухИт = СоздатьОбъект("БухгалтерскиеИтоги");
   БухИт.ИспользоватьСубконто(ВидыСубконто.МестаХранения,ВыбСклад);
   БухИт.ИспользоватьСубконто(ВидыСубконто.Номенклатура,ВыбНоменклатура);
   БухИт.Опции(1,0);
   Если СУчетомФСК=1 Тогда
//Как я понял из документации, нужные мне итоги с коррсчетом
//выбираются так
       БухИт.ВыполнитьЗапрос(,ВыбДата,СписокСчетов,СписокКоррСчетов,,2,,4);
   Иначе
       БухИт.ВыполнитьЗапрос(,ВыбДата,СписокСчетов,,,,,4);
   КонецЕсли;
       
   Таб.ВывестиСекцию("Шапка");
   КолВсего = 0;
   БухИт.ВыбратьСубконто(1);  

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


Итог такой: если галочка СУчетомФСК не стоит, то отчет выводит всю информацию по счету МХ.1, а если стоит, то не выводит ничего.
Есть подозрения, что это может быть как-то связано с тем, что у счетов "МХ.1" и "ФСК" не совпадают субконто.
Как же мне быть? Чувствую, что проблема не сложно решается, но нехватка знаний и опыта не дает ухватить суть. :(

Здесь была похожая проблема - Помогите разобраться с запросом по бухгалтерским итогам (1С 7.7)
Как там посоветовали Я поменял "<ТипИтогов>" на 2, но результатов это не дало. Я так понимаю, мне тоже нужно будет использовать в подсчете не БухИт.СКД(), а БухИт.КО(), но до этого еще добраться надо, а программа в цикл даже не заходит
1 Мимохожий Однако
 
09.04.13
16:22
Стандартные отчеты чем не подходят?
2 natriy85
 
09.04.13
16:29
(1) Хотелось бы максимальной наглядности для людей, не знакомых с бухгалтерским учетом. Чтобы начальник мог ткнуть мышкой "Сформировать" и получить результат.
А какие конкретно отчеты Вы предлагаете использовать? Как я говорил, опыт у меня небольшой, поэтому и пришлось обратиться сюда к тем, у кого этого опыта больше. Поэтому я рассмотрю любые предложенные варианты решения моей задачи.
3 Cthulhu
 
09.04.13
16:51
двоешник Перестукин.
"итоги" не бывают "в корреспонденции".
"в корреспонденции" бывают "обороты".
4 natriy85
 
09.04.13
16:55
(3) Спасибо за поправку в терминологии.
Хотите сказать, что для моей задачи не корректно использовать объект "БухгалтерскиеИтоги"?
В какую сторону тогда копать?
5 Мимохожий Однако
 
10.04.13
22:37
(2)Обратись сначала к тем, кто понимает в бухгалтерском учете. А заодно и начальнику ткни туда же.
6 Cthulhu
 
10.04.13
22:41
(4): эта терминология - о сути. если нравятся только термины без понятия сути - говорить спасибо не за что. итоги по сути - сумма ВСЕХ оборотов.
если вам необходимо узнать, какая часть итогов сформировалась за счет корреспонденции с какими счетами - вам нужно собрать ВСЕ обороты в развороте по нужным аналитикам и кор.аналитикам.
добро пожаловать в ад, бэби.
7 jarett
 
10.04.13
22:46
а не идиотизм ли делать корреспонденцию между забалансовыми счетами? автору отстричь пальцы за незнание методологии 1С и БУ вообще.
8 Classic
 
10.04.13
23:08
(7)
А что конкретно мешает?
Это просто необязательно, но если какая-то корреспонденция отвечает какой-то хозоперации - то достаточно практично делать забаллансовые корсчета
9 Cthulhu
 
11.04.13
00:23
(7): а не идиоты ли придумали то, чего нет в стандартах бухгалтерии - сиречь запрет корреспонденции между забалансовыми счетами? таким "учителям" остричь голову - или на крайняк гениталии чтобы не плодили подобных себе горе-учителей.
10 zak555
 
11.04.13
00:25
> запрет корреспонденции между забалансовыми счетами


с этого момента по-подробнее
11 natriy85
 
11.04.13
13:32
(6): Благодаря вашим словам пришел к тому, что для получения нужных мне итогов по оборотам в корреспонденции с определенным счетом нужно сначала "ВыбратьСчета()", потом "ВыбратьКорСчета()" и только потом "ВыбратьСубконто()". Но написанный вложенный цикл все равно не работал без явной установки даты начала периода в ВыполнитьЗапрос().
В итоге вроде бы работающий вариант выглядит вот так:


СписокСчетов = "МХ.1";
СписокКорСчетов = "ФСК";    

БухИт = СоздатьОбъект("БухгалтерскиеИтоги");
БухИт.ИспользоватьСубконто(ВидыСубконто.МестаХранения,ВыбСклад);
БухИт.ИспользоватьСубконто(ВидыСубконто.Номенклатура,ВыбНоменклатура);  
БухИт.Опции(1,0);
Таб.ВывестиСекцию("Шапка");
КолВсего = 0;  
           
Если СУчетомФСК=1 Тогда
   БухИт.ВыполнитьЗапрос(НачДата,ВыбДата,СписокСчетов,СписокКорСчетов,,2,,4);
   БухИт.ВыбратьСчета();
   Пока БухИт.ПолучитьСчет()=1 Цикл
       БухИт.ВыбратьКорСчета();
       Пока БухИт.ПолучитьКорСчет() = 1 Цикл
           БухИт.ВыбратьСубконто(1);  
           Пока БухИт.ПолучитьСубконто(1) = 1 Цикл
               Склад = БухИт.Субконто(1);
               Таб.ВывестиСекцию("Склад");
               БухИт.ВыбратьСубконто(2);  
               Пока БухИт.ПолучитьСубконто(2) = 1 Цикл
                   Номенклатура = БухИт.Субконто(2);
                   Количество = БухИт.СКД("К");    
                   КолВсего = КолВсего + Количество;
                   Таб.ВывестиСекцию("Строка");
               КонецЦикла;
           КонецЦикла;
       КонецЦикла;
   КонецЦикла;        
Иначе
...
КонецЕсли;


Мне кажется, что это то, что нужно, но в силу своей малоопытности я не могу видеть всех возможных подводных камней.
Поэтому, если есть какие-либо замечания, прошу делиться.
12 natriy85
 
11.04.13
13:36
(11) Только я не понял, почему если вместо

Количество = БухИт.СКД("К");

поставить

Количество = БухИт.КорДО();

или

Количество = БухИт.КорКО;

- в результате количество везде равно 0?
13 jarett
 
11.04.13
13:46
(11) если уж упоротость побеждает, то чего ИспользоватьСубконто()? может все-таки судя по (0) КорСубконто?
14 natriy85
 
11.04.13
14:31
(13) Вы имеете ввиду, что вместо ИспользоватьСубконто() лучше применять ИспользоватьКорСубконто()?
Я понимаю так:
У счета "МХ.1" субконто1-Номенклатура, субконто2-Места хранения;
у созданного счета "ФСК" субконто1-Контрагенты, субконто2-Номенклатура;
мне нужны итоги по счету "МХ.1" либо рассчитанные в корреспонденции со всеми счетами, либо в корреспонденции только со счетом "ФСК" - в обоих случаях в разрезе мест хранения и номенклатуры - это как раз субконто1 и субконто2 счета "МХ.1". Поэтому я и пишу ИспользоватьСубконто().
А ИспользоватьКорСубконто() нужно будет применить, если результат в данном случае нужен будет еще и в разрезе Контрагентов.
Или я вас не правильно понял? Или я не правильно понял 1С?
15 Cthulhu
 
11.04.13
18:54
(10): забалансовый счет МОЖЕТ быть использован в проводках без корреспонденции. что не отменяет того, что может и использовать (ибо по сути такая проводка эквивалентна паре проводок без корреспонденции).
16 Classic
 
11.04.13
19:07
(15)
Не эквивалентна
17 Cthulhu
 
11.04.13
19:49
(16): ну, с твоей точки зрения - м.б.
ноо мы ведь не о ней.
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.