Имя: Пароль:
1C
1С v8
Создание документа 1С77 из 1С8 используя внешние источники данных
0 woha
 
16.03.16
20:00
Помогите, пожалуйста, с созданием документа 1С77 из базы 1С8 не используя OLE. Таблицы базы 1С77 подключены к 1С8 как внешние источники данных. Сложность в том, что за документ отвечают три таблицы (общий журнал документов, таблица шапки и табличной части). Спасибо.
1 vip03
 
17.03.16
04:17
в чем сложность?
1. пишешь в журнал.
2. пишешь заголовок документа.
3. пишешь ТЧ документа.
2 VladZ
 
17.03.16
05:23
(0)  

Вcемирный конгресс врачей. На трибуне американский врач:
- Мы научились лечить СПИД!
Аплодисменты, крики...
На трибуне японский врач:
- Мы научились предотвращать инфаркты!
Крики, аплодисменты
На трибуне русский врач:
- А мы научились удалять гланды!
В зале недоумении, шум. Русский продолжает:
- Через ж0пу. Автогеном...
3 VladZ
 
17.03.16
05:33
Варианты решений:

1. В глобальном модуле 7.7 делаем глобальную процедуру формирования нужных документов по нужным параметрам. Через Оле запускаем и формируем. Получается, что на стороне 8ки будет только запуск (ну и параметры какие-то нужно передать). Само формирование будет на стороне 7.7.

2. Если религия не позволяет использовать Оле: делаем промежуточную базу данных (допустим на SQL). Из 8ки туда пишем. На стороне 7.7 периодически запускаем робота и формируем нужные документы по данным нашей новой БД.  И волки сыты и в колодец никто не наплевал! :)
4 PuhUfa
 
17.03.16
06:45
(3) Зачем лишнюю базу? можно просто xml выгружать а 77 будет ее всасывать потом
5 VladZ
 
17.03.16
06:58
(4)  Можно и так
6 Rie
 
17.03.16
07:33
(1) Сложность будет в п. 1 "пишешь в журнал".
7 Mikeware
 
17.03.16
07:39
а что, внешние источники данных научились и писать? не знал....
(6) да и тут сложности нет - залочил журнал, нашел максимальный ид по своему узлу распределенки (ну, или вызвал хранимку), записал хотя б пустышку с этим идом, разлочил. Ну а потом - пиши во все три таблицы
8 HawkEye
 
17.03.16
08:08
(0) пожалуйста, пиши еще.
9 woha
 
17.03.16
08:25
(7) можно "да и тут сложности нет - залочил журнал, нашел максимальный ид по своему узлу распределенки (ну, или вызвал хранимку), записал хотя б пустышку с этим идом, разлочил. Ну а потом - пиши во все три таблицы" поподробней?
10 Rie
 
17.03.16
08:27
(7) Те, для кого это не сложно - не задают подобных вопросов.
11 Rie
 
17.03.16
08:29
(9) Что именно непонятно?
У документов есть первичный ключ IDDOC. Его надо создать. Уникальный. И такой, чтобы при виде его 1С не пришла в ужас.
Данные документов хранятся в трёх таблицах - _1SJOURN, DH*, DT*.
12 Rie
 
17.03.16
08:30
Для РИБ надо ещё записать документ для выгрузки (если это надо).
13 Rie
 
17.03.16
08:32
Другое непонятно. Есть ведь штатные способы интеграции - OLE, КД и т.д. Зачем при этом обязательно на лыжах и в гамаке?
14 Mikeware
 
17.03.16
08:54
(10) согласен. Но плох тот чайник, который не мечтает стать самоваром.
(12) при проведении система сама распределит по правилам миграции.
(13) прямое создание - гораздо быстрее, чем оле. и синхронно, в отличие от кд и прочих. Хотя согласен насчет некоторой специфичнности данного вида секса...
15 woha
 
17.03.16
09:00
(11) Как создать уникальный ключ?
16 vip03
 
17.03.16
09:06
(15) в DH ищешь максимальный ИД и прибавляешь к нему 1
если РИБ + префикс базы
17 vip03
 
17.03.16
09:07
да. 1с хранит ид в 36 формате.
18 Mikeware
 
17.03.16
09:11
Функция ВернутьНовыйИдОбмена() Экспорт
    НовыйИд=ЗапросСКЛ.ВыполнитьСкалярный("select ltrim(dbo.convert10to36(max(dbo.convert36to10(left (iddoc,6)))+1)+'CB ') from _1sjourn ");
    Возврат НовыйИд;
КонецФункции
19 woha
 
17.03.16
09:16
(16) (17) (18) Спасибо, попробую.
20 Ёпрст
 
17.03.16
09:17
(18) проще уж через sqllock + НовыйИД()
21 woha
 
17.03.16
09:17
(20) это как?
22 Ёпрст
 
17.03.16
09:17
Хотя, для снеговика, ему всё равно придётся делать это руками
23 woha
 
17.03.16
09:17
exec sp_executesql N'Insert into _1SJOURN values( P1,@P2,@P3,@P4,@P5,@P6,@P7,@P8,@P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,@P20,@P21,@P22,@P23,@P24,@P25,@P26,@P27,@P28,@P29,@P30,@P31,@P32,@P33,@P34,@P35,@P36,@P37,@P38,@P39,@P40)', N'P1 int,@P2 varchar(9),@P3 int,@P4 smallint,@P5 varchar(23),@P6 varchar(18),@P7 varchar(20),@P8 tinyint,@P9 bit,P10 int,P11 int,P12 bit,P13 bit,P14 bit,P15 bit,P16 bit,P17 bit,P18 bit,P19 bit,@P20 bit,@P21 bit,@P22 bit,@P23 bit,@P24 bit,@P25 bit,@P26 bit,@P27 bit,@P28 bit,@P29 bit,@P30 bit,@P31 bit,@P32 bit,@P33 bit,@P34 varchar(9),@P35 varchar(9),@P36 varchar(50),@P37 tinyint,@P38 tinyint,@P39 tinyint,@P40 tinyint', 0, ' 8XYCUOFC', 7671, 1, '2016031676IEV4 8XYCUOFC', '      76712016    ', '88565819            ', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '     0   ', '     0   ', '                                                  ', 0, 0, 0, 0

я так понимаю это инсерт в таблицу журнала
24 Mikeware
 
17.03.16
09:24
(19) учти, что "CB " в (18) - это ид текущего узла рбд. если распределенки нет, тогда проще
Функция ВернутьНовыйИд() Экспорт
    НовыйИд=ЗапросСКЛ.ВыполнитьСкалярный("select ltrim(dbo.convert10to36(max(dbo.convert36to10(iddoc))+1)) from _1sjourn ");
    Возврат НовыйИд;
КонецФункции
25 Ёпрст
 
17.03.16
09:25
(24) ааа.. ща спросит еще, где текст хранимки convert10to36
)
26 Mikeware
 
17.03.16
09:28
(25) мля...
27 woha
 
17.03.16
10:24
(24) "НовыйИд=ЗапросСКЛ.ВыполнитьСкалярный("select ltrim(dbo.convert10to36(max(dbo.convert36to10(iddoc))+1)) from _1sjourn "); "
без оле чем это можно выполнить?
28 Ёпрст
 
17.03.16
10:26
(27) ado
29 Ёпрст
 
17.03.16
10:26
и.. в (24) нет оле, если что
30 ДенисЧ
 
17.03.16
10:29
(28) А что, адо это уже не оле? )))
31 Mikeware
 
17.03.16
10:35
(27) возьми сам текст запроса, да выполни..
32 woha
 
17.03.16
11:02
(31) Спасибо
33 Mikeware
 
17.03.16
11:10
(32) взлетело?
34 woha
 
17.03.16
13:42
(33) еще руки не дошли. как только доделаю, то обязательно отпишусь как сделал.
35 woha
 
17.03.16
13:44
(3) Все это должно работать в веб-клиенте, а оле у меня не под ним не заработало. К тому же оле 1С77 не сериализуется. Нужно постоянно инициализировать при каждом новом вызове сервера.
36 mistеr
 
17.03.16
13:48
(35) На сервере это должно работать, а не в веб-клиенте.
37 woha
 
17.03.16
13:50
немного опишу суть всего. имеется база 1С77 в которой создают заказы и происходят отгрузки. нужно сделать возможность удаленного создания заказов с контролем свободных остатков. 1С8 выполняет роль веб-клиента, которая берет данные из (внешние источники данных) 1С77 и в результате должна записать в 1С77 готовый заказ и сделать это как можно быстрее (информация по остаткам оперативно меняется).
38 Serginio1
 
17.03.16
13:53
(37) Есть вариант обмена через TCP/IP.
http://catalog.mista.ru/public/238584/
39 mistеr
 
17.03.16
13:54
(37) RDP не проще ли настроить?
40 woha
 
17.03.16
13:58
(39)на удаленной машине запускается только одно приложение написанное на java и больше никакого интерфейса.
41 Serginio1
 
17.03.16
14:02
(40) А зачем тебе 8 ка, если ты можешь на java написать Вэб сервис или HTTP клиента?
42 Serginio1
 
17.03.16
14:06
(40) Проще завести сервер терминалов. Дешевле будет.
43 Mikeware
 
17.03.16
14:22
(38) через  TCP/IP - NetaInet и Rik_SQL прекрасно работают
44 Serginio1
 
17.03.16
14:35
(43) Дя я не против. Пусть использует, что хочет. Хоть Вэб сокеты. Только для его задачи проще использовать RDP
45 Garykom
 
гуру
17.03.16
14:41
(37) а может все таки изучить 1С 7.7 ? и внешнюю обработку к ней наваяти?
46 woha
 
17.03.16
16:21
(44) не запустится на удаленной машине RDP
47 Serginio1
 
17.03.16
21:30
(46) Это смотря как настроишь. Тут куча народу предпочитают терминальные сессии вместо вэб клиента
48 Лефмихалыч
 
17.03.16
21:49
(0) добавь в условия еще: "это надо делать ночью на болоте, стоя в гамаке с аквалангом" и пасьянс сойдется.
Ошибка? Это не ошибка, это системная функция.