|
Документ на основании | ☑ | ||
---|---|---|---|---|
0
pro3ri
08.10.15
✎
10:30
|
ДОБРЫЙ ДЕНЬ!
Поставили задачу делать проверку документа (ТЧ) на остатки товаров на складах. Какое использовать событие? Попробовал событие вновь вводимого дока "Предварительная накладная", только вот тут нет Отказ. .. Процедура ОбработкаЗаполнения(Основание) Если ТипЗнч(Основание) = Тип("ДокументСсылка.СчетНаОплатуПокупателю") Тогда |
|||
1
mehfk
08.10.15
✎
10:31
|
ВызватьИсключение
|
|||
2
jurassic
08.10.15
✎
10:32
|
используй событие ВозникновениеПотребности
|
|||
3
pro3ri
08.10.15
✎
13:00
|
(0)+ Поставили задачу делать проверку документа (ТЧ) на остатки товаров на складах при введении нового документа. Если товара не достаточно тогда выводить сообщение "Товара не достаточно, вы не можете сделать документ Предварительная накладная". Какое использовать событие? Попробовал событие "Обработка проведения" вновь вводимого дока "Предварительная накладная", только вот тут нет параментра Отказ. ..
|
|||
4
GreatOne
08.10.15
✎
13:02
|
Расходимся, у него 8.3.7, там нет параметра ОТКАЗ.
|
|||
5
eklmn
гуру
08.10.15
✎
13:04
|
идиотская задача
|
|||
6
GreatOne
08.10.15
✎
13:05
|
(5) почему? 1С во всех типовых с торговлей такое сделала.
|
|||
7
DexterMorgan
08.10.15
✎
13:07
|
(6) При вводе на основании? чет ты гонишь
|
|||
8
GreatOne
08.10.15
✎
13:08
|
(7) я его пост читаю. Док. на основании только в топике, не обратил внимания.
|
|||
9
GreatOne
08.10.15
✎
13:08
|
>Попробовал событие "Обработка проведения" вновь вводимого дока "Предварительная накладная", только вот тут нет параментра Отказ. ..
|
|||
10
DexterMorgan
08.10.15
✎
13:10
|
(3) Вызывай специалиста кароче, он найдет тебе параметр отказ =)
|
|||
11
Масянька
08.10.15
✎
13:10
|
(7) ТиС 7.7 932
Процедура ВводНаОсновании(ДокументОснование) СинонимДокумента = ПредставлениеВида(); СинонимОснования = ДокументОснование.ПредставлениеВида(); Список = глПолучитьСписокВводимыхНаОсновании(ДокументОснование); Поз = Список.НайтиЗначение(Вид()); // выполним проверку, можно ли вводить документ на основании ДокументОснование Если Поз = 0 Тогда // ДокументОснование не найден в списке разрешенных Предупреждение("Документ """ + СинонимДокумента + """ нельзя вводить на основании """ + СинонимОснования + """", 60); СтатусВозврата(0); Возврат; КонецЕсли; КодОперации = Перечисление.КодыОпераций.Продажа; глЗаполнитьШапкуНаОсн(Контекст, ДокументОснование); ДатаОплаты = глБанковскаяДата(ДатаДок, Договор.ГлубинаКредита); // По умолчанию выписываем в той же валюте и по тому же курсу, что и документ-основание Валюта = ДокументОснование.Валюта; Курс = ДокументОснование.Курс; // Документы оптовой торговли можно оформлять только с оптового склада Если (Склад.РозничныйСклад = 1) Тогда Склад = ""; КонецЕсли; // если основание - неподтвержденная заявка, то нужно заполнить // склад по умолчанию Если ПустоеЗначение(Склад) = 1 Тогда ВремСклад = глЗначениеПоУмолчанию("ОсновнойСклад"); Если ВремСклад.РозничныйСклад = 0 Тогда Склад = ВремСклад; КонецЕсли; КонецЕсли; Результат = ЗаполнениеПоИтогам(); Если ПустоеЗначение(Результат) = 0 Тогда Сообщить(Результат); СтатусВозврата(0); КонецЕсли; СтарыйКонтрагент = Контрагент; СтарыйДоговор = Договор; ПечатьДоговора = Договор; КонецПроцедуры // ВводНаОсновании() Функция ЗаполнениеПоИтогам() Перем ЗарезервированниеТовары, ТекСтрокаИтогов; // Фирма и договор (контрагента) должны быть заполнены. Если ПустоеЗначение(Фирма) = 1 Тогда Возврат "Не выбрана фирма!"; КонецЕсли; ФирмаДляОстатковТМЦ = глФирмаДляОстатковТМЦ(Фирма); Если ПустоеЗначение(Договор) = 1 Тогда Возврат "Не выбран договор контрагента!"; КонецЕсли; РегОбщ = СоздатьОбъект("Регистры"); РегЗаявки = РегОбщ.Заявки; РегОстатки = РегОбщ.ОстаткиТМЦ; РегРезервы = РегОбщ.РезервыТМЦ; // Установим фильтры на регистр "Заявки". РегЗаявки.УстановитьЗначениеФильтра("Фирма", ФирмаДляОстатковТМЦ, 2); РегЗаявки.УстановитьЗначениеФильтра("ДоговорПокупателя", Договор, 1); ЗаполнятьПоОснованию = 0; // Флаг варианта заполнения ЗаполнятьСУчетомРезервов = 0; ЗаполнятьСУчетомОстатков = 0; Если ПустоеЗначение(ДокОснование) = 0 Тогда Если ДокОснование.КоличествоСтрок() > 0 Тогда ЗаполнятьПоОснованию = 1; // Если есть заказ, то заполняем недополученными по нему товарами РегЗаявки.УстановитьЗначениеФильтра("ЗаявкаПокупателя", ДокОснование, 1); // Получим список номенклатуры для установки фильтров СписокТоваров = СоздатьОбъект("СписокЗначений"); ДокОснование.ВыгрузитьТабличнуюЧасть(СписокТоваров, "Номенклатура"); РегЗаявки.УстановитьЗначениеФильтра("Номенклатура", СписокТоваров, 2); // Определим необходимо ли контролировать остатки, // а, следовательно, заполнять с учетом свободных остатков. Если Константа.КонтрольОтрицательныхОстатков = Перечисление.СпособыКонтроляОстатковТМЦ.НеКонтролировать Тогда ЗаполнятьСУчетомОстатков = 0; Иначе ЗаполнятьСУчетомОстатков = 1; Если глПолучитьПолномочие("РазрешитьПродаватьРезерв") = 0 Тогда ЗаполнятьСУчетомРезервов = 1; КонецЕсли; КонецЕсли; // Если склад не выбран, то заполним без учета остатков Если ПустоеЗначение(Склад) = 1 Тогда ЗаполнятьСУчетомОстатков = 0; КонецЕсли; // Установим фильтры на регистры: "ОстаткиТМЦ", "РезервыТМЦ". Если ЗаполнятьСУчетомОстатков = 1 Тогда РегОстатки.УстановитьЗначениеФильтра("Фирма", ФирмаДляОстатковТМЦ, 2); РегОстатки.УстановитьЗначениеФильтра("Номенклатура", СписокТоваров, 2); КонецЕсли; Если ЗаполнятьСУчетомРезервов = 1 Тогда РегРезервы.УстановитьЗначениеФильтра("Фирма", ФирмаДляОстатковТМЦ, 2); РегРезервы.УстановитьЗначениеФильтра("Номенклатура", СписокТоваров, 2); КонецЕсли; КонецЕсли; КонецЕсли; // Если нужно, то выполним временный расчет регистра Если Выбран() = 0 Тогда // новый документ Если ДатаДок < ПолучитьДатуТА() Тогда // выписываемый задним числом РегЗаявки.ВременныйРасчет(); РегОстатки.ВременныйРасчет(ЗаполнятьСУчетомОстатков); РегРезервы.ВременныйРасчет(ЗаполнятьСУчетомРезервов); РегОбщ.РассчитатьРегистрыПо(ДатаДок); КонецЕсли; Иначе // сохраненный документ Если СравнитьТА() < 1 Тогда // позиция не больше ТА РегЗаявки.ВременныйРасчет(); РегОстатки.ВременныйРасчет(ЗаполнятьСУчетомОстатков); РегРезервы.ВременныйРасчет(ЗаполнятьСУчетомРезервов); РегОбщ.РассчитатьРегистрыНа(ТекущийДокумент()); КонецЕсли; КонецЕсли; РегЗаявки.ВыгрузитьИтоги(ЗарезервированниеТовары, 1, 1); ЗарезервированниеТовары.Свернуть("Номенклатура", "КоличествоРасход,СтоимостьРасход"); Если ЗаполнятьПоОснованию = 0 Тогда ВалютаОстатков = Договор.ВалютаВзаиморасчетов; ЗарезервированниеТовары.ВыбратьСтроки(); СуммаВзаиморасчетов = 0; Пока ЗарезервированниеТовары.ПолучитьСтроку() = 1 Цикл НоваяСтрока(); Номенклатура = ЗарезервированниеТовары.Номенклатура; Единица = Номенклатура.ОсновнаяЕдиница; Коэффициент = Единица.Коэффициент; Количество = ЗарезервированниеТовары.КоличествоРасход / ?(Коэффициент = 0, 1, Коэффициент); Если УчитыватьНДС = 1 Тогда СтавкаНДС = Номенклатура.СтавкаНДС; КонецЕсли; Если УчитыватьНП = 1 Тогда СтавкаНП = Номенклатура.СтавкаНП; КонецЕсли; ОбщСумма = глПересчет(ЗарезервированниеТовары.СтоимостьРасход, ВалютаОстатков, ДатаДок, Валюта, Курс); ВремСтавкаНП = Номенклатура.СтавкаНП.Ставка; РассчитатьСуммыПоВарианту( ОбщСумма, глВыделяемыйНДС(Номенклатура.СтавкаНДС), // коэффициент выделяемого НДС ВремСтавкаНП/(100 + ВремСтавкаНП), // коэффициент выделяемого НП Сумма, СуммаНДС, СуммаНП); СуммаВзаиморасчетов = СуммаВзаиморасчетов + ЗарезервированниеТовары.СтоимостьРасход; Если Количество <> 0 Тогда Цена = Сумма / Количество; Иначе Цена = Сумма; КонецЕсли; КонецЦикла; Иначе // Заполняем по основанию // При заполнении на основании Заявки цены, суммы и скидки надо брать из основания ТаблицаДокумента = СоздатьОбъект("ТаблицаЗначений"); ДокОснование.ВыгрузитьТабличнуюЧасть(ТаблицаДокумента); ВалютаОсн = ДокОснование.Валюта; КурсОсн = ДокОснование.Курс; ТаблицаДокумента.ВыбратьСтроки(); Пока ТаблицаДокумента.ПолучитьСтроку()=1 Цикл // Есть остатки по этой строке? ТекСтрокаИтогов = 0; Если ЗарезервированниеТовары.НайтиЗначение(ТаблицаДокумента.Номенклатура, ТекСтрокаИтогов, "Номенклатура") = 0 Тогда // нет остатков Продолжить; КонецЕсли; КоличествоРасход = ЗарезервированниеТовары.ПолучитьЗначение(ТекСтрокаИтогов, "КоличествоРасход"); Если КоличествоРасход = 0 Тогда // нет остатков Продолжить; КонецЕсли; ТекНоменклатура = ТаблицаДокумента.Номенклатура; Отпустить = Мин(ТаблицаДокумента.Количество, КоличествоРасход / ТаблицаДокумента.Коэффициент);; Если (ТекНоменклатура.ВидНоменклатуры = Перечисление.ВидыНоменклатуры.Услуга) или (ТекНоменклатура.ВидНоменклатуры = Перечисление.ВидыНоменклатуры.Работа) Тогда // Считаем, что оказать услуги или выполнить работы нам ничего не мешает. МожноОтпустить = Отпустить; Иначе Если ЗаполнятьСУчетомОстатков = 1 Тогда // Получим количество с учетом свободного остатка и на складе, и по фирме. МожноОтпустить = ПолучитьКоличество(ФирмаДляОстатковТМЦ, ТекНоменклатура, Отпустить, РегОстатки, ЗаполнятьСУчетомРезервов, РегРезервы); Иначе МожноОтпустить = Отпустить; КонецЕсли; КонецЕсли; Если МожноОтпустить = 0 Тогда Продолжить; КонецЕсли; НоваяСтрока(); СтавкаНДС = ТаблицаДокумента.СтавкаНДС; СтавкаНП = ТаблицаДокумента.СтавкаНП; Номенклатура= ТаблицаДокумента.Номенклатура; Единица = ТаблицаДокумента.Единица; Коэффициент = ТаблицаДокумента.Коэффициент; Количество = МожноОтпустить; Цена = глПересчет(ТаблицаДокумента.Цена, ВалютаОсн, КурсОсн, Валюта, Курс); ВремСумма = ТаблицаДокумента.Сумма * Количество / ТаблицаДокумента.Количество; // для учета скидок в документе основании Сумма = глПересчет(ВремСумма, ВалютаОсн, КурсОсн, Валюта, Курс); глПересчетТаблЧасти(Контекст,"Сумма"); КонецЦикла; // по строкам основания ОснованиеСумма = ДокОснование.Итог("Сумма"); СуммаВзаиморасчетов = ?(ОснованиеСумма = 0, 0, ДокОснование.СуммаВзаиморасчетов * Итог("Сумма") / ОснованиеСумма); КонецЕсли; // ЗаполнятьПоОснованию = 0 Если КоличествоСтрок() = 0 Тогда Возврат "Все заказанные товары либо получены, либо их нет в наличии!"; КонецЕсли; Возврат ""; // успешное завершение КонецФункции // ЗаполнениеПоИтогам() |
|||
12
aka AMIGO
08.10.15
✎
13:13
|
(11) дык вроде 8-ка у него..
ЗЫ. плохо, когда тянуть из ТС приходится.. |
|||
14
pro3ri
08.10.15
✎
13:15
|
(12) стоит 8.1 последний релиз
|
|||
15
Масянька
08.10.15
✎
13:15
|
(13) Полегче... Ты писал в (7). Нет, он не гонит.
|
|||
16
aka AMIGO
08.10.15
✎
13:17
|
(15) нажми F5 и не серчай..
|
|||
17
DexterMorgan
08.10.15
✎
13:29
|
(15) Он писал что ВО ВСЕХ типовых.
А вообще, какой в этом смысл? контролировать остатки нужно при проведении документа, зачем делать это при вводе на основании? Можно контролировать скажем остатки по заказу, при вводе реализации, но зачем контролировать остатки по складу? |
|||
18
Масянька
08.10.15
✎
13:30
|
(17) Удобно. Очень. На основании счета вводишь реализацию - сразу видно, чего нет или не хватает.
|
|||
19
DexterMorgan
08.10.15
✎
13:31
|
(17) + И вообще ну скажем прошел контроль при вводе на основании, документ создался и еще не проведен. Все равно при проведении товара может уже не хватить и выполнять контрль все равно нужно.
|
|||
20
DexterMorgan
08.10.15
✎
13:32
|
(18) для этого в современных конфигурациях, на современной платформе сделали в заказе Состояние обеспечения, которые тебе покажет, какой товар обеспечен и готов к отгрузке, а какой товар еще нет
|
|||
21
Масянька
08.10.15
✎
13:34
|
(20) А меня устраивает, как есть.
Легко, просто, понятно. |
|||
22
DexterMorgan
08.10.15
✎
13:36
|
(20) Я рад за тебя
|
|||
23
DexterMorgan
08.10.15
✎
13:37
|
(21) А вообще, просто интересно. Вот ввели документ все ок по остаткам все проходит. Проводишь и уже не хватает, не тебе кажется это странным?
|
|||
24
Масянька
08.10.15
✎
13:39
|
(23) А в (20) будет по другому?
|
|||
25
aka AMIGO
08.10.15
✎
13:39
|
(23) тут два варианта:
- кто-то ввел док с таким-же товаром - визуально в модуле формы (ТЧ дока) отражается по другому алгоритму, чем в модуле документа.. |
|||
26
DexterMorgan
08.10.15
✎
13:44
|
(24) Ну так для этого схема резервирования используется, естественно, что если товар не в резерве тебе никто не гарантирует, что ты в любой момент его отгрузишь. А состояние обеспечения просто информация по заказу в текущий момент времени. Не только при вводе на основании, а когда захочешь.
(25) Абсолютно верно. Пока ты возился с оформлением документа, товар уже отгрузил другой манагер. |
|||
27
DexterMorgan
08.10.15
✎
13:45
|
(24) Следуя твоей логике, при добавлении товара в документ тоже нужно контролировать есть он складе или нет
|
|||
28
Масянька
08.10.15
✎
13:45
|
(26) Ты расстроишься, но в ТиСе тоже есть механизм резервирования.
|
|||
29
Масянька
08.10.15
✎
13:46
|
(27) Нет. Это твоя логика.
Если реализацию вводят на основании счета - желательно. |
|||
30
aka AMIGO
08.10.15
✎
13:48
|
а вообще-то.. в частности у нас в ТЧ счетов и кп.. и перемещений тоже, выводятся всегда 3 колонки:
- полный остаток по филиалу - резерв - свободный остаток И не от хорошей жизни эти цифири показаны |
|||
31
Масянька
08.10.15
✎
13:50
|
(30) Я убрала, оставила только остаток по фирме, а слева снизу нарисовала окошко с остатками по складам. Даже самой понравилось :)))
А насчет жизни - полностью согласна. |
|||
32
GreatOne
08.10.15
✎
14:00
|
Декстеру опять пукан рвет?
Кстати в (6) я имел в виду проверку остатков при проведении |
|||
33
DexterMorgan
08.10.15
✎
14:04
|
(28) Да чего мне расстраиваться, мне не интересна эта конфигурация =) Тут суть то в другом - для обеспечения отгрузки используется механизм резервирования, а информация по наличию товара на складе ДО проведения документа нужна лишь справочно, я не понимаю зачем ее контролировать при вводе на основании.
(30) ну так я согласен, единственное выводить в колонках я думаю не совсем верно, лучше отчетом или как то обновлять их надо (31) Ну так вот, у тебя эти цифры итак есть в документе, зачем при вводе их контролировать? (32) да я сначала подумал, что ты имеешь ввиду ввод на основании. И ничего у меня не рвет) Вы какие-то негативно настроенные, я правда не понимаю зачем контролировать остатки при вводе на основании и привожу аргументы, расслабьтесь |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |