Реклама на этом месте
Форум 1С
Форум 1С
Программистам. Бухгалтерам. Администраторам. Пользователям
Задай вопрос - получи решение проблемы. Без троллинга и флуда.
14 Дек 2017, 01:52
МультиВход
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?
 
collapse

Автор Тема: Доступ к элементу формы  (Прочитано 3284 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн The_Immortal

  • *
  • Сообщений: 16
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2014-06-17
  • Сайт: 
Всех приветствую!

Есть конфигурация ЗиКБУ, в которой имеется справочник Сотрудники. У каждого сотрудника есть занимаемая ставка, которая на форме присутствует в закладке "Кадровые данные":



Необходимо программно получить данное значение, причем не обращаясь к элементам формы. Я пытался понять откуда берутся эти данные, т.к. соответствующего реквизита к справочнику нет. Оказалось, что это регистр сведений:


, а поле "Занимаемых ставок" - это Ресурс в Регистре Сведений "РаботникиОрганизаций".

Только вот как достучаться до этого Ресуерса, увы, идей нет...
Я получаю данные из 1С посредством COMConnection из VBA.

Пример:
    Set Ref = v8.Справочники.СотрудникиОрганизаций.НайтиПоНаименованию("Иванова Светлана Витальевна")
    If Ref.Наименование = "" Then
...
, где Ref - ссылка на элемент справочника "Сотрудники", а Ref.Наиманование - соответствующее свойство.

Я пробовал обращаться таким образом:
Ref.МестоРаботы.ЗанимаемыхСтавок.Значение
, но это неправильно...

У регистра сведений "РаботникиОрганизаций" есть измерение "Сотрудник", у которого тип "СправочникСсылка.СотрудникиОрганизаций". Я пытался получить конкретные значения по регистру:
Regist = v8.РегистрыСведений.РаботникиОрганизаций.ЗанимаемыхСтавок.ПолучитьПоследнее(Ref)
, но так тоже не выходит.

Будьте добры, подскажите, пожалуйста, в каком направлении копать?


Спасибо!


Оффлайн pavl_vs

  • *****
  • Сообщений: 1069
  • РЕПУТАЦИЯ: 168
  • КПД: 16%
  • Регистрация: 2011-05-09
  • Сайт: 
  • Профессия: Программист 7.7
Это можно сделать так:
ВЫБРАТЬ
РаботникиОрганизацийСрезПоследних.Сотрудник КАК Сотрудник,
РаботникиОрганизацийСрезПоследних.ЗанимаемыхСтавок
ПОМЕСТИТЬ ВТСотрудники
ИЗ
РегистрСведений.РаботникиОрганизаций.СрезПоследних(&ДатаАктуальности, ) КАК РаботникиОрганизацийСрезПоследних
ГДЕ
РаботникиОрганизацийСрезПоследних.ПричинаИзмененияСостояния <> ЗНАЧЕНИЕ(Перечисление.ПричиныИзмененияСостояния.Увольнение)

Оффлайн The_Immortal

  • *
  • Сообщений: 16
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2014-06-17
  • Сайт: 
pavl_vs,
Это можно сделать так:
...

Благодарю! А нельзя как-нибудь попроще? Я выше специально показал, какими примитивными действиями могу оперировать через COM. Боюсь, что приведенный пример едва ли можно адаптировать под нужный синтаксис...

Оффлайн Dethmontt

  • Денис
  • Модератор
  • *****
  • Сообщений: 2857
  • РЕПУТАЦИЯ: 546
  • КПД: 19%
  • Адын Эс
  • Регистрация: 2010-11-01
  • Сайт: 
  • Профессия: Программист 1С
[/code]
А нельзя как-нибудь попроще?
Проще чем вам написали некуда!
Боюсь, что приведенный пример едва ли можно адаптировать под нужный синтаксис...
Если не знаете как сделать, это не значит что этого сделать нельзя...
Запрос = v8.Newobject("Запрос");
Запрос.Текст = "Текст что привели выше";
Если долго всматриваться в учебник...то в голову может прийти мысль его открыть!

Оффлайн pavl_vs

  • *****
  • Сообщений: 1069
  • РЕПУТАЦИЯ: 168
  • КПД: 16%
  • Регистрация: 2011-05-09
  • Сайт: 
  • Профессия: Программист 7.7
Куда уж проще! - всего четыре содержательных строки.
Вы же написали "программными средствами". Регистр сведений содержит нужную Вам информацию на любую разумную дату и то, что написано мною, является обычным делом.
Временную таблицу можно исключить (она хороша в консоли запросов).

Оффлайн The_Immortal

  • *
  • Сообщений: 16
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2014-06-17
  • Сайт: 
Dethmontt, благодарю, буду пробовать.

Правильно ли я понимаю, что результат запроса - не уволенные сотрудники и соответствующие им ставки на сегодняшний день?

В общем, я на всякий случай опишу общую задачу. Есть таблица (excel-файл) со списком сотрудников и их ставками (табель). Необходимо из этого файла делать сравнение с актуальными данными, которые хранятся в 1С через макросы (VBA).

Варианты:
1 (самый простой). Программно выполнить встроенный отчет "Списки сотрудников" (там формируется вся нужная инфомрмация), это дело экспортировать в xml/xls и потом уже делать сравнение средствами VBA.
Трудности: как запустить этот отчет из того же VBA - я не представляю. По идее, можно сделать внешнюю обработку и запускать ее (в фоновом режиме), которая будет формировать отчет и экспортировать его в xls, но и это я не знаю как реализовать :(

2. Все делать из VBA, не обращаясь к промежуточным файлам, что я сейчас и пытаюсь делать...

Последний раз редактировалось: The_Immortal; 17 Июн 2014, 17:36

Оффлайн pavl_vs

  • *****
  • Сообщений: 1069
  • РЕПУТАЦИЯ: 168
  • КПД: 16%
  • Регистрация: 2011-05-09
  • Сайт: 
  • Профессия: Программист 7.7
С этого и надо было начинать!

Второе, как мне представляется, невозможно. Если я не прав - коллеги поправят.

Поэтому - первое. Но здесь не все в порядке: отчет Списки сотрудников берет начальные данные, на момент приема, а не "срез последних".
Если я правильно понял и если бы мне пришлось провести описанное сравнение базы 1С и xls-данных (и особенно, если это делать необходимо регулярно), то сделал бы небольшой внешний, например, отчет с выгрузкой всех необходимых данных по сотру (или по списку) в Excel-файл; ну а дальше VBA.

Оффлайн The_Immortal

  • *
  • Сообщений: 16
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2014-06-17
  • Сайт: 
pavl_vs,
Второе, как мне представляется, невозможно.
Эм... Может быть, я что-то не так описал. Вроде как ничего не возможного. Мне в переменную типа Object надо поместить результат Вашего запроса, ну а дальше уже мелочи.
Правда, результат запроса, поместить все равно не удается (запрос упростил для примера):
        Set Запрос = v8.NewObject("Запрос")
        Запрос.Текст = "ВЫБРАТЬ РаботникиОрганизацийСрезПоследних.Сотрудник КАК Сотрудник, РаботникиОрганизацийСрезПоследних.ЗанимаемыхСтавок КАК Ставка"
        Set Выборка = Запрос.Выполнить()
- на последнюю строку выдается ошибка
Цитировать
Application-defined or object-defined error 1001
Dethmontt, не подскажите, в чем может быть проблема?


Но здесь не все в порядке: отчет Списки сотрудников берет начальные данные, на момент приема, а не "срез последних".
Не очень понял, что Вы имели в виду. Данный отчет формирует актуальные на данный момент ставки. Это точно. Или мы о разном говорим?

Оффлайн cska-fanat-kz

  • 1С:Специалист
  • Глобальный модератор
  • *****
  • Сообщений: 5745
  • РЕПУТАЦИЯ: 1099
  • КПД: 19%
  • Красная армия всех сильней!
  • Регистрация: 2010-11-06
    • Skype: cska-fanat-kz81
  • Сайт: cska-fanat-kz.ucoz.kz
  • Профессия: Разработчик 1С
конфигурацию править можете? или на поддержке?
если первое, то лучше на стороне 1С в модуле внешнего соединения разместить экспортный метод, который вернет все нужные данные.
а затем просто вызывать примерно так:

1С_КомОбъект.ЭкспортныйМетод();
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

Оффлайн Dethmontt

  • Денис
  • Модератор
  • *****
  • Сообщений: 2857
  • РЕПУТАЦИЯ: 546
  • КПД: 19%
  • Адын Эс
  • Регистрация: 2010-11-01
  • Сайт: 
  • Профессия: Программист 1С
Application-defined or object-defined error 1001
Dethmontt, не подскажите, в чем может быть проблема?

Почитай про маршалинг на MSDN будет полезно.

При выполнении запроса в чужой среде (VBA) нужно стараться избавляться от сложных типов

Ты тянешь ссылку в VBA
"ВЫБРАТЬ РаботникиОрганизацийСрезПоследних.Сотрудник КАК Сотрудник,
Тяни строку так как ссылка тебе в VBA не пригодиться =)))
"ВЫБРАТЬ РаботникиОрганизацийСрезПоследних.Сотрудник.Наименование КАК Сотрудник,
Если долго всматриваться в учебник...то в голову может прийти мысль его открыть!


Теги:
 

Не работает метод Сдвинуть() по отношению к программно добавляемой колонке1С:Предприятие 8.3 (8.3.10.2561) Управление производственным предприятием, редакция 1.4 Приветствую, я добавляю программно свою колонку в методе ПриОткрытии() модуля формы, вот так

Автор InsiderРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 2
Просмотров: 285
Последний ответ 21 Сен 2017, 10:33
от Insider
Редактирование формы "Настройки пользователя".

Автор t955938Раздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 2
Просмотров: 4813
Последний ответ 03 Авг 2011, 11:45
от t955938
получаю значение реквизита формы, дает значение 0

Автор mikel10Раздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 2
Просмотров: 3408
Последний ответ 12 Июл 2013, 15:35
от mikel10
Как обратиться к функции модуля формы из модуля Менеджера?

Автор TreeDogNightРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 6
Просмотров: 4985
Последний ответ 10 Июл 2014, 14:05
от cska-fanat-kz
Настройка формы "Заполнение товаров"

Автор ЖаннаРаздел Пользователям "1С - Предприятие 8"

Ответов: 2
Просмотров: 582
Последний ответ 10 Мар 2017, 21:00
от Жанна

* Живое общение

Не устроил ответ?

Зарегистрируйся и задай свой вопрос. Живое общение приносит результат намного быстрее.


Зарегистрироваться

* Реклама

* Поиск

* Последние задачи на разработку (фриланс)

* Реклама

* Последние вакансии

* Топ 10 авторов за месяц

Геннадий ОбьГЭС Геннадий ОбьГЭС
178 Сообщений
ilyay ilyay
75 Сообщений
oleg-x
51 Сообщений
alex0402
49 Сообщений
andron81_81
39 Сообщений
AIFrame
37 Сообщений
MuI_I_Ika MuI_I_Ika
34 Сообщений
BuhRust
29 Сообщений
Golickoff Golickoff
28 Сообщений
Dima Dddd Dima Dddd
26 Сообщений

* Кто онлайн

  • Точка Гостей: 190
  • Точка Скрытых: 0
  • Точка Пользователей: 0

Нет пользователей онлайн.

* Облако тэгов

* Форум 1С с мобильного

* Инструменты

* Дополнительно

Поиск

 
SimplePortal 2.3.5 © 2008-2012, SimplePortal