Имя: Пароль:
1C
1С v8
помогите с обработкой
,
0 Kassidy_nd
 
31.03.14
22:45
Создал обработку
с реквизитами дата1, дата2.

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

во всех документах из результата запроса нужно установить субконто1,2,3
1 Kassidy_nd
 
31.03.14
22:51
я что то не так делаю?
2 shuhard
 
31.03.14
22:52
(0)  [Документ.ПлатежноеПоручениеИсходящее.РасшифровкаПлатежа КАК ПлатежноеПоручениеИсходящееРасшифровкаПлатежа
                  |        ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПлатежноеПоручениеИсходящее КАК ПлатежноеПоручениеИсходящее
                  |        ПО ПлатежноеПоручениеИсходящееРасшифровкаПлатежа.Ссылка = ПлатежноеПоручениеИсходящее.Ссылка]



бред
3 Kassidy_nd
 
31.03.14
22:54
(2) а так?
запрос = новый запрос;
    запрос.Текст= "ВЫБРАТЬ
                  |    ПлатежноеПоручениеИсходящее.Ссылка КАК ссылка,
                  |    ПлатежноеПоручениеИсходящее.СчетУчетаРасчетовСКонтрагентомБУ КАК СчетУчета,
                  |    ПлатежноеПоручениеИсходящее.СубконтоДтБУ1 КАК Субконто1,
                  |    ПлатежноеПоручениеИсходящее.СубконтоДтБУ2 КАК Субконто2,
                  |    ПлатежноеПоручениеИсходящее.СубконтоДтБУ3 КАК Субконто3
                  |ИЗ
                  |    Документ.ПлатежноеПоручениеИсходящее КАК ПлатежноеПоручениеИсходящее
                  |ГДЕ
                  |    ПлатежноеПоручениеИсходящее.Дата МЕЖДУ &Дата1 И &Дата2
                  |    И ПлатежноеПоручениеИсходящее.СчетУчетаРасчетовСКонтрагентомБУ = &СчетУчета";    
    запрос.УстановитьПараметр("Дата1",дата1);
    запрос.УстановитьПараметр("Дата2",дата2);
    запрос.УстановитьПараметр("Счетучета",ПланыСчетов.Типовой.ОбязательстваПоПенсионнымОтчислениям);
    РезультатЗапроса = Запрос.Выполнить();
    Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
    //надо программно установить субконто1,2,3    
    
КонецЦикла;
4 Kassidy_nd
 
31.03.14
22:55
как ссылку превратить в объект?
5 NcSteel
 
31.03.14
22:55
Уже лучше.
Но в результат запроса сами поля СчетУчета, Субконто 1,2,3 можно не вывводить, так как тебе надо в объекте менять, а там они уже есть.
6 NcSteel
 
31.03.14
22:55
(4) ПолучитьОбъект()
7 wertyu
 
31.03.14
22:56
(0) а почему не в модуле дока?
8 Kassidy_nd
 
31.03.14
22:59
(7) потому что я мало знаю =)
9 Kassidy_nd
 
31.03.14
23:04
я так понимаю не в модуле дока, а обработки? а как из модуля формы можно вызвать процедуру из модуля объекта?
10 NcSteel
 
31.03.14
23:05
(9) Забей, судя по задаче достаточно и из модуля формы обработки.
11 Kassidy_nd
 
31.03.14
23:06
(6) можно пример на моем запросе? а то я в СП читаю а там пример но  у меня так не идет Объект = ВыбДокумент.ПолучитьОбъект();
12 Kassidy_nd
 
31.03.14
23:07
(5) Учел, стало :

Процедура КнопкаВыполнитьНажатие(Кнопка)
    запрос = новый запрос;
    запрос.Текст= "ВЫБРАТЬ
                  |    ПлатежноеПоручениеИсходящее.Ссылка КАК ссылка
                  |ИЗ
                  |    Документ.ПлатежноеПоручениеИсходящее КАК ПлатежноеПоручениеИсходящее
                  |ГДЕ
                  |    ПлатежноеПоручениеИсходящее.Дата МЕЖДУ &Дата1 И &Дата2
                  |    И ПлатежноеПоручениеИсходящее.СчетУчетаРасчетовСКонтрагентомБУ = &СчетУчета";    
    запрос.УстановитьПараметр("Дата1",дата1);
    запрос.УстановитьПараметр("Дата2",дата2);
    запрос.УстановитьПараметр("Счетучета",ПланыСчетов.Типовой.ОбязательстваПоПенсионнымОтчислениям);
    РезультатЗапроса = Запрос.Выполнить();
    Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
    //объект = ВыбДокумент.ПолучитьОбъект();
КонецЦикла;
    
КонецПроцедуры
13 NcSteel
 
31.03.14
23:08
объект = Выборка.Ссылка.ПолучитьОбъект();
14 Kassidy_nd
 
31.03.14
23:23
(13) спасибо. счас. пробую.
15 Kassidy_nd
 
31.03.14
23:31
(13) как то так:


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

а как теперь записать документ?
16 Tarlich
 
31.03.14
23:34
а встроенная групповая обработка справочников\документов разве не умеет?
17 Tarlich
 
31.03.14
23:38
объект.СубконтоДтБУ1 = Справочники.НалогиСборыОтчисления.НайтиПоКоду("000097   ");
объект(МетодЗаписиДокумента.Записать);          

  иначе сообщить("опаньки?");
18 wertyu
 
31.03.14
23:39
Объект.записать()
19 Tarlich
 
31.03.14
23:40
Сори утчняю :

объект.СубконтоДтБУ2 = Перечисления.ВидыПлатежейВБюджетИФонды.Налог;
    объект.субконтоДтБУ3 = справочники.ФизическиеЛица.НайтиПоНаименованию("По всем работникам");
Объект.записать(МетодЗаписиДокумента.Записать);
20 Tarlich
 
31.03.14
23:41
Это все можно сделать  встроенной обработкой в любую тип конфу
21 Kassidy_nd
 
31.03.14
23:44
(20) пробовал, но  групповая обработка справочников\документов не умеет менять субконто, там только провести, пометить, еще что-то, но точно не было изменение субконто... =(
22 Tarlich
 
31.03.14
23:48
Умеет !!! в настройках есть - разрешить редактирование реквизитов, да в ПП эти данные находятся не в реквизитах шапки а в ТАБЛИЧНОЙ ЧАСТИ!!!
23 Kassidy_nd
 
31.03.14
23:50
ошибка
{Форма.Форма.Форма(22)}: Поле объекта не обнаружено (ВидНалога)
            иначеесли объект.РасшифровкаПлатежа.ВидНалога = Справочники.НалогиСборыОтчисления.НайтиПоКоду("000097   ") тогда
24 Kassidy_nd
 
31.03.14
23:50
(23) + а все понял тут я не поправил
25 Tarlich
 
31.03.14
23:56
я же написал РасшифровкаПлатежа - это табличная часть . т.е по мимо обхода докуменов надо примерно так :

Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
объект = Выборка.Ссылка.ПолучитьОбъект();
////
....
///
Для каждого стр из объект.РасшифровкаПлатежа Цикл

стр.ВидНалога=Справочники.НалогиСборыОтчисления.НайтиПоКоду("000097   ");

Конеццикла;

Объект.записать(МетодЗаписиДокумента.Записать);
КонецЦикла;
26 Kassidy_nd
 
01.04.14
00:03
(25) РасшифровкаПлатежа - это табличная часть, но в ней нет реквизита "видналога", он в самом документе, получилось вот так. Но мне надо чтобы он провел документы, чтобы проводки по счету изменились на правильные субконто, а он меняет только на документе, а проводки старые...

Процедура КнопкаВыполнитьНажатие(Кнопка)
    запрос = новый запрос;
    запрос.Текст= "ВЫБРАТЬ
                  |    ПлатежноеПоручениеИсходящее.Ссылка КАК ссылка
                  |ИЗ
                  |    Документ.ПлатежноеПоручениеИсходящее КАК ПлатежноеПоручениеИсходящее
                  |ГДЕ
                  |    ПлатежноеПоручениеИсходящее.Дата МЕЖДУ &Дата1 И &Дата2
                  |    И ПлатежноеПоручениеИсходящее.СчетУчетаРасчетовСКонтрагентомБУ = &СчетУчета
                  |    И ПлатежноеПоручениеИсходящее.ПометкаУдаления = &ПометкаУдаления";    
    запрос.УстановитьПараметр("ПометкаУдаления",ложь);
    запрос.УстановитьПараметр("Дата1",дата1);
    запрос.УстановитьПараметр("Дата2",дата2);
    запрос.УстановитьПараметр("Счетучета",ПланыСчетов.Типовой.ОбязательстваПоПенсионнымОтчислениям);
    РезультатЗапроса = Запрос.Выполнить();
    Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
    объект = Выборка.Ссылка.ПолучитьОбъект();
        Если объект.ВидНалога = Справочники.НалогиСборыОтчисления.НайтиПоКоду("000098   ") тогда
            объект.СубконтоДтБУ1 = Справочники.НалогиСборыОтчисления.НайтиПоКоду("000098   ");
            сообщить("внеконтракт");
            иначеесли объект.ВидНалога = Справочники.НалогиСборыОтчисления.НайтиПоКоду("000097   ") тогда
            объект.СубконтоДтБУ1 = Справочники.НалогиСборыОтчисления.НайтиПоКоду("000097   ");
            сообщить("контракт");    
            иначе сообщить("опаньки?");
        КонецЕсли;
    объект.СубконтоДтБУ2 = Перечисления.ВидыПлатежейВБюджетИФонды.Налог;
    объект.субконтоДтБУ3 = справочники.ФизическиеЛица.НайтиПоНаименованию("По всем работникам");
    Объект.записать();
КонецЦикла;
    
КонецПроцедуры
27 Kassidy_nd
 
01.04.14
00:05
NcSteel, Tarlich, и все все все большое Вам спасибо!
28 Tarlich
 
01.04.14
00:06
меняем Объект.записать(); на Объект.записать(РежимЗаписиДокумента.Проведение);
29 Kassidy_nd
 
01.04.14
00:17
(28) уже сделал. теперь вопрос если еще здесь сидите:  в зависимости от вида операции у реквизита меняется название. Как здесь прописать "ИЛИ" ПлатежноеПоручениеИсходящее.СчетУчетаРасчетовСКонтрагентомБУ = &СчетУчета
ИЛИ
ПлатежноеПоручениеИсходящее.СчетУчетаБУ= &СчетУчета. так можно?
30 Tarlich
 
01.04.14
00:46
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
объект = Выборка.Ссылка.ПолучитьОбъект();
Если объект.СчетУчетаБУ = ТвойСчет  тогда


Иначе

КонецЕсли;
Объект.записать(РежимЗаписиДокумента.Проведение);
так?