Имя: Пароль:
1C
 
Итоги по регистрам накопления
,
0 tilek19
 
30.05.18
14:13
Доброго времени суток!!!
Проблема в след.
Есть регистр накопления N ,при обращении к нему "точнее N.Остатки"
с разных документов выдает разный результат запросов,ладно если бы со всех разный результат,но тут с одного документа правильный результат а со всех(один и тот же) не правильный результат возвращается
1 shuhard
 
30.05.18
14:14
(0)[с разных документов выдает разный результат запросов]
какое отношение имеют документы и остатки ?
2 tilek19
 
30.05.18
14:18
(1) нужны для вычисления себестоимости
3 фросия
 
30.05.18
14:20
берите из того, который правильный
4 shuhard
 
30.05.18
14:23
(2) ещё раз
не существует остатков по регистратору
5 tilek19
 
30.05.18
14:23
в том та и вся соль что вычисляется в модуле второго объекта и только при проведении, и тот же запрос в первом документе дает не правильный результат,а он(остатки) капец как нужен в первом документе
6 tilek19
 
30.05.18
14:24
(4) я делаю запрос лишь по двум параметрам,дата и подразделение
7 shuhard
 
30.05.18
14:24
(6)[с разных документов выдает разный результат запросов]
тогда это о чём ?
8 tilek19
 
30.05.18
14:26
(7) имеется в виду что запрос выполняется в модуле двух документов и выдает разные результаты
9 tilek19
 
30.05.18
14:27
Запрос = Новый Запрос;
        ТекстЗапроса = "ВЫБРАТЬ
                       |    ОстаткиТоваровОстатки.Подразделение,
                       |    ОстаткиТоваровОстатки.Товар,
                       |    ОстаткиТоваровОстатки.Партия,
                       |    ОстаткиТоваровОстатки.НомерСерии,
                       |    ОстаткиТоваровОстатки.КоличествоОстаток,
                       |    ОстаткиТоваровОстатки.СуммаОстаток
                       |ИЗ
                           |    РегистрНакопления.ОстаткиТоваров.Остатки(&НаДату, Подразделение = &Подразделение) КАК ОстаткиТоваровОстатки";
10 Быдло замкадное
 
30.05.18
14:29
и параметры одинаковые в обоих документах?
11 tilek19
 
30.05.18
14:30
да абсолютно
НаДату=КонецДня(текущаяДата())
Подразделение =Документ.Подразделение
12 Быдло замкадное
 
30.05.18
14:32
Документ.Подразделение разные может.
Или между тестами док проводится.. и остатки меняются. Возможно первый "правильный" док и меняет остатки.
13 shuhard
 
30.05.18
14:32
(11) КонецДня(текущаяДата()) - не катит
нужна граница
14 PiotrLoginov
 
30.05.18
14:33
чудес не бывает. В одной и той же базе, при одних и тех же настройках, в одной и той же области под одним и тем же пользователем данные в регистре должны быть одни и те же. Из какого модуля происходит запрос - неважно.
15 tilek19
 
30.05.18
14:33
нет доки не проводятся так как делается в копии и доступ только у меня,
Подразделение одно и тоже(справочникиСсылка.Подразделения)
16 tilek19
 
30.05.18
14:33
(13) пробовал и с границей та же херь
17 Быдло замкадное
 
30.05.18
14:34
Документ.Подразделение.Код одинаковый у параметров?
18 tilek19
 
30.05.18
14:34
(14) вот и я о том же   -  2 дня уже сижу.мистика какая то происходит
19 tilek19
 
30.05.18
14:34
(17) да
20 PiotrLoginov
 
30.05.18
14:35
другое дело, что запрос может происходить после того, как документ проведен, или до того. Причем если это происходит в транзакции, и выполнение кода прервать, транзакция откатится, и проведение отменится
21 Любопытная
 
30.05.18
14:35
Чудес не бывает, так что смотрите, что у вас в "неправильном" документе в запросе и в параметрах.
22 Быдло замкадное
 
30.05.18
14:41
скопируй процедуру с запросом целиком. Хотя бы посмотрим как она называется, обработка проведения или нет
23 shuhard
 
30.05.18
14:44
(16) [пробовал и с границей та же херь]
не верю (с)
24 tilek19
 
30.05.18
14:45
Процедура ОбработкаПроведения(Отказ, Режим)
Запрос = Новый Запрос;
        ТекстЗапроса = "ВЫБРАТЬ
                       |    ОстаткиТоваровОстатки.Подразделение,
                       |    ОстаткиТоваровОстатки.Товар,
                       |    ОстаткиТоваровОстатки.Партия,
                       |    ОстаткиТоваровОстатки.НомерСерии,
                       |    ОстаткиТоваровОстатки.КоличествоОстаток,
                       |    ОстаткиТоваровОстатки.СуммаОстаток
                       |ИЗ";
                       Если ПустоеЗначение(Подразделение) Тогда
                           ТекстЗапроса = ТекстЗапроса + "
                           |    РегистрНакопления.ОстаткиТоваров.Остатки(&НаДату) КАК ОстаткиТоваровОстатки";
                       Иначе
                           ТекстЗапроса = ТекстЗапроса + "
                           |    РегистрНакопления.ОстаткиТоваров.Остатки(&НаДату, Подразделение = &Подразделение) КАК ОстаткиТоваровОстатки";
                       КонецЕсли;
                      
                          
        //|
        //|ДЛЯ ИЗМЕНЕНИЯ";
        Запрос.УстановитьПараметр("НаДату", КонецДня(Дата)+1);
        Если не ПустоеЗначение(Подразделение) Тогда
        Запрос.УстановитьПараметр("Подразделение", Подразделение);
        КонецЕсли;
        Запрос.Текст = ТекстЗапроса;
        Результат = Запрос.Выполнить();

КонецПроцедуры
25 tilek19
 
30.05.18
14:45
дата=ТекущаяДата()
26 DrShad
 
30.05.18
14:46
а даты документов?
27 tilek19
 
30.05.18
14:47
(26) зависит от даты документов?
я же передаю в параметр ТекущаяДата()
28 Быдло замкадное
 
30.05.18
14:48
(25) дата=ТекущаяДата() этого нет в твоей процедуре! что ты врешь! Берется дата документа, а они разные.
29 Любопытная
 
30.05.18
14:49
(27) где передаешь?
30 tilek19
 
30.05.18
14:50
(28) просто я не всю процедуру скопировал а момент запроса,а так до запроса Дата=ТекущаяДата()
31 фросия
 
30.05.18
14:51
отладчиком глянь какие параметры в запрос передаются- идентичные или нет?
32 Быдло замкадное
 
30.05.18
14:51
(30) тебя попросили всю процедуру скопировать. А ты не всю скопировал. Опять нам врешь
33 Любопытная
 
30.05.18
14:51
(30) а теперь давай всю процедуру.
А еще лучше, отладчиком посмотри в обоих местах текст запроса и параметры.
34 фросия
 
30.05.18
14:51
(30) переименуй Дата в ДатаЗапроса
35 tilek19
 
30.05.18
14:52
(34) ок попробую
36 фросия
 
30.05.18
14:52
а то мало ли. мож у тебя в Дату дата дока подставляется
37 Быдло замкадное
 
30.05.18
14:54
(36) не мало ли. Дата это служебный реквизит. Он его присваивает текущей секунде при каждом проведении
38 shuhard
 
30.05.18
14:56
(37)[Дата это служебный реквизит]
реквизит объекта в контексте его модуля
39 tilek19
 
30.05.18
14:56
попробовал все рано так же
40 DrShad
 
30.05.18
14:57
врешь
41 Быдло замкадное
 
30.05.18
14:57
(39) может все таки пришлешь процедуру целиком? Или даже 3 просьб мало
42 Быдло замкадное
 
30.05.18
14:59
И что бы запрос можно было конструктором редактировать делай так:
Если ПустоеЗначение(Подразделение) Тогда
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "Подразделение = &Подразделение", "");
43 Быдло замкадное
 
30.05.18
15:00
Запрос.УстановитьПараметр("НаДату", КонецДня(Дата)+1);

Тут переименовал в ДатаЗапроса?
44 tilek19
 
31.05.18
05:34
(43) да
45 hhhh
 
31.05.18
06:34
(44) наверно-таки в обработке проведения выполняешь запрос? Семен Семеныч.
46 tilek19
 
31.05.18
07:21
(45) да в обработке проведения
47 hhhh
 
31.05.18
07:29
(46) чего тогда целый день нам мозги пудришь?. И ежу понятно, что во второй документ дополнительно попадают движения первого документа. Баян.
48 tilek19
 
31.05.18
07:32
Процедура ОбработкаПроведения(Отказ, Режим)
ДатаЗапросаостатков=Текущаядата();
Запрос = Новый Запрос;
        ТекстЗапроса = "ВЫБРАТЬ
                       |    ОстаткиТоваровОстатки.Подразделение,
                       |    ОстаткиТоваровОстатки.Товар,
                       |    ОстаткиТоваровОстатки.Партия,
                       |    ОстаткиТоваровОстатки.НомерСерии,
                       |    ОстаткиТоваровОстатки.КоличествоОстаток,
                       |    ОстаткиТоваровОстатки.СуммаОстаток
                       |ИЗ";
                       Если ПустоеЗначение(Подразделение) Тогда
                           ТекстЗапроса = ТекстЗапроса + "
                           |    РегистрНакопления.ОстаткиТоваров.Остатки(&НаДату) КАК ОстаткиТоваровОстатки";
                       Иначе
                           ТекстЗапроса = ТекстЗапроса + "
                           |    РегистрНакопления.ОстаткиТоваров.Остатки(&НаДату, Подразделение = &Подразделение) КАК ОстаткиТоваровОстатки";
                       КонецЕсли;
                      
                          
        //|

        //|ДЛЯ ИЗМЕНЕНИЯ";

        Запрос.УстановитьПараметр("НаДату", КонецДня(ДатаЗапросаостатков)+1);
        Если не ПустоеЗначение(Подразделение) Тогда
        Запрос.УстановитьПараметр("Подразделение", Подразделение);
        КонецЕсли;
        Запрос.Текст = ТекстЗапроса;
        РезультатЗапросаостатков = Запрос.Выполнить().Вугрузить();

Для каждого Строка из этотОбъект().Строки Цикл
Отбор=Новый структура;
отбор.Вставить("Товар",строка.Товар);
отбор.Вставить("НомерСерии",строка.НомерСерии);
отбор.Вставить("ПартияТовара",строка.ПартияТовара);
ТЗСебестоимости=РезультатЗапросаостатков.Скопировать(отбор);

  Строка.СуммаСебестоимости=строка.Количество*(ТЗСебестоимости.Итог("СуммаОстаток")/ТЗСебестоимости.Итог("КоличествоОстаток"));

конеццикла
Записать();
КонецПроцедуры





Вот сама процедура в обоих документах идентичная
49 tilek19
 
31.05.18
07:35
(47) так первый документ не дает никаких движений по регистрам,только второй создает движения
50 tilek19
 
31.05.18
07:38
и только второй документ является регистратором регистра накопления
51 hhhh
 
31.05.18
07:47
(50) ну значит первий видит движения второго
52 hhhh
 
31.05.18
07:50
(50) ну то есть по-любому должны быть разные итоги. Непонятно, почему вы ожидаете, чтобы итоги совпали.
53 tilek19
 
31.05.18
07:57
Блин все всем спасибо,понял почму,как же я ступил однако
54 Быдло замкадное
 
31.05.18
09:33
(53) в чем дело то было?
55 unregistered
 
31.05.18
10:05
(48) Жесть какая....
Откуда взялось поле "ПартияТовара" в РезультатЗапросаостатков, если там только есть поле "Партия"
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший