Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Неназначенных незавершенных заказов: 2
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Напрямую в SLQ Server , ?          
Vofka Подменю пользователя
сообщение 01.02.10, 8:09
Сообщение #1

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 14050
Из: Киев
Спасибо сказали: 4612 раз
Рейтинг: 3748.8

Привет!

Можно в 7.7 напрямую работать с таблицей в SQL Server'е?

World1С Подменю пользователя
сообщение 01.02.10, 9:17
Сообщение #2

Оратор
Иконка группы
Квалифицированному 1С программисту
Группа: Местный
Сообщений: 358
Из: г.Луганск, обл.Луганская
Спасибо сказали: 110 раз
Рейтинг: 0

Да можно через ADODB... Где-то книга была с подробными примерами на 7.7 и 8.х


Signature
В наше время люди всему знают цену, но понятия не имеют о подлинной ценности.
Оскар Уайлд

Vofka Подменю пользователя
сообщение 01.02.10, 9:23
Сообщение #3

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 14050
Из: Киев
Спасибо сказали: 4612 раз
Рейтинг: 3748.8

Хотелось бы взглянуть на книгу smile.gif

World1С Подменю пользователя
сообщение 01.02.10, 10:46
Сообщение #4

Оратор
Иконка группы
Квалифицированному 1С программисту
Группа: Местный
Сообщений: 358
Из: г.Луганск, обл.Луганская
Спасибо сказали: 110 раз
Рейтинг: 0

Не вопрос, найду сегодня в течении дня выложу здесь на форуме...

Ув. Vofka качаем книгу [необходимо зарегистрироваться для просмотра ссылки]


Signature
В наше время люди всему знают цену, но понятия не имеют о подлинной ценности.
Оскар Уайлд

Спасибо сказали: z69,

Vofka Подменю пользователя
сообщение 01.02.10, 11:36
Сообщение #5

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 14050
Из: Киев
Спасибо сказали: 4612 раз
Рейтинг: 3748.8

Жду smile.gif

World1С Подменю пользователя
сообщение 01.02.10, 14:02
Сообщение #6

Оратор
Иконка группы
Квалифицированному 1С программисту
Группа: Местный
Сообщений: 358
Из: г.Луганск, обл.Луганская
Спасибо сказали: 110 раз
Рейтинг: 0

Выложил на пост выше.


Signature
В наше время люди всему знают цену, но понятия не имеют о подлинной ценности.
Оскар Уайлд

Спасибо сказали: Vofka,

Vofka Подменю пользователя
сообщение 01.02.10, 14:55
Сообщение #7

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 14050
Из: Киев
Спасибо сказали: 4612 раз
Рейтинг: 3748.8

Премного благодарен, посмотрю! smile.gif
Спасибо!

liksoft Подменю пользователя
сообщение 01.02.10, 17:06
Сообщение #8

Говорящий
Иконка группы
Группа: Местный
Сообщений: 72
Спасибо сказали: 31 раз
Рейтинг: 0

Цитата(Vofka @ 01.02.10, 9:09) *
Привет!

Можно в 7.7 напрямую работать с таблицей в SQL Server'е?

Могу скинуть пример обработки, где я выгружаю напрямую в таблицы SQL-Server.

Vofka Подменю пользователя
сообщение 02.02.10, 9:33
Сообщение #9

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 14050
Из: Киев
Спасибо сказали: 4612 раз
Рейтинг: 3748.8

liksoft, кинь smile.gif
World1С, в книге нашел как это в 8 делается, как в 7 - хз. Смотрю дальше...

World1С Подменю пользователя
сообщение 02.02.10, 10:12
Сообщение #10

Оратор
Иконка группы
Квалифицированному 1С программисту
Группа: Местный
Сообщений: 358
Из: г.Луганск, обл.Луганская
Спасибо сказали: 110 раз
Рейтинг: 0

По моему примеры описываются параллельно 8.х 7.7.
Ну если не найдешь тогда тебе [необходимо зарегистрироваться для просмотра ссылки]


Signature
В наше время люди всему знают цену, но понятия не имеют о подлинной ценности.
Оскар Уайлд

Vofka Подменю пользователя
сообщение 02.02.10, 12:13
Сообщение #11

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 14050
Из: Киев
Спасибо сказали: 4612 раз
Рейтинг: 3748.8

World1С, по ходу я затупил. Все отличия между 7 и 8 скорей всего состоят только в фунции "СоздатьОбъект" и "Новый". Буду пробовать smile.gif

Vofka Подменю пользователя
сообщение 02.02.10, 12:39
Сообщение #12

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 14050
Из: Киев
Спасибо сказали: 4612 раз
Рейтинг: 3748.8

Что-то получилось! smile.gif
Но возник вопрос, который и должен был возникнуть: в форме выбираю элемент (элемент справочника). Мне нужно выбрать данные по этому элементу. Для этого надо его внутренний идентификатор. Как его получить?
С данным вопросом разобрался (может ещё кому-то пригодится):


Функция ПолучитьИД_Вариант1(Объект)
Перем Стр;
Стр=ЗначениеВСтрокуВнутр(Объект);
СЗ=СоздатьОбъект("СписокЗначений");
СЗ.ИзСтрокиСРазделителями(Сред(Стр,2,СтрДлина(Стр)-2));
Возврат СЗ.ПолучитьЗначение(СЗ.РазмерСписка());
КонецФункции
//_____________________________________________________________________________

Функция ПолучитьИД_Вариант2(Объект)
Перем Стр;
СЗ=СоздатьОбъект("СписокЗначений");
СЗ.ДобавитьЗначение("",Объект);
СЗ.ПолучитьЗначение(1,Стр);
Возврат Стр;
КонецФункции
//_____________________________________________________________________________

Процедура Сформировать()
// Пусть "Объект" - это реквизит формы типа "Справочник"
Сообщить("Объект: "+Объект.ТекущийЭлемент());
Сообщить("Вариант 1: "+ПолучитьИД_Вариант1(Объект.ТекущийЭлемент()));
Сообщить("Вариант 2: "+ПолучитьИД_Вариант2(Объект.ТекущийЭлемент()));
КонецПроцедуры
//_____________________________________________________________________________



Если нужно получить id в том виде, в котором он хранится в таблицах 1С, воспользуйтесь недокументированной функцией _IdToStr(),
н-р: Сообщить("Вариант 1: "+_IdToStr(ПолучитьИД_Вариант1(Объект.ТекущийЭлемент())));

World1С Подменю пользователя
сообщение 02.02.10, 13:19
Сообщение #13

Оратор
Иконка группы
Квалифицированному 1С программисту
Группа: Местный
Сообщений: 358
Из: г.Луганск, обл.Луганская
Спасибо сказали: 110 раз
Рейтинг: 0

На сайте [необходимо зарегистрироваться для просмотра ссылки] поищи обработку которая показывает соответствие таблиц 1С и SQL/
Знаю на 8.х точно есть, но думаю 7.7 не исключение....


Signature
В наше время люди всему знают цену, но понятия не имеют о подлинной ценности.
Оскар Уайлд

Vofka Подменю пользователя
сообщение 02.02.10, 13:54
Сообщение #14

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 14050
Из: Киев
Спасибо сказали: 4612 раз
Рейтинг: 3748.8

World1С, то о чем Вы сейчас говорите мы уже обсуждали (вот для 7 нашёл http://pro1c.org.ua/index.php?showtopic=1236)

liksoft Подменю пользователя
сообщение 02.02.10, 13:55
Сообщение #15

Говорящий
Иконка группы
Группа: Местный
Сообщений: 72
Спасибо сказали: 31 раз
Рейтинг: 0

Выгружаю в таблицу внаглую
Процедура ОбновлениеТоваров()
  
    ИмяСервера = "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 части марлезонског балета
КонецПроцедуры


Выгружаю через INSERT
Процедура ВыгрузкаТоваров()
    
    ИмяСервера = "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 части марлезонского балета...");
    Сообщить(ТекущееВремя());

КонецПроцедуры

Спасибо сказали: Vofka,

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 15.06.25, 14:55
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!