Здравствуйте, в УТ сделал запрос который выполняется при изменении поля номенклатуры:
Запрос = Новый Запрос;
Запрос.Текст = "
|ВЫБРАТЬ
|Номенклатура, ТипЦен, Цена
|ИЗ
|РегистрСведений.ЦеныНоменклатуры.СрезПоследних
|ГДЕ Номенклатура = &Номенклатура";
Для Каждого СтрТовары Из Товары Цикл
ТекНоменклатура = СтрТовары.Номенклатура;
Запрос.УстановитьПараметр("Номенклатура", ТекНоменклатура);
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Если Выборка.ТипЦен = Справочники.ТипыЦенНоменклатуры.НайтиПоНаименованию("Закупка") Тогда
СтрТовары.Закупка = Выборка.Цена;
КонецЕсли;
Если Выборка.ТипЦен = Справочники.ТипыЦенНоменклатуры.НайтиПоНаименованию("Роздрібний") Тогда
СтрТовары.Продажа = Выборка.Цена;
КонецЕсли;
КонецЦикла;
КонецЦикла;
Попробуйте сделать запрос так:
|ВЫБРАТЬ
|Номенклатура, ТипЦен, Цена
|ИЗ
|РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, Номенклатура = &Номенклатура)
Вы изобрели авианосец для перевозки пары зернышек. Вообще, то что Вы сделали это жуть.
Вам нужно при изменении номенклатуры вызывать процедуру которая два раза отфильтрует регистр по номенклатуре, в каждом случае с отдельной ценой, и подставить в нужные значения строки.
Для Каждого СтрТовары Из Товары Цикл
Посмотрите общий модуль Ценообразование процедуру ПолучитьЦенуНоменклатуры.
Весь код у Вас приведется к виду:
СтрТовары.Закупка = Ценообразование.ПолучитьЦенуНоменклатуры(<параметры процедуры>);
СтрТовары.Продажа = Ценообразование.ПолучитьЦенуНоменклатуры(<параметры процедуры>);
ОтборРегистра = РегистрыСведений.ИмяРегистра.СрезПоследних(Дата,СтруктураОтбора)
СтрокаТЧ = Элементы.Товары.ТекущаяСтрока
СтрокаТЧ.Цена = ОтборРегистра.Цена
СтрокаТЧ.Цена2 = ОтборРегистра.Цена2
функция в общем модуле Ценообразование имеет вид
ПолучитьЦенуНоменклатуры(Номенклатура, ХарактеристикаНоменклатуры = Неопределено, Знач ТипЦен,
ДатаПараметр = Неопределено, ЕдиницаИзмерения = Неопределено, Валюта = Неопределено, Курс = 0, Кратность = 1, ПроцентСкидкиНаценки = 0, ДоговорКонтрагента = Неопределено, УсловиеПродаж = Неопределено)
Вот код для Вашего случая
Для Каждого СтрТовары Из Товары Цикл
ТекНоменклатура = СтрТовары.Номенклатура;
ТипЦенЗакупочная = Справочники.ТипыЦенНоменклатуры.НайтиПоНаименованию("Закупка");
ТипЦенРозничная = Справочники.ТипыЦенНоменклатуры.НайтиПоНаименованию("Роздрібний");
СтрТовары.Закупка = Ценообразование.ПолучитьЦенуНоменклатуры(ТекНоменклатура,,ТипЦенЗакупочная);
СтрТовары.Продажа = Ценообразование.ПолучитьЦенуНоменклатуры(ТекНоменклатура,,ТипЦенРозничная);
КонецЦикла;
ТипЦенЗакупочная = Справочники.ТипыЦенНоменклатуры.НайтиПоНаименованию("Закупка");
ТипЦенРозничная = Справочники.ТипыЦенНоменклатуры.НайтиПоНаименованию("Роздрібний");
Для Каждого СтрТовары Из Товары Цикл
ТекНоменклатура = СтрТовары.Номенклатура;
СтрТовары.Закупка = Ценообразование.ПолучитьЦенуНоменклатуры(ТекНоменклатура,,ТипЦенЗакупочная);
СтрТовары.Продажа = Ценообразование.ПолучитьЦенуНоменклатуры(ТекНоменклатура,,ТипЦенРозничная);
КонецЦикла;
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua