К списку форумов К списку тем
Регистрация    Правила    Главная форума    Поиск   
Имя: Пароль:
Рекомендовать в новости

Проблема с получением оборотов по субконто.

Гость
0 - 11.04.2012 - 15:00
Ситуевина следующая: Делаю запрос по бухитогам, в параметры подаю список счетов. И применяю метод:
Ит.ИспользоватьСубконто(,, 1);
Ит.ИспользоватьСубконто(,, 1);
(2 раза потому, что в тех счетах, которые включены в запрос нет больше 2-х субконто)
Так вот, если среди попавшихся субконто есть только оборотные, не могу получить ДО() и КО() по ним. Т.е. обход итогов по этому субконто выдает общие ДО() и КО(), а затем значения оборотных субконто но уже без сумм ДО и КО. Оборотно-сальдовая по конкретному счету разворачивается по оборотному субконто со всеми цифрами, т.е. данные есть.
Уже голову сломал где какую опцию или метод использовать, чтобы получить данные по оборотному субконто.



Гость
1 - 11.04.2012 - 15:39
Оборотные потому называются "оборотными", потому что у них нет ДО и КО. Счета, которые имеют ДО и КО, не называются "оборотными".
А забалансовые счета называются "забалансовыми", потому что не корреспондируют с "балансовыми".
Гость
2 - 11.04.2012 - 15:48
(1) А бывают оборотные счета? В смысле только с оборотами и без сальдо? Я-то про оборотные субконто речь веду. Так вот они-то как-раз только дебетовые и кредитовые обороты хранят, без начального и конечного сальдо. Чтобы это проверить достаточно сделать оборотку по 51 счету.
А насчет "забалансовых" счетов - смешно.
Гость
3 - 11.04.2012 - 15:57
2-US1C > Ну да, правильно "аналитика счетов". Сократил :)
И что смешного насчет "забалансовых"?
Гость
4 - 11.04.2012 - 16:07
(3) Причина и следствие поменяно местами. Счета, которые не включены в бухгалтерский баланс, называются забалансовыми. И вследствии этого не могут корреспондировать с балансовыми счетами.
Гость
5 - 11.04.2012 - 16:23
Ну, коли ситуацию со счетами прояснили, может быть найдется у кого-нибудь конкретный ответ по конкретной проблеме? Что-бы, как говориться, не растекаться мыслью по древу.
Гость
6 - 11.04.2012 - 16:32
4-US1C > Не совсем. Причина и следствие настолько жестко связаны, что можно и поменять местами. Да, принято наоборот ;) Но я хотел только подчеркнуть прямую связь названия со свойствами. Несколько перевернув связку "причина-следствие".
И что за "проблема"? Я как-то не вижу никакой "проблемы". Ну, есть оборотная аналитика. Что, не надо? Есть обоснование? Или как?
P.S. По древу (дереву) бежала (тикала) все-таки белка (мысь).
Гость
7 - 11.04.2012 - 16:33
мысИю по древу

Ит.ВыполнитьЗапрос(?,?,?,?,?,???)
Гость
8 - 11.04.2012 - 16:39
(6) Я к тому, что эта, безусловно интересная, тема не несет в себе ответа на поставленный вопрос. И точно с таким же успехом мы мложем обсуждать здесь "есть ли жизнь на Марсе?".
(7) Вот кусок кода с запросом к БИ:
Ит = ДБ.CreateObject("БухгалтерскиеИтоги");
Ит.Опции(0,1);
Ит.ИспользоватьПланСчетов(ДБ.ПланыСчетов.Основной) ;
Ит.ИспользоватьСубконто(,, 1);
Ит.ИспользоватьСубконто(,, 1);

Если Ит.ВыполнитьЗапрос(НачДатаО,КонДатаО,СчетаБУ,,,,"М есяц",3)=0 Тогда
Ошибка = "Нет оборотов по счетам: "+СчетаБУ+" ("+ТекущаяДата()+" "+ТекущееВремя()+")";
Таб.ВывестиСекцию("Строка");
ФлагРасчитаныБИ = 0;
Возврат;
КонецЕсли;
Гость
9 - 11.04.2012 - 16:45
8-US1C > Еще раз. Введение признака "оборотный" к аналитике счета означает отказ от начального и конечного сальдо относительно периода.
И не надо совать код. Это свойство аналитики.
Хочешь получать сальдо на конец периода? Не веди такую аналитику.
Но рекомендую перед этим посоветоваться с тем, кто понимает бухучет. Хотя бы на начальном уровне.
Гость
10 - 11.04.2012 - 16:55
(9) Код, собственно, я для roman-а выложил.
В сабже русским по белому написано, что я не могу получить ДО() и КО() по оборотному субконто, то бишь ДебетовыйОборот и КредитовыйОборот. Сейчас с лупой рассматриваю свой пост, чтобы найти хоть слово про сальдо на конец периода.
В бухучете я действительно мало что понимаю, и чем больше общаюсь с бухами, тем крепче эта мысль.
Но теперь я точно знаю, с кем я не буду советоваться по вопросам бухучета.
Гость
11 - 11.04.2012 - 17:05
10-US1C > Теперь понял. Был невнимателен, виноват.
Со смесью оборотных и необоротных итогов, действительно, есть трудности.
12 - 11.04.2012 - 17:07
в ВыполнитьЗапрос(..) параметр <ТипИтогов>
Необязательный параметр. Число — тип отбирае*мых итогов. Может принимать следующие значе*ния:

1 — остатки и обороты по счету в целом;
2 — обороты между счетами;
3 - первое и второе вместе.

По умолчанию — 1
зы
в оле желательно необходимо следует указывать все необязательные параметры...
Гость
13 - 11.04.2012 - 17:18
+11 А можно узнать, какие счета скрываются за списком СчетаБУ?
Гость
14 - 11.04.2012 - 17:33
2US1C - неправильно использовать такую конструкцию
Ит.ИспользоватьСубконто(,, 1);
Ит.ИспользоватьСубконто(,, 1);

Правильным будет в качестве периода использовать проводку, и при выборке определять счет с субконто. А оборот складировать из сумм этой проводки.
Вот пример не соображу дать :(
Гость
15 - 11.04.2012 - 19:18
(12) Дело в том, что выполняя этот же код в локальной базе, я получаю такие же траблы. Т.е. проблема не зависит от выставленного параметра "ТипИтогов".
(13) Счета и все субсчета 50, 51, 52, 55, 57, 58, 60, 62, 66, 67, 76 счетов.
(14) Дело в том, что запрос я делаю по списку счетов, поэтому не могу указывать конкретные значения видов субконто. Когда я делал запрос по каждому из перечисленных выше счетов, я указывал в ИспользоватьСубконто() персональные значения для каждого счета и в этом случае все отрабатывалось на раз. Но обработка сбора данных с 200 баз выполнялась около суток при получении данных за квартал. Потому что приходилось в цикле счетов выполнять бухзапросы, делая запрос сразу по всем нужным счетам она (обработка) справляется на порядок быстрее. Может быть, как вариант, использовать периодичность запроса - проводку. Но мне не нужна такая детализация. Поэтому это как крайний случай. То, что именно метод ИспользовтатьСубконто() здесь накосячил я понимаю. Как его образумить, вот в чем вопрос? Ведь он скрупулезно обошел все значения оборотного субконто (по которым были движения), но не выдал их засранец.
Гость
16 - 11.04.2012 - 19:32
(15)Ведь он скрупулезно обошел все значения оборотного субконто (по которым были движения) - как выполняете обход запроса?
Гость
17 - 11.04.2012 - 19:37
15-US1C > Нене... Именно, что список счетов.
Т.е. примерно так:
Ит = ДБ.CreateObject("БухгалтерскиеИтоги");
Ит.Опции(0,1);
Ит.ИспользоватьПланСчетов(ДБ.ПланыСчетов.Основной) ;
Если Ит.ВыполнитьЗапрос(НачДатаО,КонДатаО,СчетаБУ,,,, "Месяц",3)=0 Тогда
Ошибка = "Нет оборотов по счетам: "+СчетаБУ+" ("+ТекущаяДата()+" "+ТекущееВремя()+")";
КонецЕсли;
Ит.ВыбратьСчета();
Пока Ит.ПолучитьСчет()=1 Цикл
Если Ит.Счет = "ХХХ" Тогда
ИначеЕслиИт.Счет = "YYY" тогда
.......
КонецЕсли;
КонецЦикла;

Т.е. вот так, вручную почти. И использовать ТЗ для сбора оборотов, да.
Потом ТЗ свернуть, отсортировать по вкусу.
Гость
18 - 11.04.2012 - 19:42
16-Write > Если посмотришь на таблицы, которые содержат итоги и обороты... Да представишь многообразие задумок [живого] конструктора этих запросов, и что их надо движку как-то превратить в правильный запрос уже на уровне БД, то...
Не всегда у движка выходит это дело блестяще, я бы сказал :D
Гость
19 - 11.04.2012 - 19:45
(16) Вот часть кода обхода результатов запроса (немножко выкинул оттуда, чтобы не загромождать, но алгоритм я думаю понятен):
Пока Ит.ПолучитьПериод() = 1 Цикл
Ит.ВыбратьСчета();
Пока Ит.ПолучитьСчет() = 1 Цикл
Ит.ВыбратьСубконто(1);
Пока Ит.ПолучитьСубконто(1) = 1 Цикл
Ит.ВыбратьСубконто(2);
Пока Ит.ПолучитьСубконто(2) = 1 Цикл
ТЗ_БИ_С.НоваяСтрока();
ТЗ_БИ_С.Счет = Счет.Код;

СЗ_Субк = СоздатьОбъект("СписокЗначений");
Если Счет.ВидСубконто(1).Идентификатор() = "Контрагенты" Тогда
СЗ_Субк.ДобавитьЗначение("Контрагенты");
СЗ_Субк.ДобавитьЗначение(СокрЛП(Ит.Субконто(1).Наи менование));
СЗ_Субк.ДобавитьЗначение(Лев(Ит.Субконто(1).ИНН,10 ));
ИначеЕсли Счет.ВидСубконто(1).Идентификатор() = "ДвиженияДенежныхСредств" Тогда
СЗ_Субк.ДобавитьЗначение("ДвиженияДенежныхСредств" );
СЗ_Субк.ДобавитьЗначение(СокрЛП(Ит.Субконто(1).Наи менование));
СЗ_Субк.ДобавитьЗначение(СокрЛП(Ит.Субконто(1).Вид Движения.Идентификатор()));
ИначеЕсли Счет.ВидСубконто(1).Идентификатор() = "БанковскиеСчета" Тогда
СЗ_Субк.ДобавитьЗначение("БанковскиеСчета");
СЗ_Субк.ДобавитьЗначение(СокрЛП(Ит.Субконто(1).Ном ер));
СЗ_Субк.ДобавитьЗначение(СокрЛП(Ит.Субконто(1).Наи менование));
СЗ_Субк.ДобавитьЗначение(СокрЛП(Ит.Субконто(1).Бан кОрганизации.Код));
СЗ_Субк.ДобавитьЗначение(СокрЛП(Ит.Субконто(1).Бан кОрганизации.Наименование));
СЗ_Субк.ДобавитьЗначение(СокрЛП(Ит.Субконто(1).Тип Счета.Идентификатор()));
КонецЕсли;
ТЗ_БИ_С.Суб1 = ЗначениеВСтроку(СЗ_Субк);

СЗ_Субк = СоздатьОбъект("СписокЗначений");
Если Счет.ВидСубконто(2).Идентификатор() = "ДвиженияДенежныхСредств" Тогда
СЗ_Субк.ДобавитьЗначение("ДвиженияДенежныхСредств" );
СЗ_Субк.ДобавитьЗначение(СокрЛП(Ит.Субконто(2).Наи менование));
СЗ_Субк.ДобавитьЗначение(СокрЛП(Ит.Субконто(2).Вид Движения.Идентификатор()));
ИначеЕсли Счет.ВидСубконто(2).Идентификатор() = "Договоры" Тогда
СЗ_Субк.ДобавитьЗначение("Договоры");
СЗ_Субк.ДобавитьЗначение(СокрЛП(Ит.Субконто(2).Наи менование));
ИначеЕсли Счет.ВидСубконто(2).Идентификатор() = "ЦенныеБумаги" Тогда
СЗ_Субк.ДобавитьЗначение("ЦенныеБумаги");
СЗ_Субк.ДобавитьЗначение(СокрЛП(Ит.Субконто(2).Наи менование));
СЗ_Субк.ДобавитьЗначение(Дата(Ит.Субконто(2).ДатаП ринятияКУчету));
СЗ_Субк.ДобавитьЗначение(Ит.Субконто(2).Номинальна яЦена);
КонецЕсли;
ТЗ_БИ_С.Суб2 = ЗначениеВСтроку(СЗ_Субк);

ТЗ_БИ_С.ДО = Ит.ДО(1);
ТЗ_БИ_С.КО = Ит.КО(1);
КонецЦикла;
КонецЦикла;
КонецЦикла;
КонецЦикла;
Гость
20 - 11.04.2012 - 19:56
+(15)Субсчета в списке СчетаБУ передаете?
Если Ит.ВыполнитьЗапрос НачДатаО,КонДатаО,СчетаБУ,,,, "Месяц",3)=0 Тогда
- в конце 3, выбираете с валютными суммами?
(19)Выборка вроде правильно идет.
Гость
21 - 11.04.2012 - 20:03
(20) Да, все счета и субсчета в СЗ и параметром в Запрос. Выбираю с валютными суммами, поскольку там есть и валютные счета. Хочу также отметить, что сбор данных в разрезе период/счет/субконто1/субконто2 идет без проблем по всем необоротным субконто. Т.е. данные, например по 60 и 62 счету в разрезе контагентов и договоров собираются. А вот по 51 получаю общие обороты по БС и пустые обороты по сумме, но не по значениям ДДС (их он-запрос все перечисляет, которые были в проводках за период).
Гость
22 - 11.04.2012 - 20:17
21-US1C > Однако попробуй по схеме (17) Здесь будет использоваться таблица проводок, а не итогов и оборотов, что даже выйдет быстрее. Да, суммировать обороты самому надо прописать, но обороты точно получишь.
Кстати, чего субконто по столбцам ТЗ не распределишь?
Гость
23 - 11.04.2012 - 20:20
(21)А вот по 51 получаю общие обороты по БС и пустые обороты по сумме, но не по значениям ДДС (их он-запрос все перечисляет, которые были в проводках за период). - немного сумбурно, но я так понимаю как вы писали выше нулевые обороты по ДДС.
Есть у меня похожий отчет, отличие только, субсчета не указываю, а использую Ит.ВключатьСубсчета(1), и выборка идет только по сумме, обороты по всем субконто присутствуют.
Гость
24 - 11.04.2012 - 20:55
разбить счета на две группы и два запроса - общие счета и оборотный счет
и не париться
Гость
25 - 11.04.2012 - 20:57
(22) Попробую конечно, но боюсь увеличится время обработки. Все-таки сводную сумму получить сразу или все детальные записи, которые потом опять надо консолидировать. По столбцам мне не надо, ибо потом я получаю готовую проводку из ЗначениеИзСтроки.
(23) Да, все правильно - нулевые обороты. А ИспользоватьСубконто() как выглядит в отчете? Попробую применить ВключатьСубсчета(), но боюсь погоды это не сделает, ведь с обработкой субсчетов проблем не возникает.
Гость
26 - 11.04.2012 - 21:06
(24) Боюсь, громоздко будет выглядеть: двойные процедуры сбора данных в ТЗ, загрузки в ИБ из этих ТЗ. Нет конечно, если нет способа побороть этот парасик с помощью какой-нибудь опции/метода, тогда замутю с двойным запросом или детальным сбором по проводкам. Но хочется красивого и лаконичного решения. Уже вроде бы вышел из того возраста, когда делаешь лишь бы работало. Хочется некой изящности в коде, которая вызывает чувстово глубокого удовлетворения от проделанной работы.
Гость
27 - 11.04.2012 - 21:11
вместо одного запроса сбора данных - два.
остальное без изменений
Гость
28 - 11.04.2012 - 21:15
(27) Согласен.
Гость
29 - 11.04.2012 - 21:22
(27) Хотя нет, три запроса. Счета с разным набором субконто в моем списке.
Гость
30 - 13.04.2012 - 15:26
(14) Попробовал использовать период - Проводку. Все классно, все дебетовые/кредитовые обороты по оборотным субконто выводит. Одна только ложка дегтя - обработка стала собирать данные в 6 раз дольше. Буду думать дальше.
Гость
31 - 13.04.2012 - 16:37
30-US1C > "По проводкам" всегда проигрыш в скорострельности против "по периоду". Особенно когда период опирается на границы месяцев... Таблица проводок не содержит же промежуточных итогов.
Попробуй разбить запрос на два/три: по "сальдовым" и "оборотным" отдельно.
Зато "по проводкам" - универсально для любых заморочек ;)
Гость
32 - 14.04.2012 - 23:45
(31) Да, похоже единственный вариант остался в несколько запросов. Никакие методы/опции не помогли.
Гость
33 - 15.04.2012 - 16:33
(32)Попробуйте передать в списке только счета группы, и добавить перед ВыполнитьЗапрос(), ВключатьСубсчета(1), а ненужные субсчета можно отсеить проверяя их присутствие в еще одном списке значений.


К списку вопросов






Copyright ©, Все права защищены