Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1] 2  Все   Вниз
  Печать  
Автор Тема: Выбрать нужный Элемент  (Прочитано 39397 раз)
0 Пользователей и 3 Гостей смотрят эту тему.
Элексир
Помогающий

ru
Offline Offline
Пол: Мужской

« : 01-11-2008 20:44 » 

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

Процедура Выбор();
    Если Сотр.Выбран()=1 тогда
        Сотрудник=База.ТекущийЭлемент();
КонецЕсли
КонецПроцедуры

Процедура Зар();
Если Сотр.Выбран()=1 тогда
Зарплата=База.НайтиПоНаименованию("Зарплата");
КонецЕсли
КонецПроцедуры


Процедура Заполнить();
Если КоличествоСтрок()=0 Тогда
    База=СоздатьОбъект("Справочник.Сотрудники");
    База.ВыбратьЭлементы();
Пока База.ПолучитьЭлемент()=1 Цикл
НоваяСтрока();
Сотр=База.ТекущийЭлемент();
Выбор();
Зар();
КонецЦикла
КонецЕсли
КонецПроцедуры

при таком коде прога ругается на :
Пока База.ПолучитьЭлемент()=1 Цикл
{Документ.ОтчетПоСотрудникам.Форма.Модуль(22)}: Не выбран элемент!
« Последнее редактирование: 01-11-2008 20:46 от Элексир » Записан
Kivals
Модератор

ca
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 02-11-2008 19:45 » 

Ты меняешь позицинирование в справочнике методом База.НайтиПоНаименованию("Зарплата");
Вообще-то метод НайтиПоНаименованию() ищет элемент в справочнике, а не реквизит (и возвращает 0 или 1 в азвисимости от результата поиска).
Тебе нужно написать Зарплата=База.ПолучитьАтрибут("Зарплата") или просто Зарплата=База.Зарплата;

Пара замечаний к самому коду:
меньше используй глобальные переменные - лучше передавать нужные переменные в функцию (процедуру)
да и сам цикл заполнения можно написать компактнее и нагляднее без вызова других процедур
проверки Если Сотр.Выбран()=1 Тогда в твоем случае тоже лишние - если элемент не будет выбран - у тебя просто вернется пустое значение для ТекущийЭлемент() и Зарплата
Записан
Элексир
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #2 : 03-11-2008 12:49 » 

Kivals, спасибо за ответ.
Хотел бы задать еще такой вопрос.
Какие функции отвечают за получение периодических реквизитов? и как их использовать в подчинных справочниках? если можно урл на подсказку
Записан
Kivals
Модератор

ca
Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 03-11-2008 13:42 » 

Есть 2 взаимоисключающие функции: ИспользоватьДату() и Получить() (Установить()).
Предположим у тебя есть в справочнике Сорудников периодический реквизит Зарплата, тогда код будет такой:
Код:
	Спр=СоздатьОбъект("Справочник.Сотрудники");
Спр.ВыбратьЭлементы();
Пока Спр.ПолучитьЭлемент()=1 Цикл
Спр.ИспользоватьДату(РабочаяДата());
ТекЗП=Спр.Зарплата;
Сообщить(""+Спр.Наименование+" "+ТекЗП);
КонецЦикла;
Или такой:
Код:
	Спр=СоздатьОбъект("Справочник.Сотрудники");
Спр.ВыбратьЭлементы();
Пока Спр.ПолучитьЭлемент()=1 Цикл
ТекЗП=Спр.Зарплата.Получить(РабочаяДата());
Сообщить(""+Спр.Наименование+" "+ТекЗП);
КонецЦикла;
Кроме того есть объект Периодический -  сего помощью можно посмотреть когда менялись значения:
Код:
	П=СоздатьОбъект("Периодический");
П.ИспользоватьОбъект("Зарплата",ВыбСотрудник);
П.ВыбратьЗначения(НачДата,КонДата);
Пока П.ПолучитьЗначение()=1 Цикл
Сообщить(""+П.ДатаЗнач+" "+П.Значение);
КонецЦикла;
Помощь смотреть в среде 1С:Конфигуратор по кнопке Ctrl+F1 на нужной функции
Записан
Элексир
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #4 : 03-11-2008 14:16 » 

Kivals, благодарю за Код и справку щас попробую
использовать Улыбаюсь
Записан
Стервочка
Гость
« Ответ #5 : 19-03-2010 16:10 » 

Нужна помощь! Очень!
мне нужно рассчитать сумму которую должны вернуть клиенту,если оборудование возвращено из аренды в
нормальном состоянии,если нет то списываем залог.
Создаю перечисление(плохое, норм).
Запускаю док "возврат оборудования" , нажимаю кнопку "заполнить", и оно считывает данные из сравочника
"выданное оборудование". Но! При редактировании столбца "состояние при возврате" на 'плохое' оно обнуляет
залог, но если хочу вернуть в состояние 'норм', оно берет данные "залог" уже не свои, а у соседней строки,либо
совсем так и остается нулем... Мне посоветовали сделать либо через поиск по наименованию, либо через
дополнительную переменную, которая будет хранить значения на время выполнения процедуры, но у меня не
получается!(((( объясните, что примерно там писать?
Записан
Kivals
Модератор

ca
Offline Offline
Пол: Мужской

WWW
« Ответ #6 : 19-03-2010 16:27 » 

Стервочка, абсолютно не представляю.
У тебя какая-то самописная конфигурация (или мне совершенно не знакомая), так что мне совершенно не ясно как организована структура данных и расчет данных...
Нужен 1cv7.md (в архиве)
Записан
Стервочка
Гость
« Ответ #7 : 19-03-2010 16:30 » 

Aaaaaa! Пойду тогда вешаться....


а если я тебе кину настройку, сможешь глянуть?
« Последнее редактирование: 20-03-2010 20:13 от RXL » Записан
Kivals
Модератор

ca
Offline Offline
Пол: Мужской

WWW
« Ответ #8 : 19-03-2010 16:34 » 

Прицепи к сообщению (кнопка: Предварительный просмотр - Дополнительные опции), только сархивировать не забудь
Записан
Стервочка
Гость
« Ответ #9 : 19-03-2010 16:41 » 

ок!))


скажи мне хоть что-нить!


Ну как, сможешь мне помочь?! Скромно так...
« Последнее редактирование: 20-03-2010 20:12 от RXL » Записан
Kivals
Модератор

ca
Offline Offline
Пол: Мужской

WWW
« Ответ #10 : 19-03-2010 20:42 » 

ну и где?
Записан
Стервочка
Гость
« Ответ #11 : 19-03-2010 20:43 » 

на еще раз

глянешь? пожалуйста!!!! Жаль
« Последнее редактирование: 20-03-2010 20:13 от RXL » Записан
Kivals
Модератор

ca
Offline Offline
Пол: Мужской

WWW
« Ответ #12 : 19-03-2010 20:51 » 

Что касается твоего вопроса:
я бы переписал процедуру СбросЗалога() таким образом:
Код:
Процедура СбросЗалога()
Спр=СоздатьОбъект("Справочник.ВыданноеОборудование");
Спр.ИспользоватьВладельца(Клиент);
Если Спр.НайтиПоРеквизиту("Оборудование",Оборудование,0)=0 Тогда
Сообщить("Оборудование не выдано клиенту: "+Оборудование,"i");
Возврат;
КонецЕсли;

Если СостояниеПриВозврате=Перечисление.СостояниеПриВозврате.Плохое Тогда
Залог=0;
ИначеЕсли СостояниеПриВозврате=Перечисление.СостояниеПриВозврате.Норм Тогда
Залог=Спр.Залог;
КонецЕсли;
КонецПроцедуры 

Но вообще-то я считаю что структура данных построена абсолютно неверно!
Я бы не делал справочник ВыданноеОборудование вообще, а добавил бы в Номенклатуру периодические реквизиты Клиент, Залог, ДатаВозврата и оперирровал бы с периодическими реквизитами...
ИМХО создание и удаление элементов справочника при проведении - это не правильно
« Последнее редактирование: 19-03-2010 21:03 от Kivals » Записан
Стервочка
Гость
« Ответ #13 : 19-03-2010 22:10 » 

ну, дело в том, что я не делаю с нуля, я дорабатываю конфигурацию...


Спасибо огромное!!!!!))) не знаю, что бы без тебя делала!


Как сделать, чтобы при установке статуса возврата в "не вернули" оно не списывало его со счетов? Я уже все, что могла попробовала, только доку "возврат" все равно. Он либо ошибку бросает, либо всю задолженность списывает.. Жаль
« Последнее редактирование: 20-03-2010 20:14 от RXL » Записан
Kivals
Модератор

ca
Offline Offline
Пол: Мужской

WWW
« Ответ #14 : 20-03-2010 07:48 » 

Как сделать, чтобы при установке статуса возврата в "не вернули" оно не списывало его со счетов?
Взаиморасчеты по клиентам должны выстись отдельно: по регистру или бух.счету (в твоем случае скорее всего забалансовому).
Тогда не нарушится логика: оборудование за клиентом уже не числится, но денег он еще должен. Кстати если использовать регистры или счета - можно обойтись и без периодических реквизитов: отдельный регистр (счет) отвечает за выданное оборудование.

и еще один момент, как сделать, чтобы при продлении срока аренды оно заменяло ДатуВозврата на ДатуПродления? Скромно так...
В твоем случае: при проведении документа Продление ищишь нужный элемент справочника и изменяешь дату:
Код:
	Спр=СоздатьОбъект("Справочник.ВыданноеОборудование");
Спр.ИспользоватьВладельца(Клиент);
Если Спр.НайтиПоРеквизиту("Оборудование",Оборудование,0)=0 Тогда
Сообщить("Оборудование не выдано клиенту: "+Оборудование,"i");
Возврат;
КонецЕсли;
Спр.ДатаВозврата=ДатаПродления;
Спр.Записать();
Записан
Стервочка
Гость
« Ответ #15 : 20-03-2010 07:53 » 

Это отдельным доком или в модуле дока "Возврат"?
Записан
Kivals
Модератор

ca
Offline Offline
Пол: Мужской

WWW
« Ответ #16 : 20-03-2010 08:00 » 

Это уже как ты захочешь - можно любым способом, зависит от задачи.
Записан
Стервочка
Гость
« Ответ #17 : 20-03-2010 08:03 » 

А почему обязательно использовать регистр? До меня же сделали, чтобы списывало и без него. Я просто хочу добавить перечисление "СостояниеВозврата"(Вернули/Не вернули) и чтобы как со сбросом залога: оно находило по наименованию и удаляло строку...
Хочу сделать как-то так

   
Код:
Процедура ОбработкаПроведения()
ВыданноеОборудование=СоздатьОбъект("Справочник.ВыданноеОборудование");
    ВыданноеОборудование.ИспользоватьВладельца(Клиент);
Если ПустоеЗначение(Клиент)=1 Тогда
Предупреждение("Не выбран клиент.");
СтатусВозврата(0); Возврат;
КонецЕсли;
    Если КоличествоСтрок()=0 Тогда
Предупреждение("Не заполнена табличная часть.");
СтатусВозврата(0); Возврат;
КонецЕсли;
Если Проведен()=1 Тогда
ОбработкаУдаленияПроведения()
КонецЕсли;
ВыбратьСтроки();

Если СостояниеВозврата=Перечисление.СостояниеВозврата.Не_Вернули Тогда
Если ВыданноеОборудование.НайтиПоРеквизиту("Оборудование",Оборудование,0)=0 Тогда
Сообщить("Оборудование не выдано клиенту: "+Оборудование,"i");
Возврат;
КонецЕсли;
ВыданноеОборудование.Код=Оборудование.Код;
ВыданноеОборудование.Оборудование=Оборудование.ТекущийЭлемент();
ВыданноеОборудование.ДатаВыдачи=ДатаВыдачи;
ВыданноеОборудование.ДатаВозврата=ДатаВозврата;
ВыданноеОборудование.Записать();
ИначеЕсли СостояниеВозврата=Перечисление.СостояниеВозврата.Вернули Тогда
ВыданноеОборудование.Удалить();
КонецЕсли;
КонецПроцедуры

Это вообще возможно? Отладчик идет только до ВыбратьСтроки(), а дальше не видит и соответственно не списывает оборудование... Как быть?
« Последнее редактирование: 20-03-2010 23:07 от Стервочка » Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #18 : 20-03-2010 20:15 » 

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

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

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Стервочка
Гость
« Ответ #19 : 20-03-2010 20:18 » 

я понимаю, что выходной! но мне реально нужна помощь!очень!(((
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #20 : 20-03-2010 20:30 » 

Стервочка, и что?
Вот сейчас Kivals, предположим, сидит в кругу семьи и смотрит футбол, а может выпивает в подъезде с местными синяками (чего только не бывает), а может ... - какая разница - он на отдыхе. Быстрее никак не ответит. Кстати, тут еще есть пара пара активных модераторов и еще не модераторы, но тоже активные. И, судя по всему, они тоже отдыхают.
Терпение и еще раз терпение.
Срочно и сейчас - это когда договор и за бабки. Да и то, зачастую, фиг достучишься.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #21 : 20-03-2010 20:44 » 

RXL,
Offtopic:

Ожидает боя Кличка, запасшись пивом
Поставлю в угол.
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #22 : 20-03-2010 20:59 » 

Стервочка, а что не работает?
ты отладчиком пошагово прошла?
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Стервочка
Гость
« Ответ #23 : 20-03-2010 21:16 » 

Мне это ничем не помогает.... Я только начинаю работать в 1С и еще ничего толком не знаю... А выдали задание, и его нужно сдать в пн любой ценой... Вот я и истерю...
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #24 : 20-03-2010 21:19 » 

ставь точку останова на входе в нужную процедуры, и пошагово проходи
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Стервочка
Гость
« Ответ #25 : 20-03-2010 21:21 » 

это поставить точку, запустить док, а когда дойдет до точки останова - F5? Так?
« Последнее редактирование: 20-03-2010 21:24 от Стервочка » Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #26 : 20-03-2010 21:25 » 

как это не работает?
Может ты не там поставила точку останова?
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Стервочка
Гость
« Ответ #27 : 20-03-2010 21:31 » 

Ерунда полная получается... 1С живет своей жизнью, и в последние дни ей плевать на меня... Я знаю, что Kivals знает, как мне помочь, но он меня игнорирует... А сама я не справлюсь...
« Последнее редактирование: 20-03-2010 21:53 от Стервочка » Записан
Kivals
Модератор

ca
Offline Offline
Пол: Мужской

WWW
« Ответ #28 : 21-03-2010 12:58 » 

Разобраться как правильно поступить при твоей организации данных - это извратить мозг по самое нихочу. Я такого обычно не делаю даже за деньги.
Offtopic:
Это приблизительно как гланды через ж***. Твой аргумент что так до тебя сделано в интерпретации гланд звучит так: геморой ведь лечат через задний проход, значит и гланды можно. Немного утрировано - но суть думаю понятна.

Поэтому я сейчас опишу как я вижу представление данных, а ты решай сама - переделыать так или нет.
Итак: для учета приходно/расходных величин в 1С 7.7 есть 2 варианта (назовем их "объектами накопления"): либо бух. счет, либо оперативный регистр. Они имеют некоторые различия, для твоей задачи - непринципиальные. В обоих случаях для объектов накопления характерны: аналитики учета (для счета это Субконто, для регистра - Измерения) и числовые ресурсы (Счет: Сумма, Количество, Валютная сумма; Регистр: любое количество и названия Ресурсов). По объектам учета в разрезе каждой или совокупности аналитик ты можешь получить обороты и/или остатки по ресурсам.
Мне удобнее пользоваться бух.счетами, т.к. их можно корректировать ручным документом Операция (для регистров это невозможно). Но их использование ограничено количеством ресурсов (Сумма, Кво, ВалСумма) и стандартыми отчетами (стандартные обычно работают не более чем с тремя субконто)
В рамках твоей задачи я вижу пока 2 объекта накопления:
1. ВыданноеОборудование. Аналитики: Клиент, Оборудование, ДатаВозврата; Ресурсы: Кво, Сумма
2. Взаиморасчеты. Аланитика: Клиент; Ресурсы Сумма.
(В принципе можно обойтись и одним, но ИМХО 2 удобнее)

Теперь проверим твое понимание: в рамках описанных мною структур напиши какие движения по этим объектам накопления будут делать твои документы (выдача оборудования, возврат оборудования, продление срока аренды)
Записан
Стервочка
Гость
« Ответ #29 : 21-03-2010 13:28 » 

Спасибо большое, но я уже сама все сделала! Прости за беспокойство!.. Прощаемся!))
Записан
Страниц: [1] 2  Все   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines