Имя: Пароль:
1C
1С v8
Разбить остатки на несколько документов
0 Rumpil
 
20.02.12
16:03
Есть справочник Номенклатура с 45 тысячами строк, нужно оприходовать товар, но в один документ Оприходование пихнуть все товары не получатся - документ элементарно не проводится. Хочу разбить его на несколько документов по 5 тысяч, скажем. Как это можно сделать, вот код:

ДокОбъект                                  = Документы.ОприходованиеТоваров.СоздатьДокумент();
   ДокОбъект.ОтражатьВУправленческомУчете  = Истина;
   ДокОбъект.Дата                          = ТекущаяДата();
   ДокОбъект.Организация                    = УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(ПараметрыСеанса.ТекущийПользователь, "ОсновнаяОрганизация");
   ДокОбъект.Склад                          = Склад;
   ДокОбъект.Подразделение                = УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(ПараметрыСеанса.ТекущийПользователь, "ОсновноеПодразделение");
   ДокОбъект.Ответственный                = УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(ПараметрыСеанса.ТекущийПользователь, "ОсновнойОтветственный");            
   
   Пакет = Справочники.ВидыНоменклатуры.ПАКЕТ;
   Юните = Справочники.ВидыНоменклатуры.ЮНИТЕ;
   ЕдиницаИзмерения = Справочники.ЕдиницыИзмерения.НайтиПоНаименованию("əd");

   Запрос = Новый Запрос;
       Запрос.Текст =
       "ВЫБРАТЬ
       |    Номенклатура.Ссылка
       |ИЗ
       |    Справочник.Номенклатура КАК Номенклатура
       |ГДЕ
       |    Номенклатура.ВидНоменклатуры <> &Пакет
       |    И Номенклатура.ЭтоГруппа = ЛОЖЬ
       |    И Номенклатура.ВидНоменклатуры <> &Юните";
       Запрос.УстановитьПараметр("Пакет", Пакет);
       Запрос.УстановитьПараметр("Юните", Юните);
       
       Результат = Запрос.Выполнить();
       Выборка = Результат.Выбрать();
       
       
       
       Пока Выборка.Следующий() Цикл        
           СлЧисло = 0;
           Товар = Выборка.Ссылка;
           ГСЧ = Новый ГенераторСлучайныхЧисел();
           СлЧисло = ГСЧ.СлучайноеЧисло(1, 10);

           НоваяСтрока                      = ДокОбъект.Товары.Добавить();
           НоваяСтрока.Номенклатура          = Товар;
           НоваяСтрока.ЕдиницаИзмерения    = ЕдиницаИзмерения;
           НоваяСтрока.Количество              = СлЧисло;
           //НоваяСтрока.Сумма = 0;
           НоваяСтрока.Цена = 1;
           НоваяСТрока.Сумма = НоваяСтрока.Количество*НоваяСтрока.Цена;
           //Сообщить("Оприходован товар " + Товар + " в количестве " + СлЧисло);
           
       КонецЦикла;

       ДокОбъект.Записать(РежимЗаписиДокумента.Запись);
1 Rumpil
 
20.02.12
16:04
Если поставить счетчик и сравнивать кратность значения, то как перебрасывать на новый документ след. товары ?
2 Fish
 
20.02.12
16:06
ГСЧ = Новый ГенераторСлучайныхЧисел();
СлЧисло = ГСЧ.СлучайноеЧисло(1, 10);
....
НоваяСтрока.Количество = СлЧисло;
....


Это пять :))))
3 Rumpil
 
20.02.12
16:06
(2) why? ))
4 Rumpil
 
20.02.12
16:07
база тестовая просто готовится, реальных остатков пока нет, нужно ее заполнить случайными остатками, что просто поработать в тестовом режиме пару дней
5 zak555
 
20.02.12
16:07
(2) бу га га
6 Капитан О
 
20.02.12
16:08
предлагаю номенклатуру тоже выбирать с помощью ГСЧ
7 Rumpil
 
20.02.12
16:08
(6) хе, не получится, остатки должны быть по всей номенклатуре, а вот какие именно остатки непринципиально
8 hhhh
 
20.02.12
16:10
(7) вручную же элементарно можно. Копируешь документ, удаляешь все строки начиная с 5001-й, проводишь. Потом копируешь второй раз, удаляешь строки с 1-й по 5000-ю и после 10001-й, снова проводишь. И так 9 раз. Эта операция займет у тебя максимум 10 минут. А программно ты будешь писать 2 дня? Оно тебе надо? Чего ты паришься?
9 Ненавижу 1С
 
гуру
20.02.12
16:10
(7) если не принципиально, то почему не по порядку?
10 zak555
 
20.02.12
16:11
вынести создание дока в функцию с возращение ссылки на него

использовать счётчик+транзакции+остаток от деления (% ) и тогда записывать
11 Rumpil
 
20.02.12
16:12
ну я так и подумал как (10) предлагает сделать. Думал может еще чего.
12 Rumpil
 
20.02.12
16:12
(9) по порядку это как ? ПЕРВЫЕ сколько то выбрать ?
13 Капитан О
 
20.02.12
16:13
был у меня как-то документ установки цен на 80 КПозиций. и ничего, проводился..
14 ssh2006
 
20.02.12
16:15
В 8.1 насколько помню, 99999 ограничение на число строк в ТЧ
15 hhhh
 
20.02.12
16:16
(13) видимо обработку проведения тоже ТС писал. И тоже там партии списываются по методу ГСЧ.
16 Rumpil
 
20.02.12
16:19
ПРи проведении документа с 45 тысячами строк пишет Недостаточно памяти при 8 гигах
17 ssh2006
 
20.02.12
16:21
(16) какая версия платформы?
18 Rumpil
 
20.02.12
16:21
8.1.15.14
19 Rumpil
 
20.02.12
16:31
как бы все, сделала дико извращенски