HelpF.pro

Работа с журналом расчетов в 1С7.7 из 1С 8.1 через Com соединение

Недавно делал перенос справочников и документов из 1С 7.7 "Зарплата и кадры" в 1С 8.1 "Управление торговым предприятием" через Com соединение. Во время переноса столкнулся с некоторыми проблемами. Одна из них - это при выполнении запроса очень важно правильно указать синтаксис передаваемых значений, особенно даты, иначе запрос не будет выполняться. Как правильно написать запрос? Смотрим:

Код 1C v 8.х
 //Создадим Com объект для подключения к 1С 77
База77 = Новый COMObject("V77.Application");

//Устанавливаем соединение
Открыта = База77.Initialize(База77.RMTrade,"/d" + ПутьКБазе77,"NO_SPLASH_SHOW");

Если Открыта Тогда
Предупреждение("Ошибка открытия информационной базы!");
Иначе
Сообщить("БАЗА ОТКРЫТА УСПЕШНО!");
Конецесли;

//Определим дату из периода за который
//необходимо выбрать данные
ДатаПериода = ТекущаяДата();

//Подключимся к журналу расчетов
Зрп = База77.CreateObject("ЖурналРасчетов.Зарплата");

//Получим период журнала расчета по нашей дате
//переведем в формат без времени
НТП = Формат(Зрп.НачалоПериодаПоДате(ДатаПериода),"ДЛФ=Д");
КТП = Формат(Зрп.КонецПериодаПоДате(ДатаПериода),"ДЛФ=Д");

//Напишем текст запроса
//обратите внимание на установку периода в запросе
//Если неправильно написать, будет вылазить ошибка
ТекстЗапр = "//{{ЗАПРОС(ВидыРасч)
|Период с '" + НТП + "' по '" + КТП + "';
|Вир = ЖурналРасчетов.Зарплата.ВидРасч;
|Рез = ЖурналРасчетов.Зарплата.Результат;
|Дни = ЖурналРасчетов.Зарплата.Дни;
|ДатаНачала = ЖурналРасчетов.Зарплата.ДатаНачала;
|ДатаОкончания = ЖурналРасчетов.Зарплата.ДатаОкончания;
|Часы = ЖурналРасчетов.Зарплата.Часы;
|Субконто = ЖурналРасчетов.Зарплата.Субконто;
|Сот = ЖурналРасчетов.Зарплата.Объект;
|КодОбъекта = ЖурналРасчетов.Зарплата.Объект.Код;
|Функция РезСумма = Сумма(Рез);
|Группировка Сот;
|Группировка Вир;
|"//}}ЗАПРОС
;

//Создаем объект типа запрос
Запр = База77.CreateObject("Запрос");

//Выполним запрос, если успешно делаем выборку
Если Запр.Выполнить(ТекстЗапр) <> 0 Тогда
Пока Запр.Группировка("Сот") = 1 Цикл
Пока Запр.Группировка("Вир") = 1 Цикл
//...................
//Здесь пишем код выборки и обработки полученных данных
Конеццикла;
Конеццикла;
Конецесли;


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

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


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

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

Написал Валецкий Станислав
Опубликовано на сайте: https://HelpF.pro
Прямая ссылка: https://HelpF.pro/faq8/view/563.html