Обработка из SQL базы в 1с SQL
28.01.2011
13:45
#21
"Понял где косяк, не так я делал.<br>Но теперь другой касяк при попытки сохранить обработку. он пишет, что модуль не верный продоолжить или нет. и указывает вот на эти ошибка<br><br>{ВнешняяОбработка.ВнешняяОбработка1(10,18)}: Процедура или функция с указанным именем не определена (СоздатьОбъект)<br> Соединение = <<?>>СоздатьОбъект("ADODB.Connection");<br>{ВнешняяОбработка.ВнешняяОбработка1(18,25)}: Процедура или функция с указанным именем не определена (СоздатьОбъект)<br> Номенклатура = <<?>>СоздатьОбъект("Справочник.Склады");<br>{ВнешняяОбработка.ВнешняяОбработка1(20,16)}: Процедура или функция с указанным именем не определена (СоздатьОбъект)<br> Cmd = <<?>>СоздатьОбъект("ADODB.Command");<br>{ВнешняяОбработка.ВнешняяОбработка1(23,15)}: Процедура или функция с указанным именем не определена (CreateObject)<br> Rs = <<?>>CreateObject("ADODB.RecordSet");<br><br><br>И соответсвенно при его загрузке он пишет тоже самое"
28.01.2011
15:27
#22
так вы ж не написали какая у вас 1С, судя по сообщениям у вас v8, а алгоритм я писал для v7.7. Переведите алгоритм на язык v8
28.01.2011
16:32
#23
Хнык... даааа.. это 1с8.1 ... забыл совсем написать...<br><br>а как перевести-то ?
28.01.2011
19:24
#25
"Для v8:<br><br>Процедура КнопкаВыполнитьНажатие(Кнопка)<br> //здесь<br> //192.168.7.70 = ip Microsoft SQL Server<br> //User1C = пользователь, имеющий права доступа на базу в MS SQL Server (обычно sa, но я всегда меняю)<br> //omega = пароль пользователя<br> //BaseID = идентификатор базы<br><br> ConnectionString = "Provider=SQLOLEDB;Data Source=192.168.7.70;Password=omega;User ID=User1C;Initial Catalog=BaseID";<br><br> Соединение = Новый COMОбъект("ADODB.Connection"); <br> Соединение.ConnectionTimeOut =600;<br> Соединение.CursorLocation = 3;<br> Попытка<br> //здесь:<br> //HH123 - идентификатор поля, где лежит наименование<br> //TT567 - идентификатор таблицы, где лежат нужные данные<br><br> Номенклатура=Справочники.Номенклатура;<br> Соединение.Open(ConnectionString); <br> Cmd = Новый COMОбъект("ADODB.Command");<br> Cmd.ActiveConnection = Соединение;<br> Cmd.CommandText = "Select HH123 FROM TT567";<br> //************ тут была еще строка, см. примечание внизу<br> Rs = Cmd.Execute();<br> Для i = 1 по Rs.RecordCount Цикл<br> ТекНаименование=СокрЛП(Rs.Fields("HH123").Value);<br> Если Номенклатура.НайтиПоНаименованию(ТекНаименование,Истина)=Номенклатура.ПустаяСсылка() Тогда<br> НовыйЭлемент=Номенклатура.СоздатьЭлемент();<br> НовыйЭлемент.Наименование=ТекНаименование;<br> НовыйЭлемент.Записать();<br> КонецЕсли;<br> Rs.MoveNext();<br> КонецЦикла;<br><br> Rs=0;<br> Соединение=0;<br> Исключение<br> Предупреждение(ОписаниеОшибки());<br> Соединение=0;<br> КонецПопытки;<br>КонецПроцедуры<br><br>Примечание: из алгоритма по большой бросьбе zak555 убрана строка Rs = Новый COMОбъект("ADODB.RecordSet");, а то он уже 3-е сутки не может обрести внутренее равновесие от того что я не признаю ненужность этой строчки"
28.01.2011
19:26
#26
ага, да пусть, добью тему до конца уж... может кому другому этот алгоритм потом пригодится. Я его использовал уже ранее, когда данные из таблиц FoxPro с memo полями забирал. Для данного примера выкинул все "ненужное" и переделал под MS SQL Server строку подключения (спасибо .Net Developer Studio, которая позволяет это делать самым удобным образом)
28.01.2011
21:19
#27
"Теперь он 3 суток не будет спасть из-за того, что заставил тебя убрать такую нужную строчку! ;)"
29.01.2011
17:27
#28
Спасибо большущие..разобрался, поля заполнил. все в базу закинулось быстро и оперативно... еще раз спасибо...<br>
29.01.2011
17:43
#29
"Возник еще один не большой вопрос, для общего развития..<br><br>Я так понимаю что вот это<br><br>ТекНаименование=СокрЛП(Rs.Fields("ТУТ ТАБЛИЦА в SQL С НАЗВАНИЯМИ").Value);<br> Если Номенклатура.НайтиПоНаименованию(ТекНаименование,0,1)=0 Тогда<br> Номенклатура.Новый();<br> Номенклатура.Наименование=ТекНаименование;<br> Номенклатура.Записать();<br><br>Он берет названия от туда и кидает в номенклатуру создавая новый и записывая соответственно.<br><br>А если две позиции ? То есть в базе sql две таблицы (первая это вот названия) а вторая допустим цифра 1 и 2 (назавем еще) id.<br><br>Сложно ли дописать ту обработку, что бы он не только перекидывал наименования, но допустим если напротив (в след. таблице id) стоит 1, то это скажем оптовый склад, если 2, розничный. (это просто пример)"
29.01.2011
18:43
#30
"это текстом SQL запроса оговаривается, можно из MS SQL Server вынуть данные с довольно сложными условиями и связями, а уж просто достать значения двух полей и подавно:<br><br>например так:<br>Select id, name FROM mytable<br><br>ну и потом обращаться к результатам запроса через объект recordset<br>ТекНаименование=СокрЛП(Rs.Fields("name").Value);<br>ТекИдентификатор=СокрЛП(Rs.Fields("id").Value);<br><br>P.S. мне кажется, что вы путаете понятия "таблицы" и "поля""
v8: ошибка после обновления УПП (1.3.8.1) платформа (8.2.13.205)выгрузка - загрузка из Рарус Альфа-авто 4.0 в бухгалтерию 7.7
Читают тему
(гостей: 1)