Имя: Пароль:
1C
1С v8
1с УТ Проверка даты СФ и Реализации
0 Pilot_Danik
 
13.10.21
15:58
Добрый день. Подскажите как сделать, чтобы при создании и проведении СФ была проверка на соответствие даты СФ и документа основания(реализации) и если они не совпадают было сообщение об этом. Предполагаю что в При записи надо добавить код, но вот какой?
1 OldCondom
 
13.10.21
15:59
На самом деле довольно простой
2 Pilot_Danik
 
13.10.21
16:09
Я даже предполагаю что там будет строк 5 всего, но я администратор а не прогер. Могу настроить формы, учет и многие другие вещи
3 OldCondom
 
13.10.21
16:12
(2) вот и настраивайте формы, а программирует пусть программист
4 Pilot_Danik
 
13.10.21
16:34
а какая должность у того кто на форумы пишет?
5 Смотрящий
 
13.10.21
16:37
От уборщицы до программиста бетонщика, директора еще бывают замечены в срачах
6 Pilot_Danik
 
13.10.21
16:44
А если у меня получится накидать эти 5 строк, тоя буду программистом выходит))
7 Смотрящий
 
13.10.21
16:45
нет. тебя еще должен укусить настоящий программист
8 Pilot_Danik
 
14.10.21
08:08
Интересно девчонки бывают настоящими программистами
9 ДенисЧ
 
14.10.21
08:14
(8) Ага. Как морские свинки...
10 Pilot_Danik
 
14.10.21
08:56
(3) Старичок, только сейчас спалил твой ник))))
11 Saari
 
14.10.21
09:11
(0) Я бы попробовал так:
Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
  Если НачалоДня(Дата) <> НачалоДня(ДокументОснование.Дата) Тогда
     Сообщить("Даты документов с/ф и документа-основания разные!");
     Отказ = Истина;
     Возврат;
  КонецЕсли;
КонецПроцедуры
12 Saari
 
14.10.21
09:24
(8) бывают.
13 Смотрящий
 
14.10.21
09:26
(8) Они не кусают )) Не станешь программиздом )))
14 ДенисЧ
 
14.10.21
09:29
(8) Бывают. Они называются эталонными и хранятся в Парижской палате мер и весов. Под стеклянным колпаком.
15 Saari
 
14.10.21
09:38
(0) Получилось?
16 Мультук
 
гуру
14.10.21
09:42
(11)

Не смущает факт наличия в документе "СчетФактураВыданный" целой табличной части с именем "ДокументыОснования" ?
17 Pilot_Danik
 
14.10.21
09:47
(15) нет. В таком виде не получилось
18 Pilot_Danik
 
14.10.21
09:48
(17) Преобразование значения к типу Дата не может быть выполнено
19 Pilot_Danik
 
14.10.21
09:52
(16) Не понятно как получить дату документа-основания Реализации товаров и услуг
20 Saari
 
14.10.21
09:54
(19) какая конфигурация?
В счет-фактуре есть реквизит "ДокументОснование"?
21 Pilot_Danik
 
14.10.21
09:57
(20) УТ 11 последняя версия. Есть два реквизита со словом Основание)):
ДокументОснование
СчетФактураОснование
22 Saari
 
14.10.21
09:57
(18) попробуй так (в процедуре ПередЗаписью() замени условие):
    Если ЗначениеЗаполнено(ДокументОснование) Тогда
        Если НачалоДня(Дата) <> НачалоДня(ДокументОснование.Дата) Тогда
            Сообщить("Даты документов с/ф и документа-основания разные!");
            Отказ = Истина;
            Возврат;
        КонецЕсли;
    КонецЕсли;
23 Pilot_Danik
 
14.10.21
09:59
(22) В модуле объекта или менеджера?
24 Мультук
 
гуру
14.10.21
10:01
(22) (23) Вас не смущает факт проверки на ЗначениеЗаполнено, когда ДокументОснование должен быть в данной ситуации просто по сути вещей?

(23)

Суй везде - 1С умная сам разберется

P.S.
Какой пиз...  скандалъ
25 Saari
 
14.10.21
10:01
(23) я пробовал в модуле формы документа. Но у меня нет УТ 11, я пробовал на УТ 10.3.
26 Saari
 
14.10.21
10:03
(24) не обязательно. Если просто создать с/ф не из документа-основания, то да, выдает ошибку Преобразование значения к типу Дата не может быть выполнено
27 Pilot_Danik
 
14.10.21
10:06
Поле объекта не обнаружено (Дата)
{Документ.СчетФактураВыданный.Форма.ФормаДокумента.Форма(160)}:        Если НачалоДня(Объект.Дата) <> НачалоДня(Объект.ДокументОснование.Дата) Тогда
{ОбщийМодуль.ОбщегоНазначенияУТКлиент.Модуль(1472)}:    Результат = Форма.Записать(ПараметрыЗаписи);
{ОбщийМодуль.ОбщегоНазначенияУТКлиент.Модуль(1425)}:    ЗаписатьОбъект(Форма, ПараметрыЗаписи);
{Документ.СчетФактураВыданный.Форма.ФормаДокумента.Форма(533)}:    ОбщегоНазначенияУТКлиент.Провести(ЭтаФорма);
28 Pilot_Danik
 
14.10.21
10:06
Не может найти дату документа основания
29 ДенисЧ
 
14.10.21
10:07
А проверить на заполненность ДокументаОснования - Кришна Брахмапутра запретил?
30 Saari
 
14.10.21
10:08
(28) я же написал скорректированный код:
Если ЗначениеЗаполнено(ДокументОснование) Тогда
        Если НачалоДня(Дата) <> НачалоДня(ДокументОснование.Дата) Тогда
            Сообщить("Даты документов с/ф и документа-основания разные!");
            Отказ = Истина;
            Возврат;
        КонецЕсли;
    КонецЕсли;
31 Pilot_Danik
 
14.10.21
10:13
В данном случае вот так ругается при проверке синтаксиса
{Документ.СчетФактураВыданный.Форма.ФормаДокумента.Форма(159,24)}: Переменная не определена (ДокументОснование)
Если ЗначениеЗаполнено(<<?>>ДокументОснование) Тогда (Проверка: Тонкий клиент)
{Документ.СчетФактураВыданный.Форма.ФормаДокумента.Форма(160,43)}: Переменная не определена (ДокументОснование)
        Если НачалоДня(Дата) <> НачалоДня(<<?>>ДокументОснование.Дата) Тогда (Проверка: Тонкий клиент)
{Документ.СчетФактураВыданный.Форма.ФормаДокумента.Форма(160,24)}: Переменная не определена (Дата)
        Если НачалоДня(<<?>>Дата) <> НачалоДня(ДокументОснование.Дата) Тогда (Проверка: Тонкий клиент)
32 ДенисЧ
 
14.10.21
10:14
(31) То есть в одном месте ты берёшь НачалоДня(Объект.ДокументОснование.Дата) , а в другом просто ДокументОснование.
А потом обижаешься...
33 Saari
 
14.10.21
10:16
(31)  А так будет ругаться?

Если ЗначениеЗаполнено(Объект.ДокументОснование) Тогда
        Если НачалоДня(Объект.Дата) <> НачалоДня(Объект.ДокументОснование.Дата) Тогда
            Сообщить("Даты документов с/ф и документа-основания разные!");
            Отказ = Истина;
            Возврат;
        КонецЕсли;
КонецЕсли;
34 Pilot_Danik
 
14.10.21
10:20
Синтаксических ошибок не обнаружено!
При проведении дока:
Поле объекта не обнаружено (Дата)
{Документ.СчетФактураВыданный.Форма.ФормаДокумента.Форма(160)}:        Если НачалоДня(Объект.Дата) <> НачалоДня(Объект.ДокументОснование.Дата) Тогда
{ОбщийМодуль.ОбщегоНазначенияУТКлиент.Модуль(1472)}:    Результат = Форма.Записать(ПараметрыЗаписи);
{ОбщийМодуль.ОбщегоНазначенияУТКлиент.Модуль(1425)}:    ЗаписатьОбъект(Форма, ПараметрыЗаписи);
{Документ.СчетФактураВыданный.Форма.ФормаДокумента.Форма(533)}:    ОбщегоНазначенияУТКлиент.Провести(ЭтаФорма);
35 Смотрящий
 
14.10.21
10:21
Объект.ДокументОснование - это не доумент
36 Смотрящий
 
14.10.21
10:22
Там скорее всего составной тип в Объект.ДокументОснование
37 Pilot_Danik
 
14.10.21
10:36
И как из это типа вытащить дату?
38 Saari
 
14.10.21
10:38
(36) в УТ 10.3 тоже составной тип. И ошибок нет.
39 Saari
 
14.10.21
10:50
(37) Сейчас проверю в конфигурации БУХ 3.
40 Saari
 
14.10.21
11:38
(37) Получилось!
Вот ответ:

&НаСервере
Процедура ПроверкаДат(Отказ)
    
    Если ЗначениеЗаполнено(Объект.ДокументОснование) Тогда
        ДокОсн = Объект.ДокументОснование;
        Если НачалоДня(Объект.Дата) <> НачалоДня(ДокОсн.Дата) Тогда
            Сообщить("Даты документов с/ф и документа-основания разные!");
            Отказ = Истина;
        КонецЕсли;
    КонецЕсли;
    
КонецПроцедуры

&НаКлиенте
Процедура ПередЗаписью(Отказ, ПараметрыЗаписи)
    ПроверкаДат(Отказ);
    Если Отказ Тогда
        Возврат;
    КонецЕсли;
КонецПроцедуры
41 Saari
 
14.10.21
11:39
(37) Проверяй.
42 Мультук
 
гуру
14.10.21
12:04
(40)

Без обид, но лучше я скажу сейчас:

1) в форме этого документа есть также событие

&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)

почему бы не сделать проверку там?

2) Надеюсь, ты понимаешь, что происходит с формой и её данными при &НаСервере и чем эта кляуза отличается от &НаСервереБезКонтекста ?

3) Обрати внимание, что если в толстом клиенте за

ДокОсн.Дата никто по рукам особо не бил, то в управляемых формах начали писать

ДокОснДата = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ДокОсн, "Дата");

P.S.
Да, это счет-фактура, данных на форме особо нет и я придираюсь.
Но потом, такие же вещи "по привычке" начнут писать в заказе-клиента на 100+ строк в табличной части и удивляться.
Точнее удивляться будет сначала сервер, затем пользователи, затем ...
43 Pilot_Danik
 
14.10.21
12:21
(40) Да, работает все отлично. Спасибо, куда поставить пиво?))) (42) Сейчас попробую по вашим поправкам сделать код. Но если не сложно обосновать второй пункт пояснить для новичков. Ну и первый кратко.
44 Pilot_Danik
 
14.10.21
14:42
(42)  По первому пункту получлиось, а по третьему нет
Ошибка? Это не ошибка, это системная функция.