Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Не удается реквизит сделать периодическим 1с 7.7 конф 7.7.003
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 7.7
ZUBR
Здравствуйте. В моей доработанной под себя конфигурации в справочнике Номенклатура я ввел новый реквизит КЗП - коэфициент зарплаты для работников. Этот коэфициент используется в РасходнойНакладной для подсчета зарплаты конкретному сотруднику от каждой позиции табличной части. То есть, каждая позиция имеет свой установленный КЗП, который затем умножается на значение товара или услуги. И получается часть, которая заработанная работником по данной позиции.
Все работало и считало хорошо. Но затем встал вопрос изменения коэфициентов по ряду позиций. И, чтобы при этом не менялись результаты в отчетах за прошлые месяцы, я решил сделать этот реквизит периодическим. Зашел в конфигураторе в справочник и поставил галочку в свойствах реквизита КЗП на вкладке Дополнительные "Периодический".
После этого программа умножать сумму конкретной позиции на конкретный КЗП перестала. В ячейке, где должен быть результат, даже не ноль, а просто пустая ячейка. Я уже и галочку "Изменяется документами" ставил, и "ручное изменение" убирал - не работает. А как только убираю галочку "Периодический" - сразу начинает считать. Что я не так делаю? Как правильно сделать периодическим реквизит?
Pepe
периодический реквизит надо получать на дату. Позтому везде, где он встречается необходимо внести изменения для корректной работы программы.
denis84
Пример получения периодического реквизита "Цена" для номенклатуры:
УчЦена = Запр.ТМЦ.УчетнаяЦена.Получить(ДатаПо);


ДатаПо - у меня это реквизит на форме.

А потом уже использовать эту "УчЦена" при дальнейших расчетах. Но как сказали уже выше, Вам необходимо будет везде произвести эти изменения получения Вашего "КЗП"
ZUBR
denis84 @ Сегодня, 9:19 необходимо зарегистрироваться для просмотра ссылки ,
Недостаточно информации для понимания. Если можно, приведите, пожалуйста, конкретный пример с более подробным описанием, или дайте ссылку, где почитать. В гугле ничего толкового не нашел. Спасибо.
volodya1122
1. що означає відмітка "Изменяется документами"- Це означає що значення періодичного реквізиту справочника можна міняти тільки документом (в ОбработкаПроведения() ). Коди документ помічається на видалення або робиться непроведеним, то автоматично значення цього реквізиту пропадає (яке привязане до даного документа)
2. Якшо ще поставити "Ручне Изменение" тоді значення періодичного реквізиту можна міняти з любого місця прогами. Але при видаленні документа воно автоматично не пропаде.
Для установки значення документом слід писати так:
 УстановитьРеквизитСправочника(Спр.ТекущийЭлемент(),"НазваниеПереодическогоРеквизита","Запишем тут значение реквизита",ДатаДок);

Для ручного встановлення значення потрібно писати:
Спр.ТекущийЭлемент().ПерРеквизит.Установить(ТекущаяДата(),"НужноеЗ значение");


Отримати значення реквізиту
ЗначениеРеквизитаНадату=Спр.ТекущийЭлемент().ПерРеквизит.Получить(НужнаяДата)



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


Для Установить і УстановитьРеквизитСправочника Записывать справочник непотрібно (якщо міняються тільки періодичні реквізити).

Думаю щось пояснив, або ще більше запутав. Якщо є питання, то задавайте конкретніше

Ще забув добавити.
При Відмітці "ручне Изменение"в межах дня може бути тільки одне значення періодичного реквізита. Якщо їх буде декілька, то збрежеться те яке останнім змінювалось.
При "изменениеДокументом" на кожен документ буде своє значення періодичного реквізиту (хоч 100500 значень в межах одного дня) . Для отримання значення такого реквізитуможна використовувати не дату, а позицію документу
ЗначениеРеквизитаНадату=Спр.ТекущийЭлемент().ПерРеквизит.Получить(ТекДокумент)

Але є один недолік в періодичних реквізитів. Абсолютно всі періодичні реквізити всіх справочников зберігаються в одній таблиці. І якщо їх буде дуже багато, то ця таблиця дуже швидко розростеться. І ще з цього випливає, що доступ до періодичних реквізитів буде повільнішим, так як фізично 1С повинна опрацювати дві таблиці (таблицю справочника, і таблицю періодичних реквізитів- це два різних файли на диску)
ZUBR
volodya1122 @ Сегодня, 18:32 необходимо зарегистрироваться для просмотра ссылки ,
Чесно скажу, не ясно. Де і що писати. В мене в довіднику Номенклатура є реквізит КЗП з форматом число . Наприклад, 0.115.
Значення цього реквізиту я записую в довідник вручну. І далі це число використовується в програмі для обчислень.
Потім я вручну міняю це число. І мені потрібно, щоб при обчисленні даних в звітах по тих документах, що були раніше, використовувалось старе значення реквізиту, а в документах після його зміни - нове значення. Конкретно, що прописати в довіднику і де. І чи треба щось прописувати в документах, де воно використовується, крім його ідентифікатора. Дякую.
denis84
ZUBR @ Вчера, 23:00 необходимо зарегистрироваться для просмотра ссылки ,
Устанавливайте КЗП на дату например 01/01/20 = 0,115. Дальше например на 01/02/20 =0,2. А в отчетах(документах) получаете на нужную Вам дату значение этого "КЗП". Для каждого нового значения "КЗП" указываете новую дату, не в коем случае не изменяете старую дату, т.к. потеряете старые значения. Теперь понятно?

volodya1122
ZUBR @ Вчера, 23:00 необходимо зарегистрироваться для просмотра ссылки ,
Наскільки я зрозумів в довіднику Номенклатура реквізит КЗП записується тільки вручну. Ніякими документами він не міняється і небуде мінятись документами.
Тоді процес спрощується, Але роботи всеодно буде потрібно багато.
1. В довіднику поставити признак ПеріодичнийРеквізит. ИзменениеДокументом не ставити.
2. Зберегти конфігурацію і зайти в Предприятие. Перше значення періодичного реквізита повинно встановитись автоматично на дату наприклад 1 січня 1980 року. Це добре. (перевірити: права кнопка на номенклатурі-> Історія реквізиту). Якщо так поставилсь тоді все добре.
3. В довіднику контрагенти в процедурі ПриОткрытии прописати це (якщо його там немає);
        СохранениеПериодическихРеквизитов(2, "*");
    ИспользоватьДату(ТекущаяДата()); // періодичні реквізити будут завжди записуватись на сьогодні
//або ИспользоватьДату(РабочаяДата());// періодичні реквізити будуть записуватись на робочу дату (робочу дату можна міняти в (сервіс-Параметри-Общие)

При цьому 1С небуде задавати додаткових питань на яку дату записувати реквізити.
4. Тут саме цікаве. Всюди (в документах, в звітах, в макетах (печатних формах)), де використовується ваш реквізит КЗП потрібно замінити
Наприклад :
знач=Спр.КЗП: // було так
знач=Спр.КЗП.Получить(НужнаяДата): // змініти на це

ZUBR
volodya1122 @ Вчера, 9:36 необходимо зарегистрироваться для просмотра ссылки ,
дякую, все вийшло!
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.