Имя: Пароль:
1C
1С v8
БухгалтерскиеИтоги через ОЛЕ
0 const1C
 
17.12.12
11:18
Подключаюсь к базе через ОЛЕ - все ОК

V7 = Новый COMОбъект("V77s.Application");
Подключение = V7.Initialize(V7.RMTrade, "/d" + ПутьКБазе + " /n" + Логин + " /p" + Пароль, "NO_SPLASH_WINDOW");

Создаю бухгалтерские итоги:

БухИт = V7.createobject("БухгалтерскиеИтоги");

Субконто:

ВидыСубконто.Вставить("ОсновныеСредства", V7.EvalExpr("ВидыСубконто.ОсновныеСредства"));
БухИт.ИспользоватьСубконто(ВидыСубконто.ОсновныеСредства);

Выполняю запрос - все ОК:
Рез = БухИт.ВыполнитьЗапрос(НачалоДня(НачПериода), КонецДня(КонПериода), V7.EvalExpr("СчетПоКоду(""МЦ.01"")"));

Обращаюсь к результату запроса:
БухИт.ВыбратьСубконто(ВидыСубконто.ОсновныеСредства);
   Пока БухИт.ПолучитьСубконто(ВидыСубконто.ОсновныеСредства) = 1 Цикл
...
КонецЦикла

Вот тут проблема. Не выбирает он ничего. Делаю аналогичный запрос в семерке:

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

Все работает, возвращает ОК.
Подскажите, пожалуйста, где я накасячил. Не вижу, хоть убейте.
1 hhhh
 
17.12.12
11:23
а что такое ВидыСубконто?
2 const1C
 
17.12.12
11:25
Это Список значений, куда я сбрасываю Виды субконто. Для большего соответствия кода 8.2 и 7.7
3 hhhh
 
17.12.12
11:28
(2) просто не видно, где он определяется. Если это список значений восьмерочный, то это прикол.
4 Ёпрст
 
17.12.12
11:30
>>>БухИт.ИспользоватьСубконто(ВидыСубконто.ОсновныеСредства);

зачет, ага
5 Ёпрст
 
17.12.12
11:31
мот того, олешны-е виды субконто будешь пихать в параметры запроса и в выборку ?
6 const1C
 
17.12.12
11:32
(3)(4) Мне приятно, что вы это оценили :)
Извиняюсь если вас это смущает. Но проблема не в этом.
После выполнения запроса, в объект БухИт, определены значения: БухИт.Счет, БухИт.НачДата, БухИт.КонДата.
7 const1C
 
17.12.12
11:32
(5) Да именно так я и деляю
БухИт.ВыбратьСубконто(ВидыСубконто.ОсновныеСредства);
Пока БухИт.ПолучитьСубконто(ВидыСубконто.ОсновныеСредства) = 1 Цикл
...
8 const1C
 
17.12.12
11:33
(5) Ну еще вот так:

СубконтоОЛЕ = БухИт.Субконто(ВидыСубконто.ОсновныеСредства);
9 const1C
 
17.12.12
11:39
Ну так что ни у кого идей нет, где тут собака зарылась?
10 Ёпрст
 
17.12.12
11:46
ВидыСубконто-Это чей объект ?
подумай.
11 Ёпрст
 
17.12.12
11:47
не надо восьмерошные объекты пихать в семерошные.
12 Ёпрст
 
17.12.12
11:47
жалко, что тебя матом еще оля не посылает за это..
Так, тихо мстит не выполнением.
13 const1C
 
17.12.12
11:56
(10) Читайте выше. И я не "восьмерошные" типы пихаяю в "семерошные", а наоборот. Создаю обёртку в восьмерке, для легкого обращения к объектам в семерке. И вслучае, если я сую, что-то не так и не туда "оля", посылает и именно матами
14 const1C
 
17.12.12
11:57
(11) И да с другими счетами работает. Таким образом я штук пять подобных обработок написал. Проблем не возникало
15 const1C
 
17.12.12
12:03
Интересный факт. Написал тестовую обработку с таким кодом:

V7 = Новый COMОбъект("V77s.Application");
Подключение = V7.Initialize(V7.RMTrade, "/d" + ПутьКБазе + " /n" + Логин + " /p" + Пароль, "NO_SPLASH_WINDOW");
БухИт = V7.createobject("БухгалтерскиеИтоги");
БухИт.ИспользоватьСубконто(V7.EvalExpr("ВидыСубконто.ОсновныеСредства"));
БухИт.ВыполнитьЗапрос(НачалоДня(НачПериода), КонецДня(КонПериода),"МЦ.01");
БухИт.ВыбратьСубконто(V7.EvalExpr("ВидыСубконто.ОсновныеСредства"));
Пока БухИт.ПолучитьСубконто(V7.EvalExpr("ВидыСубконто.ОсновныеСредства")) Цикл
  Сообщить("ОК");
  Прервать;
КонецЦикла;

Отработало как надо. Вставляю тот же код в основную обработку. Отсылают культурно в одно место.
16 Михаил Козлов
 
17.12.12
12:17
Получаю остатки по 41 сч. Работает:
 Ит = ОФ.БД.CreateObject("БухгалтерскиеИтоги");
 Счет.НайтиПоКоду("41.1");
 начДата = КонецДня(тд+1);
 конДата = ТекущаяДата();
 итогиЕсть = Ит.Рассчитать(начДата, конДата, "41.1", 0);
 Если итогиЕсть=1 Тогда
   Ит.ИспользоватьСубконто(Счет.ВидСубконто(1),0 ,1,0);
   ДатаНачV7 = ФОРМАТ(начДата, "ДФ=dd.MM.yy");
   ДатаКонV7 = ФОРМАТ(конДата, "ДФ=dd.MM.yy");
   Ит.ВыполнитьЗапрос(ДатаНачV7, ДатаНачV7, Счет);
   Ит.ВыбратьСубконто(1,0,0,0,0,"",0);
   ПОКА Ит.ПолучитьСубконто(1) = 1 Цикл
   тмц = Ит.Субконто(1);
   начОстатокБух = Ит.СНД("К");
   конОстатокБух = Ит.СКД("К");
   начСтоимостьБух = Ит.СНД("С");
   КонецЦикла;
КонецЕсли;

Если не ошибаюсь, важно, чтобы все параметры в ВыбратьСубконто были заполнены.
17 Ёпрст
 
17.12.12
12:18
(13) :))))))))))))))))))))))))))))))))

>>> И я не "восьмерошные" типы пихаяю в "семерошные"

ну-ну..
18 Ёпрст
 
17.12.12
12:18
(16) не ошибаетесь, только лучше пихать Неопределенно
19 Ёпрст
 
17.12.12
12:19
в не заполненые параметры.
20 const1C
 
17.12.12
12:19
Разобрался... Оказывается где-то в дебрях кода устанавливаю левый вид субконто.
21 Ёпрст
 
17.12.12
12:20
(20) не где-то в в (0)
22 Ёпрст
 
17.12.12
12:21
Не где-то, а в (0) посте
23 const1C
 
17.12.12
12:22
(17)

ВидыСубконто = Новый СписокЗначений;
ВидыСубконто.Вставить("ОсновныеСредства", V7.EvalExpr("ВидыСубконто.ОсновныеСредства"));


ВидыСубконто.ОсновныеСредства - ОЛЕ ВидыСубконто. Аналог V7.EvalExpr("ВидыСубконто.ОсновныеСредства"). И передает именно его. А не тип ЭлементСпискаЗначений
24 const1C
 
17.12.12
12:22
(22) между строками

ВидыСубконто.Вставить("ОсновныеСредства", V7.EvalExpr("ВидыСубконто.ОсновныеСредства"));
БухИт.ИспользоватьСубконто(ВидыСубконто.ОсновныеСредства);

И

Выполняю запрос - все ОК:
Рез = БухИт.ВыполнитьЗапрос(НачалоДня(НачПериода), КонецДня(КонПериода), V7.EvalExpr("СчетПоКоду(""МЦ.01"")"));
25 const1C
 
17.12.12
12:24
(16)

Ит = ОФ.БД.CreateObject("БухгалтерскиеИтоги");
....

Интересная строчка, что это?
26 hhhh
 
17.12.12
12:39
(24) всё-таки правильнее

ВидыСубконто = V7.createobject("СписокЗначений");

зачем лишние неприятности на свою задницу?
27 Ёпрст
 
17.12.12
12:41
правильнее, это не использовать зарезервированные ключевые слова в своих поделках в качестве переменных.
28 const1C
 
17.12.12
13:15
(26) Таким образом я теряю возможность обращения к элементам списка по идентификатору. Ибо в семерки такой возможности нет.
(27) Правильно использовать зарезервированные ключевые слова - плохо. Но кто сказал что "ВидыСубконто" - это зарезервированное слово в 1С8.2?
29 const1C
 
17.12.12
13:19
Такая конструкция была создана мной по двум причинам:
1. Избежать постоянного вызова функции EvalExpr,
2. Придать большее визуальное соответствие коду семерки и восьмерки (ибо привык я к ней очень и подключаюсь, всетаки, именно к оле, да и просто удобно)