Имя: Пароль:
1C
1C 7.7
v7: Не находит заявку в регистре
,
0 Роспатнюк Сергей Сер
 
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
2 Builder
 
10.10.19
10:51
Начните с отключения фильтров. А дальше отладчик в руки и искать ошибку.
3 Kigo_Kigo
 
10.10.19
10:58
_Док.Заказчик = контрагент или юрфизлицо контрагента?
отключай фильтры и смотри и апрверь что в _сз
4 dk
 
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
хотя может в этом алгоритме это некритично
11 HawkEye
 
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) Тип справочник СтрокиЗаявок
19 Salimbek
 
10.10.19
12:02
(0) Вполне может быть, что Индекс побился. Попробовать выкинуть всех из базы, потом запустить принудительную Переиндексацию.
20 Salimbek
 
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
Функция не обнаружена (ИтогиАктуальны) это может быть функция регистра ?
40 dedmoroz777
 
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, а каким таким одним оператором можно и найти и удалить сразу не подскажете ?
47 Chum
 
10.10.19
15:16
48 Роспатнюк Сергей Сер
 
10.10.19
15:25
функция приведена в человеческий вид всем спасибо.
49 Злопчинский
 
10.10.19
21:07
(48) опубликуй уже...