|
v7: Почему из документа исчезает операция? | ☑ | ||
---|---|---|---|---|
0
САГвиник
26.12.11
✎
13:18
|
Нужно выбрать документы с определенными счетами, а затем выбрать из полученного набора те документы, в которых встречаются заданные проводки. Но ни черта не выходит, бо после записи документов в таблицу значений атрибут "операция" в этих документах почему-то становится неагрегатным и никакие ухищрения, вроде представленных ниже, не помогают.
ТЗ=СоздатьОбъект("ТаблицаЗначений"); ТЗ.НоваяКолонка("Документ","Документ"); ТЗ.НоваяКолонка("Операция","Операция"); Ит=СоздатьОбъект("БухгалтерскиеИтоги"); Если Ит.ВыполнитьЗапрос(Дата1, Дата2, "10.3.1,10.6",,,, "Проводка") = 0 Тогда Возврат; КонецЕсли; Докт=СоздатьОбъект("Документ"); Ит.ВыбратьПериоды(); Пока Ит.ПолучитьПериод() = 1 Цикл Опер = Ит.Операция; Док= Опер.Документ; Докт.НайтиДокумент(Док); ТЗ.НоваяСтрока(); ТЗ.Документ=Докт.ТекущийДокумент(); ТЗ.Операция=Докт.Операция; ТЗ.Счета="10.3.1,10.6"; КонецЦикла; Судя по отладчику, в ТЗ записывается агрегатная операция, но дальше при попытке обратиться к записанным данным (см.ниже) 1С-ка милостиво сообщает об ошибке: "Значение не представляет агрегатный объект (ВыбратьПроводки)": ТЗ.Операция.ВыбратьПроводки(); Не катит и такой вариант: ТЗ.Документ.Операция.ВыбратьПроводки(); Со списком значений такая же фигня. Что не так и как выкрутиться? |
|||
1
GLazNik
26.12.11
✎
13:25
|
А конечная то цель какая?
Не проще ли: Опер = СоздатьОбъект("Операция"); Опер.НайтиОперацию(ТЗ.Документ); Опер.ВыбратьПроводки(); Как-то так... заполнение ТЗ тоже оставляет вопросы... периодичность "Проводка", а если в документе несколько проводок? |
|||
2
Андрей_Андреич
naïve
26.12.11
✎
13:26
|
Опера=СоздатьОбъект("Операция");
Опера.НайтиОперацию(ТЗ.Документ.Операция); Опера.ВыбратьПроводки(); |
|||
3
САГвиник
26.12.11
✎
13:28
|
Конечная цель - удалить лишнее :)
|
|||
4
Эльниньо
26.12.11
✎
13:30
|
(3) Что удалить? Проводки дока?
|
|||
5
Андрей_Андреич
naïve
26.12.11
✎
13:30
|
(3) Вам к раввину
|
|||
6
GLazNik
26.12.11
✎
13:31
|
(3) тогда код в одну строку:
ТЗ.УдалитьСтроки(); |
|||
7
САГвиник
26.12.11
✎
13:31
|
Не, доки с некоторыми проводками
|
|||
8
GLazNik
26.12.11
✎
13:33
|
(7) а зачем тогда проводки? ВыбратьПроводки? Нужны только документы. Разве нет?
|
|||
9
САГвиник
26.12.11
✎
13:36
|
Да, документы, но только работающие с определенными счетами. А затем из выбранных нужно удалить те, которые имеют определенные проводки. Но для последнего нужно залезть в операцию, а ее нет
|
|||
10
viktor_vv
26.12.11
✎
13:41
|
Так ты сразу в запросе наложи условия на корреспонденции.
ТЗ = СоздатьОбъект("ТаблицаЗначений") ; ТЗ.НоваяКолонка("Документ","Документ"); ТЗ.НоваяКолонка("Операция","Операция"); БИ = СоздатьОбъект("БухгалтерскиеИтоги"); БИ.ВыполнитьЗапрос(фдДатаНач,фдДатаКон,"10.3.1,10.6","Перечень счетов кредита",,2,"Проводка"); БИ.ВыбратьПериоды(); Пока БИ.ПолучитьПериод() = 1 Цикл ТЗ.НоваяСтрока(); ТЗ.Документ = БИ.Операция.Документ; ТЗ.Операция = БИ.Операция; КонецЦикла; // ТЗ.ВыбратьСтроку(); Док = СоздатьОбъект("Документ") ТЗ.ВыбратьСтроки(); Пока ТЗ.ПолучитьСтроку() = 1 Цикл Если Док.НайтиДокумент(ТЗ.Документ) = 1 Тогда Док.Удалить(0); КонецЕсли ; КонецЦикла; |
|||
11
САГвиник
26.12.11
✎
13:41
|
(5) А раввин знает?
|
|||
12
GLazNik
26.12.11
✎
13:41
|
(9) Видишь суслика? А он есть!
|
|||
13
Vladal
26.12.11
✎
13:42
|
(11) в (5) таки про обрезание в (3) "удалите всё лишнее"
|
|||
14
Vladal
26.12.11
✎
13:44
|
(12) и (9) - а операция включена или нет? Может, её в ЖО отключили?
|
|||
15
GLazNik
26.12.11
✎
13:45
|
(10) а почему собственно только кредита ("Перечень счетов кредита")? Выборка даст обороты между счетами, но они могут быть как дебетовые так и кредитовые. Но если добавить условие на ДО() > 0, то можно использовать.
|
|||
16
viktor_vv
26.12.11
✎
13:47
|
(15) Да я примерно написал, я ж не знаю какие условия там он хочет накладывать.
Если таки надо залезть в операции, то все там работает. Док = СоздатьОбъект("Документ") ТЗ.ВыбратьСтроки(); Пока ТЗ.ПолучитьСтроку() = 1 Цикл ТекОпер = ТЗ.Операция ; ТекОпер.ВыбратьПроводки(); Пока ТекОпер.ПолучитьПроводку() = 1 Цикл Сообщить(""+ТекОпер.Операция+" "+ТекОпер.Дебет.Счет) ; Если ТекОпер.Дебет.Счет = СчетПоКоду("79") Тогда КонецЕсли ; КонецЦикла; //Если Док.НайтиДокумент(ТЗ.Документ) = 1 Тогда // Док.Удалить(0); //КонецЕсли ; КонецЦикла; |
|||
17
САГвиник
26.12.11
✎
13:48
|
(10) Не могу. Мне нужно указать конкретную проводку. А как ее выделить запросом?
|
|||
18
GLazNik
26.12.11
✎
13:48
|
(14) За доли секунды между запросом к БИ и циклом по ТЗ? Сомневаюсь
|
|||
19
viktor_vv
26.12.11
✎
13:49
|
(17) Я не помойму, что значит конкретную проводку. Как ты ее идентифицируешь ?
|
|||
20
viktor_vv
26.12.11
✎
13:49
|
(19)+ Смотри (16) это обход поводок по операциям в ТЗ.
|
|||
21
Vladal
26.12.11
✎
13:50
|
(18) Нет, в принципе - открыть проводки проблемного документа в ЖО и посмотреть - есть их там или нет, и активные или отключены.
|
|||
22
GLazNik
26.12.11
✎
13:51
|
(21) Как они могут быть выключенны если уже попали в Ит.ВыполнитьЗапрос?
|
|||
23
САГвиник
26.12.11
✎
13:52
|
(19) Счет дебета и счет кредита
|
|||
24
САГвиник
26.12.11
✎
13:53
|
(16) Согласен, работает, но... пока не сделаешь запрос
|
|||
25
viktor_vv
26.12.11
✎
13:55
|
(24) Чаво ? Какой запрос ? Ты (16) вставь в (10). У меня че-то все рабоает в таком варианте.
|
|||
26
viktor_vv
26.12.11
✎
14:00
|
Сорри, че-то у меня тоже не работает :).
|
|||
27
САГвиник
26.12.11
✎
14:07
|
Тогда че, и впрямь к раввину?
|
|||
28
GLazNik
26.12.11
✎
14:07
|
(26) Думается мне, что нужно заменить
ТекОпер = ТЗ.Операция ; на ТекОпер = СоздатьОбъект("Операция"); ТекОпер .НайтиОперацию(ТЗ.Документ); |
|||
29
viktor_vv
26.12.11
✎
14:13
|
Там через точку он операцию не видит. Вот так работает.
ТЗ.ВыбратьСтроки(); Пока ТЗ.ПолучитьСтроку() = 1 Цикл ТекДок = ТЗ.Документ; ТекОпер = ТекДок.Операция ; //Сообщить(""+ТЗ.Документ.Операция); ТекОпер.ВыбратьПроводки(); Пока ТекОпер.ПолучитьПроводку() = 1 Цикл Сообщить(""+ТекОпер.Дебет.Счет) ; Если ТекОпер.Дебет.Счет = СчетПоКоду("79") Тогда КонецЕсли ; КонецЦикла; //Если Док.НайтиДокумент(ТЗ.Документ) = 1 Тогда // Док.Удалить(0); //КонецЕсли ; КонецЦикла; |
|||
30
viktor_vv
26.12.11
✎
14:16
|
И в принципе в таком варианте периодичность в запросе можешь поставить "Операция", раз уж в запросе не можешь отсечь по проводкам.
|
|||
31
GLazNik
26.12.11
✎
14:21
|
(30) Я таки уверен что в запросе (+доп условие на сумму в цикле) можно отсечь проводки, но периодичность по проводкам в любом случае лишняя.
|
|||
32
viktor_vv
26.12.11
✎
14:24
|
Ну тут тоолько гадать можно, какие условия ему нужны. Может он хочет отобрать операции по одной корреспонденции, а потом по наличию дополнительных проводок в операции с другой корреспонденцией отсечь.
|
|||
33
viktor_vv
26.12.11
✎
14:25
|
(29)+ *через две точки.
|
|||
34
САГвиник
26.12.11
✎
14:32
|
(29)(32) Условия именно такие, но я не пойму, почему у тебя работает в (29). У меня во всех случаях сбой на
ТекОпер.ВыбратьПроводки(); |
|||
35
САГвиник
26.12.11
✎
14:32
|
(28) что-то не помогает таблетка
|
|||
36
САГвиник
26.12.11
✎
14:44
|
(28)Операцию находит, но сбоит на
Пока ТекОпер.ПолучитьПроводку=1 может я что не так пишу? : Если ТЗ.Счета="10.3.1,10.6" Тогда ТекОпер = СоздатьОбъект("Операция"); ТекОпер .НайтиОперацию(ТЗ.Документ); ТекОпер.ВыбратьПроводки(); Пока ТекОпер.ПолучитьПроводку=1 Цикл Если (ТекОпер.Дебет.Счет=СчетПоКоду("77")) И ( ТекОпер.Кредит.Счет=СчетПоКоду("76.1")) Тогда Прервать; Иначе Удалять=0; КонецЕсли; КонецЦикла; КонецЕсли; |
|||
37
Андрей_Андреич
naïve
26.12.11
✎
14:55
|
ПолучитьПроВодку() - скобки забыл
|
|||
38
GLazNik
26.12.11
✎
14:59
|
Хех. Ожидаю строку ТЗ.Документ.Удалить() ;)
|
|||
39
САГвиник
26.12.11
✎
15:05
|
Спасибо!!! ПроВодку() - это ты хорошо сказал. Че-то совсем башка не варит. Придумали ж сделать корпоратив на понедельник :(
Хорошо хоть в обед похмелиться дали :) Вроде пошло... Спасибо всем |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |