С Новым годом! Форум программистов, компьютерный форум, киберфорум
1С: Собственные программы
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.94/88: Рейтинг темы: голосов - 88, средняя оценка - 4.94
0 / 0 / 0
Регистрация: 03.04.2015
Сообщений: 5
1

Программная отмена проведения

22.07.2015, 10:37. Показов 16675. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте. При проведении документа необходимо контролировать наличие остатков товара на складе. Если количества для списания не хватает, не проводить документ и выдавать сообщение пользователю, какого товара не хватает, сколько не хватает и какой фактический остаток на складе.
Застрял в самом начале, как и в каком месте отменить проведение документа? Пробовал в процедуру ПередЗаписью
в модуле объекта документа и в модуле формы документа писать код:
1C
1
2
3
4
5
6
&НаСервереБезКонтекста
Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
    Если Элементы.Товары.Количество > 1 Тогда
    СписаниеТоваров.Записать(РежимЗаписиДокумента.ОтменаПроведения);
    КонецЕсли;
КонецПроцедуры
СписаниеТоваров - это называние документа. Количество товаров в документе = 600. Документ проводится и записывается без проблем, а мне нужно это действие при определенных условиях запретить.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.07.2015, 10:37
Ответы с готовыми решениями:

Отмена проведения проведённого документа
Всем привет! Пытаюсь сделать запрет на проведение уже проведённого ранее документа. Почитала,...

Отмена проведения документа при недостатке на складе. с учетом перепроведения
В 1С пару недель. Был диск с 1С 2013 года, там код работал, скачал с сайта новый конфигуратор,...

Отмена проведения ТТН Егаис Поставщиком через Веб интерфейс УТМ
Добрый день уважаемые форумчане !!! :senor: Прошу помощи у Гуру ... За вознаграждение конечно ......

Отмена проведения неактивна
Значит так: Наши программеры сделали чтобы мы пользователи после проведения документа, не могли...

8
Эксперт 1С
476 / 413 / 93
Регистрация: 26.09.2012
Сообщений: 1,920
22.07.2015, 12:57 2
В параметрах есть такая штука как отказ "Отказ", в данном случае чтобы документ не записывался нужно написать
1C
1
Отказ = Истина;
Если конкретно по задаче, то это нужно сделать в модуле документа, там есть процедура обработка проведения.
Вложение 556435
Там где 1 - правой кнопкой, открыть модуль объекта.
Там где 2 - Стрелка вниз, обработкаПроведения

А вообще это уровень первой задачи из сборника задач к специалисту по платформе. Поройте в нете есть решение, с контролем остатков
1
0 / 0 / 0
Регистрация: 03.04.2015
Сообщений: 5
22.07.2015, 13:09  [ТС] 3
Да, я уже это понял на счет Отказ=Истина. Но все равно спасибо. Теперь не понятно как сравнить в модуле объекта документа данные из его таблицы и таблицы другого документа Элементы.Товары.ТекущиеДанные.Количество и ДокументОбъект....Количество кажется не подходят
0
Злой самаритянин
182 / 182 / 94
Регистрация: 24.04.2014
Сообщений: 686
22.07.2015, 14:33 4
Ничего_не_знаю, Запросом из регистра сумму выбирать надо и сравнивать.
1
Эксперт 1С
476 / 413 / 93
Регистрация: 26.09.2012
Сообщений: 1,920
22.07.2015, 16:05 5
Я бы порекомендовал прочитать какую нибудь книгу для начинающих, там начало хорошо расписано. Или походить на курсы по азам программирования, т.к насколько я разобрался вы не совсем разобрались даже в концептуальных вопросах.

По задаче. У вас должно быть два документа поступление товаров и Списание товаров, который должны двигать регистр например "Остатки", вот их с помощью запроса можно вытащить из него. Причем сейчас, практикуется вариант контроля, который записывает движения документа а затем смотрит есть ли отрицательные остатки, если есть то пишем Отказ = Истина;

Добавлено через 29 минут
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
Процедура ОбработкаПроведения(Отказ, Режим)
    //проверить учетную политику 
    МетодСписания = РегистрыСведений.УчетнаяПолитика.ПолучитьПоследнее(Дата).МетодСписания;
    Если МетодСписания.Пустая() Тогда 
        Сообщить("Учетная политика не определена!");
        Отказ = Истина;
        Возврат;
    КонецЕсли;
    //определить какую сортировку применять для списка партий. если ФИФО то УБЫВ
    Сортировка = ?(МетодСписания = Перечисления.УчетнаяПолитика.ФИФО, "", " УБЫВ");
    
    Движения.Продажи.Записывать = Истина;
    Движения.ОстаткиНоменклатуры.Записывать = Истина;
    
    //убираем старые остатки
    Движения.ОстаткиНоменклатуры.Записать();
    
    //блокировки данных
    Блокировка = Новый БлокировкаДанных;
    ЭлементБлокировки = Блокировка.Добавить("РегистрНакопления.ОстаткиНоменклатуры");
    ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
    ЭлементБлокировки.ИсточникДанных = СписокНоменклатуры;
    ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Номенклатура", "Номенклатура");
    Блокировка.Заблокировать();
    /////////////////////////////////////////
    
    
    //запрос здесь не меняется, даже если метод списания Посредней, так как при установке списания по средней
    //в приходной накладной не записывается партия, а это значит она не будет указываться при списании
    Запрос = Новый Запрос;
    Запрос.Текст = 
    "ВЫБРАТЬ
    |   РасходнаяНакладнаяСписокНоменклатуры.Номенклатура,
    |   СУММА(РасходнаяНакладнаяСписокНоменклатуры.Количество) КАК Количество,
    |   РасходнаяНакладнаяСписокНоменклатуры.Номенклатура.ВидНоменклатуры КАК ВидНоменклатуры,
    |   СУММА(РасходнаяНакладнаяСписокНоменклатуры.Сумма) КАК Сумма
    |ПОМЕСТИТЬ Расходная
    |ИЗ
    |   Документ.РасходнаяНакладная.СписокНоменклатуры КАК РасходнаяНакладнаяСписокНоменклатуры
    |ГДЕ
    |   РасходнаяНакладнаяСписокНоменклатуры.Ссылка.Ссылка = &Ссылка
    |
    |СГРУППИРОВАТЬ ПО
    |   РасходнаяНакладнаяСписокНоменклатуры.Номенклатура,
    |   РасходнаяНакладнаяСписокНоменклатуры.Номенклатура.ВидНоменклатуры
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ
    |   Расходная.Номенклатура КАК Номенклатура,
    |   Расходная.Количество КАК Количество,
    |   Расходная.ВидНоменклатуры КАК ВидНоменклатуры,
    |   Расходная.Сумма КАК Сумма,
    |   ОстаткиНоменклатурыОстатки.Партия,
    |   ЕСТЬNULL(ОстаткиНоменклатурыОстатки.КоличествоОстаток, 0) КАК КоличествоОстаток,
    |   ЕСТЬNULL(ОстаткиНоменклатурыОстатки.СтоимостьОстаток, 0) КАК СтоимостьОстаток
    |ИЗ
    |   Расходная КАК Расходная
    |       ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиНоменклатуры.Остатки(
    |               &МоментВремени,
    |               Номенклатура В
    |                   (ВЫБРАТЬ
    |                       Расходная.Номенклатура
    |                   ИЗ
    |                       Расходная)) КАК ОстаткиНоменклатурыОстатки
    |       ПО Расходная.Номенклатура = ОстаткиНоменклатурыОстатки.Номенклатура
    |
    |УПОРЯДОЧИТЬ ПО
    |   ОстаткиНоменклатурыОстатки.Партия.МоментВремени"+ Сортировка +"
    |ИТОГИ
    |   МАКСИМУМ(Количество),
    |   МАКСИМУМ(ВидНоменклатуры),
    |   МАКСИМУМ(Сумма),
    |   СУММА(КоличествоОстаток),
    |   СУММА(СтоимостьОстаток)
    |ПО
    |   Номенклатура";
    Запрос.УстановитьПараметр("Ссылка",Ссылка);
    Запрос.УстановитьПараметр("МоментВремени",МоментВремени());
    Результат = Запрос.Выполнить();
    
    Выборка = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
    Пока Выборка.Следующий() Цикл 
        Если (Выборка.ВидНоменклатуры = Перечисления.ВидыНоменклатуры.Товар) И (Выборка.Количество > Выборка.КоличествоОстаток) Тогда 
            Сообщить("Не хватает "+ Строка(Выборка.Количество - Выборка.КоличествоОстаток)+" ед. "+Строка(Выборка.Номенклатура));
            Отказ = Истина;
        КонецЕсли;
        
        Если Отказ Тогда 
            Продолжить;
        КонецЕсли;
        
        Себестоимость = 0;
        
        Если Выборка.ВидНоменклатуры = Перечисления.ВидыНоменклатуры.Товар Тогда 
            ОсталосьСписать = Выборка.Количество;
            ВыборкаДетали = Выборка.Выбрать();
            Пока ОсталосьСписать > 0 И ВыборкаДетали.Следующий() Цикл 
                Списываем = Мин(ОсталосьСписать, ВыборкаДетали.КоличествоОстаток);
                
                 // регистр ОстаткиНоменклатуры Расход
                Движение = Движения.ОстаткиНоменклатуры.Добавить();
                Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
                Движение.Период = Дата;
                Движение.Номенклатура = ВыборкаДетали.Номенклатура;
                Движение.Партия = ВыборкаДетали.Партия;
                Движение.Количество = Списываем;
                Движение.Стоимость = (Списываем * ВыборкаДетали.СтоимостьОстаток / ВыборкаДетали.КоличествоОстаток);
                
                Себестоимость = Себестоимость + Движение.Стоимость;
                
                ОсталосьСписать = ОсталосьСписать - Списываем;
            КонецЦикла;
        КонецЕсли;
        Движение = Движения.Продажи.Добавить();
        Движение.Период = Дата;
        Движение.Номенклатура = Выборка.Номенклатура;
        Движение.Количество = Выборка.Количество;
        Движение.Продажа = Выборка.Сумма;
        Движение.Себестоимость = Себестоимость;       
    КонецЦикла;
КонецПроцедуры
Это вот по старой технологии
1
0 / 0 / 0
Регистрация: 03.04.2015
Сообщений: 5
23.07.2015, 08:11  [ТС] 6
Joker_vad, да уже читал, ходил, смотрел, делал как написано... все бестолку. И тестовое задание завалил на стажировке, там оно кстати ещё сложнее этого. Видимо не всем это дано. То что Вы написали для меня как китайский язык, я представлял все намного проще, типа сравнить два значения и если они равны то запретить проведение :-\.
0
Злой самаритянин
182 / 182 / 94
Регистрация: 24.04.2014
Сообщений: 686
23.07.2015, 08:35 7
Ничего_не_знаю, начни с этого http://www.v8.1c.ru/metod/books/book.jsp?id=187
0
Эксперт 1С
476 / 413 / 93
Регистрация: 26.09.2012
Сообщений: 1,920
24.07.2015, 12:41 8
Ничего_не_знаю, наверно запутал вас этим куском текста, там идет списание по партиям. Встроенный язык в 1с легкий, главное запомнить некоторые вещи и все, почитайте книжку, поделайте учебные задачки и все получится
1
32 / 32 / 9
Регистрация: 15.02.2010
Сообщений: 215
29.07.2015, 13:47 9
В настройках УТ есть запрет списания в минус. В настройках пользователя или учета.
Если запрет не установлен выдается уведомление внизу "Не списано то то столько нет на складе" но док проводится в минус.
Если запрет установлен выдается сообщение и док-т не проводится.
Зачем велосипед изобретать?
0
29.07.2015, 13:47
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
29.07.2015, 13:47
Помогаю со студенческими работами здесь

Теория, документы, отмена проведения
Здрасте! Скажите пожалуйста, как поступают в таких случаях. К примеру провели два документа прихода...

1c v8.x Отмена проведения документа
Подскажите такой момент, мне нужно при отмене проведения документа перепровести некоторые другие....

Отмена проведения согласованного документа
Всем добрый день. Конфа "Медицина. Больничная аптека, редакция 1.1 (1.1.7.3)". Есть...

Манипуляция Проведением/Отмена проведения
Ребят, доброго дня! У меня вопрос по поводу Проведения и Отмены проведения...например: если мы...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Блоги программистов
Как перейти с Options API на Composition API в Vue.js
BasicMan 06.01.2025
Почему переход на Composition API актуален В мире современной веб-разработки фреймворк Vue. js продолжает эволюционировать, предлагая разработчикам все более совершенные инструменты для создания. . .
Архитектура современных процессоров
inter-admin 06.01.2025
Процессор (центральный процессор, ЦП) является основным вычислительным устройством компьютера, которое выполняет обработку данных и управляет работой всех остальных компонентов системы. Архитектура. . .
История создания реляционной модели баз данных, правила Кодда
Programming 06.01.2025
Предпосылки создания реляционной модели В конце 1960-х годов компьютерная индустрия столкнулась с серьезными проблемами в области управления данными. Существовавшие на тот момент модели данных -. . .
Полезные поделки на Arduino, которые можно сделать самому
raxper 06.01.2025
Arduino как платформа для творчества Arduino представляет собой удивительную платформу для технического творчества, которая открывает безграничные возможности для создания уникальных проектов. Эта. . .
Подборка решений задач на Python
IT_Exp 06.01.2025
Целью данной подборки является предоставление возможности ознакомиться с различными задачами и их решениями на Python, что может быть полезно как для начинающих, так и для опытных программистов. . . .
С чего начать программировать микроконтроллер­­ы
raxper 06.01.2025
Введение в мир микроконтроллеров Микроконтроллеры стали неотъемлемой частью современного мира, окружая нас повсюду: от простых бытовых приборов до сложных промышленных систем. Эти маленькие. . .
Из чего собрать игровой компьютер
inter-admin 06.01.2025
Сборка игрового компьютера требует особого внимания к выбору комплектующих и их совместимости. Правильно собранный игровой ПК не только обеспечивает комфортный геймплей в современных играх, но и. . .
Обновление сайта www.historian.b­y
Reglage 05.01.2025
Обещал подвести итоги 2024 года для сайта. Однако начну с того, что изменилось за неделю. Добавил краткий урок по последовательности действий при анализе вредоносных файлов и значительно улучшил урок. . .
Как использовать GraphQL в C# с HotChocolate
Programming 05.01.2025
GraphQL — это современный подход к разработке API, который позволяет клиентам запрашивать только те данные, которые им необходимы. Это делает взаимодействие с API более гибким и эффективным по. . .
Модель полного двоичного сумматора с помощью логических операций (python)
AlexSky-coder 04.01.2025
def binSum(x:list, y:list): s=^y] p=x and y for i in range(1,len(x)): s. append((x^y)^p) p=(x and y)or(p and (x or y)) return s x=list() y=list()
Это мы не проходили, это нам не задавали...(аси­­­­­­­­­­­­­­­­­­­­­­­­­­х­р­о­н­­н­­­ы­­й счётчик с управляющим сигналом зад
Hrethgir 04.01.2025
Асинхронный счётчик на сумматорах (шестиразрядный по числу диодов на плате, но наверное разрядов будет больше - восемь или шестнадцать, а диоды на старшие), так как триггеры прошли тестирование и. . .
Руководство по созданию бота для Телеграм на Python
IT_Exp 04.01.2025
Боты для Телеграм представляют собой автоматизированные программы, которые выполняют различные задачи, взаимодействуя с пользователями через интерфейс мессенджера. В данной статье мы рассмотрим,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru