• Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

  • CTF с учебными материалами Codeby Games

    Обучение кибербезопасности в игровой форме. Более 200 заданий по Active Directory, OSINT, PWN, Веб, Стеганографии, Реверс-инжинирингу, Форензике и Криптографии. Школа CTF с бесплатными курсами по всем категориям.

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

  • Автор темы Дайнеко
  • Дата начала
Д

Дайнеко

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

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

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

Какие мысли?

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

User1C

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

Дайнеко

В том плане, что от этого будет зависеть?

Да, вот, понимаешь, на N-ом году эксплуатации обозначилась проблема. Ситуацию я уже написал. Поясню еще раз.
За день несколько документов списывают товар под ноль. И тут пользователь проводит документ началом дня. Док проверяет наличие товара на свой момент времени. Итог - отрицательный остаток. При перепроведении всех документов проблема вскроется, но уже поздновато.

можно вызвать некую обработку

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

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

KiR

Дайнеко, вот несколько похожая тема

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

Дайнеко

Спасибо за подсказку "ПроводитьПослеТА". Буду смотреть.

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

Ты может не понял, как рождается проблема. Это не программа записывает в начало дня, а пользователь.
 
K

KiR

Спасибо за подсказку "ПроводитьПослеТА". Буду смотреть.

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

KiR

А я вот не знаю, как подавить :ya_lamo:
я честно говоря тоже :gigi: но просто наверное можно как-то перехватить это событие или же просто игнорировать его значения при проведении - как та проверка в ТиСе - хоть выставляй время хоть нет - один фиг после ТА проведет...
 
V

vitfil

Идеологически неверно считать остатки на время документа. Я уже писал об этом...
 
Д

Дайнеко

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

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

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


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

Дайнеко

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

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

unknown181538

Нет, понятно в чем проблема. Хотя все эти ТА 7-ые - не мое.
 
K

KiR

Дайнеко ведь можно поставить запрет на отгрузку в минус - пусть потом ГЛУПЫЙ юзверь побегает с визгами типа - "программа не дает провести документ, говоря что на складе нет товара". Это раз. Два - как предлагал User1C через СозданиеОбъекта. И три - проводить после ТА.

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

vitfil

Дайнеко
Работайте ТОЛЬКО с актуальными остатками. Время не имеет значения...
 
Д

Дайнеко

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

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

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

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

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

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

vbs

Предохранение совсем недурно выглядит. Но подкину еще дровишек : а вдруг твои умельцы
и дату вперед задумают поменять ? Или на это уже их извращенной фантазии не хватит ?
 
K

KiR

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

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

Дайнеко

а вдруг твои умельцы и дату вперед задумают поменять

О! Это один из излюбленных, самобытных приемов пользователей. В смысле, сами так придумывают. Это когда не верят в силу резервирования товара и проводят Расходную "на перед". Я им, ессесно, по мордам. Но отучаются с трудом.

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

Обучение наступательной кибербезопасности в игровой форме. Начать игру!