Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: добавление типов цен в документ "поступление товаров услуг"
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.2 > Программирование обычных форм 1С 8.2 и не интерфейсной логики
gorik77
добрый день!!! помогите пожалуйста разобраться. создал внешюю печатную форму для документа "поступление товаров услуг". в нем при печати для начала необходимо добавить вывод цены таможенной и цены розничной. тип цен в документе выбирается постоянно оптовая цена. для начала пробую хотя бы вывести нужные данные в строчном варианте не помещая их на форму, но первое с чем я столкнулся не могу задать в запросе условие при котором он будет брать данные только актуальные на дату документа и желательно конечно чтоб он даже не перебирал тип цен выбранный в документе, так как это немного облегчит выполнение запроса, но ето уже на втором плане.



Запрос = Новый Запрос;
    Запрос.УстановитьПараметр("ТекущийДокумент", СсылкаНаОбъект.Ссылка);
    Запрос.Текст =
        "ВЫБРАТЬ
        |    ЦеныНоменклатуры.Номенклатура КАК товар,
        |    ЦеныНоменклатуры.ТипЦен,
        |    ЦеныНоменклатуры.Период КАК Период,
        |    ЦеныНоменклатуры.Цена,
        |    ПоступлениеТоваровУслуг.Товары.(
        |        Номенклатура
        |    ),
        |    ПоступлениеТоваровУслуг.Дата
        |ИЗ
        |    Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг
        |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
        |        ПО ПоступлениеТоваровУслуг.Товары.Номенклатура = ЦеныНоменклатуры.Номенклатура
        |ГДЕ
        |    ПоступлениеТоваровУслуг.Ссылка = &ТекущийДокумент";

        
    ЗапросТипЦен = Запрос.Выполнить().Выгрузить();    

    
    Для каждого ВыборкаСтрокТипЦен Из ЗапросТипЦен Цикл
        
        
        Сообщить("Товар: " + Строка(СокрЛП(ВыборкаСтрокТипЦен.Товар)) + "  " +  Строка(СокрЛП(ВыборкаСтрокТипЦен.ТипЦен))    + ": " +   Строка(СокрЛП(ВыборкаСтрокТипЦен.Цена)));
        
    КонецЦикла;

на данный момент как видите выдает все данные по типам цен какие есть
необходимо зарегистрироваться для просмотра ссылки


1С:Предприятие 8.2 (8.2.14.540) конфигурация:(1.2.6.5)
Vofka
Соединяйте не с РегистрСведений.ЦеныНоменклатуры, а с РегистрСведений.ЦеныНоменклатуры.СрезПоследних. Там можно указать и дату и тип цены

ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&ДатаДокумента, ТипЦен = &ТаможенныйТипЦен)
gorik77
я конечно извиняюсь за свою глупость, но я не совсем понимаю как это можно сделать, я создаю запрос через конструктор. не подскажете как там это можно воплотить. мне так просто удобнее по неопытности. а если я это допишу ручками просто в тексте то потом не смогу корректировать в конструкторе.
Vofka
Цитата(gorik77 @ 03.05.12, 12:43) необходимо зарегистрироваться для просмотра ссылки
не подскажете как там это можно воплотить.

Ищите в конструкторе таблицу ЦеныНоменклатуры.СрезПоследних

Цитата(gorik77 @ 03.05.12, 12:43) необходимо зарегистрироваться для просмотра ссылки
если я это допишу ручками просто в тексте то потом не смогу корректировать в конструкторе.

Это кто сказал?
gorik77
в етом варианте получается пустая таблица значений
 Запрос = Новый Запрос;
    Запрос.УстановитьПараметр("ТекущийДокумент", СсылкаНаОбъект.Ссылка);
         Запрос.Текст =
        "ВЫБРАТЬ
        |    ПоступлениеТоваровУслуг.Товары.(
        |        Номенклатура КАК товар,
        |        НомерСтроки КАК НомерСтроки
        |    ),
        |    ЦеныНоменклатурыСрезПоследних.Номенклатура КАК товар,
        |    ЦеныНоменклатурыСрезПоследних.ТипЦен,
        |    ЦеныНоменклатурыСрезПоследних.Цена,
        |    ЦеныНоменклатурыСрезПоследних.Период,
        |    ПоступлениеТоваровУслуг.Дата
        |ИЗ
        |    РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК ЦеныНоменклатурыСрезПоследних
        |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг
        |        ПО ЦеныНоменклатурыСрезПоследних.Номенклатура = ПоступлениеТоваровУслуг.Товары.Номенклатура
        |ГДЕ
        |    ПоступлениеТоваровУслуг.Ссылка = &ТекущийДокумент
        |    И ЦеныНоменклатурыСрезПоследних.Период <= ПоступлениеТоваровУслуг.Дата
        |
        |УПОРЯДОЧИТЬ ПО
        |    НомерСтроки,
        |    товар";

        
    ЗапросТипЦен = Запрос.Выполнить().Выгрузить();  


     ЗапросТипЦен.ВыбратьСтроку();

    
    Для каждого ВыборкаСтрокТипЦен Из ЗапросТипЦен Цикл
        
        
        Сообщить("Товар: " + Строка(СокрЛП(ВыборкаСтрокТипЦен.Товар)) + "  " +  Строка(СокрЛП(ВыборкаСтрокТипЦен.ТипЦен))    + ": " +   Строка(СокрЛП(ВыборкаСтрокТипЦен.Цена)) + "период: " + Строка(СокрЛП(ВыборкаСтрокТипЦен.период)));
        
    КонецЦикла;


убираю условие по дате докумета
  Запрос = Новый Запрос;
    Запрос.УстановитьПараметр("ТекущийДокумент", СсылкаНаОбъект.Ссылка);
         Запрос.Текст =
        "ВЫБРАТЬ
        |    ПоступлениеТоваровУслуг.Товары.(
        |        Номенклатура КАК товар,
        |        НомерСтроки КАК НомерСтроки
        |    ),
        |    ЦеныНоменклатурыСрезПоследних.Номенклатура КАК товар,
        |    ЦеныНоменклатурыСрезПоследних.ТипЦен,
        |    ЦеныНоменклатурыСрезПоследних.Цена,
        |    ЦеныНоменклатурыСрезПоследних.Период,
        |    ПоступлениеТоваровУслуг.Дата
        |ИЗ
        |    РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК ЦеныНоменклатурыСрезПоследних
        |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг
        |        ПО ЦеныНоменклатурыСрезПоследних.Номенклатура = ПоступлениеТоваровУслуг.Товары.Номенклатура
        |ГДЕ
        |    ПоступлениеТоваровУслуг.Ссылка = &ТекущийДокумент
        |
        |УПОРЯДОЧИТЬ ПО
        |    НомерСтроки,
        |    товар";

        
    ЗапросТипЦен = Запрос.Выполнить().Выгрузить();  


     ЗапросТипЦен.ВыбратьСтроку();

    
    Для каждого ВыборкаСтрокТипЦен Из ЗапросТипЦен Цикл
        
                Сообщить("Товар: " + Строка(СокрЛП(ВыборкаСтрокТипЦен.Товар)) + "  " +  Строка(СокрЛП(ВыборкаСтрокТипЦен.ТипЦен))    + ": " +   Строка(СокрЛП(ВыборкаСтрокТипЦен.Цена)) + "период: " + Строка(СокрЛП(ВыборкаСтрокТипЦен.период)));
        
    КонецЦикла;


смотря на результа видно что выберается просто самые последние данные
Специально изменил оптовую цену чтоб было четко видно как работает

необходимо зарегистрироваться для просмотра ссылки

как же всетаки заставить выбирать данные строго на конкретный момент времени?


 ! 

не надо без надобности выделять шрифт жирным!
 
logist
А в чем проблема то?
При указанных датах, условие по дате в первом запросе отрабатывает верно - пустая таблица.
gorik77
Цитата(logist @ 17.05.12, 15:22) необходимо зарегистрироваться для просмотра ссылки
А в чем проблема то?
При указанных датах, условие по дате в первом запросе отрабатывает верно - пустая таблица.


проблема в том, что мне нужно выбрать данные на указанную дату. данные на тот момент имеются,
т.к. документ ведется по оптовой цене. а вот вытащить их не получается. крутил и так и этак, все никак. подскажите что не так делаю если не сложно.
Спасибо!
ignsv
Запрос = Новый Запрос;
    Запрос.УстановитьПараметр("Док", Док);
    Запрос.УстановитьПараметр("ДатаЦены", Док.Дата);
    
    Запрос.Текст =
    "ВЫБРАТЬ
    |    ПоступлениеТоваровУслугТовары.Ссылка,
    |    ПоступлениеТоваровУслугТовары.Номенклатура,
    |    ЦеныНоменклатурыСрезПоследних.Валюта,
    |    ЦеныНоменклатурыСрезПоследних.Период,
    |    ЦеныНоменклатурыСрезПоследних.ТипЦен,
    |    ЦеныНоменклатурыСрезПоследних.Цена
    |ИЗ
    |    РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&ДатаЦены, ) КАК ЦеныНоменклатурыСрезПоследних
    |        ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары
    |        ПО (ПоступлениеТоваровУслугТовары.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура)
    |ГДЕ
    |    ПоступлениеТоваровУслугТовары.Ссылка = &Док";
    
    
    ЗапросТипЦен = Запрос.Выполнить().Выгрузить();


так получает последние актуальные цены на дату документа
gorik77
Цитата(ignsv @ 18.05.12, 13:10) необходимо зарегистрироваться для просмотра ссылки
так получает последние актуальные цены на дату документа


на сколько я понял что вы пробовали ето непосредственно в документе. учитывая этот факт
немного откорректировал запрос и все сработало. Большое спасибо!



необходимо зарегистрироваться для просмотра ссылки
ignsv
Док у меня ДокументСсылка ( в моем случае реквизит облаботки) все эксперименты провожу создавая новую обработку.

Кстати у Вас в печатной форме кажись ошибочка: "Всього iз ПДВ". Возможно "Всього з ПДВ"
И "Отрим" тоже настораживает )).
gorik77
осмелюсь спросить в етой же теме т.к. это есть продолжение.

ЗапросТипЦен.Колонки.Добавить("ОптоваяЦена",,"ОптоваяЦена");

Для каждого ВыборкаСтрокТипЦен Из ЗапросТипЦен Цикл

Если  ВыборкаСтрокТипЦен.ТипЦен.наименование = Строка(СокрЛП("Оптовая цена")) тогда
            ОптоваяЦена1 = СокрЛП(ВыборкаСтрокТипЦен.Цена);
            
            ВыборкаСтрокТипЦен.ОптоваяЦена = ОптоваяЦена1;
КонецЕсли;

КонецЦикла;

ЗапросТипЦен.ВыбратьСтроку();
          ЗапросТипЦен.Свернуть("товар","ОптоваяЦена,ТаможеннаяЦена,РозничнаяЦена");
         ЗапросТипЦен.ВыбратьСтроку();


до группировки все отлично, но после группировки новые колонки пустые, на сколько я понял из-за того что
не назначен тип число. но все мои попытки как то назначить тип(число) ничего не принесли. перебрал весь
синтаксис помощник, ничего не получается 09000000.gif
подскажите если не сложно help.gif
ignsv
не понятно что вы хотите зделать )) но если вас мучают пустые колонки с Неопределено (когда тип цен не Оптовая) то можно ставить "0"

Если  ВыборкаСтрокТипЦен.ТипЦен.наименование = Строка(СокрЛП("Оптовая цена")) тогда
            ОптоваяЦена1 = СокрЛП(ВыборкаСтрокТипЦен.Цена);            
            ВыборкаСтрокТипЦен.ОптоваяЦена = ОптоваяЦена1;
Иначе  ВыборкаСтрокТипЦен.ОптоваяЦена = 0;
Конецесли

gorik77
я так понял что не совсем понятно что я хотел спросить. покажу наглядно

для того чтоб он суммировал новые колонки необходимо чтоб у них был тип(число)

необходимо зарегистрироваться для просмотра ссылки


ЗапросТипЦен.Колонки.Добавить("ОптоваяЦена",,"ОптоваяЦена");
      ЗапросТипЦен.Колонки.Добавить("ТаможеннаяЦена",,"ТаможеннаяЦена");
      ЗапросТипЦен.Колонки.Добавить("РозничнаяЦена",,"РозничнаяЦена");
      

      
    Для каждого ВыборкаСтрокТипЦен Из ЗапросТипЦен Цикл
        
        Если  ВыборкаСтрокТипЦен.ТипЦен.наименование = Строка(СокрЛП("Оптовая цена")) тогда
            ОптоваяЦена1 = СокрЛП(ВыборкаСтрокТипЦен.Цена);
            Сообщить("оптовая цена: " + ОптоваяЦена1);
            ВыборкаСтрокТипЦен.ОптоваяЦена = ОптоваяЦена1;
        ИначеЕсли    ВыборкаСтрокТипЦен.ТипЦен.наименование = Строка(СокрЛП("Таможенная цена")) тогда
            ТаможеннаяЦена1 = СокрЛП(ВыборкаСтрокТипЦен.Цена);
            Сообщить("оптовая цена: " + ТаможеннаяЦена1);
            ВыборкаСтрокТипЦен.ТаможеннаяЦена = ТаможеннаяЦена1;
         ИначеЕсли   ВыборкаСтрокТипЦен.ТипЦен.наименование = Строка(СокрЛП("Розничная цена")) тогда
            РозничнаяЦена1 = СокрЛП(ВыборкаСтрокТипЦен.Цена);
            Сообщить("оптовая цена: " + РозничнаяЦена1);
            ВыборкаСтрокТипЦен.РозничнаяЦена = РозничнаяЦена1;

            
        КонецЕсли;
            
        
        КонецЦикла;
        

         ЗапросТипЦен.ВыбратьСтроку();
          ЗапросТипЦен.Свернуть("товар","ОптоваяЦена,ТаможеннаяЦена,РозничнаяЦена");
         ЗапросТипЦен.ВыбратьСтроку();

ignsv
ну так чем вас "0" не устраивает? - будет тип число.
вы в цикле проверяете типцен: Если оптовая то в колонку Оптовая ставите цену, а востальные 0 , аналогично для розничной и таможенной
sava1
типизация колонок
тз.Колонки.Добавить("число", Новый ОписаниеТипов("Число",Новый КвалификаторыЧисла(10, 2, ДопустимыйЗнак.Любой)), "1");
ignsv
Цитата(sava1 @ 23.05.12, 13:30) необходимо зарегистрироваться для просмотра ссылки
тз.Колонки.Добавить("число", Новый ОписаниеТипов("Число",Новый КвалификаторыЧисла(10, 2, ДопустимыйЗнак.Любой)), "1");


о да можно и так.

можно и покороче:

ЗапросТипЦен.Колонки.Добавить("РозничнаяЦена", Новый ОписаниеТипов("Число"));
gorik77
Цитата(ignsv @ 23.05.12, 13:40) необходимо зарегистрироваться для просмотра ссылки
о да можно и так.

можно и покороче:

ЗапросТипЦен.Колонки.Добавить("РозничнаяЦена", Новый ОписаниеТипов("Число"));



спасибо, ето отличный вариант, все получилось

Цитата(ignsv @ 23.05.12, 13:40) необходимо зарегистрироваться для просмотра ссылки
ЗапросТипЦен.Колонки.Добавить("РозничнаяЦена", Новый ОписаниеТипов("Число"));


можно ли тут задать количество знаков после запятой?
Vofka
Цитата(gorik77 @ 23.05.12, 14:15) необходимо зарегистрироваться для просмотра ссылки
можно ли тут задать количество знаков после запятой?

А посмотреть выше (на пост sava1) не судьба?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.