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

v7: Почему не во всех случаях выводится периодический реквизит?

v7: Почему не во всех случаях выводится периодический реквизит?
Я
   Косяк
 
25.01.19 - 10:31
Всем доброго дня.

Почему то в отчет попадают только некоторые записи, хотя в справочнике они проставлены?

ОС.Подразделение.Получить( ТекущаяДата() )
 
 
   trdm
 
1 - 25.01.19 - 10:33
Запрос плохо работает с периодикой.
   Davalebor
 
2 - 25.01.19 - 10:35
(0) Не все элементы справочника ОС выводятся? Или не во всех, выведенных в отчет элементах, отображается подразделение?
   Косяк
 
3 - 25.01.19 - 11:33
В отчет выводятся все элементы справочника ОС. Но не все реквизиты <Подразделение> выводятся, хотя их значения установлены (в разные годы)
   ДенисЧ
 
4 - 25.01.19 - 11:34
(3) Открой ту шмэл, у которой не выводится, и посмотри историю реквизитов.
   Косяк
 
5 - 25.01.19 - 12:03
Я в историю и смотрю. Там все проставлено
   Косяк
 
6 - 25.01.19 - 13:50
НачДата = "01.12.2018";
    КонДата = "31.12.2018";
                                
    БИ = СоздатьОбъект("БухгалтерскиеИтоги");   
    
    БИ.ИспользоватьСубконто(ВидыСубконто.ОсновныеСредства);
    
    // в запросе количество не берем

    Если БИ.ВыполнитьЗапрос(НачДата,КонДата,"Н05.0105.02",,,1,,1) = 0 Тогда
        Предупреждение("Не удается выполнить запрос к бухгалтерским итогам!",60);
        Возврат;
    КонецЕсли;
    
    СпрОС     = СоздатьОбъект("Справочник.ОсновныеСредства");
    СпрОС.ИспользоватьДату(ТекущаяДата(),1);              
    СпрПодр = СоздатьОбъект("Справочник.Подразделения");  
    
    БИ.ВыбратьСубконто(1);
    Пока БИ.ПолучитьСубконто(1) = 1 Цикл  
        
                
        ТекОС=БИ.Субконто(1);
        ТекОС.ИспользоватьДату(ТекущаяДата(),1);              
        
        ОС = СпрОС.НайтиПоКоду(ТекОС.Код);// Найдем ОС по инв.номеру 

        
        //Если Подр.НайтиПоКоду(Подр)=1 Тогда

            Сообщить("ОС = "+СпрОС.Код+"     ТекОС.Код = "+ТекОС.Код+"   СпрОС.Подразделение = "+СпрОС.Подразделение);
        //КонецЕсли;

        



Выводится только небольшая часть подразделений, а остальные почему то не выводятся...
   Вася Теркин
 
7 - 25.01.19 - 13:53
(6) База файловая? индексный файл убей. Только из программы выйди.
Только индексный убей, а не рабочий
   Вася Теркин
 
8 - 25.01.19 - 13:54
он заканчивается на cdx
   ZDenis
 
9 - 25.01.19 - 13:56
(6) Не понял зачем брать ОС из итогов, потом его искать в справочнике, а потом подразделение брать уже из справочника?
   uno-group
 
10 - 25.01.19 - 13:58
СпрОС.НайтиПоКоду по ходу не всегда находит
 
 Рекламное место пустует
   Ёпрст
 
11 - 25.01.19 - 13:58
(9) в нике ответ же
   Вася Теркин
 
12 - 25.01.19 - 14:01
(10) Ему объект нужен, а не ссылка...
   Вася Теркин
 
13 - 25.01.19 - 14:02
А подразделение ему нужно на дату...
   Вася Теркин
 
14 - 25.01.19 - 14:04
А в семерке разве не было НайтиЭлемент? Маразм проклятый.
   Вася Теркин
 
15 - 25.01.19 - 14:04
Маразм = склероз. Точно, это склероз называется...
   ZDenis
 
16 - 25.01.19 - 14:07
(14) было
СпрОС.НайтиЭлемент(ТекОС)
   Косяк
 
17 - 25.01.19 - 14:07
Сообщить("ОС = "+СпрОС.Код+"     ТекОС.Код = "+ТекОС.Код+"   СпрОС.Подразделение = "+СпрОС.Подразделение);

СпрОС.Код и ТекОС.Код - выводят одинаковые значения во всех записях, а СпрОС.Подразделение - выводит всего несколько штук из 5 тысяч
   Ёпрст
 
18 - 25.01.19 - 14:11
(0) нахрена вообще там бух запрос... ну и ладно..

ТекОС=БИ.Субконто(1);
 Сообщить("ОС = "+ТекОС+"     ТекОС.Код = "+ТекОС.Код+"   ТекОС.Подразделение = "+ТекОС.Подразделение.Получить(ТекущаяДата()));
   ZDenis
 
19 - 25.01.19 - 14:13
+ 18 только убрать вот это ТекОС.ИспользоватьДату(ТекущаяДата(),1);
   Дмитрий
 
20 - 25.01.19 - 14:14
используешь дату для текос, а подразделение выводишь для спрос
   Davalebor
 
21 - 25.01.19 - 14:17
(20) для СпрОс он ттоже написал использоватьдату, до бух запроса
   Косяк
 
22 - 25.01.19 - 14:18
Несколько подразделений все таки выводятся, вот что удивляет
   Косяк
 
23 - 25.01.19 - 14:19
ОС = м860ах     ТекОС.Код = м860ах   СпрОС.Подразделение = Цех №32 (транспортный цех)
   HawkEye
 
24 - 25.01.19 - 14:22
(0) СпрОС.Подразделение.Получить(ТекущаяДата()) - что показывает (СпрОС.ИспользоватьДату - надо закоментировать) ?
   Pit0n_08
 
25 - 25.01.19 - 14:22
.Получить(<Дата>)
.....
Метод  можно использовать только для периодических реквизитов справочника и если для справочника еще не применялся метод ИспользоватьДату.
   Davalebor
 
26 - 25.01.19 - 14:26
(23) пробуй как в (18) написано.
и не забудь (19)
   Davalebor
 
27 - 25.01.19 - 14:27
и на всякий случай, ТекущаяДата() что возвращает?
   Косяк
 
28 - 25.01.19 - 14:28
текущая дата 25.01.2019
   Косяк
 
29 - 25.01.19 - 14:32
ОС = Винтовой компрессор SB 75-08 инв.№5290117     ТекОС.Код = 5290117   ТекОС.Подразделение = Цех №2 (литейный)

Сделано как в (18), только несколько записей из тысяч выдает
   Ёпрст
 
30 - 25.01.19 - 14:33
(29) весь код покажи
   ZDenis
 
31 - 25.01.19 - 14:34
(29) А еще посмотреть бы скрин с историей того ОС, подразделение которого не попадает
   Косяк
 
32 - 25.01.19 - 14:36
Процедура Сформировать()         
                                                
    Если НачДата = Дата(0) Тогда
        НачДата = НачалоПериодаБИ();
    КонецЕсли;    
    
    Если КонДата = Дата(0) Тогда
        КонДата = КонецПериодаБИ();
    КонецЕсли;
    
    НачДата = "01.12.2018";
    КонДата = "31.12.2018";
                                
    БИ = СоздатьОбъект("БухгалтерскиеИтоги");   
    
    БИ.ИспользоватьСубконто(ВидыСубконто.ОсновныеСредства);
    
    // в запросе количество не берем

    Если БИ.ВыполнитьЗапрос(НачДата,КонДата,"Н05.0105.02",,,1,,1) = 0 Тогда
        Предупреждение("Не удается выполнить запрос к бухгалтерским итогам!",60);
        Возврат;
    КонецЕсли;
    
    //Выбранные бухгалтерские итоги поместим в таблицу значений

    Результат = СоздатьОбъект("ТаблицаЗначений");
    Результат.НоваяКолонка("ОС");
    Результат.НоваяКолонка("Группа");
    Результат.НоваяКолонка("нБаланс", "Число");
    Результат.НоваяКолонка("оБаланс", "Число");
    Результат.НоваяКолонка("кБаланс", "Число");
    Результат.НоваяКолонка("нАмортизация", "Число");
    Результат.НоваяКолонка("оАмортизация", "Число");
    Результат.НоваяКолонка("кАмортизация", "Число");
    
    СпрОС     = СоздатьОбъект("Справочник.ОсновныеСредства");
    СпрОС.ИспользоватьДату(ТекущаяДата(),1);              
    СпрПодр = СоздатьОбъект("Справочник.Подразделения");  
    
    БИ.ВыбратьСубконто(1);
    Пока БИ.ПолучитьСубконто(1) = 1 Цикл  
        
                
        ТекОС=БИ.Субконто(1);
        //ТекОС.ИспользоватьДату(ТекущаяДата(),1);              

        
        ОС = СпрОС.НайтиПоКоду(ТекОС.Код);// Найдем ОС по инв.номеру 

        
        Если ТекОС.Выбран()=0 Тогда
            Продолжить;
        КонецЕсли;
        
        
        Результат.НоваяСтрока();     
        Результат.ОС=ТекОС;
        Результат.Группа=ТекОС.СубСчет01;
        
        БИ.ВыбратьСчета();
        Если БИ.ПолучитьСчет(,СчетПоКоду("Н05.01"))=1 Тогда
            Результат.нБаланс = БИ.СНД(1);
            Результат.кБаланс = БИ.СКД(1);
            Результат.оБаланс = БИ.ДО(1) - БИ.КО(1);
        КонецЕсли;
        Если БИ.ПолучитьСчет(,СчетПоКоду("Н05.02"))=1 Тогда
            Результат.нАмортизация = Результат.нАмортизация + БИ.СНК(1);     
            Результат.кАмортизация = Результат.кАмортизация + БИ.СКК(1);
            Результат.оАмортизация = Результат.оАмортизация + БИ.КО(1)-БИ.ДО(1);
        КонецЕсли;
    КонецЦикла; 
    
    Результат.Свернуть("ОС,Группа","нБаланс,кБаланс,оБаланс,нАмортизация,кАмортизация,оАмортизация");
    Результат.Сортировать("Группа,ОС");
    // Создадим еще три таблицы значений для итогов по счету, подразделению и участку

    ИтогоГруппа = СоздатьОбъект("ТаблицаЗначений");
    ИтогоГруппа.Загрузить(Результат);

    ИтогоГруппа.Свернуть("Группа","нБаланс,кБаланс,оБаланс,нАмортизация,кАмортизация,оАмортизация");
    
    
    Таблица = СоздатьОбъект("Таблица");
    Таблица.ИсходнаяТаблица( "Таблица" ); 
    Таблица.ВывестиСекцию("С1"); 
    Таблица.ВывестиСекцию("С2"); 
    

    Результат.ВыбратьСтроки(); 
    ПредыдущаяГруппа="";
    
    N = 1;           
    Пока Результат.ПолучитьСтроку()=1 Цикл 
        Если ПредыдущаяГруппа<>Результат.Группа Тогда 
            Группа="("+Результат.Группа+") "+Результат.Группа.Наименование;
            Стр=""; 
            нБалансИтогоГр=0; 
            оБалансИтогоГр=0;
            кБалансИтогоГр=0;
            
            нАмортизацияИтогоГр=0; 
            оАмортизацияИтогоГр=0;
            кАмортизацияИтогоГр=0; 
            
            нОстатокИтогоГр=0; 
            кОстатокИтогоГр=0;
            Если ИтогоГруппа.НайтиЗначение(Результат.Группа,Стр,1)=1 Тогда 
                ИтогоГруппа.ПолучитьСтрокуПоНомеру(Стр);
                нБалансИтогоГр=ИтогоГруппа.нБаланс; 
                оБалансИтогоГр=ИтогоГруппа.оБаланс;
                кБалансИтогоГр=ИтогоГруппа.кБаланс;
                
                нАмортизацияИтогоГр=ИтогоГруппа.нАмортизация; 
                оАмортизацияИтогоГр=ИтогоГруппа.оАмортизация;
                кАмортизацияИтогоГр=ИтогоГруппа.кАмортизация; 
                
                нОстатокИтогоГр=ИтогоГруппа.нБаланс-ИтогоГруппа.нАмортизация; 
                кОстатокИтогоГр=ИтогоГруппа.кБаланс-ИтогоГруппа.кАмортизация;
            КонецЕсли;
            
        КонецЕсли;
        
        ОС=Результат.ОС;               
        
        ДатаКонцаАмортизации = ОС.ДатаВводаВЭксплуатацию;
        ДатаКонцаАмортизации = ДобавитьМесяц(ДатаКонцаАмортизации,ОС.СрокПолезногоИспользования);;
        
    
        нБаланс=Результат.нБаланс; 
        оБаланс=Результат.оБаланс;
        кБаланс=Результат.кБаланс;
        
        нАмортизация=Результат.нАмортизация; 
        оАмортизация=Результат.оАмортизация;
        кАмортизация=Результат.кАмортизация;
        
        нОстаток=нБаланс-нАмортизация;
        кОстаток=кБаланс-кАмортизация;
                                                 
        Таблица.ВывестиСекцию("С4");   
        N = N + 1;
        ПредыдущаяГруппа=Результат.Группа;
    КонецЦикла;
    
    нБалансИтого=Результат.Итог("нБаланс");
    оБалансИтого=Результат.Итог("оБаланс");
    кБалансИтого=Результат.Итог("кБаланс");
    нАмортизацияИтого=Результат.Итог("нАмортизация");
    оАмортизацияИтого=Результат.Итог("оАмортизация");
    кАмортизацияИтого=Результат.Итог("кАмортизация");
    нОстатокИтого=Результат.Итог("нБаланс")-Результат.Итог("нАмортизация");
    кОстатокИтого=Результат.Итог("кБаланс")-Результат.Итог("кАмортизация");
       
    Таблица.ВывестиСекцию("С5"); 
    Таблица.Опции(0,0,0,0,"ОпцииОтчетаПоОС");
    Таблица.ТолькоПросмотр(1);
    Таблица.Показать("Отчет по ОС");
КонецПроцедуры
   Davalebor
 
33 - 25.01.19 - 14:37
(29) Код написан верно. Может там в истории на эту дату и правда нет значений подразделения?
 
 
   Косяк
 
34 - 25.01.19 - 14:38
(29)

Там в истории встречаются 2012, 2013, 2014 годы, а также 2018
   Вася Теркин
 
35 - 25.01.19 - 14:38
Там индексы битые!!!!! Выйди из базы и удали все CDX. Очистил файлы CDX?
Потом тестирование и исправление запусти "Только тестировать"
   trad
 
36 - 25.01.19 - 14:39
(30) получи! ))
   Вася Теркин
 
37 - 25.01.19 - 14:39
Вообще проще Выгрузка-Загрузка
   Вася Теркин
 
38 - 25.01.19 - 14:40
ОС = СпрОС.НайтиПоКоду(ТекОС.Код)// 

Замени на 
СпрОС.НайтиЭлемент(ТекОС)

и ещё раз пробуй
   trad
 
39 - 25.01.19 - 14:41
(32) где тут вообще обращение к подразделению???
   Вася Теркин
 
40 - 25.01.19 - 14:42
А вот это художество

        ОС = СпрОС.НайтиПоКоду(ТекОС.Код)// Найдем ОС по инв.номеру 


        
        Если ТекОС.Выбран()=0 Тогда
            Продолжить;
        КонецЕсли;

не наоборот должно идти?
   Гад
 
41 - 25.01.19 - 14:43
если в запросе при обращении к переодике значение одно, то выводить будет, если несколько значений то будет ПустоеЗначение
зы тема ж баян лет на 10 -15 с ней опоздал
   Гад
 
42 - 25.01.19 - 14:44
грузи в тз и там с объектом работай как "периодический" при обработке значения
   Kigo_Kigo
 
43 - 25.01.19 - 14:44
(39) В таблице печатной формы
И вообще ТС добавь колоку в ТЗ , запихни туда подразделения и в конце посмотри что и как заполнилось в ТЗ , через ТЗ.ВыбратьСтроку();
   Вася Теркин
 
44 - 25.01.19 - 14:45
+1 Периодический всегда корректно дает
   Davalebor
 
45 - 25.01.19 - 14:47
(41) Запрос-то тут при чем? У него не используется запрос для обращения к периодическому реквизиту.
   trad
 
46 - 25.01.19 - 14:48
(45) ты прочитал ветку! читер
   Гад
 
47 - 25.01.19 - 14:48
(45) 0+1  = 41 )
   И_Вас_Вылечат
 
48 - 25.01.19 - 14:50
ТекОС=БИ.Субконто(1);
                    
 ОС = СпрОС.НайтиПоКоду(ТекОС.Код)// Найдем ОС по инв.номеру 


Зачем по коду то?
Не легше сразу элемент искать?

ОС = СпрОС.НайтиЭлемент(ТекОС);

Может у вас там сто тыщ миллионов элементов с одинаковым кодом
   HawkEye
 
49 - 25.01.19 - 14:51
(40) (48) т.е. то, что его в принципе искать не надо... вас не смущает?
 
 Рекламное место пустует
   И_Вас_Вылечат
 
50 - 25.01.19 - 14:54
(49) немножко )
   Косяк
 
51 - 25.01.19 - 14:54
(48) результат тот же самы - всего несколько подразделений

    СпрОС     = СоздатьОбъект("Справочник.ОсновныеСредства");
    СпрОС.ИспользоватьДату(ТекущаяДата(),1);              
    СпрПодр = СоздатьОбъект("Справочник.Подразделения");  
    
    БИ.ВыбратьСубконто(1);
    Пока БИ.ПолучитьСубконто(1) = 1 Цикл  
        
                
        ТекОС=БИ.Субконто(1);
        ТекОС.ИспользоватьДату(ТекущаяДата(),1);              
        
        //ОС = СпрОС.НайтиПоКоду(ТекОС.Код); // Найдем ОС по инв.номеру 

        ОС = СпрОС.НайтиЭлемент(ТекОС);
        
        //Подр = СпрПодр.НайтиПоКоду(ОС.Подразделение.Код); // 

                                                               
        
//ТекОС=БИ.Субконто(1);

//Сообщить("ОС = "+ТекОС+"     ТекОС.Код = "+ТекОС.Код+"   ТекОС.Подразделение = "+ТекОС.Подразделение.Получить(ТекущаяДата()));        
        
        //Если Подр.НайтиПоКоду(Подр)=1 Тогда

            Сообщить("ОС = "+СпрОС.Код+"     ТекОС.Код = "+ТекОС.Код+"   СпрОС.Подразделение = "+СпрОС.Подразделение+"  ОС = "+ОС);
        //КонецЕсли;

        
        //Сообщить("ТекОС= "+ТекОС+"     ТекОС.Код = "+ТекОС.Код);


        ////Если ТекОС.Выбран()=0 Тогда

        ////    Продолжить;

        ////КонецЕсли;

        
        //Если (ГруппаОС.Выбран()=1) и (ТекОС.АмортизационнаяГруппа<>ГруппаОС) Тогда

        //    Продолжить;

        //КонецЕсли;

        
        //Если ОбъектОС.ЭтоГруппа()=1 Тогда

        //    Если ТекОС.ПринадлежитГруппе(ОбъектОС)=0 Тогда

        //        Продолжить;

        //    КонецЕсли;

        //КонецЕсли;
   И_Вас_Вылечат
 
52 - 25.01.19 - 14:55
проверка Выбран() тож так себе для ТекОС
   Ёпрст
 
53 - 25.01.19 - 14:59
(51)

   БИ.ВыбратьСубконто(1);
    Пока БИ.ПолучитьСубконто(1) = 1 Цикл  
        ТекОС=БИ.Субконто(1);
        Сообщить("ОС = "+ТекОС+"     ТекОС.Код = "+ТекОС.Код+"   ТекОС.Подразделение = "+ТекОС.Подразделение.Получить(ТекущаяДата()));   
    КонецЦикла;
   ZDenis
 
54 - 25.01.19 - 15:00
(51) эээ
после ОС = СпрОС.НайтиЭлемент(ТекОС);
в ОС будет 1 или 0, все смешали в кучу.

верный ответ был в (18). Если после этого выводится что-то не то, то в периодике проблема. может там обнуляется какой-то датой значение.
   Ёпрст
 
55 - 25.01.19 - 15:00
выполни этот код и никакой отсебятинки
   Davalebor
 
56 - 25.01.19 - 15:02
(51) Возьми код ОС, у которого ТОЧНО в истории есть значение реквизита подразделение на сегодняшнюю дату. и напиши простую обработку, что бы вывести его подразделение.

СпрОС     = СоздатьОбъект("Справочник.ОсновныеСредства");
СпрОС.НайтиПоКоду(Тут код ОС напиши);
Сообщить("ОС = "+СпрОС.Код+СпрОС.Наименование+"   СпрОС.Подразделение = "+СпрОС.Подразделение.Получить(ТекущаяДата()));
   Ёпрст
 
57 - 25.01.19 - 15:02
И ... нафига вообще тебе впёрлось это подразделение, если его в коде потом нет нигде и оно не используется
   trad
 
58 - 25.01.19 - 15:04
(57) телепаты говорят в таблице (43)
   И_Вас_Вылечат
 
59 - 25.01.19 - 15:07
(54) таконо, 
спрос.ТекущийЭлемент() надо присваивать то )
Ну и Ёпрст прав в 53
   Косяк
 
60 - 25.01.19 - 15:09
(57) Я делаю файл выгрузки по ОС, чтобы самопальной обработкой загрузить эти данные, создавая по ходу загрузки элементы справочника ОбъектыЭксплуатации в 1С ERP и тут же создание документов ввода начальных остатков по ним. Проставлять потом вручную подразделения - трудоемко...
   Ёпрст
 
61 - 25.01.19 - 15:10
(60) и ? как в (53) что хоть ?
   Косяк
 
62 - 25.01.19 - 15:14
(53)

Вот этот код выводит только некоторые подразделения из 5000


БИ.ВыбратьСубконто(1);
    Пока БИ.ПолучитьСубконто(1) = 1 Цикл  
        ТекОС=БИ.Субконто(1);
        Сообщить("ОС = "+ТекОС+"     ТекОС.Код = "+ТекОС.Код+"   ТекОС.Подразделение = "+ТекОС.Подразделение.Получить(ТекущаяДата()));   
    КонецЦикла;
   Ёпрст
 
63 - 25.01.19 - 15:17
(62) ну значит нет значений периодического реквизита у этих ОС на текущую дату.
   Косяк
 
64 - 25.01.19 - 15:20
(62) У меня прямо в отчете можно кликнуть по колонке Наименовании - открывается эта позиция в справочнике ОС, смотрю - там задано подразделение, а в отчете его нет. Нахожу строку, где подразделение вывелось, открываю эту позицию в справочнике ОС и никакой разницы в <истории> реквизитов я не вижу
   Ёпрст
 
65 - 25.01.19 - 15:22
(64) чудес не бывает, смотришь не то ОС.
   Ёпрст
 
66 - 25.01.19 - 15:23
или не тот реквизит
   Davalebor
 
67 - 25.01.19 - 15:23
(64) Скриншот окошка с историей значения реквизита подразделение сделай, для ОС, у которого по твоему этот реквизит на текущую дату существует, но в отчет подразделение не выводится.
   Davalebor
 
68 - 25.01.19 - 15:24
(66) да, может не тот реквизит..
   HawkEye
 
69 - 25.01.19 - 15:24
(64) уверен, что это другое ОС?))
   Косяк
 
70 - 25.01.19 - 15:24
(66) Реквизит называется <Подразделение> и имеет тип Справочник.подразделения
   Ёпрст
 
71 - 25.01.19 - 15:27
Ну так тогда:

БИ.ВыбратьСубконто(1);
    Пока БИ.ПолучитьСубконто(1) = 1 Цикл  
        ТекОС=БИ.Субконто(1);
      Если ПустоеЗначение(ТекОС.Подразделение.Получить(ТекущаяДата())) = 1 Тогда
      ОткрытьФорму(Текос);
      Возврат;"
     КонецЕсли;

    КонецЦикла;
   Ёпрст
 
72 - 25.01.19 - 15:28
в открытой форме твоё подразделение есть ?
   Косяк
 
73 - 25.01.19 - 15:29
Короче, нашел ошибку. Оказалось, что в зависимости от вида ОС, подразделение может стоять в Субконто1, Субконто2, в Субконто3
   Косяк
 
74 - 25.01.19 - 15:31
Спасибо Коллеги, что простимулировали дополнительно пошевелить извилинами!:)


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