Версия для печати темы (https://pro1c.org.ua/index.php?s=851c4c111e4d9ebe449495a6f03f408d&showtopic=58636)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование в 1С Предприятие 7.7 _ Не удается реквизит сделать периодическим 1с 7.7 конф 7.7.003

Автор: ZUBR 27.04.20, 0:01

Здравствуйте. В моей доработанной под себя конфигурации в справочнике Номенклатура я ввел новый реквизит КЗП - коэфициент зарплаты для работников. Этот коэфициент используется в РасходнойНакладной для подсчета зарплаты конкретному сотруднику от каждой позиции табличной части. То есть, каждая позиция имеет свой установленный КЗП, который затем умножается на значение товара или услуги. И получается часть, которая заработанная работником по данной позиции.
Все работало и считало хорошо. Но затем встал вопрос изменения коэфициентов по ряду позиций. И, чтобы при этом не менялись результаты в отчетах за прошлые месяцы, я решил сделать этот реквизит периодическим. Зашел в конфигураторе в справочник и поставил галочку в свойствах реквизита КЗП на вкладке Дополнительные "Периодический".
После этого программа умножать сумму конкретной позиции на конкретный КЗП перестала. В ячейке, где должен быть результат, даже не ноль, а просто пустая ячейка. Я уже и галочку "Изменяется документами" ставил, и "ручное изменение" убирал - не работает. А как только убираю галочку "Периодический" - сразу начинает считать. Что я не так делаю? Как правильно сделать периодическим реквизит?

Автор: Pepe 27.04.20, 7:14

периодический реквизит надо получать на дату. Позтому везде, где он встречается необходимо внести изменения для корректной работы программы.

Автор: denis84 27.04.20, 8:19

Пример получения периодического реквизита "Цена" для номенклатуры:

УчЦена = Запр.ТМЦ.УчетнаяЦена.Получить(ДатаПо);


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

А потом уже использовать эту "УчЦена" при дальнейших расчетах. Но как сказали уже выше, Вам необходимо будет везде произвести эти изменения получения Вашего "КЗП"

Автор: ZUBR 27.04.20, 15:48

denis84 @ Сегодня, 9:19 * ,
Недостаточно информации для понимания. Если можно, приведите, пожалуйста, конкретный пример с более подробным описанием, или дайте ссылку, где почитать. В гугле ничего толкового не нашел. Спасибо.

Автор: volodya1122 27.04.20, 17:32

1. що означає відмітка "Изменяется документами"- Це означає що значення періодичного реквізиту справочника можна міняти тільки документом (в ОбработкаПроведения() ). Коди документ помічається на видалення або робиться непроведеним, то автоматично значення цього реквізиту пропадає (яке привязане до даного документа)
2. Якшо ще поставити "Ручне Изменение" тоді значення періодичного реквізиту можна міняти з любого місця прогами. Але при видаленні документа воно автоматично не пропаде.
Для установки значення документом слід писати так:

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

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


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



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


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

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

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

Але є один недолік в періодичних реквізитів. Абсолютно всі періодичні реквізити всіх справочников зберігаються в одній таблиці. І якщо їх буде дуже багато, то ця таблиця дуже швидко розростеться. І ще з цього випливає, що доступ до періодичних реквізитів буде повільнішим, так як фізично 1С повинна опрацювати дві таблиці (таблицю справочника, і таблицю періодичних реквізитів- це два різних файли на диску)

Автор: ZUBR 27.04.20, 22:00

volodya1122 @ Сегодня, 18:32 * ,
Чесно скажу, не ясно. Де і що писати. В мене в довіднику Номенклатура є реквізит КЗП з форматом число . Наприклад, 0.115.
Значення цього реквізиту я записую в довідник вручну. І далі це число використовується в програмі для обчислень.
Потім я вручну міняю це число. І мені потрібно, щоб при обчисленні даних в звітах по тих документах, що були раніше, використовувалось старе значення реквізиту, а в документах після його зміни - нове значення. Конкретно, що прописати в довіднику і де. І чи треба щось прописувати в документах, де воно використовується, крім його ідентифікатора. Дякую.

Автор: denis84 28.04.20, 8:25

ZUBR @ Вчера, 23:00 * ,
Устанавливайте КЗП на дату например 01/01/20 = 0,115. Дальше например на 01/02/20 =0,2. А в отчетах(документах) получаете на нужную Вам дату значение этого "КЗП". Для каждого нового значения "КЗП" указываете новую дату, не в коем случае не изменяете старую дату, т.к. потеряете старые значения. Теперь понятно?


Автор: volodya1122 28.04.20, 8:36

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

        СохранениеПериодическихРеквизитов(2, "*");
    ИспользоватьДату(ТекущаяДата()); // періодичні реквізити будут завжди записуватись на сьогодні
//або ИспользоватьДату(РабочаяДата());// періодичні реквізити будуть записуватись на робочу дату (робочу дату можна міняти в (сервіс-Параметри-Общие)

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


Автор: ZUBR 29.04.20, 0:12

volodya1122 @ Вчера, 9:36 * ,
дякую, все вийшло!

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua