|
v7: 7.7 Не могу спозиционировать справочник на субконто | ☑ | ||
---|---|---|---|---|
0
yra111
11.10.16
✎
14:43
|
вот так вот нормально работает :
смп=создатьобъект("справочник.материалы"); смп.выбратьэлементы(); пока смп.получитьэлемент()=1 цикл смп.удалить(0); смп.записать(); конеццикла; Но если обхожу циклом не элементы справочника , а субконто, у которых тип такой же как у справочника, то не помечает на удаление нифига, хотя через сообщить() видно что я типа спозиционировался.Если через смп2.удалить() тоже нифига не удаляет. Вот код: Процедура Формировать() счпров=0; Ит = СоздатьОбъект("БухгалтерскиеИтоги"); Ит.ИспользоватьСубконто("МестаХранения"); Ит.ИспользоватьСубконто("Материалы"); Ит.ВыполнитьЗапрос(Дата1, Дата1,"10.5") ; смп=создатьобъект("справочник.материалы"); смп2=создатьобъект("справочник.материалы"); смп.выбратьэлементы(); Ит.ВыбратьСубконто(1); Пока Ит.ПолучитьСубконто(1)=1 цикл Ит.ВыбратьСубконто(); Пока Ит.ПолучитьСубконто()=1 цикл смп.найтиэлемент(ит.субконто()); /// вот наверное гдето тут собака порылась смп2=смп.текущийэлемент(); Ит.ВыбратьВалюты(); Пока Ит.ПолучитьВалюту()=1 цикл если (Ит.Скд(3)-Ит.Скк(3)) = 0 тогда если сокрЛП(смп)<>"" тогда если смп.этогруппа()=0 тогда // если сокрЛП(смп2.родитель)="Б/У с использованием (10/6 счет)" тогда иначе смп.найтиэлемент(ит.субконто()); смп2=смп.текущийэлемент(); сообщить(ит.субконто()); сообщить(смп); сообщить(смп.цена); смп.удалить(0); смп.записать(); // конецесли; конецесли; конецесли; конецесли; КонецЦикла; КонецЦикла; КонецЦикла; КонецПроцедуры Подскажите пожалуйста где я накосячил, уже весь мозг сломал... |
|||
1
Ёпрст
11.10.16
✎
14:52
|
после удалить(0), записать() не надо
|
|||
2
Builder
11.10.16
✎
14:53
|
Код просто ппц...
смп.записать() - не надо записывать после удаления, оно уже того... Сделай так смп=создатьобъект("справочник"); Так можешь любой удалять. |
|||
3
пипец
11.10.16
✎
15:06
|
перед выборкой сделай порядоккодов
ЗЫ и да щзаписывать после пометки удаления как то креативно |
|||
4
yra111
11.10.16
✎
16:09
|
Не в записать() дело точно(может и лишнее,но не мешает). В 1м огрызке кода ведь работает!Да и если его убрать то лучше не становиться, я проверил.
Если не указывать тип справочника (смп=создатьобъект("справочник");), то при нийтиэлемент(ит.субконто(2)) пишет не задан вид. Порядоккодов() тоже не помог. Что еще можно попробовать? Сейчс код вот так выглядит: Процедура Формировать() Ит = СоздатьОбъект("БухгалтерскиеИтоги"); Ит.ИспользоватьСубконто("МестаХранения"); Ит.ИспользоватьСубконто("Материалы"); Ит.ВыполнитьЗапрос(Дата1, Дата1,"10.5") ; смп=создатьобъект("справочник.материалы"); смп2=создатьобъект("справочник.материалы"); смп.ПорядокКодов(); смп.выбратьэлементы(); // смп2.выбратьэлементы(); Ит.ВыбратьСубконто(1); Пока Ит.ПолучитьСубконто(1)=1 цикл Ит.ВыбратьСубконто(2); Пока Ит.ПолучитьСубконто(2)=1 цикл смп.найтиэлемент(ит.субконто(2)); смп2=смп.текущийэлемент(); Ит.ВыбратьВалюты(); Пока Ит.ПолучитьВалюту()=1 цикл если (Ит.Скд(3)-Ит.Скк(3)) = 0 тогда если сокрЛП(смп)<>"" тогда если смп.этогруппа()=0 тогда // если сокрЛП(смп2.родитель)="Б/У с использованием (10/6 счет)" тогда иначе смп.найтиэлемент(ит.субконто(2)); смп2=смп.текущийэлемент(); сообщить(ит.субконто(2)); сообщить(смп); сообщить(смп.цена); смп.удалить(0); // смп.записать(); конецесли; конецесли; конецесли; // конецесли; КонецЦикла; КонецЦикла; КонецЦикла; КонецПроцедуры |
|||
5
Ёпрст
11.10.16
✎
16:13
|
(0)
Если Смп.НайтиЭлемент(ит.субконто(2))=1 Тогда сообщить("метим на х"); смп.удалить(0); КонецЕсли; |
|||
6
yra111
11.10.16
✎
16:42
|
(5) так я уже пробовал. толку никакого. В сообщить(смп) нормально сообщает название элемента, сообщить(смп.любойреквизит) тоже нормально реквизит сообщает, а вот удалить - фиг удаляет
Спасибо всем кто ответил. попробую вообще с другой стороны эту шнягу раскрутить.Перебор элементов, а потом бухит по элементу,должно сработвать. ЗЫ записать() не мешает , потомучто удалить(0) - тоесть элемент остаёться. просто с крестиком |
|||
7
Ёпрст
11.10.16
✎
17:02
|
(6) не надо делать двойную запись
|
|||
8
Ёпрст
11.10.16
✎
17:03
|
>>>а вот удалить - фиг удаляет
тебе насовсем надо ? Тогда либо удалить() либо удалить(1) ЗЫ: если че, удалить(0) - это пометка на удаление. И выкиннь записать() из кода. |
|||
9
Dump
12.10.16
✎
06:06
|
(0) Давай начнем сначала
СЛОВАМИ опиши - что и зачем надо сделать. |
|||
10
Токарь
12.10.16
✎
06:29
|
Ит.ИспользоватьСубконто("МестаХранения");
Ит.ИспользоватьСубконто("Материалы"); Ит.ВыполнитьЗапрос(Дата1, Дата1,"10.5") ; смп=создатьобъект("справочник.материалы"); смп2=создатьобъект("справочник.материалы"); == "МестаХранения" и "материалы" -- это одно и тоже? |
|||
11
Токарь
12.10.16
✎
06:30
|
смп.ПорядокКодов();
смп.выбратьэлементы(); === это что за фигня ещё здесь? закомментарить/удалить |
|||
12
KishMish
12.10.16
✎
07:19
|
попробуй конретно указать
1. Вторая выборка субоконто. Нужно указывать Ит.ВыбратьСубконто(2); Пока Ит.ПолучитьСубконто(2)=1 цикл 2. И указывать какое субконто ты буерешь первое или второе ит.субконто(1) или ит.субконто(2) в зависимости |
|||
13
пипец
12.10.16
✎
09:14
|
упал , отполз
(4) определитесь уже - или работаете с объектом справочник или с бухитогами (11) прочитай (0) для начала )) |
|||
14
Fedor-1971
12.10.16
✎
09:44
|
(0) помечай на удаление спозиционированный элемент справочника
|
|||
15
Lazy Stranger
12.10.16
✎
09:53
|
можно вместо
смп.найтиэлемент(ит.субконто(2)); попробовать смп.найтипокоду(ит.субконто(2).код); |
|||
16
yra111
15.10.16
✎
04:22
|
(14) именно так и пробовал в том числе. нифига не пашет
(15) Там коды повторяються((( (12) Сначала я так и сделал, субконто(2) Впрчем, на обьект позиционируеться и субконто() и субконто(2)одинаково.Проверяю,что на обьект типа спозиционировалось вот так: сообщить(смп.цена) нормально сообщает цену или еще какой реквизит.В от удалять - фиг( Выкрутился путем пербора всех элементов справочника с отделным расчетом БИ по каждому элементу. Тогда нормально удаляет. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |