powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / [игнор отключен] [закрыт для гостей] / Как на VBScript выставить счет в 1С?
25 сообщений из 70, страница 1 из 3
Как на VBScript выставить счет в 1С?
    #35831320
Добрый день.

Нет, ли у кого подобного скрипта или примерных наработок?
Возможно ли его написать в универсальном стиле для 1С 7.7 и для 8?
Логика такова:
1. поиск контрагента по наименованию или ИНН. Если не найден, должен создаваться новый
2. собственно выставление счета (с заполнением всех обязательных полей и полей в нужных связанных таблицах)

Все в самом минимальном и простейшем варианте.
Может кто-нибудь помочь?

Заранее спасибо.
...
Рейтинг: 0 / 0
Как на VBScript выставить счет в 1С?
    #35836953
Ну, что неужели ни кто не делал интеграцию 1С с другими системами на таком стандартном языке как VBScript?
...
Рейтинг: 0 / 0
Как на VBScript выставить счет в 1С?
    #35837013
Господин ПЖ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в 1С свой язык есть. ему на остальные покласть...

>>Возможно ли его написать в универсальном стиле для 1С 7.7 и для 8?

структуры документов разные, да и язык немного, но отличается...
...
Рейтинг: 0 / 0
Как на VBScript выставить счет в 1С?
    #35837754
Это, если плясать от 1С (в плане интеграции).
А, если плясать от другой сторонней системы. Если ее рассматривать как более важную.
И нужно из нее выставлять счет в 1С.

Всего-то нужно создать правильный объект (CreateObject)
и далее вызвать нужный метод (типа "СоздатьСчет")
...
Рейтинг: 0 / 0
Как на VBScript выставить счет в 1С?
    #35838495
VoditelKobyly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если другая система более важная, тогда зачем ей 1С?
Задача не понятна в плане организации работы? Почему неньзя просто запустить 1С и выписать там счет? Начните с более общей постановки задачи. Может вам здесь подскажут другой путь её решения.
...
Рейтинг: 0 / 0
Как на VBScript выставить счет в 1С?
    #35839015
Другая система - это CRM. (В ней также управленческий учет, и другие здачи.)
Система 1С - это для бухгалтерии. (Две системы работают вместе, но пока без связи.)
Нужно, чтобы менеджер нажимал кнопку в CRM, по нажатию которой выполнялся бы скрипт (.vbs файл), выставляющий счет в 1C. Саму систему 1С запускать не обязательно. Просто, чтобы добавлялся в ее БД счет. Все параметры (контрагент, сумма счета, содержимое счета) должны передаваться в .vbs из CRM и далее в 1С.
Кто-нибудь проводил интеграцию 1С с другими системами?
...
Рейтинг: 0 / 0
Как на VBScript выставить счет в 1С?
    #35839026
Господин ПЖ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
добавьте мне vbs скриптом "просто счет" в БД файловой 8-ки не открывая...
...
Рейтинг: 0 / 0
Как на VBScript выставить счет в 1С?
    #35840614
Я не знаю как в 8-ке. Но в 7-ке еще dbf-таблицы, значит алогритм файла VBscript я вижу такой:
1. Открываем соединение с БД
2. Формируем SQL инструкцию на добавление в нужную таблицу (и все необходимые)
3. Выполняем SQL инструкцию
4. Закрываем конекшн

Код примерно такой:
Dim Con 'объект Connection
Set Con = CreateObject("ADODB.Connection") 'создание объекта Connection
Con.Open "Provider=...зедсь правильный провайдер...;Data Source=" & sDbPath & ";Persist Security Info=False" 'открываем соединение с базой данных

Dim sSql
sSql = "INSERT INTO tblСчета (Number, Amount) VALUES (1, 10000)"

Con.Execute sSql 'выполняем SQL инструкцию, которая вставляет данные в таблицу счета

Con.Close

Для 8-ки, думаю нужно, не через SQL инструкуцию, а через ее объекты:

1. GetObject
2. AddAccount method


Кто возьмется все это проработать для меня?
Есть спецы?
...
Рейтинг: 0 / 0
Как на VBScript выставить счет в 1С?
    #35840846
x1ca4064
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван Абрамов,

Примерные наработки для 7.7 есть, но делал я их довольно давно - сейчас деталей уже и не помню. Решение требовалось быстро, поэтому об оптимальности строго не судите - решение обладает крупным недостатком: необходимо внести несколько строк в глобальный модуль (ГМ). Были мысли избавиться от этого недостатка, но ...

Итак:

1. Необходимо в ГМ добавить следующее:
Код: plaintext
1.
2.
3.
4.
5.
Перем глКонтрагентИНН	Экспорт;
функция глИмпортИзРТ(Стр) экспорт
	ОткрытьФормуМодально("Отчет",Стр,"ExtForms\ImportRT.ert");
	возврат Стр;
конецфункции

- это придется вставлять после каждого обновления MD

2. Создать ImportRT.ert:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
221.
222.
223.
224.
225.
226.
227.
228.
229.
230.
231.
232.
233.
234.
235.
236.
237.
238.
239.
240.
241.
242.
243.
244.
245.
246.
247.
248.
249.
250.
251.
252.
253.
254.
255.
256.
257.
258.
259.
260.
261.
262.
263.
264.
265.
266.
267.
268.
269.
270.
271.
272.
273.
274.
275.
276.
277.
278.
279.
280.
281.
282.
283.
284.
285.
286.
287.
288.
289.
290.
291.
292.
293.
294.
295.
296.
297.
298.
299.
300.
301.
302.
303.
304.
305.
306.
307.
308.
309.
310.
311.
312.
313.
314.
315.
316.
317.
318.
319.
320.
321.
322.
323.
324.
325.
326.
327.
328.
329.
330.
331.
332.
333.
334.
335.
336.
337.
338.
339.
340.
341.
342.
343.
344.
345.
346.
347.
348.
349.
350.
351.
352.
353.
354.
355.
356.
357.
358.
359.
360.
361.
362.
363.
364.
365.
366.
367.
368.
369.
370.
371.
372.
373.
374.
375.
376.
377.
378.
379.
380.
Перем ТекСпис; //Список значений, переданный СМПК
Перем ТекСч; // Текущий счет
Перем ТекУсль; //Код текущей услуги
перем ТекЦена; //Цена текущей услуги
перем СуммаСчета; //Накопление суммы текущего счета
Перем Ответ; //Ответ для СМПК    
перем СчЕсть;
перем Коммент;
перем Сооб;



function Hex2Byte(Str16)
	var Res,Hd;
	hd=mid(Str16, 1 , 1 );
	if (hd>="A") and (hd<="F") then Res= 10 +Asc(hd)-Asc("A");
	elsif (hd>="0") and (hd<="9") then Res=Asc(hd)-Asc("0");
	else DoMessageBox("Error convert to string:"+Str16);
	endif;  
	hd=mid(Str16, 2 , 1 );
	if (hd>="A") and (hd<="F") then Res=Res* 16 + 10 +Asc(hd)-Asc("A");
	elsif (hd>="0") and (hd<="9") then Res=Res* 16 +Asc(hd)-Asc("0");
	else DoMessageBox("Error convert to string:"+Str16);
	endif;                                    
	Return Res;
endfunction   

function Txt2Date(Str) // YYYYMMDD   
	Return Date(Number(Mid(Str, 1 , 4 )),Number(Mid(Str, 5 , 2 )),Number(Mid(Str, 7 , 2 )));
endfunction
	


function Hex2String(Str16)
	Var P,Res,Cod,hd;
	P= 1 ;                 
	Res="";
	while P<=StrLen(Str16) do
		hd=Upper(Mid(Str16,P, 2 ));
		P=P+ 2 ;
		Res=Res+Chr(Hex2Byte(hd));
	enddo;
	return Res;
endfunction   

процедура СообщитьТут(Стр)
//	Сооб.ДобавитьСтроку(Строка(ТекущееВремя())+Стр);
	Сообщить(Стр);
КонецПроцедуры


функция КонтрагентыВСписок()
	Перем рез;
	рез=СоздатьОбъект("СписокЗначений");
	К=СоздатьОбъект("Справочник.Контрагенты");
	К.ВыбратьЭлементы();
	Пока К.ПолучитьЭлемент()> 0  цикл
		Если (К.ЭтоГруппа()= 0 ) и (СокрЛП(К.ИНН)<>"") тогда
			рез.ДобавитьЗначение(СокрЛП(К.Код),СокрЛП(К.ИНН)); 
			//СообщитьТут(К.Код+"-"+К.ИНН);
		КонецЕсли;
	КонецЦикла;    
	рез.СортироватьПоПредставлению();       
	СообщитьТут("Размер списка контрагентов="+рез.РазмерСписка());
	Возврат рез;
КонецФункции  

функция СоздатьКонтрагента(ИНН,Код)
	Предупреждение("Создаем контрагента ="+ИНН+"=");
	Код="";
	Возврат  0 ;
конецфункции

функция ВыбратьКонтрагента(ИНН,Код)            
	Перем ВыбКод,ВыбПоз,ТекИНН;
	К=СоздатьОбъект("Справочник.Контрагенты");
	Ном=глКонтрагентИНН.НайтиЗначение(Код);
	Спис=СоздатьОбъект("СписокЗначений");
	пока (Ном<=глКонтрагентИНН.РазмерСписка()) цикл
		ТекКод=глКонтрагентИНН.ПолучитьЗначение(Ном,ТекИНН);
		Если ТекИНН=ИНН тогда    
			К.НайтиПоКоду(ТекКод);
			Спис.ДобавитьЗначение(ТекКод,К.ТекущийЭлемент().Наименование);
			Ном=Ном+ 1 ;
		иначе
			Прервать; 
		КонецЕсли;
	КонецЦикла; 
	
	Если Спис.РазмерСписка()= 1  тогда
		Возврат  1 ;
	КонецЕсли;
		
	Если Спис.ВыбратьЗначение(ВыбКод,"Выберите клиента(Имя РТ "+Hex2String(ТекСпис.Получить("KliName"))+")",ВыбПоз)= 1  тогда 
		Код=ВыбКод;
		Возврат  1 ;
	иначе
		возврат  0 ;
	КонецЕсли;
конецфункции 



функция ИННвКодКонтрагента(ИНН)
	Сейчас= 0 ;
	Код="";        
	ИНН=СокрЛП(ИНН);
	Если ИНН="" тогда
		возврат "";
	конецесли;
	пока (Код="") и (Сейчас= 0 ) цикл
		
		Если ПустоеЗначение(глКонтрагентИНН)<> 0  Тогда 
			глКонтрагентИНН=КонтрагентыВСписок();
			Сейчас= 1 ;
		КонецЕсли;  
		Код=глКонтрагентИНН.Получить(ИНН);
		Если (ПустоеЗначение(Код)<> 0 ) и (Сейчас= 0 ) тогда 
			СообщитьТут("Обновление списка контрагентов");
			глКонтрагентИНН= 0 ;
		КонецЕсли;
	КонецЦикла;
	Если ПустоеЗначение(Код)<> 0  тогда
		Если СоздатьКонтрагента(ИНН,Код)= 0  тогда
			Возврат "";
		иначе
			Возврат Код;
		КонецЕсли;
	КонецЕсли;        
	Если ВыбратьКонтрагента(ИНН,Код)= 0  тогда
		Возврат "";
	иначе 
		Возврат Код;
	КонецЕсли;
КонецФункции

функция ИННвКонтрагента(ИНН,Контр)
	Код=ИННвКодКонтрагента(ИНН);
	если Код<>"" тогда
		К=СоздатьОбъект("Справочник.Контрагенты");
		К.НайтиПоКоду(Код);
		Контр=К.ТекущийЭлемент();
		возврат  1 ;
	иначе
		возврат  0 ;
	конецесли;
конецфункции


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




функция СоздатьСчет(Кли,Дог,ДатаДок,КодУсль,КолУсль,ЦенУсль)   
	перем СчКонт;
	Н=СоздатьОбъект("Справочник.Номенклатура");
	Если Н.НайтиПоКоду(КодУсль)= 0  тогда
		Предупреждение("Услуга с кодом "+КодУсль+" не найдена!");
		возврат  0 ;
	иначе        
		Усль=Н.ТекущийЭлемент();
	конецесли;
		
	Сч=СоздатьОбъект("Документ.Счет");
	Сч.Новый();
	Сч.Контрагент=Кли;  
	Сч.Плательщик=Кли;
	Сч.Договор=Дог;
	Сч.ДатаДок=ДатаДок;
	Сч.УстановитьНовыйНомер("");
	Сч.НоваяСтрока();
	Сч.Товар=Усль;
	Сч.Количество=КолУсль;
	Сч.Цена=ЦенУсль;
	Сч.Всего=КолУсль*ЦенУсль;   
	Сч.Комментарий="Импорт из РТ";
	Сч.ВариантОтправки= 1 ;
	Сч.РасчетныйСчет=Константа.ОсновнойБанковскийСчет;    
	Ном=Сч.НомерДок;
	Сч.Записать();  
	Если ОткрытьФорму(Сч)= 0  тогда
		предупреждение("Форма не открылась");
	КонецЕсли;
	
	Возврат  1 ;
КонецФункции   

процедура ЗавершитьСчет()  
	СообщитьТут("пустоеЗнач="+ПустоеЗначение(ТекСЧ));
	Если (СчЕсть= 1 ) и (СуммаСчета<> 0 ) тогда
		//ТекСч.Всего=СуммаСчета;
		ТекСч.ВариантОтправки= 1 ;  
		ТекСч.Комментарий=Коммент;
		ТекСч.Записать();      
		СообщитьТут("Счет записан");
		ТекСч= 0 ;  
		СчЕсть= 0 ;
	иначе
		СообщитьТут("Счет не записан");
		
	КонецЕсли; 
	СообщитьТут("СуммаСчета="+СуммаСчета);
КонецПроцедуры

процедура НачатьНовыйСчет(Кли,Дог,ДатаДок)  
	СообщитьТут("начинаем новый счет");
	Если СчЕсть= 1  тогда
		ЗавершитьСчет();
	КонецЕсли;
	ТекСч=СоздатьОбъект("Документ.Счет");
	ТекСч.Новый();
	ТекСч.Контрагент=Кли;  
	ТекСч.Плательщик=Кли;
	ТекСч.Договор=Дог;
	ТекСч.ДатаДок=ДатаДок;      
	ТекСч.РасчетныйСчет=Константа.ОсновнойБанковскийСчет;
	ТекСч.УстановитьНовыйНомер("");
	ТекНомДок=ТекСч.НомерДок; 
	Коммент="Импорт из РТ кв№";
	СуммаСчета= 0 ;
	ТекУсль= 0 ;//Текущая услуга(Код)
	ТекЦена= 0 ;//Цена этой услуги
	СчЕсть= 1 ;
КонецПроцедуры   

функция ДобавитьВСчет()
	Перем Контр,Дог;
	ИНН=СокрЛП(Hex2String(ТекСпис.Получить("INN")));
	Договор=СокрЛП(Hex2String(ТекСпис.Получить("Pact")));
	КодУсль=СокрЛП(Hex2String(ТекСпис.Получить("Serv")));
	Кол= 1 ;//Число(ТекСпис.Получить("Quan"));
	Цен=Число(ТекСпис.Получить("Price"));
	Дат=Txt2Date(ТекСпис.Получить("Date"));
	если ИННвКонтрагента(ИНН,Контр)= 1  тогда
		Если ДоговорПоНаименованию(Контр,Договор,Дог)= 1  тогда
			Если СчЕсть= 0  тогда
				НачатьНовыйСчет(Контр,Дог,Дат);
			ИначеЕсли (Контр.Код<>ТекСч.Контрагент.Код) или (Дог.Код<>ТекСч.Договор.Код) тогда
				НачатьНовыйСчет(Контр,Дог,Дат);
			КонецЕсли;
			Если (ТекУсль=КодУсль) и (Цен=ТекЦена) тогда
				ТекСч.Количество=ТекСч.Количество+ 1 ;  
			иначе    
				Н=СоздатьОбъект("Справочник.Номенклатура");
				Если Н.НайтиПоКоду(КодУсль)= 0  тогда
					Ответ="Услуга "+КодУсль+" не найдена"; 
					Предупреждение(Ответ);
					Возврат  0 ;
				Иначе
					ТекСч.НоваяСтрока(); 
					ТекСч.Товар=Н.ТекущийЭлемент();
					ТекСч.Количество= 1 ;
					ТекСч.Цена=Цен;
				КонецЕсли;
			КонецЕсли;   
			ТекСч.Всего=ТекСч.Количество*ТекСч.Цена;
			СуммаСчета=СуммаСчета+Цен; 
			СообщитьТут("Сумма="+СуммаСчета);
			Если ТекСч.ДатаДок<Дат тогда
				ТекСч.ДатаДок=Дат;
			КонецЕсли;
			
			ТекЦена=Цен;
			ТекУсль=КодУсль;
			Ответ="Квитанция "+Hex2String(ТекСпис.Получить("KvitNum"))+" в счет "+ТекСч.НомерДок;
			Коммент=Коммент+"-"+Hex2String(ТекСпис.Получить("KvitNum"));
			возврат  1 ;
		иначе
			Ответ="Договор "+Hex2String(ТекСпис.Получить("Pact"))+" не найден!";
			Предупреждение(Ответ);
			возврат  0 ;
		КонецЕсли;
	иначе
		Ответ="Клиент ИНН="+ИНН+"Имя в РТ:"+Hex2String(ТекСпис.Получить("KliName"))+  "не найден!";
		Предупреждение(Ответ);
		возврат  0 ;
	КонецЕсли;
КонецФункции           



	

функция РазложитьВСписок(Знач Стр)
	Список = СоздатьОбъект("СписокЗначений");
	Разделитель="|";
	Длина  = СтрДлина(Разделитель);
	
	Стр = СокрЛП(Стр);
	Поз = Найти(Стр, Разделитель);
	
	Пока  0  < Поз Цикл         
		С=СокрП(Лев(Стр, Поз- 1 ));
		Поз1=Найти(С,"=");
		Имя=Лев(С,Поз1- 1 );
		Зн=Сред(С,Поз1+ 1 ,СтрДлина(С)-Поз1);
		Список.ДобавитьЗначение(Зн,Имя);
		
		Стр = СокрЛ(Сред(Стр, Поз+Длина));
		Поз = Найти(Стр, Разделитель);
	КонецЦикла;

	Список.ДобавитьЗначение(Зн,Имя);
	
	Возврат Список;
конецфункции   





//*******************************************
procedure OnOpen()     экспорт
Перем Стр,Пар;    
	СтатусВозврата( 0 );  
	Если ПустоеЗначение(глРасшифровка)= 1  тогда
		глРасшифровка=СоздатьОбъект("СписокЗначений");
		СчЕсть= 0 ;
	иначе 
		счЕсть=глРасшифровка.Получить("СчЕсть");
		ТекСч=глРасшифровка.Получить("ТекСч");
		ТекУсль=глРасшифровка.Получить("ТекУсль");
		ТекЦена=глРасшифровка.Получить("ТекЦена");
		СуммаСчета=глРасшифровка.Получить("СуммаСчета");
		Коммент=глРасшифровка.Получить("Коммент");
	КонецЕсли;
	Сооб=СоздатьОбъект("Текст"); 
	если ФС.СуществуетФайл("000.txt")<> 0  тогда 
		Сооб.Открыть("000.txt");
	конецесли;
	Стр=Форма.Параметр;
	СообщитьТут("Вход:"+Стр);
Попытка
	ТекСпис=РазложитьВСписок(Стр);
	Если ТекСпис.Получить("Action")="AddBill" тогда 
		СообщитьТут("Добавляем в счет");
		Если ДобавитьВСчет()= 0  тогда
			Ответ="Ошибка квитанции №"+Hex2String(ТекСпис.Получить("KvitNum"))+": "+Ответ;
		КонецЕсли;
		СообщитьТут(Ответ);
	иначеЕсли ТекСпис.Получить("Action")="SetTit" тогда
			Ответ=ЗаголовокСистемы(Hex2String(ТекСпис.Получить("SysTit")));    
			
	иначе
		ЗавершитьСчет();
		Ответ="Передача завершена";
	конецесли;
исключение
	СообщитьТут("Ошибка "+ОписаниеОшибки());
	Ответ="Ошибка "+ОписаниеОшибки();
	
КонецПопытки;	
	Сооб.Записать("000.txt");
	Форма.Параметр=Ответ;   
	глРасшифровка.Установить("СчЕсть",СчЕсть);
	глРасшифровка.Установить("ТекСч",ТекСч);
	глРасшифровка.Установить("ТекУсль",ТекУсль);
	глРасшифровка.Установить("ТекЦена",ТекЦена);
	глРасшифровка.Установить("СуммаСчета",СуммаСчета);
	глРасшифровка.Установить("Коммент",Коммент);
	
endprocedure


Использовалось это примерно так (код на дельфи, но перевести на vbscript должно быть легко):
Код: plaintext
1.
2.
3.
4.
      v7:=CreateOLEObject('v77.Application'); //Создаем объект 1С
      v7.Initialize(v7.RMAccount,format('/D%s',[StringParam('Path1C')]),''); //Открываем базу
      s:=v7.EvalExpr(format('глИмпортИзРТ("Action=%s|%s|")',[Action,sParam])); // Запускаем
                                                                             // процедуру ГМ

Action может иметь 2 значения - SetTit (устанавливает заголовок окна) и AddBill (добавляет счет); sParam представляет собой набор <Имя>=<Строка байтов в hex виде>"|". Т.е. глИмпортизРТ передается примерно такая строка:
Action=AddBill|INN=34373134303030303734|Pact=32352D3034|Date=20041218|Serv=313032|Price=450.00|KliName=D1EEF1EDEEE2EEE1EEF0F1EAE0FF20F2EEF0E3EEE2EBFF|KvitNum=373737383939|
где INN - ИНН;Pact- № договора;Date - Дата;Serv - Код номенклатуры;Price - Цена;KliName - Наименование клиента;


Исполнение этого "танца" требует еще нескольких приседаний - вытаскивание 1С на передний план и еще каких-то.

Надеюсь, поможет.
...
Рейтинг: 0 / 0
Как на VBScript выставить счет в 1С?
    #35840984
VoditelKobyly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
И кто сказал, что при этом сама 1с не запускается?
...
Рейтинг: 0 / 0
Как на VBScript выставить счет в 1С?
    #35840997
x1ca4064
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VoditelKobyly,


Вроде, никто и не говорил...
...
Рейтинг: 0 / 0
Как на VBScript выставить счет в 1С?
    #35841008
VoditelKobyly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А как насчет нарушения алгоритма описанного выше?
1. Открываем соединение с БД
2. Формируем SQL инструкцию на добавление в нужную таблицу (и все необходимые)
3. Выполняем SQL инструкцию
4. Закрываем конекшн

Это же совершенно разные подходы к решению и соответственно разные затраты на программирование. Причем, на мой взгляд в этом случае затраты превысят достигнутый в результате эффект. Гораздо проще и дешевле делать по принципу запуска 1с и доступом
по ОЛЕ. Пример был приведен.
...
Рейтинг: 0 / 0
Как на VBScript выставить счет в 1С?
    #35841224
semyons
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Только тут опять появиться проблема. Старт 1С довольно затратен, соответственно после нажатия кнопки "Создать счет в 1С" пройдет довольно много времени. Если же чел нажмет кнопку 2 раза - то будут запускаться 2 экземпляра 1С. Ресурсов это будет жрать немерянно. Кроме того, в vbs нужно будет передавать кучу параметров.
На мой взгляд, гораздо лучше разделить эту задачу на 2: сначала из CRM выгрузить в XML, а потом бухгалтер в 1С подгрузит эти данные. Я думаю, что создать подобную обработку с одной кнопкой "Подгрузить счета" не составит труда. Таким образом появится полный контроль над загрузкой.
В приниципе, можно вообще это автоматизировать, то есть счета будут подгружаться по таймеру.
...
Рейтинг: 0 / 0
Как на VBScript выставить счет в 1С?
    #35841285
Господин ПЖ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ппц... наймите 1С-ника нормального. Он вам все сделает через OLE/COM
...
Рейтинг: 0 / 0
Как на VBScript выставить счет в 1С?
    #35841376
1chainik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван АбрамовДобрый день.

Нет, ли у кого подобного скрипта или примерных наработок?
Возможно ли его написать в универсальном стиле для 1С 7.7 и для 8?
Логика такова:
1. поиск контрагента по наименованию или ИНН. Если не найден, должен создаваться новый
2. собственно выставление счета (с заполнением всех обязательных полей и полей в нужных связанных таблицах)

Все в самом минимальном и простейшем варианте.
Может кто-нибудь помочь?

Заранее спасибо.
http://www.sql.ru/forum/actualsearch.aspx?search=ComConnector&sin=0&a=&ma=0&bid=63&dt=-1&s=1&so=1


ЗЫ лезть руками в таблицы 1С на вставку/апдейт лучше не надо. (только на выборку-безопасно). По крайней - пока не съели всех 1С-овских собак. Поэтому, поначалу, лучше писать через ком- коннектор в 8-ке, и через 1С-аппликуху в 7-ке. Методы и структуры данных отличаются не только меж 7-кой и 8-кой, но и внутри веток (по версиям платформ) - различия во встроенном языке (появляются некоторые новые ф-ии) и между кофигурациями (различия в собсвенно наборе объектов, и перемещение ф-й по глобальным модулям).
Правда если данных много - то появится следующее обстоятельство для гордости - обработки будут писаться и отлаживаться быстрее, чем отрабатывать на полном наборе данных. Т.е. порядка на 3 (4-5) медленнее, чем это реально необходимо через работу напрямую с данными.
...
Рейтинг: 0 / 0
Как на VBScript выставить счет в 1С?
    #35841381
VoditelKobyly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А ещё есть куча проблем с синхронизацией данных в разных базах, когда например, один и тотже контрагент может сначала появится со стороны бухгалтерии (например оказывает какие-то услуги), а потом со стороны нормальной системы учета. Будем плодить на автомате двойников? А как насчет правильности и достаточности всех реквизитов контрагента в нормальной системе учета и бухгалтерской программы? Учеты ведутся в одних и тех же разрезах? Есть много вопросов, которые надо изучить, поэтому лучший выход - наймите кого-нибудь, кто вам сделает и доведет все до ума. Некоторые вопросы могут даже не сразу и вылезти, а уж об универсальных скриптах вообще вряд ли приходится говорить.
...
Рейтинг: 0 / 0
Как на VBScript выставить счет в 1С?
    #35843909
Спасибо всем. Но я думал просто вставить запись(и) в нужные таблицы dbf. Без объектов и использования языка 1С (а используя VBScript). То есть именно так:

Dim Con 'объект Connection
Set Con = CreateObject("ADODB.Connection") 'создание объекта Connection
Con.Open "Provider=...зедсь правильный провайдер...;" 'открываем соединение с БД 1С

Con.Execute "INSERT INTO tblСчета (Number, Amount) VALUES (1, 10000)" 'выполняем SQL инструкцию, которая вставляет данные в таблицу счета ... + все другие необходимые INSERT-ы и UPDATE-ы

Con.Close
Set Con = Nothing

Неужели никто и никогда не делал подобных задач?
И никто никогда не управлял 1С из вне?
И никто никогда не лазил в БД 1С за какими-нибудь данными?
...
Рейтинг: 0 / 0
Как на VBScript выставить счет в 1С?
    #35844167
Господин ПЖ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
когда за вами будут бегать бухи с намереньем вырвать кадык за разрушенную базу - вспомните эту ветку...

"интеграторы" мля...
...
Рейтинг: 0 / 0
Как на VBScript выставить счет в 1С?
    #35845086
VoditelKobyly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Именно потому что уже делали подобные вещи, вам и советуют не связываться с таким подходом. Лично мое мнение, что при таком подходе много временных затрат на программирование, а результат всего лишь один документ в бухгалтерской программе. Ваш директор не даст денег финансировать такие проекты.
...
Рейтинг: 0 / 0
Как на VBScript выставить счет в 1С?
    #35849542
Сейчас многие нормальные системы обладают связью с 1С.
Вот пример http://www.crmpartner.ru/faq/beforebuy/3/#1
Моменты по рассинхронизации данных - это оффтоп.
Спецы, блин... сидящие только в своем огороде.
Я сам есть директор, и деньги на эту задачу выделяю.
...
Рейтинг: 0 / 0
Как на VBScript выставить счет в 1С?
    #35849677
VoditelKobyly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если проблемы в деньгах нет, тогда не понятно почему в Санкт Петербурге нельзя найти спеца, способного решить данную проблему. Скорее всего плохо искали.
...
Рейтинг: 0 / 0
Как на VBScript выставить счет в 1С?
    #35849713
VoditelKobyly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Иван Абрамов,
по вашей ссылке http://www.crmpartner.ru/faq/beforebuy/3/#1
не поленился скачал демо версию продукта и вот, что там написано в справке по интеграции с 1С:

В комплект поставки Quick Sales включено несколько наборов обработок для интеграции со следующими конфигурациями «1С:Предприятие» 7.7:

· Конфигурация «Бухгалтерия», редакция 4.4.
· Конфигурация «Бухгалтерия», редакция 4.5.
· Конфигурация «Производство + Услуги + Бухгалтерия» 2.8
· Конфигурация «Торговля+Склад», редакция 9.2.
· Комплексная конфигурация (Бухгалтерия + Торговля + Склад + Зарплата + Кадры), редакция 4.4.
· Комплексная конфигурация (Бухгалтерия + Торговля + Склад + Зарплата + Кадры), редакция 4.5.

Обработки:

· ИмпортНоменклатуры.ert – операция импорта номенклатуры в Quick Sales
· ЭкспортНоменклатуры.ert – операция экспорта номенклатуры из Quick Sales
· ИмпортКА.ert – операция импорта контрагентов в Quick Sales
· ЭкспортКА.ert – операция экспорта контрагентов из Quick Sales
· Документы.ert – работа с документами
· ИмпортДокументов.ert – импорт документов
· Платежи.ert – импорт платежей


5. Во время выполнения обращения к конфигурации «1С:Предприятие» выводится форма, сообщающая, что в данный момент делает Quick Sales, например, загрузка «1С:Предприятия».

Чтобы воспользоваться интеграцией Quick Sales c «1С:Предприятие» 7.7, необходимо запускать 1С, используя Quick Sales. 1С загрузится автоматически при выполнении любой из операций интеграции. Также имеется возможность запустить 1С непосредственно из пункта меню – Настройки, Интеграция 1С, Запустить 1С.

То есть люди не пишут напрямую в таблицы 1С, а используют саму 1С для доступа к своей CRM программе. А это уже совершенно другая история. И на мой взгляд эти люди поступают более
грамотно. Не знают внутренних структур таблиц 1С и не собираются изучать их, а пользуюся тем,
что знают структуры своих таблиц. При этом время на разработку интеграции минимально.
И уж ни о какой универсальности (7-ка и 8-ка) не говорят, а чётко называют продукты, с которыми они интергрированы. Потому что на свете конфигураций 1С уже очень много и каждая
имеет разные внутренние структуры таблиц, хотя для пользователя это всё может выглядеть как
один документ с названием Счет. А вот записи во внутренние таблицы этот документ может делать
всякие разные, в зависимости от конфигурации.
Я вам предлагаю ещё раз попробовать оценить все достоинства и недостатки разных методов интеграции вашей системы с используемой программой 1С и только потом настаивать именно
на прямой записи в таблицы 1С. Выносите свои критерии на обсуждение - коллективный разум
поможет.
...
Рейтинг: 0 / 0
Как на VBScript выставить счет в 1С?
    #35849939
Господин ПЖ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван АбрамовСейчас многие нормальные системы обладают связью с 1С.
Вот пример http://www.crmpartner.ru/faq/beforebuy/3/#1
Моменты по рассинхронизации данных - это оффтоп.
Спецы, блин... сидящие только в своем огороде.
Я сам есть директор, и деньги на эту задачу выделяю.

я куею с такого директора если честно...
...
Рейтинг: 0 / 0
Как на VBScript выставить счет в 1С?
    #35849941
Господин ПЖ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ссылки дает какие-то... сам открывал их, читал что внутри?
...
Рейтинг: 0 / 0
Как на VBScript выставить счет в 1С?
    #35850132
VoditelKobyly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Давайте всё-таки не оскорблять уважаемого директора. Он не виноват в том, что 1С его "достала" и он хочет сделать интеграцию своего "более важного" продукта с недалёкой системой и даже не системой, а так программкой. Вот только не знает как это сделать, поэтому и просит помощи, совета. Если человек ещё не определился (или не понял, почему не желательно лезть напрямую) в таблицы программ 1С, давайте ему поможем. Свое видение я уже частично изложил:
1. невозможно сделать что-то универсальное для большого разнообразия программ написанных на языке 1С. Потому что всегда найдется программист, который уже побывал в организации использующей 1С и настроил программу под нужды организации. И не исключено, что настроил не только в рамках таблиц 1С, но и возможно в других таблицах, например во внешних, хранящих историю изменения документов. А поэтому вытекает
2. всегда будут добавляться затраты на изучение конкретной конфигурации и дописки под неё, чтобы не изломать, то что уже работает и сделано кем-то до вас. И не факт, что ваши заказчики будут рады заплатить вам за это.
А по скольку найти спеца, который одновременно знает несколько систем, всегда тяжелее, чем, знающего одну, и стоит он обычно дороже пересмотрите задание, или хотя бы сузьте рамки.
Хотя если уважаемого директора распирает от избытка денег и он готов за это платить, то я думаю обязательно найдутся люди кто возьмется за эту задачу. Весь вопрос сколько.
...
Рейтинг: 0 / 0
25 сообщений из 70, страница 1 из 3
Форумы / [игнор отключен] [закрыт для гостей] / Как на VBScript выставить счет в 1С?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]