Имя: Пароль:
1C
 
Создание Регистра Бухгалтерии
0 Дебет
 
25.03.16
10:26
создал самописный док который должен делать проводки, табл в 100 записей вешает программу =(
Что я делаю не так?

для Каждого МЦ из ТабЗатрат цикл
        НаборЗаписей  = РегистрыБухгалтерии.Хозрасчетный.СоздатьНаборЗаписей();    
        НаборЗаписей .Отбор.Регистратор.Установить(Ссылка);
        НаборЗаписей.Прочитать();
        НаборЗаписей.Записывать=Истина;
        Движение  = НаборЗаписей.Добавить();
        Движение.СчетКт = МЦ.СчетАмортизации;
        Движение.СубконтоКт.Номенклатура =  МЦ.ОбъектУчета;
        Движение.СубконтоКт.ПартииМатериаловВЭксплуатации =  МЦ.ДокументПередачи;
        Движение.СубконтоКт.РаботникиОрганизаций =  МЦ.ПодразделениеФизЛицо    ;
        Движение.Сумма = МЦ.Сумма;
        Движение.СуммаВРКТ = МЦ.СуммаВР;        
        Движение.СуммаПРКТ = МЦ.СуммаПР;        
        Движение.СуммаНУКТ = МЦ.СуммаНУ;        
        Движение.Период = Дата;
        Движение.Организация = Организация;
        НаборЗаписей.Записать();  
        
    КонецЦикла;
1 Timon1405
 
25.03.16
10:28
Пятница-жестятница
2 shuhard
 
25.03.16
10:29
(0)НаборЗаписей.Записать();  
        
    КонецЦикла;
3 Дебет
 
25.03.16
10:31
(2) за цикл вынести?
4 Живой Ископаемый
 
25.03.16
10:32
Это неправильный код.
Вместо
НаборЗаписей.Записать();

Надо:


Для Каждого Колонка ИЗ ТабЗатрат.Колонки Цикл
    НаборЗаписей.Записать();
КонецЦикла;
5 Дебет
 
25.03.16
10:48
(4) в чем различие?
6 Nuobu
 
25.03.16
11:09
Вынеси создание и запись набора записей за цикл.
7 PR третий
 
25.03.16
11:17
(4) Это ненадежно.
Нужно дополнительно в цикле запускать цикл на 100 итераций с записью набора.
В особо важных базах, где важна отказоустойчивость, на 1000.
8 Дебет
 
25.03.16
11:29
(6) вынес за цикл в итоге программа выдает -Недостаточно памяти
Записей 250

    НаборЗаписей  = РегистрыБухгалтерии.Хозрасчетный.СоздатьНаборЗаписей();    
        НаборЗаписей .Отбор.Регистратор.Установить(ЭтотОбъект.Ссылка);

        НаборЗаписей.Записывать=Истина;

        для Каждого МЦ из ТабЗатрат цикл
                    Движение  = НаборЗаписей.Добавить();
        Движение.СчетКт = МЦ.СчетАмортизации;
        Движение.СубконтоКт.Номенклатура =  МЦ.ОбъектУчета;
        Движение.СубконтоКт.ПартииМатериаловВЭксплуатации =  МЦ.ДокументПередачи;
        Движение.СубконтоКт.РаботникиОрганизаций =  МЦ.ПодразделениеФизЛицо    ;
        Движение.Сумма = МЦ.Сумма;
        Движение.СуммаВРКТ = МЦ.СуммаВР;        
        Движение.СуммаПРКТ = МЦ.СуммаПР;        
        Движение.СуммаНУКТ = МЦ.СуммаНУ;        
        Движение.Период = Дата;
        Движение.Организация = Организация;
    КонецЦикла;
       НаборЗаписей.Записать();
9 Любопытная
 
25.03.16
11:32
(8) А документ является регистратором для регистра? Если да, то почему не через Движения документа делаете?
10 shuhard
 
25.03.16
11:32
(8) продолжай наблюдение
11 Nuobu
 
25.03.16
11:36
(8) .Прочитать();
12 Дебет
 
25.03.16
11:36
(10) конечно в типовой бухии ведь много такого можно просто копи паст сделать....
13 Любопытная
 
25.03.16
11:37
(11) Зачем читать?
14 Nuobu
 
25.03.16
11:37
(8) К восьмому посту количество записей увеличилось более чем вдвое.
15 Nuobu
 
25.03.16
11:38
(13) Да, можно не читать, ошибся))
16 Дебет
 
25.03.16
11:38
(14) разные периоды
17 Nuobu
 
25.03.16
11:39
(16) Не забудь ".Прочитать();".
18 Дебет
 
25.03.16
11:40
(17) пробывал НаборЗаписей.Прочитать(); результат -недостаточно памяти
19 Nuobu
 
25.03.16
11:41
(18) А ты точно не хочешь использовать движения?
20 Любопытная
 
25.03.16
11:42
(18) Ты его читаешь, а потом в него же добавляешь записи. Старые при этом не очищаются. Если уж прочитал, тогда очищай после прочтения.
И попробуй все-таки через таблицу движений документа сделать.
21 Дебет
 
25.03.16
11:42
(19) можно по подробней?
22 Любопытная
 
25.03.16
11:42
И еще надо бы на структуру регистра посмотреть конечно
23 Nuobu
 
25.03.16
11:44
(21)
НаборЗаписей  = ЭтотОбъект.Движения.Хозрасчетный;    

        НаборЗаписей.Записывать=Истина;

        для Каждого МЦ из ТабЗатрат цикл
                    Движение  = НаборЗаписей.Добавить();
        Движение.СчетКт = МЦ.СчетАмортизации;
        Движение.СубконтоКт.Номенклатура =  МЦ.ОбъектУчета;
        Движение.СубконтоКт.ПартииМатериаловВЭксплуатации =  МЦ.ДокументПередачи;
        Движение.СубконтоКт.РаботникиОрганизаций =  МЦ.ПодразделениеФизЛицо    ;
        Движение.Сумма = МЦ.Сумма;
        Движение.СуммаВРКТ = МЦ.СуммаВР;        
        Движение.СуммаПРКТ = МЦ.СуммаПР;        
        Движение.СуммаНУКТ = МЦ.СуммаНУ;        
        Движение.Период = Дата;
        Движение.Организация = Организация;
    КонецЦикла;
       НаборЗаписей.Записать();
24 hhhh
 
25.03.16
11:45
(23) тогда

НаборЗаписей.Записать();

не нужно. 2 раза записываете
25 Живой Ископаемый
 
25.03.16
11:46
У меня тоже выдает что памяти недостаточно, но только когда провдок 1400000 (миллион 400 тысяч), когда 600 тысяч - то все норм.
Но и то, это из-за того. что я записываю набор записей на толстом клиенте, который 32-битный. Писал бы я на сервере, думаю. что и два миллиона записал бы
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший