Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Передача параметра в документ
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.1 (8.0)
Batchir
УТ 2.3.3.4
Вобщем стоит такая задача:

Создается прогаммно документ перемещения
ДокПеремещения = Документы.ПеремещениеТоваров.СоздатьДокумент();

Потом идет заполнение шапки и табличной части, ну и собственно проведение.

ДокПеремещения.Записать(РежимЗаписиДокумента.Проведение);


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

Необходимо каким-то образом передать временный параметр в документ, что бы не выдавать это сообщение, при восстановленни партий должно ругаться идти стандартным образом.
logist
Цитата(Batchir @ 31.07.09, 18:30) необходимо зарегистрироваться для просмотра ссылки
Необходимо каким-то образом передать временный параметр в документ, что бы не выдавать это сообщение, при восстановленни партий должно ругаться идти стандартным образом.


Добавить реквизит с галкой в форме "ПроводитьПартии"
В модуле ОбработкаПроведения()
УправлениеЗапасами.ДобавитьСтрокуВДеревоПолейЗапросаПоШапке(ДеревоПолейЗапросаПоШапке, "УчетнаяПолитика",  "ВестиПартионныйУчетПоСкладам",               "ВестиПартионныйУчетПоСкладам");

заменить на

Если ПроводитьПартии Тогда
УправлениеЗапасами.ДобавитьСтрокуВДеревоПолейЗапросаПоШапке(ДеревоПолейЗапросаПоШапке, "УчетнаяПолитика",  "ВестиПартионныйУчетПоСкладам",               "ВестиПартионныйУчетПоСкладам");
Иначе
УправлениеЗапасами.ДобавитьСтрокуВДеревоПолейЗапросаПоШапке(ДеревоПолейЗапросаПоШапке, "УчетнаяПолитика",  "ВестиПартионныйУчетПоСкладам",               Ложь);
КонецЕсли;


Правда надо как-то удостоверится что когда надо провести по партиям - галка будет действительно включена. Человеческий фактор smile.gif
Batchir
Дело в том что по партиям нужно проводить, просто чтоб сообщение не выдавалось о не достатке партий (сама процедура выдачи сообщения описана в общем модуле).
Повторюсь документ создается, заполняется и проводится програмно из обработки и именно при таком проведении необходимо не выдавать сообщение.
Если добавить реквизит, то флаг останется стоять и восстановление последовательности не выдаст сообщения.
т.е. нужно каким-то образом передать параметр, который будет действовать только на одно проведение.
Я думаю нужно добавить какую-то глобальную переменную, по умолчанию принимающее значение ЛОЖЬ, в обработке присваивать ей ИСТИНА и в момент выдачи сообщения о не нехватке партии не выдавать сообщений и заново присваивать ей ЛОЖЬ, тогда как бы соблюдается универсальность: всегда когда мне понадобится такой маневр при проведении любого документа нужно присвоить этой переменной значение ИСТИНА.
logist
Процедура выдачи сообщения которая описана в общем модуле и модуле партионного учета в итоге вызывает Сообщить(), отключить ее, я так понимаю, нельзя.

с глобальной переменной это хорошо, но только лучше что бы по умолчанию она была ИСТИНА, т.е. в процедурах Сообщений результатов проведения партий (их вроде две) в модуле партионного учета, добавить /Если Истина Тогда/ и далее оставить "Сообщить()"
И при необходимости присваивать значение Ложь.

Но все равно не понятно зачем проводить по партиям если результат проведения значения не имеет, и все равно в последствии будет окончательное проведение. Я хотел сказать что галку ставить руками в момент окончательного проведения.
zetovich
бред....что значит пугающее? темноты боятся?
и ваще с такой постановкой...весь гемор Вам разгребать. Пока не раздуплились с сериями нехер перемещать ваще.
млин, вот кто придумал что пугает?
sergefox
А обязательно проводить документ, если он будет потом перепроводиться?
Может проще ограничиться РежимЗаписиДокумента.Запись?
Тогда исчезнут все траблы с сообщениями о нехватке.
Batchir
zetovich, поверь на слово там не бред, там достаточно сложная система приемки товара, чтобы её описать мне понадобятся недели, проект разрабатывался год, и вот на тестировании (скоро сдача) вылазиет такое неудобство(их на самом деле много, но поднялся вопрос конкретно за это). Вконце концов там всё красиво закрывается и разруливаются все партии, просто в однин момент выдаются сообщения об отсутствии партий, котрые нужно просто не показывать пользователям, чтобы не сбивать с толку.
Если в трех словах: автоматом формируются ночью заказы поставщикам, утром приходят в электронном виде поступления без серий от поставщиков, потом приходят уточняющие поступления с сериями - все автоматически загружается а 1С. В файлах может быть товар с одной серией, а реально приходит товар и в оригинальной накладной другая серия. Разработан сложный механизм контроля приемки и выявления ошибок поставки товара.
Приемщик не может тормозить приемку если по приходной одна серия, а в оригинальной другая. Он принимает так как есть и отправляет на штрихкодирование на другой склад (вот тут и возникает эта ситуация, когда по приходу одна серия а реально перемещается другая и документ ругается на партию), там проходит штрихкодирование и отправляется на основной склад. По завершению приемки ответственный за приемку запускает анализ и автоматическое "разруливание" всей цепочки документов, начиная с заказов аптек кончая поступлением отштрихкодированного товара на склад.
Batchir
Цитата(sergefox @ 31.07.09, 23:24) необходимо зарегистрироваться для просмотра ссылки
А обязательно проводить документ, если он будет потом перепроводиться?
Может проще ограничиться РежимЗаписиДокумента.Запись?
Тогда исчезнут все траблы с сообщениями о нехватке.

Обязательно, ведь товар должен заприходоваться на склад. Если не проводить документ, то всегда будут ругаться перемещения на недостачу не только партий, но и товара вообще.
Batchir
Цитата(logist @ 31.07.09, 21:25) необходимо зарегистрироваться для просмотра ссылки
Процедура выдачи сообщения которая описана в общем модуле и модуле партионного учета в итоге вызывает Сообщить(), отключить ее, я так понимаю, нельзя.

с глобальной переменной это хорошо, но только лучше что бы по умолчанию она была ИСТИНА, т.е. в процедурах Сообщений результатов проведения партий (их вроде две) в модуле партионного учета, добавить /Если Истина Тогда/ и далее оставить "Сообщить()"
И при необходимости присваивать значение Ложь.

Но все равно не понятно зачем проводить по партиям если результат проведения значения не имеет, и все равно в последствии будет окончательное проведение. Я хотел сказать что галку ставить руками в момент окончательного проведения.


Ну поповду ИСТИНА-ЛОЖЬ - мы об одном и том же говорим

А по поводу галки - руками ничего не делается. Ввод документов осуществляется программно из специальных АРМов, по этому глобальная переменная - я думаю это как раз моё решение проблемы.
agav
А нельзя ли отказаться от проведения по партиям при проведении документов, а запускать функционал обработки "проведение по партиям" каким-нить регламентным заданием раз в день?
logist
Цитата(Batchir @ 01.08.09, 0:37) необходимо зарегистрироваться для просмотра ссылки
В файлах может быть товар с одной серией, а реально приходит товар и в оригинальной накладной другая серия. Разработан сложный механизм контроля приемки и выявления ошибок поставки товара.

А почему Вы не хотите использовать документ "Корректировка серий товаров"? Если механизм предполагает контроль, то в таком случае будет фиксация ошибок и ненужно перепроводить документы партий
Batchir
Цитата(logist @ 01.08.09, 8:59) необходимо зарегистрироваться для просмотра ссылки
А почему Вы не хотите использовать документ "Корректировка серий товаров"? Если механизм предполагает контроль, то в таком случае будет фиксация ошибок и ненужно перепроводить документы партий

Обязательное условие, документ поступления в конечном виде должен соответствовать оригинальной бумажной накладной.

Цитата(agav @ 01.08.09, 0:34) необходимо зарегистрироваться для просмотра ссылки
А нельзя ли отказаться от проведения по партиям при проведении документов, а запускать функционал обработки "проведение по партиям" каким-нить регламентным заданием раз в день?

Всё это и так делается (в фоновом режиме идет восстановление последовательности партий), но нужны оперативные данные по партиям по всей цепочке приемки.
хакерок
помоему нужно разобраться от куда выдаёться сообщение а затем что сделать чтоб это условие не проверялось.
zetovich
все равно не пойму...ну ругается на парти, ну ладно.
главное что по ОстаткамТоваров все нормальною....провелось....и ладно....потом уже разрулят партии.
logist
Цитата(хакерок @ 01.08.09, 14:10) необходимо зарегистрироваться для просмотра ссылки
помоему нужно разобраться от куда выдаёться сообщение а затем что сделать чтоб это условие не проверялось.

Уже разобрались и решили что делать (читайте выше).

Но я считаю, что отключение сообщения это не выход, точнее не совсем тот выход из ситуации.
Batchir
Цитата(logist @ 01.08.09, 14:01) необходимо зарегистрироваться для просмотра ссылки
Уже разобрались и решили что делать (читайте выше).
Но я считаю, что отключение сообщения это не выход, точнее не совсем тот выход из ситуации.

Для меня это как раз выход, столкнулся со следующим: необходимо передать значение глабальной переменной на сервер, т.е. объявить её так, что бы она была доступной на сервере предприятия
Batchir
Цитата(zetovich @ 01.08.09, 13:18) необходимо зарегистрироваться для просмотра ссылки
все равно не пойму...ну ругается на парти, ну ладно.
главное что по ОстаткамТоваров все нормальною....провелось....и ладно....потом уже разрулят партии.

Ну не нужно человеку принимающему товар на склад эти сообщения, ему и так "своих" хватает, все лишние нужно отсекать.
logist
Цитата(Batchir @ 01.08.09, 15:17) необходимо зарегистрироваться для просмотра ссылки
Для меня это как раз выход, столкнулся со следующим: необходимо передать значение глабальной переменной на сервер, т.е. объявить её так, что бы она была доступной на сервере предприятия


глЗначениеПеременнойУстановить(Имя, Значение)
Batchir
Цитата(logist @ 01.08.09, 15:22) необходимо зарегистрироваться для просмотра ссылки
глЗначениеПеременнойУстановить(Имя, Значение)

Пытался, но почему то с первого раза не пошло, сейчас ещё раз попробую, если не получится то наверно через константу буду пробывать
Batchir


Попытка
Попытка
а1сВыводитьСообщенияОНедостачеПартий = глЗначениеПеременной("а1сВыводитьСообщенияОНедостачеПартий");
Исключение
глЗначениеПеременнойУстановить("а1сВыводитьСообщенияОНедостачеПартий",Истина);
а1сВыводитьСообщенияОНедостачеПартий = глЗначениеПеременной("а1сВыводитьСообщенияОНедостачеПартий");
КонецПопытки;
Исключение
Сообщить("Ошибка")
КонецПопытки;



Такой код на сервере предприятия выдает "Ошибка"
sergefox
Передать параметр в форму документа очень просто.
Добавить реквизит формы с названием типа лНеВыводитьСообщения и типом Булево.
По умолчанию оно будет иметь значение Ложь.
При вызове формы документа из твоей обработки устанавливать значение реквизита.
Если форма не открывается - для оператора все проходит "в темную" - тогда добавить реквизит типа Булево в документ и в обрабоке проведения модуля документа вставить условие обхода этой ситуации:
Если НЕ (ТипЗнач() = "Документ.Перемещение" И лНеВыводитьСообщения) Тогда
Сообщить();
КонецЕсли
В этом случае ни человеческий фактор (в форме документа этот реквизит не будет присутствовать) ни другие волнующие тебя проблемы не будут проявляться.
Единственно, нужно отслеживать изменения при накате обновлений.
logist
Цитата(Batchir @ 01.08.09, 16:30) необходимо зарегистрироваться для просмотра ссылки


глЗначениеПеременнойУстановить("а1сВыводитьСообщенияОНедостачеПартий",Истина);



А если так:
глЗначениеПеременнойУстановить("а1сВыводитьСообщенияОНедостачеПартий", Истина, ОбновлятьВоВсехКэшах = Ложь);
Batchir
Цитата(sergefox @ 01.08.09, 15:34) необходимо зарегистрироваться для просмотра ссылки
Передать параметр в форму документа очень просто.
Добавить реквизит формы с названием типа лНеВыводитьСообщения и типом Булево.
По умолчанию оно будет иметь значение Ложь.
При вызове формы документа из твоей обработки устанавливать значение реквизита.
Если форма не открывается - для оператора все проходит "в темную" - тогда добавить реквизит типа Булево в документ и в обрабоке проведения модуля документа вставить условие обхода этой ситуации:
Если НЕ (ТипЗнач() = "Документ.Перемещение" И лНеВыводитьСообщения) Тогда
Сообщить();
КонецЕсли
В этом случае ни человеческий фактор (в форме документа этот реквизит не будет присутствовать) ни другие волнующие тебя проблемы не будут проявляться.
Единственно, нужно отслеживать изменения при накате обновлений.

А подумай как твоя схема отработает в случае когда: В "темную" провелся документ, у него стоит лНеВыводитьСообщения=ИСТИНА
документ никто не открывает. Правят приходну вручную, запускают восстановление партий, документ перемещения проведется и не ругнется, а надо что бы ругался.
Batchir
Цитата(logist @ 01.08.09, 16:05) необходимо зарегистрироваться для просмотра ссылки
А если так:
глЗначениеПеременнойУстановить("а1сВыводитьСообщенияОНедостачеПартий", Истина, ОбновлятьВоВсехКэшах = Ложь);

глЗначениеПеременной("а1сВыводитьСообщенияОНедостачеПартий") на сервере предприятия отрабатывает с ошибкой, блин чую что можно как-то сделать, вот только не могу понять как.
Batchir
Вобщем спаибо logist за помощь этот фрагмент отработал на сервере номально
При запуске 1С в модуле приложения выполняю:


глЗначениеПеременнойУстановить("а1сВыводитьСообщенияОНедостачеПартий", Истина, Истина);

и в общем модуле стандартную часть вывода сообщений заменил на


// ==============================
// Добавлено а1с:РБ: 31.07.2009
Попытка
Попытка
а1сВыводитьСообщенияОНедостачеПартий = глЗначениеПеременной("а1сВыводитьСообщенияОНедостачеПартий");
Исключение
глЗначениеПеременнойУстановить("а1сВыводитьСообщенияОНедостачеПартий", Истина, Истина);
а1сВыводитьСообщенияОНедостачеПартий = глЗначениеПеременной("а1сВыводитьСообщенияОНедостачеПартий");
КонецПопытки;
Исключение
а1сВыводитьСообщенияОНедостачеПартий = Истина;
КонецПопытки;
// ==============================

// Товара не хватило
Если (КоличествоОсталосьПогасить > 0) Тогда
// ==============================
// Добавлено а1с:РБ: 31.07.2009
Если а1сВыводитьСообщенияОНедостачеПартий Тогда
СообщитьОНехваткеПартии(СтрокаДокумента, СтруктураПараметров,
РегистрУчета, КоличествоОсталосьПогасить);
КонецЕсли;
// закоментировано
//СообщитьОНехваткеПартии(СтрокаДокумента, СтруктураПараметров, РегистрУчета, КоличествоОсталосьПогасить);
// ==============================

Иначе
Если ЗначениеЗаполнено(СтрокаДокумента.ДокументПартии)
И (СтрокаДокумента.КодОперацииПартииТоваров = Перечисления.КодыОперацийПартииТоваров.ВозвратПоставщику)
И (КоличествоСписанноеПоДоументуПартии < СтрокаДокумента.Количество) Тогда
// ==============================
// Добавлено а1с:РБ: 31.07.2009
Если а1сВыводитьСообщенияОНедостачеПартий Тогда
СообщитьОНеполномСписанииУказаннойПартии(СтрокаДокумента, СтруктураПараметров,
РегистрУчета, КоличествоОсталосьПогасить);
КонецЕсли;
// закоментировано
//СообщитьОНеполномСписанииУказаннойПартии(СтрокаДокумента, СтруктураПараметров, РегистрУчета,
КоличествоОсталосьПогасить);
// ==============================
КонецЕсли;
КонецЕсли;
// ==============================
// Добавлено а1с:РБ: 31.07.2009
глЗначениеПеременнойУстановить("а1сВыводитьСообщенияОНедостачеПартий", Истина, Истина);
// ==============================


И все заработало.
З.Ы. + везде поставил wink.gif
zetovich
вот не докноца...видно....это всем/всегда НЕ будет выводится сие сообщенеи?
как помне из за таких проблем менять конфу....не
пусть тетя окошко внизу свернет...
Batchir
Цитата(zetovich @ 01.08.09, 19:16) необходимо зарегистрироваться для просмотра ссылки
вот не докноца...видно....это всем/всегда НЕ будет выводится сие сообщенеи?
как помне из за таких проблем менять конфу....не
пусть тетя окошко внизу свернет...

Оно должно не выводится только в тех случаях, где мне нужно.
zetovich, неужели думаешь, что год разрабатывалась конфа на основе УТ и не менялась?
Там столько сделано ... мама не горюй ... Сеть аптек (20 шт), центральный офис и склад до этого сидели на заточенном и полностью передаланным под них тисе. База и требования к ней уже переросли свои возможности. Сейчас написан обмен между 7.7 и 8.1, т.к. переход планируется плавный. Сначала офис и склад переходят на 8.1, т.е. фактически функцонируют параллельно две конфы и пока последняя точка не перейдет на 8.1 так и будет. УТ дописана под них конкретно (штаный механизм старались торгать по минимуму), но шла в основном надстройка над типовой конфой, что бы оставить возможность обновлений, пусть даже и тяжелых. После синхронизации 7.7 и 8.1 база в 8.1 превышает 40 ГБ.
Просто хочу сказать что выражения типа "как помне из за таких проблем менять конфу" в этом случае не уместны.
Я сам когда мне говорят "хочу вот видеть то и то" и есть два пути решения: один легкий но с доработками конфы, а другой тяжелый но с испоьзованием каких то внешних обработок, то стараюсь делать второй вариант, предупреждая заказчика что сейчас Вы заплатите больше, но вдальнейшем без проблем будете обновляться.
logist
Цитата(Batchir @ 01.08.09, 20:48) необходимо зарегистрироваться для просмотра ссылки
Просто хочу сказать что выражения типа "как помне из за таких проблем менять конфу" в этом случае не уместны.

Я мало понял, что же Вы все таки там делаете smile.gif Но из того, что я понял, я бы наверное искал другое решение, возможно "людское".

Цитата(Batchir @ 01.08.09, 20:48) необходимо зарегистрироваться для просмотра ссылки
Я сам когда мне говорят "хочу вот видеть то и то" и есть два пути решения: один легкий но с доработками конфы, а другой тяжелый но с испоьзованием каких то внешних обработок, то стараюсь делать второй вариант, предупреждая заказчика что сейчас Вы заплатите больше, но вдальнейшем без проблем будете обновляться.

+1
Batchir
Цитата(logist @ 01.08.09, 20:48) необходимо зарегистрироваться для просмотра ссылки
Я мало понял, что же Вы все таки там делаете smile.gif Но из того, что я понял, я бы наверное искал другое решение, возможно "людское".

Перевод крупной одесской сети аптек с уже написанной нами конфы на базе ТиС на УТ 8.1, серьёзный, крупный проект с огромным бюджетом. Я говорил, что описать всё немогу, лишь столкнулся с некоторыми вещами, которые просто нужно подправить.
Конфа построена так чтобы как можно больше облегчить работу пользователей с сохранением типового механизма работы, ежедневно центральный склад получает товара от 10 000 до 20 000 единиц товара (все это нужно правильно принять, отштрихкодировать и отправить на аптеки по их заказам). Большая часть документов формируется автоматом ночью: анализируются заказы и остатки аптек, рассылаются заказы поставщикам, обрабатываются присланные поставщиками приходные в электронном виде + все причуды фармацевтического бизнеса. И это лишь участок заказов и приемки товара.
Повторюсь я не в силах описать всё. Весь механизм приемки построен на специализированных АРМах и дополнительных регистрах, с помощью которых создаются, редактируются типовые документы.
sergefox
Еще раз.
Предлагаемый реквизит в документе Перемещение используется только при программном формировании документа в твоей обработке.
Нигде больше он не проявляется и в форме его не видно.
Поэтому никакая тетя не сможет его изменить.
Значение по умолчанию - всегда Ложь, кроме этой конкретной обработки.
Поэтому при прочих обработках - Последовательность, групповое перепроведение документов он будет проводиться с этим значением.
И только там, где ты напишешь при создании документа
Реквизит = Истина;
будет измененная обработка проведения.
Fynjy
ДокументОбъект.<Имя документа>.ДополнительныеСвойства (DocumentObject.<Имя документа>.AdditionalProperties)
ДокументОбъект.<Имя документа> (DocumentObject.<Имя документа>)
ДополнительныеСвойства (AdditionalProperties)
Использование:
Только чтение.
Описание:
Тип: Структура. Может использоваться в тех случаях, когда необходимо хранить некоторые значения, связанные с объектом, на время выполнения некоторых операций, без изменения объекта. Например, при обработке событий в подписке на события.
XML-сериализация.
Batchir
Цитата(sergefox @ 02.08.09, 21:41) необходимо зарегистрироваться для просмотра ссылки
Еще раз.
Предлагаемый реквизит в документе Перемещение используется только при программном формировании документа в твоей обработке.
Нигде больше он не проявляется и в форме его не видно.
Поэтому никакая тетя не сможет его изменить.
Значение по умолчанию - всегда Ложь, кроме этой конкретной обработки.
Поэтому при прочих обработках - Последовательность, групповое перепроведение документов он будет проводиться с этим значением.
И только там, где ты напишешь при создании документа
Реквизит = Истина;
будет измененная обработка проведения.


И в созданных програмно документах он всегда будет истина, правильно? И дальнейшое проведение таких документов сообщений не покажет, правильно?
Batchir
Цитата(Fynjy @ 03.08.09, 9:27) необходимо зарегистрироваться для просмотра ссылки
ДокументОбъект.<Имя документа>.ДополнительныеСвойства (DocumentObject.<Имя документа>.AdditionalProperties)
ДокументОбъект.<Имя документа> (DocumentObject.<Имя документа>)
ДополнительныеСвойства (AdditionalProperties)
Использование:
Только чтение.
Описание:
Тип: Структура. Может использоваться в тех случаях, когда необходимо хранить некоторые значения, связанные с объектом, на время выполнения некоторых операций, без изменения объекта. Например, при обработке событий в подписке на события.
XML-сериализация.

А вот этого не знал, спс
Fynjy
Век живи, век учись и дураком помрешь smile.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.