Сам по себе запрос движений и не должен делать . Он после оператора Запрос.Выполнить().Выгрузить(); должен дать Вам таблицу по остаткам, если они есть. Проверьте этот момент в отладчике. А движения делает оператор Движения.ВзаиморасчетыСКонтрагентами.Записать();
До этого, я выкладывала только кусок, который формирует остатки таблицей и заносит ее в таблицу движений, но не записывает сами движения. Я предполагала, что запись движений Вы уже сделаете самостоятельно, после того, как добавите в таблицу движений ещё и движения по новым значения регистра. Если причина всё же не в этом, то приведите здесь свой кусок кода полностью. Так ведь долго можно гадать, что же там не так ...
Написал следующее:
НаборДвижений = Движения.ВзаиморасчетыСКонтрагентами; ТаблицаДвижений = НаборДвижений.Выгрузить(); ТаблицаДвижений.Очистить(); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ВзаиморасчетыСКонтрагентамиОстатки.СуммаВзаиморасчетовОстаток КАК СуммаВзаиморасчетов, | ВзаиморасчетыСКонтрагентамиОстатки.СуммаУпрОстаток КАК СуммаУпр |ИЗ | РегистрНакопления.ВзаиморасчетыСКонтрагентами.Остатки(&Дата, | ДоговорКонтрагента = &ДоговорКонтрагента) КАК ВзаиморасчетыСКонтрагентамиОстатки"; Запрос.УстановитьПараметр("Дата", Новый Граница(Дата, ВидГраницы.Исключая)); Запрос.УстановитьПараметр("ДоговорКонтрагента", ДоговорКонтрагента); Выборка = Запрос.Выполнить().Выбрать(); Если Выборка.Следующий() Тогда Движение = Движения.ВзаиморасчетыСКонтрагентами.Добавить(); Движение.ВидДвижения = ВидДвиженияНакопления.Расход; Движение.Период = Дата; Движение.ДоговорКонтрагента = ДоговорКонтрагента; Движение.СуммаВзаиморасчетов = Выборка.СуммаВзаиморасчетов; Движение.СуммаУпр = Выборка.СуммаУпр; КонецЕсли; // Приход Движение = Движения.ВзаиморасчетыСКонтрагентами.Добавить(); Движение.ВидДвижения = ВидДвиженияНакопления.Приход; Движение.Период = Дата; Движение.ДоговорКонтрагента = ДоговорКонтрагента; Движение.СуммаВзаиморасчетов = Долг; Движение.СуммаУпр = Долг;
Словно с кассовым аппаратом работаете ... Движение с минусом делает документ? Просмотрите по отчету по взаиморасчетам почему вылазят остатки, может не все измерения учли, с датой(временем) что-то не так
в том то и дело, что не делает(( уже и с конструктором запросов делал запрос, все равно ничего((( продолжаю експеременты))
Да на здоровье ... только не используется полностью запрос, проанализируйте измерения в регистре Взаиморасчеты вашей конфигурации.. я вот только заметила , что ВидДеятельности - это добавленное мною измерение, в типовой его нет... в вашей конфе могут быть другие различия
Вставил запрос - все равно не обнуляет (( переделал под всои измерения... щас буду пробовать что-нить изменить((
В движениях так, но получение данных скорее всего нужно бы выполнить запросом, а потом просто выгрузить в таблицу движений, чтобы учесть правильно остатки по всем измерениям регистра
Корректировка долга хороший документ, но надо вручную выщитывать разницу между фактическим долгом и долгом по базе и добавлять в поле уменьшение или увеличение долга... у нас очень много контрагентов и реально очень много времени на это потратится((
по поводу получения данных и записания их с обратным знаком :
Есть документ ВводОстатковВзаиморасчетов. При проведении надо чтоб долг контрагента обнулялся на дату проведения, а новое значение записывалось как долг. Подскажите, как обнулить... вот процедура
Процедура ОбработкаПроведения(Отказ, Режим)
// регистр ВзаиморасчетыСКонтрагентами Приход
Движение = Движения.ВзаиморасчетыСКонтрагентами.Добавить(); Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
хм, будет производительность списка номенклатуры страдать, но если хотите этим жертвовать, то в событии ПриОткрытии программно добавляете колонки со складами. Для этого перебирите все склады и с помощью .Колонки.Добавить(<ИмяСклада>,,<Заголовок>); сформируйте дополнительные колонки по складам. <ИмяСклада> - лучше брать так "Склад"+КодСклада, тогда вдальнейшем к нему можно легко обращаться (например, Склад000001,Склад000002) <Заголовок> - Собственно наименование склада которое будет отображаться в таблице
Затем уже в событии ПриПолученииДанных выполняете
Для каждого Строка Из ОформленияСтрок Цикл
Запрос = Новый Запрос;
ТекстЗапроса = " |ВЫБРАТЬ | ТоварыНаСкладахОстатки.Склад.Код, | ТоварыНаСкладахОстатки.Номенклатура, | СУММА(ТоварыНаСкладахОстатки.КоличествоОстаток) КАК КоличествоОстаток | |ИЗ | РегистрНакопления.ТоварыНаСкладах.Остатки(, Номенклатура = &Номенклатура) КАК ТоварыНаСкладахОстатки | |СГРУППИРОВАТЬ ПО | ТоварыНаСкладахОстатки.Склад.Код, | ТоварыНаСкладахОстатки.Номенклатура | |";
Запрос.Текст = ТекстЗапроса; РЗ = Запрос.Выполнить(); Выборка = РЗ.Выбрать() Пока Выборка.Следующий() Цикл Строка.Ячейки["Склад+"Выборка.Код].Значение=Формат(Выборка.КоличествоОстаток,"ЧЦ=15; ЧДЦ=0;"); // тут или Значение или Текст, точно не помню КонецЦикла;
КонецЦикла;
Результат запроса вернет сгрупированнуе по складам и номенклатуре остатки. Колонки ао складам будут иметь вид "Склад000001,Склад000002 и т.д." В обходе запроса прописываешь в ячейки остатки по складу. т.к. список номенклатуры не содержит серий и характеристик, то выбирать их не нужно Код писал от руки, не забудьте учесть группы. Но повторюсь это скажется на производительности. В форме списка номенклатуры есть подобный функционал, только он расчитывает данные для текущей строки. (Действия/Остатки товаров на складах)
пишет поле обьекта не обнаржено Код и выдает ошибку
{Справочник.Номенклатура.Форма.ФормаСписка(585)}: Поле объекта не обнаружено (Код) Строка.Ячейки.Склад["Склад"+Выборка.Код].Значение=Формат(Выборка.КоличествоОстаток,"ЧЦ=15; ЧДЦ=0;");
Не совсем понял что спрашиваете, какой регистр прописать. Но если имеете ввиду то что хотите получить основной склад из настроек прользователя (хранятся в регистре сведений), то советую изучить общий модуль УправлениеПользователями функцию ПолучитьЗначениеПоУмолчанию
в справочнике Номенклатура, к высшеупомянутому запросу надо прописать путь к регистру остатки номенклатуры, к отдельному складу, чтоб в поле Остаток выводило остаток по отдельным складам....
Для каждого Строка Из ОформленияСтрок Цикл Отбор = Новый Структура(); Отбор.Вставить("Номенклатура", Строка.ДанныеСтроки.Номенклатура); Отбор.Вставить("ХарактеристикаНоменклатуры", Строка.ДанныеСтроки.ХарактеристикаНоменклатуры); Отбор.Вставить("СерияНоменклатуры", Строка.ДанныеСтроки.СерияНоменклатуры); Отбор.Вставить("Склад",?(ЗначениеНеЗаполнено(Строка.ДанныеСтроки.Склад), Склад, Строка.ДанныеСтроки.Склад)); Отбор.Вставить("Качество", Строка.ДанныеСтроки.Качество); СтрокаПоиска = ТЗ.НайтиСтроки(Отбор); Если СтрокаПоиска.Количество() > 0 Тогда ОстатокНаСкладе = СтрокаПоиска[0].КоличествоОстаток; Иначе ОстатокНаСкладе = 0; КонецЕсли; Строка.Ячейки.ОстатокНаСкладе.Значение=Формат(ОстатокНаСкладе,"ЧЦ=15; ЧДЦ=0;"); КонецЦикла;
оу, а без кнопок можно, потому что так все-же есть готовый отчет, можно узнать по нему , а старпёры , работающие складовиками, не понимают этого... они хотят все готовое, плачут, что не запомнят всего этого... у них стояла 7ка, а там все отображалось, мол, но она полетела и сейчас насяльника надумал 8-ку поставить, для этого судьба выбрала меня, как я немного знаком с 1с 8, заставили учить и переделывать все под потребности сотрудников.... вот такая ситуация, как обыкновенный переводчик становится или пытается стать программистом 1с....
О, великий изобретатель и властелин мира сего,Batchir, мне надо в форме списка добавить колонки остаток1, остаток2, чтоб в них отдельно отображался остаток по складах 1 и 2, так как в вышеупомянутой процедуре отображается суммарный остаток, надо что-то переделать так, чтоб отображалось то, что сказано выше))
слушай, тут пересмотрел отчет Остатки товаров на складах, может запрос будет такой:
|ВЫБРАТЬ //РАЗЛИЧНЫЕ | СУММА(КоличествоОстаток) КАК Количество, | Склад КАК Склад, | Номенклатура КАК Номенклатура,
|{ВЫБРАТЬ | Склад.* КАК Склад, | Номенклатура.* КАК Номенклатура,
| //СВОЙСТВА |} |ИЗ РегистрНакопления.ТоварыНаСкладах.Остатки(&ДатаКон, | {Склад.* КАК Склад, | Номенклатура.* КАК Номенклатура, |//СОЕДИНЕНИЯ |СГРУППИРОВАТЬ ПО | Номенклатура, | Склад
я переделываю конфигурацию УТ, для дальнейшей работы с ней... просто на нашем предприятии полно складов и продукция хранится на разных из них. Для облегчения набора накладных для менеджеров попросили сделать несколько ячеек, где б отображалось остатки по складам, не суммарный, а по отдельности... Вот и пробую сделать...
нету сил моих на это((( щас головой буду об стол бится((( последний раз такой злой был, когда 103 или 105 миссию в первом андерграунде проходил, там где 7 кругов, 2 клавиатуры разбил(((
и тут снова одно расстройство!!! за что мне такое?(((
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!