Написал программку по выводу остатков в документ "ПеремещениеТоваров". Не всегда показывает правильные остатки (в некоторых строчках не правильные). Медлено открывается документ.
Массив = Новый Массив; Массив2 = Новый Массив; Для Каждого ОформлениеСтроки из ОформленияСтрок Цикл Массив.Добавить(ОформлениеСтроки.ДанныеСтроки.Номенклатура); Массив2.Добавить(ОформлениеСтроки.ДанныеСтроки.ХарактеристикаНоменклатуры); КонецЦикла;
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ТоварыНаСкладахОстатки.Номенклатура, | ТоварыНаСкладахОстатки.КоличествоОстаток КАК ОстатокНаВыбраномСкладе //, |ИЗ | РегистрНакопления.ТоварыНаСкладах.Остатки(&Дата, Склад = &ВыбСклад) КАК ТоварыНаСкладахОстатки |ГДЕ | ТоварыНаСкладахОстатки.Номенклатура В(&спНоменклатура) и ТоварыНаСкладахОстатки.ХарактеристикаНоменклатуры В(&спХарактеристикаНоменклатуры)";
Для Каждого ОформлениеСтроки из ОформленияСтрок Цикл строкаТЗ = тз.Найти(Новый Структура("Номенклатура", ОформлениеСтроки.ДанныеСтроки.Номенклатура)); строкаТЗ = тз.Найти(ОформлениеСтроки.ДанныеСтроки.Номенклатура, "Номенклатура"); Если строкаТЗ = Неопределено Тогда зн1 = ""; Иначе зн1 = строкаТЗ.ОстатокНаВыбраномСкладе; КонецЕсли; если ЭтотОбъект.Проведен тогда зн1 = зн1 - ОформлениеСтроки.ДанныеСтроки.Количество; КонецЕсли;
Живет на форуме
Группа: Пользователи
Сообщений: 4121
Из: Киев
Спасибо сказали: 957 раз
Рейтинг: 0
Цитата(nazarenko @ 01.09.13, 15:11)
Медлено открывается документ.
Надо так:
|ИЗ | РегистрНакопления.ТоварыНаСкладах.Остатки(&Дата, Склад = &ВыбСклад, Номенклатура В(&спНоменклатура), ХарактеристикаНоменклатуры В(&спХарактеристикаНоменклатуры)) КАК ТоварыНаСкладахОстатки
Если ведётся учет по характеристикам - то код неправильный. Если указывается склад в табличной части - код неправильный. А что показывает правильный остаток? Может в том месте остаток с учетом резервов?
У нас здесь своя атмосфера...
Группа: Основатель
Сообщений: 13958
Из: Киев
Спасибо сказали: 4524 раз
Рейтинг: 3647.7
Запомните, что всегда стоит использовать параметры виртуальной таблицы, если это возможно. Т.е. в вашем случае условие из ГДЕ надо перенести туда, где у вас условие по складу находится (с учетом замечаний Ardi).
Вот на примере "Как вывести остатки на складах в списке номенклатуры?":
... Если ведётся учет по характеристикам - то код неправильный. Если указывается склад в табличной части - код неправильный. А что показывает правильный остаток? Может в том месте остаток с учетом резервов?
Да, учет ведется по характеристикам. Как правильно? Нет, склад не в табличной части (он в "шапке" документа). Резервы не используются. Похоже, что остаток выдается не правильно там где повторяется номенклатура, а характеристики разные.
Цитата(Vofka @ 01.09.13, 15:27)
Запомните, что всегда стоит использовать параметры виртуальной таблицы, если это возможно. Т.е. в вашем случае условие из ГДЕ надо перенести туда, где у вас условие по складу находится (с учетом замечаний Ardi).
Вот на примере "Как вывести остатки на складах в списке номенклатуры?": ...
Живет на форуме
Группа: Пользователи
Сообщений: 4121
Из: Киев
Спасибо сказали: 957 раз
Рейтинг: 0
Цитата(nazarenko @ 01.09.13, 17:39)
Да, учет ведется по характеристикам.
Отбор = Новый Структура(); Отбор.Вставить("Номенклатура",ОформлениеСтроки.ДанныеСтроки.Номенклатура); Отбор.Вставить("ХарактеристикаНоменклатуры",ОформлениеСтроки.ДанныеСтроки.ХарактеристикаНоменклатуры);
Строки = СписокРаботников.НайтиСтроки(Отбор); Если Строки.Количество() > 0 Тогда зн1=Строки[0].ОстатокНаВыбраномСкладе; Иначе зн1 = ""; КонецЕсли;
Отбор = Новый Структура(); Отбор.Вставить("Номенклатура",ОформлениеСтроки.ДанныеСтроки.Номенклатура); Отбор.Вставить("ХарактеристикаНоменклатуры",ОформлениеСтроки.ДанныеСтроки.ХарактеристикаНоменклатуры);
Строки = СписокРаботников.НайтиСтроки(Отбор); Если Строки.Количество() > 0 Тогда зн1=Строки[0].ОстатокНаВыбраномСкладе; Иначе зн1 = ""; КонецЕсли;
Переделал:
Отбор = Новый Структура(); Отбор.Вставить("спНоменклатура", ОформлениеСтроки.ДанныеСтроки.Номенклатура); Отбор.Вставить("спХарактеристикаНоменклатуры", ОформлениеСтроки.ДанныеСтроки.ХарактеристикаНоменклатуры);
Строки = ТЗ.НайтиСтроки(Отбор); Если Строки.Количество() > 0 Тогда зн1= Строки[0].ОстатокНаВыбраномСкладе; Иначе зн1 = ""; КонецЕсли;
Выдает ошибку:
{Документ.ПеремещениеТоваров.Форма.ФормаДокумента.Форма(75)}: Ошибка при вызове метода контекста (НайтиСтроки) Строки = ТЗ.НайтиСтроки(Отбор); по причине: Неверное имя колонки
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!