Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Проверка документа, помогите!

Проверка документа, помогите!
Я
   V1rus93
 
01.07.19 - 21:26
Обычная форма документа. Самописная конфа. Задача такая - Есть документ "Табель смены" в нём две формы (документа и списка) . Хочу, чтобы перед записью документа программа проверяла существует ли этот документ сегодняшней датой. Помогите с модулем. Новичок в программировании 1с. На пальцах понимаю как сделать, а вот правильно написать не знаю как.
 
 
   Beduin
 
1 - 01.07.19 - 21:30
существует ли этот документ
   V1rus93
 
2 - 01.07.19 - 21:37
Да документ полностью рабочий. Я так понял тут нельзя кидать картинки, мог бы показать. Но процедура следующая. Я открываю документ, получаю форму списка (схожую с обычной "Реализацией товаров и услуг"), нажимаю добавить и выводится форма документа с моими данными. Нужно чтоб после заполнения данных при нажатии "Ок" программа проверяла существует ли уже строка(документ) сегодняшней датой.
   V1rus93
 
3 - 01.07.19 - 22:23
Вот до чего додумал, но не уверен, что будет работать с нового дня.

Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
    
ДатаДокумента = Ссылка.Дата; 
Если ДатаДокумента <> Дата Тогда 
    Отказ = Истина;
    Предупреждение("Пользователь уже зарегестрирован сегодня");
    ЭтаФорма.Закрыть();
КонецЕсли; 

КонецПроцедуры
   palsergeich
 
4 - 01.07.19 - 22:26
Это не будет работать.
Используй запрос
   V1rus93
 
5 - 01.07.19 - 22:30
(4) А можете помочь? Что-то вроде этого запроса?
Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения) 

    ДатаДокумента = '00010101'; 

    Если Не ЭтоНовый() Тогда 
        Запрос = Новый Запрос; 
        Запрос.Текст = "ВЫБРАТЬ 
        | Документ1.Дата 
        |ИЗ 
        | Документ.Документ1 КАК Документ1 
        |ГДЕ 
        | Документ1.Ссылка = &Ссылка"; 

        Запрос.УстановитьПараметр("Ссылка", Ссылка); 

        Результат = Запрос.Выполнить(); 
        Выборка = Результат.Выбрать(); 
        
        Если Выборка.Следующий() Тогда 
            ДатаДокумента = Выборка.Дата; 
        КонецЕсли; 
    КонецЕсли; 

    Если ДатаДокумента <> Дата Тогда 
        Сообщить("Дата изменена"); 
    КонецЕсли; 

КонецПроцедуры
   palsergeich
 
6 - 01.07.19 - 22:32
(5) Это тоже работать не будет нормально
 Запрос = Новый Запрос; 
        Запрос.Текст = "ВЫБРАТЬ 
        | Документ1.Дата 
        |ИЗ 
        | Документ.Документ1 КАК Документ1 
        |ГДЕ 
        | НачалоПериода(Документ1.Дата, День)= &Дата";
Запрос.УстановитьПараметр("Дата", началоДня(ссыллка.Дата));
   V1rus93
 
7 - 01.07.19 - 22:33
(6) Понял, сейчас попробую. Спасибо !
   palsergeich
 
8 - 01.07.19 - 22:34
А если быть совсем перфекционистом то тогда уж
Запрос = Новый Запрос; 
        Запрос.Текст = "ВЫБРАТЬ 
        | Документ1.Дата 
        |ИЗ 
        | Документ.Документ1 КАК Документ1 
        |ГДЕ 
        | Документ1.Дата МЕЖДУ &НачалоДня и &КонецДня";
Запрос.УстановитьПараметр("НачалоДня", началоДня(ссыллка.Дата));
Запрос.УстановитьПараметр("КонецДня", КонецДня(ссыллка.Дата));
   V1rus93
 
9 - 01.07.19 - 22:41
(8) Как-то так вышло
Если Не ЭтоНовый() Тогда 
        Запрос = Новый Запрос;
        Запрос.Текст =     
        "ВЫБРАТЬ
         |    ТабельСмены.Дата
         |ИЗ
         |    Документ.ТабельСмены КАК ТабельСмены
         |ГДЕ
         |    ТабельСмены.Дата МЕЖДУ &НачалоДня И &КонецДня";
        Запрос.УстановитьПараметр("Ссылка", Ссылка); 
        Запрос.УстановитьПараметр("НачалоДня", НачалоДня(Ссылка.Дата));
        Запрос.УстановитьПараметр("КонецДня", КонецДня(Ссылка.Дата));
        Результат = Запрос.Выполнить(); 
        Выборка = Результат.Выбрать(); 
        
        Если Выборка.Следующий() Тогда 
            ДатаДокумента = Выборка.Дата; 
        КонецЕсли; 
    КонецЕсли; 
    
    Если ДатаДокумента <> Дата Тогда 
        Отказ = Истина;
        Предупреждение("Пользователь уже зарегестрирован сегодня");
        ЭтаФорма.Модифицированность=Ложь;
        ЭтаФорма.Закрыть();
        
    КонецЕсли;
   palsergeich
 
10 - 01.07.19 - 22:46
Мне не ясна суть  этого куска

Если Выборка.Следующий() Тогда 
            ДатаДокумента = Выборка.Дата; 
        КонецЕсли; 
    КонецЕсли; 
    
    Если ДатаДокумента <> Дата Тогда
 
 Рекламное место пустует
   Exxter
 
11 - 01.07.19 - 22:47
(9) Ссылки нет в запросе) А по дате в выборку попадут все документы с этой датой
   palsergeich
 
12 - 01.07.19 - 22:49
(11) ну логично, что все, суть проверки понять - этот документ единственный или нет, никто не обещал что я решу это под ключ, направление и смысл я подсказал - дальше сам
   V1rus93
 
13 - 01.07.19 - 22:51
(12) Да как-то додумаю, спасибо большое !
   hhhh
 
14 - 01.07.19 - 22:55
(9) если новый тоже надо проверять. Может второй есть документ.
   V1rus93
 
15 - 01.07.19 - 22:58
(14) По факту я делаю это на случай отключения света например. А так это форма необходима для идентифицированния касира который запустит 1с утром и закроет его вечером закрывая смену.
   hhhh
 
16 - 01.07.19 - 23:12
(15) тогда к чему проверка на новый? бред какой-то.
   V1rus93
 
17 - 01.07.19 - 23:26
(16) Дабы избежать повторной регистрации кассира в этот же день. Он зайдет утром, зарегистрируется и на ИнтерфесеКассира будет отображаться чья сегодня смена, а брать программа будет из документа "ТабельСмены" по документу на сегодняшнюю дату.
   Exxter
 
18 - 01.07.19 - 23:42
(17) Про регистры забыл.
Открыл смену записал, закрыл смену записал, а потом заполнил табель?
   V1rus93
 
19 - 01.07.19 - 23:45
(18) Табель нужен лишь для того, чтобы отслеживать какой кассир на каком объекте сегодня работает. Так как возможен вариант, что один кассир будет на протяжении недели работать на разных объектах и надо отслеживать эти движения для правильной зарплаты. Но это как я понимаю, я пока помогаю главному программисту.
   Exxter
 
20 - 01.07.19 - 23:50
(18) Табель - это фактически отработанное время.
   V1rus93
 
21 - 01.07.19 - 23:55
(20) Выходит так. Я создал документ "ТабельСмены" с реквизитами "Дата", "Сотрудник", "Оклад\Тариф", "Должность", "Объект". При запуске "ИнтерфейсаКассира" вызывается форма документа, кассир его заполняет и это заносится в документ. Проверка нужна для избежания повтора регистрации за один рабочий день и в целом чтоб по 10 раз не указывать кто сегодня работает. Так же на ИнтерфейсеКассира будет отображаться кто работает, а инфа будет тянутся от "ТабеляСмены"
   Exxter
 
22 - 02.07.19 - 00:00
(21) Запрос с проверкой на дату и сотрудника
   V1rus93
 
23 - 02.07.19 - 00:04
(22) Да я никак не могу додумать нормально. Как правильно написать, чтоб всё работало.
   hhhh
 
24 - 02.07.19 - 00:14
(23) При запуске "ИнтерфейсаКассира" просто ищешь документ ТабельСмены, если он есть открываешь его. Если нет создаешь новый и тоже открываешь.
   Exxter
 
25 - 02.07.19 - 00:14
(23) | Табель.Ссылка
     |ИЗ       
     | Документ.Табель КАК Табель 
     |ГДЕ        
     | Табель.Дата = &Дата
     | и Табель.Сотрудник = &Сотрудник"

 ЕСЛИ не результат.пустой() тогда 
  "Аларм"
Конецесли
   V1rus93
 
26 - 02.07.19 - 00:27
(25) Видимо я уже сплю, так как не могу догнать. Вот что вышло и не работает Аларм. Просто пропускает это всё.

Запрос = Новый Запрос;
        Запрос.Текст =     
        "ВЫБРАТЬ
        |    ТабельСмены.Дата,
        |    ТабельСмены.Сотрудник
        |ИЗ
        |    Документ.ТабельСмены КАК ТабельСмены
        |ГДЕ
        |    ТабельСмены.Дата = &Дата
        |    И ТабельСмены.Сотрудник = &Сотрудник";
        Запрос.УстановитьПараметр("Дата", (Дата));
        Запрос.УстановитьПараметр("Сотрудник", (Сотрудник));
        Результат = Запрос.Выполнить(); 
        Выборка = Результат.Выбрать(); 
        
    Если Не Результат.Пустой() Тогда 
        Отказ = Истина;
        Предупреждение("Пользователь уже зарегестрирован сегодня");
        ЭтаФорма.Модифицированность = Ложь;
        ЭтаФорма.Закрыть();
   Exxter
 
27 - 02.07.19 - 00:39
(25
     Запрос.УстановитьПараметр("Дата", объект.Дата);         Запрос.УстановитьПараметр("Сотрудник",объект.Сотрудник);         Результат = Запрос.Выполнить();        
        Если Не Результат.Пустой() Тогда   
             Отказ = Истина;       
          Предупреждение("Пользователь сегодня");                
        Конецесли;
   V1rus93
 
28 - 02.07.19 - 00:41
(27) {Документ.ТабельСмены.Форма.ФормаДокумента.Форма(38,42)}: Переменная не определена (объект)
        Запрос.УстановитьПараметр("Сотрудник", <<?>>объект.Сотрудник); Проверка: Толстый клиент (обычное приложение))
Ругается (
   Exxter
 
29 - 02.07.19 - 00:42
(25) -> (26)
   palsergeich
 
30 - 02.07.19 - 00:42
Тяжко тебе будет....
   Exxter
 
31 - 02.07.19 - 00:42
(28) Просто сотрудник
   V1rus93
 
32 - 02.07.19 - 00:44
(30) Спасибо) Да как-то уже ночь и сегодня целый день подобные задачки решаю.
   Exxter
 
33 - 02.07.19 - 00:45
Это еще не задачи)
 
 
   V1rus93
 
34 - 02.07.19 - 00:47
(33) Да у меня бывает такое, что всякую фигню не могу решить. А что-то поинтересней выходит. Короче не пашет оно, просто без ошибок спокойно клепает сотрудников. Пробовал одного и того же.
   V1rus93
 
35 - 02.07.19 - 00:51
(33) Пробил по отладчику и почему-то на месте Отказ = Истина останавливается. Все остальные ловит данные
   Exxter
 
36 - 02.07.19 - 00:53
(35) В (6) подсказал  обратно даты в началопериода(твоя дата, день) Внимательнее)
   hhhh
 
37 - 02.07.19 - 00:53
(34) ну вот это
       |    ТабельСмены.Дата = &Дата

хрень какая-то. В 1с дата с секундами, если ты еще не знал. Раньше ты вроде за день проверял, а теперь почему-то одну секунду проверяешь. Почему день выкинул?
   palsergeich
 
38 - 02.07.19 - 00:54
На дату условие из (8)
   Exxter
 
39 - 02.07.19 - 01:20
|КонецПериода(ТабельСмены.Дата,день) <= КонецПериода(&Дата,день)
И больше соответственно
   V1rus93
 
40 - 02.07.19 - 08:16
(39) Серв вчера рухнул, не успел сказать спасибо всем за помощь.


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует