В отчёте формируется запрос. После его выполнения выдаётся сообщение об ошибке:
{Форма.ФормаОтчета.Форма(221)}: Ошибка при вызове метода контекста (Выполнить)
РезультатПоГруппам = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
по причине:
{(65, 2)}: Неоднозначное поле "Артикул"
<<?>>Артикул,
Не могу найти в каком именно месте он неоднозначен. Сам запрос:
Запрос.Текст = "ВЫБРАТЬ
| спрНоменклатура.Ссылка КАК Номенклатура,
| СУММА(РеализацияТоваровУслугТовары.Количество) КАК КоличествоРеализация,
| СУММА(РеализацияТоваровУслугТовары.Сумма) КАК СуммаРеализация,
| спрНоменклатура.СтавкаНДС КАК СтавкаНДС,
| СУММА(РеализацияТоваровУслугТовары.СуммаНДС) КАК НДСРеализация,
| СУММА(РеализацияТоваровУслугТовары.СуммаРучнойСкидки) КАК СкидкаРеализация,
| спрНоменклатура.ЕдиницаИзмерения.Представление КАК Ед,";
Если Отчет.Группе Тогда
Запрос.Текст = Запрос.Текст + "
| спрНоменклатура.Родитель.Наименование КАК Артикул";
ИначеЕсли Отчет.Артикулу Тогда
Запрос.Текст = Запрос.Текст + "
| спрНоменклатура.Артикул КАК Артикул";
Иначе
КонецЕсли;
Запрос.Текст = Запрос.Текст + "
|ПОМЕСТИТЬ Реализация
|ИЗ
| Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
| Внутреннее соединение Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
| по РеализацияТоваровУслуг.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
| И РеализацияТоваровУслуг.Проведен = ИСТИНА
| И РеализацияТоваровУслуг.Ссылка = РеализацияТоваровУслугТовары.Ссылка
| Внутреннее соединение Справочник.Номенклатура КАК СпрНоменклатура
| по РеализацияТоваровУслугТовары.Номенклатура = СпрНоменклатура.Ссылка
| И СпрНоменклатура.Родитель В(&СписокНоменклатуры)
|СГРУППИРОВАТЬ ПО
| Артикул,
| СпрНоменклатура.ссылка
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| спрНоменклатура.Ссылка КАК Номенклатура,
| СУММА(РеализацияТоваровУслугТовары.Количество) КАК КоличествоВозврат,
| СУММА(РеализацияТоваровУслугТовары.Сумма) КАК СуммаВозврат,
| спрНоменклатура.СтавкаНДС КАК СтавкаНДС,
| СУММА(РеализацияТоваровУслугТовары.СуммаНДС) КАК НДСВозврат,
| спрНоменклатура.ЕдиницаИзмерения.Представление КАК Ед,";
Если Отчет.Группе Тогда
Запрос.Текст = Запрос.Текст + "
| спрНоменклатура.Родитель.Наименование КАК Артикул";
ИначеЕсли Отчет.Артикулу Тогда
Запрос.Текст = Запрос.Текст + "
| спрНоменклатура.Артикул КАК Артикул";
Иначе
КонецЕсли;
Запрос.Текст = Запрос.Текст + "
|ПОМЕСТИТЬ Возврат
|ИЗ
| Документ.ВозвратТоваровОтПокупателя.Товары КАК РеализацияТоваровУслугТовары
| Внутреннее соединение Документ.ВозвратТоваровОтПокупателя КАК РеализацияТоваровУслуг
| по РеализацияТоваровУслуг.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
| И РеализацияТоваровУслуг.Проведен = ИСТИНА
| И РеализацияТоваровУслуг.Ссылка = РеализацияТоваровУслугТовары.Ссылка
| Внутреннее соединение Справочник.Номенклатура КАК СпрНоменклатура
| по РеализацияТоваровУслугТовары.Номенклатура = СпрНоменклатура.Ссылка
| И СпрНоменклатура.Родитель В(&СписокНоменклатуры)
|СГРУППИРОВАТЬ ПО
| Артикул,
| СпрНоменклатура.Ссылка
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ЕСТЬNULL(Реализация.Номенклатура, Возврат.Номенклатура) КАК Номенклатура,
| СУММА(ЕСТЬNULL(Реализация.КоличествоРеализация, 0) - ЕСТЬNULL(Возврат.КоличествоВозврат, 0)) КАК Количество,
| СУММА(ЕСТЬNULL(Реализация.СуммаРеализация, 0) - ЕСТЬNULL(Возврат.СуммаВозврат, 0)) КАК Сумма,
| СУММА(ЕСТЬNULL(Реализация.НДСРеализация, 0) - ЕСТЬNULL(Возврат.НДСВозврат, 0)) КАК НДС,
| СУММА(ЕСТЬNULL(Реализация.СкидкаРеализация, 0)) КАК Скидка
|ИЗ
| Реализация КАК Реализация
| ПОЛНОЕ СОЕДИНЕНИЕ Возврат КАК Возврат
| ПО Реализация.Номенклатура = Возврат.Номенклатура
| И Реализация.Артикул = Возврат.Артикул
|СГРУППИРОВАТЬ ПО
| ЕСТЬNULL(Реализация.Артикул, Возврат.Артикул),
| ЕСТЬNULL(Реализация.Номенклатура, Возврат.Номенклатура)
|УПОРЯДОЧИТЬ ПО
| Артикул,
| спрНоменклатура.Наименование
|ИТОГИ
| СУММА(Количество),
| СУММА(Сумма),
| СУММА(Скидка),
| СУММА(НДС)
|ПО
| Артикул,
| Номенклатура";
ВЫБРАТЬ
n.Ссылка КАК Номенклатура,
n.СтавкаНДС КАК СтавкаНДС,
n.ЕдиницаИзмерения.Представление КАК Ед,
n.Артикул КАК Артикул,
СУММА(t.Количество) КАК КоличествоРеализация,
СУММА(t.Сумма) КАК СуммаРеализация,
СУММА(t.СуммаНДС) КАК НДСРеализация,
СУММА(t.СуммаРучнойСкидки) КАК СкидкаРеализация
ПОМЕСТИТЬ Реализация
ИЗ
Документ.РеализацияТоваровУслуг КАК d
левое соединение Документ.РеализацияТоваровУслуг.Товары КАК t по(d.Ссылка = t.Ссылка)
левое соединение Справочник.Номенклатура КАК n по(t.Номенклатура = n.Ссылка
И n.Родитель В(&СписокНоменклатуры))
где
d.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
И d.Проведен
СГРУППИРОВАТЬ ПО
n.Ссылка,
n.СтавкаНДС,
n.ЕдиницаИзмерения.Представление,
n.Артикул
ВЫБРАТЬ
n.Ссылка КАК Номенклатура,
n.СтавкаНДС КАК СтавкаНДС,
n.ЕдиницаИзмерения.Представление КАК Ед,
n.Артикул КАК Артикул,
СУММА(t.Количество) КАК КоличествоВозврат,
СУММА(t.Сумма) КАК СуммаВозврат,
СУММА(t.СуммаНДС) КАК НДСВозврат
ПОМЕСТИТЬ Возврат
ИЗ
Документ.ВозвратТоваровОтПокупателя КАК d
левое соединение Документ.ВозвратТоваровОтПокупателя.Товары КАК t по(d.Ссылка = t.Ссылка)
Внутреннее соединение Справочник.Номенклатура КАК n по(t.Номенклатура = n.Ссылка
И n.Родитель В(&СписокНоменклатуры))
где
d.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
И d.Проведен
СГРУППИРОВАТЬ ПО
n.Ссылка,
n.СтавкаНДС,
n.ЕдиницаИзмерения.Представление,
n.Артикул
ВЫБРАТЬ
n.Ссылка КАК Номенклатура,
n.СтавкаНДС КАК СтавкаНДС,
n.ЕдиницаИзмерения.Представление КАК Ед,
n.Артикул КАК Артикул,
t.Количество КАК КоличествоРеализация,
t.Сумма КАК СуммаРеализация,
t.СуммаНДС КАК НДСРеализация,
t.СуммаРучнойСкидки КАК СкидкаРеализация,
0 КАК СкидкаРеализация
0 КАК КоличествоВозврат,
0 КАК СуммаВозврат,
0 КАК НДСВозврат
ИЗ
Документ.РеализацияТоваровУслуг КАК d
левое соединение Документ.РеализацияТоваровУслуг.Товары КАК t по(d.Ссылка = t.Ссылка)
левое соединение Справочник.Номенклатура КАК n по(t.Номенклатура = n.Ссылка
И n.Родитель В(&СписокНоменклатуры))
где
d.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
И d.Проведен
union ALL
ВЫБРАТЬ
n.Ссылка КАК Номенклатура,
n.СтавкаНДС КАК СтавкаНДС,
n.ЕдиницаИзмерения.Представление КАК Ед,
n.Артикул КАК Артикул,
0 КАК КоличествоРеализация,
0 КАК СуммаРеализация,
0 КАК НДСРеализация,
0 КАК СкидкаРеализация
t.Количество КАК КоличествоВозврат,
t.Сумма КАК СуммаВозврат,
t.СуммаНДС КАК НДСВозврат
ИЗ
Документ.ВозвратТоваровОтПокупателя КАК d
левое соединение Документ.ВозвратТоваровОтПокупателя.Товары КАК t по(d.Ссылка = t.Ссылка)
Внутреннее соединение Справочник.Номенклатура КАК n по(t.Номенклатура = n.Ссылка
И n.Родитель В(&СписокНоменклатуры))
где
d.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
И d.Проведен
выбрать
t.Номенклатура,
t.СтавкаНДС,
t.Ед,
t.Артикул,
сумма(t.КоличествоРеализация) как КоличествоРеализация,
сумма(t.СуммаРеализация) как СуммаРеализация,
сумма(t.НДСРеализация) как НДСРеализация,
сумма(t.СкидкаРеализация) как СкидкаРеализация,
сумма(t.КоличествоВозврат) как КоличествоВозврат,
сумма(t.СуммаВозврат) как СуммаВозврат,
сумма(t.НДСВозврат) как НДСВозврат
поместить ИТОГО_
из
(ВЫБРАТЬ
n.Ссылка КАК Номенклатура,
n.СтавкаНДС КАК СтавкаНДС,
n.ЕдиницаИзмерения.Представление КАК Ед,
n.Артикул КАК Артикул,
t.Количество КАК КоличествоРеализация,
t.Сумма КАК СуммаРеализация,
t.СуммаНДС КАК НДСРеализация,
t.СуммаРучнойСкидки КАК СкидкаРеализация,
0 КАК КоличествоВозврат,
0 КАК СуммаВозврат,
0 КАК НДСВозврат
ИЗ
Документ.РеализацияТоваровУслуг КАК d
левое соединение Документ.РеализацияТоваровУслуг.Товары КАК t по(d.Ссылка = t.Ссылка)
левое соединение Справочник.Номенклатура КАК n по(t.Номенклатура = n.Ссылка
И n.Родитель В(&СписокНоменклатуры))
где
d.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
И d.Проведен
union ALL
ВЫБРАТЬ
n.Ссылка КАК Номенклатура,
n.СтавкаНДС КАК СтавкаНДС,
n.ЕдиницаИзмерения.Представление КАК Ед,
n.Артикул КАК Артикул,
0 КАК КоличествоРеализация,
0 КАК СуммаРеализация,
0 КАК НДСРеализация,
0 КАК СкидкаРеализация
t.Количество КАК КоличествоВозврат,
t.Сумма КАК СуммаВозврат,
t.СуммаНДС КАК НДСВозврат
ИЗ
Документ.ВозвратТоваровОтПокупателя КАК d
левое соединение Документ.ВозвратТоваровОтПокупателя.Товары КАК t по(d.Ссылка = t.Ссылка)
Внутреннее соединение Справочник.Номенклатура КАК n по(t.Номенклатура = n.Ссылка
И n.Родитель В(&СписокНоменклатуры))
где
d.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
И d.Проведен
) как t
СГРУППИРОВАТЬ ПО
t.Номенклатура,
t.СтавкаНДС,
t.Ед,
t.Артикул
(48) vadim28, я там в конце собрал нечто "ИТОГО_", которое надо правильно свернуть.
левое к номенклатуре полюбому уже есть из-за
n.Родитель В(&СписокНоменклатуры)
Быстро или нет - это у меня не вопрос попадания в индексы, а вопрос размера массива данных.
Свернуть - это не соединить. Я, ясен пень, за свой вариант.
(50) ture, это - n.Родитель В(&СписокНоменклатуры) - выборка, но не соединение.
ИЗ
Документ.ВозвратТоваровОтПокупателя КАК d
левое соединение Документ.ВозвратТоваровОтПокупателя.Товары КАК t по(d.Ссылка = t.Ссылка)
Внутреннее соединение Справочник.Номенклатура КАК n по(t.Номенклатура = n.Ссылка
И n.Родитель В(&СписокНоменклатуры))
где
d.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
И d.Проведен
Показать
Вот соединение. Внутреннее или левое, но соединение.
Как соединить вот этот кусок:
|ВЫБРАТЬ
| ЕСТЬNULL(Реализация.Номенклатура, Возврат.Номенклатура) КАК Номенклатура,
| ЕСТЬNULL(Реализация.Артикул_1, Возврат.Артикул_1) КАК Артикул,
| СпрНоменклатура.СтавкаНДС КАК СтавкаНДС,
| СпрНоменклатура.ЕдиницаИзмерения.Представление КАК Ед,
| СУММА(ЕСТЬNULL(Реализация.КоличествоРеализация, 0) - ЕСТЬNULL(Возврат.КоличествоВозврат, 0)) КАК Количество,
| СУММА(ЕСТЬNULL(Реализация.СуммаРеализация, 0) - ЕСТЬNULL(Возврат.СуммаВозврат, 0)) КАК Сумма,
| СУММА(ЕСТЬNULL(Реализация.НДСРеализация, 0) - ЕСТЬNULL(Возврат.НДСВозврат, 0)) КАК НДС,
| СУММА(ЕСТЬNULL(Реализация.СкидкаРеализация, 0)) КАК Скидка
|ИЗ
| Реализация КАК Реализация
| ПОЛНОЕ СОЕДИНЕНИЕ Возврат КАК Возврат
| ПО Реализация.Номенклатура = Возврат.Номенклатура
| Внутреннее соединение Справочник.Номенклатура КАК СпрНоменклатура
| По Реализация.Номенклатура = СпрНоменклатура.Ссылка
Показать
Я, явно неправильно соединяю.
Как правильно это сделать?
(51) vadim28, Когда левое, то левая таблица за основу берется, для построения фильтра по правой, но все строки одной сравниваются со всеми строками другой.
Когда внутреннее соединение, то оптимизатор считает их равноправными и сам решает с какой начать, а может и две сразу просмотреть и выбрать, а потом соединить.
Когда полное соединение, то хз (так ламеры делают).
Пишите так как работает, если разницы не наблюдается, т.к. в этом случае таблички маленькие и оптимизаторы глубого покласть на наши ожидания и он в параллель может сразу всю таблицу считывать.
Оптимизировать станете, когда начнутся тормоза, тогда и станет очевидно, какая табличка большая и как из нее поменьше выбрать лишнего.
(51) vadim28, капец, блин, вопрос в стиле "научите меня программировать", почитайте вначале это Изучение запросов. Но судя по вашим комментариям, вы и сам все "прекрасно знаете", но не понимаете почему просто не рабоает
(53) karpik666, подскажите разницу между этими кодами.
1:
Запрос.Текст = "ВЫБРАТЬ
| СпрНоменклатура.Ссылка КАК Номенклатура,
| СУММА(РеализацияТоваровУслугТовары.Количество) КАК Количество,
| СУММА(РеализацияТоваровУслугТовары.Сумма) КАК Сумма,
| СпрНоменклатура.СтавкаНДС КАК СтавкаНДС,
| СУММА(РеализацияТоваровУслугТовары.СуммаНДС) КАК НДС,
| СУММА(РеализацияТоваровУслугТовары.СуммаРучнойСкидки) КАК Скидка,
| СпрНоменклатура.ЕдиницаИзмерения.Представление КАК Ед,";
Если Отчет.Группе Тогда
Запрос.Текст = Запрос.Текст + "
| СпрНоменклатура.Родитель.Наименование КАК Артикул";
ИначеЕсли Отчет.Артикулу Тогда
Запрос.Текст = Запрос.Текст + "
| СпрНоменклатура.Артикул КАК Артикул";
Иначе
КонецЕсли;
Запрос.Текст = Запрос.Текст + "
|ИЗ
| Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
| Внутреннее соединение Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
| по РеализацияТоваровУслуг.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
| И РеализацияТоваровУслуг.Проведен = ИСТИНА
| И РеализацияТоваровУслуг.Ссылка = РеализацияТоваровУслугТовары.Ссылка
| Внутреннее соединение Справочник.Номенклатура КАК СпрНоменклатура
| по РеализацияТоваровУслугТовары.Номенклатура = СпрНоменклатура.Ссылка
| И СпрНоменклатура.Родитель В(&СписокНоменклатуры)
|
|СГРУППИРОВАТЬ ПО
| Артикул,
| СпрНоменклатура.Ссылка
|УПОРЯДОЧИТЬ ПО
Показать
2:
|ВЫБРАТЬ
| ЕСТЬNULL(Реализация.Номенклатура, Возврат.Номенклатура) КАК Номенклатура,
| ЕСТЬNULL(Реализация.Артикул_1, Возврат.Артикул_1) КАК Артикул,
| СпрНоменклатура.СтавкаНДС КАК СтавкаНДС,
| СпрНоменклатура.ЕдиницаИзмерения.Представление КАК Ед,
| СУММА(ЕСТЬNULL(Реализация.КоличествоРеализация, 0) - ЕСТЬNULL(Возврат.КоличествоВозврат, 0)) КАК Количество,
| СУММА(ЕСТЬNULL(Реализация.СуммаРеализация, 0) - ЕСТЬNULL(Возврат.СуммаВозврат, 0)) КАК Сумма,
| СУММА(ЕСТЬNULL(Реализация.НДСРеализация, 0) - ЕСТЬNULL(Возврат.НДСВозврат, 0)) КАК НДС,
| СУММА(ЕСТЬNULL(Реализация.СкидкаРеализация, 0)) КАК Скидка
|ИЗ
| Реализация КАК Реализация
| ПОЛНОЕ СОЕДИНЕНИЕ Возврат КАК Возврат
| ПО Реализация.Номенклатура = Возврат.Номенклатура
| Внутреннее соединение Справочник.Номенклатура КАК СпрНоменклатура
| По ЕСТЬNULL(Реализация.Номенклатура, Возврат.Номенклатура) = СпрНоменклатура.Ссылка
|СГРУППИРОВАТЬ ПО
| ЕСТЬNULL(Реализация.Артикул_1, Возврат.Артикул_1),
| ЕСТЬNULL(Реализация.Номенклатура, Возврат.Номенклатура)
|УПОРЯДОЧИТЬ ПО
| Артикул,
| Номенклатура
Показать
Как видим, почти одинаковы, но в 1-м группировка не нужна. В группу входит. Во 2-м уже нет и нужна группировка.
В чём разница? где ошибка?
(51) vadim28, вы что хотите получить?
Внутреннее соединение это выборка данных из обоих таблиц только удовлетворяющих условию.
Левое - выборка всех записей из левой таблицы, и тех записей из таблицы, которые удовлетворяют условия соединения.
Полное - это выборка как записей по условию соединения, так и всех остальных, которые не подходят по условию.
(54) StBender, это уже будет оптимизация. То потом.
Сейчас не об этом.
Сейчас про ошибки и соединение.
вот код, дошёл до этого момента:
|ВЫБРАТЬ
| ЕСТЬNULL(Реализация.Номенклатура, Возврат.Номенклатура) КАК Номенклатура,
| ЕСТЬNULL(Реализация.Артикул_1, Возврат.Артикул_1) КАК Артикул,
| СпрНоменклатура.СтавкаНДС КАК СтавкаНДС,
| СпрНоменклатура.ЕдиницаИзмерения.Представление КАК Ед,
| СУММА(ЕСТЬNULL(Реализация.КоличествоРеализация, 0) - ЕСТЬNULL(Возврат.КоличествоВозврат, 0)) КАК Количество,
| СУММА(ЕСТЬNULL(Реализация.СуммаРеализация, 0) - ЕСТЬNULL(Возврат.СуммаВозврат, 0)) КАК Сумма,
| СУММА(ЕСТЬNULL(Реализация.НДСРеализация, 0) - ЕСТЬNULL(Возврат.НДСВозврат, 0)) КАК НДС,
| СУММА(ЕСТЬNULL(Реализация.СкидкаРеализация, 0)) КАК Скидка
|ИЗ
| Реализация КАК Реализация
| ПОЛНОЕ СОЕДИНЕНИЕ Возврат КАК Возврат
| ПО Реализация.Номенклатура = Возврат.Номенклатура
| Внутреннее соединение Справочник.Номенклатура КАК СпрНоменклатура
| По ЕСТЬNULL(Реализация.Номенклатура, Возврат.Номенклатура) = СпрНоменклатура.Ссылка
|СГРУППИРОВАТЬ ПО
Показать
Выдаёт ошибку что не входит в группу.
СпрНоменклатура.СтавкаНДС КАК СтавкаНДС,
и строка:
| ЕСТЬNULL(Реализация.СтавкаНДСРеализация, Возврат.СтавкаНДСВозврат) КАК СтавкаНДС,
(69) StBender, А вот тут и начинаются чудеса.
Вот этот код 1:
|Из
| Документ.ВозвратТоваровОтПокупателя.Товары КАК ВозвратТоваровТовары
| Внутреннее соединение Документ.ВозвратТоваровОтПокупателя КАК ВозвратТоваровУслуг
| по ВозвратТоваровУслуг.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
| И ВозвратТоваровУслуг.Проведен = ИСТИНА
| И ВозвратТоваровУслуг.Ссылка = ВозвратТоваровТовары.Ссылка
| Внутреннее соединение Справочник.Номенклатура КАК СпрНоменклатура
| по ВозвратТоваровТовары.Номенклатура = СпрНоменклатура.Ссылка
| И СпрНоменклатура.Родитель В(&СписокНоменклатуры)
Показать
оказывается намного быстрее чем 2:
|ИЗ
| Документ.ВозвратТоваровОтПокупателя.Товары КАК ВозвратТоваровТовары
| Внутреннее соединение
| Справочник.Номенклатура КАК СпрНоменклатура
| по ВозвратТоваровТовары.Номенклатура = СпрНоменклатура.Ссылка
|ГДЕ
| ВозвратТоваровТовары.Ссылка.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
| И ВозвратТоваровТовары.Ссылка.Проведен = ИСТИНА
| И СпрНоменклатура.Родитель В(&СписокНоменклатуры)
Показать
Разница огромная.
1-й код работает 2-5 сек, а 2-й от 2-х минут.
(69) StBender, Ну скажем так:
1) Много исходных строк и каждую надо выбрать
2) а потом ОБРАБОТАТЬ, и это не простенькая агрегатная функция, а целый кейс (если,тогда)
3) а результат вычисления кейса известен заранее, т.е. еще когда запрос строится.
Что вызывает тормоза по важности:
1) попал рядом с индексом
2) нацеплял левых соединений
3) наделал много кейсов, которые мог бы избежать
Вы попали в пункт 3. Оптимизатор должен отреагировать на Ваш кейс действиями. И это будет дополнительная обработка каждой строки.
(77) ture, Да, может вы и правы, но когда сидишь на хорошем компьютере и ждёшь 2-15 мин выполнения отчёта - можно потерпеть.
Но когда бухгалтера сидели и часами ждали на своих древних машинах, тут уж, простите, №1 - быстродействие.
(61) vadim28, так уберите агрегатные функции СУММА (по факту, эти функции начинают группировку строк). Если у вас уже всё сгруппировано и просуммировано в первых двух запросах, то в итоговый запрос у вас попадут итоговые значения и группировать, да уж и суммировать вам тут не имеет смысла.
(8) dj_serega, а группировать, сортировать и итоги считать по какому полю, АртикулВозврат или АртикулРеализация?
После команды Поместить Возврат или Поместить Реализация, он сам присваивает значения Реализация.Артикул и Возврат.Артикул.
(21) vadim28, я бы всё таки очень рекомендовал вот эту и подобные конструкции
Если Отчет.Группе Тогда
Запрос.Текст = Запрос.Текст + "
| спрНоменклатура.Родитель.Наименование КАК Артикул";
ИначеЕсли Отчет.Артикулу Тогда
Запрос.Текст = Запрос.Текст + "
| спрНоменклатура.Артикул КАК Артикул";
КонецЕсли;
Преобразовать вот в подобные
|ВЫБОР
| КОГДА
| &ФлагГруппе=Истина
| ТОГДА
| спрНоменклатура.Родитель.Наименование
| ИНАЧЕ
| спрНоменклатура.Артикул
|КОНЕЦ КАК Артикул_1
Показать
Где ФлагГруппе истина, если Отчет.Группе = Истина. Ну и потом весь запрос загнать в конструктор запросов и посмотреть что с ним не так.
Запрос.Текст = "ВЫБРАТЬ
| спрНоменклатура.Ссылка КАК Номенклатура,
| СУММА(РеализацияТоваровУслугТовары.Количество) КАК КоличествоРеализация,
| СУММА(РеализацияТоваровУслугТовары.Сумма) КАК СуммаРеализация,
| спрНоменклатура.СтавкаНДС КАК СтавкаНДС,
| СУММА(РеализацияТоваровУслугТовары.СуммаНДС) КАК НДСРеализация,
| СУММА(РеализацияТоваровУслугТовары.СуммаРучнойСкидки) КАК СкидкаРеализация,
| спрНоменклатура.ЕдиницаИзмерения.Представление КАК Ед,
|ВЫБОР
| КОГДА
| &ФлагГруппе=Истина
| ТОГДА
| спрНоменклатура.Родитель.Наименование
| ИНАЧЕ
| спрНоменклатура.Артикул
|КОНЕЦ КАК Артикул_1
|ПОМЕСТИТЬ Реализация
|ИЗ
| Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
| Внутреннее соединение Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
| по РеализацияТоваровУслуг.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
| И РеализацияТоваровУслуг.Проведен = ИСТИНА
| И РеализацияТоваровУслуг.Ссылка = РеализацияТоваровУслугТовары.Ссылка
| Внутреннее соединение Справочник.Номенклатура КАК СпрНоменклатура
| по РеализацияТоваровУслугТовары.Номенклатура = СпрНоменклатура.Ссылка
| И СпрНоменклатура.Родитель В(&СписокНоменклатуры)
|СГРУППИРОВАТЬ ПО
| Артикул_1,
| СпрНоменклатура.ссылка
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| спрНоменклатура.Ссылка КАК Номенклатура,
| СУММА(РеализацияТоваровУслугТовары.Количество) КАК КоличествоВозврат,
| СУММА(РеализацияТоваровУслугТовары.Сумма) КАК СуммаВозврат,
| спрНоменклатура.СтавкаНДС КАК СтавкаНДС,
| СУММА(РеализацияТоваровУслугТовары.СуммаНДС) КАК НДСВозврат,
| спрНоменклатура.ЕдиницаИзмерения.Представление КАК Ед,
|ВЫБОР
| КОГДА
| &ФлагГруппе=Истина
| ТОГДА
| спрНоменклатура.Родитель.Наименование
| ИНАЧЕ
| спрНоменклатура.Артикул
|КОНЕЦ КАК Артикул_1
|ПОМЕСТИТЬ Возврат
|ИЗ
| Документ.ВозвратТоваровОтПокупателя.Товары КАК РеализацияТоваровУслугТовары
| Внутреннее соединение Документ.ВозвратТоваровОтПокупателя КАК РеализацияТоваровУслуг
| по РеализацияТоваровУслуг.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
| И РеализацияТоваровУслуг.Проведен = ИСТИНА
| И РеализацияТоваровУслуг.Ссылка = РеализацияТоваровУслугТовары.Ссылка
| Внутреннее соединение Справочник.Номенклатура КАК СпрНоменклатура
| по РеализацияТоваровУслугТовары.Номенклатура = СпрНоменклатура.Ссылка
| И СпрНоменклатура.Родитель В(&СписокНоменклатуры)
|СГРУППИРОВАТЬ ПО
| Артикул_1,
| СпрНоменклатура.ссылка
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ЕСТЬNULL(Реализация.Номенклатура, Возврат.Номенклатура) КАК Номенклатура,
// | ЕСТЬNULL(Реализация.Артикул_1, Возврат.Артикул_1) КАК ОбщийАртикул,
| СУММА(ЕСТЬNULL(Реализация.КоличествоРеализация, 0) - ЕСТЬNULL(Возврат.КоличествоВозврат, 0)) КАК Количество,
| СУММА(ЕСТЬNULL(Реализация.СуммаРеализация, 0) - ЕСТЬNULL(Возврат.СуммаВозврат, 0)) КАК Сумма,
| СУММА(ЕСТЬNULL(Реализация.НДСРеализация, 0) - ЕСТЬNULL(Возврат.НДСВозврат, 0)) КАК НДС,
| СУММА(ЕСТЬNULL(Реализация.СкидкаРеализация, 0)) КАК Скидка
|ИЗ
| Реализация КАК Реализация
| ПОЛНОЕ СОЕДИНЕНИЕ Возврат КАК Возврат
| ПО Реализация.Номенклатура = Возврат.Номенклатура
| И Реализация.Артикул_1 = Возврат.Артикул_1
|СГРУППИРОВАТЬ ПО
| ЕСТЬNULL(Реализация.Артикул_1, Возврат.Артикул_1),
| ЕСТЬNULL(Реализация.Номенклатура, Возврат.Номенклатура)
|УПОРЯДОЧИТЬ ПО
| Артикул_1,
| Номенклатура
|ИТОГИ
| СУММА(Количество),
| СУММА(Сумма),
| СУММА(Скидка),
| СУММА(НДС)
|ПО
| Артикул_1,
| Номенклатура";
Показать
Вставил вот так. В результате выдал ошибку: Не задано значение параметра "ФлагГруппе" <<?>>&ФлагГруппе=Истина.
Если Отчет.Группе Тогда
Запрос.УстановитьПараметр("ФлагГруппе", Истина);
ИначеЕсли Отчет.Артикулу Тогда
Запрос.УстановитьПараметр("ФлагГруппе", Ложь);
КонецЕсли;
| ПОЛНОЕ СОЕДИНЕНИЕ Возврат КАК Возврат
| ПО Реализация.Номенклатура = Возврат.Номенклатура
| И Реализация.Артикул = Возврат.Артикул
|СГРУППИРОВАТЬ ПО
| ЕСТЬNULL(Реализация.Артикул, Возврат.Артикул),
| ЕСТЬNULL(Реализация.Номенклатура, Возврат.Номенклатура)
Нужно по аналогии с куском:
"Если Отчет.Группе Тогда
Запрос.Текст = Запрос.Текст + "
| спрНоменклатура.Родитель.Наименование КАК Артикул";
ИначеЕсли Отчет.Артикулу Тогда
Запрос.Текст = Запрос.Текст + "
| спрНоменклатура.Артикул КАК Артикул";
Иначе
КонецЕсли; "
Добавить условие в месте группировки:
СГРУППИРОВАТЬ ПО
| Артикул,
Т.е. Или
СГРУППИРОВАТЬ ПО Если "условие" спрНоменклатура.Родитель.Наименование иначе спрНоменклатура.Артикул
(5) Капитан.Кук, не работает.
Изменения:
|СГРУППИРОВАТЬ ПО";
Если Отчет.Группе Тогда
Запрос.Текст = Запрос.Текст + "
| спрНоменклатура.Родитель.Наименование,";
Иначе
Запрос.Текст = Запрос.Текст + "
| спрНоменклатура.Артикул,";
КонецЕсли;
Запрос.Текст = Запрос.Текст + "
| СпрНоменклатура.ссылка
Выдаёт ту же ошибку:
{Форма.ФормаОтчета.Форма(236)}: Ошибка при вызове метода контекста (Выполнить)
РезультатПоГруппам = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
по причине:
{(66, 2)}: Неоднозначное поле "Артикул"
<<?>>Артикул,
Запрос.Текст = "ВЫБРАТЬ
| СпрНоменклатура.Ссылка КАК Номенклатура,
| СУММА(РеализацияТоваровУслугТовары.Количество) КАК КоличествоРеализация,
| СУММА(РеализацияТоваровУслугТовары.Сумма) КАК СуммаРеализация,
| СпрНоменклатура.СтавкаНДС КАК СтавкаНДСРеализация,
| СУММА(РеализацияТоваровУслугТовары.СуммаНДС) КАК НДСРеализация,
| СУММА(РеализацияТоваровУслугТовары.СуммаРучнойСкидки) КАК СкидкаРеализация,
| СпрНоменклатура.ЕдиницаИзмерения.Представление КАК Ед,
|ВЫБОР
| КОГДА
| &ФлагГруппе=Истина
| ТОГДА
| СпрНоменклатура.Родитель.Наименование
| ИНАЧЕ
| СпрНоменклатура.Артикул
|КОНЕЦ КАК Артикул_1
|ПОМЕСТИТЬ Реализация
|ИЗ
| Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
| Внутреннее соединение Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
| по РеализацияТоваровУслуг.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
| И РеализацияТоваровУслуг.Проведен = ИСТИНА
| И РеализацияТоваровУслуг.Ссылка = РеализацияТоваровУслугТовары.Ссылка
| Внутреннее соединение Справочник.Номенклатура КАК СпрНоменклатура
| по РеализацияТоваровУслугТовары.Номенклатура = СпрНоменклатура.Ссылка
| И СпрНоменклатура.Родитель В(&СписокНоменклатуры)
|СГРУППИРОВАТЬ ПО";
Если Отчет.Группе Тогда
Запрос.Текст = Запрос.Текст + "
| СпрНоменклатура.Родитель.Наименование,";
ИначеЕсли Отчет.Артикулу Тогда
Запрос.Текст = Запрос.Текст + "
| СпрНоменклатура.Артикул,";
КонецЕсли;
Запрос.Текст = Запрос.Текст + "
| СпрНоменклатура.Ссылка
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| СпрНоменклатура.Ссылка КАК Номенклатура,
| СУММА(РеализацияТоваровУслугТовары.Количество) КАК КоличествоВозврат,
| СУММА(РеализацияТоваровУслугТовары.Сумма) КАК СуммаВозврат,
| СпрНоменклатура.СтавкаНДС КАК СтавкаНДСВозврат,
| СУММА(РеализацияТоваровУслугТовары.СуммаНДС) КАК НДСВозврат,
| СпрНоменклатура.ЕдиницаИзмерения.Представление КАК Ед,
|ВЫБОР
| КОГДА
| &ФлагГруппе=Истина
| ТОГДА
| СпрНоменклатура.Родитель.Наименование
| ИНАЧЕ
| СпрНоменклатура.Артикул
|КОНЕЦ КАК Артикул_1
|ПОМЕСТИТЬ Возврат
|ИЗ
| Документ.ВозвратТоваровОтПокупателя.Товары КАК РеализацияТоваровУслугТовары
| Внутреннее соединение Документ.ВозвратТоваровОтПокупателя КАК РеализацияТоваровУслуг
| по РеализацияТоваровУслуг.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
| И РеализацияТоваровУслуг.Проведен = ИСТИНА
| И РеализацияТоваровУслуг.Ссылка = РеализацияТоваровУслугТовары.Ссылка
| Внутреннее соединение Справочник.Номенклатура КАК СпрНоменклатура
| по РеализацияТоваровУслугТовары.Номенклатура = СпрНоменклатура.Ссылка
| И СпрНоменклатура.Родитель В(&СписокНоменклатуры)
|СГРУППИРОВАТЬ ПО";
Если Отчет.Группе Тогда
Запрос.Текст = Запрос.Текст + "
| СпрНоменклатура.Родитель.Наименование,";
ИначеЕсли Отчет.Артикулу Тогда
Запрос.Текст = Запрос.Текст + "
| СпрНоменклатура.Артикул,";
КонецЕсли;
Запрос.Текст = Запрос.Текст + "
| СпрНоменклатура.Ссылка
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ЕСТЬNULL(Реализация.Номенклатура, Возврат.Номенклатура) КАК Номенклатура,
| ЕСТЬNULL(Реализация.Артикул_1, Возврат.Артикул_1) КАК Артикул,
| ЕСТЬNULL(Реализация.СтавкаНДСРеализация, Возврат.СтавкаНДСВозврат) КАК СтавкаНДС,
| СУММА(ЕСТЬNULL(Реализация.КоличествоРеализация, 0) - ЕСТЬNULL(Возврат.КоличествоВозврат, 0)) КАК Количество,
| СУММА(ЕСТЬNULL(Реализация.СуммаРеализация, 0) - ЕСТЬNULL(Возврат.СуммаВозврат, 0)) КАК Сумма,
| СУММА(ЕСТЬNULL(Реализация.НДСРеализация, 0) - ЕСТЬNULL(Возврат.НДСВозврат, 0)) КАК НДС,
| СУММА(ЕСТЬNULL(Реализация.СкидкаРеализация, 0)) КАК Скидка
|ИЗ
| Реализация КАК Реализация
| ПОЛНОЕ СОЕДИНЕНИЕ Возврат КАК Возврат
| ПО Реализация.Номенклатура = Возврат.Номенклатура
| И Реализация.Артикул_1 = Возврат.Артикул_1
|СГРУППИРОВАТЬ ПО
| ЕСТЬNULL(Реализация.Артикул_1, Возврат.Артикул_1),
| ЕСТЬNULL(Реализация.Номенклатура, Возврат.Номенклатура)
|УПОРЯДОЧИТЬ ПО
| Артикул,
| Номенклатура
|ИТОГИ
| СУММА(Количество),
| СУММА(Сумма),
| СУММА(Скидка),
| СУММА(НДС)
|ПО
| Артикул,
| Номенклатура";
Показать
На этот раз сообщение об ошибки такое:
{Форма.ФормаОтчета.Форма(241)}: Ошибка при вызове метода контекста (Выполнить)
РезультатПоГруппам = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
по причине:
{(67, 11)}: Поле не входит в группу "Реализация.СтавкаНДСРеализация"
ЕСТЬNULL(<<?>>Реализация.СтавкаНДСРеализация, Возврат.СтавкаНДСВозврат) КАК СтавкаНДС,
|ВЫБРАТЬ
| ЕСТЬNULL(Реализация.Номенклатура, Возврат.Номенклатура) КАК Номенклатура,
| (Реализация.Артикул_1, Возврат.Артикул_1) КАК Артикул,
| (Реализация.СтавкаНДСРеализация, Возврат.СтавкаНДСВозврат) КАК СтавкаНДС,
| (ЕСТЬNULL(Реализация.КоличествоРеализация, 0) - ЕСТЬNULL(Возврат.КоличествоВозврат, 0)) КАК Количество,
| (ЕСТЬNULL(Реализация.СуммаРеализация, 0) - ЕСТЬNULL(Возврат.СуммаВозврат, 0)) КАК Сумма,
| (ЕСТЬNULL(Реализация.НДСРеализация, 0) - ЕСТЬNULL(Возврат.НДСВозврат, 0)) КАК НДС,
| (ЕСТЬNULL(Реализация.СкидкаРеализация, 0)) КАК Скидка
|ИЗ
| КАК Реализация
| СОЕДИНЕНИЕ Возврат КАК Возврат
| Реализация.Номенклатура = Возврат.Номенклатура
| Реализация.Артикул_1 = Возврат.Артикул_1
|ПО
| (Реализация.Артикул_1, Возврат.Артикул_1),
| (Реализация.Номенклатура, Возврат.Номенклатура)
Показать
Вы используете Номенклатура, Артикул. А что делать с остальными? Ставка, Кол., Сумма, НДС и Скидка.
или по ним тоже группируйте или через агрегатные фукнции (Сумма, Максимум...).
(31) dj_serega, К сожалению, нет.
Здесь другое. Что-то не так с самим выбором, а что ни так понять не могу.
Если сделать как вы советуете, то вместо значений Ед и СтавкаНДС выводятся пустота.
(31) dj_serega,
Вот пример просто реализации.
Номенклатура Ед. изм. Количество, кг Сумма Скидка НДС Сумма НДС
01 Варёные колбасы 26 254,140 6 259 248,79 54 173,27 569 022,60
Азовская п/а 1с кг 4 659,470 1 010 684,54 14 398,86 10% 91 880,41
Азовская с салом п/а 1с кг 1 126,990 230 256,11 5 284,80 10% 20 932,38
вот текст реализации:
Запрос.Текст = "ВЫБРАТЬ
| СпрНоменклатура.Ссылка КАК Номенклатура,
| СУММА(РеализацияТоваровУслугТовары.Количество) КАК Количество,
| СУММА(РеализацияТоваровУслугТовары.Сумма) КАК Сумма,
| СпрНоменклатура.СтавкаНДС КАК СтавкаНДС,
| СУММА(РеализацияТоваровУслугТовары.СуммаНДС) КАК НДС,
| СУММА(РеализацияТоваровУслугТовары.СуммаРучнойСкидки) КАК Скидка,
| СпрНоменклатура.ЕдиницаИзмерения.Представление КАК Ед,";
Если Отчет.Группе Тогда
Запрос.Текст = Запрос.Текст + "
| СпрНоменклатура.Родитель.Наименование КАК Артикул";
ИначеЕсли Отчет.Артикулу Тогда
Запрос.Текст = Запрос.Текст + "
| СпрНоменклатура.Артикул КАК Артикул";
Иначе
КонецЕсли;
Запрос.Текст = Запрос.Текст + "
|ИЗ
| Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
| Внутреннее соединение Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
| по РеализацияТоваровУслуг.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
| И РеализацияТоваровУслуг.Проведен = ИСТИНА
| И РеализацияТоваровУслуг.Ссылка = РеализацияТоваровУслугТовары.Ссылка
| Внутреннее соединение Справочник.Номенклатура КАК СпрНоменклатура
| по РеализацияТоваровУслугТовары.Номенклатура = СпрНоменклатура.Ссылка
| И СпрНоменклатура.Родитель В(&СписокНоменклатуры)
|
|СГРУППИРОВАТЬ ПО
| Артикул,
| СпрНоменклатура.Ссылка
|УПОРЯДОЧИТЬ ПО
| Артикул,
| СпрНоменклатура.Наименование
|ИТОГИ
| СУММА(Количество),
| СУММА(Сумма),
| СУММА(Скидка),
| СУММА(НДС)
|ПО
| Артикул,
| Номенклатура";
| СпрНоменклатура.Ссылка КАК Номенклатура,
| СУММА(РеализацияТоваровУслугТовары.Количество) КАК КоличествоРеализация,
| СУММА(РеализацияТоваровУслугТовары.Сумма) КАК СуммаРеализация,
| СпрНоменклатура.СтавкаНДС КАК СтавкаНДСРеализация,
| СУММА(РеализацияТоваровУслугТовары.СуммаНДС) КАК НДСРеализация,
| СУММА(РеализацияТоваровУслугТовары.СуммаРучнойСкидки) КАК СкидкаРеализация,
| СпрНоменклатура.ЕдиницаИзмерения.Представление КАК ЕдРеализация,
|ВЫБОР
| КОГДА
| &ФлагГруппе=Истина
| ТОГДА
| СпрНоменклатура.Родитель.Наименование
| ИНАЧЕ
| СпрНоменклатура.Артикул
|КОНЕЦ КАК Артикул_1
|ПОМЕСТИТЬ Реализация
|ИЗ
| Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
| Внутреннее соединение Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
| по РеализацияТоваровУслуг.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
| И РеализацияТоваровУслуг.Проведен = ИСТИНА
| И РеализацияТоваровУслуг.Ссылка = РеализацияТоваровУслугТовары.Ссылка
| Внутреннее соединение Справочник.Номенклатура КАК СпрНоменклатура
| по РеализацияТоваровУслугТовары.Номенклатура = СпрНоменклатура.Ссылка
| И СпрНоменклатура.Родитель В(&СписокНоменклатуры)
Показать
и третья выборка:
|ВЫБРАТЬ
| ЕСТЬNULL(Реализация.Номенклатура, Возврат.Номенклатура) КАК Номенклатура,
| ЕСТЬNULL(Реализация.Артикул_1, Возврат.Артикул_1) КАК Артикул,
| СпрНоменклатура.СтавкаНДС КАК СтавкаНДС,
| СпрНоменклатура.ЕдиницаИзмерения.Представление КАК Ед,
| СУММА(ЕСТЬNULL(Реализация.КоличествоРеализация, 0) - ЕСТЬNULL(Возврат.КоличествоВозврат, 0)) КАК Количество,
| СУММА(ЕСТЬNULL(Реализация.СуммаРеализация, 0) - ЕСТЬNULL(Возврат.СуммаВозврат, 0)) КАК Сумма,
| СУММА(ЕСТЬNULL(Реализация.НДСРеализация, 0) - ЕСТЬNULL(Возврат.НДСВозврат, 0)) КАК НДС,
| СУММА(ЕСТЬNULL(Реализация.СкидкаРеализация, 0)) КАК Скидка
|ИЗ
| Реализация КАК Реализация
| ПОЛНОЕ СОЕДИНЕНИЕ Возврат КАК Возврат
| ПО Реализация.Номенклатура = Возврат.Номенклатура
| И Реализация.Артикул_1 = Возврат.Артикул_1
| Внутреннее соединение Справочник.Номенклатура КАК СпрНоменклатура
| По Реализация.Номенклатура = СпрНоменклатура.Ссылка
Показать
Пробую пока менять, не хотит работать. Пока что не разобрался.
(40) vadim28, ну из мелких ошибок строятся общие. Да такой вопрос. Не избыточное ли условие для объединения двух таблиц в третьем запросе (я про соединение по артикулу). Ведь вы же соединяете по ссылкам на справочник. У вас просто соединение таблицы и документа, на мой взгляд, неправильное. Условия которые должны быть в секции ГДЕ у вас в соединении. Корректнее будет так.
ИЗ
| Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
| Внутреннее соединение
| Справочник.Номенклатура КАК СпрНоменклатура
| по РеализацияТоваровУслугТовары.Номенклатура = СпрНоменклатура.Ссылка
|ГДЕ
| РеализацияТоваровУслугТовары.Ссылка.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
| И РеализацияТоваровУслугТовары.Ссылка.Проведен = ИСТИНА
| И СпрНоменклатура.Родитель В(&СписокНоменклатуры)
(78) ture, Возвраты всегда позже реализации. Так что, да. Если имеет место быть другая последовательность, то ........... такого не может быть и это явная ошибка создававшего документ.
(78) ture, сначала продаём, потом нам возвращают или нет купленный у нас товар или продукцию. Другой последовательности, просто, не может быть. Как нам могут вернуть то, чего ни когда у нас не покупали?