Вход | Регистрация


1С:Предприятие ::

Метки:регистры

Точка актуальности

Я
   sov
 
07.07.04 - 13:11
Кто знает, пожалуйста подскажите.
Изучаю тему Регистры. Оформляю приход товара документом от 07.07.04. Точка актуальности 07.07.04 00:00:00. Смотрю отчет "Остатки товара".
В итоговой таблице ничего нет. Изменяю ТА на 08.07.04, Всё нормально, итоговая таблица заполнена данными. Делаю вывод, что ТА должна быть впереди как минимум на сутки, чтобы увидеть товар оприходованный сегодня, скажем одну минуту назад. Как сделать чтобы при открытии программы ТА уже стояла впереди на сутки, или каждый раз это надо делать вручную? Или я в принципе не прав.
 
  Рекламное место пустует
   Влад
1 - 07.07.04 - 13:37
в принципе не прав, ТА может находиться и на последнем документе и на последней дате месяца, в отчет попадет все то, что было оприходовано до ТА, включая тот документ, на котором стоит ТА.
   sov
 
2 - 07.07.04 - 13:58
На (1)(в отчет попадет все то, что было оприходовано до ТА, включая тот документ, на котором стоит ТА).
В том то и дело, что не попадает.Предыдущие сутки попадают. Переношу ТА на сутки вперёд, тогда сегодняшние сутки попадают. Если ТА стоит скажем на 16:00 сегодняшних суток, документы проведённые до 16:00, но сегодняшних суток, в отчёт не попадают. Привожу на всякий случай код процедуры формирующей отчёт.

Процедура Сформировать()  
    ТабЗн=СоздатьОбъект("ТаблицаЗначений");
    ТабЗн.НоваяКолонка("Товар","Справочник.Номенклатура");
    ТабЗн.НоваяКолонка("Сорт","Справочник.Сорт"); 
    ТабЗн.НоваяКолонка("Ост","Число",10,0); 
    РегОст=СоздатьОбъект("Регистр.ОстаткиТоваров"); 
    РегОст.ВременныйРасчет(1); 
    РассчитатьРегистрыПо(ВыбДата);
    РегОст.ВыбратьИтоги();      
    Пока РегОст.ПолучитьИтог()=1 Цикл
        ТСклад=РегОст.Склад;    
           Если ТСклад=ВыбСклад Тогда
            ТабЗн.НоваяСтрока();
            ТабЗн.Товар=РегОст.Товар;
            ТабЗн.Сорт=РегОст.Сорт;
            ТабЗн.Ост=РегОст.Количество;
        КонецЕсли;
    КонецЦикла;
    РегОст="";
    СтрокаН=0;
    ТабЗн.Свернуть("1,2","3");
    ТабЗн.Сортировать("1+,2+");
    ТабЗн.ВыбратьСтроку(СтрокаН,"Просмотр содержимого таблицы");
    Таб=СоздатьОбъект("Таблица");
    Таб.ИсходнаяТаблица("Таблица");
    Таб.ВывестиСекцию("Шапка");
    ТТовар="@#$%&";

    ТабЗн.ВыбратьСтроки();
    Пока ТабЗн.ПолучитьСтроку()=1 Цикл
        Товар=ТабЗн.Товар;
        Тов=СокрЛП(Товар.Код)+" ("+СокрЛП(Товар.Наименование)+")";
        Сорт=ТабЗн.Сорт;
        Ост=ТабЗн.Ост;
        Ед=Строка(Товар.ЕдИзм);
        Если ТТовар<>Товар Тогда
            Таб.ВывестиСекцию("Товар");
            ТТовар=Товар;
        Иначе
            Таб.ВывестиСекцию("Сорт");
        КонецЕсли;
    КонецЦикла;
    Таб.ТолькоПросмотр(1);
    Таб.ПараметрыСтраницы(1,100,1);
    Таб.Показать("");
КонецПроцедуры
   SnarkHunter
 
3 - 07.07.04 - 14:01
И что ты хочешь получить этим кодом?
   sov
 
4 - 07.07.04 - 14:07
На (3). Хочу получить таблицу с итоговыми данными о количестве товара на конкретном складе.

Остаток товаров на складе            
на складе : Склад №1            
на дату : 07.07.04            
           
Товар    Сорт    Остаток    Ед.
МПР-0342 (Кефир жирность 1,5%)    1    391    шт.
ФРЯ-908 (Яблоки "Голден")    1    250    шт.
   pauls
5 - 07.07.04 - 14:09
Это делается с помощью конструктора запросов.
   SnarkHunter
 
6 - 07.07.04 - 14:10
Запрос можно (и нужно) без конструктора писАть... Хотя в данном случае конструктор поможет...
   Elric
 
7 - 07.07.04 - 14:22
(sov 2 - 07.07.04 - 13:58)
Запрос написан очень неоптимально, но, вроде, правильно.
Могу только предположить, что содержимое регистров не совсем такое, на которое ты ориентируешься.

А вот чтобы это проверить лучше сделать отчет конструктором. Если он покажет то же (в смысле информации), что и твой отчет, значит дело не в отчете.
   SnarkHunter
 
8 - 07.07.04 - 14:36
Мнэ... И где в (2) запрос?
   Elric
 
9 - 07.07.04 - 14:36
(Elric 7 - 07.07.04 - 14:22)
Твой запрос дожен выглядеть так:

Процедура Сформировать()
    Таб=СоздатьОбъект("Таблица");
    Таб.ИсходнаяТаблица("Таблица");
    Таб.ВывестиСекцию("Шапка");
    
    РегОст=СоздатьОбъект("Регистр.ОстаткиТоваров"); 
    РегОст.ВременныйРасчет(1);
    РегОст.УстановитьЗначениеФильтра("Склад",ВыбСклад,1);
    РассчитатьРегистрыПо(ВыбДата);
    ТТовар=0;
    РегОст.ВыбратьИтоги();       
    Пока РегОст.ПолучитьИтог()=1 Цикл 
        Товар=ТабЗн.Товар;
        Тов=СокрЛП(Товар.Код)+" ("+СокрЛП(Товар.Наименование)+")";
        Сорт=ТабЗн.Сорт;
        Ост=ТабЗн.Ост;
        Ед=Строка(Товар.ЕдИзм);
        Если ТТовар<>Товар Тогда
            Таб.ВывестиСекцию("Товар");
            ТТовар=Товар;
        Иначе
            Таб.ВывестиСекцию("Сорт");
        КонецЕсли;
    КонецЦикла;
    
    Таб.ТолькоПросмотр(1); 
    Таб.ПараметрыСтраницы(1,100,1); 
    Таб.Показать("");
    РегОст="";
КонецПроцедуры
   SnarkHunter
 
10 - 07.07.04 - 14:39
Мдя...
 
  Рекламное место пустует
   sov
 
11 - 07.07.04 - 14:41
На(7). Вопрос не в том, что меня не удовлетворяют числа(итоги). Мне не понятен механизм работы ТА. Согласно теории в отчет попадет все то, что было оприходовано до ТА, включая тот документ, на котором стоит ТА. НО ЭТОГО НЕ ПРОИСХОДИТ. Далее см. (0) и (2). Скрипт привёл не как идеал решения задачи получения итогов.
   Darych
12 - 07.07.04 - 14:43
(9) //...бред какой-то...
   Elric
 
13 - 07.07.04 - 14:44
(SnarkHunter * 3 - 07.07.04 - 14:01)
Я с этими номерами еще не разобрался. Сообщение было, конечно, третьим, но номер у него стоял второй. Поэтому теперь пишу полное имя отправителя, дату и время сообщения.
   Gruz
 
14 - 07.07.04 - 14:48
Все очень просто. Ты спутал РассчитатьРегистрыПо() и РассчитатьРегистрыНа(). Первый метод берет на конец дня, второй на начало ...
Используй РассчитатьРегистрыНа().
   Elric
 
14 - 07.07.04 - 14:48
(sov 11 - 07.07.04 - 14:41)
Это понятно. Но по сути тебе уже ответил Влад. ТА -- это точка. Она устанавливается не на дату и даже не на секунду, а на документ.
НО. В твоем случае это практически не имеет значения, т.к. ты делаешь временный расчет, а не выбираешь остатки на точку актуальности, и единственное, за чем надо следить, так это чтобы ТА была позже или на границе ВыбДата.
   Elric
 
16 - 07.07.04 - 14:49
(Darych 12 - 07.07.04 - 14:43)
В чем бред?
   Darych
17 - 07.07.04 - 14:51
(16)
1) Что есть "запрос" в твоем понимании?
   SnarkHunter
 
18 - 07.07.04 - 14:52
Elric, ТА устанавливается не обязательно на документ...
P.S. Иногда лучше жевать, чем говорить...
   Elric
 
19 - 07.07.04 - 14:54
(Darych 17 - 07.07.04 - 14:51)
Запрос в моем понимании -- это обращение к БД с целью получить от нее определенную информацию. Не обязательно через объект 1С "Запрос". В данном случае особой путаницы в понятиях возникнуть не должно было, поэтому я не уточнял.
   Elric
 
20 - 07.07.04 - 15:10
(SnarkHunter * 18 - 07.07.04 - 14:52)
Я не имел ввиду, что нельзя установить ТА не на документ.
Но документы могут быть записаны на одну секунду (12:00:00 например) и тогда имеет значение на какой документ установлена ТА.
Спасибо, я уже пообедал.
   SnarkHunter
 
21 - 07.07.04 - 15:12
Похоже у нас еще один Антон появился...
Ладно... Продолжай...
   Elric
 
22 - 07.07.04 - 15:50
(SnarkHunter * 21 - 07.07.04 - 15:12)
Я, разумеется, не знаю, кто такой Антон и чем он тебе не понравился.

Если я нарушил какие-то писанные или неписанные правила, то просто скажи, что тут принято а что нет и я не буду лезть в чужой монастырь со своим уставом. И совсем не обязательно в постскриптуме приглашать меня для этого на ужин.

Сорри за флуд.
   sov
 
23 - 07.07.04 - 16:00
На (14). Используй РассчитатьРегистрыНа(). 

Результат ещё хуже. Для того, чтобы получить итоги за сегодняшний день, надо устанавливать завтрашнюю дату. Резюме: Необходимо устанавливать ТА датой позже, чем день сегодняшний(лучше на конец рабочего периода). Используя РассчитатьРегистрыПо()(в данном примере), получишь необходимый результат.
Кто готов поставить в данном вопросе точку над i и дать ответ на проблему ТА. Всё таки она очень часто всплывает на форуме.
   Valery
 
24 - 07.07.04 - 16:09
(23)Ерунда какая-то. Рекомендую ТА вооще не трогать.
   SnarkHunter
 
25 - 07.07.04 - 16:09
Господи...
Закомментируй РассчитатьРегистрыНа/РассчитатьРегистрыПо и будут тебе итоги на ТА...
   sov
 
26 - 07.07.04 - 16:13
На (25). Я это уже давно сделал. Но мне интересно почему ЭТОТ (2) вариант не работает. Далее см(11).
   Глю
27 - 07.07.04 - 16:24
(20). Можно установить ТА не на документ.
   Valery
 
28 - 07.07.04 - 16:32
Исходя из сказанного в (0) могу только предположить, что отчет "Остатки товара" счтаются на начало дня. Хотя в коде это не видно. Значит у тебя запускается совсем другой код, а ты ищешь ошибку в этом.
Где-то, что-то не доглядел.
   pauls
29 - 07.07.04 - 17:17
Робяты - вы парите...
   Глю
30 - 07.07.04 - 17:27
29. ПарИте или ПАрите? Или ПаритЕ?
   pauls
31 - 07.07.04 - 17:43
Гоните в общем...
   Глю
32 - 07.07.04 - 17:51
Кого гнать? :)
   Elric
 
33 - 07.07.04 - 17:51
(sov 07.07.04 - 13:11)
Просто поверь на слово, что ТА работает так как и должна. Чтобы узнать, почему конкретно в твоем случае что-то не срабатывает нужна конкретно твоя база.
 
  Рекламное место пустует
   Студент
34 - 07.07.04 - 18:16
Похоже, что человек ковыряет учебную базу «Простой склад - Банькин М. А. aka BMA, 2000 г» которая тут лежит http://www.mista.ru/sklad_1c/index.htm

И кстати ТА там срабатывает так как (0) описал, хотелось бы услышать комментарии Волшебника, его все-таки семинария:)
   Elric
 
35 - 07.07.04 - 19:16
(Студент 34 - 07.07.04 - 18:16)
А ссылу на саму базу можешь дать? Я хочу проверить.
   Elric
 
36 - 07.07.04 - 19:19
(sov 07.07.04 - 13:11)
Или лучше ты вышли свою базу, я посмотрю, мож хоть тогда что умное скажу.
   SnarkHunter
 
37 - 07.07.04 - 19:32
Самокритично...
   Elric
 
38 - 07.07.04 - 20:28
(SnarkHunter * 37 - 07.07.04 - 19:32)
Если проблема не решена, значит от советов пользы ноль. Так что от самокритики не уйдешь...
   StaWand
 
39 - 07.07.04 - 21:34
Для sov:
сперва приведу небольшой фрагмент текста из книги, а потом своими словами:
""Под термином <<остаток>> ресурса для регистра остатков следует понимать числовое значение, которое имеет ресурс на какой-то момент времени. Именно здесь и проявляется понятие Точки Актуальности. ТА - это тот момент времени
(дата+время), на который все необоротные регистры содержат текущие значения своих ресурсов. Другими словами, если просто запросить у регистра остатков значение какого-либо ресурса, то он выдаст его именно на момент ТА. Если необходимо узнать значение ресурса на какой-либо прошедший момент времени, то надо либо сдвинуть в прошлое ТА (для этого используется интерактивная операция "Управление итогами"), либо при помощи средств встроенного языка следует запустить "временный расчет" регистра.""
Далее...
обычно ТА двигается вместе с проведенным документом и остается на нем. Можно и вручную через "Управление оперативными итогами" поставить ее на конец месяца.
Что-бы отчет работал правильно, надо учитывать 2 момента:
1. получаем отчет на дату раньше ТА (например, сегодня провели документ "ПриходнаяНакладная" и ТА осталась на нем, а мы хотим получить остатки на 2 дня раньше);
2. получаем отчет на сегодня (когда был проведен последний документ, например).
Так вот, надо в код вставить проверку:

РегОст=СоздатьОбъект("Регистр.ТоварыНаСкладе");
    ДатаТА=ПолучитьДатуТА();
    Если ВыбДата<ДатаТа Тогда 
        РегОст.ВременныйРасчет(1);
        РассчитатьРегистрыПо(ВыбДата);
    КонецЕсли;
    
    РегОст.ВыбратьИтоги();

Если мы хотим получить итог на дату раньше ТА, то запускаем временный расчет
"РассчитатьРегистрыПо(ВыбДата)", "...По", это чтобы учитывать проведенные документы в тот день, если "...На", то они не будут учитываться.
А если мы получаем отчет на дату ТА, то можно без временного расчета, сразу
"РегОст.ВыбратьИтоги()".
   StaWand
 
40 - 07.07.04 - 21:43
Для sov:
объясняю почему не работает временный расчет на сегодняшний день (где стоит ТА).
Если "РассчитатьРегистрыНа", то это расчитается на начало дня, и документ скорее всего туда не попадет. Если "РассчитатьРегистрыПо", то расчитается на конец дня и выдаст такую ошибку -
"Не могу рассчитать временные итоги после ТА!", потому-что расчитываем на конец дня, а ТА у нас стоит где-то в середине дня.
   колодина
41 - 08.07.04 - 06:49
чего-то накрутили... временный расчет работает абсолютно нормально. в качестве точки, на которую (или по которую) рассчитываются регистры может использоваться: документ, его позиция, дата ТА , время ТА и т.д. нужно внимательно посмотреть какой именно расчет вы хотите получить и все будет именно так кк хотите. и если вы рассчитываете регистры НА дату ТА, то их значения будут иметь результат на начало дня ТА. подумайте чего именно хотите.
   Влад
42 - 08.07.04 - 07:30
(40) рассчитывать регистры имеет смысл только если итоги не актуальны, но если вы все же рассчитываете регистры, то это можно сделать и на документ, даже если он в середине дня, причем этот документ обязательно попадет в выборку конечной датой которой является дата документа, если ТА установлена на этот документ или находится позже его.
   sov
 
43 - 08.07.04 - 08:27
На (40 - 42). Ребята, спасибо. Наконец услышал вразумительные ответы на вопрос.



Список тем форума
Рекламное место пустует  
Читай всё полезное и впитывай, а нападки игнорируй. Здесь так принято. aka AMIGO
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Ветка сдана в архив. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует