|
Перебор табличных частей | ☑ | ||
---|---|---|---|---|
0
Wefast
30.07.15
✎
16:57
|
Есть обработка. В ней 12 табличных частей
MOE1A, MOE1B,MOE1C, MOE1D, MOE2A, MOE2B, MOE2C, MOE2D, MOE3A, MOE3B, MOE3C, MOE3D, MOE4A, MOE4B, MOE4C, MOE4D Как мне их перебрать в цикле? Процедура СоздатьПеремещение(); Массивчик = Новый Массив; Массивчик.Добавить("1A"); Массивчик.Добавить("1B"); Массивчик.Добавить("1C"); Массивчик.Добавить("1D"); Массивчик.Добавить("2A"); Массивчик.Добавить("2B"); Массивчик.Добавить("2C"); Массивчик.Добавить("2D"); Массивчик.Добавить("3A"); Массивчик.Добавить("3B"); Массивчик.Добавить("3C"); Массивчик.Добавить("3D"); Для каждого М из Массивчик Цикл Если Объект["MOE"+М].Количество() >0 Тогда ТЗ = РеквизитФормыВЗначение("Объект[""MOE"+М]""); // ВОТ ТУТ НЕ ПОЛУЧАЕТСЯ Док = Документы.ПеремещениеТоваров.СоздатьДокумент(); Док.Дата = ТекущаяДата(); Док.СкладОтправитель = ТЗ.СкладОсновной; Док.СкладПолучатель = Справочники.Склады.НайтиПоНаименованию("MOE"+М); Док.Организация = Справочники.Организации.НайтиПоРеквизиту("ИНН",6449074016); Док.Статус = Перечисления.СтатусыПеремещенийТоваров.КОтгрузке; Для Каждого Строка из ТЗ Цикл НоваяСтрока = Док.Товары.Добавить(); НоваяСтрока.Номенклатура = Строка.Номенклатура; НоваяСтрока.Количество = Строка.Нужно; КонецЦикла; Док.Записать(РежимЗаписиДокумента.Запись); КонецЕсли; КонецЦикла; КонецПроцедуры |
|||
1
Wefast
30.07.15
✎
16:58
|
А напрямую работать с табличной частью не получается. Она имеет тип данныеформыколлекция
|
|||
2
Casey1984
30.07.15
✎
16:58
|
ТЗ = РеквизитФормыВЗначение("Объект[""MOE"+М]"");// ВОТ ТУТ НЕ ПОЛУЧАЕТСЯ - зачем Объект в кавычках? Подумай еще раз!
|
|||
3
Лефмихалыч
30.07.15
✎
16:59
|
>есть обработка. В ней 12 табличных частей
кто-то дальше читал? |
|||
4
GROOVY
30.07.15
✎
16:59
|
Нахрена реквизит формы в значение?
|
|||
5
фобка
30.07.15
✎
17:00
|
Тз = объект["мое"+м].выгрузить();
|
|||
6
GROOVY
30.07.15
✎
17:01
|
(3) Ну копрокод детектед в (0)
|
|||
7
фобка
30.07.15
✎
17:01
|
И да - "массивчик" - это автоматом г-код
|
|||
8
salvator
30.07.15
✎
17:02
|
Для каждого М из Массивчик Цикл
Если Объект["MOE"+М] Посмотри что у тебя в М хранится и удивись |
|||
9
фобка
30.07.15
✎
17:03
|
Док.СкладОтправитель = ТЗ.СкладОсновной
Тут тоже косяк |
|||
10
Timon1405
30.07.15
✎
17:04
|
(7) Так-то, наоборот, "массив = новый Массив" и "Запрос = новый Запрос" это г-код, ибо, по-хорошему, не должна переменная совпадать с именем типа, но "так уж сложилось"
|
|||
11
фобка
30.07.15
✎
17:05
|
Процедура СоздатьПеремещение();
Тут тоже косяк |
|||
12
фобка
30.07.15
✎
17:06
|
(10) лучше "запрос" чем "запросик"
|
|||
13
Timon1405
30.07.15
✎
17:09
|
(12) экий вы суровый, а как же пасхалки в коде?)
|
|||
14
фобка
30.07.15
✎
17:12
|
(13) чтоб добрым быть, я должен быть жестоким
|
|||
15
Euguln
30.07.15
✎
17:22
|
А чо бы по метаданным не пробежаться.
|
|||
16
Wefast
30.07.15
✎
17:31
|
(5) Вот так работает
(3) Как иначе? Так легче, чем создавать 12 таблиц программно (2) Если сделать ТЗ = РеквизитФормыВЗначение("Объект.МОЕ1А") то нормально все делается (7) Сначала это было временным решением, а потом осталось. Кроме меня все равно никто не увидит, а если увидит поднимет настроение. (8) Строка. Получается Строка МОЕ + Строка 1А или 2В. В итоге то что нужно. |
|||
17
Wefast
30.07.15
✎
17:32
|
&НаСервере
Процедура ЗаполнитьНаСервере() тДерево = РеквизитФормыВЗначение("Объект.Дерево"); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | МаршрутныйЛистПроизводстваМатериалыИУслуги.Номенклатура, | СУММА(МаршрутныйЛистПроизводстваМатериалыИУслуги.Количество) КАК Количество, | МаршрутныйЛистПроизводстваМатериалыИУслуги.Ссылка.Подразделение |ПОМЕСТИТЬ ВТ_МаршрутныеЛисты |ИЗ | Документ.МаршрутныйЛистПроизводства.МатериалыИУслуги КАК МаршрутныйЛистПроизводстваМатериалыИУслуги |ГДЕ | МаршрутныйЛистПроизводстваМатериалыИУслуги.Ссылка.Проведен = ИСТИНА | И МаршрутныйЛистПроизводстваМатериалыИУслуги.Ссылка.ПометкаУдаления = ЛОЖЬ | И МаршрутныйЛистПроизводстваМатериалыИУслуги.Ссылка.Статус <> &Статус | И МаршрутныйЛистПроизводстваМатериалыИУслуги.ПроизводитсяВПроцессе = ЛОЖЬ | И МаршрутныйЛистПроизводстваМатериалыИУслуги.Ссылка.Начало >= &НачалоПериода | И МаршрутныйЛистПроизводстваМатериалыИУслуги.Ссылка.Окончание <= &КонецПериода | |СГРУППИРОВАТЬ ПО | МаршрутныйЛистПроизводстваМатериалыИУслуги.Номенклатура, | МаршрутныйЛистПроизводстваМатериалыИУслуги.Ссылка.Подразделение |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ВТ_МаршрутныеЛисты.Номенклатура, | ВТ_МаршрутныеЛисты.Количество, | ВТ_МаршрутныеЛисты.Подразделение, | НастройкаПередачиМатериаловВПроизводство.Склад |ПОМЕСТИТЬ ВТ_2 |ИЗ | ВТ_МаршрутныеЛисты КАК ВТ_МаршрутныеЛисты | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НастройкаПередачиМатериаловВПроизводство КАК НастройкаПередачиМатериаловВПроизводство | ПО ВТ_МаршрутныеЛисты.Номенклатура = НастройкаПередачиМатериаловВПроизводство.Номенклатура | И ВТ_МаршрутныеЛисты.Подразделение = НастройкаПередачиМатериаловВПроизводство.Подразделение |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | Влож.Номенклатура КАК Номенклатура, | Влож.Количество КАК Количество, | Влож.Подразделение, | Влож.Склад КАК СкладОсновной, | Влож.ВНаличииОстаток КАК ОстатокНаОсновномСкладе, | Влож.Поле1 КАК СкладМОЕ, | СвободныеОстаткиОстатки.ВНаличииОстаток КАК ОстатокНаМОЕ, | Влож.Количество - СвободныеОстаткиОстатки.ВНаличииОстаток КАК Нужно |ИЗ | (ВЫБРАТЬ | ВТ_2.Номенклатура КАК Номенклатура, | ВТ_2.Количество КАК Количество, | ВТ_2.Подразделение КАК Подразделение, | ВТ_2.Склад КАК Склад, | СвободныеОстаткиОстатки.ВНаличииОстаток КАК ВНаличииОстаток, | ВЫБОР | КОГДА ВТ_2.Подразделение.Код = ""00007F008"" | И Склады.Наименование = ""00021 MOE1"" | ТОГДА Склады.Ссылка | КОГДА ВТ_2.Подразделение.Код = ""00007F010"" | И Склады.Наименование = ""00022 MOE3"" | ТОГДА Склады.Ссылка | КОГДА ВТ_2.Подразделение.Код = ""00007F011"" | И Склады.Наименование = ""00023 MOE3"" | ТОГДА Склады.Ссылка | ИНАЧЕ ""0"" | КОНЕЦ КАК Поле1 | ИЗ | ВТ_2 КАК ВТ_2 | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.СвободныеОстатки.Остатки(&КонецПериода, ) КАК СвободныеОстаткиОстатки | ПО ВТ_2.Номенклатура = СвободныеОстаткиОстатки.Номенклатура | И ВТ_2.Склад = СвободныеОстаткиОстатки.Склад, | Справочник.Склады КАК Склады) КАК Влож | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.СвободныеОстатки.Остатки(&КонецПериода, ) КАК СвободныеОстаткиОстатки | ПО Влож.Номенклатура = СвободныеОстаткиОстатки.Номенклатура | И Влож.Поле1 = СвободныеОстаткиОстатки.Склад |ГДЕ | Влож.Поле1 <> ""0"" |ИТОГИ ПО | СкладМОЕ, | СкладОсновной"; Запрос.УстановитьПараметр("КонецПериода", Объект.ДатаКонца); Запрос.УстановитьПараметр("НачалоПериода", Объект.ДатаНачала); Запрос.УстановитьПараметр("Статус", Перечисления.СтатусыМаршрутныхЛистовПроизводства.Выполнен); РезультатЗапроса = Запрос.Выполнить(); ВыборкаДетальныеЗаписи = РезультатЗапроса.Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией); тДерево = ВыборкаДетальныеЗаписи; ЗначениеВРеквизитФормы(тДерево, "Объект.Дерево"); КонецПроцедуры &НаКлиенте Процедура Заполнить(Команда) ЗаполнитьНаСервере(); КонецПроцедуры &НаКлиенте Процедура ФлажокПриИзменении(Элемент) ИДТекущейСтроки = Элементы.Дерево.ТекущаяСтрока; Если ИДТекущейСтроки <> Неопределено Тогда ЭлементКоллекции = Объект.Дерево.НайтиПоИдентификатору(ИДТекущейСтроки); Если ЭлементКоллекции.Галка = 2 Тогда ЭлементКоллекции.Галка = 0; КонецЕсли; УстановкаФлажков(ЭлементКоллекции, ЭлементКоллекции.Галка); Родитель = ЭлементКоллекции.ПолучитьРодителя(); Пока Родитель <> Неопределено Цикл Родитель.Галка = ?(УстановленноДляВсех(ЭлементКоллекции), ЭлементКоллекции.Галка, 2); ЭлементКоллекции = Родитель; Родитель = ЭлементКоллекции.ПолучитьРодителя(); КонецЦикла; КонецЕсли; КонецПроцедуры &НаКлиенте Процедура УстановкаФлажков(ЭлементКоллекции, ЗначениеПометки) ПодчинЭлементы = ЭлементКоллекции.ПолучитьЭлементы(); Для Каждого ТекЭлемент Из ПодчинЭлементы Цикл ТекЭлемент.Галка = ЗначениеПометки; УстановкаФлажков(ТекЭлемент, ТекЭлемент.Галка); КонецЦикла; КонецПроцедуры &НаКлиенте Функция УстановленноДляВсех(ЭлементКоллекции) СоседниеЭлементы = ЭлементКоллекции.ПолучитьРодителя().ПолучитьЭлементы(); Для Каждого ТекЭлемент Из СоседниеЭлементы Цикл Если ТекЭлемент.Галка <> ЭлементКоллекции.Галка Тогда Возврат Ложь; КонецЕсли; КонецЦикла; Возврат Истина; КонецФункции &НаСервере Процедура СоздатьДокументыНаСервере() Дерево = РеквизитФормыВЗначение("Объект.Дерево"); ОбходДерева(Дерево); СоздатьПеремещение(); Объект.MOE1A.Очистить(); Объект.MOE1A.Очистить(); Объект.MOE1B.Очистить(); Объект.MOE1C.Очистить(); Объект.MOE1D.Очистить(); Объект.MOE2A.Очистить(); Объект.MOE2B.Очистить(); Объект.MOE2C.Очистить(); Объект.MOE2D.Очистить(); Объект.MOE3A.Очистить(); Объект.MOE3B.Очистить(); Объект.MOE3C.Очистить(); Объект.MOE3D.Очистить(); КонецПроцедуры &НаКлиенте Процедура СоздатьДокументы(Команда) СоздатьДокументыНаСервере(); КонецПроцедуры &НаСервере Процедура ОбходДерева(Дерево) Для Каждого тСтр Из Дерево.Строки Цикл Если тСтр.СкладМОЕ <> Справочники.Склады.ПустаяСсылка() И тСтр.СкладОсновной <> Справочники.Склады.ПустаяСсылка() И тСтр.Номенклатура <> Справочники.Номенклатура.ПустаяСсылка() Тогда Если тСтр.СкладМОЕ = Справочники.Склады.НайтиПоНаименованию("00021 MOE1") Тогда // СКЛАД МОЕ1 ДобавлениеСтроки(тСтр); ИначеЕсли тСтр.СкладМОЕ = Справочники.Склады.НайтиПоНаименованию("00022 MOE2") Тогда // СКЛАД МОЕ2 ДобавлениеСтроки(тСтр); ИначеЕсли тСтр.СкладМОЕ = Справочники.Склады.НайтиПоНаименованию("00023 MOE3") Тогда // СКЛАД МОЕ3 ДобавлениеСтроки(тСтр); Иначе Сообщить("Удалите из обработки справочники кроме МОЕ1 МОЕ2 и МОЕ3"); КонецЕсли; КонецЕсли; Если тСтр.Строки.Количество()>0 Тогда ОбходДерева(тСтр); КонецЕсли; КонецЦикла; КонецПроцедуры Процедура ДобавлениеСтроки(тСтр) Если тСтр.СкладОсновной = Справочники.Склады.НайтиПоНаименованию("Основное Хранение (А)") И тСтр.Галка = 1 Тогда // СКЛАД А Если тСтр.ОстатокНаОсновномСкладе < тСтр.Нужно Тогда Сообщить("На основном складе не хватает /"+ Строка(тСтр.Нужно - тСтр.ОстатокНаОсновномСкладе) +"/ед. "+ тСтр.Номенклатура.Наименование ); ИначеЕсли тСтр.Нужно > 0 Тогда НоваяСтрока = Объект[ПРав(тСтр.СкладМОЕ.Наименование,4)+"A"].Добавить(); ЗаполнитьЗначенияСвойств(НоваяСТрока, тСтр); Иначе Сообщить("Номенклатура "+ тСтр.Номенклатура.Наименование +" на складе "+ тСтр.СкладМОЕ.Наименование + " в избытке и в пополнение не нуждается"); КонецЕсли ИначеЕсли тСтр.СкладОсновной = Справочники.Склады.НайтиПоНаименованию("Металл Хранение (B)") И тСтр.ОстатокНаОсновномСкладе > тСтр.Нужно И тСтр.Галка = 1 Тогда // СКЛАД B Если тСтр.ОстатокНаОсновномСкладе < тСтр.Нужно Тогда Сообщить("На основном складе не хватает /"+ Строка(тСтр.Нужно - тСтр.ОстатокНаОсновномСкладе) +"/ед. "+ тСтр.Номенклатура.Наименование); ИначеЕсли тСтр.Нужно > 0 Тогда НоваяСтрока = Объект[ПРав(тСтр.СкладМОЕ.Наименование,4)+"B"].Добавить(); ЗаполнитьЗначенияСвойств(НоваяСТрока, тСтр); Иначе Сообщить("Номенклатура "+ тСтр.Номенклатура.Наименование +" на складе "+ тСтр.СкладМОЕ.Наименование + " в избытке и в пополнение не нуждается"); КонецЕсли ИначеЕсли тСтр.СкладОсновной = Справочники.Склады.НайтиПоНаименованию("Вспомогательное Хранение (С)") И тСтр.ОстатокНаОсновномСкладе > тСтр.Нужно И тСтр.Галка = 1 Тогда // СКЛАД C Если тСтр.ОстатокНаОсновномСкладе < тСтр.Нужно Тогда Сообщить("На основном складе не хватает /"+ Строка(тСтр.Нужно - тСтр.ОстатокНаОсновномСкладе) +"/ед. "+ тСтр.Номенклатура.Наименование ); ИначеЕсли тСтр.Нужно > 0 Тогда НоваяСтрока = Объект[ПРав(тСтр.СкладМОЕ.Наименование,4)+"C"].Добавить(); ЗаполнитьЗначенияСвойств(НоваяСТрока, тСтр); Иначе Сообщить("Номенклатура "+ тСтр.Номенклатура.Наименование +" на складе "+ тСтр.СкладМОЕ.Наименование + " в избытке и в пополнение не нуждается"); КонецЕсли ИначеЕсли тСтр.СкладОсновной = Справочники.Склады.НайтиПоНаименованию("Опасное Хранение (D)") И тСтр.ОстатокНаОсновномСкладе > тСтр.Нужно И тСтр.Галка = 1 Тогда // СКЛАД D Если тСтр.ОстатокНаОсновномСкладе < тСтр.Нужно Тогда Сообщить("На основном складе не хватает /"+ тСтр.Нужно - тСтр.ОстатокНаОсновномСкладе +"/ед. "+ тСтр.Номенклатура.Наименование ); ИначеЕсли тСтр.Нужно > 0 Тогда НоваяСтрока = Объект[ПРав(тСтр.СкладМОЕ.Наименование,4)+"D"].Добавить(); ЗаполнитьЗначенияСвойств(НоваяСТрока, тСтр); Иначе Сообщить("Номенклатура "+ тСтр.Номенклатура.Наименование +" на складе "+ тСтр.СкладМОЕ.Наименование + " в избытке и в пополнение не нуждается"); КонецЕсли КонецЕсли; КонецПроцедуры Процедура СоздатьПеремещение(); Массивчик = Новый Массив; Массивчик.Добавить("1A"); Массивчик.Добавить("1B"); Массивчик.Добавить("1C"); Массивчик.Добавить("1D"); Массивчик.Добавить("2A"); Массивчик.Добавить("2B"); Массивчик.Добавить("2C"); Массивчик.Добавить("2D"); Массивчик.Добавить("3A"); Массивчик.Добавить("3B"); Массивчик.Добавить("3C"); Массивчик.Добавить("3D"); Для каждого М из Массивчик Цикл Если Объект["MOE"+М].Количество() >0 Тогда ТЗ = Объект["MOE"+М].Выгрузить(); Док = Документы.ПеремещениеТоваров.СоздатьДокумент(); Док.Дата = ТекущаяДата(); Док.СкладОтправитель = ТЗ[0].СкладОсновной; Док.СкладПолучатель = ТЗ[0].СкладМОЕ; Док.Организация = Справочники.Организации.НайтиПоРеквизиту("ИНН","6449074016"); Док.Статус = Перечисления.СтатусыПеремещенийТоваров.КОтгрузке; Для Каждого Строка из ТЗ Цикл НоваяСтрока = Док.Товары.Добавить(); НоваяСтрока.Номенклатура = Строка.Номенклатура; НоваяСтрока.КоличествоУпаковок = Строка.Нужно; КонецЦикла; Док.Записать(РежимЗаписиДокумента.Запись); КонецЕсли; КонецЦикла; КонецПроцедуры |
|||
18
Wefast
30.07.15
✎
17:33
|
Не знаю почему так криво вставляется
|
|||
19
Wefast
30.07.15
✎
17:36
|
Так все работает как нужно, но эти 12 таблиц жутко раздражают. Постоянно какие то проблемы с ними.
В общем хотелось бы услышать предложения как все это можно улучшить было бы, на будущее |
|||
20
Euguln
30.07.15
✎
17:44
|
мОбработка = РеквизитФормыВЗначение("Объект");
ТабличныеЧасти = мОбработка.Метаданные().ТабличныеЧасти; Для Каждого ТабличнаяЧасть Из ТабличныеЧасти Цикл 1. Объект[ТабличнаяЧасть.Имя].Очистить(); 2. ТЗ = Объект[ТабличнаяЧасть.Имя].Выгрузить(); КонецЦикла; Как-то так. |
|||
21
фобка
31.07.15
✎
08:47
|
(19) например, одна табличная часть с дополнительным полем идентификатором (имя из (0)) . Если нужно дополнительно визуальное отображение список на форме еще с именами из (0) и отборы тч при активации строки списка
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |