Имя: Пароль:
1C
1C 7.7
v7: Удаление периодических реквизитов при отмене проведения
0 es3000
 
16.04.07
15:38
Стоит такая задача: для контрагента надо задавать некоторое периодическое значение. Если это значение для контарегнта не задано, то берется значение периодической константы.
Это все я сделал документом "ВводЗначения", в котором указывается общее для всех контрагшентов значение и в табличной части можно задать значение для каждого конкретного контрагента.
По идее при отмене проведения этого документа все периодические значения должны удалиться и из справочника и у константы. А у меня этого не происходит.
Или я в чем то не прав?
1 Фокусник
 
16.04.07
15:41
(0) С константой не прав. Со справочником прав и ставить реквизит нужно через УстановитьРеквизитСправочника
2 Оберон
 
16.04.07
15:42
при отмене проведения удаляются только движения (проводки,операции)
значения переодических реквизитов остаются, т.е. их удаление надо прописывать ручками..
3 Вильям
 
16.04.07
15:49
(2) -1
4 France
 
16.04.07
15:50
3+ -1
5 es3000
 
16.04.07
15:51
а как удалить периодическое значение константы?
6 France
 
16.04.07
15:53
4 +
УстановитьРеквизитСправочника(<?>,,,,,,);
7 ado
 
16.04.07
15:55
(5) Объект "Периодический"
8 es3000
 
16.04.07
16:16
Сделал через УстановитьРеквизитСПравочника, все равно при отмене проведения периодическое значение не удаляется :(
9 Ёпрст
 
гуру
16.04.07
16:30
(8) ОчиститьДвижения воткни в модуль.
10 у лю 427
 
16.04.07
16:41
акуе... пардон, просто дятлы...
11 Соратник
 
16.04.07
16:46
(0)При отмене проведения удаляются только те значения, которые при проведении были установлены документом через УстановитьРеквизитСправочника...РТФМ
12 es3000
 
16.04.07
16:51
(9) если я вставляю вызов "ОчиститьДвижения" в обработку отмены проведенеия , то при отмене проведения пишет: "Недопустимая операция"

(11) В том то и дело, что сейчас я периодические реквизиты справочника устанавливаю через "УстановитьРеквизитСправочника", но при отмене проведения значение этого периодического реквизита все равно остается
13 1Сергей
 
16.04.07
16:51
(0)Галки "Изменяется документом" и "Ручное изменение"?
14 es3000
 
16.04.07
16:51
(13) щас проверю
15 es3000
 
16.04.07
16:52
(10) блин, умник ....
ты постоянно вставляешь какие-то замечания насчет дятлов, хотя толком ни разу  не помог. Если все знаешь, то помогай, для этого форум и создан.

А если хочешь умничать заведи себе отдельный форум и там дрочи. В психиатрии таких нарциссами называют

Извините, товарищи
16 es3000
 
16.04.07
16:58
(13) обе галки поставил, все равно то же самое
17 1Сергей
 
16.04.07
17:01
Попробуй
ОчиститьДвижения("Справочник");
18 Ёпрст
 
гуру
16.04.07
17:03
(16) У документа стоит "автоматическое удаление движений" ? ... Если нет, то ОчиститьДвижения("Справочник"); воткни в ОбработкаПроведения.
19 AlexNew
 
16.04.07
17:03
Если ты их раньше записал без УстановитьРеквизитСправочника, то они автоматом и не удалятся. Сделай новый.
20 1Сергей
 
16.04.07
17:07
Интересно, а если убрать галку Ручное изменение, они слетят все к чертовой матери?
21 es3000
 
16.04.07
17:10
(20) Я как раз убрал у реквизита галку "Редактируется вручную", ничего не слетело и теперь при отмене проведения все исчезает :)
В этом было дело
Всем спасибо :)
22 1Сергей
 
16.04.07
17:11
(21) Ты глянь хорошо, может всё-таки что-то слетело :)
23 es3000
 
16.04.07
17:21
А как можно не прочитать значение периодического реквизита на дату, а просто узнать установлено оно или нет?
Дело в том, что если ничего не установлено, то "Получить()" возвращает 0.  Как понять то ли это 0 установлен, то ли ничего не установлено. В программе должны выполняться разные действия в зависимости от этого
24 AlexNew
 
16.04.07
17:23
Объект "Периодический"
25 zavsom
 
16.04.07
17:25
СтрокаСтатуса("Выборка значений периодических констант...");
       
       ТЗ.НоваяКолонка("Имя", "Строка");
       ТЗ.НоваяКолонка("Значение");
       Для Сч=1 По Метаданные.Константа() Цикл
           Если Метаданные.Константа(Сч).Периодический=1 Тогда
               ИмяК=Метаданные.Константа(Сч).Идентификатор;
               ТЗ.НоваяСтрока();
               ТЗ.Имя=ИмяК;
               ТЗ.Значение=Константа.ПолучитьАтрибут(ИмяК).Получить(ДатаСвертки);
           КонецЕсли;
       КонецЦикла;
26 zavsom
 
16.04.07
17:26
а теперь очистим
27 zavsom
 
16.04.07
17:27
Функция ОбработкаПериодическихКонстант(ТЗ, Режим)
// Режим=1 : Заполнение таблицы;
// Режим=2 : Удаление истории и запись по таблице;

   Если Режим=1 Тогда            // заполнение таблицы
       
       СтрокаСтатуса("Выборка значений периодических констант...");
       
       ТЗ.НоваяКолонка("Имя", "Строка");
       ТЗ.НоваяКолонка("Значение");
       Для Сч=1 По Метаданные.Константа() Цикл
           Если Метаданные.Константа(Сч).Периодический=1 Тогда
               ИмяК=Метаданные.Константа(Сч).Идентификатор;
               ТЗ.НоваяСтрока();
               ТЗ.Имя=ИмяК;
               ТЗ.Значение=Константа.ПолучитьАтрибут(ИмяК).Получить(ДатаСвертки);
           КонецЕсли;
       КонецЦикла;

   ИначеЕсли Режим=2 Тогда        // запись периодических констант
       ТЗ.ВыбратьСтроки();
       Пока ТЗ.ПолучитьСтроку()<>0 Цикл
           
           Состояние("Обработка истории константы : "+ТЗ.Имя);
           
           // очистка истории
           Пер=СоздатьОбъект("Периодический");
           Пер.ИспользоватьОбъект(ТЗ.Имя);
           ФлагВыхода=0;
           Пока Пер.ВыбратьЗначения(, ДатаСвертки)<>0 Цикл
               Пока Пер.ПолучитьЗначение()<>0 Цикл
                   //***ШО
                   Если ПустоеЗначение(Пер.ТекущийДокумент()) = 1 Тогда
                       //Сообщить(Пер.ТекущийОбъект());
                       Пер.Удалить();
                   Иначе
                       ФлагВыхода=1;
                   КонецЕсли;
                   //***шо
               КонецЦикла;
               
               Если ФлагВыхода=1 Тогда
                   Сообщить("Вот и выход");
                   Прервать;
               КонецЕсли;
               
           КонецЦикла;
           
           // запись текущего значения
           Если ПустоеЗначение(ТЗ.Значение)=0 Тогда
               Пер.Значение=ТЗ.Значение;
               Пер.ДатаЗнач=ДатаСвертки;
               Пер.Записать();
           КонецЕсли;
           
       КонецЦикла;
   КонецЕсли;
   
   Возврат 0;    
КонецФункции
28 zavsom
 
16.04.07
17:31
все очень просто - стандартная обработка свертки базы в конфигурации "АЗК+Нефтебаза"
29 es3000
 
16.04.07
17:38
спасибо еще раз