Имя: Пароль:
1C
1C 7.7
v7: Выгрузка данных из 77 в файл XML
,
0 Kerk
 
21.11.13
11:30
Провожу выгрузку данных из Бухгалтерии 4.5 (7.70.567). 1С:Предприятие 7.70.027
Выгружаю обработкой и правилами поставляемые в бухгалтерии 3.0 для 8.3.

Папка базы 7.7 размером 3.2 гигабайта. Номенклатура выгружается 6,5 часов. НО… при выгрузки расчетов с покупателями и заказчиками, 1С 7.7 через 4-5 часов падает с логом:

Начало выгрузки:   20.11.13 14:53:59
Ошибка исполнения обработчика:  ПВД_ПередОбработкойПравила_ост_РасчетыСПокупателями
  - msxml3.dll: Недостаточно памяти для завершения операции.
Выгружено объектов:   47763
Окончание выгрузки:   20.11.13 19:24:52


Пробовали на разных компах, даже на Серверной 2003 винде с 4 гигами оперативки.

Есть у кого-нибудь советы (или код) что бы выгрузить остатки из 7.7.
1 ДенисЧ
 
21.11.13
11:32
чястями выгружай.
2 Kupogun
 
21.11.13
11:34
ну, 4 гб это не так уж много.
3 ТакВотЖе
 
21.11.13
11:37
это свернутая база такого объема?
4 Kerk
 
21.11.13
11:41
(3) Да. Каждый год "сворачивалась" база 7.7, а то работать было невозможно.
5 Kerk
 
21.11.13
11:42
(1) Пытаюсь. И даже если выгружаю остатки только по расчетам с покупателями и заказчиками - все равно падает.
6 asady
 
21.11.13
11:52
(0) вызывайте специалиста (с)какой-то мистюк

а вообще сначала нужно было проверить регистры взаиморасчетов на предмет закрытия
7 Kerk
 
21.11.13
11:53
В правилах в ост_РасчетыСПокупателями приписаны выгрузки по счетам: 62.1, 62.11, 62.2, 62.22, ВАЛ.22, 62.3, 62.4, 62.44, 62.6, 62.7, 62.8.
8 Kerk
 
21.11.13
11:55
(6) Тут ситуация вообще интересная, берутся остатки на начало 13 года, но и сама база свернута на начало 13 года...
9 Абыр
 
21.11.13
11:56
(0) Выгружайте частями (порциями контрагентов). Правила потребуется чуть допилить.
10 ТакВотЖе
 
21.11.13
12:17
(6) это бухгалтерия, там нет регистров)
11 Kerk
 
21.11.13
12:19
(9) В правилах выгружается по счетам что в (7) и боюсь, будет падать так же только на конкретном счете.
12 be-may
 
21.11.13
12:41
(0) "Номенклатура выгружается 6,5"
что под этим имеется в виду ? неужели сам справочник?
13 Абыр
 
21.11.13
12:57
(11) Вам придется один раздел учета (одно ПВД) выгружать порциями. Т.е. остатки по каждым 100, 1000, 10000, ... контрагентам выгружать отдельным файлом. Вот как раз для этого разделения и придется доработать правила по проблемным разделам.
14 Kerk
 
21.11.13
13:38
(12) Сам справочник - он раздут довольно сильно, но он же выгружается...
15 acsent
 
21.11.13
13:45
Выгрузить отдельно контрагентов. Отдельно остатки без ссылок. Правила допилить слегка
16 acsent
 
21.11.13
13:45
И всего 2гига на результирующий xml может быть
17 Kerk
 
21.11.13
13:52
(15) Так и делаю. выгружаю справочники и остатки в отдельных выгрузках.


Самый большой счет 62.6 (вылютный)
18 ЧессМастер
 
21.11.13
14:02
(0) в чем проблема выгрузить остатки по взаиморасчетам по ОЛЕ ?
19 Kerk
 
21.11.13
14:18
(18) Поделись обработочкой, если богат.
20 пипец
 
21.11.13
14:24
(18) при таких объемах - по оле , он быстрее повесится ;)
21 ЧессМастер
 
21.11.13
14:35
(19) если терпит до завтра то скину. обработка дома валяется

(20) у него падает не от объемов а по причине того что в файл XML пишется информация по ссылкам выгружаемых объектов. у меня все остатки по взаиморасчетам из бухгалтерии в опер. программу выгружаются после разноски банка каждый день минут за 5
22 Kerk
 
21.11.13
14:41
(21) Терпит. Буду благодарен, если поделишься.
23 ЧессМастер
 
21.11.13
14:45
(22) у тебя в базе Приемник данные по взаиморасчетам из Бухгалтерии куда должны попадать ?
24 Kerk
 
21.11.13
15:20
(23) Документ ВводНачальныхОстатков
25 ЧессМастер
 
21.11.13
15:42
(24) тогда вообще проблем нет
26 ЧессМастер
 
22.11.13
09:16
Ну как то так

БИ=БазаБух.CreateObject("БухгалтерскиеИтоги");
    БИ.ИспользоватьСубконто(БазаБух.ВидыСубконто.Контрагенты,,1);
    БИ.ИспользоватьСубконто(БазаБух.ВидыСубконто.Договоры,,1);
    
    БИ.ВыполнитьЗапрос(КонДатаВзаиморасчетов,КонДатаВзаиморасчетов,"62",,,1,,"С");

БИ.ВыбратьСубконто(1);
Пока БИ.ПолучитьСубконто(1)=1 Цикл
        
КонтрБух=БИ.Субконто(1);
КодБух=КонтрБух.Код;  
    
Коннтр_=СоздатьОбъект("Справочник.Контрагенты");                    
        Контр=СоздатьОбъект("Справочник.Контрагенты");                    
        Контр_.ВыбратьЭлементыПоРеквизиту("КодОбмена",КодБух,0,0);
        Пока Контр_.ПолучитьЭлемент()=1 Цикл
            Если Контр_.ПометкаУдаления()=1 Тогда
                Продолжить;
            КонецЕсли;    
            Контр.НайтиЭлемент(Контр_.ТекущийЭлемент());
        КонецЦикла;
        Если Контр.Выбран()=1 Тогда    
            Если Контр.ПометкаУдаления()=1 Тогда
                Сообщить("Помечен на удаление "+Контр.Наименование);
                Продолжить;
            КонецЕсли;
            БИ.ВыбратьСубконто(2);
            Пока БИ.ПолучитьСубконто(2)=1 Цикл
                Договор=БИ.Субконто(2);
                
                //Сообщить(Шаблон("[КонтрБух.Наименование] [КодБух] [БИ.СКК(""С"")]"));
                Сальдо=БИ.СКК("С")-БИ.СКД("С"); // вот твое сальдо - засовывай его в документ

ну и цикл закрой
27 Kerk
 
22.11.13
12:17
(26) Спасибо, попробую загрузить напрямую из 8-ки.
28 acsent
 
22.11.13
12:20
(17) Ты уверен что без ссылок остатки грузишь? каким образом отключал?
29 Kerk
 
22.11.13
13:36
(17) Обработка вида http://plutonit.ru/image/TiS-UT/TiS-UT-82-1.png

В левой части можно выбрать остатки.
В параметрах есть такие вещи как "Выгружать справочники / выгружать остатки / выгружать обороты"

Соответственно там и там отмечаю что надо. в параметрах "где надо выгрузить" ставлю "1"

Больше настроек не видел.
30 Kerk
 
22.11.13
13:39
(29) к (28)
31 Абыр
 
22.11.13
20:08
(29) в этом случае, выгружая остатки, будут выгружены по ссылкам полностью справочники с реквизитами и со всеми сопутствующими им данными (контактная информация контрагентов, например). в (15) и (28) имеется в виду, что правила следует изменить, чтобы данные по ссылкам из дока ввода остатков не перегружались, но для этого их предварительно надо перенести отдельно, чтобы после переноса остатков всё подцепилось корректно.
32 ifso
 
22.11.13
20:58
(0) Можно попробовать отдать размер файла подкачки на растерзание окнам.
33 Kerk
 
25.11.13
11:40
(32) Выгрузка не упирается в пиковое значение по файлу подкачки, размер которого задан в ручную как 150% от объема оперативки.
34 Kerk
 
27.11.13
10:20
Такие же проблемы есть при выгрузке оборотов...
Но пока их использовать не буду, буду грузить сразу остатки на  3 квартал...
35 Franchiser
 
гуру
27.11.13
13:36
Нормальная ситуация, как только процесс 1с 7.7 приближается к 2 гб (по факту 1,5 -1,8) возникает такая ошибка. решение: выгружать частями или применить патч к 7-ке.
36 Kerk
 
27.11.13
13:43
(35) Как переписать правила так чтобы остатки выгружались порциями не нашел (плюс все же на 7-ке написано).

Что за патч? Можно ссылку на описание?
37 Franchiser
 
гуру
27.11.13
13:46
(36) ищи в инете 4gb_patch позволяет выделить для любого бинарника х32 4 гб памяти. На х64 винде работает на других не проверял. при желании могу скинуть на почту
38 Franchiser
 
гуру
27.11.13
13:50
(35)Я просто сделал, добавил на форму выбор счета, сами правила с обработчиками выгружаешь в 2 файла - xm1 и ert затем открываешь в 7-ке в результате можешь отдельно выгружать файлы по отдельным субсчетам, т.е. 62.1, 62.2, 62.4. Условие на счет пишешь в алгоритме ВыгрузитьОстаткиПосчету() если говорить о счете 62 и 60
39 Franchiser
 
гуру
27.11.13
13:52
все модификации правил я делал в конфигурации Конвертация данных 2.0, в нее же можно подгрузить выгруженный файлы. Файлы выгружаются из справочника "Конвертации из предыдущих версий" 1с 8.2-8.3 как-то так.
40 Franchiser
 
гуру
27.11.13
13:53
Выгрузка происходит с помощью универсальной выгрузки данных 1с 7.7
41 Franchiser
 
гуру
27.11.13
13:55
напрямую из 1с 7.7 загружать стандартно не советую, т.к. выгрузка идет все равно через временный файл xml с помощью объекат MS XML_DOM который хранится в памяти до момента записи в файл в самом конце.
42 Franchiser
 
гуру
27.11.13
14:03
Когда выгрузку будешь производить через универсальную обработку выгрузки 1с 7.7 будет доступен выбор выгрузки по разделам учетов. Каждый раздел учета - набор счетов для выгрузки.
43 Kerk
 
27.11.13
14:10
(40) Этой (29) ?
(38) Выгрузка падает при выгрузке конкретного счета 62.6.



(39) Правила и обработку получил уже готовые и загрузил в конвертацию.
Пытался исправлять в "Конвертации данных 2.1.8.1", после чего заменял модуль обработки 7.7 - в итоге ругалось что не может конвертировать СписокЗначений (Оригинальная обработка без такой проблемы).
44 Kerk
 
27.11.13
14:11
Сейчас делаю выгрузку счета 62 напрямую через оле, но если скажешь как сделать ограничение выгрузки через правила хотя бы по 2 строк остатков счета 62 - будешь безмерно крут.
45 Kerk
 
27.11.13
14:12
(44) "делаю выгрузку" = "кодирую обраотку в 8-ке для переноса данных"
46 Kerk
 
27.11.13
14:36
(26) "БИ=БазаБух.CreateObject("БухгалтерскиеИтоги");
    БИ.ИспользоватьСубконто(БазаБух.ВидыСубконто.Контрагенты,,1);
    БИ.ИспользоватьСубконто(БазаБух.ВидыСубконто.Договоры,,1);
    "

Ошибка при вызове метода контекста (ИспользоватьСубконто)
        БИ.ИспользоватьСубконто(БазаБух.ВидыСубконто.Контрагенты,,1);
по причине:
Типы не совпадают (2)
47 Kerk
 
27.11.13
14:38
(46)+
БазаБух= Новый COMObject("V77.Application");
48 Kerk
 
27.11.13
14:54
(46) В общем все плохо - он требует заполнение всех параметров, а 2-й параметр должен быть пустым... засада.
v8: БИ из 8 в 77
49 Franchiser
 
гуру
27.11.13
16:09
(44) да обработка та что в 29. Ну на твоем месте я бы применил патч. А вообще кидаешь на форму той обработки реквизит счет, затем пытаешься выгрузить только по нему. Дополнительно частями можешь выгрузить так: так как контрагенты выгружаются по наименованию, то ставишь отбор по буквам алфавита: и выгружаешь сначала контрагентов с одним диапозоном букв потом не забыв очистить комментарий после загрузки в 8-ке выгружаешь другую и тд..
50 Злопчинский
 
27.11.13
16:23
правда непонятно что куда выгружается из бух8 в ТиС? или в бух 7.7..?
.
7.7 в части учета простая как три копейки. за это время которое потрачено на взлеты и падения иксемеля, можно уже было тупые выгрузки справочников, доков, проводк налабать... а то чувствую еще часов 30 уйдет на бодание ;-)
51 Franchiser
 
гуру
27.11.13
16:45
(46)не понял откуда этот код. В универсальной обработке насколько я помню конкретно у субконто контрагенты или договоры редко где обращаются, т.к. там все сделано универсально. В 7.7 есть отладчик.
(50) я так понял из бух 7.7 в бух 8 3.0
52 Kerk
 
27.11.13
16:47
(51) Код из примера (26) и к обработке выгрузки из 7.7 никак не связан.

(50) из 7.7 в БП 3.0 на 8.3
53 Franchiser
 
гуру
27.11.13
16:48
(46) не пойму зачем ты так код меняешь, тебе нужно поставить условие  на текущий выгружаемый субсчет 62.6 и ,например. на наименование 1-го субконто иначе возврат и все.
54 Franchiser
 
гуру
27.11.13
16:49
не знаю как в твоих правилах при выгрузке в 8.2 все делалось в алгоритме выгрузитьостаткипосчету()
55 Franchiser
 
гуру
27.11.13
16:50
(52) попробуй EvalExpr
56 Franchiser
 
гуру
27.11.13
16:50
на сколько я помню так (БазаБух.ВидыСубконто.Контрагенты) писать нельзя
57 Franchiser
 
гуру
27.11.13
16:59
БИ.ИспользоватьСубконто(БазаБух.evalexpr("ВидыСубконто.Контрагенты",,1); как то так
58 Franchiser
 
гуру
27.11.13
16:59
скобку 1 забыл
59 Franchiser
 
гуру
27.11.13
17:08
Можно вообще попробовать без параметра написать 2 раза: БИ.ИспользоватьСубконто();
БИ.ИспользоватьСубконто();
60 Kerk
 
27.11.13
17:25
(53) Объясняю: я сейчас иду по 2-м путям: пытаюсь выгрузить данные по стандартным правилам ТОЛЬКО данные по счету 62.6 (без справочников), 2-й путь перенести данные через ОЛЕ напрямую.

Код в (46), (26) нужен для метода с ОЛЕ.
61 Kerk
 
27.11.13
17:35
(53) (54) Алгоритм "ВыгрузитьОстаткиПоСчету" без "как есть"

// Выгружает остатки по любому счету. Счет записывается в таблицу
// проводок, как объект типа "Основной.Счет" (потом он сконвертируется
// в соответствии с настройкой конвертации значений счетов).

// Остатки по субконто на которых ведется только количественный учет
// выгружаются, как отдельные проводки.

СчетВводаОстатков = Параметры.СчетВводаОстатков;
Счет = Параметры.ПараметрыАлгоритмов.Получить("ТекущийСчет");
РегистрБух = Параметры.ПараметрыАлгоритмов.Получить("Регистр");

Проводки = Параметры.ТаблицаПроводок;
Проводки.УдалитьСтроки();

Валюты = СоздатьОбъект("СписокЗначений");

// Остатки
БухИт = СоздатьОбъект("БухгалтерскиеИтоги");
БухИт.ИспользоватьСубконто();
БухИт.ИспользоватьСубконто();
БухИт.ИспользоватьСубконто();
БухИт.ВыполнитьЗапрос(Параметры.ДатаВводаОстатков,, Счет);

Параметры.ПараметрыАлгоритмов.Установить("БухИт", БухИт);
Параметры.ПараметрыАлгоритмов.Установить("Проводки", Проводки);

БухИт.ВыбратьСчета();
Пока БухИт.ПолучитьСчет() = 1 Цикл
    Валюты.УдалитьВсе();
        
    Если Счет.Валютный = 1 Тогда
        БухИт.ВыбратьВалюты();
        Пока БухИт.ПолучитьВалюту() = 1 Цикл
            Валюты.ДобавитьЗначение(БухИт.Валюта);
        КонецЦикла;
            
    Иначе
        Валюты.ДобавитьЗначение(ПолучитьПустоеЗначение("Справочник.Валюты"));
    КонецЕсли;
        
    Параметры.ПараметрыАлгоритмов.Установить("ТолькоСумма", 0);
            
    Для НомерВалюты = 1 по Валюты.РазмерСписка() Цикл
        Если Счет.Валютный = 1 Тогда
            БухИт.ПолучитьВалюту(, Валюты.ПолучитьЗначение(НомерВалюты));
        КонецЕсли;
        
        СуммовойУчет1 = ?(Счет.КоличествоСубконто() > 0, ?(Счет.ТолькоОбороты(1) = 1, 0, Счет.УчетПоСумме(1)), 0);
        СуммовойУчет2 = ?(Счет.КоличествоСубконто() > 1, ?(Счет.ТолькоОбороты(2) = 1, 0, Счет.УчетПоСумме(2)), 0);
        СуммовойУчет3 = ?(Счет.КоличествоСубконто() > 2, ?(Счет.ТолькоОбороты(3) = 1, 0, Счет.УчетПоСумме(3)), 0);
        
        КоличествоУровней = 0;
        КоличествоУровней = КоличествоУровней + ?(Счет.КоличествоСубконто() > 0, ?(Счет.ТолькоОбороты(1) = 1, 0, 1), 0);
        КоличествоУровней = КоличествоУровней + ?(Счет.КоличествоСубконто() > 1, ?(Счет.ТолькоОбороты(2) = 1, 0, 1), 0);
        КоличествоУровней = КоличествоУровней + ?(Счет.КоличествоСубконто() > 2, ?(Счет.ТолькоОбороты(3) = 1, 0, 1), 0);
        Параметры.ПараметрыАлгоритмов.Установить("КоличествоУровней", КоличествоУровней);
        
        Если КоличествоУровней = 0 Тогда
            Параметры.ПараметрыАлгоритмов.Установить("ТекНомерСубконто", 0);
            ПолучитьИтогиПоСчету();
            ДобавитьПроводку();
            
        ИначеЕсли КоличествоУровней > 0 Тогда
            Если БухИт.ВыбратьСубконто(1) = 1 Тогда
                Пока БухИт.ПолучитьСубконто(1) = 1 Цикл
                    Если ТипЗначенияСтр(БухИт.Субконто(1)) = "Справочник" Тогда
                        Если БухИт.Субконто(1).ЭтоГруппа() = 1 Тогда
                            Продолжить;
                        КонецЕсли;
                    КонецЕсли;
                    
                    Если ((СуммовойУчет1 = 1) и (СуммовойУчет2 = 0)) или (КоличествоУровней = 1) Тогда
                        Параметры.ПараметрыАлгоритмов.Установить("ТекНомерСубконто", 1);
                        ПолучитьИтогиПоСчету();
                        ДобавитьПроводку();
                    КонецЕсли;
                    
                    Если КоличествоУровней > 1 Тогда
                        БухИт.ВыбратьСубконто(2);
                        Пока БухИт.ПолучитьСубконто(2) = 1 Цикл
                            Если ТипЗначенияСтр(БухИт.Субконто(2)) = "Справочник" Тогда
                                Если БухИт.Субконто(2).ЭтоГруппа() = 1 Тогда
                                    Продолжить;
                                КонецЕсли;
                            КонецЕсли;
                            
                            Если ((СуммовойУчет2 = 1) и (СуммовойУчет3 = 0)) или (КоличествоУровней = 2) Тогда
                                Параметры.ПараметрыАлгоритмов.Установить("ТекНомерСубконто", 2);
                                ПолучитьИтогиПоСчету();
                                ДобавитьПроводку();
                            КонецЕсли;
                            
                            Если КоличествоУровней > 2 Тогда
                                БухИт.ВыбратьСубконто(3);
                                Пока БухИт.ПолучитьСубконто(3) = 1 Цикл
                                    Если ТипЗначенияСтр(БухИт.Субконто(3)) = "Справочник" Тогда
                                        Если БухИт.Субконто(3).ЭтоГруппа() = 1 Тогда
                                            Продолжить;
                                        КонецЕсли;
                                    КонецЕсли;
                                    
                                    Параметры.ПараметрыАлгоритмов.Установить("ТекНомерСубконто", 3);
                                    ПолучитьИтогиПоСчету();
                                    ДобавитьПроводку();
                                КонецЦикла;
                            КонецЕсли;    
                        КонецЦикла;
                    КонецЕсли;    
                КонецЦикла;
            Иначе
                Если Счет.Код = "25" Тогда
                    Если БухИт.ВыбратьСубконто(2) = 1 Тогда
                        Пока БухИт.ПолучитьСубконто(2) = 1 Цикл
                            Если ТипЗначенияСтр(БухИт.Субконто(2)) = "Справочник" Тогда
                                Если БухИт.Субконто(2).ЭтоГруппа() = 1 Тогда
                                    Продолжить;
                                КонецЕсли;
                            КонецЕсли;
                            
                            Если ((СуммовойУчет1 = 1) и (СуммовойУчет2 = 0)) или (КоличествоУровней = 1) Тогда
                                Параметры.ПараметрыАлгоритмов.Установить("ТекНомерСубконто", 2);
                                ПолучитьИтогиПоСчету();
                                ДобавитьПроводку();
                            КонецЕсли;
                        КонецЦикла;
                    КонецЕсли;    
                КонецЕсли;    
            КонецЕсли;    
        КонецЕсли;    
    КонецЦикла;
    
    РазделУчета = ОпределитьРазделУчета();
    Если ПустоеЗначение(РазделУчета) = 0 Тогда
        ВходящиеДанные = СоздатьОбъект("СписокЗначений");
        ВходящиеДанные.Установить("ВходящиеОстатки", Проводки);
        ВходящиеДанные.Установить("Счет", Счет);
        ВходящиеДанные.Установить("Дата", БухИт.НачДата-1);
        ВходящиеДанные.Установить("РазделУчета", РазделУчета);
        ВходящиеДанные.Установить("ОтражатьВНалоговомУчете", 1);
        ВходящиеДанные.Установить("ОтражатьВБухгалтерскомУчете", 1);
        ВходящиеДанные.Установить("ОтражатьПоСпециальнымРегистрам", 1);
        Если (РазделУчета = "РасчетыСПерсоналомПоОплатеТрудаИДепонентам")
            И (Параметры.ДатаВводаОстатков <> Параметры.ДатаКонцаПериодаВыгрузки) Тогда
            ВходящиеДанные.Установить("ОтражатьПоСпециальнымРегистрам", 0);
        КонецЕсли;
        Если РазделУчета = "РасчетыПоНалогамИСборам" Тогда
            ВходящиеДанные.Установить("ОтражатьВНалоговомУчете", 0);
        КонецЕсли;
        Если (РазделУчета = "НезавершенноеПроизводство") ИЛИ (РазделУчета = "РасходыБудущихПериодов") Тогда
            // делим по подразделениям
            ПроводкиПоПодразделению = СоздатьОбъект("ТаблицаЗначений");
            Проводки.Выгрузить(ПроводкиПоПодразделению);
            Проводки.НоваяКолонка("ПодразделениеОрганизации");
            ПроводкиПоПодразделению.УдалитьСтроки();            
            Проводки.ВыбратьСтроки();            
            Пока Проводки.ПолучитьСтроку() = 1 Цикл
                Для НомерСтроки = 1 По Проводки.СубконтоДт.КоличествоСтрок() Цикл
                    ТекЗнач = Проводки.СубконтоДт.ПолучитьЗначение(НомерСтроки, "Значение");
                    Если ТипЗначенияСтр(ТекЗнач) = "Справочник" Тогда
                        Если ТекЗнач.Вид() = "Подразделения" Тогда
                            Проводки.ПодразделениеОрганизации =  ТекЗнач;
                            Прервать;
                        ИначеЕсли ТекЗнач.Вид() = "РасходыБудущихПериодов" Тогда
                            Если ТипЗначенияСтр(ТекЗнач.Субконто1) = "Справочник" Тогда
                                Если ТекЗнач.Субконто1.Вид() = "Подразделения" Тогда
                                    Проводки.ПодразделениеОрганизации =  ТекЗнач.Субконто1;
                                    Прервать;
                                КонецЕсли;
                            КонецЕсли;
                            Если ТипЗначенияСтр(ТекЗнач.Субконто2) = "Справочник" Тогда
                                Если ТекЗнач.Субконто2.Вид() = "Подразделения" Тогда
                                    Проводки.ПодразделениеОрганизации =  ТекЗнач.Субконто2;
                                    Прервать;
                                КонецЕсли;
                            КонецЕсли;
                            Если ТипЗначенияСтр(ТекЗнач.Субконто3) = "Справочник" Тогда
                                Если ТекЗнач.Субконто3.Вид() = "Подразделения" Тогда
                                    Проводки.ПодразделениеОрганизации =  ТекЗнач.Субконто3;
                                    Прервать;
                                КонецЕсли;
                            КонецЕсли;
                        КонецЕсли;
                    КонецЕсли;
                КонецЦикла;
            КонецЦикла;
            Проводки.Сортировать("ПодразделениеОрганизации");
            
            ТекПодразделение = "";
            Проводки.ВыбратьСтроки();            
            Пока Проводки.ПолучитьСтроку() = 1 Цикл
                НомСтроки = 0;
                НомСтроки = Проводки.НомерСтроки;
                
                ПроводкиПоПодразделению.НоваяСтрока();
                НомСтрокиПодразделения = ПроводкиПоПодразделению.КоличествоСтрок();
                Для НомКолонки = 1 по ПроводкиПоПодразделению.КоличествоКолонок() Цикл
                    ПроводкиПоПодразделению.УстановитьЗначение(НомСтрокиПодразделения, НомКолонки, Проводки.ПолучитьЗначение(НомСтроки, НомКолонки));
                КонецЦикла;
                ТекПодразделение = Проводки.ПодразделениеОрганизации;
                
                Если НомСтроки < Проводки.КоличествоСтрок() Тогда
                    СледПодразделение = Проводки.ПолучитьЗначение(НомСтроки + 1, "ПодразделениеОрганизации");
                Иначе
                    СледПодразделение = "";
                КонецЕсли;
                
                Если ТекПодразделение <> СледПодразделение Тогда
                    Если ПроводкиПоПодразделению.КоличествоСтрок() > 0 Тогда
                        ВходящиеДанные.Установить("ВходящиеОстатки", ПроводкиПоПодразделению);
                        ВходящиеДанные.Установить("ПодразделениеОрганизации", ТекПодразделение);
                        ВыгрузитьПоПравилу(,, ВходящиеДанные,, "ВводНачальныхОстатков");
                        ПроводкиПоПодразделению.УдалитьСтроки();
                    КонецЕсли;
                КонецЕсли;
                
            КонецЦикла;
        Иначе
            ВыгрузитьПоПравилу(,, ВходящиеДанные,, "ВводНачальныхОстатков");
        КонецЕсли;
    Иначе            
        ВходящиеДанные = СоздатьОбъект("СписокЗначений");
        ВходящиеДанные.Установить(РегистрБух, Проводки);
        ВходящиеДанные.Установить("Счет", Счет);
        ВходящиеДанные.Установить("Дата", БухИт.НачДата-1);
        ВыгрузитьПоПравилу(,, ВходящиеДанные,, "ОперацияБух");
    КонецЕсли;
КонецЦикла;
62 Kerk
 
27.11.13
17:36
(53) (54)  Покажи куда и что вставить, что бы отбор сделать хотя бы по наименованию контрагента...

я с кодом 7.7 плохо дружу.
63 Йохохо
 
27.11.13
18:07
этот алгоритм вызывается из ПВД? посмотри это место в конвертации, открой рабочий ert и поправь только отбор на счета.
код то простой
Если ПустоеЗначение(РазделУчета) = 0 Тогда // в этом Если вся выгрузка. по быстрому тут и фильтруй
Лучше добиться чтобы ert мог корректно создавать из конвертации, один раз перенести пол дела, потом еще выверять, догружать и т.п.
64 Kerk
 
27.11.13
18:28
(63) Да, ПВД_ост_РасчетыСПоставщиками_ПередОбработкойПравила

Для мня, к сожалению, код из 7.7 не такой простой.

"открой рабочий ert и поправь только отбор на счета. " - если ты про строку в группе "Правила выгрузки данных", то там я ставлю только 1 галочку "Расчеты с покупателями и заказчиками" и не выгружается.

Перед этим справочники и остальные остатки выгрузились успешно.
65 Kerk
 
27.11.13
18:31
(63) "Если ПустоеЗначение(РазделУчета) = 0 Тогда // в этом Если вся выгрузка. по быстрому тут и фильтруй "

Не понимаю я, как в коде "Если ПустоеЗначение(РазделУчета) = 0" или в коде ниже поставить условия на количество записей остатков(или, как предлагалась ранее, отбор по наименованию).
66 Franchiser
 
гуру
28.11.13
01:12
Навскидку:
Если ТипЗначенияСтр(БухИт.Субконто(2)) = "Справочник" Тогда
                                Если БухИт.Субконто(2).ЭтоГруппа() = 1 Тогда
                                    Продолжить;
                                КонецЕсли;
Если Тип(БухИт.Субконто(2)) = "Справочники.контрагенты" Тогда
Если БухИт.Субконто(2)<>"абвглежз" тогда                                  
Продолжить;
конецесли;
                                КонецЕсли;
                            КонецЕсли;
67 Franchiser
 
гуру
28.11.13
01:27
Прошу прощения, субконто 2 у тебя договор, нужно в субконто 1:
Если ТипЗначенияСтр(БухИт.Субконто(1)) = "Справочник" Тогда
                        Если БухИт.Субконто(1).ЭтоГруппа() = 1 Тогда
                            Продолжить;
                        КонецЕсли;
Если ТипЗначенияСтр(БухИт.Субконто(1)) = "Справочник" Тогда
Если БухИт.Субконто(1).Вид() = "Контрагенты" Тогда
Если БухИт.Субконто(1)<>"абвглежз" тогда                                  
Продолжить;
КонецЕсли; КонецЕсли;
                    КонецЕсли;
68 Franchiser
 
гуру
28.11.13
01:30
+ БухИт.Субконто(1).наименование<>"абвглежз"
69 Franchiser
 
гуру
28.11.13
01:46
Если на нравится выгружать по наименованию, то можно тут же считать контрагентов и выгружать порциями, но по мне так надежнее.
70 Franchiser
 
гуру
28.11.13
01:53
Для понимания: В начале идет цикл по контрагентам (субконто 1) по данным бухитогов потом по договорам (субконто 2).  потом ты попадешь в:
Если ((СуммовойУчет2 = 1) и (СуммовойУчет3 = 0)) или (КоличествоУровней = 2) Тогда
                                Параметры.ПараметрыАлгоритмов.Установить("ТекНомерСубконто", 2);
                                ПолучитьИтогиПоСчету();
                                ДобавитьПроводку();
                            КонецЕсли;
та заполнится таблица поводок, по данным которой по правилам ПКО будут созданы документы ввод начальных остатков по каждому субсчету по разделу Расчеты с покупателями и заказчиками.
71 Бертыш
 
28.11.13
08:31
(0) У меня такая же напасть с ЗИКом
72 Kerk
 
04.12.13
10:31
(66)-(70) Спасибо разобрался с твоей помощью.

Но ошибка похоже в самих правилах, т.к. я делаю выгрузку только по 500 контрагентам (договоров редко где есть больше 1-го), в итоге выгрузка падает на 98137 элементе не дойдя до конца процедуры "ВыгрузитьОстаткиПоСчету".

Сейчас поставлю на 100, хоть выгружать так 2300 контрагентов не собираюсь, но уверен что опять 1с 7.7 упадет.
73 Kerk
 
04.12.13
13:39
(72) Ну хоть по 250 выгружает, и то можно.
74 Kerk
 
04.12.13
18:58
*вырезано цензурой* эта семерка... :(
После выгрузки и закрытия обработки 1cv7.exe потребляет памяти 862 000 KB
После рестарта 64 752 KB.
И что бы выгрузить партиями, надо каждый раз перезапускать 7-ку.
*вырезано цензурой*
75 Kerk
 
04.12.13
18:59
Есть команда ОсвободитьОперативнуюПамять() ???
76 Kerk
 
27.12.13
10:31
Вдруг кому пригодится обход проблемы в (48)

БИ = БазаОле.CreateObject("БухгалтерскиеИтоги");
БИ.ИспользоватьСубконто("Контрагенты"); //,Контр.ТекущийЭлемент(),1,0
БИ.ИспользоватьСубконто("Договоры"); // ,Дог.ТекущийЭлемент(),1,0

БИ.ВыполнитьЗапрос(Дата(2013,01,01),Дата(2013,01,01),"62.1");   // ,,,1,,"С"

БИ.ВыбратьСубконто(1);
Пока БИ.ПолучитьСубконто(1)=1 Цикл

    Контр=БИ.Субконто(1);
    БИ.ВыбратьСубконто(2);
    
    Пока БИ.ПолучитьСубконто(2)=1 Цикл
        Договор=БИ.Субконто(2);
        //Тут делаем все что надо
    КонецЦикла;
КонецЦикла;
77 ЧеловекДуши
 
27.12.13
10:51
(0) Оптимизируй :)
Очищай ТЗ и СЗ...
Не допускай структуру типа ТЗ в ТЗ + Еще много ТЗ... (придется чистить, каждую ТЗ)  :)

При записи XML средствами 1С, т.е. через V7PLUS.DLL. Ты должен понимать, что сеё чудо пишет по сути в памяти, из этого следует, что приложение 32-ух битное ограничено 2-мя Гигабайтами Оперативной Памяти :)

Но есть выход... Можно выгружать через ВК от ромикса, быстро и просто...
http://x-romix.narod.ru/
http://x-romix.narod.ru/OpenXML.rar
...Пример, в архиве...
78 ЧеловекДуши
 
27.12.13
10:52
+(77) При объявлении ТЗ, старайся объявлять Тип у колонки, это экономит место :)
79 zak555
 
27.12.13
10:54
> при выгрузки расчетов с покупателями и заказчиками, 1С 7.7 через 4-5 часов падает с логом

там такие же кривые правила, как в в Тис->УТ
поправь и будет всё летать
80 Kerk
 
27.12.13
11:30
(79) Готов напоить пивом того, кто сможет скорректировать (так чтобы не падало и переносило корректные остатки) стандартные правила переноса остатков из Бух 7.7 в БП 3.0 на 8.3.