|
Вопрос по обработке на создание документа | ☑ | ||
---|---|---|---|---|
0
example
20.11.12
✎
12:09
|
Здравствуйте! Имеется внешняя обработка на создание документа и заполнения его таб части из dbf таблицы (перед этим все данные из dbf я гружу в табличную часть обработки из нее же и заполняю таб часть док-та)
Сейчас все данные грузятся в один документ, а нужно чтобы для каждого значение определенного поля создавался отдельный док Как правильно написать цикл? |
|||
1
Рэйв
20.11.12
✎
12:11
|
ОТсортируй таблицу по этим значением и отслеживай его смену при переборе. Как изменилось - создавай новый док.
|
|||
2
shuhard
20.11.12
✎
12:11
|
(20) загрузить всё херню в ТЗ, отсортировать ТС по определенному знанию поля, выполнить по нему цикл
|
|||
3
mikecool
20.11.12
✎
12:14
|
(2) твой пост похож на перевод с китайского ))
зы: сорри за офф |
|||
4
example
20.11.12
✎
12:16
|
Допустим таблица отсортирована, как отследить смену значения?
Если можно кодом, а то я на словах плохо пойму))) Я понимаю, что пост глупый) Но я только учусь и поэтому грамотно формулировать вопросы касаемо 1с не умею)) |
|||
5
Птица
20.11.12
✎
12:18
|
(4) запоминать текущее в переменную, сравнивать с очередным из базы, при смене значения обновлять переменную и начинать новый документ
|
|||
6
zladenuw
20.11.12
✎
12:18
|
с общей ТЗ. копируешь поля которые будут в шапке документа. сворачиваешь тз шапка. делаешь цикл по нему. создаешь и заполняешь шапку документа, внутри делаешь отбор к общей тз и заполняешь тч документа. методом ЗаполнитьЗначенияСвойств. как то так.
|
|||
7
example
20.11.12
✎
12:57
|
извините за излишнюю тупость, но нагляднее мне будет понятнее, как сюда скопировать код ?)
|
|||
8
Рэйв
20.11.12
✎
13:03
|
(7)
//--------------- Перем Док; ТЗ.Сортировать("Чтото"); чтотоДО="Здесь пока ничего"; Для Каждого Стр Из ТЗ Цикл Если Стр.Чтото<>ЧтотоДо Тогда Если чтотоДО<>"Здесь пока ничего" Тогда Док.Записать(); КонецЕсли; Док=Документы.Имя.СоздатьДокумент(); //....Заполняешь шапку КонецЕсли; Нов=Док.ТабЧасть.Добавить(); // заполняешь новыю строку документа //------- ЧтотоДО=Стр.Чтото; КонецЦикла; Док. Записать(); //--------- Как то так |
|||
9
example
20.11.12
✎
13:13
|
у меня все немножко иначе изначально
вот на эту кнопку я гружу данные из dbf в табличную часть обработки [code]Процедура ЗагрузитьФайл(Элемент) Материалы.Очистить(); хВ = Новый XBase; хВ.ОткрытьФайл(Путь); хВ.Первая(); к=1; Пока Не хВ.ВКонце() Цикл ГН=СтрЗаменить(хВ.INV," ",""); НУ=СтрЗаменить(хВ.N_U," ",""); ВТ=СтрЗаменить(хВ.KOD," ",""); КО=СтрЗаменить(хВ.KOB," ",""); Рд=СтрЗаменить(хВ.RASHOD," ",""); НоваяСтрока=Материалы.Добавить(); НоваяСтрока.ГаражныйНомер=Справочники.рар_ГаражныеНомера.НайтиПоНаименованию(ГН); НоваяСтрока.НомерУчастка="Участок № "+НУ; Если НоваяСтрока.НомерУчастка="Участок № 4" Тогда НоваяСтрока.НомерУчастка=Справочники.Подразделения.НайтиПоНаименованию("Производственный"); КонецЕсли; Если ВТ="4" Тогда НоваяСтрока.ВидТоплива=Справочники.Номенклатура.НайтиПоНаименованию("Дизельное топливо"); ИначеЕсли ВТ="3" Тогда НоваяСтрока.ВидТоплива=Справочники.Номенклатура.НайтиПоНаименованию("Бензин АИ-92"); ИначеЕсли ВТ="2" Тогда НоваяСтрока.ВидТоплива=Справочники.Номенклатура.НайтиПоНаименованию("Бензин АИ-80"); ИначеЕсли ВТ="1" Тогда НоваяСтрока.ВидТоплива=Справочники.Номенклатура.НайтиПоНаименованию("Бензин АИ-95"); КонецЕсли; Если КО="990" или КО="992" Тогда НоваяСтрока.КодОбъекта=Справочники.НоменклатурныеГруппы.НайтиПоНаименованию("Услуги авто"); Иначе НоваяСтрока.КодОбъекта=Справочники.НоменклатурныеГруппы.НайтиПоНаименованию(КО); КонецЕсли; НоваяСтрока.Расход=Рд; хВ.Следующая(); КонецЦикла; КонецПроцедуры[/code] А вот на эту кнопку уже формирую док [code]Процедура КнопкаВыполнитьНажатие(Кнопка) ТребованиеНакладная=Документы.ТребованиеНакладная.СоздатьДокумент(); ТребованиеНакладная.Организация=Организация; ТребованиеНакладная.Подразделение=Участок; ТребованиеНакладная.Склад=Склад; ТребованиеНакладная.Ответственный=ПараметрыСеанса.ТекущийПользователь; ТребованиеНакладная.Дата=КонецМесяца(МесяцЗагрузки); ТребованиеНакладная.ОтражатьВУправленческомУчете = Истина; ТребованиеНакладная.ОтражатьВБухгалтерскомУчете = Истина; ТребованиеНакладная.ОтражатьВНалоговомУчете = Истина; ТребованиеНакладная.Ответственный=Справочники.Пользователи.НайтиПоНаименованию("Хромова"); ТребованиеНакладная.НДСвСтоимостиТоваров=Перечисления.ДействиеНДСВСтоимостиТоваров.НеИзменять; Для каждого стр из Материалы Цикл СтрокаТН=ТребованиеНакладная.Материалы.Добавить(); СтрокаТН.Номенклатура=стр.ВидТоплива; ЭтаФорма.Обновить(); СтрокаТН.Количество=стр.Расход; СтрокаТН.ЕдиницаИзмерения=Справочники.ЕдиницыИзмерения.НайтиПоНаименованию("л"); СтрокаТН.Коэффициент=Число(1.000); СтрокаТН.СтатьяЗатрат=Справочники.СтатьиЗатрат.НайтиПоНаименованию("20 Стоимость гсм"); СтрокаТН.НоменклатурнаяГруппа=стр.КодОбъекта; СтрокаТн.ГаражныйНомер=стр.ГаражныйНомер; СтрокаТн.Качество=Справочники.Качество.Новый; СтрокаТн.Склад=Склад; ТребованиеНакладная.Записать(); КонецЦикла; ТребованиеНакладная.Записать(); КонецПроцедуры[/code] Создавать новый док нужно для каждого "КодОбъекта" а их множество |
|||
10
example
20.11.12
✎
15:14
|
up, help!)
|
|||
11
Aprobator
20.11.12
✎
15:30
|
|
|||
12
example
20.11.12
✎
16:02
|
Получилось, но теперь почему-то в каждом доке по одной записи (
Процедура КнопкаВыполнитьНажатие(Кнопка) ОбработанныеКоды = Новый Соответствие; стркОтбора = Новый Структура; Для каждого стр Из Материалы Цикл Если ОбработанныеКоды[стр.КодОбъекта] = Неопределено Тогда стркОтбора.Вставить("КодОбъекта", стр.КодОбъекта); мсвСтрокПоКодуОбъекта = Материалы.НайтиСтроки(стркОтбора); ТребованиеНакладная=Документы.ТребованиеНакладная.СоздатьДокумент(); ТребованиеНакладная.Организация=Организация; ТребованиеНакладная.Подразделение=Участок; ТребованиеНакладная.Склад=Склад; ТребованиеНакладная.Ответственный=ПараметрыСеанса.ТекущийПользователь; ТребованиеНакладная.Дата=КонецМесяца(МесяцЗагрузки); ТребованиеНакладная.ОтражатьВУправленческомУчете = Истина; ТребованиеНакладная.ОтражатьВБухгалтерскомУчете = Истина; ТребованиеНакладная.ОтражатьВНалоговомУчете = Истина; ТребованиеНакладная.Ответственный=Справочники.Пользователи.НайтиПоНаименованию(); ТребованиеНакладная.НДСвСтоимостиТоваров=Перечисления.ДействиеНДСВСтоимостиТоваров.НеИзменять; СтрокаТН=ТребованиеНакладная.Материалы.Добавить(); СтрокаТН.Номенклатура=стр.ВидТоплива; ЭтаФорма.Обновить(); СтрокаТН.Количество=стр.Расход; СтрокаТН.ЕдиницаИзмерения=Справочники.ЕдиницыИзмерения.НайтиПоНаименованию(); СтрокаТН.Коэффициент=Число(); СтрокаТН.СтатьяЗатрат=Справочники.СтатьиЗатрат.НайтиПоНаименованию(); СтрокаТН.НоменклатурнаяГруппа=стр.КодОбъекта; СтрокаТн.ГаражныйНомер=стр.ГаражныйНомер; СтрокаТн.Качество=Справочники.Качество.Новый; СтрокаТн.Склад=Склад; ТребованиеНакладная.Записать(); ОбработанныеКоды[стр.КодОбъекта]=1 КонецЕсли; КонецЦикла; КонецПроцедуры Что не так теперь?) |
|||
13
hhhh
20.11.12
✎
17:05
|
(12) а где у вас здесь "обходя элементы полученного массива"??
|
|||
14
Aprobator
20.11.12
✎
17:21
|
кирдык мамай, что еще сказать.
|
|||
15
Aprobator
20.11.12
✎
17:25
|
особенно нравится
|
|||
16
example
21.11.12
✎
09:10
|
Спасибо короче всем, залошить залошили, а помочь толком никто и не помог)
|
|||
17
Homer
21.11.12
✎
09:14
|
в (8) все показано как делать.
|
|||
18
Aprobator
21.11.12
✎
09:44
|
если читать не умеешь, кто ж тебе поможет то?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |