Группа: Пользователи
Сообщений: 6
Спасибо сказали: 0 раз
Рейтинг: 0
Доброго дня! Товарищи, решил реализовать ценник с двумя ценами (одна из них акционная), для чего требуется вытащить предыдущую цену номенклатуры. Прошу помощи. Либо ткните пальцем где это уже обсуждалось, ибо поиск не дал подходящего результата.
Группа: Основатель
Сообщений: 13983
Из: Киев
Спасибо сказали: 4553 раз
Рейтинг: 3682.7
1) Ознакомьтесь с правилами и, как минимум, укажите то, что сказано в пункте 7. Иначе тема уйдет в корзину. 2) Напишите что вы для этого сделали и что конкретно не получается. Если же вы хотите, что бы это просто сделали за вас, то можно обратиться в сервис удаленной работы 1С. Но там делают за деньги.
Группа: Пользователи
Сообщений: 6
Спасибо сказали: 0 раз
Рейтинг: 0
1) 1С:Предприятие 8.3 (8.3.8.1747), Управление торговым предприятием для Украины", редакция 1.2. (1.2.39.1) 2) Нашёл где лежит обработка. Не могу найти откуда и как берётся цена.
ВЫБРАТЬ ДатаПоследнейЦены.Период, ЦеныНоменклатуры.Цена КАК ТекущаяЦена, ДатаПоследнейЦены.ТипЦен, ДатаПоследнейЦены.Номенклатура ПОМЕСТИТЬ ПоследняяЦенаНоменклатур ИЗ (ВЫБРАТЬ МАКСИМУМ(ЦеныНоменклатуры.Период) КАК Период, ЦеныНоменклатуры.Номенклатура КАК Номенклатура, ЦеныНоменклатуры.ТипЦен КАК ТипЦен ИЗ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
СГРУППИРОВАТЬ ПО ЦеныНоменклатуры.Номенклатура, ЦеныНоменклатуры.ТипЦен) КАК ДатаПоследнейЦены ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры ПО ДатаПоследнейЦены.Период = ЦеныНоменклатуры.Период И ДатаПоследнейЦены.Номенклатура = ЦеныНоменклатуры.Номенклатура И ДатаПоследнейЦены.ТипЦен = ЦеныНоменклатуры.ТипЦен ;
//////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ПредПоследнийПериодЦены.Номенклатура, ПредПоследнийПериодЦены.Период, ЕСТЬNULL(ЦеныНоменклатуры.Цена, 0) КАК ПредыдущаяЦена, ПредПоследнийПериодЦены.ТипЦен ПОМЕСТИТЬ ПредПоследниеЦены ИЗ (ВЫБРАТЬ ЦеныНоменклатуры.Номенклатура КАК Номенклатура, МАКСИМУМ(ЦеныНоменклатуры.Период) КАК Период, ПоследняяЦенаНоменклатур.ТипЦен КАК ТипЦен ИЗ ПоследняяЦенаНоменклатур КАК ПоследняяЦенаНоменклатур ПОЛНОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры ПО ПоследняяЦенаНоменклатур.Период > ЦеныНоменклатуры.Период И ПоследняяЦенаНоменклатур.Номенклатура = ЦеныНоменклатуры.Номенклатура И ПоследняяЦенаНоменклатур.ТипЦен = ЦеныНоменклатуры.ТипЦен
СГРУППИРОВАТЬ ПО ЦеныНоменклатуры.Номенклатура, ПоследняяЦенаНоменклатур.ТипЦен) КАК ПредПоследнийПериодЦены ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры ПО ПредПоследнийПериодЦены.ТипЦен = ЦеныНоменклатуры.ТипЦен И ЦеныНоменклатуры.Период = ПредПоследнийПериодЦены.Период И ЦеныНоменклатуры.Номенклатура = ПредПоследнийПериодЦены.Номенклатура ;
//////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ПоследняяЦенаНоменклатур.Номенклатура, ПоследняяЦенаНоменклатур.ТипЦен, ПоследняяЦенаНоменклатур.ТекущаяЦена, ЕСТЬNULL(ПредПоследниеЦены.ПредыдущаяЦена, 0) КАК ПоследняяЦена ИЗ ПоследняяЦенаНоменклатур КАК ПоследняяЦенаНоменклатур ЛЕВОЕ СОЕДИНЕНИЕ ПредПоследниеЦены КАК ПредПоследниеЦены ПО ПоследняяЦенаНоменклатур.Номенклатура = ПредПоследниеЦены.Номенклатура И ПоследняяЦенаНоменклатур.ТипЦен = ПредПоследниеЦены.ТипЦен
Группа: Пользователи
Сообщений: 45
Спасибо сказали: 7 раз
Рейтинг: 0
Leks @ Сегодня, 15:18
, Делали одному клиенту по-другому. Дело в том, что не всегда нужно писать "настоящую" предыдущую цену. Зачастую цена без скидки завышается, чтобы разница казалась ощутимее. Добавили в РС реквизит ПредыдущаяЦена и потом уже с ним работали для вывода на ценник.
Группа: Пользователи
Сообщений: 6
Спасибо сказали: 0 раз
Рейтинг: 0
sava1 @ Вчера, 17:08
,для меня это пока тёмный лес.
На данный момент разобрался вот с чем. Есть такая последовательность процедур
Процедура ПриОткрытии()
Перем ЗаполнитьЦены;
Перем НастройкиПостроителя;
Валюта = Справочники.Валюты.НайтиПоКоду("980"); //Организация = Справочники.Организации.НайтиПоКоду("000000001"); ПечатьУзкихЦенников = Ложь; ОрганизацияПриИзменении(ЭлементыФормы.Организация);
Если Не Константы.ИспользоватьХарактеристикиНоменклатуры.Получить() Тогда Колонка = ЭлементыФормы.Товары.Колонки.ХарактеристикаНоменклатуры; Колонка.Видимость = Ложь; Колонка.ИзменятьВидимость = Ложь; КонецЕсли;
Если НастройкиПостроителя <> Неопределено Тогда ПостроительОтчета.УстановитьНастройки(НастройкиПостроителя); КонецЕсли;
Если ТипЗнч(Параметр) = Тип("Структура") Тогда Параметр.Свойство("ЗаполнитьЦены", ЗаполнитьЦены);
Если ЗаполнитьЦены = Истина Тогда Если ПроверитьПараметрыЗаполненияЦен() Тогда ПерезаполнитьЦены(); КонецЕсли; КонецЕсли; КонецЕсли;
КонецПроцедуры // ПриОткрытии()
Процедура ЗаполнитьПостроительОтчета() Экспорт
ТекстЗапроса = " |ВЫБРАТЬ | ИСТИНА КАК Печать, | СпрНоменклатура.Номенклатура КАК Номенклатура, | СпрНоменклатура.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры, | СпрНоменклатура.Номенклатура.ЕдиницаХраненияОстатков КАК ЕдиницаИзмерения, | 0 КАК Цена, | 1 КАК Количество |ИЗ | (ВЫБРАТЬ | СпрНоменклатура.Ссылка КАК Номенклатура, | ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка) КАК ХарактеристикаНоменклатуры | ИЗ | Справочник.Номенклатура КАК СпрНоменклатура | ГДЕ НЕ СпрНоменклатура.ЭтоГруппа | {ГДЕ | СпрНоменклатура.Ссылка.* КАК Номенклатура} | ОБЪЕДИНИТЬ ВСЕ | ВЫБРАТЬ | СпрХарактеристики.Владелец, | СпрХарактеристики.Ссылка | ИЗ | Справочник.ХарактеристикиНоменклатуры КАК СпрХарактеристики | {ГДЕ | СпрХарактеристики.Владелец.* КАК Номенклатура, | СпрХарактеристики.Ссылка.* КАК ХарактеристикаНоменклатуры} | ) КАК СпрНоменклатура |";
Если ТолькоИмеющиесяВНаличии Тогда ТекстЗапроса = ТекстЗапроса + " |ЛЕВОЕ СОЕДИНЕНИЕ | (ВЫБРАТЬ | НаСкладе.Номенклатура, | НаСкладе.ХарактеристикаНоменклатуры, | СУММА(НаСкладе.Количество) КАК Количество | ИЗ | (ВЫБРАТЬ | НаСкладе.Номенклатура, | НаСкладе.ХарактеристикаНоменклатуры, | НаСкладе.КоличествоОстаток КАК Количество | ИЗ | РегистрНакопления.ТоварыНаСкладах.Остатки(, {Номенклатура.* КАК Номенклатура, | ХарактеристикаНоменклатуры.* КАК ХарактеристикаНоменклатуры, | Склад.* КАК Склад}) КАК НаСкладе | ОБЪЕДИНИТЬ ВСЕ | ВЫБРАТЬ | ВРознице.Номенклатура, | ВРознице.ХарактеристикаНоменклатуры, | ВРознице.КоличествоОстаток КАК Количество | ИЗ | РегистрНакопления.ТоварыВРознице.Остатки(, {Номенклатура.* КАК Номенклатура, | ХарактеристикаНоменклатуры.* КАК ХарактеристикаНоменклатуры, | Склад.* КАК Склад}) КАК ВРознице | ОБЪЕДИНИТЬ ВСЕ | ВЫБРАТЬ | ВНТТ.Номенклатура, | ВНТТ.ХарактеристикаНоменклатуры, | ВНТТ.КоличествоОстаток КАК Количество | ИЗ | РегистрНакопления.ТоварыВНТТ.Остатки(, {Номенклатура.* КАК Номенклатура, | ХарактеристикаНоменклатуры.* КАК ХарактеристикаНоменклатуры, | Склад.* КАК Склад}) КАК ВНТТ | ) КАК НаСкладе | СГРУППИРОВАТЬ ПО | НаСкладе.Номенклатура, | НаСкладе.ХарактеристикаНоменклатуры | ) КАК НаСкладе |ПО | СпрНоменклатура.Номенклатура = НаСкладе.Номенклатура | И СпрНоменклатура.ХарактеристикаНоменклатуры = НаСкладе.ХарактеристикаНоменклатуры |ГДЕ | ЕСТЬNULL(НаСкладе.Количество, 0) > 0 |"; КонецЕсли;
// Соответствие имен полей в запросе и их представлений в отчете. СтруктураПредставлениеПолей = Новый Структура( "Номенклатура, ХарактеристикаНоменклатуры, Склад", "Номенклатура", "Характеристика номенклатуры", "Склад");
ПостроительОтчета.Текст = ТекстЗапроса;
ПостроительОтчета.ЗаполнитьНастройки();
// Создадим список доступных отборов. СоответствиеДоступныхОтборов = Новый Соответствие; СоответствиеДоступныхОтборов.Вставить("Номенклатура", 0); СоответствиеДоступныхОтборов.Вставить("ХарактеристикаНоменклатуры", 0); СоответствиеДоступныхОтборов.Вставить("Склад", 0);
Для Каждого ДоступноеПоле Из ПостроительОтчета.ДоступныеПоля Цикл Если СоответствиеДоступныхОтборов[ДоступноеПоле.Имя] =Неопределено Тогда ДоступноеПоле.Отбор = Ложь; Иначе ДоступноеПоле.Отбор = Истина; КонецЕсли; КонецЦикла;
// Создадим массив отборов. МассивОтбора = Новый Массив; МассивОтбора.Добавить("Номенклатура"); МассивОтбора.Добавить("ХарактеристикаНоменклатуры");
Если ТолькоИмеющиесяВНаличии Тогда МассивОтбора.Добавить("Склад"); КонецЕсли;
Для Каждого ЭлементОтбора Из МассивОтбора Цикл Если ПостроительОтчета.Отбор.Найти(ЭлементОтбора) = Неопределено Тогда ПостроительОтчета.Отбор.Добавить(ЭлементОтбора); КонецЕсли; КонецЦикла;
Для Каждого СтрокаЦен Из СтрокиЦен Цикл Если СтрокаЦен.ХарактеристикаНоменклатуры = ПустаяХарактеристика Тогда СтрокаБезХарактеристики = СтрокаЦен; ИначеЕсли СтрокаЦен.ХарактеристикаНоменклатуры = ХарактеристикаНоменклатуры Тогда СтрокаСХарактеристикой = СтрокаЦен; КонецЕсли; КонецЦикла;
Если СтрокаСХарактеристикой <> Неопределено Тогда НайденнаяСтрока = СтрокаСХарактеристикой; ИначеЕсли СтрокаБезХарактеристики <> Неопределено Тогда НайденнаяСтрока = СтрокаБезХарактеристики; Иначе НайденнаяСтрока = Неопределено; КонецЕсли;
Группа: Пользователи
Сообщений: 6
Спасибо сказали: 0 раз
Рейтинг: 0
sava1 @ Вчера, 12:54
, что такое СКД? Сейчас пришёл к такому запросу - он считает быстрее. Слабая у меня машина.
ВЫБРАТЬ ПЕРВЫЕ 2 ЦеныНоменклатуры.Номенклатура.Код КАК Код, ЦеныНоменклатуры.Номенклатура.Наименование КАК Наименование, ЦеныНоменклатуры.Цена КАК ПредЦена, ЦеныНоменклатуры.ТипЦен.Наименование, ЦеныНоменклатуры.Период КАК Период ПОМЕСТИТЬ втПредЦена ИЗ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры ГДЕ ЦеныНоменклатуры.ТипЦен.Наименование = "Розничная" И ЦеныНоменклатуры.Номенклатура.Код = "0000001074895" УПОРЯДОЧИТЬ ПО Период УБЫВ ;
ВЫБРАТЬ ПЕРВЫЕ 1 Период, втПредЦена.ПредЦена ИЗ втПредЦена УПОРЯДОЧИТЬ ПО Период ВОЗР
Группа: Пользователи
Сообщений: 6
Спасибо сказали: 0 раз
Рейтинг: 0
sava1 @ Сегодня, 12:30
, Не совсем. Я подставлял в ваши запросы такие же условия при выборке по определённому коду и виду цены. P.S. О проблемах я ни слова не сказал.
Группа: Пользователи
Сообщений: 6
Спасибо сказали: 0 раз
Рейтинг: 0
Цитата(sava1 @ 13.01.17, 13:10)
а это что ?
это незнание смыла аббревиатуры, собственно отсюда и вопрос. Оказывается это система компоновки данных. Не вижу в этом проблемы, так как она мне никак не помогла в написании запроса, точнее, я к ней не обращался.
Цитата(sava1 @ 13.01.17, 13:10)
А как Вы собираетесь получать цены на всю выборку номенклатуры? Запросом в цикле по каждому товару?
мне не нужно делать выборку на всю номенклатуру, а лишь на ту, которая есть в документе, из которого вызывается печать ценников (это максимум 50 позиций). Буду делать на основе процедуры ПерезаполнитьЦены(), пока только это видится подходящим. Спасибо
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!