helpf.pro
Регистрация
 +1 
Распечатать

1С 7.x : Работа с журналом расчетов в 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 Цикл
//Делаем обработку выборки
Конеццикла;

Написал Валецкий Станислав
Разместил:   Версии: | 7.x | 8.x |  Дата:   Прочитано: 24906
 +1 
Распечатать
Возможно, вас также заинтересует
COM-подключение к базе 7.7 из .NET, .NET Core 2
Инсталяция: dotnet add package sabatex.V1C77 или добавить через NUGET пакет sabatex.V1C77. Добавить пространство имен: using sabatex.V1C77; пример использованя: ---C# static void Main(string args) { // создаем строку соединен
COM-подключение к базе 7.7 из 8.2 1С 7
Если код выполняется на стороне клиента, то необходимо наличие базы 7.7 на локальной машине. Пример (На форме объекта присутствует реквизит Таблица(ТаблицаЗначений)): НаКлиенте Процедура Загрузки() ПутьКБазе=" D:ВашаБаза1с77" ; Пользователь=
v7plus.dll - отсутствует CLSID либо отсутствует интерфейс llnitDone 0
При выгрузке отчетности в 1С 7.7 программа ругается на v7plus.dll и указывает, что отсутствует интерфейс llritDone. Что делать? 1) Поудалять нафиг все v7plus.dll из каталогов ИБ и папок пользователей 2) Оставить только в bin каталоге и зарегить чер
Выбор запросом элементов справочника и Загрузка в Документ 0
Запрос = СоздатьОбъект(" Запрос" ); ТекстЗапроса = " //{{ЗАПРОС(Сформировать) //|Период с ВыбНачПериода по ВыбКонПериода; |Обрабатывать НеПомеченныеНаУдаление; |Номенклатура = Справочник.Номенклатура.ТекущийЭлемент; |Группировка Номенклатура
Выборка документа по номеру и вывод на Печать, в Табличный Документ 0
Процедура Печать() Если (ПустоеЗначение(ДатаНач)=1) или (ПустоеЗначение(ДатаКон)=1) Тогда Предупреждение(" Не задан период отчета" ); Возврат; КонецЕсли; Заг=" За период с " +ДатаНач+" по " +ДатаКон; Таб=СоздатьОбъект(" Таблица" ); Таб.Выв
Посмотреть все результаты поиска похожих
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.