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

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

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

Оффлайн The_Immortal

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

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



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


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

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

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

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

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

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


Спасибо!


Онлайн pavl_vs

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

Оффлайн The_Immortal

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

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

Оффлайн Dethmontt

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

Онлайн pavl_vs

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

Оффлайн The_Immortal

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

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

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

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

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

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

Онлайн pavl_vs

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

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

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

Оффлайн The_Immortal

  • *
  • Сообщений: 18
  • РЕПУТАЦИЯ: 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

  • Денис
  • Модератор
  • *****
  • Сообщений: 2861
  • РЕПУТАЦИЯ: 548
  • КПД: 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
Просмотров: 639
Последний ответ 21 Сен 2017, 10:33
от Insider
Нужно в параметр запроса к РегистрБухгалтерии.Проводки.Остатки вставить вместо периода данные из другого запроса отчет СКД 8.3, обычные формы

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

Ответов: 0
Просмотров: 158
Последний ответ 10 Апр 2018, 14:00
от Св Ч
Редактирование формы "Настройки пользователя".

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

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

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

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

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

Ответов: 6
Просмотров: 5801
Последний ответ 10 Июл 2014, 14:05
от cska-fanat-kz

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

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

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


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

* Реклама

* Поиск

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

* Реклама

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

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

Геннадий ОбьГЭС Геннадий ОбьГЭС
154 Сообщений
alex0402
67 Сообщений
AIFrame AIFrame
56 Сообщений
oleg-x
56 Сообщений
buketov.av buketov.av
47 Сообщений
wise wise
41 Сообщений
ilyay ilyay
39 Сообщений
Анюта17
33 Сообщений
Alter
32 Сообщений
trialex3
30 Сообщений

* Кто онлайн

  • Точка Гостей: 240
  • Точка Скрытых: 0
  • Точка Пользователей: 4
  • Точка Сейчас на форуме:

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

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

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

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

Поиск

 
SimplePortal 2.3.5 © 2008-2012, SimplePortal