@Xvir43

Запрос с 1с в Delphi как сделать?

Как перенести процедуру из 1С в Delphi?
1c
Процедура Отчет(ТабДок, КонецПериода, НачалоПериода, ПометкаУдаления) Экспорт
	//{{КОНСТРУКТОР_ВЫХОДНЫХ_ФОРМ(Отчет)
	// Данный фрагмент построен конструктором.
	// При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!

	Макет = ВнешнийОтчетОбъект.ПолучитьМакет("Отчет");
	Запрос = Новый Запрос;
	Запрос.Текст = 
	"ВЫБРАТЬ
	|	ЗаказПокупателяВозвраты.Номенклатура КАК Номенклатура,
	|	ПРЕДСТАВЛЕНИЕ(ЗаказПокупателяВозвраты.Номенклатура),
	|	ЗаказПокупателяВозвраты.Количество КАК Количество
	|ИЗ
	|	Документ.ЗаказПокупателя.Возвраты КАК ЗаказПокупателяВозвраты
	|ГДЕ
	|	ЗаказПокупателяВозвраты.Ссылка.ПометкаУдаления = &ПометкаУдаления
	|	И ЗаказПокупателяВозвраты.Ссылка.ВозвратНаличными = &ВозвратНаличными
	|	И ЗаказПокупателяВозвраты.Ссылка.ДатаОтгрузки >= &НачалоПериода
	|	И ЗаказПокупателяВозвраты.Ссылка.ДатаОтгрузки <= &КонецПериода";

	Запрос.УстановитьПараметр("КонецПериода", КонецПериода);
	Запрос.УстановитьПараметр("НачалоПериода", НачалоПериода);
	Запрос.УстановитьПараметр("ПометкаУдаления", ложь);
	Запрос.УстановитьПараметр("ВозвратНаличными", ложь);

	ИтоговаяТаблица = Запрос.Выполнить().Выгрузить();

	Запрос = Новый Запрос;
	Запрос.Текст = 
	"ВЫБРАТЬ
	|	ЗаказПокупателяТовары.Номенклатура КАК Номенклатура,
	|	ПРЕДСТАВЛЕНИЕ(ЗаказПокупателяТовары.Номенклатура),
	|	ЗаказПокупателяТовары.Количество КАК Количество
	|ИЗ
	|	Документ.ЗаказПокупателя.Товары КАК ЗаказПокупателяТовары
	|ГДЕ
	|	 ЗаказПокупателяТовары.Ссылка.ДатаОтгрузки >= &НачалоПериода
	|	И ЗаказПокупателяТовары.Ссылка.ДатаОтгрузки <= &КонецПериода
	|	И ЗаказПокупателяТовары.Ссылка.ПометкаУдаления = &ПометкаУдаления";

	Запрос.УстановитьПараметр("КонецПериода", КонецПериода);
	Запрос.УстановитьПараметр("НачалоПериода", НачалоПериода);
	Запрос.УстановитьПараметр("ПометкаУдаления", ложь);


	Результат=Запрос.Выполнить().Выбрать();
	Пока Результат.Следующий() Цикл
		НоваяСтрока=ИтоговаяТаблица.Добавить();
		НоваяСтрока.Номенклатура=Результат.Номенклатура;
		НоваяСтрока.Количество=Результат.Количество;
		
	КонецЦикла;
	
ИтоговаяТаблица.Свернуть("Номенклатура","Количество");
ИтоговаяТаблица.Сортировать("Номенклатура ВОЗР");	
	
	ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
	ОбластьПодвал = Макет.ПолучитьОбласть("Подвал");
	ОбластьШапкаТаблицы = Макет.ПолучитьОбласть("ШапкаТаблицы");
	ОбластьПодвалТаблицы = Макет.ПолучитьОбласть("ПодвалТаблицы");
	ОбластьНоменклатура = Макет.ПолучитьОбласть("Номенклатура");
	

	ТабДок.Очистить();
	ОбластьЗаголовок.Параметры.ДатаНачала=НачалоПериода;
	ОбластьЗаголовок.Параметры.ДатаКонца=КонецПериода;
	ТабДок.Вывести(ОбластьЗаголовок);
	ТабДок.Вывести(ОбластьШапкаТаблицы);
	 ИтогоКоличество=0;
	Для Каждого ТекСтрока из ИтоговаяТаблица Цикл
	ОбластьНоменклатура.Параметры.Номенклатура = ТекСтрока.Номенклатура;
ОбластьНоменклатура.Параметры.Количество =текСтрока.Количество;
 ИтогоКоличество=ИтогоКоличество+текСтрока.Количество;
ТабДок.Вывести(ОбластьНоменклатура);

	КонецЦикла;
	
	
	////////ТабДок.НачатьАвтогруппировкуСтрок();

	////////ВыборкаНоменклатура = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);

	////////Пока ВыборкаНоменклатура.Следующий() Цикл
	////////	ОбластьНоменклатура.Параметры.Заполнить(ВыборкаНоменклатура);
	////////	ТабДок.Вывести(ОбластьНоменклатура, ВыборкаНоменклатура.Уровень(),,ложь);

	////////	ВыборкаДетальныеЗаписи = ВыборкаНоменклатура.Выбрать();

	////////	Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
	////////		ОбластьДетальныхЗаписей.Параметры.Заполнить(ВыборкаДетальныеЗаписи);
	////////		ТабДок.Вывести(ОбластьДетальныхЗаписей, ВыборкаДетальныеЗаписи.Уровень(),,ложь);
	////////	КонецЦикла;
	////////КонецЦикла;

	////////ТабДок.ЗакончитьАвтогруппировкуСтрок();
	ТабДок.Вывести(ОбластьПодвалТаблицы);
	ОбластьПодвал.Параметры.ИтогоКоличество=ИтогоКоличество;
	ТабДок.Вывести(ОбластьПодвал);

	//////////}}КОНСТРУКТОР_ВЫХОДНЫХ_ФОРМ
КонецПроцедуры



Делаю так
delphi
Var
   doc,doc1:olevariant;
   sel_res,res12,tabl: variant;
   i,u:integer;
begin

  //Проверяем, существует ли соединение с 1Cv8
  if YesLinkToVariant(s1C8_ole) then
     begin
    doc:=s1C8_ole.NewObject('Запрос');
     doc.text:='ВЫБРАТЬ ЗаказПокупателяТовары.Номенклатура КАК Номенклатура, '+
      'ПРЕДСТАВЛЕНИЕ(ЗаказПокупателяТовары.Номенклатура) КАК НоменклатураСтрокой , '+
      'ЗаказПокупателяТовары.Количество КАК Количество ' +
      'ИЗ'+
      ' Документ.ЗаказПокупателя.Товары КАК ЗаказПокупателяТовары '+
     ' ГДЕ '+
     'ЗаказПокупателяТовары.Ссылка.ДатаОтгрузки >= &НачалоПериода '+
     'И ЗаказПокупателяТовары.Ссылка.ДатаОтгрузки <= &КонецПериода '+
     'И ЗаказПокупателяТовары.Ссылка.ПометкаУдаления = &ПометкаУдаления; ';




     doc.УстановитьПараметр('НачалоПериода',StrToDate('03.04.2018'));
     doc.УстановитьПараметр('КонецПериода',StrToDate('04.04.2018'));
    doc.УстановитьПараметр('ПометкаУдаления',false);



       sel_res :=doc.Execute().Choose();
       if not VarIsNull(sel_res) then
       //s12:=sel_res.Choose();
      // if not VarIsNull(res12) then
         begin
        try
        i:=0;
        u:=0;

       while sel_res.Следующий() do
         begin
           for I := 0 to StringGrid1.RowCount-1 do
             begin

             if StringGrid1.Cells[0,i]=String(sel_res.НоменклатураСтрокой) then
              begin
              u:=i;
               StringGrid1.Cells[1,i]:=inttostr(strtoint(StringGrid1.Cells[1,i])+1);
              break;
              end;



             end;
             if u=0 then
             begin
             StringGrid1.RowCount:=StringGrid1.RowCount+1;
               StringGrid1.Cells[1,StringGrid1.RowCount-1]:='0';
               StringGrid1.Cells[0,StringGrid1.RowCount-1]:=String(sel_res.НоменклатураСтрокой);
             end      ;
      // (sel_res.Количество);
      Memo1.Lines.Add(sel_res.Количество);
                       end;




        except
          on E: Exception do ShowMessage('Ошибка:  while Choose.Next() do:'+E.ClassName+':'+E.Message);
        end;
        end;
  end
  else begin
     ShowMessage('Сначала нужно установить соединение с 1Cv8 !');
  end;
end;


Выдает, но не все. Как правильно перенести, что бы получить весь заказ на производство?
  • Вопрос задан
  • 253 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы