Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
23 июн 2024, 14:19

Автоматическое проставление закупочных цен

Автор Ludmila_Dik, 19 мая 2023, 10:04

0 Пользователей и 1 гость просматривают эту тему.

Ludmila_Dik

Здравствуйте, стоит такая задача: добавить кнопку в документ списания "автоматическое заполнение цен номенклатуры". Конфигурация Розница, редакция 2.3 (2.3.10.35).  У нас уже ранее программисты добавили кнопку автоматическое заполнение цен по розничным ценам. Я по аналогии хотела сделать и с закупочными, но ничего не выходит, потому что на сервере нет процедуры ЗаполнитьЦеныВыделенныхСтрокПоЗакупочнымЦенамСервер(), а ЗаполнитьЦеныВыделенныхСтрокПоРозничнымЦенамСервер() - есть.
Подскажите, пожалуйста, чем заменить строчку. пробавала брать по себестоимости ничего не выходит. Исправления документа происходит через расширение.

код модуля формы документа, в документе списания товаров:

&НаСервере
Функция ПроверкаДоступаКОтображениюОстатков(Код=7)
   Возврат Расш1_ОбщийМодуль1.ПроверкаДоступаКОтображениюОстатков(Код);
КонецФункции

//&НаСервере
//Функция ПустойМагазин()
//   //УстановитьПривилегированныйРежим(Истина);
//   Возврат Справочники.Магазины.ПустаяСсылка();
//КонецФункции

//&НаСервере
//Функция ПолучитьМагазин()
//   //УстановитьПривилегированныйРежим(Истина);
//   Возврат Справочники.Магазины.НайтиПоКоду("00-000001");
//КонецФункции

&НаКлиенте
Процедура Расш1_ПриОткрытииПосле(Отказ)
   Если Не ПроверкаДоступаКОтображениюОстатков() Тогда
      Элементы.Магазин.Доступность=Ложь;
      Элементы.Склад.Доступность=Ложь;
      Элементы.Организация.Доступность=Ложь;
      Элементы.ФормаЗаполнитьРозничнымиЦенами.Видимость=Ложь; 
      Элементы.ФормаЗаполнитьЗакупочнымиЦенами.Видимость=Ложь;
   КонецЕсли;
   Если Не ПроверкаДоступаКОтображениюОстатков(1) Тогда
      Если ЗначениеЗаполнено(Объект.ДокументОснование) Тогда
         Элементы.ТоварыДобавить.Видимость=Ложь;
         Элементы.ТоварыПоискПоНаименованию.Видимость=Ложь;
         Элементы.ТоварыПоискПоМагнитномуКоду.Видимость=Ложь;
         Элементы.ТоварыПоискПоШтрихкоду.Видимость=Ложь;
         Элементы.ТоварыОткрытьПодбор.Видимость=Ложь;
         элементы.ТоварыВставитьСтроки.Видимость=Ложь;
         Элементы.ТоварыСкопироватьСтроки.Видимость=Ложь;
         Элементы.СтраницаТовары.Доступность=Ложь;
      КонецЕсли;
   КонецЕсли;
КонецПроцедуры

&НаКлиенте
Процедура Расш1_ЗаполнитьРозничнымиЦенамиПосле(Команда)
   Для Каждого Стр Из Объект.Товары Цикл      
      Если ЗначениеЗаполнено(Объект.Магазин) Тогда
         Элементы.Товары.ВыделенныеСтроки.Очистить();
         Элементы.Товары.ВыделенныеСтроки.Добавить(Стр.ПолучитьИдентификатор());
         ЦеныРассчитаны = ЗаполнитьЦеныВыделенныхСтрокПоРозничнымЦенамСервер();
         ЗапасыКлиент.ОповеститьОбОкончанииЗаполненияЦенПоРозничнымЦенам(ЦеныРассчитаны, Объект.Магазин);
         
      КонецЕсли;
   КонецЦикла;
КонецПроцедуры




&НаКлиенте
Процедура Расш1_ЗаполнитьЗакупочнымиЦенамиПосле(Команда)
   Для Каждого Стр Из Объект.Товары Цикл      
      Если ЗначениеЗаполнено(Объект.Магазин) Тогда
         Элементы.Товары.ВыделенныеСтроки.Очистить();
         Элементы.Товары.ВыделенныеСтроки.Добавить(Стр.ПолучитьИдентификатор());
         ЦеныРассчитаны = ЗаполнитьЦеныВыделенныхСтрокПоЗакупочнымЦенамСервер();
         ЗапасыКлиент.ОповеститьОбОкончанииЗаполнитьЦеныВыделенныхСтрокПоЗакупочнымЦенамСервер(ЦеныРассчитаны, Объект.Магазин);
         
      КонецЕсли;
   КонецЦикла;
КонецПроцедуры


LexaK

Ludmila_Dik, скопируйте/вставьте сюда код этой процедуры
ЗаполнитьЦеныВыделенныхСтрокПоРозничнымЦенамСервер()
если помогло нажмите: Спасибо!

Ludmila_Dik

&НаСервере
Функция ЗаполнитьЦеныВыделенныхСтрокПоРозничнымЦенамСервер()
   
   СтруктураПараметров = ЗапасыСервер.СтруктураПараметровЗаполненияПоРозничнымЦенам();
   СтруктураПараметров.Объект = Объект;
   СтруктураПараметров.ИмяТабличнойЧасти = "Товары";
   СтруктураПараметров.Магазин = Объект.Магазин;
   СтруктураПараметров.ВыделенныеСтроки = Элементы.Товары.ВыделенныеСтроки;
   СтруктураПараметров.Дата = ЗапасыСервер.ДатаДляЦенообразованияДляДокумента(Объект);
   СтруктураПараметров.ЕстьНДС = Ложь;
   
   Возврат ЗапасыСервер.ЗаполнитьЦеныВыделенныхСтрокПоРозничнымЦенам(СтруктураПараметров);
КонецФункции

LexaK

Ludmila_Dik, и код этой процедуры
ЗапасыСервер.ЗаполнитьЦеныВыделенныхСтрокПоРозничнымЦенам(СтруктураПараметров)
если помогло нажмите: Спасибо!

Ludmila_Dik

Вот чего нашла по разным местам:

// Осуществляет заполнение цен в тч Товары по магазину по выделенным строкам.
//
// Параметры:
// Объект                            - ДокументОбъект, для которого необходимо заполнить цены.
// ИмяТабличнойЧасти                 - Строка - имя табличной части, в которой необходимо заполнить цены.
// Магазин                           - СправочникСсылка.Магазины - магазин, по которому необходимо заполнить цены.
// ВыделенныеСтроки                  - Массив строк, в которых необходимо заполнить цены.
//
// Возвращаемое значение:
// Булево
// Истина, если цены заполнены, ложь в противном случае.
//
Функция ЗаполнитьЦеныВыделенныхСтрокПоРозничнымЦенам(СтруктураПараметров) Экспорт

Объект                    = СтруктураПараметров.Объект;
ИмяТабличнойЧасти         = СтруктураПараметров.ИмяТабличнойЧасти;
Магазин                   = СтруктураПараметров.Магазин;
ВыделенныеСтроки          = СтруктураПараметров.ВыделенныеСтроки;
Дата                      = СтруктураПараметров.Дата;
ЕстьНДС                   = СтруктураПараметров.ЕстьНДС;
ЕстьСуммаСНДС             = СтруктураПараметров.ЕстьСуммаСНДС;
ПриводитьКМинимальнойЦене = СтруктураПараметров.ПриводитьКМинимальнойЦене;

НеобходимостьПересчетаСуммыСУчетомСкидок = СтруктураПараметров.НеобходимостьПересчетаСуммыСУчетомСкидок;

ПересчитатьЦенуСУчетомАгентскогоВознаграждения = Ложь;
Если СтруктураПараметров.Свойство("ПересчитатьЦенуСУчетомАгентскогоВознаграждения") Тогда
ПересчитатьЦенуСУчетомАгентскогоВознаграждения = СтруктураПараметров.ПересчитатьЦенуСУчетомАгентскогоВознаграждения;
КонецЕсли;

ЦеныРассчитаны = Ложь;

Если Объект[ИмяТабличнойЧасти].Количество() = 0 Тогда

Возврат ЦеныРассчитаны;

КонецЕсли;

МассивСтрок = Новый Массив;

Для Каждого ТекущаяСтрока Из ВыделенныеСтроки Цикл

СтрокаТаблицы = Объект[ИмяТабличнойЧасти].НайтиПоИдентификатору(ТекущаяСтрока);

Если СтрокаТаблицы = Неопределено Тогда

Продолжить;

КонецЕсли;

МассивСтрок.Добавить(СтрокаТаблицы);

КонецЦикла;

Если МассивСтрок.Количество() = 0 Тогда

Возврат Ложь;

КонецЕсли;

Запрос = Новый Запрос;
СформироватьЗапросВременнаяТаблицаТовары(Запрос.Текст);
СформироватьЗапросЦеныПоРозничнымЦенам(Запрос.Текст, Магазин);
Запрос.УстановитьПараметр("Товары", Объект[ИмяТабличнойЧасти].Выгрузить(МассивСтрок, "НомерСтроки,Номенклатура,Характеристика,Упаковка"));
Запрос.УстановитьПараметр("Дата",   ?(ЗначениеЗаполнено(Дата), Дата, ТекущаяДатаСеанса()));
Запрос.УстановитьПараметр("Магазин", Магазин);

СтруктураРеквизитов = Новый Структура;
СтруктураРеквизитов.Вставить("ФорматМагазина");
СтруктураРеквизитов.Вставить("ПравилоЦенообразования");
СтруктураРеквизитов.Вставить("ИспользоватьПрименениеЦен");
СтруктураРеквизитов.Вставить("ВидМинимальныхЦенПродажи");
РеквизитыМагазина = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Магазин, СтруктураРеквизитов);

Запрос.УстановитьПараметр("ФорматОбъектаЦенообразования", РеквизитыМагазина.ФорматМагазина);
Запрос.УстановитьПараметр("ПравилоЦенообразования", РеквизитыМагазина.ПравилоЦенообразования);
Запрос.УстановитьПараметр("ИспользоватьПрименениеЦен", РеквизитыМагазина.ИспользоватьПрименениеЦен);
Запрос.УстановитьПараметр("ПриводитьКМинимальнойЦене", ПриводитьКМинимальнойЦене И ЗначениеЗаполнено(РеквизитыМагазина.ВидМинимальныхЦенПродажи));
Запрос.УстановитьПараметр("ВидМинимальныхЦенПродажи", РеквизитыМагазина.ВидМинимальныхЦенПродажи);

ТаблицаЦен = Запрос.Выполнить().Выгрузить();
ТаблицаЦен.Индексы.Добавить("НомерСтроки");

Если ТаблицаЦен.Количество() = 0 Тогда

Возврат Ложь;

КонецЕсли;

СтруктураДействий = Новый Структура;
СтруктураДействий.Вставить("ПересчитатьСумму");
Если ЕстьНДС Тогда
СтруктураДействий.Вставить("ПересчитатьСуммуНДС", ОбработкаТабличнойЧастиТоварыКлиентСервер.СтруктураПересчетаСуммыНДСВСтрокеТЧ(Объект));
Если ЕстьСуммаСНДС Тогда
СтруктураДействий.Вставить("ПересчитатьСуммуСНДС", Новый Структура("ЦенаВключаетНДС", Объект.ЦенаВключаетНДС));
КонецЕсли;
КонецЕсли;
Если НеобходимостьПересчетаСуммыСУчетомСкидок Тогда
СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомРучнойСкидки", Новый Структура("Очищать", Ложь));
СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомАвтоматическойСкидки", Новый Структура("Очищать", Истина));
КонецЕсли;
Если ПересчитатьЦенуСУчетомАгентскогоВознаграждения Тогда
СтруктураДействий.Вставить("ПересчитатьЦенуСУчетомАгентскогоВознаграждения");
КонецЕсли;
КэшированныеЗначения = ОбработкаТабличнойЧастиТоварыКлиентСервер.СтруктураКэшируемыхЗначений();

Для Каждого ТекСтрока Из Объект[ИмяТабличнойЧасти] Цикл

ЦенаНайдена = Ложь;

НайденнаяСтрока = ТаблицаЦен.Найти(ТекСтрока.НомерСтроки,"НомерСтроки");
ЦенаНайдена = (НайденнаяСтрока <> Неопределено);

Если НЕ ЦенаНайдена Тогда

Продолжить;

КонецЕсли;

ТекСтрока.Цена     = НайденнаяСтрока.Цена;

ОбработкаТабличнойЧастиТоварыСервер.ОбработатьСтрокуТЧСервер(ТекСтрока, СтруктураДействий, КэшированныеЗначения);

ЦеныРассчитаны = Истина;

КонецЦикла;

Возврат ЦеныРассчитаны;

КонецФункции






&НаСервере
Функция ЗаполнитьЦеныВыделенныхСтрокПоРозничнымЦенамСервер()

СтруктураПараметров                           = ЗапасыСервер.СтруктураПараметровЗаполненияПоРозничнымЦенам();
СтруктураПараметров.Объект                    = Объект;
СтруктураПараметров.ИмяТабличнойЧасти         = "Товары";
СтруктураПараметров.Магазин                   = Объект.Магазин;
СтруктураПараметров.ВыделенныеСтроки          = Элементы.Товары.ВыделенныеСтроки;
СтруктураПараметров.Дата                      = ЗапасыСервер.ДатаДляЦенообразованияДляДокумента(Объект);
СтруктураПараметров.ЕстьНДС                   = Ложь;

ЦеныРассчитаны  = ЗапасыСервер.ЗаполнитьЦеныВыделенныхСтрокПоРозничнымЦенам(СтруктураПараметров);

Возврат ЦеныРассчитаны;




&НаСервере
Функция ЗаполнитьЦеныВыделенныхСтрокПоРозничнымЦенамСервер()

СтруктураПараметров                           = ЗапасыСервер.СтруктураПараметровЗаполненияПоРозничнымЦенам();
СтруктураПараметров.Объект                    = Объект;
СтруктураПараметров.ИмяТабличнойЧасти         = "Товары";
СтруктураПараметров.Магазин                   = Объект.Магазин;
СтруктураПараметров.ВыделенныеСтроки          = Элементы.Товары.ВыделенныеСтроки;
СтруктураПараметров.Дата                      = ЗапасыСервер.ДатаДляЦенообразованияДляДокумента(Объект);
СтруктураПараметров.ЕстьНДС                   = Ложь;

ЦеныРассчитаны  = ЗапасыСервер.ЗаполнитьЦеныВыделенныхСтрокПоРозничнымЦенам(СтруктураПараметров);

Возврат ЦеныРассчитаны;

КонецФункции




&НаКлиенте
Процедура ЗаполнитьЦеныВыделенныхСтрокПоРозничнымЦенам(Команда)

Если Объект.Товары.Количество() = 0 Тогда

ТекстПредупреждения = НСтр("ru='В документе не заполнена таблица %ПредставлениеТабличнойЧасти%. Цены не могут быть заполнены'");
ТекстПредупреждения = СтрЗаменить(ТекстПредупреждения, "%ПредставлениеТабличнойЧасти%", "Товары");
ПоказатьПредупреждение(,ТекстПредупреждения);
Возврат;
Иначе

Если ЗначениеЗаполнено(Объект.Магазин) Тогда

ЦеныРассчитаны = ЗаполнитьЦеныВыделенныхСтрокПоРозничнымЦенамСервер();
ЗапасыКлиент.ОповеститьОбОкончанииЗаполненияЦенПоРозничнымЦенам(ЦеныРассчитаны, Объект.Магазин);
ПересчитатьИлиОтменитьСкидки();

КонецЕсли;

КонецЕсли;

КонецПроцедуры



// Функция заполняет цену выделенных строк по розничным ценам в ТЧ Товары.
//
//  Возвращаемое значение - Булево - Цены рассчитаны.
&НаСервере
Функция ЗаполнитьЦеныВыделенныхСтрокПоРозничнымЦенамСервер()

СтруктураПараметров                                                = ЗапасыСервер.СтруктураПараметровЗаполненияПоРозничнымЦенам();
СтруктураПараметров.Объект                                         = Объект;
СтруктураПараметров.ИмяТабличнойЧасти                              = "Товары";
СтруктураПараметров.Магазин                                        = Объект.Магазин;
СтруктураПараметров.ВыделенныеСтроки                               = Элементы.Товары.ВыделенныеСтроки;
СтруктураПараметров.Дата                                           = ЗапасыСервер.ДатаДляЦенообразованияДляДокумента(Объект);
СтруктураПараметров.ЕстьНДС                                        = Истина;
СтруктураПараметров.ПриводитьКМинимальнойЦене                      = Истина;
СтруктураПараметров.НеобходимостьПересчетаСуммыСУчетомСкидок       = Истина;
СтруктураПараметров.ПересчитатьЦенуСУчетомАгентскогоВознаграждения = Истина;

ЦеныРассчитаны  = ЗапасыСервер.ЗаполнитьЦеныВыделенныхСтрокПоРозничнымЦенам(СтруктураПараметров);

ОбновитьИтоговыеПоказателиСервер();

Возврат ЦеныРассчитаны;

КонецФункции





LexaK

Ludmila_Dik, даа, без отладчика здесь не обойтись...
идея была такая скопировать процедуры расчета продажной цены
в них найти место где указывается Вид цены = Продажа и заменить его на Вид цены = Закупка
вызывать расчет с этими измененными процедурами
если помогло нажмите: Спасибо!

Теги:

Похожие темы (3)

Рейтинг@Mail.ru

Поиск