8.х Проблема с заполнением цен в документах.

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем Steel Rain, 25 июн 2013.

  1. TopicStarter Overlay
    Steel Rain
    Offline

    Steel Rain Опытный в 1С

    Регистрация:
    29 сен 2006
    Сообщения:
    408
    Симпатии:
    2
    Баллы:
    29
    Доброго времени суток.

    Платформа 8.1 Конфигурация "Управление Торговлей" 10.3.13.2 (переписанная)
    Возникла следующая проблема в документах при выполнении операции "Цены и валюта" - Перезаполнить цены у некоторых контрагентов стали пропадать цены на товар. Покопавшись нашел вот что для этих контрагентов введены документы "Условия поставок по договорам контрагентов" и ситуация такая, к примеру есть документ УсловиеПоставок1 в нем два товара Товар1, Товар2 действующий период с 01.01.2013 по 31.05.2013 и документ УсловиеПоставок2 в котором только Товар1 и срок действия с 01.06.2013 по 31.12.2013. При формировании документа Реализация на этого контрагента, если в док подобрать Товар1 и Товар2 и сделать перезаполнение цен, то у Товар2 будет нулевая цена. Происходит это, видимо, из-за того, что в регистре сведений УсловияПоставокПоДоговорамКонтрагентовПоНоменклатуре докуметом УсловиеПоставок1 сформированы запись о том, у Товар2 что с 31.05.2013 цена 0. Оговорюсь, что для всех товаров введены цены документами УстановкаЦенНоменклатуры, т.е. если в Условиях поставок нет цены для товара, она должна браться из регистра ЦеныНоменклатуры. На сколько понял, цены получаются в результате выполнения следующего запроса в модуле Ценообразование - СформироватьЗапросПоЦенам

    Код:
    Функция СформироватьЗапросПоЦенам(СтруктураЗначений, СпособЗаполненияЦен, МассивНоменклатуры,
    ДатаДокумента, Контрагент, ДоговорКонтрагента = Неопределено,
    Склад = Неопределено) Экспорт
    Перем УсловиеПродаж;
    СтруктураЗначений.Свойство("НовыйУсловиеПродаж", УсловиеПродаж);
    // Достанем нужные цены запросом.
    Запрос = Новый Запрос;
    Запрос.УстановитьПараметр("МассивНоменклатуры", МассивНоменклатуры);
    Запрос.УстановитьПараметр("Дата", ПолучитьАктуальнуюДатуРасчетаЦен(ДатаДокумента));
    Запрос.УстановитьПараметр("ДоговорКонтрагента", ДоговорКонтрагента);
    Запрос.УстановитьПараметр("Контрагент", Контрагент);
    Запрос.УстановитьПараметр("УсловиеПродаж", УсловиеПродаж);
    Если СпособЗаполненияЦен = Перечисления.СпособыЗаполненияЦен.ПоЦенамНоменклатуры Тогда
    Запрос.УстановитьПараметр("ТипЦен", СтруктураЗначений.НовыйТипЦен);
    Запрос.Текст = "
    |ВЫБРАТЬ
    | БазовыеЦены.Номенклатура,
    | БазовыеЦены.ХарактеристикаНоменклатуры,
    | БазовыеЦены.Номенклатура.ЕдиницаХраненияОстатков,
    | БазовыеЦены.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент КАК КоэффициентОсновнойЕдиницы,
    | БазовыеЦены.ТипЦен,
    | ЕСТЬNULL(ВЫБОР КОГДА БазовыеЦены.Цена = 0 И БазовыеЦены.ТипЦен.Рассчитывается Тогда
    |  ЦеныНоменклатурыРассчитываемые.Цена
    | ИНАЧЕ
    |  БазовыеЦены.Цена
    | КОНЕЦ, 0) КАК Цена,
    | ВЫБОР КОГДА БазовыеЦены.Цена = 0 И БазовыеЦены.ТипЦен.Рассчитывается Тогда
    |  ЕСТЬNULL(БазовыеЦены.СпособРасчетаЦены, БазовыеЦены.ТипЦен.СпособРасчетаЦены)
    | ИНАЧЕ
    |  NULL
    | КОНЕЦ КАК СпособРасчетаЦены,
    | ВЫБОР КОГДА БазовыеЦены.Цена = 0 И БазовыеЦены.ТипЦен.Рассчитывается Тогда
    |  ЕСТЬNULL(БазовыеЦены.ПроцентСкидкиНаценки, БазовыеЦены.ТипЦен.ПроцентСкидкиНаценки)
    | ИНАЧЕ
    |  0
    | КОНЕЦ КАК ПроцентСкидкиНаценки,
    | ВЫБОР КОГДА БазовыеЦены.Цена = 0 И БазовыеЦены.ТипЦен.Рассчитывается Тогда
    |  ЦеныНоменклатурыРассчитываемые.Валюта
    | ИНАЧЕ
    |  БазовыеЦены.Валюта
    | КОНЕЦ КАК ВалютаЦены,
    | ВЫБОР КОГДА БазовыеЦены.Цена = 0 И БазовыеЦены.ТипЦен.Рассчитывается Тогда
    |  ЦеныНоменклатурыРассчитываемые.ЕдиницаИзмерения
    | ИНАЧЕ
    |  БазовыеЦены.ЕдиницаИзмерения
    | КОНЕЦ КАК ЕдиницаИзмеренияЦены,
    | ВЫБОР КОГДА БазовыеЦены.Цена = 0 И БазовыеЦены.ТипЦен.Рассчитывается Тогда
    |  ЦеныНоменклатурыРассчитываемые.ЕдиницаИзмерения.Коэффициент
    | ИНАЧЕ
    |  БазовыеЦены.ЕдиницаИзмерения.Коэффициент
    | КОНЕЦ КАК КоэффициентЕдиницыЦены,
    | ЕСТЬNULL(НаценкиПоУсловиямПродаж.ПроцентНаценки, 0) КАК ПроцентНаценкиПоУсловиямПродаж,
    | КурсыВалютСрезПоследних.Кратность КАК КратностьВалютыЦены,
    | КурсыВалютСрезПоследних.Курс КАК КурсВалютыЦены
    |ИЗ
    | (ВЫБРАТЬ РАЗЛИЧНЫЕ
    |  СпрНоменклатура.Номенклатура КАК Номенклатура,
    |  ЕСТЬNULL(УсловияПоставок.ХарактеристикаНоменклатуры, ЕСТЬNULL(ЦеныНоменклатуры.ХарактеристикаНоменклатуры, СпрНоменклатура.ХарактеристикаНоменклатуры)) КАК ХарактеристикаНоменклатуры,
    |  ВЫБОР КОГДА ТипыЦенПоГруппам.ТипЦен ЕСТЬ NULL
    |	ИЛИ ТипыЦенПоГруппам.ТипЦен = ЗНАЧЕНИЕ(Справочник.ТипыЦенНоменклатуры.ПустаяСсылка) ТОГДА
    |   &ТипЦен
    |  ИНАЧЕ
    |   ТипыЦенПоГруппам.ТипЦен
    |  КОНЕЦ КАК ТипЦен,
    |  ВЫБОР КОГДА УсловияПоставок.Номенклатура ЕСТЬ NULL ТОГДА
    |   ЦеныНоменклатуры.СпособРасчетаЦены
    |  ИНАЧЕ
    |   NULL
    |  КОНЕЦ КАК СпособРасчетаЦены,
    |  ВЫБОР КОГДА УсловияПоставок.Номенклатура ЕСТЬ NULL ТОГДА
    |   ЦеныНоменклатуры.ПроцентСкидкиНаценки
    |  ИНАЧЕ
    |   0
    |  КОНЕЦ КАК ПроцентСкидкиНаценки,
    |  ЕСТЬNULL(УсловияПоставок.Цена, ЕСТЬNULL(ЦеныНоменклатуры.Цена, 0)) КАК Цена,
    |  ЕСТЬNULL(УсловияПоставок.ЕдиницаИзмерения, ЦеныНоменклатуры.ЕдиницаИзмерения) КАК ЕдиницаИзмерения,
    |  ЕСТЬNULL(УсловияПоставок.ВалютаЦены, ЦеныНоменклатуры.Валюта) КАК Валюта
    |  ИЗ
    |  ( ВЫБРАТЬ
    |	СпрХарактеристики.Владелец КАК Номенклатура,
    |	СпрХарактеристики.Ссылка КАК ХарактеристикаНоменклатуры
    |   ИЗ
    |	Справочник.ХарактеристикиНоменклатуры КАК СпрХарактеристики
    |   ГДЕ
    |	СпрХарактеристики.Владелец В (&МассивНоменклатуры)
    |  
    |   ОБЪЕДИНИТЬ ВСЕ
    |  
    |   ВЫБРАТЬ
    |	СпрНоменклатура.Ссылка КАК Номенклатура,
    |	ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка) КАК ХарактеристикаНоменклатуры
    |   ИЗ
    |	Справочник.Номенклатура КАК СпрНоменклатура  
    |   ГДЕ
    |	СпрНоменклатура.Ссылка В (&МассивНоменклатуры)
    |  ) КАК СпрНоменклатура
    |  ЛЕВОЕ СОЕДИНЕНИЕ
    |   РегистрСведений.ТипыЦенПоГруппамНоменклатурыДляПокупателей.СрезПоследних(&Дата, Контрагент = &Контрагент) КАК ТипыЦенПоГруппам
    |  ПО
    |   ТипыЦенПоГруппам.НоменклатурнаяЦеноваяГруппа = СпрНоменклатура.Номенклатура.ЦеноваяГруппа
    |   ИЛИ ТипыЦенПоГруппам.НоменклатурнаяЦеноваяГруппа = СпрНоменклатура.Номенклатура.НоменклатурнаяГруппа
    |  ЛЕВОЕ СОЕДИНЕНИЕ
    |
    |   РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Дата, Номенклатура В (&МассивНоменклатуры)) КАК ЦеныНоменклатуры
    |  ПО
    |   ЦеныНоменклатуры.Номенклатура = СпрНоменклатура.Номенклатура
    |   И ((ЦеныНоменклатуры.ТипЦен = ТипыЦенПоГруппам.ТипЦен ИЛИ (ТипыЦенПоГруппам.ТипЦен ЕСТЬ NULL ИЛИ ТипыЦенПоГруппам.ТипЦен = ЗНАЧЕНИЕ(Справочник.ТипыЦенНоменклатуры.ПустаяСсылка))
    |   И ЦеныНоменклатуры.ТипЦен = &ТипЦен))
    |  ЛЕВОЕ СОЕДИНЕНИЕ
    |   РегистрСведений.УсловияПоставокПоДоговорамКонтрагентовПоНоменклатуре.СрезПоследних(&Дата, ДоговорКонтрагента = &ДоговорКонтрагента И Номенклатура В (&МассивНоменклатуры)) КАК УсловияПоставок
    |  ПО
    |   (УсловияПоставок.Номенклатура = ЦеныНоменклатуры.Номенклатура
    |   И УсловияПоставок.ХарактеристикаНоменклатуры = ЦеныНоменклатуры.ХарактеристикаНоменклатуры)
    |   ИЛИ УсловияПоставок.Номенклатура = СпрНоменклатура.Номенклатура
    |  ГДЕ
    |   СпрНоменклатура.Номенклатура в (&МассивНоменклатуры)
    | ) КАК БазовыеЦены
    |ЛЕВОЕ СОЕДИНЕНИЕ
    | РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Дата, Номенклатура В (&МассивНоменклатуры)) КАК ЦеныНоменклатурыРассчитываемые
    |ПО
    | БазовыеЦены.Номенклатура = ЦеныНоменклатурыРассчитываемые.Номенклатура
    | И БазовыеЦены.ХарактеристикаНоменклатуры = ЦеныНоменклатурыРассчитываемые.ХарактеристикаНоменклатуры
    | И БазовыеЦены.ТипЦен.БазовыйТипЦен = ЦеныНоменклатурыРассчитываемые.ТипЦен
    |ЛЕВОЕ СОЕДИНЕНИЕ
    | РегистрСведений.КурсыВалют.СрезПоследних(&Дата) КАК КурсыВалютСрезПоследних
    |ПО
    | ВЫБОР КОГДА БазовыеЦены.Цена = 0 И БазовыеЦены.ТипЦен.Рассчитывается Тогда
    |  ЦеныНоменклатурыРассчитываемые.Валюта
    | ИНАЧЕ
    |  БазовыеЦены.Валюта
    | КОНЕЦ = КурсыВалютСрезПоследних.Валюта
    |ЛЕВОЕ СОЕДИНЕНИЕ
    | РегистрСведений.НаценкиПоУсловиямПродаж.СрезПоследних(&Дата, УсловиеПродаж = &УсловиеПродаж) КАК НаценкиПоУсловиямПродаж
    |ПО
    | БазовыеЦены.Номенклатура.ЦеноваяГруппа = НаценкиПоУсловиямПродаж.НоменклатурнаяЦеноваяГруппа
    | ИЛИ БазовыеЦены.Номенклатура.НоменклатурнаяГруппа = НаценкиПоУсловиямПродаж.НоменклатурнаяЦеноваяГруппа
    |ГДЕ
    | ЕСТЬNULL(ВЫБОР КОГДА БазовыеЦены.Цена = 0 И БазовыеЦены.ТипЦен.Рассчитывается Тогда
    |  ЦеныНоменклатурыРассчитываемые.Цена
    | ИНАЧЕ
    |  БазовыеЦены.Цена
    | КОНЕЦ, 0) <> 0
    |";
    
    Вопрос, собственно, в следующем: Как изменить данный запрос, что бы если из регистра сведений УсловияПоставокПоДоговорамКонтрагентовПоНоменклатуре получена нулевая цена, то запрос получал бы цену из регистра ЦеныНоменклатуры?

    Или может я вообще что то не так понимаю? Заранее благодарен.

Поделиться этой страницей