Имя: Пароль:
1C
 
Как в обработке выполнить движение регистров?
0 gar_den
 
05.07.06
12:36
Есть обработка, которая должна списать товары по регистру ТоварныйЗапас. Но при выполнении обработки возникает ошибка: "Движения регистров не могут выполняться у данного объекта."
Как это исправить???
1 zhas79
 
05.07.06
12:36
Никак. Движения регистров могут делать только документы.
2 zhas79
 
05.07.06
12:37
Но обработка может создавать специальный документ и проводить его, а уж этот документ спишет товары
3 gar_den
 
05.07.06
14:17
А как создать этот документ? Я пишу:

док = СоздатьОбъект("Документ");
док.Новый();

Выскакивает ошибка: Не определен вид документа.
4 Mort
 
05.07.06
14:25
Жжёте, тов. автор.
док = СоздатьОбъект("Документ.КакойДокументНадоСоздать");
5 evGenius
 
05.07.06
14:27
(0) RTFM
6 Ork
 
05.07.06
14:28
(3) Оченно неплохо было-бы после слова документ через точку указать его вид.
Либо попользовать процедуру НазначитьВид().

Но на мой взгляд это не поможет.
7 gar_den
 
05.07.06
14:34
(4) Создал. Потом делаю операции с регистром, а он пишет: "Движения регистров не могут выполняться у данного объекта."
8 evGenius
 
05.07.06
14:35
(7) Код в студию. Хоть посмеемся может.
9 gar_den
 
05.07.06
14:38
спр = СоздатьОбъект("Справочник.Поставщики");
   док = СоздатьОбъект("Документ.Новый1");    
   
   Запрос = СоздатьОбъект("Запрос");
   
   перс = Дата("01.01.01");
   перпо = Дата("01.01.07");
   
   ТекстЗапроса = "
   |Период С перс По перпо;
   |Отдел = Регистр.ПродажиТоваров.Отдел;
   |Товар = Регистр.ПродажиТоваров.Товар;
   |Поставщик = Регистр.ПродажиТоваров.Поставщик;
   |Количество = Регистр.ПродажиТоваров.Количество;
   |Сумма = Регистр.ПродажиТоваров.Сумма;
   |Функция ВсегоПродаж = Сумма(Количество);    
   |Группировка Отдел;
   |Группировка Товар;
   |Группировка Поставщик;
   |";
   
   Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
       Возврат;    
   КонецЕсли;

   док.Новый();
   док.НомерДок = "1";
   док.ДатаДок = РабочаяДата();
   
   Пока Запрос.Группировка(1) = 1 Цикл
       
       Пока Запрос.Группировка(2) = 1 Цикл
           
           Пока Запрос.Группировка(3) = 1 Цикл
               
               спр.НайтиЭлемент(Запрос.Поставщик);
               
               процент = спр.ПроцентКомВоз;
               
               Регистр.ТоварныйЗапас.Отдел = Запрос.Отдел;
               Регистр.ТоварныйЗапас.Товар = Запрос.Товар;
               Регистр.ТоварныйЗапас.Поставщик = Запрос.Поставщик;
               Регистр.ТоварныйЗапас.Количество = Запрос.Количество;
               Регистр.ТоварныйЗапас.Стоимость = Запрос.Сумма + Запрос.Сумма * процент/100;
               Регистр.ТоварныйЗапас.ДвижениеРасходВыполнить();
               
           КонецЦикла;
           
       КонецЦикла;
       
   КонецЦикла;

   док.Записать();
10 evGenius
 
05.07.06
14:40
Регистр.ТоварныйЗапас.Отдел = Запрос.Отдел;
               Регистр.ТоварныйЗапас.Товар = Запрос.Товар;
               Регистр.ТоварныйЗапас.Поставщик = Запрос.Поставщик;
               Регистр.ТоварныйЗапас.Количество = Запрос.Количество;
               Регистр.ТоварныйЗапас.Стоимость = Запрос.Сумма + Запрос.Сумма * процент/100;
               Регистр.ТоварныйЗапас.ДвижениеРасходВыполнить();
Это должно быть в ОбработкаПроведения() твоего документа, а не в модуле обработки.
11 catena
 
05.07.06
14:42
док = СоздатьОбъект("Документ.Новый1");    
   Это правда, у вас так документ называется?
12 gar_den
 
05.07.06
14:42
А Запрос?
13 gar_den
 
05.07.06
14:43
(11) Это пока пробная версия
14 evGenius
 
05.07.06
14:44
(13) ;-)))
15 catena
 
05.07.06
14:45
(13)В цикле:


   Пока Запрос.Группировка(1) = 1 Цикл
       
       Пока Запрос.Группировка(2) = 1 Цикл
           
           Пока Запрос.Группировка(3) = 1 Цикл
               
Заполняешь табличную чать своего документа Новый1, потом док.Провести()
В обработке проведения документа Новый1 движения по регистру
16 evGenius
 
05.07.06
14:45
Выбирай данные в обработке, заполняй в обработке документ, проводи его. А сами движения делай по данным в проведении документа.
17 gar_den
 
05.07.06
14:46
Ух ты! Работает!
18 zhas79
 
05.07.06
14:46
(12) запрос пусть делается в обработке, а вот по его результатам должен заполняться документ и вызываться Док.Провести()
Но ИМХО, это через одно место. Проще сделать документ "Списание товарного запаса" и в нем кнопку "Заполнить", по которой будет выполняться запрос и заполняться табличная часть. Тогда юзеры вместо обработки будут открывать документ и нажимать кнопку "Заполнить", а потом "Провести"
19 evGenius
 
05.07.06
14:46
(0) Еще раз RTFM
20 catena
 
05.07.06
14:47
(19) RTFM позволяет делать обработкой движения регистров?
21 gar_den
 
05.07.06
14:47
(18) Я тоже думаю что это через то место, но в задаче сказано делать так
22 evGenius
 
05.07.06
14:49
(20) После данного действия не возникает кода, подобного (9)