Имя: Пароль:
1C
1С v8
Из модуля объекта к виртуальной таблице оборотов нельзя обратиться?
,
0 стажер
 
25.10.19
17:27
Всем привет. Подскажите: Из модуля объекта к виртуальной таблице оборотов нельзя обратиться?
Просто из модуля формы нормально отрабатывает, показывает остаток, а из модуля объекта только оборот. Один и тот же запрос.
1 palsergeich
 
25.10.19
17:28
(0) можно, скорее всего ты что то делаешь не так
2 fisher
 
25.10.19
17:30
Раз один и тот же запрос, значит либо разные параметры, либо разное состояние базы.
3 Жан Пердежон
 
25.10.19
17:36
что за вирт.таблица оборотов и почему ты там ищешь остаток?
4 стажер
 
25.10.19
17:51
(1) спасибо, значит буду дальше искать где накосячил
(2) состояние одно, запрос один, параметр один отличается (буду в эту сторону копать)
(3) РегистрНакопления.Остатки смотрю чисто остаток уже
5 asady
 
25.10.19
17:53
(4) и видишь "из модуля объекта только оборот" так?
6 стажер
 
25.10.19
17:53
(4), к (2) а нет, убрал параметр, все равно результат другой(
7 asady
 
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)
Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |    ЛимитныеКартыОстатки.Номенклатура КАК Номенклатура,
    |    ЛимитныеКартыОстатки.КоличествоПервоначальноеОстаток КАК КоличествоПервоначальноеОстаток
    |ИЗ
    |    РегистрНакопления.ЛимитныеКарты.Остатки(, ) КАК ЛимитныеКартыОстатки";
                    
        РезультатЗапроса = Запрос.Выполнить();
        Таблица = РезультатЗапроса.Выгрузить();
11 asady
 
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
но вариант хороший, я проверю
15 Chameleon1980
 
26.10.19
07:24
(13) а что меняется?
Где сумма у тебя? Или ты про количество в сумме?
16 Фрэнки
 
26.10.19
08:16
Скорей всего, при попытке считывания данных из регистра запросом изнутри открытой транзакции для создания новых движений просто запрос не видит обновленных данных, т.к. эти данные созданы "внутри" транзакции, а чтение выполняется "снаружи".

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

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

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

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