|
v7: Почему не во всех случаях выводится периодический реквизит? | ☑ | ||
---|---|---|---|---|
0
Косяк
25.01.19
✎
10:31
|
Всем доброго дня.
Почему то в отчет попадают только некоторые записи, хотя в справочнике они проставлены? ОС.Подразделение.Получить( ТекущаяДата() ) |
|||
1
trdm
25.01.19
✎
10:33
|
Запрос плохо работает с периодикой.
|
|||
2
Davalebor
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.01,Н05.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
|
|||
9
ZDenis
25.01.19
✎
13:56
|
(6) Не понял зачем брать ОС из итогов, потом его искать в справочнике, а потом подразделение брать уже из справочника?
|
|||
10
uno-group
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
|
Маразм = склероз. Точно, это склероз называется...
|
|||
16
ZDenis
25.01.19
✎
14:07
|
(14) было
СпрОС.НайтиЭлемент(ТекОС) |
|||
17
Косяк
25.01.19
✎
14:07
|
Сообщить("ОС = "+СпрОС.Код+" ТекОС.Код = "+ТекОС.Код+" СпрОС.Подразделение = "+СпрОС.Подразделение);
СпрОС.Код и ТекОС.Код - выводят одинаковые значения во всех записях, а СпрОС.Подразделение - выводит всего несколько штук из 5 тысяч |
|||
18
Ёпрст
25.01.19
✎
14:11
|
(0) нахрена вообще там бух запрос... ну и ладно..
ТекОС=БИ.Субконто(1); Сообщить("ОС = "+ТекОС+" ТекОС.Код = "+ТекОС.Код+" ТекОС.Подразделение = "+ТекОС.Подразделение.Получить(ТекущаяДата())); |
|||
19
ZDenis
25.01.19
✎
14:13
|
+ 18 только убрать вот это ТекОС.ИспользоватьДату(ТекущаяДата(),1);
|
|||
20
Дмитрий
25.01.19
✎
14:14
|
используешь дату для текос, а подразделение выводишь для спрос
|
|||
21
Davalebor
25.01.19
✎
14:17
|
(20) для СпрОс он ттоже написал использоватьдату, до бух запроса
|
|||
22
Косяк
25.01.19
✎
14:18
|
Несколько подразделений все таки выводятся, вот что удивляет
|
|||
23
Косяк
25.01.19
✎
14:19
|
ОС = м860ах ТекОС.Код = м860ах СпрОС.Подразделение = Цех №32 (транспортный цех)
|
|||
24
HawkEye
25.01.19
✎
14:22
|
(0) СпрОС.Подразделение.Получить(ТекущаяДата()) - что показывает (СпрОС.ИспользоватьДату - надо закоментировать) ?
|
|||
25
Pit0n_08
25.01.19
✎
14:22
|
.Получить(<Дата>)
..... Метод можно использовать только для периодических реквизитов справочника и если для справочника еще не применялся метод ИспользоватьДату. |
|||
26
Davalebor
25.01.19
✎
14:26
|
(23) пробуй как в (18) написано.
и не забудь (19) |
|||
27
Davalebor
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) весь код покажи
|
|||
31
ZDenis
25.01.19
✎
14:34
|
(29) А еще посмотреть бы скрин с историей того ОС, подразделение которого не попадает
|
|||
32
Косяк
25.01.19
✎
14:36
|
Процедура Сформировать()
Если НачДата = Дата(0) Тогда НачДата = НачалоПериодаБИ(); КонецЕсли; Если КонДата = Дата(0) Тогда КонДата = КонецПериодаБИ(); КонецЕсли; НачДата = "01.12.2018"; КонДата = "31.12.2018"; БИ = СоздатьОбъект("БухгалтерскиеИтоги"); БИ.ИспользоватьСубконто(ВидыСубконто.ОсновныеСредства); // в запросе количество не берем Если БИ.ВыполнитьЗапрос(НачДата,КонДата,"Н05.01,Н05.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); Таблица.Показать("Отчет по ОС"); КонецПроцедуры |
|||
33
Davalebor
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?
Потом тестирование и исправление запусти "Только тестировать" |
|||
36
trad
25.01.19
✎
14:39
|
(30) получи! ))
|
|||
37
Вася Теркин
25.01.19
✎
14:39
|
Вообще проще Выгрузка-Загрузка
|
|||
38
Вася Теркин
25.01.19
✎
14:40
|
ОС = СпрОС.НайтиПоКоду(ТекОС.Код);//
Замени на СпрОС.НайтиЭлемент(ТекОС) и ещё раз пробуй |
|||
39
trad
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
|
грузи в тз и там с объектом работай как "периодический" при обработке значения
|
|||
43
Kigo_Kigo
25.01.19
✎
14:44
|
(39) В таблице печатной формы
И вообще ТС добавь колоку в ТЗ , запихни туда подразделения и в конце посмотри что и как заполнилось в ТЗ , через ТЗ.ВыбратьСтроку(); |
|||
44
Вася Теркин
25.01.19
✎
14:45
|
+1 Периодический всегда корректно дает
|
|||
45
Davalebor
25.01.19
✎
14:47
|
(41) Запрос-то тут при чем? У него не используется запрос для обращения к периодическому реквизиту.
|
|||
46
trad
25.01.19
✎
14:48
|
(45) ты прочитал ветку! читер
|
|||
47
Гад
25.01.19
✎
14:48
|
(45) 0+1 = 41 )
|
|||
48
И_Вас_Вылечат
25.01.19
✎
14:50
|
ТекОС=БИ.Субконто(1);
ОС = СпрОС.НайтиПоКоду(ТекОС.Код);// Найдем ОС по инв.номеру Зачем по коду то? Не легше сразу элемент искать? ОС = СпрОС.НайтиЭлемент(ТекОС); Может у вас там сто тыщ миллионов элементов с одинаковым кодом |
|||
49
HawkEye
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); Сообщить("ОС = "+ТекОС+" ТекОС.Код = "+ТекОС.Код+" ТекОС.Подразделение = "+ТекОС.Подразделение.Получить(ТекущаяДата())); КонецЦикла; |
|||
54
ZDenis
25.01.19
✎
15:00
|
(51) эээ
после ОС = СпрОС.НайтиЭлемент(ТекОС); в ОС будет 1 или 0, все смешали в кучу. верный ответ был в (18). Если после этого выводится что-то не то, то в периодике проблема. может там обнуляется какой-то датой значение. |
|||
55
Ёпрст
25.01.19
✎
15:00
|
выполни этот код и никакой отсебятинки
|
|||
56
Davalebor
25.01.19
✎
15:02
|
(51) Возьми код ОС, у которого ТОЧНО в истории есть значение реквизита подразделение на сегодняшнюю дату. и напиши простую обработку, что бы вывести его подразделение.
СпрОС = СоздатьОбъект("Справочник.ОсновныеСредства"); СпрОС.НайтиПоКоду(Тут код ОС напиши); Сообщить("ОС = "+СпрОС.Код+СпрОС.Наименование+" СпрОС.Подразделение = "+СпрОС.Подразделение.Получить(ТекущаяДата())); |
|||
57
Ёпрст
25.01.19
✎
15:02
|
И ... нафига вообще тебе впёрлось это подразделение, если его в коде потом нет нигде и оно не используется
|
|||
58
trad
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
|
или не тот реквизит
|
|||
67
Davalebor
25.01.19
✎
15:23
|
(64) Скриншот окошка с историей значения реквизита подразделение сделай, для ОС, у которого по твоему этот реквизит на текущую дату существует, но в отчет подразделение не выводится.
|
|||
68
Davalebor
25.01.19
✎
15:24
|
(66) да, может не тот реквизит..
|
|||
69
HawkEye
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
|
Спасибо Коллеги, что простимулировали дополнительно пошевелить извилинами!:)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |