Выгрузить оптовую цену параллельно с розничной

1. Vlad-on 02.12.23 09:51 Сейчас в теме
1С:Предприятие 8.3 (8.3.18.1289)

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

Добавлено.
	Запрос2.УстановитьПараметр("ТипЦеныОпт", Справочники.ТипыЦенНоменклатуры.НайтиПоНаименованию("Опт"));


Прощу помощи в формировании запроса. Если оставляем только оптовую цену, то в принципе все работает и можно сначала выгружать розничную цену, потом повторно оптовую, но хочется выгружать одновременно две цены.
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. starjevschik 02.12.23 13:04 Сейчас в теме
Запрос конечно треш. Ключница сочиняла?
По идее основа запроса должна быть типа такого
Выбрать
РозничныеЦены.Цена,
ОптовыеЦены.Цена
Из
РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&ДатаЦены, ТипЦен = &ТипЦеныРозничная) КАК РозничныеЦены
Полное Соединение
РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&ДатаЦены, ТипЦен = &ТипЦеныОптовая) КАК ОптовыеЦены
По Номенклатура = Номенклатура И Характеристика  = Хврактеристика
Показать

Условия по товарам засунуть в параметры виртуальных таблиц ну и так далее.
3. Vlad-on 02.12.23 13:30 Сейчас в теме
(2)
Запрос конечно треш. Ключница сочиняла?
Это не я. Я б еще хуже сделал :)
По факту трудились несколько человек, при чем в разные периоды времени. Выгрузке более 10 лет, при этом постоянно дорабатывается.

(2)
По идее основа запроса должна быть типа такого
Спасибо. Завтра попробуем на тестовой версии.
4. user1880116 02.12.23 14:25 Сейчас в теме
(2)
Запрос конечно треш. Ключница сочиняла?
(2)
Полное Соединение
Да ты, похоже, сам еще та ключница-забавница...

Условие "ТипЦен В (&ТипЦеныРозничная, &ТипЦеныОптовая)", вынос типа цены в отдельную колонку, и какой-нибудь максимум для свертки.
5. Vlad-on 03.12.23 13:21 Сейчас в теме
Запилено следующее. Ошибка "Неоднозначное поле "Номенклатура.Код"

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

	
	Результат = Запрос.Выполнить().Выбрать();
	
	Пока Результат.Следующий() Цикл 
		
		Сообщить(Результат.Код + " : " + Результат.Артикул + " : " +  Результат.Наименование + ": " + Результат.Бренд + ": " + Результат.РозничныеЦены + ": " + Результат.ОптовыеЦены); 
		
	КонецЦикла;	
КонецПроцедуры;

Показать


Понятнее ничего не стало. Повторно прошу помощи, т.к. MySQL все же оказался на много проще, чем что-то пытаться сделать в 1С.
6. user1880116 03.12.23 20:44 Сейчас в теме
(5)
MySQL все же оказался на много проще, чем что-то пытаться сделать в 1С.
Ну напиши это на MySQL. Выложи, мы тебе расскажем как сделать аналогичное на 1С.
7. nomad_irk 76 04.12.23 08:30 Сейчас в теме
(5)Святая корова.....

Выбрать
    Т1.Код,
    Т1.Ссылка,
    Т1.Наименование,
    Т1.Родитель,
    Т1.Артикул,                    
    Т1.Бренд,
    Т1.ДополнительноеОписаниеНоменклатуры,
    Т1.ОсновноеИзображение,
    Т1.ОсновноеИзображение.Хранилище,
    ЕСТЬNULL(Т2.Склад, ЗНАЧЕНИЕ(Справочник.Склады.ПустаяСсылка)) КАК Склад,
    ЕСТЬNULL(Т2.КоличествоОстаток, 0) КАК КоличествоОстаток,
    ЕСТЬNULL(Т3.ВидЦены, ЗНАЧЕНИЕ(Справочник.ВидыЦен.ПустаяСсылка)) КАК ВидЦены,
    ЕСТЬNULL(Т3.Цена, 0) КАК Цена
ИЗ
    Справочник.Номенклатура КАК Т1
          ЛЕВОЕ СОЕДИЕНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(&ДатаЦены, ) КАК Т2
          ПО Т1.Ссылка = Т2.Номенклатура
          ЛЕВОЕ  СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&ДатаЦены, ТипЦен В (&ТипЦеныРозница, &ТипЦеныОпт)) КАК Т3
          ПО Т1.Ссылка = Т3.Номенклатура
Показать
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот