Заказы на доработку 1С (сервис удаленной работы)

Хранилище

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

Здравствуйте, гость ( Вход | Зарегистрироваться )



> OLE-запрос , не получается получить нужный результат          
shkoda Подменю пользователя
сообщение 12.01.16, 17:11
Сообщение #1

Общительный
**
Группа: Пользователи
Сообщений: 18
Спасибо сказали: 1 раз
Рейтинг: 0

Всем здрасте!

Суть такова -
нужно находясь в одной базе при помощи OLE-запроса получить из другой базы Оклад человека
далее этот Оклад будет пересчитываться по формуле

Так вот код

    Если ДокументОснование.Вид()="БольничныйЛист" Тогда
    
    Состояние("ожидайте...");    
        
    БазаОле=СоздатьОбъект("V77S.Application");
    КаталогБазыОЛе  = "\\123.ua\1C\123\";
    ПользовательОле = "123";
    ПарольОле       = "123";
    МонопольныйРежимOLE = ""; // для немонопольного запуска указать пустую строку!
    ЗапускБезЗаставки = 1;       // для появления заставки (например, чтобы наблюдать
                             // процесс запуска базы OLE визуально) поставьте здесь "0"
    РезультатПодключения = БазаОле.Initialize ( БазаОле.RMTrade , "/d" +
                       СокрЛП(КаталогБазыОле) + " /n" +
                       СокрЛП(ПользовательОле)+ " /p" +
                       СокрЛП(ПарольОле) + МонопольныйРежимOLE,
                       ?(ЗапускБезЗаставки = 1,"NO_SPLASH_SHOW",""));
        Если РезультатПодключения = 0 Тогда
             Предупреждение("Не удалось подключится к указанной базе - проверьте вводные!");
        КонецЕсли;
    
    ОлеЗапрос = БазаОле.CreateObject("Запрос");
    СпрОлеСотр = БазаОле.CreateObject("Справочник.Сотрудники");
    СпрОлеНазнач = БазаОле.CreateObject("Справочник.Назначения");
    
    ЗапросБоль = СоздатьОбъект("Запрос");
    ТекстЗапроса =
    "//{{ЗАПРОС(ЗапросБоль)
    |Владелец = Справочник.Сотрудники.ТекущийЭлемент;
    |Оклад = Справочник.Назначения.Оклад;
    |"//}}ЗАПРОС
;

    Если ЗапросБоль.Выполнить(ТекстЗапроса) = 0 Тогда
        Сообщить("Fail");
        Возврат;
    Иначе
        Сообщить("Win");
    КонецЕсли;
    
    ТЗ = СоздатьОбъект("ТаблицаЗначений");
    ЗапросБоль.Выгрузить(ТЗ);
    
    ТЗ.ВыбратьСтроки();
    Пока ТЗ.ПолучитьСтроку() = 1 Цикл
        Сообщить("1С - круто! ");
        Оклад = ТЗ.Оклад;
    КонецЦикла;
        
    //Оклад = 1677; // то, что должно получится на выходе


Но, получается не так как предполагается
выдаёт ошибку
{Документ.РазницаВСрЗп.Форма.Модуль(130)}: Поле агрегатного объекта не обнаружено (Оклад)

честно сказать уже несколько дней бьюсь над этой бедой, но ничего толкового не получается((

подскажите, люди добрые как быть?

Спасибо!

Мичман Харитонов Подменю пользователя
сообщение 12.01.16, 17:18
Сообщение #2

Завсегдатай
****
Группа: Пользователи
Сообщений: 164
Из: м. Кам'янське
Спасибо сказали: 26 раз
Рейтинг: 0

Реквизит "Оклад", наверное, периодический?
И назначение - тоже?

То есть, что-то вроде
Справочник.Назначения.Получить(ДатаДок).Оклад.Получить(ДатаДок)

shkoda Подменю пользователя
сообщение 12.01.16, 20:19
Сообщение #3

Общительный
**
Группа: Пользователи
Сообщений: 18
Спасибо сказали: 1 раз
Рейтинг: 0

Цитата(Мичман Харитонов @ 12.01.16, 17:18) *
Реквизит "Оклад", наверное, периодический?
И назначение - тоже?

То есть, что-то вроде
Справочник.Назначения.Получить(ДатаДок).Оклад.Получить(ДатаДок)


да, действительно - периодический
сейчас попробую

shkoda Подменю пользователя
сообщение 26.02.16, 10:10
Сообщение #4

Общительный
**
Группа: Пользователи
Сообщений: 18
Спасибо сказали: 1 раз
Рейтинг: 0

shkoda @ 12.01.16, 20:19 *,

В общем, пришлось отложить это задание и делать другое, но зато когда вернулся к выполнению уже под другим углом взглянул на это всё и вот что получилось
надеюсь может кому поможет в будущем

    Если ДокументОснование.Вид()="БольничныйЛист" Тогда
    ДатаНачалаБоль = ДокументОснование.ДатаНачала;
    ДатаОкончанияБоль = ДокументОснование.ДатаОкончания;
    ТабельныйНомер = СокрЛП(Сотрудник.Код);
    Состояние("Запуск OLE, ожидайте...");    
        
    БазаОле=СоздатьОбъект("V77S.Application");
    КаталогБазыОЛе  = "\\контора\1C\ЗиК\";
    ПользовательОле = "Вася";
    ПарольОле       = "111";
    МонопольныйРежимOLE = ""; // для немонопольного запуска указать пустую строку!
    ЗапускБезЗаставки = 1;       // для появления заставки (например, чтобы наблюдать
                             // процесс запуска базы OLE визуально) поставьте здесь "0"
    РезультатПодключения = БазаОле.Initialize ( БазаОле.RMTrade , "/d" +
                       СокрЛП(КаталогБазыОле) + " /n" +
                       СокрЛП(ПользовательОле)+ " /p" +
                       СокрЛП(ПарольОле) + МонопольныйРежимOLE,
                       ?(ЗапускБезЗаставки = 1,"NO_SPLASH_SHOW",""));
        Если РезультатПодключения = 0 Тогда
            Предупреждение("Не удалось подключится к указанной базе - проверьте вводные!");
        КонецЕсли;
        
    ОлеЗапрос = БазаОле.CreateObject("Запрос");
    ТекстЗапроса =
    "//{{ЗАПРОС(ОлеЗапрос)
    |Период с '"+ДатаОкончанияБоль+"' по '"+ДатаОкончанияБоль+"';
    |Владелец = Справочник.Сотрудники.Наименование;
    |Наименование = Справочник.Сотрудники.ФизическоеЛицо;
    |Оклад = Справочник.Сотрудники.ОсновноеНазначение.Владелец.ОсновноеНазначение.Оклад;
    |УникальныйНомер = Справочник.Сотрудники.Код;
    |Условие(УникальныйНомер = """+ТабельныйНомер+""");
    |Группировка Наименование;
    |"//}}ЗАПРОС
;

    Если ОлеЗапрос.Выполнить(ТекстЗапроса) = 0 Тогда
        Сообщить("При обработке запроса произошла ОШИБКА");
        Возврат;
    Иначе
        //Сообщить("Запрос выполнен УСПЕШНО");
    КонецЕсли;
    
    Пока ОлеЗапрос.Группировка("Наименование")=1 Цикл
        Оклад = ОлеЗапрос.Оклад;
        Владелец = ОлеЗапрос.Владелец;
        Сообщить("Оклад сотрудника  " + СокрЛП(Владелец) + " в период больгичного с " + ДатаНачалаБоль + " по " + ДатаОкончанияБоль + " равен " + Оклад + " грн.");
    КонецЦикла;
    
    ОкладЗаДень = ( Оклад * 12 ) / 365;
    СуммаСтар = ОкладЗаДень * КвоДней * (ДокументОснование.ПроцентОплаты / 100);
    СуммаСтар = СуммаСтар - (СуммаСтар * 0.18); // НДФЛ
    СуммаКУдержанию = Макс(0,СуммаНов-СуммаСтар);
    СрЗпСтар = СуммаСтар/КвоДней;
    
    БазаОле = "";
    КонецЕсли;


Всем спасибо, тему можно закрывать!

Спасибо сказали: Vofka,

tatamodka Подменю пользователя
сообщение 19.04.16, 12:07
Сообщение #5

Общительный
**
Группа: Пользователи
Сообщений: 13
Спасибо сказали: 0 раз
Рейтинг: 0

Получилось передать таблицу значений в запрос. А затем результат запроса скормить построителю в качестве источника данных.

CODE

Vofka Подменю пользователя
сообщение 19.04.16, 13:13
Сообщение #6

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13955
Из: Киев
Спасибо сказали: 4520 раз
Рейтинг: 3642.8

tatamodka, а?

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 27.04.24, 20:49
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!