Имя: Пароль:
1C
1C 7.7
v7: Вытянуть для каждого товара оптовую и розничную цену
0 san4ez1008
 
07.09.16
09:10
Добрый день! Сделал обработку поиска товара по ключу, выводит товар, путь к товару в справочнике, остатки, теперь нужно получить закупочную и оптовую цены.. Не понимаю, откуда их надо вытянуть, потому что в справочнике "Цены" пусто, а в справочнике "Типы цен" 4 типа, и никакого отношения к номенклатуре нет..
1 _stay true_
 
07.09.16
09:12
Продолжайте вести наблюдение!
2 Ёпрст
 
07.09.16
09:13
Цена - периодический реквизит справочника цены, хранится в разрезе типов цен
3 _stay true_
 
07.09.16
09:14
(2) Что за конфа-то хоть?)) А то ванговать нет настроения)))
4 Джордж1
 
07.09.16
09:15
(0)Ну если в справочнике Цены действительно пусто и это Бух 7.7 - тогда из реквизитов товара и надо тянуть
5 Ёпрст
 
07.09.16
09:16
(3) если там есть ТипЦен - то очевидно, что ТиС/Комплексная.
6 Джордж1
 
07.09.16
09:17
(5)в бухе тоже есть
7 Ёпрст
 
07.09.16
09:17
(6) тип цен в бухне ?
8 Ёпрст
 
07.09.16
09:18
не помню ужо, вроде там этого не было.
9 Джордж1
 
07.09.16
09:18
(7)да
10 Ёпрст
 
07.09.16
09:19
(9) ну, принцип то один и тот-же поди - цена в периодике и реквизит типцен в справочнике + Цены подчинён Номенклатуре
11 Джордж1
 
07.09.16
09:25
(10)не там 2 варианта - в реквизитах товара цена хранится (в периодике наверное) или по типам цен в справочнике цены
12 san4ez1008
 
07.09.16
09:50
(3) ТиС 9.2 (2) как к нему обратиться, чтобы для каждого элемента получить значений цены?
13 Ёпрст
 
07.09.16
09:53
(12)
глВернутьЦену
глПолучитьЦену
14 san4ez1008
 
07.09.16
09:56
(13) можно поподробнее? Запросом я выбрал элементы в справочнике, выгрузил в ТЗ,обработал данные и выгрузил в новую ТЗ.

Запрос=СоздатьОбъект("Запрос");
    СтрокаПоиска1=Нрег(СокрЛП(СтрокаПоиска));
    ТекстЗапроса =
    "//{{ЗАПРОС(Серийник)    
    |Обрабатывать НеПомеченныеНаУдаление;
    |Товар=Справочник.Номенклатура.ТекущийЭлемент;
    |Наименование=Справочник.Номенклатура.Наименование;
    |ЦенаЗакуп=Справочник.Цены;
    |Код=Справочник.Номенклатура.Код;
    |Склад = Регистр.ОстаткиТМЦ.Склад;
    |Условие(Склад в ВыбСклад);
    |Группировка Товар упорядочить по Товар.Наименование;
    |"//}}ЗАПРОС
    ;
    //------Собираем строку условия в запросе------
    ТекстУсловия="Условие(";
    Для i=1 по Ключи.РазмерСписка() Цикл
        ТекстУсловия=ТекстУсловия+"((Найти(Нрег(СокрЛП(Наименование)),СокрЛП(Ключи.ПолучитьЗначение("+СокрЛП(i)+")))>0))";    //Добавили ключ в строку поиска
        Если i<>Ключи.РазмерСписка() Тогда ТекстУсловия=ТекстУсловия+"И";КонецЕсли;    //После последнего ключа "И" не ставим
    КонецЦикла;
    ТекстУсловия=ТекстУсловия+");";
    ТекстЗапроса=ТекстЗапроса+ТекстУсловия;
    ТекстЗапроса=ТекстЗапроса+"Без итогов;";
    //-------------Выполняем запрос-----------
    //+" "+СокрЛП(КодВендора)+" "+СокрЛП(ОписаниеТов)
    Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
        Возврат;
    КонецЕсли;
    Запрос.Выгрузить(ТЗ);
    Если ТЗ.КоличествоСтрок()=0 Тогда Предупреждение("Товар не найден!");Возврат;КонецЕсли;
    //----------------------Выгрузка справочника в таблицу-------------------
    ТабВыгр.Очистить();
    ТабВыгр.НоваяКолонка("Код"   ,,,,"Код"   ,4,,);
    ТабВыгр.НоваяКолонка("Товар" ,,,,"Товар",30,);
    ТабВыгр.НоваяКолонка("Остаток",,,,"Остаток",4,);
    ТабВыгр.НоваяКолонка("Путь",,,,"Путь к товару",30);
    ТабВыгр.НоваяКолонка("ЦенаЗакуп",,,,"Закупочная Цена",10);
    ТабВыгр.НоваяКолонка("ЦенаОпт",,,,"Оптовая Цена",10);
    ТЗ.ВыбратьСтроки();
    Пока ТЗ.ПолучитьСтроку()=1 Цикл
        Если ТЗ.Товар.ЭтоГруппа()=1 Тогда
            продолжить;//ТабВыгр.Товар   = "..\\ "+Строка(ТЗ.Товар);
        Иначе
            ТабВыгр.НоваяСтрока();
            ТабВыгр.Код      = Строка(ТЗ.Товар.Код);
            ТабВыгр.Товар    = Строка(ТЗ.Товар);
            Остаток         = Регистр.ОстаткиТМЦ.Остаток(ТЗ.Товар,ВыбСклад,ТЗ.Товар.Цена,"Количество");
            ТабВыгр.Остаток =?(Остаток>0,Остаток,"");
            ТабВыгр.Путь     = Строка(ТЗ.Товар.Родитель.ПолноеНаименование());
            РозничнаяЦена = глПолучитьЦену(Ном.ТекущийЭлемент(),Цен., ТекущаяДата(), Ном.БазоваяЕдиница, глРубли);
            ТабВыгр.ЦенаЗакуп = РозничнаяЦена;
        КонецЕсли;
    КонецЦикла;
    НомСтроки=0;
15 san4ez1008
 
08.09.16
02:58
мне к справочнику Цены вообще надо обращаться,или как?
16 welwel
 
08.09.16
03:12
(14) Запрос некорректный. Остатки и цены не выберет.
(13) подразумевается (5)
17 welwel
 
08.09.16
03:22
(16) +
В запросе (черном) все пути к данным должны начинаться с Регистр.ОстаткиТМЦ.
Можно тогда выбрать запросом остатки, а цены получить, используя (13)
18 san4ez1008
 
08.09.16
03:54
(16) Остатки то мне не нужны, я их вывел уже, только с условием, что выбран склад =(
(17) Не пойму, как пользоваться (13).. Какие параметры передавать, исходя из кода?
19 san4ez1008
 
08.09.16
04:05
ТабВыгр.ЦенаЗакуп = глВернутьЦену(ТЗ.Товар,"Закупочные");

Выдает

Рассчетная        = ТипЦены.Рассчитывается;
{Глобальный модуль(1344)}: Значение не представляет агрегатный объект (Рассчитывается)
20 welwel
 
08.09.16
04:16
Параметр ТипЦены должен быть типа Справочник.ТипыЦен
21 welwel
 
08.09.16
04:17
И судя по контексту нужно
ГлПолучитьЦену
22 san4ez1008
 
08.09.16
04:57
РозничнаяЦена = глПолучитьЦену(ТЗ.Товар,Цены.Рассчитывается, ТекущаяДата(),Цены.БазовыйТипЦен, глРубли);



Снова ошибка
Рассчетная = ТипЦены.Рассчитывается;
{Глобальный модуль(1344)}: Значение не представляет агрегатный объект (Рассчитывается)
23 Antony8x
 
08.09.16
05:00
(3) ))
24 san4ez1008
 
08.09.16
05:17
ТабВыгр.Путь      = Строка(ТЗ.Товар.Родитель.ПолноеНаименование());
ТабВыгр.ЦенаЗакуп = глПолучитьЦену(ТЗ.Товар,Цены.БазовыйТипЦен, ТекущаяДата());
В колонке пусто...
25 Смотрящий
 
08.09.16
06:32
А полный код своего творения можешь привести ?
26 san4ez1008
 
08.09.16
07:18
(25)
Процедура НайтиПоСтроке(СтрокаПоиска)
Цены = СоздатьОбъект("Справочник.ТипыЦен");
Ключи=СоздатьОбъект("СписокЗначений");
ТЗ=СоздатьОбъект("ТаблицаЗначений");
    //-------------Парсим ключи поиска----------------
    стр=СтрЗаменить(Нрег(СтрокаПоиска)," ",РазделительСтрок);    //Разбили на строку на подстроки
    Для i=1 по СтрКоличествоСтрок(Стр) Цикл                //Перебираем подстроки
        х=СтрПолучитьСтроку(Стр,i);
        Если ПустаяСтрока(х)=0 Тогда                    //Пропускаем пустые строки
            Если СтрДлина(х)>=3 Тогда                    //Пропускаем ключи меньше 3х символов
                Ключи.ДобавитьЗначение(х,);
            КонецЕсли;
        КонецЕсли;
    КонецЦикла;
    Если Ключи.РазмерСписка()=0 Тогда Сигнал();Предупреждение("Задайте хотя бы один ключ поиска не менее 3-х символов");КонецЕсли;
    //--------------Формирование Запроса--------------
Запрос=СоздатьОбъект("Запрос");
    СтрокаПоиска1=Нрег(СокрЛП(СтрокаПоиска));
    ТекстЗапроса =
    "//{{ЗАПРОС(Серийник)    
    |Обрабатывать НеПомеченныеНаУдаление;
    |Товар=Справочник.Номенклатура.ТекущийЭлемент;
    |Наименование=Справочник.Номенклатура.Наименование;
    |ЦенаЗакуп=Справочник.Цены;
    |Код=Справочник.Номенклатура.Код;
    |Склад = Регистр.ОстаткиТМЦ.Склад;
    |Условие(Склад в ВыбСклад);
    |Группировка Товар упорядочить по Товар.Наименование;
    |"//}}ЗАПРОС
    ;
    //------Собираем строку условия в запросе------
    ТекстУсловия="Условие(";
    Для i=1 по Ключи.РазмерСписка() Цикл
        ТекстУсловия=ТекстУсловия+"((Найти(Нрег(СокрЛП(Наименование)),СокрЛП(Ключи.ПолучитьЗначение("+СокрЛП(i)+")))>0))";    //Добавили ключ в строку поиска
        Если i<>Ключи.РазмерСписка() Тогда ТекстУсловия=ТекстУсловия+"И";КонецЕсли;    //После последнего ключа "И" не ставим
    КонецЦикла;
    ТекстУсловия=ТекстУсловия+");";
    ТекстЗапроса=ТекстЗапроса+ТекстУсловия;
    ТекстЗапроса=ТекстЗапроса+"Без итогов;";
    //-------------Выполняем запрос-----------
    //+" "+СокрЛП(КодВендора)+" "+СокрЛП(ОписаниеТов)
    Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
        Возврат;
    КонецЕсли;
    Запрос.Выгрузить(ТЗ);
    Если ТЗ.КоличествоСтрок()=0 Тогда Предупреждение("Товар не найден!");Возврат;КонецЕсли;
    //----------------------Выгрузка справочника в таблицу-------------------
    ТабВыгр.Очистить();
    ТабВыгр.НоваяКолонка("Код"   ,,,,"Код"   ,4,,);
    ТабВыгр.НоваяКолонка("Товар" ,,,,"Товар",30,);
    ТабВыгр.НоваяКолонка("Остаток",,,,"Остаток",4,);
    ТабВыгр.НоваяКолонка("Путь",,,,"Путь к товару",30);
    ТабВыгр.НоваяКолонка("ЦенаЗакуп",,,,"Закупочная Цена",8);
    ТабВыгр.НоваяКолонка("ЦенаОпт",,,,"Оптовая Цена",8);
    ТЗ.ВыбратьСтроки();
    Пока ТЗ.ПолучитьСтроку()=1 Цикл
        Если ТЗ.Товар.ЭтоГруппа()=1 Тогда
            продолжить//ТабВыгр.Товар   = "..\\ "+Строка(ТЗ.Товар);
        Иначе
            ТабВыгр.НоваяСтрока();
            ТабВыгр.Код       = Строка(ТЗ.Товар.Код);
            ТабВыгр.Товар     = Строка(ТЗ.Товар);
            Остаток           = Регистр.ОстаткиТМЦ.Остаток(ТЗ.Товар,ВыбСклад,ТЗ.Товар.Цена,"Количество");
            ТабВыгр.Остаток   = ?(Остаток>0,Остаток,"");
            ТабВыгр.Путь      = Строка(ТЗ.Товар.Родитель.ПолноеНаименование());
            ТабВыгр.ЦенаЗакуп = глПолучитьЦену(Запрос.Товар,Цены.БазовыйТипЦен, ТекущаяДата());
        КонецЕсли;
    КонецЦикла;
    НомСтроки=0;
КонецПроцедуры
27 Смотрящий
 
08.09.16
07:33
почту глянь
28 varelchik
 
08.09.16
08:24
(0) А цены вообще-то есть?
Для начала.
Мож их и нет вообще, а в документах устанавливают явно.
29 DrZombi
 
гуру
08.09.16
08:45
(0) Прямым запросом можно сделать в один запрос :)
30 san4ez1008
 
19.09.16
08:06
Ребят,я штрихкод не могу вытянуть.. Реквизит находится в справочнике Единицы, в запросе к нему обращаюсь, а он выдает:
Поле агрегатного объекта не обнаружено (ШтрихКод).
|ШтрихКод = Справочник.Номенклатура.БазоваяЕдиница.ШтрихКод;
ТабВыгр.ШтрихКод    = Строка(Таб.ШтрихКод);
31 san4ez1008
 
19.09.16
08:07
Справочник Единицы - подчиненный справочник Номенклатура
32 san4ez1008
 
19.09.16
11:27
О,все ништяк,заработало
Закон Брукера: Даже маленькая практика стоит большой теории.