Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 ноя 2024, 22:40

Проверка Если

Автор aboba174, 19 мая 2023, 14:18

0 Пользователей и 1 гость просматривают эту тему.

aboba174

LexaK, С сотрудником, который уже записан в документ, все работает, он его открывает.
 
А вот если создаю нового, то выходит ошибка с датой.

Т.е мне надо добавить дату в справочнике?

Ошибка при вызове метода контекста (Записать)
{Справочник.Сотрудники.Форма.ФормаСписка.Форма(25)}:        НовыйДок.Записать(РежимЗаписиДокумента.Запись);
{Справочник.Сотрудники.Форма.ФормаСписка.Форма(11)}:    лкДок = ПроверитьСоздатьДокументНаСервере(текДанные.Ссылка);
по причине:
Значение поля "Дата" не может быть пустой датой

по причине:
Значение поля "Дата" не может быть пустой датой

LexaK

aboba174, для вашего примера можно взять текущую дату, вот примерный код, добавьте одну команду (см. коммент)
    ...
        НовыйДок.Заполнить(Сотрудник);
        НовыйДок.Дата = ТекущаяДата();  //добавить эту команду
        НовыйДок.Записать(РежимЗаписиДокумента.Запись);
    ...
если помогло нажмите: Спасибо!

aboba174


aboba174

LexaK, А вот я хочу еще сделать тоже самое только не из справочника будет формироваться Документ, а из документа в документ.

Т.е у меня есть документ запись, и чтобы по кнопке он создавал тоже заполненный документ.

Я вот думал скопирую все, поменяю названия и сработает, но при нажатии на кнопку ничего не работает.

Не подскажешь в чем беда?

Вот код:

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

&НаСервере
Функция ПроверитьСоздатьДокументНаСервере(Клиент)

    лкДок = Документы.Запись.НайтиПоРеквизиту("Клиент", Клиент);   
    Если Не ЗначениеЗаполнено(лкДок) Тогда
        //докуумен не найден, создаем новый
        НовыйДок = Документы.Запись.СоздатьДокумент();
        НовыйДок.Заполнить(Клиент);
        НовыйДок.Записать(РежимЗаписиДокумента.Запись);
        лкДок = НовыйДок.Ссылка;
    КонецЕсли;
    Возврат лкДок

КонецФункции

LexaK

aboba174, вообще тупое копирование кода в 1С не прокатывает!
вы пишите есть документ Запись и в коде создаете еще один документ запись
НовыйДок = Документы.Запись.СоздатьДокумент();
и т.д.

но при нажатии на кнопку ничего не работает.
- скорее всего, просто не назначили обработчик кнопки.

 
если помогло нажмите: Спасибо!

aboba174

LexaK, Ага понял, назначил кнопку и поменял название документа в коде, потому что не правильно указал  :D

Но блиииииин, у меня если документ уже есть, он новый создает(смотрю по времени), а не старый открывает, т.е плодятся документы...

Может у меня еще где-то ошибка?

&НаКлиенте
Процедура КомандаСоздатьДокумент(Команда)
   
    текДанные = Элементы.Список.ТекущиеДанные;
Если текДанные = Неопределено Тогда
лкДок = ПроверитьСоздатьДокументНаСервере(текДанные.Ссылка);
        //не выделена нужная Запись, ни чего не делаем

        Возврат;
    КонецЕсли;
    лкДок = ПроверитьСоздатьДокументНаСервере(текДанные.Ссылка);
    ПоказатьЗначение(,лкДок);
   
КонецПроцедуры

&НаСервере
Функция ПроверитьСоздатьДокументНаСервере(Клиент)

    лкДок = Документы.ОказаниеУслуги.НайтиПоРеквизиту("Клиент", Клиент);   
    Если Не ЗначениеЗаполнено(лкДок) Тогда
        //докуумен не найден, создаем новый
        НовыйДок = Документы.ОказаниеУслуги.СоздатьДокумент();
        НовыйДок.Заполнить(Клиент);
НовыйДок.Дата = ТекущаяДата();
        НовыйДок.Записать(РежимЗаписиДокумента.Запись);
        лкДок = НовыйДок.Ссылка;
    КонецЕсли;
    Возврат лкДок

КонецФункции

LexaK

aboba174, у вас не срабатывает поиск! это же логично!
так как он не срабатывает, не находит старый документ - создается новый !!!

да и поиск какой-то странный. почему ищите по клиенту? один клиент может 100500 раз приходить на запись и получать услуги!
обычно связь документов делают по реквизиту ДокументОснование
у вас документ запись является основанием для документа ОказаниеУслуги
добавьте в него реквизит ДокументОснование (Тип: документссылка.Запись)
при создании заполняйте ее

и в обработке делайте поиск по этому реквизиту
если помогло нажмите: Спасибо!

aboba174

LexaK, А я понял, спасибо большое, я сделал поиск по записи, у меня есть реквизит в запись в оказаниеуслуги.

aboba174

LexaK, А как сделать точно так же, только не на форме списка, а на ФормаДокумента

aboba174


Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск