Изменить время документа

Дайнеко

Well-known member
19.11.2009
951
0
#1
Тема времени в 7.7 - темная для меня. Придумал с клиентом задачку, теперь не знаю как решить:
- Пользователь записал в базу Расходную, не проводя.
- За этим доком сегодняшним же днем записалось еще несколько таких.
- Пользователь открывает первый и проводит (Ок жмет).

Я хочу программно перенести док в конец дня. Опущу пункт с выяснением нужного мне времени "конца дня" - это легко. Вот теперь нужно присвоить доку 17.30. Пишу:
УстановитьВремя(П_Час, П_Мин, П_Сек);
А мне "Недопустимая операция". Хрена, короче говоря.

Выходит, док сам себя передвинуть не может (разумеется, веду речь о непроведенных). Это может сторонняя сила в лице объекта "Документ". Но мне нужно сделать не Обработку, а реакцию на Ок.

Какие мысли?

Добавлено: P.S.
Внутри Процедура ВводНового УстановитьВремя() отрабатывает нормально.
 
U

User1C

#2
УстановитьВремя() работает тока для объектов с использованием функции СоздатьОбъект(). Как выход, можно вызвать некую обработку передав указателя на документ, где в обработчике написать Док=СоздатьОбъект("Документ"), затем найти указанный документ и менять его время методом УстановитьВремя().
 

Дайнеко

Well-known member
19.11.2009
951
0
#4
В том плане, что от этого будет зависеть?
Да, вот, понимаешь, на N-ом году эксплуатации обозначилась проблема. Ситуацию я уже написал. Поясню еще раз.
За день несколько документов списывают товар под ноль. И тут пользователь проводит документ началом дня. Док проверяет наличие товара на свой момент времени. Итог - отрицательный остаток. При перепроведении всех документов проблема вскроется, но уже поздновато.

можно вызвать некую обработку
Идея академически правильная. Только реализовать непросто.

Подумав, решил реализовать на уровне проверки. Документ обнаруживает, что его проводят в голове очереди и выдает предложение пользователю изменить время. Какое-то решение лучше никакого.
 

KiR

НЕ шибка опытный програмер)
11.09.2007
1 581
0
#5
Дайнеко, вот несколько похожая тема

Имхо, лучше каждый док проводить не на начало дня, а на текущее время или сдвигать точку актуальности. Возможно ли что-то такое в Вашей конфе реализовать?
 

Дайнеко

Well-known member
19.11.2009
951
0
#6
Спасибо за подсказку "ПроводитьПослеТА". Буду смотреть.

Имхо, лучше каждый док проводить не на начало дня, а на текущее время или сдвигать точку актуальности.
Ты может не понял, как рождается проблема. Это не программа записывает в начало дня, а пользователь.
 

KiR

НЕ шибка опытный програмер)
11.09.2007
1 581
0
#7
Спасибо за подсказку "ПроводитьПослеТА". Буду смотреть.

Ты может не понял, как рождается проблема. Это не программа записывает в начало дня, а пользователь.
НУ по рукам пользователю нужно надавать. Это во первых и обязательно! во вторых бы желательно, конечно, для определенного вида документов "подавить" вызов этого окошка для изменения времени или сделать так чтобы документ все равно проводился после ТА
 

KiR

НЕ шибка опытный програмер)
11.09.2007
1 581
0
#9
А я вот не знаю, как подавить :ya_lamo:
я честно говоря тоже :gigi: но просто наверное можно как-то перехватить это событие или же просто игнорировать его значения при проведении - как та проверка в ТиСе - хоть выставляй время хоть нет - один фиг после ТА проведет...
 

vitfil

IT-интегратор
02.04.2004
2 062
0
#10
Идеологически неверно считать остатки на время документа. Я уже писал об этом...
 

Дайнеко

Well-known member
19.11.2009
951
0
#11
По поводу "перехвата" времени. Да нечего тут перехватывать. АвтоВремяОтключить(). Я настраиваю в программе контроль за временем при создании НОВЫХ документов. Вставляет куда надо. Приходные начиная с 7.00 и остальные за ним цепочкой. Расходные: первый в текущее время, остальные опять за ним.

А теперь, мать вашу, я злюсь :ya_lamo: , что никто меня не понимает, как происходит засада. Пользователи все, канечна, казлы. Но в данные момент он пакость делает не со зла, а так, по глупости своей природной. Еще раз:
- 09.00 включил компьютер. Создал Расходную. Записал и не провел. Не, вот так: не провел.
документ записался с этим временем.
- 10.00 Создал еще 3 документа. Провел.
документы записались после первого. Они списали товар до 0 шт..
- 10.30 Сходил пописал и покурил.
- 12.00 Вернулся. Ему сказали, клиент первого документа отгрузился. Пользователь открыл этот первый и провел.
Напомню, его время 09.00. И он проверил наличие товара на это время. Товар был, документ провелся. .

Чтобы vitfil не вскаивал со стула и не кричал.
Идеологически неверно считать остатки на время документа. Я уже писал об этом...
Отвечу, что трудов классика не читал. Вину признаю.


Подвожу итог: товар пошел минусом. Пользователь пока все хорошо, работает и про время дока не думает. Блокировать ручную смену времени не хочу/могу, иногда опытному пользователю приходится менять время.
 

Дайнеко

Well-known member
19.11.2009
951
0
#12
А сейчас руки чешутся устроить опрос: Понимает ли меня человечество?
  1. Мы с тобой одной крови!
  2. Слова-то больно знакомые.
  3. Гони литру - пойму.
  4. С какой планеты, товарищ, будете?

Я в пятницу вечером всегда такой.
 

KiR

НЕ шибка опытный програмер)
11.09.2007
1 581
0
#14
Дайнеко ведь можно поставить запрет на отгрузку в минус - пусть потом ГЛУПЫЙ юзверь побегает с визгами типа - "программа не дает провести документ, говоря что на складе нет товара". Это раз. Два - как предлагал User1C через СозданиеОбъекта. И три - проводить после ТА.

Сори, если я опять чего-то не понял :ya_lamo:
 

vitfil

IT-интегратор
02.04.2004
2 062
0
#15
Дайнеко
Работайте ТОЛЬКО с актуальными остатками. Время не имеет значения...
 

Дайнеко

Well-known member
19.11.2009
951
0
#16
можно поставить запрет на отгрузку в минус.
Ясный пень, что проверка есть. Но она делается на время, уже присвоенное док-ту. Скажу прямо - у меня ощущение, что ты не прочитал мое описание, как создается проблема.
Однако поставлю плюс за подсказку "ПроводитьПослеТА" умысленную или нечаянную. Проведя эксперименты с этим методом выяснил такое Наблюдение №1:
- если документ вводится с датой = Дата ТА, то документ переносится после ТА. То что нужно! И никаких СоздатьОбъект.
- если документ "задний", то 1С не влияет на его время. Оно остается текущее или присвоенное программно.

Так как я теперь могу изложить целый трактат о времени, то продолжу.
Наблюдение №2: Пока док не записан, новый, метод ПолучитьВремя() выдает 0 часов и минут.
Наблюдение №3: УстановитьВремя() наоборот, можно применять, пока док не записан.
Я пишу только о применении в контексте док-та.

Мое решение вылилось в следующую схему:
- В форме использовал методы:
АвтоВремяТекущее();
ПроводитьПослеТА(1,-1);

- В процедуре ПриЗаписи() вызываю проверку
Если НЕ(Выбран() = 1) Тогда
УстВремя(Контекст, 17, 00);
КонецЕсли;

- Проц УстВремя присваивает время новому доку: (фрагмент)

Код:
	//	1. Задний
Если Конт.ДатаДок < ТекущаяДата() Тогда
Если (Есть документы в дне ДатаДок) Тогда
// Присвоить +1 мин к последнему
Иначе
// рекомендуемое 17.00
КонецЕсли;
//	2. Сегодняшний
Иначе
Если (Есть документы в дне ДатаДок) Тогда
//	в конец, если нужно
Макс(ТекущегоДока, ПоследнегоДока +1 мин);
Иначе
// остается текущее
Возврат;
КонецЕсли;
КонецЕсли;
 

vbs

Well-known member
18.02.2007
1 708
1
#17
Предохранение совсем недурно выглядит. Но подкину еще дровишек : а вдруг твои умельцы
и дату вперед задумают поменять ? Или на это уже их извращенной фантазии не хватит ?
 

KiR

НЕ шибка опытный програмер)
11.09.2007
1 581
0
#18
Предохранение совсем недурно выглядит. Но подкину еще дровишек : а вдруг твои умельцы
и дату вперед задумают поменять ? Или на это уже их извращенной фантазии не хватит ?
Это ведь тоже можно запретить - проводить доки будущим числом. а если будут просто записывать - фиг с ними

- если документ "задний", то 1С не влияет на его время. Оно остается текущее или присвоенное программно.
Да, такая проблема действительно имеет место быть. Можно было бы поставить проверку типа если проведен - тогда сначала распровести.
 

Дайнеко

Well-known member
19.11.2009
951
0
#19
а вдруг твои умельцы и дату вперед задумают поменять
О! Это один из излюбленных, самобытных приемов пользователей. В смысле, сами так придумывают. Это когда не верят в силу резервирования товара и проводят Расходную "на перед". Я им, ессесно, по мордам. Но отучаются с трудом.

Вот не знаю, ставить ли технический запрет? Мало ли что? Нормальным пользователям ограничения мешают.