Буду очень признателен если кто направит на путь истинный. Пишу обработку по переносу номенклатуры с штрихкодами и ценами, номенклатуры выбрал, штрихкода тоже, а вот с ценой не могу справиться.

```1c
    ункция ПолучитьЦену(Номенклатура)

    Цена = 0;
    СпрOLE = База7.CreateObject("Справочник.Цены");
    СпрНом = База7.CreateObject("Справочник.Номенклатура");
    Если СпрНом.НайтиПоКоду(Номенклатура.Код,0) = 1 Тогда
    ЭлНом = СпрНом.ТекущийЭлемент();
    КонецЕсли;;
    СпрOLE.ВыбратьЭлементы();
    СпрOLE.ИспользоватьВладельца(ЭлНом);
    //СпрOLE.ИспользоватьДату(ТекущаяДата());
    Цена = СпрOLE.Цена.Получить(ТекущаяДата());
    //Пока СпрOLE.ПолучитьЭлемент()=1 Цикл
    // Если СпрOLE.Наименование = "Розничные" Тогда
    // Цена = СпрOLE.Цена;
    // КонецЕсли;
    //КонецЦикла;
    Возврат(Цена);
    КонецФункции

    Процедура КнопкаВыполнитьНажатие(Кнопка)

    ПутьБазы = "e:\1C\Base\ZaRulem\zarulem\";
    Пользователь = "admin";
    Пароль = "admin";
    МонопольныйРежимOLE = ";
    ЗапускБезЗаставки = 1;
    База7 = Новый COMОбъект("V77.Application");

    Попытка
    РезультатПодключения = База7.Initialize ( База7.RMTrade , "/d" +
    ПутьБазы + " /n" + Пользователь+
    " /p" + Пароль + МонопольныйРежимOLE,
    ?(ЗапускБезЗаставки = 1,"NO_SPLASH_SHOW","));
    Исключение
    Предупреждение(ОписаниеОшибки());
    РезультатПодключения=Ложь;
    Возврат;
    КонецПопытки;

    //Сообщить(РезультатПодключения);
    Запрос = База7.CreateObject("Запрос");
    ТекстЗапроса=

    "//{{ЗАПРОС(Сформировать)
    |Обрабатывать НеПомеченныеНаУдаление;
    |Номенклатура = Справочник.Номенклатура.ТекущийЭлемент;
    //|Код = Справочник.Номенклатура.Код;
    //|Наименование = Справочник.Номенклатура.Наименование;
    //|Штрихкод = Справочник.Номенклатура.БазоваяЕдиница.Штрихкод;
    //|Родитель = Справочник.Номенклатура.Родитель.Наименование;
    //|РодительКод = Справочник.Номенклатура.Родитель.Код;
    |Группировка Номенклатура;
    |";//}}ЗАПРОС

    Если Запрос.Выполнить(ТекстЗапроса)=0 Тогда
    ОбщегоНазначения.СообщитьОбОшибке("Ошибка выпонения запроса номенклатуры в базе-источнике");
    Возврат;
    КонецЕсли;

    Таблица = Новый ТаблицаЗначений;
    Таблица.Колонки.Добавить("Код",,,15);
    Таблица.Колонки.Добавить("Наименование",,,50);
    Таблица.Колонки.Добавить("Штрихкод",,,15);
    Таблица.Колонки.Добавить("Родитель",,,50);
    Таблица.Колонки.Добавить("РодительКод",,,15);
    Таблица.Колонки.Добавить("ЭтоГруппа",,,1);
    Таблица.Колонки.Добавить("Цена",,,);

    Пока Запрос.Группировка() Цикл

    Строка = Таблица.Добавить();
    Строка.ЭтоГруппа = Запрос.Номенклатура.ЭтоГруппа();
    Строка.Код = Запрос.Номенклатура.Код;
    Строка.Наименование = Запрос.Номенклатура.Наименование;
    Попытка
    Если Число(Запрос.Номенклатура.БазоваяЕдиница.Штрихкод) <> 0 Тогда
    Строка.Штрихкод = Запрос.Номенклатура.БазоваяЕдиница.Штрихкод;
    КонецЕсли;
    Исключение
    Строка.Штрихкод = ";
    КонецПопытки;
    Строка.Родитель = Запрос.Номенклатура.Родитель.Наименование;
    Строка.РодительКод = Запрос.Номенклатура.Родитель.Код;
    Если Строка.ЭтоГруппа = 0 Тогда
    Строка.Цена = ПолучитьЦену(Запрос.Номенклатура);
    КонецЕсли;
    КонецЦикла;
    База7 = ";

    КонецПроцедуры
```
---
Может это поможет. Писал давно для "Из ТИС 7.7 ред. 9.2 в УТ 10.3"

```1c
    Функция СформироватьЦены_1()Экспорт //Срез розничных и закупочных цен на дату
    НачатьТранзакцию();
    ТЗ = Новый ТаблицаЗначений;
    ТаблицаОстатков = Новый ТаблицаЗначений;

    ТЗ.Колонки.Добавить("Номенклатура");
    ТЗ.Колонки.Добавить("Количество");
    ТЗ.Колонки.Добавить("ТипЦены");
    ТЗ.Колонки.Добавить("Цена");
    ТЗ.Колонки.Добавить("День");

    ТекстЗапроса = " Период с '"+КонецДня(ДатаНач)+ "' по '"+КонецДня(ДатаКон)+"';
    |Номенклатура = Регистр.ОстаткиТМЦ.Номенклатура;
    //|Склад = Регистр.ОстаткиТМЦ.Склад;
    |Количество = Регистр.ОстаткиТМЦ.Количество;
    |Функция КоличествоКонОст = КонОст(Количество);
    |Группировка Номенклатура упорядочить по Номенклатура.Наименование Без Групп;
    //|Группировка Склад упорядочить по Склад.Наименование;
    |Без Итогов;
    |";

    Запрос = БазаОле.CreateObject("Запрос");
    Если Запрос.Выполнить(ТекстЗапроса)=0 Тогда
    #Если Клиент Тогда
    Предупреждение("Запрос безутешен!");
    #КонецЕсли
    Возврат Неопределено;
    КонецЕсли;
    #Если Клиент Тогда
    Сообщить(" Запрос выполнен. Обработка таблицы: " + ТекущаяДата());
    #КонецЕсли
    Пока Запрос.Группировка()=1 Цикл
    #Если Клиент Тогда
    ОбработкаПрерыванияПользователя();
    #КонецЕсли
    ТекСпр = Запрос.Номенклатура.ТекущийЭлемент();
    Номенклатура = ПолучитьНоменклатуру(ТекСпр);

    //НоваяСтрока = ТЗ.Добавить() ;
    //НоваяСтрока.Номенклатура = Номенклатура;
    //НоваяСтрока.Количество=Запрос.КоличествоКонОст;

    СпрНом = БазаОле.CreateObject("Справочник.Номенклатура");
    СпрНом.НайтиПоКоду(ТекСпр.Код);

    //СпрЦены =""+СтрЗаменить(БазаОле.ЗначениеВстроку(БазаОле.Константа.РозничныйТипЦен),"", """)+"";
    ТипЦены = БазаОле.EvalExpr("глЗначениеПоУмолчанию("ОсновнойТипЦенПокупки")");
    СпрЦены = ""+СтрЗаменить(БазаОле.ЗначениеВстроку(ТипЦены.ТекущийЭлемент()),"", """)+"";

    СпрНоменклатура = ""+СтрЗаменить(БазаОле.ЗначениеВстроку(СпрНом.ТекущийЭлемент()),"", """)+"";
    ЦенаЦены=БазаОле.EvalExpr("глПолучитьЦену(ЗначениеИзСтроки("+СпрНоменклатура+"),ЗначениеИзСтроки("+СпрЦены+"),'"+Лев(Формат(ДатаКон,"ДФДДММГГГГ"),10)+"')");

    Если ЦенаЦены > 0 Тогда
    НоваяСтрока = ТЗ.Добавить() ;
    НоваяСтрока.Номенклатура = Номенклатура;
    НоваяСтрока.Цена = ЦенаЦены;
    НоваяСтрока.ТипЦены=КонвертироватьОбъектОЛЕРеализация(ТипЦены);
    НоваяСтрока.День = ДатаНач;
    НоваяСтрока.Количество=1;
    КонецЕсли;

    ТипЦены = БазаОле.EvalExpr("глЗначениеПоУмолчанию("ОсновнойТипЦенПродажи")");
    СпрЦены = ""+СтрЗаменить(БазаОле.ЗначениеВстроку(ТипЦены.ТекущийЭлемент()),"", """)+"";

    СпрНоменклатура = ""+СтрЗаменить(БазаОле.ЗначениеВстроку(СпрНом.ТекущийЭлемент()),"", """)+"";
    ЦенаЦены1=БазаОле.EvalExpr("глПолучитьЦену(ЗначениеИзСтроки("+СпрНоменклатура+"),ЗначениеИзСтроки("+СпрЦены+"),'"+Лев(Формат(ДатаКон,"ДФДДММГГГГ"),10)+"')");

    Если ЦенаЦены1 > 0 Тогда
    НоваяСтрока = ТЗ.Добавить() ;
    НоваяСтрока.Номенклатура = Номенклатура;
    НоваяСтрока.Цена = ЦенаЦены1;
    НоваяСтрока.ТипЦены=КонвертироватьОбъектОЛЕРеализация(ТипЦены);
    НоваяСтрока.День = ДатаНач;
    НоваяСтрока.Количество=1;
    КонецЕсли;

    КонецЦикла;
    #Если Клиент Тогда
    Состояние("Сортировка значений");
    #КонецЕсли
    ТЗ.Сортировать("Номенклатура");
    //ТЗ.Очистить();
    ЗафиксироватьТранзакцию();
    ОтключитьсяОтБазы();
    #Если Клиент Тогда
    Сообщить(" Обработка таблицы завершена: " + ТекущаяДата());
    #КонецЕсли
    Возврат ТЗ;

    КонецФункции
```
---
```1c
    Цена = 0;
    СпрOLE = База7.CreateObject("Справочник.Цены");
    СпрOLE.ИспользоватьВладельца(Номенклатура);
    СпрOLE.ВыбратьЭлементы();
    Если СпрOLE.ПолучитьЭлемент()=1 Тогда
    Цена = СпрOLE.Цена.Получить(ТекущаяДата());
    КонецЕсли;
    Возврат(Цена);
```
---
http://prntscr.com/fbm5ux
---
не взлетит, потому что

```1c
    Если СпрНом.НайтиПоКоду(Номенклатура.Код,0) = 1 Тогда
    ЭлНом = СпрНом.ТекущийЭлемент();
    КонецЕсли;;
    СпрOLE.ВыбратьЭлементы();
    СпрOLE.ИспользоватьВладельца(ЭлНом);
```

ЭлНом в базе-приемнике имеет тип OleObject, а нужен элемент справочника в той базе-источнике.
Как лучше сделать, я не знаю, я бы, наверное, делал выборку всех цен и потом искал им владельца уже в этой базе по коду или что там у них уникальное.
---
Делал подобное. Самый простой способ оказался написать класс для 1С++ в нем методы для получения таблицы значений с нужными тебе колонками и простыми типами (число, строка).
Модификации конфы это не требует, так как классы во внешних файлах.
А для загрузки примерно так

```1c
    КлассОбмена = База77.CreateObject("Обмен.Цены");
    тз = КлассОбмена.ПолучитьЦеныХХХ(ДатаВыборки, Группа,..);
```

Этот подход позволяет не тащить на сторону приемника код выборки. У меня к тому же там используются прямые запросы и другие извращения, что через OLE проблематичны.
---
Может это поможет. Писал давно для "Из ТИС 7.7 ред. 9.2 в УТ 10.3"

```1c
    Функция СформироватьЦены_1()Экспорт //Срез розничных и закупочных цен на дату
    НачатьТранзакцию();
    ТЗ = Новый ТаблицаЗначений;
    ТаблицаОстатков = Новый ТаблицаЗначений;

    ТЗ.Колонки.Добавить("Номенклатура");
    ТЗ.Колонки.Добавить("Количество");
    ТЗ.Колонки.Добавить("ТипЦены");
    ТЗ.Колонки.Добавить("Цена");
    ТЗ.Колонки.Добавить("День");

    ТекстЗапроса = " Период с '"+КонецДня(ДатаНач)+ "' по '"+КонецДня(ДатаКон)+"';
    |Номенклатура = Регистр.ОстаткиТМЦ.Номенклатура;
    //|Склад = Регистр.ОстаткиТМЦ.Склад;
    |Количество = Регистр.ОстаткиТМЦ.Количество;
    |Функция КоличествоКонОст = КонОст(Количество);
    |Группировка Номенклатура упорядочить по Номенклатура.Наименование Без Групп;
    //|Группировка Склад упорядочить по Склад.Наименование;
    |Без Итогов;
    |";

    Запрос = БазаОле.CreateObject("Запрос");
    Если Запрос.Выполнить(ТекстЗапроса)=0 Тогда
    #Если Клиент Тогда
    Предупреждение("Запрос безутешен!");
    #КонецЕсли
    Возврат Неопределено;
    КонецЕсли;
    #Если Клиент Тогда
    Сообщить(" Запрос выполнен. Обработка таблицы: " + ТекущаяДата());
    #КонецЕсли
    Пока Запрос.Группировка()=1 Цикл
    #Если Клиент Тогда
    ОбработкаПрерыванияПользователя();
    #КонецЕсли
    ТекСпр = Запрос.Номенклатура.ТекущийЭлемент();
    Номенклатура = ПолучитьНоменклатуру(ТекСпр);

    //НоваяСтрока = ТЗ.Добавить() ;
    //НоваяСтрока.Номенклатура = Номенклатура;
    //НоваяСтрока.Количество=Запрос.КоличествоКонОст;

    СпрНом = БазаОле.CreateObject("Справочник.Номенклатура");
    СпрНом.НайтиПоКоду(ТекСпр.Код);

    //СпрЦены =""+СтрЗаменить(БазаОле.ЗначениеВстроку(БазаОле.Константа.РозничныйТипЦен),"", """)+"";
    ТипЦены = БазаОле.EvalExpr("глЗначениеПоУмолчанию("ОсновнойТипЦенПокупки")");
    СпрЦены = ""+СтрЗаменить(БазаОле.ЗначениеВстроку(ТипЦены.ТекущийЭлемент()),"", """)+"";

    СпрНоменклатура = ""+СтрЗаменить(БазаОле.ЗначениеВстроку(СпрНом.ТекущийЭлемент()),"", """)+"";
    ЦенаЦены=БазаОле.EvalExpr("глПолучитьЦену(ЗначениеИзСтроки("+СпрНоменклатура+"),ЗначениеИзСтроки("+СпрЦены+"),'"+Лев(Формат(ДатаКон,"ДФДДММГГГГ"),10)+"')");

    Если ЦенаЦены > 0 Тогда
    НоваяСтрока = ТЗ.Добавить() ;
    НоваяСтрока.Номенклатура = Номенклатура;
    НоваяСтрока.Цена = ЦенаЦены;
    НоваяСтрока.ТипЦены=КонвертироватьОбъектОЛЕРеализация(ТипЦены);
    НоваяСтрока.День = ДатаНач;
    НоваяСтрока.Количество=1;
    КонецЕсли;

    ТипЦены = БазаОле.EvalExpr("глЗначениеПоУмолчанию("ОсновнойТипЦенПродажи")");
    СпрЦены = ""+СтрЗаменить(БазаОле.ЗначениеВстроку(ТипЦены.ТекущийЭлемент()),"", """)+"";

    СпрНоменклатура = ""+СтрЗаменить(БазаОле.ЗначениеВстроку(СпрНом.ТекущийЭлемент()),"", """)+"";
    ЦенаЦены1=БазаОле.EvalExpr("глПолучитьЦену(ЗначениеИзСтроки("+СпрНоменклатура+"),ЗначениеИзСтроки("+СпрЦены+"),'"+Лев(Формат(ДатаКон,"ДФДДММГГГГ"),10)+"')");

    Если ЦенаЦены1 > 0 Тогда
    НоваяСтрока = ТЗ.Добавить() ;
    НоваяСтрока.Номенклатура = Номенклатура;
    НоваяСтрока.Цена = ЦенаЦены1;
    НоваяСтрока.ТипЦены=КонвертироватьОбъектОЛЕРеализация(ТипЦены);
    НоваяСтрока.День = ДатаНач;
    НоваяСтрока.Количество=1;
    КонецЕсли;

    КонецЦикла;
    #Если Клиент Тогда
    Состояние("Сортировка значений");
    #КонецЕсли
    ТЗ.Сортировать("Номенклатура");
    //ТЗ.Очистить();
    ЗафиксироватьТранзакцию();
    ОтключитьсяОтБазы();
    #Если Клиент Тогда
    Сообщить(" Обработка таблицы завершена: " + ТекущаяДата());
    #КонецЕсли
    Возврат ТЗ;

    КонецФункции
```
---
Может это поможет. Писал давно для "Из ТИС 7.7 ред. 9.2 в УТ 10.

Получилось, спасибо огромное.

```1c
    Цена = 0;
    СпрOLE = База7.CreateObject("Справочник.Цены");
    СпрНом = База7.CreateObject("Справочник.Номенклатура");
    СпрНом.НайтиПоКоду(Номенклатура.Код,0);
    ТипЦены = База7.EvalExpr("глЗначениеПоУмолчанию("ОсновнойТипЦенПродажи")");
    СпрЦены = ""+СтрЗаменить(База7.ЗначениеВстроку(ТипЦены.ТекущийЭлемент()),"", """)+"";
    СпрНоменклатура = ""+СтрЗаменить(База7.ЗначениеВстроку(СпрНом.ТекущийЭлемент()),"", """)+"";
    ЦенаЦены=База7.EvalExpr("глПолучитьЦену(ЗначениеИзСтроки("+СпрНоменклатура+"),ЗначениеИзСтроки("+СпрЦены+"),'"+Лев(Формат(ТекущаяДата(),"ДФДДММГГГГ"),10)+"')");
```
---
Может быть как то запросом можно выдернуть цену с передачей параметра, как в 8?