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

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

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

Автор: Talkman 22.11.21, 16:39

Добрый день. Впал в ступор, прошу помощи. 1С ПУБ, релиз платформы последний официальный.
Проблема.
Есть Справочник.ТМЦ, у него есть список периодических реквизитов. Один из них АвторДокаУЦ, который ведет учет пользователей, которые меняли учетную цену товара. В процедуре ПриЗаписи() меняется значение реквизита АвторДокаУЦ на нужное значение, проверяю в конфигураторе и с помощью сообщить(АвторДокаУЦ). Высвечивается нужное мне значение. После выполнения процедуры ПриЗаписи() значение в периодический реквизит не записывается. В чем может быть проблема? Перед присвоением значения реквизиту используется метод ИспользоватьДату(). Остальные периодические реквизиты элемента записываюются без проблем...

Автор: denis84 22.11.21, 16:58

Talkman @ Сегодня, 16:39 * ,

Установить(<?>,);
Синтаксис:
Установить(<Дата>,<Значение>)
Назначение:
Установить значение периодического реквизита справочника на заданную дату.
Параметры:
<Дата> - выражение со значением требуемой даты;
<Значение> - выражение, содержащее устанавливаемое значение периодического реквизита справочника.
Замечание:
Метод можно использовать только для периодических реквизитов справочника и если для справочника еще не применялся метод ИспользоватьДату. Метод можно использовать только для объектов-справочников, созданных функцией СоздатьОбъект.

Автор: Talkman 22.11.21, 17:08

denis84 @ Сегодня, 16:58 * ,
В элементе справочника используется метод ИспользоватьДату(). В моем случае метод Установить() не применяется, применяется прямое присвоение.
ИспользоватьДату(<?>,);
Синтаксис:
ИспользоватьДату(<Дата>,<УстСразу>)
Назначение:
Установить дату выборки периодических реквизитов справочника.
Возвращает:
Текущее значение используемой даты (на момент до исполнения метода).
Параметры:
<Дата> - значение типа дата.
<УстСразу> - необязательный параметр. Число: если 1, то дата, переданная в качестве параметра, будет установлена уже в текущей выборке; если 0 - то дата, переданная в качестве параметра, будет установлена при следующем открытии выборки. Значение по умолчанию - 0. .
Замечание:
Если к объекту применен метод ИспользоватьДату, то нельзя применять к этому же объекту метод Получить.
Метод нельзя использовать через две точки.

Автор: Sharzem 22.11.21, 19:57

Я вніс корективу в своє ж повідомлення.
Друже, 44000000.gif
https://pro1c.org.ua/index.php?showtopic=12161&hl=

https://pro1c.org.ua/index.php?showtopic=15530&hl=

https://pro1c.org.ua/index.php?showtopic=4798&hl=

Але в цілому РЕСПЕКТ!!!
Працює і не вмерла 7.7.
Також її тягну (хоча скоріш за все вона мене і тягне, і годує...)

Автор: Talkman 23.11.21, 8:16

Sharzem @ Вчера, 19:57 * ,
Чесно кажучі вона мене вже дістала та сімка. Доречі, проблема вирішилася за допомогою СоздатьОбъект("Периодический") і додаванням нового запису для АвторДокаАЦ на необхідну дату. Я застопорився в тому, що всі інші періодичні реквізити зберігаються, а цей ні.

Автор: denis84 23.11.21, 8:23

denis84 @ Вчера, 16:58 * ,
У меня была такая задача - необходимо было изменить цену (периодический реквизит) ТМЦ. На форме выбрал группу ТМЦ и значение цен,которая была и которая станет и для всех элементов изменить цену:

//*******************************************
Процедура Сформировать()
СпрТМЦ = СоздатьОбъект("Справочник.ТМЦ");
СпрТМЦ.ИспользоватьРодителя(ВыбТМЦ);
СпрТМЦ.ВыбратьЭлементы();
Пока СпрТМЦ.ПолучитьЭлемент()>0 Цикл
    Если СпрТМЦ.ЭтоГруппа()=0 Тогда
        СпрТМЦ.УчетнаяЦена.Получить(ТекущаяДата());        
                Состояние("Обработано"+СпрТМЦ.Код);
            П = СоздатьОбъект("Периодический");
        П.ИспользоватьОбъект("УчетнаяЦена",СпрТМЦ.ТекущийЭлемент());
        П.ВыбратьЗначения();
        Пока П.ПолучитьЗначение()=1 Цикл
            Цена = СпрТМЦ.УчетнаяЦена.Получить(ДатаРек);
            Если Цена = ЦенаБыло Тогда
                СпрТМЦ.УчетнаяЦена.Установить(ДатаРек,ЦенаСтало);
            КонецЕсли;
            СпрТМЦ.Записать();
        КонецЦикла;
    КонецЕсли;
КонецЦикла;
КонецПроцедуры

Автор: Talkman 23.11.21, 8:47

denis84 @ Сегодня, 8:23 * ,
Я может не дописал описание ситуации. Элемент справочника сохранятся должен интерактивно, то есть через форму элемента справочника. С обработками все предельно понятно. Затык был в том, что при сохранении элемента справочника все периодические реквизиты, значения которых менялись, записывались правильно, кроме одного. Я так и не понял, почему АвторДокаУЦ не записывался со всеми другими реквизитами, хотя его значение на последней строчке процедуры ПриЗаписи() было верное. Тип "Периодический" помог, но лично я считаю это костылем. Но работает же, и фиг с ним.

Автор: Sharzem 23.11.21, 18:07

Цитата(Talkman @ 23.11.21, 9:47) *
Я так и не понял, почему АвторДокаУЦ не записывался со всеми другими реквизитами

А можна процедуру ПриЗаписи() в студію?
Чесно, я не зрозумів проблеми. Може Ви, маєте на увазі підпорядковані елементи?
Періодичні реквізити так і працюють як Ви вважаєте "костилем".
Як я бачу те, що Ви намагаєтеся подолати:
Варіант 1: Хочете бачити які реквізити довідника змінені Автором (в цьому випадку, потрібен окремий довідик куди писати що мінялося, коли мінялося і ким.)
Варіант 2: Хочете бачити хто останній вніс корективи в довідник (в даному випадку періодичність)
Варіант 3: В темі цієї статті згадуєте різні елементи довідника "АвторДокаУЦ" та "АвторДокаАЦ" можливо випадково наплутали ?

Може варто все розпочати з початку ? Або змиритися з "Но работает же, и фиг с ним", тоді мета досягнута, вибачте що потурбував...

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