|   |   | 
| 
 | 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)одинаково.Проверяю,что на обьект типа спозиционировалось вот так: сообщить(смп.цена) нормально сообщает цену или еще какой реквизит.В от удалять - фиг( Выкрутился путем пербора всех элементов справочника с отделным расчетом БИ по каждому элементу. Тогда нормально удаляет. | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |