Привет!
Можно в 7.7 напрямую работать с таблицей в SQL Server'е?
Функция ПолучитьИД_Вариант1(Объект)
Перем Стр;
Стр=ЗначениеВСтрокуВнутр(Объект);
СЗ=СоздатьОбъект("СписокЗначений");
СЗ.ИзСтрокиСРазделителями(Сред(Стр,2,СтрДлина(Стр)-2));
Возврат СЗ.ПолучитьЗначение(СЗ.РазмерСписка());
КонецФункции
//_____________________________________________________________________________
Функция ПолучитьИД_Вариант2(Объект)
Перем Стр;
СЗ=СоздатьОбъект("СписокЗначений");
СЗ.ДобавитьЗначение("",Объект);
СЗ.ПолучитьЗначение(1,Стр);
Возврат Стр;
КонецФункции
//_____________________________________________________________________________
Процедура Сформировать()
// Пусть "Объект" - это реквизит формы типа "Справочник"
Сообщить("Объект: "+Объект.ТекущийЭлемент());
Сообщить("Вариант 1: "+ПолучитьИД_Вариант1(Объект.ТекущийЭлемент()));
Сообщить("Вариант 2: "+ПолучитьИД_Вариант2(Объект.ТекущийЭлемент()));
КонецПроцедуры
//_____________________________________________________________________________
Процедура ОбновлениеТоваров()
ИмяСервера = "LSW11";
ИмяБазыДанных = "cashbase";
Попытка
Соединение =СоздатьОбъект("ADODB.Connection");
Соединение.Provider = "SQLOLEDB";
Соединение.ConnectionString = "Server=" + ИмяСервера + ";Database=" + ИмяБазыДанных + ";Trusted_Connection=yes";
Соединение.ConnectionTimeout = 20;
Соединение.Open();
Сообщить("Установлено соединение с базой данных " + ИмяБазыДанных + " на сервере " + ИмяСервера);
//Возврат 1;
Исключение
Предупреждение("Нихуя не получилось. Вероятно спиздили компьютер с данными. " + ИмяБазыДанных + " на сервере " + ИмяСервера,10);
//Возврат 0;
КонецПопытки;
RS = СоздатьОбъект("ADODB.Recordset");
RS.CursorType = 0; //adOpenForwardOnly
RS.LockType = 3; //adLockReadOnly
RS.CursorLocation = 2; //adUseServer
//==== первая часть мардлезонского балета....
Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса =
"
|Товары = Справочник.Товары.ТекущийЭлемент;
|Код = Справочник.Товары.Код;
|Наименование = Справочник.Товары.Наименование;
|Группировка Код без групп;
|";
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
Возврат;
КонецЕсли;
Сообщить("1 часть марлезонского балета...");
Сообщить(ТекущееВремя());
шк = СоздатьОбъект("Справочник.ШтрихКод");
Пока Запрос.Группировка(1) = 1 Цикл
Если Запрос.Товары.Актуален = Перечисление.Булево.Да Тогда
тТов = Запрос.Товары;
Если тТов.Мест <> 0 Тогда
Если спМест.НайтиЗначение(тТов.Мест) = 0 Тогда
спМест.ДобавитьЗначение(тТов.Мест);
КонецЕсли;
тзСкидка.НоваяСтрока();
тзСкидка.Товар = тТов;
тзСкидка.Мест = тТов.Мест;
тзСкидка.ЦенаСк = тТов.ПродажнаяЦена1.Получить(РабочаяДата());
КонецЕсли;
тЦена = Запрос.Товары.ПродажнаяЦена3.Получить(РабочаяДата());
шк.ИспользоватьВладельца(тТов);
Если шк.ВыбратьЭлементы() = 1 Тогда
Пока шк.ПолучитьЭлемент() = 1 Цикл
Если шк.ПометкаУдаления() = 0 Тогда
тШК = Число(шк.ШтрихКод);
Если (тШК <> 0) И (тЦена <> 0) Тогда
//ItemList
//Сообщить(Строка(Запрос.Товары.Код) + " _ " + Строка(Число(шк.ШтрихКод)) + " _ " + Строка(Запрос.Товары.Наименование) + " _ " + Строка(Число(тЦена)));
стрСоед = "SELECT Code,Name,Cen,Tax FROM ItemList WHERE Code="+тШК;
Rs.Open(стрСоед,Соединение);
Если RS.EOF=-1 Тогда
RS.AddNew();
RS.Fields("Code").Value = Число(шк.ШтрихКод);
КонецЕсли;
RS.Fields("Name").Value = Лев(СокрЛП(Запрос.Товары.Наименование),16);
RS.Fields("Cen").Value = Число(Запрос.Товары.ПродажнаяЦена3.Получить(РабочаяДата()));
RS.Fields("Tax").Value = Число(?(Запрос.Товары.СтавкаНДС = Перечисление.СтавкаНДС.Двадцать,1,0));
RS.Update();
rs.Close();
// CodeAliases
str2 = "SELECT Code,Alias,Mult FROM CodeAliases WHERE Alias="+Число(Запрос.Товары.Код);
RS.Open(str2,Соединение);
Если RS.EOF=-1 Тогда
RS.AddNew();
RS.Fields("Code").Value = Число(шк.ШтрихКод);
RS.Fields("Alias").Value = Число(Запрос.Товары.Код);
RS.Fields("Mult").Value = 1;
RS.Update();
КонецЕсли;
rs.Close();
КонецЕсли;
КонецЕсли;
КонецЦикла;
Иначе
//Сообщить(Строка(Запрос.Товары.Код) + " _ " + Строка(Запрос.Товары.Наименование) + " _ " + Строка(Число(тЦена)));
стрСоед = "SELECT Code,Name,Cen,Tax FROM ItemList WHERE Code="+Число(Запрос.Товары.Код);
Rs.Open(стрСоед,Соединение);
Если RS.EOF=-1 Тогда
RS.AddNew();
RS.Fields("Code").Value = Число(Запрос.Товары.Код);
КонецЕсли;
RS.Fields("Name").Value = Лев(СокрЛП(Запрос.Товары.Наименование),16);
RS.Fields("Cen").Value = Число(Запрос.Товары.ПродажнаяЦена3.Получить(РабочаяДата()));
RS.Fields("Tax").Value = Число(?(Запрос.Товары.СтавкаНДС = Перечисление.СтавкаНДС.Двадцать,1,0));
RS.Update();
rs.Close();
КонецЕсли;
КонецЕсли;
КонецЦикла;
Сообщить("окончание 1 части марлезонского балета...");
Сообщить(ТекущееВремя());
// конец 1 части марлезонског балета
КонецПроцедуры
Процедура ВыгрузкаТоваров()
ИмяСервера = "LSW11";
ИмяБазыДанных = "cashbase";
Попытка
Соединение =СоздатьОбъект("ADODB.Connection");
Соединение.Provider = "SQLOLEDB";
Соединение.ConnectionString = "Server=" + ИмяСервера + ";Database=" + ИмяБазыДанных + ";Trusted_Connection=yes";
Соединение.ConnectionTimeout = 20;
Соединение.Open();
Сообщить("Установлено соединение с базой данных " + ИмяБазыДанных + " на сервере " + ИмяСервера);
//Возврат 1;
Исключение
Предупреждение("Нихуя не получилось. Вероятно спиздили компьютер с данными. " + ИмяБазыДанных + " на сервере " + ИмяСервера,10);
//Возврат 0;
КонецПопытки;
RS = СоздатьОбъект("ADODB.Recordset");
RS.CursorType = 0; //adOpenForwardOnly
RS.LockType = 3; //adLockReadOnly
RS.CursorLocation = 2; //adUseServer
Сообщить("2 часть марлезонского балета...");
Сообщить(ТекущееВремя());
Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса =
"//{{ЗАПРОС(Сформировать)
|Период с (ТекущаяДата()) по (ТекущаяДата());
|Склад = Регистр.ОстаткиТоваров.Склад;
|Товары = Регистр.ОстаткиТоваров.Товары;
|Остаток = Регистр.ОстаткиТоваров.Остаток;
|Функция ОстатокКонОст = КонОст(Остаток);
|Группировка Товары без групп;
|Условие(Склад = ВыбСклад);
|Условие(Остаток > 0);
|";
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
Возврат;
КонецЕсли;
шк = СоздатьОбъект("Справочник.ШтрихКод");
Пока Запрос.Группировка(1) = 1 Цикл
Если Запрос.Товары.Актуален = Да Тогда
тТов = Запрос.Товары;
тЦена = Запрос.Товары.ПродажнаяЦена3.Получить(ТекущаяДата());
шк.ИспользоватьВладельца(тТов);
Если шк.ВыбратьЭлементы() = 1 Тогда
Пока шк.ПолучитьЭлемент() = 1 Цикл
Если шк.ПометкаУдаления() = 0 Тогда
тШК = Число(шк.ШтрихКод);
Если (тШК <> 0) И (тЦена <> 0) Тогда
//DepItems
стрДоб = "INSERT INTO DeptItems (NDep,Code,Name,Cen,Dep,Grp,Tax,Kol,FreeCen,FracKol,WatchKol,Online) VALUES (";
стрДоб = стрДоб + Число(ВыбСклад.КодСклада)+","+
Строка(Число(шк.ШтрихКод))+","+
"'"+Лев(СокрЛП(Запрос.Товары.Наименование),16) + "'"+","+
Число(Запрос.Товары.ПродажнаяЦена3.Получить(РабочаяДата()))+","+
"'1',"+
"'1',"+
"'"+Строка(Число(?(Запрос.Товары.СтавкаНДС = Перечисление.СтавкаНДС.Двадцать,1,0)))+"'"+","+
Число(Запрос.ОстатокКонОст)+","+
"'0',"+
"'"+?(Запрос.Товары.ФлагШтучногоТовара = 1,0,255)+"'"+","+
"'255','1')";
Сообщить(стрДоб);
Rs.Open(стрДоб,Соединение);
Сообщить(Строка(Запрос.Товары.Код) + " _ " + Строка(Число(шк.ШтрихКод)) + " _ " + Строка(Запрос.Товары.Наименование) + " _ " + Строка(Число(тЦена)));
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЦикла;
Сообщить("окончание 2 части марлезонского балета...");
Сообщить(ТекущееВремя());
КонецПроцедуры