• Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

  • CTF с учебными материалами Codeby Games

    Обучение кибербезопасности в игровой форме. Более 200 заданий по Active Directory, OSINT, PWN, Веб, Стеганографии, Реверс-инжинирингу, Форензике и Криптографии. Школа CTF с бесплатными курсами по всем категориям.

1c и Delphi

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

Guest

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

Дайнеко

А как подключился? Если открыл файлы DBF, то нужно кропотливо разбираться со структурой файлов. Если через OLE, то без нания языка 1С не обойтись.
 
G

Guest

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

vitfil

Структура таблиц описана в файле .DD или .DDS но вам это вряд ли поможет. Обычно это находят поиском.
 
A

Allexei

Проще разобраться с работой по Оле. С циклами знакомы? Значит справитесь. Работа с Оле -
.

В VB с 1С работал- ничего сложного, думаю с Дельфином то же самое.
 
G

Guest

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

Allexei

Самое простое. Подключился к 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

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;
при выполнении выдает ошибку:
 

Вложения

  • ______.jpg
    ______.jpg
    28,8 КБ · Просмотры: 541
A

Allexei

Попробуй в начале в 1С 77 конструктором запроса создать запрос, а потом его перенести в твою программу.
 
G

Guest

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

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

Guest

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

Paume

doc.ВыбратьСтроки();
while doc.ПолучитьСтроку()=1 do
НазваниеВашейПеременной:=doc.Номенклатура;
end;

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

Guest

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

Paume

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

Посмотрите здесь:
 
K

KiR

doc:=select.ТекущийДокумент;
а двоеточие после doc точно нужно?
 
A

Allexei

Это же ПАСКАЛЬ! Операция присваивания, если без двоеточия то это операция сравнения.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!