Автоматическая установка себестоимости номенклатуры для конфигурации Розница 2.0 (2.1) +Бонус, исправляем ошибки при настройке расписания запуска для внешних обработок в Рознице 2.0

Публикация № 269984 31.03.14

Разработка - Обработки - Ценообразование, прайсы

Обработка для автоматического создания документов Установка себестоимости, в случае если себестоимость не установлена на момент продажи. Помогает упростить установку себестоимости номенклатуры, если у вас в базе ведется учет по нескольким магазинам. Тестировалась на релизе  2.0.8.12 и 2.1.7.14. Подойдет для тех систем, где себестоимость номенклатуры одинакова для всех магазинов.

Идея по созданию обработки возникла после того, как клиент попросил разобраться с нулевой себестоимостью в отчете Оценка валовой прибыли.
Себестоимость номенклатуры в конфигурации Розница 2.0 (2.1) хранится в регистре сведений Себестоимость номенклатуры, регистраторами данного регистра являются следующие виды документов:
1) ВводНачальныхОстатковУзла
2) КорректировкаРегистров
3) ПоступлениеТоваров
4) УстановкаСебестоимости



Суть проблемы: Товар А поступает в Магазин А, через некоторое время по причине плохих продаж или ряда других причин Товар А перемещают в Магазин Б, при этом количество по регистрам остатков двигается верно, но себестоимость не передается из Магазина А в Магазин Б. В случае, если Товар А никогда ранее не поступал в Магазин Б (документом Поступление товаров, либо себестоимость не регистрировалась одниим из видов регистраторов указаных выше)  себестоимость для данного товара будет равна нулю при формирования отчета Оценка валовой прибыли. Та же проблема возникает в случае инвентаризации, когда оприходуют товар.


Принцип работы обработки: Анализируются продажи на наличие нулевой себестоимости по алгоритму взятому из отчета Оценка валовой прибыли. Если найдена продажа по нулевой себестоимости, то ищется ближайший к ней документ поступления на другой магазин и в случае нахождения такового создаются документы Установка себестоимости и помещаются в начало дня документа продажи.

Обработка содержит 3 команды:
1) Установить себестоимость. Позволяет задать расписание выполнения команды. При выполнении данной команды анализ продаж формируется за текущий день. Важно! Если у вас типовая конфигурация и вы не желаете снимать ее с поддержки, то работать по расписанию внешнюю обработку заставить не удастся, до момента выхода обновления конфигурации. Возможно, в Розница 2.1 это исправлено. Если только программно создать регламентное задание...
2) Установить себестоимость (без открытия формы обработки).  Команда может быть открыта пользователям для ручного запуска формирования себестоимости. При выполнении данной команды анализ продаж формируется за текущий день
3) Установить себестоимость (открыть форму обработки). Команда открывает форму обработки, где можно указать произвольный период анализа продаж.


Сделал я обработку, в интерактивном режиме все работает, но радоваться было рано. Пытаюсь настроить расписание работы. Сохраняю обработку, открываю ее, а расписание не сохраняется и соответственно регламентное задание не создается. Пришлось взять конфигурацию БСП версии 2.1.8.3 и вставлять из нее куски кода в бывшую когда-то типовой Розницу 2.0.8.12.
Повезло, что править пришлось только один общий модуль ДополнительныеОтчетыИОбработкиРегламентныеЗадания.
Процедуры, которые надо подправить:
1) НайтиЗадание
2) ПолучитьИдентификаторЗадания
3) ПолучитьПараметрыЗадания
4) СоздатьНовоеЗадание
5) УдалитьЗадание
6) УстановитьПараметрыЗадания

Так же подправил модуль формы элемента справочника ДополнительныеОтчетыИОбработки, что бы после сохранения обработки в колонке Расписания не пропадали данные (в конфигурации БСП 2.1.8.3 они пропадают), но если форму переоткрыть, все становится на свои места. Меня это напрягало и я в конец процедуры ПослеЗаписиНаСервередобавил вызов процедуры ЗаполнитьКоманды();

По сути, изменения сводятся к тому, что надо в вышеперечисленных процедурах к условию ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ДополнительныеОтчетыИОбработкиВМоделиСервиса")
добавить условие ОбщегоНазначенияПовтИсп.РазделениеВключено() и объеденить их оператором И.

Если ОбщегоНазначенияПовтИсп.РазделениеВключено()
			И ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ДополнительныеОтчетыИОбработкиВМоделиСервиса")


Код измененных процедур модуля ДополнительныеОтчетыИОбработкиРегламентныеЗадания. Извиняюсь за возможную корявость в оформлении кода. Замучился с встроенным редактором...

// Выполняет поиск задания по идентификатору (предположительно, сохраненному в данных
// информационной базы).
//
// Параметры: Идентификатор - УникальныйИдентификатор.
//
// Возвращаемое значение: РегламентноеЗадание.
//
Функция НайтиЗадание(Знач Идентификатор) Экспорт

    Если
ОбщегоНазначенияПовтИсп.РазделениеВключено()
            И
ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ДополнительныеОтчетыИОбработкиВМоделиСервиса") Тогда
       
Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ДополнительныеОтчетыИОбработкиРегламентныеЗаданияВМоделиСервиса");
        Возврат
Модуль.НайтиЗадание(Идентификатор);
    КонецЕсли;

    Если НЕ
ЗначениеЗаполнено(Идентификатор) Тогда
        Возврат Неопределено;
    КонецЕсли;

   
УстановитьПривилегированныйРежим(Истина);

   
Задание = РегламентныеЗадания.НайтиПоУникальномуИдентификатору(Идентификатор);

    Возврат
Задание;

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


// Возвращает идентификатор регламентного задания (для сохранения в данных информационной базы).
//
// Задание - РегламентноеЗадание.
//
// Возвращаемое значение: УникальныйИдентификатор.
//
Функция ПолучитьИдентификаторЗадания(Знач Задание) Экспорт

    Если
ОбщегоНазначенияПовтИсп.РазделениеВключено() И
       
ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ДополнительныеОтчетыИОбработкиВМоделиСервиса") Тогда
       
Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ДополнительныеОтчетыИОбработкиРегламентныеЗаданияВМоделиСервиса");
        Возврат
Модуль.ПолучитьИдентификаторЗадания(Задание);
    КонецЕсли;

    Возврат
Задание.УникальныйИдентификатор;

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


// Возвращает параметры регламентного задания.
//
// Параметры:
//  Задание - РегламентноеЗадание.
//
// Возвращаемое значение: Структура, ключи:
//  Использование - булево, флаг использования регламентного задания,
//  Наименование - строка, наименование регламентного задания,
//  Параметры - Массив(Произвольный), параметры регламентного задания,
//  Расписание - РасписаниеРегламентногоЗадания.
//
Функция ПолучитьПараметрыЗадания(Знач Задание) Экспорт

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

   
Результат = Новый Структура();
   
Результат.Вставить("Использование", Задание.Использование);
   
Результат.Вставить("Наименование", Задание.Наименование);
   
Результат.Вставить("Параметры", Задание.Параметры);
   
Результат.Вставить("Расписание", Задание.Расписание);

    Возврат
Результат;

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


////////////////////////////////////////////////////////////////////////////////
// Подсистема "Дополнительные отчеты и обработки", процедуры и функции по управлению
// регламентными заданиями.
//
////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////
// ПРОГРАММНЫЙ ИНТЕРФЕЙС

// Создает новое регламентное задание в информационной базе.
//
// Параметры:
//  Наименование - строка, наименование регламентного задания.
//
// Возвращаемое значение: РегламентноеЗадание.
//
Функция СоздатьНовоеЗадание(Знач Наименование) Экспорт


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

   
Задание = РегламентныеЗадания.СоздатьРегламентноеЗадание("ЗапускДополнительныхОбработок");
   
Задание.Использование = Ложь;
   
Задание.Наименование  = Наименование;
   
Задание.Записать();

    Возврат
Задание;

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


// Удаляет регламентное задание из информационной базы.
//
// Параметры:
// Задание - РегламентноеЗадание.
//
Процедура УдалитьЗадание(Знач Задание) Экспорт

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

    Если
ТипЗнч(Задание) = Тип("РегламентноеЗадание") Тогда
       
Задание.Удалить();
    КонецЕсли;

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


// Устанавливает параметры регламентного задания.
//
// Параметры:
//  Задание - РегламентноеЗадание,
//  Использование - булево, флаг использования регламентного задания,
//  Наименование - строка, наименование регламентного задания,
//  Параметры - Массив(Произвольный), параметры регламентного задания,
//  Расписание - РасписаниеРегламентногоЗадания.
//
Процедура УстановитьПараметрыЗадания(Задание, Использование, Наименование, Параметры, Расписание) Экспорт

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

   
Задание.Использование = Использование;
   
Задание.Наименование  = Наименование;
   
Задание.Параметры     = Параметры;
   
Задание.Расписание    = Расписание;

   
Задание.Записать();

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

Скачать файлы

Наименование Файл Версия Размер
УстановкаСебестоиомостиНоменклатуры.epf

.epf 10,30Kb
74
.epf 10,30Kb 74 Скачать

Специальные предложения

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. kosovets2014 15.04.14 21:10 Сейчас в теме
скачал обработку. В версии 2.0.5.3 не работает. Создает документ с названием товара, но с пустой ценой. Что делать?
2. sanches 253 16.04.14 07:16 Сейчас в теме
(1) kosovets2014, можете скинуть скриншот записей регистра себестоимость номенклатуры для одной из номенклатур в документе установка себестоимости, который создала обработка?
3. kosovets2014 16.04.14 21:59 Сейчас в теме
Для sanches. Немного затупил. Регистр с себестоимостью пустой. Себестоимость должна была передаваться с управляющей системы из УТ11.1, но нормально не синхронизируется. Может можно что бы себестоимость в документе "Установка себестоимости" бралась из справочника номенклатура - цена закупочная последняя по дате поступления. Скрин справочника прилагаю. Если нужно - доплачу.
Прикрепленные файлы:
5. sanches 253 17.04.14 09:55 Сейчас в теме
(3) kosovets2014, у вас поступления товаров вообще не формируют записей в регистр себестоимость номенклатуры?
4. kosovets2014 16.04.14 22:01 Сейчас в теме
Забыл уточнить - по дате и по времени поступления()
6. levinside 17.10.14 01:03 Сейчас в теме
1С:Предприятие 8.3 (8.3.4.389)
Конфигурация Розница, редакция 2.1 (2.1.2.5)

Пробую запустить - выдает: Поле объекта недоступно для записи (ЭтотОбъект)
В коде 1С никогда не копался.
Искать программиста или кто-то сможет подсказать как заставить эту штуку работать?
7. sanches 253 18.10.14 19:08 Сейчас в теме
(6) levinside, вы ее подключили как внешнюю обработку?
Я не проверял ее работоспособность в 2.1 рознице. Может там что-то по другому нежели в 2.0
У самого уже с полгода работает в автоматическом режиме.
9. Fyodorovn 05.02.15 06:07 Сейчас в теме
(7) и что же делать, если я тоже приобрел данную обработку за 1$m? Но она не работает также как и у levinside
10. sanches 253 05.02.15 07:51 Сейчас в теме
(9) Fyodorovn, я посмотрю как она работает в рознице 2.1, но в заголовке я нарочно указал что именно в 2.0 проверена работоспособность данной обработки
8. Dima_ 140 11.11.14 12:21 Сейчас в теме
Добрый день!
Использую Вашу обработку, получилась ситуация:
При оформлении перемещения из Магазина А в Магазин Б Товара Т по себестоимости 1 р. обработка поставит для Товара Т в Магазине Б себестоимость 1 р. При следующем поступлении в Магазин А Товара Т по другой цене, например, 1.5 р. и его перемещением в Магазин Б, себестоимость Товара Т в Магазине Б останется 1 р. Новая себестоимость с даты перемещения не устанавливается.
Может я что-то не так делал?

Мной написана Обработка, которая обрабатывает каждый документ перемещения.
От Вашей обработки пришлось отказаться, т.к. у меня она не корректно работает.
Посмотрите, может пригодится.
11. sanches 253 23.04.15 21:38 Сейчас в теме
Исправил ошибку при формировании обработки в Розница 2.1
12. maksal 24.05.15 20:51 Сейчас в теме
Странно, столкнулся с такой же проблемой в УТ.

"Сохраняю обработку, открываю ее, а расписание не сохраняется и соответственно регламентное задание не создается."
Power_0N; +1 Ответить
13. sanches 253 27.05.15 21:37 Сейчас в теме
(12) AleSeMa, может там такая же проблема что и в рознице. Не проверял.
Можно попробовать обновить до последней
14. bulpi 184 17.09.15 20:07 Сейчас в теме
ЭЭЭЭ.....
А не проще было исправить отчет "Оценка валовой прибыли " ????
15. Светлый ум 270 05.01.19 12:49 Сейчас в теме
- Вырезал себе кусок с программным созданием документа Установка цен
+1

(вкручу его в свой Конструктор номенклатуры, для Розницы_2)
https://infostart.ru/public/930129/
Оставьте свое сообщение

См. также

Универсальная выгрузка/загрузка данных для отличающихся конфигураций (JSON, Такси+ОФ) Промо

Перенос данных из 1C8 в 1C8 Универсальные обработки Распределенная БД (УРИБ, УРБД) v8 1cv8.cf Абонемент ($m)

Простой перенос через JSON данных между двумя базами 1С (документов, справочников, ПВХ, ПВР, счетов). Аналогична произвольной выгрузке в типовой "Выгрузка/загрузка XML", но может использоваться для отличающихся конфигураций. Подходит для любых пар баз с любым интерфейсом (управляемый + обычный). Без настроек. Не требует идентичности конфигураций и платформ. При переносе типы данных сопоставляются по наименованиям метаданных, объекты и ссылки по UID.

1 стартмани

22.10.2014    219746    4329    ekaruk    184    

Загрузка данных из 1С МиниДеньги в 1С:Деньги 8, редакция 2.0

Обмен через XML Перенос данных из 1C8 в 1C8 v8 Домашние учет и финансы УУ Абонемент ($m)

Обработка для первоначальной загрузки данных (справочников и операций) в настольную программу 1С:Деньги 8, редакция 2.0 из файлы резервной копии мобильной программы 1С Миниденьги.

2 стартмани

01.10.2015    16615    15    Claus32    5    

Редактор чеков ККМ Розница 2.0 - 2.3

Обработка документов Кассовые операции Розничная торговля Кассовые операции Розничная торговля v8 Розница Розничная и сетевая торговля (FMCG) Рестораны, кафе и фаст-фуд БУ НУ Абонемент ($m)

Обработка чеков ККМ списком (редактирование, удаление, ...). Переформирование ОРП, связь чеков с ОРП. Редактирование времени КС. Редактирование суммы и времени выемки.

1 стартмани

06.08.2015    57976    546    Dima_    83    

Загрузка из Excel в 1С:Розница

Обработка документов Обработка справочников Загрузка и выгрузка в Excel Учет ТМЦ Учет ТМЦ v8 Розница Россия УУ Абонемент ($m)

Универсальная загрузка Excel файлов в 1С:Розница 2.0

1 стартмани

27.05.2015    15793    110    KarinaSV    7    

Автоматическая установка себестоимости номенклатуры для конфигурации Розница 2.0 (2.1) +Бонус, исправляем ошибки при настройке расписания запуска для внешних обработок в Рознице 2.0

Ценообразование, прайсы Обработка документов Розничная торговля Ценообразование, анализ цен Розничная торговля Ценообразование, анализ цен v8 Розница Розничная и сетевая торговля (FMCG) Россия УУ Абонемент ($m)

Обработка для автоматического создания документов Установка себестоимости, в случае если себестоимость не установлена на момент продажи. Помогает упростить установку себестоимости номенклатуры, если у вас в базе ведется учет по нескольким магазинам. Тестировалась на релизе 2.0.8.12 и 2.1.7.14. Подойдет для тех систем, где себестоимость номенклатуры одинакова для всех магазинов.

1 стартмани

31.03.2014    28571    74    sanches    15    

Выемка денежных средств из КассыККМ. Розница 2.0

Кассовые операции ККМ Кассовые операции v8 Розница УУ Абонемент ($m)

Уставшим от отсутствия ВыемкиДС после закрытия кассовой смены посвящается. Подключаемая обработка. Управляемый интерфейс.

1 стартмани

12.12.2012    79182    527    StepByStep    40