1c и Delphi

  • Автор темы Guest
  • Дата начала
G

Guest

#1
Доброго времени суток! я в 1С не силен но вот столкнулся с такой проблемой: имеется конфигурация 7.7 мне необходимо из делфи подключится к БД и выбрать все документы по реквизиту шапки "склад", а затем выбрать данные из табличной части, собсно подключение происходит нормально, а вот считать данные и условие проверки не выходит, подскажите как реализовать или дайте ссылочки где почитать инфу
 

Дайнеко

Well-known member
19.11.2009
951
0
#2
А как подключился? Если открыл файлы DBF, то нужно кропотливо разбираться со структурой файлов. Если через OLE, то без нания языка 1С не обойтись.
 
G

Guest

#3
подключаюсь через OLE, можно ссылочку как работать с базой 1с через открытие DBF файлов?
 

vitfil

IT-интегратор
02.04.2004
2 062
0
#5
Структура таблиц описана в файле .DD или .DDS но вам это вряд ли поможет. Обычно это находят поиском.
 
G

Guest

#7
непосредственно само подключение прошло нормально и список документов проссмотреть получается, мне хотелось бы чтобы подсказали синтаксис 1с который помог бы мне выбрать данные описанные в 1 посте
 

Allexei

Well-known member
02.05.2008
322
1
#8
Самое простое. Подключился к 1С, есть переменная ОдинС котороя содержит подключение:
1. Создадим выборку документов по складу:
Select= ОдинС77.CreateObject("Запрос");
2. Определим запрос к нашей базе
TEXT= "
|Период с '"+Date1+"' по '"+Date2+"';
|Обрабатывать НеПомеченныеНаУдаление;
|ТекущийДокумент = Документ.ОтчетККМ.ТекущийДокумент;
|НомерДок = Документ.ОтчетККМ.НомерДок;
|ДатаДок = Документ.ОтчетККМ.ДатаДок;
|Склад= Документ.ОтчетККМ.Склад.Код;
|Группировка НомерДок;
|Условие (Склад= """+ CODE+ """);";
Date1 и Date2 - периоды выборки, CODE - код интересуемого склада
3.Попробуем выполнить запрос
IF (Select.Выполнить(TEXT) = 0) Then
showMessage( "Не могу выполнить запрос к документам в 1С 7.7"); return 0;
endif
4. Если же запрос выполнился пройдемся по документам и строкам
while Select.Группировка(1) = 1 {
DOC= Select.ТекущийДокумент;
DOC.ВыбратьСтроки();
while DOC.ПолучитьСтроку() = 1 {
Tovar=DOC.Номенклатура;
}
}
--------------------
Должно быть примерно так. Код не проверял так как на си ни дельфина на работе нет
 
G

Guest

#9
procedure TForm1.Button3Click(Sender: TObject);
begin
select:=ole1c.CreateObject('Запрос');
textquery:='|Период с 01.05.11 по 01.09.11;';
textquery:=textquery+'|Обрабатывать НеПомеченныеНаУдаление;';
textquery:=textquery+'|ТекущийДокумент = Документ.ОтчетККМ.ТекущийДокумент;';
textquery:=textquery+'|НомерДок = Документ.ОтчетККМ.НомерДок;';
textquery:=textquery+'|ДатаДок = Документ.ОтчетККМ.ДатаДок;';
textquery:=textquery+'|Склад= Документ.ОтчетККМ.Склад.Код;';
textquery:=textquery+'|Группировка НомерДок;';
if select.Выполнить(textquery)=0 then
showmessage('ошибка!');
while select.Группировка(1) = 1 do begin
doc:=select.ТекущийДокумент;
doc.ПолучитьСтроку();
while doc.Номенклатура()=1 do
listbox2.items.add(Doc.Номенклатура);
end;
end;
при выполнении выдает ошибку:
 

Вложения

Allexei

Well-known member
02.05.2008
322
1
#10
Попробуй в начале в 1С 77 конструктором запроса создать запрос, а потом его перенести в твою программу.
 
G

Guest

#11
с датой разобрался выкидываает ошибку о несоответствии типов на этой строке

Код:
doc.ПолучитьСтроку();
 
G

Guest

#13
Код:
while select.Группировка(1) = 1 do begin
doc:=select.ТекущийДокумент;
doc.ВыбратьСтроки();
doc.ПолучитьСтроку();
while doc.Номенклатура()=1 do
....
end;
doc.ВыбратьСтроки(); все равно здесь ошибка выскакивает несооответствие типов
 

Paume

Well-known member
15.12.2010
107
0
#14
doc.ВыбратьСтроки();
while doc.ПолучитьСтроку()=1 do
НазваниеВашейПеременной:=doc.Номенклатура;
end;

Попробуйте еще скобки убрать...
 
G

Guest

#15
doc.ВыбратьСтроки();
на это строке ошибку выдает убрать скобки не помогает
 

Paume

Well-known member
15.12.2010
107
0
#16
Что конкретно вам нужно в запросе получить?
Может, стоит не документы перебирать, а в них еще цикл по номенклатуре делать, а сразу в запросе эту номенклатуру доставать?
Т.е. запрос перепишите по-другому. Тогда не нужно будет вообще использовать выбратьстроки() и получитьстроку().

Посмотрите здесь:
http://forum-1c.ru/index.php?topic=6861
 

KiR

НЕ шибка опытный програмер)
11.09.2007
1 581
0
#18
doc:=select.ТекущийДокумент;
а двоеточие после doc точно нужно?
 

Allexei

Well-known member
02.05.2008
322
1
#19
Это же ПАСКАЛЬ! Операция присваивания, если без двоеточия то это операция сравнения.