|
УТ 11.1 Программное создание документа установка цен и автоматический расчет цен | ☑ | ||
---|---|---|---|---|
0
fantomrik
19.01.16
✎
19:24
|
Камрады, день добрый!
Собственно хочу автоматом устанавливать цены через подписку при поступлении. Посмотрел по коду - сам черт ногу сломит как цены он рассчитывает (заполнить документ то не проблема, без самих цен). И больше всего смущает, что почти все процедуры расчета выполняются с участием формы документа... Возможно кто то писал подобное, подскажите что мне действительно нужно? Док программно создаю, заполняю виды цен, заполняю товары. А далее как максимально просто рассчитать цены (по схемам СКД из видов цен)? Спасибо! |
|||
1
fantomrik
19.01.16
✎
19:33
|
Я просто как то сразу теряюсь, когда вижу что типовой механизм берет форму и в ней все рассчитывает. Программно то я без формы создаю объект.
Вот и подумал, может кто писал подобное, подскажет как максимально быстро раскопать это. |
|||
2
alalsl88
19.01.16
✎
20:19
|
Есть конфигурация с кодом, могу скинуть.
|
|||
3
fantomrik
19.01.16
✎
20:50
|
(2) скинь пожалуйста, надо на файлобменник, на почту не зайдет cf. [email protected]
|
|||
4
fantomrik
19.01.16
✎
22:16
|
Вопрос еще актуален, если кто сталкивался с задачей автоматического расчета цена при проведении поступления.
|
|||
5
Nirvana
19.01.16
✎
22:47
|
(4) Я не понимаю - тебе цены установить надо или документ создать?
Если создать документ "Установка цен номенклатуры" - достаточно сделать ввод на основании поступления - цены рассчитаются в соответствии с настройками видов цен. А если нужно только цены установить - никакой документ создавать не надо, достаточно сделать записи в регистр сведений "Цены номенклатуры". |
|||
6
Cyberhawk
19.01.16
✎
22:52
|
"достаточно сделать записи в регистр сведений "Цены номенклатуры"" // путем создания и проведения документа установки цен
|
|||
7
fantomrik
19.01.16
✎
23:07
|
(6) я так и хочу, но не могу понять, как в моем созданном документе рассчитать цены не руками, а запустив типовые механизмы расчёта
|
|||
8
Nirvana
19.01.16
✎
23:11
|
(6) Неправильно. Документ установки цен для записи цен в регистр не требуется, и основное назначение этого документа вообще не в этом.
|
|||
9
Nirvana
19.01.16
✎
23:12
|
(7) Всё это настраивается в видах цен.
|
|||
10
DexterMorgan
19.01.16
✎
23:12
|
(8) да ты ч0. А в чем основное назначение документа, просвети, плз
|
|||
11
DexterMorgan
19.01.16
✎
23:14
|
(5) Интересно какой регистратор будет у твоей записи? Корректировка регистров?
|
|||
12
Cyberhawk
19.01.16
✎
23:17
|
(7) Придется либо сэмулировать клиентский код (добиться его выполнения), либо переносить логику клиентского кода на сервер
|
|||
13
Nirvana
19.01.16
✎
23:20
|
(10) Как и любого другого - в фиксации факта действий пользователя. В данном случае - действий пользователя по изменению цен. Если же пользователь ничего не делает - всё устанавливается автоматически, то фиксировать нечего и документ не нужен.
(11) Если исходить из (0), то "Поступление товаров и услуг". |
|||
14
DexterMorgan
19.01.16
✎
23:22
|
(13) Ну ты знаток. Такую чушь пишешь
|
|||
15
DexterMorgan
19.01.16
✎
23:22
|
(13) Откуда вылез?
|
|||
16
fantomrik
19.01.16
✎
23:24
|
(12) вот это и пугает ( не знаю как правильнее сделать
|
|||
17
Мимохожий Однако
19.01.16
✎
23:29
|
Чем не устраивает формирование нового документа Установка цен программно и без форм?
|
|||
18
Cyberhawk
19.01.16
✎
23:29
|
(16) Переложи ответственность на пользователя - вместо подписки привяжись к записи документа поступления в форме и показывай пользователю форму нового созданного документа
|
|||
19
DexterMorgan
19.01.16
✎
23:31
|
(13) Захожу тут в регистр сведений "Цены номенклатуры" и вижу, что режим записи у него - подчинение регистратору, а регистраторами могут быть либо "Установка цен номенклатуры" либо "Корректировка регистров". Нужно с поддержки снять и добавить в регистраторы "Поступление товаров и услуг"?
|
|||
20
Cyberhawk
19.01.16
✎
23:32
|
(19) Чувак может путает с ценами номенклатуры контрагентов (поставщиков)
|
|||
21
Cyberhawk
19.01.16
✎
23:32
|
Хотя исходя из его ответов про формулы расчета цен, не путает...
|
|||
22
Cyberhawk
19.01.16
✎
23:32
|
Ну да ладно, ответы вроде даны, всем спасмбо
|
|||
23
Cyberhawk
19.01.16
✎
23:33
|
*спасибо
|
|||
24
DexterMorgan
19.01.16
✎
23:33
|
(20) Нее, просто дятел =)
|
|||
25
Nirvana
19.01.16
✎
23:58
|
(14)(19) Если тебе мои ответы не нужны, то нефиг и спрашивать.
А с поддержки снимать вообще нет никакого смысла - для доработок конфигурации это не требуется. И если автор что-то дописывает типа (0), то добавление в регистраторы поступления - сущий пустяк, и недоумевать тут не о чем. |
|||
26
fantomrik
20.01.16
✎
00:00
|
(17) в том основной вопрос, не могу понять как рассчитывать цены без формы, но типовыми механизмами.
|
|||
27
Nirvana
20.01.16
✎
00:01
|
(16) Попробуй описать всю задачу в целом.
Для описанного в (0) есть вполне рабочий типовой механизм, непонятно чем он тебя не устраивает. |
|||
28
fantomrik
20.01.16
✎
00:02
|
Я хочу менять регистор и тп. Хочу программно создать установку цен, заполнить, но что бы цены расчитались механизмами ут, так как в будущем виды цен и их формулы могут измениться
|
|||
29
fantomrik
20.01.16
✎
00:02
|
Я не хочу *
Опечатка |
|||
30
Nirvana
20.01.16
✎
00:05
|
(28) Тогда чем тебя не устраивает ввод установки цен на основании поступления?
|
|||
31
fantomrik
20.01.16
✎
00:11
|
(30) с пользователей хочу снять нагрузку создания документа установка цен. Плюс скоро нужно будет создавать установку, заполняя данными закупочных цен из внешней sql базы и рассчитывать остальные виды цен.
|
|||
32
fantomrik
20.01.16
✎
02:26
|
(28) Собственно подумал можно пойти таким путем. На сервере создать (просто создать, не открывать) форму объекта Установка цен, вызвать процедуры (скопировав из модуля типовой формы к себе в модуль) заполнения, полученные данные перенести в объект и объект записать.
Начал это делать, наткнулся на следующее - процедуры в форме работают с данными УправляемаяФорма, а на сервере кодом ТекущаяФорма = ДокументУЦН.ПолучитьФорму("ФормаДокумента"); я получаю просто форму. Какие то элементы недоступны и процедуры не работают. Как получить программно Управляемую форму? И как после ее заполнения, перенести данные в объект? p.s. Все заполение вызывается из процедуры ПриСозданииНаСервере, и все вложенные процедуры исполняются на сервере, поэтому предположил, что такой вариант прокатит. |
|||
33
Mort
20.01.16
✎
08:58
|
Подброшу ещё будущего гимора с этой затеей:
Цены номенклатуры имеют периодичность "день". Две установки по одной номенклатуре одной датой не сделаешь, а поступления - пожалуйста. |
|||
34
fantomrik
20.01.16
✎
08:59
|
(33) Если типовыми средствами сделаю, у документа есть номер в пределах дня же, и когда руками создаешь установку, хоть 100 раз в день меняй цену.
|
|||
35
lubitelxml
20.01.16
✎
09:05
|
(34) либо Вы чего-то недопонимаете, либо все остальные
|
|||
36
fantomrik
20.01.16
✎
09:14
|
(35) Да бог с ним, с (34) нумерацией в пределах дня.
Как решить (32) задачу? Так получится решить? Уже подумал, может возможно в объект записывать доп свойство свое, открывать форму типовым механизмом и если есть мое доп свойство, записывать заполненные данные в объект из формы. |
|||
37
fantomrik
20.01.16
✎
10:40
|
Нашел такую стать http://catalog.mista.ru/public/236382/ но не понятно как получить или открыть упр форму у еще не записанного объекта (нет ссылки).
По типовому механизму, при создании на основании, в модуле объекта идет обработка заполнения объекта на основании поступления, дальше запускает процедура ПриСозданииНаСервере() модуля формы. Как мне имея еще не записанный объект запустить ПриСозданииНаСервере() формы этого объекта? |
|||
38
Nirvana
20.01.16
✎
23:26
|
(31) Значит, ты изобретаешь травмоопасный велосипед.
Решение о том, какими должны быть цены, принимают люди, а не программа. Именно для этого в УТ и предназначен документ "Установка цен номенклатуры", который во всех случаях проводится пользователем, и никакой автоматической установки цен не предусмотрено. Предусмотрено, что автоматически могут быть рассчитаны цены и заполнен документ, но решение провести именно такие цены (или не проводить их) принимает конкретный человек с соответствующими полномочиями и ответственностью (для него и поле "Ответственный" предусмотрено). И если вдруг возникают какие-то вопросы по ценам, то это конкретное ответственное лицо и даёт ответы, почему именно такие цены. В противном случае, если люди не участвуют в решении изменить цены, если всё происходит автоматически, то рано или поздно в этот порядок попадают ошибочные исходные данные и устанавливаются ошибочные цены, а когда никто за этим не следит, это обнаруживается слишком поздно - уже после того, как произошли непоправимые неприятности. И в этом случае вместо вразумительного ответа о происхождении цен всё понимание сводится к тому, что "программа почему-то так посчитала" (и в конечном счёте, "ответственным" в такой ситуации оказывается разработчик конфигурации). Ну и если всё же велико желание исключить людей из процесса назначения цен, то документ "Установка цен номенклатуры" теряет всякий смысл - в типовом учёте он предназначен для утверждения людьми. И если он заполняется и проводится при каких-то других событиях (документах), то все его движения могут выполняться в рамках тех исходных документов без создания лишнего документа установки в базе. (28) Здесь не совсем понятен механизм поступления и установки цен. Что должно происходить при повторном проведении поступления: создаваться новая установка цен или перезаписываться ранее созданная? Если будет делаться новый документ установки цен, то тогда вся польза от этих документов сводится к хранению истории расчёта цен (какие были при первом проведении, при втором, при третьем...), а для этого было бы достаточно табличной части (новой) в самом документе поступления - хранить это в отдельном документе (документах!) будет излишним. При таком варианте, как уже говорилось, нужно продублировать в поступлении процедуры расчёта вычисляемых цен (из процедур установки цен), дописывать специальную табличную часть и обновлять записи в регистре сведений - и всё это не выходя за пределы документа поступления. Если же при повторном проведении поступления будет перезаписываться одна и та же установка цен, то тогда выходит, что этот документ будет просто повторять в себе содержимое регистра сведений, никаких уникальных данных храниться не будет, и для этого достаточно всего лишь делать записи в регистре документом поступления (без излишних документов и табличных частей). Но, разумеется, для всего этого придётся в документе поступления продублировать процедуры расчёта цен и доделать запись в регистр сведений. И если уж ОЧЕНЬ НЕ ХОЧЕТСЯ с этим возиться, то можно, конечно, и создавать установку цен: делать программный ввод установки цен на основании, открывать форму, после чего либо записывать и проводить эту установку цен (и она сделает движения), либо брать через её форму табличную часть с рассчитанными ценами и использовать их в проведении поступления для записи в регистр (а форму установки цен просто закрывать без записи). Но надо понимать, что это означает дополнительное время на открытие формы, дополнительную запись документа (если сохранять установку) и сам дополнительный документ в базе (опять же, если записывать). |
|||
39
Nirvana
20.01.16
✎
23:29
|
(32) Хотя, если всё заполнение (расчёт цен) выполняется в процедуре "ПриСозданииНаСервере" (я просто не помню), то можно и не открывать форму (это по поводу последнего абзаца в (38)).
|
|||
40
Nirvana
20.01.16
✎
23:30
|
(32) Ты пытаешься получить форму методом объекта, а нужно общим методом:
ПолучитьФорму("Документ.УстановкаЦенНоменклатуры.Форма.ФормаДокумента") Как-то так... |
|||
41
Nirvana
20.01.16
✎
23:36
|
(33)(34)(35) Периодичность "День" влияет только на так называемые виртуальные таблицы (типа "СрезПоследних").
Одинаковых движений в одном дне может быть сколько угодно - в разном времени, а в "СрезПоследних" попадёт последнее движение за день. |
|||
42
Nirvana
20.01.16
✎
23:38
|
(37) При создании управляемой формы это должно случиться, см. (40).
|
|||
43
fantomrik
23.01.16
✎
20:48
|
(38) Есть такое понятие - руководство хочет. Раз хочет, сделаем, это "их" решение :)
В любом случае спасибо за ваши комментарии. Собственно победил я эту задачу. Послушал умного совета и скопировав целиком модуль "УстановкаЦенСервер" немного поправил под нужды задачи. Думаю подобная задача может еще раз всплыть, у меня ушло уйма времени на решение, поэтому ниже выложу "код". В первом серверном модуле сама процедура создания установки установке цен на основании документа поступления. Второй типовой модуль расчетов, с моими корректировками. Конечно много не оптимально, но работает :) Надеюсь кому то пригодиться! |
|||
44
fantomrik
23.01.16
✎
20:50
|
// Создает документ Установка цен номенклатуры на основании документа поступления
// // Параметры: // <ДокументПоступления> - <ДокументОбъект.ПоступлениеТоваровУслуг> > // // Процедура УстановитьЦеныНоменклатуры(ДокументОснование) //Проверка на необходимость создания Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | УстановкаЦенНоменклатуры.Ссылка |ИЗ | Документ.УстановкаЦенНоменклатуры КАК УстановкаЦенНоменклатуры |ГДЕ | УстановкаЦенНоменклатуры.Проведен | И УстановкаЦенНоменклатуры.ДокументОснование = &ДокументОснование | И УстановкаЦенНоменклатуры.Комментарий ПОДОБНО ""%Создан автоматически на основании поступления%"""; Запрос.УстановитьПараметр("ДокументОснование", ДокументОснование.Ссылка); РезультатЗапроса = Запрос.Выполнить(); Если НЕ РезультатЗапроса.Пустой() Тогда Возврат; КонецЕсли; //Создание и проведение документа установка цен НачатьТранзакцию(); Запрос = Новый Запрос( "ВЫБРАТЬ | ПоступлениеТоваровУслугТовары.Номенклатура КАК Номенклатура, | ПоступлениеТоваровУслугТовары.Характеристика КАК Характеристика, | ПоступлениеТоваровУслугТовары.Упаковка КАК Упаковка, | ВидыЦен.Ссылка КАК ВидЦены, | 0 КАК Цена |ИЗ | Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВидыЦен КАК ВидыЦен | ПО (ВидыЦен.УстанавливатьЦенуПриВводеНаОсновании) | И (НЕ ВидыЦен.ПометкаУдаления) |ГДЕ | ПоступлениеТоваровУслугТовары.Ссылка = &Ссылка"); Запрос.УстановитьПараметр("Ссылка", ДокументОснование.Ссылка); РезультатЗапроса = Запрос.Выполнить(); Если РезультатЗапроса.Пустой() Тогда Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Не требуется вводить установку цен номенклатуры на основании документа %1'"), ДокументОснование); ВызватьИсключение Текст; Иначе ДокументУЦН = Документы.УстановкаЦенНоменклатуры.СоздатьДокумент(); ДокументУЦН.ДокументОснование = ДокументОснование.Ссылка; ДокументУЦН.Комментарий = "Создан автоматически на основании поступления"; ДокументУЦН.Товары.Загрузить(РезультатЗапроса.Выгрузить()); КонецЕсли; НомерВПределахДня = УстановкаЦенВызовСервера.РассчитатьНомерВПределахДня(УстановкаЦенКлиентСервер.ДатаДокумента(ТекущаяДата()), ДокументУЦН.Ссылка); ДокументУЦН.Дата = УстановкаЦенКлиентСервер.РассчитатьДатуДокумента(УстановкаЦенКлиентСервер.ДатаДокумента(ТекущаяДата()), НомерВПределахДня); ИспользоватьЦеновыеГруппы = ПолучитьФункциональнуюОпцию("ИспользоватьЦеновыеГруппы"); ИспользоватьХарактеристикиНоменклатуры = ПолучитьФункциональнуюОпцию("ИспользоватьХарактеристикиНоменклатуры"); ИспользоватьУпаковкиНоменклатуры = ПолучитьФункциональнуюОпцию("ИспользоватьУпаковкиНоменклатуры"); ИспользоватьНесколькоВидовЦен = ПолучитьФункциональнуюОпцию("ИспользоватьНесколькоВидовЦен"); ПравоРегистрацииШтрихкодовНоменклатурыДоступно = ШтрихкодированиеНоменклатурыСервер.ПравоРегистрацииШтрихкодовНоменклатурыДоступно(); СтруктураФорма = Новый Структура(); СтруктураФорма.Вставить("Объект" , ДокументУЦН); СтруктураФорма.Вставить("КодФормы" , ""); СтруктураФорма.Вставить("УникальныйИдентификатор" , Новый УникальныйИдентификатор); СтруктураФорма.Вставить("АвтоматическоеСоздание" , Истина); СтруктураФорма.Вставить("ИспользоватьНесколькоВидовЦен" , ИспользоватьНесколькоВидовЦен); СтруктураФорма.Вставить("ИспользоватьХарактеристикиНоменклатуры" , ИспользоватьХарактеристикиНоменклатуры); СтруктураФорма.Вставить("ИспользоватьУпаковкиНоменклатуры" , ИспользоватьУпаковкиНоменклатуры); СтруктураФорма.Вставить("ИспользоватьЦеновыеГруппы" , ИспользоватьЦеновыеГруппы); СтруктураФорма.Вставить("АдресХранилищаДанныхДляРасчетаВычисляемыхЦенНаКлиенте" , ""); СтруктураФорма.Вставить("АдресХранилищаМассиваВлияющихЦен" , ""); СтруктураФорма.Вставить("АдресХранилищаНастройкиКомпоновкиДанных" , ""); СтруктураФорма.Вставить("АдресХранилищаПараметровСхемКомпоновкиПоВидамЦен" , ""); СтруктураФорма.Вставить("ВыбранныеЦеныИзменены" , Ложь); СтруктураФорма.Вставить("РассчитыватьАвтоматически" , Истина); СтруктураФорма.Вставить("Модифицированность" , Истина); ВыбранныеЦены = Новый ТаблицаЗначений(); ВыбранныеЦены.Колонки.Добавить("Ссылка" , Новый ОписаниеТипов("СправочникСсылка.ВидыЦен")); ВыбранныеЦены.Колонки.Добавить("СпособЗаданияЦены" , Новый ОписаниеТипов("ПеречислениеСсылка.СпособыЗаданияЦен")); ВыбранныеЦены.Колонки.Добавить("Выбрана" , Новый ОписаниеТипов("Булево")); ВыбранныеЦены.Колонки.Добавить("Зависит" , Новый ОписаниеТипов("Булево")); ВыбранныеЦены.Колонки.Добавить("Влияет" , Новый ОписаниеТипов("Булево")); ВыбранныеЦены.Колонки.Добавить("ВлияющиеЦены" , Новый ОписаниеТипов("СписокЗначений")); ВыбранныеЦены.Колонки.Добавить("ЗависимыеЦены" , Новый ОписаниеТипов("СписокЗначений")); ВыбранныеЦены.Колонки.Добавить("Уровень" , ОбщегоНазначенияУТ.ПолучитьОписаниеТиповЧисла(10,0)); ВыбранныеЦены.Колонки.Добавить("Валюта" , Новый ОписаниеТипов("СправочникСсылка.Валюты")); ВыбранныеЦены.Колонки.Добавить("РеквизитДопУпорядочивания" , ОбщегоНазначенияУТ.ПолучитьОписаниеТиповЧисла(5,0)); ВыбранныеЦены.Колонки.Добавить("Идентификатор" , ВариантыОтчетов.ОписаниеТиповСтрока(50)); ВыбранныеЦены.Колонки.Добавить("Зависимый" , ВариантыОтчетов.ОписаниеТиповСтрока(0)); ВыбранныеЦены.Колонки.Добавить("Наименование" , ВариантыОтчетов.ОписаниеТиповСтрока(0)); ВыбранныеЦены.Колонки.Добавить("ИмяКолонки" , ВариантыОтчетов.ОписаниеТиповСтрока(0)); ВыбранныеЦены.Колонки.Добавить("ЦеновыеГруппы" , Новый ОписаниеТипов("ТаблицаЗначений")); ВыбранныеЦены.Колонки.Добавить("Формула" , ВариантыОтчетов.ОписаниеТиповСтрока(0)); ВыбранныеЦены.Колонки.Добавить("ПорогСрабатывания" , ОбщегоНазначенияУТ.ПолучитьОписаниеТиповЧисла(15,2)); ВыбранныеЦены.Колонки.Добавить("ПорогиСрабатывания" , Новый ОписаниеТипов("ТаблицаЗначений")); ВыбранныеЦены.Колонки.Добавить("ВлияющиеВидыЦен" , Новый ОписаниеТипов("ТаблицаЗначений")); ВыбранныеЦены.Колонки.Добавить("ПравилаОкругленияЦены" , Новый ОписаниеТипов("ТаблицаЗначений")); ВыбранныеЦены.Колонки.Добавить("ОкруглятьВБольшуюСторону" , Новый ОписаниеТипов("Булево")); ВыбранныеЦены.Колонки.Добавить("АдресСхемыКомпоновкиДанных" , ВариантыОтчетов.ОписаниеТиповСтрока(0)); ВыбранныеЦены.Колонки.Добавить("НайденыОбязательныеПараметры" , Новый ОписаниеТипов("Булево")); ВыбранныеЦены.Колонки.Добавить("Параметры" , ВариантыОтчетов.ОписаниеТиповСтрока(0)); ВыбранныеЦены.Колонки.Добавить("ЗапрещенныйВидЦены" , Новый ОписаниеТипов("Булево")); ВыбранныеЦены.Колонки.Добавить("АдресНастроекСхемыКомпоновкиДанных" , ВариантыОтчетов.ОписаниеТиповСтрока(0)); ВыбранныеЦены.Колонки.Добавить("БазовыйВидЦены" , ВариантыОтчетов.ОписаниеТиповСтрока(0)); ВыбранныеЦены.Колонки.Добавить("Наценка" , ОбщегоНазначенияУТ.ПолучитьОписаниеТиповЧисла(10,2)); ВыбранныеЦены.Колонки.Добавить("УстанавливатьЦенуПриВводеНаОсновании" , Новый ОписаниеТипов("Булево")); ВыбранныеЦены.Колонки.Добавить("ПометкаУдаления" , Новый ОписаниеТипов("Булево")); СтруктураФорма.Вставить("ВыбранныеЦены", ВыбранныеЦены); ДеревоЦен = Новый ДеревоЗначений; ДеревоЦен.Колонки.Добавить("Номенклатура" , Новый ОписаниеТипов("СправочникСсылка.Номенклатура")); ДеревоЦен.Колонки.Добавить("Характеристика" , Новый ОписаниеТипов("СправочникСсылка.ХарактеристикиНоменклатуры")); ДеревоЦен.Колонки.Добавить("ИндексКартинки" , ОбщегоНазначенияУТ.ПолучитьОписаниеТиповЧисла(5,0)); ДеревоЦен.Колонки.Добавить("ЕдиницаИзмерения" , Новый ОписаниеТипов("СправочникСсылка.ЕдиницыИзмерения")); ДеревоЦен.Колонки.Добавить("ЦеноваяГруппа" , Новый ОписаниеТипов("СправочникСсылка.ЦеновыеГруппы")); ДеревоЦен.Колонки.Добавить("ХарактеристикиИспользуются" , Новый ОписаниеТипов("Булево")); ДеревоЦен.Колонки.Добавить("РеквизитСортировки" , ОбщегоНазначенияУТ.ПолучитьОписаниеТиповЧисла(10,0)); ДеревоЦен.Колонки.Добавить("Артикул" , ВариантыОтчетов.ОписаниеТиповСтрока(25)); СтруктураФорма.Вставить("ДеревоЦен", ДеревоЦен); ЛЗ_УстановкаЦенСервер.ИнициализироватьВыбранныеЦены(СтруктураФорма); ОтображатьВлияющиеЦены = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("УстановкаЦенНоменклатуры","УстановкаЦенНоменклатурыОтображатьВлияющиеЦены"); ДанныеДляРасчетаВычисляемыхЦенНаКлиенте = ЗаполнитьДокумент(ДокументУЦН, СтруктураФорма); Если ДанныеДляРасчетаВычисляемыхЦенНаКлиенте <> Неопределено Тогда АдресХранилищаДанныхДляРасчетаВычисляемыхЦенНаКлиенте = ПоместитьВоВременноеХранилище( ДанныеДляРасчетаВычисляемыхЦенНаКлиенте, Новый УникальныйИдентификатор); КонецЕсли; УстановитьСостояние(ДокументУЦН); Попытка ДокументУЦН.Записать(РежимЗаписиДокумента.Проведение, РежимПроведенияДокумента.Неоперативный); Исключение Сообщить("Не удалось установить цены на основании " + ДокументОснование + " " + ОписаниеОшибки()); КонецПопытки; ЗафиксироватьТранзакцию(); КонецПроцедуры #Область Вспомогательные_процедуры_и_функции_для_создания_документа_установка_цен_номенклатуры Функция ЗаполнитьДокумент(ТекущийОбъект, ТекущаяФорма) КэшДанных = ЛЗ_УстановкаЦенСервер.ИнициализироватьСтруктуруКэшаДанных(); ДанныеДляРасчетаВычисляемыхЦенНаКлиенте = Неопределено; Если ТекущийОбъект.ВидыЦен.Количество() > 0 ИЛИ ТекущийОбъект.Товары.Количество() > 0 ИЛИ НЕ ТекущийОбъект.ИспользоватьНесколькоВидовЦен ИЛИ ТекущийОбъект.ВыбранныеЦены.Количество() = 1 Тогда Если УстановкаЦенКлиентСервер.ВыбранныеСтрокиТаблицыВидовЦен(ТекущаяФорма).Количество() > 0 Тогда ЛЗ_УстановкаЦенСервер.ПостроитьДеревоЦен(ТекущаяФорма); ЛЗ_УстановкаЦенСервер.ЗагрузитьТабличнуюЧастьТовары(ТекущаяФорма, КэшДанных); ЛЗ_УстановкаЦенСервер.ЗагрузитьБазовыеЦены(ТекущаяФорма, КэшДанных); Если ЛЗ_УстановкаЦенСервер.ЗаполненыОбязательныеПараметрыСхемКомпоновкиДанных(ТекущаяФорма, Ложь) Тогда ТекущаяФорма.Элементы.ГруппаСтраницы.ТекущТекущаяФорма.аяСтраница = ТекущаяФорма.Элементы.ГруппаУстановкаЦен; Иначе ТекущаяФорма.Элементы.ГруппаСтраницы.ТекущаяСтраница = ТекущаяФорма.Элементы.ГруппаВидыЦен; КонецЕсли; Иначе Если НЕ ТекущаяФорма.ИспользоватьНесколькоВидовЦен Тогда Для Каждого ТекСтрока Из ТекущийОбъект.ВыбранныеЦены Цикл ТекСтрока.Выбрана = Истина; КонецЦикла; КонецЕсли; Если ТекущаяФорма.ВыбранныеЦены.Количество() = 1 Тогда Для Каждого ТекСтрока Из ТекущаяФорма.ВыбранныеЦены Цикл ТекСтрока.Выбрана = Истина; КонецЦикла; КонецЕсли; // Документ вводится на основании Поступления товаров и услуг. // Необходимо выбрать цены, расчитываемые по документу поступления и переформировать таблицу цен. Если ЗначениеЗаполнено(ТекущийОбъект.ДокументОснование) И Не ЗначениеЗаполнено(ТекущийОбъект.Ссылка) Тогда Для Каждого ТекСтрока Из ТекущаяФорма.ВыбранныеЦены Цикл Если ТекСтрока.УстанавливатьЦенуПриВводеНаОсновании Тогда ТекСтрока.Выбрана = Истина; НоваяСтрока = ТекущийОбъект.ВидыЦен.Добавить(); НоваяСтрока.ВидЦены = ТекСтрока.Ссылка; КонецЕсли; КонецЦикла; УстановкаЦенКлиентСервер.ВыбратьВсеЗависимыеЦены(ТекущаяФорма); УстановкаЦенКлиентСервер.ВыбратьВсеВлияющиеЦены(ТекущаяФорма); ВыбранныеЦеныИзменены = Ложь; ВидыЗагружаемыхСтарыхЦен = Новый Массив(); Для Каждого ТекСтрока Из ТекущаяФорма.ВыбранныеЦены Цикл Если ТекСтрока.Выбрана И (ТекСтрока.СпособЗаданияЦены = Перечисления.СпособыЗаданияЦен.Вручную) Тогда ВидыЗагружаемыхСтарыхЦен.Добавить(ТекСтрока); КонецЕсли; КонецЦикла; ЛЗ_УстановкаЦенСервер.ПостроитьДеревоЦен(ТекущаяФорма); ЛЗ_УстановкаЦенСервер.ЗагрузитьТабличнуюЧастьТовары(ТекущаяФорма, КэшДанных); ЛЗ_УстановкаЦенСервер.ПоместитьВидыЦенВТабличнуюЧасть(ТекущаяФорма, ТекущийОбъект.ВидыЦен); //+fantomrik 2016-01-22 Перенесем в конец процедуры... //Данные = Новый Структура; //Данные.Вставить("Форма", ТекущаяФорма); //Данные.Вставить("Документы", Новый Массив); //Данные.Вставить("СохранятьБазовые", Ложь); //Данные.Документы.Добавить(ТекущийОбъект); //ЛЗ_УстановкаЦенСервер.ПоместитьЦеныВТабличнуюЧасть(Данные); //-fantomrik 2016-01-22 ЛЗ_УстановкаЦенСервер.ОбновитьСтарыеЦеныНоменклатуры(ТекущаяФорма, КэшДанных); ТаблицаНоменклатуры = ЛЗ_УстановкаЦенСервер.СоздатьТаблицуНоменклатурыПоДеревуЦен(ТекущаяФорма); ЛЗ_УстановкаЦенСервер.ЗагрузитьЗначенияБазовыхЦен(ТекущаяФорма, ТаблицаНоменклатуры, ВидыЗагружаемыхСтарыхЦен,, 0, Истина, КэшДанных); Если ЛЗ_УстановкаЦенСервер.ЗаполненыОбязательныеПараметрыСхемКомпоновкиДанных(ТекущаяФорма, Ложь) Тогда ЛЗ_УстановкаЦенСервер.ВычислитьЦеныПоДаннымИБ(ТекущаяФорма, ТаблицаНоменклатуры,,,КэшДанных); Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда ДанныеДляРасчетаВычисляемыхЦенНаКлиенте = ЛЗ_УстановкаЦенСервер.ПодготовитьДанныеДляРасчетаВычисляемыхЦен(ТекущаяФорма, ТаблицаНоменклатуры,,,,КэшДанных); Иначе ЛЗ_УстановкаЦенСервер.РассчитатьВычисляемыеЦены(ТекущаяФорма, ТаблицаНоменклатуры,,,,КэшДанных); КонецЕсли; //+fantomrik 2016-01-22 //ТекущаяФорма.Элементы.ГруппаСтраницы.ТекущаяСтраница = ТекущаяФорма.Элементы.ГруппаУстановкаЦен; //-fantomrik 2016-01-22 Иначе ПроверитьЗаполнениеПараметровПриОткрытии = Истина; КонецЕсли; Иначе ЛЗ_УстановкаЦенСервер.ПостроитьДеревоЦен(ТекущаяФорма); ЛЗ_УстановкаЦенСервер.ЗагрузитьТабличнуюЧастьТовары(ТекущаяФорма, КэшДанных); КонецЕсли; КонецЕсли; //+fantomrik 2016-01-22 Данные = Новый Структура; Данные.Вставить("Форма", ТекущаяФорма); Данные.Вставить("Документы", Новый Массив); Данные.Вставить("СохранятьБазовые", Ложь); Данные.Документы.Добавить(ТекущийОбъект); ЛЗ_УстановкаЦенСервер.ПоместитьЦеныВТабличнуюЧасть(Данные); //-fantomrik 2016-01-22 КонецЕсли; Возврат ДанныеДляРасчетаВычисляемыхЦенНаКлиенте; КонецФункции Процедура УстановитьСостояние(ТекущийОбъект) Если ТекущийОбъект.Проведен И ТекущийОбъект.Статус = Перечисления.СтатусыУстановокЦенНоменклатуры.Согласован Тогда Состояние = Перечисления.СостоянияУстановокЦенНоменклатуры.Действует; ИначеЕсли ТекущийОбъект.Проведен И ТекущийОбъект.Статус = Перечисления.СтатусыУстановокЦенНоменклатуры.НеСогласован Тогда Состояние = Перечисления.СостоянияУстановокЦенНоменклатуры.ОжидаетсяСогласование; Иначе Состояние = Перечисления.СостоянияУстановокЦенНоменклатуры.ПустаяСсылка(); КонецЕсли; Просрочен = ТекущийОбъект.Статус = Перечисления.СтатусыУстановокЦенНоменклатуры.НеСогласован И НачалоДня(ТекущийОбъект.Дата) < НачалоДня(ТекущаяДата()); КонецПроцедуры #КонецОбласти |
|||
45
fantomrik
23.01.16
✎
20:55
|
в ЛЗ_УстановкаЦенСервер 5000 строк, не влазит сюда) Сохранил в тхт https://yadi.sk/i/gb_qNcp8nciND
|
|||
46
fantomrik
23.01.16
✎
20:56
|
Тема закрыта, решена, всем спасибо!
|
|||
47
Cyberhawk
24.01.16
✎
00:30
|
Решение, мягко говоря, плохое. Тебе придется поддерживать код в двух местах. Дублирование кода - не айс. Не знаю, как еще тебе сказать. Пожалуйста.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |