Имя: Пароль:
1C
1C 7.7
v7: Функция ВыполнитьЗапрос() в SQL работает как-то странно
,
0 Chesnok
 
13.02.14
12:49
Пример:
Есть счет "ПНБ" - Забалансовый, Субконто1: Сотрудники (только обороты),
и счет 97.2 - Субконто1: Сотрудники, Субконто2 - Статьи затрат.

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

В DBF версии все работает правильно, а в SQL не выдает оборот по счету ПНБ. Конфигурации двух баз полностью идентичны. В чем дело?
1 varelchik
 
13.02.14
14:58
для начала озвучь релиз платформы.
2 NS
 
13.02.14
15:01
БИт.ИспользоватьСубконто(); - это что такое?
3 Chesnok
 
13.02.14
16:39
(1) Релиз 27
(2) Если у счетов разные субконто можно не указывать вид субконто явно.
4 NS
 
13.02.14
16:53
(3) По второй строке - гугл по твоему этому утверждению дает ссылку только на твой пост. Ты уверен что это документированная возможность, работающая под SQL?
5 NS
 
13.02.14
17:00
Для начала попробуй без этой строчки и без цикла по второму субконто в первой части условия.
6 KishMish
 
13.02.14
17:07
(4) в поиске по бухгалтерии для РК я нашел 4 упоминания ИспользоватьСубконто()
в закрытии периода, в списании товаров и сверке итогов.

но (5) согласен, насчет использования с СКЛ. СКЛ к неопределенным значениям относится не так, как ДБФ.
7 Chesnok
 
14.02.14
00:10
(4) А вы видели разные желтые книги "Описание встроенного языка" по DBF и SQL? ИспользоватьСубконто() есть и в типовых конфигурациях. Без второго субконто никак нельзя, поэтому запрос я давно разбил на два. Меня интересовал сам принцип, почему в DBF работает, а в SQL нет.
8 NS
 
14.02.14
02:34
(7) Зачем-же хамить?
9 МихаилМ
 
14.02.14
11:12
10 Chum
 
14.02.14
11:16
(2) это вполне нормально.

(0) а не пробовал перед

> БИт.ПолучитьСубконто(1,, Сотрудник)

добавить:

БИт.ВыбратьСубконто(1); // тут как бы нужно открыть выборку для начала
11 Chum
 
14.02.14
11:17
ну и перед

> Если БИт.ПолучитьСубконто(2,, Константа.СубконтоЗарплаты) = 1 Тогда

добавить:

БИт.ВыбратьСубконто(2);
12 Chesnok
 
14.02.14
11:24
(10) Работает и без этого
13 BarakuzA
 
14.02.14
12:08
в скул и дбв - одни и теже запросы работают по разному.
14 NS
 
14.02.14
13:02
(7) В ЖКК ни слова нет о том что в режиме запроса первый параметр в использоватьсубконто() необязателен.

В типовых есть, и в регламентной отчетности есть, но я не нашел ни одного примера с балансом и забалансом в одном запросе, и ни одного примера с когда в запросе участвуют счета с количеством субконто меньше, чем число вызовов использоватьсубконто(). Хотя может просто плохо искал, ну или потому что так под SQL в принципе не будет работать.
В типовых подобные случаи разбивают на несколько запросов.
15 NS
 
14.02.14
13:02
(12) Если работает, зачем ветку создал?
16 Chesnok
 
14.02.14
13:24
(15) Вам просто поговорить охота?
1. Имелось ввиду что метод БИт.ПолучитьСубконто(1,, Сотрудник) работает и без предварительной выборки БИт.ВыбратьСубконто(1)
2. "но я не нашел ни одного примера с балансом и забалансом в одном запросе" - зачем тогда существует метод Опции(<ВклЗабалансСуммы>,<ВклОборотСубкСуммы>): Назначение:
Устанавливает режим включения сумм в итоги.
Параметры:
<ВклЗабалансСуммы> - признак включения в итоги сумм по забалансовым счетам. Число: 0 - не включаются суммы по забалансовым счетам; 1 - включаются суммы по забалансовым счетам.
И скажу Вам по секрету, что можно и без использования этого метода, при явном указании в параметрах бух.запроса забалансовых счетов вместе с балансовыми, все прекрасно работает.
3. "и ни одного примера с когда в запросе участвуют счета с количеством субконто меньше, чем число вызовов использоватьсубконто()" - а это практика, в DBF все прекрасно работает.
17 NS
 
14.02.14
13:31
(16) Ни одного сочетания использоватьсубконто() без параметров, и выполнитьЗапрос() с балансом и забалансом одновременно.

И при чем тут ДБФ? И черные и белые запросы работают в дбф и sql по-разному, и имеют свои глюки и свои особенности работы недокументированных фич. Тебе уже только ленивый об этом не написал.
18 parasite12
 
14.02.14
13:32
Проставь все запятые в запросе

БИт.ВыполнитьЗапрос(НачПредМес, КонПредМес, "97.2,ПНБ",,,,);
как-то так
19 Chai Nic
 
14.02.14
13:34
Бухитоги работают по разному в dbf и sql, это факт. Но это разное поведение проявляется только в "граничных" случаях, когда программист надеется на умолчания. Решение одно - указывать всё явно, и не делать "получить" без "выбрать".
Ошибка? Это не ошибка, это системная функция.