Имя: Пароль:
1C
1С v8
УАТ - отображение документов на путевом листе
, , ,
0 ЛучшийПрограммер1С
 
30.03.16
12:42
Управление автотранспортом, редакция 1.0, Проф (1.0.10.1)

На лицевой стороне путевого листа отображается только номер документа предопределенного вида "Водительское удостоверение". Есть другие типы документов - Ввели новый тип документов "Удостоверение тракториста-машиниста", естественно он в отчете не отражается. А говорят надо. А когда у водителя 2 вида документов есть, то надо в зависимости от ТС документ брать. Как быть с такой проблемой?
1 Масянька
 
30.03.16
12:53
(0) Ник поменять. Рано еще :)
2 ЛучшийПрограммер1С
 
30.03.16
12:59
Я вот не пойму - на форме кнопок печати нет внизу, а при работе приложения есть. Откуда они берутся? И как мне найти вообще отчет печатной формы путевого листа?
3 ЛучшийПрограммер1С
 
30.03.16
13:00
(1) Всегда найдутся те, кто будет говорить, что у тебя ничего не получится. Никого не слушай, если действительно хочешь чего-то добиться. Они говорят, что ничего не выйдет, потому что не смогли это сделать сами. (Анна)
4 2083
 
30.03.16
13:15
1) выяснить, может типовая конфигурация умеет с этим работать, а вы просто не читали инструкцию;
2) если все-таки не умеет, то выяснить, зачем вам такое надо, а то вдруг не надо;
3) если все-таки надо, то формализовать проблему в виде блок-схемы хотя бы;
4) можно и пропустить п.3;
5) написать ТЗ на доработку системы, согласовать его со всеми заинтересованными лицами;
6) быть мужиком и все сделать по ТЗ;
7) протестировать;
8) если тест неудачный, то уволиться;
9) п.9 можно пропустить;
10) исправить ошибки, вернуться к п.7;
11) если ошибок нет, то запустить все в опытную эксплуатацию, вдруг взлетит;
12) если не взлетело, то вернуться к п. 8;
13) запустить в промышленную эксплуатацию.
5 Масянька
 
30.03.16
13:20
(3) И? К чему это?
(4) Много буков...
6 2083
 
30.03.16
13:21
(5) а Вам оно и не надо, думаю, и так все знаете
7 ЛучшийПрограммер1С
 
30.03.16
13:32
Хватит умничать, скажите по делу.
8 Одинесю
 
30.03.16
14:42
(2) // Создать кнопки печати
    ФормированиеПечатныхФорм.СоздатьКнопкиПечати(ЭтотОбъект, ЭтаФорма);
9 Одинесю
 
30.03.16
14:44
Это формирование кнопок. Посмотри модуль объекта, функцию Печать() - там разбирайся что и почему.
10 ЛучшийПрограммер1С
 
30.03.16
15:11
(9) Спасибо!

Нужный код в процедуре печати:

уатОбщегоНазначения.уатУдостоверениеВодителя(Водитель1, мВодительскоеУдСерия, мВодительскоеУдНомер, мВодительскоеУдКатегория);    
            Обл.Параметры.НомерУдостоверенияВодителя = ?(СокрЛП(мВодительскоеУдСерия)="","",СокрЛП(мВодительскоеУдСерия) + " ") + мВодительскоеУдНомер;

// Функция получает удостоверение водителя.
//
//Параметры:
//    ФизЛицо - водитель, входящий параметр
//    ДокументСерия - серия документа, исходящий параметр
//    ДокументНомер - номер документа, исходящий параметр
//    ДокументКатегория - категория документа, исходящий параметр
//
//Возвращаемое значение:
//    Булево. Истина, если документ найден.
//
Функция уатУдостоверениеВодителя(Сотрудник, ДокументСерия, ДокументНомер, ДокументКатегория) ЭКСПОРТ
    
    ДокументСерия = "";
    ДокументНомер = "";
    ДокументКатегория = "";
    
    Запрос = Новый Запрос;
    Запрос.Текст =
    
    "ВЫБРАТЬ ПЕРВЫЕ 1
    |    уатДокументыВодителей.Сотрудник,
    |    уатДокументыВодителей.ВидДокумента,
    |    уатДокументыВодителей.Серия,
    |    уатДокументыВодителей.Номер,
    |    уатДокументыВодителей.ДатаВыдачи КАК ДатаВыдачи,
    |    уатДокументыВодителей.ДатаОкончания,
    |    уатДокументыВодителей.КемВыдан,
    |    уатДокументыВодителей.Категория
    |ИЗ
    |    РегистрСведений.уатДокументыВодителей КАК уатДокументыВодителей
    |
    |ГДЕ
    |    уатДокументыВодителей.Сотрудник = &Сотрудник И
    |    уатДокументыВодителей.ВидДокумента = &ВидДокумента
    |
    |УПОРЯДОЧИТЬ ПО
    |    ДатаВыдачи УБЫВ";
    
    Запрос.УстановитьПараметр("Сотрудник", Сотрудник);
    Запрос.УстановитьПараметр("ВидДокумента", Справочники.уатВидыДДД.УдостоверениеВодителя);
    РезультатЗапроса = Запрос.Выполнить();
    Если РезультатЗапроса.Пустой() Тогда
        Результат = Ложь;
    Иначе    
        РезультатВыборки = РезультатЗапроса.Выбрать();
        РезультатВыборки.Следующий();
        ДокументСерия = РезультатВыборки.Серия;
        ДокументНомер = РезультатВыборки.Номер;
        ДокументКатегория = РезультатВыборки.Категория;
        Результат = Истина;
    КонецЕсли;    
    
    Возврат Результат;
КонецФункции // утПроверкаКорректностиПЛ

А дальше дело техники, функцию и запрос поменяю в зависимости от типа ТС.
11 ЛучшийПрограммер1С
 
30.03.16
15:14
Судя по всему, РегистрСведений.уатДокументыВодителей не содержит документов, которые недействительны или в архиве, раз условия такого нет?
12 ЛучшийПрограммер1С
 
30.03.16
15:16
А нельзя как-то существующий непредопределенный элемент справочника сделать предопределенным?
13 ЛучшийПрограммер1С
 
30.03.16
15:39
(1) Раньше был под другим ником, чморили вы тут меня конкретно, под этим вроде не так :)
14 ЛучшийПрограммер1С
 
31.03.16
09:11
Как-то так:

уатОбщегоНазначения.уатУдостоверениеВодителя2(ТранспортноеСредство.ТипТС, Водитель1, мВодительскоеУдСерия, мВодительскоеУдНомер, мВодительскоеУдКатегория);

Функция уатУдостоверениеВодителя2(ТипТС, Сотрудник, ДокументСерия, ДокументНомер, ДокументКатегория) ЭКСПОРТ
    
    ДокументСерия = "";
    ДокументНомер = "";
    ДокументКатегория = "";
    
    Запрос = Новый Запрос;
    Запрос.Текст =
    
    "ВЫБРАТЬ
    |    ВЫБОР
    |        КОГДА уатТипыТС.Ссылка В ИЕРАРХИИ (&ТипТСГруппаТрактора)
    |            ТОГДА &ВидДокументаТракториста
    |        ИНАЧЕ &ВидДокументаВодительское
    |    КОНЕЦ КАК ВидДокумента
    |ПОМЕСТИТЬ ТипТС
    |ИЗ
    |    Справочник.уатТипыТС КАК уатТипыТС
    |ГДЕ
    |    уатТипыТС.Ссылка = &ТипТС
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ ПЕРВЫЕ 1
    |    уатДокументыВодителей.Сотрудник,
    |    уатДокументыВодителей.ВидДокумента,
    |    уатДокументыВодителей.Серия,
    |    уатДокументыВодителей.Номер,
    |    уатДокументыВодителей.ДатаВыдачи КАК ДатаВыдачи,
    |    уатДокументыВодителей.ДатаОкончания,
    |    уатДокументыВодителей.КемВыдан,
    |    уатДокументыВодителей.Категория
    |ИЗ
    |    РегистрСведений.уатДокументыВодителей КАК уатДокументыВодителей,
    |    ТипТС КАК ТипТС
    |ГДЕ
    |    уатДокументыВодителей.Сотрудник = &Сотрудник
    |    И уатДокументыВодителей.ВидДокумента = ТипТС.ВидДокумента
    |
    |УПОРЯДОЧИТЬ ПО
    |    ДатаВыдачи УБЫВ";
    
    Запрос.УстановитьПараметр("Сотрудник", Сотрудник);
    Запрос.УстановитьПараметр("ВидДокументаВодительское", Справочники.уатВидыДДД.УдостоверениеВодителя);
    Запрос.УстановитьПараметр("ВидДокументаТракториста", Справочники.уатВидыДДД.НайтиПоНаименованию("Удостоверение тракториста-машиниста"));
    Запрос.УстановитьПараметр("ТипТС", ТипТС);
    Запрос.УстановитьПараметр("ТипТСГруппаТрактора", Справочники.уатТипыТС.НайтиПоНаименованию("Тракторная техника"));

    РезультатЗапроса = Запрос.Выполнить();
    Если РезультатЗапроса.Пустой() Тогда
        Результат = Ложь;
    Иначе    
        РезультатВыборки = РезультатЗапроса.Выбрать();
        РезультатВыборки.Следующий();
        ДокументСерия = РезультатВыборки.Серия;
        ДокументНомер = РезультатВыборки.Номер;
        ДокументКатегория = РезультатВыборки.Категория;
        Результат = Истина;
    КонецЕсли;    
    
    Возврат Результат;
КонецФункции // уатУдостоверениеВодителя2
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан