Имя: Пароль:
1C
1С v8
Программное внесение изменений в документ
, ,
0 ya1snik
 
07.04.16
11:39
Запрос.Текст = "ВЫБРАТЬ
|ТоварыНаСкладах.Регистратор КАК Документ
|ПОМЕСТИТЬ Документы
|ИЗ
|РегистрНакопления.ТоварыНаСкладах КАК ТоварыНаСкладах
|ГДЕ
|ТоварыНаСкладах.Регистратор.Дата МЕЖДУ &ДатаН И &ДатаК
|СГРУППИРОВАТЬ ПО
|ТоварыНаСкладах.Регистратор
|;

|ВЫБРАТЬ
|""Реализация товаров и услуг"" КАК ВидДокумента,
|РеализацияТоваровУслуг.Ссылка КАК Накладная
|ИЗ
|Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
|ВНУТРЕННЕЕ СОЕДИНЕНИЕ ДОКУМЕНТЫ
|ПО Документы.Документ = РеализацияТоваровУслуг.Ссылка

Запрос.УстановитьПараметр("ДатаН", началоПериода);
Запрос.УстановитьПараметр("ДатаК", конецПериода);
        
Выборка = Запрос.Выполнить().Выбрать();
    Пока Выборка.Следующий() Цикл
        Если (Выборка.Накладная.Грузополучатель <> "") Тогда
            Док = Выборка.Накладная.ПолучитьОбъект();
            Док.Контрагент = Док.Грузополучатель;
        КонецЕсли;
КонецЦикла;

В общем, пытаюсь поменять контрагента на грузополучателя. Мозги кипят уже.
1 Радим1987
 
07.04.16
11:41
Док.Контрагент = Док.Грузополучатель; Контрагенты и Грузополучатели в одном справочники?
2 Prog111
 
07.04.16
11:43
Док.Записать(РежимЗаписиДокумента.Запись);
3 Prog111
 
07.04.16
11:43
Ну или РежимЗаписиДокумента.Проведение
4 ya1snik
 
07.04.16
11:45
(1) да
5 ya1snik
 
07.04.16
11:46
(2) Т.е. после Док.Контрагент = Док.Грузополучатель;
дописать ваш код?
6 Радим1987
 
07.04.16
11:46
Док.Контрагент = Выборка.Накладная.Грузополучатель;
7 SadrArt
 
07.04.16
11:49
В корне не верно
Выборка.Накладная.Грузополучатель <> ""

Что получение через точку. Что сравнение со строкой.
8 Радим1987
 
07.04.16
11:52
правильнее было написать
Если не ЗначениеЗаполнено(Выборка.Накладная.Грузополучатель) тогда


или

Выборка.Накладная.Грузополучатель.Наименование = ""
9 Радим1987
 
07.04.16
11:53
или Выборка.Накладная.Грузополучатель <> Справочник.Какойто.ПустаСсылка()
10 SadrArt
 
07.04.16
12:01
А вообще, какой смысл получать регистраторы из регистра и документы? Не достаточно ли самих документов?
11 salvator
 
07.04.16
12:03
ВЫБРАТЬ
ТоварыНаСкладах.Регистратор КАК Документ
ИЗ
РегистрНакопления.ТоварыНаСкладах КАК ТоварыНаСкладах
ГДЕ
ТоварыНаСкладах.Регистратор.Дата МЕЖДУ &ДатаН И &ДатаК
И ТоварыНаСкладах.Регистратор ССЫЛКА Документ.РеализацияТоваровУслуг

и нафиг не надо соединять потом
12 salvator
 
07.04.16
12:04
+(11) ВЫБРАТЬ РАЗЛИЧНЫЕ только еще
13 ya1snik
 
07.04.16
12:06
(11) Спасибо, не силен
(12) А эту строчку куда засунуть?
14 ya1snik
 
07.04.16
12:08
(8) А обнулить грузополучателя так правильно?
Док.Грузополучатель = "";
15 ya1snik
 
07.04.16
12:09
Добавил в выборку строку
|РеализацияТоваровУслуг.Ссылка.ДоговорКонтрагента КАК Договор

Пытаюсь изменить договор в накладной
Док.ДоговорКонтрагента = Док.Грузополучатель.ОсновнойДоговорКонтрагента;
Не выходит (
16 ya1snik
 
07.04.16
12:13
(15) Вернее так
Док.Договор = Док.Грузополучатель.ОсновнойДоговорКонтрагента;

Ничего не происходит
17 ya1snik
 
07.04.16
12:15
(16) Торможу )
Вроде просто код

Док.ДоговорКонтрагента = Док.Грузополучатель.ОсновнойДоговорКонтрагента;

должен изменять договор. Нет?
18 Molinor
 
07.04.16
12:17
(17) Этот код устанавливает реквизиту "ДоговорКонтрагента" основной договор контрагента из грузополучателя. А изменит он или нет, это зависит от исходных значений реквизитов.
19 Радим1987
 
07.04.16
12:17
А с док.Контрагентом получилось?
20 ya1snik
 
07.04.16
12:18
(19) Да, спасибо, работает.
21 Радим1987
 
07.04.16
12:19
Док.ДоговорКонтрагента = Выборка.Накладная.Грузополучатель.ОсновнойДоговорКонтрагента;
22 ya1snik
 
07.04.16
12:25
(21) Все ок, код

Док.ДоговорКонтрагента = Док.Грузополучатель.ОсновнойДоговорКонтрагента;

работает. Просто я Док.Грузополучатель = ""; оставил перед ним.
23 salvator
 
07.04.16
12:25
Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ
|ТоварыНаСкладах.Регистратор КАК Накладная
|ИЗ
|РегистрНакопления.ТоварыНаСкладах КАК ТоварыНаСкладах
|ГДЕ
|ТоварыНаСкладах.Регистратор.Дата МЕЖДУ &ДатаН И &ДатаК
|И ТоварыНаСкладах.Регистратор ССЫЛКА Документ.РеализацияТоваровУслуг
|УПОРЯДОЧИТЬ ПО ТоварыНаСкладах.Регистратор.Дата";

Запрос.УстановитьПараметр("ДатаН", началоПериода);
Запрос.УстановитьПараметр("ДатаК", конецПериода);
        
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
   Если ЗначениеЗаполнено(Выборка.Накладная.Грузополучатель) Тогда
      Док = Выборка.Накладная.ПолучитьОбъект();
      Док.Контрагент = Док.Грузополучатель;
      Док.ДоговорКонтрагента = Док.Грузополучатель.ОсновнойДоговорКонтрагента;
      Док.Записать(РежимЗаписиДокумента.Проведение);
   КонецЕсли;
КонецЦикла;
24 ya1snik
 
07.04.16
12:27
(23) А разве в выборку могут попасть дубли? Для чего ВЫБРАТЬ РАЗЛИЧНЫЕ?
25 salvator
 
07.04.16
12:28
(24) Ну для чего-то ты в своем запросе группировку добавлял же ;)
26 ya1snik
 
07.04.16
12:32
(25) ) Я его откуда-то выгреб. Сам не в теме, честно говоря. (23) Где то видел, что можно, чтобы в выборку попали только проведенные документы. Если не трудно...
27 salvator
 
07.04.16
12:33
(26) А ты думаешь, в регистр записи как попали? При проведении наверно, логично?
28 ya1snik
 
07.04.16
12:34
(26) Пардон ))
29 ya1snik
 
07.04.16
12:34
Всем спасибо!