• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

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

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

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

  • Автор темы Dzo
  • Дата начала
D

Dzo

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

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

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

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

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


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

KiR

а где эти цены хранятся или же по какой формуле расчитываются?
 
D

Dzo

Цены Хранятся в Справочнике Цены и не рассчитываются, а задаются руками.
Вот картинка.
 

Вложения

  • __________.JPG
    __________.JPG
    94,5 КБ · Просмотры: 140
K

KiR

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

Dzo

Так не получилось ) И даже если бы и получилось, то он бы скорее всего выводил бы не саму цену, а Тип цены..
Ребята очень прошу помощи..
 
V

vbs

посмотри в глобальном модуле, как устроена функция глВернутьЦену
 
K

KiR

ну тады можешь запросом тащить всю строку
 
P

puh14

Цены в справочнике цены периодические, надо использовать

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

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

Renat11111

мне когда надо было в форме элемента справочника в реквизитах отображать и записывать закупочную и розничную цену... вот тебе пример может поможет:

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

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

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


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

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


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

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

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

Dzo

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

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

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

КонецЦикла;

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


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

kaa

А дальше так же как и перед этим

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

ЦенаРозничная = Рознечная.Цена.Получить(ДатаДок);
ЦенаЗакупочная = Закупочная.Цена.Получить(ДатаДок);
 
D

Dzo

Метод который применяется в ГлВернутьЦену не работает:

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


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

puh14

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

kaa

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

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


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

Renat11111

Метод который применяется в ГлВернутьЦену не работает:

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


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


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

Dzo

Благодарю всех кто откликнулся! Все заработало. Всем еще раз огромное спасибо.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!