|
Проверка документа, помогите! | ☑ | ||
---|---|---|---|---|
0
V1rus93
01.07.19
✎
21:26
|
Обычная форма документа. Самописная конфа. Задача такая - Есть документ "Табель смены" в нём две формы (документа и списка) . Хочу, чтобы перед записью документа программа проверяла существует ли этот документ сегодняшней датой. Помогите с модулем. Новичок в программировании 1с. На пальцах понимаю как сделать, а вот правильно написать не знаю как.
|
|||
1
Beduin
01.07.19
✎
21:30
|
существует ли этот документ
|
|||
2
V1rus93
01.07.19
✎
21:37
|
Да документ полностью рабочий. Я так понял тут нельзя кидать картинки, мог бы показать. Но процедура следующая. Я открываю документ, получаю форму списка (схожую с обычной "Реализацией товаров и услуг"), нажимаю добавить и выводится форма документа с моими данными. Нужно чтоб после заполнения данных при нажатии "Ок" программа проверяла существует ли уже строка(документ) сегодняшней датой.
|
|||
3
V1rus93
01.07.19
✎
22:23
|
Вот до чего додумал, но не уверен, что будет работать с нового дня.
Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения) ДатаДокумента = Ссылка.Дата; Если ДатаДокумента <> Дата Тогда Отказ = Истина; Предупреждение("Пользователь уже зарегестрирован сегодня"); ЭтаФорма.Закрыть(); КонецЕсли; КонецПроцедуры |
|||
4
palsergeich
01.07.19
✎
22:26
|
Это не будет работать.
Используй запрос |
|||
5
V1rus93
01.07.19
✎
22:30
|
(4) А можете помочь? Что-то вроде этого запроса?
Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения) ДатаДокумента = '00010101'; Если Не ЭтоНовый() Тогда Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Документ1.Дата |ИЗ | Документ.Документ1 КАК Документ1 |ГДЕ | Документ1.Ссылка = &Ссылка"; Запрос.УстановитьПараметр("Ссылка", Ссылка); Результат = Запрос.Выполнить(); Выборка = Результат.Выбрать(); Если Выборка.Следующий() Тогда ДатаДокумента = Выборка.Дата; КонецЕсли; КонецЕсли; Если ДатаДокумента <> Дата Тогда Сообщить("Дата изменена"); КонецЕсли; КонецПроцедуры |
|||
6
palsergeich
01.07.19
✎
22:32
|
(5) Это тоже работать не будет нормально
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Документ1.Дата |ИЗ | Документ.Документ1 КАК Документ1 |ГДЕ | НачалоПериода(Документ1.Дата, День)= &Дата"; Запрос.УстановитьПараметр("Дата", началоДня(ссыллка.Дата)); |
|||
7
V1rus93
01.07.19
✎
22:33
|
(6) Понял, сейчас попробую. Спасибо !
|
|||
8
palsergeich
01.07.19
✎
22:34
|
А если быть совсем перфекционистом то тогда уж
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Документ1.Дата |ИЗ | Документ.Документ1 КАК Документ1 |ГДЕ | Документ1.Дата МЕЖДУ &НачалоДня и &КонецДня"; Запрос.УстановитьПараметр("НачалоДня", началоДня(ссыллка.Дата)); Запрос.УстановитьПараметр("КонецДня", КонецДня(ссыллка.Дата)); |
|||
9
V1rus93
01.07.19
✎
22:41
|
(8) Как-то так вышло
Если Не ЭтоНовый() Тогда Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ТабельСмены.Дата |ИЗ | Документ.ТабельСмены КАК ТабельСмены |ГДЕ | ТабельСмены.Дата МЕЖДУ &НачалоДня И &КонецДня"; Запрос.УстановитьПараметр("Ссылка", Ссылка); Запрос.УстановитьПараметр("НачалоДня", НачалоДня(Ссылка.Дата)); Запрос.УстановитьПараметр("КонецДня", КонецДня(Ссылка.Дата)); Результат = Запрос.Выполнить(); Выборка = Результат.Выбрать(); Если Выборка.Следующий() Тогда ДатаДокумента = Выборка.Дата; КонецЕсли; КонецЕсли; Если ДатаДокумента <> Дата Тогда Отказ = Истина; Предупреждение("Пользователь уже зарегестрирован сегодня"); ЭтаФорма.Модифицированность=Ложь; ЭтаФорма.Закрыть(); КонецЕсли; |
|||
10
palsergeich
01.07.19
✎
22:46
|
Мне не ясна суть этого куска
Если Выборка.Следующий() Тогда ДатаДокумента = Выборка.Дата; КонецЕсли; КонецЕсли; Если ДатаДокумента <> Дата Тогда |
|||
11
Exxter
01.07.19
✎
22:47
|
(9) Ссылки нет в запросе) А по дате в выборку попадут все документы с этой датой
|
|||
12
palsergeich
01.07.19
✎
22:49
|
(11) ну логично, что все, суть проверки понять - этот документ единственный или нет, никто не обещал что я решу это под ключ, направление и смысл я подсказал - дальше сам
|
|||
13
V1rus93
01.07.19
✎
22:51
|
(12) Да как-то додумаю, спасибо большое !
|
|||
14
hhhh
01.07.19
✎
22:55
|
(9) если новый тоже надо проверять. Может второй есть документ.
|
|||
15
V1rus93
01.07.19
✎
22:58
|
(14) По факту я делаю это на случай отключения света например. А так это форма необходима для идентифицированния касира который запустит 1с утром и закроет его вечером закрывая смену.
|
|||
16
hhhh
01.07.19
✎
23:12
|
(15) тогда к чему проверка на новый? бред какой-то.
|
|||
17
V1rus93
01.07.19
✎
23:26
|
(16) Дабы избежать повторной регистрации кассира в этот же день. Он зайдет утром, зарегистрируется и на ИнтерфесеКассира будет отображаться чья сегодня смена, а брать программа будет из документа "ТабельСмены" по документу на сегодняшнюю дату.
|
|||
18
Exxter
01.07.19
✎
23:42
|
(17) Про регистры забыл.
Открыл смену записал, закрыл смену записал, а потом заполнил табель? |
|||
19
V1rus93
01.07.19
✎
23:45
|
(18) Табель нужен лишь для того, чтобы отслеживать какой кассир на каком объекте сегодня работает. Так как возможен вариант, что один кассир будет на протяжении недели работать на разных объектах и надо отслеживать эти движения для правильной зарплаты. Но это как я понимаю, я пока помогаю главному программисту.
|
|||
20
Exxter
01.07.19
✎
23:50
|
(18) Табель - это фактически отработанное время.
|
|||
21
V1rus93
01.07.19
✎
23:55
|
(20) Выходит так. Я создал документ "ТабельСмены" с реквизитами "Дата", "Сотрудник", "Оклад\Тариф", "Должность", "Объект". При запуске "ИнтерфейсаКассира" вызывается форма документа, кассир его заполняет и это заносится в документ. Проверка нужна для избежания повтора регистрации за один рабочий день и в целом чтоб по 10 раз не указывать кто сегодня работает. Так же на ИнтерфейсеКассира будет отображаться кто работает, а инфа будет тянутся от "ТабеляСмены"
|
|||
22
Exxter
02.07.19
✎
00:00
|
(21) Запрос с проверкой на дату и сотрудника
|
|||
23
V1rus93
02.07.19
✎
00:04
|
(22) Да я никак не могу додумать нормально. Как правильно написать, чтоб всё работало.
|
|||
24
hhhh
02.07.19
✎
00:14
|
(23) При запуске "ИнтерфейсаКассира" просто ищешь документ ТабельСмены, если он есть открываешь его. Если нет создаешь новый и тоже открываешь.
|
|||
25
Exxter
02.07.19
✎
00:14
|
(23) | Табель.Ссылка
|ИЗ | Документ.Табель КАК Табель |ГДЕ | Табель.Дата = &Дата | и Табель.Сотрудник = &Сотрудник" ЕСЛИ не результат.пустой() тогда "Аларм" Конецесли |
|||
26
V1rus93
02.07.19
✎
00:27
|
(25) Видимо я уже сплю, так как не могу догнать. Вот что вышло и не работает Аларм. Просто пропускает это всё.
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ТабельСмены.Дата, | ТабельСмены.Сотрудник |ИЗ | Документ.ТабельСмены КАК ТабельСмены |ГДЕ | ТабельСмены.Дата = &Дата | И ТабельСмены.Сотрудник = &Сотрудник"; Запрос.УстановитьПараметр("Дата", (Дата)); Запрос.УстановитьПараметр("Сотрудник", (Сотрудник)); Результат = Запрос.Выполнить(); Выборка = Результат.Выбрать(); Если Не Результат.Пустой() Тогда Отказ = Истина; Предупреждение("Пользователь уже зарегестрирован сегодня"); ЭтаФорма.Модифицированность = Ложь; ЭтаФорма.Закрыть(); |
|||
27
Exxter
02.07.19
✎
00:39
|
(25)
Запрос.УстановитьПараметр("Дата", объект.Дата); Запрос.УстановитьПараметр("Сотрудник",объект.Сотрудник); Результат = Запрос.Выполнить(); Если Не Результат.Пустой() Тогда Отказ = Истина; Предупреждение("Пользователь сегодня"); Конецесли; |
|||
28
V1rus93
02.07.19
✎
00:41
|
(27) {Документ.ТабельСмены.Форма.ФормаДокумента.Форма(38,42)}: Переменная не определена (объект)
Запрос.УстановитьПараметр("Сотрудник", <<?>>объект.Сотрудник); Проверка: Толстый клиент (обычное приложение)) Ругается ( |
|||
29
Exxter
02.07.19
✎
00:42
|
(25) -> (26)
|
|||
30
palsergeich
02.07.19
✎
00:42
|
Тяжко тебе будет....
|
|||
31
Exxter
02.07.19
✎
00:42
|
(28) Просто сотрудник
|
|||
32
V1rus93
02.07.19
✎
00:44
|
(30) Спасибо) Да как-то уже ночь и сегодня целый день подобные задачки решаю.
|
|||
33
Exxter
02.07.19
✎
00:45
|
Это еще не задачи)
|
|||
34
V1rus93
02.07.19
✎
00:47
|
(33) Да у меня бывает такое, что всякую фигню не могу решить. А что-то поинтересней выходит. Короче не пашет оно, просто без ошибок спокойно клепает сотрудников. Пробовал одного и того же.
|
|||
35
V1rus93
02.07.19
✎
00:51
|
(33) Пробил по отладчику и почему-то на месте Отказ = Истина останавливается. Все остальные ловит данные
|
|||
36
Exxter
02.07.19
✎
00:53
|
(35) В (6) подсказал обратно даты в началопериода(твоя дата, день) Внимательнее)
|
|||
37
hhhh
02.07.19
✎
00:53
|
(34) ну вот это
| ТабельСмены.Дата = &Дата хрень какая-то. В 1с дата с секундами, если ты еще не знал. Раньше ты вроде за день проверял, а теперь почему-то одну секунду проверяешь. Почему день выкинул? |
|||
38
palsergeich
02.07.19
✎
00:54
|
На дату условие из (8)
|
|||
39
Exxter
02.07.19
✎
01:20
|
|КонецПериода(ТабельСмены.Дата,день) <= КонецПериода(&Дата,день)
И больше соответственно |
|||
40
V1rus93
02.07.19
✎
08:16
|
(39) Серв вчера рухнул, не успел сказать спасибо всем за помощь.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |