Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: 1с8+Зовнішнє джерело даних SQL
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.2 > Программирование обычных форм 1С 8.2 и не интерфейсной логики
BEREST
привіт.
допоможіть вирішити проблему
є 1с8 +інтернет магазин з товарами, в одному із полів таблиці на SQL заповнене значення коду товару 1С.

пишу запит на вибірку даних в 1с де параметром відбору є список значень з сайту
але мені видає помилку про несумісність полів
{Форма.Форма.Форма(15)}: Помилка при виклику методу контексту (Выполнить)
Результат = Запрос.Выполнить();
через:
{(6, 19)}: Неправильні параметри в операції порівняння. Не можна порівнювати поля
необмеженої довжини і поля несумісних типів.
Номенклатура.Код <<?>>= &СпКодов

я вже пробував в SQL поміняти довжину поля на 9 та тип на VARCHAR
але нічого не допомогло.


допоможіть розібратися

дякую
Vofka
Номенклатура.Код В (&СпКодов)
BEREST
Цитата(Vofka @ 22.10.15, 8:50) необходимо зарегистрироваться для просмотра ссылки
Номенклатура.Код В (&СпКодов)


нова помилка

{Форма.Форма.Форма(15)}: Помилка при виклику методу контексту (Выполнить)
Результат = Запрос.Выполнить();
через:
{(6, 19)}: Неправильні параметри
Номенклатура.Код <<?>>В (&СпКодов)
Vofka
Что такое СпКодов?
BEREST
Цитата(Vofka @ 22.10.15, 9:47) необходимо зарегистрироваться для просмотра ссылки
Что такое СпКодов?


зараз викладу весь код

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


Connection = Новый COMОбъект("ADODB.Connection");
  
  //Необходимые параметры для подключения
  АдресСервера   = "*******";   //ip адрес сервера MySQL
  НомерПорта     = "****";     //порт подключения, обычно 3306
  ИмяБД       = "*****";     //имя подключаемой базы данных
  Пользователь   = "*****";     //имя пользователя БД с соответствующими правами
  Пароль       = "******";       //пароль пользователя БД
  
  //Подключаемся
  Попытка      
    Connection.Open("Driver={MySQL ODBC 5.1 Driver};Server=" + СокрЛП(АдресСервера) + ";Port=" + НомерПорта + ";Database=" + СокрЛП(ИмяБД) + ";User=" + СокрЛП(Пользователь) + ";Password=" + Пароль + ";Option=3");
  Исключение
    Сообщить("Ошибка подключения - " + ОписаниеОшибки());  
    //Возврат;
  КонецПопытки;
  
  
  //Пропишем текст запроса к БД сайта
  //Выборка товара
  //ТекстЗапросаMYSQL = "SELECT upc, price FROM product";
  ТекстЗапросаMYSQL = "SELECT upc, price FROM product";
  RecordSet = Новый COMОбъект("ADODB.RecordSet");
  RecordSet.ActiveConnection = Connection;
  
  RecordSet.Open(ТекстЗапросаMYSQL);
  
  

СпКодов = Новый СписокЗначений;

Пока RecordSet.EOF() = 0 Цикл
    КодТовараВеб = RecordSet.Fields("upc").Value;  
    ЦенаВеб = RecordSet.Fields("price").Value;
//Цикл от сайта
КодТовараВеб = RecordSet.Fields("upc").Value;  
    ЦенаВеб = RecordSet.Fields("price").Value;

СпКодов.Добавить(КодТовараВеб);
сообщить(КодтовараВеб);
RecordSet.MoveNext();
КонецЦикла;


дані з сайту витягує а далі коли запускаю процедуру помилка
{Форма.Форма.Форма(15)}: Помилка при виклику методу контексту (Выполнить)
Результат = Запрос.Выполнить();
через:
{(6, 19)}: Неправильні параметри
Номенклатура.Код <<?>>В (&СПКодов)
Vofka
Внесите код, который у вас вне процедуры - внутрь процедуры.
И выделяйте код!
BEREST
Цитата(Vofka @ 22.10.15, 10:13) необходимо зарегистрироваться для просмотра ссылки
Внесите код, который у вас вне процедуры - внутрь процедуры.
И выделяйте код!


що означає Виділяти код?

переніс код в початок процедури, помилки немає, але виходить що ціну витягує всю з 0
виходить що
Цена = Ценообразование.ПолучитьЦенуНоменклатуры(Выборка.ссылка, Справочники.ТипыЦенНоменклатуры.НайтиПоКоду("000000002"),,,);
неправильна
Petre
Запустіть налагодження та подивіться, що є "СПКодов" (тип та значення).
BEREST
Цитата(Petre @ 22.10.15, 12:19) необходимо зарегистрироваться для просмотра ссылки
Запустіть налагодження та подивіться, що є "СПКодов" (тип та значення).


підкажіть як це зробити?
candrey
Вроде и код не простой. А про элементарные вещи спрашиваете.
))
Ставьте точку останова в вашем коде Кнопка "F9". И то что выше точки останова смотрите в том числе и "СПКодов" .
Т.е так можите все "Строки кода" посмотреть его тип и значение.

Или через Консоль отчетов(Обработка такая есть) пробуйте для просмотра что получаем на выходе.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.