Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Определение партии приходной накладной
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 7.7
GoDammeD
Доброго всем времени суток=)
Появилась необходимость заполнения поля "Партия" Расходная накладной, созданной на основании Приходной накладной, но как установить нужную партию понятия не имею.
Буду благодарен за любую помощь в решении задачи.

P.S.
Конфигурация: "Бухгалтерский учёт" для Украины (7.70.282)
alex040269
Если в РН будет та же партия, что и в ПН, то все просто. В тех строках, где присваивается ТМЦ , присвоить и партию. Ну а если нет, то алгоритмы расчета у бухов. Какой вариант парионного учета?

ЗЫ.
Конфа доработана? В стандартной нельзя создать РН на основании ПН!
Cthulhu
282-го под рукой нет, но в 538-м партий как таковых не наблюдается совсем.
alex040269
538 - это не российский случайно?
mister-x
Цитата(Cthulhu @ 16.10.12, 18:10) необходимо зарегистрироваться для просмотра ссылки
но в 538-м партий как таковых не наблюдается совсем.

294 останній реліз
поправка вже 295 необходимо зарегистрироваться для просмотра ссылки
igmig65
Цитата(GoDammeD @ 16.10.12, 17:03) необходимо зарегистрироваться для просмотра ссылки
Появилась необходимость заполнения поля "Партия" Расходная накладной

Телепатирую: изменился вариант списания ТМЦ, возможно был ФИФО, теперь сделали по партиям. Соответственно партии приходится выбирать ручками. Так потому что такой метод сами выбрали.
А так как документ доработан, на основании ПН, то это недоработана процедура ВводНаОсновании() самой РН, где нужно дописать присваивание партии, созданной этой ПН(основанием).
GoDammeD
Цитата(igmig65 @ 16.10.12, 20:36) необходимо зарегистрироваться для просмотра ссылки
где нужно дописать присваивание партии, созданной этой ПН(основанием).

Вы правы, именно это и нужно, но что дописывать - без понятия.

Ardi
ВыбратьЭлементыПоРеквизиту(<?>,,,)
Синтаксис:
ВыбратьЭлементыПоРеквизиту(<ИмяРеквизита>,<Значение>,<РежимИерархии>,<РежимГрупп>)
Назначение:
Открыть выборку элементов справочника по значению реквизита.
Возвращает: 1 - если действие выполнено и в выборке есть хотя бы один элемент;
0 - если действие не выполнено или в выборке нет ни одного элемента.
Параметры:
<ИмяРеквизита> - строка с именем реквизита, по которому выполняется выборка;
<Значение> - значение реквизита для выборки;
<РежимИерархии> - как выбирать:
1 - выбирать элементы с учетом иерархии,
0 - выбирать элементы без учета иерархии (необязателен, по умолчанию - 1);
<РежимГрупп> - что выбирать:
1 - выбирать среди групп справочника,
0 - выбирать только среди элементов справочника.
Замечание:
Метод можно использовать только для реквизитов с установленным признаком ''Сортировка''.
Метод можно использовать только для объектов, созданных функцией СоздатьОбъект.
alex040269
Цитата(GoDammeD @ 17.10.12, 0:41) необходимо зарегистрироваться для просмотра ссылки
Вы правы, именно это и нужно, но что дописывать - без понятия.

В РН есть процеддура ВВодНаОсновании(???)

В ней есть строка Пока ???.ПолучитьСтроку() = 1 Цикл
ниже ТМЦ = ???.ТМЦ;
нужно добавить строку
Партия = ???.Партия;

ЗЫ.

обратитесь к специалисту.

GoDammeD
Цитата(alex040269 @ 17.10.12, 8:00) необходимо зарегистрироваться для просмотра ссылки
В РН есть процеддура ВВодНаОсновании(???)

Да, есть, её и использую

Цитата(alex040269 @ 17.10.12, 8:00) необходимо зарегистрироваться для просмотра ссылки
Партия = ???.Партия;

Хотел так сделать, но к сожалению в приходной накладной нету реквизита "Партия", в РН этот реквизит ссылается на "Справочник.Партии", кстати, в котором есть реквизит "Докуент", где храниться номер Приходной накладной, возможно стоит это использовать? Но каким именно методом к сожалению не знаю...

Цитата(Ardi @ 17.10.12, 0:44) необходимо зарегистрироваться для просмотра ссылки
ВыбратьЭлементыПоРеквизиту(<?>,,,)


Я так понимаю использовать её нужно следующим образом:
Партия.ВыбратьЭлементПоРеквизиту("Документ",ДокОсн.НомерПриходнойНакладной,1,0)

Ardi
Потом перебрать полученые записи и найти партию с текущим товаром.
Полученую партию вставить в реализацию.

И так по всем строкам.
igmig65
Цитата(GoDammeD @ 17.10.12, 15:52) необходимо зарегистрироваться для просмотра ссылки
Партия.ВыбратьЭлементПоРеквизиту("Документ",ДокОсн.НомерПриходнойНакладной,1,0)

Реквизит "Документ" это именно документ, соответственно фильтр должен быть по документу, в вашем случае ДокОсн, тогда
Партия.ВыбратьЭлементПоРеквизиту("Документ",ДокОсн,1,0);

предварительно создав Партия, и применив Партия.ИспользоватьВладельца(ДокОсн.ТМЦ)
GoDammeD
Цитата(igmig65 @ 18.10.12, 0:43) необходимо зарегистрироваться для просмотра ссылки
Партия.ВыбратьЭлементПоРеквизиту("Документ",ДокОсн,1,0);


предварительно создав Партия, и применив Партия.ИспользоватьВладельца(ДокОсн.ТМЦ)


Выдает следующую ошибку:
ПартияВыбор.ВыбратьЭлементПоРеквизиту("Док",Док,1,0);

{Документ.РасходнаяНакладная.Форма.Модуль(430)}: Поле агрегатного объекта не обнаружено (ВыбратьЭлементПоРеквизиту)
mister-x
такое есть
ПартияВыбор = СоздатьОбъект("Справочник.ИмяСправочника");
?
GoDammeD
Да, есть:
ПартияВыбор = СоздатьОбъект("Справочник.Партии");
Cthulhu
Цитата(GoDammeD @ 18.10.12, 15:09) необходимо зарегистрироваться для просмотра ссылки
Поле агрегатного объекта не обнаружено (ВыбратьЭлементПоРеквизиту)

не поверишь. такое в ответ на такой код - у всех бы выдало.
недорого продам синтакс-помощник. ну или научу нажимать клавиши Ctrl+F1, в том числе ключевых словах встроенного языка 1с.
GoDammeD
Спасибо за совет=)
В Синтаксис-помощнике нашел ВыбратьЭлементыПоРеквизиту(<?>,,,)
Исправил ошибку(?) в итоге получился следующий код:

Пока Док.ПолучитьСтроку() = 1 
   Цикл
     ...
     ПартияВыбор = СоздатьОбъект("Справочник.Партии");
     ПартияВыбор.ИспользоватьВладельца(Док.ТМЦ);
     Партия = ПартияВыбор.ВыбратьЭлементыПоРеквизиту("Док",Док,1,0);
    КонецЦикла;


Ну и как я понимаю это естественно, что у меня ничего не присваивается happy.gif
alex040269
ПартияВыбор.ВыбратьЭлементыПоРеквизиту("Док",Док,1,0);
Пока ПартияВыбор.ПолучитьЭлемент() = 1 Цикл
.....
КонецЦикла;


ПартияВыбор.ВыбратьЭлементыПоРеквизиту("Док",Док,1,0) возвращает 0 или 1.
igmig65
Непонимаю зачем вообще это ВыбратьЭлементыПоРеквизиту(...). ПН является партеобразующим документом, тоесть для 1 ТМЦ по 1 ПН обычно только 1 элемент должен быть. Вот и используйте цепочку:
1. Нужно ограничить по конкретному ТМЦ: ПартияВыбор.ИспользоватьВладельца(ДокОсн.ТМЦ)
2. Ищем и присваиваем, если находим:
Если ПартияВыбор.НайтиПоРеквизиту("Документ",ДокОсн,0)=1
     Партия = ПартияВыбор.ТекущийЭлемент();
Cthulhu
Цитата(igmig65 @ 20.10.12, 15:42) необходимо зарегистрироваться для просмотра ссылки
ПН является партеобразующим документом, тоесть ...

Если ПН возвратная, то процитированное - неверно.
igmig65
Цитата(Cthulhu @ 20.10.12, 17:26) необходимо зарегистрироваться для просмотра ссылки
Если ПН возвратная, то процитированное - неверно.

Да по большому счету установка партий должна проводиться по политике учета. И если учет непартионный, а ФИФО, ЛИФО, то партия определяется согласно этой политики. Но так как такое реализовано, то это предполагает партионный учет в этой ситуации. Тоесть если РН вводится на основании ПН, то предполагается что списывается именно эта партия. Ну а в возвратной, введенной на основании этой же ПН партия будет таже. Тоесть возвратная ПН уже не партиобразующая, а просто уменьшающая оборот по партии ПН.
Zaval
"Ты на мене не обижяйся, но я тебе умный вещь скажу" х/ф "Мимино"

Хотите выполнить работу - начните с выбора инструмента. Бухгалтерии это нафиг не нужно - и там ловить нечего, независимо от релиза.
Посмотрите ПакетныйВводРасходныхРеализатора в ТиС.

Есть альтер вариант - ручной выбор партий.
GoDammeD
Всем огромное Спасибо!
Так как фирма использует именно партийный учёт, написал следующим образом:
Если Док.Вид() = "ПриходнаяНакладная" Тогда
        ...
                ПартияВыбор = СоздатьОбъект("Справочник.Партии");
                ПартияВыбор.ИспользоватьВладельца(Док.ТМЦ);
        Пока Док.ПолучитьСтроку() = 1 Цикл
            ...
            Если ПартияВыбор.НайтиПоРеквизиту("Док",Док,0)=1 Тогда
                     Партия = ПартияВыбор.ТекущийЭлемент();
             КонецЕсли;
        КонецЦикла;

Всё отлично работает, ещё раз всем спасибо за помощь!
Vofka
GoDammeD, жмите палец всем, кто помогал.
igmig65
Цитата(GoDammeD @ 22.10.12, 15:59) необходимо зарегистрироваться для просмотра ссылки
Так как фирма использует именно партийный учёт, написал следующим образом:
Если Док.Вид() = "ПриходнаяНакладная" Тогда
        ...
                ПартияВыбор = СоздатьОбъект("Справочник.Партии");
                ПартияВыбор.ИспользоватьВладельца(Док.ТМЦ);
        Пока Док.ПолучитьСтроку() = 1 Цикл
            ...
            Если ПартияВыбор.НайтиПоРеквизиту("Док",Док,0)=1 Тогда
                     Партия = ПартияВыбор.ТекущийЭлемент();
             КонецЕсли;
        КонецЦикла;

Всё отлично работает, ещё раз всем спасибо за помощь!


Все неправильно..... Сначала используете ПартияВыбор.ИспользоватьВладельца(Док.ТМЦ);
потом Док.ПолучитьСтроку(), где док - ПН.
А Док.ТМЦ, что вы используете как параметр вы сможете получить только после Док.ПолучитьСтроку()
icon_cuss.gif
А так:
Если Док.Вид() = "ПриходнаяНакладная" Тогда
        ...
                ПартияВыбор = СоздатьОбъект("Справочник.Партии");
        Пока Док.ПолучитьСтроку() = 1 Цикл
                ПартияВыбор.ИспользоватьВладельца(Док.ТМЦ);
            ...
            Если ПартияВыбор.НайтиПоРеквизиту("Док",Док,0)=1 Тогда
                     Партия = ПартияВыбор.ТекущийЭлемент();
             КонецЕсли;
        КонецЦикла;
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.