|
Ввод остатков по партиям | ☑ | ||
---|---|---|---|---|
0
Novi4ek2015
06.04.15
✎
14:16
|
Добрый день!
Есть запрос который выбирает остатки по партиям. На основании него надо создать документ ввод остатков: и документ оприходования=партия в документе ввода остатков.Запрос работает хорошо,проверенно, но вот в цикле когда перебираю товары, то зацикливается создание документа ввода остатков.Помогите в чем проблема? Для Каждого УзелОрганизация из ДЗОстатки.Строки цикл ДокументВводаОстатков.Организация= УзелОрганизация.Организация; ДокументВводаОстатков.РазделУчета= Перечисления.РазделыУчетаДляВводаОстатков.Товары; сч = 0; для Каждого УзелДокументОприходования из УзелОрганизация.Строки цикл сч = сч + 1; НоваяСтрокаТЧ = ДокументВводаОстатков.МПЗПриобретенные.Добавить(); НоваяСтрокаТЧ.НомерСтрокиТЧ = сч; НоваяСтрокаТЧ.Номенклатура = УзелДокументОприходования.Номенклатура; НоваяСтрокаТЧ.Партия = УзелДокументОприходования.ДокументОприходования; НоваяСтрокаТЧ.РасчетныйДокумент = УзелДокументОприходования.ДокументОприходования; НоваяСтрокаТЧ.СтатусыОплатыРасходовУСН = Перечисления.СтатусыРасходовУСН.НеСписано; НоваяСтрокаТЧ.ОтражениеВУСН = Перечисления.ОтражениеВУСН.Принимаются; НоваяСтрокаТЧ.Валюта = Константы.ВалютаРегламентированногоУчета.Получить(); НоваяСтрокаТЧ.Склад = УзелДокументОприходования.Склад; НоваяСтрокаТЧ.Оплачен = истина; НоваяСтрокаТЧ.Количество = УзелДокументОприходования.Количество; НоваяСтрокаТЧ.Сумма = УзелДокументОприходования.Стоимость; НоваяСтрокаТЧ.СуммаНУ = УзелДокументОприходования.Стоимость; НоваяСтрокаТЧ.ВалютнаяСумма = УзелДокументОприходования.Стоимость; КонецЦикла; ДокументВводаОстатков.ПолучитьФорму().Открыть(); КонецЦикла; |
|||
1
vicof
06.04.15
✎
14:18
|
ну тут много думать не надо, по-моему
|
|||
2
vicof
06.04.15
✎
14:18
|
что же нужно вынести из цикла?
|
|||
3
Славен
06.04.15
✎
14:19
|
а где ДокументВводаОстатков.создатьДокумент()?
|
|||
4
vicof
06.04.15
✎
14:19
|
(3) Это уже следующий вопрос
|
|||
5
Novi4ek2015
06.04.15
✎
14:20
|
ДокументВводаОстатков = Документы.ВводНачальныхОстатков.СоздатьДокумент();
ДокументВводаОстатков.Дата= ДатаВводаОстатков; ДокументВводаОстатков.Организация= УзелОрганизация.Организация; |
|||
6
Novi4ek2015
06.04.15
✎
14:20
|
Есть, просто случайно не скопировал
|
|||
7
Novi4ek2015
06.04.15
✎
14:22
|
Я не знаю в чем проблема, все пробовал
|
|||
8
vicof
06.04.15
✎
14:24
|
ну если форма открывается 25 раз, наверное, нужно ее открытие (7) за цикл вынести, не?
|
|||
9
Славен
06.04.15
✎
14:30
|
(8) у него создается несколько документов, и соответственно несколько форм
|
|||
10
Novi4ek2015
06.04.15
✎
14:31
|
у меня должно создаться несколько документов,сколько организаций,столько и документов.А если вынести за цикл, то создается пустой документ, только шапка заполнена
|
|||
11
Славен
06.04.15
✎
14:31
|
(5) у тебя этот код где? после Для Каждого УзелОрганизация из ДЗОстатки.Строки цикл ?
|
|||
12
Novi4ek2015
06.04.15
✎
14:32
|
Что то ни так в этом цикле:
сч = 0; для Каждого УзелДокументОприходования из УзелОрганизация.Строки цикл сч = сч + 1; НоваяСтрокаТЧ = ДокументВводаОстатков.МПЗПриобретенные.Добавить(); НоваяСтрокаТЧ.НомерСтрокиТЧ = сч; НоваяСтрокаТЧ.Номенклатура = УзелДокументОприходования.Номенклатура; НоваяСтрокаТЧ.Партия = УзелДокументОприходования.ДокументОприходования; НоваяСтрокаТЧ.РасчетныйДокумент = УзелДокументОприходования.ДокументОприходования; НоваяСтрокаТЧ.СтатусыОплатыРасходовУСН = Перечисления.СтатусыРасходовУСН.НеСписано; НоваяСтрокаТЧ.ОтражениеВУСН = Перечисления.ОтражениеВУСН.Принимаются; НоваяСтрокаТЧ.Валюта = Константы.ВалютаРегламентированногоУчета.Получить(); НоваяСтрокаТЧ.Склад = УзелДокументОприходования.Склад; НоваяСтрокаТЧ.Оплачен = истина; НоваяСтрокаТЧ.Количество = УзелДокументОприходования.Количество; НоваяСтрокаТЧ.Сумма = УзелДокументОприходования.Стоимость; НоваяСтрокаТЧ.СуммаНУ = УзелДокументОприходования.Стоимость; НоваяСтрокаТЧ.ВалютнаяСумма = УзелДокументОприходования.Стоимость; КонецЦикла; |
|||
13
Славен
06.04.15
✎
14:34
|
(12) все норм
|
|||
14
Novi4ek2015
06.04.15
✎
14:35
|
Но почему то не работает(
|
|||
15
Славен
06.04.15
✎
14:35
|
на (11)ответь
|
|||
16
Славен
06.04.15
✎
14:36
|
и вообще покажи код от запроса до конца
|
|||
17
Novi4ek2015
06.04.15
✎
14:37
|
Этот код внутри цикла УзелОрганизация из ДЗОстатки.Строки.
|
|||
18
Славен
06.04.15
✎
14:38
|
(17) весь код из 0 вызываешь в рекурсии?
|
|||
19
Novi4ek2015
06.04.15
✎
14:39
|
нет,это отдельный код
|
|||
20
Славен
06.04.15
✎
14:39
|
(17) тогда цикл нормальный, и первый и второй вложенный
|
|||
21
Славен
06.04.15
✎
14:40
|
ищи ошибку в другом месте
|
|||
22
Novi4ek2015
06.04.15
✎
14:45
|
для каждого ВнешУзелОрганизация из ВнешДЗЗапрос.Строки цикл
УзелОрганизация = ДЗОстатки.Строки.Добавить(); УзелОрганизация.Организация = ПолучитьСоответствиеПоКлючу(УзелДляСоответствий,Подключение.ЗначениеВСТрокуВнутр(ВнешУзелОрганизация.Организация)); для каждого ВнешУзелДокументОприходования из ВнешУзелОрганизация.строки цикл УзелДокументОприходования = УзелОрганизация.Строки.Добавить(); УзелДокументОприходования.Организация =ПолучитьСоответствиеПоКлючу(УзелДляСоответствий,Подключение.ЗначениеВСТрокуВнутр(ВнешУзелДокументОприходования.Организация)); УзелДокументОприходования.Склад = ПолучитьСоответствиеПоКлючу(УзелДляСоответствий,Подключение.ЗначениеВСТрокуВнутр(ВнешУзелДокументОприходования.Склад)); УзелДокументОприходования.ДокументОприходования =ПолучитьСоответствиеПоКлючу(УзелДляСоответствий,Подключение.ЗначениеВСТрокуВнутр(ВнешУзелДокументОприходования.ДокументОприходования)); УзелДокументОприходования.Номенклатура = ПолучитьСоответствиеПоКлючу(УзелДляСоответствий,Подключение.ЗначениеВСТрокуВнутр(ВнешУзелДокументОприходования.Номенклатура)); УзелДокументОприходования.Количество = ВнешУзелДокументОприходования.Количество; УзелДокументОприходования.Стоимость= ВнешУзелДокументОприходования.Стоимость; КонецЦикла; КонецЦикла; |
|||
23
Novi4ek2015
06.04.15
✎
14:45
|
Это первый цикл.Потом идет что я первый раз выкладывал
|
|||
24
Славен
06.04.15
✎
14:51
|
(23) а как твоя процедура/функция называется?
|
|||
25
Славен
06.04.15
✎
14:51
|
не ПолучитьСоответствиеПоКлючу случайно?
|
|||
26
Novi4ek2015
06.04.15
✎
14:54
|
ПолучитьСоответствиеПоКлючу
|
|||
27
Славен
06.04.15
✎
14:55
|
(26) вот батенька не в цикле дело а в том что ты бесконечную рекурсию написал, без выхода из нее. Ты вызываешь из процедуры эту же процедуру и у тебя постоянно повторяется условие при котором вызов продолжается, т.е. никогда не срабатывает выход из неё
|
|||
28
Novi4ek2015
06.04.15
✎
14:59
|
Спасибо,попробую исправить
|
|||
29
Novi4ek2015
06.04.15
✎
16:37
|
я уже не знаю,что делать((Помогите с этим запросом:
ВнешЗапрос.Текст = " |ВЫБРАТЬ | ТоварыОрганизацийОстатки.Организация КАК Организация, | ТоварыОрганизацийОстатки.Номенклатура КАК Номенклатура, | ТоварыОрганизацийОстатки.Склад КАК Склад, | ПартииТоваровНаСкладахОстатки.ДокументОприходования КАК Партия, | ПартииТоваровНаСкладахОстатки.СтоимостьОстаток КАК Стоимость, | ПартииТоваровНаСкладахОстатки.КоличествоОстаток КАК Количество |ИЗ | РегистрНакопления.ПартииТоваровНаСкладах.Остатки(&ДатаОстатков, ) КАК ПартииТоваровНаСкладахОстатки | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыОрганизаций.Остатки(&ДатаОстатков, ) КАК ТоварыОрганизацийОстатки | ПО ПартииТоваровНаСкладахОстатки.Номенклатура = ТоварыОрганизацийОстатки.Номенклатура | И ПартииТоваровНаСкладахОстатки.Склад = ТоварыОрганизацийОстатки.Склад |ГДЕ | ПартииТоваровНаСкладахОстатки.КоличествоОстаток > 0 | |СГРУППИРОВАТЬ ПО | ТоварыОрганизацийОстатки.Организация, | ТоварыОрганизацийОстатки.Склад, | ПартииТоваровНаСкладахОстатки.ДокументОприходования, | ТоварыОрганизацийОстатки.Номенклатура, | ПартииТоваровНаСкладахОстатки.СтоимостьОстаток, | ПартииТоваровНаСкладахОстатки.КоличествоОстаток | |Итоги ПО | Организация"; Состояние("Выполняется внешний запрос..."); ВнешДЗЗапрос = ВнешЗапрос.выполнить().Выгрузить(Подключение.ОбходРезультатаЗапроса.ПоГруппировкам); ДЗОстатки = Новый ДеревоЗначений; ДЗОстатки.Колонки.Добавить("Организация"); ДЗОстатки.Колонки.Добавить("Склад"); ДЗОстатки.Колонки.Добавить("Партия"); ДЗОстатки.Колонки.Добавить("Номенклатура"); ДЗОстатки.Колонки.Добавить("Количество"); ДЗОстатки.Колонки.Добавить("Стоимость"); Состояние("Поиск соответствий..."); для каждого ВнешУзелОрганизация из ВнешДЗЗапрос.Строки цикл УзелОрганизация = ДЗОстатки.Строки.Добавить(); УзелОрганизация.Организация = ПолучитьСоответствиеПоКлючу(УзелДляСоответствий,Подключение.ЗначениеВСТрокуВнутр(ВнешУзелОрганизация.Организация)); для Каждого ВнешУзелПартия из ВнешУзелОрганизация.строки цикл УзелПартия = УзелОрганизация.Строки.Добавить(); УзелПартия.Организация = ПолучитьСоответствиеПоКлючу(УзелДляСоответствий,Подключение.ЗначениеВСТрокуВнутр(ВнешУзелПартия.Организация)); УзелПартия.Склад = ПолучитьСоответствиеПоКлючу(УзелДляСоответствий,Подключение.ЗначениеВСТрокуВнутр(ВнешУзелПартия.Склад)); УзелПартия.Партия = ПолучитьСоответствиеПоКлючу(УзелДляСоответствий,Подключение.ЗначениеВСТрокуВнутр(ВнешУзелПартия.Партия)); УзелПартия.Номенклатура = ПолучитьСоответствиеПоКлючу(УзелДляСоответствий,Подключение.ЗначениеВСТрокуВнутр(ВнешУзелПартия.Номенклатура)); УзелПартия.Количество = ВнешУзелПартия.Количество; УзелПартия.Стоимость = ВнешУзелПартия.Стоимость; КонецЦикла; КонецЦикла; Для Каждого УзелОрганизация из ДЗОстатки.Строки цикл ДокументВводаОстатков = Документы.ВводНачальныхОстатков.СоздатьДокумент(); ДокументВводаОстатков.Дата= ДатаВводаОстатков; ДокументВводаОстатков.Организация= УзелОрганизация.Организация; ДокументВводаОстатков.РазделУчета= Перечисления.РазделыУчетаДляВводаОстатков.Товары; сч = 0; для Каждого УзелПартия из УзелОрганизация.Строки цикл сч = сч + 1; НоваяСтрокаТЧ = ДокументВводаОстатков.МПЗПриобретенные.Добавить(); НоваяСтрокаТЧ.НомерСтрокиТЧ = сч; НоваяСтрокаТЧ.Номенклатура = УзелПартия.Номенклатура; НоваяСтрокаТЧ.Партия = УзелПартия.Партия; НоваяСтрокаТЧ.РасчетныйДокумент = УзелПартия.Партия; НоваяСтрокаТЧ.СтатусыОплатыРасходовУСН = Перечисления.СтатусыРасходовУСН.НеСписано; НоваяСтрокаТЧ.ОтражениеВУСН = Перечисления.ОтражениеВУСН.Принимаются; НоваяСтрокаТЧ.Валюта = Константы.ВалютаРегламентированногоУчета.Получить(); НоваяСтрокаТЧ.Склад = УзелПартия.Склад; НоваяСтрокаТЧ.Оплачен = истина; НоваяСтрокаТЧ.Количество = УзелПартия.Количество; НоваяСтрокаТЧ.Сумма = УзелПартия.Стоимость; НоваяСтрокаТЧ.СуммаНУ = УзелПартия.Стоимость; НоваяСтрокаТЧ.ВалютнаяСумма = УзелПартия.Стоимость; КонецЦикла; ДокументВводаОстатков.ПолучитьФорму().Открыть(); КонецЦикла; |
|||
30
Novi4ek2015
06.04.15
✎
16:38
|
Запрос работает правильно, создается документ ввод остатков, шапка документа заполняется,но сам документ или пустой или один товар заполняет.
|
|||
31
Славен
06.04.15
✎
16:39
|
(30) весь текст процедуры приведи
|
|||
32
Novi4ek2015
06.04.15
✎
16:40
|
Я привел
|
|||
33
Славен
06.04.15
✎
16:42
|
вот это
ДЗОстатки = Новый ДеревоЗначений; ДЗОстатки.Колонки.Добавить("Организация"); ДЗОстатки.Колонки.Добавить("Склад"); ДЗОстатки.Колонки.Добавить("Партия"); ДЗОстатки.Колонки.Добавить("Номенклатура"); ДЗОстатки.Колонки.Добавить("Количество"); ДЗОстатки.Колонки.Добавить("Стоимость"); Состояние("Поиск соответствий..."); для каждого ВнешУзелОрганизация из ВнешДЗЗапрос.Строки цикл УзелОрганизация = ДЗОстатки.Строки.Добавить(); УзелОрганизация.Организация = ПолучитьСоответствиеПоКлючу(УзелДляСоответствий,Подключение.ЗначениеВСТрокуВнутр(ВнешУзелОрганизация.Организация)); для Каждого ВнешУзелПартия из ВнешУзелОрганизация.строки цикл УзелПартия = УзелОрганизация.Строки.Добавить(); УзелПартия.Организация = ПолучитьСоответствиеПоКлючу(УзелДляСоответствий,Подключение.ЗначениеВСТрокуВнутр(ВнешУзелПартия.Организация)); УзелПартия.Склад = ПолучитьСоответствиеПоКлючу(УзелДляСоответствий,Подключение.ЗначениеВСТрокуВнутр(ВнешУзелПартия.Склад)); УзелПартия.Партия = ПолучитьСоответствиеПоКлючу(УзелДляСоответствий,Подключение.ЗначениеВСТрокуВнутр(ВнешУзелПартия.Партия)); УзелПартия.Номенклатура = ПолучитьСоответствиеПоКлючу(УзелДляСоответствий,Подключение.ЗначениеВСТрокуВнутр(ВнешУзелПартия.Номенклатура)); УзелПартия.Количество = ВнешУзелПартия.Количество; УзелПартия.Стоимость = ВнешУзелПартия.Стоимость; КонецЦикла; КонецЦикла; Убирай нафиг |
|||
34
Славен
06.04.15
✎
16:45
|
В запросе сделай Сгруппировать по Организация
ВнешДЗЗапрос = ВнешЗапрос.выполнить().Выгрузить(Подключение.ОбходРезультатаЗапроса.ПоГруппировкам); пока ВнешДЗЗапрос.Следующий() Цикл ДокументВводаОстатков = Документы.ВводНачальныхОстатков.СоздатьДокумент(); ДокументВводаОстатков.Дата= ДатаВводаОстатков; ДокументВводаОстатков.Организация= Выборка.Организация; ДокументВводаОстатков.РазделУчета= Перечисления.РазделыУчетаДляВводаОстатков.Товары; Выборка = ВнешДЗЗапрос.Выбрать() Пока Выборка.Следующий() цикл НоваяСтрокаТЧ = ДокументВводаОстатков.МПЗПриобретенные.Добавить(); НоваяСтрокаТЧ.НомерСтрокиТЧ = сч; НоваяСтрокаТЧ.Номенклатура = Выборка.Номенклатура; НоваяСтрокаТЧ.Партия = Выборка.Партия; НоваяСтрокаТЧ.РасчетныйДокумент = Выборка.Партия; .... и т.д. КонецЦикла КонецЦикла |
|||
35
Славен
06.04.15
✎
16:46
|
все, никаких рекурсий. все есть в выборке
|
|||
36
Novi4ek2015
06.04.15
✎
16:47
|
Вот сейчас по коду который я сбросил,создается документ ввод остатков и заполняется весь.Но теперь только не заполняется документ оприходования.
|
|||
37
Славен
06.04.15
✎
16:48
|
+(34) про сгруппировать по организация -ненадо, я погорячился, все остальное в силе
|
|||
38
Славен
06.04.15
✎
16:49
|
вот нафига ты сначала дерево строишь по данным запроса, а потом тут же документ заполняешь из этого дерева, если дерево ты строишь по данным запроса то почему сразу не создать и не заполнить по запросу документ
|
|||
39
Славен
06.04.15
✎
16:50
|
ааа ты же ком подключение вояешь, хотя и по нему можно без дерева
|
|||
40
Novi4ek2015
06.04.15
✎
16:52
|
Да я уже и так пробовал и так.Сейчас хотя бы все заполняется,кроме документа партии, а это очень важно
|
|||
41
KLOUN1091
06.04.15
✎
20:57
|
(40) Получилось заполнить документ партии?Подскажите как?
У меня такая же проблема, только задача конечно по проще)) |
|||
42
Славен
07.04.15
✎
09:42
|
А тебе разве не новый документ партии надо создавать, с типом Партия (ручной учет) (в конфигураторе Партия) старые то документы не должны переноситься, или ты их переносишь не проведенными?
|
|||
43
Novi4ek2015
07.04.15
✎
10:46
|
(42) Надо, но не получается.В цикле прописываю:
НоваяСтрокаТЧ.Партия= Документы.Партия.СоздатьДокумент() Ничего не создается((( |
|||
44
Novi4ek2015
07.04.15
✎
10:46
|
(41) Как получится,напишу)
|
|||
45
Славен
07.04.15
✎
11:31
|
(43) А ты его потом записываешь?
|
|||
46
Славен
07.04.15
✎
11:32
|
И не НоваяСтрокаТЧ.Партия= Документы.Партия.СоздатьДокумент()
А ДокПартии = Документы.Партия.СоздатьДокумент(); ДокПартии. .... заполняешь реквизитами контрагента и договора ДокПартии.Записать(); НоваяСтрокаТЧ.Партия = ДокПартии.ссылка; |
|||
47
Novi4ek2015
07.04.15
✎
12:02
|
ДокПартии = Документы.Партия.СоздатьДокумент();
ДокПартии.Организация = УзелПартия.Организация; ДокПартии.Контрагент= УзелПартия.Контрагент; ДокПартии.ДоговорКонтрагента = УзелПартия.ДоговорКонтрагента; ДокПартии.Записать(); НоваяСтрокаТЧ.Партия = ДокПартии.ссылка Не работает, не видит данные документа Оприходования. |
|||
48
Славен
07.04.15
✎
13:34
|
А где здесь оприходование?
|
|||
49
Novi4ek2015
07.04.15
✎
13:45
|
ДокПартии = Документы.Партия.СоздатьДокумент();
ДокПартии.Организация = УзелДокументОприходования.ПартииТоваровНаСкладахОстатки.ДокументОприходования.Организация; ДокПартии.Дата= УзелДокументОприходования.ПартииТоваровНаСкладахОстатки.ДокументОприходования.Дата; ДокПартии.Контрагент= УзелДокументОприходования.ПартииТоваровНаСкладахОстатки.ДокументОприходования.Контрагент; ДокПартии.ДоговорКонтрагента = УзелДокументОприходования.ПартииТоваровНаСкладахОстатки.ДокументОприходования.ДоговорКонтрагента; ДокПартии.Записать(); НоваяСтрокаТЧ.Партия = ДокПартии.ссылка; |
|||
50
Novi4ek2015
07.04.15
✎
13:47
|
Точнее:
ДокПартии = Документы.Партия.СоздатьДокумент(); ДокПартии.Организация = УзелДокументОприходования.ДокументОприходования.Организация; ДокПартии.Дата= УзелДокументОприходования.ДокументОприходования.Дата; ДокПартии.Контрагент= УзелДокументОприходования.ДокументОприходования.Контрагент; ДокПартии.ДоговорКонтрагента = УзелДокументОприходования.ДокументОприходования.ДоговорКонтрагента; ДокПартии.Записать(); НоваяСтрокаТЧ.Партия = ДокПартии.ссылка; |
|||
51
Novi4ek2015
07.04.15
✎
13:47
|
Но все равно не работает.
|
|||
52
Славен
07.04.15
✎
13:52
|
отладчик что показывает на этих строках? Какие типы, какие значения
|
|||
53
Novi4ek2015
07.04.15
✎
14:04
|
(52) Выдает ошибку:
Поле объекта не обнаружено (Контрагент),(Дата). Если указать только одну строчку: ДокПартии.Дата= ТекущаДата(); То создает для каждой номенклатуры документ партия с одной и той же датой. |
|||
54
Славен
07.04.15
✎
15:09
|
(53) а тебе при вводе остатков не похер какая дата в документе партии (главное до ввода остатков)? Но для каждой номенклатуры свой документ партии это конечно сурово, если у тебя конечно номенклатура не по 1 шт приходит
|
|||
55
Славен
07.04.15
✎
15:10
|
(53) а УзелДокументОприходования.ДокументОприходования что выводит в отладчике?
|
|||
56
Novi4ek2015
07.04.15
✎
15:14
|
(54) При списании товара, не правильно будет списываться себестоимость,если они все через один документ, или через разные, но дата одинаковая. Списывается по ФИФО, а если они по одному времени то берется среднее автоматически, а мне надо по партиям, вот и мучаюсь.
Через УзелДокументОприходования.ДокументОприходования не работает. Работает теперь как было: ДокПартии = Документы.Партия.СоздатьДокумент(); ДокПартии.Организация = ВнешУзелПартия.Организация; ДокПартии.Дата= ТекущаяДата(); //ДокПартии.Контрагент= УзелПартия.Партия.Контрагент; // ДокПартии.ДоговорКонтрагента = УзелПартия.Партия.ДоговорКонтрагента; ДокПартии.Записать(); НоваяСтрокаТЧ.Партия = ДокПартии.ссылка; |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |