|
Программный код 1С | ☑ | ||
---|---|---|---|---|
0
Pe3HuK
29.12.15
✎
13:52
|
Я новичок в 1с. Не могу разобраться в коде программиста. Сам код:
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ЗаказПокупателяТовары.Количество, | ЗаказПокупателяТовары.Ссылка.Ссылка КАК Документ, | ЗаказПокупателяТовары.Сумма, | ЗаказПокупателяТовары.Цена, | ЗаказПокупателяТовары.Номенклатура |ИЗ | Документ.ЗаказПокупателя.Товары КАК ЗаказПокупателяТовары |ГДЕ | ЗаказПокупателяТовары.Ссылка.Проведен = &Истина | |УПОРЯДОЧИТЬ ПО | ЗаказПокупателяТовары.Ссылка.Номер"; Запрос.УстановитьПараметр("Истина", Истина); Результат = Запрос.Выполнить(); Выборка = Результат.Выбрать(); Если Не Результат.Пустой() Тогда Ссылка = ""; Ит = 1; Пока Выборка.Следующий() Цикл Если Ссылка <> Выборка.Документ И Ит = 1 Тогда ЗаказПокупателя = ФабрикаXDTO.Создать(ЗаказПокупателяТип); ЗаказПокупателя.Номер = Выборка.Документ.Номер; ЗаказПокупателя.Дата = Выборка.Документ.Дата; Ссылка = Выборка.Документ; Ит =2; ЗаказПокупателяСтрока = ФабрикаXDTO.Создать(ЗаказПокупателяСтрокаТип); Номенклатура = ФабрикаXDTO.Создать(НоменклатураТип); Номенклатура.Код = Выборка.Номенклатура.Код; Номенклатура.Наименование = Выборка.Номенклатура.Наименование; ЗаказПокупателяСтрока.Номенклатура = Номенклатура; ЗаказПокупателяСтрока.Количество = Выборка.Количество; ЗаказПокупателяСтрока.Цена = Выборка.Цена; ЗаказПокупателяСтрока.Сумма = Выборка.Сумма; ЗаказПокупателя.Товары.Добавить(ЗаказПокупателяСтрока); МассивЗаказовПокупателей.ЗаказПокупателя.Добавить(ЗаказПокупателя); ИначеЕсли Ссылка <> Выборка.Документ Тогда ЗаказПокупателя = ФабрикаXDTO.Создать(ЗаказПокупателяТип); ЗаказПокупателя.Номер = Выборка.Документ.Номер; ЗаказПокупателя.Дата = Выборка.Документ.Дата; Ссылка = Выборка.Документ; ЗаказПокупателяСтрока = ФабрикаXDTO.Создать(ЗаказПокупателяСтрокаТип); Номенклатура = ФабрикаXDTO.Создать(НоменклатураТип); Номенклатура.Код = Выборка.Номенклатура.Код; Номенклатура.Наименование = Выборка.Номенклатура.Наименование; ЗаказПокупателяСтрока.Номенклатура = Номенклатура; ЗаказПокупателяСтрока.Количество = Выборка.Количество; ЗаказПокупателяСтрока.Цена = Выборка.Цена; ЗаказПокупателяСтрока.Сумма = Выборка.Сумма; ЗаказПокупателя.Товары.Добавить(ЗаказПокупателяСтрока); МассивЗаказовПокупателей.ЗаказПокупателя.Добавить(ЗаказПокупателя); Иначе Ссылка = Выборка.Документ; ЗаказПокупателяСтрока = ФабрикаXDTO.Создать(ЗаказПокупателяСтрокаТип); Номенклатура = ФабрикаXDTO.Создать(НоменклатураТип); Номенклатура.Код = Выборка.Номенклатура.Код; Номенклатура.Наименование = Выборка.Номенклатура.Наименование; ЗаказПокупателяСтрока.Номенклатура = Номенклатура; ЗаказПокупателяСтрока.Количество = Выборка.Количество; ЗаказПокупателяСтрока.Цена = Выборка.Цена; ЗаказПокупателяСтрока.Сумма = Выборка.Сумма; ЗаказПокупателя.Товары.Добавить(ЗаказПокупателяСтрока); КонецЕсли; КонецЦикла; КонецЕсли; Не понятно для чего и как работает условие Если, и можно ли как то упростить сам код? |
|||
1
Lexey_
29.12.15
✎
13:54
|
|ГДЕ
| ЗаказПокупателяТовары.Ссылка.Проведен = &Истина Запрос.УстановитьПараметр("Истина", Истина) это пять |
|||
2
mikecool
29.12.15
✎
13:56
|
(1) в 8.0 вроде как еще приходилось так писать или ошибаюсь?
|
|||
3
Garykom
гуру
29.12.15
✎
13:57
|
(1) а вдруг оно не истина/ложь а непределено/нулл ?
|
|||
4
Lexey_
29.12.15
✎
13:59
|
(2)на счет 8.0 не скажу
(3)не в этом запросе |
|||
5
mikecool
29.12.15
✎
14:00
|
(4) согласен, в этом запросе обматерит в случае Заказ = нулл
|
|||
6
Живой Ископаемый
29.12.15
✎
14:07
|
2(0) Код простой. Условие Если Ссылка <> Выборка.Документ
проверяет - сменился ли документ в выборке, или по-прежнему все еще тот что и в предыдущей строке. Избавиться от условия вообще наверное можно, изменив сам запрос. Все |
|||
7
Ластик
29.12.15
✎
14:09
|
насколько помню все что сравнивается с нулом считается ложью, так что пофигу, и в 8.0 это тоже работало без сравнения
|
|||
8
18_plus
29.12.15
✎
14:10
|
не будет в этом запросе никаких нуллов.
если тока база битая. |
|||
9
Enterprise
29.12.15
✎
14:14
|
(8) +1
|
|||
10
Сияющий Асинхраль
29.12.15
✎
14:16
|
Если в запросе поставить итоги по документу, то, в принципе, "если" не нужны, ну и код подсократиться и внятней станет, правда цикла тогда два должно быть - по документу и по номенклатуре...
|
|||
11
Mort
29.12.15
✎
14:17
|
Вброшу:
Больше 12 строк между "Если " и "КонецЕсли" или аналогичных структур это г-код. (0) А по теме надо сделать в запросе итоги по ссылке и обходить ссылки, а по ним строки. |
|||
12
18_plus
29.12.15
✎
14:38
|
(11) с каких пор ветвление стало г-кодом?
аналогичные структуры это циклы и попытки? |
|||
13
Garykom
гуру
29.12.15
✎
14:41
|
(11) да группировку по заказу сделать чтобы товары заказа вместе были и 2 циклами их обойти
|
|||
14
Живой Ископаемый
29.12.15
✎
14:44
|
2(11) В 8.3 отлично работает рефакторинг.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |