|
УТ 11.3 Заказ поставщика | ☑ | ||
---|---|---|---|---|
0
Drown86
10.08.17
✎
12:04
|
Подскажите как добавить столбец с розничной ценой. Вид Цены "Розничная". Как это можно реализовать?
|
|||
1
France
10.08.17
✎
14:26
|
куда добавить. зачем добавить?
|
|||
2
Drown86
10.08.17
✎
14:33
|
Документ Заказ поставщика. Вкладка товара. Дополнительная колонка Розничная цена. Данные берутся из вида цен, розничная. Просят для сравнения.
|
|||
3
BeerHelpsMeWin
10.08.17
✎
14:37
|
Открыть в конфигураторе документ заказ поставщика, открыть его форму, перейти на вкладку товары, добавить колонку "розничная цена", написать обработчик ее заполнения, или, второй вариант, позвать программиста.
|
|||
4
Drown86
10.08.17
✎
16:31
|
я начинающий, изучил как это делается в типовой. (заполнение цены) Слишком сложно на мой взгляд. (много отсылок в общий модуль)
Добавил реквизит, колонку. Решил, что будет заполняться через кнопку. Я так понимаю, что легче свой запрос сделать, и построчно перебирая подставлять в ячейку. Может есть у кого то образец кода, подобной операции, для образца. |
|||
5
Фрэнки
10.08.17
✎
16:55
|
(4) А если просят "для сравнения", то зачем нужно портить текущую форму документа?
Сам по себе процесс выборки со сравнением цены поставщика с текущей розничной - это надо рабочее место сделать и в нем все городить. А уже после того, как все окончательно выбрано и сравнения все проведены, галочками все отмечено - вот тогда уже жмется кнопка "сформировать документы" |
|||
6
France
10.08.17
✎
17:05
|
(5) ну, все это есть в расширенном варианте обеспечения потребностей.. но, никто не хочет: внедренцы изучать; заказчики - использовать.
|
|||
7
Фрэнки
10.08.17
✎
17:05
|
(4) // Я так понимаю, что легче свой запрос сделать, и построчно перебирая подставлять в ячейку.
это не просто легче, а правильней не трогать функционал типового документа, а создавать дополнительный функционал в дополнительных обработках. Так вы, как минимум, практически ничего не испортите. |
|||
8
Вафель
10.08.17
✎
17:07
|
Тогда лучше не кнопку, а отчет-обработка заполнения ТЧ с открытием формы
|
|||
9
Фрэнки
10.08.17
✎
17:08
|
(6) вот я тоже думаю в этом направлении примерно:
если типовая версия слишком громоздка, то взять эту самую обработку для потребностей за основу, создать свой экземпляр и повторить самое нужное под хотелки заказчика. |
|||
10
France
10.08.17
✎
17:09
|
(9) я просто тупо новую обработку создал, не заморачиваясь на типовую обработку..
|
|||
11
Фрэнки
10.08.17
✎
17:12
|
(10) соглашусь - там таких обработок надо клепать десятками версий, но две-три штуки в день и накатывать в работу юзерам без остановки базы на обновления конфигурации.
|
|||
12
Вафель
10.08.17
✎
17:13
|
Можно кстати расширения делать
|
|||
13
France
10.08.17
✎
17:14
|
да, на расширения плачутся тоже..
|
|||
14
DexterMorgan
10.08.17
✎
17:51
|
(7) Открыть тебе секрет как добавить колонку в табличную часть и написать код по ее заполнению не трогая форму документа вообще?
|
|||
15
Вафель
10.08.17
✎
17:52
|
(14) Расскажи
|
|||
16
DexterMorgan
10.08.17
✎
17:52
|
(15) Пожалуйста: МодификацияКонфигурацииПереопределяемый.ПриСозданииНаСервере(Форма, Отказ, СтандартнаяОбработка);
|
|||
17
Вафель
10.08.17
✎
17:54
|
Хотя для этой конкретной задачи реашема.
Тк есть события при изменении номенклатуры/характеристики |
|||
18
DexterMorgan
10.08.17
✎
17:57
|
(17) Практически для любых задач подходит, события при изменении ты там тоже можешь установить свои
|
|||
19
Вафель
10.08.17
✎
17:58
|
(18) колонка заполняется не только при открытии формы, но и при редактировании.
|
|||
20
Вафель
10.08.17
✎
17:59
|
(18) Но обработчики событий то должны внутри формы находиться
|
|||
21
DexterMorgan
10.08.17
✎
17:59
|
(19) И?
|
|||
22
DexterMorgan
10.08.17
✎
17:59
|
(20) да ты че
|
|||
23
DexterMorgan
10.08.17
✎
18:00
|
(20) А про УстановитьДействие ты не слышал?
|
|||
24
Вафель
10.08.17
✎
18:01
|
(23) И что можно ссылать на общий модуль?
|
|||
25
DexterMorgan
10.08.17
✎
18:01
|
(24) Если у тебя в этом модуле есть форма, ты можешь "иметь" ее как хочешь
|
|||
26
Вафель
10.08.17
✎
18:03
|
(25) Те ты можешь добавить процедуру обработчик в форму програмно?
|
|||
27
DexterMorgan
10.08.17
✎
18:04
|
(26) УправляемаяФорма (ManagedForm)
УстановитьДействие (SetAction) Синтаксис: УстановитьДействие(<ИмяСобытия>, <Действие>) Параметры: <ИмяСобытия> (обязательный) Тип: Строка. Имя события. <Действие> (обязательный) Тип: Строка. Имя процедуры обработчика. Описание: Устанавливает обработчик события. Доступность: Сервер, мобильное приложение(сервер). |
|||
28
Drown86
10.08.17
✎
18:10
|
форму можно и трогать, я думал, что проще будет, назначить кнопку, к ней прикрепить команду, и там в действии описать все что нужно.
|
|||
29
rudnitskij
10.08.17
✎
18:10
|
(4) Вы добавили реквизит, при открытии документа рассчитываете цену - значит у вас при каждом открытии-закрытии документ будет изменяться и задолбает юзеров запросом "Сохранить изменения?"
Нужно добавлять просто колонку, реквизит не нужен. При открытии рассчитываете эти цены, пишете в таблицу: "ВЫБРАТЬ | Таб.ЦенаТовара КАК Цена | Таб.Номенклатура КАК Номенклатура | ИЗ ТаблицаСЦенами КАК Таб | ПРАВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ | Товары.Номенклатура КАК Номенклатура | ИЗ Документ.Товары КАК Товары) ПО | Товары.Номенклатура = Таб.Номенклатура"; Надеюсь, вы понимаете, что этот запрос схематический и вам надо будет писать свой? |
|||
30
Вафель
10.08.17
✎
18:11
|
(27) Сама процедура, чье имя ты указываешь должна находиться внутри формы
|
|||
31
France
10.08.17
✎
18:13
|
(29) +.. угу, будет интересно. Разместили заказ по цене поставщика в 1 руб, при этом розничная цена 2 руб.
Потом внезапно розничная цена стала 1 руб, и открыли документ.... |
|||
32
DexterMorgan
10.08.17
✎
18:13
|
(30) Даже не знаю как это прокомментировать
|
|||
33
DexterMorgan
10.08.17
✎
18:14
|
(31) И че?
|
|||
34
Drown86
10.08.17
✎
18:14
|
(30) это понятно, да.
|
|||
35
Вафель
10.08.17
✎
18:14
|
(32) То, что без "троганья" формы никуда
|
|||
36
DexterMorgan
10.08.17
✎
18:15
|
(35) Что будет, если я сделаю это не форме? спорим на 5к?
|
|||
37
Вафель
10.08.17
✎
18:16
|
(36) Добвишь кнопку на форму, которая будет сообщать чтонибудь без троганья формы?
Спорим |
|||
38
France
10.08.17
✎
18:18
|
(33) да ничо страшного.. при размещении маржа была нормальная. после переоткрытия маржи нет - и вроде бы нужно поставить менеджера по закупкам буквой ЗЮ..
|
|||
39
DexterMorgan
10.08.17
✎
18:18
|
(37) ок
|
|||
40
DexterMorgan
10.08.17
✎
18:18
|
(37) для ут 11 скину тебе код сюда
|
|||
41
Мыш
10.08.17
✎
18:20
|
(30) Ты прав. Приходится в форму добавлять процедуру "НазначаемыйОбработчикДействияИлиСобытия()", а уже в ней вызов общего модуля.
|
|||
42
rudnitskij
10.08.17
✎
18:20
|
(31) "(29) +.. угу, будет интересно. Разместили заказ по цене поставщика в 1 руб, при этом розничная цена 2 руб.
Потом внезапно розничная цена стала 1 руб, и открыли документ...." ------------------------------------------------- Если вы не помните, вы именно это и хотели в начале ветки - чтобы сравнивать розничную цену с ценой в заказе поставщику. Или вы хотите фиксированную на момент создания документа? |
|||
43
DexterMorgan
10.08.17
✎
18:38
|
(41) Можно использовать процедуру скажем "после записи", МодификацияКонфигурацииКлиентПереопределяемый.ПослеЗаписи(ЭтаФорма, ПараметрыЗаписи) ну и тд
|
|||
44
rudnitskij
10.08.17
✎
18:50
|
В общем, лучше всего эту цену читать и записывать в колонку ПриИзмененииНоменклатуры. Городить кнопки не стоит
|
|||
45
Drown86
10.08.17
✎
18:53
|
буду ковыряться все же наверно, и попробую на основе типовых. Хочется вот такhttp://clip2net.com/s/3MQqUFL
далее выбор цены http://clip2net.com/s/3MQrma1 для всего этого использую инструменты общего модуля, ПродажиКлиент, продажиСервер. Подглядел в документе реализации. За основу взял процедуру ЗаполнитьЦеныВыделенныхСтрокПоВидуЦен и перенес в модуль формы необходимые для нее вспомогательные функции и процедуры |
|||
46
Drown86
10.08.17
✎
19:05
|
это имеет шансы на успех?)
|
|||
47
Фрэнки
10.08.17
✎
19:07
|
(46) просто в данной варианте решение получится зависимое от того, какой поставщик указан в Заказе. Понятное дело, что без подбора Поставщика невозможно получить только одно значение цены от него. Но в обработке можно скомбинировать и группы колонок от поставщиков и даже три и отметить затем от какого конкретно выбрать и только после анализа сформировать ожидаемые документы.
Обработка покажет более качественный анализ. А ты будешь уже претендовать на ступень постановщика задач или даже постановщика учета. А так-то шансы на успех есть всегда, но он будет разный :) |
|||
48
Drown86
10.08.17
✎
19:11
|
(47) а почему зависит от поставщика, выбор же не из цен поставщика должен идти, а от организации..Справочник ВидЦены
|
|||
49
Фрэнки
10.08.17
✎
19:17
|
(48) ты рассуждаешь только о своей розничной
А я рассуждаю не с твоей точки зрения, а с точки манагера по закупкам, которому надо видеть маржу, а она идет от разных поставщиков разная. |
|||
50
Фрэнки
10.08.17
✎
19:18
|
(48) посмотри не на то, как надо добавить колонку
а посмотри - ПОЧЕМУ, куда и когда ее надо добавлять |
|||
51
Злопчинский
10.08.17
✎
20:23
|
Внезапно оказалось что просто так в передовой восьмерке колонку без программирования и изменений в конфигураторе - не сделать?
|
|||
52
Drown86
10.08.17
✎
20:27
|
не получается, ошибок нет, сообщение, что все заполнено выдает, но не заполнено...
&НаКлиенте Процедура ЗаполнитьРозничныеЦеныВыделенныхСтрокПоВидуЦен(Команда) Если ПродажиКлиент.НеобходимоЗаполнениеЦенПоВидуЦен(Объект, "Товары", НСтр("ru='Товары'")) Тогда ДополнительныеПараметры = Новый Структура; ПродажиКлиент.ВыбратьВидЦен( Новый ОписаниеОповещения("ЗаполнитьРозничныеЦеныВыделенныхСтрокПоВидуЦенЗавершение", ЭтотОбъект, ДополнительныеПараметры), Объект.ЦенаВключаетНДС, Истина); КонецЕсли; КонецПроцедуры &НаКлиенте Процедура ЗаполнитьРозничныеЦеныВыделенныхСтрокПоВидуЦенЗавершение(ВидЦен, ДополнительныеПараметры) Экспорт Если ЗначениеЗаполнено(ВидЦен) Тогда МассивСтрок = Новый Массив; Для Каждого ТекСтрока Из Элементы.Товары.ВыделенныеСтроки Цикл НайденнаяСтрока = Объект.Товары.НайтиПоИдентификатору(ТекСтрока); //Если ?(РеализацияСверхЗаказа, НайденнаяСтрока.КодСтроки = 0, Истина) Тогда // МассивСтрок.Добавить(НайденнаяСтрока); //КонецЕсли; КонецЦикла; //Если МассивСтрок.Количество() = 0 // //И РеализацияСверхЗаказа И НЕ ОтклонениеОтУсловийПродаж // //И Объект.РеализацияПоЗаказам // Тогда // // ТекстПредупреждения = НСтр("ru='Цена не может быть назначена в строках по заказу.'"); // ПоказатьПредупреждение(Неопределено, ТекстПредупреждения); // Возврат //КонецЕсли; ЦеныРассчитаны = ЗаполнитьРозничныеЦеныВыделенныхСтрокПоВидуЦенСервер(ВидЦен); ПродажиКлиент.ОповеститьОбОкончанииЗаполненияЦенПоВидуЦен(ЦеныРассчитаны, ВидЦен); //СкидкиНаценкиКлиент.СброситьФлагСкидкиРассчитаны(ЭтаФорма); КонецЕсли; КонецПроцедуры &НаСервере Функция ЗаполнитьРозничныеЦеныВыделенныхСтрокПоВидуЦенСервер(ВидЦен) МассивСтрок = Новый Массив; Для Каждого ТекСтрока Из Элементы.Товары.ВыделенныеСтроки Цикл НайденнаяСтрока = Объект.Товары.НайтиПоИдентификатору(ТекСтрока); //Если (РеализацияСверхЗаказа И НайденнаяСтрока.КодСтроки = 0) // ИЛИ ОтклонениеОтУсловийПродаж Тогда // МассивСтрок.Добавить(НайденнаяСтрока); //КонецЕсли; КонецЦикла; НаборыВызовСервера.ДополнитьДоПолногоНабора(Объект.Товары, МассивСтрок, Истина); //СтруктураПересчетаСуммы = ОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруПересчетаСуммыНДСВСтрокеТЧ(Объект); СтруктураДействий = Новый Структура; //СтруктураДействий.Вставить("ПересчитатьСумму"); //СтруктураДействий.Вставить("ПересчитатьСуммуНДС", СтруктураПересчетаСуммы); //СтруктураДействий.Вставить("ПересчитатьСуммуСНДС", СтруктураПересчетаСуммы); //СтруктураДействий.Вставить("ПересчитатьСуммуРучнойСкидки"); //СтруктураДействий.Вставить("ОчиститьАвтоматическуюСкидку", Неопределено); // ПараметрыЗаполнения = Новый Структура(); ПараметрыЗаполнения.Вставить("Дата", Объект.Дата); ПараметрыЗаполнения.Вставить("Валюта", Объект.Валюта); ПараметрыЗаполнения.Вставить("ВидЦены", ВидЦен); ПараметрыЗаполнения.Вставить("РасчитыватьНаборы", Истина); ПараметрыЗаполнения.Вставить("ЦенаВключаетНДС", Объект.ЦенаВключаетНДС); ПараметрыЗаполнения.Вставить("ПоляЗаполнения", "ЦенаРозница, ВидЦены"); ЦеныРассчитаны = ЗаполнитьРозничныеЦены( Объект.Товары, // Табличная часть МассивСтрок, // Массив строк или структура отбора ПараметрыЗаполнения, СтруктураДействий); //ОбщегоНазначенияУТ.ЗаполнитьДубликатыЗависимыхРеквизитовВКоллекции(Объект.Товары, ЗависимыеРеквизиты()); //ПересчитатьСуммуСверхЗаказа(); //ПродажиКлиентСервер.РассчитатьИтоговыеПоказателиРеализации(ЭтаФорма); //СформироватьНадписьВалюты(); //РассчитатьСуммуПредоплаты(ЭтаФорма); Возврат ЦеныРассчитаны; КонецФункции Функция ЗаполнитьРозничныеЦены(ТабличнаяЧасть, ВыделенныеСтроки = Неопределено, ПараметрыЗаполнения, СтруктураДействий = Неопределено, КэшированныеЗначения = Неопределено) Экспорт ЦеныЗаполнены = Ложь; Если ПараметрыЗаполнения = Неопределено Тогда ВызватьИсключение НСтр("ru='Параметры заполнения не указаны'"); Возврат ЦеныЗаполнены; КонецЕсли; // Получение структуры параметров по умолчанию ПараметрыЦ = Новый Структура( "ПоляЗаполнения, КолонкиПоЗначению, ДругиеИменаКолонок", "ЦенаРозница", Новый Структура, Новый Структура); ОбщегоНазначенияУТКлиентСервер.ДополнитьСтруктуру(ПараметрыЦ, ПараметрыЗаполнения, Истина); // Проверки входящих данных //Если Не ПараметрыЦ.Свойство("Соглашение") И Не Параметры.Свойство("ВидЦены") Тогда // ВызватьИсключение НСтр("ru='В параметрах заполнения должны быть указаны ""Соглашение"" или ""ВидЦены""'"); // Возврат ЦеныЗаполнены; //ИначеЕсли Не ПараметрыЦ.Свойство("Дата") Или Не Параметры.Свойство("Валюта") Тогда // ВызватьИсключение НСтр("ru='В параметрах заполнения должны быть указаны ""Валюта"" и ""Дата""'"); // Возврат ЦеныЗаполнены; //КонецЕсли; ДополнительныеКолонки = ""; //ЕстьКоличествоУпаковок = Ложь; //ЕстьКодСтроки = Ложь; //Если ТипЗнч(ТабличнаяЧасть) = Тип("ТаблицаЗначений") Тогда // ЕстьКоличествоУпаковок = ТабличнаяЧасть.Колонки.Найти("КоличествоУпаковок") <> Неопределено; //Иначе // ЕстьКоличествоУпаковок = ТабличнаяЧасть.Выгрузить().Колонки.Найти("КоличествоУпаковок") <> Неопределено; //КонецЕсли; //Если ТипЗнч(ТабличнаяЧасть) = Тип("ТаблицаЗначений") Тогда // ЕстьКодСтроки = ТабличнаяЧасть.Колонки.Найти("КодСтроки") <> Неопределено; //Иначе // ЕстьКодСтроки = ТабличнаяЧасть.Выгрузить().Колонки.Найти("КодСтроки") <> Неопределено; //КонецЕсли; //Если ЕстьКоличествоУпаковок Тогда // ДополнительныеКолонки = ?(ПараметрыЦ.Свойство("РасчитыватьНаборы") И ПараметрыЦ.РасчитыватьНаборы, "," + "Количество, КоличествоУпаковок, НоменклатураНабора, ХарактеристикаНабора", ""); //Иначе // ДополнительныеКолонки = ?(ПараметрыЦ.Свойство("РасчитыватьНаборы") И ПараметрыЦ.РасчитыватьНаборы, "," + "Количество, НоменклатураНабора, ХарактеристикаНабора", ""); //КонецЕсли; // // Получение выгрузки по табличной части Таблица = ОбщегоНазначенияУТ.ВыгрузитьТаблицуЗначений( ТабличнаяЧасть, ВыделенныеСтроки, "НомерСтроки, Номенклатура, Характеристика, Упаковка" + ДополнительныеКолонки, ПараметрыЦ.КолонкиПоЗначению, ПараметрыЦ.ДругиеИменаКолонок); МаксимальныйИндексСтроки = 0; Для Каждого СтрокаТЧ Из ТабличнаяЧасть Цикл Если СтрокаТЧ.НомерСтроки > МаксимальныйИндексСтроки Тогда МаксимальныйИндексСтроки = СтрокаТЧ.НомерСтроки; КонецЕсли; КонецЦикла; //КоэффициентыПропорциональностиРасчетаЦенНаборов = Неопределено; //ДанныеПоКоличествуНаборов = Неопределено; //Если Параметры.Свойство("РасчитыватьНаборы") И Параметры.РасчитыватьНаборы Тогда // // Если НЕ ЕстьКоличествоУпаковок Тогда // Таблица.Колонки.Добавить("КоличествоУпаковок", ОбщегоНазначенияУТ.ПолучитьОписаниеТиповЧисла(15,3)); // Для Каждого СтрокаТЧ Из Таблица Цикл // СтрокаТЧ.КоличествоУпаковок = СтрокаТЧ.Количество; // КонецЦикла; // КонецЕсли; // // КоэффициентыПропорциональностиРасчетаЦенНаборов = НаборыСервер.КоэффициентыРаспределения(Таблица, Параметры); // ДанныеПоКоличествуНаборов = КоличествоНаборов(Таблица); // // Наборы = КоэффициентыПропорциональностиРасчетаЦенНаборов.Скопировать(); // Наборы.Свернуть("НоменклатураНабора, ХарактеристикаНабора"); // Индекс = МаксимальныйИндексСтроки; // Для Каждого Строка Из Наборы Цикл // // Индекс = Индекс + 1; // // НоваяСтрока = Таблица.Добавить(); // НоваяСтрока.НомерСтроки = Индекс; // НоваяСтрока.Номенклатура = Строка.НоменклатураНабора; // НоваяСтрока.Характеристика = Строка.ХарактеристикаНабора; // НоваяСтрока.Упаковка = Справочники.УпаковкиЕдиницыИзмерения.ПустаяСсылка(); // КонецЦикла; // // Таблица.Колонки.Удалить("Количество"); // Таблица.Колонки.Удалить("КоличествоУпаковок"); // //КонецЕсли; // Получение запроса Запрос = Новый Запрос; МВТ = Новый МенеджерВременныхТаблиц; Запрос.МенеджерВременныхТаблиц = МВТ; //Запрос.УстановитьПараметр("Дата", ?(ЗначениеЗаполнено(ПараметрыЦ.Дата), ПараметрыЦ.Дата, ТекущаяДата())); Запрос.УстановитьПараметр("Дата", ПараметрыЦ.Дата); Запрос.УстановитьПараметр("Валюта", ПараметрыЦ.Валюта); Запрос.УстановитьПараметр("Таблица", Таблица); Запрос.Текст = Запрос.Текст + ПолучитьТекстЗапросаВременнойТаблицыТоваров("втТаблицаТовары"); Если Параметры.Свойство("ВидЦены") Тогда Запрос.УстановитьПараметр("ВидЦены", Параметры.ВидЦены); Запрос.Текст = Запрос.Текст + ПолучитьТекстЗапросаВременнойТаблицыЦен("втТаблицаЦены", "втТаблицаТовары", Истина); Запрос.Текст = Запрос.Текст + " |ВЫБРАТЬ | втТаблицаТовары.НомерСтроки КАК НомерСтроки, | втТаблицаЦены.ВидЦены КАК ВидЦены, | втТаблицаЦены.Цена КАК Цена |ИЗ | втТаблицаТовары КАК втТаблицаТовары | ЛЕВОЕ СОЕДИНЕНИЕ втТаблицаЦены КАК втТаблицаЦены | ПО (втТаблицаЦены.НомерСтроки = втТаблицаТовары.НомерСтроки)"; ИначеЕсли Параметры.Свойство("Соглашение") Тогда МенеджерВТ = Новый МенеджерВременныхТаблиц; Запрос = Новый Запрос; Запрос.МенеджерВременныхТаблиц = МенеджерВТ; Запрос.УстановитьПараметр("Соглашение", Параметры.Соглашение); Запрос.УстановитьПараметр("ЭтоВыкупТары", ?(Параметры.Свойство("ЭтоВыкупТары"), Параметры.ЭтоВыкупТары, Ложь)); Запрос.УстановитьПараметр("Организация", ?(Параметры.Свойство("Организация"), Параметры.Организация, Справочники.Организации.ПустаяСсылка())); //Запрос.Текст = Запрос.Текст + ПолучитьТекстЗапросаВременнойТаблицыЦенПоСоглашению("втТаблицаЦеныПоСоглашению", "втТаблицаТовары"); Запрос.Текст = Запрос.Текст + ПолучитьТекстЗапросаВременнойТаблицыЦен("втТаблицаЦеныПоВидуЦен", "втТаблицаЦеныПоСоглашению", Ложь); Запрос.Текст = Запрос.Текст + " |ВЫБРАТЬ | втТаблицаЦеныПоСоглашению.НомерСтроки КАК НомерСтроки, | втТаблицаЦеныПоСоглашению.ВидЦены КАК ВидЦены, | втТаблицаЦеныПоСоглашению.СтавкаНДС КАК СтавкаНДС, | втТаблицаЦеныПоСоглашению.СрокПоставки КАК СрокПоставки, | ВЫБОР | КОГДА втТаблицаЦеныПоСоглашению.Цена = 0 | ТОГДА втТаблицаЦеныПоВидуЦен.Цена | ИНАЧЕ втТаблицаЦеныПоСоглашению.Цена | КОНЕЦ КАК Цена |ИЗ | втТаблицаЦеныПоСоглашению КАК втТаблицаЦеныПоСоглашению | ЛЕВОЕ СОЕДИНЕНИЕ втТаблицаЦеныПоВидуЦен КАК втТаблицаЦеныПоВидуЦен | ПО (втТаблицаЦеныПоВидуЦен.НомерСтроки = втТаблицаЦеныПоСоглашению.НомерСтроки)"; КонецЕсли; РезультатЗапроса = Запрос.Выполнить(); Если РезультатЗапроса.Пустой() Тогда Возврат ЦеныЗаполнены; КонецЕсли; СтруктураЗаполнения = Новый Структура(ПараметрыЦ.ПоляЗаполнения); Выборка = РезультатЗапроса.Выбрать(); Пока Выборка.Следующий() Цикл //// Расчет цен комплектующих набора //Если Выборка.НомерСтроки > МаксимальныйИндексСтроки Тогда // // НайденныеСтроки = Таблица.НайтиСтроки(Новый Структура("НомерСтроки", Выборка.НомерСтроки)); // Если НайденныеСтроки.Количество() = 0 Тогда // Продолжить; // КонецЕсли; // // Отбор = Новый Структура; // Отбор.Вставить("НоменклатураНабора", НайденныеСтроки[0].Номенклатура); // Отбор.Вставить("ХарактеристикаНабора", НайденныеСтроки[0].Характеристика); // // НайденныеСтроки = КоэффициентыПропорциональностиРасчетаЦенНаборов.НайтиСтроки(Отбор); // // КоличествоНаборов = 1; // ДанныеПоКоличествуНаборовНайденныеСтроки = ДанныеПоКоличествуНаборов.НайтиСтроки(Отбор); // Если ДанныеПоКоличествуНаборовНайденныеСтроки.Количество() > 0 Тогда // КоличествоНаборов = ДанныеПоКоличествуНаборовНайденныеСтроки[0].КоличествоМинимум; // КонецЕсли; // // ОбщаяСтоимость = 0; // СуммаКРаспределению = Выборка.Цена * КоличествоНаборов; // // СлужебнаяТЧ = Новый ТаблицаЗначений; // СлужебнаяТЧ.Колонки.Добавить("СтрокаТЧ"); // СлужебнаяТЧ.Колонки.Добавить("Количество"); // СлужебнаяТЧ.Колонки.Добавить("Стоимость"); // Для Каждого ТекущаяСтрока Из НайденныеСтроки Цикл // // СтрокаТЧ = ТабличнаяЧасть[ТекущаяСтрока.НомерСтроки - 1]; // Если ЕстьКодСтроки И СтрокаТЧ.КодСтроки <> 0 Тогда // Продолжить; // КонецЕсли; // // Стоимость = ТекущаяСтрока.Цена; // Количество = ?(ЕстьКоличествоУпаковок, СтрокаТЧ.КоличествоУпаковок, СтрокаТЧ.Количество); // // НоваяСтрока = СлужебнаяТЧ.Добавить(); // НоваяСтрока.СтрокаТЧ = СтрокаТЧ; // НоваяСтрока.Стоимость = Стоимость; // НоваяСтрока.Количество = Количество; // // ОбщаяСтоимость = ОбщаяСтоимость + ТекущаяСтрока.Цена; // // КонецЦикла; // СлужебнаяТЧ.Сортировать("Количество УБЫВ"); // // НомерСтроки = 0; // КоличествоСтрок = СлужебнаяТЧ.Количество(); // Для Каждого ТекущаяСтрока Из СлужебнаяТЧ Цикл // // СтрокаТЧ = ТекущаяСтрока.СтрокаТЧ; // Стоимость = ТекущаяСтрока.Стоимость; // Количество = ТекущаяСтрока.Количество; // // НомерСтроки = НомерСтроки + 1; // // ЗаполнитьЗначенияСвойств(СтруктураЗаполнения, Выборка); // ЗаполнитьЗначенияСвойств(СтрокаТЧ, СтруктураЗаполнения); // // Если Количество <> 0 И ОбщаяСтоимость <> 0 Тогда // СтрокаТЧ.Цена = Окр(((Стоимость / ОбщаяСтоимость) * СуммаКРаспределению) / Количество, 2); // Иначе // СтрокаТЧ.Цена = 0; // КонецЕсли; // // ОбщаяСтоимость = ОбщаяСтоимость - Стоимость; // СуммаКРаспределению = СуммаКРаспределению - СтрокаТЧ.Цена * Количество; // // Погрешность = 0; // Если НомерСтроки = КоличествоСтрок Тогда // Погрешность = СуммаКРаспределению; // КонецЕсли; // // Если СтруктураДействий <> Неопределено Тогда // СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомПогрешностиОкругления", Погрешность); // КонецЕсли; // // Если СтруктураДействий <> Неопределено Тогда // ОбработкаТабличнойЧастиСервер.ОбработатьСтрокуТЧ(СтрокаТЧ, СтруктураДействий, КэшированныеЗначения); // КонецЕсли; // // КонецЦикла; // //Иначе //ЗаполнитьЗначенияСвойств(СтруктураЗаполнения, Выборка); //Если ТипЗнч(ТабличнаяЧасть) <> Тип("ТаблицаЗначений") Тогда // СтрокаТЧ = ТабличнаяЧасть[Выборка.НомерСтроки - 1]; //Иначе // НайденныеСтроки = ТабличнаяЧасть.НайтиСтроки(Новый Структура("НомерСтроки", Выборка.НомерСтроки)); // Если НайденныеСтроки.Количество() > 0 Тогда // СтрокаТЧ = НайденныеСтроки[0]; // Иначе // Продолжить; // КонецЕсли; //КонецЕсли; ЗаполнитьЗначенияСвойств(СтрокаТЧ, СтруктураЗаполнения); Если СтруктураДействий <> Неопределено Тогда ОбработкаТабличнойЧастиСервер.ОбработатьСтрокуТЧ(СтрокаТЧ, СтруктураДействий, КэшированныеЗначения); КонецЕсли; //КонецЕсли; КонецЦикла; Возврат Истина; КонецФункции Функция ПолучитьТекстЗапросаВременнойТаблицыЦен(ИмяТаблицы, ИмяВременнойТаблицыТоваров, ВидЦеныКакПараметр=Истина) МенеджерВТ1 = Новый МенеджерВременныхТаблиц; Запрос = Новый Запрос; Запрос.МенеджерВременныхТаблиц = МенеджерВТ1; ТекстЗапроса = "ВЫБРАТЬ РАЗРЕШЕННЫЕ | ВременнаяТаблицаТовары.НомерСтроки КАК НомерСтроки, | " + ?(ВидЦеныКакПараметр,"ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.ВидЦены, &ВидЦены)","ЦеныНоменклатурыСрезПоследних.ВидЦены") + " КАК ВидЦены, | ВЫБОР | КОГДА | ВременнаяТаблицаТовары.Упаковка <> ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка) | ТОГДА | &ТекстЗапросаКоэффициентУпаковки1 | ИНАЧЕ | 1 | КОНЕЦ | * ЕстьNULL(ЦеныНоменклатурыСрезПоследних.Цена,0)/ЕстьNULL(&ТекстЗапросаКоэффициентУпаковки2,1) | * ВЫБОР | КОГДА &Валюта <> ЦеныНоменклатурыСрезПоследних.Валюта | ТОГДА ВЫБОР | КОГДА ЕСТЬNULL(КурсыВалютыЦены.Кратность, 0) > 0 | И ЕСТЬNULL(КурсыВалютыЦены.Курс, 0) > 0 | И ЕСТЬNULL(КурсыВалюты.Кратность, 0) > 0 | И ЕСТЬNULL(КурсыВалюты.Курс, 0) > 0 | ТОГДА | (КурсыВалютыЦены.Курс * КурсыВалюты.Кратность) | / (КурсыВалюты.Курс * КурсыВалютыЦены.Кратность) | ИНАЧЕ 0 | КОНЕЦ | ИНАЧЕ 1 | КОНЕЦ КАК Цена |ПОМЕСТИТЬ " + ИмяТаблицы + " |ИЗ | " + ИмяВременнойТаблицыТоваров + " КАК ВременнаяТаблицаТовары | |ЛЕВОЕ СОЕДИНЕНИЕ | РегистрСведений.ЦеныНоменклатуры.СрезПоследних(КОНЕЦПЕРИОДА(&Дата, ДЕНЬ), | " + ?(ВидЦеныКакПараметр," | ВидЦены = &ВидЦены И | (Номенклатура, Характеристика) В | (ВЫБРАТЬ | ВременнаяТаблицаТовары.Номенклатура, | ВременнаяТаблицаТовары.Характеристика | ИЗ | " + ИмяВременнойТаблицыТоваров + " КАК ВременнаяТаблицаТовары) |", " | (Номенклатура, Характеристика, ВидЦены) В | (ВЫБРАТЬ | ВременнаяТаблицаТовары.Номенклатура, | ВременнаяТаблицаТовары.Характеристика, | ВременнаяТаблицаТовары.ВидЦены | ИЗ | " + ИмяВременнойТаблицыТоваров + " КАК ВременнаяТаблицаТовары) |") + " |) КАК ЦеныНоменклатурыСрезПоследних |ПО | ВременнаяТаблицаТовары.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура | И ВременнаяТаблицаТовары.Характеристика = ЦеныНоменклатурыСрезПоследних.Характеристика | " + ?(ВидЦеныКакПараметр,"", "И ВременнаяТаблицаТовары.ВидЦены = ЦеныНоменклатурыСрезПоследних.ВидЦены") + " | |ЛЕВОЕ СОЕДИНЕНИЕ | РегистрСведений.КурсыВалют.СрезПоследних(&Дата, ) КАК КурсыВалютыЦены |ПО | ЦеныНоменклатурыСрезПоследних.Валюта = КурсыВалютыЦены.Валюта | |ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют.СрезПоследних(&Дата, Валюта = &Валюта) КАК КурсыВалюты | По Истина |; |"; ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТекстЗапросаКоэффициентУпаковки1", Справочники.УпаковкиЕдиницыИзмерения.ТекстЗапросаКоэффициентаУпаковки( "ВременнаяТаблицаТовары.Упаковка", "ВременнаяТаблицаТовары.Номенклатура")); ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТекстЗапросаКоэффициентУпаковки2", Справочники.УпаковкиЕдиницыИзмерения.ТекстЗапросаКоэффициентаУпаковки( "ЦеныНоменклатурыСрезПоследних.Упаковка", "ЦеныНоменклатурыСрезПоследних.Номенклатура")); Возврат ТекстЗапроса; КонецФункции Функция ПолучитьТекстЗапросаВременнойТаблицыТоваров(ИмяТаблицы) Возврат " |ВЫБРАТЬ | Таблица.НомерСтроки КАК НомерСтроки, | Таблица.Номенклатура КАК Номенклатура, | Таблица.Характеристика КАК Характеристика, | Таблица.Упаковка КАК Упаковка |ПОМЕСТИТЬ " + ИмяТаблицы + " |ИЗ | &Таблица КАК Таблица |; |"; КонецФункции |
|||
53
DexterMorgan
10.08.17
✎
21:02
|
(37)
//Модуль МодификацияКонфигурацииПереопределяемый Процедура ПриСозданииНаСервере(Форма, Отказ, СтандартнаяОбработка) Экспорт Если Форма.ИмяФормы = "Документ.ЗаказПоставщику.Форма.ФормаДокумента" Тогда НоваяКоманда = Форма.Команды.Добавить("СообщитьЧтоТоТам"); НоваяКоманда.Действие = "ПослеЗаписи"; НовыйЭлемент = Форма.Элементы.Добавить("КомандаПредупредить", Тип("КнопкаФормы")); НовыйЭлемент.ИмяКоманды = "СообщитьЧтоТоТам"; КонецЕсли; КонецПроцедуры //Модуль МодификацияКонфигурацииКлиентПереопределяемый Процедура ПослеЗаписи(Форма, ПараметрыЗаписи)Экспорт Если Форма.ИмяФормы = "Документ.ЗаказПоставщику.Форма.ФормаДокумента" Тогда Если ТипЗнч(ПараметрыЗаписи) = Тип("КомандаФормы") И ПараметрыЗаписи.Имя = "СообщитьЧтоТоТам" Тогда ПоказатьПредупреждение(,"Что-то там"); КонецЕсли; КонецЕсли; КонецПроцедуры |
|||
54
DexterMorgan
10.08.17
✎
21:03
|
(37) с тебя 5к
|
|||
55
Cyberhawk
10.08.17
✎
21:32
|
Нет такого документа
|
|||
56
DexterMorgan
11.08.17
✎
13:41
|
Вафля где мои бабки
|
|||
57
Вафель
11.08.17
✎
14:49
|
||||
58
Drown86
13.08.17
✎
13:16
|
я в итоге сделал, так как хотел через кнопку, все работает) Осталось чуть почистить от лишнего и все.
|
|||
59
Drown86
13.08.17
✎
13:16
|
кому не лень разбираться вот код, добавил еще запросы, хотя их можно и из общего модуля тянуть.
|
|||
60
Drown86
13.08.17
✎
13:16
|
&НаКлиенте
Процедура ЗаполнитьРозничныеЦеныВыделенныхСтрокПоВидуЦен(Команда) Если ПродажиКлиент.НеобходимоЗаполнениеЦенПоВидуЦен(Объект, "Товары", НСтр("ru='Товары'")) Тогда ДополнительныеПараметры = Новый Структура; ПродажиКлиент.ВыбратьВидЦен( Новый ОписаниеОповещения("ЗаполнитьРозничныеЦеныВыделенныхСтрокПоВидуЦенЗавершение", ЭтотОбъект, ДополнительныеПараметры), Объект.ЦенаВключаетНДС, Истина); КонецЕсли; КонецПроцедуры &НаКлиенте Процедура ЗаполнитьРозничныеЦеныВыделенныхСтрокПоВидуЦенЗавершение(ВидЦен, ДополнительныеПараметры) Экспорт Если ЗначениеЗаполнено(ВидЦен) Тогда МассивСтрок = Новый Массив; Для Каждого ТекСтрока Из Элементы.Товары.ВыделенныеСтроки Цикл НайденнаяСтрока = Объект.Товары.НайтиПоИдентификатору(ТекСтрока); Если НайденнаяСтрока.КодСтроки = 0 Тогда МассивСтрок.Добавить(НайденнаяСтрока); КонецЕсли; КонецЦикла; //Если МассивСтрок.Количество() = 0 // //И РеализацияСверхЗаказа И НЕ ОтклонениеОтУсловийПродаж // //И Объект.РеализацияПоЗаказам // Тогда // // ТекстПредупреждения = НСтр("ru='Цена не может быть назначена в строках по заказу.'"); // ПоказатьПредупреждение(Неопределено, ТекстПредупреждения); // Возврат //КонецЕсли; ЦеныРассчитаны = ЗаполнитьРозничныеЦеныВыделенныхСтрокПоВидуЦенСервер(ВидЦен); ПродажиКлиент.ОповеститьОбОкончанииЗаполненияЦенПоВидуЦен(ЦеныРассчитаны, ВидЦен); //СкидкиНаценкиКлиент.СброситьФлагСкидкиРассчитаны(ЭтаФорма); КонецЕсли; КонецПроцедуры &НаСервере Функция ЗаполнитьРозничныеЦеныВыделенныхСтрокПоВидуЦенСервер(ВидЦен) Экспорт МассивСтрок = Новый Массив; Для Каждого ТекСтрока Из Элементы.Товары.ВыделенныеСтроки Цикл НайденнаяСтрока = Объект.Товары.НайтиПоИдентификатору(ТекСтрока); //Если (РеализацияСверхЗаказа И НайденнаяСтрока.КодСтроки = 0) // ИЛИ ОтклонениеОтУсловийПродаж Тогда МассивСтрок.Добавить(НайденнаяСтрока); //КонецЕсли; КонецЦикла; НаборыВызовСервера.ДополнитьДоПолногоНабора(Объект.Товары, МассивСтрок, Истина); //СтруктураПересчетаСуммы = ОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруПересчетаСуммыНДСВСтрокеТЧ(Объект); СтруктураДействий = Новый Структура; //СтруктураДействий.Вставить("ПересчитатьСумму"); //СтруктураДействий.Вставить("ПересчитатьСуммуНДС", СтруктураПересчетаСуммы); //СтруктураДействий.Вставить("ПересчитатьСуммуСНДС", СтруктураПересчетаСуммы); //СтруктураДействий.Вставить("ПересчитатьСуммуРучнойСкидки"); //СтруктураДействий.Вставить("ОчиститьАвтоматическуюСкидку", Неопределено); // ПараметрыЗаполнения = Новый Структура(); ПараметрыЗаполнения.Вставить("Дата", Объект.Дата); ПараметрыЗаполнения.Вставить("Валюта", Объект.Валюта); ПараметрыЗаполнения.Вставить("ВидЦены", ВидЦен); ПараметрыЗаполнения.Вставить("РасчитыватьНаборы", Истина); ПараметрыЗаполнения.Вставить("ЦенаВключаетНДС", Объект.ЦенаВключаетНДС); ПараметрыЗаполнения.Вставить("ПоляЗаполнения", "ЦенаРозница"); ЦеныРассчитаны = ЗаполнитьРозничныеЦены( Объект.Товары, // Табличная часть МассивСтрок, // Массив строк или структура отбора ПараметрыЗаполнения, СтруктураДействий); ОбщегоНазначенияУТ.ЗаполнитьДубликатыЗависимыхРеквизитовВКоллекции(Объект.Товары, ЗависимыеРеквизиты()); //ПересчитатьСуммуСверхЗаказа(); //ПродажиКлиентСервер.РассчитатьИтоговыеПоказателиРеализации(ЭтаФорма); //СформироватьНадписьВалюты(); //РассчитатьСуммуПредоплаты(ЭтаФорма); Возврат ЦеныРассчитаны; КонецФункции Функция ЗаполнитьРозничныеЦены(ТабличнаяЧасть, ВыделенныеСтроки = Неопределено, ПараметрыЗаполнения, СтруктураДействий = Неопределено, КэшированныеЗначения = Неопределено) Экспорт ЦеныЗаполнены = Ложь; Если ПараметрыЗаполнения = Неопределено Тогда ВызватьИсключение НСтр("ru='Параметры заполнения не указаны'"); Возврат ЦеныЗаполнены; КонецЕсли; // Получение структуры параметров по умолчанию ПараметрыЦ = Новый Структура( "ПоляЗаполнения, КолонкиПоЗначению, ДругиеИменаКолонок", "ЦенаРозница", Новый Структура, Новый Структура); ОбщегоНазначенияУТКлиентСервер.ДополнитьСтруктуру(ПараметрыЦ, ПараметрыЗаполнения, Истина); // Проверки входящих данных //Если Не ПараметрыЦ.Свойство("Соглашение") И Не Параметры.Свойство("ВидЦены") Тогда // ВызватьИсключение НСтр("ru='В параметрах заполнения должны быть указаны ""Соглашение"" или ""ВидЦены""'"); // Возврат ЦеныЗаполнены; //ИначеЕсли Не ПараметрыЦ.Свойство("Дата") Или Не Параметры.Свойство("Валюта") Тогда // ВызватьИсключение НСтр("ru='В параметрах заполнения должны быть указаны ""Валюта"" и ""Дата""'"); // Возврат ЦеныЗаполнены; //КонецЕсли; ДополнительныеКолонки = ""; //ЕстьКоличествоУпаковок = Ложь; //ЕстьКодСтроки = Ложь; //Если ТипЗнч(ТабличнаяЧасть) = Тип("ТаблицаЗначений") Тогда // ЕстьКоличествоУпаковок = ТабличнаяЧасть.Колонки.Найти("КоличествоУпаковок") <> Неопределено; //Иначе // ЕстьКоличествоУпаковок = ТабличнаяЧасть.Выгрузить().Колонки.Найти("КоличествоУпаковок") <> Неопределено; //КонецЕсли; //Если ТипЗнч(ТабличнаяЧасть) = Тип("ТаблицаЗначений") Тогда // ЕстьКодСтроки = ТабличнаяЧасть.Колонки.Найти("КодСтроки") <> Неопределено; //Иначе // ЕстьКодСтроки = ТабличнаяЧасть.Выгрузить().Колонки.Найти("КодСтроки") <> Неопределено; //КонецЕсли; //Если ЕстьКоличествоУпаковок Тогда // ДополнительныеКолонки = ?(ПараметрыЦ.Свойство("РасчитыватьНаборы") И ПараметрыЦ.РасчитыватьНаборы, "," + "Количество, КоличествоУпаковок, НоменклатураНабора, ХарактеристикаНабора", ""); //Иначе // ДополнительныеКолонки = ?(ПараметрыЦ.Свойство("РасчитыватьНаборы") И ПараметрыЦ.РасчитыватьНаборы, "," + "Количество, НоменклатураНабора, ХарактеристикаНабора", ""); //КонецЕсли; // // Получение выгрузки по табличной части Таблица = ОбщегоНазначенияУТ.ВыгрузитьТаблицуЗначений( ТабличнаяЧасть, ВыделенныеСтроки, "НомерСтроки, Номенклатура, Характеристика, Упаковка" + ДополнительныеКолонки, ПараметрыЦ.КолонкиПоЗначению, ПараметрыЦ.ДругиеИменаКолонок); МаксимальныйИндексСтроки = 0; Для Каждого СтрокаТЧ Из ТабличнаяЧасть Цикл Если СтрокаТЧ.НомерСтроки > МаксимальныйИндексСтроки Тогда МаксимальныйИндексСтроки = СтрокаТЧ.НомерСтроки; КонецЕсли; КонецЦикла; //КоэффициентыПропорциональностиРасчетаЦенНаборов = Неопределено; //ДанныеПоКоличествуНаборов = Неопределено; //Если Параметры.Свойство("РасчитыватьНаборы") И Параметры.РасчитыватьНаборы Тогда // // Если НЕ ЕстьКоличествоУпаковок Тогда // Таблица.Колонки.Добавить("КоличествоУпаковок", ОбщегоНазначенияУТ.ПолучитьОписаниеТиповЧисла(15,3)); // Для Каждого СтрокаТЧ Из Таблица Цикл // СтрокаТЧ.КоличествоУпаковок = СтрокаТЧ.Количество; // КонецЦикла; // КонецЕсли; // // КоэффициентыПропорциональностиРасчетаЦенНаборов = НаборыСервер.КоэффициентыРаспределения(Таблица, Параметры); // ДанныеПоКоличествуНаборов = КоличествоНаборов(Таблица); // // Наборы = КоэффициентыПропорциональностиРасчетаЦенНаборов.Скопировать(); // Наборы.Свернуть("НоменклатураНабора, ХарактеристикаНабора"); // Индекс = МаксимальныйИндексСтроки; // Для Каждого Строка Из Наборы Цикл // // Индекс = Индекс + 1; // // НоваяСтрока = Таблица.Добавить(); // НоваяСтрока.НомерСтроки = Индекс; // НоваяСтрока.Номенклатура = Строка.НоменклатураНабора; // НоваяСтрока.Характеристика = Строка.ХарактеристикаНабора; // НоваяСтрока.Упаковка = Справочники.УпаковкиЕдиницыИзмерения.ПустаяСсылка(); // КонецЦикла; // // Таблица.Колонки.Удалить("Количество"); // Таблица.Колонки.Удалить("КоличествоУпаковок"); // //КонецЕсли; // Получение запроса Запрос = Новый Запрос; МВТ = Новый МенеджерВременныхТаблиц; Запрос.МенеджерВременныхТаблиц = МВТ; //Запрос.УстановитьПараметр("Дата", ?(ЗначениеЗаполнено(ПараметрыЦ.Дата), ПараметрыЦ.Дата, ТекущаяДата())); Запрос.УстановитьПараметр("Дата", ПараметрыЦ.Дата); Запрос.УстановитьПараметр("Валюта", ПараметрыЦ.Валюта); Запрос.УстановитьПараметр("Таблица", Таблица); Запрос.Текст = Запрос.Текст + ПолучитьТекстЗапросаВременнойТаблицыТоваров("втТаблицаТовары"); Если ПараметрыЦ.Свойство("ВидЦены") Тогда Запрос.УстановитьПараметр("ВидЦены", ПараметрыЦ.ВидЦены); Запрос.Текст = Запрос.Текст + ПолучитьТекстЗапросаВременнойТаблицыЦен("втТаблицаЦены", "втТаблицаТовары", Истина); Запрос.Текст = Запрос.Текст + " |ВЫБРАТЬ | втТаблицаТовары.НомерСтроки КАК НомерСтроки, | втТаблицаЦены.ВидЦены КАК ВидЦены, | втТаблицаЦены.Цена КАК ЦенаРозница |ИЗ | втТаблицаТовары КАК втТаблицаТовары | ЛЕВОЕ СОЕДИНЕНИЕ втТаблицаЦены КАК втТаблицаЦены | ПО (втТаблицаЦены.НомерСтроки = втТаблицаТовары.НомерСтроки)"; //ИначеЕсли Параметры.Свойство("Соглашение") Тогда // // МенеджерВТ = Новый МенеджерВременныхТаблиц; // Запрос = Новый Запрос; // Запрос.МенеджерВременныхТаблиц = МенеджерВТ; // Запрос.УстановитьПараметр("Соглашение", Параметры.Соглашение); // Запрос.УстановитьПараметр("ЭтоВыкупТары", ?(Параметры.Свойство("ЭтоВыкупТары"), Параметры.ЭтоВыкупТары, Ложь)); // Запрос.УстановитьПараметр("Организация", ?(Параметры.Свойство("Организация"), Параметры.Организация, Справочники.Организации.ПустаяСсылка())); // Запрос.Текст = Запрос.Текст + ПолучитьТекстЗапросаВременнойТаблицыЦенПоСоглашению("втТаблицаЦеныПоСоглашению", "втТаблицаТовары"); // Запрос.Текст = Запрос.Текст + ПолучитьТекстЗапросаВременнойТаблицыЦен("втТаблицаЦеныПоВидуЦен", "втТаблицаЦеныПоСоглашению", Ложь); // Запрос.Текст = Запрос.Текст + " // |ВЫБРАТЬ // | втТаблицаЦеныПоСоглашению.НомерСтроки КАК НомерСтроки, // | втТаблицаЦеныПоСоглашению.ВидЦены КАК ВидЦены, // | втТаблицаЦеныПоСоглашению.СтавкаНДС КАК СтавкаНДС, // | втТаблицаЦеныПоСоглашению.СрокПоставки КАК СрокПоставки, // | ВЫБОР // | КОГДА втТаблицаЦеныПоСоглашению.Цена = 0 // | ТОГДА втТаблицаЦеныПоВидуЦен.Цена // | ИНАЧЕ втТаблицаЦеныПоСоглашению.Цена // | КОНЕЦ КАК Цена // |ИЗ // | втТаблицаЦеныПоСоглашению КАК втТаблицаЦеныПоСоглашению // | ЛЕВОЕ СОЕДИНЕНИЕ втТаблицаЦеныПоВидуЦен КАК втТаблицаЦеныПоВидуЦен // | ПО (втТаблицаЦеныПоВидуЦен.НомерСтроки = втТаблицаЦеныПоСоглашению.НомерСтроки)"; КонецЕсли; РезультатЗапроса = Запрос.Выполнить(); Если РезультатЗапроса.Пустой() Тогда Возврат ЦеныЗаполнены; КонецЕсли; СтруктураЗаполнения = Новый Структура(ПараметрыЦ.ПоляЗаполнения); Выборка = РезультатЗапроса.Выбрать(); Пока Выборка.Следующий() Цикл //// Расчет цен комплектующих набора //Если Выборка.НомерСтроки > МаксимальныйИндексСтроки Тогда // // НайденныеСтроки = Таблица.НайтиСтроки(Новый Структура("НомерСтроки", Выборка.НомерСтроки)); // Если НайденныеСтроки.Количество() = 0 Тогда // Продолжить; // КонецЕсли; // // Отбор = Новый Структура; // Отбор.Вставить("НоменклатураНабора", НайденныеСтроки[0].Номенклатура); // Отбор.Вставить("ХарактеристикаНабора", НайденныеСтроки[0].Характеристика); // // НайденныеСтроки = КоэффициентыПропорциональностиРасчетаЦенНаборов.НайтиСтроки(Отбор); // // КоличествоНаборов = 1; // ДанныеПоКоличествуНаборовНайденныеСтроки = ДанныеПоКоличествуНаборов.НайтиСтроки(Отбор); // Если ДанныеПоКоличествуНаборовНайденныеСтроки.Количество() > 0 Тогда // КоличествоНаборов = ДанныеПоКоличествуНаборовНайденныеСтроки[0].КоличествоМинимум; // КонецЕсли; // // ОбщаяСтоимость = 0; // СуммаКРаспределению = Выборка.Цена * КоличествоНаборов; // // СлужебнаяТЧ = Новый ТаблицаЗначений; // СлужебнаяТЧ.Колонки.Добавить("СтрокаТЧ"); // СлужебнаяТЧ.Колонки.Добавить("Количество"); // СлужебнаяТЧ.Колонки.Добавить("Стоимость"); // Для Каждого ТекущаяСтрока Из НайденныеСтроки Цикл // // СтрокаТЧ = ТабличнаяЧасть[ТекущаяСтрока.НомерСтроки - 1]; // Если ЕстьКодСтроки И СтрокаТЧ.КодСтроки <> 0 Тогда // Продолжить; // КонецЕсли; // // Стоимость = ТекущаяСтрока.Цена; // Количество = ?(ЕстьКоличествоУпаковок, СтрокаТЧ.КоличествоУпаковок, СтрокаТЧ.Количество); // // НоваяСтрока = СлужебнаяТЧ.Добавить(); // НоваяСтрока.СтрокаТЧ = СтрокаТЧ; // НоваяСтрока.Стоимость = Стоимость; // НоваяСтрока.Количество = Количество; // // ОбщаяСтоимость = ОбщаяСтоимость + ТекущаяСтрока.Цена; // // КонецЦикла; // СлужебнаяТЧ.Сортировать("Количество УБЫВ"); // // НомерСтроки = 0; // КоличествоСтрок = СлужебнаяТЧ.Количество(); // Для Каждого ТекущаяСтрока Из СлужебнаяТЧ Цикл // // СтрокаТЧ = ТекущаяСтрока.СтрокаТЧ; // Стоимость = ТекущаяСтрока.Стоимость; // Количество = ТекущаяСтрока.Количество; // // НомерСтроки = НомерСтроки + 1; // // ЗаполнитьЗначенияСвойств(СтруктураЗаполнения, Выборка); // ЗаполнитьЗначенияСвойств(СтрокаТЧ, СтруктураЗаполнения); // // Если Количество <> 0 И ОбщаяСтоимость <> 0 Тогда // СтрокаТЧ.Цена = Окр(((Стоимость / ОбщаяСтоимость) * СуммаКРаспределению) / Количество, 2); // Иначе // СтрокаТЧ.Цена = 0; // КонецЕсли; // // ОбщаяСтоимость = ОбщаяСтоимость - Стоимость; // СуммаКРаспределению = СуммаКРаспределению - СтрокаТЧ.Цена * Количество; // // Погрешность = 0; // Если НомерСтроки = КоличествоСтрок Тогда // Погрешность = СуммаКРаспределению; // КонецЕсли; // // Если СтруктураДействий <> Неопределено Тогда // СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомПогрешностиОкругления", Погрешность); // КонецЕсли; // // Если СтруктураДействий <> Неопределено Тогда // ОбработкаТабличнойЧастиСервер.ОбработатьСтрокуТЧ(СтрокаТЧ, СтруктураДействий, КэшированныеЗначения); // КонецЕсли; // // КонецЦикла; // //Иначе ЗаполнитьЗначенияСвойств(СтруктураЗаполнения, Выборка); Если ТипЗнч(ТабличнаяЧасть) <> Тип("ТаблицаЗначений") Тогда СтрокаТЧ = ТабличнаяЧасть[Выборка.НомерСтроки - 1]; Иначе НайденныеСтроки = ТабличнаяЧасть.НайтиСтроки(Новый Структура("НомерСтроки", Выборка.НомерСтроки)); Если НайденныеСтроки.Количество() > 0 Тогда СтрокаТЧ = НайденныеСтроки[0]; Иначе Продолжить; КонецЕсли; КонецЕсли; ЗаполнитьЗначенияСвойств(СтрокаТЧ, СтруктураЗаполнения); Если СтруктураДействий <> Неопределено Тогда ОбработкаТабличнойЧастиСервер.ОбработатьСтрокуТЧ(СтрокаТЧ, СтруктураДействий, КэшированныеЗначения); КонецЕсли; //КонецЕсли; КонецЦикла; Возврат Истина; КонецФункции Функция ПолучитьТекстЗапросаВременнойТаблицыЦен(ИмяТаблицы, ИмяВременнойТаблицыТоваров, ВидЦеныКакПараметр=Истина) МенеджерВТ1 = Новый МенеджерВременныхТаблиц; Запрос = Новый Запрос; Запрос.МенеджерВременныхТаблиц = МенеджерВТ1; ТекстЗапроса = "ВЫБРАТЬ РАЗРЕШЕННЫЕ | ВременнаяТаблицаТовары.НомерСтроки КАК НомерСтроки, | " + ?(ВидЦеныКакПараметр,"ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.ВидЦены, &ВидЦены)","ЦеныНоменклатурыСрезПоследних.ВидЦены") + " КАК ВидЦены, | ВЫБОР | КОГДА | ВременнаяТаблицаТовары.Упаковка <> ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка) | ТОГДА | &ТекстЗапросаКоэффициентУпаковки1 | ИНАЧЕ | 1 | КОНЕЦ | * ЕстьNULL(ЦеныНоменклатурыСрезПоследних.Цена,0)/ЕстьNULL(&ТекстЗапросаКоэффициентУпаковки2,1) | * ВЫБОР | КОГДА &Валюта <> ЦеныНоменклатурыСрезПоследних.Валюта | ТОГДА ВЫБОР | КОГДА ЕСТЬNULL(КурсыВалютыЦены.Кратность, 0) > 0 | И ЕСТЬNULL(КурсыВалютыЦены.Курс, 0) > 0 | И ЕСТЬNULL(КурсыВалюты.Кратность, 0) > 0 | И ЕСТЬNULL(КурсыВалюты.Курс, 0) > 0 | ТОГДА | (КурсыВалютыЦены.Курс * КурсыВалюты.Кратность) | / (КурсыВалюты.Курс * КурсыВалютыЦены.Кратность) | ИНАЧЕ 0 | КОНЕЦ | ИНАЧЕ 1 | КОНЕЦ КАК Цена |ПОМЕСТИТЬ " + ИмяТаблицы + " |ИЗ | " + ИмяВременнойТаблицыТоваров + " КАК ВременнаяТаблицаТовары | |ЛЕВОЕ СОЕДИНЕНИЕ | РегистрСведений.ЦеныНоменклатуры.СрезПоследних(КОНЕЦПЕРИОДА(&Дата, ДЕНЬ), | " + ?(ВидЦеныКакПараметр," | ВидЦены = &ВидЦены И | (Номенклатура, Характеристика) В | (ВЫБРАТЬ | ВременнаяТаблицаТовары.Номенклатура, | ВременнаяТаблицаТовары.Характеристика | ИЗ | " + ИмяВременнойТаблицыТоваров + " КАК ВременнаяТаблицаТовары) |", " | (Номенклатура, Характеристика, ВидЦены) В | (ВЫБРАТЬ | ВременнаяТаблицаТовары.Номенклатура, | ВременнаяТаблицаТовары.Характеристика, | ВременнаяТаблицаТовары.ВидЦены | ИЗ | " + ИмяВременнойТаблицыТоваров + " КАК ВременнаяТаблицаТовары) |") + " |) КАК ЦеныНоменклатурыСрезПоследних |ПО | ВременнаяТаблицаТовары.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура | И ВременнаяТаблицаТовары.Характеристика = ЦеныНоменклатурыСрезПоследних.Характеристика | " + ?(ВидЦеныКакПараметр,"", "И ВременнаяТаблицаТовары.ВидЦены = ЦеныНоменклатурыСрезПоследних.ВидЦены") + " | |ЛЕВОЕ СОЕДИНЕНИЕ | РегистрСведений.КурсыВалют.СрезПоследних(&Дата, ) КАК КурсыВалютыЦены |ПО | ЦеныНоменклатурыСрезПоследних.Валюта = КурсыВалютыЦены.Валюта | |ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют.СрезПоследних(&Дата, Валюта = &Валюта) КАК КурсыВалюты | По Истина |; |"; ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТекстЗапросаКоэффициентУпаковки1", Справочники.УпаковкиЕдиницыИзмерения.ТекстЗапросаКоэффициентаУпаковки( "ВременнаяТаблицаТовары.Упаковка", "ВременнаяТаблицаТовары.Номенклатура")); ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТекстЗапросаКоэффициентУпаковки2", Справочники.УпаковкиЕдиницыИзмерения.ТекстЗапросаКоэффициентаУпаковки( "ЦеныНоменклатурыСрезПоследних.Упаковка", "ЦеныНоменклатурыСрезПоследних.Номенклатура")); Возврат ТекстЗапроса; КонецФункции Функция ПолучитьТекстЗапросаВременнойТаблицыТоваров(ИмяТаблицы) Возврат " |ВЫБРАТЬ | Таблица.НомерСтроки КАК НомерСтроки, | Таблица.Номенклатура КАК Номенклатура, | Таблица.Характеристика КАК Характеристика, | Таблица.Упаковка КАК Упаковка |ПОМЕСТИТЬ " + ИмяТаблицы + " |ИЗ | &Таблица КАК Таблица |; |"; КонецФункции |
|||
61
Maniac
13.08.17
✎
13:34
|
Вот бараны то
Напиши отчет или внешнюю обработку табличных частей В любой форме - или отчет или ТЗ с выводом данных заказа и чего УГОДНО из дока юзер будет кнопку нажимать и получать отчет по документу НОЛЬ изменений |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |