Имя: Пароль:
1C
1С v8
нужна помощь по заданию
0 FuZe
 
21.11.24
12:34
Мне сказали сделать так что бы договор нельзя было провести со статусом Готов если строки пустые. А вот со статусом Готовится строки пустые могут быть, поэтому вариант просто поставить выдачу ошибки не прокатит.
1 Волшебник
 
21.11.24
12:35
Старайтесь...
2 FuZe
 
21.11.24
12:36
(1) я уже 3 часа над этим сижу, сил нету. Может хотя бы немного подскажите?
3 Asmody
 
21.11.24
12:37
Если Тогда Иначе КонецЕсли; помогут тебе, юный падаван
4 Волшебник
 
21.11.24
12:38
(2) всего 3 часа? А сколько Вам лет?
5 Fedor-1971
 
21.11.24
12:38
(0) Что делал? как пытался решить?
Вопрос: Документ проведён в статусе Готовится, поставили статус Готов и есть пустые строки - что делать станем?
6 Asmody
 
21.11.24
12:39
Я бы так написал:

Если статусГотов() И строкиПустые() Тогда
    Отказ = Истина;
    // тут какое-нибудь сообщение об ошибке
    Возврат;
КонецЕсли;
7 FuZe
 
21.11.24
12:40
(4) Я в колледже ещё, задание такое дали, а как сделать не объясняли. В интернете не нашёл пока ещё
8 Волшебник
 
21.11.24
12:41
(7) Ну так у Вас впереди вся жизнь. Подумаешь, 3 часа... Старайтесь.
9 Asmody
 
21.11.24
12:41
коллеги, у нас тут неокуклившийся одинесник.
надо помочь человеку.
10 Волшебник
 
21.11.24
12:42
(7) А что за колледж, где так плохо учат?
11 FuZe
 
21.11.24
12:42
(5) Много как
например:
Процедура ПередЗаписью(Отказ, РежимЗаписи)
    // Проверка, что статус заказа "Готов"
    Если ЭтотОбъект.СтатусЗаказа = "Готов" Тогда
        // Проверка заполненности полей
        Если ЭтотОбъект.Номер = Неопределено Или ЭтотОбъект.Номер = "" Тогда
            Отказ = Истина;
            Сообщить("Поле 'Номер' должно быть заполнено.");
            Возврат;
        КонецЕсли;
        
        Если ЭтотОбъект.Дата = Неопределено Тогда
            Отказ = Истина;
            Сообщить("Поле 'Дата' должно быть заполнено.");
            Возврат;
        КонецЕсли;
        
        Если ЭтотОбъект.АдресНедвижимости = Неопределено Или ЭтотОбъект.АдресНедвижимости = "" Тогда
            Отказ = Истина;
            Сообщить("Поле 'Адрес недвижимости' должно быть заполнено.");
            Возврат;
        КонецЕсли;
        
        Если ЭтотОбъект.Клиент = Неопределено Тогда
            Отказ = Истина;
            Сообщить("Поле 'Клиент' должно быть заполнено.");
            Возврат;
        КонецЕсли;
        
        Если ЭтотОбъект.ФормаОплаты = Неопределено Тогда
            Отказ = Истина;
            Сообщить("Поле 'Форма оплаты' должно быть заполнено.");
            Возврат;
        КонецЕсли;
        
        Если ЭтотОбъект.СтатусОплаты = Неопределено Тогда
            Отказ = Истина;
            Сообщить("Поле 'Статус оплаты' должно быть заполнено.");
            Возврат;
        КонецЕсли;
    КонецЕсли;
КонецПроцедуры

вот ещё пример:
Процедура СтатусЗаказаПриИзменении()
    Если СтатусЗаказа = "Готов" Тогда
        Если Не ЗначениеЗаполнено(АдресНедвижимости) Или Не ЗначениеЗаполнено(Клиент) Тогда
            Сообщить("Нельзя установить статус 'Готов', если обязательные поля не заполнены.");
            СтатусЗаказа = ""; // Возвращаем начальное значение статуса
        КонецЕсли;
    КонецЕсли;
КонецПроцедуры
12 RomaH
 
21.11.24
12:43
для ТЧ - проверка заполнения истина
в обработкепроверки заполнения проверять - если статус не "готов"
убирать ТЧ из проверяемых реквизитов
13 FuZe
 
21.11.24
12:43
(10) Это у нас Учебная практика, типо сами должны справлятся
14 Волшебник
 
21.11.24
12:44
Если поле имеет тип, то его нельзя сравнивать с Неопределено
15 Волшебник
 
21.11.24
12:44
(13) Что за колледж?
16 FuZe
 
21.11.24
12:44
(12) У меня всё реквизитами сделано без табличной части
17 FuZe
 
21.11.24
12:45
(15) КГПК
18 Волшебник
 
21.11.24
12:45
(16) изучите понятие "тип данных"
19 Волшебник
 
21.11.24
12:46
Если СтатусЗаказа = "Готов" Тогда // это правда строка?
20 FuZe
 
21.11.24
12:48
(19) я делал как мог, 1с мы изучаем ну месяца 2 наверое только
21 Волшебник
 
21.11.24
12:48
(20) заведите перечисление СтатусыЗаказа
22 FuZe
 
21.11.24
12:49
(21) он у меня и так в перечислениях
23 Волшебник
 
21.11.24
12:50
(22) Тогда некорректно сравнивать со строкой. Надо так:

Если СтатусЗаказа = Перечисления.СтатусыЗаказа.Готов Тогда
24 Stepashkin
 
21.11.24
12:52
(22) Тогда так Если СтатусЗаказа = Перечисления.СтатусыЗаказов.Готов
25 FuZe
 
21.11.24
12:53
(23) (24) я сделал щас так
&НаКлиенте
Процедура ПередЗаписью(Отказ, РежимЗаписи)
    Если СтатусЗаказа = Перечисления.СтатусЗаказа.Готов Тогда
        Если Не ЗначениеЗаполнено(АдресНедвижимости) Или Не ЗначениеЗаполнено(Клиент) Тогда
            Сообщить("Нельзя записать документ со статусом 'Готов', если обязательные поля не заполнены.");
            Отказ = Истина;
        КонецЕсли;
    КонецЕсли;
КонецПроцедуры


но выдало такие ошибки
{Документ.Договоры.Форма.ФормаДокумента.Форма(4,10)}: Переменная не определена (СтатусЗаказа)
    Если <<?>>СтатусЗаказа = Перечисления.СтатусЗаказа.Готов Тогда
{Документ.Договоры.Форма.ФормаДокумента.Форма(4,25)}: Переменная не определена (Перечисления)
    Если СтатусЗаказа = <<?>>Перечисления.СтатусЗаказа.Готов Тогда
{Документ.Договоры.Форма.ФормаДокумента.Форма(5,35)}: Переменная не определена (АдресНедвижимости)
        Если Не ЗначениеЗаполнено(<<?>>АдресНедвижимости) Или Не ЗначениеЗаполнено(Клиент) Тогда
{Документ.Договоры.Форма.ФормаДокумента.Форма(5,79)}: Переменная не определена (Клиент)
        Если Не ЗначениеЗаполнено(АдресНедвижимости) Или Не ЗначениеЗаполнено(<<?>>Клиент) Тогда

но и Клиент и Адрес есть и написаны они точно так-же
26 Stepashkin
 
21.11.24
12:55
(25) СтатусЗаказа - Это реквизит? Если да, то ЭтотОбъект.СтатусЗаказа
27 Волшебник
 
21.11.24
12:56
(25) Перечисления - это надо на сервере.
28 Stepashkin
 
21.11.24
12:56
Если вы работаете в модуле формы, то обращаться стоит к полям основного реквизита ЭтотОбъект.Реквизит.
29 FuZe
 
21.11.24
12:56
у меня пара закончилась, дома ещё буду пробовать. Спасибо что попытались помочь
30 Волшебник
 
21.11.24
12:57
(29) Передайте преподу, что он плохой учитель.
31 Stepashkin
 
21.11.24
12:57
&НаКлиенте
Процедура ПередЗаписью(Отказ, РежимЗаписи) Не надо так делать. Процедура ПередЗаписью() выполняется в модуле объекта.
32 Stepashkin
 
21.11.24
12:58
(29) Почитайте умные книги.
33 Stepashkin
 
21.11.24
13:00
Подумать только, каких-то 2 года назад я был таким же начинающим. Как быстро летит время.
34 Волшебник
 
21.11.24
13:03
35 Stepashkin
 
21.11.24
13:04
(34) А может он не мечтает об 1С)
36 Fedor-1971
 
21.11.24
13:09
(11) Бе так лениться, положи процедуру ПередЗаписью в модуль объекта, и:
    Если ЭтотОбъект.СтатусЗаказа = "Готов" Тогда //Перечисление.СтатусыЗаказа.Готов, а не просто строка
        // Проверка заполненности полей
Если СокрЛП(ЭтотОбъект.Номер) = "" тогда //вместо:         Если ЭтотОбъект.Номер = Неопределено Или ЭтотОбъект.Номер = "" Тогда
            Отказ = Истина;
            Сообщить("Поле 'Номер' должно быть заполнено.");
            //Возврат; выловишь все ошибки, потом будешь возврат делать
        КонецЕсли;
        
        Если ЭтотОбъект.Дата = Дата(1,1,1)  тогда // а не вот это: Неопределено Тогда
            Отказ = Истина;
            Сообщить("Поле 'Дата' должно быть заполнено.");
            //Возврат; опять же
        КонецЕсли;

        
        Если ЭтотОбъект.АдресНедвижимости = Неопределено Или ЭтотОбъект.АдресНедвижимости = "" Тогда // тут тот же принцип - СокрЛП() = ""
            Отказ = Истина;
            Сообщить("Поле 'Адрес недвижимости' должно быть заполнено.");
            //Возврат; опять же
        КонецЕсли;
        
        Если ЭтотОбъект.Клиент.Пустая() тогда // т.е. проверяешь ссылку на пустое значение, а вот = Неопределено она будет если в поле составной тип данных, сам сообразишь как проверить
            Отказ = Истина;
            Сообщить("Поле 'Клиент' должно быть заполнено.");
            //Возврат; опять же
        КонецЕсли;
        
        Если ЭтотОбъект.ФормаОплаты = Неопределено Тогда //пояснил на контрагенте
            Отказ = Истина;
            Сообщить("Поле 'Форма оплаты' должно быть заполнено.");
            //Возврат; то же
        КонецЕсли;
        
        Если ЭтотОбъект.СтатусОплаты = Неопределено Тогда // пояснил на Контрагенте
            Отказ = Истина;
            Сообщить("Поле 'Статус оплаты' должно быть заполнено.");
            // Возврат; то же
        КонецЕсли;
    КонецЕсли;

Если Отказ тогда // выловили все ошибки и рассказали пользователю об оных, теперь можно прервать выполнение процедуры
  Возврат;
КонецЕсли;

.... тут продолжение алгоритма, если оно надо ...
КонецПроцедуры

Как-то так, но выше правильно советовали, сначала понимание что собрался делать и как работать с типами данных, потом действие
37 Fedor-1971
 
21.11.24
13:08
(35) таки, понимание что и как устроено пригодится в любом языке программирования
38 Stepashkin
 
21.11.24
13:10
(37) Я отвечал на песню. В ней поется про 1С.
39 Мультук
 
21.11.24
13:18
(36)

Есть чудная функция ЗначениеЗаполнено()
40 Волшебник
 
21.11.24
13:41
(35) А это вообще законно?
41 Адинэснег
 
21.11.24
14:04
не, ну кого-то нейронки может и должны заменить
42 Адинэснег
 
21.11.24
14:06
(0) беги оттуда, у них договор - это документ
43 Адинэснег
 
21.11.24
14:10
кстати, яндекс нейро за 1 сек справилась +/-
бред, но быстро. я б её на работу взял
44 lubitelxml
 
21.11.24
15:07
(43) лкСтроки. [0]Получить
Жесть )
45 Fedor-1971
 
21.11.24
15:13
(42) Зачем ему бежать? Это ученик колледжа, их чему-то учат.
Вот ТС и выясняет то, чего не понял или недослышал (может в карты играл или букварь курил)
46 Звездец
 
21.11.24
15:58
(7) крепись. Ты думаешь потом на работе тебе что-то по заданиям объяснять будут?
47 Волшебник
 
21.11.24
19:21
(46) 🔥 а-ха-ха!