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

1с УТ Проверка даты СФ и Реализации

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

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

(23)

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

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

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

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

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

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

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

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

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

ДокОсн.Дата никто по рукам особо не бил, то в управляемых формах начали писать
ДокОснДата = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ДокОсн, "Дата");

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


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