Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 ноя 2024, 22:28

Обработка с черепашьей скоростью....

Автор Nail2010, 24 мар 2011, 09:54

0 Пользователей и 2 гостей просматривают эту тему.

Klyacksa

Эм, а зачем в запросе строка:
|    Документ.ВводНачальныхОстатков КАК ВводНачальныхОстатков,


Все-таки, рекомендую в запросе выкидывать не проведенные документы.
xxx: Спасибо! Я бы загуглил, но ты интересней. Материшься. Злишься. Послать можешь...

Мысль - это оргазм мозга. Кто способен его испытать - получают истинное наслаждение, остальным приходится имитировать

Klyacksa

Ой, и еще... А зачем в начале данные запросом выбираются, а потом еще отбор:
Искомый=Документы.ВводНачальныхОстатков.Выбрать(НачПериода,КонПериода);
:xfbnsdfb:
xxx: Спасибо! Я бы загуглил, но ты интересней. Материшься. Злишься. Послать можешь...

Мысль - это оргазм мозга. Кто способен его испытать - получают истинное наслаждение, остальным приходится имитировать

Nail2010

|    Документ.ВводНачальныхОстатков КАК ВводНачальныхОстатков, -
это мой косяк, не выкинул сразу - ведь в запросе выбирается из совсем другого документа.
А
Искомый=Документы.ВводНачальныхОстатков.Выбрать(НачПериода,КонПериода)

Эта выборка выбирает именно из Ввода остатков, а запрос - из инвентаризации.

не совсем понял - для чего выкидывать непроведенные документы? Что это дает?
Ведь создаваемый (или обрабатываемый) док. Ввод остатков - получается сам по себе непроведенный, равно как и создаваемые ДокирасчетовСКонтрагентами. Это может как то повредить базе?


Klyacksa

Да нет, повредить не может. Просто не очень хорошо - если документ не проведен, считается, что он как бы не в работе, и обычно их в рассмотрение не берут.

С Выборкой. Оно точно работает? Вот этот код правильно отрабатывается:
СтрокаТабЧасти.СчетУчета=Выборка4.СчетУчетаБУ;
            СтрокаТабЧасти.НомерСтрокиТЧ=Выборка4.НомерСтроки;
???

Не очень поняла, что мы тащим из Документа Инвентаризация товаров. Какие нам нужны оттуда строки?
xxx: Спасибо! Я бы загуглил, но ты интересней. Материшься. Злишься. Послать можешь...

Мысль - это оргазм мозга. Кто способен его испытать - получают истинное наслаждение, остальным приходится имитировать

Nail2010

Счет Учета БУ тащит Счет Товаров - 41.01; НомерСтроки - соответственно номер порядковый.
А почему у тебя сомнения?

Klyacksa

Ну вот как получается.
1. Мы берем все строки таб.части Товары дока Инвентаризация товаров. (запросом)
2. Получаем выборку.
3. Но по Выборке-то нужно передвигаться. Иначе она стОит все-время на одной позиции. И Выборка4.НомерСтроки - должно быть одно и то же значение.

И, плюс, не очень понимаю, какую именно строку из Инвентаризации мы хотим получить. Строку по нашему текущему товару?
xxx: Спасибо! Я бы загуглил, но ты интересней. Материшься. Злишься. Послать можешь...

Мысль - это оргазм мозга. Кто способен его испытать - получают истинное наслаждение, остальным приходится имитировать

Nail2010

Так, я понял.
Просто раньше половина таблицы заполнялось через конвертацию, а половина - заполнял запростом. Неудобно.
Поэтому, с учетом замечаний - окончательный вариант:

Процедура КнопкаВыполнитьНажатие(Кнопка)
ИзмДок.Очистить();
Запрос4=Новый Запрос;
запрос4.Текст="ВЫБРАТЬ
              | ИнвентаризацияТоваровНаСкладеТовары.НомерСтроки,
              | ИнвентаризацияТоваровНаСкладеТовары.СчетУчетаБУ,
              | ИнвентаризацияТоваровНаСкладеТовары.Количество,
              | ИнвентаризацияТоваровНаСкладеТовары.Номенклатура,
              | ИнвентаризацияТоваровНаСкладеТовары.Сумма,
              | ИнвентаризацияТоваровНаСкладеТовары.Цена
              |ИЗ
              | Документ.ИнвентаризацияТоваровНаСкладе.Товары КАК ИнвентаризацияТоваровНаСкладеТовары";
Выборка4=Запрос4.Выполнить().Выбрать();
КонтрагентДок=Справочники.Контрагенты.НайтиПоКоду("Н0053    ");
КонтрагентДок2=Справочники.Контрагенты.НайтиПоКоду("00031");
ИскСклад=Справочники.Склады.НайтиПоНаименованию("Главный");
ИскВалюта=Справочники.Валюты.НайтиПоКоду(810);
ИскСтатус=перечисления.СтатусыРасходовУСН.НеСписано;
ИскОтражение=Перечисления.ОтражениеВУСН.Принимаются;
Искомый=Документы.ВводНачальныхОстатков.СоздатьДокумент();
Пока Выборка4.Следующий() Цикл;
Искомый.РазделУчета=перечисления.РазделыУчетаДляВводаОстатков.Товары;
СтрокаТабЧасти=Искомый.МПЗПриобретенные.Добавить();
СсылкаДок=Документы.ДокументРасчетовСКонтрагентом.СоздатьДокумент();
СсылкаДок.Дата=Искомый.Дата;
    СсылкаДок.Организация=Искомый.Организация;
Если СтрокаТабЧасти.Номенклатура.Код="Н0000000005" Тогда
СсылкаДок.Контрагент=КонтрагентДок;
Иначе
СсылкаДок.Контрагент=КонтрагентДок2;
КонецЕсли;
СсылкаДок.Записать();
СтрокаТабЧасти.Партия=СсылкаДок.Ссылка;
СтрокатабЧасти.Валюта=ИскВалюта;
СтрокаТабЧасти.СчетУчета=Выборка4.СчетУчетаБУ;
СтрокаТабЧасти.НомерСтрокиТЧ=Выборка4.НомерСтроки;
СтрокаТабЧасти.Номенклатура=Выборка4.Номенклатура;
СтрокаТабЧасти.Количество=Выборка4.Количество;
СтрокаТабЧасти.Сумма=Выборка4.Сумма;
СтрокаТабЧасти.ВалютнаяСумма=СтрокаТабЧасти.Сумма;
СтрокаТабЧасти.Склад=ИскСклад;
СтрокаТабЧасти.СтатусыОплатыРасходовУСН=ИскСтатус;
СтрокаТабЧасти.ОтражениеВУСН=ИскОтражение;
Сообщить("Документ новый"+СсылкаДок.Ссылка+"записан!");
ОбработкаПрерыванияПользователя();
КонецЦикла;
Искомый.Записать();
КонецПроцедуры

Klyacksa

Что-то алгоритм меняется от поста к посту. Никак не пойму исходную задачу.
Теперь получается, что мы
1. Создаем документ ВводНачальныхОстатков
2. берем ВСЕ строки ВСЕХ документов ИнвентаризацияТоваров, по ним добавляем в таб.часть Ввода Начальных Остатков по строке
3. И еще по каждой строке создаем по документу ДокументРасчетовСКонтрагентом.

p.s. кстати, пока не записали новый документ ВводНачальныхОстатков, следующая строка отработает криво:
СсылкаДок.Дата=Искомый.Дата;
xxx: Спасибо! Я бы загуглил, но ты интересней. Материшься. Злишься. Послать можешь...

Мысль - это оргазм мозга. Кто способен его испытать - получают истинное наслаждение, остальным приходится имитировать

Nail2010

Да, все верно. Дата заменил на ТекущаяДата(); а предыдущие алгоритмы другие, потому что просто пытался сделать половинчато. а не цело.
А задача именно такая - создать новый Док Ввод Остатков на основании инвентаризации на складе; при создании каждого элемента табчасти Ввода - записывается новый Док. расчетов с Контрагентами(т.е Строка табЧасти=Док.РасчетыСКонтрагентами.Ссылка).

Klyacksa

А ты уверен? что не нужно отбор по документам Инвентаризации делать?
А то через год он снова возьмет ВСЕ доки Инвентаризации, включая те, которые в этом году уже отработали.
xxx: Спасибо! Я бы загуглил, но ты интересней. Материшься. Злишься. Послать можешь...

Мысль - это оргазм мозга. Кто способен его испытать - получают истинное наслаждение, остальным приходится имитировать

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск