Имя: Пароль:
1C
 
Как сравнить тек док и док БД?
0 pro3ri
 
07.09.15
09:15
Добрый день!
Есть проведенный док РеализацияТиУ, там меняют комментарий, нажимают ок. Товара нет на складе, он ругается и выдает отказ.

начал писать обход реквизитов дока и сравнивать с ссылкой, но так нельзя...

    Для каждого Реквизит Из ЭтотОбъект Цикл
    
        Если Реквизит = ЭтотОбъект.Ссылка[Реквизит] Тогда
        
            
        
        КонецЕсли;    
    
    КонецЦикла;

КонецПроцедуры // ОбработкаПроведения()

Нужно сделать так, чтобы если изменился комментарий только программа не выдавала отказ, как сделать?
1 sash-ml
 
07.09.15
09:22
Для каждого РеквизитМД Из ЭтотОбъект.Метаданные().Реквизиты Цикл
    
        Если ЭтотОбъект[РеквизитМД.Имя] = ЭтотОбъект.Ссылка[РеквизитМД.Имя] Тогда
        
           ...
        
        КонецЕсли;    
    
    КонецЦикла;
2 Лефмихалыч
 
07.09.15
09:24
(1) так тоже нельзя - это запрос в цикле, за это в приличном обществе неприлично ругают
(0) запросом получи значения всех реквизитов, а потом через иметаданные.Реквизиты их сравнивай
3 pro3ri
 
07.09.15
09:31
(1) спасибо и на этом...
4 Матиус
 
07.09.15
09:33
(0) >> Нужно сделать так, чтобы если изменился комментарий только программа не выдавала отказ, как сделать?

При открытии документа загоняй комментарий в доп. свойства объекта, при записи сравнивай. Не нужны никакие лишние чтения из БД.
5 Брегорьян
 
07.09.15
09:35
(4) а если не открывать?
6 Матиус
 
07.09.15
09:37
(4) и перебор реквизитов не нужен.
(5) Комментарий меняют без интерактивного открытия документа? Что там вообще происходит?
7 pro3ri
 
07.09.15
09:41
(4) >> При открытии документа загоняй комментарий в доп. свойства объекта, при записи сравнивай. Не нужны никакие лишние чтения из БД.

а что за доп свойства? Нужно сделать так, что если только комментарий изменили, то нет проверки на отказ.
8 Mort
 
07.09.15
09:46
Я думаю в Вашем случае достаточно будет вообще отрубить контроль остатков. Выхлоп будет такой-же, а г-кода - меньше.
9 Брегорьян
 
07.09.15
09:46
нарисовать обёртку, меняющую только комментарий?
10 Матиус
 
07.09.15
09:48
1. Тогда см. (2). Собирай запрос по метаданным, загоняй в параметры реквизиты и табличные части и ищи изменения.

2. Отключай все на форме кроме комментария и проверяй только его.
11 Матиус
 
07.09.15
09:51
(10) во втором случае даже проверять не надо, только писать док без движений
12 sash-ml
 
07.09.15
10:06
Отвязать на форме комментарий от данных, проверять объект на Модифицированность, если ок, то в режиме обменданными.загрузка обновлять комментарий и записывать
13 mikeA
 
07.09.15
10:26
(0)во-первых не ЭтотОбъект.Ссылка[Реквизит] а
ДокументОбъект= ЭтотОбъект.Ссылка.ПолучитьОбъект()
ДокументОбъект[Реквизит]
ПолучитьОбъект() ессно перед циклом
одно чтение из базы данных
по-хорошему конечно надо значимые реквизиты получать запросом

а само сравнение

ДокументОбъект.Комментарий= "";
ЭтотОбъект.Комментарий= "";
ЗначениеВСтрокуВнутр(ДокументОбъект) = ЗначениеВСтрокуВнутр(ЭтотОбъект)

и не забыть восстановить комментарий
14 НЕА123
 
07.09.15
10:29
может веточку до пятницы прикрыть?
15 pro3ri
 
07.09.15
14:02
(2) решено так:

Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
                   |    РеализацияТоваровУслуг.Ссылка,
                   |    РеализацияТоваровУслуг.ПометкаУдаления,
                   |    РеализацияТоваровУслуг.Номер,
                   |    РеализацияТоваровУслуг.Дата,
                   |    РеализацияТоваровУслуг.Проведен,
                   |    РеализацияТоваровУслуг.ВидОперации,
                   |    РеализацияТоваровУслуг.Организация,
                   |    РеализацияТоваровУслуг.БанковскийСчетОрганизации,
                   |    РеализацияТоваровУслуг.ОтражатьВУправленческомУчете,
                   |    РеализацияТоваровУслуг.ОтражатьВБухгалтерскомУчете,
                   |    РеализацияТоваровУслуг.ОтражатьВНалоговомУчете,
                   |    РеализацияТоваровУслуг.Подразделение,
                   |    РеализацияТоваровУслуг.Комментарий,
                   |    РеализацияТоваровУслуг.Сделка,
                   |    РеализацияТоваровУслуг.Склад,
                   |    РеализацияТоваровУслуг.ДоговорКонтрагента,
                   |    РеализацияТоваровУслуг.Контрагент,
                   |    РеализацияТоваровУслуг.КонтрагентТранзит,
                   |    РеализацияТоваровУслуг.ТипЦен,
                   |    РеализацияТоваровУслуг.ВалютаДокумента,
                   |    РеализацияТоваровУслуг.УчитыватьНДС,
                   |    РеализацияТоваровУслуг.СуммаВключаетНДС,
                   |    РеализацияТоваровУслуг.КурсВзаиморасчетов,
                   |    РеализацияТоваровУслуг.СуммаДокумента,
                   |    РеализацияТоваровУслуг.КратностьВзаиморасчетов,
                   |    РеализацияТоваровУслуг.Ответственный,
                   |    РеализацияТоваровУслуг.ВидПередачи,
                   |    РеализацияТоваровУслуг.АдресДоставки,
                   |    РеализацияТоваровУслуг.Грузополучатель,
                   |    РеализацияТоваровУслуг.Грузоотправитель,
                   |    РеализацияТоваровУслуг.Проект,
                   |    РеализацияТоваровУслуг.ДисконтнаяКарта,
                   |    РеализацияТоваровУслуг.Доверенность,
                   |    РеализацияТоваровУслуг.Автор,
                   |    РеализацияТоваровУслуг.ДокументОснование,
                   |    РеализацияТоваровУслуг.Продажа,
                   |    РеализацияТоваровУслуг.Товары.(
                   |        Ссылка,
                   |        НомерСтроки,
                   |        ЕдиницаИзмерения,
                   |        ЕдиницаИзмеренияМест,
                   |        Качество,
                   |        Количество,
                   |        КоличествоМест,
                   |        Коэффициент,
                   |        Номенклатура,
                   |        ПроцентСкидкиНаценки,
                   |        СерияНоменклатуры,
                   |        СпособСписанияОстаткаТоваров,
                   |        СтавкаНДС,
                   |        Сумма,
                   |        СуммаНДС,
                   |        ХарактеристикаНоменклатуры,
                   |        Цена,
                   |        Склад,
                   |        ПроцентАвтоматическихСкидок,
                   |        УсловиеАвтоматическойСкидки,
                   |        ЗначениеУсловияАвтоматическойСкидки,
                   |        СуммаНП
                   |    ),
                   |    РеализацияТоваровУслуг.ВозвратнаяТара.(
                   |        Ссылка,
                   |        НомерСтроки,
                   |        Номенклатура,
                   |        Количество,
                   |        Цена,
                   |        Сумма,
                   |        СпособСписанияОстаткаТоваров,
                   |        Склад,
                   |        СуммаНП
                   |    ),
                   |    РеализацияТоваровУслуг.Услуги.(
                   |        Ссылка,
                   |        НомерСтроки,
                   |        Содержание,
                   |        Количество,
                   |        Цена,
                   |        Сумма,
                   |        СтавкаНДС,
                   |        СуммаНДС,
                   |        Номенклатура,
                   |        ПроцентСкидкиНаценки,
                   |        СуммаНП,
                   |        БухСчет,
                   |        Субконто1,
                   |        Субконто2,
                   |        Субконто3
                   |    )
                   |ИЗ
                   |    Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
                   |ГДЕ
                   |    РеализацияТоваровУслуг.Ссылка = &Ссылка";
    Запрос.УстановитьПараметр("Ссылка",Ссылка);
    Выборка = Запрос.Выполнить().Выбрать();
    
    ВстретилсяОтказ = Ложь;
    Пока Выборка.Следующий() Цикл
        
        Для каждого РеквизитМД Из ЭтотОбъект.Метаданные().Реквизиты Цикл
            
            Если ЭтотОбъект.Метаданные().Реквизиты.Комментарий.Имя <> "Комментарий" И ЭтотОбъект[РеквизитМД.Имя] <> Выборка[РеквизитМД.Имя] Тогда
                
                ВстретилсяОтказ = Истина;
                Отказ = Истина;

            КонецЕсли;    
            
        КонецЦикла;
            
    КонецЦикла;
    Если Не ВстретилсяОтказ Тогда
    
        Отказ = Ложь;
    
    КонецЕсли;
    
    
    
    
КонецПроцедуры // ОбработкаПроведения()
16 Брегорьян
 
07.09.15
14:03
(15) на изменения в ТЧ нормально реагирует?
17 pro3ri
 
07.09.15
14:07
(16) нет, не замечает изменений тч
18 Jonny_Khomich
 
07.09.15
14:10
(17) сделай на форме списка возможность редактировать комментарий.
Допустим под табличным полем добавить поле ввода, и кнопку. Вводить коммент, нажимаешь "ОК", документ записывается без проведения.
Можно, допустим, через контектсное меню.
Правой кнопкой тыкнул на документ, выбрал пункт "изменить комментарий", в диалоговом окне пишешь комментарий, и записываешь документ без проведения.
19 Матиус
 
08.09.15
08:21
(17) Тут же уже выложили идеальную проверку

ДокументОбъект= ЭтотОбъект.Ссылка.ПолучитьОбъект()
ДокументОбъект.Комментарий = Комментарий;
Если ЗначениеВСтрокуВнутр(ДокументОбъект) <> ЗначениеВСтрокуВнутр(ЭтотОбъект) Тогда
//Были изменения не только комментария
КонецЕсли;
20 zdas
 
08.09.15
08:26
(0) может сделать отдельный РС комментарии к документам? и не перепрооводить доки?
21 pro3ri
 
09.09.15
14:02
В итоге сделали так:
форма, 2 поля ввода,код:

Процедура КнопкаВыполнитьНажатие(Кнопка)
    Объект = СсылкаНаОбъект.ПолучитьОбъект();
    Объект.Комментарий = Комментарий;
    Объект.Записать();
КонецПроцедуры

Процедура СсылкаНаОбъектПриИзменении(Элемент)
    Объект = СсылкаНаОбъект.ПолучитьОбъект();
    Комментарий = Объект.Комментарий;
КонецПроцедуры

обработка встроена в конфу.
всем спасибо!
22 pro3ri
 
09.09.15
14:04
затупил сначала, думал при программной записи будет вып-ся проц Обработка проведения...
23 Брегорьян
 
09.09.15
14:04
(22) будет
24 pro3ri
 
09.09.15
14:12
25 Брегорьян
 
09.09.15
14:15
(24) не остановилось
26 Брегорьян
 
09.09.15
14:20
записать нажал: http://i.imgur.com/1HLQO5K.png
27 pro3ri
 
09.09.15
14:41
создай новый док и вставь в мод формы
&НаСервере
Процедура Команда1НаСервере()

    Объект1 = Реквизит1.ПолучитьОбъект();
    Объект1.Записать();
    
КонецПроцедуры

&НаКлиенте
Процедура Команда1(Команда)
    Команда1НаСервере();
КонецПроцедуры

в мод объекта https://s.mail.ru/5Rt88LuaAGxU/img-2015-09-09-16-46-21.png
сама форма https://s.mail.ru/2L8ZsJUEyLv1/img-2015-09-09-16-47-01.png
28 Брегорьян
 
09.09.15
14:45
(27) мне лениво
29 Брегорьян
 
09.09.15
14:46
(27) это ты на УТ10.2 тренируешься?
30 pro3ri
 
09.09.15
14:50
самописка 83