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), а ненужные субсчета можно отсеить проверяя их присутствие в еще одном списке значений. | |
| Интернет-форум Краснодарского края и Краснодара |