Имя: Пароль:
1C
 
УТ 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
Вот бараны то

Напиши отчет или внешнюю обработку табличных частей

В любой форме - или отчет или ТЗ с выводом данных заказа и чего УГОДНО

из дока юзер будет кнопку нажимать и получать отчет по документу

НОЛЬ изменений