Белозеров Дмитрий | Системный архитектор | LMSoft

«Кодогенерация и метагенерация в 1С»

Примерно год назад жизнь заставила меня задуматься над таким вопросом - а не разработать ли язык (точнее псевдоязык), с помощью которого можно было бы программно работать с метаданными 1С, писать скрипты, которые выполняют те же действия, которые выполняет разработчик в конфигураторе... В этом докладе хочу рассказать о том как мы разрабатывали такой инструмент, с какими сложностями и нюансами столкнулись, и что получилось в итоге. Мы рассмотрим реальные кейсы использования автоматической генерации метаданных 1С, в которых использование такого подхода дает серьёзные преимущества и сильно облегчает жизнь разработчика (иногда настолько облегчает что можно обойтись вообще без него :), увидим как инструмент генерации можно вписать в общий контур continuous integration. А ещё обсудим перспективы использования подобных практик (генерация конфигурации на основе формализованных функциональных моделей, реализация библиотечного подхода к разработке прикладных решений).

Задвоение строк в запросе

1. user630160_pmfywk 10.01.17 09:58 Сейчас в теме
Помогите убрать задвоение строк в запросе. Есть Объединенный запрос, не могу убрать задвоение. Подскажите как привильней настроить группировку и итоги.

ВЫБРАТЬ РАЗЛИЧНЫЕ
	ТоварыОрганизацийОстатки.Склад КАК Склад,
	ТоварыОрганизацийОстатки.Номенклатура КАК Номенклатура,
	0 КАК КоличествоОстаток2,
	СУММА(ТоварыОрганизацийОстатки.КоличествоОстаток) КАК КоличествоОстаток1
ИЗ
	РегистрНакопления.ТоварыОрганизаций.Остатки КАК ТоварыОрганизацийОстатки
ГДЕ
	ТоварыОрганизацийОстатки.Организация = &Организация
	И ТоварыОрганизацийОстатки.Склад = &Склад
	И ТоварыОрганизацийОстатки.Номенклатура В ИЕРАРХИИ(&Номенклатура)

СГРУППИРОВАТЬ ПО
	ТоварыОрганизацийОстатки.Склад,
	ТоварыОрганизацийОстатки.Номенклатура

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	ТоварыОрганизацийОстатки.Склад,
	ТоварыОрганизацийОстатки.Номенклатура,
	СУММА(ТоварыОрганизацийОстатки.КоличествоОстаток),
	0
ИЗ
	РегистрНакопления.ТоварыОрганизаций.Остатки КАК ТоварыОрганизацийОстатки
ГДЕ
	ТоварыОрганизацийОстатки.Организация = &Организация2
	И ТоварыОрганизацийОстатки.Склад = &Склад
	И ТоварыОрганизацийОстатки.Номенклатура В ИЕРАРХИИ(&Номенклатура)

СГРУППИРОВАТЬ ПО
	ТоварыОрганизацийОстатки.Склад,
	ТоварыОрганизацийОстатки.Номенклатура
ИТОГИ
	СУММА(КоличествоОстаток2),
	СУММА(КоличествоОстаток1)
ПО
	Склад,
	Номенклатура
Показать
Прикрепленные файлы:
Найденные решения
7. YanSergey 10.01.17 10:33 Сейчас в теме
Вот запрос, который тебе нужен:
ВЫБРАТЬ
	ТоварыОрганизацийОстатки.Склад КАК Склад,
	ТоварыОрганизацийОстатки.Номенклатура КАК Номенклатура,
	0 КАК КоличествоОстаток2,
	ТоварыОрганизацийОстатки.КоличествоОстаток КАК КоличествоОстаток1
ПОМЕСТИТЬ ВТ
ИЗ
	РегистрНакопления.ТоварыОрганизаций.Остатки(
			,
			Организация = &Организация
				И Номенклатура В ИЕРАРХИИ (&Номенклатура)) КАК ТоварыОрганизацийОстатки

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	ТоварыОрганизацийОстатки.Склад,
	ТоварыОрганизацийОстатки.Номенклатура,
	ТоварыОрганизацийОстатки.КоличествоОстаток,
	0
ИЗ
	РегистрНакопления.ТоварыОрганизаций.Остатки(
			,
			Организация = &Организация2
				И Номенклатура В ИЕРАРХИИ (&Номенклатура)) КАК ТоварыОрганизацийОстатки
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ВТ.Номенклатура КАК Номенклатура,
	ВТ.Склад КАК Склад,
	СУММА(ВТ.КоличествоОстаток2) КАК КоличествоОстаток2,
	СУММА(ВТ.КоличествоОстаток1) КАК КоличествоОстаток1
ИЗ
	ВТ КАК ВТ

СГРУППИРОВАТЬ ПО
	ВТ.Склад,
	ВТ.Номенклатура
Показать
_Pups_; user630160_pmfywk; +2 Ответить
Остальные ответы
Сортировка: Древо
3. spacecraft 10.01.17 10:16 Сейчас в теме
(1) итоги убрать.
ИТОГИ
СУММА(КоличествоОстаток2),
СУММА(КоличествоОстаток1)
ПО
Склад,
Номенклатура


Это не задвоение, а итоги по группировкам.
Достаточно установить вывод в дерево и будет сразу видно.
user630160_pmfywk; +1 Ответить
4. user630160_pmfywk 10.01.17 10:19 Сейчас в теме
(3)убирая итоги, задвоение убирается, но в результате пишет примерно вот так
сироп карамель 14
сироп карамель -1
а мне нужно что бы было как то так
сироп карамель 14 -1
5. spacecraft 10.01.17 10:27 Сейчас в теме
(4) а на этот вопрос уже ответили в (2)
user630160_pmfywk; +1 Ответить
6. user630160_pmfywk 10.01.17 10:29 Сейчас в теме
(3)поставил дерево. выглядит прилично, у меня теперь такой вопрос если я буду выводить результат в табличную части внешнее обработки то в строку будет передаваться раскрытая ветка или нет например
1 строка сироп 14 -1
или будет так
1 строка сироп 14 -1
2 строка сироп 14
3 строка сироп -1
2. Xamele0n88 10.01.17 10:12 Сейчас в теме
Объединение поместить во вложенный запрос или временную таблицу, получившуюся итоговую таблицу сгруппировать и вывести итоги
user630160_pmfywk; +1 Ответить
7. YanSergey 10.01.17 10:33 Сейчас в теме
Вот запрос, который тебе нужен:
ВЫБРАТЬ
	ТоварыОрганизацийОстатки.Склад КАК Склад,
	ТоварыОрганизацийОстатки.Номенклатура КАК Номенклатура,
	0 КАК КоличествоОстаток2,
	ТоварыОрганизацийОстатки.КоличествоОстаток КАК КоличествоОстаток1
ПОМЕСТИТЬ ВТ
ИЗ
	РегистрНакопления.ТоварыОрганизаций.Остатки(
			,
			Организация = &Организация
				И Номенклатура В ИЕРАРХИИ (&Номенклатура)) КАК ТоварыОрганизацийОстатки

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	ТоварыОрганизацийОстатки.Склад,
	ТоварыОрганизацийОстатки.Номенклатура,
	ТоварыОрганизацийОстатки.КоличествоОстаток,
	0
ИЗ
	РегистрНакопления.ТоварыОрганизаций.Остатки(
			,
			Организация = &Организация2
				И Номенклатура В ИЕРАРХИИ (&Номенклатура)) КАК ТоварыОрганизацийОстатки
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ВТ.Номенклатура КАК Номенклатура,
	ВТ.Склад КАК Склад,
	СУММА(ВТ.КоличествоОстаток2) КАК КоличествоОстаток2,
	СУММА(ВТ.КоличествоОстаток1) КАК КоличествоОстаток1
ИЗ
	ВТ КАК ВТ

СГРУППИРОВАТЬ ПО
	ВТ.Склад,
	ВТ.Номенклатура
Показать
_Pups_; user630160_pmfywk; +2 Ответить
8. user630160_pmfywk 10.01.17 10:36 Сейчас в теме
(7) спасибо огромное! только учусь, еще со не работал со временными таблицами, очень помогли!
9. YanSergey 10.01.17 10:39 Сейчас в теме
(8) Обрати внимание, что параметры запроса из секции ГДЕ, я перенес в параметры виртуальной таблицы (т. е. в скобочки):

РегистрНакопления.ТоварыОрганизаций.Остатки(, Организация = &Организация  И Номенклатура В ИЕРАРХИИ (&Номенклатура))


ибо твой вариант совсем плох был
user630160_pmfywk; antz; +2 Ответить
Оставьте свое сообщение

Вакансии

Бизнес-аналитик 1С
Санкт-Петербург
зарплата от 80 000 руб. до 100 000 руб.
Полный день

Руководитель проектов по внедрению 1С документооборота
Санкт-Петербург
зарплата от 100 000 руб. до 130 000 руб.
Полный день

Руководитель по сопровождению и внедрению 1С
Санкт-Петербург
зарплата от 100 000 руб. до 120 000 руб.
Полный день

Программист 1С
Санкт-Петербург
Полный день

Ведущий специалист 1С
Москва
Полный день