Помощь - Поиск - Пользователи - Календарь
Полная версия: БухИтоги
1C-PRO - Форум по 1С > Форумы по платформе "1С:Предприятие 7.7" > (7.7) Форум по общим вопросам "1С:Предприятие 7.7"
Cooper
Добрый вечер!

При проводке в документе "Перемещение ОС" не могу взять итоги выдает нули при выборе субконто!
МЦ.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);
Операция.Дебет.сотрудники = МОЛ;
КонецЕсли;
КонецЕсли;



В Реквизитах табличной части нет реквизита "материал"!
forbuk
должно быть так
Код
БИ1.ИспользоватьСубконто(ВидыСубконто.Материалы,СпрМат, 2);
forbuk
а вообще по моему так

Код
СпрМат=СоздатьОбъект("Справочник.Материалы");    
СпрМат.Найтипонаименованию(ПерОС.основноесредство.наименование,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);
Cooper
в отладчике пишет:

Код

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




По-разному пробовал, всё равно "Ошибка в выражении!".

Как правильно построить выражение?
WaRDeR
А какой результат хочешь увидеть?
Если нужно значение субконто в БИ, то пиши
Код
БИ1.Субконто(1);

Тогда после "получить субконто" ты увидешь его значение.
Cooper
Нашел косяк в:
СпрМат.НайтиПоНаименованию(ПерОС.основноесредство.наименование,0);
НадоТак:
СпрМат.Найтипонаименованию(ПерОС.основноесредство,0);

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

неправильно - это ни очем не говорит...
что именно показывает?
Cooper
Код

БИ1 = СоздатьОбъект("БухгалтерскиеИтоги");
БИ1.ИспользоватьСубконто(ВидыСубконто.Материалы,ПерОС.Материал, 2); // Вот здесь Ошибка в выражении, ПерОС.Материал имеется. В чем дело не пойму.
БИ1.ВыполнитьЗапрос(ПерОС,, "МЦ.04");
БИ1.ВыбратьСубконто(ВидыСубконто.Материалы,1);//Соответственно и здесь не показывает если выше есть проблемма!




Stado_adama
Купер, тебе же сказали, не
Код
БИ1.ВыбратьСубконто(ВидыСубконто.Материалы,1);

а
Код
БИ1.ВыбратьСубконто(1);
Cooper
Это решил, теперь другая проблемма с поиском!

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

Код

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

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



Спасибо

Цитата
Купер, тебе же сказали, не
КодБИ1.ВыбратьСубконто(ВидыСубконто.Материалы,1);


И такой вариант тоже прошел! :)
Stado_adama
сам боролся не давно с этой проблемой... варианта решения не нашел... только перебор на совпадение строковых величин с СОКРЛП...
Cooper



Цитата
сам боролся не давно с этой проблемой... варианта решения не нашел... только перебор на совпадение строковых величин с СОКРЛП...



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

Код

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

Хряк
СпрМат.ИспользоватьРодителя("ОС до 10000 тыс.",0)
бред сивой кобылы
спр.найти по наименованию("ОС до 10000 тыс.)
СпрМат.ИспользоватьРодителя(то что нашел)

Пожалуйста, немного аккуратнее с кодом и оформлением


Ведь обязательно найдется "умник", который копипастнет эти строки в модуль,
а потом будет выставлять претензии что не работает.

Полагаю автор имел ввиду:
Код

Спр.НайтиПоНаименованию("ОС до 10000 тыс.");
СпрМат.ИспользоватьРодителя(Спр);

WaRDeR
Cooper, убедительные просьбы:
1. Благодарить с помощью кнопки "Спасибо" (чего ей простаивать cool.gif )
2. Писать полностью текст ошибок/предупреждений, выдаваемых системой, а не просто "тут ошибка, и тут тоже :("
3. Если насобирал народ для решения проблемы (уже больше 10 сообщений) и сам разобрался, так хотя бы напиши, как ее решил. Ведь всем интересно. А может кто-то в будущем столкнется с этим, и будет потом думать и опять "воду мутить".
Хряк
WaRDeR, извини, это не код, это наброски для просветления мозгов воспрошающего. Код он сам должен писать.
Cooper
Цитата
СпрМат.ИспользоватьРодителя("ОС до 10000 тыс.",0)
бред сивой кобылы


Согласен, поторопился. Эта строка не работает, т.к. в этой группе есть полностью идентичные наименования, поэтому надо искать по коду!


Цитата
2. Писать полностью текст ошибок/предупреждений, выдаваемых системой, а не просто "тут ошибка, и тут тоже :("


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

Цитата

3. Если насобирал народ для решения проблемы (уже больше 10 сообщений) и сам разобрался, так хотя бы напиши, как ее решил.
Ведь всем интересно. А может кто-то в будущем столкнется с этим, и будет потом думать и опять "воду мутить".


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

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

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

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

Код

ПерОС = СоздатьОбъект("Документ.ПеремещениеОС");
ПерОС = текущийдокумент();
ПерОС.ВыбратьСтроки();

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



Всё вроде бы хорошо, в отладчике все видно, как меняются переменные в строках, но после выполнения кода, изменений
не происходит! Как их сохранить или применить изменения в табличной части документа!
Cooper
Цитата
Спр.НайтиПоНаименованию("ОС до 10000 тыс.");Спр.ИспользоватьРодителя(Спр);


Всё правильно, но забыл Наименование дописать!

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

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

Код

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

WaRDeR
Цитата
Всё правильно, но забыл Наименование дописать!

Как раз наименования там и не должно быть, читай синтаксис-помощник

Цитата
Всё вроде бы хорошо, в отладчике все видно, как меняются переменные в строках, но после выполнения кода, изменений
не происходит! Как их сохранить или применить изменения в табличной части документа!</SPAN>
А ты пробуй так
Код
 ВыбратьСтроки();    
Сообщить("Строк в документе "+КоличествоСтрок());
Пока ПолучитьСтроку() = 1 Цикл
СпрМат=СоздатьОбъект("Справочник.Материалы");
Если СпрМат.НайтиПоКоду(ОсновноеСредство.Код,0)=1 Тогда
Материал=СпрМат.ТекущийЭлемент();
Иначе
Материал = "";
КонецЕсли;
КонецЦикла;
WaRDeR
offtopic.gif
Цитата
WaRDeR, извини, это не код, это наброски для просветления мозгов воспрошающего. Код он сам должен писать.

извиняю ;) это не замечание, это предложения. В тебе не сомневаюсь, а вот тут есть и послабее.
Cooper
Всё Гуд!!! Благодарю!
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.
Русская версия Invision Power Board © 2001-2009 Invision Power Services, Inc.