7.7 БухИтоги

Тема в разделе "Общие вопросы "1С:Предприятие 7.7"", создана пользователем Cooper-Mixal, 3 дек 2008.

  1. TopicStarter Overlay
    Cooper-Mixal
    Offline

    Cooper-Mixal Опытный в 1С

    Регистрация:
    29 июн 2008
    Сообщения:
    193
    Симпатии:
    0
    Баллы:
    26
    Добрый вечер!

    При проводке в документе "Перемещение ОС" не могу взять итоги выдает нули при выборе субконто!
    МЦ.01 это ОС, а МЦ.04 это Материалы! Для МЦ.01 всё работает!

    Код:
    СпрМат=СоздатьОбъект("Справочник.Материалы");    
    СпрМат.выбратьЭлементы();  
    СпрМат.Найтипонаименованию(ПерОС.основноесредство.наименование,0);
    СпрМат.ИспользоватьДату(ДатаДок, 1);
    
    БИ1 = СоздатьОбъект("БухгалтерскиеИтоги");
    БИ1.ИспользоватьСубконто(ВидыСубконто.Материалы,СпрМат.Наименование, 2);
    БИ1.ВыполнитьЗапрос(,ПерОС, "МЦ.04"); 
    
    БИ1.ВыбратьСубконто(ВидыСубконто.Материалы,1);//Вот здесь не выбирает, показывает 0 
    БИ1.ПолучитьСубконто(Видысубконто.Материалы);// И соответственно здесь
    //Если БИ1.ПолучитьСчет(, СчМЦ_04) = 1 Тогда    
    //БИ1.ВыбратьСубконто(ВидыСубконто.ОсновныеСредства,1);
    //Если БИ1.ПолучитьСубконто(Видысубконто.ОсновныеСредства,,ПерОС.Основноесредство) = 1 Тогда
    Если БИ1.СКД("К") > 0 Тогда
    Операция.НоваяПроводка();
    Операция.НомерЖурнала = "ОС";
    Операция.СодержаниеПроводки = "Перемещение ОС";
    Операция.ПервичныйДокумент  = глПредставлениеПервичногоДокумента(Контекст); 
    Операция.Кредит.Счет = СчМЦ_04;
    Операция.Кредит.Материал = СпрМат.Наименование;
    Операция.Дебет.Счет = СчМЦ_04;
    Операция.Дебет.Материал = СпрМат.Материал;
    Операция.Количество= БИ1.СКД("К");  
    Операция.Кредит.сотрудники = СпрМат.Материал.МОЛ.Получить(ДатаДок-1);  
    Операция.Дебет.сотрудники = МОЛ;  
    КонецЕсли;	    
    КонецЕсли;
    
    
    В Реквизитах табличной части нет реквизита "материал"!
  2. forbuk
    Offline

    forbuk

    Регистрация:
    16 ноя 2008
    Сообщения:
    36
    Симпатии:
    0
    Баллы:
    1
    должно быть так
    Код:
    БИ1.ИспользоватьСубконто(ВидыСубконто.Материалы,СпрМат, 2);
    
  3. forbuk
    Offline

    forbuk

    Регистрация:
    16 ноя 2008
    Сообщения:
    36
    Симпатии:
    0
    Баллы:
    1
    а вообще по моему так

    Код:
    СпрМат=СоздатьОбъект("Справочник.Материалы");    
    СпрМат.Найтипонаименованию(ПерОС.основноесредство.наименование,0);
    
    
    БИ1 = СоздатьОбъект("БухгалтерскиеИтоги");
    БИ1.ИспользоватьСубконто(ВидыСубконто.Материалы,СпрМат, 2);
    БИ1.ВыполнитьЗапрос(,, "МЦ.04"); 
    
    БИ1.ВыбратьСубконто(ВидыСубконто.Материалы,1);//Вот здесь не выбирает, показывает 0 
    БИ1.ПолучитьСубконто(Видысубконто.Материалы);// И соответственно здесь
    //Если БИ1.ПолучитьСчет(, СчМЦ_04) = 1 Тогда    
    //БИ1.ВыбратьСубконто(ВидыСубконто.ОсновныеСредства,1);
    //Если БИ1.ПолучитьСубконто(Видысубконто.ОсновныеСредства,,ПерОС.Основноесредство) = 1 Тогда
    Если БИ1.СКД("К") > 0 Тогда
    Операция.НоваяПроводка();
    Операция.НомерЖурнала = "ОС";
    Операция.СодержаниеПроводки = "Перемещение ОС";
    Операция.ПервичныйДокумент  = глПредставлениеПервичногоДокумента(Контекст); 
    Операция.Кредит.Счет = СчМЦ_04;
    Операция.Кредит.Материал = СпрМат.Наименование;
    Операция.Дебет.Счет = СчМЦ_04;
    Операция.Дебет.Материал = СпрМат.Материал;
    Операция.Количество= БИ1.СКД("К");  
    Операция.Кредит.сотрудники = СпрМат.Материал.МОЛ.Получить(ДатаДок-1);  
    Операция.Дебет.сотрудники = МОЛ;  
    КонецЕсли;	    
    КонецЕсли;
    
    или так
    Код:
    БИ1.ИспользоватьСубконто(ВидыСубконто.Материалы,СпрМат.текущийЭлемент(), 2);
    
  4. TopicStarter Overlay
    Cooper-Mixal
    Offline

    Cooper-Mixal Опытный в 1С

    Регистрация:
    29 июн 2008
    Сообщения:
    193
    Симпатии:
    0
    Баллы:
    26
    в отладчике пишет:

    Код:
    БИ1.ИспользоватьСубконто(ВидыСубконто.Материалы,СпрМат.ТекущийЭлемент(),2) = Ошибка в выражении!
    
    
    
    По-разному пробовал, всё равно "Ошибка в выражении!".

    Как правильно построить выражение?
  5. WaRDeR
    Offline

    WaRDeR Модераторы Команда форума Модератор

    Регистрация:
    23 ноя 2006
    Сообщения:
    3.263
    Симпатии:
    14
    Баллы:
    29
    А какой результат хочешь увидеть?
    Если нужно значение субконто в БИ, то пиши
    Код:
    БИ1.Субконто(1);
    
    Тогда после "получить субконто" ты увидешь его значение.
  6. TopicStarter Overlay
    Cooper-Mixal
    Offline

    Cooper-Mixal Опытный в 1С

    Регистрация:
    29 июн 2008
    Сообщения:
    193
    Симпатии:
    0
    Баллы:
    26
    Нашел косяк в:
    СпрМат.НайтиПоНаименованию(ПерОС.основноесредство.наименование,0);
    НадоТак:
    СпрМат.Найтипонаименованию(ПерОС.основноесредство,0);

    то всё равно СпрМат.ТекущийЭлемент() показывает неправильно!
  7. WaRDeR
    Offline

    WaRDeR Модераторы Команда форума Модератор

    Регистрация:
    23 ноя 2006
    Сообщения:
    3.263
    Симпатии:
    14
    Баллы:
    29
    неправильно - это ни очем не говорит...
    что именно показывает?
  8. TopicStarter Overlay
    Cooper-Mixal
    Offline

    Cooper-Mixal Опытный в 1С

    Регистрация:
    29 июн 2008
    Сообщения:
    193
    Симпатии:
    0
    Баллы:
    26
    Код:
    БИ1 = СоздатьОбъект("БухгалтерскиеИтоги");
    БИ1.ИспользоватьСубконто(ВидыСубконто.Материалы,ПерОС.Материал, 2); // Вот здесь Ошибка в выражении, ПерОС.Материал имеется. В чем дело не пойму.
    БИ1.ВыполнитьЗапрос(ПерОС,, "МЦ.04"); 
    БИ1.ВыбратьСубконто(ВидыСубконто.Материалы,1);//Соответственно и здесь не показывает если выше есть проблемма!
    
    
    
  9. Stado_adama
    Offline

    Stado_adama Модераторы Модератор

    Регистрация:
    27 ноя 2007
    Сообщения:
    1.086
    Симпатии:
    0
    Баллы:
    26
    Купер, тебе же сказали, не
    Код:
    БИ1.ВыбратьСубконто(ВидыСубконто.Материалы,1);
    
    а
    Код:
    БИ1.ВыбратьСубконто(1);
    
  10. TopicStarter Overlay
    Cooper-Mixal
    Offline

    Cooper-Mixal Опытный в 1С

    Регистрация:
    29 июн 2008
    Сообщения:
    193
    Симпатии:
    0
    Баллы:
    26
    Это решил, теперь другая проблемма с поиском!

    Дело в том, что надо искать в группе "ОС"
    использую родителя, но ищет по всему справочнику, и находит позицию совпадающую по начальному слову, а нужен точный поиск. (Или как организовать поиск НайтиПоКоду, (В справочнике типкода стоит текстовый)):

    Код:
    СпрМат=СоздатьОбъект("Справочник.Материалы"); 
    
    СпрМат.выбратьЭлементы(); 
    СпрМат.ИспользоватьРодителя("ОС до 10000 тыс.",0); 
    Если СпрМат.Найтипонаименованию(основноесредство.Наименование,0,1) = 1 Тогда
    Материал = СпрМат.ТекущийЭлемент();
    КонецЕсли;
    
    
    Спасибо

    И такой вариант тоже прошел! :)
  11. Stado_adama
    Offline

    Stado_adama Модераторы Модератор

    Регистрация:
    27 ноя 2007
    Сообщения:
    1.086
    Симпатии:
    0
    Баллы:
    26
    сам боролся не давно с этой проблемой... варианта решения не нашел... только перебор на совпадение строковых величин с СОКРЛП...
  12. TopicStarter Overlay
    Cooper-Mixal
    Offline

    Cooper-Mixal Опытный в 1С

    Регистрация:
    29 июн 2008
    Сообщения:
    193
    Симпатии:
    0
    Баллы:
    26

    Не стал париться с группами, ищу сразу по всему справочнику!

    Код:
    СпрМат=СоздатьОбъект("Справочник.Материалы");
    Если СпрМат.НайтиПоКоду(основноесредство.код,0)=1 Тогда
    Материал = СпрМат.ТекущийЭлемент();
    Иначе Материал = "";      
    КонецЕсли; 
    
    
  13. Хряк
    Offline

    Хряк Профессионал в 1С

    Регистрация:
    26 сен 2007
    Сообщения:
    1.447
    Симпатии:
    37
    Баллы:
    54
    СпрМат.ИспользоватьРодителя("ОС до 10000 тыс.",0)
    бред сивой кобылы
    спр.найти по наименованию("ОС до 10000 тыс.)
    СпрМат.ИспользоватьРодителя(то что нашел)

    [warn=Пожалуйста, немного аккуратнее с кодом и оформлением]
    Ведь обязательно найдется "умник", который копипастнет эти строки в модуль,
    а потом будет выставлять претензии что не работает.
    [/warn] Полагаю автор имел ввиду:
    Код:
    Спр.НайтиПоНаименованию("ОС до 10000 тыс.");
    СпрМат.ИспользоватьРодителя(Спр);
    
    
  14. WaRDeR
    Offline

    WaRDeR Модераторы Команда форума Модератор

    Регистрация:
    23 ноя 2006
    Сообщения:
    3.263
    Симпатии:
    14
    Баллы:
    29
    Cooper, убедительные просьбы:
    1. Благодарить с помощью кнопки "Спасибо" (чего ей простаивать :unsure: )
    2. Писать полностью текст ошибок/предупреждений, выдаваемых системой, а не просто "тут ошибка, и тут тоже :("
    3. Если насобирал народ для решения проблемы (уже больше 10 сообщений) и сам разобрался, так хотя бы напиши, как ее решил. Ведь всем интересно. А может кто-то в будущем столкнется с этим, и будет потом думать и опять "воду мутить".
  15. Хряк
    Offline

    Хряк Профессионал в 1С

    Регистрация:
    26 сен 2007
    Сообщения:
    1.447
    Симпатии:
    37
    Баллы:
    54
    WaRDeR, извини, это не код, это наброски для просветления мозгов воспрошающего. Код он сам должен писать.
  16. TopicStarter Overlay
    Cooper-Mixal
    Offline

    Cooper-Mixal Опытный в 1С

    Регистрация:
    29 июн 2008
    Сообщения:
    193
    Симпатии:
    0
    Баллы:
    26
    Согласен, поторопился. Эта строка не работает, т.к. в этой группе есть полностью идентичные наименования, поэтому надо искать по коду!


    Знаю, но что-то поленился в этот раз! Исправлюсь! :unsure:

    Собственно из одной проблеммы выходит другая.

    Решения в общем-то всегда стараюсь написать!

    Вот и сейчас вопрос возник:

    Есть заполненная табличная часть, надо редактировать строки одной колонки.

    Код:
    ПерОС = СоздатьОбъект("Документ.ПеремещениеОС");
    ПерОС = текущийдокумент();
    ПерОС.ВыбратьСтроки();    
    
    Сообщить("Строк в документе "+ПерОС.КоличествоСтрок());
    Пока ПерОС.ПолучитьСтроку() = 1 Цикл  
    СпрМат=СоздатьОбъект("Справочник.Материалы");
    Если СпрМат.НайтиПоКоду(ПерОС.основноесредство.код,0)=1 Тогда  
    ПерОС.Материал=СпрМат.ТекущийЭлемент();
    Иначе 
    ПерОС.Материал = "";      
    КонецЕсли;   
    КонецЦикла;
    
    
    Всё вроде бы хорошо, в отладчике все видно, как меняются переменные в строках, но после выполнения кода, изменений
    не происходит! Как их сохранить или применить изменения в табличной части документа!
  17. TopicStarter Overlay
    Cooper-Mixal
    Offline

    Cooper-Mixal Опытный в 1С

    Регистрация:
    29 июн 2008
    Сообщения:
    193
    Симпатии:
    0
    Баллы:
    26
    Всё правильно, но забыл Наименование дописать!

    А так всё работает Спасибо!

    СпрМат = СоздатьОбъект("Справочник.Материалы");

    Код:
    СпрМат.НайтиПоНаименованию("ОС до 10000 тыс.");
    СпрМат.ИспользоватьРодителя(СпрМат.Наименование);  
    СпрМат.НайтиПоКоду(ОсновноеСредство.Код,0);
    Материал = СпрМат.ТекущийЭлемент();
    
    
  18. WaRDeR
    Offline

    WaRDeR Модераторы Команда форума Модератор

    Регистрация:
    23 ноя 2006
    Сообщения:
    3.263
    Симпатии:
    14
    Баллы:
    29
    Как раз наименования там и не должно быть, читай синтаксис-помощник

    А ты пробуй так
    Код:
     ВыбратьСтроки();    
    Сообщить("Строк в документе "+КоличествоСтрок());
    Пока ПолучитьСтроку() = 1 Цикл  
    СпрМат=СоздатьОбъект("Справочник.Материалы");
    Если СпрМат.НайтиПоКоду(ОсновноеСредство.Код,0)=1 Тогда  
    Материал=СпрМат.ТекущийЭлемент();
    Иначе 
    Материал = "";      
    КонецЕсли;   
    КонецЦикла;
    
  19. WaRDeR
    Offline

    WaRDeR Модераторы Команда форума Модератор

    Регистрация:
    23 ноя 2006
    Сообщения:
    3.263
    Симпатии:
    14
    Баллы:
    29
    :unsure:
    извиняю ;) это не замечание, это предложения. В тебе не сомневаюсь, а вот тут есть и послабее.
  20. TopicStarter Overlay
    Cooper-Mixal
    Offline

    Cooper-Mixal Опытный в 1С

    Регистрация:
    29 июн 2008
    Сообщения:
    193
    Симпатии:
    0
    Баллы:
    26
    Всё Гуд!!! Благодарю!

Поделиться этой страницей