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

v7: Не находит заявку в регистре

v7: Не находит заявку в регистре
Я
   Роспатнюк Сергей Сер
 
10.10.19 - 10:08
подскажите в чем может быть проблема, заявка есть строка в регистре тоже есть лично проверил, значения в фильтрах правильные, но после РегЗаявки.ВременныйРасчет(1);
ОбщРег.РассчитатьРегистрыНа(_Док.ТекущийДокумент()); РегЗаявки.ВыгрузитьИтоги(ТаблИтогов,1,1);, таблица пустая а должна быть строка заявки из регистра.


Функция  гсРегистрЗаявкиСклада(_Док,_Модуль = 0) Экспорт
    Перем ТаблИтогов, _ТЗ, ОбщРег, РегЗаявки;
    _ТЗ = СоздатьОбъект("ТаблицаЗначений");
    _Док.ВыгрузитьТабличнуюЧасть(_ТЗ);
    _ТЗ.Свернуть("СубГУИД","");
    _СЗ = СоздатьОбъект("СписокЗначений");
    _ТЗ.ВыбратьСтроки();
    Пока _ТЗ.ПолучитьСтроку() = 1 Цикл
        Если _ТЗ.СубГУИД.Выбран() = 1 Тогда
            _СЗ.ДобавитьЗначение(СокрЛП(_ТЗ.СубГУИД));
        КонецЕсли;
    КонецЦикла;    
    ТаблИтогов = СоздатьОбъект("ТаблицаЗначений");
    ОбщРег    = СоздатьОбъект("Регистры");
    РегЗаявки    = ОбщРег.Заявки;
    
    РегЗаявки.УстановитьЗначениеФильтра("СтрокаЗаявки",_СЗ,2);
    РегЗаявки.УстановитьЗначениеФильтра("МестоХранения",_Док.Склад,2);
    РегЗаявки.УстановитьЗначениеФильтра("Заказчик",_Док.Заказчик,2);
    //
    Если _Модуль = 0 Тогда
        Если _Док.Выбран() = 0 Тогда
            // Новый документ
            Если _Док.ДатаДок < ПолучитьДатуТА() Тогда
                РегЗаявки.ВременныйРасчет(1);
                ОбщРег.РассчитатьРегистрыНа(_Док.ДатаДок);     
            КонецЕсли;
        ИначеЕсли _Док.ДатаДок < _Док.ТекущийДокумент().ДатаДок Тогда
            // Поменяли дату документа.
            Если _Док.ДатаДок < ПолучитьДатуТА() Тогда
                // выписываемый задним числом
                РегЗаявки.ВременныйРасчет(1);
                ОбщРег.РассчитатьРегистрыНа(_Док.ДатаДок);     
            КонецЕсли;
        ИначеЕсли _Док.СравнитьТА() < 1 Тогда
            //Позиция не больше ТА.
            РегЗаявки.ВременныйРасчет(1);
            ОбщРег.РассчитатьРегистрыНа(_Док.ТекущийДокумент());     
        КонецЕсли;
    Иначе
        Если _Док.ИтогиАктуальны()=0 Тогда
            РегЗаявки.ВременныйРасчет(1);
            ОбщРег.РассчитатьРегистрыНа(_Док.ТекущийДокумент());
        КонецЕсли;
    КонецЕсли;
    РегЗаявки.ВыгрузитьИтоги(ТаблИтогов,1,1);
    Возврат ТаблИтогов;
КонецФункции
 
 
   Роспатнюк Сергей Сер
 
1 - 10.10.19 - 10:50
up
   Builder
 
2 - 10.10.19 - 10:51
Начните с отключения фильтров. А дальше отладчик в руки и искать ошибку.
   Kigo_Kigo
 
3 - 10.10.19 - 10:58
_Док.Заказчик = контрагент или юрфизлицо контрагента?
отключай фильтры и смотри и апрверь что в _сз
   dk
 
4 - 10.10.19 - 10:58
(2) +1
скорее всего типы переданные в фильтры не совпадают с типом указанным в самом регистре
   Роспатнюк Сергей Сер
 
5 - 10.10.19 - 11:18
Оставляя фильтры на склад и заказчика получаю 32 строки а когда смотрю свой регистр с таким же отбором выходит 33 и не хватает той самой нужной строки 0_0 рег. смотрю собработкой и там вот такой код и все работает
НазваниеРегистра     = Рег.ПолучитьЗначение(Рег.ТекущаяСтрока(),); 
    ОбщРег = СоздатьОбъект("Регистр."+НазваниеРегистра);
    Для К=1 по 4 Цикл
        Если Число(Шаблон("[Сп"+к+".РазмерСписка()]"))=0 Тогда
            Если ПустоеЗначение(ЗначениеИзСтрокиВнутр(Шаблон("[ЗначениеВСтрокуВнутр(зн"+к+")]")))=0 Тогда
                ОбщРег.УстановитьЗначениеФильтра(ЗначениеИзСтрокиВнутр(Шаблон("[ЗначениеВСтрокуВнутр(пв"+к+")]")),ЗначениеИзСтрокиВнутр(Шаблон("[ЗначениеВСтрокуВнутр(зн"+к+")]")));
            КонецЕсли;
        Иначе
            ОбщРег.УстановитьЗначениеФильтра(ЗначениеИзСтрокиВнутр(Шаблон("[ЗначениеВСтрокуВнутр(пв"+к+")]")),ЗначениеИзСтрокиВнутр(Шаблон("[ЗначениеВСтрокуВнутр(Сп"+к+")]")),2);
        КонецЕсли;
    КонецЦикла;        
    Если ДатаОтчета<ПолучитьДатуТА() Тогда 
        ОбщРег.ВременныйРасчет(1); 
          РассчитатьРегистрыПо(ДатаОтчета);
          //РассчитатьРегистрыНа(ДатаОтчета);

    КонецЕсли;
    ОбщРег.ВыгрузитьИтоги(Тост,1);
   Роспатнюк Сергей Сер
 
6 - 10.10.19 - 11:20
(5) если к этим двум добавить ГУИД то результат нулевой тоже самое если просто по ГУИДу фильтровать.
   Роспатнюк Сергей Сер
 
7 - 10.10.19 - 11:21
(3) ТипЗначения(_Док.Заказчик) = 11
   Злопчинский
 
8 - 10.10.19 - 11:43
тупо смотрю код не вникая пока
огорчу
_Док.ДатаДок < ПолучитьДатуТА() типа это заднее число
если датаДок = ДатаТА то это вообщем тоже заднее число
   Роспатнюк Сергей Сер
 
9 - 10.10.19 - 11:48
(8) в условие _Модуль = 0 не попадаем так что это можно не рассматривать только код после иначе
   Злопчинский
 
10 - 10.10.19 - 11:49
хотя может в этом алгоритме это некритично
   HawkEye
 
11 - 10.10.19 - 11:53
(0) я не понял, ты хочешь в документе увидеть его движение что-ли, тогда почему рассчитать НА?
   Злопчинский
 
12 - 10.10.19 - 11:55
вроде код простой но написан имхо как-то мутно
в модуль=0
       Если _Док.Выбран() = 0 Тогда
            // Новый документ

            Если _Док.ДатаДок < ПолучитьДатуТА() Тогда
                РегЗаявки.ВременныйРасчет(1);
                ОбщРег.РассчитатьРегистрыНа(_Док.ДатаДок);     
            КонецЕсли;
для нового документа в прошлом дне он обычно записывается в конец дня
рассчитатьНА вызывает вопросы, я бы РасчитатьПО
   Роспатнюк Сергей Сер
 
13 - 10.10.19 - 11:56
(11) Функция в глобальном модуле и попадаю я туда из документа накладная перемещение этот документ хочет увидеть заявку которую предварительно создает документ Заявка на склад.
   Ёпрст
 
14 - 10.10.19 - 11:59
(0) делать строковые измерения регистра - моветон
   Ёпрст
 
15 - 10.10.19 - 11:59
эта шляпа у вас поди не закрывается, никогда
   Ёпрст
 
16 - 10.10.19 - 12:00
СтрокаЗаявки - тип строка какой длины хоть в регистре?
   Злопчинский
 
17 - 10.10.19 - 12:02
если модуль != 0

то если задним числом то считаем до документа
если в ТА - то с учетом документа (?)
и тут будет иметь значение это проведение или перепроведение
так как в этом случае зачищены сущестовавашие движения документа
.
хотя особо не втыкал.
не нравится мне код
   Роспатнюк Сергей Сер
 
18 - 10.10.19 - 12:02
(15) Тип справочник СтрокиЗаявок
   Salimbek
 
19 - 10.10.19 - 12:02
(0) Вполне может быть, что Индекс побился. Попробовать выкинуть всех из базы, потом запустить принудительную Переиндексацию.
   Salimbek
 
20 - 10.10.19 - 12:04
А вообще - (5) хорошо бы подтвердить скриншотами. И еще - проверить, может у тебя есть дубли в Складах/Заказчиках с таким же Наименованием.
   Ёпрст
 
21 - 10.10.19 - 12:05
(18) какого хрена тогда ты сроку пихаешь в фильтр ? И удивляешься что ничего нет ?
   Ёпрст
 
22 - 10.10.19 - 12:06
+21

_СЗ.ДобавитьЗначение(СокрЛП(_ТЗ.СубГУИД));
....
РегЗаявки.УстановитьЗначениеФильтра("СтрокаЗаявки",_СЗ,2);
   Роспатнюк Сергей Сер
 
23 - 10.10.19 - 12:07
(22) уже не пихаю но проблема в том что и с 2мя фильтрами заказчик и МестоХранения не получает нужную строку )
   Ёпрст
 
24 - 10.10.19 - 12:08
пихай туда ссылку на элемент справочника, т.е выкини СокрЛП из кода
   Ёпрст
 
25 - 10.10.19 - 12:10
(23) 3 параметр в методе не верный
   Роспатнюк Сергей Сер
 
26 - 10.10.19 - 12:11
(20) минутку щя все будет
   Роспатнюк Сергей Сер
 
27 - 10.10.19 - 12:23
(24) выкинул результат не изменился нулевой если фильтр только по ГУИДу
   Роспатнюк Сергей Сер
 
28 - 10.10.19 - 12:24
(20) дублей нет проверил в заказчиках ни в складах
   Ёпрст
 
29 - 10.10.19 - 12:24
И еще, в _Док - это контекст документа из модуля проведения ? Если да, то весь код надо сократить до

    ВремРегистры= СоздатьОбъект("Регистры"); 
    РегЗаявки    = ВремРегистры.Заявки; 
     
    РегЗаявки.УстановитьЗначениеФильтра("СтрокаЗаявки",_СЗ,2); 
    РегЗаявки.УстановитьЗначениеФильтра("МестоХранения",_Док.Склад,2); 
    РегЗаявки.УстановитьЗначениеФильтра("Заказчик",_Док.Заказчик,2); 
    Если ИтогиАктуальны()=0 Тогда
    ВремРегистры.Актуальность(1);
     ВремРегистры.РассчитатьРегистрыНа(_Док.ТекущийДокумент());
   КонецЕсли;
  РегЗаявки.ВыгрузитьИтоги(.....
   Роспатнюк Сергей Сер
 
30 - 10.10.19 - 12:24
 
 
   Ёпрст
 
31 - 10.10.19 - 12:24
Никаких сравнений с ТА не надо от слова совсем
   Роспатнюк Сергей Сер
 
32 - 10.10.19 - 12:27
(29) да это контекст из модуля проведения _Остатки= гсРегистрЗаявкиСклада(КонТекст, 1);
   Роспатнюк Сергей Сер
 
33 - 10.10.19 - 12:33
(31) а почему не надо сравнений с ТА не могли бы объяснить, просто так как это Гл модуль вообще страшно делать какието изменения а тут еще и такие сокращения.
   Злопчинский
 
34 - 10.10.19 - 12:33
(29) вот про это я и говорил что код мутный.
чел видимо типовой ТИС не смотрел
   Злопчинский
 
35 - 10.10.19 - 12:34
(33) посмотри в любой проведение типовой ТИС по регистру остаткиТМЦ, например, там код будет как Епрст написал.
   Роспатнюк Сергей Сер
 
36 - 10.10.19 - 12:35
(34) не где посмотреть типовой ТИС к сожалению
   Злопчинский
 
37 - 10.10.19 - 12:35
перепиши с учетом (29) и замечаний от Епрста по типам и пр.
если не получится - будем смотреть
   Роспатнюк Сергей Сер
 
38 - 10.10.19 - 12:37
(37) буду пробовать.
   Роспатнюк Сергей Сер
 
39 - 10.10.19 - 12:40
Функция не обнаружена (ИтогиАктуальны) это может быть функция регистра ?
   dedmoroz777
 
40 - 10.10.19 - 12:56
(39) Это должно быть в модуле проведения. Актуальность итогов передавай в функцию в глобальнике параметром
   Злопчинский
 
41 - 10.10.19 - 13:11
(39) к контексту проведения примени
в твоем случае Док.ИтгиАктуалны
   Злопчинский
 
42 - 10.10.19 - 13:11
(39) подсказка на развитие: если в СП найти эту функцию, то там написано
   Роспатнюк Сергей Сер
 
43 - 10.10.19 - 14:14
(42) первым делом туда и полез потом передал параметром в функцию ну а вот _Док.ИтогиАктуальны(1) = Ошибка в выражении
   Роспатнюк Сергей Сер
 
44 - 10.10.19 - 14:25
вот так взлетело
Функция  гсРегистрЗаявкиСклада(_Док, ИтогиАктуальны) Экспорт
    Перем ТаблИтогов, _ТЗ, ОбщРег, РегЗаявки;
    _ТЗ = СоздатьОбъект("ТаблицаЗначений");
    _Док.ВыгрузитьТабличнуюЧасть(_ТЗ); 
    _ТЗ.Свернуть("СубГУИД","");
    _СЗ = СоздатьОбъект("СписокЗначений"); 
    _ТЗ.ВыбратьСтроки();
    Пока _ТЗ.ПолучитьСтроку() = 1 Цикл 
        Если _ТЗ.СубГУИД.Выбран() = 1 Тогда
            _СЗ.ДобавитьЗначение(_ТЗ.СубГУИД);
            ВрГУИД = _ТЗ.СубГУИД;
        КонецЕсли;
    КонецЦикла;    
    ТаблИтогов = СоздатьОбъект("ТаблицаЗначений");
    ОбщРег    = СоздатьОбъект("Регистры");
    РегЗаявки    = ОбщРег.Заявки;
    
    РегЗаявки.УстановитьЗначениеФильтра("СтрокаЗаявки",_СЗ,2); 
    РегЗаявки.УстановитьЗначениеФильтра("МестоХранения",_Док.Склад,2); 
    РегЗаявки.УстановитьЗначениеФильтра("Заказчик",_Док.Заказчик,2); 
    Если ИтогиАктуальны = 0 Тогда
        ОбщРег.Актуальность(1);
        ОбщРег.РассчитатьРегистрыНа(_Док.ТекущийДокумент());      
    КонецЕсли;
 РегЗаявки.ВыгрузитьИтоги(.....
   Злопчинский
 
45 - 10.10.19 - 14:47
Пока _ТЗ.ПолучитьСтроку() = 1 Цикл 
        Если _ТЗ.СубГУИД.Выбран() = 1 Тогда
            _СЗ.ДобавитьЗначение(_ТЗ.СубГУИД);
            ВрГУИД = _ТЗ.СубГУИД;
        КонецЕсли;
    КонецЦикла;  

вот это треш какойто имхо.
я бы сделал проще.
_ТЗ.Выгрузить(_СЗ);
и нати в СЗ пустое значение (одним оператором) и удалит его если оно есть
   Роспатнюк Сергей Сер
 
46 - 10.10.19 - 15:10
(45) да а мне она не показалась странной наверно просто у меня мало опыта с v7, а каким таким одним оператором можно и найти и удалить сразу не подскажете ?
   Chum
 
47 - 10.10.19 - 15:16
   Роспатнюк Сергей Сер
 
48 - 10.10.19 - 15:25
функция приведена в человеческий вид всем спасибо.
   Злопчинский
 
49 - 10.10.19 - 21:07
(48) опубликуй уже...


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