Вход | Регистрация


1С:Предприятие ::

Метки:документы, документы

Не могу программно изменить данные в табличном поле документа

Я
   Max29
16.05.05 - 13:59
Подскажите, пожалуйста, туплю что-то.
Процедура Сформировать()

    Перем Отходы;
    Перем НовЦена;

    Спр = СоздатьОбъект("Справочник.Материалы");
    Отходы = Спр.НайтиПоНаименованию("Отх. реализации");
    
    НовЦена = 1.10;
   // Изменения полей док-та Поступление МПЗ Прочее

    Док = СоздатьОбъект("Документ.ПоступлениеМПЗПрочее");
    Док.ВыбратьДокументы(НачДата, КонДата);
    Пока Док.ПолучитьДокумент() = 1 Цикл
        Док.ВыбратьСтроки();
        Пока Док.ПолучитьСтроку() = 1 Цикл
            Если Док.ВидМПЗвТЧ = "Материалы" Тогда
                Если Док.МПЗ = Отходы Тогда
                    Док.Цена = НовЦена;
                КонецЕсли;
            КонецЕсли;
        КонецЦикла;
            Док.Записать();
            Док.Провести();
    КонецЦикла;
    Сообщить("Обработка завершена");
КонецПроцедуры
 
 
   miki
 
1 - 16.05.05 - 14:01
А нех со строками сравнивать.
Да убедиться, что нашел, после поиска тоже не мешало никогда...
   Grant
 
2 - 16.05.05 - 14:01
>Если Док.ВидМПЗвТЧ = "Материалы" Тогда

Реквизит ВидМПЗвТЧ - строка? Скорее нет...
   Diter
 
3 - 16.05.05 - 14:02
Док.ВидМПЗвТЧ = "Материалы" Эта строка говорит о том, что реквизит "ВидМПЗвТЧ" строковый. Это так?

Вообще - воспользуйся отладчиком...
   Flover
 
4 - 16.05.05 - 14:15
Попробуй  Док.ВыбратьСтроки(1);
   Flover
 
5 - 16.05.05 - 14:19
Убери Перем Отходы;
и вставь Если Док.МПЗ = "Отходы" Тогда
   miki
 
6 - 16.05.05 - 14:23
Жжош?
   NDV
 
7 - 16.05.05 - 14:27
(0)
Спр = СоздатьОбъект("Справочник.Материалы"); 
Спр.НайтиПоНаименованию("Отх. реализации"); 
Отходы = Спр.ТекущийЭлемент();

А до этого Отходы были или 1 или 0. Посмотри на этот метод внимательнее.
   Flover
 
8 - 16.05.05 - 14:32
(7)не думаю что нужно создавать - уже выбраны элементы в документе - только нужно указать их в выборке...
   miki
 
9 - 16.05.05 - 14:34
8. Не очевидно, что они выбраны в документе...
   NDV
 
10 - 16.05.05 - 14:37
(8) Подумал бы сначала, что в (5) написал...
 
  Рекламное место пустует
   Flover
 
11 - 16.05.05 - 15:52
//Вот так по крайней мере работает

 Перем НовЦена; 
 НовЦена = 1.10;
   Док = СоздатьОбъект("Документ.ПоступлениеМПЗПрочее");
   Док.ВыбратьДокументы(НачДата, КонДата);
   Пока Док.ПолучитьДокумент() = 1 Цикл
       Док.ВыбратьСтроки();
       Пока Док.ПолучитьСтроку() = 1 Цикл
           Если Док.ВидМПЗвТЧ = "Справочник.Материалы" Тогда
                      Док.Цена = НовЦена;
                               Док.Сумма= Док.Количество*НовЦена;
                               
                  //Док.Всего = 500;

                  //Док.Сумма=500;

          //КонецЕсли;

       КонецЦикла;
           Док.Записать();
           Док.Провести();
   КонецЦикла;
   Сообщить("Обработка завершена");
КонецПроцедуры
   Max29
12 - 16.05.05 - 16:23
Извините, что отключился - дело в том, что :

во-первых, в переменную Отходы скидываю наименование из спр Материалы;

во-вторых, в табличной части док-та проверяю, если есть строка, где Колонка
ВидМПЗвТЧ = Материалы,  и  Колонка МПЗ = Отходы (или по другому Отх. реализации)
   Max29
13 - 16.05.05 - 16:25
(2) Реквизит ВидМПЗвТЧ - это перечисление ВидыМПЗ
   Flover
 
14 - 16.05.05 - 16:26
У меня справочник :)
   Max29
15 - 16.05.05 - 16:30
(14) Я понял. В смысле у меня в док-те ПоступлениеМПЗПрочее это Перечисление
   Max29
16 - 16.05.05 - 16:39
(7) И так не получается :

Спр = СоздатьОбъект("Справочник.Материалы"); 
Спр.НайтиПоНаименованию("Отх. реализации"); 
Отходы = Спр.ТекущийЭлемент(); 

цена не меняется однако :(
   Flover
 
17 - 16.05.05 - 16:43
Тебе нужно указать Перечисление.ВидыМПЗ.Материалы;
или переменную сделать типа про=Перечисление.ВидыМПЗ;
а далее Если Док.ВидМПЗвТЧ = про.Материалы Тогда
Док.Удалить(1); :))))
   Grant
 
18 - 16.05.05 - 16:48
(17) а нахрена в 2 строки, переменную лишнюю, когда одной строкой можно?
   Flover
 
19 - 16.05.05 - 16:53
(18) я и написал, что можно либо в одну строку либо в 2-е с переменной
   Max29
20 - 17.05.05 - 08:35
(17) В том то и дело что не удалить строку Док.Удалить(1);

Смысл обработки следующий - есть док.ПоступлениеМПЗПрочее заполненный(т.е. созданный), в котором есть табл.часть. В табл.части куча наимен-й материалов, сырья и пр. Обработке нужно найти наимен."Отх. реализации" и в колонке Цена изменить цену! Затем сохранить и провести док.!
   GrayT
 
21 - 17.05.05 - 08:53
Ты отладчиком смотрел какие условия у тебя выполняются, а какие нет?
И еще при сравнении реквизита со строкой не забывай отрезать пробелы - СокрП
   sergei_ssau
 
22 - 17.05.05 - 09:20
Заведи еще одну переменную
ДрДок = СоздатьОбъект("Документ.блаблабла");
В цикле 
дрДок.НайтиДоекумент(Док.текущийДокумент());
делай изменения и записывай и проводи!
   Max29
23 - 17.05.05 - 11:47
Всё сделал. Спасибо всем за помощь!!! Просто надо было на форму обработки (отчета) поставить "ВыбрМПЗ".
Вот что получилось:

//*********************************************************************

 Процедура ПриОткрытии()
     НачДата = ТекущаяДата();
     КонДата = ТекущаяДата();
     Спр = СоздатьОбъект("Справочник.Материалы");
     Спр.НайтиПоНаименованию("Отх. реализации", 0, 1);
     ВыбрМПЗ = Спр.ТекущийЭлемент();
     НовЦена = 1.10;
 КонецПроцедуры// Предопределенная процедура

//*********************************************************************
Процедура Сформировать()

   // Изменения полей док-та Поступление МПЗ Прочее

    Док = СоздатьОбъект("Документ.ПоступлениеМПЗПрочее"); 
      Док.ВыбратьДокументы(НачДата, КонДата); 
      Пока Док.ПолучитьДокумент() = 1 Цикл 
          Док.ВыбратьСтроки(); 
          Пока Док.ПолучитьСтроку() = 1 Цикл 
              Если Док.ВидМПЗвТЧ = Перечисление.ВидыМПЗ.Материалы Тогда 
                  Если Док.МПЗ = ВыбрМПЗ Тогда
                    Док.Цена = НовЦена; 
                    Док.Сумма = Док.Количество*НовЦена;
                    Док.Всего = Док.Сумма;
                  КонецЕсли;
              КонецЕсли; 
          КонецЦикла; 
          Док.Записать(); 
          Док.Провести(); 
      КонецЦикла; 
    Сообщить("Обработка завершена");
КонецПроцедуры
//*********************************************************************



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