Вход | Регистрация

1С:Предприятие :: 1С:Предприятие 7.7 и ранее

v7: 7.7 Не могу спозиционировать справочник на субконто

v7: 7.7  Не могу спозиционировать  справочник на субконто
Я
   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),  записать() не надо
   Builder
 
2 - 11.10.16 - 14:53
Код просто ппц...

смп.записать() - не надо записывать после удаления, оно уже того...

Сделай так 
смп=создатьобъект("справочник");
Так можешь любой удалять.
   пипец
 
3 - 11.10.16 - 15:06
перед выборкой сделай порядоккодов 
ЗЫ и да щзаписывать после пометки удаления как то креативно
   yra111
 
4 - 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);
КонецЕсли;
   yra111
 
6 - 11.10.16 - 16:42
(5) так я уже пробовал. толку никакого. В сообщить(смп) нормально сообщает название элемента, сообщить(смп.любойреквизит) тоже нормально реквизит сообщает, а вот удалить - фиг удаляет

Спасибо всем кто ответил. попробую вообще с другой стороны эту шнягу раскрутить.Перебор элементов, а потом бухит по элементу,должно сработвать.

ЗЫ записать() не мешает , потомучто удалить(0) - тоесть элемент остаёться. просто с крестиком
   Ёпрст
 
7 - 11.10.16 - 17:02
(6) не надо делать двойную запись
   Ёпрст
 
8 - 11.10.16 - 17:03
>>>а вот удалить - фиг удаляет 

тебе насовсем надо ?
Тогда либо
удалить()
либо удалить(1)

ЗЫ: если че, удалить(0) - это пометка на удаление.

И выкиннь записать() из кода.
   Dump
 
9 - 12.10.16 - 06:06
(0) Давай начнем сначала
СЛОВАМИ опиши - что и зачем надо сделать.
   Токарь
 
10 - 12.10.16 - 06:29
Ит.ИспользоватьСубконто("МестаХранения");
    Ит.ИспользоватьСубконто("Материалы");
    Ит.ВыполнитьЗапрос(Дата1, Дата1,"10.5") ;
    смп=создатьобъект("справочник.материалы");
    смп2=создатьобъект("справочник.материалы");
==
"МестаХранения" и "материалы" -- это одно и тоже?
 
 Рекламное место пустует
   Токарь
 
11 - 12.10.16 - 06:30
смп.ПорядокКодов();
    смп.выбратьэлементы();
===
это что за фигня ещё здесь? закомментарить/удалить
   KishMish
 
12 - 12.10.16 - 07:19
попробуй конретно указать

1. Вторая выборка субоконто. Нужно указывать 
 Ит.ВыбратьСубконто(2);
        Пока Ит.ПолучитьСубконто(2)=1 цикл
2. И указывать какое субконто ты буерешь первое или второе
ит.субконто(1) или ит.субконто(2) в зависимости
   пипец
 
13 - 12.10.16 - 09:14
упал , отполз
(4) определитесь уже - или работаете с объектом справочник или с бухитогами
(11) прочитай (0) для начала ))
   Fedor-1971
 
14 - 12.10.16 - 09:44
(0) помечай на удаление спозиционированный элемент справочника
 смп2=смп.текущийэлемент();
                  сообщить(ит.субконто()); 
            сообщить(смп);
            сообщить(смп.цена);

!!!!    смп2.удалить(0);// тут засада

   Lazy Stranger
 
15 - 12.10.16 - 09:53
можно вместо
смп.найтиэлемент(ит.субконто(2));
попробовать 
смп.найтипокоду(ит.субконто(2).код);
   yra111
 
16 - 15.10.16 - 04:22
(14) именно так и пробовал в том числе. нифига не пашет
(15) Там коды повторяються(((
(12)  Сначала я так и сделал, субконто(2)
Впрчем, на обьект позиционируеться и субконто() и субконто(2)одинаково.Проверяю,что  на обьект типа спозиционировалось вот так:  сообщить(смп.цена) нормально сообщает цену или еще какой реквизит.В от удалять - фиг(

Выкрутился путем пербора всех элементов справочника с отделным расчетом БИ  по каждому элементу. Тогда нормально удаляет.

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