Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Из модуля объекта к виртуальной таблице оборотов нельзя обратиться?

Из модуля объекта к виртуальной таблице оборотов нельзя обратиться?
Я
   стажер
 
25.10.19 - 17:27
Всем привет. Подскажите: Из модуля объекта к виртуальной таблице оборотов нельзя обратиться?
Просто из модуля формы нормально отрабатывает, показывает остаток, а из модуля объекта только оборот. Один и тот же запрос.
 
 
   palsergeich
 
1 - 25.10.19 - 17:28
(0) можно, скорее всего ты что то делаешь не так
   fisher
 
2 - 25.10.19 - 17:30
Раз один и тот же запрос, значит либо разные параметры, либо разное состояние базы.
   Жан Пердежон
 
3 - 25.10.19 - 17:36
что за вирт.таблица оборотов и почему ты там ищешь остаток?
   стажер
 
4 - 25.10.19 - 17:51
(1) спасибо, значит буду дальше искать где накосячил
(2) состояние одно, запрос один, параметр один отличается (буду в эту сторону копать)
(3) РегистрНакопления.Остатки смотрю чисто остаток уже
   asady
 
5 - 25.10.19 - 17:53
(4) и видишь "из модуля объекта только оборот" так?
   стажер
 
6 - 25.10.19 - 17:53
(4), к (2) а нет, убрал параметр, все равно результат другой(
   asady
 
7 - 25.10.19 - 17:56
(0) может быть пора уже запрос выкладывать?
   стажер
 
8 - 25.10.19 - 17:57
(5) Вижу не только оборот, вижу все.
я запрос просто копирую и получаю другой результат, поэтому и подумал что раз разница только в месте откуда я его вызываю, возможно из этого места нельзя обращаться к виртуальной таблице остатки. Но в то же время программа не ругается....
   Ахмадинежад
 
9 - 25.10.19 - 18:01
(7)пятница же, надо угадывать
   стажер
 
10 - 25.10.19 - 18:02
(7)
Запрос = Новый Запрос;
    Запрос.Текст = 
     "ВЫБРАТЬ
     |    ЛимитныеКартыОстатки.Номенклатура КАК Номенклатура,
     |    ЛимитныеКартыОстатки.КоличествоПервоначальноеОстаток КАК КоличествоПервоначальноеОстаток
     |ИЗ
     |    РегистрНакопления.ЛимитныеКарты.Остатки(, ) КАК ЛимитныеКартыОстатки";
                    
        РезультатЗапроса = Запрос.Выполнить(); 
        Таблица = РезультатЗапроса.Выгрузить();
   asady
 
11 - 25.10.19 - 18:02
(8) код модуля объекта исполняется на сервере - если что.
виртуальная таблица остатков это view таблицы - грубо результат запроса к реальной таблице с некими параметрами (ПВТ)
к этой таблице можно обращаться как к обычной таблице sql

так что твои сомнения по поводу неуместности обращения к виртуальной таблице остатков из модуля объекта необоснованы
   Жан Пердежон
 
12 - 25.10.19 - 18:02
(10) вагную, что сам документ делает движения, которые влияют на искомый оборот/остаток
   стажер
 
13 - 25.10.19 - 18:04
(12) тогда при повторном обращении сумма будет меняться, а она не меняется
   стажер
 
14 - 25.10.19 - 18:05
но вариант хороший, я проверю
   Chameleon1980
 
15 - 26.10.19 - 07:24
(13) а что меняется?
Где сумма у тебя? Или ты про количество в сумме?
   Фрэнки
 
16 - 26.10.19 - 08:16
Скорей всего, при попытке считывания данных из регистра запросом изнутри открытой транзакции для создания новых движений просто запрос не видит обновленных данных, т.к. эти данные созданы "внутри" транзакции, а чтение выполняется "снаружи".

Очень часто, для избегания подобных неоднозначностей, через параметры и условия запроса умышлено ставят ограничение, чтобы данные текущего документа запрос не мог прочитать, вне зависимости от способа установленного в СУБД "грязного" чтения. Затем к результатам запроса добавляют ожидаемые результаты движений...

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

з.ы. Если у сообщества настроение совпадет, то сам топик весьма годный наброс для холивара выходного дня :-)
   стажер
 
17 - 27.10.19 - 19:30
(16) Скорее всего вы правы.
Тут схема такая: Первый документ делает движение (по регистру остатков) со знаком плюс, второй документ делает движение со знаком минус. Задача: после проведения второго документа обновить первый документ, чтобы он в списке документов стал серым (признак того что по нему все отгружено).
Я пытаюсь это решить так: Во втором документе в Процедуре ОбработкаПроведения после движений по регистру перепровожу первый документ. Но этот способ не дает нужных результатов. Данные текущего (второго) документа в регистре как будто отсутствуют.
   palsergeich
 
18 - 27.10.19 - 19:33
(17) Очень странный вариант реализации
   стажер
 
19 - 27.10.19 - 19:37
(18) а как правильно?
   palsergeich
 
20 - 27.10.19 - 19:41
Самый простой вариант решения - делаешь РС.
В нем 1 измерение - документ заказа (1 документ)
Когда проводится 2ой документ - делаешь запись в этот регистр.
Все.
И соответственно в списке соединяешься с этим регистром.
Если запись есть - то цвет 1
если нет - то не красишь
   palsergeich
 
21 - 27.10.19 - 19:43
Или второй вариант.
Оборотный РН.
2 ресурса: Заказано отгружено
1 документ делает запись в ресурс Заказано
2ой в отгружено
Когда Заказано = отгружено - красишь, иначе ничего не делаешь
   palsergeich
 
22 - 27.10.19 - 19:45
(17) Просто по основамархитектуры 1с. Изменение состояния одного объекта не должно неявно менять состояние другого объекта.
При проведении одного документа перепроводить второй - это очень неправильно в общем случае. Есть ситуации когда это можно, но это серьезное и осмысленное решение
   стажер
 
23 - 27.10.19 - 20:05
(20) (21) (22) Спасибо большое за подробный ответ и за совет!
   palsergeich
 
24 - 27.10.19 - 20:08
(23) я думаю что измерения (21) ты сможешь самостоятельно добавить.
Так де дополю почему при проведенииодного документа не стоит проводить другой.
Заказ у тебя сделан в январе, а огррузка в феврале.
Январь закрыт.
Или контроль даты запрета изменений из БСП тебе не даст этого сделать
Или бухгалтера тебя на рее вздернут за проведение документа в закрытом периоде.
   стажер
 
25 - 27.10.19 - 20:18
(24) да, согласен, погорячился)

Сейчас пытаюсь красить из списка. Ставлю в нем точку останова, но на ней не останавливается. Создал новый список - тоже самое.... Не пойму что не так..
   стажер
 
26 - 27.10.19 - 20:20
в других документах работает а тут нет
   palsergeich
 
27 - 27.10.19 - 20:22
(25) Где ставишь останову?
   стажер
 
28 - 27.10.19 - 20:25
в списке документа первого в процедуре ПриОткрытии
   palsergeich
 
29 - 27.10.19 - 20:27
(28) УФ/ОФ?
   стажер
 
30 - 27.10.19 - 20:31
(29) уф
 
 Рекламное место пустует
   palsergeich
 
31 - 27.10.19 - 20:36
Ты код копировал из другого места?
Там просто если тупо скопировать при открытии оно не будет срабатывать.
Удали код.
Потом добавь обработчик при открытии а потом только копируй код.
И да изменение параметров ДС лучшеделать ПриСозданииНаСервере
   стажер
 
32 - 27.10.19 - 20:52
(31) Да, копировал. Спасибо огромное еще раз. Я б в жизни сам не догадался, что такое может быть: что скопированный обработчик - не считается за обработчик.
   Курцвейл
 
33 - 28.10.19 - 05:38
(16) Это не так. Более того для системы расчета ЗП нужно чтобы модуль провидения видел итоги записей этим же документом.
Для исключений видений используют систему управляемых блокировок и ВидГраницы для ограничения чтений данных регистров.
   DrWatson
 
34 - 28.10.19 - 09:00
(17) Скажу про "Данные второго документа в регистре как будто отсутствуют.".
Когда ты смотришь остаток, то ты видишь что отсутствует именно остаток, а не данные второго документа. Т.е. ситуация такая - сработал второй документ, списал остаток. А ноль в остатках не показывается, поэтому ты ничего и не видишь.
Другое дело, что тебе это никак не поможет, т.к. что до проведения первого документа, что после полного списания - всё равно будет ноль.


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.