Реклама на этом месте
Форум 1С
Форум 1С
Программистам. Бухгалтерам. Администраторам. Пользователям
Задай вопрос - получи решение проблемы. Без троллинга и флуда.
15 Дек 2017, 20:47
МультиВход
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?
 
collapse

Автор Тема: Работа с таблицей значений  (Прочитано 3672 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн TamKar

  • *
  • Сообщений: 9
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2010-07-28
  • Сайт: 
Кто сможет помочь. Результат запроса я вношу в таблицу значений, потом там сортирую и списываю товар, но движение по расходу не записывается в регистре сведений Товары на Склдае. Выкладываю код. Процедура ОбработкаПроведения(Отказ, Режим)
   
   
      МетодСписания = РегистрыСведений.ПорядокСписания.ПолучитьПоследнее(МоментВремени()).Значения;
      
      Если МетодСписания = Перечисления.Порядок.FIFO Тогда
         ПорядокСписания = "ВОЗР";
      Иначе
         ПорядокСписания = "УБЫВ";
      КонецЕсли;
      
      Запрос = Новый Запрос;
      Запрос.Текст = "ВЫБРАТЬ
                     |   расходнаяНакладнаяТовары.Номенклатура,
                     |   СУММА(расходнаяНакладнаяТовары.Количество) КАК Количество
                     |ПОМЕСТИТЬ ДокТЧ
                     |ИЗ
                     |   Документ.РасходнаяНакладная.Товары КАК расходнаяНакладнаяТовары
                     |ГДЕ
                     |   расходнаяНакладнаяТовары.Ссылка = &ссылка
                     |
                     |СГРУППИРОВАТЬ ПО
                     |   расходнаяНакладнаяТовары.Номенклатура
                     |;
                     |
                     |////////////////////////////////////////////////////////////////////////////////
                     |ВЫБРАТЬ
                     |   ДокТЧ.Номенклатура,
                     |   ДокТЧ.Количество,
                     |   ТоварыНаСкладеОстатки.Партия.Ссылка КАК ПартияСсылка,
                     |   ЕСТЬNULL(ТоварыНаСкладеОстатки.КоличествоОстаток, 0) КАК КоличествоОстаток,
                     |   ЕСТЬNULL(ТоварыНаСкладеОстатки.СуммаОстаток, 0) КАК СуммаОстаток
                     |ИЗ
                     |   ДокТЧ КАК ДокТЧ
                     |      ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладе.Остатки(
                     |            &МоментВремени,
                     |            Номенклатура В
                     |               (ВЫБРАТЬ
                     |                  ДокТЧ.Номенклатура
                     |               ИЗ
                     |                  ДокТЧ КАК ДокТЧ)) КАК ТоварыНаСкладеОстатки
                     |      ПО ДокТЧ.Номенклатура = ТоварыНаСкладеОстатки.Номенклатура
                     |
                     |УПОРЯДОЧИТЬ ПО
                     |   ТоварыНаСкладеОстатки.Партия.МоментВремени,
                     |   ПартияСсылка";
      
      Запрос.УстановитьПараметр("Ссылка", Ссылка);
      Запрос.УстановитьПараметр("МоментВремени", МоментВремени());
      Результат = Запрос.Выполнить();
      
      ТаблицаПроведения = Движения.ТоварыНаСкладе.ВыгрузитьКолонки();
      
      ВыборкаИтоги = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
      
      Пока ВыборкаИтоги.Следующий() Цикл
         Если ВыборкаИтоги.Количество > ВыборкаИтоги.КоличествоОстаток Тогда
            Сообщить("Не хватает номенклатуры " + ВыборкаИтоги.Номенклатура + ", из необходимых "
            + ВыборкаИтоги.Количество + " в наличии есть " + ВыборкаИтоги.КоличествоОстаток);
            Отказ = Истина;
         КонецЕсли;
         
         Если Отказ Тогда
            Продолжить;
         КонецЕсли;
         НужноСписать = ВыборкаИтоги.Количество;
         
         
         
         Выборка = ВыборкаИтоги.Выбрать();
         Пока Выборка.Следующий() И НужноСписать > 0 Цикл
            СписатьСПартии = Мин(НужноСписать, Выборка.КоличествоОстаток);
            Стр = ТаблицаПроведения.Добавить();
            ЗаполнитьЗначенияСвойств(Стр,Выборка,,"Количество");
            Стр.Количество = СписатьСПартии;
            Стр.Сумма = СписатьСПартии / Выборка.КоличествоОстаток * Выборка.СуммаОстаток;
            НужноСписать = НужноСписать - СписатьСПартии;
         КонецЦикла;
      КонецЦикла;
      
      Если Не Отказ Тогда
         Движения.ТоварыНаСкладе.Записывать = Истина;
         ТаблицаПроведения.ЗаполнитьЗначения(Дата, "Период");
         
         ТаблицаПроведения.ЗаполнитьЗначения(ВидДвиженияНакопления.Расход, "ВидДвижения");
         ТаблицаПроведения.ЗаполнитьЗначения(Ссылка, "Регистратор");
         ТаблицаПроведения.ЗаполнитьЗначения(Истина, "Активность");
         
         ТоварыНаСкладе = РегистрыНакопления.ТоварыНаСкладе.СоздатьНаборЗаписей();
         ТоварыНаСкладе.Отбор.Регистратор.Установить(Ссылка);
         ТоварыНаСкладе.Прочитать();
         ТоварыНаСкладе.Загрузить(ТаблицаПроведения);
         ТоварыНаСкладе.Записать();    
         
      КонецЕсли;
      
      ТаблицаПроведения = Товары.Выгрузить();
      ТаблицаПроведения.Свернуть("Номенклатура", "Количество, Сумма");
      ТаблицаПроведения.Колонки.Добавить("Период");
      ТаблицаПроведения.ЗаполнитьЗначения(Дата, "Период");
      ТаблицаПроведения.Колонки.Добавить("Регистратор");
      ТаблицаПроведения.ЗаполнитьЗначения(Ссылка, "Регистратор");
      ТаблицаПроведения.Колонки.Добавить("Активность");
      ТаблицаПроведения.ЗаполнитьЗначения(Истина, "Активность");

        Продажи = РегистрыНакопления.Продажи.СоздатьНаборЗаписей();
      Продажи.Отбор.Регистратор.Установить(Ссылка);
      Продажи.Прочитать();
      Продажи.Загрузить(ТаблицаПроведения);
      Продажи.Записать();
   

   КонецПроцедуры

Подскижете что не правильно делаю


Оффлайн cska-fanat-kz

  • 1С:Специалист
  • Глобальный модератор
  • *****
  • Сообщений: 5745
  • РЕПУТАЦИЯ: 1099
  • КПД: 19%
  • Красная армия всех сильней!
  • Регистрация: 2010-11-06
    • Skype: cska-fanat-kz81
  • Сайт: cska-fanat-kz.ucoz.kz
  • Профессия: Разработчик 1С
Так на первый взгляд не берусь судить насколько алгоритм правильный...

Просто вопрос: зачем вам все эти "Выгрузитьколонку()", "СоздатьНаборЗаписей" и т.п.?

Чем вам не нравится стандартнейшее

Движение = Движения.ТоварыНаСкладе.Добавить();
Движение = ВидДвиженияНакопления.Расход;
и т.д...

Поля регистра Регистратор и Активность явно устанавливать не надо - они сами заполнятся...
Если конечно идти через Движения...

Даже если вы и добьетесь что записи в регистр попадут.
Но мне кажется что операция ОТМЕНЫ проведения не сработает.
Процедуру ОбработкаОтменыПроведения тоже придется писать в ручную...
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

Оффлайн progmikon

  • *****
  • Сообщений: 2090
  • РЕПУТАЦИЯ: 371
  • КПД: 18%
  • Регистрация: 2010-10-09
  • Компания: http://progmikon.blogspot.com/
  • Профессия: Программист 1С
Полностью согласен с cska-fanat-kz(за что ему +1). У вас оптимальный запрос с точки зрения получения остатков, а вот движения....Делайте через "Движения". Код сократиться раза в два. + к тому, мне кажется можно и в одной выборке в оба регистра писать.


Теги:
 


* Живое общение

Не устроил ответ?

Зарегистрируйся и задай свой вопрос. Живое общение приносит результат намного быстрее.


Зарегистрироваться

* Реклама

* Поиск

* Последние задачи на разработку (фриланс)

* Реклама

* Последние вакансии

* Топ 10 авторов за месяц

Геннадий ОбьГЭС Геннадий ОбьГЭС
180 Сообщений
ilyay ilyay
69 Сообщений
alex0402
54 Сообщений
oleg-x
48 Сообщений
AIFrame
46 Сообщений
andron81_81
44 Сообщений
MuI_I_Ika MuI_I_Ika
33 Сообщений
Golickoff Golickoff
31 Сообщений
BuhRust
30 Сообщений
Dima Dddd Dima Dddd
26 Сообщений

* Кто онлайн

  • Точка Гостей: 253
  • Точка Скрытых: 0
  • Точка Пользователей: 5
  • Точка Сейчас на форуме:

* Облако тэгов

* Форум 1С с мобильного

* Инструменты

* Дополнительно

Поиск

 
SimplePortal 2.3.5 © 2008-2012, SimplePortal