0
Amiralnar
14.09.11
✎
09:44
|
Имеется код из типовых правил обмена ТиС-УТ.
В правиле выгрузки данных для конвертации цен есть код:
Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса =
"//{{ЗАПРОС(ОтборЦен)
|Период с ДатаНач по ДатаНач;
|Номенклатура = Справочник.Цены.Владелец;
|ТипЦен = Справочник.Цены.ТипЦен;
|Рассчитывается = Справочник.Цены.ТипЦен.Рассчитывается;
|БазовыйТипЦен = Справочник.Цены.ТипЦен.БазовыйТипЦен;
|Цена = Справочник.Цены.Цена;
|Единица = Справочник.Цены.Единица;
|Валюта = Справочник.Цены.Валюта;
|Процент = Справочник.Цены.Процент;
|Функция ЦенаСумма = Сумма(Цена);
|Группировка ТипЦен;
|Группировка Номенклатура без групп;
|Условие((Номенклатура.ЭтоГруппа() = 0) И (Цена <> 0));
|";
Если Запрос.Выполнить(ТекстЗапроса) <> 0 Тогда
Индекс = 1;
Номер = 0;
Пока Запрос.Группировка(1) = 1 Цикл
ТипыЦен.УдалитьСтроки();
ТипыЦен.НоваяСтрока();
ТипыЦен.ТипЦен = Запрос.ТипЦен;
Товары.УдалитьСтроки();
Номер = Номер + 1;
Пока Запрос.Группировка(2) = 1 Цикл
Товары.НоваяСтрока();
Товары.Номенклатура = Запрос.Номенклатура;
Товары.ТипЦен = Запрос.ТипЦен;
Товары.Цена = Запрос.Цена;
Товары.ЕдиницаИзмерения = Запрос.Единица;
Товары.ПроцентСкидкиНаценки = Запрос.Процент;
Товары.ИндексСтрокиТаблицыЦен = Индекс;
Товары.Валюта = Запрос.Валюта;
Если (Запрос.Рассчитывается = 1) Или ((Запрос.Рассчитывается = 0) И (ПустоеЗначение (Запрос.БазовыйТипЦен) = 0)) Тогда
Товары.СпособРасчетаЦены = "ПоПроцентнойНаценкеНаБазовыйТип";
КонецЕсли;
КонецЦикла;
ИсходящиеДанные = СоздатьОбъект("СписокЗначений");
ИсходящиеДанные.Установить("Номер", Номер);
ИсходящиеДанные.Установить("Дата", ДатаНач);
ИсходящиеДанные.Установить("ТипыЦен",ТипыЦен);
ИсходящиеДанные.Установить("Комментарий", Параметры.СтрокаКомментария);
ИсходящиеДанные.Установить("Товары", Товары);
ВыгрузитьПоПравилу(,, ИсходящиеДанные,, "ЦеныНоменклатуры");
Индекс = Индекс + 1;
КонецЦикла;
Из него сделал свой обработчик следующего вида:
Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса =
"//{{ЗАПРОС(ОтборЦен)
|Период с ДатаНач по ДатаНач;
|Номенклатура = Справочник.Цены.Владелец;
|ТипЦен = Справочник.Цены.ТипЦен;
|//Рассчитывается = Справочник.Цены.ТипЦен.Рассчитывается;
|//БазовыйТипЦен = Справочник.Цены.ТипЦен.БазовыйТипЦен;
|Цена = Справочник.Цены.Цена;
|//Единица = Справочник.Цены.Единица;
|Валюта = Справочник.Цены.Валюта;
|//Процент = Справочник.Цены.Процент;
|Функция ЦенаСумма = Сумма(Цена);
|Группировка ТипЦен;
|Группировка Номенклатура без групп;
|Условие((Номенклатура.ЭтоГруппа() = 0) И (Цена <> 0) И (Номенклатура.Актуальный = 1));
|";
Если Запрос.Выполнить(ТекстЗапроса) <> 0 Тогда
Индекс = 1;
Номер = 0;
Пока Запрос.Группировка(1) = 1 Цикл
ТипыЦен.УдалитьСтроки();
ТипыЦен.НоваяСтрока();
ТипыЦен.ТипЦен = Запрос.ТипЦен;
Товары.УдалитьСтроки();
Номер = Номер + 1;
Пока Запрос.Группировка(2) = 1 Цикл
Товары.НоваяСтрока();
Товары.Номенклатура = Запрос.Номенклатура;
Товары.ТипЦен = Запрос.ТипЦен;
Товары.Цена = Запрос.Цена;
Товары.ЕдиницаИзмерения = Товары.Номенклатура.ОсновнаяЕдиница;
//Товары.ПроцентСкидкиНаценки = Запрос.Процент;
Товары.ИндексСтрокиТаблицыЦен = Индекс;
Товары.Валюта = Запрос.Валюта;
//Если (Запрос.Рассчитывается = 1) Или ((Запрос.Рассчитывается = 0) И (ПустоеЗначение (Запрос.БазовыйТипЦен) = 0)) Тогда
// Товары.СпособРасчетаЦены = "ПоПроцентнойНаценкеНаБазовыйТип";
//КонецЕсли;
КонецЦикла;
ИсходящиеДанные = СоздатьОбъект("СписокЗначений");
ИсходящиеДанные.Установить("Номер", Номер);
ИсходящиеДанные.Установить("Дата", ДатаНач);
ИсходящиеДанные.Установить("ТипыЦен",ТипыЦен);
ИсходящиеДанные.Установить("Комментарий", "");
ИсходящиеДанные.Установить("Товары", Товары);
ВыгрузитьПоПравилу(,, ИсходящиеДанные,, "УстановкаЦенНоменклатуры");
Индекс = Индекс + 1;
КонецЦикла;
И вот незадача: валюта не определена. В отладчике переменная Запрос не имеет значения в свойстве Валюта.
ЧЯДНТ?
|
|
2
Amiralnar
14.09.11
✎
10:17
|
Нет. Оказалось, в списке справочника есть чудная формулировка:
// Валюта()
//
// Параметры:
// Нет.
//
// Возвращаемое значение:
// Строка - возвращается наименование валюты цен в договоре или "руб.",
// если валюта не выбрана.
//
// Вызывается из формул элементов диалога:
// Графа списка "Валюта".
//
Функция Валюта()
Если ТекущийЭлемент().Выбран() = 1 Тогда
Если ПустоеЗначение(Валюта) = 1 Тогда
Стр = "руб.";
Иначе
Стр = Валюта.Наименование;
КонецЕсли;
Возврат Стр;
КонецЕсли;
Возврат "";
КонецФункции // Валюта()
|
|