Переключение на Главную Страницу Страницы: [1] 2  ОтправитьПечать
Очень популярная тема (более 25 ответов) Ошибка класса AccountsRecordset (число прочтений - 6107 )
Dushak
Junior Member
**
Отсутствует


Кто как программирует,
так и ест.

Сообщений: 19
Местоположение: Благовещенск
Зарегистрирован: 13. Июля 2008
Пол: Мужской
Ошибка класса AccountsRecordset
23. Июля 2008 :: 00:22
Печать  
Доброе время суток! Я новичок при работе с 1С++. Оптимизировал бухитоги при проведении документов (класс: AccountsRecordset). Вроде все получилось, хотя результат по скорости не совсем удовлетворил, но это позже. Вчера обновил рабочую базу протестил на локальных машинах все работало. сегодня на одной машине вываливается такая ошибка:
ТЗОстатков = БИ.ВыполнитьИнструкцию(ТекстЗапросаОстатков);
{Документ.ПроизводствоМолока.Модуль Документа(745)}: Поле агрегатного объекта не обнаружено
AccountsRecordset::ПарситьМетаИмена(Строка ТекстЗапроса=
SELECT
     ОсновнойОстатки.СуммаОстатокДт
     , ОсновнойОстатки.КоличествоОстатокДт
     ,0 СуммаОстатокКт
     ,0 КоличествоОстатокКт
FROM $БИОстатки.Основной('20080721DR97UO  DHT2   ~~',,,
     (Материалы,МестаХранения),
     (Счет = :Счет
      AND
      Субконто1 = :Субконто1
      AND
      Субконто2 = :Субконто2)) AS ОсновнойОстатки
UNION ALL
SELECT
     0 СуммаОстатокДт
     , 0 КоличествоОстатокДт
     , ОсновнойОстаткиКт.СуммаОстатокКт
     , ОсновнойОстаткиКт.КоличествоОстатокКт
FROM $БИОстатки.Основной('20080721DR97UO  DHT2   ~~',,,
     (Материалы,МестаХранения),
     (Счет = :Счет
      AND
      Субконто1 = :Субконто1
      AND
      Субконто2 = :Субконто2)) AS ОсновнойОстаткиКт
)
ПодСтрока = Токен.SubMatches(0);
{\\Hlkfileserver\1C_MD_SQL\HLK\New_2006\Classes\AccountsRecordsetV2.ert(279) }
  

У каждой проблемы - своя цена, но наивысшая цена - у её решений. (Леонид С. Сухоруков)
Наверх
ICQ  
IP записан
 
Dushak
Junior Member
**
Отсутствует


Кто как программирует,
так и ест.

Сообщений: 19
Местоположение: Благовещенск
Зарегистрирован: 13. Июля 2008
Пол: Мужской
Re: Ошибка класса AccountsRecordset
Ответ #1 - 23. Июля 2008 :: 03:23
Печать  
Ошибка возникает из-за  неустановленного "Windows host script" (WHS).
  

У каждой проблемы - своя цена, но наивысшая цена - у её решений. (Леонид С. Сухоруков)
Наверх
ICQ  
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Ошибка класса AccountsRecordset
Ответ #2 - 23. Июля 2008 :: 06:25
Печать  
Dushak писал(а) 23. Июля 2008 :: 00:22:
Вроде все получилось, хотя результат по скорости не совсем удовлетворил, но это позже.

Ага, этот запрос написан неоптимально. Перечитай советы по оптимизации в описании.

Dushak писал(а) 23. Июля 2008 :: 03:23:
Ошибка возникает из-за  неустановленного "Windows host script" (WHS).

А какая там версия Windows?
  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
Dushak
Junior Member
**
Отсутствует


Кто как программирует,
так и ест.

Сообщений: 19
Местоположение: Благовещенск
Зарегистрирован: 13. Июля 2008
Пол: Мужской
Re: Ошибка класса AccountsRecordset
Ответ #3 - 23. Июля 2008 :: 06:41
Печать  
Windows 2000, Я уже неделю тесты провожу на быстродействие перепробовал кучу кода и этот мне показался более оптимальный, хотя скорости которой ожидал не получил. Особенно при  компиляция первого запроса. Пытаю параметризированный запрос, пока не могу разобраться с периодом. тема выше. Посмотрю еще описание.
  

У каждой проблемы - своя цена, но наивысшая цена - у её решений. (Леонид С. Сухоруков)
Наверх
ICQ  
IP записан
 
leshik
1c++ donor
Отсутствует



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: Ошибка класса AccountsRecordset
Ответ #4 - 23. Июля 2008 :: 07:23
Печать  
Автор, а почему обязательно использовать UNION ALL?
  
Наверх
IP записан
 
Dushak
Junior Member
**
Отсутствует


Кто как программирует,
так и ест.

Сообщений: 19
Местоположение: Благовещенск
Зарегистрирован: 13. Июля 2008
Пол: Мужской
Re: Ошибка класса AccountsRecordset
Ответ #5 - 23. Июля 2008 :: 22:40
Печать  
leshik писал(а) 23. Июля 2008 :: 07:23:
Автор, а почему обязательно использовать UNION ALL?

Мне нужно получить конечные остатки дебета на конец текущего документа, остатки по определенному счету и субконто со всеми счетами кредита. Так как остаток вычисляется из дебетовой и кредитовой стороны мне приходиться выбирать кредитовые остатки с аналогичным условием. Другого решения я не вижу. Если вы мне подскажите более оптимальное решение буду признателен.
  

У каждой проблемы - своя цена, но наивысшая цена - у её решений. (Леонид С. Сухоруков)
Наверх
ICQ  
IP записан
 
Dushak
Junior Member
**
Отсутствует


Кто как программирует,
так и ест.

Сообщений: 19
Местоположение: Благовещенск
Зарегистрирован: 13. Июля 2008
Пол: Мужской
Re: Ошибка класса AccountsRecordset
Ответ #6 - 24. Июля 2008 :: 03:19
Печать  
Убрал определение по видам субконто, в два раза скорость возросла!!!!
  

У каждой проблемы - своя цена, но наивысшая цена - у её решений. (Леонид С. Сухоруков)
Наверх
ICQ  
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Ошибка класса AccountsRecordset
Ответ #7 - 24. Июля 2008 :: 06:26
Печать  
Dushak писал(а) 24. Июля 2008 :: 03:19:
Убрал определение по видам субконто, в два раза скорость возросла!!!!

Если секция Субконто пустая, результат разворачивается по всем субконто. Учитывая, наличие отбора по Материалы и МестаХранения, лучше написать там БезСубконто.
Если в конфигурации определён разделитель учёта (а у тебя он, как я понимаю, определён), в секцию Условие нужно добавить отбор по нему.
  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
Dushak
Junior Member
**
Отсутствует


Кто как программирует,
так и ест.

Сообщений: 19
Местоположение: Благовещенск
Зарегистрирован: 13. Июля 2008
Пол: Мужской
Re: Ошибка класса AccountsRecordset
Ответ #8 - 24. Июля 2008 :: 06:51
Печать  
berezdetsky писал(а) 24. Июля 2008 :: 06:26:
Dushak писал(а) 24. Июля 2008 :: 03:19:
Убрал определение по видам субконто, в два раза скорость возросла!!!!

Если секция Субконто пустая, результат разворачивается по всем субконто. Учитывая, наличие отбора по Материалы и МестаХранения, лучше написать там БезСубконто.
Если в конфигурации определён разделитель учёта (а у тебя он, как я понимаю, определён), в секцию Условие нужно добавить отбор по нему.

Разделитель учета не стоит, а в секции субконто напишу как вы сказали. Спасибо!
  

У каждой проблемы - своя цена, но наивысшая цена - у её решений. (Леонид С. Сухоруков)
Наверх
ICQ  
IP записан
 
Dushak
Junior Member
**
Отсутствует


Кто как программирует,
так и ест.

Сообщений: 19
Местоположение: Благовещенск
Зарегистрирован: 13. Июля 2008
Пол: Мужской
Re: Ошибка класса AccountsRecordset
Ответ #9 - 24. Июля 2008 :: 07:03
Печать  
Поставил БезСубконто и суммы неправильно вернул.
  

У каждой проблемы - своя цена, но наивысшая цена - у её решений. (Леонид С. Сухоруков)
Наверх
ICQ  
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Ошибка класса AccountsRecordset
Ответ #10 - 24. Июля 2008 :: 08:06
Печать  
Dushak писал(а) 24. Июля 2008 :: 07:03:
Поставил БезСубконто и суммы неправильно вернул.

Давай тестовую обработку или, хотя бы, полные тексты запросов с правильной и неправильной суммами до и после отладки.
  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
Dushak
Junior Member
**
Отсутствует


Кто как программирует,
так и ест.

Сообщений: 19
Местоположение: Благовещенск
Зарегистрирован: 13. Июля 2008
Пол: Мужской
Re: Ошибка класса AccountsRecordset
Ответ #11 - 24. Июля 2008 :: 22:22
Печать  
berezdetsky писал(а) 24. Июля 2008 :: 08:06:
Dushak писал(а) 24. Июля 2008 :: 07:03:
Поставил БезСубконто и суммы неправильно вернул.

Давай тестовую обработку или, хотя бы, полные тексты запросов с правильной и неправильной суммами до и после отладки.


Правильный :
глЗапрос1СПП.УстановитьТекстовыйПараметр("Док",Позиция);
глЗапрос1СПП.УстановитьТекстовыйПараметр("Счет",СчетУчета);
глЗапрос1СПП.УстановитьТекстовыйПараметр("Субконто1",ТекСырье);
глЗапрос1СПП.УстановитьТекстовыйПараметр("Субконто2",ЦехМолока);
                                                                 
ТекстЗапросаОстатков = "
     |SELECT
     |      ОсновнойОстатки.СуммаОстатокДт
     |      , ОсновнойОстатки.КоличествоОстатокДт
     |      ,0 СуммаОстатокКт
     |      ,0 КоличествоОстатокКт
     |FROM $БИОстатки.Основной(:Док,,,,
     |      (Счет = :Счет
           |       AND
     |       Субконто1 = :Субконто1
     |       AND
     |       Субконто2 = :Субконто2)) AS ОсновнойОстатки
     |UNION ALL
     |SELECT
     |      0 СуммаОстатокДт
     |      , 0 КоличествоОстатокДт
     |      , ОсновнойОстаткиКт.СуммаОстатокКт
     |      , ОсновнойОстаткиКт.КоличествоОстатокКт
     |FROM $БИОстатки.Основной(:Док,,,,
     |      (Счет = :Счет
     |       AND
     |       Субконто1 = :Субконто1
     |       AND
     |       Субконто2 = :Субконто2)) AS ОсновнойОстаткиКт
     |";
                             
     ТЗОстатков = глЗапрос1СПП.ВыполнитьИнструкцию(ТекстЗапросаОстатков);

Если в секцию субконто ставим БезСубконто возвращает суммы не поддающиеся анализу. Крутил обороты так и не понял.
  

У каждой проблемы - своя цена, но наивысшая цена - у её решений. (Леонид С. Сухоруков)
Наверх
ICQ  
IP записан
 
Dushak
Junior Member
**
Отсутствует


Кто как программирует,
так и ест.

Сообщений: 19
Местоположение: Благовещенск
Зарегистрирован: 13. Июля 2008
Пол: Мужской
Re: Ошибка класса AccountsRecordset
Ответ #12 - 25. Июля 2008 :: 00:18
Печать  
Еще вопрос! Выбираю остатки по счету с четермя определенными субконто, выбрать нужно по первым двум и по четвертому. Запрос возвращает пустую таблицу.

|SELECT
|      ОсновнойОстатки.КоличествоОстатокДт
|      ,0 КоличествоОстатокКт
|FROM $БИОстатки.Основной(:Док,,,,
|      (Счет = :Счет
|       AND
|       Субконто1 = :Субконто1
|       AND
|       Субконто2 = :Субконто2
|       AND
|       Субконто4 = :Субконто4)) AS ОсновнойОстатки
|UNION ALL
|SELECT
|      0 КоличествоОстатокДт
|      , ОсновнойОстаткиКт.КоличествоОстатокКт
|FROM $БИОстатки.Основной(:Док,,,,
|      (Счет = :Счет
|       AND
|       Субконто1 = :Субконто1
|       AND
|       Субконто2 = :Субконто2
|       AND
|       Субконто4 = :Субконто4)) AS ОсновнойОстаткиКт
|";
« Последняя редакция: 25. Июля 2008 :: 03:18 - Dushak »  

У каждой проблемы - своя цена, но наивысшая цена - у её решений. (Леонид С. Сухоруков)
Наверх
ICQ  
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Ошибка класса AccountsRecordset
Ответ #13 - 25. Июля 2008 :: 09:44
Печать  
Dushak писал(а) 24. Июля 2008 :: 22:22:
Если в секцию субконто ставим БезСубконто возвращает суммы не поддающиеся анализу. Крутил обороты так и не понял.

Ещё перед выполнением вызови .Отладка(1) и выложи сюда, чего он вывалит в окно сообщений. Оба варианта - рабочий и нерабочий. По возможности, в архиве - там будет много букв.

Upd: Чего-то у меня на тестах не воспроизводится. Попробуй итоги пересчитать.
« Последняя редакция: 26. Июля 2008 :: 18:55 - berezdetsky »  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Ошибка класса AccountsRecordset
Ответ #14 - 25. Июля 2008 :: 09:48
Печать  
Dushak писал(а) 25. Июля 2008 :: 00:18:
Еще вопрос! Выбираю остатки по счету с четермя определенными субконто, выбрать нужно по первым двум и по четвертому. Запрос возвращает пустую таблицу.

Скорее всего, не совпадают типы (определённый/неопределённый вид и т.п.). Посмотри описания модификаторов.
  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 
ОтправитьПечать