Имя: Пароль:
1C
1С v8
запрос по партиям
0 Alexey_AA
 
14.12.12
18:52
господа! почему данный запрос берет остатки следующего дня от проведения? как избавиться от этого?

"ВЫБРАТЬ
           |    ПартииТоваровНаСкладахОстатки.СтатусПартии,
           |    ПартииТоваровНаСкладахОстатки.КоличествоОстаток,
           |    ПартииТоваровНаСкладахОстатки.СтоимостьОстаток,
           |    ПартииТоваровНаСкладахОстатки.ДокументОприходования
           |ИЗ
           |    РегистрНакопления.ПартииТоваровНаСкладах.Остатки КАК ПартииТоваровНаСкладахОстатки
           |ГДЕ
           |    ПартииТоваровНаСкладахОстатки.Склад = &Склад
           |    И ПартииТоваровНаСкладахОстатки.Номенклатура = &Номенклатура";
1 1C-band
 
14.12.12
18:52
А период где вообще?
2 Alexey_AA
 
14.12.12
18:54
мля!!!! вот я торможу, это ж остатки :) надо домой ехать ужинать
3 Alexey_AA
 
14.12.12
20:04
и все же не могу разобраться, как выявить остаток на определенную дату?
4 Lys
 
14.12.12
20:24
открой для себя параметры виртуальных таблиц
5 Alexey_AA
 
14.12.12
20:36
(4) готов тебя расцеловать! уже два часа методом тыка перебираю все для меня казалось бы логичные и нелогичные решения, даже уже начал встроенный отчет ведомость по партиям на складах листать. и вот за минуту с твоей помощью управился!
давай я тебе на телефон хоть копеечку чтоли положу ? ;)
6 Alexey_AA
 
14.12.12
20:36
и до этого еще на работе два часа... :(
7 zak555
 
14.12.12
20:37
убери где, есть параметры виртуальной табличцы
8 Lys
 
14.12.12
20:38
(5) Не надо меня целовать, пожалуйста. Я предпочитаю девушек)
Лучше мануалы читай. Их же и целуй, в следующий раз. Разрешаю.
9 Alexey_AA
 
14.12.12
20:47
(8) ну я имел ввиду по-братски так сказать :)
10 Alexey_AA
 
14.12.12
20:49
да вот все думаю надо начать читать книгу, которая желтая в двух томах, да все времени нету :( понятное дело что сейчас потратив скорей всего сэкономлю в будущем много времени, но все кувырком в этой жизни получается :(
11 Alexey_AA
 
15.12.12
01:03
все бы ни чего, но мой запрос выбирает только из первой партии :(

       "ВЫБРАТЬ
       |    ПартииТоваровНаСкладахОстатки.СтатусПартии,
       |    ПартииТоваровНаСкладахОстатки.КоличествоОстаток,
       |    ПартииТоваровНаСкладахОстатки.СтоимостьОстаток,
       |    ПартииТоваровНаСкладахОстатки.ДокументОприходования
       |ИЗ
       |    РегистрНакопления.ПартииТоваровНаСкладах.Остатки(&ДатаДок, ) КАК ПартииТоваровНаСкладахОстатки
       |ГДЕ
       |    ПартииТоваровНаСкладахОстатки.Склад = &Склад
       |    И ПартииТоваровНаСкладахОстатки.Номенклатура = &Номенклатура";
12 zak555
 
15.12.12
01:07
(11)
1. не используй где, а используй

РегистрНакопления.ПартииТоваровНаСкладах.Остатки(&ДатаДок, Номенклатура = &Номенклатура и Склад = &Склад) КАК ПартииТоваровНаСкладахОстатки

2. напиши структуру регистра
13 Alexey_AA
 
15.12.12
01:11
конфигурация АФФ, на базе УТ, сейчас попробую скриншот сделать
14 Alexey_AA
 
15.12.12
01:18
15 zak555
 
15.12.12
01:30
запрос из цикла убери
+ покажи, что в регистре
16 Alexey_AA
 
15.12.12
01:43
в смысле показать? отчет по партиям?
а зачем убирать из цикла? мне надо каждую позицию проверить в партиях, если в одной партии не хватает для списания, цикл смотрит по следующей партии и так пока не добьет все количество, если остаток по партии меньше количества к списанию (с учетом списанных уже с партий) то делается отказ от проводки...
17 Alexey_AA
 
15.12.12
01:49
вот такой код. вроде теперь все правильно работает, сейчас попробую еще что б с нескольких партий брался товар.

Процедура ОбработкаПроведения(Отказ, РежимПроведения)
//движениеПартииТоваровНаСкладах();

///////////////////////////////////////
// движения по партиям    
   
Движения.ПартииТоваровНаСкладах.Записывать = Истина;
   Движения.ПартииТоваровНаСкладах.Очистить();

   Для Каждого ТекСтрокаМатериалы Из Материалы Цикл              //обходим строки материалов

       Запрос = Новый Запрос;
       Запрос.Текст =
       "ВЫБРАТЬ
       |    ПартииТоваровНаСкладахОстатки.СтатусПартии,
       |    ПартииТоваровНаСкладахОстатки.КоличествоОстаток,
       |    ПартииТоваровНаСкладахОстатки.СтоимостьОстаток,
       |    ПартииТоваровНаСкладахОстатки.ДокументОприходования
       |ИЗ
       |    РегистрНакопления.ПартииТоваровНаСкладах.Остатки(&ДатаДок, Номенклатура = &Номенклатура и Склад = &Склад) КАК ПартииТоваровНаСкладахОстатки ";

       Запрос.УстановитьПараметр("Номенклатура", ТекСтрокаМатериалы.Наименование);
       Запрос.УстановитьПараметр("Склад", справочники.Склады.НайтиПоНаименованию( Сотрудник.Наименование));
       Запрос.УстановитьПараметр("ДатаДок", Дата);

       
       Результат = Запрос.Выполнить();

       ВыборкаДетальныеЗаписи = Результат.Выбрать();

       колЗаписей=ВыборкаДетальныеЗаписи.Количество();

       количествоКСписанию=ТекСтрокаМатериалы.КолОП+ТекСтрокаМатериалы.КолДоп+ТекСтрокаМатериалы.КолСерв;

       счетчик=0;
       
       если колЗаписей=0 тогда
           Сообщить("Недостаточно для списания """+ТекСтрокаМатериалы.Наименование+ """ на складе "+Сотрудник.Наименование+"! Проводка отменена!");
           Отказ=истина;
           Возврат;
       КонецЕсли;
       
       Пока ВыборкаДетальныеЗаписи.Следующий() Цикл             //обходим выбранные записи регистров
           //делаем запись в регистр
           счетчик=счетчик+1;
           Движение = Движения.ПартииТоваровНаСкладах.Добавить();
           Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
           Движение.Период = Дата;
           Движение.Склад = справочники.Склады.НайтиПоНаименованию( Сотрудник.Наименование);
           Движение.ДокументОприходования=ВыборкаДетальныеЗаписи.ДокументОприходования;
           движение.Номенклатура=ТекСтрокаМатериалы.Наименование;
           Движение.Качество=Справочники.Качество.Новый;
           
           если количествоКСписанию<=ВыборкаДетальныеЗаписи.КоличествоОстаток тогда
               Движение.ДокументОприходования=ВыборкаДетальныеЗаписи.ДокументОприходования;
               Движение.Количество=количествоКСписанию ;
               Движение.СтатусПартии=ВыборкаДетальныеЗаписи.СтатусПартии;
               Движение.Стоимость=ВыборкаДетальныеЗаписи.СтоимостьОстаток;
               Прервать;
           иначеесли (количествоКСписанию> ВыборкаДетальныеЗаписи.КоличествоОстаток) и  (счетчик<колЗаписей) тогда
               Движение.ДокументОприходования=ВыборкаДетальныеЗаписи.ДокументОприходования;
               Движение.Количество=ВыборкаДетальныеЗаписи.КоличествоОстаток ;
               Движение.СтатусПартии=ВыборкаДетальныеЗаписи.СтатусПартии;
               Движение.Стоимость=ВыборкаДетальныеЗаписи.СтоимостьОстаток;
               
               количествоКСписанию=количествоКСписанию-ВыборкаДетальныеЗаписи.КоличествоОстаток;
           
           иначеесли  счетчик=колЗаписей тогда
               Движение.ДокументОприходования=ВыборкаДетальныеЗаписи.ДокументОприходования;
               если Движение.Количество<ВыборкаДетальныеЗаписи.КоличествоОстаток тогда
                  Сообщить("Недостаточно для списания """+ТекСтрокаМатериалы.Наименование+ """ на складе "+Сотрудник.Наименование+"! Проводка отменена!");
                   Отказ=истина;
                   Возврат;
               КонецЕсли;
               
               Движение.Количество=ВыборкаДетальныеЗаписи.КоличествоОстаток ;
               Движение.СтатусПартии=ВыборкаДетальныеЗаписи.СтатусПартии;
               Движение.Стоимость=ВыборкаДетальныеЗаписи.СтоимостьОстаток;
               
               количествоКСписанию=количествоКСписанию-ВыборкаДетальныеЗаписи.КоличествоОстаток;


           иначеесли  (счетчик>колЗаписей) тогда
               
               Сообщить("Недостаточно для списания """+ТекСтрокаМатериалы.Наименование+ """ на складе "+Сотрудник.Наименование+"! Проводка отменена!");
               Отказ=истина;
               Возврат;
               
       КонецЕсли;

       КонецЦикла;         //конец обхода выбранных записей регистров
       
   КонецЦикла;             //конец обхода строк материалов


///////////////////////////////////////////////////
/// конец движений по партиям

    движениеТоварыНаСкладах();
    движениеРеализованныеТовары();
    движениеТоварыОрганизаций();
18 nunzio
 
15.12.12
01:53
(17) см (15)
19 Alexey_AA
 
15.12.12
02:05
(18) не понимаю :( я новичок пока, не весь сленг еще впитал


спасибо всем кто помогал, теперь работает как надо! что бы я без Вас делал даже и не знаю. пусть удача сопровождает вас везде!
20 zak555
 
15.12.12
12:55
(16)
1. скрин РН своего
2. сначла пиши движения, а потом смотри на отрицательные остатки
2 + 2 = 3.9999999999999999999999999999999...