powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / [игнор отключен] [закрыт для гостей] / Как на VBScript выставить счет в 1С?
70 сообщений из 70, показаны все 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
Как на VBScript выставить счет в 1С?
    #35850167
VoditelKobyly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, в догонку.
Иногда лучше быть спецом сидящим в одном своем огороде, чем быть везде не понятно кем. Хотя всё это болтология. Если просите у кого помощи, то по крайней мере не ругайтесь, никто не обязан вам её предоставлять. Здесь вам не ваши подчиненные. Здесь все уважаемые люди.
...
Рейтинг: 0 / 0
Как на VBScript выставить счет в 1С?
    #35850302
Кто-то сказал "интеграторы мля", а я сказал "спецы блин". Так кто первый начал негатив раскачивать? Вот так всегда и бывает. Когда уважаемые люди ... ну очень уважаемыми становятся. Можно и нанять спеца 1С. Только я хотел сам на VB данную задачу решить. Это даже не конкретная задача, а так, просто пример кода интеграции в виде .VBS файла для включения в публичный дистрибутив, даже не обязательно рабочий. Клиенту если будет надо, он подточит весть этот элементарный код под себя, под свою конфигурацию или напишет файл .ert.
Спец конечно будет делать. В комплекте 1С есть стандартные простые конфигурации, вот для стандартной конфы я и думал написать простейший код, выставляющий счет. Может быть еще проще что-то можно придумать? Ну, синхронизация контрагентов, может это проще?
Интересно, что с другими системами интеграция посредством ADO и VBA делается станадртно без проблем (тот же MS Outlook или MS CRM к примеру с его БД SQL Server) и только в 1С свой язык, уже воспитавший класс спецов, не допускающих мысли использования БД 1С из вне.
Ну, успехов вам, дорогие мои! Не ошибитесь в глобальном плане.
...
Рейтинг: 0 / 0
Как на VBScript выставить счет в 1С?
    #35850319
Phantom_VM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Господин ПЖппц... наймите 1С-ника нормального. Он вам все сделает через OLE/COM

+ 100.... :-) Подтверждаю. Нормальная интеграция с 1С делается только так - через COM (ну или через web-сервисы для последней версии)! Лезть напрямую в БД 1С не советую из-за того, что на на физическом уровне их структура непостоянна их может меняться. Да оно и смысла особого нет, т.к. если что, в 1С можно еще доп. обработку входящих данных сделать.
...
Рейтинг: 0 / 0
Как на VBScript выставить счет в 1С?
    #35850371
Господин ПЖ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван АбрамовМожно и нанять спеца 1С. Только я хотел сам на VB данную задачу решить.

Зачем тогда в стоматологию ходить? Цемент/дрель дома найдутся?
...
Рейтинг: 0 / 0
Как на VBScript выставить счет в 1С?
    #35850429
VoditelKobyly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну вот, опять обиделся. Не кажется ли вам уважаемый Иван Абрамов, что во многих последних своих темах, ваш разговор заканчивается обидой на собеседников? Не настала пора пересмотреть взгляды на жизнь? Весна пришла радуйтесь.
А в глобальном плане лично мне больше импонируют люди типа Господина ПЖ, хоть он и частенько в грубой форме выражается, зато и часто подсказывает людям и спасибо ему за это. А вот вы мало кому подсказали (по крайней мере на этом форуме) а всё только спрашиваете, и на ответах форумчан деньги делаете, а с ними наверняка не делитесь.
...
Рейтинг: 0 / 0
Как на VBScript выставить счет в 1С?
    #35850441
1chainik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван АбрамовСпасибо всем. Но я думал просто вставить запись(и) в нужные таблицы 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С за какими-нибудь данными?вы таки или не читаете, что вам пишут, или абсолютно невменяемы. Типа - уже директор, можно и не втыкать.

Так вот, проблема 1С состоит в том, что клиент ейный является @какбе логической субд@. Т.е. вся целостность поддерживается клиентом. Худо и бедно. Медленно и нудно. Со своими дырами и т.п. Но поддерживается. И вот вы хотите поверх всего этого полезть грязными ногами напрямую в (оконечноу) базу, мимо всех "целостно-поддерживательных механизмов _клиента_ 1С... Причем полезть не за чтением данных, что оправдано, а за изменением.... Ну что ж - флаг вам и барабанные палочки (и якорь...).

Посему еще раз перечитайте, что вам советуют. А советуют вам примерно следующее:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Set Con = CreateObject("v81.COMConnector")
Set v8 =Con.Connect("строкаПодключения")
Set СчетаМенеджер = v8.Документы.Счета
....
Set СчетаЗапись= СчетаМенеджер.СоздатьЭлемент()
СчетаЗапись.Контрагент = ....
....
СчетаЗапись.Записать()
и советуют исключительно из гуманных соображений. Чтобы не заставлять вас разбираться во всей внтриклиентской 1С-кухне. (самое малое - как сгенерить код в справочник/документ, как получить имя таблицы-справочника из описания, как вычислить и повторить все сопутствующие телодвижения клиента по поддержанию и контролю целостности). Хотя при хорошем запале - это всё - вполне решаемые задачи. Но обновление конфигурации может потребовать от вас перерешивать их вновь и вновь.

ПС. для 7ки (дбф) кстати все давно понятно. Но редко кто лезет грязными ногами на прямую вставку. А вот как вы будете впихиваться в файловую 8-ку???
...
Рейтинг: 0 / 0
Как на VBScript выставить счет в 1С?
    #35850467
Господин ПЖ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1chainik
ПС. для 7ки (дбф) кстати все давно понятно. Но редко кто лезет грязными ногами на прямую вставку. А вот как вы будете впихиваться в файловую 8-ку???

этот вопрос озвучивался еще в начале самом... ответа не получено - ибо афтор нихрена не соображет в том, чем заниматься пытается... А вообще он крут - знает vbs скрипт...
...
Рейтинг: 0 / 0
Как на VBScript выставить счет в 1С?
    #35850495
VoditelKobyly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А может сразу напрямую писать в файлы *.MDF?
Или обидеться на MS за недостаток информации о внутренней структуры этих файлов?
...
Рейтинг: 0 / 0
Как на VBScript выставить счет в 1С?
    #35850510
1chainik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Господин ПЖ1chainik
ПС. для 7ки (дбф) кстати все давно понятно. Но редко кто лезет грязными ногами на прямую вставку. А вот как вы будете впихиваться в файловую 8-ку???

этот вопрос озвучивался еще в начале самом... ответа не получено - ибо афтор нихрена не соображет в том, чем заниматься пытается... А вообще он крут - знает vbs скрипт...автора можно понять. При прямом инсерте/апдейте можно отыграть у 1С 2 примерно порядка. Это если не учитывать время на поднятие ком-коннектора (т.е. если держать его все время поднятым). А уж какое - нибудь слияние контрагентов как бы чудно проистекало -апдейтнул ссылки во всех таблицах, и спи-отдыхай (только итоги потом в регистрах пересчитать....).
...
Рейтинг: 0 / 0
Как на VBScript выставить счет в 1С?
    #35850572
Обиды нету. Но негатива действительно идет много.
Я так и спрашивал в начале - или так или через объекты для восьмерки.
Если ни кто не будет "делать деньги", как вы говорите (хотя я бы лично сказал "делать общественно-полезный и востребованный труд" прежде всего), то у специалистов работы не будет.
Ее и так мало стало, а специлистов желающих принимать участие в общем процессе "делания денег" просто уйма. И это действительно проблема.
...
Рейтинг: 0 / 0
Как на VBScript выставить счет в 1С?
    #35850653
VoditelKobyly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Иван Абрамов,
Изучайте 1С и работы будет с каждым днем всё больше и больше.
...
Рейтинг: 0 / 0
Как на VBScript выставить счет в 1С?
    #35852253
Егоров Александр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван АбрамовИнтересно, что с другими системами интеграция посредством ADO и VBA делается станадртно без проблем (тот же MS Outlook или MS CRM к примеру с его БД SQL Server)
и только в 1С свой язык, уже воспитавший класс спецов, не допускающих мысли использования БД 1С из вне.
Тут просто дело в том, что разработчикам 1С не пришло в голову сделать отдельное API для возможности интеграции без запуска 1С. Скажите спасибо, что есть возможнось запуска через OLE - ведь могло и этого не быть :) С другой стороны "прямая запись в таблицы" - не очень удачный путь для интеграции (если, конечно, от производителя нет точного описания такого метода). Ведь базу того же outlook (файлик *.pst, например) вы напрямую тоже не модифицируете, а используете вызовы функций MAPI. Или вызов самого outlook-а через тот же CreateObject("Outlook.Application"). То есть используете только те методы, которые предусмотрены разработчиком, Вас же это не коробит в случае с outlook? :)

С другой стороны, просто создать документ в 1С - это действительно достаточно просто и через прямую запись в базу 1С (особенно если база SQL и не вдаваясь в подробности парсинга dds или md). Но для 1Са этот документ будет иметь статус "непроведен". Для его корректного "проведения" Вам уже будет мало знать структуру таблиц, Вам еще надо будет знать алгоритм проведения. А эти алгоритмы модифицируется 1Сом гораздо чаще, чем структура таблиц.

В свое время ходил по тем же граблям - интеграция с 1С методом прямой записи в таблицы :) В результате пришел к выводу, что либо экспорт\импорт через пользователя, если это какая-то регламентная процедура, ежемесячная заливка учетных данных в Бухгалтерию, например. Либо некий сервис, который при старте поднимает 1Ску по OLE для каких-либо онлайновых транзакций.

С дургой стороны, онлайновые транзакции с 1Сом нужны только тогда, когда основной учет ведется в самой 1С, а та же выписка счетов - во внешней программе. У Вас, как я понял, основной учет ведется в собственной программе. В связи с этим вопрос, в какую именно 1С (с точки зрения вида учета) Вам надо переночить счета и почему это надо делать обязательно онлайн? Если онлайн не особо и нужен, что мешает сделать наоборот - стандартизировать интерфейс выгрузки счетов из Вашей системы и нагенерить кучу ert-шек под каждую типовую конфу?
...
Рейтинг: 0 / 0
Как на VBScript выставить счет в 1С?
    #35852290
Егоров Александр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван АбрамовЕсли ни кто не будет "делать деньги", как вы говорите (хотя я бы лично сказал "делать общественно-полезный и востребованный труд" прежде всего), то у специалистов работы не будет.
Ее и так мало стало, а специлистов желающих принимать участие в общем процессе "делания денег" просто уйма. И это действительно проблема.

"общественно-полезный и востребованный труд" не должен быть бессмысленным. Иначе этот труд никто не захочет оплачивать, ибо к "деланию денег" он, обычно имеет весьма отдаленное отношение.

У меня есть рабочий перенос Торговля (практически самописная) -> Бухгалтерия (практически типовая). Методом "прямой записи". :) Перенос строго односторонний, вся первичка и справочники заносятся в Торговле. Справочники обновляются онлайново через триггеры и синхронизируются через доп. таблицы по ID. Документы переносятся регламентной обработкой в бухии через прямую выборку из вьюх, в которых структура Торг-документов приведена в соответствие с Бух-структурой и через "прямую запись" в Бух-таблицы и штатным запуском Док.Провести(). Так же связаны по IDDOC. Получен выигрыш в скорости переноса примерно на порядок, "правила переноса" - суть скрипты TSQL, который лично мне нравится больше, чем язык 1С :) и регламент переноса свелся в нажатию единственной кнопки в единственной программе ().
Это как бы плюсы. Теперь считаем, из моего отчета боссу:
» во что это обошлось конторе, получилось:
» стоимость внедрения:
» 25000/24*17=17708р
» стоимость владения:
» 35000/24/8*2 = 364,58 р в месяц.
» стоимость сопровождения:
» 25000/24/8*0,5 = 65,11р - подключение 1-го нового
» документа\справочника
» 25000/24/8*3,5 = 455,73р - проверка изменений при обновлении
» конфигурации 1С:Бухгалтерия
» Проверка изменений производтся автоматически, и не требует участия
» человека (при условии, если элементы метаданных не удаляются, а
» только изменяются\добавляются), иначе - доп. 25000/24/8*3,5 = 455,73р
» на проверку.

А теперь минусы. Новые релизи конфы 1С и "хотелки" бухов практически убили начальный "конструктор" (обработка в Торговле, генерирующая скрипты TSQL) - мне проще напрямую в EM модифицировать полученные объекты TSQL, чем постоянно отлаживать "конструктор" и поддерживать его актуальность. Но самый большой минус - попытка посмотреть как этот перелив поведет себя на конфигурации, например УСН, потребует практически заново заплатить 17708 :)
...
Рейтинг: 0 / 0
Как на VBScript выставить счет в 1С?
    #35853767
Егоров Александр,
спасибо за ваш ответ. У многих моих клиентов ситуация такова: две (или даже более) ученых систем. В отделе продаж - CRM (моя или другая), в бухгалтерии 1С (можно продолжить - в библиотеке фирмы - "Учет книг", у сисадмина "Учет компьютеров" ...)
При этом часто 1С используется только для бухучета и сдачи отчетности, а основной системой ведения бизнеса (работа с клиентами, договора, услуги...) - другая система. При этом в отделе продаж у менеджеров 1С даже не установлена (и не должна быть установлена по соображениям безопастности). Вопрос, как менеджеру нажать кнопку в CRM-системе, чтобы создался счет в БД 1С без запуска 1С? Должен быть где-то поднят Application Server (или подозреваю, что в терминах 1С он называется как-то по-своему). Но это уже сложности. Я не хочу, чтобы мне задавали вопросы "как поднять 1С коннектор" и прочими не по моему ПО. Насколько я думал, простой способ - это аккуратное добавление записи в БД 1С. Один инсерт в нужную таблицу с минимальным количеством полей. То, что данный документ не будет проведен, так это даже лучше, бухгалтер уже вручную проведет и будет видеть счета, добавленные менеджерами. Дорабатывать эту интеграцию уже более правильно будет специалист клиента.
Последующие апгрейды 1С врят ли сильно затронут структуру этой таблицы. Всегда будут такие общие поля как "Наименование контрагента", "ИНН", "Адрес" ... Да даже, если и сломается INSERT потом, когда-нибудь - это не страшно. Мне важно, чтобы был пример взаимодействия. Еще хочется синхронизацию контрагентов потом прикрутить...
...
Рейтинг: 0 / 0
Как на VBScript выставить счет в 1С?
    #35853914
Александр, вы можете связаться со мной для обсуждения цены реализации данной задачи тем или иным способом: email: info@simple-soft.ru, tel: +7 921 9434940, +7 911 2386682, +7 812 4420640
Если вам это интересно.
...
Рейтинг: 0 / 0
Как на VBScript выставить счет в 1С?
    #35854752
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван Абрамов Всегда будут такие общие поля как "Наименование контрагента", "ИНН", "Адрес"
Какой адрес? Почтовый, Юридический, фактический, для доставки?
...
Рейтинг: 0 / 0
Как на VBScript выставить счет в 1С?
    #35854832
Егоров Александр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван АбрамовПри этом часто 1С используется только для бухучета и сдачи отчетности, а основной системой ведения бизнеса (работа с клиентами, договора, услуги...) - другая система.Именно поэтому онлайновый обмен с 1С только для БУ не имеет смысла - гораздо проще (и дешевле!) регламентная загрузка документов средствами самой 1С, с прямым доступом к данным именно основной системы ведения бизнеса.
Иван АбрамовДолжен быть где-то поднят Application Server (или подозреваю, что в терминах 1С он называется как-то по-своему). Но это уже сложности. Я не хочу, чтобы мне задавали вопросы "как поднять 1С коннектор" и прочими не по моему ПО.
Это-то как раз и будет "Ваша пробелма". Так как в 7-ке сервера приложений вообще не существует, а в 8-ке прямое соединение с сервером приложений точно так же закрыто, как и прямая запись в базу - подключиться к 8-му серверу штатно можно только штатной же 1Ской или ихними штатными "web-расшиерниями". В любом случае именно со стороны Вашего софта должен быть некий "коннектор 1С", который обеспечит минимальный API для передачи данных в 1С.
Иван АбрамовДорабатывать эту интеграцию уже более правильно будет специалист клиента.
Последующие апгрейды 1С врят ли сильно затронут структуру этой таблицы. Всегда будут такие общие поля как "Наименование контрагента", "ИНН", "Адрес" ... Да даже, если и сломается INSERT потом, когда-нибудь - это не страшно. Мне важно, чтобы был пример взаимодействия. Еще хочется синхронизацию контрагентов потом прикрутить...
Это уже говорит, что сильно внутрь 1Са вы не заглядывали. Подумайте, почему до сих пор не существует каких либо универсальных средств интеграции с 1С? Дело в том, что общие поля как "Наименование", "ИНН", "Адрес" в разных конфигурациях могут лежать в разном виде, в разных таблицах, в периодических реквизитах, в регистрах и прочее. И узнать это без чтения метаданных (для 77 - вообще не имеющих штатных средств расшифровки структуры БД) невозможно. И даже зная "принцип хранения" не всегда можно гарантировано корректно записать в 1С информацию напрямую.
...
Рейтинг: 0 / 0
Как на VBScript выставить счет в 1С?
    #35854834
Егоров Александр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван АбрамовАлександр, вы можете связаться со мной
Ушло письмо.
...
Рейтинг: 0 / 0
Как на VBScript выставить счет в 1С?
    #35855134
Stix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
для 8.1
примерно так
Код: plaintext
1.
2.
3.
4.
5.
6.
....
Set v81 =  CreateObject("V81.Application") 
res = v81.Connect("Srvr = Diamond;Ref = 1c_upp_spb;Usr=Администратор_Арх;Pwd=ляляллялял")
V81.Visible=True
set obr = V81.ExternalDataProcessors.Create("c:\at\1.epf")
.....

где 1.epf обработка которая вводит какой то документ на основе внешних данных dbf, txt и т.д.
в данном случае отрабатывает дефолтовое действие на форме
...
Рейтинг: 0 / 0
Как на VBScript выставить счет в 1С?
    #35855258
Stix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван АбрамовКто-то сказал "интеграторы мля", а я сказал "спецы блин". Так кто первый начал негатив раскачивать? Вот так всегда и бывает. Когда уважаемые люди ... ну очень уважаемыми становятся. Можно и нанять спеца 1С. Только я хотел сам на VB данную задачу решить. Это даже не конкретная задача, а так, просто пример кода интеграции в виде .VBS файла для включения в публичный дистрибутив, даже не обязательно рабочий. Клиенту если будет надо, он подточит весть этот элементарный код под себя, под свою конфигурацию или напишет файл .ert.
Спец конечно будет делать. В комплекте 1С есть стандартные простые конфигурации, вот для стандартной конфы я и думал написать простейший код, выставляющий счет. Может быть еще проще что-то можно придумать? Ну, синхронизация контрагентов, может это проще?
Интересно, что с другими системами интеграция посредством ADO и VBA делается станадртно без проблем (тот же MS Outlook или MS CRM к примеру с его БД SQL Server) и только в 1С свой язык, уже воспитавший класс спецов, не допускающих мысли использования БД 1С из вне.
Ну, успехов вам, дорогие мои! Не ошибитесь в глобальном плане.
Передай привет не нам, а Нуралиеву.
...
Рейтинг: 0 / 0
Как на VBScript выставить счет в 1С?
    #35862157
nicktcher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VoditelKobylyДа, в догонку.
Иногда лучше быть спецом сидящим в одном своем огороде, чем быть везде не понятно кем. Хотя всё это болтология. Если просите у кого помощи, то по крайней мере не ругайтесь, никто не обязан вам её предоставлять. Здесь вам не ваши подчиненные. Здесь все уважаемые люди.

Согласен со всем за исключением слова "Иногда". Предлагаю заменить на "Всегда"))
...
Рейтинг: 0 / 0
Как на VBScript выставить счет в 1С?
    #35862203
nicktcher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Егоров Александр
...
Тут просто дело в том, что разработчикам 1С не пришло в голову сделать отдельное API для возможности интеграции без запуска 1С. Скажите спасибо, что есть возможнось запуска через OLE - ведь могло и этого не быть :)

Странная фраза, Александр. Разработчики 1С сделали платформу как полноценное COM-приложение. А это и есть промышленный стандарт для обмена данными в гетерогенных средах. Чего ещё нужно? Какой API? Модель доступа OLE Automation Server/Client - это, вообще говоря и есть API. Насчет прямого доступа - вот тут на тонкого. Экспериментировать в обход платформы, безусловно, не стоит. Надо очень хорошо осознавать, что делаешь. Но можно, в принципе. Всё от задачи зависит: Если надо справочники перегнать, то почему бы и нет. Структуру таблиц 1С в БД можно вытащить встроенной функцией. Если предполагается работать с одной и той же БД, то ничего проблемного тут нет. А дальше, подключайтесь по ADO напрямую и вперед.
А вот документы - тут тока через OLE. Другого не дано)
...
Рейтинг: 0 / 0
Как на VBScript выставить счет в 1С?
    #35863623
Егоров Александр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nicktcher,

За возможность запуска 1С по OLE ж вроде даже спасибо сказал :) Но давайте разберемся.
И чтобы не было путаницы в терминах: под API я понимаю некий отделенный от самого приложения документированный функционал, позволяющий работать с данными без вызова самого приложения. Пример - тот же MAPI, позволяющий работать с данным Outlook без вызова outlook.exe. Замечу, что MAPI при этом не распространяется как отдельный пакет.
У автора задача по событию своего приложения передать счет в 1С - это загрузка всей 1Ски со всеми ее обработками при загрузке. Долго и требует наличия 1Ски на этом же компьютере. (говорю сейчас только про 77, если в 8-ке это не так, поправьте). Далее, если я пишу в своем приложении что-то типа
Код: plaintext
1.
2.
3.
4.
 
Set v7=CreateObject("v77.application")
Res=v7.Initialize(v7.rmtrade,"","")
Doc=v7.CreateObject("Документ.Счет")
то... откуда я узнаю структуру этого документа в данной конфигурации? откуда я узнаю, что такой документ в этой конфигурации вообще есть? Сделать базовый скрипт под какую-либо типовую конфигурацию и у каждого клиента его рихтовать? Либо ограничить интеграцию только с теми клиентами, которые сидят на типовых конфах?

nicktcherМодель доступа OLE Automation Server/Client - это, вообще говоря и есть API Согласен. Но к 1С это применимо лишь как API платформы . К конкретным же конфигурациям, увы... на мой взгляд далеко им до "промышленных стандартов". А ведь существуют еще и штатные обновления типовых конфигураций, которые не гарантируют от появления у документа новых реквизитов (которые, кстати, все обязательные), и ваш скрипт тоже потребует дополнительной рихтовки.
...
Рейтинг: 0 / 0
Как на VBScript выставить счет в 1С?
    #35872898
Enot5467
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Может все таки проще сделать промежуточное хранилище для выгруженных из CRM данных + фоновое задание у сервера 1С на чтение этих данных (конечно, это только 1С: 8.х)? Тогда сразу отпадает сложности в изучении структуры 1С, нет привязанности к конфигурации и тем более обновлению. А так же отсутствует зависимость от типа платформы (файловая, MS SQL, PostgreSQL, DB2).
...
Рейтинг: 0 / 0
Как на VBScript выставить счет в 1С?
    #35872989
Егоров Александр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Enot5467,

Это возможно только для 8-ки, установленной с сервером приложений. Для 77 "сервер 1С" придется писать самому. Или забить на время запуска 1Ски по OLE при каждом обмене. Можно прикрутить и какую-нить Консолидацию или ОбменДанными. Но... смысл в том, что инициатором обмена всегда будет 1С. И от конфигурации 1С будет зависеть структура требуемых данных. Так же как и структура выгружаемых данных. Двухступенчатый же обмен, когда таже CRM выгрузила, а 1Ска потом подобрала (и наоборот) очень подходит для обмена данными с Бухучетом - там онлайн не нужен. А если внешняя система - это компонент Оперативного учета, то без онлайна не обойтись. А тормознутость обмена с 1Ской через OLE\COM и отсутствия альтернативы постоянно провоцирует желание читать данные напрямую из таблиц 1С. И даже писать в её таблицы. :) И, думаю, без дополнительного погружения в конфигурацию все-таки не обойтись. Построение cущности "Клиент" во внешней CRM может существенно отличаться от построения этой же сущности в конфигурации 1С, и наоборот. 1Су может требоваться какие-то классификаторы, напрочь отсутствующие в 1С, и наоборот.
...
Рейтинг: 0 / 0
Как на VBScript выставить счет в 1С?
    #35872999
Enot5467
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Егоров Александр,

Ну да, с 7 немного не так надо рассуждать. В любом случае есть смысл поискать альтернативу "записи напрямую в базу". Просто видел одну контору (не соврать, уже 5 лет воюет), где изначально начали писать все напрямую в базу. По мере расширения перешли на СКЛ, теперь бьются с переходом на 8. В общем там программисты по принципу "мыши плакали, кололись, но продолжали есть кактус".
...
Рейтинг: 0 / 0
Как на VBScript выставить счет в 1С?
    #35873029
Егоров Александр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Enot5467,

Если в конкретную конфу, да еще и на движке Торговли - прямая запись самое оно ;) Я и сам так у себя сделал, правда 5 лет - это, конечно, перебор. Вместе с изучением структуры Торговли ушло чуть больше месяца. :) Для Бухгалтерий же прямая запись, особенно извне - действительно кактус. При желании, конечно, можно и в бухдвижек напрямую писать, но... бухам обновили релиз, появился новый счет\субконто\перечисление и... начинаем есть кактус заново :)
C дургой стороны, если у вас оперативный\управленческий учет в другой программе, для чего тогда нужна Торговля? Только если это какая-то часть КИС, дополняющая штатную Торговлю, функционал которой проблематично реализовать в той же 1С. Но наличие многокомпонентных КИС с разнородными и несостыкованными модулями - показатель, что пора задуматься о собственом ИТ отделе. Или, если он есть, о разумности его содержания в том составе, который привел к появлению мышек, основные функции которых - поедание кактусов :) Хотя я тоже знаю у нас конторы, в которых есть должности типа "оператор обмена 1С" - причем доведено до такого безо всяких "прямых записей", штатный УРИБ, базы dbf, никаких изысков... просто баз очень много и разных... Ну и соответственно есть "ревизионный отдел", который разгребает косяки учета товаров, допущенных в результате косяков обмена. :)
...
Рейтинг: 0 / 0
Как на VBScript выставить счет в 1С?
    #35873126
Enot5467
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Позволю себе еще одно дополнение:
Многие решают трудозатраты программистов добавлением еще одного сервера стоимостью 7000 рублей (обычная раб.станция), где крутится копия 1С выполняющая роль загрузки данных. При чем скорости достигаются очень даже хорошие. И это при условии, что нет привязке ни к платформе ни к узконаправленными программистам
...
Рейтинг: 0 / 0
Как на VBScript выставить счет в 1С?
    #35873609
Егоров Александр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Enot5467,

Продавливать железом неповоротливость 1Ски - это само собой :) На сотню рабочих мест восемь серваков разной степени крутости - видел такое :) Как бы еще объяснить то, что при переходе на новую систему, в которой дублируется функционал преждней системы, добавляется еще куча функционала, из которого остро востребован только один модуль, и под все это удовольствие требуется два новых сервака общей стоимостью под $3000? Это не считая полугодового срока внедрения, на два порядка большей стоимости лицензий и опять таки дописки отсутствующего функционала самостоятельно потом, или согласие на растягивание внедрения еще на полгода...
...
Рейтинг: 0 / 0
Как на VBScript выставить счет в 1С?
    #35873729
trdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Господин ПЖкогда за вами будут бегать бухи с намереньем вырвать кадык за разрушенную базу - вспомните эту ветку...

"интеграторы" мля...
+500
...
Рейтинг: 0 / 0
Как на VBScript выставить счет в 1С?
    #35873756
trdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван АбрамовПри этом в отделе продаж у менеджеров 1С даже не установлена (и не должна быть установлена по соображениям безопастности).
упал со стула....
...
Рейтинг: 0 / 0
Как на VBScript выставить счет в 1С?
    #35873788
Enot5467
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Егоров Александр,

Может и так, может и не поворотливая по сравнению с другими системами. Только тут надо выбирать (по моему мнению) немного другой уровень абстракции. Ведь рассуждаю о возможностях СКЛ сереверов и ОЛАП кубов, мы же не вспоминаем какой-нибудь ассемблер или голый С, хотя на них обработка данных будет еще быстрее. (кажется я опять в лирику ухожу) Просто встает вопрос: зачем делать сложнее, дороже и не понятней, при этом по скорости не быстрее? Разве только для саморазвития. К тому же я не видел еще ни одного собственника, которому интересно как сервера устроены. Скорее собственник деньги будет считать, нежели нюансы админства/программирования.
А еще бухов жалко после таких "писателей", когда вместо 15 минутного обновления они видят несколько дней экспериментов. При чем постоянно что-то не работает...
Хороший пример с калькулятором: садясь за рабочее место, мы же не задумываемся как реализована логика логического ИЛИ, или какой ток идет с солнечной батарее. Другими словами калькулятор это черный ящик с кнопками. Ни у кого даже в мыслях не возникает припаять туда датчик и измерять шаги. Так же и с 1С: все что снаружи (кнопки т.е.) это можно делать в конфигураторе, а то что внутри, скорее всего будет лишним.
С другой стороны, если автор сделает универсальную систему по обмену/синхронизации данных со сверх высокой скоростью, то найдутся тысячи контор готовых ему заплатить.
...
Рейтинг: 0 / 0
Как на VBScript выставить счет в 1С?
    #35873801
Господин ПЖ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
такие люди есть... только они понимают чем занимаются... А не вопят "ну я же могу своими лапами залезть в базу outlook без прокладок".

http://softpoint.ru/
...
Рейтинг: 0 / 0
Как на VBScript выставить счет в 1С?
    #35875633
Егоров Александр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Enot5467Может и так, может и не поворотливая по сравнению с другими системами. Только тут надо выбирать (по моему мнению) немного другой уровень абстракции. Ведь рассуждаю о возможностях СКЛ сереверов и ОЛАП кубов, мы же не вспоминаем какой-нибудь ассемблер или голый С, хотя на них обработка данных будет еще быстрее. (кажется я опять в лирику ухожу) Просто встает вопрос: зачем делать сложнее, дороже и не понятней, при этом по скорости не быстрее?
В том то и дело, что на порядки быстрее. Рассуждения о возможностях SQL и OLAP - это не про 1С, она не использует эти возможности. Дело даже не в абстракциях, с этим 1Су как раз большой плюс за создание инструментов разработки под более высокий уровень абстракций. Дело как раз в том, как эти абстракции чисто технически реализованы.
Enot5467
К тому же я не видел еще ни одного собственника, которому интересно как сервера устроены. Скорее собственник деньги будет считать, нежели нюансы админства/программирования.
Как вы тогда объясняете то, что многие собственники по мере роста предпочитают отказываться от услуг франча и брать собственного 1Сника?
Как вы объясните огромное количество переписанных, написанных с нуля и просто "изнасилованных" конфигураций только лишь для того, чтобы не покупать по новому серваку каждый год?
Enot5467
А еще бухов жалко после таких "писателей", когда вместо 15 минутного обновления они видят несколько дней экспериментов. При чем постоянно что-то не работает...
Полностью согласен с вами. "Тот кто тронет конфу бухучета, тот в ней и погибнет!" :)
Интеграция с БУ и НУ должна быть такой, чтобы возможность обмена данными не требовала модификаций бухгалтерских конфигураций. Онлайновый обмен для бухов не нужен, скорость работы тоже. Возможностей платформы вполне достаточно реализовать какой угодно вариант загрузки данных.
Enot5467
Хороший пример с калькулятором: садясь за рабочее место, мы же не задумываемся как реализована логика логического ИЛИ, или какой ток идет с солнечной батарее. Другими словами калькулятор это черный ящик с кнопками. Ни у кого даже в мыслях не возникает припаять туда датчик и измерять шаги. Так же и с 1С: все что снаружи (кнопки т.е.) это можно делать в конфигураторе, а то что внутри, скорее всего будет лишним.
Что делать, если вечером на калькуляторе можно посчитать не более десятка сложений в минуту? Если для того, чтобы выполнять на нем сотню сложений требуется подставлять его под 100-ватную лампочку? а для умножения - под две? Особенно когда деньги на лампочки у вас уже есть, а на покупку калькулятора на батарейках еще нет?
...
Рейтинг: 0 / 0
Как на VBScript выставить счет в 1С?
    #35877613
Enot5467
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Егоров Александр,

Хорошо, оно все так и есть, я не против прочих технологий, т.к. сам постоянно 1С скрещиваю со всякими СКЛ-ми, вёрдами и прочим, что попадается. А еще программирую на ассемблере немного. Но при этом даже в мыслях не было переписать что-то СКЛ-ное, хотя там багов не мало. Взять тот-же контроль стека после каждого чиха, это же такая просадка в производительности. Или выделение памяти... когда для каждого модуля куча перевыделений, хотя соседние операции занимают практически одно и то же место.
Смысл в том, что для чего система делается, там и применяется. Ну а если есть желание и возможности что-то поулучшать, то есть готовые алгоритмы что-бы не залезть при этом в лужу. Например в случае с ситуацией автора, мне кажется эффективней сделать анализатор структуры базы для всех видов хранений, кроме файлового. Создать модуль по настройке переноса данных (типа Наименование переносить в наименование). Обязательно сделать контроль кода в модулях объектов, т.к. там часто располагается очень много логики. Добавить модуль котроля прав, обязательно вставить механизм разрешения коллизий. Ну и разработать исполняемую часть. И тогда все заработает без проблем. Только боюсь скорость будет еще медленнее 1С.
Может мы немного по разному это понимаем, а может и я не так изъясняюсь, но моё мнение остается прежним: либо получится быстро и ооочень криво, либо ровно, но очень долго
...
Рейтинг: 0 / 0
Как на VBScript выставить счет в 1С?
    #35878140
Егоров Александр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Enot5467Егоров Александр,

Хорошо, оно все так и есть, я не против прочих технологий, т.к. сам постоянно 1С скрещиваю со всякими СКЛ-ми, вёрдами и прочим, что попадается. А еще программирую на ассемблере немного. Но при этом даже в мыслях не было переписать что-то СКЛ-ное, хотя там багов не мало. Взять тот-же контроль стека после каждого чиха, это же такая просадка в производительности. Или выделение памяти... когда для каждого модуля куча перевыделений, хотя соседние операции занимают практически одно и то же место.
Смысл в том, что для чего система делается, там и применяется.
Ни разу не сталкивался с желанием что-то изменить в движке того же mssql :) Как-то вот всегда устраивала его скорость работы и требовательность к ресусрам. Речь идет не о мелкой шлифовки багов (которые есть в каждой сложной системе, и их наличие не зависит от языка, на котором система написана). Речь идет о том, что весьма несложной доработкой системы можно увеличить производительность системы на порядки, а не на проценты. Но при этом система снимается с поддердки производителем, что естественно. Но эта же система (говорю сейчас только про 77, и только про УУ) так или иначе всегда требует доработки (изменение процессов предприятия, появление новых, отмирание старых и т.д.) - система и так лишается поддержки производителем в большинстве случаев, почему бы помимо модернизации логики еще и не сделать оптимизацию? Которая в том числе снижает затраты на железо?

Enot5467Ну а если есть желание и возможности что-то поулучшать, то есть готовые алгоритмы что-бы не залезть при этом в лужу. Например в случае с ситуацией автора, мне кажется эффективней сделать анализатор структуры базы для всех видов хранений, кроме файлового. Создать модуль по настройке переноса данных (типа Наименование переносить в наименование). Обязательно сделать контроль кода в модулях объектов, т.к. там часто располагается очень много логики. Добавить модуль котроля прав, обязательно вставить механизм разрешения коллизий. Ну и разработать исполняемую часть. И тогда все заработает без проблем.
Я боюсь стоимость такой разработки превысит стоимость той самой программы автора, для которой требуется экспорт в 1С. :) Автору не нужна универсальность. Ему достаточно эскпоротировать один единственный вид документа.
Enot5467
Может мы немного по разному это понимаем, а может и я не так изъясняюсь, но моё мнение остается прежним: либо получится быстро и ооочень криво, либо ровно, но очень долго
Ну, не сказал бы что очень по разному. Просто получится быстро и красиво, но строго для одного конкретного релиза 1С. Универсальность же потребует либо модификации конфы, что нежелательно. Либо полноценной разработки и "реверс-инжиниринга" платформы, что долго, дорого, не совсем законно, и не сказать бы что особо востребовано. Тем, кому нужен быстрый обмен своих систем с 1С - сделают его сами. Тех, кому скорость обмена не особо важна - вполне устроят штатные средства обмена. Или "1С:Конвертация данных", или "1С:Консолидация". Здесь основная проблема это то, что платформа 1С запрещает прямой доступ к данным, но не предоставляет никакого API для взаимодействия с конркетной конфигурацией без запуска всей платформы по OLE\COM. Из-за чего не получается сделать "универсально, быстро и красиво".
...
Рейтинг: 0 / 0
Как на VBScript выставить счет в 1С?
    #35879449
Enot5467
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Егоров Александр
Ни разу не сталкивался с желанием что-то изменить в движке того же mssql :) Как-то вот всегда устраивала его скорость работы и требовательность к ресусрам
Не поверите, 1С-ники тоже ни когда не задумываются о том, что можно что-то ускорить методом "влезть в СКЛ" пока сами не залезут в эти системы. А так же подойдите к любому толковому ассемблеристу (либо очень толковому сишнику) и послушайте, что они скажут о мс скл :) особенно про интерфейс связи.
Еще раз повторюсь: кто в чем силен, тот там и ваяет иногда невозможное. Если автор так решит проблему и при этом все будет тип-топ, то скорее у него другие учиться попробуют. В наше время нормальных специалистов что-то очень мало осталось.
...
Рейтинг: 0 / 0
Как на VBScript выставить счет в 1С?
    #35901798
Фотография badboychik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тоже вставлю свои 5 рублей :)
Во-первых, в v8 при соединении через СОМ сама 1С НЕ запускается. Запускается легкий COМ-сервер, за пару секунд (на слабом компе). А остальное уже дело техники. Я ради интереса писал создание документа через скрипт на Python-е... Довольно шустро, только есть свои тонкости в работе со ссылочными реквизитами - на мисте.ру есть статья про СОМы, все описано.
Во-вторых, если делать офф-лайн обмен, удобней наверно сделать в сетке промежуточный SQLEXPRESS-сервак для хранения выгруженных данных. Наглядно, доступно, бесплатно и быстро.
В-третьих, регламентные задания в 7.7 есть, я видел в конфиге "Астор" такое... правда не знаю как сделано... возможно подключаемой ДЛЛ-кой... это тоже не проблема. В файловой восьмерке они тоже есть, и без шаманства.

В итоге вы запускаете свой скрипт, он выгружает счета в СКЛ-базу, 1С8 по заданию каждые 10 минут проверяет и сливает обработкой к себе, удаляя из базы или сливая в отдельную таблицу-архив.
ИЛИ: Скрипт сразу цепляется по СОМ к 1С и вливает в нее счета... но так помедленнее будет изза ожидания их проведения хотя бы, поэтому если 1С на другом компе то лучше быстро слить в СКЛ-базу и пусть 1С сама потом подключается и забирает, тормозя свой а не наш комп :)

а это жесть все таки... INSERT INTO tblСчета (Number, Amount) VALUES (1, 10000)
Человек наверно не заглядывал в DD файл :)
вот парсер DD файла для примера... и это только названия таблиц... поля еще страшнее... да еще хранятся по хитрому
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
#язык - python :)
import re
from operator import truth

tab  = ''
name = ''
s=' '
f = open(filepath,'r')
while s!='\n':
    s = f.readline()
    if truth(re.search('#==TABLE ',s)):
        tab = s.split(':')[ 1 ].strip()
        # Убираем описания ТЧ и движений, т.к. их коды дублируются
        if truth(re.search('(Мн\.ч\.)|(Дв\.)',tab)):tab=''
        tab = tab.replace('ник ','ник.')
        tab = tab.replace('ент ','ент.')
    r = re.search('T=(\w+)',s)
    if truth(r):
        name = r.group( 1 )
        #Шаблон вывода. Можно модифицировать как надо
        if tab!='': print '%-8s \t%s\n' % (name,tab),    
f.close()
...
Рейтинг: 0 / 0
Как на VBScript выставить счет в 1С?
    #35901893
Егоров Александр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
badboychik,

Восьмерку только начинаю крутить, про ее сервер уже знаю, но как быть с файловой конфой? Насколько я понял - в файловом варианте 8-ка также будет грузиться вся.
Для 77 "пакетный" режим работы - суть тот же запуск всего приложения, только не по событию извне, а по расписанию.
Да и парсер dd\dds еще не все - как быть с перечислениями, периодикой и прочим, чего найти можно только в md?

Смысл как раз и был - отговорить автора от прямой записи в таблицы 1С :) Особенно если требуется как можно более простой код. И особенно когда планируется взаимодейсвтие с разными конфигурациями 1C. :)
...
Рейтинг: 0 / 0
Как на VBScript выставить счет в 1С?
    #35901903
Фотография badboychik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторНасколько я понял - в файловом варианте 8-ка также будет грузиться вся.
нет, это в 7.7 только так она работает - через v7.application. А восьмерка может двумя способами - и так и через СОМ. Во втором случае полностью она не запускается. И не важно файловая она или серверная. А записать напрямую в файл восьмерки у человека и не получится никогда. там же не ДБФ а новый закрытый формат *.1СD.
Даже с SQL версией не разобраться, т.к. первым же инсертом порушится вся целостность.
...
Рейтинг: 0 / 0
Как на VBScript выставить счет в 1С?
    #35907851
Set2009
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Егоров Александрnicktcher,
Код: plaintext
1.
2.
3.
4.
 
Set v7=CreateObject("v77.application")
Res=v7.Initialize(v7.rmtrade,"","")
Doc=v7.CreateObject("Документ.Счет")
то... откуда я узнаю структуру этого документа в данной конфигурации? откуда я узнаю, что такой документ в этой конфигурации вообще есть? Сделать базовый скрипт под какую-либо типовую конфигурацию и у каждого клиента его рихтовать? Либо ограничить интеграцию только с теми клиентами, которые сидят на типовых конфах?


Ну вообще-то в 1С можно получить доступ к структуре метаданных без использования внешних компонент. И на Ваш вопрос ответ прост:
то... откуда я узнаю структуру этого документа в данной конфигурации?
Структура:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
  // Проверим есть ли такой документ
  if v7.Metadata.Документ("Счет").Выбран()> 0  then
    for i= 1  to v7.Metadata.ОбщийРеквизитДокумента() 
      Set Attr = v7.Metadata.ОбщийРеквизитДокумента(i) 
      // Свойства атрибута: Attr.Тип, Attr.Вид, Attr.Длина, Attr.Точность, Attr.Идентификатор
    next i
    Set Doc = v7.Metadata.Документ("Счет")
    for i= 1  to Doc.РеквизитШапки()
      Set Attr = Doc.РеквизитШапки(i) 
      // Свойства атрибута: Attr.Тип, Attr.Вид, Attr.Длина, Attr.Точность, Attr.Идентификатор
    next i
    for i= 1  to Doc.РеквизитТабличнойЧасти()
      Set Attr = Doc.РеквизитТабличнойЧасти(i) 
      // Свойства атрибута: Attr.Тип, Attr.Вид, Attr.Длина, Attr.Точность, Attr.Идентификатор
    next i
  end if

Точно так же можно получить доступ к структуре справочников и констант, удачи :)
...
Рейтинг: 0 / 0
Как на VBScript выставить счет в 1С?
    #35908920
Enot5467
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот еще:
Наблюдал конструкцию в виде отдельного модуля, обеспечивает связь между базами через промежуточный СКЛ сервер. Там же реализован обмен по ОЛЕ//КОМу. Так вот второе, на порядки медленнее на больших данных, например перепроведение квартала. А вот через промежуточное СКЛ-хранилище обмен быстрый. Один объект несколько секунд , за исключением тех, для кого нужны "долгие" внутренние алгоритмы (одно проведение ОРП чего стоит). Конечно, это не мгновенно, но все же очень быстро. Сама система сделана в виде настраиваемого модуля.
Плюсы: нет привязки к внутренней структуре. При изменении чего-то в метаданных обмен можно быстро перенастроить. Высокая скорость.
Тут-же протоколирование работ, свертка "почти одинаковых" элементов и еще там что-то.

Мне кажется нормальное решение и не дорого фирме обошлось
...
Рейтинг: 0 / 0
Как на VBScript выставить счет в 1С?
    #35909468
Фотография badboychik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторсвязь между базами через промежуточный СКЛ сервервот и я говорю, так оптимальнее. А особенно для постоянного обмена. Я делал так для обмена между переписанной торговлей 7.7 и типовой бухой 8.1
Удобно отлаживать, просматривать результаты... ну и свертки всякие делать хранимками.
...
Рейтинг: 0 / 0
Как на VBScript выставить счет в 1С?
    #35909652
Егоров Александр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Set2009,

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


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