Имя: Пароль:
1C
1С v8
Как записать данные в регистр накопления
0 SherifSP
 
03.09.12
12:20
Как записать данные в  регистр накопления. В документ посредством метода ПолучитьОбъект(). А в регистр накопления?
1 SherifSP
 
03.09.12
12:21
мРегистр = ЭлементыФормы.Флажок1.Значение;
   
   Если мРегистр = Истина Тогда
       
       Запрос = Новый Запрос;
       Запрос.Текст =
       "ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 10
       |    Продажи.Регистратор,
       |    Продажи.Подразделение
       |ИЗ
       |    РегистрНакопления.Продажи КАК Продажи
       |ГДЕ
       |    Продажи.Период МЕЖДУ &ДатаНач И &ДатаКон";
       
       Запрос.УстановитьПараметр("ДатаНач", ДатаНач);
       Запрос.УстановитьПараметр("ДатаКон", ДатаКон);
       ТЗ = Запрос.Выполнить().Выгрузить();
       
       Для Каждого Стр Из ТЗ Цикл
           
           Если Не ЗначениеЗаполнено(Стр.Подразделение) Тогда
               
               //Как здесь записать.
               
           КонецЕсли;
           
       КонецЦикла;
       
   Иначе
       
       Запрос = Новый Запрос;
       Запрос.Текст =
       "ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 10
       |    РеализацияТоваровУслуг.Ссылка,
       |    РеализацияТоваровУслуг.Подразделение
       |ИЗ
       |    Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
       |ГДЕ
       |    РеализацияТоваровУслуг.Дата МЕЖДУ &ДатаНач И &ДатаКон";
       
       Запрос.УстановитьПараметр("ДатаНач", ДатаНач);
       Запрос.УстановитьПараметр("ДатаКон", ДатаКон);
       ТЗ = Запрос.Выполнить().Выгрузить();
       
       Для Каждого Стр Из ТЗ Цикл
           
           Если Не ЗначениеЗаполнено(Стр.Подразделение) Тогда
               
               Объект = Стр.Ссылка.ПолучитьОбъект();
               Объект.Подразделение = Подразделение;
               Объект.Записать();
               
           КонецЕсли;
           
       КонецЦикла;
       
   КонецЕсли;
2 Axel2009
 
03.09.12
12:21
записать через получитьобъект()?
3 SherifSP
 
03.09.12
12:22
(2) В документ да
4 salvator
 
03.09.12
12:24
создать набор записей, отобрать по регистратору, прочитать, добавить, записать.
5 SherifSP
 
03.09.12
12:25
(4)  Мне нужно редактировать текущую запись, а не добавлять новую
6 skunk
 
03.09.12
12:27
установить нужный отбор
прочитать
изменить
записать
7 salvator
 
03.09.12
12:27
(5) ок, замени 4-й этап на "изменить"
8 SherifSP
 
03.09.12
12:29
Спс
9 SherifSP
 
03.09.12
12:30
У меня в сп нет метода прочитать
10 SherifSP
 
03.09.12
12:37
11 salvator
 
03.09.12
12:47
(10) см (4), п.1
12 SherifSP
 
03.09.12
12:53
(11)    Для Каждого Стр Из ТЗ Цикл
           
           Если Не ЗначениеЗаполнено(Стр.Подразделение) Тогда
               
               Движения = РегистрыНакопления.Продажи.ВыбратьПоРегистратору(Стр.Регистратор);
                               
           КонецЕсли;
           
       КонецЦикла;
13 SherifSP
 
03.09.12
14:50
ТЗ = Запрос.Выполнить().Выгрузить();
       
       Для Каждого Стр Из ТЗ Цикл
           
           Если Не ЗначениеЗаполнено(Стр.Подразделение) Тогда
               
               Набор = РегистрыНакопления.Продажи.СоздатьНаборЗаписей();
               Набор.Отбор.Регистратор.Значение = СТр.Регистратор;
               Набор.Отбор.Регистратор.Значение.Подразделение = Подразделение;
               Набор.Записать();
               
           КонецЕсли;
           
       КонецЦикла;


{Форма.Форма(29)}: Поле объекта недоступно для записи (Подразделение)
               Набор.Отбор.Регистратор.Значение.Подразделение = Подразделение;
14 Aprobator
 
03.09.12
14:51
(13) жуть какая.
15 SherifSP
 
03.09.12
14:58
(14) Почему?
16 Aprobator
 
03.09.12
14:58
мало того, что условие не в запрос закатал на подразделение, так еще и в регистре пытаешься оставить инфу только по регистратору, плюс у регистратора (причем у ссылки, а не объекта), подменить реквизит. Просто офигеть.
17 rutony
 
03.09.12
14:59
(15) /*facepalm/*
Набор.Отбор.Регистратор.Значение.Подразделение = Подразделение;
18 Aprobator
 
03.09.12
15:02
хорошо еще, что ошибка по подразделению выскочила. Так бы часть данных по продажам в регистре расфигачил в аут.
19 SherifSP
 
03.09.12
15:03
(18)Не страшно я на тестовой работаю
20 SherifSP
 
03.09.12
15:03
(16)Условие не нужно в запросе
21 SherifSP
 
03.09.12
15:04
(16)По подразделению
22 SherifSP
 
03.09.12
15:05
Хз что его тут придумать
23 Aprobator
 
03.09.12
15:06
а что тут думать? Работу меняй. 1С ты не тянешь.
24 salvator
 
03.09.12
15:08
(20) Проще сделать отбор по подразделению сразу в запросе, чем потом в цикле проверять
25 hhhh
 
03.09.12
15:08
(22) отбор только по регистратору можно. Про подразделения забудь.
26 SherifSP
 
03.09.12
15:10
Запрос у меня нормальный

Запрос = Новый Запрос;
       Запрос.Текст =
       "ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 10
       |    Продажи.Регистратор,
       |    Продажи.Подразделение
       |ИЗ
       |    РегистрНакопления.Продажи КАК Продажи
       |ГДЕ
       |    Продажи.Период МЕЖДУ &ДатаНач И &ДатаКон
       |    И Продажи.Регистратор ССЫЛКА Документ.РеализацияТоваровУслуг";
       
       Запрос.УстановитьПараметр("ДатаНач", НачалоДня(ДатаНач));
       Запрос.УстановитьПараметр("ДатаКон", КонецДня(ДатаКон));
       ТЗ = Запрос.Выполнить().Выгрузить();
27 Aprobator
 
03.09.12
15:10
народ ну хоть вы то меня не смешите.
Каким образом кодом в (13) можно поправить записи сделанные документом?
Не код, а ляп на ляпе. Ввиду полного непонимания процесса как такогого.
28 Aprobator
 
03.09.12
15:10
(26) ик ик ик.
29 Aprobator
 
03.09.12
15:12
впрочем для тупого перебора - сойдет. Отвык я как то от запросов к регистрам накопления без запроса ресурсов.
30 SherifSP
 
03.09.12
15:12
Можно конечно и в запросе проверять подразделение)
31 Aprobator
 
03.09.12
15:13
ладно - пшел я работать. А то от таких тем и одуреть недолго.
32 SherifSP
 
03.09.12
15:14
(31))
33 hhhh
 
03.09.12
15:20
(30) а смысл? Набор пишется целиком, старый стирается, новый записывается. Одну строчку у него невозможно изменить, хоть вы головой об стенку бейтесь.
34 SherifSP
 
03.09.12
15:25
Набор = РегистрыНакопления.Продажи.СоздатьНаборЗаписей();
               Док = Набор.Отбор.Регистратор;
               Док.Установить(Стр.Регистратор);
               Набор.Прочитать();
                               Набор.Записать();
35 Trier
 
03.09.12
15:38
собрались спецы блин...

(33)Чой-то нельзя одну строчку в наборе изменить? Хоть одну, хоть через одну

(34)Это шедеврально. 5 строк кода, которые не делают в результате НИЧЕГО. Блеск.

а вообще ТС, задумайся насчет (23). Нельзя быть программистом 1с, не зная как писать данные в регистр.
36 SherifSP
 
03.09.12
15:39
Шериф тебе толком могу помочь только я, на вот готовое решение

Запрос = Новый Запрос;
       Запрос.Текст =
       "ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 10
       |    Продажи.Регистратор,
       |    Продажи.Подразделение
       |ИЗ
       |    РегистрНакопления.Продажи КАК Продажи
       |ГДЕ
       |    Продажи.Период МЕЖДУ &ДатаНач И &ДатаКон
       |    И Продажи.Регистратор ССЫЛКА Документ.РеализацияТоваровУслуг";
       
       Запрос.УстановитьПараметр("ДатаНач", НачалоДня(ДатаНач));
       Запрос.УстановитьПараметр("ДатаКон", КонецДня(ДатаКон));
       ТЗ = Запрос.Выполнить().Выбрать();
       
       НаборЗаписей = РегистрыНакопления.Продажи.СоздатьНаборЗаписей();
       
       Пока ТЗ.Следующий() Цикл
           НаборЗаписей.Отбор.Регистратор.Установить(ТЗ.Регистратор);
           НаборЗаписей.Прочитать();
           Если Не ЗначениеЗаполнено(ТЗ.Подразделение) Тогда
               Для Каждого ТекЗапись Из НаборЗаписей Цикл
                   ТекЗапись.Подразделение  = Подразделение;
               КонецЦикла;
               НаборЗаписей.Записать();
           КонецЕсли;
           
       КонецЦикла;
37 SherifSP
 
03.09.12
15:40
(36) Ой, спасибо тебе друг!)
Независимо от того, куда вы едете — это в гору и против ветра!