Пытаюсь сделать процедуру для заполения пустой базы 1С операциями из своих таблиц.
Застрял на записи ссылок на справочники товаров и контрагентов в табличной части накладных.
В 1С - новичек. Смотрите сами:
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.
CLEAR ALL
PUBLIC goV77, goTovar, goKlient, m.baza
m.baza= "c:\progra~1 \1cv77\fox"
goV77 = CREATEOBJECT('V77.Application') && Создаем объект и получаем ссылку на него
IF TYPE( "goV77" )# "O"
WAIT WINDOW "! Не удалось создать Объект 1С" NOWAIT
CANCEL
ENDIF
=goV77.Initialize(goV77.RMTrade, '/D' +m.baza+' /M', '') && Открытие базы данных
goTovar =goV77.EvalExpr('CreateObject("Reference.Номенклатура")') && Ссылка на справочник номенклатуры
goKlient=goV77.EvalExpr('CreateObject("Reference.Контрагенты")') && Ссылка на справочник контрагентов
WITH goTovar && Заполнение номенклатуры
.НоваяГруппа()
.Наименование = "Моя новая группа товаров"
.Записать()
.ИспользоватьРодителя(.ТекущийЭлемент)
FOR I= 1 TO 3
.new() && Новая запись
.Наименование = "Мой товар " + STR(I)
.Цена = 10 + I
.Себестоимость = 9 + I
.Записать()
ENDFOR
ENDWITH
WITH goKlient && Заполнение клиентуры
FOR I= 1 TO 3
.new() && Новая запись
.ИНН = "1234567890 " + ALLTRIM(STR(I))
.Наименование = "Мой Клиент " + STR(I)
.ПолнНаименование = "Мой Клиент (полностью)" + STR(I)
.Записать()
ENDFOR
ENDWITH
RELEASE goTovar, goKlient, goV77 && Выгрузка объектов
*******************************************************
*************** После выгрузки 1С *********************
CLOSE ALL
SET DEFAULT TO (m.Baza)
SELECT 0
** Все же выгрузка занимает некоторое время ...
** Нужно проверять освобождение 1С перед попыткой открытия ее таблиц
PUBLIC m.N_ACCESS
m.n_ACCESS= 0
ON ERROR DO Oshibki WITH ERROR()
USE SC656 && Таблица Номенклатура - проставляю тип= "Товар" и ЕдИзм= "шт"
REPLACE ALL ;
sp3804 WITH " 2XJ" , ;
sp2826 WITH " G" ;
FOR IsFolder# 1 NOOPTIMIZE && Эти коды определял экспериментально, что не есть хорошо !!
USE IN SC456
USE SC488 && Таблица Клиентура - проставляю тип= "Организация"
REPLACE ALL ;
sp489 WITH " DI" NOOP
CLOSE ALL
ON ERROR
** После обработки справочников снова открываем 1С для создания операций
PUBLIC goV77, goDOC
goV77 = CREATEOBJECT('V77.Application') && Создаем объект и получаем ссылку на него
IF TYPE( "goV77" )# "O"
WAIT WINDOW "! Не удалось создать Объект 1С" NOWAIT
CANCEL
ENDIF
=goV77.Initialize(goV77.RMTrade, '/D' +m.baza+' /M', '') && Открытие базы данных
goDOC=goV77.EvalExpr('CreateObject("Документ.ПоступлениеТоваров")') && Создаем ПН
WITH goDoc
FOR m.i= 1 TO 3
.New()
.DocNum= "ПН" +ALLTRIM(STR(m.i))
.DocDate=DATE()- 30 +m.i
**.Контрагент= "00000 "+ALLTRIM(STR(m.i)) && Эти варианты явно не катят
**.Контрагент=PADL(ALLTRIM(STR(m.i)), 6 ) &&
FOR m.k= 1 TO 3 && по 3 записи в каждой накладной
.NewLine()
**.Товар= "00000 "+ALLTRIM(STR( 4 +m.i)) && То же самое
**.Товар=PADL(ALLTRIM(STR(m.i+ 4 )), 6 )
.Количество= 10 *m.i
.Цена=m.i
.Сумма=.Количество*.Цена
.Всего=.Количество*.Цена
.НДС=ROUND(.Сумма* 18 /( 100 + 18 ), 2 ) && НДС в том числе
NEXT
.Write()
NEXT
ENDWITH
RELEASE goDOC, goV77 && Выгрузка объектов
*******************************************
PROCEDURE OSHIBKI
******************************************
LPARAMETERS m.merror
DO CASE
CASE m.merror= 1705 OR m.merror= 109 OR m.merror= 111 OR m.merror= 108 OR m.merror= 101 && OR m.merror= 3
** Проблемы при открытии и записи в таблицы
m.N_ACCESS=m.n_ACCESS+ 1
WAIT WINDOW ".. Ожидание освобождения таблицы .. " +STR(m.n_ACCESS)+ "%" TIMEOUT 0 . 1
IF m.N_ACCESS< 100
RETRY
ELSE
WAIT WINDOW ".. Продолжение работы невозможно .. Файл заблокирован .." NOWA
CANCEL
ENDIF
ENDCASE
Справочники и операции реально создаются, но не определяются ссылки (не знаю как) на элементы справочников.