Имя: Пароль:
1C
1C 7.7
v7: Подскажите - как правильно написать?
, ,
0 Невский Александр
 
16.07.11
20:52
Пишу обработку для сверки данных по регистрам УТ 11 и ТиС 9.2, делаю через OLE
Одним из пунктов идет сверка остатков по комитентам

В 7.7 написано вот так:
   ТекстЗапроса =
   "//{{ЗАПРОС(Сформировать)
   |Период с ДатаНачала по ДатаКонца;
   |Фирма            = Регистр.ПартииНаличие.     Фирма,
   |                  Регистр.ПартииОтданные.    Фирма,
   |                  Регистр.РеализованныйТовар.Фирма;
   |УпрАналитика    = Регистр.ПартииНаличие.     Фирма.УпрАналитика,
   |                  Регистр.ПартииОтданные.    Фирма.УпрАналитика,
   |                  Регистр.РеализованныйТовар.Фирма.УпрАналитика;
   |ЮрЛицо        = Регистр.ПартииНаличие.     Фирма.ЮрЛицо,
   |                  Регистр.ПартииОтданные.    Фирма.ЮрЛицо,
   |                  Регистр.РеализованныйТовар.Фирма.ЮрЛицо;
   |Номенклатура    = Регистр.ПартииНаличие.     Номенклатура,
   |                  Регистр.ПартииОтданные.    Номенклатура,
   |                  Регистр.РеализованныйТовар.Номенклатура;
   |Комитент        = Регистр.ПартииНаличие.     Партия.Поставщик,
   |                 Регистр.ПартииОтданные.    Партия.Поставщик,
   |                  Регистр.РеализованныйТовар.Договор.Владелец;
   |СтатусПартии   = Регистр.ПартииНаличие.     СтатусПартии,
   |                 Регистр.ПартииОтданные.    СтатусПартии;
   |Договор        = Регистр.ПартииНаличие.     Партия.ДоговорПоставщика,
   |                 Регистр.ПартииОтданные.    Партия.ДоговорПоставщика,
   |                  Регистр.РеализованныйТовар.Договор;
   |Цена            = Регистр.ПартииНаличие.     Партия.ЗакупочнаяЦена,
   |                 Регистр.ПартииОтданные.    Партия.ЗакупочнаяЦена,
   |                  Регистр.РеализованныйТовар.Партия.ЗакупочнаяЦена;
   |КодОперации    = Регистр.ПартииНаличие.     КодОперации,
   |                 Регистр.ПартииОтданные.    КодОперации;";
   
   ТекстЗапроса = ТекстЗапроса +
   "КолОстаток     = Регистр.ПартииНаличие.     Количество,
   |                 Регистр.ПартииОтданные.    Количество;
   |КолПродажи        = Регистр.РеализованныйТовар.Количество;";
   
   ТекстЗапроса = ТекстЗапроса +
   "Функция НачОстОстаток = НачОст(КолОстаток) Когда (СтатусПартии = СтатусПринятый);
   |Функция ПриходОстаток = Приход(КолОстаток) Когда (СтатусПартии = СтатусПринятый);
   |Функция РасходОстаток = Расход(КолОстаток) Когда (СтатусПартии = СтатусПринятый);
   |Функция КонОстОстаток = КонОст(КолОстаток) Когда (СтатусПартии = СтатусПринятый);
   |Условие (КодОперации <> глКО.ПередачаНаРеализацию);
   |Условие (КодОперации <> глКО.Перемещение);
   |Условие (КодОперации <> глКО.ПередачаВРозницу);
   |Условие (КодОперации <> глКО.ВозвратИзРозницы);
   |Условие (КодОперации <> глКО.ВозвратОтРеализатора);";
   
   ТекстЗапроса = ТекстЗапроса +
   "Функция КонОстПродажи = КонОст(КолПродажи);
   |Функция НачОстПродажи = НачОст(КолПродажи);
   |Функция ПриходПродажи = Приход(КолПродажи);
   |Функция РасходПродажи = Расход(КолПродажи);";
                               
   ТекстЗапроса = ТекстЗапроса +
   "Группировка Комитент;
   |Группировка Договор;
   |Группировка Номенклатура;
   |Группировка Цена;";

Но при OLE у меня в 8.2 выходит ошибка - не нравится "СтатусПринятый" и "Перечисление"

Переписал запрос вот таким образом:
   ТекстЗапроса =
   "//{{ЗАПРОС(Сформировать)
   |Период с "+"'31.12.10'"+ " по "+"'31.12.10'" +";
   |Фирма            = Регистр.ПартииНаличие.     Фирма,
   |                  Регистр.ПартииОтданные.    Фирма,
   |                  Регистр.РеализованныйТовар.Фирма;
   |УпрАналитика    = Регистр.ПартииНаличие.     Фирма.УпрАналитика,
   |                  Регистр.ПартииОтданные.    Фирма.УпрАналитика,
   |                  Регистр.РеализованныйТовар.Фирма.УпрАналитика;
   |ЮрЛицо        = Регистр.ПартииНаличие.     Фирма.ЮрЛицо,
   |                  Регистр.ПартииОтданные.    Фирма.ЮрЛицо,
   |                  Регистр.РеализованныйТовар.Фирма.ЮрЛицо;
   |Номенклатура    = Регистр.ПартииНаличие.     Номенклатура,
   |                  Регистр.ПартииОтданные.    Номенклатура,
   |                  Регистр.РеализованныйТовар.Номенклатура;
   |Комитент        = Регистр.ПартииНаличие.     Партия.Поставщик,
   |                 Регистр.ПартииОтданные.    Партия.Поставщик,
   |                  Регистр.РеализованныйТовар.Договор.Владелец;
   |СтатусПартии   = Регистр.ПартииНаличие.     СтатусПартии,
   |                 Регистр.ПартииОтданные.    СтатусПартии;
   |Договор        = Регистр.ПартииНаличие.     Партия.ДоговорПоставщика,
   |                 Регистр.ПартииОтданные.    Партия.ДоговорПоставщика,
   |                  Регистр.РеализованныйТовар.Договор;
   |Цена            = Регистр.ПартииНаличие.     Партия.ЗакупочнаяЦена,
   |                 Регистр.ПартииОтданные.    Партия.ЗакупочнаяЦена,
   |                  Регистр.РеализованныйТовар.Партия.ЗакупочнаяЦена;
   |КодОперации    = Регистр.ПартииНаличие.     КодОперации,
   |                 Регистр.ПартииОтданные.    КодОперации;
   
   |КолОстаток     = Регистр.ПартииНаличие.     Количество,
   |                 Регистр.ПартииОтданные.    Количество;
   |КолПродажи        = Регистр.РеализованныйТовар.Количество;
   
   |Функция НачОстОстаток = НачОст(КолОстаток) Когда (СтатусПартии.Идентификатор() = ""Т_Принятый"");
   |Функция ПриходОстаток = Приход(КолОстаток) Когда (СтатусПартии.Идентификатор() = ""Т_Принятый"");
   |Функция РасходОстаток = Расход(КолОстаток) Когда (СтатусПартии.Идентификатор() = ""Т_Принятый"");
   |Функция КонОстОстаток = КонОст(КолОстаток) Когда (СтатусПартии.Идентификатор() = ""Т_Принятый"");
   
   |Условие (КодОперации.Идентификатор() <> ""ПередачаНаРеализацию"");
   |Условие (КодОперации.Идентификатор() <> ""ПередачаВРозницу"");
   |Условие (КодОперации.Идентификатор() <> ""ВозвратИзРозницы"");
   |Условие (КодОперации.Идентификатор() <> ""ВозвратОтРеализатора"");

   |Функция КонОстПродажи = КонОст(КолПродажи);
   |Функция НачОстПродажи = НачОст(КолПродажи);
   |Функция ПриходПродажи = Приход(КолПродажи);
   |Функция РасходПродажи = Расход(КолПродажи);
   
   |Группировка Комитент;
   |Группировка Договор;
   |Группировка Номенклатура;
   |Группировка Цена;";


Подскажите - первый и второй запросы - отработают одинаково? И если нет - может кто переносил данные из 7.7 в 8.1 (8.2) через OLE - как это лучше сделать?
1 ДенисЧ
 
16.07.11
20:56
Функция НачОстОстаток = НачОст(КолОстаток) Когда (СтатусПартии = перечисление.СтатусыПартий.СтатусПринятый);
2 Невский Александр
 
16.07.11
20:57
(1) нет ... в 8.2 ошибка выходит. так пробовал
3 Невский Александр
 
16.07.11
20:57
не нравится ему слово "Перечисление"
4 ДенисЧ
 
16.07.11
20:58
гонишь....
5 andrewks
 
16.07.11
20:59
а СтатусПринятый канэш в 8.2 задаёшь? :)
EvalExpr
6 Невский Александр
 
16.07.11
21:02
(5) да, в 8.2 :)
7 Невский Александр
 
16.07.11
21:17
Подскажите пожалуйста - что я сделал не так? Переписал вот таким образом

   |Функция НачОстОстаток = НачОст(КолОстаток) Когда (СтатусПартии = "+Соединение77.EvalExpr("Перечисление.СтатусыПартии.ЗначениеПоИдентификатору(""Т_Принятый"")")+");
   |Функция ПриходОстаток = Приход(КолОстаток) Когда (СтатусПартии = "+Соединение77.EvalExpr("Перечисление.СтатусыПартии.ЗначениеПоИдентификатору(""Т_Принятый"")")+");
   |Функция РасходОстаток = Расход(КолОстаток) Когда (СтатусПартии = "+Соединение77.EvalExpr("Перечисление.СтатусыПартии.ЗначениеПоИдентификатору(""Т_Принятый"")")+");
   |Функция КонОстОстаток = КонОст(КолОстаток) Когда (СтатусПартии = "+Соединение77.EvalExpr("Перечисление.СтатусыПартии.ЗначениеПоИдентификатору(""Т_Принятый"")")+");


Выводит ошибку - {Форма.Форма.Форма(702)}: Ошибка при вызове метода контекста (Выполнить)
   Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
по причине:
Произошла исключительная ситуация (1С:Предприятие): Функция НачОстОстаток = НачОст(КолОстаток) Когда (СтатусПартии = COMОбъект <<?>> );
Запрос[31] : Ошибка в выражении 'COMОбъект'
8 Темный Эльф
 
16.07.11
21:21
(7)Соединение77.EvalExpr - возвращает COMОбъект. При конкатенации строк запроса идет преобразование к строковому типу, что и влечет за собой видимый тобой результат.
9 ДенисЧ
 
16.07.11
21:21
всё не так
10 VladZ
 
16.07.11
21:26
Хех..  Не люблю я ОЛЕ... Лучше уж прямым запросом зафигачить... И быстрее, и гемора меньше...
11 Сияющий Асинхраль
 
16.07.11
22:28
По оле в семерке работа с перечислениями несколько необычна
12 Обработка
 
16.07.11
22:33
Переноости через КД или быстрее напишешь выгрузкйо и загрузкой в текст с разделителяями.
13 andrewks
 
16.07.11
22:43
|Функция НачОстОстаток = НачОст(КолОстаток);
|Функция ПриходОстаток = Приход(КолОстаток);
|Функция РасходОстаток = Расход(КолОстаток);
|Функция КонОстОстаток = КонОст(КолОстаток);
|Условие(СтатусПартии=Перечисление.СтатусыПартии.Т_Принятый)
14 Обработка
 
16.07.11
22:49
(13) точно! не заметил код...
15 Невский Александр
 
17.07.11
08:19
(13) я вчера так писал :)

У меня в 8.2 выходит вот такая ошибка

{Форма.Форма.Форма(709)}: Ошибка при вызове метода контекста (Выполнить)
   Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
по причине:
Произошла исключительная ситуация (1С:Предприятие): Условие(СтатусПартии=Перечисление.СтатусыПартии.Т_Принятый <<?>> );    
Запрос[35] : Ошибка в выражении 'Перечисление'
16 Невский Александр
 
17.07.11
08:22
вроде нашел то, что нужно :)
И второй вариант в (0), рабочий судя по ветке
Ошибка в запросе через ОЛЕ

еще ссылку нашел Перечисления в запросе через OLE
17 Невский Александр
 
17.07.11
09:15
Подскажите пожалуйста ...

Вот теперь на этот кусок ругается  -
   |Условие (КодОперации.Идентификатор() <> ""ПередачаНаРеализацию"");
   |Условие (КодОперации.Идентификатор() <> ""ПередачаВРозницу"");
   |Условие (КодОперации.Идентификатор() <> ""ВозвратИзРозницы"");
   |Условие (КодОперации.Идентификатор() <> ""ВозвратОтРеализатора"");


Выводит при выполнении запроса ошибки вида "Значение не предствляет собой агрегатный объект (Идентификатор): 14)

14 -  это порядковый номер в перечислении, Код операции - это реквизит из регистра
18 ДенисЧ
 
17.07.11
09:17
(17) на остатках нет кода операции.
19 Невский Александр
 
17.07.11
09:18
Давно я на 7.7 не писал. А как лучше обойти, чтобы не брал с пустыми кодами операциями - добавить дополнительное условие в запрос?
20 ДенисЧ
 
17.07.11
09:19
используй Когда
21 ДенисЧ
 
17.07.11
09:20
и 77 тут ни причём. в 8ке тоже не получишь реквизиты в остатках.
22 Невский Александр
 
17.07.11
09:51
Подскажите как правильно написать проверку на пустое значение? Все перепробовал, перерыл поиск - ничего не нашел ...
23 Невский Александр
 
17.07.11
09:52
(22) + в запросе 7.7
24 andrewks
 
17.07.11
09:54
ПустоеЗначение(Х)=1
25 big
 
17.07.11
10:20
лучше написать функцию в глобальном модуле посредством которой выполнять запросы непосредственно в 7-ке, возвращая результат в параметр этой же функции. Работает быстрее и результат более прогонозируем.
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший