Обращение к подчиненному справочнику

Dzo

Active Member
13.04.2009
38
0
#1
Всем доброго дня!
Платформа 1с Торговля 7.7 (9.2)
Значит проблема в следующем:
Необходимо в документе заполнить табличную часть из разных справочников.
Есть следующие колонки: Товар, Единица измерения, Цена Розничная, Цена Закупочная.

Чтобы Заполнить колонки товар и Единица использую следующее:
Тов=СоздатьОбъект("Справочник.Номенклатура");
Тов.НайтиЭлемент(ВыбТовар);
НоваяСтрока();
Товар=Тов.ТекущийЭлемент();
Единица=Товар.БазоваяЕдиница;

Далее я рассуждаю так

Цен=СоздатьОбъект("Справочник.Цены");
Цен.ИспользоватьВладельца(Товар);

Что необходимо написать дальше что бы заполнить колонки Цена Закупочная и Цена Розничная?


Всем заранее спасибо..
 

KiR

НЕ шибка опытный програмер)
11.09.2007
1 581
0
#2
а где эти цены хранятся или же по какой формуле расчитываются?
 

Dzo

Active Member
13.04.2009
38
0
#3
Цены Хранятся в Справочнике Цены и не рассчитываются, а задаются руками.
Вот картинка.
 

Вложения

KiR

НЕ шибка опытный програмер)
11.09.2007
1 581
0
#4
А дальше так же как и перед этим
Код:
Цен.НайтиПоНаименованию("Рознечная");
Рознечная = Цен.ТекущийЭлемент();
Цен.НайтиПоНаименованию("Закупочная");
Закупочная = Цен.ТекущийЭлемент();
Как-то так. а вообще синтакс-помощник погляди
 

Dzo

Active Member
13.04.2009
38
0
#5
Так не получилось ) И даже если бы и получилось, то он бы скорее всего выводил бы не саму цену, а Тип цены..
Ребята очень прошу помощи..
 

vbs

Well-Known Member
18.02.2007
1 708
3
#6
посмотри в глобальном модуле, как устроена функция глВернутьЦену
 

KiR

НЕ шибка опытный програмер)
11.09.2007
1 581
0
#7
ну тады можешь запросом тащить всю строку
 

puh14

Well-Known Member
11.07.2008
1 412
0
#8
Цены в справочнике цены периодические, надо использовать

Цен=СоздатьОбъект("Справочник.Цены");
Цен.ИспользоватьВладельца(Товар);
Цен.ИспользоватьДату(ДатаДок);// ну или какая ему нужна

И плюс там есть заморочь на единицу измерения - для каждой единицы цены свои.
так что как задал владельца-выбирай цены по реквизиту Единица,а уже среди них -ту что тебе надо по наименованию.
 

Renat11111

Well-Known Member
20.04.2008
123
0
#9
мне когда надо было в форме элемента справочника в реквизитах отображать и записывать закупочную и розничную цену... вот тебе пример может поможет:

Процедура ЗаписатьТипыЦен()

РознЦена = Константа.РозничныйТипЦен;
ЗакупЦена = Константа.ЗакупочныйТипЦен;
спрОкеи = СоздатьОбъект("Справочник.ОКЕИ");
спрОкеи.НайтиПоНаименованию("шт.");

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


СпрЦены = СоздатьОбъект("Справочник.Цены");
СпрЦены.ИспользоватьВладельца(ТекущийЭлемент());
СпрЦены.ИспользоватьДату(ТекущаяДата());

Если спрЕдиницы.НайтиПоРеквизиту("ОКЕИ", спрОкеи.ТекущийЭлемент(),1)=1 Тогда
// ничего не делаем
Иначе
спрЕдиницы.Новый();
спрЕдиницы.ОКЕИ = спрОкеи.ТекущийЭлемент();
спрЕдиницы.Коэффициент =1 ;
спрЕдиницы.Записать();
КонецЕсли;


Если СпрЦены.НайтиПоРеквизиту("ТипЦен", РознЦена,0)=1 Тогда
СпрЦены.Цена = РозничнаяЦена;
СпрЦены.Записать();
Иначе
СпрЦены.Новый();
СпрЦены.Валюта = Константа.ВалютаБухУчета;
СпрЦены.Единица = спрЕдиницы.ТекущийЭлемент() ;
СпрЦены.ТипЦен = РознЦена;
СпрЦены.Цена = РозничнаяЦена ;
СпрЦены.Записать();
КонецЕсли;

Если СпрЦены.НайтиПоРеквизиту("ТипЦен", ЗакупЦена,0)=1 Тогда
СпрЦены.Цена = ЗакупочнаяЦена;
СпрЦены.Записать();
Иначе
СпрЦены.Новый();
СпрЦены.Валюта = Константа.ВалютаБухУчета;
СпрЦены.Единица = спрЕдиницы.ТекущийЭлемент() ;
СпрЦены.ТипЦен = ЗакупЦена;
СпрЦены.Цена = ЗакупочнаяЦена;
СпрЦены.Записать();
КонецЕсли;

КонецПроцедуры // ЗаписатьТипыЦен
 

Dzo

Active Member
13.04.2009
38
0
#11
Пока ЦеныНоменклатуры.ПолучитьЭлемент() = 1 Цикл
Если ЦеныНоменклатуры.ТипЦен <> НужныйТипЦен Тогда
Продолжить;
КонецЕсли;

НайденнаяЦена = ЦеныНоменклатуры.ТекущийЭлемент();

Если ЦеныНоменклатуры.ПометкаУдаления() = 1 Тогда
Рез = - 1; // Цена есть, но помечена на удаление
Продолжить;
Иначе
Прервать;
КонецЕсли;

КонецЦикла;

Если ПустоеЗначение(НайденнаяЦена) = 1 Тогда

Вы имеете ввиду этот цикл?
 
K

kaa

Гость
#12
А дальше так же как и перед этим

Цен.НайтиПоНаименованию("Рознечная");
Рознечная = Цен.ТекущийЭлемент();
Цен.НайтиПоНаименованию("Закупочная");
Закупочная = Цен.ТекущийЭлемент();
ЦенаРозничная = Рознечная.Цена.Получить(ДатаДок);
ЦенаЗакупочная = Закупочная.Цена.Получить(ДатаДок);
 

Dzo

Active Member
13.04.2009
38
0
#13
Метод который применяется в ГлВернутьЦену не работает:

Цен=СоздатьОбъект("Справочник.Цены");
Цен.ИспользоватьВладельца(ВыбТовар);
Цен.ИспользоватьДату(РабочаяДата());
Цен.НайтиПоНаименованию("Закупочные");
НайденнаяЦена=Цен.ТекущийЭлемент();
ЗакупЦ=НайденнаяЦена.Цена.Получить(РабочаяДата()); - Это Колонка из табличной части которая должна заполняться..


Ничего не происходит ((
Ошибок нет нигде.. я не понимаю почему так..
 

puh14

Well-Known Member
11.07.2008
1 412
0
#14
Лови через отладчик или сообщить() нашелся ли товар, пустой-ли выбтовар,Нашлась ли цена с таким наименованием - а то одна латинская буква в кирилице много крови попортить может. Как нашел где затык - разбирайся с ним.
 
K

kaa

Гость
#15
ТипЦен = СоздатьОбъект("ТипыЦен");
Если ТипЦен.НайтиПоНаименованию("Закупочные") = 1 Тогда
НайденыйТип = ТипЦен.ТекущийЭлемент();
Иначе
Сообщить("Нету ти ни фига такого типа цен!!","!!!");
Возврат;
КонецЕсли;

Если Цен.НайтиПоРеквизиту(НайденыйТипЦен) = 1 Тогда
НайденнаяЦена=Цен.ТекущийЭлемент();
ЗакупЦ=НайденнаяЦена.Цена.Получить(РабочаяДата()); - Это Колонка из табличной части которая должна заполняться..
Иначе
Сообщить("Нету ти ни фига такой цены у товара!!","!!!");
КонецЕсли;


//У справочника Цены в Торговле наименования нет
 

Renat11111

Well-Known Member
20.04.2008
123
0
#16
Метод который применяется в ГлВернутьЦену не работает:

Цен=СоздатьОбъект("Справочник.Цены");
Цен.ИспользоватьВладельца(ВыбТовар);
Цен.ИспользоватьДату(РабочаяДата());
Цен.НайтиПоНаименованию("Закупочные");
НайденнаяЦена=Цен.ТекущийЭлемент();
ЗакупЦ=НайденнаяЦена.Цена.Получить(РабочаяДата()); - Это Колонка из табличной части которая должна заполняться..


Ничего не происходит ((
Ошибок нет нигде.. я не понимаю почему так..

А зачем используете ИспользоватьДату(РабочаяДата()); и метод получить? может в этом и ошибка?
 

vbs

Well-Known Member
18.02.2007
1 708
3
#17

Dzo

Active Member
13.04.2009
38
0
#18
Благодарю всех кто откликнулся! Все заработало. Всем еще раз огромное спасибо.