|   |   | 
| 
 | Проверка документа, помогите! | ☑ | ||
|---|---|---|---|---|
| 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) Серв вчера рухнул, не успел сказать спасибо всем за помощь.     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |