1c и Delphi

Тема в разделе "1C и всё что с ней связано", создана пользователем -, 12 сен 2011.

  1. Гость

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

    Дайнеко Well-Known Member
    1C Team

    Регистрация:
    19 ноя 2009
    Сообщения:
    951
    Симпатии:
    0
    А как подключился? Если открыл файлы DBF, то нужно кропотливо разбираться со структурой файлов. Если через OLE, то без нания языка 1С не обойтись.
     
  3. Гость

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

    даблпост
     
  5. vitfil

    vitfil IT-интегратор

    Регистрация:
    2 апр 2004
    Сообщения:
    2.070
    Симпатии:
    0
    Структура таблиц описана в файле .DD или .DDS но вам это вряд ли поможет. Обычно это находят поиском.
     
  6. Allexei

    Allexei Well-Known Member

    Регистрация:
    2 май 2008
    Сообщения:
    322
    Симпатии:
    0
    Проще разобраться с работой по Оле. С циклами знакомы? Значит справитесь. Работа с Оле -
    http://lmgtfy.com/?q=1%D0%A1+7.7+%D0%BF%D0...D0%BF%D0%BE+OLE.

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

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

    Allexei Well-Known Member

    Регистрация:
    2 май 2008
    Сообщения:
    322
    Симпатии:
    0
    Самое простое. Подключился к 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.Номенклатура;
    }
    }
    --------------------
    Должно быть примерно так. Код не проверял так как на си ни дельфина на работе нет
     
  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;
    при выполнении выдает ошибку:
     

    Вложения:

    • ______.jpg
      ______.jpg
      Размер файла:
      54,7 КБ
      Просмотров:
      70
  10. Allexei

    Allexei Well-Known Member

    Регистрация:
    2 май 2008
    Сообщения:
    322
    Симпатии:
    0
    Попробуй в начале в 1С 77 конструктором запроса создать запрос, а потом его перенести в твою программу.
     
  11. Гость

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

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

    Paume Well-Known Member

    Регистрация:
    15 дек 2010
    Сообщения:
    110
    Симпатии:
    0
    Между этими строчками нужно вставить
    doc.ВыбратьСтроки();
    А потом в цикле doc.ПолучитьСтроку();
    Смотри первый пример
     
  13. Гость

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

    Paume Well-Known Member

    Регистрация:
    15 дек 2010
    Сообщения:
    110
    Симпатии:
    0
    doc.ВыбратьСтроки();
    while doc.ПолучитьСтроку()=1 do
    НазваниеВашейПеременной:=doc.Номенклатура;
    end;

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

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

    Paume Well-Known Member

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

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

    спасибо уже разобрался)
     
  18. KiR

    KiR НЕ шибка опытный програмер)
    1C Team

    Регистрация:
    11 сен 2007
    Сообщения:
    1.581
    Симпатии:
    0
    doc:=select.ТекущийДокумент;
    а двоеточие после doc точно нужно?
     
  19. Allexei

    Allexei Well-Known Member

    Регистрация:
    2 май 2008
    Сообщения:
    322
    Симпатии:
    0
    Это же ПАСКАЛЬ! Операция присваивания, если без двоеточия то это операция сравнения.
     
  20. Paume

    Paume Well-Known Member

    Регистрация:
    15 дек 2010
    Сообщения:
    110
    Симпатии:
    0
    Так поделитесь опытом - в чем же все-таки дело было?
     
Загрузка...

Поделиться этой страницей