Элексир
|
|
« : 01-11-2008 20:44 » |
|
Здравствуйте, подскажите пожалуйста я пробую сделать свою первую конфигурацию. у меня есть справочник "Сотрудники" с реквизитами "Зарплата"-реквизит введен вручную. и "фамилия" - тот что создается по наименованию. создал документ "отчет по сотрудникам" с реквизитами "Сотрудник" и "Зарплата". моя цель в том чтобы при нажатии на кнопку у меня автоматически выводился весь список сотрудников с ихними зарплатами. но пока получается только с выводом фамилии. Перем База; Перем Сотр;
Процедура Выбор(); Если Сотр.Выбран()=1 тогда Сотрудник=База.ТекущийЭлемент(); КонецЕсли КонецПроцедуры
Процедура Зар(); Если Сотр.Выбран()=1 тогда Зарплата=База.НайтиПоНаименованию("Зарплата"); КонецЕсли КонецПроцедуры
Процедура Заполнить(); Если КоличествоСтрок()=0 Тогда База=СоздатьОбъект("Справочник.Сотрудники"); База.ВыбратьЭлементы(); Пока База.ПолучитьЭлемент()=1 Цикл НоваяСтрока(); Сотр=База.ТекущийЭлемент(); Выбор(); Зар(); КонецЦикла КонецЕсли КонецПроцедуры
при таком коде прога ругается на : Пока База.ПолучитьЭлемент()=1 Цикл {Документ.ОтчетПоСотрудникам.Форма.Модуль(22)}: Не выбран элемент!
|
|
« Последнее редактирование: 01-11-2008 20:46 от Элексир »
|
Записан
|
|
|
|
Kivals
|
|
« Ответ #1 : 02-11-2008 19:45 » |
|
Ты меняешь позицинирование в справочнике методом База.НайтиПоНаименованию("Зарплата"); Вообще-то метод НайтиПоНаименованию() ищет элемент в справочнике, а не реквизит (и возвращает 0 или 1 в азвисимости от результата поиска). Тебе нужно написать Зарплата=База.ПолучитьАтрибут("Зарплата") или просто Зарплата=База.Зарплата;
Пара замечаний к самому коду: меньше используй глобальные переменные - лучше передавать нужные переменные в функцию (процедуру) да и сам цикл заполнения можно написать компактнее и нагляднее без вызова других процедур проверки Если Сотр.Выбран()=1 Тогда в твоем случае тоже лишние - если элемент не будет выбран - у тебя просто вернется пустое значение для ТекущийЭлемент() и Зарплата
|
|
|
Записан
|
|
|
|
Элексир
|
|
« Ответ #2 : 03-11-2008 12:49 » |
|
Kivals, спасибо за ответ. Хотел бы задать еще такой вопрос. Какие функции отвечают за получение периодических реквизитов? и как их использовать в подчинных справочниках? если можно урл на подсказку
|
|
|
Записан
|
|
|
|
Kivals
|
|
« Ответ #3 : 03-11-2008 13:42 » |
|
Есть 2 взаимоисключающие функции: ИспользоватьДату() и Получить() (Установить()). Предположим у тебя есть в справочнике Сорудников периодический реквизит Зарплата, тогда код будет такой: Спр=СоздатьОбъект("Справочник.Сотрудники"); Спр.ВыбратьЭлементы(); Пока Спр.ПолучитьЭлемент()=1 Цикл Спр.ИспользоватьДату(РабочаяДата()); ТекЗП=Спр.Зарплата; Сообщить(""+Спр.Наименование+" "+ТекЗП); КонецЦикла; Или такой: Спр=СоздатьОбъект("Справочник.Сотрудники"); Спр.ВыбратьЭлементы(); Пока Спр.ПолучитьЭлемент()=1 Цикл ТекЗП=Спр.Зарплата.Получить(РабочаяДата()); Сообщить(""+Спр.Наименование+" "+ТекЗП); КонецЦикла;
Кроме того есть объект Периодический - сего помощью можно посмотреть когда менялись значения: П=СоздатьОбъект("Периодический"); П.ИспользоватьОбъект("Зарплата",ВыбСотрудник); П.ВыбратьЗначения(НачДата,КонДата); Пока П.ПолучитьЗначение()=1 Цикл Сообщить(""+П.ДатаЗнач+" "+П.Значение); КонецЦикла; Помощь смотреть в среде 1С:Конфигуратор по кнопке Ctrl+F1 на нужной функции
|
|
|
Записан
|
|
|
|
Элексир
|
|
« Ответ #4 : 03-11-2008 14:16 » |
|
Kivals, благодарю за Код и справку щас попробую использовать
|
|
|
Записан
|
|
|
|
Стервочка
Гость
|
|
« Ответ #5 : 19-03-2010 16:10 » |
|
Нужна помощь! Очень! мне нужно рассчитать сумму которую должны вернуть клиенту,если оборудование возвращено из аренды в нормальном состоянии,если нет то списываем залог. Создаю перечисление(плохое, норм). Запускаю док "возврат оборудования" , нажимаю кнопку "заполнить", и оно считывает данные из сравочника "выданное оборудование". Но! При редактировании столбца "состояние при возврате" на 'плохое' оно обнуляет залог, но если хочу вернуть в состояние 'норм', оно берет данные "залог" уже не свои, а у соседней строки,либо совсем так и остается нулем... Мне посоветовали сделать либо через поиск по наименованию, либо через дополнительную переменную, которая будет хранить значения на время выполнения процедуры, но у меня не получается!(((( объясните, что примерно там писать?
|
|
|
Записан
|
|
|
|
Kivals
|
|
« Ответ #6 : 19-03-2010 16:27 » |
|
Стервочка, абсолютно не представляю. У тебя какая-то самописная конфигурация (или мне совершенно не знакомая), так что мне совершенно не ясно как организована структура данных и расчет данных... Нужен 1cv7.md (в архиве)
|
|
|
Записан
|
|
|
|
Стервочка
Гость
|
|
« Ответ #7 : 19-03-2010 16:30 » |
|
Aaaaaa! Пойду тогда вешаться....
а если я тебе кину настройку, сможешь глянуть?
|
|
« Последнее редактирование: 20-03-2010 20:13 от RXL »
|
Записан
|
|
|
|
Kivals
|
|
« Ответ #8 : 19-03-2010 16:34 » |
|
Прицепи к сообщению (кнопка: Предварительный просмотр - Дополнительные опции), только сархивировать не забудь
|
|
|
Записан
|
|
|
|
Стервочка
Гость
|
|
« Ответ #9 : 19-03-2010 16:41 » |
|
ок!)) скажи мне хоть что-нить! Ну как, сможешь мне помочь?!
|
|
« Последнее редактирование: 20-03-2010 20:12 от RXL »
|
Записан
|
|
|
|
Kivals
|
|
« Ответ #10 : 19-03-2010 20:42 » |
|
ну и где?
|
|
|
Записан
|
|
|
|
Стервочка
Гость
|
|
« Ответ #11 : 19-03-2010 20:43 » |
|
на еще раз глянешь? пожалуйста!!!!
|
|
« Последнее редактирование: 20-03-2010 20:13 от RXL »
|
Записан
|
|
|
|
Kivals
|
|
« Ответ #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
|
|
« Ответ #14 : 20-03-2010 07:48 » |
|
Как сделать, чтобы при установке статуса возврата в "не вернули" оно не списывало его со счетов? Взаиморасчеты по клиентам должны выстись отдельно: по регистру или бух.счету (в твоем случае скорее всего забалансовому). Тогда не нарушится логика: оборудование за клиентом уже не числится, но денег он еще должен. Кстати если использовать регистры или счета - можно обойтись и без периодических реквизитов: отдельный регистр (счет) отвечает за выданное оборудование. и еще один момент, как сделать, чтобы при продлении срока аренды оно заменяло ДатуВозврата на ДатуПродления? В твоем случае: при проведении документа Продление ищишь нужный элемент справочника и изменяешь дату: Спр=СоздатьОбъект("Справочник.ВыданноеОборудование"); Спр.ИспользоватьВладельца(Клиент); Если Спр.НайтиПоРеквизиту("Оборудование",Оборудование,0)=0 Тогда Сообщить("Оборудование не выдано клиенту: "+Оборудование,"i"); Возврат; КонецЕсли; Спр.ДатаВозврата=ДатаПродления; Спр.Записать();
|
|
|
Записан
|
|
|
|
Стервочка
Гость
|
|
« Ответ #15 : 20-03-2010 07:53 » |
|
Это отдельным доком или в модуле дока "Возврат"?
|
|
|
Записан
|
|
|
|
Kivals
|
|
« Ответ #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
|
|
« Ответ #18 : 20-03-2010 20:15 » |
|
Стервочка, умерьте свой пыл - люди отдыхают по выходным И еще: пользуйтесь редактированием своего предыдущего сообщения - здесь не чат.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Стервочка
Гость
|
|
« Ответ #19 : 20-03-2010 20:18 » |
|
я понимаю, что выходной! но мне реально нужна помощь!очень!(((
|
|
|
Записан
|
|
|
|
RXL
|
|
« Ответ #20 : 20-03-2010 20:30 » |
|
Стервочка, и что? Вот сейчас Kivals, предположим, сидит в кругу семьи и смотрит футбол, а может выпивает в подъезде с местными синяками (чего только не бывает), а может ... - какая разница - он на отдыхе. Быстрее никак не ответит. Кстати, тут еще есть пара пара активных модераторов и еще не модераторы, но тоже активные. И, судя по всему, они тоже отдыхают. Терпение и еще раз терпение. Срочно и сейчас - это когда договор и за бабки. Да и то, зачастую, фиг достучишься.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Sla
|
|
« Ответ #21 : 20-03-2010 20:44 » |
|
RXL, Offtopic: Ожидает боя Кличка, запасшись пивом
Поставлю в угол.
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Sla
|
|
« Ответ #22 : 20-03-2010 20:59 » |
|
Стервочка, а что не работает? ты отладчиком пошагово прошла?
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Стервочка
Гость
|
|
« Ответ #23 : 20-03-2010 21:16 » |
|
Мне это ничем не помогает.... Я только начинаю работать в 1С и еще ничего толком не знаю... А выдали задание, и его нужно сдать в пн любой ценой... Вот я и истерю...
|
|
|
Записан
|
|
|
|
Sla
|
|
« Ответ #24 : 20-03-2010 21:19 » |
|
ставь точку останова на входе в нужную процедуры, и пошагово проходи
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Стервочка
Гость
|
|
« Ответ #25 : 20-03-2010 21:21 » |
|
это поставить точку, запустить док, а когда дойдет до точки останова - F5? Так?
|
|
« Последнее редактирование: 20-03-2010 21:24 от Стервочка »
|
Записан
|
|
|
|
Sla
|
|
« Ответ #26 : 20-03-2010 21:25 » |
|
как это не работает? Может ты не там поставила точку останова?
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Стервочка
Гость
|
|
« Ответ #27 : 20-03-2010 21:31 » |
|
Ерунда полная получается... 1С живет своей жизнью, и в последние дни ей плевать на меня... Я знаю, что Kivals знает, как мне помочь, но он меня игнорирует... А сама я не справлюсь...
|
|
« Последнее редактирование: 20-03-2010 21:53 от Стервочка »
|
Записан
|
|
|
|
Kivals
|
|
« Ответ #28 : 21-03-2010 12:58 » |
|
Разобраться как правильно поступить при твоей организации данных - это извратить мозг по самое нихочу. Я такого обычно не делаю даже за деньги. Offtopic: Это приблизительно как гланды через ж***. Твой аргумент что так до тебя сделано в интерпретации гланд звучит так: геморой ведь лечат через задний проход, значит и гланды можно. Немного утрировано - но суть думаю понятна. Поэтому я сейчас опишу как я вижу представление данных, а ты решай сама - переделыать так или нет. Итак: для учета приходно/расходных величин в 1С 7.7 есть 2 варианта (назовем их "объектами накопления"): либо бух. счет, либо оперативный регистр. Они имеют некоторые различия, для твоей задачи - непринципиальные. В обоих случаях для объектов накопления характерны: аналитики учета (для счета это Субконто, для регистра - Измерения) и числовые ресурсы (Счет: Сумма, Количество, Валютная сумма; Регистр: любое количество и названия Ресурсов). По объектам учета в разрезе каждой или совокупности аналитик ты можешь получить обороты и/или остатки по ресурсам. Мне удобнее пользоваться бух.счетами, т.к. их можно корректировать ручным документом Операция (для регистров это невозможно). Но их использование ограничено количеством ресурсов (Сумма, Кво, ВалСумма) и стандартыми отчетами (стандартные обычно работают не более чем с тремя субконто) В рамках твоей задачи я вижу пока 2 объекта накопления: 1. ВыданноеОборудование. Аналитики: Клиент, Оборудование, ДатаВозврата; Ресурсы: Кво, Сумма 2. Взаиморасчеты. Аланитика: Клиент; Ресурсы Сумма. (В принципе можно обойтись и одним, но ИМХО 2 удобнее) Теперь проверим твое понимание: в рамках описанных мною структур напиши какие движения по этим объектам накопления будут делать твои документы (выдача оборудования, возврат оборудования, продление срока аренды)
|
|
|
Записан
|
|
|
|
Стервочка
Гость
|
|
« Ответ #29 : 21-03-2010 13:28 » |
|
Спасибо большое, но я уже сама все сделала! Прости за беспокойство!.. Прощаемся!))
|
|
|
Записан
|
|
|
|
|