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

Автор Тема: Обработка проведения документа  (Прочитано 10902 раз)

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

Оффлайн LehaAres

  • *
  • Сообщений: 19
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2010-12-15
  • Сайт: 
  • Профессия: Ученик 1С
Добрый день. Я очередной чайник, прошу вашей помощи.
Есть документ "Приходный ордер". Надо сделать процедуру обработки его проведения так, чтобы при этом происходил поиск по некоторому условию в справочнике "Карточки складского учета" и выполнялась запись в табличную часть "Движения" элемента справочника, удовлетворяющего этому условию. Это возможно реализовать?
Пока что есть только автоматически сгенерированная процедура проведения по регистру накопления
Цитировать
Процедура ОбработкаПроведения(Отказ, Режим)
   //{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
   // Данный фрагмент построен конструктором.
   // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
   Движения.ОстаткиМатериалов.Записывать = Истина;
   Для Каждого ТекСтрокаМатериалы Из Материалы Цикл
      // регистр ОстаткиМатериалов Приход
      Движение = Движения.ОстаткиМатериалов.Добавить();
      Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
      Движение.Период = Дата;
      Движение.IRA = ТекСтрокаМатериалы.IRA;
      Движение.KPA = KPA;
      Движение.MPR1 = ТекСтрокаМатериалы.MPR1;
   КонецЦикла;
   //}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
КонецПроцедуры

Думаю её допиливать, но не знаю тонкостей языка программирования (совсем), в частности как заставить её искать в нужном справочнике? Мои мысли, вероятно полный бред, с комментариями:
Цитировать
Процедура ОбработкаДвижений(Отказ, Режим)
   СправочникСсылка.KARTAZ.Движения.Записывать = Истина;    //разрешение записывать в нужный справочник
   Для Каждого ТекСтрокаМатериалы Из Материалы Цикл

      
      Движение = Движения.ОстаткиМатериалов.Добавить();
      Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
      Движение.Период = Дата;
      Движение.IRA = ТекСтрокаМатериалы.IRA;
      Движение.KPA = KPA;
      Движение.MPR1 = ТекСтрокаМатериалы.MPR1;
   КонецЦикла;
   //}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
КонецПроцедуры


Оффлайн LehaAres

  • *
  • Сообщений: 19
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2010-12-15
  • Сайт: 
  • Профессия: Ученик 1С
Простите, тема случайно отправилась на полуслове, последнюю цитату не обрабатывайте.

Цитировать
Процедура ОбработкаДвижений(Отказ, Режим)
   Справочник.KARTAZ.Движения.Записывать = Истина;    //разрешение записывать в нужный справочник
   Для Каждого ТекСтрокаМатериалы Из Материалы Цикл           //перебираем строчки табличной части приходного ордера
      Для Каждого Элемент Из Справочник.KARTAZ Цикл         //перебираем элементы справочника "Карточки" в поисках подходящего
      Если KARTAZ.KMA = ТекСтрокаМатериалы.IRA                //если наименование товара из Ордера совпадает с наименованием из Карточки
      .....  // здесь должен быть код выполняющий запись в табличную часть карточки по некоторым реквизитам Приходного Ордера
      КонецЦикла;
      КонецЦикла;
   //}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
КонецПроцедуры

Оффлайн LehaAres

  • *
  • Сообщений: 19
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2010-12-15
  • Сайт: 
  • Профессия: Ученик 1С
Так наверное будет более грамотно? Только ещё не нашёл, как правильно указать на нужные реквизиты Документа для записи их значений в справочник.
Цитировать
Процедура ОбработкаПроведения(Отказ, Режим)
   //{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
   // Данный фрагмент построен конструктором.
   // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
   Движения.ОстаткиМатериалов.Записывать = Истина;
   Для Каждого ТекСтрокаМатериалы Из Материалы Цикл
      СпрКарт = Справочники.KARTAZ
      СправочникВыборка = СпрКарт.НайтиПоРеквизиту("KMA",ТекСтрокаМатериалы.IRA);
      НовыйЭлемент = СпрКарт.ТабличнаяЧасть.СоздатьЭлемент();
      НовыйЭлемент.НомерДокумента = Документ.ПриходныйОрдер.НомерДокумента  // Как здесь правильно сказать?
      НовыйЭлемент.ТипДокумента =
      НовыйЭлемент.Поставщик =    
      НовыйЭлемент.Количество =
      НовыйЭлемент.Остаток =
      НовыйЭлемент.Дата =
   КонецЦикла;
//}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
КонецПроцедуры

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

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

1. По коду
НайденнаяКарточка = Справочники.Карточки.НайтиПоКоду(КодДляПоиска);
Если НайденнаяКарточка = Справочники.Карточки.ПустаяСсылка() Тогда
       //Карточка нет и можно создать новую
КонецЕсли;
2. По наименованию
НайденнаяКарточка = Справочники.Карточки.НайтиПоНаименованию(НаименованиеДляПоиска);
//Далее то же самое
3. По реквизиту
НайденнаяКарточка = Справочники.Карточки.НайтиПоРеквизиту("<<НазваниеРеквизита>>",РеквизитДляПоиска);
//Далее то же самое
Там еще у реквизита вроде должно быть включено индексирование...
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

Оффлайн LehaAres

  • *
  • Сообщений: 19
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2010-12-15
  • Сайт: 
  • Профессия: Ученик 1С
по какому именно условию ищете в справочнике Карточки...?

В табличной части Документа перечисляются наименования товаров. Для каждого наименования существует отдельная карточка. Вот её надо найти и произвести туда запись о движениях товара, созданных Документом. Это я вроде написал в строчке
СправочникВыборка = СпрКарт.НайтиПоРеквизиту("KMA",ТекСтрокаМатериалы.IRA);
Здесь KMA -реквизит в справочнике, IRA - реквизит в Документе. Оба означают "наименование" товара.

И подскажите пожалуйста, как правильно оформить передачу данных из реквизитов Документа в табличную часть справочника (выше в цитате пустые строчки)?

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

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

В цикле Для каждого... в ТекСтрокаМатериалы "хранятся" значения колонок текущей строки:

Для каждого ТекСтрокаМатериалы Из Материалы Цикл
НайденнаяКарточка = Справочники.Карточки.НайтиПоРеквизиту("КМА", ТекСтрокаМатериалы.IRA);
Если НайденнаяКарточка = Справочники.Карточки.ПустаяСсылка() Тогда
//Создать новую карточку
//или
Иначе
спрОбъект = НайденнаяКарточка.ПолучитьОбъект();
НоваяСтрока = спрОбъект.ТЧ.Добавить();
НоваяСтрока.НомерПриходника = Номер;
НоваяСтрока.ТипДокумента = "ПриходныйОрдер";
НоваяСтрока.Поставщик = Поставщик; //реквизит шапки
НоваяСтрока.Количество = ; //Количество чего?
...
спрОбъект.Записать();
КонецЕсли;

КонецЦикла;
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

Оффлайн Шурыгин Иван Сергеевич

  • забей на все....
  • ****
  • Сообщений: 330
  • РЕПУТАЦИЯ: 82
  • КПД: 25%
  • забей на все!
  • Регистрация: 2011-05-23
  • Сайт: 
  • Профессия: Программист 8.1
Просто у справочника реквизит "Наименование" - стандартный, поиск по нему в п.2.
Но иногда заводят реквизит. Поиск по нему - п.3.

В цикле Для каждого... в ТекСтрокаМатериалы "хранятся" значения колонок текущей строки:

Для каждого ТекСтрокаМатериалы Из Материалы Цикл
НайденнаяКарточка = Справочники.Карточки.НайтиПоРеквизиту("КМА", ТекСтрокаМатериалы.IRA);
Если НайденнаяКарточка = Справочники.Карточки.ПустаяСсылка() Тогда
//Создать новую карточку
//или
Иначе
спрОбъект = НайденнаяКарточка.ПолучитьОбъект();
НоваяСтрока = спрОбъект.ТЧ.Добавить();
НоваяСтрока.НомерПриходника = Номер;
НоваяСтрока.ТипДокумента = "ПриходныйОрдер";
НоваяСтрока.Поставщик = Поставщик; //реквизит шапки
НоваяСтрока.Количество = ; //Количество чего?
...
спрОбъект.Записать();
КонецЕсли;

КонецЦикла;


возникает опять вопрос, целесобразности использования в принципе такого поведения программы.

документ краене редко должен сам изменять, или упаси боже, создавать новые элементы справочника. то делается либо справочником, либо обработками(и то обработками не самый лучший подход, чисто тематически)

все необходимые данные рекомендую записывать в регистр сведений, а справочник оставить в покое)
===================================
жизнь надо прожить так, чтоб вверху посмотрели.
и сказали "А ну ка повтори"
===================================

Оффлайн LehaAres

  • *
  • Сообщений: 19
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2010-12-15
  • Сайт: 
  • Профессия: Ученик 1С
Цитировать
возникает опять вопрос, целесобразности использования в принципе такого поведения программы.
*глубоко вздохнув* Согласен, подход видимо топорный, но я совсем плохо разбираюсь в предмете, чтобы четко знать как лучше сделать.

Была мысль, что лучше вырулить через регистры, но тут терзают проблемы, и я не знаю пути решения:
Движения документов обязательно надо расписать отдельно для каждого товара (как я понял - это какая-то статистика движения товара), но товаров over9000, для каждого ведь не будешь делать регистр, а как тогда? Можно ли прикрутить к регистру фильтр, что-то вроде выпадающего списка товаров, где выбрал нужное и отобразилось только то, что относится к данному товару? Если можно, ткните носом где прочитать об этом.

Оффлайн Шурыгин Иван Сергеевич

  • забей на все....
  • ****
  • Сообщений: 330
  • РЕПУТАЦИЯ: 82
  • КПД: 25%
  • забей на все!
  • Регистрация: 2011-05-23
  • Сайт: 
  • Профессия: Программист 8.1

Была мысль, что лучше вырулить через регистры, но тут терзают проблемы, и я не знаю пути решения:
Движения документов обязательно надо расписать отдельно для каждого товара (как я понял - это какая-то статистика движения товара), но товаров over9000, для каждого ведь не будешь делать регистр, а как тогда? Можно ли прикрутить к регистру фильтр, что-то вроде выпадающего списка товаров, где выбрал нужное и отобразилось только то, что относится к данному товару? Если можно, ткните носом где прочитать об этом.

создайте регистр сведений и в нем измерение товар. тогда можно будет фильтровать по товару. и делать срезы последних по измерению товар.

а если я не правильно понял, то может прямо на примере конкретно подскажите какова задача
===================================
жизнь надо прожить так, чтоб вверху посмотрели.
и сказали "А ну ка повтори"
===================================

Оффлайн LehaAres

  • *
  • Сообщений: 19
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2010-12-15
  • Сайт: 
  • Профессия: Ученик 1С
создайте регистр сведений и в нем измерение товар. тогда можно будет фильтровать по товару. и делать срезы последних по измерению товар.

Долго листал учебник Радченко, уже почти отчаялся найти в нем что-то полезное по нужному вопросу, и тут обнаружил что раздел "периодические регистры" как раз о регистрах сведений, а по описанию там самое то, что нужно для решения задачи. С тоской понял, сколько времени ухлопал зря, занимаясь ерундой от того, что вовремя не нашёл этот раздел... :(


Теги:
 

Не открывает форму сохраненного документа, открывает форму нового.

Автор EHOTРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 1
Просмотров: 4467
Последний ответ 13 Апр 2012, 23:26
от Vit1501
Автоматическое заполнение табличной части документа из табличной части другого

Автор WillРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 6
Просмотров: 15898
Последний ответ 16 Авг 2012, 12:07
от Will
Заполнение поля табличной части документа из табличной части справочника.

Автор Kurt_WagnerРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 3
Просмотров: 4193
Последний ответ 06 Апр 2015, 20:08
от Kurt_Wagner
Заполнение табличной части документа реквизитами табличной части справочника

Автор kaf_infoРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 1
Просмотров: 614
Последний ответ 10 Май 2017, 20:44
от ilnur75
Добавление сведений в графу "основание" документа "ТОРГ-12"

Автор Ярослав1984Раздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 4
Просмотров: 7729
Последний ответ 20 Авг 2013, 18:45
от Ярослав1984

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

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

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


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

* Реклама

Смотрите бесплатно более 300 видеоуроков по работе в 1С:Бухгалтерия 8 и 1C:ЗУП 8 ред. 3.0

СМОТРЕТЬ >>

* Поиск

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

* Реклама

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

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

Геннадий ОбьГЭС Геннадий ОбьГЭС
160 Сообщений
ilyay ilyay
75 Сообщений
oleg-x
55 Сообщений
alex0402
46 Сообщений
andron81_81
44 Сообщений
AIFrame
35 Сообщений
MuI_I_Ika MuI_I_Ika
33 Сообщений
BuhRust
27 Сообщений
Golickoff Golickoff
27 Сообщений
Dima Dddd Dima Dddd
26 Сообщений

* Кто онлайн

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

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

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

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

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

Поиск

 
SimplePortal 2.3.5 © 2008-2012, SimplePortal