Работа с журналом расчетов в 1С7.7 из 1С 8.1 через Com соединение
Написал Валецкий Станислав   
Недавно делал перенос справочников и документов из 1С 7.7 "Зарплата и кадры" в 1С 8.1 "Управление торговым предприятием" через Com соединение. Во время переноса столкнулся с некоторыми проблемами. Одна из них - это при выполнении запроса очень важно правильно указать синтаксис передаваемых значений, особенно даты, иначе запрос не будет выполняться. Как правильно написать запрос? Смотрим:
 
//Создадим Com объект для подключения к 1С 77
  База77  = Новый COMObject("V77.Application");
  
  //Устанавливаем соединение  
  Открыта = База77.Initialize(База77.RMTrade,"/d" + ПутьКБазе77,"NO_SPLASH_SHOW");
 
  Если Открыта Тогда
    Предупреждение("Ошибка открытия информационной базы!");
  Иначе
    Сообщить("БАЗА ОТКРЫТА УСПЕШНО!");
  Конецесли;
 
  //Определим дату из периода за который 
  //необходимо выбрать данные
  ДатаПериода = ТекущаяДата();
  
  //Подключимся к журналу расчетов
  Зрп = База77.CreateObject("ЖурналРасчетов.Зарплата");
  
  //Получим период журнала расчета по нашей дате
  //переведем в формат без времени
  НТП = Формат(Зрп.НачалоПериодаПоДате(ДатаПериода),"ДЛФ=Д");
  КТП = Формат(Зрп.КонецПериодаПоДате(ДатаПериода),"ДЛФ=Д");
  
  //Напишем текст запроса
  //обратите внимание на установку периода в запросе
  //Если неправильно написать, будет вылазить ошибка
  ТекстЗапр =  "//{{ЗАПРОС(ВидыРасч)
  |Период с '" + НТП + "' по '" + КТП + "';
  |Вир = ЖурналРасчетов.Зарплата.ВидРасч;
  |Рез = ЖурналРасчетов.Зарплата.Результат;
  |Дни = ЖурналРасчетов.Зарплата.Дни;   
  |ДатаНачала   = ЖурналРасчетов.Зарплата.ДатаНачала;
  |ДатаОкончания   = ЖурналРасчетов.Зарплата.ДатаОкончания;  
  |Часы = ЖурналРасчетов.Зарплата.Часы;   
  |Субконто = ЖурналРасчетов.Зарплата.Субконто;  
  |Сот = ЖурналРасчетов.Зарплата.Объект;
  |КодОбъекта = ЖурналРасчетов.Зарплата.Объект.Код;
  |Функция РезСумма = Сумма(Рез);
  |Группировка Сот;
  |Группировка Вир;
  |"//}}ЗАПРОС
  ;
  
  //Создаем объект типа запрос
  Запр = База77.CreateObject("Запрос");
  
  //Выполним запрос, если успешно делаем выборку
  Если Запр.Выполнить(ТекстЗапр) <> 0 Тогда
    Пока Запр.Группировка("Сот") = 1 Цикл
      Пока Запр.Группировка("Вир") = 1 Цикл                
        //...................
        //Здесь пишем код выборки и обработки полученных данных
      Конеццикла;  
    Конеццикла;  
  Конецесли;  
 

Если нам необходимо установить отбор в журнале, например по сотруднику, то сделать это можно следущим образом:

 
//в перечне полей добавляем поле код объекта (можно наименование)
"|КодОбъекта = ЖурналРасчетов.Зарплата.Объект.Код;"
//строка условия будет следующей
"|Условие(КодОбъекта = " + Сотр.код + ");"

Из журнала расчетов можно выбрать записи без запроса, методом прямой выборки. В некоторых ситуациях этот способ может быть даже удобней чем через запрос. В данном случае синтаксис будет довольно простым:

 
Запр = База77.CreateObject("ЖурналРасчетов.Зарплата");
Запр.ВыбратьЗаписиПоОбъекту(Сотр,НТП,КТП);
Пока Запр.ПолучитьЗапись() = 1 Цикл
//Делаем обработку выборки
Конеццикла;